ggplot2/0000755000175100001440000000000012634752653011663 5ustar hornikusersggplot2/inst/0000755000175100001440000000000012634007745012633 5ustar hornikusersggplot2/inst/staticdocs/0000755000175100001440000000000012567665533015005 5ustar hornikusersggplot2/inst/staticdocs/head.html0000644000175100001440000000203512302672540016553 0ustar hornikusers {{pagetitle}}. {{#package}}{{package}} {{version}}{{/package}} ggplot2/inst/staticdocs/README.md0000644000175100001440000000000012302727376016241 0ustar hornikusersggplot2/inst/staticdocs/footer.html0000644000175100001440000000064412302672540017154 0ustar hornikusers

Back to top

What do you think of the documentation? Please let me know by filling out this short online survey.

Built by staticdocs. Styled with bootstrap.

ggplot2/inst/staticdocs/icons.R0000644000175100001440000003152612567665533016252 0ustar hornikusers# Coords ----------------------------------------------------------------------- coord_cartesian <- sd_icon({ gTree(children = gList( segmentsGrob( c(0, 0.25), c(0.25, 0), c(1, 0.25), c(0.25, 1), gp = gpar(col = "grey50", lwd = 0.5) ), segmentsGrob( c(0, 0.75), c(0.75, 0), c(1, 0.75), c(0.75, 1), gp = gpar(col = "grey50", lwd = 0.5) ), segmentsGrob(c(0, 0.5), c(0.5, 0), c(1, 0.5), c(0.5, 1)) )) }) coord_fixed <- sd_icon({ textGrob("=", gp = gpar(cex = 3)) }) coord_flip <- sd_icon({ angles <- seq(0, pi / 2, length.out = 20)[-c(1, 20)] gTree(children = gList( segmentsGrob(0, 0, 0, 1), segmentsGrob(0, 0, 1, 0), linesGrob(0.9 * sin(angles), 0.9 * cos(angles), arrow = arrow(length = unit(0.05, "npc"))), linesGrob( 0.5 * sin(angles), 0.5 * cos(angles), arrow = arrow(ends = "first", length = unit(0.05, "npc")) ) )) }) library(maps) coord_map <- sd_icon({ nz <- data.frame(map("nz", plot = FALSE)[c("x", "y")]) nz$x <- nz$x - min(nz$x, na.rm = TRUE) nz$y <- nz$y - min(nz$y, na.rm = TRUE) nz <- nz / max(nz, na.rm = TRUE) linesGrob(nz$x, nz$y, default.units = "npc") }) coord_polar <- sd_icon({ circleGrob(r = c(0.1, 0.25, 0.45), gp = gpar(fill = NA)) }) coord_transform <- sd_icon({ breaks <- cumsum(1 / 2 ^ (1:5)) gTree(children = gList( segmentsGrob(breaks, 0, breaks, 1), segmentsGrob(0, breaks, 1, breaks) )) }) # Faceting --------------------------------------------------------------------- facet_grid <- sd_icon({ gTree(children = gList( rectGrob( 0, 1, width = 0.95, height = 0.05, hjust = 0, vjust = 1, gp = gpar(fill = "grey60", col = NA) ), rectGrob( 0.95, 0.95, width = 0.05, height = 0.95, hjust = 0, vjust = 1, gp = gpar(fill = "grey60", col = NA) ), segmentsGrob(c(0, 0.475), c(0.475, 0), c(1, 0.475), c(0.475, 1)) )) }) facet_null <- sd_icon({ gTree(children = gList( rectGrob( 0, 1, width = 0.95, height = 0.05, hjust = 0, vjust = 1, gp = gpar(fill = "grey60", col = NA) ), rectGrob( 0.95, 0.95, width = 0.05, height = 0.95, hjust = 0, vjust = 1, gp = gpar(fill = "grey60", col = NA) ), segmentsGrob(c(0, 0.475), c(0.475, 0), c(1, 0.475), c(0.475, 1)) )) }) # Geoms ------------------------------------------------------------------------ geom_abline <- sd_icon(linesGrob(c(0, 1), c(0.2, 0.8))) geom_bar <- sd_icon({ rectGrob( c(0.3, 0.7), c(0.4, 0.8), height = c(0.4, 0.8), width = 0.3, vjust = 1, gp = gpar(fill = "grey20", col = NA) ) }) geom_histogram <- sd_icon({ y <- c(0.2, 0.3, 0.5, 0.6, 0.2, 0.8, 0.5, 0.3) rectGrob( seq(0.1, 0.9, by = 0.1), y, height = y, width = 0.1, vjust = 1, gp = gpar(fill = "grey20", col = NA) ) }) geom_boxplot <- sd_icon({ gTree(children = gList( segmentsGrob(c(0.3, 0.7), c(0.1, 0.2), c(0.3, 0.7), c(0.7, 0.95)), rectGrob( c(0.3, 0.7), c(0.6, 0.8), width = 0.3, height = c(0.4, 0.4), vjust = 1 ), segmentsGrob(c(0.15, 0.55), c(0.5, 0.6), c(0.45, 0.85), c(0.5, 0.6)) )) }) geom_crossbar <- sd_icon({ gTree(children = gList( rectGrob( c(0.3, 0.7), c(0.6, 0.8), width = 0.3, height = c(0.4, 0.4), vjust = 1 ), segmentsGrob(c(0.15, 0.55), c(0.5, 0.6), c(0.45, 0.85), c(0.5, 0.6)) )) }) geom_dotplot <- sd_icon({ xpos <- c(1, 1, 2, 3, 3, 3, 4, 4, 5, 5, 5, 5, 6, 7, 7, 7, 8, 8, 9) / 10 ypos <- c(1, 2, 1, 1, 2, 3, 1, 2, 1, 2, 3, 4, 1, 1, 2, 3, 1, 2, 1) / 10 pointsGrob( x = xpos, y = ypos, pch = 19, size = unit(.1, "npc"), gp = gpar(col = "black", cex = 0.5), default.units = "npc" ) }) geom_errorbar <- sd_icon({ gTree(children = gList( segmentsGrob(c(0.3, 0.7), c(0.3, 0.5), c(0.3, 0.7), c(0.7, 0.9)), segmentsGrob(c(0.15, 0.55), c(0.3, 0.5), c(0.45, 0.85), c(0.3, 0.5)), segmentsGrob(c(0.15, 0.55), c(0.7, 0.9), c(0.45, 0.85), c(0.7, 0.9)) )) }) geom_errorbarh <- sd_icon({ gTree(children = gList( segmentsGrob(c(0.5, 0.3), c(0.70, 0.30), c(0.9, 0.7), c(0.70, 0.30)), segmentsGrob(c(0.5, 0.3), c(0.55, 0.15), c(0.5, 0.3), c(0.85, 0.45)), segmentsGrob(c(0.9, 0.7), c(0.55, 0.15), c(0.9, 0.7), c(0.85, 0.45)) )) }) geom_freqpoly <- sd_icon({ y <- c(0.2, 0.3, 0.5, 0.6, 0.2, 0.8, 0.5, 0.3) linesGrob(seq(0.1, 0.9, by = 0.1), y, gp = gpar(col = "grey20")) }) geom_hline <- sd_icon({ linesGrob(c(0, 1), c(0.5, 0.5)) }) geom_linerange <- sd_icon({ segmentsGrob(c(0.3, 0.7), c(0.1, 0.2), c(0.3, 0.7), c(0.7, 0.95)) }) geom_path <- sd_icon({ linesGrob(c(0.2, 0.4, 0.8, 0.6, 0.5), c(0.2, 0.7, 0.4, 0.1, 0.5)) }) geom_contour <- sd_icon({ gTree(children = gList(polygonGrob( c(0.45, 0.5, 0.6, 0.5), c(0.5, 0.4, 0.55, 0.6) ), polygonGrob( c(0.25, 0.6, 0.8, 0.5), c(0.5, 0.2, 0.75, 0.9), gp = gpar(fill = NA) ))) }) geom_density2d <- sd_icon(inherit = "geom_contour") geom_line <- sd_icon({ pos <- seq(0, 1, length.out = 5) linesGrob(pos, c(0.2, 0.7, 0.4, 0.8, 0.3)) }) geom_step <- sd_icon({ n <- 15 xs <- rep(0:n, each = 2)[-2 * (n + 1)] / 15 ys <- c(0, rep(1:n, each = 2)) / 15 linesGrob(xs, ys, gp = gpar(col = "grey20")) }) geom_point <- sd_icon({ pos <- seq(0.1, 0.9, length.out = 6) pointsGrob( x = pos, y = pos, pch = 19, gp = gpar(col = "black", cex = 0.5), default.units = "npc" ) }) geom_jitter <- sd_icon({ pos <- seq(0.1, 0.9, length.out = 6) pointsGrob( x = pos, y = jitter(pos, 3), pch = 19, gp = gpar(col = "black", cex = 0.5), default.units = "npc" ) }) geom_pointrange <- sd_icon({ gTree(children = gList( segmentsGrob(c(0.3, 0.7), c(0.1, 0.2), c(0.3, 0.7), c(0.7, 0.95)), pointsGrob( c(0.3, 0.7), c(0.4, 0.6), pch = 19, gp = gpar(col = "black", cex = 0.5), default.units = "npc" ) )) }) geom_polygon <- sd_icon({ polygonGrob( c(0.1, 0.4, 0.7, 0.9, 0.6, 0.3), c(0.5, 0.8, 0.9, 0.4, 0.2, 0.3), gp = gpar(fill = "grey20", col = NA) ) }) geom_quantile <- sd_icon({ gTree(children = gList(linesGrob( c(0, 0.3, 0.5, 0.8, 1), c(0.8, 0.65, 0.6, 0.6, 0.8) ), linesGrob( c(0, 0.3, 0.5, 0.8, 1), c(0.55, 0.45, 0.5, 0.45, 0.55) ), linesGrob( c(0, 0.3, 0.5, 0.8, 1), c(0.3, 0.25, 0.4, 0.3, 0.2) ))) }) geom_raster <- sd_icon({ rectGrob( c(0.25, 0.25, 0.75, 0.75), c(0.25, 0.75, 0.75, 0.25), width = 0.5, height = c(0.67, 0.5, 0.67, 0.5), gp = gpar(col = "grey20", fill = c('#804070', '#668040')) ) }) geom_rect <- sd_icon({ rectGrob( c(0.3, 0.7), c(0.4, 0.8), height = c(0.4, 0.8), width = 0.3, vjust = 1, gp = gpar(fill = "grey20", col = NA) ) }) geom_ribbon <- sd_icon({ polygonGrob( c(0, 0.3, 0.5, 0.8, 1, 1, 0.8, 0.5, 0.3, 0), c(0.5, 0.3, 0.4, 0.2, 0.3, 0.7, 0.5, 0.6, 0.5, 0.7), gp = gpar(fill = "grey20", col = NA) ) }) geom_area <- sd_icon({ polygonGrob(c(0, 0, 0.3, 0.5, 0.8, 1, 1), c(0, 1, 0.5, 0.6, 0.3, 0.8, 0), gp = gpar(fill = "grey20", col = NA)) }) geom_density <- sd_icon({ x <- seq(0, 1, length.out = 80) y <- dnorm(x, mean = 0.5, sd = 0.15) linesGrob(x, 0.05 + y / max(y) * 0.9, default.units = "npc") }) geom_segment <- sd_icon({ segmentsGrob(c(0.1, 0.3, 0.5, 0.7), c(0.3, 0.5, 0.1, 0.9), c(0.2, 0.5, 0.7, 0.9), c(0.8, 0.7, 0.4, 0.3)) }) geom_smooth <- sd_icon({ gTree(children = gList(polygonGrob( c(0, 0.3, 0.5, 0.8, 1, 1, 0.8, 0.5, 0.3, 0), c(0.5, 0.3, 0.4, 0.2, 0.3, 0.7, 0.5, 0.6, 0.5, 0.7), gp = gpar(fill = "grey60", col = NA) ), linesGrob( c(0, 0.3, 0.5, 0.8, 1), c(0.6, 0.4, 0.5, 0.4, 0.6) ))) }) geom_text <- sd_icon({ textGrob("text", rot = 45, gp = gpar(cex = 1.2)) }) geom_tile <- sd_icon({ rectGrob( c(0.25, 0.25, 0.75, 0.75), c(0.25, 0.75, 0.75, 0.25), width = 0.5, height = c(0.67, 0.5, 0.67, 0.5), gp = gpar(col = "grey20", fill = c('#804070', '#668040')) ) }) geom_violin <- sd_icon({ y <- seq(-.3, .3, length.out = 40) x1 <- dnorm(y, mean = -.15, sd = 0.05) + 1.5 * dnorm(y, mean = 0.1, sd = 0.1) x2 <- dnorm(y, mean = -.1, sd = 0.1) + dnorm(y, mean = 0.1, sd = 0.1) y <- c(y, rev(y)) x1 <- c(x1,-rev(x1)) / max(8 * x1) x2 <- c(x2,-rev(x2)) / max(8 * x2) gp <- gpar(fill = "black") gTree(children = gList( polygonGrob(x1 + .30, y + .35, default.units = "npc", gp = gp), polygonGrob(x2 + .70, y + .55, default.units = "npc", gp = gp) )) }) geom_vline <- sd_icon({ linesGrob(c(0.5, 0.5), c(0, 1)) }) # Position adjustments -------------------------------------------------------- position_dodge <- sd_icon({ y <- c(0.5, 0.3) rectGrob( c(0.25, 0.75), y, width = 0.4, height = y, gp = gpar(col = "grey60", fill = c('#804070', '#668040')), vjust = 1 ) }) position_fill <- sd_icon({ y <- c(0.5, 0.8) rectGrob( 0.5, c(0.625, 1), width = 0.4, height = c(0.625, 0.375), gp = gpar(col = "grey60", fill = c('#804070', '#668040')), vjust = 1 ) }) position_identity <- sd_icon({ rectGrob( 0.5, c(0.5, 0.3), width = 0.4, height = c(0.5, 0.3), gp = gpar(col = "grey60", fill = c('#804070', '#668040')), vjust = 1 ) }) position_jitter <- sd_icon(inherit = "geom_jitter") position_stack <- sd_icon({ y <- c(0.5, 0.8) rectGrob( 0.5, c(0.5, 0.8), width = 0.4, height = c(0.5, 0.3), gp = gpar(col = "grey60", fill = c('#804070', '#668040')), vjust = 1 ) }) # Scales ----------------------------------------------------------------------- scale_alpha <- sd_icon({ x <- c(0.1, 0.3, 0.5, 0.7, 0.9) rectGrob(x, width = 0.25, gp = gpar(fill = scales::alpha("black", x), col = NA)) }) scale_colour_brewer <- sd_icon({ rectGrob( c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, gp = gpar(fill = RColorBrewer::brewer.pal(5, "PuOr"), col = NA) ) }) scale_colour_gradient <- sd_icon({ g <- scale_fill_gradient() g$train(1:5) rectGrob( c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, gp = gpar(fill = g$map(1:5), col = NA) ) }) scale_colour_gradient2 <- sd_icon({ g <- scale_fill_gradient2() g$train(1:5 - 3) rectGrob( c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, gp = gpar(fill = g$map(1:5 - 3), col = NA) ) }) scale_colour_gradientn <- sd_icon({ g <- scale_fill_gradientn(colours = rainbow(7)) g$train(1:5) rectGrob( c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, gp = gpar(fill = g$map(1:5), col = NA) ) }) scale_colour_grey <- sd_icon({ rectGrob(c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, gp = gpar(fill = gray(seq(0, 1, length.out = 5)), col = NA)) }) scale_colour_hue <- sd_icon({ rectGrob(c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, gp = gpar(fill = hcl( seq(0, 360, length.out = 6)[-6], c = 100, l = 65 ), col = NA)) }) scale_identity <- sd_icon({ textGrob("f(x) = x", gp = gpar(cex = 1.2)) }) scale_linetype <- sd_icon({ gTree(children = gList( segmentsGrob(0, 0.25, 1, 0.25, gp = gpar(lty = 1)), segmentsGrob(0, 0.50, 1, 0.50, gp = gpar(lty = 2)), segmentsGrob(0, 0.75, 1, 0.75, gp = gpar(lty = 3)) )) }) scale_manual <- sd_icon({ textGrob("DIY", gp = gpar(cex = 1.2)) }) scale_shape <- sd_icon({ gTree(children = gList( circleGrob(0.7, 0.7, r = 0.1), segmentsGrob(0.2, 0.3, 0.4, 0.3), segmentsGrob(0.3, 0.2, 0.3, 0.4), polygonGrob(c(0.2, 0.2, 0.4, 0.4), c(0.8, 0.6, 0.6, 0.8)), polygonGrob(c(0.6, 0.7, 0.8), c(0.2, 0.4, 0.2)) )) }) scale_size <- sd_icon({ pos <- c(0.15, 0.3, 0.5, 0.75) circleGrob(pos, pos, r = (c(0.1, 0.2, 0.3, 0.4) / 2.5), gp = gpar(fill = "grey50", col = NA)) }) scale_x_date <- sd_icon({ textGrob("14/10/1979", gp = gpar(cex = 1)) }) scale_x_datetime <- sd_icon({ textGrob("14/10/1979\n10:14am", gp = gpar(cex = 0.9)) }) # Statistics ------------------------------------------------------------------- stat_bin <- sd_icon(inherit = "geom_histogram") stat_bindot <- sd_icon(inherit = "geom_dotplot") stat_boxplot <- sd_icon(inherit = "geom_boxplot") stat_contour <- sd_icon(inherit = "geom_contour") stat_density2d <- sd_icon(inherit = "geom_density2d") stat_ecdf <- sd_icon(inherit = "geom_step") stat_density <- sd_icon(inherit = "geom_density") stat_identity <- sd_icon({ textGrob('f(x) = x', gp = gpar(cex = 1.2)) }) stat_quantile <- sd_icon(inherit = "geom_quantile") stat_smooth <- sd_icon(inherit = "geom_smooth") stat_sum <- sd_icon({ textGrob(expression(Sigma), gp = gpar(cex = 4)) }) # The line stats will be removed in the future stat_abline <- sd_icon(inherit = "geom_abline") stat_vline <- sd_icon(inherit = "geom_vline") stat_hline <- sd_icon(inherit = "geom_hline") stat_ydensity <- sd_icon(inherit = "geom_violin") ggplot2/inst/staticdocs/index.r0000644000175100001440000001057712633013511016262 0ustar hornikuserssd_section("Geoms", "Geoms, short for geometric objects, describe the type of plot you will produce.", c( "geom_abline", "geom_area", "geom_bar", "geom_bin2d", "geom_blank", "geom_boxplot", "geom_contour", "geom_count", "geom_curve", "geom_crossbar", "geom_density", "geom_density_2d", "geom_dotplot", "geom_errorbar", "geom_errorbarh", "geom_freqpoly", "geom_hex", "geom_histogram", "geom_hline", "geom_jitter", "geom_label", "geom_line", "geom_linerange", "geom_map", "geom_path", "geom_point", "geom_pointrange", "geom_polygon", "geom_quantile", "geom_raster", "geom_rect", "geom_ribbon", "geom_rug", "geom_segment", "geom_smooth", "geom_step", "geom_text", "geom_tile", "geom_violin", "geom_vline" ) ) sd_section("Statistics", "It's often useful to transform your data before plotting, and that's what statistical transformations do.", c( "stat_binhex", "stat_contour", "stat_density", "stat_density_2d", "stat_ecdf", "stat_ellipse", "stat_function", "stat_identity", "stat_qq", "stat_spoke", "stat_sum", "stat_summary", "stat_summary_hex", "stat_summary_2d", "stat_unique" ) ) sd_section("Scales", "Scales control the mapping between data and aesthetics.", c( "expand_limits", "guides", "guide_legend", "guide_colourbar", "lims", "scale_alpha", "scale_area", "scale_size_area", "scale_colour_brewer", "scale_colour_gradient", "scale_colour_gradient2", "scale_colour_gradientn", "scale_colour_grey", "scale_colour_hue", "scale_identity", "scale_manual", "scale_linetype", "scale_shape", "scale_size", "scale_x_continuous", "scale_x_date", "scale_x_datetime", "scale_x_discrete", "labs", "update_labels", "xlim" ) ) sd_section("Coordinate systems", "Coordinate systems adjust the mapping from coordinates to the 2d plane of the computer screen.", c( "coord_cartesian", "coord_fixed", "coord_flip", "coord_map", "coord_polar", "coord_quickmap", "coord_trans" ) ) sd_section("Faceting", "Facets display subsets of the dataset in different panels.", c( "facet_grid", "facet_null", "facet_wrap", "labeller", "label_both", "label_bquote", "label_parsed", "label_value", "label_wrap_gen" ) ) sd_section("Position adjustments", "Position adjustments can be used to fine tune positioning of objects to achieve effects like dodging, jittering and stacking.", c( "position_dodge", "position_fill", "position_identity", "position_nudge", "position_stack", "position_jitter", "position_jitterdodge" ) ) sd_section("Data", "Data sets included in ggplot2 and used in examples", c( "diamonds", "economics", "faithfuld", "luv_colours", "midwest", "mpg", "msleep", "presidential", "seals" ) ) sd_section("Annotation", "Specialised functions for adding annotations to a plot", c( "annotate", "annotation_custom", "annotation_logticks", "annotation_map", "annotation_raster", "borders" ) ) sd_section("Fortify", "Fortify methods make it possible to use ggplot2 with objects of various types, not just data frames.", c( "fortify", "fortify-multcomp", "fortify.lm", "fortify.map", "fortify.sp", "map_data" ) ) sd_section("Themes", "Themes control non-data components of the plot", c( "add_theme", "calc_element", "element_blank", "element_line", "element_rect", "element_text", "ggtheme", "is.rel", "is.theme", "opts", "margin", "rel", "theme", "theme_blank", "theme_bw", "theme_classic", "theme_grey", "theme_minimal", "theme_update", "update_element" ) ) sd_section("Plot creation", "", c( "ggplot", "qplot", "+.gg", "autoplot", "ggplot.data.frame", "is.ggplot", "print.ggplot" ) ) sd_section("Aesthetics", "", c( "aes", "aes_", "aes_all", "aes_auto", "aes_string", "aes_colour_fill_alpha", "aes_group_order", "aes_linetype_size_shape", "aes_position" ) ) sd_section("ggproto", "", c( "ggproto", "print.ggproto", "is.ggproto", "format.ggproto" ) ) ggplot2/inst/CITATION0000644000175100001440000000063012575410014013756 0ustar hornikuserscitHeader("To cite ggplot2 in publications, please use:") citEntry(entry = "book", author = "Hadley Wickham", title = "ggplot2: Elegant Graphics for Data Analysis", publisher = "Springer-Verlag New York", year = "2009", isbn = "978-0-387-98140-6", url = "http://had.co.nz/ggplot2/book", textVersion = "H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2009." )ggplot2/inst/doc/0000755000175100001440000000000012634007745013400 5ustar hornikusersggplot2/inst/doc/extending-ggplot2.R0000644000175100001440000002456612634007745017101 0ustar hornikusers## ---- include = FALSE---------------------------------------------------- knitr::opts_chunk$set(collapse = TRUE, comment = "#>") library(ggplot2) ## ----ggproto-intro------------------------------------------------------- A <- ggproto("A", NULL, x = 1, inc = function(self) { self$x <- self$x + 1 } ) A$x A$inc() A$x A$inc() A$inc() A$x ## ----chull--------------------------------------------------------------- StatChull <- ggproto("StatChull", Stat, compute_group = function(data, scales) { data[chull(data$x, data$y), , drop = FALSE] }, required_aes = c("x", "y") ) ## ------------------------------------------------------------------------ stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_chull(fill = NA, colour = "black") ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, hwy, colour = drv)) + geom_point() + stat_chull(fill = NA) ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, hwy)) + stat_chull(geom = "point", size = 4, colour = "red") + geom_point() ## ------------------------------------------------------------------------ StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = rng) mod <- lm(y ~ x, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm() ## ------------------------------------------------------------------------ StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, params, n = 100, formula = y ~ x) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = seq(rng[1], rng[2], length = n)) mod <- lm(formula, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm(formula = y ~ poly(x, 10)) + stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20) ## ------------------------------------------------------------------------ #' @inheritParams ggplot2::stat_identity #' @param formula The modelling formula passed to \code{lm}. Should only #' involve \code{y} and \code{x} #' @param n Number of points used for interpolation. stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ## ------------------------------------------------------------------------ StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", setup_params = function(data, params) { if (!is.null(params$bandwidth)) return(params) xs <- split(data$x, data$group) bws <- vapply(xs, bw.nrd0, numeric(1)) bw <- mean(bws) message("Picking bandwidth of ", signif(bw, 3)) params$bandwidth <- bw params }, compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, y = d$y) } ) stat_density_common <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, bandwidth = NULL, ...) { layer( stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(bandwidth = bandwidth, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, colour = drv)) + stat_density_common() ggplot(mpg, aes(displ, colour = drv)) + stat_density_common(bandwidth = 0.5) ## ------------------------------------------------------------------------ StatDensityCommon <- ggproto("StatDensity2", Stat, required_aes = "x", default_aes = aes(y = ..density..), compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, drv, colour = ..density..)) + stat_density_common(bandwidth = 1, geom = "point") ## ------------------------------------------------------------------------ ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ## ------------------------------------------------------------------------ StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", default_aes = aes(y = ..density..), setup_params = function(data, params) { min <- min(data$x) - 3 * params$bandwidth max <- max(data$x) + 3 * params$bandwidth list( bandwidth = params$bandwidth, min = min, max = max, na.rm = params$na.rm ) }, compute_group = function(data, scales, min, max, bandwidth = 1) { d <- density(data$x, bw = bandwidth, from = min, to = max) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ggplot(mpg, aes(displ, drv, fill = ..density..)) + stat_density_common(bandwidth = 1, geom = "raster") ## ----GeomSimplePoint----------------------------------------------------- GeomSimplePoint <- ggproto("GeomSimplePoint", Geom, required_aes = c("x", "y"), default_aes = aes(shape = 19, colour = "black"), draw_key = draw_key_point, draw_panel = function(data, panel_scales, coord) { coords <- coord$transform(data, panel_scales) grid::pointsGrob( coords$x, coords$y, pch = coords$shape, gp = grid::gpar(col = coords$colour) ) } ) geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePoint, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_simple_point() ## ------------------------------------------------------------------------ GeomSimplePolygon <- ggproto("GeomPolygon", Geom, required_aes = c("x", "y"), default_aes = aes( colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = 1 ), draw_key = draw_key_polygon, draw_group = function(data, panel_scales, coord) { n <- nrow(data) if (n <= 2) return(grid::nullGrob()) coords <- coord$transform(data, panel_scales) # A polygon can only have a single colour, fill, etc, so take from first row first_row <- coords[1, , drop = FALSE] grid::polygonGrob( coords$x, coords$y, default.units = "native", gp = grid::gpar( col = first_row$colour, fill = scales::alpha(first_row$fill, first_row$alpha), lwd = first_row$size * .pt, lty = first_row$linetype ) ) } ) geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_simple_polygon(aes(colour = class), fill = NA) ## ------------------------------------------------------------------------ GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA) ) geom_chull <- function(mapping = NULL, data = NULL, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_chull() ## ------------------------------------------------------------------------ theme_grey()$legend.key new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ## ------------------------------------------------------------------------ new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ## ----axis-line-ex-------------------------------------------------------- df <- data.frame(x = 1:3, y = 1:3) base <- ggplot(df, aes(x, y)) + geom_point() + theme_minimal() base base + theme(text = element_text(colour = "red")) ggplot2/inst/doc/extending-ggplot2.Rmd0000644000175100001440000005425712634007745017422 0ustar hornikusers--- title: "Extending ggplot2" author: "Hadley Wickham" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Extending ggplot2} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>") library(ggplot2) ``` This vignette documents the official extension mechanism provided in ggplot2 1.1.0. This vignette is a high-level adjunct to the low-level details found in `?Stat`, `?Geom` and `?theme`. You'll learn how to extend ggplot2 by creating a new stat, geom, or theme. As you read this document, you'll see many things that will make you scratch your head and wonder why on earth is it designed this way? Mostly it's historical accident - I wasn't a terribly good R programmer when I started writing ggplot2 and I made a lot of questionable decisions. We cleaned up as many of those issues as possible in the 1.1.0 release, but some fixes simply weren't worth the effort. ## ggproto All ggplot2 objects are built using the ggproto system of object oriented programming. This OO system is used only in one place: ggplot2. This is mostly historical accident: ggplot2 started off using [proto]( https://cran.r-project.org/package=proto) because I needed mutable objects. This was well before the creation of (the briefly lived) [mutatr](http://vita.had.co.nz/papers/mutatr.html), reference classes and R6: proto was the only game in town. But why ggproto? Well when we turned to add an official extension mechanism to ggplot2, we found a major problem that caused problems when proto objects were extended in a different package (methods were evaluated in ggplot2, not the package where the extension was added). We tried converting to R6, but it was a poor fit for the needs of ggplot2. We could've modified proto, but that would've first involved understand exactly how proto worked, and secondly making sure that the changes didn't affect other users of proto. It's strange to say, but this is a case where inventing a new OO system was actually the right answer to the problem! Fortunately Winston is now very good at creating OO systems, so it only took him a day to come up with ggproto: it maintains all the features of proto that ggplot2 needs, while allowing cross package inheritance to work. Here's a quick demo of ggproto in action: ```{r ggproto-intro} A <- ggproto("A", NULL, x = 1, inc = function(self) { self$x <- self$x + 1 } ) A$x A$inc() A$x A$inc() A$inc() A$x ``` The majority of ggplot2 classes are immutable and static: the methods neither use nor modify state in the class. They're mostly used as a convenient way of bundling related methods together. To create a new geom or stat, you will just create a new ggproto that inherits from `Stat`, `Geom` and override the methods described below. ## Creating a new stat ### The simplest stat We'll start by creating a very simple stat: one that gives the complex hull (the _c_ hull) of a set of points. First we create a new ggproto object that inherits from `Stat`: ```{r chull} StatChull <- ggproto("StatChull", Stat, compute_group = function(data, scales) { data[chull(data$x, data$y), , drop = FALSE] }, required_aes = c("x", "y") ) ``` The two most important components are the `compute_group()` method (which does the computation), and the `required_aes` field, which lists which aesthetics must be present in order to for the stat to work. Next we write a layer function. Unfortunately, due to an early design mistake I called these either `stat_()` or `geom_()`. A better decision would have been to call them `layer_()` functions: that's a more accurate description because every layer involves a stat _and_ a geom. All layer functions follow the same form - you specify defaults in the function arguments and then call the `layer()` function, sending `...` into the `params` argument. The arguments in `...` will either be arguments for the geom (if you're making a stat wrapper), arguments for the stat (if you're making a geom wrapper), or aesthetics to be set. `layer()` takes care of teasing the different parameters apart and making sure they're stored in the right place: ```{r} stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ``` (Note that if you're writing this in your own package, you'll either need to call `ggplot2::layer()` explicitly, or import the `layer()` function into your package namespace.) Once we have a layer function we can try our new stat: ```{r} ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_chull(fill = NA, colour = "black") ``` (We'll see later how to change the defaults of the geom so that you don't need to specify `fill = NA` every time.) Once we've written this basic object, ggplot2 gives a lot for free. For example, ggplot2 automatically preserves aesthetics that are constant within each group: ```{r} ggplot(mpg, aes(displ, hwy, colour = drv)) + geom_point() + stat_chull(fill = NA) ``` We can also override the default geom to display the convex hull in a different way: ```{r} ggplot(mpg, aes(displ, hwy)) + stat_chull(geom = "point", size = 4, colour = "red") + geom_point() ``` ### Stat parameters A more complex stat will do some computation. Let's implement a simple version of `geom_smooth()` that adds a line of best fit to a plot. We create a `StatLm` that inherits from `Stat` and a layer function, `stat_lm()`: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = rng) mod <- lm(y ~ x, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm() ``` `StatLm` is inflexible because it has no parameters. We might want to allow the user to control the model formula and the number of points used to generate the grid. To do so, we add arguments to the `compute_group()` method and our wrapper function: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, params, n = 100, formula = y ~ x) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = seq(rng[1], rng[2], length = n)) mod <- lm(formula, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm(formula = y ~ poly(x, 10)) + stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20) ``` Note that don't _have_ to explicitly include the new parameters in the arguments for the layer, `...` will get passed to the right place anyway. But you'll need to document them somewhere so the user knows about them. Here's a brief example. Note `@inheritParams ggplot2::stat_identity`: that will automatically inherit documentation for all the parameters also defined for `stat_identity()`. ```{r} #' @inheritParams ggplot2::stat_identity #' @param formula The modelling formula passed to \code{lm}. Should only #' involve \code{y} and \code{x} #' @param n Number of points used for interpolation. stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ``` ### Picking defaults Sometimes you have calculations that should performed once for the complete dataset, not once for each group. This is useful for picking sensible default values. For example, if we want to do a density estimate, it's reasonable to pick one bandwidth for the whole plot. The following Stat creates a variation of the `stat_density()` that picks one bandwidth for all groups by choosing the mean of the "best" bandwidth for each group (I have no theoretical justification for this, but it doesn't seem unreasonable). To do this we override the `setup_params()` method. It's passed the data and a list of params, and returns an updated list. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", setup_params = function(data, params) { if (!is.null(params$bandwidth)) return(params) xs <- split(data$x, data$group) bws <- vapply(xs, bw.nrd0, numeric(1)) bw <- mean(bws) message("Picking bandwidth of ", signif(bw, 3)) params$bandwidth <- bw params }, compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, y = d$y) } ) stat_density_common <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, bandwidth = NULL, ...) { layer( stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(bandwidth = bandwidth, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, colour = drv)) + stat_density_common() ggplot(mpg, aes(displ, colour = drv)) + stat_density_common(bandwidth = 0.5) ``` I recommend using `NULL` as a default value. If you pick important parameters automatically, it's a good idea to `message()` to the user (and when printing a floating point parameter, using `signif()` to show only a few significant digits). ### Variable names and default aesthetics This stat illustrates another important point. If we want to make this stat usable with other geoms, we should return a variable called `density` instead of `y`. Then we can set up the `default_aes` to automatically map `density` to `y`, which allows the user to override it to use with different geoms: ```{r} StatDensityCommon <- ggproto("StatDensity2", Stat, required_aes = "x", default_aes = aes(y = ..density..), compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, drv, colour = ..density..)) + stat_density_common(bandwidth = 1, geom = "point") ``` However, using this stat with the area geom doesn't work quite right. The areas don't stack on top of each other: ```{r} ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ``` This is because each density is computed independently, and the estimated `x`s don't line up. We can resolve that issue by computing the range of the data once in `setup_params()`. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", default_aes = aes(y = ..density..), setup_params = function(data, params) { min <- min(data$x) - 3 * params$bandwidth max <- max(data$x) + 3 * params$bandwidth list( bandwidth = params$bandwidth, min = min, max = max, na.rm = params$na.rm ) }, compute_group = function(data, scales, min, max, bandwidth = 1) { d <- density(data$x, bw = bandwidth, from = min, to = max) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ggplot(mpg, aes(displ, drv, fill = ..density..)) + stat_density_common(bandwidth = 1, geom = "raster") ``` ### Exercises 1. Extend `stat_chull` to compute the alpha hull, as from the [alphahull](https://cran.r-project.org/package=alphahull) package. Your new stat should take an `alpha` argument. 1. Modify the final version of `StatDensityCommon` to allow the user to specify the `min` and `max` parameters. You'll need to modify both the layer function and the `compute_group()` method. 1. Compare and contrast `StatLm` to `ggplot2::StatSmooth`. What key differences make `StatSmooth` more complex than `StatLm`? ## Creating a new geom It's harder to create a new geom than a new stat because you also need to know some grid. ggplot2 is built on top of grid, so you'll need to know the basics of drawing with grid. If you're serious about adding a new geom, I'd recommend buying [R graphics](http://amzn.com/B00I60M26G) by Paul Murrell. It tells you everything you need to know about drawing with grid. ### A simple geom It's easiest to start with a simple example. The code below is a simplified version of `geom_point()`: ```{r GeomSimplePoint} GeomSimplePoint <- ggproto("GeomSimplePoint", Geom, required_aes = c("x", "y"), default_aes = aes(shape = 19, colour = "black"), draw_key = draw_key_point, draw_panel = function(data, panel_scales, coord) { coords <- coord$transform(data, panel_scales) grid::pointsGrob( coords$x, coords$y, pch = coords$shape, gp = grid::gpar(col = coords$colour) ) } ) geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePoint, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_simple_point() ``` This is very similar to defining a new stat. You always need to provide fields/methods for the four pieces shown above: * `required_aes` is a character vector which lists all the aesthetics that the user must provide. * `default_aes` lists the aesthetics that have default values. * `draw_key` provides the function used to draw the key in the legend. You can see a list of all the build in key functions in `?draw_key` * `draw_group()` is where the magic happens. This function takes three arguments and returns a grid grob. It is called once for each panel. It's the most complicated part and is described in more detail below. `draw_group()` has three arguments: * `data`: a data frame with one column for each aesthetic. * `panel_scales`: a list containing information about the x and y scales for the current panel. * `coord`: an object describing the coordinate system. Generally you won't use `panel_scales` and `coord` directly, but you will always use them to transform the data: `coords <- coord$transform(data, panel_scales)`. This creates a data frame where position variables are scaled to the range 0--1. You then take this data and call a grid grob function. (Transforming for non-Cartesian coordinate systems is quite complex - you're best of transforming your data to the form accepted by an existing ggplot2 geom and passing it.) ### Collective geoms Overriding `draw_panel()` is most appropriate if there is one graphic element per row. In other cases, you want graphic element per group. For example, take polygons: each row gives one vertex of a polygon. In this case, you should instead override `draw_group()`: The following code makes a simplified version of `GeomPolygon`: ```{r} GeomSimplePolygon <- ggproto("GeomPolygon", Geom, required_aes = c("x", "y"), default_aes = aes( colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = 1 ), draw_key = draw_key_polygon, draw_group = function(data, panel_scales, coord) { n <- nrow(data) if (n <= 2) return(grid::nullGrob()) coords <- coord$transform(data, panel_scales) # A polygon can only have a single colour, fill, etc, so take from first row first_row <- coords[1, , drop = FALSE] grid::polygonGrob( coords$x, coords$y, default.units = "native", gp = grid::gpar( col = first_row$colour, fill = scales::alpha(first_row$fill, first_row$alpha), lwd = first_row$size * .pt, lty = first_row$linetype ) ) } ) geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_simple_polygon(aes(colour = class), fill = NA) ``` There are a few things to note here: * We override `draw_group()` instead of `draw_layer()` because we want one polygon per group, not one polygon per row. If you look at the source code for the original `GeomPolygon` you'll see it actually overrides `geom_layer()` because it uses some tricks to make `polygonGrob()` produce multiple polygons in one call. This is considerably more complicated, but gives better performance. * If the data contains two or fewer points, there's no point trying to draw a polygon, so we return a `nullGrob()`. This is the graphical equivalent of `NULL`: it's a grob that doesn't draw anything and doesn't take up any space. * Note the units: `x` and `y` should always be drawn in "native" units. (The default units for `pointGrob()` is a native, so we didn't need to change it there). `lwd` is measured in points, but ggplot2 uses mm, so we need to multiply it by the adjustment factor `.pt`. ### Inheriting from an existing Geom Sometimes you just want to make a small modification to an existing geom. In this case, rather than inheriting from `Geom` you can inherit from an existing subclass. For example, we might want to change the defaults for `GeomPolygon` to work better with `StatChull`: ```{r} GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA) ) geom_chull <- function(mapping = NULL, data = NULL, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_chull() ``` This doesn't allow you to use different geoms with the stat, but that seems appropriate here since the convex hull is primarily a polygonal feature. ### Exercises 1. Compare and contrast `GeomPoint` with `GeomSimplePoint`. 1. Compare and contract `GeomPolygon` with `GeomSimplePolygon`. ## Creating your own theme If you're going to create your own complete theme, there are a few things you need to know: * Overriding existing elements, rather than modifying them * The four global elements that affect (almost) every other theme element * Complete vs. incomplete elements ### Overriding elements By default, when you add a new theme element, it inherits values from the existing theme. For example, the following code sets the key colour to red, but it inherits the existing fill colour: ```{r} theme_grey()$legend.key new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` To override it completely, use `%+replace%` instead of `+`: ```{r} new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` ### Global elements There are four elements that affect the global appearance of the plot: Element | Theme function | Description -------------|-------------------|------------------------ line | `element_line()` | all line elements rect | `element_rect()` | all rectangular elements text | `element_text()` | all text title | `element_text()` | all text in title elements (plot, axes & legend) These set default properties that are inherited by more specific settings. These are most useful for setting an overall "background" colour and overall font settings (e.g. family and size). ```{r axis-line-ex} df <- data.frame(x = 1:3, y = 1:3) base <- ggplot(df, aes(x, y)) + geom_point() + theme_minimal() base base + theme(text = element_text(colour = "red")) ``` You should generally start creating a theme by modifying these values. ### Complete vs incomplete It is useful to understand the difference between complete and incomplete theme objects. A *complete* theme object is one produced by calling a theme function with the attribute `complete = TRUE`. Theme functions `theme_grey()` and `theme_bw()` are examples of complete theme functions. Calls to `theme()` produce *incomplete* theme objects, since they represent (local) modifications to a theme object rather than returning a complete theme object per se. When adding an incomplete theme to a complete one, the result is a complete theme. Complete and incomplete themes behave somewhat differently when added to a ggplot object: * Adding an incomplete theme augments the current theme object, replacing only those properties of elements defined in the call to `theme()`. * Adding a complete theme wipes away the existing theme and applies the new theme. ggplot2/inst/doc/extending-ggplot2.html0000644000175100001440000171047412634007745017645 0ustar hornikusers Extending ggplot2

This vignette documents the official extension mechanism provided in ggplot2 1.1.0. This vignette is a high-level adjunct to the low-level details found in ?Stat, ?Geom and ?theme. You’ll learn how to extend ggplot2 by creating a new stat, geom, or theme.

As you read this document, you’ll see many things that will make you scratch your head and wonder why on earth is it designed this way? Mostly it’s historical accident - I wasn’t a terribly good R programmer when I started writing ggplot2 and I made a lot of questionable decisions. We cleaned up as many of those issues as possible in the 1.1.0 release, but some fixes simply weren’t worth the effort.

ggproto

All ggplot2 objects are built using the ggproto system of object oriented programming. This OO system is used only in one place: ggplot2. This is mostly historical accident: ggplot2 started off using proto because I needed mutable objects. This was well before the creation of (the briefly lived) mutatr, reference classes and R6: proto was the only game in town.

But why ggproto? Well when we turned to add an official extension mechanism to ggplot2, we found a major problem that caused problems when proto objects were extended in a different package (methods were evaluated in ggplot2, not the package where the extension was added). We tried converting to R6, but it was a poor fit for the needs of ggplot2. We could’ve modified proto, but that would’ve first involved understand exactly how proto worked, and secondly making sure that the changes didn’t affect other users of proto.

It’s strange to say, but this is a case where inventing a new OO system was actually the right answer to the problem! Fortunately Winston is now very good at creating OO systems, so it only took him a day to come up with ggproto: it maintains all the features of proto that ggplot2 needs, while allowing cross package inheritance to work.

Here’s a quick demo of ggproto in action:

A <- ggproto("A", NULL,
  x = 1,
  inc = function(self) {
    self$x <- self$x + 1
  }
)
A$x
#> [1] 1
A$inc()
A$x
#> [1] 2
A$inc()
A$inc()
A$x
#> [1] 4

The majority of ggplot2 classes are immutable and static: the methods neither use nor modify state in the class. They’re mostly used as a convenient way of bundling related methods together.

To create a new geom or stat, you will just create a new ggproto that inherits from Stat, Geom and override the methods described below.

Creating a new stat

The simplest stat

We’ll start by creating a very simple stat: one that gives the complex hull (the c hull) of a set of points. First we create a new ggproto object that inherits from Stat:

StatChull <- ggproto("StatChull", Stat,
  compute_group = function(data, scales) {
    data[chull(data$x, data$y), , drop = FALSE]
  },
  
  required_aes = c("x", "y")
)

The two most important components are the compute_group() method (which does the computation), and the required_aes field, which lists which aesthetics must be present in order to for the stat to work.

Next we write a layer function. Unfortunately, due to an early design mistake I called these either stat_() or geom_(). A better decision would have been to call them layer_() functions: that’s a more accurate description because every layer involves a stat and a geom.

All layer functions follow the same form - you specify defaults in the function arguments and then call the layer() function, sending ... into the params argument. The arguments in ... will either be arguments for the geom (if you’re making a stat wrapper), arguments for the stat (if you’re making a geom wrapper), or aesthetics to be set. layer() takes care of teasing the different parameters apart and making sure they’re stored in the right place:

stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon",
                       position = "identity", na.rm = FALSE, show.legend = NA, 
                       inherit.aes = TRUE, ...) {
  layer(
    stat = StatChull, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

(Note that if you’re writing this in your own package, you’ll either need to call ggplot2::layer() explicitly, or import the layer() function into your package namespace.)

Once we have a layer function we can try our new stat:

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  stat_chull(fill = NA, colour = "black")

 

(We’ll see later how to change the defaults of the geom so that you don’t need to specify fill = NA every time.)

Once we’ve written this basic object, ggplot2 gives a lot for free. For example, ggplot2 automatically preserves aesthetics that are constant within each group:

ggplot(mpg, aes(displ, hwy, colour = drv)) + 
  geom_point() + 
  stat_chull(fill = NA)

 

We can also override the default geom to display the convex hull in a different way:

ggplot(mpg, aes(displ, hwy)) + 
  stat_chull(geom = "point", size = 4, colour = "red") +
  geom_point()

 

Stat parameters

A more complex stat will do some computation. Let’s implement a simple version of geom_smooth() that adds a line of best fit to a plot. We create a StatLm that inherits from Stat and a layer function, stat_lm():

StatLm <- ggproto("StatLm", Stat, 
  required_aes = c("x", "y"),
  
  compute_group = function(data, scales) {
    rng <- range(data$x, na.rm = TRUE)
    grid <- data.frame(x = rng)
    
    mod <- lm(y ~ x, data = data)
    grid$y <- predict(mod, newdata = grid)
    
    grid
  }
)

stat_lm <- function(mapping = NULL, data = NULL, geom = "line",
                    position = "identity", na.rm = FALSE, show.legend = NA, 
                    inherit.aes = TRUE, ...) {
  layer(
    stat = StatLm, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  stat_lm()

 

StatLm is inflexible because it has no parameters. We might want to allow the user to control the model formula and the number of points used to generate the grid. To do so, we add arguments to the compute_group() method and our wrapper function:

StatLm <- ggproto("StatLm", Stat, 
  required_aes = c("x", "y"),
  
  compute_group = function(data, scales, params, n = 100, formula = y ~ x) {
    rng <- range(data$x, na.rm = TRUE)
    grid <- data.frame(x = seq(rng[1], rng[2], length = n))
    
    mod <- lm(formula, data = data)
    grid$y <- predict(mod, newdata = grid)
    
    grid
  }
)

stat_lm <- function(mapping = NULL, data = NULL, geom = "line",
                    position = "identity", na.rm = FALSE, show.legend = NA, 
                    inherit.aes = TRUE, n = 50, formula = y ~ x, 
                    ...) {
  layer(
    stat = StatLm, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(n = n, formula = formula, na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  stat_lm(formula = y ~ poly(x, 10)) + 
  stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20)

 

Note that don’t have to explicitly include the new parameters in the arguments for the layer, ... will get passed to the right place anyway. But you’ll need to document them somewhere so the user knows about them. Here’s a brief example. Note @inheritParams ggplot2::stat_identity: that will automatically inherit documentation for all the parameters also defined for stat_identity().

#' @inheritParams ggplot2::stat_identity
#' @param formula The modelling formula passed to \code{lm}. Should only 
#'   involve \code{y} and \code{x}
#' @param n Number of points used for interpolation.
stat_lm <- function(mapping = NULL, data = NULL, geom = "line",
                    position = "identity", na.rm = FALSE, show.legend = NA, 
                    inherit.aes = TRUE, n = 50, formula = y ~ x, 
                    ...) {
  layer(
    stat = StatLm, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(n = n, formula = formula, na.rm = na.rm, ...)
  )
}

Picking defaults

Sometimes you have calculations that should performed once for the complete dataset, not once for each group. This is useful for picking sensible default values. For example, if we want to do a density estimate, it’s reasonable to pick one bandwidth for the whole plot. The following Stat creates a variation of the stat_density() that picks one bandwidth for all groups by choosing the mean of the “best†bandwidth for each group (I have no theoretical justification for this, but it doesn’t seem unreasonable).

To do this we override the setup_params() method. It’s passed the data and a list of params, and returns an updated list.

StatDensityCommon <- ggproto("StatDensityCommon", Stat, 
  required_aes = "x",
  
  setup_params = function(data, params) {
    if (!is.null(params$bandwidth))
      return(params)
    
    xs <- split(data$x, data$group)
    bws <- vapply(xs, bw.nrd0, numeric(1))
    bw <- mean(bws)
    message("Picking bandwidth of ", signif(bw, 3))
    
    params$bandwidth <- bw
    params
  },
  
  compute_group = function(data, scales, bandwidth = 1) {
    d <- density(data$x, bw = bandwidth)
    data.frame(x = d$x, y = d$y)
  }  
)

stat_density_common <- function(mapping = NULL, data = NULL, geom = "line",
                                position = "identity", na.rm = FALSE, show.legend = NA, 
                                inherit.aes = TRUE, bandwidth = NULL,
                                ...) {
  layer(
    stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(bandwidth = bandwidth, na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, colour = drv)) + 
  stat_density_common()
#> Picking bandwidth of 0.345

 


ggplot(mpg, aes(displ, colour = drv)) + 
  stat_density_common(bandwidth = 0.5)

 

I recommend using NULL as a default value. If you pick important parameters automatically, it’s a good idea to message() to the user (and when printing a floating point parameter, using signif() to show only a few significant digits).

Variable names and default aesthetics

This stat illustrates another important point. If we want to make this stat usable with other geoms, we should return a variable called density instead of y. Then we can set up the default_aes to automatically map density to y, which allows the user to override it to use with different geoms:

StatDensityCommon <- ggproto("StatDensity2", Stat, 
  required_aes = "x",
  default_aes = aes(y = ..density..),

  compute_group = function(data, scales, bandwidth = 1) {
    d <- density(data$x, bw = bandwidth)
    data.frame(x = d$x, density = d$y)
  }  
)

ggplot(mpg, aes(displ, drv, colour = ..density..)) + 
  stat_density_common(bandwidth = 1, geom = "point")

 

However, using this stat with the area geom doesn’t work quite right. The areas don’t stack on top of each other:

ggplot(mpg, aes(displ, fill = drv)) + 
  stat_density_common(bandwidth = 1, geom = "area", position = "stack")

 

This is because each density is computed independently, and the estimated xs don’t line up. We can resolve that issue by computing the range of the data once in setup_params().

StatDensityCommon <- ggproto("StatDensityCommon", Stat, 
  required_aes = "x",
  default_aes = aes(y = ..density..),

  setup_params = function(data, params) {
    min <- min(data$x) - 3 * params$bandwidth
    max <- max(data$x) + 3 * params$bandwidth
    
    list(
      bandwidth = params$bandwidth,
      min = min,
      max = max,
      na.rm = params$na.rm
    )
  },
  
  compute_group = function(data, scales, min, max, bandwidth = 1) {
    d <- density(data$x, bw = bandwidth, from = min, to = max)
    data.frame(x = d$x, density = d$y)
  }  
)

ggplot(mpg, aes(displ, fill = drv)) + 
  stat_density_common(bandwidth = 1, geom = "area", position = "stack")

 

ggplot(mpg, aes(displ, drv, fill = ..density..)) + 
  stat_density_common(bandwidth = 1, geom = "raster")

 

Exercises

  1. Extend stat_chull to compute the alpha hull, as from the alphahull package. Your new stat should take an alpha argument.

  2. Modify the final version of StatDensityCommon to allow the user to specify the min and max parameters. You’ll need to modify both the layer function and the compute_group() method.

  3. Compare and contrast StatLm to ggplot2::StatSmooth. What key differences make StatSmooth more complex than StatLm?

Creating a new geom

It’s harder to create a new geom than a new stat because you also need to know some grid. ggplot2 is built on top of grid, so you’ll need to know the basics of drawing with grid. If you’re serious about adding a new geom, I’d recommend buying R graphics by Paul Murrell. It tells you everything you need to know about drawing with grid.

A simple geom

It’s easiest to start with a simple example. The code below is a simplified version of geom_point():

GeomSimplePoint <- ggproto("GeomSimplePoint", Geom,
  required_aes = c("x", "y"),
  default_aes = aes(shape = 19, colour = "black"),
  draw_key = draw_key_point,

  draw_panel = function(data, panel_scales, coord) {
    coords <- coord$transform(data, panel_scales)
    grid::pointsGrob(
      coords$x, coords$y,
      pch = coords$shape,
      gp = grid::gpar(col = coords$colour)
    )
  }
)

geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity",
                              position = "identity", na.rm = FALSE, show.legend = NA, 
                              inherit.aes = TRUE, ...) {
  layer(
    geom = GeomSimplePoint, mapping = mapping,  data = data, stat = stat, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_simple_point()

 

This is very similar to defining a new stat. You always need to provide fields/methods for the four pieces shown above:

draw_group() has three arguments:

Generally you won’t use panel_scales and coord directly, but you will always use them to transform the data: coords <- coord$transform(data, panel_scales). This creates a data frame where position variables are scaled to the range 0–1. You then take this data and call a grid grob function. (Transforming for non-Cartesian coordinate systems is quite complex - you’re best of transforming your data to the form accepted by an existing ggplot2 geom and passing it.)

Collective geoms

Overriding draw_panel() is most appropriate if there is one graphic element per row. In other cases, you want graphic element per group. For example, take polygons: each row gives one vertex of a polygon. In this case, you should instead override draw_group():

The following code makes a simplified version of GeomPolygon:

GeomSimplePolygon <- ggproto("GeomPolygon", Geom,
  required_aes = c("x", "y"),
  
  default_aes = aes(
    colour = NA, fill = "grey20", size = 0.5,
    linetype = 1, alpha = 1
  ),

  draw_key = draw_key_polygon,

  draw_group = function(data, panel_scales, coord) {
    n <- nrow(data)
    if (n <= 2) return(grid::nullGrob())

    coords <- coord$transform(data, panel_scales)
    # A polygon can only have a single colour, fill, etc, so take from first row
    first_row <- coords[1, , drop = FALSE]

    grid::polygonGrob(
      coords$x, coords$y, 
      default.units = "native",
      gp = grid::gpar(
        col = first_row$colour,
        fill = scales::alpha(first_row$fill, first_row$alpha),
        lwd = first_row$size * .pt,
        lty = first_row$linetype
      )
    )
  }
)
geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull",
                                position = "identity", na.rm = FALSE, show.legend = NA, 
                                inherit.aes = TRUE, ...) {
  layer(
    geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, 
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_simple_polygon(aes(colour = class), fill = NA)

 

There are a few things to note here:

Inheriting from an existing Geom

Sometimes you just want to make a small modification to an existing geom. In this case, rather than inheriting from Geom you can inherit from an existing subclass. For example, we might want to change the defaults for GeomPolygon to work better with StatChull:

GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon,
  default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1,
    alpha = NA)
  )
geom_chull <- function(mapping = NULL, data = NULL, 
                       position = "identity", na.rm = FALSE, show.legend = NA, 
                       inherit.aes = TRUE, ...) {
  layer(
    stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping,
    position = position, show.legend = show.legend, inherit.aes = inherit.aes,
    params = list(na.rm = na.rm, ...)
  )
}

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_chull()

 

This doesn’t allow you to use different geoms with the stat, but that seems appropriate here since the convex hull is primarily a polygonal feature.

Exercises

  1. Compare and contrast GeomPoint with GeomSimplePoint.

  2. Compare and contract GeomPolygon with GeomSimplePolygon.

Creating your own theme

If you’re going to create your own complete theme, there are a few things you need to know:

Overriding elements

By default, when you add a new theme element, it inherits values from the existing theme. For example, the following code sets the key colour to red, but it inherits the existing fill colour:

theme_grey()$legend.key
#> List of 4
#>  $ fill    : chr "grey95"
#>  $ colour  : chr "white"
#>  $ size    : NULL
#>  $ linetype: NULL
#>  - attr(*, "class")= chr [1:2] "element_rect" "element"

new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red"))
new_theme$legend.key
#> List of 4
#>  $ fill    : chr "grey95"
#>  $ colour  : chr "red"
#>  $ size    : NULL
#>  $ linetype: NULL
#>  - attr(*, "class")= chr [1:2] "element_rect" "element"

To override it completely, use %+replace% instead of +:

new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red"))
new_theme$legend.key
#> List of 4
#>  $ fill    : NULL
#>  $ colour  : chr "red"
#>  $ size    : NULL
#>  $ linetype: NULL
#>  - attr(*, "class")= chr [1:2] "element_rect" "element"

Global elements

There are four elements that affect the global appearance of the plot:

Element Theme function Description
line element_line() all line elements
rect element_rect() all rectangular elements
text element_text() all text
title element_text() all text in title elements (plot, axes & legend)

These set default properties that are inherited by more specific settings. These are most useful for setting an overall “background†colour and overall font settings (e.g. family and size).

df <- data.frame(x = 1:3, y = 1:3)
base <- ggplot(df, aes(x, y)) + 
  geom_point() + 
  theme_minimal()

base

 

base + theme(text = element_text(colour = "red"))

 

You should generally start creating a theme by modifying these values.

Complete vs incomplete

It is useful to understand the difference between complete and incomplete theme objects. A complete theme object is one produced by calling a theme function with the attribute complete = TRUE.

Theme functions theme_grey() and theme_bw() are examples of complete theme functions. Calls to theme() produce incomplete theme objects, since they represent (local) modifications to a theme object rather than returning a complete theme object per se. When adding an incomplete theme to a complete one, the result is a complete theme.

Complete and incomplete themes behave somewhat differently when added to a ggplot object:

ggplot2/inst/doc/ggplot2-specs.Rmd0000644000175100001440000001305012634007745016534 0ustar hornikusers--- title: "Aesthetic specifications" author: "Hadley Wickham" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Aesthetic specifications} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} library(ggplot2) knitr::opts_chunk$set(fig.dpi = 96) ``` This vignette summarises the various formats that grid drawing functions take. Most of this information is available scattered throughout the R documentation. This appendix brings it all together in one place. ## Colour Colours can be specified with: * A __name__, e.g., `"red"`. R has `r length(colours())` built-in named colours, which can be listed with `colours()`. The Stowers Institute provides a nice printable pdf that lists all colours: . * An __rgb specification__, with a string of the form `"#RRGGBB"` where each of the pairs `RR`, `GG`, `BB` consists of two hexadecimal digits giving a value in the range `00` to `FF` You can optionally make the colour transparent by using the form `"#RRGGBBAA". * An __NA__, for a completely transparent colour. * The [munsell](https://github.com/cwickham/munsell) package, Charlotte Wickham, provides a wrapper around the colour system designed by Alfred Munsell. ## Line type {#sec:line-type-spec} Line types can be specified with: * An __integer__ or __name__: 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash, as shown below: ```{r} lty <- c("blank", "solid", "dashed", "dotted", "dotdash", "longdash","twodash") linetypes <- data.frame( y = seq_along(lty), lty = lty ) ggplot(linetypes, aes(0, y)) + geom_segment(aes(xend = 5, yend = y, linetype = lty)) + scale_linetype_identity() + geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * The lengths of on/off stretches of line. This is done with a string containing 2, 4, 6, or 8 hexadecimal digits which give the lengths of c consecutive lengths. For example, the string `"33"` specifies three units on followed by three off and `"3313"` specifies three units on followed by three off followed by one on and finally three off. The five standard dash-dot line types described above correspond to 44, 13, 134, 73, and 2262. The `size` of a line is its width in mm. ## Shape {#sec:shape-spec} Shapes take four types of values: * An __integer__ in $[0, 25]$: ```{r} shapes <- data.frame( shape = c(0:19, 22, 21, 24, 23, 20), x = 0:24 %/% 5, y = -(0:24 %% 5) ) ggplot(shapes, aes(x, y)) + geom_point(aes(shape = shape), size = 5, fill = "red") + geom_text(aes(label = shape), hjust = 0, nudge_x = 0.15) + scale_shape_identity() + expand_limits(x = 4.1) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * A __single character__, to use that character as a plotting symbol. * A `.` to draw the smallest rectangle that is visible, usualy 1 pixel. * An `NA`, to draw nothing. Note that shapes 21-24 have both stroke `colour` and a `fill`. The size of the filled part is controlled by `size`, the size of the stroke is controlled by `stroke`. Each is measured in mm, and the total size of the point is the sum of the two. Note that the size is constant along the diagonal in the following figure. ```{r} sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2) ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + geom_point(shape = 21, fill = "red") + scale_size_identity() ``` ## Text ### Font size ### Font face There are only three fonts that are guaranteed to work everywhere: "sans" (the default), "serif", or "mono": ```{r} df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono")) ggplot(df, aes(x, y)) + geom_text(aes(label = family, family = family)) ``` It's trickier to include a system font on a plot because text drawing is done differently by each graphics device (GD). There are five GDs in common use (`png()`, `pdf()`, on screen devices for Windows, Mac and Linux), so to have a font work everywhere you need to configure five devices in five different ways. Two packages simplify the quandary a bit: * `showtext` makes GD-independent plots by rendering all text as polygons. * `extrafont` converts fonts to a standard format that all devices can use. Both approaches have pros and cons, so you will to need to try both of them and see which works best for your needs. ### Family ### Justification Horizontal and vertical justification have the same parameterisation, either a string ("top", "middle", "bottom", "left", "center", "right") or a number between 0 and 1: * top = 1, middle = 0.5, bottom = 0 * left = 0, center = 0.5, right = 1 ```{r} just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1)) just$label <- paste0(just$hjust, ", ", just$vjust) ggplot(just, aes(hjust, vjust)) + geom_point(colour = "grey70", size = 5) + geom_text(aes(label = label, hjust = hjust, vjust = vjust)) ``` Note that you can use numbers outside the range (0, 1), but it's not recommended. ggplot2/inst/doc/ggplot2-specs.html0000644000175100001440000035746012634007745016776 0ustar hornikusers Aesthetic specifications

This vignette summarises the various formats that grid drawing functions take. Most of this information is available scattered throughout the R documentation. This appendix brings it all together in one place.

Colour

Colours can be specified with:

Line type

Line types can be specified with:

The size of a line is its width in mm.

Shape

Shapes take four types of values:

Note that shapes 21-24 have both stroke colour and a fill. The size of the filled part is controlled by size, the size of the stroke is controlled by stroke. Each is measured in mm, and the total size of the point is the sum of the two. Note that the size is constant along the diagonal in the following figure.

sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2)
ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + 
  geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + 
  geom_point(shape = 21, fill = "red") +
  scale_size_identity()

 

Text

Font size

Font face

There are only three fonts that are guaranteed to work everywhere: “sans†(the default), “serifâ€, or “monoâ€:

df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono"))
ggplot(df, aes(x, y)) + 
  geom_text(aes(label = family, family = family))

 

It’s trickier to include a system font on a plot because text drawing is done differently by each graphics device (GD). There are five GDs in common use (png(), pdf(), on screen devices for Windows, Mac and Linux), so to have a font work everywhere you need to configure five devices in five different ways. Two packages simplify the quandary a bit:

  • showtext makes GD-independent plots by rendering all text as polygons.

  • extrafont converts fonts to a standard format that all devices can use.

Both approaches have pros and cons, so you will to need to try both of them and see which works best for your needs.

Family

Justification

Horizontal and vertical justification have the same parameterisation, either a string (“topâ€, “middleâ€, “bottomâ€, “leftâ€, “centerâ€, “rightâ€) or a number between 0 and 1:

  • top = 1, middle = 0.5, bottom = 0
  • left = 0, center = 0.5, right = 1
just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1))
just$label <- paste0(just$hjust, ", ", just$vjust)

ggplot(just, aes(hjust, vjust)) +
  geom_point(colour = "grey70", size = 5) + 
  geom_text(aes(label = label, hjust = hjust, vjust = vjust))

 

Note that you can use numbers outside the range (0, 1), but it’s not recommended.

ggplot2/inst/doc/ggplot2-specs.R0000644000175100001440000000370012634007745016214 0ustar hornikusers## ---- include = FALSE---------------------------------------------------- library(ggplot2) knitr::opts_chunk$set(fig.dpi = 96) ## ------------------------------------------------------------------------ lty <- c("blank", "solid", "dashed", "dotted", "dotdash", "longdash","twodash") linetypes <- data.frame( y = seq_along(lty), lty = lty ) ggplot(linetypes, aes(0, y)) + geom_segment(aes(xend = 5, yend = y, linetype = lty)) + scale_linetype_identity() + geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ## ------------------------------------------------------------------------ shapes <- data.frame( shape = c(0:19, 22, 21, 24, 23, 20), x = 0:24 %/% 5, y = -(0:24 %% 5) ) ggplot(shapes, aes(x, y)) + geom_point(aes(shape = shape), size = 5, fill = "red") + geom_text(aes(label = shape), hjust = 0, nudge_x = 0.15) + scale_shape_identity() + expand_limits(x = 4.1) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ## ------------------------------------------------------------------------ sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2) ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + geom_point(shape = 21, fill = "red") + scale_size_identity() ## ------------------------------------------------------------------------ df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono")) ggplot(df, aes(x, y)) + geom_text(aes(label = family, family = family)) ## ------------------------------------------------------------------------ just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1)) just$label <- paste0(just$hjust, ", ", just$vjust) ggplot(just, aes(hjust, vjust)) + geom_point(colour = "grey70", size = 5) + geom_text(aes(label = label, hjust = hjust, vjust = vjust)) ggplot2/tests/0000755000175100001440000000000012553440452013014 5ustar hornikusersggplot2/tests/testthat.R0000644000175100001440000000007212553440463015000 0ustar hornikuserslibrary(testthat) library(ggplot2) test_check("ggplot2") ggplot2/tests/testthat/0000755000175100001440000000000012634752653014665 5ustar hornikusersggplot2/tests/testthat/test-facet-.r0000644000175100001440000000275712567340422017167 0ustar hornikuserscontext("Facetting") df <- data.frame(x = 1:3, y = 3:1, z = letters[1:3]) test_that("facets split up the data", { l1 <- ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~z) l2 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(. ~ z) l3 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(z ~ .) d1 <- layer_data(l1) d2 <- layer_data(l2) d3 <- layer_data(l3) expect_equal(d1, d2) expect_equal(d1, d3) expect_equal(d1$PANEL, factor(1:3)) }) test_that("facets with free scales scale independently", { l1 <- ggplot(df, aes(x, y)) + geom_point() + facet_wrap(~z, scales = "free") d1 <- cdata(l1)[[1]] expect_true(sd(d1$x) < 1e-10) expect_true(sd(d1$y) < 1e-10) l2 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(. ~ z, scales = "free") d2 <- cdata(l2)[[1]] expect_true(sd(d2$x) < 1e-10) expect_equal(length(unique(d2$y)), 3) l3 <- ggplot(df, aes(x, y)) + geom_point() + facet_grid(z ~ ., scales = "free") d3 <- cdata(l3)[[1]] expect_equal(length(unique(d3$x)), 3) expect_true(sd(d3$y) < 1e-10) }) test_that("shrink parameter affects scaling", { l1 <- ggplot(df, aes(1, y)) + geom_point() r1 <- pranges(l1) expect_equal(r1$x[[1]], c(1, 1)) expect_equal(r1$y[[1]], c(1, 3)) l2 <- ggplot(df, aes(1, y)) + stat_summary(fun.y = "mean") r2 <- pranges(l2) expect_equal(r2$y[[1]], c(2, 2)) l3 <- ggplot(df, aes(1, y)) + stat_summary(fun.y = "mean") + facet_null(shrink = FALSE) r3 <- pranges(l3) expect_equal(r3$y[[1]], c(1, 3)) }) ggplot2/tests/testthat/test-scale-manual.r0000644000175100001440000000371112567704140020362 0ustar hornikuserscontext("scale_manual") test_that("names of values used in manual scales", { s <- scale_colour_manual(values = c("8" = "c","4" = "a","6" = "b")) s$train(c("4", "6", "8")) expect_equal(s$map(c("4", "6", "8")), c("a", "b", "c")) }) dat <- data.frame(g = c("B","A","A")) p <- ggplot(dat, aes(g, fill = g)) + geom_bar() col <- c("A" = "red", "B" = "green", "C" = "blue") cols <- function(x) ggplot_build(x)$data[[1]][, "fill"] test_that("named values work regardless of order", { fill_scale <- function(order) scale_fill_manual(values = col[order], na.value = "black") # Order of value vector shouldn't matter expect_equal(cols(p + fill_scale(1:3)), c("red", "green")) expect_equal(cols(p + fill_scale(1:2)), c("red", "green")) expect_equal(cols(p + fill_scale(2:1)), c("red", "green")) expect_equal(cols(p + fill_scale(c(3, 2, 1))), c("red", "green")) expect_equal(cols(p + fill_scale(c(3, 1, 2))), c("red", "green")) expect_equal(cols(p + fill_scale(c(1, 3, 2))), c("red", "green")) }) test_that("missing values replaced with na.value", { df <- data.frame(x = 1, y = 1:3, z = factor(c(1:2, NA), exclude = NULL)) p <- ggplot(df, aes(x, y, colour = z)) + geom_point() + scale_colour_manual(values = c("black", "black"), na.value = "red") expect_equal(layer_data(p)$colour, c("black", "black", "red")) }) test_that("insufficient values raise an error", { df <- data.frame(x = 1, y = 1:3, z = factor(c(1:2, NA), exclude = NULL)) p <- qplot(x, y, data = df, colour = z) expect_error(ggplot_build(p + scale_colour_manual(values = "black")), "Insufficient values") # Should be sufficient ggplot_build(p + scale_colour_manual(values = c("black", "black"))) }) test_that("values are matched when scale contains more unique valuesthan are in the data", { s <- scale_colour_manual(values = c("8" = "c", "4" = "a", "22" = "d", "6" = "b")) s$train(c("4", "6", "8")) expect_equal(s$map(c("4", "6", "8")), c("a", "b", "c")) }) ggplot2/tests/testthat/test-dotplot.r0000644000175100001440000000354712567620674017525 0ustar hornikuserscontext("Dotplot") set.seed(111) dat <- data.frame(x = LETTERS[1:2], y = rnorm(30), g = LETTERS[3:5]) test_that("Dodging works", { p <- ggplot(dat, aes(x = x, y = y, fill = g)) + geom_dotplot( binwidth = 0.2, binaxis = "y", position = "dodge", stackdir = "center" ) df <- layer_data(p) # Number of levels in the dodged variable ndodge <- 3 # The amount of space allocated within each dodge group dwidth <- .9 / ndodge # This should be the x position for each before dodging xbase <- ceiling(df$group / ndodge) # This is the offset from dodging xoffset <- (df$group - 1) %% ndodge - (ndodge - 1) / 2 xoffset <- xoffset * dwidth # Check actual x locations equal predicted x locations expect_true(all(abs(df$x - (xbase + xoffset)) < 1e-6)) # Check that xmin and xmax are in the right place expect_true(all(abs(df$xmax - df$x - dwidth/2) < 1e-6)) expect_true(all(abs(df$x - df$xmin - dwidth/2) < 1e-6)) }) test_that("Binning works", { bp <- ggplot(dat, aes(y)) + geom_dotplot(binwidth = .4, method = "histodot") x <- layer_data(bp)$x # Need ugly hack to make sure mod function doesn't give values like -3.99999 # due to floating point error expect_true(all(abs((x - min(x) + 1e-7) %% .4) < 1e-6)) bp <- ggplot(dat, aes(x = y)) + geom_dotplot(binwidth = .4, method = "dotdensity") x <- layer_data(bp)$x # This one doesn't ensure that dotdensity works, but it does check that it's not # doing fixed bin sizes expect_false(all(abs((x - min(x) + 1e-7) %% .4) < 1e-6)) }) test_that("NA's result in warning from stat_bindot", { set.seed(122) dat <- data.frame(x = rnorm(20)) dat$x[c(2,10)] <- NA # Need to assign it to a var here so that it doesn't automatically print expect_warning(ggplot_build(ggplot(dat, aes(x)) + geom_dotplot(binwidth = .2)), "Removed 2 rows.*stat_bindot") }) ggplot2/tests/testthat/test-stat-sum.R0000644000175100001440000000260312565146574017545 0ustar hornikuserscontext("stat_sum") test_that("handles grouping correctly", { d <- diamonds[1:1000, ] all_ones <- function(x) all.equal(mean(x), 1) base <- ggplot(d, aes(cut, clarity)) ret <- layer_data(base + stat_sum()) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(ret$prop)) ret <- layer_data(base + stat_sum(aes(group = 1))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_equal(sum(ret$prop), 1) ret <- layer_data(base + stat_sum(aes(group = cut))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$x, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = cut, colour = cut))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$x, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = clarity))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$y, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = clarity, colour = cut))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), nrow(d)) expect_true(all_ones(tapply(ret$prop, ret$y, FUN = sum))) ret <- layer_data(base + stat_sum(aes(group = 1, weight = price))) expect_equal(nrow(ret), 38) expect_equal(sum(ret$n), sum(d$price)) expect_equal(sum(ret$prop), 1) }) ggplot2/tests/testthat/test-boxplot.r0000644000175100001440000000315312620220417017475 0ustar hornikuserscontext("Boxplot") # thanks wch for providing the test code test_that("geom_boxplot range includes all outliers", { dat <- data.frame(x = 1, y = c(-(1:20) ^ 3, (1:20) ^ 3) ) p <- ggplot_build(ggplot(dat, aes(x,y)) + geom_boxplot()) miny <- p$panel$ranges[[1]]$y.range[1] maxy <- p$panel$ranges[[1]]$y.range[2] expect_true(miny <= min(dat$y)) expect_true(maxy >= max(dat$y)) }) test_that("geom_boxplot for continuous x gives warning if more than one x (#992)", { dat <- expand.grid(x=1:2, y=c(-(1:20)^3, (1:20)^3) ) expect_that(ggplot_build(ggplot(dat, aes(x,y)) + geom_boxplot()), gives_warning("Continuous x aesthetic")) expect_that(ggplot_build(ggplot(dat, aes(x=as.Date(x,origin=Sys.Date()),y)) + geom_boxplot()), gives_warning("Continuous x aesthetic")) expect_that(ggplot_build(ggplot(dat, aes(x,y,group=x)) + geom_boxplot()), not(gives_warning("Continuous x aesthetic"))) expect_that(ggplot_build(ggplot(dat, aes(x=1,y)) + geom_boxplot()), not(gives_warning("Continuous x aesthetic"))) expect_that(ggplot_build(ggplot(dat, aes(x=factor(x),y)) + geom_boxplot()), not(gives_warning("Continuous x aesthetic"))) expect_that(ggplot_build(ggplot(dat, aes(x=(x == 1),y)) + geom_boxplot()), not(gives_warning("Continuous x aesthetic"))) expect_that(ggplot_build(ggplot(dat, aes(x=as.character(x),y)) + geom_boxplot()), not(gives_warning("Continuous x aesthetic"))) expect_that(ggplot_build(ggplot(dat, aes(x,y)) + geom_boxplot() + facet_wrap(~y)), gives_warning("Continuous x aesthetic")) }) ggplot2/tests/testthat/test-theme.r0000644000175100001440000001624312560145676017134 0ustar hornikuserscontext("Themes") test_that("Modifying theme element properties with + operator", { # Changing a "leaf node" works t <- theme_grey() + theme(axis.title.x = element_text(colour = 'red', margin = margin())) expect_identical(t$axis.title.x, element_text(colour = 'red', margin = margin())) # Make sure the theme class didn't change or get dropped expect_true(is.theme(t)) # Make sure the element class didn't change or get dropped expect_true(inherits(t$axis.title.x, "element")) expect_true(inherits(t$axis.title.x, "element_text")) # Modifying an intermediate node works t <- theme_grey() + theme(axis.title = element_text(colour = 'red')) expect_identical(t$axis.title, element_text(colour = 'red')) # Modifying a root node changes only the specified properties t <- theme_grey() + theme(text = element_text(colour = 'red')) expect_identical(t$text$colour, 'red') expect_identical(t$text$family, theme_grey()$text$family) expect_identical(t$text$face, theme_grey()$text$face) expect_identical(t$text$size, theme_grey()$text$size) # Descendent is unchanged expect_identical(t$axis.title.x, theme_grey()$axis.title.x) # Adding element_blank replaces element t <- theme_grey() + theme(axis.text.y = element_blank()) expect_identical(t$axis.text.y, element_blank()) # Adding a non-blank element to an element_blank() replaces it t <- t + theme(axis.text.y = element_text(colour = 'red')) expect_identical(t$axis.text.y, element_text(colour = 'red')) # Adding empty theme() has no effect t <- theme_grey() + theme() expect_identical(t, theme_grey()) expect_error(theme_grey() + "asdf") }) test_that("Adding theme object to ggplot object with + operator", { p <- qplot(1:3, 1:3) p <- p + theme(axis.title = element_text(size = 20)) expect_true(p$theme$axis.title$size == 20) # Should update specified properties, but not reset other properties p <- p + theme(text = element_text(colour = 'red')) expect_true(p$theme$text$colour == 'red') tt <- theme_grey()$text tt$colour <- 'red' expect_identical(p$theme$text, tt) }) test_that("Replacing theme elements with %+replace% operator", { # Changing a "leaf node" works t <- theme_grey() %+replace% theme(axis.title.x = element_text(colour = 'red')) expect_identical(t$axis.title.x, element_text(colour = 'red')) # Make sure the class didn't change or get dropped expect_true(is.theme(t)) # Changing an intermediate node works t <- theme_grey() %+replace% theme(axis.title = element_text(colour = 'red')) expect_identical(t$axis.title, element_text(colour = 'red')) # Descendent is unchanged expect_identical(t$axis.title.x, theme_grey()$axis.title.x) # Adding empty theme() has no effect t <- theme_grey() %+replace% theme() expect_identical(t, theme_grey()) expect_error(theme_grey() + "asdf") }) test_that("Calculating theme element inheritance", { t <- theme_grey() + theme(axis.title = element_text(colour = 'red')) # Check that properties are passed along from axis.title to axis.title.x e <- calc_element('axis.title.x', t) expect_identical(e$colour, 'red') expect_false(is.null(e$family)) expect_false(is.null(e$face)) expect_false(is.null(e$size)) # Check that rel() works for relative sizing, and is applied at each level t <- theme_grey(base_size = 12) + theme(axis.title = element_text(size = rel(0.5))) + theme(axis.title.x = element_text(size = rel(0.5))) e <- calc_element('axis.title', t) expect_identical(e$size, 6) ex <- calc_element('axis.title.x', t) expect_identical(ex$size, 3) # Check that a theme_blank in a parent node gets passed along to children t <- theme_grey() + theme(text = element_blank()) expect_identical(calc_element('axis.title.x', t), element_blank()) }) test_that("Complete and non-complete themes interact correctly with each other", { # The 'complete' attribute of t1 + t2 is the OR of their 'complete' attributes. # But for _element properties_, the one on the right modifies the one on the left. t <- theme_bw() + theme(text = element_text(colour = 'red')) expect_true(attr(t, "complete")) expect_equal(t$text$colour, 'red') # A complete theme object (like theme_bw) always trumps a non-complete theme object t <- theme(text = element_text(colour = 'red')) + theme_bw() expect_true(attr(t, "complete")) expect_equal(t$text$colour, theme_bw()$text$colour) # Adding two non-complete themes: the one on the right modifies the one on the left. t <- theme(text = element_text(colour = 'blue')) + theme(text = element_text(colour = 'red')) expect_false(attr(t, "complete")) expect_equal(t$text$colour, 'red') }) test_that("Complete and non-complete themes interact correctly with ggplot objects", { # Check that adding two theme successive theme objects to a ggplot object # works like adding the two theme object to each other p <- ggplot_build(qplot(1:3, 1:3) + theme_bw() + theme(text = element_text(colour = 'red'))) expect_true(attr(p$plot$theme, "complete")) # Compare the theme objects, after sorting the items, because item order can differ pt <- p$plot$theme tt <- theme_bw() + theme(text = element_text(colour = 'red')) pt <- pt[order(names(pt))] tt <- tt[order(names(tt))] expect_identical(pt, tt) p <- ggplot_build(qplot(1:3, 1:3) + theme(text = element_text(colour = 'red')) + theme_bw()) expect_true(attr(p$plot$theme, "complete")) # Compare the theme objects, after sorting the items, because item order can differ pt <- p$plot$theme tt <- theme(text = element_text(colour = 'red')) + theme_bw() pt <- pt[order(names(pt))] tt <- tt[order(names(tt))] expect_identical(pt, tt) p <- ggplot_build(qplot(1:3, 1:3) + theme(text = element_text(colour = 'red', face = 'italic'))) expect_false(attr(p$plot$theme, "complete")) expect_equal(p$plot$theme$text$colour, "red") expect_equal(p$plot$theme$text$face, "italic") p <- ggplot_build(qplot(1:3, 1:3) + theme(text = element_text(colour = 'red')) + theme(text = element_text(face = 'italic'))) expect_false(attr(p$plot$theme, "complete")) expect_equal(p$plot$theme$text$colour, "red") expect_equal(p$plot$theme$text$face, "italic") # Only gets red property; because of the way lists are processed in R, the # the second item doesn't get used properly. But I think that's OK. p <- ggplot_build(qplot(1:3, 1:3) + theme(text = element_text(colour = 'red'), text = element_text(face = 'italic'))) expect_false(attr(p$plot$theme, "complete")) expect_equal(p$plot$theme$text$colour, "red") expect_equal(p$plot$theme$text$face, "plain") }) test_that("theme(validate=FALSE) means do not validate_element", { p <- qplot(1:3, 1:3) bw <- p + theme_bw() red.text <- theme(text = element_text(colour = "red")) bw.before <- bw + theme(animint.width = 500, validate = FALSE) expect_equal(bw.before$theme$animint.width, 500) bw.after <- p + theme(animint.width = 500, validate = FALSE) + theme_bw() expect_null(bw.after$theme$animint.width) red.after <- p + theme(animint.width = 500, validate = FALSE) + red.text expect_equal(red.after$theme$animint.width, 500) red.before <- p + red.text + theme(animint.width = 500, validate = FALSE) expect_equal(red.before$theme$animint.width, 500) }) ggplot2/tests/testthat/test-qplot.r0000644000175100001440000000114612302672540017152 0ustar hornikuserscontext("qplot") test_that("qplot works with variables in data frame and parent env", { df <- data.frame(x = 1:10, a = 1:10) y <- 1:10 b <- 1:10 expect_is(qplot(x, y, data = df), "ggplot") expect_is(qplot(x, y, data = df, colour = a), "ggplot") expect_is(qplot(x, y, data = df, colour = b), "ggplot") bin <- 1 expect_is(qplot(x, data = df, binwidth = bin), "ggplot") }) test_that("qplot works in non-standard environments", { env <- new.env(parent = globalenv()) expr <- quote({ `-1-` <- 10 x <- 1:10 qplot(x, breaks = 0:`-1-`) }) expect_is(eval(expr, env), "ggplot") }) ggplot2/tests/testthat/test-facet-labels.r0000644000175100001440000001127512611724324020342 0ustar hornikuserscontext("Facet Labels") get_labels_matrix <- function(plot, ...) { data <- ggplot_build(plot) facet <- data$plot$facet panel <- data$panel labels <- get_labels_info(facet, panel, ...) labeller <- match.fun(facet$labeller) # Create matrix of labels matrix <- lapply(labeller(labels), cbind) matrix <- do.call("cbind", matrix) matrix } get_labels_info <- function(facet, panel, ...) { UseMethod("get_labels_info") } get_labels_info.grid <- function(facet, panel, type) { if (type == "rows") { labels <- unique(panel$layout[names(facet$rows)]) attr(labels, "type") <- "rows" attr(labels, "facet") <- "grid" } else { labels <- unique(panel$layout[names(facet$cols)]) attr(labels, "type") <- "cols" attr(labels, "facet") <- "grid" } labels } get_labels_info.wrap <- function(facet, panel) { labels <- panel$layout[names(facet$facets)] attr(labels, "facet") <- "wrap" if (!is.null(facet$switch) && facet$switch == "x") { attr(labels, "type") <- "rows" } else { attr(labels, "type") <- "cols" } labels } test_that("labellers handle facet labels properly", { labels <- list(var1 = letters[1:2], var2 = letters[3:4]) expect_identical(label_value(labels), labels) expect_identical(label_value(labels, FALSE), list(c("a, c", "b, d"))) expect_identical(label_both(labels), list(c("var1: a", "var1: b"), c("var2: c", "var2: d"))) expect_identical(label_both(labels, FALSE), list(c("var1, var2: a, c", "var1, var2: b, d"))) }) test_that("labellers handle plotmath expressions", { labels <- list(var1 = c("alpha", "beta"), var2 = letters[3:4]) expected_parsed <- list( list(expression(alpha), expression(beta)), list(expression(c), expression(d)) ) expect_identical(label_parsed(labels), expected_parsed) expected_parsed_multi <- list(list( expression(list(alpha, c)), expression(list(beta, d)) )) expect_identical(label_parsed(labels, FALSE), expected_parsed_multi) }) test_that("label_value() handles factors", { labels_chr <- list(var1 = letters[1:2], var2 = letters[3:4]) labels <- lapply(labels_chr, factor) expect_identical(label_value(labels), labels_chr) }) test_that("labeller() dispatches labellers", { p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() expected_cyl_both <- cbind(paste("cyl:", c(4, 6, 8))) expected_am_both <- cbind(paste("am:", 0:1)) # Rows and cols dispatch with facet_wrap() p1 <- p + facet_wrap(~cyl, labeller = labeller(.rows = label_both)) p2 <- p + facet_wrap(~cyl, labeller = labeller(.cols = label_both)) expect_equal(get_labels_matrix(p1), expected_cyl_both) expect_equal(get_labels_matrix(p2), expected_cyl_both) # facet_wrap() shouldn't get both rows and cols p3 <- p + facet_wrap(~cyl, labeller = labeller( .cols = label_both, .rows = label_both)) expect_error(ggplotGrob(p3)) # facet_grid() can get both rows and cols p4 <- p + facet_grid(am ~ cyl, labeller = labeller( .cols = label_both, .rows = label_both)) expect_equal(get_labels_matrix(p4, "rows"), expected_am_both) expect_equal(get_labels_matrix(p4, "cols"), expected_cyl_both) # Cannot have a specific labeller for a variable which already has a # margin-wide labeller p5 <- p + facet_wrap(~cyl, labeller = labeller( .rows = label_both, cyl = label_value)) expect_error(ggplotGrob(p5)) # Variables can be attributed labellers p6 <- p + facet_grid(am + cyl ~ ., labeller = labeller( am = label_both, cyl = label_both)) expect_equal( get_labels_matrix(p6, "rows"), cbind( paste("am:", rep(0:1, each = 3)), paste("cyl:", rep(c(4, 6, 8), 2)) ) ) # Default labeller is used for other variables p7 <- p + facet_grid(am ~ cyl, labeller = labeller(.default = label_both)) expect_equal(get_labels_matrix(p7, "rows"), expected_am_both) expect_equal(get_labels_matrix(p7, "cols"), expected_cyl_both) }) test_that("as_labeller() deals with non-labellers", { p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() lookup <- c(`0` = "zero", `1` = "one") # Lookup table p1 <- p + facet_wrap(~am, labeller = labeller(am = lookup)) expect_equal(get_labels_matrix(p1), cbind(c("zero", "one"))) # Non-labeller function taking character vectors p2 <- p + facet_wrap(~am, labeller = labeller(am = function(x) paste0(x, "-foo"))) expect_equal(get_labels_matrix(p2), cbind(c("0-foo", "1-foo"))) }) test_that("old school labellers still work", { my_labeller <- function(variable, value) { paste0("var = ", as.character(value)) } expect_warning(p <- ggplot(mtcars, aes(disp, drat)) + geom_point() + facet_grid(~cyl, labeller = my_labeller)) expected_labels <- cbind(paste("var =", c(4, 6, 8))) expect_identical(get_labels_matrix(p, "cols"), expected_labels) }) ggplot2/tests/testthat/test-fortify.r0000644000175100001440000000227112554471162017503 0ustar hornikuserscontext("Fortify") library(sp) test_that("Spatial polygons have correct ordering", { make_square <- function(x = 0, y = 0, height = 1, width = 1){ delx <- width/2 dely <- height/2 Polygon(matrix(c(x + delx, x - delx,x - delx,x + delx,x + delx , y - dely,y - dely,y + dely,y + dely,y - dely), ncol = 2)) } make_hole <- function(x = 0, y = 0, height = .5, width = .5){ p <- make_square(x = x, y = y, height = height, width = width) p@hole <- TRUE p } fake_data <- data.frame(ids = 1:5, region = c(1,1,2,3,4)) rownames(fake_data) <- 1:5 polys <- list(Polygons(list(make_square(), make_hole()), 1), Polygons(list(make_square(1,0), make_square(2, 0)), 2), Polygons(list(make_square(1,1)), 3), Polygons(list(make_square(0,1)), 4), Polygons(list(make_square(0,3)), 5)) polys_sp <- SpatialPolygons(polys) fake_sp <- SpatialPolygonsDataFrame(polys_sp, fake_data) # now reorder regions polys2 <- rev(polys) polys2_sp <- SpatialPolygons(polys2) fake_sp2 <- SpatialPolygonsDataFrame(polys2_sp, fake_data) expect_equivalent(fortify(fake_sp), plyr::arrange(fortify(fake_sp2), id, order)) }) ggplot2/tests/testthat/test-scales.r0000644000175100001440000001144212567704140017272 0ustar hornikuserscontext("Scales") test_that("buidling a plot does not affect its scales", { dat <- data.frame(x = rnorm(20), y = rnorm(20)) p <- ggplot(dat, aes(x, y)) + geom_point() expect_equal(length(p$scales$scales), 0) ggplot_build(p) expect_equal(length(p$scales$scales), 0) }) test_that("ranges update only for variables listed in aesthetics", { sc <- scale_alpha() sc$train_df(data.frame(alpha = 1:10)) expect_equal(sc$range$range, c(1, 10)) sc$train_df(data.frame(alpha = 50)) expect_equal(sc$range$range, c(1, 50)) sc$train_df(data.frame(beta = 100)) expect_equal(sc$range$range, c(1, 50)) sc$train_df(data.frame()) expect_equal(sc$range$range, c(1, 50)) }) test_that("mapping works", { sc <- scale_alpha(range = c(0, 1), na.value = 0) sc$train_df(data.frame(alpha = 1:10)) expect_equal( sc$map_df(data.frame(alpha = 1:10))[[1]], seq(0, 1, length.out = 10) ) expect_equal(sc$map_df(data.frame(alpha = NA))[[1]], 0) expect_equal( sc$map_df(data.frame(alpha = c(-10, 11)))[[1]], c(0, 0)) }) test_that("identity scale preserves input values", { df <- data.frame(x = 1:3, z = letters[1:3]) p1 <- ggplot(df, aes(x, z, colour = z, fill = z, shape = z, size = x, alpha = x)) + geom_point() + scale_colour_identity() + scale_fill_identity() + scale_shape_identity() + scale_size_identity() + scale_alpha_identity() d1 <- layer_data(p1) expect_equal(d1$colour, as.character(df$z)) expect_equal(d1$fill, as.character(df$z)) expect_equal(d1$shape, as.character(df$z)) expect_equal(d1$size, as.numeric(df$z)) expect_equal(d1$alpha, as.numeric(df$z)) }) test_that("position scales updated by all position aesthetics", { df <- data.frame(x = 1:3, y = 1:3) aesthetics <- list( aes(xend = x, yend = x), aes(xmin = x, ymin = x), aes(xmax = x, ymax = x), aes(xintercept = x, yintercept = y) ) base <- ggplot(df, aes(x = 1, y = 1)) + geom_point() plots <- lapply(aesthetics, function(x) base %+% x) ranges <- lapply(plots, pranges) lapply(ranges, function(range) { expect_equal(range$x[[1]], c(1, 3)) expect_equal(range$y[[1]], c(1, 3)) }) }) test_that("position scales generate after stats", { df <- data.frame(x = factor(c(1, 1, 1))) plot <- ggplot(df, aes(x)) + geom_bar() ranges <- pranges(plot) expect_equal(ranges$x[[1]], c("1")) expect_equal(ranges$y[[1]], c(0, 3)) }) test_that("oob affects position values", { dat <- data.frame(x = c("a", "b", "c"), y = c(1, 5, 10)) base <- ggplot(dat, aes(x, y)) + geom_bar(stat = "identity") + annotate("point", x = "a", y = c(-Inf, Inf)) y_scale <- function(limits, oob = censor) { scale_y_continuous(limits = limits, oob = oob, expand = c(0, 0)) } base + scale_y_continuous(limits = c(-0,5)) expect_warning(low_censor <- cdata(base + y_scale(c(0, 5), censor)), "Removed 1 rows containing missing values") expect_warning(mid_censor <- cdata(base + y_scale(c(3, 7), censor)), "Removed 2 rows containing missing values") low_squish <- cdata(base + y_scale(c(0, 5), squish)) mid_squish <- cdata(base + y_scale(c(3, 7), squish)) # Points are always at the top and bottom expect_equal(low_censor[[2]]$y, c(0, 1)) expect_equal(mid_censor[[2]]$y, c(0, 1)) expect_equal(low_squish[[2]]$y, c(0, 1)) expect_equal(mid_squish[[2]]$y, c(0, 1)) # Bars depend on limits and oob expect_equal(low_censor[[1]]$y, c(0.2, 1)) expect_equal(mid_censor[[1]]$y, c(0.5)) expect_equal(low_squish[[1]]$y, c(0.2, 1, 1)) expect_equal(mid_squish[[1]]$y, c(0, 0.5, 1)) }) test_that("scales looked for in appropriate place", { xlabel <- function(x) ggplot_build(x)$panel$x_scales[[1]]$name p0 <- qplot(mpg, wt, data = mtcars) + scale_x_continuous("0") expect_equal(xlabel(p0), "0") scale_x_continuous <- function(...) ggplot2::scale_x_continuous("1") p1 <- qplot(mpg, wt, data = mtcars) expect_equal(xlabel(p1), "1") f <- function() { scale_x_continuous <- function(...) ggplot2::scale_x_continuous("2") qplot(mpg, wt, data = mtcars) } p2 <- f() expect_equal(xlabel(p2), "2") rm(scale_x_continuous) p4 <- qplot(mpg, wt, data = mtcars) expect_equal(xlabel(p4), waiver()) }) test_that("find_global searches in the right places", { testenv <- new.env(parent = globalenv()) # This should find the scale object in the package environment expect_identical(find_global("scale_colour_hue", testenv), ggplot2::scale_colour_hue) # Set an object with the same name in the environment testenv$scale_colour_hue <- "foo" # Now it should return the new object expect_identical(find_global("scale_colour_hue", testenv), "foo") # If we search in the empty env, we should end up with the object # from the ggplot2 namespace expect_identical(find_global("scale_colour_hue", emptyenv()), ggplot2::scale_colour_hue) }) ggplot2/tests/testthat/test-coord-polar.r0000644000175100001440000000340012555424654020242 0ustar hornikuserscontext("coord_polar") test_that("Polar distance calculation", { dat <- data.frame( theta = c(0, 2*pi, 2, 6, 6, 1, 1, 0), r = c(0, 0, 0.5, 0.5, 1, 1, 0.75, .5)) scales <- list( x = scale_x_continuous(limits = c(0, 2*pi)), y = scale_y_continuous(limits = c(0, 1)) ) coord <- coord_polar() dists <- coord$distance(dat$theta, dat$r, coord$train(scales)) # dists is normalized by dividing by this value, so we'll add it back # The maximum length of a spiral arc, from (t,r) = (0,0) to (2*pi,1) maxlen <- spiral_arc_length(1 / (2 * pi), 0, 2 * pi) # These are the expected lengths. I think they're correct... expect_equal(dists, c(0, -1.225737494, -2, -0.5, -5, -0.25, -0.6736885011) / maxlen) # The picture can be visualized with: # ggplot(dat, aes(x=theta, y=r)) + geom_path() + # geom_point(alpha=0.3) + coord_polar() }) test_that("Polar distance calculation ignores NA's", { # These are r and theta values; we'll swap them around for testing x1 <- c(0, 0.5, 0.5, NA, 1) x2 <- c(0, 1, 2, 0, 1) dists <- dist_polar(x1, x2) expect_equal(is.na(dists), c(FALSE, FALSE, TRUE, TRUE)) dists <- dist_polar(x2, x1) expect_equal(is.na(dists), c(FALSE, FALSE, TRUE, TRUE)) # NA on the end x1 <- c(0, 0.5, 0.5, 1, NA) x2 <- c(0, 1, 2, 0, 1) dists <- dist_polar(x1, x2) expect_equal(is.na(dists), c(FALSE, FALSE, FALSE, TRUE)) dists <- dist_polar(x2, x1) expect_equal(is.na(dists), c(FALSE, FALSE, FALSE, TRUE)) # NAs in each vector - also have NaN x1 <- c(0, 0.5, 0.5, 1, NA) x2 <- c(NaN, 1, 2, NA, 1) dists <- dist_polar(x1, x2) expect_equal(is.na(dists), c(TRUE, FALSE, TRUE, TRUE)) dists <- dist_polar(x2, x1) expect_equal(is.na(dists), c(TRUE, FALSE, TRUE, TRUE)) }) ggplot2/tests/testthat/test-build.r0000644000175100001440000000307712567630351017126 0ustar hornikusers# Test the complete path from plot specification to rendered data context("Plot building") df <- data.frame(x = 1:3, y = 3:1, z = letters[1:3]) test_that("there is one data frame for each layer", { nlayers <- function(x) length(ggplot_build(x)$data) l1 <- ggplot(df, aes(x, y)) + geom_point() l2 <- ggplot(df, aes(x, y)) + geom_point() + geom_line() l3 <- ggplot(df, aes(x, y)) + geom_point() + geom_line() + geom_point() expect_equal(nlayers(l1), 1) expect_equal(nlayers(l2), 2) expect_equal(nlayers(l3), 3) }) test_that("position aesthetics coerced to correct type", { l1 <- ggplot(df, aes(x, y)) + geom_point() d1 <- layer_data(l1, 1) expect_is(d1$x, "numeric") expect_is(d1$y, "numeric") l2 <- ggplot(df, aes(x, z)) + geom_point() + scale_x_discrete() d2 <- layer_data(l2, 1) expect_is(d2$x, "integer") expect_is(d2$y, "integer") }) test_that("non-position aesthetics are mapped", { l1 <- ggplot(df, aes(x, y, fill = z, colour = z, shape = z, size = z)) + geom_point() d1 <- layer_data(l1, 1) expect_equal(sort(names(d1)), sort(c("x", "y", "fill", "group", "colour", "shape", "size", "PANEL", "alpha", "stroke"))) l2 <- l1 + scale_colour_manual(values = c("blue", "red", "yellow")) d2 <- layer_data(l2, 1) expect_equal(d2$colour, c("blue", "red", "yellow")) }) test_that("strings are not converted to factors", { df <- data.frame(x = 1:2, y = 2:1, label = c("alpha", "beta"), stringsAsFactors = FALSE) p <- ggplot(df, aes(x, y)) + geom_text(aes(label = label), parse = TRUE) expect_is(layer_data(p)$label, "character") }) ggplot2/tests/testthat/test-stat-bin2d.R0000644000175100001440000000204412565203664017730 0ustar hornikuserscontext("stat_bin2d") test_that("binwidth is respected", { df <- data.frame(x = c(1, 1, 1, 2), y = c(1, 1, 1, 2)) base <- ggplot(df, aes(x, y)) + stat_bin2d(geom = "tile", binwidth = 0.25) out <- layer_data(base) expect_equal(nrow(out), 2) # Adjust tolerance to account for fuzzy breaks adjustment expect_equal(out$xmin, c(1, 1.75), tol = 1e-7) expect_equal(out$xmax, c(1.25, 2), tol = 1e-7) }) test_that("breaks override binwidth", { # Test explicitly setting the breaks for x, overriding # the binwidth. integer_breaks <- (0:4) - 0.5 # Will use for x half_breaks <- seq(0, 3.5, 0.5) # Will test against this for y df <- data.frame(x = 0:3, y = 0:3) base <- ggplot(df, aes(x, y)) + stat_bin2d( breaks = list(x = integer_breaks, y = NULL), binwidth = c(0.5, 0.5) ) out <- layer_data(base) expect_equal(out$xbin, cut(df$x, adjust_breaks(integer_breaks), include.lowest = TRUE, labels = FALSE)) expect_equal(out$ybin, cut(df$y, adjust_breaks(half_breaks), include.lowest = TRUE, labels = FALSE)) }) ggplot2/tests/testthat/test-annotate.r0000644000175100001440000000156512565147166017645 0ustar hornikuserscontext("annotate") test_that("dates in segment annotation work", { dt <- structure(list(month = structure(c(1364774400, 1377993600), class = c("POSIXct", "POSIXt"), tzone = "UTC"), total = c(-10.3, 11.7)), .Names = c("month", "total"), row.names = c(NA, -2L), class = "data.frame") p <- ggplot(dt, aes(month, total)) + geom_point() + annotate("segment", x = as.POSIXct("2013-04-01"), xend = as.POSIXct("2013-07-01"), y = -10, yend = 10 ) expect_true(all(c("xend", "yend") %in% names(layer_data(p, 2)))) }) test_that("segment annotations transform with scales", { # This should be a visual test, but contriubtion documentation does not # explain how to make one ggplot(mtcars, aes(wt, mpg)) + geom_point() + annotate("segment", x = 2, y = 10, xend = 5, yend = 30, colour = "red") + scale_y_reverse() }) ggplot2/tests/testthat/test-coord-train.r0000644000175100001440000000243012567704140020236 0ustar hornikuserscontext("coord_train") test_that("NA's don't appear in breaks", { # Returns true if any major/minor breaks have an NA any_NA_major_minor <- function(trained) { ns <- names(trained)[grepl("(\\.major)|(\\.minor)$", names(trained))] for (n in ns) { if (!is.null(trained[n]) && any(is.na(trained[n]))) return(TRUE) } return(FALSE) } scales <- list( x = scale_x_continuous(limits = c(1, 12)), y = scale_y_continuous(limits = c(1, 12)) ) # First have to test that scale_breaks_positions will return a vector with NA # This is a test to make sure the later tests will be useful! # It's possible that changes to the the way that breaks are calculated will # make it so that scale_break_positions will no longer give NA for range 1, 12 expect_true(any(is.na((scales$x$break_positions())))) expect_true(any(is.na((scales$y$break_positions())))) # Check the various types of coords to make sure they don't have NA breaks expect_false(any_NA_major_minor(coord_polar()$train(scales))) expect_false(any_NA_major_minor(coord_cartesian()$train(scales))) expect_false(any_NA_major_minor(coord_trans()$train(scales))) expect_false(any_NA_major_minor(coord_fixed()$train(scales))) expect_false(any_NA_major_minor(coord_map()$train(scales))) }) ggplot2/tests/testthat/helper-plot-data.r0000644000175100001440000000140612567704140020204 0ustar hornikusers# Transform the data as the coordinate system does cdata <- function(plot) { pieces <- ggplot_build(plot) lapply(pieces$data, function(d) { plyr::ddply(d, "PANEL", function(panel_data) { scales <- panel_scales(pieces$panel, panel_data$PANEL[1]) details <- plot$coordinates$train(scales) plot$coordinates$transform(panel_data, details) }) }) } pranges <- function(plot) { panels <- ggplot_build(plot)$panel x_ranges <- lapply(panels$x_scales, function(scale) scale$get_limits()) y_ranges <- lapply(panels$y_scales, function(scale) scale$get_limits()) npscales <- plot$scales$non_position_scales() npranges <- lapply(npscales$scales$scales, function(scale) scale$get_limits()) c(list(x = x_ranges, y = y_ranges), npranges) } ggplot2/tests/testthat/test-aes.r0000644000175100001440000000315112565146727016577 0ustar hornikuserscontext("Creating aesthetic mappings") test_that("aes() captures input expressions", { out <- aes(mpg, wt + 1) expect_equal(out$x, quote(mpg)) expect_equal(out$y, quote(wt + 1)) }) test_that("aes_q() uses quoted calls and formulas", { out <- aes_q(quote(mpg), ~ wt + 1) expect_equal(out$x, quote(mpg)) expect_equal(out$y, quote(wt + 1)) }) test_that("aes_string() parses strings", { expect_equal(aes_string("a + b")$x, quote(a + b)) }) test_that("aes_string() doesn't parse non-strings", { old <- options(OutDec = ",") on.exit(options(old)) expect_equal(aes_string(0.4)$x, 0.4) }) test_that("aes_q() & aes_string() preserves explicit NULLs", { expect_equal(aes_q(NULL), aes(NULL)) expect_equal(aes_q(x = NULL), aes(NULL)) expect_equal(aes_q(colour = NULL), aes(colour = NULL)) expect_equal(aes_string(NULL), aes(NULL)) expect_equal(aes_string(x = NULL), aes(NULL)) expect_equal(aes_string(colour = NULL), aes(colour = NULL)) }) test_that("aes_all() converts strings into mappings", { expect_equal( aes_all(c("x", "y", "col", "pch")), aes(x, y, colour = col, shape = pch) ) }) test_that("aes evaluated in environment where plot created", { df <- data.frame(x = 1, y = 1) p <- ggplot(df, aes(foo, y)) + geom_point() # Accessing an undefined variable should result in error expect_error(layer_data(p), "'foo' not found") # Once it's defined we should get it back foo <- 0 expect_equal(layer_data(p)$x, 0) # And regular variable shadowing should work f <- function() { foo <- 10 ggplot(df, aes(foo, y)) + geom_point() } expect_equal(layer_data(f())$x, 10) }) ggplot2/tests/testthat/test-labels.r0000644000175100001440000000070312302672540017253 0ustar hornikuserscontext("Labels") test_that("Setting guide labels", { expect_identical(xlab("my label")$x, "my label") expect_identical(labs(x = "my label")$x, "my label") expect_identical(ylab("my label")$y, "my label") expect_identical(labs(y = "my label")$y, "my label") # Colour expect_identical(labs(colour = "my label")$colour, "my label") # American spelling expect_identical(labs(color = "my label")$colour, "my label") }) ggplot2/tests/testthat/test-data.r0000644000175100001440000000165012567330071016727 0ustar hornikuserscontext("Data") test_that("stringsAsFactors doesn't affect results", { sAF <- getOption("stringsAsFactors") dat.character <- data.frame(x = letters[5:1], y = 1:5, stringsAsFactors = FALSE) dat.factor <- data.frame(x = letters[5:1], y = 1:5, stringsAsFactors = TRUE) base <- ggplot(mapping = aes(x, y)) + geom_point() xlabels <- function(x) x$panel$ranges[[1]]$x.labels options(stringsAsFactors = TRUE) char_true <- ggplot_build(base %+% dat.character) factor_true <- ggplot_build(base %+% dat.factor) options(stringsAsFactors = FALSE) char_false <- ggplot_build(base %+% dat.character) factor_false <- ggplot_build(base %+% dat.factor) options(stringsAsFactors = sAF) expect_equal(xlabels(char_true), letters[1:5]) expect_equal(xlabels(char_false), letters[1:5]) expect_equal(xlabels(factor_true), letters[1:5]) expect_equal(xlabels(factor_false), letters[1:5]) }) ggplot2/tests/testthat/test-guides.R0000644000175100001440000000036212553741617017244 0ustar hornikuserscontext("Guides") test_that("colourbar trains without labels", { g <- guide_colorbar() sc <- scale_colour_continuous(limits = c(0, 4), labels = NULL) out <- guide_train(g, sc) expect_equal(names(out$key), c("colour", ".value")) }) ggplot2/tests/testthat/test-function-args.r0000644000175100001440000000521512567416710020603 0ustar hornikuserscontext("function-args") filter_args <- function(x) { all_names <- names(x) all_names <- setdiff(all_names, c("self", "data", "scales", "coordinates", "...")) x[all_names] } test_that("geom_xxx and GeomXxx$draw arg defaults match", { ggplot2_ns <- asNamespace("ggplot2") objs <- ls(ggplot2_ns) geom_fun_names <- objs[grepl("^(geom|annotation)_", objs)] # These aren't actually geoms, or need special parameters and can't be tested this way. geom_fun_names <- setdiff( geom_fun_names, c("geom_aesthetics", "geom_map", "annotation_custom", "annotation_map", "annotation_raster", "annotation_id") ) # For each geom_xxx function and the corresponding GeomXxx$draw and # GeomXxx$draw_groups functions, make sure that if they have same args, that # the args have the same default values. lapply(geom_fun_names, function(geom_fun_name) { geom_fun <- ggplot2_ns[[geom_fun_name]] draw <- geom_fun()$geom$draw_layer draw_groups <- geom_fun()$geom$draw_group fun_args <- formals(geom_fun) draw_args <- c(ggproto_formals(draw), ggproto_formals(draw_groups)) draw_args <- filter_args(draw_args) common_names <- intersect(names(fun_args), names(draw_args)) expect_identical(fun_args[common_names], draw_args[common_names], info = paste0("Mismatch between arg defaults for ", geom_fun_name, " and ", class(geom_fun()$geom)[1], "'s $draw and/or $draw_group functions.") ) }) }) test_that("stat_xxx and StatXxx$draw arg defaults match", { ggplot2_ns <- asNamespace("ggplot2") objs <- ls(ggplot2_ns) stat_fun_names <- objs[grepl("^stat_", objs)] # These aren't actually stats, or need special parameters and can't be tested this way. stat_fun_names <- setdiff( stat_fun_names, c("stat_aesthetics", "stat_function") ) # For each geom_xxx function and the corresponding GeomXxx$draw and # GeomXxx$draw_groups functions, make sure that if they have same args, that # the args have the same default values. lapply(stat_fun_names, function(stat_fun_name) { stat_fun <- ggplot2_ns[[stat_fun_name]] calculate <- stat_fun()$stat$compute calculate_groups <- stat_fun()$stat$compute_group fun_args <- formals(stat_fun) calc_args <- c(ggproto_formals(calculate), ggproto_formals(calculate_groups)) calc_args <- filter_args(calc_args) common_names <- intersect(names(fun_args), names(calc_args)) expect_identical(fun_args[common_names], calc_args[common_names], info = paste0("Mismatch between arg defaults for ", stat_fun_name, " and ", class(stat_fun()$stat)[1], "'s $compute and/or $compute_groups functions.") ) }) }) ggplot2/tests/testthat/test-aes-grouping.r0000644000175100001440000000240712567371021020417 0ustar hornikuserscontext("Aesthetics (grouping)") df <- data.frame( x = 1:4, a = c("a", "a", "b", "b"), b = c("a", "b", "a", "b") ) group <- function(x) as.vector(layer_data(x, 1)$group) groups <- function(x) length(unique(group(x))) test_that("one group per combination of discrete vars", { plot <- ggplot(df, aes(x, x)) + geom_point() expect_equal(group(plot), rep(NO_GROUP, 4)) plot <- ggplot(df, aes(x, a)) + geom_point() expect_equal(group(plot), c(1, 1, 2, 2)) plot <- ggplot(df, aes(x, b)) + geom_point() expect_equal(group(plot), c(1, 2, 1, 2)) plot <- ggplot(df, aes(a, b)) + geom_point() expect_equal(groups(plot), 4) }) test_that("label is not used as a grouping var", { plot <- ggplot(df, aes(x, x, label = a)) + geom_point() expect_equal(group(plot), rep(NO_GROUP, 4)) plot <- ggplot(df, aes(x, x, colour = a, label = b)) + geom_point() expect_equal(group(plot), c(1, 1, 2, 2)) }) test_that("group aesthetic overrides defaults", { plot <- ggplot(df, aes(x, x, group = x)) + geom_point() expect_equal(groups(plot), 4) plot <- ggplot(df, aes(a, b, group = 1)) + geom_point() expect_equal(groups(plot), 1) }) test_that("group param overrides defaults", { plot <- ggplot(df, aes(a, b)) + geom_point(group = 1) expect_equal(groups(plot), 1) }) ggplot2/tests/testthat/test-layer.r0000644000175100001440000000226212567630370017137 0ustar hornikuserscontext("Layer") # Parameters -------------------------------------------------------------- test_that("aesthetics go in aes_params", { l <- geom_point(size = "red") expect_equal(l$aes_params, list(size = "red")) }) test_that("unknown params create error", { expect_error(geom_point(blah = "red"), "Unknown parameters") }) # Calculated aesthetics --------------------------------------------------- test_that("Bare name surround by .. is calculated", { expect_true(is_calculated_aes(aes(..density..))) expect_true(is_calculated_aes(aes(..DENSITY..))) expect_false(is_calculated_aes(aes(a..x..b))) }) test_that("Calling using variable surround by .. is calculated", { expect_true(is_calculated_aes(aes(mean(..density..)))) expect_true(is_calculated_aes(aes(mean(..DENSITY..)))) expect_false(is_calculated_aes(aes(mean(a..x..b)))) }) test_that("strip_dots remove dots around calculated aesthetics", { expect_equal(strip_dots(aes(..density..))$x, quote(density)) expect_equal(strip_dots(aes(mean(..density..)))$x, quote(mean(density))) expect_equal(strip_dots(aes(sapply(..density.., function(x) mean(x)))$x), quote(sapply(density, function(x) mean(x)))) }) ggplot2/tests/testthat/test-aes-setting.r0000644000175100001440000000100512567325176020245 0ustar hornikuserscontext("Aes - setting values") test_that("Aesthetic parameters must match length of data", { df <- data.frame(x = 1:5, y = 1:5) p <- ggplot(df, aes(x, y)) set_colours <- function(colours) { layer_data(p + geom_point(colour = colours)) } set_colours("red") expect_error(set_colours(rep("red", 2)), "must be either length 1") expect_error(set_colours(rep("red", 3)), "must be either length 1") expect_error(set_colours(rep("red", 4)), "must be either length 1") set_colours(rep("red", 5)) }) ggplot2/tests/testthat/test-stats.r0000644000175100001440000000053412565144016017154 0ustar hornikuserscontext("Stats") test_that("plot succeeds even if some computation fails", { df <- data.frame(x = 1:2, y = 1) p1 <- ggplot(df, aes(x, y)) + geom_point() b1 <- ggplot_build(p1) expect_equal(length(b1$data), 1) p2 <- p1 + geom_smooth() expect_warning(b2 <- ggplot_build(p2), "Computation failed") expect_equal(length(b2$data), 2) }) ggplot2/tests/testthat/test-stat-density.R0000644000175100001440000000067212536601134020406 0ustar hornikuserscontext("stat_density") # and stat_ydensity test_that("compute_density succeeds when variance is zero", { dens <- compute_density(rep(0, 10), NULL, from = 0.5, to = 0.5) expect_equal(dens$n, rep(10, 512)) }) test_that("compute_density returns useful df when <3 values", { dens <- compute_density(c(1, 2), NULL, from = 0, to = 0) expect_equal(nrow(dens), 2) expect_equal(names(dens), c("x", "density", "scaled", "count", "n")) }) ggplot2/tests/testthat/test-geom-text.R0000644000175100001440000000150112540117275017662 0ustar hornikuserscontext("geom_text") # compute_just ------------------------------------------------------------ test_that("vertical and horizontal positions are equivalent", { horiz <- compute_just(c("left", "middle", "right"), c(0, 0, 0)) vert <- compute_just(c("bottom", "center", "top"), c(0, 0, 0)) expect_equal(horiz, vert) }) test_that("inward moves text towards center", { expect_equal( compute_just(c("inward", "inward", "inward"), c(0, 0.5, 1)), c(0, 0.5, 1.0) ) }) test_that("outwards moves text away from center", { expect_equal( compute_just(c("outward", "outward", "outward"), c(0, 0.5, 1)), c(1.0, 0.5, 0) ) }) test_that("inward points close to center are centered", { expect_equal( compute_just(c("inward", "inward", "inward"), c(0.5 - 1e-3, 0.5, 0.5 + 1e-3)), c(0.5, 0.5, 0.5) ) }) ggplot2/tests/testthat/test-geom-rule.R0000644000175100001440000000216312565147416017661 0ustar hornikuserscontext("geom_rule") # tests for geom_vline, geom_hline & geom_abline df <- data.frame(x = 1:3, y = 3:1) p <- ggplot(df, aes(x, y)) + geom_point() p_col <- ggplot(df, aes(x, y, colour = factor(x))) + geom_point() test_that("setting parameters makes one row df", { b <- p + geom_hline(yintercept = 1.5) expect_equal(layer_data(b, 2)$yintercept, 1.5) b <- p + geom_vline(xintercept = 1.5) expect_equal(layer_data(b, 2)$xintercept, 1.5) b <- p + geom_abline() expect_equal(layer_data(b, 2)$intercept, 0) expect_equal(layer_data(b, 2)$slope, 1) b <- p + geom_abline(slope = 0, intercept = 1) expect_equal(layer_data(b, 2)$intercept, 1) expect_equal(layer_data(b, 2)$slope, 0) }) test_that("setting aesthetics generates one row for each input row", { b <- p + geom_hline(aes(yintercept = 1.5)) expect_equal(layer_data(b, 2)$yintercept, rep(1.5, 3)) b <- p + geom_vline(aes(xintercept = 1.5)) expect_equal(layer_data(b, 2)$xintercept, rep(1.5, 3)) b <- p + geom_abline(aes(slope = 0, intercept = 1)) expect_equal(layer_data(b, 2)$intercept, rep(1, 3)) expect_equal(layer_data(b, 2)$slope, rep(0, 3)) }) ggplot2/tests/testthat/test-munch.r0000644000175100001440000000417412556122066017135 0ustar hornikuserscontext("Munch") test_that("interp works", { single_interp_test <- function(start, end, n) { i <- interp(start, end, n) info <- paste0("start: ", start, "; end: ", end, "; n: ", n) expect_equal(length(i), n, info = info) expect_true(start %in% i, info = info) expect_false(end %in% i, info = info) expect_true(all(i >= start), info = info) expect_true(all(i <= end), info = info) } single_interp_test(0, 1, 1) single_interp_test(0, 1, 2) single_interp_test(0, 1, 7) single_interp_test(-23, 56, 1) single_interp_test(-23, 56, 4) single_interp_test(31.276, 34.443, 1) single_interp_test(31.276, 34.443, 100) }) test_that("munch_data works", { single_munch_test <- function(data, dist=NULL, segment_length = 0.01) { md <- munch_data(data, dist, segment_length) # all rows of dat are in md expect_equal(nrow(merge(md, dat)), nrow(dat)) expect_true(nrow(md) >= nrow(dat)) } dat <- data.frame(x = c(0, 60, 30, 20, 40, 45), y = c(1, 1, 2, 2, 2, 2), group = c(1L, 1L, 1L, 2L, 2L, 2L)) dist <- dist_euclidean(dat$x, dat$y) dist[dat$group[-1] != dat$group[-nrow(dat)]] <- NA single_munch_test(dat, dist) single_munch_test(dat, dist, segment_length = 10) single_munch_test(dat, dist, segment_length = 100) dist <- coord_polar(theta = "x")$distance(dat$x, dat$y, list(r.range = range(c(0,dat$y)), theta.range = range(dat$x))) dist[dat$group[-1] != dat$group[-nrow(dat)]] <- NA single_munch_test(dat, dist) single_munch_test(dat, dist, segment_length = 10) single_munch_test(dat, dist, segment_length = 100) dist <- coord_polar(theta = "y")$distance(dat$x, dat$y, list(r.range = range(c(0,dat$x)), theta.range = range(dat$y))) dist[dat$group[-1] != dat$group[-nrow(dat)]] <- NA single_munch_test(dat, dist) single_munch_test(dat, dist, segment_length = 10) single_munch_test(dat, dist, segment_length = 100) }) ggplot2/tests/testthat/test-empty-data.r0000644000175100001440000000611512620207545020063 0ustar hornikuserscontext('Empty data') df0 <- data.frame(mpg = numeric(0), wt = numeric(0), am = numeric(0), cyl = numeric(0)) test_that("layers with empty data are silently omitted", { # Empty data (no visible points) d <- ggplot(df0, aes(mpg,wt)) + geom_point() expect_equal(nrow(layer_data(d)), 0) d <- ggplot() + geom_point(data = df0, aes(mpg,wt)) expect_equal(nrow(layer_data(d)), 0) # Regular mtcars data, x=mpg, y=wt, normal points and points from empty data frame d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = df0) expect_equal(nrow(layer_data(d, 1)), nrow(mtcars)) expect_equal(nrow(layer_data(d, 2)), 0) # Regular mtcars data, but points only from empty data frame d <- ggplot(mtcars, aes(mpg, wt)) + geom_point(data = df0) expect_equal(nrow(layer_data(d, 1)), 0) }) test_that("plots with empty data and vectors for aesthetics work", { d <- ggplot(NULL, aes(1:5, 1:5)) + geom_point() expect_equal(nrow(layer_data(d)), 5) d <- ggplot(data.frame(), aes(1:5, 1:5)) + geom_point() expect_equal(nrow(layer_data(d)), 5) d <- ggplot() + geom_point(aes(1:5, 1:5)) expect_equal(nrow(layer_data(d)), 5) }) test_that("layers with empty data are silently omitted with facet_wrap", { # Empty data, facet_wrap, throws error d <- ggplot(df0, aes(mpg, wt)) + geom_point() + facet_wrap(~cyl) expect_error(layer_data(d), "must have at least one value") d <- d + geom_point(data = mtcars) expect_equal(nrow(layer_data(d, 1)), 0) expect_equal(nrow(layer_data(d, 2)), nrow(mtcars)) }) test_that("layers with empty data are silently omitted with facet_grid", { d <- ggplot(df0, aes(mpg, wt)) + geom_point() + facet_grid(am ~ cyl) expect_error(layer_data(d), "must have at least one value") d <- d + geom_point(data = mtcars) expect_equal(nrow(layer_data(d, 1)), 0) expect_equal(nrow(layer_data(d, 2)), nrow(mtcars)) }) test_that("empty data overrides plot defaults", { # Should error when totally empty data frame because there's no x and y d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = data.frame()) expect_error(layer_data(d), "not found") # No extra points when x and y vars don't exist but are set d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = data.frame(), x = 20, y = 3) expect_equal(nrow(layer_data(d, 1)), nrow(mtcars)) expect_equal(nrow(layer_data(d, 2)), 0) # No extra points when x and y vars are empty, even when aesthetics are set d <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + geom_point(data = df0, x = 20, y = 3) expect_equal(nrow(layer_data(d, 1)), nrow(mtcars)) expect_equal(nrow(layer_data(d, 2)), 0) }) test_that("layer inherits data from plot when data = NULL", { d <- ggplot(mtcars, aes(mpg, wt)) + geom_point(data = NULL) expect_equal(nrow(layer_data(d)), nrow(mtcars)) }) test_that("empty layers still generate one grob per panel", { df <- data.frame(x = 1:3, y = c("a", "b", "c")) d <- ggplot(df, aes(x, y)) + geom_point(data = df[0, ]) + geom_point() + facet_wrap(~y) expect_equal(length(layer_grob(d)), 3) }) ggplot2/tests/testthat/test-facet-locate.r0000644000175100001440000001247012567330555020356 0ustar hornikuserscontext("Facetting (location)") df <- expand.grid(a = 1:2, b = 1:2) df_a <- unique(df["a"]) df_b <- unique(df["b"]) df_c <- unique(data.frame(c = 1)) test_that("two col cases with no missings adds single extra column", { vscyl <- layout_grid(list(mtcars), "cyl", "vs") loc <- locate_grid(mtcars, vscyl, "cyl", "vs") expect_equal(nrow(loc), nrow(mtcars)) expect_equal(ncol(loc), ncol(mtcars) + 1) match <- unique(loc[c("cyl", "vs", "PANEL")]) expect_equal(nrow(match), 5) }) test_that("margins add extra data", { panel <- layout_grid(list(df), "a", "b", margins = "b") loc <- locate_grid(df, panel, "a", "b", margins = "b") expect_equal(nrow(loc), nrow(df) * 2) }) test_that("grid: missing facet columns are duplicated", { panel <- layout_grid(list(df), "a", "b") loc_a <- locate_grid(df_a, panel, "a", "b") expect_equal(nrow(loc_a), 4) expect_equal(loc_a$PANEL, factor(1:4)) loc_b <- locate_grid(df_b, panel, "a", "b") expect_equal(nrow(loc_b), 4) expect_equal(loc_b$PANEL, factor(1:4)) loc_c <- locate_grid(df_c, panel, "a", "b") expect_equal(nrow(loc_c), 4) expect_equal(loc_c$PANEL, factor(1:4)) }) test_that("wrap: missing facet columns are duplicated", { panel <- layout_wrap(list(df), c("a", "b"), ncol = 1) loc_a <- locate_wrap(df_a, panel, c("a", "b")) expect_equal(nrow(loc_a), 4) expect_equal(loc_a$PANEL, factor(1:4)) expect_equal(loc_a$a, c(1, 1, 2, 2)) loc_b <- locate_wrap(df_b, panel, c("a", "b")) expect_equal(nrow(loc_b), 4) expect_equal(loc_b$PANEL, factor(1:4)) loc_c <- locate_wrap(df_c, panel, c("a", "b")) expect_equal(nrow(loc_c), 4) expect_equal(loc_c$PANEL, factor(1:4)) }) # Missing behaviour ---------------------------------------------------------- a3 <- data.frame( # a = c(1:3, NA), Not currently supported b = factor(c(1:3, NA)), c = factor(c(1:3, NA), exclude = NULL) ) test_that("wrap: missing values located correctly", { panel_b <- layout_wrap(list(a3), "b", ncol = 1) loc_b <- locate_wrap(data.frame(b = NA), panel_b, "b") expect_equal(as.character(loc_b$PANEL), "4") panel_c <- layout_wrap(list(a3), "c", ncol = 1) loc_c <- locate_wrap(data.frame(c = NA), panel_c, "c") expect_equal(as.character(loc_c$PANEL), "4") }) test_that("grid: missing values located correctly", { panel_b <- layout_grid(list(a3), "b") loc_b <- locate_grid(data.frame(b = NA), panel_b, "b") expect_equal(as.character(loc_b$PANEL), "4") panel_c <- layout_grid(list(a3), "c") loc_c <- locate_grid(data.frame(c = NA), panel_c, "c") expect_equal(as.character(loc_c$PANEL), "4") }) # Facet order ---------------------------------------------------------------- get_layout <- function(p) ggplot_build(p)$panel$layout # Data with factor f with levels CBA d <- data.frame(x = 1:9, y = 1:9, fx = factor(rep(letters[1:3], each = 3), levels = letters[3:1]), fy = factor(rep(LETTERS[1:3], each = 3), levels = LETTERS[3:1])) # Data with factor f with only level B d2 <- data.frame(x = 1:9, y = 2:10, fx = "a", fy = "B") test_that("grid: facet order follows default data frame order", { # Facets should be in order: # CBA for rows 1:3 # cba for cols 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_grid(fy ~ fx) + geom_point()) expect_equal(as.character(lay$fy), c("C","B","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("c","b","a")[lay$COL]) # When adding d2, facets should still be in order: # CBA for rows 1:3 # cba for cols 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_grid(fy ~ fx) + geom_blank(data = d2) + geom_point()) expect_equal(as.character(lay$fy), c("C","B","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("c","b","a")[lay$COL]) # With no default data: should search each layer in order # BCA for rows 1:3 # acb for cols 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_grid(fy ~ fx) + geom_blank(data = d2) + geom_point(data = d)) expect_equal(as.character(lay$fy), c("B","C","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("a","c","b")[lay$COL]) # Same as previous, but different layer order. # CBA for rows 1:3 # cba for cols 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_grid(fy ~ fx) + geom_point(data = d) + geom_blank(data = d2)) expect_equal(as.character(lay$fy), c("C","B","A")[lay$ROW]) expect_equal(as.character(lay$fx), c("c","b","a")[lay$COL]) }) test_that("wrap: facet order follows default data frame order", { # Facets should be in order: # cba for panels 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_wrap(~fx) + geom_point()) expect_equal(as.character(lay$fx), c("c","b","a")[lay$PANEL]) # When adding d2, facets should still be in order: # cba for panels 1:3 lay <- get_layout(ggplot(d, aes(x, y)) + facet_wrap(~fx) + geom_blank(data = d2) + geom_point()) expect_equal(as.character(lay$fx), c("c","b","a")[lay$PANEL]) # With no default data: should search each layer in order # acb for panels 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_wrap(~fx) + geom_blank(data = d2) + geom_point(data = d)) expect_equal(as.character(lay$fx), c("a","c","b")[lay$PANEL]) # Same as previous, but different layer order. # cba for panels 1:3 lay <- get_layout(ggplot(mapping = aes(x, y)) + facet_wrap(~fx) + geom_point(data = d) + geom_blank(data = d2)) expect_equal(as.character(lay$fx), c("c","b","a")[lay$PANEL]) }) ggplot2/tests/testthat/test-sanitise-dim.r0000644000175100001440000000313212540545060020376 0ustar hornikuserscontext("sanitise_dim") test_that("sanitise_dim returns NULL for zero-length inputs, with appropriate warnings", { expect_identical(sanitise_dim(NULL), NULL) n <- integer() y <- expect_identical(suppressWarnings(sanitise_dim(n)), NULL) expect_warning(sanitise_dim(n), "`n` has length zero and will be treated as NULL.") }) test_that("sanitise_dim returns the first element or NULL for non-positive integer inputs, with appropriate warnings", { n <- 1:2 expect_identical(suppressWarnings(sanitise_dim(n)), 1L) expect_warning(sanitise_dim(n), "Only the first value of `n` will be used.") n2 <- 0:1 expect_identical(suppressWarnings(sanitise_dim(n2)), NULL) expect_warning(sanitise_dim(n2), "Only the first value of `n2` will be used.") expect_warning(sanitise_dim(n2), "`n2` is missing or less than 1 and will be treated as NULL.") }) test_that("sanitise_dim returns a NULL for missing inputs, with appropriate warnings", { n <- NA_integer_ expect_identical(suppressWarnings(sanitise_dim(n)), NULL) expect_warning(sanitise_dim(n), "`n` is missing or less than 1 and will be treated as NULL.") }) test_that("sanitise_dim returns a positive integer or NULL for non-integer inputs, with appropriate warnings", { n <- 1.5 expect_identical(suppressWarnings(sanitise_dim(n)), 1L) expect_warning(sanitise_dim(n), "Coercing `n` to be an integer.") n2 <- 0.9999999 expect_identical(suppressWarnings(sanitise_dim(n2)), NULL) expect_warning(sanitise_dim(n2), "Coercing `n2` to be an integer.") expect_warning(sanitise_dim(n2), "`n2` is missing or less than 1 and will be treated as NULL.") }) ggplot2/tests/testthat/test-ggsave.R0000644000175100001440000000325312573545247017245 0ustar hornikuserscontext("ggsave") test_that("ggsave creates file", { path <- tempfile() on.exit(unlink(path)) p <- ggplot(mpg, aes(displ, hwy)) + geom_point() expect_false(file.exists(path)) ggsave(path, p, device = "pdf", width = 5, height = 5) expect_true(file.exists(path)) }) # plot_dim --------------------------------------------------------------- test_that("guesses and informs if dim not specified", { png(width = 10, height = 10, units = "in", res = 300) on.exit(capture.output(dev.off())) expect_message(out <- plot_dim(), "10 x 10") expect_equal(out, c(10, 10)) }) test_that("uses 7x7 if no graphics device open", { expect_equal(plot_dim(), c(7, 7)) }) test_that("warned about large plot unless limitsize = FALSE", { expect_error(plot_dim(c(50, 50)), "exceed 50 inches") expect_equal(plot_dim(c(50, 50), limitsize = FALSE), c(50, 50)) }) test_that("scale multiplies height & width", { expect_equal(plot_dim(c(10, 10), scale = 1), c(10, 10)) expect_equal(plot_dim(c(5, 5), scale = 2), c(10, 10)) }) # plot_dev --------------------------------------------------------------------- test_that("function passed back unchanged", { expect_equal(plot_dev(png), png) }) test_that("unknown device triggers error", { expect_error(plot_dev("xyz"), "Unknown graphics device") expect_error(plot_dev(NULL, "test.xyz"), "Unknown graphics device") }) test_that("text converted to function", { expect_identical(body(plot_dev("png"))[[1]], quote(grDevices::png)) expect_identical(body(plot_dev("pdf"))[[1]], quote(grDevices::pdf)) }) test_that("if device is NULL, guess from extension", { expect_identical(body(plot_dev(NULL, "test.png"))[[1]], quote(grDevices::png)) }) ggplot2/tests/testthat/test-stats-function.r0000644000175100001440000000122312565146574021006 0ustar hornikuserscontext("stat_function") test_that("uses scale limits, not data limits", { dat <- data.frame(x = c(0.1, 1:100)) dat$y <- dexp(dat$x) base <- ggplot(dat, aes(x, y)) + stat_function(fun = dexp) full <- base + scale_x_continuous(limits = c(0.1, 100)) + scale_y_continuous() ret <- layer_data(full) full_log <- base + scale_x_log10(limits = c(0.1, 100)) + scale_y_continuous() ret_log <- layer_data(full_log) expect_equal(ret$y[c(1, 101)], ret_log$y[c(1, 101)]) expect_equal(range(ret$x), c(0.1, 100)) expect_equal(range(ret_log$x), c(-1, 2)) expect_false(any(is.na(ret$y))) expect_false(any(is.na(ret_log$y))) }) ggplot2/tests/testthat/test-utilities.r0000644000175100001440000000342012556157266020041 0ustar hornikuserscontext("Utilities") test_that("finite.cases.data.frame", { # All finite -------------------------------------------------------------- expect_identical(finite.cases(data.frame(x = 4)), TRUE) # 1x1 expect_identical(finite.cases(data.frame(x = 4, y = 11)), TRUE) # 1x2 expect_identical(finite.cases(data.frame(x = 4:5)), c(TRUE, TRUE)) # 2x1 expect_identical(finite.cases(data.frame(x = 4:5, y = 11:12)), c(TRUE, TRUE)) # 2x2 # Has one NA -------------------------------------------------------------- expect_identical(finite.cases(data.frame(x = NA)), FALSE) # 1x1 expect_identical(finite.cases(data.frame(x = 4, y = NA)), FALSE) # 1x2 expect_identical(finite.cases(data.frame(x = c(4, NA))), c(TRUE, FALSE)) # 2x1 expect_identical(finite.cases(data.frame(x = c(4, NA), y = c(11, NA))), c(TRUE, FALSE)) # 2x2 expect_identical(finite.cases(data.frame(x = c(4, NA), y = c(NA, 12))), c(FALSE, FALSE)) # 2x2 expect_identical(finite.cases(data.frame(x = c(4, 5), y = c(NA, 12))), c(FALSE, TRUE)) # 2x2 # Testing NaN and Inf, using miscellaneous data shapes -------------------- expect_identical(finite.cases(data.frame(x = c(4, NaN))), c(TRUE, FALSE)) expect_identical(finite.cases(data.frame(x = Inf)), FALSE) expect_identical(finite.cases(data.frame(x = c(4, 5), y = c(-Inf, 12))), c(FALSE, TRUE)) }) test_that("add_group", { data <- data.frame(f=letters[7:9], x=1:3, y=4:6, group=c(1, -1, 1)) expect_true(has_groups(add_group(data[2:4]))) # explicit group column expect_true(has_groups(add_group(data[1:3]))) # discrete column expect_false(has_groups(add_group(data[2:3]))) # no group or discrete column }) ggplot2/tests/testthat/test-scales-breaks-labels.r0000644000175100001440000002060412620173071021770 0ustar hornikuserscontext("Scales: breaks and labels") test_that("labels match breaks, even when outside limits", { sc <- scale_y_continuous(breaks = 1:4, labels = 1:4, limits = c(1, 3)) expect_equal(sc$get_breaks(), c(1:3, NA)) expect_equal(sc$get_labels(), 1:4) expect_equal(sc$get_breaks_minor(), c(1, 1.5, 2, 2.5, 3)) }) test_that("labels must match breaks", { expect_error(scale_x_discrete(breaks = 1:3, labels = 1:2), "must have the same length") expect_error(scale_x_continuous(breaks = 1:3, labels = 1:2), "must have the same length") }) test_that("labels don't have to match null breaks", { expect_true(check_breaks_labels(breaks = 1:3, labels = NULL)) expect_true(check_breaks_labels(breaks = NULL, labels = 1:2)) }) test_that("labels don't have extra spaces", { labels <- c("a", "abc", "abcdef") sc1 <- scale_x_discrete(limits = labels) sc2 <- scale_fill_discrete(limits = labels) expect_equal(sc1$get_labels(), labels) expect_equal(sc2$get_labels(), labels) }) test_that("out-of-range breaks are dropped", { # Limits are explicitly specified, automatic labels sc <- scale_x_continuous(breaks = 1:5, limits = c(2, 4)) bi <- sc$break_info() expect_equal(bi$labels, as.character(2:4)) expect_equal(bi$major, c(0, 0.5, 1)) expect_equal(bi$major_source, 2:4) # Limits and labels are explicitly specified sc <- scale_x_continuous(breaks = 1:5, labels = letters[1:5], limits = c(2, 4)) bi <- sc$break_info() expect_equal(bi$labels, letters[2:4]) expect_equal(bi$major, c(0, 0.5, 1)) expect_equal(bi$major_source, 2:4) # Limits are specified, and all breaks are out of range sc <- scale_x_continuous(breaks = c(1,5), labels = letters[c(1,5)], limits = c(2, 4)) bi <- sc$break_info() expect_equal(length(bi$labels), 0) expect_equal(length(bi$major), 0) expect_equal(length(bi$major_source), 0) # limits aren't specified, automatic labels # limits are set by the data sc <- scale_x_continuous(breaks = 1:5) sc$train_df(data.frame(x = 2:4)) bi <- sc$break_info() expect_equal(bi$labels, as.character(2:4)) expect_equal(bi$major_source, 2:4) expect_equal(bi$major, c(0, 0.5, 1)) # Limits and labels are specified sc <- scale_x_continuous(breaks = 1:5, labels = letters[1:5]) sc$train_df(data.frame(x = 2:4)) bi <- sc$break_info() expect_equal(bi$labels, letters[2:4]) expect_equal(bi$major_source, 2:4) expect_equal(bi$major, c(0, 0.5, 1)) # Limits aren't specified, and all breaks are out of range of data sc <- scale_x_continuous(breaks = c(1,5), labels = letters[c(1,5)]) sc$train_df(data.frame(x = 2:4)) bi <- sc$break_info() expect_equal(length(bi$labels), 0) expect_equal(length(bi$major), 0) expect_equal(length(bi$major_source), 0) }) test_that("no minor breaks when only one break", { sc1 <- scale_x_discrete(limits = "a") sc2 <- scale_x_continuous(limits = 1) expect_equal(length(sc1$get_breaks_minor()), 0) expect_equal(length(sc2$get_breaks_minor()), 0) }) init_scale <- function(...) { sc <- scale_x_discrete(...) sc$train(factor(1:100)) expect_equal(length(sc$get_limits()), 100) sc } test_that("discrete labels match breaks", { sc <- init_scale(breaks = 0:5 * 10) expect_equal(length(sc$get_breaks()), 5) expect_equal(length(sc$get_labels()), 5) expect_equivalent(sc$get_labels(), sc$get_breaks()) sc <- init_scale(breaks = 0:5 * 10, labels = letters[1:6]) expect_equal(length(sc$get_breaks()), 5) expect_equal(length(sc$get_labels()), 5) expect_equal(sc$get_labels(), letters[2:6]) sc <- init_scale(breaks = 0:5 * 10, labels = function(x) paste(x, "-", sep = "")) expect_equal(sc$get_labels(), c("10-", "20-", "30-", "40-", "50-")) pick_5 <- function(x) sample(x, 5) sc <- init_scale(breaks = pick_5) expect_equal(length(sc$get_breaks()), 5) expect_equal(length(sc$get_labels()), 5) }) test_that("scale breaks with numeric log transformation", { sc <- scale_x_continuous(limits = c(1, 1e5), trans = log10_trans()) expect_equal(sc$get_breaks(), c(0, 2, 4)) # 1, 100, 10000 expect_equal(sc$get_breaks_minor(), c(0, 1, 2, 3, 4, 5)) }) test_that("continuous scales with no data have no breaks or labels", { sc <- scale_x_continuous() expect_equal(sc$get_breaks(), numeric()) expect_equal(sc$get_labels(), character()) expect_equal(sc$get_limits(), c(0, 1)) }) test_that("discrete scales with no data have no breaks or labels", { sc <- scale_x_discrete() expect_equal(sc$get_breaks(), numeric()) expect_equal(sc$get_labels(), character()) expect_equal(sc$get_limits(), c(0, 1)) }) test_that("suppressing breaks, minor_breask, and labels", { expect_equal(scale_x_continuous(breaks = NULL, limits = c(1, 3))$get_breaks(), NULL) expect_equal(scale_x_discrete(breaks = NULL, limits = c(1, 3))$get_breaks(), NULL) expect_equal(scale_x_continuous(minor_breaks = NULL, limits = c(1, 3))$get_breaks_minor(), NULL) expect_equal(scale_x_continuous(labels = NULL, limits = c(1, 3))$get_labels(), NULL) expect_equal(scale_x_discrete(labels = NULL, limits = c(1, 3))$get_labels(), NULL) # date, datetime lims <- as.Date(c("2000/1/1", "2000/2/1")) expect_equal(scale_x_date(breaks = NULL, limits = lims)$get_breaks(), NULL) # NA is defunct, should throw error expect_error(scale_x_date(breaks = NA, limits = lims)$get_breaks()) expect_equal(scale_x_date(labels = NULL, limits = lims)$get_labels(), NULL) expect_error(scale_x_date(labels = NA, limits = lims)$get_labels()) expect_equal(scale_x_date(minor_breaks = NULL, limits = lims)$get_breaks_minor(), NULL) expect_error(scale_x_date(minor_breaks = NA, limits = lims)$get_breaks_minor()) # date, datetime lims <- as.POSIXct(c("2000/1/1 0:0:0", "2010/1/1 0:0:0")) expect_equal(scale_x_datetime(breaks = NULL, limits = lims)$get_breaks(), NULL) expect_error(scale_x_datetime(breaks = NA, limits = lims)$get_breaks()) expect_equal(scale_x_datetime(labels = NULL, limits = lims)$get_labels(), NULL) expect_error(scale_x_datetime(labels = NA, limits = lims)$get_labels()) expect_equal(scale_x_datetime(minor_breaks = NULL, limits = lims)$get_breaks_minor(), NULL) expect_error(scale_x_datetime(minor_breaks = NA, limits = lims)$get_breaks_minor()) }) test_that("scale_breaks with explicit NA options (deprecated)", { # NA is defunct, should throw error # X sxc <- scale_x_continuous(breaks = NA) sxc$train(1:3) expect_error(sxc$get_breaks()) expect_error(sxc$get_breaks_minor()) # Y syc <- scale_y_continuous(breaks = NA) syc$train(1:3) expect_error(syc$get_breaks()) expect_error(syc$get_breaks_minor()) # Alpha sac <- scale_alpha_continuous(breaks = NA) sac$train(1:3) expect_error(sac$get_breaks()) # Size ssc <- scale_size_continuous(breaks = NA) ssc$train(1:3) expect_error(ssc$get_breaks()) # Fill sfc <- scale_fill_continuous(breaks = NA) sfc$train(1:3) expect_error(sfc$get_breaks()) # Colour scc <- scale_colour_continuous(breaks = NA) scc$train(1:3) expect_error(scc$get_breaks()) }) test_that("breaks can be specified by names of labels", { labels <- setNames(LETTERS[1:4], letters[1:4]) s <- scale_x_discrete(limits = letters[1:4], labels = labels) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), LETTERS[1:4]) s <- scale_x_discrete(limits = letters[1:4], labels = rev(labels)) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), LETTERS[1:4]) s <- scale_x_discrete(limits = letters[1:4], labels = labels[1:2]) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), c("A", "B", "c", "d")) s <- scale_x_discrete(limits = letters[1:4], labels = labels[3:4]) expect_equal(as.vector(s$get_breaks()), letters[1:4]) expect_equal(as.vector(s$get_labels()), c("a", "b", "C", "D")) s <- scale_x_discrete(limits = letters[1:3], labels = labels) expect_equal(as.vector(s$get_breaks()), letters[1:3]) expect_equal(as.vector(s$get_labels()), LETTERS[1:3]) }) test_that("only finite or NA values for breaks for transformed scales (#871)", { sc <- scale_y_continuous(limits = c(0.01, 0.99), trans = "probit", breaks = seq(0, 1, 0.2)) breaks <- sc$get_breaks() expect_true(all(is.finite(breaks) | is.na(breaks))) }) test_that("minor breaks are transformed by scales", { sc <- scale_y_continuous(limits = c(1, 100), trans = "log10", minor_breaks = c(1, 10, 100)) expect_equal(sc$get_breaks_minor(), c(0, 1, 2)) }) ggplot2/tests/testthat/test-facet-layout.r0000644000175100001440000001040512567330555020420 0ustar hornikuserscontext("Facetting (layout)") a <- data.frame(a = c(1, 1, 2, 2), b = c(1, 2, 1, 1)) b <- data.frame(a = 3) c <- data.frame(b = 3) empty <- data.frame() test_that("all: no rows and cols gives null layout", { expect_equal(layout_grid(list(a)), layout_null()) expect_equal(layout_wrap(list(a)), layout_null()) }) test_that("grid: single row and single col equivalent", { row <- layout_grid(list(a), rows = "a") col <- layout_grid(list(a), cols = "a") expect_equal(row$ROW, 1:2) expect_equal(row$ROW, col$COL) expect_equal(row[c("PANEL", "a")], col[c("PANEL", "a")]) row <- layout_grid(list(a, b), rows = "a") col <- layout_grid(list(a, b), cols = "a") expect_equal(row$ROW, 1:3) expect_equal(row$ROW, col$COL) expect_equal(row[c("PANEL", "a")], col[c("PANEL", "a")]) }) test_that("grid: includes all combinations", { d <- data.frame(a = c(1, 2), b = c(2, 1)) all <- layout_grid(list(d), rows = "a", cols = "b") expect_equal(nrow(all), 4) }) test_that("wrap and grid equivalent for 1d data", { rowg <- layout_grid(list(a), rows = "a") roww <- layout_wrap(list(a), "a", ncol = 1) expect_equal(roww, rowg) colg <- layout_grid(list(a), cols = "a") colw <- layout_wrap(list(a), "a", nrow = 1) expect_equal(colw, colg) }) test_that("grid: crossed rows/cols create no more combinations than necessary", { one <- layout_grid(list(a), "a", "b") expect_equal(nrow(one), 4) one_a <- layout_grid(list(a, empty), "a", "b") expect_equal(nrow(one_a), 4) two <- layout_grid(list(a, b), "a", "b") expect_equal(nrow(two), 4 + 2) three <- layout_grid(list(a, b, c), "a", "b") expect_equal(nrow(three), 9) four <- layout_grid(list(b, c), "a", "b") expect_equal(nrow(four), 1) }) test_that("grid: nested rows/cols create no more combinations than necessary", { one <- layout_grid(list(mpg), c("drv", "cyl")) expect_equal(one$PANEL, factor(1:9)) expect_equal(one$ROW, 1:9) }) test_that("grid: margins add correct combinations", { one <- layout_grid(list(a), "a", "b", margins = TRUE) expect_equal(nrow(one), 4 + 2 + 2 + 1) }) test_that("wrap: as.table reverses rows", { one <- layout_wrap(list(a), "a", ncol = 1, as.table = FALSE) expect_equal(one$ROW, c(2, 1)) two <- layout_wrap(list(a), "a", nrow = 1, as.table = FALSE) expect_equal(two$ROW, c(1, 1)) }) test_that("grid: as.table reverses rows", { one <- layout_grid(list(a), "a", as.table = FALSE) expect_equal(as.character(one$a), c("2", "1")) two <- layout_grid(list(a), "a", as.table = TRUE) expect_equal(as.character(two$a), c("1", "2")) }) # Drop behaviour ------------------------------------------------------------- a2 <- data.frame( a = factor(1:3, levels = 1:4), b = factor(1:3, levels = 4:1) ) test_that("layout_wrap: drop = FALSE preserves unused levels", { wrap_a <- layout_wrap(list(a2), "a", drop = FALSE) expect_equal(nrow(wrap_a), 4) expect_equal(as.character(wrap_a$a), as.character(1:4)) wrap_b <- layout_wrap(list(a2), "b", drop = FALSE) expect_equal(nrow(wrap_b), 4) expect_equal(as.character(wrap_b$b), as.character(4:1)) }) test_that("layout_grid: drop = FALSE preserves unused levels", { grid_a <- layout_grid(list(a2), "a", drop = FALSE) expect_equal(nrow(grid_a), 4) expect_equal(as.character(grid_a$a), as.character(1:4)) grid_b <- layout_grid(list(a2), "b", drop = FALSE) expect_equal(nrow(grid_b), 4) expect_equal(as.character(grid_b$b), as.character(4:1)) grid_ab <- layout_grid(list(a2), "a", "b", drop = FALSE) expect_equal(nrow(grid_ab), 16) expect_equal(as.character(grid_ab$a), as.character(rep(1:4, each = 4))) expect_equal(as.character(grid_ab$b), as.character(rep(4:1, 4))) }) # Missing behaviour ---------------------------------------------------------- a3 <- data.frame( a = c(1:3, NA), b = factor(c(1:3, NA)), c = factor(c(1:3, NA), exclude = NULL) ) test_that("missing values get a panel", { wrap_a <- layout_wrap(list(a3), "a") wrap_b <- layout_wrap(list(a3), "b") wrap_c <- layout_wrap(list(a3), "c") grid_a <- layout_grid(list(a3), "a") grid_b <- layout_grid(list(a3), "b") grid_c <- layout_grid(list(a3), "c") expect_equal(nrow(wrap_a), 4) expect_equal(nrow(wrap_b), 4) expect_equal(nrow(wrap_c), 4) expect_equal(nrow(grid_a), 4) expect_equal(nrow(grid_b), 4) expect_equal(nrow(grid_c), 4) }) ggplot2/tests/testthat/test-stat-density2d.R0000644000175100001440000000103112633013511020614 0ustar hornikuserscontext("stat_density_2d") test_that("uses scale limits, not data limits", { base <- ggplot(mtcars, aes(wt, mpg)) + stat_density_2d() + scale_x_continuous(limits = c(1, 6)) + scale_y_continuous(limits = c(5, 40)) ret <- layer_data(base) # Check that the contour data goes beyond data range. # The specific values below are sort of arbitrary; but they go beyond the range # of the data expect_true(min(ret$x) < 1.2) expect_true(max(ret$x) > 5.8) expect_true(min(ret$y) < 8) expect_true(max(ret$y) > 35) }) ggplot2/tests/testthat/test-range.r0000644000175100001440000000065212556523035017115 0ustar hornikuserscontext("range") test_that("continuous ranges expands as expected", { r <- continuous_range() r$train(1) expect_equal(r$range, c(1, 1)) r$train(10) expect_equal(r$range, c(1, 10)) }) test_that("discrete ranges expands as expected", { r <- discrete_range() r$train("a") expect_equal(r$range, "a") r$train("b") expect_equal(r$range, c("a", "b")) r$train(letters) expect_equal(r$range, letters) }) ggplot2/tests/testthat/test-stat-bin.R0000644000175100001440000000302012606755230017472 0ustar hornikuserscontext("stat_bin/stat_count") test_that("stat_bin throws error when y aesthetic present", { dat <- data.frame(x = c("a", "b", "c"), y = c(1, 5, 10)) expect_error(ggplot_build(ggplot(dat, aes(x, y)) + stat_bin()), "must not be used with a y aesthetic.") expect_error(p <- ggplot_build(ggplot(dat, aes(x)) + stat_bin(y = 5)), "Unknown parameters: y") }) test_that("stat_count throws error when y aesthetic present", { dat <- data.frame(x = c("a", "b", "c"), y = c(1, 5, 10)) expect_error(ggplot_build(ggplot(dat, aes(x, y)) + stat_count()), "must not be used with a y aesthetic.") expect_error(p <- ggplot_build(ggplot(dat, aes(x)) + stat_count(y = 5)), "Unknown parameters: y") }) test_that("stat_count preserves x order for continuous and discrete", { # x is numeric b <- ggplot_build(ggplot(mtcars, aes(carb)) + geom_bar()) expect_identical(b$data[[1]]$x, c(1,2,3,4,6,8)) expect_identical(b$data[[1]]$y, c(7,10,3,10,1,1)) # x is factor where levels match numeric order mtcars$carb2 <- factor(mtcars$carb) b <- ggplot_build(ggplot(mtcars, aes(carb2)) + geom_bar()) expect_identical(b$data[[1]]$x, 1:6) expect_identical(b$data[[1]]$y, c(7,10,3,10,1,1)) # x is factor levels differ from numeric order mtcars$carb3 <- factor(mtcars$carb, levels = c(4,1,2,3,6,8)) b <- ggplot_build(ggplot(mtcars, aes(carb3)) + geom_bar()) expect_identical(b$data[[1]]$x, 1:6) expect_identical(b$panel$ranges[[1]]$x.labels, c("4","1","2","3","6","8")) expect_identical(b$data[[1]]$y, c(10,7,10,3,1,1)) }) ggplot2/tests/testthat/test-geom-violin.R0000644000175100001440000000141512620213450020171 0ustar hornikuserscontext("geom_violin") test_that("", { df <- rbind( data.frame(x = "a", y = c(0, runif(10), 1)), data.frame(x = "b", y = c(0, runif(10), 2)) ) p <- ggplot(df, aes(1, y)) + geom_violin() + facet_grid(x ~ ., scales = "free") + coord_cartesian(expand = FALSE) expect_equal(layer_scales(p, 1)$y$dimension(), c(0, 1)) expect_equal(layer_scales(p, 2)$y$dimension(), c(0, 2)) }) # create_quantile_segment_frame ------------------------------------------------- test_that("create_quantile_segment_frame functions for 3 quantiles", { density.data <- data.frame(y=(1:256)/256, density=1/256) # uniform density qs <- c(0.25, 0.5, 0.75) # 3 quantiles expect_equal(create_quantile_segment_frame(density.data, qs)$y, rep(qs, each=2)) }) ggplot2/NAMESPACE0000644000175100001440000002537412633013307013076 0ustar hornikusers# Generated by roxygen2: do not edit by hand S3method("$",ggproto) S3method("$",ggproto_parent) S3method("+",gg) S3method("[",uneval) S3method("[[",ggproto) S3method(as.character,uneval) S3method(as.list,ggproto) S3method(autoplot,default) S3method(drawDetails,zeroGrob) S3method(element_grob,element_blank) S3method(element_grob,element_line) S3method(element_grob,element_rect) S3method(element_grob,element_text) S3method(facet_axes,grid) S3method(facet_axes,wrap) S3method(facet_map_layout,grid) S3method(facet_map_layout,null) S3method(facet_map_layout,wrap) S3method(facet_panels,grid) S3method(facet_panels,wrap) S3method(facet_render,grid) S3method(facet_render,null) S3method(facet_render,wrap) S3method(facet_strips,grid) S3method(facet_strips,wrap) S3method(facet_train_layout,grid) S3method(facet_train_layout,null) S3method(facet_train_layout,wrap) S3method(facet_vars,grid) S3method(facet_vars,null) S3method(facet_vars,wrap) S3method(finite.cases,data.frame) S3method(format,facet) S3method(format,ggproto) S3method(format,ggproto_method) S3method(fortify,"NULL") S3method(fortify,Line) S3method(fortify,Lines) S3method(fortify,Polygon) S3method(fortify,Polygons) S3method(fortify,SpatialLinesDataFrame) S3method(fortify,SpatialPolygons) S3method(fortify,SpatialPolygonsDataFrame) S3method(fortify,cld) S3method(fortify,confint.glht) S3method(fortify,data.frame) S3method(fortify,default) S3method(fortify,glht) S3method(fortify,lm) S3method(fortify,map) S3method(fortify,summary.glht) S3method(ggplot,data.frame) S3method(ggplot,default) S3method(grid.draw,absoluteGrob) S3method(grid.draw,ggplot) S3method(grobHeight,absoluteGrob) S3method(grobHeight,zeroGrob) S3method(grobWidth,absoluteGrob) S3method(grobWidth,zeroGrob) S3method(grobX,absoluteGrob) S3method(grobY,absoluteGrob) S3method(guide_gengrob,colorbar) S3method(guide_gengrob,legend) S3method(guide_geom,colorbar) S3method(guide_geom,legend) S3method(guide_merge,colorbar) S3method(guide_merge,legend) S3method(guide_train,colorbar) S3method(guide_train,legend) S3method(heightDetails,stripGrob) S3method(heightDetails,titleGrob) S3method(heightDetails,zeroGrob) S3method(interleave,default) S3method(interleave,unit) S3method(limits,Date) S3method(limits,POSIXct) S3method(limits,POSIXlt) S3method(limits,character) S3method(limits,factor) S3method(limits,numeric) S3method(makeContent,labelgrob) S3method(makeContext,dotstackGrob) S3method(plot,ggplot) S3method(predictdf,default) S3method(predictdf,glm) S3method(predictdf,locfit) S3method(predictdf,loess) S3method(print,element) S3method(print,facet) S3method(print,ggplot) S3method(print,ggproto) S3method(print,ggproto_method) S3method(print,rel) S3method(print,theme) S3method(print,uneval) S3method(scale_type,Date) S3method(scale_type,POSIXt) S3method(scale_type,character) S3method(scale_type,default) S3method(scale_type,factor) S3method(scale_type,logical) S3method(scale_type,numeric) S3method(str,uneval) S3method(summary,ggplot) S3method(widthDetails,stripGrob) S3method(widthDetails,titleGrob) S3method(widthDetails,zeroGrob) export("%+%") export("%+replace%") export(.pt) export(.stroke) export(Coord) export(CoordCartesian) export(CoordFixed) export(CoordFlip) export(CoordMap) export(CoordPolar) export(CoordQuickmap) export(CoordTrans) export(Geom) export(GeomAbline) export(GeomAnnotationMap) export(GeomArea) export(GeomBar) export(GeomBlank) export(GeomBoxplot) export(GeomContour) export(GeomCrossbar) export(GeomCurve) export(GeomCustomAnn) export(GeomDensity) export(GeomDensity2d) export(GeomDotplot) export(GeomErrorbar) export(GeomErrorbarh) export(GeomHex) export(GeomHline) export(GeomLabel) export(GeomLine) export(GeomLinerange) export(GeomLogticks) export(GeomMap) export(GeomPath) export(GeomPoint) export(GeomPointrange) export(GeomPolygon) export(GeomQuantile) export(GeomRaster) export(GeomRasterAnn) export(GeomRect) export(GeomRibbon) export(GeomRug) export(GeomSegment) export(GeomSmooth) export(GeomSpoke) export(GeomStep) export(GeomText) export(GeomTile) export(GeomViolin) export(GeomVline) export(Position) export(PositionDodge) export(PositionFill) export(PositionIdentity) export(PositionJitter) export(PositionJitterdodge) export(PositionNudge) export(PositionStack) export(Scale) export(ScaleContinuous) export(ScaleContinuousDate) export(ScaleContinuousDatetime) export(ScaleContinuousIdentity) export(ScaleContinuousPosition) export(ScaleDiscrete) export(ScaleDiscreteIdentity) export(ScaleDiscretePosition) export(Stat) export(StatBin) export(StatBin2d) export(StatBindot) export(StatBinhex) export(StatBoxplot) export(StatContour) export(StatCount) export(StatDensity) export(StatDensity2d) export(StatEcdf) export(StatEllipse) export(StatFunction) export(StatIdentity) export(StatQq) export(StatQuantile) export(StatSmooth) export(StatSum) export(StatSummary) export(StatSummary2d) export(StatSummaryBin) export(StatSummaryHex) export(StatUnique) export(StatYdensity) export(aes) export(aes_) export(aes_all) export(aes_auto) export(aes_q) export(aes_string) export(alpha) export(annotate) export(annotation_custom) export(annotation_logticks) export(annotation_map) export(annotation_raster) export(arrow) export(as_labeller) export(autoplot) export(benchplot) export(borders) export(calc_element) export(continuous_scale) export(coord_cartesian) export(coord_equal) export(coord_fixed) export(coord_flip) export(coord_map) export(coord_munch) export(coord_polar) export(coord_quickmap) export(coord_trans) export(cut_interval) export(cut_number) export(cut_width) export(discrete_scale) export(draw_key_abline) export(draw_key_blank) export(draw_key_boxplot) export(draw_key_crossbar) export(draw_key_dotplot) export(draw_key_label) export(draw_key_path) export(draw_key_point) export(draw_key_pointrange) export(draw_key_polygon) export(draw_key_rect) export(draw_key_smooth) export(draw_key_text) export(draw_key_vline) export(draw_key_vpath) export(element_blank) export(element_grob) export(element_line) export(element_rect) export(element_text) export(expand_limits) export(facet) export(facet_grid) export(facet_null) export(facet_wrap) export(fortify) export(geom_abline) export(geom_area) export(geom_bar) export(geom_bin2d) export(geom_blank) export(geom_boxplot) export(geom_contour) export(geom_count) export(geom_crossbar) export(geom_curve) export(geom_density) export(geom_density2d) export(geom_density_2d) export(geom_dotplot) export(geom_errorbar) export(geom_errorbarh) export(geom_freqpoly) export(geom_hex) export(geom_histogram) export(geom_hline) export(geom_jitter) export(geom_label) export(geom_line) export(geom_linerange) export(geom_map) export(geom_path) export(geom_point) export(geom_pointrange) export(geom_polygon) export(geom_qq) export(geom_quantile) export(geom_raster) export(geom_rect) export(geom_ribbon) export(geom_rug) export(geom_segment) export(geom_smooth) export(geom_spoke) export(geom_step) export(geom_text) export(geom_tile) export(geom_violin) export(geom_vline) export(gg_dep) export(ggplot) export(ggplotGrob) export(ggplot_build) export(ggplot_gtable) export(ggproto) export(ggproto_parent) export(ggsave) export(ggtitle) export(guide_colorbar) export(guide_colourbar) export(guide_legend) export(guides) export(is.Coord) export(is.facet) export(is.ggplot) export(is.ggproto) export(is.theme) export(label_both) export(label_bquote) export(label_context) export(label_parsed) export(label_value) export(label_wrap_gen) export(labeller) export(labs) export(last_plot) export(layer) export(layer_data) export(layer_grob) export(layer_scales) export(lims) export(map_data) export(margin) export(mean_cl_boot) export(mean_cl_normal) export(mean_sdl) export(mean_se) export(median_hilow) export(position_dodge) export(position_fill) export(position_identity) export(position_jitter) export(position_jitterdodge) export(position_nudge) export(position_stack) export(qplot) export(quickplot) export(rel) export(remove_missing) export(resolution) export(scale_alpha) export(scale_alpha_continuous) export(scale_alpha_discrete) export(scale_alpha_identity) export(scale_alpha_manual) export(scale_color_brewer) export(scale_color_continuous) export(scale_color_discrete) export(scale_color_distiller) export(scale_color_gradient) export(scale_color_gradient2) export(scale_color_gradientn) export(scale_color_grey) export(scale_color_hue) export(scale_color_identity) export(scale_color_manual) export(scale_colour_brewer) export(scale_colour_continuous) export(scale_colour_discrete) export(scale_colour_distiller) export(scale_colour_gradient) export(scale_colour_gradient2) export(scale_colour_gradientn) export(scale_colour_grey) export(scale_colour_hue) export(scale_colour_identity) export(scale_colour_manual) export(scale_fill_brewer) export(scale_fill_continuous) export(scale_fill_discrete) export(scale_fill_distiller) export(scale_fill_gradient) export(scale_fill_gradient2) export(scale_fill_gradientn) export(scale_fill_grey) export(scale_fill_hue) export(scale_fill_identity) export(scale_fill_manual) export(scale_linetype) export(scale_linetype_continuous) export(scale_linetype_discrete) export(scale_linetype_identity) export(scale_linetype_manual) export(scale_radius) export(scale_shape) export(scale_shape_continuous) export(scale_shape_discrete) export(scale_shape_identity) export(scale_shape_manual) export(scale_size) export(scale_size_area) export(scale_size_continuous) export(scale_size_discrete) export(scale_size_identity) export(scale_size_manual) export(scale_x_continuous) export(scale_x_date) export(scale_x_datetime) export(scale_x_discrete) export(scale_x_log10) export(scale_x_reverse) export(scale_x_sqrt) export(scale_y_continuous) export(scale_y_date) export(scale_y_datetime) export(scale_y_discrete) export(scale_y_log10) export(scale_y_reverse) export(scale_y_sqrt) export(should_stop) export(stat_bin) export(stat_bin2d) export(stat_bin_2d) export(stat_bin_hex) export(stat_binhex) export(stat_boxplot) export(stat_contour) export(stat_count) export(stat_density) export(stat_density2d) export(stat_density_2d) export(stat_ecdf) export(stat_ellipse) export(stat_function) export(stat_identity) export(stat_qq) export(stat_quantile) export(stat_smooth) export(stat_spoke) export(stat_sum) export(stat_summary) export(stat_summary2d) export(stat_summary_2d) export(stat_summary_bin) export(stat_summary_hex) export(stat_unique) export(stat_ydensity) export(theme) export(theme_bw) export(theme_classic) export(theme_dark) export(theme_get) export(theme_gray) export(theme_grey) export(theme_light) export(theme_linedraw) export(theme_minimal) export(theme_set) export(theme_update) export(theme_void) export(transform_position) export(unit) export(update_geom_defaults) export(update_labels) export(update_stat_defaults) export(waiver) export(xlab) export(xlim) export(ylab) export(ylim) export(zeroGrob) import(grid) import(gtable) import(scales) importFrom(plyr,as.quoted) importFrom(plyr,defaults) importFrom(stats,setNames) ggplot2/data/0000755000175100001440000000000012634007745012567 5ustar hornikusersggplot2/data/seals.rda0000644000175100001440000004560212540260054014363 0ustar hornikusersBZh91AY&SY¿~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà2+íî÷}V•žîëµÝëïx¸a|Úè>w^yëÇ{wqÝ»n×Y¼=SíݾûÚÛ±Kž{Þk€ÞòU¶Ú÷\û·Ó{ÙÊï»u»½lÚö{{Û|>ûÛçoƒ¶½Œ÷{Ãä>¾rY«ï‹lÃo½îô½ì ¡ ©UP—Áí½WcÐѤɉ´ž€LLz†Ñ4ɦ Ÿ˜@ɦ&˜š`LŒÔž˜hêb4i¦&˜š4ÓM SÚSôÑ”ò˜L'¡1£@ÐÒ¢?f2 ššcSL ´˜ž„`h˜š2dôQàLL £L˜˜šb<‰€i  2ÐÐ4MLÁ00&™ 0MPêy И&OTýLLL&˜› ˜žš§š`MF=&Ð €Ñ=G¢m6„Ó#SÃHÓ ˆÔð§„ÄÓF&&˜<&˜¤üª#F0&ÐÓI“CЙhÈÔÚhÐhŒSF¦ÄÍG”hшi<™0š2cA2bi„ÅOÉ‚1Qú`¦ÄÕ=£&€§ŒM2DPªŸˆM#L‰“hL˜<=)›U§äi©äÉ“M4ž†FdÉ©šd`”ý4dÑŠy ™OF†&šjm4ž§“F”Á¦ÔñÅ<™2§šdɪ ‘˜‚b 2 †€ ¦ '¢6¦ ¡¦A=ŠŸ‰ƒTý †Bz „ôLÑ¢i&™¡¢m ¦¦¦i=˜bcBz™Q@8wztÝd u—:–Cߘy!å(ÒQQèü Ád!ÞAÓÁ¦bÕSb bB[@'ü*¿ó¼Úùî_ çGp˜ïb¨¥¦#ðqè„PÍ™ìÕ…Y¸ŠyG~HÜ£­3C-Åg…À¬·ö‹³ ¬Îer~ÿ~î6¦noš\-óîA‹ÞÊG€Äbà.\ðI&s•Êk~ÅB   (&ƒúßá©]ºt“®ý€ì Y¶Tv^­D–ýÇ—mÇRiµH‡|ŠØj­œ!s#"Ž ­¦\× ãnÈn˜[aÐ>2«®OxP€ظÕav5è¤ÓÄž+ÐRê4¨xY.–6Í j6'Ì÷BÒ¯[SK¥€Cú/xËÄãH…˜HHu’1½Ûv$0paƒ✇aàeõ(`×QtÕÌpó`èÖ_¡÷.]½L Ií<×…óÖ[&d“§Þ}J( $#kÙ&š¾Âa°Ïû%߆¶a dzp}™ÀÓâŒK¿þcÝ<4Ù¼÷} Ž1ö Ò„®œ{°‘Ïm¨¹º:VùŒ°IsØÙ¦÷°1mO3ÙÞ±%ÜÀÀ¸}:JÆØAÇß.(Œ¿‹O]|®Â–kŠ¡ë ,k/ôhή ˆ¾}Põž—1Œ9áþUÉò‰êõbôPõf™ž:Jtørs{œ©xʺ‡ JÞÇßð›Hz24Æ¡hõõ8$Ô?lv–y9>í};Yn¸,áÿd¤ ¦,,½$×tÛWÍ7>Ã3ëÐà7)è«£W¸:ú†¿î ÿÕÿó—€p†MQ’Ög£³—2{IQ—’¶ÿñ³¯-+yÄŠÑÛ2TÚ Ú·(w6&ÓeôXe<Žae/c»?/8ä3¨Åd¾ 6Øÿ+Wš9Ó^b¦-ã:Ø¡Çl»)¬ìµÖ›8q™0\&è³±Ò‡¶õ¶êêDH£Ëƒˆ6c&ñafYÆó ¯\æ^éëNv0€;d©× þ-ø–xýéohM5=E×ò?j´æÇó•iÍ–ð­0ðÉ˺ø–àsÊ ÑwÔ¾³x\¨Xê`®{§üfJ‚?¦`6¡Ü莽WøŠ¹ÍÖ:{’]^6¥à1…ܹ•%§5a*Ïöó/èIŽ“F”ŒÕ®\!«ŸSÓ[ÚiÇd »=ÆŒ±.É­ZiT¯mº¤ƒÊ&noH;:i©@OÃÏ3V Hsß:œ”¦ÉÔJ¹i—_T^bJ¶4ïfÁxEÆç+MŽüh!Óÿ¾Æ{^pEÇšZJØÁÜ= :riAêܪÂg®šÕ¿F‡1ðÆI?ø)´òHØs$V8íO[Ï…qôYÙ¦²¯ uª&Ö`!c;¼bðG‚7¤Ù ‰‚Æß,¼§~¾õŒ]ÿ}±¿÷¼xš†Ãÿ5L© • gaXR¼:[h:Å~µRëô÷‡º ¨¤Óˆ7WÞè¯#9KtÖF·/:]Ì›÷ ~Dܸ! Äì¿­ÆÐ`oâud. eóÜR«ÀPºÛÚT©±z²ßÒZ®Á>J`sõGEB¡üøÿïóe±Æ˜¼½,òxQ=ÉÇÜ• Ÿ}»nšÖnÓˉ¿Àîíx[Ðk…¦Þ£ñ•Jô1N³Ðiƒ/¸Y<¼Ç½«l1ÙiG}I%|˜ƒ2:õÛÌ|£ÔœO¯{Wü]НHúÝŠWeÞàÌ%FéHvá9aäØÔÒ¹ýàÿ,kÈÝ•l€¿Y£x3M`”D\Ø?¦ŠFŽÈý­ƒ§Žµ.ÈÄjXÉ“¥_dD9鯷†.Q§Tyu¦ƒ•Zmâ^YU€u:þ¬M2º bâ“Õ=©<Ç%~gW´,Òµy°¥i—'[¦6°íõ‰@™/Æ ÝS§w£˜L™>‡í±‘üèF³1-!Ñ7ì56q̾½Úî«/J@á% ™Wëó]h§-l«?+gj)‹šuÿ‡UMD*ÈN…F à ŽýƒÖøÛâå8oY^,²¨[®É‚ˆ;Lïóˆ¾v?ž-.ªÅIÿ0évÊòÿ ³#OêU!TkZOKÁ­½‰Žûä[­¯Ùf†Ú —K»8×ÕIð`GV1!´z¹\Nu»<Ï]ŒäóX —ÕM5Æp$(CЙb¾Ôô ^h“lFœ5yÞŸ*#Eˆ2ו‡ÊÃBÒÆtKÀé®R_.ãSçÎéž)j[W0|c¿Æ»>Žjò>Fý’£(K¢¤ÃÔä§kÐlP†Ø^Ózá_Àå H…‚þ Þ¾lK¢^¤äeVÄÍ-aM·Õw³æ€2X¥…Öáõ²´†ÌfE¡Ydq ×o]w!¬p—|â¬8„ù–yfÙÏÁŽAe âÌÍýç+ÆïI©Š‚`[Ý©{y®R%f;;cô‘–þˆýÛ3h6<Ö²º{ŒWÐþ¥Ï”7FOâ©V`©ZÑ/[sk·ôÎRî˜R*dE’àŽlýL7±þ³mb&ÈH û+wK/TÓ6¬•óÅ(…Ž5øåý"mÇ&÷²o'h;cAßãYNDþoÀ3ú^öw4 ß՚ο’œ²Ð<ã¥îWû#$«\« }Qöí‚€,¿ljmѨLdæÏ0,׊ãõ,™FgTæ²>†=®ÂÐìšúÿâ‹°8¥nk¾šƒ6(1qâÑQ ¿"¨ˆ%mèœK«µ“úÐx1›ÚûŽäò®Z-§¶“Y­‡B¿75Þö”!€µù«^ê?¬¥xð¿[ ×eÎÖÂ’ÕrÚ^f.!§,po5çh¬Xß®“ ½JÉÑ´/'FD´ÜƒKöù1p™$ß3¾ý<ÌÓîk”ØÇû˜Á(À¸‡+t²°~9.”F“â¸ÔÄ¥¡ïŽÓ¶ž=àÒD·¾Tß ¦/¾ßŽ£|K«ÉRX‹:Jà„:}9ÄV/¼ó˲‚#¤ç ½LªÇ$O4{Ïq[‘M6ÁRÛGÊô=þBµÂIgûæÚâWÛñá¿IËFØm§†–E£ÿ…Þ4KB£ë@íÂ’#©¦Ê‡>7@ËÅ=܆òhPÙ\´"4+ùqÊè_²~‡iõpZfBHU£·W “TN4ÆÐ[¨MÈ5ké•פÍ£Û¹U¾¹‚ÇÎa¦Àk¬œNá5MŠ4‘ÃààÛ†àòŽ÷.gÍOVú.§Ök ²Ð)\~Þâs¾¾þ;ª¡$G_Ïfû®µ:á"Æ¡È$‚Hn$ŒñQBˆ!D¢Q(‚?ÒïE‘ßÙ1øÀß°ã¾CCµÏݬHÓÅ–ìo8‹ùy_ÌÂôzù¯ú‹’ÆQï½óÿ‰µêìBsЃ _À)óËú?å§9 :Ææx=AŠeïŽËw=_ÄB4dJTÊàe ¸È­Q°|ÿåÉÊXß .NgÏiƨNö›÷¾\ 4¦E÷ɶÙ=[œÙ§f}O½­LÌ㣟I.ÈÃS2% úF œ}™7~ÑxÃQThâ‡QNc³˜ðüƒ©1–#uo¸ëpáÕvˆ÷ªØ¬U?~lyºQ2ZN<§34ÿƒæAŒòé,¨ÞFHQ™ëžþèD[ ¦¨š¡;{Æ(†¦zkÕ23tfʰ|ë~K¬ÛåEBÛÃ1Âf/ꩬŠFRå”!ü»S/ûÏþÛø ÿ7z> Ê“ Èè•%¢,ÞtÃÎv|$ƒ@uZ¾`Ù¶#Ý‘ïÍ¢&—4ß)ÕøÝõÌwõ×Nãñ!ÕŸ!Š­+ãeeš}ú@M'):ç£q¶?ñç×ö, ‰ŒfÝE_Šù¯,ðÕÍ~½ñ¤<šd\óÞÜì!Zs?Ç®^oËTæò}ïÞ>å{² ‚HzÄTØ÷“?NåB²ýî•<*cs¯[k%ú‹sVO7«ÛCÕÅEà ßjTw{{ CÛ*œu|ApÕßÓ´eHœq ¯±Îr("÷ÓË[.œx ïAõj%(›ºDÇeÏàBÛ Re î¢Ì™<þØSŠ£ÒŸ ì·,2Ë4-ÐëùË ÞùRíì=Ð$}Z\èœ7Þò<ÍØùØ¡?ñM ¨ ý‘d‘$ÖŸ4c“+Êu•¢Pz%î\ÝÔuu¥Å0bÖ7.9¿ªöÒ¹I±B ³œN ê¢Ñ½ì‡}t&ß®½ŽîÉËÕé ÑBœ¹øT¶èõtx ( KUXT9®|çP/ï\K›ÍH~àH I%@ACúì‡ðÇI,¥ ßFØ!´™c͹sÁˆ&“ÇVÉ5 ÆÏ%i[“ᬵ?Åûš;Ôe˜@8t>5m½¬Aš[µÿ®‹+èž¾²8‘Zg+ûKÜH뿼lAµ«~ ¥›ÝÍætõž»¬@ˆŒ:õ×ßsÐÙµ`>K2Ô‰«ú¸‹ÆÀ0Cõ¨oO—‹v P³ÊÞ 4ðí¿[ö­ùä÷t*,Ûꘉߒ´!XÝžÛ’¢7ýt>\Q ‰<=&|°„ƒ™jpšžlŠ9ó:¸ÉÌ¥±)µCÇoõOl]uF}¡ŸgÕÎÛ ÅȼâÇd!~ó¦A@›UB®a´5bFEóEîÙ¢²¥äYÌÔÍ®Dð½!ÓÉuñ:¾¦™–zJøûI8Wþtd±¨¾ÀÌ?jdå×£„O¿~Ò€Eˆ˜d2×aÓQnW²äÒ߀ƒƒ½z¯a¨6 -Ìe|Î.¡£i‹òÒ~oZœ4ÿÚ5wƒI@ÇÑ¥›æ¼Wv>ÕYØDNHÑîÎýi¿–ÊqÒkoÔ€§¨«ä³åýVüCåñ•ôÁÈÞ•âx*ôG¦4ÿßK¢lµ.Åõ¤©‘K ê<ë[ž="E7ïN‘©€ä,¶èÎhÍš–ÔÇhû"l‰{ʯÙpÂÐ{BÝO–hÊÙ‰û2BLã¯fqm±8â¨û3ö<åÛ3¿ô¡‹²‹HŽ®›™ˆ—8ª"öø©³ EµQÀymgUÎ11&«?™ÜwŒ:òÖ'ß(‚б¸O »:~ù šqŽÃ)û>FÉúRóZ´å 8x,GÒ‹LoBxý~áÛQ¦ê%Œ‰¹JýIæ=žËxˆà /°Ñ[q[$6;4KuÎ.±æºæV"+#R÷VŸÂFõã'÷îÓMXtr¨ )då…qzñˆ;ÿÁqß<*`;ã²}óâÏÃÏ5Äñ1ù¼5Õö`±®ùŽN­ê¿OÇMŸmˆ—jF+ïq´ì­mÙS®>'=†Ób¼™ünîû²£ã6ƒ/È$ƒú¡$ÇØ¢H/@ ²H0hAŽzH2‚H9/2®¾Óž³T<¸÷IÙ€Ïw¨+ŸVzœä’1ú‹‚K[hŽoò³æ#_cçº\ înë+8íP$ƒÍ†ñH8ÿx:;‹¾3êÃrðô_g t¸X½TòH4Zª‘±eŠ¿èq'ðU{ÜYGøcÞß]>© ‚¼f?£å‹`h\‰eõ­¬ ÝÀ9Ùy>»þ7CÝb¢I©È}Ïg{¿mâ#ÙñNÀ\y±{®µN‡ßîãÉñà ïCäMѨ–¬§À›ÕZ–´pXª¥³µá‚ ¼ç ØDjúhÀ‰ùgDT*¢OeþGr¶Uæ#¿ù¿’Aâü&ï]¿š«zÛÜõމ É\q¼&>+ I÷Ö`g9¶=ž¯cÇ¥çï/2ܘ ‰$|Åw%àf©°Â]¯ß›[Mš´Íéº_~Sµúþ¾8š½†N Iö}+Õiµv¡‘¶¶A-Å^pÝ<ßÏAº«ªÒª–EaAA@ S9C;4ÃMÒ°æ]Š­\¡Š…숞¾ÂÂŒ}² UÂO L@ ‚>¹]%Äç \]MÊ¿jãt*db,9MŽ£UÎAî;îx¬K](&ÉHÙÈxgDpÓþýªÁi–‹v’}-³Fº÷¸Ôæ§Ã@óᆀšEXæóØb>Nº–ÌþܸԤêÊgÙ«k–ýÜXó³™è_"YóÅEü ×ëgÚ2µ's¤3V¯Zw?áŠlH–84tMt}–°PâÄäg¼­P†8=%Aî6Ô!nÃ.- å[ÂJ•]& •RÐ2,óŠ´¿Ž„ÞCt  î~õqÇ׸…'Ñí÷ 剈¢Ý^”õV>;ìãCgÀq †°ûذòvÈ>œçº°)Bg4BŒðûex å@üÉÙö£#øÕC:‹'ÃwH–YoºuéZ˜ÿh¯©’šxç®rÈí9·bè^s!¤ MØ k„~]|¿ä]6FÀ]ä“0w ©) · i²Bw#à\JÄúkå«(­q\qÅcµˆ“ð &å7h«„^{¡‚Œ*K{±×RPsuÚY—TÜ%uÛ6;Ç"\ßKHÒ=r|XüuÆ+ìo~õb®2]HfÇÇ"`¢æ…°Þ’@öãXzGyÝéïfU¨gçeã(Æý4ÙÐvЮ¬$"b™ŸPwÊ"iËfoqÅ”™–¥Žøè£4w;lèá™§Š‹dÎ÷SןÛ-Ì»W¾¦5…£F/g~¾m™%OÀ:»z¸¢G‚›˜…^@ÐÒûÒÉÙTl»Í9çÍ)…÷÷Šˆëâkç©FTÈp±…€¶¿Ù¬ý²Dˆçº.N8¨ ¾¿¬Ó4j]Á÷æ¬ïÜQ‘Q¹nõÔä~­Ç“6ÊB[c:C×&}²T‘ø`¹U‚È·)€{ëm ;åXݲ_½ ´n#‚üçøÅý‹¹â(|‡ßt•B±^ÒGžàЍâr 3ÐÐpG¿lŽkÍâäÐÏ_lþzû^ç"ƒ«V²`sTØÛ­ËÁ AÄÌóI ÂA·’AïAµA‚$ƒg$ƒk$ƒöAéDQVÈ"ôA©ÊÊÊF†Ê>!¹.eU8Z¿²ù†ê/é¨Ðdï°øµæ9/S·”ÿRÁ~2H³¿Åq-AÜŸ~ØÕLmé“eÐ9ö<ó¿2]—HÇØúWUaTÂçYÝ =À–ôÔ¼1)ü[çÖûüŸƒ Y/ÁúR02-ÞÑ37ÿ.‡»¬˜7´Ñ Ç‚,¢÷u™ªTª·q¹ºó 4]q:Fæ44U8óª«wmç Òÿuv)SC¶óôÓ4ìãð–˘µýXà38Ñd¹JZzi™I|¼» Rô›sIK•sl‘¡fF¹²#¬ Vø’ULJ””{Ðé«È~ëQ#6Í]ý%8—#¡§öÈÀˆŽâ Çß9JÌ‘ÓC@UK‹V|gbÃߢˆöÉÿ“}^~qô‚78ùŠ–îŠ“WÃç\-®ä“¸¿ˆýMÎÁz”Ã{q+ªCÁW»tîÃá|{qßXâïªnH#«Î‚Áé6­Mh!u¸o4‡mßwc¶×róàé»)Þa¯ ûÊà‚)dìþY­å¢×p¿u¯6þÑZ÷ë ïÝlÃÚš ‡\j#=t×]´1}Ä›‚¿¾Ky7 ŠÜM.«Q'_lA×/1\5Aàûï2n!G£u7U­²A:æ9‚ÈÏHЭCΫgðþÙ ˆ†âÆ’3Qáøêˆ##‘Ò¬‚+_¦îÅZÚ ŽÞ÷Ó÷` Ž·Š¢²ßLÄé 7·~3±{ärP¸MdýÉáíÁ|T6}¶gÓ¾ÆWn®H#îÓþqÌ{Öä%íákØ ‹ÆS£Ó`‚0 9¢Ý{"W™eöË+ð•w Žu^7)ulAºŸ‹€ÁVìIXî_Ù ‰ÿúý|Ó>ë³MÈ#Ót­u¦™ ƒ‡ª’äâ[GÝuí\¦ž ˆ‹á„ýòWNkr—íëÜJé[FSUvï|¬F£›QÑ0AlÃï%áÚ õócïOK$fÿ°Ù=d>Ù±H¡{óú˜ï|ö‘þ’#ÙîÁ;EÑþady«Ã±üÏtÛF’õܮŷì6 Œ…–30ÁX¹¿ [5€ÐáïU 5`Þ¬[ÔA $ä=¬ð£]q¡ªò®`³‹E¿á2j}e½ºïÂT½ûÌTÜvÁv7ÂË%™¢Ü('œÂ"þ¾«`ù·ŸìVÿœ‘q¸¢ï9úÌÜÒvu¨9WçsÀB·l¿[D×^V&(•ëÑÜú‰Fªã. ÿ"OñFõ¶/¸Å£× b€p©°aüÕ`’ uÒÆçòc"¿¢úb!&ù“|ÐÐà9-0»gL5Þ>ð7H8ŠªU­$µ—Ùùõ¡Õ²a ‡)DM1{¸Ö„ Sç?–Ÿ”xóGís“S6԰įj ýL€Þ¤c;^ۺʿ•žºé¶q¶+¾‡5 ŸVׄ|ÔÓe“ìhkЉƒ™ÁE‰õž'çN §¾æ0_ÃW‚¥ †3û×¢†ßÚ„I—¡éå½_¶킬*éæ&Çqˆ‚p’##S·!qYg^Ûù]æhŸ´³æ5lä˜Õ+/Ñàñ¼“›É¯O·ªN§õŒÿªcA: €àš?¶><ÑC*ËÍå)¦¡ œ«›.¯x.Þ¯èÎóóËtˆÈ~›Õ3Ÿzíjñ_™°Xó¯,åšZ6¿›rE{¦óíé±–zªiô–àÊÓÆ¿ØEºÞÃüú?â^"¢‘x¥’<à·¦žmÿ·(£DŠ,Þ{Í}R1C\K’ÄLOÙ$£íê•mÕ—è  üòûêe)‚–GùRý­ö#×2䆩öç…­šàóܤÙùãÑE–bÕ‡Î^Àv°TSU³‘ÿJn“lË{ÖA`¨\i˜Û(9êac’Ö?›˜“Cd®Zÿ âöÅ͆GÊ­¯pÖ:î ê£Í£[¼"×t™—»Üt ±ÆëEþ^àìNÖ ?[¬“4×{ßý/YcoÓðZ‡¡Ø‘mïH4‹Ë–MUä°´%p¼¤70ô¡£%ëÅô°áÃ0Â0÷akÏ–íç‹#Õbn55cå$2“»”±~æ÷G‹‹kE™‹èîél0¨AdÑPGüAÂú±_<=1ê6]+^çÛšgÓx‡~"4—ý:ƒëý>¨õ2ÚŠ p'Ȩ{ÖŸ5Lh £°½8§âFB¬¥7:Ì÷$0÷Κ‡»¿÷¯l°Å"pÕp¶aúø^Æ2{º±'uïTRZä9êi»Èæd© 9©ä-xõûÆŸ¹­Ii è{†:”~éó󦑂{ÁdÅ¢ ób¶‰_dر´±Éí”md?åñ-Þ0Èåê D óá÷§«‡ú|¶Rk¥wò™£éïÄxüüD×@޾KM‘‚5—õIz=®²ë…ÔÎ?…<<”´ün\Ä|ll =ôû2xÎ S­Y›ËòÏ¿SÚÐØãS­ã4­y˜][©fAˆˆ›T–™iYña“úKly3Þ›è妒ØøØI, Øq·iB$S¥H‰š¾„2•Í×ZbÆÒâ_×°¨‘Näùñ³cÚ¶¢_q|Nø®‡Û‹Ä“u¯FÄóÄ\kÛ¢›ðª‹ð­Ögä_…l†.7•xŸ©E<®Æû»T>ÀTçØ>ÐëèôkCb”ªîªb9²Ç%£R2¬%gxšás¼>E“éò“î Í©¨ ô¬hC%`5ÑË̇¹Z¯Wv\¼t¯eÝöC¹^‘õäö`^zqµÐ騵ØFîªD°Ø••›îÁ¼Å¥Ph'ˆ5í›—Þ 0«­FL•®ñfü@1¤MÆ‹²¬È?ÝåQOºðÌ^ó‰‡ \øQŽÉçÕÀO2Èñ#Bª]›iÁ<ë%TÌZ-IV!‘O[ríÒÐ-C×â¿MnaÅo*‰%™Ö „rM­€&ö¡Yv?—«ƒr=EcÀª~¢ˆóèAµz‚«eg;°nô&m9¼$uÚEΕ—7@6+͟еì‡)üLÈ{žR‡å êä•Ñ»#ÅN3úŠï^‡ý'ƒ XYÞ΢Gò1u,Y°¥³±Ë1Ž)5LiZ#ãkéÒ8ËËø¬,€ó¢XÆì©[HÙ¥OÂ_SÔYj—)ÂÆùðQFÝIÍì]Î@˜¥­58°<)¥»®ˆ¬GGÊ}'ZzÊÇYýA;£Á‘3Â!lÈÍóª»B†½Ê ŽttBñÄÙRlˆºž /«73,vÅ`p’Ç-[,v;ƒën”w¼Fïš‘=æëâôñ·ßnH,ÄK®°QéɉêYH÷â# ß`)–)7nŠij=- \ËãX:¥…Ô0jÛzó=o8©+HÖVÿ€2Í×ÿojëъʺ¿OrKEh†äݾ‡ÒŒê•„íÞ*—L–ªTy›H$îù{ISë†íùû¯º´¯hHÿJ>Ä}+M™{°,0ϽO•óFªé¨pÝ ­]€ùTèb32×ox®Fæ)h{%*®r©MaNÁmÓ¢KÜ”V|šã]§tÆö³øe-Ù t°Ògô‰îÙ쬮Æ0ïõ*÷ 8ISE‡æÁµõ–žÅ)µÏ£Y]úê.=4¿=÷/Eq‘³ÖÖùfÑi½¸ú×ÍçàÓH$‚NWs-Ðy¤Æïì]ºO-§Þý€×Sèvï"µ{ÿuÍÐóðX8J´¨ „$B! €„„€@BB@ H͆Π²Û‘¯ŠŒ¨þŸß&’‡úúf37,óÆ…D¹sarÁÙÑèç—Ü/Ì Àƒ¯¸S廉:Éñ‚2)Q©;.hCì3„¨–+ävHp˜Øˆ“);aÃ*H÷nØÎÈe75»„7.3s¿Ñ‡+É<`?2ÛÓ&¶‹÷x+´»ùÓüî •˸Ej?2h(Èo‘H»íZ×R[•WÂΛáŽZ^¾Õÿ½{1é6­™¤[³’V0V_‡í{7à“ãó$ën¶Dé|Ô„ÜyV™ºëïN„HJ×Tºª)/â7‹EÿÇRO‚0ÛÌ¡ß$О7ë·ÌÍ"Ë¥[~±+ÎÊaåɘPeóSB¼W±ÎÍøó[uJlçU ±«WÊÌ=¥?„q< Oz‹Â{E ›cýÎJfjíµ#ÛÂx£ôúOþ_;·óÔ¯î~é3ˆ¦€rEôƒ½ÔíÇ.[Dº'è4±eWÚ+.Ú+±1JJo é¶-Gû­ ô™â ·‹çZ=^UWÅ!" ¢d’`#ö#ýÚc3½ti z©»FN÷šñQó°¿âº<ü4öPæÃ¨ûürN+¤áÿ‡ïVb”¹H5! Ý»-¿<«ØCj7>ÒÔmÖ˜ˆI[•÷MÁÄ÷áC=ñv¿³gœ@ (êû,"¢Dý1mgî:ßÉÝ4EômS;qМ‡ÑaÎè¢ûóÍ;Ð^KMC}—î*®³ÈþÏšå~u®¦$µ¾'Hg̵fÜ¢É :w^rÉS,ä ÷ìŒÓý j*±°WÒDõÞ—_3c8cþë“å¨[«¥LîŸÕgͬE¬ˆF³têiDuÈûS¨v¯éŠò7rV ±kI¿#Wê½6ÆÏ˜ šëº¼öó›òZ&tm‰¨žçèÖ¹Ùë&S#ñ°ym"±QëxŸ9ÁJc¡#N·=é {³éfÿaB¼Ê}âNWï¦ä[ÆA¨ÝјPÃÌÝ›÷~„c"Ó„÷^w-žµ w+Kc4@¬Tô& 7“j¿‹2ae kS m&øæñ;Îpì.¥ë3›ßëùo¥}ÕÁi³„rÔÌu¿igÕCóþ¯6T/3 ŠäéN§Õ ©ÓHÁ°10èK?©NàÆ#¹öpwîŽZä4ëÓD¹öc¸KßIÞ}ƒé¥ ,‰¯4Œ2(ÇØJZ˜†ñ­µ›…S•ÚÇY`â´ ñ+&"ÐßêßÔ5ÁAxþ½˜5Ôð‡Ì©Cæ4”òœ¢ûÌjÌÛºghÉo )ýŸ—à}aEt×nDÓ×ßFªÊ"ïä7Scªî¼kËWÁn¼¸[ª¼OÛpOºµ„zhÄ —#À•Ý#%ëó¦á&ISçñLA°2½€–t0°+ßt;=ú?XÓ” Ÿ°¥×†BvPl¢WÐØAÏþÚù¥'NŸÞ‹¹žÔZlcV"ǶF´)fJGØ9!N³(Ò@ Ÿa`DÃéký}V2À¦©Ø¦!$ÉïéTD‡éçêËyª&LT-gŸXjgK(&¡w±Ï¿e«Ö¾*ÙI{*et剢漳•NÓEéÙüäLáÕHQç–Q²Á ¨…álû' >n‘iߢ¸tÊ»µ8PúÛKqúÄäÇÙ‹þvÚÆÝ"±vââÏ-}ïkkÏ]ÙwTÔ°#!Ùhô¬yõ5;ËŒ1$RH+$‚°ÂG˜‚ëС‚~üÚúSEü~qÖŒÌÜ4g9êæŽSФ“”jóHË!·+/ÿDêŒ)bkú³">»ZƒŒ.i ·(vÛa¥çÙfÁTtgœ ‰Õœû‡##ûrí[·2ÁÜôÉ-˜yzjÍMiÇûO2N‹·gUÈÌæ’2£yÝEÑÌi’äýغêÌS½¼Qtn¸þBäQûæg5ÖmŠlºç¶"ÁÏjGt¤pÌeg{æ9fêsÍkgiHYE:¤ç'¥}.ó@zµ'Nƒý†›<„Àç ª1=Ž8'½aj¦&9>&·éj1ØÚú™& tÉÀN®»¹rºJPj¨êʆ·'øÓ™Ä‹ŠøÜš™5Úå­4"‚ öøIR‰kÞð?6P¯½‚¸ A¼]gõY˜ÃH‡|)Šè#Ë¿™ TDÐ …66Ëô 7<õ~þkÁÒðòÀ!ª <”“óbÙ K>É%õÄ ¶ÜE§SâË8ÆÏL5žƒzëjGƒúåB4†Ìh³éWÑYSéþÝÆ²ktþ‡n~»œÊÝæÓ7RW–oVy¢ù"ˆ‚8¤æ Œ[wúv#/h¨à¤>giØõg¬|Z¤ÅS¨»ÃžS>/î-3–Ö:Ÿ5€¢ª~Ë­Û òë°xÐ…m)èË9*Ùžà>™D¬ ÷a‚©Ð+PsµI(åBè'å?Dבd$ºˆFi†Ž^–QMÏFÒ¼¯¥ZÛÁ€}]ë‘ôk· ŸeéÖ]êU1ŸR'-añ3ø¸Ù?EÜ£/=çââk.µõQNª\Íc ý¾¸qú½S+¼~Å}O[ÐÝx'w*kf½õBØTø–xÕW'¯}…õ@N '¢¬\ƨx"‡Ú/Æ’ý['«%ë5Þm ¨Y AðL¾ »V^ö&*_oVì7±­®ô£ƒØ¾þ!¢õŠ¥T¤ì¥žã”¹R=ßQ<ìk·nÏžÁj¸`6¼Y ®„ózça¬K„/ÂÈfVÄÕé9¶GÄ_$ Ÿ•åYÒtå-kŒl‹ž LÑ}øí‡˜Ê·ŽÉZê´’oUŒí;m²d²`iÿ°ü5˜£œõp¿úŠØöÍß-C–Š•e‰¬ç‰ £ù…ù&ÞPÜáíêá·ëCÀä òùï ¨©Š˜±ªQŽÊòi’Ãñ‘ðþjg¾¡Åý-Ä¡šZ¾ìJtÔÀ¬Zˆ^â\kJ|vš1zö§ñmP‰ÉlìZA%€^Ä[] 1rºÚVÌ&ú‚þóùÏ©ý wøZ C=qW>šÌ—±K. Ma7"Ð?±Bwöº¹Ð¦;%¸ý[Ö´¶ÛÝU9.ÜZÝó]]íŒS°síÙ]E­Ëó„ÀA(„í ç —z¯äÅU6›¤~Ç·çþîÓçkÈ#w-μ+!ßL{y߈|}£81ó¶ÈÃõQôâïŽðPYñíA_¢²oôש󳷪ý*‘ +Ö%±¢>é¬÷µëEßë`ÐOô·"X¾¼pûþ]* Ï•¨Ód©ãþhüìN°ÞÚ*ÜAµšs7$èé°‚wÔŸf …ã«+—˜íåÓ;Ô›‚³u—”cãÕ»ÇHµ8 ˆìh’â\‡ÈéÉóN¥ü’FJBÔQ‘Öy–­ãk¹¦d³úg¶]ˤÃ"&óúºZ;wºŽ¹ ®jޝ €÷…ïvÚƒ/.¼ôÐÖ6³VÛæXê]d“B?Ò¦øp·ÉmÙrè7Kœa73øN§r´Kƒf,Ü«9•xˆjqèì¸Aß´ú ¬OtŠxx&)ì˜1¬ë7áîþHD;ûl)HÛNhCKsˆNüNF&íí?ƒe ȘV§ûsÁ![éñMŽIE¾~%•ı#%‘åÍÎkŽd<õ'©à5\" T²ƒö]“Ùéi%¯4½MV²Dd 'c¼:¾³°”ٷˆ„®ÄœÙF3Õ™ÓŹßGS“\¹àãÙr×ïÏ\ÐQ¯ò €rÛÙõfIâ©ë»nE2ѯ)æ¶­ë/f¦"y5àg_RÀ'ãô† ]6g |ä±ÃN>ƒ²Ò‰ë¯Tà 2qî9׉îcy?ràßäîŽb¾·Þ¢3tJ¡)<ýNÁìXÄo8²¶(h°ÙD´ó _‘Û,ɯX,"˜HïJõ„wåÅËá¾½¾·£æì)õQðf@Zï»>¨˜;¶n Õ*ElS&XAræUûª=ËÖQдF9ñì‚·7g%ùÌØ—hœdiµ#¼Yæþùn)QÈŒþ?Åûl¶ì^íÖjJîÔ|ÿØ_sjšÌ‹;ât+´–+µ¨Ýþ±Þ÷l¹ÙÀ?ô—´óNK£5ùŽ‹áBM˜J÷¾—Êù“ƶ™|è .›ï2{–÷s ǵʔí²Àë)We a"ð·¡¡åß^Âo1º~zEóŒ¡XCß”[£Ëîšr£þ h°ö/ é|°–Æ^˜©™#>.a8›^*ÃoãÁóÕë Ìj2 ^à†Ê¨mÏŒZï«Ü‰ÿï?«Á²:PmB,Š!€ÖŸuû1[ð¤}ÎDï¨ÎÅ Nú®Kn`24¿å-åH6ý ŽÔ«Ž³§ c]XÙ¦¯÷»[˜ˆá&’\ÂÆIW 3IÉI¬Ä7Î_±ßÌ=BÖÝÀ¥IôÜ^n2ªl‹t6k”›U"w’Ò˜TÍ·Ùè/löQæ‹€©+û+D¨­ßaP,}²,ƾ.И]g#è¼Ü´Éôuˆßðÿ6ß–Ó=G°âMm]ôÉ‚‘€×±ûƯ;Yœo­…¢–WYÊTÌb¦“H’TŠä®Žc¾ŽÝ—”»¦M=I²G/*—>‹EÆ)[ôJ«)öÿ9]ô¬œ.+õß_r„ìŸ ã9H>3ëD<€îÃû+Ü“Žâ£Êù8à·á›7"µô`jo©VðÈ­Å~¿3a©f›éRO9¨Á°ð4J7ÙÆ´kkAÑ™Mo’åïéüM„dGøù¡jUU¥jghÜiD„r¤JÂëϪ¼U>©-WëÓJ¤ @)±o!Eı(j>„ù‘8FwOãŒbŽ(1¿aS¨“qý³ïÆÛÞ§xÙ›3;¦0G=`Éy£œ˜Íùƒ˜Y›àµwìå,´æ°×…ü„ùQì律Få"æwþ¦4aD7‰‡Ã tD´†½ÇÕ¿uÕæT3^t$3Ò‹âC®ÝFü  ¶©PÛƒZæAüà3:¬9Ñ“Ö^›© Ù×hú-Aõ×—ÄMi›´&I¾ ÂVt¼bt¸|$ÝÇïgcýpÚ;Á{qâ^h@bµÚo?€H*àU ©N® µ§ua†+qr)nº›[,„6ZÇ®sq#>O©S²Ú*œ‘jxé7»¬§…ôC`C7ô„a`wíw”£v­ZûL]nÈð2ð†*w¡ïÂàHž¢¢† Κµ‚Ak3f sýûÆÇ#3R'ü>‚¬\xà ÕBÖÌÛÿ8ʘ1J’®zVU/ø0Œ)ø|«DÕø]Þ/¼í”û¡åàµC£UÎðkÙ«=º•ƒâ½ÓÅÛÞ§O,¦L(aBTȬiöìÅ3Ð@¹* X¡Z‚+¹v¶[i4*Pë¨ô"ØY|Æ(]˜UºÕã`,ÁHcÙö#?Z²ñù>³Q¶ŽðV]9¶Å,yX» ]Z}[ôÑh?fΓ֗Õ+­Õg"×-a^…+Ý‘ô°Ä aS‚Ç —YõBèš±Ò>¯+¨~¶ãML Ï¥ßR·1Çm®Ø1„œgæ`5:Æ K‡¯6d&) xñ Œ¬^|e¸HäÝ™|¿õv®³gMËBåìQÅ+-,ì&_xëÞ飰°Ä×R€ãŸ‚Îú6_%þzº»˜ú&¯ÑBuj¨©A%=«tãLIWdX<^~a·ÝÆÄÊc/÷æÕ¤}Ò¯_>9b˜ŠH‘%‘¶3h°•éÛ ÷c³ÄÛ[û¾ŠÂï®ægAvÊVl˜—öc™µ¶ˆ¬©Šý²VªÆ¥;í¥×WFSŠÈVçHîà ‚ø½*DRŠzDm¹½á÷8¢w<+a ?»çÉ´Ã.lC¤Ò“[Y€QAÌ<ØÉÚþLèû¹ûb nޝ p¯“˜‹í¶ašl|4 ºo¸¹üRÞûßç‡.š;W]tdöi I5)ê‘@rÐ2Œ„§ ·øØ_AW˜—}­ lé®zèÀتÿaTç¬$²ÁzvbtäEù„EX£§Ý}¿¥³Þ“ðb§7âÞ¿ˆØ1Í4ld´ ·ÎåGÃÔÐí‘ÔîÛ\Aª· ¾Z#Ö £!|\WGú£T^(*†î ¸+#€rZæ½"Qk«*,ÍVP› äQ€C4sWÅ—·màfª8ë[w¸xÙxŸ˜ Za" ½fÙ¤ƒ2Aî#dÍþí2‚¥@ÒÅi”üJößãÕ;b’» a€‹ÿ›Såþ–å‘¶Ïgc³ìT3Ñ"îÊ*&5Ûbf&3KUÿ\çÖ]2OÔ¯4wèÜ$[<çxäÒpš×8Sau¥$ƒá$ƒb$ƒFI$I¸IÜ’ÚIä’ ÉT"(‚?"ßCÏศ›1ýñ²½#wyæêzÝa »LhÛ%q¸,ŸÄr=Fn¦Vúõù†tÄNx¨¯ÒáDÃÅÝ¿M‘l„P¹úlþëq¢á uëÏÞô- ^E¯.Ýg§ Þñó«- ›~Eo·ýS) §'‡¡¯Å±k7 †Ó›24¨7£Æ¹á®nŒ¤Ø« œûA äþjCo–TRaûjÉÚAV”Ô-—ªÌ«Ù[Íäó¬¸ó(@LõYch Ùj•Ï2þA" d‰7<Ù$Ûú]ÇäxÞNʼnî={D¢W¦„ý&w²È¹pÖÖóéü™Ç=\E{”+ï¡Âwirð‚¹GŠJÚÌÁTáÖPí„%d»Âx²fã‘à¡éôð{ÆÃÊŸ«š?Û‡Ò¡žžo²O½×EÙ\É›só,’w¸çI<§ä£@`4"Æ ÑSàâQtKòò¤=¤³îuòád±AQ„Þ’›`TÛpI—F±±vðô®È¶î™“ñFÍÉJ»C?:_±ºýŒ Wr%lðr*ŒÕÙuxoÿ܈þ  Ä…bÔRnS³Rmƪ'\ W[ Öc°üу^Äd™O˜i—Ê=!®ðËMº+ª{£WùÁ’Ë]|ßõñÚ/(ò¸”WȬ¢¤Ý  ~Ù»?LV‹š¨v²¨±ì@Û¹c°Òãj›{_¡Ã Zÿß ,Å>éÛXÕ ÛGû®{›ÓañòU÷%A™k&¡^Ûjå™´ÜÕÞóY§Ý&¢˜ÉȦrk?ŒïÈ»rN5in•TøU};ý9¶NW$ÀHé0)¢@ÿLQ² R')T~¦"ÐÞå·VˆÌ/IËÒØ}‘¬ {ec“D›KìDÂØöÖ)«ˆS•Yb#Á`×Õ%&õOŠgöOÍ ·•›"^ôÊB˜$˜¨í´WZþŸ³K9Hþê¯sPõh”ié‹£•¸±ÜÛ¶v`á?u ïÑŸD‘B]ž¯«Ù¥WxÒÅß|¡êH,ÓzU“ÄÖ&–àìõ$×·»’cÀ‚e'ó*.(€)øfvµß´\Þea†ÊÓ¨V5_íƒëÇõÜL;Žcd±º@;·E~åmSþAÈÏüT¬ ô·½¨b_•`µP,]u ¯ÔT÷ £÷ùÞ}hø‚^=C}TêVê–Í”F7GêÙ\^ Òº†c2ª’­ ó¤¯ECfŒ¤Zq ³zE…æüŒä+ àt8öžæ3Ì9dk³êï½ë–+_²MŽ©Êùg¡vˆo4öÀóðÔ&¥æãq¹/†ð)9©þÖ\¿«ƒ²êþŒv²Êèe —ŸÅ5xNCeáa³¬»ÝšÊIX­P.ÜZS¬ŸoîëÎÀ9ÔìÀ… >Ã¥‹jóˆÅPÿÙf¡¢Øzêìì"·»‰…ÎVîKÓ äÔ:‹Ê¿ÎbƒºkܨOqyñ<ƒd¾ öÖj›LŠâ ¶Ã¾ÛlÔÖ¤›®P<}ª±›gûmáœáó´p ÇÊ€ÿ°ž,“RÙPrUÄMõy@ .&k#™hU’CãlÀÙ¤ÎÖ…Å«Zöšwa­¢¹Phæšñ©hÖžCÅýoû\Œ´ã´ÂÛ §¤šr- tŒ'wÓBå‰Õ¨uðàß8 úcSÛ}¬ô`›ò¾È'oz€ß Ñ ¬¦YÙG¤ÄM¢×ά¯:F»nhWùðz4£æ¿Æ‡­ 71·f‡4¬bhCú(ºbqÄ•5B*sP͵ØÇ¨ý‰Ë@:ºÕGÁ+bŸèÔ%לúj/PlÝ^u_ÚnKRSŒ?9w¸ëŠæ;ßLk§oPAÄI,ª… iO&5IRSÚ ’\’ÏWøaX $@J_[N‘ÙÙŠòÎ|@ƒ@ M, #aOaãÝôËäñY#¥ã;€ô4«¸Éü5~½í,Ïç^ÜMè,u›3$ôw<ë–¶ºdÁøÔo‰£B%Ò®ñ‚XÏü¹¬ÔÚ¡²Om=ùêÇ9]‡uûº„]‰,zXÙês#1\QâyU^H¤ ‘PÚ¦}ºµubò­”© Ù$ÒˆØ^W„èð¹ß.j¸Øòëž*³Û#IõÂt3Ñí«—nr6%[qê1¾ËÛtåæg×ì]×= úÊAÿ°tyÇ`w\˜^Õ{¨ mŸ­Ïâõ0Y`£—álÔ¾zLêþl+âçxûøeqÌè&cEO»ÇùÍÖÍsÍ(ÜÛ6Ô7Y"æ¶SÐÌ Ê«Ý#H4Ó»˜c‡‘ fA<ç êvh01 ÃY ‰’‡Èñ[Osü˜V°•î·zú:¹G[y›™Ž›Á¾Üà Íéª,̣Ѓ&žaÓ¨bwmM’Gž+ÖQBE2"›+7?Àó@Â4¿Îú3fìÅÌ8„#h|}ñ•Š¿r°Î¼õ”¢OGÎØ+MFÈB½cfÕ }uE¸nzÈ«c)jÿ Ñ4Ù^)(¢Ñd]—¯ÍŠ LÏ[µ$e¦ B›_”Ó<Ï`R±n Æ0M4‹ÑÕ8;Ôä-] ÄÌ!iuæDibc§¼ŽpÃÒA ÇŸ>‚7F°hLŠ(Ûë6o* C0c¨[ô-hv€d™ŽÙ´ªæd m:˜—8áž1@Ïp0Íãór9§ËŽv®e9¨Íg4^ÉU¢2•`ân!e³€ëÚºÂBG´Äsé›Õ‚ûrA ~ÚžÇÁ&†Û‰<#3 À×#È¥kÖ#f6#«­£YÃùq°É‘…:4Ömu:PYo˜8ËÔ¡ž"Q€@ãaÍz?>“³/ñŽú®ºÃg£íàÓ¼t­]*š4X/§iY¾hûYê¶Yö{6°ƒ7Á‘ }º~ÍÇé”m$¬,láíî<È h›þY„›nÁ›ßB›Þèì_8yÜV°8t t9öhÝÖÁ/ýs ظ>v8ɱ´jÇ‚<ÿ‘µÕ´QSÒ©Õ*=}_Ås“Ö¡‘ÿŠæ„öî©Qóï݃åÚë7׸…sò=ºmœx:Jü܈zÙuÎ9z#-µŽs)³loTRýÒÕéËXÔ»¬Ù‡EnÕfLþÅU²ï°U-M“IT42c@ÄÀ„Èd?„a#D2,:tH¨7Be“$WÄDÑÐ"F“–˜¥6¥µ [fú† $Äv’™+J±¯¨µaœ^â#C?ñB|bí`O.ŠªÖ~*íû[pT±·Ý*‚XÓx`B Õ+uw§œ’4NÜxꕆ¥ß/ðQßÔ56©mÕü¬6òów<Ìߥ;Ybš=ñjUEëû¹‚Te«o¢øôU™3\¥6aË¢ªzÇN¾¶ká·6gÒ³¹,L²ÇÞÌhÔVFTb¦×ÁA$ñ¶D:N5¢Hˆjú00Eð¯ß¹Øš¦a®šNš•cÕ²¢î ©Ù3¯?{’ .fººˆœþ—í7[YgÙO)´=ñþD5\a…Ö|–1”íÁ;®3UÓÃZÈÁ¯§UtÅ]ŽDÝ(áPL´HŽdUR«cš+˜•ˆ«!‡+Þ5-G¶9ºz–õ„’”ûu¦0ZSíÚ5 úÇa°¦Ø¼’ýN Âêo㢓õ†„ʪ¶«*­årI%kNr)è_ ØA" 2©:6õ§)ÎRÿ*®TºF¥²ÃMyh|,áA&¨m·•i¯!áÅÓ(1.,‡c‘A³T,ï"C*ªTúI8®S˜Š82… ’wÚu…‘ñmlT]z\OtЋÇun’oªMÔïÜU"C­%b,ÈaTÈJ!usi*/ÍJH¶û±†«]kÓ¥{/G$èxæåÆj¶1ULMÍ—ÅŒXb†÷\A“jÚSˆ©s~¤¦T·zåâ Nž(ã‡F褶O‚p¢!_Õ¨ÈR‚Ô —Mhàc#,h€àmƒ‰¿JRI!Ì´cY ˆfSIiø™~å„®jOòM—8#nPÚ°ˆh"ã!´ÆäEÏд`Ë$ìø>ÓÙtw¶Ž«ìÚSé0Y°Ã0-ÔÌ‘H{6.`ÄT<8›JÆÁºÊÔ›s ¤3 [s¶äª5FÏ#bjÈe#$d ªoœŒ=óh¼¬ÔŠ…/ÇZ©Æ¼à,Y…`AóhD B m"ÚlHM¶ÛrÚ¦aØ+F(b¼b+»«›sm¦„˜ŠÐª´vmÇ!EìéF ¼þž[q‡‚Ò’àH0+i*8朻B°G”ñ™±¬ŒDµ ¯-~iU8.¬2Å4¨µÑbÿø"E¥›ç-&‚Ö´`‹ûž-v_«^É\" îdȪV͇"0_MD aŸQé†íjظ™ZáhÍN‹’”—8·: ’95B”AG0ˆYi¸Tš<AyÂL„P`‹QUd™‡¸¢Áˆ LxY+LŠè§N¤ÇÉETÓlm m±ŒcmNR( +„S$ˆ¾…0ŠN¡ª*€Ëèý‰â4j”J9ßi»R;÷k9U"ªZ48Üɵçzï¡éž6–÷YÖ¶ßh9Ø— ¬ºìONèØþRâ(ÕÒ†ò¬˜IuëvøÃ;W’A±ˆfÓ±;ZC“•f\A‚pU’®õç-™ûÊY6ùšô/•N£ 6ÈnôçÊigÍ|RÂÀ& IÑ»Gã™(mTÑ$DdìY™N»Ôÿ‚¬¥ô¾ •cdUQÕ²¨¨ªƒ”jÓD"mõ6oä*N”92u™úçe6s¶èÕxPØjKÅ]Ç%6A2j#J¨2]€TDH%n7‹K -,Ê‘è³ ˆHŠY©FpíÆ,\© h®[a‘-* e®µ¿•[MºÖŠ”Ð g÷X¤c¨²TzèLè8*›™â\ú$lôxÖQ¡&Ö½]Š+t¢"ib¥Õ¦ Û$´…@ ºZqšR(@8€èÛVļG„*µ´†JÝR¢ª8 Œc΃„iQDâQ"â+5OyzÝ}R±é%u JôóÁDÛñ|‹K¨ÚPqÅ0,Ò ïXÚàì¿*õbì¼7[¢9w“ÏLÜ)sÊ%:T¾"W}Ü=#O{^er°':&Ûe=qˆ¹E70§wT ÖI§ÒOÏ "¬ ¸; ÷«‚z¼´8ZÈ,ïFŠ0˜ à‚ë盃ÏÔ¾¿ºÕFº·¨m®Ã!Â÷O—½ ßUG®7,‹[™´d~7Zc…Ð7HO)eêÖðN6lŒ§X‡å@&äÉ:ƒ@SÈ–«j€È0&!÷ ã:爯¹<&DwÍz6F'ó;â=dµ1BVŸ£cucmŒŽUjf~Tùëh{Ú Ã!^9Æ[l ¾Yë-v67ûv‰eNêëlNRç±U^ÍS--ìÛsÏÛ¹ÁæªÀy_+\<ç ³mDe@J!8}q¤µúáB2’ËßtÌXDÕ‡&–=3Þñû$¸!SÚå €KÍÕ;¹Å݋é5¨ÖÉ·3_$8rgNäJó/ëXBcd/²Å0Á¬rW¹7KÎ.>À¹+ÆO‚3 1͹øÚ-d!_) etÁQÕr<-ÔâgE;C°®[Ì¡×Q^?ê©½Š¬Ô¤ÉÉü퇭sS@D„ÁqÍ{A8Ü1ÀÌzþådØ2Ì"˜aæß ™ÀŽpÄŠ#ßðÂüA^:$:ý"HÙ–è›x Å b<¥§‘b_èÓY™°Ë‚Q #È €Ï4vº‹±«¼Î\$,ûݘl+Ô.É1šîÎHà‹^ËšæÄ£·ø»’)„„ý€ggplot2/data/midwest.rda0000644000175100001440000017120112540257620014730 0ustar hornikusersBZh91AY&SYXvþ—cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà¦~ø>{ß:Í–»¶í\jòäû³®Ÿ\÷Û¶{>ujûÞïwÏ-°AHH¬%k 뮩ë›W¯{·>ÝíÞÞû¾íîûÝï½¾ÝÛÛë»:{[ÝζûÙïn¾ù÷)‰C#ï`;¬•_m¾í^½vÚRìÒ©öÍîK¯»Úܦ7³^òï{w¦]÷²Ü+¬eKÖÝÃs¶ÐtPª¥ti×N´iT]ÝRhmÜ.ïm¶ë¯´œÖs½¾ç½ ÝgÞÌø½{§¼}ï¯{kéžÝÖ ß{ÇzGh+í®´*#½×½Éß=÷uJݦíÕÛ¶–î®¶ªjŸmÏ´t³¹Ï¼g–«^ÝKï;Âh[yuíÞñYÔgWÙ®­{»³§kîï[6õvV»»îôõ½zô«Ç¾Ú÷ª-ݹ}ï¶ïµ®;ºsÙåw‹.Öuèh»këå{îj¾Š¶¶=¾ïWžÚûyÞîwßw»3Ï®ZnÖ÷wQÝ›n½zÌóï½y﻽ßy÷o±×_wwN÷•¬ËÚöë=hÏní™El¶ë¶Æ«zÕ»]ØÕ¶®<íÌko­Íµ*t×uÛ™Ñ&®ÖÓSrh¾Î*š2@ÀÓLdÓ# ‚`a`#L&L™0)°Œ#%?FF`` …S 2F&€&˜Fba0& Ñ„ÀÓMMÐ#C4 4ɦMF…<Ñ= PŠÈA É£L&˜™G€M5<2Ã@2 M0&Âa2d™…3F1MOÑ‚)š`“L M C“FŒšiŠ…S 4Èd Œ@!£@i4ÓÅ<˜&L&¦ÀŒ˜ša0 ÓM22hi¦šb 2i¡3J~ši P‰ B 4ÈÈ2Äš4¦ ™“ ‰€ 蓞FÐ&¤À M“H``4L44i10 ¨1$@€ŒM`ôL L#ÀA= M00 lL €š4ddÁ2i¦L&š`FF™2dɦRÏ•×6¶‰a=Swß)Ð+4Êqî–ŒË]»´î|°Ôî­ãgaSöê飶;oG¿=×û<þꉬ¨Ôó9!$ ]rî®ç¿h°M Ný¨ ôªwf‡3„BH›.çƒCÛ=Šý‹»ªiûцÀAƒc²Øixê'?ñi¿\a ˆÂ$³ùø«w{ ŒƒÈ¢FH"ç^”ôoöÜ5 @ÍÖûÐm—gì}>¶b–tó,#¬•(ïsìN¢zŒ¢ìÑo;RéšÄÄÇ¿–Ý®ô_·èýâ‰|(p~>­òBó’SMšâª^®'qi¹’¼ÁûŽÁfƒTÓk ƒae ­ƒý ‡š²`åqt6ŠòÆdŠoÙtÅy2i–íQNoÒ<¯Õ PÇG˜£!þ’ÞÐ?fò-aÝã.];h¥}ÙYUK(Œy+£ £¹Mµ«IΛ¯’” %I¬åíú©ÂµHËŸâF´v±k]N KbnºÇè¯K"çg¡Läà~úñGpòoºªg‚ýÍÍã3§ Àt¿dpgiÕhª¢ã£ñ«Lµpãoë×'tdÔjnN´Ñ4àgôìÚ¶/V›7ìgصebýéuƒ¿—vØö4•¸È j2~&f~V4*«dÒÍ;¦F£S©H  •*±£ç,m‘”¥•žL¾«J{²±sh%³Í b#~¶i §Òßy6X¾ÁQ—Jší£g7žf´‡òõ½wÛÖÚÌøéOs5àëªèf*@ÛÎß`ã_Ø> t_K“Mç“ÐJe³ÞðôðÞñYÛ~¾¹šX+ZüÕ›zš6ÕšŠe:œšöÆWÙúÜ™Ú<´­\܊̾}Ýü-Ôîm¬Þlõ¼þ~žª˜Ò@:-éÉt™£Ùbø×k^+‰IÒmé¯Ü|~Cã¼ÀÚõ§ýM¾ÄM3NÎOsj­_Ço'6©à¦œ˜Ä qz¿í“ÿœ`e%Fý^Ô¢;¨KDtÑÛ¾mÏZ¥üÝoYîÝ»·`ëk=;‡3YÎçgùÜí‹>P¡DÒ… ) ÈP§X™2dÉÖÐPP1ÐPŸŸ$H” .Q"D‰ %˜·?>H‘"D‰/ÏOP$H‘"Qä‰$H“7ßûþâoâßáþÿ°e¸_ §ßÏ¿Øhü v:Ö18Ó¿òÁTöç¸MVÃCÂÝF‚W3)dÂð­¯m¡IÚ›Wèq4÷ú~Úˆ°‚ í'E¶ûÍÃ÷Y6M›6lÙ²fÍ›6lѦ£FrÍ›h6mœÙ³fÍ›4iLÑ£FmY@\¬q§¤k¶êo ҿ˹¸4QºëVX!ëXÿ¾¿“ƒ`Õgu?5—ßò߯o=[þ¾Ísûký·óßeAù šÈõ(SÏÁò§QØE9ÏÙIJGïhtÌGŽ $bäÑ0„€G%r!ûÄß)Ó$©zlÙÓ1ÃQû5Ðèt?KŸ*G ËŸ=======—žž.^̹râK—'0\©rìeéK—/X\¹z‚Ê…ËØ.\±e‚Å‹,ÈX±bÅ‹Ñèôz:u€ƒ“• »¡Ü¶8€x¹—êÒYñ{^÷J äëÑŽØÐ:@åÒ½åÀÝÜIÔI¸to”ÙŠÆ“>÷“3X²E’&SH³õ3ñ¯Kc•‡™‹J[|P@õln5ǧ ¢÷ÿJ“Úë©ä¡[?ÃI@ñNª/ýNéìf!’£ðû-œûÅ@©Ó?>Œãö‚Iù1tlƒà­¨j2ZÆ úÌ)ÕŸ‘›ÎÜzØ=³ ý¼vœäÍÒ/‚¨¹Æðc¸¯µˆI>K/z¦©à<ÑÇqñúÞå_øÝ\´¶ŠlY#¡jÙáî<_– ;ó•²ÈÛlzÛœ8€‹žcÒÊc¦ü'Å#<»çwYH ?ï¦àoX¨D™L×t®ývë7 z±ó[JdN Y»7qU‚b‚/{\†ëu±œcR>Ç “‹Ù—®ý5v_yNﯱ-Vj|ù_ÇEŠ€Ö,KÃjê@$r>»³¦µR­]¨€ôï·înòL±”‹õêY ç2PA?u¬ïK^ƒ~J;r€=¾[|ª7]1‰› † Î׉þôÕco‰€€cjÕƒRÀ¨Þ§~T&{Yh™¦‚böÅX׎£é"šö½¿iSA_³èÍíÎ(…ÝucêkZ¡’MñÐ|ÚÝœåb ŽšyD`‰W»Ö¨8ˆ(cÞG|–²`˜îmK†Ëwêu&]GÉå6—HC ±Ñ÷>þeº?q1`vÊrñŸ¸Zî>È #”ƒ×õTíy¾ŸO´cs.*çòò䵉•¼¦'h¾'ï䯂…P3‚!¶¦w'?·» Ï!•œþöÜ.ŠW=ˆpÄ©êÔ@Ò¦F!€ÃhëϦ~X>0ÑC¡+,0ÈÚáü= Ée+zLk¤íábDì±´* 2ÚZBêy‹±;9¡S 'u^ÊéA%ÊN0Õ«†y03Äü—Û@üät««§è €˜ük8ÿ-j$¼O´’ ¼Åã±Ó×Aë³–Ôê!›ýî,"ý¹ÚÓE€"5Ï,âÓÓà­0O{üäMaâôØ÷•_+»ÁÂ×Ð`ª,Ôü41ÎÜî…ˆF)¥4úÏðо>­·ÛØüË ,%-Ÿµ®¢.ÇÃïÅíüë·ëQŽDO2OÜPºë7˜é?ÅðpÀŒdÕæž`Ë9??c3{•ÈÂÃDRé{è-ó~3\ ëz[‡µ€Çf¥T© ”Oï€ ã>„çµµ“Ĩ˶Ë}t,” 7ö&׌´¨BYçËiÑ·åîñ ¨°ø9Püôƒþ»}sa;ÎÇ`1Ÿå"aþµ¾—ª)ZªÄ!½ŒÈŒÉ¼¹Ù&µ­}è0––¨cƳ/’›¹°é“’UåÜx’gCgû·Ö4LAÞx§ÊîÒNÐZ,Ûw]$øy#à|Õ†ãðÜvsüd„d·í‚¯¹lˆ D‘@‹i„¦ô¶HÏ&×ôIö>Â@ð¥“z|¼œ#‰ÎbÚ_ö˜ÕæÏ*ñ¯«w©ƒwà†€ï*ôždtÏ—œëQ/ýQ“ {3©ÄR sv“‚OåƒóîPÀ…% ·þ‰ƒÉ£" ¾)¦N§ñ‘°P¬8ÜZˆîa0j†àwßÌû‡ˆ"É«ãùx‚À¹·ïB„h<è€Ï~vÚJyÝ“¼paÉ/1ßÎxµ_¶Ý×”Í$l€(ZvßXWÒ~CÄ¢ùʇ3‹ÕsË%žÞd!yTøÊaE0hMY4}H£‹¯'¬P'.)¾¢Ärµ—?yi[8bç?-ωúV Ú* ¼„f–ȽYâYÒ5 ”iBNc1”ýe\èQ–ýÝ¥ÁÃNŽ kïGêjuÛâØ?ÿ׿§] öJ¹¼ÃMàYТÛÛ,Œï}ï}¶—ÀzâÕ¥‹ž7MX•gÈÃ3ú1äï›G]iÒ¼Kg¼y˜o|üXç º<”:¿^e×ÿßO(óÞ½Vlö } g¾ÔF ÔºKN}ýy¬˜F¿R||ÝÚºÔ¶2†3Ïp²ì[ü¡°ÚPukã¬m*5jcʸi«OУ¬âóP¿Šõó¤\ þMÄŸ–dß Š©´)Œë·×>k²Úo«ðÕ뛎c„]Jç”ñ”{Ìà"#OGˆwŒEÑÁZ¥„@VÑî¢@ÒP‘è" #>ˆÍ±C\5ÝBz€äµ#j]”MQRÝ1ð">4àˆ=dohŒ@ý€òæ‰tMaj”oÝ2ÈßÑÚ Þ‡uYÊ>@´ ÏSÀqæ #Q#Vˆþפÿª-Ÿuºtö‡Œq$Dª¡ @Ȉ(}È^l é¡0†… z©O,Zîs†FMm\Ôa¡SDÏXÌIr@"ÆI"HPHÏ ˆI$ŠII  $A‚(’($($I("€¤HE"‘ P$Š@EAŠ)$E R ’( €H¤( ’E ‘I ‚H€H‚Dö1bˆH„Š„(’’D €A‰JY2% ‚)’A#˸: ‰½Oú#Ó½@h,=wêÌe£ƒ¢ @~$V©PY³4œAJeP%9Ì"(( ¤Z`ŽFŠ©Á"p:Z$âäÀ²Ê€6?@ƨ†,†£¤‹   ‡r TIâ¡Ê Šë±Pƒe ! œ€J'PªÍe\…•v…° õ™`Yc‚Œ”°ç’S°(¸2ETˆÂÊ`11…•qf&C#œ±Aƒ—X6Jìcª¡aœŸdÑA498Fº6@F'Ä9P¡)yGÆ:7…Ì ŠT+|`õ2#ñt³5žŒúf f&bä[Šˆ€€¨PY°Λ,u+F£€mÈ@WX€ÑÉÛ.ejì ™W•]¸Ìöé÷DM…bèýÚ«ÝÅð ,h€2h X' ¯(%=…”ƾ¯_“_U•F¥MÝ@€a¬BŠÈ0¾Å"OÑî1)v‰Sa¯î°–Cj$Ò¢Ç,ÝõID,4èûKÆtˆ$hÕдþ-ëP˜ RÀ‰ Ò*èGCE¶€I,ˆ‚ N½@Ý EÕ’@ÎCæ@w¿ëWÓÓ|@º Š8Å$>‚"aK"¬ø‘ï¢)ãbÛH4õ©!®@ÝFª€#å@Jë°dHà[„>ºä@Œ TD¢ë HŽD‚lè}ÎæX€Déˆ"$â ¢ Ú$ Ò5(@ç!ä@-èv¨7Ár®·Çë£ëyýÝÓ0¹Îl:·1H"Hæ‰ Ò$ :Á a Uã@²Dî¢ 4Ô@õ5 D“‡@ˆaIªF ADA#†!Ià¢8ˆÔ¢1¨'’*è’'È€þ3%Î@ƒ˜G¶†I„¢´@¿ øý6$“ð¢ì[Øéï"N=TH >TAî,WÖ T'_“ „ )¢0ѵÀ@hÖ9 ú g–¬ v먈1ËçGDˆ· Oe{¨ã@ŒrK :+J€è¡=A,¨DgRÈŽ‡%½™ƒœ®­p›Ñs@LÐÁnÇžpLs ‚9ÐúPßt“™Ï³2r…}è 9Î@AyžE ¾ÐÓÉ( †™ø!ÁÉŸyϼÁ÷ßg3>ÎN"îŽgÝëhðÖ}l"0;\Æ5ìJ9T"G¼ˆì£I@ úˆ–›^ãÈÛ0¨ìH÷‘OÊb8#@‰6hÈ¢#GŽŽâÀ ?WaëøŸºÆ‘ÖÞæ¯9aßEÓøV}¤U«q3üžé×öÿ¯Ý€bÆ5‡¾€ÄKÈ‚rOfÌ#QYD䣮@?õ0TE9gÑö=ôMyÊØ¢ $о«ê!õ!ž¸±"Æû‹@vP™¡2³~NãPîI±—DÑP ×6«QëØßȧˆÄÖ1¨iQŽDË­‚$™}ñ`Б7ô>Ä?T4kòGÞ@xµ#‹C7±ÞMP"ƒü·¿@n猡 ZÃqXc×De­TÑážB,"*H ª0‚ ˆaˆæC¼"LÓ šò/*H™@AW´ØBc~b4Hþ?sX|œjÛ„R;õ¦®1ª¢E;4Ç«q/¦Žÿ?ût>¬5úñÂìâ/ÚÊì”t~EwZô-Ht‘$ÁIkK $G †Að 0öv·@Ú­ i›Ø0Šó‘ù;Ô%òJ°¢#ôF= ªè5DQ?n5Ž!åF¨‡a\P?Z'”—˜ weß8ÒÈ5¢ç=sä£ícùæÏ‰×\­Xn¤¥C.­„I‘ššf}x߇ÏTip3ûî~ŸÈ¨{ ^·¾é‘ä .‚œÑNy]÷$›ÿ„Å ž÷Y_=V¨1Ñ{5ÇÃ×]ÏuÄÕM Ú4”LÂÞ\h_ë ŽÒúÊ/àü^—²gœ%T*Ý[Þ{Yý|@"Mõãñò<ÅÂ(,‚ße&ι!ñuöùy\ÌDìòÜ=ž·ë›jm³ël>C‹âÉ¿c@é‘4Äjh™IàjnžWü^^ô§´kQíDá÷Û²©‹×,ÕÜ~ã{ô–R9hÞ£µ‹£}5µê'»Œu³é¼¹ú%!¶èñ7-ØÀ|ŽaD\äK“ê”°¿—> ð<äyÈ›:ø¦!!jL³jê¸èj÷ `#tí1!ß}Ä ò;u\C’…—ïa¢ŒK0óÖ±Ë7íùµþý·¾Q¬ îžQ w­÷¥¾k÷µéX÷%Ã1+ĺŽ-.°·Â¬ÿ’JÙ5ƒä+##H©u½ ÞªØÒ†ºÅ£ «Òã]çŸÙJ t3–7”r¨DO}ÒïbØ åÙÀjœ¹AüqZ\Qºm90^|…k6ÁŒñC ¬—Õ(xÓ'Oóå§5îOPx莊/loÅýêåçUþì$*7Ù‚À×Û›“?™=øP!Rƒøû‘&52‚iÁ³‰ª˜r×v—.Ö~5iq{Z¨7¬‹¤ßyP:&¨îŒÞ{šh! N7!ÉßõwZÁ¶ú»XpÃCm.É(({2BJõ B@ !W¬Y.0@¯ôAƒ{ɠ娥›köB‰rÞýöý&Él´ãg×ZThÜô›’ˆ#ÝQh¹m%N „HÔpØæÊk8pê¼>>e‹ç«S<”=ëöt¬=Ú4~Žút)D}VÐâö¡Õž÷«0º%¿v ÞT_4Ø"&|mͬâìóÇ}é2É,Þw~޲ö^7ž$·Ûƒ.ª» ƒ«í#Ä«Žv%Mõa@spAÎ%]¬è=ß‚¹Wã*Bî7M `€ ié&-Œ+DÑÒ°¢IJË/5È™#:ºL„˜ü€"l‰$@µ¢ó,Õ$qˆ âÔ˜‹Æ_ìç´ÖÚ7kÍØµäxêgY,`™Íîüшê'ŒÅ8Œ ¿ÂÜ2'ÿEâš©œºí¸𜪺÷Gí“GÊl)v¼Eo8Š-`z¿}ü¸öŸîˉ²^sšU7Åé!bC6‰€¼êYmê¡\G¦ˆ†„$RH%âî°ò¢&hiuPXæ°x9¼ïÜ¥Mx]Ü8£ý,ÏðÃáF"â/‘ ²4Ì»COL3"'òlæ¨&C à`CH†ñh€&{ìÖÓ>U·mÍÒrÌ­x=é©"nqph r?âç­^h±ì@æ=áò6¯ïÏÁº8It@ÜVª+S±ª™Ó«óipÃ?áNW’æ1å\üɽ}¸·j¯µMû!YšÏŒ“C‹ùú^Hªr纈¨³?“|غZ7Ebq" H VaÈX¾5ƶsp«öŸãŠºq¾O“™tÐç¤#µ=ný‘á~ÃÛ /S: õ ]ƒç(a 2~¨k "šé>< ¨:q娺Çämx—×öUÆñù¿Óä¶XT&1ö—ßeéûo™ ª¹šžŸUÂÈŸ6¡uî §ónsÛ5Ëmž:ÒpÛ†LŽô¡µîX üÁ»-¾J¾6!<—›-à»úóÍùs©Fݯ¡«þþÜ:÷Mp1^©³2Èÿrh!"„ „L… Ñißk¾fì—yÞ†¯“¬Þ¸ÞÓ9ÆÀýoõ¥~3j\vBiÔ$ª€­Š ni«Òeç¹´IŸû’ûæbëÉèû˜`?=>n@•möøì3)ëÕÞ^;¸ ›s½wð¿ìòZ6YÉŒròn•c]ÜäÅ)Í¥ÝÐ:% U”KU;1/nŽÜzgŽøáàYý¿õG §ð@ã1쵘lWé[žŠZÍ¢o¨oŠ…áß~½MäØY#ý.eNý4´f©Ò«?ÊÏÐÿe ½œ_WÎkß^Í©EÞ k¶Øz€3•š Ô ¼ áëÄ*†ÿ8ÐýÒ¡ý•LM!Ý€oD\}¦§ßXqa#l0¶ÇÅMJª<‹ÁzÇJ‘l ë”; +¾PÃx”y c‡¶$øæë62« ÚP&â¸ÕZ£–±GÊš²·]ÞGq¢Gtþµ˜¦ÛV¢o™¸âº‹ˆب$ž(g¦ôqTI”gü,@› {Ó4ü óCLSQxe'–(}«œ‡ýŠá%~oµÚ@ŽX•ú½6žêe×ãµVáþŸø#³‚Ç[É5ô_{²°$ÍΘ—Yb *á= h³íª7âUÚõ"µ ìã›Íj6Ø|¨@^»ôZ‘Ê{£ò0H?,£4}[ÂÉöW-ÈPÔÐ^¸Szb3Çðâ¥ç×FOÚ¡ª›–’ Œ‰H‘ÿ¾³· K}“‘œ¬µÿ]ax ªhKºj$0øG„—:R<¡Ë6P+ÐÔãYš)xD—DIôÇ+ÁÄž/´œÀCÛÞ@ Ò!ÖtâDdö!Õ0p„5ÚôŠ‘ÙArr G¨e#|ˆ VÁ7s_»T»¯~ùÄcAjèbþˆ˜—Üõ¥÷?ì6t –GP¹q»^x&LVÿ „O‚ËÿZ߯()BûÛ€+êh@–x2¡C{uý$¿áBélKÅ5뜚øÉ d;€¾lòù2Ø`f" AiË$Âï˜u¼æ0:WÀ±ffví¦ÿ¸áÈóÒ‘®ƒØ€ú¶tîû~x²zY„þqÌìÉ¥#•—ÐF””Q\}ëüR¡oºgo‡²è–ðæò6~¾ye›® Ø"ŠPâô5ç÷ P€[D,¶‚ÖmÁUãõ×6FôýdÕ¿÷)Sù„²õ§aBÑú·v„"/ìE|½,·šñ‹ÛÓb¼8ØëâÈѺ.ÜÇÐÝß gF}Œ°[‚¹`È6c¨ØëFÛ UˆÀBá"š'Uª#_(GÞxž ië%0¡¶—"'AwGîè¶O¯MHô>ìœ_ùÒbÇ_ó³$®#Þ•,öÚO_:QùdÛ…o6™“n¤I½o¢¢ \…ñÒAlæ%P %º~½5H3ÀRëg¹Ä/œ†—Âý1‰‹»—$ ²t}²§÷J…]â Tòyúc$d)âé9{Œµ»O•Ôº5šw­åeh8ߤÃ6à¤Bü•Øæ h)Ît£ø[Ö€6]ï™8ßY2»yXÃÕéãQÑ£$wך¶Õ‹uëóiô93%ç´E±o[8'ÞVøÓ !\B ã&’æý4ä Ê•¶S/‰´--ˆ)@z6'ÍT0ÕZì‚®ràÙò $Y«Ÿ‡RŠb[d/guê3Æì/ "ñ×ΔIËÕ–´ Ÿ 1º’Á³¾V¹‰ôӶȉ‰0¡‰˜9›WâÆQºÝî[t¥>à;pïîg\‘ë1ìÍ” â›÷ È+Œ€àããÌðôÙ§ƒ‰ÙLØü :’ßxGë<\¡"òôå·Ý Ôã+¶u·Ûÿ"R܃HÕï“ø÷Ç•tGæÝÆ6T¸…_zPöa¾ÚÓ_2í¿¬vǯit®ª×uÐbxuxPùx]õ!ý2up DC\äpYÕ?јà„ÿ6#úCY3UF/W_v¬ySñ²ü>¸¨ÓÁ+z3ûÇ–8ˆ ´Ïɸÿ¾­Ó…ôÛël½‚ ô4Ž}Â'é¡L ăÙÒ¸ó+ê aüÿ ˜:Ô¹˜H2. ˜êŽ9MH„Æ/ {×c!ŽÓ}¤¼Ýå*FÄSóÊžÖúZ^'Îy/AXE[BŠºC³uG¦JJ.;¹Žâ€š=ü-¨sŽà-‚Fš¸©~­ª>¹CÐ:U%D°dÅødêv™KµƒÓÚhŒ“R2¾xlèæ\óÑâ•Û°°/‘W¶¾¸ýý©0`{ ºÑ~rÖò§‰Ä¿Æq¸6Sì}–/o¾ÉA·Œl\— '@†x‰ÂíÌò ÆšV(i9•Eé9xcTE/ÚÌ•'T8~^_H…rÌþú¾mz݆<¸N7EÆ‚Ÿ iá”HL4±Hš›–?CV¥P¼Ý`AöoŸ‰Q£îÚ3þY ƒ›e¥Áãd ³Œ¬ZK­„”V§:­–ÅÏA·¦'ÙòÁðàNîÞtúdLå1¾¢WÓäöËÒûîÈY³÷{§ Ü2tIØY¦šqDG||xÏ4p¨ápÂXZ ®$ÔõÎîZGQ„s¥4ŸöàÕ>ËËG_Ÿîü×aÙ_8 x<—%£ˆ sžçë•þhÉ í]¿Í~* ‰o“í5®üÂðÌ9Œ"5Ç‹ëF.ò|›¬~nÚµØú¤+îCŽ@€Þ¯ñ?˜šAó{+£×›ÉFToË)ò‚ˆ‚Á‘³p0n!c°5žxnpßOÛQaæ»u¡»L4Á ö¸¶ ΠÚÍÖXÙ?¬f €é `.܈ptíª'œªà"êL%‚·›å減a‡ëOÕ;üè¨OXÇÙ ·âpJM¥6*¥V1e°˜â‰‚ß\g1=K[­ýû69¼P-¿ÙR¤ñ³ÇÃP>Ràø}³‚€ð ¤0f,Æ^H,Fæy0± sèûÇóUS6æx@,wmN¾¹ ýˆŒñ OôM¾äÙ¯9 ¤âô. QPÌ|Ëä†VGZþ‰•*¤ÓÆ‚ßy?Î ÍšÆ9„gRÙ-‰uUnÞøáÁÉæPcÇÁH?‚c§Of º|Ká’ÚÝ[=žq;>ìÇJí¼€ yÑ¿õÆ©>~sóÜìÍ\ü†%:osþ2eÈ&RÂ|Ì‘ 7ýW¿‰ä`ƒ¥û mÜü â O}üCÌ5BçÁ›Ø„e‚ BÐŒOh®*Ð)0’Èv”´_Zz|×|ÿ£ëµ‡l¸E¶Ð}ÏŽtaË%T88üÃY˜»Ýî}eŸ1Ž÷_µkÖø?rŠC&VìCÙÑbŸ‹¥{¢ü¿[ÛV¸Ÿ•2Eüž1Z—Ùõ©˜w+Š|l¥ü*Ùóeîf1ÀìPB…@–?•_o—Âx_ƒö=¬%’Ú^鬷E…ÄìO‹°T…²¯x7ùë!ÔLGr0d BùôiU±€zy¼Uxi÷òÏ{ëHèÔ’Ép šžâ™!ƒ£Øùð•åêk&ô.-ÿ–ÓÁ)Ÿ JëOÂSoj|FĶ t]üƒÌî Èe<øª™Ÿïïb† .y#Ç}³)‡Ç´=Šo{4Fmèd4qJñxOîNx8¥Ç'œÎˉȂќX¸Þõ vºÄ{ó%ìHƒEæA…8`Ø!#ºÒ2Íæ»FéM0ss&Aå ;‡rº÷rÃ+;"^(¿û¦ùÍË/rú#¬ñ/ÆSÌÀZüO$äRí)jS-Æ¢ 2øŠÈÍ~Dø=f‡±ó Á²ÚPÕÄacÐÁmÎV(u°ÈÛ‹Û¥éªMœ>¦=T¡‰˜Jí ÐÊ¥òªË@uÂ) Æ[MCÓ÷"¾èqCÒn·“‚ú@_¡]##VîIðcgýL‹@>Cp€§T“Õíb6Þ{ç^¥Me„J+êÅ^Æ7/Õ‰àëÊࢬ«Ö‰iM+üêc_ÐæyýÍWåüW'”KüG‡YlCkaÿléœM‹ùj·Œüª“(Ü'múZQ%ÔÕqø{¼Îa±·Vü2FOZp´çv]s±æ”°ÕÝ!í{‰3ž®0 ¡ðMg[–6Bk…Sñ ¡cK…´äl $ˆ¡@iA3mg¡Õ²ûW!’x9ðä@')F$ØÞ[”>½Ÿ#?é«¶?,ND¡õ(âK\Ìmd02õÚH1©°ÅSXvÎ>…HN7’Ÿ©y˜ópe,M&—'~ÆP½ª0 Ì1ö¹®âüæ Ñ€g…‹"D&;t9F‘C`>ÕQ£Yi2Uè£Ë“¤¼*a©§Á¹~Aw¯2ô·Mm3<ïæí{ÀÏÆÿu|m:ÔdѼ+Ò| FB@@F~4sy>},În)á†W<ûMˉ‚5k‰Qaጾ %Õ‰c3óÎÆã'§"4 ÷aôF z°¦‹hzöPÁÀås¶FåCÖ±Go]0x›0†".êMs8ÆÝ';\Þ÷6§[´U¤.~Xëk âÙø¦ Ѩv Lý’úh! v„ÄÐh§rC|ðÃ,ß«ª3G¸(e½›jáÈ<]¸ý^>´Ù_ñ„ŧÕÿûþý…ßå~×î‹fáöbD_/ïkmúŠ]e†ŸÚÞ‰µùñôg;NõšPWIu§;·}ÈM°‡§´i4D¿Mç~Xˆ‡V±SöÅûl,w€ÂÜrÑ) ,;ƇjQ†jFÕ„¡Z„¬¥ ï<»ÙD2Mt¦hö,¶æóý†!Eqlk¶.;ºñ;(öß|òb:(€Ó½ÞqK! P+qݘ1ô8†ÑôkKá‚FPclËLž¶oIÕ²€áÐïlh1C^8uá’óÒ¡ÛÌ þ>C#”éÊâ¡Í’촚ΫÆl·gÆÒˆÌklç'h‚ö]N·ÛÚ¦‡ùdÊEÑ誜[¯ çáÇç³›8O®ýEG[~¾f_¤¨ý‹ Ñ‚X5‘»n]¢æÖ.´©Î6ÐŽI_ý|XjöIá8Ck6c#Æa‰,$RRˆnjך?5ñ`\üï`6ÿ¯/UéØ>)¥çÁÜ·å²ûEîJÍ+vö·M"-Y‡°˜­^ó±ZÍA¡Ð¹ùQïÓ£rœaçZ¶ÿ â¶Ì$S—¬Î¥|øsÔ€<|VBË•pçy4±Ïo—¾‡´¯Šö¿™ä•¢]ð(UvÕP‚ÔÕôãšáÒotrXW}™`Ö}í™ß×õ<Œå¿°¾KÌ޲öæD¤u¸ËýÿõfØÃØtëÛFPHÖ‚@CBH§Èû&=!ç¥~ùH¢é,\AÊX À %€›È=ÁªÊŠxÛO döÊÖÚ†rêÞMȰ™oÔÚcÀ-ŽÛ‚|Ÿ(©·<ÛÙ?T$ÌÂ@(Ç=\/Ü7­Y@3öÞÔ/B ð[>{@™Fš§$aê.‡OíÉY¶VXY›¼œ/ž'Ü®\–ÛOXåWèŒL›edpÑMv®ï_ê®ÇÒ-ü˜šºË¡µ 7ãÔi6{üf½2¥Sê°$:ký±ÉmåwÒÜ4€w %M¼0cûž®r€ƒ…‰¯b°{»’å0!Ïë—Fê€ÅÕq KIMœyã„''_-”±6uC…—ñÞ±µøÿú3ñçY­7@]7mÀîÖX Ÿ$ ,ªëÑüÞ£|4(Mó ŸÃfÒ=!ÕažFÙEå]ÅVz)hÍŸ¹!¾ô ÞÍØóºUC@åŠQ »LõéÝGh tû!â.@Ä–uë4íª@TqêDi9Ö÷ÊDæï~ÇE UßX쪩XªÌÞÒMØm½^‡¹…|ì­,G³Elà±ø@Æ`j“i6ü;;ÏÔC0çBcë˜uW§_ßEwPÕÏõY·„B§Ï®Ø÷ ¡šÇ¼.oÄž¼:¾ž©Ú$=4?k3 ë 1.F“šÿa`¶{Ê]ÇŸ¸øcÁ°·ó…¶L 27èç-t&>ÊÆ`•Q dôê{¯®YM܆¡5%}è!ét±ãô˜(Æ]@¤uÝ„—PÖV§õr2h‹ÛšX}§p?‡äXÿ5Y4e\—$¤¯O0¿ú¹Éñ÷ 1ÇÒèLûZù.z%\‡…Ê´ÐáÔSOɱ˜Úôñ¡D"UOVÊuõk‡A‡Ru˔ìâ’Ö›CiQŸ;é%ã:¤j49I¶oS_¦ÿr8z6›“3ÍrñU.ßgÞµ0<\6ñ,RËb›àB‚·È[ô]CÎ6˜¯‹éË@9Ù)Ϲ鿆T:» ‡CÂð¥L\žáhÄ ë?’à¢x•|ÛÊYj»O™;•†]RJ ì—™&p’Œ Òi¿.À(4ûmÐûº,Ýùõʳ Ú· ÇY¿”)“êVç ù$/ 5ëM%hÃw´ß¶ÆçØüíSHÝc{à‘€×°u¿ó𻄖Kz鲯¡Œ§7ƨ ‹‡îŽÝª×n5oeÚi¦€y—eÊCÀðuð&V~ÃiµÍólÒåÐjq_ú/ow…á^Ž]ºWÖô48æŒC›n¯ó0¯Öq¬0õ&¡…p¦¡ÔVaY¸"µvVž¼é3òB-BµN›Ö-_Ôg=,ÖfBÐàÆû Š.| ß’Ô†ŒRdÖ5é ©Q¼ì~ÚPÅ jèQ°uʦBóS¨w½\þÕFµ_Ú­a|ötLG.+Yú]_—UèvCÉ¡ž@·G7ºÜßç—€(è]šÞ© v—g0ðÏ­?—c3Ä>(ãJ TaÄ"FhqoóðL <îæÁ™WÀ;Ê+&$îÆ¬,G8ê­™ÉéCáKyŸ JAG{|›4O^‰‡Cln!ŽCM›mJüWÝomrsû—iÑ* HÕ°¬‹=PþiY}­‰=[×'5'ÁùhÈ#Ïvµ^+t7[}bß6e?ÆÕe ìÿ…I­ÝSÊňðª[ë!Σõ®¯u™ÂoᵜQƒ'ÁD6ý!ÜÑbeã’ô]wd½®ê£â¤ef;œw5òÑ%ŠØ' òn6ãrŒiHmÀ™6bÈ1Ü(o§]‹p¶ÙXN¦-"úÜÆW ý#,Ãq5\I„ú¯–œüõV6»Ö¾´n¾"ó‡QœÆ\ÜרÿÕAõ ÿ°¤67Þ×H××{T“bÕD%vÕ¦jû!…q.ËŽ ‘Wgø|ˆùÏõ,JNæ‰o¡ò,°Fè‹–»Þ=ã£Ó,´×ê2] Íç·öÁ¶äÍPðÜo¦éZ†&«H‡á4cãTTf׿Øã‘®÷Z ¾×E¢|7“x$g´ÿ3ªY m‰q¢a ú…ÃÄPÀì;žÝŠ2ˆo¶‘Ÿ°üÆÁõé±FvÕüÍ‘üd_‚¹Pûcp ލÍìR8µ1ÍÞkˆ#Ó€.pØTs4­Ûǃ¥à ËÂÙ¼ŠqyîæÐØ[aÎp6ÉÎ/ ÚÎFxíÚ÷Ø”þÜúG{ë kÃ’Û¸í‡/e{Ò0ˆÊR>y©x[Z9CL»V»Nàv0[#è!fÒ ŠÈdYË#ÅÀ)Àvn)‡ñÒ¦laùrwG•€zͳm½²Ìá™é5Õ½ wb8W•DèÐÚ^öø‹§ëÅÿc`¬„M»´ËØÎ°Ôèa;g'YÖ3~a©ö~ áž ©zKÔ:‡Ô¼A ¨‡¤AQI’Ñ-Ôl룢ÓúYúñM —“átÌ:[”à'ÌÖaËçyݪ®ú›çå{Úç1@N,YÝŸù¯vžàõÅ„Ië^ãÚj¦O…·h«Uãxr~©©óÖ·—Ξ6çô©œ— qDBrßHI¼ƒ¿õÜnz(Δæ¿Bu_êi+[O½V9Wònª)-ûjȤnÃS/°ñÀ&‹Ó¢;<»ÖPÂ@šr?&cî±Øiжµ Ûè¢] ôŽèos§{ûŒ›€ûë 2!Déæ HB+Òâ&j”Ô¹Òî1œ&é#ÌUgœ÷½¦ Ü*:5˜„èŒVÛë¡I9¼ÈºÖÉP(TGÔ ¸õD$²w¸óÄŽ¶¬RQÚXšËƹtCyMŸwA /RG³úZêr( º¶„0h^ë¢ÃÜšÜËž¿ß%ßú»½OÛþÎÁê·NÄÈ©–"‰7j7ŠZ{hèvå‰ 1³Ë„O+OPìEö>ð5R”€ ˜¹ð(é¡ÜYyk†møÊÄe³Ï>.Ø#±Bx`Žè»¥Z/3NÙüV>ÉIYV¡4 9½å©d w°ÐA®ga˜p½ØEM,!A„<#½¾ÆÿÉöYŒC… ºHóǘÁ"Nã=CzÔÇ¡Ïò?áóìžk aö‹5ÒM]}±‚;²ûÑSH›°…TY“Ç5ï ‰æÚý´‡úŽÐÀ«ÀeýZšÿBˆ$Õx-Fô_Ãjªóôæ£>—Ó½ùÆà¹<_ßnÐ:ôòœyžD¸?ðʱ#—gölWÐ#ýífàO¥½R?Gß²œPçä;‡Zó@@¬|ŠiÂãÀ­Ë÷Ö§׳›¯\ÿÜ¢ágžð³±zµ !T¼ iº‰—âè™È¥/Ê£,Ó‚‚e* Ï^Ö_Îâzf:½÷ó·Šá×ÿ €=1î•pÌÛ_ð[;Ý›ê“Óˆ~Et {øbaBgÒÀÞП<ëî™3çcH®òƒ„įfpyÉÔÍèIÒ]I"šd…e*'+‹±‹Ø£ÿ´Þfœ7X>m®Í†*š<ž½ß±\ì^#ïKs\¨ß4cY–rC\EV }`Âæjç/ã+ù¢„¦ì d±i{XÆó‚ü îÝ]\ë,fåb7 ™rw虂a…_¿f¶2I¸I÷ž,¾?ïOë%‚+½Á©Ð`Q>¢5b¼ì\Ý—Å6AÙŠðÏMé=Båß÷t¶?"Òyž|Úÿt¼¶Šag,«æÊp'j¸œvÒ$«n DŒ‡%tSÌ¥ßWyemIÝõÄZq,áÂ|~ê³ßH©›²‘«VP"Ö˜WÒòÍ@è«fñɇ 2O"Ó®ôÙúÒ˜¢P(2uÝí†Z:ýÿ²»D&£œ¬&²[2¯ÏJŒ=ÜËì‹]îS=ÎÖ¬ÌG%sñ³‚²¦¸Ø ë:üÝ`pœV,ÍYž¤Û"í›ÊʳꖦvIðyw tuœ²Y‹…O.Y Œÿfj7T­[ YÉÛ ÍP ÐÕ¤ÎÁ’àŸÞ{,^X¶Jb†+ ª®J€FaZdÁºë™“CÃ7j¡,̾†d®Îò,ÎÑ™¯&üÒu^Àö/Ép«®¯JLÇKvemdô£#3Xà݃·„% K'CÓ!Ë!F+Ô¯íé_ÄÏðø¥ ÑÓÓ¦í`Þéñåi[ä%ß|‡`«Ë¦õšÃ VÍÚ• ž›·r¶Sîù'níw‡Ráò¢P •á½­_^ÑYÕÑÿµ'……öåŸr—.íê‹û²­OÔÌ£f/æ]_Ò t€ƒòú×P‚7ĵ@9P–&‡†—•Ž.##4gÓí–¼GäsÌ"<8`zØ'”Pœ\KÊB¼A[ÀJYj^T ˆÝl–$iA)ã»§óêd’ÜÙu‘™‹çùW’‘ÔÄ”¹¯³6µMŠ®I”ðz$„ÊöÅÚ¿ÝI,±7e8G[“F­tÇä®L­ýÙS\¤ÄQ£uØÏQ¤ÙøßXû­ŽÎ;Þ¦ÂÆý‰.&QÝ&ë˜5ŒÏ5¡#ŽõßÞJM,°šQ÷{ìÎBÔ'LNòä}N証§²Ð·DŒÑÍg|–˜¿Šãã¥ê‰ÿ^ÈZü'#_~Œ’«ÛÚ2wÎ\š{‹8ˆíb!œäuî‡þ.óûíþ½Œ‡¿¨±uy}¡oœ£ñÓ¤¡Ô‡‡°È|a*ýkúÈ­Í ^¸h.S>*ð?§¯ÙﯴKÒÕÞÏÇŸ4ŠÆU ¥{:K¯Öǰˆln²Bþ HJÞäÕÒ«9õz怤Ušû¼DçƒäEËæÃSDú¤ÓóΠr|_?”mvi# }|i Èµí¢ž žºktŠ™aøž7EY.˜4uúŸ.Z±¸Ùj*ã”z¾Ú™jËOÕß`íõÝ4™'E×ǧ.zÕäðD\×T½a{¡á˜¤;·—Fª®¿ š[p;â•»cÊψ»:øá¨²Jø›î«)ÄêÙ®GøÛë@ÔÎM×W"ñèu²®äˆ• rÓf/JÒ Cô}ÃywUD¥÷Ç^ªÐé[€×þñ¤ãLN$ñxT+¸SCÒvYÆÏÃ÷¿èÆ,ìih*FÖ8Qõÿ¿dÒχnfKR~qNâÕùGÛœ’S^×éºìCÉH¯Þž§c&Œ~…å­¥Ö'_«ûu‚ûÁm·§‡½§bÂÃÀ¶ÖÎg|Í-É¡ø&å𞇠Õ)ÍçGÆÀá[©Û8P¥N%½5£ˆ€ß÷¡yn#s¬Iw2Æ?hfâÅêù™µefPf?týöz¸MÕaTÉ}seþÜ«ÅÑÔŒ§YŠø< óïì‚lÛÍ[?Éq,Z· ÍÖ‡(ÓýöJkÆÀŸCu¹NÃnMůÒA›Œ'ØŒŸA­[ñqôÜ^e¹*¥ùÑW{§{X¨ˆmˆ¤;Ùž~<É>Tկ««9”™kÅvõ–ßþlzñY°?êGv—m¶Ô*¡~Æ„~hÁ°ä»ñ×8ôéi|RŠÒÌ}y,ó´ÿ߯Zš'ÜœL z/?‰ÏÙ‚˜óíƒèç±/ôµzrÚúƒñxeÚÖäMÕRrÞPf5y¼ü.žãùk= iLt~·†)¡Gc¥Ê¼Z™•‰zù‹Â‡”Oú};‹@»wö¼ç{¤É¤dÄ·m¨í–Æÿ“IžŠÿ{$²$µØã|ê5ò*ü?ØèšqW‘¿aJ9Mì5ºÏŽÁ §9ëêLs;ÑØø‰.jhM²(:ôÕ?õ[šÃû>4‘®j­“Ó€ÀÃðšMe˜¨K}HJʧ嶶ÂþãëÕ¿–H†ˆÍL¯Â¡Hì7z‡Ó)jHS(è8'Àñ« v½£ÔêïâR©] ½Ö˜û’ôz/Nx³yݵW!˜Î·"êLÚ«AÚ6þ|µµ€¯:•·¦+m ý¨Âï&LÌ}2¦o@úû˜ŸøtËðÈ,£6ßv5”-ÕDÕ»|9H’yÁÎĺÉþ;_øÕy›&– Ó=Û¯Ì:c-V[2é²Ýð{yÕ:5çt¶k§1Aq²›AþݪæOîHÝ’]1žpqV… Ôäkú¶O\>fÚsþV3õ—v;¯ýç—Ö)Ól³Ö£¯mɬ•(à#šn+æa²ëùÚZÎÃà ÚŒ7H²~jÙÏ^C œŠ+ºêäÇUQüOùñîS²Éd²þn¿ 3“‹tÉŠ¤Ýh4Þ¥jjœQ¢ûîY·™ß;f4¶¸Œ6Æ%ƒÏO œ©œZ ¬].-Ø[ˆï¬^wÑè° J…ië-®¼”íAìŒÁ(ÿšT•>+Z-ŽÇRU“d3˜Zýc-ËÞ÷ÂmH¿©Ñ=ÝÁvá{y¯¬¶BLìý{ÎÑi;Õ`ÌŒNµ²f›S±‰A0 ¶žEY™:JËÀ°9©Ã’rgôí;ç0ô3»Ò3{¦<»ËüÇõþC ¶·I /›{ÿÜda{ú:ÒZ*”aZ*ZÓ‡Ÿ!1lw;e­Ø„^øïߦ“Ÿs%M÷ºÏCA‹ÊyÆXý¬òÕ+ªkËÓ„C8·¾yÞ†ÞIì^ÑOµÂpÚ9œ‡:×öuÑÀF÷èŠÒ÷µVe¨Q°9ï 3&¾WíDx–c’¸öÉ”HüÅp¢-µY÷¶ôKGâ[Æ %vüÖ…‘N#&K¸@b¹‰JÏ;ÊVVŠø})g<õAŒé¼c…´­Ó…½—&4v~^ x¸ùH7\ùÒ2&Xn´f‡¢—Oáã¬KºóÚË´uæùXxÊ(4¾`·6<·­lÔ’Y:[o ËíD°Â<Çsåäû 1H_]²Iõ÷ás¥û«.ôv¬œº·f÷i^KY*-‘¡y1fõ÷_k)[àœ |äVŸ°ñ&L$¯?çNáë~¡]IE$ìÞ™.ÞG;ÿJö YŸ¹ ¯èªGí/H§}ÿIÓÏÝänøÒV{ÿ_í4n¦¤/nöMQ]YÁÅ3˜y0U‚«é‹8ÒÐxÚ9>;_>U´’:—üóUÒ-Ne‹$Æ5+c*“’§­Á»éÜcÑ–û{qòñÐÕÃb3ô«aÛV¸zßûé9Ï(ÝÏÝÞHÃ^©Óë'¾6Qð'Ié¨õö$ôLBz#Éü˜ë¿å™×Xø²t‘Š1=Ý ß&“ºéw§Z~Cvs.†ÎzJØÁüä(Ì+ؘÙÙÞ‹ŒÖÝïy9å!¤Zò†š-†—Ï¢EF®âÅ}!üÉÁ×s³$¼¤?³”“ pï²{]G‘ÑÕNJÅQ}ŸþÃbᨃ¹’0 ”}þ$«ŽÒé’_ù>qù÷äã@úO}ùßT8ºOÔ!sÂÛKÑY¦?ñð+öݔNPdçš-Ãèšqë_¾tê²Èû"W©b zªrøžKü}“´0œvœÈ/¬­êxÙÔ¢.ôtý6Ê´T5x«ïLèýÏ6=η©ìŽÆ‹óîš,3ŒfVÅ&lduìËDy•‘ ‡Œç®?È û6, ˜¦RT:Ó¨ÊT*¹4©Ô¦7öõæÉÍÞª;¦ÒµGÒ‰TÕxÁÕ¨•"½uúS?Ä7Îpm4—±ßmÁ`£á¬¢Ù¸€>muá+§A‡„¢ƒ«µŒLü6þlÖ§Ö$,;Æ¥oÂ8à¼=”Z ‹mo;Þ;jdsc/N¾…niW*#ƒoÚˆ©óŃä¸Ê«w‰eó“¨é`Ø›,½ÈeÓ|·ÅLÌ<Xž‹å\ºíQÕVðuš’&8{…—}7YŸ?ƒŠìû"z^Gñiª±‘úšœð&šýTvo¢’(ý¸…¬ôgpOÇsƒYo°CÅT«Üj|·9讘èfÕd#\çš­DyU m`ádÿÆ–Vr3Ì\o¨Yä߇ȳÕú±u¤[Ka°a~¯n¹³‘›)-ðÌøòÐ b~náeëBÅüTÿ,°Êzùžëß~÷BJ¹ùïqɪñØî¼ ¬4‘KwÌçtiž4ÇšãZO¤Ò–E\ߣªª`ý>ö¡Ã ÍÔó?~Þª"oŽðãðØão©)ÏIèOcg.“#óaçæE°Dy\¶®8È9 ÌøiÖEÌ5YÑniJMÖqÉ#ÁÌ»“hè×À@ÅEè¬0m²ÓÃ}O9ìTàø{ÎGXê’M£ÃÔúò+9óßyJåSwë ×@%KøXVè¸óàð¨9¬²PÔ‘“³W®¦Ìß¾¼tî&M-¾ëÀk½p»Jû]9Õ®–(:èw}™?¾q_‘ŽŸ¦Düb“·ìñÕŽ|Æexÿ½eÁ[Í¿ù~ ¬³‹Æû‚õþI n)å`½‰+Jÿ.gåÇÇ·êHQ‹ª²ÇÜÆ"$Ξ+u@„ÉB[/wãG.Œ‘ìüÉŸ{¹Þ<Òx^Ã;·`­Ì*æ7S÷®ó¯¢ç´þPQ+×XGÐß1¨Ù•½4¿fdµ®?Y^§‘¯üîÿ­uÕõ©KZ\ÚÈÓ@’‘'µl°(]PF_Oð…íÚ¡;|ø†AîWÇäã;öç] )î'Îñmq\w&åã®:zKMÊôŸãEþÕ¢‘¾Ü!ŒqÇóapMá´ß =2ŒLÜ}–}­–•M_ŠÐíð·|Ä^×»FÍÔÕÍÉû#ÍÅaw£ãÎo…¥€iü’}7Ò¢ÉÏ÷æ—]±¬£8ð­1e2Âßéôz= ñŽš‹¿•šr+ݧÑö33ÛÚæ{eÏ1)Œ2÷§îƒ!ÕÈ„xÛ^V_]ÉøâèÔËcpj*æêð“Ô—+ëõß O0iý Ϧ%èê¸Ôçx ðÑí¶oãøŸÛ­)T~jp¾œÏ¬´¼øòNgkfý¡9ËV‡¯NœÓ3K­9ËEÂðþ@È%¹¥ÁžV ýmý_®Â3Ùª·ŸÆ’õîÄ´@ýæ3b80³—st׫?êÌ~ÌWki4©ÌåE~*œ¨»å€¢¹ÏõLa¤¨€*yå•x¢&pH]Æà`S89ì]†ËmHµ‹eû G€êgÊPŽà×Þ‰o–SëWé?1Ú7àmë?Áì²âáÒˆ_¬ÆûAWdF µÏÿyOMôý¬6÷„¢, a¾™–Ôz½©tÄ‘ñšŸ¦­þøt:ßüÜ÷ÒW@P­ü;ZK°BH Nõ®MEnû´y%3âýiÊ †ñµ,š—9VOÍ—ª!£ï÷,nY'ôi§û[\TUŽ;hzª¡¿DÞ~!O±ï=9 ¾…‘Ù$ ÿÞ| ³2Ŧs*êÅþöTê!‹xU´–U,Áõt‚[<‹æâR6`/©)×kX'“‘ÛëÒ¼Þ"ie÷ÝvvÎ$a“¬Ú5?å%„ƒz¢V·=_†®8¾uož¿ ÈÝ8×û3®ï]\wôsïØ¡ ò²æNúÖuóñ* Nò”õ¸ýÞä{=(ÁònHv]š<ÝÒÜ$ .¡9 Èªõç,WJþË×m:DÛí»„'Åx9Lƒ¶ŸÂˆþs¥ÆÊ“…+jȳ¼~¶²dÇ©æX‚‘ïJ5u~¹ÄcoßÜÒq¨Úr×>èt|Îß>º¨±S#Çʼn¢3v¡¼Œü^QË8³$zVü²—/’ó¾·œÍiz æ¶÷dgèÓßL‹*‹è˜Ë4´/IAKWSúX…ûNÙ"s%¹Ôðñ0[.ÆáBá6'20s|5›+1ïîy†ÎLÖ¿ ïHÓüNcj=ü j}äƒ'”ˆî®à²u á¬Ûé×í¨U®º¨…±ÇPj"jºÆ(çòœå˜²Ná1¬ÁÃy³ýuLó{$TtX1ÄÒ\-¦8Àï{ÔO0ß„Hyh~ô<Ÿ©6¤ÒW=Ž_—˜š­÷‹°pÏmóc/ÒR¹ÐÂ)3eÉ«6é±fÏsþUð <ÓÆeë7úz\’?¨¸ Á!´©ü1Iq 0#²['7óEâ=ˆåçr£ý»Ï³dáj,âU=§‚3€/X‚è¸òp­±''ºi­Ñèa õl÷;*÷CÉ,õÏwe…7=ùªÆÂ¤£×¦rG3 `Q˜æ78¼g¥ÿmįâ=jZ™q¼zlR ý«äÔ;WK¿Õò«H§ÄlÍkŽ*è´}wk^’Lϸ¤˜§$DYeh$€ÇÕ*W‰WM' „ª}e‘ê Í<Êhµ”µ-aO¹Ð½8´¿¦'1ÈÊPž‘ª¨%¥©ê&Ö6 3HR<béèGA019c—G@2°N{fÁjì¹ÒD"Û7‘Ȧa`–@.Á*ta!9 0U*”#hµš½‘]Ålï#9ª¹ojÍ+‡i l³Ñ_ù‹–>ž@]?àS1nÔch©Ùë7Éõ¹.¥AÈ€ׄ?}O£Í[À˜$Â8²˜ÆÃÒâ‘PéÍŠN§ÐÓCð;=~¯IåB¡N÷ˆ~ð4˜Bˆ{Zú=b6¹Ëåz_ü¸Õ(ÝÙdôœenBÁzéçCH€’¡Q”šP›ë£·J\„oœqTÙUд 2)¼Äl(SŸs6äÅŠ„~ËaH|‡L¤ÿ¢_õÏQ@ò¢mv ”hÅÁBéä169Y•pD|¤4&O>Â΀¤à—§„âB$‹< ´à<ñŽa3¬BÓ|à²!"Dp@0D€‘d BD„‰H¤A%H†D¤K"È‘("‘ JA‘7O¢âHIF@Ë‚ Ú x¦p_@aŃ™¡>ŸO8–|A!³ñ’0|Ú d‚I"ŠA ‚,€H”ˆHd`‚È–O™šš¯–kòF2š#eš„lò ´¶r¡ˆ#(ÆNÎà;!{µ*9mÿD&¢¬w[gy´ƒ—j0Žëô?µ–¢)ÚÌS‰G_íÇ"XŠœTDîß…+õ«ö¾û¦‰8,ׇËHÙ‡€ëø&eY“Þv{}`‚¾ ¦¥âÓ¡þÕ䣎Îò ‚A2õçG­· ˆ÷©Ÿ]/˜M =9\B Üoœ#J®¯hÖIEÁAåM]ÇÑþ½D?ÝU®DK8»;Ø>ý OLCýaß–è¬ê1u¼¤yP$¥v4áŒ'£8 ÂcI©yE€Ó‚mDù²ó8 ”]©À+o™÷.›+³esIþ9K™9ä¡…Ü;ÎvÝUÃÉ=Nȳzõ±ò!†CG÷l©M½àˆbÔø¡˜<þ×+l£«ŸÞÀ“þ(k•ɪ´Ð{ô½k|h—z×cx1Òo ÷ 5Ήì 'Àíš㗢l ¬Òõ¬æñ½£r9„憠ÛF*(ð9ëXË`?ƒsu±Q„ŠÆ¶o|“ä›7Ó“˜oÊ,öÝÃIÏxýŽvïŠóöë×~Õ‡µ‚§FŒrvŒúî^Îð#¿Ü.ÿ VcU㑪P«â‚òóÈ0ˆé8&Aˆ—ÄšÙ"**H tU‚<°„ÉjÉ‘hɳ´‚R© *ôÀþ8†w*IˆŽß-Ï‹ïïúÙL ¶'s9”C䙤7˜bnÇ7._vCýo{¹ãþŒ½‡sÊ^@U®-K:³Ee×Îm2¢(W=N$m³øÿ—÷kí°%Q“VzË[%_L••™Ê¿â‚;«¤…RŽ‘E¿í¯$ÔfKߥ×Z]œ+ê™§x´‡’…È¡8q°+m>þ;«Ç9?¦—žÁÊÁð¶;ÛUP­_ ŠŒ¬Ö©˜¬’TH³l‰¬Å¤òĘVu¶Lƒè­B2 Ù×níM2ÉCf¹ž‹µÕülßFNm’º]}ßéáðÞ÷}=Ž3ofGkq[(¬ÿ 1ç“'B’ùrà ñzb¹?ìùl%®×\§Â±™G¡?ºÑgÊ¡â`û÷„ê|jE9#ÙŒÖ𞆺HO;®´ü~Éx 6O1¡/åIÛHê’ pXLp©,IV;¶++}²¡…øLÉ™’±Ž …c¨d‚,«H ¥($Šc2{ÈË­ùÄM=ŽÔÿ¿ëÎmöü0ÿâˆqm'+I⡎À”‰Ó*ÓPÛ•á1wq’žîÕÉ‹ÑyÜRá9Õ'váெ‰³^áí)÷f gøìK˜µ,U(ÅŽ1®LW ëÀ>ö‰`ƲÅ~mQPpKp7kB"ŽËÔªØÊ‹É—3ÂnÐG Ý0¤,Aí…ÀÌÓ‘8lÉÞQ¹A©uíÔ­*éÀd›ÇwˆÚŽÀ†w•b$|bE…ýíËëPA•*¡pY"Ô²id øKÛ{´E{éaÛ÷íן¦ð”~¬I¿ó…Ù›«X)[½IäÝå*ÞÖ‡O¾ÚÊ|€ Ãe¤iãü»¸ï‡€²Þ‹ËwóyÏ™ýbGî#§ßÚ=ZGÈ4g9âÏ šJâA: 5/ËZnÝþÆQÓŸh Cä`g8(Y`œ ÷gDsc˜6Ž\ómø\½Þ}$Ù:,©¸*†´÷öÊœ?" ²¨N‚]4M£Ëϼ€¼à ¹>=néÿQæ yÆxá'EçG›Ž”,Aäi ¦Vý*¿/ñ(kî€xÞç‘r3#æ‰RÝ{ŒÝ뀲À’·‘Da1ÓÎ÷o‚æè»³²ònÃΈ£³êo—ÆûI-Ć€†beS¶™#ð‹ºHºX)olWl,(Ùovž i"8ÿ{M´0u-'l¿°·ÌrŤ”4//ݽœš2Ä&4ÿ¾‚X4Iö¼g¸±K²C€vƒ§Q h²0 K£C‘à„=Af<¤°IªE™¿¡]‰S¼=Ñs€¨à[€3l§ÒÚl—gŸo@ŒÀ²ÁxóÈŽ›lÑCXŽô1÷N%vr`Í )€Ä`—‘D³^ƒ{G€âá?¶ ]ÿAàA€¹¨wb1<âuE}þ UfÓ ,¬ñèØø}d\|±2 ëž ,”¡$ññs6 .ù¢&3rñfшÆéüµ84ôÄ PœR<¶äžúV¥®”Ïg‚~?2´ú¡^¶Úì‡7æè­¬ƒPÉçË=[H†½½|eš 5ž¿üÉ͸û¼qibnèu $ÄQªŒ‘ ‚þD<ø®>Ù(-Ö ;1ŽrªÞ.N(BŒ†Àzq ¥ƒÒ ¡Mô„$ `f“ Ðãs¡÷™ ‘I"‘‚I#ó¦('àˆË3ψ̼˜‡aµ_èžÇ4IÒm²>>+¹;üãÔØ×/zñ×mÛø^CzkTîæÿ|Ù_Õ?ÓeÈ>­PºÊ*HMšÂ¹6:"lN[ºs58‹eš„—,@¦°½’Ùô˜âÁgÁ<$ €L<Í (쎭׸@€@ D º9Öö…# ˆÛuÝÕòLñ[K°—[Z¿P­ŽR'‚pbdUDE'éuÚïëß–»GŒÓAþÏVü?´ÅÔ )h`(<›½–ÈÂûi’À€•¡Ìk.žNŸçy£‚…ÌìËœ§á!@$‹›B®•€«Õa€I®È,Ø Ý’Öü¥èYƒ4$Z數7#AKAb!Å€ˆ(Kè*Ï%åIÕŸ¬8P2ž `Î ^”¬À ä·#g¥a MÀ¨bŠ1qÏ«á•4³Fu,H=qýŸBü­aêc¨A²«®«=>d ÂoK÷ç­Š;æ0`>D¼ ‡(¦êØÜ`^Ñ¡¬nCÖ„BlÍÀ±¿–ço:²K– «¹¦ÄH¾Q•‡šô»ª6VI@2IMüÕ”²ë;ˆu3ÀóöI³?ì.ê'Œ¡¨>§£n¡}}ô¤Ý¶V£¥p DÁ™wá6±#ÚÀL«²Âþ_ H¾ªÒû¸ ðsFL×1}füO<?¼¹ï|3ëD±f1À›˜´öwÂE ï*±{»H9Ñz¨Â µn¤ÞýŠH>%‘“лmzØ}ü;&_óë5= ûÓ‡6“Á7ÏT=»Ó\ëÒü›GjÑ=ÜËÑ-7³a›uŸåéØÓ"þôîù*f¨ ;}>n6õÔvûy¿¾Ñ`bð`„&•oÎÕÙƒ5’¢¯ÂÐÅ?ϹŠì|xïj0@)]³ñòG—20tòÜf´ !‰‚ü· YÆ'é×ý~ƒ+ãñ÷œÆINĶ‹``J2nâ!·ú†øý’µgoÑç5?6•új  Háx @¢9&„…xŠ.ŦnKieÇsEjýÐIŒ"0GÈ Ì`„`‰´Æd 4aÁŠ“ªdƒ#.º !ë¼(»¥ª()C,EP°Ý àYOrUx8 -% çbç3žrÿ\‰³¼¤R4q¢Eˆ²ƒðI"AA¤¢§°ÃÕXp‡ÒU|Ø¿ú§‡#—Är%w9¤4ÙC¥·ãˆâ²rTŒÅYiÀ啨ÔW9P5¯`oµ»ŽûQ)@©F:S> imJÒ~DáT&–yk± 7 þq=å…pàÏâôôK_3^´é‰%î£&Íõ;›¸<×—äG4b»ê®Ül¿ž}2?ªguïÚÔ_/1.*Ò¯ËtœŸ²§(]B;ù êîý_ш¯_ÛPƤñAƒ<>?*P3ìГÁ-ñS[H@T- Œ­$ôÖ«5vª°j@j;P•i4€x7¡À@૎|u÷¸à9²ß’ ÚÌ‘~VÛ®¾öá⪨%¸¯ŒYÚ0s–åÔàæ¯¤=Xjž¨!‘…®èsןsä 5ím˜õF]\cVW>ý[ ;pËÒÆÝ~©<ãÃi3Âåú㤆^m«¯Ü:Ú­Ô‚H®ZÈõµLyɬè‡6Ì<^ òLx@µ@|€}@EÉ Y9æÖŸO¡xc<ös>ù-—Bû©¼ú¤æÑ¸"Ä,4†›A£[íûÓ¬ŽîåNù8ß÷ãǶÜî‹HN†}œô±sè<€d ÌD™Š^‹ƒhCÉ|9ú[ï9@t“¬U–A"É_´ã8LTlÈ`&ÏZ¼àg»oØð¢Ê@Ž¬Æ €† ÀÇT¬J"0”ûóêM3ÐÀÝ,¸.Ï!-KžôT5ßs*óïîÂâ=Ã5«ñ»›nå»xmïÈ`ùOzŒ43s3³@é—S¹ÀÓbýC_ cT ¥j!ªl~O•»»Òœ‹?ÜMH&oÿz°p×_ûL%žÞr Ðà ø)·ç=_—Kù£!ï'‘ÒsAÎòC‘ð×t_þÿké± I¡£¶0jƒ¤ßB©£—†‹ëPâh~ M ›I+åL/‚™ÉƒêB¨ ¬Vòš$)A]Ä⢩ұ&xáMÅÍ\(ffå&APÌ„vpÖkI’(‘KÁÄ8:¹àÐTû3ညs9Ÿi eÇb‘ŽB¿þvZ®Ûiª÷Ûb.b“CÌî"V/f çfN@}Fîkˆíºì¾§£Nèƒ%³’¿ðôˇ›¶†Û ¨Ë% B0…Æ'“­º :£Úöûõ›ê–Õ¥E`(ÞK„áLy9Ò<#¤îoéCsÔ¼.8ôÓksÉ—ßV£ê!@î×Á”¢1ªö&Ä0 Xdɨ"(^IkAÞV¹!¶ÝV ¨=²iÎT˜&@ŽZM]JÀ’Ê5!üÁÄ6úÌRp¹¥ËÆ@[«Ö¿jõ§§Œ2Æêá»Î¾(þ‚ þÀÄoVåÛlFáænö膂>BmWÔõk× üXI’ ÀLah¹KÝí0ÒP3¾Ø`ÊOxR`†ˆðÅÎ[ó&vtJKP3ÑûÚ7·çeõn3ù@ir¤wUFŸ3‚d%–䙩¶­^µù¥ë]óìÝg§§ùö~eå3òæ  H•CŒµx”Á œ!__ì…Á±* UX ÌT’Ü|¨: d mžµ–1ûxÝ~ëG!b—*ívËØ($)B€Æ1Òct75üÑ …¹@¤!žóO^ÿ_ÍcøÆ¶,I á±om%Tš Vv™€;„-?Ø.±6Yo&#+¥¤ÁIæ2Iåßhä2ëR¯Hò6š VéÿOÜúÀm õ›v±Vx¨E¡ÒÜ x8‚…V„«GÑûäл–§tí!ìrR†6j…Wa‡~²ùë¶oÃdE$ŠI‚D$ ’)$‚I$%PL J)’ffI’ Q)$HŽ–yéÕ¦¨kûDq‘h5ÿid`‚q½Äºõ=CÆè¤ÕÀ2ݲF;ìPZn¡V’´]›OÌYtZÌö—튬¢ƒ¼ÂSˆý8½ü=[§Qˆ ±ˆ‡`­à"ø/ÿ’@Gmlx¹ Q¯Ø#Å,Rí0Ä‘ánl¶é© ``‘â†9‚ʸ%‡ú²Øåe 4?fk &>àí:ª… åM@ׂ0,5‰]wÕ—ÖÀJ<”1‡ãf-CXsçoJR fû¥wú˜äò•¦’éƒwèÏx2Ù°^"î…ÌQ´ *‹ªž0$ vokDôÁXŽº¶‘Z–þ8Jìž‚¹ÝêóÃÙ„ÕW»²{-ÅN‘%À˜J[OÓÛiÛÒtá—G“PDd `è8p(‘ÈÊðò o@e˜ðæÏ/E½¨îhž¼D‡žfÐIabLU³kÓš2@3Ñ…üRw8å$’Dò섈úدÌ9Ùñö×µ]‹ñƒ5$c.Ç¸Ø vomÉÖíT6¢û'„â#þŠ:ß™¾Ã[íÞ=Ž–²e4 —Ÿ«8J!#ta#ö J’’ƒðg<[7„½æ‰Ôx`K×ïÜsv]ZE¨Ònd9Zü¬Ä÷Ÿ=Cbm- ¤g-ÁïI¸Ñ®è+y¿Zieö4› ½¾ßNÇ“øÕ'¥jÕp«…ü%Š{±@äýJˆÀ cId”æÁZi¸H@!œZ۔߅@]6@ £g e!6Å¡`YÉÁ¡.cÑ<ß;µ×b1ô¶™¬ÚßÙ[~¯(T'&ƒ–ÃgÑa3C­ësÝ‚Dwì¹ ºÈØ}l܇•Qä½ ·'÷pý¿Úê*ÚE€@qúš—VÿÂÈeQå«zô ã!•’i„3sÇqì®bÞ¢,V3…±KAž`ú‘ƯáoëccúbD;e¡†ª³K”ù*;ݨh‚ÀGé ÕÓ›r¨Æ@:”x|(újÆ„š9ô”~P€¡/½‰ô‘è!¶Ì´’úòÕç²[3¯íœo Ï6a6SéÀ!½íTµò§è~ÚoU¢ÎÇn£fÞjfôr'BˆdF¥7ˆx<¬O!*(Ž"Rß",$ù´EEÌGnˆü5¬gª’‰º´„E R$lH’@r6”rhyê$ê‘úh: â"œ€Ê:0‰4 DM¤Ñ eÐÌÄG!ü$Ñš´ˆ>¢#b ‰>²ï@ÏQµË[Ä‘F ä‚€"JQ‰Ä#jÌ+vÖj³¨Ë!Ý>Æâ±h¨i媲S¤/ŒÝú5ÇkÛ¢ÒE®à]Æ vŠ8É WY¬È`sW;ç?«…ˆÂpÿ›XES§ôˆð>OÁ˜q %%Òµî…|žÙ|å2S6ÊïNT/zã}™ÓWkÍú-à+(‘{ÀP]°€gLYx µ^÷HëhZ#…³>Üt¸àöHH¦/Ø“ïþo6,JÝxýÛ_ë|¶öLr„´]>?;¢¾ú8cr#˜É‹áRéYØû¾Ý¾äw h>S·~€Öّݎ̽ª¦98Ôå¾Kê߉ –u’ºÐí¡XÏÀÔª©t¿Ð´DX‹ñ)ÑÙ¨îaê™®Çýîq½*RY‰ÝƒR}i•úvQ³GÉý6Ñ!5°Á‘ñRÔC•\×ÀmäT.káZjßf–’#ü×ÅroŸvâìí®rßÎh”Ýt Õ`KðYx‚Ѓ¿§š¨<ƒöÕíä!€[¥Zùk,sQ>ž®ÍíòJ¾šÞñ ÿÒaUœ^ï¼øÁ Açÿ  Ži9¢³E »Å±¶þXa±ïF9uŽŠGþ¬å9Ñ©Óß¾Ú¹áT]𱵡’äÙןGüñÿ^(*±.©ÿÆ {ÂŒíÃíU•8ÔJ ka*Fx²¹ã ¥M}t=E0#"u÷ÈבÞ"@‡£õ΀°K¬[@W×Tµ^Ä4ÍŠöêŒÃA¯ÁÐìr|¤ÅØÏ‘²M‡Úšõ îG w¸û:áÚF€¡¾e7K¶õÌVKâÜþ9)P,Î͉àûå³!¥Ù~ã —Lï(þ‘Ñü£Kž ]g»ž_ÓI.MþÒE×®ßy˜­p ЍE‡•9†§é^´³|ñ??jÈÇÚ%€Ð"zW—QE« ™½^°IH¢pnOüšÒ/„½t²¿À°‹°bö‘ð9Qê·iÄyÀ×·krj ŸšMª,:˲ûe"zXŠÄ†64Ž)ËÌÅî‡ !¸ð¬Në.t4+ARßI.¨Âsnôp*a™L½ïî}9Fæoý¿dØ‹†æ~K¨P(Þkp–1A“R6oUå_äuTVñÞ 8V×óR±ogn/¬…y^ñ¿ó–‰ á VÒ“4Yš{-Í\X)fÞ󨯒o9n™HEº{€ã¡ŠY®ÿ¨×mâ¯ú¹žÈÛѰé¨iâ¨Ncå¡ZÌé<:Ä"•V儯=Ùì>Ã#vçÖ©PH¯ úiÑÒFì~–Ì=Eåò‹ë{,7Š}ݹ㦒MZ¬ZÊ ….WX‹ÂúP"=ÆÅ…6g9X9„b¢`–©ã3™%þ*f!PNåy<1jÿ¡s@Œùˆi zõ kD}¬·µ©Í¡gÅBèÞ2¡¨[ |?çY«Á…•ÕZÚ¬dRái8ésÑǤï€&ò©g­/mÿ,ã4RfPwnÉOCj/bK¥˜x®æÙ¸nñ …ßî!ç;<Ñ«€É5Ó×WÞAÎ’ªå˜ûø½ÓØ®jƘ8˜~/kEuTÌ—öÃX±‰×%((†Ö¿Õ<ÃH¥8PT?>ž)vø;tyòj*±3‰šn©©†µ&‰È~žÆ3±îæåßEb}é眰 šîÏÚXÀ݇ÄÚÆÈàBôƒÝÇòLÝ7Xj/ ¤üÑýij ü²2¯býUÄnSÇàüu£'Àï‚íß^‘X€­¯a#srÿp¶§ñ&Óçº[y6p;œË©D+èºÜYs‚­|5¾Èé˜Í\¸ðhN)P˜­ÁzhW@ò5 KÌ[(ªNÔª[¨AWõu0‘¥Üþo[èn` /8&n–¨z_{8TŸø¦ÓÞÇÀ,ä½PêÃæ­I4ȱ!¯¼¿fy¯µßI ‚¡È±öX+cQ¼xã@RÔ+0x9\×üaóYÅ›4„ÿ´U­"ß2Òêç~)Æ 7!HŠe¦îU%Ë)¶¬‡GÇò6cü)šøÈ¤ó&ò ¡Õ{šÔ¤–ý+Ôh«1¬‰1ßá2Z¬ÔÇ‹Cn'l@&†Räumºö/j¡âHÊ$Xót{ð¡Y‹°x¾r±½®×¤áäfËâ)C¡½µ¨åÑÌ;¡°Ⱦpx«®ó/аÿ7}ÑÊ:õk/ìÆ\X7 ¡¼œðýœ`o&> ÷u àåaÛñšø{ÄG7ÄàüvUϤаTà­£[ YEkj™é¨Pî%¤û¤íÊõ;ºôx{ζͭ‚B¨Þ‘^²üf^{’ôk°nL ¯ÇOåG;Šô¶ßïh®™õ”=gÀ‘ôt/?íÎ ó½³[vŽún?Û’•‚µ^ß/ëï:PU¶m\’J±ÎÖmy]`gʬ»VÅD( cJÑÇ«‹û¸³š¨,S¸@ôŸZEŸN[³ÖÖß2C¬ûy®IÏcävQ<·?s†˜½ ÝÍÜÌëo9üNqÿÓä_Gê#Ä`ZÖP¯Åš›°Ùÿ؉|6bˆáU»·ª á$j}ºßvªÇï½K–ïÍÏ»æ]§¦&™ÖŠä—Ý=HÙœ‚ÜEÈÜÁ‹»M¢MÐXb¹¬ízªÚLaÈ=8ÊRzøÑuJ›¢X3ÛUÖ&ࣛîYÈ »³¥ÛfÔ•º^Až7pk4ªº›(½ß11ø&‡é—?Ø®ÃkýŸç¥Hª¾»°=‹ƒùsUÈ•œß¹inòv»)‚p ÷%óŒù´7v!Êùf‡[îcⲩõ RÈXW‹²œ|i¤zz×—\Ö#øà–Éa€ú8¼5sEÐûœéj°ø†Æ2«-ä±bÌktaAfŽ‹õÎÆgÞmï«î/àÞ‡êvÒ†ãéïB ’f ˆdòíâ±B_è¡R¼›ù¾ãK_ëûÙ]…ªvÝVû?lDÊ=ù˜öìó”¿vû+ ÷%*í&TmÂFT?úY#`´}•Ô|—@0²ë<Ú¬Žº–Æ„áÀI"ú%²DÃï¸z©¶‡O뼿zý¤M)9R ¬(E)/D/XT("ØhÑ‘‰  ö]`#4¸GYÒ°ÚR¥ '·¬úíOÆüÇ(Ѽ:a¦Ø ùœG㉟¸R¶ '4IX8¼rIo7ªM#ìKE1û‘ä%iÎÆ„dÝø~½ª(WL> 7%s½=à5v¨¢WEhjÚ¸Vÿ·YÓ ó§ëPÐÈ& ¿9Ð7YÃâ)Z,xNðó·ŽÏ¯ª•¯ßïó`LrÚ"H÷؆S?± ÖÕ'塲?C+é0ÚúÛ_ÆÊÆ·žSX+G'o”5„ÇtÔ›÷’~¯`– |@d'©uÉõ1Èôd˜"ѽ·ê‹:]/¬®fä$Õ)±àiWØxul¶T<¿`-Æ%Œv&Òê}UH!ŠvÒFsqµO©ªÝïºû>Ô{ÌÇ䨀²æÉªó¾÷§qg©ÔúšÃGðî7Òß6v›G³^/é ›g®r uy_¬66u¤åRw©¨ ™Û8‚EÙ‚g°¾_ÅÎb‚Á§QýžàyÄ¿üð}30S nóYY“K 7/ÂþA¼Ó<®v&}Ë*-¤³‡µp\ìF-¯æo?É›¥üÓ»©œúiãÔÒ¤øµ$ÌÉúÖFå …fé! cÕ{(‡ª‡ý@I™%©Ãøg¦Ä±ê&ëû§;K’›WhtÍ—ùŒ}¦é'¿ÏâæC1·÷ås@‡¶›·øØÇÊåV­¤ø¨ñ›j\VGáÈ ê÷ z™{6‹³ÇÃa¼ÛöJë·ÖŠOwÊí¢²aßßN™”û# –ƒ´{n˜pítŸ}– oŸ“T¶ióì¬M&<é<ëé׫“Þ©á‘•!ù•ê“(¦êߎOm-âáK Wmÿˆyš· 2õ»‚ŒöÅkÝKâˆ. ™ ýùšï`Ð0O¶•%m>•S ám]‰(œõ%ý·cÐI·”Z Cî“[û“¶pàvO· Y_?Ÿ€m¯2ãIV¾v}(©¾úd1­Ð¥•E@îØTBÐ|ªÛ?»?ÄœÊC|¹&º  ÷1Qßãe!Ó臞\Á+e–ÁÞTÄ£ôeôH¦0_Bš7ÿ9=Qdæ³t;›fGÛÚÿÈ?ïö4Ø0oé:ÝüŠ€à „®Må(ù×M"±eF!Ë+m6?6èfáh<Ǧë-“é®8Lñô‡.uA=E0^¬h]£°¾Üò@gû÷ƒþÊÒã>«S[;ÄÏ¿ "Ò‰íDkÛFO’_޲óλú?êÐ]~íù“ ÜÎgcõlÎÝ0¼ÆªcOd¶+a˜3…ψô|,iŽ:ô6·möÉ`ð Þ¬Ö†FDšH¡gƒ7‡ïƒQ†4aR\9@å$Å”ü _DV–€«úÌ)E¿‘² eèXÇ7ÆëO@ZóEÈad÷ˆ þU6[x‹ßq„ÙÆ¬$X£Wà/¿JÞŦœ‹1 Ulý‹f6¤é@„„7ðámö%k[Úéc~È™d’™mvy‰Ûo &ŸQ’;'Ò=uÑÀÛØ›.}´—jqUoSÁ±È›v'׸ɤäLÃÀ䎡Ͱ«'Q›J/. Êj³7m:öÞ­ó 5 uâúÕí¿œ^‹ué²÷Dˆ‚€”›¡»lltælÃ6$ p‰šÒÂèãž‹d¿K¨â bÓæVaØD8øÕÈUL`¸˜û1l`7ÈŠ1„$¸Lü{{ÿŠ¯È»ðªÈ–†U·éhZdÉÓk*î”$+†%PúÏ–:´`çåŸñnËÔhÉ^N}^ݰÀc„Í\ÎÐöˆe’~¦bõ ˆ4û8ýÚI·'¿aY#…k®ŸT³3Õ®#®5Çñ‚ˆ ¿ÂÇŠÃôêWWmÒ«ô›Pq­™µ+̽$T@ey©üïiUε ¨û°î®¶Æü‡KçMY9½Ý=6pS,b>äý¿*'³ùvÄÙ$AÍ4W)JîmלÄÿ·÷VPUz¤r ¿ ì©ç#hQJ`pgE`IÒ9ƒ—ÓÙ«Áct·¶Å­v9A3‚Ÿ¹±¢ãïÙ­½3’d£±dó6>ëFÑ_ñPá å¡¡muÉhݳ©2ž÷ë±WzUÎÎ êõ5Ä2>êi´˜€@ß œŸÔ ¿žäáÞKòDÍUÙ<§µ+`TáSùX{ á|·w;:‹œ¢nÈ(ÌËìâñ¯[[¨B4I¹ëîºux}æ)'H}ImiM3Šz°nïÆ–i¶}\†‹ 1Wª‰Ô†¦H7!„KµGJ¯V¾Ø¸úÌ¿Ÿñd½ÈÌ´­ôLOáW-ž <çFi ‘è= ëtÚ½ÈY™è(®ˆ§W“í¼”ƒµwCŒ®"G?»M³# PýŸît’!;*ÛÚÓ0[ähf´²Þãök»I­²Ž‰u˜ø ý!X¥2^2ú—Ds)VEjša>J>&"¾™,Êm=í ïLÔÞcßÑ-ß/?¹è¢Ütjù£+¢„£·õC×”öÒÛ§Ö#Ñ—…&»õí\ŽçÏ%×ê­$ج øf”=»ö\ø­g]ÎoÒˆý/^Ë.‡ntIÞÒlz̾ˆ5Bî…‘>ô/ÖÉYž 8 #ɰöøœ¿DÓÿà.<8OÒN<¹£Oå¬2½l|5²¨$‘k½©¨xsî– œ áþÜ”O%‡!Vy FÑ­þðžG•yÝäVw]lHÓÃ>CÂ22ýÓÒ߸_ääA,ÁØ6o‡},„2S§ü{4Q³”¡¯dQTöÞ!SjÊ*KÝñó,†Ø¹—_êXÁŸRb‘´Sá>Úíòé%Ö™eäŸôvÏÔžŸŠ[ü/•µ;†þí¸FŽxnœ +ˆ,a ^†%[iæçÈÅk{KòÅ`\ ¢ŸõSÈyÕ™UJžUó‚ ¨wbI83ý˜jêÈÃMòž­ùŸ¥†ÙO»Z7¢6̳U%Ûå’*L6ï “Òåž˽ª\|iw6s€æ =Ž†Ë¯ïe‹ØT!7LHÚµÐÑjqšÂ¢ì¯íIGqÜ u%išóL©Èˆ© –õ–<Ý1UéAÛYù½—yeÿ¢ 7&Ï€!à&\šèó:‰<Ö|Ÿ$%GÃ')hÙ!Ú–~ëÚV1>½Ü»¯íó?–¾ €cêÔ†¯( Ì óœù&ŽeîHùs¨˜U%íÑ4Èù/jþ['gÑ×EÙW<ø.ó•EôÜ!°që¾¢cÆñµ¥T8Ήºv¡Þ?V% ʨíìðªôüð¼„õqåêäT!ÝŠA~Â=X6ǤJ¤ŒU¼N»GÄãåËÊV½eee†ÉÛEƒ( ·Æ.×ø94‰:ÒÕ³ ª§ÖÁ~jAó«êé4¿3Ãò¼Š»üï,°ãÔ·ÖOÓ¤_–rMŸ<-o‰¬Š—û·Ý¼ý„mWf‚<áܺ ¶“¥Z„[·¤Ž g5ªZA[Ptâ§"«n—pºà¦aSœ‘ê©!c@gŠ»èxæÍåþ ¿˜å5©z픃lq%@™^_%Þÿ,w^ܯß,ÇN!4– ùÍ•~ùr}—ªç5í ll/"  ŹÝDeòe,‘Cø9$È8|ü ™=¥½%úƒ½ÔÝŠ-®-¹¢3¾¨Ëp¢„ËfÏ™qVÃažA:×Y ‚U#ï§¹ÐÕª÷Œ™1ß¿ð"E”L'öù0ôÁ®Êì\4·tœF©DásCfF'ÆSthc¿áàkHâ’ Áº+’œçµZÉåÀ(µ»‡‚}à9%~MÎÑ: V‡Qó¬—Z%t» û( ?«ßÇú$Œ®•Ñ—ýáOlh(:bÀÐýé{çK¾–=eáßžY“¬{Éèà¸ÒûºgEÐÙjéébŸƒL…-?¦¾þ‘óÐ~µñ+ªôû ˆ¸f#…´ÓC-¸$‘â*ôìŠjOkÇâ•ѳ3rš¤àÉðÙ>rz:KÖÛ¾ ¡gºÆ¹ûG ‡Ç^Ä}X®¦3ðùJŽ¥šx™ÌŸihÖfÇ¡wኂýWr­ìA=úT˜G©‡Yè>¶Èé’ÈÀè/‘ËuoÔlÔVåjªÇÒ(¦FÓâèàMÍhѺ*ó ·r=Ï ¬ÄÐéÅ¡¤†´ÂüYÊŽ-p3*mï5¸ W§=yKGfI>»øw !¬žÞ)oSïèÿ­hüÔ¤ *WRi2fzá ö—n¢ÀÅ+>}tµ§¡‘[´í+ÿ+™ÌhÔ½[ÜJßîŒÛ]Ñ×õ‹$ W A¾øwÇü­Ë'Ì÷òR„¾ü©Ð²wi½Ž6îjTð ‹uÐb‹,ƒ-®Y8Yd*|ß*f`Ž¥UÌæš ýTË€¿ŽþyPáZ™Oqãów6£æb]Á<ìâã$B š(ÝöZAÐóê«Ò­HD7»ÉÿC'|ZðÁƒžñ/$é$RÅ+nH:”%[µËJÊAÛSŠ2hW€0¥Ø³éÜ#v‡ïÆŸ³‚‹­åƒ¼Æ] hÑ,*´—‘²›†ÐgÚÖ~ÒÒbj2ŸÕâ¿: ½øó¨ï¨’Ìhçœí{7›¾™jbÔ™9Ÿû¸©2Ó6ùDiI,ÝC¶ÁÛ#g4­>ï‘yk…‰jjM·™9Äg‚Ê[Ug>jJXb‘Fx߸qoæÔî›b§U©3åÿ¿•>_ÒëÛÈ-ÕN‘Í‚kÊÌ™ÐZ1ÕOrÖ"¦K¯þ;Võ|H õÚiP@aŠ($« yä]¹è~ï ñý¼Zr @bŒ¥Lœc˜[y1ÛЮàš¶£¥e¬‹¯ùvð÷—¹yÚ¤À$7Ø»Ÿé°ìY‰š¬bˆ qpŒÂ, ¤Qç*j1ÜëY<¥lã|UÎÆ¾k—…!æ%˽þ¼és\¤{àÉA2%É&6ãa º×ƒ©ø3Ýó„«W»÷Y¶¿¤ïÜúqÍ|Èè:{îrëÒœe$E¤p÷T ƒ¡¡ð‚:ÞªŸ¤X0#¹dðí¿ÉƦ Óø1R_ h’_ º²þÕzƒ„ä÷óð­Á.£’` õÂ0ø®+›Çoz/óY½—©?±oz×Hc=ÛÝÇy3Û§ÔÈ@Šó”Ç•tŽ””r±* S{RúL£ÀØíðÄ÷¾(Ó5È!.åšc%m¹&]§—QºŠÔÊd9Îjn$×U¹'#yã§ÖlãÙûj9•òÍ%Tš¹Bæò»˜t¬öžžÔ†Çó²ø1ˆ|ôƒ9”ëk sàºX)ˆi¾ÖÇ;±‚ >À¿´ÄN 8}¦öÐÛî€Jió œo¼½ÿüàôÝËÈwm.žW‚ZJn[dùÉH'Â9^ ä騣óvÕ,f,wõÄùË#aAÐëþP¢Œù‚ÕÉNÑ_7 p€Zÿ¼H€¦‹s´è¸Ò|ö^æçË dJÝË~ÅÏaè}‹)!¸¥+sÏK¹ó‘°~¼+ìÉlpý׫pB¿FÇcc1o·†Ö1c¬%¸ ‡]ˆSü‰„íJO‘Mqž´ZÀ¬Û.Vׂs–u?²?ýïLSÏ2Δ@@§ûóJ<OßÉßTâÈê\k‹é§‹šž~å^¸Ñ©.0ϬÊßË>ªü¯´oƒ•’öVRÃý_wÉ‘d0;’Îç+'ô½0*Ãô;s¬jFvJ­VZZá ½¨"£ˆt€ZmŽøæ\ç’FÛ¨:dð“ÿö+û&CGªô²#’óصÇ]Á“éʘµLÉX q«šQº‰†);óvfP½I Üs‘f_§²‡™ êÑRwO±Ç®¬übtu.;Ëwd,bÅæØÉü£Sý>l8Ÿx$½w³é|óÛ™… 7üz€uœúCÈ…Y ˆà#"½þëß5ˆ«ÛÉÌŽÃ`\3KûÚ&Bžë„–D]iR@þ¬üR H°@#™¬c'Ù-ççÒÐGêg=>Å*}~¿@ù–bA‡?S4cÚ7úÛ„†Œ6…l¨ëîèÁIC[]–FM!{ÑäD³eMB±®ÜÏbqÇk9Ó8ùÓ ¢lUz|CÙH€nOòH`_®è!‰vfS«WcRóY’_ߣnO~®¾õìDZ 3f[¡—a¹Ãs§è\…½!LSÃQ€ÙÎ|ŽªúïЇßsI´¥-ä¿sÜFˆ%ÀœPæ5'Ô™LF8ÈD¥/7÷õèH=Ô½.Oæà/ø¯aáû>œYL§ð$« #â=à-r±µý¿øŽxM«]êxÍÞä†ÕþôX'M;£tü¿Lþ–Æã¡÷8L‚"Ù ¨!RZö×@QeËržg\îdâÀÃXÀõÅuxÜ®/à>oc?6^¿%34ŒV»¸Ê\êdN%Fƒõ~š³‰ò( #óÊóv ñDŠÄã\`n+E¡ä{VX´´~ÇäAã‚’tÃñ÷MÈA¶åäXA1¢»òå#)2VêöÎVðŸVE#¶}F"âq.{ШÌúÈèØ@ŠF…ðóÞŽTl‡'}o$'ÉÆþа5&#ËHüƒ§PZâû»›èɰž8ñìîÜ5ë}ºÅÔØÿËk$zãiDvno=Y+T'¾hìš¼JW„¾\]ÓþÚðƒÿAf2* ‰Y ÎÀ‡½± Ÿö=:뾰Õ [¥VÏœÿ2i¾â¡Ñ˜ÜäˆMüÏV2~Si,Ámuþ™!v•Jí˜ã8wáµÕ¦ .xÆ7¬øYˆsºGØrx)M§m:ªrú›"ð¢…%ÑžøÊZï;Dºõ6zY8W…è´L>3Žb2#üi8ï Mþ=²61£·T»Šªø¾­ƒ±ºÝÝK/ò~ ±ó½P;¼פD½x¾`Œå=‚+·fNˉÁ:Ì“v•®Sp˜#*®#‹!Ðé#$Õæ¿«âôŽW lèà­Øòâôqœ ¡-Ϊ3Ôkâzí7\䯯©ˆA] `Z9 žS,_™¨"P3?M©B‘—œ ‹e=|‹, ŠÎìnYè¾t‡P%9û¹1_J¡Ü”Dûè"n<ÌQâ@KŸöÄi?½ÍŠ+½8ðñiö”Óî/Ò^àŒƒCIž(æ>a$E~[^¯+CgÔ5$BõY~š8ÐÍcq¼ƒ!  O·Šûu{ERò¯Oj\€ß\ÐÙÏÄâŽíƒ¨‡³H£ ‚ÍTßúü‡ÿ}YPÒøÝ:7tiÜÞé]þeM-vw¢?9qö-Cgûok†œ5ÏêòŸ£ºè1ïP®± ˆèÖÕ:ç¶F/ýb2w✺A@€wcÝÀÁ¢ŽÀœO, gZº©ÑX¾6ùJc+è;žÎsê›y“MÐßq=Ï(ßV“´s9ç¼àA!ïº\ ,Š&áŽ×ýRèØ¨dCaWA—n¼cìÁ#ÙåQ’zšÿ%ipí{½Ó)ÞT RH‘H­ï—¤ÜáÒó»G'‰ÂQë½Ï“¡9’hš6.a ~_úGðÿ9eš&“+é¥6ÌžœóÝú³XneÆ$…L¡QÕB´ …ú€u`ÃosÙ܉/¢]$rï ƒQ?/â ]bgP‹ÌL?fòz×x=ª“E —܃¤D×*¹åæ:åD©¦ OTr)–† ¨ Ô׸VS¶?UÌvÓÓ!±K‚ï»h¾kÉšþ,Ž@&=‘RƒµÙ9w))tObÞ‹5­#pPgÅä‹$‰ ušõÍr1퀆¡ ƒ8‰îŒ¾.ò ƒ<Üw^eÉBÓ Þ.#Ư\dû0f¦ÜR'Jxåû›kªº [cí-Òòý­Áȃ[nD¦ä?«c.¥÷=U‰ê‹ó<߈ ®ÕbNѦRÝ×õSJRq Ý Ù@'ÄJÝàònöˆ&a#<ütì‰Êõ¼¼Æ}U®¯oI%Œ~YF'‘ <©Žjf=YÂ!ÿ¢=†Ù°Ÿ”ºDÊ£*ÃÛèÿ¡6†€¸ÂEd¾ ×ß­ áÔÖ™ÒèüI«f–Y…:F qX‰©ýÒq“·F^`ÎPÈî/oHÚü@Vý³r˜êÜikÃg®"üÊȰí°K>lóåTm"sNUzõã á¹»t„χŸ”uØJ˜ô‡$½/,Œ7Hƒw˜BÁ!¢¶åú£; |Pâó†•k¦–{p'ì- Têw˜Fىɇ…: µ–¡Þ|ÂyVØ•aV«…¡xI;Œ ãL¶OWš×tñi–ýjf øPüô“ÈR¾ÇG¼ªËªE ôêÞÕV×é21 ‹Øóòqgý ©Ù.A ŽÞZSò]¦²u¿n§IàØx íw'¤Sñ3’™÷ŠyÆ$Êîf~<°]Íûyg0ú¸2¤•O¹gX@Ì0:pkP÷ϼëŠáþ§(w‡@€¹Re‹fÒN32ú¦y>™fhÛÿ ÚÏÞ—Ûº°к}¯în¢å¢+þoå•6 S?#ZT¿h!¿"0Üm_îJ:GìOÓ£zhs©Xüì‹ Û> ¶ðÎþ³üî¹Ëd@z»°\|˜7Y—ìâÿÁöü ú{n,g1O•ý+ €WwÛ£é‚'Üžº¼×«iËÄÛ!Æî¸t­àõ9 ‘H2TÂ÷y7îš¼WØÿÃwÛàî»—ûÔ—_àjœ*Š»”°Ù’CÌr-Ù¬|kº§]‘žÛe¬kPßÇe}ïÉo_Ã]{÷Z§bù(Û¨tS´É6°['ú³ÚÉiÊ^8å™:ŠÅ[NÄN’¢$™[(çßf ã‚â`(´S¢'e)Æ“åW™‘Okü[h¦p÷où™x¢a –ìm"£÷á< k a0Ñ”WpŠˆîWä3ûæJúqÐ_•pgä‰ÑL/î½pö&•ð_µ¤çöWt£Nõ9jnoÊkÙ»àÊ/¡NÅH’ºìÚ'x#áe¡¾l&é|\jBN®¬Xr£Ÿ†iWÎô.ûksX»ÕqêœSP{ú'‘¤”0i‡0Z5iUwå«6j çTÁóÔHnÕjÉ )¸ ?a Aá“ßã­F¡îïP¤:mõR×9Ö6£Ò¿ ɉ’íÀªgGçW\enb™ØVO$°RÏ€A¹r|§,T‰0$ zñ¾¥äÂû^S΋”ÏUŠìpz£Q†Ý<_SSIÑ/ÛÄ 59Á*«HaUIøEvQe}åí0Áµ½(§kì.üéÆçµÚâh«E @„ ~ÌÜìÊ­ÿ4ÏóÿÓSS Tã]ÍÑóI£^»§zLS½{gw&Ý—ìæÚ¡fÑ´ù/<™2íºAÅÉ:ơބ¢3Tú‘'½¿Å·§K í‘RŒXgÅY 6wDÚËéàî]ÿ`ìÚqÔ 7€ Ù—¨÷{Ãc1¢Gá5ÞݱÜxK}Ò~ÈÑœÃè5íWê°÷X£ ×aú¾vß_ó°á>™/ë¥À œ$-°Žã’7¤N'ò¿2“c{¼O?)c.ò£ØWï¹ùTQV3?J“/{TgÓ¿Ü©ji‚²è}b$ù8„}æ±½/ãß>D—¥Ï-ýsŒèûËCÈŒva§÷?LuÚâ8C[+!„w€É`#w8¾¬[Gè/…ÝÑ=¶ âÕäôXžPúe¦”Éì)‹- ,4îo@‹*Íöb¼N:u‡•Ñøm ÈSH’jz”ë8°še0ÙôÒ’.™›õâ}™D–™Cƒú<ÎÖvü<>o:|ù)¡¯Þ‡©qM³‚í ˆºí!oÌàŒÀ@„Ïñ$j†.'M^›è6 g«Þþ½ÃK^ËðsË_iï–€»Òáhã„ÁƒKÛ zª~tºÒ}€0-øR“ïø|I¯¤ë5a8#“ùÛøcû²#ƒß  9c2­aæK}¬H„0JÛ…ËcªqÄ £âÏÇo6ë#¯ºó-îÛz! ÁKs ^«Êª03%ŠRŸ"ãk†ã´#õÜ.tÇŠ6¿G„Þ¬†'‚HiXp7‰ý_2®nÐh_|­DÔ¢¬ÊÚþGb5{¢t6æO=³?iÊwÝ/<º¬™—wˆx§º¡Nª½…„{mý@åXš¢y>äÊÙ›ËÕíܳØ!EP^¢ž[2îä*VÄ ´ÙèMZà7ÓÎ77ùºìƒ2çÅÓÛxý‹¾øsùõjØ Øå+¢ 8Ä–ópð~Œþ¹S-/ƒÃÇzül®ïYЏoÀîL‚# ²ÂBc_ùå+㽌Ócµ¬9\^©2‰tŒBb`†&èM{{Ûb[ôC]Äʦª’¾>”~ä1»•`Ô]ÜÀ3—SšÉk©Ñ…:Ë«ø¢Mƒ¿¡F7$¤îÉ[XkýÛ3Jj?µèËé4Z¹iûôEy 1•8¿ ë,({GœÓßf'ä3cÒs08ЄZÛD¶¨/ZÃ)yˆ™µüË‘þ zeb±BYeBÒÆî£bfò¾ROû‚TÔôBù£…>rïF¬/†è¬“ÐÕob|Ã_…ºõfú:D¤ò'†þ—\ÿÇÂyàZ à`ëŸìP§šŒ2ô§RH‰íé/v¾“1ðñM|“¼ÃÜ› ú*hM'üRc#ØN°g߸ulçó,•È(D?)ºÍÙ«£vÅW2ÊøD›G·+°Í‡ÊB7?QK7w“ceÎV&©¥Ý­MÊ-3† `ýÊÚpŽN6Êß%v> 6¹H•ðZÀ‚G¹Ya)å:‹“>lü™ÃÝ?Œ 0ŸsxÆà=7"ÒÕûлœã¨½ h¸Ás-§šðr­—p˜ß;AuþØkzTèxôôÒÖÀQaKË€=’º&üahceà„lAÄ•|7Ò¤N”ä¿Ù|Ö¥Íé“âÎù×;ÁµßÿŸîa¸dÙS͸.æC­®wé4ª°8%×_öQïâ áðîµ.9š?Äm‹1?šFŒ®¶W÷Oò4'w˜áx·ç-vTÞ6[RwVÒÑëÀϪ5HíÍJ¬ýͳ\? n‡ê³ˆŠ—蛕çÐ1euãYÿx’}¥ÚÀ]Ñ$¶Ê°¯ i¹¹ôˆžÚ‚ KÓ–è ºÒÛÜœ7^Ö°ÍÀÈ0s9à  2àe™—_; ~gLõ=ÀÇÔ9ßñÅKÕæÂÈ8‚Ú¹Óbì90ÉjüKjáC½B+°² ÝãÓX äô+Ýœ±“;•5|^Í›Áï;ý³º¼ô­éù„;R€Þ-™Ã©þö‘´õœÚtS’òÁK==ŒÞ”wä>÷„‡=*Lq'0‘dB‘‰Ço£¼vô!ÓíðÅm³³¶Wc¿Iûó=ð.gŒk t ®ºìîI0³mÄÀâ늾pi×§jWž&^Tñ.;×…p¬ gȹ͒½ÿ)¸7¸{:ªK¹F„Bb“>< £íäm¯\„-³Zúg±sP&CÂ@ò=RûȰ.}Ä’Õ£ÊvÓ·¶‰4Ò¿ØÉäý¶É8ìfB€ ”±ÙZûø‰´ÙJ/!©óйˆ·]}óé40‘ FÒT²©½˜:ö‹~cµm×”£áR¢”£ó¢L :Õ(éq‚’O-"Š´5]B˜ï ¹a7Bò ¶i«°k ÷E忚¹9½=Éî·«€koÅÁ¼×®¥åÁº=fÃYæfø‚YxU]-5ð¾ùY5°í~ïËê<%> £®N—FâJ¤ªƆ0¬Qï›ËÂ_æeS4NÞ˜)½Àc#}˦–È<ÉAÎ!ª`  ÀÉyuÉ}28ýtfiIΚïS¡!-qIÝîÌ-#$\º­IÔC7æo·“ü+¿ƒ%µ˜Ôâ„H.¹?e ½%0áÞ@6[¾†ýKÜZªÍšÂP~ÿõÞ¹*jKTú™¥ä¶ˆ`ñâQÞÕŽ¥Ø+ r ¥‡Ô|ðQÆ1ÊLøKj0 zDºÜxŒr+ò-¢ !›Ñ³GçU9F¼àðtu‘Ù쿽ÃRK³ôÖžÛäK…‹ÆÈçI#ÙÄʹJPAAÊÉø†µkƒh¼‡ßñNtÊ5*à{µ‰¸¡Ý·vƒ€óÁqŸ¨‚1ÕØKÏ 88ƒWb€¿Ëý3W¨É|þ×¹@":žËˆ¾¸!à [/ÛÀCL=fìÞÎ0wÇ» ;Î,9¬ Ê&lxÅÎW»¿bdBõ/fíp]HþÜë2:šÆþLÛ\ïÍy¤Àk¡JŠòãK´±S^«0Ž<„‡T8Ú«Á7„lÈËvÝ?¶ê1@HÎäƒÌèj€F¹Ñʈ~œ/g΂m D»yÝ5VU¡É±ïbXp¶­Ëö˜Jý¾Wtuw¾ —‡Hî Ø7ÃIï\¬õ«Îæ™Ú€Œ±Ü«"lŒý¥-ˆVëJëXÊöd‹ËàL®"–¢Pû8û$®kŽx(;ÿ`PKÖšòqÏàºõ^±ªÁES±Ä„¥Ä;Ø@ˆ¹ÂIJ nf’úTšŸS’¹ùüL á‚|û” œ(w§>ö(ÔxžŸƒZ Ú•k°ˆ§'/ÚŽ3D5ÝU•Öy©Âš‚L]tÿ1ú¾}FH)]vÿÛôëÖ]¹u^pýLGF’>Èãô%ÂYxzº,ìƒYÔÁ«aZ5VCh¬j%¿5"êh Ã"…Å#Ù¾%›m‡Ç£ˆûapŒQÒ/Ý# ´t…#ï0´D)¨ö#8V¬À¬L@ŒŒ¼ÿÖY’T¨`n~p´o 1xYzÑÀ·h‘Ûëˆã%';x‚œïò1k»¤˜Örââý<“úuÜ~¢Ê¹¡ÃŽ¢ß7=Ý’B4’å Q"WZRºa§mH^&^IµÛ”×òµ™Æ|‰Ù'„† F’lq ƒyúƒíÆ£ð9HÉ Ïï=O” Æ~–9’íÅÌ4rty©Ó&p&¡@ÀüÖílmÕ£rêʲ)lÙ¿æ6‹rý˜Yãz-O•ºÏÌϼپم±yo1@úˆ«¹š–âx¦¶Y^çþf.ñ™ïóëØš¨šyw‘±ÿUÊÃq¹è®ÈÛE&LÌÂ,€2–ž«o [+¸:l§D å· &º/ â)Jf äZ­¶(E"ù.ùÄûë¹Dö­F²ñŒãÚ.Å¡"BÂ/Ži~—D"ÅzQ,€ÛÉ£ÊNa[Ú†|áù2'ZË*Ál8¥õ+U7t¸#&^…çu9… S–5-VGŒ}j ¾ݱâÆô›Ä ¥>À¯[«ùR]âRB’j3Ø;ŒœzªÉñ%+Þþ‡tF&™ô9†®í/v'-½:„}å …Î·Vó2µ"ÍøÎæìvSË{wä±\SXNĤhk”p“°K㈘…›5÷Zù¹Ñh/‰cÆú«ú|iàX›"}ç¹RIÊeyb5]Hº¥xî:nÞ튎ÿÍ3;Pä ƒS;i`Šß4&xV³@A½WˆéúzJ^xÆÑÝpŠR ŸûÄø§•„Ùö»%ѼIDac˜.\LpjË­H}5>‘3C*Œ5 í†Û¥C¾ÒáÐ$|'YQ"÷HwôÙ(`l·²Ì„*[ÁT™›ÔR¿.ŽÂÝjÞ÷v…¯ŒNXJêºÔ6Þ*©D }†g¶õÄ‘.£[ëc•¸b%T¡ú\ŠÈd©bQAø”KÊ@8„ìþ æP‹žy¢§ûfƒ÷´Ç &dë ¶‹M€‘¿*Ù¯sƆÜÎJ%y™^7‘W¢©Uàë4ÑQ)S ý…eâüNÍõÿ¡töb‰P£Ö9/b-º(ÊN#±ðóé¨å´å0ç»ámÛVŒãÅ÷Þ¡'Acƒ|BJ¸Hü“×]ëo(ß™ó(Ñ2[¶{F¡ºÇéw>U}™ûšÎ¶1ÓÛúël¥¶bý²1ÿ&Š V#„B= p’wxéï0ÇäÙyNÛ–éëà2/ qÐ?cE?¡ƒmëôeÆççXªVTI“ó È€…XílT¸Zöµ¾/5{ˆ&î‰4©÷ìËÛɸæN÷ ÖÃ@«=à\ü(ù\þœù˜þ‰f)HðRCÇàÞ=)N5+È#$wÃmÉ&$S‘\–GY8D}Û¨ª™?'yÆrt«CVŸ%@“’-&U+õ–H¥8D ß’…Îtw%ÑQ+U×–«çHøç§wÄöU76µùÒêÞËu¨ùŽ·ÚécHƒ¢îzÿaÆ„—º@¹ÿwŸ×ükJ£·,ÔK±Ný”Á|¯ ^ƒäz:ZLËBÿÈ&ÙùÕ~_“B›P¶®%<óái2\ˆaG§¸ÃÔpGqÇBJ”­‡¾¹”° †ZWFÁ!ÜbïÑ¥<”s*/ά÷-ûeb&õætÈ'á® ·;—Eì™ØÄ2&”{Áïd@ç[? åh;¾¬¡Å^À©võ ÀT‡üð ³LGÕ¶'©,Dã"ûó¹€BBD‰8ù«ô:@0/rÆ·z6æÖ–Ïí¬2vÅW5.yugWü±õ¡~‚(š xÄQ=ŇÜ/1 í`üµ‘www ž_´Æ7f„{ò£¾S†‚X”Wîï >Ç•ŽíÇÀ"þ³põ,#½$ÜF<íS).çµ+µ ÙMözÉ{=ec_~¨<6ã3@VØ÷DPdt!B5ÍøJ‰øïГM— Ò÷< %×,kaKD©¯¢[\ªÉwéQýê¹Î…²Ÿµ&œä²b*ú\TºïÅýá ÇûŠ‘Ë0jDþ×’´ü¡O¹Õ*±—ø+´ßŠ1>³c,×-s‹«-´ 291̼0?á2-T;™r % ¬ï]Ö¼ÄâosymE%¸\G1X©áþ§DXR: Ú˹ôxà˜ÔK¬,çOؽµr.¤ãpH0¿îDB86!\UÕ­.Müè¶¹Ý Ä=?–.Øð``:1&ôx‚Z¹…Uö÷¡N­£HXî*xø"޽€ßÖÝP:!ÿÔìM›Š­µ(¿‡ÉÔ#}Â$¯F©ÀËwÛT,®3Øò²–fóhw€–Ko4ñF)ñÈkˆfo~ø‰ÞOûë@Ö“ö  ýø‚ÿ±Eži‡6Èp£ÃÜŒ>Î6¸”ÿWsJs6ËËöÏž,[iàªòúôû u¼G¸pMœj›CÊ9PRòä$=T¦·f~–U<#Å%a)u¼BužüÏúÅÏð"‹Žoü\“Mï°D ;ò­Ì‰²B–%ŸI#Ìú›$FÒÍõ}sÙöãv(NÀ‚ÐÂ!Éòý*øŸ‡³'®JnIIá¤QȺS¢ 1$£;ÃW‹ÓÌ3Þ”Ál‰³Š†:ÙSÀ6"Q…îYÖAÒX‰W¼‹° ó·ÙÕÔ?‘±EÎ+s$“­ÛBr¤Qè|åæfCvÖ›¢Š%býÜØûQ&'ö}Â}™[×$X‚sÐ.µD¡)îù?ÆMRتšv†ÑÆ;¥ Å!Û @ °ƒÊ¢ˆW/ƒyç‚«I|îbO±+§½ÛØ ;5Vf±ý›=ìâC€+TKÝs)ÇÙk|áÇŽèð›^bÖ…˜æ®Áµƒ} 8!‹‚–ƒi¤Lm/ïnÅ·Ñ`ù¹ª"pŒ€Hß㣼¡ 'PØüä7éd×–#C–£´Óˆ$.IDƒ¨·þ3Ì€¯pþ™Ì:꫎ŠÂ »k7‹1%ÕÜ‹çŠûdÿØ¿;n^¦ä½GØ6q8g-Ù-½9ÕS&«oÈâÙg¬gŸ  ;¯‹—ï™"]Ïžã [¦·*©§²Z $Û``kiµâG›†õ$>!ˆŽyùƒ\Ä.Õ=`2?ß« ¸>8 ¹Úðd#iž„üÝ|îÆ‚ëÑDÇØŸrþ)«_oÊ~ÐánÕƒõnR¨Q®÷îö»Hú>k-2¯¹ÇÅ EÉže,RM×[ˆ5¼±íÞK6‹dÚdÇî+•c€p`{é7ã>)¾8“ë5·¬XY:3xÛˆ€wŸpÖµ;ÈÂ9ØòÅAUŒJJp÷‰6°gÚ)#Sý˜@ }Óæ<Ô½»+ Õºÿ¹ýZ"B)AÒG‡‹O0¿åÁüÀeڽ竛Þq[Cݬ·àb¸æ–(ÍvRÁ…Ÿ§G’3glÏ£ODÌ2úW0=Z5ãGò¦úcºë`¦··ÃËÆ»5x ÔtC‰þ®[py¯òcqˆþS:7ž¾ï8içüfÆf +ý‹€Úß¿+ÓnyƒÐÚbØéÃ>s%þÉ¢<”(ï“È[}‹´ì˜Sp}¢ƒo» Ì/¬1Û,É =`G‡¯ÿ þ¡ŽQ<4"Qêm!ÿû†‚Þ.YÔü-_†_øßhC&;­"E€4s¿`4šZ2Éršª‡ Û»`¯9¯]åX-‰Í²Jí i±Ùö©ôË¡Cx»¹©¿A\³×\ï ËZÓ›‚ò7d`ÕÑÞ¶wï%ÇOdŽç݉‰]}$ü\§"›Žo,iœµEý$ëøïÙÈȬJ 7Çù˜Wk–(\û†10üfü¯þѺDî]óE#O ÍQ°×EöÌJfC‡)TÿøyÒ'üB‡ÇzxÀ–—žbE™ñŒê¸7ºúøó¼¼– 'îû?“_bÕÒHh'lfJS-Aö½œ%Ê ý}ÔW·ùGúuöŸÚm΂ öÐÚÂß cx矷„ºÏ±…Àp_•ªÕc=éi?ç Ý0ŒHûFÀ°'Ϲ±Û5}pË<Y| ±WÆà|áæÊ8œç›õ¼!à\£n ‘F£A¨ºJ^6 -ºn ͧ fθbe—SiM¾ÿ}kÄ¥m–ÆûÐsf‚3Âñ{ïÕJÆ3i¡ y)*sö'›°m¸È¦±Åaf4ÆN¥‰>TYëôÒŸŸŠYÂBY0ôÜצ`›#PznД@Í%½jmÂÇüžfÙÍ/s”Œ(z7&Ve0É4ÙôSt³'äƒ~îpõ•ÎSÍîð‘:Éw´û»7Õb¾»ÊOß$óURöjq °\*æ+,€µ(VàH¬æ>êÁMSâ/;Dô@õ }˜trÜÚσ6ÞéhaPy€°>´ØÒþ¹]qø“"½|¹¯ÎŸïʶcuÜìážÓ6)…/¢æIÅ ïsìSâ·èp +бò†VKÐüøü1^·%ÇD»±Êwæ403n„tŸ&•©PégX“'Šq¼$fÒÓ÷£鱘Ö~{”cÐ.\^ /çâ pùáí‚„J4ĦÐ7äéð W3x4jªTû¥7Øé>êÃÞŠö“ƒz÷ ÿN´Á …|P¨°ë! TˆSZ¶à!t$&:5Òÿfÿvù]{EiZŽXì á§¾ù-`¼ñ"Ô?gˆêmué¾¾O¥œ§„`4ehPzÉݶÀÀ(/fTûçE+‘&ÝOhú‡äõ­ lÙÚŸŠ;à¤3èó@}0|Þ¬Jû},5âZ %O¡„xDÇ¢þ¼*¨òsyª¨%=U;ãm–-¶²r’•)&'ÐëãꪞM"x°x¥MÓ±Á¡ªH5ÇÚÒ–sb'Ô“½'½ÅáuÊN6† C£±á7 áÂËI‡ö ’»iT}‡1mnÏ4v°°ÅÚŸ*O¯¤$Æžª3ù>†¡™SóÜ¿®¿y&. Ms‹pž´ 4uˆûíe¡u.A@ßÏŽ™ŒPœC†… ×ÒöuC?iÀÐ­Åæ0åòùV¬¡çdwÃê”yù@Œ€a©‚%LYØÀmÚyê|+ÿ €ÌéŽt>̨º(’{~.þ‡ùa+Wd¬‘/<ÊDßq쎉éxõ ½øš_Í ª­®6sÆû+-xÜDR„³•,üŸ¥õÕz‡Ê¾Ž˜\œäÑÕÖz*§e&´€ ]׿d´J¢éò½ËÉCÛóê³›äßåâó¹GŽ9 yÉ—·?ùÒG¹GtÐXßQ<£Èª— ±nî¦ò±÷à̼{z§ß¼;önùé3¼œåäzO…¥«Üå¹Ië˜ÍF±–ïúƾe`<&Zg OŠ/Ësª@öIâdá1)'bk3 ÐªšGÃH­§±Þø´]L¯]Ùž‹‚ôË+ÖpíÃÑ8ÑÐèù§Â$ŒKBdÚÒL?\Ý?l|þíeN¸™gtjŠGŠÑ¦\˜¤H®ŸŽÑ¾f‡ðÑŠ{¶tF°`J ÑøX”ð¢GS'þ©m@ù Äå×V™œxêõx.ožšVŸn4&¾œn¬™Jlk|ŸØÁ뎢ÊElQ Væxé¯Òçû‡n5jD=ˆqj8%ôØQÔˆ mW&^_‘Ðýyø¤ÁoxbõôÓñXxmRµ²†ÃÑ«©ùø)À7ýÿr )˜_–ýÒ \ˆ¡2åAþêxqD8Ý‘»0ö:ݬi²p÷Q« p•Ó³F!‚‘¢Þ³8bou €UVÅ9%_©mTR>Esha´8™BzVÞP4^RVTðµ8n›HáHè‚“ô Ñ`86=æê>hè!mañ?R_èzäR•tòÉì–ó¤MŸ×B7´ä$>žüNßþȆæ´òpÇLòi=Ø­=”ùàÐOIÕŠ”è®è@‚AA„dÚã¼'¾Œ7Áp£˜˜x&ÓqÛÙo@Âús)Æ-î— ,Н a/0Ÿ3޲ôRÁ'Ÿ¥Ûvj=H=?id{n 1KÜ ü/j£ã%0§±|u)Žx­x!€ŠwÆE:$ž®W™q€ŽBmS=”¬ÐõÇö~P[bG Qm™Y!S¨7žŽg]Ñï(ãü‡Ñ8ë½bŽj?Ëû\)zçæÕ€ò5?ëÜ\œ9ìh(ÜÀ€ι°-¿¤õ|T•Ø&XÁLÍò°ýÛmí7ÝRë#ÕëE#8; 4'qU›.ƒgSº•àT8aM#@W*óø×Sã›cãI9ð‘iºQít&‘)ç+¶ÅoY`Óì{…¦L /ãžayåŽNFÒ8v¦Û¸ ›‹<")Ác~V o{9s4NE¡adU<¿c7îm÷ISˆ•Ž&‚ˆ'bk³f¡V,U šÜøýÞNåßH\Ê–´³œ*I^ùe:4ÿCuù 1ë9’I ê%Õ]£5H|¸2÷cG9Š–Ó™˜6â‘»¥»30ËW)V.Æê·hYœ%öù¶…wã&õ¾­ ’ý˜xs %åBcâµ ÒJß:€¬ydz !Ê4g‘ó"Ò ý¼,~ÏXܬ£kÅÑléE7Å$*§fœ·¼¬AU¨¼q½;d$œõݸ¬yݳr$Yù+XùËñÛ§KÂTǶ„†Îøˆ)3-I®¥°6$H]ž\^…’Ðx–‘IKÉø "rj7cï(Ò Ü,~åbó˜ø-Bâ³ ‹¹˜³ÿ4{ô¥äaM=¤=5÷²Í¹×¸ãÚWë;‰¸ÿD,SÎoÁhpŒ©ÒV·›×yä¾-¦S·o ÿÇ–jï}«ß5"¯•8à÷#li*!-‘‡O¿Ù·³SÝújai]‹¯1Š»ܸQfžli+ÜŽQØ®nÀ®þ‘‘;§’;&m™ÚøDpŵ¥8;lk#ö〰*µnÂ¥ Ð=†Åÿ\õSW¥²…uH\•ótÕÏ)ýX˜¼Æ€­kiÚ’sZÅ´_òAýÃeš§Ÿ­)ŠNMÄ©„ gCêâE¿Ð½pV½` íã­_þ!ć>-¨(‚ŸtQ_ºÄH `+mߣGZ› ÎnM©›:ýÞó#CæQ¬,?3\wÆïJû¹?è[×+kgómÏŸƒJ( ¬0iíl{Í+Êfr¯%àÅ—¾Éøzú¼Ë!4YCÔXr)âhP ÑÙßvf£ˆåÖàÆƒcVK,þ bó˰?"„¯¯½éŒýÎs&X 2m½Œ g Jxi,œy•)ñNU2 ^ÀÖ14-ði7¡¥¦=˜ƒ€ðÕÁ¢À< Ú®¬X <­œSéwâ"û ʃ@ºaj< ëžÔš%I÷š‡¼~# Ak´ïLh5žs˜ŽØ-B8Wu ¿egùH®—H5fÔw %þã·ØC_Ì &b€p-«ÓLd‘¸]Àz÷ÈëGï¾t¯5­<î…‡`…CŒgl×íŸèMdkJ2ÞUÄ[L~g<[^ïÙth¯Ú½É¢›{¸ªp€Ÿÿ¢ŒÀ2—zøH§*°!$ønqyaR½jÁ¿?ào°Q,×5&óÒKG¸1¦¾t½lÀvüÆåH²ø‰Xyêúâ©SsL¤ÛMC+ù#g.ø}0E1×@CSð㱩öGŒÛŒ§µ²0m,MÑ|þ|òÜ HâPÈB%Ösjò¯ÇÛ'|é&Ðóëß÷ ÀL6@Zë+½þ2ŽPÚ+6è*-£±þf°[äŠ/ŽSAøÆ ô®XÛ. UÀÏ`>+lÒÛN\Ngéâ ‚ïû9$W­Ð"ë¶C"Ô/kEœ¸7XkwÍWóáÃûáü‹5Ú÷ëP“_,»™'£{°ŒÄ$6v…<›T¿çŒŒ&÷ÏfŒÙbÈd Þž_ìB)û^âJ|UZ3,x›¶3·¿êÍÌm”3¤ãhïôÿ¢òQ£îÆì–BèίxϱÏWЍæBj€µ ýÒVS$„@¢Ox¬íbò,ÝDþd>Âm3Xf%…ÑšöUP D> %ø8›…cã6KÝùãl¼"éŽÁ 4Ý%9–{²%4:ÅÝ]@§ƒöù8A…@Œêê<Dp0‰kuˆö'ŠØÌB{6^58yD\U fY!T¢ÚÄ9òZ°!¬,ÞåûsÖù8ÉÍø <"¦‚˜¤{mªË”bëö3 ”7 pW¥ê& »)/_;2~Œo()[‘þííà?SQêBZÑ]\9NRQ×Òg£P’ÓIkÑTrf‹áé°ÿw˜`¶5¦Ž!#™ó0Õ$þÉÈ'ëœQSÙ eE_×~9†¢Q·Þ¤óexa#+ØÉaÇso+7y tAé„„?É“tÎÕé¸!!/éðŽ€Ðou“xh ‰ÿÐt¿+÷B”¦ ùžoæ{L½žhø ¥5¾n?G~xdë\§&ÁÃë´Þª¬ï‘hfšŽ4£Pô}¬ÓV}QÏ7Ï=Giî=‰ð¶œflKcutî¨ðdâ>|@ÌÜ[¿ÆpF,§ÒBxP*ÚÁïnˆ‘¿.å<æk¾š–â¤ÌÑ5ã’ñ8´÷1xŽ`ƒ¼=Ÿã×ÔÂ[¿‰'Ìú§:Ø9yƪˆãèÈÀë²ÚfØëœùÚ†`!óxíþÇT\'ˆ>Áž8t²h4yÄ޼_@«ŒÊî“¢é¹ÿÕ:”箾×:Ï Šp¬“ÛÉ×çÒƒÐì.Ñù–môüׯ¥rI6‹Ê™]™Ê\åýœ”k ·~|¦õnëý1/Õ/tf}’ïóÓ@ù°èí¢µ*Gá¼›)|ï>öM´½„O7Õt{I©±b™f.ãu§વ¥^pn£à~\Ÿ@ûœu2kf÷.RÚõkq5oãp1óè ÁK2f-ö÷«¶î9Ó|_Ýa©—Hù9Ktg³(`‡Ê ¬/{š*\BòhØß#M`µæš°ŽŽ{õ[–f3V?SRl®ÑœH‘8✫’iüCE-·æ´B6GDf"ôôPÁÃCl_äXåçý5g{‡h/V”}](Ìž?ÎÕÄW«šaÀkLu&½–WY¼j}øh½?Ã>ŽY^--Ê °¹Øm¥Î§h2ŒFKïŸÒÍócÅk`j®²*·%é‚âÅ{ø»ø+=2µ–ìv÷»Ê²²ã3(ž$[ßÓ}ñ.«|‚m¬ b7š­æüÆË¸ŒªjLÀßû®-){;ìqÅNUÍ‚„9©sû¢XDi£€)µÇ×?.‚×Ú<ð)wA7â¹Wþ[ài6š:Uýq¬»¬tôM‡DÖ/¿^tOHìG‰N% ñ!U×—ˆrlˆut}›€\– òxÄ)"3 ¨ëdçá:=ˆî¤ƒÆ¯ÎÚÚ\úeæß´àiÕ–“4 Ïg`éOP­ª”F zÉiŽˆº°Ï!r0 ‘Že´îº8®‡5J|¾ÞÊŠAkë^yˆ{s 5ÁpŠD*ûHÍàµmã”*ç…ýJÀ»æ@ûCødïòÖpW—zhø!?‡êµ9öMÌɽÖ‰³ƒà RX¿/Ú=4ï^ Ý:W¸_J¶·'¸Ò/¯¹k®%. DÚöK÷F`ð`0N‡ZçÚ.TÂþŸ?MÔ;˵¿­ÉH²$c}6íB„ ‹÷=:(ûA æ%³ð¤ŒAèw ÙX‚¨àM“›Éîì.|E¤̱‘ݨ–ÿÔA2©QO± ë¡üh8 fµdžÄk 4¢bD*Ãæ÷ø’îc¼¥Ÿ ·ÞÔÉ7…ÚžYC‡ª1hX!éf¾.^Ze$éMÍ£Òëú>æ¸Æ„—ŽÏ€è¯)_ÛœL8†·gëêŠ\~MV±´?À·±õ¸™¾8  (@\£0|óùï¤Ͼá¤e÷ˆrÔ¾ÛñÀúu/×ïJ»^õßyq—Òý ª2JƒSŸ¹Œôjbã„YÐwÚÊbà¡U¾ G—ˆ¨ˆºîdA¿ Ç> \³é“®6òòòÕ˶ÓE!Aí¢ôs·Â¼fÖ¬HYmçž324Þ…²¥ßÇ*Š>ƒ?5©Óãluø£” g^œIë e¸†Ç¯Ÿ¾AÆå`±<°O(€½t ktO¥çIb¬Ç¬h«,C"aßÂø`¹§%Z3G¢U¾hÒá…„ ÿ±eäåž9Ì[àú¬Ná™Ó=£îD\Å%ÑÒGÈÂÝ¿8}¸O?n\Ñ;æp¤è°X|O@et~”;G>–´¿Ûª Jæwß׈µZÈÿÉÑþ/v†AûÉ&µAHd¿Y°ªÙ÷•Ó8M¯[Ë ™6˜\™[öRúNï95«ž3Å <›²å§¡ãw‘áq3s/ߥZrůNÁëKPýx¡”çp¥òvæDrîÄb/Ãê¡¶ªl=åôµbó>ú­öqzr…´úã5UýsîDKå!œ÷X^!èoAR'-e+0j°.˜iå›^ýP6T=÷sqLê÷CL†› ,Ô¶QÈ?µšÎ-˜Úkc77/‰/®:Ížù?¸×¢Œ¬È™æH‡¢&rq›äަµ>ôæAF/Õ»>ãµ¶Æ›rÁyµeÆaá¤àE Œµo2ï;V /b'ý7AX):V9|óÛt(†HxÛúTzˤ~_G– ‹S9·_øL jUªäUYo†Q5‹ ÞÙÄßïôf«uÁ¢À¦]Ó» s6«›—øévå4xÖ-μ⢬³*ünbåðQý¯þ8™BÍçH‡ ?»Qø„E÷ÊIˈ‹¥¦ù]˜ðE‹.'œÎ°óßœ)ù…÷Jܤv~ }ަ:,A¹ÆD@-ƒT–ÖÉ]êÁ*Íçfm>ŽÖ±ÙÒRd:ñŸ©—KòH\ñ7A´û RrÞÛ8 “¦â¹cš„÷ù c÷2· wPìVÍš—#Þ®OÝzˆÔû²öø°à§)ßÂ$PÖôkB¬›’‘íäLT 2ø|¨3èb§ˆ;d ‹¦av,»µõsæ¶…RŠådWòÍ(Υݚ=t{qëõT¸¹ñ滆rT¾j›sz”SÚ‰¤ñݦF¾²f q€ŒèF$]ëóˆ"NöâË‘«w-/Ùê° n¡®ç‹ÄQñrÿ6™ã3ªsï‡"ÜbdkT¡­®Qépð’_q 5a’ŸX[ÝEYg?©;ޏ¥SÅ–#ã"FU6»xZ ™ƒŸ±R%*Üš»í¼B)ˆ4˧@­~åÄLN e÷7ïÝsþ.Ÿ¤ÿ…Q÷K‰#÷³í˜zQìñ9}WHĦjÿË:ÛòJÒœ F WŸò#mÓ¢¥ú\'çíê5¸Âß‚SÍ]8LðþG%IMý[söåu´Ÿ2Ñ®ç÷Ã"°ÀRdJù3U ¾X43Íùðåh o²°¸ù FÉa²£ùÊõŠš¡›MF¤Ó,MLÒíA Ö¦0?ñ©.Úæóþ·Üª\Øru-ùÜ›lÜ“Nü8%e‡ÿòWôTVÓd‘?ÄÉkûDr7xbR9k,9†sO--6©5?Ò@#ÀÇþ4ùƵÇã"÷„ühJ=H95qóÀU/AÐrî|Ž»y½Î/ºÌo|%jÑ+Ô{cC0fžä¯D™ ¡ò^õ€nêÞyܼU­^—8:â/ȆojÔVåw¾T=M””—Š%mO§·¿ŒL®mrwJ_æ Ò·T¶®ÚC1y²ÂÝh°¢ueðÑíØOÏË´SWnÈ$5õsääCµÝZ±ô½¿~TÙ¿Q†¥P@€zP)¡¶q—´Ê\ %-Ÿ>~ KåÏ—{B†¶þ¤@ãI× ]ik3qÄêoH¾Œ‘#iGš«ŒÈf›oLÇ^qVëøš†(o£õ9Øž_»ùs]n[ŸO è˜@cäúd%Ÿb žmnèe°ÑD$4LÊ9år¥Ütc~Rã®Û6ÿ…ê×N¿õa.¶~ñÊb†¶.]íåLæjh<¯À²œ[²b„4ù;<<’Þ®jä ¬ð‹:ÝÊ*kŸi×a$ÆÝ%rÔ´šÕnÄ™k¼‘¡w—övMI×qÑãËñfSZ*Ùçü?[{…Õ¯þÐ|¯yï!ä‰ ]{7Ý™ô b±]š ãŠw1|§eaÊÁ oyàä*êŽá@\ˆ)r«âÍ2E Nø?”ú6_íw Ç61„.‘•ño¹\\î‚ t\Ôc•ñLÉŽ_ŸÒôÚ`4µ÷¶l)DIi È–ðn ædíd´Æ©íå…r6&¢f/HB úi~Ä‚ÙÁÁ@ü\›å¼Xªl_“mº¼¨1¯V&-‘¿ì‹ÐBh.á\2`&×sTñ:¢êüƒ'"ÂyJuç#–R`Îùß ¿gVòc¹×íé»g³1ºÎÿéLý:|`µq‚[NƒeuŠ,ù“q9Ï¢ÝÛ§´•ú`¢WñG|(+ÎØ³Š‰ª:pÊŸz}¿œºfS} ^‰¼„µ9ñ&d:²ZúwßÖ5Úf/žÀZcïy¬ê€e5˜ÏÚ¸'xut$ú´€æFæÃÊUtl8ƒ‰ŽäJ¤{;”SùñHOÖ6š˜þÿª¾¢ÿ-³“^Fš˜0oÐAš‚*–j] "Û½Ñx9:WÈÞ’^Ð̶£æ¢ô#o³ú¬ÉÿúÎWrtwëñjTHçþ ¬ ¼ogëºûàIZUùBñ]µñÔŒ‡š>@ã¥As\­ºÄ0Rÿº2R‹6Ëû­)®4<×uC»ðýX&m^-Ü%6Òí6å­IˆÂÀ’2jVæ8nñxÔ½ÿÉ5s‡aF¥AHל"Q;ï)<Û²Øo1~v ó§ªxú=ÒdX5}ÿ GØà=º[˜ÊÈ\w,¨ú¸× æµ0×òí„rúÆdÎT+ á/ŸøÎéŒaž”ßKtΣ _‡Y?…Ð_¿¹¬5<¶¶˜M÷mÅ}êTpéƒW„$²¬ 4¯ÔÉÊÕ=¥º3´†1pž­•ºjNÒþÏâÑÿÿn]E6SHaH´Îگݒ"c•ðÇꬪßâšîQþñp†E¬•¤{õzÜ£øåž2û_á7t¶ë©¦I;ü¦;<:ø€ÝS¸Pè1Ó•ŽúŽñÄRfüxB»"äñ¤ÁÒSA– úMé‘çÖmñJAuÛI”nŒz±NÒ8Òp×UOŒ„" ¶Å\N®ð°8•õdÕaQûyðÖ#¤x©„”™\Y˜?R(Xܹùäߜ˱¡l°ý»Ë*ªÊÁA§ðÀúíý7”¤bVÆTVöŽÊ—ÉŽåÈßÌóëlÜ.ø³ œˆ¾ÜIlžôÝ\~®OøšË?C×s—9 ê{½›Ñ‘Èz©ãÂÒƒ'¹T™«Õñð»L:-ez²„Éw…öæ~é”öô¿!¦Bɸ÷ ˜›Ú-¥9Ï™CWcíWbG ›°˜»Ä·˜<(ÁyÚM4ÙI©¤ˆX’ôak>7ë¶}c ÜÄ·îI)G8ó»ç•Ýâ + áv?”°=J öŽ+Åðæ¬ ž¡ws<8f¬–[ý·–ìÿ‘ñ¥öVcæFf¿ƒhÎHèµu#­ÁQ1ç ªº©kµpË‹ŠûiÃ|YP³ Ë­ LWe4<_"¥€k`öÞӿ퓆¨äQ!à£kphö£ñ£wQ¹‹n.,˜ŠË!<ç¨y_`ž Øù)­¥ÞWäT­ã˜³÷è]\ýI¼*-ãö ëÇJEµsÜÆn_À—ZÔgK÷#1×±DZ¯tM=bP¼þ×áËÅÈ ÌÂ#` ÅÈ7! ;\÷aüÇ]‚y|³f q{´-F6ûZøýX¯©Á oÕVòÍ:ª‰R¾r©î¾!WB%N÷Þ¯álœnMYQÄ7wŽGÈð×^T{È\pËŒ '•CiŽ+X¡G˜mÆÏù©p\·$=KÓf!aï ü¨Ykôò·!¯4{Û_ê(•w_¸½êÓãc(¼ñöüRª—â|‹,j0$ê-›Æ©·Ï:¼1~KžÐÃâ;åí•Z,ˆÃªöRKô" ›™$/mÒrW. ¶Õ$Ë(Ó¯K¾£c  o˜C¼ˆN~_guRoFý¸³ËþÆÙ¿¿‡î6 À§šš]î}µÛ¾\Ÿ$Ïi™¤\þ¼.7Ô…cqøùi÷8nswå>’ª•)ÒÖ|(#Žíøýà:ЛêŒÐ€$û´óÓ (<àlð€„0¥N`i/¡Â¥¹9T¯Î)=1…ˆÅ/´ÿ±”úÈêüõáø¨ßúP&‚;b.Ìþ›¤HHP–tûÅ…tc •遲³JýùŸ×wPxú4èý'„O7\Œ; Óëýg°™—<êl®ty"T´™ŒÌ[°'ÕªˆT{njØ\EŸ­bAøåºäË¿_º9´ÚþžÑf­HÁ0ÿ&/õã–ž†,:;3ý]<³ùgø×*pš®IM_ú«4l4Ú*à ÈŽÐFïRAft QhÙ,ƒ dq´§%ßVŽ>&›§ÿÅÜ‘N$¿¥Àggplot2/data/mpg.rda0000644000175100001440000000401312540257772014043 0ustar hornikusersBZh91AY&SYAsz!áÿçÿÿÿÿþeÄ@¿ÿÿð@0€@%à p°äìœÍi•†T i‘Œ’4Òi Ó@24Ó@h昌ŒšdÐ †Œ†L€‘¦F„2§ê’•4L&Œ`FMR©´Iè™4I£ÒzM¡4É dQ£@)I"bh˜E6ŒMª0LSF€4РÐ7võëÉæÐmÔk5™šÖý±oÅèÏ7Ù“™ÚI]ÝRZ>I´GOS2®ìc1­|úÙ·~ ²Y¶.þ‚[öf¥Ü6ɬË%uÄ­Xf¢Ì:YYSL,skYadQNYV]¿yÕÝà`ÌÁ8Ö!ÜuS¾¿N@`+L CÒ¯*@aì¬ÐÇtîÉ‹…úðÏæZv‹ã‘VAãW ÷â̆"һʅ{¡JÜŒFæflâ˜rŠ8Vä"J½«ëÏíàâ4±W9 ¯Ò‘BJ¦£×jeêyª\®QÀLVt¬-‚r¡'Áõ°ƒ #Q{lÀW`Ð2ut²ÚP$‡V\Šë‘`Â$×,\æŒm±€®ñfTça»©N'NÈ›Ež i>gŠéŠúZã •Ÿ56íWÁÓ‰C!Ér34¡’M 71è4 T²BŠ›¦.…F¦NR;()ÞÙàu.+ ‘+Š÷Í1Î`8Pí‹•(I,Rfɰzà\EûÞM$ $è@ ?Y¶efgŸ~ä Ä„"Å2ð–É1D¥”•‰33 ‹€$‘„# !‰‰$s3+)pÀ§Öù&e_Ïɘ³ Í5³#e[d¸å5‘f&em–½KmÚ-e”¤¢úVk«»F1TÝëÜRjâº"àŒÕÅÆqe]Qr Î@ ´ ÷úÓFà)ÞëËbij\ô̬ÎX›`uõr‡GHµÆ¾m¹¯'`ëÞâGWÞ:px¸pߺgö5sûÅÉtõÃnÛE×Ág|™´gG*¹vë–T݇Dì–pæê³‘tepɦ³ZÈÙ3´x¼FîX¾«¯¿É]ÞOêž>àî»ùÊ9ÏT»°m”ߨ–þKljr¶^=©Ïã߰߉ӄáÃnžm|t•,²£,f ù§UþHÒ¹5ÝlÅ™—Ýe‰aI–™¶Å¶­ÆÛZÅ›»»£7w“fæêÚÛfWŠÎÃ,Y™Œ& Eƒ$˜˜¥V ±eD§Íû´[F0Â2d«,F1L«"±ƒJ²°VdL¦ ‡ RiŠdȱYOý­0beˆË!™ 2©þS°»ØÌšwùt³Æ¶Úm–,Õ–†å¿umöÜ7¯yønÊÁ‘©é5£¤óVùÑXqu§:ƒÂQŠrÛ>lÎzÓÖÖË3a»´&Fëm™ërÞ5›8Ítjºnæîæ3‹ig3Y´ÛMÖì¶-Ͷµ¬Þs‰EœÑ m®o]v]¯:«S2»üÏv^Šñ×'ä´‹†N+)9¯'5âË-KÒâ°»ù,ij&ɶJå´ÌÍ2037v11Šb&&& $‹ $…~YÔÎ!:KV£um7w?Œ¼·^ƒŒÅ®´ÌÝtÎnlËŒã.+V9ËŒpÅÅ\k,Ùf³VµF³Qa›ˆ³cm&Rd2ÜE¤E_§¯ø~_&¯J®Ò¬ÚÒ´ÔÕ4Ó%Z*ß:áZŽô¥×æFªßŒ¬W¼¿YÀ]û³Zw­S 㽓q¢ä¨õn®4èV®‘´Þ87V•í¸KÁ+÷B¹× msGI©nªjœWQjXv±\Ëô\ç9Ü-µsѺ8R±×q¯/Õ’30™…“ºqn¢{ݦx§³°³0¥É'í£öö?Ö¤yÙç²G>èž:÷=~Á«Ï#ÃDyMk«žY[Ï»ôg…ñöLÏOº¦‰ù烔O{«†ÄÃ}[ÓHìl]¸=nôÛ»“qSHÀy˺ Ö¡®í;#—> bÒeuVÅÖ;‰Á8­Öô«Àvú%²5—Þ®Ìg+È\Q6JÕ®íÆN:êÕ6®ŽõÈ­ä+~ ½85Núe9ÓhÚõévÅ¿…/]çžl\4š­ ÖMM†`̬1ï)ºãk·©®Þ¸œ•Àr‰ðþªÉÿgÀ½Õ»1ŸóÃ67ÁòªO‹ÿ><§ÜÛîn?ÇòÖ7¦ÌÓ,ÍY¹f¹ïfm‘ß’F;GmxÑÊt]^ßÀüv»,] ÈÿU`‚Æßm½ò8tnžÖ"Ä*È(„!$õVÈoynêÈéq¿jr%  Óq¨;4ÑiþžrI¡³ß_±+ÅŨ›e±LX)¨&{:Õ›Â4”Âå 0{ÜN|Ö~ƒm‡º'‡#7ú¡b\P¤øtø”ôò¢¨ntY½ñ² ã쬮.n§ðþß}·÷Ê:ð«u8ôÝÕäãl#} ŠÝš(6£vÛ¶)¢(ÊGúÐ=09 "ÂQÓ“äJù’ΜKô~i±P–OÂn–ÿe÷-^…á*¿ ÔÓÀ ªÂy×’WVÜÉ>(b#Ì—£…8¬ÇApôÂDdºâä¹$-íâ­‘˜7x]ÊwU˜$8tˆAÄMjù§SBuL¤–T©-€ẔbJÐë¾rÝ8“Â^}mÂÎãcOºò¹Êí”èÿKÓ'WM,æ@ 2±ÔåMPÐÿ¾T&ñçT‹ÄŽÕ‡£¼O[f_¦Þ‘.àÿ¯FrÜ–««âd‹%çêÇuLß§R9KZ„AVI´4Ò ?WMT¥–fÏbâ²ÎZŸõ©û"5Ñ&˜#§äNæ|Ve˜Àÿ§j²WXcÆMXôíc1?Ó,XJ`>䓜ž_ÓàÓLP8DáÜçѵùèÃ*Ä]—1ݧ¥Ùï刺L*춬{]~;Õ«î7g¦ÄP†óxµvûíÅ@§Æ7cöñvL*Ns28)"9òÑs5¨­§{ó<Öõ÷4á} `j5qpŸ'×5¦‰œõ‰ýÛK ä fL=Vq½J`÷êÐ>÷ÖT³['®£—€µÙöéÆhMÅ{¦¤ßëÅ$%üŒ¯äEk<œpÕdÃQí*)_ȨÒÏbÛcÀqeÎ#ÖïÏë#u~c&j›Ž!r™É¢•ßeÇ ÈíBÙk¨×P–Ä,Ñú³—|öÃûsÛnÖ¡¯¥óXÁ»¯¿Eøè¡øÊK+tp–OÖb–¹efuî¿é(‡Ú;¥«‰•«…­ò+}ë‰ ô«nbÐëwôú2Kqk{vžKBпuJYXjÂ5‡J5uõYŽþUâŸÎW=z‘lzÉÙ0³gI&gž‹ªØºº#|‹~Z(^["´D‡ôµÎß2Ÿ—Þ8·ÞŽ:Ž÷DqÙæä4q@:N+pÒŒ’QlÎäâJ1¬Ò ”ÛØ¦Åm¡œ[´Êwcf’É#dˆEDÛù¾ÑçÞ7žóÆÇ‡–å+o4ß4~hêwkl¡¬“%m¦mЛ±†j¢4U¾ýw%“MeqúÃðµˆ@€CŽ÷IŸÙžÿÔ4. ñ4ɘs0[tmøÛëtWZRkü·_ÒhÙ% Ü?Ï'ZZk»óÁ Ý®ÁŒµÿ=°ŠˆŽuým ÕËEmÃþ¯ûBEó¼œÄ˜¦²í¦e]¬jÈhÍ·§X-¯îÒ+À7¹ŸñøÙïŸÉoÆLç¶5¿iw«ù?(ßÐe…\Ý$ÉßB›ÇÃÆ†¬\äTB5ãM;'ñ/lr|Go¯¾]gKÎëy±ïc ;+ÅlhgþtÐ$ »Ü>1ø+ü¨ÇL¾•‚«#º¢¯Û”ØM䟦›y¹¬ÆgÜŠÏïÞõ!0-ÇqˆOÉ›Éêiæ GàÙÒÄøÀïÚ]0$ªSX(ºGV=°MT#Í3Êâî.ridj“ZQÙè¿C–‘ Ê •Yáä¾wÉ™iÉî¨^îæW“ëÛ‹ƒºœÈ¢úZF8ÐÏ[`€)õšˆØ…  *¶(ûœhê"Ž5¨ˆF}«)ì/v%u”µÖî‰)coxÎÚPxã'TÍ—ç IåìVHì°K©ö̈k‚f†AŸœ›îöïP£v7ƒý)2ÎsøùÂ?i—þJÌ2×ü­t<~j°Ä\bÑOó÷ú]çM3b$¿yÒµêÑX àÑÃ’’È|nùæb':)Ïäo¥É>_ê¾Ô£ÉW†Lû²c¼×¦ðù9{õã^/z¢ nGëÆôŒO6‹!Õ‡ ˜Í‡ãFÒ›è P~+O"H3½²vq£;~i¡-ÿì, üË]Ŷ÷±±Ç_l;¬×'Äð%ã‡í+üOcìu¸úB¦`Œ³ƒ‰v ÄO.T5h¦Th# «H´KATŠÊ¤EQ=!˜´$‡ÿv¨©D.zË:RÅì(ŠÕ‘±² 4ÁÕBÃih¢™ZEe¢HJDG5Z¥\èu4è-4Ä‹U•&š–È¥h¬¬¥)Df•uAOL%š ÓEÚüZ¾'“.žçë¿åèÀ¯àÁ² J¤KSQ$U¡R¹\ª+UR4QY¦©’T*¡Hµ©˜r –bKJ´¤Î¥b‚m$µJ£ Ì ,’ µšÔ2:©JZk-šY Ujr̳9&©Q!‹MŒ‚4*4‹TY… I(&(!-#9«R¬²1RÃê‘…Í0@¶rK””‹2È™fPifT¢C@¥±- eEu@±LÇü8àÓ¢ô®ûn Ã\c‡8ØXfÇ1Y‰ tÐF%Oƒ¡Íæ´ßu°ð{êhI/y‚If¼ŠÄI‰ôù›î«ßç¬%K¯˜ pžeÝ‹¤#r3y" +?qii¿ºä7¿ÞcÇÔ"¬þY˜ggm¿FT¿6˵ó³²{SEd$‘ÊÀ@„îax;šü·ãþF #ÌHPb!á¡}Êô("S^8d)ßbEF…C¾æ;þ;œàúž¶¿ìÓ2¹EgYˆÊ5ìh,åìÜXyþw½Þú 2³ ­djí|nC™ü\_óJfËÙGUª ¿U®áæ°œKÅS@òßGLZÉvw»ŽZ®ŠïºÏ×Mûþ*Áªölör0lñ¨Š µó9íïÿ/ÃRZæ „NiyÖÔA£Qg 0P·Èß2mó3ÛÌŠn£¦ÐÒLˆ¶º|éýê'Ña*.e£ša<øz(Q¤4)ë÷ßr# dˆP"t´±¡DlkûL&¢íñ¥ÑYØpiÖtP˜šIušó#HަWÚÐÛps¼YÒäY3÷) P] ]“®q¡ W[™¦¾OEH„4´u$ˆ(Ú0¬’ –çõ{ ùNÂPC&kb"1kò—¹¼¢MôéD‰Úý¾B|}†”?¤!5uÇuòMø<Ü ÖvfÍ“Ùï¯`Ìž! Új_Ç]‹ý4’eÙ •$ĸ°IA³?Jý¯ÍÐKO(Ñ$®!3I@K£þ™<þס¤…58é@k¼˜„DŠ 6y¿“îÚtχ‰áåð[ÍD*äqb¸5 ! ,:{¥_S‰ L¢I„Í(’L]ζl^NÞD°´’!I‚©'iAÇÍ»ÇezÉ »DíRÀb„Ð& ; vGKçîôÖ_®D¨‰4 ˆi113I,猪%ŽÝÜ:«íÚ˵št\XN £–€(Heþ  ÍA yøü¿m±Ìaú‰Š¬=Šb‚±‚P!îZÑD•tJ$ÉWYû´Nõ©/h)@ L Àéc^Ý Œ ’ôÑ$©D´HÚênú¶úPéuÔñšsæå©%H¯p +à@ Õê¶ÛðúRH&RÜ@‰!>F ¸Èêû}]ç$ì%Lhhè ‚QBh„ð¹Û^¶ˆQ˜3ÏÒw½¾²ŠTi¸­sÛÍÙ(C̳6;ny̶»_;«mÂ~ û0hÆäaåÜ^Oà7žÏùò?ÝëìÉëVkó,Õ53Œøú‹ç%öd$e< "M´TžÙEÞ­u‘Pd­l;ì*_ïÕÿ3®áLSi6©²Ã‹r¡as‚ûl˜Œ6ö"v¿ªE A@8¦âÇ»³„bêqŸÖu˜ƒGò%¢Rú>wnßÉ{—2ÂJuŠ@·œËm¬stÕÀ*£ !‘DX{«=WȬ«%=ãH$è,UÙV‡Ô½^|.¿èR'a;ƒ<^ã[¿ÁTÄQ®z–›ƒ!6–p*Š.:AfEÊXUtãÍ$〒Š% ”RE’l®”E’jk+…°œ=Ó¸¨U¨r̹¡„µ˜Mf­•g4°Í•Õ.Y\Ð¥-d'T(.F¡™©ÂÈ«Dª™E%Z™iU£4be‹(C9+(*YÙ˜\”(Í–Hg l¢ŠCV'… §R’Ói•’ZÕ:a*Ìâ›BN‘r’32“L* ¨“$‹…ÊH¥H‹$‹–DWH-X™‚¢ajH³BèABrÅiÊÔÂ3г¤È̬áaÄ®…@„Ó ZjÄÌáw x”Ó"ŠÂ2Â.h&©)‰y›€p%V,¦ rfå5\å )e”–šMZ¤ÉN©SF$E`D"È ”pé´å<Hð ’œ(³ZA&Ë8QFl#SDªX[HºUYe%­,,¡ ’¨Š‰QQeœ.Fq,±¤n*ØÇ 1‚ªa‹AZ b¶X,Å­Z*ÊÈ£+ÙGis 2ÂRVŒZÓK2XLÃT¡VQ¤e„P#ˆF‰"-¶$¤±†,«`ÊÖP•µ©Ù­¦÷~è='c¦ñ_‹Šðû?¥ÿ¹§CêüOt÷Ÿdi3¬,ó<úÉåM°„ü«cÖŸÿ&g%»ÔÑš¯GÚöd•–9«n$Ñn¤:RÊÇðõšJLÙŽðF’<¤‹‰Âß23ÌåÒø˜õ­XåP³Ôà¼ÀجnÉ’"}W\r*ŒUSÝY4ÕÓÊ·¶gæÁÚm¡âàà€>„÷ŽœQ}šÒ/ܧ÷ØÄÐóª0ó£ð»ëÓ>'Ê‘ØÉÉ“‡woï!Äc(ÐEßµÆ,^$Ô;B²dè“"ÂÁ×â¡ý&­SªG£q9<üsLp¹lŸë±DÂúu“(}ÕlÔP/ëKfcÓ÷+N ¾uGAŠ…m}­gS¶»Üüþ]YÖ‡ö©—kÄf¦»ÆÛÇk]z™´{ ÿ[A[o¹Žx`©}nÙ—-Ìxº-ÓK&ä¨or¶RºRÍo/Ï&¶HÍÛÞñS¨dl½7~Ö½Méžß¡ÚQÁi/ït¯<"Í–1Îjÿ—Ké(§—½,º‰ÀnDÐ ôËvŸ%Dœ€%˜É9þ¼–u ôq¦sÛ—+Êß½ÿC£@‰X!GbLø‰JQ(VúÖ7½ úþEfÍN0øTòêûZŸEü{=$$—[ÌŸ¹SÇ î®EÃ÷_ ÙÊpû›çÃmü»ŒZôš•%HÄ*Ù:‚åôá]–¬ À:Èú¾2Ö'SË€Â*AiD"N#Kq߉0— 1¼*´ðv&c"00'H1kaCc6t\l”™Û±±ˆŒ€BǿڢBp}”³S@®7ùàŽ\ºi2´CŒ+AŒºI¬*¹àä>t‘š'˜—OÉ).²dûcF‚|„ÿ›€!kTWZK}!!÷ºÝ7)sËn«C¾^KÌ»;Žl–Ñä$5ZõwäMÌk¼ü_dÝÓˆ[w#AxÔnöi¬‹™ø|ËF:\§¹eÝ«½x¼G»îb3gñ{Nbï/4XÇè`ý»èLƒ&Kó`£ CÂo‹ÉWÉû+«F ÑÛÖrˆ.†übê47ËÄÌÔú“¯Ó÷µ\½g“Xî{… ÔôÞJ&–t¡ºAC¸¯á@s!ñ9™\–ƒ—ÄcÂË/©•(TÐaöž —æÒª«(Réh«•5øjD®ÜÛV¸»ûñã|2F eû.lï.—1¹Õf¨Œó&Lžb¦K]ÏauGÆ—Yy¨ÿQë+¤Ó°-±žx.'ÔM°ÉÄ.ÆÌ(n«¬]âþšóÚMÕ~Èù†ÕUÈ|ÛøŒN¾;Uçú‘­†2ô˜×¼‹hX‘%8‚tdNiHØŠêË,±@&e ¦þÿRd1Š.žo¡€Š)-PÆdk²I¦@ëˆt=yVâû›”蓳ýêÐV` wwÕ•·¶oYb“¨ ]ôÞ†1yZMŒÌÈ{Ò†Zõ5éQ~&€£%¬ûì_¿já§ø?:˜¬FÁŸù„ä V2¯fûž¡Åqƒ¥Ê ÎñÒGà‚‚ îê+"Þ}\Õdæ[ÀoÕy©ATm-¥û®1'`œ ´uNÈÆëÔc–66rf]lvr½ ÐWJâR’ÛE¹ÏöÔTGŽ'Înåo ×LÂ@Óc*3˜\Ú`È@³Φ¡ò×íç)ôz·Í×]²Š†ôAà­¢¢TK[x^'?¿©]w»™W­Y)€©B\@£yžGqGZácX ÄšXºŒëKj)ÓÍéôp‰ÔïáW†ÈÒBÑç\BÃ%ioàîìÿ¯­ãèöwÝQ¿á m¡o(Eq VÊi=MDÿ8NvJŠEê}c¯w†ötºÑy7gØÊPÔüý [ÿé®ßO )ÓŠ²”¼ñPªàÎz?›Ñ×;$É"Ë*PvšD¥@ŽÊ)ŒâL¶éSN¤dÂŒŒ–î8)ºÕ²H<' TUWPÒ̦0c†w00ã:Ù³0Ѐr„>ÓÁÞ¶‚š@x71ø©F)¹õ\ömf1ç¸X X†â$–kšüö¾÷š; C”´m´’S¶˜66ÐÆ4Ûm6ØÓI¶6ñ“P ^SÎÞ,ùN3Åñbê°Ÿ¡‰óZb³|Yv,t:5R6!‚Ò«ÄÀÄ R“m#ïÉm"+Y-C‚VbKÅ¡¿üx*,b“ªÐí—+R©ƒÀ>sHEðoA„ø†€5 ãT @*ôw(.9é¤ÁÌŒ;Xp•âª"¨â\¼J‰´¬yÌ0¨)½sj;üš\/…¨bâÓ þ!C’VOø]þ ¬iˆ°˜`b D… ÜÜnvÏÕ¶YWh ÄXÔUØMí’D0¤ ?{&â îÕ&0Ï&N™Ÿ»~2þÖ@‡ àî?Þ¯‘Ú*#Ð0q•à’$K1“€Dãgyuæ/¿C×¢”¼ 4ч‹ ŸD¤è´êbLO4xÖ2JÑkJŠãµõó”IÖ4iõ]Ëçö t]åk«Q&kKr€ Ø(NðñÆ7W"Ð À>›‹03’Vó "O~®”öºÿ~¸DÌHš‹áΠ€P†4\¼ºñë‘L@q KŠZ‰‹$7‰‚¢@TIsEŸ¹5ËL]ÛmJaSQ—dvx:ë®Ó¦“å¹ò §Ž!»mµ¤EAŸÁôø-eŽÞ¿K$Üü'xˆà¶»^Œt6š ‚:V³Ò@$òᘼòÚ¨Ô ½{¸Ι_ã`ˆh±Å\[ˆ>ÄpG¦Ê zk¥Šw±&kè&™ EA´¥yòõzh©pÙ“)©­, Äû PF¦SgooŽÑyÌ 4góЦãgÊç´ó76[]5$¦s´¥ø¼; ß² JÁkZ"bÜäoù¶æá×öÓSipmãˆ2´ "&m´XŒ%l®³êË©ž ÿˆ  ˆ½¶^VW/·ô®h±ók¿=f$ÛuµÎܳgYÕXᇔï§f¦Ù ‡wlèhd®ÝQ¶M˜f‘ॄmŽœ!D Xb ᣞî%(}LxÛ“ÎiýOªx4w³}L޽sàÆÏ›½ŸSÉ¿,9ML:µÅsÇ7ŸAr³¢Ê\‡¬£u‡6Ä:h˜Y\²â35gg{²MÓ BpŽ3h{Xî>›æãò-Î…¶ÆÆù&ÍÜ6Û`õêu¦ËV*ÛlÁ ,(ô#wq˜ IÇVKƒ¨ .Yu[BÀ&¤âj»ü¶JS4Ló3¦^÷¦g¹ÏŽôjŒÐ'´†úpúÜ'¥Ü7Úì ƒ=}œ¤T,Ç`Çc8—~î_–ÿ×ï&0nR¨;e0eÁÃÁDArŠÐØÆ›@Ût›|™ee?gÀì*>ÊX¼+ÑzÚd¼²ùCY3†­´ªÙýлžBÇÉËà$:ð´VŸ°U1ü;ì£õ’ªZc©ûs)ئ ªˆ•SÅ9RJ ½ÓGöÇg]ªU†:ב>ÛcxÇA!ë:}ƒ¢ûOézر«§e¥¥KÈ;­²†üË×éøf—Õiéf_©3;'Õ"ë ~3†–‡ë•%Ò|Š!EÉáa%Zíl»É›¥hDÊŠ<Ö÷ß½æw&¡“$å P. ;²KêqB{àØŽFFFx²»TÕ”µÙþ?)®*¶«v9p”Éa¤Ê¶: ìõ¹1ÛLíL®Ë¥Íþm‰ÎbÍ„ÞIí¶"aÉ’ÒokÍ%E³M‰ãfûmFŸË¶ùXZêÏfjeAˆ¸-yØ´SU7þ–Aè£0F¹Gš’0sKê-ê­ &Åq±mͪ¢”ßð³¶Õ÷Ÿãìµë`‹}`ñYâPޱÜz•ÐlôðøWÇÁI=ÑY…¢rèÒ©è·Ç{¥Rnô±Å.Ó‹n[vñ‘ôs´œ›A&¶Æ]-| Í$ ™¢”{ø¸5çüŠõ÷‡¸ 2Ÿ»#\0ÔBåÄ¥,&=BC\–¥/²&Á Â/—‚ªKŒæßÍô¦¦ñSÃѯÁr†6ä÷6þ·J£I´’Îù‹¶óÿsº½®ûÕß]2{è#½¯/™ð\>  Ií¥[i"(( ¯«ìÐt½©USÙªW­¬Ó@mݺʵ£Uvê§»cÞêl¬i½Üw 20 –šà ¹R’Q TkP„JÞë·†è÷´;I%5•n`êèÝ]ÚåZÖÛ§º»œÛÃÊó¯F¶ÙvªçwgvÖµK@ÚZªÒö=wÚËo@zâìÜð[85­¶6Õé­h;gm@5»»½f´u¥­­×jÔŒ»p¦•*bdCÒhÑéþÔ¨¦ši‘¦š4ÐhÐ4щ‰£hщÀ˜ƒ@6Ó@ÓCLšhÀ™42`LÉ„ 4ÿzQH 4h4Éêoÿýªªª( a0 ™ÄÒ3@SÁ3DÀšbdÂ4b2˜„i“!“&&™2i¦˜ÄdÈÀFLF `CFF ¦LH‰dÄhÁ2h{4ÊdSM14Ð04Sd&ô©0›DÚL4iˆÓBy)ù4È¡ ƒ@É› 4$Ó@SÅÇ%$d‚éTZÀ¬‹{[Î^üQ¦¢›ú6Ç_Ã2«™ìi£¹Ñœ±‡IKñl¦J8Æ*W/9’+M`­…ÅC4.d‹k·R±‰Å¾RÙ²ö&­SSÖêT˜R‰ÊÒ”µ(¨4æÅ)PÓ\Ám’¦Î RŽñc– ×è›Q¥±)âš‘«ª vÉË“š¨R©›¦©=â§l×sD4xOÌŸb¶f$ÛyY#¦SuáFµòÐPÐéÌ¢—=Ö¡ìG¨ÖB R \¥ÃHhù ̆”ËíÜÿ¹ ‹FÚáôtêñ§aìÿѯ¡0ŠU¯}8hvÒeNfÜ•¹`hê}Î4çÿÍ}ùÏ6ÖçÔ_Ω?ã–|Éã¢ä© [wÃF^S:†ò[möw?¿ÕÙZIoªUSÚ¿“ó6dRr#gL½²ôØIÛkm›Y:&v‘r·Z]».ãCíÙ_ƒ¬7s[§ U|æ9eY±%gÞO‡ÞK…â±_}βåsðøY}É>/R¢›± k!êisU:>Å_Tµÿcµ¬w¦õHzû|ÿ»+Vd”ÛŸýoƒ¾1Í諳ùVó{‰•ÜíÇF??‹ÞÍa÷fLÌS{T¨yï'š­zÜ?+y*îþRFÖ$ôxüs·ØN‹S†Œsê'8|»êîç®·7Œ|Ý.žé€Ÿ#ï­G‡>|3m 6îã—çÉêSãf»«Å¥ÿ^Êþý<¨§d$å.íÅßÁ['ÁåèÓ½é+hoÔy=¾.žÔÒ7/òÏÏXçøû %¨SØ¥Mþ|Z“iŒitÇO^ÓÅ>ÿ‘¿÷8ùS-,jø¬ÊôšÊ9Ÿ.Í9Œ»)[¾÷K†Å¡êDèrÏ!až*ÿK;Žºô2>q)Z/z!"³e^0h|HWû¾’Ö\G\úDÎdðtntÙ½k¢WiÎÑ_Ÿê@iœN‰‚FŽ7TN™¯Bô6r1×þŽÁ¹“¥ºûù+e¿?gú† 0rA\AŽc0YØç2s!—?íò܈²Ôµ):h¶æ6Wˆ²;D0s-czü§ŽQÅ¥WlJ §XÕ1£—ÖÚ™Klj¶õzkiZãk™q©ŽšT·çYˆ9sYн‹ýuxÚ ìïÁj{-õE9ÁåWò~^×Þ}ÞÞÞ›~ù=Wß$„!«´ ${};ÿˆÍ-[¬HHa$€''r@øåõp’@*OC ½BIM†ÀÌÔ¦¾›XI ½ºåÕ¡¶®O9 ÊY“^‰\v¢rSÀö²÷9­½æVT™½úg”'ßg1+_×É1ˆšå:”u<íÓ·NÝ»véÜÓ§Nõ´¶;ƒÖñãšK=Ò®0†x›°²I%®d’ÿ ŠÁô¿î+Qøn~M§OCÌÆü¾¯Q Ùâudb2Ý-æâòW#F"#íiSGy}‰¥uÖ¸ïÚ<äf\w’Êvl¯×;Ù…§gü°£úãêy2è°±§qqþyõŸ$‘eŸöǧW×™‘U}­wiOOâËѯÔôú0n¬ô<úÉÎe·÷Ég«y“óÑû¯~? Œ,OÇÇ?OCû­®’ øåìjåélþ~šm?ÖWÛ7gkWG7gùýÒÓþéé¶Dí­½Ö¾ÞÎÞÔ…ÎÜÎpý ‹ @„!ñ‚ l|ÔëšÀ=ÐÚÀ|ø7Ñ™™šÌÇ&k@ÛXðîm¬ƒ(m¬@:m`7m¬à5€s€¥ÖkZÖf95ƒm`7ᬈv,¹5ÉÙõ«“3ZÖµrë*ªª®jªªª«meUUUÍUUUUÃYvŒªªª¹ÕUUU\ºÊªª¹ªªªª«†²ªª«zªªªªÛYUUVõUUUUm¬ªºŒËÅk5­k3.MeÐÜjªê·KÕ}—KUä¿n«meUWWÖUoUUUU\ºÊª ÜÃXxÀ¶æºÇyè€ ÀkͰ76ÖàÀsÂÿ¯ÉÖkZÖf95¯œð=óõn©u>Ÿ:çè½ÿKÑç½ÿSÈ놰±Ž ¤ÌDºÀÄ®;Ó—X9ã«ìõUu­eUU_™oUWªª¶ÖUUU[ÕUUUpÖUUW°«zªªª­µ•UUVõUUUð.˨ø=>kZÖ³2äÖ®†ª«zªªª­µ•UUVõUUUVÚʽEUUÍUUUUÃYUU]櫟U_ UUÒW.²  ÀÀâm¬€ µ€ˆM¬þ{¸ë;6³—CßÂ>ÄmÑ¥G˜Œ" Ü"}s‘ÿ‘±FmB!ê;dXÔCü4mѦFU* ]Ñ@¹¤kѰF1CߣºE‘pÑï"*2ÈŠˆ‚°"À¹älÑžFE°¨°"|è°"ÀŒº!†!ô\û#Žê6hõæ"'Œ‹Ò:èç#èFݤf‘ÀtÑ`EDh‘–DLB0(þÑ*"£Rˆ¨‡:/ˆé£Š‹º6ˆŠˆ~‚"£ˆ¨Š™ú5ˆÏ"%ÝQ€GæŽ"7¨Ú£ÖD?þFAd~¨å£æDTkÑ<ôEDTqÄFÙd]Ñ*ˆ¨Žˆ¨Ã"*"£ ˆzDGF=ˆˆ¨Žˆ¨Ã"$TEF$GG ˆˆzDHFA!4HG¶‰‰D„HDTGDTa‘⣠ŒŠ#£”ŠDHDTCŽˆ¨Žˆ¨ŠˆèߢB5ȉH‰(ЉŠˆèŠˆ¨‡ÄHGðŠDIGþD”k‘J$£ýD”rQ%”ID9(ЉŠˆèŠˆ¨Žz"HFiˆ’ˆ¨ˆ¨ŽˆqQÑú¢B>¤R"J!ÅD„EDtEDTGG‰‰¨E"$£¨‰(á¢J$¢ÁQœD”~’‰(Љ‰ÑQ4HGºˆtˆ’ˆ¨ˆ¨Žˆ¨ŠˆqÑì"B?¤R"J"¢B"¢$tEDTGG5ÀE"!ÉF­Qü¢J$£éD”mÑJ5’‰(ЉŠˆè‡QÂ$#ŠDID8¨ˆ¨Žˆ¨Šˆèà¢B"{h¤D”ED„EDtED8¨ŽJ$# ŠDIFQ@‰(’$£Œ‰(Þ¢”IDTHDTGDTEDtDöÑ!dR"J"¢B"¢tEDTGG=õ"‘ä¢*$"*#¢*"¢:7¨ˆ)Ú"‘Q¡D”hQ%ä£B‰(ê¢J9ˆ’‰(Šˆ’ÑQ4HD=Ê)%Q!QQ*#£j‰ê"‘Q*:"¢*#¡ð@ #¼`I$ÃI!XÊáÒdóÍÑ:#úñÍ@Ѐ'ˆI!$"¨0 9¶N•€Hñ’H}„“d$“¡$ø CË$’õ³Èo;añ¼å;¸Ÿ¶¶RÖª6‚Äid¨Y-¤* [@£m­Ym©kZ‚¨Tm*T• ,’žpaæÀ0Ù°*‡2Ÿ…'ÏìèÄì)!´Hm!$ã¡àOùBp哌;gë@„dœKÀ¤ùLšf €+Œ„ƒ~Ýç»;>ÿØÑ–ßÞih»#jˆ¨˜ˆ!K2F逺²\–?ó åpr@SŒ["êÕªW“ÎìøR†àŠx`b ¶ÑhÙVÒÒÖ«hÚŠ"Õ´£D¢ZˆŒm¶Q-ª6¬ekjÈ+kZ…e¶¥b–Û•¶ÖÖÔ‘,°…H6ȤZÔªÀ¬@P•$m€ªIP„ ©!*BT+ ÂUjˆ6£+Y$=Nú›Ã'Õ@®„Ÿ+Uð@BFu¼V¶zw”&øôR}!Ü’rÊÎð“ñŒ udM®×cÎÅÛ¶Q¶ô®M¨A}à´2±µ¡­‹E¢Ñâ# ‰rU’ ‹,›MadXŸaW@ÀŽ++{ú~˜ù_­ª³paá÷ÐD¶ ¥U*6Õ¶´©iBÑ¥¶¢#-ªÅb¨­¶ÛQ´´¶6¶ÚÔª…¶ÑJYilµ­¨%*YUmRµ–«KB¶T«mª£Fµ µjTAm²Ñ¨[YmªZ¶¶Å±µj%´[kµkX‹DJÛj¢Q¥•´DjÚ*6¢Ûib ÑB©RЭ-+*mF±¶ËP¢µj4¶­U–Ôh¢1µ¡AlbUŠU)cV¢E­Y­-ª%AKAZU´mŠŠËh--mR¡ ‹!Ö¨ ;rµnXÖ^ƒ \Ç:Òä -óYV Ëõ y>sµ¡8vooÀI;º;º}vIë‘r_í@ -™¦ì–k5˜Vk5NÍ*‹S$6Tö«2 žј7Ì#Ø`±7^Þ䥙OÙÇÁÆú¿­§k½JÐ2ZÖm¡9d‡œ›8p?È)€+fÿPp7ƵšA’;¦>ö;Ö*L–‘º›Ì6¡ð¯¶ù¬ XǾÉ;t÷ ƒ¿3sg:Ù†æý”çÔº ²Ì, i¹ŽBå£Gç¼NNNNNNNS§)³’ÉDºA·d« é2X†4íÞ±è0},ãt°õÅôü?†÷‰x„—ÖHr̽{†o(xÄv¡Ü’vlëØqLà ӼwMdöˆwT=˜ÂqìþEaÓ q(åNvÒä‘8Ù¶6µ¬ˆw~[wõ3v*¾Ý¹;Œ¤ÄÖc%Ñþ?ä¥(e¾ßo·Ûíöû|È­öÿ%ÂúØ “/qn÷g‚šÇÖÂÑ[ å0¬ìu˜ é¾J}£ºé•£è±að’æ œá3 íg2C!Â¥`³™jviYÕµ °R¢¶vŒ¿f’»“ ê‡ZÖ ñPãm‚‚ÀÛÏPÊÏ‚%H²,™á,1"ÁaÛµC1£dœÀ5íÂs ÈÊ8@F4jìhÑ£F¸£ÒDÌÄ/a*îéæÙÞÝŸ¢ì2ôŒ:G’tH§Hý´æzÞcÉqÚ¶§Ã¤9̰á²/Hœ;1õ)*dSꤩ:Ƥ†…H°Yç“ê|Õ¡8•óèzxâ%dûj¤X)µÜfÑ¢v YÒ59vV¤R 9ô¨lÙ9̆d3fáG™ÜÐÞ ”4444444446YSæ¦8>sX, »%dXn°Ýd7™7™¦¤ë©ê’¤w.7í¶¿€ñzûRzt¬Š:ÌdöÌ*t©ßž 4Cäl¬1í˜Tý—¿ cÿxŸñº0P^èS,‚‡PÔžBÓ¬NKØY¢G™²=S*oþ*†!ŵ‚ÃuIX)Š|~»²Ãœf§á³Ü'ï$Ñ'»jmˆTî{·ÏÞ47ê**!QQQQQY(­Þ"]M1Ì`s 9„t\ä™Íï0|L<È®³›LÂв;wÝv²¡ÂœÂÊÕŽuã¡@ü~{¿–ÒÚe‰„5âù,ñÚÏ;æhHl-µÚ)ÝüGZ«îˆ‹£¢mgŒï#Æt41ü·„Ï!ã@mxŸCŽ›í[oòÒqÑ\ãN’–£££££££££¬S«¨Š‹¢'‘Q™FVøö•¼O׌÷›‰tD5ºæâèÉñg|<å[IãZº“ó§ ŒÄë¸?äÊ-²°:ÞkŽIƲmc„Çétt7b¦ÞèÐZ`<7RU.ý†CK½òæâȬ9š«è{.Ù'Š&££r££££££££†Kå-0 .ŽíÁسÈlƒr¬.XÆ€Sµæõ4è=u׃Áy‹åŸ5ñ)­လĔ޼Ö‡½¡Þ:úú=?±ÕwÐé ·ºJ¾“ä…77^›››››››š9Z[!½žS‚”ÚCáSqù§ì=ߦՌO"˜G­ÍÜ–ž­ñ0!û‚KÓ™DlÙ1þ¾‡}8¬õ>ÖîÔ„‡YëÎþ¹îa^„†¼y~£Ç–@§.t´Ñ‚ši€®hšiû‚ñ  0‡A…×dV«VUN¨…ÐÍ¿mÇñøÙèHÕh+ÏׯտfÊ[)ö¡8š] G«ü*ùWgp¡¢ÒWLa‚NØ_‹Y—(& îºÊ¯þ2̺%bešÂ÷’ÛzörT l3À2ò›Úkí¾_~ºtŸ;F9lz‹\ €€é©«pÔÔÔÔM©«$GB‡ŠËÊaäs]Ý2ä5'³ñÖÉ4ï=ÙéOé©”¤8iw–  ŸC•j‚¸ò²4y.×ä\{NrƒÃq ‹co !Æ™° ”B ¢ 瓘r¬ …³e)€¦›ÔÓM4ß&°5+‘0†W¶ïÆìSuØ€3Lœé5­¡²‘hvrU ?AÖ6< ƒ ¡¤ó\M·ÊÇÖÊ 1õOfÛ”Ó,_›1êXÞÙÍ»ïåºa(¯?ÞØç¿Æ^SÑÂqo‹c6AŠ.ÄúÊ‚‚‚‚‚AAAƒGfŽŠ3H²£TŠlÕÕm9»Ûa’y T˜Ú;Q©9à„†?ÖðUß@FÁë=AßømS»+œ4U9dÝ„÷ rDÿHõ)uáÈÝ›Ów»ý©µ¾Yí]„ûTRLä7«ð¸0Ø÷,Î#`Þ­þ¿+^fbÁèÕHÑ£F+K¿´ºÖ±@ÇØÉô2鷺ƶ¨Á5&ýú{ôx½,º"óf:.Pú0“ü_|‹°‚{R‡ü;’´(xäÝØî0!è„~?·dC†7Çäâ-çȱ…ŸWO@š(¤ºŠ(¢Š(¤¯ÈK£¶èêz¹m$$WöR ½}´n+ÅbõTBøî½M,Ds²¾Fs´€„÷WWudC%yÚ½Œ$!dôBëg¼BÏç£}¹S&Ñ4ÓM4ÓLi§þ£òFDT‘ÏôkÔÄc¯wW‘´¶ÄB¦mûå’Öeö´ª!ɶÙì´Ut}ç¨ðúŦ$žF.³Ny/íȽi¸ùì­'3 «ÔÊCÈ €$B°„R5††^ …ÀÄ´f©;Tø­,~;à0öèK¾þ†KÝW/ºfÏ ÈÕ}õm>ÂÙ¨ör1k“KBE_Ô»¾‹ÓY“M4ÓM4ÓNé”!´¶è¼žŸ{!@…a½4®³ÍjB:Ñy ‘òˤŒ^1ô{öT§‘ìà£gÈôÝ<$z8Þ³+aý·Ü^wÅyì«>ÎIþv¿þq¥ìò$@E9råË—1nTrçñ!l!Í!’!¦ÖÙ_&Ùþˆ€2˜È¾&F·HãëbZë*Šÿøäcë‹×˜ú<þçdú%zºk¶:0h¸@ Ì„êV›öÝ™¤õzüÞ…¢ªªªªª­‰UbˆU!wºn§"#€è†óéãe.×í{·FZÈ‹ù ÖÁö–W0 „B?¾§Wi—ºPôoΚè¸oÍW*̬tŽ«ŽÖØmùø²±ÿñâåÏ^iA”øA±xð/‚® §Oº].—K§ctº\'eÁÿ´¤xû ‹ÈÕt¹›û.ä¶/æ¯n{.ʱ0Ž—îR}6È(¯$¯^ŽÅôw›Ûc½þæZH=×òò5yíÓÈæO碾‰ì¬¸Œwæ ½AE_eË9©(Y`*Æ5ò !«ãÅ?·oÞ»víÛ·çP‡ÿ€!ò‚àÙY¼|{U‘ ÂT¯söªlš¯ ñ@FªŽôßEʹAÇM 1õ^Eí‘\ÂÄ T(P¡B… œ(Su¨ˆA­—ÿfš!¾}¼}4öhí¢­n¨(ðûkòÍ“ñ`±‘¾¡ƒ-…ÁADåbÓ™Ú@E1%¹÷´>ƒ5ðÃ!WÞÏîæY¢A4ÎM4ÓN -÷ë!*C®B‡O‚q ÏË%º"µQG<NEÇiùý>íÿl„=*šž­•kCÄ=¥¶“syÁU}P!–¥o±X hŒ¯gc1è®…ä5!Í×ò´lˆHÀô9ÚmËB¸©Í³×ý71㌠ãÄÞIC¶Ûm¶Ûmcš‹Ê7hÜcäRÑøV‚œ#MûRúÈìÆø"EPË¢£c¸ró÷5 ®×—ÄÈ÷{è»RWà#M°‚œ±¢w—ÆFtêT‰i¦‚ÄÓvšk“èoöšÎZÕÂîáB A.]‹Ùc?çcRÄ÷ß<º-¹JÏ‹¨Ö© Ñòd0w,vZ +Òr?ÞퟬËAD!iò„z’ §o„ŠU82é"£ñå³>ÇûÀÄp©€‰þL‚Ë,°%–YnyâÈùÇ__òôC³‚ÏÄLˆ|÷,wGEÏÝT|>YMå6d?¥Ò„Ž"»"ÍÙ{p÷|]Z­“Y(‘jPÐýg¤ò64ü<4'çæ§çççêóóóóø4yˆÎ£ÁC×é”Y3ú›Ý†û­ß`,r%¦l› Œîú†Ë,‹–7¾ ÍR’þ¡#=ù9jÇ‘Gä»Ý¡"nQÈÂÂKi´Ëû{ÎZ"3tüw¬tr× LÊ”TÚ********ʼn{äÂ.7ü'ì>#Ô§¯ËAÜ]=ªÅÐPAydˆùËì4QTµqžF;kv©C¡‚‰5£íâ@E’'MÍÍÍÍÍÓ¦æææíÞM“Tð}›‹qêÔˆîoîܨ©Ö´) ”Dƒ¬„‘Âï^eÒ¦ˆy,‡³Íèñ [_WQ%V¡PŠÍß¹¶þMö†‡aìƒ$Ó‘M4âM9O B°p$:ßëëfB– }—3¾­èr±qµ~| ¾ b,2ÊÑaò‰œyäw’#±¢!ß—‹f 8ð9ØiD.šÚ°ÈÂ€‰T2dvÄù_F«däcÒ!NÐ|ÜÜÜÜÜÜÜÜÀ)¹»Q &í~¤´=gÈ`Y÷¢¥1˜á˜ßârï`cù®í¹¢Æ!n Îß×`x„¤na¾k)SÄ1šõ‚ûeØÂž †pé·²z!Ñíà]²!ðÆÚšd^@úí÷wìNRnÝ»¯;®»‚nï„CšBëŒõÒß‹ìÁG…PZO.wà:÷ˆÐüÜ t²/? ‘ÝzÙHúiò¨4÷ð¸h†àAge5éÓaŠUJ÷>&&,¼ü…¯£Þæ¼.ë 0À&a†aßü†³qŒ™/ºŽrõ @úCȨ8„°[wO"ÙCïfr?Õãÿ¸<;ÜÂ\ß®a™-ÖçTÖÂG{w¼K†öˆÿ!"iý¸vÌ…ÃuE Íu×]zú뮺õâd8Ä,Njf¡?ÓÛáÈ!˜úfT¢î5f¿j¦ªéh†úÌGÚb:ÓD*èöæÉõ9gˆA4C¬y ß_yõ½fBñY±Ó²!UŠЊ(È#.Š(£XÞó‹ ŸB†–‰il/é°þ £+Pð÷ æâÁ—ˆ#ÀÖw¾þcX!yâ/#’ºq^¡i!Æÿªwìˆ9MGÓÍ Èl¾ù¼¦%è†_oƒ¹XàI£víÛ·°Ø[·oX¸Ò×ÙW܃!5Ìï8݃Ñ ZùX‹‡º ©ì†–@â&jè·W.Ð…Ç@q 7‡ñÄô!ëórl§]©i8ÐA@D…iÌÕˆhé¸Zá :”æ×á¢äó­§§wêÅDBwÉ,BíÊ÷öãíW°Ô‡§#õ2!";ÚŽÇLˆƒ2í´S"ÿ@çFÛÙ ‚FH›¦éé„>ч„Ah†§©0@ÍGZ­D+2üÏD J.YþK¿i÷{ZýÿXI›Ó1û‡/Öq n–ÿ"Ȇ—Âq /NÎzi¦ši¦œÔÔÖ’g°Cq¶Â–·òìžCÿnïÖÛjÉp–©,™‚‹/…ˆVlåŒŒŽ•Š–ˆ/±¹ì @Gq÷‹wÈì²Ô"‰‘^¼òfßZ¼X±E,Z¼_åWî#êEÖexJ»e}ŒÏí×ÚRõåïðˆŽˆÍm:–ø¯âkúÏ.=oÇAÀÚ3!©¤ËžCb$+J&d<–x‹Ýš¢ÒÑ$’I$’”I*á »ñÜÄ>.n+g[˜³=AѦâÛ†Üqâ ”úY­C1ß3 Ž‹þ}3‰‚ŠÞQ%”|L&?éÞˆX\¿·WÚ_Úý5Û.U ֳŊÑèÃêꮺõ•×]{ARÄ'´uFD*m¥’²ó¯F‚Åù’"¿êð=rÐv‹ßsú“ÁZ#’¤Þà×j(ñ×ÇÈt:—ájžudo³Mƒ.J7Ðiòcb<$ç.©Cë^ˆ¾¹*é2Ç&¸ïØßât;9'®¿ZŠ™¥ÓŒÃT*«Ñc‡3õ#ËÈìA ¬;ßgm=Ÿö":ŽÎÙUF[Ë/ÃX‚'{ÙS2ç,TAQC=2s¯é®Zòžgy²7´[G'§›äÓô«¦ê¥óðöˆÄ’vvt1ãà¬¯æÆ‡ou•ì‰ÂÆI@?@H9X]Å—ÉÕƒpÇ'zÝÞŽ¯7Ë1Z¶¾BZl«±øÝ}_á_ ±CgÍÈÆªûÆô½LYÄÔ¿…2ÁŒ Šõ½kNeó±«V¬¹c¥4U㢛ÇÚµÿWÞ±Z¶ë–²»g8þüR3w䟧½q—¬$/—bÍÝëîçk?ÇÌÝ^°EÛU¥ê–ú4|ë=‡Ø‚(· •ëÎ2ä¹~GuíûÐ#i:>D«¬Y°#Æ…‚ó #3.éîß/àªp¨ ÆºTbÇ.m®tݬ¯G¦R•o—F^RÓ æMön­±ÿ”Þåp†ùÿéŠykbñã6rMô. _Üç㣼ÃyÔ²ZR ·÷Îãeÿ'ª Õ#ªÓŨág²ÐmPX°¥R’““Ïl^M¤f}¯OÏ¡J).­>¦m (–6óˆóÔ,šØ{6Æßw¬ÈÒ°Œš301.¬P§ëïSq_™=½‚(¾"ÒÍ·#· sfÜ,´¥Çôéòî”;Ø‹.¬14…[Ù˜Õ«ÍA·6çââ×Õ®º®ZÈ¥Åo½Qc´åùX¿¶]î—É¢;`Àç'œ?³°7#‰¶¨»o¤+"ã`Xxu-¯N5õßNS7q]$Ä ¦á0¾êñ,IËÌx¦Ü"B&ɉôÿ5ÅÜŒ‘mR³c"wµ}U;î´ÍÙÊTM?nõî샮½.D wÅ$ËšÚ”fŠ󑃹A³ß«ßë=ö­ñe\^…÷ZÔK6n`fÖiÿ¤ßÏËjŠ©µöÌ8;ÛÞê5u\aÀÁÿY¬ÿÇ›E©ÜÐÊŽEçôÇ®N¸•§fƒ@Á ”Π'ŽNC=-–±ˆÃ þÿ+™½Y’ïX7éð$3c¦+¬,]á£þWÙ8|N«J³ÑÝ!Ë%Ô³gäÕÎWÏŒÎj¢ä––ú¤¸Óù3éøP¾Á¦ Æ;`Ú㾿¹,u¢°›™ȼß_D¾¥ºóÕý·ôͼaªÔ½tòROlv _xÉIqæ´y•ÅEo™ì¢Š`óhcØö5î²úÄÆ½AùÞ ³ó:¸ä•g›Áðª0wyì |¥ÿz•Û†rˆ ð:GQ–EQ†Õ¿«fòßòƧ9§³eì©´¸N½3y}‹»'··'5—¿ÑA·w/€Ôòu©ŠF•Ÿ£Í§E*æžt–-ç9A7yÚ5æ.^1¹TB$ßGæ-ñx­ùÝ«4¾&¹žåãé~¼‹]»}׸¤|?Ý©„¡Û"ÿÏq{xÜj`ÕÂÅAèfìŸã >§nÛyö<Â(¹bŒÎb—$$*/ÃÞBPîä•’`ùNkÁŸÏ•ê½ÏиVÏÑuð¹à?Åã~Ò”(rÎõ5›m R”Í<ªvK…JáÅ;²ÇÝ÷GMÁ³ ž{¬ä¤‚€~š³÷ãƒFUpÑÛM߯à@¿Ý‘èîÑ£¿^?«ÿ4³þó2æGnrzÊoÑÐ’ªTù×ú+ïàyòfqåìF6B‡þ©ªÍ%*ù%zÓÕ;÷˜[ó6 ­èí3~}E•½I×7zÛ³jÁúÇíû›í¨™xˆuó6K”Ñè¯ú]h¯»ÿ㇕ãA`¶ F~ƒéÍJz\çç—ôêŸ8”ÏÕ’H÷:ŒnÌ—ÅÃ@YP9P$ýÂrás`®¹5BZÛfj`ôÈűÿ#gù_ðô œ÷뮹“…óîÿùÎ; [vg1Åu¥û}jލ¯¨ø2œ,gÄ 7„Slœ$D¼çöÿ¼%ö] ÍŠÞwøz¹ÔI²È$áW۳̾Úàó÷÷_ËÞB]Óó¹îu*×&þÛ÷?ÈjÍÓ+‰©â‘¾Êð¾.0óŽ9Éèz5;‚I' ¹](æÃþ²W¸ÜT9ôìZ–Õ %Œ?¥ ¨¢ÌeeAkQb– ¬¨ •EѱE*-Jجª"Ô­µ¶+°Mº ¬Æ[E[hÅ­XÚZ¥–2–…@cD–6ÙkVlV[V-V6ŠZ¶Ä+-¢‚Äm£ZÛX-E[Jª‘E*­µ«j«iHV­,P£X–ÅQ¶ÆF´X–Š5±jQ¬|JŠ)ƒm€¥aJYEúM˜$¬µJ¶¶V«R­¾Õ3(#+DX«ZÂÖÊ%eEŠTkBÖ©[Z* ¨•©Q` ±JŠ[Q¥E‹Q…¶ ¶ØVF´(ÉJÑm©KE”AB±il¬VÚÑÒ­¢ÖTˆÖ«RŒŒ*²ŠÉD•(Ûem°­kšÎ`Õ%j(­«Dç-ŽP­¶¥­*,Ü.Ti”´Æ;‚išWZ¦•BÝ+†˜?¥œG¾ùžWé÷¾ç澿I黜=?Þ<Öãªkµê¹_;­¹z_QfâÍÎî{GLf‚óN=.†&6ÑJ¥ ¥XÊ£^^äÆ-evô¾†à9¡mKS¶eyVº6Ê-A+bÖ (ÖÁkiUK²¢Êªµj•m•P£ •%Vml˜´¸† ¢1UÙS2”¥-,R§ÛeAIm·vTÑ—(±Ë™IU¢ ²–…im”@X©‰naŽ+r•Ts  3(bE†2c²°* šè1¬&Œ¬ÐP¬¸R¢È¢Â(ÄXbJã €¦8¬(ÀP°¨æ” M³ª1+Y2ÜjŒU©¬U`ª(¨ŒÊT-±,fŒ±¶­mn4G.a™cl¶Ê‚8”ÆÛjb¦e¹Š\‹)‚£r·2•+.UW.[€áRå3& ¢å”S³.ap±Bܸˆ[˜QØÚEPŠ«ª?O˜ò[· «[k&Ç|ß7Íð›çƒÛºèw˜x8m²m¬‚¢¬’EP‚ÈHB(H¤ŠIa §ßa!RA®Êzݸ­…œŠÔݰmWæíéw4×n_›•Q”œôEþ{¼¹”þ$H‘":VÝWdAN æê§Ã~:à ¨6uÞË}¸‘í6ê\‡1=¶Ö‚YË¡‰îG“5J÷þÙ†5?CÜ%í —%4ÓM4ÓM4Ó°ä<Ûn×ù s¶t~jzº\<Ç·ûˆ¶ÖjM‚‚C±ÐEØó €×sn|(§¶Ñ8Ÿ˜ˆÄv8þÿÙ~¶â~Îä#åc~“S¡ð§.\¹u2åË—O![ì$®`ÌB'v‘zjð‡ØÏ<ý§[5"刴ü–²ÙíïÇç™+î4ú㎆b™!ÜñžnÝ»xöòmÛ·ê!®¸^A‰Ïw5–P ^à„·{íq,™¼¦ñê\Øý†4H‚0'㌦É$H‘"D‰ïˆ=B; GZ›]™¿;òÜ{ TÏÈv½jÑ ­I3',úvì ¿îØRr+¹#Tèvš-£Ý7ãjI$’J°’IB%Š!¯ÝM‰·è3„>Ò#ˆ†~ÊÌ»¿ï"1¿;ñÜ¥TH§M¨°ƒ›aç&3çp*Oû|÷W^YŠGÛ6Å”oÜ’jÚÚÚrØ mmm)mn„A³Õì{WËÖãCl!^úeì~hþÎT<3y' â¸\P™GëÃlL–óaÐë#EÄ1ð3ŒùÄ(2r ‚ ‚ è†Ð„qI cnïEþn(7÷Ë>bkcl¼ç}‰Y¶I_!öXnךBóqcmßí–ƒÉÊâ ‚ ‚ ®ƒó.«÷@"òw¦Z Q#>ÌUË‹ñÔ-Ì >µyñ@¹lm3­gúÖú%øæÅ (P¡B… é=r-›èË^6ôÞÍãC­ééqÏiT×ßïP>‹U{¨+§ëg=Xj9?¶ú72‚k¬¹ró×nL<š(£ˆ(„`Ñ÷óäÌ]-z©«9·>`ê­ýÂŽê¸BÔ¶Ñu¹h:\®?|û ¼-»¡$0}ÿ‹ŒI'ˆžª™¿¼ª»rEkìÔãGV#KÀ‘·m÷^¾œ6Œ¬phhhhhhHhhbª7¥^Ïb>KÄ‘siÒm˜Êìᵌ~]œ}¢y³–-¤–rƒÝïZü8 ý+ÇxñãÇOÈÃù]$QbRÕ9K[ÊøùSÁN˜l¹Ú®|s&†½ËuŒb[£Y1Í`õY¯Å>O¤fxñȬ,,,,,,,,*!Ø/„®Ä†c_v'nFD ÌÞ¯õøSºˆO¼âÕÔˆ(¥+µZôèCxÔÏ@_¨Â¶^ˆCžerƒù<ÑÈÎórbl—××××××ÔÕÒrXê,|9HvÅoëQi1ÒµÎÐd/)SÕóy æ>j=ê(Ç Ä8páǤCž!=dû©iʯ¤õÇäÎT5¯à~^Qz¯äè[Õ5ÀH€l–áðW¶2ˆ•êµyÿ ~q"élH|Ë,²Ë,²ËIC‚ÔP‡ØBй°Õq¹µëìüžšÍü!bÊ;jñàjKÁ¤ân>Ôâ?ê<_wâzòuŒ8cwµÎ¸áÙ+OÝïbªïn¥3Ô¶þƒÇºµY^ÕWª®R;?â§ÖêH®Q!{/ÌNnÞW“o¿úïGïŵßÞ1|:·¥£[äYxÜff`å™™™˜«2Hƒ@– Â#ˆ9¾hk#ëÒžÍ~¯÷½¶ÊY铯ú¯Kg“°óQZ0 hÈD^Ð\+!À¥÷Y£ruïßÊÀ8ùæYe–Ye««WRÙ¿A‚¾]q¿VНò†§ái_ô¥J½•Þ¿q½wõËäÛ@ø€UQdæ }˜Áfód0r¾ÏówÓ«ùþ¼&WM¾ÍwÈ0Ã,0à 1Å_aì‹­j4ú¨] Ÿ›:Tû#—.aÜ´ºà€*ÔgÁÝê—òuwZJù-éÌ÷u]“ÍÑbÅ‹,Y²œƒÖ ÕMêvë** SÜTèÿ./kƒ(Û¤j¹º³" _qO”R°u¾Éìv뵂ËTQ_ÙE÷“Ð^ Ð•ûox]U*¬0à K1Õ€LtÈL 3àRáz§ÍW+ 49þ„û´3€ur@;RAÃl%<É—æáªÁg…"t‡£%‡UähÐÿç¬w)"D‰ž ˜‡à xë·UŽo?¤9´yx˜:1)~N†–¨ëÅâߪî8¸´zñà[&hʉô’ì #ß 4€,‘ R»]§þÕ°ÃV5ºLÏ:Ù³»þ”4Æ[qáÝ<Ó“““““““ç'5ãd@{NKíÞIì/»ÞwÒÀl…<¥ˆvHè Êe™Îs0á^®¬K±È1þ±²@Ó%ƒfú‘ÿ#_·»mõU.¸üe«ôÂ3ÖOôÑ1–tW×Bƒowï…ýeŸ3Ôô¹Z\w÷v÷ç®],•ò«á¶´ÏÒº™»Y‰ì91Ù˜1ç:0Q‘ǘVcmFÜqªjsZ³'@‚¬UÒÊ“ô9mǮº+EŠ)¼³M|ÁÅšRžeàíÕlÚ­M7Š\)ZÐTp¿S2Ö¢xá­q\³ïœêý[£«MN­¯F9~_ãü¦·¯á6eóªÓÙG•~ù¦ŽÂttŠt1NúŽgq€(ïÜ€,»²² òˆ ^ªÁ„'|ß'+²`6̺ۺÇÙ‹ë[ólý‡ÐIib{êœ\Í_XÚá4_§Ci1š?¯Ô¡Òòߺ3Ú.)°g‡ÐAev¥JýÍæ?eTeddddd$¦­Å ˆÄ¿AýȾãÁÓ c\/{,r^­Íÿ™Æ†õì»›]¢ó) Ž@ Ú­€ ¤ß \¤¯ùµë6K^âebˆXáL0›Òw·®~%ë!S·<Ù…ó†[2dÉ“&€˜ „ÓOh!oÃÝVU^ùTµ»š ÆE‚¸œI3€n0‚X€5²ò>žëìÇeT…âGr¯ñY¨ßrÉпE—á#•ÔðM4ÞÓM4åӮۈĢˆƒi ËTê#ïaYóÄ{ôÀé(ù^dd þÖÉg}gìxªÇ\"?4mú™½Ú;µIC UUUV¾ª°ÊÇoHu5–Kï—ø‹Íà(µžìöoàÃû(øH­ÄuO\wD ±øþ€ ׺ïãâóx3=kûüty]n?À|ñø3Óši§[M4ÓŠ!âwЬl¹Ñ>Ø¥;üVWd9/(/ݼ‡³¹sf n 5su.@}¡ïýý+%Ÿ_ÕöèîË)'jºN߯V¢Œváu×]u×]u×–!LB@‡@‡@eøÜÝm‹ûédû¬4uZffÝ?¤sÁoño]¬<™Š7ú>Wí¥Æ`±Uz™Ÿ¹MÓ,8ÊGo G~ë¡ Ú‡bÓÞ“—ŒŒÿÏ ¾^Qñd¯=CLÁƒ 0`Â9ŠaHïˆ &  }Ò”A·ts°‘¼hÁ^ÄDzbh}½ÍùÅ6$Ÿ'ù ù¦p!ô Póp(![Ó;¹0}>ÓËï·ÖyÑU2`„ÆPB{T­nÑà±óí9vŠ º Taeý¼Ìë:9Y QÆ :4Øß¹Æ‚×ÊÄ|¢&§£øøh.¤G¬û_•\çlµœ"D‰$I‚,P‚d@_~ò‚\¯¯›>§33ZuNŸlÊž_w}zS~ú¢w:þ'}ÄßõÞC²éš3§³€úÄàÜÒáus¥ía†à 0à ^HT¸cÔÅ0Ïíž÷ÁG÷í¿-Û,ÐóìY ¯w³R…‹Ø<çÿ†2‹!¤ì{«tÿ_ùiãÔ÷0z¼¢‘wR_NpÝ»6ó-Û·nA)Aó\гö3ãÝå=‡•”)%0N{L8zŽ>A{+C¯ °Ì ‘.Õ­+GÜ>R%»r7 æΣlQô{ºÂ8âô/!ó¸x5ý¿CCAƒ{:ö{;ºÊ3¡Ô¶Båï\˜ð×øû‚báp\ar9º¥ßÃuNíãàÉ=×T_ꜛŒÆí!ëEbÑF¹aEA`È8!ä¾W¦þ Ö¡_RÒM2±d²6ö³¶ˆáÚçä:‹‡!yJ¿‘TOÀû6D()m Ë,X±bÉé…” ‘˜÷«6Ånø—ºÛ'¬öÈGÆ5¨¼:20·4¡"„ óU¸jý®îð€jÀŸ-´Ìx-;Áº‘¸4tޝò¹Ò÷YøyœkdtÔÓI©)Y©ii¥¶y-¦¼¾ä_g‹?×vŸðœÑ,ÉÊ[ª™ÄÑî•çžÏeßyl…DeýíÀØjùX €Š•*T¨ªqR¥i„ùzí«ùø$¶¶³Üºx·i¤¾)Çuá1@*Ê]úÖÍ=ð…’ çÙåÚ7Ý¿èêªsÓÓÓ×b~•?????†F¹â5ˆ¸ˆ*.ô0õ ©C™Ä¥—±›•%߃Š4TVÍ®ŽÉø-¢l,â«æ}½>¿Ï; õ1ñÎÚ(2æ–au×]u×Ô^jÙ ë=î¿ö6Ú<î­`u<ˆqVÉ‹œÓ×gq ‚ŽàÖæ_ÿœôm ¶drõ¿5þç5°Š½âWÄñ©ÿ[+è\0à 0Ãl1…{˜ÇnL±ÌZ3¯—¸2ÇÒµ¨ÂÇX1`߸Eì¹@ªŠhZœæRáÎ>zvº\/[=ó^ERI(àIXÏxCõ!è ¹ <ÐÆù&Ÿ>9Ñ¥„~Ãòè´>¿¨•^£õ/Ãí®ÏAµul£ëÔõ;·¨šæœúÍrKÜ, Y±eEë.ÒúýÁ+S ê–õô—\ýÒ©q´—ô”àÈÖÚlTé”#0Àe>G¾{<KCîÌÞh35÷ȱb€Å‹,YX±vœÎw³ùö;‚Ûnç§üb<õ}ì7åeŠçwTý™í=ºk[½cžèíé±d¬©M4ÓM4ÓM4æ>AÀ…˜‡CufŸá—!wÀ$„.õ?V蔳,À…;°è „óŸ'F†šZÝb}Æuu/ÕÂ4¶Iù«Lô:|Úäýw+¾‡Èß÷¤:?æž\ž‚6CüñêB¥R×Ò¿Œm@gɺžCðœXÜHœ«Étì°ôk4xÒêx]Fü=]¤Ød~b"ŠíÖ¶ÙWóÏl‚Å%ùWL޲õÆ_ËÆçº[=iø<{4é‡WÉ ó'°òy­½äôÈâç€ÄX‘(Ý@Ž ÎjB¬2ì? B°Ã+f8µ\YH3㥺«Žeëä*!ä5çk£ý*ó[ÒI{»=þ¿ËëåfÙ»ÁaùæyŽ!`½X­? S€]u×]u×°G¸IbF¿ûîVa.KmLõš=›IÀýq¢¥ løÄ¸Ü°Ž;s0o}~>‘ÍÛÞ/>.õ?óóAéÕtšÞeöJªªªªªªª«’ ÈEB‰¬^jtõ`…Æ}7jþ”µfi]~Ÿ÷Sy.¾é¬I~#à WJÙìÿ»|òJh9°þ^+šzñ˜Vq­æÐ_ýœî5ÍYEUTªªª •ÀúˆBão`ï×±ô"õ¾éKŸ½…“Kƒt®[ý9«tt‡Ð/jÆð÷.Ú?ÌØÏßh·GÎKÑÒĆüνf?‘ÙEôkˆ¢Š(£DCNsü±ˆwÈzm¥ð}×ïQÆ‘9û,ôÕoÝÇÿc9ùáæß$Ç” îº¬Õ¢s!Žñp„._jni±tÑöx¤<çE¤¹t•"å˪·[­ÔèrLe¯ƒSsÎá™Ô(ºæÊ´UÃ.µG\Ín"“ýõµÇu AèãäòN-DH‘"D‰)„D q„uù²!%§b->…×>Yô@Á ¸òtˆß±%§g›¼?ΠƒU¿È®m³Ä!Œã{ø$ÓZši¦œÂiÉ[=6}J3ßï™Ú¡uCBúF‰ŒÃöP«Ô§Lj‰Ëí3EÖíþ§ôÜ{Í–gNÝ¥kÅÅçO‘·àœe%<З¨–¹™e)à´N.…–Ye–Yiu–ØâºþZÜDãÊô;f?GžAzN¹#øö”„üt ÓXöמ™ÔØ¥]ünA.DûŽùìvŽÊi¦ši¦ 4ÓN¸C’Cÿ­ºÿÑQ5z-wgtÿž´ÝéËüÌ÷ó'÷´Ã03MƈAÓ¸Ùà+`DXÄòP{½þšxÕƒL5F7Gm¥¥¥¥¥¥¥¥£¥k‘`ˆAá „Š“ œndšÓŠýÈ (4ÌüL[¨´ö 2†.DX—©¤üƒë[Þó~~Ìo³ûæ¾t’ QEQEe÷̤(zUbõS߸²ùÁ¢v#ÇõþžšÊšµiñ6´†OÄÙuׇ]u×Quð$4d<¤"¹I-uuÇeÚü¶_^E…qüéõ5 ?šó™Ñè ¹ÙÏ1bÓ ÝÕUÿÑé€÷Ò›¬CMm}çkÅÇ._\¹rå˘֒ZÙCìpÜ/[ {Zi³y³.ÖÜèËÁhrº6Š$ÇÍ•Äj½^.IDšŸ“ˆðîQ.x$ÓM’i¦š`)¦àC~ Yï›Ü°Ë@Íé o؈÷Ôȶ¥äâÄA#:{]΄ª˜~oºÄ AÜö¯ÊÐr×a¼rÛL®‚ ‘I§ nÖ <à Xà 0ij¤6¤›ÄQõî5¬ú«çsÏÅÉ[îB_ZGìÓÝÆ‡‰ÿݰ¦ž5oÍÇ»ýrœš4… °½¤F.tAè€(!‘:$’I$’I$’¾™!´Æì{Ÿ@ÕOý葉Xuzê¦+šwßóI6²T‡ÐÛ~“ü$jƒfs8•Ôë]u šæõœýåÊ4ÓM4榢ÍMFa÷Þþö@Ø8™WZm!VÒ¾/Õóƒ>´»_§ ZÌ6Kažv¬k4êÕQ}UvÙ´ÓM4ÓM94ÚëÄë=9:ÍM6›½sÓáIÒ®¯€Òý3Ãö@F\ó#_1Fr3˜®OUͦ:UDȇÝûO]Lþé#F¡ÑB… mˆ 5Ä)H¾0è:ˆö,\·£cü"mà²Ñk621¶Ýw£H×7Ì ,TAŸrlŸOäAîÚJJÈAABº†‡òB¥¥µpþÚ¿cINšÍGøÿ¢«ãòŒÌÍû0ŒÃrß\6ñóµ—Q³¨kf;Î¥¯Ð|KgŸß^ú¿Ìb+— R†;ïÍÃaå[½·¯7Ý»víèc|8‚‰>î×Ì›A_`ÿUñ¿/Xÿ︫ýo^kYãŸkö–™ÓK=øe²90€˜Èj{Œcî•|‰¤’I$’V¤’¸yD)„$U÷`dÍuØUQH{lìÖ¶S¢Iœ\¥DrÆò öÀùÙ`m¯ÓI Z|ÂA»0m`š¤\4?î®ËM¶”èúx=œ-ôÓ+ã###"Bë'DA’ ØöÝx5i¤Dîãw ?È Êål<£öîΤž;÷šª#+EìÀ㢡ÈÕÿVCï‚7 â¹3ÍYY欵ý7Ž¥e–Yg(áÂR¤AX›5¾.åÏ”b¶ÂDEåªñÕÀ#'úEÍy5RëŸèŸ’f+–¶Ë€€…@Ž9“v—áïËOþJÿ«Ç¼vªUÓ †­Dÿ½Cé<ºÎ¿‹0Õ\ÍÙgíÁ‚<áÒsϾ^Þü›rNEt=Ö£Ämzò:ÅòeJÇCPn¢lF¯½M³ÙMþn×ÃÓe¯„Çî[“eK1šAÒº\ÍYX©áTUÆ‚ÍɸŠOËiU©P}N²¢ª²ÑµkU‘N¿ÎßÌ,³M}0Ðu"¿Ôéî0côù¥ð&¡o{øZ^Ï+-xïÏU)B\[€ÌæÌçf¹ %Øg|ÚÍ×µÖයû½æ½úh¥6жò;)™²(E"•#v‰Ôm+¸'é— íƒq'#PöðVEÝv"@•I ÌÊI7•ˆ(¬ªÅQŒŠŠñþ’ Ðô¥v5ÞöýÁ¦ÿ{[ö¾Ã’ªJò?Ä…ŸA§pK†ìk{?“¼ÌÇfS«oƒk˜å{´òrŽ\¹råË—.n„$ÈgBìÈëùv¦y[}&ÒŽ¼<ߦó/k®àèpÛ<åb#5þ(ù–îÜá!6ûïÝÄ>Bù¥¾»µÓ'QÃQEQE TQMÖçÝf?÷nÏ ¾’ÂXÀ“ÑQ,¿?oA¹+¶¢EøÜð}CšÏ7_4æ”Ð¥}ÖÖØ ?ªHÊ'Ë!€èZÂB‰BÃq!{¹­8;S;wbº RÄ-ÏŸˆïÔÄ^½l´gír*ò«ªçwÛ2µ,ÀY‰&ñÛÛÃ-âêR'o³Œ&nzþœû•¨¢Š(£e$5„5*ˆ\l¾kÕ4+¹WjÓXlU¯Ëëìüd¾iþX•íö-[kEŠÝíÕ>V`|ƒ-´ûyn MÓ:׋€ÏioGèä%—Ó÷H<ï.ºö×]u×^þB ‡áüÑÅghàô¬°ûŠÀH?úŨÞɵc6À5e¢#À„‰E3ßWȉ5 7cìÆ÷ÜK¢<Ž€9ÖàôŸØä ÛFÓþ½©žínÝ»v“´Å¸ññ~¬ÇEÚÌH¾dž8"8³rúdÍ­xZ±Ò8®Æ+-ŸÉױ̪Iç Aíãm­Ö[õuêÀKa.Ή$H‘"Bd} ¼²£x€ x ?#šDCæcBÁ£Àëð0ñR9Üëª=-¬l=2„®›Ñ›×€æþ±¡úu­|¯÷¶âcòoU©@“âIV$’I$—ÞBˆ…´‡æCMj;Yº¤~îVenè?=>íÖA¯±*‚‹êý ?Þ}x£, (±$’I$’I( aW­Ä÷1ÜK&'5¿åÈÓ^:§ÿºÛžýXޝÔXÒÃø»©¶QØ ¶óé)MNh'îm'Ïg£ç_0¼´THEQ¬"ŒZ(ÅÿpÓæ‹Õì­²µ¯+¬ášÈ`—›”x4.ûØdM×aXð–šsøþu»[¸– ú`%ý ézŽðUt¿5²7ÐÏþcÔÃØRê;À_ó:yôy¥|ÛYÙ31°ƒ¹Fsbrk©Úív»]®×kµÔ)¶ºÒ.(㣴GM¤SJëb3nûÙ|lKÄVÙ?Ƥþ‘¹nM«‚t¯ùrSFM±@€|d )À8 Øa;˜0ä‰$H‘"MÍÖæ»NEû R¹M}ò/!DŒMu™ÉcÄ¡e«³òÞÍÕ1ºX€zDƒÃðö¬žÖî·ôØè)}¨Ž÷², [«Î¸ÍæWª^ÜìŽþ„Ä/¨…Ë—I.\¹råËœW \—¿HÂV,j[œQ‘¯55né'º3™Üjïbñ¦Ù²ñc@ežÞÈü^„á°™\á•‹32¿z!|P‰Ý0ÛÌ®,Œ+l.ª]d;V—'_/F¯œÍÏÏ‚ŸŸŸŸŸ???\!¥!Ñ!ù½ÉäôÜ™D%ì$Qr‰õÛa1¥ÎÉwŸz]×ù¥)*½9«è•µx¶WxhoÍÃgvð^QF)QEQÙì´·¡hj@@ŒB.ù‘À‰þïž“ƒ ß~ª~ðËìf4åÛ0Öí.Ö»d·^ V×ðªŒâ’’ÝÆÉE‹,X°¢ÊIEê‚þ†Å[šü!Ê2žáÒ°(rk~<ö[ÂÓÁ·®•ÙÀ ½ø¦Mm«TïKƒà~q4³~ûô#…È<%¹à „º ‚LËXˆ(BöCVC AêËŸ¢ÐØôµ9Æ=JœY_¨øÑ„A'Ûü¢–;“ä„\‹,Éq¢ôÞ¸àlt:ˆø—û‰©¯œæmvãdxF ÷"þ:7ðuyråË—.\¹uRû äº2;„€á¨MKÃVŽàãé tòRÐe'í?ý²â_Ù=ðÍ…±u|]|r¼'ʃi úDOÀ ›µÄ ÕBYA2=Hø^ê<Ϫ/Ig’óG©Œ8½®$D¾v{­û½Kwa+=£@²:„ÓÆÁÿÙQ먛Ó@.²ù¾²å~ìxñã°;°ñÿQ"eêýõ¾›|o7ë¶Om…¼dˆ™ëKÿG"úZýÀ¥UØ6öˆoͨ‹ËäZ¨_% ˆ‹Õôo.ý´F¶Ö·Ð-ûÕ\ã†D(¢Š(£r Ø…d*3&‹¡ª8Ï{¢ h›¾þs4}œG£: @OÏøj¬ ÕCßiáÉç»ÞÔây¾+Þå®O›‹¸`·Ù[¢´ªªª¬šªªªº"¢;ÑÌ:?`uëÞpÿÏVùâðéx~ç-êÄ•" WÝÝŸÇ£½b½ÁJŽK½Tk]?mÍ(‹ë•¨jÈo4{P@Öwýná˜Ë_áZó>Ü®µ4ÓM4Ó—M8x²†8ÆñÒæLƒ÷Pغë·„CÍ´ƒõ#CIË𢾔 çérr‰êNõ’¹}?|zƒÙë}‡Fí‹^šœúæ®õV£ƒGÀ<^”QE%ÔQKu@\‚ iÁk2D2­¶YÍ ›ðŒx½žÉÝ–†|žGËþiÙ[°ê×…ÒÜäÀÕž®óßg@f~bz…›;_*ÿÓ³u¢Hžûb·DW›áÀz_ðiü¾×î*eÞÇ1™Ø,YÞz²Z5ÞE¼xñäÃÈW1D>*z!†ÄÜù«?iÑš—Â< ´ò²ÿ†‹‡%‚ÓóéR{¼èç]óüVž³að`)ˆ«%Í@@ï,wýãA÷ì{—Ñ~Í:Z¸ë›X>×f °ØŽx"Yý wcQÏÒoÞöëßÖ©ÝÎNN,¸ÎN\'''>Ñu·r€Aš‚Ý=L%)@6„§Š°¿ʶÖoÇü\w†ä›”¬@}»BËä¦YvZÂë8ÆâLùCy¹?e0ÓM4SM4Óìˆ~€Ås4‹qÚ™ ™¦æT”`_H iaÛ%íî õîö–¶˜]É@hlõjÊ =³§õ2çn-K`< ¥ZÜCLù4Ö¹M4×&œATAø„ƒáTPé˯KQö*Î-_Í®.ü~î•uáPifP™¶æØ0nhiWO˜ž&)ß —‚ê½1ÆûÅ^Kèê'œ©z®óÊØUUUUUU{ŒxCo¼6á x*ëÐö½oOž1XhE,c1ïZž^s? ³¨½Á÷ú5§½Ø-µ×ë+Ô ·"^€¦Dˆo›Æ÷öü«k,hv!c´¬Ž1‹„b¬»™®üÊ/õôd[š ÓíviVmN/øæÒÃÝÃñ&æ¹8¬’g O_Ï–ìÄ ‚ ‚ûsä=¤!cy§ ¶Ü̼ †wY/Mo·¥kP„qÕeáè™z„ü«ðE\ïmtí¼¢¥±šcʼ¡dMàŽÊa–žÇXð¹ÏÚ½Ž`¯6¸mSb­¤v7ûÈ6ÄÂÆ˜ãêôG/Ó9¡ôp°Û´víÛ·nÝÁ»H‡P„ Y„ኛ7ðeño¸w­o)î4>‡ðYèá] vn§nÛŠ§ÃOÇìyLÕÐxÝ­J©žÚ{.ô¬ËM.Ú?Ý×IwƒÀ0:o–åFÌиSóóóóóóý>™’D”MT¦áljå<—늀tnõ<#ÒËiPÁ¼UÛ!)ñÑÙž…3×gƒCÏxX‡ïáýž" zaÍß9Ù6[¾øeGTúP›çwÞE•(Q(¡B… (Pøú`?ÈßÃŒc,§åU€A…ÇûvÀàÙ~Dh´wºcÃ$múX7ŸšoÄÄ\^Â5(I¡jüÇŒý0ûtžäl̉vÿ&aéz:e¬/#:ûAQò¹çOý &;ý¹¨šL 4D# 0Øa†Ä¡±¸ ¾½§1³áô4á/ØÂP¯«}ânIíÙɼJsŸŸ¶©ÏšúS_æ;xøšBÎ7—³ÈM*2sÌøÉŒØ¥|¢Ã¨¥Å¨(((((((*þ28H¿"ÂŽr4H¦Ô²÷p[S¡ÑIïìý­ïóX+LÈ^¦ 3Z_wS¯©ñ`@Ž+’w‰Vyæ”gâ}ØÉˆÙº¾+ÄLk.ûçÖó?ýämV³~ ‡Þi•}Õ%Ÿ¤—íÑO…©q»ohƒiiiiiiiiiii Â0Ì2@is>4ÐñK|Å ó­kž¤þl9ÿªTŸ˜‹Û_8ÿ³íz«—_?µ˜1í&Ò¹ÜÞµûÊ/ÃæzyÛ:#1‚ ‚°!"† É8ªØÆÃÂö0¼œ!”Œ‡'óÈà^pa @oIÂ#¿W¥©§Øõï_¨Ûxß—ñtÜ=ŸtöÜ—Š?€Þ½qüÊ¢‹¹¤Sÿ¨Š¨¨=u¯pÌ´¶­nf`/j`ã{ãû²‘:÷¾ëK­l|+S4¦kfMfÑSZ¼^[{©˜ã:†ºw}ZjÒý Z{O™ÒêÖ)©NÄ}Aåõ÷®ÓføþgÍn‘áÚÅ)m´ódxþró²n£9Åù¡ˆ,FF©ÆÆµ+FÆÆ”Ô'ˆ#„ &ÇÁ‚Þs=Oú‡„€õ’”“Û¬| %+ßð¦Ö†²!­302I˜@™±QUŠ0F #¢ˆmüîãûLè>#¢¼ÞÓ|-Ÿ)¤5¹Z_‰ë0ò‰§Ïã³ ˆhtQŠ5ùQEbÄÿvœì:Hmp<+_³;ý¿ ¢8¥ffD!LBKꋆ >h$±–ööNsxA¡ðß¼Ã{`zÔÛ\O£Þ©èù¦õÆNMòüß²éttm‰ˆŠp€aTb·Š]ŸÌÙ´;fÍ›6®¶–Çö…„õfÎËRi‡ü–}«G Þ{Hj¸®ä¼¤±”·¯°V}´ò¬çëxÛ]×s(”gím–NQèì‰ëz Ý=7eÆh˜@Ú{[ÏõW‹ìé÷»¯ùôà8pâÄáÇ£-ÃÅÐÀ(Î ~§u ;»s¸×þ9ã~`ÂÄ9Œqm¿mI¡‰ ü6orØ\6Q,\{þ!Ù Ã’8NÓí:ÞtÓ/‘ÆM¼ÌŽ»BÎkxCú;ˆ82‰¡1Çoºšk å;¡dÀÒkí·[­Öëp­ÖëuVÝwFù´|}Š/ôçxÌ} »un—_­‘!wwGs°¾{«¤þçó=ùñüëÃO¿SN‡×ÙïÓî}:v®ÛÅ^_ññG“Åñ±4wT’J±&’I$–†‡òBâbÞí¼ß2ò¯@ ‹6bøq®0mL-E¿¨õŸµùe{‹Ùã÷åÓìošæÎã?Q9Sا²¬{Täœ&Ä5#w½1óÞs²¦ÚfS> pâ¨Q‡páÇ8½˜#³gbSñw†Çu÷~ý„§«âë"Q¶Mƒ¬6ÌÊý¶F»žâÇʤ×ó(õææ´ `œ‚ŽtU~-;ÉÂèVàƒÐÒ•±&ˆ‚.$(‘"DIXìuy(颵Jη€Áä÷îϤäjŒþ6G£ä ”MëÈÅ=PÿÎ7Œ,ëNá·nÝ»x6òmÛØH\È[G±¶¦äÀ¿í÷Ëã[õ”hàÁêöÏmµ.PØÜ1Vd†µ7ÇpËÏøº³ï•›#—hÊߘ°Ø`Á‚ª 0m>h!þA‰0uï æ‘öDUù>|^ ðÃÛ Ïè¢iQ$Ü›y" VXÃ1p¹â»óûé_uižÛõ"oÿžs©|íNÔñGÅ>ÊoiI€páÀ'8pá7"oåWVp+—žmQ^ÀYÞ§qø½p•KÒcÝ`ѱ\|MØ1an{v=ËÇy¦O€ú{yöGE³w ÛöÀgÜ`§'''''*“““œ4jQ¥r[;|qýü»7–× ‰z®Ç73˜ög©^\,6—5J|²¸?†Ám¸Û§Ãù°y#Ðßõ*/”Œº>}QãèmÐ× †3l”²8Ý¥~zçÔ3´ù”ôiQÒ¨f›ê¹S™,®÷g¨ †mgãÞC;V!iÿm3ëÈàÏ _åæïâw•ƒÌ<›þiÜzÊoç,÷\†û„Þ¶«ÄèÕŸ]ÌMé©‘ UUUUUU†Vµ²!(åÉó‹§øk&µÆUˆYh}ÞFz×vþ£Æ£ïtÓ5¾*[– Hëãkzc1Úw–¹ƒ Ç1½š‡Ú¿ÇÙñ'çççêóóóó⟘Þe `Ê ‡¹Pž³M6ÔY´ok?BŒÄÉ\î8¼y9%O–þòUI/W!ÞÄ•}$޹ZUNþÕ 0ÿY 1±×ë^êI8ôÓši§aNÜC8Cè#=¦ò:Î<Ôa°œ.‹Ñ¯ŽïÖ½-+ƒîro²ÄÏmò`_ǶL`©|N5½œrŸ±ã±(vM©qŒUfÜmÚ_)Uë ´¼È£Kkæõ¶®\¹jæ±CM¡¡¡³#®z/•SDÚ¯Òì.~7kÜ>lÛÑÙVôû®úoçeih„æ ÖGëÄ—zôÈð4.+-R͹dZ¨Æ ‡Â· »¶—ÎvJïŸeú½é6€â"4hÑ£NÆ©FYYZto‡¶pQ2 ê·õ`|<Ô]ô&³mçQCà69‹+Úäìð9ª³u7°×ÎåäRØÄlê˼s[‹¬;Í[åÝ’ŠÊQ…dmÛÒJa'çççêSóõ9yÿA„n¹šAs€ë‹còŽƒ¶“côd-LJ¶ó¾ø4îµù.KÇ½Äæh¬´PBïö8 ½™Å½Ÿ¹¹aØÝä|.Ýü %–æŽ[–>?ÝÉvøxÑ£F4jôjŸÈŠZ0¨‘œšÉšt‡£cªÜfÝ¥\A­ jóàâï%OH°D;ÄÏ'b´,ö«¨úËÀ)~ý™156úbÜàzVÜ“„ Á—±Ø¼¬7‡e²N²·M–Á°,~_}É\æÜ‹(×þÅíƒÍ£1Iq¶Ûm°ïÓnøFªîúÈ<7N\U¹øUø†Óˆ§DÀÚ&åzý$î‰þ½g¡Îyà¾hBþ‘õÞË $ IL$è$’m›W]ñßË ¾ëð,B›Eµ 7¿Œ´C6@XLu@sØÉcÜ\6žóÁ–®; ßÛn´qíµºn¢õ »Ú¹}möîÜ\±¿ÝW-QE`‘ES!Þ!­!¯!r!ê1Nbgôoó× dªœ.W—jpèA‹R8Öz¼ö“ÛÎÇóþ$è§åè7ì3™ÃrC!lÆà¶w<ØÃß_Žç@c|¬³FìóAʘŠƒ‹û3þéãÇL<—xòÿ-×{€É}- ÙÕyxÕ{-q£|mqö­^>Ã÷§ùsüdK1Xã;Å%€ú½Nb| ÖÁ–æ˜ìwä€xBYÀËôx" ¤„ó@&O7ékÄçœÆÏ‘äã¡MÐú…………………„šã €äã†É ê}pjÄúݵz«Ãêúði Óï<_YÞÙïÌlð³³í˜bšåÈ70Ü“ Œ´ÿiˆ½&-!„—dá°ÔÑxù¤,ª(¢Š(¢Š(¥Q Õ”ìu=×ö´±•°:´ÇÿQ8Ê6þèomº‚jSý§-;sü}£À©í{µ:i}×ë¶Á¯ÿ'Ù(ú/m¬`Ü!‚Á†žžžžžžžžˆ)ê¯ìŒ¤Á^¾V§Mš|•c[©w‡âLXñ¿ðìp‡"»Ày{í°Úˆà $å:ÄÌ—4ŠŠ@¼’!ÚO{«£/8è¢óÑœÆ4hÑ¢Ì"¿Æ* s qîÿ”áá5ûì%ùÚöº}ÚÛÛùk+‹¬Ò¼À8(ÄpíéÎgmº½]0OCÙ$u¬kMˆ7‰ɬ ‚AƒA ù tf)6í¬..Ÿííåí2×63Å÷=ÙËÌY0nQ×vÁ®Í¾cWžq¡mÏeù\_º ÑCÉ'|'TšÚƳ5­Y¿îÆ€FIÙ–¬Ù*Ïf±xmºë®ºï«®ºëÃÿ|ä,¤08¸~¾ êÙ…ö볌hÏ-á:XKIïæ=Ç)ïn PO·ð†pÐv¸ — Üw…UÊàªÌïi ¨ÖFs ”Õè ¿ò.çé­}_â阭ÆóÄ3þ«†•ãÇVÞ*ÌAÏ{á®Öœ©ü—`˜Õj1»ù(Ä–í;ËqÙ±ƒÞ8ܰVr}òý²!‰¨I$’r’I$’K€zá¥*câÂAª·ïÀd#, ’ýÁbƒãdÖö Wü ¥ºWÝgº¬l™R¸Ž”Äv¯~¦5åü×°‡‚ž÷œÛ §ËmàozÆ_ˆ¶àƽ š,t¥§d%¥ìÍߤ‰ƒð„zTæŒ]mޝÎ^þ ‚sv”&L™2dÓM4îÂÑèCÄ!h!9Áêö—}&ijªµ¸ÎÃØ×Rˆr¨ÊëyÓ¬ÿ?§d5Œì‹¢s…L¥*òlövªÒm¢ö]k·r„ؼ¼f¼¼Uy-y{ô ¾fGÌ à!A [~{UÍu–?ÅVnŸ¯'‹é™y­Ѧ8Db¾Åi+kt{á¹øõ “&L™2dÉž“¢’G€Êåo­IÎ%b Çkˆˆ¢Èí6ÃöfŸ”Ø9äæd;ö Tõûº4€®šþ'óÑú†Ã6¢Š(¢Š( EtC€CCò!×Ìàýþ,C>‚ãÜàφpõÚ€Ùìñ·î †›Çsâf¬ï÷m`Cbƒ"lVçþ–J ;‘ê.!èží•g·ô¾ßŸÁJl-Ïã—ØØØØØØØØÓ/„Bb”ÚŒk§éø<ƒ½í†ÅꘛßZdj§Š\o÷ðÕ›í¿ÅÚ]ßß+éè¹ÛÈÐoÆØwÒÆ×qf'VÈÈÈÈÈÈÈÈÊÊ_]¯›Ó‰ÆÅ‘ªïDXœgÆÁrk?&úÚWÿ?í¯i˜ ÛSÔyÙ_®Wßû¡‹( X±bÅ‹/ŒC|!š¾æ0•sZ Єçû­þ4+ïÁ(ÀæZ)+¾g£æývîì¥ø/þíÍޡÇ8p×7y³ãWØá5uêÞ?×þ!€#‚q´3áW®âðçYúîùžö0Á˜à¿¶ÕCdwĈþUyìû>ϳøg§§§§§§»´}h–£àe½”‚¶—E- fqˆMY›˜‰ïœ!² ÷³ÚˇÀ¾ïcpÈì-Ù|Z®£Š”Qôa#r”h¹ÚŒ»:ŒB2È¢‚WA ÿ’Á/U™ÀJìøÞ^ýÛYd.//8ÊÈCƒüSÉV°D6y Øn0‹óÑ ‰ˆkµ™¬§kX­Öâß1­è²I$bÑEH¢Š(‚Gï!CLb|TØØÎ?÷…jA1€ôÕ²!uåB27—YdA8‰(ý32·æöVD0ÂÉÉËàì£BŠHˆ’ˆ…:\Â^^^^^^7rCÈC.C\BÍÀšù6ç£éè¯æˆOYqh÷|^e 4’¡ ~d æ§è ]µ¾Üï>÷½3Û¾ZëÇ–W¦ûèû¼ûíèé­ØÖ¥C\fvõÛzû¾ç×¾î Øe»4ï±ÝžîŸy“gÝë_]í[}ΩЬíªë¹¶Ýöi9nwÞ÷¼çž½Ž¯5*·»”wc¯l/jÉ®½ÙëíÎo³zǬƒé’w9×m}×dûÛï»î{¾î÷¯]öݽ٧›y÷o=½Þ›Ï^÷vÛݹ޾û»åœ}:ô÷ënnt}o¾ù›·»îû|ûÉö}Ýz¶×«îz¯»·{¯²ô½{ÝosyííÝÝïwnÝîæî³½ÓÛ×»¹Ýöï°ËßÝÎûæ{ëWÖ÷s›Û·¦Ý^ßq÷Ýöõ÷lêÜ÷»¾|*&@4LLM!¦&Lšbb 2 F&TüL1M2i¦SÄd`Fš12`žš`¨T‚i¡ #Œ˜#L “LSð&&L4h4h @ £ÄÈÈhi¦&¦Â2hhi• L™4hÉ„ÀL5OÀÐS60M ÐÐF 4@¦hÊzhÁ24ÄÉ“i‰¦ƒ ‰¦ƒL¦›`ŒŒ@¡R™4š`˜L €ÐÄhd›@ “a¡bddɦM3@L`& &F“4ÀÐ&&Œ&bddOR{*¦ B £#A£ ¦& 4i„Ähdi“F˜š042Ѧšhi‘‘“&šd24M LŒ#MO 4§ê‚JH L˜1 š@ÐhÑИ0S4&4ÔÌ€™0L4LL˜LšŒbB ŠB RBÜH@òÁà_Ç·‡ Á¶uh{ü<º BWfHÔÚ¼1%8LH·øÂHX^Ü[ãÛM‡G!]`™Ï“‚Ý&3 :6í–.Q±§²[g™oü¥NèíMÿž‚±­œÒvò${Ñq3»LEú³ü&ü¯\ÄÎiHEZƒk ˆ¢m5M))îeQŒÔ¢/`CàÆ<¨}S•ôð‚@ÌTd¯áºl†ûêVž'ê#´gìöœ‡ýA Éôêx7]²úr°ÍØnQE]š» !Qz߯°û^ЏA ±[‘H;&õ¤(Q€Ñ tÎ>w”ÛÝãåCZ õÒhŒ'ïÞ•Ù¿j À]eÖ)TÅ3íæÅ~!„„|­±½}Ù¿$ kû˜vÚoÒo¥ nvF‹¥›?#ptm–¹Ëqy÷7HinRB4­.£ÅÇúêÚB zƒP^ö–îÇYtSÛÄDÿ¾Õ®¬Þh4Å¢}úfdõJ¢%Ë»ÉgHì›ecðÛaÜŠ#•‰ÿÕ÷Ô‚Ð7xæY’tcŒ¤,_FÎL,ܯÏ;-ê¾ÍTÿB­LVRbÜýCý!èB ,Ä zkaþ6Ӻ͡×㈡LN÷>OÕ0µžªBÐ50‚@ÔIâóy_ {úd“<Ë¢L ßØØ•±³BÏ_”,y›e8Ó«ÏäI]¸r(ƒsׇ˜©pˆV*„J ;<,±Ø®M0XŸ"¦mk¢@ž•4K‰Y":é´d1Ñ´ª?ój­¨›¥]9@AÆ}Rü6 ·½5œóÕ~Cš«T³mN¾ÉAv¦¨›ó€ßù¢#Kè§,Žˆ­Æ/‰Ž'-©Wáq„É•QsºÌ¼Êö!„„õ›|¾ƒg3dâë´o .W£¯éÝÜayº§²çsðEÐþϼ/å¢x‚ F1^°jtú8ŸÈÌ »©¨¥Æ'±EªÙÞ°5©Å‹:ývµÓö•l\ B íó5æµl^æú^m‘!ËçãwFHAÚ¢@¡ßíWë†5'š»^R6óÖÇ—‰òÆjƳ6ð§mïšò°¡â±·E®–C-¶Õ3–ó˜Ó#¨´d„˜ÆÕ\æs²ã}¯oÖ:dŒõ×ýÒvŠêb½íwƒ†â÷€ œO)[ì]€‚@*» {FIœÿ¼áÍ"®ƒ•fÔ„œJîƒfW ýwÔåNËŽÇù6ÃͯËÁMø˜)5.Rðµfù{NžÖÕßpåW8•0æb16‡) ß«NìQ@Pl’WRu¬¯uO2×8£Mt¶çlw;çZÎk§Žóü‹Ã{d†_³Ë;ïjný¤U—÷55‚@ê‰Ò¿e])Z‰¹CI9sòTRÃ8A¢“‡õJœ :‹Ûßã‡ù b¦ý:hn®Ÿ z±¬ÙÌÁ½Ýt=9¢B BB KFFSGJqëÊ󦼟­®“ jÃîþÉÖÛz›¿R«lä,)™Þã>Bà|͘œJQ@P½ª´Éýaƒ‹Dï¹jDs•”q!†Üæ9>'œ÷|°Ñòm÷Þ—Ì5ðHAsHApH@ÒK;`i!—E/':ÛͼÐþ“ˆd„¯%êÍä—íÎ!™9íR¿õácÙ}í±ßêj=5Ùæ¹÷è  \b—Xú™7ð•i§¶–µjMœ‚ îÃâøÍäŸaðŽV7ÔJNh$Ä4%¥(oˆÄˆ“ý´‰)Ö’úñµç^$¾Yã±áh‰37ŠÚBÖ—kûFæ¢ì¯ðÐU{ÎÊ7!YÚDqxÓ‹TŒÞWþmaöŒÕ¢{·i¨ãÌo‹þ˜ ‰ )A€ í/[&±p¨¦uÛÓ œã¤:ŒÆÝÎN'Æ$ÌUZN‹R\Ŭ¬Ÿ wëê) €èm½q nð|îYË^V¶DÁòùkQ«ê5Êü“ A %¤d21=ôm’çì(©œþ¯¼š*<´ 9Ä6ª4O+®Ú{#H„ºŒEÞ50jþùuY®5*°A ͯT–ûNĆÁör@®†Ïú‘y¤J?1Jˆ·˜ý-}Ôs‹ÕÆÇÍ–§|N¡ÀWú`š0êß)î]ögR^ªýñ?5Q ¼ÎºU·lF*®‚«ìµÍ3ñ×*† mœnó\Ûdkfùœ—‹oå¦}çÒªµü‡úmš‹w¡ƒR¶Å=¥Þ–ò¦ƒ??o}K˜’Õã±EN6úÝŽí9bm5m“U]\—­ÏU®e—÷8¶TesiÒî;>ñ-kõLïžS­òF„£_. áhŽHƒ©bó O™PG"Ê0iõÌúÐ+~‰›ù+9nc¼§Qý<…YªXü÷nQî‹(—›/.É_1o‹á€õš#ûH€•Ci¨cŸ™íÜë73z¢ÔËœ¡OêÒºÀÕæ#?†?NA ˆA ¡[úßl'% sz¦:òw¶—NþÖÆ"C4GQ5„¾£Ž¯ò)æK¸zÝr$ í¤ bK³<åNµ¸wm%_—ŒˆHA†Ïh2šŠoº±éüŽÎ]Ý›°ÀSå™eU8pu+O$åÆË{h08 €~îÀ?‚÷ÜšÙ¶,Ló:ÌÛy×TUº”û,”?L½..„:f{1}¹oô.tOãºOY[DÊ Ž;•dï­Î®,d!„TöôW¿å´>] €érŠZ»úUlÏ·1ÅÞZmZL©·×DK(wSü‹ížûX“}¹P‘Ð2¾’äÏÖ?%CúoÔ7m J¬È6VP‚+ü,mÕh]p\‹U}Ïã»#~¶@‰-)ƒkt{òwû\É×#÷¾'d%êDíñ‘íÍ|C¨ä© 9Ǩ£)†•8Y ]G¡¦pY·ÅÆÔÄ"æòŒO²mšW*ËàØfÀ'‘B¢K`ÚÛE68õÜÕ´[òž5° â¥k{Ê0¥õØÖ¡¾jv/$ äOÏmˆ©Ç[‚Ù¹œ»Z¶@7¸ý!çÆYn¶+Ú¢ÛÜZÛus%õ'i¸H³=ß²¶_Ó°¿çß¹Ø);±Òtˆ–<Äó‚¼J4©9|®åê…#Á­Õ Uìûhsq/+¤¾Êc'ù/ú“µ‰¼8@·çPªÁì0Ž sô¨å2ùïblýlµ5ëÄëL$˜8­ZÒ;FFœ[ú“d„ °NÏ2š«$4.ÆŽÐô½Ñ=Öž7c×Rp@Ré’:­ÌšÅg[=§ñ6@‡Ü–/Ž«Ë™ Fé i£ìѬÅpFdÚR“€Ó¯yÞÌ“þH®$Ý©WrÞ1Òõy!€ $ÅV"“¼:{WÛ¥Û®™ìî¿§ÞE¦!›¿HsÑÏXr{¨öÒ³÷êîÅçw7u}ìïšH@ÛêvÛþÎ/>È <ûU¤éÞ°ô{ÌnÞ!ÞéPÒtX$ bB ;,HAÒ;úûóGÞ%6.šìƒã%Û­ë-qÞ:l\›íÀœ¢]†Á¤£+Ý‘B»òŒqÙæDA·N‘à;£Õö³*bã—ͼW  Ñ{­a™sùILâ§)2¾_ç¿ÄÏ=o#Ú¼µ{mgóÔnÿYîþÚÜÙêEæŠä¨Ã¿UǬ­Ù»™áåâQ÷ ( Þl=ÍÊÓÙõ¤Ñ}|ˆ°L›\õ~¬ŒQ©6í Å]÷9 pÑeÿBdeyKlá¶Qõ 2™#/q#n¡¢IÂÖ; $ å;{$¥ýU-_•ο:ÁOìÁ¶Ó§£Æk{’]K óÑ:èT[ò3¤„ÏèþlðO÷}ˇG„„šB 0þW-»£Tÿç›o}HA˜Ã^,»N¦®kÏÓzü¿(ïíÓ¥µ¯@JÍ R\­ÛÝ ÅËws·XZý½Æ;y–ÎJc¤7õêÏrƒ×ÆùÏjÞ¯z»Ðí@âpM÷.ä7i—*Ê!úгŠî˲ÚÈ*#SÍr8aˆA à³ÍÃêªýXìwdíøãå¿|q®±šM3Ž‹oåu³ð±£Ë3H3 š^ /ÕùÉ8þz@9õY@‡òÊìãXäWR¿7h¯VW¿\ð\¹ßß."÷ßÐgêñ~'è =AÃŽÒBŠBJBp$ ³0HAÍæQlºëí®Ù‰šÙ¬ò´<+ˆù¿û¦ïw-ŸKökÏð®caM$ÿÔ}3 ä—šG§TFkU#ßmXy+·ŽÕ£â´:¯~Mm›f%Êæ•ð‚@•ÿ‹̲ëd ÝyúxeÚßYñ¥ÛM÷ÁÞ8ݹ‚)2'UP£,\Ÿ3ƒ^ºj°ÖÐçï7.ÁòU=¦ˆÆnoRŸÒ³cžG•.ßg"¤ÉÉY ó±Ñ“^ºsÜYeÎLEYü'0±/×wWïFýµäÅD-üèâkDó\/Ï-‘?P|³<žvµ¹ÔåSÿà]i‡‡ä±3Üõ/:r)mªüÚP¡?x”u(ÑV!š†A>½QBóqbÕí»k/ óDIž˜|—rþ‡Ü$·îv˜ÑÏ@’57‹H©€¬_Š”´¿‡ÏìHVxø &âêë&ùn¬Qü(Û²q1Ò»H.* K®'O~§Ä-=ôÍÆBäXì÷%±ú]Æ‚@ål²è­W¸a{X ?ù½^(ÜtINx“ê ï!—m·^lþbŽœÌ7­GPS¼N¼¢¶­G¸~êx°Uö–K6yˆÊu–do¸–U¢Ý¾|CœGøfÄÎ7ð6Ì[ΓñÑl/>ê·¾»S ÇÈ“N¿ A 7f ÙJÆVêš&Ûn§;€KµÿÕ‰H6b³–è]ȉ׊oÆ :ï—O öF÷Š÷ é×üÍæýtVœo Ê:y_iBúÌgŽN =|¢ke˜ÛÑñ“¬½'?M:»ÈV°µmRB …!H-²KW Ã¥5è¹MÉww~]ïFRÅ>ü/ãrÐ&„ßzc—ÿùbšlOlüƒ:»î¬«‹ß½\ €¬}ÚSƒzÖLÏÿ‡ò ©«|áuÂ*æ‡ô8ǘ;ôƒ#“))¦ÚãtÓ€ìÙªùnT€ò0šö¿Ó›Å9¤ŸÐ(LO¿¸^bI)…øæñ§1+ ®ýŒȈŸ o¬î/µ$Qå/½?6C_œ½öÿG¾«ž†AÀðñÏ€iʨöHÅûî%?(è‹FÌ,ŒÑ¾eÔŽoÙY¶¨]³ºæ¬½‰üÖS’ƒÕ©þZl$ ¢s´r9™ç¾eÿCãx¢?ÜU⥰ÏjŠ™iXŸLZZþô D"¯Œ$ï¦ç¼wù6­S+>VUg}òóm™ËVA 3Õ/ï?=æeŸwî»äᙤ,‡ÍdÖ-źöÕ_ÇôCwÇK#ž0.´X›´_OYº€ØsŸCŠš"Š. ©ÔuÕ¡7¹uª› ë¥Õz6õ¥áZ¶¶‘ãµÉç'sn~ôWH}nÞµ¤·DñpÝ6dí>ÏMÀñ‚uÈHBþvéYÏõ݈ËÕÒkQVV ¹óÛgG3‰°EÞúÞN“¿wkCŒ˜ÒÄO7¯þí¥s³Å¾zeå­‰'•ek¿LŽJfØÁÚ¯QÑ'ONöþ÷´&¦µ@3w_³SÔSô²¶{‹Î»– rï«üëà w;´œuж¦ô= ª})¹ú²¥„~ï-9wöÔŸ޶ŒÌÑvë³ XMñi_­€h^•Ôéú¾+Jè™0ã`äàRyyEgN—ɘæ"ê»3Kݘ•M ðÞqêh}é–ϱfå#ºµö ]^N„ë«/¬vÈA Y¥ ï–Ëç JvêäÎgÔ]HÍzAÏÒyíHg”³eóJw™‘»Ïvm‹ê3°² ô”ô$z,`,Ëšïêákq¡Í·Â˜ìÔÜšmº¡éίäõ‘ßø:‰CëYérrfÄüë·U±Í‰aÉšZ•çÑSíC£E™Œð°Ö¹H¤•rs) vV‹TVTå{·ú'DÕ¹_í‰ûÃ:x_Œ®‡æ®qpìú—O•²tV{g$ó„“tIÅ•qkÅÉ­Wg¿bvd=Dïà™Û—ÓÝ=µ›gB£‘B®%[°=yôƒÍã¼f˜†$BÜaMKý=·»qVE¡¼`øhrÄÅ®Ÿ/2Ù3™ÙRbTñqqtÞÖ‡¶ôÚŵ¦ÑU#ÝÄs8+v®…$×â- µ}:ÿ‚\Aºf:ÇS>¼4Š­ás}žo†ciK–Œ‘ve7t…µ`᪠füZöX ±]>úœˆãÖÃ%·KÖ-©xL Ï٭ϧËùîc¼K§Ž‰ÿ>ʇޟRù¡åTg¨–±)6\ž Ë”Ç:oe¬í¹~÷Þg삆$ ÒÙüÿ¿5ó+1¯äÿŽ™¸¦ôÚy¦Ž”)^¯ùQ8ð €¶Ÿ73M‰*TÏyRž©¤¶4ìLü­«Deºvì §–õW$Yµ °­W~M[<ú…Qêw»Üÿ,ʽ(ÁG¹´‰#ï§GΥ͡ñîÐ[+jêDÈìÕU 4=r¨v¹Tâœ/¡™ݽ«¸rÙ‚ë û5aª`ww¬™P: »àjFúÚÕzÕ>…vÑnŽ»““>Ö3'{ÐZ¿ƒ uÅãB‚}Å¥NÈ|iê­s¨&ÐS75¬·»“®ÚbýÔ­ŽõxÆÛåËÿ"}7·Ö¬Óš4|ÒÆ‚˜‚ü‚´‚Š€õ°H@ñi‰ÌLt6 Ǻӆصtäæß¯È‰û(òYXàs[ÊШ£xIÔ7YªÞˆJlý£Æà Q,7ZŸQ@¯ÛÜÑ%˜ft !w4Wj­±yKVœ;ù0æ1Н-¨yˆ‘ø·ÿ‡×¾SjÜ­Ú?ÄÙø¼s­*͵º‹¥çyÿ—üWLvß.³Qž4“gõC·ò SBIœ°¤¥Œmo«êû‘h¯nQfoW¡ô‡×Üì_ï™[ãàyÔ¼¥qÁˆŽÄ9²íòúbÐ8x ºG¡ÇׇéÈ„ù!nÕÓ¢Ãr¿µÑÅý½ü&ÑOþkÖ_éºÈa·.3ÿ[ˆŠ&3±dÛé±üYSQð+ÎÇü'BŠ×Á‰x§>rŸ‡»°Úƒ#̰%ÚI¶bLF,ÂJs¾šÛ*š¯¾ÇŸµ)åê)ðfàØ º‹x6ÊvŢơÂPž‰‹¢AÀ«Y³w~Çï³æ_ÉLœÎ/’{3³—|oV>_‘Ëf¿êïtÇj.¤Ô_ÇÌa«¥Nª4ÌðÓžWc˪cq%a©ª†[gw-ƹ.oø# qÏ'†ým§›]J°¨Ùœ $°;q|#¶¯‡døG{sùÛ n²‹š~=¼1Ž|þtHÏÙ$ÊôËàïÛW™µ4Õ¡õwŽú–ókS‡©K4}kçÝ(¸ ÊÁ€öñ¿ñÆOj&{|ÉFÏlÅ’5^†‰lY÷Ù^*Ôú¶=lVo~ÎËÍwo{…0@;¤>; ™/Ø‘ +¢ƒÞ§ŽÜj6[ž¦žÉ k®¬]¡“‘Ðzáw[,AþÂþoYŽ£6Ô½ù¹wü]7„ë€é¤ ¬4€(Âãô( ×L*3¶KÕ[ìå\ÛI ­yÚv3—ëˆ ¾ôÝÈ|ôw¥ÿYã6éKÁΙzÃöŒ-Ù7iVgh[vš7o`×ÈýTº+³Žn°6FÕá\ä‘zŽáM…u£ÙÝw4 ;ÖMÙ­‘OoàŸ,ò`Û§ðð¹ 6D¡sjoV“Ò @§(TËȃwdRbÆf"2ßÜ0ŠnµpWçµ(`E éÏÏÂÌûŽÙ,mìà>œX¼sº’gg}¬ãã¿éÝ¿Ûd¢Iµ#6ÁéVsŠó~FK%úGMRfþßâV½„Éö9¹ZAÒy=GO=帎ÔÄCß/ Œ%|tŽŒŒú$íÁÇÆ‘XbóCŸqÞ† >¤©X×Nõr;£Ëð÷‰¦\lpJ!:ü¶ŒÕG®»~­e€’'±m=_"“&þvL0§»/ Ò}æƒF«™DÙE¤v5YìȹÞ~Ëfš,ð݉æY%­TobÓ“ -?Pb·Žïhl¡?Y‹NÎ˾®¯ÆÜzãäß6¥˜ªþÒmÐDj…sCI‚érÃÔÙ‘.ì›øA ð „Ô„ $„‘7sTé5ÄYë4«•Û½ÔâIÍ8MüŸ_÷=Xøýw{œ;Ô”Y&³t­aPæœÃQÍÂ啨»:®¯«Î²×ª¥ˆ½¹Þ]™ÐlÊÅ##²Ž–®ì~ ²\…ýs…Ÿ:Ù(ñý­ûx’f(¥ª;·»˜Ïö¹øÂ÷@€ …ÿ9´Òˆòl‡ŽŠô§a€ ãýuœÞdNú½LmÏÁª$à¨ìðrgC8ÑŒés–ÖDÁÖ¿Êž¦E¦í0¸f71o6ešžŒº\d.âÙ³RQ@P»BH‹ *˜¨nf©u,€€?áMc»,Š¿J»zPäL”ÂÁ diê-¸35úœË阬sÇÎ}uçJSÛßôYºo{Å}C*§²Òšä}pý©ý¿?‚&CÜlÑNÁ9õ0Æb†ÍÛœ¿§Ðœê?‹™o[kc9 v9ækB¤œ*Ã1ÊðË5Ÿe| hìKî´QÛâÔ74Ξ¹Ã¯­s#.2þ{iåó”wÁ×°µ§ýͤraP?OJ[ÃÄÛŒ'³£Øÿ}YâØf¡Ð|§ö¯œz‹jO–Žñ!÷WvÔHmn»Ã¥§"‹“°}f¡ô “fY;<­‚•sÙú¸@ãê¥`tX}?‘ìÂ:ÙRzôÖ²M·fl³YúIåÑš ( hG+dE ³Œye~”Ún~öœ<ñ¾uw‚=¸ƒ%ç¾¾b vöWÆÙ÷ÓOñ»â1¸Á'EÅ’D s%w<¹•A,@j޾õF5;ר€ã±Ï{¤Ý ;CŒDDŽ嵛mŸ À£Ï‘å£×”çÙÿrÞ–JÂ?ßuº·ïóëƒn€Ö{Ö7K«ÒFS1ž«k¶§)Ïy÷Ü'DP+mÐtŸƒ(—òÍûBÂ;÷ušý†Ê:H”2qˆÑv£ñh8“õ˜{hY;i3˜Ùßjù ÿ°kÖŠ9—YÄÑÁÛúíFÅ'å! ÷!@M0ê¬tOêìcÆ‡Æ ¨Ž¶4ª¯¡c5áÍðüjæßG3q}}¦¥`ìR›Ñ*‘}^9jÀŸšoŒqåEz1!ÓOйy ,¿Š…9mA›Âü¡ŸuîÛC˜Ÿ+ZQ5ÛÜV¢(ŸÞh`cqc­¢ÆÕj£R‹añË%„¶v+¡>Ã:å7é˜Pk_-XçDn–{ªÆ¥„­kºõTMîÿk,Ç­JmIÅ|ÈÉzªÕÅâ;ˆ‚ØÊFè;r+%ÊódÙopÅ£œ‡OÙ¥¼£l]ü{)ŒòÂ{orñì'¸tì03zÚœ&+IqWÂe¾uE›UÛwÅÂËM÷¿y…4ÊUؘ¹VŸ×Ñ̺oo·×RÔ=6™šÿù©iW¢àHA ÓoõtÇê`?ߥrå¥÷Zÿœ-ƒ4üƒ„ˆ-ãàÀ¢€ ý+CásÆ¢Û¦ÈZnPUgI&KzÞ‰pT#ÿzúdylõÎSݹ ÿ|ï/”~-Q‹ßRçtƒœ,œœ§Èú”æZþîñ›1 ´rO†¡«öf’°ŸëéL'Z‡Þzí¼åIn­£”Ñ#±\üÝ;wÎèø?(6Ð¥œšƒ¤qNÕ—)(½èW‰ý)@"V’ðCÃü*Ž6Ç“eA·ãÛ!¶ŽÐšaC=<4ÂîQ—Íì¢æcõÖñK%!¬5b9·ßÿ_]$}ͪ÷8±ç.tßûCFž¿t;4}qÆ[«n?Bµÿ¢ÒØ*8íê©!m¿5þîögó¢"“ÉÿηÒ¹K9òäi]¨›H6Ãó"Mõg­S)Ö¶ÃW¸}é̼6¡Ñpe%2¥ŠöÄ™&–¢”£?J¦–Óe_Ѽâw(ÓY CâÄ·C湲ǩfƒ .-g5?F‘å¬W¯7n´Cžo=—Rr:&9 •;¢p®Ájh6gõ䊮U(’ÚŽ³ÆË†Æç(írÄψL\X( ([þŠÖ> ‘‘ÆB§Ë9¹i=ȱØŽt³çúkWlÆM<×X_*BÚBݳd„—“#|üTøpðЩÄmh/«t¥c¾ë_®F <¾ª+óÜ¡V¬´F΃֓©ÓŠL»ò:HA €¾ß·óC\Ü#Ë×DÒCEžñ‹•©±9šÃŒ´õóîqF®Æï¿SF|»> öÀ®N!ïÖˆ— ¿h"ë¡$äU<#s_EÝ¡’Û[‚ð¼í ~Ò¾w˜Y~þý E*­¥‰‘uÒý±+ÂHçªÐ >u%ºëzk¾‚É–«Ü—Y”m¤ÚñÀA Ô „d„bKÅéʼ¶ÖÌý¬]‡üûPu»£Öú3ªé-•_›¡ÔèÍ>A´VÂ*÷<‰~ÍÌmî•F­—íë5Àš{ÜvD–ýå¥EÎ%¾>`…éë?,=j¥.üßOG_ ‰Bóà×Ls:’ô~¤U i߆ԛ«¦xÇÉÎË$™ cÆÎãÅc÷µP‘}s´‡‰/øåo†A =‘£+ö<ØvWÉæ¼ÅÉCMÞÿÙùX‹Ä W=µ³j/QÈ¢Äi,¤l¦¸!¿¿g‹CT2i€s!ÞE|·Ïc¸È½¯ñ))×èøÓÖXÿ"£ån¥• áùÞ9JÇ ºˆJkÄŸyÎùïZ ™Ð#<ÖÑ{ÁmcëÙWgÆ5Öî¢qÿíÖ8Bï+”©¯4'¯±Ò×,¬1ÖE¦¥z+I»ï\$w ,ßoÊç‚Ë-Y6‘9òªPچ͵ ûÞîZnšÓ 'Óýpt¿y¯‘ ZâXߨsöÒÙ>Rêzuåã%Mô¡NSüU3µÝG>çô†C­M¿ë –X8Óikç+ÅÊYîLÃÏô´¸©‘ì>gOñg3\Ä©ÐÝÞÃξku¢†×¦ùpZ?jËEÙ#¦Sˆçú9½ÉL¾Ëè¡‹à[È[ Oc®é‹Î•ªœè[eÊ•šN„µÂªÆ·i#Ëd¸Vèð €Z ò_ù¸’øþ²¢p]î5yÛ†Ö§a¾ãOïg¤ ½HÏÉ}°¯èôÜÑרã['qŽ;1QXÓÞ¼bDíõÕ õÞ‘°6¿‚‹õˆLÒ¹¶d˜u…â4-ÛäîýÕ•¼ë²ø‰l›O4®,Þê“Äv¿RZ­à«£9ÙzÎëÅ’L\Ö¡$ Ûa4€Ð1!e‰çå·žÏèUlu’Sz?¥³Ç»#aóä3bÒÕpÊácßg»f mf·ŒI(èŽ-UK%ÇWÊjC~¾yäQÏñ@÷ÞÌí¸0 èøeêCM°%ÖŸ*·mñ™çÚ™lšíà(MFϾ~ÌÏÀrÿÇ©puÍä—l!¼œbvá?ÉQ=Îæ¦”¤„Ã]5Šò4qfV¯FøîÚ~~ö¦nÅm°„¯—¨¨‡rÒöåz²@•cß@ZÁ"Éý÷Hþm´µ‘VÌ2ÚuŒUßmaÈ«åy„òžwbµ¤¬%šT9àÐþî_ï’T²¼š#ƃ*OT‚¬½µLö›‚øk V¡Úy:بRY!½^]ù³TƒÆ.ææuW2uè‚]ݺbdPŠ`(C½wÈŸå½Å÷»ö‹ñ ²fÔ… M%Þ­X…)± ñ.2=½BL½ã纡®?`t¯20æX²ôxÀXR0HA;|‰ÄS ¸ùœMú^ksÊ[éôÝ–>=½^鯩pªøŠ÷˜_gY?ƒØêØ¡Óó$m!škX·ç±\ùÅêëþ=Ì—¨Uªzô+}ÎH'V>›àí2b‰Nãàwm•çSÛ›IÒ¥©6®Â¾›Õ‡ßŒ2ÁÔtŠQ06ƒÁÈc¢žeŽóÂä ïø;vÍ£³Ç9ЙÌî™uî‡ôÒ ²lÚOøÐv ¦Ù&]©Í²}ÝïèõO4käL)YTZ å±²'MI½øŒhè`ç1‘ÒÆ§$p׿ ÉÊD¡:OéåRt „$éï ¯Ó'fé<¸ÐCOã~{p÷í#¹/W09œÒU…C•“Áƒe6—ú9®Ž ´žw:ï. Âuèd–˜ÖÐüT²‘3]ç¢ œÒ©ÂÌú¥\ŸKhÞðàKíËëµ¢45§Ú ïÓþ0lá§=JKHܧCoœ8–;6£L3%<Ñ Mž's"Yì´¢ã3^ofó· 2½ ÇŠ¿ÿŒåNRŠlÈÿÊai^$£i_¶ã¸BË“#‡–Ùh²wÕLtÚ\E¹u….ŠA’sªôööcê“Wìù ÿ2Z†Ž,ÞõPwO¾¼ ÙhˆôÇ8ÿËR(ooOϤÉf¹-ÜÚç†b÷ù†)”`4“Kô'îßÓ$Ñ¥Y:ÓN­ñ²³‰ê̽Um©Oôz}ÍŸñ…±ÏN>eq¹â —*J˜ê4r>…èÄZßšŸ×3#±ãZgtÏ` ñ^–Y[ÀsuàhÁ˜÷tæ÷ЏlM{è£ïD¨Ô–&9°H9Ðïu«ÌFë QZîl"çgÕ4ñµ•»ùTƺw"d”À®\ÑO’‡"ã—ú6Uá5^n;rÕ‘ 1é5‚Oz!›4~ô< y•©š¨§%¼ÝâTƺq–tgŽî?Ô†iïþÿ ä\>¿Ivõuõ©)ý¹±§5¢Û5#ÔÏ å'o o?ϬüWï½(Øþ¸ÙVD­¬3$þŸÈLüyª&Õm_ÿ¿î‘lÞ®ÏJrWê}6ÙGt<Åúm ÝŒôÇ…æøø§Gö䟢sJp—N[íoíe"¶Tß;¦C逼çþõ¾þN÷9Ï~‘º$„,HA{˜žÊÍ«”Ú>’¹ •vÝÉ|èä"„„”„´„ ,^–„€J·À{TÐ>:‰ûJGâ—¾WÃëÌ’*ø\O³£mü²"FÝŠ³Î´e­•4æšWƒQ8ÿé|Œ нêQñ;eÍV¬áƲªnÇ+Õ­zɦVK¼XJ7§È»:¶Xæî0í@•ßãôÊ=&k‰]±nÒ†‚?±À<÷aõ…orö½K¥æÉ2Ñg1Ú¦DO‰SNÂ~@Ó›-[Ñ6önØ †I–q‘¼3ý k°f÷VíŸ<<¥y<-¯-_Ûy¹UsOƒK*uŒ‘ó•‡8äßðUEwٙͼQ$ÅVd(_D|Vé¤Ra*þw×ÿN}çò±ñX· “eêá^PZ:þú¹|¾r­* ­TãA¦`™Ì^|w:ñ¬SÈ­“Éò,¡ú1ÓLv¦súf7Vùîk«oØDW>šeëóÛÒ| ….sd”ÎÒ\Ú_¤ãÖUIƒHHª¹M“í=RÃt†ÈwwYQ±ºÍøyÀçr™J”7UÐ¦è ¸mwòYó¹Zc½akFu(ÜM á9ÓãÚF8“W+dÙJ‰KN¹°HWýUk®ß½áËÐo|«ôŒbâ´Õ«Lí;™gøE¬R‘×l-ë‡T…Ƴ¾ùÏ=F› Qà`qGOÃ<`lW„WÙñ3OÜ&Ø”ßì»Æñàh—àþšç×d¥ê›Y¢¦y{Zjƒm)¥âþõâ²XULÓ6}Üoï¯*Ða 6£ó!èhO{„½¬_²®Ó«þÇîC÷Oño=ð›¸$}_Άiÿš’Õ2 ô,¦‰*Ãþ«=æáæšEv+E\©ä€9óNÊ®Ö£Îø¡VÝ#šPá1ýUtÊ´}N,ÐèÜü3žÉ‹îêlò´‘¬®R§CÄ{GloÅé ߉pÈ:õÖjßÍAùynÖœ˜ç ÌŒîV^ŽòŒ|±É¢ãÄ^ǹy麳¿•¡îŽ© NÄšm) *bZ‹Äò!!b3¦»âü¾J59Æi€fäNMÙ¡æ’"¥c&í}=ýtQÏ5ûŽË„–üÏ:˜#”h¤7…x÷(íÜ>«MïjÅÙR)5]æô Tìxb¢Ôßàþ ®ö½ïŒýözJ×ú±<ŽÕ ÅüC•†± ôimCäÈwÒ¯ÞËAql[ÄN¢Ù¸ ¥›)™Ìï VÒ¥ãƒwljÛlHÕZdì`"0y_dz§§Í”ípHp©QHôm)p¾±¥k{Pø°‹¥;…a%7>y9vHÃìWäÜœ¡žá~¸¨<÷N\©SÊtbUa_UÜVÒ‰ôѱ-c†LÅ%Ïr>%µ±1±ò\ZúÜÀ6Ýö­ ”½nz¥ìòï5zÌ¥WÊ JqÿóƒJ XÊgI7Z™e)¯ÈËzCðûö–6MWšx”÷ˆFù éÜ»~þŸÑ[À€ÕðÍj…tIÞè»™KøÂKíDîoÂ̈́Оló–5ÜÔy"o7.0ŒZ¼å]ÅÇîƒó*‹êœÙ™UÒý¡å¾bB Â[ öGew£ç…Љ¢57L\25†Ho”Ê÷áÜ•ó7k¼¿[ÜÂ:lb‚Œ%;âD±ú›KZØÔ¾¤cœ\.Ç•(roê’‰NžNéçS²"œ‰~â>5ADe”e±P*û)»÷QŒñôìŠÆ–6”^’ÿ^룆Úå2ù;ÿ–K S¸·üï_YÓáV‡—9m®rkñFÿvrÝiÙÄÏC±€Ä—8íó rDµöÐ6¯Ž^)T—•ƒò°Bá×:ÝܦÕ4H$­CJš|ï(¤­@²÷Gû£…äøÎïl^&|Çvª‹oí|ÏEŸ!‡žtú[+¢E€ÃIòï³4tÞ™,/ ûÈHœ‚ðm¿ÁeëX»hÇ¿ýž·XÉ"ÂRQ­1Ž“ºÄÓ´y%ÛVašDjªìœ§z3ê!IÝrÌu ·j9 ‹‹Ý0ï_È¢fä´§÷ÖvWÝMq#ašqÿ¤á]®¸ugõR=ð·_óí1Tï9ý}—JY³<³zËJzñGÝAc¨`1 |t'5 5A–½›Î'8¤p‚ËJ¿yƒ#mãL9öŒ­(|rš)XtdMf\ˆMq ¯uvç.ßR=L¿}ÆÚ·Ñ&v¼ÃÔ“Zº*›ÔÕ§ªÁM ’8ÐtZkQŽ )G; tÇn׸Œ¡ŒøMÓ‡5 ƒó=<YWS ®Ò¢0µZa#ŒŠ§²qË^OXjùÿµ/Zx“Y]⪗°½¤vÎPÇšµ¶ö¾¡séd‰ØÏçGæS›ÿ£ˆaÀhÕ«É/ÈÕv·¶>µ¬.ÖIY¶¤Ý1×MØ)”RãM/¹£ÛH l¨‡YË9Zÿ§·™‹>’"}eÕ]Þ¬£»wGxA»kiÚ}+ï&àÀãC­E¦jšlØB{þc}~1‰5ð¦´ýü}&²žP§¦˜CÙ£ÁN-R¾>%±LCä‹ÊÉš¬g‡ÎVe‰~¸Š.3#”[“„…A›LSiZläe§·‘ml:Í?‚­Kc~0<³}ÜŸ5wϽÎ[Ä*aÛî#A÷#qðéïUìÔÔ)®_s…¯þš acçU.¡,O‹¬‰bŤ™è-K+ÿegÃÖòš´:rT—•NDaüòT-ûÒ'ú­%Þ§½}9Kª7ó/ë“5Ï Æu3Qƒç~T"­ÞZK}pOZ¤´C£"ÀÝ7’|øBÔÁ²¯Kå‚q2tÛ« C›b†˜ùWÃYGB¨ß+Ýéèf@Ÿvÿ×É‹´[ýÐÛ—™ì¶XsFò±eͺ7¹ÑQ«$ô>òyý‘ÆÚŠùäÙýXeèJ¤¹®öñö1£008í»êw¶b\zU“ÞV„,ÂSüRòœï‡.˜ç«€³…$©$ÇœÈÝÕ,ŠC„†>EŸ²ü¹èãÌ?þ’{˜PÛ8Ì)É­0œDí·ÓvîÛL9©#ø ¶S—Ž*"&·uUÑ9 õ(1©2¾t3&{ðшSœ÷š&.JÂ{~QS!õïô¶<¾7´ÒyüLPR3áÝCIr* ãô9£Ì8c«d Š¬ý­sb è˜Æ!Ak®iî@¦äØŒP/ ®ìÍÌ´]cúS7jÉáSMU@x±nëx!ëžw Õ¼uê"ÛI±¦ÒÀF ñ*143 ¼Á—ßMî×ï——¼4ìž÷3$âÿi~zöÈõÕnÙ³X¸;)x¨õŒnÝŸ£Ã“ZñSñÑ¢k¹^JlOK,ýG6Á„ãåXª9ïvXÝ&çáÍëȢ[ïek$íR=/ž'âIcÐ÷±¥¤¡áeôùk#T‹¯[ÊÐÆ‰×Ù` ·HL.¬ÂD©ìëªOD™{µ5#CåÝv+5©œz=ñzJù#Äë·¯¾`Ô4TÈô£Ë*É“Ç4›)­ZúÃý–[mdý(Ü¿âá®nNŒfbÏ×g¬Ç>/ëú3äSp Jí>9ÒDEàW”™•wÁmàžO Å8ôÊr—ûè€Ë»¨j8yzIIö䫹*çÁpž¹å\j9™¬‚Œ“ÍäC—~~Ž{‚q”ôÇ›Wk`eÓÛøá°íú‡kÓÔ?¼g5Ôoôœ¯E=¤úVr‘þK9_é$#Å9júeòî±ú”Ž¢tóýlæn_7œ¼ä™FÎɨÙþô7N伕ÛôÈô“×X>#—ê¤;¬.[¶´ìÁwÅ¢ÿ½;qÎò{–„é Þff[R^ÖäÕ)Õ-LÓ™àÿÕdÞ+ÓãÖ2Y¤v_š±*êãîF–Q~$ùC*ÕæìpÊ57é›3SCňxè,_ªoüzþ†L6z´4* Åᑯq\Û¬ž}µCî µ@ÝâÅŽœÐ³D˜wµRGbºpg„UU äZ¥ñR‹R% ÌqÂQì8_tœæ ½¯ñ 倎åwCïnÛ%’NdÓ×ÕzëÕaFÜîTg°DQwöÈ‹ãÇn £TÃ3<Áå‰V¨žOq_ÀA²¯h×mJïýwÔh²k&ЍÝíã$&r4³ßUâ-“,b©ŠSoƒ‰€?儃j@[ HÛYQäȹB¹ÉÈç‡ ½}§ƒ>Hgǽ”:®rg-1Ë­ŽÔo-QÀ)î¦Æ³´ôkó&±{7?ßBòé FxÜÝC„£Íù4v³U,‡½$?úF½Ÿ¿SÕÞ®Ó¤èÓÆ—•}[ å-m§«vÍdæÖm F9²)R3€­;gô!Í–*Í—JqÀMš)5½ã¥îs¸™cæj§ƒ/,´¢¦^ñŒéÙó±É«~/§F%ÊÕTíS-’ÇðÂJФ³äDùÒ½ WwÃYžcÀr½¬=©þ—i†<ô»YB›ñ­±Š“ßÓÚæ¢ëç³VrãÍXq6Þá’±ý“"–¸£„öêQTά ¨ºV]y1døÚ<æ—×v|y2ö%™ˆå‚äâOhMí¹”ç)†öÈ)(„3÷¼[H·²ë]÷š™ëm÷û¹0÷{]"t&«Æo'éÒž‡e3{h“Å`\Zº’s~GNˆghSí£>ym»Ç,¡%&ßn•åQZ *jAæ=õå®Íf]s+³]ÐJ©§Ç#¢bîrAgk–rˆp¿}H°z|bê¤S“a@GA±‹ÞÙ¿ÊS”½wSlˈ瑋~gCËØq¹‰/Ñ_á±¾;{â ñ?ò‹8cñ)q[ÙTȾu yÌ'&ž_! ’‚ÁëlÃŨZÙp‘“xÆéNÈè·tSQÇëuæa,(б”^´%º©Þ?C‹rXÔ<§ëUF†uæ:‘}Á!µo*×·ùìè3+±gÆ œö‹*¥Ûyóæí¤³u¸D”•ˆÕ56Õ<õPc^GÌõgQúEµ3µë¡’?§HŠp¨zÎ3Ê>—ß‚Æ5±Q{‡Ò­JîßJgÆAͲ­±NÁù ¨%äyo].mó…ç“ðñóWD†š »ÈqTœ’n6¤âGQk1t Xô¼ÒÊÂЊ~2¼ûU¿ãD…¢"RD‰:üއë²jÓV*M ‰m /t™‘MÌëEÏã­ÓF›™Ä­˜»Ó%uࢠ/2¯þDï÷ErÝ}¸7Õaöo³ô{òn‰W&ÚÜaÓÄÕÉÞ&þ7_Ö=±rdÆ2˜ØLŒ„¦ƒèîÒJ ÌÂ4NÎr»Ì*ÌÁŸ£á=Ýc÷±ä'^Os‰=„ ñ„­¨ÜñãÓ'¥Âx,Ìæ> ¿ÇÒú¬º6–†?@ë+ô˜âè­Ò2°C}»4¯ÑÓIoí¢5¯8‰~î[á•õ?9Cäƒ`㑯/¹/Ç'ˆáW¹ \úçˆÞ&ôm*'/q3/±SáÀ.T\®Kñ‘ÏVMîÌ\zöäV,ë”Ó¨‰ó??m–âêE›Õ4zÅBÊósèaýdòK-ÜÛ§²¿œ@>8¹R:zŠ;*/—c£ ¾æo…Z~c-u¹=a…;K`¬·¨ôK[ Å<è­µ¹æëĈ¾óéɯHÌJý–”áË; ó½¿ñ8Æïú¸×‡§×‹ß"à2-rVacP‹R}€Ô÷÷Ì’ýÁ . I;Ðãº|áÔ>µÐL„½sËœÁE—Ö$ϳ“Ë´aµë20oŠ~ß9A^+¢å¨ÊVcuŽ•,àç;Ï•ê¡Ö‘—U”â»Î:'ßøW6A+‹´â²p÷áoA}*ºÍÒ?[’-w×~ 8â>Óó)ÅÈ¢æò]j! ÂC½35º5½¢<÷÷à UÄu$}Aås¿î†)"ðüµ<¤¶¦.öº ú쌭,ËRmLkbu*¸¹ö~JìªWç²OÍEá·ŒŸVÑeØ”xê6qJÎÓOÊÀà­dgùºãÓO”ü¶¥¿ûäüþÇ%ÀAƒŽË[Æ¢®2ý.ŸE—£ÖN9×NyZ13©!RckëÚÊ_ú†f%y«òû·kêK¨Ç!3ñy¢ÐU*Ø¥²ÍÙEÃâ§@¸åÜèæ»ÏuŽ0õð«u;-kNѳŒÑ0gaçt O/ÎKvëÎ’h—L‘S=»Ìç,L)ü{9¥Éò±+%] oQ/¶ïöÄ;8õ=Ó§ áÀnÔSq÷Û:>§¤-Rßj/yq_k)J=xâEEnMùÐË驉>ø*Õ"¥fdaìLDf—¦§Xi8©%’|Òu„ ¦³x!m’i7é;¢K3ˆƒ$ƒX!2|Öm!B S: 7)4"SYåH@ÒB êB*B‚BjBÄ„4„¢:36ù!M!êBt„É!Ò?$ ‡H@þ‚‚‚!-! Bd„d„ÉRC$ œ$ †³'):é ’C$ ƒ‚tÊB¸„¶C$ ï$  ¤ Õ$ ‡HAÆHA ‚!2Bd„Âr™AHAAõ—Ñ"Þµ,t¾½CMÂ…äÿŽÜíϵÎÚ¹£o•.µ#ø«ºžýWw]o{<ZÜWá (Î}ìH€ÀXN7^I(¡ƒwk’ö|PUì¨0BA@=717‘O ºâWZÓûB4‡ÂK[¤0÷Plñnèô’¯½šLe¶ßK››Øïî§JáŽÒ ›Ÿxdê˜m˜»‚šriÃÏã\æFÒùáŒ.?£@Iç‘úq½¿¤¨ýãf,¤„¾Ê¢ÐÑ+îy” É¡œrUÃëµh• ?4mWOìô%Û¤C¸g'…Ãx.Õ´u<®‚ý:«¢þm¾¡ΖñhÅãNDßZZØÕÉ×½Ô SÕ»ÕÁŠù¯ÂM°Œn÷”?,öçT*"KÎåÉÕ;µÞ /¡ÈÂIX1E]9Fp G 5{ÞHèÉ"‚ä0që–ÿ"Fœ”„i!$aüu=ÿRA¾ßËÈÇû«~GSãm¥Sùöÿf÷%ùp¶½œmÅÏX²¤5A <6ì++L \!q‰ è8\ýâÆÏ_QßD €‘‹#ó½/ˆö¥,0°¼=+r$[P0—º 4#¯·÷Dðþ˜u»×YÙšƒF¨·7ÉÄU 1yO–Α…_DC¤dÞ¹í#âJ‰%ÂÿYô(ÖþE€_JSÝé0¢b( (>aëv÷â­‚ôJø/æÄ߯Í9Ábgwñ+õ¿‹fnªÝï]çû|ãÀù„iJ^â4øë6ŒEÖ@ØHº}a°rLãš‚–‚jQiÞè©®޾už^)ïÚÊ_ÏÄýf`5Ú(ûiå¥# AQÍÚ·ÇžåûˆŸ3 &Bf¢+v|‡€nø5û:^]§ÛÔrÅê­P Cj–6EA¹æÇ’þûí /-O?A|V¯Ik·! WO~={£ˆµÆ¤¿¸Î®ù¥L6ªêaæè§1ÕìÑ‘õÕŽªbšÅ +vÒäî½ç˹¹ÿúÑÉõqgKÒ™sñI¿=匌qíW³Ûy¤ÿ3'©ðÔ¹”*Jò<ø)~Ƕ‘¢{~uÈÆ~)Åϵ A¾ìì2pA ßpXìòÂþq2÷iÑmüyë¦÷w]6è|$ÿUï¡»Ž™šFj±þǧïVÉ–æL”iIÅ2Õ&¢Q~fsùˆ=¥M!¾vûGmÑ»ùÞzî2µxý•9êźìÓi]Yw­Å‚ÿMÇ[ß<î·Ä€€Þßr x©[©ño 5L €ÅPø­D,êþÆd¹ŠVw kº¸êœÄžÙØÜ¢„þUrò ¨„>"½¯ÐBôl”¤ À\0â]( +±¿ßk-!óK…m”tT’1%5†­a›`ã2òö6§á€õ˜EIújâäíaÜFìØ`ÍK‹ <{œŠYî!þ3ýÔ`6ÍB¬¤¯y»¾Ê"wž¶9?÷kY~’¥éåô˜‹Ï&—€‚m:ºNRo +Õ¯ÁðÅÉ›«jŽ×;g<®5]à[ô»NBÄÉé)½›V«æ £¾€A , € ÓG´¢jhm<5ɬ»ð’O;.l¼ŸF/#otì{¤r9:²B ŠÌ’ î܃ÿ_“/_9BŠK}{½AÌSÇÍ–¬u¶0¢€ )ïhûÑO¥…&ØO@`ýï³ó…²”P£Êúgt–Í^j®bsw/ñVàuÆL–¢æÈqéŸõÇbñ5~胡›ä‹ÞsË ŠôiÅfsúõf Ÿõn× é6ÿ{ÚÌgd³»1*¥p—ÉZÃuäZI¬7.ã4ÍMUF«l2“ŸÓäüûÈ>¤ÑM{áÿt(V¿ŽZ³p¤ø úç¦ ;±Âÿ©ªDßqc£'ßȦà‚@ÿ˜™ºÁš \D<;…:°K¯>FÁ(µË}ÛÌE5N˜fÖtãù” Å<´oq3¹-ᦜAˆ=ËfârB †¤……‘²Ñ,9èK>ŽÀèû¸Wj×! ãÍåîfwcõ§ÏD„ïÅr=¢to›8g)2Î|µ×ûVÛ&í @zyU~Ökm©sŸ›µgüÚ½7¿“-,ªD&šåòŠ€7{ê~íRij¿·5–[Ž®Sô37ÆFòZÅ8‘Bº°òõ~lymÛIÜíÎÍãÒù’ÜwÎ#ˆ†þ_¶]·Ô„‰ô„ãëÁØÌx™Î~om¢ …çŽI½Aí~,M…ë=4zаx¢ð1 Ÿ•7]MQŒ\jÔñ³:géñÊŽŠHAõýê<›‹«Ô?µ!-ÚVîê}îRÔù¸¥òdvs‹Ï*!ÄÚã¡ÒX÷ÂB B šB!ÑQ›ñ)YnxÏ\‡]Ä`5èN‚8 ƒ_±qÜ~wQÁ–™Ïä0ðvx—7ˆÌ' ŽqœíÈîu\=µ ”$ žçy8^óu.ÃFÎíÂŒƒ¾ìáÓ´×/&Ö „›|3j‹“ëo™fw]}HA°ÖÙ4ô_‹#žîß"úÎÛâB ;l£ôšqÿ«t‡më“n‡í1‘þ3/É(õé‡sß5Áúg®>ºçÇ(ÎÌ£¿¢¹Ã¹ž;:ÚÉE@;vœ9‹ÉÏím;[fÔàƒl_' tH»NümM6Ó†ìVJS1øA ÷FJn~–ž£ßßâ¬E«-m¸_Y\aüiFÐÄ:}:Nžü¶§±Lv×r ªT<އJ²]šÇ2žÃùXj©ÒV7±•¼§Oô`Yò¢4y!2¸f®o‰3ý[Œô^ï¼ÝÚ ‘Ùn|¢Z.Ì«½¤ ý5óßûu÷Ÿë§™ ž4gkë͸µ,Ï|þn‚mKŽs4£´_‘ÿQŽn¿Ý‰™y6ÀÅŠ€ :q0-|&¦Äÿìäå–1ò¾‘A×z÷¯µP—«È^ç )¶e:WkÁÏá0’“[„­'+Ú€1LÂ÷£àR7.léOÛ6wßîPÝg j7ãPÑg+úšÆcq 9Š»†ÌáÔçm]ê®±ÀB“âÌ·‡¹Ïƒ§ü°Î›ß¬"B þ÷âëkd0pŽ–'— n—üoø€ ñn,[xë)ìWc¢|Y‹ƒªû‹í=7 ]\6 M~9s½ ¸vÎÛŸ²ÕgUêz±8xÏìÈ㟙+ ¯ÀÆrpHy „>o"™ÒuEc¬ãKï\î꯷®<_æï]æ7å@¤ m!·rÿÆqvfWµ›¤7W˜Î%’ñõÀ:^5mmYùB½´ÂW'r%Ù¼N òˆŽÔR6ͧ äæ@Ë+LTÃÇžû´A… €ƒq5êìz?¼ûEsÔΠc!²ðùñ![W§Íœ“Ž[}ú$ ê$ ²$ hHAÓ½ºäì­e<Ò½•J™±¶×2~?¦”Ù©Í GJõòÉ>Òù Öó $ ‹³5;¢¤ fºÍ$Ø|dlT§®B¥ûPÝ[^Zï³6«£ëÝÑuQsd„ ñX½¾!êÆäÊâëµÛ”nþeî³Îš|¨? ¢B ¿üÉ ~vÍ^®ÆpÞ±ìTU˜¦oj¦Q@P¿\Dw/K”‰ckÎP÷l cÍ|gøxön–ÈéK¿Îl‚¢èÚ´ÕF'£”ÒS>On½\¿¦›zþ¾šžÅ+ÝsHA[ùkjÚÛbjJø]¤jü¯ïá€ÞfÎb7©@}rf´ðX¼=Æ‹i2ù©ÑæÀ|ðèA ‹n¯±|¤¸ֈ˃œY|øg­´p…ä†-½z!unÂoƦְ¢q@‘ל{›Ñ@!(ë¼y«`TaÅÀp•cÑ×b$ᯃSgäH¼wŽ ;Eãöú)Ãqš.·6ó[ÄÀºdFª§=—‡TÌ,¥˜Â%À›Z†Úáç·Åþ{<žŒö$oË0Ø­?ã×RÒ‰ðJÞû±Ÿ{‘¬«ñM»ƒ088¨ÂÁ8Xš÷o ñ8Ü×JûÂxØÁÔ¡_jZgG¯ö« ›9½8^+~ƒ@€ƒ†Ä—óGŠzyåÆ1·ìË‹);O¾§¿ílóDéÞ¡wV^®«Ë‰Ùâa}qKR$¿úÈw—´Be^ÔJöp“ÂR#v„½ä¸#Ó7],ÁwÍð(¨-EgEÄ&„Nýé’B¿ÿ¤Þ¨MË 8,Þ®Žd»xaä+¸‰¨·”ÙŽ§.ÕoÕßϺ[ÛVèXáKs°"g™® :îÍ¸ÔÆxÜYä² :¿«©â±.H4 `2‰¶üÝ‘IªÉ¨pš‘Ë <Û÷$¼ËcÖåÂóáU'_T޵GQv™zŸÇºÎí‘äEãÂŽm]bË$ Íè®Ííu¶¹ù«5ߌ׊-Å­¾I];r¯§Ž¸òd¦]lã.PÝè_¡Û=—ÑXúæU3faL?_aÄèw•~˜³PÈ;KܼQS¡ãð Üõ2?IÝšݸ9„F½oHíûL'o0šB±–Ž-0j;8,Иé)ˆK$µ1æî5Y;&Ci‹L¶~í @ºl%­–n¦æ\Oìt7ïscǾ±`_jý¯õa @‚—Pñ¨R,“']¬L–†vxïø­iuléz䫎Íß㤅œþi”ËÄøª'¾›ƒ`_¾êÑGSÃȸ¢:†åäñN´N4ÝÁe €TQ[µêoò®Yö׿TYÉ‹þœßˆÐƒSðºED2c3ºhx„óP!,ŸvÈJv—Ž]×ñ´Ãð÷¾³¾—(2XìØŠŠ­;ø'F„nI[È<–úœŽÙÞŽÂ¥?±PÓ–¢™G&Š;É÷h×È \=ñç—È( (ëF˾0•«Ç/S¶0­€’¿Ñ-ºÝ«[ÝÑ¡¤`˃ü1qôsH“W:® ªQzì /ÌŸ^hÍt6¾ ë2vEUù)tIÍ/Åðf©\US’qR1$Õg"ÕƒI½qýýË©©šáòÍÜî‘é´|úÛÙ-ÁE@m”î6Ù+E\ž}‚|»tw¿›Õšƒnåt^…·{óüü%ÉÜ$z*tõQòéÃ~)þ˜g$"C<áÕè„Q̧ζ ðµßBHÈ- z^JúvŠÝ Ü“9ˆ7Cð}C9W?¶J9ÿ± †õý£wç’œt¶¢§"Q®¾Z¼VÞÙÏsW”rLA1ö‹ƒ¿ëGÙg83ÚÖ&."—®Òp¬{È} ³´õyú¿;Ð’A œíÍ·H0ÇàøÎÓ$ÉïS¦ôâ¼öHíãÇ·nò:ùò@Ï “ïGª/»Â±¬¯TðRû‘ÿô¬Ÿ1QPN”Pžàd0ˆ-gànBÇJÆggx†† 6ërýâĈÐ5•`Ág$9w,œDí±= ÏÞáþi›×Åö¡-ióî{ަºÕƨX«UÙÑMµ‹Á—½7`ÆF2|VŸ”§£ÝÉ<¨Ñ ‰ÈœÔÒþ»Óª5PwÏÛ ñnÇ„¨´Kº¢ŸšPŠï)/6[‘aeJ‚ø¹œê)íQ‰C —ƒÖ›9óS¦~¢B BzB BBÉ!$a÷ŽÆÎÒ‘†,ä5±:’â“dfw®2ëp÷IvÓ“ßÞ!Ï »€²z sàÿ Ô"$ ÔðËígÒ~Íptäìb–aí¬ ( ÐÜ"cŒÙ—ê¹ß³2µþŠ˜¾@šܠɰÖ{p¸ïz¤öÖP—Û|d†)*‰üoÇSô9²0a™ø"Ÿ•åÅ,a¦Óä v¶yTX‘(‹L0ÿd±P%¬n»E—1ٕɟœ—EÄý&7wOÛ„5Bƒçzük¸‚¬@jƒ¢mZ|ºG½˜¸×´Nÿž}Ç{R²/xÈÉr=ÆÞ…óqóää3¾ndU¾¿íãüLgoÉ5‰*›‰´N¿Fn¯Û yFþ»ëbS]ìV¿ÉɤœE6Ô°®ØÀk^6bñ:´t›Ë·ÕG8¤éZÏM)ùYO½a—bÄvi_Óm ûö'·ì™uÄãè÷;Bk…ßI¯ú/x«s¥ÄTEx vËÒµ……êø2!ÒIjõ쫜Èí°a"µˆ›½3 —!”‘?Ty²–÷c'Å|ûöb^,eß¼-žÿžŠæšþôÙ 8UïTæÂÿŽüϾäa>C{ãø3`ø]œ‘jù}wp¶”Ve7O&"§>Ì]Ÿ Þ¦…jÈæŠA±£ÕEùaÅBÞä·õ81½Q<·©¦óƉC`hnZŠ©Ìõï|oyħ6å‚¥®¦ÌÛÓ³ÅáhR,ap|õ1&[`"ŸçœÊ€aÄ 0øIŠà àÀÎÁD¹—æß»ã¥$ÀØÄÝâRxÃU;‹Ä‘ë`ØûZ "NšÈž×t°Lx¡ø¿§2ÀŒ¢Ùÿ†ë–å’k·17à騞Ï:Œ¾äfQ»SûÞ#î"è(ŒŹÐîcw®íGåÄyXë‚wuÇ[wÆî±w}“l­<à‰"Ò0HAÚþ~Xɾù™ð ’í†LZó êÑ1zD™»ù€uĵuù%z1Ósâ”0€sÐØBªž¬ @‹É•1]™Û}šÖ[ýñWFÎ/X¾Ñ4dQu3& 7î§ñ}’eìTc í{P¾7”rzä„€·)ã»Q¡¹µ0©K™|Ö®gîvÄY)ÉýÎÖxÜ1l¼´„‚{å›ï1«ƒím[y¯:S.>À´bö dJ×=Âc.f‰s;ŽÎÌ:«Ïç}Tœ=G¹ 6ÚSûÒ±v—:Úa"|P·Þ#+›í4ˆæÖ¯jbÑ”èÎK›ùªç—mwÌ4D¤ ‚bB D„¶, 7¶öõ[¢Mü÷Jeæ aÝÒšX6i“y)Ï~9\ãúºŒ­r¢ÞPaf~·½"È` ôS/hÿ«jy"]}¹'s‰¥ 7ÃŒø)Α}ìžn† flâ±WÑC»Æ”² j‡‹ðcû…œ¼?80 öäõ´c®e‡ô—‘unDƒ:ÉDHFÃ1[„Ô“‘;è'»Î¯i½®Bˆ4§§WAi©â}çV^äbßã/†ÿ­p8ÊdÏ “X¦¬þÚž£, i"Ð÷¸’¸ƒvùAÁöL*kaµ„gE‘›¾ÙD+61´i¤4³õŠ+èÛßL£uÄù‘Ûí4¯9£LI}¬’æfÙ'ZñT¦üE°Ÿj%‚ÕcH@­¶æË‡ýŒÍT6š :zpfÖ‚·$ç¼q‰d§È Ý9݇» IÆh¨TâÆ.;¸¶œ’Õd>óÖpËäU¡õ >r`8⾨Þc÷MÏhYf/†®úþú-’hBɲáŽ2÷Ñ’É]Ötf,ê¿Ù%ú†G¶µˆŽk‘Ýÿ¼µñ©|Á׋jCƨNÿ€Ãîšw¦¸JûÅWí¢/£¥HµÄšƒcq8‰ÎðfìHüM!(!‰Ã´f%ôÓ‘&}ƒnÐc˜Œg×ôê:î›O‹@ªË:Nžk›p£«6~KaÂ`pã¶reĦ í—ªë³fd|™[V¯ƒ|HAÍH@Ä“½µ¤„:D/Î}3ë1¦æëìO¤ûÀÄThà…Òäzš?Öï‘âmGÜÎ,'ÃÚ ­im­“ÅfV²ß™q¸ä~’¯‹?ºçíØ4Yx&H¤át˜ŠWË¡€ ‚D1¸“R©YƒþCbà@ˆUrY¼Je8°¾³äÆ·£l®oÂø`ý¤Þ^¿m\½6ƒ@ÊÒUºže®ãµàG2ÙoBÜôî’‚ÉW¥~%>ΩÄyýü¾‰ðÔ3¾°¤L©Éf£`+Å—¶]„0¤±ƒ¿”+X¢§{ûóþèv(ä SÊAïÛFSÌoJxµÑnª8ËÜ¥£_¹áÚ¤†s}ëÍ&–ñ¦oúß1ó÷ÇÇš H³Ô’yÒuh}hgM£㪚¼öÿ¶ŽM)Ũy½-!8_RG‘=`/›ùWìïOs'ý¥ ÿsé%PÄz7fÒP[WÜ@6sMÉD½hÚÝwXûËÊ»&¡Ê -o¹—SŽUȱè²cÊc•dKEñ PM:H—þƒýÜØ$äzÇÙ7-ÛàÇ+\Iú”œúï_Ìóq®¼x¥‹s™ìŽeŒK4K&ßg8-‰ ŒÄ¶Wn/ËÒ·ú.úÏ6Ü|á–‹;Q«'[qüb( ( ²B ²B!5ãËxñ¸¤ühpyEÃXÝÙz=¾ÇŽ—ŒÛmàÁ“–$!迹­Ô4Ù`ß/“ÐaÄ2„0¸7ûÞ[¤.ÚY©!!’ó^[†wCŽ“)c'Å–Äní²á(f·’\mÃ*ý1éLˆþ´R«Ê´ïìTÆowáZ¿OݺJp­µ)“y¦IòÁߡɨ÷™ðaIeå‡CH×–zÖ«QÊ7) ïܲ|²×Ä„0½ w^êïÓa àŠA³Œ|ü:à|)5íØZíÂ%8€’žE™xÚæx}˜S‰Ηs–´œqˆû$ Õßèß]tÓAkRÎ÷wàoÜaÑëý=PÛç2lötš(•F-sãÉ·~Íì»ÎH~›«~§‡L@ ‘Ü­þ ÅÁ³ýêqÜìZÎåìÇ ÿ˜0÷ù¤º`‚Á;êǯï}'Dˆ)Ûßñt^:¿íßû¯ÆfFê.Z÷Ö^”À¿ª’ƒV_žôhƒ#…¬0uPëhñ÷+áö=“*¢n­z1‰(Çø1#™_óGÊ/Â\ÍÅ+%‘­÷P…35÷4p5Ü„ÓÐj„_øa´3½lzXLŒÒª-0ƒ”è?ûÌ5ýäþ½æ})ê—\€ËyvZãäÉìàß·âe„n"|kÝnÁjEÛÌÌ“9¦µÉ#‘W, /òà}æLï+~Û»¦wÄ ë1dEq5øÈMQaá¬tW3¥Çy2ÃÁõ÷W¾¡¦Šú÷鶈äÁp­óK¨¼gø”ô•äNÏúyñ[½{!àÜ.TnÒÓÕ{ öÚÆXGjåTgaX§å× ÛÛ³¢ˆ>i(›.ºÂ½þ$úÔ²d0oˆ@€ÀØ ){6M|ú-‡aÒ è°7Ž:IÛO® ÇÄãÄa˜}ðÓæ¦ˆ~l ÉÁq¶´÷<,«Ûa·[ Ø´2ž‚¹òhHAZH@Ä—‰êí–v¶ôl2­ÿ)l»j¹•nöúªæžH@Õ>U­MÆâÛõcÜU´]*l±“§ÅÚ×Òg‹¢+U¬ŽtÛM““Ã&Ì>ͨûýGÞ?A OÁ¸pa|b°Õ{çc/† ½~þ¥ù¾Ñópø±Çà E;n&º?É~q9ØEBÛ<°Ñ縬ó¬”å®6¶*‰’qÉiNÿºüª†w—Ähë[\—§ðôB$ g®É†lrÕÈ“QD>f">ï=´­f× µgŒ¯-"×K=dÖ¶©ùVåX¼Ò÷îâ).•á%ŸH@Ä„›IGÚ7bÉw•èiðkn³G¤Ì}›TånºL† aýJÞš°T•§WÊh!ñB±Ñ!Q0Û ¨Is¼ó 8AéD‹ìª:¡U.«Re¨`ïSä"ÕP&¯¥_ì¶^R@‰²"I[¨½a9è@xܵO(°H,l(žL‘Øßmæs[OÆÍY!Ç &Ài¾¯Iqž¿&ùLx§žŽX½Ûõ‘a ÎU·þp•¸ÀÚS`ïÂ&°ïI”’‚–æX–‘–f×rN#õOä–€ÙcUÉÀ?«½.íÇΔ×zGO_Ûx](Ößîµyà\îçÁ—Ÿq±“ûº|:@ƒâˆ/‹óŒÌQ™¦ý]þÝmYù³Uû^Þ›š›MöV]ƒrën0È}ãö‰~º9óŸß2ÐtŽ€Î÷{“”rMu¸ÎW£`4]9¥Ýwþy4ŽN0xn I±áïÊ s? erF1Pùí¯æ‚‚@5…_°mÄ }·«üFÇ«—ÞUì^-—?Õ?ÁñROüÒ¹¹Òz’i±1ïka-Ÿnxah™y7ð¶Þ9Rtí§wÅäm•Ÿ‹ _PÀ4=Žóâ÷æ(“ G¢ÕP”PÇ*q΢o=ˆ©”šª,õüMže6¡1¡Qðˆ~ð`–:¸‰Í”ãÎ’ŽobòkŸÔ€A èÅRð@oÄaå6^1!3s”¿õÎóx¾Àb¡òëMtYÏÏœvPG‹ZKsšÕdM ­pöû;rámVŸ ‘è:»M™!UŽ'Ná'$½!q;5³6" Å·Ÿ]›ÏQû¶½Âô9ë ì3™Šÿ©‘/»l§ïA¤N|5º3ÝÝuxç« tªª<±³#qC,:äÙĻ۫žAÏV‡ð–7FR0R[âVc—–dZdÔ÷Z9/cÍo[a¬÷¤ÛyLá«3±»}K„-·U]chE}޳#ˆƒd+ªY äý'W!qC¸DK)œÅ• …☑‚Íe'©º»\aÚÇ3`+²wgïžÜÙY±.'?óƒÕc|ʃ¢†ÿØ8+H€À-q}†q¡‡ÿzÜUK‘ °Ž¨½—¹rD›T ü`?Îê›fþöPIœõCù“½ñÅÏPÊD ºbñL %Ûh«udc `ÁíÓlÑøŽ–º@ï3c°çë6ãŠißY¨æò¬³f4¿xvî”f‹ÍÅ!½!O0{ûë´xÜ_¶M¬_Í+ñe®NsŽ×ỗsã¿kÆÎ‹:ÏÍi^Ü6gg¬ªñïC† ÿ] Þx†¾”·/mÊC–СÖqîlg<ô=\Ï?o¬¾@PÈ=PÎåíŒRÂdw.[fûòeÔêKñhĬ)™Wåˆ\ûSo›E½ùpÜÖ•ƒV‚K-¢F°Y£_±‹”à¿$šo?0ÃàÓãÎmZ† 6Gšöo BŒàBÖÝëï*ó×àš®ÿ8áõ˜9̦ ê•j7ýçDv%8.­Há5 ƒònå†tÓ¶>㬗ÂÿS­k!9ôŠÌ†‹u'êêËöºe¶ï^êê¼Ù\ìË«Kë§ì0ïí!ù"¦2'qÊ‚4NO)|@Ò,øœ=<‚qD tÙÆpåäñ A7€¼òª„ÅßjmÚ!x (Ä{âL˜ß:½vµòRšø`¼‚_ Þc‹C&‚°à±Ké+Ö‘H„ýHÞ0f}è  ‡á†×µ%a¡×›æ-~Œäu#è¶”ÙÞ¤2‹€¸”A,tÝæÆ©¾1P1¯éKÃzmhXõ‰KnþŠó5îþ¦ß^s'ظ6Áäµ~–ûLs^úƒjÿ~ñïnC³|Ȉ˜a!"B$ Í$ `$ qlÕ\ùwеmשh„ckõmqqóÝFÞj뇋陘[í ¥Ï¿+61dƒ¥™é Ht¨‹a€¶±@þôË<&Z¨fp¥W+¢\P9q‹¿&·¢,±+²ØÿÖ:l¡À¡âÍp yXˆf_1½.jÄÊd=ífVO^ëð‚å<ëW²ÜHå á#פç}ܰVüèëóÜNc|ëCÀjsD*|NfÓ¾7L%Ñ|h;Wêr'Iò(%ê%©5løìXǹ”Ü»¤N§ùvXûÛö®eÒkfä¿ìךØÖÿ:üò1–Üc«Õ¡©ä‹M˜¡Ø;2»Ñjqhð_ ©ßL³™ŸŸfß3ïk©j­Æ»Îl•×9©$„°HA˜oמ4,v4tßÈD*Fà‰÷›á'§Ëõ yÏWë¤<Ín²Ñ_“AŒ‚x®á–¡ö!âf–â§Ne2Õ»v5ÄWuîÌÄØ®]ÌFâJBý%«· tRBõte­¿{½qÇf Â*\TY}6ˆÇª‘ìUü‹Y@]èN4b *£oË|¯³Þ DàT°Ù™ã7}=hb!Ú7ÿÉir¸Æ¢ÁU¼°¹¼–WÆN‰$á°«„¿Ä\¥sƒdÔÖ°5g8çq¬ ¼ÛJÌó Hƒè‰0Ôù·ö²o)‹ÔT²,J‹®Ú §µRõƒ£ÒXÜqÖ?XM=Öýݧ}]ükeP¬A\ zeYŠij·70P§ìÛºù!ßD—«i©û[ö–O¹QYéþÚõ2¢Ã/&„hó£Ä ¦zŒZŠüY†ûrYÂM#g²˜”cÔËü\ftå‚­“ƒÁ7¨\ÜL!„PÍL«ÅXaŠæ§àLJbï'½ðìÆ ôá`œÒ–2ý]sÛC»ûí—JÓÆÅ$é-þñ×+ÑBì_oˆ©u«?m˜a!µ‡n/I²A$£œdCïv]%PHAQHAhH@Ù!‚BS¢\”W‹2á㈣@Š–¨0Éìg2åâÄõª÷ryf0´¸Á† 4X=zéj¼Àº_°›Ô/ú©ÙhÚº¸Ö#ÝÅ¿E^H„c Ôu’–²©‘3É¡’d›Ðþ³>ÿ˨ÿk™²ÌµàdË\é+¿2ƒõôuu>¨ ÎFÊ$ šþÖîªôàºdFVtAó•ÎâKè^QV K= ´¾05^4‰f#ÛÈEŒ1ƒÞoL‡~²<¿VñºkzÎVFÕÐð&¤O Êoÿã• ( p¯ªFЉH“6IJœ…™Ÿô“ä ÆL-çœ RX¾¹Ùv ׆ø˜ìh÷‚, ?Á1¤ —†_¤3f}bk'‘¬ÈÆë¿3‚Y»Ìn'.³Þ¡ $ç:ÈÃÐÓd€„l[‡gŸœ:p?ë±5CÏ †þå½9²„™Õ7<ÛB„@, ehUͦÑwÄ`Gw§( $Ÿ±¢M±h1‡­”ilWÏÑ­´Œ:"žø ä­YâÃ\X :Y!èî†Õ“n/– M|( (tqšf"ùB ¥ZÅ)ûƒì'à /à£d,å>³µš…)îbýêv5ì2Ê<=+ªGA*þò !rÈ2İ£\ÄV6L)M½4BÝú|ÞCLó7m*´ °™V*dW©§†©énã¡7Æ|Ü~ójÄe=ýСâäcâùîHkkOž2Ù¾ù$ p@³ž$ÕÁìDy­ÕŒ/ÌeÿíîKŸ`x~œš ¶aÉpðËMúH¨uÉæG¿0™/Eém<Û~|AÔÆ0ëè#I g ‚û¥j$ 4ˆ`k†Z“s†`D¢²§ËÜÔQÂ|£hç€Ë=îÍPÙS­ .É$ Îø äX`™ŽÄia›Íó¶Ž~sJÏ F tMq TY"³&Z×¾Öé‘ÞˆK'·®ÕûZÕ|MhÝwMxØÆÞU™$ô2•Eb·Ž-Í9f Ð žZ¬—M÷öÜÇg½Åƒ„Ú÷R¿Ýë›7çqÑÕÊÆà;ÉÓO¾{sÅ0bÛn‰ xØ”¿ÂgA§™nøEI ±¯~¥bõ†-jq»qlE¼òÁxÝLÇõzÑg7RéãCH$íf™6ßÉ%×ÍEuÕ¥m.\QÂò²½Xáæ]œ[õö«-ÀÛä$ ki<â~;xÊ­Gs3>É<ñÙ~dÿ³¸û7Þ³}H@8-þ/ÀÊ;ô ªH_W{¯[‚;zQ3‰…k¡ÒÙ83t}ÊèNn\KÑ¿oÜð°¶ž?^hAâ vÃ,^*¤ùŠè}ǼóÑ|ìÉ"Ë à«YòäÙ¡8ÃH Ûkÿ ñ{h9Î1z@EYe…€¥3ù=@ËfMºš x\¸è¾Ùh`äüÏûØÚL4Äbèõ‹p¤þ^Ô™eI²¨þîòÂDBܺŒÚqhfœAåt5ióOT€ùs8UžìÈ‚éäk<ͦ+ Ó¦²wê‰uŸ7¿¤ ठš¡ ¨ç<¸Ç7 î‘LþÏôTœ ®ÆMêÛªáåµQÁwnv™à¨ð®÷¬NK)[“‰ÂMÙsdñE\$üoAyNt×_Õ! –‘1®å Ù|8‹º —ÜÄ;Õ±[/³‚•Ÿ‰ð±Cm‹òÈ—§à9’_IÓ'ÿÏ­Ç7‰…d¹ tI=œØ™êížOݬîG»£-ŸWmÁ(1f‘òÊÆ‚ëãS/þ/.xEÍ—ßHD;ºÏƒç*ö«_=½:Fê%š™UUŽçð¾2vwü¨/³ ‰Ü_•]p^±pk•yw ×\p·)߷͹^TP (ùøDì7ãG z¤.ˆ#c¿,¡CDÅV€­x2@sÏê¡¡'V$x”ÄBo¢hÈKQLÔé{4õ޾—HçÆOãÖc‹wÝiyï8åe= Å_•mꘀÈ@Àæµ@ˆK´ó<ÈåJ[Ó$Æý$ QÂwflTƒõóAÉûT`;OOÝÔÅÿ#Ô;vÆÓ%y ×¸û]=+wéCûQ ^}Š_¡Šì8DñEÎ(z…¬Ǥq– LY3u$wé‡&úLÊ]ù&±XúÉ--r_rd•* bÛs&L Û8O(‚-°jôÃé‹+êÿ­ Gô&ÚäÑÿaÚœüé•{æªÞpïõ”jNo>ºk\jãWÔ„¶®0“{Lýtõ} õE¦ìõññ ±}s·§ ÿÌoy»ClnZøôÀT¿ÍÂ'/_ÒÓeãÍÝA%yòIÕðü.é|®_7cû©%H•Š€‚@€N)PÚZKÕý0‰ˆ8XCk _tÑÁ8š1½ì®6UÝ„e>Q·#mbÙÚÝþ”lõ!!A ¥²#c–¸…³sz†t£´dà÷#\adÆ =v?½ýÚ»Ùn ÔvTÞ!€-À4÷cXêu >¢¾A¶œP‚@üIÝë¹Õ!êˆHts}µç‰–ƒgk½;ysû;½œ]stº§E¦Š mdô×e†÷ð3ÄÄ$áqhÚÝå (9]¹ëÍ÷ÅO .ã^?ÔvýÓéxhK[4mË¿0 Éè`­«îû Úþ;¶+EÕP=åM[®±6ÜjÜ.’èÉfÐZ‘¸ˆ®¿þaIŒßÿ@²ÅþmÈ9¡AÀ1ùr“øÔRnɘ%\?Ë]ÅGÚõG3ª¨‡?q]neæ{ ¸)Êöc'Ý2ÃÉâ‹ën¶²C‚½¿à2>hûtÆ#¤Þ!ÍZe‰Õ¼"¼úÌÑ6J@üþ!yÎ ËlVW…bs°°d)8×§@µíš3}u£M]Úô¶ÜÞsÁ‹gާl£w[U\¿3c`åJoœ6PÒXâ4måèõ8ZO²¬ðë¼·b n®}Ì5¹ÏÔŸ)QÏ>³UÒ­òœ2Á‹„êçóÈXÕ'z8µ²¨Ò±³ä”ÄÁb¨¡@0ÞXê*™1ÈÐÏîÖÍëÉ2'1MOimL(šÁúmû%`ÊaCØ]`_b<½õ 3"P0xÛªŸ.šå/ ÆÏ¹@s¢? 0ûˆ¦ÅŒWCêoY¤W؊Έ~ ±ÝuÇD`óô®¦ÅCåŸ>—Ì4á±¹ëZ{ym»^›Éö\“ÆFÅšwÕHÎnéñcœ+Ö<ÏØ¾>5Á2^7ÁŠ1  ’´ÃI)õ¢äü­•Kz`¡„Õ ïk›'¿_ñ„`Í:¦rD_“”:l ‹´Æ# ÀÆÑSìpØ¥:ÿ¯qlD "u/“~FæŠ-6æçT`¹O/µ¾L¨$ xèÑZËáÚ5ìÜYé?¿³Ëê°ñ¤ùl¨0w“iÚÚ)‰d„ ®ØÖÇíQûèôÑî]?fI¶9·æû¶ªuÉÓ›Mƒ‰ÐRåØò2jÊs%°DÈpP‰]ÂØ‡ŸQðÁyäkZÿ°qrMbi¶KÑÇËïï–×Ê?Cß̯‰·o2]÷0M [,j—Þ›ìªû‹ñV†[ÄáÑï3ö]–qGÛ5濜hÆ5¦úƒÏJÂA8B;yÔS½î„¹ÙµjŠÅ?‘#fðÿpÁEh‡·Ê¡&…îuӾлöí;Ý·C³ršéʘþ®‰ñ²Z.æÜ°P6<'þ›ŒäŒ3œá¹kbH|Ÿ 14i?i á¨¤cÌHœ›f ‘ÆÉ³*ëÎâ1¼o.¸{î#µ0ºàºÿ}¨öÞ—¼½•þ*=!ñ óÛôÕõú§xìüߪù™ç›Ô÷öüQ·å5»7׿é€Q@P¾K¬ƒ™»/Çõ;Ô/ °(¥¤ÿ&Vkž95Æ+´*mËÇìˆ Ê!ä+çiJ±.âëxÎen]:_BH"uƒÕ ¥æÊ¡íتIh@¢C(Þa¢±ÖåZ¹®&Òrž,•·¬ë÷°/„ ãǵùã§Ôï×¥Ó±¤ vŠqdEa(-øSSzíøgøœ7„Ö 7ï^|^G>Íêù¡Eâjßw—Ìó‹¡â0ŠÜ˦}}Jjéïÿž™KÐa"]¦°}WSý‹Á:ÕyßÓ¦ïRVÒ?½¹0hŒƒ«Åy«rG[›ð+øpÿ€ÇÍ‘"Æj˜=Õ-& Êç6h¾ôˇ‘g²Eæ'ëÕò˜UšÝȬ-ÊlC+~r„q¯¯¯ŒbÛ>BF} ~)wå˜É-G^Žýþõn)WÐi¨ƒŠ@Ó‡Eh7`|@x8< )˜¾U.n5Ób29S{„ûÖ)6ÏC÷× c1§©xV®ZŠ|ŽÏ#n™,š,*töó³]¸À/Åðø¼OåŒ.Ÿqìàaò<šq¾oãiÎ+—®!¯?ëïÁåRa›¥¥Îô}PÛ±˜N2Mi1/»ÖsºÈm™ WWµÐ¨=‡ì, âðQ©-WÒ-m›•; D¬÷§fJYNäž3­J`ÐÊ™–ŸfòȪž&4R"vu-œÚÊ“Ò3ïš6~ÏÖ<9ÂA>í¥óx Þ\Poqã–ou'°QŸ‹M¹‰°¼'Ýeÿ<YÔîÍ/àž–Á¶FË}íâéåÆS¿âÓ#+ôôµž[ù ‡“Öü NÄ>QÕqð×ÌŒ3]Ò_‹æ ô&ÎI î*ûð=Wa€ ø¹ÇW>¼ß÷h쬜´Õ!…!]ªNKL톓ñT©o¥K/{'ÐkBgH}÷aÇ-s°îð-á³ûþm”)¹¥JAO·5r~Æ+·§rçD îÈ,‹Í‰Ÿ™ðöª¢S¿(–‚[¿²­Ru);‚€¾2©g‡Æ$sÒ1{‡³)i¯qÅeÇ3íÜâþ$¶O|4é½£,²l„±Øm©Ú]”TjÐ&ÒJªŒ¨d=ÜXL½ϕ̞ SBªT¾R|-)ʉ•Ùl¾‰9i€<"_‚ámp.:>”qn9‡ H¥m×F9S+‚«Y*ßüÕêöó¿_ËQÔeκ2Ç´øbÜjn4à7P°CØ9–öÛºßs¶‘CcÿâgScŠË „Ñ@‘Ø.”S]ÙØTüâÜB2%X-G‡ÌîØÔ÷†T‹ésíºÂ~®ÛÑã±Âs'n ,FTúm²ÑrîæyHyÿoÝ«ó>ãñ^…*|ž¬jºÆrsÿ~6iUÖ2KÄ€‚ ZÏE}¿ü­Ó®D}3y ºÜÏ|ZŒtž~YÆÒÄñB¡xR]ØÖ"û'¿f ´Ã¾¡"ù ÛnçÚ‘‡=Ö$X 2œ'¨lˆæp áÀì- ø«÷×F +4•Ä« «)N®-K A¾µa¡'»+a²·ý¹Ymß;úæß¦E…‚/ÍÓÀϨÂDµél“Dú½ë^^- ™º¦-Ú.ó¼e×Áôör7R•;âRÀzEÖí–Ôä{ÂíÞþÞ£ã!–…ÿ*™.w†™‡¶—y+ÆkÌu/mt*·kZÊ4”m-/-ˆÏÛ²È*C2†šªò»=N<[üŒFç¡á¨æÒQü¯W§Ø Ñmo9 ‰#ÌTúÂþû2º‚ôêßjEÒH¥=PóÅ[ᤆJÃv=4d¸ht5xA€ › >:ÇNÒJ‚h܉ñŸ×£Ê¯0j|ĤkP¬JCÚ‚gGòGWU‚|'§øqnôšŽŽ Â°ýçÞ¡Wþ%qÇIÇœd–\Ø © ½ç Q¬† £ öƒ€‡Ì+Ÿ5ž~^4Ô¬0~uünõpîê6z!†N #,àÚ |lù€p¹ C…‹•ℨ!jÝT´i1å-Õbd°c¯ì¦‹Ïd‡B…ÃT¹x2\‹,öÖ´û7µaÌÀÝ£eÜÍHRêÍÍàm0&ÒÎÎñ½ôè¤]Ù–”ֈ窌9×tpÛæÅ.ÓBê+¥ŠºÙiP&ë^ù]ƒXOý5{¡g˜wi¼òF!°ÎÛ"/RŠU-Ccc ³J“§„"]Õ´85[¿Æü9yaíøŠ‚†¢†7 £vêšw"§©¶Ì!c×Ö/=O}]÷kYÙÄî×*›èÐÊòØluorßɯ™Mz{Ð ³™Œ‹ ôå¤ä&зͧóâd›í6w:5ÓãqѤ ›èZA¤ bKÄ„Pó8l‹¸ó,[éþÿõ'‡¢—·Áǹx[ý¸…9ʮʷ“b·DŸ)Z:'r¯ê¨Ö 8¤Ê€Å<“;Ûée÷6–Ügà'A6+Â,ül9æ]Í©µ8ù…Ý(†Þ s€òP^ЬgèïQy¶24RÔä *”©užY#Ó{øÉ†P:£%"WYŠÐ¹A€ÖæDEéqv8QŸ+¶þo/ì™ë=DdíW¾/ZkPÆ}"Ò<$ bB %§«XÃÚ:“CâQ¤>ûörÓ¼ZyAf˜  ›`ó_ê`•r-þ7Ç‹³áf1s·Ê9l3»hסé£qíí=W0Í“P¯!Yq/žR-/{…fî·þÚ“†¢23˜“,+öö­NÿrÞH.!ý/’Õ‹ÒÎoV`h‹ŸééˆDE¢4b2ñ„Ì÷ÚÏñ¤‘}$Ùæ#¨žtu31xBœKد*; {ÇoŸñ]­¶¡x¼¼óYuu"ù·\\À™¦Õ€ßò°äò¾¿µÑ »‡„t„D„Ä„ „„* ª[Ws{µ6­ÛÅ þšpe"÷†½bÐìÝš×øÅ`*|4IMs²_–IÿìG”é¼z—~|‡f` ÞTåâcÑ`ܤõ9ÅNˆƒӨ‚¼Rz•A4ç%83uìh̵ɯ%®†õšØê”Ö¨ôÃ0­OóOL!í…ŸôÑ­•ñukó9°•ºfÚý»¬]¢ vL³;íŒ=æÕJŽj{“´r±E“Õ •×õŸd%®ùŒÊ­ˆÝõf[´c9âa4ÉDíKPGóã)&<ÿê7þeBŸt’°ú¶þRB BB4G3¹šyÔ9¦ú3x¸-®vïg’ìÚ÷ù¨¿?$q±?=‰&xv&³Nv¹ˆ‹ØOR™­Ž—@÷c­=z{ŽÚrT–sl/šé’­9Òbª$ê3/=œ‰ùX¼“…îERWzm|<‡×ÖAý„µúϦ֥8qîä…èÏd㊯àáYd¶Næ§Ô[y/ßr%ÅÉ¥Óñ`9ÉÍnuRá¢VÞOž|9€}lþo4û¬ƒ‰‡ž,’Æ/„tb˜ãÿs{áK[–mm_ít!Ûož>ëçƒÇµvî}ecr:;Ý {ú…åéZ¿®)’Q`lP_öoLÝS¶føüèÕXY| ã|,h™HçÞZÛ–'±W„t ¦‘ùQcZŸ*‰ã ˜¹×°…x’%L¶ïåP w«3rê\>PDš.Ž$¸ jèj ×Â+§|I¾&LN´|YÖeqž×/Ük.Çž‹ÒéåÉaxšjí_°]t›y>÷iv»«­«ÐüwÁA1Qúw/|¿Ö¢œ7µ¯í̾YÓC‘®g¸&Ôï†El(÷Kjc.YZ]ÿozèc0‚@‚=“†ípŸÇ¿4G6ÚË}f–ÑÕkÉ;\'NÆìUÒÏÞî’#o‘R,ƤaüVÅȶZ$®Ãùý›6¹µÔW{GÁ¦¼—œ7aeúKP§ÕtlÕŠ Ï.*ýn‰ d b~³7±_»ÖXò¾šw9•©nn<Ñ Û»»ü¨”É´Þ›Tÿ³Ü Iû¾Óq£ã÷=Þ&–•U÷K)CñÕ}'¯;bA>‡±;þèË3ZhÆ5–^9°œñÑ~)3‡K׬;NÍ·šs"ûQÇÇB)µÇ¶6‰èœ±B㬚¬=bØo”u7.ú”]¦"ðÓïš8ŒÎß±-+g=eÿ±?þ0F ;¥n¹¡kÕk;?ÔW«Ï÷àWe=7EMqC¯!ÿ¼û|=îÿì³·ù¾ôcæÏY»nþ_`ƒ² 3ܪ7›¶®ZöoõîÝúaă(¼G:A ɉ¢œš…îŸW]çúT]ú¼BË”‰yû½gh{ QþïØõH¤‹-$…ÈÔðÉ-<ÛÇNÜA6¯B-†‰ÛçñÁôãÔA‹ {=ê‹¢­ð=®uâ#|Ê/_?± yþ™|¥ø÷¸SÒutïo½åhY–µ÷ž/­LôK2çs¡8¾ŽËï+=¢†“ý&vñ&’Ñåuñç±ïN¶ž}CÍK¢Åð~ÿÝm˾ã9í˜ü½‚B:B(í(þ6“„â)Vû*£we ¤wAë¹³ã{~nï6$5>Þ7úoä? 1ñSôÑôÊlƒA°õî!¨5MцËÞDrÙWµÓ´P˘$»ãyÒ·æe[¢q÷‘¾&mVÀ°lƒa@›mõ«0)4ÔC3ze[Ü×Óiö,iïžÊÉvÛ-º³Ÿªµõ’È;9âJK¹y‡JE7§ƒØë—Ïq2uˆ#ƒÎ…ëéa 8µi‡üo ävܳ¹ëœûOÇuep;%±öÙNun¸î6&“ßÏå5U¨8}$/—¡ô³×hHA‚HAUHAãH@ØV9Õ ¢7^ž{£.µN÷™w·oªvºÏiëˆùäÇó`Þ~üÏ÷Ë•À@`h'Œ‡†¹ÆÁüŸ{nʦ™Lˆ© €–˜O2\¦í ‡‚IR/Z_‰®hÌš&æ|I‘û„«ng”kèI,f:a„œ¤ÐGŠ„ÍÜÛÔ|¦ª-ýjüÿôôI)öR‡>ÀÀ鈢 €Eйš×„†Îx©Žd×sŸŸ²C¡ÞÛ¢-U´ÞÁ ¦|{ª1×ö1i}%#0Ã/ª© &çÚ1õÊ¡·Åx#¸þÅì–ԇ¥FyÓM6¨xЂ@EA3T–,c+”·½ØÌÅO“£íGè°øº+çNw¸ûC(-t²aŸÆŒ6à‹WÌr²ìÒç¬0Æ'ÂF“|0ò9ãÏW¢a®÷)ñùDÐý7‡|T[ÿ6dsñµE¯:ÔˆA{“òÕ#^‹Q™äÝ_¹U<w}\Ô”±° Ò/š +[ÜÀV ½Ë?eâRºL º·Rh{y|Š-¿ëöBE­øDRh†Êì-H„”ζh'fçnkrÓl(G¤¥ÉA#YÕþGÕ-’̶Õ]Ä7_á9—ëXÃ{Ç›hf´ígø²ùÔÎTû4©†«Åvõ®ë>:¯¤Îlœ"ɤ‚øŒ÷‡\¤1â߭k¤wôšÔíSYâ)Õã ¼\Éè¨hNÅDè±ý-Ù;£àû™ì `äOJkCS³óW$œm)Ÿ]'£â+VÒ]¦ ½ªÂŸÄôq~³Ýþ¤Äð~ºwAx»Ý]h—ÿëô¦Fí·lo¡ÄÙ@¤ ŒH@á!HFéNù°ª¿*xKÅìK Ê]© G$i§Gö³šgn;¡Wr+—4¯Hñ£!ÙsUó¡m×½ZënÝ›æè/–'(³A ‹I“ûÁ™0!®W‹™‚¥7rR 9 ž·d= \|~,»=ê¢f wƒÿ(LÜìüä9Ò\yM òÚÐý¾åïy•¨ D2v—+L˜rÀ®Äf:ëÞI¹÷FÑ¥š4@¶žânWLÉÁfô2RÇ•ÈÓ×*ÄïÉÙìÝ W×H;¤ÛÓ(´Vˆw{¿ì×@«ˆ¿6ž‰Ì}3ùE à=Àç”/ÙÑ©»<ßÖÛB{꘩˜Ë~ó¯icn°/‘roÞL&óƒªväæ`+ÛOÞ-!™!‚B’BH³ÀËèàh}üW#˯Àù²3ìÞoò^÷Õ—î,ÛK! n³q÷¿Õ†—²›‚0±Ââ÷‡_ã —V•KDÀ‘hÓ$ÍUwÀö“•¥m÷ûÐL~µÍènrnp^Y@@¸÷{(Iéÿ(ª?;WX5±ßìmÂÜ·iRôH]7Ÿ¡)©ŸU9’§[R‰„ým_!Ì €±6ÁîÎÙéÑR5i~ŠÙLeÓ˜8nÍ|[…Ñ:e/¯F3ý d3}ËU³ç ¡Ìô>x¼‚¬„ˆ`‹ÿ?u€ o3$vÛ°Š%Þß»í>öŒ')ÉfF«j¸³—[vYŸsžžï—ÛòJÙù÷\ñÔS9…m–úì!€ |äá«"·Nỹ溢æŽ%_JôåYp᜽æþü$o™2ùfæ>máÕcn×/¹#þÔý¿j€¬t¶CìNìg§3ZÜÂÑI¬Ý´‹ö‹éi„^û­|ËnÃMV-ØÙ~æ‚„·!Sm&rjÍ5&™>>òWkðëS]ÿ&—j´ ŒÐ5^<ïŽWw…ƒÇH‰#"éɽý¼êC£Gù,¦Ü–Á-‰[<Ã$ªa¬¯¨èñy†«Ñ>uÐ`<\ä;±ëÔ‘@Á-Oåñ±ºë1QZžøžuѵZs ¨Z:.ؽe©['9j‹uì÷(|Úoò(øÅ#†çYÚ›4úZ2i¢uaÏ-?ϯs1ª’¯ˆ…õ²®r²•}[ÞUË>‰³d%úε¨öKü·rvìw¹ÝïÓ/;ÜŒçF‰<ÄÚ¾÷y$”"B$ ›Ô5µ;}>KÙ%›T]ŠÇj5 ¨wÅ€‚@JÞ…d‘2°¬® —´\|[)ÇÇM·â w=ë·Ÿìì”QÅ(-.¼—âZ1:$š`A —©Ð±hrê2Øçᨡ;6/gñÏó>#çe¨muÙžñ¾$¿ Dð™2lÜwÓiáùLùP¼K¶¸„ÙZÁU}¹ÑÖ»û’IØÇͤŽ"¨ øâþ7Ѝ¸ï¿Ü4 mNÿJ¯ÇQ.pRÈ\Ó})<ÖÁÎmà3âÚXÉ21Ö×nÿ»²BŠB *ñÜN&÷1>Ùf5W}Ý#WÌŸ>ïp–^¥1¾ætuªVÒ¸ƒ$H@ezkbÒk&Ñ xØΧHy4z(Å«)Ó‹tgð­^ù,ϦÒ¨!¹+SS1ßý6+–n(G¥™=¥ö1X9ÞöR1ëå¾ûÚºŽ¤T†TS…f?¦' kóöùÕ°•Ò„ØŽ‰¤Ë•OHQ9£×济ü뾿bé3#Ùèöc¯–î.q÷]NºR#)ÞÝ­—%éËkÞÄ„)€ܰH@Pìú]‹¿6 öuZîD L/o¡;-õª%æ¥ù€þFÕ.ÀN&ûV¸yx{”ªG‚6pèbð1˪s ¨ýÌFiì‡Ý|<š~/`àcv%—\çab‡¾<ðð=,©€ €©âãPÀKÙù¥6¬¨ Ø•¯_ä†ôðZk$1­£ ÞüŸÓ[û^{}ØoöØw˜œªºd?ÊI: û¬ŽÜÛT/âYôo©;VfËd}¤ïÇxœ(½Ò=õØä0–¦â\4Û+Ïa_º‡k,¨—SD¿Ü9Ì  ›nqV?NËl/C5ÿº·ª…Ø™ŸˆíüÊýÏ?­iv:½ØütÁk ªšj¢+ŒÉ¸ÚÁͷ¾›Xp‡–ñ‰=Qb[¿Ý”:®šïÑÞêžFàÛÞ õVŒæ)™¶ö©p ôòžŸ2p '÷š<ÜFý¶ýn9(æmý”«<­ùUäC›ú4ÕãYF}â£a­!µhNŠl5бýÈ|(.LÌ9Âc.ƒcéá7œŒ·oª8¢fËë9Ɖï|/).o–×kNU¹H`BöÑœìZy×ÍPš|ÙEw0Ž¥]‰ƒ.H‚YwqNšØËbö;Yã° YpØtÒÆ+:…ý¤ƒßO•Ç,ä]L,Žaò¤^„ŠÇ‡ ÑP±åÝÚä+Òåbpï»Åz•/Öî#U™ˆ¤ìàš^ýµcô wÊþ žQ,#c{X fâ}8¶­—[Gw â_)9Z >è$ ¿$ bBÁ‚Þn¶€{Ù‰¬Áä¦Í™‹uk¬*À»D÷Y‰Å41ˆóÁÁò€é;7y8Øo™·Î*¬í¸2œ(=·¦Üùk2J¶ìl ø¿ýÏm‡ë‘YZA§4³ç.÷rÀo…Ö0LêíÂû¡ýëóùä~C¼¦Ñ[¶ íÚÝc¾NðƒYÓë§Â¬=Ú‘}¤§\[#Œg¨_­DOñaßt_e™üZ£;ô!*m]£&Tú_¥ZõÿBÍystçÎbóéÑO7óÇþëÇjb8ÜΕӎ‚{«Ü¶„ûn]™ Ë1qÕ¸NÒRèϽ_u}¢ðŸ¢lfM&ïÝûz‡Pì+²Ï¥Å>v`¬,!Ù}š9\ÑòfÞÁ59Åœä{ñ ÷ˆ4¥‡^FK2¸ÚÁIUŽ‹¶ö×Ýó»ºÖ&¬¡úŒ c0.<¾bÅ1xWž»Ìk2²÷·Ar:îžW%ÙºbÅ2Ït¢˜Ë}þ^@›c+û,¦´½“b°Þ7IŸG‹¾¡=mÁ‰»¼¤5ïã!P<å±ÉZ:ðYpÜ.)€ €ƒÔ‚ˆ¡!õ‚B G᯷Ewü3™M„KÌ4 •›i “u/2Fç>vâeaXf²q©®=Å&O,º÷`©iL•x^æØ;Kî…MýÄ*šþH¦­Ñro(_]üvΖ¤Nó+â…}ÿ¬ ¨dvypô{ÜŒtV ’ÛÞ¦^¿¤»TGN(~Of}^"ñ«~ÖÆŸÞ€Ó hÎ:q~w¸q RW¥ù]ÜO%ýõë§ß 3ǪüÀ@š ݯC/;ÄJ0eÏj- )U:©Ð±¾)²û)SØ5OûIÏ&œµ‰Æb3«Š(á¡ùÕôcú`]WJ¾‡Ôàd§é %‘rڞƘRZlNy.oJè„)´;~Of€ƒÜ×3¤Šœõ[úë ö¿ajy(~ ’XŸJÏ‚œÏÜI#v¥#jó÷é¹¥† C‰wžÌ)¯×£´V˜õÖc³¤ãR¿e>j´s÷ŽjUúXE'ƾ=o~Dlúã„ÉÔÑ„i‡FôaÆl€D³þºßÒ•(ƈ,ÇdN‰zN²)PS4ƒ wP®{>ÊÂ.’KFšÕ9b¼ì’ú‘äe×—:ËêI¯ØhéÐþ^¡r/£'•W{^®…Ã_ß:Rûºá93ŸçØ·t¹¼žíg ð¤ лa±u;}£iSyšZjÐ5ˆÔ„–Þ{ÿ4Âë¡¢&õ<”—–é²~—pâ¢ë}‡í›’6T’LŠ2sÌK÷qÖÝÿÑłׯu™KË}ë% HÁýkxŒd¦…Ž¥dmÖÉW×ø›x‚ìƒ9^Öry<ëh…gøRq(Ç€ÇG6–0ëãIÄ̇‹ZþqX‹öe«*õEÔß&¨óòȱC§¯I5L­è¡áìÌTJw‘˜êýI™æà Ø£êaë­æ~À;ë{¹ú%{øÇ Ú/µSGu©Ë› GO`sãÒ¼7UCz>2"|ñ4×ê²Po²‰*ë&Þä…Ü®^{ q»âo×vÔv©KmRïüÈâ¬âBºB$ ¡ü#ß`·Ï}Š_Ó!uñBëð¿D¥åiÈaTê† >2J·y?̪!€˶ÎU\{Z0¢êaÍ'\5”DNc}v¸+F¼w6îb(¯ß„Gø}òüÏ®{Å«›Éw_y NMÆB[U58@–=ßÿÄ í­î@)¾¬èú¬‹ ¹ðœtN`ø;…iaŸ¾V£ñæfé©ùde©¸›ŸÍ1üGT:ÿ ~zB¸ËN—+8ËIãwƒÏ÷èüø Øž~œx´}/Æ‹F¾,‹(gº¹Eе¢²²VW]Õܱf—ýø–°9\?‹v×_Ćõ#N¸Òôƒô³ƒ3“N‹…¬¤ä±†4vß;ñÒógìtŒ“ûŠhÑ÷ö²aLJ¨v¬Ÿ½Š0ÏÑó8V;×ù,ø?ùŒÒÄïŠ6@8~z“2O;÷ñ$åp_ŒÏ6БåíÀ¢·ÐŸC–s˜¨©¦ÆwuS²çk•÷ÀˆO·=LL2uòštìŒùó³Úú{öa€ W_>žþÄÎ3BŠ÷{41>V%)‰ÕÙ£H8é/1­ƒJ2.¤Míæ*æhOô$™>#U³ÛÍåhÚˆFªÚ?Þ›ÿ{ÜV¼/rJ@зÒÊœu!ªuÇôÍÞÖ RÜß?d5‘ç2eÓοŽa/«Ò9òÂÞ.¢2×hv޽„¯–;RОFs„ü`àge*˜„ø“ü‰…©¼WÜà§–8©„àTILŸž{»Qòê;1Þy Þ¶û’쇂”½7òYÉ–´ê‘Üî‰}n4¦ÂÛ¸¾_ä--ŒÍ ™ƒ0Í2ÞL<ã?‹¼,>¬÷©fw‡t7ƒ¡šÂЖÆC—L‡ƒdz¢Å4´ÅæîŸÁ>ÂÎ\éPiÃ47jíZîLü„œ‡=àøwpÒþyJ¦™! pá´pþºFÿ‹–ésl\;—ï¹ï5Õ<­FÈèÚõ¼y¢"ÿ2Ù–HóQüå:ñ0\5—9œáÝGÏÛpàÈXÞXÉ/ìÑ|¤›´¯Kƒi7xÓý{.ûÒɯI@‚@’áC{UP¤¦áõFNÀñʼn^†zÔŸ?º"‘íì¾®åíëà$£Ñ˜»·©·µ?cðXnŠB­‹ºv§Ö©ÁH¿mKÇ7¸,Bççé×¾8Ž?‹÷zÀìçøÇ¾U+fÿá¡é¾ÿWJ›¾?\$ «¤ ùØx­¶Z–¥yÖÞeV1ÌAΉ¬á»Cõ«Ÿ„ô‰Ä*kÆè°‘ÛÅâÖ&áE×kÜ—ë°Çÿá ŽZÚÁ–‘VÉÚørn6þ$kxeuU¤c.ìLˆêÁýÊs2GëÖŽçö~‰B Å©jQØ€JÉ]šzû¸éü Åvš¼®×õÁ‘ yO‡€áÛ‘2C+LTÜKîªä¯ÂqYuýÄ„.Æ7¸ž~ù½­ö÷ÕéÜô+v _Y¶/¢§O±>FØ[Œ¬ $ Ý$ ŠHAÐH@ØHAÜØL^&Ü÷ÿ³üðb©YJnwð,T¬•ú²G>9 ô„".3*ìËÀäÁNªõ¶ÒöÃÐbECÜfÕDÐnÑœü•Oò‡/þöö!¤¼V­ê·£ì;"Ç$ǪµËh› åb{â°ôg¢bêVè–Ör euuÜ'óhA5RVešËkjÆ7 Bae"²Ñ“…»ziþÓ†í}Î"ÛÀ‹îáe£¼"˜ƒÓ )”ªdÏ?¤’±õž«/ã´·tÑl´CÜ®@…õŠ.ø47[B\Ø¢½æýçØÓ#}»l|[jŽjû §×x”ý$¤ÏªƒputÍCçµ(¼|u©½ž§QÝ…qóŹÌûÞ^Yž¥½ø?X3˜hx§Pwåæ-5ÜÒ|¬Ú›ïà¯÷9q‚ü¥À‘Sñä{6´œæÐšyÿ››þ©¯þ ò;üÞhÈF#ÜRëás¶œV%ve´?§Ÿ$ز¬·W®)‡˜²#¸cþ*É*t…ÝÛR]N$gçE.'p­]9p—I=ôàÊèþËbpÚ¸‚¨n“í8¿ „Nž§§”û'Ç7ïR×ȃÓÐxíB¤¥›X&€ו(Û]ÖƒÂB̈A éÀ²8˜ÁæèÆvgçã¶Èrï[r_áopÌEŸ„‹VÎg¢^Ç%Ô×5Åæñ7Ý7(™Çc›û1NQ“[§pI©Õ wo¨p½iSE)sÜoßìëí*9ϯIO¾êëzýí†ÅòÇgí,S3Ým.ý€ÀbçÚoÒá%$€0@D’vC²ÏÑ 2¥YËÖ•)·ЇÈõ¦‡Â¤åÚò¼ïE'+Ù…Ó›ÒyëûírØ®Ù|Ü2÷¾ûO„êH¢^¯ÅYõV&¨‹ŸÐËkg­e3prœá ÀèšIˆý ÊgäÙˈEÏøÄvT±?§2·GA l£«œ›*R»;&: ÊÜHWbâУV_‡z„"Ðhéw°¬j[t=WÅA¨( *G†9é^Þ2FÍæu!ÖÜÒB ž³ 5¨¼ë¬ïØŒ5–y•ð¶à:ËÇßOþ½“g[~î­ø— Ž¯å­á%]^‚b@”®¥´ì9Oé}Žö…ÛKóÊáùŽx½U˜†Ã›þ]WAu|«ðã^è>§„< Ź[8VËš3õî@æ–á>·ª¦ì‘!œG9صFð½¢à¶_èËõ£S(fºZ+†‹Æ+3-O÷,}‘²#û¶unëQÕÎY„;+èíMB—û¨Î«Ÿ}Zо³šÎ3Ë£ó‹Å"¥_¶ì|ŸXG÷Šf* óèì1ÿ.f–€ˤ bH »F&·›ZnӔ迪ڟA|ý¶ôò-™ ûSÎùpw~]};º4jìu<Í­¿`ÞG³9ŠúÄ=ncµ"¤†Ÿn‰$›uìÞ9rƒõ–òv…í5_#ìÁFÒxdc¦r°±ÎË€ €#k‡å7éq9çKbupçút{Zñ$%7× p8›b}ÿX±˜«ÑÇ—@¼ë]0Zü¬ GuˆØQho`ú {éi.0ü¹äT½&•}ÕÛÓXÌV)§ú‚]!}6¡‰kUi}ŸdlØì;ÖºwøÕø1oG3ÍÚs?ÁnöNÔl¶©p €U“ÀE®ïœá¯ò|ŠÛ=È%°sï©È‡þÌ-ÿS¢àõßžÒ{pJÙS—ãÿLñgˆŽcÏ!Ä3éæ'¡ hø1Õ6û$yä;o2R:¢¾xRµÏO‡?ì;.£q'H“jôôC$c;vdº°Öbz’æy¹“‡"ô{$<±—ÚPèðþ -¨³z^ˆÖ–d§DÞq jL÷»ñÝפn×*< i¸þ–º]NâÍ«Y¦#‰Þɇé¼FߢÊ9þÛ.1>Õ†óíhQŸd ²i€S\+ðd6Žâ#/”Ù!s¾ú:5ÙÂNÉê*­u;k¾ SVÄhÓ˜þó¿¬ÆYHW=e!˜W‰^ ›ÛMޯПÌ5Ö>ûíùÄ8>P¡h¿hñjÙïЇð)ý)H3¡;kÐ0*W½`€'é3á§®À?LhäL†û³GûL×Ç%PíaÈúÑ´½ç™ é§“)ŠìÓ~4T@6W”K'´=ébJÿ×? K=5f“.ƒ=Øä“Zç!»}B²_ÉáPb6]¶Ôâ´z7ƒP¯„ ÌìD„ bnž(ÙœŸ‰È7æÊ¿Dhm–,g[½þ_ŸjÜX/듉É|k´äp¾ æ™°²üLøWθ˗Jmqjî[uzÿÄ— ï)Œ €Þ.+VÏe×å:w)>úR"g ÄÅDµ­Hûå£óA/™Èç¶Èi ­òÇ©V¸“xo®ùáÕ€eÖ#ˆUßà „¡•zXÃíîÁifë ,=™Åqþü’¹ßÃZÊþµüƲ¯ õõõ1¿îÊL)åkô>V­\§ í¡ËŒqò“iET ˜ØÖA¹¶¶€ ¶ ©õÕ£„Õ q6'küÆ??€â¸åÕ ¾.¾ø×xˆ{TW«I¢»Iæ<4IÇ& ËÃý?3BŸñ`€ÍýŒéÅÕ×øè§ÝjëÏ>á~sA‹Mqߎx_H¹²ÐÁj^)ÉJ¼n¾Hø¡))ç‰óÒ˜mšÍÍ>O£k_pµâßKøðÓä8î uMåLßÛxÛg:-­Qߨß÷‚/A€ ã—ñ"óÝjVÏ7¾¯;Á+;÷Ëô MÕ"„D1EIs…³m/IµœÉoÅ„«¯•X4H7(f‡‡‡amP÷©ñž1ý™xŠ”p$¢ë³­?gm­˜€î¿tøÝ«˜“0ÀÙ\^ÛîÙÁÝË'™ëœ£Q8ÞXšZBwòRÿ¢þ#°°Ý"Q|éío†úI5žŠwž•4ú—ß[|Náqûš²ØÝ–ÁµGÈ·kJ Ý™¬Œ·z±ÿžj¬Õ‹°ÌÉ›Oöpëv€ìh­ Œf¸y YB—Vò‚rx–FT¹î¶K Õ^ §¾Y›k \†y sD8²í37!Ò 0ý\jèúØìNKmáªÆœ]Aʵçî¯[lßKSHÔTÍãê¼K&7Ø%ʸpã-ÝìK„!bOQ÷G,Þçæ9 XËRõÞƒjÏXȶƒš$ ­¤ bJçd?>Fë¡ØÔéð˜J>ãþéGlÙû:gpÿ)ЦS ‹¥,çC<+ð²¿Ä!ÿÊÂ&ÿf¯ÐqÃPÇÎ/hýèæÊÐ#?׫lv~E7Ä!]怜bM,›ÞÁJ›¯qïe@Ó—p•Óãûu£†¾lMã§‹÷ôEF1Ø—_šNõ]éERŠíSUãǼg‡J‚ç? Û°ïš@u‚U'pÿ†œýù£¶ìÜlRÕ©-Õëq@¡T°? }û”Ö0¢î}>ŒWb½E1!×ôn‚’k_K·©íGÞêjq¾IH²^>Æ—RôÙŽÝö}7äUö÷Søn׎éI±¶Þ¨¨,q]¤eÔU‘a€X†ÃT ׿a—‹c3®€êÁ˜ÚyÅ””,Ÿ×°Sñbp檩ɵ×IÌ ›VÎÁQ=ýœ;Â7N*ëœÅ¢51üz*mâ+ ¡_רï‡ôý?Þäj»ý„r!§Ùž”Æf«½Eeà:Sl^tWÒrÒ4$ ¦=ÊïºßO²Q‡h³Pû‘ä@Šù.?Ä<åÙ9ŸKÔßäa'ÙÌLM¿¤ç¥a Ðጶ^Ú5Ò¨ ‹z‰üÝñÜ{ç Z Ñ„G…T·½‹ (ÈX§/Ô,;#ý.X·H0s,H ‰x›ªƒ¿8±@-Ðö¦›óÄ—a× *Ál§S“ÏS gÛž»Ûú÷…í+c¾ÃA¨Ý8váÛf93¼Ïg±ÄÎnKK—åf`ñ Šv‰…O(‹OQ/ ö«°ã\˜ NY8ïðø¼æÙ›Ù!³ë¿v=fÝz)ªI¢%¹‘Dã!0²Sò~Þ¦Ë D\§S+ÆzJ(j[¯—o®‡×Ñĵr@°Â˜\7w`[G">Â+š—´dk~M¹Âç4e›éFuÛ¹ÜMOøkòX¤ÏR¼’™wná¸ÉJýM ÙÔÞeI0ຜçDô| ϸC6çÃnÇrÅê¯ü…ì:•Oµøj±6¬×¢nzµGH`$O‚ëßRo6·›¢\å¬9òüpÁupF?Å6RÙ猌¤…;9½*}òï>mW?=5ö(_O¹OÇ¢lû’fZ=åΟÅàJ^·üdL—÷·ÄÐù©^žÄú‰ÔbÓØèvÛù[úzµ20?§$ž†Jò틎:ÃW3.í©im®1fìïY³k¨r5O£!‹0·ú5Ò¢¾4Œ™w)4X4h÷áÍ3íˆê'>6í|.lœo‘”(š¯R[LœÐ»³­.á*Ói:ïØÛµ:³1ì€ w=œÓkÔÔôD„4„„„ .Wio 3·aúm*¾\´•”ë5»mí‘ ø]x>[ŠÔþѬÞZüJe‹÷ú]°›z9é–A±‡ŠÀ5#­åStzÇjŠ6]½Kó¬ohÍ‘Ã/'«Ä:ÕÚ¼š{øѵ8žÝªò}rëõ²Ÿ&(§e¹ªä‡9ìÕ&è-Åź¯,{êô®E§à|TmGèêySM¤}zß¼^ÔÜkQ8"¾KôS—L±}ÊÚì–ËSáü[ 0ee–xRd?d ¢ëÖGªÅÐDÊFß8P*Á`î:ósú¦­1y%T]‘Îßy× ðT`es,O83 ¨ö´¨×Ío¡·§*9ÜU¢œ¢½¢ é(°/;²†ž›ït|= &O%YAl ­{l .˜‰¡€ õ©·x1—/ÊR%ö˜w‰Ak MÕæàá†áÔÓJÖ„Çc£Îª®à7V!¡Ú­;D÷é&¸–e[›„ZcÏ•ÎEÀöó<+IìF«ƒÿGÑtß ïh› ß¡¦U`[•]ÚcñuZ¶tÛdkWˆZ*B Bô’2[Š+j.gKàÀcèýîÏ…swþP Ü,©ü±0!Àp‚@zÚ|¾÷°KåÈÏ&"8b7†k»‡«zÄn”P\¬–À é‚5‰9-[%Ö4e^×Då‡bºßv®IÝÖ›‰ÞxÈ¿”RêKDÙ-¯3Õ왂?ÓÚœL¹$P‹›Ó…"K:÷¡ÆLÕB©á¿—ÊrØ'ÈR\­÷%ä·‹cS7ÎjÜskyä(ßEÜ?þäÓ{G>º”ì@I³JÍßP½hÒÇ×­ 0¬HAY‘ñ}ðrûùÄÃ<¹ÿW*uñáwv5ë©ûm^õüwJ¬®_LžýÄÇÚé@Æè±r †÷ƒ-{|¬\¦ç)bAñˆ €®çRƒþ{|ì™ PêÞ‚^JYŽæQ]©Ië.G.ÆýøºÊAÝ£6üD6)ó×Õõ˜ß' «µzY÷{9ƒDÿ·¢DÁè5QæŠS Á~JÆ‚*ÃÃ4¡óù˲Ø~ÛeõECßnØ—FüyL_y¦iG‚@Ÿ}ar|½¹jòßAþæ¢hƒžtý‰ö¹jyÛSµ[qþ,9öÕ§U%‚ùñà¡‘ ºòpˆJ{; w[å:qìRH·4bÓ‡/oêyfA;5 €Ö˜°ø§?05ω‰ŽXšÜBcò–!""½°³ÂœžÃQSÒÇÔ§¥è'ë²¼OÇ{ˆqÅ=ó–Z)‚ÏÏø§·u©Í"ÅÌáÉ8k¾&[ÀE¦÷Íì38;ZÛ—¬‰<É€Ò|=ºŒÔÒͦ˜þ]ûûª¦=ß´ÏÇöo]w”„nÖÿ——ŸVá%òö|3:+rB¬ÇŸ¹~÷÷iÓX‹¾{·Õ¾Ø¥¨}ŠuVƒ4 žËsn§ðtí÷)q3pΔüåÜ5u“ÐXS¼‘C0­eбÜ\åu™$^MgìbâÅ$òô¨%Ë |ŸLát,ê’¹*Ì€ Ábz‘¼”\C×™.e2ùzÊ…YLoÄís,fj$#„ž©tÒï•ÿÅÜ‘N$Pôggplot2/data/txhousing.rda0000644000175100001440000024230112565371427015315 0ustar hornikusersBZh91AY&SYÂñˆìPñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáN|: 3Š @>ðÕJð è €ôo€úö

€;„€€(X`ø:#}í]€õžž;P À9@ú  €@Ú{%jTmª*H©U­¶So —@jÍ©±4³•J [à̰CÀMi±µEÓà°=æäBÆkS`2G@6ÐJD „M4Pë èh@x7À›à 84Ð @P 3(ZðÒ‹»ôMï°P ­£À@Ð8±ET¨ l4R@À p€ªRЬŸszëÀðØPÖ€º ÜÀÛ0Ø©@P( h}4 !"L ‚`02dɈi¡¦&0L@1Lh4ÓM4 U?Ó ÐhaI¦A“FšC@šhÉ10Bz€É€ÒŸ›SÕ? M¤Óhjf€!OM¦˜ Aª~!„Љ‰<‘é”Þ‰”ÛDi©äѧ¤ÔýIäñCF¨ò4õ=4ƒIæ™50Ô=M“Ñ©é꺮¯ãžU]û‰¦ÚݱÛpf&NØ6ݢݴ»m26jlJÛµ¤KvÖk-£˜ÖZYm²ÍÅ÷½~ý½!m/=ïÕ™JA™F“ ‰‡£b\T:QBRŠ™¾þ|ù×ßÏw§Å–[d±–ëf­›(³2[²gÍyâ²Ö2kd6dB¶³m¹VÒÚvÙ­»k}ozØvg6¶!Ŭmµ ¶nÍlnÖm™·-mgÓÉì夋9´#/;Ýé–´–·&ìÒnÍÍM¶”æ¶ëjɶµ¶Û¾zÞµ™­5·[ïo$nÛK3[l4Ö³6ÙlaÌÖÅ­…iØŒÛ6¶NØÀö÷­m£#7nц;&Õ·hMl±mc¶µ ·ÖÓÑY¶n6âÛnmˆí‹Gi£;-;[`Çk&vmnÛk3MÛBLÀkvÚsYÍ}lñjÝõ«{Ùn¶·Ûqyb6X¹›M6Û­7mŸ6ã2Ù­¬—mZϧž´Í9Æšgm¡m{os³-HnkmvÌÚÌ’eï{Û·1ŒÛf™:ÖŒ“q¢q$fÍÍ­3vã4ˆ´Ý¦Ûwjam6Ö"ƒ$ÆÍ,IšÛ$Ës¶m1nÛ ÛM­»fXlµ›qfÍ›f¡=ï}ïží$Õö¼ïmm¶ÚÛGvÙi[„j-šÍØÖɶkëÚòlݬVíchÒif´¶²mÛh¶1´×"kv4Ív‘c5Û–€ÖìÓm™œÙ°˜ìÓXûzõ³l¶ÛmºÍ›ZsiŒÛ¢gn}ûÞK¶ØìÝ-ͬ›c-¦µ…¹‹[³ i»-¶µ’Ü•óÖú|qäÙ™£šk5‚k×»m}{¼kzÖϦ=}¯§Ï‘ö¼¾þd½}¦ìûùî=5žG¾|õ{ÏOnYm™ïhîNößO¯|öß%ãÄ×ÒòG¶ÑdÆíõ¼÷¯ž–›$ $Ã,6QE$ BKj г3%4©**œ„XHªlºl2 )T–(™`JHii,PLèÑ "ÊEXR 5¢e1T¢H DM7T¤QMÀ‰€á 6´5.&0©¦ R!BR`‰-„e4Óae²Ê!êš”Qá**QOFÑn Ô€àA’ ÃTÔ–X“ [,èQN!´e„ôD¢‰“M 1*¨‡$ BD¸0äÀ34œ*L2D¶"ª— LDÕ1àÑ&¢ ””Ä8¥ °QRt¢$9DDA‰ÑIŠPZ‚[N¤Ì7MQDàÁQ L„cH—P¦˜ˆ3T"’ … D- “D)À™©B¡LD–ªLÓ¶IˆqqEER@Ôš–R†M-kEDUTˆ€hÈeEQÒe99ÐnT:0”3-ÌLÅ:e¤Š„¢$¸F* P*ŒTÅE†‘¢‚•ªª(ÔRDÅD!К•5dÆ…¶$Sb‘4dÑ0§JP -&ZQ1F”= ³TâiÄEôŠq ¥¸–aKœ*ŠTT™¢DSiÔ!I2$Q—4©:š¥Í2ʈ‚À‰‰BQQ™2åΊa¹’ôJ„™%Ó–@„„ÛZ"(ÌD’bžŽeœÂ Dª`‘H¶ $¸h¥â r“&J" a9™dºS0D …ŒS¡ ¡ Ê *u2©±3ÍL$SÚ‡%‚$6 šf‘% fªDI…!Ñq.¨µ¢ˆ¡2™Z œ)‡Rä"&E$«Bƒ:QˆN%1¡!Ã’$LÀ™`(—4ŠbD8J)&)“5LËT¦Œ\É¡œ*‚ä5S4‹š•.ˆ‰MʇQ$¹Q*œÄÓei4é"@”tªRR14t‹“TCE LÈ—0Hs5£0‘*œ€ªeLËŠªB4m£1P٤ܘˆš”X(Êš£EÅ:‚¢”Jlĸm`™)‡1U1" AF•!%S„¨t]`”‰‚á Ô4ŒÑeÌC¨b ‚„Á2¡£K¨˜‚"R¢&*h:¦ Ëš–¦åR‚Rj¤SPa¹’ܽ©(:`Í3!‰¡A³(Â$ ‰tCnd@†Ë10!¨ƒ"X’¨Ð€¢j¦Y2¦iA¡\:LL”ëJ…*sS)4S©‰‰$I5BfY0$Ê"À¨zC @´~¶!fYV‹;Q“A§H¢` HÕB‘P`˜ŠP*$µ1DÐ.!·F!°R˜2HC””¶Qˆ§.\˜1¤´E4ôeÔAÑ“J… ¢‰‡$Àš¨4¦šBDJ "¢"a¶iDÕXš•2)¦*h´ÛN”(ANiÕDIs1:AĹФMAE…4é’›P¤—(ÄKqQ&ª @4¡„ª–› f˜‚©Õ)–âmèªiÑ`–D;4K *&Kt )Tš0È4%*‡¨(0 f4—„ÈfB©¡ •J˜LÌQj¦R™F¥bMi5Aš¡4ÑM â‚–©)¥2ÒræT¢$ÄP¦$)š–jC¥Pf*Y”•2«Iˆ©pÕQ`ΑAÔ¢d 3`Йª - …%T”ɘ0]F[¤**]C…JLÒ4ЈŠSÌ…œ @"‹d¹A¸q0˜”æ¡Ò Tš1I&ªJ2Ò C £L ¨!§"µ&pZ#5QJj p\"ÑOFLÄSô±Ba‘T•S~6©~bdÑ×?öbþVÙÀÍåfn6¨„+ÈÿÏYúoQ¿Ž¯»íúNï„õ¿qþãõ‡eìç¬Ç¼Î‹ëMÁê6è¥5\y2jÎXž( T"5ªä,§»è Vã=ßT¯yŽ>AÖ¾yòÒ;ô}×¥ƒJ\ÄšƒÓö›Ÿ[Üë¢ý¦!Ã)9)&àqrLuÝ ñ;+ivuåss;ç;üiz.žFËþŸKqÍÙöôª'ŒæT{M×û9²ËÐjS‘ö­þO‡…Z ø~ÂÖ÷AŒÿÝÑØÐòt¾{>q˜"Ö÷“ éÿ®ÿÅÄ¥òóý›Äx;N³U ƒ»»¿¦ÌÑõbæcWìîlgùüŠ"Os)Y›žâúí@32õ?›¦a«õ*?²S‰aŸ³ À€gM1>†šèUîº/Ù•öÝdœÜ{øw[,Ô$*2]Ôêºë¯ï\g’=dFÌFøkòW~6/zÔÍÿ­Ãâv{Û×ûýŒín¸^Ǭ·È¡5ý†€íÿƒ]O9Îþ™¿Šhy÷èy\lî“Rí%ÿ]¿¥|uø²îåbW®Bîf¾®fí¥ó¡óì¹ëíÝ+ʆEàhö̼|·#Üœãïø7œ>{‹6¥,_sÑz¿ëäØÖúÞßl¾¯oð¸-Ú+Õä*8ö(i€àsÿëù¶rr{B¯âå[‹O;o±Ã×Ä•¾Ÿuߟ%r¸ý~w:õ=»Mà¡u˜MÞo]ã-»æÜ{•²æ}[ßaÑø[º–8p?vO¨ý‹û,Ï?‚Ó¬®‹\ÖÒm_û ½v\û–:ü&ÁusF¸’߯Ñi㙣}p; ×í-é—™5ÅPHåš'WW½k®…9­f½1-í21cBñÇ5ǧl…ÓiP:ÊZTûÉ>Zsoa• ª*‰n®Gz÷:ö6l¿ãë}Ç•ª§äí‹êìðsò¶7gº÷\n?7gÕwr“Ó1ý ìrºpn9w÷¨¦üloú9g ¹tTTþ2·ÖJܺΔúÑ Å`I©Ûh(º¯ÚØ9¹Ù•º„öÇϪ!ê6{Y7†Õ ’Xÿpz ±hÌhéd¥™@>ct«h #QQ[½Wu‘ÛDkMï]X±+DÊíi núYÙ÷i8…SÊÖÑÁÞÀ´36?¼ª²;Õ¶¥æq5òËû¿µÒÖr'YÅlÌCà¹H9¨GWv÷¶M—Q&?Ž‘JÅ Á–~™Š@¹>d™¼'ƹ5$ý#ë.ÿ´u³ÈÏûRE~ª¼¦Ö˜ªõ¡<zw ½S®TœM*º4ÿƒ`ż›×ÆÓ|¨\`)ê¸n3¨ 2•|¯ŠNßµ+šÇE­¿OõBv®±™­ªu•V޵ý˜&BPa¬OÈÉ2ëî–ß´5ô¨PŸõ'r›Ò¢±œâ#¢Hýñ׿; ûÔÎöLÁ—8šÞTú+ÎÎ7™±Ò!´m9ºŸCjÇ_c–ÛÝêŸ^78úÙ xÑ:‰ß®Ã™ý®fŠ]Û5>l¶ËaÙƒXDùû{ínÖUªƒ\åíþ¾í;èMÆ~ÑÛ/q+Yg¥iÎ_G$Ïq¿OzÊ>hèÿY®Ôßûó[vÜïû7àлýšBãÄRo:>NKl”ïúûÇH£ˆŒ¦vOî݇Äýñª{[vŸ—R;Uiʺëi½kK>}Û’á×-Ut¿Šy)ÍÅýÒnk®÷»úà¼6÷©ÚðO÷ÝßæÂ3YÃØrß¶Þ¶¹viL'݉ÍÙï:‚Ÿr§Cræe²¯ÏÍÝzW^›»;g¯¯Oe^Ó˜mv ‘öGEÞpxXìn\¶ÚOÄÇ óïìg´ÈÐü½7u½çи¿#þ§ˆìŸVŒ}= €y]Å{Ýú.™¦ùo­®ž]´k[ÿwµ:›´ŠÏ9Ë›”ç•fR\›¶§Æ‡[[ÿ1Óõ,Pø‹fÿ'Ӽſ¿Ó“¬NÙ Ñ;/ûup×Qqë¦]Å—èdÊ_‰ ?*|ƒ’ÏqÌþ¢êq|w®›†­^[ƒ¤7ß+3€ÜòëêWÚDüë®1ù’¯o »Hþ†Ù!w ¸zâú” ‹Ë^V}wUúù2x`sœþ 7…¡w„çÒbÏNw29ÛÕý\ï7Êtó[Íæ³þA8²ýŸ–OßdÙvþL1ª:çlîu¦®÷ɱMÎö˜0šh¿©¥ä/åÆhz…Yv²ûþOÏ_@îÐà{9p°O$Ìý‚é\]Ñ›¾lÝ÷È¥ˆºZÞ_ª¾Ÿ&¯½É®¼ÊûÍ·v2à ›&ÓÜ”hu ùâvð¨Ú#þ+°ké0¿ŸfÆ{GZýžÖð-~:]ošûEn%2åËÊÙ†æB®ÁóW™L™¢øï7üm÷GWžF‹=…´_fŸrÝÄH:;ì¢ÚŸÐÎ0hötPu¿¹n¿ÌúÖØguþÅs_ðõ ê×g÷‹·o¥jY=ªi›Ï)Ö‰}ŹíCŬ÷´«]ÿ'´¨©Z‰\ÚuÊ>—sÔæì¿æÕPÿWÝNæâ¬{­rª¸I¼–Óòz˜´p<_ùõuɲ;Ráï0Ëi‹ÚCáX|’¢u([X´-~¬¿îðóĵQõÍ–n„Ðb«í’˜>RSSç–AÝ——Êtð×<Ñäççw6‹>¨x<-§ÓSìRÇl¯u«g¢•W –7±[ÑÓaâ¶ÛüohRtÙú.ÖŽû7‡æ¾Œ‹‚ìz s«ÌBVŒ«¬¿[ê4Qëºç‘ýÓþ59ö±¿ó‰¯Eïùá\áÃý¤BpŠÅœMðýzeªàÍu[úO?ÎÎd ÌnŸ™?Ç—Âýð Ö°û=·]Ó KÑVÃëãgœtGvÊR<;WÅÍžîËÅ—kÁÃïæLÉJÚ÷.¬ÔÐqý†š>v3_­Ó ÿã#á}EÞË;Ê÷ì÷].û)ûWêíÓÇQXwÿ5í÷敽 [jTÅ(š\I|Åm'_yÖ‰éÅhë6¥:\û=\u 'È~;·áOilÕWó2‹ëþLêöž­´‹ 2’«¾ûûgÉûm¿Ž }$·¥ôÿŽÛwUÿó¯:…6w‡¯Òêþ•×vÏQ'Å®C¾—”÷¾p)~=eÖJ¨?togÑ”^%‚à ׃!¹Ò;œ»ôb— Þ=¿tÿsÉênT<ŽÄïšË÷-C¼PH¹/ÇÍÅäÏX“+ü?¶XV-²Ÿ‡3Ù÷ÞãüŠKRë`kwE&4ÄÒJ ý£'"£,Uµ÷æ-©£ÑzϧðÝMJ2Nëy”¹{dSl&ã:Ñê~ë1º{#û˜zÕOž.7è¢îêg1¼æúª“ý·×PþfBGc0KÎMªwïI‰¡*ÆÜ›vê¿ä’šÇNÌûÛÏí}u Íš ¦o¦˜Õ‡¨†òsw»%Sú Ú9‰ˆ.#“¬ïzcëWòÜr:¾Ùƒ½]7F‚ì|ý åí﹞êG*ÛS¬Hòp5Ͱ:ìå•§ÁîÓH“~˜Å¤Œâø^Y’.k3]\Þ!jµª2?;§dêë~÷G·>þïÚ½Ñ+´þx|°ûx÷Lÿ?Ztf¢Åþe†›gÌÇ‹dÞ{7lÞ\O;Ï-xµ­©iìeåt*º†;(´D-k·ø&ˆ@ `!E[DÞD»;-fóáݨ¨ô—ÚCÁ¢tÑUþ·‚–îXGÈŠ­-#ž¿lÄË€¨ŠT¡Ò0JU— ßV—~͵×çwv ªË»+³msi2ìí#ŽèíšÎæÝÙÜF[lãN¿'YâvYqa—Kknv¥·6¨ÖÓZí¦ mÙÖe³E­kL´ãl¶¡lYg"JQ_™ëË~½x’ñ–™¸4Y–Ìffu¦Ú Û·-Š-4ÜÎÛ'b[nÕ›fÖ[fi­e·kµ­8ß³o{bÌ ¢Û²Íl…¶›më7ËÉ–DŽÖÕ¶¶mÝ›³L5µ4ì×mií¼±KiÎ&Žå¶ËvÖÙ–››ÎÞ­5·wÓÇGû_›Ù6¶6ÖÒs[slÍúòôÖµízwµ­øûÞÌsÌôÙZɘÆmf6¶Ýµ–Íš5 á››#i1¶›pwᾞùšÛ´›kãø?™_ ¶fnÜm´Öø÷åóÝæÚ¶lZÙ¹¶Ÿ“ý8ÚM:vÔfúß/Ã}|Ûæl–ÑøûÏ%ŸOzØùíëéåõ¥¾/6[[µ¦ú½ç›bÚ5ñoYﯗ’úcóï¼4T@LA! ÈA*mÉV:!P¤¸Ñ–A!"Ã+BÈ2ÝjŠi$†•F[@‚m4%¹0Ì4%hТô{ß>|[¶Æù¼tÛÓo2óÒÚù¯‹á»7Ïm¯Žõòú}½|¶í¬¶ÊbÔb Úiªb¤$Š•5T?“dêUh~ E梄X JE0X†‰¨“0fZ‰aˇ ÄéÔAH™ÑI*! ¢!Pj*’Ad’jL(ÊS¡ZA ˜ˆ¤ˆE ‚ Ó‚`ƒ\F‘Nž”e„j¤TDÊÄͪ‰&ÖÔ(&L‡DMUTˆNu)«6“µ—i"”ª$Á1L@˜H˜êœI Åi%4¥:H¨ U8 MWõ(V¶W"ÊñPA’x(™$Àl6HBkÔ¦aš™maC†DS:ED8J]PfC¥.0A˜Vª²›; NXA?cj°›XÆ,&„Ê£ ‰PTëTE¬èU´ÚЬ,™žLL«ÔÕdÌ*%Ê-AA0åÚdBƒ2"µz0èƒVrJ©QýeZ"MLYôv`Yf¡Á°ZÍBJ•]È0‰EÚô%ÊÓ‘g®4ˆ½ù.àÊBã6™º“i0 QzŠ«ÔCµT‰•lÞÛâñfܸw¦¢‹!¹‰Á‘5-A;œZÈ‚ÈQV¸%H”ì¡E‡"4ʳ‡bêÐi´ -ů0MªälYß9¹ªÐ›] V6t ( Fí F˜GF Âdìp¥|t`¼çÞ•m´ª½´ëHèDËØ-E꺙¤ÜÑiò®jÜQßxÔn ´ 9ê@q3J:EÕKê'†fø¹Á61x½×©¯»V0#¾­Å¬Iy6¬8èì0@ßͪڄñl çˆv¶ù¶¹×y¶» õé}¡m{D o“ZËšÞœèaã¬î¢û&uÅ­4ªm*µ[k¾o¼í.ÛͲ«}ãYÀÎ-Q®¶V¾f6×KoŠUcEZåJ‘»™¬×Qµk­œm³ÔÍÂàß}ÈŽ'k‹çyÔ_Qi™Öu´bØ;Í-Ä["Õ±«5Œ x©6â³8¦1ÆÛkj×·®ì`ÈÇÕ÷«hOd*ÆoŽÖ|F¸½±mÄëi¾ÖÍø \ë„éçmx…ºÎ®¸ÖMc}føá™ÏÅ­Zg7$nøZ»>6Õ¸©ÆÙW [mc‹M¶6š¶ß9¶÷ÂÛŽxÚTrŠãLc›kÎwÛ­‹í¶âð1§ζ¸¬Óï‘‘¯4MsWÞÖY¦”­TUc|Nö©væõ°åºã9×8çd¶×jšZÙ´±¼o‹G6‘¶ëŒ‰WŽçkâ·O]øâr$Zê±­‰œmV¶Û%´_[ïÍm§¸ÔqmsÂqµwë™ã~W®Ec66Æ»ëÕkhÅ£XÎ9ûzÏU[ñw¸Ã†6Üî+9×|ùYéZÚãbã_âoŠÅ­G\ö$ÆÖè#´qÏ7áLJWµc^½VÓ¸¶*ýyK…ŠßCȇ[Åäæµ×QÎÝšÙìØnÜ<ÐØî®qÇëߘµnoÌ]s½â¢¶‰‹ê¸Œ.·ÇKhÎñ‰ã¦Æû!S·9ø¬â³·/~3~›s']ñŠÎ°!_9Û*WLø:[žu¾;uÞuÍOaŠÇ9˜£Ò`[æ8U·‘‘žv±Äv.:O}»täªç›j:Ü<ñmõܽx^o¦·©\j/¿]w´c¦½œëÓŽ<˜SIìñn©øöëÊ÷Û¼žœoŽ;q·ô;Û{R·Ž"ý—³çóxמ'ãêí»Ú­ƒ^N8ã_û5ÜéÛ{럚¡ß{S “ ¤#EdKL¢©LˆQV8‘ÁÁ˜"Éʶïu·dk‘ÌéåF;ü¿·fÖïïͰxò{:ò·Àž:ïpâš#¢dk–8¡o¨“b­¬ˆXMq¸«MBÓ8ÓUlnŠ=¶ëXž\VýÞ=œÍ»ü¾N|¿û߇>ÙóÅ#¦»Џæ^Y(áDƒÂ}C1I´ÝTÑ nž™Ò#qFëð*ò ”ñ鄨¨”b©¢cå–yf˜ƒ¨@MdË^CdiºªJžàS ª‘ãæûw«1Ìaxh<ø¯¼wxî»üO~ÍsäçQN'Á¯‡‹Ü]uMÇ”¡Uˆ„ȘNMeˆ™ˆ‚Íi™9WŠ2Ò" ä"\ØÊHîͦX¡ô/"¸Ë ^ ,D“F¨p×1°9 x£ŠI’<²&¼Z Dä*²‚ã]F‹',¼b1À6•ê &˘˜²)¼´¦s‚iâ=Opf²øŽ Ë:Á#\n@Fßp)ªè‹t/WR}ÇT-œÉf°€|j ëºñ„ã`pŽEcÎx0¸»e¾b!m³uÇÂq© ûËÈrf¢z)0E–}$Û CN*£¡0ÄaË4yÃi¶ágöN ²‹¬H’¦1àqŸ m8(‘u’Ñ(G¨T/ºÌ+:» ªHÉð2ˆ›Ä#p¬¼I²¸YtÕ|I–jÌ–ûqFé¯B™ „HóË8 º ˆ¢8XMR0n0„K#/,`ux 5#Ý$ 0¦Øm§š5CP^߆8¢àyd aµDú…:©Ç¦BÝóœLŽÁ(ï@ê%&êG®‹QGbPÇŠ…ØŒM¢ÒqwURœ ç(Ø£J‘§Kކó+6aDˆ¢Ò oÆóÉ ÅÈ }±»HA Žƒóžh'>1ºƒÍ¼%бth P‰%£QÆ#-¨bP.¦±¡Š˪dRu†ˆS]Æ™¥eÔO…8͈1À˜ A¡À‰‡"`”‰(#=–TDsð²igœØº|!AäÑdҀᬉ¸ìœÔ0æ_r4ˆi‰˜œ‹ìj0¤,£‹6ñ!mP&ƒh.ÊHœ› -v@6Hóî”̺ÑÄ:@ ÜF©÷q„ÕQÆ»Ñ4¬äq9 v3)8àeQ Äz èå·Y*BàM‘,ºë¾éÊžZð0ºe$ÐP-&ÏÖ4Q}¤q'`Èr%UQH`P‰¨jpj<%àbHaóÒMd Tã‘]XÛ1@²Ò Ó)_=B`x"Ü ]ŠŠAVÄ™m¾ß‰ÈÍK¤ÁEÂä&¨ŸŠFŠªÆÌi]ñ¨‘É=3O;¯4Ì@DGœ""ig §˜]%Áp¢3dѲÒå§DèÍAh×64r,¶€D›*(‹0‹§ªØ]na- ]5ßÎÂjò-G¢(aÛ(Æ^a‘¢«…„LÉîA g&Óˆ¨›J&‰lƒÌžøÒö•­D4 EµÜ d¤Q¡Ÿ ŒѤšjëáRdæ]… F–£Ú,øA×@¼„Edˆ$(ÁBGˆiO»H¨Ör[g:ÂÏFJ‰£ŽYd ôžISe(ôB(DÈA% qÔ¤YÓʈ'ž‚‘„H“ÑžËeQÆZ5 °þe™Qt5OŠ1œ£ DùL§Æš‘¬‘qÓ)Ù#}ðŒ<…BðN°«ë(¤†¬ª>'B™M¸DxN<“J™ â=5¡HŠHHˆ‘GbŒãÔ$,Áè£ k”ÒÌ&ÌM’$ßm˜LIõ¢=ÔȹMŸK²ÑA@Ô»V6G¬"eÕ(ņ\‡:(›0øÙÎ=(1×JX ²ãð™#ª2šå¢¼U‘MfÜ’%OIs€yJx‰§\8×Y*â ˆ¦˜Š@ Y¢ Dd WB6Bàu³Í„Öå¤'C À².´%Z *°X[@Mºå¬(J1‘F\ˆ6ª¨¼HLu0œH—Í$ûð$ÃŒ 'Âj¥¾Š UÈÔE)2³Å´ÊϺ»ËU@|‰’áëP‰3“‘§Ù€ H‰ì„§-ÆŸ.Q "‰Xÿ‹ žÄƒ‹AsM–H)ÅφH&,ê &! Âp?”{“ŠÀ´k ŠÍRYïÀ¬g¸°ˆYk¢â*(Ѭ)”âÒ5‚H[°–ÔN™m<7‰9a0eF჌ô•d ¾â(3ºV±#NZ æ-Ô™ ‹°Óa˰ñ!!ª(¼€}ׂ…LQ%1råëÇ%‹* b%êùTÆ”¸rÖ e[T"”Œ¡¯$µaƒ>e ˜…¨¦ É»ÙT(£4 “ —Á%Én«¯9”®]Ø-×I\%Ê–ÕDlß[-çð %Ÿx>²q1/ "ˆ°ß´½°bo/]œ6M­Š®VE<¤™™f¹èÚîmt«åç Nëy4òR¼Ü4r2Tj­@4ޱ¸²•–æ^Eú”ª«S/™‹VC 9CÃrñҠ˼}ÑÏÅo2Õ¸çc…Ö*Ût:UZ(±N£,ìœÈð´óªalÛº|Ûk]>õJê²Ðd•FGñb³0G‚•¥dÏYÓ©Á:­ŠÇ50ñåáJîNL R–½"Å\朂äIZ‚“ŠCeH/ÍjËÊ¡Çb±~:r±M¼ñM¦úU[¢¥rØÙ°CY­˜Ûð@ËH†™™3å?RÇN›Q*h×ʰK3ä>óUv¤¿P•¯T©™VR¥àºþD¡4ƒÒ§"muOO"^c•BÖZt×Í¥Z¤Ùì¤éà¦eüšªÌMIN–eŒQ¸¹´œk QÒ2¦KÓYɇæ4TçÇEÜɱ³`O‚•¤æµšã˜³0WZÞj˜²Ÿ‘ XÞysr@ÒT´£וRbP“æ6–:޳šÖuú¨®º¶]¯Rä¬ÚnO¡‘vå Ð")Ã|»ù–Ž¥AZÊ•I™-W ªQ½‡¢ºÖ±^Hˆ¤»5Ôrý$âlçèˆõëb•£të7k+:{«HëÏFˆpµŒÜÙ`~eL‹SPcšPVŠÄä×zóɪrY¦0Ö¡Xxr^¼Ãž¸*Rö eôkáK302`:%séé¹kí¶ºõgfgDj—lÎ ÇÕÉ8ÐÍ Ëx²‹[´q@l&·-zÖ*EYâóá`2½r]ùPÌ:Ó²‰O?8Ú"ÄáT×{\5nèˆ8âÈPÚŸ^»¹–+HµVïSþµ6Œg+V2RSAÊ[‘ t“>æps/V™ftÜÂLÄæmC(§½»”Èo/5Êk·1™²h²ŒŠåÇ—sîk4Ïj*ΗMŒÌ&K†­u¤iÄmfâ*^þåëózטž})F|ëõê†vfvqo«@0Ù•%X–rÒã@u,Ó¡;^C+Akj·õ#ŽAäߥ%ÐÅÙæþÿVn•»›U«OÃbÑuLqÒ³½¯I3?f¹­£jdØÛë¬Öè°Býè]¤.‚÷ÃBÿ(^R«…øôÂý8]´.6g áÂê¡xï ¯…ÔBú¼$.朅ùP»ü/Ú…é! / ÕÂëá~Ä/¼…éát0»H_‡ èÂóо.ËÂö½¬/M ›ò¾4/Ñ…ô!z/Ä…î¡zx]„.ñÍt¾JãÂô°»8\?; ÷¡}x^¦£…í!wÿAè7¼¿Kï9þÈóž;‰·:.óÐodÛO/°Ú$,—z®@Ô«z?Þé:II‚¶Ã‰Ïñ:èøÝF÷;§oÏ+c0EA~BÖn ‚¢j 9‡Ôthö;Úæ°§dÓŽr¹"f*U¢]sRÒoûÒhb…^ZtX oŸD1=2¯n½ÿÛ£ìè“ / ÿ¹Lûm¦Nkþ œÕuÞßcîÙ£á¥~ïkÿª¦.÷®ËÙ—cгL^÷Þlêø¿Ž®¶E·õ)ìò¶¹»=Ì뚇@ô§ooÊß︛ý\FOÞê6ø6ñy>K‡9F/{Æàå׿Kgµ?›ñ2¯U/£©¦Çžîê‹ãm¦øœÊ~{S,íwQßoRµàt Ð;+ÄGÜXæÛœå^|òü HÇÒ^?÷ƌþí·k{ÏñÊòr¸5õØ Óêrº¤9µ6X/^Ù²W*=Ǭž-®årúίrn„]‹Öôo¯?§æåæÍ×—?KÆßoñI¥Š¾Ç‹ÐrØßðx:ë»Ø7{ž Âò¶Õ`ȧÇë¸üs×vøu:¾ž¿ZüÞ \†ñ¹}ᬌdЋqÇ­oÊD¨³ÐsÿaYº49r¹úº†w3ž8ù°uXø{WCÓõ½?UÎæWæ+·êhë˜ÒàÙêM!›AÅëy™4”]w¤«›ÏÔÚò 0”ôx._A[ªbëÜ­¼ûLJÏË_iÓðøÛø˜+¥çtIØà5IÛ}£([Bº]ä èõ–bÅjŸu|ÆU΂_:.°ÞûŽ›OoÑóƒ›K"Å~³ gì«Ñ;MÞ¦J›t©™§N¶){ ×ËK;‡ƒ+¡‹*½Róæô}§C«7#_3&·eºKR:hÜåö΋aÕéôŒs7ÕÜp“´î}ËùÛ^W/gc—Ëáv‹j6þÓªŸ{‚ý¢ÑÔ™Øáì÷].ÿ°¾ìö\-u-æÃ|ÿ#VÛÛI—ºøQëøü­._cU½ö×^ÌsRÜS¥Éêb‡€^“3;²öÝnûq¯kqÌë±3…{D3SßöQêîx½.ÅM§•¹£×Rìº"rð¡«±ÜÜÁ>Ç“¡+['¦å-4nmxÅqCµêçÅ¿åµÇã›w}Õß–÷t¶ÓG¦ÙuÿNÖ!IÚçu”â\±ïøs:êy›}Ê][ºÍâs5yúóW»Êé·kR¶ÿ‹Öt¼Þ×Ëì;N žø{fûkæ ì¢òññµÕM¡b`úV¶ðoCK]W¯GœÿÓ­§³ìëo6ÁßOص½Öòr·5{—;™ÛuY=kžÄ×Y]FéõæRŸ³g éúÿl·±æ\œ®o.>£kÃì)—Âδ7ªþö©ö«u-Uõ©êu[¢ê¹æ¸Šrhqº¤54%è°–×±)¸É‹ 3³’NÓŒ¯'RV.)*Ïчz²žãlXîõœ-#x˜…ÛÁg7µØåþéô½¹û«µiÒ/‘—Îæöhssy}"Û†š½ºn:=^k6b±ÇO»O:߸RlüÇl`¿žF×…Ò!´ÅÓn¿aÑryÓó9ï_®ÎMœ×ºÈÏ?RD«*&gö(:gÒ=EÉȹÐÂõt±/eN³ÒOÈJK2šœ¹ýh˜??çr}åéŸWi>д5š·gÏÔRTœ~¡õ/‡2‹  ÛÓ{2È|æ· ×QÔq!›‰I.È Ôwu‚—ÕF9éÙÏž~b¹’ûß—w^Û5½:.§¿²{{•. ][jž{½!îß8çöÌÙ9‹ÛXg¸ŽVûJÕЄIÁ-Þ*v¥’>Ù#OÉß­é¶/sŒÙû)™ø*23qxùÅ*Fþô W_£Ÿ×lô^=|çR{ƒ©þw~[Ø Š6o['± èÿeꙕu'1z˾…/–=¢Û;ïB~ö·¡¶“t¤NJðË^er±™2•íT:™¥¿O†‹÷†÷ßè4gYÿ=êäÔŽ÷í/³íÜl>;¨œo“ÏÊêÈØs_a«èx_fÅF§YÅÞöežŽóq'Ì‚¼X¿Z‘Ÿés*X‚WßúÏ©­¿à{Kœ¥˜6yïg–JQõRw;ý;§M”íþ/5¾¢2nåö6T×^?•`¢ø”±ßªÅÙ¤w·©ÝéÔß“NsšÊŒØÿÆçÔYoîþþm­7+[Ÿ°’æÕTƒ¶ÅÌïŽëÏ«ày+åµîF;õÆÖ·:à 56n‡xg ±ÂoB3ˆ¡uo û]º¾Ãir’3دmIèðöü »ìÇ¢ÙdÈÃÃÄÀÜC-ó³É9—Ó[âáúv”ŽÌå™èÔVÐ]|¤`KFc)ñ•Ú³2op™ö²@Û­ÓµlOk²8‹Ú6½'³¶Çw:˜ì§Îçè0t­ªœ+Ùk‚ú¯»¸sÞl­[MÅÀrèdó¬>TL~Þf%äJbÉÊ_Á Éæó‡•ºè];Üó­ŠDF¬åÃÞýù–H¿(ß/Ö£Ó1¦æ.õmdß|ì–žöáß¾‘íÀFÇQ±@´sC e Ï4ïÇ,ó%ÿ¿=ÊÜwã}ùvÎ4Õ´¾¶3[GÓ u Dz²=Oew÷ðu_›³¡ü£”Âæ9dKèÉiÓW¸Ãù§³Ìž·î>Ÿ–[8Ö[“{Úè{”ŒKö©~9,¾¸?ˆa;ìS8€2ì©¿rÕ*9:Œº&¤RTF 9Tt(úBË".9‹,`"ù%|悽 ˜# ëW¸/æ×Ø!þz=†ÿUœ´WÅáziÖ¡¡M¡§Iµ.0U“ ÊNEƒÌÁßÍ);šÒáZè@_vR“×2¦»ìsRD‹:@–FÏwÆ0g¼ 6aYÁL6©^Å»“…™f–òJ·ñqѭ󹆩ÒxÚ®ÿÀ£þ8¨æÚÍ7Ñ 8§ôT™YŸÙcYDBM³„E*5•xñýD²ú2í·anõ‰þ×§“ÔyËŠ<>DZ¡»(XŠAÅË»¥±×h”–š3O0‰¯Gå™bë˲’¢ˆ;%û„çL×H=yy ËšVš”¿Ȳ°½loŒÊÒž-¼3˜Ù¨RbŸ\ñ˜wÝÜ;…|å4¢¦6KUsÚ‡ä~ïèžη…¬²ã±_M‡ }“š8Øx\[üÄhÛûõ‰Wì}›cCvEàd¤XÎÏÓ1¾±}Ì¢ç´S ,-d°þ+§i ©AC2)¯Ëí«NIo)·³þ'ÉŸXõð’-H=m¹ÞÙB1»¼0¬åýµZÍ›WÇC« ‹\C±S—'ßï§Ü2s ªzÚÚ”ìú˱$n}t’É›Qµž±•—èèHOÉkG+Y:™ò­˜¥§8­§:WHA~ ‹t÷6ÐgkP‡Zž»è0ƒ‰%—!xn?P¾Åâ1Œý¢ºë»Úõ§ ^‚ºÿ°]er=ÍÚ? ñ¶+ëì§Ý2‹Ñ¼Wì„Ã'°©SkkSA§I'i½j”bC#å$wbÁØ\t*d©Éh¥³4î÷ž¬F3¦7Áh_=ùz÷+“_õ4¬´è„e¦O+OR8œìŠøá›––Ù“4»í½,íÙ=ÝO;Rfuy1Ç/mŽº^ú^aì$õý†bœ]L¹ó÷ÂÁ§“æ¶Vkö6iOÒÕŠjÖößïjKr´Íž^ÄB7]2Sf¹}Õô†mmƒ§ WâQíÂàN]AU´{ë‘ûg󎪞³e)21 öóÀÅS „€Ñ§‰è•þ$URŠøµkg­ÚÌ6hEÇàòÎOŸ¯³°]º%:ªt6êVÚ4"†¤åTÓu ³¥,AùSµÉšŠ¦e[Íb;Æ~gоM–z©Ze½Ë%ßL³Vê8< 6¥Õ úmã„ÊÑäTò„¦ùìÚh›D-²q]{ÆàÆê˜Ïï2ŒÁS À\ôE§µ¹öÜûÄÓ¡]ôÑ ®Gޱâ±A]¨•™D~UÔ-j·ž‘Àû†ü€´¦È>³/ƒmYªÒ£ô×Xž[ža*öÊ声«²JúóÅeCBé@e—!Å«½óNÚ^?Î¡Þø&5€.4ÃñÐ]ƒ˜ëü鎫 ‘6ZůàÀ¢Aì3¢ƒ~ tÅ“q îÄ]YUo÷û¬£ž0ëç I ßg@`µÅ¼ƒpë8Šyª?'Þ¤&!)ö@P|C×íH“K½IûÞ-Z !Ý›â1áx†"CRMr¡ãð;ƽéÀó‰<¢ºîì¿zÇ‘å¶Ï;Æïö¸Ÿï<ïU"üž¼wY+iñ¿O_=’GE߂ܣŸÑZÎ…P'êõÙ+ÈŽ»Y¶Ï¯n:ï,î_—¼Uçm·Žì´G{Zu½µNwßÞ«êù-ŸéÓÍ|O·¢fèôÛ³ðukðÖ‹»;ü߃“ZÑ_OuïÇzå¨ûü¾½_;ïFsí¯›×ÎøSŸ©üûïä—e÷ìzÆ ‚GôاĈ «ú° L¢u0§ozõ>&±ä{Ýa£n²WÎÖRrÄ1ÀÛ"lõ»ˆïüJF©Ž!7M†‡¹)6£†3áöµ&nü$0D61Úßþ›~Ëm{m¾4GæÅJ "|Œìëø:¿'X($B å´ú¹à_öžªßKÙa’5E…ù~¯¯‘»ûÌ߯’Fuð}ÆoåG·õO<²'4KÖ9þ¯œvdÀâ¿dh tó!Pg¼œ`ªW¿4j¬s+¢Ëf&ŠË…ýº‰»M.Êï¨ÁÆ*R£#"x‡€ñ¨rh!Û ´Ò=sV ®Àé†4pL/²²ëž{f ˜ØIu È9$Î÷UÇlö>—x™›y‰‡ÐùŽ·ŽzñÇ4º¼wb5ÆÞ–C憲 ·ÒtÅ×T4- •ÖP &Ïe—y‚.¡ì*%êþYЍÌ®9Iªì!ÄHBÂÂåat¶B`ÉþeŽb&ÅHbë$?¬Œ ¢Ör\¨i TOˆ4)çJBRê¼CR9RÀSði,"£!Œ0—q„ Ú­*zR,¢“ Ô\¥‰}JÓ…°Õ ¦N¹¹Teȉ& rl¶’HÂÔYSiB§Ë4ö֨ķM 6ÎIèJm˜ZˆðˆNE4YVR%6i0 8A 6{©ýEJߤŠ8¦’Š3#-5‚é+(÷K†•!4Ó0beS“E’ BàPÈ<¾Âm8cDbEF$U  æÄ¡D@f(ì gÅb8ìòen9ñ,¯ uèqǃ _#œ>Ìê¼Æ6´ZÞIæúláî0à’.žÄižÂ¨²’… Œ:4Y`tH¶\åH¢’Y°<¨DN*‰šÄUƒP&»ˆÂ‘©˜ñ§³Ò g<©žÂñvskáë‘ÝôÑãìûÿv×­w[÷ø7;1 G’uç±²¤‹1‰ñX¢$sI¦”’Iªœ^=b82 “j­U±žË+A­R²Ÿ¿igùY×Åzk³½hí±éGÜã·[íÙ@ Ù?Y½ZˆUÇÜi¬qG4`œ ¹(3CZ}.ª¢ G¨”‰ÛE(NWÏ4 žzb5!'æ¤r" ÃH-žäG ö«¡³®îN¬?+¨·;ò æÃömq¶úà§^1åg=œtÌnbv¶ð¹}˜êx×oØô]±$Ýø÷ü›Ç`¥ Ÿ7׫Ääöê]xwî®7~VúôÜ ñµúCáþlëlpWiÕG‚ÍÞãôûâˆÏXúµ4âܱý}Çmñj3¨‘óxƒèí^Å펖¿wKnþ~V`VRw dðäÊÏlvZÚï¯mÛØ¬n7Y®íMµmmeÇ×Ú§;_[×é[˜¢;}ç¶s:ñ£å?åÈ•ª=kYPÌÖÞÑÆ'ÜÌcúkjhœÀ…hü êj.³}×û&Zû8Sef [&ÿJÓ#˜VŸÔÿúqüN6Öqö¿â¼[gPï]-,ض·×5.Z©<ý ˜ÙÑÉ‚v­?«ÿ©tãS9ùǬ0_‰õŵ‹èPÿvî_µÿúÈDÿ/Jˆ£{[õÝ}ô2yùðÁÿ‡ÀGŠyD©4:ÿ$ŽÉø;½û¯Ñ¹=áš}–ÇR¶»a¨ÚRªhº½­A€ I–ÊfzBÛ¡Vñ¢$Õ¡I •VÌj Q4f6*©IÕwÞ;¬ñ]o­Jé|Oõ÷¿¸T©^— B®H©.g¹E Ù­rH•w5P» ¢Îº¨\N¤¯·—ùª… \%T-4_ª%|j¨X…KQR¥o%Ñ¿>Q/ÚÜØÖ¥%o%Ê!vÒ‰t?5Q siaQVÍ*¥8|WúÍ»¨¢â;¯Òe_¤ë¿…]yquñÕaÂ]ñ]åG¶¸¨ê‹³¬è늋ÛÅEÅ}-ówe×ø¾•MªŠ£¿Å:úq~诜닼ÎúwWžw˜qÞSo+J{wWàþâøè¾;.m§ß^¿–÷vwÉ qqÝËã\Qû;:ò.ù­åç~äóâ°Ÿ{é×ßÍÝ>¶Øã¯›Þ·ã»+㬬·ÍgD}«Ûweò|wÛ×ÍwÇy‘ïjóëæîø>;;³ß–¼êòß5Ú~o›£Ÿ>zóŽÎóÏ}û×¾õ}~;á8®úÛ4¯¶œuõ÷«é×Åñ]ø;οúÑÏ~OOn¯½¼í›"ü›ÛæÛ{Ö—EçGyãÚúuàyIÝ|ŸKÞ×{kÏ—±{{Þ~1Dt‰: @2R„ΚL-0¥“¦’@¨li  a È££²ɪ@Aé DE–Š!èÉ:4‚,颤bŽC:3 ƒ­IBÓH: Ú^Œ€ªÏBltD“S0 ±@ŠZ 6Rà%  „ 0@Z -(A£¤š` î:`èÌÁ7…D ¢PÒNš8NR&˜PJ»G@ÈDSt‡³tõﯿŸÛé×Ú½"ø+í÷N iD2‰KJH´¢"ˆ&- ¿½ŸK:#íóÛâŽÏ?_ªV *_Zt×õ˜:F‹:)7¥ˆ$h4–‘„²‘å(*‚ZÊ&Q#C6cK wF,QÓí—;RxX•¥$ä2+* Mà0LL·}‚î :"@DX‹J†ÉtB:dèD­“c £ 6V“kD“2ô¼Ò±ˆ‚*È5`ÄX|ÛÒ÷ŸC Ž‚±(3 ˆ(k•ì)\éRP¸B/X$i6T,……¬Â:3µ Z¢Ñ¥S˜T„ ‹L5M“¤ èá0tFÆÑ›T3d‘ *{‘M‘¡„²ƒ£h!L«B¸Z3GKÒèSÐ3s¦ 6"Ä t$Ü„ jI:"‰:!"pNÆA±h†t&ÈAF%3§aêtt´±’: 1”Š¥¥lÞ•”|Cd…®SÈ ‹=$‹‰¨•Q…´#µÐŬ·‹BN,ôÍ!FA¥q´Ø²Ž›õ†bð µ  „†ñ«ªDF :BÝC"ÇdŒB$é"#[D¢Ä²•îÚ¨0Á©h¤Ü±kC ²®‰ ¢É‰`AAŠLä舘´8@’’Ðèfe¢LbÖbÖfðK""˜¹ïLi“ˆY!å ›(}Ô5Ëd‹Yhd"ŠËÁZ„1‚²»œÝ“©‹!c¤‘}–ƒ1«Ñd¡Œ)H@+|f(è.±¶ YÀ€ özos|tÜV¼Í_4¸lL–&™ŠMÚ*ûZ­£"bË:‘Ó—»ƒšÞ dß+H'vƒ:® ZE“9a’IØÙ¬?º›òc‹ñ)Dî„Y LT ò¹Ž^ˆêliã¡ÁèÔsvÒÝU³"‚éÍ …¥à·¹à²âî4£XËØg£ÒäÅö€ Œ „e³„G¡±·4Á0l ”uåQØÁ±Ë‹ ™Â¾ZÎçF¨*R7Z8Ñ »¨, „´vKfÄY,*ÐèLQ7œ¡:[+ Mü$ž†ÁáÂ9”8Ùc›Îx7² µms´-ï „N©–‡ í­Ös®ÅθzlD+ D6:´’j\œ½Š,,uh«TFÛíFtÚ:XÙî×-[3©‚A:n`Ñ„Q<áŽuxBBAHƒcŠÊ$¶77µóÄÅá(P\$¬Ã±ªÙ‰'€«0Èß,Æ·Šär ò*׋›…Ú$=Ç|*ªs0ì´Ry" NïTÂ:Zö¡Ü­££/¡–O" 7!Œ&núLhA²Û 5C“ `î`çÐ^#™¨€#“¢;-,Ö š,Þ6Pe›EYfÂØÄÇ+RÉPï BCå #H5©½ãTžÛ0øxöY¡r£K=¦Î%4º±±ÔÀã%2îØÅ:Ü ðÙÓšÙѤÊBޝ†û®|ÖóQŘÖúSÁ´éiVYë²”y$ðbøÅ@¶0öÖŸ;×ònꆇ{b.dÉì6Ê$E–ñ FwC˜ëx$ÐÓáÈÄu|¹[bÊ{SØŒjÝ6CžQ#ÚË퇠á ==e¹Ý4vëq N‹A~PÉôÖ2„ã4¶Åíó]5x²¤]âב\HC\9؉#ëÍØêõé  …¦º¶ ŠHÒp«™áÀÅãßÔ€¯wœ9è¦.ß'®íì`ó5£îié‚9#¼ÕYòX%*˜ÄËÖ#äÏ Nívtâ«4ãfñ„°Ž>gg©ðÐéÜ—vÕ©’A˜G¶4zÔu†7!K?’ vöxWYÅ”Du©Ú;º®“¬ÓÁ­Vs Yç¦FZ.GGŸo®ÛÆ÷ð°äB7ÂêwÛ¶ÑÎzO]ìz«æ EéQì#©ÞUu]¸DHÂ@ ‰XÇ.*± ®GÆëû9ó/ÄÖRT{æ3âîìö9×~žG•Ö¨ljyã¶ÎzÂf·tööK$›¡à¿C±˜=¾-æ-YÀï˜k¯Uc“í+É9Û­ç|'XŽo,Î:u¥æü½üG1äUäx׎zq¸At¶rªß»x[㯆ô(rF¢ç3Å‘S/¬À,ù ¶!íÑ0bØ´+÷wït—,AÎÞ[ß¾9òqÛæ£iÚÝ`[e3ƒà.;¼•BE¼0¼F|41kIÏKì#Ç1â™ðë{ç¦Öñj‰ïá@ñïåt·ŽþçWâÊ)ßËë¾dØf§¤ÿ8˜ž¦Œ¼Y@Ž/„q!)³È#Ï FÓKÄhÅêK’$P¯+Á±çÍÏ'‘årÜßáøžÚówá÷gÅàß6VW>ZßÉéÛ'´ãYç»a$r&º|Ã%¢FÇ8ƒŠÌITá1ÔJòMNEçï“ɉ·wsó\d>vwìè1½kàyÝsåÛâÏÓôCâxðÜlNBÚÁx¹åޝÂëÛ¬y¹ñù™òkÉò ^<Æ¡ø7ìů ´L1%¨Èx‰Ñq$a4{Ö#.5Íl³@Ø`ˆÀpD!0„"5â >4—ŠÁeÕP²Ð¾¤÷Ÿf"M" ô2&°ÕÏö¼e„Q‰YO¸áË87ÆãFk51àQ.œ‡HqD”dÔÒP®q¤mŸQbkŒt=-bLÚ¤!yTQtóIo$0g‘)W^5[UFä „A) =LòXâr'æšÔ“’ã“m5³µDhk6Y…BñãµÂÙÉÌŠXQ£,à 1ó¬bŠP–³'ÔL+@4¡¬z†”˜dRÕROíÒ<æb·¡Òªs@^bl—]†‹°œ™[ÍtOÑp ]¤P‰— BâT^“§¢‹®'có²CeB¥HÓ@éóm.DÛ”j•`¶àÀ‹Oú ÀÃ$t1Ï"ÎsëKd•PžÚ¥5Š‹òR’M1‘ÜrmvÐʆy·~ ±$y3W§HåŽY«  *Ôç)¿7úeÜ’¼úŠU¡4é 67ìIeA êÆÎ<£6u×7&UÔR¦iÝ–Zô²DñM~ší8ûyT¸ÓÕϤ飳RÂeW¹0µ§ÝžI˜¥2ñhʺ‚õJ N§–«ÆÚ²ØæC•8Å[y†‡–½§œ»l”½ܹèT ±¼†v&*±'Š£7óí>¼Ù3¤–:Ê¥Á.ÎkIÔ¼ð6KÔãQô#±w9åÞ™:®D•ÉMç ÊžLû+·÷R¾<ãª`N­šÉžüÚ÷U\aÏ9”*2š­F¶[¹SÖlÀæ\µÒ㹌 Á˜y"¿U©´ mÙv³WƒC‚„gñ{ù¡9»í‹ ÝÌÌœÒ,Üæ1œudêÂàqC.åhNÅ%(Û„ì¹æ$ít áΧKNlé¯jÆuª¶óñO†ª¥ÝlÎõ«á‚"BôºHQf“öÙßÝ>÷×Ç^Õ {°Ø¡GQ;™¸DnuuèÀüÌýôK«LC—1yÑÒ_SJö‘tZ˜G%:õœ¢&çûf¼†· à»—_?ø€#XWxtfÿ•½%S±GB%=8™¹ø+-³ñõa ÚKVÁ±š/T¼ó(¿ðZ3O÷¨ér­«­j^×gT,¼óƒlºÅ[´®eXàh(ÚçKÅÇäÊ«k:nM¼Ù€¥öa™_?õì§Q“èë·}‹~@uÅ{\ç¿Ó@éÛ‚¤J–Îæª;{à÷—2þ.¤ï±½ôèÙZIò4ò¨Ç›¥|ã•£››*‰Lmv{Öä}ËœÞ3yB~»¤³·Ó˜o^–¿÷òô,éý.‹ƒÐËÏäô{]oS7Kq.ºù[~v‡Pt¿»W 2\»ù÷Sª~л®ñâu §Fδ£és°Ò­r1çÆ%›eØÈy Õ1§#Íæ}†uN{‡*§"îæõðV™·D¥>µÎ}Ò³)%·;¡l´Ç‘J†+WAÝÄùJhÒâö }5F*=tK²ô¬·ù/A 4†Û\›³Ýkc79/zã±Àì%ÍA?¡'ö&(’XÕ`³±³=¼ñ5«ðXÓÝF sáˆ}"B䟆Ý@¡ƒS¶Cí±þä‹[QümŠwIxZuÊJRr–Ô©¦í%Ÿ¾“)_õ]‡a³¡P­ÛyªâIÄè䪥»úçƒÀ#úÌÙ4sRÆO3“9-òÿq®c÷#ÇÁ½¡Óös¨SxZËnãóÛGq}§Ìn˜JPz§¾GÞ™3GJû»íƒ Õq&í›Ô¦Z¦Ñêý×ÿ}(ëzìXi¥ïÁYL_¢ýóD·' ¤äجC®˜t×blbX)­Z“7÷Oü½hIê&g!Yaœ0ñä6Ps›É)žqno¶>™9ÎC•YfõF?ug~›Áÿ»>ÈŽ·¯øa®¹…ç÷þ¼‰ÆSuöRÙòßÏ5ÈwÉ¥õE鄉ûíZr’~ÿ¡¿+÷gëcûòi¤ :QÛkww;ŸÒoÏ·å`í47|ƒ[]ߨï€õyçóÕO[xËÜà‰+wNGSãƒCÔàtôùZÌ]W÷eÅ®Øeu89;þSÇ‚3+³X¸óÉtÓœ+ Ðó§Ðþ”ƒÅÂÀÙï™Øø3ÝÌQæ‘¢Ó?ÊÿzŸ2±¿t~¼iO¿ÃMßm¾;ÉÄâæZgûm;ty4ž‘zOuEÔÍþŸ…UŸ‹§ƒüo?JvÏ©÷+„ªzÍ6ëáðLåÌ-k>¸ssv”»mbü–³ý“ Òwq+‡g|ñŸ•“Ú¸mzü­›V« ÚÒTjf_³ÌÛæÓšq„j·¯$±*H¬ ”†”h“0!Ë !åñiž.+/òÆÖo~/A·®…D_["ªsûJ©ó‘y_Ê©*û•%_"¤«ýªJ¿N¤«ÆT•u5%]ÅIWiRUêªJ½íIWÏ©*éêJ¾î¤«áHêJ²ü¡{ûäu3TQCºb‚§!‰ ¦*®îãŽ;ºà“¢ŠŽîB¤êHéthޤÛQrqÄvXí‰(¢$ÊÄœp#ˆîq{MïvœFgB9Úk€érÙnݵÚö÷ºÍ³iÛm²z÷·»f›i=ÍËÛ<Û 6’Ñ0P%üËp¢ 1ú Ë€Ð}΂ÉB%zì$ƒáb–¢Ê¨\oÙôRaóí^fBÏ}!n³:ߘBÿ ™ NFBæwr¬×!n¤-ß|í79-R½¹ krBÂä…ØéAj¶v$-[¢A!d…¾ÔB×lÈZH\HZp[rÔ…¯{¾¶¤-­ÍÂÄ…»Þî¤,Õ!lHY°BÜ×HZ´¶´µï¤-‚÷^Ì…³!mîH[{R¼¶t¶H[<-(©ÍeT.±AAý(ª+%Â,ÉQV(¨Ò1P“‘V,¢„-*ÂFÆ''‹R±.ÚéH>ö ù˜Ÿ`µÔˆ L€/úÄkªÐ8oB}¬W‡ÊxŒUqy+éä;\]·T¼Ôó¿?õ¼Ýô[•wœÑWÙÐ;ÕƒìR±ÇôúEâpu @"ؤ4_Û=Åïå÷É-³EÄz¨žífõ1‚·Ùd;‰„  ;¦„N®;ŠŸ5ÿ}¶ØJˆ’7Ý? ÊÌä‹?c±ÛÿÙ%Ô@„½;ȼI Ø0E“«€,,7ïÞ‹²ÔrÓôvË2NY…¶¶íÚËnÎÖ±fgvÌ\]]—q]¶ª³«L ,Y‰i¥i‚„W|…²BÈY !`Y !d,…²BÀ²BÈY !d,…²BÈY !d,…d,…²BÈY !d,¡d,…²BÈY !d,…²BÈY !d,…²BÈY !d,…²BÈY !d,…°,…²BÈY !`Y !d,…²BÀ²BÈY !d,…Š™ !d,…²BÀ²BÈY !d,…²BÈY!wíºWú\ÿ/¬ãSç|?æó¾wf¦ë ¤É[™ñ¿à÷ù¦V`+2GØ/gë¿KØø/eýÉoxí ö.ß.Ô<4­0¤–NçÅËJry%ú» Ñ?#ŠÒ¯éÅs(Ê첞ϱv]v)Ñeî²—[óz½öì¨èÃ*{?°>ªáÇí1$|DUS÷FÓ¢É='À±zF’HÓçR¬89’Xf* &iV’¿I×~‡øwì³k+LƒšÙk9›p#œ9Áïÿ„Õãå¶Ý¤$áÆPì]¬ÄÂÚÃ-¦2KvÖɵÄⵎÎÙ¶Y µ™Û†™¹Y»Fô7c±±imšrY¶†µˆ¶SSv·9©fm6mfã³lÛ¹+&ídí·3u·:FÍ`ìÁ­N\`;4¢Ìm’v´XÓv&›fM3-6v•²e–͸–-¢2²Ë Å'& 6Öµµm;qm¬Ý²i¬¶ÖCZ;j4m·mÚÖÕ¡3$-i¶ÙZZÃÌÍ-™Ù6æëkEjfÚËnÆ–Û&í´í¶9±c2ki¶SvÙ6[´¶mM³·m–Üí-©ØnÆ-nË3•‰§HšÉÒ[n™¤Rm1²Íµ‰–ÍÚÙµˆ;if²f4ÙI‚ÖŠ,6ÝlÛjÖfµ¬›8²ZZNkfXvÛc:M•³FÛ²#,¦Û[¥´¦íŽÄ‹vnìí·+kF–²Ù6%i›mµ¦šÚÓtä¶mœìÚÛ7 Ù¶mÖ´µ¹­"Ȉ#g3Ž5›–†Öf‹²mµ¬Âkd‹m©f´Cm”ÜÙ»hí Zc'l›ZÄÚËmlÆ%¸ce¶µfšØì–£`e»KvËmÁ2Ú-·lÓa²LÐëL¶Öݶ­ËnÍ%¬ln±›92Ì[›§s-Ylà´ken™¶IØfݵ¶7fY²ÛpM»am[pÚ2´í–ZËg,ÖL¶£m·m6Ý€Ó-hbÑmi›FbÆ“H[4çÖËQ¶Û¦Û­Ûv›vÙÆÚ6Å•­ËMÛ™šÚÙ¶¬²Íº6fvÖå´¬Íf±l³l´æ°Ù6ÖÖÆÍ±»4¶¶›MɲÖÛm¢em¤i¶ÚrÌÌ#ml3µ“[ÛK[a+F¶f͹Ûcm¶kZĚ͚ËkF¶Çl¶‹L6[Z9­¬“[L‹ ge´·&ru›ntMn5¹NÛ ɵ´·3MimXʹ틵¶Û;k­À™¬Æ›nQe;,‰¬m6ÚÆI˜ÆÚÛ&Ô¡™’fä–,ØldM˜éÂd[3LK&k;Zk‹Z³c¶Ý™8Í2Fš;&Ù´nFس±fŒSi´‹e³“lµhÍ376Í´Y°Ús»a–²sb[\Û6Φc“Y¸9£FÛ­°Ûki–ÈÅ­´íÓ-µ¶–¶ìmc-µm…Žke­mm·a-¹–XÜÚ²´°µ¶ÈâÉ·b[vÛnӲͭ,Ûi­²e¹XÛ6.–Ó¹i’rFSk&Õ˜ÈÛ-›ŽktæÇZÒëS£Z·b9%›‘ѳtk6RrÖËFäÄa²6Íkf·V¶ÛK0Í&ZY-¸ÒÎêÊ*8éË­m×m®;£NêsmÕZcjîÎéµSk«s»ª²¸îê­1EKÄBÊ›2?‹–ÑWü>iW,IzÐ¬ÙØó5Æ´+B¨ª•Xq!Ž" pÈ­ÄÕ£sŽÎ£“6ÅÍ€ˆ†6D1¨|KýóówuzT—<ÐÙ‰/ä*Óþ#³i%¤Ñáæ AYóqs Ø4‚¥¥xa``rÎ:EE«A‹{шմƒdÕ^õòý¯Ii¬<ùÝY€‘Šªp½´×Z¸ˆ:)¤LÄ›ãÎ-V[9 ꖯ˒í˜:0±4/±…HƒC6z@8ŽÁéøÐ…Çñ°%ä°Ö¿ ÓåçB[V*–<$¤[úžŸ%Çÿ;Š£•Óµ¨ù±Åc¡/‰¬ëÿ2Í[Ðe`AÇüЃ»`¯íWmÐ$WV®ûáL’ ƒH¸ð™}„"TÏâð°žå¿ˆA¸S\€ÆÜÆ5± “÷UÝ.0 PЙl¡å‘íÆFË’Eä`HÌ-M=W%¿t>Kàxö¢ª!HÖ³°¡!Œ.><_hK÷ÌY¤ÏõÅùòPÐlz15wè«ÐÐ2“3òâæE„Ò_ûQ°’¸¹ÇbY޵“< \'ƒ פÒir¯Ëö5ºž5LŽfãG“’ĽX.ªY÷}Ì—lq`@’èØrBÝzÎÂFŸÇ…i`™ig¬ý6T´•¶©®ñ]/¦â"Þø|½÷ ×¡Û@‘ôUÒéFŽÊxK^Ð_q¢Ûª‚¹€_x¶ \ç=÷?×f«ÎeÞñ¾!|}+B˜9m.#RÙa ™«Åš÷!xÍ.5†¸æ´]%Ús›ÎÙdP/Ä*±àÂ"ÞG\äÀ¾1³\sçf´]pjdnš0¬óØŒõP :í \¸80˜•(×å%<耾"zTmcýzÿ†hØL"Suh‹­ªˆ.OÔE€€p¿ÀßôÝoS-•8DD?¿yj!ea ½oý4!j¼.]~›At ÁPÍA’yÉ¡)vz¦Çâ¤ý¯ýeeY€/.¦Ñ[fiCKåH0íf/RÕkf¥ô »G'gÂH¨>»—Q•}Gþûï¾ßƒÉ¢Ä$åªÕ‘Ð00Í\­ªÏ3—êâ®Q+²ëüGy«ó{îÓÞîÈZa Bâ0…æ°…ÎdB×Ëe]ÙX/=5Ú0o´/8i—®#áþ2>V‹g›)Àx¼²Œ\ûV âã|H •Ù^æ×çêýÀ~­#תk„’;Š*Ë*¤«2DªºwÖÕ{Ììò»æ.~xU:2ëªG•ªM@ûÛ¿þ€ŽJD8”ÞÚ'b÷OÔ|éuðtÓœ@xCï~ˆ£E|A²ûÁúïOûë~¡ &û# ˜ZAeÀíˆBÙ\(èÕÈH’®ÁbJ“`êH» æâ5LQ¯ôâ":9>áL×å&’³„‘µç_ÒÑ.KÚ=òy¸«RªÖÓý&,ÝÊ¡VÛ9ÚXö´îÊþ} ]? ƒ­arjÛÞìåjHIDUØ^¸h^ÍPHI>-C·×ÏŽŠ)/u¹ 5æš\W—‚Ìß'JßîA‘1pºÜkÙ&á—ÌÛâ§^†N/ØŒF¦ô$ ßëÇÔ["ìÂí´ƒºõ`ÐU`ìtï±Ýù×*õ± !ƒ–èn<Õ–[®°½æF°š4Îvu¶ þÃåôtî|Õ`µ²!f²ÂQ¥¡ ãéßýF‡ßßlølÄç&ÊgWa˜$GÇêÙ{¿Ï½ë¨™;ì.Õ„èi  OËÄéŽr(òºñ*cË”ũëˆ6€æ"HJ½=Ug‘ ojB:«uˆïñ¤øfv^NñÏ[ú+X! …ÃÀÖo¡˜e+5Ã;»ï‹‘˜+ ¿3ýU„¼z^6s5:BH÷m°$$‰¶ŽÔê5°@ZUrzÎÐÇD3tÍ0Vþù¿>9EýQS¤µ't€ø™l_ØšB^[£Øóú ñ±…ì.…«Måeü»ÿ®z‘ÃÈT…ÊÕtÎnjýŸÆtþ*œÌæøÑÓù3™´‚ùnš¸’6š8HI3HI…VFN‰WfSÇÉy,[m¿²%ª£²æ¨›wÀôÑyíàÿo@ûíIa—¹Æ‡ KçeS»Ž‹Äó÷‘Ÿ&&2.¡ÏÅ~QÝvÏc"Å>JüSn—Ò#¯öQhè78ޝÐIOC¦×;NUî:ó©šw¼òÏåPƒÀ7€€‚?ŠÁçé¢BÅ\h’Õíç¿:Ne¯ùJ™ƒXÚ€ÊÑÖÑo9G¾—ªÉ)ŒŠXk}²eæJiŒýˆ1 ‘èq0¨ŠW ‚°O.(î«ÓC©6øÅÒ ûë€4Äß/§^[ù&€85˜†1È …L»ˆ€1~„5ófD#p£ƒÒÒ³¨¬à˜Ï‹š9Aª#q.~ª3sT #©¿Ë¦˜HIc¡GEúÂç³b-ÛZ“¼ôhßß^Ì ÷…—÷7ƒ¯GE½«Ïc±ÏTHòüû–‘‡âsØAñ5çÚXªÈzË û:‡°²Nç§xPÄui ”™`íhvLRwÆ1¬t6°ª†ø 'p`¿ÁÏÔ\zûZGüXx¤„‘J±|/gTòg ’2zùuâ«EÑÅ‘ ýãäl¯'ŽVÐÔ³ûå3t~\rÂÀŽÿ¢²¼Ÿ8†-ŠDDG~+„ö`íºÎ^?]è¾!²ôXÃ?R0HŽ­Ë„@­<°•D?ã™÷Ï6Ë7v÷ÛÈsñjíE¯5û³Ÿ«W7ˆ¡”ä-5Z·ðýœ}Lµ7QòÇ"ëX¹Åœ ®yñû­ð3ÍLokú °\cOzVŸ®¥’³°&è™#ÎØzúPÿD¥-IïÎæžiMGȱ¿ Bðûöåßjºù¢ zѯ òxXƳøhk/8zØ€wž  4MKë+º1 *tM·#“jÒÔì«â_¢¦Mk—ìsø‘MºÖ-[~ oИ´å¥ÙQø!ؒݹR§¾Kð·n†`8¾‚– }}äþ{©Ž©\ïGV-“±L»ŒòqGŒ°÷òÔÅ4£2­|Ö®z²èŸ=e¦“&9²lH$ ¥õ¦™.{0Ía,%`ÀDF×y»ŠÒJçO4d¯Oç˜1Z ¯›4Ê@–&ÎЖrÌÔ"eZ„<½å ÛwSÃÙ¹® ÷‘Ƴ½Ó¿ øJÑÁ·'Ìݽš¿]¸­è[騣èg·ž‡º/ #%?’@!»ZÍ:±§.Wnì,×£Úèò!ßx£hÎ€çø Áô×8úÝ·„iúïÁy öÚRÑÀË0ì Q!oe˜‹ˆjÎÒÏÉ9ŒéfÑ£~xG”Õâ]È=m˜‰ã'pl;Éͺã©ßÐ7;ñD9ôÌ " ÅtöïœQç.ÅÍë(Àf¸(Ɉ%±úù•Æts,€ýóìÄ¡ЮÏï8®†ëôj]ëTÔvEÄ$\my; ”}ïS°}“Ú2)ˆ€·ñR;£bâ¿3¹V¶E‡»×®÷«Ð4ÐA ´Âú¶·ú½åéy{÷èΈ€ˆ¾€¶í¯Y§ïúoÄ—n.\ÏqÏT»"¢0%‹!”¸îpè.´ä ù5åÖƒ¤IÎ>8`-È ˆi ›ši´ÎI\ítC¤> "áç5³í¬m a.›>³†’Ã¥D¤•|öý;&ß Ôo‘¨>ÚÏÂk€é5œÕphod¡$=’ú;®˜ÛCÇÔ@òîR‘„DDz2{zÜëÝçI;L;ΊíÖ2Ý·éÓSe:è;”Ø+¤ák}$ˆˆHÛË>Mr· ªÄ1mbu°f5EfÕ£§E…wö¤t©ÙÀʬ(²Ë!I¥%$$äAf>E«„ÉqÖØNZÆxDD2Ý–>úD\MCx8ïÝ8Þ¾ç¯â¸v{ûv””i¯p”з’?ðMbP.tð@2ÚŸ‘„@±ã+óîi¬1ÛµˆÇî­ý}£¥~Æ*ÿèQóvà¬m1´Ø’u|›4D¨šKFœJU/[§kÞ…¾iêdÒ|fÈ»Åf€x§^±»nÓÒ–—dK>ÿuyP@@%}÷à0Mvq/Z[{.`ªÀdÛÀÌ€‡5/*ørÈú±û3K‚>sChVZm@T d®j“eñê† ÅìãéWbmüÆÒ¨ˆ*oAMMLBЦ$m ŒW$DDóÖŒâk 1ëËÔ–Q¼½ düd£YB Ú×§KÐS£ìT'€ˆìãWòG}ì)9[ÉѽûiUû kè‚"4!²¹éÔ2kÖçê}Ý( ”ŽáëYt<¼û‰Ø¨|UîÌÚ1Út3ÀÕÆb㤢etcãíü%~»ué.0¦h“@l…4ÍCà ì5Eya³wâ­îЏ5‰‘ ɯ|.KyXEÀ”`¼£Q€`†ìD8àB‡‚~CX¯'ŠôaÜcʬ ØÙKi³¹|@ÏDËÆ.1ô" "Ùþ“_~¡~‡©k œŸ;a¦£{ý¯sl\ajJö S®‰ÓEµ z¥ gO5=T@Bø÷Hè×ièÖ㼄tÙžk&8.÷Ý%ÜS÷ëý^z´?FÙ<DAêê”uqNQëÜ_ôñdœú‚S¾ÍâMO2(@Zv&ÙÓ_Lï&7ZË% ǦÌ2|SoþøAž…–\-D/­âôº¤¡‚cK¼ Û_ï›ý󢿸Q°±”÷òÖþà ÇÐ.˜™Gòóüü¿vÏ=gÿ-yxÚâyJ× xI.ìÆÏÉÿ¶R6'â}¤^{5ªóe‰/ê£CßOuµÜ9Š»âé}½Gkª˜NÿÀŽo§È‰›ý°¥%º—fóT`Mwå'«G ‰YþÕâý¹‹1Õµ©­ˆ\/áÌ®-.rïH§-}nãê|ÂtÐ(Þ¦K¨H3,ÿ09_=k9܃^([EêúV´”“„/«mõòtܹj;+õZ:玎î5-@ë[ªŠ¾‘å'sÖª_‘Y SrinøM»Ý¬ŸLÊß"Lσ·…¾t¢À£x[GÝÞü|OÉlþ>þðž{²ï?Óu+æ½_=øpnùí:ßq³» ¿H…š¸íz$-$-$-Rîj!hBý2÷d…î~×êH^H…ä¶È]Y tBãþw5ï¼Ñy>.&þ÷›ðet”‡‹ÔøA_ȽÙwbÖü T WŸ  |M Þ½pðh„vA°âËßVDú¹5!=ÏuÕKßö{h  !o™Ã›˜Ï`¤ùèˆZøR'èÂLlD1æãðnZ®ft“ÞVÿ2jR#EÈF\˾<ÞNc3; ÁZÒ®/TëˆS˜¯mDzLNHrZ ¶ëT«”ÕRœ "8Nw8X°›>ejŽ‚0ó?¿@™¼PŽá«s¢Ø8 x"9¶Kh3}¥]ë®é´ü@jþzÄ]Ùê³I\ê‹cðz àT@Ó<_òñݧFë#óž‚Dî§Q:ýShlD@%!~XUЮÇüuHMGâ"=jôçjp“ÐÞÂÞã—ÊUüʰk:Ó´¶kÃF+NVíëûŽwß³ï¼U׫…ŒÅë^0Ü £%º–i"D*FÔ ¼é TIÓ×»9,˜mA‚H„É0É2ùÂLÄÊÃÉ'ê€Nç@DDÌCnÅBÖ:}ÃÀïiáF®2g ëu &A” ǞᨅÒh {.ôÕ¾€AjgÓF¤ Ј‡"š*,÷¡Âµö)HÞ² ¹}yjið›CH×댉\¶«n°V‘„F_² 녶뎈wU¯Þ6óŠWsKpz³dOÞû¸Þ¤›‹´Œò²€oo)żNPi´SÁ“Å¥ùrÙ‘}Tû ²bt$å‰;’ jÄœœ’,ߊŠR8„”¨÷Þ€"€ŒÝ~îωª³åQ4°íÿ•‘¥Ò¡Oç[: rÑú· T÷GÙÕ#CsÄ?v[M1èÐ{ ˆéup”!÷QŸØ}~§ttXˆ` ºå ‡–äÿƺ"7a#9ŽV@#Ÿ…ˆŽÏo¬V%¦nO€½o=ÅhûOˆ²óï´mÆ&íeÆÛO8~7;q!Í‘ûQÂ]ç¥,øD6©T­ÜŽƒZîj:ß ²ÒBH÷<`²{ ‘0]máÈD/jMï ŒF0 xH'öÖo%þ 0‚ðôêc衜2Gáëb‰H˜@ )d)Xê(D¥ô@A×’Ü‘ã}/²eéÈç‚}oM>óåòápÑÙÄ@“ h4‰ÕÑÞgrÛů[ÝÝr²±uïÅ¢€ …ÞëA 4Ê~eëc,Ä~zã£B ðX’áÌ/ÂsR& ÍùŸˆ‚ÖnAäWâÁq=£üD++AI¾ýÁ?zt@o™ïeìÿ *Džòn|<6=¿5k]]í¹lÖ.ùøÏ íhxéþ§Uo+'ùzÈôω£‹*žCN†RÇRä¤ë-o[€€ò¦üO ø/ÃlüEAðYwKš`ÓêšÏ„Y4«÷Pb“†›5fíå´JÕiÙY{¼hP ÄŽ¥“Œ~"º½œ²cQïÛNƒ³a w@¼ìô-D>7i.øs ©ëžƒ˜Àpó³ÄžzÒîÔqNÖó„> Wo·ÿÝJgÙEY›{0C$N‡ O˜Ïég®ãJ½>7 ·œØM3¯:1)â}õx›œá ŠãÛÒL`ùɯ‘f=HØÊÍ‘J_=¤Ç`@BR'ügS¡º{b9}ø§(pPЄC”8|ìæÉ¾0lT™-Æデn!œð6˜:Á1x‚ùG¹K½¬ÊÀPâm pŽû}°on9&¹Z©ôìö„D-çɞ䢽€‰­~Oô©G%†ÇñÇÆ_6’>Ä@eG}p²ÓøŸã®@CƒÔÆEùÁAhØz*€d9wòn½³ÎÑè†q>  ôyì]8ð!E8«•ýÊÀ¹Ø(7R~°¢I ü–ûšWªo N¯3¾³ Ô1àÌB@2··Ú£ÜûÏùž! :ž~óë†Èü¬z:F¬mM›ÁÁqÈõC*¹àhÈ˨ä}tÖä.}7v߆ÁìÛ=8a$ÇG¬òåyºÕ¡Jô7ÚÝdK|wú$ÀªIßêW÷:'/ ÇÊõµ6¶òã=H•~ÿÔWþ»¿íîlºªþ5Üñ²{N÷¦ × u‰3“‡›¤D íZ:UTµ> m<ü€÷|¬ÎHµ|…8aƒæ—ûvÎr'ó5WÆKäùÉŽu!nmêNÐ!ùK†tE'ä—ß½®b{rµbò üãwõ¶¼Ã¤þ%~a‘,"Å¡’Gœ |§ñWšÂCåÿ{í’5”ýèž2U’É ï¯z¦~Ù*cÉ΄ ÖNL,DXW•@D9[,;ݖlj4ѳôiö ïΞ̤%ÝM$žò±¿c¬öý¸Üè_cf=q^6‡»y؃ÿ˜h?˜zž†BµÛÛ3ÊùµÚ‡nbæ·?¢eùA«ƒ3?1EÑ{ÕØZb~§QÎ7à={Ìña1k §F;Œô«œŠ1‘<嘴9A¶°å+¨€&€ºÿ9 Csœ?ØK 9\¦ö?h ã4õæ¥È[×ÿwÚC„?Û[]»«¸Àk(¦¥ ¾±'hè3ÛÜé #YŒÿ× åüà`§#ž«úÀôDZx Qpš¢g‚¿pÈ´¹ÞÅyO¢m0Àoßv¹ógÚÓ |צ{õ ÙVRQœB´ Þ-…kQ5µjÆõ›º"Œ Åm³0øMçxªPú%5ÓÎðÖX ^!ÁÐ²Ñ bø©Ê %¹féàN>\¦äGê»;­Q 'ƒ¨Ôôg–Z¦ˆ+¡cÄæO¸cOÀÞ)³ˆ°À: =mvÆ@C‰ÊÐq±“Ï@»pëàü¸bíÌm+`"º!Uz7!Ü´hZ_íß×+Ñßé]Ôrt®Ÿ­Üœ¯ì»Ú¿dywòNî÷Ep›hî3Š›¥Ç EΤÓí­µ}:ò½«ïÕ¤8°Ä*ÛFÓ·\wä­.â=­%ÄC¾Ý¹À_ùÖ’Îý—z·Yr(‡eg>¶ü>{Ä èã£öÝ‘w"Ù³§Úô½Fv¬èã,m|õºèï[;‰ÔNøì¨¤FµÓæï?qß^úW­¤"òȹå2UïžôV7[2ã¬ë$(èù¨²,ܳ³»göžÎï}ëÔâ<ùï{s’Nù»ã>+á•§ùÏüÚJ¥0ZeèA ñ Dahˆ&×fï·oM´~×ãóËëåiÉkõ^÷¶ü·}~_]¾kË m­Úç™!{Ö)íý÷Z÷ížñíIb;çÍî¢þÛót$Æ*¢I!%¢:H!C`@IhMµQ BQ’’i†Ä˜³LŸá™6?—H*[ &n؃$$ Gýëê”F=áTÑpA$ˆqûµ_mNÜJI=‹Šy¦”Ä6ÏÃúZù±Wùÿ¬eq‚'ûùº³gÍœåNœìÐ˘¥"„0Ô DÄÏDWkŸò»ÍgåÖšË9Ýs4dm×j2 —7u& /ß—¹ûºbå¾iðƒT¼[‘€U ­Ile½SQ›¸1½è¾ñŒyc~ŽlÌ»u9à=Ý L€“ÚQ~-l"›Èe›ô@S­ ¾îñ)<-9­=$Ð|SFªøª¡ƒMëÛ4«xoû;§³÷©ˆŠÈy–…VhÊè€-3Ma–há\ñ'9óMWB ›é#LzBs¸ë-Wx©’dä¯ohÖHd ¢#Üщ“'Ó87W@”[ýñ­Îøè[jN‡ñ§~Õsךí¹(Ìï¸Z2àéË,. ×^¼ƒ3çÛ ûåÑ~Wy ªã5 nv–²ÿuˆp#9gñ=fPˆB!AÈ÷*H €XÎÞ§éЂ0Øtì•:ø4:SÍ«ïŸËÿL±u Cö»çGXõ]+Kj^ùN/þ—ë<¼d4úp)1ׂZ™ÚvVŸ·¢‚âÛÌ|cð´Aðsܤ}Öa|“¿P0spgôX@±FÙ‘ø¥#òˆ@,¢Ü}Cƒ¦Ó”QB¢F%Xé| yzwž6HHjà /3ÑT“«ž}ÿúŸK°¾°ÜY±—sH…¨<1 œ@,SâÕ:¢zjæ[Ͻû¦ €*UvSµvª«¢ÝþÙi“’Q;«þJ¥gÊãVBW 3žTjkð2‚!TF€8ÀŽ?L~³@Ç™W¨³×Ÿ¾Æ° âgC¯7ÚÛŠìäò' n6ߦ¾l9©pMŽQˆÛí r°f»uˆrÛ€Ú‘”ñNŽ…{êHžN*x¢’›Â´úHˆ€+é õ5”é™ý'iÜÊk+\ÊtMÙ½\gý|͉¥©O)Ø}.ŽZ’6ãx.ã×—»Ë\§6Ôä î°ÈãÍ@¬|¨ºñš‡Þ;£kC‹49Qe!}ð»(¨ìSÕÍu°d 0…·ž!"¡á %·êÎRAÛ:¡ÿä~?ÙCþKé×+°‰ÉÉKÿìgdÿ¿ñsþ¥ý”p=Ÿb&`êØ]_èïô;B¹£5x5{2|ød¿ýµ5*ÃÁ9ŸKd}ñ77ÝiIŠ—b–9jIòö_6!I³Ÿ±ÚN`ß3ºúÍÌNº×Õ:ˆ-PŒj³B¼þ®¥Ä ýï¤lÙøXÄÀñ¥Îôö'Ws%¢û;3yÇÌe€ÚXUFìµ1êeø’áSßVI÷ïµkùW.ŠÇ%DJýèô-ÿ¾.šZ©Šw¿¢m/³'ðê”âåuußµHÚ‘;ãÂËÓù'ÊdôVÁØœ[¦4‰–†˜A‹JGý–@Æ+&ñ|pÏ,½„8ÿÀ–ëÔ²ÚúPên°²n⦆cb˜çê3£œ†.4­ioüFíüû~Ã97¥˜ kù)Ö¬½…DOœöLJþ~¥³«s Ñç¶µ›½ÇúºDüuüºþ…î¶ Ê©Ý†çbÏuêð_×Äç÷Ù!/6[[Ä!·ûË£ÜÆÌÍ]ª¦NàRfâ—´7¢—½Í~åP·ò¿FÀÆÑ6Ïè__>S÷(–7&hiR•Ñ”»ÿ¯ç*Š4sÍvuæÛäUí+^Š))CŒà,XW_GôB[(í@så™)å‰ö¥+fK:u{¾+‡ÌÏuÏÚEŒ¸n‰•Ì‚½Ý´~/V÷aK(¨WÙá]è‡+3ÐÔ—Å;èÖ;Ûÿ&5òíïÙµùéX/Ïo𫚪 ;©½UŠf“ECâÊÜÒ¡"Ôh-mza¸Çyl³ú!OÎ΀ë6RSžf¾¥Íš7’[¡6€SkØï¿±ë²¹ÚUÔ¾ÄÍE/ž¹Òþ•ò«`4T½(ÏïÔ—XQb¯àäíe_?@ò¿$õŒR’¤_C¶}OL3µƒç°“ô~y;kž¨tÔ¢®ÌRÖOS¡Ì¾\,lCOÚ]ðÔÕ‹õðŸà~ Ñ[mü9ùƒÄÄý\ê¥Ýš‘;“sCÃpË; àJ;ÄŸ ÊY,]“[³Z¹~t``ºéÊ+u5JÅ%ÉÒl‡±ÉêUÙnŠx÷In<ü9, å(#xç2Åt€®¼?Ã@©ä@p|k©@^-¶é)¢ÅW3+4âOh4»¼V2jÕ4Ýç×xë)JdÔp×UÆ…IÐ)cÙØŸ‰ŸÈ’c„îXj´u-%Ÿñe¸&1ô&˜é”›šX¾ lÏÀ…¼;;õge(¿f±ª4hÇ…®g‚‘žŸéQÅO\·M·"žA^WüC"Ž,qI¬+Çò”<³:!˾ZµtJyiL®B&dÂü_üS‹OÇ›á´/2&@,xÜÑj‘?Ð9£B>ô¡±!‰yxd e"ØJNqàKñÜJ`·{’£ñÛC}å‰J>'›]³ˆ—溇›Þ Ñ`;¿Échƒ'3æyK ß+Ͼå‚uF¬‡õçj+È«Mc&zCG²Æ¤Î-XŸ(í·V12¨íÛ[*Tt% ]L•.ÒG¿' \d”B•,Ûnœ¶S QOÛs›âÑØÐs<Èa»tLý…ùNLDf†Á•!§õpâÌ&lfÙRm ˆ ×ôâæ&`8kK¿òKˆ›ÌÕ9„ƒ«» GàdZ.þç6½ ZÎ30#Ld_;½–r1l9uUŸ3¶Ÿ­™Û„ÛZí¶côv[êÝK8Ï¡´ÞËgµû3®ç+#ëms¿+{жÓïYع‡ ^œ=v³{F$rEfS¾ý-=¼#Ìën-´}¶"§IÄÔñ‚xÎõDV¶ÛŒ¬3sœà[®µÊ1¿Ë{¨ÏnÝ`œO=VÆüGLñsÙmïÆ½6Ý®É+‹üe³1ŒûìöÑ*Ü)–:[#ÌtøÝï[<ÞûÎ㊗:ßZµ¯¾»LÛYÛQn¦x9¾øìLŒq;,fvsmqÓ‹ŒtÁ¬¬ðµŽ7þôäÒ Û¡Byˆž¬E¾ëœ~ùþ÷þG{ÎÜð-ĵ6Ö¾‹/œ_ž™Í¯­aÜV™ò>«^w?ëàMxü¼¿ú§÷}ÍÐ~Îc°Dú׿·ggž}ZFZCÉÂI7 aç=#{qÕŽWY;ý3ˆÙ+%QãÚéóÚ ªrf·É%¥ã÷xÞ“ù ÿG¥Æ‰ÓÉÊKð]ñÒ)sÏÛFê%¾ërmêš‚§ÍVé!ð$;õ-¾¿”öže…·‚Ù¸•¢GCλ´Q?ô‰êKÓzäÒ0¢Êsí¸®<"ÝI¼pµ«:¸IWÇ ì½n³¡Öä~Î2ù™zXÚíÿæã§µzü—£Ìï9Ž#ýOä;ãlýÙ%(DAN·•‡½ævõ¼×ïí> »â÷¬ß/ïŸ/'Ͷë Ù¬¾›{Ýíc*6Õ–v 5ÛNЕ¶»[rl›6²s"Î4 cp]”EcnŠËéÙÔža݇u™Åþ™Þrx™ŽRÂÞöž›d©,͵0Ó¹m“4‘[núÚ½ÌÆÕŽ@…œqÒ Ü™E¶™5¶¼­æ[XÚÎ4½îÝîÆºËNîÓŽÉmÙfAdX•‘g#jÌŽŽŒémZqÖe×¶ã¸ÏÚåy­ŠËã·. -&Ù¹Me­Ý”á ¸âÎøžÉE圶 VÛhîă¶Ío/;Ò¶Z¬ÜͬifÚëÛ=ÙÅgEh&ö¬žÕ‡‡feÆQ›iš’vÛ’re¶‹Y¹Ûv”e[1ÀÚvçsk%³lÌlÙÆœkm›­:g™½œöÛN]fvÝ¥µíºñmË7fs¶¸íío[ÓÒðÓ{׎öݶË.Îó8róœÑ–3³(4 *Ûw6—·n%žyÑÞ”V³ÞÃÄkwÛ.mÛ©m¤í¯<‚ž±q–ÌIËc“;Œ³:Ñ­Þu¤ö¢Lä»#ŽÏ{Þ±ÛQi•a1§¶y‰ÛjË'¶äö†mËŽs¼¼ó‡-mZ%ekÛ³Í3°1:;.Ì¢&kLç+[kÞ·„­Å­ ÇBsl3η–¤ ³¡kFuœÛ¸’²³¥;mÙÍlÀ³F5Ù’QÓfÑn6¸ç½zžnÊÓí[ØÈ³f†·uµ›bu¶îÉÎ:ÎìëmÖÚÛ9Zö¯<ãFÕyÖwµ»ibÊóÎzÛkyn<»,å˜i»ŒîÒââ°ìÐmÜânÖÍ-³6sÚÞkm$æÚÛ·m7%œYyxQqæÒÖXœ‰“Ö··XEœÌÙ¶àÎÛ]œÖÔ›µ™¶„ÆíØ•å{Úœ;mÛj2¬^öõm«3žÑeå5¬ìNÌ5¶sv,[qÜ—@fÞÞëÜí8´eåïm{Z\xvæ »c=¯:#³½ìyÙœ9¶îôì:Ï<Ûsa:Çm´Åe¶:2ŠNÓe²Lë ¬»EæÞöõ—¶Î³ ™ºN+ÚÞÍbò½ëKh*ÌèšÝ†D[IÍ­µµþ åç¾)ì¶»cB…¦iÑÈEgiGRÚËmd^X<ÙvSmÃ)kYFGck"™®ˆ[gm¸«[V`–#4Û3›C-™Ó[¼¢ï%½½Ùf{Ú¼²9µ 4Vqe•g9dvÚÓˆÎÛv6ëmFKa5µ·jÛZö²ôÍ µ‹nâ!µ-¯<¼ã‹,¸²½íìÇœqæ÷½#YmŒ·Ùn6Œ¬Ìã¢,‹D²3:4Éæí=Þ݆]{×½ZØ«,´Om{nkvQm­3¶Þd‡…fØŠ ›–†ÂMm­æ“ͶÂ:á·I6Îf*Á³l›f–Û»3í|yí›))´ù­æãmgm³a¶šËn³Ñ™Ý{ډ鴋´Ðë0´³Œ‘lÖ¥¢Ü ¡2³Û{S5f”GÙ^^wfñºôï{yÛkmØ…¶ÎË=·yÖ”Vm¼Ï;N:;ˆ³sÌ»ÆÈþvzÚÍmño-&GdY »:[7YÛ±F–•²Ûh€›vwydˆ^bqVwbYåyyÖnvÖJÚÚt³yëÖ÷²½nkQ—n˜YÖö÷;Ûoö;½íÓZ9›+_=ï[eÆ•"h¶žÙÒó!Y{Yîó{¬;-³Ï=¬K‹qµåg{í®½¶^U½¤o{»ÊËÏ:Ó4¬Ê9Ó•µm‚õíy’dw{؋Σ[qFœÛ;ÛWœ]¥çwœåævu™YyxÂö=íygÅeVÞõ²ÞDYa9ÑÍÖÀÛ%¶mžos±ÑnÛ–Ý¢¶²)íïnà4C¢¶– 2ó¬ç›kYYÇ!ÖazöË;Ëi»-#£4ÊÎÙ›fZÍ—™ÙyëiµÙYÓ^õœ^m»-·‘m®²)¶{Sï;ÇËvx`YV¶»)=´tÛïzç‚ѳqYfF½ïw¶y£-¶ÖÓ›iÆÚóómÑךÛ9µafFÙÎîÖÛÞ½åMÛÝå”uóæ’¼·ë­o ¬ÖQÜqÖgIÒÚ›gY͒ȱ×Åéå¯[¯µþ{Ø/C¶±`Û.m¶œÛkvãç´Om­tÝ»Ž¬Š­­™Ym¼ÞÖ‘vfÍÓu£»ÞÑuçf'q—ì_>{·Ì öÒöÕgç|SÍ'e–š¿öhD© ½4 ²’M)¦l°ßô 3¡6žÉZ(© ¤ÜÀÐ2!Ãb@¯Š}kËå¾€½ Û.ä÷½Þr÷{mì½µ«év†ÖzøÙ-ëίL¹ìÞ÷¦{Ëy7·ï_>(ºðçÏvAAÑ{ÞÍ}|÷·v];Ú¿ù{×Ä“—åd_NÎâùó|ÿ§¾œDRq}&m.ú÷¤ ¡¶Å(g3U˜&i ¡Ïo(Lé''hH:.9¾kÅÑA“•ïz^í!@/m¡Iq);žvtÛ :ø²½îôœ¸\ ’DGrOnÇwñûº÷!ˆ"ˆúXqÈS…Î:" é§H’rþ§Y:(îNR¨D#ˆN..Js(@lŽÞìJ.pI›‹nÜN%E-´HŽ o­Þé8î çâ9?¢œ|ØQÈäRJ#•@çGR ÈLÝ"9qÅÂw$'BÍÜåÇGQm§:ÊȈ¸â‚ã­´N'q ÇqN ÎtœGT¬ç8ˆ(ŽŠŽI ƒ¤Ž9$_{Há:N(œºJ#„¹;æÜrE ­):9mhH$—”Tà\uPEú¿Ë×zé8r(è* Ž ŽA#¾-šàˆ“¤­·H%QrRGw!!AG'ñWw[ÕíjNŠNI+ŽˆH¢Bâ:e£Ž.¨9Îê.‚ì»$à¡8C£‹¤¸ä¢‹§é'"‹ˆŽœ¤îƒŽ£§#ŽŠGHãŽN:‹Šˆ9Â8¹r"âí·tœ‰ÑÇGeœqÅÈEttGQqàw%ÎGëö: î8’¹"ä: ˆ¯âÖTG%ÅÒä\‘ÁÐ9ÅÅGwGIÝAqGEÑÑÔt'E\qÔ\]DGpŸXIw—ë?¹{Õú§YÔQÔIAÐTwÑÜTRTQÅÔPwrw\ÉÔ'Òí$謬º¢¤î„ã®;¸î(¬ê´èâ¤î8èë‚*8î :Ìèî$£¸î:â:ì˺;Šâ뎣º:8:".¸»£¢:ˆŠŽ"ë3‹Š£¹Îä®:‚èº8¢Žª(»Žã¸îìë:ä¨î¢º(".(»Ž;ŒÓ+(ê3»::¿TêÎ.¢î*;¯+.㻣²¬«Žè£ºmݤw×gruGf\ÔŽY]ÑÔU˜EWÁÉ]%YÝIRGQÅÇtAÔ—]§tVDvvYUÙTup\•uÜt\]gg\ur]r]DWqEViÖu‡QÇQ×tÚ²:îüÎî˨8눸;¸®:âï;ªÎ®;;¬ë¢î¿P²;ª:¸.ïmÝÔ]guÙwEw%\]]AGQEEÔWGðˬN;£»¼¢î;:îάèé:©ÎŽ‹»Š¬î컲´º:â#¸è ã»¸î»;»:ˆªâ¸:Š)µVuÙv]ÙÝ—\–uum££º;º.Žî:â;¢î:⎬ëNäê.Šêοß+Ê㻎.àèê󬢮:+¢ª+£«Šˆî£ºëK¬®ì«ùeÙEÇw×î«a5é ô(h{¯Éù#‘Ø[yY”·1¦šeYÕÖ]¥EvwuM»÷åÖuzwweÖWu•vvwVWwYU™gu•Tu—\wØuTE••QÙwYÙ]qwWÙ×g\WQÑÝEgq]wuÔWuÔu~’îÓ¼ê²wGweW!ÝqÇueÕ—VWg\uÙÑtvvuÝeÝÖE×qÔuÖWQÕ×6ìî»:¨êìºì(êæ×Q×v\wQwGqÖqÕÙW•Ñ×VUÅûB¬»Žë¯.ã¿è:¯:ï;®Î’³-‰Y•iŠf*Ó¦E˜.O&¬%åwQÑÕu—×guvUl£0e‰4²«2+13Y„Žëº.ìîãºË®Žã¬®+¬ªÈëºÊª+®:£¹:¢î²¨îâî¸ì㻪λ¬®Î£»¬¬îº³¨è»¢«.:ë.¬ë¸ë»,èî㮣¢ïØç^wwygvuÕÙÕgt]—QÝGT]UUu—T]ÇÙÝ•ÕÙwqÕÙu•ÑugQø9*ñ²…²…²…± !e !e !bBÊBÊBÊBÊBÊBÊBÊBÊB×¢²…²…²…²…²´…¥ !e !e !e !e !e !e !e !e !e !e !e !e !e !e !e !e !e !bBÊBÊBÊBÄ,…”,…”,…ˆY (Y (Y (Y ²Ad,¡d,¡d,BÈYBÈYBÈYBÈYBÈYBÈYBÈYi”r¶:üU³†fdMy&aÝÝÇ\wTwEY]uÙvwæUwW•vwUe]ÙÅt]euÖ˜³)V˜Š­1WëeW kŘ•˜&¼ëp2‚­yUtÙi®ßiЇ¦„­œª­0­1 ݤ‡DNH¿h’9/7Dò_‡¯DJGè-ÜçÇGDáÝÿ†Ü\$—Åúç^Q ÜuþS¿aü¿2úuwêe„QñÙÄ\wœE8\uÅúÅZwuÚU¤Qß¾þ£Þ8Žá:¿AÛðX’rH–þCzè—¶BuDs™c–6ÊÎÛ[m#'+ƒöwc„G$œTwDpAP"S„•å`r!Ñ!œ]šM«´¶Öœ\gdrwéEFÚ”³¬„ˆŽƒ‚¡Å·YÁ“5ÉÁEÒfEDDNIÝqBQEÁ\¡Ç’wtIEÇT\YvÉÔQq;~uçRÑÅÊÜ/lQ"éÂé' ä8‚s’,΋³s‹¢œ‹œâNIK¶´G Ú´9$è㜎rJ:Îëm‘ÈQp%ÒD!"’\VV„\wÜrq¶äëŽ#£¸Š'$à ƒ”sŽ(ê(œ¸é"Š.„ì·.J ‚Šs§8¸àà“ˆŠ[UÛ“C—B\IDuå?di8 œŠs9У¢8’ˆ8î ¹ÃŽä¥$³»;ÚÜE•iGA!"9ÝNP‡tDwŽADQr{X(¸ˆâˆ££‹‡Žˆâ(‰:rŽâ"r"%ÊàêqH$ˆ:(8 ¤ˆ‰:$¸H¢’‹ƒ¸ºNŠNNr8îJ"â.8"NœCˆ£“ˆ¹(ã¢Nˆ(KŽr!"î'‚ˆä;ƒ‰(¤éÅ"“£ ”Ž€$RH‚Žr $¸ ;€(§¨.J‹‚“¸¤âƒ¸H§p'.(¨ƒŽ9Ê"â ƒˆ.. ŽR‚¸;€¤(:äå("9;£Ž¥+‚IŽ8#œqŽ8:ˆ ã“Nç."ãœéS‚NŠ$ãª(Hƒ‚Ž(¢’(⣒¨'.@"r’;€¢:r$¤ ‹£¡8Ž¢;Ëá8º)·u§BHt„•It Q]HÐR\Pw'Ä”„éÀsÐ\åÜ"tpqQÁDqI˜e‡ Ò]!IAÜD— ÉpáÑvÜ\qvQŧ$\%•¤q@Öp§’wDpu%%#¹EÑ Ät—E't”GrÇ$s–\CœPqIȇA PtwtÅØÞºö^¬BHÑyUûÕăÜT*–ØÁ¶†Ã©$¢Šˆã©Â"8S‹¸®9ÈèêNB’:âœ*Dâ((‹’C¨Š“¸â8C®8î.‹“¢#§"¹#¨î‹‰ S¹8;¹$è¢N;‹¸;ˆ£®®;ƒ£¨£ºœŽé㣊;œN.““¸¨¨¢s®*Ž¢(êà;‹£®$àH¸¸¸98Ž:*"¢¯íŒë§"î"ŽJ: ’“¨Žî:8¸¸à*¢¸é9;£‚‚N¢‹¢8îN苎¸î.(8ꊈ.â¡è«‹»ˆ.‹®K¢ãºC¤ª;¤ªK¤»‚Ž¡8î$+‹£®€è ãº:¤¨º“Ž8¸î„8®s¢î㊋‹Žº8¸º():ˆè¹.:’ä*J¹8ê*Žâ“¸Žs¢¨¬Ê;¸î£¸©Ã©È*Š*ˆê+º;ƒŽ¸¨» ‚Šâ£Ž+‚ޏº;““¸®Š(¹*8œ.:ૈ£¢Í*NŽ®8㨓Ž"âÎýá×yÔtTwpqAGTQÁt\qPtqÜu!ÈáQ\\G\wpœtUûÇ㼋‚‹¨¢¢Ž£ê8â‰;¢Ž#®8:.JŠCºŽ£¸â»‚â¹"¢ã¸º~®³¢‹¸ë‹¸Ñر"GÇOÀmUê‚ÖàaPª$6ŠV‘ëÒÉ5á[Ü 1¦yœKVMY:œE«Õ‹¬î躻+¿)Õ—yuÕûkº³ˆ³*­ÖI4Å3 qÙ[LÁÅÂÆ¼ ̦«&b2šcLa†Ö¦UfÉâ[YÕ•Kc`V`~jÃV ÌyßtF¬MyJZaWBÅMYJVÖ@×’³-YI¦ i‰i”—ë²MYI« Û!b‹ðÈYV±MX”ø™*´À³±‚d,«!bÐ…7¸•62‰ëˆYBÓ*¦Î$-1$Ì¿/”/âÚSþÞïÖ}.»jn±fT¥ÖáUñ2¢ÞåIo¥Ñ'9…#¾äI÷¹EÃܦŠUÝqJèñRà`•«\Y'óä•«{ýÀø½Ûf6¸šÜÍÚd<7qïÜ ÒÅѵOdB"PŠ“RÓ%¼ÌLƒuzø `$g„@-<š'åù M;[Ïaßñ8žÃïÜVI`žn¯ÉË'âF3jå†Îz(’5“KãRq BHÀ$$ŒBH®µÂÀW:B¸Qã˧Oîæi––ù ¸$‡¥:ߢõ2Öú4¿fgBŸ~z`5T¥)&êÎ ¥ÕÐ}ÉBVpD Dò+€/µ¬j$z[†Ó(’4XÎ “Ô-ú\+¿×D‘vþïsÚî©D ÿf#7b<š »eIJî&‰Ã΄×uçË@”:€ˆ:nÏ.mAóÆ“t•¶ òΚpe+6“ ê®ùãZI¯Ég…Tá´àÑ‚„+–ÑíbWBŸÊÀãl|â b6{ˆGtÿ‰ß‡¤iõ½ØYij‚¿›±}×\{¡!qû]ŸkÓ÷Û¿yŽ…éHÄ„‘€¦ö®_m ßüÜm'·¦»³X©{I+’2uilºñû8XÕjÚ,@RSÑH "!vøI½æp@B©@üN[ ¤ñ|#ÚºÇ.öVþe!$Uc ¸„„ÒEÆW6\IA´³f?öÌ !p»_?7jcô$ ÊèçDBȰÐ(7 Z¯”FFž‡; ÊöÃs#3ž¶ð“VYÃp•Uþ޹áf¿ÄÓ¹µ¼+~S!û0£È‘Ãi䢇[<#a¦dÎùKó‰76‹r·Ü©8’P8“%Ú÷í3gÊÏ€0SwïIÃ÷ùü­$‹nrå¼ÓécòCäsr)¤ <àì ãS ýƒÛËáØ,ìO] _´| ¯9äú2]‡•6©&y›ý=Ñð>ŽAýò±…k@ËUáü×;}â$‡ÅuX9`’C:¤„„@DC#¾¡vÊ!«^u<…äÈŠ b䤠'ßÔV¶rX+ì€öî>­/´ðI@@€× )»¤ˆ…ŠõY©$. DE ÙÂZú~‚~/kãF»g»öhœ7Á$jã ÷#‚}ZBHÄÜ’FÎc%飮Â!]³{ý‡0RÜ´|\—3KþÖ£+_FÎÐ rvM¸à;¡Å5ø¥T±dYcšŽ*à±È=©É*•3Ñ,ƒ Kî'„x£öe(€ˆ„àNÜ aÒF ´áPðåN»v2x ¨!ùÇÉÕ_¡3²zz®ìØ*Ô ñeêˆY3gÑ&C#F0X´|P´ƒ…xîËÏ€ˆ†Y[†¦bOë£HX-/㫤ß^QÐãf> ãäV„‘|…ì‹o•PV9dlñ#× „ÿئf#³Sžq’@DB_8ýØ ¨+ˆª¯!÷w1;[gå³ß¶Þ䪘§¸èé;lçõ¬›¬°‰":ñ!$wÞ"BHªÏ•Þ HK¨ÍvýFOjÒS£¡x,Ý¿|+bHŸDË÷­ê ÙI4{>]ÛE)óµôœXÉØB9N^®yÒkl”P$ñƒ…™1À..49‡ˆƒ _|m÷IØõ­Z6îŒÕÍ=¤IŸÏ›<6+A˜±ÙM•¤3)¶Aa/–õ¯Üª½iÇÖ!iPûœ«·Â;o |ÚòÀÖ›z ¾=ÙËG¾/ õb'=[Dé*ϼ#®HIß.œô«) —Ó¦!m¼©ø³”£¤ð›w Û÷ÏqÎwšû|T’)}-ÇÛàùXšÇÑþ§UKRû ŸñŠ}þdæ;›AIÿ!\™±Šã0$“ƒm„§Q Ýç -@?<ÐZ¤õ°Øÿ oˆ(G±×üß·ëµsþ¿Èþ¾½ü,½ é»ù »uÇÖBHäÒGϾö0Kñ³îJ¨{¿3™ò+õî—È¿Ömõú$xõ\ÆÇß8×ÿ»7Š‚QX_-‘“o["Áá&—iæ QïÒ“j 4´‡ LjYJbMÐùŒgÀTVå}èô|IÔðð…ö,YiKÈb}Ú+pâ"$ŽBVq$x4’+U¿vû7¾’Úf{™/Áùvس$*ÝŠQ㥅þ:8ˆ>ÇhÂÇMæÉ~Ø@‹íOÃ:ú}³ +–Cd l$›‘Âûwf `ˆ]©ˆ©YãǦg™•„®_ƒsåGµÝNQפ€ˆ‡[âÈ[/oÕ~ý«¯ê>º; ¬³*Ì“ªð¶®?¶ë“¦Ù_¡z/å8/z¸$YK@ŸÆíPW|éÕ›xNƒð­]MÛ·é~‹À¿Gþ˜ðÿïã¿Ìy¯‡ùÏžOégd’¿™O3øªh(jc÷™Wƒvó8v+÷äjÔÓ@“Úïµõú}0gÔW¢ßá½^¶Ò Î?e~{W™=-«¶|ˆ×a—r3oY9ú+scGÙu+²É²Ï¡Z$RüC èÏÌ?š¤ª‡Eø0Ož?¢›9òƒÙøî–0å%¦–ntÇ`í´^¹ºM<»ï¦{˜Ñõ|ñÕè³”õ¸MýTG\TGZdy›PeR²ù0~·åÌœ5•)n¿Ý;ÁúÝwã4Ú«:Oík·Êþw²Ë‘å sÙåKj4¿& <$Ö¤òê¯;F¯Í¼?¯©öbÛ/XÞ¬å«9ÿ64~™ûºÀ³àÚs’4-Zúè*öµkÌÆ•åp÷ß?êE`—3·üv8áÿÙòüi tBÂÕÖg9Í‚HÎñsԫBÝoãjx-–N—@Ã{^FÃ-Œ«PG5Âî×rVD¾‡.ûÆjOû»ÈÔ0ú»ŽÛúJà’<ÏÁ·ü n•m »UV£#f©};TŽ™ž“:Ö_¸H×;Ž@1„Y3;(Ù²À$†ZÏ/¡Õâ*Öê9ï  ªòþû×ÿ£ƒ}Å5}Û+³Õc¸a¬etIÈútÐm>‘¤€û¦*ï@·¬aŒxZ¼üt?òë;‡}ò¸$Žp¯<‘©¯c׎yÜ6U%þ …¸ö¾½'_ðX>‡qx^Ž%¿s¢ùº)ÎÅ£ªÞÖwÐú{3¦ÅïZ£¯Œ)!¨+˜!ˆÕ°1@œ$ßê@ˆ&:mR‚¦Œü;D jÆ!NŠ}ôI 2Þm›¯Jë[I{MH1º—ºÃ·Fº õ@h;eÍel˱݃S† 1iÀ"!2ä°aϼil³˜èSD Kñùaýþ{GÄΛñ»~üΓj¹…ÅBÔêk;’!a ÕûM~…øºvä/y¥Çg0BÅûœ¯ ëý l¾oó‘ô cÈ¿Åþͨ5¾‰#ò‹—ž‘¯«>½mgæ˜G¿IÁù [`{¯cÊ4äßwú®N“ÏBÀ6.JæìŒ7è6œxôF[<Ç"©²Q?¢Wî7æÂóu¶ #B‰óàôYÍÜÓ'͈@;F~K:«>—F‰=%žcD£šÆë tX›ò¼š2èd³Ê}?‰£$vWaªSo5Mý(¤>å°€ˆƒN¸»¯Ÿrß¹Âw‡»Ç²!n·KÐüm+ѱå{¡WÕÕÌååyÎNBãxI Þk¸®b H-¸o“ 8¬,âZ®t\•»S9hs<÷š¼•Á$W{µle¿Í>„ HgDÍsÇ[¹KTÏ{IK$zK«øU’K:û´8‰{Þ–òU° H¥F¼ /õ…ÒÂãázˆ^ÞøBçavPºX_Vüatð»¼/¾…îaw¾ò•…ÅÂêas0¹x_>= òa|h]d/ƒ ØBÿÔ.ÎO ”…îa~t.ý …åav0¾l.Z'  …ñas¹È^Þ…ìáyø\ü.r¼…æ¡u½Œ/S$ I°’+WaõOÀ¸E‰ÖßFάý txFˆ{Nɼë$nÂžŠ˜4žÌo¢H}G£‹»Óζwl.ê¼’ Ó*ä€BZ,|$h MÆšÀ…©”J2–"›)[ݦ޹f»Û)”mìIð9 íÂïÑë¬ý?d/¬ÿïõæ:þš?†d~ WTVÒÖéÎÖ5”¼ó @’9HÍ5Üpé #’äpìùñF Æó´ÜïÊÁ%„˜8;d`Ú“ã]lI ¬³Ò T…ôKtÌ˰°Õ5sj°ïúØ8çî8uªÇl«H±r¿Œ+@—·åëj5ºÝÜŒCÆ0Y¦^?¢¢ª!„èêw{)W„ö<,ô„ïnøÎá!$lD+Ëáó? å`·j0¿m)™kÃt쮸$<#àÌ©…¦s•fw¯ƒ3ÄÀU½…g}ê³övô†Ý`&ˆ³å-»/[ퟧr‘4¤GØè5Eº(ÈòèH"œ/¾›ü¸t¿×ò´„°|“¸ý¬yi^°3$, ç*-­¬hs‰Èfˆ øL@"!5§ššš6÷ŠÆ7O¼"€†¦²®Ò ú¬IeŒËÜ>½íaªóû¾ÕTvs­½]‘énžÒ–^aFÐÖóŽo·á¢Ìˆ7é & #GÄBBñQ…$³§¯ç^”¸!ão)Kaâr3u€¡1©ò9Ù×W„ZW\¤|~éu ¹’·%òÚ‘w{£ ƒÈµíºýãÓÞV@YïsŽÉ‚«‰!ýíšØ‚½Ó€öLÏ?µŽ›»„.åõþŒr,æÙûwo¨©"7}%xI[.’åºYó|2š²5•øõZé—ÚÂøXeZð’öŠ‘ ãBtpD ƒT[,0È©:ÕàêÈßI—ôçñ<Ö0$ÑzSàs$o¢He.ŠöË/ëä`HÌ^{;m qVÃW×lål`r‰(ÚzX*7a<Ù¼0z_£ RhˆIÊÊJàaæŠå§3É…k¾³,@:® W¶ô2ÛÉSÝ’ l¡Ÿk±Ëµ3æÄmZ0ǸI—ÔΆ: ‹H’\ÒB/¾ÿâL|ÙØ¶y[Ä*¸…Ðáh];6›:[øÚW‘Ae¡ ‰dŸÚø¾J)5^„¶xæ‡#ÊÝÒš‰Ê³ÌjðÿWyeoSØ`*©$eô^NŸÚAaV_OœÚâww^¸»b¬ónò2^癘^;½YãÕKó®‚]­ƒ¾ÌÑý÷ñ$_:ƒ‘Â+ÓMÖßëTw•Oš§òRy£ñå¤|V. ­þŒ³ §Yï‚HaǼ ­€ŸæxÆxv¨ÌµÚ¬_›£ôx½êê2=ךjS—TÓèJj¸®èbçºØ”x>`¬ë’›Ù ºBäL8YFïÉæÓXg¯ïvÆuÿ—ø-ì6·í¶ëÒºuÿ^x}s½íÒë/ÝùùЏÖ;¸ôŸ?jͱÝõ‚qÃYdñ/óUi'm—R\ÁcP ¸£À"j•p$õHFzÒ,¬?õЃû8D$Ç[»ó:#wRâXç5ƒj{8Xe÷ ,¸{E‰*‘g>x¡]SC '*éûϸ_vOÅ?÷|¦C3õ,Iþ]yþ¹$žX¿÷¡(ßÔú½é¨K…òÛ^óFhdýFƒ8£NX0×Ú3–?¸YM†2šAqÛ~—Š¿1#~QÔOæ÷?ÅÍŒÖü$Ú}¥B)“¿å‰­wÒ4ú=‰þ£F ‘½Ô)á%Ï™A? u¢›¬²Ì,yê¹fŒÙ¨y‰Ù9é3 V³&W¶f]Þ\Tg?#Éøïܼ®K)¦Fq0Q‚ä ,áZVÀ-‡Ä”¸(Y /ç¿?ÂöÕq>tÖ0&‹w´G©«ZäÊ-ÝA¾RÅõŸ1|ëÝDÝ„cÑ›1¼Äjv¡3ˆ$³IˆµDÄc[ÄRuY½ÿÇL[vR"äm¹âËoܽkÀóÆÂñŸ~1÷;ô®zàIìÁÄß!»5ÙÓ蹕8Ÿ•¤3ƒõG­ûNÝæívïh×°ÇØNq®'¿ða‘ê‰B1¾×uÚ°«&'kMO«þ°|ſսª7½·RMRâû`V¿o·À]Oéb}‰; ë¤òqžZ'Ž%0¯;zoCçK*n¢ó®?g?âÕ_7¼¶ù¬@oSv*#_ß5KòŒÏS-hÙ#ØÏÙÊA0þÏ “½vó>VŒ²”%77Æ">M÷¨ôlÀD@°éqe° ü'?DÜž“Ÿ]œ‰ßÏ.ßdzQöWií4ú^E|Új}5 'Ï$x¯cÛêóx[ b¬‹ïñŽ!{âý§Mç3Mm¡çä+ôΖ;$žKu÷†‘FõIs56ŽmÖ7YDÞ“õüºó÷y–×=wý`I^¤ß½NF夬$^îüÄ$‹b@µHZ¤/uÃ/-œ§g¦ÞUÙåý{´v»²æ¶&dµ“í÷®ß_ÑÅ೺ÂÊÚ¥œ‡Ö!s¤-VÑ ïBãˆ^D…Û¶8~*áwœŠ¢®P…ñ_ …úªŠ¶È^gânøD…×·\1 Ä·ä/BéH[D-é d…Ÿ¯p[²óí·Ä-8È+'rÌUúº+©w¯l.ÌÏ´c÷Îdª‚&÷ß:Ã…C±˜×îý©gœӲ‘¥È;CˆƒÙ¨’<–.Iˆc-–‰îÔ/ÈÀÓ1Hû×ö(€" NÏ@Oðìf8Ù®ÃÀOSӶݧïä´å šG©q„—×ì*CÖµP.oÄaÕ¿ ^ôàBãýwm¯Ècàðr´¿t…”]âí9Ò–g?qt©PG»A|L<&гn¸ëˆGÇ&Ϊ¸$,39ÆnZðYû­Í:A”˜íß0™![ý‰¢¾¥Ì[þD'ïLe,D2ÛC¾tp tj‹Úò$r‰ žŠðSþ¼¶‹Ü—k¼Ø]–l—»¶Jâ;Ï©!l×ñôé²ù¾ûìv\|-Šå­íVž[a ×¹MV¢wÑã"Bã59²›º ýv TB7Í•îÅÍ?"s ßší®4â\ÌÆ‘¯ÎÂ$ˆCËÁúšò”H’ óF}âQ™œREš4ÖÒZž—Sé9ðk¢Rz¿k„¬6_<—v}'¯àÏ"¼õ´(Ñ¡àG¯îø‡$Žs3² ,šžáømW5J%ý€EèxK >JþÏ’žÇýkQÍE~ñêæj,4´"U’¼ß.÷¿éÙêoòwHÿî’õ^?Nam(y?ï[…ðéK?6Ñ$0)P*l4¿t„‘Zá¤p¾Óþ^{ÝùÒ¶É Ì´ò$,¹¯!¥Ðÿr+ #ʨ¡ôQGló.Â×’Í¿ƒ ÑÔÔ¡¯{:\“7á$9êsú±_Oêwu_ÚtûW…üyt8êãl­ žÇ!‡þ=—‘ùŸãv5q½ŸÉãûßÙ–øº—áÜé ªˆ\*ì3ãyQ7‚iv’ÍêW8BàµWžx­~ñÓ,þõÿ§ÞøÝ<ï+yÝçov¦[­­Ý¶ã±–çWë^’8vWgg\B8вµÅe°Û»éáw/b¬:Š ’:8…‘ÍŠHù»M­ÈËˬ½9ÊÊ+;¢³»;å5c£åå^‹tE#¯;­½êòöÖ“ïXQÂöËðÖîã¹EЊþ³ugdçͼë·Ycíº:ÿæ¾z­ÎGN~–·'ÖÉ^ùêöÝñáOÍñîø¾3nÏÃnq^üÛÜç¦ïÃôý^ ÇOY·­·¯zéõ¾|´DîÏí=Ù=ú;ó/Ÿ7Páýc·¾õëæ÷²m'þÅêù·Å%ùkN;Žú+iæîöÏ­»Õ“,­•²S·õÛ×·g´Õø0áùi­ÞÁûÂ{‡Wü»ZmI%Œ–tvБû£?&XþÜŠ™¦›îžÀäM~r”J")5×ðM÷°—Ûü†ñ»g­™¯Y,›ðì¿=ÿ}±Åz,–§¡d¦³:s…XFdCV6¼V‹OŸçžç…Âx+–»™í¨çÓ¤«’Jæ$†pÌDÀ—¡éx éÞŽ_Yói’E¾FoÂÜbæGÄÌûA»e/ ®{ï'^F'ŸéúçCN%Ú‚I+ögÊõŒÊ°Ê1lº•$v>çé_¢µVXáYã±Zö¤g¹8Õº  ®¥çØÄ‘+S‚cÝ~_È!jäÈ\lBòÚœnÉ gêëÙË®!$Aým ¨B2÷ù%›e6ª8KæÒ‰i¢H7úè’ö?]Ÿ®æý"™ - yšÏ Aøº®˜8ý£¹¥©þ_MzÖ{æRx“åhÍ4×> ŽÍZ£Êd¿àó"„§a ƒô?)z5eèEÒE¼8mpÏ´0%éEfšjî¾W߇#âZÞ ú=^ðAøV´üF0´÷ƒè }«ÒÿÒ Ð8lÐX ÕôÓË4` c ƒe9ÜGÜ+[r`þ9ë|8lPÊD1¢h¯«m‘4ºÉÄSNO<,,J/ôæþqlכּïÓÔg9 ""ôYîø3Ú9JY’_M2BH•õ£þñ±·gIøúh)„ÉßÍé?Ó=\Ü,ñù[u'*BÕ|’è…¥„/æ»·„áÈ[¿ùòN—o}ù¨¥ìß÷¿¬Äžéï d¥ÞÆ$‰Íîò—·û)R€S¬ÛNÝj—Qøpl¾ºW`gW9ˆ¬‰#ðç9›ð»:°+'’*J öÚS +P{Õ˜Apüè W¤ØÜÞiø:¾¿W®â!gœÅ¹.ÀD.w|Bú„.˜…µw/)Û~6¿ò!lD.ä…»!pÒÐ!gfBä6HZµa ®è[¦²õnµ°„‘B}*BHåc©ïª%e¬#Ð7Á.35õQÄ=뺱C(‰xÞD»Vû\O$‰‘n`»äk©Á|³/½ &`^ÓmÜnýa§ fzx«‰#=÷þïõ‰‘¡Íí:m¤·MµÙ¶Ãö:sž±$b|®×~±žî²ß 왆GiP‚K‡g·În: €´ r”ÈX)NÏ}–$4URÔÈ+Oƒìã¹h2Ú/*dƒ9¡ªÑBÝ9À« !…S ƒôßlR_`R%ùý–;Ã`ø’ÎX‰Ñ@(:¤¥ ©XeŸÿd0”"¯?‘Øû÷úø.{®Ï!p®ñû_Ù—ÉÇf[”ûž‡ZûÊå{n2¶£W“χ‹ºÂÎõ4½|ګѽ¯ÀöWBÚë3£ÃâúM ·ù…ôø!ÊqŸ+ÓÛ’á,zü]þÛŽºB=׈ÏG½‚ðëßjÑõÑP#ÈÅrÚ _?®Æ ZÒ :ç»bÜ0ä_)éäîÒ~úiçž$íUŒ¾?‡CÄŽ"‚?&ƒ+H¡ž éíp¨og§Êælˆúdƒå!êÐq»ü¨D†¢áûåÚ`e !$Z×äÑ}öu A´EtSöHIvüvt´Ñ¡~ËÜOþpz•ïwœZ®;JÛßÈYÒé’á £ÚÒ!q¤,TUïÈ]¡ ¨ØÖB܈^×V²ÏÂÒ¢®…¬…„-ZˆZm¸bÙßyÏ'¹v;D-¢Þá ÅìÜ…lKGÆL—@Ð|ê Œ4Å;;»’!lå®–‘"+>í†ÉoŸ¤hî)Z8‰‘þߟ¦€áZ?¬}§;(®‰#]®ÏU€ù=k™gªe‹Óþš¥_…Å GÀ™"ç…ëfXFm>8¸²º Ói8êÝË™!j ¸_ûò|I U®üÍ€I5!$LEÕc‰T.K#!yí·`ÈÑbÐë¼Z+G¾ "ׯöóÕŸBÏáœug¬«¬Î‹Gúf·ÖuþÁH’½Lt‘ÉR‹)$ MŒŒºŽÅº®ÐoêDV”/o¸m°F̰…Çé„,æ5R© }×!ž+«Òý zõ=Vë¢õ»:¢ï{!d…šµ,ˆ[ÒÊÕv8þ\¿++ø \jn;Ü,p™yoáì5}͵}­ù éøT…ÂÈY™Aa † µ°BáÈZnhBÖBÕZgàeàÈZˆ[D, ¶ZÈYâE#Ko<¦´Ù­EX[ˆ»Y)8Õ²¯‚7PŒe„Ia_Œ×¹=cxµ S¥ÌT©XÚþ3xMz©(Â.E0)©vöÖÙÚ],TPÏ9£—Çh3Vc5ÀÁNjùª3\âz:ÉèÉòµÃ†µÅšhmŽÜù7:žfMìJi§e ®Œï§‚ž‰Md£®¨(—’1 ©)¹™‡éíô”„PA¬[˜VÂè|LVú§‚,)yþÕfm;ÄëÉÛ [!Yš‹µï~”cZ8²uxFù‡ûœ¤ÿ—ùÐà^Ÿâ@ Ùªw_“Lü9$}¤Ú©ü`š›¸#^â#›y †PÈ…–bãQK'ͶmåÂv_!+¬V4…UW`&äBíó»”"yõåLòz‚k…Ç1zÚ¿Áqø4þ.¦ŽØç£yëîM~â§Ü'vذz£ÆzÓ¶y][[èLOVPÃþÅV¾msÄßaëA±á§LIl¹ó^kx«¼OW›ñqu¯åuõG7Qý?¿Œ§«>ν õŠa™dÀ[àû!WØR¯¦€–뺡nå—G †\W©Ò¹¿pBÒ¶ u(,´/O¼»÷5”*^%¢t …Šk@÷Tk%þ™ý²œIpM ó„Þ ÓÎ…± ¯¬ØÌ‘j›K ‘:GŸi†• ¤š;å±R¿LmCí¤ÞÒVÄ‘êW¦ΧBÿ˜ÊT°™!ùo,Ö±ˆ˜ôÿÒí>)ĉíZ¡²3+:JH]¬M]D ägž¨ %ܰ:YAYhàyÍè§ÚÛ¨"Ižt€Á`Àû(ìüºVD‘š‚t—¿m¤oB`!{öhÔÉ’i¢ÎÎ]*œJí"ØÂHSG”ÕZ·k½ÙÅfW®ë4R‰#%ÚêÈPYæHY‡C±¯µ0Áih- €'…c%GØúOg¨è^¼õ€@DA´–d.õàú·œ¸n“' /…¥ìpüÙ®[“J³ñÚÆû° Âq_霛JpˆEÒW'¶ÿâ=A`×¥LV¾Ò¿¸…ªãˆY²B„,_½´ˆ]Y Z®ïšD,!qä,{M²ìÛ!k¶H[$,!~Þ±HÖBúÂBÕkÚ!n¸žv_»ã6ל>6jÄ\´¤€’,HiBC ÞÓ,3œ»1$¸—Nøv¨auwæX&¡ŠäÒÕÌ"µ•þ¼¡$q×'ðn+·Äiãø/‰Ü~D…ß$-ž+½HZHZõî¤$‰¦¡X²<Û´²ÿVUiZÊ»qe¨â$–ºJT BH‘l}'N© }ÜD%Vúhò¦BOhÎðHËŸÕÉj÷Ò·D-^>>|¿!t:âv9Û‹!yþ×c¾¹"›ê²ÕòtäˆY°Bݳ5d…’«xBʶ«»õ¿K˜äî7†Û+Œ¥C^oÌÌò‚îã2,MYDÃË —•!y­u³ ¿Iz nŒýÓ¥™[+Ðr”Â):iŠ-[÷±å.æA¯òacœàx‘xÿ•?ïJrÏa*Bû=FjK£´yÛü:!}®[0™ó x^F\,Ü|8á-Û3c‘å+¹Žx¸åú¾»Ãpÿ?êü¿Âæ8ÿ}÷ž…ßWìäà“?ŸCYs\‡‡ˆ[„,ˆ_ò¶úŒm¬®ùœöZ£í~ΧE•®¬¹Xh¯¿!y/>Bõ¾_k^\%¼™ ^0…¯(-‚öª $,º"ÔBÞ²¥%@¼i³„ŽL¥Áe&¬Ó$ Gþ|ÏfªP¼.ÒtH7sI;4"ðý:êä®z øIЏž¢Ïeïu‚(‚íæJÈ M±4Ê2ØÍÖ ¼µUÄ‘ói¸ÀÖ%R ìªð•+Öö"øÊ)Jó/WÌc ^u"#ìhðŸ¨ÔÀäò|åÍVµzÝw«ÅjXèqÅÂêôº¼­…¼!iûZ´æÿ…ë#U³W³!i߈Zô!dBÏäÏäéjöËm\¾ÛÝmp1è.¯!V„‘ávÒTä YwÿµhZ5A'@ò^9΄ÐpÏ\ø·Õi+ůS­K9ö‰¸Žsà™k¤·(rÎsï+è0QÙ žU“™¦(ffHüSŠk»ÓOŒ"„A~Õ\gT±hl~>Ö)ªt # ddX¦I‡ÆˆCn›çÉÄÌ'KsàH8«0’#–e¸ªð’#"‹ºÈ\Ü…™„-UÍÙÇnWÆÕØ|½/¥Ÿ}Áè^}Ÿc˜)Òò¶øÏiõø %B<>¦;štŽz#ëß„‘‰¶r)Ý­ç®\æ²ó$5 e™ÉK@94¤&ª{ˆS¶Ðì>e+bH»ì.ýáêU„_j¨1ò17;Á´é5Ëøu:Ì_¿S6åöU_ãÆs~÷‰’GÅÚQ Eͽ«¤$‡0 åTõ^oªwª}w?®™0ñß{>×Ù*)w~^7;M¾‰!åÙD]½»1ñßvTP|s¬Â@4oY_î ðyäP¢`¬¹þ#Àê£ ø½Ó›>ï§ÒúOú:Ƴ &8‰J D0‡-D¦8˜ì&¡*ŸXª1ô~¢¢÷¨dNã.+å¬×˜û”,¸õ:(zxÉ»‘/)BlT̶ñt-Ó¸Èî'ŽÊj"HŽOÁÍäÞ³E¢ðzØ…….k§ØTSg܃cJNOWAž…;e#ôõû/ãMë7-nzþã–2ûG•[îv_…éòy¸8ä]½çìíʸÿž'mö~ZJakÙL!‹ÕD ÿs‡Ñ4yïšt@g$†‘ti #ehæ}É3Ï„‰Ò=cØjõ:_̃íe ˜.~y2­ !çœè¬x) ªÞÎx¾ÉÐÁqB€8Þ`È^g}ÝN*¥¿Lw%dIÆ»àÐ×ÿÍP_ZÌœWËÊØWÊêu.×/U°\‰ p…®ùyÄlAMÀH lIøûãC4é:d„ÉZ 8ÿ!$GDDdasKêñ8Nî•S?P¸S‰Ànám‰Áb%JùFñ$2p.ÄXZ7Ü×ß@ Ê~4xöb˜¨!£?\…ìÌ•£m1Íò9© qj‹;¥`qÜþ?µ»E€I¥4bÀM‡*fì&ûfC5ŒAeÍÙfÀ@é@È´RÌ€p)TŒ)ï|­¾ã:ÿðìè©„Ë’0ÐZ&Í+í\óW¤„‘@cÚ·ÉrYZï›â¿›éÓ¨=Á°ãn°bŸ“D8Ve³v$3¼  {w^DXQƒ¯téløúCæõ? %DUþJKÅçûêMµa 3ý5®þ=¿Và›£ßD‘Õk=ÉÛ¢¨+Å íT:G7£³PPhV·25©…ÉG&ýþµº¡ÅPÉ3<õ®Š[HÆï‚H«øÝí@´_4„v^ çKÑ„}›Á‰~<ÅûKžÜS÷ľAªa0»³‡i}ýF6TcaVl"Hë Q´Aøzµ¡¢OÓ“¤YMXÃâ’ý$^ݵ̓ K^F[.A󸔭»ðÖ7)Gq%ã>*^4¦QVq/›*ï±Ú8³ #Æí¸ ºñ˜åÕE÷=ï$[Ò¯oÈ[ÿÇY-íðÜí––èª>ò, ®ííÅ{)`¤QlÈQ-7}‚˜’üh5D•Ú½ñuøÿ—Íþ¡fžŠ#­üø‘$NLƒØ…ø9 KÞn~djz_¶Ž‘uLœMtÍ@±˜9­U„祫ïɨæ'JH5±°Õ%/"ñ2&@ÑïÞ./@ãRªÂH«W¶„…\G» º¹~0*‡$˜Úç3²A8r=ùÒû´ÇÍËÇ£ÅB¦Ú™„å¦ TßÛ¯ "`û¤‘õû½0 q:+Ȫc)J(Oîˆò¦DÒ¶éœÉ«S³Wþàðc;4Ý㊥u î˜ÁÜ3ùbç+žŠÕó ¶*ŽZÅtÙ׌:‰YYíAƒ³L¤&·æðÌ÷ħœ·N‰,o´Ioe“e†ñè[ÿãX™³>Ó—Eikç­—ÚB€ò·É/ÅêÑ:/÷ýÌêíª‚³DG#¶˜’ kZ¯µu¦‚ß™T+Ž7²¨ðTô(òàð·seκV\þI™ÍÓãXn'2ωwÍN#šÊë¶y׳ÉÎæô•Ëlÿ( É ýÁ½k‰™(éXPýfÿ±Øah«GïE,¸,šîTè›ÓáhIL&q<”®;/‚:ÉÌŒ•qªÔÉtòë謣¾8ˆ"Yüç¼öÛÞõ™ç½=k{t‘ë=¼ÛC“½­nM´9f<ñ{¯{ÙâtÚíí6÷îöñ|÷^øÂÆÛ « Š%)JqG$¬ÌÁÎ@pÌr$áÒ VØJ„¢!#¬ë?È[±2u¦ÒË1·KcnÉHNï:úagGgÐëÏ.<´îï;éÞuÙQÂ\Q܉ÐÅ}N::: »ÎޏëŽË»¾+Ž¢âŠï‹º¾}nº¾‘u}::Nº:㨸ªúGw|wÒ·Öë¼úWEq×Ojί§wG_O޲ë¬;¯Žª¾•åqÔwuåtw_K¸®¯*»Îê³¾:Ë»;ºòà®.늋£º;»à¨¢»à¿t]×ÅIÑÅWÅqU|WwÙVuÕw×ÍwyÒUñ\uÞtw]ÅW•VEU•Ýöë¬+㮼®¼¨»ºï“¾•ÞW03«i‰M1#2–™D³*¶1™5b•f X™U¦Z²¯)«ŒÊµc2ša¦V`kÁ5d-yldÕ‰Zñi’U¦-2+e‚†Ý6&h›‘ž˜)WÑã¶W«_%mí°FNgU]ñë!w•,Ïx½ÝÎÖ³÷OÉÓ™Ùw<ñèºp¿“ ©Äû“]µ‹lõÿ·T søªœlϵ?c‡k ðè5ódb¾ô>x\ÿ³I'7©úuö>x·õ¾Ÿ;?é¨R2ô~^–YØØæ==–Û²™PÍU‚½eÐn}^Þ??½dßÑŒéZ£Ÿ°ô~‘ÙuÊíí1È©…X>ßÝúN÷^ò«¶Û®|ýý qœ¾fåñ½ó®‹w’ó‘8œßÖîn?3¸•ìÞÖÆ«eôìð‚ùö0½;‹MŸ®iéêäõœ¹9û|#uvúÚY¿sHS²±¢À4ä<7ýîÐÙ=ÒKž?Ÿ÷»ékœ1†|ÿÆûÂ)§Ü`ñ˜ßÖyhL Žp'æ÷(÷P‡¼ðö'ƒÖ÷Ô„º;ùžÜâÜÓYÒÇ z>qù+¬/‘ŠvÓ¿Ðß#ŠRÒ(Ñ\bº/9ñ°„/ùþÁ2‹ÿ&Âz“Úâ›óUÇ`É%mð™^Ù_k­ú~W§}ƒìéß…Œ[EgWþ¬Ô8ÕŽÿØÇߨÀÁ÷ C¸“;ª3Ϫ‡ÆÖ³÷rà¯XÏíT¬ý*~ŸúÇgxšº3êÒ½Ÿ*ñHزR+Ó–~hÊú'A}r°ƒƒÿì®"#5â«óꯢ¼ÇåYòÑÍÄÍïçM¬Àæ?´šÉÛ‹3多4Ï(Ts C»Öšoé/YôÐZ®,vËú‚)&ä^ÒûCu¿×ó»÷ð™W ×Ôßukö¯u¢¥A mÅÿ ¤[ûL¦Ñæ’²?ÃùÇöí7B. ’óöÛª®òžwÈ@øscùg g³>¸î§´J~ *Œ…L·@‡¢/¾):S7㦮sÚ»_Uúg7/E;-¡ýÿ2ËœßèÿÜׯ!ÓôΓ³‚Èàۥ“ü&`€a?ñVåù=Ißoý®ÀB‡Iî†WÇ2{y<^›ž‚]Ýv¾óUÍKÎG“ô3ý˜Öµ¹5õ õÇFóÍŸüûñuw¾^ëaj;© Êáô*'kÞB®ziðS’zÄê¢öHq1KGB¯ÊÃh›ÚσdÀŽ­ÌÎãQ…}@x™í>=ÔØ&òn9é2¬tkþÉd¾¯eÓů•ð4®Qm¶-¥.ÑÄ ÞM¼€“Ô´¶õ2Óx´­šs“ðʺ“Õk[žp,£„Üø‹#J­% [‹¯™fµ$Ôg¥t&6ߟ»QE´ŠÅK “·üxT;^‰Z›âÇáäÁ@{.»=Š%ÞïVƒ×#3` hŽ…ÚoÉ^eåUjtì3/­ÝþœÐÜ¥ñ¬7"Òë0Ï>Pù Øï0×ɦtˆ}w+Ò'åÝtÒENyÌ¿ÿ¡÷Nò±«{Â]à€ÆŸ;¹XÎ@×çxä=›·òÉ_.ŒÙe±< L-o2úvÉZd·æùÎ&ÑBKbg’·ŒJÅû´Qñ¨>r"óxû—á2F˜¦5éùÜr›&TSLH BÔáNè=.Z$œY f@gcW§Q9‰ü(¼ÁŠQûÄÁÚ.*/Ž0Í ˆ!\lÿÜe‘M:Ë1 —Ñt¥Å!X¬÷AN©ÂVÁdŽ– xçßKÊóMñû+kyÌ€­Uh³€KûáJùÂ=ÖÎñ6å¢\ïÛM%¾áÃ{€LŸOÏR{¿EÑUh8Ï2Óí®îÏ”YálôÉV{¢÷D,ÆÖnÅòÂrÒ´â"…åvqLù 5|«-Á¶=ÅŠqåQGç+,ˆÙ'iœ6’³D…¸L±Ü!ZT$#…<ünè¸ëetýN½L¨kÞ3ÂÉNY- % Ž(ýR‹â{ϱSÄRo1^GZ£ÂÒM7ëÊ\DÎí3”üîjT(æLsøè?Æ®Q˜Õzý™’a ì\é*>ÇéWöíx'^oF‡êù0ÉÌäB>D£}9¶Ûö_úûo\àº`ñcýn"ô0 pÿjqùW…•ï=5Ö»8WÛCÛ×®kŠã«ÍæùçMVwŽÒ©k¯=ÓÇ﮽6¬êº>8ç=9=1¿?|©ï9ÆÆ|®·ã¹tÎÙ·Mø½¹Û²µ©qŽœkºqÆüÖ3Û˜¶Gdëý‘®±Ù·VׯF{uTÝñÝ.A,áÑ®ûÇò¯Òrº÷·€•ï\tßý]}û/Ûí»Íü¶GO={v1²ÿ“{6|cŽF#nëóÔqG‹+÷ŠO¦ ®§·mñš«ö¾³‡z5x½…tïyÖ˧wwCÞýݽ||øÛeÝ¿1ËÆG bo>þ–ÜvÔw÷uØÝu´çUžïøÙƒž=fAìíîë¯=˜Û‹u¾b­~»Þu…sÚ<Ï+_(˜j2×M'Ô t­˜º€1°¼€ H³Mp¤„zÌ¢Ùí&›Š•¨­ox÷ðôëÑzþž8;ÒXۡͳ08µ·íÁ›ã£«­ŒZ×èAˆxC QÓé·ù¯­ö±¾Îú‘Ïæç¾/jáöÆxÅù½y ÔWnºö+¯gKF§i㎷Á®=‘=¿Úyé×7îíã·3¯g+ ð ç8ÿUµïÇ }“ù^.Çm¡§àßÁ<íWØÃ]_F{•¹ÈëŸ[?ù]Åôðm¬lµìŠŽÎËëÇMj‡_÷«_·d³œo6Ù~Êcœ¹Y>=¯Ú>³©¿Ë~Ÿf.'ǹìŸ.â&1XVëÛâC5nÿÚj'Üôðx¶ŽÁÞ‰ðvZ™ƒØ£'i}PÖ6îæ·ŠŽ&nwK^&äo¿—ç.Vtè°Ñ7àòÏ<\ø·ðô÷uãØöòþÃ3=¸‹>éb+ß³Ýk»qt²x«l^ÛÏbò±mƽ:mkQ^e;bºŽMð‹Ú|ö¶ÿ&¼Þú#Xí¸Û^p¬_†™;»¿iåÎxRl 8+Åë+³^–Šù5’¸üþmïr§‡àhú“ú¹Èðù\„(³‰í’‡±Üõ¦p‘5úécm 9(úQ÷ŸÜPaÿÈû«ú +ÀšQåAûä-uEÿ¿"}²$þ|in#0~‡ÑÛùòÊ—þRÑ ý%€+oO=E‡f˜–Û¤"?Oy‘{œ+à¢ÆÌ…†…×iŸàõDni[Vukb|ÔŸwÑ-GG5côÓp;Þù7 ‡#VûËwøÑ¡p^5¹9kN±U Ó*ýC¾>®¦ïlþÝ2Ò}«ÝÏ•a&±ßQ›:'‡ÿƆLOEs—®™ÕùR³¹’›³Þ¼ýÖòÊØƒ_Ìd¯ýšX7ök«åÜôJl‘ýSë^»N<ýV3-¾Ïwožý!÷Zíû.Nû³´Ï•ïóVd>†ô$£T¶íiý´}q;.G–rV¹{Þù ª_è-߸òšWˆ­Ûcs¥g‚ü¿6ÎÉÅ¥/‚Â|5™ü °ÃÕbàܹ&ëmƒ9è7;5ÓÑ÷Pè‘X~½ç·dt/Â-jÓkŸÓ;úðŽ#w¨w1¾þÿo»BëiÁD³ìnm0¹›DÏWu{j¥²ô’öÓci;ØÞôൾé^¯•÷þIJfß®=aŒ†à»÷7§ß$ÔÃOÂþS+á£bÝj7)p\8.®Æ‡]ªµ¶›CÀþ™_ÙS—éžô²|Lê?—É!sPò™½Xk¥×{xÙÌk¨eïUqÏç‘·ë@Ð6—‡Y³º€¶”çÏÚž|'*U¿ |ª/É1^ƒ£ó^ZàVµ|=ûÏ5{€Ë¹ë‡ZÞƒÒÏj¦5ƒ y±ðþ£ô™S%ðuq0uúu¾û¦Š ~‹¤÷ÿVi{”U§¬sº†½^TîëaðWl”Idõç·«Xû¤¹…®#º«×Ô't’V:óÚ%,û ‘âG¨Üv“ãàüñŸgOä:Q!)-jß\t{ü~saï/÷kæx»?ë‹_os¶§=ãó"ruH^õŽ´ómä7Þãz_Ç"o—:šõ+˜íG²ÙMj°9T®‹´¿ÊrÙ >:#@+ów^”öèxFšv~·!ÍÍÓ´ÐÎÛªU]zгnßüJùÜÊ+õXnŸftÔ‘V{üüçËÕÏ5jÃËŠi¯ØÄyþ++Œíïãã¼ÌýãlµðõL|ëf{L§Gå?xáçš¼<Ó“¸~>gÃA®A;pöì%†è€P súêÜé~óŠS²| ! &ƒßofJae „¶ü­ÞjáþdQÚD$À`ÄÁˆk³ëc70– »ót'­‹”|ð#¶½Má_‘3Ò Õ™$|þ”’úY 4Á3™gK$~ÿ¯:ê©s”E3@Ø<Î[<¡¶eÛi“¿o@¤QkrIŒ ôóÍ4Vò?o=B½A(1ð Ä—7$ˆFÇL”Öèyoèr@ûüLX¦CѹûÑ”JdsWʧ­v±Ó(e2¢­•n $€­É(^Eê_Ç:R?ú˜ýÙÚ*hâDN–¦Z"dK ÿFedz¼|’ÜÌB> Ä‚AiŠ»'¢]ŸÙ ˜–—ù‰°t9έ‰4Ê4ùM É㻤k›H{ê\e·ã|=Œoß+)P6…\Í<ï¡àøl´g¥ ÄËCà’ÑL, Ð gK'çBVy#—ò%éÌ”&ÎÚ¹”yDénr¸ NÉÎ2ð¥(IŒ[÷»)$1‡g Ù$”ë©”½Î v†S>‘ÈîàåýîÚ`àgR€{—Œô}‡n-¸Kþq8»ò*C‹öm2EVêó.FÇ# ÷ff…ss2*´i$ˆÍ@Xd¬r ´’7¸©¤Ï¨Cæ¬HCb¼Æ)ɶ„³–hDLb §óê§DÃLXˆ€z ¤‚«6$»Ì‰ “÷Ú ™)ÿÛ àcùÈog ˜‡çý1y¹N|”è’LØvq$µÔ2@3‰úprÇKyt±ÏF‡ûþ«+mòc2Š:ð›l$M¶Žôô£2=…šÑf¯ks/˜Œf7Öõk3wu9Îô{ÒÓÝ~ß]º¶˜da’J-ŠJe1ÕÊ/Ì„Gi7Xôn‚GOû|pïNæY‘!£¼€.’€µªÂÀýúbAB/®@4yF Ô± Ù‡ßë,œ—ÚÑY*”É;¶¢@HÔ8ûÐ$¯°(8؇bgt¤•›å›éÂN‰ˆ@Æ–Çîþ°z’tͧsÓÌŠa‹O „TrZW}ó¨ =Z8™Ž7Êãäbè$×W‚Ó2Ãâ:Ùƒ½îg$*§ãš`m$Íl ’^3çÉ6—Û‘££²ÞÃ#@'GÛKGŽ)&††ëÊ“ÅAi¥qÈII+Üw¯òÈN41vé^¸©ì/é +œ«NIŒ¾ Ã\…ŠÿÐÙf÷û”§trG'Ôu§{ÇÖRôû&óö¶ô|wó–ò.µ ÂvNü_¥n™Ç`BW©à1½~¾`÷§ßîÊô…Wü2\í*œgˆáK){ƒÔŒïCÉÎ‰Ò ¯>z$‘cš*¿>cðœPÒÖï„/1¨¦‡lfbA¨¬@¦2:)òõWZ€çŒd%áÁi û"; „b>l·•b‘EZŸ‚ëü'ÕYáù÷n›¦ÒT#ó­Õ "Ñò`0i6J*Ð-2?À·~µÚ$«†WÑr ™‹p# C [ÿW4Ânp†©ŸñªõôÈ .£—žIQ*mòVˆCLàÙÕ´z¾­ÿ…¡±j€ ÈŠz’10›Š”€ç" Ì­ÙL"š‰»ÛŠŽÊ,ÿ:nŽS?’ŒJŒNJZ ‘îf@þx˜kã?â…=#ê´õŒÐt؈±øèÖÿæÚTJ¼ $š•›ß®Z .Òyßm)ޝÁcyÚi/ÈðeͲ(ØÍŒ±E]«6³‡=¸í-—ÌlgnýÆSšÂagäç‘ÛÚ«òøŠôö›eÌD×/fƒ¬¹mþàʰ ¿éD`4ïƒ{•×:Ãy bXH¨X:¹-pû¹"Ñ2€K/—¹M0=6Ì’^´Ö÷ÿ¦aÞñ’GÔzL„°ñ3]~rë8ËdN+÷ÑèÙ0f0t­ûöiôó#¤ñtž‹}„éR¾ˆ’—°ËÔ‚–ï””’;(W¶¤.s©»ÖgºýÔEØMʹ$44uÚ]ïX¬O®“pÇ[áÛ;´úª#ñ«BEV Òéw’$“Á@Ù³$µüî^o ÎÕu>à¶3¢“gBIà-Ñ!>?íÂÌ44$š¬Ú¶ãeÓÒÒ’­ÄšO²÷Q$^kÞ?Í0Qi§åÂZiB\k1긟§Uê çè‹}¤P„Ó4.5¨M ˆ0@-Hš³~#.ø¦§'fj9oºDüÌôQÀ ÂŽý­†A\& ˰Â2LÕ(J¿ÛjgÇNÁ>å‰äåäišT#5ÂR ^Vb@V €ž 8näªu5¤§ p˜y­Ð¹ù->t™}^]vtcÉàC5 l”ÿLyŽ@3ùí=çmÂYsKåq=Ç%çÕV^ª ä"Ìä˜Àë8¹’&[<Œ)±8H•]„òPŸ€ÔŽs; ‘€D νŒ”Yn[òu¯ùH³SB-l% ¨ØËÔ—¹¾"X¶PrEÞ—Ef˜|D” }ß2`õgÕù’\«( ŸI‡õ&‘Õ3ºbíf]ÊŸ{a"\\ûÄï Áí³KlQ¡;½(ƒÅÝ•àâ“Ì}ÀX<%€ô½_›TçžÖcHáòH!‚ ¡B±zB€6 Zðl¦AaRÎn¦åë18ÚO‚ïüð'S ƒít“L‡ÁÀo¾G¡$µ¦:‰$0Áì¾\ÇAB‡o‰/†lêtdñ.w®¦æÔïq•ZŒguÂÍ$Æ—üRBƒ¼‚ã®ê%ÎÚïRêiKÃ$¹œÜ M?V€hùœ\!n¥Štîaêsµé9Ïþ^Îî`ýé 9ü¡s«Ðǹ —t•ÿ§˜RM?w ‰#Üÿ_BûIOí©~‰ü "zý)"nöñ…ˆ˜|ãOC…eFýô£¡ììÝí4íŠø@ £,·ÔsàKK663¬€ìd¡m !{ð ÙíkÉ+&ó;yÂNŠNÑ*¬óL†×ßœ”Ø› Ž÷—öØ)Âí“Úéq¾¥MM"u˜îZ9++‹—·’£&|ßйM,ü3G#’f*ËQ>ï° ¤ÐþZ¯»|¼Oùtö~ŸÅ•~åïìhª.†Ù ©=vBò÷°dõ“—©‘a$×wŽã¿û,Êì^éT‘ÄÁò’‚AÕd»y%¢ÝÀ¨0{þ5Õ)vtãÏø`[G$Ú[ôSé& ¤Êñy×x™L4?Y%§Æ‰æNÏK"‡…ÁH„ÓZ.âç4ÈãÎßUÃJÓ"_»ºi²Ô’&è­w"ª«Õ¥2”»)¦Ð~7σD+¼@Â~¼²qéµú¼²9˜éf#¾4w•ç¯Éõÿ³vùލª±íÖîÖu±·Â¸§1ó®­<_?Æ &>á|Ì8¥ç±öß`ªµ4—¢?íÿè”ÇÐLõ¾¬O¢½Zf}éÌæ}—žgù~}£´(øj r ü°°ÐÜZÌÛn|±D@EU`woöO´ížssÓMw¦o°’”ç[L„•ßñCÝ&úO1_³œ‹©õç¾—:g£j®Í냊E+ŽgCXÇüý­õ¼9ÿ”çmŽWÙ•è¸xï.ZÆA>äÆIup@Ž»Hi6È€c [Yfi„ñ¤¿YîhE…‹¢”-ÄB +»D—¸2úÝ¥$êÐ4Ù\ˆÒ~è&KË´W>þº’‚uÈÍ3þÍ 08€L†“ôœ-Œ@eà„òq; Ô´_DÛ ”úL†“YX„›Fj ˆIy2„Ûÿ0A‚j3ñS„®ôZ\N¢òªÔ¥¶p²€lº-š»üá5h~4€ñ€ÜÀ¦n÷4›l1­Ú …§–Ñ© †;M"K)ËAÅÍʹ!ŒW, ú=YÔàØpÌ câ5?çÐLþ—¿’¢Á°çØÊÔx¨¾LôLHMå`„Ú`ÆÎî;•u"d1Œaÿ˜ˆ;aAެÅËe@ÁŒa­ZµSì.b½ÍäÿŒ;H+]ln–> ü ®]’¤o7˼¤îÉB»i?9¾Õ)oŠ(ûYbCeÜD‘¬Šm¼Â“Ú.;× ](Züô Ÿh&kºûÓLªñ·4C:6”c z©˜.µ˜TÆÄŠ%^#2ö.žL°4eš;Îf:c‚»ṡmƒ¼r DCoÇ!>¢e$aÚŠxP˜ÚÕtGy©xæq¶þ7Æ´ù…8\*HÝw‰0Ñ0†¿ËæÚ“Ýý¾Q1äfŒõ!ªêèI=sPÂËóñL41Œî­0Yæ½È„Úh¾í¡"CGK ¦Ѽ´qÙ[æ ¨Ý`+=ìÄ´ºyŒÖÉ^>™‰!Œ8¸°Ü2öθ[%àÎ.—À…àºRËÔÈ–V²×{TñèùÔÖ˜ÐÆÝ-{[Œà»Rit~ÄX9ëãr$ëµÜôtžÐjЬˆ¶ß<Ÿ×UöGÃîx}=¦œó0±:¼¼)vÉ_$rÒ:ÌDwžöôÓAzp5Øל6¿ŽR3›>¼‘þ;[·áuàrÿ¶ŽÙR/†¢@ÓAŽP4Á™h>y@ÚUlyt‘§ ‰0޾¡!1Œ¯ÇÃ/4 3÷µÊGVÅ t… oíý½Ó“›ùÌhßÇJƒbm°ì.p»ù hÙRI{zä{Tüd”Íw@ëpZj=„J×@‡q!Bw¦pœôÛôÄ æ66»ÍaÝzwCþÐ;f…üI¿‹éD:HZà %Hö‰ T‹t¦Uõ8éÝrWªù´FQ­¹Ãö)SojªÎÆÓoC ˜”+oõZÝL±6ºè€Î´àƒ¡KÙ›ˆ© MùFfPÆÓ¸j4r2±ÉÏ÷p„k˜Ò^Dn<Þ)§²7z¥*^\Æ cc¾–9-ÄÁ‘—Å(W!b9yH뚌÷-¼@w׉è$t­×€Ã4É.é"Óâ ™¶†5Ëeå¾z;[Ûw݈§E+Í´CmxJÖùÝÔ¥ îéí4“iíXIª˜G®‚F®KÀ”>Â!ËÐȵ€Ã¾s¦ `KjsQ<½¨!6ˆ! 0³&ˆih!÷ ;|Ì+×Z‰óp”4‡Ðâp›³_ùðÞ‹Íâ%–ÂÐmº8ƒ/ëC~4‰ •<nQ*1ë¦W®ºr¡,}cÖm÷AÅöÄ-tµ§È%p}°÷rDw.5ÄDBðϲ<‹.`¿<Ãð8#1˜í•FÚÔu»ŸðvÛJ.Œ£Å%O{ÎϼÒÀØïûG’ïzì=1Ù¦* &·ÅD«Ö£Ñ‡í\H!·p(y&Šp<Ü[¤þ¦õr NÚyø†6¬mCæ¢ ½Ž/L&k~‚ø¡ wjAïKç‘ûJj ; ÍÁ|rLùª3ýgO@Oƒ… VÁ5÷סaap|'É2†.ÒŒæîþ9aÚçZ(°ªTÂZi Mزr’ñÓå ››… O‡ô0ŸÞ•ÿïÕí÷Õø‘S˜dE~R\ýžüɯð@ÆÁt6Úñ– Wå _CPk ,ŽaîÚ ¼œéÛ.ÆÑ=s¤©—Q'KÖû·ìêÔE‹¤6žþ @$~) æ1Œâp—¼A3]kh6Í!´Æ4•™‰¶¨/Ü‚\䎯üîÎã¯×¢ApwTêοë«Ó“ÛOêß³º/0¹?þÃÝîó."߇ºó¹s‹¿`¬§ÇÞ÷^Wc7~oDë/·_’ùBäî¾÷u§Z#¬:Éôß™WÇ|v.ú…åyïkr#’,ü}]œ¸")ð™WÓéäŸvØïÎüÞùºÎésŽ?Ag.ï­¾-Ç"¼îãy’ò»/2ä?3ä¿Cøy]ô¢ÑËlE~;*G'm^^ëÖ;mvÛÜ&`Qô(Qt´©Z+ð=$† øÇEç‰Öا>Þòÿ-·ê~½WÇhžLø¬£ç¿|úÖZc¾ÚH¹†Ðe¢-Xè--%: ¤fˆ:þîKIówÓâ|ÚÛ“²ó_â6”¬¾{?ø¾zÍóhò[~w·žväͼ¿ÊíëÿÛ}vÜ­3ÓëÞÓԑЛ#þÅ£þ¸“ ‚Kj`" !÷Ƚq„ˆÛã8¢R)û°<®œ=Î7Ù”°Ù:Cîÿ?ÛóÏýÀR~ ²pÉ¿ØìsY&´RðTôÕºJI­e¬gMÜñ³Lk#›…Gx…ˆºÁÅP€¼õ’‘¬h†tšÉHiçß¿"ô0ØýwAbšíÍÿ­DÞvLԺ׉‰Þ¢¶’¬š>×%¨´õ” &­ñ‡±ÓÁ&›_'u§s‹Ìì{}SN~W”f¬œV"K{•C†É.èîâ‡9Bw.N 6Š?Ž:öIÖcš‘öµlaŠž<¨!1›ªX<^ªÕ€Á~BÜAWo^ã1S €‚ÑV èÁ‡_4 ñ¹/ÌØO¡Úrß5-£%™÷ [¤/Eͦ£.#ëƒJÖÍŠwvˆ],vò7Éhëêë;?;Úä¦)·™¯¢b¥ç³Ø ¦]ŒC^µžRiƒ|rZ?"]͟Žޥ¡¡™aEå£õ•ãsãÈ'jÊëΨÑ3äW Ÿ¬„ËÌöñ_3Á(; ³,¯^ÎBxࣽ‘ÆÞ¦$³8Ž–c÷wç²­Òtih ó(ð°»w'kˆ*­G^Ð…3li½o³Ø–>FiŠ´óϹZ8²úÄÕÀŠ  7ŠQ7\\\ïà†9ÂpYØIbÌb¿ì§·þòÅSnéåË8üÇS‰áîýÆŸé›*pubûlƒÕjË.9Éõ4Ò%îÁËIACU K÷ü'_¬-,ýÄõ3Ðq>·È‰1†—Ã…f»Î[ìAykIåEc†ù–7ÖÅàÊ­E4»¿]$¦²¸¬°‡ýóvnfÎÛ>™_<Œs¼ÇÒÑ|Œ(ç1W‘)™¹ÿíNÙãç|Nͪwæ~÷ççýŸœÿ¦«†ÓÉö‹åŽx3°Uþ8æÞBÑV*ïÍMó„›KÕOl|½Ò„½‡›‹ã“²Æ¸MnnP”ÿ:õ ü±ó߬áìã{Ü ~ÞÖö“í±R¬ Ê»(­DuqÁ2Íñ7È“àèÊ/0 Gxzâo© 1ÿq?®žŸfR>“Ø$øLÚPÊ%T1ôUô›~Á¹Åmåy‰QscNZY¹‘\äø_·f£A½Í/[†ÜÏA¶×VÂrÈf!ÿ=æK¦}å5éžv:<*b>K ¥È>í2”Ñ8›1ÉÍh•õÈh¦p1¿{kêÝÙ2þ«¿ëwÊX¹ŒÕž¨S ï?yþ‚£‡š‹w(ëåµf¾hÏ0¸éˆ =$"zÞ”-1T,Ê•—âéP¿·"Ž$ yBÌ’©kÂUÐeBÔÄ¡€’8–ï²£æ˜+­óSS¶øW;bÈó4ßHvÄ¡?ƒÑ–dC*`!¦ç‚~&âY„!ŽãÉþ£ü¾s)œ7«ÇP/wˆP”c ÌÁ 1î7.çLkÈfˆ½½×ñ)R·¸õ3Wøë¬Ÿ‚ŸÝN$bR~7ž¼ñøøOÖØ{ÒvýÓÙWòúÄAqR,ÂDNDkXÌÿ¦”àVq3™lÄZ¿½æwóé_E^Lµœ3íÊùŸB?¬_„)¶!8Ò¾þ8M–>æ•4ÂQ…ˆX.‘Àõ “TSƒR§+ˆ"³å NïæÑÎ÷‡Ä¾Rl–Zß ÓØºÑšKFÓ¤ý¼€L.`@™Ê:¯\Šf¾=ø"ö‚K.T…LW¸IFŠF3"2ÚCûþ ­²ïÏq?™óïIã~Ÿ©±ÿ œ™3Å_ï’jÎy¢M «×?+L^ïÐhFü>¡ñ˜¼ú+ì¾ÑsP”ùÆøy]_Â[ë@¶–qÊAȽô¹ß#BiÔ´3d5Ò'òK©!í¤•¼ï|¸‡;†'lÞáõö)×Çä–gà"? Ó·¸~ëÞÃõ~ûéÐùùR‘0@ýšŠ‡HEf‘ëb£ñêž)º²ÑCsFöÄÞñiTæqqkIö'/YXÓÉ_l£o—[Úv—¬ët÷­ídv«T*"³#:àünqxú嬞ÈÆËáMè¼bƒc¬µ•UH»ê½‡]ŽE¼­Eå›ÀN=î[Ò@]wô1ýŒØ#¼ß{FfßwXùð\q]›Dêf5ùÃP™w¡ŽgÐ_œÙÛú>Ä|ÐF’>ñì×î„ã–¤m·ŒQõÊ’›gú±ôÀ÷s |ÐUôï.þ°þ4ëa&?œ+¡1ô4‘ Oð}Ê”Áú«áYöØéïäüf¿?—öÓ ¢ÝHœÐm4@%Ð gw­j& m$£ý=H`ùöDäãl1œÕ³Î Ù2=ý·¶%12UÉžòâá*‘`äÙ£=VÛsðwú®Ü¸ö ÇM•Ä“MWŽün·Z;Ǧ¸/˜(ãðŸÐia=Ÿ‡/‚G¢ #ogÐ[É|ލµÑi>p+ج]¶ôèÞ纖s¨{) ÞÒÀSé ø¦}9Ⱥj¹,äº^§ìííëIU} ý_ß>’ ¿寯M’ÃûW¨¼ÌÖVè7}/oc÷q¯Ôox™í¿ÏDÿ4É˦Öß&•¼°“E ‚ „s(w¥Ð°ü"66ÞÄÁгå(ÓCm§ƒ‹,£Þ|»Rû¶=Ì—Ð[îr3/Kû=\Ó¹?Δ²ÜÎÚVšÊŽ"$c ÿÚŽâr`lõ¨1²ÝÑ)h®»:áô/é’8˜PÛ*‘ fªL}Á4Xf"¸Ècißiÿ×_¢í,GêŒÝB¶ÚüŠi•U1±³-óèå3 9ÆÂ]•îœcÀ†Á¦ß®Ž¢G7l…о3mI kp†ÅÝå!³ûÌo{ÒÛz Š5x†ÓyZÌ’öÑ¢áÔ4gå òœf ÂD6ñç’0;ˆÔ9ÛjìãtV$i÷w|­« æúR&¡œHµ”ϱ=I·w5H·œ'>+ôdiÐúWˆ¢A )ˆ X9…ÑÍËÛ·ÂŹØc"½#ê•3’oää2hÉÜ"Mâ¢/ÜIߟð×…ºZ±Kôÿû> zÿnifÌÌ`ÙØ¹Ÿ7þ °>݇.2‡éçÈ–yÃoÇ/H—©¶‚sç$·ìÍÞ`ÿG{4•Œ}OY »ÀʾŽGœî:”v¨ôèQ×v2“Æ;t—©«³Àñ0×5ì3øõÑ FÞbƒ;¸€ÉÿÈ ÔÝV’i5ŲȵæiáGÅ=0rÎ Å-Ü›„©ÉJÈåéurÚM ´xvn9š =Ö½¤[–sö¡8²±â¡oÝìdì­áÿûÀÄРÞB!SïðI¼¦Æ6G7wÏE²mŽ&Õž²;læµÉŸu¹R)A+Eˆ‘T»Ì•ë,ü1õ²¿÷ãå ƒç5ˆ Hû!öGd©×€_ñÛiM7{8è\ø-³q¶ÿx8·A|^ŸLòzó][®ñðâ.Á!wSW÷®QôI9|ÓøM½©ñ\¿/—›¥•dÔwwö›s§”ï¤ç6–³ž|Éhæ[g5ûR=3o7ˆOÉz‚f—ÊÀ§éô•µÔ<»Å¶Ÿ£žmW¢fwRîÍ|l†²ÐmÜžm œpùUð¥sÇþå J–3ËÁ–ÌÂͺ p,†›VøŽ)¨ú`†êßñ̰}×E"‹3¼öX–¸æ+(¾w»ï%æ´UkÏg(Ï@êzYDÝßíññ=¶#ôä°'±Éã=îäãUü:ÉDC;Ý¥—xþŸ]<Ê´ÔjÈ¥”5úD<ÓØµ&×X ¹k<™ù7A¶Y`ôd.³«‹,ð¹Æ~ƒ!µÛõr½›)É[oøâoËÇ—õFtiý9I6,ÛÙšõ D™wˆgÂt ÈûŒÞä— -Êú³óš—À0˜ÜÔ–t„-s©X«ì ˜/§Ù¯¯Ï^¼öÿNB5À‹‡Ø·m²à4&;€E*ýZ•$(Úˆjen—«G>­‹0únÿðøÔÝÛ*ZmÖ¶r“Y™03:ÑBÙúfh'ì•YäŠ6©#HBîš9–I÷D¬  @‘0’ Iˆ‹æÂØ…ýºh_^óÂõ¿Æûá}ˆ_VñÂóP¾ .~o éB÷¾îU óázØ_Ë ”…îá~\.FU ¢…éatp¼„.v% õ!{(^b9 ¨…àá}8^þË…ð¡}ô.fK ñ!zh\Ä.zÁ…ËBôðºØ^&Î…ù2ÂH¸\Q}ÊzôÓ«à(Æ!÷)ÁHmuÿW9?àá_ ‡tÇO,óPεÃ}Ñîõû‹qØüfƒKQÜ5²¨×›Ìļdnå!ûlŽÇÀízÛ÷™˜+6Jjf6Ø[íü´•Ž}ªüOº„÷h\Œ”m?ÕLØŠe£rÎÙ7ŸÉØ¥Í3®g2–ÖÇFÝç3ý.ÞŠœª»¡¾òݵšv¯ïS-œ€¸ÿ÷뉼EcWk]fJÀ´¹‚Yì¢~||¯BVr·Bw…t⽆ŸM§ÔõïkèÙw–œÏR#WÇëk™¬H»Ë£^áÞDå™ òðèÊ0@ •®Û2 \À•<çOŽÐ`ªs’#¬} Y¶vXÚcÖüG Õv:U*¥zŸDü?ÆÌ Eˆåù½íg— C\ $ cÿq†:.­Ob¿Ò^kÔ-\Í~‘M¨ƒ<7Ùà/nšP‡Írž(¶V/ÕÏýTÖ{Ü+•L7ÍEjÖÕP\ 8†Š7µ°$|³EÙ®.¿…—zî.4¯ÂâàÂ0¡Ëjd®–—Ùù}&ÔŸ†ï«WÃ1‹ë§Ãü€×46 Ñá2ÒÊû_çØŽ„÷È;—ÂÍï£73z€ŸÚ®Ä“|WnG}šƒwõ=ÏR˜Ùѵnæ]-ì Õj}#ûŠIr.oÉšÄ8||v,æ9™ŠYn-¹Æìd#®šªËÁrç!NÇÇBáøÈÍD¹.:âHÌÄ}”Ós /Y­OßÈ.…«Œ—¨‰ŽÃ½´O3eò tqÖ ·@0Õxº )^J8)/¬õÔæú#–ähõø^Cñ´õõNq‡,ùÖVZÜ× ìÁxú µÿFøÂ¨ùPbn²’É@Uæèà7o˼pãÒ‚9Oãú;UP̨q*¦ b\,•¡É5-Ù=$õö›tµ È$cõÿ®ðàËa\A‹ê±Y¯¥/ _„r,7võ•œdƹ¯y¾ÖÚÿ‹èö96ˆ­¶@Õ2ý[?šJý¨F½©v™÷{Ò½v6WˆÄUDË?€Ù÷ÿî,-$¾êñ@f1,ë$ç´Ã› ÀwGuÄJEÆ#ºwÕ5¾&ùòŒ®^dˆ%‘¯mǪ Ÿw<¯¨\vB¸¾¬ÃŸfo?™^êþR3—}—¿_^uŒïTûµ]Àø«Øà$þy~˜k-B¦­ýsEàÈø#·Ò«]ª"î¾ÀõÜç®BNâv~i¤Q<ª«à¯¹²­Ùw? •r>oÎ_w¥Þäü~ñ¸ý²Ý(µj¦PÀÄD­Ù\ÒÀ€HB%ä£?ëØ¦¦ÛM‡­(× ‹D|Öý‚ŽŽŒ63ɧ 0¯—³›ivÈ–š»³›:Ìôm±”ByÍØKØdɶ›ËÞw2S0lã".ÄCm— ðà“W|´û=)ôŽ3±Þwq\ë ÷%³}9ÐÖºO©U£e”·Zª3힦Û($ß9ðÑ‘0Û|+\| mRù7Ö͸ o™ Oºˆcwð²Ë·³ÿœ5chcÊ!NÏu–Cübˆ m¿w¦‚èÿ–vý _ÕóÓJgß_âÚ¼ì`κ!³;7¥?z !üÙ­‘fˆN¯ˆÊ§ëb\„®§&t>*K•r¨k9®(X0·V=ùòqÃŲFEÝËjTpÁÕ0ù_Jmý…;µ1}ñÿsêuº ‘•æ¡õ-EâË%?+¥ä*'ßÝÙÓ Vì<¦g}9W¿ZŠÌʃ;øôÜ›Y(†ù=ÿ)˜šÅ´ô{×WaMÍDÍnI¼!?¾RB1B²Ùýž¹ Ï4eÊq²K0BÄ­|áTd•þ Š€ Ádsÿ6«R›üû5aìüÉ.CÉûƒ¬b`‰­<·*£nªÈ“þ ì‹!%©fLýZÑ‹è̺µ¸Î\³Óà"Ê“Z¬<2×Q±œ Ô¥7ø‚:L"ê¥ËNCyÖG^Î ¬þS—ÄÌGÎfå\˜ýÍÞG'ÃeÊ2aÉ_ëc.šp l•Ï Pç”8¤[ÜbÎPä€k¦­5mp½ºñ;žð{><ÿK«zÞ÷ÇúûéÓŠšÌ’䞣Ë ‚ ¼à¼s?hm 'òÊdÌ;†Ÿ÷™ÝâIðÏ}IÑÐèé¼–¥«{+>¼)ƒÈ£çŠ2fñË®l0Æ «,<£9¥¸™„ì_1Àé„#Â¥eOJQ7Èî»n/ü¡vûë§Ð[*I mÓSðÒéYu¼<,:»Ó*÷ç<¿(á%—Sþïk=wì?¬¤ÄŸõ£¹;ÎJÁD,®f-ó¬(}ŽŽcé d@õ¿äƒúüýßeKJŽoo1²Ëe£TÆÄ9dšª0X—„‰¿”Ô?*t¨fv½@¢«x‹û´™²nê¶Q:Ý ¢›ï’ðóT ¹8ú)f‘¥ps©Wëþ·?=×q)4û$?,ÀÌTM}‚ݦ=”µÿ†¢ÿÚÞé{„"íHØÆ`öüý{?9A66=hô7Ž>sÀfo ,VÃ?öïóJ;©üF£‘ÐÖjØFAýêWÅþfœ²5Ì9>/²öd^úŸ.E­ýÒÝY¸©jƒ?ÍÌR¶íG/«e<º?‹ÆËó¦ž Ö ®ùL•ÞEœ‹m“À¹Ø§Ž«Ê¿MŸtï¬ Äx®fÙð½þDyñ9©èËa¤”ÐÜ´¹ÃÒˆ+³.§4ï#(”92J˜¢ ¡GðDÃ÷P>ýØý?»È›D¾o +€h¢‚À«ÿqè±Ñf0: à\Ÿ2»8 óo6BŸåJ}}}EVZ¢Ö5§<,¼tPú{ísÜùh†^i–§*l>CUøÜÒ' ŽTÏ]$Ѫً‰2d“…3–8D !‡˜3ä=4™6¤@k¢<Þ÷a›:ÇU‰.wÂâüf›4 Å¸8Š®x(B ò  ÍR+fK{Õ¿@òûÊ9Š’`° œrùÅ…4bœÚ%'¨é ΚEí‡ISÆWæ+÷‚|TÊð— ëJ¨Ûè±1W´ë~I•ÕØÈ ±!ZOJˆ¡  v±ïà­‚]ØÇù$® Òj „Âäzܱ©‘³ä†Ã!½í 2eMF\#%aÃÖ½þ3¡6g¾© ¯}MC®I1#7¦wü€oÿH³Á×Eúuééõ¤*¸¢»Å'¾1I,eCˆcàuÿ(Àâ–[A 7¹ï!M0üGØî²³IuHþ­owî ;•¬¯ÑÔ;ûØwü#™¸í¸­¾…sÉŸh0™£»à(™œ=e!oÊÛq}Ñ) ­Ï`„ ‹'œ'×d#¯‰Õ¦iç;sô2'Ò“®"§G¿]y^,ðWΉDÔ2éQ{vadá]Ak¿>rø™š?XÙZ-9ëExÐJUÜb 1õÏjtÔúfÖž^ßí+<ÙVtºÛ9gˆÇÍÏFßMÍ´ûi 8f7¾)¹håg‘<ôg#íð9;ñoìv-P ÖÔG~°=zG¹OYÞÖ‘ZvÖÑêIhÈבÖà“^øÛe¹CœæŸb óÕâÿü`È"õGPJMÝ"¦¾x³Û\ОÀµìpN{BVºŸŽ8š•«a»i¯t†Èb¡QŽ£ý$u·Î6O¸ŠÀ ˆÝ”}M=6‰í!œù3&7v!žßÄø}G‡—ÈP GIôÁj½Xí²*áé÷,׎,­¿î½yUf¡ªY“ÿÁÕQÜÄïð¥·pÛ µ„Šïl c >ŸfÙ­ì㙨©Á[U(Ê]””×lk¯s¿Úù¾½#£ÖbÎØ3Œ›Þr °ry²U½(­XšÃi˜Ct°j´Òm²ô5Æî˜®ø×RéÈxÅÓE˜Ì5¡{8§ˆï“ØÕ`là˜èš²YYÃ4dlRФŽ$ÏsÞ•ö“»1“¸£CîƳ\—Ý=aÐ¥£’´•Ú€3]v®Y½IM ¿#5ÏF‘}…-¸»9Žh€…MÁÞFƒ/À{¹ îa>][lÑöÀI¥N³!aKgþAkõ­Vû¿F‚¯B°‘1cJ«Î7os²JL*•›(ïÞڃϋ[÷峯Ql(3Žv¬Š=ï!µy¹‡\õôPß…Æ…C 4÷iüÐíPnsŒŸ¡Ñ\°Ú¢VI \ÞÛ™ƒ>Ëb·¤ìó6`á›*SþYƒ‘8(4åtÁÑ}ª^YœTÈrvÂæ‘ߟ™[/`¯›ÚŸì|4ù_Ćiújþ ­/ó£þöžÜ?²Y`=p¯öw¿Ûü{¿—ÆÌ6ý_d (‚ó°2òŽ8>Ü4ýÙiì>ò0Ðlÿ*{Gþ–Â~ÂðýÓõQúý2ºê]¯¢|e'ž ?ŸâœÕlznò¬©MhK>ÒsLÚÆV:oàÿ ·4Ï×ÑÁ­õþ‚4œ¿µ’\P7 &œjq*XhÈ>½ªkSÇ(ÛÂ*Juꌾ$¥fgB\êzÈKúFLâ‡Ñ ‚™½ÙéœQ¼4JuE‘9#ÌŒA¬9¿Jp¿QÊ݇dc†Lý0µ©'š9ß9/ýÚ:`©—žÍ¸ãÒø„– o­ßúøcòu"éªÖ—•am‹ö_ûPXîMë­¤²2¬l…,“cG“RÛ¹OëSÁõ™ó'Ž/3*¶CLç‰ozv-l¬y7û¿jqc”¢³²ýÃ<'æ`£q¾ISô°%;â®=(êMls»StÆ>òÎñöB®Ý4èuÊ¡ˆ”4Õ4ˆèB½z2éi“´"ˆ‹Ç# /RŒwA©y.ÿê¹â«Ž½e.‡º’rÝ̧kê`Üç/a›êç7?Ú¿õ7qO뻩¯^S{"¢ŸVMˆmkà^’Š –ݪu?$´®~£Ug:x™÷â+ö¦&,?Ý?Æ¥›Ý7›\ôl³›¦ë¦ ; Q½w˃ý/Ñ3/€f¯èÁIȪü“ŸQh%›¸/ÄÅÜ©w>Âñ+¢IÅžž,ñ3äÎê^‘å”ÁG!©gÒÊÃuK !“ÛÌvS,è—"e–®î±ã*C4Äûš¯£üéÑT´Û“=c¦AS°×îé^¥v9[NÚ7äzæ4?kz"ÀÎ[îª_{rX™u$j ÁpN:÷ªY%ÇîûûEt, «ÿOŸ”çÉùÙ‰ä¨NËmï4ÚÅò. DjÞÍ’ÚgXÕuÇs&I¢ZÂ…<Ã2ÑQU—þù$a°’UDÉ¡+ß{¤Õ™bWà ri<ƒ·B÷êŽ0U”Ó>)£.RÒÿGôáÎ@¿!9¨l²êk‹þª%/­&' ØÉ‘Od¥dË›Z[e¸ OyªõE\˜ÊAîÓ2®§1Éž¼|¦¯fÊí¼¢Á.a¬ NWKÉcÈ*|Jèàn““ÄU”üºWfw;ñéâU?åµ› –8Š“åÀj癵´aD ŠQ!xÆepÞBÿ’ê–mé„äÂmqî³Þp”„Š\»á@Çb²‚ {†ü5ö>lÿlÔ˜¨/M H”ì,H”Ñ.6FsF˜YODõó‚ *½ä-ƒ1ðyn ø¾iŇdWzׂàès³Û7Ãï¼Õ3˜aŸç`óŽÊ81×ë“ÓW(æyžG;çµÙ½ï€N…%X´ÞQ­ ß*{3Ƈ”*y^wuâù¾Z]º·¡¬'xŽNF¬«ÒZE$ÞÕ£kHËeMc`·5C±‚£Ÿo”€miN(…^¬ü•Ž<Þ#Ÿ©ÇÛ¦«cgÈîö•—Ã{ºxNeEr%‡1JSä§š„þ¿Fßý~âA¶ ¨MÝË8B¯dIŒLL¦ìU7´ßè;cµáÜáÆùãòïî¬7¹¼®u¢×Ž­;WÕó¼Ú¸£ºÄEkµØs·‡±ÎrªÛ#£›cúö¬©×]bæë«•lkŽM¬5¬Ûø ØÅê#ë´Äm³µ¯}óûºëÙ#g~ºämj¼eñÅÉY|ò¶8×ekoÓyÖ[ÄtN;ß‹·^ý»ÏØW¸ù{ûst7][}ö‰=ç={µ§×ÅÄß{øPO£±SŒPÚÞw•Û^þÚÈåê/Çm¢|ºã·Æ¾Nfûû®?aŒqÓ¬VÛüÜTUî½ÊÙˆ —>–:5ºï]üÏOæßù;TÉž8¿‡´T`õ¿ Sç3‚¼ÌÎúvõà_lëÏòµÞçäØÍò¾/ØSÂàÑk àb>¢Þcü9]Øêõá:Èó{EÐ9ÜíøuQÜýUtûâë Ñuv¯¿ïÍðõ.Ö[ZÉ^’š°±<[ÒãÎgoßÿŸ6;ë÷SDOøüþèþS?™k‡õŠÞ{£C)qçõ(ý¢U+ dÎÔ¨lµS·K¢tó,üÓաщÜ+©^ÿK7ø%ßüpÿÃk/ßóĶ+Aâ1@jo¾( ‹=ƒßÌ”õkó»Sj³ZÚ¶õ¡ÁÇCG{Ô‹H¹:›-cþŸu¶óxl${d¹B̆ÏÌÖÌÊæ‡ußIy™½+yzÄW§hŸ©3{èÚþ~(ËøÉSøûF­UmFË|Á8a¡zøpßp¿ |'E9è~ŒlFÃ+œ³B”w «m¿U׺«ßÙ÷~ þã´oöºúÝI.Ïí±fÆ+Èr³A°mLä2•Ÿò©kÞúßÔÓæ–»o¯Ã™«H{âÿtŸ³ÜF´#Ȉë$?•M ×-)á^ûË_íû·*p¯àž4;èhŒ¾¢Ÿšëu]ÄìW4p7ÝmÏM+ëß‘9äúTl>;_ž¬º®=ò…ŸÔ¿7;ëóÂyáæwU9Ü/›ö‡«‚ìTo­úÞã²s³W|Ÿ¹ëRÀ9wúË×ùáÿÞÙgÕýŽ­ý¡½¿èo$pv“?xˆïì²—«/Òï¡D\ßUj7tö6¤Û!ÎGûX邯w“öÊX8˦€p騶Šþ9¾âRQX¸î}{ø u^½j#§“fï-›¸÷Û®)` [-òòBC½éd}ü?¦VF%;aÔÒû»2þü¢ë[»B¦Úi»^CÄgÆñsýÍ!À…W'è0ûÕ¦÷Ã÷Y=• U)»‘̃§¬H.s¶¿<Ï=°Ú´¶0lHì©y~ƒCIL°‘m¿ýO¬ÿ< ´)oæ—ðÍ<rÂÌ›|N1cèß•ÜäY:ì&¯?ðŽÒ,ÿ¶žØ”ÓaýüzÛçŽw¡-è}¾©“iÞ Ðà&kšd3£”){ 8ÿõ)7‹BË‹3Õ‡1Èå vÊ`œ€d!ÚË,Ø>p|šã&ÀP‰‚NŸÇÚ°a»Î¾yCØôex •ç}òrÔf1üäyé¢ôÌ¡äì!Ǭ|aÊw_Ÿ´^{í7Ù“I?ž²aO] ÛPj¤žÜ~¸À !÷à8…ñDïQÂÔ[^A@_»Íä6dÂÏæhø3Có¡pKH¶pqmó{Nà˜û&¯Ÿò~SªOí¹p)qÎM;uNŸ˜šw½NMù»n×#nï|Y>S0r?chˆ )¿!4`¾ZpÕó6-q¼¥Âd2ü žXaýQ$žÈh›  wD1føð\“¢üZønÏbލ#w m‚¤åqÏ /b‚ÀaLˆKé“d Kãù’ÕýÚr~¯‰=¦8.‡f­óZ.6™¤É{,ý9ÒZåi2 PH¹) –Y‡„„‰r4öö±¶«?@¯wûæF¥¦5SÒè[Žb?£´q_¬Ãg¤ëî¼ÅòWŠðîp |#¹¤‚nO2âo£blûûãB.Ÿ9:°qVð Ήµr»Tº²ö¦ó‘%-™+,ŽÜýï7>Ý`gœîï.mW(a²!I%p`ÉŠÓëÜÎÈômÿ 5OÓ-ÿžÛ1Sªï,rÁó4%±ˆf{¿›ø~¤Š7ŠA –­ñvd" ·Ùì³Óe Cų\4Ãj®GFìÅ„:©h&½{m´ÅQI³9Â^H‚µág#sµÐ ! ÞEòǯ­¿Ô¥éÓq‹)¢³ï0ÚñÏq¡•³O+øînP/D±ÿgŸ +ðŸðb$Έ–7¹·Ü ªÕ‡âÍ„^Ç› ÀáÌÀ8B2ô%q?=®Ðç!n¶Øáά[7‚ƒdXåf•_zQ¢$y&êmš}ÄžœvÔ¼µöÄlM}„F+ƒ:B’TˆZ±DÀîÉWË(y`"D²ÿ¯ëÄ5“Ø¢‚ÒP2¶×àZÎwó—‰xŒžˆ”.“¤ÆÕsƽ¦Û«U{æ¬Qªèi!±²úÏ“¯ŽÃ§È»qk‡*ÜÒðz?2}yëJö¤¤üaú†‚?ji÷ÚÿÅï%¹é¥C#¨yˆŽ0È5,œUc_v_ Ùg¤˜£DÂxc|, YD"ùd$¦wX Í(çCxéxAÅp}ÉÜv„,ai=Y}Iªv§ˆ“éƒÚNªÒé(gúJŒ\'1Û? ¤g³ûjq£»‰­/sM£Ø3Jš3BнGi1¯ØK¡8,µúŽ¡Ò.šå{—1<X!íûÿ GÎ : ²>ü[¯ú­7T*ƒ9FumK+ï³ì훎nõimÙž~sÉdçv€ˆªq²R¸(—}.ò_{¯(»ÊÛnаuvÛú^„¸)Ñ¢<ÑÕç¥ïmÑoýþï8¢¯›Ý’–yWœJúßÕúÝßôóçe ±.Š3Llg`¶¢Û^g¶ã»Mú?Ÿç®|ï·¼² ö¬µ*RsñÞ½6àø´{]igœÎÎ::N+á´í û=ùî\¿Åüù|îúúÝå˜Aú:×è¾NûùŸžÆ³kÛÛnw¶:ö£ÞmzÛö?o!Gsæï¿›7Ëv‚ˆ„ý­$Ê’'KL8a®C×õH`€Ó6B„ÔµÿÀÕÝ#ÜÞ’F×[)¨M'-ìJD‰£ô”PŸæí¿ÄÞ†„“Fý‡aü8^W×ëlÜ'†q ñJ’œ¹òÆCˆ"§ÌHÈ’;ÑD³bð³:o…sð{^—ŸsßíïúÐyfË¿Ïèc¢¯™¦=®&†‡¨º¯°½põÊÞB>0úïö„"ÿî뻪Jt‡BINp#mjì6ÿðlë?ói¡Ù:¨‚¬0m ppŸÆ[˜×IyeR)|H¨h¯)ïþç6÷k¤<8üA‚t~2.Cå•*~ƒÀY*¨€‹gnW)I@Ãc9KFÍcš€ŽW×ôl:îîýÆêUlÞ‚VquD¯é L Ñ¸ =ÿ‘2D w§™È~@=èõü`3wpP':Dw×Ja1>šA#·ª:N±½WKÀ¹¦µ7_oÊÖó :!q¤k¸ý‡/r=‡¾¯"{Û$¡‚чˆx yíÐ’^¿ˆCºü¾|ä^=•ãt擎‹RÀ"ÚH?¶b”¼”ñ"£„–Y™ïßÑùÖ/`”q I.EäéB÷ô`ªš*X™§sÿáâ×õ¹øYóGÿY‘QkWÑC«Ò^û8­?:ê"ç"Éf—º­Ÿô¡þ³YÝZÞù«ˆ¡bVJ1¶<Ï"3ÅYW6ûjhý1Ô…¡l—Þ¯·"ýŠÚëÇm~ãÇ~D\ ë£á•~›)ø-m™ùAfJ~F§>š‘!kûÅ÷iâ ê)ô^=¨š'T\¥’”½ŸÃ.`±žËõå&ï3BçfóÍ-ËÖuš='ñ ÚÆs<¬¹×¸±ìð]0­¾Þììþ?kÔÝêy¿ïÀþò»p‡ú4­¿³A؆ã@ O³²EHè8=åóiÍ1†²ªb=ß7§éî· •õr=öµ¿.¾™Y¬¢xáKy¥á¶ð…mç$ÀœDvbÙËŽ±WÐÓêñN=8‚üàIððÓ&ï³cÌW| Pp=,†âŠ£àvã®:=;jÄ$Ÿ¢*´…5ÍévÎ ð)×ê0MŸówö†#O¿µN†LTR­–FJ°%?.³i(Ù±“pSèCá;ùx1¡…„ƒâXò6æA­9÷*Ž˜Ü?ôL‰ŸVÊcø`M.Ý2n Xè”D9í\62d¯sš†ÎDžšA þmÆÎõ ³Dã”^m]¨Z…«y"~Al´âæN&‰·UI§¹U—ìi÷  ¤ªºF$ÝÙy⽘B¸–¸2ìÆRQ² ïI€åÒˆT¦èŒ‚qáQ §ç ;©!½Æ›AÈ}/pÉæô‚>VvÀ8òˆ„ŽE6”(Ã}QIÌšª…ôß7på`€nÊz4QùADXXî7‚çqe°Œ^àøÀE†‹©kù:;ñúÏDZñ›­ù»òŠ˜o".^œÌ9¸ñxÊ‚&Rö»Ê§ãRÊÖˆPú1Jp¦‡–zòQQ¹Q®riŽ#` µÖ$„å&””¸5Åm1•ôw 9ar {Ûs ›^LwDêX a¤V cADÇÒVÂñ|NêÎ)Âaœšü™•hÊl5DþÕÁE=¬&){ý!‚ÜP{õþkö즰ËB@’€¯§ýq Dè”s<ÖQ`‰žýb—4§Þ‡©Û%YöXk‡êˆt%ûº¥+ÑHo³^7P­© KZ”™¢ }ÎÀô>ëu‹-7Ñ*MϪ[p—¯h™ÊLæ:{lÔg‚fJÎÇšÊþ…*,†B}"fŽšés(ZÐ$BÉ_q­ëÑ&%)¤×w»¤é7gnܼ|¹„}”¤Ë?„oÔ¬®UÛo?n²Wi¾]–®ËÌ›»ëÃfÎ5ënû7Œ‰sÛ†x -úY‹IÍ¿Yú{á€@@OêHÃéÜnEÉ.ë*BÁt<”¹.5Îùruzm¶0â¯]ˆ8½äÖèßç¥&Ñ"-À!åùÞs­€ŽÚ>#"•t»DéŸ'ý%Cì H„F̦4B´»Ié£!¼ÝQ.ˆ×A8fIâ›”`Ád“ŸÑîZˆ[ØW’›Á=êZqàè¶â=ÿÊʆ;€Tå‰NÅ IéA§ïÂN†I2Õç%Va&ƒqÇÌÝËú^¤zpvê­à ¡ÆË°§Û%… ƒe˜D©YvÌõÕÑÂþº­¡W`¹#P‹×xñdÔÊ1S‘E ,{@óÞ2›q]*KOå(¿“jXtqçw>oÚ~>›ci&Ð…ó‡U°ÙÜB¯Ù3Á$`smr„u+Æ¢ô“\¸ ³)Å}ñŒ0´3dë6ta¸Àc S­CëDiC¬½°‰^pFfƒýß!’"mÞ”µC&yøBÀ-“PZ‰xfœ ÈB­·½" DbÞIQÉ&¸oÊ6Y“Îb7„Bžiƒ6b0*Ì )Ÿ¾…'3ÅçF€ñ¢x‚1'L¬ÃF0Dð–Ì@Ð'ëàX<™b9ÜôM2«¹äŽèôg³Î êðÚgÒAmb±Åð™w„¸×}’©è)´c;âwèu%¡jýqUýfûknÇF¡ê™Ë0÷18®UmGàßN<€€ba<[ê L°ŒÎAÅcž3îg]k5gÉøçt¼,åXq­æ6ÔÉ‹’³ù °ãàÖð7¦C”Îk`bLÑõê%DKå—æ0R\ÒÓŒÔÔÑ -6÷èÀuxz æ/%´5hiÛ«úrõËûé eoÚeÿ¶žS Øü«cX ³&36¹ÀÕZwøŸoöäÁç˜Ê·%Ž®³þ†rÞWn…TÆQ Ci-xƒñ1¾Í›pòæÕWó;c¿7#@BM+;½ /­Ì„lV<놵›ÇØAûÒÑøô—cõÝÕ˜“Óè}®ˆ»>I×¢ÛÀ¤µ9û)·äOdRZûfÛ Ì•ÕûŸº^âëÝŸ.×?óÿKÍ~4<~³¿Ž¯í²O/¶0ã 6g{#=†HË?ÁÃhOò¯ô÷;]ÖõóZÉÿ»[°_l£1Aתÿ}¸¾ÜD^lT/Žñì,Tá®ïñáA•VÚÀ£>øæ×#C3`s(ÀY"pKf°ñf8Qf¥#F¨RÙ²k©ÿÃvQNuÄ@ЭÿˆyAp³Ü$% CzySAÒHS¥„Kå(% ¤?za½:ä…¬Ni¾ùŠýD%´ÐAE•wñÀ'’ígûöÍÍ'3iç"Ì<¯ù53mý~·Yì§> rF ~åÀtà$Rpè<0¸ùHub;ßËøþºž!9Ÿûþ,ÓÍ_Üý>BÌ}Nà;øX ‚XÖèñ xˆ$¹/ägeZŠ›c2r–nüÉ;YUˆW¸€`×êÑŸ¯üî¶ß[v ¬D°˜>‚È8e˜Ú†k¸¸åúºˆ™ÍB›Gs@øsýKe¡Qk¤ƒƒ˜(“>†¿“AÒÆv+e°¥:Dl‚â¦pj¦ÕkZj¶f«)Þæ ѱ›©¨×h‘ò5ïYÛ=÷â–_ÆÖÌÏ3Äm®KV¶ØÌù“žcŒ‰:‚íŸ×y¶øõ÷×9±¹`ôé­¶×YÐj®&s_blM üMº+æqÝìι‡iD–.Øö?¯Zô[|T_?œúïÆoý›ôÆÇÑ‘c±ß\êFÚ«íx¼ßøØ"buý§VU{Ì+D–§·¼þÚýížWVÏnÚÅd.¾»ÎE[x‚=H'Üú»úO2]³òB „¦tùÉö…¤TÍS8>w4 } CµŸ+î£5<¦ïÇA‘B…=èåyò$!1Ù À]ïl»ný³$Ëã—¤ú‚f§'¦F¶œêJ²âºÃ}¼WIwÜŦçò–³0Ѽv”žËÍ*² ìêy‡}g–Ãiø†iå_o÷EÕð¡;\|5’+›—ŽÇÏîi^ó³ÑîËHéIn3P~íkYÍ;0NóCy¤êT”âFˆ=ä<§D÷¡iuóMoSHÙÚD Ž·#©^sŽvÉ+C4äb‚¾ÖL Fº¤kuD^ÌÀ“œÖBñ[âÕŒANZ ðé¶e.âp“¶‚,–vŠ˜Gí2{ýòþ¾Žxèy›õ]x$³z.ZévLÓGrjzò1nŽq½ Y I;²§Ù!s×eV–bŒÁe:wÁL€UiÕ‚LÅ‹¤ÃüÞÎiõ—!IiÓÕ&ƒDª+üÞnR«#iÈnV¶II€>ñþW± Gúsˆ+"Ü÷øåÂü,{æ¬/…-ƒ™ë/Wi˜×•o*އÙú˜J©U4ca½WÜÌн^–S1F{Mêcf#÷? DËV¥GÈǦ¢ìÕ«€Sž|ì³&whK4®'Ø 8›n÷¼l\d}>gÿk”õ†¦±R³¸C|¡ãmóihhœdmBi¤¢Ë+žÖžÎ¡!ÂæMô$é¸â6A“ ayǬêsç36Ñ©¸šZ&Èí£­j |«W£w­JŠC=åÞ³ã2ôJr¦C½ýÈ„–¢.\† ¥£'wÐy­@#»%ŽOf`½¶«€%÷ÈOvÅÁ‚S šÍo^hÃõÁ°zàuzâ!Á¬òêàíꜟüZåt§çKñÑŠ´êaµJgSøî}|¸ëóu¾ÕΪ÷¤ß†[YøyÙ½z&iMèy²ÜúÓ¤C[ü˜úÏÞŸ¡H¯ÊH‘¬'/ߥP¢Ÿ×²>°€Ï¾zPËõLˆš™ÊŠSQL¼ÍIëòÕILJjhŸÅŞ̱ÃõÍ”3Åܾc“è»|ÿ²ª>E$1[8–Xª(¨ý¼z&»·´Š_òÿ_ÅöOE€rÖ(x¸?[Œ»<êƒÅOS,¸‡¬BÖxõâ;Zéé{*U–ϽŸTîÙœR3g‚ýhì‡V!ÔND˜LH…hCG°ŸMБµxx–rZ%&w®ŒjæøÓTþÖîÍ{WÆ.ß„Úìm·/‹bÕ M¿Yì1SÒןß"ÙR;›°A?]¡”cÎu>ž àGžå]Iö+- (T,ŸèD9[$ë”\v™úà×!(02su*sÉÚ˜…@ìV€ŸG˜'ßœÒf¼xSËŠm¥XŒÈ6fHðPù“ÒZê € B½1:.Ú=Æ£œátÑ«%ÇqZJIÜ¢¤HUÚÚàm ¡ƒ×Εx$!¥À9´‚>W(¥Ó%ì{w¹¹}’Úã]¹Åˆ´}”ÅS£j¦õ‚1!¹Ã±‚Ùml#;0sf¨â\¹þôÏÍ|µuãì,;îwlë&9皆2›"Ê Ø ±Ê?œd"¾áÙými"Þ/‡jOVÈ.:à6bä|ÓM• ßm:ñLó$CZ_õ½‰°=äb×Ã3@>NŒL€ ¡K7´ÍØ¿#~š«ñ=ý± ¯óZC\–˜hdT8 Ô‘'sH¿­ó®­áÿUåeÊW0ÓjWÒ»ïæ©¡ Ie¢Ë¹º:·Vç¾/d@= yD¿Ý®—©ùêˆnz´—çi¹áB„ÑÛÓÒÛbóË>Øì€†„Ó•v€h \³•t‘Ô=Oø`8wš7¥}:À@/`jRÒÀä #/ä¨mräc™-F7„O¢¦·í7ToÂĹ¹ÿªÂ؈cæðóßøL0Ê[ŽAñm¶¤{mŒÞýnŽˆ’îÛ8Ö€Q€õA¼×àÿGÇ÷½Ä$†t`ûº‚Â÷ï¥n:gBœÿŠq¤Q›KÓä1çLÚ‰ò<æ%ë…g?º½¢÷œ+LÈ?¾cS|C2„5‹|‰%»óÞáÅ­'åýöK¿ù«·âç°¥œCH™4¿?Ý_â¤Ìˆ­]ק݃yÄûYä§xhÅì:)†J$qd·_ß?;Ï;ÅИ»Ùœº$NOÊaÌ…ô-kiéÃ'…›ÆdMD7Úoû„µüá_Mǧ8C%y˱Ñ~•,õÖç®^Ÿf”£!'ÿkב“þ Rîf^ŠÓçü0ôýhµìÞ…¡´AŽÒÎm\þî¸ÜKNüvzmöä¸è·T¯?Ì¡q Y›:Ý#yÍTŒD‡2®wÃH`T+J³}<—ú™x F«‚É95£àF¥|g1ÛúaÛÍσ½’wsÑ@ RøL—¯™»;3ÎÞyóò=›µð¢+¡KÕ ·¡ÔçfáYÕï9)%éw±ÜÏ­øù-C +§øµ]çÄ“ý^è™bຠԗÑs½aäæm‚Þâ˽<ÁÒ2ÂÿS³}w¸¹¢ù¶¯`F{ƒ¥è€‹ŽaDÇNÕTBªK#=PU]IÇ‚Îé¿¡ww4Jjœè€8Øýx(fa]ºòrVñî+µ} /;I‚Èù–×·„s¾gEÊ}Îw'=!hX¹Û#›…ëߎžH!œô˜ƒpÅmÂÀK>J»cäýšþ~‚X&ƒMu„^µ 4r­cKàs$º>ˆ3¶Þ]g¸ÿÀ×zô‚5íì<ù%‚h ¯‡YÌwÅ×þZ\ઘ\H8þf8ƃKª…UÔÀ‘ØdyéjƒÊºs½ö&pÐ.É AÒ4,£Há3}K¾ôŽ¥K´¼M!%K©DC±v752J¥¤t! Ýåør NRŸ)Äq („rÛH)ÝJCK;''\ÄœÚä¥bH]Cï8zã§Ãq|dèì2玾‹©!%…aœk­?üW#Τ®3!.G~Ñô5wÊky*DSûpWwé^¦=¶’*Z4ZžÊ@•…Î÷„[.ö© |a´DµD$ªO"Žb,ôV­ÉñS$÷ó]6»œÖήeúZq™¢æÖúÅ* UgÎdi$—Á]bÄ0‰+A…û¤ƒŽß`]Ç1½’AônàG ÒVV wÀ‰ØwS"‡…ÄÈ·m¡?îíBø.ñ¢ÈÅ¿´…Îú›xqÉùršWÚ|Q,7UyÛc%©ïœ†:3²‰¯l ‘ìbˆÔ›à/¥¯¼¢!kôþ²ŸÎÞeGÅ2(9œó÷%)áÜÃ&ÌÜŸÍëð›ée·éºeÒácº€T€Æ{^ ‘f]Ú_"E¡·ÊññÕ~)ÍzŠvz‹»_âL ¾c>eOROÓý|îóÕí-Â5»8¯C¾ãd…yf] > Ê`v•EÚ‹%0—ªÒåØ}ì,4ƒOÄÁÔ×ýc·1µÇïÐÔe©Ò7 -³ô`® n;Ï\6Gc:†×ôÍ mÖÂvh]/o÷ä‹—]râëûÿv /]¶À]·|šª’6Ì9V#B)­ü?M'I0îЬLAàplÄ[=øn÷"¿™IÀ79îšH:“ÅiáóT•ãœdÀzà\á#Lп¯TZq­itºes¤›ãÔeeìÛøC°Ïgp¹Ã¥ü»«¯ÙÏîø÷—_æÀ´ Ù0G%¼Ž5¤½.ÛK!,6z“Aš¸øù^VtiºÈfwpU|‰Ñr`»n@o½Ju ‰‚®éàKlÁ/s€„?CØ=«$ëƒiçë4ø½˜Vv%Ù°;«ÚÜÚaé8³Ðêò>—ÁTû¢ÈÕEâÖ -M‹\?>éΠؘ¾¶Ã0–Šéå@,:HÕB h-÷•:ü*ÜðÞ÷Qí¦+œÈz^_EsnÈû^ÇÃò{*ñþ†/‰‡^†RýAŽ«s2ÿãG$O]ÄÉø|kÔ‘c±À’Ú´ìw Ñc~b1ÄÿTßTÔzMWt¹E¹´<ÎQ¹l‰†S1f\Œ–V\ŠS„”mfÍ/a6‹_ì]­ïg[ŸWÔz)«CM¥(Nè7ù¹Vj 󙊧]KBÆÜí}wÕ©ö( Ð´ßV·Üà$ª^ Ä/Nµ†­Ì"ïr„·M jt°¹ùðÂaÒI‚ûZ ë Ä.©‚¨øm}ŧòçõ·¾ƒùø*°œN@Wóþ v‘ãtuÙ)3ôµt»f¦Ç†ë< ¬?¤$€¿ÿíúch!%Ù1ëIe´ù+ÿU &h!-ÿ™„Kˆ`f9¨³ÿe³ 0#ŽÌ]yì¤é÷Lg¯­®N-CHUÆ+¯!ÁTFNãÌÏ'4Ýk¹Ø½þ_›£èø–þg޾uý’nó}ÔJmðAçk¡#kÔg¤+£H,ܯ#"îÒ 3Isþ-D€¥ö´èð¿äèz³ æ$x¿còôs†$ÜBžIæÚ#©ài±‚ΓCŸÊpÙŽu…ÒzM󴃡Çhä•.k*³\X¯Lêÿ\¨9þ¿ÀÅýœÒ”'õT€¸ÿJÅ…„ŒcIˆèØ¿ÛòÈ6w˜KËÐ’ÿÞ¿;Ý$q…šmip­ ;-Æ÷©™sEq#_®íúÊý&%δVª¬Yǧ·ùêô8>åûxš5™„¶Êv Š-Ši¯°À.÷ù»Yä2%ìïÜGƒ2\¿ÿ‹¹"œ(HaxÄvggplot2/data/presidential.rda0000644000175100001440000000056712555771055015756 0ustar hornikusersBZh91AY&SY;ú.»ÿÿ¾ÈP„Y@¿çÞà@ @€ °61°ÊQ“ÓSÕ?HdÑè”#@Â0|ºÅ@`¡ ü±(XbÚpN€g¦E’Iád¯Â¡ÆC¢í­)}ÖÔÔ °BÔ8ñL€èÏ0ãÙ¼§ aáæØÒéÐ~–ÚX*“ [Ü./%ÿrE8P;ú.»ggplot2/data/diamonds.rda0000644000175100001440000123657612537637604015106 0ustar hornikusersBZh91AY&SY/ãl½¶ÿÿÿ\À`ÇðqD/'ÿ8€0 @7ÿÿÿÿÿáÑÿ{ì`*€M[ióÜp:¼Ó(HP  R¨@Phš·d­%¶Fµ¦Úšd $  @T”QJ@’ŠB(ŠÚ¡ ‚H$ª  %I+l$"ˆ@è ØhŠ%D’B©!* ”ª(2Õ­š­4¯%ªêє٪*P `P¶É$(m…Q€)%lÔIERBQªª‚Øa€1$@(€@ ¢€IJ@J¥E”¢"”šÆÍT) 0††*$R¢Sl-µEF-iרÎõ³+lÕcA€¶Å$ °d iE*¨P ¤YL†¨ÕkMQ”@$*QB(H¥**Q°a dÛ@E¦•"U@• `HŠØ¡©P"Û6±¶Ð ÆV•VÌ«f¦URP 3MjF”(5µ hXÖÆ†²R3&ÚÍe³…"¥°fÚ¥$(ºÕ ª+@’áÐ(dœ²` UA@ !B ,C<óÞêõìplòŠñÇŠ€¡ÖL«¶ñ5ê¡[nZíìï[çD¤ E€ €©C*À€€AHf €€€( @”j}õ÷éâj†¯d¯o!KÜáÇw´`s» ¬óÇ•×q§ŽÔt©^B±ØÐ^­ï ^óÎzõ={ÛÛ5yïZÜf8uqï‘àxÜ5= IUP4ÉM `@ Œ€ÈŸ ”¨¤BzSCÉ1©£@4mL 2h0šhiˆ£@` SòJJT¨44iâHhÁ1Œƒ&M4i¦&„dѦ˜ Ð`„™I%IQ ™4iêi¦L§¨CL!£1 ÓÐÈ`@…D@J‘õ Ôhbh46(m@4Ôè“c‡Ä…©†»çiÓM³GqêÇQçh›.ü󞌴Sékr^±<û›…õçs‚ré]!2ªv*÷\št* 9¬¤2 ™±:Mùä_3²áôII@üšvä!\(}qçéãwdU]™¯ã€“¨œ)o†“J‚€¢8\*›¥‰–ePA™ÄßÉŽšý×H­eÂ;™IŽB¡)¥zºÚsZDRaÊ2 Ý)dLÐ"B ¼ûf–ü›SRøDQ¢£…QDCO2¢¢ ‹Èsë)o̪åzËEªbjŠbIª :Zh((ÖœC¤ 0¸‘E9"h¥‰¡ä®€1)A¡ €Uþ}¾GÇRªò"ñŸè×ñîì¾w9p¸åa6hòcžŠŽ¤¼î^˜ÑAÖÇpøºŽ]\–Oå×;Î]”;¥G)¹æèùÞO>E^­š‘pyÏ¿ˆù<è;ˆ/2‰‹Ó?HÂð/„*}šÇ©êsBòý¸”šy3˜žõ8²EEÿDüžÓ\åÄÑ´™Êƒ¦m2mo~j}}x}ZJB„NKHQ õääšÐŸbNýÜ'rh(ÑÈЖër¨9/Rø—¨AÎñÂU@;Èr¡¹äÇÈrë|›rav[ë~CÎÞACçþqùÁ'çóù6çy? ¯G2_£noÖÚNq¼Šòcœeü‹áÊ ªiÏPò(~Cóó¾ëC÷[O…j™_ÉΩSòú?7[}õËA¼ãŸ85…àDj‹Øô ½rÂõçLS;Aq¹ >Lrw©2¿\þñ© …†•ú#ÁåEÜÒuê½ÇM´úªNgó>Î~wÖè2}ñx„ô†O“Ò[ÚŽ{Fyù×&¿Gœ5†¯ ßº9^qÔú÷×`ï©™_4]DÒ-úœ6ÕúôŸ‡²AEϲgÙöq\ú¡æ¨nÙèxÍNwÂS#¬R‚¼Ó"’»ÛDsNžyéì<“=#Rß°§U»ùñÜÞ>×É'K²‹³J¾é}Cϳ‚{Ž!+‡”M”Z¼(/dÚ#òbÚÄóõg?.»«¶q›¢Cipº¿m‡Ë=äÄwOO žbñÍ.§‚aÃs³§\™Ú3¯BŽb”üûŸ¾>êãónÇϲâ,‹#µÝØcÄÿF||3Ç×ßV*¾xVÚ:ÛÞݹd髽<Ôg†§?N8™sPèéäì.,oÔÂuÔ'›~dÆrjr$½¢BŽ(i<´ž¶§…Øb½/—*‘{í¹êÒÆ_“hîáÕQÔà¥NzØÌgÊ't„ÏÍQ“YA\'PrʱZ Ò¡PÕ%­iU« í•ç#\Ùܲ¥aí9[sªbW›:KU´'¸4‰tîfß¾å«co›-e.¶Øºë¸0J½”– )VË,Ò²JãŒÃj¨à"°DOÁæíÖò;¯Y¨„ÚèêÑQÇjÖœ÷5ÎÍ]_—³D¸alOi˜qal³Ò9ÏwuÜrg¨ãC]¦8î‚b;H§'|õŽ^/väNä>Ss·nQi"î£Õ¨Gɾ@µÛcnåÁ's=À Ài&‡«írPƒ!„µ‘ù'nŠzÂ[\×.½=£# "‹&¹ÉíÉ»ÓÞºõ 1jÁAHàžôë1¡Aš&ÊP&¶±QdcØKªh0´i,. bQ–Fmg¤OÊ-œ["šÜÛÎÞRDÕsy×Bº÷Ñ5‰ç#Cžà, a}…¹g€Y”'µ~[+Ä-qù¦ÄÇ ŠvîUfæG\ô@ÜÞ™Gt‰Ü&6„Ó‰â³h´x¯^ÙTüôçà®9 S§¬Ò•¨&Ƭ风צ(ÓÍMì §'™]hÇ;cÈGš·œ6)Æ;œ@ØKqQ)ÆDÅnWSEè¦=¼¢¦ ‚a#mNœƒišŠÒ\ªîÕ®ÀÊÉÊ­O *ž¶SÍ4éŒmkÀêf”¤ŽDX4tOêê–(¸êW7YqîέçÂnq"Žªç@ºÝlŽMyÒ ñ¶¢ç@÷h†ª5cèNQ‹§›hʛ͢—µUs,سD,ѪèùçE]´‡WdìÕÓQA1Çl¶×ƒFÄÖé°ùDÙKUx£ó€šº†ô]ÀúMÂÞ]ÚÁÎnØ”ܤZ*ÕqÁ9=š¹ä…÷GPS°u‰Ï0ÜåÓ¨{¡µÜ|mÏÏÆÞÙÄwcOP{¥ÝmmÄK«RbC¤5K7…«aÚB¶ 9zU8³eÍÝz<@¯gоlãµ’ñvi£Tâ\*îyêYÕÄÕÑ’ú”ÓÅPÑÛ‚&Äb=!¨ÜjB,BÖ§›Î’HÕã(ÕÌj*Mæ:4)8ðJÍŠlc õÎQôŽöwœ„lÄ:‘ÄÚÖ&ë;*,‘œNya·æª„d֭ޔ墙6ß+u¹=ÆTõ4tÀшùèö1 Ý}p-ë%²YOE˜³aeVÑG–«a¶¡•ºJ ™ƒ9Äz€¨ãn`MGä^j›ÇÃÎt«QÍÍ8a¦ëq6¶ÍÅ2ÏŠUj`Ô+Í_CÕ¢×›óuke­+*&ºVs~¼5¬­´í±9[‘0ˆìá„`€ZÙ3oXœeT±×EcM•»Ùê§uVÈæQmoÄ-®¼Rì]¢„™8uÈz´`û}²&÷_µ[=Z€¶',"tŒ ‹£¤·Žá§±Ž’Q’ :ÐTSkšˆÛKÝ\Šg sèÍ#Óg»!:ç*£Õ Ãš`°ŠäÊG˜Ÿ¶é¦ã€¶½`˜WŒ{‡ªçQ 6œƒ€……YUç7CÇO:„ÞÉ™å½UÚ9%¼ãé,F‰™í†œëœá‚ŠC™X£rwdÞÎà™]±wª¶çЦ.ªµ°j’ÑÎv`=U0–Ow[§YcÌu¢¶2F«+Ž·R®¶{œÃÏ Fö’ˆzç#©É3ºdE"ÑÜæÙ½ÄÕGÇ= ò‰àæ•ÍFž¤:¾‰º«Sa+.!9³‹%¶mV³G`ݪ¿:¢Ä­ F…œÒ}Ò_ÛºÅè_vsÝbåz‡lW­»G¡ªuWÝÝž§sÔaËN»9Åê-ÑD=Éõ\À5k:zÝkªA´ïo=Û¨èýöÕõ%jzšjœ!%žÜhòêT7ÒÒb«ïŸ»ë¨ö7Îê8vœÜ»BÌ)U5ÓÔØs+ló FÂÖá<&:‹-h5ª27›²O\õÐpSÀã’GÊØÈòÛÕ>Ü»1»´3:ßa£›Â]UrÉ]M(D:Ê 1ÂZ›{NÕÉn+ª9b‰îèZéÈ3å§)LësUA`¥uTÉ&’ a]$R„d$dÖ<ëO;¬Í·HeÁ#=oͲ¡è#"£‹^2¥€3J kÕT)b}¦”³ k`ãì¤Ekºf#*ö,·k”Å{—rm¬w ›à8`ôLót©¡N¬éŽô&8Ç{'ÏVõMYM£VU#I¹Qa˶º»-jóë§páU…, s6Œô¶Ë-‘>g>[çÂ9uLU‘IÕ‘™CÆ ~ìéÜÎuK»±¥º^èe›»uÑÓÑ#IM—s(¸N<­•JÌ…§Ÿ¯vVÛˆxõ- œr¦ÔtÜÔîN7ĶÖDëU Ræ;éąȵê²&óNê© oºunŒš)¤XM_1f(Ð8« z« 7V0ð ô¥‘¢²+ ¤Ô TÍ7šö†qéÑÙ4¨€‡(¥EGîB»C6rØåí¹IOwu¸îoºÁø­Z@]vnÜ~ï¯s‡aè;Õf»a±fûo»ç·±—»«9ƒkf–Z» ¬³Å&±mÒ˜Á}[æ·g9ïJ5oY ÒÆ1Hî ‰¯‹$c®«çŸV˜šœòž¯£(;­•ËS~‘cÂ.ÓG£m;5se±ÝQ[.%˜ÕVuôÒ{ižº×1š˜ÑE\1³Ët’în¶nívj’ Š»g¼®@£aî3§uÛ¤Pã£XÊVªâÔs§u•äÔ£ ë~¸ªóm¶«;³zGÆ$¨é ½›TñS¼ÕÒí£ñ{i•ƒÙz–WÒÖnI:Xµ·L]wTEÞpÞ|r1NN:×Å[ƒ|夔‹W¾Šñd²Ñö¯½7¶l!Çi­g£MD¼û3r&EÞk+-ðν+Pmޯɇz‹¢[bwTë½­YZž‚Ò‰õ¼ÓåÝX3XânjïKÓ=%ë1ÈqÎO,²œòµkÅ [jyåÝÒ^›uµ"sn*ûQ©Õ]\ƒ™æ8öVFߦá47%:>UÁDFe8Ž/.~o‰ÇNÖB-lº&Ž™Y#™ m‘ë®ê]zl&Ø3¹r—ΣO¯k=ú¾õè5ŸŸFÈ4Ç“kOñ×{CËX~¨¾ëx¨uÙÙww>ÒûŽzËÕ;Ÿ“Vùúè%L¤Q¬LÜÏÇ9Þ•\Š&%«r&OZÖÓ7BH˜„+ÍÐ( ¸ÆAz'uNwVƛǡÕñ”±CÂÆšÎÚÆý¤‚–HÁùª]}OQ¡ 23PõöêøV¡?Cξ·É3§*üâ$váÏp‡¨¯Ú:&³SX£¦{k¤aeuBëfŠ1VýÕøP]FëÆŽó§gìq-Û éPÀ;".œ…ƨ:š¶YÀ¤ 7[ºÉ¼)ÍŠnë3b‘uÙ§cn÷d‹S ÷ <ÖlÇ“~~um".BdíÍÕ_JÚ’=6õZïX°¸O5 'ld8LLP½šŒq¼BŠž|ç…[]”ž†Ë¦<Å:zé[[lŠ8£j8š:9½c¬LáD€­×3LK¹Ó‹)Vmî“Ù®­œK“iÇTœºå¼r6€4Ž„Ûô£µúŒM¦6²(f¸dèrΓ-#÷¸ò¦êG¶J öÐtA¬ðµ~@£Åƒ3ü¯¯$]Ï…î­¸D°Œ†èÉöéI;Dä7A•²iSgP–ÛAÒ8ÛY‡²¡bиèTüãd×_$Ïq†ACÁ *¡É;õ~r©ã¡Lˆ¹A~èDä‹Å~÷‚Ôá„’yn”KO'äÜ‚‚ápþ·ç|žMò‡È)Âxk“¶°I‘}åê¡}<—riäk„ B&©Nåå€@’q [iœmÉ&P2˜œIòbèS3iG¹CC N@pº€9%BÐ'EŽ¥êÖ‡¸ê(Fˆ„Ñ£½e6áÜçmÞ÷l»i žNNZu;'™{èÏpwrNyÂpžT!•ñ àžO»Ï‚‰ä9ÞŽ|óÎNC‘Tþ+p‡çiØéû¯Öóƒø ä•4å6ùÜŸª¶[e^TMY<¡Èòô<¸õê Ç'+ŸÖ­uûô)Žu[äî"çoW¿~íÕ¥Mù^õŠž—Iι¦z<ÏcâîNC2V•‰ @SÀ™àáŸiŸ DýPk<o’~ÊŸ’N˜ýFs¸õƒ‡rr¿9\ûŸ¬šhŸsÃåUpÒ‡§*.8K…ê ^“¯EO®Ë‘çÝ+щ.ú³é|„žgʃXzç ÑOç~è|Û|‹ú6ìò­­,óšøy xжÍäidÌ<¨ëJÖ<«jž@õž÷˯P÷^b{Ó¥¶(¢ô<˜¨¤À½OEöîì*ˆ†}“ø‚"ÑQ.]{Ñqí×ÑŽîªóO6cçIRŸ}yÄwoxûƒžtæÃp½xÝŸˆ+oÅèÐgåǹɠïÜe~BÑòä/¥ÖCÈð ¤5pHÊ=m¬² NÈ£°ióT‚@ÅŒlÖc5A‡ï®U„ˤQ_ÒÊ?Ÿg•Ÿ«'Î_(jcî®Ò{„»=ÝŠ6"'ÉŽXN?;ï·&OµÈsªuI û"&¾·V¡ÓÐŽ¶ ¸ô/+sKCZÍ.)Z¹³ +.CæŸ'äÅÙdÈŠMõÏ?žžÙ»§„ ý+g¢²óñΨ„ÞéG=Zð6€¸\%EL ‘¢h¨–)è Ÿ?3wì1µŸdŸe¢DßoßÏæ=žú÷ääI‘BMM{$1ÏK…Tj#ÉÅEš~@ƒWì  õi¤8Üsž¸á®f ­+[*FÔ"¤œ¤‘“ÊÌ]·%É|†éÆËóÂ;§ qá „™èQÄÖX«®3”ómˆmÃZ yp óVtš¹co|Ó•ÇåÏE³#ØO&Vãi*ÓÖNç>š?S‚ùÖÜhætaF „Alò¶Eøo7à÷Gä 7„ >¶$ÏCQQ(ߎ±"‘1 ¹ õN¼ÒÞ>¬ÏÍhGÇVÅ¿˜½Ýe¨÷^‚‹w”ƒ>ÝN|Q{«Ÿ¨9^¯B¿Ä$ü„@ ¼ÜTV_8é`…cç-DGÓP &›â!CeÚÅ~j¾„®¸FäR´ÒÄ“WFå”óŠZ¸¹®Mú¢ œq¨63¬•OÑ Œë(ë÷:)Ýo›u´¸m=qá*((úßV׊Ÿ`¬uNÏÊ5cOÝ_º³5ƎȵL^Å9ôÑ8‘OKuXq¥E‰$£¬¯£æô~WP*AÁ”Ó̽%æg@útøá>‚úÊ5 h ÕIÒJÔŒÕÀL5·#NÓX ÆÐI#RA6ù ­©m³ØRµÜê8H÷ žgfTû47g @ãèFˆ1‘Ó]x´Lògg&KHÍ>¾»BViæ x®XýhÊX¨Ä c‘ö‡ öÖûFÁ%®w]¶GÙÉoÑ©º-ݧ»>³ÖI}+ 3|õžÄÕ½ÒÓ €›šoòЉÀtffsW³Ââ ÕNg“±_c~êx§²—?´ÎI*ªÔí¶£§§£1¨•4+ôžºi¨<¥„‹6 ©îÕés·(24V˜“ñáºzVêkSN㷹ϷÖòâ³ ?F„Aû¹¥jTÆ7naÏï}mß ïäY¿VeÏ©šœu5ùù8^Û"«7³U6¾y0߯[ _&5ˆÙ'ÖžG¡@ᦣòj9dòÂ¢ŠŒ¼âá¤ï§¢‚è”D!hy©‹Ù ÁˆþY\"h®óa$ ¿e&•²(â/ÚM ѪÛ/ŽW¬E¦­UEÂSHõ‰³ê¤9«‘Ƕ44üÓ+úª¡#ÃÏ Ÿœ"¤޽j+4¨žæ• ño·[ËÛ.}«ÉŽîw}×#Ó8Q{#¶'dsùµÝ}Jx#Ž(ƒÁã{†Z9#x,®“÷óX¸«å›,òù ãßȸ¹5'ßËŒß5,ñû®„ªêÇ9ûíð$v.îãªÆ}klªkØÖ6E1™ }Y6?}¿/ÙßåRwî^ÇŽ\nÑ–ºwlqÖõ­ÌÈZv®Öì8®]Ï=¾ßwÑ{gõp‚ÕÓ¹±¡4Rs¼ÞÉ‹˜ÕR¸{WèMb[4ôÍl²ŠªÖœúÖŸ.ÆÚûmrŸv{¾èéN3XÛÉûvŠó ú>îèÇm¼‹“ô€ØhDÈÎj[\”lmËÊmQ­‰!Úó䜦öaÑM±kºïž{‹Ý¢Ög¹ÛÜš_ÍJþÌ«ìŸÕ‡µ6Ë}še9.pZô‹gLü}Ðð(1l¬ âŠFëòíaá’)”ûb˜$Ž R(F«­c»”x}¬YoW'±IµÂ¸ÁH‘½_“>Åë÷Ö ’v*_s\§Ð=£¸—Æ’7æ5îÜ™O-ˆ8Žõ±|ááC§i*&»~Mßyór€™ ÖA·Q ]UÑ×zB&%N~ÂÆxÊ8|é?V"úË^Üû0fÛ«ß]û¯Ýí½yÔ.ØqPŒMF˜årWåЩ^ÓwtÆ\£ÀN¶aÑÔìUÆät¥ ÚÍüa|Õåìõi©â7ú@}nÙ{R…“ÌE²&Ä!)qHÏ7§+Tfm¹Þ2LÝVÕQŸ93cFÍGqÀý§ü“y?mªJìÙ—4mÑÞêç3F9BµPE3ø‡¶ ÎU“ˆ†ËiÅlíš‘¶Ž~Ä+ð?vcÏR¥ê††]Æ{ŠÛÐ'w±­aÍÎ¥,hí¤‡¹óˆƒµJœ°Œ‹ná9ÃÚßseQ®!€i»ÖEž;qt±Õ =KØÁ'5`ÛtQø]­Ý‡\†æÒ¿}Ýç'&r/‰í·˜a¿7Ä=F·- qîe‹…&è‘QØäø¹s`º=ÍLŸk¦ÙAmÚëVÅW-ݪçLW«qd0–ô[š|Ñcô3mOBð™U+Xó¡tŠÒq¼;T™V¶äj×>~ÖH»‡$]ÃXÞ2ž£¯ÐDj±®º%[óË×tJ%#—IÇk7èýóéúŽÇÕÝ•/3cB?Vø¼Í>i“[ Á¢ô±01:È¿bÂ)üÄ9Éû¯|¶¥Ü²´hSÕRý&4‚‘7 i;;S÷™´Ÿ}¯;J/íÛÕÛÒ–·kG;£ŽãwìímÖÈóšI}o묮­FZçžÓ>ß]­ŠŠ´ÛÌÙÖU¯g±äÝÑmh?7#=D†d˜«iì„Úv(98óÕ×,¨ÓeQfBEY¹Ÿ†Ç {IPJ(27¥¶‘DÈÜNÒ1ãS Lst«Ÿ@/Ï3)ÂE´"&m:±—H-‰ž‚ÒVm¾-h¶Îuï[S™sTá¶¶ëŒÝ2«æ¼ýÞéÕÇÛ¢÷ßK¨ÈúͦÞÂB~mp"S«{ÙWòYëы۷ĖúU›çcs¼ñ­4(Zûa9Q½õ}‹¹s­ š¶5ÓG¸Xph¬í:艟*&Eʼn‰ö­Ôä{I¦z'#®cë××»®Anìv–í.¶±kßoßzö·ÝbMVú;¼šösÖ,añ袢r¬c! ¾Þephœç´ã,À[V!8àU*"µ–PœPzK=ª²ùÁ¶AÄÅSÄB2“Z¦7ÜÕ áÁÇ#=ºÜ>@.猊wl……÷_†•lö ‚?º•ù°Ç£©¨V3“f-VÒJ5v÷"õØî;w’ŒáÆ#oõ@­6þqF=”% lS+䈃7£e/¨à³¥ä¶ÙÎÑ»|ð·Nù½±µ¢cM¯"®ØLOv;ôb÷m¯ºÑ+g£M¦6îrÉG\˜ZgqZ>&Ò(?6‰< .¬Uºšâ¢ LUc‚m<-Œ±6¦º ]Ÿ­˜`Úí5‚滎}–9Ö6ä™8)ÝxfÌ[4ÅA+ºö[—‹ÕʹÛX±jfœ(qÄáQDñ-’ŠUÑ=`{b·Àå®…A¿»µÒ‰FrF–sž×,&Eµf]ßq»ùÂïËèúŒ6(˜šI?7/ÏS)‡Ä‰—XÆÖv?\]ÛqÃãu“y7˜lO­Œ¡åL24õOžôkz—Õ;?ŸX…üúTù¹l9É"i}Љ±ŠÛj6N Ârq¦ÚÄ7 ¬é|ñÄt£WZ+¾û¸£V½;¢äº4Ääê² äÒ¨mf‹ÃÁ£•Êê}ªMôØæº³†\à.’Sgr‘Û5‘‡YIÚã-bP ¤‘œP}‡ˆáw>\šç#I{tó»RÜP¦k.Û£]Ï>²EF³]m©¾Åí7{Ò36¨´Vºß<ª(Ñ NÕnßkœúµÊ)WÎWΫÇSô#i¨?8Òj´G 0Ø£tzÃÆ­vW?k·SÞ¨5Û/W’æó‰¿\}ÎÈBs…Ĭ’|{½ž~FbmØ¡ö†¤ŠF¦CUºÞj(ëp1ôMUµc@œl „W·[š}И 6Žt±Me[Iô«&Ê/šbµ·²Š:ÑYÞΚáÎöN}õÇ×Ñ5[ÚÒE+B²6ž®²¶áGk_ K#¢”!ªäÊÕfÂûîñ1æuCµ˜ çšŠÊ‰? ¿O®\ïæã„‘¨£†¶).ìÅèØÚ¶FöíûHôÏÔ)³U¾îÜ.ò•3í}Ó¸W~mKî­#uA8ް¬õœSi‹dœ—n\¼k¹§Ï¸‰H¿;y÷˨k15aĪñZq”‘ÃÒ4§sî‡"´ìô! #ŒE¶ÒóXzRoRõ'Ý+¶ÐV|ªƒTã›Ç<í:Ÿn²›¥ÎÏl­Åº{¼êÉë}³ôzºÖŠfª…\í…l!"$’^éÇx÷(‡9™êçLå¡ß¿w_KUë^¥É³$–úZ­õ‚uDAÌB«úHÁÓ½rrõu-ÖåL½ÅÐäì”9½V-~î{ÇjýO\¯îóZ_Hø- "#ÍÔ±K™Gàu¢F¤dj)' £3гK jî];Äž’tu4©R¶Q WB­H¥ƒ%Ê[“Èg¥hëUð5žŽ«mÑ®»ï¯¼Ït¢"å­§ë±nÜ9õÕåŠó<ÛÑ‘4aÆç¶Ø·UH½"• ¨) <ÏŽ ÔíDIkBúùÛæLé$žž#i¢1ªCçb„#øí‘”=,•aÁi쬖‡Ù¥Õh7Ïgª_9xÊo]b$ýÝú'å%eú&~Üí¾{||¯—½5Æc$L®ë·m©›%íôcy¼ó9­§H‘ˆ á£ô<Ù*º,ÕöB­•ƒb™¬ÛNÏÌ&Rôë%Ml53«g{1©3›#m7¸Û)ݬ»/›»m»‹{&sr[1žÑ…á™gDâÓ,dòÙE½µQ 2I×=¯lä4Ù}bn[° .*ÏlÓ”QÇdS8n¶æÚ,ã­ë¥r&ópçOƒ»¯¤Ý]+‘GcQvœníi[ (.u©>à‚xZÖ§´iWe˜*ukÑE}vºè…9]‚¿HüÀãkÂt3„ÃRELî v‰ëI‹l’HTLE¯•,îàícì·x¬âû¸éÙÆôtNª'óèëµ }fé©=\Ì@I:ÈÖA n p&‰S‘’qS®ˆM æ6Îô$æwuÜ.É®c¹ÅÜAëRwž¯²5Å­NÝYŠA0ˆcmmÊ™$x4jŒn8FÞÁ]ÖÕn{ÖZJì­Çë~ß§g«ÝÇÉñÀ‰$D=Gv#©öî™­ÞÕ5Í9zÈÁùëhRÐòì8žº™bí0€Ñº8}Ù­ËçÝÈžjõŒå^­\í‘)ǘ,{s¼ú.€Ä݉£Áæ&Nh­6ä—©ìIÓ¥˜PcnÇ<Ù¦†ÛGTÙBžú+†(þæ¾Ígæ7`ýôçV9[¹®çÍútnqî™ÚµÏ[óˆ¢L84ò–tÙT‰Þ%îupˆ›­mp­7±{ŒÎUœÆ‚NãH§YŽŠ{>ÂYVž$q[,—«uNzižÕLzkmn`MaºFÅȜ턚x÷)‘‰ÝÔ9Áe‚„¢‰)V›~ì~$X´ÖB–K „(ž–xx4“ÝåÑì­ÎUT®jíIÈ3£»*Ÿ¶qœqÅ‘×ebÒŠ•©Ê[»rªZÄCÕ®Q q·|i“wY—_8éáÈ ÍÒºÖ6ò;)æ8k²°!K:ëtèœZi¢}pÑ·ÙÈž_F‚rº)@Plø[>±±ÀîDÐqèhÙ^´²PM¦ˆ£žci§»0mˆTi΢=NŽô¯ÀdoÕÛe}¤AeUKNnÄ<þŒsÂdüœŸ?­Ÿ¨¨DOÓÒ Y£ðÑîpŒç'9ÊE"²0²%jšª‰V% çšzÞ²¼„f™L§]8î—MâKoÇ.uM®ÊESpšúŠì´¯["I â‚´‚¹$C»žCé“N‚hómt‚Îd:È,[¯µ2 m–›ìdŠç«PZ²’A3)\R‰é"£Qj¥ŽM.¯ìÜq]Jôç^ó÷ZpɽÅrVŠÛ$ᲈy½šyÜôîNrÛL;Å®©µjyu~vé: =8–½:Ó«yÜõ¾¶Gß5 cæënfÅ„÷6£!KkZ»Î)¶Ú?A;”^£s¯¹Zô´ðo 6”Ó[Í€´jˆåT|¢ŠdŸ#óöÛÒ‚®"rÑI#Ÿž:­"»ËTqqʶ‚3G›°QéåH„NŠV´ð„МŠ<9H@@îœ+^Y´q”kízè‚5çôbLµ¶À‰“­–sÒÏ5›ˆ†=Ti8ÏŸ¾­ÓÍ#ˆ#!.¯÷v¿—ç²XüÓLiÓÓi›¥UÅÓk=gneÓÓ»UW4ýZ½X”Í€Éj‚ädÎX×sYŒ.ͼ%ÙÓÌg™oÏá0„†L7!‡Y-™û^9æ_Îuˆ¾][«{a˹•}ÐÀþùéøø¾ˆnÞÊMhφ%$WYî1ÌÖÑc*OS»«©×uDA§û›oÛî…•NÏ6§õ[îä½dߺë´sa}ÈFlÙêáììM­_eÛ¶û¸z½­Ïˆ&Óð>Fεcl®{»áæŽv§îç$rªa[HÙ:¾’;­òiáײj²ýéö‰|ŠwÚ[c«mjç¤R>‘–®¶Ìç:µ0޾Û>ùÊŸ]¥ÆßhûGÒýñJm ž'³³íed¾¿bûäto_†ÉW•EGŽÑSÕ¾Ù¨ÓjFµ¶_Q‰É€d–u±VÆñ9ð°(Œå˜|œÃÈŸv?{[ëy¢ŽÍ-G×nGö·|÷ èçØ?\÷¬ƒ‰#G™æKž×G$„Š*Ä*«‚‚bPoUÙd SŸy6Û¤êkj3…qˆíkö¿XÞšŽÞÞ™ÛllFUÎ/'Ý=ÖþG äûí«Ò,œ"{UóY å/8ÈǪŒÌâ%cÚå5¢`Ý'£NF’1W¢Víel"xlN<(*{šÕ^nÔM@1Ló-¶ß¡ª»²ârŽÔ<Ý÷Ð9;¬%D„m€A[z£hŸ54‹óð¼i´ÊØŒ®Ðèö/“‡¶£z()”`¢mJî~w¤¬í~ÜÙۡέ:Ž©è1Hð“b¥ª63ÏsÝ“«8gè-u™Îp,½JŽiò9ÆÎ+_ºKõ“¾/_D'†SJ+ôÛjWôù`ZºzRZÜg û>«sé'1NtÍBW¶Á *äQò’M-u+®Ù72+µ›vˆ‚zOâF‹ë+#ðÇ ê?—këíÔŽ·ër®ŸhÎØþwì|kÐÇÞ}Š]o{ww°ÇB9Ž1©ç ˜óVؤƒíV°hÏŒ¹¶ê¸g«ö% ìaúà" £q¸÷5Sz*b ÀC}'¸þF~™Ž')’¥iöÞg~Åž`¤Âq5–ÏéçÃÝÕúwŽ¯Ù¾ôqV¡è ÈŸˆI«pµÍ6µq–œ××—X™‹JKFªañï¶NÛ 0t•tº9µŒqb<ÔY:³ÄfªâC‰ÃØ‘@|â•‹&¼©åHytèŸ>æËÍXÂÖÈJÉ'vÃO`á^çZ§ˆï5.•øxô)éZPPB$ë·ž~j4ÏaŠ 1X;ΕsÂ|à›Tâ…ÍÄ·Väò¶öÛ9:>“pÖèÅœ©›5TRTgÝ{?aNP¹úSÍ:E k%É—Cz–Ë$j<Ú‡E·›r'Kª‹9ψ,wm‰e[ŒX½ÝÚr*%Ðf§ƾmLî§ássÚê¾Þ2/¯böÑèJÖ®îmб?A8?=àšý¶½îOŽ–NЪÄJä³y}æû\Ø®û{¹…vZÞf³y’5”~ a<ÕiÊ5kAM=êI¼sµëK}ÛäçSôa/±8z ()Í..ĸ~„ë/Këï!ö%mŒ™¯ÎcmC«^5fcD ê”}v¾¶/*š½©Uë&êrTÒ¨Wí'òß“øÝüüuÅ feÛù·y§µn‰äR⎎sÔ/½ ëcnFDÓ+~L•«ã=í%}h§E¢©ÎÍT‡¤‘,¬€,Ú3±‚OÁŸ¡söÛ-r+V n.’ ÖÙ3´l<ÔŽ ì”#Ùõ†H¾ljû9*‹?XœrÐ{D.C½£!U›ÒŒ‰¯ùê®ÝFyÕÃŒÁOg§u¤M0÷X˜g9¨·e’)M=­Wg’‡¨¡è&z¸éUrö{E‚1µ¶‰sÊVt@¬Ñ(%@mèÔžÝV!äÇÂxð#fº©š¹ð ¸ãÜZýã+ͤ7LWQÒûôÛ÷в‚½i'yÊ~|ýõ¹¾ŽWqÖy‘uFSºUÎ~|¯bFÏ1&geR$ˆèåw¹ŠƒGí2vž¿Peå(ª§ ©£I¡‹1‘1 wË{¹>,±µWœÙò‚êñ}û{<’JUg*æ/¤³GÕÔ§¾÷y>Ø›îÕÌäJ/\chQFÄý-Î.uÂte~AäÏ5Ñù<â¹,^¿'Ç­zß=ú#ÕëœLå¢y'‘wäüžú%q$!2‹‡ÏÈJÛlä5ÛÄù|¸ûJïHýTWîòôntŠ,î ç]úßkäY>£ÏÖU{æ3ñS*3}@ò—»—ˆ¢Þ|Ÿ*E+XòÂT{&Á43s\{~ÝDLåÌ?2Žûë=,þõä9ù>úù ÝGä9ß:úÇE‚Cçœ(THs?.…z ÷ïŽêaè9çyá2ÝHwÒáç쯮ævüŸ9EÞw‡ßŸ{!óh9?]¼ xnĆ'b?[o8üî~ß y¾… ÞNL~wG1Jw%9&‘¡(ñ¤:•Ä=JrCļ“©]Ù^ãAÔ‡ÔmÎp)ÎØïAçÎÈH}ëpri4ùË·\=8ó¿;÷×ÍhìK9â[ª€$»D¢¬"ÕÖÝ/-…Ùv‰ñ ¡¨ÅÚKG·^Î}$틨ۆ•¾Á“W‡‹/BNE¥; }e?9~{Ðyߋ̇)Ñ/ÐåC„¬kƒ³‹«òÓÍaEkža5¨T †ŒÍúÜ^oÙûº»Çq8S›±âG#Y6¨ ­‘+ò“¼-ìôÖÓé¥ÎÔÍyq#°ß#×”ã´Ä¸æü!f9ª"iVŸ½4èÀzC7MÕŠxÚ'mµÂª­~§¢$|VåfoUE|GH  Û×¶"um ÷V‡¬:JH-j‚N4=+“FÑ<²ˆmŸ>¿]ß¶ÇØçÞ®Û©jEôWµlb.Û)Ño1é|iÒ^¹°®.1àÇ·š~øÎ€ß¤&¬›s¸¯;o3x³DÎ|æ,@‰T$úUOÎâ†C—;duE !¾¸^ìb­ÛÒ¯MxŽ•I‘N᣸Þé¸WËiG¨¢çf¹îï[Ñûl!´(rwÈG=ær¾Ù5S"¤^·k‰FãfAÝÛ¦z§eYä ›Q[·w’/HÖAèYÙîàte÷>>}“ÑÏO»Yt绹ÇpZÊñÔ(r© DD“îÝ’‡tÎDgÀÏQ‹D×BO%Ù¤6 ¶K»dA6˜{¡¥ç‡àƒKê™ ( A¤Ÿ½ÚÄ«nuìm¬XÒ<=ÂÅ£zÌå˜X­©¨Â*Ìæ¹Æ6w.UÔrs³Ì÷ ¤N·gOŸ™HÔwN¢ÄgÈü'®‰S‘Ì2 ù¨éÓ§°›s D¨³Î$ò„•‚#q©'Ñß1¢z5õ‡€–CáVú £ñåׄZÅcóUÁBÅçÚ“º­³C@ü‰? FE#hdRpª§+®­û‹âˆ½z;ní»Û;§áäSšÕ.lèýú˜÷ܶ4Üé+¤ÌJYEbŠŒ’…s“¾Ÿ}GÉé"bÛ*…¥Þ~r˜ÎFlª+íy¿GwsSÎÁKN»ž2Ñq6˜jÈF[Ý&`huY]p ‡r =Y×®¿|AÞ×Âåá-îW#›B>Úö[ íÄû©¯Žï»Ø¾6LÏlÙm^c;kjÄëVÕ6Ù5Nò$ÆÐ»Ý{{/»Õó‘ã·Ú&ÝŒ×j£µ†ê®Ç&Eü››Ö ‘P^"RH§EQA4ù‰­{ªŽ©{ >_žH ômÓrqÙ)ß^Û“wGqIŽû‹G~æ­šûçõj6õúüDb4£~’EH} ±Y èy¦ðóóæê×Ë[3´=Þ{Œ³utZÝÛsã®ïwž¸Õ7³¬¹Ò Ô½ÅÝ]ll'j­ÖÑúíºWJJüjq‡l¹i2YÛ?¶Ê*¢+ôDH iè»d[=µž[´S·çIù¸ú_}¹-tvñÂ…g3]dT_Íõé<§ÝnNZXÃê¨Î_?iSó'|9DÇk".Á.õŸ·b_GÎJû}KÒ5}ôs<6’ë¸åÉ´ý‰ Ê>nl>›^\¸­‰™Êù±‘¡mavÂw 6jÕ¨<#kK=i£©ç#i‰µÇ£Â×äiï«£Öµ{ÚÔÅÎn&ö}£8Ža丢9¼)••c—<£ˆRmê`fqŠ ;víä£9÷ëØ×}ÝÉåºrØË+­ëôl §0ƒ˜œTÊâ{dS}é)É,÷Xe¹¤ënÝC¢÷Þ¹áj¶ÚŸOTÃÛ¦*/ŸN«¢q‹Ã®œ÷“›‹Ô´/cy'Ç"DwWŸ §>–šêüñìD}­õÏbâ•Oµ•‰…š'¡¡j²ëÙÂ-m“´¬±}‰“Qb:±ÑiXN˜„^ÉtR×@º,WŒ“„ ‹jEñ>ÊúØÜž÷Ÿº¤eη9Žì(¤“‚‹>Ã’Lœ™Obv¥ñÖ܆qH‹ìʘ¢¢›[.döBÛZ_\n_¯WÜ%„á&ôy‰TÁcǘ”±J›wÝ‹:Œæ˜g+Eí`×}Í>l\0gu글qìH5`QÃĉÝÝkÅÅךaÆ2 ˜‡v™,©dÍP'Ýt´⋆vóŠòÓ 5εù×Ñ?¡¶#°œœ®Æf¹ØW]ßg4‰r<”½õóÜŽ";V¢V59‡˜µŽ§I_W¢¤çÑ–ºfª•“]<ÑëP#NâcgÂSš@™éÈcÖÂÙ1.ŠFîc·Ïªj¦Œh†ÁG&=mÎoÇŠ£d'ƒQ¹,½4æÔA@`Ï7.É’é¤XN„)–iéƃ|㞺Ï&}ó_To‡êÞL@ æ“yÝ_€‡©'µ³ÆÊ¨DÕ¾ceTúÞ™FWݨì&dÛóz©$u0X›³§¬- £„übVó³åÓöáêDæÖÄ_»xU>1Q4RÆ@Þn•¹lâåÑNZ#4S”“ ‹®ë’ñpßžsYÙ³óÝ4],>ЋjÍm8‰¢Ì>'Éœ®]÷wî2¨UQðÅZ„Î}²b›J(^®«ÃÇt—«T÷l‰„ºEm7bƒðK2-ˆÙ¿q]Æaçf¯›èíR„Ä8ÏvöáFÉìCÑ|ß;â9Rýz{µžd¼IQS¾|ù|㚣£öw¾Þº2¹t¢Ÿq=[wÄW¦Û™A7“»®ßœìI¥ß\êNWËæv‘–‰S»¸^¼çÙ21CÃÝÃ…6†‘ oÛ& æÖØÏi·4ƒL‡<× ÈúÂÊœiÙ:(«ºÛH;c¨ƒwÁ;(.å= Ñ6›GÀj SÍL†: PT…TI+’8äÝ×Ç.ï*¹«’ 7}e²k¶Ïm$Æ‹„N¶Wµ{zN}©¹:vî?W»½†)F2I@„˜š°“‹ñ½¥ï±‰»Û°~ú4JßWÑöƒ%µƒêÕ5…rL1/ÕºS"‚ãöž•_™8Æ9DúÈpêdëë\á Tõ€1*­P¤~}/Lá/lÆ|lHË»{Ÿ=$Há$‡ˆBÛ Ò$×xôÔ‡•F±Õ ˜X‰"‡€‰±¹ZäŽÛ¯¬k=š‰ÕD«V9#&½° G÷÷ %†!ýv¤zí¬wt5îÚV„9œõõR M`@w1ë/¬2]ÆæÛ³ÒÕ”ØÚ•?FPU?vu¾ÕD[ôj¢tÒ ]OiVÙm5JñP±¬”Llôbm—™hÖ\õvŒóå¿vû¾Ö-^Ù6¾ý»èGè›ØrÙ-eVO:D­vöÊY 4üÁª'o‚¦ µzÆühÈöt¤”•4£ ˆ4x‰Â%e®ØZÝø[+Ó³¸ 22Ù‹ Ù+qO¤ºµË§uæã€«?«ÅŸ«Ÿ½TÑši—çÒ¼œhˬ|öñÃÙëí)Â&´–ø|XÛÙlCh!U¡æ­Æi{jÝÒcW¬o)Š\ç*ЉG‘¶“U,“ä¶Î"óÛ»í/…ú†õQ*(¼lkc+¼uÑR 4ºßGbO­ªªì*5IÆÁ¡>ÐE!$`ˆÚ’ÄÐKÖŠ×uâŒé#ÈF˜äˆM°iÈÔZ.×'"³Õ¶›ŽN¾ìül;¾$¶žõ )æß³Àé¬â˜~–.<ü(›t‘'ofØý{u_“»b;q¥÷sÒ©Õ6{aÕ~Ùóì§Û(¸ýÛšôr9„2C9¼‰RiÖÁœêF6ÏêzaŠç×µ†Èû^Oë´\â\9És^YG±*S¥‹I)è‹Gª4Ú‘ÐUš+# Ø21´\ŽëÓܽeõ]$ªtVôÊ"TÕéîBÛsíN–\ð9-iªûC•—u§á“­‘î¢ä íw{m»l ½ÌÈCéÜ âlOa´ìRbHŸuÞmæü›œšÛ¤×®ŠµÙÀ}{v‘ÚSÛº^]ÒÙ$LèÈìqÄÕ\ÁïJÊ‚ÜòÞš­ ¦a1A+Ö“]ZhmØÐxèf º(Q4üðƒ“ió\ûžÐÕêÑ©P!žcÒ±ú4'†…™lê5n¹FHÈš‘êÑlãɨúL¡³Ú&äŽmäîâQ¬¥ÆŸh¡…Ã9n7¥È¾ýYè±óË™nnÒ­°×ζ13ÖH$ Þ=HÕ‰‹ã)次Zt–‘87?]‘zÄã"L£íµ7~ÝE×áÛæÎ8TKf´~g¢’#Iµ(óO¯º|š¾û`æv3’ Ã{®êæ¯ÕF‡¼Ú¼;[Ýd‰áºØýÇdîNÞàæ1tFgòCÞeQ> ˆÇRƒÓ¢§°›Yæé°ð÷ÏÞÔ~r_Zë ;etvèý÷yˆõ=y4Ûg¬>´®FØ)“å‡{'ÛŽë(ë8¢¥¥­´–-×®¹>x5Ú­"0¸o¶óÓO^‚J%¢½™3RËÖûïçîê? 3ølj²:4™±2d«õc‰4×”Î;„ýª‹Ô+rŽ-Gè+²uPM £bj„gK%¡&Þ½Ö„ñ»IÓ¶•Æ-ã.³¢|P×™y;Šì⌛ÊjÕ£çžTæmô±£êÙ¹d‹Ýžïu¶Åï¢{“‡ÛÌ2Ík0Ò±×cî~µÃ@Zö6uëOZ6 QÛgªQ²5Úf³„jɆGáƒ$fk êe[X˜6󎰈Q4ÂF£‘(áØÈùú…úX_r-&Îm—Ï¥j™Zl zzÝÞÞÍK.LÙØ{m«ëã{ì1ª¶Ì2%û¬~úz.örbªl¸\fWLBÂ䥑î·é÷O﯅C¦öœl>m)Úæx\lT™ýû¾{a­óì`ÖÄÁ*gR›©Ì¤@Šú}»lËsŽë[­Ý+4¼›$¦ÞÆxs—ÙÆõ[ i²²gîýûöü15/ë4ÛÔÆ¯Ï'5îÙ½RHÅïP±ó·î¾>j%“åtj¸•BdGÔz™Ï–%×vÏrwG>ŒvÁª'’ÊígÐó°7o'w{^½®Lù´ ·}µ£¨m „BE‘›2‘³› ÓÚ]¦M¨i³léIÎ$sžš@1‰ÈÔƒl|óú½ß~nåÚ=0—«;rfgœfìS6çÙ}ÏÌ䥤:ÄîN*ýÈP@‹eè˜& U¾‘Ä"Æ(Ä 5¼b ¬‚ll\Ÿ½kÝÝЉwlz[9ò.EŸq¢ÖÇÇnäԽю‰¢/'Wvݘäˆb-°›bÂwSËã½›ÖÐ3u·hsÔëÐO•|KD¼æ¶^§u¦Ì“/¯÷ׯ·Üꦪb!I#óÙ®6Ú[i/žè]ÆuúÇ<:oª³–ÚUœ;F(èîãvNìœ7«¯Xf¡G>Š«»l›S¤îÙiíõrU}²™5yuõ¯»p¢È=¡ßY9º³#¼½°Û¸åmFˆH”láÐÂm„Õ,#Î Í’_^¶µ+EPŠ>{g>SøfëêùÌûî‰ö/°guìn®o33h‘Æ6-…ôŠHºja;¯~ØÝ~ÛÙÔ»ÒµF"–Ïó·ï¯}=Yˆ„É+¤S$dQÉ…Æ6M[®ÆÝ‚gZÞÖ6¿w{îôagìa6sª’s ï+z¶óY‡ç“aô­(ú”_=³±óòwÕ­½××=OV‚Í3fê Ëå¥+ÔIšÖqíPû[: ý§®TU‘ŒvÇ £a†-¹ÉݰŒ>äÊ9-û¢»ËèuuâÜ>6ÕgÆvH¶ÊD·²y§º2Ïbè·QYðÌê»8¥Ï—±Ö•õgÆÅ¶óyEòVÔ>z‡3ÚôšcL¯ŠgÙ…6ç¯zF½wc¸á;w=’}I1ÚÔŠ-yLíEZÖ¤õyž‚|jhV¨Ý³ÊFÄ97Yç9GÇ<œû<œ—Ÿ(g!§g@»PøÆ½µÏq{Ÿ'†)„%=mU}›Oµ÷29zÅ­qAÏB27 js¶›“]ÙJkÖû[&’§r¨w·v}׫§¶Ç6û(ƒVÛ‹vØöR–kâéÒÜÕÁ$sv\ eÜK/£cîYFšK”×,Qt]2iì4zc»NêYb°Â–."¯wml\aŒˆÝ8*úxvR6(Ò¥#,€ Ç$çªg1NœÐ>~æüLCkTç¼£í\ÃX¸¹ ½–‚¼\š;—õÉøV>/ ™ô4ˆdçX©~áÑ>¯Üû•÷,œPi¬Ô—,šÉbÙ«°³„˺}­UœAC ÍhZÕ(£¤–OJä1«¤«#ÛE(+Êìën fo§Yl“9áÙjÍøÝ§­@^²³G†åU9õ\ç¹µg¹¾“4ÊÚ¡6¢õ±Ë­r_®z^çs$¦ªán °Ó/*û5¬±@ÊäÖ­äæ’·§JûÚß=/tW2ìð·Z¸bUD× ^ŠöªHj£ÖÄ£mQ¢H¬~ňj“iÃ(#zØ›‘>D®óoq;•bâ¡ó‡][ '>6iyæýÓºÖÁ2+|ºDRÂ5G5ҩ㮥MòzÅ-WBÖež]UÙ{V!7bÈX¹1y ¥m8¡Î©l’xÄšwhÍ¢{?ZØl®çÞœ¤-RM%œQ•Õ­`“…KZÍ*8Rï8¬õ'н œõ»(®jNÎTÅcöôjWŒ¥âd}¶£o›;@]gTµjí¢³H7ÏРäÊßhâËÃwÔR¹®¶1Ar‰¦ó½%K½Ï …<3R{ÇtKñä¼’]æ|„¯5ÁNX â øõi±ešÐGصü}]Å—q™Ïˆ†¦ŠD &Dz¸Ú¸AŠ”ó=ã©YZîRóc—¤)ˆë4¹^v¶*œœZ25ÚmL´î2¹¬㺨¬“hIeCtNG¦V©—JõX¼âœÖ°hãߎhö~ã͵$qnÑבüìzÒVÓ‘;\ÛâÒUBåÊÞ©û6EÓU½+Ž8­“lK.¶1ÖrY#©êü¦±-îè–EÏͤ7uCFf¹©4ÒÎ]=[Úø\ËÕ£ ™F© ñ.-C~ÎêœËm“3'›pˆP¤U¼ÔUiêÞ1kQÏEÍ3<'ÔqL£fik¾vÔ+#ž5¸J>À°¬ü$!¾ëî5}í_¾ë}î®-Nu¡÷ÉÏž‹Œ8íúöp'& ©ÚËЍhFÈVÐúw56 3Iß„(ÓY´=¥¢?næ¸íÖsp§v¼Mݺô½¸}PÌ-¤¤ƒZغή ç¤íÇLÉ QW8ô›4­q U:4­iÁžLŠ2sÝ–éôµ¾Q‘©"yÒ9ªŠÔ㸱\aý¹TÐrâsõFð©µ]o-<Éi¿'Tœ‘Æ´.ÄQˬܤ‚Qä:ºa1›L¸y‹¶Ò®ÃOŽª §(œSÓÖɉa@1¦­Vç¿'<ó-œ#&»¢Û÷æòÍ÷5º­Ùï«ÍaŒç¹Ê6ÄúB&µNfü"Iƒ?{*í&f‘I>RÖæz-zÛ±÷‹¹ØÏç+ïÏÇÀùý‰ö§ëLɱµ›1‘ƒŒ'sË&Ÿtnй–†uk<ÙÁ­}wç×Ñóê2)žcuå™$‘GªuëÚŒç~ØÏí/}Ó ¶Û\1w¨XÔnÏÓ´¶P‡¸K;Îm×ÜEO]6ÖG:˜Ë¢©d°çT&Œ™;+3; v–¨üùé»Üuìk§tÜìõÉ¢@¸¼è¡ît“3§6éPÁ.çsWzQÓ&ªæëB¹4#!—ŽG‡k»BG¦á¥ÕÈÓRÆEÈP÷ÉÜnOPóí¹ódb;¤EiÞè"õ‘=±"é bâ¾ÊR5ËV¥Ù3ëÝöì'õ•Þ1÷´itxk£ŽL!T™é(ˆGˆ—9s,&Õ4-@ªæÚqÇ$¨ö½¬r6ÒÛÓr²5Ù#§6*žM6DàÅ aª¤ô¯Ô¼ÖÖ <ôv!¿_½ûí©+ßVà k3 šØbz&lÖDH£iÀa£7Em“º-,Ú.Ï4™*n$ô²19Ÿºí§Ëc&×ó‰Êßh\‡3¥m‰¿5,RØ¥=c%Òîä÷d‹%Qr›ÃŽÇt— ˆ§©¸½ö§Š±PRЯ«–¶‡ï½?/jú¼õuâ|Šò‹æ¤æ²·uãqclâ;²¶-Ûö³Ã/R=F…ÑlŒÜh¶v°¹Wd‰ÈÍœ*Ìr41¾Œ!uLަp¸dÍ_~Äh{¶¯cj6±ckÔU~è®”qq×€âÈúŽ8I~²AÈ‚¤ck4VÖ½wïÝðù~íoØ­A½¶Q6Á= ÌacÐéóU©<‰Ï£Í¡èÜæ ú«UA‡äkº±­òw±uæ´¶úëv«¾í ½³hHcbg¨Ñà^Ç‘dê§ïÅÚ7çó:,ëºG3RÑ-u.ÝÛœÝRìrõÈ(ât_¬ó×ížý|VÓ] µÔeóóê9&NÒæé¯)ƒ„U4ý7²¹“2b¤×c?t|úè"vvÂ)¤KÖýÇñî‰[ùlmïÊõµ¤É…S?Ç#з»Ô± ÷YTJ÷aM½U‘LSjZ1.úë§j¶[ª˜õª–)ãpíTW$ÕÆªPMç!Iâ"B×!A½põq–ßcjö…'Ø…v;=ŒJ$ùQÅ“ª[|ï=ËgPS/çšcá­Ó¥<4èøR§VL-²„ËLBþmy;íìpËP²ÏV˜}+m9ÚÊù}¬8-*,ÜNZÉeÕoVi<ØîpѦf4Ú6î¤[å¿>¼ˆ|WÎ׳²”Ëìê6‚Sk/è­{_6/=l¯µ:XÔÌ¡LO“[ì[¼5ó&˜lg„Ús¯¬.wšbuÂsM€²8›tÃ]ÝwIïEb'ºCJ¨låžu²'Oµ[ Ö~h_Ûjþ0ºýcö;QtgÚÖ»Ÿus‘¸¼C¿—ÜSÍZУŸ®{¦ÊïDÿ>í\êê_ba$¦S6¯€ BÖF:0b'©¼Ê‡TùAj&U¦Ý×zÜ}ŽÈùg_c;t—Ö›TO[¯ª¸Nî–­¬iøm«R¤6¤˜%rXVU¹|öõv­[gù°õÉ[z?hÏŽ¡+~ßur‘¸6=Ó×e«G›g —k®CT–Àá‚í=¨ ƒO§¤óMIèËÊœŽêú>úñör’N›"„¹})G¢q£æÊ€÷50VÕŒò€ÔÔvÈ´Q¢TKnây'ª'ë{ ¨ÌùúΪäÇÝ}Ä&hc¶^-ž¯nzÝj[u“qÙ«‘œÛ–¢Žöêµìª†å4Ü8´îSiUÞa=8Ò`ˆ'¤·ºîå5¯9ŒŽ.Ž\—ê÷ÝF©w\¯Š9-ìãðÖ¸´ƒ,¾ECTq€J»¶í½|ö8E¼ï»²<5y™5žvV¶Ï<ÏQ’@´«Ýñ÷½ËÉm•Á݇»e¥ò—¶Üó®g-TjSOo:ÔÛDm™}úñÏÊóœŸ œ8r[Ó¯Z0?vr5-´wm Eœ¬M¸ISˆ+o´®¸.mRX‘¬[c»[¶MåŸN]µŸ<öݲsvÔc®zï6½ŸCޏüÇœß3ÏW';—#‘:¾éí)Rkuí¶n³×¸t½×wŽçwGuÜTSæ·or¤äääò!œ“ú;3õ”R£mlYɦ‚ñ¢*pÃ2(팦ћíºS’r©³µ;&l9ç>N|Óín»˜ÏiEìíÆÙö(Š×…ÎW¶sÚÑMrFí»¾å;ÔJ»9ËtÛ¢b¥!«3Ü8Ë×ܨàjÈ{4Õ¤ö‰Â«I†ö±¿&I*Øo][zöm#¤Nõ.:ÉƕåeôŒz.u±ñÝRHœÝ])ÝS·§PÄ:ö@ æ“%E#Ižéµb¢qí$¤©ª»4 Æ›îxŠò#ìN3a¥•GVz¸hóBz‰W§¸œÖé+ƒ#i/Tâh†0VƉœÃ1‚:Ú+M VÌ tSbWî‡|ç« gÏ~ß}wÐrR¡*F½§M2ž”4WL&Î ¡ûIF ï‡#=Q§Ž«nìSÁ³µ4ë‚§Wph÷³õÕ:”ƒy¦h4Õñ«tòÌ>iÖ±±¡÷ÖÓ±z܇!ÉõuŸÜ}Þáû­Ê'¤]Ï Væ}ÝU ý”ysµ2s\!ekb`¨ûÖWéX‘Ó*ÞÊ•KÆ=®z”(Þr6xG›¢dæ 8PbŽO. Ê)ÀÑÇК(½¦6‹ÔfµFËlŠ› :o‡Á ñO+»{¯RK˜¤ µò}ô§×ó{÷è—ÊóMy·$ÈúÞ8é;ÙµtgÑ‘ÆÎˆÚ%·ªýÝ®Hå»XÒL`>jÒÖ†ðG`R¡D úGFz:Šv§­vê±L§rÆJމ֧¥L™¦+|`Ë W#?Rlã¾äü÷+ÊPLýØ«yýK‚ù,§}÷Çte¥^’óî"žjíY}„ˆ×V‚VËÙj˜É³êؘ¥x­iHO@«§A]‰†1hbg=×·t¨ÒÍ4m+[PhãGb~gŽ|z¡dXóW›Ê DhY§šµ„ŸRæö_+둯Šäù^²®ÇºtNG6!Fˆ<(ªuÁ´ã_=Þ½3çëçt6‡XÇ¿bÅ\R1¨Y ìÒ«òÅNÇ 5|8Rìû•G¦öÛ3ÉËô\vùÂÌš0¿yäZ‰}úõÅ])ê誊¦ìtw4 ô°N“Û΂J…ò„ûò]+³Ÿm¤’D64öeZ`ksy¦f˜d¥ÍD=%oÃŽÖ£/›mž4è¡GW<¸²u»ãWol_„Uú¶hBM©ô‘«ÎM¾mæhèzî"÷.±«ÇËÖT$Àeé;2<'Í‘ÙáÕ«=«wSÂuOµ´‹ÏbîÝÞ•:—ç·ol0ÄÃêîÞ>ìyE£»Ž™­_•ºŸ’Â*½b]>n!3Ãk4àW[DVV¡»vÂíc¨ûÍ+®¸<ºi¢™¯UéœèÒ.–F¼Š(¦wïÛ㬥׎{ßS¯·fˆUô„?S•oµåÔ³ a>¶x¦ôÖÛ7ª¨{±•ä”I-¶¶óŒiö˜±O¹îï&„æ_s‡³j¶›ìR¿fýǵ—4;Ö ¶‚ ×€^v''º¬)`–GŠÑ„ <²7)žL³ !ó‚Pôq9EAlÒ¨ÙHWã•u¬gVG“éÑ‚LÀ(؇¡%~eBE3Š÷'Í£¨ºÏ¿7l…ÁáÒ¸^oGyªÞt‚¥Únz—ÕFuèÄöHÖúù>C‰ý×Ý**ù&2פ<©h%Bsí½„¸q¦{ ¤OÓêLŽ—¥¡íÊúÕv•N媫LB{­Àë:Ë:.<žv& CñŽóÂu«šƒ‰ûF¤j •¾uK…·Ÿ'FüÚ~À*xŠ}×ÍJsÈr²|ÑáL>‹bÊŠzad”~€z òµ©‰ý`ŒC·[£WŸ hzñ½íxìK¶+Yiiâ³¢%ç»^GÚ ¦½)¶Ïæç“.[¶Þç¸ÚëÓÔ-»–Âîj\Å,+Ü:ý¯Ïß%-ÊõO‹ÝÈ·;Ó9fMêD–²s²ö>¸Éß»¸¢A: föuÚÎ9œç~NïÐiû>æÝ]_ôbK“¤XôRÅjIJ~MFÚõ½"þúýÄ}½LOWîöÞñŸO—&}ì™ß£}·— q›áARA»§—yð;v÷g÷Üy¢\ .ñ~átùòÖ,UõmT37êê‰o®©žÀB>1D ÝŸ ¼„z‡£ŠlÍ®o ¾‡8yÈí< (>~ºú ƒJ¶°ª{£µåQÑ>K·Éö³[Ib5b•ùˆ€Ò »¢×f­·–áK߸óVÖU©Ç8[?i"qûËmø“FSÇ©Å<‰z§[i†bHFjû?5sQ[ {>3È:7JmÛõïOm±É«}äžMRoˆ„Ø3Ésç‚ú糂^îÜÞùùÓ¬ÒÖI¸¨‚O5LyId<¥«8^飺Ùú=ë8}yyS¹;·;Uƒäï7¢Òi¢„åÂ]$zÉ Z꧸=ú>wÎçœul}ß»“;äÛêý9“R@¥6“XGm i)¬ž#ĽxÃâ(ñÖS¢ÒUÉJP @‡r𣖕¦€( ¦„¦* š|IÁM”üœå ;ôOº>vä<®ó&ÅÖºÔõ…ÞNDî¸ÝB¯’bi¿wh½I^ç<$4ùùÖÏ®Œ›È}­_?qyסQOwBQžyæœ+a]•è¤Ñ ™¯3ìå§w[„ç]œ›©©.h¹õÖý¸_˜üþMù6Ðjñòs™ùûvÆ«ÅAòHuSœŠm¡ ´~¾¾Q•Ä£~c0Õ±#YècV)Exb}Ð[Ò¿>”C31£?<(@€˜½Ý)užDÚÙd‘Ã:Ÿ&qê…ÇÊ(EÍ »ª/N#9‚|üÑ€¨Wï{Þë™ë ˆâ˜m(œ=cªÆšÒ×yU³Œ! ’]hW¯Ð¼òÊwk>±%CBü•‘K)²ÂÆ=…D¤lI·å2Sá+Ûõºæ3ûm­y#œÝeF!¡UEsÚQ•ñÃìLžsxG7”?Såç“i³‘™*Eß0Š*y‡Ð°¯Ôˆá9ݼFdRQ:YË}¾Ós)më}Ø_“¯³Â,ûD%0¢&£ µîÞƒ>ºRA}sŒ¨Žud} %Ps ­Lª#&Ù3Û:Fˆ}qi•\–‹IZAI™ñiQ.óù]™Q.ô~çÄJg©›…ÜOK7jUÃômÚ×X&8Õ²r’µW5³ðáj×SúB6šçJRGÕ⟶ç±k‘BÑ"÷-M ²5îÞ{çàxùëšÑéSžt¤|ਬaÍž\4Œ'[ÍûíÂû¯kiJëœm5µ×²o';£„t³C0´JPëksÁ—»oÝ?ºÀ¡TüÉ’üÎ:Iù1J'뤌oÀg}ªµÎO¨ùë|ñù—IÛ*„¼Òe®K¯]5Ï9NgߛȢ‰Ï¿ AšB0‡š ü9j“KYQSL²×ðŠ{7Ç¥lhqÊØ[vòBº'É¥Q~pçÜáuнk5ÉÏæz`Gó~ý(ýqçÒÉ}éæu-ïžLñ±%GoCå÷$a ,ªƒÍkë%EE´›ÊÔúæTϤh.½u('3äI`íœ)äž’„Nu½Up¾ˆñGSmÙð€ö6«ŒNmwêèûâ!nxä“wIÌð‘ŒåT+Oí³pø\¿¸~Ñò|)C;[j·Ÿfëîû|;ÎM˜˜©uë°šes§<ðé[æ÷ëäß_ºáWÝTqlÎѽÎtÃëšã»¶^qKj¹,¨¸\ þèç+êˆ(²NU+CŸgjQSè·FDOŸAÄ©c;gÂ) úÝÞ’E"‚ó¬&V} ›~èz"˜T|ˆ^tS)Byï åòŽ~ëˆfª6sV…\æô—•d¦GæÜcNù÷Û³Òâ¦Î)¡‘eQtÓdâ.öÏTÒ±­%W0}4c#K Æp‚º'Ê6&\Ñ.wTÊÑ\³€–|Zª!F«=oÖÆ•O«º úXµ±ZÕë×ã^mjTZ¬€þl8{D‰'ƒ9âp‰”âžÌlœ×¶P½sË8˜G»9EÇwkºDÌÂ4ïKw.«m×Í9÷‰)ˆŠË ã+ã¾›rùØtSê¹ß4èñÑžæ¡Â°¡)Æ­Í84sbm¤7kžÉ®BÝ#îŠEœÂÅvz­š÷!cri±nQЇmn›lU&;T¡UôWZ­TÕ¥h{\‹yȤó½bµ<¢‡ ®CÊéPµ¢hQ AÍÈÜ4ÅGéãˆ1øŸ Å::ç+ΡUHúpº«9Þ¯.´R9›mÙì±4Ñk^j¿TÂ9Z \ŠÙw\à{’:ü—¾ì;­‹¸¨NID±Ï5qæM>lîYg~z®Pžq6‚ô‡›°Ñ zÈ+eô¯¨”—íÎm)¼«+O¦¬ê¢jR[b~n!Š6¸ó«=¤É¼!ÍljÞ;·°‘A¨ [çg ZÖÛÒ˜ôi·ÍÆSÓˆ±5S4»Þ¹Ihí9ù½b›0¨xëÝá®sV’Ö •ôÑÞBéØŠÚ4áÍ×k±‰¦¤²>­n8¼[èRe‘‘ÅUÖ¡›Ca²Q¬i1¶[>-–%L¢É¶‚n6¹¹çmA Ê-w œ³ÖÅ [—9´‚rý¾ê;­ÝvרS‘ÕP±M°Þ#çä”uwnÖó¾¾ ‘'*ù«6„‘ýŽå©3ž \f–49d@,ýfÆ–])t}¡Ué¾Ö.HQÇÌ›ákP¤ ÔVxr)àõ~*yÓ+ Šr¤ÄÎÞÕÈO%Ç–ÈM,Bì¢Þ®ž ‚ÜZÚÚq†î¹;íì"ço4ÌŽ ›Ðú¥|¢ëÛ™æ÷$|öžÚ×ÅŠ”ZI³yÓV£LþÅ©ï¹Ä§^F¨&ìén¶¾Ï.·³ 4íxxCp‚’¹‘òç~ûg9×k/ˆ’ÙN»›×+ô]D×;h´«˜Ò»X5uæ}'cXÞ± ·Ûé/?¶U:×Üt|”ËvÕϺé«{aS&ÎÔC ¥4í¾»]ŒcaÑ¥¥QR·Ì:»ÛÉŒî°kù§ÙôOÛ?Æ2ŠÆÌßÍ“x^©ùâ¢\ÝV¶¶3¹A½ª³Ýéj8IÃóò|ï—è-4CîäVM Ra‘êçŸ)ÝÕìpíf¶2^L–PkÓ­¡Q‹ø—MÇÑÝÙ-uÇ1ÖÛz$[›«¯¡§ËúÉj~¯+íJ=ôr4¼‡íÙTPU«•ù÷&ªo+ådëNfÑ"ó.r‚õ¥r™.Üdhû£ºX˜DgÒ}{º°NúóäXHf –*´’f•šd’–TO=•PAÊ&³ìj>ÙNnŸ>†Ww?vGwÁuuùœ{VZYò&—:Ù}„t0'Û›^ntä%y6i$Ù^-¶ÙÕ³ƒtm綺ççD¨ž_l^n#Ðø]°jº“1ݳî”Yš]ŽÐ¢«» ‘ò~mæû;j Ry;²BËBåcÜ\âXEÒ¯2­SR}¶:çÛÊù¢>‰r¹QÀÖ’¬¨¨ÑFVšm4y¶°®í|¨´âÊÅ#NzõhPѳjÝßiɬü7çÄ?£y{-L¬¯ºóoe­UÌÛë7ºØóªºF7$ŽíUÑ¡ÛfîËdbÍžÓMId¹È§×¯ÕÑÎ[ö¾®Ï®%üe6™ø¢+dßn÷KMÛ+3@ì3…kÙV»¯}zù˜üPò~û” ÉQ¢QM¿mÅAÙý ÐM+2ó}+\ÂvÈ®U¶²1'w`è›m¯~ÒÊWìb}±~®¬úªÛ)©}4¢õÝÕ¶d΂1g¤[GvzíU7Š;^Œà¬Æ;XlúWËÌŠgóû¤JÔã;ÚöSR˯Öå'¶mä‚\î¹÷"‡oÖ±mvì©<í]Jfч{*°R¾E(ÚÎÝ¢Q½nÈŽ}¢r™;§’ˆö~xNiûJ ì“R*«—æQÎO“½áxO¨˜Í!·°‹†èȾ_#å÷AWbQz$AÈ»ÓY‘̽\œùÊv´²çK©Ø”«Ê¨ø‘H1-µçw»0Bƒ¬G4MÌdŽë>î‘;¨Z$æÕ{.°h†­P©dšõÙŠ¯6Ú~ ¥}‚6‘rCû­ÕÚS*“Énõï:S¢â'$ë~¬¿{î.xYÖsŸ>¢ÎÑ´`»)ÎÁsÑ*ä@€Y†4 çPEÚñ…«}³å4·‘æùŽ ’}9o1Ã.j$Œó…³¤#Ì¡WMíÝÇèÇÌw™°ë²RùfE&[[>Ú™ý×!cî¼é–¼~Û|åWÆ]‹˜âHgܓ޹á9šÎ™$èŽÊù׌aQJhT(…òŠs·’‘«Õ"]c»³» ˆ¤Ý;#§.X]SÝŒ¼Q7˜M½:˜hª'«_}Ûï‹_AÚT:ß8+ªÛÎî©mäã÷KœOLÕ™E/USLW†·t¢³ÍO-.q!ëÒrès‹™¨žÄ(èˆ?",U‘Ó*œÖ¼ò·Zêd‰XáK98ŽvVç+ôé{äÂìÞQÙ÷[béqæìQe=+SBû°0ðp!&ùr­¤6Më؇yŒõóç.t“¬ ÚÉè.`žÄíqóç°Wj˜eCkj|ò-è`pÏןs³‚SŠ^kÂW¹51£Ù©£K·Cœ vÊñr`ŠÐk-63åÖðÓšiÆÜ‹Ó¸U5”F˜§ŒÓ Ò}ÕwsBM¡³Gë‡cÕã·.W³]Á«*¼sOd¥éMqfÍL›‰¬+,UÌ_Ve{%NìE#Ë®“>Ö, ôÒöžj»: ¬³;á®:Ò;3ݸW¥©š±ÙàõÍ\èÞl޺ؓÓ_-Ž©ëº>ÛMW'Ü;Ýa–zq†3pÎéEWS[PH™=E}-šyÜujv«˜ã+lYí. u¥¹ùöŒå…¬yðšoÌU·v‡e‹Žq˜J!™²>!‚^¨æõ´‹I\N]#’äËSôe–Gè¡J'¬bzÊ5DúL¬ 1 Þ«ñúk¾ŸãïÀI“LýOÂzˆ¹~vœ¾‰_ßE†0ŠIdóŠvÈ!µç’®jhæÒqÛN=Oqîhxa3„\àöPðªÙ±ËX(\âÍÜAÇÐ:;³›Ä­:Æ·=]«­.dLÒwN}Я¢ (›M)­ªë%”pA *¨5œœl6qî~u‹œj‹ÙsÄ,{Å24V!Û%PsÞuûŒsîÛ/¾¯*kœø\1TPÓi‹l©[=“\Fâ} Æ£Ø$!çêïµgùÝS]Ö3ƨ­ÝÏ\·º)=<óç #$sRáu¼‹ä%´=Om£³Mèïµ¢¯'ê}óòoѧäÏ,4Ü[pfNj)'*³ZúÈÄz Ò¶ÊŸW²òÄg=û»¾q‘>}“OºÎÚÄ[mžõfWœCU8E÷_v]ʉ ó&pô³é(-u¾X@€q5™Ø‡DÈ @–®yV¤†jû›îî|Lòœ;¢wœ‰-îIã£~ À¢ƒŠ¹äFÀHÚðØ· :\¶síƒCЩÃÌìÁ('ÝÚzèÁ=(CÚ9£êù DýÉàëjõ®ÁÆœmÇèÅváåfÍ>ºº±ŸlŒ96²lÃõµ_lí}¥_Þ}Í›¶ûè§”mìªgËSÍÇNÖ,ÙJ0ãc NÑ¢ôgeݵjÄÔ’F›~qÁNfákö&m©>z`_=sùôœ’SØÖOÝ.í+å÷²¤.Y³‰¾;×—ÏSѳ–g®}¤¹öíµØœg8›Îîî{kÐÕgÕPüÇ[ÂëQ=\Íö0Ò3ó3«Tö¶&^¯¬æøk(øh½I󜉞ޓ;Ãf$Ï£~ÄL*ðþc_ kPÄNζ;cµŽ½Ñ° HdÍÖL¿oÏ"§^ÛkçWÖÇQG˜é#ÓnD—M<÷~äÝåG»Þá{ŒêVT-æ¶À²vÙ¿\⇩óggÊ+> ÀÙî /€Lð Emj߬"œÂ~øŽ9u±›ËÝÂb‘H'›©Ëш‰öýñÛó¸éÁq(y‹G»—PÁ¸qæ9œ†NîW­)Û5lû'³Ü:dlV'µîs‡Ò(œ€Â¶PlB ÍL1fû­z8™3•b$ŠÓÕg”©û…­ëèy8&’5θJ¼E{ZÁ:fý¡IÆÛÜ*{«0•Š6z»J—8ºú{Ž3/²:$Êù¯.‹ŲŠd“ v…ô›Ýv:Ûòa뱬Q{$‚›cm3he¶@·¸Õ¡Ž5“¿[Cðî¸z•›¢ê:¥ó~ÆÇcöý‘'’Î7ÖÆºÅÃÝâíít/¶Œå|»¶ÛžBo+'b^y6l€„1¸ÜD"i1³¥Š&lÒ¿Ý”IðœclÜíè—EqPOBÝÕt«\t”:uœÕÞëÞ·,"×ÉëöåvÙ::k["(£7žQGÅ:+©3Ä«†(ω>Ð~¯ßv µ½®ÛȨ6OÉhU_ßgÃКË|×®|Jáç?žS |ýÜâP}É8ëÛEØ´s—¹»®¾‰É-E~v%üï×j¹Œ¨¡,ó]ˆÅâ\Kï˜Eº^ἦÐFd׎dÉÑ>í=Þȯ·lªyOˆÙdoÀ˜¢=}Îì;èáIÕÎ,jq¥W ­EkÞ™aÚÞ¥vŒŠˆ‘8:Ô·¶Ã©"¼©^ü]¾ûѦ+ë6öõx”\Ì•,0Š %û{9bé[ z4ÂFÖwØîT¡„D†›È‰´"(æô×iÜû‘º-‹Æ7˜ˆ>«R«e ÷ß}ñòº… $>QŒŽ½.Øw§ÄS5bÇ}}×ÚíÐòSÀÐ¥[Ï´ë Ýß|µ¾í°ÍQ\ã$ó﬿5oV˜”#i»¢îO”ŒYµŠ¦pB#h´’îÌPzj\¤^5 ~KllÞÄ–Ði—Ó.ª'ÊîL¾‘וG1„-Ïë’uͤS»wHK\®MçÓ'> °Ó_Š$Þ²8ÌÕ*26Öre8¼~w½>Õ‡m³%õìhbkÌWšŽ‰q%œ•í®¬;]õhyû=¹7^z%±ö90¾áû¸µÏô©T³{}{+ÓÛ:ZZôÒŸXÝa9d%~uijðœrÙãÁ4j M ‰6m|EÔ¡¦‹Fñ¢kkEª>V4eß­žÇ”kYBFî”ìÖ}Tº`cQµ+…ŽJÑ¡ñ¥ö­´äi•òÔª¢{£ž3ÎÏe$&v´ºý¯Dæ2yxaÉ3æ>Þ^$XùƼ)o=®‰ðœÖ¤ãµ† ˜­(Ès TMsÛ&sê…á…sî|¡”EÊ7uô“šM4îîlpéz7¢’<Œ›•Ü×v­IPÔìÍwg˵…Üia. WÉÌ!KX]Uú«mXÄPnôÅv7£ŒqÇ×v§sìÛ°ÅÏrr¦q/V ä㥔ÊíVßVaûE9Ô}TG<®1§Ì!àòU5ćr¥«P2*é[#§t‡a‘èÈÓbhô8R:-ËVx°¯Õ2ëE\£ë-N¥Ý=ˆ—[¬!ÂqÆåÑÆªÐäáJËMbŽÏ5šû)nô¤r3»d]\if}·¢qåµ€fýväÉ ë}YK;¯÷{4[JTáDFm±®mA×hÿO]t%JV…Í7 ëôB|S˜ýfñ½¢uz-¶Ù¥õŽ®žS´Ù‹-ª3~T‡)ÅPw]Ä œr4r+Øœ^ôšÖqÈΖö¤mµŸ"Ú5Φj<ú5lJ.1]§¨,øèÞV-0[5³WÖ´àÕÖµgiéÌjA´§WíÓLÙÏî.äÚž;Í ^Á(i#(šI=E×ñ¾Ö‚E~î_á!ßÄY~"†…OÖäÌ7í°ê J4*úH@™ÈsÏwØå™x¿hÞ_™rÃâ(‹ÉZ¿uÏݧÚ¥õF‘ŽëÛ¢Ek—JUáA|ê4ô¸û­å˜ì_t‚‰ªüˆþúá]IòJÒY|þÛžØnÛ§„Ä´º ãëOÕyÎÛ£™;âPš»Œ±½~Çç‘åúô£…êçבçÊýÛÇu‘û /,E¶3ÝÆé*Ή!GÛ#êvaÕ¦vv6Ι½O­G­ žž÷´9LúÖý^òÚ®QÝÃv…};[j~LÈO¸yüËä^õsyÔJ'Èg)Ä蚇É"†wu™¨ç-m4½c'd‡pòîì]FK@s,±¥½]ÐIJ yÆ4è„qxöð}5Ú뻯"fó<º}~û¸Õ¨ 6Ó\u•F5ª­8¨ÑÐ) mªúH¤ÏÑUÂØBüÌä£ë[8Fµ¶¬&õ/0é'¢(æÇj,×Zµ¢&•uï«ÆG±c;OÌëÎX9ŸsÝÚžN2c)Ìûs‹®çMK—Õ^!))$Îò™Ö7‘š©ÉFÓ’jß›É÷í$ÞY>³‘cÒ”öç„8+ÃsŸ3ëÖ4¶Ñ&±—¨L^CÀß´k a„R+¬AàFS*Úº¨sX:®¨ªFÚ@ÃÈ)IáoÈ8öE~ÖÊ àCj²«ŸBi¯˜GÏt9ÕúºŸ4ËTþãÚùê“’\3áaAw=ç-×m³mµ[Pg³™Ôéúš»I^¤CUz‹×è'”ºÆL›:ç·aß“+É\\~ŽxUïÑÏÕM8¨Ûçç±àÏs]šcu´ÃF³Ñ<ï»YUQÊèñÝÎÉuµ©À¨ùÞ‰–œ–¥µ‘÷'yW_,Չߡ $‹C%>o%3UYËû½·è“~Øpcxð!7F>ŒLÓP@óaàx^»®BESŸts#ºÚÎûë«,‹õãQóé9‘}Qvç<ªm®àÖ÷:‚]-FIàyÖX;~î>}Ú…_7Ÿ·8é¸ÖöwŸ:‰îîèhý§zúöLQõ™è$ßȱx_ÌmaLÙÎ Ù‚RUsQ†}³öç" ú¡QèŸ>¹e$|¬ígľ®lÌe‡î/¼*P­ ù”NÓÝ.‰d~¥3}·ŒŠª®ÛÖ!PDW “­4ð÷3$"±B.r½H’wB—ÏžÞWaç®ÜåÊÈóm|%…ÚTýãjïjÝÈ0e,¬‘ÍQÊè\ëS)æÓPÙŽE(•&-@šöõaõ¤Oº}ÏÔ|òíã:Èâ›,£_š)-µ:¶t#phêž*¾+X€/QOP!|VaÌ'#Pn£¯JR*,•ÙÇb^­ÒÞQr¬RC¶4…¬åD"”H¥(ªl–h6oS8Û>u* á'ÌI¥,š¥Ò&Fyˆ™ë9öÜõް©ù2¾B&6k;iÜ… «R$à28;ÂõîOf=Ÿ ›÷nNÍ)jPò‘<æŠàUû aÌJ‡6¿†_æ¾èq ïfMçÚΓh/&|gŸjRKUNË^E2ÄÚ.îî¢Ô™yë\)lÄ:½M2T*?g˜âuêM•ɘ2{äí<7¾Ðôÿ#?2 §ì[ç.ô€C„†7Ürª™ôžRy3Ÿg ™wmÉFVgåGõX}0ãóçŸ:èœtÀ÷v\¦ºäÓÄ^ÜÙä´ÖûnèŸlSûYóûZò’þ7°þncÛJ¹^M¨¾Ø0¤³ËŸ^É“™õWÃùÜÆ||óÊ—EÕMþ{¢L$ûÞ8|!;Ù7$óº§IÝ£„Ð  D9mÏ­»NÑ8m±“Ž$W]}¢˜Òi< ?6#?nj‹ëgˆè”S%ݾ5®é±õc“U¯I6“fôåÉ&sácl³'t´N¥è²_qùò¹E:û{E„™&aQûçwœ¦KÒv1½æ½£÷wu˜»ì»®{S}p ,˜ÏbJOFÓ;ÕµQ,ÎñÅùŒ¯—¾6¨U;Ê„7Ø—É^»eÈï>ó"~¡ú…Ì0ôNSoSbgÈɦÆFÊÖkYÒ}Ǹð®I˜äHŽ^Ü$ݸNÏ$TèëïÎ÷{„çî;2=ÛœqIz¾eQò™Ÿ'k >$teW";g[c#ÖvÛÊ:ñu$>“$¼À/&|r)Óuú ]=F*K\Pð‡Ñ& ?XwŒúʲ­«ÎˆÑyÕz3û¦ë>S%öÀ¹¦’Zêgz9´3õ³PXPPDXa&j îÖaa6ÍDû“>éòœÝįŒ¤ÓÕäsffv½Š°ÌŠ?^ÏSÑ7ÛôÞj¯<¸%M«]B©½ÛÚ&¥„UÎ9¨+ömLÔëéÆÎ4Úl¢cÆvo,—´ÞiVe¹ÙP‘ÎÖÆ›Y­oOQ„&_hôû<Îó5±Ÿ6ÚOs>ý×ä8O¨?}›;A$¨9ØÕâÖUÚîñ8ŽÞ´×>2e–-ó‹·¥9O'™Ë ü®;­Cik­>½d›`D0¯…} “_u¢În´(ºQ‹!vº‡QÑqÜÊÕñ馾if¦ôh<óG 0XõÑ9Äž3ðÛCØ}”ã«õ§qUú\ oÏ9½CžZ› józ&ÎM~w°ŒAtf÷ë×uƒŽ–b7Ùˆl¤lŽÓ»ŽÉ>Q¥¶ô’Çmç+šïqÞ„gL©Ü×Na׭ʦ}#m»¹ËîëØA}RûDŒÔ{$¦¶í»¬ã’ÌCM¯aÕù¼Ží&R¥~ë-O)¬øÃ/FWD0Õq½oB>6œ^œ3•ò$2M)2gb›®}ÉÈ%RÃSâ(ÍøoÁ¤¯I¨ôv{cÂ#îÛÀ¹åŠù‡(“ì·Õ͹7«>S;,ž†ú Ï•õ²ëÙ…|ⱘÙ#>P‹çu)=¯jžN±NJ¯¥3¾e_Ê m¨Û< Ýog°àá#Aï4ä$ç3~ë«|ÞûíϳæW&bPò7q.æsÉ;çH¦ùÛ|®>{ˆÈ‚«ÔÌå½~¥Bˆú(>¯~¿cçØGÛl#!9ŒÂ¤“¥ffIyo½ åp¡h•‰ ZuÀdySÃlÜé@@Á‰€ghFè±=¯j!ªôг>Ê™2µBH茌„Â’(j7ÍÈq˜ÙDEr¦ÃYžNxª–‰䜪¤„'«í_o³Ä˜É ä¾Àýáæ©èµjÚ!4B¯D)É“SŸ")»{#¯,žÔcëç>¯‡ã‰J†EìãaÖ‰¹:¬%+E18CÄtg¼Ø—ÜŠ,†IQ~I9*ªQŠzž\õt¡¦qÇs¹u]Yêy¨¯X™%’ÖÄÛfûsîP~ÅíôÓ4žœÊ†fvŒÈÌ/ÚÂE0Þñ3"“îcºÂî®wM+…ÜÈ¢*‹Egi—Ëí®£$™$%Lí.¶ŸM©ÊµRúQðäQÝÒ‹— —Oɹøb ©AZ!Ëóß^w+¤%WC—‹‰%TäŽÏ";¾î>U­jü§ÉÍva9¡’ªëqÇØÕAB ¶ÙGIA&ß“ÙOSG[ßG³ï›Úä¢ý_¿RI›YËD‰^äî½]¼•'¡´oÝbTízóÍD…D™ïQD$g ú&q–Z/cÝz@=]ˆpž&{Œx!l˜¥úß;É秊DS¡‹¡‡­åòŠ £~ÇhÇ7%òr(pQCvµ³\5by& ¡í²Ãé'ÊCéi1£?™UQTSò^û¶W¾xSίr]†(+‰F˜Úk6´®ãêlìÖ üµ~u×ç‘qLíÑ §çÄžuË®¡îÀgÆs[{×èۨߓ»íã"˜o¶ŸT§'hçP ¦êÈîyÜò\÷uq‘gw5•<ñ=kK°€âHÓ‚r(‚òBÒùÛHg˜bI¡¡Ï9T& YÈ?]»|ù[Ê:‡ê8©ÉRI 9GÝÓ£®M+”92Š\‘¸˜Iò;½b©Öw'Ýg×;WOó׿zðÄù‹É¢T6q‰ô›í•NžÆ¤ yºO@1sOh„&ˆ((HG;z}'\ÆŸ_}ÁÂ|ûî»Rõj3‘¨W×»aÑùö5ö·ÖV¬¨£ϲ©Vb«gZÙ'2¢ùÔš[Ó§“<òz WLcš‘dƒÇš<â®y_:Ÿ&ó\\¶Ë¼È­9ÙI¹‹l‰>»g¶ÎK kcµÉòeúóÆ´óÚçÞUPUjÔ£ê뻊ù%}^²åÒißxŽÒyq ÷vùö~Hõ~§r­TddÖUuK¥|ì|û!:%©”¼¯»bp®H¥U''²)…¯çÛº¯ÈÇÈ^“øŸ>ÚäÎßÇy%Ö¿/ròÇ:æ•]”š%ß’ï×nAO!Ž^¾;žQÎÊ,’4¡Cû¹j'B)8P¦Õõ=M”ÒFdù9ÝA2mî½ë‘A#Z&¤…!\µž‹s”êý~}è«)zÛÒûУùü÷ÉöÛ½ÎZ–ÆÌƒT(ÇQîOoœT¢>RT$žtÊb%¨QPQÎDUÁ9è.Iúä_×ÝóÈ®£^U‡Åéìd5(]IjIÔÖHr Ú&Öˆ¨*hœ*Š.[™W(wèÞxDN—Ö¼J€¹="ɓٿQºÃÚd%#™û‘Å(2¡{¹¦.@WóȦ*ü™ôH'¸×}ز{ÝåÉÊ#ê9>C‡ ²ðÅW'r.Pù4åNk îl)}£¸t¨I §ÎäçÑgˆš²“E4…{¾|!ê&w;¼œÃÖÆGç°÷[ŸL';_;ÚöL™äñ‘£Ë”ryn€›÷íúª§·”‚Á(y·á †Ìu^'Ö÷¬Hú,®æq#ÒuTätè9î æEc8ÒBøÊ‹Žv†âêE×î;PV‹-C2èÉ“ÊsŸ.Dd*$Û„G'’ôe™]T„:aÐâEQI.èáZÍ+@¹$èBI­»»Øz! žŸNL)¯yEÓèŽO"®]~yì§É9:Øøèw(¥M?¿{yË•ö•î`uÎ|}BDóê²C‘¯F¶Ø æeú“Iɲ/¯S2&$;ozSH¦\N=HŠ–eˆ¥ç—(ÝÝ[LÌaôCä.dòÅ8ŸÉ"‡d];ä;§:ºîEQdäüï"õo:DAGÔȪªa í(^EÊN\ÖYç‘p‰ÉÜJ¹›ó!Ê©ˆšAW¾ŠŽK­;y;œO8œGAy²Šõá<§'¾@ùPPæ™îO%3PPWsÎe¨€ÓÓïH sȉ›-æ›¶èž©0ãLò]®ùä>IËãëÂyÇšûeyÔ$œ9ñjrIõ3c™*w[}^ߘPêÇÝHH:ÏšAѱ*¯­¿wŽÅϤÝHW"þØÞiôù^½³±ŽN(\2÷EK‹9ù…éeBΊJò}÷ßxî˜Uvä÷[îîJÑF%Ô‹Ž÷vó”QsD9·ž{%º›*§#]K±ÈBªC°ª Ü|žOmÙ¯]›'”_IcÊ"Ôžd\.Ȩ§9ýÜóîë_Y!É'ë³\Ÿuåòø>C&~geÉ0/;ºTä°.\*&&yùh7;CƒääO“„'JáEêÙF{¹ùÅè\¦ó‰ËE¶Ã!R¯ˆD@³4yœ¯\àòyÊ(p´nI7 M--:{Šäw<“TôT•¢Ú|‹Q ¢&ŠÀÖ{¸ Û“ªëaâ¨'Þ¸’[×;Îðé9›×ÎäSu"÷ÞûÛyÆA9®NBpŽÂ‚î{»¶ä8r‚¯8Qetœí£ëW.çWÜ.vDû£¹~å Ùv«IŠ´®Ü’,šæ õ¹çriQJ…ÄëžéÀ¸yž§É•A|šqá\>´>dÊl.SË<ãN9\5ä;¡¬zî „O=Ϻå@R¡ä„Ó&z ½[/2áq>t"›äÇ*r)ˆw&¨À¡ÎÓ”Y93Œ5…]t È«¹&zØç* 'ßF<çë |›ËÍÏtvp7Ý·É$‡‘ôµÖ ׿;çrdj‰ %¡qÉtm"œézÏG'8^NqÉ8G aABT'I¸@•PÓ¹Âɧc亄qR˜R!‰£HéêJCÑÉä<ªºÃÔ‡™ ûÝ…Ç!”G #]Àrît‚8UœmÎ R:N¤9 V•䜄:ŒA¥9!¥t&Ž@SBu(P”+!´(N È!äÓƒ™Þ½Ü׸^£­– Ÿ8.;2°L÷ƒ»º¥£Aìqçš‚Aî&“¨ØLû“a×®cÇ £Ž<±Ä®‹‡Í$ùxGLIj€¡ì×MaûÂbj"|Ç;$©Ï­}ÑŠ÷W—™õ¶©åŒš±NׯNæëJ`}"Í+Õ±)äÖÕ´Å £RR»­•GÇn‰ò–ºñèçYSXL¹Ò•W‡BZÙ»¸‹­jœSÌHêØ{yhê:ô¡u~Ë–’³º¨žš«!ÐÍFß6¸á@láõ®\™Dß.ë%îRnÙÂu€úLHTB“aXœ#K^³Ç3H©ë(­]™Í‰¤·ª ˜vãl•¼(àœ6ºô•ˆ}Ítäñ´í¡¶®óˆ­)ϨÍ[£c|úk:½g©›¶s׆ñl ƤqhÄœçe®&ƒ·úGœÂÙ«lBæ©Ü³‘VTÖ3Ýzsˆr·Wgk³Úbiª¶B ¦n=j¼º(rë'6šAbaY\‹ó!c¶NÝË€kà€ûš0ÕG(Ó|pº±¿<Òœ?[Ä÷dÚ½ —'Ù­Öû-$U¥Òõ¥Òz-­–Ær¯rmÍLÜ dæEM15|'Tܦ›WÑšuÖÍŽ:û{»Ü³ó"V¹×4Yí2íµì× nÎ׺‘Md€hLÁMr¹j†s#‡wLnu3²'>ˆ×²îŽwuºwGâû6…u©ÂYC!NtÕûåÜî›H.=ÚÆ' v8+ìà°Ó‘Ç­y<æ‹GMlhDVŽëz+e¶×>”Ÿ¥úçß‘&tè*üUr»J²« D_Ïw¨A›¯{[/ š>V[mb7¢¼«ºsU_p·›í¥R «¯XW53Š:³U7íÂtÝzèW¦#&Tªµ*½´ÞÙÜï3½¦yæ°Ðý­gJóÕ=o¯Ÿ;‚g#ª¯FºMž·„ñÝJ´‚×ÜÉ†í¾²É¦iç'>´±tÙ<òæ*¤mÎË¥ÒUki±Êöe™Ik}i(umõd˜ÝNw·†ßk&Þzî3SašühíÇÇÞF¹sXU5è>¥uÅLøNÃ\ä-ç«Ë¹»[²›f‰2¶šMQtyµ};“ÕFŽõ„; Ä좽V2 0Ÿ¯­aQ tkXAPéVÜÝÝ‚ëa ›ÅêKC8›»…r¹ƒzßç\Ÿ}N6v©P v G“ço+\’vμH,Ë{)–N)”ˆéÜt];L¬ÛrÆg>ºæÚ®Òöy Ð §tÕ¡Aw”½Ð}+gV›Úí «O6§wv],²õxº\åö’5L­·Ûªk¬,S¹îM;¤y®ðdrê±ÏH¡«¶zÄÂ.sFyrálȆ11ÅzÍ·=êëéW¸Qjª=-œùÞÙËnŠï·{ºjƒ£zšÅ÷(øÙ&ö}_8¬­bXÅÛSjfxë­zIZ–Çê”Pæú¾mÙƒ½­ÎˆªÐJsP¶®¨³§=Ú¹ë7&êz„é1}™"e±ÇÛ=Öu÷.†(JÜCsS,ÕÍ ‹)jîMQÕá9:ͱ,Sω±ZÂÆZ[8kYÛ·>JxQlïN裃"¾ŽkQ+O·gÖ)¤“¦Â:í Ùbñíº÷XºÀ®2æÊ.×Ýn–ëÄíNÇŠ£Ö¢sgZÜUË7‰af¡Üêtéz}Ó—MH²—Ûyš.Ñ8еNvfÍðÜv÷5¶ÚØ2àh#q–ú´ÕQ˲¨ÇE~’ÛÈVk ô‰Ù%rÚõ°=õpUÍV»–ˆ¸v´-’-ãf:åØí^¢#u’¶YݶfægìÔ†çÍö»‹öQ||¾ú|¯vÙôì\™Êå¤ñ­–ôŠóQ ›»N°3T¶¨ú©S¨Ò+\"Ô]ɹ©xOª™k:!Á÷YÝÏnÒl®mË,s¸h‹{3—,vë%†]«]Ëec‚³¤³.\œå¤v7TGUpüÏ.L€*°­AGd~“ WÅí¯e$Z©r&¸[ݸîdGuÚØ7윹t;œ61Ø+b¨°Ýx3Eö›“ëÍ ªœ-ÑÎÈ臞1oK%eÍUCŽ]Ñ,î;2¹¥´u­Mнºú¦ºù£mo;«L82RÞ×^•B‹«#µªäžäéÄö“‰^ îîtΙðЦF’Yµ!¡¬«>³º6‰ ÈÔ·¥9;Þ¯ló’ïJŸô\r*–TÚª?0R±É£÷tæË1-WwTk]ADÜ·‹&UFÓÖxÑf:©Ä tö•7­TH^ÓgR¶å³¤Á'™ÏŸº½¹^µlÕ5–ÙT× ¯MËwZîÁÓ{«ÛebÉóëW+‚p…«H"ªV¯šö[*û-9Y9¸R÷VÇE&{s‹t‡±†|  <{¹t]ÈyìúÕ7T*»·cÑe¶L¨N4*‹f¨y=Î Ò<ìqUƒ6t¦ãŠìÖeÕqÖÖsc8_eMoné=¥ëÄXUÈöÙ·áè1Í`•€O´ª¸i!÷ÕJ#•±sÞNbÍjJYsn÷`㌅8B!=³Èö0íR:¬’6‹ÑàY™Ü£ƒÇ$æ)Ú'ÇGyÇlOÕá±átG­™JifaΜKTô¾k¯m&K§¹I·tŽ-µô¤y×kB:¼r­y¶¸ä'œu˦BLU çÛ EµˆÓOŸ¨µMa0½âÒÚêøšêe(Ø7ÍHFÉ9H(ŽÒÅU#v4Î VÆ5‰T~„—Žyn—jÕ;–RFœl\ï>¦]«œ‰Ð©š2 ¹Òu ×»4èœæºtÝ'eb|i}4Ù žEö6m7£tóšP-o uéæÓPâ×cTXš¦ì« ®°7B¢Í¸NTÙfY=ÎÆÎ$ õ;d–ë–e3µ¿=;iØ0¶6¶ÙnÎ7ÜVŽ»§H.»„dò|ï»Xº–-œ€ÎØohÐw3J ¶RÑÒ®’ßjëÎòØ]%“Œ¹ó€¦q®5÷_k^<¤“‘,÷?Anƒ¸£xáhšjDu¼žºäœÚXDãŽ*[„¢z7²•SDÖœ"ä~­º ¢¡ ›š‘ñ]èsQG”Ý1\Òw ú­×]TNf%oIhë¹£:ý7L–CœÙÅ‚ 4NªpÞ ÓG¨’„=[ÁjœŸuS ‰²¼cdaùnè`onx¤e“ÕF¬’;6| dÆ\ºMD_¤Áóâ ¯±>óå&ØQb®ïM¥¾U@½RÎucîiÜ” ñdЂaǺHêgržõ=æÝ#é@ò|Ù³§¡„ ¯X½ djt^ &aŠZVz±EǼRŒð”yù^³È0–ñ‹]=ê\Ö |ù1'åBdߟŸ¸EßLNä~·““IȦ]tmçÉäïF«o 8ztŠV}õÙš‘|Ý#n¬ËÆy|n`ÈW¬ð©t\Ý:µ/8óXcî'FÌ4é vè‹"SˆÖ›–îN+¸Ìº!¬(#œ6ÌZ4ú)²*îL2o(B­Ö]GÊgš]JºÙNMµ&è>O¤ç®™¨‹_vg‡m¼°Ë™©‹7ãRl§^o¦ì>îÒvÁÝlÒç}Ó¦Žv¡+™ªtéܤ粲ËYy7ÕÆ9]'f#XÅ¥¼oBYÕ“».]ŽD#ç+x}¥âÞ±Æâß4ä¬Î’{¯l¯gºdô᎜Ɍ,&Ýw¥éϧ¥Û“cÝfŒ£b¾æÊÖ{¯SµäÙ#Èòh[­h[¶‘îäÆHÝÓ¤eÒ¥; ð¨…s!«ÜÚº›ÔNÊk9ÊdXû«2}±Ú¶&Øý”(BÔç5(¥»j(:Šðçºí̽ÜúiÕó3Û  n#¹ûpŸiøß@â/@»}ŸNàZÉ+1–›fa¦\‡êŽ;+TnÁKi¦iæåM’Rõ‰Ë$Ô(¢oÎGÍ•?5¹½'Zw» ï>æ&ª"±cîîÚ¾û˜åãºn7hôwG Õ±DõNhiU$Y»-Û¡fÍ ]Ýã’²›œäãYÝ[Ö‰l»¤Îsæ. ¤<õ¤®­Q5š ’ínki8@œZ>±émU²·µLG2Ó-}QÑÎk•D>—–¹0†û»å»ëUßo\¼ŽÛÙqBG‰XK|rZ\›Êºanm1€µ"gÓKS-ÝtÉð!l<+z˺23£$ë#æø‘ ƒî%ztìH»µÝ¥J^3ÍIPWc”±ª6í3pª.ÐæšgªŽ[6ëÊ-ÃkIÛ”Tê¹ôd뢙¾ª& ÃìâFç5ÕŒ—¥£[X}¤ùðìE:ªÓÔ¿\]Û«·sõ²á¦ˆÇÝÇÎØëO{&Å®‰§gLÛš|a®³7ž}mšƒ-­´TáLµÂ!TÔ¾j7\-íœêo!]˹ΘîÛ±c×µ¹ZzÍúòœœ$P&¤#î‹JDú½´ ÓèØ¸«§+#­¾dN±½T\¹Kìåîàªj¹ªuRËæöEâ¹É®# Ö®áèž0šWC»¹Nî¸w‹¬½¹N☖™ô`½÷Êsç½~Ó®jôã¥äâוUQ¹ÊIzYHvN@ìÑt¨jÂå#­7m6 mw3¹cÞËœQ¤â•;:SŠ šä„˜ÞŠÇ ³Ž-,åÒÍ+sFÞœ!so³‡T'Ö­…ÚeÝ#¯µÜ©k~éU&š¦ív'a­ëawBsNKNBmôÏYw39!Â|ûÜy­¸œüÓÖ¦QlØZ>jÕ ªí¸Ë²Ñp›0»¶©¸¸/ 6Ÿ7Ó+lºË$&E_P‚Í‹iD¨‰“—=ŽGeaU•¿&$[(FÞ•à€‚söê6¹ð¨›~™çùüûóøüþá~kU’~ æN*•±]ÄdPPq¬£\)ïås¯Nèš«¼iÙ«[N²ìN>úðŽ¿A…úß´þ'÷ƒô¿g÷ߩ䨨#Þ@¥úð‚™QE|ý¼zã"¨}gø8EGhD}ÿ‘ú£ú_Éý>ý¿£ãìÜÆ;Šª ¡ð¡/ÖAPiEB$TQH$•ûˆˆBùED•LˆŠ†Œ"  8ª~)ó9¨¤¶MQQi4-KJ@”Ji(rí(M„'."$"2í3š†ÔJ"®19q¤ M" hM¡¤U P¤(ZU(D¡J)B…¡¡¤¤@¡ ( ¤‰*”%´U4i4h4”‹!E« •ΕÉ6‡Nk ’–QÊ ´N--R¡¥IÀ¸J´RЊ–I\*®d[9!¡i48fÈå Õ*äa)‰•&p#2åBHIX Œê€‰ª¦4bš EÄ4Rb‰(ZJ@Û% Ô캪` 4šD5Hâp­ ³¤iª‰¨EZXb²*HÄA­e%p£:*He"‚K+¤rÌÀÉ”PGT®YiIR…§*ª”Jˆ“ d«fl(Ñ,5ª"8¡UqFŠ b3gQ"®K4©VQH—SD9…œÃLÊ“–Vd™)LªaM2(iPèU4¢é€‡Bht-@ºGBéÒÕSC£l:š"¡Ó¥Ö$ˉjʦ•2¨¥VQHBTªˆ¦T©RQ Ò9ÑBVQ¨Ë‘UÑ@N]DRD™YÒªÔÚQ)&)²+”%K h¥EdY  ¤ÕH’,ªŠç8vd ‘LÈHQ ¡Ad”¢Jb°"ÖUYFEaFTQ’e"­E 4dÔÍATè­4´ÓK.m¢®\¹UÒ4Nª™•$W-Y3MDåFÕ0H´¹´0[ ƒ‰‘jœ)e“K2È™Ê"  ©œ%J’TS ¦Ú’* ‰  Òê„jŠCNƒHkHº ¥(Ð:• ))R¥@•J¥i¤¤Bš)Õ AT¡KRÐÑ@,à)…À(ÐiÛI$†P˧àÕlI"ˆ¨ -YEب$Ó…2€I :¡¦Š)(¢šM:µVȆjM;HI‰Á0ÈÙRÕD1EQih¥5@¢™Z™ÌH¹á©È®iª ª)4”…iq6Î+K´™d…W "³5 ª ¨‚(®ŠW lŠÈ (°åRIDZ”TtÔBdL«DeTr™F+²NDD’\•‹ Ã4Š*,ÍRºª‰¢SQ&¨£CZJrJ•5 &•Ó´á¤UÊaX´®k,ª‚$VX¡È¬Ââg"²Ò å¢r£“*Т**Ë[($[)¬º FLÐZ±3.rG$Š…[(¤¢$„"± Ò¨”C:¨u@«’$t© aD+#±9&Š0ŠL ¹HÖQ­¡TjÈŠ.QQ©(\Š‹—f)¢¨)jš*‚'NÙ:RŇF„¤Õ¡@  ZQ  ²4IH±-²º¤kC§JÐi]%:jŠ•¡)Š#Jè(Fƒk.Wi4†YF±;H`RAQI!EœŠÒ´É ÂÄåT) ¸T­1%"‚åGH¨I¢+–(•’¬-FŠ6“"  N‰ˆGNQ VšYW"(3*†™\Ò$Š(¨’U¥¬•U®œˆê!™E]9ÕPS …bË%еm0•kB¶jTÊ.DdÊC¥M”\ÑH(£BéË–ª³šËT.\9Îr¦ ‘T\ª­agL‚ªäI‰©tQ”DA­P²äY$’T9j'H¹IÄÊåÈŠ,9šZ¤Zšs3‘EH¥MAL#2Ì$«f¬ç ¢(rЪa+#+…Z©*ˆj¢¨ˆ‰ª¢ "M±CÍͬÑLÓU4DDU ±¢…¢¦’ˆEÎab4*åTr’N !UA­K‘ „©N\J(Õ(¬‹•ApLHÀT­BBªªL9¥–ÕiˆiˆVŠ&DQÄåU+"iœ¹r«R4§eœåQUÈ´.JM6rΓTª¡8•’ȸA„†WLéÖ¥I²Œ¶ÕPºC¥ÐTÔ…K @SI¶ˆ¤H$t4.ŠÒ!ZH“KI¢µªF]&‘r• H¨Š¦’Ë#e„p:‰QQRUt$À²N*Ò”™ÊKÔ5‘\µLÔ*Œ“†‰ªeI4“9tâQ´©$€¹Fa4i„r°â¢UÊ!$°Á•u©’T–œˆŠ”%UPDš+.Er‚ˆ¡:EHˆG"ªŠ¸Rp4I016s&˜@‡3.Ê“ª­T#RPâ)A‡,9À¤ìªU¦jÒÉVF!b‹LЊUftº(JŠ æ¥kB„Â,!VVU(E%bJš®2ACÓ¢ à#»H )H*Â@° * ÀU ¢*Q¨ˆ0($}Œ}ÔED?jÿ‰¶t-Т… 4­SP‘-%LIˆ ÅHУMi(B…Ý”’òС¶]  QLXW«þk{­šcN„î·;XE aDå¯úXÓ.´° >ò3öÚ¡ú™Æbs RÊ‚òOºŸÅœyûoë¾lTKõ[ˆPKˆx?ÁÍlü“Ñro!?D~£Îz©îÓ,&Ôn;?ëÙ¿•_±åêÇŠ1˜T þÁÿÜa¡ ïCAE5GýÌ\áˆ%ÐêtªÕ±&©V|ø %¨¢¨¾¶ê‘Í´:S[þ¶^r÷,ôž5zt^ŠPÉÝ××·8ˆCÏöõ¼ï!³w×{™Â™öMÑ s{««¸ïùñÃîZBdqbÄÂŒ¬×â*"ü9Ϋó ä‡~M*}@õ¿—×’:Óÿ‡½çªß™Ê oP' üí=Xþ¥|Ï‘CêÙëbCóç~w!óÐ!‘N¤O—#ºÀu°¼©¥ôAã˜ó‰ñ.%tÛ¾¹w¹P‰{»ŽÎd ïuÅçIë "  ý0÷¡@ú°PÐÐFÙˆbKþ~b9œÑA-ÖʨŽD ¶”$Á¤¤ _úDyB@]78!UR¢ŠJ(D ¥ ¡ –¨Ò€¯þºƒGPw:9Âúž±wÜyPpœû§Ÿ·9NM*“ ói~¤âœ ²Z•nI3½ ŸeTÔ« HoêãÙTD^KEïŸÿÙû˜ýlr(h†nA|îOɼŸ>åtÛØ‹z¶0³yY=¶LL‹’Q|‘ÛÙyk˜QQW®xë29!ËS{3°ªŒ+¬îâp”õ'~N8i_\áÖ<\—©9'/é™ikg8}b RÁE±8ÒN™Ê.þ…Ç\N’Aý rN’q„WaE*Á2oýIä8T1蕬ŽÊ™üã™Uw¨õ#…S•v]а.Êçd–Ó¦B˜‘\OëNxbŒ¡$Žs—yŒAG!|Úw PÐð¶Œ18V\.r¡Qg¨>­‘}"#Vâ é‹9HbpÐ,£$är’…½àç(¨¢õl‰;èâ½÷Tõ9å…QESÊÌÉIö6|3yò¢>õN‡*V‘AW64‰ÔP\€4©¡Ò$ Jiêi:„Òž®G%Òi¡£ÈH¦þI§aUUOPúÐåÏ©ÎØA+Üër ïwcõÜz²Ø/ÝzE B„‹å¢ìBæaØÇ³äG’ËÑŸ*¢¯3¸bS®­dXaWY÷9öwlÉ#߬‡ÕìúOœ™'xv‘ÒÇïÝùøú-X“ê<à”(’€ ¬ž­÷2~ýp‰ót@¿0#á7ÈHy½ ¿KS‰9>ð}Öõ&;ˆ ¥úb‚ §â?(ã€BG2‚(hZQ¤¤)( šJ˜‰±ÿù Â" jƒ(HNÊ.9ÀwFUL»aAyºÜ›œøÎTD_ áÑyðmg ´hˆrÎUÉÝÁ]¸‘žâéM ÐÖ!ÐmosUÛw„ñ*_%ô}_Ÿáçsð’o rŠy]¡Å ^phJ ó³®¼ÐsãÈ<øÇçëªqÊã )…Á0€uÖ=½÷‚–‚&€({€ÐˆRÒÐÂfX¢i(Z 9:{‡OQ¤¢º´LÒWyÔБ%QG™ ˆˆ;Æ—*#ùð𢂤ððáhæR(µmÈ;æ& ™a hOR|Y~ˆé·•ú¾Oþ6“çÞÚ­ÝSHΜ§v‚++ü¿Æc=Ðÿ~.@|iJDR´ PSH4-*”€‰ES RTÕUTÁSW×Á¢¤ˆH*Jš 8r.Ò…¢P*ȈåT¡h‰+N’‡µJˆh£QEQK«ð8pä”é Å¤ÓKl`ª¢^l°L£L´’TÁDATlšAvWVÈaÈ(ŠS:NíK%kðdóãvWxÐZ…Ç ±êË"=ïaz Z@PT³ÝcÕò!ýc‰6PþUõÍß/[Æ5û¹ˆé¢Jþ‡ú©Þûú?FâjÒ;o¬—[¯ˆØ˜ “×ðèLâG (6Dz=X!12 Y`+$¬˜Ë;BqeBæY#qÖÈÈbaGÄñß&±¥1›9ÇhÄMϧÆR.‚C@‰™P³¤€©2”ﵩì÷5sÃL2‚Gÿr,@íHjžaæñÚw6D„KÕÌ©†Ntš-Õ&TdáB4d•Ü#œ¸V ²ª¾;J4 Ýd¸@Þ$‡Ç&ý¥ L¥$;ÒD”€Ô }/ $‹*2JUtÒ$†KÄ.K*Bzï¶uÒKŽ–›¢Œ¶•ŠP†5dg¶×ÎÝ,R(«VpTÈ3$œŒGºj3( Ä$T‡¢]AÍoiž“©Þržé‘Ûò‰åÂ$*$1ÖLN×´énHs:Ã[ï€1.ÐC¤.myÀ㬾Öð;Èé#ÞÒ;íŠ !vxñ ãž8Ñ׬y¾a £¼æ}$;Ê¡ÌôªÞ µÎ@Ìd°QW¯¦GxtžðšBu޽´Ï[‰8ÚPL€ MÊž¨ÈW@€ŸŠÒxFÈ *Ÿ™‚(Ì¥.*C&ˆ%@dI:DfäLÉ ººvtr@D2Á›@'´CH£½Ú8¸ãicÄ|O3ÖPëŸK^¾¹9#Ó$š2 vëa¥X)Òˆ[jHèüC"ädÂLjÙñ؉YÖKB;8ÂaD!A8O%r€’dIT@Lá²\Á·N¤ü@FÖCX|Æ`Ì#ô}±ï};zh†&"‹÷‹°é"L §ä)%#³'´(ª¯ íÛ´¦ Ð 3I£¨(ÖYTâIw­›¤¦E –L¬lV‰& Y“$v¨`§šYm½=M¹@”¹M¸kDÖ²ÄJ ƒQ¤•š}ƒ„O‹ÏÅ¡¡žt¿ŠÂ~2 2xÁYâ}ò!tM„÷)S2OîÐ"Y2šR@ÅYB–…•H€K¤‡DT!•5: 9c¢¨‡ã2¾ ÅÐ5t®C‘'ùºxvpD¸D¶dµõ@CRè:é´ÑTP†ÓéŒäÛ\ãM°´bu”é}.’s!´×\cÒÅÖC˜]eù‡´žž2'Y]'h ÖM'ÞTÄ£ífC‰íwºHk"šÀí…)P8Èšý0H$°>°ž3‡YÞësfñÑÄf>:a à5ƒÖ6…ï;s€Äö„Ì;ZYíƒ'Ó)9² $QD¤,þ¬Ì’Ú«K,€pŠ®W²¸»íƒ:X ®ÞÜgHµïqÒãß ¤óvïïlœxRRïÔØ2R%c)N žhý~V^|Ö…ùØ0ô«C£sCR,ovi¤¼(røYpð¡K¤„ö’6†Y2På"PGD‡+´tPè®ÕijÈ* "i+Öë*ŸÇ&@Ri|çWÀŽÈc3 žš‘_É_®¶2èÖ¯÷]³Ši%H¿tš4¢I8’ü§WD¢'Ì®D €>ÚÔºUȲYGN«$-¤_È(~üGQ“&Ÿ”`Äc´r"ˆ5„c$Dx@¤‘R iƒ6ôÉI'h8éU©TzªÉM÷¨i˜(N8­Òw•bÜ¢6RY2ÁŽæ.¶D ẼÙW­ÀÖöw©Þ¹PÄ€u"z9–‘>úP:„}›Iæ}<ʽäLC¤»÷±é ¤&°i/0v‘:HšÈ{ÉíО|av½á:A˜9ƒKÉy<’r€£Ö“¨=2i'HS™¡O™5”éuœÃBc8ÄÀgœ/Ø1.$(]ã™ø“Ó¶9ñ€ñ/ˆ<öÅ=¬U˜™ =î9Å4.0xÆr{à1;c @ÒRkIͼÆR$GsýªÎôÖûQ¨A$"B Ø te,e(²ˆÓjCé$"@¢ådýÙiJ(¹••lŽ`̉Oò T‰d‰‰åutr ‰¢&«,üˆdÎNá Tž™YÓ©‹ÄRôŠh¨¤`Nxh2c)!‘2ºåDô’©–Œ±@’8IÃ騹’ä:ŠL£¥j Ñrc!Ä ±bˆh¼¤@‰*Å]™þQøÕÑ)´˜¬t³áÛ e3Îh-DTÒŠ* ªtè¢É)!™j£{ c$! fãʼ®eÃ*LwòªcFŽ‚SÒä…#²¥ÌÃ$êÁfe¹ Dqv”„œQ$nm¶îîæ¨èÖy¹RD’é*<淨ääÄvTʨ‚/5R*d‡õ2Rá$ɾG§8ë>²âkR êóx“]1M!´f3knñ¤”'a0㌦ Þ@ô“Þ´{ž°ï+‰N=°¸…¤íôÏYætYCŤivºÁµÌT§ª ‘SÙ NÕ ²îštdèßÙOÆÄ3×´`‹"ª¶Òø|zªI)²ñPê–IEŠ+¥B˜Ø›õ„„S %!EÐ{]#âÞçŒkiv½¸Æn%ÞÛ8æÄž“˜õß\9ÆóÒ] ç| ¥ÖÏ:Éæ3´̦²ƒcx:Jó|ÎÐ=dyM¹ÁBzɤzO‹ˆMå<üà3̘LÀvã'%Ä;ZÎ':áÖÒb6õäékÝ 4³ã˜8ÀîPÐðÉ!¨A3,éS-žÈ™dD¦@¢B<,ºMòVY"P\±Mç·ð©¤æBq2mjr!² l…ºJkíeЬÕFЂnžé Ù¡‘n–T™¯˜ËRhö@§Â+ù‰m†É¶ÉW.ùQÏ"k/ÆÕH p²†©£!3!&‹(·©b%kIlÒÅ¢è(»_8;õêñ½#ÖXÄÐ *,iêFÓNŠeI¦½U™É¸™‹6ņ̃HÒ á=yÀb½å–8Ã¥liÅθŸXsf[ç|÷¶5—½Ç¾’­d'ÒÊdÌ‘ð¢$€b+«©Â 8#­Üˆžlkcx8Ón1ÖýpQï;Ïh>)jkËÓ"bçìÆ"©N•œ/HX1§so1š4!Âônqt @¾R »²ŽùÂ+‘ƒëûDꈷ˜åÏœ[óŠwë/¼²†Òñ¾#H§Ñe¢¼ëïd3ÙBûÕ<‡DQRyœ5N7;3e(d,o¶\EiséœOJùÂô€øŽH2ž¼`¡O.”=i{ÿ;ßs:Üžîà÷ÖŸ0ä$… È¡¡DÞSìuiÞ Ÿ‰'i cí§)5$PºÕîúK–V“Q(îÔF†^ÊÇqš¦0«„ež—•Ni;2øÀÈö6Šâù~™ù¦Tš´¼ÙuùjzšQ¨1-££–ÂpäõdR]¯Õ¼¦èÈÕU×ËøÖ K¥J×ìUóÃ6ÔTTù´ŽúªÝ4-µi5`Ä8"öAB Í’HBª2£» ¡µT2BÝ ²Ú·† e)W(UÊJd`îerÒ‰²ÂªHÂ*é"P€ Èlð‰zGNŒm4ùˆB"kÍ-L½>”2Bù„¸¢KÍ%_*48ŒB”2ÉcS'"[52.iFZéWó¯hÊ$ "Aõ˜X’BtÕoLNÉ‚R:¢°$ÈȲ`h¸~Ýæ%mU»€ä² óPö@]?‹bÝó5ZÊÚã‹ Qè'½y=7g?‘b£¤i\Þ¨|ºÊ05ƒ\"›‘` Û Í‚*a¹êñ2I„s!2Ó§FgÖfgÚ†- ªQ’\ $DS,¤']áfœœÉRýç“›ÒiIB7-ŠS‘H3¢}ÙM¢†H ?Š ú‚vçzzQŒÔÙUFŒÏM Ç‚B›š1b-´TF%e…o]FÙk—é’½£å$ô««Í'Yòw¢2"β"§¶µb•®+~ÒÁÊ11EvrWó$€ï '!4Ø3{§¡Ö|šuçCYŒØíó™>y0ñq8´Iæß¶1›m ÏžQëfÓ¶ ÈõïŒùÃÄç´=ç:à¦øÓ%Ìf8ƒ¬u·—ÇÎ͘–·ˆO0‡ˆsi/¬˜o0i&gÌ ÚZC'¶=e²íñÚ /1Ì Ä'~ø@ÞµÅÖ9„ñ{Ú@ 8ži=§ž±ï9µ"B†L@©ÊtX©DÑ9¦Q/Ä-Ýðó2š r)›"¨•)DÕÁ^¼ËØûôÖw˜dó~!²R§4Ã5®„x »Â¢êÔYdÄíy½i@¤“j zÒ9¢*=Úo«÷áÒ˰È7 ² ÈmE ¤¢ÑËm§“ÙYKËú´S÷ÐÖD‰¨üéžö¡U²d`“Ú¾‚@âÀQùztÓ&~ºÀºêâö­ÍPš¡— ]×ëYZý­5u þ¢©d0^‹‚…&‰ í}*¿èãe»P½å-Ê´=G\u2à4Q§f­±‡5Š®Šº^âjªä-tÕV”Ø”Bf‚(Ø(Èsv_Ck˜¦ƒŒaâ¤×|wŽõ9郬gLØÁ‚2Xß ¶8ÏÅÄ:].’x×Lƒ¿¶r”šÇŽØâ:\IˆÒ“´ò†as(é ’éÆù‘}¤3 ïP¾ð¡ÌüÊ—H`{ÏI´¶5ŽÐº@üKÖxž!w–Ä æ5“XÐ(kfGiW̉ÒLÜÂb§m%yħaâøô×&¸ã§`!ÀÝ]„˜È@Ê æ‹—H_6žÄ|ÉŸ-§ó=5 ¾%³ÝÓ§ÑRÇ%Q%íˆ50³vòÓÓz~#ÞúiLØ™§gÒ©q8Kê.ÏG ¸†–Œ­ Í·o~›¾—'fvô©)1æB1(tP}²ÕºëÙ°SBULΑTâå„(•Wj ?&¨ dʶW§—†›³èü®6fÒª¥Tæ×KI«§³…C·ÇÏÉÎRÉ>—YôžÑE®:ZHiRs:Fa>‘Š5.giâyºGÄ= s!´‹ç|.‘¬§¬‰×®âQÚ×8ëi¾ßM:ÚúátÆâLk„Þ:Ýç϶:I¬´öú`LÐÔÁ Â22 YÓOS;’‚:¥·ÕW÷ ¸O ôG¾ô‹0Iɪ¹Û5ìÁš{ŒŒH"v¢´ÓñÔì¹õ7\êé:Ó”rAØLÞ{5š’+ë`µõQPâiö¯Q4ª„~í·›ÜvÑ´¶˜áXwI©É~Ë£‚Ål¥P©…Ì0²e¬ÜgkÏŒ9„ÞñÎpw-*H{Ãí#kh¤)­@÷‘ézàLïÞ¬í ™ÇŒð&sñ“¶2âCñt“`ŠÙ&d¦RR™íyiÐQ‘•Y!EK&Û5ÜÖ†´j¦7‡—eÈúԳ͕QØŒVFFz.ªÚƒ0ŽÒ-¥G\\jÓ´R„¢…d,|Ʊve’w½;&ð&üŽh:ðÊI4ýêE²¡N? C!Ø0AD‘?Ê”²eùsóø{ºˆ±·˜Y| ¢Fi©ôW\]æú61ׯhµÕOsëÄ{ÂUgª>ÛL³ Ý0œDªQF!fí¥ïNäF«åvë}GšÂF;šî‚mK´[žóI™þÃ5Š\ýº$ÙM“uD­Ï­ãí¤¯½Qñ 0†u Ã%`uÌÙÞÚ¦qúÞf¼µ—-,S¯Õå© ¾NÌüAÖžfgt^RƒÊþ^¯5R²‚9Ö[Y£­l³ô¡3™¢îþòÞuâáÜþÈ«ºyù˜Q즼É,©ÓuúÃiõ<»\êsø¾Ç³m´ÿ0VªØoJ¬Èç%ú¦( uò«}Äo)ñŸ‡–ªà¸Ý×5/¥î =pû›ÚèØ¢\þÜ8VgZïQf¿”¤s‘9[—“놞(¥cup¤l‹‚6x©‘òïl ¡\§YQÊï{‡S~úÍ™ï•ãÉ–TWÖ¹t Á>ÕÖ‹X…yAÁ±{ ´ÒKÔðÉ4ï´¢ OlöC_¨bsAE¶ËÎÒvACæO÷î騼ìB”J`ÇðßQÄ‹þA÷É!ÜÓâ⪢U PÉRØP¯5 A.cÙ¬†Òt€æTÒCÖó¤¦`í6Ðm!Ö‰ÉÉÄ^øxÏÆTÍc!2%£$ ,‘*eH©•õöxeñfI ™êŠ6±—d æjĤ,Iˆ±v­hò’´ÔÀЩ”…OGò× Qr‹¨ÖÞRËdéÝ ˆèË¢Æ\˜I§ºMù TÕÛ-!@e£.ˆBûI( tP€‰ó·°õwbÖõÌ…ŸÊ2™,ÒJ|ñÆ)¦»†iñío¦¯L‹¿3§i‡s„«ŒÒ—Ýjfpì¼"jëL£â~š 9"»ÔMäØoÍ.Bn}/Æ3^˜)A^Ž=yΊ.ß")!…(KeA]É ©Ì¨¯\Y$ÂiÒ,R ]¤D/–I~š+ãUMížÚUš!"7¶Ã õLE`Í-5 “]Mô¥üD§Õ°Â×(:.¹†Ío<;s+8AïWQÈÂõHn? ‡fäteHÂU¹ûÕÑŸ‰)º cÚ´uÄë•‹ö̆I°’T²sÄsÃ)ü“4áì_ Y¼MþH©ês®íDÇÉë R¶,.Q­—®R:ÎÔ]útÅÐPÚœí„äxEJ›DôCX2,ÑÓnwê+Y%í6ºà¹æõÿˆæêö$†*Ó^´&®@Ÿtföôƒgâþ³,IG(¸rì¾ÑvÈ5 ’\àÄ›ñ¾xƒÖ3Ò{Á¾Ø7צzËéÖ½_¡OD©¡ó ^ŒRvïy‘(Д³*žÄ ÙëdôÇ«nn¹™XÐÔÈL‰ÛÉ·¦ Ñèr”_‰%â„1!HÉT5!€tAjê¥2ƒF ‡€]bÎãFJbó[”èÒJP/h rNtWXPÉêëjñ›¦£¥›¢%¬¾c"Ü@†vNšÊWÅo ËRèÉ,W× WI*ëÏ-ÝgC­gæ‚:2á FÕ'òm¹9Y•^±õ|ˆâËgÚÞ© *~ÂÓÅœTÅQúšËZIT‚Ÿœ*íò Ú&hø¸M“³SSL:Â'¬âÆ–EÚJÄÔ¿Inª®jÚRä*‹öŽm”ç,úU“äöh¬Å4ötoJÐŽ‘²d]8neÕŠ&Õq«Ñ—qOÎêÊjp~!H°Í;Iµò'áí~Ýz¿Wì½ËÕœ³Ôh/æÆl🡠úð¬b»ÖækË£Yb–ª/&é[´rÑ‹,‰ßõº¶¹QQ[.kÔ2ƒ™Ò@ž¼½^¢$çéä’äJ¬€õÝK :Ë š]`È"E΃?5 ›+“.ºK³r&Á•L„¬d%DšÔ®ò§kxCÄu“°&’úÇY!Öí;ÉæC¼N0Àu·žoë˜ø·5×\hÆT¨ŽádA&C—¬3S(2CB/ ‡¤aÐøø×+³SÓÄ’¯K$Ó(ÀÒ v\_]Ë’Œ®Ì³¢kƹ çæ[£v8‰dŠsäQHQÕ[.f9Â&SQú´®øntýøÌ÷©ŒÜw\n„ö½?;™#ùñlì·PS 8ã YvU‹É0Ƚ½VgÊõänÐpNÒöCT[eq{P1Uó;3nr|^wûØ…ÝÈÞ0“íן´Ñ0¡êß™àt›ÃOÅ„œ Q §ºÐþ+tCdA‚&ÉRàWU-H?$•S—[ûâÇ}¨XÚ4@–!>K÷½Òõ,¾`GsÖ¶6|Öhf_HB]Õeã°rh‚øMLÁÒ(-T¼Þ×DquNa<0døB*IHèÊ@]ÕD®db(<ɘ Ê´¯¬ÐëztÁ½ÞMLœ’ñe`¬UeRÃh1d2s%«P‘Çã„©r6GNÊÂá²—`þ$a§˜ÓU~-~ÞŽÞÍB׸¢ñï0‚j¢qµ¡3FΑ{õ`°¦š»WhÀX]²åc´Nt¢¨©ä¡a"ºðþ,龨a²PÃuÒI­´è°]*V],Ž“y²ögç-Š@Á¾§š%ý5n«v©æp¡q¨­ûÖÄèÖ1LÇK&7º÷6}PÃ2"©UMkåµ&¦ö(¹c¶B¬´nª4Y^Õ0ô¿GªãT}-p–=wÕZÑÔjÛ×KQlÒÃËE`Ímó£Š- óÙÌÕ´œµaž¦)ª8 úZÙ„9b¥éÅ»Öt{B©ÚH¼(=%Èù­VÄ :!’_ˆ¼À¸Ž¾²f7—á×SˆólGX ™oä© ê9~ r;ª ‡TBe¨C‹@ì ¦hVÁ­zEŸÇ¿ˆ+kM¶¨†­Ã³Ö‰4@fðÁ*’1J†U@]/÷Ón͹‹6cjŽqtc:#ÍÅ`U’œIŽLùã°qJ5Ë6.+³5u7¨[Q¡ Ä$û+ŽÓ•ú»¡ö´Um4©¯M?JRiŠ(KµÜÐwIÕ HqÑ[mÃÂáªì¶ßíǰ”N³ôðzÜ-9ä BrtÒ0wéYÎu³3%^op¨IœGD#®¾I› ¢"È„ApS½š{ÒÔ ¦UDC-Qž[¦”$ªXÕ% üDº!ˆ‚z_F4`­&Ž\q“A ¨e޹®ž_m ®ÔëŠé‡bÙ+¹ œy­Ä 2K|w`Æåй’¶E‘`‰ÚC ~¿7êxR~¿Mƒ[×Din¨bDöQPÀU·Ê¯eQ3ñH#€Š§5£Ìâìî-dEï—ïÌj>¼èô¾]`7¼¥¢}™PÊÊDÅJt 2‘´Ã»å‹YµyÛfz.Htº:Ðq×”Iµb¬°LÖ"®ƒõadI©êÉAä,É #¦Êg‚Òbä4ÚÌJw4†Pе)|mɃK¿¿œñÅc1%rBq{B=¥ß|%4Eñ*`¶ãÚ`®sçãG¿òy¯Œ¼A­¬-Kü“QÇD‘—ˆ‘Éþr¹»ÒÉ]¥=©ÅQ[Ø¢{wp;ÚiöƒG»W [nÁ’E…Ù“S‰í:€ðÕÕ#{Ic«Yçáž’3W½ÞÍWÙ%?Vš~È×ïs Æõ«cÎÿZñn1[­¾e>æ<Ýàø“¢7IVö³)‡¡ËV¦«ÓJnôêÓ°T³vrÑÝ¡Nµiªù[ÐtgˆuäCVWÌÅ!ŽpÕ=ZgŚ˞㖠«‰­‡/U‹zˆU·hÖjéOuGË’¤H‘IÝFcŠ.ê¸Üéx™I‹7E×o/$â¨.sùðµE¹–4“+³}·½:*Ëh½ÃƒÒÄŸ T½ó^!µ&g9¾‘G[ÑE‰£eùNzjn³ÍµÉÖ¶•Ež­lœ—žkKRm’n‰Ú V%oATd·JeU~>º5³ß+W~g¼¾<§UJq‘«BeeOº¯÷EÒSq{²3Jµép`Éì’-.[¦YíÚsJæÊÔ8†êw+ÝX¤¬­Jz^"uÌí`ó™ÜÉ‚§UºÕá9„z÷Eœ×}gö5›±”ï‹&W‹iɧ[B‰qG)Æ«øE'ßʤN¾¨º£o6m4wgá3·SNº®KÀxEáÉÚIA&Pe= ¹­P_I'9aî™ï£F¶RåU%‹õ†i÷{´Og­D´]t‹Sä2޳¬üá “w«Žó¥µSÍÝz¯ë#‹úˆÅ)MO˜y;¤ã6>Ðk«Tr¬L@?N|mן';·k×"üרkB‘tIÎ~ánoöîMÍÒ…°Êá‘èÐÔ(¨4uÄ”áÕ çŠüAó¡Æ}ÍÍÏ´Æú†¥3FÇkÛ:›oŸcª†ðêÇzÈF_.3h"˜×ª£Žƒ:sÊÎ=0¡'µ¢f¯Öþ3¥Ì›²iW™ížÙùNûOÈ—#…ÎyöÜSA °º~o¨¾'|Ìf:›K?,½;…–jÚê/8«ÞÔ×ìq>½úCŸPéøfÔ#¤ÎG®)MjnÞÓ =IýjšèŠ˜ûô—óEÝÆgÅøÁz²6“º$W÷Õãk¿rùE†ÉÝ3bZ'ÙE¢/¬¹wjBý<}ê²kËk?‡YpÝ å>s¨øÛZ:ä½×‡Ödñw·¬­îvóöy£fõµ­†vW½? óåÌ3_ØÏ†?.gÔöÙ£(ƒd@Ì&Ûgögªùªw›Ò¾R·®º_¬¶7é¦ÞýWÜS/Üug²OØž&>¥–@(]"B…¢IÎ5¬µOYA5NÝ<¢¨ÜÑGIª(“F2uNæò_tXS+šžÕ‡} ºB÷DQ‹øÖg2ìàÊ «ê¡ÚJÊ€¥É8 3¢M%£!ƒS'2&@þNg»† E–#µbHíÝ©³c­Ñ¿A8' R3ÅZuu]¤‡…;NÎñõ[$uÙLeL‡0ddSÄd'ê%ˆn2ØônXÁƒT»–ˆÑ’ŸQã¼7—€ÆZÊf˜iw¿hÁÞ> vNÈCûÞU¬Lâjk‡›!”Ágwêé+H›KG‹¾™h]Pmô¬X¤Înˆéú–Z9Õ²’xU¢éEHs)&ÒWš$\ [%¶˜/„ž6µ2“ÙðûêÓ™P8dªŠfGº¶=NÁTÄLôéb’Ì*üX<7Ú :y?T7*g´‘oÕUΓk>ìš#g”G)d@õRäK8îzh0Hì„!™PÓ)<3ÙûSX\Õ”O5]u€½:F\lPwD•Z¤-q…Ò9 · ÍþJ7D5?ZcÊ ™*’Á+šÏW¼Ç^$’š=çÈ›t8¨d¦æV#Ó¼£åëνéôýZëë@‡MT.ªãà dê…ôôF1UŠÏ´g/¤É»$—ž~w·—D»R~|õ‚H™˜€Â²n²™y ª2­M)í©OÊ”yfµZ`„Äë6CCòÍjgL÷ºÍáÃ÷¦x…4:5°î³ÕRhpd¤~A•LïÆ«¦uù¹ÈEÚÌ6¾IÑ"ôÆ0÷fÕ6RV ²Óõ@ïµ”ØMx $îŠH0ˆ¶« z°ÎRÈŒ•[BSŀݧpŒe{æéæ}²-RÝ¥§‡+•RÈ,©EV×pY ö”³¿¯\¤¹”é„{_12’Ÿ!–a=n×~'Hû)Ι„zXËDpýP=#l—?3ñ¥£+ ‘á“–-ƒ c2¡Ñ:Nº Ϊ/¤‰;3šˆyA+™y…¹ “T DMq”2yÕäûYtjj¨&̲R†URgÒ¬EMr¼.Á _Ú›PøEª´‚ƒ)’t}Ý”Dø½úÒ¯t—™}_¥ó}WÛf}Y¹_lF´<+15·¢¢¦ek²o—…õâû>F ¸ù~xói4ᘭÒS2h(:Ê}OqÛäb˜`SYG›B©;(C¶§Ÿ¼JOq|5{ ̰™!a#)”OƆÌó ?eõŸ½]grÝ*ÌŒ“Ûü½èrc>2’oŒ«&4Õ«Äz™ÔS§r‘úê5d©j‚×Lß;æ¾5óz7>]ú {\!Û%µ×ê¾Zô­™êÚª£¨©B&uºÍûÝ5Vöa¯Ï³…¾.(nm¼œýôi’b½tU°¬³îÔj*ÉïÌ8³WÁ­/xXeц(b=÷P-8ß›è¶Rî¶JÑ7Ú(ægešÆx½ÚÃW¢üˆŠì/×Ú¢·Œæ}NX ˆ‡TÏç½æ‹¦ö«ãû˜öcn’™ùG²¼ÐPðÇæ°‰ÄC¢(©¤©Û"±±• ÌæÝ F}. lùXW•x;œs ÕÓ­Z¾0Ú¦)É£‘Vlá,Õú^Ù6|YD(ñó¾Y–â‡ÜOßuQ;šÓY‡?^¥æŒ6‡e“kK´©GEVôBώѧ5ës›Í—ñƒ±|}͂·ãíß9ojýñc÷KùÔ=Äâú°Æ(Š ÏÓ’Ž2®,æ—͵Jæ+†ýqHz^túšiŠSö-9£ ¡Ñ wµŠ¸e8DéÞ¯ttO[¢Ð¶,£¸UE'äç4¢ªù™Ñ—[Ú· j‹/,-–» Ѫ»U 8ø‚‹b̾vÏ4.¦Ö¨´žÓM^´¯ñ^³Èªnë 2®·tjÑ4G[À½ûÅ*ÔÂû^£&žgÉbÿz-ºÔ3Ûñ—Ï4MEê‘YÇÅ-iõ­Ïã§²£wï1¹í*”e@êO ñ ‰§…kJ³4Ô,©MWìÒt¡>£YìÒª%¯÷/>oº^ÒÇŠ­4óIú9ŒÄ=y}F"~ðÁXçÝ7N͇£<1௭· !ù¦¢LS‹f¹B ‡èTnÕ/•#¬,Í0Óc?®¨oÝTTŠªA FNÎ04‚S/„ìÜбU2}"É596ëk)eƒôÀ4÷ã0ë4v€×ã¬ä‡M±âÓבi®½ž[2Èpû4+,¥²8ldÄdƒì(ýtÜÐ~Ú ŸÅ ¢H‰Ô…i!bÁdýµ™;§Æ]Ÿ­• @‚vê—?]”Ÿ½Ò ±Š¬·ê)Ê m¹óʽ—›hÐà¹ñÒä|l]M€çí$*¨Éütg„ DèL¯€ÌñEi¤0«ÚH<ÑpR®ëFš=Ux¬æE «ÔûÜ(§ë¨o*·!ôˆü¿ØŸffSøô­\'Pò£ #g¢‡ßen²½tž6Qo¬,¨‰‚†T2TÄêö1¤Pd·AÝžl(Y äý‹_¦FðØ*D‘‘Ò%¨Q Ú§ŒžÑÖJÉ&=Ù-lLCÉ 8’ý[žšwA3?¾ì+[D.¬ÅMEܺ¢" žúe•êˆÔZFJ))<{Ó#öúYvR¨ÆS*Š öÖÝncJ†yeUšþ øŠó+ôïôÜ_ô;ïÕi‡$4Ê´M@¾ûTî¥@ô×÷ÐPý;"´ê‚9=¾~e÷“V-kt÷öž–÷,WÌ ¾Q,@|j”wVâ–`h‰B ŒQ§7ö¡ÈŸní'T õpÀ{ÈÁcýo4û@‡Yõ¡Ó'%sWab‰ÒþièeBŠª=Ÿ+¸ëVýpO—ÊÙr…§V½ò¼¥¹±ôâýVb²ÎæcôÀ¿*Ô·ˆ“…|u¾æ<í6ÑWÌ5õMyKDÖgÖX[¿Õ²û?iwè›÷ƒ¥¼þ_§Sât“{Š[¥÷^^£iƒå=×®WÅ_Xêj"ÁÖ¥ºÅ×E);DïJ&…ê©Rå]0rFŒËܽaYèT*K¾?[ÝP _W÷ÓåR¾YT±Û$°‰÷I2!b¯= C@+´ö~Ù§„rø¶®a¿*4e·åPË4®ˆD×ÔqÑ¿‰B7®fðf‡²*¡I{Q‰ ¨e‚¦”IK¢(D¿~©Ybˆ0ÈæV92©éã¶ eC|ijd§Ó öš"ýmEªJ ÊÎ…@²ñ@™†ÒÈ‘/k1†ž’äPÁS²Öäë× c€Òâæt'Ìm× ©èЂÉ+œœ— p÷‰$˜Èh“)~t(ß–ç†Z0ïRI!ÌÉ gI3£™Tü5#aR™K"z‚êêéûò#ÅEžÖH¨+D%ƒ*©’®a½^Ô ™˜šKºZŒ'Ì(\ÝA@`ÈŠB‘Ã!0d.G§ôÒAHÑ7ò©iÑxdäPÿyeITq™Pl¾¨²[xTè¡0SïTL¡¬Ùÿ:ÿV­gþ°wì‹Ïö +äëÏê0¡¥-óWW_('­tߎšÜÔÆg‰°RÅT8U!g¦V@=þJ{6a?gU¥Éð DïÔ–ý“H“UQA´ƒNVÅIç©¥BAë ÑÚ§ :£úýEÕŒýKªœµê™Ü.ßW}Å–¥á¾­"h éÐ3¥Í´ƒ¾ô²Ù爫uóe24’h‡tÜHD‹7ŠÅtDíš*‹'‹& QÆ][ì r‘GZßh-YNȧ›8#$”?áÏìe»ý¥ó¸«Ñ8 \®ö¢>,è57£¼ïÅbnƒT¥˜÷ªØêÞ»na>×¶k™ªeöU Ñ4N$Ì¿Iq;ÁA¬×hë&t°|ÛØƒ3ŬíŽÖ|ÎÓYƒÚ åÎøqt‡¶¸M>qˆ>9Â{ÂíÎ.¼g3ï8“é¼ù“éé€ñϾ^³ï®Óð=â'2zKÖ 5ÇhÚkéGzdÞSÒÇÓQŸœgÓ’ç¦6wÎ\Å/¬9 &óya_Œ€Š$„i?$¡RT"N@©«6ˆn,˜ŒóA?ëtÒò¨<2ù¸ßÄpâˆ}=m}úëÎÚ™ë”ñ¦3xiLÇÍîCÓ+•2ÔÙþ2âÒXáR°„O´\3êiš½ Õ)-·ÅÍÍ! ËŠ€aPTɺAåu>J–(d„ÈŸ,­4RNºçä›o=(i!T€æl‚¥ §”ž‡S(ÊfS£(CÝPd»Š¢Ëp€1Â%™ûÛ>1ƒäHËÓüíˆtt B7M£m<(ÁÁ©º·µ²È#6ÙÏßÈÑ…zIšÂPíŸ<r“3¶êÚ÷ ü”ñœÞÞ­_b˜-á7X!‡Š®B3Q´heöLü@©%lB6 óª^÷I€Á0¸ÕW㧘÷}x—<¥z¨ò»ÞÍ´Sz ÆÃOƒ£ƒ+RL¶énþ^‹¦Tdþdø‹›Û®SÅ쎈ÑÕ]b;äç@½~ŒÜú©ù‡D)”všd2£xì6{ë™j‘r‡¬Úî⇩àmÕ(Þ¯ £«šû–ÛÒ4ÞÄÍçôjÊŸåt0¡G¬-Ú¼Ë#ƒª'µí¢?šR`7XP½Î ýв¶>I–5XK¿äìÄí¦öID[p4írÓùéºÞsk¦K7iœ=Z~廀qò×;Tª_>,ø¤’¿Äp­©Ó#UØTŸ°¾OkQÑM]4q—Ê6¨±YܱïÌÒjšÅ‹×¥¹¡§ïJŽÌZaid?:I;¥ ^)Õ(´”‰GA–@à†E Y,@bæYA -„qçF±<¯O'1é<;8D+ÚäÿbÊ ©”ŠåhÉŽ’ ™{«2 Oå'Úïs0̺X³§æçð×ò hØš¶ \ aŠ "WYš«Óä: Ägù‹ÿ3 Q ‚J­ôQa'õ&é (õ%ºL.n£vq÷/÷6Ù¯V´êç[~’ën áßÖ£ëÞé÷UmWèÒ¦³Jê9^ÿ’åÓ:²¾t,eëñçíO›fÁPRÃÙ´¾)û7o´‘[<8<ΦÜõ,vŽxÖ¾±JLÌy|+ð¡Žè¥N'Žm|„‡öóö~^§Y¢ZÈ~dÆ’†lôîº,ÜżœPÏÖwÍ0לGsé¹ý¯+4zëóÆ»ç^å´¸i£¿‘‡tu@„; °–?«Sù×sê­F¥èªã0b4óf±µ¢àº6Œ/Žÿ¯“I«®êîE"îéÄ„T‚¡&®Áw¹±aõ…Ñ¥ê‚dW¿TO(”(úÒݪ¸½*ÒÅ*¾­ì;Y¥¼éÌê¿'1g18΋¨FŸ_«úüîùL]³6Ì*¡?i&Å'¾—ÈOÅüµ|…&.ƒ]+È£ôxóíÔVx / &K†×në5™B˪ÏÊV‘™>Q?L#ô¯Qô=5 D§NÐWnÊÉÒáMVÍc‚ïÙûìÆÉÕ'wV¾–Õûʶ²â÷üÌ}@‘ï¬<2ÝѧmvìO¬ÓkãÊf¿n®“dL_T˰ë^~e?§QÌ!W[yâ¶:†Bè­Hÿ¡<­é¢4ï’Ó·±û“sköµ²T­Y§(ù¼SËÚ½N/FBbšßs#Á·¬Ã}Ö~òÞ-.¨AжÿGM|…$:!K-~šo0ÅŽl†º¬÷KPay–\'*Þ2PøœéÞ¬ì„v«Çi‚^ŒÝM á²[Òþ,ÿ‘ÿ]Y027äW%g;žöŸRëA»ë-oÒÿf¾L\ÛÈÊeÚä`d¦QLñý9ÓU¤ßù{Ú]á[æyZð%Ÿû˜ny{>O.…Š#šºgé?PqäÊÚÀÃu¾«sùRÈFà, ýÖõãñE¿§ÆeöÖK±7]‹&ÌEnûtGy­›¦k:!®û5ýJýËÀbå ?k?r?§¥ù}ù—ãM4• )OpêpÞN΀üóÊ‘âS¾ªÝûÝ,*Éý‡³z½SOé³¥êŽÚúŽÛÚâ©‚5”¯S›{k·´H×>mQ^Ó¯îµgXYÍqîÍtU‰9GF=qkiühj‰º¢¶‡ÕbŸƒîªGÜiéÓÓµ•J‰Ù53µ’Æypq¡ÛÄi ôj§Úú{[í•_Åú1 Ë×nýõfæ)>ïÉê~áhÊZ³ \•Až÷QY”œúÍœ{;tÔ>q8ù×V¼Å)ãÛ7>½»º‹SÔÅ?eßÏ<ÃåìÚ´>?”¥ „4µZÿ¾Úµy )«}…ñ׳;œòª3³¹£Œ )¼·‡©á~ªI“çý¯ÙÓÓ¹ÎÌ#‘–Â¥rUzÇ7ØjOI2ê€5ŠúÉ4ûìoÇóOVÉ~“)|´LÁ’Ïul06uKR+òY[ØFœ#w>ÎOYhÎíX=u®Æ94¦-FÚ¥ Ž2eö´§«×ˆ–­K•M¨4ëÙíÿ¯jþAõ–жÔN—3ñ¨£'‘O!Æ>½£×›œ©ªùá5åÔ‡Š–Z)O¹¨`IûS›>l°8·7Jã–­z¬ID/¸­gû]\X¿sêÍŠ—1L·”y îšrC¨Z—·´Fï5 ÖÒË5A(ºm{£co1`¦m âd9eZ g@-ǵš"î‘£Âèõù*–ëï+.^Õ3Wü•»)Tf¡÷œÖ÷U²tëU Ò8+ºb.sÖê¡jU˜/TítßfÉ8µòe»Ü¾Q©ˆi Òä¶ÂÇÇÙkiTÖUCÄtZûƒâ†¡\t…¶¯{Bê=ÇyqpwòÇìî¾æÙ@†„$"ø¤Æxö‘cT×]¼å3 ^ƒQÉŠÖ× [X|Ù¬w‚]‘“å…3fj…VãöE ¹§Þ«»å}ùh 7ßæö‘k?ìõu|»`…ñV³ç}|žé:ë9Z›r¯¹ÊƒØÏ÷ÁíWcP€¿–C*²êÉ<¦Ì"2‡í…¨ÎÝ_ÕÜ&ŒÖ"5—¥­Q^zÄÒD'»†cÈOŠ ¼Ñ“œ ưðæíoyÐèÞóéÙ˜gÜ“AM ï¯~GwŒòÚNíÛmØ­3TêJ<ÞŠRhÃöÚ.Sñè8ÔÚž#OôØoòµÃ/¯6tzŸ¼÷¦ª[QÊ-én}NPyAŠü[ªdîÙž™rÜõŸIîGQ Eœ:Ÿp¯´ÉsBcÅvO¬ê×Âê˜CÎ趺ý¸jºkÖ«w”é»Z­¯úkûùi^±æ;ð¬ 1Ö…µÒ¬é4¨ý•Þ»®5;ª™ôÿ:~¸ß´xtJ¯u¥Öqà›…t|n‹»G÷¡m/⻪•±¼RŸs<®æ^ƒfš×5l}aÉÙv–Æ' «ôA#§)ÔTYÑô'lVñ¿Þ-.Lˆ2ü“¢êÔÖ±û#vηâ]£‹‘=¿Ü©ËdLÙKý¿¬ã†¦›ÃØgS¿Œ»{†½w7 ë=Ò î”AÑè✞¾‰‹U×¼RÈ8wž¢0>T>|í³KöœŽæÑ|ªÞÜfe+TIR–³¿äA‚.O! 5ØŽ±[xú¥qº‚s¸r¸î-RaÙVÜg2tš×->žÜÊÁ‚}ãk¬º0™º|E06ÌL§M(ž^«kU»¨b Ñ¡Y·Õa„^¦ÆeR7«a±Œ¿fñÆœóXR:4l^{(Q©Ã½S!•Ú­Kï«[”°N‘w†7·p8zøÛêùËàÇ=·q”,ˆhôZ]ñ:ŠGä ïk{ø÷Å-2e“Sù5“?±HšA²ŠCN«ºóçÇ·¥i‡]ºìöiÇTó Ò§&ù^ýO}¦µHíwÑÙ1‹Wöß¼o:Þ‡/ñæ±³V¸œÝ*h}Ì鑊Ïñ›W¬8Á¢|?3'âͬkå³<ÆõƒKˆ ®µïÚ¥¡«|ç¼ë¿iÙ´ý¿7ÎWÞîšÂµ‘Ú‹Oȇ£®éÎÜ1÷míºYö(—'ò<ë?Šû~ì‚<nÔêõêÚ± å;Æ1’1qIa‚~FTO²Êi?«µ6ý–î6q‡Öô‡°Co}fn‹t¾avB‹Å¤,Èd€¾!DkÝ#4§ˆÿ›Ù%5ºÚ½+Í%’Ϊ:šÑð¯ä™”œ$ _I!á™Ú I‹Â>V~Óš¤ÆñýÆ£ÏtÌÍþþzròR6‰<° ®YyümÑöëé™ÅѽñXÉÎNõRç~þù‡‰H,3¤éúÈYTäî©)—Dáöžª8“½êÍ£_¦£²¹¹é¬‰bä.¨­ý Vêþh?©:Ò=~’’|=bj&~í/×ËñfËõPŸO΀ttT,3SÄû{Rdê”ö¡¢[´ e²[¸úáPŠœ‘±òÁÙ¡ï§R„|¡Œž¨^˃„9Çsî/åñu©´ÝaÀÂ*‰Ù™‹Wl†ÛÊ©ÖUAD—„b™X'W×JœÒ±u¯­²%Õð÷ú}³¨²~§ï¨øúÏîý9ý•þç…Ž¿c>?Ý £_JXß:jÏŸ°£WÂËøá›ùµGg¾ýñFÉZ*8þªÍË*ÏÅHúÊÖ²5_Qûk}øsP3d×äïù!÷v§Õ¾{Òò1_Yot„TÞ ×û´õ¿R á}¹=_à¡2GG—MÅâï”C|£ÏÔ‚ÖE<Êá(÷hÌöo„²Ä iÚ8Pùœ¥æ0Ôa“ƒ™¢@ã´F'ùºhö–Øå"ôu Þ,÷XÚÖ,è“Aù‚&_Œ°EÕr•Læcµ^çå™go'v­!Â.'zÞt՜ԥ„ïvÚú¾sÛÔ?†Û²‚íÖå·…òݲ1f_LÕëÎ9ÝÙcÈ¥ša»f׈08 Q~õ˜±^&,ê¼^e)T÷”÷ïÕIû˜å=kœ>íf{§yz›xiäDïX»%!mGîŸóSé‡UDòºŠë×Zž^|÷ºÛôcÔÆºTÞ­炌§÷¨ÿx’y½“µù¿'7h ?Å?“ÁFü³m7^±ò$î•ù:#<û¦9ûKÖ“DyúÙcdëŒ/Y¬^Ú>J·UFíh©g@“6-dò‰Jgö¿/ôéWꃯf´M)ëî>b©ý¨Äñš>éÞ¯» ø¾å’ÓU¼iú#_Õ=ôîa7š[s¥huÔ¸³£7UPÝ©Œßêw<]±Û¬ê¨gß_º1âÌ‹í1†ü©£Ê¶©¾Øý­ÀjÎÍC¢·©R0Ó\æ~!‰¯òyFgG„öÛ^NߨóÖúnûOiqkÖ;âïä6ºäޗΫ»2¯©$ìÏÄ5aD÷÷ó—©cÙ÷úô¿É_=VÔþkQ#cÖÈ¿y %zI&ÌÄyoI¬Ê‚¿™¹ t¬ù…ž´šÖ¢ÿÖîÎõšt3kµ©ÝEº›Ž›¶æú¥¼X·>ÁËïòn½Fk~ûú¿W]büúTNžƒæG3_ǵéæþ‘(%oÝ) T˜ó“Çëx´Ø5OÍOßcÓäÒŒB9'ÆTeí“)œ­=˜|ïNÍzlí¢"ikua¼S¼Z MWù©S´ºÊý°ýûãá^ÖK¶»x¿T¡÷°’Œ Hì¥+6þšînž½Š—)"m#/õÒ†t2åmF&ÇŸ}YàPLDeÚØ]Ul,˜¦Í1|Ï•ŽûºÞzït‘Gt¡Ze[æUXË[:S»Ö½ûnéQûå}5~üö¼N£ºív­^ìöœ÷ë÷„·Oîa}åi¾§}ò‹‚Mwfç}W™°˜ñ¾ûºahÎSïê‰ç¿gÞã¿p‹UB£ø-×@ÕÞë;ã¿t4Æê G³ãõÕ©í¦_'ºªµXÍkåiôjÒßx›~ÌõUÒü|ûÍÅéGgO§ë6¦õ~œòІg(iv.âL¾uz°xÍ–S ^ì0·íTB}óºQ´ØºJñ‚Íä$ã³ö¾¥»±×¶½oŽü¥¹º­ZÃE¿TPþMNdªc»Ó%¼Åîæ÷H}QPºò·ê‹÷¶«R©Öv¶$Áó›q‘lõÒûoy‹b:v½=+Í.6PTœ¢ƒ–ê¼Ë5ò0!(eAKSA\Ì#•FÂüc¤ýA^ý{ûeòœâ¿ä8o.¢¹Ýi[ß*ÕÆìÝÒlXa¿ºfˆûù#û¶¦¾ ÚèË^»h5Å ¼%<ºª Ñ>7í\ã¢âgèõ¤åÃ'0Š?îþß÷XDò5ïíoÕV½ùû7’‰ËØÕ"h‚§c×Q6õ·Nv•å0,ûÕ–^½bŸšp°™Z[xÖWêß]m­Tót\uÝý¿/¨¨Ô÷Õ·@óAc@›Qí|ò¾f´þûY²{F›ö¶È}~¶]Ý9æpÔ¾iÞ^öâÒNžõ3¸žéÔnW¼ñ7þîc/´«{¶S·[7ÉûæèÚöýÙ×èZùOïCî½%œôé–ί3TÂF=¯VHtG\C&}ß¼Âx[BÅž é¡ yþÇEz›û\÷³jâ½Nšõ,_ŠõÄ(nø˜66)ªn³îÊÔOœ)§ï—}N{~.ÿU»ÏSýQÁÛeùä@¬ÏMÑdA‹0Vm«oÚùgONË4YÃ[iý4›Úíé4!_òÁ³ŸÃæÝ,³w³Yi+÷°Ó5Êç Xà9å®5jÍ´o`›Œ(üP®Rw·ke8fwdÏíê¿ÈÍ“Ã?*î|nlu:¥›£F8Ž@,QÛ/8†šUµÚKùŸù“§ësô>é¥ÙZ”á¹j„Ý{?±[0Áƒbž¡Aì ü€cPb‘.ñµ”ANˆÙ©.’‚;7=7j3Dé³²ÝÝBwڳƺçóî•2OQ¿‘ÓŸÌ?¦rctP,d‡³ýƆ‘(ej$Ìœ‰l±Åßï ™M.¿™9ÍÓ†VŽ–&Ú»…í,GÆ@jiê'WN¦ëÙ ‡{ra_ >j©%¿·ÍÌxZ©³BÇOß{ÜéÚD'[E׫GGßw«tVi7su(@NÓ Á¥³ÝèûÆñ¥ýûëOk¾ýõÿ›tÉ„eÕh¡¹Z­þ³®+µB‚ôeï¡ßOúöm?ëS¿UÝÖ’ÒjŸ½Qñ3{~çûôÛ§üɤù³ñ¿mÖŸòû%5ñ¿;¨Éþž•È~Ô!SÕŠŒûYùËm‡°jÿÇ;¦,ûÝQ>‡U(´ù íõýg‡dk'אָ3QL×lÄhÖÕ³y?X±4㎬ýRØOÏ_«õúí"a ñ‡lοɇN"唡”÷Jfèó›;—‹”[óÚ2þ†Ÿ©/™Œü…µè'Ÿ'0ßÐ,¡Š"¬/ë°ã@â´:›ã¤ Æª»C¦ßÏ/EX|2–ù’Œþ"~ßkzÇÍîèý./ÕêM–¿¼ýŒÿOAû ×ÊÝ/\]{™Ó¾QLóga˜¦•Üâ×øÒª¢7îJ)5¸æß‡Áöû­¯–üú¸É–z= Êì½Íÿ§‡áLQh‚´Do–xëßX=0§´†‰Pÿ΄Næk¯î©w…œY§ÙêÅ©njpöÇ•=¼Ûs>Økù4¯["y»ŸÞÿ^æ“BQ+.Ø!ÿ*: ¡û¾•ð”¦E9Jù·¬@¥ÈÌß™…ohçú7víºýO"ã“úm•‰š*Q±¢(Ð=5ÝžüÕuŠkö÷ûbõßä¿=Ý7°ëòÑNViˆ¥gM/Џv唬|©™ÖݧVçW#­gÝþµÝÄaØÆ•ԣܟ¾'83 ÷ã«x–]Žõç󌬕ý—ˆ ;| yêS|ÈéöBç⌽þc9óˆÀô‘ò5t½3a5+¥ª¸Oߺòs4øèÿ>1…üÒÎ΋ýõÓ÷ºœO=¾~Ø0Ûlå•ÏË¥ÒÓ–®fó6ššÊ ãìc¼MA ~i8úë‹@BªT¥ÅÖÿ–uSLA{G~“V_曲G|Í7EU7òªø3©mm¾õ5Úémîwúû4þ§›3½¶;Z«§|,ÎéÔSœLPLÀõºK.¦ÞÅ…½6š7JÇ o¤_î©n[IÍ|aº7IdãÜçXëõªÃfm·mãÔ‡Ê~µÉ:e¢_Ã7aS9~MèÔ\Ñ{ÇåÇiké¯p̦ªÞá•ÈŸÔÅëý1Nïì/ï¨.޾k˜Œkt]“Dz¿,}š÷è¿÷å~뿆*5©¬ô£ÝUb© ƒÆ¿U¨¨1–ùï4«ÇÔ‰Î^{œùÔE º¯S·^©"‘/ÂuÜşܬÊvim£µ¸´{ë+z¿ úóÚRÝîŸãÏwF:™ï3Xf­ê'ÜPLËP_õ~[¯Þuq1¡ ¦6ïßuq­Ö~ çæê¨<g¾ª>^n¯d¼”ÞMóöé Ef§õ·žâÞBûkögt¼Q‡P´ ìÛã~TZmÒ|¿¼FNÖ úïÍ}ù©OÅ(nè—»«þ5o×°î~§—µ½EÝÿ–ÇÜC7]«$-=^þês½¿³l¬ÜÌ^T¯â(óösmå•è«ã§È;nS8½Úó©HtPÞ+#•”Œ÷;þLZµ(»|òî´Fé’ËJ2yÑ`¼9ZMuÚåÜ+ÏVybÍOÉw0}ùy¿y­F÷=c»ÒŸ¦¹Šx[Æøês^ ¦íý¶dßôe¡éY)/¤•sô)>_–í«kÖ%[Û˾¾þ÷êó­™àOÚõ±iÓ 9/‰‹ºÍ˜q õA˜¤‰bbJb(™‚H" "P(tRR J‘* B©KHR¬JÄ--% TRSS2Ds8¢$’’©ƒgEPâÁU Š.EÂ:+av]3D¤ó„WÂ(¾¿V0ÑB&N |ÙO<›påÔnëáô/" /Éï”DfÔõ³··ßñ7ƒ'¼={ä6HT|/‘WÔ/!ü¡ù= ÞXYó+Ö6¶‰Atå†dr™“BH£EÎþŸ‹¨þ'ΚÚîØotC^꓎®îîælj”U; §ƒ5ßrèÌÓÂen î­ãw׎+Ç=Ey ‚¥¯àøJ€+ô}äùPè]²ÒµTÐ_Ñ4Å )*’$¦–‚©j"’"/±d‚b†• B•¥Zhˆ”j% ¥( h¦f*ª‚XŠ&˜ ¡j"ª•‚bJ$ ˜¢¨Š†.ìEUUEQ-‘ÐP¥СE*R*% ÓJÒ i¤ã+E4ÈêÆç ªe4›N…ˆ¶%ª NUÉ+Ö’´”£Bh(ÒW%䜈٠ւ —–™]"ŠŽYŽ*ZÔJ¸UX{; ªŽÝYj±("¡54±b&ª1-Q›JS@h:´‘r4*Öi˜OüÜBîdUšµ*нxŒŠH êªðÝð")nÆèS“Ê(¾!GÞ'áˆO­¢@Qy>Öp.„wBƒ)ä-&½_!¬‡$;œ)¦d‘h‘r9’—@ÒšAJ€Òé'ìjq$üü‡Þ,|’hêÄ‘ñ¬÷ÉÊŠ)hiŽ`ä9Ø]þ wî9ÆGäO&\J¾îÛ²¸\Š»ƒœrE Ú˜Ò ÷w¼ásÓYAEÞ¾}êúÁ<É Y¨ò[„ˆ‚JëdA_}»ÐgÓ‘(?m†qKÓfhU}À\,³ºðÖºBšù²_7Ÿ!™”Ä툢ѫ¿Ã»—!0„„˜‡àü<‹¾÷ÜúÓ‰ÁȸǜwDìyÐ#«eB¹íÊòwHùÄ(„+›©‡¬Wæ0Tðý§œÂé}¶"/”‡½GZÜÓ?‰Ïši€®éPx¬îMu ù#á-…SîîPqäÃß × ?A3Ú8 ÂO||uÇÕër Š_{÷ßsóÅU«õÿ¡‡E4ªdÏù‘dÂÈ@¨ dT*g–´¥Ì É4‰¤ähQä§!Aä‰C Ð§$ q!„­"e2ª(ÑŠ# Š$Ÿà;œåëc“SÍEQ‘Ø<ƒwN'CNE79?«¼žAOÓ™œ¾W Õc ù|ÅRÒuÈ)åÔþgn¬û»o“yÜÉ$Ȳ~v!d.‚+H9Ïô#“²®tØWX¼Î¢µª¨"©çr–&a_ _;Ÿêëêò¯ŒÚ›0m‚œ˜0â+.3ÖÓ<ˆ ã>çàýŸö÷ü‡á>ïÝ>·áû¹?nÁøyðˆ*§øˆDSñ«þ¹D¡iJR%¢’¨”(T¤Fhh) Š–ˆj&€¨`…"T¥Z(Oæ‡Hé )H&T æÈ ”èR”WH鄤 Ò€é£BhP¥*ЇlƒJRQIE(iCCk44TKIE ¡Û)M¬éß{ñ1¨ª¡?lgÇþtÿÀu"® Ž»-ÚÔw`ËÃìí´¸B»8ü„qäTò÷ßÊ“³5ðõ:[ÒT&&z€¬tšT:À_¤a~ ÐІ!ÿžâü~‡™}åûâ]|?:«#aéêݲïÇ9¸cB¬òC÷~n@„9çÆÚäÛ]tÒ°N–#2V/?O÷_‹·ï?rÓ÷®ßñ?pýCû(ˆhUªR (ˆ ¡jŠH¦¢X¢"ˆ ‰ŠJ>•Z4DµCC}j¡PÖÁ&IGÂhYˆô'ôzk,¼P3u´«KµF\ÄÕ;ægÓHÉ EQ@‚š¤T3…#+”“ú'w#•ZY ™•_ìýÝäTq&Fè9]$=BœÂˆð¥¢‰Îuö\ZÙŒbÉì†OŠø\ìZ•zÁ5/‰1?ÛG;³é·}ß)¨Ôgµï½÷Äœ“ŸauO˜jj_׬¼¶´gÉ[|×ìI@›ló¶±…RHö+Ϩ+¬ê£$ç°×\„ ÿ-5ÐÓ5ŽT}ãG¹ûwàþ'åþWå6üÿïŠû¢Ò_¿(¸Eõ¡Ì£BHCIÉĵ”Q:ùpRiuG%¸Û²¾‹˜g@ùÕ´¢&(ÚÍµŽ’öO;y0/(æ¶=[ÎÇt"âÞw!:õ¿±d]çoì¢êÂÉŸ1É"å'-EF˜ lIòO3—C¢á4ŽWšBTUîO&#Ö\J3‚Eu³"€¤ì¥üv/Ï„qÃ2wc‘:ÃBÿŠîÈueD|û‹Xêáû´©Îš&zÄÑå›Ì“Ù¼„²‰ÒʼFöçù]èõ…ؾŒvEï¾x÷2“ùÍEÜ:eVp“+m¿,xJ‘‰äùíó'0>D¿¸°[{*£ü.³yɨÞèû÷gŸò•ðÝô "±P~¥±!÷  @¥Ä§Ø…Ì@´ª!CTEE-QÖÌ4LÓIPm¨f¢š©ˆhiFž£œÚt: J€ªB¹hªb¤ª) ÓZþ ®µRÅ&ù2ò¼ù]äÚ <®Û“¨'y1¤æÎ‡ètˆýÄ/S@u³OÞ\˜G8±ÑaEÂ9+“œ9›;ëbð£¯%ây'ß[R! …ýºa¼‘Þîç½6?å6Ûaüˆ÷åB©¢!¢ª$_¿(”+MAI@BÌk0ÑCQ)|‰ §Z©©´Å%LLDÁ¬Õ;b†&CMT¶ÎE’EȲ+ÅÙ|À–‘ÑgäGäuðy®K˜ê9Í¡äõ!î;ŽH‘z#ÌvAØ ÏÙ±Mó•ȦhϾmž7Y}c !zS0-{r褊 ’b†"‘¨„¦¨xÂèS14%Õ ‘D@ÒS[)—ePWÔdP£»CëO9tâeÈ®p²ˆ ¤ØDEÓPY"‚\+E4%<ƒ•ªLÃC¥Â˜e$³ê2L’BˆFU\ÉaE\òÒ/PÉ) ý§¬hAQ “”qÌÅЦä\N’¦VC¨Üåç„®$×óWcÎØ!äÂâ Çgnw7AÎJ7\wV$Q œÍG.$Û’ÜŽK$$¯‰}$—™•úXÛçžôyÛœ ¿^y•*E3¤†ZõDŸæ×Ü7»»úV?=£YT1·ŒÆ‰4¬øôeÕ@ð” Ê©9?}? 7¸q°:rábV„S®Wdºhœi¨ü˜!äáPå ª{îáúý_½§ú]ƒ+ö€E@ûËùÐà”E&™ˆ&’§A«çd :D)W’9‘…iZ „M­U!TD:4û“ëÁ§àuß"(((öà©ßEƒÈ¸‰!?Q…2;˜ä§Š«^ î+«gN¡N''çr*î¾âEPË”\g'¿šýK%U4µMè°UWfÚ׋Uxèu­³­×[Ÿi¼^”DOh=Õ@úŸ\AOÕ” MkM ÉÔEUÆÌT›f(¡ªRŠ‹æÆ­Z) –䘕£âÊr-/$ä-PèZ:…SM.44 ´¨-"%*<žIËF”  hmƒH CJÛ @r@ RaÒbR†Š4f¬ÿ2s»"ʨ( ÖÂí4™Šbq š£hˆdÄÍÏp¾¤QSÙeºåâ,‚—¬cžL-O²l“z¿¥½µ]íº¼H³Lß”EÎ a3^Z? -úñŠ·\Ÿ°Øx‰û+i:CÑÂ/G-3bÒtÛæKµm·* ð…UÄ¿›(P¢4‚ P€ý¹¦~Þ1UDÅÔsȲÍÝÅJòÁ+µX\4IPHHˆª9ÌŽSÚç:ëÍDKD¼¶DwÈõäåg œˆ¶‰ÕjB|L“ÕÏ¥yþÓvñ ŽÑ· ˆ"aCo9g´[¨7_oO øê/éÆwºòɓș\¿Ò7w¤3'&Ôû&{m~ë/_9ˆY^1D.j0€þþuK!cž—%)úݳUýHÜϨ~ÇØØyævµ€ÔAÿò'âBHCáýOrùuîmD”þLÜ.…g†1©y˜¢,Ê;ËT³ Yœ‹A ZN´¤ÀãH*åÄà¢$>Nps±§y•Û‘pb(Ù@’/tm½ëri$€IÁ”dPœeÁR¢4”­%rÐi^KÈ ©)j„ (JQ ˜^A¤¤ˆq(  Ø`”L»=β‚€¹ö[3£e‚âEÄ+²˜›Ýï{"®U\÷\÷sÞq åÞȠħ Õà‘|£©ÒhȈ¤›»Ù:*ùgÎ*tb‰¢€¤hiˆ&œ¨¢Öœ992ŸÎÊu*좔_;}Ú=B¸¬¹ôw1ÉRÝû_I^’†õÌ"ñ*ª#É»ˆÉW:#‹–…Ó”D?RóTrù(¡‹8nÕØh§Ú-^«[[×–pª{yMs뮣'çyÊ%{œlÏn8îÐ;…÷Ížm‡.ˆßjÞùÝ|¬qû ­Æ”ÕilCõç¤I˜›@˜›ôi+gë¬øøöCm[¢=ŸÃ€Ù„aáHEÅg·²›NÖuÅd«M 6Û=ÅDìˆ ;„ ª~@D UþÀú° ‚Òû[*>ܪi¡F„b‘ ‰ª‚ª‚€ùV„u8Üœ‚‹Ýݹ܊‚aES2¨ªåM½ögcGrÜÁ¿µC/äù>ëcæN­ÌŠy¸†•Ð÷r†ÛX”ýœi¡G¨9˸SÖ9Ã_Ïïäwî¶PG(™Ñ&*š~Ão©îÍÉ÷ÜÅ÷W…QCòŠõ/êþ'@fF€)B„)R©‘j©J Qˆ©¤©Š šŠ‚ŠIˆ©’ &`˜‚*Bš)(j‚ª‰©”3…6ÃA 2¨âIÂà…Ê.Q³a‰¢È"0äç Ô+Îh?¨àŽ˜?´OWWÖ×óD**žúÇ=XÇ' ¤¯… 3ìûÿgnóåßÔÅž¼ÎÙÉZNwEsXþÚwõ>û¿cI)ÒG^è ‡tDHPPú•V?Þ?fPúø% LTS‡Ù‘ †’ j–…¤B”¡Q+–¥Š–„‰ –š: ¢†‚Š ˆ¢ªØ4TRTÉT’S4ÐÕDé4h 4mR Ä€Ñ¤PU,“:ªÙ­ íCíÃĉЮ±žç¨;ù¾²‡É´øg|œïÞá݆†²†ÑåQsïS·h@ÕîLÝçÄœ¨;±û‚>O鿵ãŠþ½=y3>nĸ—W²MD˜}'3äß±ùá,ÓUàý‡ê ?cµuùp™•Ëô]®¥[bŒ§dDUÂŒ*ªŠ¢‹õ ª0ƒÿ>Ô£õì@PÑJ”´±IM)BUPÄm’ @i©*Š÷ ÑULE4Å$CAE Á ?jLLQ%#K£RMJéÒhÁQM  ¡4(P:) tµBR4„ДQ¤Šp,©…Ä‚’B¤‚Š(»©.AAQ ‹—„F‚EÍH"‚#…‰DUG áUÓTe2“/óôðH1ݹ9s:Ur¨£¹$ÍHs¹{Xym70¸?× ‘<ÉÊu¡Ë¡M”å•'žM”œ,œàíĺá,•‡¾sŽ-P- %0TMT ÙoèweÇ_vЪ¹Ç8Gè¡\©YQÅû£²–L«‹*¸›ïÜ|( N²®E—1+oHŠ|ìuý>á}Þ~ß Ži÷<ûº©¥„ô¨kÒ¢j6û¹Çlá Ùï¶Gá…ú3è§—âÔwž[­½(Šˆ>Q‘PVAÉ(û`Sÿæ(+$Êk#ŸÚ„@^Õÿÿü© ‡oÿ4 à“„  „ à ;¶‚@±½½Ô{©ª,ÃCV¶€H€{¬ìàG\t@è€:¶ÙU*RJT€PU`ìÎÛZª $J ¡&`ª¥i‰P)B”à…“! J¢"©J)Õ´”©R¤ ªj¤‰(QD•R*•¶J‰RD%B¤@J…‚¥ )ZÄ¢@UAZd ©8¤­°E#¶P•HÚ@ AATJ)"‚Rª)B…*€¢¨Ö€DH U)Il k¶¢€‰"H\S@Q* ¤@޲H‰¢ªH ¢ã »Q•Ø5V›¡ÝÄh4ÓJµ}÷uåkA£Bš£Ý„¢¥#è¡„©P‚Hµ•R• *”(U HYcí¾Ì˜©¬ÕbÚ³:ΔÊÃ[-­eU6-µ’«f¨‚¥Bª*=ÝÝ´vÒÝ»YÝÂ5¨€»2´IR7gI§]PØËLM5­4£V»»“¬+¶)6ËC4i¶‰J©BQ(½íÁ{5IQ%Vñëuì 3wª¤¹Þ,ëÅk]vÝí“ˬ§¶hB¢…¬úꪥ= ¥ (PJ‰"­ $QBŠ¢@CO§)Rõ¶ÖØW¬Wç;JÛ+m©š¶Ô’n›¦L#ÓXÉIÉ íªÍ(j£m«owÝ®„(¢Š¥" UA H $¨@´úùfjµ¬Í,,И;9tÙ5²kF­[e¦té­³jÚÒ›+CC½…í{»•NÙSkVUŽðÔý¥H¤~”?T„Ð@  ž*IJ¤É 4Èh2h bÄÓ O%$•%#jL†L&@ÐÄÐÄFÔÐz¤’’©éH$©&”4h ¨€4Ѧš ÒŸ¥I)Tƒ  21i ¦FŒL!§íúxø46 £iS²“°PíRŒÈ[BÚ ­ª›!mTív‹bØl‰íC°Kµ-“µSµ*v“jªí)°l‡d”v’íM’›cb©Ú.Ò—2›GjVÒ6RÚÙÚÙ?ã6xÊQÚª›%'iÚ!¶Ò6Gb.Ò¶Bv¥v [RÙ.ЩÚWj”vE±¡l6•Wi³gjØwtíô9ãÄv ¨v lªŠ;UUvHØv•6*v¤í;تvA²UlÒ¡²SjˆÜ­¢´‰¸ë²šìÓ»¥{×¼.®ž÷¨ÚÖÜÑ­mk6R6¥„NÒCevª‡el´6)mR­’›%l íJí%vòñÉ0(pgŒä¹¯7™}<¬,A ̱p¢¥A-ä.Ï0ÞÙ{¥˜¹&†³¥õ§¡ÃV¢¨®žG6fžàžîž§»¦Ñlª¶m ’­ªÙ'j„íU[m°ÄSµ+²‹j¶#iv‘[Se'j®Â®²FÅl;¶èbÑnZ¯û={ÜLG&¹{2ÑB3,5-4¶:”.e­WiÙdêÉ#²2 à³M‡:°sdääûj=g\wê1 ŽÈâÅ6Gyï]ª-N=zœœ¦<Á§½4‹é·á šºR‘dÕ®!(FŸ«#3Ö³³¡v…mU6 …m*¦ÀÙ Ù&wT¦Õ ÝÚ.Ҧжns8×\ç£ÄF¼±Ó¢º‹¶—\æ”L=ÁODðH¼‚$”43´³,Vµ æ4(uš…Wž®Öå5uJH\¼µ Êóç¡GKö$2ÑGÛ–æUˆJ¦ŒöÒ¤Å"H¢ŒõufÝP„2¦¬(M$ÊÊ71S3¶ÔPÑW%i]k¢ÓU˜,®®TŽÂC"13U*m‡= Ä¥ !r‘t²ÆÄi™˜—­¬J¬ÕM&1™Q4±’úÐ{nQÔ‘ óI4Œ¸Õ3–YªÙ4YLÕÆQ*®jHJê:¡K˜†‹¡…“Ö3 RÔŒÑFvDY¹MEM4ªÐ‚µªÖ×2_˜t*5ËÒÔ O{JfQR.GY20WÎÓP¥EÎk[¸îfn±Ú¶b•ÚV¹´r­©Ýµ±UŽîìèéÑÝÒqB=0ôòmÄ;£Ž'Ž›-q%¥™Tê9«jºþzsÙ;všÁvYlh5Õ;qµiu+2;¥ZÌË_SÝX:YXš[¢oÏloV§Cªª¦W¢‘‹Šv²·)æÜP¹fe@ÈŠÖ_{Þ¹u’\,Æ©ÔËqR!j€õ´RŒò¨Ê% Sªë% ý{ êJÕ¬ÕS]DšVʦ«©I™™Íü÷y̤N–nµÐêÚÓóƒH´Q41ÊôÑ+u¦*-5HÍVÕjg+ãGC˜ &S‡#Ê8^x‹êÅ5-*1ÊL|–Bù6æd…zõ”CWI$•t% ê=],25md4+Y$XieŒé˜_½7®k.tkTéÎæ™›š«W2TÔ«"k«RÎ]õw“®³Zfk³^wë9 4u(.¥E4K9œ•Ȳä•ÄüžÚˤdºe4 !«œKZ´e’Y *5ÕÒÙ†Òî´kœÔÝÑCr”Q'‘Ȥ…*T»¢%Zgyï §z½©U5<”^Öy‰¨.ºò\Žˆ†e¦½c \·QTÒûéÉ€9ù¡> €Ä="%~÷·‰i™J“UOQ½.¹:˜­X×MTÖtj$‘Jâvu]#Òšž•M6irT¶ZY×5ÕqukYHâVnù3ÈÍv«eÓef]Z÷¦ó®jÕ°šÒ™Y0lU§S˜m&•ÍÄŠ‹\””õŒ}nÒ1VµÈZ­yõePš–“J¬«£…–j¦|ëÝS¤k©…‚’¶½ëÌæŸ¯{ru- Š×VjꑉhŠ(eé„”IÎ.•©níÆîÚnÝgmFÛNu£¶æ7îÖ¹ZJ+0q:nbåb}eæºÇr÷Ïk¶¡(š)©næŒ\ëªc¦©,e©†UÌp¼Ãç/i¨dYad‰™e¦µÆŽ´Ôk3tŠbÛ·×Gçí T"u}c1™ªÖ4¦l][5¨ºUš0ÓŒGT«§3SS+[X™™:«EÂ¥•FQ¢Ö4MÅù²‰›<Ÿ”•áú¡åS !ç—' ó´B°Ì… ‹Þv’¢‰a–ÔÖýëÎFN“µM™¥.? œòëj`FeeQ‹˜‡©hO&4}·:éY—4ÁœŠÚÏ©¼–ªWEJ\5ÊJL Ò§±b¡cÏŸ ä¡í»hQE•Ñc “0µ–IMb®Ö¬­dåZå-œƒ…K¢`b˜Ty%F¢kØÂºFšÔ–¹u1„m3]—Fºæó²‘rKÔÛFêêêêš…ŠŠHm¬šÎ)*R‹«]T²µ.­RY‚¶õ33Ë)Œ¢2N™-u×V×K›˜°ë-ZȘSQÍjºWM”áFj1Œ‚`ê‹ àÊ€’È!Õb‚^|þЧ„e¥Ì®k¼ÜÏ#ÕÂÉjÔæ~õ›Ñ[FY¡R VT‘(´µ°Ekæ÷ºÕk¤4ª‹BÒrÆ´jkU­B'‰&Žf[W'ÛiD¡†&æ.Z—ÎÍO-d°ôÈ©P²Ölm8Ÿ«4“B^°haâ"!¦ ›æÑPÏ*2¹,¹ui­”o×¼i¬Yjb³¤ÁÆ,*“¥]J†«AYUÏÞªRÖ“5Kõoefd‘Yçë¤Êð$Ä‚¹ï‡»°­yª¹[nmŠ9UËŽ¸ÄÛh531š™‹ZÔÝ$×.ª\Ô–¶ªæ.ÕUµUŽUÇUúÞ<Ö8t¬V„rŽ]õtŽÊÄsÅöʪB]H‘}­t=*ÄÒk†~­éš-4'[3aªHª¨JQs•ÓB²—$Ñ sR3ÔJžûã öa.fËULƒ69RɯffеÕ,MBCk(ö`U!¤¯$¸¤£MeÖ´*[æ÷‘MsW+ªäQ)d®±dD¹¬V++«K׳{Xúðõ­#›:ªêí5%¢¤-Va¦fM’TÙbµ¨S¾öÛyXÖ¾î·Û®+²p¹T¡zNea.ó<ÖsZzìdUVê"ˆõ+Â&®fT_­ïW= ×V±«‰äC&°Ó}õêcp êÆòÇ’Íó^íÓ»I±Ð}—‡>§yî&ê%Õ]b‡‚Üÿgý—ý³Dÿ·^Äÿ.O^}“5œ®OñâLÅh¼ûǧÏ7 ¼¡.Á;Ç^ñï[ïgEË*Q°•f!A©¥, à…aG˜ë¶–¨'¢4DÏ>—Éì^½èð¹…¾Û_iO˜D÷KЭJŠ ´ÀLqçÌYÆ: Yldž¬%$l ú÷¼åöò'ª ²[•ó­•-£B¾cóíªž… ‚>mZáæ…ð)Î9"Ö¨TÕšLyñ€#|@käpO¼èËg*UètdaX}¥÷¾Mñ}…ÎQÕË7Â|éö(yÑ‘Yr–-S$ØÇœd ȹ&÷©sâW@mb ;å;çÕɤ½*9<Ø•E%_±œ” H©œz³ç £ØºLð¤8Óœq  V»`œ A:Í6lñf^O@y]Ó2ƒë‰ÏOÈùðûŸ&¶E@ìÜ[y»Ç˜ZXÏìZõ3Ö!Æd°`"Ì­nL#¬Ø¹Šéy±ª Ú2fÍ]MA86¾·¼˜S>p>¨Ôï>òûsf1 ¹õ!9q>œ>ó¬Õ|ù4ÓÍêŸi`¥Z¬8Lc"Ç£ÀZ­-ªd99÷£>Ø}8±È(×M¼­Š$óëv˜}‹yMºEí®¼íí"#ÕÒ"%t¸ÚœHÈ\w¼ö¦·é%E/ÑÉíë°™ "ùîŸ$ù)µ‹íëÎw©{{ѽîaÜ` »Du—3ÃZ)Äýæá@G8[Íë¥dfîdóú°}Y›K‘Qù–ÉŒ ïÞðˆ¨èHe QO;$Ÿ«Ç´4æÖd\Œ1ž'_½¯yOš†‰ý½èoNdïËè2„‰j H“¢DÍi»ý§‰Èž)5ò6æÏƒ&|á= OùÑçQH/I¡G‘ÆÞ}&05Ò œ¦ÍÞs° ÉÃÚ7äñºˆ~Ó¸hUZ!R•dÔ™°Äõó•)¯Eé8X-ª¦i¤QCTü ·$2xmB°!ü÷­ll@ódMÛedAçÚgh'Ƽ7Ì“°&oÃÞ8N(Ò¥?zòzÖY´¾bòú÷¤-z³ 1O­²££ÍãÖïˆø¤mƒ.ä©È Òr„kØòÆ;„7Ó”ó#î…;À"pB·½ï*KMÁ汌`žF®´Ð"Î2QªRÔÑýJ«JŒ­…v!7äê"ÌÝ`€^¯!¼&r¤‹ÌEs`¹¬‹ÙiEQdSÉïGžê©»;©× ¡Eœ6ˆGÓí¹ÐG©H]æ.æÎ…‚ÔÚç‰'œªŒ]ã£@Žt¹w¥6󽼈Ã3èºV^$b¨úCM¡1'_´L¶9JŠVÓ¶ªZê¯Hè( å/ok õh‚¬±˜Ð‰œ-+5ÍU>|ƒ©E^|™È¦êªˆûÛÓogÇš"õàà=…G§ÃËœR”MgìFzAhšï“< õH¼g;ä¼Ï*µõ>C;ïo<ÍùóÆ(O¥ÌÉ…jWˆÃò–ªÏ[K†ãÙ´ÂÄkïV‡SIVwŠ;Ï=/ã¬>®9ÏzL°ZµôÖØUTôuä[=#Ù‰UhòNô8G[(•ƒŽ [T#hl©¥0aæ'ØËÞ½‹ö0âúžTÂy$Éç³9Àîž,ݺ¡^¯N:~ûÚó«qˆ‹¼¦ö®€$—Ñ=G·x5Ok&˜^EUsÞ­ëÞ|ÅHÙt¸t?ÄeVÉ”‰ÒÚ³ÖZÊ @!´ìp,’‰ÁG<€N• Æ;š±Th–ifù}âsælcw¢÷Ðg³{ ÓxÌØ×f÷£ÞçVGDÄ)"¤ÑÄœ}>0úó[‘Hà gá°HJì*{ªqyžqZï‡%ï'ŽójË™Ï" Ykð«l‹Pfc¤@§‰æÓî²÷’Ü}¾ñê‡RÍ0“ðä_¢ï¾ôJªNr¢šäIØA H!Eéâšo}ݹn4vª¬¾>Ç ëHj[hS.öðžEê犚*j#VÂÈ€A-¨óSö»³ö”EQOµ„O$j©ÌìÆ —ŸúóåJëŸ7®ð.Hý]óè%ùÛ×KÐLdïOŽAsŒd|fS‹ªn)Ö `r`ލÀ6PW7*™é'W¼]ïYçAd2 \òG4X”ðG©:4gרØÕ<£B„0Üþ¡SÈ(ãZ'(¢òÖìвG£¤ð™àÏ«8É£B.DÌt´AçÎCÛaÔ,›7œo_{y3ííÜ5Q„4ܼh³Ë.Gˆ9§Þmì`Óï{{̽(«©]½Œ4gr)äû¯_{sê[”<™×Õêñ—XnE ‚¢†vc“K ”ŠA¶ª*Vš+ž\¡ó¨S¼¿/ï0c4e{b1iO><‚¥l5…ZÏó×bÞ¦FP²ã¸Ä}oú¾<Èl\Ê Ïè°hCm´‚'ÕÚ{£}¬"x¤ib×ÉîL¯xrõ#NûÎ|hñœyå/zñ4á3v#VKO •%VŽÚØòd¨O0,ç:”XÏXÎ5¢¡µ‹ÚÉæTÌ$%£çÃå>¼ze`œà2ñç©G/!?/uÛíó&´éô;SíV¦\ìmë©);FôÙŠW.8÷çÜNoMÞJ× D¶äc8;ÎxìYaÍê}ïlyÞ0dˆ¥Fw±IïO™LË)Š­—Z®Üã18tÃÙ,'₯R†`%äˆ Œ¿ÂŸ›9ÇF–m Z·êÖ›Þ¾‘¹´µË8°äx› ÷¯yÏî$–É»èÉŽ}§C32Ì+kFGæ•©â75±5TtUù¾\*ÖûÞÓ¤éÀ ïOZXÔDTFYé>¥¬ä¯8^|çïÇ—ÀkXïLsгzrü}ñµÑ¥N./=× ãÞÉœÖQq`Ë%(—}z¯ eПXÅǹqy¹Tó57¬fDÒhRÈÛ>ÑžÞx¢°ª'yú¹"A̼‘×F#.÷ŸSK<íjâ’¥!$ñ=O86‘ÏH½æÑáÃÙŒ=ut"ä%µä¹#Ö™Auz`ñ–Ì@³ö¸‘¦£iÿ -RE¤Kíw˜”BRÀb¬ õ®þëcÆo«0*CzØö7 ’I2Àò`ÆSjˆŽ76!*Ñä½kÆê”Qm¡ä[Í‚»AdÎi v<¾Æ†Ú¢LyŒ+çÐì8UÞõâŸy2*õ3^p¢ë‘L›MÉÞÑùÞóé=ëÝÓß1v>ÐŽ!;&’¡ôg}}‰{ßo*Þ0‹ÛÍØr›ƒÂQhxóo*kÇ“½c“ÖËæÕð[k®øPm´HÂÕ#4@ÏÎ|¬ßRn¬h×´3.cfhÏø±ïb~¼o<+Ï*yªZ$ö©KÔ Š­va0e³‡¼‘ˆ¨…)}ïc—ž|¹ó³ç!ÓæÀ¼ÁŒwÍÔkÞ÷·9Þ«U‰8#(Œþ<UX¾ˆUpZh¶¥,n 4èZ<Öo]åñ˜pâ,"ek£Ø?½íPzœ# §)%ûAˆÇ‡­¢?Äò#9Ò9hyUä^Tö,h²ž·ø¼˜I‡Øùt÷¢•ö‘GI77¨ó>XZnHæôgœ$*†M¹s²³®”PÂHƒœÛb$^„—™K±Ž"^/g6±ó¨ÉWa3¤zXCÕžJèG™â×›À¬æSU°s½íï0Jñï;Æ©uÒ½èòð/y·hŸnö.«—ÔUä¼±,ÆCr)½ïxõÛc¯í[A›œ–Decm„}¥ìÐ8ÂŽœØ y¤b^vó½RÆýo}‰É}{Ëz£\d3Õ±Ó‚øt¹ß(Î¸á ± ð#§cgØö¼,áÑ\^z|+¼¥È¼ ÄÎ~˜\ÚÍÂGìT€¤‘? <Ê«Ÿ‚)ì&–M§-ô½B[`´D1g¼Ó#½¼˜jB72¥I6½èS£êWµ·6*Pæ@DìŠ Wäü"ôQ‚Es:GÍÏd‘m Î<é‘ñíä]åÒ8{Ë2ÜùøˆWx Ù;â=äc)¯:„f¸ÆLÊywÊ)¾À¶6J–~nÄR ä°ë²9£oŸŸ¾EK¡Kì€BÀI†‘F:>½i É*8N}¥ê/’}wœÂlch»ŠÞô=<üx™¬ör€»ÂuàȾ¥ú—Ôч´ýO×{ï"ºôO6*Ú0˜£±CˆKµLQ«jK6 >ÓoðœKFŒä#RgçÛØL“ëØºO$ Œ6,ßž~~¨ž«ÞÁÞo*žóVgÃ/asÞËp£–ƒÔÚ|ûÞ _TÏ>„<û10ûÞ¼9_#²úQ}íyÕ Qíl–¤LûxfнñÊéæ$ôZºDµØ ¥Mê'Ä}}÷Žø ci§*ÛÞò»ÍÆOEG´L)óa†¥ðšÈ;õ­}h¼õ‚õ†B½oH6sëwžö “ñùÏ{b0_¶41ú¦_½“ÏB÷žDµd®»@šï>\ ò{Nw´o9 …˜ÄpÐóï«ßkY €"÷Íäöåfž„¦‘½w­îûlMß$Söù÷^ƒP\¢1'Ï­ ôÕUÑä)@ÑæÚïUÄA­ñ½äóâч ¯VÆ=„½^ûÁáŒÈ‰Êšº;Ç#G·EJ§¶ÒK žÇæòªz+¾[p`ô‡:Á5àT'†ÂÛ@¬þ”U–8›#Á•©Ç ª`«cM¢×hؘ1—¬¾ùÆrSí ‹½AƒìY|T5Â…R&q‰–þúíäDŸÙ>/Ÿ‘œõ¡|E<ëN%_¯¬*TT ²=‘TYâ“&H]²—._6üòûº7 ¦¤Á–¡%mwg²r‡Þû¯:ÇŸJ†lƒ¬Š¸÷®°Ë1jGÑon’‚ˆ¦s§´nS3Ì4¹ö$ó=!ç¡ï{¤qL\“·Î2x‘l",ÖÖHl¸U÷Ï{%¹é` ŸsCŒK—RoWAúûß}èP^Lœ<áPæeÕYǽâ b÷kŒU ‘£Ã”=ëö‡Ý/)ï®¶s‚¡'”J`ô®2ÍÁ§—µ’%Êû O§>†ôìïrñfh£‘’äžØR­ãѵï4ùBQ¦eLj»*õlESÄq&6—×O°©cãzôR„´ëÇØ_{½&vKY¦Y¾~Ì]ï."Ö=^“W×{ ±D¢!ð9Ë]ñNZÍ“yñ ‡´gÏ}ÖÑUö}gõ¾Å—ÚAÊ€&S«`käSŒ_zÞ7oz7ó>ºï“G&~|˜nUfJÈaWs4DÞÕ»Ç÷¾CÈz'‹„›G»p­õp±“`/ Z:_``W Õ“S²Õk¼ïxÆñÐ@ yÄYó{;*ò†è”dÜåBu‡—ƒÆ}4—òÞùvó¾ox¼o8o&ôG²q¼Æò¾Î4ÕO‹Ú½;*à}q÷¹ë?7~}ÈššýÛ¶Ýö3½ƒïE¼§_>=Þß ZENiŸ:ǽ{Šò!{\=½RÓ½ïxòŒ.–=o¯¦‡ÈU&zãÚ‡§!“—Waîì%Ô½þOcJC!* ¦ß7MžZn&›BvŸœv¾¶ù^>îIQGóÝå¯8m½]¦Ó?#Žýk¬¶5-/§,”|ÜÑ×Jwk…õ£5éqÁëïylGKŽŽƒ^¢“Þ-y‘()á@MARµƒª‚-ø÷ŸD“zš7›ÔE¯k•Ø„ùg AäÈÓU*ú­=O#Ѭ©Œ²¢¾r~~“r«Á%ßAÙî2 Ø×™ïT‹ŒQ ³Ê(“Æšó‰»eüó÷߰ů¯®ñõÃõÁ= 9ù0ž óÉ# ääÊŠB¾ùÞb¢ÛÊåþºóTTlZü¯çº ó­?ŽÃ0q¢P«…:xYž¹“¼ÚO»ïÜÞ÷l7›k•y¹¬o8räNíys^QÊìî3Ý&Ð(ñ%KÝ='.Ù[§yÝ1Õíã»8ÛU*æÝÝhÒ]Ý’ór1W–Ê î“—¿;<ªò)é ^ÈdêÛR’T¦®'!2œ‰›Éçõ9†z[™–¾tØÜ0rqZ¢#FÄŽºa¿9œÏÓh8æÜM:ÐA°v¢ªé}¶š'àRÁÉ^f’ ZŸ‚6ÚF‚"©ÛTQÙ* (]æ)棢Ep¢‚©ï]ž,ìoÀ…Ÿ“晜à*(¼È|2ɰÂñª—Ø~ÃHm0>ÛÆç=ˆê)| nÄg•j‘€ZEê*ÚMôÖ²y5Å”7Ë2nÄ™îÙEFЯ;Tx§:{KÚ+|Ǽ?Ÿ{xÕ÷¬ÈM&©svzB[ è!ý-CkgEÞÈôoÀAߢ٬ÄÎÅ ÆQ£:  Æ«lmKa™DtAs•?‡À Ò#OçñŒß„'Ý‚e=I V·Nµ+C‘fxôG…›T³ìŸ²€ÄA³µø†›º& ¸V²'æÉ6³ÀÐ,ÊÏòY.>+è¼ú¬FõáÎõˆSGݽÇ®`œPžƒøwe´‰Û54¨Žõž¯ŒÏÓ»ªU>MÌ5ñ¨g†]Œö®Ê†ìµ·dÚ*¨i¯Hõó'Ù¨¨' Tì*|ö®;­hLòØÙÖCß°c û`ߘ$Æ‹mýâþ/NäòbòKmøw‚r¤ÔŒxqQz0a‹çÚûí´¢}B£’us­§=õù´1¢0zaÑz¿?Ÿ”_è‡>Cï<À«)4ìc ‰ÑAKµ±5£ˆõhqLéiOSÕ6ié41­¦RÕhÀcúZ°Ê*Ž=‡_/º}Oìʘ®4#Ó;Znà¨ÒøOŸ™Ó]ƒáÎBˆ<Û‰ø¤í²ošëÒs£,A<Ä›q´¹‰é"ÅH ßŒ“c!–õ·`4SãQ¬)ÈþÄÙ2. ";^~û|'žDÔûöÂL?J:Æ¢­*X¯¢q¤éÎÄì𬟬Cµ_¼ûÇ™ $üþOçÂ}t´Á2Ÿ›­ý`§Î+tôi3\JÀújTÂ?£<ú'øãáS~œlmóùŠ´ÃÇϲ•žªÚE¶:ã~†!FÚÝnm[žÖ?g„õmåöQQ¦ÝùÅô’‹9,–[­«õwÖ·  âù«‹æÅÑ5>|Ú¢4 ªxu»>>¦“Ž©€Ù;qç½@›èåa¨ÕQ«µÞ͸z»ÖyFþp%Ðw£½!Nñ]Û/µ d$ùÀ(›°í²ú¾àIé]]uý¾¿göµ2K&Yò“End"¤NKÎ0š²&“åVŽŒ¨b‰³‰KhIÖ­¨Dó÷ÎÄÌ÷›MØVQ ‡]4©lqÉ"(šoièš,gŶ6zyÄÇn}\øÁÈKÎgc\ÜQÅ~ˆ4 ‡eІ¶ˆ+‰ ÝukAÇæT´‰‚‘Ee#¼ª‘¢úÚ«¢‹«×¤Fì9¾oÜÇCmæQôw>vkÊ ·Qz7¬Tu5Õ5ί“°Ÿ_ä{Õt×ESiûæÍ”ŒM§µŠš4#Ü5E4—¢i‘±û7>ë+ëhQ¶H_›Qã/¶­¦DF)æ¨$t ´¶3;æ53àýüûÛîýiÍB*É(§˜û:6fšÖ!—èWrÎ<Ö:î«›¤F-NÇ[{é¹o¬§›i·«R¶4!céy¹eR[‡®üîìÄÚµ…IÇn'4O„ðÓÑGeVüKSõ)‚G㤥ŒHc±¬mY'‹F‚~NHık3щ?89ÃVK}ÍugçÔ®.eQ•ú:ÓE"lÃŽ67¥ž™?§¥_FzYBõõ´ÊÈÏ1ŸÖf ‚è­GWjôm¸fèÚq‘©n‹d3EÑÖî•è…zm•W¦€7KÂÙUˆÃœ"ÆSÏÝmtÒZBf“•è7E´µ¶£r@:Y´ë­aõ½´ìÚ{/š±ÔÓ’|îÒ{|îÝÏoT6?/¦¾nªÕrçª;ÔrЦšo Kóê† üŸÒÂÓ=¶F\ÜÞ–&¬Qsª^!Ùö~Év]Ö³3~¤m'¹i â&²„çÎLáZŠÅóÇgLDÇq†%˜ÁIùþøý¥Ïëƒ3tÙ~¯S* ŸÑ‡ÍìœLêýTCúvùè¾ù¶Ï§¥L¨mùÆÁ|B]½ú5~k¢u æØþq¶(£@D w×/“vª#ãÛ·ŒôÌúBÔ¤im5ÉóU*{Z'clú²¬7󊰯žÞ±å²+F߆?21jbº'¬Ãm”ªqoƒ•?YI[µûu°jG•—éÒ §Ã£_$&hO`FXÜT@«®`±FÓNÆÌ©£Ô°±°*"(6ˆ¾¾ÝµTP¯e'Í÷ÏÖ¶+ðF«Í7ÊØ7OFN'1^×°?´ß{š‘žÑc÷@AöMSnžëŸ ´‚qG@W9:RèEÊ‘N¢:¦—ƒ•Ãjšßvv7ˆuËe®lž—·}ôã è”Eh Î_]MÕÎQm° Ku_4FìÓLT3¯œ·KÝui>ŠpºaHååï%ï{Þ^_¾¿%Ýô#Ÿ—áË5üÍùï¢ÒLWT§¹¦™íÚO¸ëœOŸ®Ìž3‘Ãæ¾û—s­ˆøòÊ44{Øb)§®j–¦¢.k?|ß 6™áÓ› {ë a3 ¬‡=õlyRŸ1ƒXØsß‹Oßz(™xà&Þñ?ì¾%„’g âúªo GŠB1B‰ÙôºÍ>+z ?1:“Ùâü-C 6±¾Š#á:þ/h²Í3Û(ƒ!Yõk¹ãÝ´~b›@F5 u,ÍFB¿—ï}É¿ï*ìáTQ7­|Ýɯ8¡5Ž']Œõ{Úå0ˆ´4y½m¢¿µ™¼ÔôaX@žôôl«ç8ùÏ{ʈߡ8¬„B_/Âùh£BÑÁ?ˆ ¥¶–?ëR;T® K,hry‡ÒZxiÁ0}Pæ÷ˆSÁè‡cCD±-Rxz ²—íð¯–iù é? 3Üò ZÁa— X‡Í5Zu5#€'¿T_á4r¿A:Þ~/|¦ê’ÏQCŽNDÕȽ¿zöÏ—óéó çAVï¶yƒV9<äÍÁ¶­ÐÉúç £ª3ékG÷ÓÑ+ôù_|(XàÊ." m¡žyÓÜJÛi‹DÁ9¬uóÂÂÃÜyCÑ«‡˜  n˜Â`x<˜¨”+bšQúµ›ZŸ0y?·ö=°eì’ëò¡¦ªVŸ—2Ê€ãá©b@¡ä<Ó§ ‚”T+4q€ý¤#G¤MœzÆVýǨߚ!E¹¥f‚ÈV4˜ÛL§§hˆÖ@.)ëš|z¦÷¶<ô:îH´:2нšX‚V89¤Í£-µñ˜\b"ƒ±"Éé\™éžubë ¾P1TßG—cÕèìûÍ<^·7zò¢¢¨Pò‚bœü›’Æ­*žž¢4x*b­ªI%µPg“2 D#k^¤ö8‘Ò K±Ú6}~Рd*ò›ûtò!“E>äŸœÏ Æw¡(=‹—Ÿ£ûGýû{Çš¡U'ˆKù¸Éó¿¢rïÛ™û/)óÕIfÂ/†—1O¢C* ¼Ì}¿n/WÚ{³Æ{¾ñrùí¬÷I ñù ?$÷Þ² VNÌ} yáxí¬÷Tr„ÛõÀL÷Ï ÙýCE¨¹±­Ê¿ƒQårÒF·ËWñW›æ¿6ói/•åyókyoÍcn`¹µ¿Šù~gî¿9j{¨Þk—›GËÍyªx<Ÿzòw^ŽÏWÕ]Çò ÜeL„™5ú;ç¾»ùÏtÃÝç§ÏH}£¼žWç9Eïä7Õý×/Ï'yí]ù9þ€‘{¿>{”“äþø¾Oäü€§™8üŸ9 è õ==ïÝ™ó"÷ÏöºBL÷žƒçvzyÆŽû¾:úºU?I»—¾oÐwöƒóÓÀ(ÿ}ý{Ï/‘g¤’ú6bîäeÔœU½d]¾.¹rd3çÚ*6»Éí}]Vý>|(, ÂXÇ©Oseivó±ù?CÂ<ÛòNIE3RÝLý]µž§)Ú¸~¸Ïg²Iòî“Þ»=øI“4ߟ–±1œ¨ò¡]“Uï\×GÚ}gÝítðÌrž~ú´aòr‰©Ÿ“>aœ=[NL=‘BFXCš÷h±è%àðÜ=$j%u~b®uªA?y‰Š)JyskÔXZ5èÑOOŸ¸Eç=Íð¸÷ hÓfžM©ôŸ}!ŽÄ­ ø(¡ï¥"t‘®Í`±Å„TÔm*1c ì/f6zMÈ.‚&‹É9» {a¦]µ÷©b[ë<­ch½yóðÓã a”÷ ×ÅŠAÞ>û~uÚ›£ð1©sްÊѪkYÎÄÊ¢qaqîæ¼Û2itgœ$Èýãæ¾ácŽaC džÓ4ˆô9Ú FW…áuìl@úÃÄ–¹QªÍz1êy£Ö8¥jTò>ÂbmcV**7Úò‰è…=zÙGÊQêm^¼¾#¿7Ì"Â¥öíêg"ö¯n˜yˆŒôæë~9­o×ÎŒA'LƒD玲dx#%®˜¸ôù0}”­¯³Ÿ?bV ÍŒ¾Ò! üØÔŠÕåÄ!)ZJô+¶§¡åE/9¯žþHøh{ã7X›8bSí·˜¸ËŸÜù`€IÆÏD×Y¾2ùTÑÁ…­3©Ld! Ž‚ç TmÁ¸§ˆÔ)^½¼ SÔQ˃óøïÞú§(ò !Œ†¦ceq+¼yqÆ0“§m¶ciNiC7¸MBsY;šº˜Vê°@RZE>gGÈmóP]WÝN²QûÌ‚ãhf2 .Ï<œ_ c*Õ8‘÷-úå_×£û<ª¡½)ûZ*†4%ÁšõŽO²ã{Y6ünµµ5bËáüyž@¬;5{˜-ZßM°*îÛ ŒˆöNªg³{=;«)Ä+“ŵ_@B–ýNšË/_j[½ôJX̹u—Ðz”ûí[Ùâ¯Ñ²Y1f%mºÞV9ší}«O¹+sq·›\XÝ DÚZ&p°@Ó:--©É3.ŽSHç¼ö–´|\^½Íªb_73Š#ÌT^Y=Ù5Õêâc‚M!ƒi¶AêòDϳXðOŸ»<"ÇÅPhcÒLÔc­„¾òF^|RÇzì' Å! ¤¾+#hù-Zi€ƒÑI‹nvªùÈÑH›L!`ã”Ï^î‡Ì-8^¥mCMï§­h#'#Òz14q>OÔ#êåhÒ*adëNó‰ÒìÛqá67'ÁºíÞs?“Ãóë8ÞTxH1o–÷TD<$µÑØFÏA¾Ú8ô‰1R¦ÑPTVª¨]šW!¡F®ªÏ 1ÞÛXýôï« Ñ#š¤|[b(ÖšÝΚEc¬øÁ›9úz5‘L4µ§m0•Í'&—h¢~ð3{Le¡›d­b˜ñ›!ÛGÞapZò¶õãPçÚ Žy™‹¯kÊÇ!uiŒ,H›C­²®8}\kå”®¨Ú‚adB Yî$M&«Oæ¤ic^[]Ôñ#Ô­B¦EUN§Dä#èÈÿ4ü¯äB½_–{_‚tMo´¢Ayú˜óµJŸ¼ã|Ò¹´|aFÏ(ªqE8ò±BÒ.ó+Šk–б Éç l²±–À%â«_VEbáyÔóÑ·\NÛŽŸ|÷5ÓíSB±©Ïßf ×1¿!R*6pÍ3/ŸƒÒ4ðüF…«äzøš8ïDMbtÄ­D1¦ájT¯'0‹ïe[Å9Þñ½çЈAã+Yb\oš9¬#q£è±P€)-QÁCèîÔ­¯XÅÅÖtå5¶æØ!èÛÍY³¢th±[+ªèɘs—NÍ™1M#iž*†ƒ„xsëD²œy¼?NŸ˜Ä+¼gÞ°'lŒlÙÃìú¹}»©º<踺D´Ä ¤µ Šôš,`©ù`­ºh¡oÚÔ}÷_Zp~•TêÞCûhyï×"‰÷æÏœ‹ÇŠ„mHÝß^§´q‚{²~­V'[æ+ÕïgG±•“Ô¿4‰ïy] ^¶ ¶GÄpë¹0R>ùûá|¦ú¡Ù VG«ŠË\'Í_#†8–‰G„4Ý|1Bçk­¡_®_=Ýš†ÎÖ¾®£æÏšíôÅ\ÙæTA#La­æHäR"Ú'Úˆ¡ëz%Á4”rH€òožÕIÍ*CuSžPÎóM TJý.>œ^çÔsf±t‹´˜î¬¥aàŒ~Qܾê^ûæ§uùJäžçj=g³aFÚ–©E éI`!M¤ó3²ætšýYÏLŠ$Æ"¿2áŠäÓÌoÏ¢‘CíDήÅë>íiÜå,ªAœÐÑäŒ>Mó÷Å>¢½‹äSØ6VæŸ>^áqètd¢êµ~qi“O_q{ €Uö×½>n¿b|õÑ´›äl°ƒ‰Òç¶·F)„Y-‰8ÒîvóëWŲU–û,²"v»Ÿ±ï»(‡b¶UujÂÏJüö‹Ü߯tY[eômQ©Š:\öŸ;Í~¯4ønÝÕ²·Íhú L~9¥J#'¢ü$Ió[¤-´Y±‹éåg Jü×X'"ëîz €] m é –£í¹ãtJ±¨Ð «þÁõí¤÷S¦\öÇ÷Þ•Ô˜¢m¦£ÅÖSl£5Üb)›aW¾¹  Ÿ¸Þ;(¢Ïêøøª©>”÷Æ`<ÞjJà‚ b.z·Ìañ²¼Ç¯ZçÐHì`éõ³¹Dt„qW¾{>“²ˆ¿I3ú’(œ,Š8ݳ F|ßÑIò~çÇ1œ˜}*ž/ž÷|äɇŸyã¡"›oäB5ô‚5оjjÚ+±€Û+ÕÑVOCšÕlê®E*lU ¦6-UM{&ØÓ²ßQdäÞŽ D§„#oaò>›}v÷‚|Âß4õ™6³VG¾Úz•Û¨ŠÏœ9UE áLùü^û¯ÜÔfNS›­ý×­ÌJ:>%aKEg™æñ3èãÞ‹â,Ø ã$Sˆ¾U93¾¯Ÿ®Û6¾5§TÅoyOfÐÇlð­Šy£éi?Vy¢ÍêN®ñ«Î|Ø×¹¾Œý ‡…þoÎÃa[G ¼ßM;;s²µrAàcy¸-ªÚu}2²€ÈÜL©û^{k”Uëì>w1è“G«`ÄÒÚ(#ͨCŸµ“Ï5«j´Ê' ZÇUgŸ˜>A_ ?« AhôróoßGµ#_ã"µ; øcCm¨ä‘ž»z(\êoNÖJÛ<Ï& b ¢úkf'H|«Sžؾ©œ4RN‰¦?6óMÅ®BP®Å²Ñünîé)âA7Õô|Ç4:‹ÂGâÝ5TúBH»l1ž<G;ã cÏ6£m"iÆçÚ5#©õž¡ºQ'•/Ûu}«ñ÷”Õ}u®EAy3 -­¸›Ž)ÏaØûç­ŽA¶ ŸF‚7îŽ_¢ë…#¤UºÎ´õÏ6ÝDCM|2Ž¡ˆ`üýdm·¦)| ´ç'—«4Q¬ìæé Pú'ÌaÙÙ2µSqøú*"ɳ{NÎ7óº X‹W™Âg\ãgÇ=× ‘¹Ž¨Ñ §›v§í9í¾é§ÑTǗ–}ëÒe¶Òm¶!Â5.’xsBÔïwTòx§‚ëÎõæ[DÛ/¡d*‚}šŒð-_7ØÏ´‚"ªÕkTVß¹†*hiCÎNµ2‚€‹æŸ6¤i5¤ðqì)‡­·P#Ô’ü™t*™ÈaÏw¥¦’Ï€ôFÍ¿¢bʼ*&´üÙ‰5—´µNoÁ[H@ÓãÍ<—V{ó”©Çš¿}°Ò¹ó¾7—N"yÔüÊv~ `l“XÂX_ 3~6W㺫Òp ‚#ã|Kë„Á‚#­1š­.>îø¼Ú~³¾°BÒ^åôïÅHù´˜‰esZ"°K}úH¦Š{ЗíeŸ[ Å K¢ „ô6MfÙ…O¶XWš;“^Õ³Ñ ø‰¸˜– ¤ùü_„wJ{Ä„J!_z ¼*.ÓJ© θ¾=F@½Çµ²F’mhWb±@Zäû2éèa‚L_iE–i´‘K*6ž÷–ƒÞcŒ‰¯¢±›&3ËË?~rWž_ÉÛ× d'˜œ<º½N¿2‹ñî¾j'Uë°Ð,Ú†í𠾑,˜Õ< Ã~бÓs³¤=$Ûôð½'IÙå<ã×z?¿½Ù'¼ñôÛí®ðXÐø<Ï'Z_ò]_ ™àшTõqL/m«6±EäÏyˆsǵLJ²¢cÛË]•ã"ñ Ò7åóyFûë³»ò×Íowžìž{=Þ}]"óLSÝœñƼã¯^|ª‡É“ä'dâN3Ój<Û›WñVþŸ+$m¿·åý7åbß—ô¶ß– ÑXª‹¿_•¯5æÛ•cl›9µ°6—ayàñªfªÚ6Kз6þ*üÛÓF×Í·K÷»lhøoÍæ®m¼Ö½ ÷½âÚ"ùË%¢óQ\ÛXÕ{º×/“àúŽ?*< m|óë§.V¿’ù[žhÞs|Óݰ|‡<r~‰üòÉÃôVÇím|‹%žw1Ï3ùÜ"¥÷s|Ÿ=ÛGPÊ“Ý3¿GZâNžñýw# Ñ_5Í!‚«îuÝÑ'/æ¯öNÏï@fE?œ•—¾õ|ù¢.|×)4›rÞqWô×yÏç< ½™ïz !ç.%ïµ÷ëuõÍMšKêÖ<¾­Afÿ&…O/SØ÷°}z¡´ÏƒRWµí‰ASÓ²jÙ¯È/džü›×d÷£¤ö¶îÌñÕËØ;díá}GdñѾÊ)åªÒüþ8Üùž¤ÆÕÓËÉžÉÒzî îûÞù0Ÿ;ЕÛAŸÁJ^¹ÀEù}“Æ þtÏÜ%|'z îÄ^·À¡â±´}=©í|G@bLIóÂTäCË çÑ^¾†±Gy}h1lÓæ¯ häè©VMH ,$#謽bƒ÷4ûZqû¸hÄo̧ Ûy“_R:6ZoFPó!Ÿ*D$7àHz•÷YpÐuŠrèß¼ú‘G‘T^Ž#æÈ2}¾¼)S×Z®è€<쉑¦­[@Ù`µÚÉ'N³Ó6 46úË‚4æ‡h ˜ÏS 10ùûl… Ÿœ(¨ÍêQAd‘-³Þ»ö:C!sÞÆWÑä¬á’E?‡ðþç8ô)l*TGizO¬:Ï™D$˜x}öÏרߣ¼z/%ß›K€ÍÁ€ÃNÚS[ =zÇšv|uǤú^OßÈð£Uï¾Z6o¾«æ<|Þ'uî¾ì)p¶wšsMšÂ9Äy }õžÍ,.¤£‰èë{غ¦ÆÁÄgT7èSÓìµUÈ62"­ƒkÝžú>µËîx2^«ã·EÏ”|×uQ‡DÖ;4¯{OzV–‰ø $Þ±0­ ¦/±5 –J ±X¤ð9ÕßHÚ¢],r¸}š´tJ€‘bnÙÓ·rFáw;Z|ÐþùU¯vQ奈¯Ô+mÄØ¬“IªÆ0$~SÆZŨڔR¨Ø˜¤¹U®Qq¸õ[¶ŽŸ=Ã6{_|%ðû}A}duª(|8ÓÚàùÒù¿>a¥˜{)™eùü+ñ÷ˆ¾埨¥z:†2t‡5—6"G9bè‹­µÂ±+=-ÀÝTöa÷5ٹн&Š„‹zD¦R;bÃ~*‹ßivZã¦Ônˆ‹ –¹ûݱu69ZùMÇj“žßV­ ¡A¡ˆbXDzM-®¹ !3éí®¨!±†@%O^~Á¡ U–¯z7Ž\©N Ô‰vôà²æ8ÓH¼E:IŸWCÃ=R¦öçõÓŸÀwÜÉÅp¾Î÷» Ñ·˜×wÑß0Bæú¯ˆ›vê n˜Xî,ˆ‰¤DÙlŠžúÀ£®,CâwBKFÚƒÖËîæÛ€ÖÄkã|6¬[Ýyø>טmÍ©FŒ.—7ZphÎæî3¾/6 zPY:õTyµ[%‰>Ϊ´¹ì˜‡¢ô Ó¾n?—ÓéöU7ÒÞ§„'F@~ëë`<‡}£Õ³Ú`S8xF(³±ë“•i«ª‰¹¥mÜMls‡ÃßܨÔ>? 0‹H¢úØ¥i‚em:¬WÇ“­5kZ£öiASŒCˆaþ$ \⸛ç¢tUý@z½Gqè­”ªB©PËn"´ðª9¶R”µÌý#Ñ_´ª$ÄMô̲ÇGïŒ-÷tÈ#Lö ›„M¸M€Á•­ãÕØÎû`}}—YH¨ˆš¯Ñ·³×M!S~WÖ94˜Í²E­ó9Ueõ‡ny…9óSéÂ|[WI/g«n?>j#wŒ{Ožîê@$íqMù€ö„ÕO[kNG,RÑÇHLoDWd‹æ¢×¢úš-wuëJß©`6:ÒŽMx¢=Ͻ|«@Ó ³'ƒÔõØ[íè-“ê…dùì†Øü°7èövÜþ$¼ýw5Ô—4õU­$ ‘Z5b¹V–_M–" JLÞw'UŽÒ’«]TÔ‹)|@j[éèìæÈBË} /šû»|-ómF˜§G˜éD'“gVk‹12çj¡h¥²îÕœÅ8¤èá1¢¤­¨X†ÔBŠ>ϳ ûyÁø…®µñÅ;C4óÈ3§”q-e暇ф©ÏvÔˆ¿;D]Yœ(¢ÇOZ†Óe$Ni~mº]Þ€(»·¶íÒ Â4Ð >ÝÚG4ð»Í89š·ª5šÍ;]{_‰Ú¸uP:wfa'Ñ‹"¢‘¾{hÏBF8‘g¾f)ˆ.·Yì¡ÙâuuMÑ,kwG4½eóiŠrxF­·Ý;ô.û"ø|6¯‘Öô†ÓîK¢óšäàÙZ†çÚbêüà<'ß}¶ùª»éœŒ#tœV6Œì}!3Ñ·Ï6îtÚ0™~2v·¾”¦ú÷ɘNI¤µ Ƹuöáò|ù>–Áô•°èÁNç YÖ#6›±W0‹êÚ,v TÛç6š)­s,Üõ‹:(}Ý–æÉîΑ§·¢¶3Ä]l±ÈÔ=§¶öÊ•£ÊÁRz)\!8¦GÜþ/ËœƒÍJà»-a¶5ÍðÊøžo Ç]’´£Ž»S®GFHÅ©»~*ÃÊ &?¾ûof \)ée")gºy˜±>|D ŠÄÂæý&›ë–ø}Ñ4Æ™Ìtµ3Çij°Z(¥ž™Të­vÕŠ$D/}³ðÃõ{èRp©Â£Ê§*ÆOÝ®BO7.íý<0 ê0÷ÑoØ·\ÐJíeR < ™\ö® HO «]ÖgÍ莦© &ØÁ¿1ŽÂh¥Pÿ3ïêÄOu}çÉé¥%~ÃÏJCwh{q÷Êß­¹#O5­5SÑH6ó\žhÆ>ök&þ3}΢`VL£tT‘Ñ]<"¾¼™‘y×xG,U4CÕ½Ýè…ZÙvV6ØHB¯Ïg„ñ]r¾õŸEë¯gÞSùûæõ~Hñ@(‡˜¶οY)êÚóömAH¬ìTQl's‡µR)èÁiiÇ z!ó4˜÷G9iê¹Èëxéï¢kæ×Âø·á;v[oœêý _ »]ؾiŽyônAD”oV¦Þ% ˜KV£YsщºDsTQ²)óf÷Òq§}g®ªÛ$ƒvE%eDu¬æçsWµUB^Ý”_‹·ÆfÚgŠp¢b}ч¾ŸF†Š[#`þB…pž.Î(ؘúÔ´[=«T´ š~†6"Øó¤ÓÔ"íQ€:5fõ‘sãWÍ‚3I‹ÁÆ!Q1Ƅۭ;`[E8ó˜âñ³g£å4d›n!³VureÃ7EÎëj"n ªÕ~‘WtQÊÛ,¤Oï°Š.áýSκâ_õŽnîäV™Eôú#é>ú¼¤ÕØÕÓH³ìªêÈÜQ¿<8^,õˆ‘ô"WÙ]ôû”ÐêŠXû^”Y,¬Lͬ.}&…ÊNjs ôL i+£m)OÃ#·ÇÜoçŽøÐâV‘¦"4†áEENÎÞ ¬ƒuŸKÖbI;…”Z»=›æè©šO8§'…‚Ø\ÌIje\õç3\füs³ÍsçpôœKZ~ÕÄÛœóy=!ñûç{”ð¸l¢UJÙ oT„ÃÚkqˆÌ¥ŒÅ‰‰°q|«#Úz^ùãœB}–3Ï!iT‚lõÔŒoÐNZ^îžÃçÁ%•gnh®Äå½ZAOAVË‘)=páõŠ üàT4†ùÏHðÜ‘9¯Æ+#9>o>Zˈ¶×‘Ü;™¨H°ëGsž1-lÚsQ;…/¾Ÿ/ŸÇ܈¯ÚNÏ„¡ötW>FC™Ó & Ò:öZG#F²©¢FÙʘNݳß(ó_*²9ë¶¾ON¬×N}‹Èöh)ŒSvìß<A`ÊLɨ®ŠÇˆÙäЖä(H[UU‹³a÷1ýóóëÎo¾øûœ%ú)÷Ó¾¤n×]Ä^®¹ É-Ú¶"äñuƒ\w¹Ó4w )Ö |éIÑÕHº¾³;£¡Z„n²]«Ü&UuÛ”°’k1DJõ_SíTÑÑ7í"Ž|Jš¸j^©Vܪ×ÑÒœ¹ T$âÛ•uóhï:œᬇEcšâ ½hº¾ºrú¼]Ê*£ZXÕD‹Xþç«k¬«í¾•²u¯‰•ú¿…}õ:lõˆÓ„&)ê}~¼=ë÷Òí·¾o¤8M¹'}Ýê P~no}¾äþ±mÔ}w×sMçÔh­9±´æ×¯9º8… šå9$.‹|5ªäp϶I´øêß}§nÕ9Tñjë_HŽhÈz§Ò(¶±†íŒ²qrh¼×Ó·e( ¹A²š)¦‚7Xzüäëi>Ÿ.]ÊY8˜~(¦ªívI½Ý–ÃÚ§Ç7ÛÎòµ†ö¨r|ã¹eîdvu¾:íǾ½~å'n³5zí‘6‚-$+Ôs-ÇãÙçÔpBcY¶r…rÍcÝÇ[„W¥ü Ÿ=dQå;eEšÚê‡ÝÊJ5-H×Î}'×H˜×\ýÑÛ|JµÔOçÇV³úî³sÎ6QÈܾw‰ùû/‡~$G¾jñÔ‹ªÁë¢>9eš4¥¯ç¥û”µ§+¤ÛE n³›úýX¯G`¾Fu“Õú>Ö‡FÉãn©\Øá|y‘J@K‘¸»w^ÝÖ+.Ú®B-Œ™ø=§Y†(ÆŸ‡ž*£kniŸ }}fñöRìœ9Y«pŽz4щÇÕùVÌžîÕ3€,µì­}1SÛtÀÌ wQUQ[gyÛ"¿Õñðè·fõuÚœ[Çòˆ žTøÇÚ’‰% Š 1A€/ £T[˜y8LÄé5Ë oa£<¢ÇW æýp5NûÞ¸èÖ6ü'KÞ?/Žý烣“³]?,cÎ5({ËT|Ô¯Þb¤:zN^:ýkyûÔê>U|÷ž-G…y¼æß—ñ÷Î>PóÝ»úï!÷öÂ÷œùþônÏãÓ辩w4 ‹ËãÞÂó™äƒÞ÷ÆçëÍy¨·”/ã~ýß)ë­·5~O“óÝÞ~Ð}õÙ;²púã~»…Ï~x''Çxãçòøx¿~Ç ›i×ïS‘ǰ–Í^~'¤=ì¢x^ã!'~xžží]¿}¿Gž –:µE×§ÍÎjGï…è%èQ/—Ã÷‘Í%E„¹ CVŒßZ‡€< £çºzxÈ«šö}|ýSÇŸ½y$ã«Q¬¢ÅoÀ®PÛ~PðTx=ı@õDÁëˆùu‡¹V–yŒ£Øx<þIÚ$óÈ©ú‰=®yAǽÑû„TýXýïvv9¿»¢§„Ó_âÏA|œ¹7ÓÎ}õßmöŒ ˜ûX}[Ê(pãÉÄÙ ¦‰—)QSÙn{tÎË ÜwKX–i“Kž˜™7«{Ái‡®È€Wªºô{J2•‰„@ ×¡Ñ‚T„HyÒûº*EŸ±ÛL.$š«Ïï‚@^u¦äß1 9Ek*fvz7N-Ö•¼y1Æ”BÂXã”ih4™ê£bò¥íLI‰}š6!¾©^žrŠÁÈã¤*­Lõƒ²¿¦(¾Úl}õDLù^ºFÚ.ˆlsIÛuXTñc‹¿eÄíM¶¹@‹oÆ;¹û†îîü_»‘½õØ.Q4ϵ ³î“¯o1W"„ôJEÜ_VîSG¾ãw:ñ …ô’‰“Üþ&ø\þgÜ”ã/œîú.Éõ,_aÅÛ™ì/„ãåÎ ú( æÑGqhó•½Ñæk¶¥ª£*,7D‡Ñ'àPM·ö‹ïŸ¦dà’Ö¢ÂsÆA‘vŽ]óTêu†å{6+ÖéÖé݇Âby™[C¬~Ž&ášè™a¢XS¤G9Ï»£ jIUv;^«¥‰ôÑT-ÝîyN‰® š‘OO*â&²ˆÃ]sÍNiÅ–Ydz$õÎ(´öã(¹‰©Ã÷:\äÖ:¤"%-NÞ*Ú>Ut{* oW¡Ùžož¯iì¹ùZðàþ©DœÖüús½o‡ïcê­-’Õ)+PÃEO6›Ñ)í8¿F¢û¾ªÊÙõmg1êR_6' ­ÏDêš¡É _²–Ü)¼¤§”‡˜4{ÕÄÎL¹¦ˆ9ÒÓŒxSo^‘ƒ-m-ªGU‰´l|rµëP ìæQññsú"b±BÅ_7o¥­ÖirÍïªåÔúFqÇÝðºÄ†C6¢Ëº.ÆŠI&¾Ê¿¤BSÖp@èÁÊû¥Uyo¦góùYXòh>ÜvpÑ PöíÔBà8!“ÏZ\!ó‚æ•¼þtµ¢ç_w4ÎvÕrk1³Ê3¥¿Y,iýð¾Èwî{/Ч2!?qÍñRИXK•† ‚ BmŠyVÔÛð7äü%9ð´…Ô“DÆ ƒmÖŸ ¾‰"=õÄ.V/3sdçîÒ^!!èQJ裶$„ëp˸TY·g*6ˆ47ÈPã˹ãÑêŽi¾Íº—Ã~F„‚@ žƒ Ah›õž~ÝãÑ¢û¼ÇFBŽL51Q˜õR)è2Æ­º÷Ÿ£í/t‡“¼ú°ñlÚ®$/Œ*Ó“KõïJo‡=kwçÕ×E…cÂö<•H {ÙE+ ^sÀ”m…éNÑ2¾'° 3ãÉ\|¢ú&¹¿*߇§é»¡ ‰™TFN“ø Ô¢Š|õ‘ö]_>@œæLù î‡2 y¦àSõÄwçÂ)—GÏ}ûöüw4dŸI¸»ï=Ñ â€~*ˆ?WŠšP_™2wç‰î{„LÚ/èë~úñáäEî'†ŠÉ»òj~¸ò{½\.w®ã?ÏùÏO îü„=ÜûûtÍMÏé¸jþš¿æ?-~o6¿ wIÝòq«òw¿}¸ÈCò8ù8òwgÈ×/r+œ<ßÞñýGyYÜæN ¼¢v=ôç¢m¤¯<Ú~=Ÿ¶dKmŸ8µ™l]˜·iì*¬Šøzžú=ö/1ªdÛø3‚E~L@©x^œ¬û}ü[ï›üCñ=)F¾Êkð»»vqAƒÌRªš¢c‘X“dàç”ÁØsNÝΫ¦íÐÎo)=.¸é2yq£¼ØÌÃ\™n°¨¼û´ãIèÌS67‰Ö^Î;XxÕù£Ž}jqD™Üúèô½®…§q:c¹ÌÍbžä=Z¸óÀ9%“K2‹ª½$©õÕ^á¨âÛMçןhmÜ\>k³Ï¡‰;¤$Ba7VmsD‘ „‚#ºí[Mæûuî üt:´®FîïX‡æcñžë7iõkæéõ®ÓºQ_Ü\ãj[^š&BöË\¤=¹iŽb„±uíÞ'º(§Åƒ1—Sh¦Â®‚®é²m¦¹­ªšùò¬Åp•Vدk;µS×4Äõë «váÕÍsˆ)";¹r8o,E-’‰¿ aTAꨮϽ.rDô0x‰ù—@è¬Kd5k†£ƒc`‹<â¸G[pT?¨u·¾Î>>OÁÅ;9AYÑ.v*—8:Þj=Fâá­›|ê‘•õ{K|8)¨ d÷ÂÃû¬©ëSÙ¨Óñð” P—U ]Ï×6³~ Çx/¢OWtÂwÔš$óëï^žó³òšiì/@0À‚XöBY /?\~Çß^ãò@j{²\t¨ÌÄ„çÏ §“åýÏt÷~ô~ýwœy“È{×÷OðO(_E=O=Z·‘ï|_ùìüºU*Kãä*#e&÷:T•WÛeD{ßàÛmû=>ŠRU_11ïÅ >UJº¨¯s#ePÚ~]QÚLÍÝ[vl9•m6Tl­”ìNȧeFÑVôŽÊÒ*íRÚÛc•WÕºj®m¨Öd%µVÑJíIl •IÚ©[@»QÚFÕµœæÝƒÓ˜Kj“° ¡Ø jUÙJ›*6ª.Ò.Ò¥²#µ`‰ØVÔv6„íI6RlJÚ«j¶VN·wj9uÎì'k.5jµVµQÛ»± Ø%lŠ6S³m®ÊShK´‹±lIlìJÚÕ]©VÑW`­¢Mƒh6Nî‘vUGdŽvê¶6îe;5†UÊgXµÉ`ºÒk–dÓ,kºË¶1c¤åZÑ4;1´Êîä.çmµª+m­ÍmEBí fÚ‰m*mR­ˆmEµ6’­‰]•’§j[®í ²[)5»³t-«°Dk»µ4Îì­³2´8…—P¶­eVjY†.²év¢-`±„d¹ÅªFÌCBÖ)%u\uÚ«5’É”\1Öµi˜¢  ‡„„¤WˆžbX¹œ–')ÒÒÓ3²RÊÚÚê´rrVqÓNÖ®®¸[Z´Áf³"º°U‚D“!tUTU"(ÄŠBÌê©’Œr-V‘Iv¥m±; l”»¦Åi±I³²%µØ»V ƒj¦É´šÛ%Pmî¶æª›­³²®Vk$n›,îí£¶;NÜvÓ’éQ”™Ê5šŒ–‘—T¬«©` Ìk\iÉ««–Ö­CJrȲ9™¢Å¬ÂR„Å[™EVeC¡® ë+EK¤ë¢µ’Ó5W]ZªE"Õ°cZˆ6³”§:«™±: ÒfÎZͦÖU&ªYh¶Lu•:Ó¥:¦5­¬±«b²Êb³N5\rU¬Œé]˜×j«–CZÖ¬Äåt ( 1¡ÐsšhÂËQe¬¹tæRIf´rš©0Ã\ÌÔ´qQUÎë‹™¨(´é¥jéUup ¶°ì(;!šÓW[f¬ @šëZ42ÔV«NJÅ]i®¹nUšXÑ55×2ÀëW5V”&)’µ¨ÒŒå£3j¨Ìd&ÒæbêÔÖ¬\”bv3E®Æ6b§E´˜¬k¹Œ%®j±¦têÆu®n­RpÂ;£ íZ+VƲl vDìÛjbv“wIm³Ûs)6ÉØ§6 ų‰×wwc[\Öåv­1Z£1™s \¦nŠé'Žž$"Ч„šÒ† ª5e媕5·hTjá6hʹ餵)¥IVu©&‰j®UÒÕkš1C:ëM9ÓLbI+Iµ5¦Ó5ÌÌÊ’‚´Ë)œáȬ9¨Y§U&ÌÊšÊÓ!°ÍZZY‹&:ÅWfm4Ê“§SY®˜¬±V+Mmh¨®Z‹M!]v]¬g:˜³1Úå2ÂkÃ%ŒÚÖµr¹DQÔ”µ-sJMT›­,±M¥i­UcªYt²Íu5Õ—4º(J" Ui†ª¢. ™³*j×"£)Ö«:i¬ÒÑÆœj¬²ÇV²i®…º*¡ë¤†bI!h£®fW&­c9ue1­sU²mW]0ã¦S4ÊÔ³Ls«QÚiªÖ¹*εœK rf¹ekEHε•»•rc[ fµ«LÖ°:¸²jF+UbZkYÅ©fµÇ fÈÖBÎjÖŒe¦`µk…WÍN•Ä[6'J­­¡ÕlfcT“SV­Tíag5¬µ–—2Õ«ª5J¹j…®Ö¢e±©¬²—XÓª.WUkZÖÓ…2³ MZÙK«6FiUV§©uK¨–aYË8Ó2Su¦Ù]–©UZâÍV”Õ[*T™[+§VÃVdÅ•gM«7ÌOsÓÈ$TLò%$Õ5¦S™œÐÖ„ÙWkZÄã´ì«Ai–)…+MKKªäk¡”Õ™¬i9¦XU™,Ñ®ËRéXSJj3*jtºÖ‹JušÖZZš´‰c”d\ÑVªÍau‡`”ä•V²ËMq—Zs#J¶LÜ3\h‚´£¬ª¥ÈU -ÂQA)BO7N.ª‹kŠª‘¬É™)Ö‚ÕMkiUÑkhÄ ! QD2‘EÉRÅ)3 ÕTEФRCDÅÈÖ«”ºp+ ]a.—T42ÂYšƒMV¥4GYÕµÔ Õ‹M5ª¶­IjZëVSj XL2β¥.ªê²ËMMŠÍ'Q uÊêÊ£ªZÎ×V–S§*qnî› µ°ì¨ÚÝ’ŽjË·vÇc»t²®™ÉZ¶#.]ví´Ã¥³+,ÓS E4U¥Êªf6r¹™›»´îE6j嘥ÔrM,º™+MtÄUIGZŽ¥ÊD¤)f®k¬e«5ͦ£5.t«UŠlwtÒuµt²¨iÃ5–É–´$ÕŒË]–Z³Q°:ki¢µ­]fZ’ -gw\0ÍF‰ÓJªbš bªhб©.iªcÌêÍEGJÖ5%k*ÕqÆÌÔ¶J¥V…®ª«%–RÓšµ²Li8âÊ•,jjY™‹UЬ1­Vr´³f­HšÊÉ‚TZHY”Ò§tÆ]UË•P5kIšTª‹a’ÕL«tÙjÕM*’ÎhšÍ+YN–‡3:¡kNU†šµÔì:ë4««2ÆmWYÓ•FVenu,«¦—ÖÆ¤c-­PåL+D«š4Šf³ª—5gZ1fP¢‰Z`ÖlÖUÆ¥LºËj»M3hTZ¬:œ´jÕ*T¨´.¨K«¢†"…!…蕘H¢™J’h!Zf ‰ˆ«)kSQ&­TË3Qb˜i4£ rº¹S¬Í©)B’"ŠPPªâtZ æ…u­&®•T­iYÖ³X]#LÖ‘²ÍE³Œ,°°Žf1ÅVV¸­R–º¦ºáÓ1Úb¦„¹ee›5£Rd™­ecÌÊÆJZV¥j\¬Æ—:¸Š«ëcFµÛY9LÒ¸µZtš²ZUµ«¦¤¬Õ¥eÃ)¬ÉurÚ±ªÕe4äÊÍuÓFµZ2ÖŠãI¬î]*µš¬$3bÍÍ0ËiJ™€ÐZau­ba¦ŒëBuV"3¦%šj¥V„ÄÚ2jÕXËNÖ²âÄëkjÄíR¥dÉZºSM«c¦iVÌ̪¹:ÚíR+µœÓak\µ˜¤Ë3LØ5SYÖS•¥”¶ŒÁe55ËZÕRæ–Ò[*×Pó"%"3BLÐQVU,µÄle¬T%&XU6¶Njè”-u•¹ÃWR«#¥ Íc©Ð²Â̵¥¦1VtÑIfRJЉ¨ašé)Š…jT±ÆS5­šÌÃf%†c%ÁlNʬŒé†V8Ëbƒh¨ ‚"z(¢e(”îfµ©"á«Y¬nµÉ8f ØÂ]+U5ªÐå(­.®UÔN­Ž«¤æi§3 ¤Z릊Xèžb#’(¤Y`•¦•›QS#"Å¥’Òª« –„z9B‹¤…†&›U¬ŽjÙ0–µ3“ŠÛ2i«‹5JKZ»¬Ó¥bfÃtÓ©KY­¡š›:´Ô®5]¢åÙc3«¨¨™¥¨¬U%j­NfjjÅ £”µ–¬®´k¥j;1hR´–lZQ9›¬KãŒeÔˆ´îf“MMZ…¬£¦.Zmkä’k¦Y—-j©¡«8«­ÑkXµÕU¦Q•¦³T‰Lé˜Ö¥†ÐÈ’èkZÕÍ-iq«V¬äjÕŒ•up¸µ:®jÕ]6,«¬•dÌ­U—LJÊfcPÚ)lÒe3ZÄ*+\™š«œ–ud³%¦ªµkR¸ ªÚެZi2­MŒZ­&ª³µÌåÓ•Ít"dÜÝt ƒ2k5*Ì“.Ö–”¬Œi.Æk®µÖº·'5vZ޲ƒYW„©[ŒaMšÓ)':Ë –ÒmtÖA 0ÄñRŒ“É5)LiL¹hÍuMY1k™ÕŠqe®iÕµ­Vt&²Æ5E*¬ìÚ™™¦qDÚiœ…j¤Œ—f¹*DÉ®ÚÎt+’È–eÂM-U”¨¬²Ù8*ÄêÑN•Õ\RcE€æ²–ÊÊ¥fº¶b ]e\c´cUjÊÖj"é+MjêÖ¹j À©YUL—U)EZÖºk]V¸:5-ªÍ4LÉr1›.Öis†ªDã#56ªÄVœ²VKMN`i5FÕƒ²Í:2ÐGZšµ’°™qš.–³+š³˜ªjk‘i\°Òëë“ i–3V[ÌÕ Zé]uŒâÒRlÎj•©ÑX³¦«*ç1iš:º±k1:Í »KRT«­[jªÃ[*Xæ³JV6¬BÕ«1.–Ç+K+T‹ Q™§*‚åa+’Šzžbb(‰Fq©•YUk›M2LÌYª‘4ÑÑ´êÔZÒ˜«–.¬IHÖJc4-Z!YnšDŠæ‚â(§©Õ0Ç&*ÌšëZ36©ŽjÑ4ÖªYu«.®µ†SdF¬'9š˜ê:Jj¨r¦šœÕ’Ì뤇3Z’âÕ)j&ºI•­SX¢ÕS%JLºÊRÉIkA«%µ‚«-jœÜàÇ::¥µM5a[[H•šÙl6ºrgTƳ9.–$ÕΌڃ6f¸¥kje£.ºêui¸9Vh å®M"ÍdËNbêÆ²Ž£')Jk ¶Z©Âä¹R¤ÊÔhU:K9ÌEZZÆ;•˜É§A7X5SlkF+JITÖvXÝsMhÕ£kÜժеVîÝ«µV]vÛŽÆ1“%NIZTf©ÚÝÛ3sKXܺŒ˜\ÙN³-:º54º-ŒVÕšEÚÔ3¦»·MŒæÕ2äräEä‘z¢XhIˆºˆR ™&š¡©.(‘'ª†¨¢HÊl±›'SL«a”ƒªÊå“+3Dâ²å©§62JWµHÕgR,°ÚÝ–¦ µKM]RÒÍY±4dœi­ZuZS!«U™ÎËT«\¤ÊkTÕŽK˜ªÍkš5D³°êUiÕ#v0Œ-V,]vS1Ö£-P‹i$‹t†ŠdÉ•–dÅ(H¥›L:Ös&ªáV™Rعqšgf0Z®™ŒšÕSV;&4L¦Ôš†™ƒLÊ[TI¢&¬”•j£«²fº]Ž\Ñ®¹Q­¬ê¬µÕ§Z@ÔÔ*¬XNN´Œ´(F„.¤ÅÐeÒÚåZ±$p)¨ÕÖLjÕM-MV0…i'Pºš¨R¢íi4,æd¤ÓXªêjê×VQ•¤è]kNjNRÖ‰ÈÖYZé©”i.C MX5Õª–Y€µZMV„[b5Õ²‰Z’dH‰‰ˆ+Z—LeV¦:hµ©‹+\Ôé¬2­Y:hÑ!4ê ª¢,‹[VK ¢AÊj¥b“¦s‰][JÍpÓhªÎĵ–b¹j£.iÃS[3¦Ó'1«$¸ºÓUjU£‹5™¹Z­Ž€ª×-§\U5‰GWFtÓIØÅÔW0ÏDÉR1D‘4Φ9ÔÉ£ ‘ª×]ޤÅ)m3¥SœEk­Yt¥ÓÔh™U,ÚÖ­f¦i¬ÍVU.³Y:A–¬¥¬ÕCD­ #5®—hÇ3Y³V¬¥…Õ•­µ,˜m-nrÖªuk3ª(frc³ È5cµ¤T•£UY(MZR¢$¶°3VºÖ´Uu5NZ´•‹Xe²ëG&.©³V†âåªY5‚«VŽ«(ÅUi…³S$ÊÂífåf ]]ud“‘UL0µ1Ud8µj5™s[Vbæ&«ªÒbÎTµq¢)Ö5H8iª:ºshgX²ÈT…–¦Ya7R­u¥£iªís(ÕlãXåµ—KYtYµ¢Td••STÅ&±lNZ©*Ôê­UeІjfYHh&•† \XÖZêÆW4ºeÅ1 kræ´ìIÃU×jâäÙ¥“µSª¤Ì­›«9IØ«S1£SZ`U„8UŠË]hšJµ0fš¡‘5©Ír‰i! JºëªaêŒSLé3Î+šŠZŒ®æ¹–´Òf¦«ŽË*æbãVk ëTºPé¢6&Œi-U XZ±°É“ZÕgHÅ*$Ú™g[U,§1¥Ò¨Ía´©pN V9¦´­ZåÊÖ‘Pr¥¬ÓZºµªj™µ‘lÒkDÌÙÆ“#Na8µÐ¹‡IÕcImFeM:5«ʺ)+­S]r²•­g S@Óæj6•ÕG9¡5;.««V0‰YµÒ5YÉ´ìéÒëLÕ•©Õd”Öpº¸Ô늺êv«V«—Y–ª¬+¢’æÅ\0ëX§5Í®ªµ`‹Y:Øé¦ÉV5ª:…4Lê¶±EZ5 ‚¦­Zµjh™LdÝZ)¥®èkj•‹b¶L«©Æ­i²MJ³¦¬LÆ®‡DÌÚ+­TJÖåuS-FZk­[(ºÄÔ²&¬Ìµ¤ºÇ:µÍt«Wk•ÖYÒ)¡£V@ÊuÕjækNÊÓfg:¢•® VZGJ©’Zd]µ¦¶44eYªiªæIfµªµ¬Õ'\g+ ‹R増)jÐΉe*3¬ì±)WY\–„XfŠ¡i2ærMRI¦2µD³)¬šnk”Y´ë-K²ÝkªŒÊ´Ušc ¦pÄRe "¬ÑE1…BÅ QÚÕ­3Ef:k±©¡f¢¦b©ŠˆE‘."!¨²³Tji]šl®i›ÍIεrªÔNj`9§NšÓªF’µ1²µ]!¦fK+K‡Ú[™9XtÎfk+W\•XšÕa¬µ9ÔU«:±UÅ™kXкЧ5š¡štÑ4«¬VwNKRK-RÖV²Ë&µ†µƒ§RµŠåc,wZ¬‰iu+¥KQkDUºÕ:Ó5Íi%œÙ*§$a5±«i2ÑÆTÖf®Öµ4æ°Ò³‡U¨ÓRé`DRÂŒ•bêֵГ•+§ZÕU5ƒ5‹H•%‹ªjµ¨*ê\Õ]ZëZÖ×’âÈÑa×PÌÅÖjue%²ëZ›IÊUØÕªË«œE¥M4±‰UÓLêÌ­XÊLç(U7NÎÍregiÌ,Ô¥’Õ¤£QR0+0…ÓÈQPÍܹ2\mj+šÚ\î–«ŽPI&“‚AŠx¨d^`u©Û¹™)¬ÔÙr-&¥+#³:V)Ö.`âÕI-U›§BÅÈC­–*4Ƴ#¥×UkMWYhÀ4um6š³ÁI­jêítZÌn¸–YÕ`­O ÊREA\<5/ÄU Ó"%È‘P0±Gë£ZšVÁKFªÎåÕ9imiÕe@i¦Ð›V+2æLQC›4[Te.3FuRÔYÌV®r5ªi«£:e*ÐHÀÍT‘SQ ±YfdÐêDRahª6Æ ’ÍL…bíe%µ’5Ñ£L9¦g ³C*5­rÚ­*´UÚt²ÍŽf]]”È )v±k®dY“*Ã;P‘P…uAU “PÔÒ“**JML2ȴѕȤ•4MMš5TÔìÓ™Ò­›È®¶%S5mV¹¥©u­,b.mf¥v²ÊãªjÆ®Å*ÆW[6-r´MhŒÒµ†‚Ù²‹ JF¨PUj‰‹e1\ìÎkE­RU–hR‰a"A’ˆªfJ^“"ºJ£TµÆVÊÕi¢ÊërÕšs%-¤X­YiZ¶vµ¥¹jhÆ:léÇfÖ²UÐÒÕXELu©ZŒìç-aέ«%³Nª­itåAg e¥³´U™,d†ŠÖµ[\æº1«R¸tå«j ºÖ%u­šË*éœê—jÖÎFJËZd¨N¥U3-¦¹k\hå(iƒ†µKbŠ´;L18Mj•4ÀªDLUÉBÅȈª5Y˜¨éÖÕÍMUЬĥ­5kvS5ZàÁW#¢dÖXg2¹IP‹*-ɉrr"Šul‹-ˆªi‘\¼‹À )CÄD‰¥YkX³ ¶²e"jç,Úç:*´¦Y\ÑÆµ Ítt-hËF¶hÄ´ ,ºZ×V*®¶³™«rë3*µ®ƒ2Æ®³[™QF2Ö³LY‰Ù5jÕVWìœZÇ®–\Ù(¸i¬5n²ÙZ˜7 AHÕ5KQT Ár×4Ф5CÀOÜí8àÚµ¬Ö®Æ¶NšªDÚźgV¶²Mj%cB±š7ZÚ ¬fq…›M+jV°í´±ŠµYÊ5)´ØšZPÖuÚªÊåµkR³»IÔÄViH5†sUˆÔõ q33îprœ½*I<Ø*óÕ±66Cj(óÕµ Ú mNÅ´ìm²ÙvŠ»Jª„Ù6*mPv‘-¥AÚ»·jÙÚ’¶ °ÚVÈ‘°¨›"-’©Ú£´¤ì‘²ŽÝ·vÛ¶;›Ú‰;$¶D¦ÊNÒ“`Mª¢ÕSµEmvmµsmµEt®”îáã†;6¶»7s´ª;%l’•Rm"í*¥Ø!l6Ú!Ä]έ³k;·;w-& ¸Ô§ZµÕU”r­TQÈi–¦jµ&ªQiUjÖkD6.©]jµQ°ªvT‹µ$ì¨ì¢.Ô¹ÜCn´£²¶íÛkZêÖÕh³]rŒ‰S4Õ² *VhJY8 §]mlÎé–ÖpÎÖ­ˆÂ‹…•XÖ±¦¹´²Ù#+e­*œ¶T¦­%[X1º³8×DÖ‰pkª¹™®K£XªÌ³6FJTIl…YÇ&•Yª¬fŠÆ)T&ƺ§nã¶ÝÛNÝ´ƒeSiĪìvØ Ú㸈«£»‚JzjUèKŽá{¡.ž¹*(à™Pk¸'Ž¢Ó›LµJ%fgµ¦STÙvŒê©UR*&µ–—6UjˬJC+«#³LêqµPgYͤ®³™Zb”f–Ö²µ5UÖ+4r­dK -KBÖ+&¬eu-¦-¬ËHªq©ÌÔÖµ'5dÆafbµŠëNqf˜M«e“j¸&ä]NœÄ-P”ZÁ®·,µÓi5Vl¹Ä²š‹VäºÆµd–¹#Œ²¸±s ™ÍfºA¥7tÕÙY-\®Ôi5ªJ¡„:c±Vjj¸ªµÌc*ÖE›*ծ¡iÖY—ZÑZͧ BË©©“CÊÄT ²pðCÌRww~¿cä;çºwccòóÓFÜá¹Òó\×›¨žPÛnååÚ;9žåÅp4ói¶f1¶©Y^tØçl«!ž^DQNE¥€SnÑyW›³ÍÂÑŠ÷vÆÜ®RËÊ÷®Ñîê#ÝÖ")6òæg»»­Í{ÝåA…áOP i¢º{¼È ½Ù®ÆÆÞî‹=u¹Y kœÇ5Ä÷v‹»uÍEË“»\(®[Ï1sšyب Egu·H#®®d±‰ F“bŒ”l÷j{QS"Ïr¨:’Ö žá¿c§²¢ù'€Ø²%J¨ )«¸G³!Ï#¢NG= ¢„ª1¼Ü5ù·65Gs›|VÒÎ1Õ5m>v¹ØÓ\¯wW-:⢤Æ5t×'»\ ÅQåͼےñ¨$éyâ®éë@vxï]DîáNë’co+‘±²t#®ìžQ×O:yL’Ündµîí’çKb’‚ßž÷Xƒ4Vù®V‹ž÷I£A^oKÈ6-{»G›šÿ…­Ïã°(®û·¡¯Êæ¼æƒêè—wA¾îÁ¯6ùkÊ(Ø7ÝűnQbŠ—Ýt¤ÕÍ‚‹<»`¹ÈÇ9E¤¼á.v"Ány·•é'”9Ða¦]C¶Ú½7ºí¹ºEc&ç9¼óÇ+ØxuZÁˆwA ½-BTzë§]¸6(1û®W–æ¼×/wÍF^d3¨RTíG ÉèϼãÊô¢Þ÷Pþ-bÅV*½üü¨½òL¨ø×·Þ;<ˆ<¯ ªg¥3Æ(­€È½ïÝ<*ˆÂy("äûÝîÈ÷\7‡5sw½è¢ »ºr÷¼]Ê{×Û>O´ ðª‡™8Rcósc@P‹»¡E&óG"Ã/.E3ÝØ½Ý)ݳ»Ërov¹TŒÅÝÌ$¯Ët,WåtÉ£üÜBÑ·ÝÆa/9ù:üùÁ'“#Dô™…DGEÝÑšårƒ&ÞrÆ=Ü¥“yòô5Š7»¶Œ`$âBQxõ'Ôœ+êxï—dÍæ*ò61æ¼Þj8^åîõsâëž&xDWÛxj)@È4k—wk•æòòòÒ/ £W¶Ï] (½zà®<Š¾ÛžC—§9=Gžªæß›šò¸j û­Í÷q¨ù\¯»u¹k‘`Û½ÞÊ7*1ss¹ÜJH‹ ˆD®mË‘î®D¦ð®”Y1³»nDQ¹ÍûÝb£d*-^•r^íÓÝÕ#T ‡%†ÛæÖyÓÔesnmr7—76ç-ƺxP)ùìú!x’xå‹d؈-å¹¼÷®ÅË¢fƒIß×kÊÅDÊŒX²}÷yå¹Î+rås‘´W+ùî4ÍI¨Æ÷º·¤_wXM4%®S»ÅóÒõë¯{ƒ›ÍÍæ"‚9Ó X€±%½Ý°wufQ KÄñ[‹E]¼žÂˆ‘ótÞ[¡yreF½ë¯ yQCÏæ>GÄêzr²5 ¨( ¡!HÐ:žÉÁ£Ü¯*Bµr]B$¥Ò|Þx+j0Ça´g¡•&Š~±Žbï±»]C"Ü¥(È­,°Òz.>¶ƒÎC·³¼VK$9ë’+˜jªš ÖÀ±Ëz¹GžÐ¥Jù mnHõ,U\¹$³URùïZ®µ¬Âë”d†Vª”4I¹‹].­DµÓ’27·„#Ïí´PÍÜ•T"ŠÍTý=ãÁ ¬«IKÐð”UWSl¶ª¶%Ž5Æ;VU©*Ô¥`UsVn("!¦©K©)žbWKjãYº–®§šô'+¥­sW$^õͽ¬,Y‹:2fd¬æld-tÁ¬TEsÕrÓJ4ë.¹"*冄‘Š!Úq=Jß­ˆf¥yD¥[—ÎÑFÎdê‘ß/zof ª“Á[4¬ÍVã35ÉD,›eÉ@²0ˆÓÐO*”"@Ì¥=(Ä·;v=¨k¬ 6©šÍc¦‹]Se2ÚȺ:™tš+ZyÛ<Š£„ªý±TŸPåϽ·œó-©l«B…C\,”µ›5ŠÈå—~KT¤í´Ð!ö$Dp·j5]kªQš´c|Þvíi79]i(ëF‘ØÔJ«0¨·ç½¦ºY™fæl9¢y‡™Ök¡sBÖlÖNe Éάj¦…U•ûta.…uÆÔËú…\ëj bš‚JyYéýYÖrWë£StP£ ¨H×MMØh$”ž#É.›5jUZ5U.T©Æ¾YëUXS˜µs366·¯X£K ­2±+Þ÷¨esTÓ--ûÝïN˜š«Z@«˜…ù0™H¡á*¦y• ýYíÌ›åâ¶«AÖol®&¼ö7*+êt¢ÉDQHiž^«¦f.lj´ª¬®ZÒÔ(Cç^Ç-k] RNqJ“©÷·žÕU*8‘pä^C5(¹ràÁŠÖlÍMdšÃ©4êÓD9ͮ¡DŠÔ>¼xùŽòÓM+93‘5vª›;Þ·µ¥;Ç;RÐvQ5P›VMjêkuÉ®¦’æf¬¾¯šŒÍ<ÏOJ–¯ZÍH±2Y’¬I©\„›‰"Ú # Ê4ÓÖc[*‹[XÊ”ªD˜°ªC*Ó,ëbå-1™ZG¥í‹7¢ç^BD\Á)QÙЉl:iÅ o<öD¨Š+AêM$/¬˜š•ä›Ïc=İó{Ç'0Å[«,Nk.jÓF´³%¡•¬¤­ÔµHêxsÄÕèÜ®¯¢ô¸’fµ8-L‡LUÐŒýˆ{SL¯ÖEyÂKì]¬›-õ…7Ôv†ihèN©ú¶{§dË7)U×Y•­…3šë*±0¯½¦{kM%¦œu›4¥ùòÒZUª±¯Íïtꬦ­Yš^kl&¦FJbx‚J«Fr*I$-ty<˜òÂ3u)­Ú§2˜”‰(!b¦£kY\¥:ºƒ¤ZÌÍ%®iL«a&É×M6h©D<µt¼Q4ÖÆÅÓ ²…¨\=Kó²R/EÍçaXщ,jè:æÅ‘)˜íbÍ-\A²y4:3ò1êãj¡6p2Ñ>¦óÏ=C]¦«+.5K©S—ZÖªŒ4šÔXL–Z³2ý{›êߤBzZzy§š¶ØzJ¢¾^D–Y–%e,ß&o1ˆVçØë\¨¼òžØs\ÕOÖLJ䆅‰é‰s—´æ¡cDÓ«•Ur³]2·ï[ÒÆgLŠY›*#V39Y:5S$JÕ¦¶*e¨§ÏYHÔi¶æ§‘-h¹µ¬rW+XÈHP¤‘‰½F)y.D[Ûi§W:hhzz‰†$ 9­N*Ï{ÜõKTÓ×C\»]¢Q…bQähã*f91XËN%yzX­@.c–±N®Õ§Gm#¬Â‚ÍUWKSjSɵÍÞÛrÍ5*ŠLR‚ @¤ÅyÙ ‰O=.`R¥•ŒÔdÂs{Þ ’²ÓÇâcï3œxWž¦7¦='J¦ÃŒžRrSÓÆvA$‘ÈdÄ$ŽI] P°´3ÒÙ6†Ú’…'hÃu¢™µµµ†L5¬Z$¥J†ˆD~°šôI‹š™‹µ«eóocÝLÈ44ÉïÞò§„›ö L°ù‚î>1|íœhÕFXM¡-4á–”³’²ÕdÃVS^­ÌȤ<¬QLy'BG¶ÏB³Û‡–j™ëžOk èÆŸ^÷^v$ªÆp»`С1C3\PVLægïf›Îý^&ý¿8Æ~Þu ÂÔ$…(ùù7PoºQWäÙíoMZxlGí{?ÜþRýØ„6¢dž?ØzÚ*ÝR¼}_]W—ö«ðLÎîó”^mÓ??{|/HÜæý,xnõÀï½ï»ï]&Å‹E&Þj7LcªgZsfìǯߵß~§»è¤èV¥ã0‹Á©EÉ{µ¹ ±¨£në£Ï6ZòsÙ‚¡ÌÙ¥¦ä˜-Ý»KÝ\{®Ú¼áb).îÆˆ×ÝÐX>WËÓ"FŠ÷]i/-\‚¤„2RIA;»ÝÍ`Èb™³»yæ°Þî”Ì'®2´Ók7y3ƒ0­¯Vwl©«[cHnaÓNWÍæ…çhÅræŽ>íz”4Œór1°'7)Ý\ó•åÞî×Pi0&‘(9®Uæ¹EîãFÞWê¹9/uÒ󔉔—4š¢˜|¹sïu{¹£”E&žî‘å]6,NîÎt¿5ïrbJ629ˆ¿»Ý“j=÷\¼4m–¹QR¹E`£W›sqçW›¤O8»ºKQ¥çÞízj¼èKÝt‚ånF¹æò#õ×KsÞ÷­rçÞ½O»\Ñ@j,o6æ¤Ämò¾o2h£\äi rïur#ÝÒWwh¨ØÔE¹¹¬Q®r7ÎyUc±ÜÎê»•ŽžnÐxPԕЄ„"ñ†Fm žºv4ÚÃãóYçIgË¢óŒ¥PîÓÈÙ7›§+šO/7—9ccDW7H»·DdÙ‚/!©*™áN] ÌÜ©Û$ŒwB&À Ý!Ñz¿*¿Äkš65µû÷õíý{ÛÔ|§˜Å>i¡.=ÑùB«W_,{ÙaVŰ|ÏØððò+ÞiÈn©L¶Ú›~t«³÷¸Åð4$Æzx• '„Q7±‘}\³Å$¾J°áQ®TDQR†í‚[÷ëŒz/œm£g*’B"2\:¸Ó†mªþW˜Š³3o‘åÒó—šàD˜šæá:|÷©ó¬;4ì9[A^[³"˜2F“O{½²³ŒˆA.D•çFzp/Ûp9'Ñ2•jÉ#žýÞ|ß6ôɨB Å*Š*$ÕÛq=¢51=ÔNì‚çA°»ºOuæ½Ë± ÷\Ó4$’&Å×Wºë oœ„’1Šw^{—Þé²«¸Çfr»­ë¦Ï-®í{»Iîé2^nQ “aîÅ‹I ó‡ºáEΨ×Þèñ§87w,næ`ìtí>v›ÉŒÉ&E ì8z&öÆn›öȃܼ(¼¢ƒ ò‘e®‰†Ñì²hØýÝ_79Ȩ‡p1‹)$Ç6äj6(åóÃKÎ×»¬•y«‚”%år,óµˆåÎs:Ó1VÌs ãUƒ`·-¹Ýº61 (ótÑ{®Ñæ¸`÷]Þízl&ɇ»¥ŠL¥Î¢Jù\òº†—w/•ÂÆ“ùË>í óÉÍÏ~rw¦„GO.¥ïÞ¯B4|¢7 WÔò3´³$s‹©µÞ]JÌ­¬}\Y†—ºÝ—fz/w/H;·%Ý|öI¤¦MêäuÆî×1³OœÌÊݸ‰R†ÃwvThIJHÒò®˜i$J¼®&O"*ˆ§dÑ  Â ¸î¦bK31&R)G÷:èCÒá’ Δåu(0rçÝï9w$–˜“&ZÌóL"îÛç¶WwB{®L †± ‘-ÝÑ1Ýq5ïwžkÇ·69Ê&ævìžqŒ¿wA1ç%Ã÷\z»Ô<Ýqʳ`Êßz<;åëΣ"Dråòä/v»Škî®uÉŽrbqЊ€ ¶ØåAhí¡y]w»ÌLBžëp²œåîÝ™“=݉Π÷\a fß9I4A]yù}(Šf‡»tòóÈ‹ÝÚ nq"»¸ÐÍ1S»ËÒ'œ~ÒŸv¹—Mˆ¨GwËÓeÞö<4»£yÈŽIP|Êó«ÈaÉOJLEópH1@å&É(2$IÍNH«5@ñ˜AS’VŒìÈF®G™•cSÇ'w/±ï{þÛîyªOÍ„*“ází·ºÝw°WYI SOþëÚ•¬^¡fš&D»ÿf2fº†”HiÔç¢y¨’"ŸYqzÊey΢ÓK,ÑíŒÎ¬-›ŸmúÉ¢>zTõtSÐ𠺺HhªÚª²¯{Ïv›ç±Þ«h×Nud9UY•W$Ð6Ù2¬£IURÁKè·¬X·Éé‹#Y=éÏ8VcUi%16VÄ¢™#÷½ì̉~tÏjÚĘJ]ß8д k;Ñ—$$*!VbÖsXë4f+G½`õT%S!%%©Ug Ù(I«³‹Nå’¢’RŠ„\Èma˜UZ³[U\ªŒªIzRÖÖl= –öÛ©*Šh5h‰©U®¬çÎ-ö¤Ÿ—´Îµ:jª¦‘IÅÔ¡«ƒ¥e˜ÊâÓ+RÌÖ¸¹Zi8jL úçHp‰õ¢âø¥YI;åæ-(,«ž^&˜Y¬¥¬Æa-]Eª׳ÒÖ”–š©‘–ÈÊÒµ*Æ†Š³£_¯g­5eM©‹ZÖTÑj M¬º¾tÒg6ò²0kK_Ï^ˆ%cÍ´˜Ù)ê£6¹UÑœ<°•É =Q -±œ&‹OLÁ3=LÊë¶%&éP¹‹5¬Ó—U`ß½®:䥮öÁª®D¹¡W’KiÂÐÉùÙˆRö²ô¢·KÛN¹¥Fh‰AkbÎpív7T#ó¹8L‰·Sk•κ±q­rÉVš¦¯í½32£¤Ë«B¤ùïBÔ«YŸ«z¬ ¥Ø¿Ÿ^ú©WJX°-@ó{Ù–¸gYhÔ÷¦ug±Ú‘¦ëž”R"оaq_±(½¨˜¦â¹¢‘·[%Z‡.!ÖTttißžxÓ\•ƒšåÓYh¥cE¬VfƒÇµ¬ˆ³V’ÌC$m%Uï^ª‹¤Š†©„†©(FdT•Š^Ï[c¤ç"5Ìé•›KLšmN¬»19¡å¤A%Yy.ÖÆÒŽ¡&Õ¦Ðå&™ÕiƬ•XÌ kUó{zÔ¸Ã+T3ŠÎGÑuQQJK=”+±œPÉRò—POT]±·%Ò“#²”’(ÊÌm7ˆë.T†±Z2–†‹nÊŽWV„BZ©P—¿$Þ•[ ¸gÍrZ“Šè¡$ûdÔÑù¹Â•%BÉ2kIÔ5f–Ji¥\TZLeÇ]Ôæ±—OÉÇ‚”¹ÊËïtíéR«5…ɦ³Jµ´º™¥I¢Ñ‰,Õ¬fûÖñÌëgMl.¬o]ïh“Hš<ãŠÔ¦jg:ªÕ¢¹VeLÕTË=ó°“’ÅË,DCB£SÖhÕÍGõÚõ94×bÉÞ/;Ù%ÖÒÑÂ.ÌÎF’n]‹Kß¾Ü{ÂÝLß&S]B‰NÐòöîZ¦æ’è$nvëRôAL="”„JL½W‡ŸF¬ Ò7UU &²+*Íi+k66´XŒ¢4B‘\Ÿœ8¡hš)hQ&ê½¶BžV%hI>Ýs½&š¹˜¥†ªÉk™’ßbÄH×5"Ïä—2•#ó&f¦"êé¦"HR˜jäOµ–dyG¢)„I)Yk¾°äIïl¯*á3{ÆÅ(N£\ï{ÌõRÍ–§ `X¹&½ºXªk¾w*îôYH©^JY?Y 1 ¥LBòRRD*\•ûmÏKL"·I ’ó¨zåIŠIž–ën¸SÉ“M-«¼ß½gܤrÅZ0˜b¦¦e$iQçUVfK."¾nûß>·ØÓ,U(Êž­Ã]¶äÒÃÈúǽdXyFê†QÉ¿[T^‰¦¢X¨u=¹Uk%\Ô²˜×JÑCD‹°m’ÈÓÓ[——$I5 S)9›–ΓU4]j·,ËyØz!¡ìÙ¡Q+VU¦,ìa#E7µ£¢F*¢FáXÄèÚa…dDIi[–I$Eœ‘‘i¦Öà ëi)¦YÊuµ²æ-LË*/×Hñ†gìYaI÷°cʺه1V.*+šéZ`f$R›S(Ÿ½Þʽ-YÚÕÌÚjVE\•PÕ’\ˆÂ¬Pô0¢ó{Z6Ùyeé…aS2nÒÖ2¹Šæ…I‚zhÑkŠ¢ÙŒa®§¡yŠæ$K–SíbØœKÑg9±ÑŒ“|½Ö¸«RÇÖ@ŠÎMN2`¬*yù÷½=gfU°„¢ªsÈE]kÞ¹åJfJõa­vÉ'¢ºôZ2[¦¹¤‹¤.½Œ>Ø‘b^/9=즕.ÑcF¾Ý²´öýìx$ªÄÞœ\=ëÖÔÏ×õGêÒþg€Gëúµˆ½Ì­®Æó@é¥+ŽÕ,2“þ–§ï¼[‰äO£[<‘Û¦I$Ò»¬%2êã³ÉhÓXr°ß-,ÍäáÎWëÞ0&ÖcV¸ü˜rDñ=Q0Ûc•TÑ•Ô2ÆÄ¶Æ¨D‡‘U9ƒªÆªüÛÇ­Uƒ ;jeËqgU‰Ú m÷vL¥„I¢7uÙ$÷ºð‰åĤEîìó`M¹YÝÉNî™(Äî­0æfõµØÍêØV“¦(¡»ºHˆ1ÌÌ•Y§hë]1šwXÇ0cÞ§­g0ã)LNäž*%ᡦ%vÂg¦HãYgbEn(k³8ì&ÄÁ¦™\çwG—4PÑ{°tns$RI"—uÂä²w“¼&¡©P^DQÌæè„M4îîrœº)›—dûÞÁîý(*veu/vaFLJH3—#wni7jΡÇß7ß|/x{S8K™™¤«™ÉaØÃæ3aŽ©5R*Xæc\³§c°kçD ¢ š Zì’¨š†[=Ù̱çåX–“ê;Ö˜’¢PyyŠ<Èö²Pótw[²—,Wºè0T›ÍÓI&]÷¼ouÎèì…# %w*O5ÒÇ‘Ò5 Þ»ÐgÝÛåЦ'Ü 磵CKàÑ«É Š"+3ø®ÆKîºj,û¹Ž½Ç ÎÌÉl8J±®+N᜗Žg*Î* I¶©Ï­:UÌ#ž?±1è-ž¸f\˜uJнVý\dWÔ`^ $„/ù¿Cò_Ã?6œñùŒž²x „ü'¹G›„Ë8 ƒ©Ra®¹~ê{j× 9ÁÆùlÚo/Biœõ£™ùçƒ66“›.ìë¾zw¹JIFyÙ8úÊÎq4Á›Ê­œÄª)M›¾ö³fÿJ¾ªèlOœîåû®‚H÷ÝæÅ7—«TæÁŒCYÇë´ÏW5XªMF†ŠÙÇVµH*¯<´JbÛ«]ˆÞ.Ü(êÈ]†é$’E^PG;­NÌÀÎf3 )„Uá ½¶TPsÒ ¾§˜Ð¦ 3"$øîår€Ì%œº»¦Š{’÷ºŠ}Üß9!9cNºìÉfmòá¢}ÑpkîìÔU¬'N7Ï3Ú9'Öì† oÝï¾õåÈQŒ mÒº„^á^V¥9 ˜HÕpÌÜ“:µƒccŒgKŒÍZÎÎ~õÏi¹„²B)‹‰rm<";Ff»·oÝt2J2÷Në'.š¡œbt­g®¶fP I%Ýt¹W9Ý?c/iI”9J`‡ž¨fhšSº%ݤ„ "‘œÌUå³Òòã3H'kQï?]é1°æ”³§L2{®‰Ý\¼ºi­c1™µFpØ7%…AÎD‰!wp¹®ÆÆ0Ò¨ækVÉqÝ6™ÎÀ"}Û•7ºæd_9ŽoUõçUÁ™½tc˜f·ÞÝ7—5SM$î¹Ü3 ÔW\W\É%S>®›‰M>û¬_}ÐS›¤{¶ì²×±9PzHA9ó.Nœ$›nÂ"òU®”}±„G½E@Ü"@ÿkä½Ç½ÝîÄÏ! þ’Aey ,”‘ŠfÔ#žöóÞôùi\϶WÃ(¢Œ%=4RÖ{ØùµáW–NðoyòžÆÁꄘ†5oXP.ozïb#iC€ Ü”2†Œ\”Ñ®óã`ëÅi 7žˆØÏ˜Àùñï(V:Æñùfm‰LHM68ÃÖ”nÉ äª«ùwÓ÷²ü²(¸8ùÑgù±ec4¿ñª²Åðý;çæŒD>¹«?í(9rM`U„DК™º-áp¡µöÔùó÷×¼Ÿ6 ‡Ÿ3 hKÏ9룇"S¾ßWÆï½ì]CšÊ;£f5T'˜â$"lSW7BSºOŠÁ„ x|ûoAyaßD&UNúØ!?´æ¿nÓ.¨yEhé~¼æ÷è±zŠb˜iΰ|xð¸s¦Å¤'Ï£q䟯båø¯juêÏŒ°Õ¶æM÷»É¹ó=\ A6&2PáðÎõ|zܳž_ÕôIõQûy2=ú"˜Ÿ¤ýPpÓÒg`ÉÁн8£iË!=@]"®:ê¶;jŠOcÑxònuÓêáñ;[Ìù Zñ•t¼Ì7’.k‘{Ô…x½ë ïxÆÉkFAbSÓ]*¢¡æjr?±{|øóâ°Õ'Ó/–J–'Bهƴ˜S„‰4m£(›”†èzæêoׇϭOž¼•m)z0‰äÅf¥!y5Q·ø~O’_‹nQ”Mç=oW"k”Íü}â\xôUÇ&¾_aÈÖBÎ1Ãë 8üMhq„6ðU‘Äþõï@|æPñY\ èÁar/½Î1/Î34uDþ@R©3Ì£ÛeO“§·T¤•C%Zh¸'$¹ãˆ<Ê“ó¶cÇk9 -/ŽgÛëǸ}æ®t-ç¼"ùn~O·žMó:òLáÄr79#Þ1‡Ð.0hÙIO[zSE“ Åtýd>iYg"X*G1Æ!,o¯<*<£‰ ½'k ôùÞ1=ã·½íS­L Q€q±ˆ5˜+=¡QA¤³ã×±/éwŒ’|}ãÕj¤YBmaeÙÒÝåßÄgÃ3H`LXÅz»áOIb$”Mù=¼Ý}âGD'0—/:*”T ÔxäÁ7§óæéý@XØÎ%|ûï°ÞJ(ıûÞz„Ÿ‹ïB¾‰¡T‘Ûóeh¹phlÍpwbô¥=ÇaTˆ§¥AÂh¥ˆ!ÏÏ^‹‡ÃU’½·®™¦=mÖ¯œó‚yõ×T,ƼûÓÌ‘+V&Ûž±'³™ ¢b%®lׯ>³&ùÐ->4ÞlxrÄQínPa eÖ¶ïnò°åç>Q³VßxO:>½½à›6p\äÁªéœzìŠâüÚðè æ¨‘ç‘Þö_ÃÒÏÛïvÐ –8 œÝëh…|ç¸òhˆhÔuScŒÍõuoÞ;ïX&™çØñ÷»j“è²aØ`S iÎR(D‹XÞ58ËÉêàŒâk¶GëocyÚ"¤r­U¼ºMúx;ÃåKCÄ)’«J9äИý­>pþoT•ArR =ç"™;ÞÞôÚãq6[ã§t¸„ùN½ÙCxtà}0ù· ¼Š¿Véæzéutý3ìŠo¿/çoŽ!ï‘}4iFÖÍN$c €€6{ #ËÉ6þzg§.t™™«…—]3óiäÏ׫¬ý¶!HMˆ•çëj\¼yÀñИÑÏ‹&Èò†¾–º=D‘ëÅŽqÓdå9ǘjï¬èe”xpï[dz“^¯v˜a&‚R‡©îoG½äû×w¯eE±«­÷¶{>EOBРÒ(ÃSÑÕ3S í8‹•tm(ïkâqß:ùk} ¢u×UÏ ¾ÇäóhÆ&(¦eezaQQD/ØÂhP§cm«°š4áë8ø÷¿-ö£ Ùkk‡3bÀh‰Íß Á 2PëyÉåTúù× ²š4H§¾ßz>gc8Ÿ­ºP"yÞN<ï:Nk>SÒë|<ýgãÒåj¢Vøn.!ÀÁEèÂ+’¹=‹«g‰Ë+¿yöûÎŒa7°Jô@:i¨ícãÖSÆŒ&ˆ†_½W|v¤ìÔybÖ/ 'í¤´’W+CU°!94µ*ÖÓb½Ÿ&ôT{ÏÚig«ïkÞ_§Þrkî­. Œš£%gvA>¤^E<„&ðǽ>{ ³÷Ÿ^®}CÏmk’(Ï\i(ÒºS=)áÞ|EÙÉöõ¯bñåp_¼øéC.xAC o/xØòZ«ŒaÊM/Ø»(Š7´:»DNåä4U5± aÏ Ó\“uÊŠôÙÜ~ôO®lc:%г§Õã>QŽ—­ô†´VùKë_)¯H—Å{øúõg(f­~˜U ˜ã&ó©ÎA?¾Lyã>²fƒÞ×±ÑMv5ÝR„èÙ†¾Œ¼üžÓU$*¯Ô‹¯V$[èÞo?f”Í=PûÆì2)z.¿žËÈç•Q—ë/!!µ\¤Þ5Ñúlˆ˜Wö`ÆÖ$«ŸP¨zó÷‰~ñ9œ’’#\3ñ Cª«â<™ñ@“+í. ïN•&Ö2ŠŸG·½ƒzˆšC1é¾ù8ìyÊì´’çÆsD¹rò×&°:Å—â¶D¦Cˬ˜áD.6“È+bc¤ Þ=&fCY®aëØÍ*¸ÄÓF ª2wÊ{>ŒœnéWŸä>¡[œ¹Mô¥½õÞö» GÍcz<¾/yÞPäq‹(iðL‚pd|¤áqŸ×ï}oƒS É(OŸÜŒ´)rW£+¯hŠR¶*%©„DuÚѸj˜JDu›Ðõjè{Qê®SF”ÇÚtžÒk﬽çâÃAPÙÌ#ö³ èò ÕåT=™ÞL‰DÆüðãtôFÁ€ÿES5} 9f óÞ÷‘„«šRÚ5¤t¯ŒÛUcCj9Š]|Î`O×½UG­&çÑvV¨RJ{Ƚ­b{ç±Ñ½ZÁÁÊ®…:¤©±–>e{A‡v/×í#^ÆOŸkjžžˆ~l1EûožûâDõMÞxW:…Bˆ"(è c$#†rj‚Œ(¿}ë#ÆN|²‚ê¤åर˜TL©Ê+99zï{ïzǯ§xœrÆL†k¬zÁ­ËK,"# ®‘4m´-V6Ìc÷ï|{é$¢bçžb$^×¥_U²ÖºÑ£²¬ª:Û`ž<ªºh±PêhFÚ9ø¥qÂÃf|´TÄŽ#$è°fÕŠÍáï£ÙØ”úö¡!g¹£ÜÝó^ï®É™õ”0ºèúñ¢eŠObúökÅ-²ºlô½±$^ûÞLóCWŸ§[|æ§ïZõœd`’¯O½É9I³XÞós>0¨‡¼âQiÌEI­LW£\WíϪ̓ø×ïZ!²C°p#ÆÁ¡¹Ëjòåõ fÁ`ËáÈþ9‰+ì2È¥5íŸz1¹Úî—Êxðkê'Äkç>Q_eÉÃT™VÅka‚ADšj¿8A4DxÅ!CR5‘Ä«fãÆ<øêðÕlX„jé’{0¸§i\#/’7”ò/¼$JŒ™Ñ]GѪAÎÆ:7½Ÿ  4€¢Ñ\Gˆ+Ý*³xçxl˜U×½=:÷™C¨wï!ã(úz>\ hÞ\CÅlVµo¡´­®.n¶ Ýmòh`G¨ž4U•^‹U‚ã5©Û{Î ¯G¯§eKj|'ŽS©â².>=&ô­¨*ÚXÆœDCʉæh^¼THÈØÌ†iê`#ß«ïߨôK£æÏN¦‰>dCÞêýyïjèÐчäg£2$k=ѡʉ’§MZIa7ß}çéW¨cŒË ¡8Ÿ6üúTûÛá$1Ç1­›ÞÎ÷x`³²Á£Í0⾞„F5°`$ü%'ùc>Ó3¢þº<ÎÖGÈmÌFÅÚ†„…­œeÙþñçëìÐæ.ûÛ¢̼ø¬— ¼—M}·×œ…\(—<0Œ‹Ô´{ëÙQœÂæiþø¾Gëì1$Q$Êy´M%ÅÒKceåpô¼‹÷½~û] ©½{ψ£%:ó½çG{³µj@™Yí¢8¥Yb‘KSY 4°µ×êÒ½{”ù<çØrZóoz.`=Pë)]bwíãÉg‘52X‰Z›l.L<:JÆÃ_½Èm/³½^ö¶H±À‘Ô 4`°qÚ²FX3U/3’7Þœy ®6=5 ŒÆ3GH=G‰GÇÛHIçÙçhµÎ$b>ÚלQ ¨Ó}>ö>}½Þ5;ZÂÀê“©ˆTLk›iˆïײ“Ͱ}é_}e)³»Ì"žC *‰ã "/g|úô¶u U(õGáì™0wö·ÒåÄ©ž1åà JοOxãÚF‰õÞôzöö‰Hýˆ\¤Gµ—7¡ûØED÷Ûµr$¶W,ÈüÝ‘Kç°°ŠšVªæ-­Áh誥=~$Z%ÆO¾zÜùS|AÀ|!y۴­Øo1„žG™"‰Dù—ÒÏ®ÈëÎMÕÒóæÑ CŽÖ0Í©òØ+5â²&&Ê&æ‰ZVQ£Áè$j⨷–ôúS&WC׬I€ÒJ¢×0çf¦Ú V°qóžð)ÆóÚœ%½¼O|¿yLâñomãœij§8_HG±ÑÛÑ>óN£ØMTÚõãÉï4ôÌ’JòÛr.Ä”gÚô*ùÀµÄ']%i´Î;cÚªEwïñRWzÆSVù/°Ì^q‡Ú±…3ßkÅ'¯&öÆ}╵Êó;Ëõçz†ÒKmpy 3Ó¬E%7Þ´oy/m÷Ûî~E'‹éÌI š¡W‘ÞÖ”_\B¿>L¢*Mm‘ô3m•›M:œV¨²Zç»86øÐtjè¥5ŒøÈ`Ħ@ý_y¤^]¥ Ð’$BŒÀå?7J¡“!ßzÓæÈ ·Œ›'½íèC_Sæ÷IÔ*~ýïyw×$»(ÇA<‰Öd¶Ô³½áL¾a4«E›²d.†Ð‰/*ÌÚáAdí{ÎýæÊïŸAí¯4¸8 £U­¸h™é%*ˆÞÇ#|„™„G×ÛÖëm &Siiѽ{Ï”Ê+—jZ¸ Ì›÷²¡dCRìÂIЏ\œÅÐq¸cÇÖ|!iÞ7\šé÷ÆÈ¼üR»ïxÔø…*¤ƒPVeÚ*ÊXË…O½ïoj¬"+úïq çã3 äãEFiÎM˜n¤§õÒôg…Ñ`ïË€1¯úðÔèð]¢-@˜ÒëDFxÌÆM‚TÁ¯V¸Ìk,%rý¤ûÇ׎!^Ä*¨þ>|(ùaª„Ñ‚QæïÙñ¢Ðûa› Ï~·bQúâÂBƒfã~}z11\äÐì­ñëÃ2òò&ˆÖïÒbù^ûT½tLêÅ 7ÃyóØÎLäÔZ®†­ëÃÊy}:Æî•QS¢œy¬{D}æÍ"}OàÞ)ÅZ ÌeÎA÷R×K2Q,ûKž¦>ˆ¹Pp}”¡ØÀ> /?y½Xé„, F¸0üuå|~óñë{î®ð+aSb4é_z)U½ŒƒÎõ²\GÖtUrÏÍá£sïtNâé¾ï{ÆÓÉZ Æ ô®ã­\l q±ù‡žõ}äûÉ!Q 6ûȾ=šWãx1ÆhÑŽ{õ \üôpŽÎ´Ôs€TGU¢­9È .Hx’úòÞW×d5D€à0…y÷ÙÂ<•’5ùeAGÜ d§CÏ 4³É ·è[†Ö™È>öÂÞŠ<šÉ”poÁæã~çm†lFöõœ\ç<þ½zÎuk­ñËëÈ÷„ (9ƒ¼<`½J ôÛG¦$y ùÆ2ÅïaʹvAÛQrõ­«"cYpÞo õé+¿i1E"÷ä±_©’C2Â^mïÔb1ÛãSıðžP|ã5eù|9Æ|ó–/NÐúlž¼xñ†Š˜‡búØé=VÖUû댧ºøKÔa‡Ð£Shœ9Çy6½¼2è}ë:ñռΞÃ×HØýìd|Ñ„Úú¿?iäYúÌêMà3̬÷ijÂ>Äi[_y”Gêãå;Ë™Z,²‰Þ“|ü|o0ëcëEæ×T‚¯+áQ *Y÷‚=?zûëáï92H‘_]·Mõ˜µNÖ1íï}>O›FeJϬ‡œdx7¦ø·Gª2dG°ÓT,B#Mö<¾O>-ïSƒÃ9Ы8:…ä°ñÖöªñûðÞ‰ä4ówõf ™ŸÞwìíæP¯PC¸«'òzl 7bjÒõ£Åu¯CÊ…l®‘U%ÅË1¶Ïhm'n÷Ÿsz×RñÁ‘,så°™FV´Òï “L Í"ª{®½x·¯Lx½ÖQ!H\Ûo[èùרcíx|¦|¯5Äôa2ĉ-¥PñX¢Ae+H¶Æ¬ñÇ.Wô×d^•f‘8é§wêz“k4鉠ãåÄÍñÝ÷WM‡»´“N´ÙóÌõÓ®mËX1šu·8&,L#>êò÷Ý]"8Æp9Œ8zÓ+Ц‡sIŒ˜ó\Œ9pÂ1’Þ[››˜¤"-õ­˜ç‚¥°WtØ%›€3š–×­c™:É•ˆ¡"åË—+»±0¡wHžnU x]Qîßwïw¹ÐºŒWŠÒÂky”ôy´Q{V6CQ§^Îí-‚lpĸeU-P~ôwµ\o½cHÏRÕ¯³&S¼DÚêùôàðò1(NeÑ«§™ç:sÒzíyÀV“ãXUj!µE ¨ÅÄ‹GŠ„X_|Æ——•̪aXŸaÿÎUEùþw+ùï’Ÿ¨õrõ qi÷˹/³»W1Þ|õ¾RO{°NŸ'“È¢«Êez©$:È–9™Ì”›´Dìv'3L~k<¤W]“R Ð59WgÖZy§uÏyع>¥ÒÈ¢>Œæ‚'˜R[È~¯­f8sU‚(Ã\è”ØDçDÛ¥òfævŒûèðå~÷›Ý• ž¡D’A}>ˆEFK¿ÐºÂI=_ØÀ£¡®«Y•äAT^J¹[òLE¤£Qþ4Q•qäó½ÖÑå}Š}£É0•è 6´€ãG•ÆòµÁ¢ R 9Kj"bM¸híc0¡F€FÌ”‚kÚUÖ\¾|{Ðh\– sÏ^ï\ƒL—väK»‰’ÅýÇ<¡PPPS½Z¦Fˆãq³0ã›%Õ3*3´é¹À,ˆ„ܹ)‡ö+¡»0ˆõ«õiEþ~ûçéÍFdÍ~±ÂFÈO;жöÞ5Ä•êé¢8Ø"ã^VøýwÇ—âÆ¾Z*q6a~£ÚúÞßzAy}á1&´ÚÅ<ìmæ0¥£1r}¸¹Á-Ô÷¾ËË}_˜— .b‚‘üžF«ýŒ??|ÇJûs ðòò<ÒÒÐòˆšòyÞ•ãr!…BS®ÄæiØq“ºp4×NŠæ+l­§}éìºäžžhlèD¦i"ú˜:G¨”^2Pç"—="‹]WI¬ê„ ÉØ[<¶aü¶ŽpÞºÆY¢´ã™þ‡¼ôÄV­V·§CN=v1ËÊ+ýY.–»«›¦®Qvdí§n›[ÖЫDÌ&Ӝܮœ£iÒ•pD¿÷ºÊæ5ÍnÁôg¶KªEjz‚çæ3³Õv¸ýyìaÛ0 ݬêÖ”ë7å›×jL ÎVæåùÆŒ€ˆór“8v­c*8åfNkXÛïtgåŒ>.ÕBf\ß7œõ³VZw5Gõv<×ff𭦫Œ ù®•ç2TýÝ LmÊ!”êïÏM'¥Ä®ÍˆØ®GL$˜³4Ey¸•îèdܧn›»nHXÇjÖàzëÀcy ç\Û’2]Ó«ˆF“U]3'aŒÎ3o5†ÞÔ–c0uX1:K8mV£-K`æqˆ‘Yݹ¢%*ÔôÚÎ2kbÂæwÔÏ"‰3VÒõfò£F2`8cE¬å­9•Ô“å[Ç:m•4èh½è ÷Ýéù»ç&W—Y”'‰åU ¶d0öIäP˜'.fç7ÎI¼¹Y±ÒΑŽsªÌ‘7ït7çtæc}YŠÖZ¹’ÇòŸË}Þfx‹ôTŠU|ã×líÝÎÛ³m•Ê´ašËŽe4›]ΩQAr3C"ÃßôÝ„Ò"Ôæµh®5Ij1ÉJ«Á´®LìER32-FUiªÅ¬5˜ye§ai•&2u¢˜a¬Æ ¢K‡QR0®&YE²Ö3©IÿöÊ&¯[lI”‘ši^Q‹³Z¶²ÌĂֺÒ8g‘&®bÌãÖS4ÂL,ܨö‰ÇÿÆÄÕÌôè%Ci\KV9ŒêkN®i÷·¹óyi‰¨B+†*kÌjᢅe*ˆžR%‡Qœ,DÌhåAÈBi2™,{ÕÌÌ©¢Ó54IS)ĉ uOØœ²$y΄™'Š™XO¶4 \Os}ëÑšSR妛 ûÖ<ª¢ëulÌÓ­F¢%-"£4Äá©ZúÚ=”eÌÊÐÆyj×¥ÈÖkNÊÜY•f™‘4¡´êæZÒlÍSJµ4uÖjÊ9sZ5Ys ¢×S ÍEE:7"b bP‘n“šS‘ÙµW-ZÆA Œ V­¤Õi«MbS±C–:f±.XºÂu¦ÓV™p³ B7J¦4Õju¥V‰š¤˜Ú¹fƒLjƬѤ³kI¨¦§Z-­7yï0Ò™aÌìbL å5«VhÍ4XãšÆcZ®‰d¥švt¦¤(„z=9ñÊ\ŠvŒºmlÉÚg&ZtµgKœ‹GJZš4£Mek%t R}lO z¹õ (Õ-[¦vfªQ\Åe V²³¢ÎüóØÈ΃2Ðk—*ÔÎç+8މ×X\CN2« Ì‚„¢:%u •Ó­KJ둳)ØœËkjŒk4´Ìµn²³yR¦¥bpdªVtNÆ´ËMudÙ®; VškV+šÖ´é˜Zš×&γ¡ ÚéÌ訖k5¢u–:t’ªõIyâ3+0튆×J;+iǽ<®ArˆÖV«™SR«S-,×4“<­7Tõcï`Õ*uLdÎq"Òµ›Æ{ímekYbTÉÍaa…mÑ:í5åêfYf²)q&Q*µÔÕTrÖ¬´®*Ä™,Ë(a†k4å¡gRÍ,´&:ØZÙ¥±PÕ°+Zº9≞úÎG™n›Õ…Öae6ÞÞõÅLF‰uf¸-U«/«ì±!E“Upj1®šÓš©ÑIJ$Ä´>Ö×g4ÂM%-s<Â5ž³ÏCP…$Œ•B1‹ ¹­–šˆÚ*æ³KÕé²Ô¸êë)ÍQ¥¹Ízñë)j¬FÌ1¸: Ns1©™ª#œ­-k!®T®µØ„…s•KCk!R°„W#$NÂé\i¬ìk-§ TѬ• ¬å¬µV’œé¬5*ÌÍió½áQQiÍs0:¬õ·êZ”‹«2U\XÍ5*´)d"—%UÌ)•,t³l0ÉTŠ¢4:˪R„u‘yÌ‘Öj]]™m iªåѱ´ÉÓÜ« ‘S%$¨”GN¥•£W5tÕffªv´ášm­WRT1lÖC-ZË\ì­¬²\Tà®5Óghª%¡(X†—®©„fž©AtHàÑœ¥Eõ*YZ³ª±š&MĚɕ"©ÔZãQªžÖ {bÉë8zªèB™O’ÌÒT¥t§íµCsìc\Å•<Ã7U"kb($a¹”Db¡¦,rºˆ«Sa¦•]¤õ¬¿FÄ,$“ÒÕiŸ/fß½cÔ8óR'‹6gc”r£Ã… ê‘ ›f–»ZGJ•®s•4švšŽ´ÕiYšæˆ D`³ªÔ©¢)œfRe]S¢kXK¦Œù¬ñ#U\F*r®ŽfÍÚęè¢r× YdÌå’˽$Æe[(ØÌ+æh…{ÛkÛ¤Ìë°æa¤jN¥­F²*E³Ž-U5®®ß½æòº°—!iб­Y[F°%œ9¿5ž²Ý7+3M6£)-@ÚȲ®„¥ÃYMK÷¦õ4Ðs¤VIÙ×™ÏXÖeRduªh˜zJçö0ºT!‹Šå˜XJ"y¨¡èŠ–‹‡šKU4ìÌ ê¶i4c5Õ˜kE®®­kX­]™‹…%Ë[-{ªZbÓ,i®„¤ ‰ZäTÎÑA Ót‹¥”å–iZk üž\TÅfšê­u§N³ó¬zU1ihÕ³TÍQ c›B¥y©‚bõ‘ T*5È·\Ñf«e®ššå³@­Ë+j´³5¨è•e2åZ-w–ó-h«S4´‚ªê'+§WMt«RjÁ¨©Fª¦3k&Ñr”%E4"×K«•Y1©3¶”ÚåiŠë3- °Ò¡b²Ë¡k>[Ú°°Ñ@ë[&gÚÄ$+4$ôòE±=ŸFÕXèµXlM ìÚ²gÏm$¯Ûd“¥¹ö‡"|›žs ÔZ¦:fkh£TÄ̶kb8ÓV­«t6±ÐV—9¬Ò«ŠÖVEÖ¦©©ØÞöÅU2¬LÂ=#É-ÎÒºjiŒØ™Œ vu Ò«uÌ–µ‹7åêÅ´Ùa…©:³U™k)QÁÇÍï” 3Uh´–hµiÃ5Lê“ÏzË™YM#1×ZiØVGG9]~õÞrªóÍœ>¾= âe£ª­j´˜ŽT&£Í¯k4òDÀÒˆ}XHJ’†%褯9YØ£mÚX††Du“R¡K2<¯©Mëni!¹’š<äÉL¦g-¨À‹DÚí ÎDv˜L—b©P¯”_ Õ \\ýª·Ì¯¢Ê^°«”ô‚+•PØá ùþçìý?Kú„y9ÕÉΈ ÛI´ C~õÝåŽw:×o—fŠðŠú^y¢æ‚Û£ùÀš?=Óžå‘N‘C¤RIÀiŽý\=iÆ›¤ÝóÙ®\‚5åÊîäÑ_Ó¦<«…Èܱ¹\Ñ%ʦæiÕmfÓM•7Y¡Žgs¶æ4&:qD"}ÖG M]ß g§'dâNP$éeZ¢c¤Y˜ll%$X×.&“S¹ú2öe Pž^Z¡‡Š¸P͹ƒl9p îó^¹ÔUÂ'yë@¤ð¡<}£ÕÜ zé÷èÇ“”ï<ê˜Y.Hy[YÆf cª«tÐZÕv•¬7ª6'jãsÑt× ‘räZé¢mR,å2»¤ÊÓYd(¢ní”X.nG1ÇDŠ_=©¦FIV´ê×%šXs:Γ#¯»Þ¹Ò¦vpÜÛ”˜ÇLLÎÆ«Ž38VcK2'téÜ¥Ýv &˜kœ€£$Âî»Ë™çi$5-繕ÍÓ7rÔÄÓ9M@ÒîK,‰Ï{¼Ø^G 0uۂϺ¸Q@o7RhÆ]×7wåta±ÓiÕ1Ñdïšã½Zu:;~o=¥¸*3ó{Ë¥ ë PÔ# «=S]¶Õy §ãÂ^‹Þî)ÈåºÑX—(#§ö Ãwï×>™^º’y©h>Р¦u²¿P𫞆+†v‘˜“Quvã§µüxÝåÀØÛ›¦Ü¹€¹tï½èØc›Õfó-cÃ(åe©³«I§iƃaM]Í[Vyj‚{—¹TµÅ®ž'…„$E*zEë\Bb… óÞ•®ãΗKc»Xa]V‡emümçyØÚNájPtŽs1|ÞUç-9½ë¯]×.cïv1æÁ‹–,t¹Ž VäE幓÷Z÷»çMsšÇ5sb"ãN×émz°J± ÜMÙ›5v:iÖ{Þö®ƒŠ•3 ltÛ+V»RÓs9úÙTÔóÉæAttð)Ê„ðÐ)Ý!=DIP½’s2‰Ýt‹hŒÁÉ@Lñ (.áÒ¢ÂpÑÓ%Ó›|·5yÜfØÜÑÝv4]÷t·›žUæÅ壘°ËIŽ\¬ØÓµ]¡:lM4í¶æ¹n3åïu£F}Û›ÃʼóbæÃ[æë×n•ónc)áx쇞ɇ=½uzË¢áQdCQ’ÞtÛœºl Á«—ui7*ÎiÑ¥3€ØÒtéóÎÞ†Æ;«ç»yÓ±ÑYŒ—HH#MÃ{·½*Ô3 ) Ï®ÃÏ™òg£$ŽjÑRC%•V§[MiÚàpU†½mí°Î ê÷ W¢æ%^×fct4²…m{[#ªíuAQ°\o©Þ¥²«¤&H¹¡˜p«ÂÂQB*/{vÂȽ#©ÕúÙIxQR>fHwõfŸ¢­…mõw½äϼ}øi¹ šë$jï3eû2°¤Ä˜U¢ápŽ~ûGbaxUê.„U‘¦»ðŸÇÛ÷ïß>ØÝ Lœ” ²#­Š.1ß“»Ù¹[•ÖiŽ´§(SÉ5C䯕¢yòeƒù &hª ½ÑÓ!2Ê#2ŒñµÆ â{¦:{¹J‚Af®$œ†×|ÂOO9‰R}8Ù’Bx3Ò½wh¢‹¥Êæé±™Ç4ùz²íƒ¥[NJcÍ%]טsUžœÔ¼d ;<#U¥¦ù¼ìvóepjÐH¥>pÑhY(‰¹XEÆ §*v‰§N2ÕÊ1Dn•ÊÂäQ£DFÉÍ>ï/-­wvï½ãJ :C§§…Ú8^ÚzNÊzW9ÊS3F7.rй·5ÌÌ\Ô½ëÈznsÆ×(/. žàÏÆ®•c*çK»çŠ÷vŒ–åk˜«š"5Ê(Ñ ¯8R%3{¸ Ç7MPi59ÙÜ;¨¨¼¼ØÕäî᤹¹›L®V«iÓ“ƒxC rrí¹ºû×´[ˉ¹Q(Zëäÿj™òÚ¬LOšoK¹£& !®;·îíæ¹¿7°œ`䕹›Z±¤Ý,Ä›IÚeaõ7=©Ún•i¬š–ÙÌn‡Z´ÇN×ÐOfsÖ¥DT¦ÿB‚Žî‰·#p º‘¤eÙÍ~µž´ œÕVSa›4;ísÈçe×±vE’›˜‘6euWbiµu>tö`îgÅ= …/\¹!I$BÅÙ㻿ŽIHIƒ1éßzç7«KUZ\náŽ2õd4<uWm.*Ú5›2dh„%EDœºÏG”¥Uæzöÿ–nvç1»¶Û¹ªaŠdV©Ö­´?ü^BË1P#LÛ]ž‰5J̶K{ÛÀ<4kO(Š&yÎsCœG *–•SYZÔ´v›AÆdgTXڬʺK«¦Òe'yíá›ÿÔÞRE®µ²¹ ÎÔŒDŒ mÖ^’µœ532äE—HÍ)K¤Ê¨ìÆ:´²æ×M¿þ¼ðŠ Išj•­\šûÛÞ×hä5ÒÄ%÷·&¹‰%jAT‹«…è•*©OE‰n«CêÞMš¢ÑQÖ£•ÌD”ÐС,¢2{„Ór°äƪn„bº¤)&e‰!o{yð$¢21-#1DÏB  =!ÿûgŒ7DEÕK•¤ŠmoÕê£Z€©••S­bg1—ft3+šåtj*ü³Ù²ºk$Ó:º×½>ûÞ' RÒÕH´)+]JI^ÝnEâÖãÔ,5§ƒ“oå·½“£5Q+ZÕusS*bU°K0Ѭ»EhêÂáa.”G¡EJ’õ³y2êÙ­T˜:œpN:Ršv­­j–\)¦ªRËZ«²‰jiRüöa‡„ŠEªéI(R¤d£EZuÂ5—–5µ°¯›Æõ§U2[X4˜ÊÓŒ³)´¶p¥N­MWDT6ØÍ“¦. I…•­æ½­ªÍkÎc(e¦ºn‹žEåŠI&&FØÙÓŠmj¬FYZ°Î±Y4+­Tiœµ0uZ´ ¦3a™a¢hb¤J!S®38k­V¡/&ódÕ­r©×*”¬¢œÎe4ˆŒzìàjV¢¢êbª$Z¨=hôDŒ-rÀªyÚ™•¶éwTô’Epñp­>ºõ(é²î¬»øöw–FQWsE\§ë!‘¹öäI'dÒ™Íp´•×ÉèÔÆ™Ú8Õ©k:ëE¦e­M I!Ûõ½½LcTê¹L-6¢ÚÓ«XÙ1®‘•¨àÒÖªïÏ=bÉ ±°…5-ÔÔÇÏF¡”­¦¬ùcczt̺jÓFh­•¦qjg±n­#{ÒΖU°Ô%hiïvž2Öç'& È;*^®¾§1AB3Es܌҂ÚÖ’Ž™–Y²Ö³™©RV*h¿!†Ô¥M›R­˜í-IÔ‘QWÚÊ#3%úìâTGÖÕ²¬ä”*µ.¥©?^ò‰5ÕJ’¬ÙÃ,ìµXÓ1Œ™‹2æ¦NЫ1e­F­eY•ÓUX¸J¨š+Sb’ãfÔVµ¢äégªöÎ×l¤”£33B–¥³idfÉ…£æžÕfÅkia¦ÇN:XÍ4¹™„bkSçk=R™œsÉÕ§,V¦uOã^Q3Sg&kõ=ŒÌÌWPkLW\µuSLÕ©­-•”…s¬Öm“T´q­«VUVµdšÒcK~NòQj„=r“[t&dŠZ†–Š Ajæ)Faù,ÞÖéèž[‹¬­*åÜZ¦qµZÉ3)`¥Ž“YQšŽS/›Ù½Š«@Æ%EÒeªiCWV©\´«£"­P]g0 ê{ªÔ»S ‡XÖ.»VhV*U«-°Ò¥ÅVR±Zc[QSªÒʺLÙÕ.iF–¹ÍbΑkUÎcI¬Ú3“M©)Õ¬Õ2æN³7šÃ{Y¤±ªÕX˜«Z–®a±3—X«0Út©ç»ÏSÈZÎIŠÚë$Zº¶©ZÙ‘«Ú7mÖX¡¹V%.¢yž–bå?S¦&Gc Ÿ^4:ªÒÓ´MYRk¢µÖ†V¡5– Õ8«0rËBëXe¨l‡S¦¨¢Æ{רÌ3J]]™µEœÙaÔ­WGX*[ëdzjtµ§JµuvÙ_W´¹¬&yײ‚•Ë–\båE0Ý "-=ä#]À=Pó]t7_D}ySR5BMHË5U,•\+KYhé¨Ù f¶s2Î69k(EÕ[EÍ5©­5“fw9µj­V±\夲¤®Z«ºQå¼é\BÍVU«=wé2*TiVM™Ztúïc†ö‰f”ju –TfFtÍ%ÊV˜¤‹hÉÜÊÑ­e3$8å¯,õ]U*ÖJk ­ ´Ð´LIJ›F¤y ‰¢f¨”*™¥¥}쎄HZ™ÕÅ®² åÖùîýõõ˜”é”–?^3™½©¥Ò¥ Š’­X¹&]§Ns‹•œuˆfs$U>ú÷Ô­m2Å2ß{Þãų\Œ,0¾Ó©‘"¹kêÃCóÉ"$‰-$p舡˜U¤fDZèz …&ZèûY‚¹jMh¶›2•ËEÉ,EŒÍK,沦i}^ÔæÕ¤íLk’æ9]*hÑfùopÁR´Ö¹•ÊÖ1f²¢«ZËX®Å¬æ¶×$¬ìI5MWB;gœ±›K\òÄW3FãûI¼u–\q¸@tvÉ$y݇èØ;CÜßE”E»ÞöŠjUI}ôWÒr3Ǧ$®!ŠÔêóiþÏÐ@«g袉þcey¼Ñt§ÍÕ Þëw•^”%N½ö˜ÿ¸áѯtI ÕëŽiyN›‘!ê•d§¦IâBh¶¸È”Ö¬ôÉB¬Žv抻§i¿­kxI‰ §jŒÎÕn¹²W$åÍšå‹srÀ–é·,Fåƺìë¦î¤Ê»+J²Ñ6T›¦8jVTžPž ƒª Ôö¢êâN^åázg­°½Á¯íÙåZ*ò1.;®ãŠ0msu·+ÍW#~mâmèî×›i±Ót†è+cµ[N‰W6ˆ6 9®î+«ÝÒ·‚×v˜ÛM¾µ±Ûæ:TåÕÎVwj-´XÝwnlDž:yBxÚG·[Ê“]ÝÌ]5"Û–të×®l‘ˆÖî]ÉVòÅ0zWs*îòm¼ðéáWDÕÈ幓NråFŽÓM¦Ñ-ØÇz»Ç=É $• Šª‚ä^’M]³3ÑÓr´ë«uÍ4Ð/]<¦¡’8DÃ*ðL ?*皎˜)Ç[§sª0ÅYSU6›i&£[Z‰š^” Îpù3Ùy†¦I‘{­K™åÈ=\(@‹­bí4“etªiЧ‰"¾\2g—î¸R]מìÍŠ2“ZSq‡¯=Öe®gCC¦%[V§NǺv§r(d]œÌÌò2^¦{h̹„Qå —Ü~?~+ô~{¨,žUe’©N¶z I HyO #ˆå ˆyCÞûêÛ܈)ó}IŸkÉå±»´UB×õù¹sPß[»2.ÑÊaîi+‰âLç'/(ˆHÐOHŒ·á§q¦$3<¼£¥·£½èžÈØL™Â•Ò"Ð: åå¦7uÚùrñ1\wY9§L¥ìÞ»G–ØéÐˆ× ¼ÞEæèj÷zöóʈÚór¹‰5Ê.[šü¯,”÷¶Ûûuêä9xé!üõæ§¡._›†¼·MËy¹¼%¥Ó¸ïãiÜÍÙêµ¶Wc¤êŠ‚<ÙYèy¸Säã!^û¶½#o7#n\Û¦å^kžI©‘sÞôטÑFÒ©¦6³†tÛÆÕB_ 1®ž½t† $žžPwM‹4ÆWN1ºn›N裵OFZ8TBA[‡+›»¢á`Ú5Ë”k6åtÔ+›™Ý75iÓ¶MF"¢¹ŒkÍ^j8¥å?&W=ݳu\IÄÔ~skæ¹gÝmÎU”\æ57ÞãÍÊÜÛ—5r9¢àQ!âfˆÈO#Ú…tZº(Þ‘Šæ®È-ÎçhuóÞêqA¢æwj"Æ›ÎÙêLt³ƒ¶œUýmã?WQJ¸FE:yIîKkR,·DT‡)“².Tê§Š{Óóuô®é‰§bqÄWB•Ê/L' w±…м½ÐhÐ\ŒS7™5Âx˜x‘B]e®šn…¤¸¨êº˜hz¨îªRˆ^„¡4ªOÏwt0mrŤÑEco½ï^W—·©Øãyƒ•4é*îì³pO(UÝ Ôç‚ì÷“|×Ò¾`Ä|±µÈ¢÷væ¼5æ‹ÕÜçðC ï8Uã$ëbEÑ%N[`µ¹§uy\¢‹ÊîírÑîjâN^â{­žã< ÖC:ª:NÎx'{ç.íDkzmÑÔÄ"»üû¯4M7š1¨ž3ˆ$[„˜“ŒŠíÄ¢4¦C|ñiJ,Òc‰7ªi˜ÄÀÆ,¨ÆNûh²™¢È%‡·YÜ~Ï•÷îÕe~;öUøëÇÛ¬D7·®×ЉDÚgÃ7ZØÇè™ÉìfŒ€¯€¨¤R27¢¦@2Žtš'½#‘ ÎZÍxo¿ì{ný_£÷oi{Ù××ëÖ׫=Ëv ÞM˜OærØ£Ak­®Û‘ø[Shu8€çr#æ£krãÇT…nZ:Æ!¶îCÍ'ØôNcõªTðr'®+k’£d‹Æ:œ-±ŠlnµºËa¨’åWóÇ1ÖÓè­Oˆ-Žª&m„j¶µ~n<ã4hmiA_Dî›ýWv‹ª•V(cÆ(†$hÒŸ®Ø 1¯‡È I=iKj¿>}ï}L=ž3)¡© ‚ø}©Öÿ€ ‘ùbø/†Š·ÚTGºÕ7íˆA¼„‰âmÆÿ+H-m™KÕ¬"x߯ç¾?kÄgŸ V§úÈ>ƒ®|y­Ým@˲$ âÙ4Îç³£Û:ü”æõïPI”…/†#õÓåã¢>|î÷é#×j¶ƒhA#"j4 $‘¶µn–X…ã8Œ¢dÈçX‘Qñ`¹¢Á6ц󥛨\jÑAj÷·>{ÊûE[þHØ&ñ¿¦'  ý¹z®íš¡U,ÆÆ«xçÈ¿[`bÖÓÖF‚ âA4á5 ±ß›°ð×÷kÍÔ~|{£F÷׺·! Õïõg­0éµÎ.Ýj}²Æœj÷P›­¸%[O÷}:=èèмj‰€†¿µ,V'ùóÛ+.Ë>d ZëÚ¢$¥ô«º¦Å×&ûÎúNWnß4ø± ‚oøÏOwúùùÞ3ûÅcB¿êU« 1Q†¼ëÝ:ö׿>÷Ûd·Ï/{^û}è²ÿ(÷ß{ßìØ6Úo–žÆí÷·­ì÷¼Û­»{Û=µ½ïw¥éÐüݾúÞìÜc!±X«e®PÈá#k€QíåçöííÞ³ÞïnÙ¿>±ìs¶ßmâmÛÚÑÞvYo½{ÇÞóƵUªCHÔo€¤C$#âÒ‘AB5”`ˆ!ªa$‘A&!V©¸F˜p†8Ú$MK&ª­fó=¶Ýçf·ëíj_o¾ÖûóÝœ^üÖQ{o}½ìü×çÍÛií÷Ûåéחξöúóš×·¶öÖ-›YÛmæ³Þ×¶Žtï ­ëwžÙÎ8é|ÓØ§ÙërfqÄãóówË¿7o+ÛYYÛÞ÷cÍó8¡+"¼#Ä Ñ@hÝ„nF7µ‘VÅ U¸åO eŽÈ €(ÅIÁ1S)k,¡AQDq¡ÛžV%ïVÛß}z}íÛï­ïf‰µR-Œ@, Q  7š*ZÔŽVÐ"’”…‰â¥ŒmDÙ¤.2%6ÞIPƒÔR =·æZŸZóÏšqo¯zOš7½z\ÚÜ6·½½í{kß^Ó-¿=ùÛo´cÞöÖïÍ»Û|ÒIùbmÐG–›Ûéò½¶ßê~³ÛB~Ë~ß^ó~Û{6¯Ù¾ÛjcXË}íy½¶µ½»Ï{=i #åŒß-ö¬³¯½åï—½»'ÚüUå[vüÖïÍg¾Þ6žÆ^_{qõòÝ––ÛmÇxüš÷ÚÛM3‡yböÞ×¶í·6Ë(öÞÙÏZÞO{zƒ!‘âfµ£ƒRÆZO_,:ókg/µ¾ûÖöžö÷±÷¤·±~/;Ûñ½½ím™«Ï½}j‘„r H„˜Ä Hí-m6nˬû[žÝ{Û×µ¾ßtOÆ}øß8㯶Ûí{¯3å6³»vÒi®"&ŒÓõؤjÆ¡L‘K`Úq¼4.2EL 6ËFÓ“•2’´(>*(›`âÖ¤‘A„ïÃnüÕŸmówÛÓÐç¶ýoËó_6Æ?7e{Ÿl›n½íÙžçGìúú7}é{óîðòßI3ÍÄÛ^ö¶€¼ÞÞžîηÞõãžgµïv–˜ vgÛY–û^ —‰Ñ—½¯+ƒ¾yãíÞ]½©×˜ï›n¾ko¯nó{w·½›ÚÊ4Ÿ=÷Ýgg½—Û­·×½ö{ã²õ™:{‡æýžö[óz^VÛ­K^{϶³Þ½{íâ ï·»Ê˶ãÛx³f皌íí«lûÛÆ·L­·½»Û[w½‹mÖdG>ßÅšZÐÞ{{ÝäNp>ß!M•Áe¯*&땊Å#‘‚™R A±BsñÓ)%~<†ÞÚ´µ­™^zûëÁôú4 ÇŽ[Tl„fA1NQ/‰ß}e·ã·­ïÌ_Œ¿¾×Xk@&@·,t%a)Œ@%ãíxÙ´ï½…>ÜmÞ÷v—¯MÖgsñ÷çÓó_G·jõ‚ø÷ç´üØŒ¿ä“lñíïmÙ{ÛkOÏŸo>ÑzÙ{[+Oi¶›óö}÷âonukB)bZb6ÆÚh¨Ó@ A¤˜˜„" cÉ\@b·d2ët~F׬ÛnÓ½³Û·šFnÏ÷m/o=ÞÍn4Œëͽ½f1 P`@rdòKíŠêm& &ÕÍl¨bky­ÖÑ”6Ô^ûÞr“ç½xOjmjÎןO¾‹;ïnï)úÝÚqæ2ϵ›kX'yìj‰Éò9ºôÖ›n5kZ Z†ZXVÕl"m UÄZðÇ”wĉkš«´q±+RZ”±0»ÛgM¯{iyØ}ë'ÚÏ»^ß}¾FB72¶Ú¤ck‰Ù©kv"Dy¶Þæ²óRö¼ëߥ}/}ï7çÚúò¼ûEŸž÷k}ù¯GÞkÍ›¹;æxÑ|×·Íò×µï6]íoõ½ç'ž^§Û{Vöß7ß5öÞ×Û×§™ÞYÖ½yízÙiéìûÛñn‡ßš^±¾Þ_o½“}ì÷Ë|´öçé2#]žé\€®QáYzÐF¼üž¢³2ÔvCÞ½o{ÛZ66kf*ö´pµ†Ä&;}­TêËy¼!ççµ#m;Öï^Åæ¾Ûã{{Ò¦×Ç·|µ}µè(4üßšu @ \„¸ÂÊÐ}›_ê­}öçmnüZùóy÷³—·È…EI#_+54 i#Z÷æéœù6¹)~TõØ“ÈØF˜ë‹^Ä´Ég;ÛZØ­·æÈüÍgÊûÚùó¼yåä{~{/½ï/Ñfõ­>Ñ~o}·|üdž5žÍ¹H3gc³$‚Š™l"0&ܲ¹2íÞn-[g2;³oµùïì³·½èo^ó{Þî{Y³~=8»Ãó~LLJ:)ìj!KßmzòÛñÝêvÞôí¶×{oÓ|·ã7›Ûg6³Ï6Ç”^Í&/7µâq<²íÔVVÀZìƒÙ¦±éeøï·¯vY½í½nNyžûß}³O½ïe©¶¡·½óß3möz×­mö´â*B4Ôp\UÊì*˜iŠF†÷/·dK-žõ{òo/ËØöö÷æû”ÊÚÑ‘ˆOHF4+[ Ž-¨“{u—ßokmožgm½ìvÛxŽ)ä™ 9q7¥SM¨dµ‚#qÅ%„–ˆcˆDzà)Ls\M¨Ê@®ZËUHŠ60»:0ëm²7 ;¢©={ œm¼ ì`ŠB ’´åNµc‰Å1Ö£¾m¼ï¡ÞÙ•¿qó/·olçàGI\׸RŒÚx46HHЂ6¬M8VÉ2ÔÔ±<‰ã££V"Ë_m—ß}6Ïm›×¿7g¦ü|’JdF&ªhaReTc"誶5T’NiÖ“òôL¦{lŠHÑ‚tªbvŽ"»[£äÜ"H«TR¹[Œ¤ER!)>y¤^‘¶|÷¬ÚÛkÙ¾zöúûéœØµ»\PuÆœ­AëQ±Aº£H&ÒÓN8Û-ÙfÊ+]qD3cN°UÈ¡HÝNJØL‰£`15d€B”* ZrIG»¢PuÖV”-*¡•Ž`‚l`(ä`Õp­à-Ç4z7Ûó}§¸óÎðÛ[n~ËÜÛñ½íÈr8ŒE,Oöû=W+ù{ôÛW" ‚üe—"€¨B @&!À”ŒŒË8P4þEA™MO?ˆ²¦1µãL aLZe:ç(I™¹j-*ÅÈ^^ß_ä –S—Ë|ëÏŸô>—;ÏDŠ‚ ¤äNFúöøÀ%ÈôS£éÿ°¿Ö~¾G¦>Í$û]A˜¤:¤êß·Çÿ”?æ’ÿÐýîÿÛÈ}äûÔ“ï§Xu§àOÆuÁù:õÌ¿ÿaØŽ×6ŸY;?ʇj=]!í“ïÒ3nwAÝ'æο¡šéõ/ë9šAû?h=Ú|ºB¹µ{Þ=èÿe ï“¿<<†| f€GCÖR|IAšøBÀ?õ¸ðÃøˆ‡ŠhÇR4`iÈéaÖ£êòýiþµëýqu—ë¿?WZü ~Ã?Ú£NùòóéyÚ‡R.­!Õ›z@…«H5Þ¤„þ7ê•և៨ý‰:ÏðNuªÿŒ¿eó÷ìëþJ~Ðøô¾b¾˜úŠy”€Ù&ª ³|z@íÚ¿‚¾¨zÉüÑûܨª ÷®¯°Ø¤a'Õ¤*{'ÒÛb).Ürxb[Ò9 K ˆ¤‰¸w#þT€Õèwnñ}×í‘ú^¶Wíêþ‹ÿxºÇû¸ë_6ûý)ú¿þ.±ñ„ujªü]E_¡ÔL‡ ìéüO(ó—õ>ŠêÕR9O¿®kõ õÚ•ðj?iÿ÷ÔƒUÕjßÿ{u„ñÜdþkéu§ãN‘_­¯ý†8há¨a¯d¥.w¥vâžå ?„8b˜ŠHwt‡ G³¤aªu9_óÆ"¯H>5 1¹p×öa‡ÿ˜[è›úû²þÛ ¾¡}üFO øX)¸\žàOƒrˤ… ¬Ë€nW´ù]VáPøiº¤ˆ¯YºCäî‘ÄRF©» ­!¬ôrº.‡UëµEܽ÷ÒÔ«åO‡Õª¾Õk©Ýëõ.äwOÑþù“ôº©¤üçzêÕ~Þ_ƒÿb)!ä ÎR*€d¸8ŠJ•’$3–úüûÁýŽè×ÅÇÑ_÷~¯úµ÷:¯‡R'ìùVªâ?=©Î—çùEÕö®_ªþM?³™ÄRCàV£çìº@@驼5?Öýq„ÿÏ„ÃÔOƒT/üùέS™sOç~B§ëuUðê¿Q/8ëQå}ŸçS­^ªõOõ=IÖŸ“¯¾Èõ>‘uj¾ÓRßs“òߟþûû¯š%úO¬ê‡@þcQ?p¯øž ½m/ŸÿM:Þ«Ýê_¶õK­Wêp¿Î?/êºÐz¿â¯áóìçÇóß}”þQ?Õõ:Õ}ú>ÿ?_{‡s÷5z´~»öþG­¡ù-Hûíü|Ÿ[Fsóz©_ðQþ2_÷£ïªýe4ˆLærüèÕêQgSü˜ûõŠGêU èš¾oR¯âQš¯ÓÔÌ™ÕüÈ>ò«úÙÑTÕÿ·Qý~l~?_OȨ~iO¼£5LéNŸr?ÌK4¯ÊŒÒf}zúÙ=jÿ£B~ŠÚÚJÕðõRŸ²ZE¢‡é¡¢¿s#Hµ}oT­ ~(h‘¡F‘¤Ð?[]¤~ª«BÐ4SJKþéi&”šF•jü¯Uh-! Ò¦€õí©_²§Ô!«íº­ J~/ñèÒ$Ð4Sùõ'öi¥-_qþº %ÿZZWկƨÿb¯ÒQýd§þè4SW·ªG÷¥M(ÒàŸ¶”ÒªiCJ5 Ô¿ì- ¤šSû´™Ôh¯U^µü·DárOÖUȹ'ß/¼r¯îþÞ—àßsÑ/ÿbäŽRÿÖp8N\Cˆý”Ÿ>ŸóTßœê¢üQ9.Ur¹ã.Ó¥r·ÝuWЫ”å#•~UôGŠäp9qpÖô]†Iþüªá“—•oéú'%Ã’àœ§pqÿ+[úÿÙœ—rœN*¹+ŠrIÄœrßÜu‡+—îW Å'î!Ér\“‘99+}ïD¹K’q9EȹHå8–ýGC‹”œ®+Š\\œ.S‘\®+‘Â7ú}pqp§ ⫊âär.Tà\ü’ã•ÊrC”9\UÁÅĹ‚âß…Ós‚åW*¹8£âqGÇÈßSÔ§8œ—+’åQȹ\ ÄàßC¡ÉqNë…Årœ•ô‹€r…zU¿qSV]Iù©~п§¨ÃJr_>®U?S_{Sûä¸}å7îúp¸Oë+‰ú!\©ú“ó£‡Ü—${ŠõRä÷ò¹.Rä÷Rä¹GãEÊqGÄâàå-îúKp9W•Ä.QÁr§Éo«êrp——$äå8p¸'QÊå.NO§Ü®ßcÒ¡ÈåG9*äápp.NUp·ðIÅÁÁ9‡#…\8£Šàå8®KˆßqÒ¹9Wä99Jå9\#8\N87㺧\C’}ÜNK“‰ÉÅ—‚â~1ʹ\\ƒ‹•oÐupr“—#ƒ‘Ér®TqW"å8år¹W(áp·ô½—äq9NCŠääç)ˉp¹W§.““…¿»ê§*rŽNN+‡•Érç#‘Érœ“‡#•r¹.C•ÅÉoÕtN)Ç.NWÁ˃‡ÄåÄä¸.rr—®¸œ®Tàý'+ˆåÈáÊäp¹W8q8\G*áÈrqp§S’ß]Ñr®Jââå+”ààäåp®N\®/¤_Göª~ÐùåúiÊrœ«zºOÔ“Öž£ú²þX=OTõ¯àcòuzËA¦(üa¡ ÓDÎVcêÑõGÕ_V¯«;-õ]¥ßk¹Úî»»v».çuÚî;w;]§wrîv§gtív®ê»»—eÛ³±ÜoÉuÚ»'qÛ¹Ý;«¾åÜìí.û]ךòžcÍy<¯%æyUæy/(òò¼Ï*ò·æúyžª)Ò#¥ÒtºS¡Ñ:S¢º::.‡IÒtGK¤éN€ètºN‹¥Ñ]:EÓ¥êFç^Uåo1çʼך¼¯4yyWšóyCϘóy^Wšy«Íy¯'•å<¯4òySÍ¿Âéå/>cÈ^KÌ0ó^e伋Íäò^gšóO'“Éäòß?²NÈì®ÅÙ]’ìŽÉv.Êì;'d»ÁØ»#²ìNÊì]ŽÊ]ŽÅvGaÙ'eØ®Áv]†®Þ®ÚµÛ]±Ú»Wjìv'eÙNÊv”ìvñvNÈì‡e;,ÎÓ¶—mÛ)Ú§ÞvÇhív×l»Ghí®ÕÚvÕÙÙ ë´í…Ú®ÙÛ]©ÛiÚ®ÑÛNÕÚ»UÛ«í:¤v»Wjí§lí£´í§k´vÎÙÚ§hí¡Û;*‰Øì«²v;ÕýWU;;Ø]…ÙNʮðì;+²ý5Ø]•v;±vWeÙ•Ø;ŽÊžãÝCÝä÷»W꺽Ð÷W¸÷/up÷åî½ÞëÝ=ÃܽÒÿ6^èÎÍ™æ Æfffu3uœ5}¯Ug3YÓ2gfÎÌÎgggLÖfu™šÎgVq˜Î&lÖjγ™©š³K:jûn¬ó3S5œ3™Ù¬Ë6k:g3Y¬æk5œ³¬ë4ÎŒë;2™³¬ëÆxÊñ¾Û¨gwjwÕÚ]Ý®×s¹å<žoW¨õ¥tèèt]+¥t«§IÐt+¥t—KÔz§ªz‡¨õz‡ªœ÷]yjó<ÞkËÏšy'šy<žG“ÍyN®Ï/+Éæ¼ž^|ÓÉ伞o'™y<žiÒGDét]+ èt_«ét.‡Jètt—IÒtéN“¡Ðè:K¢:N’èº.‡AÓ™Îs9×;œsîeÎçs¹Üã\×;šõ::‡C¡Ó¦¯Çê]ItN—J'K§EÑt«¡ÑÐt]+¢æ¹ÜÇ3Í9£œæœÜîkšçÍs¹ÓÌsŽsÍÍ9ÇíÏØ[z¹ÓŸá“ùë’úË“”åÊ9r®QÊ9\§%Èr®UÊä9S”räåÈr®NWŠã\Wˆq8Î.'Œq¸ŽkÎŽW!ʵ~UÆqŽ+Œ¸Î.+Äã8ñŽ'ÅÄãÆ=dåÉÊr¹S—'¥è=%é=•é==#ÓÑ^ž—¥=Ðô—¥=¥éz/CÒz^–¯Çê^—¥é/EéOJzž‘ëSŠã8®1Æqq\kŒã\kˆâ¸¸¸—¸×ââœg8Ün.'Æz®IÊýZÕéÕrŸ‚®U÷SæW"å\œ§"ärœ£”ä\©Ê9NNS”圮SÖçÎsssæœç5ÍÎ9ÜîiÍsN|ÜÎsœæsŽnu«o7¬éÐé]£¡Ó¡Òt]‹¤éNK¥ÑÐé.—IÑê½G¨õ^ªz‡©ê\yy<¯4ó^g›ÌóO7šóå=Gªz£ÕOQêz•ê^£Õoºõ/WEÓ¤èºN•Òèt::.‹Îæss9ó9¹ÜÇ5ÍÎæç9Ç71Î9Üëœç9§3™ët«¤é^³êR¾¢ú‘õS̹ó¹Î|œ¹£•ÊrŸšåÊääõ½].Ž•ÑÒtŽ—EÑÐéN“§C¢étº:.•Òé:]+££™ÍϘæs§+•Èr9S•ÊŽ\œ—'!Èå9\Ž3‰ÄãÆô=CÒz™«ïz§çyùÞkÎó^g™çû9æ¼ß¼/3Íy¼×æ¼üÏ3Îò¼¼§”|º¼§“ʼ+Éy<žPòÄñ<|^3Æœ8p¸8)Àápp¸' ‚p®ÀáÀpjúN „p\+ƒ„ÊÊʲ™L©’Ë*ÊÈÊd2²XؘËÆÆbcÌg®VVL†S%”Á‹,c€‡à%Q*Z¥Uã¥jÕšÎýJ½F!ª5VªU¨J£T*µZ­V©Tª•Z¥Vª•R¨•J®ñßw÷ó½wÓÕëa†…`zÌXÌf…ƒ„Áaa0¦ )„x^ ³X)x5šÃXÅ`­X­Y+F©TJ¯+[F¼<Xð¼'àx¾»‡uÜw˹Ý;¯[¾ï®ñß;ïW€ð¼/ x=X 0X0ÂÀÂa00°``°¯ÆXXÚý&¯«UxòõÁX¬•’³XkV¬V²V ÃYã‡8À8……‡©‹f63ˆÅcb±¬XÖ àXJÕjµj­V©V©Ç ÃY+-a¬%jÁXJÅb²]Ö ÁY¬µ’±X ÃX+ a+«-jÏ ðßwéx‡…áxaX0Á¦‰ƒ „ÀÂaa4˜±X±X±cX˜±1˜˜±±ÆbccLlLX0ÁaƒWß`aƒ‚Â``°˜a`4XÌX˜±±ÇŽ3ŒÇtdd1™dÈÊÈÉbÆÄÅ£%”ÈÊd2ed¬¬´p¸8' #ÇHñŽÁÂp\+ƒ…“Wñ™LŒ¬Œ¬†FL†FC&Q–S*ÊË,©“,¬¦TÊÁ¡Œ±hûY’bÇŒÇ6 ðx<.ñßUj­R­Tª UªµR©T ¡Tj•J©KÛÄV­ñ8a£ DÆcax+Áwîúïï»ã¾ïïwÕZ jµQ㕚Åf°Ö¬•«5’²‚°ïÞ:j­T* UjµZ¥VªZ¡U*µSŽ'€pàRè± ÀNÖk dªÕB¨UªÕ«TªUjµB¨j…R¨µB©UãÕPªÕj•wåPª%V«T*•B©Uª•R¨U©Tj‰UªR«U*•R­UªÕB«¾}¾¥yˆðoƒ}¾]ðoñ¾ã¦ü7ûôî;®éï{ýëÞ=÷¿Þ½ëßï=÷¼÷ÞóÞ÷¯ÝOÝ«Þõ—sºÝÎéÝ{ïTîîwwOx÷Ï}¾ ñ¾ ó¾]ðï”ß ¾7Ûä7ÆøwÆùwÍ-¶ø7Ïã…Tª•BªÕB©WÏšÖ•j•F©Tªv°õžÂz°X &0Á0°žÁáßÞ;ï_ðx<'­…£©“,²²22ÊÉ”jû¾¦K)’ÀÀà a…aƒ ƒ_XÊÉ‘–QÉ2¦FV61Œcc‰‹5cŽ+õde=g…Âáp2e2,²ÈÊɔʲdʬ¯[+‡Òêà¸G ÁÄàp.ƒ‚áÂáp¸\'Ë+&FS,–VE‘‘“(õ½n àáÂÊŒ¥•–E‘e’ÄljêË(Ée‘’ÄÆp€RÑ ÃÇxÀ¬V¬d­YJÕ¬5‡ÕxO à=f ÂÀÂÀ`aX,àx8—€p8Y¬…b±X+5‘+VJÊÖz–°VBÖ•&±Yk-`8éY¬5’°ŠÅb²V¬•«Y+!X¬5†²Vkàpðõ±˜ÓˆbX˜±11cXØÆ&#8ãaaajû¾¬/_VS!”dË*ÊʦV,iŠÅbX†3ÂÁ†…`¼àpà)ÀNð€¥b±X¬5«5–²5†³Uj‰ñ…¬•©}|@ÖkVZÅa¬ X¬V­Y¬5†±Y¬VR±Y¬VJ­Z¡TZµJ©Uª-Sâk+Y¬•¬5‚°5†²ÖB³X+ļ8 á`ÂÒb±0Õø½L,)…¡àðx<ÃÀðxZX)£,lF5‹†4c1±–5ŠÄahÆÇc11±¬LlXÖ5ŒÅ†ÀðàjφƒÆb±Ç Â0aV öÖîp?;X_e0˜ €œ²Õ¨…V¨Uj…PªµB¨B«Uªïï]Çr»ÎâwÓºwí_kÕ;»ŽåÝÜw+ºwNéwÎéÝÝi;éßw‡zïW}Þ5J¨U ©V¨J¥WâJÉX+VZ­XÒÀÁ`˜aêÆb±±±±,F,M_Õ=YYd²2eL}l™YY2ed™ †VU•dȲ²²d²2²²dee—©ÀáNà8 …ÁppYYd²dÈÊÉ“Ʊ,lXجqµ}.¨bÅ=V1‹f>¦S+##(Ë#,–L²YS&™Y&Y ƒ,­.¸.Á¡ãOÇÅâ^/ãx׉xž/ãâi4<ÿòò¼§•y/ñx§‰xž7ŒñVžCÊò^^Ty<¼%äò§‘y<Ÿµ//æ£òö‡˜Ñz^—¤z'¥èôz=/OIééOG ½-G¯±âââ\xÜN.5ÄqN.'/pá Âá#ÂpŽÂx@|G‘åyy¿ËÊ<¯"ò^§Ÿ›Íyùžtó<ÞcÍçæó¼Ï[Ò= Ðz='¡ézOHôyÞo1æóóž^QåyW—‹Æñ/âñxž/«Åp8.Rñ$¬VoƒÁáà¯ÀðtÂÓô«î±˜ÍL™,±bŌƱ˜ÌXØÌq£6,&¯²Á`00`°´bÅŒÆØX`a…aXL0˜XV€Á…† &–&&8ãŒÇqXÖ61Ž8ØÌXÌL `a^ùßÞ»Î÷{¾wÎçws»Wè:˺îÑwÝîû½¡áha„p8à'jÃV«U«Vªo÷ã¿ úow¡½O‰ßoðo·Ã¾ÞŽôÞ†õw¡½w¦÷z›ÝëÆ¿ ø»äßow®ôÞŽõ8Á¾}½xoxox›ÍàîÍÞïuºN9»MÚRñqí7`nÔÝî·KÆ ÑºÝ.ëtnƒr˹7(n]Îäw;ž2nÐn“q¸pîpn <0ÃL7 Ã0Ç pÇ pðÜ4Ã?a·8Á‡¶Ûm²m¶Ûm²m½—Ùã;döGÙ}“ÙOgÙöOgÙ=•ö_d8ɶ °{"{/²î½Ÿdö@öL,, Âp°œ Âpƒ Â0œ# Â0Œ,# Â0Œ%Â,#0‡ÂÂÂS ^7²žÈ{)ìžÈqöN0m—lØvÛglm°m±ì˜I„á8A………„á8F„a8F„áa8Nq}ž({!„8XFqQö@öCÙ)}ÜBqN)¶°m¶Ûgm¶vÎÛmÅ6æÝÛ›tã†áᎆa¸a‡‡†a¼cq¸ãn]˹ܻ—rnw']Ðñ·nìÝ®ïvnÓvñ“x›Ã»wa»Ý§7‹¼w›Çâw©½øó¾ßç|ï¾-öøß;Ó{½7®õ7†ì7añÄoGz;×z&õ ëñõõwŽóxnÓv³v¥â;½Ù»7a©^ù[¾0ïvî÷näãnSr—pîÆà7áÜnÀn <3 Ã0ÇŒ®àÜãŒÈnGrœ`Ý­ÒnCs¹pîÀ‡pa®‡†a¸xfÜÛí;Ü6ûwnmݹ·væßn›tÛŽÝ8Ƈ·6îÝÛ›t¥ÌíݸqÌ0É7¹7!¸7a†˜nÝÛ›}¸m͹·6ÛclÉÆÛØÛglm¶ØãmÃníöîݹ·vûwo¶M±ì{ǰ{úèz箺z﮹ë©ëúþ¿®úç¬zϬíWhlÍžÌ6{=›³Ùœdv‡ÚíM¨í]«µM©µ6¡µÚ»Eú›Ci´ “Ævk³ šìôÚmšqƒhñ¨mSjív»Sjm žÍâ›CfqGfñMl’ì–ÈÙ;#dqÝ™³ã;Gh†Ð8»^+Ɜꇪñ@õƒÖ=cÖ}SÕ=Qõ]©´ £³Ù-’-‘² –Ëd›-“ÄvFÉâ;3Ô}Dâ;#d'e²v['ˆ›7f .“g³Ù/PõM=3Ó}7ÓOÓôßL}?MôßIôý4ôƒÒ}#ÒKÒô½.¦úo õQ=GÔá»-“²ÙÉÙ#²C‡³Ùœ~#´6›4 žÌÙìÃflöhlÍ—©ê¨zž£ê<@ÙlŽ"ñ6ŠmhmÓhíi³ÙìÍšlÝžÍÙœ>m]¯ ᾯ OYõ½gÖ=b—ëõƒÖõYOUõ}SÕ=WÕU}Sjm]©µáÚ›]¯ÂzǬz©êú®×j›_‡Õ=SÕv¦×jmPÚ»Cá6§Âú§õ½^úÞ°pßæúϬz¯«µÚ½Øm[„ÚíM™³ã»M¡´6ˆlöFÉÙ;$øvNÈvFÈøxûC†mNµG††ÔÚ›M mg³Ù»>´vhlÆR¯Ä/ v»ChAÙ;!6NÉõ—¨ð͖ˇ³á›'dì–ÉÙÉÙqÝšlÍžÌ6cÄ6FÉÙÈ –ÈÙ-’z‰ê¢ziéúO¤¾—¤¤ž’zIé—¥é>‘épÏOÒOKÒIô_Dáœ?DGÑô}ÑôOGÐã§¢z!èú'¢z>è!Ã==ÑA<ðóÃÏØ›—‡ç†ÁØ#°v°5Úç\pÍi­ÖšÞk5šÃXšÀᦵֆ·ZkMn·†»\¼3ZkuˆkXk f°Ö:χZ´Ö†´uºÝn·Zëu kCâø¸f¿^ðÍ€khku¿šã\ks®r{ã¬u‰¬5a«un«TjƒUï§Uï©Õ{ÈjÀÕ†­Õꃂ!Õ: ÕjtÁ_sRêCRŸqÁpSÁ0SÜÁsRkæù¯š¾iæžiæ óSÍ|Ï0ó 9§á æiÀÓº~ i×NpÓéÍ>Ó‡Äiôá§SNšs…æa§á™æ'˜pžy¾aæ};§ >ŸNéôÿ§ápÓ‰§?—òþCÁ4îœtïÓ§™÷ñ §Óð^ y¾kÇ<çÎáj8ZI©5§RŽ£ÌóÌ<Ï1ãù¯šžkæ{‡šùžaæ>`{Í=ÃÎO8=/㦤åõ:“Rê}Ôㆺà˜î¸×éîžëî»Øšðׇ¹ññ×û¦¿^kÏw`ì6÷Mˆ|IçžžûÇžŸ±v;Þ ‹±Ø›c±×ëÝ~¼×žèëÍyî» ƒ°Øl>-°Øl=ÝŽÅ=Ðóüÿ=óýÓÐ=ˆôCÐ}blSc°6a°Øl`ì6Ã`›_­=ç[ñkbk5šÇÝu¦µÖ{¦´u¡­ÖëMjëi~ A­ÖšÝkî:ísÂá<'`ý~¸5Úà×Í`k a¬lÖº×â5º×[«ÕjµZ§ƒ«5f¯VpušÃXë5œmXpµz½Xêõz½^­Õ—Rju>w ÔÂÔšy§šyó3ÌM8iøO™æbœ'Íó<Ã…æžiÆ<ãÎ}ÃÜ N¤u!ÂN¤á`˜888. ‚`¸8&¤Ô†§QÂ5.§…©xN§R:“RjSRju<#…Æ:MXjPj½ÍY«Õ†¬Õº¾6°Öka5†¯W«ua«5x8)¨up=Ì0pSÁ|ãÎ|ãÎóƒÎó8ó¸<Ô¼JpC8¦¨ÕjœວUª5F¨Á)©Ôº“PjF£Šû‚&§Ü0WÜÁ0\‹ªxº£0LÁOpu&£‚}WÎ<çÎ<áøBj5 Ô:C¨àš“Rpp\Á)|¼A‚`†Û5GVjÎ «uf¯Û5‡·¬5†°öµŽ³Xë¬Õš³W«8 «Õº³U‚8:“SÆp}­V«UªMSªÔšBjP{ZHj_i0u:ƒæyŽœÓºqþGòCù'Ëò(ò|“É|“Éò<„ñÊÇÖ|”ò_!|"³Xò)ªñ¼³Ë|¿/Ëòü ò‚µf°#Ë<ž/’y>Hù>Iä<%|ƒÈ<„òÈxOmãøçã<ñƒ€xçXñÓÇóäù'’ÓÊãy^W•å>I¾ò¼—É<“È<€ñüsÇ<ã÷~xî˜ÓiƒM¦ÓoÏLé3¦ÓiƒM¦Ói´Æ˜wþ6˜ÓiM)¤tŽ‘Òi4†ÿJïÝ.—JšCºâitº3FðÃHÕÒA«¥ .‘Ѿ)â•M¢Ñ(xµJ¾&ûÅñoôF‹D|U]&“‰¤t|GHp(p&˜Ó:].”4¼Gˆ{^Ö™Ò§M¤}³G£=¯hÒ×µ¥>ÚøtžÙíé)¥öý³M¦Ói_oF=£ñྠàÖ|ð|ÁÐèJ®„«¡ÐšA Ð þ÷A½ÞšкÐh èMŸÏûßïƒ¾ï¸æýãþoªç³Þß÷ïß÷ï~›ó‹ýgxwáÞo»×½{Ã÷›Ó÷þïÝûCvî·_´âßí7ov÷¯õ~ŸÒnÍßêWê?Qúƒô~ƒ‰»ý_«ô¿§t~‡ôŸÏ¹Üþž1ºâ~´ýaú÷Gìý‡7Gëýfå7'íý¿µý›ŸÙúÍÉúÏÖîC ý|OÕ¸?Ùû?gì0ÏÙ·vç ýÇîÃý¼=Æà;¾ìÜ~ßÚ~ßÛûoìá˜oíý¿´ÃîÜ>í?iûÖpÏ×úðÿ_ëÃ?Q†«õ¨0ÿ_ëÃÃpßÚ˜°ý‡ëÛŸ¬ýN߸ýGêOÃú]¿êÛA¶Û|'»îû¿Øa‡ì0ÏÚa÷hwÀžós¹ïpîû¾.ÞÝ;goÓ¾›³éö};³Ýî{½ÜŸ·»{]‡eØv=ÑÇéý7mßqÛøàxàx¿žðÿnsoïxßw®xa÷¸g{‡ßwÝñ†8~óïgœ÷€{Þxð Ëž=÷=ž3Ç€nLö{=žÜn3ÎãßÏ™üùŸÏ góæƒ@h?žÏa˜z÷¶ï¼è:üþ{=žÛ&m Ð&ÛC¡Û> ຃?Ÿ=€- hM ì{cBhO`ð|Áö=ÏàžƒàûìÀþ‚x&|=Œþ{Ü3æ†h4 Ÿ3æ0Œ.àû>‚û/„‚a@ù߇ð‹<ø€áx€x€x#¾ù;ã ï°»þÿáçŸg>gÌ-…¡ #ÁÐßϹç¿;þÿ¿}ÇÜÂ3áŸ0´ ah0°“À=Ç=îüÞ|3ù÷?¶6΃l{™üÿ Ð{¹üùŸÏ™ýƃphtºgßuÜ:A¸÷4: ƒ@çÓ<™ìöxÏnùŸÜhsC¡áèt.„Ðrîxz ùžÏàÏgŒò`g·9þ3º3çºgŒöïwÆsæïvî³Ùã?`j߃5¬Íf³ZòÖ9¼ßbjûWðfœ×àso´f³A­=§±ÇiØêÌÖ¬à:§4p5]‘ƒšÁk`™ºÝŸgª?/å5FiÙ›ôü»ý_jv½«¾NØÔßv»îÙíŽÐß=§hvf°ü¦«‰Úö»þÛ´÷ùïj»AíÌ;>ÌìŒÑšÍf³N¤ì8;.¼ßuÉ×y¾k×ïzÿ;Î÷O;zæ“5Øö€oGÎóMçcÃ;DZ5c×ï¿x“üŸ‘:ãñàààq¼ëºî¹ü!» ü]¦ Ôw\jMO_©Ý®ï2n÷a¬{•Ønûw­Ý™¬ÓšÝ뵦k±{3™zó¯5™f°Ì¼<Îg¯àþ3[øÃñ»­nëñku½q×n“u×ë÷GÝ~#cøöî:íz~OÈ~Ms׆¸ëÌ<Ï_¯?'ä=½~»°Ûñ5ù“2fuw]×mµ½w]×{FÜëõºÓnv'cØ`†·°Õ{ª3:¬É™3?¨ìCÍ=a×êu&¥ìu)Øö;lӚͧ4àö'`ƒð=Ž``˜=ƒƒ™s?“ò|l˶Á0pNÀÁëý§Uïÿ†gò~OÉ©ëõ!‡©u'·‚æpG°ÁÃÍf³Y£5ÃÍj°pL³Üvn§ƒÁ3|7º3y³6fø&lÍšÃ7›Ö&°àœ<ÙÙ&ë6vGe®×³7¬÷õœ×ZvºÃòöFã²ì»#±Ü{éØšîÇpæœÑšìLË™ëöù“Y™Ö€pCZ{îg2jú×ïýÿ¾ê~ÿßMAÁëF£¬0úÃoÖÿZà˜?€Áu=o[ÖºƒR~üÀu»wð~°óS…Öõ«Öa½gXuY¨:ÍGXu‡Y·ë6ýkÖõ®§Î:ݾ£ð|'à/?àá?„ü?ƒQøÀj7‡S¨á~>~?Åø¿Âü]¼Þ:¾×ï\Ï_ù5ºÝï^k _a™Õ:£2jƒ{Øv®ÃƒØö;ÌÖ³xko6fÝogÙ™¾Ë²~ Þø×f÷ÚÍSª5Z­ï¶jŒæû}«þFûàνÇq¬íøÚÇ:ðŽç¹ã¸ÕïõaœíµnpÎp³™Ã9«íó†ø7Æ´ÞñMyÜšþç_¯ã÷&w;°;‡ÝÎÃÜwÜ{píø™Ã8g5ÙÎØüºísÙ™­Þ™¼Þõ×™½y›âq3no6ö]‘š3Zã5®Íf·º÷‰›Íïv;‰Ùö[Þ˲ؿÃ©Íæû/?7›Í™³²ì³[²Nˇ›ÍùýŸŸ›ÍîÓvþ_ËùOÊnÎð=#8ç7™ÀôùnÐí;C†ïNÓÒí7Žmôøç´íP7Û'9ñ¸l»ƒ‹6GsÜ÷9Üëß½ÏsܼseÅ3 g]žÍÎçv}ÎÏgÝÏr£=C¸«î•^+ÅÚ×Úþ`à_[ôw[=˜lÿ>É8îÉî“;ÅvFÈî;o·ö¸¯åìû?Iü¯¥èú'gè™§5Øö=`‡aØpúÿɰ?ð‰:Þ´àgY÷þù÷µá¯Ã>ÿ[[ï›°ø5Úç]Öõ½iÖ½gþø|xÿƯÞûÛºUïþŸúJ®Á×õFa3Ú®º¯S®êN§©Ö™ŠºÓªÌuAÔNo÷çOÓà»óíóWªê:‡‚u'SÔ˜& ‚`Ÿo|j½ïø V§Sÿ[ÇþOøÔ&£Îú÷¼ãÎóæðÞ}b{ÇÞÕq³ÿ7¾þ«ïꜬâq:ß„üo[æu‡™Ö|=o[¿?ç?‡Îü>wá~CøóøßÁø>Î;Îûß{OÿŸÉÿÏ$ñÿìÞá¦ûÏÞÞïšS¬ûûÉÖi~÷ýšM'ýèÝ×ÝwîœJš/øÿøûgÛ>ßW˜ñ¤ê~ê¹Õ9ÓøgP{ÁÓøg†tçÙû½Çû]3ÓGñ>×Ú<3ÂêÏÙõMáôÁ³6~ïñ÷6»WªÚm:¡ÕuGU´êΫªtÝOS¤ê¶A¤Ñu<§eíñ~ßÛÑýÏ·áý±ûoÿ~çÛð½3í‡SÔñ8œ·ÿ§ÿÞ7‡÷^†ÏüŸóá¾áÿïÝû¿tû§ð~é÷CÒþüÿÇü}ϹàŸsªÏñx¹ãÀ=óÕgº¼ñöú­ÿTïý?OÀêƒ0f=-÷SŸê}êtá˜Ì@êS@}¬ÿOÓ=7LgΘÝý¯µ»ôºsí}£‡èú;ΣÒzŽ :‹¨:Eáùü<ÁÃêsƒÐ>,ÇQáf꣨ê:Ž Þ|=9 é÷gÚO‡íx#Óôÿkëîôdû&Ä>¿×úîÀû€xù¼Øç¼ÝO± SÔ™Œöxê öµÏtý9ïgüxo3ÞïOŸz|ù¼zµö³æ|ð>×}ö5úÿ®}®q¾Æíû>¿ìýŸwõ÷yï÷á#ëïþùî+»úæÇìÄwgCöt‡éWöÿ´qú¾¬öº¾¯Äô7G¡ÕSèu~‡‹öÞ¬ñz“©þ=Sí=WŸâý½ÏÜ=Ð:³«ñûo«ñ=C©êzœÀkÝSïu%m‡m¹ñŸïuÇøŸÄêŽcÂ?‡ðwcÚô3ŒÆc1àš«ª:­ÏU êúœ3B»·3‡©êN§©4sªôz¾¯Ñêôƒ@è?CçýÍ·…Ôuà¾y˜<§c˜< t?³Äã¾¥ü6ýW¤W„hzŽ¡â§Q¡Ìf ÅÌf:}·QàõGQÓþ›¦:o²}‡\Uû?gìè:j¾ðtØyýw×ô烮÷þ¾àúÆ»ýÿ‡ûÕðµÿX0ÍJkvÑDô]CÐ÷ï~÷ÝDwßSêwß·V}M_Ôß~þ‹¢z.‹»÷vçÔ¥¥èµ¾î»½ú½ïÕ÷MgKÑ÷UöO¨÷‡Dkz>6ÛÒ÷ï·éz^ü>©ßý^”×ý_«¯×'ѽGÑw½yÞwŸ¿ÖýÏÕÖþÿß­*ëõú§ïª~ïÜwÏöÿ°·ìøoì~ÝwMÀ×ôÿ¼éŽï¬û_kX÷˜GÚ;Ì. ê:ƒZwš³ªêž«½{ÜÆ«1˜ïx]GN9ÓûÚûG®wÕŠ½K«ïêõx÷‡y˜«ì÷½ïzpϱö>Ç{ö~Åc÷êL.÷½Á;ãëa×úÛÞüÔý¯Ãïûÿ¯‚×Õg»¾ØÏàý¯¾Ô³õN”ÛRhsýÔè}΄ßê8çF|]IÒ>WìêúCãt]t]Óúz®|õÎyç³ÙïÀïzù÷¿O‡ƒôý|Ÿï;ÏçÞ÷‰ûÿ~=ÏzÜÿ­ôÍ_ïýçÓçÿróü÷²s¿Ï÷~íïóyóÖýÜùÝßwÐ÷QýÑ}OÔ~­QúOÃê'èý/Kêî:>:>‹ôôa¬ýrt]£ =¯ƒ þoóúšƒ¢ö÷]#ÒtÑzÏF Ð'ÀtAù|¿©ët]ëÚé3/˜ç«Ú0óØÿSý~¯Iù}ŽÓ¤xünÓ£Þô=Ÿ—åö‹½ö{m?KÑô}ü¿t}FáyXOoÐç8Û¿oÐó¾K…äúç=œçüwéý?¶Ó?OjîûÎv©Îó½Ç=îév}ËÜô¡£è4~¡Ïóç?ÏóÇ=¢øCGÎþ}è?F‹EùùÀüÞù¼_Ï_è›EÎó¼ï;ºú?DΟDÎüþlñs¼ ›ïp}EÛ}sƒ°í;O¥ïó¼îïa¤çùþtán¹ãž ‡;°Øsý·kÚn6KK¯}þ{µúG9óÃ7¥ù¹­/6|9¾s±ç9ÃØñ³Y¬×¯Ø•¾‰ô~Ž‘ëÎk¯æºÿ_ÄëοæðƒÅøì8Ñk¾ÏÑf¼Ns›×sçÿüž½þ|ßg®~~»´ç>~Œír©ô>‹ÎsŸÏœü»ó³ñOç™Ï~_ç±;NÑí8'kÚö¾jú§Ôè<3Ãè;ccôñí?ÏóîÇŸ;n'ŸÚîNØô3†sÐÿ÷ ø÷ÿ׉»íþ¯Õ>©Òô½(h½Œô:N“ÅŒßýCÐÎýNƒÏÓsç?Ïóüÿu¥úOI°èç}õ8üS¡èyþ}ÑóÛo¡¢Î¹ßa¢ú^þc¤;“¥Û»îw¶ØógÎ~wÎØì{=·6ovüß“Íó~Oiè{>ßÑÎg>ÑÛKé}/¥¶ú]¨}olVôKòæÝ¿7Íó;æ¿4ô¹£ÛôÃ7éž›TþGh/{OœÓýè9Í?Òõ=Cͪg{§ôߦvýs¡ýßPúºqz/ååts9ÛoÌçhöŸSM¤Òl+¥è¾žpèüo·éN;Òô•M©Ñíz=©Òt~OIñt§GÑ›,ègL+ýO# êô½/IÒl÷û>“´éxuæýñ>‡_Îuç®üߘâëuy\©âêô\ǸvœÉÌhžgÅ|_šx‡3Øì7žgy×eòùSh»Gt.õþgÂ57æüßáü9½¯þü^œÍm~†°þΫ.e¸^dÚõû·3×þ0ÐõÙ_Å´Õþ/Å«ð²ù|?ÇásÂ˸zÃgXÊ ¦¯®þ¼¯ðËx9~³W™ëþqªÕ9­¥noÄùüÙÍ†Äæþqüy¯ã¸ñš9Ÿ{šþz.˲> ß·üôY¿lìõÿiÚi?ŸkÚöœI¼ÒöÇAôûMv¶èiwº.íø\/|÷úCMÒžÑÅc¢ñº?¹+w^ÿóþÿ¼ŸÌyŸýÿ?‘õ¿?Öô?ÛÐ?Ýò?×…ïôÑ÷<ùÜç{ƒÜç/=Ûáé|þ{Ï4ÜOÛ£èúKé}£4ØAô¡ÜùÿCçés¦w_Üüß›ó~n“àÒé~w4s>¿5ÍsZL¯Àrý¿oÛë»|§o®Êvü¿_ëeŒ·m¯í}ÞgµÓsG«›æ´[g±Ñs^é½Þì}ÞÏçŸ9óÏ?{¦Ós=‡_Ío9­ŽÇšÞ‡`o?!ÍŸ;®Ñèô|Ç]Ìè´\Ï3Öëý_Á»æyž°æGcÍuœÆuÌè»~_^ewæS]ü2¦W­Êår¾¯[Ÿ žÞïϽÞü^ïßûåW¬{î·+¬ü_¿õáÊ÷Ü¿/Þþ,-_­ßv¬õ¶Þ¶K­ë{ßß•ýçáËe¿~_Ûåÿv®¯ãÆeòæYü=ß¿Œ2ùÜ}ü¾£ÖóC¾Óþ/ÃøO/-Æã÷¯âü_‹çÈæù¾ø<£˜?ãi¸âg²æ[ðåͯ˜9ƒ/ŸwÝoËçòçÿ™æS-–?ï/—Ëd÷ùL¡û/îÉm>îív¹]¯ÞÞåOßËòæï÷›-ß/Þòü¾S&##û¸¿óñÜU˜ø³îz®íîòy,vd¸<1åäŽïùz_ËÒï{ÞóƒÌzZ~cïó0,·Ðô>ÿ{Í×5ÿg5–òü§„n¿ï¾Ën¾÷yÞe²ÛGÛæ9Œ¶W휿ö~¼§“öÏ·“Éd?9ÕõfUù«ypý=ÿ²; Ž{ù½_Wîq´»ûûëëëãóÿs÷:¬oá>¢¢ ¢ý{$Ä=pDÄ"=#¨éN•IÀþÏìzQ ((6åÝL?þÛæ³ùóh}¯l–§û»rÑÔ»÷ÁðŠçÎûX…¥ˆÄœF!1ƒˆ¤6²Ó‚±šÌÛlšÀmwN°›.š³ÖPÚªl‘µºê:Ò¥´‘֖ºÂ]eTëU]jØëUl¨Ø–Áµ:ÑÖN³d‘µ° ©Ö*uºÕ[R›%:b:ÒN¶Á:Äj£iSbdN´‘Öë*›U"ºÊ-¢Ž²®´mX6©[#`m#­'Z‚ëÖ)ÖWY.°]eµ-¡uªë)6VÔbVÊ®°M‰6‚®Œî«;».ìêêË«.«mE6ªëS­$u¡[Å[C­ ju„ë6Mªj©Ö…]jغ§Z©ÖTëJmjjKdk¬“jUÖ]b­¤ëQÖJ—Ĥ¥5DŸJ¤Õ(«àÕ_øäøäøÇÇD#)DD>FÇi’I$‘"2NH’HÞãªO & z¹º²~ã«f&ÚÏËòò %*N"–#vÐÜ嬤ÑÓ¦[‰6´ãvÛYdÚÚÖµ¶hÆ9ÛE›Í³¤8mYÉŒ³2Ë ¶Ãa¦n)Y6âÎ†ÆÆâN!Ûh¶Ù“i¸Õmkm˜“–6ŒÜ¸HˆÚ·3N[k:lgm¡­ŽÚÈ²Ž¦ŒÖ8)nÄAœ\we¡Ñ#nÝ·ki¦µ,°mÇXwhvåÈqÍ«¥£vŽL´¸’Ý“ ­Ù¥¥e³p£ œëmÙ‹c°m•±œÍ6ݶJ6ìáÑY-ºÎÊÚ·qvÚŽ¨º:)‹ “€Ûut5ºÈvØM«r Œ¬›vÛ§mµ£©#»q»6Û6mÝŠwjnÛY­¶„lKYÔPÍÛm†lËv›–éͬZ[n:h´v™ÚÛ4¶±%´ÇhÖˆã#,Š-šÎFfn(¬ë+M‹dW%™­¶ÝΙÍdɰ,Ã,Ói&ÜÚjØ’Ósu±"ˆîÛ-e˜Ô̬Y»1sµ°É¬æY°Ú.Ø›mEnq¶DŒÄˆ–3vblm»j+KY¶ËrÓm›M›6ãpÔÍš±š%­ÍÛ,9»Q!§––Mƒ,¬°™5™fÖ¬«',­6Ög6Û·6¸ÈÂm¶1¬ë3Rm“[J;,M·76Û4±f³„˜ÓX’b9kfÓkhÖ–¶ë"Ê´Ž2mIh ,»p¢Fæ’;ˆÎŒ†Ôm«-²²Ý(â8í¬]Û[›vÛNëNí8!¶­³m¬Ö%˜Í tnµµiÚÚr¶ÒÛ krÍ mͶ;Smš6ܘm5ÇMbÓ¸¢ätµ–ÚÛaËZȦÆÒënÑ™§gfÍk‚ƒK(ãjÍ›[1m¶í­’Ê&ÄØšÄÕ´•±Žc•¹µ›­pÍ‹ki¦³‰2ËÑÃlÎÛn&ëM·5ÎÙ†´Û›–Y­¦²Ý•´Å„…gnŠPšmŽÖ"Ãkm,1&í¶–ÜLÖQmškm2Ù˜V͉[n[m±ke˜ 9«6ÚÓ!ÎÖV­»nÛ5¶™Û‹,ÌcbÖ'cfËX$­ní³m3[‘¬’ZÙ-9­Ùm¦†µ°‘¬˜“MÙ­µ¶±m­Ú´í1šYµšÖØ­´m’ÆÚdÓm«MÚÇm&¡À¶hŽe§K m6ÊÊX›NÓLi[$±µa”3ZÛŒÓ$;JÎÓnLÍmÎÆc²k ‹ZÉ‹,cLpY;4ìÛ[9jγrÌIÍnM·k6ÊDÚkm­Í¸›RݸæÙmaÍDí¶kcdÖH1Û6]‹hBl-&íkdˆvÖÛfÅ´u¶»LYÓY«vÛY±-¶ÒM·hœÊóƒ¢:dvÚ&è[´Häjk&mÚY,bt–nÌ·kœn4ZͤanZMi‹YfË6i›X\4´bRc+f¶ÜKmŽl˜km¹Ûjf¶¶[f›’M¬·2ÛYldÅ­fkXÛ6”èÅÄͶÒÓvÖe±sÖkljvØ4Ü!³fÚM´iÍÛiÙ-¶nÈÑnmÆÍ0Ͷ%„Ën´J4ŬÜÙ«nm™&Úͧj5–ɹ#;E³c†€“;ZÛvÚ[›[¶[­­ŒÌ›Dínµ±­™­™¶Í»VVkf¶Ú³¶JlËZ7 Øìæ³m°ÎbLÌËrÉšgmkmJm5bÜf8é˜C$ŽÉ2Û쵬³fÜݰnÛkLå¶šµ›§£­ÁjÃ6¤­mÚcmÙÈÖu‹v-3µµ­[³l‘µ¶Öibam¢k´QØ“5 É''%¶rÆe¶I€³µº i¦Ýœ¦¦ÉÌv²k[v±¹³m-‚‹[2!µ‹[hÔÁe¶Mjm6Ä,“m§[M£³vJ2Íi¤Û†Ý±¶Ùe°´Îl‡bYÖÎÓnÖÌÚÚsMµ¹¶m¸¶¶knØ$c±mšÛ¶˜d‹1¨ÃZ„ÚÖmmµµcf­i»V“\Ùfí[Kn[D¶ìÍ`ÛmËm¦MÈ­·;›vÖ9¶š'3Nɶ¶Ìm˜¦#6±k9šÊÜÝ©bɶ‹f¶‹0í©¥›[mµ–X§N6ái8³Y¢ÐÛ[[vË[5”§mkeiÙµ¢Ý¬Œ›k6›e«M; lØæ¶Ö°î³h͸¬æÖ-²ÖÚc·4l·cV™b›‹Û¶šÍhÉÛ”³i°ÑlãkIµ‘ØÚͳZÖ¶Kmkmm¬Ý§,ÚÚ,:m›L²Û!lÉÛ-šÆV–m»VÚ¶Û¶Ã6å›2m¶d’Ûi“v³[.Ó9-Œ«6ŒµŽÖÖ·kmlµ‚Û –Ù9m‘¶Èsmš³Kv[S™nGrÛH(Í-³mmº&é–’ÐnÄs´Ym’ͬÙ3`mÖÚÓµ6m˜Ùnk96kL–ÙÂÜì››c6ì“L“6™‘¶°lͳ0Í%­­‹[ÆìbkZÚ͉“¶ÖÆiN,¶Ñm̰e¥©È¶íK´F-Ëk6LØÓL7KbÒÂÍm’vÈLmËnm¬³-ÙhÛk“¬í‰Û[i³˜mk[¬6³9·6¦±·;i¬;²ÛlÌ´-NÚ5­µ†m&¶§µ¶Ii(I°-ÀÚËlìÛl3-£YlÚ[-3h™9 knÚZ‰Ûs!m ¶ M™-ãn1k…¹´ÚÜÆ¶Ø0Z5³‘”vãœí•³6­¦§mÓ;#Y­lÖ¶Ú¶,Ém•µ£!lÖ‹4ܳGi¶XcVm¸ÖÙkf¶fÛh8&J5µ±m›-­m¬±˜í›%‘„È m¶IDµ‹Yb–Ã\'Z)°­¤]b©Ö’®µQ´)µ ë$Ù&Èuª­¨6ÙP­ºÉ+­"ÚI:Ò©ÖRºÒS¬Öu‘d$l‚u‘VÂ+¬£au®²’ëTºë¢© RdfRdša™fRa˜&RYRQIFRQ–YemRÔg s9=±9+/t[ÎLz³Ÿ7æ”˯ú©N‚Ž%3æð)ªªSP©PD¨¥A**-E©r…F S)©M¦QDåÍÉ-̱Âñ"å6B&+¯Õúœ„P (#*}{^µã^…Ò@À@Ý B·Q117AtÝJ]]]2\ÓóLÆä½¬œÆC!EÄóª‹kl”©!H¥H¥J’Ò¤™F#6fû=Ózê‰<}ާ…x/™+ÓzkÒKÁ,À>HØTjB¡P* B¥F™É´î ………†autNO<üìJ((B« ©–ãÄÄ1¼HD1C ,» ]\d p·o-`´½®UUZ뒊וÊW ]5Úæ±¬ÖÖ}]¬µµ­v³®ëëë|÷ÏZ ²í.é—W¶øó€ˆ8ñ\x8ñBÅCàÖ5­jÖ5­f³\Öú-–ÄØ6l›/áP6D7$@Eguv‘°¶>}‰ŽFEQþüz„,{„*B„(B¤) #Â0 $A qpÜ\·#%åæI³#x÷=Sñ)"ŸàûN·]u›=­:ÖËoä^EÞg|íˆÒ¯àó®ŠÎë.òÎîˆîìμêó·´{×ü6ÌPhæÒ­«z$ V ˆmi±_uü½·ç½îÍη/Ó{g[•-¡/½ª;  㻊ï"Ë3 «LæÆçac;YÚtÞßWß—îeølòÞhËóÚ¼ùÝ6ó½ë^]ß§w^]óåוY^]|îmuçwZÜiA)ZÅ©‚çŽ5[Ò ÇD·ùšQ 7æ§Ä, Ÿ‚,r çó×_|è”*'‹ †A1 pxröç·ÛQçYåyyÖRëòó¹ùêŒÅ\‰o4¨·S^Mm-~}¨Q>™¦F×Ç §É·ÑÔØ„螉é¼Ù¯Ó¹é‰š„½[øé‹ú dÁhÅjé"1~â‡Á8vtwâ÷·™ÔYv~ÞÞ_:ÊöÖú&"°ÖÔ–‰1~jk´†Np9:$ 4Ĩ¡z*æûxYJkn<ìQHÒt¹jÆ Z\9bØñÍ•4ŦYbšh˜¥V'4‘TÔ[TY^U¢]pQéK® bÕ¬F[*°f#Ú4ôL‰ìZJl….î%ztÝ[ÏŽ3~°õÕÝ´Ï6¾6¦ƒP†Fšƒø×µé“SËSRH(kM»Q|-F•ÆŠÓU‹7x‡¬àùÓù WϤ<:ÞBM’œþ/×*¸üsy­©¦£P><_šÁQ'ÍŠ&›9<üFh¬ôZ|¯O/3dÍ›k¹»ò;§òßs¯ kC’9õÑOᵬüÛDFÏ€¡ƒÕ‘ÆòI øVtù­x]×›«_¥Mýñóïƒ<›÷ךC¾÷§®ø§!tyNÖVžÀz0N¹.|‰ Þ¶ GçŸ ô.Í”WgUµÑÞˆ7‘«¬pNsö½#ž»Äštzú~m·bqÙ9û¥Ç»»·µpûìÞû½®žwüG|ôâ zDzx‘ã6ͬ–­V|ô“ÍmÉè—ÈÚm*ñKÂñÃÅxž/ÅQ c‹\H”Æ&0Lf1ÿK“Å''ÉÓi¶í6™E´òm­‡/yDˆ ËÀƒ@¬ ÈÀ@°([,4Ò ˆˆ ‰bˆ¦DA9 lE±€˜²àM’¾¢‹æŸ/‘§’À¾¾/¯Ž\±Aø©øÜE.@jýgUðü? ø«WÖ(¯_,*ùWʾYò”Kq q·¶BØ-­‹kfÚÔ[VÑ¿/̘[ÛÛ–ÆQ¶¶µµm, ø¾—–¯Qy R¤¨©¯BÙ>e|²¾d›&É6M•±÷£b® æ¹+‚ø ñȬ$0xe/à‚þó+wNìûO±ù¿™ù¿7â„ö2“e&ʬÕI­*f"Ö¡e’šµI¦ª5-TŸû «lÚ–Ùm«hmM²A‘³BRÌ•• I#S$É!¢’ËÉ„¤²¼Ñ5¦K$dyŒ‘>JŒ¯5tL¨N P¤ Q¤©¥Mú¿¬úÏ{:eµllÚ¯aG±DÉ0Œªš©Šš+ÊšTÕL‰€Â4C,í:9Š( ¡h( ÑžåB€  ¹)·%F¢5•˜¬^2éN™•(¹)Ÿ˜ûO‘ñžßð¿5íüb=tZ&%”µKÕVEª™Eª­”`5’È2†UaZSJ´M%’²–¥j«EjV’Å2–¥dZ# ĵUŠ4JÑM)¨©5*MVá»u Ësqn›¡+*Ê¡n ÄÈÌ“K*ÊDED[±ÇnIn[—‘‘\^6±ÇwvßF€È-!V*),E1L’šK-TÐ+"Å*Âa*Ò*´Œ¤¬ªÊ’µ*­TdUb1T´«–TÒE•5h2$Õ-%« A•Q¢Ô#PjUj¦R­CI,¾)VÚ¶ÆÙ¶[o˜ÛKlÚ¶¦Õµ¶›b@$[fYIVض¶hh¾'.'žt¸¸¸škl {ËÊ2ÒsAöŸãÈõä,¥”-TÕTÅ5Ja5DÊ­`1CJh£Rd£R²¡¨´Ch™Rj«JCA5K µV(²–RY&I5 EhšT°Z’²Lе¥ PHƒ#@B…@П‚ h‚„¢Š ‚€(J(¡ ( (n˺vÊwU)ÝSJ2!DóÏ4¢¤ÀªÒA) RE¤ˆ‘¢ òÝ(*jE•j”É0UFTÔ£*iC5SAaZ•”eFQbšU”d˜ ©…¢²Y”Ô™FRÈiVC_Žû_ŽWÇFúß[ÓzÞß½¾ß7­íôß-æñ¼Þ““„ìÓ3­¯(_I|`[„ƹ"ây'ŽU´–¡€Âe&‰…2-Rµ PÁû TS#¡F¨ÕTÊ2 HÊ Z‹¤Bž×À÷ÿu«jÙ±ý.í"ÎþﳯN.Ͻk¹íÕþù󳨮Èê8տ©wʾY~•yÜ]ýJù~×ãñVÖŠ ŸfÖ-ͦûÞöÝûo(§ËóÝݼ¼ë¿N³¨öÝ{7Ie—YY×moo=ggž_¹Õ÷Ûô¿>vöó}÷¾DeeÛ~{ÂŽ¼â‚Îèî;«ñ‡Uó:èê¢Lº4S}^¶#Žë €ÉЭû»´<*i¸#Zƒ¯‰¢kÓ¦ù÷ÏzœñlmµQ‘>xÒECÔ×¹¬ÐB5É¥ §ÒBè:ƒþÊ,¾r7Gš@— ª³DÄæthiãGÉ&šÝ`YxÇcÍZ¼?åoŽS uÚ7‚ˆ•¥ú½Ñ6m•ZLë Š*Q€”ùÎÕ¼ìuƒBcLý­P£øXà¤`µUò©ó·óSü:m™/¶URy@_n­¿Ê¶0¶*š‡†œê>ˆ÷ïÚ£¯æê¿^ÅÍ_·åÞsÍlâÀÚØ¢ô”É^pÓüFþæs÷ƽ»;Ÿˆ^wuuSÍÿOÇyü;CfÕÂkÒv÷ö‡W™¸ÛQ3áXïÏ«Ó>ûã‹¡t÷ViÑÙœŸÍ‘ض©Î+<§jñ“Ì@‘ŠvÒµÄÚKç«Z«Ï4ÞÏ^¿ºë߯{R!ïô¥6²›PØfmËel6¶ÙY¡²Ì6¬ÖÉ›lca›6Í­›m1¬ÖÖµmlmúÛ"*d=h¥¢hKJЖƒ YU”V© ¬«U+A€²Ii2E¢Ò©ª± U&WÊðO©èUãÅàð—³âñx^ïõâ|/È×µ|'žW–N[üLqŒÄã1Æ5ÆãLw,Ø[T©^Q‘¼n24ÅĪ3 ª“Q„Z©¤L–‚h1Q Ê†#),AƒH2 Ô´¥¤b-Kh²‹PÔ¦¢ÔL“P´š‘”Ô­SJ0ZUŠÅY,+*¤ŠRa&A™˜™&&Sã‰302²’²ƒ(ʲÊŒ¬²„’2dDE váo%¼0à £ukd`œ€#IP¤Ò¤ªÒ@2-F‘еTÁ5 Qj5%¤Â¬¦Š±Lª1¥aFT­ЬVB4¥dR£(¦ƒQSK!L“T©Ÿ_í¯nG·=±ŒˆG1©¶i# HÈ2!"H¤lvrI$…”‘‘ÅcRà(`7öp—1â)1•QŠÒ#JÒQª5Haj*ÄÀ­F¤­K*-K Z«R¦& j™RjšBÑiI”L,„ÊaVSRMÂi#A¢&¤4© š¾4|t¾2øËã>8ùŸñ„LKD°‰Àöd   q£ipßä"ûÇÞüZßK_æZâØ(ÕKP†©Z„5!©FSJŒŒ(Éj¤ÂÉSK ZLÕ4’Õ1 ÐF&ˆ5&¢¬VJ­V*¬ HabC JVQ©U…¨ Œ•ZŒ¤1Z ÏiIe@ /Ç‚``ù%xÙ0)e $$*BBBÂAavWôÊû›’Á°‹&ÓÀÉ’¾4žÅQiZ ÒÊ¥¤Ô¡¨d¡‰’†U¨&&%„²™bµ j1d5 ´XR´¯ï_Ž:¤ê.¿Ð¶ÿOÿü|ÿe½ìÿçßÅ× úa`ªÄÕT±4R²˜TµV$¬V‰-+TU”ÕBÁŠ+TÂK|zô‡¤/MzW¤{•zG¦=/O¦zgÍô½7¦%‚5 —7Õ1·WÍ…Õ…õõJ•*]ØXAR§1!È€¨Ò“P,MJ-MZBÉiJjš‰4šŠ5 h²(Ôj¢d±ÉSJ &‘,”0e#*F†¨¬–P25Tµ1”ÔU©¤F&g×ÓÛn{kÛlc4ŒHØØÂ2í$d‘¹ ¶A»»˜šbÍ´ ¡žêêŠ2yb‹â€A¤HElbÔU’ÄV©ªK#J––TZ,*°ÕTÊÔKK´5Qje E¥SQ‰MK™-ÈÑF†¥MT5L‰¡š*ÒÔ«OˆA‘!|r%‰‰!!a…!„…a HHa‚ ì…!´‡*GC!q+-¹o”ž×!MCŠ´2+RY I©,‘¤ÕV†”jX†ªÔ²VF”e2«C*ie LQ‰„ehV!’ÕFš¨Ô²«SPj5)©eS_#â‡Éºƒä¾I)©MøôŦS P¨@¨•¨!P•¢Z¶ábX¥ˆØ…­………B¥¥‚XT.Ã#Ìe'FŠS#*YZª´2‹I„µMÕj+Q’ZA¡©V†¥ZšRʵA‘ 5)¡¢Z–•5TÉ•L˜‹"`Õ&«J™C)ªâWÈ@ hJJ (R€¡¡'IÉIBRRY[¢fk‰ä$¿¹Ë1Ásls0Þ[å¯É#EP¤ Å‘4°Œ–¥j2VFUidZ™++)`ÒX²¦&%¨Âej-KIª4?I$”øž±[ö—ÁÞ×µÓ®/YŽ¬Î¼´¼²½ýÿì>zv=öë¼îëλ:îó «ø+éÝÝáÑÝ_ÁÝYEþ*ºùÝyß³IfK&`|2‹à¶4»”˜y"‘(žïÍãæûpöòï3ª Š¿^•Ý¿µ¯ÅåÝôëøžuÇ–p ¼ñ 3lJ Œ0ɧ\Á2“KA´‚ŒÍÙ1p¸ÌTÌÊ£ºý;½f¼ºëåÕy_¥ß’ùÝø´¼þ/×Þ·íÊÛw‘ß+(ëÛ| È†ìd…@«jÔÕBTáB bù^h·º$¡˜™[I8ÑZLÈï“õ¾WÛ]›î÷»<²²³¿æÞ˜¯óÙš.C8Mÿ"AûTý9¥ÑILE)ÚØª?”ýµ}ùí éøßëäÑ/ …D|j|± ÞækϦâÓcü‘`ks¶2€©±¥'Þ°f1Ñämo8 φ1)t•6”2þÏ@¢ËÏ=]3ÈTâ6–­,Y°Á¼]ÖQ6Ö.ªüto÷4Íîµ|“ÒZûªfmØœ±A’5 Ãc(¶X¤mpJÛi„{*"ãhS¢d<·m™µÍË·ÅÔb¬ˆM ¦¥ƒqÔH¤l?%«cùÊ!FصíWåu°»#Ç"foTÈêk@þZl[vº˜ÏnÕ¨Í{ýšžºÏ×YºóÞÞ(ù©©íôUoç¾nåný>N^GH¯·wìk—j¶¡×­3âÕ·MX; ºøª÷¯õI©Þ|lú}åÊ`Ú×°ÖW0Bþ"hGúÉæ—•k¾£œÛ½}í¯WW‘G¼ôùÉëÈE·Â‘nׯ¹=P¦óîŸÜ/x=në!£u½ÛuÝ-.»ôΚ‹¯…zC¤7®C> DL0Va²úþïÖ÷¤J½î¨ Mª“jÙ&j«hÚ­¨ÚQµ³b+ »¹"â“’s¢.è‹©(pˆ£º §¾^ú–, MU•¤ieZ¬†V]xðÙ^‡Š¼SÄx¼/Úøäµð'Á^×´½«Ú|ù(ŸÌe…K¢Ââà¸,K ëÛdjJR¤ƒHZLµ2¬SKK_H©“¥45YZŒSU¤ÁªÒjš­ µ- KQƒ+ SUªdÒjÑbÒµ5Uj-U5[‰_¿n“p›“srÜ|†P¥*JÊ’£(J’Œ¬¬²òÖT•”e–y$‘Ù’KÌVâ[ÆbòæŠ/éä®oJš!H)eª1‚É©5bY4,eMZšš²,­ ´L4L2Œ5F¬S&)¬†h™e2eY«DÌ«MKF•™M5ZYMj±¢Ë)¬Lj4Êjae‘«SK- 2´dk&5Z–¯Ž/ì}…ìeì¥ì^ÉìO›ócØö@S)”ÚkMi­2pmÉç·méÓ)ÓÄÐÍ,•÷-÷oñ>øŠÉ¥š²ÔƬaŒ5bÕ1c,i­e†­YhÍ5jÓVe¬e¬l0ÕjÕ¬³Ö™i–4Ë,ÃL±Œ­¦´5©mM2|O…òúU^Øöåí½¹ížÚöèŒ"" ‰ˆ"'ûDµHÖ4ŒŠHaº¯´ºµûwο)öþßæ½»ì¾'ØÉðñ±²Í+4³VdÚ6¦Õ´–Öɱµ-¥´[FŲ›V`Ö#døiö_ I±)‘!IÿÄ" ˆˆ"b‰ˆ˜‹Ä´#-E$‘´´&¼-h (œù”ù¿÷/Êü¿–ûoŽù«hFÉVÂ÷‘ï30Ùl› ëgÈKä#B P…ÐЇȠ„¡¢€(  ¡¡J(-ŠtÊyÜLó“Ê2Ú^—·Ñ$SJm µKj#Ú|:¯†Uðφ|9ðÁ ÀÀ00À@A tF?ybÂÂÂè‚ý²²²ÉYW‚% € RH€>E‹ÂB„+B°°„ ,6LDDAkzIWZÏ€årôŒ¾"eùA¥Èeù E'ã qº-Ê7-Öéºn­ËqºÝ»rÝ[’YBVÆd™˜ ’kÔº Ò‹ºtÂtí¨m²å»”2—×Öœ½ø_䌖FÀÁc°l°ÀKð½ÛÅŸM‹ÄñO ÃÁáâñ^>WÊ>B‚ú2Ù"þ‰Ò|ŒÄܼ¹Ie–öTz1UE>f2¿z@¢þe—ô:ÃŽïßü7[ÍÙ“Y¯éõï;¤ââ+ñŸ§_â:¯Ï·Uø»½íÅÝyÕq]qÕz]yæuó¾Y•¥ß:ÒŸ¶ó¼yïu­÷¨·»pÞÚö?O{}­í³só_zûÛ¨$¯nò?6_n¬®ùïnâ*ýîý.ïo¯~å_ÁߎÙ÷¯^¦Å͹,ߦ÷}ï&Ù=o{{^÷®J+;:ÿj¿iWã»ßškw~*;åw~+:¾^QÝÕóåyÜwoµåù:ù_ŸzÛozû}ñöü•“Öêþ²Û[ؽï= CˆxØ‚´6¥vp®ÖÔbƒ×«Z…×õ„Z,ÑQ–¦á A[bÅ5¨…“lLYL»d­c11+_î*(fHïíµvê'ZLm»?UŠþ=œBÁsáÏ‘0?Qi!h  M~žm/Ê©á‹Ìy§Ýô@±4`ÛC;Þši“lHB¢¥æÌÕ^C}f&1%º4kM3f‹÷åß—Œ¦søO‚bH­Iç"¶}o¬C-+ß­ãë_+Dý+ÚÒÛ^¹1Çê­…ŒÆÏ€||¦ÃÍÚ䈌PM!s‘T 6ȶÊe`Ú„iâá ‘›UUžt|Õœ vn¹6Îzjm³_çX#á¥}&65ãkÝé¢Û)+ow`ÞF D¤pÈ2äѧ-*¨L‚8Ä"åº{—rÛ:ò“ÍN’6—ò’còx×~)çÁ>U`1gì-_{ú>|ï¨%ã þDø~»DÇ=Xˆé’<·í¼½¯˜“ÚÍöïyµ~o×»áLçÆð2˜›ÊäÆÛ1˜¡?,\·ff‰ì,ùó”(ñ3͇¤¢gß?Uà_µžtµí‘ýxиòÝ?>¸ûÛ¯áÛ<çžDx^ƒÞb=é7#N`¸@ð­šÞîþl4ÆWçn'¶þÝšCDðΞ¹RÔD¥M4(ØÅ¤ŸšÔüæ 3‰‹Í¯Ëòwåâ‰y²h¤cÔ1GHb ?‰u?³Õ8êúÙðZdƒKðGï7S¤4B‘ÄlÇÄßÑ„th‚%_vnžn~¢ý…±½6&Ó²/Òså_ ywU/Ù8=²ª Û#é3M"Ûê³~p*K¢/Ñ<™VÛý•©¯O“E§ÈþpíØy¥,‚áïÇ謊|²|½^ßÞÑ´ÛÖߎ‡Ï5Àaz^î§o”éãÞÖ?›ÉyÂ.ºªíoŸDç½n¿“±èî|ó_~=çÜÞ°Z„ÍNÔ ·àŽv&ýM—µî·³ì{¯y"¨üM%l¥6¢Ùm)±Y›6©µ6£e²¦bÚÛm›VÔP§½›Û^àð/àñ'‹Áðk½¥ðg¿öiðkë£þœ‘ɧ'ŠqF.ÂÁº[›,Õ‘cb[¶V-ŽWšry;R×™°T¼J2”ñÁõüR¼SÂðxž °Á?¦À[°KÀ°ÒÆÄ-BÅÿéjY6VVVCdÚ¶V%…auu`XXXsZtèºY¤L@¤Â̫ȤÉ10Í2Ì$ÓLL¥ÊLM4ÓÓ3333$íÍ\ÐPPd/Z(À.®Kše7˜¹©q`Š`¯™é«Ò¯LôÐô—¥zcÓMéž“Òz}1bÊ ƒR¡P*T¦ÑEóÍ3’'/›€ÉL_I—†¼@µüïà ²Ÿ66VÁõ”ØÙù-•³e²›p·B…€ -ØKr(­á-Șa„¶¼m-27Œ¶Îák2ª•ʳ(„É23,³3,Àÿòd˜˜˜f €&IA–VP””%e$³%–Kùe/f2_”³Ï}?52‡ø!wH T…)R•#© ­êßVòßÛÆùoðÞg ç'g¶ ‚‹Æ™N™C@СlQxSž[ɰ2å¯îŽDÀÈΈ¤ãÈPªÐ4 P 4!EC@/Ê ¢€œžrî‡ý(*]ÙwveÙ)v]à`Ë%ÝÝôÓ ‰0 c¦a‚a˜¦Y™éf–dþ¶b`&‰‚òe” $$ É.Û»²î‰ò]D¥ÌÅüÓM4 €òÈn ÐÝ–ênÕºn›Éî[©¸Ýº@d-‚YBÙ&¶œg&f/‹rkä’22;tŽñ#´’êHÀD‡‹rFF„aÆ1ƒÆÆÆÆ¶‹ H’HH²H²…¤²’ÊYYY]%œ—77%ì·ø¶ß!UI„ BªZ'eHýtܶâM·lF›'ïÚóšLWòkûK¿´¦–kÝåÅé™×g~í}öú÷ÞôÎùWewö½¸ïÖE6ºì¨«¾U~—]åEÝåÝe—wéÕ•Ý?ZùQ|ë±bŠ·€±AC„P*Eü…gíííûmèû{}û·‰òÒNÀí›3¯½çß^w™%ÛnΖÖ~ËÎó÷:νmÑ×~{eç¶ÏÔ¼â¼÷¼½¯cÍšÔÛ¶‰¯ox—šöÜuð¤iZó ÖTÝ­B‹.²fQEø®=õ÷»ºËÓº‚®÷Û¢ë2‰Q`áTÿ+d$þy&Æ«Çc„ ¡‘ /äÏäe›ëÐØ mˆß‘CG£èÛ´h³»ë™®îì|­Îßj¿ã~Û½/•úöÎ:é8…XÅš%&|xñu“ìyðOu¨¤o€¢“ö!|ú¨rwí[¶óœ;8­4?|¤M…œ/Ó‘¹6¹´$jE6ªiÏ›ÖøR¶,ƒnÉü¬]¾Œ†_¯äøÚÈqû…T_=j/ÁM²-­[Ôå×7ü¤3…±H5‘¶µOØJ¤Û;Hâšýñû—.¨2ÙK+Ìú{‹ð;CDÑš0Do%´¨67þSÒy´§ðýÿ6¿¿o—öO}ýæò1/ØJ¦_²}U<4Û pÚã0tÈ7õ`©›‘¦HÒ‡…D¯ÖÊÇ_ÆšòE›[ ¶ëh`› K}Òc5F‚A8?Þn««¥%08â 3ÄóÅðØ5Bú%½bø?ƒ^~_*­vsdaÍ<æÐbly¢‚'ÆöïÖ’~½ö×âûÍíÛí-ûµ£§­­oÆÞß›)T™N׫žHÁ Lêà—Ÿ·ôþ^4÷ï!õ½CÁ ú@û^êzx[ñʪ×Êìöè¸GG6YDþþóµ=4u®ÕI›ò©OomƒwÇò?’8¡²’ôˆ4ÔÔú¯šóN'B¯|¼µÑÚ¾½ïDk‡íõ~Û„ò³«‚¨<·×£ÉÒB.þ«˜ní |D(ßNo…ýßïýÔu¸ãÿïøí(Ù{cÛJö«ÚžÔöÓÛ{G´ZʸÐ9#•åLsʼ¨cžM1¸Óâñ˜Ì“iihZ_—öÙbùå1”·/î%U D%•IA%~2„¬£*Ê’ôÊJlË0“M1-‘+,$„…‘+)+$qÇ}}rß_K{—È_åÙ•åy` ™–d&R`f’e™ Ÿéþ¤È“¤èN“ƒ;:³¡pQq@P\ä÷ÌäérÜÌÌe †êiC˜#."TÄDD¤H±JDÄ‘ ! BB0„) 0¥±l°9h XmbµŠÖ(mŽbÔÊ–ÖÜßÎ.'pÀ'IÂugFp'é·Z ((¡ ¡¢‚†Š-íÀ¦S-î‹ Š‰ñþ;ã|_‹òþÙùŸ‰ðÅ}GÓëjú†¶¦ÃbØõ‚¦->gË…aR!V…HT„!HV†þà„„a`¯ñm`/NP‚ÚÚ+F8í-/I­^bÖä³¾‘Uc®L@2 "² ò‘ ##B661cHÈãKD´BVYY(˜®¯¹–;ûøK‹ˆòEÏ5t_dæY•[¹ÁvyÀœqgByÒvé’Д"O34¡)(K))u5Ü쬲Ë%¤QZA€@d¡P¿­O• *ò*£B‰ À$Y¬ Y°¥™$.ôò¸¼‰|ßc¦./®n..‚|•¦ˆ´Äi‚šSiLi­:irÔê¦ÒšÚar dó·% @Ï<¡)s$—2IutOxQ,—ù3UJ箺»§]Mþeý;Žâïñ]ý•ü:;økÞÏkÏsmY]ÖuIÝͺ컫÷«¬ùÑÝüy]q×^uÜg]Å×_½ßÁWÎïÇâëË :þ÷·¬Þvv*cÀ*mxÀøÊUmŠ.©4¢]·ËÔEÝåøó¨öö÷VyuçteÙÄü߯´’eï{ݳñ{ÛãQ°LÍ2Gˆ2_îuÓëáT,m®³¾o·w_{ww—[óww¾µYßmŠ›µ„æ ´jmÞ¶­S$‘ó».Œï;¼ŽöÞÖ¬ëm¶æ¾¶Æmš%H>1¢5Óc><ÑJ߆`iåxЄ€æëzo÷-ßH—Ùø‹?KÞ´_:8­±g&Û[D)‚h{½j7H—Ž5 Ó?²9èÖ šTõr<]µÍ£˜ÈäIB žê¯bŠQþ|Ùœ.Báä­h­ v)y~|²æMk{Nu-ÔÖ03öæ p6º63ÂLDŽj2Dšå­ZœÈØ9/æ¥ýÍg¹HÏ•üðÍ?´/sÊŒ±·Š6ÓAQ9gÙÑjÔ/íykÊÛvaÏ%ýݯ~@]$ÆTCQÇ"&ÞÚ­H7UޏìSæ½ðédPœãAâ‹J«[æ»Z=éw•ŠÄ©vø^4^k•RŽÆãŒÊP“ûnïç7p 4OZƒ9Hæ@‚6…£4«MjÆÄÄ´Òx¸Sʸ3Àaû7ðI›÷b.I§Ë²´×ÑÑ~ܹێ=“>F$C{µQ›ZkS×½@‚&|iÎD™”7Ñ}º@£Q?zB‰§ÚþÔ´û}9½-o1X7d’Y`&(>c_ÕšŒÑ†aØÓŸ¹?Tý Æh°GÕ¿–ÏGGɵ¬ªN©Á46·~Æzoœòꉒ¾]ÎÈtEœ(ÅãSvyë)ަØuäObÑnýÍ©Eó\6!ô÷ðV/Á1Ëj=çîéw‰÷b§HGƒÑÄÛkõ-»]†‘në[üºÞ}ŸW·¹\1ÄÕ_7^Å©†_—nÎmü´.X†9#Zí+RLt²øe!“c%ß—»TîµOƒ5uS¾?{ÏòðýT.¾áðÍ:—y]Äùð´JûµU¦>]m#8¦±ŽÏíy“µTVß’[±µÛ»´^øà›~ù)èª ©"Bi‰´š'¢ð¯4¤éòÙ?ÌVf,K3ÿÐÅ m,ѱ-¨Ù¥´Û;ˆë“¸î 98î %6,Ók`¨§ÖQ)¤Ÿ‰<^ÃÅxŸL™²×¸ öñ©c,È€á£4-Ø!QNWän[’Û®/g-Ìç’iÉ1i@è…RÆPÔ2°I/YK”¥‰²ç@Pê}¶(i˧3àã\L¨þh¶~Æ|wþݪa+1›";{c}&8g_ Pý8õ,9 hu…áN[áðSû{`ïØUõr šgU¶iR•eTÖùVƒìÙþ‹…­ö€çËh{ÁIèt¥g KÄa}Z ŸYç¼I&¡jü‹ò}“QIüÁåéÜô†œYäó—8@´°‹xóË6íu.°ÊÍÖ7•MªD†išÉ A¢c‡–ä}Ëjx `¾Þ¥ƒy¢›í³¹Û£ëŽÊ¥YWK”Ë^©ÀÀÀŸéUjú¹VÄS¡›A¶„5Ol…Ü´9ÖF`Ó'Ë1Ì·Ôc"gÇ÷'3·&U­Vf­&6†’söò :à~cX´×s«JÍÏV·¨a&|NÖ1¶´Øº êEǘc~!9”üܨ’Kb¾y}'lJ¢À7Îv)ô“ \'°E—wóÍ,ÊZñÈ'š8RYÞåX3¦Êycå•$XäûNdì«êü­ ™öù [o,TwöÀ»byùLƒl]+–%ØZ³û¼¦§ÃëÅq*ÈBÎ*BÒ‘EpŽ4! Çi“²“Ù_?Uç—¬ž£Ÿ9Þ€uQŒ‚²Þâ²¢ÀŽ>Õ®Iy5ºí+”“ÔµúºêÚ¦Ò°§órS¢I˜‡yÅPÕãðZòТ¬],2ïG r‘jÌàr7Íà@07J˜WÅqH¸ ÍW´Ã¢…” ”e¼&gd¼‚…P €’á.<¾ŸÃIìBá¥9 ÞÇOÜ‰Ûø€@ˆk 1'5„!F|ìƒE"ø€œ¥4ØCe ‚Îv_èß™Er؆R˜×H®øHˆ0àAEߘn$ëIù¾9VMd¥u„D”eð2ó3©Àæ´¢ñÃ!@#ÚÍ€ƒíY«%VÆPK’<¬\Ç\ñÉ•êÉJ­»éf×Ýöï¶­‹·Ófê¾ Ï—ö^¦1Zù)(ÀK«³¦˜qw~¨T@w#JA+ªŠÎ …íHO¦ÆÖ¨O–`­*_ TØÁê„&ÀBqv«‚¸ žn€h90âÝS"¸ ™|3¸"Š#)H€D¡Aï"PLœ fPt1,jê"CÖšÙôqZPe@jÄ‘úö&@™¨‘|F—A( LøKPËý; 娢!Bk äLc§3nFí8ª_©«VbûøÔ:EÉÈ\ TŸÝ¶dM…îv^*ÓëýÄ*üöÆÔ¨C;ô5Gç±3ëšÞ‘ò§¬^‚ªN=¬ù?4íé[µ=Ü¥qr“!B|AYµÜ’Äã-õˆ1c5’À&æî‘ xdÌ–Fp|W§Î YINøàóÂjê8ÂÌ‹:‰>‰’† Aã!µmW1 îuæh˜*œ¼g’£d1‚@þQb«“T^28dŒ„- c °Â%øÎ¤{F€!¢¢ èÐÉÌ„Mi4@ei-©8Õ­K(b¦ka#!ª ÂˆêÊ‚fƒ-½J„Ô5ôèÕ&:XDé¨ÉmíübÍ:Þóª4ÁžV H¼c“2Xæk«•Äèœ ß^>ŒCVai ÝLH&_ÙÂМž ­r£0ØoJáÞ﯒W^æp>´»ÀnΛQÝöÂ#{^J–9 ²¹ÔḲ(sŒ¥BH³D!úp•¬_Ò:=÷•ªÚd’ ÔÝJÜ$N’ÊH@MsIøÀÌž¸_íÌ›pt%T 7ò‡]¥HDP©Ì€ÄüG½ŠBà: $Q¶§nÀRfw åDL0.h$.EñP]†UÌÂYñ$í™ÔìÜ‹aA¤¦ÖÉE µ2Üäõ* êk-_jF­ìÌBaë¨*VRð¯{W‚µi|ÌÚPe3QIdRü9ù%©p ¸T X^Æ™Y%pb¶\‡P6,,Çíy¼1•§mu¯K¢áÎEïVŒ,ñ©\ÔAtA¡˜…-»hÓÒ Ëé¤E‡sÚ$v‰ Š~Œq·ˆ‘‰wó¸HX>ñ„IÏ•ƒªšº‚‘T¡Š!¡e‡ ¸ðHÈ¢Œ’æFr@ñŸd­üò‰ÓV:,mÀ€Àd¬˜±ÐÀÀÆw7‰ æ' üSX`B0þ!cQ¶ˆ Aô™[Úf6`ðÊcpÏ-)ƒM¥y!æR0TED:eÔ]JbF#ô’㶨T²ÌWÆÃA¶†(ZìM1ži¶ W&#.ÓM;RéjÌîÊO‘ùý)¬ÅYˤÔ-o]4fP ¡Mç…= %$n¾ÛOßËõ¥Zqß8qúË€LOX>Üõ|Íí>Í\Gü&'&¦¶ .׳<•„4#g0†Æl¹½/mñ)?±ZÒé’/ƒ°¨SÍ‚õ mšxÄ(þÁfÿÛŸó ¬ÖL ÃA¯jïÍ&[Å.£WQ„QcQA6™ÑCÙµåx¬†GPBÀŒÐÿ®$#° ÒXFW£Kâ•f2©qæÀÌÆƒc¶ !>”êÜŽy¡… ¦¬5š „ð*œ Hž ÇI0GfЉ%VUdæŒÆ÷°Îóû7]g…œJ«JÁ‹ä'žijç°úb±[Ç÷SæK§¨º[¥»¾ñºÌ–õ¾ \¥B³ö;KJ·û‹éÕ‡ÜAö`Hrý0îàìC:?+6^™Î·‚嫵—´Sá.†;¢•^S„á¹+wLof"ä¥B¥dS‡Æ}.NM<È^ " B5„µ\P†âBr.}IðT”²R‚_ÊDé^…ÌfFD*X‘ E€\JÅ2ãÕqQ !™ˆ a~jðo–ùkß­±–(¿oY’LIY ¢ãÇêò¨ßÔ7¡Î›8œžhÉ-§ÒÆ"Ö´Rj‰b¶W*<•2‹LÒi?‘ 2 Y)‹¨a²±—(ô©s›,zGÓ8ߣ? ÇŠMg"W¹äp¥¢IÄËßÏÞXë]´ —ÀÀbRb,ˆZ·âw;HÅçÇ;rE3_äPq+e+F¡ÏÎæßS„‚'ñT+RQ‚‰æ& ßidÄ@fä> q,X”*p‚(&N)XþÕQ“"c ¾ qÆJ_Ëü(H "ýó;×Òl¢ñCÿmážšAyK‡$ÀÈd01ëf­™”UÝšÖ_<æ9 ¤¸Ì Þ׬ØhvšÓ± _ ¹ûvŦ‡üqv´w°ÛÌf%Ò î³»¤5 ëÎÆx­ü)IYš­`¤ûˤys¿kb•¡o+”ý‰ÚÉ…úÃ{϶‡õŽšî·É9į9“Oh´ñÛUõJ‹ýujJBÀ¬l˜XûWÛ‘]+Bm‰ uL(Ô·¨d[? WÙ›ÞO¤V“Žº˜Ì¨1îî@”—)Ø xXh%2 Þ’PI3EJÐi)D–Œ³›IîUBú²y90Ci*“”ÌXíYÔJ B4ŒÕÕ½bx)!P»2P& b“ZHäÇf©¸ù{y³ V‡wÉJô*Lè Fi˜]ÿ·GÏÆ²ˆ*øƒ-}N¶©|ù ãZ$æÞüÖÔ$2»üœšp’®ñNO€A¹[ÕHiꌯj‡0÷m“%¢YÜŸGJÛÚσjý‡«R·ùäŒQë±YÒ0;.²,zÝ jXp\QœT¾vþ“r?”þŠÒµ|ÎLÕRËG˜þ•L$v‡D°¶$úWÈð4¥aLŽL%rA·Ù…B¸Ï5:@šÒ°Œv”Œ&¨2@¥ö@¡5V9ã8´ì$âT¡Í’+Wc¸EäÂ3l%J$ D¢‘øÒÖSqÙn¨Cùs”´âDÖ’$xðÖUY@ÓU+VÏ>P-‘l\­‡fSBfAFÁQµÊ¤‚¿ßQ 7i k]w¿<6K8S©QC|§¡F.Ob¨pMf Ì÷‹¹#å Ùue²ÎGy=šúU>â»/µŸ‡žKâµÉ³›;N}H‰çy9¿9Ê6bàû´Â|·Í+b¥ÊÌ õ/5i7ŠÍÙ~*pSΑâÒHùC1&¡—¾Éäƒs€4+˜r/ýM‘>I[S{›çYÐN äÃ%"$­òm©y¬îvH­¬K”±ÁášIYP†]ºC¹› êÇ)»‰‘ŽÉTÄd%:¤¯Ô¢¨ÁûÈG33¥’Ñ@±y/R¹ 0JUÉ($÷Ô“nܵ5œR:û°P~ô¶i—S Uµ®¬R™!hgœ¼²^wU)ÌAïXFÁ^Å6È Á[¤¥xL@¬a}šÀ‚^e-©€V†#Ëœ…˜ àËSŸ&?ÙHà²\ZL[Â_"3y4œd¬î/q[ò5jÅdØù¯#-ÑVÀ]â˜L˜gê—® ò_uœŠŠR+±¬‹«²z¿YõjÈ=l´Üµà.¯5µ!Vááìù×…:é¨J×ÑCÓßÉ“g­ŠÚj'›PË[ ç(j6HºV•›SZÚ²óÓJY¾¤Í*æÞ馶‚™AÚMŸ>%f™´ÿ¥gD´ˆA‘¡ÐøKVƧ8ˆ†âXt0Ê…î–Ì;;@Ä‚æ°@f|CÕ˜Ðè+^Z´…„]Oûhù!¹mŽŠôg®çf™ æçµ½«P0Š]”‚Ûë£PÚN=7­è7ôV£n¼I—RJ‡Ø!R¤²¾/uoÖ¨—T•ëôe‡XÏeîøã[×ZNÌO—˦wÛ7^Ä4DÝhemðs$@ÑÖ*^7á }2ñÓUú0 ÙW³né{;„ñåʯñE:0Ìœ ˆeœÉJ&fBƒÑ-¢hIL‰QDÐÞò5Cµ!AÅæeýDûs³ PLƒZÉÑö·µ>”’2<–šE:ÎÇB‰9†íJ=…\/—U‰É§ßGÍŒ­µ"ž.•>Lš'+TÁ¶w¿;^Ãô¨‡÷Ôío\oͯk;A-Iõ´Ì¸x­õ¾¬FÊ[ÀîŠ×jU@øT`†r‘'¢çò&¢¼ÀÕôßÌò›ÔF{Í~p+Jiõ,*ÿNYjL;$ٔĈÔÖUK Á5 :s›©¤‰ ´P2€ ÜÀ{6;âDˆ-öí¿†² Nkf ¥ÈÔªZ¶/ëóŒp—Z¼yï{<ž¬†© aëºÕõëZ;^Jò*$˜ŠÖ»Uc'N<é¡‚9Ô-Dؼ—-­ÎyðyÂËý‰˜%Ñ“¥ƒã [á`¦`8Å×…€0ó]`T.ë=Èg~("ÌŽmQ E-!R¤êõ½£}È„B;H£3 ²*"Ð3¡Ç#sÜÞé6Õà,Ÿ:vÒOëUE§dtuAÇÒ4Ü&†º·G H/½­Çû/„3•'ô¾:ÌβŒ¦KÕ¡Ì{ÚIŠ%{Œ&öÔóO»ôßß÷Ÿ©&\qß3»{Š`~î 3´êSMQu»«ö¾¨Ö‘” ¡?¦;fñ´©|,^äª-B “!7"ë|û—ÂVLM&–8ÉtsLË`I†´3ša‚'až,Ãk”¦qO¹›­2{Ü"!$ˆôS;ìíÎM/tI þçwv<ø=ðÏ•c§(Õl:LZŸlé44¨§Wç”pk|D¤}£KdÒãe¶X™cx`–IM‡¨¹Ò˜¸d6 ÛêÞ-R¹€ªµVuÞÂ’íâ©jê0MÖ|üRÖêbäÂl$¢zFÙƒ¤„iY¬…@e×Üš”H v̰ÃíXµþ–„Ìä2ûÎ~áôš¶°{tìÚ øÕ Švvk]ªÜÓ†R–q,³!ãÓ_öˆ”[b£y=:]JuÕhoîÄy¹œôÓyYÔ&pbÓØàÔ«*>—ϳ út(r;ÅœÝKU<õVª¹ŠsVµˆo ŸS;Ðͦè¡¡j¦žØ•>vNÁ`mºb5ª|+™pX–øFî$I¹VŠö•}k"^@ÝdýÙV/M,- ¹ží"`˜ˆœÉu=8‹Øšxj¥z***4BÅ€Á©J'EzD˜ù“•̤BPrX”XÈæ.#C–æ½WM|\ËZ³¡*D‰.v¼Íñ«i&bsÞxØ\~NÁ ÷¾šù׳9Ï9>w\­u?‘”Ñ9øòÖ>:\%ïÖ¨#­É*UN£ý»Õ–…‘{3=,ìM—¼ˆ]Ÿ# "ç3ƒ’Ö¡’¹â³Û(¾~H’àª"uë"¡(:¬Ô,½•ÍŒª7:Ò¨lo9üßFÖ…ªÅ%-_9Ë(±/©ŸŽ©º¯}}mh8þǽjOˆçŸPÐÌç–=¹J†ö°¦ýÛJU2ViÓ#Œ*2(íå,¥h*º€† C—È…E¦X}Zl¥*[…½ü¾#|z· JpÔ“ ºµjïe®å&•y)ûh[úzŸwà©®ÄUàc[^ˆ}l°XW]Hó7)MGg)D$ÉL‹S!k¬á« è@$@1+*¨íf“S@`ùvÉMÅñÀX-1,¡ ÈV“ë'%åZÌr¿ôf™Kº7>É¥>’w§8Ÿ3OPBdfš}Ñ£ZrÅ>÷UÚ~iÌî²Ê1ãÎB·HÓ¶?޵a¯Æ>…˜.¶þ`Ì€µ¥úæÏ™`oÆ瞎ë'Ê-£ü¸³åÈÈÇû6Ï¢ná—?°cÚÐz øZ´¼¼d’~Έöéê¸Zb …ÎZàÔlŸÁLI<}²RyÄ‚r»°êª¨ù3ÅzÈ à®ì»r6³Ì¥óŒ1ƒ™›Ý:ïvŒOÔs:ÝѲN²‹\ƒX/sƒòÈä(»:oÝBR1$N tÌË@\^R<Ï3/løÌÀ(_7‹·96´Ä’\ØÄبEŸ{>´/ØQLjföÇí±.\/ų'¹}jô'“ï<ãO%ëBÒT¥žÓÚT@†øš:ó?-öWëÈ"Ä ‘ƒ o$Ö›sÝK¾0Å}fëf¶6ÈH ɨŸ5å\ù›Óñj}æì?]qÉyÙš•xÖ¼%à›£ëâ=žO“ˆÕ78^[ÁZ‹ ë°‹ÙˆFµ<4°pÇeõ %ÓêŒa;ÜìL†|YrŒÑêKÜž¥µt½Ü•/õ›vlå)š•§ãâêIÛPƒ F¿Ï¨¦è9ø4+Œ2°hßhü&Jdõ8kBÌØd5ê†$ü’©s[êÖ´ô,¤B£ª‡Ò+r µnî +”ÔYÓÄn¥É·UŽÌcL$è·@m­ë4ìe“q8 žŽâ=ÍQZ’^+]#®Pk‰ÅJ_w;¶ª¿‹>ïokU%k¾¬Iñg\®ŒÈë«ó%—ß°tþÓýòÔ²`ó¹ë™Jðq.ÍOìhõåp³Ë‹vâÞ¡K$¦1¿š ˆ‰ŠÆ‰BærbÖ¢tºÞµnB';w¹¼]Z$Û.HìÈÒ¾¹‡‘.x½Ó˜m$çom鳉H£ìúóï>ÅB²òBã@–\Ñã>Ý2•åâK ߆{y mš|Ì¥épÚ{›lÈóØù¹<ÑXQ´›ØÅ¢¼^.Wç_^(^ís6èf'_¾·ÈþµÐä ԿǵC{ìݾ:H&|@*Sœ„ ¿*W]ÜP:åtSµ%_ŽðPîˆqºõ[Ýuœ¡-Á&”å³âìÞ£Ï_<œ/¬ o× Æ¼:>Îå¬îÁ)pþ.Õû|ç gÎ"r.[AªøéÚ!ëÜn9q'œÎ²R/ŠSÖψ‘Ç{O#¼uüë]<ç-VCnÆ×)D®ó®»t¯Xµîc—º°Yá×rΧ<Ö·u‚ô¼K¿u•ÊZ²æúýŸ%ôÙ3ÙÞÛ‡5˜´ËކÒ5·µ÷.ó‹ fuþ¾]ów–ã¶_¤rÑN÷úýµMs_Z|´M ŒJ—¾×5ÛòÙO”„GDp×gñmdòÐ6’l@–q­¶³¡¶'Š1ÏË`: Wwª>'ô‹\õznÚ óë:â:÷=rW€¥Žš´csúˆ;9Ÿt¾ëö¸¾YÄïGïy—'ì¹–'ÒEW#pL}YóùL³òº^Y-}sÁû2“Ê OƒWÒôDWÃò”Üš¯}B•QšQ™Tb¾Åµ”¶fžyÅ9ÇvÍ1N\ç>';hyâ’™ý‰J¥ÛPÇ¡›$ª?^•‘«ÛÛšK u–¸a:•UÖ碉ZšȈª±jÚ@mQÒ¤V³¢Þ¥ˆ5Z[Çl8êûµ '5Í ŠÊ€‹¦£C ÌØ«kL†m(ÜòÕ¼)o-=Bôš4ÆG{6¬†ÐPµøåd‡¥öø:æÏKT4,OiàÌš² eF±é•­Êƒµ-F½+§Ö<;½~^¯=ÎÙ¥~Û¼þKÍ¥ #-Óšâ'ß.-™Sà« Û—³)ô¦Øè1",êXšÆGíK#Ÿ¾ &õcæ!†Ò«âƒªÂˆYßT…¥…!Ø¡Ü!dΩ!ç¹Q•ý—ƼøãE? .sÛáo~°©÷kU[Ùç°DÀNù;©ã¹nÒÅW†äN'ذ^¯—´ìº(Pñ|vßvXãîÓýô• Ñ_ #Ÿd§ñPüØ:™WÓ QìòA•7oDÈ-)RBL ÐŠˆu¬íH8;ç§:a‚R­Æ3%{œâ»;Ö§ Ô¥ÛùßßhŒ8Ÿ,J}Ì”yI© À~Þýöí„heâžî‡]ç ØÆF¢»êËï vV™FóòÃÑxJ&aqÚ 2lñ·1˜Pé3Æ©Él`Ç5U9:‰LÎÐf£@tI&6·£8Ëç UP= *¡  XÎùsÒ¼¾)2‹Ïˆž~Ã=¾ï^xjtÎÔ1ˆ‘{4¦AéÔò½/o{îèÙž«œ[Z:º·eÚÝF¤ºF®——>Š?X+õ×±…:I¦Df}•÷ s;`ENŸ~” ¼_m²‹ˆS‚ ʸbÜå*(8—¶V§Ú’"¾T6c*Õ+¢Pƒ+ ‘Ü6ê^$ÖM”€Dœ¤ªîCâ+ ·r9ÅíϰB/o£IÕß$ðõbÔʘml©:IqÉVQJÑÔhìßÏ7•ù >eM1MŽº‡"§9¶§BY ,âwæZîXú‘,Oœf¾ÐÑ©êvXXžóoœ;j„ÄÍÈài$™ LJÐ’¦çz”.äþİ?P”â Õ ^’ƒ£sM°i¦™³Nç)" ÅFŠÓ4¥'-VæÀ _éåóB˜‡¨ÒÓ±Týö×zõnî¯ñá}èÈV%!%Í‹ ˜ËªT³Ðî3î8:o°YkÚŸ^Õ¾4;Š93ä˜êÉ‹# p±Pམ˜èpkœ1Ý@‰ëIµVH%6ùÝ”å4Á#÷þ1NC|íu>Á͈çöX »{Ò¬fãÆê ‹[Vuâ,6’Vä•<}žïìù¢^û ä·”³ˆ5^Ü~*üÃrš…–­¾ö*Ã=çO*JTâ®X~&)}¡ȯýg Pn¬@Ñ eX„[¢˜¢-Ÿs‡\u4 ¨:yƒ(I7;xh7Rõ·?§0¥¨—Z0*ZÈA{ Ê$â+;2²K[úiÑQP¿;¬«Åƒ¾FLØxbX²ÞŸ{7ÌÜ-WAåVk:ÎbÑ{vÔZÿ'ñKÞÓüw7tàe œÖðº:B6úÕþåy«¥»)ë0Ž^·Ž³\)å]²¬…a Zê\RiÐÉ,•{—„ÜoiÚ¢E‰™ê’_åpsœÑ¯¢©m¥fw­þ›KfÒ´Þ‚"–,FK9ÄØ$¾IˆH^B7_”wØZjܸáÀ“Ig4¿ÿgkÚ”„kñÍçKv¸ÖRuïÚ÷ÕÅ3GšKx®SGƒþÅK¸sœàâD× 5D+vñ\p³íà†-‰ïg‘¦IiÈÍ_–co…`ا̬N¤n•®¤ÕX± ÆÙUñ[2ã°—©t©•øuèÆžRµýÁæiïŠÛ§eÉ«‚µWeŸžÑ‚¶tþõgS¹‡œ€þéÿVWœ–¬A×1{êKs ÿTÉ~Ï96ÖJsƒÒ–B côÉD­&Y°@¸BB#"|HjuTd,öW-ßs<î©ÉÂÖóyÚüg:û<ØpE¡ï<ý¶=b‘¸m2|Û¾ŠcÝy³9ãù‹¬@pÍN쎌ÄÀr‚?Fäø`ÀµÔ”¤"¥#»´íˆÌ9¹ÿe<¦© ãa9ßéO"^†`2/›½Þ>û¥®sA޸ŭvž¹óæþêôôµcûÚÒÒú¾›c÷/δâÄÊCjmexú†±¹¸a÷ó‰ÞD90¡Nù@»ž@&j@h *–ún`ƒÃ{ô̾!9ÉT(´%º†a¡gAnÇ$Â+~ âEV HÊe*‰×ž…¿Pžä$¬/.\6HžZ÷š)•‰’WôX&Óø~DäÔ-¾ª,ƒ‡Ñ¿=ßKUæ1KS‰$¤øß3uŸ õÏkXìƒYRÙc³ù¤ò×µÚÿlt'ÕÊÕBæþL Õhc@.ßÓ=¤N¡žRÁFOYf>g¶ÇÕÁÂ÷ê!>;ƒRÝsÏ|õ§e䎿‡æ ¥DDƒ5ž–SÍ pœ½§ˆ¯´/<Õõýdê:¿½¢ßkpRZ$ùdàØ±„bÕ¥ò­ŸT»‹ß>YÛ²UÌn¿Æ ª¹ô¥ô{îvJA\N×Íçâc©—“?}7G'Àjƒë«!Qð×WαØjPx™üIXóýIbü_Q*jæªiMüD%s0¶/Yt¢=,ûgòC¦/Lºaþ¢KÜW¥o.ñcÚò\FeÄ¡²íJNL0Sù¥Þ[qê̽@Þ'z÷u³Ç§ Ìæ¹h–yÆ ÷™}mÕ{*­}PWÚ]é¶}êØÏª¹”÷¤/v5»ÅnÐB¥ÎÛâö½Œ×‰¹O]“ñŠ|£ûP$º«QœJÒ~_Æ`“!í_çlå´}œªËcOIL¤‰š‡>…œÄ§F¿ôj¶ž·Êw}`~ùýì|³œ¹hÔÓ ÔàâZ_ëUÐx{ÔÅ}NŒƒB}ŸHƒ†é”’U’W¹X¬4Nu͈ã­éJ[69y7ðgaÏ>žØiØ/rÍgãjîþv‚ÏCáŸÚnùëp]}T®Öµ“ýn„ï–¤áz3‘g¯‘“æØ9Ž­{vhý/z y{C„þW)ÊѰ¯<'Š«ô~òÊéDà©göóŒüø{fSªEO R‡0ž«ms¡Qü;¼êýoµ…oKb@vþ&§·»b4Gý™c:©²FöZïÈ:o”7‚aŸÈ"„äãá]v¹‰cƒôõN¨ '÷”KÆÚyB*Wgl{äpðöÃa£áÀŽK^F_¡ŒÜ9Öž2-É$ñ/RWMR˯nÕûSì\ãžJÓÚßÑf£wÒ¿Ð5RÚ23EAC|Ã7 ®ÔŠñsÊáãÔ僥ä“óœíOïw_&onD»p#Þ¨ÖkºmØÁŒgh§8~ •=›VÛCäòÔ üœ‚tî·öY÷ÛãMÄ‘g²À¿½‚ô©À©}kA·/ǻیŒš…-ß´¼¨ìùaÕªcø`¥YDè´¤ëˆFËk⮳9{_¨Êå4E¾7iˆÆƒÙã‘Dœíb”û{Õœ÷/y˜¦o>Õ–Ñ @2 .û ÂðõBÖ_)ðÇm1ùuKãç|UHIe±\ÖHƒ0©yÉØO틵Š]”¾®;k_w÷¾æ—©*ËÅPª@Åö¦NÐ]T<"o”-¥u‘ \K/²ÝÑ*Z¯6/ÙD–ãÙwT3&tïQžº•–Ô>ŸZâY¢µ«2®q•Õ_˜œ½4 Ú(/ϲÖê#ìw6À=ˆþáX¸£ÃÎäõÈHÛœõFgR¦În ­b+b+çÓ”ZäxeZÝ.Ðç@¥]+Gr[p«92=äµcÆPYvßLtž<L¡Ð ì\oÒŒ“;Ê-jø³vùù9…¬©9µÊ I‹h¯«Í¥õ*ºè{¼N²$óïs¥ÿ¹qy‰ª·¤¤­ ß.e× öQ9WÓí4|ê›_w·‚øv¤ .Ä2ÝãO¬Ú,r»¢¥3¸·‰®LrPcOf\Ú ïju~pÍ… ÚiÈ¥AÞ+ÙP—÷·6úAò9«KB”¶£qžÏ‚ùÓíî1“®@}† ½86m=æ§™áªþNŒñ“ß>a*Í;Û]G%tìöà6¾íŽj5)ÏŸ—_“’«ýz£6ö¾2Ý´/x\ZwŸ*ûæù8Éq¤!Þ™æˆt Jx©¯ku ç¨JE8=Êc±Uu:Ò r]_téšÄ„Îôò›í9¼»«”ÄØôÖÄdŒ;Üw›ÓùÚ@>Sí‰Ö‹tÝr KPV?¨hÇ÷§0g©q>þ÷½›ÍjŒBBH,Vý”ú1{ó­zcÓÝR^´Qdßb({ ¶÷g©kZ1¤ä=ûér ûû…Z>¨§nÜ~媵®_FçKJNJBÓéGÃ#Ó{L¼žá ×+'Ûsu£UØÎ£ªEÁù¿¹_\´ç”Ëß{:£>ž¹h®òúkT`̯ Í蚤”*<¢Ûozc •ÆD-õx,÷Ë/Y>ÎWßžá15XØ6¸qâpÕãý›7±CÐØâ¹4qt~óѼ% Á(câæâEiã(Šü÷®øuðÚ¯ï*¤¦é Çë7áÿ‡ë1±r^ËýË÷ †Æh=Œ ƒ²J!qiFâX§a¿F^B¡|4åÞǨÅ&ë./§iö AF­ø3oq¢]öùlé7 3úylú$’… ð%çyvR~ªøzq‰½hz†‚™óÇ7™no{ªÞŠVò3±ßǯµ0©½2ư2ù ç­0,Ú›¨?'=K„°´}Ý\/=ˆþäΖœ´ßÖ28f [³*‹r˜1#ŽÝ_G(îçr’ŽñóÔÞ#T¯kч_s ½äKѵ›„„kÂ)ĤøçÉ1f;7‡ØÐ™ñßãËæ÷¼m|³Wõzr •1¹¨Py+ÖeµE /2y˜'‰Òؼ /D€ð~•[H™E°A—ù©º™³}_Ž‘™ _tÞ‘÷?¬Ý´ê ¤»qŠäu•ËÈ1ˆÔ³kø÷=>ë Î6ó#uôOÈôùš4ÁŠvH+3,_KDL˜¡°6} O¬<;\'d¤þ­Qñ+õy­ßWj™ð”Th!^kzl?ÚîýǃéJWîÆžo :O>•u¸kD¹?±„ª;Ë=–+8®"›§³‚±`¾Ë©ïW* ä*9ä…éñÖÕ©0@}ÎJ£zû wáe‰mWÖíÍJ•"í~Ä”~i”CÂi¹ZtïEñEVø­‘áÕ ‚\…5ì=%&<üç}ß2˜ï~ x3„ðö:Òö·,a3Zí9KØ }g¬¨½C}úÕøB?zŒ¾Ð–á§Œç5¿™~wa°åõ¤ž5ÄÆö3–>óêÉ>óYêf©b.KÒ¯Ó<. ÍFÙû¿fÒÀÚ¸øSŸ)r:CKC sE+¥wŠP'à7‰S©}sKšaÔ÷šTUâ>6¬ø´ý›µ)¡Øôeß® ·H*odšT~Æ/‹v^úwúp%§#&§1ð…þ©³M=®ºJt•q@ÕçBÑœÇê4|¢\ŸõÂóÆ—O‹åi˜ƒ—·h¾§Êï,”\¾ôë*Ñ~ïjÐÝñãDw7ç>n^5’×ÌÛ°ö‹ïš¸ž-AÂih<ø­ Æ$K“ôþ <œœ>¶Ø;JN†Íybx›Ü)j™íÆáÓÌ'¼Çƒéý —®t‘H¬n~§”{è©Á"4|"zžñ i·ÊV¾Ö‚¥b¥u§IÑ(©2]ýö³)Üf‘ããVÏHK¦ðß,Ç )2¥Þitë ÏjY›H8D~íá“y7¥èÙ®ýúúz¸äŸl—3€ÍÇY¾Ïçcø|½Q_¨’ ˆ#UJshzÖkªHÜzXÔŒ¾Hû½ØSíVQ0¼!òþ¾2 ¦0܇8² ZøJmïyé³ a^KrŸÂ‹2û…kfµo#’ìßÒGŽØ¸²ß,ºûyÞ!õöµõ<Ó M”3*¬c»`lö§¤|}Ìr}ܧ۵î—:CQNÌé“ù1KGfwÕµGçšé^©uÃûAŒ%©dØAÝxzÎ;E¼í]ÃÓD¾H8žÙ(g”Ãc4ŸPPZŠÝLÛ™Õ¯Föøzy-hï¤áÑYþ¼§ëç•¥žø®¡öïe¦ã?gZ¶]IP[|óž’¾ôéJ»´åØÄ'·®*+­¨û5š;v¶’·Û²ï `ޥؿ5Á~\³K^®“©ØC²8lÐéñïT£½‚µ:|¿ x–-lP±Ú]Á =+½¯j 枬½Lš)}Üøj/=wE?¦”ï=¥D¯U?šRÃ%·wbÃޙƞ^²Þî,Ú]Þ<{Wá/&ÎÚšYîÿn]ÖÒ«ÍüòqLsèÎß<ƒÖ*«¼¯–Ów®ÅBiŠ'ÀÁjÊMŸ¼þ{RöcíP'ªrHbÛóù3_…†Ç6à+( WG™ãÉ]’N{I}þo²Éý¡¨¾rþÏ4¼ÌspÍ…u¼š'ÍY´÷ªoTÄçô‹îkºŸá?Ê;¿®þ*p­š<S\¤ÓsÍ×ëìCâGI%Ï™X¯Mº×êT»ÌÜ\€uÒ¢÷o5nKÜÞâSp¤ˆÂ¯O›T)¢Ke¨aÒ²Ý2wS9?ñÏ¢6¹{Ð"Qì¼(æon)Ãc?;ãR-ráÌ@Ÿ~ÜÈZ^æÝ¢Ó:Ľõ`9ôøôiÖÜÒU³G­:Ú¢Ù¼e'iœR>¯ÇvŸÏŒ}Û¯l¢ÜøÝ1kN¡M‹ö˜>ɺYG7ï¿›vðñ;Ìá ı'Ùšvk¬› *MDÈCâÍca*ÝáT%€½ª8·Û´¾÷n ~ØS?V÷×Ò IíKïîŽùxħîÇZ_b×8ëù;iFr÷ÓsMvå@³ ¶Œ‹íÏwø%dÏÔ—†Ó4? ce¤”ç8À =Òû²¤­9ë=ƒømσçÕ1I®ÕG¢«7N)¨=¥¾^N"ú{ÏÔ˜ÔeÎv*”—©ˆÉÓÄycQÊ: S­÷µg¦›/Iz™Ç ¢ÂÉèûá:ç#¦eÅ[ï‹7鎈ßö7©Æ^~ß×ÐO±\1Z¥3›×á´VkBѕӼä¡?Væ1vK:S„¶Y—6™¥D'ª ¬P1¬à´áKgh@e«Êq¶Š…Z-k-%p>á¤Æv”Amwµ–ËÖŸX±ãù1H-iεø~õQyð:ƒòNŸK•Ί?³ÄÆÓÐJYUBF²Ru0OäNß›CÉpü]¢ïÀ~sß×IßÓ­uñ|øN„®øÞOáß©ŒW‰ÉؕǸ,Y¼¶ùNŸoÃ]µÎ.‹”ÄȹJnÛ¼æRÂCðv[ÌiƒCõ˜›6¬W5K°jKIt¼9¸qor£—pÜí¿¾”ûêf©G¥iÀ=ÐÃlä5æ~×ÜÒçnaÚT߈uN À½ýÆÍó]-úËuÕo,­ Oy‹ir©¸Ç½ö`t€³v•r¿  ’ÃVXÝ'»›xgåë%µ½è.U\Æ"e5àgê Kx§nú)Ãhs­=Á<]ÎôÌ[]šß7x«8âv½áV–7½D')++Ê=ì,p÷åÖÕ ’I·:i³3kü‹YÝH-çÃ.÷ÓÜqbó 90ÀûPßcÆ<#Ç+§ÔÎñ:éé‚íå –šûS˜O’ΓXúó¥xôid—Tn=“Ô[Ìûdú±94„S%·(TÎÖa˜Ü†{çðN3”ŒÉЦm>gA§¶ô×аDßàÕcî{~ ª}¹X°|&ú¥ÌkZmÚü~X~õS²÷{Ö6º \ÄóÌ]'ãþ¹ WíaÜ‚}@)\µ®J»fá®}lÇ#„2} ªÇ_`¬!–Ì­Œ¶1ƒ>Óàé’E+˜’òa»N.?ÞÞzðø·©ñßÕ©XÑnÅûNÇÔ*SwîK_ÇÞÍdg}wÄxl—Ó郻r¸;i^Ry•9}ËG‘dyñ6§‚ú*t•Ý£E'Ê#A{2`ïÝOcÇÑÀp苺ñÕ¸o\kSU’{Ý Ñý %|îGáí¯{²8¹ådذkêkÚ¼oê_ra0{ݘÎWX¡‰­À½Œ‚ö+Ÿ¹u âbΰ=Oĵ-°´¬gйn±­÷2äqã@Ï·Ñ.]Fž\Å©½KA‹`µ*W—¦Æú±Ÿ1…Õl—šZ›ã´¾·/ß¡Œ~ú:¤ËåæW(k«Ã³“ÀW¹ŽÝ+Ã܇CÏI®[®¹†+E9P# 8Gƒ ²ã:ý9®¢º~yÃKoÂP;¡E¿¹@‡ŸÔû½Þƒ­#:Q©÷ƒlO·ø4õÁ…k‰–¤• Â#¼M :×¢œ¹ÍNç7¼¹ˆø¯"Ü×¹êµZüù@ÒÍ.—>Ϩò¼/i«¡2þŸÀ,­2̽[MWk‡« €ï¾A ðdðÞÿkŒÈÆ”nôS¢Ì5hõåÖN[;ÀëfÔÇ`í€ –E_¯2ûé‘dëUÌ·ívxˆ”¸iL÷s®&¾~f±[— ç8cÂ4¯*JâGž&ë\• ]úšªÑâ…%Ó sV:)~ŽÔ$xÊO¶êGØÆ)§ %ƒ®9,ÞÆ¹‚h–”µK}í>§?¤8 óiA÷y%í§vÙ§“š·1%ú\æpA­§˜åOÔ³fJ+šªO|?0I>°g*rQøïi^ÜöZc½à4¦-¿_7ú°¬©ŽíÕ`Ídú´7ö¾=UÄgRo±Þ6g0ó‘% ‚g“¶Ö`ºë•ê´\zþÝ‚±N–yºâ³{ö˜çïQ·7«ZW'¬Ršñnúˆ#&)ªI‚’ô?/II-6ìYßfuU U:&Ëåü–šU¦aµiYønž}/°Úí'ðëdƒ-kœ^¡{y -}­–íÚ‡~Ö¾iê-þIí¥{ªZ~µs× ÊÚæý¡Âåêð´Ë\Dªä×Å;Mq>®|É/dy#V”kÐ –ܧµùæ~«î…¶0û宲çzkZVäå;·­4Y•µuªrÁnz¼ã³úk ybZ¤³ŸR¯CÍ„4 u=Õ¯^wùp1ÞCÎc—8ò'S¡‹ŽiÚ¸š/.ÎSû[œU&Ì6²x¶eÃÈxw³¿4çÓ{•Cœ§9ƒ­#t\;q¶ÙÚ…±Ðã³÷…Þy¤NOXÅY½Çņ´°o)ŒJܱÊ&^ÔÛX¦ŠöøGŸ.§ß%¨éõÇ¿o‹öäŒQ×$œjñ_¯+átãnGÐ1ß‚ Ír$Ôë;ŠÉŠuŒbáv¥)d˜¸Ý µ}”ãÓÆ&“ ½wêÓÛœ=‰îÇÚÉŽV~Zö®»ÞSG«p¬»:òï…˜ëØX¢Ñå’ìé’.eŸâ½¾DßËÏ5œ½zk—ªTó_}o‡ÜcT²¥Š|ošCîzš>v¼êøö3_Ž·Ó5´ù­¨k"zoB5, {ï˜3šOˆÈ¡_—†Þm,Ê]ÕÞ½îí9ô5izýwÝð±«b³O&þ}½$󂸅èôZs‚MHye͆Ô))I€8Ž˜»g$˜V•ç»~Z”^›ku¥©zÍ °}·×?JϪ—w^|¡ÁòÅ{­nà#1ðCÒtz;ªµµJÌ ¿}Û|ZŸye®}‡Z+ÊÈ7 Ó»¯1SãKàÝVxû³Y ^u¶÷-M‡ =OMu&µËåìè¡ëýQÕUÂp`KO Œpáˆê%úÉ‹Z:ïI¼ûPêï?ÁX¢.Ü{OßYÇ!= g÷¼õO]éøY÷ZЫ²a_>Ì~­ñlŒ·gÕ·—æ ÓÞ¤,'áúâAÂo Zh[÷y>Žšø~0õk×Î=š1* KYRÇw,MìÁïb­’Z×!X¹å¬SÚÖh±’‰*‰Y탭G7ªw³ÆsMÇö,;¸eå.wíÖ“z)yãäL›ÿ‘qÏ£óýäÃÏ¢ÒÅí(œ†oW©õþ¥ó<áFYжt°–1›ó‚@"ß$.óÈù•¶Í\y‰zù ÂJk}Ùv¶*ý&¶RAŸ&~Œùi¥qNÏê ÓÛLãz“Ѝ?qz %¥+€ïs7øºú?êÈ õɵ üA­Ûï.²Æ×‡ÇQkpÇ_n¤#O,¦Ú¯ÎÜÔ·®Z´äò—á]×{Œz@˜¹"î} nª¿Ô®žü¾|@÷3»Öùµé?±¬pçsö¾ÐXO)wÝ}ÅœSÜ\L”þPú{¥pFYµ&I‹vÜöï1Ø’hK•.I]'¬9»7ßkïF9¢ñKŬºî» —2‘诽.õňƒ î ŠoäŸÓ{Ë{^ŠS2øþ] ƉaÓgßœÚh€{êtÄ/7·É·5_;ßêÏæüƒá—qÜ”€°ÕÅ)1¯w‹k¶Òr‚kð©â«ÉFØX¿o!ÞcE¿²Y„txÂ…Iíì‘˹+­´õíUôx÷췺{,óìI6¿>¿Ëë¢Ðe±ÑnÕM]‚¿Q!]ûÕöþ>ÎVñx‘)=ÑÊÂãyæü¿Ñygœ¦—ÂùÅsÛ­Ñø#öo—²èäÝ»˜®!üÈD‘{D=¥ø·ÙÅò¨`Ù$åiIïV»o«I•Æ“¤¯§+„EfõÜTv0 }»5ŠÚ=oç‰ ›9zúùe=_5qp8êŸs­S#æßeéýZ_ìg{ÉíRHmñøÚ÷Ñ3PeR0û¨œO/4÷¶hQÎ}~Í©¼äÆ_yˆ·>ªv(,TòOªßÛÂVyÆ.&%bŸ}?]é~å¯ÛdäV–>Í]ç@¬ª“yèÚ±z¹HßdJ„VfŒ6p®Oiç’ZÓõë ­dSî9ËLªôA²@á¾Ý¾d¥•zæ5ðv[¸fÄ$µëÿ4ÛèÂ2 |ISÙö5;ËGÛÖÀع¿¯év£ZbÉ]Mw«erö¾”³Ëaiç‹uiêîIîôo«Ò±_œp)½Ìð…ë›ÑiÍCH5ëy¦TÃ}§½1S óXºû]¿/÷Íx…Iã^Ø©O€:û¾M,¥¸Ô9¨ôœúŒmv5w“›éZuBZF‡ÛrhS}Ô6dâäÔå3}n~ø¨_^ßÛ´{5JÏáÕurËLºŸ`³»>ÝyÚÓÛECGÔ­H8d/»¯bx¶%o¥dj}i54ñãúÀõxRøßeë3¢›ef‘Í™æK—¨¹¥i¾`‘Ýd¾v™úÒ.‘õœc)¹Ó¦ZÉŒ‹³kk)q_sBvÒ.§š–ºþ…,OdèÙí^Þ÷òÙ3˜ œb_õ›uV¸êzS¬­ÀÔhÊéðü%+7¦?.>9_–FerÊ·ÑÎûLæðn„ëî¶òñ+x'&ÁŒÅñØÌN,McÆe7-ZaòÐqmÕISw½ìkj¯'ŸÔ¦%(Ùxo›œÀ³èÝd=ø4¶ãpkko‡\/ßR¹¦$GJëi®Ö~Á…(ÐÇŽðœ7Ñzìô]àô"Š0_n0µ´cÝÅú°ï1¶´˜h“#KØúœ•íšͪmíøeÀ¬¯…c“+É:&^öº_F^Ú§ÅõýM!ß¾ú¿& §©Îé4œµ^}/TçË£ÂjV„¾Ý™Í½òr®SzÔ“ÎiÓì»K¡o«,‘[š"Œ×Ö,ï2‡Õm1‘îR຾½‰«Û5©3ñÄú1òœ¤B4n+­ý§InõKO2úU·@íhìSëÙØÓE‹gÖ ¼±-K}žDT÷,v²WxÙ´õYwB‰Ÿr«™ÞvN¦´1rúµ,—‰4êz×ñ­Y0DtÖÉ¡qÜLdþðÎFW¿(~µ°°;îuÛH¯?¨õã³QLm.è´Îùóãú¹â5~ŠŠÇÞ<«[t_#ki,Ô»ûEî oÖ öÚ¹Sl~ÆùÕA­1ªëÐO"F7®QCyÛS“SÃêÇ1úÉÆ²j'ŒXǽªûïObÂÚ’ùŸ^d—cmѼë¯zÒAêÔp4¦°08ïY¦tò,’ûìi_¥†¬ûY;Ð(ÝP¾qƸ5±ÚMkM=›Ï«µ÷šŒØ>Põ"îOv»ý–„–5ªë²Ôêõ¬¤ÍÛ0à¯ä–¨i ãÈqu¤í$éa ‰½A0¦¾ÒKí~Ë´*'Lˆkx’p’‡<´gIõ¨â(2!×§ðÛà·ÕÍ\·l³ÓSåWtûŽ~L£éú×åïŸicYÕö³õ,÷0\7_”/è}lO?» N^ÃFzÂ'Šcç·20ëìj ›šžyæÕʈ Kíº‡Ij“}¦&ôw‹&ãš±M¶ÉõòÖk¦½õl¤W¾2ë7Z_Úž$mƒNÎè–¥smÚ{«-)»wêlÏLjxàeßDYýÌy›uõ9¥{z²‰Ï6M}ÂkûÓ-°ó…_“¥òËÕ­™æÈ hrÚ—Š¯”çŪh£˜=ÊS_¹Ý¶3G¨Úø»Ì’%œ¸m>©4]ÈyÅ—KlEp®qç±±ê>Fî__m»ª$¥ÕL­weÜô»ó:îE™>¥*É8”ûs]ò”5—ñ=äœÁ Ÿ\–˜€}ÆÞæZª-šçƒ{êqc]í¼W…%8ª2<é36½7˜#ÉÌ9°¶Ë•¢*X»Îý‰?«-¯=íö3£žÆ±ô’ÖîÂWʵa½2¯5A[Yº› u1Ê­ŠpM®/¤º”¾#[â]>Ÿâõ ÏõuGÎ-ß&‹Åy5/ˆW¾Ål²–c” kgkßÖð'Ë÷ˆÎK1ßÃÞ±½i÷Ïrñ×xḬE…ˆNH¾Ð_gÚ |ý¢ÚDBUrSøÀß™£?Ì IK”a=>Ó_ g”¢e¶¬¦#ߊmÝÙÓ|W9¬þŠy´2 é[=ÓîáN^­äÖ›ÉKy‹BKÓ+p·RÝËžñ¤ßÒ›§Ø‡œ¶}Ÿ(Ù­—S×Óžõ´ØÖåÖ¶Ñí©ùs<íŒ6yM-ªH²@¹^·‘é}F¼gB¾#†ƒ,ÞqÛìÞšnj\‚¸Å°VÖ h¦‹ë’Âw§êÉãcÖÏ'_fýd$¾ÕvÁnÒ, ÊŽÊkï•mzM‹ö»‘ðò'³*fûÆ3NŒ§ˆóÞ¤Î_wkTåH'ÚF¼gÏ(ð³çO¤\RÈNmœÙ·zÚR ‰‘ルj‡ OšƒµÔ§;´á‚-;ô+Ž>>½ Nyg®¦+’·†‡ [âÍ”>jø‡rÖßKÐéöû±xf¥¡ m΋MùÇ~Zèrí_—¾+{ÝqÑWJ-|öð “?è”bØ€ägeý×%Ôƒ; ²ÈJ¤Q5ùeìNE蛽‰5>g”ýÛßâ“}ªœ|£+櫦ÒM“øri^KÚHñuJÔ±ÎÈJ­;¸ÀWr3\˜lǚƱñQȽB"¤¹i"¼ÑÉW–˜£/YwAÚ˜îÒf5Xˆµl'¥—=b¹yÔ½Íç ¸ƒ5Iý›‚óñ±;vŸ5‡í}ânu­ŸÃRú7ö|3¼ŸY……]ìT*ZvR_S±e!¦³hZ¢òÒøvÝ7ÅéߥmÈ­>rø„¥Ó“lûéÇ¥+üÂ{­y¡ƒ¦±òS%2ù0Þq%J+z önžPèB·‚{ž^ä†ä”Ø#3?š–„®^Ô,ºíÂ^›(‚<—Q¨ïÖyÙàUã´·0:¿8[øRAðX[·Õws€J‹¬œ)ðÞ|”þ Wåß mÅl¤Ü¬ß ½HÓ@‹óSçwÊÝb¿kÜû‘*xŸŽ¬$|‹àmkU¹cUrúx‚£/»Y´‘%ôÃêæÔ–ëÖåp-êÖ3M\¢ÓúÏõ+£ C4×Ô¹ ZÓ¹›?ÁL—"Þ­glxÎ…¿OA³­¯O¤/ð:`ÖÖÅltjVå ZÖ_|žÍbtïÁôEoÄÔ[Ø€¸v%`ªbc3ÚNiYqróàz󮇾[ïw³l!*W×ç8ìwvóy1»v;_›ŽÝ߇­K¼€Z×éE¥Á›•ÇŠ‰ŽóÌCƒëâ¶üú¸1\gäã{ASþ΢0¸’ÀçMÛ¿Ÿr ÝÈ}£øw-õÖÕ£}–¶-œd°à×ÅÛ×Q%‹2\¾Ý¶Ï·¿Zku¦7Š'=LµSsÁ0Ú*¬È-‰ý×ù‰®Úú{2áÙ-ƒ¼7r#8{©MS£Á ™=|œç1ï„Ç®0f‰ö}?\ÎÈ-hɘòú]úXÞùLWXÍþ³º¼ñö¬ÒÍÙ>Çé)¥g÷)‚šáÊãÀ›ëÓ÷Ï©Œ¹H¥×[pœùÕ.\ûãíü\/¸øæÐ/L1ס%ãáøþíh/ô}ëÍ¥aÈJ²o–C)4v>e¬Ít:ì“»Âa½zLꓜ½ŠÙ+*sêw¿;iõõè­.4×ÈaÀ)‚¹óÚ_l{§ÕæŒÁêÔi!_>àc›åŽ{ìFÜHÍx\šÂé¤Cv®3:…÷!9óæ—ú®·lòS;ãHFÍ®ŽÌF<€ƒœçÜ„ i¯©³|P¤¨ÓŠÞˆƒÅúÇÛdwº{£Uf£T¬@äúBŸJ+Ï.;ªäFˆóžܹÆv¶¦+4,m½‹4xñIŸ)ªP@d“”ýÍÖޞɛ­J[ìäKV+û°=_± s-ÉÙ9}£}ÌŸÆ\ëäDƒ•#n:Дeõã– ßÚ¥ëîR™û@¸½¬š}ƒrc,Ñ®hnÐ6}Ž¼Ì ö+%.4­O>>"â\÷¹Ò52L·`*¯RŸ¬€Ÿ4»~ ÒÔzséñ'¹|ùÚWTÂ|Zþϱ†Mý;^Ë÷/ôorœ“13bÙM÷4°T6Öòk=9‡Ê^l¼0Ó0Ýq‰Ý2³¿½D‡JÔò»âœŽê׿¼çiôgôz²“¤pûNR{SŽŸt–ôÛÊw —*}\â½zF}³×À•>çÊ”IÔ®×·.Ë/”%Ëâü÷×ñé'n™Û„ƱÞO4›-ò¥9óŸÞ]i/ªmþŒ}ú°`˜–½—–Ïqª^%*§·÷Å¥æVÔÅ·½Õ«ªS²mÝ“¨^Á ÷Å}›|R=KÜí»¾]r&„—·ÉwTYÖ›:&óK“Bd£§szòŒy,êÙ¥_4Ã*i­m×_ ·`/Ÿ©ªø PºäïF|äKÓ<>#%ñö^|—<Œ™/ÛŸ¾–ÁG |Éu9Ò.1ás·–Ô ‘7Ò%Íùü7Öb›¾;\û=±üÑ(èŸ(gOru•¼åZ<ûyÊužØ=žWÙ§”%|çdãYÏEÎB,—z<ñ›àýlãWhƳ>~ƒŽÍ)ŸÛÁïu̹«°L³ÞŒ!°½¥9µRø–²sõ·Çê$Êú´Œ ‹¾Å¥ñÈ,¡a¦ãŸ(W l’*õÃXXß…4”„z–‰b|/2ß2ÿ#–.géÏK{#RºÁ‡‘oß_º¥¦êݸi,q¾kx§ÕS}ùÖEqÍ×65×Û¦ñð»Rsû<û‹R¯ÇÌKm[X5àƒb{¨jªŸ^@ÞNÄçO&%$ûéýä’Éós •ï?e)Âò‚;ªÒŽ[åIçv ®ýyèŒ"Üݦ«L´æ¬Ž.2û¬ˆ\‹lN6W|×Éœå)™‘Ë89gáûîÇÆ^@j °aH¿Òºç òõâÔG™ï—©´ÞŠ˜…Ÿgr¢Ê³'ðݪÂݦæãå²RÚIí‡YÍ›B 7aíïñ÷"xÇSÖëFo¬PêOêaO¼óðr›æáNÕã2Œ¥ÕÍj—C¥¦‰jyD~nË’w”J˜{š û äÃW_©ƒUÊÖT÷õâQàŠÞ“Yýœ£¶¶W¶½ýXÝOÓ*c5,ü0÷a•-;[0¬‡m;|-nÂáv¸TåJÖ®,|¥iKö3ÝÎX®+ÝtTp5.€ðBÇÈòÙýÛ J»“é_îá¯ÊâtÐ×çÄO®oÒ˜{Òø{ðÚ¯Y¢Æ#ÄÖºVµ©–Ì|8›< ñAi#ãÊJ[Ùi»¼ípœ33ÏwW‡-&òËŽUpÔ¿/ƒ=¶˜”+èÓ:ѷΰžw¥½ÃPœ%>‡ö‹F>©¶˜öW¥GïW+(—{}!Ÿ6fT4÷i©ö¤öª m·¢µyé¿ñ>§­¹gŠjQvŸr¼ÉZrÔÓ‹fæ˜|âÑàŒuMZÔ—Tk.Öa@‰tÂ'ö/šSï¶­HÅ«¨óâØ÷÷É|î¿g^`Á!ž¨Ú«¹Ï³ÀÆð—ýc }òbu¶d:ðäú½’ôûFDèôžnñ1’ºïyž)HÔºM/¯œxirõgh¨Nµ×ËŸ®òZßú&Â|Þ‚1JˆƒžáåŒÂI/YÖ²Ò:Ö–öq0ê÷égŸ[¹ ýîåÞZ{îšÊ_׊oì$ïUù»ÍOÎÃJIü§vL3} ãVE»µŠLlš)z¡|h7„ž>ld+Ú†îTS¯eO…¯Þ»™Úl·Æ’6’´x¶{b_4\=ò7J9ƧC®»§-bo_ÅÎѶūš/ÜM$¼õ™ìÎ@V‹.ñ"ä¯Ö îeo­ËÓbO>T0Z÷$Íymó[#™Ù'V|IJTC éONqg2¶»¯>16ñ-¼%éÂà´ò·)a§5ÓÚ­P¿×’-¸iÀ•÷E¶å*㼨æZÇÆnþPK%w›ËMY]§ œÝšíš¥Ãçg!Ô¾âÇzm.&|ÜLÓLÕîÚܰrÄ>*õ1Áóë:ÂØ$°Ió h©åÛNðÚ—Óî§&*r>ÍW^yáhÐŽ˜ %©¬}ÞÈùkŒZ{¯ËÜ ß‰ì%“V6-Ûg2¾ª-àˆ¥cwÆð_qh£²‰Ö;-k—qiEGWC¸Ëœ%Ö3)Ë„¹SÊóëNÔ¨?u^ß+•”gäoT^UÑî+µ%¹,»^O£ç¤ ðf™]18Š\鯇—íªÿnr§R“ãšjökÊz“`×RYÊù—ÊUŽÁOï„)Ff€é»°N¾¶¯¬fÀKÃÄèRO¬Ô‡=R›*j§ée-J•ºò«Ï€ÞþÔÖo'ÐãÔ§L÷ˆ­ë9_—} ®W[ÝÖ¼¹å- O”ÏÏÝX0˃¾®º,ʶEÑ)ÚëØÉs¥ô¤‘ÁœðÆÝ裹O¥›wéi¥˜]œbÜÞàüRÜv{´âØõ¿ä E­ä›d„>¬ŽfÍz ÷•7UÎ-¹}>P‹æ¨¯#˜n–ª³Ù=~cÐ%fšÌÞ¬«†-mýi+wérLW¤¦×8 m“Šjg%,R¹Nt²”dÌ&yj¶.ÒŒ$®x!ê„Å*SØlàsç<èÂ;ž7Þå.A…·Ÿ´Äºõ÷ìVôÑJÛ¹ÛCu8·Ûý)ªo÷7?PkkÞÉLQÀWÛ0wñS»æ}'WÐå/ÕéÏ_F扌¤±£½¾OUA8ôO¹ç=¦“øw›Ò_vrHlÒZ¶|ÝÇÃ\С}¦³ë'¾QÇ"‹Œ¥$Àз2­øœç™B_輂ZR0÷»Ë=±óŸ«&úÁÉÓV8EDÁty$ô-ê];™ýÛ_Ù Ldå)'&§íòJR¯r»%ölL sMNÏ©íOÓKß6«Fö~9£O±[g֜Ǟ_µÝ©NïÆ¥H˜îìIºcRAÑëÓ:Tmözd7P£ÁîØ†(_O9Jwе¨á»dùG…b¤«Žï™ [ãóu7„j®îI±Q/’ÎÚ™§p MWC”ç˜ÐQ—åô«ƒ]<}R÷ÙîíiC¬íšÎºÚª}ÄÁÝÈÅÛ½Öû Àa©ÖÕ–ž-½êIé9ô·¾®§íyõW'*—é„eyáj‘ÙÐ6øÇ#b‚÷>8Wè€ø>€ïk(V­Žô#ÜöÚÒkœAN‡œ1&ås,ûîe}¨•U»Нä³p oËZ_|Ä™¤/Ζ!LŽ›û·Â"üj“ µ+ò«È úxîÍþ1÷ǯmŠÉøˆj}÷¹=†±LX´”š;­,ê[r;mïfi;´ª1°ž‘ì—!ì4Å)óýMr\jVÓÍýâ8}ÓÍuš!Ût¡sÖšß½ªÒÑÜãS´’Þ7ÙGç‡X È‚…V¿æ¤e¡šØ02a®/Ž~;ši•Ð)k(÷_>8ïE؞丼Ò7îz%<`^É»2K·>𱎊tî*ä.R5ÅŠrQËeå9tíöÖVàðo‰.Cq g#yñ5Až¨•®àÊQ¹æž¡Ërr(¡`¹ÎwÜÈ–%ö¯©W¥O‡Y È“œ¯%Þä±KtŠgaMî¡#ùq½³p}íÚ“íò{íàg¯çlœ›A|Z e†ÍFEϳ¯`[àô¾æ­f\õ1ºñ+©Ó!:FYóË%ÑŸ¨úfZÉ5ÁT”¾Õä½+@¯Äv.h®Å¸ÎíõÆ”ËnͰ_!¦ùCtÎgš_!š-ð<¨ˆ˜ÚóØÑq¼3ø‘¿±Ük”Vì§„\b›öï—âæuÜ8˜J%<µ½-õÁsÍQqoœ#?Vå>N¯Ã®È±Kæ×®w@Å”ø§®­¶ ÷˜UKvo¿°ðº3W–‘Ä[R¼%#%“Èx¾_q&{ì ´l*&dµ/³Œ„¡GéŠüÞvkÊUy,nÙÁ•HÐÔËé†Ù“¶Äg´ŽøºîkÛ8jU¾êLðÓ5®6eÎû¸V´‹¡Ó(”«O?-æï­æ€H}Í ˜ô@¶=_©©¿³ï“*Ý”Ï6&µ±;O–̹ªgÇÚΑ*îÕ7òc×:mG22Ó-žíwŠo.õH—uŸ¢Aàø6bèøÎY­ åÒ® "ÒÞwRê7õº¨UĘñã8KÖËY²ûwtÕñ“¼±®>‚¬ÂMõÒvÚËÑ#ž¤ÍËug_;βÐûáfù+=[»Þ¢T¤TÕVúüöýd¦²“áäR4‘‰ÝFø‘©¦øÝ@Zº­Æò«ì_tú 5Öšq¥Y¦¤ó§D×RùjÁ}qZŸ9á3­Úù¯Ü°¥€ä´T$.†yêÚèï¸nKU©2‘cÈH‚=í¾Ï”)€sïn¾$îîC¶˜$Õ¿nÆÖ¿ni/>½Yq‡ªÃMã›IÙ8ÇŒ³¡O Ë!÷PÉcŸj›öêѾ< É'Å3nÒB1ô/mƒ„ÈöªÓ¦`åú½ÒfD:Ÿƒž§ì—Ó1%¶$O£&ª5ñx¬oxÑ]®22±¿ƒö 1}s»½Ú)t–»UyÆyFnçQ’ž»Ê<#E-ôÓ²RS™Ä²¶Wö1osÄñ„cšÏÝü‡Þx§êÚDc¾kSɬ•wÔÄÝéÞ¿gOŠÝwöÞ4u”«±æìEö¥iºkaìs¤ÙÔý[·ºæÎaû&˜½=X¦WìÓ‘ª:X4M:ì·={’ǧõ–©vH *n£*ÂÖá·9½‡âWµýkÚsû…çŠáy@Ó^Õ¤8s¸Ò-ÐsÝ%ôw}Åw-ð‡{=_)Æ×:xÎ- H˜óà;噦X™ª'h6Æù:fºú¿ueaÕà*š L_š§›Œ7±â”zàvœ»±ÉžPñ–¬f B‰ér¶.{ômKOè¸ö´Å$¥çÕ”d*!q˜”ÏÔM ,ˬÛ~oÍó9I3¸o¤-*ÈË`Í<ƒ#ž1ÍÏÑ«w>¯†·¿¾°ÏGÝéUJ¯§ù8š±ø+0~,fM²e@h!ûææönù¨SÑûÒ¾-³o“xwSKt² Týöø_<ýbµn?f·^{LžÃìñ)/Aß5‚œµÍ%ÌHþ5o4Z_Lƒ ‡·ðøŽcÝ[¹ ‰ï|Fôkú=аӌx¦Ó}­–ÕÝ%ÞÅù ˜Û³QùèúüÑv 0™üÕ`Fϳ²"RMëßÖmì-.ö‰ÛµyoB÷ÀÒ}ÖÃäžÈ5""Óá—‹Õ…{É6í‚+!¦û]’ hyL“W6•ò~¨”ˆûý ØUßÞÆGÌ4áÒ´d‹ŠV»±(}AœøÕÅ-\G-™VS0Шݑ»ëÞU¯ ·Ä|ëNº¬gc;ßñwÌåmè¦{2o!½ÚQÙ5èî>ù..gÄø#Ö²Þ¾L1Á3¹™¢?W¦=û̦áÓ¾÷ŠË€®¥.Y° R ^»aú´ë9må—rÓ|Æþ/’ ü|Íç Çy@:¤½=uë¯æy5«?Çr½¡u¯‹AsõOÜ£xÇÀ ÿrÓ«O†ºÊ3Ï9ƒÚ _/L\8Ò|­ïéI%­NcG³m1zfMd?ƒ$ªAÙ^‘ŒúNay÷IMõ ËRs˜ˆÌE«îƒÅÖKi©4¯”ͨãóËœkFX^™Ç‡—–mÖ˜ÒeËä›ë>PYOê}]ûG¾ìjZi´_x0­š¯+[Zc9/QÿE­÷wûìMDšçÖïÙÖ÷Wר-Õƒ0"ÜÆ»ÛDsàœ5zn½Y2…š¥ñôŽ%B‹[«oNh7¼†â|¶âÉ+­NAº/Ì%Õ§{¸¶Š2ä÷¾7“ñÃì¼ÆR¡‹üêí£Î,×­½4ì½¼ö¶IÝï’ß7ð¡Í/õD%k’Iè5¯‰*™^ì :‡¼Å$WMy©{ŽX>Ô’)ƒLÑ-¢¿¸ 5¯_©ÉŸ%kýUæ"Ÿ —U=Ÿê¹›ðÖØÝ<'|•ç|Õ~³ãæÄæqä¶u˜¼ŸSÒ½ùÜS\û-3[#Ož´—É`r^s—«kºû’oéæÔ«rÖÚ°ý9Æ:§?šÕP¥ç#ìÞv;”çH7d=•GZ›ö]\™Çg§)‚W¦ÜðDãsù§mÞ’×Ø™¯ž…;Hζ&yátã¯hc+éÒYéýoä ÊŒxçßKŽRò{›c¢?Àzài¤[ëÜylêB¸Ó”Ï·<žë]g+‹Ðþ|Á‹Xt£N¾èWûÓ×+-‹H$ØæíÊ&OvýFùÿVN§e–¾6ÑmE…3qz}˦Ã>ôªTësê-dÉËÝü,t¿ß š*Á:¯Ô•ÏnɆût-‰{¾à+ÈdçPýr ¯'ÚõÒWǰ‡ôåÙ(}.!²ôëõhˆçÃ)†Kk£§g¹Ê‡zzÏ×ø­qöcßd¯¥ÚJç/™¤§³Šz°"&é@W—úÞå=Ô%ßâ ÐýªÑuìð8)X§©;œøÛ»®Øh{kî<-•Ï`¢"Û\Îß?-õìm3R•¶ç»Ç¦÷ßÕg5YdìÙí+¼ü2Ôoö~¼ë´™„†žÉ_å瓳 x8õ¾?ÖôlìæC¢ëV¯œOûéM¾øÛ“µÈ‹l^î&ª?Ø•¿8Í{ŠÓ×S¨Þ›ß«d¢ ºvûïÓõ6vêøÐãË|._E‹m¡ :ÜÞ<•#\£uóÛº^g­ô½Ÿ¾Î©msŸ[ëkÐq—iY%øOîç¿w\³¥ëõþ¬Oµø©OX!9g–*Wä¶# 8€Z{¯÷sñã´@JylÙñ„læÕýs'ëP­G¨y1©üçÁS‚ä³i»„«J|8³ý—õKWó¡>ulc¸ïÝÈÉöÕ—ÙŸ·L™}?9¿"X¥=<’ºle¨øéÑÏÊÓûâuô?!»÷lÏõ)ÛZäuŠæ»+6~ÚR™Î(SÜÓ_]~+Øü“ê6Ò͹£“ WíAûïTè'´á³Ýc?˪Öÿ_wf²o“Τû’äJ=5ºÁ¯{‡š9÷îN=Mî%î˜<Ž›ºaå8PVŽ”ëë*×Ï­/Õ¼:âÙì||âj­œ²µi¯pµÜ‡ÄÄŸ‡í9Å^*õ Tñ[<̇±zè#yfÙ³µûôù~ø©¼ ·3”çM§³„¶3Ú€ïk†|‘å§ làgß²ŠÚjŸ®ãíÖ³)EÍ~}Ž]ÊÜÔ¬ªw_/!Ò»Zü_KòNå-ób8:JÍ_P©iÈ9P£½NâÓ¢æÑ¯6ˆáëc çêøB*Måtlbe~w–ÏMÜì*sÒîÛÒ·µk§>Éazz5$T[ŋLJlÇoÎüóÕRtûév\×gð_Xоh-ðgw>›u¹NanuO­¤§š±U—m`Îý²ªïÛ«V|q’ó?d+, ÖX¦EoÜKb>^ºÏ»ß7>½5ÑÒLÚ*5û¥y+‹ u꣬jm÷Ù-Jzªf¼Ns¶/].9°i{d?[ìŸÊ«÷É9;,'Êô}®å¶Îß9ý‘Îuóò4X•AO*\)žÊ“¸Dæy¦ÑžT-MNX5b]ÁÖP¦\k±<_9KŸeí«€Ó‹@ÞgÕÙ ŠÛ¥[•ò—’}Ûö/æ~¥Žµ$Ì0$´).é….¿uêvuú$ëéD®®5Æ•ˆ‡rr¡Îµ¸»[ß{I[7¯¥ÞÛÊÏLÊ™‚1‹ 5o𝷦'¹¶¯Ž;E¥œHþYOxøS–ÌW—wK„‡3äoqÜS!›¨Zø®Å¯Âñ^››wºyõ3.S—WÂY¤úÏ©æÔ¾ðɘïQ¹c[výj5E}¼ö¼‹ •Þx±u9qÍýD¶þù`,Ó¯#£ö 6‡«2Ð,\³¬ùvÍizçé{©Šjª3ó¦Ô¥·ÃðX$û®;ج, wÇÂƇ{a÷Ðéqã}Gó|= ’âoX;'KZ)×±©‰&˘ñ¡9^Ë'§)+š{{›YuOMlb‹‚Ëêð6‚kkœJ†‘YÓR» S}êL·)Æ%wö±/cûÝLãéß*w,^(ˆÆ³îÌï*-«Yj>mƒëd²µ¯/[oÃOë.l!ŠW)ÙäpCÓÛpkâÄZŸ/b´•ùª ìP²­¼oÓÊ—§ÆCó9ןr&—®>·LdE$—•¥7‘§ÖïVåuňfä$t(þ1¦NäÛµÅ_[©zÖ?¹XÒÝ—wâ›zã'®†4Ö–¢Ú­u¤Êü=·)+։חÏhî#{çzcãÈÛÚù0þ‚«}b§Ñ]q~}à˜mŠÂí–Ûµ˜gñ÷çÐrG›®‚¤ J)ËÝ"Ɇy÷þÌó§¤}:vH"–JÖÔ0ù9¦¾Î»ë"PóÝëDªÏôàx–5yv„ìv¿Ší\è—:Ö±c¶¾åèžÐ-î]šÃ˜Ú6O†n£è~OR@žlÇ0¹Ëp÷tÞ¹ü“·ÊY®ó­Ñûòš/!eTûLbr_Ÿ7«âÛõ-cµ” [Å,£æy¥å’íÕ¯_»÷ZÿW«ùmì©O=hæ4‘*Ž~­eÎùÄ«•ÅÔÞýÃ5ìZͤ³Ú0D‹÷ë 9‹"Hÿ´®×²‚ërš|p9<ªoéò­ÖOPi0UýÌZëþìüi¾hž©*ØòiÍtB1™sï+ýjñ–²o¹ôÈw÷Úšyù ;ßÓ.3Z_z#@¨…)»_+HùKß{ºWüÆeÇ%|¿Jm‰éê7ñJjšàÿ¦rKxþÍì,;ë‚é2£y#¥vóIê‘|U§©ŽÚ•{|‹à¯Búí÷ÖŒÂpÑ6_È+Ì|Ž7ÙAÉ06ôü2¬–™Y%qçÙO²•µ>§PÃZÙGsISZ§fØ DnE,¼Z“¢W¯´y[GšÜ²f…˜§ºçî3ƒÞ§ã¾<(Éq_­tÎ¹P×ÍIì´õ4ž˜i˜kí6ñ»FÏÉ÷ºèǶ¶éôi•ªSUµ¤ã<Å»½ÈBãO*dy2ÔómÒý£ÌF‡@ïÍ@×ö×Z¿Ý}}½ ‡¨;×Ïìî\N çêýºë—¨ãíøýÜWÚ¶sXæo÷ ÜCgÕß§,[íµš-é©{æ"$¶¾ìð.ÜÈjØM¿CtŒ2z sú“ fsš3„S¨Úª9sk/^¡G@Ž¿»4súŸïm–ŸÈV’W;>>mNzr¸ö~%ôûó[PÚï, ‘¾æ®«ß«:®¥öÔ87'5k…0” À?Æ?;Js‘­î;”±ì¤@9ôg,NwГiMÛx×Ö;ç²·^¨×òÎ¡Ž–m‘Õx{¥èýÇ·jO:Ôb²ôÍèo”öy¦ÎßÄS/žÂ¼ñoÆ& ‡pÈñ³÷wiâÇ9®ñP‚Ã[+Z¾* $=ç¥LãîÖMÝ¿&ÇÁ³Í£6¿Š¶*oËxtì'GB€\&•T÷Üz†6RV7–JF¯Ô‹ïñ„ßeHñ®ŸŸ¾¢zò+ż‡<°ç{‹cé×89¡ců¦ÖK¼¾YÐ:˜JB…·•ù† qƒË9p]¶7 ž7\>»4±N¥ËÏ_;w‹¶†À^ùC«JyI¿ªéÕ Œý*Ï>p‡cæÅ/ñ]¨Ò§96_ –G*¶sËD»Qލ´ößVœjÑÝsŒFzÛÛ63Ãì>Ÿ-—%ßXZö§Ë6àk|ò–ÞÓNsiWÇi¦“‡æþûV0y•ç¾¾û»¤AÂjÓVÅÊ¢®v 7¡&zŽà¥šÉþF›¯kBrÑ}s:­®™ÑZZìëòݬ—û×_ëQ§­_T¼»¦Î†¾˜@Z¾§´Ý÷)uošœÂg,ÂoññeM ƒíÓQŸ!dìQ³HΑ$ûÊgã0xŒÛr⎋ÞÝi&NKq)}Ö¯ ÉßA ýgž5ÞR²{ÞKmÌ>_O§³6ò >ä÷HY ö¡-ï‘­ç+ûê_=”¯ìNu¾Dµ§=ÅþÝ4RJ6ò÷"Z_=%e\ÊÃU,ʵožøÜ_¼€”…!~æm¸Lý¯V´S‰ƒ·q¬t·–Â…©É×”ôæúάÆkO¤”Êœø¥m׉ ƒZ>>¤@ÍŠ¶ÄAåÇa3·Ûgd“¦¹£ýžzɶ‰ïèÕnóKÍÅm©_¸ÿ î*þä÷ŒîRÝu¯§úÜ®A«ê–=‰²0:¢Øj¸”äùŒòVÔ~Çé$¶ëm½µ¯¸ðg8x£[×I÷CÈÜh”–Võ·24>Ÿ¶K„âyÈþµÐ5è¾áû/¡öMfö ½¼—e¿?uÖÞþ{"¸Ì~³ÝYeS®Œg|ÏÀ»¯4ŠÚmÙ ¯âÏ9ôõLX éÛ:Ÿ-¨HŒnœÎ~N7­Â_s¥†¶wµÑªªÇ+°ám}hš—D«bb¯ï{šçÊ)w=Ð9%Â0šq÷·~ ¹Ž–á‹í¢ %6D²óô’Ê;Ê9ºáA…ãkxµ²Ö‚œõö£7¶ôøù$3è¯ÜMsê|~dß’hY»îÊÝFCä_àÁ”ŒÓìgºœc7í7É,1Oïƒee•µ)aÛ™Ÿ )º¬/ÒìÂ7cĆÉB?†"RÏoZëK ]æ>í¾¸Ì~Ê‘O];eóR¡ŸßVRì©#›ô¦ûˆÞÉ[ï[ ìÛÈ êª^Í$ZïÁ§/šW“•sv¶°A\Ëà‰µFd=é¥rû1XŠ:>ljò›s±õeèrD"û€3ù†ìIÇĽ[ä6¿}imm|,;)}æ, -(ó¶)q³øóîq«pß¹´Ôµ"õÓ"¯_©įÔè¬KÑiœíò¹Ns={ë.þ/µCäýT¥9Ì6/Yàãíà>¹DûÄ ž1*Ýǃ·TÝ1ÕO†Ï— üXߨú·‘ÙeYb9`Ó=Y÷™&ñNwÞâwH=}óÒÚ¼¼1Ì ¹>ÒV=zö¸¹¤«Ö¢Ý´&l-öBÍ›hçS•–ðøGœËWäXûÕ›¾)çØðX ¹mîr|Ÿ,óMzV"„E|ãÌx¦Ëè)|~ ýêÆ±uÆp¯gßeŽ9d€i2ŒÝÕ©ç4i3’ˆ Ù°xH•£/¼nÁ7$ʺûÈÛ&aq.î|ž’ !ÌN™.éŸï°JÔv¸úÑR>ÔUž}i»8×¶ [í@O‹ 4Z°}Ü4ÆÏõ.¿f‡,G“øÜ—¡<¡ró#3$Õ$W]ë°E¸c|~™Wó·€N„Ö¶í«Ác›8“J;:/Œ&6§:‘KÞVYíêÉSeøÿ©mgX¸ÇqhÅ1¸ø~^‚âiLJEÏÁí4¢ÿÿ cv ßm¢x -}ÊÛ–’¶uS½R¬ø?.ú2t>ªˆ9Ñè6*“ꔫ]÷SNpÌñA ¬Žtij;ýˆ‡ñÖœé ›õü½‘¦'Ç—H<&*ÛÑ'†ªs@’ÚR2åq¦šrµø(ŠêƒNhÅQêýƒí¨”Iy2ñj…hùOzUi×Ú‰dãkqeºÒ%˜—xÜVv¹´(ÊÌRöTûpžï$²K‹‚Æé~ý]{¾´6Â-¶¹l©öUê]¤õÎï´ò ܸȯ_¥{[xáoÏq—y÷fS>·dÚ ð§Á%Ÿ¦×¼ç3?¹~{Ìâ/ëc‹NÎJ$ „†ýÃÐæ]–Éþ¥4ÖZO“Û8æT»7ÙÆŠ‹çû~Oèjídò?¹Ÿ…uæºHjɲXh#{k›|ôelzÞ4âG,™5O¢C­µézõŠ’Ë\õF™%lÉl¶÷Ÿž±:$øpؾ§pØOSßÁK|OTÌRslÃ:½Ü0ˆÊçzNŽJ:šÊN$ßÛ”ß@ÕÆ¯,?½® c¾}VJ+!îdV*PJ_s¶½6áD±µñ·•"u¿iÌ eƒ98¬¬úz/!YŠsmvòúî[ið9¯½ 1šýÌëwú—]°—±9øf:oâºò¯<Ô©ÊÒ\],ëZä~õÏ_W…U!êyàdRŸµ«Úþ¡_|¾—æ>NÌ2-w#ÄúXzžkiö&_XÃç‰Mi8Ö2{Ƶ=däê¡»ØYö¬‡0HíùuœãùògË9Hõ»sZ{yX­À9{ûUµ)CÐH³öaõjÏ(ÂIý›-ž øÈ[ìo•R­$ÈÉŽïï¯iÈåÄÃOßIÝtX´c ¯ d ͸µÎIÂØÖHÚB·çÞa’jd›juíÑùµ=v±YrKê¢Úß>±©ü¹%Óz&$‡·“óE¿ºrj7 zuž‚Òˆ×ՀΜéÀvA®ˆ¢»Ï§ØïçǼNî -.Ø-‘öRGuìä –Æ½A[çâcéζÒtTOW¨¼Àak¶FƒÌÍÚS|ö›¨ÚéT"~-!î‹ÙXfúõë­Ø1,}Û?¡+N“–æu=w ö èVÔÎìZ§Ù°üœ¿%â ÃüSr…åy›êêûwîý§ÛÒ£¡ªíÆU{޳›3Ž6™Õ©ß¸”¼ûYåÞQç´Zú1šÆã8"ð‡7ԾˤïÛ‰Ž&`CÎâµ+»¾èóÌ_×G舜¶Ðñù=燙|æs°ãŸygËwz©®\Ûâç4øös½HlÞêÙŸ„çõË>äwÞº0¶í~e¶äz÷ð„Ó:•*n6pçÖb{d§ü‡.8z¾Ò5ìMió¦\I­sC lûì´•»u0Î)m¯ A%o™i›Ù‡S¡ÌíÈúdßCƒl×ë±…f¬ÍTŒß¶œõõiºd¹é]ï½2b“̸?˘ƒ–Õç ç¡ÚPÄõÜwœÛP9ÔÈñH–âgJµå›_\dÞuiñã YË[Y[¥,ÄvÙÏ‚’)¡ÎT„eðæÜïÖTñ<›úÝ_œÏ–•Òý¬ô¿‡ŸwÈ4)ée0™žß™­ŒÄQæy­Š³iqCçSŠD÷¢e¦{®A@TëÙÿ_÷ê{i0ÁîY‹­ÀR—Q3Ü>=Õ—MSÞõ½‰­ÜZv¬¼DyA4 R¥o¢Z=vÊ´Ù}1½Hé§lñhy–é_2’!_mÅëõsHQâñ%{tT¡Ûí¬§¿ë¶û\Ìô´“ÞAZÕk;w¨_âÕ~»jècöܲ ²KŠmí%þŸk¸Ï¶ªZ#Éó%(æEiý$n O`´áúydzi߃£ÁÙ•¯Ïºâ1ƒ’ÚîÅÞæsÌ}Œ÷¯%)nÝÜ«.{µ—´Tnr‹ÙÎWNÅý:aç`±{º&¾.Ø3͸þ×7 ×c ŸSq{û¿¤_8jR—ÅônQ¡:w< üêvKêjsmÖÕ¿?²:ôé© êÃÔö±^ü¦ŸoÂiˆ9Ûé„–r}‰qm|ÚËÎ3Ùô©¼Èßc½žVÌÓñרïµIbU.éie óæÆ2žÃŹt­›^ºÌ§ýô-Ð&$[ßqŒ§´úCàÓêbnI†< HCÌEʦ…_6úÔ÷Wwœ>uNT¥«ü^YWN^Õ¡|ç ‰nûÉ3¿\G˜¾¢Vû‰¿}Õrµd{nN½·,—XùC‹þà ŸÕ^|2îm—¯+œ´õgí+mFØÕG‡iÈkK“‚ñy;iê‰2{íj„öŸ©ó_Ï ýÝm|ƒÞt[ëçžHZܧ¡ÐbOᦤ¼¢Àõô°5®ÊB´Çd6Í¥-x^ÀÝ£ïÅìú´´ í44Õ“÷.Ú¸ì×ëEõJ¶ûô eõ«y r_s›ýdᕉ,[—×j{Ö¼Ùí>ŠÎíKž5‰rU‘à}ݸZ›ö©W´«Ÿ‚ž,÷:_£îó9yðKã³ÍJ^…½vDx”†Áᑪ|k>íäz+k¡uÄùd¿ÁsNË”bÔ.ý½Áé…‰{jþúYbÜ!9Êöû<‰ ÆmL lñÞÒ’;Þ˜Mï8—¦éÝH{ÈQ¸6éô;0W×P¬]õ·}èÿjOÛ D×i§ÀxÂÙý2‚³#ü]uæH鯫ê7ˆ³½IWQ —¢Ï¼Hq\$þû[_}Mk3øá›^¡¡[¾P–Z²o»Ì»pùn”ïÔž·²ÛI¨Lp-$~f¨z×Ý®æ>LKêñ:àÞ¼wÜ#mwbo°û^ƒr~i2%"Ø1õ³Îë¬ß1Ròå]1¦¹9¶¥•Ò¸mGÆÑF}ÔëºÂá©`=×ÛMbs~oYÒ̽¹ZyÕ«?V$mc|úŒ¡/W£µ+ž<šïœçõgg£ðx’{oÔÖ¢±Ý˳¼=‹îÇ4†œïØÂš}köuߨ<–æ=jÞ_àk°ïØäµŽ«}&´¬ùØJ\¿V¸Ñ<ç©ýkùR_«À­,¿ç#®ûÙÉ1¬uߟSËù%.f·½ƒ4ÎgtítÝ1šà+ ûÝ«JczLŠ}ÖÒ9-­õ-'>Ô.²©Œ¹Ú¯¯-º9ºžÄïô³˜¦9NiKçûß"Í~nÇ&µ¸Ù–i,Óz‰(•Í3ö±¤½O,öåv¾Šš°sèôÁ¾1–›{û´bŠͦáí9¡´X︷Ãëemwž0¢?ú'w¾OsÅkÉké´ÅÚm?ÅqB{«¿Ÿ»·¸ùF\¶að•¤ßì•£¾"IYã2¨ÚæÕ‡{m.L÷صä';ÝÚZÓ3Ç—·B•!Õ÷ñÏt¸‰Äê³£zÌßJ³ºëœÚ債ksÔÞ¾ÏÔR&ÛÀ_æ9n/áRûÊ~zÄ×Ùܧô÷y„lÊLëO¾J'Ô¤õÝßl'yûO§ìë_T^N¹ÃÚÛÎ#C‰ào¶¨vg>°mÃ/ZË#µKez$|;Ü%ÚÍDõ «¹Í/ð†]«îhS¹+Í)ÏààêX? ÿ‡ÔÖ,ázØ-ˆÔÇ|6þ"Ô½&·[míá¤ÜuÈ5Ç[êVa®!b7nêxÌz´á'>ë¿v?}¤ôíÜççÖ¤e»CË2,ÔsGp¥<ç‘"p&ÄÄòJß1r¨ôÓ ¦Zi壩JÍ´¸-/g¸´>ëÅÕšúg,¦:º„ÆHùá·&Ñ_MªÕú·¬ü(ö”øÁ6_ŠÍéüz¸Þb{ZëÛ¯ÂË8ÄÓ:{š61Ÿ‚ùÍÃî¿s–èö½ýæF;Ž—Gñéy"û¾¤”«½Oç5ÓW–C–õËûD;¹Úó÷N`¹ö©æ¿¸òj–Í´˜ë¿$¹¨ÑxÁu‰jV×Ú—*x¤}®Ž·¾G3;q3Ä.ñΰϡrÝÕq •ˆ¥j¬ñ™SíPÕFºF ;[Õ¨Böf<±’Çãô©¼wÇ™cÓ‘^¡éŒ-vZÊ¥i¬‚é%þo/ƒs؇Ø<öŸ¤Uiýò­.š‰>oÃ9ÌUéD+Xî£oÈ…*ÏðRx˜’Q¯¦ç%h™ˆ´[qטÙç0I­ÿN/÷°Ó«{ [UéxÁQ= —À>=µå~wÝ[fÓ¥:ò~¼¹‡æ¢‹T±Æ/ƒ#(A?Vúé׸ «ÚËA@Eþ©aG|$§1$_ž¯ÍäøÓ¯_±X:þy泵رö- #1? ñE1ÉrcÀÔÓÕ.ºHrM?αcöÎ?)÷øŸ\µy0‰øò׌ËU¬KÎ32‹ïQ—zÕûê,fxTÎäÓ$mKR…- }³Œ÷ ;v>«M òÄ …±yzoslrS—/pÍmÚK'wÄÿ§?ÃJ_žVW‘ÍÐ7‚qgî(?ZfUe´¤åjwÛë¿*¿ä÷ÅvÂ3§í9 IèâÊŸ\E»g~¾FvÞ“™ìv“ãÊÔ|z»¦t‰28 cí—Ú„p¦Vóæç-ì¹ig8J"a,Òø§I;4଻ Œ$ÐÇrp0Ÿš~E K¿#âÑ$ª²2Ç3±|Ĉ<õ¡ïLg×—rùÑ,èŸÊ®‰ùÜ^œ˵@ê”"/‰¸-6®«Œg;í‡â‰‰ýrzÒ’\Œ¾y6õ½kß]3!êÜVQ-w¿kGZ¶÷¶~©Ñ>²WYöÞê9b¶¶<°v½–þZÒ [ئûQ°Y'ðÞžæ™Î(}ëòtçO‚k]´­‹Žu¦·ÇÊÚ]{¨¹°LòÇeMáo¾0^šôBåÕܵ…öÉq3̳]vóÅïí¯!ûs•þù­å ʼ¸S¾¶gÞjfÌTÍó´ß¸}¦í÷ÐX·o3Jtäâ[Í~TàÕ¶k+Ùݧ")Ë2Múš¹¼çðõ€¹³à­Þ%ëz æ6™ú÷ß±šŽgYÒw%zÔ&zO‰×(¼S =›•^k¼=AÙe%siÂöjô[ý,6 ©º‡yð›³äP25ßfÛ·ËŸaÏoPã}‰ö^¾gqpÃØ}Yf…Á9®^Û0Žë:سíÞy¦«ö«£c2äœqk›âýY¹GJÆ…¶/±LmNÉËǹáØ)t/Z£Ï1 ê!èÊá«r9,¯»‡ ²¨`«T¾u@1¥[t‚¯h™ÝŠ» «ávÝ(kÆ-W¶¶3“ÏÛ×oá¿{ÎÀ Q$ëX]¿ææÎ›‹^+ #>|Áç›3bÞk+¿ƒ»ÃYhŒÇEl\µ€Ýü~>WT¹/Õ\#VÚ+n9–ɺi÷Ÿ^R¶«¹wÌwÐfì,–â¾cëà96ž¸}>ÔÏ#íhùo”%2RîšÜ9çË0pö íõæ·¬«õ}–õ6}mû1}üÿ`¦e=>ì¬]ö¿^íÃÈ-y?¨ #Û&vº]w9x÷-lÇ(8ö'Ÿ¹ÝÙß}Té®×®Â!¦Tr/žïAXúö@øzj˲ù!=cB»LPÒ‹ÉCM å´6ᬕ•'*¶Û0#µ?ÈçÄiyõGÛŸßheŒj¢À•w3PnÐç„‚*ÖÖ€•.=zá7²”¯[¡¯Ï¬Û™oÏ+þ”¢–Iê*ŒK:æ>´[ŸÛ w÷q]®‡æ“ýª© ò‰ok›ßÄïMö·’‘s+3”¹Ïe’µš}O£êÀ'.ÒsÀjÖmy Ó‹Þݵ•-DLhË’Ÿ[¢ûÖ9Ï?ÂLëhÅB#îI' A¥, Ü*±ê³b¯BýÇ·~ØsGÁ½Òô”Ÿ|ž:MW%úG ;¹ÔD>¯!­ï—c=‰P¼#Ì£Ž:^c‹Ú¡Èƒºje>«©Q;ôSãÑrÖE&5ùùR{YSÚ:l-ìÒ{Úå~f\>iu ̼Z”75› 3$[®õ€Ä¬¶tÖ‰)s‡Åé·|[˜¯ ö¨5‰BjW$yúÿ=VmÁõ#“Q³ê¦»KÀFá~DÀZQc½Âúû“Á ™é¥Iû#œÑ@sIýÅ^’ÑÚ(r5æbÖ¬Óåܳ#8§z×L!6©„ŹɆ…=üpÔοHHÛTÂ}Œ|ÔŒûêb[âaM¶ˆ¢ò÷·­ßœdãª4ÄS”Ö =¼n=¡Yq•™7Q+¤]£}B’rô}Í ;‹'†ZÎ&Òí Ï›$u·x™_+Ç[Ù¿Ôï gô³ÈYK•BÍ*g£O^VõHšzWwp#·SÄÑ¥´GßOàçHZÈi.ý7Š{gY{‡•õ%RíaµÌ"/Èf®ÕŠüç +ŸZv­çƶùžëÙ­ÑüÞê´¾¢µ|a߸^´­Ž˜nsËòß K²§ØÔí2‚œ•Hõʶ÷FùŽUâÙÖ`œ&äòýçÑZj tNüT\)Úøorlò€ƒ¶&Çoèí×É<ÜÊ%÷Ÿ>þMa”~lf}¾ùî”oÏ`kÔÔíýËŠ_â\¥ú\iÎ%yªÐ_7Æ7f´³‹pY©ñ…í?KÕ¿wÆïiðæõÀªÌ«o¯~¦3‡’úµï\¿¾‚Kkñ©‡z·éšÛ~§¥ð¼)o§lHQ2öÿ~&Ašý8øíúeŽïŸá-‡ÅÛJ‘{ÜiÍþk|wrž·"í¸îe¾VvÚ±¦ÐâÖÒ DÂSÎpnÝ—à½W“Ùß·¼§6“q\÷G½u(Úc€°,zB…Ùµœ CºÒX Òƒõ:Â2˜H3( IrQ*AûäjµA“!ôH[ÕW,ÛÔÆþ~Ò¬¥ÄRSâ¥Ãå}‡ ž)ms? ôö –}­èþê]3 æùÄw*±›™…óÚ0Ï¡ˆ4»«$òW/tY¥Ÿ"m¹Ý¸Çš™œ¥ºÔqÚ_;´­(jCcZe ´ÝÒûõ¯Îbƒ<ò—××ÞÚMc biºùýæ9ÏkèNTìI’:ø•xùîØ:«î‡sömÂîÈ&’öåÄVùKXí¿>¼¶¤×’­ªRŽÎ—Ñò=Ãu]-JÁo©TŠŽÁ^Ró<ÒçÆ ¤ôâ²¾Dã˜DaïÛúŸjÔ±XÍX ï9¦µ‹‡(^Z²Ó^‹Æ¯´…ó4¼;Ý€»ºoŠ51Ò÷'.”ȰǩZØ–k»ÕCc~?5kKežHâ~7§%æ;JïÄ6Þá\½BN|zd^Ek¡ób«²ñv¢sÍÂ޳ȇ.9õÏŸ¡s}Ý7ŽÏ†µLV(Ôi,GÎñ‰f1š`Q†JmžXvÓ§ Ú€‘Œå£4µ¹ò[Ø„ nT€¡è«Ú/-wÁ¹[ TnP´“Ë}FŽzxÅØGcóüتɊv µÛIH¡×¡I×ß^Ó¦NØ©àݵ]ê¿R½Ý±ò7=»™Ïë&óƒ(¥±dOgá$¶q½vŽõÆXš/kð.)ITP)–ßÙ|kÝÂNÒÉÈ{¬ëÚpKœZÕ’!Z“: بM‡fïngÜ—/x}L³ÚÆUlòúܵ^‘üÛ,¼ö`Z¼ï®å.õ¯-÷Õcçv³’] ÚwS2°i%TÔ«D„h`AÆ0ÁC òåo[»Iåáu;NÛnJ‡,˜QÇ”²˜s0¬w9ñ/Ùß;Oié&÷J7$1µåŸøaeŸ¥×zUù£;…C¤©©]§ðÀJ]%5»«—X‚Ò¢f¼1y áÝÎþ‹Wy%yÏY,­ýœ‡7Ÿ±f¦Sæî{¸ úñ>èñ/h”3¢­±ŠwqCù¶´½V½*ž-'¹}×Yq²!ó¼« MÓ•5\¿ Ç3\ñI·ÙëMjŸhSŸ=‡^Åo ÃÊ}‘rÕ®=±mc<•†öä² \yðòžÎ²§%ž×{6¶‡œûQåVGÇgõý>ÊØÕ_Úž‰µæüÔØ[Xà?<Œ9š%grõæèEJ*h7~:tþú¯ß·öí5çvNž0À„ØïwÏ^ÐÏéüMýñ'Ý3D-Ï;·ßF)®ú·¤7OŠúXQ±}òðù†å¥±lÃÛ ÿQ¼/°úë}·‚èè%žNEq]‘ü¶_¨ú.?¬û_y =ÖZ~šw|R\%­Âìéx"}æô¿£ß2/k;¯_YyN¡ó­›£é¡Â+óµÔíËw©9]’=>å¯x×Ê\¡­ê¾‚µá–V—®Œ´©¢ÆÞx[1dšÖ”øÓ ^bäý¯vÜÅ´K'ÝQIãáç¹"©u/¦Êø0âWõî>zZéEñ)TWºØá¢qï"¸‰ŽÚd×5ÛL-­¬f&¤²¾äáà#ÛOê¶J}:}íÒAõ½,”‹DîɉáÃU·YCßN‹R¥6Ÿ7éüçHlgïmp=Šþ"Úº«¦¿sóWìÛZíþÂOú…¯t6¤²¯¯Ôd}4B Öuá$¹©ß^ÍA{øšKÙ üJ?—‡—M76Ù¬“Öû}"ù¤\œÁ*S\YW*ï[GêØ) 6—߯¬×©æõå>Wûšâ㽞>;­çšü©ŸlÍÉâ1YF¡X„µQèŸÛqß®Éz̶\‹­ É>Ìí-Ö‚;öû Sï·¹×±ža뫯ÙÌn%Ýú]žG^õí„N¯¡CŸ™[úJ彘ÂÒŸÛ ÐC|·N¸èÙfv1û³mÜý¹­_[ ùeM·êôf‡¯Óì\uåM龢푋4ê8NKŸ¯gé¥~÷iÆ¢­ØË%zW,ÆLÇÆ,›­$Qi­[áå%òÞ“îj—>JW¿3„¿/¾žNe›K2]ÏF—¯z¥êÔý2äÈ$uLJìŸlXÉXÍÖ¸mo’˜æIÌÜ©ð`¥ùr|ÊVTí?gäý¥îoå”ÐþÆ€Î"Y`õ`í.õ=ÇÚç’ýåâ§jZ±WÐ)ϲd¶¾^È âw¶4YéweW¾6bòj—g¹…@²ëÔבC¿»ºN´qßB—ì6GÖÜÖ=XùÐí,ϲÈ6Heðý…ŸV+kΛ Å¡Ýíiá ß¥õÊr9&1§Œ¨·ô¶Üò4Pߟ0Ðé2þEÍWÁ÷sLøGáÄì±ð’•µÂøèÚ¯×}bWkê’ oMµny»3Ð÷çÔÿc²kk,K¹xÎE5ƒþ#ÎyÞq’ˆ›”þl+ßgµ¶9õ-Ré;Ñúô]ÚK0ï ¶“ö«ªtÚ:: ú©…áÄ¿œ5µ4§1Pÿ ¿!é®M³å潨jkéºVò¾G‹Z×)<„óÛQö—ó$kÐÑÿ=kÔÿW‡Ó‚Y¦eM$§Ô—0˜(~ hs¢(Õ'À‘Êu Ëظè×'¦ðÛ<-ú»•/ÅŠÆb5ÀzWa o‘ëÙ¾¸JÜÅD²ÿ¸–~ê•ÍÆïãˆ-ܲ_©?K¿‡ÛCáÀjÜ¥±.†¿jtk—¯ûÊçï¾€×ÖXÜ«¦ï>/^œðb·_w´§kð­'êûŸ7É ÈÆK\䂘NRTÆs´†Å€]Ï×ÄšË-„÷Mµ|Ç?x³ÚZÉ[ç÷9&Žª˜ÙÀþØÔ_׿Ñk.³0ªD”5¹¥»*˜ñmåUä&-mVW‰ZyÅqe§{ƒ;ŸÃÂmµÊ’玒e;×Wkéiß°D-ôT^Ž•°M¡t¶ßÇÎrxöò»®+¿tI¡é£©qé+ËìsŸ¿E{ˆæœ*ü(Õ_ð­Ûó©÷á‘s2ý»Sq¦žÊ¶3¾ðoùk¡Y~‘wôì¢ÆxÛõ“Ö¸é\|ÍéUš0d!1Å ïˆößî5fs-„j³—§¾Ëæò[ÇS´~¦ûµ©ß¡)¯hlJzY Òc®F±Š¤>½ÔF§î¥±´»€úž•0—ÐþÑ~WícLÓ~ÙÝl*Uùšó“)ïAçnεíޏ[øl³£&×[ýMU"êÛ'û`NyÙ%òex©},ÿK¹ë Õ¥k`ê!£+ïµìšƒõ¹û êþ‰ã[®²ûGTû9n¿}™Xe~|¦«»VÞ„é/Ým‰þ]ZÁ †z°Ô=aÂ~xݪßFh²˜Ö™~Ÿ>zf”iN¬º|ëÛ¬YÒ›Pݯèù§›¥§>^Ýà}ÎòSó‡âæƒvý_±ûîÛMÇiñ¬zºjÓóÑñù¯¿»ZNC€Äúƒ“®£ŠýæQŽ,­úÞýíâÛ:ÓTñÌämêA ý­UgƒÒëé@à­òëãgM¦nÇr»Øe¯µŠß~ªÄË{û6ŒÕGs.˜>åÏ]ç‚Zçný{øq¿gvþ¾7íÞ:¦h’úÂ÷b)ø­› kÕûîõå°–KíY=¾\œ—––¥ðôÓi§Ç?HL¹MÅk)o¶Î }w”–ªCo…j^KyQ>ýbZøàXÎRŸîÓÜêŒ[î·[ ìRׯ^¶7bñgºl~–&v ÷ãâäú±@,{‡ÍÂÈsÝ·§'3ËŸ‡ÛÛæðrÖ©žÈä ¨“2‹ÞO´žíJË5™Ûõê6ìAaÚ­«Tùuï¾_¨Á+-`úVkÍ‚§Ÿ‚¶û­¦E¢èrú¢*ÍÀ¼ÖÿÏe²š©Ó2¼ÿVxÖìM}ÜÑÀxïØ]gÁãÆ´ßX2«W…åüQéJÓÞdY¶mrhe=ZZòÖ4•]_²m{ö©(ö#3Ô±>û:¹jÁ*RzDV¥é£½0ŽgAûüƒ½þ÷ŠsT1}óqJs&ç\Ö Bõc¼ù=,Ôri¬'Ù/jÁħ5Œv÷äÖ¿ƒÆ™^á÷NÿŽ¿Ow‰<µÎþ=|ò0Þþ»iqrõø=¥Þ¿’ã÷Ä$Ék,±vHÅ7¢ôÝ„k¤<Î-÷Á*äÃ[Ú¨ÇÊ©òcÄ×Zv³µZ(¾Îé.5­÷4½Iïëý¿KÜÚÚA.*çì}ß³Ý;^|n‡%ñ¾ÇëÖ·[Áz‚^×ïz}w-–±áz)L·ë8×ñéþLg/‰Ê£¯Òôñ³«U<¦ ÙýnbúâN‚ÃûÝCÉËaŸÙ°eÚšýJ¶CÝû§çw´Š#K%žêqú–ŸAmcœ,»,”»˜ÄßQPß ¿W¾×—É=~Ð%¶Rö%žÒþYpœéBûZSqÉpÁ {¿èу¡]K÷­œ[è¶¶<ÝP¦ž$Îw*K㮯z×—ãõì<§–¬¾ÇáoÒ$´ìk‹¹Áýmkäg KÔ¾Ïsû˜ÇáL¾><ü‡e´”II´_­iç5—ã­ñûôÿ2|.þæpùùC«#ÏOjý“=ÐëOÓÎ5LÉ!gŒLéû½æ)ÀZš÷íþŽ%E4SyÙ¬Û>b:ë X¹·.?KƒØ o]ò¹ëò¿p8L€)„–ÎCõÆRO)iaé›f|¨}¼¶dŸ~û’Îp¾²Ag³Ÿ6µ÷Ëø~­“õªÖ/¹0”<íÕÆr^zü¢Ñ™uFWÆ›2¥§+Õ/._¯ìúóáÏ׺Öü’Û†Ó’æË ìäºýÏ7›÷‰@‘xZå(ç – íg×öЬ/_Å·â_Ìbñe–ý2C¤ÃéQå¨×}§Ãk4~ßÉ3ÑÉ›Z¿Ýì¿]möÿÀŒå¹qi`ïø7÷éÓßO£cýïZòâŸL)iÿ‡ìgzÐ1©§°%þ/KuUþç1áþþqPç”äîäâˆ%q'Nm„€‘ ¿‹ÝèL×·wžvÝåîs4ë4Qr:p²Ðä¢DŠ ‡tpD‰Å%Î^nç Žãœ„‘È%#¹Ñ $"%Nî@Q'$'¸¸EÁ%ËÚÈrD=ºÄéÎã„^vœ‚âN‘ÜE 9$¶»R‡Nˆ€)BIBr€â (áÊé%Hœ‚q–éAA|ÇÚÖûxä.óIÚǤâHt%(œD N¥'8’[j•å¤E$$ìÜpD”N9€'G=¬ °9IÎ$GqD p$ ¯,qIĉ')%9œ½»! è„wpë,@¢D¡NHH^jHB!Br#¢Kœœ„áJŽDG(A8éÊ"''§@âP—!"P é:9ˆ" $îqÄANG¸§\qq88pGNIŽDä¡Ç£œHŽ%ÃP(S€\¸œ Œ°œ Ò”ŠGÛ·DJR“„sˆ‘#‘ȇ'$:D98N§AÎPtÛ­HŽR‘ÀAp€ :.öÅÈ’N"H"„tË”Ž„ˆ,ÒœN ”î„JP"@“¥¶NDç!N%NAȽ´“¤D‘D8îIÄ"‰:qB œäÎép­·8AÎJfNAÉÉΉÅINp‰Áá yfÖCÎÓnÇ9/kæ)IÒH#‚q% €”å8"t#ƒ‡9J µˆèINr9rJt‘EzÝaÑÇ¢ƒ“‰¤–„„ÊsœEN' BãÍ#‰NNwµg' y`4A)N:9Ê€)ÄP’:–Úprœ;—!'@@t:C›gNä' s“„ç!pNÈœIr@‰8â8q'qÂáGœ/lçB$䈤ä‡G9y¢ s€q'‰(p"] :':.Q8éíYȤ"àŗI88 ts’—·jH„ 'rt“œà! NÒ#’ˆä”J%æ¥À@EÐ9 rprIN$à‚áGI펉" H‡CÛP: D"Aƒ¸áÉ'ròÈDqptHtá ¹ ƒ’*rr'JDs¨âáÎH§:w8‘%⇖$Dä$“‚!9”D"Br) ¤ëÍΡ8ä ‚:%8àG$Bw) Rs§N£¼ÜŽ\áÀ9"âD‘G•¤Ž 8èwäPRr9Îr9J $œ'9Êró')ËÛtœ$”ˆä‰BŠX—.tâÉ9ÁR "”§p‰R9!Ê ç'AÉ9Ir9J(9NBR8D) 9sœœ‰È4I)" ›‰E¥HS‘Á9.‡)·%!(ÈH%Âã¡' iH¢JŽRIGB%@‰Ôˆ§)HèíºÔSŽ^ݸäW·npå’p…rƒpC…Î\E#ÚÇ'Rq9É íÚ‡"s‰AÜ'!:pG$Q"8'A¹8t$ã1Ç Èàw $‚N%(å'9JIÀI9m¹+üµ€s‰Ï˜QQ88 ˆq:¹Dè眜\”œá£NHBGá[jCåcœRt$JRtE9Ç Ó¥9ä/,$N$)Nr‘A—!Ü ¹ÂÅçcR JN‘;œ'^Ù$lˆ…A#ƒ· p瀎rœœ’;[Ù™³Z65kLÆ[ktâ$œäœPŽ À•8Hå"B'#¤ ”“­ºÑ :!Î{i Èàã€r‰ˆ’’ç ‘è㜎:ŠpqÄçEÉÁJ:C§'“P+¤¢IÈRY ¢rpQƒ‡$rIܤw /2Vv9H¯3œŠ9GSœ§ "qÈ—$D 89.r(PˆâGNHr…ŠIÂQJI+nË— Å;¤8NáÉ$p . @AAÜKÚÐ œƒŠJA9QG.¡Î\¢Dœît‚N$äG%§IÄ Ê9Ipp¹Ä9„½²K§ ›hœ££¸äàƒºD)Ê‘œžÖ@pœ.<´D\t”¸‰rn8àR@rt¤rNˆ”¤päáÉÉÅÉ$„œHî!É(”\¢A$çJf$rD')ÉÄ’D%ÅÉrä€N $ãœm¢ œàrtRA(w"w9ÎäHéŶèà„¢PH…'á)G9 t’"åÉIæ %yÙÊNŽr‡Ž á'qH‡m)A'–)ÇQÒœ’œsœ¤8‰I"8‡$„‰!Ò ã¡ï{Â98¶Èä9JIÇ °Îw¶'N‘¶âä'N!#P"G% ‹‘™@B{XŠÛq's§N#‚äŽ( çœ Ô‰ÂNu$àà rs¥Ï5 §NpâIÜ”NHCŠ'/m$¥)Ipé8#ˆä ”â爎"Dœ§$Nœ§‡s¢B r(pã¡4â9=·%$GGB!ä„f…G8ç9Ç)æ’)GÎIŠIDRq É@:$@ƒ“—'·cÈr“7q!ǵ“’(ç"qy§ qÑH)!Ó¤£’:N%!ÐBâ ²s©¡Ã¤ç%ƒŽC‘ÊÖâå%)N¹â:B„‘! Ûvç3’àóDŽ"IМ—$"IíÙåÄ—A{hBó­‰ÊD¹rq"q8ä„á’”äQÓ£œNtä¡:Pr¤N‡IH”'NàIBpGà‡BàéPâ"ç.NDâG8\Ë; sˆp¹·gi(J‹„™Ýps@€ÀˆwH‘Dœq'Rç ç9žö¤NqC‰I$tDD'::*!R‡@’rIG§p!(ä‘.QHG8â'’P¹8ˆN"ŽN‚œ£’{vçJ’rç)ÛaÇ ÇI ä¥$GQEA8' N:8<Ä…Î::éÄŽ8p„t¡Î ’qA¹N@ç8Eƒ¢¸AR‘ ¢:DáBG8ìÜ‚t“’':$Ës’†V“‰É)ˆá%{dç#ˆœœCl€‘ #‹¶í/7:C‚äBPB'N¿&GÛ}«Ro{¼s¶´D9IÄ”öÎ w(€¤„áÃŽœG É:NäNrDP9äHçµ€;Žt‰ ÉÑ8 Q'Žw·m­Á(8Ó‚:NI' )Ä„£4ã¡Óœp圜 §'¸$ä' éqä D%rã„¡ÇrD sœwå"NENŽ$E ÈI R9ÉÎQÀJÛ(A„â<´ôÎr“ŽNG’—9Ùœ”*s4¤Cˆ'åÊ$ :S‘B(ç$S§: (™¤Iœç#‚²Ü‡Å98鈜ŒÌzû¡ºg[n¤>wRÕ_ZŸ9|ê``&“Æ&€˜`~€†|ßà¾o¯¾oÍN‡!ÏdyÈä9óŸÀ½ú’*Œ ’#"ÈÈ’ƒ#"HH2H2 I$ÏÊ2ÊËÌÌM0J’ÊGxG1Ï<ÁÌMÑÇ0ÑÐeéÓçùô°ó·¤©¶ÕµlŸ¾dêÞµKëý4L½3ÁâX%€‹R£Pþ¯“J‘J Ô R •¡OçÓ€¨TäÎR¥K’ä¹*Sç…ô='1L»©ô, ”/,-@—‹L)”šÞJR¡P¨T* E©Q¨Ô/ ,À°°±°°j7veB¡P:;®ˆº²²/îìêT©•é,@RÅ[lRÄK±FÅlFÅ,[ű þËı ±À°,…2™vT»¨*%B컿 *—MÃ,‘Æ9#’’ !#!$‰"ÈH2 Æ©DD…Édd ©n‰¥ Ré&ši$.ˆòG=sss~76í#E… P B)C@P¥AAB\%0¦öSZ`Ü …F›Li­@\O4¥Áq“h(.o©ÓÉÑEõÕÌÂÍ  ‡ûÚE(6)µ ‹eKj–Ê›alÚ6Øml“j¶6VÕlµ–ÃfÆÆÔqQ ÅÇTrNOáý]ü—VV¶¶ÙwðÛ:Þµ¢(¼â²ì îäª:»ø ¬î¬¬»åÝYß0î㻸ë®ìâ²ê#:²¿¥áÞWçïÕóºöß:²âý;ï·G?¯GŸ³±¿—^/¶ý›Ì&ÙÞÛÊ2ã¸ý¶»ø}ïVÛºöÕÇã¯}nË´>×ðx¼Û5÷Ýï¤úoŸ;ïdï»MܶÞÝA—–tEçevu·Þº:ïÒ¯ÇSíYÝ~_›ÌPX‚–¹2Ïñ«Ä"‰/ͯÛíy•ÖÛºüûÞÚÝùíòо _£"Ö´À@„µ¹Í~«¡èž¸£@F¤y]‰&`F˜icÄ|ilç1D(!cœÓÜÚ¿eáj7‚§³kv4š/ôGÆloì‹l†7Õú­Ž¦ dië²ç¶ÊEöõø5öÅA][»«Oñ·KVÖ«±*}buâÝI¶ÏY§.|…¢ôØÆ ï8+£^áuíwNBùí‹…à åª]áâé#0†A¶sÉ^XÆô™‚@a$M Nè¾o 8Í›ý­ ž3EæÒ ¥$­„¨ZjݺäiìÇlLŠ÷ٺܚåû³V£mù1Ú ±†–É]‹~ö®z¸ÂIú{‚@ÌgÁA$¡ÊN¬ˆÄ ·ðRü™¼Û°×F µ6*‹bçTž\¥º&*žzõdŽ^N*›j[h™ˆó€ýè¸[IxfmFÛ³,KµHÊ›í¶ý |øž‘öؽmùl:6I —Öm[è•9½†âx6ñH“G¢º5HžN¬Ý• úB` “#M7²k³ŒêÐ"cb‚‚ÈŽ1ÇÃçTL`d×ê™x‚)Û®vÍO^ÿÄu[Sç±ãC~“ï^ LO_ZFnÛ,êÔؘ¼&¹PÖÈŽñ4¢‘Í5ËŒ±3µífŒÿE‚x˜\yÇÃECÚÑöOº¾F>‘A€6ÿ«bùòL]óç_Iö´æŽg7+¨»± Ö[KÒü{ã^©y3èâé¼×ÓgDôÝ»ëÝ碊tE|u|m¶•þ-qÈÞé£M«¶¹BÅQüõ£l>ÍßÛËÜ_†¾nøîŒ\Ûyw:©#K~º%Ö»Ëä¹´z4ûö}>ö/§“i²&b~iÎùvu©ûžÎë=g§­ìôúÿzª©O|‡Ø'…^ÁáOÂñSÁãÃÁ⾺~ý~=ðgÁ¯€|€År‡%‹\V'â±xË´©R£Nè©P¨î-éÓFTjöûÃp·/†7CtÝ7äÝ(П&D‘$(ŒŽ8ëÚò¾¾‹»Xˆm"ÈÄD\þ=Sï­MPû4µ¢ÖšËX×5Ö³Y®+®m òÑ>TAZ6ŒQDÚZZZ’2H·2¬²Ë¶–Ø¿/î.Ë»›ûÁå…ÆX-€X%`€ ‚X @¨T ƒP •*¡E¸S((mèh-Ú&˜’C(H¢†¿%{’åò‡ÆTŠD¤€1«¬kƱ‘—A"HÈ’$$„’2²—WS³ÎÝ]›Né¨.K¥ñ|\ä‹‹rÂñùO¥ézU"žø÷Ø÷ÚºÃ3ßiÖ[ßœ~{oä¿=ëzÛov’ªùi^óåŸ.¾\ùrùbÕ PmBÕ Pµ BÐ DùE¢–‚Ú6–kfÙ¥˜YÙ–vxîU³,ò6nBð³å‹+Ì L­¡iÌØÌ ‡1RtgÁœ ÉçIÉÙÂrô ‚‡åPÐÐ¥:tÚe22˜YÔ´°,,,/2KÀ°j^8ÌåBöóó^ºT¯ §…^ ðÂñxŠÂÀl°*D¨˜Ó `O:NO9<óÎÎN\Ñ9=ÄîL›)ÈJ)*J¤«)*Ê$²¤²‰)++(¥²ÌöÌLL6É30[L“M,’92RBÚTÉÍ6Vkc+—§}m8¨ÎMŒg!8Î3„âN³³Œé;:Γ¤Ãò¥”e ffRBIIIc´$dÈË• ”™iá¶ÈÛÛò"sh‚¥òµ(Ú$ÚTl"Ú¥6¨Ø¶&Í•f©š ¢)Äà(ä‘(C’¸Šœ#¢—òW÷¿©ýKEvtdwqÓ6M’v_Ñï{ºŠ¯ï,ë³Ê˳Ύ«ÛUGEÝGSÎî¸"¨ë»:ò뎹ö»–µGQWÚÝúwy¢.¾ýoŒÀþXóʺ}s{iPÁ96þ-xŒÖVöÒ.×¶wywyu§qyÙVvüÚùè_³óÏÈ÷dD^ÅÞ½ê^_o{myãÖ츭ö½Îì=.­+²¾wvükÉ$6–Sˆ0B‚¢EÇÂ7ûqO”žUù¿ou½¸êý—‘~o½Ý¿¾ÝqM¸,‚PP@`xÏ9ïoŒ®ú+(Ì~-å§·nŒe¶ëóÙÊ̲é"£‰°QçÃÆk{¯…êÔèÑíeÞÚˆ“¿-ç¿5¹ûµ¿Ò¿/_©zü…~û÷žïÊÂBÖ§¤Òçö‰¾ëíy¦TÄ'…PZ'oÞ©q”Â5ñµp‚µùµÀÖ×—¾Å¢Ñ¯Á†(…óâ%uü}EÔ×Ñh7o”bE»QæX=\ñlOëëV÷–×¹DŸÃ*ŠÇ—šŸšp  w«­pÎM´#cù¥§ ôž¸‚4ÑFçǺšøQpýõ¥ñ#QOEóY†2ëI°¢aTÆÅû4š,$¦*ŒR§¶+]+ˆ>½-Ú›A‘8ç£-mF ²²Lm•µ\2Ñ|ˆ…ÒMj8¦¦…$h£p Ñd1QðõµOð=ElmH0aþñúZ–œB{ûOŸZß/&½ŸT4ÔÐRÎ(ÏM¿M­!7­(…ÈóæÉ±{ã’Îé5V£i–Lª=š‘?À’`Úmã艌3FS–°Ê-5Ì@¤Dîľ!< oôlÙèßQÚÇMˆQ Î(ƒü&ËTSzEi”–ìv (m7ûvÒìBMÖ¢ˆÎ­Eñê"oEŸßÔù먩 4/‘9­ –ÅDâ7èÒípÖúȪá~LhUžMLø({Ú ƒ¶cŒ‹Emøí¨[;q¡Œ8“ˆFÌ‹‚7¶¡Ø¶þ¥Bۧͤ¾Šr‘2ªÐ!¡9Ëmqñ?ÇôõcåÒ‹Ü×Tn÷𽕦QµÆËµ¾ÔІ† Œùlù7–ÙV½ÒR7j¯å_}¢d˜w÷Õ¾lÜ›óu/ˇŸyÿSç¾Wß%+3µÖ_—ǹéÎhÆl\ê=iݺUw”G‡ûnÍS­m§ÏÆ×j¦kkà©¿à }yÓãq|¿j¡š›ä|¾mMhçÁ|ÍZººŸcH|Ÿ>@ùÉ>CäŸ!òBY¡f%š–xÂÌùœ˜·ûq®5Æ®4ÅâžK”yC”q8¦Èº©MÈÎŒ q^ ¥*ÿóZõZõ½]•lÅlM–Íf½f¹­î¾¾³¯ç|çÎùω‡–¾ L}¥õékkN÷"[Çk“’Hddy$$ @$,å%I@–VT?¶Ìi Í©1ih¤óŒö‰}N‚ð)ÓŸ%9xd Ãü•+Å+ЯJô ‰°Ù6l6l¶±°l6&Éõû6Oàëâ?2à lDCÁ v`FExÜdp/®ònQ2´ò7×·—\°–H‰dŠØ‹b¶!b–-‹bX¥‹bض)ýÖ ƒ`X6 uRŠ ç¹'ˆŠÛûq¢&5 ULpc“˜áÇ91Æ91ËŽLràÇã–§+Ê®8Ç8mB×–º ^W•r\¶@µµmmma†ÖÒÈÉ`Y|±ùt€º¤ J’ÙÐ#CB4)BCBPÐ @44%ãýÓÎNÙ´ääó–g)dܶs“^È^—fFRë#w¿koÚKQm«m6«hm¦Úm›ci¶HHH2,…ÒÊ|²’ËtÊʲË,å—÷ÝÕÑtÝßå $ÊrîXËb)©#d‹­*!B|qZ ú†„¡(Š€¡¢‚€ ('$$$FîRYId-LžS!•ÆâëÔkÖ¼V½¯Zõ}i±l>ml6 †ÄÙ6 ›-‹ì5Ö»äÖ³³¯k«Ž[–oL}éi^eKܦRú8Øò—×77¸‘tœIÔIÖrvqœggg Òq'µ>] M¶-†‹jiC• yL­: ¤÷…IJd®eçTIAVÉU´›#j-©l¦ÐÛcj¶ØØÚ[ShlTà”W Ç8œçq\IÅý6ã¿¥qý,¬Îò[Y6ÝåæZtåe$óúWw‰GgVSüyyÝüËú]Šê¾w~.»¿gw—uû—éøªã®ýêý?Nî:î*¿¡Wã¼»çVGgwì´¿gv]ÇE|®ÌââËñ=ºþ»W§çëÙ8Åý‹b[²~šf‰™EýÈšãHŒÍÏ-Ý•y[Û:›]‘Ý–ûuzq&@þ´â¤­Ü1ã†O·tî*ßËEZ°yöºìPY±¯ ,xîüwÞß;¯½®½­Ýß¹ÕåÏ›²O¿>ûç¥ï;ÎÛWã'­quøêòù]Y×mŠ/Ó;ß™ù÷¾KÞÝ~{rýkr+"‰¶Î8ìCfC‘×û­_"ì\%ôð°08Çv%D›a‰§Q ”m*8ô˜ Â/)<ø÷Ïz(W»µÌ9Ç:¦!6šϺ֗õéá*kœ#­Lœ÷ÑÍÍ/:Ü:ãJ[uÍ797§IkÊåúóO7œ„ÑÏÓ xȺIWGMe3×%(ÿi‡ÇÈb]5JÚSÍi.¢)À®:©rQ6¢“5Øíµ×íVº–ÒK±XÕ0oØ¢…AÏ”ĸPPcFb‚,hKøxqAf§^Er0‘är6èTd’AQ5ÄF…MBh=,LUGƒccpj‚Ž`¿¸ç®rÎaùØè˜ª3êª"ôF¡[/‡¿ÕxÌÏ*ÑÑTÛ5…"ˆ‹ >^þ¥õ|/¤‡Éˆ0S6y´ÌÒš7d·‰‰ Ÿ+ÈØ Ä…ÍàG¢Q¶bé%ê‘Zc>úÔ]¯eƒiU$R-}禣”€F4õÒW”ºÓ×þUµ%Ìçµ'lQ¶þm˜`%P˜ö6&æýé©sÑÏîµDcÕû/Jüv+‰ÆÇŒlm¿E­ßÞÜïlOÑ?Çp¦ÉŸ’[ôŠW>îíÍFH¢¾XˆÔ`†á;ž”ÉlNÉÆ1(ö)ƒ»­ÕÆ{leÕç»òtBØÂ!¦ kß\®—ÛJ¤Ø úh®´¢Ümý‡ÇóÞòöª~·uQüW=ûÑ>Ý(ÓˆÎ=­tDj…û^Þ×Z²_š·Zø$õ«ùú÷çr÷Øáð¤×º?­­0ë³#öß7P4ü'9¾MQ ¤ ?V/ÎèŽ[$ûû¿5Ü»j#¯Ñm{Þ\€ÅÑÄ#h>°ScõzïwCoQM¼®k^ÛUJà¨å¹’ú絨ø˜ ÒݰBþ'£û¨/{ž½Jl5¨K¨ilj Ÿ'£¶Fÿ è¬OþwɹÂm6V|ó'¿:oÆñ¿’‹«Ú?€í¾«çšöð܆|êø>ƒWÃð}oÌùN¯Ê*U)÷À~Kؽ”ö^È iMOèhJ  R˜âœN+߉¤òÊŸ$rG$P]—•iL»)”òwU9{(X\ J•>`1‚FF¤a‘Š[$’2 ŒdljF–’X¶2LØPT0-Âß+,wÑ^\É–Žð1qˆF(‘¬a±‘¤hFa‘¯É‰$$$RB'åÄ‘DBB@ÜÁnGo$’d-r¡¾ËùbO˜*D jmµmµµµ·hÛmÚ-­¯»[‰Ä’6;VHï¹@"…2i}FÊ ÜŽJ´¿ÿ!#F4#R5#ÀŒF0HÄcŒŒcØÆ4¿$¶ÿ)Ie•–Õµfe•³l‰eÀ³½½ÉßSžóûßï¤R¤l-½Z^‰zèW¡z Ñz/EèzãRÊ$„’,„l)yŽ8ÞJ<ƒ%¹+zÍ‘&ši² ’âöL¾Ý±¶M´mm[[a´Û6›kå[¶ß)¸¤ KnÌÛ 911156úi²3Ï9<²Ëoo-ò^—¶³È$ÈÌL¬ÂÌ ÌÓ,Ë5¼é8³³8N“Î…éAþTR&&·–RP””–S!qpQDÓL\\QomR¥K`9ZtbE¨œ€)PyB¢ ƒP¨  ¨iPj%J@©P©smbX–Öe••‰bØØ–&BÊÊͰ°°°À¼¢€Z¡ ((h¡(œœ'''œžVRR_ñºfeen¥%•Àöý¿ÉüÏñ>×í¾ÛÛý¥(~>v¾ó7N¶ë[§X¶²3sZl[[n?§¿‡×ó;Näëø/+ú]ò.”¾Ý~õžv‡ð\vuEQÑ×W~:ìùÝÞ]áu×Ê«÷»¯{~+«ùÕçWÊf&`pd)ŒÅBŒu¦) {dæYyïÍdÛ}«ñåç]òÒ¾UåÅèö¼«"÷õ}ïJûjm­~{:óç½ø÷W¤óW†{ígwÄN¯Çw仳©ùù付ŠYD/íÚ¶­!̲Fkk)‘íùïuÝ~mÞ^öк&·eÖgxwheï´_ÖýköúÈ;EÁP¶$Gµ„ô‹áulš^2{™ùT§Z BW d'¥—7ZPAWº*1SHÓŒ$k'5õnÊQA§ú!Ë´ù®ìz:Æ:Ü1¯¦8&½6âŠüßLÔ¢zÓšïòií˜ÔZ½}i¢—^nµJ~TûžÛi‰¶—Ã`6†x†'Û~”A¯ÄæøÄTÙF&lvH± çãï5Ê¿ódØ­Xåø+§ØÕ¼ê²TÜOÚf6Ä&Í×sqÑó #××ÔÔº¶>CøÝÆ|{ÕŸ—©àY'I['®Ktf¿’ࢤYçnXز¡1QQeC4#P6¼•±ƒPFÔÆAŽ¡ÒËüÖožtÐÿ~°Ö¤þÂ\†·IYZˆq}njr5B~ÃÎl`öl@Š?íÅÕ|Ôô‘¯\N0LH WF¥™„|)ˆ\äÍçšh‘P›!|5E®Ó_/½½ª×šËûõæ^ž‡[o7óžma⟭ÑE² ¾.¢ã"­&„›hn(Ѐú-4Tøg[V¯Ey&GIƶG¤JŽs_—|¬Äom`{fµ+%pдL;¯u*&‘§µª\J袣DµûÉò¨SÞ”zÈ3<›E2ÀCÆ€ÄõüdÝ’Oä·l_6gðÙŸÊÏ“Ûãç½´,28Úý(þX›M­ûZo¤Å œþS\Ö¨§š{%?Œ›Úºµseˆ¿Äûˆº_ãßÓNli¦æ10SdFŽé<2¡œZöF06²'?Žìc„z³ãÍÔÒ¿OÜüüî¬}!€­}‘M#ùU¦}Eª­UÜo`hÊæ¡5¶ÈÛ+ѽ©Ýõ¹tãv½œ2Éüض¥¼÷^?Œæ–¯åZ’K»ëõß]D=ÍÛU)£0EߤsÝ5º¢9 9Ïéó‚×dùºØT?ˆ’ºž‰¨{Þ&ÔÀ3Hߢ‡Kij›f÷øÿäÿÊ-“ÿeÛf÷ßçßÜêïî]ýο¹w÷.þç÷8³lÆÍ ñ,ñ bA1†8q®;ƸǓÅbñN.Ï+\ZYÙÙ^e̦PÊe Ò d(……!Vÿë „ ¤)PŠ"!Š&¡þ‘¬LU#/Bk(e#¿ ¥þS)>VúPÿêÊ£(Œ¢©(Ê¢LL3‰*ƒ*K(²Ë#!"Gjà jZ9;P‹/_Írä$L¡Väˆ"‘"B&$ˆˆb†$ˆ·##Ò68Ô-ã#BÝ###-­™ Ëe¶e%´&&%æ9’kKIoBT•YD”IRT• D•••IFVYIIP”%”µfI™BRQÿ9e•-­'Ÿ™™ºº&I¯Ùçšc/i<åùþý¥I)RV•$¤R¡Ç|Ä¡J™&™ ¦Y’`þ±˜™&f`˜-%oÏñšd䦘˜¿or{ZjÚô½æp9©y©¤ÿ$ d@.†Vê`˜f–VP–U•%e%er#ww:O=Byç ‚k²ü(%º”ººšk‹y¦2eÅ(…Ð)B”PÐPÜ4Ô)”˜Ɔp. ÙÉçg?Кi­å•··/L˜_Mq{.FY.¿úÊ ©+),«($¨Êʲ’"È2 #ýÉ"]2„­Ó,¬¥Ô’9™þ6âÞß%pÄ@5ð R H `X-E„!a„†„aa!aKR(ˆ­S GZÚ„²Ék-«¶¼··2Y*aL½É¨¢¶¤(“el6M•3TÚFÛ+;ƒ¢âŠ î£¤;Ž„?Áþ×öîþÛ¯í» :3/ei-ïYy6:þ}®;¾d2Ïèuý³ß¯tSõö?=»²»ñ^uuçuýµw•åú[õ«»çU~õÝgWyÝ~ËÎêü]w˫Ⱥ:¼“ÞÝÎÛ¼ò¦Ý”ûw×ß^žÖ'yïolììã“¶µ~ΫåYø»;éߟ›¼ïkvY7–/íûBêíj¦b:'_£A¢LlÆg›@”CÔÕ!€©Ä4LMÒ-BQ ¯<[SHÖ¦áöÒã¿Ù‹”Ę 9+¼î²*ý?%׿5øòâïïö½·uúöô¯mš6·öö}kFZùZ"óŠ8ÜQ½y+E4Šô´ÛP‚ ýÅVÛÏ6—ÑdY«Íýi5î_¿{Vš>‘ÁãÆ 4gÙzÁM¶À+`Ó`}j‰Mi|çJdoŽ@ ðêÔu‘ êå)ÉÞï{f ×ÊÝ)á4. ÈjŽnòÕ5¡Pk©®jhV0ü½Ïº>ìÒS›Û£ù_×±š»ã•yÄcMÕrÔö¸ÞïèŠ \Ú{Yµ˜‘:g­yÝ*–Ì®(¢®|ô‰–jµ6E9´­™Ã1EX(1H<—â"l8äÈ-ǦÌàiµÂþùb̲~=’ Ù •Ù%Yed6Ad–Eã J01ŒL`·Œ1‰Š1x³ò\–,¥‹)4²6 :âŠ-¯ˆBföáÉò( ŠKý „ª$ªJÊ’¬¡)*Ê„F‹laFÂÂÃRG‚M»õ>üwqâ?Š}Žß¶‚*|4Óúµl¦¶kÆ€Óoën#54ZEkÃuÝÇŸ•Ä;®b¿ƒ5þµ­mNMOϱAF»á/jÓt`ëÜ–8ÔÄÕ!-TPÕ-®‘VÑJ3wåxüškøûç= ç;Zõ‚Ûü*~¿-@~Qc#ñüþÜOã[­_?"š6Ó­¨ßÎŽÑ{š «%wíÛ…ž¾B¨+Q„ȧÅ\„Ñîø’ôn2s,­› Tê5Ù5íÔIÒ÷ëÝ«|,æòI4J~ÇuSd5nÝ@6öIötZ/âµ_>*~Üý_ê>>m+¿$b0 ©èþ ½/[*zù?kÕdÈtßoš×ћҿeì[¯eë{×|ÏcÝ}M%)îôTSä¾fùQòZ€Tj+QV ¢¨µ iQù‰Êçå¸ÀƘ£ü±!ŠùƒÉœ]Í: \×$øÛ‹òüšÞ÷üÄT€>_ÿ`R H‚ ` š!XHRPˆ†ó X™ˆÉ€ŽÉŠï-vcÿÓ=]w_]Ö:îºë:Ýg\믮§]×uÝjkµŠâ¹¨WÃ\W+Êö¸¹,–æı†ÞÆ;Ë+‚ã"e‹¬ k-}5JbS büešS)¥1i4þ ¦Li…0 ( Ô¡¢Š€((P ¢‚Ôº½¢Ùår÷Á>JL„„lpc?©NA5ã‚FaQ'õ„Cp‘±„JÜFŒq„qÇÁÝ— lvùÌ ‰-­­™eµ~_ˤҤ4©©-"’—ø ßê?㨌–Æ´Û_ãùfûÙ$û%"a¢‘¡;2Ýš2¥Ù·YºÕ…ß™âߟ^¶öÛíj÷æï½Í­žµFœ×” ;ƒƒ#Ö¬¬uÖàFº ÑU5⊙‘¸šØ;+óÚKl÷æïÏkÁí{‰{=ï<æõæÛïo lé™f3wÚÑソ>·´Ûv~>_<úË=¸p[Oö‡-iíP£˜¶4 Û.Wc0'=ößm›ZtKÛ¬W¶Båþ¬ûß<5íî/5~µ•öÛ~½ºÛRü--›6çÏ{³°Í¿¥öÉg{ï½Í«ïo{×½›=ï[Ûmöµ=öûÞ÷ÛaeÎܾÝîž_¯~}«ã2óÞ›ÞÖõ¼~mí¶ëíï)o^÷=¾v{Ûy³¼nµ¨UR `)&¢€ß@«×dÍ4 ŸÝ5Va»R‰ß[wíïooMÙf§EöÆÚtçæÓÛó±_‹{~=íÚüèõ¨É¬ÛY`›fÄÞ{ÞͯY›³ç·¶õæmç^½ÞÞ=»füÛékí¯kNíٖ̦ÜVZm'½{Ì…·?7¯kEùïwî}úÖø¶ÞÛØ'vÍÞ/cmY™÷­ë}ï{kmÇÍ^ZݵöËÚi  6ζR˜öÅkŽ «a]ÀP‘CA6ÆÝ‹JmÔ«yE v&4ÉeŠ\F=rÉûï}ö>Ý™íeïk;Ó6v'ÚÝzG³lPbM­†‰£Z`(Ì·~s¶~{çŸ/{W–Eem÷½‘ªœƒ0Õd )vÀ1WŽBàÍÀ0> pÊéšNŠ Ñ49e°¶¨‚Þ'ooH—ÞÙï[m¶óÞÓa¶üxç¾Ýò½íöy7¯$¼ÏÛcÓ`~;ÃòûÈö–Ve´˜cÈGë“/¤˜ [$mRÒ· Gí¯Æ¾¾÷¯ÒûÆâegη°[¶™#ƒlÅÆ‘ U¤…D2EGžC¬µ¬XÒûÙy_ž×¹lÛóÛÝ åêõ›ï{Å’õïxm¶Í¯¬÷­‰/fùz_i·ÝåŸo¼›–hšÖ¿Zôçë}íç½½ù¾sÊ×ÙúösÍÛïy/2ÌíÚÚûoÍ| Ø®Õ)ˆ0b±’8ä‚ݰVš;ñÚw¿?^÷Ë7hɵ—ž^¶3?³µí¿^÷¾hæÝ™m{yµž÷¯:Ë3PÉhÚ&olÛ=æ28ºS ådxÑ$%‘‘F ¸)\ö¯†föÜ8‹Ú±˜÷¯¾ßKå#ƒ„rA¸àƒÑÌGí¿>ÞwÀ²Ûyx½íìÞÙéwëÜïw½îƒ=çµyy;6ÍqÝ( Æ³Œ×Tu±TÚ6E|ËÌ/;^bý½½;i¾i~¾Å÷ÛÚoµ÷ß~ç¿6üÍm»aݵ›wíµmŠ&ËeN°Ž×R#ÆŒ¬mÔà‹HàÞ6ؘÙ-–#'Xâ’Èï{l=¶ÏmóëÈ }¼‹Ž”ö¶òÞ†ù¯ožï—Ýùö{Nö³ófÝóͬèàöïx¶Ô÷¯k^öD÷›ï}ï3Èͳ;,¾w†¶‰í­šn4ã°&h?6¯v7½»ëcïÍgÛ ™—Ïm~}kœŸ7š'É·Ûm¬¶Ú´ß{ì›óØ¿¾h‹ñ¾ùë'¬Ù¹¬‹ñ}ì_o½¹ãS~z×–üZ^öǶö5 ¶ÖÏn×¼¯mä{væûn<_kÛÖœyܶöfõ—ž²7ëﯾfÍŒ–×ÍÞßl—µëÛk=Ÿ­Þ‹í÷­³i2¶–µ³ÃâË @É&3#r`ÄäÆ&„ÚÂ"·EE>ØÛ#“#6H¬CžÉS@)®‘¼±‚æËmmÛ[ ª}½í^åœk~ÞÏG:ÛÛí½|Íß=íïo//M«O^ô^{Û¿G¨V`›"£jË*Ri¦FÕ‹ktŽ`-,¨MÈØ›ˆµëvóOD¶ÚüßxûÏo{J?óëÙëÛ¿=õìù³{f/y{`≙ PHÓTz4¦‚æœ÷4Ï·oÏ}ñö¦Ì¶÷¼;l{õ·µq¶Ì϶Ϸ¶%í÷Ùæ³ï m¸Èóç~~kñÚmo}«Ý*½›Ë­Ç#A’0×Ti«Þo6³Y_¯{½˜×î÷ez͵¶Ý™¤>^õ±Y»lË~yëß·¾ó¢ß¶üç—Ïmíîö¡=«Þ˜ìÍæØÛyóç·‡»Ë3ÝøÞdÎÍf²½­ïn÷—–¯pMí½¶í¼í{ÞÏeí•øïž•–Í_,½5½ëÉ{õïžè—å±wæÛózûë[Ø9;ÓÞÏ{ÛØ_™¯zË̽/79D›]B†±ÙŠDÅ¢tp² ‚i6¹©×b•ÚæA˜9^ß^÷ßw‹=;;ÊýzÐw¹Í÷‹mÛ“ÖŒ<Þßžï—Ûç¯{µ›Í7æ÷ÔŸ{ô¯7¬³IŶYí& Q´(5µ­1—T (µíuµ±†0Ø”®‚ ØàócF6&;\BwÏ;d{Þ¯[vbE¶ô¯ ɳcÞ¶=¯FÞýÚËÖߥ£ß›Ñm›C^õée¦ÓxÑžg,µ”ûëß$¾É²ó›{Þ¯-ž d¡£YkT,S1 ¸å. k›lZo-=ÄÙ½îÏ^×ËÖ×Úê&Å “ÑŠWPR'†>ˆ³JépP‚qÌ‰Û ‚¨QàŠÓ%ŽW IÕ:Q0VšÚÔ0‚ÔÇ,hõÚЊÓ@´>2u›b{a°ZäBÆ9€Á5#‰‰ƒ@n»LBk‰œÝ#†7Œ™#ƒLqÂ!q¦èã±¹"}%²–t„®n7–19³4Rc(àÛ-”Š´YŒ‘ m5\¬MP‰¹µîö÷m£Ók}êûí|Èç¬ñ/jÍíåå“mÍïozzŸ‰(œŠ&A=° 16˜¯ [GMûÚÖÙ4¥™¼Ü·¬öVÌ·½EM•FãeËÛA¤©ª›P ÔB‰¨ó‰1Ôi‘°—eÍÛƬ–¨ØÁƒ=vÁ-õ¿<ß~gç…陳ŒÑ~2~k® #4 FÐ4¢wœ`¶/lž¼žÛ¼ö[×½­ùï}¯ÒÏ›t(¥,JœCÀ‘Ò 6"¸ºâŠWZÝ{›“йÑ"sšœÚc8Û`šy¥l&ÙPP²A°#jF”[cE$Q¸A­ŽŒep ¢ª5FHÓVEC#c¢铬6È¢p‘Gƒc‚îu½fÝuìn·^·N¶{‹Ü‡¸=ÅîUî#Ü^å{òZ–­«jÚ«j-¥¥ð–¥¢vvwÖaÊ—Öñ“-­­rx½¹oÈ–¶·Ù.|Þ`æ'›ú'B8Î ìà³ÎŒë:3Lä†yÖvpÉ!¡¢ŒéÝ ”Pä¹y²Ó™L~NŽ_˜&›$J¿ÐJ J©*„ Ê„©(J$£ÆFF±±ÇpHÉ#pà 6±1CheqÕüÕŽK‘JàZå â¹Jå®+’¹ å,›$¼R…„ €‚là€³l²„PÞ]ÂZ{L¿3u—´KHbbH…‰V$ˆ"H‚%ˆ"""€‰€Š$ùqE ¶„QD7dHDZ‘ä $µ2^Wd#±ø 㢠‚È’,!µ´m[fÙmm»ci·jÚÚÚm}ÂXÈÛI1÷7÷•ÀsD',d)C}""Ÿ/“å)Rær_ËêùÕü«û*ÞûÛBm¨â¯/c¼%Õ]z$ !)©¦Rj{è¯HV˜‚ ·v¦ÚA\‰ýkgi*ñCÝ¢°NCœ¥ˆA‰ŠŠ™f¹úçxq_K|NióOZ|æ¶„¨õãß=¸Ä#0ñôšÌzñÆ ”U•ªT¸ÙfÌAŸ¹ª|ºZtdØx˜u¤Â&ÅkŒùáS:äæ­¬{s}¼ò[Þ}ì¾Í÷O­nÞµµç(á–M¶ ÊR¡Zá#‘¤ò5$"ÿ tØiy‚]þ³jþˆt_J(­QP0þ¿ÚvÎxÌálk5½FbÑ8þ‹…úëøbŸ5^4/ˆ7íÎׯ„‚7_¿Ö§×˜¼2œ`#Lix Ù5µ¢· "wôô¦÷ëeø>Èõ@i´˜ƒ…î±i‰1òjßm€`µµ¶qyãæ†u„¬cTR58hVšBUŒjþ«ˆ§Ÿ…»øEW4Ÿ:Ô¥³7õgÏMI¡V‚« ¸‘…p†´6¼ìe DF¿ *›(½*žŒá1¦üDÄš+i³Ò­•ZµÏò»£‚|寄`TÔÝQ]¸œ‘– ¦­l‡ª¤6¿¾Øpú8  §!?mýs><îiï¥8÷ S I4kZg ü/»57óœo/É ö¾5*¨ïì:PL›"Ÿ‡ÝÝ¿E™gÏ’îËžógßp sç …o¬ð¿Zû›[µ|¿7½ý<†ÏÉeüöª™¿©Û¿EEËd±î Gµ¯¢é$Z?ЯÍQ3«ϯÓîÕ¿wk1kFúÚþFºÉzï·Ý=SïF®÷oåz:OËÄ_MûWÚÏݰ筭ïsSž«z&ÚÛnÏ­ˆc÷§ÏUêüÓ'”M:NÔ™ûóóߟŸ«o^êê®ÿvwuWÝQ]×4Sj‰M¤ÌÚ ”ͱ[M‘µµ³i´³ ¶cº$rä¤é"Cª9#V­Zª‚†ïÞÿ}“rÜ­Öãunn7&êU”esŽ9DÆýØÓ8q¡ hcqG)´±¸e’ã&Ü™9òUÜݤ(|ŽDBú$"„‚!ˆŠ ‰"b¢R(¢B"$ˆ‰"‰"bŒšB@‘»És7ó¹r{l‰4YDƒ‘D±)„@DD¤IÄ‘D±DŒL!?˜òÔ®¶ ]1îJõ½*r¹2Ë–²F’†=S¸ô1î=qá®wYÖ}u×uºÎ¹×_G[\ú?Gè¢øßnûuÜV%Í‘QBî$ÉÜXʪWJ#*(JüiYCä "H²!!#$Š’"2I$‘¤q–,dv6,™2W"Ù^™Hmú•,)!HåZêñ B xŽÅ°¶%ñŠŸÅ>/Š|OŠø­•°Ù6[/ ‚¾Ì€å ‚ÖÒÐ!m"³³2…Ä’6%ŽFcý&Vbfa™Y„™fV`&d™fBd•,‰‰€™•–RÉ•–Yod²Ž;جˆÒK¼•IJrùjA—¥—9 Aˆ¥ˆ¥ˆ)sTÆ*¡h¡J ã… C<ó„åÙBP… AEØPX6‚€ ¼ 0 –\¸–\ŒÜÄ¥pÊW&ºµ¦»\×k|¦ËcbÙ²› ’Ùl¶|¨ …à p r2Êä$È\å#.~pd\»¶Jé&D ™f•šeþ„™&fYee–YBP%dØËfBØ#22`\DEeµ´¦H&Èîëºÿ%Gôqú5Žçù-Þö®Îìë5c”¶­ü›¯{VdjóÌêËF.îüwÎêò¿{»»ñuó®ì®£ª³º¿{¯èwuyÕø¯Ó²¼ºð¯*ó³;÷¼þ/·î~½«-ù»Ûuè™ÛùþÕzNT\VvwÇDÆã¹ùŠÓŸmç½ÖÛÛyæf¶¾öï¾l$$"™iG]û³^)*h emÜÂ5í«ŒÍ&¸}æ’#\Ý_^xÏ—á‚LA·æ”W•ïZ½µÇ|ªý.ý?=öõyÙøèÁâ``»b­ã/ðú~„šÜi·€‰ð:D#Ùà”/Æùólr&kYgDçÙ“ñ¯H½¿*–Éòz Cz[TÄ 3Mϵ+£W˜Ÿ6$¨Ÿ ×[˜`E mXÕæ®¼Ð6-S€mÀåjH8!I)rºÜæ©$ó}*`o7çïA¢²¬Ö‡d!Ï$OŸê8ݘÌþh¦^Û= —Knh…IðykhŽ éœV7®7æÑó碅å&™pF°a­1ù­—4¦AXSMhɦ‘* ‰§™­;[@ÅaTW]1úRÙ•¼°QF$ É;^3a&8éLGó7š5¨Æj„è(Ø¢®•"ÄýjÔѨ'ÕMJµ"Ñ}UЦðZ˜'Äë9“Œ®©«nZDm¹˜ßØ¢ˆk^̯ÖÓ(Ï6Ê)°”Ùé¯EѼҞs-dãŸ?9É<Üòû OMRûj ¶ÿ‡¾?9§ñý>Æ«ù»·t‚©ØÕá£rÄ ¨ƒêÊÅ»" íVt±£ëÙíÖžÞç‘nú¯¼…µP~·Uoµûv º\¼óHÜô:©Ïø ,ïÍ^ß‘Ø7ôOÉî×*ýõ%Kë2´*Ú“`­•µl–ÒmM–ÆÔÚ¶6l¶„ŠŽ!"\N¤ +km¶bͬÅ’|™òh|˜ÓZkL¦¥2˜SB™L hcæ.-1‰ŒqŽ-Å¡þg'ŠÉœ¡ŠÅ´Êe®H¨òöÕ*T¨]äÊwŽNÞU”YVU% YYRYYT” V£303LM10Tg'IÙæ&””–Rܘ»f&˜»¿¢yî..(9s/o}aQB¥,N!* ÔD¨5¨T*)QjD¦…2˜4)´ÒšSi¿à…oAnM•gœž`¾ ®$¸•mòe¯æ—!8“¬àN‰:Î é:³“ÛEBQBNÎNã=Ñ@ÝP`]T¨Q<ó¹¹¹'Ž,Œq,J‘ HD1±D‘ EÅÄEl„lmû$„¼’I Ȳ[K)jLÍ4¦JòòòÎ\‡÷‰ýô&Y˜FefRb`&e&I†VT%BFI@‘##"rè|È ¼„ÈC!Èå¶F(¯¯¯¥¹o‰ç'ä§tuœ''Rt' ÉÒà „ ¸i…5¦4é´7ø…érT¦S¸.2`Ü´_—÷0S§N‰ä•‘-²ÛSmM¶Ói´ù¶ÖݶÔÚڶͶ٠•””%”””’BKBЈŠî<¤DQZEe¤Pâ#4E#À#XÀŒc#ccR8Ä#ŒŒŒ#µ¾KËIm/ [Éî˶ؘ26÷×\7ý-öò7…¾·¥¾†ózÞooÞßo·„ë<ììé<󲄗 I B]—÷!qqÅ ¥¤Oµ}Ù"¡îQ~-Ÿ¤Ýn·M×YmÓnÆ›¶Ü‹i‘¿£ú?}u£d;~öÏ=uD½ºÂ²m=<÷šß¯ßù¾ÓïÏ{¥ù¬«í®•gmýßuçEÝø¿¥ÝøúguÅÔw¿Zë¿;®ïÇuøªþ•w^Eø¿KºýóåÞw{j¯×µK¬ùŸŠ­úݽ¾_/×å¿?=Þ¯m×Ë[yçÛN)ñ»óÚü]m÷»Ê;ÊÒýÌîü_+û«äq˜xþ˜š‰üiŸç#wuIRlŽcbi@ˆ®8´Ì•æTTD/Ëf¶´ÌfT¨“ZÒë è&¾›9¦ƒ)™÷¯zï*ÞÝYd\Ÿ3çÍ:ü^JfÝQe5ã3Œu§ZÞw4¶¦¹¼ j ‰V&…/ï×J†©³<ÿr#à˜ž¦»·̈MÅz¿‡f¾QXÑ[RïSaw´PÕ÷ãáÓb–'®4ãi‡9;^¿w8ôâŸå¿Ë#üî°þìjAŽ Ù׿Äþœ1%™ý6ëon…¸[‹n¶å¸Û¡nås\¸Úêä®®+Œ- {‹Æò¦=9T¾-Ës—·¶¶½È–×Ù-i(¨ÉH[ [l©²ªlªÚ-†Ñ²Ø6¶ml¶¨Û`Û«‹¨è#ŽI;:$‹œâ蓎pr@”‡@qqS†/þÈ!  ‹" H$‚HÉl$!à bÃaþ00e`¿ É`&’ÊW_×÷+UÇ‹¬.¹u§Ï>}óçÉu×\|—É[&Àضl+ëëIJnX 2Ì…kÛ*ë\¯ÈÙù8å©@© @Æ Q¨Bƒ„$,(BŒ0¤# nØFGC 0ÛÔ§_- 9BÞÆÇ(äçËëy7Õoo‘¾ë}7›Öù¾ß¼ßÎÎ$äë:Ì“3ÈM3hO)-¼Ö––ôQEíµ³mccyde­®é*HÒ¤*M*e5i¥1¦Mi…4)0)­4¦SJm0)´Êe6˜Ü£P'.¨.JsLÊGw ô0Ýeb`ÂB€ X€ këÚúõ+Úúúô+ëÿÀúûRÕ-X‚ ŠF8ËRÖòRÖkì.îËòóš¼™ IÕg@'Fq'I€˜&d˜&I˜f™˜˜šVVI $-¤Ž3ÕÕÍô0ßÉ€sR! È$‹ 2(jJJÂJ$¤«(¡+,¡,¶ÌÌͰIlIlI-ä$¾æK›æé¾.¯$’IdP$@$dVBA’BA‘‘$BI@Œ#c·Iid#KVBLŽBÖl‰m‘£#-¹omꨈ)‹ïÞ_¿~õ»ÆÖu¿ßÉû÷Üßü=x— ‡Œ€b † Ï3T_/¯^¯*ìêÑ›»».ï×Û¢ó®;¿G»uq×ïWau×îYý×]üNïNëñÖ@uû—gGîv_²ô£Î–è´öþ'ßVÖü{Þ÷§Om/ÄuÅïoòŽï;±Èæ÷ßu}{YÛëÛ_lsño82JüÖÏ•ým»Ïš8-~op«ÊÞȵ4XÔdQÃíkµéÍ£šzÆ×bb¯§Ï×µ~—çæîμç^vöûeˆ°×D©Æh±Û1hÅ?¥b,ï­-E ò þòkM}#È·æ¯îâ¬BmàµâryÅ÷^´ o膦 Çi`­[x°G¿%#Tçy|zMû•`Qß­»óm-øÏÛeëí{Ø@”EiRL fXšV?ÁkÕÓº­Ö¢?~y³œŒNR{®CGa©×f=k¶JFÄqŠ•hž¢BÉV¶D›³ÃëÕ E{( .mô„آؙ³[áS±ëÚ•1óÖ¸S.“D™T­¥lê»ü§Î¾o?_]^ß´©4&™ i¹N1sïͬbŠY˜ÀLÈÐâ‚‚LB$ÉöÍÜè•®šæFÅ/GóÊdóÎ{Æ1e2 Œ\ç›Ö_ɨÍ0Xq_»~ÞËöv—£lïÛMvmøL¾»º )ŒJ¡€¾76D„djE+«ž]u¶OÚѰÆ3hiG/Ù¦y6¸Guuëb[Ž7l ¹[Lfö½6=·,™‚û­E=Ñq¯­ÖÖ¦;‰´îé2¦–·é»õº‰z|r•/‰´Üó»òm«ak×­S  ‰âr[S_,íROUo½ yX21WHÊ…ÕÊÆqðËXÆk•µ,Â6ãu´ J6 ÍjË8ÏhïðkbØ›|,_‚·D2>ë,Eü¤Àùéï/XÕàZØ¥Žº~²µ†YÍðÊ"ÝщM’¿^Ý’35JœªË]a^J ³ ŠÔ|«ûbÚÎÙ8ßGßlóÇ—÷7¯Ã«¨²/;Ü ÖwÁ·ýŸ{½Þs×äÅ*…ÛÝæÖ’6O€q›~|—ù¶•|š¨†üÝ¿#ÅV‘ÄùjkÚ·¿w­û/¿¾þ½×uW_ôŠèº¸î«Ž¦ªÚ&ÆÍ¶³[Õ˜ÌØ…Iâ}>ñ^àx¼ñx<+Áã1¥Š¸å?µ V8LsŽ1¸ãý1O(âŒI‹ÅcqÍŽåå‘bµ)ÜäèùÒŠ ©(+(ˆJÊŒ«)*ÊÊÊJJ$² "I#$’K)(2ËD­½¥¡|A{m 6—pˆba„„A…„!BaVù ChDÄÄDE ) _^Z@¥”Y°²r7—Œ¶a)xd/í‹ü«ÌÒ)|Aôjµ¨¡P*%OŒ•¨T¦”ÒšSe:e6šSR›tT§MJw-2|EQ€Ô§SÃ(^Y|½Ÿ/}kii`Ô°T B€ ‚Ø6`^66!b6+bX‰b*Ø–%åƒ`d‚Å Öõ±r…‘a`X^µ2u•†[,Í-Ï÷RiR TšTƒStܦíɺ›¦êÜÝMÆëvéµµm6¤ãnÈÂì’8ÎK’È—„’^^HÄrð—EÕÖJK£—»º˜qv3¨N$ìá8¤êN„á;;rÐPpP—#M)—)N™r”ÊmÍF™E ÷%Í;öêü/Ë+Âħ6^t&&Fa& †dI‰˜&&fI†d&fBffa˜&˜¹f.g•–æä¹’8ãHX/a..ú[‹ì©Ëåh(QJ„h  ( „( Òtœg ÉÉÁ'IÒvvrrvâ‚‚‚‹T -iÓm L‚úø·LŒJEJ# I1DLA¼dI1$LADD‘1ÁEðDÄE|G}|#vÄÄܶvVP]Œ„FP‡‘!BaBþ‘a& ˆaaHV„al˜H (B†À°¿¼Çãì®p.²L0ä‘A,ñ*ßͱvuýÇ„ÛÜWóÿƒ«Ü¿?6QDóoåÞýGÛÞÖÖà䳯{ø÷¯;ùö¶ýÞî´ã¸_Ï¿ÝÞ~•6«²äªýÊþUÕyÜWîw|î¯.è£.³®¿Ÿ,‚ëåç^]åÞ_²¯¢ C³!”bTøQQhˆÎ{¢ÉG‰p˜‘¯3Mm*,LK…~~~z¿…úvEÞ]erTŠb‚œÐS%¤vA)ývÈ4ÇRÝì{Þ¶Æ–Æmíïyû+öûkY ®ÞŠk@ƒ35Ñ¢Å56ŽýLð‚š,ñ6¿¯lÎP±Y™bk`h·†”Ó-¯¸xÄ·^&ÇÆN°Ãª""§[¹³×¦<æðÇÍFÍŽ~OÝ?lR¡sÍNøPÀÁeØ”#Í :÷h)çš„­v°AûIA…ùj¢ø&(Þ`óxWŠ Îãt¸ù®%i‰£ü*ÕùEˆC3¶©¤Mão‹Eµµéa†-Ö¡µ¨1¨ßaºà/Ѩ@ŒÑ^MRs¦3ƘZíaðfv®‰±‹Ç‡6vüìyxXž®ÙÃѶï¾ïÎb£Íï‘\TheRLlÂ"6ÄE$A[‚u®Ž½‰‹[u¨öPB–ÏDÃ9´»š‰¶ÚuÊÓ E²åi¬ƒ Æj-m=ˆÙ2Íš`ëQjiÝ *$û ³ äù}0:¿ lQÓ*5æ¤â&šØ¯ãuk„ï8#É´-iˆm)$c@€_#<òÆ Ÿ,¢Â´¤ažma]F˜=Mo–ö¯ž¤¾Ûeûz÷­^Wùøî~nx?M–?Žy¦Q ´ÀU´Û`cr)%'ü¢Ññõ± B;ÍÆÐNþÅ^½éðAð˜šjDšÓE(ÑN%éIüRA4SLã¹ñ¹z©Ÿ.¯M&øïÍÕJâd·'ìþÌhîä!5Dms~~kרBL§YdÁÉ}3ut|Äí'9³ñ¯Ï¹ï{Ëy~žxÖÛ_{ÖÑPu·pÖ¶OwbO4gÖöÅLl’×plB©ÓÛ¹Æ!4ý²6š+]KÙé/”lf¿Z¾V‚<yçñURAìUö÷/MðJà(ä`:áò¨ŠÑRX>®¾{–ß ±qB~7£qs쯔ÚË5šêÙýš¢Éš5\G ¦÷MW¿±'!Øû&‘þÃVôMëëh{yz¨µrŠyq­ß›çgJ£kÝ"~P$b` Öнï}ûlûñííúö{Þ·øÝWu_÷ªê+¨³-›emmm´­’ØlÚl¶©µ²ÚTôG¡+Ñ É++,¨Ê¤£)*·ò˜Ç‹C˜¼[Ê8£ÉâËD³lî¬îŠ• ÛËžXå€å—–Qå„9`å—–[–ye凖Yå^U9Q#9S•åC@FcœeÁq¶™"൵əÚü00{h€€ ``€‚Éa!B"&&&Õ³ 0’þ<‘d!{à^÷ùÔ‚H X BH€H ` ð¯¯úúò½¯´脽¶º·’C ÝÌ“ZäŠ-mjT-,éЫ=*@PP¥;98¬â“ÓY¤ë++!$„’2Ñ!DQYÝü‘>IH)R¥{ÍeJE,¶[æœÇÆøÇÆäCˆ¥Å‘BDI‘ ¥%•””%º&fa ’i€º.¨J€Ÿ)%ÀdI$#É—ös_×õqâºÓ¬ëuc®uº×[­×:×[­×u®µ×u¸ó_u¡hWÓ/­"blã6ÌÈ\JhâbT1,KD¡‘ IDý‹DÄDÄÅD1D·ÆÛå{’‚ð¢ï+Ìåo`RHA…R…B!!aHXaaa„………„!+Ûr € ú#'“2|¿3d“dïom/l*S§MÅSP¦-0)ªS`Si¡L¦Ó m:tÄ¢‚ƒûÒŠÒÐ)Ó)´Âvð¼¼)¹bã+!$‘Coò…ºëºþ_ãŸæ{ù?º—…ÝåGœëÎðöÛc?•ýÓíËæ(ó»ÊÿßsÍúnž~Þï*õü›»²sù>×¶ª:ãª.ê/æuøó®Ž#¾UÙw%Å]ÎE”Wõž½¬¿;ÛI›nû}ëç|·Ú³º}¾]{k³¨çñ5pw˳¹öò{gyÝïk:½;ÞͬüaY|ùϽéâþokêÜÇ­²–Ù÷VªÇ&ÖB A¢…Ö“- ;|3¦¨©‰˜·/L+ÅÂA€  p‚θ$‘†™›öEÀ€HMéJ%6CŒM.õ§Eã4œÿmí(Úù#nBe‹4ªŒÓlLÄcZ ·Úž¨óWsøx›¤3èÄbÀLɯ%| ZŒ€wç½çæémÞüÙ{óyùö©íÝóÞÅQ¦SÁâ†d2RlP®¸”Ñãk¦psJ£ S§MjFœ(Œfc%'éÕ=¢hTÃ"jz&¦Ÿ>l+q°Äà¶ÆŸùË‹UgŸˆ´r¹Oér<†>Ĉ§:.-¼'Íh¼å­»*`'S›±µ†›[vÿYÙ¨S¦B¢ TH'­¬TÀ¿ ­Ï•ÀEQ¨Ôpq¥Å1Æ1|ŽkgÏ ¡{˜.(€´×õµÎ昸šÉ…3Åן†1!~5H1 3Çôß¿F¨#ÄÄÀFG)Î ‹`IG —^šçÇU6µ æQj8ýy²Kbóm “#I™ác†hÐ kPÆö>ÄnÅÂTFš$÷bMµ#KÑ®¯ˆüi‘´´XË/^¿=vÛ°Ì~µ{Çîõ~9™ÔÈaú¶ÞûÿWj©Ÿ[^†HÂé"­&°Û=­˜õàž”µ M¿w¥Ö¿‚¾< œ+ Ïâ(`/›z䤯ÚðM[2&Üýæ2öŠZX(ØÀq¶˜Ýù(/]KNy¦ÍÛúÙw·‘F¿hŸÂóÄ6†„ë—æî†Qúµ}5úñ…C <†^N¦ _©³³¹Î]B^,z§;Cà5±(‡“ÕûòÍ^¿<ÜD/]DMªßÞÛ¦€+ï×¾÷·ÛÞþoçý_ß~ÝÕ×]ßÿn«‹ºî¸»©±&Õ[ ±mDÚIµVÑ´Ø›VÓjÚ&a¶ÔÙ6mµµ´Ù±µl[l¤ˆm>=¦ÚuM¢Úm6­µ´m¶¿.m>ÙÐLÆ&11Ž1Æ&,År_éŠÅ7(¸¿‘.K‹æk[æÓ.5ìMB­’¶ ƒ`Ø­‘²Ùlíy^y^¥zW…xHD2 A!fòÖ-öG!{{—+‹Ì¶F |ˆ€äA  €€``®-¹´úúòÆÆ½±»²†„6P¶QY^åá#(à7 Õ¸n›†æêÜÝ7¦ân™FVض' Ûb„¢‚‹ÆòÞ0¿)ÅJ™ô°©Q©RÁpÞÑEÐ4 - B”BP” ABÐÐÑA@ÐPÐÏ:[ÞP_!rÓ.h¡gšæ{ß‘ñï¸ù¿öo©>§ ›6oНС¾)_„ƒ"Ȳ ’$ŒŒ‚ÈHHH¬’1¤a[‘‘±ÆòVÖ¬V±B]ÁkÌÚÁvC^ ò¼¯Ì‘X€? _è`€H€ûÛ"aÊ(¢º!³,Û¨¬âºKFHïä²n›ò÷-–úxŽb‘—úxŽ@øÇ Ÿ¾•ìoážÏM¶{7ʯ ÞˆðO⼋À°lÁ[ Á°K¨T©P¨T»*T*5ÍF¥J• ä±,Bþâá¸Ëdäd”PÄb BVT%P•BP•IBVVVVP”%n’bi‰‰‰¦&Àf–S%w),²‘—÷äù˜ãU¤(ÒŒ#XÈÆ1bbHˆXFRXBH p m‰Æ˜Ô¨àÎü{»ºî¿±uýìiµQ_ä=âý»úîüq_Øú×yÚÚßž¾|ÿ0ß~gËÊ~;uþå¯ëÛý¿[Ž?sóÖŽý˰§·Gu~:{TUþvî¯Çz]Öwwetwã¯ë.¼¸ê¶íR\B}» _è‚¢ñ¨Só1T-o!4fhÏòK¶ó«Êã¿w—”AUïÍ},@©‘G¦AëeMãEÛTtnLÚš*`ܑ֡Swö~ź涩X _kïÖ«/Çã´?%{Öêõùº³¯Ë~{1$´Å•J"…•ûšKu‚ ûÇŠ»ò­.D@Ž"s]¡±¢’lL€ñ674‚±Õ]ryÈ´–ü“ÏOcTâ b€&Ÿ/¹ó¼ïÓ¬«È°ÎüQø÷~l¢ƒC2ŒHc!G»a€¾ &ïïeh~ŠS1MéÚô†‰:œ4*Ý’*Þ0iˆM:*·R†›P5©€/…”sH„£:dÒ9 I[*¸£¢V½šÆ½T§¯e Bºn¼ëѶcZÒ„nñÖÍ¿´ß7Âñ›·Ï8b þH¤x&TÓ2<Ýlb ˜£ù²¶¶@Ñ€)<÷òÀ ²g¶¼ÕÔñZóHÞ0{pƒÕ6& Åš„ ÓKJ›úha£áÃx•ÇEƒÀA$Ò‚ve¸ÓÂ5ü= CÊEï 5l¼ÚÖ´ã)”U¼“gÉ;Üžó™çã!Ÿ5#á(Ó^£{©¢Ùçh«ÿ*ÓØ%ÎÆ“m3Š|– x$Ô›WèͼÍ|1}1p´Ý`χ‘âë^A*1‹_Ôñ7ü/»ôÑx¢ð”­1ý#ÒÐMXÚD²3ÍmLñ>3=æãýŸ“¢¢Ó6š¢’7±A¦…?6n¶†Ü TËlýöZ0=ñû|ß›jȨž†Ÿá,Š\)kˆÆd,„VIx(ÿD-QGòAüÝÕ«Om6¸iñκ¹[ûÈÍ`V ©~­Vµç ê4ß!º¤èœcÆëbA¢Šö´Ýˆ“7Ëj/ø7Ë«[’æÕ¦i45¿•š!ØÑ2}몰OÝöüÞ‹b?=tKp6Ú ø½º4î·½JºþlºHh¥©9æÔÿoÍÉþ›»¬&¨(Ùömûª’º?ÄüÚÍ)üžBˆ›6ûÏÛdŸ&‘íîšßÞÕt϶)yíÄ=óÔºKª=8dÏÖö}uï$U¬ÊØ6¢Ø«blU±±6›-©µ³XfÛn)') “¸*"@Õ«PS\Ùal–Á²l>…ñK–ÎPq#‹Å-Åby3”~aÊ0åPå¥Í•ÌÅÍœæW/Ìk̶V£n" ‰2§+0"`f`˜&&&Bd˜¶ Ô?¬'' ÛĦÓJté–è ±(¢Š('g-KòÒì¿2جJˆ…(ÀÕ#Â0? HÖ2261XÈÈãcb(˜’Þ0·HÆ2Ü’KòRRVâòbæræìº2÷3ÛÎ ¡@PPÐ4@N“<ìèNNÌÌÍ+j“LLI$„‘‘Çq„6d%–x¥ì¶§1<÷†B™M `À¦ÓšSn Tj ‰QJ…Å€X bX–`\7W–eJeåÍËa©N{“æÑAL§òÔùt†úß5o†ó}7··Íñ¾·ï-ûÛÛÍã0LÌÉ2]8M/Ìä¤.îˤº&–Yn/ç.n$%!q"’€JŠJŒª„©(Ê2„¤¤²²²Û³33$̉nKnLM4ÒËm5ã=µô÷¥Qq€dmŠsθùÐÄœ'gyÑ ÓúIÂtœžy‚bfkd¶h( {ÆŠ2‰ï™‰­â½½ph‚i!Ja„aXT…!!B!RBÜbˆ…†a…·!-Ër zëÛkk[R"+È¢m¯ïcREYI$YBI’F@cß”¤e£$iY–deõ‘ vG!iÊߟøˆ eÄ_ùÛù¸rÃ:ÜöͶa-£[lËùkù û ¥*Ð.Â8ëËpçöv¯f׿ì¼ówò}e_·æ_™«8Üàm6Ó:*rŽ»ùvƒºó»:‹ùGUçGwEÏå×åøªÎîý;Ï•ò{]h(Ø TemeR¨­¨_S<3½!¦+l†&% PÉ™‹µ¯}»»:ëó7u³]çOÍçæÝó±.üöºùÚu÷·}öìß[í¼>g³Ú¯ F˜3ðŠR@i9¥DÚjV¦É°2˜Ÿôµ”\$Ä•ë.oðŸ­ß©wædê/½«äûVgËxô|ÖŠ‹…Çi6¡£b¢+c –/¯yS_U¨zq¬Ö)½!L‚¨ 8óD6ªþ–Ì_£Æbá/k^Ï sx¹µÅ “†©™°xŸ›3˜tg}ùêùE|ëïX´ªf£?K9úÉà¸xúqC5Ò‹/6 ƒ86Õr‰iµ®Ùlcbæ:d¯µU:+jài†Q·œ*P-Š;-kµD¼Ü,>s_&1¿± ÅÔ†Žžl(ßÙ­ÕÆß¼ø{€¤cn7²ŠPhR"(Èø˜4:2>1D¥‹[Tq ^Â5ïH6˜©_¦_éøâôh‰œqÇ_f5F¶¾º@ ¢{ ߥ¥çƒ±»HÑ„¿<¢›ëËV·²n½å{eß’qcÑ4‚´!£ ­•´Ñé<ìMN' Q 樂}ì¢F[2zJg˜´m°J Ö¾WŸé÷§ÈÓúÝtñŸH$!@°™cH0E_]}ïEyÊÜd 6¼ ã+Ö ÈÔ\çEîOqS#¿ÑÚ_ {øá˜ sh3â3cÝ]ªy¢‡ÂèÀ'uÂä>¾Ö·ˆÛ<¾¸(„ØÓê(¦&fäg•N1òeEmIbÊ~|kOÏÇÔ“ÁâUµóSô\((Ó_°Ñº¶Ñ`ÁºXš12¡+ÉðÞLZ †Œ Dz¯j“4ñ-j97nÖÚF t ø`Iù6è¶Ä!6bs ³â_7º¨„ktؤ«Ñ1hÌÞð=ÎÚ€l¾‰‘Ýv »(¢gMí‹JÚ׺ÁW´Ú×#·^x÷t:DÆÓªÛY­g£6Ý 3\Û­ñZMŒäý%[,”—i›býŸFª&ÁÉŒ4ñ@U’ݯIcqKÅ]'rjn=1·½:šCB–m Úßl³¢Ö>þo°ðÄ,ŽHšÙR IÂ% Ȩn⤠Ð_=ùµ|ožÇ•îqÞ:sñ¿ÞÏîÿuÿš>®®­Z¾¿ø>Áðõ|½”{ W²½ˆö/cØöÅöϺcZãŽÇçcœs1¸¼f,1¸Ü¶@©y€X™[­Õ……ÅÇÌü¿ðžçÆ Uüv*«mˆÚ¦ÊØlSciš[Saµ[!µÐDè‰ÄS•'D$…%(’Y¦ÖÆÃcfØËi™ŒeMá«}Mõo›ã}¼ßo·æöýôœžyÉçlÖriera4ÓLL]“,•H¼òÄ Â)JBaXR! (†"!ˆ"F(ˆ‚" ˆbˆ-B6ÖBÔ’D’8ÈíZúöÔ¿„ÈÛZàZ’#*ˆÊ’ J„¡(JŒ©(2Ê’„²‹(ƒ(K+)+(„²ÈÉ}h“LM”mhž{[Y‰®L”×Y{»r€æ hMMCFšSã M)ˆS§M¦Êm:`Si´Ò2š4Ò:(  & ‰œ½¼²Ýò÷R™Nâ‰ç¼þôKJL¡2$ÀÌ3 “3,É230ÌÌÌL3M2LÌL„É1mxO7'nO0KmlßO}}NœÓ÷ì‰"‰ $€¤„ ÈŒ"H²$‰#"HÈ2#i«#¬dìq…Üq–„ ý¬7ñZBŒ"R…aF„aHaB……„a†BÊ(ˆ˜¬¢ "+(î ‚6È,ˆã , ‹â#8¤bF bÆ$qŒdID$BÄDA $$0…£hBBAh7 › ÅÝ}‰s|`rÕè5à4«À^A½kÒ¼ ð¯ B` ñ´‚®- úúë0®¹1øþZÊÆÂá³dúœøµÕ²*l«dÙlƒfÍ“e²+šƒ]\5*cÃ8ó1öØü{lÜ·+Êä9[[ûoiDAëøïð¿ü-U”gÚÎÛc4ÎþGžqÞqcnó×ñ³æœæÅµo½gg‘ü›Q>cãÛ’ó³ùœÅzE_Ž»ÎêJ¢ï×Ú»¯—Îë»ö¯Ó»ô+õµúûeòËåÆÛ=¾yÅ=±,ëû>ߎý¿ÂߤWÓñÙÇ—vtÛËʼŒî¢»*/ϵÞuÞù÷®ûlÛÞÆß(åæ›L1DóU_ò~tì„L²©*š(i”M¼Wó b[ñÑ4-tZfC2˜Œwª]»½º%¨Åÿ“Û˜• kEž3öÚ×ÏŽf{¢‰¶úTfQ¿³Lþ¼Ø|i8~L÷åR £â|jèQZÄ›¢ƒç+ª E ¶‘$µF ŠYµp³¹†‰1Š ðÝh¯/#ÇŠªzb^_¾È,Þ~MÑF @´K_‹ñßžÖGXö«Ï¿=ùôuù·lÜxWœBB!ám±‰Ÿ–¯TÖµò4#+k+OÃêð×|i„*%E¥iµH„F˜'’(”Û×µùêM‚0bŽë•1Í™9¨„ãH¹µíØÚN¶Ë<'*#D#Ca¢áw> I­ Ø{Åä 4 é)ŒÈÓŒM&ÁÃîzØy§Ï»<|0iŽ:f¶œVGeUýn>åBðÍh b†VÍ›5l”‚¯^îæ×ª¦_w·Ûz÷Þ¼;>|¬ïÎÛŸ›[g¾÷©_…¿MÄnÏñ_ͬfuŠ3å{¬1-ZÓã¶:¢ ½3áóšùžÇª4V*Úƒi¥ ¿©¶SŸÉ‡?}tWšâF”&?zéPÿqxÊ_ÝÅÖ/±Rß{òüæƒ8~`ú'ñUèÕ1n?Õû¶7òÅÐtjY”Ý=13´OžÜØùÏç猪H4ø% ®¶8A¿Üߺ¦‰Ö¡D¸Q=#ùTB)úB­‚Ó÷j-5xMT9ú?7sÎõ`&~*œ¬%BªÈÚ•Ô£„ÃüVЖý“>¶^™æ&¯Ú×ÝgwïËT4ÆüZ†›#–³Å¢q³Äæ}ŒZ «ùZ¨)‘°â[jŸFª ‡ÚëM«ò*­‹ð‡ÇûõËõ÷mt$G×c‘[/ ª¡ š¨ö6šØÔ«õ÷Ûú÷”"ËãóÕ<4v;éb°õÝ“l‰½Jw8qj¶øñ>kmüð<1¢Ÿ*Þ{4¥]ºQîËÑsy¿+î*Ù½$gÁû}¯}­ê¿ßüùñë‡ øk[.Ç‹ËyuÓ®½}ìÞñJ¥ó2±FÔm m¶¨m±µI±²f¦Á´­³VfÖÛ¶äç )ä ˆë3f5ƒÑW oEIè•èQ30³L„Á2bÀ˜qxÅqO$8ÄÆ)Å8œSó O%ɦ(åRâYlɦæ,¨¼,î9œ”* J”¢!ˆX˜†HP€`&„'"""¢"bš(ˆ¬ËÈo y±¸Ê§/IËRËâ2áKÈr<…'BŒ*0«–M¢Æ‘±‘¤cÆ lQE‘$ÅäLFlDÃ’´-Fÿ'=é’·RÐ1ƒȃFF‘±‘„a‘„lm°È‘¤de±lKzInròI'.GQ[Æd²W3eÉ¥_ñ™E™˜Y¦@˜`™&I‰‚d™&‰‰¦šbÑyÉçù€Ns–SdIËÌ…­­;Za•©O!N‹gå5V­MZ£z-›Ë©¾ßMæû{}o¾nñ¼žpœ'BvyÉÉæši†åä¹0”¶ÉIq•öuøúô¶uT:º¥6 Škít×k5Úæ³\ s\¥pW%rW5Å’W•Å•uqyK#\Xåk®Û¶Å†¦Vå¯`€Å!XP††„…„ F‚, ‘,!¾¹†ú++›üx¸õ)cÕuθu£­Ö:Ýnµ××:Ë®ºÝg]?1\upW<Ç¡P®®-«ÚëÊës–·°°¼¼¿ºn˜®wчùHÈ„‹"HH„ŒlliaEÄ‘DDØÞˆIwVweÜq–hlWWQÇ{–.æ”Sü¿…þðŸÆþûÞy{vöî/½Þwvu]úö¯—ôzÐþ~¿‡ÝžîöîóÀË Zܶã-i«÷7æùåø­íÅÙÞ]v|îþW_¥ÕeÝ{•••ÅÅ~;Îý·ëÝÚwf;o·¼J¿Nßc¬K娗iúuåóåó.ùÜEÇy×ÞwFþ«ñWzÚï“nŒîö›³¼½½ë¼×µøëá_}=ŠuO‹­ßç}©ªtˆvHPÑÑÆÌfp¯ÇïçQÆbÑ&¹‚Tò1=û/4„bPbA#á.Lù5LÀXN§"q®×¸ÚøóÑ4$ÅD£hm~Óä_7,À|Ž&þM×u€Ä´ëdŒÃŒ'¦Äý¼ˆ·SPÆfgö¿=¿û;'}ºŠ7Û³úÎëö=¦xÈ~Í?ÂÏEŸ‚búSãy#bnLæó13! 1&„TPZþó@¨§8"&Û~AùðÈ#š‡áNדSä)¬fŽ0EWb¦¼“ˆF}Á¼Ù#m!¶šiÉx옃ùüÒßi$‘nñN¶¤Ñ«Ïoy­={zÉÈ)ú€¢ZIòcµH¦ ÆúÂãÚ™AØèÅÒJÙD5õîV„ki·„–Smº nîßÖìîOœª¢6E,DR!¦¢2ˆ1¡5n™J+…y¤¤‰­®$űîÈ ¶´h—öori¶;yº…‘¦¾ñæÍS8IÖÃÃ/óõVôqžnëÛDŸ“hR-væ¡5¤‹d"¢Ó ”±×‰Š¹"bÿ}² Íëݵp¨¡šßÄ-=úëš46éšeÁÁ}¯ÂžØÀ`kj«Å÷9¯¹fDÓ¶Þåþçîúõ~2ü³9zØÍ­ú_ºüô÷šTKàÑüó`¾wª¼ÐhDzd¯j? õÖý;ª°Ø¶+ŽFsj Ë<½&êOÁ6H™“„Â0{KS2·± 1™I8œŽ4ƒ<¡ÊMBÙe2Ñæœj45ãþ[U\i9Ï6~ݽ^ýõ¾ùMGåö¾ûÞ÷“ZöÞß›^DB?>;[Æ bèÑáB+G©f8îµñÕ¥ßÞ?q½®‘¸0±J1 )·? õt¶±^ÖßÇøqɶ/ _|»/¾M4|ŸDHäŒ'ã~t÷®èìPß9[-Ç»§¶NW]ÔÆãÞHU7+]=z×òšüŸ*‚èç|UÞ7½ÝYÇ>h‹«¼»*ý¦w£WÆä[TÓÒÖ>®ï×§wðóöϼÀö‡eâ_êZ.Îæ¾û?¾ÌY‰bÅÿ,Å€’IJڶ¶›%´ØllkM–É«U«Tjµ(’žÅûϲa{ ö^ÃØ 0i”Òž)i†%äù†,qaýËŠ1xåôäÓÄÛ¸ ·*6ã`]Ô.Ûs-q§O™‰‰B%’!ˆ"R&ùHÒ620b’P¡Š)ÊÈØˆ¢ˆŠrö(­í­bÉäm­‹é@•T•”@•IY@””%IP• FPmDšÔ˜&&&I‰‚R[Io‰‰‹RúúßþækœþêF0R0 DhƱ‘Œ`FÆŒkF‘±,LQ$DL$$$7^—1å½upZÚ×`ZÚàÖÖÑ93%‚’# È2"’2$„„–ì€HHŒ…ô£-Ĭ‘‘Åp[7©oo-µ³€A_]òP2œ½'+J•#RÄe±~C‘ÄR¥J—!¬Ñ $J„@ĤLI$JE±1QAqp1lmÁ%ô¹0šbäžfk[Ú+ç³¢Ë!\ŠHƒÈI"HHH¬‹"!%è2‹*Œ¡*2¤²£ihLM4ÖSä Š Z‚öò¥J™º†y—9{ê”ÐJ5ÄT¨5¨¢Ti”Êe:e2†Š Ü tÊaDóšbbi¦—#”›/vÅp+”€@€Pä```€mXCúÖO” jE,%¬Q…£DW¹ZëL WÙÞÚZEggw–ѵ]M¥¶m›cjÛÑ´Ûmd$d$$’I- ee%¹%-e%,Û{)Ó%ô®ëùÿšþWò»²î¶ÝüË:þWom¿²³ßÉúõåó[E–eiW›ÛÛy=ïw=©{û>ïÚùíºÉ?þ5}î~{ËÛXrñ«¿•øîþ'_¥ã®ü{Û®Š²îÎþg½¸èêÚÝUåäuó¯å]ix^3!â @±XÁ|(ˆòÆE¼Ëô‹(¾Û÷-üšý~lã¯Ü§çÞ·Úëöþ¶¯¿Zî’¿Wé×Gsí—[ì[k¬ë=:Ïo{Û_4}¯Ü·¶ûé õý©Ü6§…²Èšo "b‘1ãþ³M½÷n¥Ï±XbÒ 6³[LÌÐ9±Á/7 E“ŒÆ›LDýåüx¾˜FûÑMWD7š“)èÕ‰¸Ó†ŒP”“>Æ«VbýÏZ—OÞlü[×66þ¶½];$D£ú¶(VÄÅ#LÍ×™No1j3Tx, @”]"ÆÝ3)°ª©š$ðü1Y|—ëUyéù:÷mÕí»²ý{~>ü×ß\2ÛÁ(iIð²‰Ox™¸Þ*xÆzYT¾å¹Æ3[íuãí’ … Ûb¯)EuÛ±13+m© %ï;^žõíí{m¦Þ×ߟ›ð˜í³d:¹\@Ӆ݆ïãöèi'õ… h¬²ûŸŸ^Þɾװ{Þóo½—œ¤T괵ǒ a©Ã'š`i”ÔIÓtx…+q}ާÝU l¨2˜‘–Š1 I1N®‹~nÝmM?†ê÷žÆÃŸ Ç:ßs€Î]ÒçÂwX÷´OÜú'ó_ Úò·D ‘Vˆÿ­\F¾V‚ „4üdïµEsC“ÎÛ3[­ç›ÊØ«XÈó\D¢mãä0#_¡~y¯|ôGÂÏ¿\Æ‹¡p ¿Â}õÕß#ø,¬[WDàšf óv²z*/ê·|¢‘=øæQoG0ënì_EC¹¥¢Ý¿Ãº³šñ¦ ùg›Öl<þk¡½thÚ„õyDlަŠû^]G‰î’±¦ü{×…æß5©¦Œ#h07Y7^û¶×c\3D´¢A¦œì)ñü!k]¿CÙoÉc¿¢ñ©8^±š¦úûwø{5`ø¾ß±¦ á;wWÓ´eM ´# $&¿žß|j¯ ½Žñ©[§ ­j­¿~í÷éÃÃ¦äø§àÅçÁÙ[œÁ}{ÜÃó£;樶fù¥<ê*;åïîQ]×Òò0:HsÓkаàUü¯*¦h‰ÊdG½®Nuûr ºÄ@æÆ·nêŠOu[FןßbK3O¡¥E´FÂm²¦É°Ú°®¡Êˆ*#®.:N¡¥HR4cF1ED”ˆ9$ÿ1 H“—â\N$åN%äŒIÊEinZ–¦]¸˜–(ŠðTQ1àbëÄkƽJñ¯ i°)ÿÀ‚Ô!‚ ê⸮k£+ëÚw%@„†ön® `X€€  H`JB„a€ ¢ˆˆ¢ˆŠ&(H ü­]A}–/-n®k¢c‘yGƒ"È FI@$cØÈã±I$$d’(Bž#,ˆË(ã±nræœ*„(!$+ B0„*Bƒ ö0¡  œVlCdµŽÎO'fdìßhb¥VP T”IRT”%Q””%%VWå¡h3¬q‘¤c%g~EivÚ]ÄÚÞ×wsßÏrLd§”_ë•BUeU P”BP•”%eU%%””•–ââ`”.%o ›™¦¹.f/Ã4²GnñäãTþˆÑHÄä#5ŒcHÈÑŽ$Š&(ˆH‚"†Øˆ-ˆÈØãµ$’4Œ´$ÉŽBi­R Z2y@Êåñl¹Èò#ˆ1¹F‘Èr<†"•#:„tÄšòÀ)´Æ˜|…¦¥2™nT ƒP*%F¥E¨™;…,KÆÀ©0)”ÛªtÎ]Ê眞W/”¼2°¤hF 1„`¤cÆ`F1ÆÇE0$D,<¸EtÝ]²D9Xa¶yr( •ÏõÝÝ×uþýÏý´µýÞ{v]ÑÖڦݑÙÝ£üޝ:ó¢àì³lVlÇöþo¿ïågë$qÙFtüÝ‘\w•ϽÜýµe^tùŠŽ¼îì®ïYݶ¸ì³ùמwÞ·^m~={bÌsm›<÷Ÿ÷µ{7Vy]•ßmÜWG]}*¸ù×^EvugWËf Nù…ûý¼¯½šo6¼Ó7žO±ô¿§vöí¿Mæz4.ŒJ ´Þ½Em*/{½Y“šÏ¿­¡Ö 00>.x³wnç…™ôIpƒsãÈsk8P¤ÒWã4 Þll‹Üè¿5¡{\ú×ÉóîÔ!¾oj/æË¨å%ÈBì•WºâÔÜx È`)bPÑXÿ^Ý_7ã_‹}»ç~:Û~{sn¾W~-íÂY `g…5¥øAkoágÁÊÄbÑ ³f&%íx-7ZÆb†_ǶEpÌí|ŸN¸Z [£á à à£›r”Ť§71˜€åëºVÔvJëÆAäµ8òDçJZ@#h_Ì…"~4 R9P¬P³ù½Ûšö93†«£y”¢ Z°ízî¨(:Á(6ò6:$(¶3=³hz:ÛPPŸ%×»–8çÉ‘{²s³ãZM›<…¾Ø Þ:ØÌ×·Û ÛBÁ&ÞÚÛ=톽1ë^Þ_« @ülB ßá,ãzcÛlìj*õ–B½”0¯›Iªz»¿’ 9¥Zq Dóó”a”éÂÛ”FF˜¦½¤’ -øþYª÷l®9=íî^xF낌0gɦãøe c ­x#½ë—|EN’“ÍJ6a|È~Û_œúüo²Ûni–Þ÷¶»Ti‰Q§¤øSÏmTLMé#Cá†ûUVþ?‘«¿c·D4|!Í¡ôÑÑEgG¿]§á×á›|ȦÙI¯ÆÝˆ$$b?=u‡ˆ½«Èí^ûÓ„Nï3v[c³O•n®ð)^ü/^M5±´Pë"w¹mÔÛ®Õ- ¾+­l›qö¨tZŸÖ¢Óó…ùÍŠOH›Míõ·³õJ >~ˆm%´£bÚÚ+d¶£elM¢Ú¶ Ͷ¦Éµ²©ñ½‚ôQèOA4ÊLŒÌË2L¡-ƒý8“¥ÄâŒV+É8®NyÙ­§-m ére–D®R¹l«Á¯¯ZõÙÄÙl¶665šæ»^¶¶·_ÜkŸpûŽ»ä׉9lŠcË‚¸¸K+‹"ƽP®T®TÄÈW-p×:ík\ëuÝs辄ٱ±±l/¡k×®ú †Ëf͞ϼ ¯+íð-àÊÜröVP*$J+ˆ‰ZDI„BD©DØŒcF‘±‘¤q¶6$’$ŒlqÛÈI#bÙÙEk ©•ÇòÀ¥sˆ®G®®¸ä®Mu­®uºÝgZëuηÑzúγè×_Ï_Â:Ï–úÇ-ez]ZYk¼µãkýï÷Rï¤4©šPF$iÈr1 Q1DBD¤q„aqÆÆFÚ‘ÆG%É–Mè^JI–%Ësä¯,xãkÑJðÈF‚`þ„ `H B€ È„!†²(âºI mrS—rÊZÚ…Ý®K L”ÕRš4é‰Li´Æ›@P@ÑE Nó¤ó¡8“³3!6B{`¢i$ŠÚþêÔ®º®®+Šâ¸Jà®Zá®mFÁ±°lØl66lµµµëkkµ­zí#èýëâþ!³ÈZ qÞö%åäô’­$@•BU”%eVTe%••”%%”½f ‰‚Êt&/g'd$ Ñ- ­RVYdº.m®míçŸÿó’e5™¯g`Ýÿÿÿÿÿÿæ0„- cKöÿï„!CÄÄ!ˆcBÆ5mð}š)U}44¥JÇHªPè €-€AA@J‚™  )ªSA 4À¶c2 Ó#Jvh:5¦«3mm†´](%ÐIÒ 6è9¢¡ººiaªŠ ¤tc :€Ö¢Åf(HÂǾ¥IE¢(P( QT "B€¡%QTŠˆ *ˆ”BT  H)R¥Tª©D‘„J (UU©*Jˆ*Š¢Šª©)@ ¤ D J…PT© ’P¢‚EPª€P(ªP $ ¡"‚¨©U$UU’ˆ@PH•PI($$ª  €B ‚”¤HAìѦSc ˜6­`šÂ44 R ™PˆR!*B¢! !RE)U*  ¥T  H  RŠP¨€‘@Q(TJ ©J•mŠTI•(¢TUD($J„¤(‘EIERŠ ªH‘TP ¥€ª)E ’… …P ¤€U@ P¡B‚€P(@PŸBð}…r(Åc¡qXµ@1@§ÇD`P h8ÁVN] u³R*΂€X@ tAaÓ(Xèä ÀÀê€p ƒ€”nAÊš° @:m:Fˆ Ðw1 Ñ¤è13¡ÉÛ À0 §L]£¬£Žœ-[!£%t4,€u"vè¬ tÊZ¨“­hEn@ @Ͱºé®ìqtÓ0Êm@ÑBì`4 а´²”aÑÆ“X4hdM0Έ©ø J©Q 22Œ†€LG¨bÄÄÐTü4 ª‘¦ƒC&ƒM4@ÐЦLŒF@b`jx"R)„CÕ=°¤MIê@4òD¢R$ML? 4¡2ž›Q jS@)ú””‘Jz€”4š „”JDšM=É¢zi²HÑ&šhÑ¡£Ðô“M1¡¦5?À‚{ôˆŠ¥¡§ô$wܳN1INµ¢Ù§KÆÕNŽ/Oñ®¨-„tžHi‘:è^€…:”<:D) +§™èGBPëô»4›)’QÓÄŸ£°pós/½{Ø{dN”åíiZ]+çyááM#Ó¤vÚ4Hô©åÒ>E.Øëªˆ®¢´õüo2u‹E6ÁJf?C°ïuµÄµî<¨K°–Úó°µCÝ2’@À˜ÅÍ4ÒI4<æ_¦öæxɰ š`‘2q&ÿ¢ñ'„'Žòó8‚zYÏlӖבWŸ/)ë]ÂIøM2Ã"IÂd¾íÜž2wki”¤VS²¬¬*™%­!\‰'µÒG`°¤±YV° F¹Ñ…„¶4À¤L(Ä=~Y°møÓu ËX’™-¡l RJTgjC&Ãý"’ü¯µ)”‘†­™H×l´? è:4ÐÆvw™O' ¢h¤Û4ÖÌsPb¤ÐÒÚJ»d¤ò5Ñ×vÓ&Žo›ÜÊdœe2’Q‡§·&’ºº'FŸ$×VÃòì—ÀG|žíMy?ÉTy›¹·jJºä½zì0¤~4•R.ØøÎº/#£¨ ™‚ºÁt÷¶˜Ôbdú3}wc7XV°Æ_,ÒAª"bVj¢'Dbbº$íz 3r#¼…„4b…,e#,-šO?9‡§ÆR†~¤i‘߬«™ºæÒßnÐÓpŸ ÝÙòBú·¥|ì@Ó–S12A´¬œIÌfKClÖdÓ33LâY¸C¡êÆùï‡ ì½WÂù{ ×ɇD2t"t…cEÓÛ›\X$cüÌðÙI¤w«u¡#Yž&ëŒÜp¾îºôX±é¬:"´:îã ¿Ó›¯·ÏoKöÞ!Þ¾)4Î%¯IÆbTFF•û$mâØc#é@rXѦR&‰ŸH“L;ÇÝ¥$ìüP Šg§½fóÅ‹„H¯k&´-«Há2I!  ¹O¯žç!È™ç$pWÌÏÜn» šIôÍ3W¿s2œÇ8ÌKEélÊi(Á![ñ¤þçœü¶ßÊÿLùh¿˜ç~(1­GÕŒ‘x£€²Ñ¿£ßêž0„/B…—®ÕEkó]iäêÛ®›·fREœB˜eÈxQ©e ÜðíK§{)º ¶Qm–lË<{ß}³w£‹ñ×bV>¬+Ö&Me ~iªÏ*ˆ¿ÛþÇ úÿÿ_ìý‰ø³çÿø~ê±?B?W€püÌ*/çüKZi7n ¦ "U±B1J¿ë)[@#Y‘ì—e(:^.´gyáâhÑ®Ž—mÛ7kX=lcu¼ŠhlgîiÆårüqØ!¬ŒúéíB`õÜû^‡3²í¿4/mÚ[%"D€kJb}2Ùׄ”šZ„†®݃”nZ‹+¶`Û-Žl‡3uÌîe„SnH…ŒIC]ªee¡$a®Îü¾/!…qßnÍŒ‚9,òñ;Mª¡€³~]š¡;t©l%¬ˆ€Cô4Ýo›@Ý ¹HÂmo7'é©öûÖÓw´„ ÙqDvhÄuäs'ÒÓwsÕAçœrCÍN ž™ÐQú7—}6S§ctswÎ:Z¤ï§nÕ0È‘¶uÞH34uÊXKmÄHBOöOÎgÇâ€feÖQ#Ø"ó:Näíö½žÑm¬’а ¾é~çÞöY¿=cY ¶îíH$Rþq¬O¬ñ=ñÉèdOB±˜,ÄÍÓIÕÒ5Ï‹°Í61æmX$C^füà8ÝIæåÜÂz÷f—"͹°¦Zí;¶ƒ5”l¤®ùÔ±øÜ<ózÇLÓf¹Ÿ)S"¶f>fm÷ÎíægÂL fÅæŸ·Ið¡Ì@Ì“á>fSñ`@Ì—£ñ—w%0Yæ)D”Ù.ÕšZÀÝ–ëRÉó]›Ö$ÓŒ°ÂŽcæP¤B±L± `ÕhmÍÇÞíöøâ IL+&…hY»¼®ñ›šÁÍ®N8èL mlIðMæO ö >C@žJ^m 䇾î„=½º &Š)|ŽëGl÷8õ½¨•–Ÿ›´É4>R ¡"q)+ùYï{ÇtœOŸ5öË ó™óbçó–~±ÿeõ{ðb$LßÁFLÜYX\cÃæ*CÌðO‘s÷L¤ýß)ùÑ’~wÂäšL!šgˆD¤¸]²Ð)eÕÖ;-ÒM”¢"lŽãò<µ¾#jVÄ´– ºe¹>ý8šHœM4’&$0HŠ÷nÌ€,‰ ÉI³‡2¸½ù¼´²Â~µ‘qß}¯Ïßùξÿþ`a¯Ñën‚û"]®Q‰ç´†ÓÁ­ˆZðdÛŒHø‘˜aAXu— „#ÊÓi“¥±ICmeÑQydÝ“‰‹iŠä*E-2ˆŽ_A9´baz5AÆZl±¸/PØ‘>_¨ /÷¤¥h j’€B…¡ªŠB†’‚`j&‚ˆ$t—AÜ‚Jf D? ?«* +HªP¢¨Ð ¢>ü¦&&(þ' ¢£á*€…ˆ"ûÊ "" ¢  §èþßíkñ‘&„4U5jqmý¬juf‘%l‘Ä`I¦e34Äþ{ O~ ÷X+ (OÕƒMCH” С¡Oi…‚®ìДZ±¶Ý³ZQÖÓ¹~˜ÛX§NOÍ~{TgeÙ;°tô¾O’{`JC£l 0Î +Uf-´azì?ÏóÎ ,Cm§£F±&!ò `¶‰šÄ&’ ¶°¹ñ»"æ÷ž³¼·í¾ûO°&Æ‘Ÿ7w›q=S‰Å¦—Z+Íö«/3¾Û¬¦Õ”Q[[½‰:­»ƒ¡Üc@QÑű³))IÚéšD™V”%¬«Z(˜6̥ňA)L G6 ºZž{Ã[-žo|ëOm|Þ‰”ŠÖ5GË˵ïyί4ì+)ýi::htsõñíìÓ׿WΓ¤ž8L êßd¦bÆvÙ™ L!Þ]ŸÂ³ÏÅÅçì¿O6Ýe™Ñ\M Sy”ÌâcÎX €Ã *RöËA®´=½çy8ÔP~ ¯ÉWÎï,÷ëWÑ*B¼¯½¯9_ @«”ý¬Û™]U°#r@Ÿ!Ï4°?Q£ŸÐ·åÏ\|@±wç´êOa¯®>þRj×ðóÂQÑ–â ÐÉd„Stêx™! Œ"¨Á:pƒr¬—J ‚Šá$;Ý<î/çž÷×€õpÇû’­- RÕPKT¥%QE,C¥SMQ4¡K“¤ ˆ”A‚ÿJ@àDëú )S”DQ?¬€§äÂ'ñþßÌy÷ìÕDß›G\vJ^„(M Äù!Ð)§J´"PÕy°žKˆi*¨$¤þ%Šw¶ŸÚëye¢Ny™Þõç›häå“[eš°±4¦ÆR+» 艡¥(vˤi4…f];£óOIW$«! ¿nê"¶ºÛŒ3bÝš :)NŸ!):Z¯!ÐSähÝ“ª^Cäy°í“Z²eŠ Û(eŠ@Iñe$q‡ÞÚi²ÆÛK‡u¸aƒü­ªƒ5ʕƑ”KÍ»)i»AŽÔfÃf ”kbèíÝÙ°‡Æv¡½4²”šO›ÚMåÒ 4ÑÐríÙ¤­3tFæÆë6ì"X¶¦|µ.í’•t¤¢`GYüLã¹q\JXR—,4ÛŽ‘­¤_ÐË…#ˆÄ‘¬Äý/ÒË}ñÞ~ž=k‡ãåäÎ:Še\!ÉÚ冘…¯¶;­Kc(Ã'-I—ÛpQ˜ê„á%"V”^P1í¶XÇñЈ,L“áÒYTÀ )“Ö7šd èËy³I12™j(¡Þe„€èá=ërS Ëý+õ§lŠfFqKX…á°2™¶GS¢cP„mpµ”À ¤L!&ìqSB8®2XŸÑ”ÃFj¦1Xd>3hi¾{Lp9Lr ÿÛ1ÊdBM¬'ñk½9<€§§m…¤Z~’NÄTÒ§^ÀSÐôì›LßÂkß_qÅÌTÎ3Ä}· ýÌÖÐ)‘>g'»m wml 0ñ+`ãˆÉÄ“DÃY”ÍÝÿqÝÄÀŸ¾Žm`dâ`o[’’&fÇN®™œºf<Ã}®ã³ÛfæGwÍ’ÜÝÑyŒÓN^×IÏ 6åñÚÓ $ÒØVY\#×MÈ1ÀÍ,—Ht÷{Úôƒ@R“¡9ÞwH= CËÂOdKßyÎ^4bŸ}i˜Û¶›lâT¿¿t¤ô§N÷¾êF‘›;æîo7×tÕ„,¢ f¤ÀÈâeÖ…y~).uÈÀóÕ):¾Û?MtTvËvØ’ê•Ü©4Û]›I¶%IV$|i cï]#{Û±0¬“Úɲü²h(¤Ñ¤*%ŽOðˆˆ©ú_Äû?"DÓIE-+ù6JÙ¶ûÑ £òwt}¿—y%)ø=ËIÒ~zéB‚“BF4.„  !HI¡5w]¢°í¡‰ˆ¸vËgµžyxW•½€Ðôº@mŒ~^íÔš ÆÑ¦}da›‚"f¶µÌ¥PŒ®Jd m‡lèÆÔ;d5޳HįME¥×¹ÔÑME'Z<¬¿d~–Nüve¢Iø­.Ÿ˜½ÝA¡1”Ó¬Ã@•Biºžaè£ÛCÕj’¢OneyIG–dv};΢í‘&AfÃ7A¤ K~Zgk"¹Æm#‚Keý㦪“ÖYaŒ ) hâÑvU@ÂJ@”YFÈÒO$»ÄÍ|.vÕúâ÷d¯%¦"ŸŽš¾L ªÉJ%Þ,Í3]¬ØæÂ±¨óZÇ„t»Þà{Ba{‚©¤‘b0¬ATä„әéù(Èê:)ÙO1•Ãk˜¤–Ëe{”“†<‹'•ØJßJ3. 0ìxœD†nŠ,Ë$0!…ÛÛ-Í+¥j@HŸ~ûuí²ûÖNj⹬jºK`üó¼>¯~u£Þóï("‹ÿä(RR4ƒ@Ð…RH”´-5JÔ@USDM(‚ Ÿð|é-#ýÉ4¥ ‹ü¿ÏUE?пñB?“ï_©ûIù ˆý­£IN…öN¢•4‘D«¶¤ iZQ ÖƒæíPP'íO‘Õ-1Å?µD¥7¹tLAšˆó¹ãDÆËŠ‹m–°Ä…mol½)_cCEÙ)°;íçW¶Ë¿c¯*ÈæÅM»y޹ºÁó\FÃ¥¡/pS‰cvкï;’¼- Û|—{ƒKí­ædâB*§Íž8Ôëê¼–9¤VAC&“›,LpĉmlZ=¶²t(²Ë?W·lãeŽ¥Ë5]‚¬d3L®Ða¦nͰL]i¤†ÓÆ0ÀÿRD+±È!cŽ£6r[L K.ý22ʤ%ÃÝ·ŠÐº[_λÃ%²Ñ„dG>1«¬@~î였s¸’n1!m%ˆÈKvɰ¢k©~]$¦W#B!B[sü°ÓĸN>®Q<ï„‹K Æ&±„n¹ ¶iL€OŠžqÍ#̲(¿Kå}÷cäö½íwê_¾Ä! †N¶–>¬Øbi‘oøn˜fÓ$‰(O[U$9dISéBC™4kë›zÉHEŒ ÷ßmòXuؘm¾1®lÛIÛ:› fÂxΔڒWö˜¢HDÏVGÔ%’™¨ã\ÀÒ63&«Y2{YLÈü¶n³÷‰í`[ï{ÉY3¾ö‘ÎÖl0's8a75³ïN&¸00o·»ž2iše#¬” X˜– ¬Êf0ÍÑÈë‘&’8¸ë-v¦Üþ&ë$ ‰¤IÆ6Ù@†²’i“H®šl&˜6é™÷ãIã?—’%"ËöYÙ‹2Nùן3çÛshùÞ6¿oµåòĈ~û}¾PÍí-»nwìÏVß¶´O¶•öšl¡ %’°5uº§o§"‡|°{#¾dÒt:<‘é7`zÐÿ/!“I> œxª™?¼ºLþE¬Yê…õÓtŸ¾ CfÛË·¸M°:·2Wóiîn!'Ÿ»œ°™ÄŸ •sdâizû¼dz1Øòè=- {ä¹e2™Äê„@™¤-íšI.†Þ#¬ÞR\]7bš`F8då‘":æìšS67wôó7YÑ·ÓvnÙtIAÙs‰,/\²mIïà\zhùmï†é#Ni ^³¡¼Ç@ûc²žTÜahö¼ÔkÂŒ×.Ž¿ÙÑ5ˆÇñÛ8I/?ÇZoÆ\ 20Á×n߯v»˜’ÃBÕÌ”îrHÏœOäN=>¹Œ @“ÇæºðYÛ”@€°,p·u£ˆ‹xÒ¬d¤ém`C~zØï·GÎmdüçWÄk)†úéšH”s6¸‘2$‘ XS_ 2ô­©À€ëñ¼Î‡!#Ve%êØšDÓÈÏÑãG™ô™I&Ã=ë–øƒFÊbJ8|‹ü?–xþ>ߪ¿«Â0ß‘/²1D¹‰iš± È­+Uû×;+j„×U‹ïÄ9Ü¡çVv¦\ ¢ªÎ )É,…’%M ×ÊyªZZù¹· &F–p“¯P‘ZõÑsºùß‚D¶P)Kt–,öÛˆÌò>©ú¯?’ Šù¥Jiª)R” ()JZŠiif€ª)ªb‰ADüáýßûÿÎÿ+!ü¿æÿÄÑþ¯ô¿±üÿê ?¥ÿ²ó€ˆVd?ÄßÄÄ­}f–ÏþQÎcu™îäÄ+Î(¿9; êùÂ;¢ÁAX4Y`&¶üm³ó:²c”ŸE^£xÓ£¸ÇÊÿtP °Ç$@£—4Üê±ÿËÚâ%¬N•QCÇ>/9àý”Tj÷RЭÑ`kZÊš®§a{˜Û'ú³¹”k%šÅà*MPÆ3º5¥Pd/@ëëÀǃˆêŒÓS1ÓRzCÓ)E¢° Ký½l‰ÔÐLiÖ+Ìk¥‚°äŠci3y!î¥aÈ8Q”|ÉúÛ¿ÃCiˆ¥ß/ƒGöâA½Á–{¨E§[‘õ¦ýÊS¹œ=ÛÊݦ_yç{l¦ª­Ûäöϯ%èt'mØY£&à˜ÄyÆIÁÌý”¡Óä[$p$I“D¼ÅúÝ‚ê[¾´§³9lòH›íPd¡q±!¨ÔÇË{C ­ÆCܱq‹"—T3dõämîœ%ÂîY9Rª ]7ueîçŠrÐN•Æ•¾›P åeÒ*ìm Þâoº½Uìj½ž%,jô[Ó{úö^ž^v œ‰¹l¥¤‡.´@œ3oR)N²$£rTH@/„¹Ü I`õ%u;õÓ¨3TÊRh¦Æt¶vf~Ÿ(Ü—žw¸ òJ³A>–.ûªôjÃWéµÍÜô6Že¯µùNæYÓ"N¾6ÒÝ1¦!˜ì>Æ; '.©—6~Á¹ò8ºÜr±™ˆ Ü§jçž¡bÁßÙï\¹Ùç_¯.û.Gw¼¯6"bWwÑoHd+œâ¹Ï‹k¹Ž¢ãk–ÅF2Åà¨&'€p*T[Šç|èoâ8X{næ#Ü?:ž9•PHMÜ ù Õvÿ¹jœFlTL'ÁBO7ò³„K¯ºê"Üò¥ßÜNkŽ]?i=ÏÎׯzûâ÷©ë¢¼K-”=¶öì‹›\¢•íLÀP¬É‰®–MºAŠTHãÉzÔúSÕ,`Qƒ)ÑkB½Íý¹kÖ6ßÅŒh©`šñ–øB1·xÒ°C6ïŽÕh&¤º–Ć6J!ãö^Ž7¸NÛ‡µ@ä….ŠÒq ¾h£Ê/1kUûõ¸N‹ÆQny’zÈ X®®²ä+_vÝVZ‚ËØë:¿5£˜×·7è*b\9ZEw™ØÂ¸öŸ138W”5›H§PÐÝyK\Ú|'5¨è 6$Ù¸ÜÅlîƒ' ÇògÂöõʦúÝwŒWy\&øŠÉcöé5ºÎËo9&ì¬(ݱ?¥ü¶-"B‹—„B‚3O…hV6Ê—ZÖÒ¨:óh­ñk%âR•Æ@C³Bó½pü¦Qj]†©šã¸‰¥r¼°(ÆZîaЖ‘“^ B!Áàð=6Àx1N9¬}Ì+L@êÀEwçfƒ3—¤!9О šÚS½…#/ò¥À—°ô¨t@ÆÙ2Ç>ÀÑ#®9 û£Æ5¸k¡í2 Sfåñã÷â{óÖ¼£Ô뇻µ#ru¶·y¹ûËéùHTÖî¹Ão}]Î'ªÛR•º$­Fi"r”’rbFK¼!ÚlÂ6ƒ>^ý%±|¥JŒcÈO>ZM‘‡ÙÐåZ@ãÃÉZ›6Úö|ÈÈú8W3™ÓΣ8ª×Å1´©’Hù³œóËû>FÒ*ù.Þ¿¯“Öxs¼3«…ÓX;cŠÛá:;UY¨Û&•f²Z˜‘<&Ä}f±|6ë–^$µ¾·W"¹§Ë˜€¯q νsÍ…¥ÖÐî<x&6Ž#²Ãô!xWépiŒ 8‚ð|»ð7LªM;0&Ñd{c?Ä.,š5ј,‹¨´OEÂ2\ ùëF²,‡k¥ÈÄÖh††-aä–îL#¹°M–t]ˆJ߼ٺݎÄ@ânOdpv:5ÖuirZ¥«Õ˜›µG! µmmðY¥„›G]bÞ2ýÇx§«¬ÙÃã†ð”7Òûl&1k Ò ìú Os´bŽªá”c¯´ª¢¸=bø[ \¢öp; (½XãÖ7Q»%Ê×VA1#ÄÙ´9½åÊ¢i† ÂóÁSõ¼²«k( þ݃ iŸÆŠÿÈèIELp™ÝžÍÚ°3˜ õÜz³’z9W:`e¥>Ñ ç*s¤Å]Š A†ÂÙÀ÷«OC!g¡ÆB‰¥PIÌÑÃŽ¿"’¢ ¨}(\jî猯$CÝ“2Os%B•WD7Hìß0r'iݱ§QܲêRh· Q ˆ‰ºbã·G&ǹÆ}±âµ[`%Á‹Ýf›ªü¹U½örÆBγba@ŒXêߢ-Mgu8n´ÐŽb&pGf ¸ÀÀ!ÙUެ!Žé¬¢iÑsˆ+ö{R¶å+ˆ\>áCVÓü³Úg1ôRçEä%_£DâŠöB÷ß.Å=° ¨qä¥^–y'¦²ü”%€ç¼5´ocÂHvÃÔÞYG”&þ¤´¸ 0w?(#—ªä^B Lr?ÉBdãâ:·(òìôØRBïv•ÛŠ<‡ÎF$—0û®S0¡’Y<=r¡çµB€•Bd" ’›R<8(IŠÓ¼¤~é£8#;Ý×Y&3“Ë™5Lh¸ÄJðÜÑiGuÁ^ ^%(.ƆlÖ®úK£ ÞBÄ#[Á§p^ÍkI•„5µ›9€¿ž£ƒ¢Î´Ùov!æ·ÆâÒèTſtas«xWZw{5ÕLÖ#»¾Å_»ºËj†0|³YÈN ‚Ä$DÅEÎÊ0örCsfU"—á®êâËlEÈM¯6IÛêùåû€´F¡KyÂŒS0,¸òa QÉ‹ó™ÊX]œåŸgðÜR`¦ôaJªéÒ)?WCµ¯‘C©ËyQ5ãÒŒ3Ýaˆ”Hî9 ád°Ñj{±S¸R0›K›9!"Œ3ˆÑÝX`ˆÏ-³‡l›xm-a±FVÏKÜPÞt3e;Y• Òš¸Äl`¦É6NŽ»ºU€éˆ¡L¨Ø Š”Œ$Ôã!Ó°¥XMPíKŽIÔ4ËZÆ—@t87FQCa•²Nù˜µî ¶®-²x(/³§ëÌX¬(PŠšuÕŠÑcgÉ‚•îôñ‚\ãT$2/Ú›(8e¬Ì™s½Ó»ÙDiL°ÕÉÈhÄþ‡[§©gš¹<±»iS³Ôd~ì¨X/-b;5~àÓ²|jÊ>:uâ €‚ÌøêeÓP,jtÑhd¤”ãé­ü‘¸Õ£íö÷›k–¹ÄäöëŽZ …zæ“4áƒÎ„9Û‚g•ï·7³òÊY$;>(üw(¼ƒi®©¦€«ø5âìBDŽ‚P*½‘tªÏ’pA¢ ‹Q4+Ȥ@öv2}H"x¡jA7!r±™° Íe'rð§<œU†×2‰Eꌫ=±r=ªU‚°$ðJ=#èIŸZ‚éÜ!C˜Ý¬lb8àR>ئ‚S¢®“Ñ BF5Ÿ2åOâaÙ½íX{÷`Ëዹ£”F´Å¤Èp à¨Fpý.¬VA™øêê ž ûNrç`"qÂÚ•s1»"á ’îm¤ `+Iˆ›Ê)¤è‰iŒ%Œ5º:a1u±Ä¶Œ$Ù\ !z©<±ØºIB%?Ò3C'0ðIJû¬5=±Ãû¦˜6£#†PžQ!üž¥„^ÂJŒ~yf_ðd}^rO_”˱fR !’ŽØò^«&ïƒrÅ×ÌÙàÀä-!6öAÃW´ˆX,@þËà äìóå{žÈþß6(e óœ|rI¨B8Häv» ?Íí;8üƒóãZÕµá?ËsN³6@­FwÑ5ôEÑb¥•¬tCú“íT`Ö.ckÅ÷ˆeî=mXVVöC æf_½º£$PEln ÁÔj¯ò™A4¹ ·\çëb*_Cv²‹‰˜‹\A.×tAüJc 2pÍ,RiûbN ìÔË‚Ê~ºâÄmá (&]m²m– L¶f^¶–kOê>Ùˆÿ>ôG7ÏÖ“«®G ‘HŠ¥•–¸‘Ò¸8‚ɽ,€­)¤šÁML™H çxHçjˆ2#î )˜-x|¡ ¡Þ ¾’ ±bäöXZ%"™‚¿r€jÎìmá ¨Ø(¦è~ÅSÕ´¦>m><£Ÿ¤H±'‹¹Ýmúü4¦á¬0£Þ_„&ºùejT,Xô··2Ù^÷”5É3];·øbä<™0àœ+pKÉ`¢‘‰Ñ{™²ë A\9LFÆm¢T8Z¤\=Y­*År@†ÓdY'µÃ–‰5ÒÖ6&G¦çBc¦˜Õ•2z§Zv™šú 1xÔ! ³AÀÄ‹´ãÉJí¸ÚVz¦…,bl{ÞÅËl¸‰Q3µÝíS$ëÏ:Ä5Du‘¸9ž‡.È•NéÌ+8Fç1#w™vüE’?&$uhÌ„‹ÿ˜§7 †g5 Ë|Sj!Ð…™Of(±ó{qÔZ©©H’èBhÖba•eƒ3 .LÊ‹ˆŸ³Ñü'¨×Á`;P,ZL¯RÈ¡l‹«çŒàà»J4<Œ4†ðâÉ(†6ƒõ,‚uꕊä ÒÁE@€“#Ë¡›}É0Ì:^™æó•“µÂKFeò?PÄœ0 ’yW4ÍZE%Å‹´´zpf8U&êeŸn« â“gì¹Ò”ÝmšÙ²[ÜoAÕV cn–içÖ“´žAlbµF¦Ö5Pc.»ÚŽ ïâÕÐå!”Ë.e³ƒ‰YÛR‹”ªâÂns"EõEöG'¤‡rÝV±ŸIl{Nl³^|a·c3.A Ò \P‡œª°u¨œ‹C¦÷ÁŒÙ²eH–p‘"‰ŒŒtþœŽ„ì“Ñ»ÌR%˜ëÀt J£(ð f8,ók(žca‹f ]r÷¥{ÎÖZ•Ú^D– N‰&+ÂÐC·¡ÝÜ€¦ c'œL´(ñtGÚàm{ȪRj¦`Ånè-o¬Q—·Úˆú!¥¡»\ÔJ%Â;]Ù€†Ç"rÆ P·]¹dø©OnñtÆ*ÂV°5·ÓF/ U^\ÎÀõ‹£R^ôÒ.;² quMlÔçXK\¼µ³Ý¶͇]ƼÓUPÙ þƒ~…¼ £·,f µÍ(È)AÕ@#€‚f+©‚7bŽqW‚6!+Ì›BÎ$€Pƒá>ìmä×¥Yj 7y_O»b[¹Í`mæ{AªSÙŒ§0Ý<™±žþIF47Oq%7…[•èsR²¿°¯„$‡â0MÑ·–höÍ ¥2‹¬›0GÞvWa  °\•¬µœb¶ R…&‡"›ºÄ«:.VÖÅÅ.÷•¡Ä ´%âV%Idb±ôKE¢_Nc1—3êyrN£G¢P[´!ìø›v Ò•¸#Þ#д½íÐ7‘p²B$00÷k²¸ZÏ €ìV›Bؽ’çw|ŠÁOsxãê&ümq~‡‘IÙ’1Ò¦ç©AI¸øÓ‰Ñ¶¹km'â4.µZV£¦G=>"Á´A—”17cÐÍô÷‹3•ñ†²°5ñsj9À/̵ÆÀ9PçD–Û­nÔìÇ}•X¨"帱.-¯˜ @eÌ/8„öiÊÀËo¢ÉzL3Å*zÁ<¢;É•ÊUPu†x»-„Ûc¨JôÌZÄW äö4Àö)T#Tb\ê6J&Yx2MÞs’ȹWeíoÀæ)©JÊÁ×¥S(„a‡BR£‡ =PåL0t^mȸF mº,M ]ý©B¸ôwx÷1 ƒ¹é»¹Ÿd£>Ë]Ïx~sb¹myXòžÝݬéCcU]”QŸá™Ÿ^û¥íOoº|&°Šï¦ø™‘å$*M;¶VJÖÕ*$û¼SLjµîüX®lïßñÚÛ‘ÇpÚu%sÒ܈>ïSÓm#×Yí0gó<ŒÀL(ÊyW|qáfs õ¦Õ]ŒvÐ3%ÇžOœ½¯_oi4Ç·oO‘©áÍÔƒ®yi3ÍÍ.]¢’{+JŸ7§[–÷w•‹ÊQKµê’8žF9t"í1#U¹7ŸV(¶«È¯+Ì›Âè>lYXD Ðû Ì®ãö|x¼Jë9œ<ùÍ(?–ÁþO}¬Ú/Ü\‹¢“ ã>tŒ›&Ç)ØG·öФò¨cÐûµé5ìÎëf$柛æ¾á‚r=r²¡±G}[r°zOdØ|þê:-Ò#Ñ:jGqZ–áÁ66mÚ-+]•GŠü5ìcAf”VTgÆ"~ݽ• ¤÷ˆ/ˆ;é,“!õ¼wÞƒ=$Çï`ÿlx„'Èãø<Ø;_@^%/â„ (%øö@ÄJ‚‰:Ê“ (ï¨\E·w¹&1cÍHÈàŠôàm›ÓärC¨•Äsˆ$\YÑ4âyâÄý*ªç¾w5 R”µ —Ðk¥ÆbÜ·5Ûßr­J÷‘•7û¸^³íJ‰Ú<ÜwRöÈë°û¬{‡…/­fïVαÇGrB£¶(Cãç?¥„9r’ fpˆoÇ,«Þz88(Èóɶ&/$k`<µ/Ýþ±d¥.¾ ªÆ Qƒz~H„á,Ì&Úì¥e&4äè{ö籬>¥{ã/Jo6¤ñ;äÂ5¢¿*ÀmTz7ޱÇ4¨Ï•±†k.§Aêm邚ÔíS­ ¾ `±²ÙzäÞ5»L]®ó•r2â Md)ð1Œ/cîKqŒ^q[h»Ÿ^>£õÄ67¥r<¤#Çv)ûœfÀ¦Ä.DVT ئIŸ¨ÈÚˆûízòdîù´{#Òå6Ä$=|Ç8É_±¾¯„Ùƒ›Ø•)̉>ÚÄ>œÖ¼N@IìW-å# lÄ`[L'¯ s\çPÖyWÊ8›½ k¡å-ζ/ºÑ(´ê†wœ&ÇÕô%¸ã“ï;Šò¾:óÏj~’˱Ââ-?@ž‹´Ý8MS_;iQS¡ŒîQ“DÇÃ>žm°°!råIÄwsïg™s|Ä9¡íä·T˜åÉÎ7»^n0³…`ÃgLP㼞Õl¥Þ"5÷Šù±Þ¥»Ç¹èŒå:öÕD%hßczÑmw­ãÄû#ˆK†`Hmá r±”¹j’¹'#nM^,§4J¸ž-øÇ=&§5¾œžºš3ö×µnž«ï4ðÞ£a!¶êõóß²‡ht*ÇqÆn°d»}S˜¦ ¹áL$$‡W»ž‘`¶žR(›@k9\$â3<«ZP]O«¸gÑ™òŒzÁ\uˆé;ç Ò°'¶R·4=gɩڅ·…øG ±Á6ü(8Gg|›Õ+Ù´Jm z‘,CÉ]qmCÝXh^ͼ™êá æ ´ì#ш¾³> /v„£ +¡ÛÇ’Ú½$¯Fs±Øè°òËC =²éŠ,ŒàyÛc $™ÞífhWS¦ ,£¥‚ê§×+±¼7$<Òý ’ÛI¨Û/ˆ¯Ùø©½ç—ô¹!ÓOÛŸ"˯wµ´ànÀÅšl¯)ÆOkNrdé´ÎçIZâVÙmlÉä¤ã'¶^:ƒÖgÌį¾1-£J"uÝ(¡½V¶ßVuáꪣãߎÞM½;ã9Y^‡­‘|­ñv d¬oƒ•âGfÔb£Œ^÷½Bf¸˜G }GÐG¹æoÈ8«#ĶtÙÎFãäpù<ïÝ écÉŽ*pkòÐMC\‡CØÝp±£’Â.$˺ˆ°Î“Yûi_D-ÜeìÎÐ )ß\h t)…8Ý¿C¼’GJm®}›îÛ³^Ԩĕ ³ƒž'å+4¨v-A7íæRš6.>Ob ðx¼P% ¦d}RÅ®ÞBº+ÜâZ¾,޶÷²¤µ#}λì-FzŽ}³Õ€”d±Š~©þí¸»õ)'_{z¢INkW¾c„´o2¸p2{_U®vbkãÓÏ‘™ã¾ðI!R=½ó)É6B\ö÷®4?jöŒSBK«GyèΩBœçÒ½<¶{W†FDmom3E:Ak7xÕ†jµ±j’”Ìl.—ööÅqΦ`3lmÝ3‹žä tÖ1"pÔÆ¼Äa¢Z†gDó,êpÖpÙ…\Úf}ÃŽT¥á… UÅí·¢í­iT±jA½Z‘±ÙûÈ„”­Iªäf•q«î½˜ÝåIã–ÖìÆá0¦ØÂy ËÂ%I¦É(-v™þ¶5L›Åâíø[3äfжÁ4HX†×nÜõkfBêrw‚´¾qÄ$`¨Ž¦£Zåõªˆù.ûÙnVIœÀn©jÅ]kÛdí–Së–ß[»wl`߬0f—÷‘'YÌ"%Ó“ $îÞ§$…ªQÈsZÔ-MדäÕæÉìj‘ÓShcðAf–~Ç›øf c5Fl}žzÖ¦ P³,a­vØê` JXï÷+OXá…HÔà 8.êë†Õìf/¦ÞV_““p-Ær¦‘«+êGLçò†Uâ%V“1vîšÍºòÏ{q‹3›'…xI+Bõ¨ðy$lHú¹¥B˜-«3ñ¢ŽÏ{=r]àÊEk‚;OXÛ5{éûÅÌõU* _–ö4ÛLUn/¬] }Oyx ò²š9ù›€OmJ¸ —ãuÖËØYמØÞÕ Îî“%'uß§[Ǹ¾qX%»¾ˆ)W}?IÞ³S=³Ê ¨ p`"?ÞíÔ•…¬•P&6’5ä,z­ṅI¢½ô¦&Yo–g㙵Aš‹GÂ2xE¤C‚…Œ¥amÅv!A8ša~²sy X¿se†KøÏ8´Šè$Hq7XD&ö²Žði²Ø£wa)eC¼ýç4¾ÆɱQ«š††‚1{|=MÒ)4@áŒÄ@ad'°\Ø•ŒÃ¢‚®¢¢Vâú¬‹…"×^ã×Ö½ÕosV3+"Å[Ȭ7×KùdÞ25WèÓØ Y‚…C—GòuadÉÆ˜¶%a¾3@‚.!—u°]ÎÝ„’ðo6 ±À¢à¼°»Î£-Ä#¢›gŠWH ³ØÜÛ±ížéAññpêì`= ‡cúößëIƒÑ¦Éõ<Ê}RÉõ¾…š†ÆPä]ÙοQ~;µ+ŠÜäú‘Œ Ú®ê=°æ8›g#ŠÅL9>¹a†Óů¿á7æê 1íÄ’‘œÒ…cµy<Ù¤S.ǤѿVCViòù¢s>ö]Ìz ?H:~@wî&ö½ËØ¡¿#.Œyœ¸$™®âTy3f¤ž® `Y„n¬bl,‚J'„2ñ¿_ VEëuh$@N£x-›Ñ}Táˆp-ÒÍøä“Wx7Ëäí킘9§èiql‘()o»‹ûÞ†‹ ]Æò;8SÎN1ÒÜàSð’{²¾â@ì`w4תóY¦y˜xëZ_E­Nt)Å?«59bÄ{Mû {I§PªŠŒОìmåÃTf#Š$¡è"à7sEq%#E1“†¬Ÿš9ªÄÛÜ`ØFªÑØÍX·dœ—0[§s^Ku¯½Iöšª]¨'>I€ºw©î݆-ìν´çW(ŽßÈl°ÑÎìY‰öp îÙ¶dVË–.›,Q5®Å 4•}Ðo’pP634)yOˆÃAýf2žÁ-B$ àzÀoŒæ r>Clžò*ì¬H]È}Nûãøì‰·„÷X´êÖX¢sáß5/k }b.ú5Æa¿G7‘:Ll"åëQ«•a¦Åt2]7ˆ1yžŒ6"×`„ñ‘LxV§L )óòë›Nåýe±D¦;+ —:·$S§Å°¡NždðÝÖL·ê>ÜÂÏ®OÒ–#cœr[C½Tõ4*K¼‚·I"U¯§ t+ÌZ£N;iL'ŒÝÑÆ¨þ•OuâbX¡ÛXÊ™BÉK!OÍËž/ã!+·GWëå’ï ]iINj}ºTl+ëBx½¨âÚàýH¸Øn°˜ÛI£´ëiW×­ÎDzy÷µ«µï±ïvnùát˜ïÖCÑ/`çèÖÍßT¢7çZËŒ‹yõM§ÀJ3*NwÒ ãDm¤$bÝÔ!îõ-µìY˜æë¹/T0І®}Ð÷1‘¤ý¢N³”o­„•q0T•ÔžøœmTäi…ç½ÈÐÓ¶§p±=¨$Ϭ"OAÃP½½ Ìq„©ágÊ“Eé\ÃO9˱ã¥ç÷ Gœ|†!|x.¦så:aÊóLòj¾†íÅÃ%ÇHoëcÛîok„-“,0À3c6ɵbõÆ-˜ãžÜ” ãH}ÕçA½Ö%þî0b5 y¶°ò¹Pœ­U”ô’ŸÎCg\¬Fh}XñT {Jáy¸x³Wvì‹ BC'k Húᯬb>nü.Aéõv ¹CÐ}ïojFÚ¨F è»Ìž‘ªlhœæ¤ ’ßëò[‡ô6k7´èAżà¢|[t xÝPîíaÀ@?5ÞÉ2!z4kžwÔ‹ùìJFwöà2c‘®½•­€$ûmdE¹7©¿„•Š=׈¶cY´„à=O!×V¶µo®ø41í>~(ÈèõœßyI‰äuZftǧ±q=äþjÛÆP.!&¨U`Ì£…wäzSíü;´º=脱rê%ë? ZJØ£XF=^tçÚ(äšÓP`<(ŽGËé[M[B¥^TÆ{ZçØ{ $â®c_EéØ ÞPmÃÆgî° b=Ëáïû–ÅØÙƒî—^ņpàçZD"ÜÖQgraI+u{p°Ij2Ðs„u«¥b;s¶Ìw³Äy—¿´Ú•›+,Ô<àÆ1åyX ç2ýÕïdl|7äÀûfD!òXñ³:ÃæÔLåJ¢ãfÂAy‰œžvK±Îd½ÔÄP 1§S@A¬Õ‘:õ-ç 4%åC€ajiÈ¿‚Ã+Ó®üŧFï:Б°ð õFWÌ‹A+[×™Î]É'ù³ÞæL"L2Ô¢Î]Hæ§Òµ§¡èŽ!tÑĘ œžMµ¼e»Þº«EÊéåÒwÙÌ~[•krTÅv.#ƒ¢ÚÔ€BÏ‘›«ìCìMˆÓw™NfîóíwªÝTwc Ðù(³ÚZzÜôÀ.Ã`‹yt/8Ö¼Þî[«¼rÄŸyz·NÖͽ·Ko›C€”p‡¸1’ #sÃÚs¾L-E+SÙíoAYrn»´pZâ)4ØäÊs‘j†4`ÛÔÊ|¥²Þ'½m­±Ù¸Ø£Ç3† å.\F>0c½#Ì_Œ#¹y3ì«b®å|ÂÊIs‹_ì L75I‹äþ¿—ç…ö.b÷6äíI6Ê¿¡.ï¯3µ ÕîrÈœ‰§¶ z8¿· ^È„H6ƒošÔqš‡tæ¹#®'ˆŽ‡Eqác`ÔlŸîæ²½kt:¼:«Üls°ÀYP1´¼0¾ûú8R¼¿b%B\p«o¡Ziq#f°z`¥Sˆ™y+ b.´‘Þî¯ÌK'sàîc ½¦ãJà÷e Œä,7 y¢ûE/oCgÞ…«1 Ú`awzOgZ9´uˆô)™4g"2‡GÄ®þÅP²¼Ô¹Yšî÷­U=©Z>Ž%[{`y õ §™½;:³JáœI73ØV}’ÊÚ6ØD%µvêqRD ’¨ïp5lí&'T=ZV|¡ª+n¼uÊèñ·+Qëhµaº­nt(Ä]JoyèÚ´öêÁªàe‚Ñ0‹i ã;?ìžgcžâCœVÖ_t–’3LtŒžhÚ™ƒã&Ý®B–ºÐI‹šx½¡,áD²ïG1Å)³|,3o_ª¢ ©!$ö¨!4|ÌÖoÊ}T÷t8Ѽûì£Msn-FúØ5e2•'ÜtãæÜ¡}©r(W©Îž±rO¼f²MÖ“Ö$°Dóܡת@B¥F+g~¥qNë·«L öœ´2¶N+ƒ·)æŽË•î±l€ã^:nÞbO¢ÄœñŠ"è]7£¯sVâ…BÖi”§š6/˜HzG£+A޲{ι&W‹,ž›`.¯Òê¬6&}yeA©Ä­>]!?ØjˆrˆЃ¸Ì§‹E3uvò^DtEÁU-“0eP p ‚.By$HÙ¶[•Ë jSp¾Hàôp تƒÇ¥fV£ 5dÕã=yæÑÎÃjã¼ë]`!/ÚwÞ‡?bÓ/ÜœÓiÓ¨âÆé`‚ÐcMAÐxÚ”» f3]·Ëxz+‘œðïn¸HΖ¤°ÆrIöSaëtåœÉ3žØn%Ò÷ h^¡ÅÇvÇ`Õ2€VÓ@)4rR"E×= ÎýÅ_H³¬[Å`õ {äþ’êˆÙ&oëq;0´M°tZ‡Ü<ØŠ}2¼‰ÛÝÜêXvÒ»›r sæ3ÞÞµ„î¦Tl+©|¤A„ŒÞVèí‘ÈÃø Z¢ß¯Öò³õ§ÝZ23påN'†â @Ap®+jûËœ[7é2•¥Ùî;ƒîxZ_yÁ ‡èšFÜÏw[¶1¦ \lm†îÀ¨N?6ýñÂQáÄ/»\ÕÁÁ˜K¯RÉkÜäE,æ¦H_ Ã-‡b‚ÐÀͺÊk{ïXÈâQpBŸ£`ñY{²PtþcÜ·±Š†¨â®È¬ƒç› R†·ÝH•ÏtpSux_$Cb™Eôe»w2‰vqWDñêO5èQ]ó]u³õ-¾<81WjP£ïI²pµ.\`$’¾MœZf·µ°š¢8±Áî.,Ǭä}B/¥èÛé†ã«ÖDóˆ„ón(Py Üå;Žf»wƒxäQæíÒýûZT'¹¡Æ>6ê´oIÙUåoŒ06ÃêËrŒñ؇ê ñ•5b‹‚šQרÂÛ k‡¢®v;’®ùh´C½Êr)eÉžýZˆ…€Ùư,²W<ë²®XI«ë}’–É·V¸°Ö6«ão©‹oãŽ[^u¸(xøOµOÄ·IöpÆAwb÷MÝÈ0É9BðÕ­Ìy; Ž6PÉ5L’=Ðl,ÜáºJw$\éµ2cK‡'ëç â5:Ž´w°F›Ï·h_°F: n!VñeëËž­ ‹‘·LQz¦GÄU\¡ÌÙ‰vf_ä™QÉ–¾dÛõ=« Õ÷Õc &a_2J@5»–d‡éf¸nùt½ì #+"õtû‘¨}"÷óºÝfdwIŒuŸ§¬T‰³÷ËG12–|Ÿ®XÑö€ö–cÇâj¢5ÃÛ)öR¸Rc•;ZµÜõ|iï®0°bUF’u» >‘! W­¾*)j·Jeο½¢ö†Ý™(DqBÙ+Ùú‰9lgcâé”e;ÝeyûBµJò%•»®.ÞÄçµ\×ÜñIw%«OsÝ LÈN€´C²úôÚZïÁ£v¶)Ì!аÒ2x]Þ¼¡á¾~̾žá™WHq>m¬Û6’™&"^ÊÖf›FW@Á†‡€+™Æ>ÜìnÚì©áÉŒêðâ´œÝë§{±cÒë"²µÍ–M2Qæ¯"©ÈOjhøä³»ææ0ƒž-¾D) ºî[­ûS0’Ž5˜NA¬z´Mìà|Üy¨.LyXw\@Ä×°<´‘cñZOa­¯:Tta—‡ÉXºú²E«®J—>=Ñáß»Ò,k}²_>4¢uŶ7ÌΖ=¼•ýM¼Þ¿«œêÛb$aÒh¬¶ ²HJ;#ÈÉ4K>°4ðî’›…¬_áf‚vUç8´—¼1Å[OÚ‡£éïÉšb„Þ÷·åÓ4Úñ]NÁä.Ï* ‘¶„а+q|´7Ðàc7¼I棌Η.)ŒBX¦}ÓÞ1Pí Y/©˜†lÌw9ØîËlž±2ñhô{Ãû½yÃsÉ ¥ÑÆ"¬D„ÓŠó@ c•¸þôbA~p'Üs‘ ¿œ“š£]0på›·S­oîy~µ±¶ãœ!~¦}ÚÏ~?Ò‡ín{‹?E´já6 *¹†÷—¶Ɇ1ÀÁeøf|ïd$9öWR÷§½/ªNsñò9””·zê©zã½Q vUžÈ‚üt¾´¯ö º/°ÒUÞ^xý‘P^@i–˜Ï [Ç[_­hŇØo ÏQ1™sGHc›%9c\£XÊ<¿XòÓIGTë©ÎbªÙJÞÀGØÄmͧ¼+óNT³6H ñ–Ö|Œ+II¬yæO[g¹5Â>œ7rÜ^É^òÇqj´ÑbñÛÒ[mÓ –À3RàæT|WÛ·¦!ß3“Ñ#Xä™KíŠ5·=*`Ùß/Ú´ú ©ÐX`<ç«hñ!ÎdžÄ)Š].™æ‹lS® ÍCjga‚øõ¸m)f&”3 ÍëÍM8ŠÇ1ÓCÈè ŸG[—|Ñš¸øÛâ÷íóçŽ=- z9ÏÔ4ªnV¤Â3¶Ê0…'nàñg@1›`˜ýB@²é³m<ýDÅM›h4_šCèPÜaUn#;rþ5 Ž›—}mÜû/SЇ¥tŠ$µèuGsÌàQÌÈ®E(7šHíšJí0‚fKonÙ½€öšs?wÅŸ7{ÁÄ/M]¥Øy6m“Ç+*ö¾LÖšæky5$ºž6Ú„N‚k!µ¯×üÃ7Õ° ¶Ù<ªÌ*ó”lô^Öxy“ƒ—`™Ý%fõÍK¢Þíæ[P±îîD"±çY/¾Üã´Ùß\$ƒPIí‡N¤wn@c-w*Ægr]RW«Šl[+'InVÚÝ å$ž7ã•#ž¨Mî÷² Ÿœ§H<†ÇÜî§\:ûÏ“ß\¶/÷ÐòÙàKãUƒCÕæ§)ãW3¢Ù'ÊnÝõ É¢’w5ĵiÖ³‡wg®H'u?@;Ä#܉/„¬¤ÁEÕ¯Žl!–ö¯2+i1Û'sLÖe¼–õëGA^sgµ1[ñ½+#Þ¯G±Ñ¥š…ûÅI=ÎX+FžôF«~tyvNÔá¶ih\ûäA†Gzaˆ˜Þ\ÀéठßnÛ]:òÅ“Ú*fë“À“I½;ÓÜyJÕÆZހߢèžûö|ø/^ažúͽ¼ZÛìýÛßfðN‡„ŠƒÝ€‡œÞÏ…­qÇ”Z²¤Áù¹D㬖âÃA«hò,9¨Îh°ÄòíN{½r/LxW°-ÌnÞîÍÝ7‚ƒ¶·Èž¾Û-±€ß¡?@ÌÝO\YúôüÞŸJAéXÜ”€rˆ&ýŸÓQnÌìÐc¹æ>Îbkn¼½gA­Ç#ßbãT[Êö?Öåž/•á½$LRí9ÉíW‡ *>»äЧ—ÞçVïCå æ×#¦||ò^m’*·Wß('Þüt«sOëkc¸õk…ü(ñäwÜW¸5Pbw«-…tÈÐlï6l @¯ËÐRT!í¹ é[s)…Û !ÉmeTõ’cŠÇ’.ZùÈ<§¾emÜç%ß­ QOWÝÎPëutZÖÖA&¶™GÑŒâtܘ„¶ü¼ï¹6fœÔÜšï™Á˜µŸjÕy}¹2ð§²]lƒ?µ ìÖì¬Øœa5’® rÍû¿5*3`¾ýuÉr»¿9$ƒÎxü„¹ Mçi «¾¹$.’Ç1?þ5²J Þðeö—ˆç© '­¤+›T6¹÷z·¾?JïéëÅ­=Ú->gcYP=-wm¬ªË8K2y®û£–ÒèÀE к{„A'9æ7‰†Í•Ëbx;JçhÈôƒ½ÊæYóÃó¢NÊÙYl¾y‹5©EM%£k •â55²˜@(%)dõw­Üˆfüu¯U°7š@N…—¢‹yÔXÍ“{[ʯ3¹^åK^·žÔ29Î:Aá„X ƒÖ^ i1$÷ EeL¤qjzR+‘VüÒ‰RQÛvÍAõõ«ný~W,ÑÌ–6Ƹ)$Sšñý‡’ÔówPqøe|î|÷1"5<É{b-Žà°½zýXµVŒ‰|D¤ø&‹¯MÇ,Û÷pH¸P¯¡A€_v‡^ÔˆvÙO݈HÍO2}'U¸Å¤~ÏL µëyð¨T¯\ç3òt}ãb[ã?r†\¼òéK£0…n©óngš§†ŽÞæCYCˆK¹Þñr8äõÂÒ­}3*L ðš¬ç¾jo‘ãí)ÈHe*ѵH#SX ]{Zn¯¥®ûõ¼Ô î%·DcQæÀóµ÷‹5û9Þw£Û‰È×Vå°I‘âÞb{å;@t<Ò!ÏBóîÙBôQ÷6šÝ«yÛ¶06†As9¬S‚|Ü^ óZË{oúIŒKK°Õ#¡ Êü¹Eu7o GÏ{<Ç£”ïÙ߇xËU,ScÈlK³°Ï“ÜÖã¹úX®¶úŒŠµ‰2æ#tÒ¶ÌúÚÙË5i|}W¨ÒA mÿoIwô_M‰wa¯fû°Ü ”Ç»öÞ úÜ{màZÅ;O4@ñ=bxÙSoPÁ:Àc'ïCª©Åº]ÎÄÊ)”^Òì7ÞÆîÔm] tcP‚Ð…û£pæ}"Pמµ|Ïš¡*i8ÑèÞazÇH§˜ßf˜±AßuÖÅ 4”ý&u¸D&ùÓ¨Ï"|¸óÝx– CŒ¸û,°öÖÛóœ’-Ë r%"ºr”9k‹R?-ÁÊCšßt:Q`0"õm·BÖtÖÐ@ùšDé=OvŽ£ fgÚj½Å̪ÑãµÑ ÞìÝss‰¶W »ƒž{­…^õïo&µ ¸Þ¡B·u{¨„A\_Þ])f–=öCäcž¦žGκBž¶ÎìñîDA6«?#ÇŸ턞…ºÕú0ûÐÓé9›î« îœäqPj!S™ƒšSh yZÊ€òZ­—+wŠ5…ý"­f+A!ÃÞ“¡@S¬f§ZìU.#ú`Ô¹ C+÷n(¢Z›„ꇊßs´så¿d<{ØV¾÷N\sr·?šâãò_VÎ3[è1y’Kå†ù³_r/EÒ¯4Ô}ÙK7õ¯#’f¤<úG›wÔJÞvíy~ûµŽ©?yDöB2ާÔcaµ[Vsscà®ýáiÆ;²Ç¦öIËÁ㈖¾¶•ŽñÔCJ‡“a‘ûA …!èÖ~»*›f±PBã·{nõ°&W†'§8æùa M,-^Î]Ázïâ…®P€%à¼LY÷‘ ›¨•¬y”c¿cÍ>R~Æà‘bkŸ+V혔Ôíy°ž{zjäO¬^‰£¯=ÞVÈdË-<0ؾA‚µJÝòËëí—¨FÃ(ù “\Œ¬G3õùÖK*þ.±î¦I½Ñ[²Q3pöAd"°v¹TO3l·ä¬³ºösöus®c—iP,¹_ÊOžó•‹ û0Ú„Ôk×[â0–çX5 =‘E©>Î(óß9N÷Ôfû~¥¸ÇPö £áØYž †¶{miå$ÌïlóIá‹:Qư:Ö‘–’¼ ‡»î³ÌÏZv2ž~€=¡édåéGµ9¢ÛV¼"B7ÉÏe„5 _•Îͳ¼BŽs8[°ñŸ·˜òE!ÞJ„Éä=4øI‚gs¨u"+Û…q^Ó3Lr˜æï9‹×O^{ÀÄoëbÛ“#åÂÕõ3x9J¢3©ÐcˆÿU‰ªsàÝ!š)ÍAäžM¯½ .³¸$êÊØtN:ƒÈä”b´MÖ¸Ÿm(ËI?mÐ5ŽûŸ*¥;h+3ußnCõêØ`Á>ß1FúçËÓ°»/(·2Ïù±îÊIHÑm$½×³DJ9,ëÔg½}·»¤»û¢Êߢøcmªb~hIõɇG½îs{b~壎¸v2Ú{° W;µeì4æá$-_l±¨˜ûÉhqÊiBþ ¾.~Ïdbëdeê.禦0“ËmêrÉ;nãáT R3:ë‘Þ¢Ù×m¨ÃÙ•F"ÓUéדµk8&¥7d˜B3ØþE1Ä– wµ j{EC¾=«hó‹bȬ¹æ7õæ9YE©“÷6‹•'ÊÀ‘ïFô÷¼Kqq[׭ڥ̓a­MC0¼ö=Œväœ}VÀS™Hv¥xÉP£Õçg Ô^2¾ã”¬=º˜Í¢b±ͤµj±+CÎÚÛ³~€ [-ñªz\ÓWí!XZ=Ááo\sAÝÔ,yèë˜ÞxÛœ¹«sм°+©nœ†!²É¬åjáDM¯èñ.XÚgyi/²‡žƒ¿Q¯™îv®&Ÿ¹mô…i5«ÓyúÄ¡n#}P»@XWÒ³µÍ™<ò—65&¬¸ÉÝ›”j”¥Û1ÌëB8$~…Ö´¥mõÄnñ8̹* øŽð§Rð£Ø\Û: ,ˆÀ›V×FÜSßÂ_Säm^v‚_¥5àúRB€^7¤#|ÚÑr­AëǃbŽGW6+y#«õPJÛ•õ|œ+­Î†8s ˜Ž¬Q®º™²Ôi¬J[œh“˜¸@×¹iEu³ÖŒsŠeÖ\ž½‹ð,ô}Þ´–P æ²Áü–ÍN¶vàÞ €.{»'^zz%š+8Ê[µtïPÀÏ8öyÝ÷\B>’›Ï¯›Mæý¯!¥ûMâ¤5HTó«Âz P½­VÅ]Åæ4¹Ë±•ñíSø™e$÷\Ô›©cväzMÝð÷=Û5z)DŦi=g2µã=ný¨[yFä$Šhµ1JTµË’Æ ¡7ËÖ½ØG åñ8üˆ½éúÖåH¼YÝ­Ûk”ç¼JKÇìVý´EìA¹”0ýMèÁ÷⌄}~—‹¯§ —˜¡rf²èè`ó¦&º Â@ç´ß‘=§U×l[ÃsÔ{_¶XXšùŠq“ÄxQ¸.¦«(q=)ÉJ»8ºX#ª]¡Õ´yÝb›DPKŒòMé:Ü^bO•½¹Rjg¡ ¹à<­¡—¹ºÖ´ó9ÎJcb\‘N™JÕuœý«¬å*<ãÔê ¯^†Z¶GxÜÒíå¨w•^T.aÁçUç§DÏkë=­n’â;;=[Ý­µŽ¾wÈ¡¢³Œí¹…c{¼<Ì©.M9Ô%¥¢ÝÓ*FÓ­?9žG%Iº,uºèY›ei&™ÍñÙ=í °k)—„«"¿’þ]h†8·:…¼VL»¦eÇÃTATh%htœÖÝ5â……o)Žáy|× ºN³Ç|Óé/ñQk²åRT›ÑN²«vá®.´ ½-Hm´ûsÔC6Ý”%/¦PÔ~̉6eôм½^úÕ wä08WÀû>X,ùææt]ò’µW¡.ŒàGbZàÖ= ÜM¥&gP„{ƽßkó|z·„²*òˆ[òÅÃîÝÆ(R˜H;®hžÕ§‘f¡Ó˼(Sï±Å& +K+-Òú(Z]ï@¶ËÙ1$$ïoÁS]S•÷zT-ÉSßkjv¡ Tl8̱ˆA Wó%ê«0‰-‹sŠ­±ë$ ÙqTi®&|Õ`þ õ'ËÄ7‰¹ZÓ³¼ kÊ.½EÞþ˶Ü&BŠÓlu®û,E߸/€Íù§3ËÅi‚aè—#Ž$À$P×gVxçÇ3Æë«O<ç5zZ¢ ²œij‡9g1¡Úö”¡™ÚÝZû*AY_¸”æQìáiéçË‘õ7¯VxÇ\ šéMéKø¯¸A/0ÎrÓ@Å|½ÂÏ%Ä‹é‰h7ž©‘†ùéè˜;RöÄG‹Zc‚ƒW°!Œ®õÇkG+àq]Ê–W!åu¹ìé‹5(oÉUÂFûÓ†¨€«’9XMí+QiL//QãMãSªâ“èZ:ê)y(0@0yIg“¼x+Ö9µ¯ßäÕ/m}V£Ã0†g^˜uHZÂÙºöNÚ' 3î1E†¯¼,´ùõ¨b⺪ £ÆŸvZ¿ ެu’ªA,LPu«Èä³E-¹ë±±Ø}Ùy² ÌKï\x¯º%©º?lgºëN7ÏÛïuÌ@ù7;Òç¼V§ž²cq†K6‹š:h\7<ë;YE.A.Ø™ièâgÉ»mŠWví³)Üöä8¼ ÁÊþî'Û×'MòE%‡.ೞÛ}#ŸæÚç|`FÉgš;ù*ÆÚßyr#9K£Þ»Ú¾œm³…Ÿ\4h-r­qåø-U.ZóªT«R­ts°=’ÛÅ|«(¦ë€î°PÉO:•ç3„2–¾»™¸;ÙŸR¦Ùk³ñ°³ì)™夲f×#ïCrgYÞÒNÛÏ$\€OÏ–­ôø¹Û©R|ÎëʶfÁW '¼<“­p‚Ý|×—œiÓšhè>PkQ¼ò;4¦8™ÝñÒ’UÅnÛ¶¥à*>â•»­ì ¦ðz_õÀ–ˆÈ&µã‰[±»w>¿¦ô àF¼4œ"E›K*¸¤Ã•´ºÆ¥"óeŽaåÅdôñiõª„Wóí¨·Ó¦†<¨Vý§¢šº †õ>_)õ//¶ôCW°Us:¬ôK ˧P+Tps Q†4[å’={û屿ëuu½ÕXÛÙ­L'ݼçϸ©j”;?= î(žÆð¶ÇPò½ß/Â^¥*¼¹”Î×èÿ+´@ÐAƶç8Œ\‚b‡ •ofêR&׬Ж°r vØg‡úð€×‹å2 [›½‡aÝصՊê$>µ ßf~Ó½Ã×3ÖKš&™g÷ãœç–8mO4àmiº`=—óӛܦ¯hK¡HÒÕ‰Û…ù¸ªï‹úÚ<Ý·ˆwCNŽÔœaCµoµÎ=ÒpL¶{6óÑXÜd sbW#ZO±ŒÏ¦ªØˆŒŽvÖr÷=:ç4¥£«ì4”KbáY{¸Ó‹ôjÝ(Òë‰1Õžx!<ÓWå܃=¼ÄZl8+j ‡Þ‚7·^žNj<\+É)ƒ"v…Ñø—æ·ØÚ9Ï'Y—QV÷RÈÂVEt-@9gI™n™¸ggxl|ïÒ{øMêw k}A)ò­ÞTv3ñg˜ökÇ.ÈÕâwƒërêƒjõ5*Æt{ÛÛE- MœDqyÖ3`]‰kKvW[Z~ó±Uk:6:åz¦:Ëõ[ƒÛàí¾êV‹oؼëÈLF[‰‘—cZ×6ŒuÖ;³Î}ÎbË0[FÁ/0’àµ|ÀôQÏ~Fù¥Ôì!6¼¨ñ~æó–q TwŠxœõœû¯ÄbåÚS][Ú¾ßGi¯³ÁØq“ ºî{h(ÎZ¶x–ЫqQ9ó&­[Và}‹•´ëçw-b}JêõÁO¾|pV›jcQ1Ò¥G­®‚%ŠiH¢§sBÕ÷aµ±âõ¾]k\ÄN€Ràl·—›8ç´Ô¤‹ódâ¨MfâÌsiâ/xÎbJáM»¿Ø˜ê•Ö1š{vÈ/Lé#†z¬ËñŠ^›¼Uâ.|û{^/0´žk V»_r7ãˆÓ‰Ó¦Î^%hÌž7µ À`§…a·–2ùHafÂCO0ƒ´ì´ÛcÙ8ö¸—™d.×ö"*µ˜l"ËÒð‘óȃêØb­òS6ôE![Œ7ƒàãn¡Á¯|Ã] <egV@ƱdÖõjÓ&vR‘¯zo< ŽÄkR5Ñ”8ú4® ùç|¤žorzâÓFB;‘1É­¥²ÒN`ùížiÍ~Áò¦ïÁå.ç9¾ÊŒÄسƒ[U¬9M2{!‘Ÿy1_8Á¿ZïËt:Ü8õ­œ!¹Êß \á°&è{¿L:9µëí·­AÎ\š7c»>X©m¤”lNÊGº†o°žn7r®†»ÇM VØ5¡?F8é”lÅëø*~9ѧ×Rò/}ÉOl/ðmC»Ðt®{¸õóïÑM ú,=þZUj¿Ù¦ql¦)ÜYá«•Ã:Þw]gkǽT¦-&½#`)Æfþ)m<ž{ÐËåU|©-Žz¯7½8ùÊ’z×¥uiþbZ顯m…\©ßEÃhqN>3žäŧv”ÚOv tÉ×ÄoKŸBE(K€!­˜-+§.K.·–+ˆÝ%=*‰ŽÐò–cé^‰h˜ˆCB®tÉšŒꑚ»ÆysîÃ;Dô-­Ž©³užb¼(ß{–3 `–vžØ¼° êÇæàîTbž‡5аlçkc0Âvip¹oagßKxSÐðÙÓ¨º¦ü%¯?0~¤ÙüØgÌEËõ¹745pƒ³€kª;Šæå¬šj:.ú\žë­~†ÆT÷#Ú 1¥H­%¢4üÄa„¯`6‚Y×â±LßÀj¼™¾ÉP„à¥n@lü~µo°Áè.¹"ðßb¶¥ÌŽ4ã-¬0¤`GĶ&ÍÉçïJþÜÖ[ÜiãÄt,v2“}¤ aR1žÇ$»ZCk€†9Xò41;òýÅêÓ`õ¨dUýtÉÇ„wÌuãZŽ8E#ŠñFö–l«˜'±ÈXÞ±·¼+¸&d¹­•]–Šfæ)·;ô+¯–Ê@Õc\íspÞU»)§y²³]"Õ5›ß‹_'Ïp‰Ä®E:‘Ù(`÷àh†ü"©q#é'ú&¼º·DÕ…F/ ÄÕI§}^0„‹;÷-Þ·OEõmÖi_#×`Úà|]z¼Ùyéé@¤uYBÚÃq¬ [c‹´–x¿}Úê@¸]®cRÁòWæ‘m8}ÖÉ^¼¸ƒŒ ÌËFòÐv 3'giX)qì´ÇË òZ–Å0A ÷W´sŽ3ÝfÁ7Ó÷™‰bQáÂì÷Úh&ˆ6Å_EwÉ—k´¸s:BêÈe´ûUY¨´·ìãš~Âè-›½¦[ÒU™_=Hí%+O¦bôžÇ¡2XõTføú?;Që¾è{«ù#e¿¦"‘=aÓ*‰ÔÔèxGåŸK'únN‘ÃX…È:Ç%=þݳ†ÚÎ)„Ú݃æß»¦¨<í*’ÒkœdN‘Ñßo›·Àòaá«ro‹”;-™œåˆ$. ÜˆÚæ@‰ŒnÝî-¾ï(öàh&zåsènQ…5íc¹Ÿ3iL£ ¦w›cTDmÉѺͦõ¤êÞÎÎûÖJEì–¯zDÎo7¦hkç®â.>AçSÞΫ*“d8PøÒ×txšÞ£nmßq|\š\o:ë}ÈÁà’ïS)ÕǬŒÚ:|ë´ûÓîÃ\úWû?CT ×ÇT'{㉴¾|ÎÊ[~™[ì ‘¢Žàoô½o¾—vÁaïMî'}tM¢iæ> fyéq±8ânÉ£ ±á|ꯢ:Ö!è|ì Km ”·±n 9ÁÎÜΪ^ã³Äh7*p3‰gÞ[s:ï£|ó/Ö©92xQa^êúmÂìÖÝ'™>$ÞR@ÃJ½¡û®a,Ê£Ír5U'<øåµË)è°ÛðÎz¹©wDû4톳ƒ7SSs¶Ô„·dܹ8é®>–77`Æõ·¼Öï8úò:@ÓæuÌÂMÊ&£˜DðKÙ&. [¥€ç‹ '%!¶`É®cF7ç4KdÊ2ý8éà\Ò¡džo9·#ˆ×p®zéªìgÖÝ0{l®E5œƒ6y PÜÕŠzy‚wD´ƒÃ¬2„ GQЧGÍeƱԫdzšAúGwÅÆ˜µÓÇ’ÙhèIã‰ì°O/Ža€NgãîM2µŽ8[p¶È®=†ÕÒ1 l­Œ‡ ¡žù÷/.Ë|çZ¼«Û?i,Bt„À¯™w(HŠÏ…9C}ˆ#˜Ž¹Mªõ|uЦ¹Ps³p%FÚc®ŽiûB˜ f¬ý°u[(ÕTl Í4(ó{µ#ÍÚg*=i Ø£R¨Æµ:k°ÍJ··ãX©˜MC™†CmÏjÊ׌Fp;wž¡€çabÍHü(%µ½Šªññ5ô£ÇÊcvÂ燻N®óz’»|^¹…¢I|zÓÀÊ2ðXò]&wÛ”edjn1ÛHqgr~6>F>¸"Ùu®‹Ý‘¼b7»ÆÀzYaG¯·Ó¶ú±úÏu"húÄg=É̼U·[ž¥kÕ Ó©%äò¶EäÂ3E?y˜Kº´3”‰º,ï4›k^žã¼Éá`Stô“;9#Ñ»û‚Ð5QùCrŽdÎo¦ ‹nûÝÐT4=‹Ï’ZÛFøL 7*Cbw/‹ÊóQ| zÆÌYDÈ8û‘n³çë–†LU‰ ·&µ!b9 M¥œ­káÕ%n‚V¢¸~,ñy1™ ær”µnéÎóêè²7Á>‘zyµt¾.Úæ>ÖçÁóÇæF;z>`c}fžã ë1æY¡ƒ¢CÝësÖu<79ÊvAn“ HƒÃSgåï{7†áû]pê[;…̰ ¥ï!âMA÷Þö±åa¥•qø{—I–ý¸Î}º+ǃmv¨“Áú£'JÛS I`¦ÜÒ-ãÄcÇXή«Ù¹È^ŽeÕÅÆ-:0†¶·ik†q¹Däæ¶ÛszZ |ÕºA¼è«vÀÎëoŒèµ5 ôX@Çë]RPJãXy €p#/0ÿ]x(%eŸV׿¢«»Yz'l$¢ë[ê]> Ø¿-%ÞˆSd\Ö!a…ãèêþ„5Q÷{^@Ö“Í ¤Úԫηt0Î1ˆtOfuÅS0°ëy™C–‡ŽW¹Þ$¶Å¹îÄ£ÌÁkÝE·Ìô†Qö\0^”‚›åH!ޝy¤æ©¦Æ6¬í„œ%MŸw²ã36GäZé£áø3å÷jº‰ë/†±--uùØ8§Äòõ†¿WíY{{„±ƒ˜qm¹ àÁq¥šÆJ5a+ÚW–tv/W~Â;]1ìÀ×LÃ.S¬ X8ºzOžc¼q¢Ý|¯)ëI:´G—/j²ˆ8j MT>.H:^ºéûæ±è»ép‚¸²$õÊu»>Ž’wIæ-ݶh¬}0¢q@N˺À:=år_‹t¸?V€0x 6çÓÂóžýJÙN, ó4 ÐçŠçT«©žÌöäx½²Ú% c•ý~GC¸GÚ©±ì¾ ^þÛ§–NµT3 Ô[IûêÂã|£ÁöO9¡_±ðrÐ:îLüÝï&2‚^uòÛ ªÜŒ(ë7D0¸â>zÆáÝÞ¤hÑ>hC˜E'\ÁÑÆSƒ­f˜3òÐÌfhÒ¤ùµÖ|T¬A2yI½ÚÔµ9a‚À5!x%º~ÂÑ5~Þf¦—ÕôL ZêжÓlºŠÒ¾æøSªnÑΩ'$Ç7©®°Ei”®B Vá˜ù8[Äa Μ¢ ­å¤qp‡Ç†ôàìokUK¥Aν©(ˆ g›¿HcÑoßZ¸yrŒkYF¦®ÎÓšÓÚŸBëUðÞ@5 60±²ú ŠXF¤EwÀëçŸ9g‘àöòw¶£vò{M66‘°álòˆú÷ižŠéÊÒ©é鹨!ã”& ÉD .ažb~Qé ô´GóÈ[\§®Hâ,X-±f`ŠÛ>|4n¬DGO|RâÇçj½Ü¬·»+¥€›â2!f QÍüëê`ëD]§·\ǵiÀ§q®x>Þk~߹曹ÕLǹDû¬vè#‚³‘lÌ* = ´Ç»aM˜uÕE]f)¼èl[ƒ¤â{ÆH? Y+7Õ­6<áõ8˜ÅªÒ–Ôé·ž¯yðú.á”DÅl(†¼ê¶É¼]+‹‘ÏœíÄ;Çéµ%{Ê”ÏyyŽïÀ¤– ZýVÆgÙdÇG7îüÕ„g¢ìQJé'Î`Ùª·âþÀé7r¡y˜å P ]VâÆsòÄïu÷X5’öÕZŒ”pj‡Â25›@÷´œ^Õ!ö‡¶ÏÞŸ`µ+ Ã6}îyÂÚJÜ™K]î¥Tp<Ô\au’ ~éÍÎT‹bXævï§BÑ÷3&@Š¡£¦±¤åìâ=Þe*X}ì^ñ#ι@¥ýÉăa!ý¡ûZª/šïÇp¤‚®]ÜÛÁ­å×íb;ùu–yôé°Ç2ç°IÎsÝCš(Úöa%^i!ðþ#:-Ñã¯âÅÜê·.¸¶–°‘{M{Z­µè¥Ö›ÉY‚ÒnZé¹×çxÎÕÀŒü­^zRúû2-R÷UBžV2º}¬ïAP1.9K¥g4ŒÒcÇZLÙlšÈlðµÝü½ŒGšH¥?q¥Àçt@9y}K§,‡%3ôæòë¿‹—Þ@®”C¾§%ÚÝ¡ù<ÅÍaòaë=}ºËÒ¦<¾±óšª¼áF†žš{ò”½‹Ã J9D·'xÓ‘¾06ƒžpHeQmS2t'ݦþœ†,©mdÕ‚nÛ øqÔþ€u’@‹Y9~wì¨ì}Õê 3å´É12ôí°Ç£2¥¹[KݶY8Q¥±šIÎÃÞoYÍåHØ ®${E%Ènކ°'¦«l<»·=³{êŠÙÁlZÔ#¸) ¹s&ä®FH± ï†ó v}Ê=½sAÀRÔÅHn6ïî]jæä´ìcDýÉPò4(]«ÙÉkžOç~Äâ¬I™Ò’Òûêé¬è1JÌ$|Ù@‡$ŒvLr}‘/™ß4å»m­¢( +jËQ’óaêPö’½öüô(QoYi×W‘S97›ò‚O„…pzÀa|YtAŠ7Sq!XÂü”=î|¯ #¯wÌ`J[ËÒ~ i Zj•­Zu¤ë.§-ç¶©ÞÃb¹Ê¾ež¶ÔëêWa·ª,èùzÛ]¤+œ^+·)㽇gITéïrÁË÷wØs°á„f9Î4RÒ.S˜µ¦/œãWmò“A»ËE!ͱßxûÞú{#ëÞ`É÷ÚkƒSîå×ìÔ#í}×#}N±éöÇ¿ö7r.Ñg‡ñ¼+ìÂ!ߊ¡“¾" þò#Ä] „ú}±õÅú?^Ìê0-ω©…·©Z<Ê"9Ý7Ji—¥yãI”˹TñL±>aêCuÉðg{ÌwÜ´"¦Äìté‹cj ~]yÆER»÷ˤ§7£=M¶=†·¯0û»'›òbÅõH«å »L>…ÌÓºbt£ÊΛɫãÃDòçv½ôÐo¿K ×£òÕ ™áƒæ²ºË¢çY¹Çåñ<Ù#I, ™D5¼ûs[t ÷^¡~¬iêBdn=ëÆ°æMAå¯A-ᇌý“aÕîC¼MLjz™Ô<»sMoÉyêi $Z¾¡9CÏžH»›Z«,w\k,ýÎʦ.Ús÷êäcE|öëy</Ÿ{Ío¢Ýu«q¨l=òY«câ¶‹/ZíàÎàÞ}1{¥J?7Z¬Ù%²“•äZqokœ]|=1 ΋TÕíeKÉöU±£êuÏ ðDìýåð²}pO‰ãe«ˆÉ¿qUŽn¹àkÃ̇C^ü>TLÁ2çâàÒù뼺ÇÞïžmï!ß±<©dÖGÚŸm¿rÕÖOn@âQÌk·e­¡ØÞÕtKâag· ÷õ÷÷ZBL}ñ÷Uf«A?:Ì­÷œZ¬Ën¼¬¼Ìua͹0`ƱxØd¦03°˜ISNb¦G ‘ANÐ;ð '` NVlTØ:/0ÙwÈ“}RY;­yU,v5ÛÚSUÖ•òr»™C³˜\FØ 1û…¤-–Ŷڲ &§9ýªðZœ¶"Ñþ;…JEŽM”_=¾ åX¨qåÉ•Ç]WO­Ž¤‡oŒòÈûŽ’BØÎäþ•ÃÝÅ–SÛ|òÑÓYœÓOñÎñZÙl{õ1Ůر’M^è™5 ¬$kSÎãæ\$:ÃdtöÆtZ ãFbWÅäsÊ‘ç¸3)8kŸLÔ–ùMl.$0 î_Žh?r@‘Ô¸¿A‚:A% Ê$„õ¿„¸Ý:"±€FF)OñP ¤XÄð0Ó"€÷k·Ò`0A.äóWÍðÌÇ`F1Ò˹ÛíÒ„P8üRkôªî Í#zlëW :#|Y׫‚œá€~O“­XvÃÍúÅf o 8›T¤¶Z 5à‡myáƒú%ZŽÒ<¢ÕðXpØv²·p¶½‹'mxljʹËõ^•lýì|¾¯L„wZà ~,ý-;ãŽÇPžô~m«s5| Ià‘”wYXiÎÙä~߯¸ü‘ß–ýŸŒý‡z:¸O$’O+„„VÂȃb\FLI4múÂbc .’ªFXDq–³¦ËÐF‹4 ¥ì¨ T!„†U¢qi(w5hnÙÔhØß}óÄÒÆîQÂØöÏ~§ÇïdBÐçeëerZrîw\GF¼ôaÅq íHo€R·¬<¸º bAüsò¥hHF>×tvàB%Ó”ô“·‡ Ë6Û– ’¢ZTœ_ÅÊ“°y€P(2.¦ý¹Of@ð"¶ULžÑ”…â4T èN¬³U0ü"Hc„–þÖ;øÎ°ˆï‡Ó8-@‚ >>2ÅR>d6/Ð3$µ’ägëuƒ÷ÝˉÐÍˉ­ ³tàS¦ié›h¹® Gâ8…ù€µò‰µ›g£ôÂCŒÍöÓ [‘œæµ¨^MÏ]L ··™²]ƒ¨º×BìË"Ž6; »!µkHä ‰!Ý5YÜtûý}RÑdÜ‹§‹Io· YgÙöÐﱫinR2aǺyYmP|QGBሄkF ’þ ‰,üì0`æ R"$¥d "avœðè!’D^$Å\DIùŸ‘ß>¯‡»lÎèóqÄ ¿…2í¤ÕÇ>¿w©Ù{›‚GoweÙÙÖ4L>´‰ÍkRv`6$‹úPwžÖopÆ|ú¼ÊÅ]Md›‚˜+v‘zÊȃ½‰RœÙÓ9òsdTèóÁѪí9öp’8±;yH¹$^¨"ä©díûCGFÖ`Ô2ÎùîþÉr5­ÇÃ{ˆöçyÑœ#¦‰Ï±Ñ¢Jß>ò»,ÜrTDAdÀ”¡X›@\€… MÏl–dŒ¡0Ÿæ"!ðÑŽ ø´9S"~ü§b= ˜äš´!Ûþ+hÙ‚–<@ð‡ØÖ^6¥iŸH²~S¾^4~'F²@À B_¦ÄdT`† AQÈ<™™a@.«k3ç“|Ïëð"ã'‚Ñ\ˆÀleùÄ@½+wߺ™ëwZ£†fž3ÂÁHƒ>K0R/Ø>ݘwÃö2(±¥öÁÏòƒ¹3\qÔ#9 I ÁŽö®èo«°e¨3Vñ }‘¼Ÿõ­ÙÈDgq4ÄžM ¸<)/Ê+©Àj’OÕa¢¾ï¯O°ôòý0Ö]â¡7Ö‘óªSlb×¶­”¢'GÐÄ»VgNÛÜ(²Ä^üèñ¥ÐµèB ë²míN0îL…]{fQ*ÍÐ+Ï]Ð;œîIÌsæ-n h-6T¿-Æe­X(ɸ½Ì ¡Ñ°Òs¬[Š ƒhm. –i0qG#·Ð9N•7… çàY”Î1à€)éI5†ÕÇ“üòòûœó¾vöà (¬H J "D†P•‹ÑÄ<ÄÀ¬ ©é%Ê e°ñÈÇ¿·à7æÇy…гEèëŽȚ¦Ë’Ý\8Ž+;$1Œ**9 [»ž{¿©Ô©ìËÑÍB´»Zï®›WÏZÇV°{Ž£ù›ŽwRá'çKÓaö%ÚÀ¡ã¨6kB±à¢ðÈH}!÷_‘êöžœÊ¥7÷Ü[ηªÅ¢Ü,.Œ‚ ¬5ØiXƺbé3šåãâb“kÐ|,?\X¦ô@û7¨6aØÎ[Șºù«ºÓ•Šþ‹«-pŒy]Gå[˜@ºŽkC‡L½§,XŸÞì ð  E2™‚~¸Y-ÆÂµ‚Ú‹Xrä‰$q:òà`¥ùÌ:Ÿ <‹æÿ"èÝÒcí`èã'+JÓW^º0ØNm±)Äí‰ÌšÝhæìðlé`c<4´Q<¢xÇIÖz„­Ï£ÕõÜoŠ”†ª'¯i…´íÏ£¨éŠîº”$ 4Ã[6ï=KßœeÍ‹z nkqX×X™Éž7Ez¬ÁÀžýŽ-‰ÄCi =|ŸbžÇG~*Þ.Gg¶²/⃎Hf®Hx(Ã;É~[–hº¡‘4›6_v4Ÿ"ÛÙ™™›×g#{P›ˆˆÜt ð‡,1ç6î"®7áõFý(@ Û'n×bc½È×qAêÖüË›ÇRÊ÷ÊLýæh7âË×1Ì’£e•)I®Â4K‰<•t‰îU¿yñ‰ff‘ÑvtìU<.ØJíæš” Ïnû –4uõl­ŽŒ±%a¾D|ñZLÞˆÒºâ]µ8! ç+Wz\œ Þ¯8O{U¥å¬‚A]^aìç2~BÆzJím:à %ˆ<}&®MK¬ŽK£Ö`·miá8=ŸàÖ-ô!·@w '1ø²€©UÖÑs¢ r`”NEøÈ€‰ŒG—¾f ²"q(&Šg4q¡–¿7ì ´@àutqÄer4Az(§.`ƒg³¬–©‘2`ˆW¾îGHbá]Ö`ˆÒLƒ VFV‹G>¼œYâOжËͺχÕuïÛõz…ÌÇÊ•o¦ÏÒÄcÃgòØ×Up¿Zì52 Òc4˜kŒ©ù~>ÎÒRj|¦{̶±½ÆåÔ⚸Oóœ«TŠƒ¶éÜEržJ]ªˆx ‰lFâàtÃ%HËÒëûņ™3à êœ)kkíÙ0[Ïlfu>/¦¾¹Á3èýac…6÷îø¨]ùF8¼ ©DÃ×qfÌ'“kn {ÖŒ¼?Á‹àË5źJo60ý§C0'ž¼Y a [Þ´˜ÓNT V‘)r_ðX Ù ‚°’qh<½™¼\E¶|„\u¬bëêç)õgv/8ô)Y닱Žr´–'«Û›Ž­|§_césÍyó¸àÂ÷¬ X׿sxJßT²(Ï–æs•_fމzýÈK´iö¤ÇÊL]t˜Ÿ¬È3:ò3ÆèØy;îÖüt¨ÎP‰ÜHYÇr¤á“¹ëÅÒ‘:å†!F²G|e30ÏÉ ¯`=装ø†Ù:òëwR…0E„ɉ—â/À$ }9iàt`ÌÆT’׆*™»Tr¥²z ‚00_séÎH:¼Í”±h»„+«Æ*Ú‘¢^Jý®x¹Ï^p§¾1ØSÔÆŸ¡Z³Â_\žó·^ÅË—a k{¥yJŠÛ¥}ë }ç«Ëƒ)¥4÷¨D¼E)I)ÍT“t»ÏÌÆÓ¨ðZ/;Ò \x_e MµÁ[†CÕ¬ GJ‰O)Þ·–‘íÎò²—{´§\Ô„o c›ë]ךçWM†¯îa,w-ï*âu+© z5źÆóMRˆ{¹?Ž.!¡³i|땱ÎNÀ7^¯Pç7¹¦š@~ÁlÏ"I¡„$øˆÚi™ë¾­Ï¬`çé h8à’VL3gr(„òi™>µ˜‰°ll/7ËœÅs K®YHëc„®î¹mj­5 ·®%ÈtRëÎ, «DâݳJƒÜgXžkn7CÜKý áUÃXŠjcî[ÝjhºWkz|€8ryS×2–Æmž OTHû‰T^Ÿ­Jnw–ª >Se0ƒKÉàPc¿Z>nc‹…`n£|mÛY/2 8Ü(üª9ÂØ†6èÄ@á— ôÐSm“,ŒÃÊþ1ȇœ,„¦j™FÚ’«KFš©¼!¡œ¦‹ïd5ÁqŸ_TÓ6‹Øî1ÁÕ£yì«ó6RºÔCC=ÆfÇZÑP.L Òݬ>Ǔٳ =sRðö—uu‹îZÎgdÙHNÜôžâ ï°Òõ¿A·Œ>­X‘¿16ÜKü ЖÁZÅmmÊL jGYËjªÖ4-í²Õ± ’E*@óV$Ž+¬¶ ö`»ù)ÄxèkJ;½™Ð<åÍ Œ†8 °º{ÇÁdÁÏòL$·v0ãkj¤ût=±Ø6E%e†:7 ³Qkv¶:}XxǪýŽS’ªB¤Ldùµ¶GÕËP#&¬ªŒBšÅ 'ší¥¨ß>½ ú²‚ȳZšI<¢¸ï¡7^4ìO¶Æ£¥¶m?V:cÚĬûͺղZ§‰¦ºÍG-ÄQ¼«!Õ&G¯3mŠãnnÉ‹ND:#£yÈý"n$¥Š`êÕB¢–È¿`IÊl–INÍØ@ªTÍÏRíÊ€=Ÿ‚·±÷%SÕÓ‰šÜ\tÅ%¾Ñîøu™°‡ÌáìçzœóÍìe¹ôÙ;\ÍŠÈ5iòÇö´S;EG¢²‚v³S;f°îý`Hà`hï…Ü™…o±¤ña妤‚èex>šÈ­Â\MIkxãYœ¡>ǃM1è.oï\n¢ M:-û+ÌjBkxnÓì¢Ö6ü$œ?ÐROtá!,ø@Ž·/4ñ\ ß”z€ët§­wñáˆrd¬…O,¬¤.=‰¢H%9òP·¶ Xjù9ØGÊ­% Ø <û•§?©2‡žÆd¿¶•§£Æ­-|ûw%úÛ{sÃâa‚Ò{Æ;'¶´lŸxÉxf“õ¼9ré_Äž ëJ‹›î…Ñ‘ «ÔÐÚ•nb ݲ _º8µ ¶^¤„@™¹SÕÒGÂ]ÞT" ZNO}ƒH¢¥Pì¶zVÅ$ÕzF3!, VoŠß••_e¼•³©\ð…cjžðXy› sVµ"†cЇ]AZÀ¢û1ÒŸ¯ÃŸtúŒvZ,ÃYÝßzy«¦ln@“ÂÜ6רS»õ&év&ìÆ•›º•-bÞW"÷ƒ&ѹ KXy•|a2™Ój1Ú¨þ¦:³¶€S,bìP¥üÏU‘¸ß² 0 ªH^  yWÓ/WO:&{@3jñœ$¹œ‡ŽU’ÃâÊ‹¨‹î“eë–ÌÂk& ·|®½¼PÀZ˜Z¸ØúÓçnö–ÜÔo‘Æ.^Äj3€Ùtq̼œì§>¯¡_›Î>™½ðést $’òñå{º×KÞ;g †.ºëV¥Z?}ÓA·µ_L½`àö¯³¼;—“zJ—MÄ%¬÷ªØÇmi˜ T¿d\Ì:j@@Rpa~÷ÚN-†P´Ê÷˜¹‰¯å$±^ÑåÔ× úŽØi,Fò˜ì9äÆ:;`é|DV ÛQã¹cãýN²ç¿G=ñï#'Œe¶¡²ÒkN¼HÖUŽ ¼‘>9ÕݯN-Zмº´í 7L4å›ÉPÚ—­fVŽ}KëPHeh>iœ0‰ØÏ^ÆPéAЀÍbmËÂGGF‰ºš˜ á“NÜQ BÇ%›,: ãI1‹u%ÍloŠÃôe—Ù¦Šsö„í ‡ \l"R¦ix^Ô…}ƒÃOvP ¿w€;ÇH¹YÕB¸:ÇEIæ)*’‰­“¨3*Dµ¸Ÿìô‚ôMZ|Ö}ÁHë Øqdyî½~ÇiI‰lõ@t3d|7b¯x¥3W¬z](A/) Î&¢ö?GžWÓ€×§T?„ƒ©äϹ_KV¨¢Ùë«K›õ~|ІÅéÝãH p¹ùÎØp«à­³ríV÷–q”a§ž±ë(|…Àìó8Þ|6^ò .¤««7¯Ìy>'i/býÓy$˜–;™ÆBô”¸BÙ¥ýµ–fR¡Õ=¥’ö(Õ“lDŬ:&=p´²p«¦màå‚Bu*D¤ç8·§Ýu9¾GŒTÂñb‰’\¹CXÌýR‡tGRè’ªÚ›ØÝcN…ïaÓùíÌœ|«aTL?Åc/¢°´„=™|4éF€—Ì.`Ü„§®¤W9-‡Îøœµ\T畹±5×WF<ÃN‹!ÂÎpQªq^¼ìTm¥…î¸Á”^µcÍT»9Ué.‘@^,ƒ-1Ð|ëB„:yƒ›]ëTv «½™|9CŽAƒEÉÔ¬(!¤FH$ónâ²n`O«‡cÄ\C9§ ñÔÕñJï&T`Yô“lÞÜH¶"'”K,v_V£t±iû‡wKkÁ´êagpÁyðÀ™ÐH¶;°u hJjX žŸ˜?”"Èêj"Ä}/ìöVõµkáç ôOÅÝè°Iæ—)8&\»!\×XÅõíËxv0|BñûDê¯Ñw œŒu]à ŸYª}ÛXÐ×ï²÷VJB%Q-‰g£çUDr­8?Ð8X®Ng,Ët‹eÄJ¦”ˆúì£d—mÞ“Ab0¦1©JíÄè[G¯–»(FáÊzÃTdïg‰p· †ÙÀJöÒÆ;Ôp*þtñR`b£´çL 'ðM¨T<¾öeÀU¡GÒ×-»ú<)·!…Ãjñi¯ëf•Q;/1)‚û*‚ˆÒãg:•—,Êo‰Ÿ.JnÚèÓw lI}zï7ä~ñ¥ej­mô…3 çVa#ÅN{µæi9¨}êI.ѹ³Çâgž!ƽ—ÉZ@†©¶ § T•ù [”êçœh_‰ºÓ±›T®»éÃÔãðhß‘’ãDUb ^Øø~îRXƒ¼NžÕ³~ưN|¹e=_A"oaÂ6Í3„TsZRç z°ÅFÐùú×:ºê5ÎNîtýlgzÖ›G“=’mVÝd:¹Øïͱ^Kú—‹\Óò[x? &¨Ð]¸m+¯eØS6Ç_ÇoІ<\ë€óRhóÏ'hâjÜF«6¬§ÔovxÅvô –fŸ;†‚K¹x”õ‹®kÌu™öAïÞ·Þƒ ‡¿ƒ|V8§» ÷º½^uçq“©.öÙ_‹—€B6‘®©§ÞY¤8CŒìZ*ç¥Î b•½JΰÜxœræ-ÔS¾‘ácÛgU,6¸–µ/z5‰×ÖnN3w‰”AÌ6øÏqlû0³êøZ@Qø”Ý}ÈÇ·íºÑ¦­ÞÇS%V´[ÜV÷‚̹Îï¨ëÆÚ±eíÖ.îÍ—âqGT0'^sˆ¿P;“—/7æÉ\-égÖÅ‚ã„ðx@˜vp©Ôc½IË4Z[!Nâù)ᑜáß˦IBŒ‚·êŸD¿´Sd‹Aü~ŽfqÁ†<["m§Дϛ;}ÍR.ƒ_]2^­*÷åï_“3—ëub•>N{é8¾$nþ):y¼c=Æ‘^l´¼Á'|ŽF5ñ—ÕžTTùkyûÜ ì±ì¸0ßa·$Õë]@Æ·Pè3´’±ƒC×{ËhÔÎT×\!åc:A1®øiu‚¬#vŒ_2¯§£œÉ«æ­yÎìxG)žÕ†îRíÍ6¾ V]ÇØ|5qÌj¿© Ä%Þg‹”Ûrœ¢E+fãûÚ•Fô)lœ æ„AGÞãØ°ø 0}W¡*ÃL7¸7Õ0¡Ï‘óM¹¤&¼8«ÄE­ è§Ýs]ëÌîª+²³§¯{í  ÃâH¨ dÞ#/Ò]§²¿Öãv¿K_bõ‰ûvÚØßcžg-Îiññ8ËGø÷ã””L5Þ4#:Ç­xöyÅ;<‹¾³uÒ²¤sÆïžUõnÓÔå:—9æ¤a C³%.bš´¡Ë„²1Â3òÓ~³b1­*Z¢vXLv×4è¨HˆŸÏ6F¡¢ç;°Æ5ltô†y”€õN äѶ©™á6õnªlÎÉ|Òy¦,9 ZóÂMu9û]Út' ^«n”ߌ ’§ A"1…‘ø,q×}s¸!Ö7íp³Ô¥ÞQ.2ú2M7Á}à&G5zÚð}‚Þ#9èT9¹ä¤Å$½‰ë°»Ð'¶æ ©b(&kpÌÒ²,mf3~ãÔ»«ƒÉ ³©Þ!\-1ÛlÕDn$e©…~Ó@ËVcèÎâ,)åÀ—R8ÞWu¨ KoÌ¥ñ=Ï6€ß­î3^–‘ZPæ3Nû˜Ô§Ó1Z«­©™)ž«›§ç\ì’5©ŒÍ/“Lüøö%Ø1"Y`îm«hû¼TBnv:OmøñGv܇£Ó¬1=Ú»Õï­Ž@ÔÖÀòòÓY4YD)JÆ+²B=3AÒ ð¬n¡ð@ Ĉ­u~ËÕ(·èc1zTOm<Ê´3M”7H>ppBPºZñUnå-³W_P>Ä:^ÛÚDµ¡úMÈtIÑqôu7½µöNW“Zï¾ãw‡qªˆÔ\ŽNdºÚ?fÌ‘èÔ 0uµ ñJ¨ë¥§#VzIŒStä—Û‹_ž—•±ÞðoX»OÎ"¶ ÃÔÕzK62A¤ýÇA•¤Ìߺ.Ä È ðÑ ~Ñ`Cë°d ¸"Üè°±ñ2²öjòº#Ñþ;΂ ø<ä“@ÕšT…ôÉ×V™×v/dÝ!ôV'õŸƒ­‰~Æfyˆßçìý˜¤³ógdr(sS+½LòE½ÖÊÎPµóYÔh¢Ñ·‚ã÷W×{¤‡òº¡K¾ðÓÔÀíLSɵ¿My?Æ5˜(ž3*\O 5Ù ªUL %ÔY,Œ<=Ô›`äÃ+šØ•Ȭdâ&vôã8gKt€ç‰eÓ¦Æ4?‹¬|–‡6¨ª kX=³Q£Iðô¥K[]?ÍžÉoQמypïÛÒøÛïàôÃŒž‹xº×µ[á r}êÇUÚ”u£C‹Nƒ¿–ýb£9_Ð) k¸ }š {¾Èhÿ‚ƒ³ÕêÌ7.žž4ldFÄz! ñK[¤'ïèí‚Dš ‰H³ƒO]>G¢†w§üIùL NÆ€ü#o.€I“éYœP{“¢€Òøe«,yã_?`º”*…†£,ª…Ó«F>õsP‘1úúFÜ)àž? ä¶½ß8´§ Àñ»õ¢oK¦™r³›š>x6øáE µÖž¶ûóxo>¸NHI¹˜ÔÍ)ðÏU@£q˜ (õ`Ë¢ N  Pª;!¾'Ǩ‰ÂÔKòÚž 4ÓKŠfÁ1C!1;´¢»¼":=ãO1ÚG¶Á¸ 3Ê¢nµ°Uf’f·.P<‚³¹·.:wT@@î}Ü»^M"_Õ^ù8êÈyrÁÑUsBØ›q¬¾Þ™¨xÁ>cèC¹A‚Q…oÂ-¹Gæ8r)B7>x,ýªHîðw¸ck¼ÝÇ„rBŽÎO£ë°7n3öÇÂi™™nÄ:꽜]ʈzÓ+'èT“Óéëp@ñ)Ö¦‚—ƨ#C±ÌTÜÞ<&€Wø¨X@v{‚Ho–û¢¸DŸ5jßoê I—¾ZúoÂEPG3…é‚<µ“¿nJLóÕ‘Ä/ož­—ˆ×`Q•ö`ªrac‰¤'m6ñm… k`lp¡Ø$HÜ6Íyãäw¼[<„÷âû´=ì5+ßÖŒ+^G|Èøµ‹P‰äTŸŒ&áÑkù7ÙÊC$ú>‹åóù1僣ē zíYQ‹îl¸ ÅÁ(o˜‘|„WSؾЀ¨ûL¶¥ Ýt©ã<®#y¯©~Ð*4Íeµ(øš‹é…$ïݘ;7† _w»?7ÍrÈ#»9´Þ2–Ì„xÝ<‹Ì6¨½AA=O-`ÂÂTM—1»Uçuï½¥@º‘YÈ ®FóŸèõ œˆ"–͉H§‹·G{NüUÝß1L¾ñ> ÅêR»âˆ Ð¬^¹Ôw‘+¤ˆagXø’ b®¶]pµVòv¶[ gOZ­æ¥¶c?÷E]9Z4SÞ)0œ—ÒGÉ Kö'Á·Ós¹ôš¾pÀ¢âî“#a )ê{oÒ²âןWCY„P7¬Ì¡gм’ÖqêÄi‚òÄ~¯[§‰”³as`˜Iº¨*ˆ'È€(„"³$ê@Ò„C·:kÑ/p³Z¦ªWéen$MW¸²úáï“=Áã¾GÔ•âA×ÊF™j§yw½Ê®Ö¯DÊBa®`y—p‚f0¥ à á@…¦i ”+l/=‡¥)¹.¤ % < ‘!.ÐCˆ„-…ìVtGAçrª>§‘çy.’©mÎι¸mÕ0cC™~ö¾EãÜ㉌ìO†äö?<·d¡û–®™Î벿=M„gÌ|¶Zé³ySTXm>NR~/Ϋ 4ƒ…”8DPËs2£ÎoíÙô‡88ÞV<¬ö„ hAÔÄ5@VÛ¡œ¢}šx[œ€ÂÞž;žßç¶©•ìN—­d£A=^ÎÈ€÷yM`Ò] Ë3õ½´»­OzÓ1ÍAšqÁû§ØNœµ¦æõp«QÂ^ Q­ÖÖ/)‘ƒ-¼¿ëÃgveÚ}²(“s ‘Nb0YvUñž:³!.=GÒ!ºrÒb®Ã˜л Êkò>z$8y°Mxc¡o{¸GÇypš "yÈíÏ…¹tføÏ4¶&˜s«1µ’ i µì'x\ä•dŸŸµLEç¯GÑR•=Øž`wQ@l-øg2Þ$ƺÇ#Ó.ù—ë2/´8y2?jeÐw^]ƒ¹çfÓ¤üpf„-«û–,B±3D›kÍ<¢3¬Ô,^äjÛuáº:èuÓn-aS!¬ËÍP7<×*:*€äsD °0ÙûT«ª ƒwmS¸/U¡…ÙC!œ ,–öF»µH$ô+èm„ýV¸äŠžÏme=æõ¥q‹¾ãĨ@³‡×ákS•z¥äV†F“VLZ~—£ª^8æŸwÑs–¼*.ŽÔß©p´·ß. ùN3íZ æÛ¨¨DvÀ¼y߇1ì*êr™bJmY»ÍŽžsI©«Û#'&WîåwnÚö¥m©¹“6ˆÊ3yûÙŠnT¶,+/ o_]7>_¯ˆ2¡Ó(^Ù+wS‘jÝäb˜/5¬B¢éƒ*ñbX.†$­i” ÄKl4KžNáwÅ´ ©ÚÇq· )0!?k̵fËx²¦u–½ï­Ò­æuboœ2¸||Æ«ÂVLs“ëW×ñéwé÷M©¨¾Ý«½j­5·j·îÐ`ôù{°mAÉǵÖO«%¤ýÝ×W–˜µ¨3¦ÇÖÃEãM±v i:'ædå®z¼Œé‹Ê\î©ºéÆ½oD=îEg:|FC´ø„çÆ‹’¥`­¬êrš¤7zì稻&8ÐèIõ_½q$÷› ½¦ƒq†ê>pc.Úç½ûK~Ï#I"éço¿®÷7í* ÿF)ŸßZ]«Ûk¤ìP ±bL©?uIÐùu®xÔ±wÆFÀvÒ7“î‚Î8–«öö÷Í4[î©ÓM»»ŸDã^Î++ŸBâGRÝ6£C«;¥!úÍdÍ’únÌŸ|uXwº"ݦT%Îv6ŸaUþBj®$•iæ•NSaÇó×Ȱ[–ßXP@§8™Œ¨˜ºëUÚŸih„¦EsœàwªnÈw ìø¦ÖN°_1¤ìuà«ëqôÌo¢7æ:‡íöc÷Ôzì}Ö­Å<>ʲ¥Ó·à–w[tp>ktØFÓJËAq¯1€¬c[nÉ‘kd“Ç]G;ãYÄ„°|Ós±P¾¼- JÑ}ÉaeqÂÁ‹Q“ž÷j¹TŒV«Æl8¬–âÌEè!v4òÕ¤poªUÁˆjÓü¹Ælm¦ZEžn–„5•†ÞL¡‰ª 0Ï…ŠH´6}‡fi™¡}êÛÉG¾½ŠÞ¦/†Åʉx¸ãÞØn°õ섃’H~‚ó…‹Ë‘‘f§«îúXÿf.‘9¿ÏšP„R ‘ãíåôp]ík™v7•¾ÂÝ%¼ª=(÷•ex8çÊóÎÚp«»씓¢û¶…7L°l1·¶ý˜|Q±^`«k™KÛ0¦ØûI~¿ _¥‰ÄD¾OCœB.©x^Ô!à®ZìÃõ¥ãdnº‘[ZnÐKl÷’Ö_P®wvÞY‰{²Kö7 RÝÈ×-^™Ûö·¥6Z‡Ÿw¹ÏȦ¹ÂŠ­¤` ]ˆ9i¬:¯[êk •¸Ívýœ£«uÇvr@o¹Ï¬á˜×³y¾g²1í*û‹]ƒÄÂzŠi+kOž-qŠëô踧³”-îü(Nï(Gl0ìdž2¿ò´èýóÄ5íÓÒÔûf©‚kWîÍTFñÍiiçùb ²k¤Â9 HÑÔØ©Òìœ*^r _h=åUÚãZ<Ú:-ï ”e»ýŠï3ÙCwDlÅöÑ¿mÈåŽv& ÖÑî”ìÔM±÷7!ú7ÊnÇ(ÛÖ¤w®í|ƒJqÀg½mÁÕe<¼õ|ʼnCXt,…î}ûò€æð)û Ê¢~2@Þ.°IB|!Ñé<,2÷%ÚÒÍ`ö*¾[@¿GµUϨV’ó!ËvrC*ta‡z,š†û=\¦4 qN2/M÷ãGާ$ܦÜåâSìø5‡…+nÁÊ\ÌhsA¹´_{ ™€¬Bf_®ב0wÔb„Š}1_†¾ù¤å áI‹E#áÙàØÖÂaqj4m›GŒž+í]îíT¼úþÍb{L³¬à…³m«Ã2Õ&‘µ{yØç(Ú+:9 h½ÈR8-,çMíä±ûß,ŽöÓ^']ó®÷æ—Óä[cÙÚKë_* ÎàmP–I' >ïMØÐLm{_|Ä@OâPAŒ%HvjÑ©Øs¬Þ@æ‘Æ·Ñ¹ßs¾T6o»›ÎÖ¨Ù¢¹Ü·¾)[à E5®B}R¿fÏYk-/mK12U”Nµ:ÞS{Ó•ôÖ.êJqOWÔiãm1¨@§mXz; Ÿ¤[ήšp™îP¥+äìU¾×«ÆÍ?jæv"«mÕ€\î.Ñ¿‡îZ*pF°bù÷9ªÖ:N…máu9×WílslJ­»§5EgÉøNx; ŸLý‘¨óòÀ´{~¯º^ ÆêÆbxç?C·–[Ù½mŒÓÜ^íF)ÙñLq¹áq7ŒöøˆÎÞSû››iw5½Íï×4ï/“˜t\¥³hïudÐb` VÅb&L>þqâÉ ‘§SÀ™« ‘ìöÝ9Ô»´ÜT«HV½ŒDÚ­ìÆz¦ÎAïNspéí°[­=Å)Xôí h ;áµ^¥ë¹i|þhÇŒoÓfë`j¬Caýã€ÐuœízDZ޺ÕÖÙ'ØõÇ6§Ìó1NPPe‰áøjP­„R·¥qfJòîÛ}RÌAqîØý¼ ¹@ö¡é,8Ä*\ŠÞ„ÞÊfs~ÑöKj& Öd${!ŠìoÌ9„ižt–ÁkÖÕ1›SP ½óͼµæáªÁ4/ºõöù½(°C¦"_Zs>ü ½ î¾C;Ë„àì敼æûvQŽm„Ñ.pÜ‚Òö.o?DrÕ~rÇsF# ìª<­í >=ójÀó=ÆÁÌG.šw?ß±ë U*Çå²ð„^5û8×ÕÜŒq Ü8NiXi'(N³ß0^f¡~aDZ+wŠ¥,:ßÜܾ׼8Î;ÊÙ és¯.ö˜Ö`Ó‘3õ¬ÆZiCœf#yžÔ7ªýZ]·`„-öô ¿D¤F’.¸Ôñ[–á½úÜ•±ÎÞY1Ó'ÝWÎ[Ü©/Xí9We,ž)×õ/„Ôw‹_Tê9ŒÝaI7áßÕÔkU@Qk}÷·$ú.¸e«M¯­à—†>«J „cq«KŒRœäZ}î û MÚûÀˆÚÓ2Ùó Ï1¢8B!šï:^‰¤]c*\ìt>—“ö›­ÑµâÃŒóW©QW°qˠƺîR_³¾˜K|í²Ød½ó Õ`ëžb™GÉë˜z™ XÊäõÔoºÚ—‚ƒ•ÒLgÒ•¹ãH~Õq-XaƒøN<û§ÏK˜©GÚ*ÂCŽi*Ö¥£® CÛ„£-7†÷+îƒÔ¦4KÙá/®­Ê¡ñmÝø¾óÒžs ×”¡€yÜ¢RúHéÔïµíï”ð&:™çK¯7¸{¥$Éȳ“–L.[#*•$ì ©ƒ"o€´#ïcÌšê&ƒ„'6Jݯ¥œË””'± Ø¤%MÒ«ÛbË‚QïÎß²Y¤íì8äâb%„Œ:ÚX€ë’•òñµŸ…×çv56šã1¨˜>A’š%txÓ1èÜyp¼‚ÏŒ³žlxÓ<§¸s×Ö+ˆÒ±œâu½áUãrÂek •Lî ¸X¿¹EO ̂㬩C û,®d¨ðíñ&ûË„N‡T™¼ç!ÝyX9Xâiv ¢V¥ŠÌ±jÏ½í´ø•úŒ#2޳U¨œEïA2kœ¼pð¹³é»kn«iÎÛH5š¹êÓcú,=.ç x"ãš¾u‡„ò]jƒÄð´åbñnèg(Ø‹NûF"6:öV}¢ç^•í’hö÷ï¼öYû%ŸkbŒi¹KÙ Þu¡P?Ó'{’Ÿ&lÞw}xþ}d™;2Í[²›_]˜5ŸvN±óq§3ÙWÄyAð½.{rYô+µ¶œ2Ö~Ñט(]Ub»/¶c¹Ú7©HT¼5Û§):ÞºB‘c×#Œ£¤¬aIô¦>êß^|!¦yrë/´ñ…QÔ|z€ÜõxŒ¾Ãq‹ä£ ò²:¦„ÝtãZÕ/IºuwTµ’žÐzò@èzòbkÚÊA¬VÍY}&žõ+ âmhŠLcuÕz½G)Ós‘¾ºú@|²ˆŒEâáÎþçvŽ'`£e­^#íÖü ß¼â¹9Ä15”'ޤ¯‡\d,k§—'ÄÅlî°Ókw Ûž˜zð=\sˆkÖbjoÏíª—0¤¡ìÁ'3i¡ÖAœnZMó,&n÷™ï›Ý,´ì¸…­éÏ…ò‡È܃Y§9¾ö/hW¾ 9æüÁê§Á ^¬ÿP(u{‹ ®Zrýs²c&™’¸·—~¼M®¾¹©C….mÙgãY´äŒ¥© 4mç®›k“É£>i±hÉ“P𥭬7¤ÜB kß,86Ì|3ªâCfÇ…{. ´Í<3¿;ˆ6ŽT#×Za™SP.:ÌRáhj;îXA6Þã„ít c2²Bë«3ä›lQé%´’‘óux_Ï•æ¡ÉbxY¬1?o­‰™&/€qß…Þ•‘S£×¢–%ŽòÅ£Œ"AÜÚàólÕ‡¨´”û¹Ë:ÌM™ÆX¼Õç ÝjÙtæ§Žb¥Zùð½u_I—Acãð1ö9ny£'¶ûäÞËKãv¹.JÄ @"ËU×lÐ3uXûukÍ  gW ´±FF,­)=[Kºm+¹v4E¥Ë¶_+È\9.O¶Iï …&ršéBe2[Þpï·Íí)ªM€B­:¤XOMk ¿—Vå}ÎÔ¡ž‘Žg¸ÕšfBǹY±Tßç/—hÓÊ´7Mí¦' Ê4rðœf3΀ñ@uÖßv§qšiÈÑ9 K4W~jSÖë|Šéò?4ò æÒåMb!ÎÇRà¹SY“ÑÍi™ÌÎ^—x~ã7ê-«‘&á …wö ê$üéÉá±Ó÷oºÖuq!a Â÷0y'—›®ùKKÇmR*Ké]/\…öÌèd¤¹—I“ozu½Ró)·ÝÙm„š—¦EdS|–èúžª~îRçjŸq©0‘쪆÷ xMolwŸi¼¶…Ç®GB'ŠÎA®ºZdW •bL:— kµåԊܸq÷PqdýYïFÕ d’:ªZtA·0  ðµEÚgÐÎ)˜LˆïMÞC]rQ” ¾²xɸ¾šæ8|FZSÛjéÞŽÌ rªú…ðˆØJõçhã¦ÐwÄŸêe‚9@¼¶Í&Ñ÷Œ&¡Žk·Æt›ËÃu¤XÞ{lôR,!srzyë¿UÏ»]_̽¼ƒ'.'“–Ó1Ú ÊàN­“z;›æãD¨ðEÞ­;–÷ËcOè‘9åÉ”e\qnò8VĈȻ_MÉõšSyi*ÓYQXULo8 îLÃkû×ÙÍåÊ©K|Õ!ÁµŠ”î«ÂèCh6:šµä€ì\!OpFZæ/3 º»«¹׈s˜K>êÚŽé¾{‡É°‚(¯GP AŠš´¹%¨ïG‹¶ëc¾`¶Æ¯¹¢þµD+=&<”¬%wP:‘Ü\¢•ÝA6,ܤTv‡!òН/{9SiŠh.l¥”’tO›«Ñ›ÍÛßF“è[Þ;W¼PµT1î§î:¸£¦ Ësrе:܃>’Ž™ƒåyrv…Ë~ñ‘² Ö˜SÕßÔ_;Bgílžh@ìa¦Ê㮳e-Op¢ƒˆJÔcAoZ^¬¨z™Êó\t\fa ㈻ìh¸LGRø´ô&ÜÝiÿ{à©ûëoaï1}X&ð¤–:3Î '®îÞ†S#}ƤSŽÝä/ÉŒáù^T§Ò]V¬ÑÌ9Ÿo´¶èKl¡«æÑmM1¹ ¹ŒOµ„³¬úµèB·¬bB¡¨P‰ÉàV˜ìé²É=³ªÓ³QJóe@—î³?LôJMú³Ÿµ˜RŽJ0ß!<¬+{0§b×¢>÷R ‡[4—‘†ïËÊtj‹Ø¤țڸj=˜æ»Â݉ƖKñiÕd´¥ב_ BûÄ ¤Eñi­ÖÔo†íÈn³›dúèç;­Ù(Ç"^ÒâI Îà Ô,žÏS,ž-Ï3‡»³ñ.éëNäÐ] ä¼?“gù7•jèÞàŠ„=ß Ç|†× ï’ØŒ·ç„ñëKJó¾nwníŸd¯Ëh-×Ìx4}ÓÐ{Ÿ¯ Ædà§£€cÍN¾ÇRÂÈ,ì="–l¥š“šmsgŽš¹áªæÑ_±±ŸaÌû“Ü,ñ1Öá¡’V6<'®qº$qã(lc̤²¹Á±ˆø©|Æ\®²ËÝz#…—‹Ô±ëµ= «+—Ï,7ÓïF׸~ü[ÅD¥A߱ϖZ_ ±ßaÈî[Ì´%Ïn]…kZJ/>Z”Íý`LNÙ4{É…ûÈ_Ì’Å[sÕì{˜<$ÁÛâûhÑf=Ô©=}dµ*²yKFðì$efñsÆ7å+)ûwµ'sÜJq“H‡ÐoÓõa¾Àë{t¸”®¯™†EÛ®ËA+›æÚ•êRµ7åo¶—/îVÌÁ÷Š€Ú{M4EšPö.ìq4mÈvX¢ §.ch oÕŠ#Œ¬ p­wF¤á“±Ém"–+¸Þã¤ý¯wµã ½Ùn§mÂöš?=iµæÚ’¶Ük]–жyô˜PùyØò•¾æ|s8óZo <¡áÝ%B¿žÌ[Z†-xŸoßY}0ÕCæØµý7ëϸ”#K“BÚâÄk0•ø2ãa!+ñ|“aî´Qq9m7d÷.ôH-î9&à‘KžÞÁ›R'Ï’G¬YxŸ:­óÎ5Úx'[ÜéÖ|œ8·Íõ«1U)s餧;Bô¶#÷¹mõìä5),Îèþ1yT¾_IjfèÏ龺q´Â‹‹`$e¢¦·škoP®gz)O“1mN»XòÕÞg)s>ºêÍ2¢¡Ï³ß~Ðô³<K«Õû"nuƵXiÓ}v.ñ³±…¯{CØæJâˆWÞ©—;Õ[ ¡^¼RÌ7C£Ù†<¤ð•Û$œÖëlÖñ¬ëU¡ l@&¼*ú&¤£$5Þ“‚áO<Õ†PwJýÃ3m"Fí^0ÊY„Ú¾±‚L‚‘+Í"/–ÈjN¸³m7;$ ¸Ï¹Ç<¦³¿nVñÊThDƒìøž¾ëYqVò›WE O±€Æ&V—©MubiT M/z…̓s¥Iã›­å;œ‘üµ½ÊdOÉI£ÀêZpÖ+–º¥:!o¼ã´ b—fÀûUzož»:cXϵÒGNUš Ú$q[í3 w£ªtÑשný!Ë௱G½«Œ6H¢û(îy€òq_‘º‚êËÚ‹-×·èb»¶Gwáɱ]ó\¨b6íd뉞IRAQJ¹î~ŽÜíŒ€ÛØûz©®vX½“Ù^ëÀG>M\ù«gQ`ƒÁ%W íå ­ázvó£öÛ^÷„±RÄÎCqŠÎT×Qõ¢,•5ûß9¢»-qKÓW…=Ž÷‘ ¤\åý_¦¦µ†’X¡ƒ.ß©}±5žíLês§Êv?GuˆXÙ¸A-wO j|¬K‰P¸w¦´ç52É×lÁ¨ÕI3Æñ`ÓQgkàsêwC¯rÇGèB‡èÁ=.§Pa5]š^S@–Ò¼«5PÚN¨gmνÖ.‘>±RšäS…•—¹Øû˜ôë(X¢yä/‡³ØåªË™­}×j— ‚(zLKÉm­Va:7\¶ì‘¨Þ=Ù÷»Ãšà˜Þ–à‹³Ð”*íÖðåiîŒqnDsŸV[´Å& bEY¤7IOz¥[ÆCÈöžÑªàæ0*¤ Q6ÚL8¸åt­¨6UöFf$óx¹y[Ï—k±p=‹U=¶­*½—exÔwSÄJnš]qökª^ð0NŽýr Fˆë:Ÿ¶[èµññ¨Þ×Ԋ˼.ïŽj”‚Rª4…|Å"ï¯ÇÛ3lå€vÔÆ¬¾N¼e¢ÝiÓ]6ª½“<Ç^ñZkožî«ŠF[éö‚º#Í(®‹ž2Ï|(èµ(´a9Kßx¿Þo{*óâÕG©†7ðáI“ôh P;íGå UY¬î›Be$IÖö«{µÄ«Ì–‚“›n°é½ÅãhÓ9"óåô9#ËqÓ·ðú•ÝxÒŒìâ6¤©«¡×'\Á&Ì­xÒW×7ïn÷HºÀœ7µ³qLE‹4XÜß*Ì¥ç_bB7åñ>×rÜr¯>Þ÷Ç+ ×7{»|6£f´ü—ÇKŸƒVæ`DŽ6›ïã‘ÜB¨^®‡§Æi½ñ9ÙáJp³Æv¬^FZ–²<Íg„JúBݵÄ&hàÄï& +U"ÝËöÀiiœªåö8ë —~äÿw\ö&[¦¼ž*Äù'ñUÌ05W#:5a›ìÓÁPî˜ 7p9ÝüLÐá¾®r–Œ‘òùÏÍÙñº™‚–ëÆån4ž=©FMDÞSäæó§Šð5Nas–Ñ–ï³H5Rî :g*Ñ’þÄI*=ƒv <1ò)G\K-Š´ñVëó3“™CÊ=Ó4Âa¼ã §œ‚ŸZ»hæcÈ÷Q~r3–“·oϾ%¬\+亟©çåHŒáºŸ³ØSòõ½MüÛë®V—Ë4 9ON[6óÝÃÂ?5†·Ö„›6$]«%F„‰± Ü p°`™(a­Çäë>ñÏ-Ó„'>—nU¹bó§uïfyYZ~}ûŒ°{ {PH+!÷—)>}Xf1^.rœ»”ëí„<òQ8KYA_V¹åv°íüNhŒGbº#/u¹ß&Ÿhvy-çëøt;¦Ï:¼íÉí²Ícæ/Šy&w:{BV¬®å*XÛšA¥Ñðg‡¬‹_itÐ^:ŸÐ $GÕFº¯¨Ò |²&;÷;ðSÅùçGֻŹZmŠ*ÕJJœ¦ù__šÐé¹NðšVëÔº ÖCµ ï2;žç–§—i‹<ØD\¶Q@°’³’Nó{Â=L&4ÓG,äJº|­‘e­Ò‰Ë€Ô§A=¼Ü°¶<é«6ÓÄkgµp³rµî$o±Ôã(b交Û-^ Òϱ4›û‹&[£bX»n…Kt‚‰ÓKbž€ÇÏÜ¡ Ëâ±÷™û#9ÄIµNŸ¦Y´!–Å%{$Ã(ç<ÕuŸb‰Iöìï[vIÞ×Õ£X… Þº‰¹~„]ë«/°y¹hq‘MB~¯®½(CVãjžžh‰mÜ:TÚ^8æq,Ð<È™L:­+Àk™ï {rõ)]£üü“”cÒÖaŸ”½)f_o±¯Þ™]áj#M®pd#ªn0ÎÛq2¸M{väïY¦‡Áý<'xe1Ý>Q·5Xõ&vÈÚ]; F¥õ ÝëU$íéÞÏj:gØ MŸ­kh(˜'íhñjé¼Qæl1YòåF+ ª5ÓÕ? l ôW×#|ç1²›"µ\Ò¸?#;õN°Ã×ZßÕªg¿±Þ—¼.áóÈ_ÝÖ@†úðDdkD:tL¯ãB¥³R÷Jxµk•8§Fæû@ÞWêºQ8c(Ú¼öÜ/Ua ç1œ©Ù÷¸Nºêô𠃩GvµY&8ÞU¡àÌÏ´»8¨'½†™¿m©F+v‡#h6‡¦†})êÆØµg§Ú ñ1kãè]dñ©:„BÁaZ³ˆKWÝÐp–Š67ž-v´m¡_?½ (‚m;%5‘«s«½Q"ªVßD4mmòÍ¥£TºÚ†–¸9ÞM ‚š} Žn8—Ä<ÈïÉYõ1\²Ê©ì×…-xÐDeñºr™ÏÚ÷y BTH‹^£o.­_Às«ŸwïZ4ÆUÔGV‘dbË] nµxø¾Ò¶3‘ÂO‚gV7иn¦ž{,†t!¯5¢"w^ƵǡIE5LÓÅ»?pñÌ´8óÜϼ´jÇlƒ(k¥¹vy=us±¹ksŽ¿5ÙAØjOáç^‰Ë§(z5>Q/ÓäRTš"vÕ^}Ï™rVïØ^-¯>+®.5È=õÒ_ÛR.­ÔÓFb–ô~¶£ôþ¬rRí=î|'Gû¦Ûéë²n›¨U5㤀·lù™z ¸òÎ#žEï£Ò1âŒÛÏÎËWŽy\¢†’Àýq÷A„º\~Ã¥T=©œÂ @ÂñO¡x)ÈB>0±èûg+¾Qû´­§)îGHèÚW7fˆ \òÚÁοJÙí3Õkö{YÊDÎóó‰¥úè›ß26 μ0ÞÙÞb4Ý4Kåún¦·$JqO9ðëjùûƒ¸)]p¤¡ö$­ÓÌ+bÅn½öµ8V»Œ]÷žŽÌÚìä®âKHf|ôùW*)¥mÞÚ-‡Ì(Ï©öGLëפhÍJ5ã†Ç3ô8 GÀ*zEXZCÊ¢îQnKpFø•eò•¹Ì/ìÇ£ŽsN}Èœt*áÁ<ŒY†{ø™b˜LyåqM%fÆù9´Þóªq5÷ ]¾¦/?À°wœd%Ûc´ÈÀrN(÷tÝùN¢÷Ká´s}?²–¯çš68pšÛžÏr½m·É“æAÇ-Òë«{ã–‹÷˜R(ç'"½ò#Þ[ êŸIÄ7bO#¸ÂT¯$)½š.ÈÁȯN`òÏ Ü."›FrÒØøZ@N{Ñ~K2/‡_&¼a”ù¬|ðÝ y|å9¹¼jP‡ÐjÆW´wlÎÛ¸ï©÷)Š8»¢½J6×ÉÇž<ÚhǶð4åÉLr`ã@^—¹LXaë‰l-çŒJ;ÞsK¼ºö/¥êôKˆEôcÏ‚ ÝÏe_¾ô$ BƇBöíÞÁ¯ÚÕ¶Ÿb¦ãfQøP\íÃ~²Zæ3pàù5^LS÷7R-i­Iæ}ƒkÑLCìž‚ÂS×+R„aT¥éÂ\Åh¡AÖ!ŽùjÎÜÜ­ŸµOY/õ‡õQ $ô kè¥u‡K¯M1Ý74ïã-FQ®Ÿ=Ÿ¹œ“‡:R›W*ò¶¾Ñ¯”–¤_­2þé?}b³ÂÚ] ãšúñ̰ÁË÷Ò©¸x{SR,S^m°üµ³¶¶Šw]9×mØ-ÊÂUYúô­#Þ¾^ß=AYÛíd—±Vã4ÿ‡-᮫ÛG‘ç¢ çbü-Ãq•iÈüÎüØb‹ÒI;üXûžõ¹·¯á¿¤ºjÜöÓ .ì` ;Îh£ •n”*GÄy9öÐêè¸uqf&‚vÈ/ Ú‹ÖÍZ<ëÌf»«èkV̹d¼L{BŒA U¤f¯-W¯S ~¶ì#¢^®K8µqÛCB©z-ZKhÞIµ]öÌ‘»ÞMŒ‚/w¸›ßw •¾˜ië6¨<1˜c¨t UöÄ"‰ÂKK5–Ó ŸTEæ%ÒÁwÊÆ“.]hÐd¹„×ÍÝ'+G„£dÙHÝ;ôEû<ªaoíb>*}¯¡|gY¼iú‚¦‡:;͈µ ;Ôv/óvÑŽ+|Ãús.XnýŨ^°ð¥m{ÍC"> IYyá¾}œõÎÂÀpñ^_oŽ/ŸØ¾zû®«Š2ÅßK”<Æ–wIP¹Q­ì×5úYšGe}îõgêè$?Y b6€Tðܬäeq®#é\¡Ë‹4§¬À oŠßXÓò\vãA³ïDcO?«møÅóã³ß“È­cŒ¯wíЩL”¼‡CÖ~«ù'Ï( Ká¾»Åøm„Ö.ïC¯RÝÅ”~³P)Ú~>@¾ç³C-…éÏ#d~ÂÇ› …ý+Úó¹¼A`°¦‡»û1Ïv©ÓlÛÁA·ž AOo¦ ¿x#^Õ:Ù¢,,4÷»{ Þºç°û²úø÷ëWÔˆm§r—§¥ÌÆçŠÙNPŽ{zÓZ¡‹Oë[è‰S?ÖõþêÓ˜ª ìáÍÉã)D½cbßjGh–ãõ-Ö?°W¥oÏ©îiHwmòYÌpéÞw»D+ÝM.·”ÎQŒ‘7tÈ¥99Y±ÕˆF#H"ìó÷½¨îæ`>œaÚ{œyËÃ+öšÆªÁŒaü÷ VhRã-7Q(à!…8GìϾtm ÓÏ+B–ólt0k1/+tS³ä»(r`ï÷Ii‚yß÷9¨L6ØÜin?)aÜc(2ÿðž¯ü›Ïιñ¤Y(æ¡û„7`þƒFµ_³±ãµêZPÇjÞŽ÷Êþ/Ÿ?«ÙÀXš¿/ß5‡K‚³öÅŠ‘Ö?Êêéã¥ýšGb;[®ê?µ«Cmr€ZOH°òÉ©Ê{™Ö;. KÆõ·glö'ÚOh ›™âZù¯J%¨Ü>“òög3Ã6ü³Ý±LL:;±BÑq~¤ë¯e{mC]Í0˜Mž€¹6Ö3Œ3]—¯œnÜ‹¦l8ÚkEÌôÑ\SF%÷%.rZˆo7¶)Ö„²÷›U‹a¦Þ ±}÷RîG¬ÏfÅ ûzr)áƒá‚b•H2Ž_Sæž=û/,´²ztƒúQÄŠã=ÆL±'½\ ]VÚó…ËÛ)/Õ–¯!Á=æ=#,hjŸ¸ûuÏ!* »:›m(oT»­íßUtÛq}G²…êÓ¬%(‘Ú9Æu™hð.gÐf´dK'‘šÄÛQ´e°O%O}Ç“º’ªO…ÜîÞŽtЈåã©X­ÍQ£NJ˜5èj-hÅ3µ—{¯åj/oÚ ËÖúemÆ Âœ¾1ÛµÎrÎ,˜äô©êœ†+-(êùó\r¬ÔcU_¤8¯Íì&üW2¬c^ôóèëî#quO½ò$Œ:¡¨o¡³ÄbŸNéžßrûä”$az¼LÆú;L[Ó.lеÍå¾m±ÞÛ ™îxp’/§\B uc[î6ßsòÕŠ2¿Ö· Ô»ÔOËÁ¥“>÷´æÌv†:™‘ϼªaîÙ×f¸Í×­0‘6F-ñ‹º3 ¯>¥åÑS =iqZ6¥Jž¶ø‡ÌÀrTÈp˜3o?N!ÕtOéôë]z†m”9]r­$QÃj«Ø #/M_êá{6ÌÏÝäÊžÖ±ÛÚõXm‰­ú™˜¼©Ø·T¡9P§HS¼~ŠÊWö¥hQKÀ™´‘Ozný—ó¯ö5ˆCâ¼|Y¯¾^ú»•q€¢.WJûíö3Ž~.üpµ Ž©fr€6]ó¼MjW÷ÎÁ, ­!Žþ¹Fú™òï3÷#e8×ÙÜÞç*rÔKŸy>×L/4iZ¯]V^ &–»“šrÔ«yžp<,Nzvú)&¢{Ùç<: žË7#ݪ ä~H´íÙt5H CÞwc`ý:G£)K;Ϊc8‡¯a¦võöéºf_˜Ò%è<=!ì|*,˜o§•^Ԩƚ™ÞW2¿³9 £ªœ³`¸ËégªÚëCíV­¸ýΤ½ßv•¶£\Äö›û ·ÒÊ9ñÇÚ cä¿Aœuî'ìï¯WÓZæ¸ëŠßRON_z vÃe1úñåôo"(9[4`Y¼F¢´›ëE7¿[AϪ²ŸƒJbó7@ûÏANûpÆšú¨¤yxoúÎ/­L|‹N ßcãÏØøÍ|ø¯×¶¯j â»·hØ™-ñ4+縧Ìi„ËÉî³dSÃÜ0c¡—œ)ÕFxK:~VJfÓcŒ=¼[4Û²WkÕ$Â6ýÒn¾Ï:BÍOµhâ»ji>·Ï@JrÂ@7R/’‚FÓ¨èãÛκöé5ݹ³õ'¿9·ÕÎù›Ÿ–Q‡Ñú®: °Ý·«vÙÜ<¸F™±¥%p|}Vºh–Å,N˜—3Wæ)/DÁFoÃlØ›ì1iœ>à$¯õåD•ƒ‹ÐäÛ@˜Æúzê„çù;¹*j#W¥=Á¤î]½Àlª}}É5M §Hzß%ÞùÎmRx™¦ÄÿjQNsÀ–Ét–ºPãðóZnR¥·ŸY#¿q‹hºÈSáŒÏ_æßÎø+D&ˆïUc=õ)ØsW¨_õnÅ# ã6ÜuLƒyËVtܹ/§;µÌnVÛJ¥˜\V Ù£K’ƬUž¥òˇ¾/6Q.OêÞ kTÂ0Ö“”\½ÓŒ'¸Þ<ñãÓ¹ª¸l4©ÚÇêŒýµžöÙ>Ë8PµgŽn[^+·Y§:WR8=/šP’×îÅvÅWVð­Ó×¶íö.¾ô©« êPK7Qz„G¥ËŠ?µí×]¥Û0úAnE&sŽ™Üs4l9¯"½Sëjù¹ÂõÞü„¦3Çäðƒ÷ÅE¨‡1¶!¿§7Û¿qòÓ+ ã]¤j:«îeרédg÷’™îé­FR^MR϶œ¢È6É4néóóÖ)Æÿ>uõµ@×ˤ5z,íªÂ®Xy”Ð÷‘Œó.ç­ sÚž¿`6Mä%ÉXqß¶ß{Øšï¦=O§Wg.ÃJÑëlÉíi|É`óλƒÏ’ÔT¿0ÿÆX£YERž`°wš®î±Å¥§O^õú3øì“ÞZ”Þ‚ÛÚÿ~þ‡ïöGð~õ„ѱ(4£K´¥"PR”Ò´…4 5EBGS‡DT‚\ˆÎ!ýïéÿOP·ïcTS!¢Û÷c¤nÂ:EÛ( (P%½ …° HiM ”ÄЕ±!A¦•Ô^˦‚†š I޳›aÏñµ¢@<ÞÚòÈBRìbjI¶ËEZ48„ˆ*€èè”ÐD2XÔš4îÇIÛ¡¥ÑcfM¬Å£hØéN…þ†Âyy ¡öO%ÝÒÑä/BG˜.—È;²†#IA¥±¼…òZx´õDP¾6‘aüŸ\¨ÀIH,,HIøIÛ=ÛF³$eô«l 3L –w‡t4R”4ÅçcØòCÙTÒ^Y¡žÆCC¶4ÅÒÐØpæN4k™yâDÂõ¼Ìˆ“˜@6ÛŸï6mž8•5YºécŠÀkÿÈü\4-Ã!\L§ùŽ%ÖQ»7ðž)šHž0úZÍoÍ–I@ ¼Ž ôŠ<šI“Ï3MÙ¶|Ø +Ò¤60ÙòäÍ4ß9çï½*Mlö韌洫Î|®ÿ‘Ýõ TùXQVR’|¶¤œbdÀ!Nd#0&ÁKd ”þ_|dù 3áò¦‰'ä­%óÍÄãÎî>¼wasQ¿WÇ,›ÍË›qÃ*/ÚHSldßWw3L&‰¯Ã$”«)$øgnÙþbOk0 â¹( 2iKkù± Ö3åôÝ„!Å%€úÒ˜ãßjVl±'Œ NÛ\OŸæ&Ë>cŸšÏíÝšIV{žJC§XœL:VàD“‹_ÇM6’2øâjÇ[ ”çÛ½¬¨í݉ºÞ·‰¤:²’nÒ\ŒvþWIãñ—M¶žü-8–³Œd‚á ÚâR϶ôP>E$Ÿ €2›­å§ µýÏö¢?fÐÄ?ͶÁ„cOe!å`4©É÷C˜r%÷F 3&5 [’öªã!†Ù]}<—̶Œ&(›â>¡‡â¹¯UL2~ö~ø (‰þ,'IIM 4UGô¿`@Oû iZ¤i ™¨ZF’¨("‡'qÒ$HE1ÐPþ¿î¿ÕŠˆh(­?~†`ŠRš,yqŒtÔ“¤( ä%ØME¤R„¥Mt¥ ±¯ Õî|餶vÙß; ²È+Úü÷_{'=ü¿W¯Œ! È Û,Ê¥-YR Õ¶SúíÍ!­¨«V±î³‰šN2+y”À™51ØbHC/>[Ý©·u§QÇe÷ß|úâ‰W!T!€`Mªeæb2h¡ˆH©ôçAÐéCFƒ@šSHU.b¥)­W‘¥ é4Uj’'b]t%)$ íÛM%\¸K 'VxÎ8TqÛïzÛA{-[4ÛÎ÷(cµ¸¡-—e0…)* ííç—¯^§Îßf¦±cRÂ|YeR\cî¶ ×Y4Û64$šEq›¶ë K¶Yü”±‰UÀèqD*‚+ çM_ÔœIN$g)4QÈ[(C\ Ö4y˜Š•’¥ ’™„]u)a®5‘3IĪëY@˜•/k¹ÖE \¹R÷9»óæÌý;ªHˆa„ý²ó¿M«;å¤ ‘ gèÜ×`e&q/¬Q壨CJД‰IÖ¢4‚è X¶P4tØÁÕ!§lj1…ö1yæ‰z]h­c`é:.¶@ʈJS"HÖØÀÅ•²yCŽ€:B¶ÛH’Šä¦ñ4ÉM&›Ì†¹a‰$kˆëšD¦d¦$5)±ÙY®&ë)%­2D’™";·&ëH“IF›»%3Hu"‰ˆŽô±©b£m¤y”M3So.q›bp䉯NÛñ+ç§]ìõÝÜ= tº@è]Œ±%6j‰!bÖF¹xq„wrÅ .Z*fŸŽ÷v|'¥O>£@¾wÛ™Æ`|=-9¤âáÛ’“œÇ`ñ)"YKÑã!¹zCÏ8ìICTOvë¼Éh·[mE<Í:|×MS=BR?©öÆQüY}®Â‰ÁjÃ;ñ«­í¡ÀÈ$F–Õ ÉQhá®zïø SËÝ}Pyàa„@A\8`1ŽG¹¢›¤b}6ã;¯R¨:øù¬$Qua›Cä"4 “NE‹PÍÙ”$«P¢Úͯb¸™¤„%îc³uðÜ« ­¥‹«oN‚\ecR-(•lJÃ’>n™L›‡0e¹K)›ß;?¯ô5íô¾ú¨ ‹ó(P¡?¼€¨'ëÂP¥ ” T KHµJ…LÔ±,Q%4SLM.%Ž@ ¯åf’wÂJhûv£mú“Ž-y+ JA  DiO¶@L@¿’S@…7¦Ò%G²&• @¡¢¸:ˆ®ìÊ#“¸Ž“‡bÚ–Û³f' ]jí¦’‚X:i6ÈDEP´éЀţmî×—ª ^€£F¢¥kwry°y<ǰbŠŠ£ˆd‰ó±Ñ‘i @R'°æ#Ù<”)“ì‡Õò}“ç¹8€èF‚ùÝåúõ»«äòì£ ÊÌüPËî´ÀÌ\”Î$‰aó4ù®N<8``Ã"Oä¿z¤W­•‚ã„XDt§{Þî¤Ä·"V, ¨0±ÒØä%l«6»Ž˜ºÊ¬Ýcf“T4 M!.ÓGaµ%Ò[æX>ìjtll$+ _6^ý}ëÛHïäjø^‹ë¿[íÄÐÎ~œgCͲR˜„GÄ`níI¸%#\¤ÓaTÉFC”“ˆ“ ­€^»±!6[7bHl%© X·KíeÏò¦BËÒº}X€fü­þ<ÍSã`túÜãh¤â]ül¼Ñø²$ò®ßŸ\¼ñ@‘­a!™ÌdœLëò¤%iô™°ž:V`ψ|±ûÖ}1Ÿ?6}ù‰ä?žìñ4™úýC.ÚaAI>0c„ Îiøìøí®ý jüi¤L$Ò9N«Z˜<ð|<€ò‘ €ÉYé<½dôôôݹ›„‡âÙq"_Ð{¹ãëCË¥ÌIü5×hÒNž÷rCÄH¯$vÀPh¢ÄcL)Py Í'4Ï U-óŸSز (ÃS°0`’;Xˆ"§PÁÚƒ"ð´ ïd"¬ÃD– IèËŽÙLeØ¢%p¡EW"™"¬w|Ï]Ú¾ò ýßðsù£îKHÒÐ4ÿ_ùý~þOOæþ·ù_~/·“üßwîþ‡øUTõ€~Çì~ßí‡ó*) D*”‰-µÙ±~Þ) N“ôcé>1Þbž‚ß·”â ¤|ºTèJS „ë»#ÐØÐSXˆ/m¤1T[K Š"[–â¡–ÒX‰&ÑÆ¹`¬Z@aPHF0È®2þËjÖÒѲÒíµg6Í7>¶$ó¸ÇÍí1Ùcv+ïo ’ìÈùVGeÖ9ÑKÙÐyuÕ15'×bŒzwPtô`šT®BÅ Ó£M+ILI¤i 4Ð'“»Î]hé:PÑBkI{Ž:¼át=h×@SÑON÷:(¤ëùyyÍÍXTq#Ë)¨îáëTÔlè#¬Ú5¶ÒÍKñ¶ô¤¾ûJ÷m2ÔâÊÙOò²Ì¯7[ Û€â0ÐA…«õ”ÂnÓ³KRþÖòÀNqï·f±'«IWûujÃÏ}ûÄÕ'ˆÖt®ê×5ܹ¤Ô–Í1ÑÍ4¤Ý-ÄÌ)l‘¬ÒAbh(¶Â%¶Ì‰IŒë;º ¶™cIlDS|`„5)‚IéÚ $…S!Ìd݈Ä;»g'%ÊFY[8u &ÖÖd Lˆœ$”˜œKÊ+$Ùü~å8¼$èCîO’½.óvÔ‚õЭB”¯y“±=އËZÒ[-¦Yõ’“{£b$±Oí~؇*[¿SH*Þ±ÙyïÊÞÝ”mJ¡=›²ÄºÌ¥±ÉÙtɪC)$5“uÈÖ'ùI6(ïᆲO‚RŸ>ntN†lÛ.iŪEÙÚ䤽xÞéM–›µÕ†QÖL埆%è»ç<󇢺ù>OIOlÉÄ fQ2&gB&·mšõèZ耋ŽHxðÒH‰D htðB'ÁðÅ­#+‰ç㤚|'`dL~Kä:®„öùïrP úmÓòÓT:õ~¹”tƒÀ¼všâe41£–qÙa…Ìa@¸M#^ƒOoXI 6H îaÏu¶NÖk³™¡)‘£F&6ËŒ0Ä>#,BJóa4’f‰Ï&‡ˆ ÎóîdñŠÀóš\›0|°Gó]<Ï Ï±íü|fém!Õ¶¶ÙK}­'¿2ÐîÉ"X‚”,zóP‚×!Ê›cg!h!l,ñ,<}%03Ðø´ãµ8ëÅÿ/ÛwÃûÿ“òŸû%þcö/óþËõ~O~߯¿þPTP€…¥V i‰iRš)œqIP‘ÔpA%ý¼ž5KE$A Wí`¥Õ4CA«`wa±ø ýØòDò_c0©K@´-!@P'HhZF4e(PÐt­":A( ë@ô)ødé+÷ Õ U?6q~1*‹Í×~ßo¹f/˜ã«Ý=sËL#Z,ó)’¬DñÕÖ VÐd†Ù²„r:¶Ã)-£t%‘µ ­©t-ÍþÿnSPy°G]•Ô†N.¨Œ,¨už&“Ž„+ͤ):ª °CÛ»6V ‰¤6¤35r4g 0º´· ÒrP%ÿ(T· Eœä@›n‹q yŒ$ï­2ŠäTÀ øŽ’Pð„Õ†ˆZ|î醌 „!;`7ãð¸p;þ®Ðù(â{÷Ù¤œszÐ ÏÜÎ4žlÑÛpB{w@ÈC1ÒÒˆ‡åö¤“Ý÷gáyuØF!d"#hÙ¤¶oÍËÌxÓ×}6‘Æ1ÂÖ—f‚X‹"“›]‹-2ÜÆšè™š}4ɤŸ¡Úk.`|¾í³3$µy€¡Jz|±P{t¾Z“LÎ2i$Þ]Ü©&uøYÛlÈEœIi=bdL‰ýò!¹ÏnG!å\p9…¶XïËuxÑwféx“CŒŒã1Œt”N.3†¸…ƒ1®Y\½s¹À’8™4µÀFÆW1.k…h€#‰øÄÂ|ßmº©JÚQ]ù²Ãº«ÿ Ct·ë¹WoÍÙI4Áp3>³Œ¹7£’x˜ëÖew¶¼‹:ÄÐ…\‚’ìõܼÛb×–Jf—šii«bIГr»PõCäQäžJ|Ùdò è“$ƒ»w/–Ÿâ­ø´¶P†Wã“áŵ 0 (ª8(DXØ#õR$áó[–óšxO8Cmù·†ü6Ï\>[Ÿ›òì°ò £';9CÛ»µ·ŒD`YZBØÇ]º–F­ƒ\As,¡ƒ-@Ásf‹9H/À÷e_‡ÙçÓæ`~lÇÃú¹N]ȉ  (oT³„›zÓ¥B;¹1QÖ-­qÅ Ëm¬²ÒR#`”ú]ƒ1ùe–ÿ–Üÿ_e•I3áð l`%GuÙ3sq#̳‰°7S`ácdÛ ÿûÛК¢Bñ H Ç"ŒæÔÌC”37T›±Êgøõ™ãÄÏiÄ`"5f~›lß9ºé‰‰ƒ¸Mß¿Þ&îÿ¯Ô%ïîk»gâþ:KX¹ÄλQ!ŽŠxô²éÐ>BõvGÏ0‡—ŒMáh tyÙ<ªL ÉÄ’RWlÈÕí{¤4¤€±Hß¶ºâyÓt¥ã®ýÛ ¿.AÙBµÏ’á®7û•$Àj38¤¤¦K~D’qž4µÈˬjF1…ƒ””QˮϻՉ¸ËkTk „®ûB­mÒ16\g‰n„­"mBYw{{`ìS H¶äI-ûi ¬© -V-¥<Ÿ;C3LJ&_ï7ò~Ik_ ~{ïiÒût¯]%îSä‘í@P(oÏ{Á‰ùi}>ž·¹×‰7œêªiŒâK\om4=_µsü—ijá‰z64 o϶Î}å¿wdk> -×jí"^eªë(@°Ï›.ȦÓXÃ(¼uOö=2% rÊ áÏwûw`z LXÀGÇbò4—X`á%ŸÚŸÑø¼Éóùjañ0¿EŠªqQø4$+‡á’!áî( ¨˜o±UÜ ñ*C%‡Ul="=»™Ì‰þÌî{ÄÜÜe•&5I‡ˆ½ î䱤”ÖÂ:e¤â­%Ch½Ø6EùâÍ£µ]xÛqŒ6„.Y=Þyóä~Š (‰ùþ÷aõ?Ø §¿gØ4·#ùÓˆJ‰) ˆ‡l–ÌTºEˆHív](¶„[e ‚“¥HRF"- ti (M K¶)@”]•ÓæÈE䆂”uÅIÑmxϘÂðŒš5©œÇGOGOGTY[˜E‘…ÙÝÅÙiTU bij¥4šZ¶EÄo1Òa*4h ‰t„lšS§™Õj1¬cÅ è³Fþv‘Û®CÉ5|ÚV†”<œÎ€ Réòê„èZWÉ4”-!Jë@èÛhˆ nËF—ŽÂwcðK¾ožê¯&ÙÑä/IîÅ'A§Àž1a¸(óIL‹µ€s󼤼4 Ü›w7Q4Í“_ºlH=.‘×@RH¿«n±…SœÄ“QÑ Q#®º)?‹ÖÔ’˜ÁŒZRζé‹Zœf0”€ˆÂ’u¸xܨ kVe0™”ÌLË<Êd¦‘2 )׌íÄ&``ÂUe`f&’P$+âX?¥Þߟ™öˆ)Ä?K°}¦~Ò}y|ß-Æu‘¿[éÙŸ-|ÄãË[h 0Э0:¥Í%…cÜ–[r“–KÅSïï·Iž«Z|Z@!6ÛF±-Õ@€ T‹>ÔÙ ¸›l·K]eÃá3`Rˆ/ÃÆ D–´˜]ò¦ó:i PšSÈ<»Ì©FÙ’y{ Ò l’‡N…(^‹m¼ž$;ÛÞ=‡ÛË^v$ Àrózð«×õ­o‰pIa®ákIPw\¾9jJi4•gðÖØD+2Ô&ijêþ;Û$ Iò›s4‚!“K"³Ä“yWuÎÇŒI*‚0ö]ßOGÜÆ1AI›ÛlãŽÜ¤å’iL¢P34šh41&we ¡%šÕÊCUP¦ˆú]ß—#Á¥±Wçï³8Í‹¤w¬v6½šæÞ.YÓÀ¢é ðiàæpL 5t¤Ÿ ÉByÏÄÖ$‡Þ¹ÐŸ óÝÁ›BZPñ¦ü`M%AÈð…|J–²\mW,l¤$Ї,!j†èþ¥¾»íΞè @l[ní©µVg2ëqL#­$·l‡÷Tá:±¦ÜAŠ ÆŲ Kl´ãJg uò3ðGÔ“¾Çæ‰öµíd-§2S›B#9†‘–U(ŽCEúÉ. éŽÐ&“£²ìéÎë°é¶áµº?Y¼æ0H¡>ˆ$¸¤lõêAëÇÚ‰¡=ÆjÜ[»s»gs»S'5ŒÊбq \L¨Ã€¤!•ÙL5Z¯Šô·«d …éÎ8ç?èx¤) ªB„¦‚†!uTpQD]R'DPDp §×â…%_þˆˆ©øXýtü1ú÷ãƒJ5I}ìèM û?R15]Ÿ—±¦¼íÅKø#O}xÙ$<©uOÈ ýpi@òM…:&±Á–zq%UDw]Å8 BV(ÊXPT•˰Õ& Òi™dÖQ,D„¨9H˜óÇÏ6tÎö1Ý8ª©x“$ë)aX‰›q/6s‰ËØÒÑ¡uIE-&1PR³ZN©éªW¶ÐP•e½±æÊã÷yGqÞ[n*2 %RZt”: d6ùu'Iø²NIÉû[Ò÷«Ø9Â~4Èyɶ2@âq]²õpÄ $V25«ÖîpÕÙ¬®ÿ÷v„ûÒ–ÖŠªi*øèg³ú7£¤3˯Œ{m¿hiâ$xÝÚ¼–Õ¶? §·å¾MNbZ9)^Û¼äU$bäâùÄ¿8›V§¶î’m7›œÎô4à€ºIL¾?wi g•[(X %µãªkéõï<ÁM±%HM-~¬©ä)ÖØGIä¯@¥'»k^l´-+ä‚—X»d("¤éÝdºæ“L…µ†»q¶ ²é ÖØ\«vhÅ¥[nìÊKvÍ ;h±)ηùí2O “ÄcÍkñÝP ;˜”ÊIð’q6=Û)¤þÂH“)?bÂxŠ bÀ”ùnêS$W–°§ÊàC™eØZ6WµœhS©M›B÷d¤Ú:3YM@t6ï]î e%¼±væ¤Omêöõx@§˜ÔÅÁL Ì€{å Ôç+Y“Yn`XK㯌ñ&™¾¶Rg$Î2åÎÖ{ããŒè™„?eñ<`e)‰ôÊJgÃ%ù­ÄDÂ$ Lwr„¬Rƒ-“µšB+<¤JeD báá>sŸ:4N´˜)‹n\Dlc1ye«5C6¹IyG•ü;ß}æ ô÷zIý_Úò%ùôßD¸QOÑ/öu…‘&Â$­Ä½¦ÙÅ=c•Ç#4l3ºËùÀé7˜Œ„™¤cÄw&«B°ö°Î§“jÂZý6'dJ’¦öM(‚)É,wšq#1"q¹©>µÝÃÝxzxÞöO? ëxßx.’¶î¿Ï$É&LÏþdÉB4” M ­4ÓHRRÒ TM%SJD”•I %Ç'NwQ @¨'/Ü–¿öU?ADü?gâûpºi -·éý™ûcÈ=’“@:¤ &nÎì¿ hM/A£@–È)M°iJ”‰¤tP-²©¤iÒ  ÐšO%ë   5¦€h 4 ÒP´¤DLQ '!dùâ·úokçŸÕ}§·$T!Ô[v¨îŠ:$ ¡t5lvºÆ!4Ž´¸ÙJ–…f4Hh4)BSE4´æÕ[f1«ÀÛÉãRiLL¤Õ’RR‚öÀ ‘(P…æ:¡) *“¥M w'’žA®Ÿ !:tÖ“MI¶é (8‘"””›c%¬+aq5Ûn™´¶K ±e[KUÂwÝ—ÝíCTéfîÍ÷i©Ì¤®[i„$²ÉJ‹”…l‘#i\öË u'‰bdf¥ÛW,24´+Ž¥Z-ÄÈT\¢@?Ó3L”ˆäbéà@WJe%7gKõÉÒ'šÆ&Ÿ ÆËkÖM$°Ÿ«îÜÊ`IÏ‹*†¤Êù‡šw×µ…Í/ÆöDüõÒŸ*íéÚè+@%Ù|“Û&Ún†fDâH’bLL‰>ûßž}éJL‰ñUˆ. S$§­¸EÆNeŽXK]³nÑѬãs¾î÷¤x pñp’M(í¶Pðv +ÃÎ6¹l`C‰&®$¤¤ ¦f’Œ‰@Û:qip“il,¯.æÎ¡¤wG–£‹k= ¦ÛLW‰JdÞtÍ›®é4âi/D„{wv ×.Ëx»ùë`þÏ—rŸ“ÕÓL„3ßpyæuÒŸ!5äÓô¾’>By'Z @Ëá#ä8™NšD‘f'–Rn´ÕI§A'ÂqÎÐÊ?7tŸ6ÛÖóvaT °Ç[¦Õ†hHzš ˆÀk®˜"Ä9ÕuB4Œ)VArZâ$‰H˜ÁâA?Ðþ†2!8}ð¥&³nÈšMÀ%$B&$Aá~ñ×õž7Ö©NÌ>·¯×g‰Ï 4[ñç‹1Ô7ˆ¥ò3#±#S mhð¤1ç_ DOŽÝ¡æ†Ë<îNÄq•¸†œ¡$+‘RÖ‡w&ƒ¦=6×O-Š#6¾P¸øUÄu°âîn‘&“wlN¬7û-ÿ_ûH (´ JP±%+JÒ§qwˆq''DQ(ˆ¨(¤¦©©ŠýN¿.A×üÝüåTåO½ö?Œˆ†„j‚>ßËÁÑÙ¶b)škX‹·q‚¦vŽÚb)ª]æG òÇò²:`úCÐ…= Gä#ÑEÙÄÜd»t°d¤L+k YŒ" MË\i%@LŒ@ˆZÜIX•‘¤@£r¸cmÿ[m±€ÇkN=³zo ¢ˆ„öîÑQLÆÆj§Åæ®;:{°”ýQÛ)ä„R‘²kÉ(«lJí›gZGXŸ;¼îì›mTP&’î9ï™1óÓ“­î F²Û-¦ÜšÙI'çyÞYVÛ ´·+-Âà -ÊË *þ?nëçÀ±oêw“ß6°ÐÚR/àÍ4íßnpN$ýN6yrÀ =KfÇS-#€³úfȱa‹˜Â$ ;—”LAy¬ Æ¡J~ë´bø ¦uÀ‘0«ýé²ÂŒí½Ö–?c)uý5žbiÍ«(B½û¶Pœç6‰-µL# ~]'ºS)!%±ÉOÕæ :¥ å‘ócBº@)ZJ/!_'ØR$özÑxge$ÍŠrÂI¦EaT1·pÓ€½úYxá*„wØÐòèÀå!ܺýí’~ší>vRÖzÇQåç—#ÈÓBnó„»Ãºi×› ÒS£Á»e» -d­ aÔ`ÇS¾ù†T¸q¦Þ)20•l—ŒV‚gX¦n|œÓ¹‡JÙ4”@‡Ž;nîKÀ˜Âe Hå8_؇NîdÓs bpiÛ’£Ã©E­zÚ:—NkQz1z+êg ôç@OöÊH¢RÄ-”P”´P4¢€œ$)#ø@PÚP”´¥TUOÛ°S£lQ 3”¥[#ZÒ?l¯E @/@PÖ‚hDèBP"PM)IÐ!¥€(4 IÑÅÓM«¬E¥{°R5öK0ý·M]^ìOgQwncmRkFœÍQ$Ó;:[k-´¤I 4:4èIl”Õ*«M*éi‡ïÁÝa::†”§C«°VìÆÕ§§‚ê4itÛk¾™4¾Ç²OF<‘:=ìÒ¤F”h;²šGG›(uÐôJ± 4¦RfZÈ“‡˜?§£“ÆI«”™Ê `'®mÅem•ËE¤r™Œ¤"[‘²$[r'Œ›¦ÐU ŽBJæ™°Âí`¤KjRßuZRX$hÓ4¼¦í<ì C5Žo¬¥Ñ”!Ý7t—æÙúöÔ'à oG4>šçÃ&a4§Å€’™ZÉ àŒ’˜Wá—Y¡ç(¬{çDF€öÒ§>7^raèèË`œfmdÒ,}.³¹Ý1 [:Iº^IÑ~ ï}ÿ¹áô`ò>„Ë+î6蓎®õ–=vèRBpÅÛlv.r9TBЭJÏ£ú,ãÞ}z,ÛYf<ÏÛg$r Í2’¡V]؆“)~mÖm‚àçî%³ð¢PøÍÏGôfËËrÖ½Ù ¶-Q­b*+Käž8 |ÛJü€éS¥ó»’‘éº)¥}ìîó¨!öÙikCHN$›F^bnÇu+‚ͱ8»i$ä€Þ…êfnNzÈ!`D®YIv†9ÆÅ…<¤þ›Þ{²Ï6 ®AâÉâbN&IâNÔ3eÖoºä ¢Lp)›mׯÎée¢Æ%‡‰) I4CI!`޲2 <ìœg1 ’G]TùwÚ…gÄ^²xϼ»å:k­ƒqÕ#®b ÷nM02^ ‚~ ,h=¼¤=8adCÀ0ðB6ÌÐçî³'Éï\ɾùdMs­&Re3®åþ6­$¢dkH6Ê`wàñ½Š„$0>ë*xž&ú (äLýINý?JÇ­ÑYAÑç~k¾t@„mAA¥¬ÃY²±Q^¥Ѩ°’J !ÊŠgét¯·”A="Ct¡T¡Hb ©Idp¦ReØõ Ç{»xÌ6í$êÍéu;sõ¬úâcH%e|z…) Œ!¦ÜN’£EP©š·cYŒY…’x†'õsvã‹©XC$TYâm±í$„%®ð’©Ü.Ƽ9GßAÿé B)¡hA   @ª¦” (GÁ>Ï™ý¿AE>ß´?4%%?l}Žò¼­;Š8EµºI<ÞcUyh˜->GHvÀR¦Ø hßn@Ñ¢ÓÐУ¶"IebH$'ùÓaU«DÉ ÖÂ%nV#2‹e$$hXX ¥BÂÖ&VØÕÖÿ[Jâ96ãa®R›Û,Ñâë40*ǬÖÛätE ;¥òѶ8±+/½¹¼ŸoŸK‹¾|­EFîéL@y=HRuæÄ«Ê¾w^qwÌ凜\~9©¬™e¶€’0ádD¸Ø òÝ]ܧm tµ§¡ïÒµ-'›ÎMtFÁ±± Œ¯í¦R*Û¶Í1’²oìì!“Lx¿³›ç‰Bp€O) «Cð)Nd¥!ÌŒømpN±¤I·1 Ÿ›ø_»BSúÞö޳¬O—|¼ É.>IºÍ\Ñ­)öÿ;Œ ‘‘3‰,!,mg(]Bd¶ù—_¼t´e#Ù¶Ø„ü.˜†×5ša $YÖgMÙ:NŸ`Ò´¡ä† êÖÀ{ó²'É47̳¦³î8œHŸéõ¤æZ¶°awmZ¹¦U†@)·6nÕtÐ4!l·DÈüzä4y·°iZ(ò¸×m|ƒîÛ3„H,„ÑÉýÑ¢4¥¬·¬ ‘Õ Š Gd ”*)ò98½J0„”#žë]@›‰µŽÙR·![®Ï\iÕºmýª4vÎ…Ô ºÚ_ÜojDœGvícA”û±¦|8™Hs¤÷<¨™"q(žˆÌúHó“Òã]ËK¦Ÿ’k¾`úl>÷œü“L“×nr—XÂnÛ žûi;ë–m–ÙWá¤ïž—m.rÖ}1(èõ¼»õžžÚa™À$åœ@ )H(’i?f$)&¥nJ&™³ë“IÛ¯m¸ ÔK<æZ†óù¼\ñ¹P÷do®=~_¥•ž$¾{b¡&cN¶KµÂ`¬#0»®1x«8“­êÑXÝâ³#ÁòÅ« 6²ŠÈ ~ËHªX0ÃÄ£ÃLŽ€î ²IÝÉ©uI'H½x;ʈK #R%wäùF‰<å·òîí‘,eѺ8ål“&LÉŸë„(¡¤¤D)hZ(€¦¨Rd*Šhªb$ª¦dPS!÷åýiMþá?Û÷c}»45BRSHPÒPŸfv´VÁöFª:]öä4… Ð{Ö: t€q 4£M tÒÒ)¤h4 M :(GHPŽì.ªF‘кéZ|…ÄPtš/s¥«°hw¹=óRUUKAy8ò Ãuaα˜ª‚¦HªY°U-ë+¡tc Bé­±N4š­!Hš£(ê‡m¤4$Nvtj£F‚˜ƒÉúvJèw{Éíä4SEPù>ÞvzÇ!ÖkËUT‰ÐvÁЭyyPyy:ÓNØ\G˜‡ÈNº*Œh©¯;Jh™”ÊÆW$ö nÚd›iÄdÓ~¤µŠBmU¶ÜI-@E"AëXj•¶Ík(1™ ë)4´l)+„DÂŒbÄZJÆi@· –…Z@ ÏnÜÑ…üäš@ÉÄϧÍB,I̼Òf…Y4”›CÕ>’omÉm¹Õ\ê„ôLÀŸÄɰøI¤Ïô7w`LJLbü)«¦QP¤¦[aë³ðÒx|à?Ži&ücÌ@Ê@‘ªÿ[ú÷çúS¿«ü 8ag18ØxÌòŽ¡ U5q³ Ú(ìAŸw¼,™©– PneR_T5 €¸ññe‰†,âbé$1¶×#O ‡˜;ýwÚ3¿ù‰Ú†—ïZçݱ'LPôÙ¥<¸÷T5­Sš¹Ïc™pÛ]æ1Æ£·Õs]æ÷ù€¨6P»Š"*ˆª’¸'BŽA ¤‡4”Õâ†ÿbŠ*?‹òÙ+Ù ¥ šªÖ¨ ê‡íê…è¡:¡zSòÊHŽ€^ºA¤] JR û!¥ê“BÒSä@ë£KA è^£Ð뤥ª‰¨ˆÝͺç%Š»WFI†Ž´ÒÐL A;m“JèÖ’šD¦„ÄRiÙhm)3‰,. éÑäé××6ŽŸ{Þµ­m«ÈÜ+"Ñ£ät‡È÷°iO{-£@h ¼î‰즔 £¢’†´æN4Ž’¢üÃHtP¤ùØã8ÓMw̵yƒÉ/ Ç@|§h)¼Ëñ›c¢HF/òXügY1%4:­]­ŽÚ!íž59ÝŠ\µ„c5Ç,–ÉDšmwlíœL C¡°…bjÊe¾a "{]6Ã4Ç-V¸[°Ÿàg ;™¦`M\k·qFØ"0ÈÄdqXF=e$ÓŒèi&ÖY\ÉL¤ÓHâ"#¯*÷­Ñrþ&:üµ¯™m¤¿{?ß‹ò'~*B­úÛÙòŠ"Z™«²š¥»îp|óxŒ%#òÙ ÒÃI)gÇáaJüÚ"¾_“=mÚO·g/?$‰ø›?ó×ð}ß·¬s¿ZÑ_ÅöNwÚ0¬íí‘ß1ÜÌçÈì—éé_}Ž/ßíùúo×M_íŒ+­(#%¥¿nØuéoñðý€„# ‰ðõÉäJD~æ¶`Íþ{dÓ5öì~î®ÀÀÇ` >¸^»ÌÊ÷Ï<}Ð>ϤIÄÌã)Œ0$Òd®[¶þ›»1Ñe¶\&•µ;¯Šam ÄzïJ%á…™ !r>¬Jà¢ÒRc69l6ÎçVóã/ZžkÓl¦$îšó—¿=|¯–Ú+ÃË;¾|«ñ˸ÏÉöSäÁÒЛoe-“áti:íÀÎñg·ÃÐßl´”Agìc¶ËXRËžÝÔsÇ@êÀó.³ag¬µŠ>ëvœË;›ÖYeg©CÃÛ3¢€DË0Ãì‡(Ø$bŒÉfiˆ$<טÁ¢À@‘d<®L¡‘D@ A#“ ¤0@’Ѓl@“„)-°ÍúéÆÃ)>kï‘ït¸ÀpÓm,'«ÝhDéåÕr’RC XeU‰²Û‰Œ%’,B”ÊMeÑ34Í4$›,5³B010(-¸Ù[m”– ~º`þZõþçëýÔÑÄ.Ë 9㻥m¸þ¥6á¡«L¿Ga¨Œl6l–dxÕú¬Ã„¤«Q°3RÇJh¯ŠìŠì¶te8ºÄ©w¹ÚIùk´ ÚØƒ>M"}ŒÈ`e ‹i4ó*ÂO1y #áIð¼«ýÛ>Öè|¤?–dÌÉ™?Ø€E’¤¤Z(B‘)‚•ªD ‰h"*"’åD"œ”§8'HPTú‡õb©õ€€ ý¿É²ûkb1nÝ t¦¨ý?³)Õl„T’ Ç#:¤œ¡ Š˜İ‘>öêšXƒšJØtSGMŒºWA£l:1‚‡I/(´ëù_bóÚÝ æé3Vz]‘xOë8²´ÊËÎÅVÆÉzË,vÊU`V5”–©®•R‘ã*"X„ XÍ,×JÅ04ƒeÜË ø›u—œJ6 ²¤QbH$]O9NY4ív€ö:"/58—l¾FªŒÅŸ{Nf#FÞs»v™jy¤«1$G›ca€ 2ͦªŠ;9:-ˆƒ¶ûÓ¦#Í‚“EôÃò>BzT½—u›ôðt='I-k¿¬ëïo¾Ëï¼ùc¦ºcs“IÅ“†Xó‰'£Œ?¾ÕÒù¾Øûhç>Ö_Å÷´š@%Œ¡Pµ”ÀG#ûÖ²Z‰ æP¬IöÓFTd¦™fq6$bÌÏl¶xà$ØLü3)’tÔ!~XÂ…#›[I)>],Ú"§ŸŒfÂ@g2q)13Om’ÎU­¿è™‰™'èj¦É+ý.Žùº_ªŸ/%M!¥(ÛbN@Ûl†-ôrÃLM*?v•"¢;bb¾sr²0+»ëÝ©Ëa"sÛ¶YÆæiÔg,†®³H5|là Ðíì>J7ïÁïy‡¥}-I¿’Ã4ˆ4X-#, @Ikˆñ-›»w >l»¡’‘ln²Ò‘„Þ×·ä²÷»ÎÑM{E^gS&ûTìÙ»r%NoLêÆ4”}%Åò¿ ÑIì%|—äÖóæcÀ!éEÀL ¨œ<©É †{]&Z§ÅöçÊÌšyZÙ\Û)sá½Ä7D«¡øTµ›^v |GLÛ–æ”&“áCY$ã1¿*dØ&˜…]M`@É6¸‰>šLœ!zå))(ÀZRJbŠI!PJ*|ý}û£ÏÓÒÓll)aHÂ^6Üž®@ŒMâ%4qÙ_ÞÖ¨w* ,aXpã¦CÝ˦-؉HˆujŒ‡^7]ÓnæÒ1a€¿\´éyÅ©Wª>®H•ͧ2WšED’]bAÅÓÖ1ž¦=µÜY¾#ÄF|ú¾žú}ô?†i‘hD"šj¢€¤Q_@?Ú §ûÿ“ìGì$˜*¢›í“k.„ªþTh(û!u¥¤5L_zÐP•ì'ã€N”è+ÙªX€h~ÈCC©T"P«ÒŽ’¨ «E.ÆZ¦ ’@#4Œ” e¢ÅV’ITˆ­ [g@nÁ¢©ëíºC¦ŠR±Rµ¶V“yƒ®ØÝ©  h‰"–ÚÎÛUª(nîKXˆ=ãÎ|©4'ZÝe­;cAC¤4‘:ZCᆒŒK¤ÑA™u@[BG˜Z7i$y‰)’,`œ˜éX»q€g17š¡vé»mÚ„´a n¿uy^aCóÙÝžY•¥˜•R8EC3Ä»¥+)ˆ‰#X“F¸Fƒ-¦s a²• cGö20;nBPH’8©* …íÝÙréuÚ8ŒÖ3f¡òø€_1|û݆ÚßÁ»ñÞ\§È èÓ»tEm3o8Üf´Ñæ6º½°ùy# ¡ªw`íb“ºÈü¼ŽŸ :j* iÛú»Øù“7³¦'®Šèi¶ ñÕÉælK-*ý݇T¦_³;»õ­!ôiôÌIûÍ„!“T'~ZmžIЦ Bš7wžikË  RˤR7DR:ÖË,¬´eÍváŠÎ5»¦;j5ƒ˜ùk6ÄÅZÉ l´–À¦EBgú„ý›Œ™ß–”bi&™~!˜s™˜®fiHšdÒf“ï[2u-á$¦3̱ÞÙ¡Üy݆g~¯ªmkX¬¤;mØ!eKÛq½¢î1Õ~¦Î©£ÄÕpÖë»)»Éa°ãží¸ 0Xs)Ó”%lë¦eÖ™¤¾dI'ºo]ÌÄ“lL’S'BT¶e}rIÂd¦XK´°/3IÐÉyºÀ†—}ÓI/u¿KC¨Ï Ü'ã(¡&šb(AQÒ3P'jÜscØW)°4µ•5”Ý›vç·wcøåªNPíik#òØkºÉ¼õ;ÌÀ›±Í2‘)MXݹša®“á’o3 &ª°# 9”ÄÅQ2¶PûöÞzâ0ñ‰â0îíÜ—s»ÄÞYß,·øÞÒ‡Û4wg×h‡çoº/ìØ`RÖ~4´¦ZdÈ?4“aÛü.'¡%¨dL¥3LÄ 4™¶´ÁR‘„¤2 d²™óȆW¦Õ>1û}ŽÛ…‰.ë í„»«ÊÛ´’#‘{}÷8ÊõJÍÍ©¬óÖúwÂŒw”ßuÛÜ©ña\9•#ˆ2ücfe¦Lsij'ŠÞÐ…]XÞ5¥Œ#°ÓqQ¨+¸Úq„ßÏ6e¢pýJ;ÅqöŒBD(é§éï}>z÷}¼}"õýA@†U¤Z@ (¡)B&’Š„hJ¦$)UTúÿ‰)~o÷ˆ©üŸÇùb?&ÖÛL@~YÒPSM PkÏB¯n@qò±Î/¶5Eæ1~]Š¥®5DCïqÂQKü‹CÄéðl¤@t4Ÿ–:^6Î.ˆ{·vª˜Åü²ýMZå32&Pc‘\¡ øØ@%f™Ä0[c0О»9ÞH¦rÒ!$ŒEP6ÎÛO…æûí|³ìØüoÍ`ÎÉÓ"-©2ÓòÄ›ª•Å2!•µ @"HŒmJJÛG •dT…™mZH^kÓÍìiaó»ÃϽ½¼ì‰ÎÅö´Vó&´›`ÄQvÑ])£¢Ž“T½«NäJßÅ«{ç·½>‰ðÍ2’®Y?ú)¤„­­!"}öÙ+{¬›Ia@…©BB@ƧݛÆôþg¬ûÌ›„H›VZGuÐYj8Ä€[BYmoê²à¥$@È<¹C¡/7³ ˆê+d) VN’í$Éó” >#ÄÑS ãŠîPÄŒó–6‡ÝÒR+äc B ¬aÏYûìÓ9ua Aå×—±²Îü^ûqŸ+öÌ•s0I˜h„†öæ^ÌÒo™aâ‰4:1›n²«|i§¥ÄΆ;mþ›hÂ09¹c9@ͯϽžûѸœÉ3~94¤ˆîÛº\—­™Üäc]iÒP#ç™hò/q¼ÞH )ì¾ùƒÐâ>JwͧäûØto2jB‰–XÉë¡qŒüí—`óušÖÅse2ÊÕ°Os,çB´7{yíeºWL´e²ßyÝŒ¾Ë7d¤.i^NÛkú ã[k ¤”á3@d5’l\JJ1e)ˆ”Ë |ï:S1®qL5+4ŽºR`@É'F[µøø”™§ZöÊn¸|Å÷+D=Ç¡ ÍABà@ê‡;“Œå›±‰#*þê˜Îج–XV‰)ši%)$ e[ +zºtwe­4éÑKHq³¤)j%´˜X2$ «?Tw߯ñ7õtþ}ûöÏ»·ú{Œý´„ӫ˺˧µ?MÍÞÌ:Eµ¨xª@×2Ñ1••e`£óÚX ”p…—ªÊ~§ÃIäLƒÎ“ Çp¡§&Ñu]ƒuF­Ò¡ È{‡Ï.â:¡lã+d´&YØ:C"½ï{çñ~ú€?Ã*ÐÐÒ”…"”T-5HÒ4ƒBw'ÇRERW@Š'à>¡9ú¿Á¿ÿrE8PXo?Uggplot2/data/luv_colours.rda0000644000175100001440000003535312555445402015642 0ustar hornikusersBZh91AY&SYÂT¢7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà-Gß>ˆÜ‡ ,­>‚æÓíò¾í¶û>ž³‘ÂÌǦívÅÛ|R‡ $*¥DJ {°(ë' ]zo>ˇ»Ü–aï³½{Žl¯_]:I$"IUsßÇÝóÏ®ÒÖ­kf4¶7cNÙª¦‰‚c@M0ƒCAObhÙLÈÄ MÄ혽j:÷˜áÈ<Ü\œ±ÕÎl¾ߊ|‡Ä¶©I˜Âq¦4Å vD,Ïͳ(‰Ì´6è¡8Ë÷³x áfj îáo¬óox’å¾å•Ç^i$=[š×â@C5iWA/ê ‰boI¤ÚÍß®±›pœ·ŸWJhÞTÿhùÍÞóÈÊ.tܾXÛÃåŠÒ"%ª,YÆx?‡m3­Ž»+³òÿuê~ÒÕØ%µ3|‘x.­éŽBôfÖAÎcéu>ž“0AØ›7;·Û}¬™¨É¸»ëÚYu¸´’ðî¹â*Ãj¡%È8î–¤Ú’ƒ¸éèà…¼:£šsWÓû½>²ÛËǸ¢U¤yóO¿ÐÍóìñŽKÌpr+ÆÓ×x¾¢ÎH¶Î b}Xe ‘!‰J±:qÓ{Ï[:ý¢àq8l4([×ëÁƒØÿ,Q²¸Ôë„æñaù†ž $йQµ+ðŠ¤œÜšé÷&)VïH¦Ý¿¥Éxe5ã»ç$_?>˜ÈIoÞ÷ÔV”£QQ„Zù±Ð×ÙC³_H£wb°}ÊTbc¥Òa:Ô6ÅâAˆŽÝîå¯ ‘ÿÿ!«C tÈ¢qËŒAjj¦Ä]g­X‹_»’ÂÀ&¹Ê¿ù‘DIus¿NÕÛºÙSÆÛ›#þ[™Â¢×`ZÖ~µÕ`ñ÷ã ÅÙrQÔf²];†b3ÊNí p•gË‹þ ËÛÕ’±€I)«E0GëN9áäøÏŒíu4if|¯ƒäaŠTHõÂ7Á¼/áý^z=tΚûÝÒÉÙyƒÎ"˜ö+/‰â?G¿¯þU0ÄÅ÷Õë^Ùoýv4÷~¯yŸ\Dœí)†O¥ì˜l∨_/{*®ÒŠ3¼+ÆU¹•hÖC¾ra3TDcÚ"~XŒmqöòÍËÙ®Œ¢¤nö»2cº¥åòK!»ÕåžïÏ%Èìáo uþ·¥…!‹7éÊßÉWëI-Ù„óÄ9 óê£#UgKóÁ`¶XªtÀ’Ôn tYþÓxw3┥(;+3#„|¤ mh,qWÍw®Ä/j®î]nxL™¶2îEŠ0ýýzáÔhó.ÿsïOïÚúÙ’øÙùn4B -‰‰Íé:(ÜÏü•¡7i8³x¾Âou[‹¦ãÒWìGÿªf좉dÔP„æ_ ‘rûÉ-0Äãʘaçù‡Í¾Žò°s-Ö†&ö:4FŒ½@Óîq^ʰ™3O‰²´Ý;M>%nlVåʦµËÞE˶|úßi²¢¬¸’:Öï)¸Âe(…môDþÿ»5Á²ÔÇ’‡É ‹7/Ô‘þLÁûÔcDW*ú¬¨Î”×› eÿÏ ×þ6*ÖõL#(2\£Î;_ãßæç²þ³Å†¢c¦ƒCáÝÂxˆÙƃÂiü¥§Ffub+¹ú~Këu‘ìØ¸¹dÿŸ™Eqí=Ný¾¢c³[ѰÛÖWT!S;Cϱú‘ÓÙÈ+¨«4"ô¸uä8ˆË3ß3šç¥@*ÕQ_hÛkÎo ÎÒ\*§1:õ÷ÊÒÄbí)xt©à†tÌEØähqöÃíp­’cˆéåqAtªˆâÝ9Ãí1®5Uˆ–Ãûp¡êà½~HM½T*ð!ÿ„܈ýVÍø#µe3\¨oh ÛS»\®ˆ³u;=ù‹´À—žÿGæç:NJH÷]ˆ§h#F›?ƒ=ž Žu ‡ÛŸÛ0½7·Ø[þV…dóÈé¡÷tûO3ü,_àw(È«UAá0ù›Æ(>èŧâ4Ô¶|.—›ÕV½¹vç»Áöy¿;VÌÌÌÌÐ×a> 4êGöuâvòÛòäv'>Ö¡Öޤÿô})ˆÈ?éXAG‘q*T¯+fxñãÇri$’I$’I½‰ ßááÀ+ÏEQTÑELÌÌÌÍYw ¬¡½YÜ.Md˜6Š–Ö³V4r¡”ÒN’ñ¥Å”¹Ã¥øË0î1‚à eôb®…4⢢Œ…k~ºèX3àá“ØpG*œXË¢ RÞ"Š(¢‰¢‰™™™™ºÉõBT‘±á\7Í{{I'¦›‡Ð`v¶Ší¸K‡Ä·Œ`Õ •êïg€Îyøq6lÙ³mófÍffffoóG_¶¤¡Å€2È ÅäïQW†&ü.3Xãv+zyß»ë\«ßû6I8¶ý/ÞãçÞ¥h®b|ùóçÓO«žÌÌÌÌ×áÇÈN¼—„aý &Þõˆ¿ÿÜ ßø¼ŽãC´îo½Ö#'Þë´BL™2dÉ“&Lffffm°ªíòbH¾P ”%~'㦎ìO›‚˜)Ω‚'ŠîKÞVyÚ%Œ Ån¾ywü SuTc}:téÕ§33334áŽT‘¨×‡Åï™|bž£[C©ÏW€á# BI(t>ƒ‹æ×Ƕ…Ϭñ<Å•ýì{|õÏYLJ þöE`?Fõ{gLÙÕ=[Muå"„Ý¢O‘äü)ÄíF#À|ÌlR¦ÔŽ4Ws,më“yÝ-E¬×*½K1oª7Uˆ5¯JûSi–J*tÞøà±H8ÃÚïr'þW9­Ëµ+¨ïjë£à,$“Þr©Åè×Uéë™×±¾t8,GØu¸*@°Ð3KòíÒ¤oõcŒwJs¢XSfÌSb±õwF~û©Ÿ´>"´%íLJŽ4”™»ÊUñ3e¾Fñòåú—œóvo‡ë‰}Ž”J=È”WGâ­‡P{üã 6Ø2™ìîœÖä»ÑéÞ*ªÊn.÷äÃA5ßòÿ&]•c\¥e´´ï<Þ^¡»ó¨ç [Ëp¤½˜1ƒ†žÉïCM¸ñ .^÷¾¸îÅ%öF²-¢\¹²™î5áÃç~“[:„f,ö¶w)Jp›išÞ?¼5'¿;7­ÁkúžñäKQôÇž)á_‚ŸIê]6 ä1„§­e;ŨÙ¶%ûY]t¤4|L6rÒî….')"îƒñЇøjÓË$î_Ÿàì5j¡‘÷<å%Ý·½¤SÓH{òT&ËñVç­ñ6£÷8²®ãÏ×ð±û¤1ÍÃbvyç4ÜŠY¾LÅaâ4iQ)ÆUÖʲûë]-â8"5²/ èiO xÕ†S1‡ûïÌzmJLÃám5 ’„½Èå¹]ž¡øíx²âЛ›áãÅ“,¬o-;~UDûG5}…ÎWN0C)öïI°1  R¾ ‰x7¼¤!9ŠAöÅ“<®G‘;2$*PÚÿZ›>„a¤Ê@«…3ê¥S6†Ù”‹ƒHµa[¼j…áUÿG9í«æüøGÖ³ÿÆÎi®~îê~‘e®Rƒè…Ñé“&üÝKBP'šþu²q6Ïì£vÓ’ùbÒtÄ4·/ç‰;Ií!¬¹«Ûþ|u/gFÌô;X_ÚO|f%d‹t°ÄG¡,¦)jý Θ¢éÈ|M—9çÔuÆNåg›áOŸ¯4(Q^ü¹Éräèvߪþ~ ïñû+U[ ÿ¼FÊÆ:Ò‹‘Ò»ev¯[èÛë["mÜ‘©£8MImi?†µ¦gËIÙ… ‹hc<Û>ò™÷Þ¸«Àûs?¼Ó¤Rr<ôp}tÎëŽÓ‚ã4ç[ÿòÅæ°à^3¯¸hyvŠø¬°“—³¿èþ}Ò)^Û[ŸÍ¶îë‚nRCî+LªÙõÑßJTŠª u}ÃCkî¬æDÎ{®¸20†CðÑšò> J~Ǻµ²c¸(ìaZ¥9½éºëò;ÔyÜÝõóð9 [km&}ôÍÍßœ|¹ n­vúW¥¼ûÄ.a“Må÷šÁk{•¾¼™ó1Jñ¦A(­çúۈ쓘 MŽ":;£”†™ök’¦3ëô_m£fØü¦áUðueœÿeo0p~€Æ{5RßÁE¸­ú^nya³²és' z…«•ŒÏg *æà–óEUü}»öõõ¬>YEGùŽDœêý‚à0¬šO*ïX{QVäYR qÅ]ßk¯qïD.ó»û›n1¡é(nŸ¹üÃta©cŸ¥ ×êœ'øl­q[ÞUË>¼\ìRóÓŸÜ-¾…¬êÊvBoŒ¢8]ž/?ÐÜ»[¯WáÅÎÒRü€ÍªÔ ^Î{FÙ:ä6s'Z%=w#vûA”Ú@¿YyÄ<{?1ÞO{ù74×w+ky""B.Ë W5ýa”½™Š(N¬!‹¯e ¡‡&¨ÉûEŠù]›oËŵ̞C_pñ¯‹4+óÃîÑeÖ†ÝîÞO2iK4ª2ûâs_Œ—TŠ^é¡äޱ’éã1W ^~OÀ¹¦m^‡íîË3[Š&“ÇW|Mï)yÀ=nxÉjç…ÙÝPMƒJe™×}¹RU"Ž¿ÏÌmÜ¥z,W‡äÝÈþÚXS¡¼]¶1$…ùÈz^à­ æš‹UûàMM+Jq‹ÆÅ]ÅïGò¥›ÁÉ ®©Ë×ä5˜‰7Dyφ#º<Ë£O{‰‘°XQÊ 3‡\q[-.Y?k{¸aÁ Z$;x†I9£†EÅò¶åDo6c~U 6ìJ´Öknž J•bP ›šêMw†S¸‰$ó Êûáá´ÇLÀGPÞ=Ƕb—¯ËØÃÌ74û»z´LÉ¢ô ü‰E¦ øu]êEj4kZ¶ñ"sµØ&îƒqà,©Ò­—'Ý,,ïezD/'âÿÔ2Bx·4ÓWC»2GHy ­Zã3Ë„u €´BŽ~µÉ<¾"Òáq6ÓAäó?äGXƒvFÐàê[†ÍŽXå÷ø]&æ´>ÆE€Õè-GNá¥DxeÿCõJ¾x7þ­ß'Ãæ7¿zRê>ûF•mMµ±Äªoø uÁ–Dþ4–•¶Ý£ò99@+‰ eˆ:Ö¦LpÚ3oÔŒ; F܈D$“j§…±Ö}Ñ5“ýD‹²;)d Ñö2z£">˜uk0qô<ÕçKh“¼mó=¡˜À…j†XèùM2¾ÇÖÍܱ˜K¡ûË "2¹›4¥Áô?%k¡âÛ#cMkãâáê¡F>Ö,/­ˆfó~ª.1ÅØ ©‘`ç…ëuÂyë$À¿fçñÕQ6“ýEF(*¤rþK§C”OFvû½È¦\6G]‘›Î4$¢ s9ŸÃ`_¼2¢© §"Òj8…g©È1|>ñ Câ;¸8ÿ‰ ûp´ô¯Á4ˆó˜¯5i\.¨&tP#kû|R\€¶û¤3ùG7ÒŃÿcËl£âøõ“ ÆKàûÐ"·ûÛ¦6¿zf ÓlËîímîA^(gáÚx`uI¿îÎTC´¾Fèþ¢á(aTðöî.Ñ«¤å‰Þ™û»¼nž„ûQe_¤ÜP«ÊSúñ³_狳ÂëîsÖ[}¯¼¨Ü¼â«ûŸXö ýÓ©š2·ºÔ¢=XvZ|'÷²ËÛh.Þÿœ´ËòQ:Åæ(wÊ‘ñÊû™/¨§z4âú)0iïµ^bG6ìÓÒ’Õ ·éEq‰Ç)X 0JQf•ngÕ¦ZƒJ3÷Áýô§|]¦³Êjà¦u|º›»=G†\½ªsòY‰O3×äÏÚ-ÀóE}©ªQ•Ò®+>Çœã5Ü0´ âÚ²äÈ ‚—0×¾œ­ßQ*B y½o `àÙ#?§CÕrhÞ €¸ÜÖ¡„W…Þ£B¿ÁHô«Ñ 8C7y6666e.ªK~Ÿòƒ gõŒ‘eÑŒŒTppŠÂBª1QfR1 _â釷è“êf†±N~œÙ{|¶–ÈÑmíõ0qÖ¢·CA€¶¾²ca¤[ü <á}i¡‚)¼½Åh_ âôޱL˜‡Gzl)Ge¬TšºÐŠÅI«­9­J”ãlGëZ‹]L&Ûmöœ…ÁÝ{§‡»æ?Í)E âiÜ*a°ö"œAž[–Hy ŒŸ+VÛScÙí¶{½©ýØšÏÍëM&:8#ÛüŒÌ}ØØØ=]É#“ر±±±¼*‹e€ JEí’ méF0ë/æÂд)@³ÀÌ#…1D®$«8E”ö Q ßøi„¤îhmv1l·—J÷hÐEê]+»º‚Œ‡Ñ{Ú‡o —àsûR°Gן‘³“À’,‚2ØDX¢Jˆ ‹#QEÒÌ6[My² §Q ؤ?×Ãyªõ¯¦¦÷;lÅô¹¯ºcfko„5.8*Ke5Èü3a¸èù›Œ ¯\Ì É1#—3rLHåÌÀÜŽeÁ ncMïîo7«ü¨Œ”µ°œ¶âЖzù¬´¯¼<ò#ò ¨øŠA„/ ")_[‹Q¢G™b%ÖÖä}ₚ¢<½ÃÝ÷¯ï–˜\ÞàÐû,¦ÏºÕiìí4‡€^ûν¹Øö{bçm6›C|2* Ÿ,èÅ턎s:%Ìó!®Eœ0¯,ˆ‚"ˆ d1b#>ŒDoîís¸8¶ÛÃà N b"""Œ+…ívˆ¾Œ6†‹çÔÄ ¦ölÚ¢€½&…pO&YÛrÊ7­³àw ;ìØòü\)ž—°pÉó"ìC ¸â €_¢VCYÀ½õ®8páÇ®áÄV¡n©Á42oÏÄAD¾L_˜a]½º’ÂX3ñ”V3 0$ŸANXbª)1±]=Å«$ HVÁ×Û*Mò Ã7Æ„½Öäüã9å]ÿ „šKÚ¤¹¶’Æ%„ YŽuçô×cÝÈ/[3$ÌÉ32C‰Œƒ€HZä_œM!H±+È GhŽGNàNÔ‘ÿňÂù˜øÙ­ ½ávûœ±¼ÍŸhfïBô<9ùz_fkÏ/Ù×6mxM_ÀÎmõœN{XÛm¼‹8.ä28páÃ"#ø,»‘ÏCm·H Ä"ýðÁDÆ興ˆ‡uèÀ R“ ¶Ü¹àôÐÅ»n¨ÃÀ½‚ÛmJpdƒº†] )Fçöw g Æ®£›ï&óDyØÐ~OªÙL¶tÉ6¡iˆÍ§×14Ï}€ZÃSž ÎÛg•m¶Û}cµ£ ¼Ócci¶œCŽZ‰Qš&H\Š¢äijUͶÛwÒ8$BA¤ÑS'G ¶Þ ˆhüÞÃ'ÑÜ_Aô6v”c¹ƒÊIàöüu€¯“Ò´Z×ËAWe¹W¤³[w¢È/S\€C6ÚCi ¤4kQÓ $âFÁ’²Xj$6ž7xPƒ@iú~ÃRÚÿäô•ÆÛ,bâ êáq¸±qR”¥)RUlƒbèHx?¡ðämÈl§£“ãipm?Fzùêõš–e˜F³¦Ó{OÆn;Æ¿¯¾°ŸTÈi¶×“¶Çüå}“…÷§1Üà.·Ýñažä§"ÌVÛm½ ­ë‘î~Y¸>¦t:‡Ïôw#Ißœ<ÄdÏëðµ×†)ë´#­Ë›VY Ò–ÓƒŠÊ€c%>Ì hšIëúþOÍ:£}‘ÂdèžÒ>£”ÆÇ¤ùæ×éjK,nèPÛm¶Ûm¶ÛmÄ(m¶Ûm¶Ûm¸… ¶Ûm¶Ûm·¡¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶Ûm¶ÛoÈ?ÃÁèÏ¡øO£àâ#½HÁÅè’_\Œ®Qÿ®§ß¶ÛgA(Ô£Šû¿×ÅöŽXÏÁOˆ6QÇ0ÁAì[5¼Ä1ä:Å÷j2†¢·À{P¢ Óå¦jtéšÅnÏ~c6ÑÁÌÛø}wÁ4nƒ Ènæ©ã™!ÊÀ™vÕ0%:ØaT9ǸÆQ‹ë&Ò›x2 çñNÔ§dçƒKOSšAzcY JM Ü'5ÞÞ[=ñdcõÇ·Mç®ÖMF‚ò`˜»RzDþíˆrGÚ4°Ï‘ p+Ôƒ‹‡üàØùSäÉ–5$më¥BÃDPàS1ñú½%òÏÇ.˨EFMÖwÍýMÞ³LR˜×„küU„§ållÆï\•4vå†CŽpJ±W›uݸYGѨ.`SöaÏé^ ¶Ø"áŶ tÍØ¢j±?5ul0hóðÁ71ƒ×dÑÆßwjô¢,ðS!YeÝu}òSìgC&@µtoú^Ÿ¤åænƒÖÙñÕ0$íÛ‘K}š2Á™¼Y% y½×DZÞÄL ôÛ]«»_ þtúd”ìêGø›¬›Uplöãén“uñl³:ÛÌŒ5 ägh¬]ÃuuØP_nPýX´,AnT ERä³%„Ÿ_½§œëä3+ÐÎB}žÁ¯ p>¥ž éÁhŽ˜a¡Ñ¸¤cØås†\Ò``9ãÒ ú­ÅbâÙí›U Ë4ÏgC80hŽ~<"Än_o|IÂìâ¼=L>ü"r5ñ ÔHÌ ¢ymíþŒHt›@|Ä£[ì[†¶ìH<¡u\`·saùÿˆm_Öx…Ýžž¦: 0ÛKÚ"U+ HkAÿNŽOlzq1Þ›„å'ìQýŽŒµžÃ”*;¶ß/½p†Ñ1Üû"².*[“tæ“b@ fôô//q"¥äO2jùâEDª2<3¥Îøžr`Kà‘úó ”æb A'^¹~©}‘=´kå• ›E‚Ò]j3ÛGY¿›Šœk‡]2í­®ƒ 肜xèø~²^;|Ââ6x«íZö#ÒπȠ‹U:6A"§jž`B¹Vh ‘6§\\eíB©îé“nYãÿˆ*¶˜[–{véXtë‹„©¢(Ùk2ÿF¦†Owè‚Êÿä7RH‚öüì&o‰sð½\çðÑ€v‰Ržö9qP—ýæ 4z‰õÝ+ry¬TŠ4šóV¬”p}†ç ^fY:ùö-`md/›¢o¾tœ®mL¸š"¦nmNyœUÑ¡ã)m« Y´ÜçkœÝû^«ÿBŠ!ÉšpÍ2ìHz9„Ù®ëÇê¶ yÏL1HoHáÝîzL…É“ä…sûÜ”.ܡؖ"ö& !œ.ÖX§Aæö®ÖÊËsnê[Ü%V’ë—T­ÊÜ ÖÔØÕ A}v.bìu |zìÔÝ|kç4v¨NHº±¶·KícgÅ‘™ÈL… Ô¸n4æà~ÁQXèôÿ¨ïz°Ø“<ÅhÂsðˆŒ³÷sõ%ó`` äÂEHu9Pº¸'§G¬$,’@£*Þ+b¨fw N+Ž=ÏêÆ4.2—CfÀÑèà\F<Ž~¬òªp#æ‘þLÈö}¥‰çfNClÝžÒ3ãïsœFìŽS5°y4î<žìfÜÄùÈ웤²O¬´é·ÁÀkèüWÄÅY{ÇíU)*!gÜ©Ï{wKØó¤¬NÌ{ØdGÃ64ƒú×b(|ñþ‚}ÆâóU_â+ç’¦ÆцÙàìà¯ÿ·k\ÞXÙ £ßË;3ûåPhÞ#¿l/fmˆÉØÂ7·Ax“~ðþÛM¿A@ü Ùå¼ßmiP±üB>WÛïÉ÷úV™Þ+Ÿ˜“öþgo?‹|[å;½Ž‚ÓA'AUYº¦Å²oìZ?Ü™gS”¾1µB·õÿ­ÆŸ>,ÜS „ÃÛ‡šk[PhaÍ¥ÏVý’j;ƒW½r4gѺ:dµsMñYêuÙ†,ÑYºVµ"u²/¸šc ih`PV´ùh›ÅZrqÔ_ÕÓDÇ_ðžŸû%” ný«õGÚ¾¥euÕ ¶Ä&vª$©>ö&÷ø‰¼<†â24BªëÊTµëAÀè©…’‡©6¢­e>¥w„tT³ÛKÖ;{­ËœÉ}‘_È(.‘—ûÁ²Ë`³š¹¶³b$]]vç.z•¯ÁÓåØÁ±o .+ócO¿]š+Þ¶<ß8f 5÷‰ÖÛŽ=çê9ÞOœ¿QU\µ•^ƒ˜ÀË–²+ Ë_ÅÀ×ð¬ºWç.{d[<°ü£ØN­ª(¼ßóÂÈÄ ¹EEù:ßÈÂ5-Åï"dàS‹ä"Ÿ5DesE÷ŠéJã´/§Vk ¾`üæ„Ëg9HÆ&p¨E:ÜÂÏdÝ*®úYDÊÔû±Mòl”H÷Ä"¢$“’²w†ð3¼Úb9/ 4O ÆbBd1›l*/ñÕç†î¸a«ºèòᦫ‡X@ÙˆåOÏÌtœíXTÊ5€¥f/é²Ö©Œ­-V‘¶ÛåˆÂL¨¹8¬l ºÍ'þEªÚ5¦W¤5æ”jÙV¤6iv~¨?i¯}¢q§p Ä­œ}«žÖ‚2’}¼P܆Ð8|¤?€Ê¿ lºh} *iuÃ{&é„aøý5FÀ­ÌF¶YD[Î þòÞBþø5ïìû„žP8§puÐ6çÕÉÓõ„’.vÞkÁç¢ysÄðéxbîYß³Jí8#o‡C;}GÃy_¸+í ×¥ÿ9ÖQ½k{‘Óž¨LYVò÷[4qç–b®=dFlé6¯l1a_W °›ÕiÅèÊLÑ ö }ÂÇ2Y;@†N{%׺'C2PÊ«î7·ÒÐ?ÐÅ,\ Ò‘úŽýË‘©£TOqdõå€îFÐ÷¨G…™ÐrV=£ã<Œ¸¶-©Ea¥„kCº‘¾p^Å…ºÎª¶c/ÒUõrº­‰>-1x h¼¦£;}{ÓªF’ÖÖvƒOƒ¢;Y‘Ä|×¶€>'Ez\[¤óàTÔY91dë'ó›œcùK>wΊðµE?GØxíîûéŽÕúæ›Ò•Eè=ŒIØùbñZ¨þ©>ÌÒQ£—{‡ñF¨sûÊ-íñ˜¹oU¥Oê5#5Ó[p6+§ŸcÿÛ–¨ãÚªÓòÌ€fÔXÚp»zšÞû§}0^G˜(sŠÆ/¤c¬l×Àj2‡¾øºdÅ\À®>M’xŒ÷ [N7¡•G&A.ÖŠÑØ³«È€ðxˆ^øy®°kNËûZI,¹® ü~«¾ç‰?Ç·-Zm\,îI—íˆK¼ò<;A¨²_¬bÑÎx¹hxÂÔ7>Ùf€Žõ‹CUã™A )þ¨ÓUVÂ,´Ò¶?è·ˆRbÿÞsSúiZöz ´QŸS²(ñ ?SìæTŸx÷’ίW“–“ýŽuó#8çð ÍòÑæ4 Ÿ¤Ðk3_CS©á.3Y`å ‡Ú³äè ¢è`Ìž_]&qùLüïĽmãñ18Dæ>‹¤:ƒ¸'¬¾ö~i~œ£Ñ{Ï—#\Ö ,æú Ó§ûG•Ê禽_³•>GážÄkï~ížÔgp×Îþm¶×]È}‹÷“ì,±¿Þt}T§ XçR-²÷é ®Ã$3Ñœ¥“³|™õ©Øg/P±Up—6YÇ àü³û!c‹L8>)M b¬¢ÝNÃa-J“[UƒXùIàžbÖâ²6"vböq•…Ô›å'L’Z.î:²‹;ÂǬÙ2÷mt€Åõ³àÌŸ ÔÁø b åí(ú"â§µò°N¹”7B‹ë*ʱ ;¥8w‡¥‘{0þZ¶ÕS‰M³ØF°mÙ„3nç’Áù ÿ^J„}’›ô`å#»ÞStÏ´ñZ:—témÏõ6ÞKh›ƒ‚â9ëºxT …K™ÙŠa(Ô`o+U„Œæ5eCêòúÎÞ‹–€=W¼Ö¹Ñ‹è±y¬ášÌøf—SÓõ£4IÍL·uŠýÆmŸŠn3†<57î3+½©ñ\±8Ié8.]¾ÎÅC<9¹åwo*Ķ›ríÍ_UJ6º‰¿™¾õM˜¯)ÖüHípc"hx`Ø”1úí^„ǶªNvD¦¥û<…²{n-DìO¡Ó![–™j{GÓ5‚؈(‹Œ´~¯Ë÷%#ÄÎöÙÁ±‹ú%× ÞDx‰æY3ܲ…$ð|>¾f·Ä¾'5ÒÓ«µ‡L‚Û3ÕÈZÏÎs·R2½‘YCP¹Þ>¹É¢}Ëîz|½Ti>ÏŽ¾ƒaº˜ÄomÝØÑAá¤Hï*²&þªJUR³Ã¶db˜ò/ÃFÆ*vÂÖ_)aÁy]•KŽ˜Éþó¬«'õ àÁÃÆLSžj¶³Á´ïœÞ+a*jRë â8ß\™nÉ?B ¦ÞÔ)¨Ý"¶Zw^»¡¢Ú˯\˜î¹ÿ ‹¦…Î-n‡¹Úþ}B&7&>e§+yCûåÝ]Ð6ñŒ±f\ÏàŸû\?ß~î·ÏÎzÞÓuÌj·üÞûú<Sºø‡Åk>l‰o™gP@¡£vô樎¹‡Î¨öÉ;oïúSŒ=PÍ—ÿ&byÑ#[°AÀQ¶•ªio#‡ùÿˆøŒ®¾š©è÷¹ö¾W“°­µÆsY OûÁ×`ƒyŽ®ÏØA§°ÏTÜ©51ó_ßÃí(#Ö­¨ú|l|«ðnˆôÐùdå ŸJ1­»Ò‘†áÅ.¨ . ÛÖ%’ ü‰1ÑØ„­Ó¨eP ÏÐ,AÖIñSGŽÐ™¬k>Ž J¢¢õéqåéçN+ª<ÝEc¨VâBY(ÆÕÂc+\lÊÚ²Ùå¾ßÅj0˜‘ƒÅpF‘œÍ£†¬s"E_ÏÀV‡áÜOűuä¼i_«1¬Fˆ Иm’²¯.I° ˳§ïÖ¼Y?Ô…‚D+Ì^•©‡;±ÆÖÇ!ãû4ð꣜AÐIH­Ð:¬TpÿËCî%ò]¼––Î%-éG°¿d¹é—Š]JO¦Í‘) ÛÒM6\Y·áß…0hÁª\è¹hz`ß±ö" Ƥ±CfÙ4•ìCLÁã‹nƒö…^ ØaÝ.ò—I¾ù«ºŒª>l›PÚD™Ï‹\p†ÍøÆX6h‘Gd¾ûbÍ¢è Þ<É@UÝ3¼*àL­Î×Ö4Àtl™Q5k¬pPVöÝí$?ñ½žP!(Gli›1’·GW¶×Þ5™žÒi4ÐÖSì/.€îÞ+¼ž®Š°‘'WâEšcµhÃÃÌò»…ÝæfºÁ û»÷+f'Ÿéa3Ší3ª&—B+æ‰å_¿nªÒ¯[ó`9{B¼-âŸéÌ ºVê¦ïñßcHŸ àExiÑBþȱú˜i›²óø:pnk_>¥Å"K%Š9)Y›Š×âS¡yN²>–BO¦‰×é§¡`¾êDaÖ…^3Ù€5ò$½Ë~„Qû5ê§yöÚž…À•~þÀl˜æ6ÿ±t¨¬g¾æ†ÖnÜQè,ï>êH`ó+ Ü„5%‰òŠ7ʺ0kÌgY %ß”y·!M§»jáE27ú…<~¬ýøÉÁ¡.'>IWy¿>¬ú÷³9ÊÔö_lãr¡$F ””S´¨c ãk½Ãدÿœ’Àß EÇ/Ðû»F‰Á­1Ï8´/Äñ'¼FÚ4=áìS·=ö3ÿ÷ñŽêë}˜ÆÇ,@ˆ>ß½J ãØ!,Ë­“³X[İAâMœèÇ‚ó¦®ÁDÚG>HGTmž/”óTÇí  œ\%"s”™Œôo¬jÉfuÏ€tZKä~û…äÕùZj¸J5šý&[»tˆ¿:˜îØü{„¬¢ÍCÕw© ð̶ô8 aû}H°CÁÚ—ë85“cƒNuWCâô™É4‡ÈÉ©½”·¿˜l ‚œñùÛw‡£üD³ãå?¾ÑÛì·bQÔ¢¯Û±^¼ÂËÄí³Rz´~N5®Åƒ/2 ì-ɩ޼ÆÜW/AÀ*lˆ7¼û’t«ÙúÝ)øP YjXàÎÚ¤})F –Š*\ó™­¦æ²Û…sÙǕ׹ ±)dý9nOcå5ÃvL¡Fôž}€š6lŽÒØ>ѳ?Aß©oݨcŽb +x€g¹ãàQ*.y"â-DˆJ£8~çs…ìW☙P9’u̘ºŸw,È>ƒN#RÔ'Ÿ¯ø­TÎÅÖ‚f:€ÁœlÝ0×”V*ÀÎ<ø@à¨Ií5äÖE+¢ã0ü¨§E ¼\L0¶í¯¡» #f¨Þë8Z`ú7‹³¥“"\¦Ë€¨šäô—Í™m§oàQåw6‘¾BLñ¬‡îž~;<•Ý_8jºÁU¨¸>~èg GÉ]½ŒT$øÝý;•á)Ìç¹ô/_®áó,SÚ¬ë|õ§R£/F…*…ܰÃå–ti¢ß5ÇðŸ`Ðs(ï¥aôM;“вJÏçu¯+b<&=y‡,éækÊ^nŒÂ$5]¼&ŽAšýW½‡ƒƒtå)ÀOm½¾‰ª¬?Ö<ƒ¨ðd–,du6£ët§Q4Q7Ç~ñ:ÈqÆŸã<LOKÄ ·™ËvÇl«b£>‹ÿâ²ßÀæ k¥Ï>Úý'‡ø€ašžn©^6G¿Ñ4`mAï èAZá²è5\2ñ¯½¾ÒÏ(e!°ß¨Üa+&òŽxœV­L8ÑÈ@~Rå.‘ë2q¢’}Â/'¯UI«3§˜‰cÎÁó2f2ÐØ•8ZpŒ9ý €Ð~ŽÑOÂI~“ŠgbYb­8xí|ƼçhQß5ª‚ªFÞôÝ* fL‘'Ëc<ã­ê<+lÂê4Ëðú+ËÎÊBõD=Àfwù8ÑÉß·`ãÓXZ½pÆ’—wCAÓ`B·“*Ò?ÇÏ¢ö™ò—?¾cÀ:pëmoRç,Dã[Ñô•/*õæ’{〬œª9>r³¹“œé4kÃøTídž¬œûß©˜ñú*ZÊ¢¾*]¾êë!8n g.Y/Y³‡äN®ÖŒg€gq’=ýý³ƒ]y#¾as§%®¼±[#²5\ÉNË"›LMP{á¡#êÝUüÌ6È$‹†oÚKaîA‘ìãì…Æpö)ÐD}¼…ªW9ÍÝFCYÿžk` ËV·døÊ„w»k7}½ØÜöôö5ZÜžJDê×½b·P÷ŸikÜ ¿‰\|Þæs½P›—Æ›ëþÀ¬Šw_Èï"3ÛÂnAüÝà¬-AA!ñÃ^6–LÈ­úN@œz†>øu•GÒ>ï~ý“ê¢ÌÞ[u·Ž‘el«§YðŠPÛ6"]kŒ:Óar^ÖÓ=¨©`økÞ;sØZ:r¤À8¿¾Ðæx$I«Q=¥á>ÜÁ:Û²;Þwµ„á(àêwutxÖM$»'ê·3k(à=Ba ÿ±„[{%)<²ž(ùM ¿r$±iCh¶9g»áo9²K †HüšEn¬KÛ×Z™¨FZ(åýÕ4ÇÑÏñ˜Î1jC—êÕ‘I)ó‡Ñ6z¸lÙø»’)„†¥(ggplot2/R/0000755000175100001440000000000012634007745012057 5ustar hornikusersggplot2/R/geom-map.r0000644000175100001440000000742412607211066013744 0ustar hornikusers#' @include geom-polygon.r NULL #' Polygons from a reference map. #' #' Does not affect position scales. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "map")} #' #' @export #' @param map Data frame that contains the map coordinates. This will #' typically be created using \code{\link{fortify}} on a spatial object. #' It must contain columns \code{x} or \code{long}, \code{y} or #' \code{lat}, and \code{region} or \code{id}. #' @inheritParams geom_point #' @examples #' # When using geom_polygon, you will typically need two data frames: #' # one contains the coordinates of each polygon (positions), and the #' # other the values associated with each polygon (values). An id #' # variable links the two together #' #' ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) #' #' values <- data.frame( #' id = ids, #' value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) #' ) #' #' positions <- data.frame( #' id = rep(ids, each = 4), #' x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, #' 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), #' y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, #' 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) #' ) #' #' ggplot(values) + geom_map(aes(map_id = id), map = positions) + #' expand_limits(positions) #' ggplot(values, aes(fill = value)) + #' geom_map(aes(map_id = id), map = positions) + #' expand_limits(positions) #' ggplot(values, aes(fill = value)) + #' geom_map(aes(map_id = id), map = positions) + #' expand_limits(positions) + ylim(0, 3) #' #' # Better example #' crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests) #' crimesm <- reshape2::melt(crimes, id = 1) #' if (require(maps)) { #' states_map <- map_data("state") #' ggplot(crimes, aes(map_id = state)) + #' geom_map(aes(fill = Murder), map = states_map) + #' expand_limits(x = states_map$long, y = states_map$lat) #' #' last_plot() + coord_map() #' ggplot(crimesm, aes(map_id = state)) + #' geom_map(aes(fill = value), map = states_map) + #' expand_limits(x = states_map$long, y = states_map$lat) + #' facet_wrap( ~ variable) #' } geom_map <- function(mapping = NULL, data = NULL, map, stat = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { # Get map input into correct form stopifnot(is.data.frame(map)) if (!is.null(map$lat)) map$y <- map$lat if (!is.null(map$long)) map$x <- map$long if (!is.null(map$region)) map$id <- map$region stopifnot(all(c("x", "y", "id") %in% names(map))) layer( data = data, mapping = mapping, stat = stat, geom = GeomMap, position = PositionIdentity, show.legend = show.legend, inherit.aes = inherit.aes, params = list( map = map, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomMap <- ggproto("GeomMap", GeomPolygon, draw_panel = function(data, panel_scales, coord, map) { # Only use matching data and map ids common <- intersect(data$map_id, map$id) data <- data[data$map_id %in% common, , drop = FALSE] map <- map[map$id %in% common, , drop = FALSE] # Munch, then set up id variable for polygonGrob - # must be sequential integers coords <- coord_munch(coord, map, panel_scales) coords$group <- coords$group %||% coords$id grob_id <- match(coords$group, unique(coords$group)) # Align data with map data_rows <- match(coords$id[!duplicated(grob_id)], data$map_id) data <- data[data_rows, , drop = FALSE] polygonGrob(coords$x, coords$y, default.units = "native", id = grob_id, gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt ) ) }, required_aes = c("map_id") ) ggplot2/R/coord-cartesian-.r0000644000175100001440000000701412620205130015355 0ustar hornikusers#' Cartesian coordinates. #' #' The Cartesian coordinate system is the most familiar, and common, type of #' coordinate system. Setting limits on the coordinate system will zoom the #' plot (like you're looking at it with a magnifying glass), and will not #' change the underlying data like setting limits on a scale will. #' #' @param xlim,ylim Limits for the x and y axes. #' @param expand If \code{TRUE}, the default, adds a small expansion factor to #' the limits to ensure that data and axes don't overlap. If \code{FALSE}, #' limits are taken exactly from the data or \code{xlim}/\code{ylim}. #' @export #' @examples #' # There are two ways of zooming the plot display: with scales or #' # with coordinate systems. They work in two rather different ways. #' #' p <- ggplot(mtcars, aes(disp, wt)) + #' geom_point() + #' geom_smooth() #' p #' #' # Setting the limits on a scale converts all values outside the range to NA. #' p + scale_x_continuous(limits = c(325, 500)) #' #' # Setting the limits on the coordinate system performs a visual zoom. #' # The data is unchanged, and we just view a small portion of the original #' # plot. Note how smooth continues past the points visible on this plot. #' p + coord_cartesian(xlim = c(325, 500)) #' #' # By default, the same expansion factor is applied as when setting scale #' # limits. You can set the limits precisely by setting expand = FALSE #' p + coord_cartesian(xlim = c(325, 500), expand = FALSE) #' #' # Simiarly, we can use expand = FALSE to turn off expansion with the #' # default limits #' p + coord_cartesian(expand = FALSE) #' #' # You can see the same thing with this 2d histogram #' d <- ggplot(diamonds, aes(carat, price)) + #' stat_bin2d(bins = 25, colour = "white") #' d #' #' # When zooming the scale, the we get 25 new bins that are the same #' # size on the plot, but represent smaller regions of the data space #' d + scale_x_continuous(limits = c(0, 1)) #' #' # When zooming the coordinate system, we see a subset of original 50 bins, #' # displayed bigger #' d + coord_cartesian(xlim = c(0, 1)) coord_cartesian <- function(xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordCartesian, limits = list(x = xlim, y = ylim), expand = expand ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordCartesian <- ggproto("CoordCartesian", Coord, is_linear = function() TRUE, distance = function(x, y, scale_details) { max_dist <- dist_euclidean(scale_details$x.range, scale_details$y.range) dist_euclidean(x, y) / max_dist }, transform = function(data, scale_details) { rescale_x <- function(data) rescale(data, from = scale_details$x.range) rescale_y <- function(data) rescale(data, from = scale_details$y.range) data <- transform_position(data, rescale_x, rescale_y) transform_position(data, squish_infinite, squish_infinite) }, train = function(self, scale_details) { train_cartesian <- function(scale_details, limits, name) { if (self$expand) { expand <- expand_default(scale_details) } else { expand <- c(0, 0) } if (is.null(limits)) { range <- scale_details$dimension(expand) } else { range <- range(scale_details$transform(limits)) range <- expand_range(range, expand[1], expand[2]) } out <- scale_details$break_info(range) names(out) <- paste(name, names(out), sep = ".") out } c( train_cartesian(scale_details$x, self$limits$x, "x"), train_cartesian(scale_details$y, self$limits$y, "y") ) } ) ggplot2/R/grob-absolute.r0000644000175100001440000000206712556003735015012 0ustar hornikusers#' Absolute grob #' #' This grob has fixed dimensions and position. #' #' It's still experimental #' #' @keywords internal absoluteGrob <- function(grob, width = NULL, height = NULL, xmin = NULL, ymin = NULL, vp = NULL) { gTree( children = grob, width = width, height = height, xmin = xmin, ymin = ymin, vp = vp, cl = "absoluteGrob" ) } #' @export #' @method grobHeight absoluteGrob grobHeight.absoluteGrob <- function(x) { x$height %||% grobHeight(x$children) } #' @export #' @method grobWidth absoluteGrob grobWidth.absoluteGrob <- function(x) { x$width %||% grobWidth(x$children) } #' @export #' @method grobX absoluteGrob grobX.absoluteGrob <- function(x, theta) { if (!is.null(x$xmin) && theta == "west") return(x$xmin) grobX(x$children, theta) } #' @export #' @method grobY absoluteGrob grobY.absoluteGrob <- function(x, theta) { if (!is.null(x$ymin) && theta == "south") return(x$ymin) grobY(x$children, theta) } #' @export #' @method grid.draw absoluteGrob grid.draw.absoluteGrob <- function(x, recording = TRUE) { NextMethod() } ggplot2/R/annotation-logticks.r0000644000175100001440000002072512607214210016222 0ustar hornikusers#' Annotation: log tick marks #' #' This annotation adds log tick marks with diminishing spacing. #' These tick marks probably make sense only for base 10. #' #' @param base the base of the log (default 10) #' @param sides a string that controls which sides of the plot the log ticks appear on. #' It can be set to a string containing any of \code{"trbl"}, for top, right, #' bottom, and left. #' @param short a \code{\link[grid]{unit}} object specifying the length of the #' short tick marks #' @param mid a \code{\link[grid]{unit}} object specifying the length of the #' middle tick marks. In base 10, these are the "5" ticks. #' @param long a \code{\link[grid]{unit}} object specifying the length of the #' long tick marks. In base 10, these are the "1" (or "10") ticks. #' @param scaled is the data already log-scaled? This should be \code{TRUE} #' (default) when the data is already transformed with \code{log10()} or when #' using \code{scale_y_log10}. It should be \code{FALSE} when using #' \code{coord_trans(y = "log10")}. #' @param colour Colour of the tick marks. #' @param size Thickness of tick marks, in mm. #' @param linetype Linetype of tick marks (\code{solid}, \code{dashed}, etc.) #' @param alpha The transparency of the tick marks. #' @param color An alias for \code{colour}. #' @param ... Other parameters passed on to the layer #' #' @export #' @seealso \code{\link{scale_y_continuous}}, \code{\link{scale_y_log10}} for log scale #' transformations. #' @seealso \code{\link{coord_trans}} for log coordinate transformations. #' #' @examples #' # Make a log-log plot (without log ticks) #' a <- ggplot(msleep, aes(bodywt, brainwt)) + #' geom_point(na.rm = TRUE) + #' scale_x_log10( #' breaks = scales::trans_breaks("log10", function(x) 10^x), #' labels = scales::trans_format("log10", scales::math_format(10^.x)) #' ) + #' scale_y_log10( #' breaks = scales::trans_breaks("log10", function(x) 10^x), #' labels = scales::trans_format("log10", scales::math_format(10^.x)) #' ) + #' theme_bw() #' #' a + annotation_logticks() # Default: log ticks on bottom and left #' a + annotation_logticks(sides = "lr") # Log ticks for y, on left and right #' a + annotation_logticks(sides = "trbl") # All four sides #' #' # Hide the minor grid lines because they don't align with the ticks #' a + annotation_logticks(sides = "trbl") + theme(panel.grid.minor = element_blank()) #' #' # Another way to get the same results as 'a' above: log-transform the data before #' # plotting it. Also hide the minor grid lines. #' b <- ggplot(msleep, aes(log10(bodywt), log10(brainwt))) + #' geom_point(na.rm = TRUE) + #' scale_x_continuous(name = "body", labels = scales::math_format(10^.x)) + #' scale_y_continuous(name = "brain", labels = scales::math_format(10^.x)) + #' theme_bw() + theme(panel.grid.minor = element_blank()) #' #' b + annotation_logticks() #' #' # Using a coordinate transform requires scaled = FALSE #' t <- ggplot(msleep, aes(bodywt, brainwt)) + #' geom_point() + #' coord_trans(x = "log10", y = "log10") + #' theme_bw() #' t + annotation_logticks(scaled = FALSE) #' #' # Change the length of the ticks #' a + annotation_logticks( #' short = unit(.5,"mm"), #' mid = unit(3,"mm"), #' long = unit(4,"mm") #' ) annotation_logticks <- function(base = 10, sides = "bl", scaled = TRUE, short = unit(0.1, "cm"), mid = unit(0.2, "cm"), long = unit(0.3, "cm"), colour = "black", size = 0.5, linetype = 1, alpha = 1, color = NULL, ...) { if (!is.null(color)) colour <- color layer( data = data.frame(x = NA), mapping = NULL, stat = StatIdentity, geom = GeomLogticks, position = PositionIdentity, show.legend = FALSE, inherit.aes = FALSE, params = list( base = base, sides = sides, scaled = scaled, short = short, mid = mid, long = long, colour = colour, size = size, linetype = linetype, alpha = alpha, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomLogticks <- ggproto("GeomLogticks", Geom, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, base = 10, sides = "bl", scaled = TRUE, short = unit(0.1, "cm"), mid = unit(0.2, "cm"), long = unit(0.3, "cm")) { ticks <- list() # Convert these units to numbers so that they can be put in data frames short <- convertUnit(short, "cm", valueOnly = TRUE) mid <- convertUnit(mid, "cm", valueOnly = TRUE) long <- convertUnit(long, "cm", valueOnly = TRUE) if (grepl("[b|t]", sides)) { # Get positions of x tick marks xticks <- calc_logticks( base = base, minpow = floor(panel_scales$x.range[1]), maxpow = ceiling(panel_scales$x.range[2]), start = 0, shortend = short, midend = mid, longend = long ) if (scaled) xticks$value <- log(xticks$value, base) names(xticks)[names(xticks) == "value"] <- "x" # Rename to 'x' for coordinates$transform xticks <- coord$transform(xticks, panel_scales) # Make the grobs if (grepl("b", sides)) { ticks$x_b <- with(data, segmentsGrob( x0 = unit(xticks$x, "native"), x1 = unit(xticks$x, "native"), y0 = unit(xticks$start, "cm"), y1 = unit(xticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } if (grepl("t", sides)) { ticks$x_t <- with(data, segmentsGrob( x0 = unit(xticks$x, "native"), x1 = unit(xticks$x, "native"), y0 = unit(1, "npc") - unit(xticks$start, "cm"), y1 = unit(1, "npc") - unit(xticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } } if (grepl("[l|r]", sides)) { yticks <- calc_logticks( base = base, minpow = floor(panel_scales$y.range[1]), maxpow = ceiling(panel_scales$y.range[2]), start = 0, shortend = short, midend = mid, longend = long ) if (scaled) yticks$value <- log(yticks$value, base) names(yticks)[names(yticks) == "value"] <- "y" # Rename to 'y' for coordinates$transform yticks <- coord$transform(yticks, panel_scales) # Make the grobs if (grepl("l", sides)) { ticks$y_l <- with(data, segmentsGrob( y0 = unit(yticks$y, "native"), y1 = unit(yticks$y, "native"), x0 = unit(yticks$start, "cm"), x1 = unit(yticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } if (grepl("r", sides)) { ticks$y_r <- with(data, segmentsGrob( y0 = unit(yticks$y, "native"), y1 = unit(yticks$y, "native"), x0 = unit(1, "npc") - unit(yticks$start, "cm"), x1 = unit(1, "npc") - unit(yticks$end, "cm"), gp = gpar(col = alpha(colour, alpha), lty = linetype, lwd = size * .pt) )) } } gTree(children = do.call("gList", ticks)) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = 1) ) # Calculate the position of log tick marks # Returns data frame with: # - value: the position of the log tick on the data axis, for example 1, 2, ..., 9, 10, 20, ... # - start: on the other axis, start position of the line (usually 0) # - end: on the other axis, end position of the line (for example, .1, .2, or .3) calc_logticks <- function(base = 10, ticks_per_base = base - 1, minpow = 0, maxpow = minpow + 1, start = 0, shortend = .1, midend = .2, longend = .3) { # Number of blocks of tick marks reps <- maxpow - minpow # For base 10: 1, 2, 3, ..., 7, 8, 9, 1, 2, ... ticknums <- rep(seq(1, base - 1, length.out = ticks_per_base), reps) # For base 10: 1, 1, 1, ..., 1, 1, 1, 2, 2, ... (for example) powers <- rep(seq(minpow, maxpow - 1), each = ticks_per_base) ticks <- ticknums * base ^ powers ticks <- c(ticks, base ^ maxpow) # Add the last tick mark # Set all of the ticks short tickend <- rep(shortend, length(ticks)) # Get the position within each cycle, 0, 1, 2, ..., 8, 0, 1, 2. ... cycleIdx <- ticknums - 1 # Set the "major" ticks long tickend[cycleIdx == 0] <- longend # Where to place the longer tick marks that are between each base # For base 10, this will be at each 5 longtick_after_base <- floor(ticks_per_base/2) tickend[ cycleIdx == longtick_after_base ] <- midend tickdf <- data.frame(value = ticks, start = start, end = tickend) return(tickdf) } ggplot2/R/geom-spoke.r0000644000175100001440000000303112607211502014271 0ustar hornikusers#' A line segment parameterised by location, direction and distance. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "spoke")} #' #' @inheritParams geom_segment #' @export #' @examples #' df <- expand.grid(x = 1:10, y=1:10) #' df$angle <- runif(100, 0, 2*pi) #' df$speed <- runif(100, 0, sqrt(0.1 * df$x)) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_spoke(aes(angle = angle), radius = 0.5) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_spoke(aes(angle = angle, radius = speed)) geom_spoke <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, geom = GeomSpoke, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_spoke #' @usage NULL stat_spoke <- function(...) { message("stat_spoke is deprecated, please use geom_spoke") geom_spoke(...) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomSpoke <- ggproto("GeomSpoke", GeomSegment, setup_data = function(data, params) { data$radius <- data$radius %||% params$radius data$angle <- data$angle %||% params$angle transform(data, xend = x + cos(angle) * radius, yend = y + sin(angle) * radius ) }, required_aes = c("x", "y", "angle", "radius") ) ggplot2/R/scale-shape.r0000644000175100001440000000224312555701147014427 0ustar hornikusers#' Scale for shapes, aka glyphs. #' #' A continuous variable can not be mapped to shape. #' #' @param solid Are the shapes solid, \code{TRUE}, or hollow \code{FALSE}? #' @inheritParams scale_x_discrete #' @rdname scale_shape #' @export #' @examples #' dsmall <- diamonds[sample(nrow(diamonds), 100), ] #' #' (d <- ggplot(dsmall, aes(carat, price)) + geom_point(aes(shape = cut))) #' d + scale_shape(solid = TRUE) # the default #' d + scale_shape(solid = FALSE) #' d + scale_shape(name = "Cut of diamond") #' d + scale_shape(name = "Cut of\ndiamond") #' #' # To change order of levels, change order of #' # underlying factor #' levels(dsmall$cut) <- c("Fair", "Good", "Very Good", "Premium", "Ideal") #' #' # Need to recreate plot to pick up new data #' ggplot(dsmall, aes(price, carat)) + geom_point(aes(shape = cut)) #' #' # Or for short: #' d %+% dsmall scale_shape <- function(..., solid = TRUE) { discrete_scale("shape", "shape_d", shape_pal(solid), ...) } #' @rdname scale_shape #' @export scale_shape_discrete <- scale_shape #' @rdname scale_shape #' @export scale_shape_continuous <- function(...) { stop("A continuous variable can not be mapped to shape", call. = FALSE) } ggplot2/R/scale-size.r0000644000175100001440000000512412556154657014313 0ustar hornikusers#' Scale size (area or radius). #' #' \code{scale_size} scales area, \code{scale_radius} scales radius. The size #' aesthetic is most commonly used for points and text, and humans perceive #' the area of points (not their radius), so this provides for optimal #' perception. \code{scale_size_area} ensures that a value of 0 is mapped #' to a size of 0. #' #' @name scale_size #' @inheritParams continuous_scale #' @param range a numeric vector of length 2 that specifies the minimum and #' maximum size of the plotting symbol after transformation. #' @seealso \code{\link{scale_size_area}} if you want 0 values to be mapped #' to points with size 0. #' @examples #' p <- ggplot(mpg, aes(displ, hwy, size = hwy)) + #' geom_point() #' p #' p + scale_size("Highway mpg") #' p + scale_size(range = c(0, 10)) #' #' # If you want zero value to have zero size, use scale_size_area: #' p + scale_size_area() #' #' # This is most useful when size is a count #' ggplot(mpg, aes(class, cyl)) + #' geom_count() + #' scale_size_area() #' #' # If you want to map size to radius (usually bad idea), use scale_radius #' p + scale_radius() NULL #' @rdname scale_size #' @export #' @usage NULL scale_size_continuous <- function(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") { continuous_scale("size", "area", area_pal(range), name = name, breaks = breaks, labels = labels, limits = limits, trans = trans, guide = guide) } #' @rdname scale_size #' @export scale_radius <- function(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") { continuous_scale("size", "radius", rescale_pal(range), name = name, breaks = breaks, labels = labels, limits = limits, trans = trans, guide = guide) } #' @rdname scale_size #' @export scale_size <- scale_size_continuous #' @rdname scale_size #' @export #' @usage NULL scale_size_discrete <- function(..., range = c(2, 6)) { discrete_scale("size", "size_d", function(n) { area <- seq(range[1] ^ 2, range[2] ^ 2, length.out = n) sqrt(area) }, ...) } #' @param ... Other arguments passed on to \code{\link{continuous_scale}} #' to control name, limits, breaks, labels and so forth. #' @param max_size Size of largest points. #' @export #' @rdname scale_size scale_size_area <- function(..., max_size = 6) { continuous_scale("size", "area", palette = abs_area(max_size), rescaler = rescale_max, ...) } ggplot2/R/stat-quantile.r0000644000175100001440000000524412607215012015026 0ustar hornikusers#' @param quantiles conditional quantiles of y to calculate and display #' @param formula formula relating y variables to x variables #' @param method Quantile regression method to use. Currently only supports #' \code{\link[quantreg]{rq}}. #' @inheritParams stat_identity #' @section Computed variables: #' \describe{ #' \item{quantile}{quantile of distribution} #' } #' @export #' @rdname geom_quantile stat_quantile <- function(mapping = NULL, data = NULL, geom = "quantile", position = "identity", quantiles = c(0.25, 0.5, 0.75), formula = NULL, method = "rq", method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatQuantile, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( quantiles = quantiles, formula = formula, method = method, method.args = method.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatQuantile <- ggproto("StatQuantile", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, quantiles = c(0.25, 0.5, 0.75), formula = NULL, xseq = NULL, method = "rq", method.args = list(), lambda = 1, na.rm = FALSE) { try_require("quantreg", "stat_quantile") if (is.null(formula)) { if (method == "rqss") { try_require("MatrixModels", "stat_quantile") formula <- eval(substitute(y ~ qss(x, lambda = lambda)), list(lambda = lambda)) } else { formula <- y ~ x } message("Smoothing formula not specified. Using: ", deparse(formula)) } if (is.null(data$weight)) data$weight <- 1 if (is.null(xseq)) { xmin <- min(data$x, na.rm = TRUE) xmax <- max(data$x, na.rm = TRUE) xseq <- seq(xmin, xmax, length.out = 100) } grid <- data.frame(x = xseq) method <- match.fun(method) plyr::ldply(quantiles, quant_pred, data = data, method = method, formula = formula, weight = weight, grid = grid, method.args = method.args) } ) quant_pred <- function(quantile, data, method, formula, weight, grid, method.args = method.args) { args <- c(list(quote(formula), data = quote(data), tau = quote(quantile), weights = quote(weight)), method.args) model <- do.call(method, args) grid$y <- stats::predict(model, newdata = grid) grid$quantile <- quantile grid$group <- paste(data$group[1], quantile, sep = "-") grid } ggplot2/R/fortify.r0000644000175100001440000000137712555701147013733 0ustar hornikusers#' Fortify a model with data. #' #' Rather than using this function, I now recomend using the \pkg{broom} #' package, which implements a much wider range of methods. \code{fortify} #' may be deprecated in the future. #' #' @seealso \code{\link{fortify.lm}} #' @param model model or other R object to convert to data frame #' @param data original dataset, if needed #' @param ... other arguments passed to methods #' @export fortify <- function(model, data, ...) UseMethod("fortify") #' @export fortify.data.frame <- function(model, data, ...) model #' @export fortify.NULL <- function(model, data, ...) waiver() #' @export fortify.default <- function(model, data, ...) { stop("ggplot2 doesn't know how to deal with data of class ", class(model), call. = FALSE) } ggplot2/R/stat-sum.r0000644000175100001440000000230312607207477014021 0ustar hornikusers#' @inheritParams stat_identity #' @section Computed variables: #' \describe{ #' \item{n}{number of observations at position} #' \item{prop}{percent of points in that panel at that position} #' } #' @export #' @rdname geom_count stat_sum <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatSum, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSum <- ggproto("StatSum", Stat, default_aes = aes(size = ..n..), required_aes = c("x", "y"), compute_panel = function(data, scales) { if (is.null(data$weight)) data$weight <- 1 group_by <- setdiff(intersect(names(data), .all_aesthetics), "weight") counts <- plyr::count(data, group_by, wt_var = "weight") counts <- plyr::rename(counts, c(freq = "n"), warn_missing = FALSE) counts$prop <- stats::ave(counts$n, counts$group, FUN = prop.table) counts } ) ggplot2/R/fortify-lm.r0000644000175100001440000000523212611262342014323 0ustar hornikusers#' Supplement the data fitted to a linear model with model fit statistics. #' #' If you have missing values in your model data, you may need to refit #' the model with \code{na.action = na.exclude}. #' #' @return The original data with extra columns: #' \item{.hat}{Diagonal of the hat matrix} #' \item{.sigma}{Estimate of residual standard deviation when #' corresponding observation is dropped from model} #' \item{.cooksd}{Cooks distance, \code{\link{cooks.distance}}} #' \item{.fitted}{Fitted values of model} #' \item{.resid}{Residuals} #' \item{.stdresid}{Standardised residuals} #' @param model linear model #' @param data data set, defaults to data used to fit model #' @param ... not used by this method #' @export #' @examples #' mod <- lm(mpg ~ wt, data = mtcars) #' head(fortify(mod)) #' head(fortify(mod, mtcars)) #' #' plot(mod, which = 1) #' #' ggplot(mod, aes(.fitted, .resid)) + #' geom_point() + #' geom_hline(yintercept = 0) + #' geom_smooth(se = FALSE) #' #' ggplot(mod, aes(.fitted, .stdresid)) + #' geom_point() + #' geom_hline(yintercept = 0) + #' geom_smooth(se = FALSE) #' #' ggplot(fortify(mod, mtcars), aes(.fitted, .stdresid)) + #' geom_point(aes(colour = factor(cyl))) #' #' ggplot(fortify(mod, mtcars), aes(mpg, .stdresid)) + #' geom_point(aes(colour = factor(cyl))) #' #' plot(mod, which = 2) #' ggplot(mod) + #' stat_qq(aes(sample = .stdresid)) + #' geom_abline() #' #' plot(mod, which = 3) #' ggplot(mod, aes(.fitted, sqrt(abs(.stdresid)))) + #' geom_point() + #' geom_smooth(se = FALSE) #' #' plot(mod, which = 4) #' ggplot(mod, aes(seq_along(.cooksd), .cooksd)) + #' geom_bar(stat = "identity") #' #' plot(mod, which = 5) #' ggplot(mod, aes(.hat, .stdresid)) + #' geom_vline(size = 2, colour = "white", xintercept = 0) + #' geom_hline(size = 2, colour = "white", yintercept = 0) + #' geom_point() + geom_smooth(se = FALSE) #' #' ggplot(mod, aes(.hat, .stdresid)) + #' geom_point(aes(size = .cooksd)) + #' geom_smooth(se = FALSE, size = 0.5) #' #' plot(mod, which = 6) #' ggplot(mod, aes(.hat, .cooksd)) + #' geom_vline(xintercept = 0, colour = NA) + #' geom_abline(slope = seq(0, 3, by = 0.5), colour = "white") + #' geom_smooth(se = FALSE) + #' geom_point() #' #' ggplot(mod, aes(.hat, .cooksd)) + #' geom_point(aes(size = .cooksd / .hat)) + #' scale_size_area() fortify.lm <- function(model, data = model$model, ...) { infl <- stats::influence(model, do.coef = FALSE) data$.hat <- infl$hat data$.sigma <- infl$sigma data$.cooksd <- stats::cooks.distance(model, infl) data$.fitted <- stats::predict(model) data$.resid <- stats::resid(model) data$.stdresid <- stats::rstandard(model, infl) data } ggplot2/R/layer.r0000644000175100001440000001644712620206562013363 0ustar hornikusers#' Create a new layer #' #' @export #' @inheritParams geom_point #' @param geom,stat,position Geom, stat and position adjustment to use in #' this layer. Can either be the name of a ggproto object, or the object #' itself. #' @param params Additional parameters to the \code{geom} and \code{stat}. #' @param subset DEPRECATED. An older way of subsetting the dataset used in a #' layer. #' @examples #' # geom calls are just a short cut for layer #' ggplot(mpg, aes(displ, hwy)) + geom_point() #' # shortcut for #' ggplot(mpg, aes(displ, hwy)) + #' layer(geom = "point", stat = "identity", position = "identity", #' params = list(na.rm = FALSE) #' ) layer <- function(geom = NULL, stat = NULL, data = NULL, mapping = NULL, position = NULL, params = list(), inherit.aes = TRUE, subset = NULL, show.legend = NA) { if (is.null(geom)) stop("Attempted to create layer with no geom.", call. = FALSE) if (is.null(stat)) stop("Attempted to create layer with no stat.", call. = FALSE) if (is.null(position)) stop("Attempted to create layer with no position.", call. = FALSE) # Handle show_guide/show.legend if (!is.null(params$show_guide)) { warning("`show_guide` has been deprecated. Please use `show.legend` instead.", call. = FALSE) show.legend <- params$show_guide params$show_guide <- NULL } if (!is.logical(show.legend) || length(show.legend) != 1) { warning("`show.legend` must be a logical vector of length 1.", call. = FALSE) show.legend <- FALSE } data <- fortify(data) if (!is.null(mapping) && !inherits(mapping, "uneval")) { stop("Mapping must be created by `aes()` or `aes_()`", call. = FALSE) } if (is.character(geom)) geom <- find_subclass("Geom", geom) if (is.character(stat)) stat <- find_subclass("Stat", stat) if (is.character(position)) position <- find_subclass("Position", position) # Split up params between aesthetics, geom, and stat params <- rename_aes(params) aes_params <- params[intersect(names(params), geom$aesthetics())] geom_params <- params[intersect(names(params), geom$parameters(TRUE))] stat_params <- params[intersect(names(params), stat$parameters(TRUE))] all <- c(geom$parameters(TRUE), stat$parameters(TRUE), geom$aesthetics()) extra <- setdiff(names(params), all) if (length(extra) > 0) { stop("Unknown parameters: ", paste(extra, collapse = ", "), call. = FALSE) } ggproto("LayerInstance", Layer, geom = geom, geom_params = geom_params, stat = stat, stat_params = stat_params, data = data, mapping = mapping, aes_params = aes_params, subset = subset, position = position, inherit.aes = inherit.aes, show.legend = show.legend ) } Layer <- ggproto("Layer", NULL, geom = NULL, geom_params = NULL, stat = NULL, stat_params = NULL, data = NULL, aes_params = NULL, mapping = NULL, position = NULL, inherit.aes = FALSE, print = function(self) { if (!is.null(self$mapping)) { cat("mapping:", clist(self$mapping), "\n") } cat(snakeize(class(self$geom)[[1]]), ": ", clist(self$geom_params), "\n", sep = "") cat(snakeize(class(self$stat)[[1]]), ": ", clist(self$stat_params), "\n", sep = "") cat(snakeize(class(self$position)[[1]]), "\n") }, compute_aesthetics = function(self, data, plot) { # For annotation geoms, it is useful to be able to ignore the default aes if (self$inherit.aes) { aesthetics <- defaults(self$mapping, plot$mapping) } else { aesthetics <- self$mapping } # Drop aesthetics that are set or calculated set <- names(aesthetics) %in% names(self$aes_params) calculated <- is_calculated_aes(aesthetics) aesthetics <- aesthetics[!set & !calculated] # Override grouping if set in layer if (!is.null(self$geom_params$group)) { aesthetics[["group"]] <- self$aes_params$group } # Old subsetting method if (!is.null(self$subset)) { include <- data.frame(plyr::eval.quoted(self$subset, data, plot$env)) data <- data[rowSums(include, na.rm = TRUE) == ncol(include), ] } scales_add_defaults(plot$scales, data, aesthetics, plot$plot_env) # Evaluate and check aesthetics aesthetics <- compact(aesthetics) evaled <- lapply(aesthetics, eval, envir = data, enclos = plot$plot_env) n <- nrow(data) if (n == 0) { # No data, so look at longest evaluated aesthetic n <- max(vapply(evaled, length, integer(1))) } check_aesthetics(evaled, n) # Set special group and panel vars if (empty(data) && n > 0) { evaled$PANEL <- 1 } else { evaled$PANEL <- data$PANEL } evaled <- data.frame(evaled, stringsAsFactors = FALSE) evaled <- add_group(evaled) evaled }, compute_statistic = function(self, data, panel) { if (empty(data)) return(data.frame()) params <- self$stat$setup_params(data, self$stat_params) data <- self$stat$setup_data(data, params) self$stat$compute_layer(data, params, panel) }, map_statistic = function(self, data, plot) { if (empty(data)) return(data.frame()) # Assemble aesthetics from layer, plot and stat mappings aesthetics <- self$mapping if (self$inherit.aes) { aesthetics <- defaults(aesthetics, plot$mapping) } aesthetics <- defaults(aesthetics, self$stat$default_aes) aesthetics <- compact(aesthetics) new <- strip_dots(aesthetics[is_calculated_aes(aesthetics)]) if (length(new) == 0) return(data) # Add map stat output to aesthetics stat_data <- plyr::quickdf(lapply(new, eval, data, baseenv())) names(stat_data) <- names(new) # Add any new scales, if needed scales_add_defaults(plot$scales, data, new, plot$plot_env) # Transform the values, if the scale say it's ok # (see stat_spoke for one exception) if (self$stat$retransform) { stat_data <- scales_transform_df(plot$scales, stat_data) } cunion(stat_data, data) }, compute_geom_1 = function(self, data) { if (empty(data)) return(data.frame()) data <- self$geom$setup_data(data, c(self$geom_params, self$aes_params)) check_required_aesthetics( self$geom$required_aes, c(names(data), names(self$aes_params)), snake_class(self$geom) ) data }, compute_position = function(self, data, panel) { if (empty(data)) return(data.frame()) params <- self$position$setup_params(data) data <- self$position$setup_data(data, params) self$position$compute_layer(data, params, panel) }, compute_geom_2 = function(self, data) { # Combine aesthetics, defaults, & params if (empty(data)) return(data) self$geom$use_defaults(data, self$aes_params) }, draw_geom = function(self, data, panel, coord) { if (empty(data)) { n <- nrow(panel$layout) return(rep(list(zeroGrob()), n)) } data <- self$geom$handle_na(data, self$geom_params) self$geom$draw_layer(data, self$geom_params, panel, coord) } ) is.layer <- function(x) inherits(x, "Layer") find_subclass <- function(super, class) { name <- paste0(super, camelize(class, first = TRUE)) if (!exists(name)) { stop("No ", tolower(super), " called ", name, ".", call. = FALSE) } obj <- get(name) if (!inherits(obj, super)) { stop("Found object is not a ", tolower(super), ".", call. = FALSE) } obj } ggplot2/R/stat-ydensity.r0000644000175100001440000000645312620212067015061 0ustar hornikusers#' @inheritParams stat_density #' @inheritParams stat_identity #' @param scale if "area" (default), all violins have the same area (before trimming #' the tails). If "count", areas are scaled proportionally to the number of #' observations. If "width", all violins have the same maximum width. #' @section Computed variables: #' \describe{ #' \item{density}{density estimate} #' \item{scaled}{density estimate, scaled to maximum of 1} #' \item{count}{density * number of points - probably useless for violin plots} #' \item{violinwidth}{density scaled for the violin plot, according to area, counts #' or to a constant maximum width} #' \item{n}{number of points} #' \item{width}{width of violin bounding box} #' } #' @seealso \code{\link{geom_violin}} for examples, and \code{\link{stat_density}} #' for examples with data along the x axis. #' @export #' @rdname geom_violin stat_ydensity <- function(mapping = NULL, data = NULL, geom = "violin", position = "dodge", adjust = 1, kernel = "gaussian", trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { scale <- match.arg(scale, c("area", "count", "width")) layer( data = data, mapping = mapping, stat = StatYdensity, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( adjust = adjust, kernel = kernel, trim = trim, scale = scale, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatYdensity <- ggproto("StatYdensity", Stat, required_aes = c("x", "y"), non_missing_aes = "weight", compute_group = function(data, scales, width = NULL, adjust = 1, kernel = "gaussian", trim = TRUE, na.rm = FALSE) { if (nrow(data) < 3) return(data.frame()) if (trim) { range <- range(data$y, na.rm = TRUE) } else { range <- scales$y$dimension() } dens <- compute_density(data$y, data$w, from = range[1], to = range[2], adjust = adjust, kernel = kernel) dens$y <- dens$x dens$x <- mean(range(data$x)) # Compute width if x has multiple values if (length(unique(data$x)) > 1) { width <- diff(range(data$x)) * 0.9 } dens$width <- width dens }, compute_panel = function(self, data, scales, width = NULL, adjust = 1, kernel = "gaussian", trim = TRUE, na.rm = FALSE, scale = "area") { data <- ggproto_parent(Stat, self)$compute_panel( data, scales, width = width, adjust = adjust, kernel = kernel, trim = trim, na.rm = na.rm ) # choose how violins are scaled relative to each other data$violinwidth <- switch(scale, # area : keep the original densities but scale them to a max width of 1 # for plotting purposes only area = data$density / max(data$density), # count: use the original densities scaled to a maximum of 1 (as above) # and then scale them according to the number of observations count = data$density / max(data$density) * data$n / max(data$n), # width: constant width (density scaled to a maximum of 1) width = data$scaled ) data } ) ggplot2/R/guide-legend.r0000644000175100001440000004507412633620525014601 0ustar hornikusers#' Legend guide. #' #' Legend type guide shows key (i.e., geoms) mapped onto values. #' Legend guides for various scales are integrated if possible. #' #' Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. #' \code{guide="legend"} in \code{scale_*} is syntactic sugar for #' \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). #' As for how to specify the guide for each scale in more detail, #' see \code{\link{guides}}. #' #' @param title A character string or expression indicating a title of guide. #' If \code{NULL}, the title is not shown. By default #' (\code{\link{waiver}}), the name of the scale object or the name #' specified in \code{\link{labs}} is used for the title. #' @param title.position A character string indicating the position of a #' title. One of "top" (default for a vertical guide), "bottom", "left" #' (default for a horizontal guide), or "right." #' @param title.theme A theme object for rendering the title text. Usually the #' object of \code{\link{element_text}} is expected. By default, the theme is #' specified by \code{legend.title} in \code{\link{theme}} or theme. #' @param title.hjust A number specifying horizontal justification of the #' title text. #' @param title.vjust A number specifying vertical justification of the title #' text. #' @param label logical. If \code{TRUE} then the labels are drawn. If #' \code{FALSE} then the labels are invisible. #' @param label.position A character string indicating the position of a #' label. One of "top", "bottom" (default for horizontal guide), "left", or #' "right" (default for vertical guide). #' @param label.theme A theme object for rendering the label text. Usually the #' object of \code{\link{element_text}} is expected. By default, the theme is #' specified by \code{legend.text} in \code{\link{theme}} or theme. #' @param label.hjust A numeric specifying horizontal justification of the #' label text. #' @param label.vjust A numeric specifying vertical justification of the label #' text. #' @param keywidth A numeric or a \code{\link[grid]{unit}} object specifying #' the width of the legend key. Default value is \code{legend.key.width} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param keyheight A numeric or a \code{\link[grid]{unit}} object specifying #' the height of the legend key. Default value is \code{legend.key.height} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param direction A character string indicating the direction of the guide. #' One of "horizontal" or "vertical." #' @param default.unit A character string indicating \code{\link[grid]{unit}} #' for \code{keywidth} and \code{keyheight}. #' @param override.aes A list specifying aesthetic parameters of legend key. #' See details and examples. #' @param nrow The desired number of rows of legends. #' @param ncol The desired number of column of legends. #' @param byrow logical. If \code{FALSE} (the default) the legend-matrix is #' filled by columns, otherwise the legend-matrix is filled by rows. #' @param reverse logical. If \code{TRUE} the order of legends is reversed. #' @param order positive integer less that 99 that specifies the order of #' this guide among multiple guides. This controls the order in which #' multiple guides are displayed, not the contents of the guide itself. #' If 0 (default), the order is determined by a secret algorithm. #' @param ... ignored. #' @return A guide object #' @export #' @family guides #' @examples #' \donttest{ #' df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) #' #' p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) #' p2 <- p1 + geom_point(aes(size = value)) #' #' # Basic form #' p1 + scale_fill_continuous(guide = "legend") #' p1 + scale_fill_continuous(guide = guide_legend()) #' #' # Guide title #' #' p1 + scale_fill_continuous(guide = guide_legend(title = "V")) # title text #' p1 + scale_fill_continuous(guide = guide_legend(title = NULL)) # no title #' #' # Control styles #' #' # key size #' p1 + guides(fill = guide_legend(keywidth = 3, keyheight = 1)) #' #' # title position #' p1 + guides(fill = guide_legend(title = "LEFT", title.position = "left")) #' #' # title text styles via element_text #' p1 + guides(fill = guide_legend( #' title.theme = element_text(size=15, face="italic", colour = "red", angle = 45))) #' #' # label position #' p1 + guides(fill = guide_legend(label.position = "bottom")) #' #' # label styles #' p1 + scale_fill_continuous(breaks = c(5, 10, 15), #' labels = paste("long", c(5, 10, 15)), #' guide = guide_legend(direction = "horizontal", title.position = "top", #' label.position="bottom", label.hjust = 0.5, label.vjust = 0.5, #' label.theme = element_text(angle = 90))) #' #' # Set aesthetic of legend key #' #' # very low alpha value make it difficult to see legend key #' p3 <- ggplot(diamonds, aes(carat, price)) + #' geom_point(aes(colour=color), alpha=1/100) #' p3 #' #' # override.aes overwrites the alpha #' p3 + guides(colour = guide_legend(override.aes = list(alpha = 1))) #' #' # multiple row/col legends #' df <- data.frame(x = 1:20, y = 1:20, color = letters[1:20]) #' p <- ggplot(df, aes(x, y)) + #' geom_point(aes(colour = color)) #' p + guides(col = guide_legend(nrow = 8)) #' p + guides(col = guide_legend(ncol = 8)) #' p + guides(col = guide_legend(nrow = 8, byrow = TRUE)) #' p + guides(col = guide_legend(ncol = 8, byrow = TRUE)) #' #' # reversed order legend #' p + guides(col = guide_legend(reverse = TRUE)) #' } guide_legend <- function( # title title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, # label label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, # key keywidth = NULL, keyheight = NULL, # general direction = NULL, default.unit = "line", override.aes = list(), nrow = NULL, ncol = NULL, byrow = FALSE, reverse = FALSE, order = 0, ...) { if (!is.null(keywidth) && !is.unit(keywidth)) keywidth <- unit(keywidth, default.unit) if (!is.null(keyheight) && !is.unit(keyheight)) keyheight <- unit(keyheight, default.unit) structure( list( # title title = title, title.position = title.position, title.theme = title.theme, title.hjust = title.hjust, title.vjust = title.vjust, # label label = label, label.position = label.position, label.theme = label.theme, label.hjust = label.hjust, label.vjust = label.vjust, # size of key keywidth = keywidth, keyheight = keyheight, # general direction = direction, override.aes = rename_aes(override.aes), nrow = nrow, ncol = ncol, byrow = byrow, reverse = reverse, order = order, # parameter available_aes = c("any"), ..., name = "legend" ), class = c("guide", "legend") ) } #' @export guide_train.legend <- function(guide, scale) { breaks <- scale$get_breaks() if (length(breaks) == 0 || all(is.na(breaks))) return() key <- as.data.frame(setNames(list(scale$map(breaks)), scale$aesthetics[1]), stringsAsFactors = FALSE) key$.label <- scale$get_labels(breaks) # this is a quick fix for #118 # some scales have NA as na.value (e.g., size) # some scales have non NA as na.value (e.g., "grey50" for colour) # drop rows if data (instead of the mapped value) is NA # # Also, drop out-of-range values for continuous scale # (should use scale$oob?) if (scale$is_discrete()) { key <- key[!is.na(breaks), , drop = FALSE] } else { limits <- scale$get_limits() noob <- !is.na(breaks) & limits[1] <= breaks & breaks <= limits[2] key <- key[noob, , drop = FALSE] } if (guide$reverse) key <- key[nrow(key):1, ] guide$key <- key guide$hash <- with(guide, digest::digest(list(title, key$.label, direction, name))) guide } #' @export guide_merge.legend <- function(guide, new_guide) { guide$key <- merge(guide$key, new_guide$key, sort = FALSE) guide$override.aes <- c(guide$override.aes, new_guide$override.aes) if (any(duplicated(names(guide$override.aes)))) warning("Duplicated override.aes is ignored.") guide$override.aes <- guide$override.aes[!duplicated(names(guide$override.aes))] guide } #' @export guide_geom.legend <- function(guide, layers, default_mapping) { # arrange common data for vertical and horizontal guide guide$geoms <- plyr::llply(layers, function(layer) { all <- names(c(layer$mapping, if (layer$inherit.aes) default_mapping, layer$stat$default_aes)) geom <- c(layer$geom$required_aes, names(layer$geom$default_aes)) matched <- intersect(intersect(all, geom), names(guide$key)) matched <- setdiff(matched, names(layer$geom_params)) matched <- setdiff(matched, names(layer$aes_params)) if (length(matched) > 0) { # This layer contributes to the legend if (is.na(layer$show.legend) || layer$show.legend) { # Default is to include it data <- layer$geom$use_defaults(guide$key[matched], layer$aes_params) } else { return(NULL) } } else { # This layer does not contribute to the legend if (is.na(layer$show.legend) || !layer$show.legend) { # Default is to exclude it return(NULL) } else { data <- layer$geom$use_defaults(NULL, layer$aes_params)[rep(1, nrow(guide$key)), ] } } # override.aes in guide_legend manually changes the geom data <- utils::modifyList(data, guide$override.aes) list( draw_key = layer$geom$draw_key, data = data, params = c(layer$geom_params, layer$stat_params) ) }) # remove null geom guide$geoms <- compact(guide$geoms) # Finally, remove this guide if no layer is drawn if (length(guide$geoms) == 0) guide <- NULL guide } #' @export guide_gengrob.legend <- function(guide, theme) { # default setting label.position <- guide$label.position %||% "right" if (!label.position %in% c("top", "bottom", "left", "right")) stop("label position \"", label.position, "\" is invalid") nbreak <- nrow(guide$key) # gap between keys etc hgap <- width_cm(unit(0.3, "lines")) vgap <- hgap grob.title <- ggname("guide.title", element_grob( guide$title.theme %||% calc_element("legend.title", theme), label = guide$title, hjust = guide$title.hjust %||% theme$legend.title.align %||% 0, vjust = guide$title.vjust %||% 0.5 ) ) title_width <- width_cm(grob.title) title_height <- height_cm(grob.title) # Labels if (!guide$label || is.null(guide$key$.label)) { grob.labels <- rep(list(zeroGrob()), nrow(guide$key)) } else { label.theme <- guide$label.theme %||% calc_element("legend.text", theme) # label.theme in param of guide_legend() > theme$legend.text.align > default # hjust/vjust in theme$legend.text and label.theme are ignored. hjust <- x <- guide$label.hjust %||% theme$legend.text.align %||% if (any(is.expression(guide$key$.label))) 1 else 0 vjust <- y <- guide$label.vjust %||% 0.5 grob.labels <- lapply(guide$key$.label, function(label, ...) { g <- element_grob(element = label.theme, label = label, x = x, y = y, hjust = hjust, vjust = vjust) ggname("guide.label", g) }) } label_widths <- width_cm(grob.labels) label_heights <- height_cm(grob.labels) # Keys key_width <- width_cm(guide$keywidth %||% theme$legend.key.width %||% theme$legend.key.size) key_height <- height_cm(guide$keyheight %||% theme$legend.key.height %||% theme$legend.key.size) key_size_mat <- do.call("cbind", lapply(guide$geoms, function(g) g$data$size / 10)) if (nrow(key_size_mat) == 0 || ncol(key_size_mat) == 0) { key_size_mat <- matrix(0, ncol = 1, nrow = nbreak) } key_sizes <- apply(key_size_mat, 1, max) if (!is.null(guide$nrow) && !is.null(guide$ncol) && guide$nrow * guide$ncol < nbreak) stop("`nrow` * `ncol` needs to be larger than the number of breaks", call. = FALSE) # If neither nrow/ncol specified, guess with "reasonable" values if (is.null(guide$nrow) && is.null(guide$ncol)) { if (guide$direction == "horizontal") { guide$nrow <- ceiling(nbreak / 5) } else { guide$ncol <- ceiling(nbreak / 20) } } legend.nrow <- guide$nrow %||% ceiling(nbreak / guide$ncol) legend.ncol <- guide$ncol %||% ceiling(nbreak / guide$nrow) key_sizes <- matrix(c(key_sizes, rep(0, legend.nrow * legend.ncol - nbreak)), legend.nrow, legend.ncol, byrow = guide$byrow) key_widths <- pmax(key_width, apply(key_sizes, 2, max)) key_heights <- pmax(key_height, apply(key_sizes, 1, max)) label_widths <- apply(matrix(c(label_widths, rep(0, legend.nrow * legend.ncol - nbreak)), legend.nrow, legend.ncol, byrow = guide$byrow), 2, max) label_heights <- apply(matrix(c(label_heights, rep(0, legend.nrow * legend.ncol - nbreak)), legend.nrow, legend.ncol, byrow = guide$byrow), 1, max) if (guide$byrow) { vps <- data.frame( R = ceiling(seq(nbreak) / legend.ncol), C = (seq(nbreak) - 1) %% legend.ncol + 1 ) } else { vps <- as.data.frame(arrayInd(seq(nbreak), dim(key_sizes))) names(vps) <- c("R", "C") } # layout of key-label depends on the direction of the guide if (guide$byrow == TRUE) { switch(label.position, "top" = { kl_widths <- pmax(label_widths, key_widths) kl_heights <- utils::head(interleave(label_heights, vgap/2, key_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 1, key.col = C, label.row = R * 4 - 3, label.col = C) }, "bottom" = { kl_widths <- pmax(label_widths, key_widths) kl_heights <- utils::head(interleave(key_heights, vgap/2, label_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 3, key.col = C, label.row = R * 4 - 1, label.col = C) }, "left" = { kl_widths <- utils::head(interleave(label_widths, hgap/2, key_widths, hgap/2), -1) kl_heights <- utils::head(interleave(pmax(label_heights, key_heights), vgap/2), -1) vps <- transform(vps, key.row = R * 2 - 1, key.col = C * 4 - 1, label.row = R * 2 - 1, label.col = C * 4 - 3) }, "right" = { kl_widths <- utils::head(interleave(key_widths, hgap/2, label_widths, hgap/2), -1) kl_heights <- utils::head(interleave(pmax(label_heights, key_heights), vgap/2), -1) vps <- transform(vps, key.row = R * 2 - 1, key.col = C * 4 - 3, label.row = R * 2 - 1, label.col = C * 4 - 1) }) } else { switch(label.position, "top" = { kl_widths <- utils::head(interleave(pmax(label_widths, key_widths), hgap/2), -1) kl_heights <- utils::head(interleave(label_heights, vgap/2, key_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 1, key.col = C * 2 - 1, label.row = R * 4 - 3, label.col = C * 2 - 1) }, "bottom" = { kl_widths <- utils::head(interleave(pmax(label_widths, key_widths), hgap/2), -1) kl_heights <- utils::head(interleave(key_heights, vgap/2, label_heights, vgap/2), -1) vps <- transform(vps, key.row = R * 4 - 3, key.col = C * 2 - 1, label.row = R * 4 - 1, label.col = C * 2 - 1) }, "left" = { kl_widths <- utils::head(interleave(label_widths, hgap/2, key_widths, hgap/2), -1) kl_heights <- pmax(key_heights, label_heights) vps <- transform(vps, key.row = R, key.col = C * 4 - 1, label.row = R, label.col = C * 4 - 3) }, "right" = { kl_widths <- utils::head(interleave(key_widths, hgap/2, label_widths, hgap/2), -1) kl_heights <- pmax(key_heights, label_heights) vps <- transform(vps, key.row = R, key.col = C * 4 - 3, label.row = R, label.col = C * 4 - 1) }) } # layout the title over key-label switch(guide$title.position, "top" = { widths <- c(kl_widths, max(0, title_width - sum(kl_widths))) heights <- c(title_height, vgap, kl_heights) vps <- transform(vps, key.row = key.row + 2, key.col = key.col, label.row = label.row + 2, label.col = label.col) vps.title.row = 1; vps.title.col = 1:length(widths) }, "bottom" = { widths <- c(kl_widths, max(0, title_width - sum(kl_widths))) heights <- c(kl_heights, vgap, title_height) vps <- transform(vps, key.row = key.row, key.col = key.col, label.row = label.row, label.col = label.col) vps.title.row = length(heights); vps.title.col = 1:length(widths) }, "left" = { widths <- c(title_width, hgap, kl_widths) heights <- c(kl_heights, max(0, title_height - sum(kl_heights))) vps <- transform(vps, key.row = key.row, key.col = key.col + 2, label.row = label.row, label.col = label.col + 2) vps.title.row = 1:length(heights); vps.title.col = 1 }, "right" = { widths <- c(kl_widths, hgap, title_width) heights <- c(kl_heights, max(0, title_height - sum(kl_heights))) vps <- transform(vps, key.row = key.row, key.col = key.col, label.row = label.row, label.col = label.col) vps.title.row = 1:length(heights); vps.title.col = length(widths) }) # grob for key key_size <- c(key_width, key_height) * 10 draw_key <- function(i) { bg <- element_render(theme, "legend.key") keys <- lapply(guide$geoms, function(g) { g$draw_key(g$data[i, ], g$params, key_size) }) c(list(bg), keys) } grob.keys <- unlist(lapply(seq_len(nbreak), draw_key), recursive = FALSE) # background grob.background <- element_render(theme, "legend.background") ngeom <- length(guide$geoms) + 1 kcols <- rep(vps$key.col, each = ngeom) krows <- rep(vps$key.row, each = ngeom) # padding padding <- 0.15 widths <- c(padding, widths, padding) heights <- c(padding, heights, padding) # Create the gtable for the legend gt <- gtable(widths = unit(widths, "cm"), heights = unit(heights, "cm")) gt <- gtable_add_grob(gt, grob.background, name = "background", clip = "off", t = 1, r = -1, b = -1, l = 1) gt <- gtable_add_grob(gt, grob.title, name = "title", clip = "off", t = 1 + min(vps.title.row), r = 1 + max(vps.title.col), b = 1 + max(vps.title.row), l = 1 + min(vps.title.col)) gt <- gtable_add_grob(gt, grob.keys, name = paste("key", krows, kcols, c("bg", seq(ngeom - 1)), sep = "-"), clip = "off", t = 1 + krows, r = 1 + kcols, b = 1 + krows, l = 1 + kcols) gt <- gtable_add_grob(gt, grob.labels, name = paste("label", vps$label.row, vps$label.col, sep = "-"), clip = "off", t = 1 + vps$label.row, r = 1 + vps$label.col, b = 1 + vps$label.row, l = 1 + vps$label.col) gt } globalVariables(c("C", "R", "key.row", "key.col", "label.row", "label.col")) ggplot2/R/guides-grid.r0000644000175100001440000000204612556122070014437 0ustar hornikusers# Produce a grob to be used as for panel backgrounds guide_grid <- function(theme, x.minor, x.major, y.minor, y.major) { x.minor <- setdiff(x.minor, x.major) y.minor <- setdiff(y.minor, y.major) ggname("grill", grobTree( element_render(theme, "panel.background"), if (length(y.minor) > 0) element_render( theme, "panel.grid.minor.y", x = rep(0:1, length(y.minor)), y = rep(y.minor, each = 2), id.lengths = rep(2, length(y.minor)) ), if (length(x.minor) > 0) element_render( theme, "panel.grid.minor.x", x = rep(x.minor, each = 2), y = rep(0:1, length(x.minor)), id.lengths = rep(2, length(x.minor)) ), if (length(y.major) > 0) element_render( theme, "panel.grid.major.y", x = rep(0:1, length(y.major)), y = rep(y.major, each = 2), id.lengths = rep(2, length(y.major)) ), if (length(x.major) > 0) element_render( theme, "panel.grid.major.x", x = rep(x.major, each = 2), y = rep(0:1, length(x.major)), id.lengths = rep(2, length(x.major)) ) )) } ggplot2/R/aaa-.r0000644000175100001440000000053712567704140013044 0ustar hornikusers#' @include ggproto.r NULL #' Base ggproto classes for ggplot2 #' #' If you are creating a new geom, stat, position, or scale in another package, #' you'll need to extend from \code{ggplot2::Geom}, \code{ggplot2::Stat}, #' \code{ggplot2::Position}, or \code{ggplot2::Scale}. #' #' @seealso ggproto #' @keywords internal #' @name ggplot2-ggproto NULL ggplot2/R/aes.r0000644000175100001440000001603212570732100013001 0ustar hornikusers#' @include utilities.r NULL .all_aesthetics <- c("adj", "alpha", "angle", "bg", "cex", "col", "color", "colour", "fg", "fill", "group", "hjust", "label", "linetype", "lower", "lty", "lwd", "max", "middle", "min", "pch", "radius", "sample", "shape", "size", "srt", "upper", "vjust", "weight", "width", "x", "xend", "xmax", "xmin", "xintercept", "y", "yend", "ymax", "ymin", "yintercept", "z") .base_to_ggplot <- c( "col" = "colour", "color" = "colour", "pch" = "shape", "cex" = "size", "lty" = "linetype", "lwd" = "size", "srt" = "angle", "adj" = "hjust", "bg" = "fill", "fg" = "colour", "min" = "ymin", "max" = "ymax" ) #' Define aesthetic mappings. #' #' Generate aesthetic mappings that describe how variables in the data are #' mapped to visual properties (aesthetics) of geoms. This function also #' standardise aesthetic names by performs partial name matching, converting #' color to colour, and old style R names to ggplot names (eg. pch to shape, #' cex to size) #' #' @param x,y,... List of name value pairs giving aesthetics to map to #' variables. The names for x and y aesthetics can be omitted (because #' they are so common); all other aesthetics must be named. #' @seealso See \code{\link{aes_q}}/\code{\link{aes_string}} for standard #' evaluation versions of \code{aes}. #' @seealso See #' \code{\link{aes_colour_fill_alpha}}, \code{\link{aes_group_order}}, #' \code{\link{aes_linetype_size_shape}} and \code{\link{aes_position}} #' for more specific examples with different aesthetics. #' @export #' @examples #' aes(x = mpg, y = wt) #' aes(mpg, wt) #' #' # You can also map aesthetics to functions of variables #' aes(x = mpg ^ 2, y = wt / cyl) #' #' # Aesthetic names are automatically standardised #' aes(col = x) #' aes(fg = x) #' aes(color = x) #' aes(colour = x) #' #' # aes is almost always used with ggplot() or a layer #' ggplot(mpg, aes(displ, hwy)) + geom_point() #' ggplot(mpg) + geom_point(aes(displ, hwy)) #' #' # Aesthetics supplied to ggplot() are used as defaults for every layer #' # you can override them, or supply different aesthetics for each layer aes <- function(x, y, ...) { aes <- structure(as.list(match.call()[-1]), class = "uneval") rename_aes(aes) } #' @export print.uneval <- function(x, ...) { values <- vapply(x, deparse2, character(1)) bullets <- paste0("* ", format(names(x)), " -> ", values, "\n") cat(bullets, sep = "") } #' @export str.uneval <- function(object, ...) utils::str(unclass(object), ...) #' @export "[.uneval" <- function(x, i, ...) structure(unclass(x)[i], class = "uneval") #' @export as.character.uneval <- function(x, ...) { char <- as.character(unclass(x)) names(char) <- names(x) char } # Rename American or old-style aesthetics name rename_aes <- function(x) { # Convert prefixes to full names full <- match(names(x), .all_aesthetics) names(x)[!is.na(full)] <- .all_aesthetics[full[!is.na(full)]] plyr::rename(x, .base_to_ggplot, warn_missing = FALSE) } # Look up the scale that should be used for a given aesthetic aes_to_scale <- function(var) { var[var %in% c("x", "xmin", "xmax", "xend", "xintercept")] <- "x" var[var %in% c("y", "ymin", "ymax", "yend", "yintercept")] <- "y" var } # Figure out if an aesthetic is a position aesthetic or not is_position_aes <- function(vars) { aes_to_scale(vars) %in% c("x", "y") } #' Define aesthetic mappings from strings, or quoted calls and formulas. #' #' Aesthetic mappings describe how variables in the data are mapped to visual #' properties (aesthetics) of geoms. \code{\link{aes}} uses non-standard #' evaluation to capture the variable names. \code{aes_} and \code{aes_string} #' require you to explicitly quote the inputs either with \code{""} for #' \code{aes_string()}, or with \code{quote} or \code{~} for \code{aes_()}. #' (\code{aes_q} is an alias to \code{aeq_}) #' #' It's better to use \code{aes_q()}, because there's no easy way to create the #' equivalent to \code{aes(colour = "my colour")} or \code{aes{x = `X$1`}} #' with \code{aes_string()}. #' #' \code{aes_string} and \code{aes_} are particularly useful when writing #' functions that create plots because you can use strings or quoted #' names/calls to define the aesthetic mappings, rather than having to use #' \code{\link{substitute}} to generate a call to \code{aes()}. #' #' @param x,y,... List of name value pairs. Elements must be either #' quoted calls, strings, one-sided formulas or constants. #' @seealso \code{\link{aes}} #' @export #' @examples #' # Three ways of generating the same aesthetics #' aes(mpg, wt, col = cyl) #' aes_(quote(mpg), quote(wt), col = quote(cyl)) #' aes_(~mpg, ~wt, col = ~cyl) #' aes_string("mpg", "wt", col = "cyl") #' #' # You can't easily mimic these calls with aes_string #' aes(`$100`, colour = "smooth") #' aes_(~ `$100`, colour = "smooth") #' # Ok, you can, but it requires a _lot_ of quotes #' aes_string("`$100`", colour = '"smooth"') #' #' # Convert strings to names with as.name #' var <- "cyl" #' aes(col = x) #' aes_(col = as.name(var)) aes_ <- function(x, y, ...) { mapping <- list(...) if (!missing(x)) mapping["x"] <- list(x) if (!missing(y)) mapping["y"] <- list(y) as_call <- function(x) { if (is.formula(x) && length(x) == 2) { x[[2]] } else if (is.call(x) || is.name(x) || is.atomic(x)) { x } else { stop("Aesthetic must be a one-sided formula, call, name, or constant.", call. = FALSE) } } mapping <- lapply(mapping, as_call) structure(rename_aes(mapping), class = "uneval") } #' @rdname aes_ #' @export aes_string <- function(x, y, ...) { mapping <- list(...) if (!missing(x)) mapping["x"] <- list(x) if (!missing(y)) mapping["y"] <- list(y) mapping <- lapply(mapping, function(x) { if (is.character(x)) { parse(text = x)[[1]] } else { x } }) structure(rename_aes(mapping), class = "uneval") } #' @export #' @rdname aes_ aes_q <- aes_ #' Given a character vector, create a set of identity mappings #' #' @param vars vector of variable names #' @keywords internal #' @export #' @examples #' aes_all(names(mtcars)) #' aes_all(c("x", "y", "col", "pch")) aes_all <- function(vars) { names(vars) <- vars vars <- rename_aes(vars) structure( lapply(vars, as.name), class = "uneval" ) } #' Automatic aesthetic mapping #' #' @param data data.frame or names of variables #' @param ... aesthetics that need to be explicitly mapped. #' @keywords internal #' @export aes_auto <- function(data = NULL, ...) { warning("aes_auto() is deprecated", call. = FALSE) # detect names of data if (is.null(data)) { stop("aes_auto requires data.frame or names of data.frame.") } else if (is.data.frame(data)) { vars <- names(data) } else { vars <- data } # automatically detected aes vars <- intersect(.all_aesthetics, vars) names(vars) <- vars aes <- lapply(vars, function(x) parse(text = x)[[1]]) # explicitly defined aes if (length(match.call()) > 2) { args <- as.list(match.call()[-1]) aes <- c(aes, args[names(args) != "data"]) } structure(rename_aes(aes), class = "uneval") } ggplot2/R/geom-ribbon.r0000644000175100001440000001023112620174766014442 0ustar hornikusers#' Ribbons and area plots. #' #' For each continuous x value, \code{geom_interval} displays a y interval. #' \code{geom_area} is a special case of \code{geom_ribbon}, where the #' minimum of the range is fixed to 0. #' #' An area plot is the continuous analog of a stacked bar chart (see #' \code{\link{geom_bar}}), and can be used to show how composition of the #' whole varies over the range of x. Choosing the order in which different #' components is stacked is very important, as it becomes increasing hard to #' see the individual pattern as you move up the stack. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "ribbon")} #' #' @seealso #' \code{\link{geom_bar}} for discrete intervals (bars), #' \code{\link{geom_linerange}} for discrete intervals (lines), #' \code{\link{geom_polygon}} for general polygons #' @inheritParams geom_point #' @export #' @examples #' # Generate data #' huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron)) #' h <- ggplot(huron, aes(year)) #' #' h + geom_ribbon(aes(ymin=0, ymax=level)) #' h + geom_area(aes(y = level)) #' #' # Add aesthetic mappings #' h + #' geom_ribbon(aes(ymin = level - 1, ymax = level + 1), fill = "grey70") + #' geom_line(aes(y = level)) geom_ribbon <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomRibbon, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRibbon <- ggproto("GeomRibbon", Geom, default_aes = aes(colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = NA), required_aes = c("x", "ymin", "ymax"), draw_key = draw_key_polygon, draw_group = function(data, panel_scales, coord, na.rm = FALSE) { if (na.rm) data <- data[stats::complete.cases(data[c("x", "ymin", "ymax")]), ] data <- data[order(data$group, data$x), ] # Check that aesthetics are constant aes <- unique(data[c("colour", "fill", "size", "linetype", "alpha")]) if (nrow(aes) > 1) { stop("Aesthetics can not vary with a ribbon") } aes <- as.list(aes) # Instead of removing NA values from the data and plotting a single # polygon, we want to "stop" plotting the polygon whenever we're # missing values and "start" a new polygon as soon as we have new # values. We do this by creating an id vector for polygonGrob that # has distinct polygon numbers for sequences of non-NA values and NA # for NA values in the original data. Example: c(NA, 2, 2, 2, NA, NA, # 4, 4, 4, NA) missing_pos <- !stats::complete.cases(data[c("x", "ymin", "ymax")]) ids <- cumsum(missing_pos) + 1 ids[missing_pos] <- NA positions <- plyr::summarise(data, x = c(x, rev(x)), y = c(ymax, rev(ymin)), id = c(ids, rev(ids))) munched <- coord_munch(coord, positions, panel_scales) ggname("geom_ribbon", polygonGrob( munched$x, munched$y, id = munched$id, default.units = "native", gp = gpar( fill = alpha(aes$fill, aes$alpha), col = alpha(aes$colour, aes$alpha), lwd = aes$size * .pt, lty = aes$linetype) )) } ) #' @rdname geom_ribbon #' @export geom_area <- function(mapping = NULL, data = NULL, stat = "identity", position = "stack", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomArea, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomArea <- ggproto("GeomArea", GeomRibbon, default_aes = aes(colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = NA), required_aes = c("x", "y"), setup_data = function(data, params) { transform(data, ymin = 0, ymax = y) } ) ggplot2/R/position-identity.r0000644000175100001440000000050012567131473015731 0ustar hornikusers#' Don't adjust position #' #' @family position adjustments #' @export position_identity <- function() { PositionIdentity } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionIdentity <- ggproto("PositionIdentity", Position, compute_layer = function(data, params, scales) { data } ) ggplot2/R/aes-linetype-size-shape.r0000644000175100001440000000451412556131377016715 0ustar hornikusers#' Differentiation related aesthetics: linetype, size, shape #' #' This page demonstrates the usage of a sub-group #' of aesthetics; linetype, size and shape. #' #' @name aes_linetype_size_shape #' @aliases linetype size shape #' @examples #' #' # Line types should be specified with either an integer, a name, or with a string of #' # an even number (up to eight) of hexadecimal digits which give the lengths in #' # consecutive positions in the string. #' # 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash #' #' # Data #' df <- data.frame(x = 1:10 , y = 1:10) #' f <- ggplot(df, aes(x, y)) #' f + geom_line(linetype = 2) #' f + geom_line(linetype = "dotdash") #' #' # An example with hex strings, the string "33" specifies three units on followed #' # by three off and "3313" specifies three units on followed by three off followed #' # by one on and finally three off. #' f + geom_line(linetype = "3313") #' #' # Mapping line type from a variable #' ggplot(economics_long, aes(date, value01)) + #' geom_line(aes(linetype = variable)) #' #' # Size examples #' # Should be specified with a numerical value (in millimetres), #' # or from a variable source #' p <- ggplot(mtcars, aes(wt, mpg)) #' p + geom_point(size = 4) #' p + geom_point(aes(size = qsec)) #' p + geom_point(size = 2.5) + #' geom_hline(yintercept = 25, size = 3.5) #' #' # Shape examples #' # Shape takes four types of values: an integer in [0, 25], #' # a single character-- which uses that character as the plotting symbol, #' # a . to draw the smallest rectangle that is visible (i.e., about one pixel) #' # an NA to draw nothing #' p + geom_point() #' p + geom_point(shape = 5) #' p + geom_point(shape = "k", size = 3) #' p + geom_point(shape = ".") #' p + geom_point(shape = NA) #' #' # Shape can also be mapped from a variable #' p + geom_point(aes(shape = factor(cyl))) #' #' # A look at all 25 symbols #' df2 <- data.frame(x = 1:5 , y = 1:25, z = 1:25) #' s <- ggplot(df2, aes(x, y)) #' s + geom_point(aes(shape = z), size = 4) + #' scale_shape_identity() #' # While all symbols have a foreground colour, symbols 19-25 also take a #' # background colour (fill) #' s + geom_point(aes(shape = z), size = 4, colour = "Red") + #' scale_shape_identity() #' s + geom_point(aes(shape = z), size = 4, colour = "Red", fill = "Black") + #' scale_shape_identity() NULL ggplot2/R/utilities-help.r0000644000175100001440000000177312567363170015215 0ustar hornikusersaesthetics <- function(x) { req_aes <- x$required_aes def_aes <- names(x$default_aes) def_aes <- setdiff(def_aes, req_aes) if (length(req_aes) == 0) { # Suppress warnings which occur when sorting NULL return(suppressWarnings(sort(names(x$default_aes)))) } if (length(def_aes) == 0) { return(paste("\\strong{", sort(x$required_aes), "}",sep = "")) } return(c(paste("\\strong{", sort(x$required_aes), "}", sep = ""), sort(def_aes))) } geom_aesthetics <- function(x) { aesthetics(find_subclass("Geom", x)) } stat_aesthetics <- function(x) { aesthetics(find_subclass("Stat", x)) } rd_aesthetics <- function(type, name) { obj <- switch(type, geom = find_subclass("Geom", name), stat = find_subclass("Stat", name) ) aes <- aesthetics(obj) paste("\\code{", type, "_", name, "} ", "understands the following aesthetics (required aesthetics are in bold):\n\n", "\\itemize{\n", paste(" \\item \\code{", aes, "}", collapse = "\n", sep = ""), "\n}\n", sep = "") } ggplot2/R/plot-last.r0000644000175100001440000000061312555701147014160 0ustar hornikusers.plot_store <- function() { .last_plot <- NULL list( get = function() .last_plot, set = function(value) .last_plot <<- value ) } .store <- .plot_store() # Set last plot created or modified set_last_plot <- function(value) .store$set(value) #' Retrieve the last plot to be modified or created. #' #' @seealso \code{\link{ggsave}} #' @export last_plot <- function() .store$get() ggplot2/R/scale-identity.r0000644000175100001440000001107312570727672015171 0ustar hornikusers#' Use values without scaling. #' #' @name scale_identity #' @param ... Other arguments passed on to \code{\link{discrete_scale}} or #' \code{\link{continuous_scale}} #' @param guide Guide to use for this scale - defaults to \code{"none"}. #' @examples #' ggplot(luv_colours, aes(u, v)) + #' geom_point(aes(colour = col), size = 3) + #' scale_color_identity() + #' coord_equal() #' #' df <- data.frame( #' x = 1:4, #' y = 1:4, #' colour = c("red", "green", "blue", "yellow") #' ) #' ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = colour)) + #' scale_fill_identity() #' #' # To get a legend guide, specify guide = "legend" #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = colour)) + #' scale_fill_identity(guide = "legend") #' # But you'll typically also need to supply breaks and labels: #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = colour)) + #' scale_fill_identity("trt", labels = letters[1:4], breaks = df$colour, #' guide = "legend") #' #' # cyl scaled to appropriate size #' ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(size = cyl)) #' #' # cyl used as point size #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(size = cyl)) + #' scale_size_identity() NULL #' @rdname scale_identity #' @export scale_colour_identity <- function(..., guide = "none") { sc <- discrete_scale("colour", "identity", identity_pal(), ..., guide = guide) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleDiscreteIdentity class(sc) <- class(ScaleDiscreteIdentity) sc } #' @rdname scale_identity #' @export scale_fill_identity <- function(..., guide = "none") { sc <- discrete_scale("fill", "identity", identity_pal(), ..., guide = guide) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleDiscreteIdentity class(sc) <- class(ScaleDiscreteIdentity) sc } #' @rdname scale_identity #' @export scale_shape_identity <- function(..., guide = "none") { sc <- continuous_scale("shape", "identity", identity_pal(), ..., guide = guide) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleContinuousIdentity class(sc) <- class(ScaleContinuousIdentity) sc } #' @rdname scale_identity #' @export scale_linetype_identity <- function(..., guide = "none") { sc <- discrete_scale("linetype", "identity", identity_pal(), ..., guide = guide) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleDiscreteIdentity class(sc) <- class(ScaleDiscreteIdentity) sc } #' @rdname scale_identity #' @export scale_alpha_identity <- function(..., guide = "none") { sc <- continuous_scale("alpha", "identity", identity_pal(), ..., guide = guide) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleContinuousIdentity class(sc) <- class(ScaleContinuousIdentity) sc } #' @rdname scale_identity #' @export scale_size_identity <- function(..., guide = "none") { sc <- continuous_scale("size", "identity", identity_pal(), ..., guide = guide) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleContinuousIdentity class(sc) <- class(ScaleContinuousIdentity) sc } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleDiscreteIdentity <- ggproto("ScaleDiscreteIdentity", ScaleDiscrete, map = function(x) { if (is.factor(x)) { as.character(x) } else { x } }, train = function(self, x) { # do nothing if no guide, otherwise train so we know what breaks to use if (self$guide == "none") return() ggproto_parent(ScaleDiscrete, self)$train(x) } ) #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousIdentity <- ggproto("ScaleContinuousIdentity", ScaleContinuous, map = function(x) { if (is.factor(x)) { as.character(x) } else { x } }, train = function(self, x) { # do nothing if no guide, otherwise train so we know what breaks to use if (self$guide == "none") return() ggproto_parent(ScaleDiscrete, self)$train(x) } ) ggplot2/R/facet-null.r0000644000175100001440000000404012556004364014267 0ustar hornikusers#' Facet specification: a single panel. #' #' @inheritParams facet_grid #' @export #' @examples #' # facet_null is the default facetting specification if you #' # don't override it with facet_grid or facet_wrap #' ggplot(mtcars, aes(mpg, wt)) + geom_point() facet_null <- function(shrink = TRUE) { facet(shrink = shrink, subclass = "null") } #' @export facet_train_layout.null <- function(facet, data) { data.frame( PANEL = 1L, ROW = 1L, COL = 1L, SCALE_X = 1L, SCALE_Y = 1L) } #' @export facet_map_layout.null <- function(facet, data, layout) { # Need the is.waive check for special case where no data, but aesthetics # are mapped to vectors if (is.waive(data) || empty(data)) return(cbind(data, PANEL = integer(0))) data$PANEL <- 1L data } #' @export facet_render.null <- function(facet, panel, coord, theme, geom_grobs) { range <- panel$ranges[[1]] # Figure out aspect ratio aspect_ratio <- theme$aspect.ratio %||% coord$aspect(range) if (is.null(aspect_ratio)) { aspect_ratio <- 1 respect <- FALSE } else { respect <- TRUE } fg <- coord$render_fg(range, theme) bg <- coord$render_bg(range, theme) # Flatten layers - we know there's only one panel geom_grobs <- lapply(geom_grobs, "[[", 1) if (theme$panel.ontop) { panel_grobs <- c(geom_grobs, list(bg), list(fg)) } else { panel_grobs <- c(list(bg), geom_grobs, list(fg)) } panel_grob <- gTree(children = do.call("gList", panel_grobs)) axis_h <- coord$render_axis_h(range, theme) axis_v <- coord$render_axis_v(range, theme) all <- matrix(list( axis_v, panel_grob, zeroGrob(), axis_h ), ncol = 2, byrow = TRUE) layout <- gtable_matrix("layout", all, widths = unit.c(grobWidth(axis_v), unit(1, "null")), heights = unit.c(unit(aspect_ratio, "null"), grobHeight(axis_h)), respect = respect, clip = c("off", "off", "on", "off"), z = matrix(c(3, 2, 1, 4), ncol = 2, byrow = TRUE) ) layout$layout$name <- c("axis-l", "spacer", "panel", "axis-b") layout } #' @export facet_vars.null <- function(facet) "" ggplot2/R/plot.r0000644000175100001440000001344312633620540013216 0ustar hornikusers#' Create a new ggplot plot. #' #' \code{ggplot()} initializes a ggplot object. It can be used to #' declare the input data frame for a graphic and to specify the #' set of plot aesthetics intended to be common throughout all #' subsequent layers unless specifically overridden. #' #' \code{ggplot()} is typically used to construct a plot #' incrementally, using the + operator to add layers to the #' existing ggplot object. This is advantageous in that the #' code is explicit about which layers are added and the order #' in which they are added. For complex graphics with multiple #' layers, initialization with \code{ggplot} is recommended. #' #' There are three common ways to invoke \code{ggplot}: #' \itemize{ #' \item \code{ggplot(df, aes(x, y, ))} #' \item \code{ggplot(df)} #' \item \code{ggplot()} #' } #' The first method is recommended if all layers use the same #' data and the same set of aesthetics, although this method #' can also be used to add a layer using data from another #' data frame. See the first example below. The second #' method specifies the default data frame to use for the plot, #' but no aesthetics are defined up front. This is useful when #' one data frame is used predominantly as layers are added, #' but the aesthetics may vary from one layer to another. The #' third method initializes a skeleton \code{ggplot} object which #' is fleshed out as layers are added. This method is useful when #' multiple data frames are used to produce different layers, as #' is often the case in complex graphics. #' #' @param data Default dataset to use for plot. If not already a data.frame, #' will be converted to one by \code{\link{fortify}}. If not specified, #' must be suppled in each layer added to the plot. #' @param mapping Default list of aesthetic mappings to use for plot. #' If not specified, must be suppled in each layer added to the plot. #' @param ... Other arguments passed on to methods. Not currently used. #' @param environment If an variable defined in the aesthetic mapping is not #' found in the data, ggplot will look for it in this environment. It defaults #' to using the environment in which \code{ggplot()} is called. #' @export #' @examples #' df <- data.frame(gp = factor(rep(letters[1:3], each = 10)), #' y = rnorm(30)) #' # Compute sample mean and standard deviation in each group #' ds <- plyr::ddply(df, "gp", plyr::summarise, mean = mean(y), sd = sd(y)) #' #' # Declare the data frame and common aesthetics. #' # The summary data frame ds is used to plot #' # larger red points in a second geom_point() layer. #' # If the data = argument is not specified, it uses the #' # declared data frame from ggplot(); ditto for the aesthetics. #' ggplot(df, aes(x = gp, y = y)) + #' geom_point() + #' geom_point(data = ds, aes(y = mean), #' colour = 'red', size = 3) #' # Same plot as above, declaring only the data frame in ggplot(). #' # Note how the x and y aesthetics must now be declared in #' # each geom_point() layer. #' ggplot(df) + #' geom_point(aes(x = gp, y = y)) + #' geom_point(data = ds, aes(x = gp, y = mean), #' colour = 'red', size = 3) #' # Set up a skeleton ggplot object and add layers: #' ggplot() + #' geom_point(data = df, aes(x = gp, y = y)) + #' geom_point(data = ds, aes(x = gp, y = mean), #' colour = 'red', size = 3) + #' geom_errorbar(data = ds, aes(x = gp, y = mean, #' ymin = mean - sd, ymax = mean + sd), #' colour = 'red', width = 0.4) ggplot <- function(data = NULL, mapping = aes(), ..., environment = parent.frame()) { UseMethod("ggplot") } #' @export #' @rdname ggplot #' @usage NULL ggplot.default <- function(data = NULL, mapping = aes(), ..., environment = parent.frame()) { ggplot.data.frame(fortify(data, ...), mapping, environment = environment) } #' @export #' @rdname ggplot #' @usage NULL ggplot.data.frame <- function(data, mapping = aes(), ..., environment = parent.frame()) { if (!missing(mapping) && !inherits(mapping, "uneval")) { stop("Mapping should be created with aes or aes_string") } p <- structure(list( data = data, layers = list(), scales = scales_list(), mapping = mapping, theme = list(), coordinates = coord_cartesian(), facet = facet_null(), plot_env = environment ), class = c("gg", "ggplot")) p$labels <- make_labels(mapping) set_last_plot(p) p } plot_clone <- function(plot) { p <- plot p$scales <- plot$scales$clone() p } #' Reports whether x is a ggplot object #' @param x An object to test #' @keywords internal #' @export is.ggplot <- function(x) inherits(x, "ggplot") #' Draw plot on current graphics device. #' #' @param x plot to display #' @param newpage draw new (empty) page first? #' @param vp viewport to draw plot in #' @param ... other arguments not used by this method #' @keywords hplot #' @return Invisibly returns the result of \code{\link{ggplot_build}}, which #' is a list with components that contain the plot itself, the data, #' information about the scales, panels etc. #' @export #' @method print ggplot print.ggplot <- function(x, newpage = is.null(vp), vp = NULL, ...) { set_last_plot(x) if (newpage) grid.newpage() # Record dependency on 'ggplot2' on the display list # (AFTER grid.newpage()) grDevices::recordGraphics( requireNamespace("ggplot2", quietly = TRUE), list(), getNamespace("ggplot2") ) data <- ggplot_build(x) gtable <- ggplot_gtable(data) if (is.null(vp)) { grid.draw(gtable) } else { if (is.character(vp)) seekViewport(vp) else pushViewport(vp) grid.draw(gtable) upViewport() } invisible(data) } #' @rdname print.ggplot #' @method plot ggplot #' @export plot.ggplot <- print.ggplot ggplot2/R/coord-polar.r0000644000175100001440000002235112567665533014500 0ustar hornikusers#' Polar coordinates. #' #' The polar coordinate system is most commonly used for pie charts, which #' are a stacked bar chart in polar coordinates. #' #' @param theta variable to map angle to (\code{x} or \code{y}) #' @param start offset of starting point from 12 o'clock in radians #' @param direction 1, clockwise; -1, anticlockwise #' @export #' @examples #' # NOTE: Use these plots with caution - polar coordinates has #' # major perceptual problems. The main point of these examples is #' # to demonstrate how these common plots can be described in the #' # grammar. Use with EXTREME caution. #' #' #' # A pie chart = stacked bar chart + polar coordinates #' pie <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) + #' geom_bar(width = 1) #' pie + coord_polar(theta = "y") #' #' \donttest{ #' #' # A coxcomb plot = bar chart + polar coordinates #' cxc <- ggplot(mtcars, aes(x = factor(cyl))) + #' geom_bar(width = 1, colour = "black") #' cxc + coord_polar() #' # A new type of plot? #' cxc + coord_polar(theta = "y") #' #' # The bullseye chart #' pie + coord_polar() #' #' # Hadley's favourite pie chart #' df <- data.frame( #' variable = c("does not resemble", "resembles"), #' value = c(20, 80) #' ) #' ggplot(df, aes(x = "", y = value, fill = variable)) + #' geom_bar(width = 1, stat = "identity") + #' scale_fill_manual(values = c("red", "yellow")) + #' coord_polar("y", start = pi / 3) + #' labs(title = "Pac man") #' #' # Windrose + doughnut plot #' if (require("ggplot2movies")) { #' movies$rrating <- cut_interval(movies$rating, length = 1) #' movies$budgetq <- cut_number(movies$budget, 4) #' #' doh <- ggplot(movies, aes(x = rrating, fill = budgetq)) #' #' # Wind rose #' doh + geom_bar(width = 1) + coord_polar() #' # Race track plot #' doh + geom_bar(width = 0.9, position = "fill") + coord_polar(theta = "y") #' } #' } coord_polar <- function(theta = "x", start = 0, direction = 1) { theta <- match.arg(theta, c("x", "y")) r <- if (theta == "x") "y" else "x" ggproto(NULL, CoordPolar, theta = theta, r = r, start = start, direction = sign(direction) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordPolar <- ggproto("CoordPolar", Coord, aspect = function(details) 1, distance = function(self, x, y, details) { if (self$theta == "x") { r <- rescale(y, from = details$r.range) theta <- theta_rescale_no_clip(self, x, details) } else { r <- rescale(x, from = details$r.range) theta <- theta_rescale_no_clip(self, y, details) } dist_polar(r, theta) }, range = function(self, scale_details) { setNames( list(scale_details$theta.range, scale_details$r.range), c(self$theta, self$r) ) }, train = function(self, scale_details) { ret <- list(x = list(), y = list()) for (n in c("x", "y")) { scale <- scale_details[[n]] limits <- self$limits[[n]] if (is.null(limits)) { if (self$theta == n) { expand <- expand_default(scale, c(0, 0.5), c(0, 0)) } else { expand <- expand_default(scale, c(0, 0), c(0, 0)) } range <- scale$dimension(expand) } else { range <- range(scale_transform(scale, limits)) } out <- scale$break_info(range) ret[[n]]$range <- out$range ret[[n]]$major <- out$major_source ret[[n]]$minor <- out$minor_source ret[[n]]$labels <- out$labels } details = list( x.range = ret$x$range, y.range = ret$y$range, x.major = ret$x$major, x.minor = ret$x$minor, x.labels = ret$x$labels, y.major = ret$y$major, y.minor = ret$y$minor, y.labels = ret$y$labels ) if (self$theta == "y") { names(details) <- gsub("x\\.", "r.", names(details)) names(details) <- gsub("y\\.", "theta.", names(details)) } else { names(details) <- gsub("x\\.", "theta.", names(details)) names(details) <- gsub("y\\.", "r.", names(details)) } details }, transform = function(self, data, scale_details) { data <- rename_data(self, data) data$r <- r_rescale(self, data$r, scale_details) data$theta <- theta_rescale(self, data$theta, scale_details) data$x <- data$r * sin(data$theta) + 0.5 data$y <- data$r * cos(data$theta) + 0.5 data }, render_axis_v = function(self, scale_details, theme) { x <- r_rescale(self, scale_details$r.major, scale_details) + 0.5 guide_axis(x, scale_details$r.labels, "left", theme) }, render_axis_h = function(scale_details, theme) { guide_axis(NA, "", "bottom", theme) }, render_bg = function(self, scale_details, theme) { scale_details <- rename_data(self, scale_details) theta <- if (length(scale_details$theta.major) > 0) theta_rescale(self, scale_details$theta.major, scale_details) thetamin <- if (length(scale_details$theta.minor) > 0) theta_rescale(self, scale_details$theta.minor, scale_details) thetafine <- seq(0, 2 * pi, length.out = 100) rfine <- c(r_rescale(self, scale_details$r.major, scale_details), 0.45) # This gets the proper theme element for theta and r grid lines: # panel.grid.major.x or .y majortheta <- paste("panel.grid.major.", self$theta, sep = "") minortheta <- paste("panel.grid.minor.", self$theta, sep = "") majorr <- paste("panel.grid.major.", self$r, sep = "") ggname("grill", grobTree( element_render(theme, "panel.background"), if (length(theta) > 0) element_render( theme, majortheta, name = "angle", x = c(rbind(0, 0.45 * sin(theta))) + 0.5, y = c(rbind(0, 0.45 * cos(theta))) + 0.5, id.lengths = rep(2, length(theta)), default.units = "native" ), if (length(thetamin) > 0) element_render( theme, minortheta, name = "angle", x = c(rbind(0, 0.45 * sin(thetamin))) + 0.5, y = c(rbind(0, 0.45 * cos(thetamin))) + 0.5, id.lengths = rep(2, length(thetamin)), default.units = "native" ), element_render( theme, majorr, name = "radius", x = rep(rfine, each = length(thetafine)) * sin(thetafine) + 0.5, y = rep(rfine, each = length(thetafine)) * cos(thetafine) + 0.5, id.lengths = rep(length(thetafine), length(rfine)), default.units = "native" ) )) }, render_fg = function(self, scale_details, theme) { if (is.null(scale_details$theta.major)) { return(element_render(theme, "panel.border")) } theta <- theta_rescale(self, scale_details$theta.major, scale_details) labels <- scale_details$theta.labels # Combine the two ends of the scale if they are close theta <- theta[!is.na(theta)] ends_apart <- (theta[length(theta)] - theta[1]) %% (2 * pi) if (length(theta) > 0 && ends_apart < 0.05) { n <- length(labels) if (is.expression(labels)) { combined <- substitute(paste(a, "/", b), list(a = labels[[1]], b = labels[[n]])) } else { combined <- paste(labels[1], labels[n], sep = "/") } labels[[n]] <- combined labels <- labels[-1] theta <- theta[-1] } grobTree( if (length(labels) > 0) element_render( theme, "axis.text.x", labels, 0.45 * sin(theta) + 0.5, 0.45 * cos(theta) + 0.5, hjust = 0.5, vjust = 0.5, default.units = "native" ), element_render(theme, "panel.border") ) }, render_fg = function(self, scale_details, theme) { if (is.null(scale_details$theta.major)) { return(element_render(theme, "panel.border")) } theta <- theta_rescale(self, scale_details$theta.major, scale_details) labels <- scale_details$theta.labels # Combine the two ends of the scale if they are close theta <- theta[!is.na(theta)] ends_apart <- (theta[length(theta)] - theta[1]) %% (2*pi) if (length(theta) > 0 && ends_apart < 0.05) { n <- length(labels) if (is.expression(labels)) { combined <- substitute(paste(a, "/", b), list(a = labels[[1]], b = labels[[n]])) } else { combined <- paste(labels[1], labels[n], sep = "/") } labels[[n]] <- combined labels <- labels[-1] theta <- theta[-1] } grobTree( if (length(labels) > 0) element_render( theme, "axis.text.x", labels, unit(0.45 * sin(theta) + 0.5, "native"), unit(0.45 * cos(theta) + 0.5, "native"), hjust = 0.5, vjust = 0.5 ), element_render(theme, "panel.border") ) }, labels = function(self, scale_details) { if (self$theta == "y") { list(x = scale_details$y, y = scale_details$x) } else { scale_details } } ) rename_data <- function(coord, data) { if (coord$theta == "y") { plyr::rename(data, c("y" = "theta", "x" = "r"), warn_missing = FALSE) } else { plyr::rename(data, c("y" = "r", "x" = "theta"), warn_missing = FALSE) } } theta_rescale_no_clip <- function(coord, x, scale_details) { rotate <- function(x) (x + coord$start) * coord$direction rotate(rescale(x, c(0, 2 * pi), scale_details$theta.range)) } theta_rescale <- function(coord, x, scale_details) { rotate <- function(x) (x + coord$start) %% (2 * pi) * coord$direction rotate(rescale(x, c(0, 2 * pi), scale_details$theta.range)) } r_rescale <- function(coord, x, scale_details) { rescale(x, c(0, 0.4), scale_details$r.range) } ggplot2/R/geom-tile.r0000644000175100001440000000661312607211572014125 0ustar hornikusers#' Draw rectangles. #' #' \code{geom_rect} and \code{geom_tile} do the same thing, but are #' parameterised differently. \code{geom_rect} uses the locations of the four #' corners (\code{xmin}, \code{xmax}, \code{ymin} and \code{ymax}). #' \code{geom_tile} uses the center of the tile and its size (\code{x}, #' \code{y}, \code{width}, \code{height}). \code{geom_raster} is a high #' performance special case for when all the tiles are the same size. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "tile")} #' #' @inheritParams geom_point #' @export #' @examples #' # The most common use for rectangles is to draw a surface. You always want #' # to use geom_raster here because it's so much faster, and produces #' # smaller output when saving to PDF #' ggplot(faithfuld, aes(waiting, eruptions)) + #' geom_raster(aes(fill = density)) #' #' # Interpolation smooths the surface & is most helpful when rendering images. #' ggplot(faithfuld, aes(waiting, eruptions)) + #' geom_raster(aes(fill = density), interpolate = TRUE) #' #' # If you want to draw arbitrary rectangles, use geom_tile() or geom_rect() #' df <- data.frame( #' x = rep(c(2, 5, 7, 9, 12), 2), #' y = rep(c(1, 2), each = 5), #' z = factor(rep(1:5, each = 2)), #' w = rep(diff(c(0, 4, 6, 8, 10, 14)), 2) #' ) #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = z)) #' ggplot(df, aes(x, y)) + #' geom_tile(aes(fill = z, width = w), colour = "grey50") #' ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) + #' geom_rect(aes(fill = z, width = w), colour = "grey50") #' #' \donttest{ #' # Justification controls where the cells are anchored #' df <- expand.grid(x = 0:5, y = 0:5) #' df$z <- runif(nrow(df)) #' # default is compatible with geom_tile() #' ggplot(df, aes(x, y, fill = z)) + geom_raster() #' # zero padding #' ggplot(df, aes(x, y, fill = z)) + geom_raster(hjust = 0, vjust = 0) #' #' # Inspired by the image-density plots of Ken Knoblauch #' cars <- ggplot(mtcars, aes(mpg, factor(cyl))) #' cars + geom_point() #' cars + stat_bin2d(aes(fill = ..count..), binwidth = c(3,1)) #' cars + stat_bin2d(aes(fill = ..density..), binwidth = c(3,1)) #' #' cars + stat_density(aes(fill = ..density..), geom = "raster", position = "identity") #' cars + stat_density(aes(fill = ..count..), geom = "raster", position = "identity") #' } geom_tile <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomTile, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-rect.r GeomTile <- ggproto("GeomTile", GeomRect, setup_data = function(data, params) { data$width <- data$width %||% params$width %||% resolution(data$x, FALSE) data$height <- data$height %||% params$height %||% resolution(data$y, FALSE) transform(data, xmin = x - width / 2, xmax = x + width / 2, width = NULL, ymin = y - height / 2, ymax = y + height / 2, height = NULL ) }, default_aes = aes(fill = "grey20", colour = NA, size = 0.1, linetype = 1, alpha = NA), required_aes = c("x", "y"), draw_key = draw_key_rect ) ggplot2/R/geom-contour.r0000644000175100001440000000354612633013511014653 0ustar hornikusers#' Display contours of a 3d surface in 2d. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "contour")} #' #' @inheritParams geom_point #' @inheritParams geom_path #' @seealso \code{\link{geom_density_2d}}: 2d density contours #' @export #' @export #' @examples #' #' # Basic plot #' v <- ggplot(faithfuld, aes(waiting, eruptions, z = density)) #' v + geom_contour() #' #' # Or compute from raw data #' ggplot(faithful, aes(waiting, eruptions)) + #' geom_density_2d() #' #' \donttest{ #' # Setting bins creates evenly spaced contours in the range of the data #' v + geom_contour(bins = 2) #' v + geom_contour(bins = 10) #' #' # Setting binwidth does the same thing, parameterised by the distance #' # between contours #' v + geom_contour(binwidth = 0.01) #' v + geom_contour(binwidth = 0.001) #' #' # Other parameters #' v + geom_contour(aes(colour = ..level..)) #' v + geom_contour(colour = "red") #' v + geom_raster(aes(fill = density)) + #' geom_contour(colour = "white") #' } geom_contour <- function(mapping = NULL, data = NULL, stat = "contour", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomContour, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomContour <- ggproto("GeomContour", GeomPath, default_aes = aes(weight = 1, colour = "#3366FF", size = 0.5, linetype = 1, alpha = NA) ) ggplot2/R/geom-label.R0000644000175100001440000000770212607211016014200 0ustar hornikusers#' @export #' @rdname geom_text #' @param label.padding Amount of padding around label. Defaults to 0.25 lines. #' @param label.r Radius of rounded corners. Defaults to 0.15 lines. #' @param label.size Size of label border, in mm. geom_label <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", parse = FALSE, ..., nudge_x = 0, nudge_y = 0, label.padding = unit(0.25, "lines"), label.r = unit(0.15, "lines"), label.size = 0.25, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { if (!missing(nudge_x) || !missing(nudge_y)) { if (!missing(position)) { stop("Specify either `position` or `nudge_x`/`nudge_y`", call. = FALSE) } position <- position_nudge(nudge_x, nudge_y) } layer( data = data, mapping = mapping, stat = stat, geom = GeomLabel, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( parse = parse, label.padding = label.padding, label.r = label.r, label.size = label.size, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomLabel <- ggproto("GeomLabel", Geom, required_aes = c("x", "y", "label"), default_aes = aes( colour = "black", fill = "white", size = 3.88, angle = 0, hjust = 0.5, vjust = 0.5, alpha = NA, family = "", fontface = 1, lineheight = 1.2 ), draw_panel = function(self, data, panel_scales, coord, parse = FALSE, na.rm = FALSE, label.padding = unit(0.25, "lines"), label.r = unit(0.15, "lines"), label.size = 0.25) { lab <- data$label if (parse) { lab <- parse(text = as.character(lab)) } data <- coord$transform(data, panel_scales) if (is.character(data$vjust)) { data$vjust <- compute_just(data$vjust, data$y) } if (is.character(data$hjust)) { data$hjust <- compute_just(data$hjust, data$x) } grobs <- lapply(1:nrow(data), function(i) { row <- data[i, , drop = FALSE] labelGrob(lab[i], x = unit(row$x, "native"), y = unit(row$y, "native"), just = c(row$hjust, row$vjust), padding = label.padding, r = label.r, text.gp = gpar( col = row$colour, fontsize = row$size * .pt, fontfamily = row$family, fontface = row$fontface, lineheight = row$lineheight ), rect.gp = gpar( col = row$colour, fill = alpha(row$fill, row$alpha), lwd = label.size * .pt ) ) }) class(grobs) <- "gList" ggname("geom_label", grobTree(children = grobs)) }, draw_key = draw_key_label ) labelGrob <- function(label, x = unit(0.5, "npc"), y = unit(0.5, "npc"), just = "center", padding = unit(0.25, "lines"), r = unit(0.1, "snpc"), default.units = "npc", name = NULL, text.gp = gpar(), rect.gp = gpar(fill = "white"), vp = NULL) { stopifnot(length(label) == 1) if (!is.unit(x)) x <- unit(x, default.units) if (!is.unit(y)) y <- unit(y, default.units) gTree(label = label, x = x, y = y, just = just, padding = padding, r = r, name = name, text.gp = text.gp, rect.gp = rect.gp, vp = vp, cl = "labelgrob") } #' @export makeContent.labelgrob <- function(x) { hj <- resolveHJust(x$just, NULL) vj <- resolveVJust(x$just, NULL) t <- textGrob( x$label, x$x + 2 * (0.5 - hj) * x$padding, x$y + 2 * (0.5 - vj) * x$padding, just = c(hj, vj), gp = x$text.gp, name = "text" ) r <- roundrectGrob(x$x, x$y, default.units = "native", width = grobWidth(t) + 2 * x$padding, height = grobHeight(t) + 2 * x$padding, just = c(hj, vj), r = x$r, gp = x$rect.gp, name = "box" ) setChildren(x, gList(r, t)) } ggplot2/R/stat-count.r0000644000175100001440000000362112620166007014335 0ustar hornikusers#' \code{stat_count} counts the number of cases at each x position. If you want #' to bin the data in ranges, you should use \code{\link{stat_bin}} instead. #' #' @section Computed variables: #' \describe{ #' \item{count}{number of points in bin} #' \item{prop}{groupwise proportion} #' } #' @seealso \code{\link{stat_bin}}, which bins data in ranges and counts the #' cases in each range. It differs from \code{stat_count}, which counts the #' number of cases at each x position (without binning into ranges). #' \code{\link{stat_bin}} requires continuous x data, whereas #' \code{stat_count} can be used for both discrete and continuous x data. #' #' @export #' @rdname geom_bar stat_count <- function(mapping = NULL, data = NULL, geom = "bar", position = "stack", width = NULL, ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = StatCount, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, width = width, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include stat-.r StatCount <- ggproto("StatCount", Stat, required_aes = "x", default_aes = aes(y = ..count..), setup_params = function(data, params) { if (!is.null(data$y) || !is.null(params$y)) { stop("stat_count() must not be used with a y aesthetic.", call. = FALSE) } params }, compute_group = function(self, data, scales, width = NULL) { x <- data$x weight <- data$weight %||% rep(1, length(x)) width <- width %||% (resolution(x) * 0.9) count <- as.numeric(tapply(weight, x, sum, na.rm = TRUE)) count[is.na(count)] <- 0 data.frame( count = count, prop = count / sum(abs(count)), x = sort(unique(x)), width = width ) } ) ggplot2/R/annotation.r0000644000175100001440000000474212607215012014407 0ustar hornikusers#' Create an annotation layer. #' #' This function adds geoms to a plot. Unlike typical a geom function, #' the properties of the geoms are not mapped from variables of a data frame, #' but are instead passed in as vectors. This is useful for adding small annotations #' (such as text labels) or if you have your data in vectors, and for some #' reason don't want to put them in a data frame. #' #' Note that all position aesthetics are scaled (i.e. they will expand the #' limits of the plot so they are visible), but all other aesthetics are #' set. This means that layers created with this function will never #' affect the legend. #' #' @param geom name of geom to use for annotation #' @param x,y,xmin,ymin,xmax,ymax,xend,yend positioning aesthetics - #' you must specify at least one of these. #' @param ... other aesthetics. These are not scaled so you can do (e.g.) #' \code{colour = "red"} to get a red point. #' @inheritParams geom_point #' @export #' @examples #' p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() #' p + annotate("text", x = 4, y = 25, label = "Some text") #' p + annotate("text", x = 2:5, y = 25, label = "Some text") #' p + annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21, #' alpha = .2) #' p + annotate("segment", x = 2.5, xend = 4, y = 15, yend = 25, #' colour = "blue") #' p + annotate("pointrange", x = 3.5, y = 20, ymin = 12, ymax = 28, #' colour = "red", size = 1.5) #' #' p + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2")) annotate <- function(geom, x = NULL, y = NULL, xmin = NULL, xmax = NULL, ymin = NULL, ymax = NULL, xend = NULL, yend = NULL, ..., na.rm = FALSE) { position <- compact(list( x = x, xmin = xmin, xmax = xmax, xend = xend, y = y, ymin = ymin, ymax = ymax, yend = yend )) aesthetics <- c(position, list(...)) # Check that all aesthetic have compatible lengths lengths <- vapply(aesthetics, length, integer(1)) unequal <- length(unique(setdiff(lengths, 1L))) > 1L if (unequal) { bad <- lengths != 1L details <- paste(names(aesthetics)[bad], " (", lengths[bad], ")", sep = "", collapse = ", ") stop("Unequal parameter lengths: ", details, call. = FALSE) } data <- data.frame(position) layer( geom = geom, params = list( na.rm = na.rm, ... ), stat = StatIdentity, position = PositionIdentity, data = data, mapping = aes_all(names(data)), inherit.aes = FALSE, show.legend = FALSE ) } ggplot2/R/stat-density.r0000644000175100001440000000504512607215012014662 0ustar hornikusers#' @param adjust see \code{\link{density}} for details #' @param kernel kernel used for density estimation, see #' \code{\link{density}} for details #' @param trim This parameter only matters if you are displaying multiple #' densities in one plot. If \code{FALSE}, the default, each density is #' computed on the full range of the data. If \code{TRUE}, each density #' is computed over the range of that group: this typically means the #' estimated x values will not line-up, and hence you won't be able to #' stack density values. #' @section Computed variables: #' \describe{ #' \item{density}{density estimate} #' \item{count}{density * number of points - useful for stacked density #' plots} #' \item{scaled}{density estimate, scaled to maximum of 1} #' } #' @export #' @rdname geom_density stat_density <- function(mapping = NULL, data = NULL, geom = "area", position = "stack", adjust = 1, kernel = "gaussian", trim = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatDensity, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( adjust = adjust, kernel = kernel, trim = trim, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatDensity <- ggproto("StatDensity", Stat, required_aes = "x", default_aes = aes(y = ..density.., fill = NA), compute_group = function(data, scales, adjust = 1, kernel = "gaussian", trim = FALSE, na.rm = FALSE) { if (trim) { range <- range(data$x, na.rm = TRUE) } else { range <- scales$x$dimension() } compute_density(data$x, data$weight, from = range[1], to = range[2], adjust = adjust, kernel = kernel) } ) compute_density <- function(x, w, from, to, bw = "nrd0", adjust = 1, kernel = "gaussian") { n <- length(x) if (is.null(w)) { w <- rep(1 / n, n) } # if less than 3 points, spread density evenly over points if (n < 3) { return(data.frame( x = x, density = w / sum(w), scaled = w / max(w), count = 1, n = n )) } dens <- stats::density(x, weights = w, bw = bw, adjust = adjust, kernel = kernel, from = from, to = to) data.frame( x = dens$x, density = dens$y, scaled = dens$y / max(dens$y, na.rm = TRUE), count = dens$y * n, n = n ) } ggplot2/R/fortify-spatial.r0000644000175100001440000000545112556126235015363 0ustar hornikusers#' Fortify method for classes from the sp package. #' #' To figure out the correct variable name for region, inspect #' \code{as.data.frame(model)}. #' #' @param model \code{SpatialPolygonsDataFrame} to convert into a dataframe. #' @param data not used by this method #' @param region name of variable used to split up regions #' @param ... not used by this method #' @name fortify.sp #' @examples #' if (require("maptools")) { #' sids <- system.file("shapes/sids.shp", package="maptools") #' nc1 <- readShapePoly(sids, #' proj4string = CRS("+proj=longlat +datum=NAD27")) #' nc1_df <- fortify(nc1) #' } NULL #' @rdname fortify.sp #' @export #' @method fortify SpatialPolygonsDataFrame fortify.SpatialPolygonsDataFrame <- function(model, data, region = NULL, ...) { attr <- as.data.frame(model) # If not specified, split into regions based on polygons if (is.null(region)) { coords <- plyr::ldply(model@polygons,fortify) message("Regions defined for each Polygons") } else { cp <- sp::polygons(model) # Union together all polygons that make up a region unioned <- maptools::unionSpatialPolygons(cp, attr[, region]) coords <- fortify(unioned) coords$order <- 1:nrow(coords) } coords } #' @rdname fortify.sp #' @export #' @method fortify SpatialPolygons fortify.SpatialPolygons <- function(model, data, ...) { plyr::ldply(model@polygons, fortify) } #' @rdname fortify.sp #' @export #' @method fortify Polygons fortify.Polygons <- function(model, data, ...) { subpolys <- model@Polygons pieces <- plyr::ldply(seq_along(subpolys), function(i) { df <- fortify(subpolys[[model@plotOrder[i]]]) df$piece <- i df }) pieces$order <- 1:nrow(pieces) pieces$id <- model@ID pieces$piece <- factor(pieces$piece) pieces$group <- interaction(pieces$id, pieces$piece) pieces } #' @rdname fortify.sp #' @export #' @method fortify Polygon fortify.Polygon <- function(model, data, ...) { df <- as.data.frame(model@coords) names(df) <- c("long", "lat") df$order <- 1:nrow(df) df$hole <- model@hole df } #' @rdname fortify.sp #' @export #' @method fortify SpatialLinesDataFrame fortify.SpatialLinesDataFrame <- function(model, data, ...) { plyr::ldply(model@lines, fortify) } #' @rdname fortify.sp #' @export #' @method fortify Lines fortify.Lines <- function(model, data, ...) { lines <- model@Lines pieces <- plyr::ldply(seq_along(lines), function(i) { df <- fortify(lines[[i]]) df$piece <- i df }) pieces$order <- 1:nrow(pieces) pieces$id <- model@ID pieces$piece <- factor(pieces$piece) pieces$group <- interaction(pieces$id, pieces$piece) pieces } #' @rdname fortify.sp #' @export #' @method fortify Line fortify.Line <- function(model, data, ...) { df <- as.data.frame(model@coords) names(df) <- c("long", "lat") df$order <- 1:nrow(df) df } ggplot2/R/stat-summary-hex.r0000644000175100001440000000402512607207564015474 0ustar hornikusers#' @export #' @rdname stat_summary_2d #' @inheritParams stat_bin_hex stat_summary_hex <- function(mapping = NULL, data = NULL, geom = "hex", position = "identity", bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatSummaryHex, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, drop = drop, fun = fun, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummaryHex <- ggproto("StatSummaryHex", Stat, default_aes = aes(fill = ..value..), required_aes = c("x", "y", "z"), compute_group = function(data, scales, binwidth = NULL, bins = 30, drop = TRUE, fun = "mean", fun.args = list()) { if (is.null(binwidth)) { binwidth <- c( diff(scales$x$dimension()) / bins, diff(scales$y$dimension()) / bins ) } # Convert binwidths into bounds + nbins x <- data$x y <- data$y xbnds <- c( plyr::round_any(min(x), binwidth[1], floor) - 1e-6, plyr::round_any(max(x), binwidth[1], ceiling) + 1e-6 ) xbins <- diff(xbnds) / binwidth[1] ybnds <- c( plyr::round_any(min(y), binwidth[1], floor) - 1e-6, plyr::round_any(max(y), binwidth[2], ceiling) + 1e-6 ) ybins <- diff(ybnds) / binwidth[2] # Call hexbin hb <- hexbin::hexbin( x, xbnds = xbnds, xbins = xbins, y, ybnds = ybnds, shape = ybins / xbins, IDs = TRUE ) value <- do.call(tapply, c(list(quote(data$z), quote(hb@cID), quote(fun)), fun.args)) # Convert to data frame ret <- data.frame(hexbin::hcell2xy(hb), value) if (drop) ret <- stats::na.omit(ret) ret } ) ggplot2/R/geom-hex.r0000644000175100001440000000472612607210644013756 0ustar hornikusers#' Hexagon binning. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "hex")} #' #' @seealso \code{\link{stat_bin2d}} for rectangular binning #' @param geom,stat Override the default connection between \code{geom_hex} and #' \code{stat_binhex.} #' @export #' @inheritParams geom_point #' @export #' @examples #' d <- ggplot(diamonds, aes(carat, price)) #' d + geom_hex() #' #' \donttest{ #' # You can control the size of the bins by specifying the number of #' # bins in each direction: #' d + geom_hex(bins = 10) #' d + geom_hex(bins = 30) #' #' # Or by specifying the width of the bins #' d + geom_hex(binwidth = c(1, 1000)) #' d + geom_hex(binwidth = c(.1, 500)) #' } geom_hex <- function(mapping = NULL, data = NULL, stat = "binhex", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomHex, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomHex <- ggproto("GeomHex", Geom, draw_group = function(data, panel_scales, coord) { if (!inherits(coord, "CoordCartesian")) { stop("geom_hex() only works with Cartesian coordinates", call. = FALSE) } coord <- coord$transform(data, panel_scales) ggname("geom_hex", hexGrob( coord$x, coord$y, colour = coord$colour, fill = alpha(coord$fill, coord$alpha) )) }, required_aes = c("x", "y"), default_aes = aes(colour = NA, fill = "grey50", size = 0.5, alpha = NA), draw_key = draw_key_polygon ) # Draw hexagon grob # Modified from code by Nicholas Lewin-Koh and Martin Maechler # # @param x positions of hex centres # @param y positions # @param vector of hex sizes # @param border colour # @param fill colour # @keyword internal hexGrob <- function(x, y, size = rep(1, length(x)), colour = "grey50", fill = "grey90") { stopifnot(length(y) == length(x)) dx <- resolution(x, FALSE) dy <- resolution(y, FALSE) / sqrt(3) / 2 * 1.15 hexC <- hexbin::hexcoords(dx, dy, n = 1) n <- length(x) polygonGrob( x = rep.int(hexC$x, n) * rep(size, each = 6) + rep(x, each = 6), y = rep.int(hexC$y, n) * rep(size, each = 6) + rep(y, each = 6), default.units = "native", id.lengths = rep(6, n), gp = gpar(col = colour, fill = fill) ) } ggplot2/R/scale-linetype.r0000644000175100001440000000161112556131101015142 0ustar hornikusers#' Scale for line patterns. #' #' Default line types based on a set supplied by Richard Pearson, #' University of Manchester. Line types can not be mapped to continuous #' values. #' #' @inheritParams scale_x_discrete #' @param na.value The linetype to use for \code{NA} values. #' @rdname scale_linetype #' @export #' @examples #' base <- ggplot(economics_long, aes(date, value01)) #' base + geom_line(aes(group = variable)) #' base + geom_line(aes(linetype = variable)) #' #' # See scale_manual for more flexibility scale_linetype <- function(..., na.value = "blank") { discrete_scale("linetype", "linetype_d", linetype_pal(), na.value = na.value, ...) } #' @rdname scale_linetype #' @export scale_linetype_continuous <- function(...) { stop("A continuous variable can not be mapped to linetype", call. = FALSE) } #' @rdname scale_linetype #' @export scale_linetype_discrete <- scale_linetype ggplot2/R/geom-blank.r0000644000175100001440000000302612607210173014246 0ustar hornikusers#' Blank, draws nothing. #' #' The blank geom draws nothing, but can be a useful way of ensuring common #' scales between different plots. #' #' @export #' @inheritParams geom_point #' @examples #' ggplot(mtcars, aes(wt, mpg)) + geom_blank() #' # Nothing to see here! #' #' # Take the following scatter plot #' a <- ggplot(mtcars, aes(x = wt, y = mpg), . ~ cyl) + geom_point() #' # Add to that some lines with geom_abline() #' df <- data.frame(a = rnorm(10, 25), b = rnorm(10, 0)) #' a + geom_abline(aes(intercept = a, slope = b), data = df) #' # Suppose you then wanted to remove the geom_point layer #' # If you just remove geom_point, you will get an error #' b <- ggplot(mtcars, aes(x = wt, y = mpg)) #' \dontrun{b + geom_abline(aes(intercept = a, slope = b), data = df)} #' # Switching to geom_blank() gets the desired plot #' c <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_blank() #' c + geom_abline(aes(intercept = a, slope = b), data = df) geom_blank <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomBlank, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(...) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomBlank <- ggproto("GeomBlank", Geom, default_aes = aes(), handle_na = function(data, params) data, draw_panel = function(...) nullGrob() ) ggplot2/R/legend-draw.r0000644000175100001440000001063112620170407014423 0ustar hornikusers#' Key drawing functions #' #' Each Geom has an associated function that draws the key when the geom needs #' to be displayed in a legend. These are the options built into ggplot2. #' #' @return A grid grob. #' @param data A single row data frame containing the scaled aesthetics to #' display in this key #' @param params A list of additional parameters supplied to the geom. #' @param size Width and height of key in mm. #' @keywords internal #' @name draw_key NULL #' @export #' @rdname draw_key draw_key_point <- function(data, params, size) { pointsGrob(0.5, 0.5, pch = data$shape, gp = gpar( col = alpha(data$colour, data$alpha), fill = alpha(data$fill, data$alpha), fontsize = data$size * .pt + data$stroke * .stroke / 2, lwd = data$stroke * .stroke / 2 ) ) } #' @export #' @rdname draw_key draw_key_abline <- function(data, params, size) { segmentsGrob(0, 0, 1, 1, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ) ) } #' @export #' @rdname draw_key draw_key_rect <- function(data, params, size) { rectGrob(gp = gpar( col = NA, fill = alpha(data$fill, data$alpha), lty = data$linetype )) } #' @export #' @rdname draw_key draw_key_polygon <- function(data, params, size) { lwd <- min(data$size, min(size) / 4) rectGrob( width = unit(1, "npc") - unit(lwd, "mm"), height = unit(1, "npc") - unit(lwd, "mm"), gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lty = data$linetype, lwd = lwd * .pt, linejoin = "mitre" )) } #' @export #' @rdname draw_key draw_key_blank <- function(data, params, size) { zeroGrob() } #' @export #' @rdname draw_key draw_key_boxplot <- function(data, params, size) { grobTree( linesGrob(0.5, c(0.1, 0.25)), linesGrob(0.5, c(0.75, 0.9)), rectGrob(height = 0.5, width = 0.75), linesGrob(c(0.125, 0.875), 0.5), gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt, lty = data$linetype ) ) } #' @export #' @rdname draw_key draw_key_crossbar <- function(data, params, size) { grobTree( rectGrob(height = 0.5, width = 0.75), linesGrob(c(0.125, 0.875), 0.5), gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt, lty = data$linetype ) ) } #' @export #' @rdname draw_key draw_key_path <- function(data, params, size) { segmentsGrob(0.1, 0.5, 0.9, 0.5, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ), arrow = params$arrow ) } #' @export #' @rdname draw_key draw_key_vpath <- function(data, params, size) { segmentsGrob(0.5, 0.1, 0.5, 0.9, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ), arrow = params$arrow ) } #' @export #' @rdname draw_key draw_key_dotplot <- function(data, params, size) { pointsGrob(0.5, 0.5, size = unit(.5, "npc"), pch = 21, gp = gpar( col = alpha(data$colour, data$alpha), fill = alpha(data$fill, data$alpha) ) ) } #' @export #' @rdname draw_key draw_key_pointrange <- function(data, params, size) { grobTree( draw_key_vpath(data, params, size), draw_key_point(transform(data, size = data$size * 4), params) ) } #' @export #' @rdname draw_key draw_key_smooth <- function(data, params, size) { data$fill <- alpha(data$fill, data$alpha) data$alpha <- 1 grobTree( if (isTRUE(params$se)) rectGrob(gp = gpar(col = NA, fill = data$fill)), draw_key_path(data, params) ) } #' @export #' @rdname draw_key draw_key_text <- function(data, params, size) { textGrob("a", 0.5, 0.5, rot = data$angle, gp = gpar( col = alpha(data$colour, data$alpha), fontfamily = data$family, fontface = data$fontface, fontsize = data$size * .pt ) ) } #' @export #' @rdname draw_key draw_key_label <- function(data, params, size) { grobTree( draw_key_rect(data, list()), draw_key_text(data, list()) ) } #' @export #' @rdname draw_key draw_key_vline <- function(data, params, size) { segmentsGrob(0.5, 0, 0.5, 1, gp = gpar( col = alpha(data$colour, data$alpha), lwd = data$size * .pt, lty = data$linetype, lineend = "butt" ) ) } ggplot2/R/guides-.r0000644000175100001440000002225712607023433013577 0ustar hornikusers#' Set guides for each scale. #' #' Guides for each scale can be set in call of \code{scale_*} with argument #' \code{guide}, or in \code{guides}. #' #' @param ... List of scale guide pairs #' @return A list containing the mapping between scale and guide. #' @export #' @family guides #' @examples #' \donttest{ #' # ggplot object #' #' dat <- data.frame(x = 1:5, y = 1:5, p = 1:5, q = factor(1:5), #' r = factor(1:5)) #' p <- ggplot(dat, aes(x, y, colour = p, size = q, shape = r)) + geom_point() #' #' # without guide specification #' p #' #' # Show colorbar guide for colour. #' # All these examples below have a same effect. #' #' p + guides(colour = "colorbar", size = "legend", shape = "legend") #' p + guides(colour = guide_colorbar(), size = guide_legend(), #' shape = guide_legend()) #' p + #' scale_colour_continuous(guide = "colorbar") + #' scale_size_discrete(guide = "legend") + #' scale_shape(guide = "legend") #' #' # Remove some guides #' p + guides(colour = "none") #' p + guides(colour = "colorbar",size = "none") #' #' # Guides are integrated where possible #' #' p + guides(colour = guide_legend("title"), size = guide_legend("title"), #' shape = guide_legend("title")) #' # same as #' g <- guide_legend("title") #' p + guides(colour = g, size = g, shape = g) #' #' p + theme(legend.position = "bottom") #' #' # position of guides #' #' p + theme(legend.position = "bottom", legend.box = "horizontal") #' #' # Set order for multiple guides #' ggplot(mpg, aes(displ, cty)) + #' geom_point(aes(size = hwy, colour = cyl, shape = drv)) + #' guides( #' colour = guide_colourbar(order = 1), #' shape = guide_legend(order = 2), #' size = guide_legend(order = 3) #' ) #' } guides <- function(...) { args <- list(...) if (is.list(args[[1]]) && !inherits(args[[1]], "guide")) args <- args[[1]] args <- rename_aes(args) structure(args, class = "guides") } update_guides <- function(p, guides) { p <- plot_clone(p) p$guides <- defaults(guides, p$guides) p } # building guides - called in ggplotGrob (plot-render.r) # # the procedure is as follows: # # 1. guides_train() # train each scale and generate guide definition for all guides # here, one gdef for one scale # # 2. guides_merge() # merge gdefs if they are overlayed # number of gdefs may be less than number of scales # # 3. guides_geom() # process layer information and generate geom info. # # 4. guides_gengrob() # generate ggrob from each gdef # one ggrob for one gdef # # 5. guides_build() # arrange all ggrobs build_guides <- function(scales, layers, default_mapping, position, theme, guides, labels) { # set themes w.r.t. guides # should these theme$legend.XXX be renamed to theme$guide.XXX ? # by default, guide boxes are vertically aligned theme$legend.box <- theme$legend.box %||% "vertical" # size of key (also used for bar in colorbar guide) theme$legend.key.width <- theme$legend.key.width %||% theme$legend.key.size theme$legend.key.height <- theme$legend.key.height %||% theme$legend.key.size # by default, direction of each guide depends on the position of the guide. theme$legend.direction <- theme$legend.direction %||% if (length(position) == 1 && position %in% c("top", "bottom", "left", "right")) switch(position[1], top = , bottom = "horizontal", left = , right = "vertical") else "vertical" # justification of legend boxes theme$legend.box.just <- theme$legend.box.just %||% if (length(position) == 1 && position %in% c("top", "bottom", "left", "right")) switch(position, bottom = , top = c("center", "top"), left = , right = c("left", "top")) else c("center", "center") # scales -> data for guides gdefs <- guides_train(scales = scales, theme = theme, guides = guides, labels = labels) if (length(gdefs) == 0) return(zeroGrob()) # merge overlay guides gdefs <- guides_merge(gdefs) # process layer information gdefs <- guides_geom(gdefs, layers, default_mapping) if (length(gdefs) == 0) return(zeroGrob()) # generate grob of each guides ggrobs <- guides_gengrob(gdefs, theme) # build up guides grobs <- guides_build(ggrobs, theme) grobs } # validate guide object validate_guide <- function(guide) { # if guide is specified by character, then find the corresponding guide if (is.character(guide)) match.fun(paste("guide_", guide, sep = ""))() else if (inherits(guide, "guide")) guide else stop("Unknown guide: ", guide) } # train each scale in scales and generate the definition of guide guides_train <- function(scales, theme, guides, labels) { gdefs <- list() for (scale in scales$scales) { # guides(XXX) is stored in guides[[XXX]], # which is prior to scale_ZZZ(guide=XXX) # guide is determined in order of: # + guides(XXX) > + scale_ZZZ(guide=XXX) > default(i.e., legend) output <- scale$aesthetics[1] guide <- guides[[output]] %||% scale$guide # this should be changed to testing guide == "none" # scale$legend is backward compatibility # if guides(XXX=FALSE), then scale_ZZZ(guides=XXX) is discarded. if (guide == "none" || (is.logical(guide) && !guide)) next # check the validity of guide. # if guide is character, then find the guide object guide <- validate_guide(guide) # check the consistency of the guide and scale. if (guide$available_aes != "any" && !scale$aesthetics %in% guide$available_aes) stop("Guide '", guide$name, "' cannot be used for '", scale$aesthetics, "'.") guide$title <- guide$title %|W|% scale$name %|W|% labels[[output]] # direction of this grob guide$direction <- guide$direction %||% theme$legend.direction # each guide object trains scale within the object, # so Guides (i.e., the container of guides) need not to know about them guide <- guide_train(guide, scale) if (!is.null(guide)) gdefs[[length(gdefs) + 1]] <- guide } gdefs } # merge overlapped guides guides_merge <- function(gdefs) { # split gdefs based on hash, and apply Reduce (guide_merge) to each gdef group. gdefs <- lapply(gdefs, function(g) { if (g$order == 0) { order <- "99" } else { order <- sprintf("%02d", g$order) } g$hash <- paste(order, g$hash, sep = "_") g }) tapply(gdefs, sapply(gdefs, function(g)g$hash), function(gs)Reduce(guide_merge, gs)) } # process layer information guides_geom <- function(gdefs, layers, default_mapping) { compact(lapply(gdefs, guide_geom, layers, default_mapping)) } # generate grob from each gdef (needs to write this function?) guides_gengrob <- function(gdefs, theme) { # common drawing process for all guides gdefs <- lapply(gdefs, function(g) { g$title.position <- g$title.position %||% switch(g$direction, vertical = "top", horizontal = "left") if (!g$title.position %in% c("top", "bottom", "left", "right")) stop("title position \"", g$title.position, "\" is invalid") g }) lapply(gdefs, guide_gengrob, theme) } # build up all guide boxes into one guide-boxes. guides_build <- function(ggrobs, theme) { theme$legend.margin <- theme$legend.margin %||% unit(0.5, "lines") theme$legend.vmargin <- theme$legend.vmargin %||% theme$legend.margin theme$legend.hmargin <- theme$legend.hmargin %||% theme$legend.margin widths <- do.call("unit.c", lapply(ggrobs, function(g)sum(g$widths))) heights <- do.call("unit.c", lapply(ggrobs, function(g)sum(g$heights))) # Set the justification of each legend within the legend box # First value is xjust, second value is yjust just <- valid.just(theme$legend.box.just) xjust <- just[1] yjust <- just[2] # setting that is different for vertical and horizontal guide-boxes. if (theme$legend.box == "horizontal") { # Set justification for each legend for (i in seq_along(ggrobs)) { ggrobs[[i]] <- editGrob(ggrobs[[i]], vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust), height = heightDetails(ggrobs[[i]]))) } guides <- gtable_row(name = "guides", grobs = ggrobs, widths = widths, height = max(heights)) # add space between the guide-boxes guides <- gtable_add_col_space(guides, theme$legend.hmargin) } else if (theme$legend.box == "vertical") { # Set justification for each legend for (i in seq_along(ggrobs)) { ggrobs[[i]] <- editGrob(ggrobs[[i]], vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust), width = widthDetails(ggrobs[[i]]))) } guides <- gtable_col(name = "guides", grobs = ggrobs, width = max(widths), heights = heights) # add space between the guide-boxes guides <- gtable_add_row_space(guides, theme$legend.vmargin) } # add margins around the guide-boxes. guides <- gtable_add_cols(guides, theme$legend.hmargin, pos = 0) guides <- gtable_add_cols(guides, theme$legend.hmargin, pos = ncol(guides)) guides <- gtable_add_rows(guides, theme$legend.vmargin, pos = 0) guides <- gtable_add_rows(guides, theme$legend.vmargin, pos = nrow(guides)) guides$name <- "guide-box" guides } # S3 dispatches guide_train <- function(...) UseMethod("guide_train") guide_merge <- function(...) UseMethod("guide_merge") guide_geom <- function(...) UseMethod("guide_geom") guide_gengrob <- function(...) UseMethod("guide_gengrob") ggplot2/R/annotation-custom.r0000644000175100001440000000573612607214145015731 0ustar hornikusers#' @include geom-.r NULL #' Annotation: Custom grob. #' #' This is a special geom intended for use as static annotations #' that are the same in every panel. These annotations will not #' affect scales (i.e. the x and y axes will not grow to cover the range #' of the grob, and the grob will not be modified by any ggplot settings or mappings). #' #' Most useful for adding tables, inset plots, and other grid-based decorations. #' #' @param grob grob to display #' @param xmin,xmax x location (in data coordinates) giving horizontal #' location of raster #' @param ymin,ymax y location (in data coordinates) giving vertical #' location of raster #' @export #' @note \code{annotation_custom} expects the grob to fill the entire viewport #' defined by xmin, xmax, ymin, ymax. Grobs with a different (absolute) size #' will be center-justified in that region. #' Inf values can be used to fill the full plot panel (see examples). #' @examples #' # Dummy plot #' df <- data.frame(x = 1:10, y = 1:10) #' base <- ggplot(df, aes(x, y)) + #' geom_blank() + #' theme_bw() #' # Adding a table #' \dontrun{ #' if (require(gridExtra)) { #' base + annotation_custom(grob = tableGrob(head(iris[ ,1:3])), #' xmin = 3, xmax = 6, ymin = 2, ymax = 8) #' # full panel #' base + annotation_custom(grob = roundrectGrob(), #' xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) #' } #' } #' # Inset plot #' df2 <- data.frame(x = 1 , y = 1) #' g <- ggplotGrob(ggplot(df2, aes(x, y)) + #' geom_point() + #' theme(plot.background = element_rect(colour = "black"))) #' base + #' annotation_custom(grob = g, xmin = 1, xmax = 10, ymin = 8, ymax = 10) annotation_custom <- function(grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) { layer( data = NULL, stat = StatIdentity, position = PositionIdentity, geom = GeomCustomAnn, inherit.aes = TRUE, params = list( grob = grob, xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomCustomAnn <- ggproto("GeomCustomAnn", Geom, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, grob, xmin, xmax, ymin, ymax) { if (!inherits(coord, "CoordCartesian")) { stop("annotation_custom only works with Cartesian coordinates", call. = FALSE) } corners <- data.frame(x = c(xmin, xmax), y = c(ymin, ymax)) data <- coord$transform(corners, panel_scales) x_rng <- range(data$x, na.rm = TRUE) y_rng <- range(data$y, na.rm = TRUE) vp <- viewport(x = mean(x_rng), y = mean(y_rng), width = diff(x_rng), height = diff(y_rng), just = c("center","center")) editGrob(grob, vp = vp, name = paste(grob$name, annotation_id())) }, default_aes = aes_(xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) ) annotation_id <- local({ i <- 1 function() { i <<- i + 1 i } }) ggplot2/R/stat-bin.r0000644000175100001440000001166012607207100013752 0ustar hornikusers#' \code{stat_bin} is suitable only for continuous x data. If your x data is #' discrete, you probably want to use \code{\link{stat_count}}. #' #' @param binwidth Bin width to use. Defaults to 1/\code{bins} of the range of #' the data #' @param bins Number of bins. Overridden by \code{binwidth} or \code{breaks}. #' Defaults to 30 #' @param breaks Actual breaks to use. Overrides bin width, bin number and #' origin #' @param origin Origin of first bin #' @param width Width of bars when used with categorical data #' @param right If \code{TRUE}, right-closed, left-open, if \code{FALSE}, #' the default, right-open, left-closed. #' @param drop If TRUE, remove all bins with zero counts #' @section Computed variables: #' \describe{ #' \item{count}{number of points in bin} #' \item{density}{density of points in bin, scaled to integrate to 1} #' \item{ncount}{count, scaled to maximum of 1} #' \item{ndensity}{density, scaled to maximum of 1} #' } #' #' @seealso \code{\link{stat_count}}, which counts the number of cases at each x #' posotion, without binning. It is suitable for both discrete and continuous #' x data, whereas \link{stat_bin} is suitable only for continuous x data. #' @export #' @rdname geom_histogram stat_bin <- function(mapping = NULL, data = NULL, geom = "bar", position = "stack", width = 0.9, drop = FALSE, right = FALSE, binwidth = NULL, bins = NULL, origin = NULL, breaks = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatBin, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( width = width, drop = drop, right = right, bins = bins, binwidth = binwidth, origin = origin, breaks = breaks, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBin <- ggproto("StatBin", Stat, setup_params = function(data, params) { if (!is.null(data$y) || !is.null(params$y)) { stop("stat_bin() must not be used with a y aesthetic.", call. = FALSE) } if (is.integer(data$x)) { stop('StatBin requires a continuous x variable the x variable is discrete. Perhaps you want stat="count"?', call. = FALSE) } if (is.null(params$breaks) && is.null(params$binwidth) && is.null(params$bins)) { message_wrap("`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.") } params }, compute_group = function(data, scales, binwidth = NULL, bins = NULL, origin = NULL, breaks = NULL, width = 0.9, drop = FALSE, right = FALSE) { range <- scales$x$dimension() bin(data$x, data$weight, binwidth = binwidth, bins = bins, origin = origin, breaks = breaks, range = range, width = width, drop = drop, right = right) }, default_aes = aes(y = ..count..), required_aes = c("x") ) bin <- function(x, weight=NULL, binwidth=NULL, bins=NULL, origin=NULL, breaks=NULL, range=NULL, width=0.9, drop = FALSE, right = FALSE) { if (length(stats::na.omit(x)) == 0) return(data.frame()) if (is.null(weight)) weight <- rep(1, length(x)) weight[is.na(weight)] <- 0 if (is.null(range)) range <- range(x, na.rm = TRUE, finite = TRUE) if (is.null(bins)) bins <- 30 if (is.null(binwidth)) binwidth <- diff(range) / bins if (is.integer(x)) { bins <- x x <- sort(unique(bins)) width <- width } else if (diff(range) == 0) { width <- width bins <- x } else {# if (is.numeric(x)) if (is.null(breaks)) { if (is.null(origin)) { breaks <- fullseq(range, binwidth, pad = TRUE) } else { breaks <- seq(origin, max(range) + binwidth, binwidth) } } # Adapt break fuzziness from base::hist - this protects from floating # point rounding errors diddle <- 1e-07 * stats::median(diff(breaks)) if (right) { fuzz <- c(-diddle, rep.int(diddle, length(breaks) - 1)) } else { fuzz <- c(rep.int(-diddle, length(breaks) - 1), diddle) } fuzzybreaks <- sort(breaks) + fuzz bins <- cut(x, fuzzybreaks, include.lowest = TRUE, right = right) left <- breaks[-length(breaks)] right <- breaks[-1] x <- (left + right)/2 width <- diff(breaks) } results <- data.frame( count = as.numeric(tapply(weight, bins, sum, na.rm = TRUE)), x = x, width = width ) if (sum(results$count, na.rm = TRUE) == 0) { return(results) } results$count[is.na(results$count)] <- 0 results$density <- results$count / results$width / sum(abs(results$count), na.rm = TRUE) results$ncount <- results$count / max(abs(results$count), na.rm = TRUE) results$ndensity <- results$density / max(abs(results$density), na.rm = TRUE) if (drop) { results <- results[results$count > 0, , drop = FALSE] } results } ggplot2/R/position-jitter.r0000644000175100001440000000363612606756762015426 0ustar hornikusers#' Jitter points to avoid overplotting. #' #' @family position adjustments #' @param width,height Amount of vertical and horizontal jitter. The jitter #' is added in both positive and negative directions, so the total spread #' is twice the value specified here. #' #' If omitted, defaults to 40\% of the resolution of the data: this means the #' jitter values will occupy 80\% of the implied bins. Categorical data #' is aligned on the integers, so a width or height of 0.5 will spread the #' data so it's not possible to see the distinction between the categories. #' @export #' @examples #' ggplot(mtcars, aes(am, vs)) + geom_point() #' #' # Default amount of jittering will generally be too much for #' # small datasets: #' ggplot(mtcars, aes(am, vs)) + geom_jitter() #' #' # Two ways to override #' ggplot(mtcars, aes(am, vs)) + #' geom_jitter(width = 0.1, height = 0.1) #' ggplot(mtcars, aes(am, vs)) + #' geom_jitter(position = position_jitter(width = 0.1, height = 0.1)) #' #' # The default works better for large datasets, where it will #' # take up as much space as a boxplot or a bar #' ggplot(mpg, aes(class, hwy)) + #' geom_jitter() + #' geom_boxplot() position_jitter <- function(width = NULL, height = NULL) { ggproto(NULL, PositionJitter, width = width, height = height ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionJitter <- ggproto("PositionJitter", Position, required_aes = c("x", "y"), setup_params = function(self, data) { list( width = self$width %||% resolution(data$x, zero = FALSE) * 0.4, height = self$height %||% resolution(data$y, zero = FALSE) * 0.4 ) }, compute_layer = function(data, params, panel) { trans_x <- if (params$width > 0) function(x) jitter(x, amount = params$width) trans_y <- if (params$height > 0) function(x) jitter(x, amount = params$height) transform_position(data, trans_x, trans_y) } ) ggplot2/R/scale-grey.r0000644000175100001440000000243012555710642014273 0ustar hornikusers#' Sequential grey colour scale. #' #' Based on \code{\link{gray.colors}} #' #' @inheritParams scales::grey_pal #' @inheritParams scale_colour_hue #' @seealso Other colour scales: #' \code{\link{scale_colour_brewer}}, #' \code{\link{scale_colour_gradient}}, #' \code{\link{scale_colour_hue}} #' @rdname scale_grey #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) #' p + scale_colour_grey() #' p + scale_colour_grey(end = 0) #' #' # You may want to turn off the pale grey background with this scale #' p + scale_colour_grey() + theme_bw() #' #' # Colour of missing values is controlled with na.value: #' miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = miss)) + #' scale_colour_grey() #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = miss)) + #' scale_colour_grey(na.value = "green") scale_colour_grey <- function(..., start = 0.2, end = 0.8, na.value = "red") { discrete_scale("colour", "grey", grey_pal(start, end), na.value = na.value, ...) } #' @rdname scale_grey #' @export scale_fill_grey <- function(..., start = 0.2, end = 0.8, na.value = "red") { discrete_scale("fill", "grey", grey_pal(start, end), na.value = na.value, ...) } ggplot2/R/scale-gradient.r0000644000175100001440000001067112607177473015137 0ustar hornikusers#' Smooth gradient between two colours #' #' \code{scale_*_gradient} creates a two colour gradient (low-high), #' \code{scale_*_gradient2} creates a diverging colour gradient (low-mid-high), #' \code{scale_*_gradientn} creats a n-colour gradient. #' #' Default colours are generated with \pkg{munsell} and #' \code{mnsl(c("2.5PB 2/4", "2.5PB 7/10")}. Generally, for continuous #' colour scales you want to keep hue constant, but vary chroma and #' luminance. The \pkg{munsell} package makes this easy to do using the #' Munsell colour system. #' #' @inheritParams scales::seq_gradient_pal #' @inheritParams scale_colour_hue #' @param low,high Colours for low and high ends of the gradient. #' @param guide Type of legend. Use \code{"colourbar"} for continuous #' colour bar, or \code{"legend"} for discrete colour legend. #' @seealso \code{\link[scales]{seq_gradient_pal}} for details on underlying #' palette #' @seealso Other colour scales: #' \code{\link{scale_colour_brewer}}, #' \code{\link{scale_colour_grey}}, #' \code{\link{scale_colour_hue}} #' @rdname scale_gradient #' @export #' @examples #' df <- data.frame( #' x = runif(100), #' y = runif(100), #' z1 = rnorm(100), #' z2 = abs(rnorm(100)) #' ) #' #' # Default colour scale colours from light blue to dark blue #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z2)) #' #' # For diverging colour scales use gradient2 #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z1)) + #' scale_colour_gradient2() #' #' # Use your own colour scale with gradientn #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z1)) + #' scale_colour_gradientn(colours = terrain.colors(10)) #' #' # Equivalent fill scales do the same job for the fill aesthetic #' ggplot(faithfuld, aes(waiting, eruptions)) + #' geom_raster(aes(fill = density)) + #' scale_fill_gradientn(colours = terrain.colors(10)) #' #' # Adjust colour choices with low and high #' ggplot(df, aes(x, y)) + #' geom_point(aes(colour = z2)) + #' scale_colour_gradient(low = "white", high = "black") #' # Avoid red-green colour contrasts because ~10% of men have difficulty #' # seeing them scale_colour_gradient <- function(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("colour", "gradient", seq_gradient_pal(low, high, space), na.value = na.value, guide = guide, ...) } #' @rdname scale_gradient #' @export scale_fill_gradient <- function(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("fill", "gradient", seq_gradient_pal(low, high, space), na.value = na.value, guide = guide, ...) } #' @inheritParams scales::div_gradient_pal #' @param midpoint The midpoint (in data value) of the diverging scale. #' Defaults to 0. #' @rdname scale_gradient #' @export scale_colour_gradient2 <- function(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("colour", "gradient2", div_gradient_pal(low, mid, high, space), na.value = na.value, guide = guide, ..., rescaler = mid_rescaler(mid = midpoint)) } #' @rdname scale_gradient #' @export scale_fill_gradient2 <- function(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") { continuous_scale("fill", "gradient2", div_gradient_pal(low, mid, high, space), na.value = na.value, guide = guide, ..., rescaler = mid_rescaler(mid = midpoint)) } mid_rescaler <- function(mid) { function(x, to = c(0, 1), from = range(x, na.rm = TRUE)) { rescale_mid(x, to, from, mid) } } #' @inheritParams scales::gradient_n_pal #' @param colours,colors Vector of colours to use for n-colour gradient. #' @rdname scale_gradient #' @export scale_colour_gradientn <- function(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) { colours <- if (missing(colours)) colors else colours continuous_scale("colour", "gradientn", gradient_n_pal(colours, values, space), na.value = na.value, guide = guide, ...) } #' @rdname scale_gradient #' @export scale_fill_gradientn <- function(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) { colours <- if (missing(colours)) colors else colours continuous_scale("fill", "gradientn", gradient_n_pal(colours, values, space), na.value = na.value, guide = guide, ...) } ggplot2/R/scale-alpha.r0000644000175100001440000000222012607023731014401 0ustar hornikusers#' Alpha scales. #' #' \code{scale_alpha} is an alias for \code{scale_alpha_continuous} since #' that is the most common use of alpha, and it saves a bit of typing. #' #' @param ... Other arguments passed on to \code{\link{continuous_scale}} #' or \code{\link{discrete_scale}} as appropriate, to control name, limits, #' breaks, labels and so forth. #' @param range range of output alpha values. Should lie between 0 and 1. #' @export #' @examples #' (p <- ggplot(mtcars, aes(mpg, cyl)) + #' geom_point(aes(alpha = cyl))) #' p + scale_alpha("cylinders") #' p + scale_alpha("number\nof\ncylinders") #' #' p + scale_alpha(range = c(0.4, 0.8)) #' #' (p <- ggplot(mtcars, aes(mpg, cyl)) + #' geom_point(aes(alpha = factor(cyl)))) #' p + scale_alpha_discrete(range = c(0.4, 0.8)) scale_alpha <- function(..., range = c(0.1, 1)) { continuous_scale("alpha", "alpha_c", rescale_pal(range), ...) } #' @rdname scale_alpha #' @export scale_alpha_continuous <- scale_alpha #' @rdname scale_alpha #' @export scale_alpha_discrete <- function(..., range = c(0.1, 1)) { discrete_scale("alpha", "alpha_d", function(n) seq(range[1], range[2], length.out = n), ...) } ggplot2/R/geom-rug.r0000644000175100001440000000500312607211414013750 0ustar hornikusers#' Marginal rug plots. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "rug")} #' #' @inheritParams geom_point #' @param sides A string that controls which sides of the plot the rugs appear on. #' It can be set to a string containing any of \code{"trbl"}, for top, right, #' bottom, and left. #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) #' p + geom_point() #' p + geom_point() + geom_rug() #' p + geom_point() + geom_rug(sides="b") # Rug on bottom only #' p + geom_point() + geom_rug(sides="trbl") # All four sides #' p + geom_point() + geom_rug(position='jitter') geom_rug <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", sides = "bl", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomRug, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( sides = sides, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRug <- ggproto("GeomRug", Geom, draw_panel = function(data, panel_scales, coord, sides = "bl") { rugs <- list() data <- coord$transform(data, panel_scales) gp <- gpar(col = alpha(data$colour, data$alpha), lty = data$linetype, lwd = data$size * .pt) if (!is.null(data$x)) { if (grepl("b", sides)) { rugs$x_b <- segmentsGrob( x0 = unit(data$x, "native"), x1 = unit(data$x, "native"), y0 = unit(0, "npc"), y1 = unit(0.03, "npc"), gp = gp ) } if (grepl("t", sides)) { rugs$x_t <- segmentsGrob( x0 = unit(data$x, "native"), x1 = unit(data$x, "native"), y0 = unit(1, "npc"), y1 = unit(0.97, "npc"), gp = gp ) } } if (!is.null(data$y)) { if (grepl("l", sides)) { rugs$y_l <- segmentsGrob( y0 = unit(data$y, "native"), y1 = unit(data$y, "native"), x0 = unit(0, "npc"), x1 = unit(0.03, "npc"), gp = gp ) } if (grepl("r", sides)) { rugs$y_r <- segmentsGrob( y0 = unit(data$y, "native"), y1 = unit(data$y, "native"), x0 = unit(1, "npc"), x1 = unit(0.97, "npc"), gp = gp ) } } gTree(children = do.call("gList", rugs)) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), draw_key = draw_key_path ) ggplot2/R/coord-.r0000644000175100001440000000577012567665533013450 0ustar hornikusers#' @section Coordinate systems: #' #' All \code{coord_*} functions (like \code{coord_trans}) return a \code{Coord*} #' object (like \code{CoordTrans}). The \code{Coord*} object is responsible for #' adjusting the position of overlapping geoms. #' #' The way that the \code{coord_*} functions work is slightly different from the #' \code{geom_*} and \code{stat_*} functions, because a \code{coord_*} function #' actually "instantiates" the \code{Coord*} object by creating a descendant, #' and returns that. #' #' Each of the \code{Coord*} objects is a \code{\link{ggproto}} object, #' descended from the top-level \code{Coord}. To create a new type of Coord #' object, you typically will want to implement one or more of the following: #' #' \itemize{ #' \item \code{aspect}: Returns the desired aspect ratio for the plot. #' \item \code{labels}: Returns a list containing labels for x and y. #' \item \code{render_fg}: Renders foreground elements. #' \item \code{render_bg}: Renders background elements. #' \item \code{render_axis_h}: Renders the horizontal axis. #' \item \code{render_axis_v}: Renders the vertical axis. #' \item \code{range}: Returns the x and y ranges #' \item \code{train}: Return the trained scale ranges. #' \item \code{transform}: Transforms x and y coordinates. #' \item \code{distance}: Calculates distance. #' \item \code{is_linear}: Returns \code{TRUE} if the coordinate system is #' linear; \code{FALSE} otherwise. #' } #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Coord <- ggproto("Coord", aspect = function(ranges) NULL, labels = function(scale_details) scale_details, render_fg = function(scale_details, theme) element_render(theme, "panel.border"), render_bg = function(scale_details, theme) { x.major <- if (length(scale_details$x.major) > 0) unit(scale_details$x.major, "native") x.minor <- if (length(scale_details$x.minor) > 0) unit(scale_details$x.minor, "native") y.major <- if (length(scale_details$y.major) > 0) unit(scale_details$y.major, "native") y.minor <- if (length(scale_details$y.minor) > 0) unit(scale_details$y.minor, "native") guide_grid(theme, x.minor, x.major, y.minor, y.major) }, render_axis_h = function(scale_details, theme) { guide_axis(scale_details$x.major, scale_details$x.labels, "bottom", theme) }, render_axis_v = function(scale_details, theme) { guide_axis(scale_details$y.major, scale_details$y.labels, "left", theme) }, range = function(scale_details) { return(list(x = scale_details$x.range, y = scale_details$y.range)) }, train = function(scale_details) NULL, transform = function(data, range) NULL, distance = function(x, y, scale_details) NULL, is_linear = function() FALSE ) #' Is this object a coordinate system? #' #' @export is.Coord #' @keywords internal is.Coord <- function(x) inherits(x, "Coord") expand_default <- function(scale, discrete = c(0, 0.6), continuous = c(0.05, 0)) { scale$expand %|W|% if (scale$is_discrete()) discrete else continuous } ggplot2/R/geom-raster.r0000644000175100001440000000527412607211316014466 0ustar hornikusers#' @include geom-.r NULL #' @export #' @rdname geom_tile #' @param hjust,vjust horizontal and vertical justification of the grob. Each #' justification value should be a number between 0 and 1. Defaults to 0.5 #' for both, centering each pixel over its data location. #' @param interpolate If \code{TRUE} interpolate linearly, if \code{FALSE} #' (the default) don't interpolate. geom_raster <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", hjust = 0.5, vjust = 0.5, interpolate = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { stopifnot(is.numeric(hjust), length(hjust) == 1) stopifnot(is.numeric(vjust), length(vjust) == 1) layer( data = data, mapping = mapping, stat = stat, geom = GeomRaster, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( hjust = hjust, vjust = vjust, interpolate = interpolate, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRaster <- ggproto("GeomRaster", Geom, default_aes = aes(fill = "grey20", alpha = NA), non_missing_aes = "fill", required_aes = c("x", "y"), setup_data = function(data, params) { hjust <- params$hjust %||% 0.5 vjust <- params$vjust %||% 0.5 w <- resolution(data$x, FALSE) h <- resolution(data$y, FALSE) data$xmin <- data$x - w * (1 - hjust) data$xmax <- data$x + w * hjust data$ymin <- data$y - h * (1 - vjust) data$ymax <- data$y + h * vjust data }, draw_panel = function(data, panel_scales, coord, interpolate = FALSE, hjust = 0.5, vjust = 0.5) { if (!inherits(coord, "CoordCartesian")) { stop("geom_raster only works with Cartesian coordinates", call. = FALSE) } data <- coord$transform(data, panel_scales) # Convert vector of data to raster x_pos <- as.integer((data$x - min(data$x)) / resolution(data$x, FALSE)) y_pos <- as.integer((data$y - min(data$y)) / resolution(data$y, FALSE)) nrow <- max(y_pos) + 1 ncol <- max(x_pos) + 1 raster <- matrix(NA_character_, nrow = nrow, ncol = ncol) raster[cbind(nrow - y_pos, x_pos + 1)] <- alpha(data$fill, data$alpha) # Figure out dimensions of raster on plot x_rng <- c(min(data$xmin, na.rm = TRUE), max(data$xmax, na.rm = TRUE)) y_rng <- c(min(data$ymin, na.rm = TRUE), max(data$ymax, na.rm = TRUE)) rasterGrob(raster, x = mean(x_rng), y = mean(y_rng), width = diff(x_rng), height = diff(y_rng), default.units = "native", interpolate = interpolate ) }, draw_key = draw_key_rect ) ggplot2/R/stat-identity.r0000644000175100001440000000361412633014335015040 0ustar hornikusers#' Identity statistic. #' #' The identity statistic leaves the data unchanged. #' #' @param mapping The aesthetic mapping, usually constructed with #' \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set #' at the layer level if you are overriding the plot defaults. #' @param data A layer specific dataset - only needed if you want to override #' the plot defaults. #' @param geom The geometric object to use display the data #' @param position The position adjustment to use for overlapping points #' on this layer #' @param show.legend logical. Should this layer be included in the legends? #' \code{NA}, the default, includes if any aesthetics are mapped. #' \code{FALSE} never includes, and \code{TRUE} always includes. #' @param inherit.aes If \code{FALSE}, overrides the default aesthetics, #' rather than combining with them. This is most useful for helper functions #' that define both data and aesthetics and shouldn't inherit behaviour from #' the default plot specification, e.g. \code{\link{borders}}. #' @param ... other arguments passed on to \code{\link{layer}}. This can #' include aesthetics whose values you want to set, not map. See #' \code{\link{layer}} for more details. #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) #' p + stat_identity() stat_identity <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatIdentity, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = FALSE, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatIdentity <- ggproto("StatIdentity", Stat, compute_layer = function(data, scales, params) { data } ) ggplot2/R/geom-vline.r0000644000175100001440000000225412607211653014302 0ustar hornikusers#' @include stat-.r NULL #' @export #' @rdname geom_abline geom_vline <- function(mapping = NULL, data = NULL, ..., xintercept, na.rm = FALSE, show.legend = NA) { # Act like an annotation if (!missing(xintercept)) { data <- data.frame(xintercept = xintercept) mapping <- aes(xintercept = xintercept) show.legend <- FALSE } layer( data = data, mapping = mapping, stat = StatIdentity, geom = GeomVline, position = PositionIdentity, show.legend = show.legend, inherit.aes = FALSE, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomVline <- ggproto("GeomVline", Geom, draw_panel = function(data, panel_scales, coord) { ranges <- coord$range(panel_scales) data$x <- data$xintercept data$xend <- data$xintercept data$y <- ranges$y[1] data$yend <- ranges$y[2] GeomSegment$draw_panel(unique(data), panel_scales, coord) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), required_aes = "xintercept", draw_key = draw_key_vline ) ggplot2/R/coord-fixed.r0000644000175100001440000000302212570312132014426 0ustar hornikusers#' Cartesian coordinates with fixed relationship between x and y scales. #' #' A fixed scale coordinate system forces a specified ratio between the #' physical representation of data units on the axes. The ratio represents the #' number of units on the y-axis equivalent to one unit on the x-axis. The #' default, \code{ratio = 1}, ensures that one unit on the x-axis is the same #' length as one unit on the y-axis. Ratios higher than one make units on the #' y axis longer than units on the x-axis, and vice versa. This is similar to #' \code{\link[MASS]{eqscplot}}, but it works for all types of graphics. #' #' @export #' @inheritParams coord_cartesian #' @param ratio aspect ratio, expressed as \code{y / x} #' @examples #' # ensures that the ranges of axes are equal to the specified ratio by #' # adjusting the plot aspect ratio #' #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' p + coord_fixed(ratio = 1) #' p + coord_fixed(ratio = 5) #' p + coord_fixed(ratio = 1/5) #' #' # Resize the plot to see that the specified aspect ratio is maintained coord_fixed <- function(ratio = 1, xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordFixed, limits = list(x = xlim, y = ylim), ratio = ratio, expand = expand ) } #' @export #' @rdname coord_fixed #' @usage NULL coord_equal <- coord_fixed #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordFixed <- ggproto("CoordFixed", CoordCartesian, aspect = function(self, ranges) { diff(ranges$y.range) / diff(ranges$x.range) * self$ratio } ) ggplot2/R/geom-violin.r0000644000175100001440000001312712633623746014477 0ustar hornikusers#' Violin plot. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "violin")} #' #' @inheritParams geom_point #' @param draw_quantiles If \code{not(NULL)} (default), draw horizontal lines #' at the given quantiles of the density estimate. #' @param trim If \code{TRUE} (default), trim the tails of the violins #' to the range of the data. If \code{FALSE}, don't trim the tails. #' @param geom,stat Use to override the default connection between #' \code{geom_violin} and \code{stat_ydensity}. #' @export #' @references Hintze, J. L., Nelson, R. D. (1998) Violin Plots: A Box #' Plot-Density Trace Synergism. The American Statistician 52, 181-184. #' @examples #' p <- ggplot(mtcars, aes(factor(cyl), mpg)) #' p + geom_violin() #' #' \donttest{ #' p + geom_violin() + geom_jitter(height = 0) #' p + geom_violin() + coord_flip() #' #' # Scale maximum width proportional to sample size: #' p + geom_violin(scale = "count") #' #' # Scale maximum width to 1 for all violins: #' p + geom_violin(scale = "width") #' #' # Default is to trim violins to the range of the data. To disable: #' p + geom_violin(trim = FALSE) #' #' # Use a smaller bandwidth for closer density fit (default is 1). #' p + geom_violin(adjust = .5) #' #' # Add aesthetic mappings #' # Note that violins are automatically dodged when any aesthetic is #' # a factor #' p + geom_violin(aes(fill = cyl)) #' p + geom_violin(aes(fill = factor(cyl))) #' p + geom_violin(aes(fill = factor(vs))) #' p + geom_violin(aes(fill = factor(am))) #' #' # Set aesthetics to fixed value #' p + geom_violin(fill = "grey80", colour = "#3366FF") #' #' # Show quartiles #' p + geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) #' #' # Scales vs. coordinate transforms ------- #' if (require("ggplot2movies")) { #' # Scale transformations occur before the density statistics are computed. #' # Coordinate transformations occur afterwards. Observe the effect on the #' # number of outliers. #' m <- ggplot(movies, aes(y = votes, x = rating, group = cut_width(rating, 0.5))) #' m + geom_violin() #' m + geom_violin() + scale_y_log10() #' m + geom_violin() + coord_trans(y = "log10") #' m + geom_violin() + scale_y_log10() + coord_trans(y = "log10") #' #' # Violin plots with continuous x: #' # Use the group aesthetic to group observations in violins #' ggplot(movies, aes(year, budget)) + geom_violin() #' ggplot(movies, aes(year, budget)) + #' geom_violin(aes(group = cut_width(year, 10)), scale = "width") #' } #' } geom_violin <- function(mapping = NULL, data = NULL, stat = "ydensity", draw_quantiles = NULL, position = "dodge", trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomViolin, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( trim = trim, scale = scale, draw_quantiles = draw_quantiles, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomViolin <- ggproto("GeomViolin", Geom, setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) # ymin, ymax, xmin, and xmax define the bounding rectangle for each group plyr::ddply(data, "group", transform, xmin = x - width / 2, xmax = x + width / 2 ) }, draw_group = function(self, data, ..., draw_quantiles = NULL) { # Find the points for the line to go all the way around data <- transform(data, xminv = x - violinwidth * (x - xmin), xmaxv = x + violinwidth * (xmax - x) ) # Make sure it's sorted properly to draw the outline newdata <- rbind( plyr::arrange(transform(data, x = xminv), y), plyr::arrange(transform(data, x = xmaxv), -y) ) # Close the polygon: set first and last point the same # Needed for coord_polar and such newdata <- rbind(newdata, newdata[1,]) # Draw quantiles if requested if (length(draw_quantiles) > 0) { stopifnot(all(draw_quantiles >= 0), all(draw_quantiles <= 1)) # Compute the quantile segments and combine with existing aesthetics quantiles <- create_quantile_segment_frame(data, draw_quantiles) aesthetics <- data[ rep(1, nrow(quantiles)), setdiff(names(data), c("x", "y")), drop = FALSE ] both <- cbind(quantiles, aesthetics) quantile_grob <- GeomPath$draw_panel(both, ...) ggname("geom_violin", grobTree( GeomPolygon$draw_panel(newdata, ...), quantile_grob) ) } else { ggname("geom_violin", GeomPolygon$draw_panel(newdata, ...)) } }, draw_key = draw_key_polygon, default_aes = aes(weight = 1, colour = "grey20", fill = "white", size = 0.5, alpha = NA, linetype = "solid"), required_aes = c("x", "y") ) # Returns a data.frame with info needed to draw quantile segments. create_quantile_segment_frame <- function(data, draw_quantiles) { dens <- cumsum(data$density) / sum(data$density) ecdf <- stats::approxfun(dens, data$y) ys <- ecdf(draw_quantiles) # these are all the y-values for quantiles # Get the violin bounds for the requested quantiles violin.xminvs <- (stats::approxfun(data$y, data$xminv))(ys) violin.xmaxvs <- (stats::approxfun(data$y, data$xmaxv))(ys) # We have two rows per segment drawn. Each segments gets its own group. data.frame( x = interleave(violin.xminvs, violin.xmaxvs), y = rep(ys, each = 2), group = rep(ys, each = 2) ) } ggplot2/R/utilities-table.r0000644000175100001440000000226112555701147015342 0ustar hornikuserscompute_grob_widths <- function(grob_layout, widths) { cols <- split(grob_layout, grob_layout$l) do.call("unit.c", lapply(cols, compute_grob_dimensions, dims = widths)) } compute_grob_heights <- function(grob_layout, heights) { cols <- split(grob_layout, grob_layout$t) do.call("unit.c", lapply(cols, compute_grob_dimensions, dims = heights)) } compute_grob_dimensions <- function(grob_layout, dims) { # If any don't have explicit dims, then width is NULL if (!any(grob_layout$type %in% names(dims))) { return(unit(1, "null")) } grob_layout <- grob_layout[grob_layout$type %in% names(dims), , drop = FALSE] dims <- unique(Map(function(type, pos) { type_width <- dims[[type]] if (length(type_width) == 1) type_width else type_width[pos] }, grob_layout$type, grob_layout$id)) units <- vapply(dims, is.unit, logical(1)) if (all(units)) { if (all(lapply(dims, attr, "unit") == "null")) unit(max(unlist(dims)), "null") else do.call("max", dims) } else { raw_max <- unit(max(unlist(dims[!units])), "cm") if (any(units)) { unit_max <- max(do.call("unit.c", dims[units])) max(raw_max, unit_max) } else { raw_max } } } ggplot2/R/grob-null.r0000644000175100001440000000127112560216326014137 0ustar hornikusers#' The zero grob draws nothing and has zero size. #' #' @keywords internal #' @export zeroGrob <- function() .zeroGrob .zeroGrob <- grob(cl = "zeroGrob", name = "NULL") #' @export #' @method widthDetails zeroGrob widthDetails.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method heightDetails zeroGrob heightDetails.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method grobWidth zeroGrob grobWidth.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method grobHeight zeroGrob grobHeight.zeroGrob <- function(x) unit(0, "cm") #' @export #' @method drawDetails zeroGrob drawDetails.zeroGrob <- function(x, recording) {} is.zero <- function(x) is.null(x) || inherits(x, "zeroGrob") ggplot2/R/geom-linerange.r0000644000175100001440000000541712620170347015134 0ustar hornikusers#' Vertical intervals: lines, crossbars & errorbars. #' #' Various ways of representing a vertical interval defined by \code{x}, #' \code{ymin} and \code{ymax}. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "linerange")} #' #' @param fatten A multiplicative factor used to increase the size of the #' middle bar in \code{geom_crossbar()} and the middle point in #' \code{geom_pointrange()}. #' @seealso #' \code{\link{stat_summary}} for examples of these guys in use, #' \code{\link{geom_smooth}} for continuous analog #' @export #' @inheritParams geom_point #' @examples #' #' # Create a simple example dataset #' df <- data.frame( #' trt = factor(c(1, 1, 2, 2)), #' resp = c(1, 5, 3, 4), #' group = factor(c(1, 2, 1, 2)), #' upper = c(1.1, 5.3, 3.3, 4.2), #' lower = c(0.8, 4.6, 2.4, 3.6) #' ) #' #' p <- ggplot(df, aes(trt, resp, colour = group)) #' p + geom_linerange(aes(ymin = lower, ymax = upper)) #' p + geom_pointrange(aes(ymin = lower, ymax = upper)) #' p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2) #' p + geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) #' #' # Draw lines connecting group means #' p + #' geom_line(aes(group = group)) + #' geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) #' #' # If you want to dodge bars and errorbars, you need to manually #' # specify the dodge width #' p <- ggplot(df, aes(trt, resp, fill = group)) #' p + #' geom_bar(position = "dodge", stat = "identity") + #' geom_errorbar(aes(ymin = lower, ymax = upper), position = "dodge", width = 0.25) #' #' # Because the bars and errorbars have different widths #' # we need to specify how wide the objects we are dodging are #' dodge <- position_dodge(width=0.9) #' p + #' geom_bar(position = dodge, stat = "identity") + #' geom_errorbar(aes(ymin = lower, ymax = upper), position = dodge, width = 0.25) geom_linerange <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomLinerange, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomLinerange <- ggproto("GeomLinerange", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), draw_key = draw_key_vpath, required_aes = c("x", "ymin", "ymax"), draw_panel = function(data, panel_scales, coord) { data <- transform(data, xend = x, y = ymin, yend = ymax) ggname("geom_linerange", GeomSegment$draw_panel(data, panel_scales, coord)) } ) ggplot2/R/geom-text.r0000644000175100001440000001611512607211547014154 0ustar hornikusers#' Textual annotations. #' #' \code{geom_text} adds text directly to the plot. \code{geom_label} draws #' a rectangle underneath the text, making it easier to read. #' #' Note the the "width" and "height" of a text element are 0, so stacking #' and dodging text will not work by default, and axis limits are not #' automatically expanded to include all text. Obviously, labels do have #' height and width, but they are physical units, not data units. The amount of #' space they occupy on that plot is not constant in data units: when you #' resize a plot, labels stay the same size, but the size of the axes changes. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "text")} #' #' @section \code{geom_label}: #' Currently \code{geom_label} does not support the \code{rot} parameter and #' is considerably slower than \code{geom_text}. The \code{fill} aesthetic #' controls the background colour of the label. #' #' @section Alignment: #' You can modify text alignment with the \code{vjust} and \code{hjust} #' aesthetics. These can either be a number between 0 (right/bottom) and #' 1 (top/left) or a character ("left", "middle", "right", "bottom", "center", #' "top"). There are two special alignments: "inward" and "outward". #' Inward always aligns text towards the center, and outward aligns #' it away from the center #' #' @inheritParams geom_point #' @param parse If TRUE, the labels will be parsed into expressions and #' displayed as described in ?plotmath #' @param nudge_x,nudge_y Horizontal and vertical adjustment to nudge labels by. #' Useful for offsetting text from points, particularly on discrete scales. #' @param check_overlap If \code{TRUE}, text that overlaps previous text in the #' same layer will not be plotted. A quick and dirty way #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) #' #' p + geom_text() #' # Avoid overlaps #' p + geom_text(check_overlap = TRUE) #' # Labels with background #' p + geom_label() #' # Change size of the label #' p + geom_text(size = 10) #' #' # Set aesthetics to fixed value #' p + geom_point() + geom_text(hjust = 0, nudge_x = 0.05) #' p + geom_point() + geom_text(vjust = 0, nudge_y = 0.5) #' p + geom_point() + geom_text(angle = 45) #' \dontrun{ #' p + geom_text(family = "Times New Roman") #' } #' #' # Add aesthetic mappings #' p + geom_text(aes(colour = factor(cyl))) #' p + geom_text(aes(colour = factor(cyl))) + #' scale_colour_discrete(l = 40) #' p + geom_label(aes(fill = factor(cyl)), colour = "white", fontface = "bold") #' #' p + geom_text(aes(size = wt)) #' # Scale height of text, rather than sqrt(height) #' p + geom_text(aes(size = wt)) + scale_radius(range = c(3,6)) #' #' # You can display expressions by setting parse = TRUE. The #' # details of the display are described in ?plotmath, but note that #' # geom_text uses strings, not expressions. #' p + geom_text(aes(label = paste(wt, "^(", cyl, ")", sep = "")), #' parse = TRUE) #' #' # Add a text annotation #' p + #' geom_text() + #' annotate("text", label = "plot mpg vs. wt", x = 2, y = 15, size = 8, colour = "red") #' #' \donttest{ #' # Aligning labels and bars -------------------------------------------------- #' df <- data.frame( #' x = factor(c(1, 1, 2, 2)), #' y = c(1, 3, 2, 1), #' grp = c("a", "b", "a", "b") #' ) #' #' # ggplot2 doesn't know you want to give the labels the same virtual width #' # as the bars: #' ggplot(data = df, aes(x, y, fill = grp, label = y)) + #' geom_bar(stat = "identity", position = "dodge") + #' geom_text(position = "dodge") #' # So tell it: #' ggplot(data = df, aes(x, y, fill = grp, label = y)) + #' geom_bar(stat = "identity", position = "dodge") + #' geom_text(position = position_dodge(0.9)) #' # Use you can't nudge and dodge text, so instead adjust the y postion #' ggplot(data = df, aes(x, y, fill = grp, label = y)) + #' geom_bar(stat = "identity", position = "dodge") + #' geom_text(aes(y = y + 0.05), position = position_dodge(0.9), vjust = 0) #' #' # To place text in the middle of each bar in a stacked barplot, you #' # need to do the computation yourself #' df <- transform(df, mid_y = ave(df$y, df$x, FUN = function(val) cumsum(val) - (0.5 * val))) #' #' ggplot(data = df, aes(x, y, fill = grp, label = y)) + #' geom_bar(stat = "identity") + #' geom_text(aes(y = mid_y)) #' #' # Justification ------------------------------------------------------------- #' df <- data.frame( #' x = c(1, 1, 2, 2, 1.5), #' y = c(1, 2, 1, 2, 1.5), #' text = c("bottom-left", "bottom-right", "top-left", "top-right", "center") #' ) #' ggplot(df, aes(x, y)) + #' geom_text(aes(label = text)) #' ggplot(df, aes(x, y)) + #' geom_text(aes(label = text), vjust = "inward", hjust = "inward") #' } geom_text <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", parse = FALSE, ..., nudge_x = 0, nudge_y = 0, check_overlap = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { if (!missing(nudge_x) || !missing(nudge_y)) { if (!missing(position)) { stop("Specify either `position` or `nudge_x`/`nudge_y`", call. = FALSE) } position <- position_nudge(nudge_x, nudge_y) } layer( data = data, mapping = mapping, stat = stat, geom = GeomText, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( parse = parse, check_overlap = check_overlap, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomText <- ggproto("GeomText", Geom, required_aes = c("x", "y", "label"), default_aes = aes( colour = "black", size = 3.88, angle = 0, hjust = 0.5, vjust = 0.5, alpha = NA, family = "", fontface = 1, lineheight = 1.2 ), draw_panel = function(data, panel_scales, coord, parse = FALSE, na.rm = FALSE, check_overlap = FALSE) { lab <- data$label if (parse) { lab <- parse(text = as.character(lab)) } data <- coord$transform(data, panel_scales) if (is.character(data$vjust)) { data$vjust <- compute_just(data$vjust, data$y) } if (is.character(data$hjust)) { data$hjust <- compute_just(data$hjust, data$x) } textGrob( lab, data$x, data$y, default.units = "native", hjust = data$hjust, vjust = data$vjust, rot = data$angle, gp = gpar( col = alpha(data$colour, data$alpha), fontsize = data$size * .pt, fontfamily = data$family, fontface = data$fontface, lineheight = data$lineheight ), check.overlap = check_overlap ) }, draw_key = draw_key_text ) compute_just <- function(just, x) { inward <- just == "inward" just[inward] <- c("left", "middle", "right")[just_dir(x[inward])] outward <- just == "outward" just[outward] <- c("right", "middle", "left")[just_dir(x[outward])] unname(c(left = 0, center = 0.5, right = 1, bottom = 0, middle = 0.5, top = 1)[just]) } just_dir <- function(x, tol = 0.001) { out <- rep(2L, length(x)) out[x < 0.5 - tol] <- 1L out[x > 0.5 + tol] <- 3L out } ggplot2/R/ggproto.r0000644000175100001440000001702312567672036013734 0ustar hornikusers#' Create a new ggproto object #' #' ggproto is inspired by the proto package, but it has some important #' differences. Notably, it cleanly supports cross-package inheritance, and has #' faster performance. #' #' @section Calling ggproto methods: #' #' ggproto methods can take an optional \code{self} argument: if it is present, #' it is a regular method; if it's absent, it's a "static" method (i.e. it #' doesn't use any fields). #' #' Imagine you have a ggproto object \code{Adder}, which has a #' method \code{addx = function(self, n) n + self$x}. Then, to call this #' function, you would use \code{Adder$addx(10)} -- the \code{self} is passed #' in automatically by the wrapper function. \code{self} be located anywhere #' in the function signature, although customarily it comes first. #' #' @section Calling methods in a parent: #' #' To explicitly call a methods in a parent, use #' \code{ggproto_parent(Parent, self)}. #' #' @param _class Class name to assign to the object. This is stored as the class #' attribute of the object. If \code{NULL} (the default), no class name will #' be added to the object. #' @param _inherit ggproto object to inherit from. If \code{NULL}, don't inherit #' from any object. #' @param parent,self Access parent class \code{parent} of object \code{self}. #' @param ... A list of members in the ggproto object. #' @export ggproto <- function(`_class` = NULL, `_inherit` = NULL, ...) { e <- new.env(parent = emptyenv()) members <- list(...) if (length(members) != sum(nzchar(names(members)))) { stop("All members of a ggproto object must be named.") } list2env(members, envir = e) if (!is.null(`_inherit`)) { if (!is.ggproto(`_inherit`)) { stop("`_inherit` must be a ggproto object.") } e$super <- `_inherit` class(e) <- c(`_class`, class(`_inherit`)) } else { class(e) <- c(`_class`, "ggproto") } e } #' Is an object a ggproto object? #' #' @param x An object to test. #' @export is.ggproto <- function(x) inherits(x, "ggproto") fetch_ggproto <- function(x, name) { res <- NULL val <- .subset2(x, name) # The is.null check is an optimization for a common case; exists() also # catches the case where the value exists but has a NULL value. if (!is.null(val) || exists(name, envir = x, inherits = FALSE)) { res <- val } else { # If not found here, recurse into super environments super <- .subset2(x, "super") if (is.ggproto(super)) res <- fetch_ggproto(super, name) } res } #' @export #' @rdname ggproto ggproto_parent <- function(parent, self) { structure(list(parent = parent, self = self), class = "ggproto_parent") } #' @export `$.ggproto` <- function(x, name) { res <- fetch_ggproto(x, name) if (!is.function(res)) { return(res) } make_proto_method(x, res) } #' @export `$.ggproto_parent` <- function(x, name) { res <- fetch_ggproto(.subset2(x, "parent"), name) if (!is.function(res)) { return(res) } make_proto_method(.subset2(x, "self"), res) } make_proto_method <- function(self, f) { args <- formals(f) # is.null is a fast path for a common case; the %in% check is slower but also # catches the case where there's a `self = NULL` argument. has_self <- !is.null(args[["self"]]) || "self" %in% names(args) if (has_self) { fun <- function(...) f(..., self = self) } else { fun <- function(...) f(...) } class(fun) <- "ggproto_method" fun } #' @export `[[.ggproto` <- `$.ggproto` #' Convert a ggproto object to a list #' #' This will not include the object's \code{super} member. #' #' @param x A ggproto object to convert to a list. #' @param inherit If \code{TRUE} (the default), flatten all inherited items into #' the returned list. If \code{FALSE}, do not include any inherited items. #' @param ... Further arguments to pass to \code{as.list.environment}. #' @export as.list.ggproto <- function(x, inherit = TRUE, ...) { res <- list() if (inherit) { if (!is.null(x$super)) { res <- as.list(x$super) } } current <- as.list.environment(x, ...) res[names(current)] <- current res$super <- NULL res } #' Print a ggproto object #' #' If a ggproto object has a \code{$print} method, this will call that method. #' Otherwise, it will print out the members of the object, and optionally, the #' members of the inherited objects. #' #' @param x A ggproto object to print. #' @param flat If \code{TRUE} (the default), show a flattened list of all local #' and inherited members. If \code{FALSE}, show the inheritance hierarchy. #' @param ... If the ggproto object has a \code{print} method, further arguments #' will be passed to it. Otherwise, these arguments are unused. #' #' @export print.ggproto <- function(x, ..., flat = TRUE) { if (is.function(x$print)) { x$print(...) } else { cat(format(x, flat = flat), "\n", sep = "") invisible(x) } } #' Format a ggproto object #' #' @inheritParams print.ggproto #' @export format.ggproto <- function(x, ..., flat = TRUE) { classes_str <- function(obj) { classes <- setdiff(class(obj), "ggproto") if (length(classes) == 0) return("") paste0(": Class ", paste(classes, collapse = ', ')) } # Get a flat list if requested if (flat) { objs <- as.list(x, inherit = TRUE) } else { objs <- x } str <- paste0( "\n", indent(object_summaries(objs, flat = flat), 4) ) if (flat && !is.null(x$super)) { str <- paste0( str, "\n", indent( paste0("super: ", " "), 4 ) ) } str } # Return a summary string of the items of a list or environment # x must be a list or environment object_summaries <- function(x, exclude = NULL, flat = TRUE) { if (length(x) == 0) return(NULL) if (is.list(x)) obj_names <- sort(names(x)) else if (is.environment(x)) obj_names <- ls(x, all.names = TRUE) obj_names <- setdiff(obj_names, exclude) values <- vapply(obj_names, function(name) { obj <- x[[name]] if (is.function(obj)) "function" else if (is.ggproto(obj)) format(obj, flat = flat) else if (is.environment(obj)) "environment" else if (is.null(obj)) "NULL" else if (is.atomic(obj)) trim(paste(as.character(obj), collapse = " ")) else paste(class(obj), collapse = ", ") }, FUN.VALUE = character(1)) paste0(obj_names, ": ", values, sep = "", collapse = "\n") } # Given a string, indent every line by some number of spaces. # The exception is to not add spaces after a trailing \n. indent <- function(str, indent = 0) { gsub("(\\n|^)(?!$)", paste0("\\1", paste(rep(" ", indent), collapse = "")), str, perl = TRUE ) } # Trim a string to n characters; if it's longer than n, add " ..." to the end trim <- function(str, n = 60) { if (nchar(str) > n) paste(substr(str, 1, 56), "...") else str } #' @export print.ggproto_method <- function(x, ...) { cat(format(x), sep = "") } #' @export format.ggproto_method <- function(x, ...) { # Given a function, return a string from srcref if present. If not present, # paste the deparsed lines of code together. format_fun <- function(fn) { srcref <- attr(fn, "srcref", exact = TRUE) if (is.null(srcref)) return(paste(format(fn), collapse = "\n")) paste(as.character(srcref), collapse = "\n") } x <- unclass(x) paste0( "", "\n \n ", format_fun(x), "\n\n \n ", format_fun(environment(x)$f) ) } # proto2 TODO: better way of getting formals for self$draw ggproto_formals <- function(x) formals(environment(x)$f) ggplot2/R/stat-smooth-methods.r0000644000175100001440000000367212556117470016175 0ustar hornikusers# Prediction data frame # Get predictions with standard errors into data frame # # @keyword internal # @alias predictdf.default # @alias predictdf.glm # @alias predictdf.loess # @alias predictdf.locfit predictdf <- function(model, xseq, se, level) UseMethod("predictdf") #' @export predictdf.default <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se.fit = se, level = level, interval = if (se) "confidence" else "none") if (se) { fit <- as.data.frame(pred$fit) names(fit) <- c("y", "ymin", "ymax") data.frame(x = xseq, fit, se = pred$se.fit) } else { data.frame(x = xseq, y = as.vector(pred)) } } #' @export predictdf.glm <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se.fit = se, type = "link") if (se) { std <- stats::qnorm(level / 2 + 0.5) data.frame( x = xseq, y = model$family$linkinv(as.vector(pred$fit)), ymin = model$family$linkinv(as.vector(pred$fit - std * pred$se)), ymax = model$family$linkinv(as.vector(pred$fit + std * pred$se)), se = as.vector(pred$se) ) } else { data.frame(x = xseq, y = model$family$linkinv(as.vector(pred))) } } #' @export predictdf.loess <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se = se) if (se) { y = pred$fit ci <- pred$se.fit * stats::qt(level / 2 + .5, pred$df) ymin = y - ci ymax = y + ci data.frame(x = xseq, y, ymin, ymax, se = pred$se.fit) } else { data.frame(x = xseq, y = as.vector(pred)) } } #' @export predictdf.locfit <- function(model, xseq, se, level) { pred <- stats::predict(model, newdata = data.frame(x = xseq), se.fit = se) if (se) { y = pred$fit ymin = y - pred$se.fit ymax = y + pred$se.fit data.frame(x = xseq, y, ymin, ymax, se = pred$se.fit) } else { data.frame(x = xseq, y = as.vector(pred)) } } ggplot2/R/coord-transform.r0000644000175100001440000001256012633015304015352 0ustar hornikusers#' Transformed cartesian coordinate system. #' #' \code{coord_trans} is different to scale transformations in that it occurs after #' statistical transformation and will affect the visual appearance of geoms - there is #' no guarantee that straight lines will continue to be straight. #' #' All current transformations only work with continuous values - see #' \code{\link[scales]{trans_new}} for list of transformations, and instructions on #' how to create your own. #' #' @param x,y transformers for x and y axes #' @param xtrans,ytrans Deprecated; use \code{x} and \code{y} instead. #' @param limx,limy limits for x and y axes. (Named so for backward #' compatibility) #' @export #' @examples #' \donttest{ #' # See ?geom_boxplot for other examples #' #' # Three ways of doing transformation in ggplot: #' # * by transforming the data #' ggplot(diamonds, aes(log10(carat), log10(price))) + #' geom_point() #' # * by transforming the scales #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' scale_x_log10() + #' scale_y_log10() #' # * by transforming the coordinate system: #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' coord_trans(x = "log10", y = "log10") #' #' # The difference between transforming the scales and #' # transforming the coordinate system is that scale #' # transformation occurs BEFORE statistics, and coordinate #' # transformation afterwards. Coordinate transformation also #' # changes the shape of geoms: #' #' d <- subset(diamonds, carat > 0.5) #' #' ggplot(d, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") + #' scale_x_log10() + #' scale_y_log10() #' #' ggplot(d, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") + #' coord_trans(x = "log10", y = "log10") #' #' # Here I used a subset of diamonds so that the smoothed line didn't #' # drop below zero, which obviously causes problems on the log-transformed #' # scale #' #' # With a combination of scale and coordinate transformation, it's #' # possible to do back-transformations: #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") + #' scale_x_log10() + #' scale_y_log10() + #' coord_trans(x = scales::exp_trans(10), y = scales::exp_trans(10)) #' #' # cf. #' ggplot(diamonds, aes(carat, price)) + #' geom_point() + #' geom_smooth(method = "lm") #' #' # Also works with discrete scales #' df <- data.frame(a = abs(rnorm(26)),letters) #' plot <- ggplot(df,aes(a,letters)) + geom_point() #' #' plot + coord_trans(x = "log10") #' plot + coord_trans(x = "sqrt") #' } coord_trans <- function(x = "identity", y = "identity", limx = NULL, limy = NULL, xtrans, ytrans) { if (!missing(xtrans)) { gg_dep("1.0.1", "`xtrans` arguments is deprecated; please use `x` instead.") x <- xtrans } if (!missing(ytrans)) { gg_dep("1.0.1", "`ytrans` arguments is deprecated; please use `y` instead.") y <- ytrans } # @kohske # Now limits are implemented. # But for backward compatibility, xlim -> limx, ylim -> ylim # Because there are many examples such as # > coord_trans(x = "log10", y = "log10") # Maybe this is changed. if (is.character(x)) x <- as.trans(x) if (is.character(y)) y <- as.trans(y) ggproto(NULL, CoordTrans, trans = list(x = x, y = y), limits = list(x = limx, y = limy) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordTrans <- ggproto("CoordTrans", Coord, distance = function(self, x, y, scale_details) { max_dist <- dist_euclidean(scale_details$x.range, scale_details$y.range) dist_euclidean(self$trans$x$transform(x), self$trans$y$transform(y)) / max_dist }, transform = function(self, data, scale_details) { trans_x <- function(data) transform_value(self$trans$x, data, scale_details$x.range) trans_y <- function(data) transform_value(self$trans$y, data, scale_details$y.range) data <- transform_position(data, trans_x, trans_y) transform_position(data, squish_infinite, squish_infinite) }, train = function(self, scale_details) { c(train_trans(scale_details$x, self$limits$x, self$trans$x, "x"), train_trans(scale_details$y, self$limits$y, self$trans$y, "y")) } ) transform_value <- function(trans, value, range) { if (is.null(value)) return(value) rescale(trans$transform(value), 0:1, range) } train_trans <- function(scale_details, limits, trans, name) { # first, calculate the range that is the numerical limits in data space # expand defined by scale OR coord # @kohske # Expansion of data range sometimes go beyond domain, # so in trans, expansion takes place at the final stage. if (is.null(limits)) { range <- scale_details$dimension() } else { range <- range(scale_details$transform(limits)) } # breaks on data space out <- scale_details$break_info(range) # trans'd range out$range <- trans$transform(out$range) # expansion if limits are not specified if (is.null(limits)) { expand <- expand_default(scale_details) out$range <- expand_range(out$range, expand[1], expand[2]) } # major and minor values in plot space out$major_source <- transform_value(trans, out$major_source, out$range) out$minor_source <- transform_value(trans, out$minor_source, out$range) out <- list( range = out$range, labels = out$labels, major = out$major_source, minor = out$minor_source ) names(out) <- paste(name, names(out), sep = ".") out } ggplot2/R/position-collide.r0000644000175100001440000000627312570731731015525 0ustar hornikusers# Detect and prevent collisions. # Powers dodging, stacking and filling. collide <- function(data, width = NULL, name, strategy, check.width = TRUE) { # Determine width if (!is.null(width)) { # Width set manually if (!(all(c("xmin", "xmax") %in% names(data)))) { data$xmin <- data$x - width / 2 data$xmax <- data$x + width / 2 } } else { if (!(all(c("xmin", "xmax") %in% names(data)))) { data$xmin <- data$x data$xmax <- data$x } # Width determined from data, must be floating point constant widths <- unique(data$xmax - data$xmin) widths <- widths[!is.na(widths)] # # Suppress warning message since it's not reliable # if (!zero_range(range(widths))) { # warning(name, " requires constant width: output may be incorrect", # call. = FALSE) # } width <- widths[1] } # Reorder by x position, relying on stable sort to preserve existing # ordering, which may be by group or order. data <- data[order(data$xmin), ] # Check for overlap intervals <- as.numeric(t(unique(data[c("xmin", "xmax")]))) intervals <- intervals[!is.na(intervals)] if (length(unique(intervals)) > 1 & any(diff(scale(intervals)) < -1e-6)) { warning(name, " requires non-overlapping x intervals", call. = FALSE) # This is where the algorithm from [L. Wilkinson. Dot plots. # The American Statistician, 1999.] should be used } if (!is.null(data$ymax)) { plyr::ddply(data, "xmin", strategy, width = width) } else if (!is.null(data$y)) { data$ymax <- data$y data <- plyr::ddply(data, "xmin", strategy, width = width) data$y <- data$ymax data } else { stop("Neither y nor ymax defined") } } # Stack overlapping intervals. # Assumes that each set has the same horizontal position pos_stack <- function(df, width) { if (nrow(df) == 1) return(df) n <- nrow(df) + 1 y <- ifelse(is.na(df$y), 0, df$y) if (all(is.na(df$x))) { heights <- rep(NA, n) } else { heights <- c(0, cumsum(y)) } df$ymin <- heights[-n] df$ymax <- heights[-1] df$y <- df$ymax df } # Stack overlapping intervals and set height to 1. # Assumes that each set has the same horizontal position. pos_fill <- function(df, width) { stacked <- pos_stack(df, width) stacked$ymin <- stacked$ymin / max(stacked$ymax) stacked$ymax <- stacked$ymax / max(stacked$ymax) stacked$y <- stacked$ymax stacked } # Dodge overlapping interval. # Assumes that each set has the same horizontal position. pos_dodge <- function(df, width) { n <- length(unique(df$group)) if (n == 1) return(df) if (!all(c("xmin", "xmax") %in% names(df))) { df$xmin <- df$x df$xmax <- df$x } d_width <- max(df$xmax - df$xmin) # df <- data.frame(n = c(2:5, 10, 26), div = c(4, 3, 2.666666, 2.5, 2.2, 2.1)) # ggplot(df, aes(n, div)) + geom_point() # Have a new group index from 1 to number of groups. # This might be needed if the group numbers in this set don't include all of 1:n groupidx <- match(df$group, sort(unique(df$group))) # Find the center for each group, then use that to calculate xmin and xmax df$x <- df$x + width * ((groupidx - 0.5) / n - .5) df$xmin <- df$x - d_width / n / 2 df$xmax <- df$x + d_width / n / 2 df } ggplot2/R/stat-boxplot.r0000644000175100001440000000556712607215012014703 0ustar hornikusers#' @rdname geom_boxplot #' @param coef length of the whiskers as multiple of IQR. Defaults to 1.5 #' @inheritParams stat_identity #' @section Computed variables: #' \describe{ #' \item{width}{width of boxplot} #' \item{ymin}{lower whisker = smallest observation greater than or equal to lower hinge - 1.5 * IQR} #' \item{lower}{lower hinge, 25\% quantile} #' \item{notchlower}{lower edge of notch = median - 1.58 * IQR / sqrt(n)} #' \item{middle}{median, 50\% quantile} #' \item{notchupper}{upper edge of notch = median + 1.58 * IQR / sqrt(n)} #' \item{upper}{upper hinge, 75\% quantile} #' \item{ymax}{upper whisker = largest observation less than or equal to upper hinge + 1.5 * IQR} #' } #' @export stat_boxplot <- function(mapping = NULL, data = NULL, geom = "boxplot", position = "dodge", coef = 1.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatBoxplot, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, coef = coef, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBoxplot <- ggproto("StatBoxplot", Stat, required_aes = c("x", "y"), non_missing_aes = "weight", setup_params = function(data, params) { params$width <- params$width %||% resolution(data$x) * 0.75 if (is.double(data$x) && !has_groups(data) && any(data$x != data$x[1L])) { warning( "Continuous x aesthetic -- did you forget aes(group=...)?", call. = FALSE) } params }, compute_group = function(data, scales, width = NULL, na.rm = FALSE, coef = 1.5) { qs <- c(0, 0.25, 0.5, 0.75, 1) if (!is.null(data$weight)) { mod <- quantreg::rq(y ~ 1, weights = weight, data = data, tau = qs) stats <- as.numeric(stats::coef(mod)) } else { stats <- as.numeric(stats::quantile(data$y, qs)) } names(stats) <- c("ymin", "lower", "middle", "upper", "ymax") iqr <- diff(stats[c(2, 4)]) outliers <- data$y < (stats[2] - coef * iqr) | data$y > (stats[4] + coef * iqr) if (any(outliers)) { stats[c(1, 5)] <- range(c(stats[2:4], data$y[!outliers]), na.rm = TRUE) } if (length(unique(data$x)) > 1) width <- diff(range(data$x)) * 0.9 df <- as.data.frame(as.list(stats)) df$outliers <- list(data$y[outliers]) if (is.null(data$weight)) { n <- sum(!is.na(data$y)) } else { # Sum up weights for non-NA positions of y and weight n <- sum(data$weight[!is.na(data$y) & !is.na(data$weight)]) } df$notchupper <- df$middle + 1.58 * iqr / sqrt(n) df$notchlower <- df$middle - 1.58 * iqr / sqrt(n) df$x <- if (is.factor(data$x)) data$x[1] else mean(range(data$x)) df$width <- width df$relvarwidth <- sqrt(n) df } ) ggplot2/R/stat-unique.r0000644000175100001440000000204512633014405014510 0ustar hornikusers#' Remove duplicates. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "unique")} #' #' @export #' @inheritParams stat_identity #' @param na.rm If \code{FALSE} (the default), removes missing values with #' a warning. If \code{TRUE} silently removes missing values. #' @examples #' ggplot(mtcars, aes(vs, am)) + geom_point(alpha = 0.1) #' ggplot(mtcars, aes(vs, am)) + geom_point(alpha = 0.1, stat="unique") stat_unique <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatUnique, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatUnique <- ggproto("StatUnique", Stat, compute_panel = function(data, scales) unique(data) ) ggplot2/R/scale-discrete-.r0000644000175100001440000001150212620213623015172 0ustar hornikusers#' Discrete position. #' #' You can use continuous positions even with a discrete position scale - #' this allows you (e.g.) to place labels between bars in a bar chart. #' Continuous positions are numeric values starting at one for the first #' level, and increasing by one for each level (i.e. the labels are placed #' at integer positions). This is what allows jittering to work. #' #' @param ... common discrete scale parameters: \code{name}, \code{breaks}, #' \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See #' \code{\link{discrete_scale}} for more details #' @param expand a numeric vector of length two giving multiplicative and #' additive expansion constants. These constants ensure that the data is #' placed some distance away from the axes. #' @rdname scale_discrete #' @export #' @examples #' \donttest{ #' ggplot(diamonds, aes(cut)) + stat_bin() #' ggplot(diamonds, aes(cut)) + geom_bar() #' #' # The discrete position scale is added automatically whenever you #' # have a discrete position. #' #' (d <- ggplot(subset(diamonds, carat > 1), aes(cut, clarity)) + #' geom_jitter()) #' #' d + scale_x_discrete("Cut") #' d + scale_x_discrete("Cut", labels = c("Fair" = "F","Good" = "G", #' "Very Good" = "VG","Perfect" = "P","Ideal" = "I")) #' #' d + scale_y_discrete("Clarity") #' d + scale_x_discrete("Cut") + scale_y_discrete("Clarity") #' #' # Use limits to adjust the which levels (and in what order) #' # are displayed #' d + scale_x_discrete(limits=c("Fair","Ideal")) #' #' # you can also use the short hand functions xlim and ylim #' d + xlim("Fair","Ideal", "Good") #' d + ylim("I1", "IF") #' #' # See ?reorder to reorder based on the values of another variable #' ggplot(mpg, aes(manufacturer, cty)) + geom_point() #' ggplot(mpg, aes(reorder(manufacturer, cty), cty)) + geom_point() #' ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + geom_point() #' #' # Use abbreviate as a formatter to reduce long names #' ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + #' geom_point() + #' scale_x_discrete(labels = abbreviate) #' } scale_x_discrete <- function(..., expand = waiver()) { sc <- discrete_scale(c("x", "xmin", "xmax", "xend"), "position_d", identity, ..., expand = expand, guide = "none") # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleDiscretePosition class(sc) <- class(ScaleDiscretePosition) sc$range_c <- continuous_range() sc } #' @rdname scale_discrete #' @export scale_y_discrete <- function(..., expand = waiver()) { sc <- discrete_scale(c("y", "ymin", "ymax", "yend"), "position_d", identity, ..., expand = expand, guide = "none") # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleDiscretePosition class(sc) <- class(ScaleDiscretePosition) sc$range_c <- continuous_range() sc } # The discrete position scale maintains two separate ranges - one for # continuous data and one for discrete data. This complicates training and # mapping, but makes it possible to place objects at non-integer positions, # as is necessary for jittering etc. #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleDiscretePosition <- ggproto("ScaleDiscretePosition", ScaleDiscrete, train = function(self, x) { if (is.discrete(x)) { self$range$train(x, drop = self$drop) } else { self$range_c$train(x) } }, # If range not available from discrete range, implies discrete scale been # used with purely continuous data, so construct limits accordingly get_limits = function(self) { if (self$is_empty()) return(c(0, 1)) dis_limits <- function(x) seq.int(floor(min(x)), ceiling(max(x)), by = 1L) self$limits %||% self$range$range %||% dis_limits(self$range_c$range) }, is_empty = function(self) { is.null(self$range$range) && is.null(self$limits) && is.null(self$range_c$range) }, reset = function(self) { # Can't reset discrete scale because no way to recover values self$range_c$reset() }, map = function(self, x, limits = self$get_limits()) { if (is.discrete(x)) { seq_along(limits)[match(as.character(x), limits)] } else { x } }, dimension = function(self, expand = c(0, 0)) { disc_range <- c(1, length(self$get_limits())) disc <- expand_range(disc_range, 0, expand[2], 1) # if no data was trained (i.e. range_c is infinite) return disc range if (any(is.infinite(self$range_c$range))) { return(disc) } cont <- expand_range(self$range_c$range, expand[1], 0, expand[2]) range(disc, cont) }, clone = function(self) { new <- ggproto(NULL, self) new$range <- discrete_range() new$range_c <- continuous_range() new } ) ggplot2/R/facet-.r0000644000175100001440000000317412555701147013405 0ustar hornikusers#' Facet specification. #' #' Create new facetting specification. For internal use only. #' #' @param ... object fields #' @param shrink shrink scales to fit output of statistics, not raw data #' @keywords internal #' @export facet <- function(..., shrink = TRUE, subclass = c()) { structure(list(..., shrink = shrink), class = c(subclass, "facet")) } #' Is this object a facetting specification? #' #' @param x object to test #' @keywords internal #' @export is.facet <- function(x) inherits(x, "facet") # Figure out layout from data from plot and all layers. # # This creates the layout data frame which maps from data values to # panel coordinates: ROW, COL and PANEL. It also records the panels that # contribute to each x and y scale. # # @param data a list of data frames (one for the plot and one for each # layer) facet_train_layout <- function(facet, data) UseMethod("facet_train_layout") facet_map_layout <- function(facet, data, layout) UseMethod("facet_map_layout") facet_render <- function(facet, panels_grob, coord, theme, geom_grobs) UseMethod("facet_render") facet_strips <- function(facet, panel, theme) UseMethod("facet_strips") facet_panels <- function(facet, panel, coord, theme, geom_grobs) UseMethod("facet_panels") facet_axes <- function(facet, panel, coord, theme) UseMethod("facet_axes") # Text description of facetting variables facet_vars <- function(facet) UseMethod("facet_vars") #' @export format.facet <- function(x, ...) { name <- paste(rev(class(x)), collapse = "_") paste(name, "(", facet_vars(x), ")", sep = "") } #' @export print.facet <- function(x, ...) { cat(format(x, ...), "\n") } ggplot2/R/stat-bindot.r0000644000175100001440000001354412633015767014503 0ustar hornikusers#' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBindot <- ggproto("StatBindot", Stat, required_aes = "x", non_missing_aes = "weight", default_aes = aes(y = ..count..), setup_params = function(data, params) { if (is.null(params$breaks) && is.null(params$binwidth)) { message("`stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.") } params }, compute_layer = function(self, data, params, panels) { data <- remove_missing(data, params$na.rm, params$binaxis, snake_class(self), finite = TRUE ) ggproto_parent(Stat, self)$compute_layer(data, params, panels) }, compute_panel = function(self, data, scales, na.rm = FALSE, binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", origin = NULL, breaks = NULL, width = 0.9, drop = FALSE, right = TRUE) { # If using dotdensity and binning over all, we need to find the bin centers # for all data before it's split into groups. if (method == "dotdensity" && binpositions == "all") { if (binaxis == "x") { newdata <- densitybin(x = data$x, weight = data$weight, binwidth = binwidth, method = method) data <- plyr::arrange(data, x) newdata <- plyr::arrange(newdata, x) } else if (binaxis == "y") { newdata <- densitybin(x = data$y, weight = data$weight, binwidth = binwidth, method = method) data <- plyr::arrange(data, y) newdata <- plyr::arrange(newdata, x) } data$bin <- newdata$bin data$binwidth <- newdata$binwidth data$weight <- newdata$weight data$bincenter <- newdata$bincenter } ggproto_parent(Stat, self)$compute_panel(data, scales, binwidth = binwidth, binaxis = binaxis, method = method, binpositions = binpositions, origin = origin, breaks = breaks, width = width, drop = drop, right = right) }, compute_group = function(self, data, scales, binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", origin = NULL, breaks = NULL, width = 0.9, drop = FALSE, right = TRUE) { # This function taken from integer help page is.wholenumber <- function(x, tol = .Machine$double.eps ^ 0.5) { abs(x - round(x)) < tol } # Check that weights are whole numbers (for dots, weights must be whole) if (!is.null(data$weight) && any(!is.wholenumber(data$weight)) && any(data$weight < 0)) { stop("Weights for stat_bindot must be nonnegative integers.") } if (binaxis == "x") { range <- scales$x$dimension() values <- data$x } else if (binaxis == "y") { range <- scales$y$dimension() values <- data$y # The middle of each group, on the stack axis midline <- mean(range(data$x)) } if (method == "histodot") { # Use the function from stat_bin data <- bin(x = values, weight = data$weight, binwidth = binwidth, origin = origin, breaks = breaks, range = range, width = width, drop = drop, right = right) # Change "width" column to "binwidth" for consistency names(data)[names(data) == "width"] <- "binwidth" names(data)[names(data) == "x"] <- "bincenter" } else if (method == "dotdensity") { # If bin centers are found by group instead of by all, find the bin centers # (If binpositions=="all", then we'll already have bin centers.) if (binpositions == "bygroup") data <- densitybin(x = values, weight = data$weight, binwidth = binwidth, method = method, range = range) # Collapse each bin and get a count data <- plyr::ddply(data, "bincenter", plyr::summarise, binwidth = binwidth[1], count = sum(weight)) if (sum(data$count, na.rm = TRUE) != 0) { data$count[is.na(data$count)] <- 0 data$ncount <- data$count / max(abs(data$count), na.rm = TRUE) if (drop) data <- subset(data, count > 0) } } if (binaxis == "x") { names(data)[names(data) == "bincenter"] <- "x" # For x binning, the width of the geoms is same as the width of the bin data$width <- data$binwidth } else if (binaxis == "y") { names(data)[names(data) == "bincenter"] <- "y" # For y binning, set the x midline. This is needed for continuous x axis data$x <- midline } return(data) } ) # This does density binning, but does not collapse each bin with a count. # It returns a data frame with the original data (x), weights, bin #, and the bin centers. densitybin <- function(x, weight = NULL, binwidth = NULL, method = method, range = NULL) { if (length(stats::na.omit(x)) == 0) return(data.frame()) if (is.null(weight)) weight <- rep(1, length(x)) weight[is.na(weight)] <- 0 if (is.null(range)) range <- range(x, na.rm = TRUE, finite = TRUE) if (is.null(binwidth)) binwidth <- diff(range) / 30 # Sort weight and x, by x weight <- weight[order(x)] x <- x[order(x)] cbin <- 0 # Current bin ID bin <- rep.int(NA, length(x)) # The bin ID for each observation binend <- -Inf # End position of current bin (scan left to right) # Scan list and put dots in bins for (i in 1:length(x)) { # If past end of bin, start a new bin at this point if (x[i] >= binend) { binend <- x[i] + binwidth cbin <- cbin + 1 } bin[i] <- cbin } results <- data.frame(x, bin, binwidth, weight) results <- plyr::ddply(results, "bin", function(df) { df$bincenter = (min(df$x) + max(df$x)) / 2 return(df) }) return(results) } ggplot2/R/aes-calculated.r0000644000175100001440000000250212555701147015107 0ustar hornikusers# Regex to determine if an identifier refers to a calculated aesthetic match_calculated_aes <- "^\\.\\.([a-zA-Z._]+)\\.\\.$" # Determine if aesthetic is calculated is_calculated_aes <- function(aesthetics) { vars <- lapply(aesthetics, find_vars) vapply(vars, function(x) any(grepl(match_calculated_aes, x)), logical(1)) } find_vars <- function(expr) { if (is.name(expr)) { as.character(expr) } else if (is.atomic(expr)) { character() } else if (is.call(expr)) { unlist(lapply(expr[-1], find_vars)) } else if (is.pairlist(expr)) { # In the unlikely event of an anonymous function unlist(lapply(expr, find_vars)) } else { stop("Unknown input:", class(expr)[1]) } } # Strip dots from expressions strip_dots <- function(expr) { if (is.atomic(expr)) { expr } else if (is.name(expr)) { expr_ch <- as.character(expr) if (nchar(expr_ch) > 0) { as.name(gsub(match_calculated_aes, "\\1", expr_ch)) } else { expr } } else if (is.call(expr)) { expr[-1] <- lapply(expr[-1], strip_dots) expr } else if (is.pairlist(expr)) { # In the unlikely event of an anonymous function as.pairlist(lapply(expr, strip_dots)) } else if (is.list(expr)) { # For list of aesthetics lapply(expr, strip_dots) } else { stop("Unknown input:", class(expr)[1]) } } ggplot2/R/coord-munch.r0000644000175100001440000001623712567630451014472 0ustar hornikusers#' Munch coordinates data #' #' This function "munches" lines, dividing each line into many small pieces #' so they can be transformed independently. Used inside geom functions. #' #' @param coord Coordinate system definition. #' @param data Data set to transform - should have variables \code{x} and #' \code{y} are chopped up into small pieces (as defined by \code{group}). #' All other variables are duplicated as needed. #' @param range Panel range specification. #' @param segment_length Target segment length #' @keywords internal #' @export coord_munch <- function(coord, data, range, segment_length = 0.01) { if (coord$is_linear()) return(coord$transform(data, range)) # range has theta and r values; get corresponding x and y values ranges <- coord$range(range) # Convert any infinite locations into max/min # Only need to work with x and y because for munching, those are the # only position aesthetics that are transformed data$x[data$x == -Inf] <- ranges$x[1] data$x[data$x == Inf] <- ranges$x[2] data$y[data$y == -Inf] <- ranges$y[1] data$y[data$y == Inf] <- ranges$y[2] # Calculate distances using coord distance metric dist <- coord$distance(data$x, data$y, range) dist[data$group[-1] != data$group[-nrow(data)]] <- NA # Munch and then transform result munched <- munch_data(data, dist, segment_length) coord$transform(munched, range) } # For munching, only grobs are lines and polygons: everything else is # transformed into those special cases by the geom. # # @param dist distance, scaled from 0 to 1 (maximum distance on plot) # @keyword internal munch_data <- function(data, dist = NULL, segment_length = 0.01) { n <- nrow(data) if (is.null(dist)) { data <- add_group(data) dist <- dist_euclidean(data$x, data$y) } # How many endpoints for each old segment, not counting the last one extra <- pmax(floor(dist / segment_length), 1) extra[is.na(extra)] <- 1 # Generate extra pieces for x and y values # The final point must be manually inserted at the end x <- c(unlist(mapply(interp, data$x[-n], data$x[-1], extra, SIMPLIFY = FALSE)), data$x[n]) y <- c(unlist(mapply(interp, data$y[-n], data$y[-1], extra, SIMPLIFY = FALSE)), data$y[n]) # Replicate other aesthetics: defined by start point but also # must include final point id <- c(rep(seq_len(nrow(data) - 1), extra), nrow(data)) aes_df <- data[id, setdiff(names(data), c("x", "y")), drop = FALSE] plyr::unrowname(data.frame(x = x, y = y, aes_df)) } # Interpolate. # Interpolate n-1 evenly spaced steps (n points) from start to # (end - (end - start) / n). end is never included in sequence. interp <- function(start, end, n) { if (n == 1) return(start) start + seq(0, 1, length.out = n + 1)[-(n + 1)] * (end - start) } # Euclidean distance between points. # NA indicates a break / terminal points dist_euclidean <- function(x, y) { n <- length(x) sqrt((x[-n] - x[-1]) ^ 2 + (y[-n] - y[-1]) ^ 2) } # Compute central angle between two points. # Multiple by radius of sphere to get great circle distance # @arguments longitude # @arguments latitude dist_central_angle <- function(lon, lat) { # Convert to radians lat <- lat * pi / 180 lon <- lon * pi / 180 hav <- function(x) sin(x / 2) ^ 2 ahav <- function(x) 2 * asin(x) n <- length(lat) ahav(sqrt(hav(diff(lat)) + cos(lat[-n]) * cos(lat[-1]) * hav(diff(lon)))) } # Polar dist. # Polar distance between points. This does not give the straight-line # distance between points in polar space. Instead, it gives the distance # along lines that _were_ straight in cartesian space, but have been # warped into polar space. These lines are all spiral arcs, circular # arcs, or segments of rays. dist_polar <- function(r, theta) { # Pretending that theta is x and r is y, find the slope and intercepts # for each line segment. # This is just like finding the x-intercept of a line in cartesian coordinates. lf <- find_line_formula(theta, r) # Rename x and y columns to r and t, since we're working in polar # Note that 'slope' actually means the spiral slope, 'a' in the spiral # formula r = a * theta lf <- plyr::rename(lf, c(x1 = "t1", x2 = "t2", y1 = "r1", y2 = "r2", yintercept = "r_int", xintercept = "t_int"), warn_missing = FALSE) # Re-normalize the theta values so that intercept for each is 0 # This is necessary for calculating spiral arc length. # If the formula is r=a*theta, there's a big difference between # calculating the arc length from theta = 0 to pi/2, vs. # theta = 2*pi to pi/2 lf$tn1 <- lf$t1 - lf$t_int lf$tn2 <- lf$t2 - lf$t_int # Add empty distance column lf$dist <- NA_real_ # There are three types of lines, which we handle in turn: # - Spiral arcs (r and theta change) # - Circular arcs (r is constant) # - Rays (theta is constant) # Get spiral arc length for segments that have non-zero, non-infinite slope # (spiral_arc_length only works for actual spirals, not circle arcs or rays) # Use the _normalized_ theta values for arc length calculation # Also make sure to ignore NA's because they cause problems when used on left # side assignment. idx <- !is.na(lf$slope) & lf$slope != 0 & !is.infinite(lf$slope) idx[is.na(idx)] <- FALSE lf$dist[idx] <- spiral_arc_length(lf$slope[idx], lf$tn1[idx], lf$tn2[idx]) # Get circular arc length for segments that have zero slope (r1 == r2) idx <- !is.na(lf$slope) & lf$slope == 0 lf$dist[idx] <- lf$r1[idx] * (lf$t2[idx] - lf$t1[idx]) # Get radial length for segments that have infinite slope (t1 == t2) idx <- !is.na(lf$slope) & is.infinite(lf$slope) lf$dist[idx] <- lf$r1[idx] - lf$r2[idx] # Find the maximum possible length, a spiral line from # (r=0, theta=0) to (r=1, theta=2*pi) max_dist <- spiral_arc_length(1 / (2 * pi), 0, 2 * pi) # Final distance values, normalized abs(lf$dist / max_dist) } # Given n points, find the slope, xintercept, and yintercept of # the lines connecting them. # # This returns a data frame with length(x)-1 rows # # @param x A vector of x values # @param y A vector of y values # @examples # find_line_formula(c(4, 7), c(1, 5)) # find_line_formula(c(4, 7, 9), c(1, 5, 3)) find_line_formula <- function(x, y) { slope <- diff(y) / diff(x) yintercept <- y[-1] - (slope * x[-1]) xintercept <- x[-1] - (y[-1] / slope) data.frame(x1 = x[-length(x)], y1 = y[-length(y)], x2 = x[-1], y2 = y[-1], slope = slope, yintercept = yintercept, xintercept = xintercept) } # Spiral arc length # # Each segment consists of a spiral line of slope 'a' between angles # 'theta1' and 'theta2'. Because each segment has its own _normalized_ # slope, the ending theta2 value may not be the same as the starting # theta1 value of the next point. # # @param a A vector of spiral "slopes". Each spiral is defined as r = a * theta. # @param theta1 A vector of starting theta values. # @param theta2 A vector of ending theta values. # @examples # spiral_arc_length(a = c(0.2, 0.5), c(0.5 * pi, pi), c(pi, 1.25 * pi)) spiral_arc_length <- function(a, theta1, theta2) { # Archimedes' spiral arc length formula from # http://mathworld.wolfram.com/ArchimedesSpiral.html 0.5 * a * ( (theta1 * sqrt(1 + theta1 * theta1) + asinh(theta1)) - (theta2 * sqrt(1 + theta2 * theta2) + asinh(theta2))) } ggplot2/R/data.R0000644000175100001440000001515612567363540013126 0ustar hornikusers#' Prices of 50,000 round cut diamonds #' #' A dataset containing the prices and other attributes of almost 54,000 #' diamonds. The variables are as follows: #' #' @format A data frame with 53940 rows and 10 variables: #' \itemize{ #' \item price: price in US dollars (\$326--\$18,823) #' \item carat: weight of the diamond (0.2--5.01) #' \item cut: quality of the cut (Fair, Good, Very Good, Premium, Ideal) #' \item color: diamond colour, from J (worst) to D (best) #' \item clarity: a measurement of how clear the diamond is #' (I1 (worst), SI1, SI2, VS1, VS2, VVS1, VVS2, IF (best)) #' \item x: length in mm (0--10.74) #' \item y: width in mm (0--58.9) #' \item z: depth in mm (0--31.8) #' \item depth: total depth percentage = z / mean(x, y) = 2 * z / (x + y) (43--79) #' \item table: width of top of diamond relative to widest point (43--95) #' } "diamonds" #' US economic time series. #' #' This dataset was produced from US economic time series data available from #' \url{http://research.stlouisfed.org/fred2}. \code{economics} is in "wide" #' format, \code{economics_long} is in "long" format. #' #' @format A data frame with 478 rows and 6 variables #' \itemize{ #' \item date. Month of data collection #' \item psavert, personal savings rate, #' \url{http://research.stlouisfed.org/fred2/series/PSAVERT/} #' \item pce, personal consumption expenditures, in billions of dollars, #' \url{http://research.stlouisfed.org/fred2/series/PCE} #' \item unemploy, number of unemployed in thousands, #' \url{http://research.stlouisfed.org/fred2/series/UNEMPLOY} #' \item uempmed, median duration of unemployment, in week, #' \url{http://research.stlouisfed.org/fred2/series/UEMPMED} #' \item pop, total population, in thousands, #' \url{http://research.stlouisfed.org/fred2/series/POP} #' } #' "economics" #' @rdname economics "economics_long" #' Midwest demographics. #' #' Demographic information of midwest counties #' #' @format A data frame with 437 rows and 28 variables #' \itemize{ #' \item PID #' \item county #' \item state #' \item area #' \item poptotal. Total population #' \item popdensity. Population density #' \item popwhite. Number of whites. #' \item popblack. Number of blacks. #' \item popamerindian. Number of American Indians. #' \item popasian. Number of Asians. #' \item popother. Number of other races. #' \item percwhite. Percent white. #' \item percblack. Percent black. #' \item percamerindan. Percent American Indian. #' \item percasian. Percent Asian. #' \item percother. Percent other races. #' \item popadults. Number of adults. #' \item perchsd. #' \item percollege. Percent college educated. #' \item percprof. Percent profession. #' \item poppovertyknown. #' \item percpovertyknown #' \item percbelowpoverty #' \item percchildbelowpovert #' \item percadultpoverty #' \item percelderlypoverty #' \item inmetro. In a metro area. #' \item category' #' } #' "midwest" #' Fuel economy data from 1999 and 2008 for 38 popular models of car #' #' This dataset contains a subset of the fuel economy data that the EPA makes #' available on \url{http://fueleconomy.gov}. It contains only models which #' had a new release every year between 1999 and 2008 - this was used as a #' proxy for the popularity of the car. #' #' @format A data frame with 234 rows and 11 variables #' \itemize{ #' \item manufacturer. #' \item model. #' \item displ. engine displacement, in litres #' \item year. #' \item cyl. number of cylinders #' \item trans. type of transmission #' \item drv. f = front-wheel drive, r = rear wheel drive, 4 = 4wd #' \item cty. city miles per gallon #' \item hwy. highway miles per gallon #' \item fl. #' \item class. #' } "mpg" #' An updated and expanded version of the mammals sleep dataset. #' #' This is an updated and expanded version of the mammals sleep dataset. #' Updated sleep times and weights were taken from V. M. Savage and G. B. #' West. A quantitative, theoretical framework for understanding mammalian #' sleep. Proceedings of the National Academy of Sciences, 104 (3):1051-1056, #' 2007. #' #' Additional variables order, conservation status and vore were added from #' wikipedia. #' #' @format A data frame with 83 rows and 11 variables #' \itemize{ #' \item name. common name #' \item genus. #' \item vore. carnivore, omnivore or herbivore? #' \item order. #' \item conservation. the conservation status of the animal #' \item sleep\_total. total amount of sleep, in hours #' \item sleep\_rem. rem sleep, in hours #' \item sleep\_cycle. length of sleep cycle, in hours #' \item awake. amount of time spent awake, in hours #' \item brainwt. brain weight in kilograms #' \item bodywt. body weight in kilograms #' } "msleep" #' Terms of 10 presidents from Eisenhower to Bush W. #' #' The names of each president, the start and end date of their term, and #' their party of 10 US presidents from Eisenhower to Bush W. #' #' @format A data frame with 10 rows and 4 variables "presidential" #' Vector field of seal movements. #' #' This vector field was produced from the data described in Brillinger, D.R., #' Preisler, H.K., Ager, A.A. and Kie, J.G. "An exploratory data analysis #' (EDA) of the paths of moving animals". J. Statistical Planning and #' Inference 122 (2004), 43-63, using the methods of Brillinger, D.R., #' "Learning a potential function from a trajectory", Signal Processing #' Letters. December (2007). #' #' @format A data frame with 1155 rows and 4 variables #' @references \url{http://www.stat.berkeley.edu/~brill/Papers/jspifinal.pdf} "seals" #' 2d density estimate of Old Faithful data #' #' A 2d density estimate of the waiting and eruptions variables data #' \link{faithful}. #' #' @format A data frame with 5,625 observations and 3 variables. "faithfuld" #' \code{colors()} in Luv space. #' #' All built-in \code{\link{colors}()} translated into Luv colour space. #' #' @format A data frame with 657 observations and 4 variables: #' \itemize{ #' \item{L,u,v}{Position in Luv colour space} #' \item{col}{Colour name} #' } "luv_colours" #' Housing sales in TX. #' #' Information about the housing market in Texas provided by the TAMU #' real estate center, \url{http://recenter.tamu.edu/}. #' #' @format A data frame with 8602 observations and 9 variables: #' \itemize{ #' \item{city}{Name of MLS area} #' \item{year,month,date}{Date} #' \item{sales}{Number of sales} #' \item{volume}{Total value of sales} #' \item{median}{Median sale price} #' \item{listings}{Total active listings} #' \item{inventory}{"Months inventory": amount of time it would take to sell #' all current listings at current pace of sales.} #' } "txhousing" ggplot2/R/geom-density.r0000644000175100001440000000443712607210425014645 0ustar hornikusers#' Display a smooth density estimate. #' #' A kernel density estimate, useful for display the distribution of variables #' with underlying smoothness. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "density")} #' #' @seealso See \code{\link{geom_histogram}}, \code{\link{geom_freqpoly}} for #' other methods of displaying continuous distribution. #' See \code{\link{geom_violin}} for a compact density display. #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_density} and \code{stat_density}. #' @export #' @examples #' ggplot(diamonds, aes(carat)) + #' geom_density() #' #' ggplot(diamonds, aes(carat)) + #' geom_density(adjust = 1/5) #' ggplot(diamonds, aes(carat)) + #' geom_density(adjust = 5) #' #' ggplot(diamonds, aes(depth, colour = cut)) + #' geom_density() + #' xlim(55, 70) #' ggplot(diamonds, aes(depth, fill = cut, colour = cut)) + #' geom_density(alpha = 0.1) + #' xlim(55, 70) #' #' \donttest{ #' # Stacked density plots: if you want to create a stacked density plot, you #' # probably want to 'count' (density * n) variable instead of the default #' # density #' #' # Loses marginal densities #' ggplot(diamonds, aes(carat, fill = cut)) + #' geom_density(position = "stack") #' # Preserves marginal densities #' ggplot(diamonds, aes(carat, ..count.., fill = cut)) + #' geom_density(position = "stack") #' #' # You can use position="fill" to produce a conditional density estimate #' ggplot(diamonds, aes(carat, ..count.., fill = cut)) + #' geom_density(position = "fill") #' } geom_density <- function(mapping = NULL, data = NULL, stat = "density", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomDensity, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-ribbon.r GeomDensity <- ggproto("GeomDensity", GeomArea, default_aes = defaults( aes(fill = NA, weight = 1, colour = "black", alpha = NA), GeomArea$default_aes ) ) ggplot2/R/geom-errorbar.r0000644000175100001440000000312512607210552014776 0ustar hornikusers#' @export #' @rdname geom_linerange geom_errorbar <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomErrorbar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomErrorbar <- ggproto("GeomErrorbar", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, width = 0.5, alpha = NA), draw_key = draw_key_path, required_aes = c("x", "ymin", "ymax"), setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) transform(data, xmin = x - width / 2, xmax = x + width / 2, width = NULL ) }, draw_panel = function(data, panel_scales, coord, width = NULL) { GeomPath$draw_panel(data.frame( x = as.vector(rbind(data$xmin, data$xmax, NA, data$x, data$x, NA, data$xmin, data$xmax)), y = as.vector(rbind(data$ymax, data$ymax, NA, data$ymax, data$ymin, NA, data$ymin, data$ymin)), colour = rep(data$colour, each = 8), alpha = rep(data$alpha, each = 8), size = rep(data$size, each = 8), linetype = rep(data$linetype, each = 8), group = rep(1:(nrow(data)), each = 8), stringsAsFactors = FALSE, row.names = 1:(nrow(data) * 8) ), panel_scales, coord) } ) ggplot2/R/guide-colorbar.r0000644000175100001440000003610012607030346015131 0ustar hornikusers#' Continuous colour bar guide. #' #' Colour bar guide shows continuous color scales mapped onto values. #' Colour bar is available with \code{scale_fill} and \code{scale_colour}. #' For more information, see the inspiration for this function: #' \href{http://www.mathworks.com/help/techdoc/ref/colorbar.html}{Matlab's colorbar function}. #' #' Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. #' \code{guide="legend"} in \code{scale_*} is syntactic sugar for #' \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). #' As for how to specify the guide for each scale in more detail, #' see \code{\link{guides}}. #' #' @inheritParams guide_legend #' @param barwidth A numeric or a \code{\link[grid]{unit}} object specifying #' the width of the colorbar. Default value is \code{legend.key.width} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param barheight A numeric or a \code{\link[grid]{unit}} object specifying #' the height of the colorbar. Default value is \code{legend.key.height} or #' \code{legend.key.size} in \code{\link{theme}} or theme. #' @param nbin A numeric specifying the number of bins for drawing colorbar. A #' smoother colorbar for a larger value. #' @param raster A logical. If \code{TRUE} then the colorbar is rendered as a #' raster object. If \code{FALSE} then the colorbar is rendered as a set of #' rectangles. Note that not all graphics devices are capable of rendering #' raster image. #' @param ticks A logical specifying if tick marks on colorbar should be #' visible. #' @param draw.ulim A logical specifying if the upper limit tick marks should #' be visible. #' @param draw.llim A logical specifying if the lower limit tick marks should #' be visible. #' @param direction A character string indicating the direction of the guide. #' One of "horizontal" or "vertical." #' @param default.unit A character string indicating \code{\link[grid]{unit}} #' for \code{barwidth} and \code{barheight}. #' @param reverse logical. If \code{TRUE} the colorbar is reversed. By default, #' the highest value is on the top and the lowest value is on the bottom #' @param ... ignored. #' @return A guide object #' @export #' @family guides #' @examples #' df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) #' #' p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) #' p2 <- p1 + geom_point(aes(size = value)) #' #' # Basic form #' p1 + scale_fill_continuous(guide = "colorbar") #' p1 + scale_fill_continuous(guide = guide_colorbar()) #' p1 + guides(fill = guide_colorbar()) #' #' # Control styles #' #' # bar size #' p1 + guides(fill = guide_colorbar(barwidth = 0.5, barheight = 10)) #' #' # no label #' p1 + guides(fill = guide_colorbar(label = FALSE)) #' #' # no tick marks #' p1 + guides(fill = guide_colorbar(ticks = FALSE)) #' #' # label position #' p1 + guides(fill = guide_colorbar(label.position = "left")) #' #' # label theme #' p1 + guides(fill = guide_colorbar(label.theme = element_text(colour = "blue", angle = 0))) #' #' # small number of bins #' p1 + guides(fill = guide_colorbar(nbin = 3)) #' #' # large number of bins #' p1 + guides(fill = guide_colorbar(nbin = 100)) #' #' # make top- and bottom-most ticks invisible #' p1 + scale_fill_continuous(limits = c(0,20), breaks=c(0, 5, 10, 15, 20), #' guide = guide_colorbar(nbin=100, draw.ulim = FALSE, draw.llim = FALSE)) #' #' # guides can be controlled independently #' p2 + #' scale_fill_continuous(guide = "colorbar") + #' scale_size(guide = "legend") #' p2 + guides(fill = "colorbar", size = "legend") #' #' p2 + #' scale_fill_continuous(guide = guide_colorbar(direction = "horizontal")) + #' scale_size(guide = guide_legend(direction = "vertical")) guide_colourbar <- function( # title title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, # label label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, # bar barwidth = NULL, barheight = NULL, nbin = 20, raster = TRUE, # ticks ticks = TRUE, draw.ulim= TRUE, draw.llim = TRUE, # general direction = NULL, default.unit = "line", reverse = FALSE, order = 0, ...) { if (!is.null(barwidth) && !is.unit(barwidth)) barwidth <- unit(barwidth, default.unit) if (!is.null(barheight) && !is.unit(barheight)) barheight <- unit(barheight, default.unit) structure(list( # title title = title, title.position = title.position, title.theme = title.theme, title.hjust = title.hjust, title.vjust = title.vjust, # label label = label, label.position = label.position, label.theme = label.theme, label.hjust = label.hjust, label.vjust = label.vjust, # bar barwidth = barwidth, barheight = barheight, nbin = nbin, raster = raster, # ticks ticks = ticks, draw.ulim = draw.ulim, draw.llim = draw.llim, # general direction = direction, default.unit = default.unit, reverse = reverse, order = order, # parameter available_aes = c("colour", "color", "fill"), ..., name = "colorbar"), class = c("guide", "colorbar") ) } #' @export guide_train.colorbar <- function(guide, scale) { # do nothing if scale are inappropriate if (length(intersect(scale$aesthetics, c("color", "colour", "fill"))) == 0) { warning("colorbar guide needs colour or fill scales.") return(NULL) } if (scale$is_discrete()) { warning("colorbar guide needs continuous scales.") return(NULL) } # create data frame for tick display breaks <- scale$get_breaks() if (length(breaks) == 0 || all(is.na(breaks))) return() ticks <- as.data.frame(setNames(list(scale$map(breaks)), scale$aesthetics[1])) ticks$.value <- breaks ticks$.label <- scale$get_labels(breaks) guide$key <- ticks # bar specification (number of divs etc) .limits <- scale$get_limits() .bar <- discard(pretty(.limits, n = guide$nbin), scale$get_limits()) if (length(.bar) == 0) { .bar = unique(.limits) } guide$bar <- data.frame(colour = scale$map(.bar), value = .bar, stringsAsFactors = FALSE) if (guide$reverse) { guide$key <- guide$key[nrow(guide$key):1, ] guide$bar <- guide$bar[nrow(guide$bar):1, ] } guide$hash <- with(guide, digest::digest(list(title, key$.label, bar, name))) guide } # simply discards the new guide #' @export guide_merge.colorbar <- function(guide, new_guide) { guide } # this guide is not geom-based. #' @export guide_geom.colorbar <- function(guide, ...) { guide } #' @export guide_gengrob.colorbar <- function(guide, theme) { # settings of location and size switch(guide$direction, "horizontal" = { label.position <- guide$label.position %||% "bottom" if (!label.position %in% c("top", "bottom")) stop("label position \"", label.position, "\" is invalid") barwidth <- convertWidth(guide$barwidth %||% (theme$legend.key.width * 5), "mm") barheight <- convertHeight(guide$barheight %||% theme$legend.key.height, "mm") }, "vertical" = { label.position <- guide$label.position %||% "right" if (!label.position %in% c("left", "right")) stop("label position \"", label.position, "\" is invalid") barwidth <- convertWidth(guide$barwidth %||% theme$legend.key.width, "mm") barheight <- convertHeight(guide$barheight %||% (theme$legend.key.height * 5), "mm") }) barwidth.c <- c(barwidth) barheight.c <- c(barheight) barlength.c <- switch(guide$direction, "horizontal" = barwidth.c, "vertical" = barheight.c) nbreak <- nrow(guide$key) # gap between keys etc hgap <- c(convertWidth(unit(0.3, "lines"), "mm")) vgap <- hgap grob.bar <- if (guide$raster) { image <- switch(guide$direction, horizontal = t(guide$bar$colour), vertical = rev(guide$bar$colour)) rasterGrob(image = image, width = barwidth.c, height = barheight.c, default.units = "mm", gp = gpar(col = NA), interpolate = TRUE) } else { switch(guide$direction, horizontal = { bw <- barwidth.c / nrow(guide$bar) bx <- (seq(nrow(guide$bar)) - 1) * bw rectGrob(x = bx, y = 0, vjust = 0, hjust = 0, width = bw, height = barheight.c, default.units = "mm", gp = gpar(col = NA, fill = guide$bar$colour)) }, vertical = { bh <- barheight.c / nrow(guide$bar) by <- (seq(nrow(guide$bar)) - 1) * bh rectGrob(x = 0, y = by, vjust = 0, hjust = 0, width = barwidth.c, height = bh, default.units = "mm", gp = gpar(col = NA, fill = guide$bar$colour)) }) } # tick and label position tic_pos.c <- rescale(guide$key$.value, c(0.5, guide$nbin - 0.5), guide$bar$value[c(1, nrow(guide$bar))]) * barlength.c / guide$nbin label_pos <- unit(tic_pos.c, "mm") if (!guide$draw.ulim) tic_pos.c <- tic_pos.c[-1] if (!guide$draw.llim) tic_pos.c <- tic_pos.c[-length(tic_pos.c)] # title grob.title <- ggname("guide.title", element_grob( guide$title.theme %||% calc_element("legend.title", theme), label = guide$title, hjust = guide$title.hjust %||% theme$legend.title.align %||% 0, vjust = guide$title.vjust %||% 0.5 ) ) title_width <- convertWidth(grobWidth(grob.title), "mm") title_width.c <- c(title_width) title_height <- convertHeight(grobHeight(grob.title), "mm") title_height.c <- c(title_height) # label label.theme <- guide$label.theme %||% calc_element("legend.text", theme) grob.label <- { if (!guide$label) zeroGrob() else { hjust <- x <- guide$label.hjust %||% theme$legend.text.align %||% if (any(is.expression(guide$key$.label))) 1 else switch(guide$direction, horizontal = 0.5, vertical = 0) vjust <- y <- guide$label.vjust %||% 0.5 switch(guide$direction, horizontal = {x <- label_pos; y <- vjust}, "vertical" = {x <- hjust; y <- label_pos}) label <- guide$key$.label # If any of the labels are quoted language objects, convert them # to expressions. Labels from formatter functions can return these if (any(vapply(label, is.call, logical(1)))) { label <- lapply(label, function(l) { if (is.call(l)) substitute(expression(x), list(x = l)) else l }) label <- do.call(c, label) } g <- element_grob(element = label.theme, label = label, x = x, y = y, hjust = hjust, vjust = vjust) ggname("guide.label", g) } } label_width <- convertWidth(grobWidth(grob.label), "mm") label_width.c <- c(label_width) label_height <- convertHeight(grobHeight(grob.label), "mm") label_height.c <- c(label_height) # ticks grob.ticks <- if (!guide$ticks) zeroGrob() else { switch(guide$direction, "horizontal" = { x0 = rep(tic_pos.c, 2) y0 = c(rep(0, nbreak), rep(barheight.c * (4/5), nbreak)) x1 = rep(tic_pos.c, 2) y1 = c(rep(barheight.c * (1/5), nbreak), rep(barheight.c, nbreak)) }, "vertical" = { x0 = c(rep(0, nbreak), rep(barwidth.c * (4/5), nbreak)) y0 = rep(tic_pos.c, 2) x1 = c(rep(barwidth.c * (1/5), nbreak), rep(barwidth.c, nbreak)) y1 = rep(tic_pos.c, 2) }) segmentsGrob(x0 = x0, y0 = y0, x1 = x1, y1 = y1, default.units = "mm", gp = gpar(col = "white", lwd = 0.5, lineend = "butt")) } # layout of bar and label switch(guide$direction, "horizontal" = { switch(label.position, "top" = { bl_widths <- barwidth.c bl_heights <- c(label_height.c, vgap, barheight.c) vps <- list(bar.row = 3, bar.col = 1, label.row = 1, label.col = 1) }, "bottom" = { bl_widths <- barwidth.c bl_heights <- c(barheight.c, vgap, label_height.c) vps <- list(bar.row = 1, bar.col = 1, label.row = 3, label.col = 1) }) }, "vertical" = { switch(label.position, "left" = { bl_widths <- c(label_width.c, vgap, barwidth.c) bl_heights <- barheight.c vps <- list(bar.row = 1, bar.col = 3, label.row = 1, label.col = 1) }, "right" = { bl_widths <- c(barwidth.c, vgap, label_width.c) bl_heights <- barheight.c vps <- list(bar.row = 1, bar.col = 1, label.row = 1, label.col = 3) }) }) # layout of title and bar+label switch(guide$title.position, "top" = { widths <- c(bl_widths, max(0, title_width.c - sum(bl_widths))) heights <- c(title_height.c, vgap, bl_heights) vps <- with(vps, list(bar.row = bar.row + 2, bar.col = bar.col, label.row = label.row + 2, label.col = label.col, title.row = 1, title.col = 1:length(widths))) }, "bottom" = { widths <- c(bl_widths, max(0, title_width.c - sum(bl_widths))) heights <- c(bl_heights, vgap, title_height.c) vps <- with(vps, list(bar.row = bar.row, bar.col = bar.col, label.row = label.row, label.col = label.col, title.row = length(heights), title.col = 1:length(widths))) }, "left" = { widths <- c(title_width.c, hgap, bl_widths) heights <- c(bl_heights, max(0, title_height.c - sum(bl_heights))) vps <- with(vps, list(bar.row = bar.row, bar.col = bar.col + 2, label.row = label.row, label.col = label.col + 2, title.row = 1:length(heights), title.col = 1)) }, "right" = { widths <- c(bl_widths, hgap, title_width.c) heights <- c(bl_heights, max(0, title_height.c - sum(bl_heights))) vps <- with(vps, list(bar.row = bar.row, bar.col = bar.col, label.row = label.row, label.col = label.col, title.row = 1:length(heights), title.col = length(widths))) }) # background grob.background <- element_render(theme, "legend.background") # padding padding <- unit(1.5, "mm") widths <- c(padding, widths, padding) heights <- c(padding, heights, padding) gt <- gtable(widths = unit(widths, "mm"), heights = unit(heights, "mm")) gt <- gtable_add_grob(gt, grob.background, name = "background", clip = "off", t = 1, r = -1, b = -1, l = 1) gt <- gtable_add_grob(gt, grob.bar, name = "bar", clip = "off", t = 1 + min(vps$bar.row), r = 1 + max(vps$bar.col), b = 1 + max(vps$bar.row), l = 1 + min(vps$bar.col)) gt <- gtable_add_grob(gt, grob.label, name = "label", clip = "off", t = 1 + min(vps$label.row), r = 1 + max(vps$label.col), b = 1 + max(vps$label.row), l = 1 + min(vps$label.col)) gt <- gtable_add_grob(gt, grob.title, name = "title", clip = "off", t = 1 + min(vps$title.row), r = 1 + max(vps$title.col), b = 1 + max(vps$title.row), l = 1 + min(vps$title.col)) gt <- gtable_add_grob(gt, grob.ticks, name = "ticks", clip = "off", t = 1 + min(vps$bar.row), r = 1 + max(vps$bar.col), b = 1 + max(vps$bar.row), l = 1 + min(vps$bar.col)) gt } #' @export #' @rdname guide_colourbar guide_colorbar <- guide_colourbar ggplot2/R/scale-hue.r0000644000175100001440000000414112555710642014107 0ustar hornikusers#' Qualitative colour scale with evenly spaced hues. #' #' @param na.value Colour to use for missing values #' @param ... Other arguments passed on to \code{\link{discrete_scale}} #' to control name, limits, breaks, labels and so forth. #' @inheritParams scales::hue_pal #' @rdname scale_hue #' @export #' @seealso Other colour scales: #' \code{\link{scale_colour_brewer}}, #' \code{\link{scale_colour_gradient}}, #' \code{\link{scale_colour_grey}} #' @examples #' \donttest{ #' dsamp <- diamonds[sample(nrow(diamonds), 1000), ] #' (d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity))) #' #' # Change scale label #' d + scale_colour_hue() #' d + scale_colour_hue("clarity") #' d + scale_colour_hue(expression(clarity[beta])) #' #' # Adjust luminosity and chroma #' d + scale_colour_hue(l=40, c=30) #' d + scale_colour_hue(l=70, c=30) #' d + scale_colour_hue(l=70, c=150) #' d + scale_colour_hue(l=80, c=150) #' #' # Change range of hues used #' d + scale_colour_hue(h=c(0, 90)) #' d + scale_colour_hue(h=c(90, 180)) #' d + scale_colour_hue(h=c(180, 270)) #' d + scale_colour_hue(h=c(270, 360)) #' #' # Vary opacity #' # (only works with pdf, quartz and cairo devices) #' d <- ggplot(dsamp, aes(carat, price, colour = clarity)) #' d + geom_point(alpha = 0.9) #' d + geom_point(alpha = 0.5) #' d + geom_point(alpha = 0.2) #' #' # Colour of missing values is controlled with na.value: #' miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) #' ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = miss)) + #' scale_colour_hue(na.value = "black") #' } scale_colour_hue <- function(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") { discrete_scale("colour", "hue", hue_pal(h, c, l, h.start, direction), na.value = na.value, ...) } #' @rdname scale_hue #' @export scale_fill_hue <- function(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") { discrete_scale("fill", "hue", hue_pal(h, c, l, h.start, direction), na.value = na.value, ...) } ggplot2/R/autoplot.r0000644000175100001440000000134012567364124014111 0ustar hornikusers#' Create a complete ggplot appropriate to a particular data type #' #' \code{autoplot} uses ggplot2 to draw a particular plot for an object of a #' particular class in a single command. This defines the S3 generic that #' other classes and packages can extend. #' #' @param object an object, whose class will determine the behaviour of autoplot #' @param ... other arguments passed to specific methods #' @return a ggplot object #' @export #' @seealso \code{\link{ggplot}} and \code{\link{fortify}} autoplot <- function(object, ...) { UseMethod("autoplot") } #' @export autoplot.default <- function(object, ...) { stop("Objects of type ", paste(class(object), collapse = "/"), " not supported by autoplot.", call. = FALSE) } ggplot2/R/position-stack.r0000644000175100001440000000456312620205457015214 0ustar hornikusers#' Stack overlapping objects on top of one another. #' #' \code{position_fill} additionally standardises each stack to have unit #' height. #' #' @family position adjustments #' @seealso See \code{\link{geom_bar}} and \code{\link{geom_area}} for #' more examples. #' @export #' @examples #' # Stacking is the default behaviour for most area plots: #' ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar() #' # Fill makes it easier to compare proportions #' ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + #' geom_bar(position = "fill") #' #' # To change stacking order, use factor() to change order of levels #' mtcars$vs <- factor(mtcars$vs, levels = c(1,0)) #' ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar() #' #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(binwidth = 500) #' # When used with a histogram, position_fill creates a conditional density #' # estimate #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(binwidth = 500, position = "fill") #' #' # Stacking is also useful for time series #' data.set <- data.frame( #' Time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)), #' Type = rep(c('a', 'b', 'c', 'd'), 4), #' Value = rpois(16, 10) #' ) #' #' ggplot(data.set, aes(Time, Value)) + geom_area(aes(fill = Type)) #' #' # If you want to stack lines, you need to say so: #' ggplot(data.set, aes(Time, Value)) + geom_line(aes(colour = Type)) #' ggplot(data.set, aes(Time, Value)) + #' geom_line(position = "stack", aes(colour = Type)) #' #' # But realise that this makes it *much* harder to compare individual #' # trends position_stack <- function() { PositionStack } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionStack <- ggproto("PositionStack", Position, # requires one of c("ymax", "y"), setup_data = function(self, data, params) { data = remove_missing(data, FALSE, c("x", "y", "ymin", "ymax", "xmin", "xmax"), name = "position_stack") if (is.null(data$ymax) && is.null(data$y)) { message("Missing y and ymax in position = 'stack'. ", "Maybe you want position = 'identity'?") return(data) } if (!is.null(data$ymin) && !all(data$ymin == 0)) warning("Stacking not well defined when ymin != 0", call. = FALSE) data }, compute_panel = function(data, params, scales) { collide(data, NULL, "position_stack", pos_stack) } ) ggplot2/R/geom-density2d.r0000644000175100001440000000443112633013700015061 0ustar hornikusers#' Contours from a 2d density estimate. #' #' Perform a 2D kernel density estimation using kde2d and display the #' results with contours. This can be useful for dealing with overplotting. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "density_2d")} #' #' @seealso \code{\link{geom_contour}} for contour drawing geom, #' \code{\link{stat_sum}} for another way of dealing with overplotting #' @param geom,stat Use to override the default connection between #' \code{geom_density_2d} and \code{stat_density_2d}. #' @inheritParams geom_point #' @inheritParams geom_path #' @export #' @examples #' m <- ggplot(faithful, aes(x = eruptions, y = waiting)) + #' geom_point() + #' xlim(0.5, 6) + #' ylim(40, 110) #' m + geom_density_2d() #' \donttest{ #' m + stat_density_2d(aes(fill = ..level..), geom = "polygon") #' #' set.seed(4393) #' dsmall <- diamonds[sample(nrow(diamonds), 1000), ] #' d <- ggplot(dsmall, aes(x, y)) #' # If you map an aesthetic to a categorical variable, you will get a #' # set of contours for each value of that variable #' d + geom_density_2d(aes(colour = cut)) #' #' # If we turn contouring off, we can use use geoms like tiles: #' d + stat_density_2d(geom = "raster", aes(fill = ..density..), contour = FALSE) #' # Or points: #' d + stat_density_2d(geom = "point", aes(size = ..density..), n = 20, contour = FALSE) #' } geom_density_2d <- function(mapping = NULL, data = NULL, stat = "density2d", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomDensity2d, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_density_2d #' @usage NULL geom_density2d <- geom_density_2d #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomDensity2d <- ggproto("GeomDensity2d", GeomPath, default_aes = aes(colour = "#3366FF", size = 0.5, linetype = 1, alpha = NA) ) ggplot2/R/stat-ellipse.R0000644000175100001440000000752212633014405014604 0ustar hornikusers#' Plot data ellipses. #' #' The method for calculating the ellipses has been modified from #' \code{car::ellipse} (Fox and Weisberg, 2011) #' #' @references John Fox and Sanford Weisberg (2011). An {R} Companion to #' Applied Regression, Second Edition. Thousand Oaks CA: Sage. URL: #' \url{http://socserv.socsci.mcmaster.ca/jfox/Books/Companion} #' @param level The confidence level at which to draw an ellipse (default is 0.95), #' or, if \code{type="euclid"}, the radius of the circle to be drawn. #' @param type The type of ellipse. #' The default \code{"t"} assumes a multivariate t-distribution, and #' \code{"norm"} assumes a multivariate normal distribution. #' \code{"euclid"} draws a circle with the radius equal to \code{level}, #' representing the euclidean distance from the center. #' This ellipse probably won't appear circular unless \code{coord_fixed()} is applied. #' @param segments The number of segments to be used in drawing the ellipse. #' @param na.rm If \code{FALSE} (the default), removes missing values with #' a warning. If \code{TRUE} silently removes missing values. #' @inheritParams stat_identity #' @export #' @examples #' ggplot(faithful, aes(waiting, eruptions)) + #' geom_point() + #' stat_ellipse() #' #' ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + #' geom_point() + #' stat_ellipse() #' #' ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + #' geom_point() + #' stat_ellipse(type = "norm", linetype = 2) + #' stat_ellipse(type = "t") #' #' ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + #' geom_point() + #' stat_ellipse(type = "norm", linetype = 2) + #' stat_ellipse(type = "euclid", level = 3) + #' coord_fixed() #' #' ggplot(faithful, aes(waiting, eruptions, fill = eruptions > 3)) + #' stat_ellipse(geom = "polygon") stat_ellipse <- function(mapping = NULL, data = NULL, geom = "path", position = "identity", type = "t", level = 0.95, segments = 51, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatEllipse, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( type = type, level = level, segments = segments, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatEllipse <- ggproto("StatEllipse", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, type = "t", level = 0.95, segments = 51, na.rm = FALSE) { calculate_ellipse(data = data, vars = c("x", "y"), type = type, level = level, segments = segments) } ) calculate_ellipse <- function(data, vars, type, level, segments){ dfn <- 2 dfd <- nrow(data) - 1 if (!type %in% c("t", "norm", "euclid")) { message("Unrecognized ellipse type") ellipse <- rbind(as.numeric(c(NA, NA))) } else if (dfd < 3) { message("Too few points to calculate an ellipse") ellipse <- rbind(as.numeric(c(NA, NA))) } else { if (type == "t") { v <- MASS::cov.trob(data[,vars]) } else if (type == "norm") { v <- stats::cov.wt(data[,vars]) } else if (type == "euclid") { v <- stats::cov.wt(data[,vars]) v$cov <- diag(rep(min(diag(v$cov)), 2)) } shape <- v$cov center <- v$center chol_decomp <- chol(shape) if (type == "euclid") { radius <- level/max(chol_decomp) } else { radius <- sqrt(dfn * stats::qf(level, dfn, dfd)) } angles <- (0:segments) * 2 * pi/segments unit.circle <- cbind(cos(angles), sin(angles)) ellipse <- t(center + radius * t(unit.circle %*% chol_decomp)) } ellipse <- as.data.frame(ellipse) colnames(ellipse) <- vars ellipse } ggplot2/R/utilities.r0000644000175100001440000001773212613770334014265 0ustar hornikusers#' @export #' @examples #' ggplot(mpg, aes(displ, hwy)) + #' geom_point(alpha = 0.5, colour = "blue") #' #' ggplot(mpg, aes(displ, hwy)) + #' geom_point(colour = alpha("blue", 0.5)) scales::alpha "%||%" <- function(a, b) { if (!is.null(a)) a else b } "%|W|%" <- function(a, b) { if (!is.waive(a)) a else b } # Check required aesthetics are present # This is used by geoms and stats to give a more helpful error message # when required aesthetics are missing. # # @param character vector of required aesthetics # @param character vector of present aesthetics # @param name of object for error message # @keyword internal check_required_aesthetics <- function(required, present, name) { missing_aes <- setdiff(required, present) if (length(missing_aes) == 0) return() stop(name, " requires the following missing aesthetics: ", paste(missing_aes, collapse = ", "), call. = FALSE) } # Concatenate a named list for output # Print a \code{list(a=1, b=2)} as \code{(a=1, b=2)} # # @param list to concatenate # @keyword internal #X clist(list(a=1, b=2)) #X clist(par()[1:5]) clist <- function(l) { paste(paste(names(l), l, sep = " = ", collapse = ", "), sep = "") } try_require <- function(package, fun) { if (requireNamespace(package, quietly = TRUE)) { library(package, character.only = TRUE) return(invisible()) } stop("Package `", package, "` required for `", fun , "`.\n", "Please install and try again.", call. = FALSE) } # Return unique columns # This is used for figuring out which columns are constant within a group # # @keyword internal uniquecols <- function(df) { df <- df[1, sapply(df, function(x) length(unique(x)) == 1), drop = FALSE] rownames(df) <- 1:nrow(df) df } #' Convenience function to remove missing values from a data.frame #' #' Remove all non-complete rows, with a warning if \code{na.rm = FALSE}. #' ggplot is somewhat more accommodating of missing values than R generally. #' For those stats which require complete data, missing values will be #' automatically removed with a warning. If \code{na.rm = TRUE} is supplied #' to the statistic, the warning will be suppressed. #' #' @param df data.frame #' @param na.rm If true, will suppress warning message. #' @param vars Character vector of variables to check for missings in #' @param name Optional function name to improve error message. #' @param finite If \code{TRUE}, will also remove non-finite values. #' @keywords internal #' @export remove_missing <- function(df, na.rm=FALSE, vars = names(df), name="", finite = FALSE) { stopifnot(is.logical(na.rm)) vars <- intersect(vars, names(df)) if (name != "") name <- paste(" (", name, ")", sep = "") if (finite) { missing <- !finite.cases(df[, vars, drop = FALSE]) str <- "non-finite" } else { missing <- !stats::complete.cases(df[, vars, drop = FALSE]) str <- "missing" } if (any(missing)) { df <- df[!missing, ] if (!na.rm) { warning_wrap( "Removed ", sum(missing), " rows containing ", str, " values", name, "." ) } } df } finite.cases <- function(x) UseMethod("finite.cases") # Returns a logical vector of same length as nrow(x). If all data on a row # is finite (not NA, NaN, Inf, or -Inf) return TRUE; otherwise FALSE. #' @export finite.cases.data.frame <- function(x) { finite_cases <- vapply(x, is.finite, logical(nrow(x))) # Need a special case test when x has exactly one row, because rowSums # doesn't respect dimensions for 1x1 matrices. vapply returns a vector (not # a matrix when the input has one row. if (is.vector(finite_cases)) { all(finite_cases) } else { # Find all the rows where all are TRUE rowSums(as.matrix(finite_cases)) == ncol(x) } } #' Used in examples to illustrate when errors should occur. #' #' @param expr code to evaluate. #' @export #' @keywords internal #' @examples #' should_stop(stop("Hi!")) #' should_stop(should_stop("Hi!")) should_stop <- function(expr) { res <- try(print(force(expr)), TRUE) if (!inherits(res, "try-error")) stop("No error!", call. = FALSE) invisible() } #' A waiver object. #' #' A waiver is a "flag" object, similar to \code{NULL}, that indicates the #' calling function should just use the default value. It is used in certain #' functions to distinguish between displaying nothing (\code{NULL}) and #' displaying a default value calculated elsewhere (\code{waiver()}) #' #' @export #' @keywords internal waiver <- function() structure(NULL, class = "waiver") is.waive <- function(x) inherits(x, "waiver") rescale01 <- function(x) { rng <- range(x, na.rm = TRUE) (x - rng[1]) / (rng[2] - rng[1]) } #' Give a deprecation error, warning, or message, depending on version number. #' #' Version numbers have the format .., like 0.9.2. #' This function compares the current version number of ggplot2 against the #' specified \code{version}, which is the most recent version before the #' function (or other object) was deprecated. #' #' \code{gg_dep} will give an error, warning, or message, depending on the #' difference between the current ggplot2 version and the specified #' \code{version}. #' #' If the current major number is greater than \code{version}'s major number, #' or if the current minor number is more than 1 greater than \code{version}'s #' minor number, give an error. #' #' If the current minor number differs from \code{version}'s minor number by #' one, give a warning. #' #' If the current subminor number differs from \code{version}'s subminor #' number, print a message. #' #' @param version The last version of ggplot2 where this function was good #' (in other words, the last version where it was not deprecated). #' @param msg The message to print. #' @keywords internal #' @export gg_dep <- function(version, msg) { v <- as.package_version(version) cv <- utils::packageVersion("ggplot2") # If current major number is greater than last-good major number, or if # current minor number is more than 1 greater than last-good minor number, # give error. if (cv[[1,1]] > v[[1,1]] || cv[[1,2]] > v[[1,2]] + 1) { stop(msg, " (Defunct; last used in version ", version, ")", call. = FALSE) # If minor number differs by one, give warning } else if (cv[[1,2]] > v[[1,2]]) { warning(msg, " (Deprecated; last used in version ", version, ")", call. = FALSE) # If only subminor number is greater, give message } else if (cv[[1,3]] > v[[1,3]]) { message(msg, " (Deprecated; last used in version ", version, ")") } invisible() } has_name <- function(x) { nms <- names(x) if (is.null(nms)) { return(rep(FALSE, length(x))) } !is.na(nms) & nms != "" } # Convert a snake_case string to camelCase camelize <- function(x, first = FALSE) { x <- gsub("_(.)", "\\U\\1", x, perl = TRUE) if (first) x <- firstUpper(x) x } snakeize <- function(x) { x <- gsub("([A-Za-z])([A-Z])([a-z])", "\\1_\\2\\3", x) x <- gsub(".", "_", x, fixed = TRUE) x <- gsub("([a-z])([A-Z])", "\\1_\\2", x) tolower(x) } firstUpper <- function(s) { paste(toupper(substring(s, 1,1)), substring(s, 2), sep = "") } snake_class <- function(x) { snakeize(class(x)[1]) } empty <- function(df) { is.null(df) || nrow(df) == 0 || ncol(df) == 0 } is.discrete <- function(x) { is.factor(x) || is.character(x) || is.logical(x) } compact <- function(x) { null <- vapply(x, is.null, logical(1)) x[!null] } is.formula <- function(x) inherits(x, "formula") deparse2 <- function(x) { y <- deparse(x, backtick = TRUE) if (length(y) == 1) { y } else { paste0(y[[1]], "...") } } message_wrap <- function(...) { msg <- paste(..., collapse = "", sep = "") wrapped <- strwrap(msg, width = getOption("width") - 2) message(paste0(wrapped, collapse = "\n")) } warning_wrap <- function(...) { msg <- paste(..., collapse = "", sep = "") wrapped <- strwrap(msg, width = getOption("width") - 2) warning(paste0(wrapped, collapse = "\n"), call. = FALSE) } dispatch_args <- function(f, ...) { args <- list(...) formals <- formals(f) formals[names(args)] <- args formals(f) <- formals f } ggplot2/R/range.r0000644000175100001440000000147212570615433013340 0ustar hornikusers#' Mutable ranges have a two methods (\code{train} and \code{reset}), and make #' it possible to build up complete ranges with multiple passes. #' #' These range objects should be instantiated with #' \code{\link{continuous_range}} and \code{\link{discrete_range}}. #' #' @noRd Range <- ggproto("Range", NULL, range = NULL, reset = function(self) { self$range <- NULL } ) RangeDiscrete <- ggproto("RangeDiscrete", Range, train = function(self, x, drop = FALSE) { self$range <- scales::train_discrete(x, self$range, drop) } ) RangeContinuous <- ggproto("RangeContinuous", Range, train = function(self, x) { self$range <- scales::train_continuous(x, self$range) } ) continuous_range <- function() { ggproto(NULL, RangeContinuous) } discrete_range <- function() { ggproto(NULL, RangeDiscrete) } ggplot2/R/scale-brewer.r0000644000175100001440000001060512570313504014607 0ustar hornikusers#' Sequential, diverging and qualitative colour scales from colorbrewer.org #' #' ColorBrewer provides sequential, diverging and qualitative colour schemes #' which are particularly suited and tested to display discrete values (levels #' of a factor) on a map. ggplot2 can use those colours in discrete scales. It #' also allows to smoothly interpolate 6 colours from any palette to a #' continuous scale (6 colours per palette gives nice gradients; more results in #' more saturated colours which do not look as good). However, the original #' colour schemes (particularly the qualitative ones) were not intended for this #' and the perceptual result is left to the appreciation of the user. #' See \url{http://colorbrewer2.org} for more information. #' #' @section Palettes: #' The following palettes are available for use with these scales: #' \describe{ #' \item{Diverging}{BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral} #' \item{Qualitative}{Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3} #' \item{Sequential}{Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, #' OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd} #' } #' #' @inheritParams scales::brewer_pal #' @inheritParams scale_colour_hue #' @inheritParams scale_colour_gradient #' @inheritParams scales::gradient_n_pal #' @seealso Other colour scales: #' \code{\link{scale_colour_gradient}}, #' \code{\link{scale_colour_grey}}, #' \code{\link{scale_colour_hue}} #' @rdname scale_brewer #' @export #' @examples #' dsamp <- diamonds[sample(nrow(diamonds), 1000), ] #' (d <- ggplot(dsamp, aes(carat, price)) + #' geom_point(aes(colour = clarity))) #' #' # Change scale label #' d + scale_colour_brewer() #' d + scale_colour_brewer("Diamond\nclarity") #' #' # Select brewer palette to use, see ?scales::brewer_pal for more details #' d + scale_colour_brewer(palette = "Greens") #' d + scale_colour_brewer(palette = "Set1") #' #' \donttest{ #' # scale_fill_brewer works just the same as #' # scale_colour_brewer but for fill colours #' p <- ggplot(diamonds, aes(x = price, fill = cut)) + #' geom_histogram(position = "dodge", binwidth = 1000) #' p + scale_fill_brewer() #' # the order of colour can be reversed #' p + scale_fill_brewer(direction = -1) #' # the brewer scales look better on a darker background #' p + scale_fill_brewer(direction = -1) + theme_dark() #' } #' #' # Use distiller variant with continous data #' v <- ggplot(faithfuld) + #' geom_tile(aes(waiting, eruptions, fill = density)) #' v #' v + scale_fill_distiller() #' v + scale_fill_distiller(palette = "Spectral") scale_colour_brewer <- function(..., type = "seq", palette = 1, direction = 1) { discrete_scale("colour", "brewer", brewer_pal(type, palette, direction), ...) } #' @export #' @rdname scale_brewer scale_fill_brewer <- function(..., type = "seq", palette = 1, direction = 1) { discrete_scale("fill", "brewer", brewer_pal(type, palette, direction), ...) } #' @export #' @rdname scale_brewer scale_colour_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") { # warn about using a qualitative brewer palette to generate the gradient type <- match.arg(type, c("seq", "div", "qual")) if (type == "qual") { warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE) } continuous_scale("colour", "distiller", gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, guide = guide, ...) # NB: 6 colours per palette gives nice gradients; more results in more saturated colours which do not look as good } #' @export #' @rdname scale_brewer scale_fill_distiller <- function(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") { type <- match.arg(type, c("seq", "div", "qual")) if (type == "qual") { warning("Using a discrete colour palette in a continuous scale.\n Consider using type = \"seq\" or type = \"div\" instead", call. = FALSE) } continuous_scale("fill", "distiller", gradient_n_pal(brewer_pal(type, palette, direction)(6), values, space), na.value = na.value, guide = guide, ...) } # icon.brewer <- function() { # rectGrob(c(0.1, 0.3, 0.5, 0.7, 0.9), width = 0.21, # gp = gpar(fill = RColorBrewer::brewer.pal(5, "PuOr"), col = NA) # ) # } ggplot2/R/geom-boxplot.r0000644000175100001440000001714512620223632014654 0ustar hornikusers#' Box and whiskers plot. #' #' The lower and upper "hinges" correspond to the first and third quartiles #' (the 25th and 75th percentiles). This differs slightly from the method used #' by the \code{boxplot} function, and may be apparent with small samples. #' See \code{\link{boxplot.stats}} for for more information on how hinge #' positions are calculated for \code{boxplot}. #' #' The upper whisker extends from the hinge to the highest value that is within #' 1.5 * IQR of the hinge, where IQR is the inter-quartile range, or distance #' between the first and third quartiles. The lower whisker extends from the #' hinge to the lowest value within 1.5 * IQR of the hinge. Data beyond the #' end of the whiskers are outliers and plotted as points (as specified by Tukey). #' #' In a notched box plot, the notches extend \code{1.58 * IQR / sqrt(n)}. #' This gives a roughly 95% confidence interval for comparing medians. #' See McGill et al. (1978) for more details. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "boxplot")} #' #' @seealso \code{\link{stat_quantile}} to view quantiles conditioned on a #' continuous variable, \code{\link{geom_jitter}} for another way to look #' at conditional distributions. #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_boxplot} and \code{stat_boxplot}. #' @param outlier.colour,outlier.shape,outlier.size,outlier.stroke Default #' aesthetics for outliers. Set to \code{NULL} to inherit from the aesthetics #' used for the box. #' @param notch if \code{FALSE} (default) make a standard box plot. If #' \code{TRUE}, make a notched box plot. Notches are used to compare groups; #' if the notches of two boxes do not overlap, this suggests that the medians #' are significantly different. #' @param notchwidth for a notched box plot, width of the notch relative to #' the body (default 0.5) #' @param varwidth if \code{FALSE} (default) make a standard box plot. If #' \code{TRUE}, boxes are drawn with widths proportional to the #' square-roots of the number of observations in the groups (possibly #' weighted, using the \code{weight} aesthetic). #' @export #' @references McGill, R., Tukey, J. W. and Larsen, W. A. (1978) Variations of #' box plots. The American Statistician 32, 12-16. #' @examples #' p <- ggplot(mpg, aes(class, hwy)) #' p + geom_boxplot() #' p + geom_boxplot() + geom_jitter(width = 0.2) #' p + geom_boxplot() + coord_flip() #' #' p + geom_boxplot(notch = TRUE) #' p + geom_boxplot(varwidth = TRUE) #' p + geom_boxplot(fill = "white", colour = "#3366FF") #' # By default, outlier points match the colour of the box. Use #' # outlier.colour to override #' p + geom_boxplot(outlier.colour = "red", outlier.shape = 1) #' #' # Boxplots are automatically dodged when any aesthetic is a factor #' p + geom_boxplot(aes(colour = drv)) #' #' # You can also use boxplots with continuous x, as long as you supply #' # a grouping variable. cut_width is particularly useful #' ggplot(diamonds, aes(carat, price)) + #' geom_boxplot() #' ggplot(diamonds, aes(carat, price)) + #' geom_boxplot(aes(group = cut_width(carat, 0.25))) #' #' \donttest{ #' # It's possible to draw a boxplot with your own computations if you #' # use stat = "identity": #' y <- rnorm(100) #' df <- data.frame( #' x = 1, #' y0 = min(y), #' y25 = quantile(y, 0.25), #' y50 = median(y), #' y75 = quantile(y, 0.75), #' y100 = max(y) #' ) #' ggplot(df, aes(x)) + #' geom_boxplot( #' aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), #' stat = "identity" #' ) #' } geom_boxplot <- function(mapping = NULL, data = NULL, stat = "boxplot", position = "dodge", outlier.colour = NULL, outlier.shape = 19, outlier.size = 1.5, outlier.stroke = 0.5, notch = FALSE, notchwidth = 0.5, varwidth = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomBoxplot, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( outlier.colour = outlier.colour, outlier.shape = outlier.shape, outlier.size = outlier.size, outlier.stroke = outlier.stroke, notch = notch, notchwidth = notchwidth, varwidth = varwidth, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomBoxplot <- ggproto("GeomBoxplot", Geom, setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) if (!is.null(data$outliers)) { suppressWarnings({ out_min <- vapply(data$outliers, min, numeric(1)) out_max <- vapply(data$outliers, max, numeric(1)) }) data$ymin_final <- pmin(out_min, data$ymin) data$ymax_final <- pmax(out_max, data$ymax) } # if `varwidth` not requested or not available, don't use it if (is.null(params) || is.null(params$varwidth) || !params$varwidth || is.null(data$relvarwidth)) { data$xmin <- data$x - data$width / 2 data$xmax <- data$x + data$width / 2 } else { # make `relvarwidth` relative to the size of the largest group data$relvarwidth <- data$relvarwidth / max(data$relvarwidth) data$xmin <- data$x - data$relvarwidth * data$width / 2 data$xmax <- data$x + data$relvarwidth * data$width / 2 } data$width <- NULL if (!is.null(data$relvarwidth)) data$relvarwidth <- NULL data }, draw_group = function(data, panel_scales, coord, fatten = 2, outlier.colour = NULL, outlier.shape = 19, outlier.size = 1.5, outlier.stroke = 0.5, notch = FALSE, notchwidth = 0.5, varwidth = FALSE) { common <- data.frame( colour = data$colour, size = data$size, linetype = data$linetype, fill = alpha(data$fill, data$alpha), group = data$group, stringsAsFactors = FALSE ) whiskers <- data.frame( x = data$x, xend = data$x, y = c(data$upper, data$lower), yend = c(data$ymax, data$ymin), alpha = NA, common, stringsAsFactors = FALSE ) box <- data.frame( xmin = data$xmin, xmax = data$xmax, ymin = data$lower, y = data$middle, ymax = data$upper, ynotchlower = ifelse(notch, data$notchlower, NA), ynotchupper = ifelse(notch, data$notchupper, NA), notchwidth = notchwidth, alpha = data$alpha, common, stringsAsFactors = FALSE ) if (!is.null(data$outliers) && length(data$outliers[[1]] >= 1)) { outliers <- data.frame( y = data$outliers[[1]], x = data$x[1], colour = outlier.colour %||% data$colour[1], shape = outlier.shape %||% data$shape[1], size = outlier.size %||% data$size[1], stroke = outlier.stroke %||% data$stroke[1], fill = NA, alpha = NA, stringsAsFactors = FALSE ) outliers_grob <- GeomPoint$draw_panel(outliers, panel_scales, coord) } else { outliers_grob <- NULL } ggname("geom_boxplot", grobTree( outliers_grob, GeomSegment$draw_panel(whiskers, panel_scales, coord), GeomCrossbar$draw_panel(box, fatten = fatten, panel_scales, coord) )) }, draw_key = draw_key_boxplot, default_aes = aes(weight = 1, colour = "grey20", fill = "white", size = 0.5, alpha = NA, shape = 19, linetype = "solid"), required_aes = c("x", "lower", "upper", "middle", "ymin", "ymax") ) ggplot2/R/stat-binhex.r0000644000175100001440000000405412607215012014457 0ustar hornikusers#' @export #' @rdname geom_hex #' @inheritParams stat_bin_2d stat_bin_hex <- function(mapping = NULL, data = NULL, geom = "hex", position = "identity", bins = 30, binwidth = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatBinhex, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_hex #' @usage NULL stat_binhex <- stat_bin_hex #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBinhex <- ggproto("StatBinhex", Stat, default_aes = aes(fill = ..count..), required_aes = c("x", "y"), compute_group = function(data, scales, binwidth = NULL, bins = 30, na.rm = FALSE) { if (is.null(binwidth)) { binwidth <- c( diff(scales$x$dimension()) / bins, diff(scales$y$dimension()) / bins ) } hexBin(data$x, data$y, binwidth) } ) # Bin 2d plane into hexagons # Wrapper around \code{\link[hexbin]{hcell2xy}} that returns a data frame # # @param x positions # @param y positions # @param numeric vector of length 2 giving binwidth in x and y directions # @keyword internal hexBin <- function(x, y, binwidth) { # Convert binwidths into bounds + nbins xbnds <- c( plyr::round_any(min(x), binwidth[1], floor) - 1e-6, plyr::round_any(max(x), binwidth[1], ceiling) + 1e-6 ) xbins <- diff(xbnds) / binwidth[1] ybnds <- c( plyr::round_any(min(y), binwidth[2], floor) - 1e-6, plyr::round_any(max(y), binwidth[2], ceiling) + 1e-6 ) ybins <- diff(ybnds) / binwidth[2] # Call hexbin hb <- hexbin::hexbin( x, xbnds = xbnds, xbins = xbins, y, ybnds = ybnds, shape = ybins / xbins ) # Convert to data frame data.frame( hexbin::hcell2xy(hb), count = hb@count, density = hb@count / sum(hb@count, na.rm = TRUE) ) } ggplot2/R/coord-flip.r0000644000175100001440000000343012567340011014267 0ustar hornikusers#' Flipped cartesian coordinates. #' #' Flipped cartesian coordinates so that horizontal becomes vertical, and #' vertical, horizontal. This is primarily useful for converting geoms and #' statistics which display y conditional on x, to x conditional on y. #' #' @export #' @inheritParams coord_cartesian #' @examples #' # Very useful for creating boxplots, and other interval #' # geoms in the horizontal instead of vertical position. #' #' ggplot(diamonds, aes(cut, price)) + #' geom_boxplot() + #' coord_flip() #' #' h <- ggplot(diamonds, aes(carat)) + #' geom_histogram() #' h #' h + coord_flip() #' h + coord_flip() + scale_x_reverse() #' #' # You can also use it to flip line and area plots: #' df <- data.frame(x = 1:5, y = (1:5) ^ 2) #' ggplot(df, aes(x, y)) + #' geom_area() #' last_plot() + coord_flip() coord_flip <- function(xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordFlip, limits = list(x = xlim, y = ylim), expand = expand ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordFlip <- ggproto("CoordFlip", CoordCartesian, transform = function(data, scale_details) { data <- flip_labels(data) CoordCartesian$transform(data, scale_details) }, range = function(scale_details) { list(x = scale_details$y.range, y = scale_details$x.range) }, train = function(self, scale_details) { trained <- ggproto_parent(CoordCartesian, self)$train(scale_details) flip_labels(trained) }, labels = function(scale_details) { flip_labels(CoordCartesian$labels(scale_details)) } ) flip_labels <- function(x) { old_names <- names(x) new_names <- old_names new_names <- gsub("^x", "z", new_names) new_names <- gsub("^y", "x", new_names) new_names <- gsub("^z", "y", new_names) setNames(x, new_names) } ggplot2/R/translate-qplot-base.r0000644000175100001440000001212612555701147016305 0ustar hornikusers#' Translating between qplot and base graphics #' #' There are two types of graphics functions in base graphics, those that draw #' complete graphics and those that add to existing graphics. #' #' qplot() has been designed to mimic plot(), and can do the job of all other #' high-level plotting commands. There are only two graph types from base #' graphics that cannot be replicated with ggplot2: filled.contour() and #' persp() #' #' @name translate_qplot_base #' @examples #' \donttest{ #' #' # High-level plotting commands #' #' x <- runif(10) #' y <- 1:10 #' plot(x, y); dotchart(x, y) #' qplot(x, y) #' #' plot(x, y, type = "l") #' qplot(x, y, geom = "line") #' #' plot(x, y, type = "s") #' qplot(x, y, geom = "step") #' #' plot(x, y, type = "b") #' qplot(x, y, geom = c("point", "line")) #' #' boxplot(x, y) #' qplot(x, y, geom = "boxplot") #' #' hist(x) #' qplot(x, geom = "histogram") #' #' # cdplot(factor(x), y) #' # qplot(x, fill = y, geom = "density", position = "fill") #' #' # coplot(y ~ x | a + b) #' # qplot(x, y, facets = a ~ b) #' #' # Many of the geoms are parameterised differently than base graphics. For #' # example, hist() is parameterised in terms of the number of bins, while #' # geom_histogram() is parameterised in terms of the width of each bin. #' hist(x, bins = 10) #' qplot(x, geom = "histogram", binwidth = .1) #' #' # qplot() often requires data in a slightly different format to the base #' # graphics functions. For example, the bar geom works with untabulated data, #' # not tabulated data like barplot(); the tile and contour geoms expect data #' # in a data frame, not a matrix like image() and contour(). #' barplot(table(x)) #' qplot(x, geom = "bar") #' #' barplot(x) #' qplot(seq_along(x), x, geom = "bar", stat = "identity") #' #' # image(x) #' # qplot(X1, X2, data = melt(x), geom = "tile", fill = value) #' #' # contour(x) #' # qplot(X1, X2, data = melt(x), geom = "contour", fill = value) #' #' # Generally, the base graphics functions work with individual vectors, not #' # data frames like ggplot2. qplot() will try to construct a data frame if one #' # is not specified, but it is not always possible. If you get strange errors, #' # you may need to create the data frame yourself. #' df <- data.frame(x = x, y = y) #' with(df, plot(x, y)) #' qplot(x, y, data = df) #' #' # By default, qplot() maps values to aesthetics with a scale. To override #' # this behaviour and set aesthetics, overriding the defaults, you need to use I(). #' plot(x, y, col = "red", cex = 1) #' qplot(x, y, colour = I("red"), size = I(1)) #' #' # Low-level drawing #' #' # The low-level drawing functions which add to an existing plot are equivalent #' # to adding a new layer in ggplot2. #' #' # Base function ggplot2 layer #' # curve() geom_curve() #' # hline() geom_hline() #' # lines() geom_line() #' # points() geom_point() #' # polygon() geom_polygon() #' # rect() geom_rect() #' # rug() geom_rug() #' # segments() geom_segment() #' # text() geom_text() #' # vline() geom_vline() #' # abline(lm(y ~ x)) geom_smooth(method = "lm") #' # lines(density(x)) geom_density() #' # lines(loess(x, y)) geom_smooth() #' #' plot(x, y) #' lines(x, y) #' #' qplot(x, y) + geom_line() #' #' # Or, building up piece-meal #' qplot(x, y) #' last_plot() + geom_line() #' #' # Legends, axes and grid lines #' #' # In ggplot2, the appearance of legends and axes is controlled by the scales. #' # Axes are produced by the x and y scales, while all other scales produce legends. #' # See ?theme for help changing the appearance of axes and legends. #' # The appearance of grid lines is controlled by the grid.major and grid.minor #' # theme options, and their position by the breaks of the x and y scales. #' #' # Colour palettes #' #' # Instead of global colour palettes, ggplot2 has scales for individual plots. Much #' # of the time you can rely on the default colour scale (which has somewhat better #' # perceptual properties), but if you want to reuse an existing colour palette, you #' # can use scale_colour_manual(). You will need to make sure that the colour #' # is a factor for this to work. #' #' palette(rainbow(5)) #' plot(1:5, 1:5, col = 1:5, pch = 19, cex = 4) #' #' qplot(1:5, 1:5, col = factor(1:5), size = I(4)) #' last_plot() + scale_colour_manual(values = rainbow(5)) #' #' # In ggplot2, you can also use palettes with continuous values, #' # with intermediate values being linearly interpolated. #' #' qplot(0:100, 0:100, col = 0:100, size = I(4)) + #' scale_colour_gradientn(colours = rainbow(7)) #' last_plot() + scale_colour_gradientn(colours = terrain.colors(7)) #' #' # Graphical parameters #' #' # The majority of par settings have some analogue within the theme system, or #' # in the defaults of the geoms and scales. The appearance plot border drawn #' # by box() can be controlled in a similar way by the panel.background and #' # plot.background theme elements. Instead of using title(), the plot title is #' # set with the title option. See ?theme for more theme elements. #' last_plot() + labs(title = "My Plot Title") #' } NULL ggplot2/R/geom-histogram.r0000644000175100001440000000713012607210676015164 0ustar hornikusers#' Histograms and frequency polygons. #' #' Display a 1d distribution by dividing into bins and counting the number #' of observations in each bin. Histograms use bars; frequency polygons use #' lines. #' #' By default, \code{stat_bin} uses 30 bins - this is not a good default, #' but the idea is to get you experimenting with different binwidths. You #' may need to look at a few to uncover the full story behind your data. #' #' @section Aesthetics: #' \code{geom_histogram} uses the same aesthetics as \code{geom_bar}; #' \code{geom_freqpoly} uses the same aesthetics as \code{geom_line}. #' #' @export #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_histogram}/\code{geom_freqpoly} and \code{stat_bin}. #' @examples #' ggplot(diamonds, aes(carat)) + #' geom_histogram() #' ggplot(diamonds, aes(carat)) + #' geom_histogram(binwidth = 0.01) #' ggplot(diamonds, aes(carat)) + #' geom_histogram(bins = 200) #' #' # Rather than stacking histograms, it's easier to compare frequency #' # polygons #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(binwidth = 500) #' ggplot(diamonds, aes(price, colour = cut)) + #' geom_freqpoly(binwidth = 500) #' #' # To make it easier to compare distributions with very different counts, #' # put density on the y axis instead of the default count #' ggplot(diamonds, aes(price, ..density.., colour = cut)) + #' geom_freqpoly(binwidth = 500) #' #' if (require("ggplot2movies")) { #' # Often we don't want the height of the bar to represent the #' # count of observations, but the sum of some other variable. #' # For example, the following plot shows the number of movies #' # in each rating. #' m <- ggplot(movies, aes(rating)) #' m + geom_histogram(binwidth = 0.1) #' #' # If, however, we want to see the number of votes cast in each #' # category, we need to weight by the votes variable #' m + geom_histogram(aes(weight = votes), binwidth = 0.1) + ylab("votes") #' #' # For transformed scales, binwidth applies to the transformed data. #' # The bins have constant width on the transformed scale. #' m + geom_histogram() + scale_x_log10() #' m + geom_histogram(binwidth = 0.05) + scale_x_log10() #' #' # For transformed coordinate systems, the binwidth applies to the #' # raw data. The bins have constant width on the original scale. #' #' # Using log scales does not work here, because the first #' # bar is anchored at zero, and so when transformed becomes negative #' # infinity. This is not a problem when transforming the scales, because #' # no observations have 0 ratings. #' m + geom_histogram(origin = 0) + coord_trans(x = "log10") #' # Use origin = 0, to make sure we don't take sqrt of negative values #' m + geom_histogram(origin = 0) + coord_trans(x = "sqrt") #' #' # You can also transform the y axis. Remember that the base of the bars #' # has value 0, so log transformations are not appropriate #' m <- ggplot(movies, aes(x = rating)) #' m + geom_histogram(binwidth = 0.5) + scale_y_sqrt() #' } #' rm(movies) geom_histogram <- function(mapping = NULL, data = NULL, stat = "bin", binwidth = NULL, bins = NULL, origin = NULL, right = FALSE, position = "stack", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomBar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( binwidth = binwidth, bins = bins, origin = origin, right = right, na.rm = na.rm, ... ) ) } ggplot2/R/utilities-break.r0000644000175100001440000000744312555701147015346 0ustar hornikusers#' Cut up numeric vector into useful groups. #' #' \code{cut_interval} makes \code{n} groups with equal range, \code{cut_number} #' makes \code{n} groups with (approximately) equal numbers of observations; #' \code{cut_width} makes groups of width \code{width}. #' #' @author Randall Prium contributed most of the implementation of #' \code{cut_width}. #' @param x numeric vector #' @param n number of intervals to create, OR #' @param length length of each interval #' @param ... other arguments passed on to \code{\link{cut}} #' @seealso \code{\link{cut_number}} #' @export #' @examples #' table(cut_interval(1:100, 10)) #' table(cut_interval(1:100, 11)) #' #' table(cut_number(runif(1000), 10)) #' #' table(cut_width(runif(1000), 0.1)) #' table(cut_width(runif(1000), 0.1, boundary = 0)) #' table(cut_width(runif(1000), 0.1, center = 0)) cut_interval <- function(x, n = NULL, length = NULL, ...) { cut(x, breaks(x, "width", n, length), include.lowest = TRUE, ...) } #' @export #' @rdname cut_interval cut_number <- function(x, n = NULL, ...) { brk <- breaks(x, "n", n) if (anyDuplicated(brk)) stop("Insufficient data values to produce ", n, " bins.", call. = FALSE) cut(x, brk , include.lowest = TRUE, ...) } #' @export #' @rdname cut_interval #' @param width The bin width. #' @param center,boundary Specify either the position of edge or the center of #' a bin. Since all bins are aligned, specifying the position of a single bin #' (which doesn't need to be in the range of the data) affects the location of #' all bins. If not specified, uses the "tile layers algorithm", and sets #' the boundary to half of the binwidth. #' #' To center on integers, \code{width = 1} and \code{center = 0}. #' \code{boundary = 0.5}. #' @param closed One of \code{"right"} or \code{"left"} indicating whether right #' or left edges of bins are included in the bin. cut_width <- function(x, width, center = NULL, boundary = NULL, closed = c("right", "left")) { x <- as.numeric(x) width <- as.numeric(width) closed <- match.arg(closed) x_range <- range(x, na.rm = TRUE, finite = TRUE) if (length(x_range) == 0) { return(x) } # Determine boundary if (!is.null(boundary) && !is.null(center)) { stop("Only one of 'boundary' and 'center' may be specified.") } if (is.null(boundary)) { if (is.null(center)) { # If neither edge nor center given, compute both using tile layer's # algorithm. This puts min and max of data in outer half of their bins. boundary <- width / 2 } else { # If center given but not boundary, compute boundary. boundary <- center - width / 2 } } boundary <- as.numeric(boundary) # Determine bins min_x <- find_origin(x_range, width, boundary) # Small correction factor so that we don't get an extra bin when, for # example, origin = 0, max(x) = 20, width = 10. max_x <- max(x, na.rm = TRUE) + (1 - 1e-08) * width breaks <- seq(min_x, max_x, width) cut(x, breaks, include.lowest = TRUE, right = (closed == "right")) } # Find the left side of left-most bin find_origin <- function(x_range, width, boundary) { shift <- floor((x_range[1] - boundary) / width) boundary + shift * width } breaks <- function(x, equal, nbins = NULL, binwidth = NULL) { equal <- match.arg(equal, c("numbers", "width")) if ((!is.null(nbins) && !is.null(binwidth)) || (is.null(nbins) && is.null(binwidth))) { stop("Specify exactly one of n and width") } rng <- range(x, na.rm = TRUE, finite = TRUE) if (equal == "width") { if (!is.null(binwidth)) { fullseq(rng, binwidth) } else { seq(rng[1], rng[2], length.out = nbins + 1) } } else { if (!is.null(binwidth)) { probs <- seq(0, 1, by = binwidth) } else { probs <- seq(0, 1, length.out = nbins + 1) } stats::quantile(x, probs, na.rm = TRUE) } } ggplot2/R/geom-curve.r0000644000175100001440000000311412633014732014303 0ustar hornikusers#' @inheritParams grid::curveGrob #' @export #' @rdname geom_segment geom_curve <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", curvature = 0.5, angle = 90, ncp = 5, arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomCurve, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( arrow = arrow, curvature = curvature, angle = angle, ncp = ncp, lineend = lineend, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @include geom-segment.r #' @format NULL #' @usage NULL #' @export GeomCurve <- ggproto("GeomCurve", GeomSegment, draw_panel = function(data, panel_scales, coord, curvature = 0.5, angle = 90, ncp = 5, arrow = NULL, lineend = "butt", na.rm = FALSE) { if (!coord$is_linear()) { warning("geom_curve is not implemented for non-linear coordinates", call. = FALSE) } trans <- coord$transform(data, panel_scales) curveGrob( trans$x, trans$y, trans$xend, trans$yend, default.units = "native", curvature = curvature, angle = angle, ncp = ncp, square = FALSE, squareShape = 1, inflect = FALSE, open = TRUE, gp = gpar( col = alpha(trans$colour, trans$alpha), lwd = trans$size * .pt, lty = trans$linetype, lineend = trans$lineend), arrow = arrow ) } ) ggplot2/R/geom-point.r0000644000175100001440000001510112633013453014306 0ustar hornikusers#' Points, as for a scatterplot #' #' The point geom is used to create scatterplots. #' #' The scatterplot is useful for displaying the relationship between two #' continuous variables, although it can also be used with one continuous #' and one categorical variable, or two categorical variables. See #' \code{\link{geom_jitter}} for possibilities. #' #' The \emph{bubblechart} is a scatterplot with a third variable mapped to #' the size of points. There are no special names for scatterplots where #' another variable is mapped to point shape or colour, however. #' #' The biggest potential problem with a scatterplot is overplotting: whenever #' you have more than a few points, points may be plotted on top of one #' another. This can severely distort the visual appearance of the plot. #' There is no one solution to this problem, but there are some techniques #' that can help. You can add additional information with #' \code{\link{geom_smooth}}, \code{\link{geom_quantile}} or #' \code{\link{geom_density_2d}}. If you have few unique x values, #' \code{\link{geom_boxplot}} may also be useful. Alternatively, you can #' summarise the number of points at each location and display that in some #' way, using \code{\link{stat_sum}}. Another technique is to use transparent #' points, e.g. \code{geom_point(alpha = 0.05)}. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "point")} #' #' @seealso \code{\link{scale_size}} to see scale area of points, instead of #' radius, \code{\link{geom_jitter}} to jitter points to reduce (mild) #' overplotting #' @param mapping Set of aesthetic mappings created by \code{\link{aes}} or #' \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the #' default), is combined with the default mapping at the top level of the #' plot. You only need to supply \code{mapping} if there isn't a mapping #' defined for the plot. #' @param data A data frame. If specified, overrides the default data frame #' defined at the top level of the plot. #' @param position Position adjustment, either as a string, or the result of #' a call to a position adjustment function. #' @param stat The statistical transformation to use on the data for this #' layer, as a string. #' @param na.rm If \code{FALSE} (the default), removes missing values with #' a warning. If \code{TRUE} silently removes missing values. #' @param show.legend logical. Should this layer be included in the legends? #' \code{NA}, the default, includes if any aesthetics are mapped. #' \code{FALSE} never includes, and \code{TRUE} always includes. #' @param inherit.aes If \code{FALSE}, overrides the default aesthetics, #' rather than combining with them. This is most useful for helper functions #' that define both data and aesthetics and shouldn't inherit behaviour from #' the default plot specification, e.g. \code{\link{borders}}. #' @param ... other arguments passed on to \code{\link{layer}}. There are #' three types of arguments you can use here: #' #' \itemize{ #' \item Aesthetics: to set an aesthetic to a fixed value, like #' \code{color = "red"} or \code{size = 3}. #' \item Other arguments to the layer, for example you override the #' default \code{stat} associated with the layer. #' \item Other arguments passed on to the stat. #' } #' @inheritParams layer #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) #' p + geom_point() #' #' # Add aesthetic mappings #' p + geom_point(aes(colour = factor(cyl))) #' p + geom_point(aes(shape = factor(cyl))) #' p + geom_point(aes(size = qsec)) #' #' # Change scales #' p + geom_point(aes(colour = cyl)) + scale_colour_gradient(low = "blue") #' p + geom_point(aes(shape = factor(cyl))) + scale_shape(solid = FALSE) #' #' # Set aesthetics to fixed value #' ggplot(mtcars, aes(wt, mpg)) + geom_point(colour = "red", size = 3) #' #' \donttest{ #' # Varying alpha is useful for large datasets #' d <- ggplot(diamonds, aes(carat, price)) #' d + geom_point(alpha = 1/10) #' d + geom_point(alpha = 1/20) #' d + geom_point(alpha = 1/100) #' } #' #' # For shapes that have a border (like 21), you can colour the inside and #' # outside separately. Use the stroke aesthetic to modify the width of the #' # border #' ggplot(mtcars, aes(wt, mpg)) + #' geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke = 5) #' #' \donttest{ #' # You can create interesting shapes by layering multiple points of #' # different sizes #' p <- ggplot(mtcars, aes(mpg, wt, shape = factor(cyl))) #' p + geom_point(aes(colour = factor(cyl)), size = 4) + #' geom_point(colour = "grey90", size = 1.5) #' p + geom_point(colour = "black", size = 4.5) + #' geom_point(colour = "pink", size = 4) + #' geom_point(aes(shape = factor(cyl))) #' #' # These extra layers don't usually appear in the legend, but we can #' # force their inclusion #' p + geom_point(colour = "black", size = 4.5, show.legend = TRUE) + #' geom_point(colour = "pink", size = 4, show.legend = TRUE) + #' geom_point(aes(shape = factor(cyl))) #' #' # geom_point warns when missing values have been dropped from the data set #' # and not plotted, you can turn this off by setting na.rm = TRUE #' mtcars2 <- transform(mtcars, mpg = ifelse(runif(32) < 0.2, NA, mpg)) #' ggplot(mtcars2, aes(wt, mpg)) + geom_point() #' ggplot(mtcars2, aes(wt, mpg)) + geom_point(na.rm = TRUE) #' } geom_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPoint, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPoint <- ggproto("GeomPoint", Geom, required_aes = c("x", "y"), non_missing_aes = c("size", "shape"), default_aes = aes( shape = 19, colour = "black", size = 1.5, fill = NA, alpha = NA, stroke = 0.5 ), draw_panel = function(data, panel_scales, coord, na.rm = FALSE) { coords <- coord$transform(data, panel_scales) ggname("geom_point", pointsGrob( coords$x, coords$y, pch = coords$shape, gp = gpar( col = alpha(coords$colour, coords$alpha), fill = alpha(coords$fill, coords$alpha), # Stroke is added around the outside of the point fontsize = coords$size * .pt + coords$stroke * .stroke / 2, lwd = coords$stroke * .stroke / 2 ) ) ) }, draw_key = draw_key_point ) ggplot2/R/geom-count.r0000644000175100001440000000413412607210303014303 0ustar hornikusers#' Count the number of observations at each location. #' #' This is a variant \code{\link{geom_point}} that counts the number of #' observations at each location, then maps the count to point size. It #' useful when you have discrete data. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "point")} #' @param geom,stat Use to override the default connection between #' \code{geom_count} and \code{stat_sum}. #' @inheritParams geom_point #' @export #' @examples #' ggplot(mpg, aes(cty, hwy)) + #' geom_point() #' #' ggplot(mpg, aes(cty, hwy)) + #' geom_count() #' #' # Best used in conjunction with scale_size_area which ensures that #' # counts of zero would be given size 0. Doesn't make much different #' # here because the smallest count is already close to 0. #' ggplot(mpg, aes(cty, hwy)) + #' geom_count() #' scale_size_area() #' #' # Display proportions instead of counts ------------------------------------- #' # By default, all categorical variables in the plot form the groups. #' # Specifying geom_count without a group identifier leads to a plot which is #' # not useful: #' d <- ggplot(diamonds, aes(x = cut, y = clarity)) #' d + geom_count(aes(size = ..prop..)) #' # To correct this problem and achieve a more desirable plot, we need #' # to specify which group the proportion is to be calculated over. #' d + geom_count(aes(size = ..prop.., group = 1)) + #' scale_size_area(max_size = 10) #' #' # Or group by x/y variables to have rows/columns sum to 1. #' d + geom_count(aes(size = ..prop.., group = cut)) + #' scale_size_area(max_size = 10) #' d + geom_count(aes(size = ..prop.., group = clarity)) + #' scale_size_area(max_size = 10) geom_count <- function(mapping = NULL, data = NULL, stat = "sum", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPoint, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } ggplot2/R/guides-axis.r0000644000175100001440000000710112560637737014473 0ustar hornikusers# Grob for axes # # @param position of ticks # @param labels at ticks # @param position of axis (top, bottom, left or right) # @param range of data values guide_axis <- function(at, labels, position = "right", theme) { if (length(at) == 0) return(zeroGrob()) at <- unit(at, "native") position <- match.arg(position, c("top", "bottom", "right", "left")) zero <- unit(0, "npc") one <- unit(1, "npc") label_render <- switch(position, top = , bottom = "axis.text.x", left = , right = "axis.text.y" ) label_x <- switch(position, top = , bottom = at, right = theme$axis.ticks.length, left = one - theme$axis.ticks.length ) label_y <- switch(position, top = theme$axis.ticks.length, bottom = one - theme$axis.ticks.length, right = , left = at ) if (is.list(labels)) { if (any(sapply(labels, is.language))) { labels <- do.call(expression, labels) } else { labels <- unlist(labels) } } labels <- switch(position, top = , bottom = element_render(theme, label_render, labels, x = label_x, expand_y = TRUE), right = , left = element_render(theme, label_render, labels, y = label_y, expand_x = TRUE)) line <- switch(position, top = element_render(theme, "axis.line.x", c(0, 1), c(0, 0), id.lengths = 2), bottom = element_render(theme, "axis.line.x", c(0, 1), c(1, 1), id.lengths = 2), right = element_render(theme, "axis.line.y", c(0, 0), c(0, 1), id.lengths = 2), left = element_render(theme, "axis.line.y", c(1, 1), c(0, 1), id.lengths = 2) ) nticks <- length(at) ticks <- switch(position, top = element_render(theme, "axis.ticks.x", x = rep(at, each = 2), y = rep(unit.c(zero, theme$axis.ticks.length), nticks), id.lengths = rep(2, nticks)), bottom = element_render(theme, "axis.ticks.x", x = rep(at, each = 2), y = rep(unit.c(one - theme$axis.ticks.length, one), nticks), id.lengths = rep(2, nticks)), right = element_render(theme, "axis.ticks.y", x = rep(unit.c(zero, theme$axis.ticks.length), nticks), y = rep(at, each = 2), id.lengths = rep(2, nticks)), left = element_render(theme, "axis.ticks.y", x = rep(unit.c(one - theme$axis.ticks.length, one), nticks), y = rep(at, each = 2), id.lengths = rep(2, nticks)) ) # Create the gtable for the ticks + labels gt <- switch(position, top = gtable_col("axis", grobs = list(labels, ticks), width = one, heights = unit.c(grobHeight(labels), theme$axis.ticks.length) ), bottom = gtable_col("axis", grobs = list(ticks, labels), width = one, heights = unit.c(theme$axis.ticks.length, grobHeight(labels)) ), right = gtable_row("axis", grobs = list(ticks, labels), widths = unit.c(theme$axis.ticks.length, grobWidth(labels)), height = one ), left = gtable_row("axis", grobs = list(labels, ticks), widths = unit.c(grobWidth(labels), theme$axis.ticks.length), height = one ) ) # Viewport for justifying the axis grob justvp <- switch(position, top = viewport(y = 0, just = "bottom", height = gtable_height(gt)), bottom = viewport(y = 1, just = "top", height = gtable_height(gt)), right = viewport(x = 0, just = "left", width = gtable_width(gt)), left = viewport(x = 1, just = "right", width = gtable_width(gt)) ) absoluteGrob( gList(line, gt), width = gtable_width(gt), height = gtable_height(gt), vp = justvp ) } ggplot2/R/position-jitterdodge.R0000644000175100001440000000406212567133646016357 0ustar hornikusers#' Adjust position by simultaneously dodging and jittering #' #' This is primarily used for aligning points generated through #' \code{geom_point()} with dodged boxplots (e.g., a \code{geom_boxplot()} with #' a fill aesthetic supplied). #' #' @family position adjustments #' @param jitter.width degree of jitter in x direction. Defaults to 40\% of the #' resolution of the data. #' @param jitter.height degree of jitter in y direction. Defaults to 0. #' @param dodge.width the amount to dodge in the x direction. Defaults to 0.75, #' the default \code{position_dodge()} width. #' @export #' @examples #' dsub <- diamonds[ sample(nrow(diamonds), 1000), ] #' ggplot(dsub, aes(x = cut, y = carat, fill = clarity)) + #' geom_boxplot(outlier.size = 0) + #' geom_point(pch = 21, position = position_jitterdodge()) position_jitterdodge <- function(jitter.width = NULL, jitter.height = 0, dodge.width = 0.75) { ggproto(NULL, PositionJitterdodge, jitter.width = jitter.width, jitter.height = jitter.height, dodge.width = dodge.width ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionJitterdodge <- ggproto("PositionJitterdodge", Position, jitter.width = NULL, jitter.height = NULL, dodge.width = NULL, required_aes = c("x", "y", "fill"), setup_params = function(self, data) { width <- self$jitter.width %||% resolution(data$x, zero = FALSE) * 0.4 # Adjust the x transformation based on the number of 'fill' variables nfill <- length(levels(data$fill)) list( dodge.width = self$dodge.width, jitter.height = self$jitter.height, jitter.width = width / (nfill + 2) ) }, compute_panel = function(data, params, scales) { data <- collide(data, params$dodge.width, "position_jitterdodge", pos_dodge, check.width = FALSE) # then jitter transform_position(data, if (params$jitter.width > 0) function(x) jitter(x, amount = params$jitter.width), if (params$jitter.height > 0) function(x) jitter(x, amount = params$jitter.height) ) } ) ggplot2/R/stat-summary-bin.R0000644000175100001440000000465212620172207015414 0ustar hornikusers#' @rdname stat_summary #' @inheritParams stat_bin #' @export stat_summary_bin <- function(mapping = NULL, data = NULL, geom = "pointrange", fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, position = "identity", show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatSummaryBin, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fun.data = fun.data, fun.y = fun.y, fun.ymax = fun.ymax, fun.ymin = fun.ymin, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummaryBin <- ggproto("StatSummaryBin", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), bins = 30, binwidth = NULL, origin = NULL, right = FALSE, na.rm = FALSE) { fun <- make_summary_fun(fun.data, fun.y, fun.ymax, fun.ymin, fun.args) breaks <- bin_breaks(scales$x, NULL, origin, binwidth, bins, right = right) data$bin <- cut(data$x, breaks, include.lowest = TRUE, labels = FALSE) out <- plyr::ddply(data, "bin", fun) locs <- bin_loc(breaks, out$bin) out$x <- locs$mid out$width <- if (scales$x$is_discrete()) 0.9 else locs$length out } ) make_summary_fun <- function(fun.data, fun.y, fun.ymax, fun.ymin, fun.args) { if (!is.null(fun.data)) { # Function that takes complete data frame as input fun.data <- match.fun(fun.data) function(df) { do.call(fun.data, c(list(quote(df$y)), fun.args)) } } else if (!is.null(fun.y) || !is.null(fun.ymax) || !is.null(fun.ymin)) { # Three functions that take vectors as inputs call_f <- function(fun, x) { if (is.null(fun)) return(NA_real_) do.call(fun, c(list(quote(x)), fun.args)) } function(df, ...) { data.frame( ymin = call_f(fun.ymin, df$y), y = call_f(fun.y, df$y), ymax = call_f(fun.ymax, df$y) ) } } else { message("No summary function supplied, defaulting to `mean_se()") function(df) { mean_se(df$y) } } } ggplot2/R/stat-density-2d.r0000644000175100001440000000350312633013617015170 0ustar hornikusers#' @export #' @rdname geom_density_2d #' @param contour If \code{TRUE}, contour the results of the 2d density #' estimation #' @param n number of grid points in each direction #' @param h Bandwidth (vector of length two). If \code{NULL}, estimated #' using \code{\link[MASS]{bandwidth.nrd}}. #' @section Computed variables: #' Same as \code{\link{stat_contour}} stat_density_2d <- function(mapping = NULL, data = NULL, geom = "density_2d", position = "identity", contour = TRUE, n = 100, h = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatDensity2d, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, contour = contour, n = n, ... ) ) } #' @export #' @rdname geom_density_2d #' @usage NULL stat_density2d <- stat_density_2d #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatDensity2d <- ggproto("StatDensity2d", Stat, default_aes = aes(colour = "#3366FF", size = 0.5), required_aes = c("x", "y"), compute_group = function(data, scales, na.rm = FALSE, h = NULL, contour = TRUE, n = 100) { if (is.null(h)) { h <- c(MASS::bandwidth.nrd(data$x), MASS::bandwidth.nrd(data$y)) } dens <- MASS::kde2d( data$x, data$y, h = h, n = n, lims = c(scales$x$dimension(), scales$y$dimension()) ) df <- data.frame(expand.grid(x = dens$x, y = dens$y), z = as.vector(dens$z)) df$group <- data$group[1] if (contour) { StatContour$compute_panel(df, scales) } else { names(df) <- c("x", "y", "density", "group") df$level <- 1 df$piece <- 1 df } } ) ggplot2/R/aes-colour-fill-alpha.r0000644000175100001440000000353112620175053016315 0ustar hornikusers#' Colour related aesthetics: colour, fill and alpha #' #' This page demonstrates the usage of a sub-group #' of aesthetics; colour, fill and alpha. #' #' @name aes_colour_fill_alpha #' @aliases colour color fill #' @examples #' \donttest{ #' #' # Bar chart example #' c <- ggplot(mtcars, aes(factor(cyl))) #' # Default plotting #' c + geom_bar() #' # To change the interior colouring use fill aesthetic #' c + geom_bar(fill = "red") #' # Compare with the colour aesthetic which changes just the bar outline #' c + geom_bar(colour = "red") #' # Combining both, you can see the changes more clearly #' c + geom_bar(fill = "white", colour = "red") #' #' # The aesthetic fill also takes different colouring scales #' # setting fill equal to a factor variable uses a discrete colour scale #' k <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) #' k + geom_bar() #' #' # Fill aesthetic can also be used with a continuous variable #' m <- ggplot(faithfuld, aes(waiting, eruptions)) #' m + geom_raster() #' m + geom_raster(aes(fill = density)) #' #' # Some geoms don't use both aesthetics (i.e. geom_point or geom_line) #' b <- ggplot(economics, aes(x = date, y = unemploy)) #' b + geom_line() #' b + geom_line(colour = "green") #' b + geom_point() #' b + geom_point(colour = "red") #' #' # For large datasets with overplotting the alpha #' # aesthetic will make the points more transparent #' df <- data.frame(x = rnorm(5000), y = rnorm(5000)) #' h <- ggplot(df, aes(x,y)) #' h + geom_point() #' h + geom_point(alpha = 0.5) #' h + geom_point(alpha = 1/10) #' #' # Alpha can also be used to add shading #' j <- b + geom_line() #' j #' yrng <- range(economics$unemploy) #' j <- j + geom_rect(aes(NULL, NULL, xmin = start, xmax = end, fill = party), #' ymin = yrng[1], ymax = yrng[2], data = presidential) #' j #' j + scale_fill_manual(values = alpha(c("blue", "red"), .3)) #' } NULL ggplot2/R/annotation-raster.r0000644000175100001440000000544312620215423015705 0ustar hornikusers#' @include geom-.r #' @include geom-raster.r NULL #' Annotation: High-performance rectangular tiling. #' #' This is a special version of \code{\link{geom_raster}} optimised for static #' annotations that are the same in every panel. These annotations will not #' affect scales (i.e. the x and y axes will not grow to cover the range #' of the raster, and the raster must already have its own colours). #' #' Most useful for adding bitmap images. #' #' @param raster raster object to display #' @param xmin,xmax x location (in data coordinates) giving horizontal #' location of raster #' @param ymin,ymax y location (in data coordinates) giving vertical #' location of raster #' @param interpolate If \code{TRUE} interpolate linearly, if \code{FALSE} #' (the default) don't interpolate. #' @export #' @examples #' # Generate data #' rainbow <- matrix(hcl(seq(0, 360, length.out = 50 * 50), 80, 70), nrow = 50) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' annotation_raster(rainbow, 15, 20, 3, 4) #' # To fill up whole plot #' ggplot(mtcars, aes(mpg, wt)) + #' annotation_raster(rainbow, -Inf, Inf, -Inf, Inf) + #' geom_point() #' #' rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) #' ggplot(mtcars, aes(mpg, wt)) + #' annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf) + #' geom_point() #' rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) #' ggplot(mtcars, aes(mpg, wt)) + #' annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf, interpolate = TRUE) + #' geom_point() annotation_raster <- function(raster, xmin, xmax, ymin, ymax, interpolate = FALSE) { raster <- grDevices::as.raster(raster) layer( data = NULL, mapping = NULL, stat = StatIdentity, position = PositionIdentity, geom = GeomRasterAnn, inherit.aes = TRUE, params = list( raster = raster, xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax, interpolate = interpolate ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRasterAnn <- ggproto("GeomRasterAnn", Geom, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, raster, xmin, xmax, ymin, ymax, interpolate = FALSE) { if (!inherits(coord, "CoordCartesian")) { stop("annotation_raster only works with Cartesian coordinates", call. = FALSE) } corners <- data.frame(x = c(xmin, xmax), y = c(ymin, ymax)) data <- coord$transform(corners, panel_scales) x_rng <- range(data$x, na.rm = TRUE) y_rng <- range(data$y, na.rm = TRUE) rasterGrob(raster, x_rng[1], y_rng[1], diff(x_rng), diff(y_rng), default.units = "native", just = c("left","bottom"), interpolate = interpolate) } ) ggplot2/R/utilities-grid.r0000644000175100001440000000133612613770334015201 0ustar hornikusers#' @export grid::unit #' @export grid::arrow # Name ggplot grid object # Convenience function to name grid objects # # @keyword internal ggname <- function(prefix, grob) { grob$name <- grobName(grob, prefix) grob } width_cm <- function(x) { if (is.grob(x)) { convertWidth(grobWidth(x), "cm", TRUE) } else if (is.list(x)) { vapply(x, width_cm, numeric(1)) } else if (is.unit(x)) { convertWidth(x, "cm", TRUE) } else { stop("Unknown input") } } height_cm <- function(x) { if (is.grob(x)) { convertWidth(grobHeight(x), "cm", TRUE) } else if (is.list(x)) { vapply(x, height_cm, numeric(1)) } else if (is.unit(x)) { convertHeight(x, "cm", TRUE) } else { stop("Unknown input") } } ggplot2/R/scale-.r0000644000175100001440000004632012620215324013400 0ustar hornikusers#' @section Scales: #' #' All \code{scale_*} functions (like \code{scale_x_continuous}) return a #' \code{Scale*} object (like \code{ScaleContinuous}). The \code{Scale*} #' object represents a single scale. #' #' Each of the \code{Scale*} objects is a \code{\link{ggproto}} object, #' descended from the top-level \code{Scale}. #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Scale <- ggproto("Scale", NULL, call = NULL, aesthetics = aes(), scale_name = NULL, palette = function() { stop("Not implemented", call. = FALSE) }, range = ggproto(NULL, Range), limits = NULL, na.value = NA, expand = waiver(), name = waiver(), breaks = waiver(), labels = waiver(), guide = "legend", is_discrete = function() { stop("Not implemented", call. = FALSE) }, # Train scale from a data frame. # # @return updated range (invisibly) # @seealso \code{\link{scale_train}} for scale specific generic method train_df = function(self, df) { if (empty(df)) return() aesthetics <- intersect(self$aesthetics, names(df)) for (aesthetic in aesthetics) { self$train(df[[aesthetic]]) } invisible() }, # Train an individual scale from a vector of data. train = function(self, x) { stop("Not implemented", call. = FALSE) }, # Reset scale, untraining ranges reset = function(self) { self$range$reset() }, is_empty = function(self) { is.null(self$range$range) && is.null(self$limits) }, # @return list of transformed variables transform_df = function(self, df) { if (empty(df)) return() aesthetics <- intersect(self$aesthetics, names(df)) if (length(aesthetics) == 0) return() lapply(df[aesthetics], self$transform) }, transform = function(self, x) { stop("Not implemented", call. = FALSE) }, # @return list of mapped variables map_df = function(self, df, i = NULL) { if (empty(df)) return() aesthetics <- intersect(self$aesthetics, names(df)) names(aesthetics) <- aesthetics if (length(aesthetics) == 0) return() if (is.null(i)) { lapply(aesthetics, function(j) self$map(df[[j]])) } else { lapply(aesthetics, function(j) self$map(df[[j]][i])) } }, # @kohske # map tentatively accept limits argument. # map replaces oob (i.e., outside limits) values with NA. # # Previously limits are always scale_limits(scale). # But if this function is called to get breaks, # and breaks spans oob, the oob breaks is replaces by NA. # This makes impossible to display oob breaks. # Now coord_train calls this function with limits determined by coord (with expansion). map = function(self, x, limits = self$get_limits()) { stop("Not implemented", call. = FALSE) }, # if scale contains a NULL, use the default scale range # if scale contains a NA, use the default range for that axis, otherwise # use the user defined limit for that axis get_limits = function(self) { if (self$is_empty()) return(c(0, 1)) if (!is.null(self$limits)) { ifelse(!is.na(self$limits), self$limits, self$range$range) } else { self$range$range } }, # The physical size of the scale. # This always returns a numeric vector of length 2, giving the physical # dimensions of a scale. dimension = function(self, expand = c(0, 0)) { stop("Not implemented", call. = FALSE) }, get_breaks = function(self, limits = self$get_limits()) { stop("Not implemented", call. = FALSE) }, # The numeric position of scale breaks, used by coord/guide break_positions = function(self, range = self$get_limits()) { self$map(self$get_breaks(range)) }, get_breaks_minor = function(self, n = 2, b = self$break_positions(), limits = self$get_limits()) { stop("Not implemented", call. = FALSE) }, get_labels = function(self, breaks = self$get_breaks()) { stop("Not implemented", call. = FALSE) }, # Each implementation of a Scale must implement a clone method that makes # copies of reference objecsts. clone = function(self) { stop("Not implemented", call. = FALSE) }, break_info = function(self, range = NULL) { stop("Not implemented", call. = FALSE) } ) check_breaks_labels <- function(breaks, labels) { if (is.null(breaks)) return(TRUE) if (is.null(labels)) return(TRUE) bad_labels <- is.atomic(breaks) && is.atomic(labels) && length(breaks) != length(labels) if (bad_labels) { stop("`breaks` and `labels` must have the same length", call. = FALSE) } TRUE } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuous <- ggproto("ScaleContinuous", Scale, range = continuous_range(), na.value = NA_real_, rescaler = rescale, # Used by diverging and n colour gradients x oob = censor, minor_breaks = waiver(), is_discrete = function() FALSE, train = function(self, x) { if (length(x) == 0) return() self$range$train(x) }, transform = function(self, x) { self$trans$transform(x) }, map = function(self, x, limits = self$get_limits()) { x <- self$oob(self$rescaler(x, from = limits)) uniq <- unique(x) pal <- self$palette(uniq) scaled <- pal[match(x, uniq)] ifelse(!is.na(scaled), scaled, self$na.value) }, dimension = function(self, expand = c(0, 0)) { expand_range(self$get_limits(), expand[1], expand[2]) }, get_breaks = function(self, limits = self$get_limits()) { if (self$is_empty()) return(numeric()) # Limits in transformed space need to be converted back to data space limits <- self$trans$inverse(limits) if (is.null(self$breaks)) { return(NULL) } else if (identical(self$breaks, NA)) { stop("Invalid breaks specification. Use NULL, not NA") } else if (zero_range(as.numeric(limits))) { breaks <- limits[1] } else if (is.waive(self$breaks)) { breaks <- self$trans$breaks(limits) } else if (is.function(self$breaks)) { breaks <- self$breaks(limits) } else { breaks <- self$breaks } # Breaks in data space need to be converted back to transformed space # And any breaks outside the dimensions need to be flagged as missing # # @kohske # TODO: replace NA with something else for flag. # guides cannot discriminate oob from missing value. breaks <- censor(self$trans$transform(breaks), self$trans$transform(limits), only.finite = FALSE) if (length(breaks) == 0) { stop("Zero breaks in scale for ", paste(self$aesthetics, collapse = "/"), call. = FALSE) } breaks }, get_breaks_minor = function(self, n = 2, b = self$break_positions(), limits = self$get_limits()) { if (zero_range(as.numeric(limits))) { return() } if (is.null(self$minor_breaks)) { return(NULL) } else if (identical(self$minor_breaks, NA)) { stop("Invalid minor_breaks specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$minor_breaks)) { if (is.null(b)) { breaks <- NULL } else { b <- b[!is.na(b)] if (length(b) < 2) return() bd <- diff(b)[1] if (min(limits) < min(b)) b <- c(b[1] - bd, b) if (max(limits) > max(b)) b <- c(b, b[length(b)] + bd) breaks <- unique(unlist(mapply(seq, b[-length(b)], b[-1], length.out = n + 1, SIMPLIFY = FALSE))) } } else if (is.function(self$minor_breaks)) { # Find breaks in data space, and convert to numeric breaks <- self$minor_breaks(self$trans$inverse(limits)) breaks <- self$trans$transform(breaks) } else { breaks <- self$trans$transform(self$minor_breaks) } # Any minor breaks outside the dimensions need to be thrown away discard(breaks, limits) }, get_labels = function(self, breaks = self$get_breaks()) { if (is.null(breaks)) return(NULL) breaks <- self$trans$inverse(breaks) if (is.null(self$labels)) { return(NULL) } else if (identical(self$labels, NA)) { stop("Invalid labels specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$labels)) { labels <- self$trans$format(breaks) } else if (is.function(self$labels)) { labels <- self$labels(breaks) } else { labels <- self$labels } if (length(labels) != length(breaks)) { stop("Breaks and labels are different lengths") } labels }, clone = function(self) { new <- ggproto(NULL, self) new$range <- continuous_range() new }, break_info = function(self, range = NULL) { # range if (is.null(range)) range <- self$dimension() # major breaks major <- self$get_breaks(range) # labels labels <- self$get_labels(major) # drop oob breaks/labels by testing major == NA if (!is.null(labels)) labels <- labels[!is.na(major)] if (!is.null(major)) major <- major[!is.na(major)] # minor breaks minor <- self$get_breaks_minor(b = major, limits = range) if (!is.null(minor)) minor <- minor[!is.na(minor)] # rescale breaks [0, 1], which are used by coord/guide major_n <- rescale(major, from = range) minor_n <- rescale(minor, from = range) list(range = range, labels = labels, major = major_n, minor = minor_n, major_source = major, minor_source = minor) }, print = function(self, ...) { show_range <- function(x) paste0(formatC(x, digits = 3), collapse = " -- ") cat("<", class(self)[[1]], ">\n", sep = "") cat(" Range: ", show_range(self$range$range), "\n", sep = "") cat(" Limits: ", show_range(self$dimension()), "\n", sep = "") } ) #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleDiscrete <- ggproto("ScaleDiscrete", Scale, drop = TRUE, na.value = NA, is_discrete = function() TRUE, train = function(self, x) { if (length(x) == 0) return() self$range$train(x, drop = self$drop) }, transform = function(x) { x }, map = function(self, x, limits = self$get_limits()) { n <- sum(!is.na(limits)) pal <- self$palette(n) if (is.null(names(pal))) { pal_match <- pal[match(as.character(x), limits)] } else { pal_match <- pal[match(as.character(x), names(pal))] pal_match <- unname(pal_match) } ifelse(is.na(x) | is.na(pal_match), self$na.value, pal_match) }, dimension = function(self, expand = c(0, 0)) { expand_range(length(self$get_limits()), expand[1], expand[2]) }, get_breaks = function(self, limits = self$get_limits()) { if (self$is_empty()) return(numeric()) if (is.null(self$breaks)) { return(NULL) } else if (identical(self$breaks, NA)) { stop("Invalid breaks specification. Use NULL, not NA", call. = FALSE) } else if (is.waive(self$breaks)) { breaks <- limits } else if (is.function(self$breaks)) { breaks <- self$breaks(limits) } else { breaks <- self$breaks } # Breaks can only occur only on values in domain in_domain <- intersect(breaks, self$get_limits()) structure(in_domain, pos = match(in_domain, breaks)) }, get_breaks_minor = function(...) NULL, get_labels = function(self, breaks = self$get_breaks()) { if (self$is_empty()) return(character()) if (is.null(breaks)) return(NULL) if (is.null(self$labels)) { return(NULL) } else if (identical(self$labels, NA)) { stop("Invalid labels specification. Use NULL, not NA", call. = FALSE) }else if (is.waive(self$labels)) { format(self$get_breaks(), justify = "none", trim = TRUE) } else if (is.function(self$labels)) { self$labels(breaks) } else { if (!is.null(names(self$labels))) { # If labels have names, use them to match with breaks labels <- breaks map <- match(names(self$labels), labels, nomatch = 0) labels[map] <- self$labels[map != 0] labels } else { labels <- self$labels # Need to ensure that if breaks were dropped, corresponding labels are too pos <- attr(breaks, "pos") if (!is.null(pos)) { labels <- labels[pos] } labels } } }, clone = function(self) { new <- ggproto(NULL, self) new$range <- discrete_range() new }, break_info = function(self, range = NULL) { # for discrete, limits != range limits <- self$get_limits() major <- self$get_breaks(limits) if (is.null(major)) { labels <- major_n <- NULL } else { labels <- self$get_labels(major) major <- self$map(major) major <- major[!is.na(major)] # rescale breaks [0, 1], which are used by coord/guide major_n <- rescale(major, from = range) } list(range = range, labels = labels, major = major_n, minor = NULL, major_source = major, minor_source = NULL) } ) #' Continuous scale constructor. #' #' @export #' @inheritParams discrete_scale #' @param name The name of the scale. Used as axis or legend title. If #' \code{NULL}, the default, the name of the scale is taken from the first #' mapping used for that aesthetic. #' @param breaks One of: \itemize{ #' \item \code{NULL} for no breaks #' \item \code{waiver()} for the default breaks computed by the #' transformation object #' \item A numeric vector of positions #' \item A function that takes the limits as input and returns breaks #' as output #' } #' @param minor_breaks One of: \itemize{ #' \item \code{NULL} for no minor breaks #' \item \code{waiver()} for the default breaks (one minor break between #' each major break) #' \item A numeric vector of positions #' \item A function that given the limits returns a vector of minor breaks. #' } #' @param labels One of: \itemize{ #' \item \code{NULL} for no labels #' \item \code{waiver()} for the default labels computed by the #' transformation object #' \item A character vector giving labels (must be same length as \code{breaks}) #' \item A function that takes the breaks as input and returns labels #' as output #' } #' @param limits A numeric vector of length two providing limits of the scale. #' Use \code{NA} to refer to the existing minimum or maximum. #' @param rescaler Used by diverging and n colour gradients #' (i.e. \code{\link{scale_colour_gradient2}}, \code{\link{scale_colour_gradientn}}). #' A function used to scale the input values to the range [0, 1]. #' @param oob Function that handles limits outside of the scale limits #' (out of bounds). The default replaces out of bounds values with NA. #' @param na.value Missing values will be replaced with this value. #' @param trans Either the name of a transformation object, or the #' object itself. Built-in transformations include "asn", "atanh", #' "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", #' "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". #' #' A transformation object bundles together a transform, it's inverse, #' and methods for generating breaks and labels. Transformation objects #' are defined in the scales package, and are called \code{name_trans}, e.g. #' \code{\link[scales]{boxcox_trans}}. You can create your own #' transformation with \code{\link[scales]{trans_new}}. #' @param expand A numeric vector of length two giving multiplicative and #' additive expansion constants. These constants ensure that the data is #' placed some distance away from the axes. The defaults are #' \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for #' discrete variables. #' @param guide Name of guide object, or object itself. #' @keywords internal continuous_scale <- function(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, trans = "identity", guide = "legend") { check_breaks_labels(breaks, labels) if (is.null(breaks) && !is_position_aes(aesthetics) && guide != "none") { guide <- "none" } trans <- as.trans(trans) if (!is.null(limits)) { limits <- trans$transform(limits) } ggproto(NULL, ScaleContinuous, call = match.call(), aesthetics = aesthetics, scale_name = scale_name, palette = palette, range = continuous_range(), limits = limits, trans = trans, na.value = na.value, expand = expand, rescaler = rescaler, # Used by diverging and n colour gradients oob = oob, name = name, breaks = breaks, minor_breaks = minor_breaks, labels = labels, guide = guide ) } #' Discrete scale constructor. #' #' @export #' @param aesthetics the names of the aesthetics that this scale works with #' @param scale_name the name of the scale #' @param palette a palette function that when called with a single integer #' argument (the number of levels in the scale) returns the values that #' they should take #' @param name the name of the scale - used as the axis label or the legend #' title #' @param drop drop unused factor levels from the scale (\code{TRUE} or #' \code{FALSE}) #' @param breaks control the breaks in the guide. There are four possible #' types of input: #' \itemize{ #' \item \code{NULL}: don't display any breaks #' \item a character vector giving the breaks as they should appear on the #' axis or in the legend. #' \item \code{waiver()} to use the default break computation. #' \item a function, that when called with a single argument, a character #' vector giving the limits of the scale, returns a character vector #' specifying which breaks to display. #' } #' This parameter does not affect in any way how the data is scaled - it #' only affects the appearance of the legend. #' @param limits A character vector specifying the data range for the scale. # The limits control what levels are displayed in the plot, their order, #' and the default order of their display in guides. #' @param labels \code{NULL} for no labels, \code{waiver()} for default #' labels (labels the same as breaks), a character vector the same length #' as breaks, or a named character vector whose names are used to match #' replacement the labels for matching breaks. #' @param expand a numeric vector of length two, giving a multiplicative and #' additive constant used to expand the range of the scales so that there #' is a small gap between the data and the axes. The defaults are (0,0.6) #' for discrete scales and (0.05,0) for continuous scales. #' @param na.value how should missing values be displayed? #' @param guide the name of, or actual function, used to create the #' guide. See \code{\link{guides}} for more info. #' @keywords internal discrete_scale <- function(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), na.value = NA, drop = TRUE, guide = "legend") { check_breaks_labels(breaks, labels) if (is.null(breaks) && !is_position_aes(aesthetics) && guide != "none") { guide <- "none" } ggproto(NULL, ScaleDiscrete, call = match.call(), aesthetics = aesthetics, scale_name = scale_name, palette = palette, range = discrete_range(), limits = limits, na.value = na.value, expand = expand, name = name, breaks = breaks, labels = labels, drop = drop, guide = guide ) } ggplot2/R/save.r0000644000175100001440000001103412633620553013174 0ustar hornikusers#' Save a ggplot (or other grid object) with sensible defaults #' #' \code{ggsave()} is a convenient function for saving a plot. It defaults to #' saving the last plot that you displayed, using the size of the current #' graphics device. It also guesses the type of graphics device from the #' extension. #' #' @param filename File name to create on disk. #' @param plot Plot to save, defaults to last plot displayed. #' @param device Device to use (function or any of the recognized extensions, #' e.g. \code{"pdf"}). By default, extracted from filename extension. #' \code{ggsave} currently recognises eps/ps, tex (pictex), pdf, jpeg, tiff, #' png, bmp, svg and wmf (windows only). #' @param path Path to save plot to (combined with filename). #' @param scale Multiplicative scaling factor. #' @param width,height Plot dimensions, defaults to size of current graphics #' device. #' @param units Units for width and height when specified explicitly (in, cm, #' or mm) #' @param dpi Resolution used for raster outputs. #' @param limitsize When \code{TRUE} (the default), \code{ggsave} will not #' save images larger than 50x50 inches, to prevent the common error of #' specifying dimensions in pixels. #' @param ... Other arguments passed on to graphics device #' @export #' @examples #' \dontrun{ #' ggplot(mtcars, aes(mpg, wt)) + geom_point() #' #' ggsave("mtcars.pdf") #' ggsave("mtcars.png") #' #' ggsave("mtcars.pdf", width = 4, height = 4) #' ggsave("mtcars.pdf", width = 20, height = 20, units = "cm") #' #' unlink("mtcars.pdf") #' unlink("mtcars.png") #' #' # specify device when saving to a file with unknown extension #' # (for example a server supplied temporary file) #' file <- tempfile() #' ggsave(file, device = "pdf") #' unlink(file) #' } ggsave <- function(filename, plot = last_plot(), device = NULL, path = NULL, scale = 1, width = NA, height = NA, units = c("in", "cm", "mm"), dpi = 300, limitsize = TRUE, ...) { dev <- plot_dev(device, filename, dpi = dpi) dim <- plot_dim(c(width, height), scale = scale, units = units, limitsize = limitsize) if (!is.null(path)) { filename <- file.path(path, filename) } dev(file = filename, width = dim[1], height = dim[2], ...) on.exit(utils::capture.output(grDevices::dev.off())) grid.draw(plot) invisible() } plot_dim <- function(dim = c(NA, NA), scale = 1, units = c("in", "cm", "mm"), limitsize = TRUE) { units <- match.arg(units) to_inches <- function(x) x / c(`in` = 1, cm = 2.54, mm = 2.54 * 10)[units] from_inches <- function(x) x * c(`in` = 1, cm = 2.54, mm = 2.54 * 10)[units] dim <- to_inches(dim) * scale if (any(is.na(dim))) { if (length(grDevices::dev.list()) == 0) { default_dim <- c(7, 7) } else { default_dim <- grDevices::dev.size() * scale } dim[is.na(dim)] <- default_dim[is.na(dim)] dim_f <- prettyNum(from_inches(dim), digits = 3) message("Saving ", dim_f[1], " x ", dim_f[2], " ", units, " image") } if (limitsize && any(dim >= 50)) { stop("Dimensions exceed 50 inches (height and width are specified in '", units, "' not pixels). If you're sure you a plot that big, use ", "`limitsize = FALSE`.", call. = FALSE) } dim } plot_dev <- function(device, filename, dpi = 300) { if (is.function(device)) return(device) eps <- function(...) { grDevices::postscript(..., onefile = FALSE, horizontal = FALSE, paper = "special") } devices <- list( eps = eps, ps = eps, tex = function(...) grDevices::pictex(...), pdf = function(..., version = "1.4") grDevices::pdf(..., version = version), svg = function(...) grDevices::svg(...), emf = function(...) grDevices::win.metafile(...), wmf = function(...) grDevices::win.metafile(...), png = function(...) grDevices::png(..., res = dpi, units = "in"), jpg = function(...) grDevices::jpeg(..., res = dpi, units = "in"), jpeg = function(...) grDevices::jpeg(..., res = dpi, units = "in"), bmp = function(...) grDevices::bmp(..., res = dpi, units = "in"), tiff = function(...) grDevices::tiff(..., res = dpi, units = "in") ) if (is.null(device)) { device <- tolower(tools::file_ext(filename)) } if (!is.character(device) || length(device) != 1) { stop("`device` must be NULL, a string or a function.", call. = FALSE) } dev <- devices[[device]] if (is.null(dev)) { stop("Unknown graphics device '", device, "'", call. = FALSE) } dev } #' @export grid.draw.ggplot <- function(x, recording = TRUE) { print(x) } ggplot2/R/summary.r0000644000175100001440000000212412567364544013746 0ustar hornikusers#' Displays a useful description of a ggplot object #' #' @param object ggplot2 object to summarise #' @param ... other arguments ignored (for compatibility with generic) #' @keywords internal #' @method summary ggplot #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() #' summary(p) summary.ggplot <- function(object, ...) { wrap <- function(x) paste( paste(strwrap(x, exdent = 2), collapse = "\n"), "\n", sep = "" ) if (!is.null(object$data)) { output <- paste( "data: ", paste(names(object$data), collapse = ", "), " [", nrow(object$data), "x", ncol(object$data), "] ", "\n", sep = "") cat(wrap(output)) } if (length(object$mapping) > 0) { cat("mapping: ", clist(object$mapping), "\n", sep = "") } if (object$scales$n() > 0) { cat("scales: ", paste(object$scales$input(), collapse = ", "), "\n") } cat("faceting: ") print(object$facet) if (length(object$layers) > 0) cat("-----------------------------------\n") invisible(lapply(object$layers, function(x) { print(x) cat("\n") })) } ggplot2/R/stat-function.r0000644000175100001440000000511612633014405015031 0ustar hornikusers#' Superimpose a function. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "function")} #' #' @param fun function to use #' @param n number of points to interpolate along #' @param args list of additional arguments to pass to \code{fun} #' @param na.rm If \code{FALSE} (the default), removes missing values with #' a warning. If \code{TRUE} silently removes missing values. #' @inheritParams stat_identity #' @section Computed variables: #' \describe{ #' \item{x}{x's along a grid} #' \item{y}{value of function evaluated at corresponding x} #' } #' @export #' @examples #' set.seed(1492) #' df <- data.frame( #' x = rnorm(100) #' ) #' x <- df$x #' base <- ggplot(df, aes(x)) + geom_density() #' base + stat_function(fun = dnorm, colour = "red") #' base + stat_function(fun = dnorm, colour = "red", arg = list(mean = 3)) #' #' # Plot functions without data #' # Examples adapted from Kohske Takahashi #' #' # Specify range of x-axis #' ggplot(data.frame(x = c(0, 2)), aes(x)) + #' stat_function(fun = exp, geom = "line") #' #' # Plot a normal curve #' ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm) #' #' # To specify a different mean or sd, use the args parameter to supply new values #' ggplot(data.frame(x = c(-5, 5)), aes(x)) + #' stat_function(fun = dnorm, args = list(mean = 2, sd = .5)) #' #' # Two functions on the same plot #' f <- ggplot(data.frame(x = c(0, 10)), aes(x)) #' f + stat_function(fun = sin, colour = "red") + #' stat_function(fun = cos, colour = "blue") #' #' # Using a custom function #' test <- function(x) {x ^ 2 + x + 20} #' f + stat_function(fun = test) stat_function <- function(mapping = NULL, data = NULL, geom = "path", position = "identity", fun, n = 101, args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatFunction, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fun = fun, n = n, args = args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatFunction <- ggproto("StatFunction", Stat, default_aes = aes(y = ..y..), compute_group = function(data, scales, fun, n = 101, args = list()) { range <- scales$x$dimension() xseq <- seq(range[1], range[2], length.out = n) data.frame( x = xseq, y = do.call(fun, c(list(quote(scales$x$trans$inv(xseq))), args)) ) } ) ggplot2/R/position-.r0000644000175100001440000000652712607215623014171 0ustar hornikusers#' @section Positions: #' #' All \code{position_*} functions (like \code{position_dodge}) return a #' \code{Position*} object (like \code{PositionDodge}). The \code{Position*} #' object is responsible for adjusting the position of overlapping geoms. #' #' The way that the \code{position_*} functions work is slightly different from #' the \code{geom_*} and \code{stat_*} functions, because a \code{position_*} #' function actually "instantiates" the \code{Position*} object by creating a #' descendant, and returns that. #' #' Each of the \code{Position*} objects is a \code{\link{ggproto}} object, #' descended from the top-level \code{Position}, and each implements the #' following methods: #' #' \itemize{ #' \item \code{compute_layer(self, data, params, panel)} is called once #' per layer. \code{panel} is currently an internal data structure, so #' this method should not be overriden. #' #' \item \code{compute_panel(self, data, params, panel)} is called once per #' panel and should return a modified data frame. #' #' \code{data} is a data frame containing the variables named according #' to the aesthetics that they're mapped to. \code{scales} is a list #' containing the \code{x} and \code{y} scales. There functions are called #' before the facets are trained, so they are global scales, not local #' to the individual panels. \code{params} contains the parameters returned by #' \code{setup_params()}. #' \item \code{setup_params(data, params)}: called once for each layer. #' Used to setup defaults that need to complete dataset, and to inform #' the user of important choices. Should return list of parameters. #' \item \code{setup_data(data, params)}: called once for each layer, #' after \code{setp_params()}. Should return modified \code{data}. #' Default checks that required aesthetics are present. #' } #' #' And the following fields #' \itemize{ #' \item \code{required_aes}: a character vector giving the aesthetics #' that must be present for this position adjustment to work. #' } #' #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Position <- ggproto("Position", required_aes = character(), setup_params = function(self, data) { list() }, setup_data = function(self, data, params) { check_required_aesthetics(self$required_aes, names(data), snake_class(self)) data }, compute_layer = function(self, data, params, panel) { plyr::ddply(data, "PANEL", function(data) { if (empty(data)) return(data.frame()) scales <- panel_scales(panel, data$PANEL[1]) self$compute_panel(data = data, params = params, scales = scales) }) }, compute_panel = function(self, data, params, scales) { stop("Not implemented", call. = FALSE) } ) #' Convenience function to transform all position variables. #' #' @param trans_x,trans_y Transformation functions for x and y aesthetics. #' (will transform x, xmin, xmax, xend etc) #' @param ... Additional arguments passed to \code{trans_x} and \code{trans_y}. #' @keywords internal #' @export transform_position <- function(df, trans_x = NULL, trans_y = NULL, ...) { scales <- aes_to_scale(names(df)) if (!is.null(trans_x)) { df[scales == "x"] <- lapply(df[scales == "x"], trans_x, ...) } if (!is.null(trans_y)) { df[scales == "y"] <- lapply(df[scales == "y"], trans_y, ...) } df } ggplot2/R/geom-freqpoly.r0000644000175100001440000000073512607210621015022 0ustar hornikusers#' @export #' @rdname geom_histogram geom_freqpoly <- function(mapping = NULL, data = NULL, stat = "bin", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPath, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } ggplot2/R/coord-quickmap.R0000644000175100001440000000223012606755230015113 0ustar hornikusers#' @inheritParams coord_cartesian #' @export #' @rdname coord_map coord_quickmap <- function(xlim = NULL, ylim = NULL, expand = TRUE) { ggproto(NULL, CoordQuickmap, limits = list(x = xlim, y = ylim), expand = expand ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordQuickmap <- ggproto("CoordQuickmap", CoordCartesian, aspect = function(ranges) { # compute coordinates of center point of map x.center <- sum(ranges$x.range) / 2 y.center <- sum(ranges$y.range) / 2 # compute distance corresponding to 1 degree in either direction # from the center x.dist <- dist_central_angle(x.center + c(-0.5, 0.5), rep(y.center, 2)) y.dist <- dist_central_angle(rep(x.center, 2), y.center + c(-0.5, 0.5)) # NB: this makes the projection correct in the center of the plot and # increasingly less correct towards the edges. For regions of reasonnable # size, this seems to give better results than computing this ratio from # the total lat and lon span. # scale the plot with this aspect ratio ratio <- y.dist / x.dist diff(ranges$y.range) / diff(ranges$x.range) * ratio } ) ggplot2/R/scales-.r0000644000175100001440000001172412567665533013610 0ustar hornikusers# Scales object encapsulates multiple scales. # All input and output done with data.frames to facilitate # multiple input and output variables scales_list <- function() { ggproto(NULL, ScalesList) } ScalesList <- ggproto("ScalesList", NULL, scales = NULL, find = function(self, aesthetic) { vapply(self$scales, function(x) any(aesthetic %in% x$aesthetics), logical(1)) }, has_scale = function(self, aesthetic) { any(self$find(aesthetic)) }, add = function(self, scale) { prev_aes <- self$find(scale$aesthetics) if (any(prev_aes)) { # Get only the first aesthetic name in the returned vector -- it can # sometimes be c("x", "xmin", "xmax", ....) scalename <- self$scales[prev_aes][[1]]$aesthetics[1] message_wrap("Scale for '", scalename, "' is already present. Adding another scale for '", scalename, "', which will replace the existing scale.") } # Remove old scale for this aesthetic (if it exists) self$scales <- c(self$scales[!prev_aes], list(scale)) }, n = function(self) { length(self$scales) }, input = function(self) { unlist(lapply(self$scales, "[[", "aesthetics")) }, # This actually makes a descendant of self, which is functionally the same # as a actually clone for most purposes. clone = function(self) { ggproto(NULL, self, scales = lapply(self$scales, function(s) s$clone())) }, non_position_scales = function(self) { ggproto(NULL, self, scales = self$scales[!self$find("x") & !self$find("y")]) }, get_scales = function(self, output) { scale <- self$scales[self$find(output)] if (length(scale) == 0) return() scale[[1]] } ) # Train scale from a data frame scales_train_df <- function(scales, df, drop = FALSE) { if (empty(df) || length(scales$scales) == 0) return() lapply(scales$scales, function(scale) scale$train_df(df = df)) } # Map values from a data.frame. Returns data.frame scales_map_df <- function(scales, df) { if (empty(df) || length(scales$scales) == 0) return(df) mapped <- unlist(lapply(scales$scales, function(scale) scale$map_df(df = df)), recursive = FALSE) plyr::quickdf(c(mapped, df[setdiff(names(df), names(mapped))])) } # Transform values to cardinal representation scales_transform_df <- function(scales, df) { if (empty(df) || length(scales$scales) == 0) return(df) transformed <- unlist(lapply(scales$scales, function(s) s$transform_df(df = df)), recursive = FALSE) plyr::quickdf(c(transformed, df[setdiff(names(df), names(transformed))])) } # @param aesthetics A list of aesthetic-variable mappings. The name of each # item is the aesthetic, and the value of each item is the variable in data. scales_add_defaults <- function(scales, data, aesthetics, env) { if (is.null(aesthetics)) return() names(aesthetics) <- unlist(lapply(names(aesthetics), aes_to_scale)) new_aesthetics <- setdiff(names(aesthetics), scales$input()) # No new aesthetics, so no new scales to add if (is.null(new_aesthetics)) return() datacols <- plyr::tryapply( aesthetics[new_aesthetics], eval, envir = data, enclos = env ) for (aes in names(datacols)) { type <- scale_type(datacols[[aes]]) scale_name <- paste("scale", aes, type, sep = "_") # Skip aesthetics with no scales (e.g. group, order, etc) scale_f <- find_global(scale_name, env, mode = "function") if (is.null(scale_f)) next scales$add(scale_f()) } } # Add missing but required scales. # @param aesthetics A character vector of aesthetics. Typically c("x", "y"). scales_add_missing <- function(plot, aesthetics, env) { # Keep only aesthetics that aren't already in plot$scales aesthetics <- setdiff(aesthetics, plot$scales$input()) for (aes in aesthetics) { scale_name <- paste("scale", aes, "continuous", sep = "_") scale_f <- find_global(scale_name, env, mode = "function") plot$scales$add(scale_f()) } } # Look for object first in parent environment and if not found, then in # ggplot2 namespace environment. This makes it possible to override default # scales by setting them in the parent environment. find_global <- function(name, env, mode = "any") { if (exists(name, envir = env, mode = mode)) { return(get(name, envir = env, mode = mode)) } nsenv <- asNamespace("ggplot2") if (exists(name, envir = nsenv, mode = mode)) { return(get(name, envir = nsenv, mode = mode)) } NULL } # Determine default type of a scale scale_type <- function(x) UseMethod("scale_type") #' @export scale_type.default <- function(x) { message("Don't know how to automatically pick scale for object of type ", paste(class(x), collapse = "/"), ". Defaulting to continuous") "continuous" } #' @export scale_type.logical <- function(x) "discrete" #' @export scale_type.character <- function(x) "discrete" #' @export scale_type.factor <- function(x) "discrete" #' @export scale_type.POSIXt <- function(x) "datetime" #' @export scale_type.Date <- function(x) "date" #' @export scale_type.numeric <- function(x) "continuous" ggplot2/R/stat-qq.r0000644000175100001440000000467012633014405013631 0ustar hornikusers#' Calculation for quantile-quantile plot. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "qq")} #' #' @param distribution Distribution function to use, if x not specified #' @param dparams Additional parameters passed on to \code{distribution} #' function. #' @param na.rm If \code{FALSE} (the default), removes missing values with #' a warning. If \code{TRUE} silently removes missing values. #' @inheritParams stat_identity #' @section Computed variables: #' \describe{ #' \item{sample}{sample quantiles} #' \item{theoretical}{theoretical quantiles} #' } #' @export #' @examples #' \donttest{ #' df <- data.frame(y = rt(200, df = 5)) #' p <- ggplot(df, aes(sample = y)) #' p + stat_qq() #' p + geom_point(stat = "qq") #' #' # Use fitdistr from MASS to estimate distribution params #' params <- as.list(MASS::fitdistr(df$y, "t")$estimate) #' ggplot(df, aes(sample = y)) + #' stat_qq(distribution = qt, dparams = params["df"]) #' #' # Using to explore the distribution of a variable #' ggplot(mtcars) + #' stat_qq(aes(sample = mpg)) #' ggplot(mtcars) + #' stat_qq(aes(sample = mpg, colour = factor(cyl))) #' } stat_qq <- function(mapping = NULL, data = NULL, geom = "point", position = "identity", distribution = stats::qnorm, dparams = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatQq, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( distribution = distribution, dparams = dparams, na.rm = na.rm, ... ) ) } #' @export #' @rdname stat_qq geom_qq <- stat_qq #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatQq <- ggproto("StatQq", Stat, default_aes = aes(y = ..sample.., x = ..theoretical..), required_aes = c("sample"), compute_group = function(data, scales, quantiles = NULL, distribution = stats::qnorm, dparams = list(), na.rm = FALSE) { sample <- sort(data$sample) n <- length(sample) # Compute theoretical quantiles if (is.null(quantiles)) { quantiles <- stats::ppoints(n) } else { stopifnot(length(quantiles) == n) } theoretical <- do.call(distribution, c(list(p = quote(quantiles)), dparams)) data.frame(sample, theoretical) } ) ggplot2/R/theme.r0000644000175100001440000005525612567133164013361 0ustar hornikusers#' Get, set and update themes. #' #' Use \code{theme_update} to modify a small number of elements of the current #' theme or use \code{theme_set} to completely override it. #' #' @param ... named list of theme settings #' @seealso \code{\link{\%+replace\%}} and \code{\link{+.gg}} #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() #' p #' old <- theme_set(theme_bw()) #' p #' theme_set(old) #' p #' #' old <- theme_update(panel.background = element_rect(colour = "pink")) #' p #' theme_set(old) #' theme_get() #' #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(color = mpg)) + #' theme(legend.position = c(0.95, 0.95), #' legend.justification = c(1, 1)) #' last_plot() + #' theme(legend.background = element_rect(fill = "white", colour = "white", size = 3)) theme_update <- function(...) { # Make a call to theme, then add to theme theme_set(theme_get() %+replace% theme(...)) } #' Reports whether x is a theme object #' @param x An object to test #' @export is.theme <- function(x) inherits(x, "theme") #' @export print.theme <- function(x, ...) utils::str(x) #' Set theme elements #' #' #' Use this function to modify theme settings. #' #' Theme elements can inherit properties from other theme elements. #' For example, \code{axis.title.x} inherits from \code{axis.title}, #' which in turn inherits from \code{text}. All text elements inherit #' directly or indirectly from \code{text}; all lines inherit from #' \code{line}, and all rectangular objects inherit from \code{rect}. #' #' For more examples of modifying properties using inheritance, see #' \code{\link{+.gg}} and \code{\link{\%+replace\%}}. #' #' To see a graphical representation of the inheritance tree, see the #' last example below. #' #' @section Theme elements: #' The individual theme elements are: #' #' \tabular{ll}{ #' line \tab all line elements #' (\code{element_line}) \cr #' rect \tab all rectangular elements #' (\code{element_rect}) \cr #' text \tab all text elements #' (\code{element_text}) \cr #' title \tab all title elements: plot, axes, legends #' (\code{element_text}; inherits from \code{text}) \cr #' aspect.ratio \tab aspect ratio of the panel \cr #' #' axis.title \tab label of axes #' (\code{element_text}; inherits from \code{text}) \cr #' axis.title.x \tab x axis label #' (\code{element_text}; inherits from \code{axis.title}) \cr #' axis.title.y \tab y axis label #' (\code{element_text}; inherits from \code{axis.title}) \cr #' axis.text \tab tick labels along axes #' (\code{element_text}; inherits from \code{text}) \cr #' axis.text.x \tab x axis tick labels #' (\code{element_text}; inherits from \code{axis.text}) \cr #' axis.text.y \tab y axis tick labels #' (\code{element_text}; inherits from \code{axis.text}) \cr #' axis.ticks \tab tick marks along axes #' (\code{element_line}; inherits from \code{line}) \cr #' axis.ticks.x \tab x axis tick marks #' (\code{element_line}; inherits from \code{axis.ticks}) \cr #' axis.ticks.y \tab y axis tick marks #' (\code{element_line}; inherits from \code{axis.ticks}) \cr #' axis.ticks.length \tab length of tick marks #' (\code{unit}) \cr #' axis.line \tab lines along axes #' (\code{element_line}; inherits from \code{line}) \cr #' axis.line.x \tab line along x axis #' (\code{element_line}; inherits from \code{axis.line}) \cr #' axis.line.y \tab line along y axis #' (\code{element_line}; inherits from \code{axis.line}) \cr #' #' legend.background \tab background of legend #' (\code{element_rect}; inherits from \code{rect}) \cr #' legend.margin \tab extra space added around legend #' (\code{unit}) \cr #' legend.key \tab background underneath legend keys #' (\code{element_rect}; inherits from \code{rect}) \cr #' legend.key.size \tab size of legend keys #' (\code{unit}; inherits from \code{legend.key.size}) \cr #' legend.key.height \tab key background height #' (\code{unit}; inherits from \code{legend.key.size}) \cr #' legend.key.width \tab key background width #' (\code{unit}; inherits from \code{legend.key.size}) \cr #' legend.text \tab legend item labels #' (\code{element_text}; inherits from \code{text}) \cr #' legend.text.align \tab alignment of legend labels #' (number from 0 (left) to 1 (right)) \cr #' legend.title \tab title of legend #' (\code{element_text}; inherits from \code{title}) \cr #' legend.title.align \tab alignment of legend title #' (number from 0 (left) to 1 (right)) \cr #' legend.position \tab the position of legends #' ("none", "left", "right", "bottom", "top", or two-element #' numeric vector) \cr #' legend.direction \tab layout of items in legends #' ("horizontal" or "vertical") \cr #' legend.justification \tab anchor point for positioning legend inside plot #' ("center" or two-element numeric vector) \cr #' legend.box \tab arrangement of multiple legends #' ("horizontal" or "vertical") \cr #' legend.box.just \tab justification of each legend within the overall #' bounding box, when there are multiple legends #' ("top", "bottom", "left", or "right")\cr #' #' panel.background \tab background of plotting area, drawn underneath plot #' (\code{element_rect}; inherits from \code{rect}) \cr #' panel.border \tab border around plotting area, drawn on top of plot #' so that it covers tick marks and grid lines. This should #' be used with \code{fill=NA} #' (\code{element_rect}; inherits from \code{rect}) \cr #' panel.margin \tab margin around facet panels #' (\code{unit}) \cr #' panel.margin.x \tab horizontal margin around facet panels #' (\code{unit}; inherits from \code{panel.margin}) \cr #' panel.margin.y \tab vertical margin around facet panels #' (\code{unit}; inherits from \code{panel.margin}) \cr #' panel.grid \tab grid lines #' (\code{element_line}; inherits from \code{line}) \cr #' panel.grid.major \tab major grid lines #' (\code{element_line}; inherits from \code{panel.grid}) \cr #' panel.grid.minor \tab minor grid lines #' (\code{element_line}; inherits from \code{panel.grid}) \cr #' panel.grid.major.x \tab vertical major grid lines #' (\code{element_line}; inherits from \code{panel.grid.major}) \cr #' panel.grid.major.y \tab horizontal major grid lines #' (\code{element_line}; inherits from \code{panel.grid.major}) \cr #' panel.grid.minor.x \tab vertical minor grid lines #' (\code{element_line}; inherits from \code{panel.grid.minor}) \cr #' panel.grid.minor.y \tab horizontal minor grid lines #' (\code{element_line}; inherits from \code{panel.grid.minor}) \cr #' panel.ontop \tab option to place the panel (background, gridlines) #' over the data layers. Usually used with a transparent #' or blank \code{panel.background}. (\code{logical}) \cr #' #' plot.background \tab background of the entire plot #' (\code{element_rect}; inherits from \code{rect}) \cr #' plot.title \tab plot title (text appearance) #' (\code{element_text}; inherits from \code{title}) \cr #' plot.margin \tab margin around entire plot #' (\code{unit} with the sizes of the top, right, bottom, and #' left margins) \cr #' #' strip.background \tab background of facet labels #' (\code{element_rect}; inherits from \code{rect}) \cr #' strip.text \tab facet labels #' (\code{element_text}; inherits from \code{text}) \cr #' strip.text.x \tab facet labels along horizontal direction #' (\code{element_text}; inherits from \code{strip.text}) \cr #' strip.text.y \tab facet labels along vertical direction #' (\code{element_text}; inherits from \code{strip.text}) \cr #' strip.switch.pad.grid \tab space between strips and axes when strips are switched #' (\code{unit}) \cr #' strip.switch.pad.wrap \tab space between strips and axes when strips are switched #' (\code{unit}) \cr #' } #' #' @param ... a list of element name, element pairings that modify the #' existing theme. #' @param complete set this to TRUE if this is a complete theme, such as #' the one returned \code{by theme_grey()}. Complete themes behave #' differently when added to a ggplot object. #' @param validate TRUE to run validate_element, FALSE to bypass checks. #' #' @seealso \code{\link{+.gg}} #' @seealso \code{\link{\%+replace\%}} #' @seealso \code{\link{rel}} #' @seealso \code{\link{element_blank}} #' @seealso \code{\link{element_line}} #' @seealso \code{\link{element_rect}} #' @seealso \code{\link{element_text}} #' @export #' @examples #' \donttest{ #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() #' p #' p + theme(panel.background = element_rect(colour = "pink")) #' p + theme_bw() #' #' # Scatter plot of gas mileage by vehicle weight #' p <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() #' # Calculate slope and intercept of line of best fit #' coef(lm(mpg ~ wt, data = mtcars)) #' p + geom_abline(intercept = 37, slope = -5) #' # Calculate correlation coefficient #' with(mtcars, cor(wt, mpg, use = "everything", method = "pearson")) #' #annotate the plot #' p + geom_abline(intercept = 37, slope = -5) + #' geom_text(data = data.frame(), aes(4.5, 30, label = "Pearson-R = -.87")) #' #' # Change the axis labels #' # Original plot #' p #' p + labs(x = "Vehicle Weight", y = "Miles per Gallon") #' # Or #' p + labs(x = "Vehicle Weight", y = "Miles per Gallon") #' #' # Change title appearance #' p <- p + labs(title = "Vehicle Weight-Gas Mileage Relationship") #' # Set title to twice the base font size #' p + theme(plot.title = element_text(size = rel(2))) #' p + theme(plot.title = element_text(size = rel(2), colour = "blue")) #' #' # Changing plot look with themes #' DF <- data.frame(x = rnorm(400)) #' m <- ggplot(DF, aes(x = x)) + #' geom_histogram() #' # Default is theme_grey() #' m #' # Compare with #' m + theme_bw() #' #' # Manipulate Axis Attributes #' m + theme(axis.line = element_line(size = 3, colour = "red", linetype = "dotted")) #' m + theme(axis.text = element_text(colour = "blue")) #' m + theme(axis.text.y = element_blank()) #' m + theme(axis.ticks = element_line(size = 2)) #' m + theme(axis.title.y = element_text(size = rel(1.5), angle = 90)) #' m + theme(axis.title.x = element_blank()) #' m + theme(axis.ticks.length = unit(.85, "cm")) #' #' # Legend Attributes #' z <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point(aes(colour = factor(cyl))) #' z #' z + theme(legend.position = "none") #' z + theme(legend.position = "bottom") #' # Or use relative coordinates between 0 and 1 #' z + theme(legend.position = c(.5, .5)) #' # Add a border to the whole legend #' z + theme(legend.background = element_rect(colour = "black")) #' # Legend margin controls extra space around outside of legend: #' z + theme(legend.background = element_rect(), #' legend.margin = unit(1, "cm")) #' z + theme(legend.background = element_rect(), #' legend.margin = unit(0, "cm")) #' # Or to just the keys #' z + theme(legend.key = element_rect(colour = "black")) #' z + theme(legend.key = element_rect(fill = "yellow")) #' z + theme(legend.key.size = unit(2.5, "cm")) #' z + theme(legend.text = element_text(size = 20, colour = "red", angle = 45)) #' z + theme(legend.title = element_text(face = "italic")) #' #' # To change the title of the legend use the name argument #' # in one of the scale options #' z + scale_colour_brewer(name = "My Legend") #' z + scale_colour_grey(name = "Number of \nCylinders") #' #' # Panel and Plot Attributes #' z + theme(panel.background = element_rect(fill = "black")) #' z + theme(panel.border = element_rect(linetype = "dashed", colour = "black")) #' z + theme(panel.grid.major = element_line(colour = "blue")) #' z + theme(panel.grid.minor = element_line(colour = "red", linetype = "dotted")) #' z + theme(panel.grid.major = element_line(size = 2)) #' z + theme(panel.grid.major.y = element_blank(), #' panel.grid.minor.y = element_blank()) #' z + theme(plot.background = element_rect()) #' z + theme(plot.background = element_rect(fill = "green")) #' #' # Faceting Attributes #' set.seed(4940) #' dsmall <- diamonds[sample(nrow(diamonds), 1000), ] #' k <- ggplot(dsmall, aes(carat, ..density..)) + #' geom_histogram(binwidth = 0.2) + #' facet_grid(. ~ cut) #' k + theme(strip.background = element_rect(colour = "purple", fill = "pink", #' size = 3, linetype = "dashed")) #' k + theme(strip.text.x = element_text(colour = "red", angle = 45, size = 10, #' hjust = 0.5, vjust = 0.5)) #' k + theme(panel.margin = unit(5, "lines")) #' k + theme(panel.margin.y = unit(0, "lines")) #' #' # Put gridlines on top #' meanprice <- tapply(diamonds$price, diamonds$cut, mean) #' cut <- factor(levels(diamonds$cut), levels = levels(diamonds$cut)) #' df <- data.frame(meanprice, cut) #' g <- ggplot(df, aes(cut, meanprice)) + geom_bar(stat = "identity") #' g + geom_bar(stat = "identity") + #' theme(panel.background = element_blank(), #' panel.grid.major.x = element_blank(), #' panel.grid.minor.x = element_blank(), #' panel.grid.minor.y = element_blank(), #' panel.ontop = TRUE) #' #' # Modify a theme and save it #' mytheme <- theme_grey() + theme(plot.title = element_text(colour = "red")) #' p + mytheme #' #' } #' #' \dontrun{ #' ## Run this to generate a graph of the element inheritance tree #' build_element_graph <- function(tree) { #' require(igraph) #' require(plyr) #' #' inheritdf <- function(name, item) { #' if (length(item$inherit) == 0) #' data.frame() #' else #' data.frame(child = name, parent = item$inherit) #' } #' #' edges <- plyr::rbind.fill(mapply(inheritdf, names(tree), tree)) #' #' # Explicitly add vertices (since not all are in edge list) #' vertices <- data.frame(name = names(tree)) #' graph.data.frame(edges, vertices = vertices) #' } #' #' g <- build_element_graph(ggplot2:::.element_tree) #' V(g)$label <- V(g)$name #' #' set.seed(324) #' par(mar=c(0,0,0,0)) # Remove unnecessary margins #' plot(g, layout=layout.fruchterman.reingold, vertex.size=4, vertex.label.dist=.25) #' #' } theme <- function(..., complete = FALSE, validate = TRUE) { elements <- list(...) if (!is.null(elements$axis.ticks.margin)) { warning("`axis.ticks.margin` is deprecated. Please set `margin` property ", " of `axis.text` instead", call. = FALSE) elements$axis.ticks.margin <- NULL } # Check that all elements have the correct class (element_text, unit, etc) if (validate) { mapply(validate_element, elements, names(elements)) } structure(elements, class = c("theme", "gg"), complete = complete, validate = validate) } # Combine plot defaults with current theme to get complete theme for a plot plot_theme <- function(x) { defaults(x$theme, theme_get()) } .theme <- (function() { theme <- theme_gray() list( get = function() theme, set = function(new) { missing <- setdiff(names(theme_gray()), names(new)) if (length(missing) > 0) { warning("New theme missing the following elements: ", paste(missing, collapse = ", "), call. = FALSE) } old <- theme theme <<- new invisible(old) } ) })() #' @rdname theme_update #' @export theme_get <- .theme$get #' @rdname theme_update #' @param new new theme (a list of theme elements) #' @export theme_set <- .theme$set #' @rdname gg-add #' @export "%+replace%" <- function(e1, e2) { if (!is.theme(e1) || !is.theme(e2)) { stop("%+replace% requires two theme objects", call. = FALSE) } # Can't use modifyList here since it works recursively and drops NULLs e1[names(e2)] <- e2 e1 } #' Modify properties of an element in a theme object #' #' @param t1 A theme object #' @param t2 A theme object that is to be added to \code{t1} #' @param t2name A name of the t2 object. This is used for printing #' informative error messages. #' #' @seealso +.gg #' add_theme <- function(t1, t2, t2name) { if (!is.theme(t2)) { stop("Don't know how to add ", t2name, " to a theme object", call. = FALSE) } # Iterate over the elements that are to be updated for (item in names(t2)) { x <- t1[[item]] y <- t2[[item]] if (is.null(x) || inherits(x, "element_blank")) { # If x is NULL or element_blank, then just assign it y x <- y } else if (is.null(y) || is.character(y) || is.numeric(y) || is.logical(y) || inherits(y, "element_blank")) { # If y is NULL, or a string or numeric vector, or is element_blank, just replace x x <- y } else { # If x is not NULL, then copy over the non-NULL properties from y # Get logical vector of non-NULL properties in y idx <- !vapply(y, is.null, logical(1)) # Get the names of TRUE items idx <- names(idx[idx]) # Update non-NULL items x[idx] <- y[idx] } # Assign it back to t1 # This is like doing t1[[item]] <- x, except that it preserves NULLs. # The other form will simply drop NULL values t1[item] <- list(x) } # If either theme is complete, then the combined theme is complete attr(t1, "complete") <- attr(t1, "complete") || attr(t2, "complete") t1 } # Update a theme from a plot object # # This is called from add_ggplot. # # If newtheme is a *complete* theme, then it is meant to replace # oldtheme; this function just returns newtheme. # # Otherwise, it adds elements from newtheme to oldtheme: # If oldtheme doesn't already contain those elements, # it searches the current default theme, grabs the elements with the # same name as those from newtheme, and puts them in oldtheme. Then # it adds elements from newtheme to oldtheme. # This makes it possible to do things like: # ggplot(data.frame(x = 1:3, y = 1:3)) + # geom_point() + theme(text = element_text(colour = 'red')) # and have 'text' keep properties from the default theme. Otherwise # you would have to set all the element properties, like family, size, # etc. # # @param oldtheme an existing theme, usually from a plot object, like # plot$theme. This could be an empty list. # @param newtheme a new theme object to add to the existing theme update_theme <- function(oldtheme, newtheme) { # If the newtheme is a complete one, don't bother searching # the default theme -- just replace everything with newtheme if (attr(newtheme, "complete")) return(newtheme) # These are elements in newtheme that aren't already set in oldtheme. # They will be pulled from the default theme. newitems <- !names(newtheme) %in% names(oldtheme) newitem_names <- names(newtheme)[newitems] oldtheme[newitem_names] <- theme_get()[newitem_names] # Update the theme elements with the things from newtheme # Turn the 'theme' list into a proper theme object first, and preserve # the 'complete' attribute. It's possible that oldtheme is an empty # list, and in that case, set complete to FALSE. old.validate <- isTRUE(attr(oldtheme, "validate")) new.validate <- isTRUE(attr(newtheme, "validate")) oldtheme <- do.call(theme, c(oldtheme, complete = isTRUE(attr(oldtheme, "complete")), validate = old.validate & new.validate)) oldtheme + newtheme } #' Calculate the element properties, by inheriting properties from its parents #' #' @param element The name of the theme element to calculate #' @param theme A theme object (like theme_grey()) #' @param verbose If TRUE, print out which elements this one inherits from #' @examples #' t <- theme_grey() #' calc_element('text', t) #' #' # Compare the "raw" element definition to the element with calculated inheritance #' t$axis.text.x #' calc_element('axis.text.x', t, verbose = TRUE) #' #' # This reports that axis.text.x inherits from axis.text, #' # which inherits from text. You can view each of them with: #' t$axis.text.x #' t$axis.text #' t$text #' #' @export calc_element <- function(element, theme, verbose = FALSE) { if (verbose) message(element, " --> ", appendLF = FALSE) # If this is element_blank, don't inherit anything from parents if (inherits(theme[[element]], "element_blank")) { if (verbose) message("element_blank (no inheritance)") return(theme[[element]]) } # If the element is defined (and not just inherited), check that # it is of the class specified in .element_tree if (!is.null(theme[[element]]) && !inherits(theme[[element]], .element_tree[[element]]$class)) { stop(element, " should have class ", .element_tree[[element]]$class) } # Get the names of parents from the inheritance tree pnames <- .element_tree[[element]]$inherit # If no parents, this is a "root" node. Just return this element. if (is.null(pnames)) { # Check that all the properties of this element are non-NULL nullprops <- vapply(theme[[element]], is.null, logical(1)) if (any(nullprops)) { stop("Theme element '", element, "' has NULL property: ", paste(names(nullprops)[nullprops], collapse = ", ")) } if (verbose) message("nothing (top level)") return(theme[[element]]) } # Calculate the parent objects' inheritance if (verbose) message(paste(pnames, collapse = ", ")) parents <- lapply(pnames, calc_element, theme, verbose) # Combine the properties of this element with all parents Reduce(combine_elements, parents, theme[[element]]) } # Combine the properties of two elements # # @param e1 An element object # @param e2 An element object which e1 inherits from combine_elements <- function(e1, e2) { # If e2 is NULL, nothing to inherit if (is.null(e2)) return(e1) # If e1 is NULL, or if e2 is element_blank, inherit everything from e2 if (is.null(e1) || inherits(e2, "element_blank")) return(e2) # If e1 has any NULL properties, inherit them from e2 n <- vapply(e1[names(e2)], is.null, logical(1)) e1[n] <- e2[n] # Calculate relative sizes if (is.rel(e1$size)) { e1$size <- e2$size * unclass(e1$size) } e1 } ggplot2/R/geom-dotplot.r0000644000175100001440000002606412607215012014650 0ustar hornikusers#' Dot plot #' #' In a dot plot, the width of a dot corresponds to the bin width #' (or maximum width, depending on the binning algorithm), and dots are #' stacked, with each dot representing one observation. #' #' With dot-density binning, the bin positions are determined by the data and #' \code{binwidth}, which is the maximum width of each bin. See Wilkinson #' (1999) for details on the dot-density binning algorithm. #' #' With histodot binning, the bins have fixed positions and fixed widths, much #' like a histogram. #' #' When binning along the x axis and stacking along the y axis, the numbers on #' y axis are not meaningful, due to technical limitations of ggplot2. You can #' hide the y axis, as in one of the examples, or manually scale it #' to match the number of dots. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "dotplot")} #' #' @inheritParams geom_point #' @param stackdir which direction to stack the dots. "up" (default), #' "down", "center", "centerwhole" (centered, but with dots aligned) #' @param stackratio how close to stack the dots. Default is 1, where dots just #' just touch. Use smaller values for closer, overlapping dots. #' @param dotsize The diameter of the dots relative to \code{binwidth}, default 1. #' @param stackgroups should dots be stacked across groups? This has the effect #' that \code{position = "stack"} should have, but can't (because this geom has #' some odd properties). #' @param binaxis The axis to bin along, "x" (default) or "y" #' @param method "dotdensity" (default) for dot-density binning, or #' "histodot" for fixed bin widths (like stat_bin) #' @param binwidth When \code{method} is "dotdensity", this specifies maximum bin #' width. When \code{method} is "histodot", this specifies bin width. #' Defaults to 1/30 of the range of the data #' @param binpositions When \code{method} is "dotdensity", "bygroup" (default) #' determines positions of the bins for each group separately. "all" determines #' positions of the bins with all the data taken together; this is used for #' aligning dot stacks across multiple groups. #' @param origin When \code{method} is "histodot", origin of first bin #' @param right When \code{method} is "histodot", should intervals be closed #' on the right (a, b], or not [a, b) #' @param width When \code{binaxis} is "y", the spacing of the dot stacks #' for dodging. #' @param drop If TRUE, remove all bins with zero counts #' @section Computed variables: #' \describe{ #' \item{x}{center of each bin, if binaxis is "x"} #' \item{y}{center of each bin, if binaxis is "x"} #' \item{binwidth}{max width of each bin if method is "dotdensity"; #' width of each bin if method is "histodot"} #' \item{count}{number of points in bin} #' \item{ncount}{count, scaled to maximum of 1} #' \item{density}{density of points in bin, scaled to integrate to 1, #' if method is "histodot"} #' \item{ndensity}{density, scaled to maximum of 1, if method is "histodot"} #' } #' @export #' @references Wilkinson, L. (1999) Dot plots. The American Statistician, #' 53(3), 276-281. #' @examples #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot() #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) #' #' # Use fixed-width bins #' ggplot(mtcars, aes(x = mpg)) + #' geom_dotplot(method="histodot", binwidth = 1.5) #' #' # Some other stacking methods #' ggplot(mtcars, aes(x = mpg)) + #' geom_dotplot(binwidth = 1.5, stackdir = "center") #' ggplot(mtcars, aes(x = mpg)) + #' geom_dotplot(binwidth = 1.5, stackdir = "centerwhole") #' #' # y axis isn't really meaningful, so hide it #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) + #' scale_y_continuous(NULL, breaks = NULL) #' #' # Overlap dots vertically #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackratio = .7) #' #' # Expand dot diameter #' ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, dotsize = 1.25) #' #' \donttest{ #' # Examples with stacking along y axis instead of x #' ggplot(mtcars, aes(x = 1, y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center") #' #' ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center") #' #' ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "centerwhole") #' #' ggplot(mtcars, aes(x = factor(vs), fill = factor(cyl), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center", position = "dodge") #' #' # binpositions="all" ensures that the bins are aligned between groups #' ggplot(mtcars, aes(x = factor(am), y = mpg)) + #' geom_dotplot(binaxis = "y", stackdir = "center", binpositions="all") #' #' # Stacking multiple groups, with different fill #' ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + #' geom_dotplot(stackgroups = TRUE, binwidth = 1, binpositions = "all") #' #' ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + #' geom_dotplot(stackgroups = TRUE, binwidth = 1, method = "histodot") #' #' ggplot(mtcars, aes(x = 1, y = mpg, fill = factor(cyl))) + #' geom_dotplot(binaxis = "y", stackgroups = TRUE, binwidth = 1, method = "histodot") #' } geom_dotplot <- function(mapping = NULL, data = NULL, position = "identity", binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", stackdir = "up", stackratio = 1, dotsize = 1, stackgroups = FALSE, origin = NULL, right = TRUE, width = 0.9, drop = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { # If identical(position, "stack") or position is position_stack(), tell them # to use stackgroups=TRUE instead. Need to use identical() instead of ==, # because == will fail if object is position_stack() or position_dodge() if (!is.null(position) && (identical(position, "stack") || (inherits(position, "PositionStack")))) message("position=\"stack\" doesn't work properly with geom_dotplot. Use stackgroups=TRUE instead.") if (stackgroups && method == "dotdensity" && binpositions == "bygroup") message('geom_dotplot called with stackgroups=TRUE and method="dotdensity". You probably want to set binpositions="all"') layer( data = data, mapping = mapping, stat = StatBindot, geom = GeomDotplot, position = position, show.legend = show.legend, inherit.aes = inherit.aes, # Need to make sure that the binaxis goes to both the stat and the geom params = list( binaxis = binaxis, binwidth = binwidth, binpositions = binpositions, method = method, origin = origin, right = right, width = width, drop = drop, stackdir = stackdir, stackratio = stackratio, dotsize = dotsize, stackgroups = stackgroups, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomDotplot <- ggproto("GeomDotplot", Geom, required_aes = c("x", "y"), non_missing_aes = c("size", "shape"), default_aes = aes(colour = "black", fill = "black", alpha = NA), setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) # Set up the stacking function and range if (is.null(params$stackdir) || params$stackdir == "up") { stackdots <- function(a) a - .5 stackaxismin <- 0 stackaxismax <- 1 } else if (params$stackdir == "down") { stackdots <- function(a) -a + .5 stackaxismin <- -1 stackaxismax <- 0 } else if (params$stackdir == "center") { stackdots <- function(a) a - 1 - max(a - 1) / 2 stackaxismin <- -.5 stackaxismax <- .5 } else if (params$stackdir == "centerwhole") { stackdots <- function(a) a - 1 - floor(max(a - 1) / 2) stackaxismin <- -.5 stackaxismax <- .5 } # Fill the bins: at a given x (or y), if count=3, make 3 entries at that x data <- data[rep(1:nrow(data), data$count), ] # Next part will set the position of each dot within each stack # If stackgroups=TRUE, split only on x (or y) and panel; if not stacking, also split by group plyvars <- params$binaxis %||% "x" plyvars <- c(plyvars, "PANEL") if (is.null(params$stackgroups) || !params$stackgroups) plyvars <- c(plyvars, "group") # Within each x, or x+group, set countidx=1,2,3, and set stackpos according to stack function data <- plyr::ddply(data, plyvars, function(xx) { xx$countidx <- 1:nrow(xx) xx$stackpos <- stackdots(xx$countidx) xx }) # Set the bounding boxes for the dots if (is.null(params$binaxis) || params$binaxis == "x") { # ymin, ymax, xmin, and xmax define the bounding rectangle for each stack # Can't do bounding box per dot, because y position isn't real. # After position code is rewritten, each dot should have its own bounding box. data$xmin <- data$x - data$binwidth / 2 data$xmax <- data$x + data$binwidth / 2 data$ymin <- stackaxismin data$ymax <- stackaxismax data$y <- 0 } else if (params$binaxis == "y") { # ymin, ymax, xmin, and xmax define the bounding rectangle for each stack # Can't do bounding box per dot, because x position isn't real. # xmin and xmax aren't really the x bounds, because of the odd way the grob # works. They're just set to the standard x +- width/2 so that dot clusters # can be dodged like other geoms. # After position code is rewritten, each dot should have its own bounding box. data <- plyr::ddply(data, "group", transform, ymin = min(y) - binwidth[1] / 2, ymax = max(y) + binwidth[1] / 2) data$xmin <- data$x + data$width * stackaxismin data$xmax <- data$x + data$width * stackaxismax # Unlike with y above, don't change x because it will cause problems with dodging } data }, draw_group = function(data, panel_scales, coord, na.rm = FALSE, binaxis = "x", stackdir = "up", stackratio = 1, dotsize = 1, stackgroups = FALSE) { if (!coord$is_linear()) { warning("geom_dotplot does not work properly with non-linear coordinates.") } tdata <- coord$transform(data, panel_scales) # Swap axes if using coord_flip if (inherits(coord, "CoordFlip")) binaxis <- ifelse(binaxis == "x", "y", "x") if (binaxis == "x") { stackaxis = "y" dotdianpc <- dotsize * tdata$binwidth[1] / (max(panel_scales$x.range) - min(panel_scales$x.range)) } else if (binaxis == "y") { stackaxis = "x" dotdianpc <- dotsize * tdata$binwidth[1] / (max(panel_scales$y.range) - min(panel_scales$y.range)) } ggname("geom_dotplot", dotstackGrob(stackaxis = stackaxis, x = tdata$x, y = tdata$y, dotdia = dotdianpc, stackposition = tdata$stackpos, stackratio = stackratio, default.units = "npc", gp = gpar(col = alpha(tdata$colour, tdata$alpha), fill = alpha(tdata$fill, tdata$alpha))) ) }, draw_key = draw_key_dotplot ) ggplot2/R/aes-group-order.r0000644000175100001440000000642412567665533015275 0ustar hornikusers#' Aesthetics: group #' #' @name aes_group_order #' @aliases group #' #' @examples #' \donttest{ #' #' # By default, the group is set to the interaction of all discrete variables in the #' # plot. This often partitions the data correctly, but when it does not, or when #' # no discrete variable is used in the plot, you will need to explicitly define the #' # grouping structure, by mapping group to a variable that has a different value #' # for each group. #' #' # For most applications you can simply specify the grouping with #' # various aesthetics (colour, shape, fill, linetype) or with facets. #' #' p <- ggplot(mtcars, aes(wt, mpg)) #' # A basic scatter plot #' p + geom_point(size = 4) #' # The colour aesthetic #' p + geom_point(aes(colour = factor(cyl)), size = 4) #' # Or you can use shape to distinguish the data #' p + geom_point(aes(shape = factor(cyl)), size = 4) #' #' # Using fill #' a <- ggplot(mtcars, aes(factor(cyl))) #' a + geom_bar() #' a + geom_bar(aes(fill = factor(cyl))) #' a + geom_bar(aes(fill = factor(vs))) #' #' # Using linetypes #' rescale01 <- function(x) (x - min(x)) / diff(range(x)) #' ec_scaled <- data.frame( #' date = economics$date, #' plyr::colwise(rescale01)(economics[, -(1:2)])) #' ecm <- reshape2::melt(ec_scaled, id.vars = "date") #' f <- ggplot(ecm, aes(date, value)) #' f + geom_line(aes(linetype = variable)) #' #' # Using facets #' k <- ggplot(diamonds, aes(carat, ..density..)) + geom_histogram(binwidth = 0.2) #' k + facet_grid(. ~ cut) #' #' # There are three common cases where the default is not enough, and we #' # will consider each one below. In the following examples, we will use a simple #' # longitudinal dataset, Oxboys, from the nlme package. It records the heights #' # (height) and centered ages (age) of 26 boys (Subject), measured on nine #' # occasions (Occasion). #' #' # Multiple groups with one aesthetic #' h <- ggplot(nlme::Oxboys, aes(age, height)) #' # A single line tries to connect all the observations #' h + geom_line() #' # The group aesthetic maps a different line for each subject #' h + geom_line(aes(group = Subject)) #' #' # Different groups on different layers #' h <- h + geom_line(aes(group = Subject)) #' # Using the group aesthetic with both geom_line() and geom_smooth() #' # groups the data the same way for both layers #' h + geom_smooth(aes(group = Subject), method = "lm", se = FALSE) #' # Changing the group aesthetic for the smoother layer #' # fits a single line of best fit across all boys #' h + geom_smooth(aes(group = 1), size = 2, method = "lm", se = FALSE) #' #' # Overriding the default grouping #' # The plot has a discrete scale but you want to draw lines that connect across #' # groups. This is the strategy used in interaction plots, profile plots, and parallel #' # coordinate plots, among others. For example, we draw boxplots of height at #' # each measurement occasion #' boysbox <- ggplot(nlme::Oxboys, aes(Occasion, height)) #' boysbox + geom_boxplot() #' # There is no need to specify the group aesthetic here; the default grouping #' # works because occasion is a discrete variable. To overlay individual trajectories #' # we again need to override the default grouping for that layer with aes(group = Subject) #' boysbox <- boysbox + geom_boxplot() #' boysbox + geom_line(aes(group = Subject), colour = "blue") #' } NULL ggplot2/R/bench.r0000644000175100001440000000135612555701147013325 0ustar hornikusers#' Benchmark plot creation time. #' Broken down into construct, build, render and draw times. #' #' @param x code to create ggplot2 plot #' @export #' @keywords internal #' @examples #' benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point()) #' benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_grid(. ~ cyl)) benchplot <- function(x) { construct <- system.time(force(x)) stopifnot(inherits(x, "ggplot")) build <- system.time(data <- ggplot_build(x)) render <- system.time(grob <- ggplot_gtable(data)) draw <- system.time(grid.draw(grob)) times <- rbind(construct, build, render, draw)[, 1:3] plyr::unrowname(data.frame( step = c("construct", "build", "render", "draw", "TOTAL"), rbind(times, colSums(times)))) } ggplot2/R/position-nudge.R0000644000175100001440000000174412606756762015165 0ustar hornikusers#' Nudge points. #' #' This is useful if you want to nudge labels a little ways from their #' points. #' #' @family position adjustments #' @param x,y Amount of vertical and horizontal distance to move. #' @export #' @examples #' df <- data.frame( #' x = c(1,3,2,5), #' y = c("a","c","d","c") #' ) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_text(aes(label = y)) #' #' ggplot(df, aes(x, y)) + #' geom_point() + #' geom_text(aes(label = y), position = position_nudge(y = -0.1)) position_nudge <- function(x = 0, y = 0) { ggproto(NULL, PositionNudge, x = x, y = y ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionNudge <- ggproto("PositionNudge", Position, x = NULL, y = NULL, required_aes = c("x", "y"), setup_params = function(self, data) { list(x = self$x, y = self$y) }, compute_layer = function(data, params, panel) { transform_position(data, function(x) x + params$x, function(y) y + params$y) } ) ggplot2/R/plot-construction.r0000644000175100001440000000744212620172004015741 0ustar hornikusers#' Modify a ggplot or theme object by adding on new components. #' #' This operator allows you to add objects to a ggplot or theme object. #' #' If the first object is an object of class \code{ggplot}, you can add #' the following types of objects, and it will return a modified ggplot #' object. #' #' \itemize{ #' \item \code{data.frame}: replace current data.frame #' (must use \code{\%+\%}) #' \item \code{uneval}: replace current aesthetics #' \item \code{layer}: add new layer #' \item \code{theme}: update plot theme #' \item \code{scale}: replace current scale #' \item \code{coord}: override current coordinate system #' \item \code{facet}: override current coordinate faceting #' } #' #' If the first object is an object of class \code{theme}, you can add #' another theme object. This will return a modified theme object. #' #' For theme objects, the \code{+} operator and the \code{\%+replace\%} #' can be used to modify elements in themes. #' #' The \code{+} operator updates the elements of e1 that differ from #' elements specified (not NULL) in e2. #' Thus this operator can be used to incrementally add or modify attributes #' of a ggplot theme. #' #' In contrast, the \code{\%+replace\%} operator replaces the #' entire element; any element of a theme not specified in e2 will not be #' present in the resulting theme (i.e. NULL). #' Thus this operator can be used to overwrite an entire theme. #' #' @examples #' ### Adding objects to a ggplot object #' p <- ggplot(mtcars, aes(wt, mpg, colour = disp)) + #' geom_point() #' #' p #' p + coord_cartesian(ylim = c(0, 40)) #' p + scale_colour_continuous(breaks = c(100, 300)) #' p + guides(colour = "colourbar") #' #' # Use a different data frame #' m <- mtcars[1:10, ] #' p %+% m #' #' ### Adding objects to a theme object #' # Compare these results of adding theme objects to other theme objects #' add_el <- theme_grey() + theme(text = element_text(family = "Times")) #' rep_el <- theme_grey() %+replace% theme(text = element_text(family = "Times")) #' #' add_el$text #' rep_el$text #' #' @param e1 An object of class \code{ggplot} or \code{theme} #' @param e2 A component to add to \code{e1} #' @export #' @seealso \code{\link{theme}} #' @method + gg #' @rdname gg-add "+.gg" <- function(e1, e2) { # Get the name of what was passed in as e2, and pass along so that it # can be displayed in error messages e2name <- deparse(substitute(e2)) if (is.theme(e1)) add_theme(e1, e2, e2name) else if (is.ggplot(e1)) add_ggplot(e1, e2, e2name) } #' @rdname gg-add #' @export "%+%" <- `+.gg` add_ggplot <- function(p, object, objectname) { if (is.null(object)) return(p) p <- plot_clone(p) if (is.data.frame(object)) { p$data <- object } else if (is.theme(object)) { p$theme <- update_theme(p$theme, object) } else if (inherits(object, "Scale")) { p$scales$add(object) } else if (inherits(object, "labels")) { p <- update_labels(p, object) } else if (inherits(object, "guides")) { p <- update_guides(p, object) } else if (inherits(object, "uneval")) { p$mapping <- defaults(object, p$mapping) labels <- lapply(object, deparse) names(labels) <- names(object) p <- update_labels(p, labels) } else if (is.Coord(object)) { p$coordinates <- object p } else if (is.facet(object)) { p$facet <- object p } else if (is.list(object)) { for (o in object) { p <- p + o } } else if (is.layer(object)) { p$layers <- append(p$layers, object) # Add any new labels mapping <- make_labels(object$mapping) default <- make_labels(object$stat$default_aes) new_labels <- defaults(mapping, default) p$labels <- defaults(p$labels, new_labels) } else { stop("Don't know how to add ", objectname, " to a plot", call. = FALSE) } set_last_plot(p) p } ggplot2/R/stat-smooth.r0000644000175100001440000000766212607215012014523 0ustar hornikusers#' @param method smoothing method (function) to use, eg. lm, glm, gam, loess, #' rlm. For datasets with n < 1000 default is \code{\link{loess}}. For datasets #' with 1000 or more observations defaults to gam, see \code{\link[mgcv]{gam}} #' for more details. #' @param formula formula to use in smoothing function, eg. \code{y ~ x}, #' \code{y ~ poly(x, 2)}, \code{y ~ log(x)} #' @param se display confidence interval around smooth? (TRUE by default, see #' level to control #' @param fullrange should the fit span the full range of the plot, or just #' the data #' @param level level of confidence interval to use (0.95 by default) #' @param span Controls the amount of smoothing for the default loess smoother. #' Smaller numbers produce wigglier lines, larger numbers produce smoother #' lines. #' @param n number of points to evaluate smoother at #' @param method.args List of additional arguments passed on to the modelling #' function defined by \code{method}. #' @section Computed variables: #' \describe{ #' \item{y}{predicted value} #' \item{ymin}{lower pointwise confidence interval around the mean} #' \item{ymax}{upper pointwise confidence interval around the mean} #' \item{se}{standard error} #' } #' @export #' @rdname geom_smooth stat_smooth <- function(mapping = NULL, data = NULL, geom = "smooth", position = "identity", method = "auto", formula = y ~ x, se = TRUE, n = 80, span = 0.75, fullrange = FALSE, level = 0.95, method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatSmooth, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( method = method, formula = formula, se = se, n = n, fullrange = fullrange, level = level, na.rm = na.rm, method.args = method.args, span = span, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSmooth <- ggproto("StatSmooth", Stat, setup_params = function(data, params) { # Figure out what type of smoothing to do: loess for small datasets, # gam with a cubic regression basis for large data # This is based on the size of the _largest_ group. if (identical(params$method, "auto")) { max_group <- max(table(data$group)) if (max_group < 1000) { params$method <- "loess" } else { params$method <- "gam" params$formula <- y ~ s(x, bs = "cs") } } if (identical(params$method, "gam")) { params$method <- mgcv::gam } params }, compute_group = function(data, scales, method = "auto", formula = y~x, se = TRUE, n = 80, span = 0.75, fullrange = FALSE, xseq = NULL, level = 0.95, method.args = list(), na.rm = FALSE) { if (length(unique(data$x)) < 2) { # Not enough data to perform fit return(data.frame()) } if (is.null(data$weight)) data$weight <- 1 if (is.null(xseq)) { if (is.integer(data$x)) { if (fullrange) { xseq <- scales$x$dimension() } else { xseq <- sort(unique(data$x)) } } else { if (fullrange) { range <- scales$x$dimension() } else { range <- range(data$x, na.rm = TRUE) } xseq <- seq(range[1], range[2], length.out = n) } } # Special case span because it's the most commonly used model argument if (identical(method, "loess")) { method.args$span <- span } if (is.character(method)) method <- match.fun(method) base.args <- list(quote(formula), data = quote(data), weights = quote(weight)) model <- do.call(method, c(base.args, method.args)) predictdf(model, xseq, se, level) }, required_aes = c("x", "y") ) ggplot2/R/zzz.r0000644000175100001440000000134312606755330013077 0ustar hornikusers.onAttach <- function(...) { if (!interactive() || stats::runif(1) > 0.1) return() tips <- c( "Need help? Try the ggplot2 mailing list: http://groups.google.com/group/ggplot2.", "Find out what's changed in ggplot2 at http://github.com/hadley/ggplot2/releases.", "Use suppressPackageStartupMessages() to eliminate package startup messages.", "Stackoverflow is a great place to get help: http://stackoverflow.com/tags/ggplot2.", "Need help getting started? Try the cookbook for R: http://www.cookbook-r.com/Graphs/", "Want to understand how all the pieces fit together? Buy the ggplot2 book: http://ggplot2.org/book/" ) tip <- sample(tips, 1) packageStartupMessage(paste(strwrap(tip), collapse = "\n")) } ggplot2/R/geom-abline.r0000644000175100001440000001022712607211750014414 0ustar hornikusers#' @include stat-.r NULL #' Lines: horizontal, vertical, and specified by slope and intercept. #' #' These paired geoms and stats add straight lines to a plot, either #' horizontal, vertical or specified by slope and intercept. These are useful #' for annotating plots. #' #' These geoms act slightly different to other geoms. You can supply the #' parameters in two ways: either as arguments to the layer function, #' or via aesthetics. If you use arguments, e.g. #' \code{geom_abline(intercept = 0, slope = 1)}, then behind the scenes #' the geom makes a new data frame containing just the data you've supplied. #' That means that the lines will be the same in all facets; if you want them #' to vary across facets, construct the data frame yourself and use aesthetics. #' #' Unlike most other geoms, these geoms do not inherit aesthetics from the plot #' default, because they do not understand x and y aesthetics which are #' commonly set in the plot. They also do not affect the x and y scales. #' #' @section Aesthetics: #' These geoms are drawn using with \code{\link{geom_line}} so support the #' same aesthetics: alpha, colour, linetype and size. They also each have #' aesthetics that control the position of the line: #' #' \itemize{ #' \item \code{geom_vline}: \code{xintercept} #' \item \code{geom_hline}: \code{yintercept} #' \item \code{geom_abline}: \code{slope} and \code{intercept} #' } #' #' @seealso See \code{\link{geom_segment}} for a more general approach to #' adding straight line segments to a plot. #' @param xintercept,yintercept,slope,intercept Parameters that control the #' position of the line. If these are set, \code{data}, \code{mapping} and #' \code{show.legend} are overridden #' @inheritParams geom_point #' @export #' @examples #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' #' # Fixed values #' p + geom_vline(xintercept = 5) #' p + geom_vline(xintercept = 1:5) #' p + geom_hline(yintercept = 20) #' #' p + geom_abline() # Can't see it - outside the range of the data #' p + geom_abline(intercept = 20) #' #' # Calculate slope and intercept of line of best fit #' coef(lm(mpg ~ wt, data = mtcars)) #' p + geom_abline(intercept = 37, slope = -5) #' # But this is easier to do with geom_smooth: #' p + geom_smooth(method = "lm", se = FALSE) #' #' # To show different lines in different facets, use aesthetics #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' facet_wrap(~ cyl) #' #' mean_wt <- data.frame(cyl = c(4, 6, 8), wt = c(2.28, 3.11, 4.00)) #' p + geom_hline(aes(yintercept = wt), mean_wt) #' #' # You can also control other aesthetics #' ggplot(mtcars, aes(mpg, wt, colour = wt)) + #' geom_point() + #' geom_hline(aes(yintercept = wt, colour = wt), mean_wt) + #' facet_wrap(~ cyl) geom_abline <- function(mapping = NULL, data = NULL, ..., slope, intercept, na.rm = FALSE, show.legend = NA) { # If nothing set, default to y = x if (missing(mapping) && missing(slope) && missing(intercept)) { slope <- 1 intercept <- 0 } # Act like an annotation if (!missing(slope) || !missing(intercept)) { if (missing(slope)) slope <- 1 if (missing(intercept)) intercept <- 0 data <- data.frame(intercept = intercept, slope = slope) mapping <- aes(intercept = intercept, slope = slope) show.legend <- FALSE } layer( data = data, mapping = mapping, stat = StatIdentity, geom = GeomAbline, position = PositionIdentity, show.legend = show.legend, inherit.aes = FALSE, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomAbline <- ggproto("GeomAbline", Geom, draw_panel = function(data, panel_scales, coord) { ranges <- coord$range(panel_scales) data$x <- ranges$x[1] data$xend <- ranges$x[2] data$y <- ranges$x[1] * data$slope + data$intercept data$yend <- ranges$x[2] * data$slope + data$intercept GeomSegment$draw_panel(unique(data), panel_scales, coord) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), required_aes = c("slope", "intercept"), draw_key = draw_key_abline ) ggplot2/R/geom-bar.r0000644000175100001440000001126412620170050013720 0ustar hornikusers#' Bars, rectangles with bases on x-axis #' #' There are two types of bar charts, determined by what is mapped to bar #' height. By default, \code{geom_bar} uses \code{stat="count"} which makes the #' height of the bar proportion to the number of cases in each group (or if the #' \code{weight} aethetic is supplied, the sum of the weights). If you want the #' heights of the bars to represent values in the data, use #' \code{stat="identity"} and map a variable to the \code{y} aesthetic. #' #' A bar chart maps the height of the bar to a variable, and so the base of the #' bar must always be shown to produce a valid visual comparison. Naomi Robbins #' has a nice #' \href{http://www.b-eye-network.com/view/index.php?cid=2468}{article on this #' topic}. This is why it doesn't make sense to use a log-scaled y axis with a #' bar chart. #' #' By default, multiple x's occurring in the same place will be stacked atop one #' another by \code{\link{position_stack}}. If you want them to be dodged #' side-to-side, see \code{\link{position_dodge}}. Finally, #' \code{\link{position_fill}} shows relative proportions at each x by stacking #' the bars and then stretching or squashing to the same height. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "bar")} #' #' @seealso \code{\link{geom_histogram}} for continuous data, #' \code{\link{position_dodge}} for creating side-by-side barcharts. #' @export #' @inheritParams geom_point #' @param width Bar width. By default, set to 90\% of the resolution of the data. #' @param binwidth \code{geom_bar} no longer has a binwidth argument - if #' you use it you'll get an warning telling to you use #' \code{\link{geom_histogram}} instead. #' @param geom,stat Override the default connection between \code{geom_bar} and #' \code{stat_count}. #' @examples #' # geom_bar is designed to make it easy to create bar charts that show #' # counts (or sums of weights) #' g <- ggplot(mpg, aes(class)) #' # Number of cars in each class: #' g + geom_bar() #' # Total engine displacement of each class #' g + geom_bar(aes(weight = displ)) #' #' # To show (e.g.) means, you need stat = "identity" #' df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2)) #' ggplot(df, aes(trt, outcome)) + #' geom_bar(stat = "identity") #' # But geom_point() display exactly the same information and doesn't #' # require the y-axis to touch zero. #' ggplot(df, aes(trt, outcome)) + #' geom_point() #' #' # You can also use geom_bar() with continuous data, in which case #' # it will show counts at unique locations #' df <- data.frame(x = rep(c(2.9, 3.1, 4.5), c(5, 10, 4))) #' ggplot(df, aes(x)) + geom_bar() #' # cf. a histogram of the same data #' ggplot(df, aes(x)) + geom_histogram(binwidth = 0.5) #' #' \donttest{ #' # Bar charts are automatically stacked when multiple bars are placed #' # at the same location #' g + geom_bar(aes(fill = drv)) #' #' # You can instead dodge, or fill them #' g + geom_bar(aes(fill = drv), position = "dodge") #' g + geom_bar(aes(fill = drv), position = "fill") #' #' # To change plot order of bars, change levels in underlying factor #' reorder_size <- function(x) { #' factor(x, levels = names(sort(table(x)))) #' } #' ggplot(mpg, aes(reorder_size(class))) + geom_bar() #' } geom_bar <- function(mapping = NULL, data = NULL, stat = "count", position = "stack", width = NULL, binwidth = NULL, ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { if (!is.null(binwidth)) { warning("`geom_bar()` no longer has a `binwidth` parameter. ", "Please use `geom_histogram()` instead.", call. = "FALSE") return(geom_histogram(mapping = mapping, data = data, position = position, width = width, binwidth = binwidth, ..., na.rm = na.rm, show.legend = show.legend, inherit.aes = inherit.aes)) } layer( data = data, mapping = mapping, stat = stat, geom = GeomBar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( width = width, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-rect.r GeomBar <- ggproto("GeomBar", GeomRect, required_aes = "x", setup_data = function(data, params) { data$width <- data$width %||% params$width %||% (resolution(data$x, FALSE) * 0.9) transform(data, ymin = pmin(y, 0), ymax = pmax(y, 0), xmin = x - width / 2, xmax = x + width / 2, width = NULL ) }, draw_panel = function(self, data, panel_scales, coord, width = NULL) { # Hack to ensure that width is detected as a parameter ggproto_parent(GeomRect, self)$draw_panel(data, panel_scales, coord) } ) ggplot2/R/facet-grid-.r0000644000175100001440000004276212620206311014320 0ustar hornikusers#' Lay out panels in a grid. #' #' @param facets a formula with the rows (of the tabular display) on the LHS #' and the columns (of the tabular display) on the RHS; the dot in the #' formula is used to indicate there should be no faceting on this dimension #' (either row or column). The formula can also be provided as a string #' instead of a classical formula object #' @param margins either a logical value or a character #' vector. Margins are additional facets which contain all the data #' for each of the possible values of the faceting variables. If #' \code{FALSE}, no additional facets are included (the #' default). If \code{TRUE}, margins are included for all faceting #' variables. If specified as a character vector, it is the names of #' variables for which margins are to be created. #' @param scales Are scales shared across all facets (the default, #' \code{"fixed"}), or do they vary across rows (\code{"free_x"}), #' columns (\code{"free_y"}), or both rows and columns (\code{"free"}) #' @param space If \code{"fixed"}, the default, all panels have the same size. #' If \code{"free_y"} their height will be proportional to the length of the #' y scale; if \code{"free_x"} their width will be proportional to the #' length of the x scale; or if \code{"free"} both height and width will #' vary. This setting has no effect unless the appropriate scales also vary. #' @param labeller A function that takes one data frame of labels and #' returns a list or data frame of character vectors. Each input #' column corresponds to one factor. Thus there will be more than #' one with formulae of the type \code{~cyl + am}. Each output #' column gets displayed as one separate line in the strip #' label. This function should inherit from the "labeller" S3 class #' for compatibility with \code{\link{labeller}()}. See #' \code{\link{label_value}} for more details and pointers to other #' options. #' @param as.table If \code{TRUE}, the default, the facets are laid out like #' a table with highest values at the bottom-right. If \code{FALSE}, the #' facets are laid out like a plot with the highest value at the top-right. #' @param switch By default, the labels are displayed on the top and #' right of the plot. If \code{"x"}, the top labels will be #' displayed to the bottom. If \code{"y"}, the right-hand side #' labels will be displayed to the left. Can also be set to #' \code{"both"}. #' @param shrink If \code{TRUE}, will shrink scales to fit output of #' statistics, not raw data. If \code{FALSE}, will be range of raw data #' before statistical summary. #' @param drop If \code{TRUE}, the default, all factor levels not used in the #' data will automatically be dropped. If \code{FALSE}, all factor levels #' will be shown, regardless of whether or not they appear in the data. #' @export #' @examples #' \donttest{ #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' # With one variable #' p + facet_grid(. ~ cyl) #' p + facet_grid(cyl ~ .) #' #' # With two variables #' p + facet_grid(vs ~ am) #' p + facet_grid(am ~ vs) #' p + facet_grid(vs ~ am, margins=TRUE) #' #' # To change plot order of facet grid, #' # change the order of variable levels with factor() #' #' set.seed(6809) #' diamonds <- diamonds[sample(nrow(diamonds), 1000), ] #' diamonds$cut <- factor(diamonds$cut, #' levels = c("Ideal", "Very Good", "Fair", "Good", "Premium")) #' #' # Repeat first example with new order #' p <- ggplot(diamonds, aes(carat, ..density..)) + #' geom_histogram(binwidth = 1) #' p + facet_grid(. ~ cut) #' #' g <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point() #' g + facet_grid(. ~ vs + am) #' g + facet_grid(vs + am ~ .) #' #' # You can also use strings, which makes it a little easier #' # when writing functions that generate faceting specifications #' #' p + facet_grid("cut ~ .") #' #' # see also ?plotmatrix for the scatterplot matrix #' #' # If there isn't any data for a given combination, that panel #' # will be empty #' #' g + facet_grid(cyl ~ vs) #' #' # If you combine a facetted dataset with a dataset that lacks those #' # facetting variables, the data will be repeated across the missing #' # combinations: #' #' g + facet_grid(vs ~ cyl) #' #' df <- data.frame(mpg = 22, wt = 3) #' g + facet_grid(vs ~ cyl) + #' geom_point(data = df, colour = "red", size = 2) #' #' df2 <- data.frame(mpg = c(19, 22), wt = c(2,4), vs = c(0, 1)) #' g + facet_grid(vs ~ cyl) + #' geom_point(data = df2, colour = "red", size = 2) #' #' df3 <- data.frame(mpg = c(19, 22), wt = c(2,4), vs = c(1, 1)) #' g + facet_grid(vs ~ cyl) + #' geom_point(data = df3, colour = "red", size = 2) #' #' #' # You can also choose whether the scales should be constant #' # across all panels (the default), or whether they should be allowed #' # to vary #' mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + #' geom_point() #' #' mt + facet_grid(. ~ cyl, scales = "free") #' # If scales and space are free, then the mapping between position #' # and values in the data will be the same across all panels #' mt + facet_grid(. ~ cyl, scales = "free", space = "free") #' #' mt + facet_grid(vs ~ am, scales = "free") #' mt + facet_grid(vs ~ am, scales = "free_x") #' mt + facet_grid(vs ~ am, scales = "free_y") #' mt + facet_grid(vs ~ am, scales = "free", space = "free") #' mt + facet_grid(vs ~ am, scales = "free", space = "free_x") #' mt + facet_grid(vs ~ am, scales = "free", space = "free_y") #' #' # You may need to set your own breaks for consistent display: #' mt + facet_grid(. ~ cyl, scales = "free_x", space = "free") + #' scale_x_continuous(breaks = seq(10, 36, by = 2)) #' # Adding scale limits override free scales: #' last_plot() + xlim(10, 15) #' #' # Free scales are particularly useful for categorical variables #' ggplot(mpg, aes(cty, model)) + #' geom_point() + #' facet_grid(manufacturer ~ ., scales = "free", space = "free") #' # particularly when you reorder factor levels #' mpg$model <- reorder(mpg$model, mpg$cty) #' manufacturer <- reorder(mpg$manufacturer, mpg$cty) #' last_plot() %+% mpg + theme(strip.text.y = element_text()) #' #' # Use as.table to to control direction of horizontal facets, TRUE by default #' h <- ggplot(mtcars, aes(x = mpg, y = wt)) + #' geom_point() #' h + facet_grid(cyl ~ vs) #' h + facet_grid(cyl ~ vs, as.table = FALSE) #' #' # Use labeller to control facet labels, label_value is default #' h + facet_grid(cyl ~ vs, labeller = label_both) #' # Using label_parsed, see ?plotmath for more options #' mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "sqrt(x, y)")) #' k <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() #' k + facet_grid(. ~ cyl2) #' k + facet_grid(. ~ cyl2, labeller = label_parsed) #' # For label_bquote the label value is x. #' p <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() #' p + facet_grid(. ~ vs, labeller = label_bquote(alpha ^ .(x))) #' p + facet_grid(. ~ vs, labeller = label_bquote(.(x) ^ .(x))) #' #' # Margins can be specified by logically (all yes or all no) or by specific #' # variables as (character) variable names #' mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() #' mg + facet_grid(vs + am ~ gear) #' mg + facet_grid(vs + am ~ gear, margins = TRUE) #' mg + facet_grid(vs + am ~ gear, margins = "am") #' # when margins are made over "vs", since the facets for "am" vary #' # within the values of "vs", the marginal facet for "vs" is also #' # a margin over "am". #' mg + facet_grid(vs + am ~ gear, margins = "vs") #' mg + facet_grid(vs + am ~ gear, margins = "gear") #' mg + facet_grid(vs + am ~ gear, margins = c("gear", "am")) #' #' # The facet strips can be displayed near the axes with switch #' data <- transform(mtcars, #' am = factor(am, levels = 0:1, c("Automatic", "Manual")), #' gear = factor(gear, levels = 3:5, labels = c("Three", "Four", "Five")) #' ) #' p <- ggplot(data, aes(mpg, disp)) + geom_point() #' p + facet_grid(am ~ gear, switch = "both") + theme_light() #' #' # It may be more aesthetic to use a theme without boxes around #' # around the strips. #' p + facet_grid(am ~ gear + vs, switch = "y") + theme_minimal() #' p + facet_grid(am ~ ., switch = "y") + #' theme_gray() %+replace% theme(strip.background = element_blank()) #' } #' @importFrom plyr as.quoted facet_grid <- function(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE) { scales <- match.arg(scales, c("fixed", "free_x", "free_y", "free")) free <- list( x = any(scales %in% c("free_x", "free")), y = any(scales %in% c("free_y", "free")) ) space <- match.arg(space, c("fixed", "free_x", "free_y", "free")) space_free <- list( x = any(space %in% c("free_x", "free")), y = any(space %in% c("free_y", "free")) ) # Facets can either be a formula, a string, or a list of things to be # convert to quoted if (is.character(facets)) { facets <- stats::as.formula(facets) } if (is.formula(facets)) { lhs <- function(x) if (length(x) == 2) NULL else x[-3] rhs <- function(x) if (length(x) == 2) x else x[-2] rows <- as.quoted(lhs(facets)) rows <- rows[!sapply(rows, identical, as.name("."))] cols <- as.quoted(rhs(facets)) cols <- cols[!sapply(cols, identical, as.name("."))] } if (is.list(facets)) { rows <- as.quoted(facets[[1]]) cols <- as.quoted(facets[[2]]) } if (length(rows) + length(cols) == 0) { stop("Must specify at least one variable to facet by", call. = FALSE) } # Check for deprecated labellers labeller <- check_labeller(labeller) facet( rows = rows, cols = cols, margins = margins, shrink = shrink, free = free, space_free = space_free, labeller = labeller, as.table = as.table, switch = switch, drop = drop, subclass = "grid" ) } #' @export facet_train_layout.grid <- function(facet, data) { layout <- layout_grid(data, facet$rows, facet$cols, facet$margins, drop = facet$drop, as.table = facet$as.table) # Relax constraints, if necessary layout$SCALE_X <- if (facet$free$x) layout$COL else 1L layout$SCALE_Y <- if (facet$free$y) layout$ROW else 1L layout } #' @export facet_map_layout.grid <- function(facet, data, layout) { locate_grid(data, layout, facet$rows, facet$cols, facet$margins) } #' @export facet_render.grid <- function(facet, panel, coord, theme, geom_grobs) { axes <- facet_axes(facet, panel, coord, theme) strips <- facet_strips(facet, panel, theme) panels <- facet_panels(facet, panel, coord, theme, geom_grobs) # adjust the size of axes to the size of panel axes$l$heights <- panels$heights axes$b$widths <- panels$widths # adjust the size of the strips to the size of the panels strips$r$heights <- panels$heights strips$t$widths <- panels$widths # Check if switch is consistent with grid layout switch_x <- !is.null(facet$switch) && facet$switch %in% c("both", "x") switch_y <- !is.null(facet$switch) && facet$switch %in% c("both", "y") if (switch_x && length(strips$t) == 0) { facet$switch <- if (facet$switch == "both") "y" else NULL switch_x <- FALSE warning("Cannot switch x axis strips as they do not exist", call. = FALSE) } if (switch_y && length(strips$r) == 0) { facet$switch <- if (facet$switch == "both") "x" else NULL switch_y <- FALSE warning("Cannot switch y axis strips as they do not exist", call. = FALSE) } # Combine components into complete plot if (is.null(facet$switch)) { top <- strips$t top <- gtable_add_cols(top, strips$r$widths) top <- gtable_add_cols(top, axes$l$widths, pos = 0) center <- cbind(axes$l, panels, strips$r, z = c(2, 1, 3)) bottom <- axes$b bottom <- gtable_add_cols(bottom, strips$r$widths) bottom <- gtable_add_cols(bottom, axes$l$widths, pos = 0) complete <- rbind(top, center, bottom, z = c(1, 2, 3)) } else { # Add padding between the switched strips and the axes padding <- convertUnit(theme$strip.switch.pad.grid, "cm") if (switch_x) { t_heights <- c(padding, strips$t$heights) gt_t <- gtable(widths = strips$t$widths, heights = unit(t_heights, "cm")) gt_t <- gtable_add_grob(gt_t, strips$t, name = strips$t$name, clip = "off", t = 1, l = 1, b = -1, r = -1) } if (switch_y) { r_widths <- c(strips$r$widths, padding) gt_r <- gtable(widths = unit(r_widths, "cm"), heights = strips$r$heights) gt_r <- gtable_add_grob(gt_r, strips$r, name = strips$r$name, clip = "off", t = 1, l = 1, b = -1, r = -1) } # Combine plot elements according to strip positions if (switch_x && switch_y) { center <- cbind(gt_r, axes$l, panels, z = c(3, 2, 1)) bottom <- rbind(axes$b, gt_t) bottom <- gtable_add_cols(bottom, axes$l$widths, pos = 0) bottom <- gtable_add_cols(bottom, gt_r$widths, pos = 0) complete <- rbind(center, bottom, z = c(1, 2)) } else if (switch_x) { center <- cbind(axes$l, panels, strips$r, z = c(2, 1, 3)) bottom <- rbind(axes$b, gt_t) bottom <- gtable_add_cols(bottom, strips$r$widths) bottom <- gtable_add_cols(bottom, axes$l$widths, pos = 0) complete <- rbind(center, bottom, z = c(1, 2)) } else if (switch_y) { top <- strips$t top <- gtable_add_cols(top, axes$l$widths, pos = 0) top <- gtable_add_cols(top, gt_r$widths, pos = 0) center <- cbind(gt_r, axes$l, panels, z = c(3, 2, 1)) bottom <- axes$b bottom <- gtable_add_cols(bottom, axes$l$widths, pos = 0) bottom <- gtable_add_cols(bottom, gt_r$widths, pos = 0) complete <- rbind(top, center, bottom, z = c(1, 2, 3)) } else { stop("`switch` must be either NULL, 'both', 'x', or 'y'", call. = FALSE) } } complete$respect <- panels$respect complete$name <- "layout" bottom <- axes$b complete } #' @export facet_strips.grid <- function(facet, panel, theme) { col_vars <- unique(panel$layout[names(facet$cols)]) row_vars <- unique(panel$layout[names(facet$rows)]) # Adding labels metadata, useful for labellers attr(col_vars, "type") <- "cols" attr(col_vars, "facet") <- "grid" attr(row_vars, "type") <- "rows" attr(row_vars, "facet") <- "grid" dir <- list(r = "r", t = "t") if (!is.null(facet$switch) && facet$switch %in% c("both", "x")) { dir$t <- "b" } if (!is.null(facet$switch) && facet$switch %in% c("both", "y")) { dir$r <- "l" } strips <- list( r = build_strip(panel, row_vars, facet$labeller, theme, dir$r, switch = facet$switch), t = build_strip(panel, col_vars, facet$labeller, theme, dir$t, switch = facet$switch) ) Map(function(strip, side) { if (side %in% c("t", "b")) { gtable_add_col_space(strip, theme$panel.margin.x %||% theme$panel.margin) } else { gtable_add_row_space(strip, theme$panel.margin.y %||% theme$panel.margin) } }, strips, dir) } #' @export facet_axes.grid <- function(facet, panel, coord, theme) { axes <- list() # Horizontal axes cols <- which(panel$layout$ROW == 1) grobs <- lapply(panel$ranges[cols], coord$render_axis_h, theme = theme) axes$b <- gtable_add_col_space(gtable_row("axis-b", grobs), theme$panel.margin.x %||% theme$panel.margin) # Vertical axes rows <- which(panel$layout$COL == 1) grobs <- lapply(panel$ranges[rows], coord$render_axis_v, theme = theme) axes$l <- gtable_add_row_space(gtable_col("axis-l", grobs), theme$panel.margin.y %||% theme$panel.margin) axes } #' @export facet_panels.grid <- function(facet, panel, coord, theme, geom_grobs) { # If user hasn't set aspect ratio, and we have fixed scales, then # ask the coordinate system if it wants to specify one aspect_ratio <- theme$aspect.ratio if (is.null(aspect_ratio) && !facet$free$x && !facet$free$y) { aspect_ratio <- coord$aspect(panel$ranges[[1]]) } if (is.null(aspect_ratio)) { aspect_ratio <- 1 respect <- FALSE } else { respect <- TRUE } # Add background and foreground to panels panels <- panel$layout$PANEL ncol <- max(panel$layout$COL) nrow <- max(panel$layout$ROW) panel_grobs <- lapply(panels, function(i) { fg <- coord$render_fg(panel$ranges[[i]], theme) bg <- coord$render_bg(panel$ranges[[i]], theme) geom_grobs <- lapply(geom_grobs, `[[`, i) if (theme$panel.ontop) { panel_grobs <- c(geom_grobs, list(bg), list(fg)) } else { panel_grobs <- c(list(bg), geom_grobs, list(fg)) } gTree(children = do.call("gList", panel_grobs)) }) panel_matrix <- matrix(panel_grobs, nrow = nrow, ncol = ncol, byrow = TRUE) # @kohske # Now size of each panel is calculated using PANEL$ranges, which is given by # coord_train called by train_range. # So here, "scale" need not to be referred. # # In general, panel has all information for building facet. if (facet$space_free$x) { ps <- panel$layout$PANEL[panel$layout$ROW == 1] widths <- vapply(ps, function(i) diff(panel$ranges[[i]]$x.range), numeric(1)) panel_widths <- unit(widths, "null") } else { panel_widths <- rep(unit(1, "null"), ncol) } if (facet$space_free$y) { ps <- panel$layout$PANEL[panel$layout$COL == 1] heights <- vapply(ps, function(i) diff(panel$ranges[[i]]$y.range), numeric(1)) panel_heights <- unit(heights, "null") } else { panel_heights <- rep(unit(1 * aspect_ratio, "null"), nrow) } panels <- gtable_matrix("panel", panel_matrix, panel_widths, panel_heights, respect = respect) panels <- gtable_add_col_space(panels, theme$panel.margin.x %||% theme$panel.margin) panels <- gtable_add_row_space(panels, theme$panel.margin.y %||% theme$panel.margin) panels } #' @export facet_vars.grid <- function(facet) { paste(lapply(list(facet$rows, facet$cols), paste, collapse = ", "), collapse = " ~ ") } ggplot2/R/zxx.r0000644000175100001440000000305512555710475013101 0ustar hornikusers# Default scales ------------------------------------------------------------- #' @export #' @rdname scale_hue #' @usage NULL scale_colour_discrete <- scale_colour_hue #' @export #' @rdname scale_gradient #' @usage NULL scale_colour_continuous <- scale_colour_gradient #' @export #' @rdname scale_hue #' @usage NULL scale_fill_discrete <- scale_fill_hue #' @export #' @rdname scale_gradient #' @usage NULL scale_fill_continuous <- scale_fill_gradient # British to American spellings ---------------------------------------------- #' @export #' @rdname scale_brewer #' @usage NULL scale_color_brewer <- scale_colour_brewer #' @export #' @rdname scale_brewer #' @usage NULL scale_color_distiller <- scale_colour_distiller #' @export #' @rdname scale_gradient #' @usage NULL scale_color_continuous <- scale_colour_gradient #' @export #' @rdname scale_hue #' @usage NULL scale_color_discrete <- scale_colour_hue #' @export #' @rdname scale_gradient #' @usage NULL scale_color_gradient <- scale_colour_gradient #' @export #' @rdname scale_gradient #' @usage NULL scale_color_gradient2 <- scale_colour_gradient2 #' @export #' @rdname scale_gradient #' @usage NULL scale_color_gradientn <- scale_colour_gradientn #' @export #' @rdname scale_grey #' @usage NULL scale_color_grey <- scale_colour_grey #' @export #' @rdname scale_hue #' @usage NULL scale_color_hue <- scale_colour_hue #' @export #' @rdname scale_identity #' @usage NULL scale_color_identity <- scale_colour_identity #' @export #' @rdname scale_manual #' @usage NULL scale_color_manual <- scale_colour_manual ggplot2/R/geom-.r0000644000175100001440000001341312620206425013237 0ustar hornikusers#' @include legend-draw.r NULL #' @section Geoms: #' #' All \code{geom_*} functions (like \code{geom_point}) return a layer that #' contains a \code{Geom*} object (like \code{GeomPoint}). The \code{Geom*} #' object is responsible for rendering the data in the plot. #' #' Each of the \code{Geom*} objects is a \code{\link{ggproto}} object, descended #' from the top-level \code{Geom}, and each implements various methods and #' fields. To create a new type of Geom object, you typically will want to #' implement one or more of the following: #' #' Compared to \code{Stat} and \code{Position}, \code{Geom} is a little #' different because the execution of the setup and compute functions is #' split up. \code{setup_data} runs before position adjustments, and #' \code{draw_layer} is not run until render time, much later. This #' means there is no \code{setup_params} because it's hard to communicate #' the changes. #' #' \itemize{ #' \item Override either \code{draw_panel(self, data, panel_scales, coord)} or #' \code{draw_group(self, data, panel_scales, coord)}. \code{draw_panel} is #' called once per panel, \code{draw_group} is called once per group. #' #' Use \code{draw_panel} if each row in the data represents a #' single element. Use \code{draw_group} if each group represents #' an element (e.g. a smooth, a violin). #' #' \code{data} is a data frame of scaled aesthetics. \code{panel_scales} #' is a list containing information about the scales in the current #' panel. \code{coord} is a coordinate specification. You'll #' need to call \code{coord$transform(data, panel_scales)} to work #' with non-Cartesian coords. To work with non-linear coordinate systems, #' you typically need to convert into a primitive geom (e.g. point, path #' or polygon), and then pass on to the corresponding draw method #' for munching. #' #' Must return a grob. Use \code{\link{zeroGrob}} if there's nothing to #' draw. #' \item \code{draw_key}: Renders a single legend key. #' \item \code{required_aes}: A character vector of aesthetics needed to #' render the geom. #' \item \code{default_aes}: A list (generated by \code{\link{aes}()} of #' default values for aesthetics. #' \item \code{reparameterise}: Converts width and height to xmin and xmax, #' and ymin and ymax values. It can potentially set other values as well. #' } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Geom <- ggproto("Geom", required_aes = character(), non_missing_aes = character(), default_aes = aes(), draw_key = draw_key_point, handle_na = function(self, data, params) { remove_missing(data, params$na.rm, c(self$required_aes, self$non_missing_aes), snake_class(self) ) }, draw_layer = function(self, data, params, panel, coord) { if (empty(data)) return(list(zeroGrob())) # Trim off extra parameters params <- params[intersect(names(params), self$parameters())] args <- c(list(quote(data), quote(panel_scales), quote(coord)), params) plyr::dlply(data, "PANEL", function(data) { if (empty(data)) return(zeroGrob()) panel_scales <- panel$ranges[[data$PANEL[1]]] do.call(self$draw_panel, args) }, .drop = FALSE) }, draw_panel = function(self, data, panel_scales, coord, ...) { groups <- split(data, factor(data$group)) grobs <- lapply(groups, function(group) { self$draw_group(group, panel_scales, coord, ...) }) ggname(snake_class(self), gTree( children = do.call("gList", grobs) )) }, draw_group = function(self, data, panel_scales, coord) { stop("Not implemented") }, setup_data = function(data, params) data, # Combine data with defaults and set aesthetics from parameters use_defaults = function(self, data, params = list()) { # Fill in missing aesthetics with their defaults missing_aes <- setdiff(names(self$default_aes), names(data)) if (empty(data)) { data <- plyr::quickdf(self$default_aes[missing_aes]) } else { data[missing_aes] <- self$default_aes[missing_aes] } # Override mappings with params aes_params <- intersect(self$aesthetics(), names(params)) check_aesthetics(params[aes_params], nrow(data)) data[aes_params] <- params[aes_params] data }, # Most parameters for the geom are taken automatically from draw_panel() or # draw_groups(). However, some additional parameters may be needed # for setup_data() or handle_na(). These can not be imputed automatically, # so the slightly hacky "extra_params" field is used instead. By # default it contains `na.rm` extra_params = c("na.rm"), parameters = function(self, extra = FALSE) { # Look first in draw_panel. If it contains ... then look in draw groups panel_args <- names(ggproto_formals(self$draw_panel)) group_args <- names(ggproto_formals(self$draw_group)) args <- if ("..." %in% panel_args) group_args else panel_args # Remove arguments of defaults args <- setdiff(args, names(ggproto_formals(Geom$draw_group))) if (extra) { args <- union(args, self$extra_params) } args }, aesthetics = function(self) { c(union(self$required_aes, names(self$default_aes)), "group") } ) #' Graphical units #' #' Multiply size in mm by these constants in order to convert to the units #' that grid uses internally for \code{lwd} and \code{fontsize}. #' #' @name graphical-units NULL #' @export #' @rdname graphical-units .pt <- 72.27 / 25.4 #' @export #' @rdname graphical-units .stroke <- 96 / 25.4 check_aesthetics <- function(x, n) { ns <- vapply(x, length, numeric(1)) good <- ns == 1L | ns == n if (all(good)) { return() } stop( "Aesthetics must be either length 1 or the same as the data (", n, "): ", paste(names(!good), collapse = ", "), call. = FALSE ) } ggplot2/R/panel.r0000644000175100001440000001352112620212063013325 0ustar hornikusers# Panel object. # # A panel figures out how data is positioned within a panel of a plot, # coordinates information from scales, facets and coords. Eventually all # state will move out of facets and coords, and live only in panels and # stats, simplifying these data structures to become strategies. # # Information about a panel is built up progressively over time, which # is why the initial object is empty to start with. new_panel <- function() { structure(list(), class = "panel") } # Learn the layout of panels within a plot. # # This is determined by the facet, which returns a data frame, than # when joined to the data to be plotted tells us which panel it should # appear in, where that panel appears in the grid, and what scales it # uses. # # As well as the layout info, this function also adds empty lists in which # to house the x and y scales. # # @param the panel object to train # @param the facetting specification # @param data a list of data frames (one for each layer), and one for the plot # @param plot_data the default data frame # @return an updated panel object train_layout <- function(panel, facet, data, plot_data) { layout <- facet_train_layout(facet, c(list(plot_data), data)) panel$layout <- layout panel$shrink <- facet$shrink panel } # Map data to find out where it belongs in the plot. # # Layout map ensures that all layer data has extra copies of data for margins # and missing facetting variables, and has a PANEL variable that tells that # so it know what panel it belongs to. This is a change from the previous # design which added facetting variables directly to the data frame and # caused problems when they had names of aesthetics (like colour or group). # # @param panel a trained panel object # @param the facetting specification # @param data list of data frames (one for each layer) # @param plot_data default plot data frame map_layout <- function(panel, facet, data, plot_data) { lapply(data, function(data) { if (is.waive(data)) data <- plot_data facet_map_layout(facet, data, panel$layout) }) } # Train position scales with data # # If panel-specific scales are not already present, will clone from # the scales provided in the parameter # # @param panel the panel object to train # @param data a list of data frames (one for each layer) # @param x_scale x scale for the plot # @param y_scale y scale for the plot train_position <- function(panel, data, x_scale, y_scale) { # Initialise scales if needed, and possible. layout <- panel$layout if (is.null(panel$x_scales) && !is.null(x_scale)) { panel$x_scales <- plyr::rlply(max(layout$SCALE_X), x_scale$clone()) } if (is.null(panel$y_scales) && !is.null(y_scale)) { panel$y_scales <- plyr::rlply(max(layout$SCALE_Y), y_scale$clone()) } # loop over each layer, training x and y scales in turn for (layer_data in data) { match_id <- match(layer_data$PANEL, layout$PANEL) if (!is.null(x_scale)) { x_vars <- intersect(x_scale$aesthetics, names(layer_data)) SCALE_X <- layout$SCALE_X[match_id] scale_apply(layer_data, x_vars, "train", SCALE_X, panel$x_scales) } if (!is.null(y_scale)) { y_vars <- intersect(y_scale$aesthetics, names(layer_data)) SCALE_Y <- layout$SCALE_Y[match_id] scale_apply(layer_data, y_vars, "train", SCALE_Y, panel$y_scales) } } panel } reset_scales <- function(panel) { if (!panel$shrink) return() lapply(panel$x_scales, function(s) s$reset()) lapply(panel$y_scales, function(s) s$reset()) invisible() } # Map data with scales. # # This operation must be idempotent because it is applied twice: both before # and after statistical transformation. # # @param data a list of data frames (one for each layer) map_position <- function(panel, data, x_scale, y_scale) { layout <- panel$layout lapply(data, function(layer_data) { match_id <- match(layer_data$PANEL, layout$PANEL) # Loop through each variable, mapping across each scale, then joining # back together x_vars <- intersect(x_scale$aesthetics, names(layer_data)) names(x_vars) <- x_vars SCALE_X <- layout$SCALE_X[match_id] new_x <- scale_apply(layer_data, x_vars, "map", SCALE_X, panel$x_scales) layer_data[, x_vars] <- new_x y_vars <- intersect(y_scale$aesthetics, names(layer_data)) names(y_vars) <- y_vars SCALE_Y <- layout$SCALE_Y[match_id] new_y <- scale_apply(layer_data, y_vars, "map", SCALE_Y, panel$y_scales) layer_data[, y_vars] <- new_y layer_data }) } # Function for applying scale method to multiple variables in a given # data set. Implement in such a way to minimize copying and hence maximise # speed scale_apply <- function(data, vars, method, scale_id, scales) { if (length(vars) == 0) return() if (nrow(data) == 0) return() n <- length(scales) if (any(is.na(scale_id))) stop() scale_index <- plyr::split_indices(scale_id, n) lapply(vars, function(var) { pieces <- lapply(seq_along(scales), function(i) { scales[[i]][[method]](data[[var]][scale_index[[i]]]) }) # Join pieces back together, if necessary if (!is.null(pieces)) { unlist(pieces)[order(unlist(scale_index))] } }) } panel_scales <- function(panel, i) { this_panel <- panel$layout[panel$layout$PANEL == i, ] list( x = panel$x_scales[[this_panel$SCALE_X]], y = panel$y_scales[[this_panel$SCALE_Y]] ) } # Compute ranges and dimensions of each panel, using the coord. train_ranges <- function(panel, coord) { compute_range <- function(ix, iy) { # TODO: change coord_train method to take individual x and y scales coord$train(list(x = panel$x_scales[[ix]], y = panel$y_scales[[iy]])) } panel$ranges <- Map(compute_range, panel$layout$SCALE_X, panel$layout$SCALE_Y) panel } xlabel <- function(panel, labels) { panel$x_scales[[1]]$name %|W|% labels$x } ylabel <- function(panel, labels) { panel$y_scales[[1]]$name %|W|% labels$y } ggplot2/R/coord-map.r0000644000175100001440000002006112633015142014107 0ustar hornikusers#' Map projections. #' #' The representation of a portion of the earth, which is approximately spherical, #' onto a flat 2D plane requires a projection. This is what #' \code{\link{coord_map}} does. These projections account for the fact that the #' actual length (in km) of one degree of longitude varies between the equator #' and the pole. Near the equator, the ratio between the lengths of one degree #' of latitude and one degree of longitude is approximately 1. Near the pole, it #' is tends towards infinity because the length of one degree of longitude tends #' towards 0. For regions that span only a few degrees and are not too close to #' the poles, setting the aspect ratio of the plot to the appropriate lat/lon #' ratio approximates the usual mercator projection. This is what #' \code{coord_quickmap} does. With \code{\link{coord_map}} all elements of the #' graphic have to be projected which is not the case here. So #' \code{\link{coord_quickmap}} has the advantage of being much faster, in #' particular for complex plots such as those using with #' \code{\link{geom_tile}}, at the expense of correctness in the projection. #' This coordinate system provides the full range of map projections available #' in the mapproj package. #' #' @export #' @param projection projection to use, see #' \code{\link[mapproj]{mapproject}} for list #' @param ... other arguments passed on to #' \code{\link[mapproj]{mapproject}} #' @param orientation projection orientation, which defaults to #' \code{c(90, 0, mean(range(x)))}. This is not optimal for many #' projections, so you will have to supply your own. See #' \code{\link[mapproj]{mapproject}} for more information. #' @param xlim manually specific x limits (in degrees of longitude) #' @param ylim manually specific y limits (in degrees of latitude) #' @export #' @examples #' if (require("maps")) { #' nz <- map_data("nz") #' # Prepare a map of NZ #' nzmap <- ggplot(nz, aes(x = long, y = lat, group = group)) + #' geom_polygon(fill = "white", colour = "black") #' #' # Plot it in cartesian coordinates #' nzmap #' # With correct mercator projection #' nzmap + coord_map() #' # With the aspect ratio approximation #' nzmap + coord_quickmap() #' #' # Other projections #' nzmap + coord_map("cylindrical") #' nzmap + coord_map("azequalarea",orientation=c(-36.92,174.6,0)) #' #' states <- map_data("state") #' usamap <- ggplot(states, aes(long, lat, group = group)) + #' geom_polygon(fill = "white", colour = "black") #' #' # Use cartesian coordinates #' usamap #' # With mercator projection #' usamap + coord_map() #' usamap + coord_quickmap() #' # See ?mapproject for coordinate systems and their parameters #' usamap + coord_map("gilbert") #' usamap + coord_map("lagrange") #' #' # For most projections, you'll need to set the orientation yourself #' # as the automatic selection done by mapproject is not available to #' # ggplot #' usamap + coord_map("orthographic") #' usamap + coord_map("stereographic") #' usamap + coord_map("conic", lat0 = 30) #' usamap + coord_map("bonne", lat0 = 50) #' #' # World map, using geom_path instead of geom_polygon #' world <- map_data("world") #' worldmap <- ggplot(world, aes(x=long, y=lat, group=group)) + #' geom_path() + #' scale_y_continuous(breaks = (-2:2) * 30) + #' scale_x_continuous(breaks = (-4:4) * 45) #' #' # Orthographic projection with default orientation (looking down at North pole) #' worldmap + coord_map("ortho") #' # Looking up up at South Pole #' worldmap + coord_map("ortho", orientation = c(-90, 0, 0)) #' # Centered on New York (currently has issues with closing polygons) #' worldmap + coord_map("ortho", orientation = c(41, -74, 0)) #' } coord_map <- function(projection="mercator", ..., orientation = NULL, xlim = NULL, ylim = NULL) { ggproto(NULL, CoordMap, projection = projection, orientation = orientation, limits = list(x = xlim, y = ylim), params = list(...) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export CoordMap <- ggproto("CoordMap", Coord, transform = function(self, data, scale_details) { trans <- mproject(self, data$x, data$y, scale_details$orientation) out <- cunion(trans[c("x", "y")], data) out$x <- rescale(out$x, 0:1, scale_details$x.proj) out$y <- rescale(out$y, 0:1, scale_details$y.proj) out }, distance = function(x, y, scale_details) { max_dist <- dist_central_angle(scale_details$x.range, scale_details$y.range) dist_central_angle(x, y) / max_dist }, aspect = function(ranges) { diff(ranges$y.proj) / diff(ranges$x.proj) }, train = function(self, scale_details) { # range in scale ranges <- list() for (n in c("x", "y")) { scale <- scale_details[[n]] limits <- self$limits[[n]] if (is.null(limits)) { range <- scale$dimension(expand_default(scale)) } else { range <- range(scale$transform(limits)) } ranges[[n]] <- range } orientation <- self$orientation %||% c(90, 0, mean(ranges$x)) # Increase chances of creating valid boundary region grid <- expand.grid( x = seq(ranges$x[1], ranges$x[2], length.out = 50), y = seq(ranges$y[1], ranges$y[2], length.out = 50) ) ret <- list(x = list(), y = list()) # range in map proj <- mproject(self, grid$x, grid$y, orientation)$range ret$x$proj <- proj[1:2] ret$y$proj <- proj[3:4] for (n in c("x", "y")) { out <- scale_details[[n]]$break_info(ranges[[n]]) ret[[n]]$range <- out$range ret[[n]]$major <- out$major_source ret[[n]]$minor <- out$minor_source ret[[n]]$labels <- out$labels } details <- list( orientation = orientation, x.range = ret$x$range, y.range = ret$y$range, x.proj = ret$x$proj, y.proj = ret$y$proj, x.major = ret$x$major, x.minor = ret$x$minor, x.labels = ret$x$labels, y.major = ret$y$major, y.minor = ret$y$minor, y.labels = ret$y$labels ) details }, render_bg = function(self, scale_details, theme) { xrange <- expand_range(scale_details$x.range, 0.2) yrange <- expand_range(scale_details$y.range, 0.2) # Limit ranges so that lines don't wrap around globe xmid <- mean(xrange) ymid <- mean(yrange) xrange[xrange < xmid - 180] <- xmid - 180 xrange[xrange > xmid + 180] <- xmid + 180 yrange[yrange < ymid - 90] <- ymid - 90 yrange[yrange > ymid + 90] <- ymid + 90 xgrid <- with(scale_details, expand.grid( y = c(seq(yrange[1], yrange[2], length.out = 50), NA), x = x.major )) ygrid <- with(scale_details, expand.grid( x = c(seq(xrange[1], xrange[2], length.out = 50), NA), y = y.major )) xlines <- self$transform(xgrid, scale_details) ylines <- self$transform(ygrid, scale_details) if (nrow(xlines) > 0) { grob.xlines <- element_render( theme, "panel.grid.major.x", xlines$x, xlines$y, default.units = "native" ) } else { grob.xlines <- zeroGrob() } if (nrow(ylines) > 0) { grob.ylines <- element_render( theme, "panel.grid.major.y", ylines$x, ylines$y, default.units = "native" ) } else { grob.ylines <- zeroGrob() } ggname("grill", grobTree( element_render(theme, "panel.background"), grob.xlines, grob.ylines )) }, render_axis_h = function(self, scale_details, theme) { if (is.null(scale_details$x.major)) return(zeroGrob()) x_intercept <- with(scale_details, data.frame( x = x.major, y = y.range[1] )) pos <- self$transform(x_intercept, scale_details) guide_axis(pos$x, scale_details$x.labels, "bottom", theme) }, render_axis_v = function(self, scale_details, theme) { if (is.null(scale_details$y.major)) return(zeroGrob()) x_intercept <- with(scale_details, data.frame( x = x.range[1], y = y.major )) pos <- self$transform(x_intercept, scale_details) guide_axis(pos$y, scale_details$y.labels, "left", theme) } ) mproject <- function(coord, x, y, orientation) { suppressWarnings(mapproj::mapproject(x, y, projection = coord$projection, parameters = coord$params, orientation = orientation )) } ggplot2/R/geom-bin2d.r0000644000175100001440000000215412607210013014147 0ustar hornikusers#' Add heatmap of 2d bin counts. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "bin2d")} #' #' @export #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_bin2d} and \code{stat_bin2d}. #' @seealso \code{\link{stat_binhex}} for hexagonal binning #' @examples #' d <- ggplot(diamonds, aes(x, y)) + xlim(4, 10) + ylim(4, 10) #' d + geom_bin2d() #' #' # You can control the size of the bins by specifying the number of #' # bins in each direction: #' d + geom_bin2d(bins = 10) #' d + geom_bin2d(bins = 30) #' #' # Or by specifying the width of the bins #' d + geom_bin2d(binwidth = c(0.1, 0.1)) geom_bin2d <- function(mapping = NULL, data = NULL, stat = "bin2d", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomTile, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } ggplot2/R/geom-jitter.r0000644000175100001440000000342612607210757014474 0ustar hornikusers#' Points, jittered to reduce overplotting. #' #' The jitter geom is a convenient default for geom_point with position = #' 'jitter'. It's a useful way of handling overplotting caused by discreteness #' in smaller datasets. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "point")} #' #' @inheritParams geom_point #' @inheritParams position_jitter #' @seealso #' \code{\link{geom_point}} for regular, unjittered points, #' \code{\link{geom_boxplot}} for another way of looking at the conditional #' distribution of a variable #' @export #' @examples #' p <- ggplot(mpg, aes(cyl, hwy)) #' p + geom_point() #' p + geom_jitter() #' #' # Add aesthetic mappings #' p + geom_jitter(aes(colour = class)) #' #' # Use smaller width/height to emphasise categories #' ggplot(mpg, aes(cyl, hwy)) + geom_jitter() #' ggplot(mpg, aes(cyl, hwy)) + geom_jitter(width = 0.25) #' #' # Use larger width/height to completely smooth away discreteness #' ggplot(mpg, aes(cty, hwy)) + geom_jitter() #' ggplot(mpg, aes(cty, hwy)) + geom_jitter(width = 0.5, height = 0.5) geom_jitter <- function(mapping = NULL, data = NULL, width = NULL, height = NULL, stat = "identity", position = "jitter", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { if (!missing(width) || !missing(height)) { if (!missing(position)) { stop("Specify either `position` or `width`/`height`", call. = FALSE) } position <- position_jitter(width = width, height = height) } layer( data = data, mapping = mapping, stat = stat, geom = GeomPoint, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } ggplot2/R/scale-manual.r0000644000175100001440000000515612555701147014612 0ustar hornikusers#' Create your own discrete scale. #' #' @name scale_manual #' @inheritParams scale_x_discrete #' @param values a set of aesthetic values to map data values to. If this #' is a named vector, then the values will be matched based on the names. #' If unnamed, values will be matched in order (usually alphabetical) with #' the limits of the scale. Any data values that don't match will be #' given \code{na.value}. #' @examples #' \donttest{ #' p <- ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = factor(cyl))) #' #' p + scale_colour_manual(values = c("red","blue", "green")) #' p + scale_colour_manual( #' values = c("8" = "red","4" = "blue","6" = "green")) #' # With rgb hex values #' p + scale_colour_manual(values = c("#FF0000", "#0000FF", "#00FF00")) #' #' # As with other scales you can use breaks to control the appearance #' # of the legend #' cols <- c("8" = "red","4" = "blue","6" = "darkgreen", "10" = "orange") #' p + scale_colour_manual(values = cols) #' p + scale_colour_manual(values = cols, breaks = c("4", "6", "8")) #' p + scale_colour_manual(values = cols, breaks = c("8", "6", "4")) #' p + scale_colour_manual(values = cols, breaks = c("4", "6", "8"), #' labels = c("four", "six", "eight")) #' #' # And limits to control the possible values of the scale #' p + scale_colour_manual(values = cols, limits = c("4", "8")) #' p + scale_colour_manual(values = cols, limits = c("4", "6", "8", "10")) #' #' # Notice that the values are matched with limits, and not breaks #' p + scale_colour_manual(limits = c(6, 8, 4), breaks = c(8, 4, 6), #' values = c("grey50", "grey80", "black")) #' } NULL #' @rdname scale_manual #' @export scale_colour_manual <- function(..., values) { manual_scale("colour", values, ...) } #' @rdname scale_manual #' @export scale_fill_manual <- function(..., values) { manual_scale("fill", values, ...) } #' @rdname scale_manual #' @export scale_size_manual <- function(..., values) { manual_scale("size", values, ...) } #' @rdname scale_manual #' @export scale_shape_manual <- function(..., values) { manual_scale("shape", values, ...) } #' @rdname scale_manual #' @export scale_linetype_manual <- function(..., values) { manual_scale("linetype", values, ...) } #' @rdname scale_manual #' @export scale_alpha_manual <- function(..., values) { manual_scale("alpha", values, ...) } manual_scale <- function(aesthetic, values, ...) { pal <- function(n) { if (n > length(values)) { stop("Insufficient values in manual scale. ", n, " needed but only ", length(values), " provided.", call. = FALSE) } values } discrete_scale(aesthetic, "manual", pal, ...) } ggplot2/R/fortify-map.r0000644000175100001440000001004712620176170014473 0ustar hornikusers#' Fortify method for map objects. #' #' This function turns a map into a data frame that can more easily be #' plotted with ggplot2. #' #' @export #' @seealso \code{\link{map_data}} and \code{\link{borders}} #' @param model map object #' @param data not used by this method #' @param ... not used by this method #' @examples #' if (require("maps")) { #' ca <- map("county", "ca", plot = FALSE, fill = TRUE) #' head(fortify(ca)) #' ggplot(ca, aes(long, lat)) + #' geom_polygon(aes(group = group)) #' #' tx <- map("county", "texas", plot = FALSE, fill = TRUE) #' head(fortify(tx)) #' ggplot(tx, aes(long, lat)) + #' geom_polygon(aes(group = group), colour = "white") #' } fortify.map <- function(model, data, ...) { df <- as.data.frame(model[c("x", "y")]) names(df) <- c("long", "lat") df$group <- cumsum(is.na(df$long) & is.na(df$lat)) + 1 df$order <- 1:nrow(df) names <- do.call("rbind", lapply(strsplit(model$names, "[:,]"), "[", 1:2)) df$region <- names[df$group, 1] df$subregion <- names[df$group, 2] df[stats::complete.cases(df$lat, df$long), ] } #' Create a data frame of map data. #' #' @param map name of map provided by the \pkg{maps} package. These #' include \code{\link[maps]{county}}, \code{\link[maps]{france}}, #' \code{\link[maps]{italy}}, \code{\link[maps]{nz}}, #' \code{\link[maps]{state}}, \code{\link[maps]{usa}}, #' \code{\link[maps]{world}}, \code{\link[maps]{world2}}. #' @param region name of subregions to include. Defaults to \code{.} which #' includes all subregion. See documentation for \code{\link[maps]{map}} #' for more details. #' @param exact should the \code{region} be treated as a regular expression #' (\code{FALSE}) or as a fixed string (\code{TRUE}). #' @param ... all other arguments passed on to \code{\link[maps]{map}} #' @export #' @examples #' if (require("maps")) { #' states <- map_data("state") #' arrests <- USArrests #' names(arrests) <- tolower(names(arrests)) #' arrests$region <- tolower(rownames(USArrests)) #' #' choro <- merge(states, arrests, sort = FALSE, by = "region") #' choro <- choro[order(choro$order), ] #' ggplot(choro, aes(long, lat)) + #' geom_polygon(aes(group = group, fill = assault)) + #' coord_map("albers", at0 = 45.5, lat1 = 29.5) #' #' ggplot(choro, aes(long, lat)) + #' geom_polygon(aes(group = group, fill = assault / murder)) + #' coord_map("albers", at0 = 45.5, lat1 = 29.5) #' } map_data <- function(map, region = ".", exact = FALSE, ...) { try_require("maps", "map_data") fortify(map(map, region, exact = exact, plot = FALSE, fill = TRUE, ...)) } #' Create a layer of map borders. #' #' @param database map data, see \code{\link[maps]{map}} for details #' @param regions map region #' @param fill fill colour #' @param colour border colour #' @param xlim,ylim latitudinal and logitudinal range for extracting map #' polygons, see \code{\link[maps]{map}} for details. #' @param ... other arguments passed onto \code{\link{geom_polygon}} #' @export #' @examples #' if (require("maps")) { #' #' ia <- map_data("county", "iowa") #' mid_range <- function(x) mean(range(x)) #' seats <- plyr::ddply(ia, "subregion", plyr::colwise(mid_range, c("lat", "long"))) #' ggplot(ia, aes(long, lat)) + #' geom_polygon(aes(group = group), fill = NA, colour = "grey60") + #' geom_text(aes(label = subregion), data = seats, size = 2, angle = 45) #' #' data(us.cities) #' capitals <- subset(us.cities, capital == 2) #' ggplot(capitals, aes(long, lat)) + #' borders("state") + #' geom_point(aes(size = pop)) + #' scale_size_area() + #' coord_quickmap() #' #' # Same map, with some world context #' ggplot(capitals, aes(long, lat)) + #' borders("world", xlim = c(-130, -60), ylim = c(20, 50)) + #' geom_point(aes(size = pop)) + #' scale_size_area() + #' coord_quickmap() #' } borders <- function(database = "world", regions = ".", fill = NA, colour = "grey50", xlim = NULL, ylim = NULL, ...) { df <- map_data(database, regions, xlim = xlim, ylim = ylim) geom_polygon(aes_(~long, ~lat, group = ~group), data = df, fill = fill, colour = colour, ..., inherit.aes = FALSE) } ggplot2/R/geom-segment.r0000644000175100001440000000733412570316065014635 0ustar hornikusers#' Line segments and curves. #' #' \code{geom_segment} draws a straight line between points (x1, y1) and #' (x2, y2). \code{geom_curve} draws a curved line. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "segment")} #' #' @inheritParams geom_point #' @param arrow specification for arrow heads, as created by arrow() #' @param lineend Line end style (round, butt, square) #' @seealso \code{\link{geom_path}} and \code{\link{geom_line}} for multi- #' segment lines and paths. #' @seealso \code{\link{geom_spoke}} for a segment parameterised by a location #' (x, y), and an angle and radius. #' @export #' @examples #' b <- ggplot(mtcars, aes(wt, mpg)) + #' geom_point() #' #' df <- data.frame(x1 = 2.62, x2 = 3.57, y1 = 21.0, y2 = 15.0) #' b + #' geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "curve"), data = df) + #' geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "segment"), data = df) #' #' b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = -0.2) #' b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = 1) #' b + geom_curve( #' aes(x = x1, y = y1, xend = x2, yend = y2), #' data = df, #' arrow = arrow(length = unit(0.03, "npc")) #' ) #' #' ggplot(seals, aes(long, lat)) + #' geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat), #' arrow = arrow(length = unit(0.1,"cm"))) + #' borders("state") #' #' # You can also use geom_segment to recreate plot(type = "h") : #' counts <- as.data.frame(table(x = rpois(100,5))) #' counts$x <- as.numeric(as.character(counts$x)) #' with(counts, plot(x, Freq, type = "h", lwd = 10)) #' #' ggplot(counts, aes(x, Freq)) + #' geom_segment(aes(xend = x, yend = 0), size = 10, lineend = "butt") geom_segment <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomSegment, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( arrow = arrow, lineend = lineend, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomSegment <- ggproto("GeomSegment", Geom, required_aes = c("x", "y", "xend", "yend"), non_missing_aes = c("linetype", "size", "shape"), default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), draw_panel = function(data, panel_scales, coord, arrow = NULL, lineend = "butt", na.rm = FALSE) { data <- remove_missing(data, na.rm = na.rm, c("x", "y", "xend", "yend", "linetype", "size", "shape"), name = "geom_segment") if (empty(data)) return(zeroGrob()) if (coord$is_linear()) { coord <- coord$transform(data, panel_scales) return(segmentsGrob(coord$x, coord$y, coord$xend, coord$yend, default.units = "native", gp = gpar( col = alpha(coord$colour, coord$alpha), fill = alpha(coord$colour, coord$alpha), lwd = coord$size * .pt, lty = coord$linetype, lineend = lineend ), arrow = arrow )) } data$group <- 1:nrow(data) starts <- subset(data, select = c(-xend, -yend)) ends <- plyr::rename(subset(data, select = c(-x, -y)), c("xend" = "x", "yend" = "y"), warn_missing = FALSE) pieces <- rbind(starts, ends) pieces <- pieces[order(pieces$group),] GeomPath$draw_panel(pieces, panel_scales, coord, arrow = arrow, lineend = lineend) }, draw_key = draw_key_path ) ggplot2/R/facet-locate.r0000644000175100001440000000500212560146060014556 0ustar hornikusers# A "special" value, currently not used but could be used to determine # if faceting is active NO_PANEL <- -1L # Take single layer of data and combine it with panel information to split # data into different panels. Adds in extra data for missing facetting # levels and for margins. # # @params data a data frame locate_grid <- function(data, panels, rows = NULL, cols = NULL, margins = FALSE) { if (empty(data)) { return(cbind(data, PANEL = integer(0))) } rows <- as.quoted(rows) cols <- as.quoted(cols) vars <- c(names(rows), names(cols)) # Compute facetting values and add margins margin_vars <- list(intersect(names(rows), names(data)), intersect(names(cols), names(data))) data <- reshape2::add_margins(data, margin_vars, margins) facet_vals <- quoted_df(data, c(rows, cols)) # If any facetting variables are missing, add them in by # duplicating the data missing_facets <- setdiff(vars, names(facet_vals)) if (length(missing_facets) > 0) { to_add <- unique(panels[missing_facets]) data_rep <- rep.int(1:nrow(data), nrow(to_add)) facet_rep <- rep(1:nrow(to_add), each = nrow(data)) data <- plyr::unrowname(data[data_rep, , drop = FALSE]) facet_vals <- plyr::unrowname(cbind( facet_vals[data_rep, , drop = FALSE], to_add[facet_rep, , drop = FALSE])) } # Add PANEL variable if (nrow(facet_vals) == 0) { # Special case of no facetting data$PANEL <- NO_PANEL } else { facet_vals[] <- lapply(facet_vals[], as.factor) facet_vals[] <- lapply(facet_vals[], addNA, ifany = TRUE) keys <- plyr::join.keys(facet_vals, panels, by = vars) data$PANEL <- panels$PANEL[match(keys$x, keys$y)] } data[order(data$PANEL), , drop = FALSE] } locate_wrap <- function(data, panels, vars) { if (empty(data)) { return(cbind(data, PANEL = integer(0))) } vars <- as.quoted(vars) facet_vals <- quoted_df(data, vars) facet_vals[] <- lapply(facet_vals[], as.factor) missing_facets <- setdiff(names(vars), names(facet_vals)) if (length(missing_facets) > 0) { to_add <- unique(panels[missing_facets]) data_rep <- rep.int(1:nrow(data), nrow(to_add)) facet_rep <- rep(1:nrow(to_add), each = nrow(data)) data <- plyr::unrowname(data[data_rep, , drop = FALSE]) facet_vals <- plyr::unrowname(cbind( facet_vals[data_rep, , drop = FALSE], to_add[facet_rep, , drop = FALSE])) } keys <- plyr::join.keys(facet_vals, panels, by = names(vars)) data$PANEL <- panels$PANEL[match(keys$x, keys$y)] data[order(data$PANEL), ] } ggplot2/R/limits.r0000644000175100001440000000707012560460554013546 0ustar hornikusers#' Convenience functions to set the axis limits. #' #' Observations not in this range will be dropped completely and #' not passed to any other layers. If a NA value is substituted for one of the #' limits that limit is automatically calculated. #' #' @param ... If numeric, will create a continuous scale, if factor or #' character, will create a discrete scale. For \code{lims}, every #' argument must be named. #' @seealso For changing x or y axis limits \strong{without} dropping data #' observations, see \code{\link{coord_cartesian}}. #' @export #' @examples #' # xlim #' xlim(15, 20) #' xlim(20, 15) #' xlim(c(10, 20)) #' xlim("a", "b", "c") #' #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' xlim(15, 20) #' # with automatic lower limit #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' xlim(NA, 20) #' #' # Change both xlim and ylim #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point() + #' lims(x = c(10, 20), y = c(3, 5)) lims <- function(...) { args <- list(...) if (any(!has_name(args))) { stop("All arguments must be named", call. = FALSE) } Map(limits, args, names(args)) } #' @export #' @rdname lims xlim <- function(...) { limits(c(...), "x") } #' @export #' @rdname lims ylim <- function(...) { limits(c(...), "y") } #' Generate correct scale type for specified limits #' #' @param limits vector of limits #' @param var name of variable #' @keywords internal #' @examples #' ggplot2:::limits(c(1, 5), "x") #' ggplot2:::limits(c(5, 1), "x") #' ggplot2:::limits(c("A", "b", "c"), "x") #' ggplot2:::limits(c("A", "b", "c"), "fill") #' ggplot2:::limits(as.Date(c("2008-01-01", "2009-01-01")), "x") limits <- function(lims, var) UseMethod("limits") #' @export limits.numeric <- function(lims, var) { stopifnot(length(lims) == 2) if (!any(is.na(lims)) && lims[1] > lims[2]) { trans <- "reverse" } else { trans <- "identity" } make_scale("continuous", var, limits = lims, trans = trans) } make_scale <- function(type, var, ...) { scale <- match.fun(paste("scale_", var, "_", type, sep = "")) scale(...) } #' @export limits.character <- function(lims, var) { make_scale("discrete", var, limits = lims) } #' @export limits.factor <- function(lims, var) { make_scale("discrete", var, limits = as.character(lims)) } #' @export limits.Date <- function(lims, var) { stopifnot(length(lims) == 2) make_scale("date", var, limits = lims) } #' @export limits.POSIXct <- function(lims, var) { stopifnot(length(lims) == 2) make_scale("datetime", var, limits = lims) } #' @export limits.POSIXlt <- function(lims, var) { stopifnot(length(lims) == 2) make_scale("datetime", var, limits = as.POSIXct(lims)) } #' Expand the plot limits with data. #' #. Sometimes you may want to ensure limits include a single value, for all #' panels or all plots. This function is a thin wrapper around #' \code{\link{geom_blank}} that makes it easy to add such values. #' #' @param ... named list of aesthetics specifying the value (or values) that #' should be included in each scale. #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' p + expand_limits(x = 0) #' p + expand_limits(y = c(1, 9)) #' p + expand_limits(x = 0, y = 0) #' #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = cyl)) + #' expand_limits(colour = seq(2, 10, by = 2)) #' ggplot(mtcars, aes(mpg, wt)) + #' geom_point(aes(colour = factor(cyl))) + #' expand_limits(colour = factor(seq(2, 10, by = 2))) expand_limits <- function(...) { data <- data.frame(..., stringsAsFactors = FALSE) geom_blank(aes_all(names(data)), data, inherit.aes = FALSE) } ggplot2/R/position-dodge.r0000644000175100001440000000374612567133536015203 0ustar hornikusers#' Adjust position by dodging overlaps to the side. #' #' @inheritParams position_identity #' @param width Dodging width, when different to the width of the individual #' elements. This is useful when you want to align narrow geoms with wider #' geoms. See the examples for a use case. #' @family position adjustments #' @export #' @examples #' ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + #' geom_bar(position = "dodge") #' \donttest{ #' ggplot(diamonds, aes(price, fill = cut)) + #' geom_histogram(position="dodge") #' # see ?geom_boxplot and ?geom_bar for more examples #' #' # To dodge items with different widths, you need to be explicit #' df <- data.frame(x=c("a","a","b","b"), y=2:5, g = rep(1:2, 2)) #' p <- ggplot(df, aes(x, y, group = g)) + #' geom_bar( #' stat = "identity", position = "dodge", #' fill = "grey50", colour = "black" #' ) #' p #' #' # A line range has no width: #' p + geom_linerange(aes(ymin = y-1, ymax = y+1), position = "dodge") #' # You need to explicitly specify the width for dodging #' p + geom_linerange(aes(ymin = y-1, ymax = y+1), #' position = position_dodge(width = 0.9)) #' #' # Similarly with error bars: #' p + geom_errorbar(aes(ymin = y-1, ymax = y+1), width = 0.2, #' position = "dodge") #' p + geom_errorbar(aes(ymin = y-1, ymax = y+1, width = 0.2), #' position = position_dodge(width = 0.90)) #' } position_dodge <- function(width = NULL) { ggproto(NULL, PositionDodge, width = width) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionDodge <- ggproto("PositionDodge", Position, required_aes = "x", width = NULL, setup_params = function(self, data) { if (is.null(data$xmin) && is.null(data$xmax) && is.null(self$width)) { warning("Width not defined. Set with `position_dodge(width = ?)`", call. = FALSE) } list(width = self$width) }, compute_panel = function(data, params, scales) { collide(data, params$width, "position_dodge", pos_dodge, check.width = FALSE) } ) ggplot2/R/facet-layout.r0000644000175100001440000001213012620205457014627 0ustar hornikusers# Layout panels in a 2d grid. # # @params data list of data frames, one for each layer # @params rows variables that form the rows # @params cols variables that form the columns # @return a data frame with columns \code{PANEL}, \code{ROW} and \code{COL}, # that match the facetting variable values up with their position in the # grid layout_grid <- function(data, rows = NULL, cols = NULL, margins = NULL, drop = TRUE, as.table = TRUE) { if (length(rows) == 0 && length(cols) == 0) return(layout_null()) rows <- as.quoted(rows) cols <- as.quoted(cols) base_rows <- layout_base(data, rows, drop = drop) if (!as.table) { rev_order <- function(x) factor(x, levels = rev(ulevels(x))) base_rows[] <- lapply(base_rows, rev_order) } base_cols <- layout_base(data, cols, drop = drop) base <- df.grid(base_rows, base_cols) # Add margins base <- reshape2::add_margins(base, list(names(rows), names(cols)), margins) # Work around bug in reshape2 base <- unique(base) # Create panel info dataset panel <- plyr::id(base, drop = TRUE) panel <- factor(panel, levels = seq_len(attr(panel, "n"))) rows <- if (is.null(names(rows))) 1L else plyr::id(base[names(rows)], drop = TRUE) cols <- if (is.null(names(cols))) 1L else plyr::id(base[names(cols)], drop = TRUE) panels <- data.frame(PANEL = panel, ROW = rows, COL = cols, base, check.names = FALSE, stringsAsFactors = FALSE) panels <- panels[order(panels$PANEL), , drop = FALSE] rownames(panels) <- NULL panels } # Layout out panels in a 1d ribbon. # # @params drop should missing combinations be excluded from the plot? # @keywords internal layout_wrap <- function(data, vars = NULL, nrow = NULL, ncol = NULL, as.table = TRUE, drop = TRUE, dir = "h") { vars <- as.quoted(vars) if (length(vars) == 0) return(layout_null()) base <- plyr::unrowname(layout_base(data, vars, drop = drop)) id <- plyr::id(base, drop = TRUE) n <- attr(id, "n") dims <- wrap_dims(n, nrow, ncol) layout <- data.frame(PANEL = factor(id, levels = seq_len(n))) if (as.table) { layout$ROW <- as.integer((id - 1L) %/% dims[2] + 1L) } else { layout$ROW <- as.integer(dims[1] - (id - 1L) %/% dims[2]) } layout$COL <- as.integer((id - 1L) %% dims[2] + 1L) # For vertical direction, flip row and col if (identical(dir, "v")) { layout[c("ROW", "COL")] <- layout[c("COL", "ROW")] } panels <- cbind(layout, plyr::unrowname(base)) panels <- panels[order(panels$PANEL), , drop = FALSE] rownames(panels) <- NULL panels } layout_null <- function() { data.frame(PANEL = 1, ROW = 1, COL = 1) } # Base layout function that generates all combinations of data needed for # facetting # The first data frame in the list should be the default data for the plot. # Other data frames in the list are ones that are added to layers. # # @params data list of data frames (one for each layer) # @keywords internal layout_base <- function(data, vars = NULL, drop = TRUE) { if (length(vars) == 0) return(data.frame()) # For each layer, compute the facet values values <- compact(plyr::llply(data, quoted_df, vars = vars)) # Form the base data frame which contains all combinations of facetting # variables that appear in the data has_all <- unlist(plyr::llply(values, length)) == length(vars) if (!any(has_all)) { stop("At least one layer must contain all variables used for facetting") } base <- unique(plyr::ldply(values[has_all])) if (!drop) { base <- unique_combs(base) } # Systematically add on missing combinations for (value in values[!has_all]) { if (empty(value)) next; old <- base[setdiff(names(base), names(value))] new <- unique(value[intersect(names(base), names(value))]) if (drop) { new <- unique_combs(new) } base <- rbind(base, df.grid(old, new)) } if (empty(base)) { stop("Faceting variables must have at least one value", call. = FALSE) } base } ulevels <- function(x) { if (is.factor(x)) { x <- addNA(x, TRUE) factor(levels(x), levels(x), exclude = NULL) } else { sort(unique(x)) } } unique_combs <- function(df) { if (length(df) == 0) return() unique_values <- plyr::llply(df, ulevels) rev(expand.grid(rev(unique_values), stringsAsFactors = FALSE, KEEP.OUT.ATTRS = TRUE)) } df.grid <- function(a, b) { if (nrow(a) == 0) return(b) if (nrow(b) == 0) return(a) indexes <- expand.grid( i_a = seq_len(nrow(a)), i_b = seq_len(nrow(b)) ) plyr::unrowname(cbind( a[indexes$i_a, , drop = FALSE], b[indexes$i_b, , drop = FALSE] )) } quoted_df <- function(data, vars) { values <- plyr::eval.quoted(vars, data, emptyenv(), try = TRUE) as.data.frame(compact(values), optional = TRUE, stringsAsFactors = FALSE) } # Arrange 1d structure into a grid wrap_dims <- function(n, nrow = NULL, ncol = NULL) { if (is.null(ncol) && is.null(nrow)) { rc <- grDevices::n2mfrow(n) nrow <- rc[2] ncol <- rc[1] } else if (is.null(ncol)) { ncol <- ceiling(n / nrow) } else if (is.null(nrow)) { nrow <- ceiling(n / ncol) } stopifnot(nrow * ncol >= n) c(nrow, ncol) } ggplot2/R/geom-smooth.r0000644000175100001440000001035612607211461014475 0ustar hornikusers#' Add a smoothed conditional mean. #' #' Aids the eye in seeing patterns in the presence of overplotting. #' \code{geom_smooth} and \code{stat_smooth} are effectively aliases: they #' both use the same arguments. Use \code{geom_smooth} unless you want to #' display the results with a non-standard geom. #' #' Calculation is performed by the (currently undocumented) #' \code{predictdf} generic and its methods. For most methods the standard #' error bounds are computed using the \code{\link{predict}} method - the #' exceptions are \code{loess} which uses a t-based approximation, and #' \code{glm} where the normal confidence interval is constructed on the link #' scale, and then back-transformed to the response scale. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "smooth")} #' #' @inheritParams geom_point #' @param geom,stat Use to override the default connection between #' \code{geom_smooth} and \code{stat_smooth}. #' @seealso See individual modelling functions for more details: #' \code{\link{lm}} for linear smooths, #' \code{\link{glm}} for generalised linear smooths, #' \code{\link{loess}} for local smooths #' @export #' @examples #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth() #' #' # Use span to control the "wiggliness" of the default loess smoother #' # The span is the fraction of points used to fit each local regression: #' # small numbers make a wigglier curve, larger numbers make a smoother curve. #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(span = 0.3) #' #' # Instead of a loess smooth, you can use any other modelling function: #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(method = "lm", se = FALSE) #' #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(method = "lm", formula = y ~ splines::bs(x, 3), se = FALSE) #' #' # Smoothes are automatically fit to each group (defined by categorical #' # aesthetics or the group aesthetic) and for each facet #' #' ggplot(mpg, aes(displ, hwy, colour = class)) + #' geom_point() + #' geom_smooth(se = FALSE, method = "lm") #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' geom_smooth(span = 0.8) + #' facet_wrap(~drv) #' #' \dontrun{ #' # To fit a logistic regression, you need to coerce the values to #' # a numeric vector lying between 0 and 1. #' binomial_smooth <- function(...) { #' geom_smooth(method = "glm", method.args = list(family = "binomial"), ...) #' } #' #' ggplot(rpart::kyphosis, aes(Age, Kyphosis)) + #' geom_jitter(height = 0.05) + #' binomial_smooth() #' #' ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + #' geom_jitter(height = 0.05) + #' binomial_smooth() #' #' ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + #' geom_jitter(height = 0.05) + #' binomial_smooth(formula = y ~ splines::ns(x, 2)) #' #' # But in this case, it's probably better to fit the model yourself #' # so you can exercise more control and see whether or not it's a good model #' } geom_smooth <- function(mapping = NULL, data = NULL, stat = "smooth", method = "auto", formula = y ~ x, se = TRUE, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { params <- list( na.rm = na.rm, ... ) if (identical(stat, "smooth")) { params$method <- method params$formula <- formula params$se <- se } layer( data = data, mapping = mapping, stat = stat, geom = GeomSmooth, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = params ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomSmooth <- ggproto("GeomSmooth", Geom, draw_group = function(data, panel_scales, coord) { ribbon <- transform(data, colour = NA) path <- transform(data, alpha = NA) has_ribbon <- !is.null(data$ymax) && !is.null(data$ymin) gList( if (has_ribbon) GeomRibbon$draw_group(ribbon, panel_scales, coord), GeomLine$draw_panel(path, panel_scales, coord) ) }, draw_key = draw_key_smooth, required_aes = c("x", "y"), default_aes = aes(colour = "#3366FF", fill = "grey60", size = 1, linetype = 1, weight = 1, alpha = 0.4) ) ggplot2/R/stat-summary.r0000644000175100001440000002074712620172315014711 0ustar hornikusers#' Summarise y values at unique/binned x x. #' #' \code{stat_summary} operates on unique \code{x}; \code{stat_summary_bin} #' operators on binned \code{x}. They are more flexible versions of #' \code{\link{stat_bin}}: instead of just counting, the can compute any #' aggregate. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "summary")} #' #' @seealso \code{\link{geom_errorbar}}, \code{\link{geom_pointrange}}, #' \code{\link{geom_linerange}}, \code{\link{geom_crossbar}} for geoms to #' display summarised data #' @inheritParams stat_identity #' @section Summary functions: #' You can either supply summary functions individually (\code{fun.y}, #' \code{fun.ymax}, \code{fun.ymin}), or as a single function (\code{fun.data}): #' #' \describe{ #' \item{fun.data}{Complete summary function. Should take numeric vector as #' input and return data frame as output} #' \item{fun.ymin}{ymin summary function (should take numeric vector and #' return single number)} #' \item{fun.y}{y summary function (should take numeric vector and return #' single number)} #' \item{fun.ymax}{ymax summary function (should take numeric vector and #' return single number)} #' } #' #' A simple vector function is easiest to work with as you can return a single #' number, but is somewhat less flexible. If your summary function computes #' multiple values at once (e.g. ymin and ymax), use \code{fun.data}. #' #' If no aggregation functions are suppled, will default to #' \code{\link{mean_se}}. #' #' @param fun.data A function that is given the complete data and should #' return a data frame with variables \code{ymin}, \code{y}, and \code{ymax}. #' @param fun.ymin,fun.y,fun.ymax Alternatively, supply three individual #' functions that are each passed a vector of x's and should return a #' single number. #' @param fun.args Optional additional arguments passed on to the functions. #' @export #' @examples #' d <- ggplot(mtcars, aes(cyl, mpg)) + geom_point() #' d + stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 2) #' #' # You can supply individual functions to summarise the value at #' # each x: #' d + stat_summary(fun.y = "median", colour = "red", size = 2) #' d + stat_summary(fun.y = "mean", colour = "red", size = 2) #' d + aes(colour = factor(vs)) + stat_summary(fun.y = mean, geom="line") #' #' d + stat_summary(fun.y = mean, fun.ymin = min, fun.ymax = max, #' colour = "red") #' #' #' d <- ggplot(diamonds, aes(carat, price)) #' d + geom_smooth() #' d + geom_line(stat = "summary_bin", binwidth = 0.1, fun.y = "mean") #' #' d <- ggplot(diamonds, aes(cut)) #' d + geom_bar() #' d + stat_summary_bin(aes(y = price), fun.y = "mean", geom = "bar") #' \donttest{ #' # A set of useful summary functions is provided from the Hmisc package: #' stat_sum_df <- function(fun, geom="crossbar", ...) { #' stat_summary(fun.data=fun, colour="red", geom=geom, width=0.2, ...) #' } #' #' # Don't use ylim to zoom into a summary plot - this throws the #' # data away #' p <- ggplot(mtcars, aes(cyl, mpg)) + #' stat_summary(fun.y = "mean", geom = "point") #' p #' p + ylim(15, 30) #' # Instead use coord_cartesian #' p + coord_cartesian(ylim = c(15, 30)) #' #' # The crossbar geom needs grouping to be specified when used with #' # a continuous x axis. #' d + stat_sum_df("mean_cl_boot", mapping = aes(group = cyl)) #' d + stat_sum_df("mean_sdl", mapping = aes(group = cyl)) #' d + stat_sum_df("mean_sdl", mult = 1, mapping = aes(group = cyl)) #' d + stat_sum_df("median_hilow", mapping = aes(group = cyl)) #' #' # There are lots of different geoms you can use to display the summaries #' #' d + stat_sum_df("mean_cl_normal", mapping = aes(group = cyl)) #' d + stat_sum_df("mean_cl_normal", geom = "errorbar") #' d + stat_sum_df("mean_cl_normal", geom = "pointrange") #' d + stat_sum_df("mean_cl_normal", geom = "smooth") #' #' # Summaries are more useful with a bigger data set: #' mpg2 <- subset(mpg, cyl != 5L) #' m <- ggplot(mpg2, aes(x=cyl, y=hwy)) + #' geom_point() + #' stat_summary(fun.data = "mean_sdl", geom = "linerange", #' colour = "red", size = 2, mult = 1) + #' xlab("cyl") #' m #' # An example with highly skewed distributions: #' if (require("ggplot2movies")) { #' set.seed(596) #' mov <- movies[sample(nrow(movies), 1000), ] #' m2 <- ggplot(mov, aes(x= factor(round(rating)), y=votes)) + geom_point() #' m2 <- m2 + stat_summary(fun.data = "mean_cl_boot", geom = "crossbar", #' colour = "red", width = 0.3) + xlab("rating") #' m2 #' # Notice how the overplotting skews off visual perception of the mean #' # supplementing the raw data with summary statistics is _very_ important #' #' # Next, we'll look at votes on a log scale. #' #' # Transforming the scale means the data are transformed #' # first, after which statistics are computed: #' m2 + scale_y_log10() #' # Transforming the coordinate system occurs after the #' # statistic has been computed. This means we're calculating the summary on the raw data #' # and stretching the geoms onto the log scale. Compare the widths of the #' # standard errors. #' m2 + coord_trans(y="log10") #' } #' } stat_summary <- function(mapping = NULL, data = NULL, geom = "pointrange", fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, position = "identity", show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatSummary, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fun.data = fun.data, fun.y = fun.y, fun.ymax = fun.ymax, fun.ymin = fun.ymin, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummary <- ggproto("StatSummary", Stat, required_aes = c("x", "y"), compute_panel = function(data, scales, fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE) { fun <- make_summary_fun(fun.data, fun.y, fun.ymax, fun.ymin, fun.args) summarise_by_x(data, fun) } ) # Summarise a data.frame by parts # Summarise a data frame by unique value of x # # This function is used by \code{\link{stat_summary}} to break a # data.frame into pieces, summarise each piece, and join the pieces # back together, retaining original columns unaffected by the summary. # # @param \code{\link{data.frame}} to summarise # @param vector to summarise by # @param summary function (must take and return a data.frame) # @param other arguments passed on to summary function # @keyword internal summarise_by_x <- function(data, summary, ...) { summary <- plyr::ddply(data, c("group", "x"), summary, ...) unique <- plyr::ddply(data, c("group", "x"), uniquecols) unique$y <- NULL merge(summary, unique, by = c("x", "group")) } #' Wrap up a selection of summary functions from Hmisc to make it easy to use #' with \code{\link{stat_summary}}. #' #' See the Hmisc documentation for details of their options. #' #' @param x a numeric vector #' @param ... other arguments passed on to the respective Hmisc function. #' @seealso \code{\link[Hmisc]{smean.cl.boot}}, #' \code{\link[Hmisc]{smean.cl.normal}}, \code{\link[Hmisc]{smean.sdl}}, #' \code{\link[Hmisc]{smedian.hilow}} #' @name hmisc NULL wrap_hmisc <- function(fun) { function(x, ...) { if (!requireNamespace("Hmisc", quietly = TRUE)) stop("Hmisc package required for this function", call. = FALSE) fun <- getExportedValue("Hmisc", fun) result <- do.call(fun, list(x = quote(x), ...)) plyr::rename( data.frame(t(result)), c(Median = "y", Mean = "y", Lower = "ymin", Upper = "ymax"), warn_missing = FALSE ) } } #' @export #' @rdname hmisc mean_cl_boot <- wrap_hmisc("smean.cl.boot") #' @export #' @rdname hmisc mean_cl_normal <- wrap_hmisc("smean.cl.normal") #' @export #' @rdname hmisc mean_sdl <- wrap_hmisc("smean.sdl") #' @export #' @rdname hmisc median_hilow <- wrap_hmisc("smedian.hilow") #' Calculate mean and standard errors on either side. #' #' @param x numeric vector #' @param mult number of multiples of standard error #' @seealso for use with \code{\link{stat_summary}} #' @export mean_se <- function(x, mult = 1) { x <- stats::na.omit(x) se <- mult * sqrt(stats::var(x) / length(x)) mean <- mean(x) data.frame(y = mean, ymin = mean - se, ymax = mean + se) } ggplot2/R/fortify-multcomp.r0000644000175100001440000000425012555701147015562 0ustar hornikusers#' Fortify methods for objects produced by \pkg{multcomp} #' #' @param model an object of class \code{glht}, \code{confint.glht}, #' \code{summary.glht} or \code{\link[multcomp]{cld}} #' @param data,... other arguments to the generic ignored in this method. #' @name fortify-multcomp #' @examples #' if (require("multcomp")) { #' amod <- aov(breaks ~ wool + tension, data = warpbreaks) #' wht <- glht(amod, linfct = mcp(tension = "Tukey")) #' #' fortify(wht) #' ggplot(wht, aes(lhs, estimate)) + geom_point() #' #' CI <- confint(wht) #' fortify(CI) #' ggplot(CI, aes(lhs, estimate, ymin = lwr, ymax = upr)) + #' geom_pointrange() #' #' fortify(summary(wht)) #' ggplot(mapping = aes(lhs, estimate)) + #' geom_linerange(aes(ymin = lwr, ymax = upr), data = CI) + #' geom_point(aes(size = p), data = summary(wht)) + #' scale_size(trans = "reverse") #' #' cld <- cld(wht) #' fortify(cld) #' } NULL #' @method fortify glht #' @rdname fortify-multcomp #' @export fortify.glht <- function(model, data, ...) { plyr::unrowname(data.frame( lhs = rownames(model$linfct), rhs = model$rhs, estimate = stats::coef(model), check.names = FALSE, stringsAsFactors = FALSE)) } #' @rdname fortify-multcomp #' @method fortify confint.glht #' @export fortify.confint.glht <- function(model, data, ...) { coef <- model$confint colnames(coef) <- tolower(colnames(coef)) plyr::unrowname(data.frame( lhs = rownames(coef), rhs = model$rhs, coef, check.names = FALSE, stringsAsFactors = FALSE)) } #' @method fortify summary.glht #' @rdname fortify-multcomp #' @export fortify.summary.glht <- function(model, data, ...) { coef <- as.data.frame( model$test[c("coefficients", "sigma", "tstat", "pvalues")]) names(coef) <- c("estimate", "se", "t", "p") plyr::unrowname(data.frame( lhs = rownames(coef), rhs = model$rhs, coef, check.names = FALSE, stringsAsFactors = FALSE)) } #' @method fortify cld #' @rdname fortify-multcomp #' @export fortify.cld <- function(model, data, ...) { plyr::unrowname(data.frame( lhs = names(model$mcletters$Letters), letters = model$mcletters$Letters, check.names = FALSE, stringsAsFactors = FALSE)) } ggplot2/R/aes-position.r0000644000175100001440000000300012557661773014660 0ustar hornikusers#' Position related aesthetics: x, y, xmin, xmax, ymin, ymax, xend, yend #' #' This page demonstrates the usage of a sub-group #' of aesthetics; x, y, xmin, xmax, ymin, ymax, xend, and yend. #' #' @name aes_position #' @aliases x y xmin xmax ymin ymax xend yend #' @examples #' #' # Generate data: means and standard errors of means for prices #' # for each type of cut #' dmod <- lm(price ~ cut, data = diamonds) #' cuts <- data.frame(cut = unique(diamonds$cut), predict(dmod, data.frame(cut = #' unique(diamonds$cut)), se = TRUE)[c("fit", "se.fit")]) #' se <- ggplot(cuts, aes(x = cut, y = fit, ymin = fit - se.fit, #' ymax = fit + se.fit, colour = cut)) #' se + geom_pointrange() #' #' # Using annotate #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' p + annotate("rect", xmin = 2, xmax = 3.5, ymin = 2, ymax = 25, #' fill = "dark grey", alpha = .5) #' #' # Geom_segment examples #' p + geom_segment(aes(x = 2, y = 15, xend = 2, yend = 25), #' arrow = arrow(length = unit(0.5, "cm"))) #' p + geom_segment(aes(x = 2, y = 15, xend = 3, yend = 15), #' arrow = arrow(length = unit(0.5, "cm"))) #' p + geom_segment(aes(x = 5, y = 30, xend = 3.5, yend = 25), #' arrow = arrow(length = unit(0.5, "cm"))) #' #' # You can also use geom_segment to recreate plot(type = "h") : #' counts <- as.data.frame(table(x = rpois(100, 5))) #' counts$x <- as.numeric(as.character(counts$x)) #' with(counts, plot(x, Freq, type = "h", lwd = 10)) #' #' ggplot(counts, aes(x, Freq)) + #' geom_segment(aes(yend = 0, xend = x), size = 10) NULL ggplot2/R/stat-.r0000644000175100001440000001142512607213626013272 0ustar hornikusers#' @section Stats: #' #' All \code{stat_*} functions (like \code{stat_bin}) return a layer that #' contains a \code{Stat*} object (like \code{StatBin}). The \code{Stat*} #' object is responsible for rendering the data in the plot. #' #' Each of the \code{Stat*} objects is a \code{\link{ggproto}} object, descended #' from the top-level \code{Stat}, and each implements various methods and #' fields. To create a new type of Stat object, you typically will want to #' implement one or more of the following: #' #' \itemize{ #' \item Override one of : #' \code{compute_layer(self, data, scales, ...)}, #' \code{compute_panel(self, data, scales, ...)}, or #' \code{compute_group(self, data, scales, ...)}. #' #' \code{compute_layer()} is called once per layer, \code{compute_panel_()} #' is called once per panel, and \code{compute_group()} is called once per #' group. All must return a data frame. #' #' It's usually best to start by overriding \code{compute_group}: if #' you find substantial performance optimisations, override higher up. #' You'll need to read the source code of the default methods to see #' what else you should be doing. #' #' \code{data} is a data frame containing the variables named according #' to the aesthetics that they're mapped to. \code{scales} is a list #' containing the \code{x} and \code{y} scales. There functions are called #' before the facets are trained, so they are global scales, not local #' to the individual panels.\code{...} contains the parameters returned by #' \code{setup_params()}. #' \item \code{setup_params(data, params)}: called once for each layer. #' Used to setup defaults that need to complete dataset, and to inform #' the user of important choices. Should return list of parameters. #' \item \code{setup_data(data, params)}: called once for each layer, #' after \code{setp_params()}. Should return modified \code{data}. #' Default methods removes all rows containing a missing value in #' required aesthetics (with a warning if \code{!na.rm}). #' \item \code{required_aes}: A character vector of aesthetics needed to #' render the geom. #' \item \code{default_aes}: A list (generated by \code{\link{aes}()} of #' default values for aesthetics. #' } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export Stat <- ggproto("Stat", # Should the values produced by the statistic also be transformed # in the second pass when recently added statistics are trained to # the scales retransform = TRUE, default_aes = aes(), required_aes = character(), non_missing_aes = character(), setup_params = function(data, params) { params }, setup_data = function(data, params) { data }, compute_layer = function(self, data, params, panels) { check_required_aesthetics( self$stat$required_aes, c(names(data), names(params)), snake_class(self$stat) ) data <- remove_missing(data, params$na.rm, c(self$required_aes, self$non_missing_aes), snake_class(self), finite = TRUE ) # Trim off extra parameters params <- params[intersect(names(params), self$parameters())] args <- c(list(data = quote(data), scales = quote(scales)), params) plyr::ddply(data, "PANEL", function(data) { scales <- panel_scales(panels, data$PANEL[1]) tryCatch(do.call(self$compute_panel, args), error = function(e) { warning("Computation failed in `", snake_class(self), "()`:\n", e$message, call. = FALSE) data.frame() }) }) }, compute_panel = function(self, data, scales, ...) { if (empty(data)) return(data.frame()) groups <- split(data, data$group) stats <- lapply(groups, function(group) { self$compute_group(data = group, scales = scales, ...) }) stats <- mapply(function(new, old) { if (empty(new)) return(data.frame()) unique <- uniquecols(old) missing <- !(names(unique) %in% names(new)) cbind( new, unique[rep(1, nrow(new)), missing,drop = FALSE] ) }, stats, groups, SIMPLIFY = FALSE) do.call(plyr::rbind.fill, stats) }, compute_group = function(self, data, scales) { stop("Not implemented", call. = FALSE) }, # See discussion at Geom$parameters() extra_params = "na.rm", parameters = function(self, extra = FALSE) { # Look first in compute_panel. If it contains ... then look in compute_group panel_args <- names(ggproto_formals(self$compute_panel)) group_args <- names(ggproto_formals(self$compute_group)) args <- if ("..." %in% panel_args) group_args else panel_args # Remove arguments of defaults args <- setdiff(args, names(ggproto_formals(Stat$compute_group))) if (extra) { args <- union(args, self$extra_params) } args } ) ggplot2/R/scale-date.r0000644000175100001440000001334212567704140014245 0ustar hornikusers#' Position scale, date & date times #' #' Use \code{scale_*_date} with \code{Date} variables, and #' \code{scale_*_datetime} with \code{POSIXct} variables. #' #' @name scale_date #' @inheritParams continuous_scale #' @param date_breaks A string giving the distance between breaks like "2 #' weeks", or "10 years". If both \code{breaks} and \code{date_breaks} are #' specified, \code{date_breaks} wins. #' @param date_minor_breaks A string giving the distance between minor breaks #' like "2 weeks", or "10 years". If both \code{minor_breaks} and #' \code{date_minor_breaks} are specified, \code{date_minor_breaks} wins. #' @param date_labels A string giving the formatting specification for the #' labels. Codes are defined in \code{\link{strftime}}. If both \code{labels} #' and \code{date_labels} are specified, \code{date_labels} wins. #' @seealso \code{\link{scale_continuous}} for continuous position scales. #' @examples #' last_month <- Sys.Date() - 0:29 #' df <- data.frame( #' date = last_month, #' price = runif(30) #' ) #' base <- ggplot(df, aes(date, price)) + #' geom_line() #' #' # The date scale will attempt to pick sensible defaults for #' # major and minor tick marks. Override with date_breaks, date_labels #' # date_minor_breaks arguments. #' base + scale_x_date(date_labels = "%b %d") #' base + scale_x_date(date_breaks = "1 week", date_labels = "%W") #' base + scale_x_date(date_minor_breaks = "1 day") #' #' # Set limits #' base + scale_x_date(limits = c(Sys.Date() - 7, NA)) NULL #' @rdname scale_date #' @export scale_x_date <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) { scale_datetime(c("x", "xmin", "xmax", "xend"), "date", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, limits = limits, expand = expand ) } #' @rdname scale_date #' @export scale_y_date <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) { scale_datetime(c("y", "ymin", "ymax", "yend"), "date", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, limits = limits, expand = expand ) } #' @export #' @rdname scale_date scale_x_datetime <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) { scale_datetime(c("x", "xmin", "xmax", "xend"), "time", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, limits = limits, expand = expand ) } #' @rdname scale_date #' @export scale_y_datetime <- function(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) { scale_datetime(c("y", "ymin", "ymax", "yend"), "time", name = name, breaks = breaks, date_breaks = date_breaks, labels = labels, date_labels = date_labels, minor_breaks = minor_breaks, date_minor_breaks = date_minor_breaks, limits = limits, expand = expand ) } scale_datetime <- function(aesthetics, trans, breaks = pretty_breaks(), minor_breaks = waiver(), labels = waiver(), date_breaks = waiver(), date_labels = waiver(), date_minor_breaks = waiver(), ...) { name <- switch(trans, date = "date", time = "datetime") # Backward compatibility if (is.character(breaks)) breaks <- date_breaks(breaks) if (is.character(minor_breaks)) minor_breaks <- date_breaks(minor_breaks) if (!is.waive(date_breaks)) { breaks <- date_breaks(date_breaks) } if (!is.waive(date_minor_breaks)) { minor_breaks <- date_breaks(date_minor_breaks) } if (!is.waive(date_labels)) { labels <- date_format(date_labels) } sc <- continuous_scale(aesthetics, name, identity, breaks = breaks, minor_breaks = minor_breaks, labels = labels, guide = "none", trans = trans, ...) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. scale_class <- switch(trans, date = ScaleContinuousDate, time = ScaleContinuousDatetime) sc$super <- scale_class class(sc) <- class(scale_class) sc } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousDatetime <- ggproto("ScaleContinuousDatetime", ScaleContinuous, map = function(self, x, limits = self$get_limits()) { self$oob(x, limits) } ) #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousDate <- ggproto("ScaleContinuousDate", ScaleContinuous, map = function(self, x, limits = self$get_limits()) { self$oob(x, limits) } ) ggplot2/R/plot-build.r0000644000175100001440000002364112620215432014310 0ustar hornikusers#' Build ggplot for rendering. #' #' \code{ggplot_build} takes the plot object, and performs all steps necessary #' to produce an object that can be rendered. This function outputs two pieces: #' a list of data frames (one for each layer), and a panel object, which #' contain all information about axis limits, breaks etc. #' #' \code{layer_data}, \code{layer_grob}, and \code{layer_scales} are helper #' functions that returns the data, grob, or scales associated with a given #' layer. These are useful for tests. #' #' @param plot ggplot object #' @seealso \code{\link{print.ggplot}} and \code{\link{benchplot}} for #' functions that contain the complete set of steps for generating #' a ggplot2 plot. #' @keywords internal #' @export ggplot_build <- function(plot) { plot <- plot_clone(plot) if (length(plot$layers) == 0) { plot <- plot + geom_blank() } layers <- plot$layers layer_data <- lapply(layers, function(y) y$data) scales <- plot$scales # Apply function to layer and matching data by_layer <- function(f) { out <- vector("list", length(data)) for (i in seq_along(data)) { out[[i]] <- f(l = layers[[i]], d = data[[i]]) } out } # Initialise panels, add extra data for margins & missing facetting # variables, and add on a PANEL variable to data panel <- new_panel() panel <- train_layout(panel, plot$facet, layer_data, plot$data) data <- map_layout(panel, plot$facet, layer_data, plot$data) # Compute aesthetics to produce data with generalised variable names data <- by_layer(function(l, d) l$compute_aesthetics(d, plot)) # Transform all scales data <- lapply(data, scales_transform_df, scales = scales) # Map and train positions so that statistics have access to ranges # and all positions are numeric scale_x <- function() scales$get_scales("x") scale_y <- function() scales$get_scales("y") panel <- train_position(panel, data, scale_x(), scale_y()) data <- map_position(panel, data, scale_x(), scale_y()) # Apply and map statistics data <- by_layer(function(l, d) l$compute_statistic(d, panel)) data <- by_layer(function(l, d) l$map_statistic(d, plot)) # Make sure missing (but required) aesthetics are added scales_add_missing(plot, c("x", "y"), plot$plot_env) # Reparameterise geoms from (e.g.) y and width to ymin and ymax data <- by_layer(function(l, d) l$compute_geom_1(d)) # Apply position adjustments data <- by_layer(function(l, d) l$compute_position(d, panel)) # Reset position scales, then re-train and map. This ensures that facets # have control over the range of a plot: is it generated from what's # displayed, or does it include the range of underlying data reset_scales(panel) panel <- train_position(panel, data, scale_x(), scale_y()) data <- map_position(panel, data, scale_x(), scale_y()) # Train and map non-position scales npscales <- scales$non_position_scales() if (npscales$n() > 0) { lapply(data, scales_train_df, scales = npscales) data <- lapply(data, scales_map_df, scales = npscales) } # Train coordinate system panel <- train_ranges(panel, plot$coordinates) # Fill in defaults etc. data <- by_layer(function(l, d) l$compute_geom_2(d)) list(data = data, panel = panel, plot = plot) } #' @export #' @rdname ggplot_build layer_data <- function(plot, i = 1L) { ggplot_build(plot)$data[[i]] } #' @export #' @rdname ggplot_build layer_scales <- function(plot, i = 1L, j = 1L) { b <- ggplot_build(plot) layout <- b$panel$layout selected <- layout[layout$ROW == i & layout$COL == j, , drop = FALSE] list( x = b$panel$x_scales[[selected$SCALE_X]], y = b$panel$y_scales[[selected$SCALE_Y]] ) } #' @export #' @rdname ggplot_build layer_grob <- function(plot, i = 1L) { b <- ggplot_build(plot) b$plot$layers[[i]]$draw_geom(b$data[[i]], b$panel, b$plot$coordinates) } #' Build a plot with all the usual bits and pieces. #' #' This function builds all grobs necessary for displaying the plot, and #' stores them in a special data structure called a \code{\link{gtable}}. #' This object is amenable to programmatic manipulation, should you want #' to (e.g.) make the legend box 2 cm wide, or combine multiple plots into #' a single display, preserving aspect ratios across the plots. #' #' @seealso \code{\link{print.ggplot}} and \code{link{benchplot}} for #' for functions that contain the complete set of steps for generating #' a ggplot2 plot. #' @return a \code{\link{gtable}} object #' @keywords internal #' @param plot plot object #' @param data plot data generated by \code{\link{ggplot_build}} #' @export ggplot_gtable <- function(data) { plot <- data$plot panel <- data$panel data <- data$data theme <- plot_theme(plot) geom_grobs <- Map(function(l, d) l$draw_geom(d, panel, plot$coordinates), plot$layers, data) plot_table <- facet_render(plot$facet, panel, plot$coordinates, theme, geom_grobs) # Axis labels labels <- plot$coordinates$labels(list( x = xlabel(panel, plot$labels), y = ylabel(panel, plot$labels) )) xlabel <- element_render(theme, "axis.title.x", labels$x, expand_y = TRUE) ylabel <- element_render(theme, "axis.title.y", labels$y, expand_x = TRUE) # helper function return the position of panels in plot_table find_panel <- function(table) { layout <- table$layout panels <- layout[grepl("^panel", layout$name), , drop = FALSE] data.frame( t = min(panels$t), r = max(panels$r), b = max(panels$b), l = min(panels$l) ) } panel_dim <- find_panel(plot_table) xlab_height <- grobHeight(xlabel) plot_table <- gtable_add_rows(plot_table, xlab_height) plot_table <- gtable_add_grob(plot_table, xlabel, name = "xlab", l = panel_dim$l, r = panel_dim$r, t = -1, clip = "off") ylab_width <- grobWidth(ylabel) plot_table <- gtable_add_cols(plot_table, ylab_width, pos = 0) plot_table <- gtable_add_grob(plot_table, ylabel, name = "ylab", l = 1, b = panel_dim$b, t = panel_dim$t, clip = "off") # Legends position <- theme$legend.position if (length(position) == 2) { position <- "manual" } legend_box <- if (position != "none") { build_guides(plot$scales, plot$layers, plot$mapping, position, theme, plot$guides, plot$labels) } else { zeroGrob() } if (is.zero(legend_box)) { position <- "none" } else { # these are a bad hack, since it modifies the contents of viewpoint directly... legend_width <- gtable_width(legend_box) + theme$legend.margin legend_height <- gtable_height(legend_box) + theme$legend.margin # Set the justification of the legend box # First value is xjust, second value is yjust just <- valid.just(theme$legend.justification) xjust <- just[1] yjust <- just[2] if (position == "manual") { xpos <- theme$legend.position[1] ypos <- theme$legend.position[2] # x and y are specified via theme$legend.position (i.e., coords) legend_box <- editGrob(legend_box, vp = viewport(x = xpos, y = ypos, just = c(xjust, yjust), height = legend_height, width = legend_width)) } else { # x and y are adjusted using justification of legend box (i.e., theme$legend.justification) legend_box <- editGrob(legend_box, vp = viewport(x = xjust, y = yjust, just = c(xjust, yjust))) } } panel_dim <- find_panel(plot_table) # for align-to-device, use this: # panel_dim <- summarise(plot_table$layout, t = min(t), r = max(r), b = max(b), l = min(l)) if (position == "left") { plot_table <- gtable_add_cols(plot_table, legend_width, pos = 0) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = panel_dim$t, b = panel_dim$b, l = 1, r = 1, name = "guide-box") } else if (position == "right") { plot_table <- gtable_add_cols(plot_table, legend_width, pos = -1) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = panel_dim$t, b = panel_dim$b, l = -1, r = -1, name = "guide-box") } else if (position == "bottom") { plot_table <- gtable_add_rows(plot_table, legend_height, pos = -1) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = -1, b = -1, l = panel_dim$l, r = panel_dim$r, name = "guide-box") } else if (position == "top") { plot_table <- gtable_add_rows(plot_table, legend_height, pos = 0) plot_table <- gtable_add_grob(plot_table, legend_box, clip = "off", t = 1, b = 1, l = panel_dim$l, r = panel_dim$r, name = "guide-box") } else if (position == "manual") { # should guide box expand whole region or region without margin? plot_table <- gtable_add_grob(plot_table, legend_box, t = panel_dim$t, b = panel_dim$b, l = panel_dim$l, r = panel_dim$r, clip = "off", name = "guide-box") } # Title title <- element_render(theme, "plot.title", plot$labels$title, expand_y = TRUE) title_height <- grobHeight(title) pans <- plot_table$layout[grepl("^panel", plot_table$layout$name), , drop = FALSE] plot_table <- gtable_add_rows(plot_table, title_height, pos = 0) plot_table <- gtable_add_grob(plot_table, title, name = "title", t = 1, b = 1, l = min(pans$l), r = max(pans$r), clip = "off") # Margins plot_table <- gtable_add_rows(plot_table, theme$plot.margin[1], pos = 0) plot_table <- gtable_add_cols(plot_table, theme$plot.margin[2]) plot_table <- gtable_add_rows(plot_table, theme$plot.margin[3]) plot_table <- gtable_add_cols(plot_table, theme$plot.margin[4], pos = 0) if (inherits(theme$plot.background, "element")) { plot_table <- gtable_add_grob(plot_table, element_render(theme, "plot.background"), t = 1, l = 1, b = -1, r = -1, name = "background", z = -Inf) plot_table$layout <- plot_table$layout[c(nrow(plot_table$layout), 1:(nrow(plot_table$layout) - 1)),] plot_table$grobs <- plot_table$grobs[c(nrow(plot_table$layout), 1:(nrow(plot_table$layout) - 1))] } plot_table } #' Generate a ggplot2 plot grob. #' #' @param x ggplot2 object #' @keywords internal #' @export ggplotGrob <- function(x) { ggplot_gtable(ggplot_build(x)) } ggplot2/R/geom-errorbarh.r0000644000175100001440000000436412607210574015160 0ustar hornikusers#' Horizontal error bars #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "errorbarh")} #' #' @seealso \code{\link{geom_errorbar}}: vertical error bars #' @inheritParams geom_point #' @export #' @examples #' df <- data.frame( #' trt = factor(c(1, 1, 2, 2)), #' resp = c(1, 5, 3, 4), #' group = factor(c(1, 2, 1, 2)), #' se = c(0.1, 0.3, 0.3, 0.2) #' ) #' #' # Define the top and bottom of the errorbars #' #' p <- ggplot(df, aes(resp, trt, colour = group)) #' p + geom_point() + #' geom_errorbarh(aes(xmax = resp + se, xmin = resp - se)) #' p + geom_point() + #' geom_errorbarh(aes(xmax = resp + se, xmin = resp - se, height = .2)) geom_errorbarh <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomErrorbarh, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomErrorbarh <- ggproto("GeomErrorbarh", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, height = 0.5, alpha = NA), draw_key = draw_key_path, required_aes = c("x", "xmin", "xmax", "y"), setup_data = function(data, params) { data$height <- data$height %||% params$height %||% (resolution(data$y, FALSE) * 0.9) transform(data, ymin = y - height / 2, ymax = y + height / 2, height = NULL ) }, draw_panel = function(data, panel_scales, coord, height = NULL) { GeomPath$draw_panel(data.frame( x = as.vector(rbind(data$xmax, data$xmax, NA, data$xmax, data$xmin, NA, data$xmin, data$xmin)), y = as.vector(rbind(data$ymin, data$ymax, NA, data$y, data$y, NA, data$ymin, data$ymax)), colour = rep(data$colour, each = 8), alpha = rep(data$alpha, each = 8), size = rep(data$size, each = 8), linetype = rep(data$linetype, each = 8), group = rep(1:(nrow(data)), each = 8), stringsAsFactors = FALSE, row.names = 1:(nrow(data) * 8) ), panel_scales, coord) } ) ggplot2/R/geom-quantile.r0000644000175100001440000000364412607211302015002 0ustar hornikusers#' Add quantile lines from a quantile regression. #' #' This can be used as a continuous analogue of a geom_boxplot. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "quantile")} #' #' @export #' @inheritParams geom_point #' @inheritParams geom_path #' @param method.args List of additional arguments passed on to the modelling #' function defined by \code{method}. #' @param geom,stat Use to override the default connection between #' \code{geom_quantile} and \code{stat_quantile}. #' @examples #' m <- ggplot(mpg, aes(displ, 1 / hwy)) + geom_point() #' m + geom_quantile() #' m + geom_quantile(quantiles = 0.5) #' q10 <- seq(0.05, 0.95, by = 0.05) #' m + geom_quantile(quantiles = q10) #' #' # You can also use rqss to fit smooth quantiles #' m + geom_quantile(method = "rqss") #' # Note that rqss doesn't pick a smoothing constant automatically, so #' # you'll need to tweak lambda yourself #' m + geom_quantile(method = "rqss", lambda = 0.1) #' #' # Set aesthetics to fixed value #' m + geom_quantile(colour = "red", size = 2, alpha = 0.5) geom_quantile <- function(mapping = NULL, data = NULL, stat = "quantile", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomQuantile, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomQuantile <- ggproto("GeomQuantile", GeomPath, default_aes = defaults( aes(weight = 1, colour = "#3366FF", size = 0.5), GeomPath$default_aes ) ) ggplot2/R/geom-polygon.r0000644000175100001440000000644312633015613014655 0ustar hornikusers#' Polygon, a filled path. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "polygon")} #' #' @seealso #' \code{\link{geom_path}} for an unfilled polygon, #' \code{\link{geom_ribbon}} for a polygon anchored on the x-axis #' @export #' @inheritParams geom_point #' @examples #' # When using geom_polygon, you will typically need two data frames: #' # one contains the coordinates of each polygon (positions), and the #' # other the values associated with each polygon (values). An id #' # variable links the two together #' #' ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) #' #' values <- data.frame( #' id = ids, #' value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) #' ) #' #' positions <- data.frame( #' id = rep(ids, each = 4), #' x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, #' 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), #' y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, #' 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) #' ) #' #' # Currently we need to manually merge the two together #' datapoly <- merge(values, positions, by=c("id")) #' #' (p <- ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=value, group=id))) #' #' # Which seems like a lot of work, but then it's easy to add on #' # other features in this coordinate system, e.g.: #' #' stream <- data.frame( #' x = cumsum(runif(50, max = 0.1)), #' y = cumsum(runif(50,max = 0.1)) #' ) #' #' p + geom_line(data = stream, colour="grey30", size = 5) #' #' # And if the positions are in longitude and latitude, you can use #' # coord_map to produce different map projections. geom_polygon <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPolygon, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPolygon <- ggproto("GeomPolygon", Geom, draw_panel = function(data, panel_scales, coord) { n <- nrow(data) if (n == 1) return(zeroGrob()) munched <- coord_munch(coord, data, panel_scales) # Sort by group to make sure that colors, fill, etc. come in same order munched <- munched[order(munched$group), ] # For gpar(), there is one entry per polygon (not one entry per point). # We'll pull the first value from each group, and assume all these values # are the same within each group. first_idx <- !duplicated(munched$group) first_rows <- munched[first_idx, ] ggname("geom_polygon", polygonGrob(munched$x, munched$y, default.units = "native", id = munched$group, gp = gpar( col = alpha(first_rows$colour, first_rows$alpha), fill = alpha(first_rows$fill, first_rows$alpha), lwd = first_rows$size * .pt, lty = first_rows$linetype ) ) ) }, default_aes = aes(colour = "NA", fill = "grey20", size = 0.5, linetype = 1, alpha = NA), handle_na = function(data, params) { data }, required_aes = c("x", "y"), draw_key = draw_key_polygon ) ggplot2/R/margins.R0000644000175100001440000001040612607721542013641 0ustar hornikusers#' Define margins. #' #' This is a convenience function that creates a grid unit object of the #' correct length to use for setting margins. #' #' @export #' @param t,b,r,l Dimensions of each margin. (To remember order, think trouble). #' @param unit Default units of dimensions. Defaults to "pt" so it #' can be most easily scaled with the text. #' @export #' @examples #' margin(4) #' margin(4, 2) #' margin(4, 3, 2, 1) margin <- function(t = 0, r = 0, b = 0, l = 0, unit = "pt") { structure(unit(c(t, r, b, l), unit), class = c("margin", "unit")) } margin_height <- function(grob, margins) { if (is.zero(grob)) return(unit(0, "cm")) grobHeight(grob) + margins[1] + margins[3] } margin_width <- function(grob, margins) { if (is.zero(grob)) return(unit(0, "cm")) grobWidth(grob) + margins[2] + margins[4] } titleGrob <- function(label, x, y, hjust, vjust, angle = 0, gp = gpar(), margin = NULL, expand_x = FALSE, expand_y = FALSE, debug = FALSE) { if (is.null(label)) return(zeroGrob()) if (is.null(margin)) { margin <- margin(0, 0, 0, 0) } angle <- angle %% 360 if (angle == 90) { xp <- 1 - vjust yp <- hjust } else if (angle == 180) { xp <- 1 - hjust yp <- 1 - vjust } else if (angle == 270) { xp <- vjust yp <- 1 - hjust } else { xp <- hjust yp <- vjust } n <- max(length(x), length(y), 1) x <- x %||% unit(rep(xp, n), "npc") y <- y %||% unit(rep(yp, n), "npc") text_grob <- textGrob(label, x, y, hjust = hjust, vjust = vjust, rot = angle, gp = gp) if (expand_x && expand_y) { widths <- unit.c(margin[4], unit(1, "grobwidth", text_grob), margin[2]) heights <- unit.c(margin[1], unit(1, "grobheight", text_grob), margin[3]) vp <- viewport(layout = grid.layout(3, 3, heights = heights, widths = widths), gp = gp) child_vp <- viewport(layout.pos.row = 2, layout.pos.col = 2) } else if (expand_x) { widths <- unit.c(margin[4], unit(1, "grobwidth", text_grob), margin[2]) vp <- viewport(layout = grid.layout(1, 3, widths = widths), gp = gp) child_vp <- viewport(layout.pos.col = 2) heights <- unit(1, "null") } else if (expand_y) { heights <- unit.c(margin[1], unit(1, "grobheight", text_grob), margin[3]) vp <- viewport(layout = grid.layout(3, 1, heights = heights), gp = gp) child_vp <- viewport(layout.pos.row = 2) widths <- unit(1, "null") } else { return(text_grob) } if (debug) { children <- gList( rectGrob(gp = gpar(fill = "cornsilk", col = NA)), pointsGrob(x, y, pch = 20, gp = gpar(col = "gold")), text_grob ) } else { children <- gList(text_grob) } gTree( children = children, vp = vpTree(vp, vpList(child_vp)), widths = widths, heights = heights, cl = "titleGrob" ) } #' @export widthDetails.titleGrob <- function(x) { sum(x$widths) } #' @export heightDetails.titleGrob <- function(x) { sum(x$heights) } # Works like titleGrob, but designed to place one label per viewport. # This means it doesn't have the lengths of labels available, so must use # alternative layout strategy stripGrob <- function(label, hjust, vjust, angle = 0, gp = gpar(), margin = NULL, debug = FALSE) { if (is.null(margin)) { margin <- margin() } text_grob <- textGrob(label, rot = angle, gp = gp) widths <- unit.c(margin[4], unit(1, "grobwidth", text_grob), margin[2]) heights <- unit.c(margin[1], unit(1, "grobheight", text_grob), margin[3]) vp <- viewport( hjust, vjust, just = c(hjust, vjust), width = sum(widths), height = sum(heights), layout = grid.layout(3, 3, heights = heights, widths = widths), name = "top" ) child_vp <- viewport(layout.pos.row = 2, layout.pos.col = 2) if (debug) { children <- gList( rectGrob(gp = gpar(fill = "cornsilk", col = NA)), pointsGrob(unit(hjust, "npc"), unit(vjust, "npc"), pch = 20, gp = gpar(col = "gold")), text_grob ) } else { children <- gList(text_grob) } gTree( children = children, vp = vpTree(vp, vpList(child_vp)), widths = widths, heights = heights, cl = "stripGrob" ) } #' @export widthDetails.stripGrob <- function(x) { sum(x$widths) } #' @export heightDetails.stripGrob <- function(x) { sum(x$heights) } ggplot2/R/grob-dotstack.r0000644000175100001440000000347612560205764015016 0ustar hornikusersdotstackGrob <- function( x = unit(0.5, "npc"), # x pos of the dotstack's origin y = unit(0.5, "npc"), # y pos of the dotstack's origin stackaxis = "y", dotdia = unit(1, "npc"), # Dot diameter in the non-stack axis, should be in npc stackposition = 0, # Position of each dot in the stack, relative to origin stackratio = 1, # Stacking height of dots (.75 means 25% dot overlap) default.units = "npc", name = NULL, gp = gpar(), vp = NULL) { if (!is.unit(x)) x <- unit(x, default.units) if (!is.unit(y)) y <- unit(y, default.units) if (!is.unit(dotdia)) dotdia <- unit(dotdia, default.units) if (attr(dotdia,"unit") != "npc") warning("Unit type of dotdia should be 'npc'") grob(x = x, y = y, stackaxis = stackaxis, dotdia = dotdia, stackposition = stackposition, stackratio = stackratio, name = name, gp = gp, vp = vp, cl = "dotstackGrob") } #' @export makeContext.dotstackGrob <- function(x, recording = TRUE) { # Need absolute coordinates because when using npc coords with circleGrob, # the radius is in the _smaller_ of the two axes. We need the radius # to instead be defined in terms of the non-stack axis. xmm <- convertX(x$x, "mm", valueOnly = TRUE) ymm <- convertY(x$y, "mm", valueOnly = TRUE) if (x$stackaxis == "x") { dotdiamm <- convertY(x$dotdia, "mm", valueOnly = TRUE) xpos <- xmm + dotdiamm * (x$stackposition * x$stackratio + (1 - x$stackratio) / 2) ypos <- ymm } else if (x$stackaxis == "y") { dotdiamm <- convertX(x$dotdia, "mm", valueOnly = TRUE) xpos <- xmm ypos <- ymm + dotdiamm * (x$stackposition * x$stackratio + (1 - x$stackratio) / 2) } circleGrob( x = xpos, y = ypos, r = dotdiamm / 2, default.units = "mm", name = x$name, gp = x$gp, vp = x$vp ) } ggplot2/R/geom-hline.r0000644000175100001440000000225312607211716014263 0ustar hornikusers#' @include stat-.r NULL #' @export #' @rdname geom_abline geom_hline <- function(mapping = NULL, data = NULL, ..., yintercept, na.rm = FALSE, show.legend = NA) { # Act like an annotation if (!missing(yintercept)) { data <- data.frame(yintercept = yintercept) mapping <- aes(yintercept = yintercept) show.legend <- FALSE } layer( data = data, mapping = mapping, stat = StatIdentity, geom = GeomHline, position = PositionIdentity, show.legend = show.legend, inherit.aes = FALSE, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomHline <- ggproto("GeomHline", Geom, draw_panel = function(data, panel_scales, coord) { ranges <- coord$range(panel_scales) data$x <- ranges$x[1] data$xend <- ranges$x[2] data$y <- data$yintercept data$yend <- data$yintercept GeomSegment$draw_panel(unique(data), panel_scales, coord) }, default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), required_aes = "yintercept", draw_key = draw_key_path ) ggplot2/R/geom-pointrange.r0000644000175100001440000000232412607211152015323 0ustar hornikusers#' @export #' @rdname geom_linerange geom_pointrange <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., fatten = 4, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPointrange, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fatten = fatten, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPointrange <- ggproto("GeomPointrange", Geom, default_aes = aes(colour = "black", size = 0.5, linetype = 1, shape = 19, fill = NA, alpha = NA, stroke = 1), draw_key = draw_key_pointrange, required_aes = c("x", "y", "ymin", "ymax"), draw_panel = function(data, panel_scales, coord, fatten = 4) { if (is.null(data$y)) return(GeomLinerange$draw_panel(data, panel_scales, coord)) ggname("geom_pointrange", gTree(children = gList( GeomLinerange$draw_panel(data, panel_scales, coord), GeomPoint$draw_panel(transform(data, size = size * fatten), panel_scales, coord) )) ) } ) ggplot2/R/position-fill.r0000644000175100001440000000110012606756762015033 0ustar hornikusers#' @export #' @rdname position_stack position_fill <- function() { PositionFill } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export PositionFill <- ggproto("PositionFill", Position, required_aes = c("x", "ymax"), setup_data = function(self, data, params) { if (!is.null(data$ymin) && !all(data$ymin == 0)) warning("Filling not well defined when ymin != 0", call. = FALSE) ggproto_parent(Position, self)$setup_data(data) }, compute_panel = function(data, params, scales) { collide(data, NULL, "position_fill", pos_fill) } ) ggplot2/R/quick-plot.r0000644000175100001440000001243212556413667014343 0ustar hornikusers#' Quick plot #' #' \code{qplot} is the basic plotting function in the ggplot2 package, #' designed to be familiar if you're used to base \code{\link{plot}()}. #' It's a convenient wrapper for creating a number of different types of plots #' using a consistent calling scheme. #' #' @param x,y,... Aesthetics passed into each layer #' @param data Data frame to use (optional). If not specified, will create #' one, extracting vectors from the current environment. #' @param facets faceting formula to use. Picks \code{\link{facet_wrap}} or #' \code{\link{facet_grid}} depending on whether the formula is one- #' or two-sided #' @param margins See \code{facet_grid}: display marginal facets? #' @param geom Character vector specifying geom(s) to draw. Defaults to #' "point" if x and y are specified, and "histogram" if only x is specified. #' @param stat,position DEPRECATED. #' @param xlim,ylim X and y axis limits #' @param log Which variables to log transform ("x", "y", or "xy") #' @param main,xlab,ylab Character vector (or expression) giving plot title, #' x axis label, and y axis label respectively. #' @param asp The y/x aspect ratio #' @export #' @examples #' # Use data from data.frame #' qplot(mpg, wt, data = mtcars) #' qplot(mpg, wt, data = mtcars, colour = cyl) #' qplot(mpg, wt, data = mtcars, size = cyl) #' qplot(mpg, wt, data = mtcars, facets = vs ~ am) #' #' \donttest{ #' qplot(1:10, rnorm(10), colour = runif(10)) #' qplot(1:10, letters[1:10]) #' mod <- lm(mpg ~ wt, data=mtcars) #' qplot(resid(mod), fitted(mod)) #' #' f <- function() { #' a <- 1:10 #' b <- a ^ 2 #' qplot(a, b) #' } #' f() #' #' # To set aesthetics, wrap in I() #' qplot(mpg, wt, data = mtcars, colour = I("red")) #' #' # qplot will attempt to guess what geom you want depending on the input #' # both x and y supplied = scatterplot #' qplot(mpg, wt, data = mtcars) #' # just x supplied = histogram #' qplot(mpg, data = mtcars) #' # just y supplied = scatterplot, with x = seq_along(y) #' qplot(y = mpg, data = mtcars) #' #' # Use different geoms #' qplot(mpg, wt, data = mtcars, geom = "path") #' qplot(factor(cyl), wt, data = mtcars, geom = c("boxplot", "jitter")) #' qplot(mpg, data = mtcars, geom = "dotplot") #' } qplot <- function(x, y = NULL, ..., data, facets = NULL, margins=FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), asp = NA, stat = NULL, position = NULL) { if (!missing(stat)) warning("`stat` is deprecated", call. = FALSE) if (!missing(position)) warning("`position` is deprecated", call. = FALSE) if (!is.character(geom)) stop("`geom` must be a character vector", call. = FALSE) argnames <- names(as.list(match.call(expand.dots = FALSE)[-1])) arguments <- as.list(match.call()[-1]) env <- parent.frame() aesthetics <- compact(arguments[.all_aesthetics]) aesthetics <- aesthetics[!is.constant(aesthetics)] aes_names <- names(aesthetics) aesthetics <- rename_aes(aesthetics) class(aesthetics) <- "uneval" if (missing(data)) { # If data not explicitly specified, will be pulled from workspace data <- data.frame() # Faceting variables must be in a data frame, so pull those out facetvars <- all.vars(facets) facetvars <- facetvars[facetvars != "."] names(facetvars) <- facetvars facetsdf <- as.data.frame(mget(facetvars, envir = env)) if (nrow(facetsdf)) data <- facetsdf } # Work out plot data, and modify aesthetics, if necessary if ("auto" %in% geom) { if ("sample" %in% aes_names) { geom[geom == "auto"] <- "qq" } else if (missing(y)) { x <- eval(aesthetics$x, data, env) if (is.discrete(x)) { geom[geom == "auto"] <- "bar" } else { geom[geom == "auto"] <- "histogram" } if (missing(ylab)) ylab <- "count" } else { if (missing(x)) { aesthetics$x <- bquote(seq_along(.(y)), aesthetics) } geom[geom == "auto"] <- "point" } } p <- ggplot(data, aesthetics, environment = env) if (is.null(facets)) { p <- p + facet_null() } else if (is.formula(facets) && length(facets) == 2) { p <- p + facet_wrap(facets) } else { p <- p + facet_grid(facets = deparse(facets), margins = margins) } if (!is.null(main)) p <- p + ggtitle(main) # Add geoms/statistics for (g in geom) { # Arguments are unevaluated because some are aesthetics. Need to evaluate # params - can't do in correct env because that's lost (no lazyeval) # so do the best we can by evaluating in parent frame. params <- arguments[setdiff(names(arguments), c(aes_names, argnames))] params <- lapply(params, eval, parent.frame()) p <- p + do.call(paste0("geom_", g), params) } logv <- function(var) var %in% strsplit(log, "")[[1]] if (logv("x")) p <- p + scale_x_log10() if (logv("y")) p <- p + scale_y_log10() if (!is.na(asp)) p <- p + theme(aspect.ratio = asp) if (!missing(xlab)) p <- p + xlab(xlab) if (!missing(ylab)) p <- p + ylab(ylab) if (!missing(xlim)) p <- p + xlim(xlim) if (!missing(ylim)) p <- p + ylim(ylim) p } #' @export #' @rdname qplot quickplot <- qplot is.constant <- function(x) { is_I_call <- function(x) is.call(x) && identical(x[[1]], quote(I)) vapply(x, is_I_call, logical(1)) } ggplot2/R/theme-defaults.r0000644000175100001440000002457612610024071015150 0ustar hornikusers#' ggplot2 themes #' #' Themes set the general aspect of the plot such as the colour of the #' background, gridlines, the size and colour of fonts. #' #' @param base_size base font size #' @param base_family base font family #' #' @details \describe{ #' #' \item{\code{theme_gray}}{ #' The signature ggplot2 theme with a grey background and white gridlines, #' designed to put the data forward yet make comparisons easy.} #' #' \item{\code{theme_bw}}{ #' The classic dark-on-light ggplot2 theme. May work better for presentations #' displayed with a projector.} #' #' \item{\code{theme_linedraw}}{ #' A theme with only black lines of various widths on white backgrounds, #' reminiscent of a line drawings. Serves a purpose similar to \code{theme_bw}. #' Note that this theme has some very thin lines (<< 1 pt) which some journals #' may refuse.} #' #' \item{\code{theme_light}}{ #' A theme similar to \code{theme_linedraw} but with light grey lines and axes, #' to direct more attention towards the data.} #' #' \item{\code{theme_dark}}{ #' The dark cousin of \code{theme_light}, with similar line sizes but a dark background. Useful to make thin coloured lines pop out.} #' #' \item{\code{theme_minimal}}{ #' A minimalistic theme with no background annotations.} #' #' \item{\code{theme_classic}}{ #' A classic-looking theme, with x and y axis lines and no gridlines.} #' #' \item{\code{theme_void}}{ #' A completely empty theme.} #' #' } #' #' @examples #' p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg, #' colour=factor(gear))) + facet_wrap(~am) #' #' p #' p + theme_gray() #' p + theme_bw() #' p + theme_linedraw() #' p + theme_light() #' p + theme_minimal() #' p + theme_classic() #' p + theme_void() #' #' @name ggtheme NULL #' @export #' @rdname ggtheme theme_grey <- function(base_size = 11, base_family = "") { half_line <- base_size / 2 theme( # Elements in this first block aren't used directly, but are inherited # by others line = element_line(colour = "black", size = 0.5, linetype = 1, lineend = "butt"), rect = element_rect(fill = "white", colour = "black", size = 0.5, linetype = 1), text = element_text( family = base_family, face = "plain", colour = "black", size = base_size, lineheight = 0.9, hjust = 0.5, vjust = 0.5, angle = 0, margin = margin(), debug = FALSE ), axis.line = element_blank(), axis.text = element_text(size = rel(0.8), colour = "grey30"), axis.text.x = element_text(margin = margin(t = 0.8 * half_line / 2), vjust = 1), axis.text.y = element_text(margin = margin(r = 0.8 * half_line / 2), hjust = 1), axis.ticks = element_line(colour = "grey20"), axis.ticks.length = unit(half_line / 2, "pt"), axis.title.x = element_text( margin = margin(t = 0.8 * half_line, b = 0.8 * half_line / 2) ), axis.title.y = element_text( angle = 90, margin = margin(r = 0.8 * half_line, l = 0.8 * half_line / 2), ), legend.background = element_rect(colour = NA), legend.margin = unit(0.2, "cm"), legend.key = element_rect(fill = "grey95", colour = "white"), legend.key.size = unit(1.2, "lines"), legend.key.height = NULL, legend.key.width = NULL, legend.text = element_text(size = rel(0.8)), legend.text.align = NULL, legend.title = element_text(hjust = 0), legend.title.align = NULL, legend.position = "right", legend.direction = NULL, legend.justification = "center", legend.box = NULL, panel.background = element_rect(fill = "grey92", colour = NA), panel.border = element_blank(), panel.grid.major = element_line(colour = "white"), panel.grid.minor = element_line(colour = "white", size = 0.25), panel.margin = unit(half_line, "pt"), panel.margin.x = NULL, panel.margin.y = NULL, panel.ontop = FALSE, strip.background = element_rect(fill = "grey85", colour = NA), strip.text = element_text(colour = "grey10", size = rel(0.8)), strip.text.x = element_text(margin = margin(t = half_line, b = half_line)), strip.text.y = element_text(angle = -90, margin = margin(l = half_line, r = half_line)), strip.switch.pad.grid = unit(0.1, "cm"), strip.switch.pad.wrap = unit(0.1, "cm"), plot.background = element_rect(colour = "white"), plot.title = element_text( size = rel(1.2), margin = margin(b = half_line * 1.2) ), plot.margin = margin(half_line, half_line, half_line, half_line), complete = TRUE ) } #' @export #' @rdname ggtheme theme_gray <- theme_grey #' @export #' @rdname ggtheme theme_bw <- function(base_size = 12, base_family = "") { # Starts with theme_grey and then modify some parts theme_grey(base_size = base_size, base_family = base_family) %+replace% theme( axis.text = element_text(size = rel(0.8)), axis.ticks = element_line(colour = "black"), legend.key = element_rect(colour = "grey80"), panel.background = element_rect(fill = "white", colour = NA), panel.border = element_rect(fill = NA, colour = "grey50"), panel.grid.major = element_line(colour = "grey90", size = 0.2), panel.grid.minor = element_line(colour = "grey98", size = 0.5), strip.background = element_rect(fill = "grey80", colour = "grey50", size = 0.2) ) } #' @export #' @rdname ggtheme theme_linedraw <- function(base_size = 12, base_family = "") { half_line <- base_size / 2 # Starts with theme_grey and then modify some parts theme_grey(base_size = base_size, base_family = base_family) %+replace% theme( axis.text = element_text(colour = "black", size = rel(0.8)), axis.ticks = element_line(colour = "black", size = 0.25), legend.key = element_rect(colour = "black", size = 0.25), panel.background = element_rect(fill = "white", colour = NA), panel.border = element_rect(fill = NA, colour = "black", size = 0.5), panel.grid.major = element_line(colour = "black", size = 0.05), panel.grid.minor = element_line(colour = "black", size = 0.01), strip.background = element_rect(fill = "black", colour = NA), strip.text.x = element_text( colour = "white", margin = margin(t = half_line, b = half_line) ), strip.text.y = element_text( colour = "white", angle = 90, margin = margin(l = half_line, r = half_line) ) ) } #' @export #' @rdname ggtheme theme_light <- function(base_size = 12, base_family = "") { half_line <- base_size / 2 # Starts with theme_grey and then modify some parts theme_grey(base_size = base_size, base_family = base_family) %+replace% theme( axis.ticks = element_line(colour = "grey70", size = 0.25), legend.key = element_rect(fill = "white", colour = "grey50", size = 0.25), panel.background = element_rect(fill = "white", colour = NA), panel.border = element_rect(fill = NA, colour = "grey70", size = 0.5), panel.grid.major = element_line(colour = "grey85", size = 0.25), panel.grid.minor = element_line(colour = "grey93", size = 0.125), strip.background = element_rect(fill = "grey70", colour = NA), strip.text.x = element_text( colour = "white", margin = margin(t = half_line, b = half_line) ), strip.text.y = element_text( colour = "white", angle = -90, margin = margin(l = half_line, r = half_line) ) ) } #' @export #' @rdname ggtheme theme_minimal <- function(base_size = 12, base_family = "") { # Starts with theme_bw and then modify some parts theme_bw(base_size = base_size, base_family = base_family) %+replace% theme( legend.background = element_blank(), legend.key = element_blank(), panel.background = element_blank(), panel.border = element_blank(), strip.background = element_blank(), plot.background = element_blank(), axis.ticks = element_blank(), axis.ticks.length = unit(0, "lines") ) } #' @export #' @rdname ggtheme theme_classic <- function(base_size = 12, base_family = ""){ theme_bw(base_size = base_size, base_family = base_family) %+replace% theme( panel.border = element_blank(), axis.line = element_line(colour = "black"), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), strip.background = element_rect(colour = "black", size = 0.5), legend.key = element_blank() ) } #' @export #' @rdname ggtheme theme_dark <- function(base_size = 12, base_family = "") { half_line <- base_size / 2 # Starts with theme_grey and then modify some parts theme_grey(base_size = base_size, base_family = base_family) %+replace% theme( axis.ticks = element_line(colour = "grey40", size = 0.25), legend.key = element_rect(fill = "grey50", colour = "grey40", size = 0.25), panel.background = element_rect(fill = "grey50", colour = NA), panel.grid.major = element_line(colour = "grey40", size = 0.25), panel.grid.minor = element_line(colour = "grey45", size = 0.125), strip.background = element_rect(fill = "grey20", colour = NA), strip.text.x = element_text( colour = "white", margin = margin(t = half_line, b = half_line) ), strip.text.y = element_text( colour = "white", angle = -90, margin = margin(l = half_line, r = half_line) ) ) } #' @export #' @rdname ggtheme theme_void <- function(base_size = 12, base_family = "") { theme( # Use only inherited elements and make everything blank line = element_blank(), rect = element_blank(), text = element_blank(), plot.margin = unit(c(0, 0, 0, 0), "lines"), complete = TRUE ) } ggplot2/R/facet-labels.r0000644000175100001440000004720712611724324014570 0ustar hornikusers#' Labeller functions #' #' Labeller functions are in charge of formatting the strip labels of #' facet grids and wraps. Most of them accept a \code{multi_line} #' argument to control whether multiple factors (defined in formulae #' such as \code{~first + second}) should be displayed on a single #' line separated with commas, or each on their own line. #' #' \code{label_value()} only displays the value of a factor while #' \code{label_both()} displays both the variable name and the factor #' value. \code{label_context()} is context-dependent and uses #' \code{label_value()} for single factor facetting and #' \code{label_both()} when multiple factors are #' involved. \code{label_wrap_gen()} uses \code{\link[base]{strwrap}()} #' for line wrapping. #' #' \code{label_parsed()} interprets the labels as plotmath #' expressions. \code{\link{label_bquote}()} offers a more flexible #' way of constructing plotmath expressions. See examples and #' \code{\link{bquote}()} for details on the syntax of the #' argument. #' #' @section Writing New Labeller Functions: #' #' Note that an easy way to write a labeller function is to #' transform a function operating on character vectors with #' \code{\link{as_labeller}()}. #' #' A labeller function accepts a data frame of labels (character #' vectors) containing one column for each factor. Multiple factors #' occur with formula of the type \code{~first + second}. #' #' The return value must be a rectangular list where each 'row' #' characterises a single facet. The list elements can be either #' character vectors or lists of plotmath expressions. When multiple #' elements are returned, they get displayed on their own new lines #' (i.e., each facet gets a multi-line strip of labels). #' #' To illustrate, let's say your labeller returns a list of two #' character vectors of length 3. This is a rectangular list because #' all elements have the same length. The first facet will get the #' first elements of each vector and display each of them on their #' own line. Then the second facet gets the second elements of each #' vector, and so on. #' #' If it's useful to your labeller, you can retrieve the \code{type} #' attribute of the incoming data frame of labels. The value of this #' attribute reflects the kind of strips your labeller is dealing #' with: \code{"cols"} for columns and \code{"rows"} for rows. Note #' that \code{\link{facet_wrap}()} has columns by default and rows #' when the strips are switched with the \code{switch} option. The #' \code{facet} attribute also provides metadata on the labels. It #' takes the values \code{"grid"} or \code{"wrap"}. #' #' For compatibility with \code{\link{labeller}()}, each labeller #' function must have the \code{labeller} S3 class. #' #' @param labels Data frame of labels. Usually contains only one #' element, but facetting over multiple factors entails multiple #' label variables. #' @param multi_line Whether to display the labels of multiple factors #' on separate lines. #' @param sep String separating variables and values. #' @param width Maximum number of characters before wrapping the strip. #' @family facet #' @seealso \code{\link{labeller}()}, \code{\link{as_labeller}()}, #' \code{\link{label_bquote}()} #' @name labellers #' @examples #' mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "gamma")) #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' #' # Displaying only the values #' p + facet_grid(. ~ cyl) #' p + facet_grid(. ~ cyl, labeller = label_value) #' #' \donttest{ #' # Displaying both the values and the variables #' p + facet_grid(. ~ cyl, labeller = label_both) #' #' # Displaying only the values or both the values and variables #' # depending on whether multiple factors are facetted over #' p + facet_grid(am ~ vs+cyl, labeller = label_context) #' #' # Interpreting the labels as plotmath expressions #' p + facet_grid(. ~ cyl2) #' p + facet_grid(. ~ cyl2, labeller = label_parsed) #' p + facet_wrap(~vs + cyl2, labeller = label_parsed) #' } NULL collapse_labels_lines <- function(labels) { out <- do.call("Map", c(list(paste, sep = ", "), labels)) list(unname(unlist(out))) } #' @rdname labellers #' @export label_value <- function(labels, multi_line = TRUE) { labels <- lapply(labels, as.character) if (multi_line) { labels } else { collapse_labels_lines(labels) } } # Should ideally not have the 'function' class here, but this is # currently needed for Roxygen class(label_value) <- c("function", "labeller") # Helper for label_both label_variable <- function(labels, multi_line = TRUE) { if (multi_line) { row <- as.list(names(labels)) } else { row <- list(paste(names(labels), collapse = ", ")) } lapply(row, rep, nrow(labels) %||% length(labels[[1]])) } #' @rdname labellers #' @export label_both <- function(labels, multi_line = TRUE, sep = ": ") { value <- label_value(labels, multi_line = multi_line) variable <- label_variable(labels, multi_line = multi_line) if (multi_line) { out <- vector("list", length(value)) for (i in seq_along(out)) { out[[i]] <- paste(variable[[i]], value[[i]], sep = sep) } } else { value <- do.call("paste", c(value, sep = ", ")) variable <- do.call("paste", c(variable, sep = ", ")) out <- Map(paste, variable, value, sep = sep) out <- list(unname(unlist(out))) } out } class(label_both) <- c("function", "labeller") #' @rdname labellers #' @export label_context <- function(labels, multi_line = TRUE, sep = ": ") { if (length(labels) == 1) { label_value(labels, multi_line) } else { label_both(labels, multi_line) } } class(label_context) <- c("function", "labeller") #' @rdname labellers #' @export label_parsed <- function(labels, multi_line = TRUE) { labels <- label_value(labels, multi_line = multi_line) if (multi_line) { # Using unname() and c() to return a cleaner and easily testable # object structure lapply(unname(labels), lapply, function(values) { c(parse(text = as.character(values))) }) } else { lapply(labels, function(values) { values <- paste0("list(", values, ")") lapply(values, function(expr) c(parse(text = expr))) }) } } class(label_parsed) <- c("function", "labeller") find_names <- function(expr) { if (is.call(expr)) { unlist(lapply(expr[-1], find_names)) } else if (is.name(expr)) { as.character(expr) } } #' Backquoted labeller #' #' \code{\link{label_bquote}()} offers a flexible way of labelling #' facet rows or columns with plotmath expressions. Backquoted #' variables will be replaced with their value in the facet. #' @param rows Backquoted labelling expression for rows. #' @param cols Backquoted labelling expression for columns. #' @param default Default labeller function for the rows or the #' columns when no plotmath expression is provided. #' @seealso \link{labellers}, \code{\link{labeller}()}, #' @export #' @examples #' # The variables mentioned in the plotmath expression must be #' # backquoted and referred to by their names. #' p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() #' p + facet_grid(vs ~ ., labeller = label_bquote(alpha ^ .(vs))) #' p + facet_grid(. ~ vs, labeller = label_bquote(cols = .(vs) ^ .(vs))) #' p + facet_grid(. ~ vs + am, labeller = label_bquote(cols = .(am) ^ .(vs))) label_bquote <- function(rows = NULL, cols = NULL, default = label_value) { cols_quoted <- substitute(cols) rows_quoted <- substitute(rows) has_warned <- FALSE fun <- function(labels) { quoted <- resolve_labeller(rows_quoted, cols_quoted, labels) if (is.null(quoted)) { return(label_value(labels)) } evaluate <- function(...) { params <- list(...) # Mapping `x` to the first variable for backward-compatibility, # but only if there is no facetted variable also named `x` if ("x" %in% find_names(quoted) && !"x" %in% names(params)) { if (!has_warned) { warning("Referring to `x` is deprecated, use variable name instead", call. = FALSE) # The function is called for each facet so this avoids # multiple warnings has_warned <<- TRUE } params$x <- params[[1]] } eval(substitute(bquote(expr, params), list(expr = quoted))) } list(do.call("Map", c(list(f = evaluate), labels))) } structure(fun, class = "labeller") } globalVariables(c("x", ".")) #' @rdname labellers #' @export label_wrap_gen <- function(width = 25, multi_line = TRUE) { fun <- function(labels) { labels <- label_value(labels, multi_line = multi_line) lapply(labels, function(x) { x <- strwrap(x, width = width, simplify = FALSE) vapply(x, paste, character(1), collapse = "\n") }) } structure(fun, class = "labeller") } is_labeller <- function(x) inherits(x, "labeller") resolve_labeller <- function(rows, cols, labels) { if (is.null(cols) && is.null(rows)) { stop("Supply one of rows or cols", call. = FALSE) } if (attr(labels, "facet") == "wrap") { # Return either rows or cols for facet_wrap() if (!is.null(cols) && !is.null(rows)) { stop("Cannot supply both rows and cols to facet_wrap()", call. = FALSE) } cols %||% rows } else { if (attr(labels, "type") == "rows") { rows } else { cols } } } #' Coerce to labeller function #' #' This transforms objects to labeller functions. Used internally by #' \code{\link{labeller}()}. #' @param x Object to coerce to a labeller function. If a named #' character vector, it is used as a lookup table before being #' passed on to \code{default}. If a non-labeller function, it is #' assumed it takes and returns character vectors and is applied to #' the labels. If a labeller, it is simply applied to the labels. #' @param multi_line Whether to display the labels of multiple factors #' on separate lines. This is passed to the labeller function. #' @param default Default labeller to process the labels produced by #' lookup tables or modified by non-labeller functions. #' @seealso \code{\link{labeller}()}, \link{labellers} #' @export #' @examples #' p <- ggplot(mtcars, aes(disp, drat)) + geom_point() #' p + facet_wrap(~am) #' #' # Rename labels on the fly with a lookup character vector #' to_string <- as_labeller(c(`0` = "Zero", `1` = "One")) #' p + facet_wrap(~am, labeller = to_string) #' #' # Quickly transform a function operating on character vectors to a #' # labeller function: #' appender <- function(string, suffix = "-foo") paste0(string, suffix) #' p + facet_wrap(~am, labeller = as_labeller(appender)) #' #' # If you have more than one facetting variable, be sure to dispatch #' # your labeller to the right variable with labeller() #' p + facet_grid(cyl ~ am, labeller = labeller(am = to_string)) as_labeller <- function(x, default = label_value, multi_line = TRUE) { force(x) fun <- function(labels) { labels <- lapply(labels, as.character) # Dispatch multi_line argument to the labeller function instead of # supplying it to the labeller call because some labellers do not # support it. default <- dispatch_args(default, multi_line = multi_line) if (is_labeller(x)) { x <- dispatch_args(x, multi_line = multi_line) x(labels) } else if (is.function(x)) { default(lapply(labels, x)) } else if (is.character(x)) { default(lapply(labels, function(label) x[label])) } else { default(labels) } } structure(fun, class = "labeller") } #' Generic labeller function for facets #' #' This function makes it easy to assign different labellers to #' different factors. The labeller can be a function or it can be a #' named character vectors that will serve as a lookup table. #' #' In case of functions, if the labeller has class \code{labeller}, it #' is directly applied on the data frame of labels. Otherwise, it is #' applied to the columns of the data frame of labels. The data frame #' is then processed with the function specified in the #' \code{.default} argument. This is intended to be used with #' functions taking a character vector such as #' \code{\link[Hmisc]{capitalize}}. #' #' @param ... Named arguments of the form \code{variable = #' labeller}. Each labeller is passed to \code{\link{as_labeller}()} #' and can be a lookup table, a function taking and returning #' character vectors, or simply a labeller function. #' @param .rows,.cols Labeller for a whole margin (either the rows or #' the columns). It is passed to \code{\link{as_labeller}()}. When a #' margin-wide labeller is set, make sure you don't mention in #' \code{...} any variable belonging to the margin. #' @param keep.as.numeric Deprecated. All supplied labellers and #' on-labeller functions should be able to work with character #' labels. #' @param .multi_line Whether to display the labels of multiple #' factors on separate lines. This is passed to the labeller #' function. #' @param .default Default labeller for variables not specified. Also #' used with lookup tables or non-labeller functions. #' @family facet labeller #' @seealso \code{\link{as_labeller}()}, \link{labellers} #' @return A labeller function to supply to \code{\link{facet_grid}} #' for the argument \code{labeller}. #' @export #' @examples #' \donttest{ #' p1 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() #' #' # You can assign different labellers to variables: #' p1 + facet_grid(vs + am ~ gear, #' labeller = labeller(vs = label_both, am = label_value)) #' #' # Or whole margins: #' p1 + facet_grid(vs + am ~ gear, #' labeller = labeller(.rows = label_both, .cols = label_value)) #' #' # You can supply functions operating on strings: #' capitalize <- function(string) { #' substr(string, 1, 1) <- toupper(substr(string, 1, 1)) #' string #' } #' p2 <- ggplot(msleep, aes(x = sleep_total, y = awake)) + geom_point() #' p2 + facet_grid(vore ~ conservation, labeller = labeller(vore = capitalize)) #' #' # Or use character vectors as lookup tables: #' conservation_status <- c( #' cd = "Conservation Dependent", #' en = "Endangered", #' lc = "Least concern", #' nt = "Near Threatened", #' vu = "Vulnerable", #' domesticated = "Domesticated" #' ) #' ## Source: http://en.wikipedia.org/wiki/Wikipedia:Conservation_status #' #' p2 + facet_grid(vore ~ conservation, labeller = labeller( #' .default = capitalize, #' conservation = conservation_status #' )) #' #' # In the following example, we rename the levels to the long form, #' # then apply a wrap labeller to the columns to prevent cropped text #' msleep$conservation2 <- plyr::revalue(msleep$conservation, #' conservation_status) #' #' p2 %+% msleep + facet_grid(vore ~ conservation2) #' p2 %+% msleep + #' facet_grid(vore ~ conservation2, #' labeller = labeller(conservation2 = label_wrap_gen(10)) #' ) #' #' # labeller() is especially useful to act as a global labeller. You #' # can set it up once and use it on a range of different plots with #' # different facet specifications. #' #' global_labeller <- labeller( #' vore = capitalize, #' conservation = conservation_status, #' conservation2 = label_wrap_gen(10), #' .default = label_both #' ) #' #' p2 + facet_grid(vore ~ conservation, labeller = global_labeller) #' p2 + facet_wrap(~vore, labeller = global_labeller) #' p2 %+% msleep + facet_wrap(~conservation2, labeller = global_labeller) #' } labeller <- function(..., .rows = NULL, .cols = NULL, keep.as.numeric = NULL, .multi_line = TRUE, .default = label_value) { if (!is.null(keep.as.numeric)) { .Deprecated(old = "keep.as.numeric") } dots <- list(...) .default <- as_labeller(.default) function(labels) { if (!is.null(.rows) || !is.null(.cols)) { margin_labeller <- resolve_labeller(.rows, .cols, labels) } else { margin_labeller <- NULL } if (is.null(margin_labeller)) { labellers <- lapply(dots, as_labeller) } else { margin_labeller <- as_labeller(margin_labeller, default = .default, multi_line = .multi_line) # Check that variable-specific labellers do not overlap with # margin-wide labeller if (any(names(dots) %in% names(labels))) { stop("Conflict between .", attr(labels, "type"), " and ", paste(names(dots), collapse = ", "), call. = FALSE) } } # Apply relevant labeller if (is.null(margin_labeller)) { # Apply named labeller one by one out <- lapply(names(labels), function(label) { if (label %in% names(labellers)) { labellers[[label]](labels[label])[[1]] } else { .default(labels[label])[[1]] } }) names(out) <- names(labels) if (.multi_line) { out } else { collapse_labels_lines(out) } } else { margin_labeller(labels) } } } build_strip <- function(panel, label_df, labeller, theme, side = "right", switch = NULL) { side <- match.arg(side, c("top", "left", "bottom", "right")) horizontal <- side %in% c("top", "bottom") labeller <- match.fun(labeller) # No labelling data, so return empty row/col if (empty(label_df)) { if (horizontal) { widths <- unit(rep(0, max(panel$layout$COL)), "null") return(gtable_row_spacer(widths)) } else { heights <- unit(rep(0, max(panel$layout$ROW)), "null") return(gtable_col_spacer(heights)) } } # Create matrix of labels labels <- lapply(labeller(label_df), cbind) labels <- do.call("cbind", labels) # Display the mirror of the y strip labels if switched if (!is.null(switch) && switch %in% c("both", "y")) { theme$strip.text.y$angle <- adjust_angle(theme$strip.text.y$angle) } # Render as grobs grobs <- apply(labels, c(1, 2), ggstrip, theme = theme, horizontal = horizontal) # Create layout name <- paste("strip", side, sep = "-") if (horizontal) { # Each row is as high as the highest and as a wide as the panel row_height <- function(row) max(plyr::laply(row, height_cm)) grobs <- t(grobs) heights <- unit(apply(grobs, 1, row_height), "cm") widths <- unit(rep(1, ncol(grobs)), "null") } else { # Each row is wide as the widest and as high as the panel col_width <- function(col) max(plyr::laply(col, width_cm)) widths <- unit(apply(grobs, 2, col_width), "cm") heights <- unit(rep(1, nrow(grobs)), "null") } gtable_matrix(name, grobs, heights = heights, widths = widths) } # Grob for strip labels ggstrip <- function(text, horizontal = TRUE, theme) { text_theme <- if (horizontal) "strip.text.x" else "strip.text.y" if (is.list(text)) text <- text[[1]] element <- calc_element(text_theme, theme) if (inherits(element, "element_blank")) return(zeroGrob()) gp <- gpar(fontsize = element$size, col = element$colour, fontfamily = element$family, fontface = element$face, lineheight = element$lineheight) label <- stripGrob(text, element$hjust, element$vjust, element$angle, margin = element$margin, gp = gp, debug = element$debug) ggname("strip", absoluteGrob( gList( element_render(theme, "strip.background"), label ), width = grobWidth(label), height = grobHeight(label) )) } # Helper to adjust angle of switched strips adjust_angle <- function(angle) { if (is.null(angle)) { -90 } else if ((angle + 180) > 360) { angle - 180 } else { angle + 180 } } # Check for old school labeller check_labeller <- function(labeller) { labeller <- match.fun(labeller) is_deprecated <- all(c("variable", "value") %in% names(formals(labeller))) if (is_deprecated) { old_labeller <- labeller labeller <- function(labels) { Map(old_labeller, names(labels), labels) } warning("The labeller API has been updated. Labellers taking `variable`", "and `value` arguments are now deprecated. See labellers documentation.", call. = FALSE) } labeller } ggplot2/R/geom-rect.r0000644000175100001440000000417212620174726014127 0ustar hornikusers#' @export #' @rdname geom_tile geom_rect <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomRect, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomRect <- ggproto("GeomRect", Geom, default_aes = aes(colour = NA, fill = "grey35", size = 0.5, linetype = 1, alpha = NA), required_aes = c("xmin", "xmax", "ymin", "ymax"), draw_panel = function(self, data, panel_scales, coord) { if (!coord$is_linear()) { aesthetics <- setdiff( names(data), c("x", "y", "xmin", "xmax", "ymin", "ymax") ) polys <- plyr::alply(data, 1, function(row) { poly <- rect_to_poly(row$xmin, row$xmax, row$ymin, row$ymax) aes <- as.data.frame(row[aesthetics], stringsAsFactors = FALSE)[rep(1,5), ] GeomPolygon$draw_panel(cbind(poly, aes), panel_scales, coord) }) ggname("bar", do.call("grobTree", polys)) } else { coords <- coord$transform(data, panel_scales) ggname("geom_rect", rectGrob( coords$xmin, coords$ymax, width = coords$xmax - coords$xmin, height = coords$ymax - coords$ymin, default.units = "native", just = c("left", "top"), gp = gpar( col = alpha(coords$colour, coords$alpha), fill = alpha(coords$fill, coords$alpha), lwd = coords$size * .pt, lty = coords$linetype, lineend = "butt" ) )) } }, draw_key = draw_key_polygon ) # Convert rectangle to polygon # Useful for non-Cartesian coordinate systems where it's easy to work purely in terms of locations, rather than locations and dimensions. # # @keyword internal rect_to_poly <- function(xmin, xmax, ymin, ymax) { data.frame( y = c(ymax, ymax, ymin, ymin, ymax), x = c(xmin, xmax, xmax, xmin, xmin) ) } ggplot2/R/geom-crossbar.r0000644000175100001440000000540712607210321014775 0ustar hornikusers#' @export #' @rdname geom_linerange geom_crossbar <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", fatten = 2.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomCrossbar, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( fatten = fatten, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomCrossbar <- ggproto("GeomCrossbar", Geom, setup_data = function(data, params) { GeomErrorbar$setup_data(data, params) }, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA), required_aes = c("x", "y", "ymin", "ymax"), draw_key = draw_key_crossbar, draw_panel = function(data, panel_scales, coord, fatten = 2.5, width = NULL) { middle <- transform(data, x = xmin, xend = xmax, yend = y, size = size * fatten, alpha = NA) has_notch <- !is.null(data$ynotchlower) && !is.null(data$ynotchupper) && !is.na(data$ynotchlower) && !is.na(data$ynotchupper) if (has_notch) { if (data$ynotchlower < data$ymin || data$ynotchupper > data$ymax) message("notch went outside hinges. Try setting notch=FALSE.") notchindent <- (1 - data$notchwidth) * (data$xmax - data$xmin) / 2 middle$x <- middle$x + notchindent middle$xend <- middle$xend - notchindent box <- data.frame( x = c( data$xmin, data$xmin, data$xmin + notchindent, data$xmin, data$xmin, data$xmax, data$xmax, data$xmax - notchindent, data$xmax, data$xmax, data$xmin ), y = c( data$ymax, data$ynotchupper, data$y, data$ynotchlower, data$ymin, data$ymin, data$ynotchlower, data$y, data$ynotchupper, data$ymax, data$ymax ), alpha = data$alpha, colour = data$colour, size = data$size, linetype = data$linetype, fill = data$fill, group = seq_len(nrow(data)), stringsAsFactors = FALSE ) } else { # No notch box <- data.frame( x = c(data$xmin, data$xmin, data$xmax, data$xmax, data$xmin), y = c(data$ymax, data$ymin, data$ymin, data$ymax, data$ymax), alpha = data$alpha, colour = data$colour, size = data$size, linetype = data$linetype, fill = data$fill, group = seq_len(nrow(data)), # each bar forms it's own group stringsAsFactors = FALSE ) } ggname("geom_crossbar", gTree(children = gList( GeomPolygon$draw_panel(box, panel_scales, coord), GeomSegment$draw_panel(middle, panel_scales, coord) ))) } ) ggplot2/R/stat-bin2d.r0000644000175100001440000000740012607207116014204 0ustar hornikusers#' @param bins numeric vector giving number of bins in both vertical and #' horizontal directions. Set to 30 by default. #' @param binwidth Numeric vector giving bin width in both vertical and #' horizontal directions. Overrides \code{bins} if both set. #' @param drop if \code{TRUE} removes all cells with 0 counts. #' @export #' @rdname geom_bin2d stat_bin_2d <- function(mapping = NULL, data = NULL, geom = "tile", position = "identity", bins = 30, binwidth = NULL, drop = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatBin2d, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, drop = drop, na.rm = na.rm, ... ) ) } #' @export #' @rdname geom_bin2d #' @usage NULL stat_bin2d <- stat_bin_2d #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatBin2d <- ggproto("StatBin2d", Stat, default_aes = aes(fill = ..count..), required_aes = c("x", "y"), compute_group = function(data, scales, binwidth = NULL, bins = 30, breaks = NULL, origin = NULL, drop = TRUE) { origin <- dual_param(origin, list(NULL, NULL)) binwidth <- dual_param(binwidth, list(NULL, NULL)) breaks <- dual_param(breaks, list(NULL, NULL)) bins <- dual_param(bins, list(x = 30, y = 30)) xbreaks <- bin_breaks(scales$x, breaks$x, origin$x, binwidth$x, bins$x) ybreaks <- bin_breaks(scales$y, breaks$y, origin$y, binwidth$y, bins$y) xbin <- cut(data$x, xbreaks, include.lowest = TRUE, labels = FALSE) ybin <- cut(data$y, ybreaks, include.lowest = TRUE, labels = FALSE) if (is.null(data$weight)) data$weight <- 1 out <- tapply_df(data$weight, list(xbin = xbin, ybin = ybin), sum, drop = drop) xdim <- bin_loc(xbreaks, out$xbin) out$x <- xdim$mid out$width <- xdim$length ydim <- bin_loc(ybreaks, out$ybin) out$y <- ydim$mid out$height <- ydim$length out$count <- out$value out$density <- out$count / sum(out$count, na.rm = TRUE) out } ) dual_param <- function(x, default = list(x = NULL, y = NULL)) { if (is.null(x)) { default } else if (length(x) == 2) { if (is.list(x) && !is.null(names(x))) { x } else { list(x = x[[1]], y = x[[2]]) } } else { list(x = x, y = x) } } bin_breaks <- function(scale, breaks = NULL, origin = NULL, binwidth = NULL, bins = 30, right = TRUE) { # Bins for categorical data should take the width of one level, # and should show up centered over their tick marks. All other parameters # are ignored. if (scale$is_discrete()) { breaks <- scale$get_breaks() return(-0.5 + seq_len(length(breaks) + 1)) } if (!is.null(breaks)) return(breaks) range <- scale$get_limits() if (is.null(binwidth) || identical(binwidth, NA)) { binwidth <- diff(range) / bins } stopifnot(is.numeric(binwidth), length(binwidth) == 1) if (is.null(origin) || identical(origin, NA)) { origin <- plyr::round_any(range[1], binwidth, floor) } stopifnot(is.numeric(origin), length(origin) == 1) breaks <- seq(origin, range[2] + binwidth, binwidth) adjust_breaks(breaks, right) } adjust_breaks <- function(x, right = TRUE) { diddle <- 1e-07 * stats::median(diff(x)) if (right) { fuzz <- c(-diddle, rep.int(diddle, length(x) - 1)) } else { fuzz <- c(rep.int(-diddle, length(x) - 1), diddle) } sort(x) + fuzz } bin_loc <- function(x, id) { left <- x[-length(x)] right <- x[-1] list( left = left[id], right = right[id], mid = ((left + right) / 2)[id], length = diff(x)[id] ) } ggplot2/R/labels.r0000644000175100001440000000357312560162176013512 0ustar hornikusers#' Update axis/legend labels #' #' @param p plot to modify #' @param labels named list of new labels #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' update_labels(p, list(x = "New x")) #' update_labels(p, list(x = expression(x / y ^ 2))) #' update_labels(p, list(x = "New x", y = "New Y")) #' update_labels(p, list(colour = "Fail silently")) update_labels <- function(p, labels) { p <- plot_clone(p) p$labels <- defaults(labels, p$labels) p } #' Change axis labels and legend titles #' #' @param label The text for the axis or plot title. #' @param ... a list of new names in the form aesthetic = "new name" #' @export #' @examples #' p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() #' p + labs(title = "New plot title") #' p + labs(x = "New x label") #' p + xlab("New x label") #' p + ylab("New y label") #' p + ggtitle("New plot title") #' #' # This should work independently of other functions that modify the #' # the scale names #' p + ylab("New y label") + ylim(2, 4) #' p + ylim(2, 4) + ylab("New y label") #' #' # The labs function also modifies legend labels #' p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point() #' p + labs(colour = "Cylinders") #' #' # Can also pass in a list, if that is more convenient #' p + labs(list(title = "Title", x = "X", y = "Y")) labs <- function(...) { args <- list(...) if (is.list(args[[1]])) args <- args[[1]] args <- rename_aes(args) structure(args, class = "labels") } #' @rdname labs #' @export xlab <- function(label) { labs(x = label) } #' @rdname labs #' @export ylab <- function(label) { labs(y = label) } #' @rdname labs #' @export ggtitle <- function(label) { labs(title = label) } # Convert aesthetic mapping into text labels make_labels <- function(mapping) { remove_dots <- function(x) { gsub(match_calculated_aes, "\\1", x) } lapply(mapping, function(x) remove_dots(deparse(x))) } ggplot2/R/translate-qplot-ggplot.r0000644000175100001440000000733212555701147016672 0ustar hornikusers#' Translating between qplot and ggplot #' #' Within ggplot2, there are two basic methods to create plots, with qplot() #' and ggplot(). qplot() is designed primarily for interactive use: it makes #' a number of assumptions that speed most cases, but when designing multilayered #' plots with different data sources it can get in the way. This section #' describes what those defaults are, and how they map to the fuller ggplot() #' syntax. #' #' @name translate_qplot_ggplot #' @examples #' #' # By default, qplot() assumes that you want a scatterplot, #' # i.e., you want to use geom_point() #' # qplot(x, y, data = data) #' # ggplot(data, aes(x, y)) + geom_point() #' #' # Using Aesthetics #' #' # If you map additional aesthetics, these will be added to the defaults. With #' # qplot() there is no way to use different aesthetic mappings (or data) in #' # different layers #' # qplot(x, y, data = data, shape = shape, colour = colour) #' # ggplot(data, aes(x, y, shape = shape, colour = colour)) + geom_point() #' # #' # Aesthetic parameters in qplot() always try to map the aesthetic to a #' # variable. If the argument is not a variable but a value, effectively a new column #' # is added to the original dataset with that value. To set an aesthetic to a #' # value and override the default appearance, you surround the value with I() in #' # qplot(), or pass it as a parameter to the layer. #' # qplot(x, y, data = data, colour = I("red")) #' # ggplot(data, aes(x, y)) + geom_point(colour = "red") #' #' # Changing the geom parameter changes the geom added to the plot #' # qplot(x, y, data = data, geom = "line") #' # ggplot(data, aes(x, y)) + geom_line() #' #' # Not all geoms require both x and y, e.g., geom_bar() and geom_histogram(). #' # For these two geoms, if the y aesthetic is not supplied, both qplot and #' # ggplot commands default to "count" on the y-axis #' # ggplot(data, aes(x)) + geom_bar() #' # qplot(x, data = data, geom = "bar") #' #' # If a vector of multiple geom names is supplied to the geom argument, each #' # geom will be added in turn #' # qplot(x, y, data = data, geom = c("point", "smooth")) #' # ggplot(data, aes(x, y)) + geom_point() + geom_smooth() #' #' # Unlike the rest of ggplot2, stats and geoms are independent #' # qplot(x, y, data = data, stat = "bin") #' # ggplot(data, aes(x, y)) + geom_point(stat = "bin") #' # #' # Any layer parameters will be passed on to all layers. Most layers will ignore #' # parameters that they don't need #' # qplot(x, y, data = data, geom = c("point", "smooth"), method = "lm") #' # ggplot(data, aes(x, y)) + geom_point(method = "lm") + geom_smooth(method = "lm") #' #' # Scales and axes #' #' # You can control basic properties of the x and y scales with the xlim, ylim, #' # xlab and ylab arguments #' # qplot(x, y, data = data, xlim = c(1, 5), xlab = "my label") #' # ggplot(data, aes(x, y)) + geom_point() + #' # scale_x_continuous("my label", limits = c(1, 5)) #' #' # qplot(x, y, data = data, xlim = c(1, 5), ylim = c(10, 20)) #' # ggplot(data, aes(x, y)) + geom_point() + #' # scale_x_continuous(limits = c(1, 5)) + scale_y_continuous(limits = c(10, 20)) #' #' # Like plot(), qplot() has a convenient way of log transforming the axes. #' # qplot(x, y, data = data, log = "xy") #' # ggplot(data, aes(x, y)) + geom_point() + scale_x_log10() + scale_y_log10() #' # There are many other possible transformations, but not all are #' # accessible from within qplot(), see ?scale_continuous for more #' #' # Plot options #' #' # qplot() recognises the same options as plot does, and converts them to their #' # ggplot2 equivalents. See ?theme for more on ggplot options #' # qplot(x, y, data = data, main="title", asp = 1) #' # ggplot(data, aes(x, y)) + geom_point() + labs(title = "title") + theme(aspect.ratio = 1) NULL ggplot2/R/stat-summary-2d.r0000644000175100001440000000735012607207526015217 0ustar hornikusers#' Bin and summarise in 2d (rectangle & hexagons) #' #' \code{stat_summary_2d} is a 2d variation of \code{\link{stat_summary}}. #' \code{stat_summary_hex} is a hexagonal variation of #' \code{\link{stat_summary_2d}}. The data are divided into bins defined #' by \code{x} and \code{y}, and then the values of \code{z} in each cell is #' are summarised with \code{fun}. #' #' @section Aesthetics: #' \itemize{ #' \item \code{x}: horizontal position #' \item \code{y}: vertical position #' \item \code{z}: value passed to the summary function #' } #' #' @seealso \code{\link{stat_summary_hex}} for hexagonal summarization. #' \code{\link{stat_bin2d}} for the binning options. #' @inheritParams stat_identity #' @inheritParams stat_bin_2d #' @param drop drop if the output of \code{fun} is \code{NA}. #' @param fun function for summary. #' @param fun.args A list of extra arguments to pass to \code{fun} #' @export #' @examples #' d <- ggplot(diamonds, aes(carat, depth, z = price)) #' d + stat_summary_2d() #' #' # Specifying function #' d + stat_summary_2d(fun = function(x) sum(x^2)) #' d + stat_summary_2d(fun = var) #' d + stat_summary_2d(fun = "quantile", fun.args = list(probs = 0.1)) #' #' if (requireNamespace("hexbin")) { #' d + stat_summary_hex() #' } stat_summary_2d <- function(mapping = NULL, data = NULL, geom = "tile", position = "identity", bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatSummary2d, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( bins = bins, binwidth = binwidth, drop = drop, fun = fun, fun.args = fun.args, na.rm = na.rm, ... ) ) } #' @export #' @rdname stat_summary_2d #' @usage NULL stat_summary2d <- function(...) { message("Please use stat_summary_2d() instead") stat_summary_2d(...) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatSummary2d <- ggproto("StatSummary2d", Stat, default_aes = aes(fill = ..value..), required_aes = c("x", "y", "z"), compute_group = function(data, scales, binwidth = NULL, bins = 30, breaks = NULL, origin = NULL, drop = TRUE, fun = "mean", fun.args = list()) { origin <- dual_param(origin, list(NULL, NULL)) binwidth <- dual_param(binwidth, list(NULL, NULL)) breaks <- dual_param(breaks, list(NULL, NULL)) bins <- dual_param(bins, list(x = 30, y = 30)) xbreaks <- bin_breaks(scales$x, breaks$x, origin$x, binwidth$x, bins$x) ybreaks <- bin_breaks(scales$y, breaks$y, origin$y, binwidth$y, bins$y) xbin <- cut(data$x, xbreaks, include.lowest = TRUE, labels = FALSE) ybin <- cut(data$y, ybreaks, include.lowest = TRUE, labels = FALSE) f <- function(x) { do.call(fun, c(list(quote(x)), fun.args)) } out <- tapply_df(data$z, list(xbin = xbin, ybin = ybin), f, drop = drop) xdim <- bin_loc(xbreaks, out$xbin) out$x <- xdim$mid out$width <- xdim$length ydim <- bin_loc(ybreaks, out$ybin) out$y <- ydim$mid out$height <- ydim$length out } ) # Adaptation of tapply that returns a data frame instead of a matrix tapply_df <- function(x, index, fun, ..., drop = TRUE) { labels <- lapply(index, ulevels) out <- expand.grid(labels, KEEP.OUT.ATTRS = FALSE, stringsAsFactors = FALSE) grps <- split(x, index) names(grps) <- NULL out$value <- unlist(lapply(grps, fun, ...)) if (drop) { n <- vapply(grps, length, integer(1)) out <- out[n > 0, , drop = FALSE] } out } ggplot2/R/annotation-map.r0000644000175100001440000000412112607214237015161 0ustar hornikusers#' @include geom-map.r NULL #' Annotation: maps. #' #' @param map data frame representing a map. Most map objects can be #' converted into the right format by using \code{\link{fortify}} #' @param ... other arguments used to modify aesthetics #' @export #' @examples #' if (require("maps")) { #' usamap <- map_data("state") #' #' seal.sub <- subset(seals, long > -130 & lat < 45 & lat > 40) #' ggplot(seal.sub, aes(x = long, y = lat)) + #' annotation_map(usamap, fill = "NA", colour = "grey50") + #' geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) #' #' seal2 <- transform(seal.sub, #' latr = cut(lat, 2), #' longr = cut(long, 2)) #' #' ggplot(seal2, aes(x = long, y = lat)) + #' annotation_map(usamap, fill = "NA", colour = "grey50") + #' geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) + #' facet_grid(latr ~ longr, scales = "free", space = "free") #' } annotation_map <- function(map, ...) { # Get map input into correct form stopifnot(is.data.frame(map)) if (!is.null(map$lat)) map$y <- map$lat if (!is.null(map$long)) map$x <- map$long if (!is.null(map$region)) map$id <- map$region stopifnot(all(c("x", "y", "id") %in% names(map))) layer( data = NULL, stat = StatIdentity, geom = GeomAnnotationMap, position = PositionIdentity, inherit.aes = FALSE, params = list(map = map, ...) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomAnnotationMap <- ggproto("GeomAnnotationMap", GeomMap, extra_params = "", handle_na = function(data, params) { data }, draw_panel = function(data, panel_scales, coord, map) { # Munch, then set up id variable for polygonGrob - # must be sequential integers coords <- coord_munch(coord, map, panel_scales) coords$group <- coords$group %||% coords$id grob_id <- match(coords$group, unique(coords$group)) polygonGrob(coords$x, coords$y, default.units = "native", id = grob_id, gp = gpar( col = data$colour, fill = alpha(data$fill, data$alpha), lwd = data$size * .pt) ) }, required_aes = c() ) ggplot2/R/facet-viewports.r0000644000175100001440000000260712556004364015366 0ustar hornikusers# Assign viewports to a matrix of grobs # # Uses the structure (and names) of the matrix of grobs, to automatically # assign each grob to the appropriate viewport assign_viewports <- function(grobs) { make_grid <- function(type) { data.frame( type = type, x = c(row(grobs[[type]])), y = c(col(grobs[[type]])) ) } assign_vp <- function(type, x, y) { ggname(type, editGrob(grobs[[type]][[x, y]], vp = vp_path(x, y, type))) } grid <- plyr::ldply(names(grobs), make_grid) plyr::mlply(grid, assign_vp) } # Setup matrix of viewports for a layout with given parameters setup_viewports <- function(type, data, offset = c(0,0), clip = "on") { rows <- nrow(data) cols <- ncol(data) vp <- function(x,y) { # cat(vp_name(x, y, type), ": ", x + offset[1], ", ", y + offset[2], "\n", sep="") viewport( name = vp_name(x, y, type), layout.pos.row = x + offset[1], layout.pos.col = y + offset[2], clip = clip ) } pos <- expand.grid(x = seq_len(rows), y = seq_len(cols)) do.call("vpList", plyr::mlply(pos, vp)) } # Calculate viewport path. # Helps ensure a common naming scheme throughout ggplot. vp_path <- function(row, col, type) { vpPath("panels", vp_name(row, col, type)) } # Compute viewport name. # Helps ensure a common naming scheme throughout ggplot. vp_name <- function(row, col, type) { paste(type, row, col, sep = "_") } ggplot2/R/utilities-matrix.r0000644000175100001440000000217612556122063015557 0ustar hornikusers# Col union # Form the union of columns in a and b. If there are columns of the same name in both a and b, take the column from a. # # @param data frame a # @param data frame b # @keyword internal cunion <- function(a, b) { if (length(a) == 0) return(b) if (length(b) == 0) return(a) cbind(a, b[setdiff(names(b), names(a))]) } # Interleave (or zip) multiple units into one vector interleave <- function(...) UseMethod("interleave") #' @export interleave.unit <- function(...) { do.call("unit.c", do.call("interleave.default", plyr::llply(list(...), as.list))) } #' @export interleave.default <- function(...) { vectors <- list(...) # Check lengths lengths <- unique(setdiff(plyr::laply(vectors, length), 1)) if (length(lengths) == 0) lengths <- 1 stopifnot(length(lengths) <= 1) # Replicate elements of length one up to correct length singletons <- plyr::laply(vectors, length) == 1 vectors[singletons] <- plyr::llply(vectors[singletons], rep, lengths) # Interleave vectors n <- lengths p <- length(vectors) interleave <- rep(1:n, each = p) + seq(0, p - 1) * n unlist(vectors, recursive = FALSE)[interleave] } ggplot2/R/geom-defaults.r0000644000175100001440000000227512607227454015005 0ustar hornikusers#' Modify geom/stat aesthetic defaults for future plots #' #' @param stat,geom Name of geom/stat to modify (like \code{"point"} or #' \code{"bin"}), or a Geom/Stat object (like \code{GeomPoint} or #' \code{StatBin}). #' @param new Named list of aesthetics. #' @export #' @examples #' update_geom_defaults("point", list(colour = "darkblue")) #' ggplot(mtcars, aes(mpg, wt)) + geom_point() #' update_geom_defaults("point", list(colour = "black")) #' @rdname update_defaults update_geom_defaults <- function(geom, new) { if (is.character(geom)) { g <- find_subclass("Geom", geom) } else if (inherits(geom, "Geom")) { g <- geom } else { stop('`geom` must be a string (like "point") or a Geom object (like GeomPoint).', call. = FALSE) } old <- g$default_aes g$default_aes <- defaults(new, old) } #' @rdname update_defaults #' @export update_stat_defaults <- function(stat, new) { if (is.character(stat)) { g <- find_subclass("Stat", stat) } else if (inherits(stat, "Stat")) { g <- stat } else { stop('`stat` must be a string (like "point") or a Stat object (like StatBin).', call. = FALSE) } old <- g$default_aes g$default_aes <- defaults(new, old) } ggplot2/R/utilities-resolution.r0000644000175100001440000000154112555701147016456 0ustar hornikusers#' Compute the "resolution" of a data vector. #' #' The resolution is is the smallest non-zero distance between adjacent #' values. If there is only one unique value, then the resolution is defined #' to be one. #' #' If x is an integer vector, then it is assumed to represent a discrete #' variable, and the resolution is 1. #' #' @param x numeric vector #' @param zero should a zero value be automatically included in the #' computation of resolution #' @export #' @examples #' resolution(1:10) #' resolution((1:10) - 0.5) #' resolution((1:10) - 0.5, FALSE) #' resolution(c(1,2, 10, 20, 50)) #' resolution(as.integer(c(1, 10, 20, 50))) # Returns 1 resolution <- function(x, zero = TRUE) { if (is.integer(x) || zero_range(range(x, na.rm = TRUE))) return(1) x <- unique(as.numeric(x)) if (zero) { x <- unique(c(0, x)) } min(diff(sort(x))) } ggplot2/R/stat-contour.r0000644000175100001440000000607712607215012014702 0ustar hornikusers#' @inheritParams stat_identity #' @export #' @section Computed variables: #' \describe{ #' \item{level}{height of contour} #' } #' @rdname geom_contour stat_contour <- function(mapping = NULL, data = NULL, geom = "contour", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatContour, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatContour <- ggproto("StatContour", Stat, required_aes = c("x", "y", "z"), default_aes = aes(order = ..level..), compute_group = function(data, scales, bins = NULL, binwidth = NULL, breaks = NULL, complete = FALSE, na.rm = FALSE) { # If no parameters set, use pretty bins if (is.null(bins) && is.null(binwidth) && is.null(breaks)) { breaks <- pretty(range(data$z), 10) } # If provided, use bins to calculate binwidth if (!is.null(bins)) { binwidth <- diff(range(data$z)) / bins } # If necessary, compute breaks from binwidth if (is.null(breaks)) { breaks <- fullseq(range(data$z), binwidth) } contour_lines(data, breaks, complete = complete) } ) # v3d <- reshape2::melt(volcano) # names(v3d) <- c("x", "y", "z") # # breaks <- seq(95, 195, length.out = 10) # contours <- contourLines(v3d, breaks) # ggplot(contours, aes(x, y)) + # geom_path() + # facet_wrap(~piece) contour_lines <- function(data, breaks, complete = FALSE) { z <- tapply(data$z, data[c("x", "y")], identity) cl <- grDevices::contourLines( x = sort(unique(data$x)), y = sort(unique(data$y)), z = z, levels = breaks) if (length(cl) == 0) { warning("Not possible to generate contour data", call. = FALSE) return(data.frame()) } # Convert list of lists into single data frame lengths <- vapply(cl, function(x) length(x$x), integer(1)) levels <- vapply(cl, "[[", "level", FUN.VALUE = double(1)) xs <- unlist(lapply(cl, "[[", "x"), use.names = FALSE) ys <- unlist(lapply(cl, "[[", "y"), use.names = FALSE) pieces <- rep(seq_along(cl), lengths) # Add leading zeros so that groups can be properly sorted later groups <- paste(data$group[1], sprintf("%03d", pieces), sep = "-") data.frame( level = rep(levels, lengths), x = xs, y = ys, piece = pieces, group = groups ) } # 1 = clockwise, -1 = counterclockwise, 0 = 0 area # From http://stackoverflow.com/questions/1165647 # x <- c(5, 6, 4, 1, 1) # y <- c(0, 4, 5, 5, 0) # poly_dir(x, y) poly_dir <- function(x, y) { xdiff <- c(x[-1], x[1]) - x ysum <- c(y[-1], y[1]) + y sign(sum(xdiff * ysum)) } # To fix breaks and complete the polygons, we need to add 0-4 corner points. # # contours <- ddply(contours, "piece", mutate, dir = ggplot2:::poly_dir(x, y)) # ggplot(contours, aes(x, y)) + # geom_path(aes(group = piece, colour = factor(dir))) # last_plot() + facet_wrap(~ level) ggplot2/R/ggplot2.r0000644000175100001440000000013612567363713013625 0ustar hornikusers#' @import scales grid gtable #' @importFrom plyr defaults #' @importFrom stats setNames NULL ggplot2/R/translate-qplot-lattice.r0000644000175100001440000000571612556131335017024 0ustar hornikusers#' Translating between qplot and lattice #' #' The major difference between lattice and ggplot2 is that lattice uses a formula based #' interface. ggplot2 does not because the formula does not generalise well #' to more complicated situations. #' #' @name translate_qplot_lattice #' @examples #' \dontrun{ #' library(lattice) #' #' if (require("ggplot2movies")) { #' xyplot(rating ~ year, data=movies) #' qplot(year, rating, data=movies) #' #' xyplot(rating ~ year | Comedy + Action, data = movies) #' qplot(year, rating, data = movies, facets = ~ Comedy + Action) #' # Or maybe #' qplot(year, rating, data = movies, facets = Comedy ~ Action) #' #' # While lattice has many different functions to produce different types of #' # graphics (which are all basically equivalent to setting the panel argument), #' # ggplot2 has qplot(). #' #' stripplot(~ rating, data = movies, jitter.data = TRUE) #' qplot(rating, 1, data = movies, geom = "jitter") #' #' histogram(~ rating, data = movies) #' qplot(rating, data = movies, geom = "histogram") #' #' bwplot(Comedy ~ rating ,data = movies) #' qplot(factor(Comedy), rating, data = movies, type = "boxplot") #' #' xyplot(wt ~ mpg, mtcars, type = c("p","smooth")) #' qplot(mpg, wt, data = mtcars, geom = c("point","smooth")) #' #' xyplot(wt ~ mpg, mtcars, type = c("p","r")) #' qplot(mpg, wt, data = mtcars, geom = c("point","smooth"), method = "lm") #' } #' #' # The capabilities for scale manipulations are similar in both ggplot2 and #' # lattice, although the syntax is a little different. #' #' xyplot(wt ~ mpg | cyl, mtcars, scales = list(y = list(relation = "free"))) #' qplot(mpg, wt, data = mtcars) + facet_wrap(~ cyl, scales = "free") #' #' xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 10)) #' qplot(mpg, wt, data = mtcars, log = "xy") #' #' xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 2)) #' qplot(mpg, wt, data = mtcars) + #' scale_x_continuous(trans = scales::log2_trans()) + #' scale_y_continuous(trans = scales::log2_trans()) #' #' xyplot(wt ~ mpg, mtcars, group = cyl, auto.key = TRUE) #' # Map directly to an aesthetic like colour, size, or shape. #' qplot(mpg, wt, data = mtcars, colour = cyl) #' #' xyplot(wt ~ mpg, mtcars, xlim = c(20,30)) #' # Works like lattice, except you can't specify a different limit #' # for each panel/facet #' qplot(mpg, wt, data = mtcars, xlim = c(20,30)) #' #' # Both lattice and ggplot2 have similar options for controlling labels on the plot. #' #' xyplot(wt ~ mpg, mtcars, xlab = "Miles per gallon", ylab = "Weight", #' main = "Weight-efficiency tradeoff") #' qplot(mpg, wt, data = mtcars, xlab = "Miles per gallon", ylab = "Weight", #' main = "Weight-efficiency tradeoff") #' #' xyplot(wt ~ mpg, mtcars, aspect = 1) #' qplot(mpg, wt, data = mtcars, asp = 1) #' #' # par.settings() is equivalent to + theme() and trellis.options.set() #' # and trellis.par.get() to theme_set() and theme_get(). #' # More complicated lattice formulas are equivalent to rearranging the data #' # before using ggplot2. #' } NULL ggplot2/R/stat-ecdf.r0000644000175100001440000000364712633014405014114 0ustar hornikusers#' Empirical Cumulative Density Function #' #' @inheritParams stat_identity #' @param na.rm If \code{FALSE} (the default), removes missing values with #' a warning. If \code{TRUE} silently removes missing values. #' @param n if NULL, do not interpolate. If not NULL, this is the number #' of points to interpolate with. #' @section Computed variables: #' \describe{ #' \item{x}{x in data} #' \item{y}{cumulative density corresponding x} #' } #' @export #' @examples #' \donttest{ #' df <- data.frame(x = rnorm(1000)) #' ggplot(df, aes(x)) + stat_ecdf(geom = "step") #' #' df <- data.frame(x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)), #' g = gl(2, 100)) #' #' ggplot(df, aes(x, colour = g)) + stat_ecdf() #' } stat_ecdf <- function(mapping = NULL, data = NULL, geom = "step", position = "identity", n = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = StatEcdf, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( n = n, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export StatEcdf <- ggproto("StatEcdf", Stat, compute_group = function(data, scales, n = NULL) { # If n is NULL, use raw values; otherwise interpolate if (is.null(n)) { xvals <- unique(data$x) } else { xvals <- seq(min(data$x), max(data$x), length.out = n) } y <- ecdf(data$x)(xvals) # make point with y = 0, from plot.stepfun rx <- range(xvals) if (length(xvals) > 1L) { dr <- max(0.08 * diff(rx), median(diff(xvals))) } else { dr <- abs(xvals)/16 } x0 <- rx[1] - dr x1 <- rx[2] + dr y0 <- 0 y1 <- 1 data.frame(x = c(x0, xvals, x1), y = c(y0, y, y1)) }, default_aes = aes(y = ..y..), required_aes = c("x") ) ggplot2/R/scale-continuous.r0000644000175100001440000001314712567704140015541 0ustar hornikusers#' Continuous position scales (x & y). #' #' \code{scale_x_continuous} and \code{scale_y_continuous} are the key functions. #' The others, \code{scale_x_log10}, \code{scale_y_sqrt} etc, are aliases #' that set the \code{trans} argument to commonly used transformations. #' #' @inheritParams continuous_scale #' @seealso \code{\link{scale_date}} for date/time position scales. #' @param ... Other arguments passed on to \code{scale_(x|y)_continuous} #' @examples #' \donttest{ #' if (require(ggplot2movies)) { #' m <- ggplot(subset(movies, votes > 1000), aes(rating, votes)) + #' geom_point(na.rm = TRUE) #' m #' #' # Manipulating the default position scales lets you: #' #' # * change the axis labels #' m + scale_y_continuous("number of votes") #' m + scale_y_continuous(quote(votes ^ alpha)) #' #' # * modify the axis limits #' m + scale_y_continuous(limits = c(0, 5000)) #' m + scale_y_continuous(limits = c(1000, 10000)) #' m + scale_x_continuous(limits = c(7, 8)) #' #' # you can also use the short hand functions xlim and ylim #' m + ylim(0, 5000) #' m + ylim(1000, 10000) #' m + xlim(7, 8) #' #' # * choose where the ticks appear #' m + scale_x_continuous(breaks = 1:10) #' m + scale_x_continuous(breaks = c(1,3,7,9)) #' #' # * manually label the ticks #' m + scale_x_continuous(breaks = c(2,5,8), labels = c("two", "five", "eight")) #' m + scale_x_continuous(breaks = c(2,5,8), labels = c("horrible", "ok", "awesome")) #' m + scale_x_continuous(breaks = c(2,5,8), labels = expression(Alpha, Beta, Omega)) #' #' # There are a few built in transformation that you can use: #' m + scale_y_log10() #' m + scale_y_sqrt() #' m + scale_y_reverse() #' # You can also create your own and supply them to the trans argument. #' # See ?scales::trans_new #' #' # You can control the formatting of the labels with the formatter #' # argument. Some common formats are built into the scales package: #' df <- data.frame( #' x = rnorm(10) * 100000, #' y = seq(0, 1, length.out = 10) #' ) #' p <- ggplot(df, aes(x, y)) + geom_point() #' p + scale_y_continuous(labels = scales::percent) #' p + scale_y_continuous(labels = scales::dollar) #' p + scale_x_continuous(labels = scales::comma) #' #' # Other shortcut functions #' ggplot(movies, aes(rating, votes)) + #' geom_point() + #' ylim(1e4, 5e4) #' # * axis labels #' ggplot(movies, aes(rating, votes)) + #' geom_point() + #' labs(x = "My x axis", y = "My y axis") #' # * log scaling #' ggplot(movies, aes(rating, votes)) + #' geom_point() + #' scale_x_log10() + #' scale_y_log10() #' } #' } #' @name scale_continuous NULL #' @rdname scale_continuous #' @export scale_x_continuous <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity") { sc <- continuous_scale( c("x", "xmin", "xmax", "xend", "xintercept"), "position_c", identity, name = name, breaks = breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = "none" ) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleContinuousPosition class(sc) <- class(ScaleContinuousPosition) sc } #' @rdname scale_continuous #' @export scale_y_continuous <- function(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity") { sc <- continuous_scale( c("y", "ymin", "ymax", "yend", "yintercept", "ymin_final", "ymax_final", "lower", "middle", "upper"), "position_c", identity, name = name, breaks = breaks, minor_breaks = minor_breaks, labels = labels, limits = limits, expand = expand, oob = oob, na.value = na.value, trans = trans, guide = "none" ) # TODO: Fix this hack. We're reassigning the parent ggproto object, but this # object should in the first place be created with the correct parent. sc$super <- ScaleContinuousPosition class(sc) <- class(ScaleContinuousPosition) sc } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export ScaleContinuousPosition <- ggproto("ScaleContinuousPosition", ScaleContinuous, # Position aesthetics don't map, because the coordinate system takes # care of it. But they do need to be made in to doubles, so stat methods # can tell the difference between continuous and discrete data. map = function(self, x, limits = self$get_limits()) { scaled <- as.numeric(self$oob(x, limits)) ifelse(!is.na(scaled), scaled, self$na.value) } ) # Transformed scales --------------------------------------------------------- #' @rdname scale_continuous #' @export scale_x_log10 <- function(...) { scale_x_continuous(..., trans = log10_trans()) } #' @rdname scale_continuous #' @export scale_y_log10 <- function(...) { scale_y_continuous(..., trans = log10_trans()) } #' @rdname scale_continuous #' @export scale_x_reverse <- function(...) { scale_x_continuous(..., trans = reverse_trans()) } #' @rdname scale_continuous #' @export scale_y_reverse <- function(...) { scale_y_continuous(..., trans = reverse_trans()) } #' @rdname scale_continuous #' @export scale_x_sqrt <- function(...) { scale_x_continuous(..., trans = sqrt_trans()) } #' @rdname scale_continuous #' @export scale_y_sqrt <- function(...) { scale_y_continuous(..., trans = sqrt_trans()) } ggplot2/R/geom-path.r0000644000175100001440000002256112607211224014116 0ustar hornikusers#' Connect observations. #' #' \code{geom_path()} connects the observations in the order in which they appear #' in the data. \code{geom_line()} connects them in order of the variable on the #' x axis. \code{geom_step()} creates a stairstep plot, highlighting exactly #' when changes occur. #' #' @section Aesthetics: #' \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "path")} #' #' @inheritParams geom_point #' @param lineend Line end style (round, butt, square) #' @param linejoin Line join style (round, mitre, bevel) #' @param linemitre Line mitre limit (number greater than 1) #' @param arrow Arrow specification, as created by \code{\link[grid]{arrow}} #' @seealso #' \code{\link{geom_polygon}}: Filled paths (polygons); #' \code{\link{geom_segment}}: Line segments #' @export #' @examples #' # geom_line() is suitable for time series #' ggplot(economics, aes(date, unemploy)) + geom_line() #' ggplot(economics_long, aes(date, value01, colour = variable)) + #' geom_line() #' #' # geom_step() is useful when you want to highlight exactly when #' # the y value chanes #' recent <- economics[economics$date > as.Date("2013-01-01"), ] #' ggplot(recent, aes(date, unemploy)) + geom_line() #' ggplot(recent, aes(date, unemploy)) + geom_step() #' #' # geom_path lets you explore how two variables are related over time, #' # e.g. unemployment and personal savings rate #' m <- ggplot(economics, aes(unemploy/pop, psavert)) #' m + geom_path() #' m + geom_path(aes(colour = as.numeric(date))) #' #' # Changing parameters ---------------------------------------------- #' ggplot(economics, aes(date, unemploy)) + #' geom_line(colour = "red") #' #' # Use the arrow parameter to add an arrow to the line #' # See ?arrow for more details #' c <- ggplot(economics, aes(x = date, y = pop)) #' c + geom_line(arrow = arrow()) #' c + geom_line( #' arrow = arrow(angle = 15, ends = "both", type = "closed") #' ) #' #' # Control line join parameters #' df <- data.frame(x = 1:3, y = c(4, 1, 9)) #' base <- ggplot(df, aes(x, y)) #' base + geom_path(size = 10) #' base + geom_path(size = 10, lineend = "round") #' base + geom_path(size = 10, linejoin = "mitre", lineend = "butt") #' #' # NAs break the line. Use na.rm = T to suppress the warning message #' df <- data.frame( #' x = 1:5, #' y1 = c(1, 2, 3, 4, NA), #' y2 = c(NA, 2, 3, 4, 5), #' y3 = c(1, 2, NA, 4, 5) #' ) #' ggplot(df, aes(x, y1)) + geom_point() + geom_line() #' ggplot(df, aes(x, y2)) + geom_point() + geom_line() #' ggplot(df, aes(x, y3)) + geom_point() + geom_line() #' #' \donttest{ #' # Setting line type vs colour/size #' # Line type needs to be applied to a line as a whole, so it can #' # not be used with colour or size that vary across a line #' x <- seq(0.01, .99, length.out = 100) #' df <- data.frame( #' x = rep(x, 2), #' y = c(qlogis(x), 2 * qlogis(x)), #' group = rep(c("a","b"), #' each = 100) #' ) #' p <- ggplot(df, aes(x=x, y=y, group=group)) #' # These work #' p + geom_line(linetype = 2) #' p + geom_line(aes(colour = group), linetype = 2) #' p + geom_line(aes(colour = x)) #' # But this doesn't #' should_stop(p + geom_line(aes(colour = x), linetype=2)) #' } geom_path <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, arrow = NULL, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomPath, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( lineend = lineend, linejoin = linejoin, linemitre = linemitre, arrow = arrow, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export GeomPath <- ggproto("GeomPath", Geom, required_aes = c("x", "y"), default_aes = aes(colour = "black", size = 0.5, linetype = 1, alpha = NA), handle_na = function(data, params) { keep <- function(x) { # from first non-missing to last non-missing first <- match(FALSE, x, nomatch = 1) - 1 last <- length(x) - match(FALSE, rev(x), nomatch = 1) + 1 c( rep(FALSE, first), rep(TRUE, last - first), rep(FALSE, length(x) - last) ) } # Drop missing values at the start or end of a line - can't drop in the # middle since you expect those to be shown by a break in the line missing <- !stats::complete.cases(data[c("x", "y", "size", "colour", "linetype")]) kept <- stats::ave(missing, data$group, FUN = keep) data <- data[kept, ] if (!all(kept) && !params$na.rm) { warning("Removed ", sum(!kept), " rows containing missing values", " (geom_path).", call. = FALSE) } data }, draw_panel = function(data, panel_scales, coord, arrow = NULL, lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE) { if (!anyDuplicated(data$group)) { message_wrap("geom_path: Each group consists of only one observation. ", "Do you need to adjust the group aesthetic?") } # must be sorted on group data <- data[order(data$group), , drop = FALSE] munched <- coord_munch(coord, data, panel_scales) # Silently drop lines with less than two points, preserving order rows <- stats::ave(seq_len(nrow(munched)), munched$group, FUN = length) munched <- munched[rows >= 2, ] if (nrow(munched) < 2) return(zeroGrob()) # Work out whether we should use lines or segments attr <- plyr::ddply(munched, "group", function(df) { data.frame( solid = identical(unique(df$linetype), 1), constant = nrow(unique(df[, c("alpha", "colour","size", "linetype")])) == 1 ) }) solid_lines <- all(attr$solid) constant <- all(attr$constant) if (!solid_lines && !constant) { stop("geom_path: If you are using dotted or dashed lines", ", colour, size and linetype must be constant over the line", call. = FALSE) } # Work out grouping variables for grobs n <- nrow(munched) group_diff <- munched$group[-1] != munched$group[-n] start <- c(TRUE, group_diff) end <- c(group_diff, TRUE) if (!constant) { segmentsGrob( munched$x[!end], munched$y[!end], munched$x[!start], munched$y[!start], default.units = "native", arrow = arrow, gp = gpar( col = alpha(munched$colour, munched$alpha)[!end], fill = alpha(munched$colour, munched$alpha)[!end], lwd = munched$size[!end] * .pt, lty = munched$linetype[!end], lineend = lineend, linejoin = linejoin, linemitre = linemitre ) ) } else { id <- match(munched$group, unique(munched$group)) polylineGrob( munched$x, munched$y, id = id, default.units = "native", arrow = arrow, gp = gpar( col = alpha(munched$colour, munched$alpha)[start], fill = alpha(munched$colour, munched$alpha)[start], lwd = munched$size[start] * .pt, lty = munched$linetype[start], lineend = lineend, linejoin = linejoin, linemitre = linemitre ) ) } }, draw_key = draw_key_path ) #' @export #' @rdname geom_path geom_line <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomLine, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomLine <- ggproto("GeomLine", GeomPath, setup_data = function(data, params) { data[order(data$PANEL, data$group, data$x), ] } ) #' @param direction direction of stairs: 'vh' for vertical then horizontal, or #' 'hv' for horizontal then vertical #' @export #' @rdname geom_path geom_step <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", direction = "hv", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( data = data, mapping = mapping, stat = stat, geom = GeomStep, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list( direction = direction, na.rm = na.rm, ... ) ) } #' @rdname ggplot2-ggproto #' @format NULL #' @usage NULL #' @export #' @include geom-path.r GeomStep <- ggproto("GeomStep", GeomPath, draw_panel = function(data, panel_scales, coord, direction = "hv") { data <- plyr::ddply(data, "group", stairstep, direction = direction) GeomPath$draw_panel(data, panel_scales, coord) } ) # Calculate stairsteps # Used by \code{\link{geom_step}} # # @keyword internal stairstep <- function(data, direction="hv") { direction <- match.arg(direction, c("hv", "vh")) data <- as.data.frame(data)[order(data$x), ] n <- nrow(data) if (direction == "vh") { xs <- rep(1:n, each = 2)[-2*n] ys <- c(1, rep(2:n, each = 2)) } else { ys <- rep(1:n, each = 2)[-2*n] xs <- c(1, rep(2:n, each = 2)) } data.frame( x = data$x[xs], y = data$y[ys], data[xs, setdiff(names(data), c("x", "y"))] ) } ggplot2/R/theme-elements.r0000644000175100001440000002533212607706756015173 0ustar hornikusers#' Theme element: blank. #' This theme element draws nothing, and assigns no space #' #' @export element_blank <- function() { structure( list(), class = c("element_blank", "element") ) } #' Theme element: rectangle. #' #' Most often used for backgrounds and borders. #' #' @param fill fill colour #' @param colour border colour #' @param size border size #' @param linetype border linetype #' @param color an alias for \code{colour} #' @export element_rect <- function(fill = NULL, colour = NULL, size = NULL, linetype = NULL, color = NULL) { if (!is.null(color)) colour <- color structure( list(fill = fill, colour = colour, size = size, linetype = linetype), class = c("element_rect", "element") ) } #' Theme element: line. #' #' @param colour line colour #' @param size line size #' @param linetype line type #' @param lineend line end #' @param color an alias for \code{colour} #' @export element_line <- function(colour = NULL, size = NULL, linetype = NULL, lineend = NULL, color = NULL) { if (!is.null(color)) colour <- color structure( list(colour = colour, size = size, linetype = linetype, lineend = lineend), class = c("element_line", "element") ) } #' Theme element: text. #' #' @param family font family #' @param face font face ("plain", "italic", "bold", "bold.italic") #' @param colour text colour #' @param size text size (in pts) #' @param hjust horizontal justification (in [0, 1]) #' @param vjust vertical justification (in [0, 1]) #' @param angle angle (in [0, 360]) #' @param lineheight line height #' @param color an alias for \code{colour} #' @param margin margins around the text. See \code{\link{margin}} for more #' details. When creating a theme, the margins should be placed on the #' side of the text facing towards the center of the plot. #' @param debug If \code{TRUE}, aids visual debugging by drawing a solid #' rectangle behind the complete text area, and a point where each label #' is anchored. #' @export element_text <- function(family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL, color = NULL, margin = NULL, debug = NULL) { if (!is.null(color)) colour <- color structure( list(family = family, face = face, colour = colour, size = size, hjust = hjust, vjust = vjust, angle = angle, lineheight = lineheight, margin = margin, debug = debug), class = c("element_text", "element") ) } #' @export print.element <- function(x, ...) utils::str(x) #' Relative sizing for theme elements #' #' @param x A number representing the relative size #' @examples #' df <- data.frame(x = 1:3, y = 1:3) #' ggplot(df, aes(x, y)) + #' geom_point() + #' theme(axis.title.x = element_text(size = rel(2.5))) #' @export rel <- function(x) { structure(x, class = "rel") } #' @export print.rel <- function(x, ...) print(noquote(paste(x, " *", sep = ""))) #' Reports whether x is a rel object #' @param x An object to test is.rel <- function(x) inherits(x, "rel") # Given a theme object and element name, return a grob for the element element_render <- function(theme, element, ..., name = NULL) { # Get the element from the theme, calculating inheritance el <- calc_element(element, theme) if (is.null(el)) { message("Theme element ", element, " missing") return(zeroGrob()) } ggname(paste(element, name, sep = "."), element_grob(el, ...)) } # Returns NULL if x is length 0 len0_null <- function(x) { if (length(x) == 0) NULL else x } #' Generate grid grob from theme element #' #' @param element Theme element, i.e. \code{element_rect} or similar. #' @param ... Other arguments to control specific of rendering. This is #' usually at least position. See the source code for individual methods. #' @keywords internal #' @export element_grob <- function(element, ...) { UseMethod("element_grob") } #' @export element_grob.element_blank <- function(element, ...) zeroGrob() #' @export element_grob.element_rect <- function(element, x = 0.5, y = 0.5, width = 1, height = 1, fill = NULL, colour = NULL, size = NULL, linetype = NULL, ...) { # The gp settings can override element_gp gp <- gpar(lwd = len0_null(size * .pt), col = colour, fill = fill, lty = linetype) element_gp <- gpar(lwd = len0_null(element$size * .pt), col = element$colour, fill = element$fill, lty = element$linetype) rectGrob(x, y, width, height, gp = utils::modifyList(element_gp, gp), ...) } #' @export element_grob.element_text <- function(element, label = "", x = NULL, y = NULL, family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL, margin = NULL, expand_x = FALSE, expand_y = FALSE, ...) { if (is.null(label)) return(zeroGrob()) vj <- vjust %||% element$vjust hj <- hjust %||% element$hjust margin <- margin %||% element$margin angle <- angle %||% element$angle if (is.null(angle)) { stop("Text element requires non-NULL value for 'angle'.") } # The gp settings can override element_gp gp <- gpar(fontsize = size, col = colour, fontfamily = family, fontface = face, lineheight = lineheight) element_gp <- gpar(fontsize = element$size, col = element$colour, fontfamily = element$family, fontface = element$face, lineheight = element$lineheight) titleGrob(label, x, y, hjust = hj, vjust = vj, angle = angle, gp = utils::modifyList(element_gp, gp), margin = margin, expand_x = expand_x, expand_y = expand_y, debug = element$debug) } #' @export element_grob.element_line <- function(element, x = 0:1, y = 0:1, colour = NULL, size = NULL, linetype = NULL, lineend = NULL, default.units = "npc", id.lengths = NULL, ...) { # The gp settings can override element_gp gp <- gpar(lwd = len0_null(size * .pt), col = colour, lty = linetype, lineend = lineend) element_gp <- gpar(lwd = len0_null(element$size * .pt), col = element$colour, lty = element$linetype, lineend = element$lineend) polylineGrob( x, y, default.units = default.units, gp = utils::modifyList(element_gp, gp), id.lengths = id.lengths, ... ) } # Define an element's class and what other elements it inherits from # # @param class The name of class (like "element_line", "element_text", # or the reserved "character", which means a character vector (not # "character" class) # @param inherit A vector of strings, naming the elements that this # element inherits from. el_def <- function(class = NULL, inherit = NULL, description = NULL) { list(class = class, inherit = inherit, description = description) } # This data structure represents the theme elements and the inheritance # among them. .element_tree <- list( line = el_def("element_line"), rect = el_def("element_rect"), text = el_def("element_text"), title = el_def("element_text", "text"), axis.line = el_def("element_line", "line"), axis.text = el_def("element_text", "text"), axis.title = el_def("element_text", "title"), axis.ticks = el_def("element_line", "line"), legend.key.size = el_def("unit"), panel.grid = el_def("element_line", "line"), panel.grid.major = el_def("element_line", "panel.grid"), panel.grid.minor = el_def("element_line", "panel.grid"), strip.text = el_def("element_text", "text"), axis.line.x = el_def("element_line", "axis.line"), axis.line.y = el_def("element_line", "axis.line"), axis.text.x = el_def("element_text", "axis.text"), axis.text.y = el_def("element_text", "axis.text"), axis.ticks.length = el_def("unit"), axis.ticks.x = el_def("element_line", "axis.ticks"), axis.ticks.y = el_def("element_line", "axis.ticks"), axis.title.x = el_def("element_text", "axis.title"), axis.title.y = el_def("element_text", "axis.title"), legend.background = el_def("element_rect", "rect"), legend.margin = el_def("unit"), legend.key = el_def("element_rect", "rect"), legend.key.height = el_def("unit", "legend.key.size"), legend.key.width = el_def("unit", "legend.key.size"), legend.text = el_def("element_text", "text"), legend.text.align = el_def("character"), legend.title = el_def("element_text", "title"), legend.title.align = el_def("character"), legend.position = el_def("character"), # Need to also accept numbers legend.direction = el_def("character"), legend.justification = el_def("character"), legend.box = el_def("character"), legend.box.just = el_def("character"), panel.background = el_def("element_rect", "rect"), panel.border = el_def("element_rect", "rect"), panel.margin = el_def("unit"), panel.margin.x = el_def("unit", "panel.margin"), panel.margin.y = el_def("unit", "panel.margin"), panel.grid.major.x = el_def("element_line", "panel.grid.major"), panel.grid.major.y = el_def("element_line", "panel.grid.major"), panel.grid.minor.x = el_def("element_line", "panel.grid.minor"), panel.grid.minor.y = el_def("element_line", "panel.grid.minor"), panel.ontop = el_def("logical"), strip.background = el_def("element_rect", "rect"), strip.text.x = el_def("element_text", "strip.text"), strip.text.y = el_def("element_text", "strip.text"), strip.switch.pad.grid = el_def("unit"), strip.switch.pad.wrap = el_def("unit"), plot.background = el_def("element_rect", "rect"), plot.title = el_def("element_text", "title"), plot.margin = el_def("margin"), aspect.ratio = el_def("character") ) # Check that an element object has the proper class # # Given an element object and the name of the element, this function # checks it against the element inheritance tree to make sure the # element is of the correct class # # It throws error if invalid, and returns invisible() if valid. # # @param el an element # @param elname the name of the element validate_element <- function(el, elname) { eldef <- .element_tree[[elname]] if (is.null(eldef)) { stop('"', elname, '" is not a valid theme element name.') } # NULL values for elements are OK if (is.null(el)) return() if (eldef$class == "character") { # Need to be a bit looser here since sometimes it's a string like "top" # but sometimes its a vector like c(0,0) if (!is.character(el) && !is.numeric(el)) stop("Element ", elname, " must be a string or numeric vector.") } else if (eldef$class == "margin") { if (!is.unit(el) && length(el) == 4) stop("Element ", elname, " must be a unit vector of length 4.") } else if (!inherits(el, eldef$class) && !inherits(el, "element_blank")) { stop("Element ", elname, " must be a ", eldef$class, " object.") } invisible() } ggplot2/R/grouping.r0000644000175100001440000000252212567367575014114 0ustar hornikusers# This needs to be less than 1, to distinguish it from "regular" return values # of plyr::id() used by add_group() NO_GROUP <- -1L # Ensure that the data frame contains a grouping variable. # # If the \code{group} variable is not present, then a new group # variable is generated from the interaction of all discrete (factor or # character) vectors, excluding \code{label}. The special value \code{NO_GROUP} # is used for all observations if no discrete variables exist. add_group <- function(data) { if (empty(data)) return(data) if (is.null(data$group)) { disc <- vapply(data, is.discrete, logical(1)) disc[names(disc) %in% c("label", "PANEL")] <- FALSE if (any(disc)) { data$group <- plyr::id(data[disc], drop = TRUE) } else { data$group <- NO_GROUP } } else { data$group <- plyr::id(data["group"], drop = TRUE) } data } # Is a grouping available? # (Will return TRUE if an explicit group or a discrete variable with only one # level existed when add_group() was called.) has_groups <- function(data) { # If no group aesthetic is specified, all values of the group column equal to # NO_GROUP. On the other hand, if a group aesthetic is specified, all values # are different from NO_GROUP (since they are a result of plyr::id()). NA is # returned for 0-row data frames. data$group[1L] != NO_GROUP } ggplot2/R/facet-wrap.r0000644000175100001440000003303212611724324014266 0ustar hornikusers#' Wrap a 1d ribbon of panels into 2d. #' #' Most displays are roughly rectangular, so if you have a categorical #' variable with many levels, it doesn't make sense to try and display them #' all in one row (or one column). To solve this dilemma, \code{facet_wrap} #' wraps a 1d sequence of panels into 2d, making best use of screen real estate. #' #' @param facets Either a formula or character vector. Use either a #' one sided formula, \code{~a + b}, or a character vector, \code{c("a", "b")}. #' @param nrow,ncol Number of rows and columns. #' @param scales should Scales be fixed (\code{"fixed"}, the default), #' free (\code{"free"}), or free in one dimension (\code{"free_x"}, #' \code{"free_y"}). #' @param switch By default, the labels are displayed on the top of #' the plot. If \code{switch} is \code{"x"}, they will be displayed #' to the bottom. If \code{"y"}, they will be displayed to the #' left, near the y axis. #' @param dir Direction: either "h" for horizontal, the default, or "v", for #' vertical. #' @inheritParams facet_grid #' @export #' @examples #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class) #' #' # Control the number of rows and columns with nrow and ncol #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class, nrow = 4) #' #' \donttest{ #' # You can facet by multiple variables #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~ cyl + drv) #' # Or use a character vector: #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(c("cyl", "drv")) #' #' # Use the `labeller` option to control how labels are printed: #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(c("cyl", "drv"), labeller = "label_both") #' #' # To change the order in which the panels appear, change the levels #' # of the underlying factor. #' mpg$class2 <- reorder(mpg$class, mpg$displ) #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class2) #' #' # By default, the same scales are used for all panels. You can allow #' # scales to vary across the panels with the `scales` argument. #' # Free scales make it easier to see patterns within each panel, but #' # harder to compare across panels. #' ggplot(mpg, aes(displ, hwy)) + #' geom_point() + #' facet_wrap(~class, scales = "free") #' #' # To repeat the same data in every panel, simply construct a data frame #' # that does not contain the facetting variable. #' ggplot(mpg, aes(displ, hwy)) + #' geom_point(data = transform(mpg, class = NULL), colour = "grey85") + #' geom_point() + #' facet_wrap(~class) #' #' # Use `switch` to display the facet labels near an axis, acting as #' # a subtitle for this axis. This is typically used with free scales #' # and a theme without boxes around strip labels. #' ggplot(economics_long, aes(date, value)) + #' geom_line() + #' facet_wrap(~variable, scales = "free_y", nrow = 2, switch = "x") + #' theme(strip.background = element_blank()) #' } facet_wrap <- function(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE, dir = "h") { scales <- match.arg(scales, c("fixed", "free_x", "free_y", "free")) dir <- match.arg(dir, c("h", "v")) free <- list( x = any(scales %in% c("free_x", "free")), y = any(scales %in% c("free_y", "free")) ) if (identical(dir, "v")) { # swap nrow <- sanitise_dim(ncol) ncol <- sanitise_dim(nrow) } else { nrow <- sanitise_dim(nrow) ncol <- sanitise_dim(ncol) } # Check for deprecated labellers labeller <- check_labeller(labeller) facet( facets = as.quoted(facets), free = free, shrink = shrink, as.table = as.table, switch = switch, drop = drop, ncol = ncol, nrow = nrow, labeller = labeller, dir = dir, subclass = "wrap" ) } #' @export facet_train_layout.wrap <- function(facet, data) { panels <- layout_wrap(data, facet$facets, facet$nrow, facet$ncol, facet$as.table, facet$drop, facet$dir) n <- nrow(panels) nrow <- max(panels$ROW) # Add scale identification panels$SCALE_X <- if (facet$free$x) seq_len(n) else 1L panels$SCALE_Y <- if (facet$free$y) seq_len(n) else 1L # Figure out where axes should go panels$AXIS_X <- if (facet$free$x) TRUE else panels$ROW == nrow panels$AXIS_Y <- if (facet$free$y) TRUE else panels$COL == 1 panels } #' @export facet_map_layout.wrap <- function(facet, data, layout) { locate_wrap(data, layout, facet$facets) } # How to think about facet wrap: # * vector of panels # * every panel has strips (strip_pos) and axes (axis_pos) # * if scales fixed, most axes empty # * combine panels, strips and axes, then wrap into 2d # * finally: add title, labels and legend # #' @export facet_render.wrap <- function(facet, panel, coord, theme, geom_grobs) { # If coord is (non-cartesian or flip) and (x is free or y is free) # then print a warning if ((!inherits(coord, "CoordCartesian") || inherits(coord, "CoordFlip")) && (facet$free$x || facet$free$y)) { stop("ggplot2 does not currently support free scales with a non-cartesian coord or coord_flip.\n") } # If user hasn't set aspect ratio, and we have fixed scales, then # ask the coordinate system if it wants to specify one aspect_ratio <- theme$aspect.ratio if (is.null(aspect_ratio) && !facet$free$x && !facet$free$y) { aspect_ratio <- coord$aspect(panel$ranges[[1]]) } if (is.null(aspect_ratio)) { aspect_ratio <- 1 respect <- FALSE } else { respect <- TRUE } layout <- panel$layout ncol <- max(layout$COL) nrow <- max(layout$ROW) n <- nrow(layout) # Set switch to default value when misspecified switch_to_x <- FALSE switch_to_y <- FALSE if (!is.null(facet$switch) && facet$switch == "x") { switch_to_x <- TRUE } else if (!is.null(facet$switch) && facet$switch == "y") { switch_to_y <- TRUE } else if (!is.null(facet$switch)) { message("`switch` must be set to 'x', 'y' or NULL") facet$switch <- NULL } panels <- facet_panels(facet, panel, coord, theme, geom_grobs) axes <- facet_axes(facet, panel, coord, theme) strips <- facet_strips(facet, panel, theme) # Should become facet_arrange_grobs # Locate each element in panel find_pos <- function(layout, loc, size) { n <- nrow(layout) l <- size[1] * (layout$COL - 1) + loc[1] t <- size[2] * (layout$ROW - 1) + loc[2] data.frame(t = t, r = l, b = t, l = l, id = seq_len(n)) } if (switch_to_x) { locs <- list( panel = c(2, 1), strip_t = c(2, 3), axis_l = c(1, 1), axis_b = c(2, 2), hspace = c(2, 4), vspace = c(3, 1) ) } else if (switch_to_y) { locs <- list( panel = c(3, 1), strip_t = c(1, 1), axis_l = c(2, 1), axis_b = c(3, 2), hspace = c(3, 3), vspace = c(4, 1) ) } else { locs <- list( panel = c(2, 2), strip_t = c(2, 1), axis_l = c(1, 2), axis_b = c(2, 3), hspace = c(2, 4), vspace = c(3, 2) ) } grobs <- list( panel = panels, strip_t = strips$t, axis_l = axes$l, axis_b = axes$b ) # If strips are switched, add padding if (switch_to_x) { padding <- convertUnit(theme$strip.switch.pad.wrap, "cm") add_padding <- function(strip) { gt_t <- gtable_row("strip_t", list(strip), height = unit(height_cm(strip), "cm")) # One padding above and two below, so that the strip does not look # like a title for the panel just below. gt_t <- gtable_add_rows(gt_t, padding, pos = 0) gt_t <- gtable_add_rows(gt_t, 2 * padding, pos = 2) gt_t } grobs$strip_t <- lapply(strips$t, add_padding) strip_height <- lapply(strips$t, function(x) { 3 * as.numeric(padding) + height_cm(x) }) strip_width <- NULL size <- c(3, 4) } else if (switch_to_y) { padding <- convertUnit(theme$strip.switch.pad.wrap, "cm") add_padding <- function(strip) { gt_t <- gtable_col("strip_t", list(strip), heights = unit(aspect_ratio, "null")) gt_t <- gtable_add_cols(gt_t, padding, pos = 0) gt_t <- gtable_add_cols(gt_t, padding, pos = 2) gt_t } grobs$strip_t <- lapply(strips$t, add_padding) strip_height <- NULL strip_width <- lapply(strips$t, function(x) { 3 * as.numeric(padding) + width_cm(x) }) size <- c(4, 3) } else { strip_height <- height_cm(grobs$strip_t) strip_width <- NULL size <- c(3, 4) } info <- plyr::ldply(locs, find_pos, layout = layout, size = size) names(info)[1] <- "type" info$clip <- ifelse(info$type == "panel", "on", "off") info$name <- paste(info$type, info$id, sep = "-") # Bare numbers are taken as cm # If not listed, assume is unit(1, "null") widths <- list( axis_l = width_cm(grobs$axis_l), strip_t = strip_width, vspace = ifelse(layout$COL == ncol, 0, width_cm(theme$panel.margin.x %||% theme$panel.margin)) ) heights <- list( panel = unit(aspect_ratio, "null"), strip_t = strip_height, axis_b = height_cm(grobs$axis_b), hspace = ifelse(layout$ROW == nrow, 0, height_cm(theme$panel.margin.y %||% theme$panel.margin)) ) # Remove strip_t according to which strips are switched heights <- Filter(Negate(is.null), heights) widths <- Filter(Negate(is.null), widths) col_widths <- compute_grob_widths(info, widths) row_heights <- compute_grob_heights(info, heights) # Create the gtable for the legend gt <- gtable(widths = col_widths, heights = row_heights, respect = respect) # Keep only the rows in info that refer to grobs info <- info[info$type %in% names(grobs), ] grobs <- unlist(grobs, recursive = FALSE) # Add the grobs gt <- gtable_add_grob(gt, grobs, l = info$l, t = info$t, r = info$r, b = info$b, name = info$name, clip = info$clip) gt } #' @export facet_panels.wrap <- function(facet, panel, coord, theme, geom_grobs) { panels <- panel$layout$PANEL lapply(panels, function(i) { fg <- coord$render_fg(panel$ranges[[i]], theme) bg <- coord$render_bg(panel$ranges[[i]], theme) geom_grobs <- lapply(geom_grobs, "[[", i) if (theme$panel.ontop) { panel_grobs <- c(geom_grobs, list(bg), list(fg)) } else { panel_grobs <- c(list(bg), geom_grobs, list(fg)) } ggname(paste("panel", i, sep = "-"), gTree(children = do.call("gList", panel_grobs))) }) } #' @export facet_strips.wrap <- function(facet, panel, theme) { labels_df <- panel$layout[names(facet$facets)] # Adding labels metadata, useful for labellers attr(labels_df, "facet") <- "wrap" if (!is.null(facet$switch) && facet$switch == "x") { dir <- "b" attr(labels_df, "type") <- "rows" } else { dir <- "t" attr(labels_df, "type") <- "cols" } strips_table <- build_strip(panel, labels_df, facet$labeller, theme, dir, switch = facet$switch) # While grid facetting works with a whole gtable, wrap processes the # columns separately. So we turn the gtable into a list of columns strips <- list(t = vector("list", ncol(strips_table))) for (i in seq_along(strips$t)) { strips$t[[i]] <- strips_table[, i] } strips } #' @export facet_axes.wrap <- function(facet, panel, coord, theme) { panels <- panel$layout$PANEL axes <- list() axes$b <- lapply(panels, function(i) { if (panel$layout$AXIS_X[i]) { grob <- coord$render_axis_h(panel$ranges[[i]], theme) } else { grob <- zeroGrob() } ggname(paste("axis-b-", i, sep = ""), grob) }) axes$l <- lapply(panels, function(i) { if (panel$layout$AXIS_Y[i]) { grob <- coord$render_axis_v(panel$ranges[[i]], theme) } else { grob <- zeroGrob() } ggname(paste("axis-l-", i, sep = ""), grob) }) axes } #' @export facet_vars.wrap <- function(facet) { paste(lapply(facet$facets, paste, collapse = ", "), collapse = " ~ ") } #' Sanitise the number of rows or columns #' #' Cleans up the input to be an integer greater than or equal to one, or #' \code{NULL}. Intended to be used on the \code{nrow} and \code{ncol} #' arguments of \code{facet_wrap}. #' @param n Hopefully an integer greater than or equal to one, or \code{NULL}, #' though other inputs are handled. #' @return An integer greater than or equal to one, or \code{NULL}. #' @note If the length of the input is greater than one, only the first element #' is returned, with a warning. #' If the input is not an integer, it will be coerced to be one. #' If the value is less than one, \code{NULL} is returned, effectively ignoring #' the argument. #' Multiple warnings may be generated. #' @examples #' # Valid input just gets returns unchanged #' sanitise_dim(1) #' sanitise_dim(NULL) #' \dontrun{ #' # Only the first element of vectors get returned #' sanitise_dim(10:1) #' # Non-integer values are coerced to integer #' sanitise_dim(pi) #' # Missing values, values less than one and non-numeric values are #' # treated as NULL #' sanitise_dim(NA_integer_) #' sanitise_dim(0) #' sanitise_dim("foo") #' } #' @noRd sanitise_dim <- function(n) { xname <- paste0("`", deparse(substitute(n)), "`") if (length(n) == 0) { if (!is.null(n)) { warning(xname, " has length zero and will be treated as NULL.", call. = FALSE) } return(NULL) } if (length(n) > 1) { warning("Only the first value of ", xname, " will be used.", call. = FALSE) n <- n[1] } if (!is.numeric(n) || (!is.na(n) && n != round(n))) { warning("Coercing ", xname, " to be an integer.", call. = FALSE) n <- as.integer(n) } if (is.na(n) || n < 1) { warning(xname, " is missing or less than 1 and will be treated as NULL.", call. = FALSE) return(NULL) } n } ggplot2/vignettes/0000755000175100001440000000000012634007745013666 5ustar hornikusersggplot2/vignettes/car.png0000644000175100001440000000370312560473777015156 0ustar hornikusers‰PNG  IHDRâeg{Ï…gAMA± üaPLTEg=[o7Rk:VMNtET}IQy^CcZFhRLpc@_bŽ;a‘>g˜AW@hš@jœAkKl•Qq™Dp¥Eq¦Fr¨FsªJy±Kz³L|µL}¶O½š'…)<#4‰&8‘ /«¯ ¢§³ ¸ €,AÀÿÿÿ‰Ÿº¡³ÈPtRNSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿS÷% pHYsÂÂ(J€tEXtSoftwarePaint.NET v3.5.100ôr¡'IDATx^í›[SA„£ˆDÅ;ÞÐ ¨¨ÄËÿÿoØ'ÛÙL6]©¹ìVe'ç{ÀÍ™9Ý|Å‹”ëäî|Z5çw“7|¬–³ *ÆçãŠ5àŠ5àŠ5àŠ5àŠŠïW/ù\ÊÍñ½ëo|ŠDEèáúôŸKy°V ±ŠK½œ•´A5‘nŠäèŠã.¡ÞãçøÂy)Hzùd‘ zÖ¼\ý@Åé)CÖõÞ~œÍðÀ³R4›]¼Dó‘ TÜøÖvõ |àq)Hj"ÐdšaŠ¿àÇ-'‹+ž!îe‚$f‚ž5‘òÇÀŸ[1Z×3ĽLÄLÒ£&bY îe"ã{ÒÄöÎ*=hbs§Žæ/îÄ‚­W4ÍîÄ‚•Q(KMîÄ‚Ñ(騕bF'6\±#vˆ{™ÈxIz'6\±#vˆ{™ÈxIz'6öL±…Ç-±#@ÜËDÆKÒ;±±¤VÅS¬Pñ>[0cG†<.EÆKÒ;o±BL‘ÓMpÆŽ€m iÈxI~'6]ÑËñ’üNlº¢+–!ã%ùØtEW,CÆKò;±éŠ®X†Œ—äwbÓ]± /ÉïĦ+ºb2^’߉MWtÅ2d¼$¿›®èŠeÈxI~'6]ÑËñ’üNlî‰"Ù|åCv`ÈãRd¼$½3ö•[ÌØ€!K‘ñ’ôÎØWn1bG€¸—‰Œ—¤wbc‰)îÁ¿õ»bq//IïĆ+6`ÄŽq//IïĆ+6`ÄŽq//IïÄÆx?xý,½ãP¤HýßvXÙ}Å•þjy|ÃX°´ÛŠëz·©~‹»«X®g`9VñÕûO¬^"îe‚$f.éGÏ@@”bóÉÓuMq/$1ÓèOÏ@H¨ØÂã–¯/xjâKA3ûÕ3flUœÏ|yÔÕÄKAÒ zFì+· M|åA)HDψ}åvE¨Ù§"éW/ᑊÆJ“ƒRš´áô $( Í~(åz`=#]qt¸b ¸b ¸b ¸b ìbåLÎøP/“|¨•éßÿ5ùíQŒ\ÛIEND®B`‚ggplot2/vignettes/extending-ggplot2.Rmd0000644000175100001440000005425712634007652017705 0ustar hornikusers--- title: "Extending ggplot2" author: "Hadley Wickham" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Extending ggplot2} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>") library(ggplot2) ``` This vignette documents the official extension mechanism provided in ggplot2 1.1.0. This vignette is a high-level adjunct to the low-level details found in `?Stat`, `?Geom` and `?theme`. You'll learn how to extend ggplot2 by creating a new stat, geom, or theme. As you read this document, you'll see many things that will make you scratch your head and wonder why on earth is it designed this way? Mostly it's historical accident - I wasn't a terribly good R programmer when I started writing ggplot2 and I made a lot of questionable decisions. We cleaned up as many of those issues as possible in the 1.1.0 release, but some fixes simply weren't worth the effort. ## ggproto All ggplot2 objects are built using the ggproto system of object oriented programming. This OO system is used only in one place: ggplot2. This is mostly historical accident: ggplot2 started off using [proto]( https://cran.r-project.org/package=proto) because I needed mutable objects. This was well before the creation of (the briefly lived) [mutatr](http://vita.had.co.nz/papers/mutatr.html), reference classes and R6: proto was the only game in town. But why ggproto? Well when we turned to add an official extension mechanism to ggplot2, we found a major problem that caused problems when proto objects were extended in a different package (methods were evaluated in ggplot2, not the package where the extension was added). We tried converting to R6, but it was a poor fit for the needs of ggplot2. We could've modified proto, but that would've first involved understand exactly how proto worked, and secondly making sure that the changes didn't affect other users of proto. It's strange to say, but this is a case where inventing a new OO system was actually the right answer to the problem! Fortunately Winston is now very good at creating OO systems, so it only took him a day to come up with ggproto: it maintains all the features of proto that ggplot2 needs, while allowing cross package inheritance to work. Here's a quick demo of ggproto in action: ```{r ggproto-intro} A <- ggproto("A", NULL, x = 1, inc = function(self) { self$x <- self$x + 1 } ) A$x A$inc() A$x A$inc() A$inc() A$x ``` The majority of ggplot2 classes are immutable and static: the methods neither use nor modify state in the class. They're mostly used as a convenient way of bundling related methods together. To create a new geom or stat, you will just create a new ggproto that inherits from `Stat`, `Geom` and override the methods described below. ## Creating a new stat ### The simplest stat We'll start by creating a very simple stat: one that gives the complex hull (the _c_ hull) of a set of points. First we create a new ggproto object that inherits from `Stat`: ```{r chull} StatChull <- ggproto("StatChull", Stat, compute_group = function(data, scales) { data[chull(data$x, data$y), , drop = FALSE] }, required_aes = c("x", "y") ) ``` The two most important components are the `compute_group()` method (which does the computation), and the `required_aes` field, which lists which aesthetics must be present in order to for the stat to work. Next we write a layer function. Unfortunately, due to an early design mistake I called these either `stat_()` or `geom_()`. A better decision would have been to call them `layer_()` functions: that's a more accurate description because every layer involves a stat _and_ a geom. All layer functions follow the same form - you specify defaults in the function arguments and then call the `layer()` function, sending `...` into the `params` argument. The arguments in `...` will either be arguments for the geom (if you're making a stat wrapper), arguments for the stat (if you're making a geom wrapper), or aesthetics to be set. `layer()` takes care of teasing the different parameters apart and making sure they're stored in the right place: ```{r} stat_chull <- function(mapping = NULL, data = NULL, geom = "polygon", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ``` (Note that if you're writing this in your own package, you'll either need to call `ggplot2::layer()` explicitly, or import the `layer()` function into your package namespace.) Once we have a layer function we can try our new stat: ```{r} ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_chull(fill = NA, colour = "black") ``` (We'll see later how to change the defaults of the geom so that you don't need to specify `fill = NA` every time.) Once we've written this basic object, ggplot2 gives a lot for free. For example, ggplot2 automatically preserves aesthetics that are constant within each group: ```{r} ggplot(mpg, aes(displ, hwy, colour = drv)) + geom_point() + stat_chull(fill = NA) ``` We can also override the default geom to display the convex hull in a different way: ```{r} ggplot(mpg, aes(displ, hwy)) + stat_chull(geom = "point", size = 4, colour = "red") + geom_point() ``` ### Stat parameters A more complex stat will do some computation. Let's implement a simple version of `geom_smooth()` that adds a line of best fit to a plot. We create a `StatLm` that inherits from `Stat` and a layer function, `stat_lm()`: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = rng) mod <- lm(y ~ x, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm() ``` `StatLm` is inflexible because it has no parameters. We might want to allow the user to control the model formula and the number of points used to generate the grid. To do so, we add arguments to the `compute_group()` method and our wrapper function: ```{r} StatLm <- ggproto("StatLm", Stat, required_aes = c("x", "y"), compute_group = function(data, scales, params, n = 100, formula = y ~ x) { rng <- range(data$x, na.rm = TRUE) grid <- data.frame(x = seq(rng[1], rng[2], length = n)) mod <- lm(formula, data = data) grid$y <- predict(mod, newdata = grid) grid } ) stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + stat_lm(formula = y ~ poly(x, 10)) + stat_lm(formula = y ~ poly(x, 10), geom = "point", colour = "red", n = 20) ``` Note that don't _have_ to explicitly include the new parameters in the arguments for the layer, `...` will get passed to the right place anyway. But you'll need to document them somewhere so the user knows about them. Here's a brief example. Note `@inheritParams ggplot2::stat_identity`: that will automatically inherit documentation for all the parameters also defined for `stat_identity()`. ```{r} #' @inheritParams ggplot2::stat_identity #' @param formula The modelling formula passed to \code{lm}. Should only #' involve \code{y} and \code{x} #' @param n Number of points used for interpolation. stat_lm <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, n = 50, formula = y ~ x, ...) { layer( stat = StatLm, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(n = n, formula = formula, na.rm = na.rm, ...) ) } ``` ### Picking defaults Sometimes you have calculations that should performed once for the complete dataset, not once for each group. This is useful for picking sensible default values. For example, if we want to do a density estimate, it's reasonable to pick one bandwidth for the whole plot. The following Stat creates a variation of the `stat_density()` that picks one bandwidth for all groups by choosing the mean of the "best" bandwidth for each group (I have no theoretical justification for this, but it doesn't seem unreasonable). To do this we override the `setup_params()` method. It's passed the data and a list of params, and returns an updated list. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", setup_params = function(data, params) { if (!is.null(params$bandwidth)) return(params) xs <- split(data$x, data$group) bws <- vapply(xs, bw.nrd0, numeric(1)) bw <- mean(bws) message("Picking bandwidth of ", signif(bw, 3)) params$bandwidth <- bw params }, compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, y = d$y) } ) stat_density_common <- function(mapping = NULL, data = NULL, geom = "line", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, bandwidth = NULL, ...) { layer( stat = StatDensityCommon, data = data, mapping = mapping, geom = geom, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(bandwidth = bandwidth, na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, colour = drv)) + stat_density_common() ggplot(mpg, aes(displ, colour = drv)) + stat_density_common(bandwidth = 0.5) ``` I recommend using `NULL` as a default value. If you pick important parameters automatically, it's a good idea to `message()` to the user (and when printing a floating point parameter, using `signif()` to show only a few significant digits). ### Variable names and default aesthetics This stat illustrates another important point. If we want to make this stat usable with other geoms, we should return a variable called `density` instead of `y`. Then we can set up the `default_aes` to automatically map `density` to `y`, which allows the user to override it to use with different geoms: ```{r} StatDensityCommon <- ggproto("StatDensity2", Stat, required_aes = "x", default_aes = aes(y = ..density..), compute_group = function(data, scales, bandwidth = 1) { d <- density(data$x, bw = bandwidth) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, drv, colour = ..density..)) + stat_density_common(bandwidth = 1, geom = "point") ``` However, using this stat with the area geom doesn't work quite right. The areas don't stack on top of each other: ```{r} ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ``` This is because each density is computed independently, and the estimated `x`s don't line up. We can resolve that issue by computing the range of the data once in `setup_params()`. ```{r} StatDensityCommon <- ggproto("StatDensityCommon", Stat, required_aes = "x", default_aes = aes(y = ..density..), setup_params = function(data, params) { min <- min(data$x) - 3 * params$bandwidth max <- max(data$x) + 3 * params$bandwidth list( bandwidth = params$bandwidth, min = min, max = max, na.rm = params$na.rm ) }, compute_group = function(data, scales, min, max, bandwidth = 1) { d <- density(data$x, bw = bandwidth, from = min, to = max) data.frame(x = d$x, density = d$y) } ) ggplot(mpg, aes(displ, fill = drv)) + stat_density_common(bandwidth = 1, geom = "area", position = "stack") ggplot(mpg, aes(displ, drv, fill = ..density..)) + stat_density_common(bandwidth = 1, geom = "raster") ``` ### Exercises 1. Extend `stat_chull` to compute the alpha hull, as from the [alphahull](https://cran.r-project.org/package=alphahull) package. Your new stat should take an `alpha` argument. 1. Modify the final version of `StatDensityCommon` to allow the user to specify the `min` and `max` parameters. You'll need to modify both the layer function and the `compute_group()` method. 1. Compare and contrast `StatLm` to `ggplot2::StatSmooth`. What key differences make `StatSmooth` more complex than `StatLm`? ## Creating a new geom It's harder to create a new geom than a new stat because you also need to know some grid. ggplot2 is built on top of grid, so you'll need to know the basics of drawing with grid. If you're serious about adding a new geom, I'd recommend buying [R graphics](http://amzn.com/B00I60M26G) by Paul Murrell. It tells you everything you need to know about drawing with grid. ### A simple geom It's easiest to start with a simple example. The code below is a simplified version of `geom_point()`: ```{r GeomSimplePoint} GeomSimplePoint <- ggproto("GeomSimplePoint", Geom, required_aes = c("x", "y"), default_aes = aes(shape = 19, colour = "black"), draw_key = draw_key_point, draw_panel = function(data, panel_scales, coord) { coords <- coord$transform(data, panel_scales) grid::pointsGrob( coords$x, coords$y, pch = coords$shape, gp = grid::gpar(col = coords$colour) ) } ) geom_simple_point <- function(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePoint, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_simple_point() ``` This is very similar to defining a new stat. You always need to provide fields/methods for the four pieces shown above: * `required_aes` is a character vector which lists all the aesthetics that the user must provide. * `default_aes` lists the aesthetics that have default values. * `draw_key` provides the function used to draw the key in the legend. You can see a list of all the build in key functions in `?draw_key` * `draw_group()` is where the magic happens. This function takes three arguments and returns a grid grob. It is called once for each panel. It's the most complicated part and is described in more detail below. `draw_group()` has three arguments: * `data`: a data frame with one column for each aesthetic. * `panel_scales`: a list containing information about the x and y scales for the current panel. * `coord`: an object describing the coordinate system. Generally you won't use `panel_scales` and `coord` directly, but you will always use them to transform the data: `coords <- coord$transform(data, panel_scales)`. This creates a data frame where position variables are scaled to the range 0--1. You then take this data and call a grid grob function. (Transforming for non-Cartesian coordinate systems is quite complex - you're best of transforming your data to the form accepted by an existing ggplot2 geom and passing it.) ### Collective geoms Overriding `draw_panel()` is most appropriate if there is one graphic element per row. In other cases, you want graphic element per group. For example, take polygons: each row gives one vertex of a polygon. In this case, you should instead override `draw_group()`: The following code makes a simplified version of `GeomPolygon`: ```{r} GeomSimplePolygon <- ggproto("GeomPolygon", Geom, required_aes = c("x", "y"), default_aes = aes( colour = NA, fill = "grey20", size = 0.5, linetype = 1, alpha = 1 ), draw_key = draw_key_polygon, draw_group = function(data, panel_scales, coord) { n <- nrow(data) if (n <= 2) return(grid::nullGrob()) coords <- coord$transform(data, panel_scales) # A polygon can only have a single colour, fill, etc, so take from first row first_row <- coords[1, , drop = FALSE] grid::polygonGrob( coords$x, coords$y, default.units = "native", gp = grid::gpar( col = first_row$colour, fill = scales::alpha(first_row$fill, first_row$alpha), lwd = first_row$size * .pt, lty = first_row$linetype ) ) } ) geom_simple_polygon <- function(mapping = NULL, data = NULL, stat = "chull", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( geom = GeomSimplePolygon, mapping = mapping, data = data, stat = stat, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_simple_polygon(aes(colour = class), fill = NA) ``` There are a few things to note here: * We override `draw_group()` instead of `draw_layer()` because we want one polygon per group, not one polygon per row. If you look at the source code for the original `GeomPolygon` you'll see it actually overrides `geom_layer()` because it uses some tricks to make `polygonGrob()` produce multiple polygons in one call. This is considerably more complicated, but gives better performance. * If the data contains two or fewer points, there's no point trying to draw a polygon, so we return a `nullGrob()`. This is the graphical equivalent of `NULL`: it's a grob that doesn't draw anything and doesn't take up any space. * Note the units: `x` and `y` should always be drawn in "native" units. (The default units for `pointGrob()` is a native, so we didn't need to change it there). `lwd` is measured in points, but ggplot2 uses mm, so we need to multiply it by the adjustment factor `.pt`. ### Inheriting from an existing Geom Sometimes you just want to make a small modification to an existing geom. In this case, rather than inheriting from `Geom` you can inherit from an existing subclass. For example, we might want to change the defaults for `GeomPolygon` to work better with `StatChull`: ```{r} GeomPolygonHollow <- ggproto("GeomPolygonHollow", GeomPolygon, default_aes = aes(colour = "black", fill = NA, size = 0.5, linetype = 1, alpha = NA) ) geom_chull <- function(mapping = NULL, data = NULL, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) { layer( stat = StatChull, geom = GeomPolygonHollow, data = data, mapping = mapping, position = position, show.legend = show.legend, inherit.aes = inherit.aes, params = list(na.rm = na.rm, ...) ) } ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_chull() ``` This doesn't allow you to use different geoms with the stat, but that seems appropriate here since the convex hull is primarily a polygonal feature. ### Exercises 1. Compare and contrast `GeomPoint` with `GeomSimplePoint`. 1. Compare and contract `GeomPolygon` with `GeomSimplePolygon`. ## Creating your own theme If you're going to create your own complete theme, there are a few things you need to know: * Overriding existing elements, rather than modifying them * The four global elements that affect (almost) every other theme element * Complete vs. incomplete elements ### Overriding elements By default, when you add a new theme element, it inherits values from the existing theme. For example, the following code sets the key colour to red, but it inherits the existing fill colour: ```{r} theme_grey()$legend.key new_theme <- theme_grey() + theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` To override it completely, use `%+replace%` instead of `+`: ```{r} new_theme <- theme_grey() %+replace% theme(legend.key = element_rect(colour = "red")) new_theme$legend.key ``` ### Global elements There are four elements that affect the global appearance of the plot: Element | Theme function | Description -------------|-------------------|------------------------ line | `element_line()` | all line elements rect | `element_rect()` | all rectangular elements text | `element_text()` | all text title | `element_text()` | all text in title elements (plot, axes & legend) These set default properties that are inherited by more specific settings. These are most useful for setting an overall "background" colour and overall font settings (e.g. family and size). ```{r axis-line-ex} df <- data.frame(x = 1:3, y = 1:3) base <- ggplot(df, aes(x, y)) + geom_point() + theme_minimal() base base + theme(text = element_text(colour = "red")) ``` You should generally start creating a theme by modifying these values. ### Complete vs incomplete It is useful to understand the difference between complete and incomplete theme objects. A *complete* theme object is one produced by calling a theme function with the attribute `complete = TRUE`. Theme functions `theme_grey()` and `theme_bw()` are examples of complete theme functions. Calls to `theme()` produce *incomplete* theme objects, since they represent (local) modifications to a theme object rather than returning a complete theme object per se. When adding an incomplete theme to a complete one, the result is a complete theme. Complete and incomplete themes behave somewhat differently when added to a ggplot object: * Adding an incomplete theme augments the current theme object, replacing only those properties of elements defined in the call to `theme()`. * Adding a complete theme wipes away the existing theme and applies the new theme. ggplot2/vignettes/ggplot2-specs.Rmd0000644000175100001440000001305012565154537017027 0ustar hornikusers--- title: "Aesthetic specifications" author: "Hadley Wickham" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Aesthetic specifications} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} library(ggplot2) knitr::opts_chunk$set(fig.dpi = 96) ``` This vignette summarises the various formats that grid drawing functions take. Most of this information is available scattered throughout the R documentation. This appendix brings it all together in one place. ## Colour Colours can be specified with: * A __name__, e.g., `"red"`. R has `r length(colours())` built-in named colours, which can be listed with `colours()`. The Stowers Institute provides a nice printable pdf that lists all colours: . * An __rgb specification__, with a string of the form `"#RRGGBB"` where each of the pairs `RR`, `GG`, `BB` consists of two hexadecimal digits giving a value in the range `00` to `FF` You can optionally make the colour transparent by using the form `"#RRGGBBAA". * An __NA__, for a completely transparent colour. * The [munsell](https://github.com/cwickham/munsell) package, Charlotte Wickham, provides a wrapper around the colour system designed by Alfred Munsell. ## Line type {#sec:line-type-spec} Line types can be specified with: * An __integer__ or __name__: 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash, as shown below: ```{r} lty <- c("blank", "solid", "dashed", "dotted", "dotdash", "longdash","twodash") linetypes <- data.frame( y = seq_along(lty), lty = lty ) ggplot(linetypes, aes(0, y)) + geom_segment(aes(xend = 5, yend = y, linetype = lty)) + scale_linetype_identity() + geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * The lengths of on/off stretches of line. This is done with a string containing 2, 4, 6, or 8 hexadecimal digits which give the lengths of c consecutive lengths. For example, the string `"33"` specifies three units on followed by three off and `"3313"` specifies three units on followed by three off followed by one on and finally three off. The five standard dash-dot line types described above correspond to 44, 13, 134, 73, and 2262. The `size` of a line is its width in mm. ## Shape {#sec:shape-spec} Shapes take four types of values: * An __integer__ in $[0, 25]$: ```{r} shapes <- data.frame( shape = c(0:19, 22, 21, 24, 23, 20), x = 0:24 %/% 5, y = -(0:24 %% 5) ) ggplot(shapes, aes(x, y)) + geom_point(aes(shape = shape), size = 5, fill = "red") + geom_text(aes(label = shape), hjust = 0, nudge_x = 0.15) + scale_shape_identity() + expand_limits(x = 4.1) + scale_x_continuous(NULL, breaks = NULL) + scale_y_continuous(NULL, breaks = NULL) ``` * A __single character__, to use that character as a plotting symbol. * A `.` to draw the smallest rectangle that is visible, usualy 1 pixel. * An `NA`, to draw nothing. Note that shapes 21-24 have both stroke `colour` and a `fill`. The size of the filled part is controlled by `size`, the size of the stroke is controlled by `stroke`. Each is measured in mm, and the total size of the point is the sum of the two. Note that the size is constant along the diagonal in the following figure. ```{r} sizes <- expand.grid(size = (0:3) * 2, stroke = (0:3) * 2) ggplot(sizes, aes(size, stroke, size = size, stroke = stroke)) + geom_abline(slope = -1, intercept = 6, colour = "white", size = 6) + geom_point(shape = 21, fill = "red") + scale_size_identity() ``` ## Text ### Font size ### Font face There are only three fonts that are guaranteed to work everywhere: "sans" (the default), "serif", or "mono": ```{r} df <- data.frame(x = 1, y = 3:1, family = c("sans", "serif", "mono")) ggplot(df, aes(x, y)) + geom_text(aes(label = family, family = family)) ``` It's trickier to include a system font on a plot because text drawing is done differently by each graphics device (GD). There are five GDs in common use (`png()`, `pdf()`, on screen devices for Windows, Mac and Linux), so to have a font work everywhere you need to configure five devices in five different ways. Two packages simplify the quandary a bit: * `showtext` makes GD-independent plots by rendering all text as polygons. * `extrafont` converts fonts to a standard format that all devices can use. Both approaches have pros and cons, so you will to need to try both of them and see which works best for your needs. ### Family ### Justification Horizontal and vertical justification have the same parameterisation, either a string ("top", "middle", "bottom", "left", "center", "right") or a number between 0 and 1: * top = 1, middle = 0.5, bottom = 0 * left = 0, center = 0.5, right = 1 ```{r} just <- expand.grid(hjust = c(0, 0.5, 1), vjust = c(0, 0.5, 1)) just$label <- paste0(just$hjust, ", ", just$vjust) ggplot(just, aes(hjust, vjust)) + geom_point(colour = "grey70", size = 5) + geom_text(aes(label = label, hjust = hjust, vjust = vjust)) ``` Note that you can use numbers outside the range (0, 1), but it's not recommended. ggplot2/README.md0000644000175100001440000000200412570732054013126 0ustar hornikusers# ggplot2 [![Build Status](https://travis-ci.org/hadley/ggplot2.png?branch=master)](https://travis-ci.org/hadley/ggplot2) [![CRAN_Status_Badge](http://www.r-pkg.org/badges/version/ggplot2)](http://cran.r-project.org/package=ggplot2) ggplot2 is a plotting system for R, based on the grammar of graphics, which tries to take the good parts of base and lattice graphics and avoid bad parts. It takes care of many of the fiddly details that make plotting a hassle (like drawing legends) as well as providing a powerful model of graphics that makes it easy to produce complex multi-layered graphics. Find out more at , and check out the nearly 500 examples of ggplot in use. If you're interested, you can also sign up to the [ggplot2 mailing list at](http://groups.google.com/group/ggplot2). ## Installation Get the released version from CRAN: ```R install.packages("ggplot2") ``` Or the development version from github: ```R # install.packages("devtools") devtools::install_github("hadley/ggplot2") ``` ggplot2/MD50000644000175100001440000005201012634752653012171 0ustar hornikusers128c13758924244b835c69aed44c94a7 *DESCRIPTION c6f6758c306983417f8c23f0d038525a *NAMESPACE 7171046778fbb6a06b96a48bb9c6cb75 *R/aaa-.r 41c9ba0c55c5b2dac5c2ba80a9e6f0f0 *R/aes-calculated.r a744d7b67886c9a66068cffb5e71699a *R/aes-colour-fill-alpha.r d901c095dc98fd19f788ed7814152f8d *R/aes-group-order.r 53f129179804c8dbeb9a5fba52d5b056 *R/aes-linetype-size-shape.r 9b2ae79db47a3528738807199529ff3c *R/aes-position.r fa764c0f3d99ed90d728bbf57c41e186 *R/aes.r 7197b034fc85230edffc479af5cd1f5d *R/annotation-custom.r 1c56152690873e5cb80a9ede93222a45 *R/annotation-logticks.r 23a65ca6c3e4ce2ffa1d11b94171e524 *R/annotation-map.r 39f637bb6e438cfbe001e2f86eedc1f2 *R/annotation-raster.r 61cd6012d06c8f01a7574f7bf48bfc31 *R/annotation.r eb4a7f643fd1a9c47fb64ed576a10e87 *R/autoplot.r 57939239ee7146de73a2aba6de11f5a0 *R/bench.r 8081549496f51360a79570c233a1929f *R/coord-.r 7f06acc0754ed9be0e8499cf393c1d25 *R/coord-cartesian-.r 09cadc86b4cc436f073d468b5024b7bc *R/coord-fixed.r c7a07694ef7c686f232fe3c0ba4e673a *R/coord-flip.r 0dd48578dbceafa78fc2e170032790a2 *R/coord-map.r 3cd117fab4fb175c188202dc7078b951 *R/coord-munch.r 5a85a120c7c97d7528035e105a76a24b *R/coord-polar.r e042de925de133ab9978221438997b4e *R/coord-quickmap.R 5b7efc37f850dba08b4dffb964122000 *R/coord-transform.r d38997c46c827930f845c5f239aff407 *R/data.R 1cc34cbdb97662693545d1f09f53c080 *R/facet-.r 3f8b216d933c934fea5407033678b5e6 *R/facet-grid-.r 455f53f8eeafdb025e1923f8fafc1105 *R/facet-labels.r bf8ddb7258fdc55f31454b5f6b82ab1e *R/facet-layout.r 10fead8ab5f75e313766eef213ca175d *R/facet-locate.r 9fabb1104100303c97d6132cf7aceb64 *R/facet-null.r 97efe28b15c4317698b0ec49e5c2b279 *R/facet-viewports.r d2e160b5c7f9037554062df1ce3a274b *R/facet-wrap.r 185ec0bbe6e5fb2900d3bcb8b3a98947 *R/fortify-lm.r 5ab10594c4dae94d6118c0a2655d5736 *R/fortify-map.r 1e6a486f18bfe39121a436f47922f67c *R/fortify-multcomp.r c48d8fa6657357fbaaca6335107e0fc9 *R/fortify-spatial.r 4f2c97115990bc2a207aa4cb1d54ae45 *R/fortify.r 045b781a9d085ecbd8f6fbd6fc14ce8c *R/geom-.r af5f4983deed90c750742a47190d4bc4 *R/geom-abline.r 87f066dc91ba0cce9b707a412380bd4c *R/geom-bar.r 5acd1dfba0920f7bc074c3b97a9a49c3 *R/geom-bin2d.r 32e1513b9e272076f40db4989a0124c1 *R/geom-blank.r 807f7c8a54d5cb65ba518ad6abd2a579 *R/geom-boxplot.r e647994ca5e70887fca98af44e0082e1 *R/geom-contour.r 5e0493d8775001ac459c2d6efb6b0821 *R/geom-count.r 842f2e7f5d39d180dd3d9a7a51914ed3 *R/geom-crossbar.r 60b7162c3ab48cee151496229a820b32 *R/geom-curve.r 55172848e9beb54df54b8d6d2d2f91ae *R/geom-defaults.r f1298f9045e22ac4799c23205c62440a *R/geom-density.r a349028790f849972489c2d65f3f9ce8 *R/geom-density2d.r dfa78318176fbc810488bda4231b0856 *R/geom-dotplot.r f06b64fc0383b9b48ff468d0325a5438 *R/geom-errorbar.r 2593f86192e79334bc9e29ebb3ae1674 *R/geom-errorbarh.r 36d7c7bee86501f609fc799081852f0a *R/geom-freqpoly.r 1deee106b67853189207fb765d388376 *R/geom-hex.r cdfe6e9751445c5e20f51aad0f909796 *R/geom-histogram.r fd337aca62b5bc57c6cdb9463a22d22b *R/geom-hline.r b7855c6dd4d98aecd805621a9e65f49c *R/geom-jitter.r 29b89a9cdb090bd89a4bcd1d042f3d2e *R/geom-label.R 74e854863fe5d088782bf0fb828a3d92 *R/geom-linerange.r d70b6e894ae2eb0161de5b5cb3986c65 *R/geom-map.r f2fcfe75931bb242a205d2a1f4630e24 *R/geom-path.r 8cc237ce23b928aa87b1e58c74f5d607 *R/geom-point.r 62eeb8af6b42aec1b772d3fcf63f2fd0 *R/geom-pointrange.r 09143a1f81d3422e5ead8a6ef39db9eb *R/geom-polygon.r d3eb045bf5cf536cee2d68428b365451 *R/geom-quantile.r 7ea959a7d466659333a8c1398edf624b *R/geom-raster.r 3117863095c2652d0c61609c47e304e8 *R/geom-rect.r c1d8b2f823b4c5c6c2bdad80768e61e2 *R/geom-ribbon.r 19bc5cc0f8b3c8bf49a65039bf9d6fb2 *R/geom-rug.r f6d8792e03c246a5398c5e623237c221 *R/geom-segment.r 616550b16de176986b8d76d56ff7bb83 *R/geom-smooth.r 2b93a744cc60d182de6554aebc2f2a94 *R/geom-spoke.r ee049b1fa8922d3492401cc7554c71ba *R/geom-text.r 945dadbab75c776e940086f27ac49ec6 *R/geom-tile.r c078dd69473252fcf572d48eda009b2e *R/geom-violin.r 6aaa2cb92cda27382ff4b613a8f646cc *R/geom-vline.r 7fbb4a1b3a36deea08d5990dc9b82bb6 *R/ggplot2.r 070781ab73a3e2cf5ea10abe2dd044fd *R/ggproto.r abe3e869859c7f73fa4a9721df2ef29e *R/grob-absolute.r 57c5dee7337f17082fde9a43d071cc2c *R/grob-dotstack.r 95d44bd0d180dca5892db5674bec6362 *R/grob-null.r a432566834bd4321476e8c8e1a5993f6 *R/grouping.r a81c889fb0d614d49262f7f627c6d314 *R/guide-colorbar.r 791c3a32f35493bf109ecd6264d39acb *R/guide-legend.r 4ffffa04a45a0fdc98d0b4a86b3964fd *R/guides-.r a6a7662bace821f91da3ababf1f42c11 *R/guides-axis.r 91319825178764869b02d5ed527637e8 *R/guides-grid.r 09651c30b88b748c5b7da7a41efbcd49 *R/labels.r ba4a38bde128d1edf27891aba63596a9 *R/layer.r cb041a872c511f7508ccf9e0b7a2b68e *R/legend-draw.r 22ac4e1d41ee5809fd19a21347000af6 *R/limits.r 7a443f2662cd5ad7545d6fed891e2dd6 *R/margins.R 3e7952b15074bc30956d1e77c286d724 *R/panel.r 0b477c5a9747234a69c00ba335675e05 *R/plot-build.r 929aa868d774ed75060e6d45fc5c1ea3 *R/plot-construction.r e7d2e29ecfc09bffcf8518894eec414b *R/plot-last.r c8d0ebe260e3701226750c0e8d8707a6 *R/plot.r 636580e38110490dd2f38b09bba0152c *R/position-.r 9bb9cfaa59dd9d64dfcf2388f4ba0cdf *R/position-collide.r 29baf4dc9462147822635b22109fb527 *R/position-dodge.r d30ffc9364ffa8b08256f601b7d67fcd *R/position-fill.r 8d8c6f5432e9f61de2fe222922b93142 *R/position-identity.r fe1e1022e11f937a360352a26255e8ac *R/position-jitter.r 47c7143f55eb5b16ceaaa97b12c583f5 *R/position-jitterdodge.R 21b4b44525017a08e41efa0888724c01 *R/position-nudge.R 3bf43bb214de063904c603ce4f4909d2 *R/position-stack.r d88b979e879b28ea83929c9d410fb1bf *R/quick-plot.r 42d7a80d2fdd0e3b2a53b58a0cbf9be9 *R/range.r cd3cc7621245ed40b84344a36f554435 *R/save.r f73c05f4e123121f6d83ee20bca85176 *R/scale-.r 1b99c2f65e2b210e26f686a379629341 *R/scale-alpha.r a9d9dad9fd80dd209ebe50d8ea1d5558 *R/scale-brewer.r 04a1eb6b2c8144a6528882dc64f95934 *R/scale-continuous.r 61e114a0c99a03328d6dabcacc0ec9ad *R/scale-date.r a1aa9f1df3072a478c84df63f5aa3478 *R/scale-discrete-.r d577e4befed18b3306ff53f9c2a917e7 *R/scale-gradient.r bf1d0a9a8698b092799af1c0f966034a *R/scale-grey.r d0248ff685ce6bda7eba6fb9272e13dd *R/scale-hue.r e96f1acf5f333a0e2d3fb94ba0ac1682 *R/scale-identity.r 7501deaed0c692d084705890995952df *R/scale-linetype.r 6bf98c26a2f17a42134941151ef25af9 *R/scale-manual.r 8b1c96c7b6214e45adbb96b805d2789b *R/scale-shape.r a10109b9f412ee7beb43bb7f607e00cb *R/scale-size.r ad8afa0ba9fb2fcfe7ec5f4852611d21 *R/scales-.r 002772e3a128c3074f4d3100c9f63d9d *R/stat-.r 97d6ba417371a436a14709de57c24d99 *R/stat-bin.r aff0b85ad8b4b5d75005e3d67dbe97f3 *R/stat-bin2d.r ee8c8631bed750cf47fe15b282174d4b *R/stat-bindot.r dac71107f1eda06b162b49e0f74294b4 *R/stat-binhex.r 5b8996c2cb08ff36d428fcdeeabee8ea *R/stat-boxplot.r e2c5d5c372c6604ce7ed781e1b56dc69 *R/stat-contour.r 5d0a381bf3c61f5cad1adf30c75aaa72 *R/stat-count.r 341a44248958c77541327a07b383dd4b *R/stat-density-2d.r 29a474e17d850a9cd5021e2ad4cbd783 *R/stat-density.r cfcc728918f7cdcd01959d85da3b2fba *R/stat-ecdf.r 5c659828ce50d18248b77519e86ad8ee *R/stat-ellipse.R b4d52166558a1233a8e81f6df67b4dd7 *R/stat-function.r e2d0ceaf1188627706972441d8b1ec60 *R/stat-identity.r 0b302a713eaa4b767f8fc8efc4e0d2c8 *R/stat-qq.r 8a7f4804dc21330353cb541ba994ed94 *R/stat-quantile.r 72ebe9d0bb085a8be73b6eb41c7a2752 *R/stat-smooth-methods.r efc5b7b102d6682b620765f0aa21eb4b *R/stat-smooth.r 52c51464a86d459f00cd3c077f9ee627 *R/stat-sum.r f0f02eab3acaa7c1f3d4ca9a3ce9178b *R/stat-summary-2d.r 4ac747a8b5be7b8bc44b166363ee8567 *R/stat-summary-bin.R d8b6fe46eb82f9bd01ace95823e03ec0 *R/stat-summary-hex.r 423506c429776259467a670e78d21e56 *R/stat-summary.r 9f3e890e1164da8732d13283e43389bc *R/stat-unique.r 5714d97e361067084f41c4620545d714 *R/stat-ydensity.r c92420a879310b86c1bcbb1e6fb45425 *R/summary.r ab69c1ba381733ebf620dcf10b227445 *R/theme-defaults.r 7beceb23e6e35270cdf25d7df940fedd *R/theme-elements.r df5cd14fbf8b04c0ff12bda88c247317 *R/theme.r 1239cf068ccaa1a1c58d38793e91caf3 *R/translate-qplot-base.r b97bd5e0d2c69643142fb2b4529a0cad *R/translate-qplot-ggplot.r ad2f08f76dac34814872123de6a2654a *R/translate-qplot-lattice.r 31fad80a907f5ec247287296b5ffa4a4 *R/utilities-break.r 462f0313976c787cd44700fe5346439b *R/utilities-grid.r 6f55c444360fe627ccd3669b74f122da *R/utilities-help.r 3bef847b27dc1a7182eff846527f6fc6 *R/utilities-matrix.r a2f6c224351ced0c10b6f55dcd941fd3 *R/utilities-resolution.r e72a2689dc0d2076b7492a6ebd165b62 *R/utilities-table.r ae40757394892074687c9d11a7744f20 *R/utilities.r b2fdc194c563ec6312f20e74382951c6 *R/zxx.r 9ba24b6237d2e367c3f4c30d8cd968d1 *R/zzz.r 0eb9195324e6152acd04d0e853a8b455 *README.md 45b569636a7954e0fe2bf7f8c9fcad99 *build/partial.rdb 854144184597775f66eeacd20d7b0552 *build/vignette.rds 7fd28ad1feab3e3c773313672cd1b3be *data/diamonds.rda 1c883c4bb873c21cd428435264c456d7 *data/economics.rda 3cc1cdb7f53ac95b7346683e44e225d1 *data/economics_long.rda 27720de2f50f4a1fbac825226021806e *data/faithfuld.rda cf670e82bef3beba32bb2b4197276036 *data/luv_colours.rda 507bdb348d1d5cf1f8a162a46055f1d7 *data/midwest.rda 0aa41f897a20f3f952c11335d73da1a2 *data/mpg.rda c6d2b711873dc702d39de601f683ebdd *data/msleep.rda e1ef68be302f256fe79e1e2833f5f50f *data/presidential.rda d419c85de9cb971b7ebec959a836f72c *data/seals.rda 2012af9687f6f5813b8aa6aa86773c67 *data/txhousing.rda 8c412b9bcc5ff77ba07b0488ea29a79d *inst/CITATION 3cd9eb0fa04c028287aecdac2bf95cdd *inst/doc/extending-ggplot2.R 3ea1eef97dfdacc7cd6703ae5e1bb2ed *inst/doc/extending-ggplot2.Rmd cc4415dc48f5a5b6ab6701d431b5aa6e *inst/doc/extending-ggplot2.html fd4fffee04dfb833e03497c4701be1b4 *inst/doc/ggplot2-specs.R 580964d5ac3b6030ddbfeb79f5123db3 *inst/doc/ggplot2-specs.Rmd 50e57550b42bbc72e7d8be3f67dbe851 *inst/doc/ggplot2-specs.html d41d8cd98f00b204e9800998ecf8427e *inst/staticdocs/README.md 7a09459ca2898424c3714a03f20665fd *inst/staticdocs/footer.html 923198a65466326dfb62fec20e793e3c *inst/staticdocs/head.html 8a0e4eb3cf19379924a78bc3f6fd3d7d *inst/staticdocs/icons.R 4add1191e76ffb056578dbe4272159e7 *inst/staticdocs/index.r 56c75450069dc75bc81998ee2ec1e689 *man/absoluteGrob.Rd ff67ba09d9d3541a10c519c3ed0d055c *man/add_theme.Rd 20f0528eb3688034fab93fc721b65409 *man/aes.Rd f77426680c2a929cb9ad19f8aa7613d4 *man/aes_.Rd 7712e3e5b0ab03a32404a8f034aa10f0 *man/aes_all.Rd ef8ce354cb3b609f4c33f53cd26821cc *man/aes_auto.Rd 03b05c2b533b5a88d81a6ac37cd5de77 *man/aes_colour_fill_alpha.Rd 48368f5dea136a4ec910b3c2e77cbf11 *man/aes_group_order.Rd d7a853f2e395f95617f5b6da138cec65 *man/aes_linetype_size_shape.Rd a99dcba86e888d8d6641653c7a5b972d *man/aes_position.Rd da7b4f468468cab96bb8573443141fb3 *man/annotate.Rd c6f56de489e678ee0c1e9ffa8603a618 *man/annotation_custom.Rd e3f138140bdadb64a8aa2038218f4e25 *man/annotation_logticks.Rd 8c8c2ba1b4e343fb916b354a6560fcb5 *man/annotation_map.Rd 9a00f65c63148ff18f9fd46067bbdb4e *man/annotation_raster.Rd f428bf30bcd593b2b6940df5e04b7f58 *man/as.list.ggproto.Rd a01a9827585d5254017ca6ce9fbbb599 *man/as_labeller.Rd 43589aa720efd687662e0de7354eb4b0 *man/autoplot.Rd 9f6abc675b3e32de763c9d53fa9f77d0 *man/benchplot.Rd 1a343455cf735e38d3fabfa499221ad5 *man/borders.Rd 63c959e3e092bcf3a6fcc2366d3f1430 *man/calc_element.Rd 3e26b171206c01912b6d838c222eb49f *man/continuous_scale.Rd f6d9adf026157a00fd92df166ac675fa *man/coord_cartesian.Rd 61af3e0c70d351e48110df56657ca13e *man/coord_fixed.Rd ede8ed39297e89fe4dc8d9bb0eeb422a *man/coord_flip.Rd 79cd96819a42d0185ce072d5ca853dfa *man/coord_map.Rd 03ea1bbb888bb836e26d1d04ce859a76 *man/coord_munch.Rd 3af68f29c13c188fc422415813089498 *man/coord_polar.Rd 1025087210f72dabf5ef6308790b2c6e *man/coord_trans.Rd b3087f2c77e447cd21e6898615bfbf81 *man/cut_interval.Rd b3ce84b7cf66c2930d2a6ee63873f72d *man/diamonds.Rd a2b6fbd168d4e755310000b7cc1fb60d *man/discrete_scale.Rd 6be3e22abc22f2b478bbf7bf6f79e10c *man/draw_key.Rd 4e7e5a544d058f424a52f3c2dba4cd91 *man/economics.Rd c4df9291f631ea3cd24f69c97f02f1e2 *man/element_blank.Rd 1296c043ef8b9ed396cf6d0103f6f7ba *man/element_grob.Rd 0e777f87e5497e22240fcc4febf0edda *man/element_line.Rd 325bd1005487d98b4e7a39e2878c22ac *man/element_rect.Rd f5778a7dbfad57f255816ee8c590abfb *man/element_text.Rd 5d9d25976953ec27acfc6428556eb3aa *man/expand_limits.Rd df0176ef30dbfdde4cce9cea8381d99d *man/facet.Rd 70e412fc004ef63b4dd13987fa69e2f5 *man/facet_grid.Rd b79ffe497fda049f9f7718a4efa86867 *man/facet_null.Rd 772a5f2d18d65842decf6d7fce27df91 *man/facet_wrap.Rd 49314a7e941068d810878ceee132c904 *man/faithfuld.Rd 294388d79ebc5fef1db58f4c06d12523 *man/format.ggproto.Rd 84300d3fcdd22030ca8d1ac5d9f1df62 *man/fortify-multcomp.Rd 60662763b7a08678979a92f218c9537c *man/fortify.Rd 72f9d74ebc7f9b4354a702a02ac8acd4 *man/fortify.lm.Rd 720abd47d0d039c70334c93b327f3141 *man/fortify.map.Rd 7602d9d65104b9bc4e204bcb7894f445 *man/fortify.sp.Rd dcb5d4f5abb536b72f9350c8ff5c1a44 *man/geom_abline.Rd d5ffd3b3b476392c0de7e59fcc0d4cae *man/geom_bar.Rd 86fd822c0dab391d0b021c8a04c39759 *man/geom_bin2d.Rd e07433ef36f68faf0a09d6cbc0093a35 *man/geom_blank.Rd 0ad31ca2d92be8b02a38e825fa8e1d87 *man/geom_boxplot.Rd ebeac9abd59706401c4c0f8e07b3dc66 *man/geom_contour.Rd a431a225e971088a4ebcee99b346f904 *man/geom_count.Rd 9debbf163e919ac9c0a4f4fad2162e7d *man/geom_density.Rd 051c3ceff3b1f29d4605d6eae4960034 *man/geom_density_2d.Rd ff5676a104f025f5e14b0c14ad3ffe45 *man/geom_dotplot.Rd f617666ccea672d3ac7f7383b5030ae6 *man/geom_errorbarh.Rd c564a6814ccd3fe39d2d909ef5e79035 *man/geom_hex.Rd 0ee3581c134ee72ee0b1645c47938685 *man/geom_histogram.Rd 43e59c75d324f75f2d3602d1a8c0b088 *man/geom_jitter.Rd 4206d8f6928e9c26277795dfd0a8b59b *man/geom_linerange.Rd 900fc042ac2ccd6e686603b9b3de0b2f *man/geom_map.Rd e68a78e087c71b276e3645c2ded6cead *man/geom_path.Rd b2a28c9173a63654d78522dc0862ede8 *man/geom_point.Rd 9b54eb991ed2bf0ce3cf8167a4cf466b *man/geom_polygon.Rd f57ff34cf79711d370e6a48e6ce30801 *man/geom_quantile.Rd 4d3be4002eeaa64bc9103713e17bda4b *man/geom_ribbon.Rd a3e976f4161a198988ad8fb95365c3e8 *man/geom_rug.Rd 17121dc9468c91ae1b2566446cb8a591 *man/geom_segment.Rd 6ff1ac4aefc1cd657955b72d2c535005 *man/geom_smooth.Rd b6cdad5c6952b9dff9c2bd67ba30d295 *man/geom_spoke.Rd 36a08621b671333882290a948773c57c *man/geom_text.Rd 6fc616f1a1e28f726f7a895cbeb73031 *man/geom_tile.Rd a6bbbf06590523bff5f0389b15496cc2 *man/geom_violin.Rd dab0412cf340913187b9383bd173b4aa *man/gg-add.Rd f1075176114c6b91fdbf223719cd981a *man/gg_dep.Rd c63db10ccb04b87aedfdda2119ef9b5c *man/ggplot.Rd 238ef3805c533dc74575a0853d06c636 *man/ggplot2-ggproto.Rd a4bef608dde830e27ac03f259c102cef *man/ggplotGrob.Rd 449d55cacfef6d03d889df009992894e *man/ggplot_build.Rd 7aedf2453e47d8d2bebd38923501c60b *man/ggplot_gtable.Rd db86dd2f3896ef6a5950d64b0a4d2766 *man/ggproto.Rd 7fadc3359fc39669f9e3b3bd59dea9a0 *man/ggsave.Rd f30de9d8e16cc683c280267dc54db4e0 *man/ggtheme.Rd 7a6498b8983bc96328ce0846ce0e877c *man/graphical-units.Rd 6759e461416f3ce513ad249dd15fa106 *man/guide_colourbar.Rd 2bd2c77d6ef8806705a2b378cf4bad0a *man/guide_legend.Rd 81243640ba87fee316373900d47bd170 *man/guides.Rd 7e0bd3d61fe1df07da190c3ced288fdf *man/hmisc.Rd 630598fb99d0a7a34bbb146074dfacc0 *man/is.Coord.Rd 15366e61452b09ab99fe3c4d76402aad *man/is.facet.Rd 8656337fbb445f7df31749f916df4879 *man/is.ggplot.Rd b6171db99a23771ff09509040977439c *man/is.ggproto.Rd 9d8a05937e7e0b8637eded383b367400 *man/is.rel.Rd 9dd92b4dd7a88320e6d1486625f7f018 *man/is.theme.Rd 6d35b6f8b4fef5a3757a999d2294cadb *man/label_bquote.Rd 489c778eadaba0fc2ea1779450e723d1 *man/labeller.Rd 86f29d63e2e2434a227e2de707b8f54e *man/labellers.Rd b5821e641bcc949b92d3b27871ff5ff3 *man/labs.Rd ec27029cac6b31ea9157ef0feb154b07 *man/last_plot.Rd d70cf02322cd705691c803fbcd1f9695 *man/layer.Rd 115cedc87e2e5383505475fe2cf63054 *man/limits.Rd 377da418fcc446ccf31c060c52bc0d7a *man/lims.Rd 3ed091075707aa13724a9043b3ed2aa1 *man/luv_colours.Rd 21a16a89724a7fb35b1e4a83497bef74 *man/map_data.Rd 653ed592603548727d9ba6210fb4f448 *man/margin.Rd 95ceb14a8b8d499aa1e3a13318fc2b98 *man/mean_se.Rd 230020b63a1ed18e271efbb407269e64 *man/midwest.Rd ed26f5ff992715b558e465f84f9a5ee6 *man/mpg.Rd 1db47d6001687f68ad3ae1cb53cb1c0a *man/msleep.Rd a2e7c0d524aa4ddb36a5c3800adc00b2 *man/position_dodge.Rd ae3e6c3a943617e4d58eb0954a0c76e0 *man/position_identity.Rd a6e474584d501fccbc8f44c7b5cfc477 *man/position_jitter.Rd 17959133179918180ec83f11c4cbc621 *man/position_jitterdodge.Rd 605df25d4d57fa0117b5247aa1c15205 *man/position_nudge.Rd bec4dbb370a26eb76d196c9208f95e94 *man/position_stack.Rd c41b9d71182dd3680692b2de56254408 *man/presidential.Rd 3214de68f499011f976c396ae519e6de *man/print.ggplot.Rd f130ffe874ab878cfba9e43a145df148 *man/print.ggproto.Rd 2618d742cecc1748f77cd870aade6839 *man/qplot.Rd 774af14fcd1baed19c001ae81a31f2aa *man/reexports.Rd 2a3d7cca6cadd2c1c919f77f97fa118e *man/rel.Rd d7f87c2dfc2d156fb61cba090a620299 *man/remove_missing.Rd 0945809c10e67d31c5337b7300d14d42 *man/resolution.Rd 7646f1860ccfcfdef643a36a96838422 *man/scale_alpha.Rd 89d50c11d76e3222056ca9bef1eee95c *man/scale_brewer.Rd 1d97e27509e6d0ac39fc87e598d337a9 *man/scale_continuous.Rd 445d9ce9a48c7656f7e0e196a76edc29 *man/scale_date.Rd 1ce0563c5f4297d788925a7298e1a83d *man/scale_discrete.Rd 82457894e9d32c0b19792dde26efdec4 *man/scale_gradient.Rd cf572e09e6ec62dc446f6ee845713751 *man/scale_grey.Rd 2315b109bc3814b19fe1eca32d71fc45 *man/scale_hue.Rd f6a2295e5df163391b3759359def22cb *man/scale_identity.Rd cdf000a350d3bc9df114f5d73889becb *man/scale_linetype.Rd 7b1d99d5983f282fd910e9b53378f0c6 *man/scale_manual.Rd e421384c765694757e3a2676f6d44fa0 *man/scale_shape.Rd 6443a0c5dfb9614e648721ae343609a1 *man/scale_size.Rd b59ea5ba748f6cff46c84679997afc9b *man/seals.Rd 1056d55d33485453dd04e35394dddbac *man/should_stop.Rd ce238a515ba75aaa73ab63f3f7de53cd *man/stat_ecdf.Rd a2e10d53569214aa5a85a1ce54acddd2 *man/stat_ellipse.Rd bc1b38dfbfd9f629ec5d575a27e2d6a9 *man/stat_function.Rd c488178bbf7011597fadf82333a53262 *man/stat_identity.Rd c8327ec1ecf7807bc836c554c6259e99 *man/stat_qq.Rd 29e597040e07a445416d688995bf48a2 *man/stat_summary.Rd a3362e1e10d662c578157a0a05d90326 *man/stat_summary_2d.Rd 6e346ef82bfa85da9c0179c309ce7711 *man/stat_unique.Rd ab1fa2e5b12d61345c6df1c55d057290 *man/summary.ggplot.Rd ddb990cb82eceb1692278ab09a7771ec *man/theme.Rd 0b1a77dc069162e990936c72515fcbf8 *man/theme_update.Rd ec58a310165674abab536ca72c129ac5 *man/transform_position.Rd ca96d351fe279c59980265de693fe286 *man/translate_qplot_base.Rd 8feeb91c8e5d9077dc5a37ed1808af46 *man/translate_qplot_ggplot.Rd 8eba2685b5b409df90036b2251587bcd *man/translate_qplot_lattice.Rd d8ce22b7718402206269b27a8f954b22 *man/txhousing.Rd efdbab8bf593c178c64d6e1fc22205cb *man/update_defaults.Rd df4c14b5a8d448e6bab888cab8831378 *man/update_labels.Rd 00df4f81231118534f870304920f88db *man/waiver.Rd 9ef186947b49d31af9fec818c266e4ce *man/zeroGrob.Rd d61ade7569d3176888310444bed0e4ef *tests/testthat.R d3a921ea3008eada9d101257f4f15594 *tests/testthat/helper-plot-data.r 1076ad0ef6acd3a78dd8db456f9bba04 *tests/testthat/test-aes-grouping.r 3495ad6baee576d4dba787926e739f01 *tests/testthat/test-aes-setting.r 56417865028605cba1c09e3a5f39663a *tests/testthat/test-aes.r 1093aca9aab9868183b5357b945ed379 *tests/testthat/test-annotate.r 9245ba261a33250b76c72466bcbb1ebe *tests/testthat/test-boxplot.r dfb45a5e2f1c12d8ac1c5021a7d642af *tests/testthat/test-build.r a61803e15d2625dc599faa8f3f6b1fb2 *tests/testthat/test-coord-polar.r 6e70a3a306f7272bb7391af0af9cb84e *tests/testthat/test-coord-train.r 9ec3f36295915b84878da970f38610cc *tests/testthat/test-data.r d0b20527ddaca6ab1f99c1cfc449e15d *tests/testthat/test-dotplot.r 2a70f0d37abe08e7f7b4e2746ff5f846 *tests/testthat/test-empty-data.r 6728e5c8edd8d12a05308e12b82197b6 *tests/testthat/test-facet-.r fafcc66255d651a5d3c8819fb0d069fd *tests/testthat/test-facet-labels.r 32772170a1a135a200a9748c63ddfbcc *tests/testthat/test-facet-layout.r 14ad2ef393e2b8c42ed26caae00faf1a *tests/testthat/test-facet-locate.r 24307e570b5c3a261fbac843622f6dfb *tests/testthat/test-fortify.r 77262eb0c26b03cdcb6a7a610d584ccf *tests/testthat/test-function-args.r 3a8b464d19174e4eece703c99839174c *tests/testthat/test-geom-rule.R b7060e5ccf4c447b38e855310bfd140c *tests/testthat/test-geom-text.R 11b564057fd03011bca4861fbf2c4798 *tests/testthat/test-geom-violin.R f7de4f656b033dab01630f1ed918c7b5 *tests/testthat/test-ggsave.R cb855e4c0ec9892813c5f86f838b3f52 *tests/testthat/test-guides.R 6318ef949123e4e13c938ffc0e3d4010 *tests/testthat/test-labels.r 83d926bc18cbc8a2a138f73009cb169c *tests/testthat/test-layer.r c2b1f4b1d448df295563ae1ed9dc1886 *tests/testthat/test-munch.r 972abcb47b4a68ac9f086af1c8198da9 *tests/testthat/test-qplot.r 99ee168c3f25007fca5e93c76453038c *tests/testthat/test-range.r d2f2d93cd9cfda4de1268614593e15f9 *tests/testthat/test-sanitise-dim.r 926a7d6e1dd028761c51e1926c605c82 *tests/testthat/test-scale-manual.r 11af33c3989010aec22c5c5ebb34108f *tests/testthat/test-scales-breaks-labels.r cc078e4e9973263342f51212c2ecb71f *tests/testthat/test-scales.r e2e2f29a35ad159d12dae8517ab28794 *tests/testthat/test-stat-bin.R 7a2de7d35f8f4e2a9a38596b8caedffd *tests/testthat/test-stat-bin2d.R 264a54ed95553c9d2bef6fa83a8245c9 *tests/testthat/test-stat-density.R 10744c4e51dd7cd19728e845f4171880 *tests/testthat/test-stat-density2d.R 547fbe507cc42321b6257125ba33f1c3 *tests/testthat/test-stat-sum.R 99fdfeb1c824e9ab041f78075a0b1f50 *tests/testthat/test-stats-function.r 4b6d4c25b74a97b1e27a0e169126e37f *tests/testthat/test-stats.r 03ac3fdccc2a146db16f700f1b657cb6 *tests/testthat/test-theme.r ce26fb5635464c1ddc29cd992f03108f *tests/testthat/test-utilities.r ac880a6aa04fc8644fed280c88b5d674 *vignettes/car.png 3ea1eef97dfdacc7cd6703ae5e1bb2ed *vignettes/extending-ggplot2.Rmd 580964d5ac3b6030ddbfeb79f5123db3 *vignettes/ggplot2-specs.Rmd ggplot2/build/0000755000175100001440000000000012634007745012755 5ustar hornikusersggplot2/build/vignette.rds0000644000175100001440000000036512634007745015320 0ustar hornikusers‹uN»Â0 myUB¼bäÚ?@„X£Ö”H}©‰l|9Å-¢†8¾;Ÿ}G›1f0Ó0˜abkޱ´ð JÞb]ü'pUû"œ HÃD-Ü}ä“8$Ê‘)x²ªîáZ»ç4JÂl RA o^xÅIx\‰$–µÓïóg…¤Žª÷K¥êÿˆOR¿¾˜.¯ ìãÿÃ[× u͘G ã·ˆ´6"=pê ÌÝjCmCj¯ Ŭ’`g ·K’!®êfÉÅÕÇzE²;–<ÏõD^È¥N¤IÛ犻§ ýˆOÄàgoggplot2/build/partial.rdb0000644000175100001440000052736612634007734015123 0ustar hornikusers‹ÔýyWɶ'ˆ†@@HHB#’ 4@*„f!!¡!Qj:H™gH2uœ<éî!ÄQå=·æáÖp«î­ê®º]]Õ·º_¿~S…þoÝoñþ8ë¬õþ¸kõzõ|›ÿ,Â"p'13ˆ¬\ÇÏoã¸Ø?3ÛÛfÛö«ý™L¦+ÓÝÕ•éê&ñHø£™L7áÙðçC!îÉìÍô‡˜½ÈžÚeÛ³»ÀV·˜ç~ÜZ·Ë×fYÁee7`vÁ èV¹Éìí’þí¾å»ÀZ%ù/ö.¾zñâñË·Íû^Þ³×BƒôÿMýÉÖ±á_õ†ÿjÍ)Ú¡¸7ý÷ǦOº—óMz¾zûdêNÓw}v9ïœr3ßLÓwýS²ýÀ*U¿}~±ð7~ÿÀÿ±íÞ|Ñò}üµ.Aøõ«7K¿Ê"ÕüÇ ”þÍt(Ye«d7ÑYœ®x·°8¦ƒRez9ü¿Šýñ퇫ÓË«U§X˜™ÉÛ×nÏ\½~çö­ÕéõõJÑ ®M—¬òôºí–Þ­Z^n¹¹œº6 MJ®k(‰Ò ÒÑ÷_›‹½^RIŸÔL@ü¡Kܳ?úg{šÿÙÞ·kêú¯Mö3%!ú®;ünïÕ¢qï"{]´-ߎ,¿àæ«%»Xã–™SfË<£§(£½løSh)ÁTÞ­–ƒœ—€FhHCøÞƒ|Ï8 ÊYIêïKˆGƒÆ‘( tú„i&±úúñòÃVTyõB>¨Ã*VkÏJä}±j÷‡ µ¿Lºñ@<.ª…û€Cµ2'V뾫èX~‚Þ=ÀCõrèPHýa ñ¤T(û©2yÇ+ÅbéAQô€SŸ./ÅbéAQCn±ú#âI©X.>´‚ü(Eµy·çì¤î&ð1äÇÆÎ¾—¹žªƒƒ'À%ÈzŠ bohï™ ë†ñý`Fs\«f¤®(9x«-B"¦8\<’cKk̯ØygÍ + +l*5Šáð"ä‹F"5¼½ÉVm°‰X8y®=v øòãÛÇ&ÂÊ^Õ‰‰Ã<ðd­Z¬ËÓ‚½fU‹Ádر Û·ŽhBâ#ü$ïE³Ä‘½Ü +Úì"5^‰™p| ù©qbÎÒL}ŽýÚ­2·\Übe;LJà2¿Z©•›Ñ£àExòÙÔœâ'º#‰žp.Jxò•Ö{©;ÌBÖš¯iÈ„SÌáæãÙ¡õ•/̆¦jPÄk øòc~ÇBóçþ°æzÜî¹)R;Û9Ö(§VbN`—}¡vòHûǤþ¸„xÚMCÊÑ×NcŒ½4# ÈŒ2¤¸ò~íFW£¹…h–bͳJvcG!Ëܶç9…°U–«úú÷ª™LI.A6Ÿ¸º(œ0¡íÑrʰ‹µzy§»¦šËÄÿ0ðägÆ…=i±¼U,R÷ʪO2ÖÓÂÖªå<½SõÌÓ0ÂIÈ“­÷ÌS’ÚÏ Ö~— õW$ÄÓng[ã™=|"Z‘Ú(\‘ðäÚnÙLéó‡–ÍçØÃ-Ñ&f™odêw¯^­Nèn±Ê­o¨áTµvJÅAàKÈ/[oí£(SÂW_µßÌHýk ñ´›†4ºke;$ Ùƒ‘ŸË¤Ñõ$ŒGjGL—hž…¬5LV’ºÃ@I64 VvYÑ-¯‡ðo…k+¼–·Î·Â±©pЪjaÄŸB6Ÿï¸±åVYÕÏ ÅËas¼ÖSV™mZ^™¦k»Xäè2|«ÊœÁo@N1á ·¾ ÇÜõpä¡Èñ|&kž‚|*EL˜E>g$< ùtë-ÿÓlyÊ 1¹| Ù¼ùžbá°Á³mlUh+åšdÈÔZçÆœZwb=«JùBd{;¸ÑQš[3¬˜äßv1¦ÈCj"äSšÎ}Ä4[ˆÆ€„ú[^̲å2²âr*Ù’QmÄIm7Puè5Ά;lAl§ñgùú_Ô)®o²á“VkÎǰ©ø`«v–÷ʵ±îÎCž7fßÃè?E*Ò&6ySºAÛ%5˜w‹®G;=»0–TÈID©-åζº™ðd¦6álX:´ýF§pNG!¦V8}¾ó;;,›ë:årxrV’IÝY`²ùJrWNÕ{Iÿ09×*XšãîDLj»éUÁ÷Ù«¦žyXåÒ)ïýfùzºýÑ*UŠ6ïꈕH½$ļ¸YkWacw‘ja±$ªÈHZ?7v§äð{iGºª³•#ÀÈZ»ÔœÔ ¥Õaò9ÃÂaž›wøþØÚV%nZÊÕ1;¼ùzª+°ÂT¤¶˜^50±­h S©‘1+±ìNCžî@¡IçöÍ -Vk/¬°uO@tCswýIÍŸÌd\J°t&µÝ£JRß#!žvÓÆÕ-œuëágs©Q¦h¾Jº¯y"piMÕUˆÈAà!ȇRk{ø¹%ÕF‘¸ž†Ü† |Rwx²ù~–ï*fõý¼ž] »U>+9¾Ok@|¤ÞU5tb: üòÆŒ‡,±N•cLÝ¢¦áq„C‡ÒëeélS'*#À“µÆœj5 OAÖZÿjÈó̧-Aq+Á”Tצáf„÷ kÍ몵Y9ÉNîCÖ‹î!ÿV¹± õsâi7«È­i³Hç6 Îd¢ÖŠÐèlNìŠÑí¢»îä­b޽Ùp«ÅBØuühèÀVmæ”óÅj!ì :åhLÁSàÏ«æ2‘? |YoÏ]\îv½\P­™®!' ¥ƒþ­®™®ÁÂû!÷ý­¬¼a9+JͧÓVy«>ÑëÓb?R`”Äy?pò|‡{,×Qt„FÝ:µb¼Ž¢#4›Ð{Œ•í¡ß‰âËê]#Jƒ@iH'{Dex%S›`mG!³Í'V3«¸imùµRRmõ‰Îp²V»§ÖêÏH&ûòƒö7·¤~^B<í¦!íÜje«/ôT$H;z3õÓf­~s@ñ*9 ¬5ašbíO\FÒ¶«VW,¤î8p ò˜± _H:To½ãìThb¯ÌÈOŒ™>ó,>‹lXe‘¥A˜x.ÑÆ’°þ¯äúmÙX«ùdž]¬„ÿP…ðUÓs ®Jø ²ùÑgaBªb«n˜ ~ä‹_¹çþèó>2Ì„g‡}ä ëƒãVÃDynI5=·‘†Û©¦ç¢l=tLœqËó°•YfçÖsªþ/E±1; ¶ãn°ÞU×+ØžjmI¤®%9µŠ a?©ÊïB¾Ûúú‡Ô]ÎBÖÚ†ÖØ†ªvdHý= ñ´º#sS2ÄN_ú9 ;4}q9 °5™ý´= L§Èì³xò!í~LOózÚ+i¼VååÝrÙæ LX=›¶]f¬%9¥ÎŽöÑ¢²ü²Ö´³Z}Cêî— /›zµ¨ªæNž_B~™ZÁütÀÕÄ¢¹Û¾gjçjE#‰®8Ð&˜5¤~XB<­n f¥ÔKTÚ]“ú£âI)õûWj»btÊÔZ@Ãúß( ähá]õGÓ/™Ò¡Æø „x såim¿< 6Ýú.õ°&gù Ë ülضWâáV·Ø& ,hÄg\i‹Gø­jb¤Ùšcݰõ ñT¯"³y°™Ï4Dêt3ItNÇ kÏÕêâùÈr9ŽC7.§}4~öuJæpòdj%3@íäâë”ÎUà=Èiv(Ï€÷!›‡.îä7BÍÚ¨:7Ñ™¾€ü˜֋ȹÅA|ª *ž[q=Þ)ÆN³rµ´j{ôMž‡.wÊ̶´¬{nµÂ&\Á¨T“ôyd1_@ÖKRœííÛäISµ:ê*÷ k­Ø¨YÝÒO8yиx?g–“a㣹ñøE|ÿ`µ$Š=Ê)’‡9¢]Å›V9Ð)Qbø²¹‘ތԗ¬”o‹öìŠgût²;t°öL“rY#Û‘ñ„Òx9%ƒŠ*ÃpZœ`K¹>\„5ƒœf8´Ë\DFŽ@֛ϗ{šO“†Ýf…¥ç9ÖjÑõb©±ãÀÈ3©•Úž-rº#!žv”Ó5à]ÈzÆ+ÿv >³­¼€˜ÌC6ã«ÜÇ£h6ó•âTåI/ðP¦mS‘„éMÜg<üØC8¸á=†µ€W Mj‰óaà ÈæÍÌg4ê’šjN<«¼Nû+ˆi´¦Ã+ò}‚\&4 ‘µÓ’H·Ä0ìn@ÖZðO0Ä5R7œ‡<ßzë'uW€ŸCþÜØvöׂ€¨Ú2ñX>ƒ¬µ²«u`¥`ûyÏ©ÔÃøm›ÿÀ4A'g…H}—„x4dØ”M™ï—éXk¡>D=Ÿ¨ªÜ>ãg¬EŸ(ÚÚ廸mX÷èÅ^Bášµ’D|KU?{Vm~ñ:†ÉB5oóÄûàøU«Hû*aâ|j^ZnÉaËîjXk)¯ñKëà)&é@½ªìä•óøK ”îÔÑ´bò¸jþÆFTf§§777s«Sö–=U¶ƒM×{Ÿ svúƒcoN;å‚ý1WÙ¨ÌçÂܵ·î$¥$áZ¸ç™¨7B(-Ì©§$6‚ç¡Ðœ|Øß§)† G¹à‰ÕP’ ¾'p+N^‘Šdwfá± þQlµû ï3Î'õý8›[Œßbjóèâ4kÅ‘¶ÏÇhÔ²XÑ]ŸòóVÑ.°-FÙEûz,ÕÒ|ûzÑhw¦n\«j•[ä—ÈЗÆn,ÿV¹zÕÓiš_ʳø¥ðÿ:Iþñ²ÏÜ|¾êQà\1â[% m…Uø¦S,òºîÁâ¥ÝJè½Ê5äk¤ãuc6›–µUŽÂY©ßøó ø…qYï¤OŒzÞñ Ôàxx1S‹¼Ýêþ9©^ÊÔ®ôhuÿœÔ /C6 ǶMm–ø"[8Òs ë¶òöb7| Ù|©mØw öTàNRè\呿2lx9czQÎîì™çžÇs@£1Ôì™ÔNAžj½=“º#Àäœy•—cOœ²U,n)oõ%"ÓÀ»Í&¹c#ÕLd-l;)¾ÉD‹ oPLƒ™tOƒ&X©ëJ1ì[m!o¢ìã(Åp7´k| æ3Ï.ZóÁ–Öõäù¸°Éäm’ÆÍ1Ä÷ ðdóñ×ƒÚ  |ÃÊÏßòÔ5q=æÿPµü Äæ­õS°IA5 o‘ß„Òö‰”мo¥`–SŒÛó´}•I³{§ÜË$õ]âIy̺¿WN‘ß×™húåküåý“º›·…*gÑ‘O»Kí—0éz—_A÷¯Pö{t­§[”Nªû{ˆŽ¸9ö`f[ø b¡ÿþ½ëÙö‡¿zûd s'ûš™‰Þ÷’Búã{~ÿz×û×MiîÂ÷½¯_½YúU>YÀ 2µÚ£¿YÁÀýúþdÔIû›¿¹>]ñœV`O¥ÊôrøûãÛW§—W«N±03“·¯Ýž¹zýÎí[«ÓëëtÆãZ¦¡ÒÚV6½aÙ„m¶½Ã'† žd±qñ'èYï«–éDH¶ÑÔêš[,º›üò½úéœ Ïþ¡êxv¡ù°s8ê]u‹…I倱{jßEŽp(BÃä(× ’ÿÅÕ 4Èϙҡ¸Jû%lšC×Ìõ*J ¶WE)fK&ÑÖvïEÆ„Ó5\è“f.$uú÷|Ô u\¦;îvO+VkïJØstÅM‘ÛO@>‘šâÄšÔõOB>in ª¾IêOIˆ§í¾)͘wÂ7Im7°ƒ¾Iêû$4÷͆Ô[Åʆ¥ÚsêO|¤õþÑŸ < ùhûýƒÔ“OÛýCZÚ鄈f|_gýc|B`ºþ±BtW•‡ûàû`©Cº–ªæ ûàû`•ý©X¦²ƒÐ3"aÓ0¸m"w½qÉ):é IUÃtd︉îÑ — †<Üz÷À%9@Öj¶Ì܃Ô•°éœ_ÛÜ£.Ñ×÷èƒKÛì{ôÅ?)¹G_Ñ)ÛtÂOÕEúà„#µêP5éƒ[‡¬5ä2sRBB)|]] ¤Ìü=Ø^‡|ݘùãÂÕ>#·æY%{"ðˆh~bÌ˲±Uú¿üØd–¹Õ ï–lþ»k¹ëY6“»›e×s×4¬¡þ„RÄÓJ uha-ªBÔÔhON²+Ê4K FÈ2iURgYÝ·¶™…z^–AŒ0½FéÑ8{X "¢|Ü;1‰zk‹®(ÎÓýgµóNyÍõJ<¬It>ï†î^®ºUíÂîTC’b*)'$y‡¦Ño {ûüx8oÚЕk¬jÙù¡j³¢Ý%¡Þo©‚$azý–»Û³aåêÙ• j²xk5“e7r7Ãæ,?q3l®†?Nj4`À™ð.仩»ÿGòy“þì&¨m¦êþãá¨j-Ç,¶áø»f´ˆpÃ[Ê~e¦ÁŽp²ù4Ïä ­qŸXuÊ›N!tÊ9v54 eê[ KxòÔf¿ƒnf+ù|ÊDsÓ™ŸxvLêt¶Çª.u>òtbºÅb“—Öb`DgN=„¼HŒ˜–¿ƒü$L¯Ãz|œ*ÓšãˆêT™Ý`Dxòqcvg·i³ ½U柀azýTu³ü=t L§Ñ¿Toô,. >‘¥SÍ<ß(,…2Ù?AÂKµ–ïT²ÙZG˜ðDhŒJþ.È^ƒ|͘øÌî‰Ó/4xÿ=p%œ<Ó+ýûÐ-0+]äóaÝY^·£;ÁøE[¸¾ÀÏŠ_ív‘Ïññc—Å-:g¹ŽúÜÄ{ SòÀžP 7lZ9y6§þ޶ŸQ§OÜ&¶ñì“2Éb„éUNY†L›ø˜y:ÇÊa]ïOø®L´oƒz%õé?MÂ,dó‹M»~T&ò¡œ° r—1‘ëÍâr‹ÙqÃîñ?[B£)µXµý+…p”Ø~Ð9"uÿ4UÿV¯gþ) M`—ná%dýÑ*Uj{“¶­_Q²ÿY{² iYïŸ!Õµs€w›˜Òù³L´K ~xÒƒ<5Ž9þóL´Ó†ðä4cé$„ð!u½ÀÓµ6¬%¨MØ5üÏa›„g Ÿ1¶Ó~jó<ªµ§Qà5ÈæÝ,õ5ÿùò/2¦m@ëB“·!àÈZå¨fµ¤®8 YkAVÍjI]7ð,dóÍ¥Èji៺„<¤ÝêiG=ÈhT®¨‰8ž>‚l>ï¯\õþK®@³ ”$#Öäþ¯2QEKxòÑÖ›/©ë¶ñb’…ü' \‚¼”Z–ÑŽj›6 Ähþ3XÎ_fL{ºòo•;Ü #Ø¥mÌF4þ-r@ vnÄ~äTü÷ï /££“¾h>F¹·Kþºdå=—¶·ˆh˜ÍøG°'ßùmÓ¿îYñ­R¥þç÷ 4&µöa÷JÞ“>;óÉÞ»œ—¾9Òô{y¦°öQOÓG¼ýzsƒÏþJ߈Uø~µÐȽé÷a×f{Ú¾é]YsÖ«ž-}v´9‡W'(Ê_ìÝ–‹QÕUû oÛe7Øé/ȧCj®—Å6Þ=+v©²±=ƒâž†¸e¹ð!TðsµÝlUVüêjí¸Fb‘î])¬•·“høFª¤ää'ìZYþ Cë_ñ·ÊnÅwüÆlûðÀJÙÞÌ»¥RX™KŸßžùµYüÄ"\©„NÉ÷@öNV×»R²ÃNµüÉ‘nûVø¥§ÒWCq_Ûåp(}5ãuâxWöÐZÞr6›ÓdIeó‡C3[ÝÑ=?Xrr`[FZÕ0#½í:›2Ò*:ÖO™Bèç¼ì~âõ¬ tnŒ[5WfåÐéòz&Ù«ë,ÊM›2¦êã‹t›g5{hï.þþ¾•bÁ ä;¸­’°¼õ*^¿Ún:ÛþÌ6eƒ+ž½+/ì[yoomºžüÍöjòÍ]yW˜ónÕËï\iÓ*m£Ù4e‚¡mÏj¨¹m£]‹Å!³Ñ¸³V.ز+mc]UûàX¬áQeE›53 •U‚•R­æ–‹[ñǘ†]²Ùøâ«tês”·J;x¯8íYû`8ÖÒw®{úxb½ªüÍöúÖm®šêÀ¦¶!ÌëpœXÎ7ôGâ*…¾•íÖ»=¹|ú'ò­w¥ð‹jcG`{¥çÿÔ'aoÃÙñʵü[Òj§Ú:¡ÖŽæjÿp06CüŠw¬„JjG}+µZ-6ÔüÛ»á7™äêißÊûcEþ ý±¹½\xUi¨ öoÏ)qÁÃOZ@h(•¦æ£¹nº¾ËºÉY³‹¾\:#ÛXõ­uù‹ž8g «”k”¾C›½+•÷»h ú›£ e}d¥bå߇ y$÷ º„ª“ ƒ¸Æn[c¦×);ðwù=ŠlâÏö«ÅÀŸó Y?UÏñ@úß~ \·èÏÎÎ.ÞÔ;©_316>36ùcÌ(î\D–ãäµú(NeÑ;Ã;þ&Øó·µ÷µ¡¡ö‹ÓÏUÏò¶¦ŸÐfyºfÒŸ^ŽvÎÓÓËvÔPúÓþ†åÙÓË…éh@9íoùažCÛŸëÕ1#Õ×ËZFf5òÙ6“j0#úÝ»×Ëã3±†#-ieîC¾_7œÕ]O9ì¢J]\^xÉÝ8dßäÝO¸¦”þtnyªâ¹ß‡Íœë­OÃæÆg~üDµÇ§PˆËL?r7^>×ÍæVÒYØR‚Oè'ø*äOÅК?†ir«Á§?ùñÇO,.U'‘«¯š–kóP3Êá·Ñ¼C…ú@½zä³É£´OFއ•Ž}ï˜?C"–±1ï¾¥‘CŸ«çéOÎ#iÓ¦^I?š×Ço——^¿]zõ2¼ÐhL%Éù1< ŒiLwŸ ùpPäÃæ ÒÈ‚yõ,ˆ¦+’S?†J1ÈR¨÷†=~'t_ÿÒ,ª×†† |ÏkªõÃ'&}ÓHá,äYãÒ¥ûÂrÊag½l§T‹ê%\ªQH.å‹H9¡M$åz±©ÛÝî§q²\@¯­!{5ú‡aß³<-v{׺žõŽNų+a/•²•w—çÿÿ…¤ºã‚îd/²§v™Ïâè¶DÏý¸µn—¯Í²‚ËÊnÀì‚Ð/6j–²Í˜z_½xñøeÜÂ’´˜·E?õáÁ_õüçÚ{óáÁc³2rÊ× ?û‚ÙÂ!•甄xDù–õÖ/ç.²×EÛòíÈú nžO¶Fáœ2[æ<e°— ¦U{ñ³º•v!„sçŒS¡uÅÙ ñhЈÝÙP7Ê$^_?^~ÃKÜÑï{#Tç«UL4ǪÝ< ùpûK…ÔKˆ§ã¥BU§¸óì0d­ì‰ÕZ[6ŠÕ»8 Y/?ŒŠ…Ô‘OZÅ"v¯)‹|ÝU;‹E¾l¬ƒÅ"nÔ˜n±ÅòN¹\ö¡,ö!útóG±\D+Ù4ãÓîr¡ç¨„xR*—Ñ…BmØVP²*´£öZ¶Ìb×oN‘ª|ßÏÈR,)lW‰Õ»(RÚ]R¤þ’„x4Kªo·tv¼Èe‡ûe4³åN½Ý›¦B»«çØË¯ž?ÏF§Ä">ÿt,ñxØŽmìÞ|ǘþ,k8j_ ^–ee+ç•ÂwOž¿yœåaƒrE;R(I ê 7UÆLh&à4 ;Ò¶ç9˦3Ùo—¿ éær9õCÄÀŠð4äÓ­sœDÐ-©¥JmÎΦJ&MÖ„C0 KÅœ Çô,õa¢¥ò@sìúU.Š@H—çV„Q('ä È>„üÐ8!÷ÙOúVz&=Ú„1«SÆmÖ¯c+Û=µ¯Ó2aå6ˆ¾é’ftÞ”Îa8µ@<št(1q˜^8·"9êLŠ{!ê㤚r¼±y„ÜÚmî ,}Ÿæ³v”o@¾¡Ÿ{:…Ý–ò…,Dh¸y15·K<üCêîA~”¢Ú„“¤î&ð1äÇZÅз,9DÍNùþ¸y)uƒØÄ;EfGàUGðý`&ݹ§‹ÀÍ5CNoŸhò–€aÈZƒÔÆS˜9¶´Æøž´5'¬0èìŽF1ˆçbS>oo·Ulú³Yàd­)\õ»|Yoʶá·lBã¤,q˜>‚¬U‹5pyZ°×¬j1˜ÌÒey·ö)¸ Åp¥¸}øµh–D8¿ ì?òxOŒ©š˜£°~§Ÿ'æ,­¢äxœ:Úõ&\æW+•¢r3z ¼ÏB>›šSüDw$ÑŽÁE ¯@¾ÒzO uç€YÈYã;Ån>žZ_ùrÀ,ahªE¼¦€O ?1æwŒo¸Ä I²{n`ŠÔF`;#6•Z‰%Ü+4,©•(´{¬AªKˆ§Ý4¤¨¡†#¯Æ{iÂ@‘ ï_‡YÌ×Z¢I ¾çµ±£eîÛóœ‚í7TõõïU3™’0\‚¬×Ï”{Q8aBÛ£å”'a„F³ÁjNyBR{ ²Þ쯑7úËâi7SÈ­qÊ>1A¦ÈNŠÀÆçºz#LÉ1g_‹i;«ð}ÕhD–Ùµ†ÌòÖм°!äñuÉÊ£Z¡Í«æ2ñ? |ù™qaOZŒâQS÷ʪOAÖÓR‹Wªê™òÎÚIÈ“­÷ÌÓ’Ú˜€ýír REB<í¦1ŠØÏìá3¾ŠÔΠ@> í–ûšgµÂRƒÐAà!ȇR'ôðÙpÕQq9< YkÍFm”@êÏ@>cl½Y>^fõ‘ªg—®‹ÏJŽïÓ ”Ÿ%÷ù UÕÐÏÂÈ ¿€ü…1ã!‹mZÅ”Ê1¦nQçàq„C‡R³¨½:0DexòÉÖÔ9|Hx ò)ãâ9Ï|§¶QÅ­SRm³ÎÁÍïA¾×ú6KÌJZ£e,³Æ‚ÔÏIˆ§Ý4r@`kÚ¬Ò²¤"Á󙨵"4šuó× ÄnÝuº"$ÇÞl¸Õb!ì4:>+Z[ar•®0Ë«…på”yw2J?¯šËDþ(ðd½Þd\îv½\P­™Æ“„b_‘Öµši FØ¹ßØèoeå¡xV”šOódVy«¾N]öB“evA9.qÞœ‡<ßáË8ŠŽÐ¨[§VŒã(:Biƒ‰a1ceûCèw¢ø²:‹2DixòùÎöˆÊð ä6L>ÃV ³Í'Ÿ3«¸imùµRRmõ‰Îprš‹R ­þyÉd@6_”RnnIý¼„xÚMãr@`‹Z}i S‘ Í.Š=§æ­~ó†Oñ*9 ¬·0^íO\Fç!kÕuj ©;ƒßlXe,þÒ H¬þ–rì-u"Ãÿ•\? `¡kÕ"_ Û°‹•ðŠI>åp³Òä7ïFîɤ1)ù,LHÀ¢õD4¥Å j|åžSø£ÏûÈ´äÏûÈÖÇ­z<à¸jz¤ ã)¦ç¢l=ü:+¬ÞD÷èeÝÅ­êÿò1t³ð;íê]å·©Ö–DêZ¦ œËZ»d*‚„ A¤. ¼ ùnëëŸ xá,dóÍß{T;2¤þž„xZÝ‘ÆGj;8}Aêç$ìÐô…´ÖÑÂŽLw.§j´Ò 쇬5Ò¶u£/q‘U,ŸbR»eZZÒ :œ€<‘zÕÖÃ'U4¨ÝÞ…œf “P±‘ºiàl¦¢ÕÛg0dÂ{µj”†Œ þm²<å½ Ää>ð)dógS,ì'y¶Í‚­JØÙ£Ü5CÞÂu©t=:±žU¥|%²=ŽS§Ú_1Éa|Ò;´ ~3€”q7(:÷Ól!êŸZ0Ë–²"—J¶dTqRÛ Qz³á[¨õ×gùN;>•¥s|ßÁšó1l*øšM–÷ʵ±îÎCž7fßÃè?E*Ó(;Bé´wJÃòÁ¼[ ‡msl̳ cªÃóiØ7á È't¸©µ"Óž„|Ò¸tè…NᜎBM­púø¿sìºN¹\^܆ùXRw˜…l>Û¥¼ŽAú§€9ȹTÁW£2åØ*˜ÔvÓ«‚ï³WM=ó°Êå+‡ÔûÍòY \iÁ»:bÊKç81ï.BÖ:ÖØ]¤ZXÌž(2šA1š­ Å.¾Ð¡cUg'*G€#µæmÕœÔ C6ßÀ}†…Ã<7ïð#޵Ó&Ü´”«bvxòõT×`'„¨Hm70½j`b[5Ð0@§R#cV.4bÙœ†<ÝB»Ž‚ºnZh±Z¥ûbÝÐÜ]Róç3›[I­ì©Ý£JRß#!žvӸؚY7, v¢È¦‰z‡2ÁÙDئ^Ó_ùtž¢¡í®µ˜y·\ŽnXa«v°iÛeÕ̽ µ„ RkD:¶ZbSz 9yË4WÕšÒ[00Âõ–‚›F››KˆÂ0prz‹À?_mÇ¢^‚|©=Esxr 'bTçÚIý„„xZÝ&Ü” S¬?L¶¿2&õŸIˆ§Ý4n#¶¦MØKz™ÑŠh/0ý³‚³üÂ''Ï>„Õ~8º[w>Ðn€úMÊ<¤SŽVÖÃ&# ý¦Tû¨æ0ñ>üĸ ³®çüÎ-!©‚ãEm—Ÿcc%lä®_¥X*hÝTó.ì€0&Òq«󎤶ƒK¤>'!žvÓ⣵Ð1ûD¸,Ev÷à„3¦ç÷6±ºù2Ö9)cÛ+ ¿$ê‡!›‡¬9Ÿà—¯j›¤iJ›j»!SÜ»CÅœØm!*bCwÆ’º1`z;ci»97&ßV®)‰ÊPT[w[_SÞ“l"½8ŠÊUÔ}P¨½•ÆŒÆr@`‹º0GP‘ÙƒLT3šwaº›u;ÊÛa‰È pòPz•‰Î6{¢2<™iÛa»ø0ÍÃvâŒÏÛÅbtR“]Õ LôNÛxØî܈°ƒ»ÕHýœ„Ú»Õbµ6\}»M·˜³˜Ï˜Ö*FY@ê»$Ä£_¹™Ñù<õ÷â1Ì•³;ÆÜV帀Ò"< ùljVÓtIvl‘Ƈµ›‡°Æv?×[ß¹¢ÈV>÷@>¢Í¯y¡œ]DcDB<í.µG0ÚÆÓ-fÀSž±$B"¸ü¡Ì¶Éd*þߣw†— ýþô®÷¯›R­} ÒÀýú<ÿƒè›Ÿë]Fj½ÉVâ&Û]=ó]bÕ2kÂÑut¸gÍ-ÝM±~Äd³¨†CÝBó‰]>J/&•7ƒýaào ÿÆ89Z—í‘°Éh‰¾0£Ck¦û%Äc˜+ê«ÈÒBjÜ*²b¶dTû¦{‘„1KÿºÆ¡“ }6Ý%¡˜ IÛï÷|Ô u\¦„»§«µwÅ Í}³AkØÏ.ªjöÁ%‡!·Þ=öÁ%@>Ò~÷ ç¨„xRJýN›»áb@©ß¿6ÊRß%!ž”2`ïó¥7oþB—¸Q·ÏcdáÍÃô)g ©_’: új€¾ÌÔ+Àd{ñ£ñy £Eüû'ñö²;FIlÌ2ë ìF`“ )NgØ-Ä*íiôWjˆÇІæ ìþ‹&=& ŽUrËŠ÷dû³lkr’]a‹NiâF–Í\¥Ÿ¶ê?)§A²ý¯2>\iI7ö©óZÂôv6ª—±zCß¶ñXçwJäy”rØ£,FûÞéÔbó­Q«[ˆÏ±EÓAôº¶wJ9%_‚ý—’“›‰95^ÛÄe[ùúvŒÄù¨D‚ÏAŠP ämJ°Éq‹Ž¯¼©í x]ƒàKz™*Au§yÝÓqšÉqöÊ‹q‰h·’ä6Ê|_ƒ#á$äIc¾—·¬¸41?q57“eáÿMª—ò/ÀPФ×gئ¶gðâÖkÅÍ:Ë©¬rG€ÔwIhÖhÞò¡LçM&š'Ø4gœRÚ]Ö¶ê|eøŽ÷ÄNÜ%Œ½B…º^ t)Ijj†|oa˜„'!Ÿ46ÒãˆRöÑZwËV‘*𲯵BDêð*ä«©å uìm«è» VJYñU¦£¾Kê»$Ô÷]#_#jç†Â˜Sü÷KèËèèŒZÑ»Az'V†›ñàKõÊo£ïKcÏ@cz†å߬¿?"¿Ç,ÊQùÎۓߨÿû‘&ôîx zB~©’“ò;1<%¿Ã×é˜ïÎÈï×Ó+ôÆpŽ{èÛ³ò·Èÿs1yÃòá|¿æ¿?–ÿãMzÅû ò{TìcòåRLþ_nâ-þæ„ü~¨þ~R~?½û,Á–vÊÃ+1å›Ý!_Ä¿›ŠIC®)ŸéÝtÌߢ÷Wòp&áûk vA¿»cg7vaGôÝÍüï–ü»Þä¿q»ÉNèݦr£wwìi6ÆnîŤé~‚ÌÅ|û Æ7æåw‡¢wŸ7½sA~?½{(¿;Vÿv±ÉÆå¼y”ð;ñûÇ ¾ù$Æ–žÊï†ëß~cÃK1öùlþAß}™`ƒÏc8½Hàÿ2æÛW1ï^ǼûÅOøŸÌuYþv°þþÍ.ëúömLùUŒM-¿ë¯ÿû_ÊïÑøUBþ:ÆV“`×ßÈïG¢w+MíœøöÛ{ý.áï¾ÛeûÐßm̿߆¯Kü½“ = +e{3ï–J–¸_ÂjþäÑÊûcÅû&ºÌŸó Ùp°±nÏñÝXß~ \·èÏÎÎ.ÞU¬üûð7ï¤ý™cã3c“?ÆtxÎEÔ8®A^«wxäî ½3Üȶð7Áž¿­½7ßȶ8ýÜYõ,okú Ý]¸ézïýéåÜšøazÙöݪ—·ýiÃòìéåÂtÉÊ{nøó–Ø¥œèþ\÷¿‰/ó)ÙÑgÛì¨Ávèwï^/OŒÏÄZË,„0f?¼¿ë.yRuSH)™7W6B}Ÿ6‚ 2;=½¸¼ð2·WÏ §\pÂJ.93äxžßAþÎ$3èëεm¿Y\^zývéÕËäDËAÏcÚ¶Ý'š¾rRJì¼zb­j°ázÉéCÚW ¯˜ÔQß§”ÖË×™]ñý0!vC…¾çµ0վᓦi¤ƒ0æh§ZÙ½O)=‹êeW²œr>öå'äÏ R¯©š:§í~(Åæ<Öèd…¸òt}ͦփ+Ñç½Ìù?dÄ¡b~„5MFf/²§vX(<ÝêóÜ[ëvùÚ,+¸¬ìÌ.Ðõ[lÃJ¼ò­wñÕ‹_&mÜOLäˆÔ{ÕþÅ÷µ÷æ½ê§f¥â~ä—sÿÜ{Öf“ÓT¢Sâ%ìÚgh,\d¯‹¶åÛ‘ýÜâÑ,¢ýÆ»±pm ›hfË}¹r {ci?Ö{ùÕóçÙè–4ñy;]€ÇïªKLBJ“0fjP·CÄXÅõÞÿ éܺ=–en5(:¶—£ ª^-⵿aU(¶þÌ]õtôƒ;מI«;tÕÉEqÿgr7%Âç¾§·Wém8þÈÓ4~«¢z öƒ5¡ˆtÏ8OYÄKìãL?Xžø9"ËÊVÎ+Õ”.ΦRZPOͤ@ìâÞ“i¸ÃG35§“n÷ ©QÈž,Ëårê›ý¤Pñ<.Íž[U§%òÀG ñ˜V"rG`çJ„ª³Jä hLµYŒ¯Dò®½&1u³{˜­Ü?³=V‡LÍ6¡ Põ­õ¸.€8åt8U3Uîú. ñhv.›Ò¡å€„M7K)Ò¡ÄÄu{Ὴ䎠Ø!êãa ‰ÔEŠÕJ·¨ÕîyKŸ…ÿZÌÐiP>¼ù†Q'<.?»Õ¯†F†üX«ò–¹žªƒƒ'À%ÈK©ÄÞÐ Þ)2; ¯:Šï#lµEº^àá̶;Ê[eÒÀ¼ÛfØØ"ŽäØÒš¸(™"ð¨GÇ? ã ¼ù¢‘È_ oo·Ul"–ÎAžkO]>€üÀ¸Àö± ;£ˆÃ<ðd­Z¬qhƒøà“Yºõ<º]¾¡H\Ž!:¿áP™^n…ív›Ts ÖO˜ÞÈæ,ŸâgÝrq‹•í0)t™bµR)*7£ò†³ùîH¢'ŒÀE ¯@¾ÒzO uç€YÈYã;E—~Å­ãÓåô–04Uƒ"^SÀ'Ÿó;š?÷:\Cv¯3ßx¶s¼ÑîS+±„XG$µ’)·{¬q<þi7Èú#¯D[¥Èìd&êÆˆV`t51š[ˆæ)ø¶ÐÆŽB¶v ’ßPÕ׿WÍdJ p ²^?SþíEá„ m–SJçå=(­vÊ“’ÚK/µßHýe ñ´›†4õÒB§ì`ŠìÎÀ f¶Ýoa蘳¯Å´œUø¾ê´×!Ël'º|Ð[B?ð†0ËÐôD¯v­°S:ŸA~f\Ø“ËS€s~/ue{ZØZµÌ#-¨zæ( pòdë=óŒ¤ö3ÈŸµß%Hý ñ´›†Ôßm¡gÞk\ËjZÄÊ6,5/)&è˜p²ÖÒV콂}¢¶S5›‰Í#à—¿4.m9/u\‘qõ›¡Y2k”Sí¥ÕQѸ ü ²–·ª‚HÝyàÈæÞɨL0Gv¼Ü¯ïë…¨jUÄ. ü²¹U®úÒ@hÕý¨Z±Ÿ‡éŠ4'Ý*ös’ÚaÈÃí¯QIý ñ´›Ær@`k*ö¾\®Hm<UË„ С&ÖlLoÊ!"‡ J­Þëáë­ªq9< 9½•ËÄŠÔJýICë`bú‘•¬÷6ïôZå‚娂‰vá˜UÕȉå(ðd½©ÒØKgû šÐh”¯Vn"þ¥Ý$†å6ŸÅÅýÜ–Kë%ÿç-FضåÝR…~^÷ÜjÅ¿§ZœD~ø ²ùæËhêIðùd¦K) ÀIš )Z•lø¡ã3¿º¾6Ê4[‚©ˆ’]p¬äˆ^I ’½Hqï t†²ØwÖËΚ“·ÊAq‹œµ5Û Gcªmµ47!&lu[=.©•Æín$IýY ñ´›†=­…mõþúÖ6E~t¶°x(³í"à ’ÛÔÕÜ^ÃdêEû=»hΚTÍä ¨'\ÊÔÖÈ Ëz$ê#¶j-mœTä&M˜Má«yᄤVZ¼h·ù“úâi7 i2¨…^Ø'¶“*²»¿#4Ÿ¤ì7ï4‘ÃÀ#õÆ9éuš‰Ë)àYÈZõ¹Zç‹Ôžƒ|îgÛi&– ø²Þ’|jæ, š°f9`@zækYô-©›Vð¬Ír´Ë‚{½Ï*ž[q=š0·ø¤ºÆ¦ â;©mŽá²Ö&™ÆÄþÕò”çº_kvEœgæ®ú¶÷ŸÒäa–é·Q?ŸMT\ßwV‹[ª ™B¦¦·øè¦í¬o´ðYõEt^Ef9°ÉeLYÅ9ɾˆ¡ª›™Ó@™µÞMHÝ1àyÈçKi >ñ9©:j!&cÀ)ÈS­ï/]‘ŒB2vwTHõ´„xÚMc9 °U3ŒtjA‘ÚÕLÔ†šÏ0îkî,-)w–ˆÈAà¡ÌÏc†‘¸¶q†‘Ô¦7Øå[-Y}“£¸›»äø¼ ø`«vtA·ª¡ÓQà¿0f2V{6Wí ëƒCÑxh÷¦jzî" wSMÏEÙzhMHüÉó¹ú,³së9Uÿ—¢ÑššÙñ yïªëlOµ¶$R×€w ßI±"H8KNê²À»ï¶¾þ!u—€’lÚ†ªvdHõ= ñ´º#s[2ÄN_ú9 ;4}!EºjaG¦;—Sµ*š^`?d­‘nì´Å¨–òÖy¤XŸU,ŸvºeCDq8y"õª­‡OªhP» ¼ 9Í&¡b#uÓÀÙL-y«+6R7 ¼Ù<„ÛõG蜹å)¯«ß—ž§u4d4ÅÂ~’gÛ,تDÛO놼…Û—Ã^#Ö‰·'Qž‹l¯6¶Äjz»+&iŒiX1É¿íbL‘ÇO%[2ª8©íŠ Ó½ÆÙp‡-Ôúë³<ú‡ŸÊRˆ-~duÍù6|Í&ËŠÎ{åZX÷ç!ϳïaôŸ"•”¡8¥aù Τ@£cž]Sž/À¾ O@ÖÚũ֊,HxòIãÒ¡à[:…s 8 YoO{ì¾Q„T½®S.€W ·a>–Ôf!›ÏÇv)¯cþ)`r®UðèLkáÿÛ\“Ún`zUð}öª©gmhŒ–³|׸󮎘òÒÙôHÌû€‹Í÷ P-,fOI; ×…b_(&­ª³tq²Ö¼­š³“ºA`ÌÅîºçœX8ÌsóŽY TÆMK¹ f'€×!_ï@5ðvBØj€ÔvÓ«&¶U t*52fåB#–}ÀiÈÓ(´Ç(¨Ç¦…«µVغ' º¡¹»þ¤æÏ f"fÚHí^È{Û?ª$õ=âi7'È­™uÛO‘Å£K ùÑTE/ðPÆôx^sÈ“é¯|:n×Ðv×Z̼[.Û|u‡­ÚÁ¦m—U3÷)Ô.dj¡ƒSjDwsõNbcúò’p8“þH é0±/ꆒB‰í%Dá(ðd½“y±…³‹ëwv,œsÀÏ ·!0 ©; ¼9…°Mªóí¤>+!žV· "‚+©íàl#©ÏIˆ§Ý4–[Ó.ì¥+™Ñêr/Ð<Ôd3£{E»¼^?™]»£ÉòY)lí…¿[úÅrŽ1Ìâ#ÙÜM„ ŸBÖš‘W³siu^®ŽÛm`Ï`\ñ¤”úý+µþzŒîa$[„­HgF_9 ¾„gÄ£écÍ·2(Ó¡ÛÑJˆÇ0W–ÞÒ¸Öݤ!TØHW+´mflÃ)¯ÛþXØÇò<Û¯¸å‚L­9žðOƒ Ç+0:·8E[y‡Í ì‹LCmf˜œçü(ε›aAo“¦(Z‘œÄŽ¡(f‰Ïü"…,nÕ#¢•ì`Ã-ð¨2ª)z‰T¼ÌÄ^e¯™¢ÞÕ-C¤¯@€PÜ£7ÚNØ=£Õsz»%< Yëh«ZωÔõAÖ»1PþíõÚö²hÿtÉÚ¢“ V…╃hÚÈ/QSŸÏCúʳDxødóÆ`ï[Ùž^Æ͆å;m]÷ìR÷\uoQ; …¬µ’`\ [HÝàYÈg[oÓ¤®xò9cÓ¸ÌçÍé)¹0¿Š¥èzäðî&ãMƒªI|ù‰1ÙQ8:m’·Šùj‘ÏØ®©/¡ýFý‹ŒiX¨4+Lbsøä6 5[&Ṁšê+h¤? œ‚¬5è‹Õ:°R°ý¼çTê»·õ¸È –3퇒ú. Íú¡Mé¼ÉD;x såõC£Þ'uÌþÐÀzߌW=¢#ºöÜì°+ÊwWDÑòœèŒµ£<ø…K(õK “ôe8ædŸÑXT Wy²ai“½w¢ øN9°½)Ñ•fžÅ? ë°‚CawòÊõíWHazÁÿžažuç߇!ERQª¦çk¤0½íëK EŒköÙ‹/Á{DÛöWí->0ROÎ/‘ÂôÆ>¯é6Ím#¡¥‰ØÜ¼´¨¢&ÒòYÅuhÁl"ë7{…÷Õ÷öÖ¤reý+¤„ðu¦Ö]lwuùk¨˜N­ýÙR96P Ý3²r¦È÷7àHhv)@\ÇãhhÂw`ÃÓÌÿÁ &Ê“ª½¢6|ùQë{!¤î ð1dóË Õ{!¤ÿ ð)dó½¹ÇùLĺCá,æ¹Õõ⻫:Mù L†0½@ŠÙ‹´¾¶æì°õ‰Ú§°bäýê(Ð.ÃBdÚ¤„ÞÅW/^<~™DúPÚÑîªâسÀGºvÝ@ã ¯_äŸ:áÀŸ¶…slbæîí;“õqUÁ,§¨>°‚^ÉÔ#B¥·¡®o¼z}¤íÛLGû¤¾KB³¾0ýëØõðúî^E~ße¢ñwøËû3&‘)÷šfÑ‘O»Kí F ¶ñt‹]©/¸c~”ãpfÛ‚;Ÿó¢ÿþ½ëÙö‡¿zûd '÷5ÿ2½ï%…4å¹ç÷ w½Ý”î.Qs¾~õféWù@dÿ1ÈÔ<·ÛHö~}7ăè›ýÍß\Ÿ®xÎ+°§ƒRez9ü¿Šýñ퇫ÓË«U§X˜™ÉÛ×nÏ\½~çö­ÕéõuÊÄk™† c[ùô†å³öùwøÄ° YK܆„ªfÇŸUËtø“BšF#°5·öÿùå£õƒ¸žýCÕñìBs\“pd°ê “ÊGfˆþÑL½?¡ar”ý± 6ù£ *“‡¦thgÙ~ ›f4sE}¯4¯·×N1[2‰¶ž°ò»Y@³AR×8tr¡OB<š¹4ÓßÃ'4¨Æ„ Ü=µøþê Ýú%nËݦxxò™Ô'Ö~¤®8 yÔÜ"Tý“ÔŸ•OÛýS:vÔ ÿ$µÝÀú'©ï“°5þ¹¯ä EÕðˆÓqàÈéùÉJ ‡€£µÚ~ÿ õÇ$ÄÓvÿ®˜ë„€OˆÈùòð éúÇ>ŠaUõTäœâ,uH×RÕäœâ¬²?ËTvR?"!ž¶;ˆD§2§謃 À)¦ë {לbQÕ=à„Ç[ïp Â#Í7(»©?*!ž¶»Ç \b°3î1—ì¬{ Â%¦ë}E§lS VU„[Ž@ÖªCÕ\dnA(†^Z–f.BxB¦+¼Ûæ"á;ã"á;ë"áS‚ø–º„O¶qr>AØÁ!©?&a§† Cð‰¡ÎøÇ|b¨³þ1”iœÑM¹‡å×b¹íÞ=†¤§=¬¡L}ò¬ƒ=,R/ »:ÖÃ:—8Ô÷8—8ÔY÷8—˜ò]ïîóC0C™¶ŽÐÁ);8B§oF$Ô¡ÇjÝ)e7Üà0P›²Qú. ñ¤”{Ÿ/½y›ðº– 1|~‹¬ Lï0¬r¶ú/%Ä£Nƒ¾ ¯Ä sߎöâGÇb}‡oÅÛËî%±1Ë, v#°É†ÚUf«H“@ýS\;Ÿ^tK•jÀ¯>ðkµ¨|)a>M™ž†¬u?|&•cTD㬄xÚ]z”˜@³Ò;iJ‡Žýa®¨÷œÖk™ØžSJFݳé‚ jý@iºDÓŽ›)â”èÈÿ·Þvbwxò9Ý|÷]Mú‡Ý@™µß›è—OÛÍw&»ÞRóÕÙS±‹%”æÃS²Þ¯C„ÌE¡Ò(‡»êÓqsujݳ­@\JW:üPµŠ²#ú×Q©z $óó­wu˜=ar¡ý.@êm ñ´Ý6`ö-u­#g°{Âôkð“’gÙµ›)ŒU©Aópòdëíx¶Kød½Ø%FvLê¯Hˆ§ívìÀv–Úñ~oFǘ0á0äáÔŒùzdÌvaÇ`æ,Ãj=ŠÕÑ»D³SŽŸBnCLf¦MøäÄd&õKâi»™Óþ¾¥f®wñ{˜5¡´“’‰Œ9Ën^Õ®ª‰ÙaàEÈZ÷[«Ùð÷°[ÂK/µß†Iýe ñ´Ý†ßÃnß·Ô†£ªZç¤Þ{Ø.a ªê(ÒbBU}%ªšˆ¶±ª~Ó&ì`UMê—$ìTU]„i[jæZgQ‹°jÂô¬# GÏú¶~ϺˆïÛØ³.Âv ;س&õW$ìTϺÛ-µÔŽuÎ…•`º„éO’ü¢1$î+ZÞzóIÑöýí$’D5ºÖ %køò»Ö› &Oø[È¿m¿ù“zKB<)¥¾ñ§Wã?mXy¨?Ùo”e¸‹À.]NjպÓj^‰v;›.-P;Ô]7#T2ÑJ‹ÀtV]Æ*ìþ‹¢¾M”*ëY y6‘/Z¾Ÿe›[““ÊD@™ŽA3&z¤Vfr ¿ ufØÆ•Ód–ÛÎL¼øÞ Û›ˆ–kæØÕÜ5uÒ>ˆæ çÒ(÷Òy×õ ïÖŠNE#w R-wuG©B·ÀtêsÛ2L žÞ.õX=·>€á9ÈçZP¬,O˜ŸÑMÛLµXon#JgDB’ca—'°Ç²,:TEoƯ_¿uëÉ“1uîÁ—ð&䛯ÜŒ³‡[â:Ò¬ˆ².¢ª—,2 Š-‰ 2{˜ÎûÊOŒŸ˜ˆ-'|ùq"FÇñxJ÷­*süxŽB5æx›‘4Qó cµ2Èñmâáëu[ùÚ„â.âû¨¾þt L§úZ m6ÊÃ(’©U \ºß'o‹¡-»…uºï|Ã.3«¼U{JUXlÍÊ®§œ’Ážpò¢qJ.l3 ÞcQð>hôYþô/@¾ÐÂÿ=t L§ð³_»U–ŠVÑwé’;±s$º9…b¾N¹êV}ö1KWD] ‰ë³­ðßùሲ¸¥œ–?Bé6sôÜ rÝs« Ú+ö™åX¾¼‹:‡®‚÷Bã­†cæÐ¸ÃÔ®U‹Êôÿ.(Þ|ǘþ%tµ ŽUrËým˳–¤â9y{2ìˆ)“ý{ Hx ²ù$ÿafÚãþûàB(vóþ¹fâ?Áj&Þ`Ûk+n¿aeU3ZA>!ܜԨ¿þ!èÞ€|£õ×?‚nf;óùÇ™h ,0Aó£q¶\¦{t|ß kê:†9§Lë_ƒÊ¿Î¤Ygt©ù7PNع˘È1Ñ}Z‹:NµzK>„Ç K£ìzKÊ´þTþ2Õ²û‚1žU´™:´«­«YìCž£Š$Ë¢-KôÓÍðWÑ ÜùI–ÑÒ"ÉÔz©{È¿E¿€l¾­áX˜œmM¾2·>ÿ.U èfê~òßA;¡8<Ø­Ã$VmÿJ!¶$ô0IÝŸ1íñÊ¿Uïé’þ. ñ¤–öÇè*óÕ$ûß·' ’ìþ=R-P;øØ£Û”ÎÈDÛ[â1̕ϣûå²l9—îë̲g9öË¿ãó¹åùv9K?.Ô.ŸûšæH¢¡‡»¦šŠ¿By~ùó4ÆÄ¬v—&.Ž](ÙáÈÝ*³74Pò'O[Ò®_˲™kS3·”¯ÌûÀ–ÐhH«õÀJøíÑ-‰q.ñ ð?vÖ%þ#Ü@ ™KôšÒù3щNM÷=iÜx·ufZ¶wš»¾þ<•ð$d­Ql|í½RtÊïÔö¥ ä©©Mˆ4ðŸ`š„éõ¿/Ð|ÈÇÞ¬ |š`.8T Ùæ–™¥j:Äð pò¼1ÓãLžù“ÉY¦Hî?#ëÍ®bÝÉ®H[ 4^æ kí!P³jRw8 yºõVMêN¯B¾jl+'ù-®VÙ 6hcžµFtß«š2Ñš.A^2¦G” îfV‘ß!ï9«UÞô+7Ÿÿì˜Af©•íÿ²i-*¡• méhÛIê»$Ôo;hüä€@í܈ý*>Јøï†¾ŒŽNú¢9ž½¤w{ñW›ñàKõßo£ïKcÏ@cz†å߬¿?"¿Ç”×Qù]Oôî˜üî@ýß4é¤wÇcxÐûò{D:)¿Û½;%¿Ch£Ó1ߑ߮§Wèá÷зgåo‘ÿçbò†%äÃù&~Í,!ÿÇ›ôŠ÷ä÷h!/ÆäË¥˜ü¿ÜÄ[üÍ ùýPýý¤ü~ӻ阿Eï¯&äáLÂ÷×ì‚~w=ÆÎnìÂŽè»›;øß-ùw½Éãv“л;MåFïî&ØÓlŒÝÜ‹IÓý™‹ùöAŒoÌËïEï>oz'þæ‚ü~,z÷P~w¬þíb“Ëyó(áwâ÷|óIŒ-=•ß ×¿ý"Ɔ—bìóÙ.üƒ¾û2ÁŸÇpz‘ÀÿeÌ·¯bÞ½Žy÷‹Ÿð?™ë²üí`ýý›]ÖôíÛ˜:ó«›þZ~×_ÿ÷¿”ߣð«„<üuŒ­þ&Á®¿‘ßDïVšÚ9ñí·1öú]Âß}·Ë6&ö¡¿3Ú˜¿ ÿ^—ø{'z@VÊöfÞ-•¬2:%Vó'VÞØ+Þ7žíW‹?ç²á`Ýžã7™û)pÝ¢?;;»\xW±òïÃß¼‹NZT¨<16>36ùcL‡ç\Dãäµz‡GîžÐ;ÃKàþ&Øó·µ÷µ^”ö%ð‹ÓÏUÏò¶¦ŸÐRô¦ë½÷§—£uiúazÙöݪ—·ýiÃòìéåÂtÉÊ{nøó–Ø¥œèþ\ïŽ_æS²£Ï¶ÙQƒíÐïÞ½^žŸ‰µ–XaÌNÑ­]wÉ“ª›BJɼ¹²êû´•ÙééÅå…—¹å©Šç~o烜ë­OÃIæÆg~ü´Ry¿þ)âR,­gžC~®›búÒ–SxB?…§Vœ5»èÛŸŠ¡~ áVƒOòãŸX\2N‚:áUÈWM ŽþÅZJö@½~ œ h'×lgLÂß@þMZ¶—ë)eÅçêYá” NXÉ%gF@øäïL2ƒ¾Þè\Ûöèñ›Åå¥×o—^½LNôJÓ¶í>Ñô•“RbçÕkUƒ ×KNçÒF¸yŤŽú>¥´^.¸ÎìŠï‡ ±*äð=¯…©ö Ÿ˜4M#„³guËî}JéYT/»’唃ð±w(¿‹H¡ð2嚪©sÚî‡RPlNÁSNVØ+OË;ej}¸ýyÞÏœÿCFüªî¦¤ŸišŽÌ^dOí°X, ÚººÅ<÷ãÖº]¾6Ë .EavÁ è5{Øf2½‹¯^¼xü2nòRš°”+ß–õ«ÿªçÿý§â½y¿Ú¬\ha)ìuÿìûÖfÓÓT¢Sâ%ü»]{m…‹ìuѶ|;²¿‚›¯–ìr´š9e¶Ì³xJd±— ßЪoýº­v!„ ŒS¢œ¡¤þ¡„x4hÄ­!Ȧ™ÄìëÇËc˜áfŽÃ‡u˜ÅjíY)‡ÃÕµ{€1»XÛU.¤þ¨„x~åB•hðd­ ŠÕºoÅ*:VÜ—½(Œ½È=Ú9bT0¤þ˜„M×ܘ ßL¢W0=(Œž6L £§³ÓƒÂ˜nÁ\~äø•¢µÅP6´¹YìzùUo-ìjS;q­S$½åD˜ƒœK±Ìøp=AïžÌ¶^»ËŒž«âÑ,³~ã]­½(M×ÂhfË}¹¶(Y~–t޽üêùó,?ÔSûAì’ÆÇcê;¸ûPš„1³…šI˜gtúŒoõhØÄet™ ].ÐÛÕjàÍ÷.߸>æ¹ÕrA#ý`ÎuCž7NÅÆÉ•œÀã§ö³¬lå¼R(>Yxþæq˜ýîf®h¯G z¹ ½zÃöœ gÙ>BZ¨'f?@øòãÄô2–ËåÔ7¯ËW4÷Bîmëïxáê ñ˜úšÜ€îìkä•f¾†Ù ŽéùÚl¢¯ý”µ*'à HÆLøh&à4‹s=k+˜-£Æ dÕ·ÖãHá‡RµN­K±º$Ä£Ù@^0¥sþ*&JL\_«n«HN$Ö.ðÔ!ÇI 4‘ºøÆxŸ¯«,}–çwGð - ʇ€7 ßÐÎÏ= }×nKùb$"´\„¼˜šÛ%îà%u÷€ ?JQmÂ^Rwøòc­bhÈ[–Äf§|\‚¼”ºAì â"³#ðª#ø~0ÂV[‚dŸË‡[oò ô0äac‹8’cKk̯ØygÍ + :C¥Q â¹XÇ”F¹ÃÛÛmÕ›þl8y®=v øòãÛÇ&ÂÊ^Õ‰‰Ã<ðd­Z¬ËSD€›ÌRÈ¡¼[Zuèt üAßðkÑ,Ñö|z¸V´?ØE†SMŒ4£Ãã«ïÉ4ÄW×LÌY¾†ÄÃD¹åâ Ç:àÅ~Ru é40?ô±'Ópož¡SüDw$ÑŽÁE ¯@¾ÒzO uç€YÈYã;Eqdè(ŠZ_ùrÀ,ahªE¼¦€O ›†…æÏýNÍÝsS¤&ï´Š9an\b A¨‡%µ…v5Hõq ñ´›†t¢Ípäµcvš PdF»zû!ï×a–³Fs ÑôßGÙØQÈÖ"eú U}ý{ÕL¦$ — ëõ3åß^N˜Ðöh9åIØ¡´i£ÕNyBR{ ò¥ö{©¿,aÓ=6í¢q 9 °ENI“wŠÌNÃÅõ½é:å= à‹tág•ý°)E›‚(º%Iä—ÜyäøªY|nHø²yGëHÑÚ²=cÓbt@³¼®ê€òžN£q5<-©íà²"©?&¡þ²¢Qä€ÀÖ8`Ÿ˜xVdwŽGxòÁÔœpöµ˜· ßWý€öæd™íð“Ñ’agú~ÑVAð#Äÿ0ðägÆ…=i1Š{L•…UŸÚ¯§…­UËüv UÏ<C œ„<ÙzÏ<+©ý ògíw RE¦;ƒÚEƒ!¶Æ3{±ÎªHî<œ‘Ð|N¼™Ô…ç!)FËO~°U´Ù_îÍ2ZÎ2ÿ‡ªåÙ“Œ¯C¾Þz›>’#Œ ßÓ.c"õ7%ÄÓncÈ-jmÄNEvã0dBóÖ¦™ÕEnÔ|C£Uóm¡qÓ€FÕª‰êaàMÈZåªfÕã(;Â[oµßœHým ñ´›Æä€ÀÖXum‹‰"½‹0eÂ!ÈC©™õ7ëhëKÑ ‘M”«¥Õ°µÎ—/½èf·UË&¶ÃÀ»ï¶Þ²åãéí\P6)ROB<í¦!MP´Ð²{øþEj—aÉ„bËÑm«Þ×¼´½´Æ4‚|H;¯¶åß›“dÍIKÄå8ð4äôv¹$.ºÃÀ3Ï[o–/š±úr•g—ܶV>¾Ý¢Q¬ÚÑM ª†NLG_@þ˜ñÅ6-¯Ls#Œ©[”|äq²VÅ¿X¯³ KTF€'!Ÿl½AMàCÂSOÏyæ;Åpœ\ÜJ0%ÕqóÜŒðd­Z[­Íº,ÙIzÛ• R?'!žvÓ&,ZØf6I*¤©^ ÑÖ±‰¥Øí¢»N3Ê9öfí |ΘñÙÚpˆÁœr¾X-Ø:V@µi”^5—‰üQà3Èz3Zq¹ÛõrAµfº‚œ$”¶Ú·ºfº #ì‡Üolô·²òz\V”¿t¥áb³è4Z1· ʱ‰ó~à<äù÷X²(:B£nZ1Ê!¤ ä†ÅxŒ•ÃA½W+¾¬ÎÎ,¢4Ómç;Û *À+Û°…Ô%Ù°3«¸imùµRRmõ‰ÊT¦¶#ËiîLKhõÅ 9©}ùAû›[R?/!žvÓ˜BlQ«/ícT$Z¯ÌÍ[ý>óñ*9 <ÒáÚŸ¸ŒÏCÖªëÔ*Rw8yÌØ†/$m¯©·Þ‰'kv*´qàÈOŒ™>ó,¾æÉgꢠ4[@Kt³A؉ ÿWrý7Qò v‘îˆ Ê›¦áª„Ï ›/Œ> °hÓ[uÃTðÔøÊ='Z_â}dÚwÏûÈÖ‡n¼[óÜ’jz®" WSMÏEÙzø½|ØÂ•ç»E²ÌέçTýôö?íx$ wÕõ ¶§Z[©kÀ;ï¤X$œ uYà]ÈiN:'Ô?¤îpr “ΪROBíIgµŽLN2ÄN_ú9 ;4}q 9 °5™î\NÕ:hѼØYk¤;m1ÝG`yëËÏqÙáð©,–æ{לaSÁ×l(LÈ{åZX÷ç!ϳï¡ëáTËñÊŽPŠ€”Ò°|0ï]GP± cªÃó;°oÂO´¾¹#áIÈ'K‡ŽQëÎ)à(äÑÔ §Ïw~Gñc®ë”ËàÈm˜%ugYÈæó±]Êë¤ ˜ƒœë@|7*Sލ‚Im70½*ø>{ÕÔ3«\¾r¡Y \ªÊ»:bÊKçL01ï.BÖŠÑØ]¤ZXÌž(2’¶€® ©žKJtv¢r8YkÞVÍÙIÝ ð8dóSœgX8ÌsósR;rÎMK¹ f'€×!kíð6¬îÁN;P Ún`zÕÀĶj a€à8›r¡Ë>à4äéš4ñdVh±Zûxa…­{¢š»ëOjþœ`&×¥K!PÛ=ª$õ=âi79ä€ÀÖ̺í¥ÐpŠÌhi·h~µ™Q–Ρ+;ðÂÑ”»JwªˆÓ§„&GP5˜ï@Ns?Á° ø¥Y»-ŠÔÏJˆ'¥Ôï_©UÄ1º#ÙóÆÖl”ópxôÊŒÎç™hS¶@<¦ ã.øª²]@¹JS²ŸéB±„¼";kAa5-(¶Ü_ŸdRäGƒ”ýÀ#µŽ°s~{M³‹hŒHˆ§Ý¥ö#PÛxø]= ƒ§ÝÄšOD%Šs8³íÞ#¢ÿþ½3¼Ñã÷ w½Ý”ní=î‡É.Û|ËŃè›ýÍßüL®åPdJÖⓞ/±j™ö V¹íÄYs‹Ew“G3«ï™ð쪎gš·×†øª[,L*¯Ü}bbòŠqr´îâØ#a“?*Р2¹`J‡8û%Äc˜+êC>iÔ7äSÌ–Œj?u/²€0fœ®k:¹Ð'aShzÅ\HZ+ßóQƒÖq ›‚†ížV¬ÖÞ?ð\zo›â!à È'RSœXó‘º~àIÈ'Û_UúSâi»oÊwtÀ7Im7°ƒ¾)ß¼ÒBßÜÒ u\¶ù&)¶Ñ7I]?°ƒ¾IêOIØ)ß=›¦®E»|St!;è›ôôIhî› ©·Š•¤ ·ÄQÍ>øáÈZÝg5ÿØŸ < ùhûýƒžc6ETk›H—ŸtÂ?$Ÿè¤üÄ•G†þ±ö±¨ûú„ãQÈZ–ªæ Ø*ËñdsËTvR?"aÓôPÛD¾JªÒ§ÖÙ!é‹Rr‹v£ªºHÜ¢2¤k$j.Ò· <Y«Oiæ"¤þ„„xÚî"ýp‹þθH?ÜBTZraÓu‘½~mA~÷îÑ— †<Üz÷è—ž#ul·{ gWC_zó6á/t‰êø°+LÞ´7¡Îì`C³A,m_Hä± ÝÓñÉÓãì•G˜¨CÈã1ÏÚä{+B£ ÎÏ 4™`’NN²+ʔ߂&¡ÑòQÜáݵ‚†Ý}:„bGßÑØÝ×Ð-Ьÿ6dÌç—™¨â˜N%ütœ½±2)¶ê”ÅEè> {•t©«_±òáx©¶á¡l=«¼n‹µ|æWÈQÂôî¤=½­Þ㉚c×Ôíð×`õëT½úLÙ«êZ„Òomw•o [`:Uô“ÓÜt \ÎE€?ß*ѹg^V,º?3°=‡NI®â•C›ó‰£³‚Š›'æ-ò8[µƒMÛ.לI™Ù·`C˜^‹<g‘Qnϱ«¹«3êvùÈŽA3&:þDu˜¾;ÂqÈãð ßB·Àt<(4ºè(qÍCÔÎ+U£ûl[YRç&Úi–f.ǧ5r9õ*HŠÀ½Ÿ>¿p,ï¢Î3n„ç!kóx^®ñô,?,pž¯kN±(R4:Œ0$— ˜_b{ž%å鿆عjƒ›mš«I³'!Ó°$tÐHÝZª>¬^—Ð_ê’0Ýé“þ„ ‰; ûÉ^oO$ÍŸ¬#ÕÍæOºMéld¢•M§pRŠ‘8Ô4ôR$éd¢¥%Bé㔬&1Z"©ëž¬Õ…MP›°†íÀ8 G!êÈ,»VÕìOöóv*‰³À뵂«Äj¥éOÛ*ún‚¡RN|Ÿé¨û’ú. õÝ׈Æ{ä€@í܈ý*~ ]üW„¾ŒŽNú¢y©˜Þ Ò;qܶÿ˜©¯èü6úþ°ô7ö 4¦gXþÝÁúû#ò{ôÊïqä˜üî@ýß4é¤wÇcxÐûò{L”ß!ÈÊ)ùv휎ùîŒüîp=½Bßh 縇¾=+‹ü?“7,!Î7ñkþûc ù?Þ¤W¼¿ ¿ÇnÏ‹1ùr)&ÿ/7ñsB~?T?)¿Çhê³[Ú)¯Ä”ov‡|ÿn*& ¹¦|¦wÓ1‹Þ_MÈÙ„ï¯%ØýîzŒÝØ…Ñw7wð¿[òïz“ÿÆí&;¡wwšÊÞÝM°§Ù»¹“¦û 62óíƒߘ—ߊÞ}ÞôNüÍùýXôî¡üîXýÛÅ&—óæQÂïÄï'øæ“[z*¿®ûEŒ /ÅØç³]ø}÷e‚ >áô"ÿ˘o_ż{óî?á2×eùÛÁúû7»¬ èÛ·1uæW16ýµü®¿þï)¿GàW yøë[ýM‚]#¿‰Þ­4µsâÛocìõ»„¿ûn—mLìCg´1ÿ~þ½.ñ÷N&ô€¬”íͼ[*Yâ†=«ù“G+oìïÏö«ÅÀŸó Y?°Öí9ââÛOëýÙÙÙåÂ»Š•þæöfbl|flòǘϹˆG1p^«wxäî ½3Œ²ð7Áž¿­½7²8ýÜYõ,okú M°mºÞ{z9·&~˜^¶ýp·ýiÃòìéåÂtÉÊ{nøó–Ø¥œèþ\ƒŠˆ/ó)ÙÑgÛì¨Ávèwï^/OŒÏÄZË,„0æþŠßïºKžTÝRJæÍ•Pß§ ¨ÌNO/./¼Ì-OU<—b¾å\o}N27>óã§•ÊûõO¡—biʵ¶-ç¹nŠéK[Ná ýžZqÖì¢o*†6ú1L„[ >ýÉ?~bqÉ8 ê„W!_5-8úk)Øõú-p‚¢\³I ròB]:¶—ë)eÅçêYá” NXÉ%g†|éãw¿3É úz£smÛ£Ço——^¿]zõ29Ñò¥Ò1mÛîM_9)%v^=±V5Øp½ätŽ!m„Òê©~õ}Ji½\pÙŸobh¨Ã÷¼¦Ú7|bÒ4tJ‘©õÊî}JéYT/»’唃ð±w(?éJ2y'嚪©sÚî‡RPlNÁSNVØ+OË«Vµ>\‰þ<ïgÎÿ!#þ UóØz§š·w]dOí°Xx8îÕ-æ¹·ÖíòµYVpYÙ ˜] +ò¶Ø†•xíuïâ«/¿LЇ&ž˜ ^©÷«ÿéÿ‡ýâ½y¿ú±a¹TËÁϾgm69Må9%!Q¾ºkŸm qï"{]´-ߎ¬¯àæyà[~õ!íýZæ<e°— ¦HäS~µ”óÔm´ ü ¥Hî†iЊÙw_B<4b#žÖM2‰××—Æð‘Eºñ}o¦a{óîyÅjíY)‡ƒÔµ{€‡!n©úa ñt¼Tä ~‡!keO¬Ö}+Vѱâ–ÖåŠÃõòèXHý ñ¤T,}T¼ «ÅB‘£· ej‘5Z^(rì¼Cµ¿Pz`‹ëÚdl¡\[$7á›*ËÕÒªíÑÆ_wÕ·½¼að™öV¬ü+ºÑ-¹9EþûPd„w!ßM±øøH=Aï`L'¿]ÅGÏ= ›.ƒU,¾æûÊÕ7ýD<)Íl¹U¯r'JV¥BûzçØË¯ž?ÏFwF‹¨ -`a50–xk÷ŽAuöoA¾eL~–±Šë;¼Rs a¯È ¶Æ²¬lå¼RøŽ_ž¥[®7sE;ìÉ(A ê èéþTò4×nç,›ö›¿]þ*¤›ËåÔ÷ØÉ!AbvƧí6‰.3 y²õžyJR ].Aê¯Hˆ§Ý4ä-ª­óÌ>õ¬Hm®Hxòm·Ü×<«¶„A>”Ú8¡‡OË«ŽˆËqàiÈéMp'ŽHÝaàÈgŒ­7ËÇˬ>RõìRØuñYÉñ}”~°ŠÕðG´ªú¨ô|QGCÆCÛ´¼rÈ-ǘºEI£ÍÚRÁPjµWg†¨ŒOB>Ùzƒ:‹ OA>e\<ç™ïÃ6ª¸•`JªmÖY¸á=ÈZëôjmÖ¨d'1‡^ÚÕXú9 ñ´›Æ9ä€ÀÖ´Y¤õQE‚,µV„F³ÎœXo±ÛEwÝ »d9öfí ÍgEk+ìO®ÒýÉùbµŽ¢¨/J?¯šËDþ(ðd½Þd\îv½\P­™Î#' ¥½)­®™ÎÃÂû!÷ý­¬<ÏŠRóižÌ*o5_ŠM“ev!§Z†Äy?pò|‡{,c(:B£nZ1Ž¡è¥†ÅxŒ•í¡ß‰âËê,Ê¥AàyÈç;Û *À+Û0ù<&=Ù:Òaf7­-¿VJª­>јÎANsQ*¡Õg’É>€l¾(¥ÜÜ’úy ñ´›†›±•­¾´„©HðB&ªÌÍ[ýæ=œãU"r8Yoa ½ÚŸ¸ŒÏCÖªëÔ*Rw8yÌØ†/$ͬ×[ïÄMu;Ú8ð dóõ­gžÅçƒ «ŒÅ_‰ÕßR޽¥Ndø¿’ë¬êÛkÕ"_ Û°‹•ðŠI>åPfòɘ+¡tÓ&$`Ñz[u),0-fPã+÷œÂ}ÞG¦%GxvØGÞ°>8d’b¾«¦GšÌO1=eë¡e±zí¦Ï2;·žSõ)H§ÙÒÇŽ»zW]¯`{ªµ%‘º¼ùNŠA† R—Þ…|·õõÏeX á,䎨vdHý= µ¨ud.H†ØÁé R?'a‡¦/䘭ëÈtçrªÖ1™‰:-„ý™ÚEÚ)M[ŒºÑŠ—·Î”ú¬bù¬Ý-ÓÒ’Õàä‰Ô«¶>©¢Aí&ð.ä4k˜„ŠÔMg3µ¨­®Ø&¥ç^ }j€ú#´YÈò”÷&ƒûÀ§ÍwœM±°ŸäÙ6£[¾}¾“»fÈ[n•åÃ~UØkbÄzV•²´ )ŸènwÅtª¦shAý¾a9RLä.mç>bš-Dc@BýS fÙ"YF Ù’QmÄIm70æfÍl¸ÃjýõY¾…Ó‡Oeéœßw°æ|äwv«v–÷ʵ±îÎCž7fßÃè?E*9”¡tz8¥aù ЯÝI :<ÏÁ¾ O@>ÑúV$'áIÈ'K‡NPèÎ)à(äÑÔ §Ïw~g‡es]§\.¯@nÃ|,©; ÌB6ŸíR^Ç ýS@In{<•)ÇTÁ¤¶˜^|7ÄÔ;4a•ËW©÷›å³@¸ðwuÄ”—ÎqbÞ\„¬u0¬±»Hµ°˜=QdtÅHh¶.»øB'‰U¨Ž@Öš·UsvR7”6ø–ÍóܼÃ8ÖN›pÓR®ˆÙ àuÈתW3°ÂT¤¶˜^50±­h ó×BcV.4bٔܿí…v uÍ´Ðbµöñ [÷„D74wןÔü9ÁL&¥K¡ƒÚ=ª$õ=âi7ëÈ­™uãA¥¢ø%Šüèüvo¦~Ž[;ÔçÕÓÄkú+ŸÎS4´Ýµ3ï–ËÑ}Øâ‚BÕ̽µ„ RkD:RWbSz9yÓ4WÕšÒ›00q*|O&j=:›KˆÂ0prz‹À?­kÇ‚JkÂí(˜ãÀ‹õ–Ääß*¯ÃúKâiu‹pC2˘üÚU“ú ñ¤”úý+µLŒîCHö­Œi3`”¤¾KB<š^¹Ï”ÎíLtšA Ã\{ ,öÁò«¬<8»ƒ"†EJt·'F~9¶¨&å.¬ý.’²'•¤\ÀÆžM¢Ls9Ö~Ovøo‚èwåñø«¶ÐŸ^K>°"Ý!“Ps‘F<¸Cõ9©ï’Ь>O]Ô×JùÑ"è~àÈú1[÷šfÑ‘O»Km#PÛxºÅ˜K¯yIì%!JîPfÛð…ëé¿?Fï C¸ÿþô®÷¯›R­Â}à~}dù úæç‰]­!”l%nx÷wõÌw‰UË´‘.GyQ[²æ‹î&ÆSßÔ8áÙ?TÏ.4ŸqÂá»[,L*o?@¯Šão ÿÆ89ZAØ÷HØä 4È 'MéÐ,Ý~ ›®lÖÌõyKiê.nÞR1[2ªcƽȘÉf]ãÐÉ…> ›+æBÒH`ÏG ZÇ%l z³{Z±Z{WüÀsEè¨mЇ€' ŸHMqbÍGêú'!ŸlUAêOIˆ§í¾)ï€o’Ún`}S½ßBßÜÒ u\¶ù¦¸‚€°¾IêúôMRJÂNù¦èÙ4u-Ú团 AØAߤ§OBsßlH½U¬lXª£š}ð Â#´Þ?öÁ'B>Ú~ÿ ç˜„xÚîb\ÙÛÿ|¢“þñ]úÇ>ÚŒYõT¤NÑ KÒµT5ÁyŽÇ ›[¦²ƒú ›&‡Úæ ò5"p>8…°Î9H_ü“’ƒì]sŠEU÷ÀÕN‡!·Þ=úà„G k5[fîAêJˆ§íîÑ—èïŒ{ôÃ%D…Õ!÷!0åþ•¿aUlUÿè‡OÀ@ÛÕ¿ê—žö¯ÐjÕ°Sý+ùФø‡Gš¶fÓÿð¢[ªT~@Ùs¬Õ¢rè0Ú3¿x:S»VS§¸˜Ù,ÛˆÆY ñ´»ô¢Äš•^s<e:t^ñ€„xLs…)Òx„œØ›ÞSÖ Õ'¡öÁ±tÆ’¯Ö¼ôáJ0 Yëh³Z¿óòœp òTû]‹Ôç$ÄÓn[–v¶¶Ð–÷V<·¢Á¬(uÒS2ç«ÛËÓÝ¡=ó~­™ÌÙ*ÛÅè}ã&ÖsçZoÜQ„ ?h¿q“úy ñ¤”ú~ìH^ëÂ/ˆŸ´Qgoxäï-:öS÷1Þš¸Uº8™fN!¬pézWâóq?#%-jcœÄPí‰Iú’A(u&L«ŠqVvELùÄÃI‰¤~ "¿Nµª˜)°ûS mÁ±Jn¹àGµíG6ÇòÕжH(†Ö„5¯2ï߀+á äcÞ ìŠ\õaÌåÈ¥s9 ®ß€áEÈæa1B¿|놊ç…ÃÅè–ªa艥(P~ñ?Øt¸ëQ4ßñÈO¹g٦ͯuWNË ø¯¤ê—ÇypÒÈ5áa‘#ò¥V—RÏ"ü0ì5…UO¾ZäaÏ(êŽzó-È>„üÐ8!×~Ú€²HÙ›Ñêq|²„× _3&~žmkÝKÖÇwà>sUÝêßáyÈç;ÐÔÿº¦ÓÔßg¯<”äêû8½%µ„¡‰ò£ÿž»éOçÝbµöüj‰~1£nªXŠ“øæQÀo¨˜jXckë*èŠø87~†Æš·|ªÆzG)‹E[¨‘ÍP&”¢ºüì²Ù7Û4›cÕö¯ j\h"±·a-Õj@yê”þP—„xÚMc9 P;7b¿Šßi"þÛ€¾ŒŽNú¢yC½¤w"`C3þ1S_,úmôýaéoìhLϰü»ƒõ÷Gä÷µ•ß!ðâ1ùÝú¿iÒIïŽÇð ÷'ä÷ØvR~·7zwJ~‡áÓ1ߑ߮§Wèá÷зgåo‘ÿçbò†%äÃù&~Í,!ÿÇ›ôŠ÷ä÷8ƒz1&_.Åäÿå&ÞâoNÈï‡êï'å÷ãÑ»Ïli§<¼S¾ÙòEü»©˜4äšò™ÞMÇü-z5!g¾¿–`ô»ë1vvcvDßÝÜÁÿnÉ¿ëMþ·›ì„ÞÝi*7zw7Ážfcìæ^Lšî'ØÈ\Ì·b|c^~w(z÷yÓ;ñ7ä÷cÑ»‡ò»cõo›l\ΛG ¿¿œà›Oblé©ün¸þí16¼cŸÏváôÝ— 6ø<†Ó‹þ/c¾}óîuÌ»_ü„ÿÉ\—åoëïßì². oßÆÔ™_ÅØô×ò»þú¿ÿ¥ü=€_%äá¯clõ7 výü~$z·ÒÔΉo¿±×ïþî»]¶1±ýÑÆüûmø÷ºÄß;™Ð:°R¶7ón©d‰‹Æ­æO­¼±?V¼o<Û¯Î+dýÀZ·çx¤o?®[ôggg— ï*Vþ}ø›wRØ´‰±ñ™±Éc:<ç"jE·s­Þá‘»'ôÎ0¾ÔÂß{þ¶öÞ<¾ÔâôsgÕ³¼­é'žU²7]ï½?½œ[?L/Û¾[õò¶?ío„ƒƒéåÂtÉÊ{nøó–Ø¥œèþ\ÃR‰/ó)ÙÑgÛì¨Ávèwï^/OŒÏÄZË,„0濸ë.yRuSH)™7W6B}Ÿ6‚ 2;=½¸¼ð2·<Žf¿·óAÎõÖ§á$sã3?~Z©¼_ÿ q)–€â&ÄÕRL_Úr Oè§ðÔŠ³f}ûM0~ áVƒOòãŸX\2N‚:áUÈWM ŽþÅZJö@½~ œ h'×lgLBi&>[ËŠõ”²âsõ¬pÊ'¬ä’3C¾Pí;Èß™d}½Ñ¹¶íÑã7‹ËK¯ß.½z™œhùšÍ˜¶m÷‰¦¯œ”;¯žX«l¸^r:Ç6BiíC¿Žú>¥´^.¸ÎìŠï‡ ±*äð=¯…©ö Ÿ˜4M#„R|Y½²{ŸRzÕË®d9å |ìÊOZo“gIS®©š:§í~(Åæ<Öèd…¸òt}ºփ+Ñç½Ìù?dÄ¡b™õLÓddö"{j‡…ÂçV·˜ç~ÜZ·Ë×fYÁåkÕvî ßb5kØf0½‹¯^¼xü2nêRš®”«Þ–õªÿìÿ<ó§â½y¯ú©Q©ì²ï[?ûžµÙä4•蔄xD ÿ£]ûl…‹ìuѶ|;²¿‚›ç×XѺr™-ó,žYìeÃ7tÿFýº­v!„ ŒS¢ûõ¡„x4hÄ·M3‰Ù×—Æ01ª‡!ë0‹ÕÚ³R« j÷c¶¡µ«\HýQ ›¢t°\¨adjQyR*—}+VѱâVéö¢0ö"7öhçˆQÁúc6E91-~­^ÁÈÑ@ÛY0r,ÖL C`º3&voZÌ/¹n°ÁPHÌö§6«9E¾ûPD„“'S,.>NOл(ÝÞîâ¢çŠ„x4‹«Ïx/ÐOÄ#ÔÌ–ûrE;Q²*Ú]:Ç^~õüy–_ûQû<ŸnÆÇcYå$Èqób¦ 5“0Ëj‡!‰^´ý•ø±²•óJá»' Ïß<°ánæŠvØŸ/P¢ÔÐÒ\mfÛèS3§Y؇۰='ÈY¶R{»üUH7—Ë©ïR‘cK†|ºuγc¤˜=â1äqWn}v¶V²k2Úú£aªÒ…¿qç74ù?n4Õ05ù÷¡Z…ï«>ùÖL–½·=:æþvݪú¾c•Ãϩ۱rZ0ÃÁ1fß«nÍÁ~Ò¿Ò3냠}дæHh‹ª¾µžø”t ¥jÆÊm©ï’f[tÞ”Î!8†@<št(1q=š^ø·"¹Ã(¶Ã°øÞÕÉqRÍ»ìߨül~톖> ÿµ˜6Ò |xò íüÜ“ÐCì¶”£Ï¡à"äÅÔÜ.ñ;Rwøò£Õ&„#u7!›×“{™ë©:1x\‚¼”ºAì â"³axÕ0¾Œ°ÕAê0¿";x«-b8Ê5Ž’lhGrli 'Fº­Iýî^"sxòE#‘¿ÞÞn«6ØD, œƒ<מ»|ùqícae¯êÄÄaø²V-ÖÀå)N3Nfé@QÞ-­:åІø‘rùênÑ9æñbès…íaÏ2l¼4#ïw<ž'æ,MâçØ¯Ý*sËÅ-~¬‹Ÿ¦ªV*EåfTšÛáÉöd‚“:ÅOtG=á(\”ð d­y5O uç€YÈYã;Ån>t©?ëo CS5(â5|ù‰1¿c¡ùsXs½Ú‰^Õ‰¯c°crj%–#é°¤VÚPÕ?.aÓåHí¢!å€áÈkÇ`4g ÈŒ2¤(bhï×a–³Fs Ñ<ß«ØØQÈò㢞S°ý†ª¾þ½j&SKõú™òo/ 'Lh{´œòl€0æ r«œò¸¤öäKí÷RYB<í¦q9 °5NÙ§Ûð 䃩9æìk1sM×Ñ|–Ùµ†Ì¢«ìýÀ ÂÐK£¦'Ú ¤qY9ñ? |ù™qaOZtð¼ˆhÛÓÂÖžHÕ3¥if¾N´'“æ:Q¢gž’Ôvp™ˆÔ_‘P™Èˆ†¼«µužÙÃg|©Â EPýÚn¹¯yV+l!5‚|(µqBŸ W%—ãÀÓµÖmÔF ¤î0ð ä3ÆÖ›åãeV©zv)ìºø¬äø> J?XÅjø# ZU }Tz¾¨£!ã!‹mZ^9ä–cLÝ¢¤Ñfm©`(5‹Ú«3CTF€'!Ÿl½AŇ„§ Ÿ2.žóÌwŠaUÜJ0%Õ6ë,ÜŒðä{)æNB›5*ÙIz àÊ©Ÿ“O»iœClM›u@Z–T$È2QkEh4뜉 3»è®S²{³Á*ò8HEk+ìO®ÚÌ)ç‹ÕB<’jÓ(þ¼j.ù£Àgõz“q¹ÛõrAµf:œ$”6´´ºf: #ì‡Üolô·²òP<+Jͧy2«¼U_' žÍ'ËìBb¤2$Îûóç;ÜcCÑuëÔŠq EG(mÒ0,Æc¬lýN_VgQ†( ÏC>ßÙ^Q™^܆Éç1éÉÖѰ3«¸imùµRRmõ‰Æprš‹R ­>“LödóE)åæ–ÔÏKˆ§Ý4Æ‘[ÔêKK˜Š/d¢ÊŒÐ¼ÕoÞø©1^%"G#õÒ«ý‰Ë(ð8n5L”ç–TÓ#M様ž‹²õð»X½Éó³ZYfçÖsªþô.g —>vÜ Ô»êzÛS­-‰Ô5àÈwR¬6‘º,ð.ä»­¯.Ãbg!›oߣڑ!õ÷$ÄÓêŽÌÉ;8}Aêç$ìÐô…F u™î\NÕ:&3Q§…°²ÖH7vÚbÔV¼¼u~Õg˧;.Ü2--iPN@žH½jëá“*ÔnïBN³†I¨ØHÝ4p6S tÐêŠmRzîÕÑЧ¨?B›…,Oyo1¸| Ù|ÇÙ ûIžm³`«bóMꆼåVY>ìWÑÍ Ä:1"}eiR>ÞîŠé T LçЂúEÞrp™.È]ÚÎ}Ä4[ˆÆ€„ú§̲E²Œ²%£Úˆ“Ún`ÌýæšÙp‡-Ôúë³| §ŸÊÒ9 ¾ï`ÍùÈ/Ã-Ví,+:ï•kbÝœ‡Û¥¼ŽAú§2õ‹e!·½ žŽÊ”cª`RÛ L¯ ¾Ï^5õÌÃ*—¯Rï7ËgdžwuÄ”—ÎqbÞ\„¬u0¬±»Hµ°˜=QdtÅHh¶.»øBU¨Ž@Öš·UsvR7”6ø–ÍóܼÃ8ÖN›pÓR®ˆÙ àuÈ×;P ÌÀN;P Ún`zÕÀĶj a€Î¯< Y¹ÐˆePrÿ¶Ú5Ô5ÓB‹ÕÚÇ +lÝÝÐÜ]Róç3™”,Åj÷¨’Ô÷Hˆ§Ý4®#¶fÖm?…ˆBž(ò£óÛ½™ú9îÞÕùq^=M¼¦¿Šn$•ÛîZ‹™wËåèúm¶j›¶]VÍÜPK¸y!µFt7A½Ó›ÈKÂáLúÑÖÓ›0±›™4£­õèl/! G' ké´{íX8瀟AÖÚ‹¯^8'W §°÷^u¾Ôg%ÄÓêvá†dšœm$õ9 ñ´›Æ-ä€ÀÖ´ û¢ó2ŠÜng¢úŠp²ÖØ„sêÞ66±m¦Áh8 Y«6ÝyIù'âî@îð"ä4ú%¬¼º“ÀK/µ¾»b%¼ ÙühßîìÀrŠªKúÄdx²ÖðL­>»YGQ·éEÁ‘«\‘ú›âi7 é*ÄVÖgQ¸1Enw3QF˜~}6hUçø›Yò}4a§š£Ävx ò­ŸKGK½ƒÀ#Ó‹šXçÍ¢ôB>Úú:OŠha!µ:˜ŒÏCNs?cBwWʈ1Ècí¯lHý¸„xÚMCº ¸…uÞ^Ц¨Èì>|ƒÐ<æÃþ&F÷ø¦ÍŠE!Û‹bá„5](óƒ$4[O§G Qˆ_ÚñY üN¥¨\ R3µÝ\6ßUq*ªô:÷Ré#ăÆIÊ9;¡8á­w~0½½ÎÄå<ð"ä4û£ •$©; ¼Y«?Úçš,ÙV¾*ÚQÞ,ïÃ{ Ùa{£"”6ʤd`Z‡tˆÊ5àMÈZ=N5û"uYà-Èzý!ù·C&¥jODæ6ð1ds{ZŒB¥Á¤>ØÐQ·'+ˆî2Ÿa[:™Iµ°m•}ÒyØá"dóÒG"˜{}¬Ÿ¢}ƒî¦ ûxöTµ]Û°ËùhwÓ¥]ó«6³V‹4y¬š’ÏÁžðäGÆ)9ƃ×j½cÜ  CØÆH]÷%µ#µvͺK¤þ¸„Ú‘ºbµî_©­ Æè>„d?̘vÕŒ²€ÔwIˆG³6o‰*Ó!G?(!Ã\y¾ ¢‚7_é•Oø wµŽ#Z­òÅ °†û`y¹¿rû.9|Ü=—º› ø‚j¹`{EÞ®¬(Û¾¯¼.-E4—£à¤ä+Òu¹ %NŸtÖžÀöšùAÒÈi}§"?jìb¤¹ŒFÿz¯iv ñ´»Ô¾€ÁÔ6žn±Vœú²+QAð‡3Û–]©(øŒÞÞX÷û?л޿nJ·öu÷ëkâ¢o~®×ΩõÝ%k‰[–þÇz¼UÉaϬ\ˆ®¹Å¢»Éã×cNxöUdz ÍÑ-±ÿª[,L*œ úG+WŒ“£u×Ü ›üQ•ɤ)Ú_´_B<†¹¢¾ãJÚt·ãJ1[2ª½í½È˜mrºÆ¡“ }6Ý¿¤˜ IË{>jÐ:.aÓ `÷´bµö®„ýHW½Þ¦xxò‰Ô'Ö|¤®xòÉöW¤þ”„xÚî›ÒÁ“Nø&©ívÐ7I}Ÿ„-òͤÞÓN´ŽKØ6ß$…CÀ6ú&©ëvÐ7Iý) ;团gÓÔµh—oŠ.a}“ž> Í}³!õV±²a©ŽjöÁ'@Öê>«ùÇ>øáQÈGÛïô“OÛýCŒ+{;ã’OtÒ?þ0é^OCÿØGÇH«žªƒôÂ)°„ËZ–ªæ ˆTÁñdsËTvR?"aÓôPÛD¾/µÒ§ÖÙ!é‹Rr½kN1iÿÛŽÙ‡3۶϶Ê=úà¸8›Ëæ³>ÊîAêJˆ§íîÑ—èïŒ{ôÃ%D…Õ!÷!0]÷è£EeŠ•¢ê"ýp ÂÈZu¨š‹ôKÏñ:¶ÛEèw'$ÄÓvÙ·Øß‘g/;è"ûáSnAüÚqÑÝ»Ç~¸a[ý°I¬¿uª!õG%ìT "ßRÞ÷8—á³;äàSlÚÎú†rð„pŠ™¶Ž@À);8!õ#j@bµîtȽn bhè¯e©ï’OJ°÷ùÒ›· ¡k¹Ãg YA˜^¸Xål!õ_JˆG}5@_ "1ûv´?ZCaô´žqö²;FIlÌ2ëìF`“ µ«Ì¾Dš¶æTÃð¢ØßZÛë¥È“¶w힆¬uU&•=:D㬄xÚ]z/PbÍJ¯ùä‡2—™¨QˆÇ0WÔ{N¯¯2±=§”ŒZó0‘êejcQMKn&u¨y¦»aàyÈm8jFêºcÇÚïO¤~\ÂtŽš©ðkíë–pOÞ­–Uü†ÉBÔ6ß®&Jw„ù~ÆÊÕÒ*7[cסHQSò~b¾A?lO4Or¼Æw„O!›Ÿ4ÛÏ#uÒ&<Õæí(dBiZ¤ÕnGÉï†Zi¼×n·#õv*øí2r~9ÓJ·Ûçç­¢]ÐàÖ<ù`jÍÆÄöÍûKŠçT²>:¥j‰\qFƒõaàÈi^À`×˰e»ï¶ß®Iý¬„xRJ}?vÿ¯Æ”_Â|ßdL{†F9ð~ P{”£<ôçAÞv6Þ"ѵ3€W)û¥“8sõU&ªé¦ÓE?m=Ÿ(8VÉ-è†:ÛŸÈ[žLN²+Ê,¿Fžƒ|ΘåaÆäÓ“ʼ~ .„‡!nQ%òøt LǸÓ.Å_ƒÙ¯S-ÅѦRŒ‚^±963}S½D^„£Gv9ù ˜}“jNžNÊI|\+ÂÓµæg =ã[蘎gLÅ–gÁ®Ymb ³-_Õ+ÝïÀ“p ò”1ç#͵³w`C˜^€É!Æ>ÒÄÍ›Yvûªº­ýL‡ ³º»SÓ>œ¨„S(o œ ïB6ïžmöfÚ{²¼š›Ñ!¹ b„g!›Ïpš}Lò©½z5S€nf¯CÆ|è4ß ÓéÖ}9ÎÞ4γD“³"îϦUh„þpÌȬæiþy–>UNÑr•PZ¤0LÑÒ8«xZܪ‘¿Ì§Á.³ iîi²¶PÁœ²ØV¡Ú%ŠM£œžu¤p ò’qzöÿÔ X"¡ 4šr24]º¦ÓbŸgÏ]ßöYÉòÖ²%Â8ÉQ~V„éõm®$÷åöF«…y–„fq„äߎ7µ0—2Ô-Ó=@ÜñÇÔ+ô"ØŽC6Ÿq?7Î^{¶o{Ò±€˜¦×ÿ¾µ“är¼ZÊ匡 „· ßúYƒ vnªÆ ^%U [`:UÒãì×Ò%~"ÃæÆ¨|Ǩ% ›¦B5Oíh>´þ[k{\åäü€$JQþÛ°^„½T­wlëåÅ¡n¼>ÈŽAÓ!«¶¥à–ƒÀá½·õþH]ª½ªû éï’OjY€ ¢âB>}…dWÛ“IÓ½U¤Z v¤³!ãCôGjؤA3Wö¾Q龉2!”B6hfÌžLüv΃ܩ7?p×=«¤Áñ0ð,d­!o¼×$…9&u€ç ku.Ô&l&%u=@™ÛFWVÇ2ÎÇ kÕ›;ZÆ ·Œ5Ïþ¡â·4(NïANóFó c(.ÖºÑ\Ý0ÆsçŒ £‡¶m¨Ö_Dáð!䇯Tn3]^²ƒ ·À/Z–¢‡}¯À)Wݪß©N9öÛÇÈ 9J×’ßǘFõ»ý[øyO„);Ùîd74h ‚G€£µÖaÔ\ŒÔ ÏBN³ÊOp1R× <Y«ÊoÈ~ÆwFY<˜¬•jض²;œ‡<ŸZæÐâ½m}7¡ßB&ú»LG{s¤¾KBýÞœOÈÚ¹ûUü‘ñßß¾ŒŽNú¢yç<½¤w"8_3þ1SߦôÛèûÃÒߨ3ИžaùwëïÈï±fuT~×½;&¿;Pÿ÷#M:éÝñôþ„üç€NÊïÐÓ=%¿Ã!¦Ó1ߑ߮§Wèá÷зgåo‘ÿçbò†%äÃù&~Í,!ÿÇ›ôŠ÷ä÷8üz1&_.Åäÿå&ÞâoNÈï‡êï'å÷˜Hú,Á–vÊÃ+1å›Ý!_Ä¿›ŠIC®)ŸéÝtÌߢ÷Wòp&áûk vA¿»cg7vaGôÝÍüï–ü»Þä¿q»ÉNèݦr£wwìi6ÆnîŤé~‚ÌÅ|û Æ7æåw‡¢wŸ7½sA~1ËCùݱú·‹M6.çÍ£„߉ß?NðÍ'1¶ôT~7\ÿö‹^бÏg»ðúîË|ÃéEÿ—1ß¾Šy÷:æÝ/~Âÿd®Ëò·ƒõ÷ovYзocê̯blúkù]ýßÿR~À¯òð×1¶ú›»þF~?½[ijçķ߯Øëw ÷Ý.ۘؽw9ÿ~þ½.ñ÷N&ô€¬”íͰûZ²Êè”XÍŸk-#°Bqá‚45óg»î’'U7…”’yse#Ô÷i#*³ÓÓ‹Ë /sËSÏýÞÎ9×[Ÿ†“ÌÏüøi¥ò~ýS(Ä¥XÚþk_-Åô¥-§ð„~ O­8kvÑ·?Cý&­ŸþäÇ?±¸dœu«¯šý‹µ” ìzý8AÑN®Ù¤{äí®éØj\V¬§”Ÿ«g…S.8a%—œYdáw¿3É úz£smÛ£Ço——^¿]zõ29ÑH(aLÛ¶ûDÓWNJ‰WO¬U 6\/9cH¡´!Y¿Žú>¥´^.¸ÎìŠï‡ ±*äð=¯…©ö Ÿ˜4M#„³guËî}JéYT/»’唃ð±w(¿‹H¡´Ã2嚪©sÚî‡RPlNÁSNVØ+OË»j}¸ýyÞÏœÿCFüªæ7q°¦éÈìEöÔ‹…ßÛµºÅ<÷ãÖº]¾6Ë .¿¹Ë.8ýb£fÛL¦wñÕ‹_ÆM^J–råÛ²~õ_õü?ïÍûÕÏÒ(—w× ?ûîµÙ 5ꔄxD!ÿó];n'Ùë¢mùvd‚7Ïoüâ—,ÓuË<—§Ëa&{Ùð]XâݽT·Ù.$…ð ä'ÆÉѺñã©„x4hÄ-Ö 5™h¹¯/?Œ!'‚ËԢ⪓‹ÕÚ³RG® j÷¥AX»‹†Ô—°)x¾aÑ”‹F¹d¨Fwƒœ^Éì[±ŠŽ·KÚÖÓÉ¢Ù›ÙñΑÎz|Äd­YxþæqXîf®h¯G z¹ ÇP¶ç9ËöÃ7t;¼zbD(VÂôÆJ½Œår9õC˜Ûâ(UÞ­òÿD¡[ C›ZÑ޼Sr¸wZ7ò„!?4NÈýDËGm‘0GF¿Ÿ¹z5Ë6Dº”“p´ cÖêô“ ã_zf}´›&!¡9­úÖzÒ…¤k8U3VnNI}—„x4›ÓÏLéа)\"®LBxQ8·"9 G..Fµà 9‘¼Rߨm—¯Ý­ËÀÒG >…¬AùðäFÝÛ¸üì¶”ƒ¡à"äÅÔÜ.qS:©»|ùQŠj6¥“º›ÀÇ;û^¦~ìƒ<.A^JÝ ö†ñN‘Ù1xÕ1|?a«-Bš`åm@o¦!îX«,âX”kE0llGrliù;ï¬9tOwØ^jÃàEÈSoo·Ul"–ÎAžkO]>€üÀ¸Àö±‰°²Wubâ0|Y«kàòñW&ÃÞ•O']VÃ1Om:Á†žE4K,sÒëÀ­°¢ýÁ."Œ‹jb¤‰¹Ú¥zK1òoÏÒj^ŽGpËÅ-6yÀU¿Z©•›Qi‚*.b“¡SüDw$ÑŽÃE ¯@No&(ÑHÝ9`²ùDÐ) |DGíÐúÊ—f CS5(â5|Ù|Ø|,4îtŒìž˜"µ°™† µKˆÙ{TRÛÁyð(úóàF4N"ê¼vcì¥ Ef§2QÿƒP\¶_‡Ylø¹…hƒï\nì(d™ûÁö<§¶ÊrU_ÿ^5“) ƒÀ%ÈzýLù·…&´=ZN)Å’·IµÚ)OIj/A¾Ô~o õ—%ÄÓnòNÚÖ9eŸ˜Sd7 g$<ù`jŽ9ûZLØEabi'N–Ù?Hoù<öŸ6„¡—FMO´70´yÕ\&þ‡Ï ?3.ìI‹å­b‘ºWV}ò±ž¶V-óX⪞)uµx„†=¶Ú3G%µŸAþ¬ý.Aê¯Hˆ§Ý4Î!¶Æ3{±¤HŽÁ ͧä¶-ß>I1štöƒ­¢Í&ø²T–Ñ‚U–ù?T-ÏžÔ`|xòõÖÛ4CÉÞ€¬7hdL¤þ¦„xÚMãMŒ°ŠÕðGš8W5tb: üòÆŒ‡,¶iyå[Ž1u‹º #‚¬Uqǯê,•àIÈ'[oP—ñ!á)ȧŒ‹ç<ób8N.n%˜’ê¸YžÏ¹Y«ÖVk³Ä,©Mo7rcAêç$ÄÓnòÉàÖµY¤­QŠiF¥h´ò͉õ6»]t×¼U̱7nµX»_ŽÏŠÖVØ[¥«òÅjÁ.Ða3ªM£øóª¹LäŸA֛ъËÝ®— ª5ÓgÈIB±¯^k?°ZÍ$ÍSEæ¡¡ÑßÊÊËYQj>­ÕYå­ú^%ŸYa¿›ìì‚r0Dâ¼8y¾Ã=–+(:B£nZ1J7JÈÛ ‹ñ+‡ƒz¯V|Y!DixòùÎöˆÊD¦>; ¹…4ÌB6_?̬⦵å×JIµÕ':SÀ9ÈinŒIhõ'%“}ùAû›[R?/!žvÓƒ ´°Õ—¶Q)$«èš·ú}æãU"r8y¤Ãµ?qž‡¬UשU,b× áä1c¾´º_o½wþïThã™ÚÞ.?1fú̳øš'Ÿ©‹6 Ñ Hì@+åØ[êD†ÿ+¹~ ßY¿a+á? ‰×%¥'W%|Ù|aôY˜ŠM{ت¦‚o¨ ÆWî9Ñúï#Ó¶'xvØGÞ°>8t^ƒŽª¦gi˜N5=eë¡­bIžŽÈ2;·žSõÿ« Gh´ýbÇɽ«®W°=ÕÚ’H]Þ|'ÅŠ aS2©ËïBNsÒ9¡þ!u—€³S˜tVíÈú{jO:«ud¦$Cìàô©Ÿ“°CÓ3È­éÈtçrªÖA.Ø ì‡¬5Ò¶®¯°¼uÇgË÷ísË´½EƒêpòDêU[ŸTÑ vxrš5LBÅF꦳™ZèµVWl¤nx²ù2ÖõGhòå)ï$&÷O!›ïzŸba?ɳmlUl~ùJÝ·¤ òˆõ¬*åë‘íquåTû+&i÷ŠaÅ$ÿ¶‹1E7¡›° r—¶s1Í¢1 ¡þÉI³l¹…¬¸•J¶dTqRÛ 1´ÌO©ßa µþú,?Fb‡Ã§²tV“ï}\s>†M_³¡pï•kbÝœ‡¶KyƒôOss¨‚ïDeʱU0©í¦Wßg¯šzæa•ËW©÷›å³@¸Ä”wuÄ”—ΑDbÞ\„¬u8½±»Hµ°˜=QdtÅHh¶.»øBÁOT¨Ž@Öš·UsvR7<ÙüÙóܼÃÃ,ÔN¼rÓR®ˆÙ àuÈZ;¼ «iÛ`'ªRÛ L¯˜ØV 4 ЩÔȘ• XöeêƒÒ¾Û^h÷PP÷L -Vk/¬°uO@tCswýIÍŸÌäš”à½÷¶TIê{$ÄÓnÒ¼c gÝöSüª(lœ"?šŒì‚|H‡çÕÓÄkú+ŸÎt6´Ýµ3ï–Ë6_Ýa«v°iÛeÕ̃ZÂÈ ©5¢» _›Øž>@v¶"êsB{*-Ù§x6¼Gg‡ Q84Ú%l'uÇò^…|µ=ås8yƼbRu'õ×$ÄÓêÖaN²Niþ±ÝÕ2©¿!!žvÓ˜GlMëЋ@Šä>ÏDuá`Æô(æÞæ…"õ%Ÿã;ÂaÈÃé™t6¬•“À3µ$¨Õ!Ÿ#S G3Ûn×íŠ×CJÖ¥û"C=Ò±ª•˳ÀÇ̓¥íG¼eõÃÿ Qés”¢ä¶ºêû\R+…µmwCê$Lg]A™ÆCä€ÀÖT}{Tmƒf‡z%Ä£Yé5Ó¹ŒŒ¡K­‡ýaVqñ:ef[ù Vp¼¨C¬Az?ð*ä«­7èE¡´» Ý–Dê¯I¨Ý“1£ñ9 °E½¡Hë1ŒX ™Aïk¢sña8,Øt Á›øÚ®Ëm»h—×iÆmÓÌiO{ &ÌAÖ›vmç)2²j;/Åøä“È73énKhçIÝ4ð.仯¦=­ÝUPPµrb2 ”dCFûªüpœ"—'ð²'øyO„v»²¹*Lø„˜ðÊ4ŒH[åûà„G!m¿ÐsLBÑIÿ@¼´¦ëûèÜYâÖ¦DA¨âÚíCº–ªæ 8Ú^»Ÿ®?ËÔº#}D¦¢¶9ˆ|y¤N!¬³CÒÿ¤ä ¸E dH×HÔ\D¾zý8d­>¥™‹úâi»‹ôÃ-ú;ã"ýp QiuÈE„AL×Eöúµ4»w~¸á0äáÖ»G¿ô©c»Ý=»âI)õ;jꆈ›ús˜F@ê»$Ä“Rì}¾ôæmÂ_èZ.Äðy‰¬ ”V^Ÿv-ú¼ŒÔiÐWôÕ`¦>ÈL¶_Þ7¹m5Œþý«x{Ù£$6f™õ v#°É†ÚUf¯‘&­Ù¸8¼è–*Õ€‡Óðkµ¨èò™ÈÝOCÖ:M{TM9ÛˆÆY ñ´»ô–QbÓY£ï{c•lºªN‘Í0 ”z÷š¶”4Q9ÀO~éj!fÇ€ 2Ó­¡vÜ‘·Míð<äó)ªMè.º~àä±ö)©—OJ©ß©úÿŒðmªî¡œ¤¾KBýªþHäQ»£“Ø{ý*AˆÇ0[î–Øý)í!˜X³œ`c­ZÌÒ*úÄG6Çl¯ÊwùY¶þ¸~à”×''Ùeþ_£( ïB¾kÌÿã»Iø©Œ Z¿•_ÖþGcZ‹Niâjîf–ÝÒ¡õ+PùUª´†ØѺq5Ëff®N*³ú5˜A2f5RbWXÓ¦  ur¿!ÂÈ#Ú{ÐØa¿“ LÇaç(³šŽQO»®9Åb袹¿Œ9—›Ìò<¥ø^·¸µî–ÇÔótùH8y®uuq"o¡[`:mÂo9ß¶ 7®ß½®ž;ßÉw©ºÃõ‚_¢«|Ãz¹àX%·\ð¿ñyP¥‰²çnNˆ—aÏ\½z5„o•™¿[ÂôÎtŸ+HI” 4%aó1©ž¿¿3Âsϳ|4Nœ(>UɪÄDÌ[½îztqNmà“åßo’‹­SØAå¤X O(;3LʵqÑ]«mpŽbpÑÉD1: lµ„(_YÂk¯¿\ˆ©òÉR¢µ¡°ÒÊW ‹Éƒ!¡teZÛë«t L§¾zÀ-wÓfAÕ+‹"§îÚZ–ދزôPîú<& œp螸216ˆ>€üÀ8¯ 1 ˜h©<Ëlo,ª5j->ämš8î>Çø­ê&²†”¾‚üÊ8Uƒã앇ÃÁê9½„b¾jИÓ×;å4§ŠŒF¬ÉÆŒ.‡o®]M!Ã7 BiÒH²¥ Â*<¡ FêœTÝP½: ý]j%²AãO}…dßž,HMT 4Mï3¥ó>MF lÚǜ֤oáô&½Š™¨* <9Íøº “^¤®xòÉÕ&Lza™„§ Ÿ2¶ÒÓ¼7$*°‚gñc<ðšªÁ±ÓÀ›oš»S¤QBÞ4›øO²Û>ÞhøÕ’»ƒÀcÓ Ÿ–`³¤®8’©mhµÍ’º.àqÈæQPsÜf­rtƦµE]øÄÓ‰ªfL\OCÖŠ«•fuC¦¾›Pã’µ–-·ÁT3 Œ‚¨ßÑp‘µs#ö«øõfñ_ú2::鋿eUz7HïÄÉ»füc¦¾ˆ÷ÛèûÃÒߨ3ИžaùwëïÈﱃâ¨üÁBÉïÔÿýH“Nzw<†½?!¿Ç6‰“ò»½Ñ»Sò;,›ŽùîŒüîp=½Bßh 縇¾=+‹ü?“7,!Î7ñkþûc ù?Þ¤W¼¿ ¿G x1&_.Åäÿå&ÞâoNÈï‡êï'å÷Xú,Á–vÊÃ+1å›Ý!_Ä¿›ŠIC®)ŸéÝtÌߢ÷Wòp&áûk vA¿»cg7vaGôÝÍüï–ü»Þä¿q»ÉNèݦr£wwìi6ÆnîŤé~‚ÌÅ|û Æ7æåw‡¢wŸ7½sA~?½{(¿;Vÿv±ÉÆå¼y”ð;ñûÇ ¾ù$Æ–žÊï†ëß~cÃK1öùlþAß}™`ƒÏc8½Hàÿ2æÛW1ï^ǼûÅOøŸÌuYþv°þþÍ.ëúömLùUŒM-¿ë¯ÿû_ÊïÑøUBþ:ÆV“`×ßÈïÑ‘]ijçķ߯Øëw ÷Ý.Û˜Øñ*åüûmø÷ºÄß;™Ð:°R¶7ón©d•Ñ)±š?y´òÆþXñ¾AÄŽ9¯  ëö?íþí§Àu‹þìììrá]ÅÊ¿óN ‚116>36ùcL‡ç\D£4ë':‚ü(Eµ [ IÝM t‘¡³ï U#O€K—R7ˆ½¡A¼Sdv^u¨QnµEÐG¸i™wƒ{3š]a5‹ˆ>Šp²Öh½!ßð;¾üŠwÖ» sQ0}sxòE#‘¿ÞÞn«6ØôQ8Y«§^`—€ ›÷dö± ›Uè›yà#ÈZµX—§¸ |2Ëè*·vÚCâ{“åËÂÅ@Ê øë ì@ò£É¸T51‡aý„â& §Æ‰9ËçÙ¯Ý*sËÅ-V¶Ã¤.ó«•JQ¹•<”—Ù“i0cè?ÑIô„a¸(áÈWZï ¤î0 9k\`§˜Ã͇îvðË—f CS5(â5|ù‰1¿c¡ùs müd÷ÜÀ©É;3ŽAÖš K(±„ÐC’Zi;L»Ç¤þ¸„M1ÊÛECš 5yí4ÆØKóKŠÌ¤[oø°¿7ÓpzMq€ÑÕ< ³Íyñf…,?|â9Ûo¨êëß«f2%a¸Y¯Ÿ)ÿö¢p„¶GË)å bÒ²v«ò˜¤öäKí÷RYB<í¦!®äا쓊ìNÀ B>˜šcξ³ÏVáûªÐÊi–Ù?)fùaKè€&¥ëàC›WÍeâø ò3㞤ØÅbe£²=-l­ZæAÁT=ó$ pòdë=ó„¤ö3ÈŸµß%Hý ñ´›†tl·•ž)V8Ù†7žNÅ3›W²z~¹a—™¥ÃÀcÓ[ñÜ-õ¨ŽˆÌàyÈç[?V u#À1ÈcÆ6:¥j‰ÖTí¨Ž_A~eLy º¶šé”¼+XZ®è¬AËž€|¢õEê'!Ÿ4.ϸA…&¸¡Um7§ÐŒ¢e3å[c‰ç)à"d­yîÆ÷QÔA÷©Í™¾~Uô=«¼n‹4F £0/Â6¶¸§%µlqIý ;ÔâJ3L-lq{±…@‘ܹLÔȞˤ±ÖLêÊÛÐnùƆаÉ묢Kß±clBÌOR7xlkLƒø!à,äÙÖ›ö9 á=È÷ÚoS¤þ¾„xÚMƒ!¶Æ´wnÒ’¸‡5@Öjfcy×åþŠdËü’r7˜w±‡F_ÆXO5s‰øP¬­šï™®·‹œìšó‘–¢E‹è³ ‹Ž‡– ßN*’ƒNCžn½[ž—Ô^…|µýþ@êg$ÄÓnãÈ­qËy˜"à pHÂáŒÁîæL\œ1­qQ9< Y¯+šb·œÈ0àEÈiNf&tËIÝ)à%Èæ“™—¶ój;ëU¨ª±ÇËÀçŸs}Q°Û+9åp¸PßꈞxhøRWžæÛ‹Žñ·rlÌ*ÇXý/¨&I>õò ã$-ŧƒ/óù>Œ1X`½Ý'p×mš²¼žÂÿUýh½L59Òt8_<Ø“IcñàŠUtÖ©m¥ö6ÚÀé3~°Þg¥ÐœJÑŽÊÆW¨”BÒòAÞLº+± ØImÌi­vµ¤~JÂtŽ)Óζp¢RlXVdG£é^`úK×77œ°f iE×oð­D4rR7ðs|{u½ÖTŽ”HÄ!›Ïd,„Õûf™*ö¼]ŽBCÚÜp‹vH8ú‰Ö(W«ATùPz÷f» Úß”¦̶U«¹ê¤¤ö!ä‡í÷‘ÏPxS)DeRÙBWÝ_?J È/ ṵ̂A0%g½·án²|Ñõí87ÅÔµŸ3Y¶ÉwÄpƒ§å4Ռ΂á ÈæƒûD%ä^ÍoäØWa2ø•¶Ŧz:<}^´± ˆc<Š)˜‚yÆ„oi•¿f%µsµvš9 © !žvÓÈ!¶hF'lÉMÃA Íg$»›·œÐŒ$]ÍAóÚÌ:ù£gêåwb ʇ€élË—¿ú©µÔÄÁ#ѹ|Y«‘R<’º›ÀEÈæÒ@¶¶iFµÒ!&€¯ ¿j}¥3 ×"| ùuû½ÔÿBB<í¦q9 °5•Îé$Ÿ"Aš¬ëΈ½sÖßp«ÅBT׬ÚQ?¶¾E#Öˆñ<{Kcí +Ú·g¯­…ýÕŒ&þG/ ›wzøý4ŠT®¡œ¯eÎJ§T1ËÇ|y~Ž©V‘Dl8 y´õUä5 ÏfjË„†E4Í`cÖ;_å-Ú{=±jç-ºl†Ïäð«EBSµ+"{ø²¹]óÝ’ÍÜBU<·b{cû“ª¼t7V;7bÏHjG ´¿f%õÇ%ìÐFìÈ-Z ŒNe+r£>H/Ð|1°¹S©µÞ ÞÄÊèFZIq½Èœžƒ|®õõ!©; d™±7oÂþ°×¿æxáwUËŽÎgj}Z.§yÎ5¡¢¹ w"|Ùü„˜²‡ãœk ñ´›Æ-ä€ÀÖT4=<Þƒ"µÛ™¨n!<ù€5Nioõ Q9†<Üéz†Èœž…¬ÕR«gn#c ÏAÖªÞW¢šëtÚéþ`yŸO TMˆ2à3Èæ;üÇhE¶òˆ&VØWü–ŸF ˆƒßЪÓðwà†„cÇZ_/Þ–ÔJ›Ú]!‘ú âi7»È-ªuöõÓ½^àϤ^$*é׋?±3±b$6'ç ·¡6‹œ%d™±_æc´Ÿßfƒ7ºULºbÕ^ÕΉäyàSÈæGÌ¢­{…°‡¸®:þ”v‚šméW«þf%µƒµ¦ÊÍê{ðxÚMCZNjaõ·—Bl)2£§^ ùAàfF“Kkˆ˜åÙ%÷ƒÍ7óÔ·öüÎö\–w«å@uBtfExòÍÖ[µ´>'wõÛmN¤þ¶„xÚMãr@`‹u*N‘Ú«ÕL‹°0Â~ÈýÆF++‡ÎÉŠRó)®•UÞªÇõô™åÙ<¸•]P>OLœ÷ç!Ïw¸ÇòEGhÔ­S+Fi]ÃðX¼üÛc¬lýN_V'ˆ"Qž‡|¾³½¢2¼¹ ÁâHÝ0 ÙüˆÂápȺimùµRRmõ‰Îp.SÛæÙêVÿ¡d²Ò8­ÝÍ-©Ÿ—O»i…l¾|?ÅÂ~’gÛ,تØ<ÂAÝ·Ü*í„§^#Ö³ª”¥k×åŒí®˜^@µ@ýŠIþmcŠ<^B7aä.mç>bš-Dc@Bý[†Ì²å²âU*Ù’QmÄIm7PÜÚkœ wØB­¿>Ë8Ûáð©,ÝkÄãGa¤øšM–Q)ÕB$Ö}ÀyÈóÆì{ý§Hå5ÊŽ0ýSKƒy·èòûñ<»0¦:< û&<¹ q:_KxòIãÒ¡t çpòhj…Ó‡+¯ë”ËàÈm˜%ugYÈæó±]Êë¤ ˜ƒœë@ü‹¨L9v  &µÝÀôªàûìUSÏ<¬rùÊ!õ~³Q$ªV‰QWGLyé\ßCÌû€b/…ÃÛT ‹ÙEFË(FÂôÃ%ï¥@‡ªÎNTŽG2µ‹XZíì¤nx²ù9¿3,æ¹y‡_IX»Š›–r5@ÌN¯C¾Þjà ì„°Õ©í¦W Ll«è|‹uhÌÊ…F,û€Ó§;PhoQPoM -Vk/¬Z8’mˆnhî®?©ùs‚™|)%x/ä½íU’ú ñ¤”úý+5{Ñ}Éþ*“æˆV9 ¾‚É ìÒ5½®¸ã)Êt¾FÎÄc˜+óKᨻ õ‹h{Kty4M–ð_ä]ϳýŠ[.ÔúµÈÀª‰ø%Š“pò¼q"O„qçEqa*v¹À–”g¾zf×]/lÑJ“Ѷ(МúŒÕ¯@ŸPZå6LÊM„ÉF­.%J…àÙ•°èÒzž"›¹«>#äWî¨Rÿ5èJ§ˆSrî•‚íç=§R¿„i›!“ÆßtÖ½—hæÞƒ¦t¾ÉD½â1Ì•/‰XŠÛc ?®€¥-kµø´ü&êZô×ÐQT´‚¢%Ú—©uѵã_}›‰º_„31:Õºéß"‡ ï HAAh'CCH58¯?¬ʱ7¶Í~éß;eßU¾/ç[|Gø²ùìü݉™»wï"<¾XNÑ•uŒÅÖ+nåúî;d8á]ÈwÛ_㼃jéT|Ϲ‹‹ƒæÛüÛç0+ùzØòEï¢ÿYVªæ•›óß"„ÒrˆaІùeV”¦uÏR/p \‡!·¿ÀW¡Z`ZN›ë^á†ÿO…ý1ºT…oŸ¡NDão·øo#³(WK«¶GΦš¢±P²ÊU«XÜb~˜D›9ÊñÝlP'”NZ&c4Ìù’ä7$³!þ<È«*Å5Ð"…¬5IŸ0”G’з"më©ú¡ru@ê»$4ëqÒ¿Žˆ\_šSä·‘‰ºøËû3&Á§Œ¼DcDB<í.5#PÛxºEȸR |ïB¿¢ÚLµOK”z3µf®ùâ>Dÿý1z׳íõöɶñíkþe&zßK ùÌÌïÿ@ïzÿº)Ý]ø¾÷õ«7K¿Ê"øA¦æ¹ýÛÆ‹÷ón¹Å´}³¿ù›ëÓÏ G»ötPªL/‡ÿW±?¾ýpuzyµê 33yûÚ홫×ïܾµ:&!ÓPal+ŸÞ°|Öœ¢½Ã'†}~ÉZä[áE±ü¥ž/±j™vnŸ ëå5·Xt7ys_ßE;áÙ?TÏ.4J [¡U·X˜TÞïBôW ¯'GÙ»@A`“?*Р29eJ‡¦…÷KØ4n×Ìõ‰ri®8n¢\1[2‰¶ž0m½Y@³º¡k:¹Ð'!Í\HÚa¸ç£­ã6ãÜ=­X­½+~à…ýüÅCÀO¤¦8±æ#uýÀ“O¶¿ª õ§$ÄÓvß”ö uÂ7Im7°ƒ¾Iêû$l‘oniÐ:.aÛ|“Û蛤®ØAß$õ§$ì”oŠžMS×¢]¾)º„ôMzú$4÷͆Ô[Åʆ¥:ªÙŸ Œ‰…Ü*ÿØŸ < ùhûýƒžcâi»ˆqeogüCò‰Nú¢VÔ0]ÿØG»«žªƒôÂ)za©Cº–ªæ 8`ÄñdsËTvR?"aÓôPÛ¤NÑ×éƒSëìƒôÅ?)9ÈÞ5§XTu>¸á0äáÖ»G\‚ðdóYe÷ õG%Ä“RêwÚ8× 'èêOÐe÷f ñ¤”{Ÿ/½y›ðº– 1|¾GV¦w]9[Hý—âQ§A_ ÐWƒ™z:Ù^üh‚7†Ñþýûx{Ù£$6f™õv#°É†ÚUfE¤I þúÕN GËn©R ø‰-ϱV‹Ê±TÂö‰Ïž†¬Ö26 ·r¶³âiwé•QbÍJoĔޛ‰"x Äc˜+êý¦ ²¢’‰í7¥dÔÊSµD§_B<š6ÜLçbtÓ±¼5+KÁ㞇Fÿ8¦AyxòUÝ*}÷=OR× œ<Ó~÷"õ×$ÄÓv{þ6üCkíYuzóذÀÿìùØðíµç`Ã?tÖž€ ì”={°a¯¥öüSûxwb×<ù¶Yw5±š)Y·o¢%ÃŽn6âv]plQ»§ZÈ.B6?Q9E'*ŠvíJ"EÊ>l€p òTë½Òƒ'’Úä\û½’ÔOKˆ§í^ 烖ze¿BƒZ?pò`j-ÍñúîÊëÐAG§¬qW_€ï/A¾Ôz+`¹„—!_n¿“ú ñ´ÝŠ«°ÜjK­x_YÇŒ«0]ƒ¦fÆ£œR6Úç[`|mtf#4ì ª‡SÛP%WaÀ„¬’Iý´„ª’?À€?´Ô˜{Ñ×Рׂ<”Z?é†8£Ó\+ËN7®{VÀ÷ñÏ(‡V%æÃÀÇÍÏYž¦®R:£M”9áiÈi^æ’à…ày¤ö dóË\”½ÔJˆ§í^ø9ÿ±¥^ØWÖsÃp½™4†+ͬî€TR³’MÉÒ?B?á3ÈZKj–þÖMø%d½“¤F–NêŸKˆ'¥Ô÷ãÔôjÜ’š ƒÞvèË9É®0ù¨ÊĤ2鿃ò#ÌA6ï>ÞW!-&ÂßÏänª'áGÐ&lChäDÝÓq‹ããì+G†§¢|¢ƒÄÊì~F„Ç!›‡¦:·sA+³üS0#<ùœ1Ëk¬Ñâ¢ÖwN¾ÜÔÿ.È^ƒ|­Fø÷ [`:Fxvœ½qK6‹âO×4Gù¨n‹ÄÏB6_ NÛÿ˜ýƒTmñÛ©öËF™[pxøÑh=gLÝÿ!èÞ€|ãg—ÁÿÌþQª|W9ƒ77Ü¢­‘Ëÿœ ïB¾ÛŸÿ'Ð-0ŸŸÇqùp”Bwx6?/‡ð]ÆÖ'ŸOäüOÁ“Ðh£óƒ~‡†ÿ3'|ùq">cÑÈñÝÖ»¼K1¦ªnÕŸxùÕóça3–Â{?dL?ª[ìŸ$ág?ë€Åþs蘎Şg¯>Ø^ѪDqÄB9 (Å-e‚ÿ¤OA>eLð…¾y¢Þò(ÖFø&w[½ðÿ%ÒAøò‹þ¿‚néþÈ8{ü±‚r¬àX% ž¥LîÏAˆpòˆ1¹ç&O¶żžÉ]Óèšþk$ƒ0½ *êåþo [ ÙÖ»ÓÆ|þ"Ѧ3^¿Nv“‰¢6…ÿmjÙl«@3‚•™ÿ%rð:dó ¾—Œt&’Öïåý[$¼Yk‘·1›·÷òx¾†º­±”zÑÿlÿ]ªÙ¬n¨ÿt L§Â¼šPÜkV>p½‰üVqÒ¬àÿ{P%¼ ùêÿïÁößw¸àÿt üo¤àÿ Tÿ*Õ‚¿£ZðºÃºÿ” ï@ÖºVϰôÿ#t L§ôw.ý~XøtÀ+MƒøÁžp²ù»§Ê5A¶s‘^ܺŽ}ü'¤€Pºš³íöñŸ¡[`:öñdœæBk±)çÆÂñÓ³Ë~Õã7´ZA=˜%E0²ŠÎ:Pk›¶]fëž[­¨O þOHáÈOŒ3½³±[%CÃþk0%œ†<ÝÃÞ^fê†ý_‚ÿÒaÃþŸ¡[`JÍÞ8{S›¸®‡.c‰¬ñ½ ÎÚší…9Ê+@eÚÿ ¨^ͤÖßI:ÆUÔZfü[Âôú;ÍfÌí6ÊðóÛå¯7.»41Y·žÿ¯HÁÿÚa3þ¿B·Àt̸öð¿íÿ–ª=ž›ñ¯àKJ÷SøþIé7ô5¦gPþîx=|H‡âž’Ãp9Øi9ìXý⤰3<(|D‡ÏšQ9ìPvVƒ³¡sï—ÃNÖÓ+â»Á9ê¡w/Êï"ÿ/Eä ‹É‡ËMüš,&ÿÇ›âáWäpl®»‘/×"òÿzoñ›rø@=|RÃ>‰Ñ¥½òðFDù¦÷ÈñwSiÈ4å3…e#~‹Â§còp&æýÙ½ ïnFèÙ­}è½7·‡ýÝ–¿ëŽÿO›ô„Âî4•…Ýѧù½¹‘¦û1:²ñîƒÛX”ÃN„a›ÂÄo.ÉácaØgrØéú»ËM:.çÍ£˜ïÄ÷cls%B—žÈaƒõw?ÐáÕý|ºû ÷¾ˆÑÁgœ¾Œáÿ<âÝa/#¾ú û“¹®Éïö×Ã_í³. w_GÔ™_Gèô7rXoýïÿ ‡£ðǘ<ü6BW¿‹ÑëïåpìÂXojçÄ»?Dèë1¿ûfŸmLäC¿s¡1ÿ~ ~¯KüÞhl·°lïäœRÉ*£Sb5¿òhý•ý¾â~ïÚ^µè{ n>Œ·ì~¯Â|Ç)zóóókù7•`X|óFºÝobl|flò׈Ï¥ÇMÈ›õÜ=¡0Ã+)–þÁ?ðµðZ/JûJŠåì³Â†k¹»Ù×*Ù;ŽûÖË®e6Ňìší9U7èmg½m˵³kùlÉʹNðy×óíRFô¯7Yˆ7s éÑ'éQƒîÐwo^®MŒÏDj‹´í)ê<Ŷï.y\u“O(™sëÛA|¶}¿2ŸÍ.¯-=ϬMU\çg;çgw+ #YŸùõÃzåíÖ‡@ˆJ±4ŒÚ!¥–bzÓ–S8¢ŸÂ³ë…M»èÙŠŽ¾áTýúõ×,*£ N8 yÚ´àè/6*°êõ›_ð‹v|ÍvÉ$üòwIéjTVl%”Õ³¢P΂J.>3ÒÈÂ!ÿh’ôövçÚ¶G_-¯­¾|½úây|¢'Pˆ¶mÿ‰¦· %vQ=±VÕßvÜøtŽ!m„Òm®úuÔÏ ¥õzÞ)̯{^»¡BÂy-LµoðD¤)‹tF¬(¨•ÝÛ„Ò³¬^v%«PöƒÇÞ£ü®"}„yÈùÄkª¦Îi»JA±9O4:YA®œ•×…j}¸ý<ïg.þ%%þQó ÝÎ4MG¦¯²'vP,–^¡ì:ïw·ìòì<Ë;ürK;_ðé‹íš>|¤2ÝË/¾üòñó¨ÉKiÂR®|[Ö¯þ»:ÿgnÞ¯^5*ÛuwÃr·÷½k³ j*Ó) ñˆ2þ7û¶ÛFŸvWÙË¢myv¨y'W-Ùåð&UòÚ²Æ3yªžÉ®ºvv5á äcæZWÄÍJˆGƒF”·ãÊÇí›ÇkŸEp—YžJÕ.oPçëáõr0D‰öð4äÓí/Š~XB<¿‹’¡ªSÜw²VEÆzdÝ*¬¨Õ¹C(ŽC©Èó?í*Š~;ê ‹æôçŽ[ø'¨oŠŒ JHÕ¿¸|ƒØyÈç,!>ò‹‰÷ðä í/!Šþ¢„x4KhßîÕ÷¼ iK£4³e±Ñˆ'JV¥B(èi–·|«ö!è&û´§š2òÄ»c`Ï[t!/§bž5lü®óce+ã–‚°•¥g¯)Øvv2E;è"Ò†¢çKê / ‰Òh&à :Û¶[ð3–]ß•ÉdÔ·:õ‚ÿ]Èç´Ûª ‰b”â:šjè8·Ûn)ú. ñhÚíˆ)Z}è“&JL¤¿BØ­"¹>X"a?ä~rœT_©«¯lŸÎ?Ö®Df`é±à¯ÅMƒò à-È·´óó@LzÐR¾Žƒ-—!/'fv‡×‹…òÛ˜hïA~”`´1÷.QtsÀÇkCCÞ2'öD÷^ù¾\…¼š¸B â"³~é9QÇVk„dÈÜGmwˆ­ÖÌÌq„‚¬U‹5PÉÛ›VµèO¦ÉgÎ)mè$? DgÜðµh–޾ùN…íwv‘/ćöFœOÑLÌE>KʾuªÌ)wYÙ]zÕJ¥¨ÜŒ€áEÈú£ÅîH¬% ÀD o@¾ÑzK è.ÓÓÆv–üÀ’?5–,¡hª E¼¦€+WŒùÔŸÛæãr½ç ¦Hít‡Ðh¦+¦ÄbœÔöIÑvp‡Þ9#¡þ,Ž“Èú#¯½Æ‡h.@‘uºG!Õ`t51ZX ç'øN¡ÆŽBš9ïl×-äù™æzU__5“) ¢o³ Y¯Ÿ){UaLÛ£e”òviY²ÕF9(E{ òµö[E]B<í¦q 9 °EFIsrŠÌN§ê×I'o”÷è|‘'ŽYEæ»VÙ Ú˜R¸øtYªžÍH"»äöÈ B¬S½Ò|Ù¼£5T´vm7Í,/h±=ß lU”š¤¨óG­2ÀÓR´’úµ[ó‡AE žvÓœ ·Ð{Äij"»áqÈÇ3Âù—b:ÜÊÿ\õ|Z{N3»ÀÝûJŠ4“aß/Ü 4:ª¹LüOŸB~j\Ø“#¿ŽTYXõ©ýzZØfµÌ½×«Zæ(pòdë-sDŠ6Â/g»L‚¢¿!!žvÓn¶Ð2óµEjç`Š„Ç Ó6Ë#ÍÓÊAUƒÐqà È'´óê£<âëbqÚ7L'.g€’Üêa:Eux²Ö‚tã2>aÅêSE®] Æ+­ lV‹|1`Û.V‚?“|Ê ã0U§Í'%ŸrçÈá‚ÛpÈ¡,­^Pã+÷œ‚ï#Óš?,;è#o[ï N5H”ë”TÓsi¸’hz®ÊÚCëŒbù4ÇWjÒÌÎleTí_>i´ö¸çv¼î ÇÍÛÊGˆÐ,ðä; V1;ò(º4ð.ä»­¯(ºkÀyÈæ[Õ¨vd(ú{âiuGfLRÄN_Pô vhúBZoaGæ`&£ª´:ß ì…¬5Òœ¶¸^hi¹[üø¥Ç*–çÙy®CkPíN@žH¼j;Ì'U4¨ÍïBN²†‰©Ø(º,p>U;çßꊢ›Þƒ¬U£4d|wJ7¸Ê›ƒˆÉ}àÈæ;¦XÐOrm›ù»• ³GG)jмëT9p¥½Äz^•²ìWc òTû+¦ID-0™SC]Œ)òVeåƒÕšÆ=dš-D£OBýcCfÙrYq#‘lI©6âíA 8ÇÝmœ wØR­¿>Ï÷PÛÁð©,Tâûø•ÜášMš o•kbÝ\„¼hÌþ0£ŠTd×AÒÛ„†åý9§èðûJ\;?¦:ªè>¶’+±ìJrÛ m5mZh‘±öð Z÷˜ÄAÄ|°þ$fÏ1jr]J°äj§Ý£JŠþ°„xJýÑõš¾FÄ} ÉžI%9¢U΂¨œÀ.]Õ3~ftfSáÞUx se8ÒÑ‘*7é 4³Ó„‘±ö­K>¼cr†b¼ÕY}¹h¬/‘3ÄGë#oE~4¥y8YëLš?¦½è K8¬«3f4nCaj+w¯y8¦G¹?Wo±}K"%?Exáã ýûkfèFóoÿBaÝß”rm7š}÷sN¹ló•èá;¿WO˜j}oI_¢Înÿçz*¼ÊªeZšõ­r>Ü °é‹Îw°P_&Ÿpí_ª×Î7ï:,”Ù†SÌO*Oh‹“o„?BþÑ89Zî0HØd‘ 403÷yTB<†¹¢Þ–ý.Fô„³%¥Ú/=„, Œ¾è*‡N.ôHØäÄO1â–¼× µ‡7ÊýÓŠŒµ{Ýó]Gxù(âàä‘Ä"Ž­ù(º^à(äQsmÐqzVBz`„§ Ÿj¿}à¶‹6¹Hj›}ôÂ&z;c½° QcuÈ>„BLÖ>ŽÐ渪«j ½0 h(—µ4UÍ@z¥çtÛm ôݰ„MË+m3q™¸M Í"ÏÜvÐ@ŽÂ(&l Ûvak[yÇÒQÅÑöÈQhåÑÎÈQ…ÀNˆØíp¬3r F!œ:tÈ@ŽÁ(&k =ÅBÙ¦3 ª&r fq 2 «$j&r fAx²Ö Ëüê• ñ´ÝD¤ž0‘>˜…¸ì¥C&Ò³˜¬‰òjÛàöo}0 ÂAȃ­7>˜ád­¡™yPô§$Ä“Pê÷Ú›xFÐÔ_"7ÊÂ. ñ$”‡ž­¾zó ]âJÕ>Ÿ"+#n©o×–"ŠþK ñ¨Ó ·úþ©œì©/^¸Å&‚ÑþþN´¾ìQ³Ìº½ؤCŠ»ÒöK'¶J»› Û;x uh0¿ÉîOqwî<B™ØCܓɻé Õºávщüfš¶JNPM’¦Z/͉ÅÀ"¸ùNª«Þ2¨NCž6¦=Ta7ß1\q eb’ÝPfölnPht‹ÏXÓ}·”£´#'ÈD^Eߪ˜4£M"d*ÑÈÚÇ M(µ}¿ƒ¬]›•D³ö‰fÖ¦Y8û„µ¸z>K¬™]¶mï:¡Fô¹‹è>OÔè•» }—„f]Ѓ¦tVSᤤÀ¦ Ç yÉéoP6EŠäB­8 y41‰õ–CÑu¥ÅñÄ¢™nÆ™ÝÝxòjž½³Ýð†ý“WÄé‰Ñ¥½òðFDù¦÷ÈñwSiÈ4å3…e#~‹Â§còp&æýÙ½ ïnFèÙ­}è½7·‡ýÝ–¿ëŽÿO›ô„Âî4•…Ýѧù½¹‘¦û1:²ñîƒÛX”ÃN„a›ÂÄo.ÉácaØgrØéú»ËM:.çÍ£˜ïÄ÷cls%B—žÈaƒõw?ÐáÕý|ºû ÷¾ˆÑÁgœ¾Œáÿ<âÝa/#¾ú û“¹®Éïö×Ã_í³. w_GÔ™_Gèô7rXoýïÿ ‡£ðǘ<ü6BW¿‹Ñëïåp,¯7µsâÝ"ôõǘß}³Ï6&ò¡ß¹Ð˜?¿×%~o4¦tl½lïäœRÉ7¬XͯíùÖ–½ÀÏòþðÁwœ¢7??¿–S±roƒoÞH'ü'ÆÆgÆ&èð\ ©qÜ„¼YïðÈÝ 3<½ôþ¬…›ƒ^Î>+l¸–»›]¡€Ç}ëe×Âåú]³=§êæl/ëm[®]ËgKVÎu‚Ï»žo—2¢ø{==-ÞÌ%¤GŸ|¤G ºCß½y¹61>©-ÃÐÂÿÅÿÓ}wÉ㪛|BÉœ[ßâû°íû•ùlvyméyfmªâ:?Û9?ã¸[YÉÂøÌ¯Ö+o·>BTХɍ¨õOµÓ›¶œÂýž]/lÚEÏþP tô}§êøÓ¯¿~`QÉuÂiÈÓ¦G±™P=P¯ßü‚_´ãk6ùJ¹ï —”®FeÅVBYñP=+ å|!¨äâ3Cvµù#äM2ƒÞÞî\Ûöèñ«åµÕ—¯W_cHá:äu“:êç„Òz=ïæ×=/HˆÝP!ἦÚ7x"Ò”E:#–*ÔÊîmBéYV/»’U(ûÁcïQ~òõyÈùÄkª¦Îi»JA±9«¬ WÎ6.ëÔzq%Š€÷4ÿ’ÿ‚ȹ#¡sM’é«ì‰ wȸ±Ë\çýî–]žgy‡•ŸÙyº$e—m[±v/¿øòËÇÏã\¿ˆGª~[Ö³þ»:ÿgžDÏÚ¤d¶í÷¿ûžµÙä4•攄xDéþÏöm³h¯²—EÛòìP÷òNŽ{ôãWߢ5ž½S”½n:øD~(§6è>Ÿ @]E»Âˆî¼f"´¼-HˆGƒFäFu¡‘q¬¾y¼öY+q~™ð8äã:¬"c=¼^ƨ1Ñ@h™Ä{ñt¸LdWE©ÚÍ„ÊäȺU,XQ«ê²£¨õrèP(ú“âI¨Pú¨6yÔ&#û©JÕNж¼`d/A§ ŸjÁPô§%l::kX0ÇDÁ¨—Ë”á äÁ6”‹h"›¦PÚ].G ›Ž–ˉÏí÷ÖVÐ2EC·fÙÉî)Î@>“`áð ’˜x¤ên ¤vì¶«p„;x4 §ùšPõý’¿á‘@3[>MÝ]]M'Øó¯Ÿ=K‡5ŠdâtWIhåcêÛ›{QV±i)i»ÙóˆØ ñò¸#7ÿ{++©4©ƒž¦b"†£8=sǘþ£XM ’Dsš‹;…¼¿]KI£+'å8èJ»ƒ “2Å>6§ä´XTDmO7nuªžµçåä@íí¤´V¹Õ¡wº$Ä£Ùê\4¥sv,°éN5E:”˜¨žJ7ÌY‘õ»ýûuÈqR}M¤®¾²}~`í†3°ôXð×bVNƒò à-È·Œz|QùyPýRt"´\†¼œ˜ÙÅîï¥èîAÖª¡b¢ÙßKÑÍC~llìt™ªƒà*äÕÄâP o™ Áª†ð~JsRAM#(ºnàIÈZ“j!/¤BÖ‰6ž=ɰÕMqE8ùmÚKbÏÕ:&4Fü¸ÝVm°égÓÀÈZÓ£êv øòã;Â&4nK#‹ÀGÍûYOpSÚdл Ú§t廹ÄEj¢/ŒÐÄyÁ¢ýÎ.⨠jb¤yª¨ÓAš‰¹Hë$ö-ÝKW.î²²$…®­V*EåfTºzßux Ä„Œâ7º#±–p&JxòÖ[Ew ˜†œ6.°³¬ÀÕ‡®—ðÊ×}f ESU(â5\¼bÌïtž‘ÍókI﹂)R†î §"¯ó0.±÷2ƒR´…v5(ê369zm3Èú#¯½Æ‡hŠ@‘Í>ŠYHáN˜50ZX §-øvÐÆŽBºvy§×PÕ×ßWÍdJB?p²^?Sþöª0˜¶GË(G¡„ÒÞ“Våˆí5È×Úo ýu ñ´›ÆYä€ÀÖe˜SdwÆHh´øi˜ó/ÅL•ÿ¹êù´Ç!ÍìBxí¦´„žï aš¡é 7\:¯šËÄÿ$ð)ä§Æ…=i±œU,†7²W>N Û¬–¹ß UË”÷¬NBžl½ež“¢ýò'í7 Šþ†„xÚMãr@`k,ó0ŸzV¤v¦H(¼KÓ6Ë#ͳZA ©Aè8ðä‰óiyÕQq9<Yk™Fm”@Ñž‡|ÞX{Ó|¼Ìê#U×.]• žGƒÒwV±|¤A«ª¢_„’~ùscÆÛ±\¾ΘºF]‚Å@HL£éLÀ•aà(äÑÖ+Ô%¼HxòYãâ¹Ì¼B1h£Š»1ª¤Úf]‚™Þƒ|¯õm–˜• h;¸w‘¢_Pï¢ †Øš6똴,©Hðr*l­fÅüuã&‹¢³E^?2ìÕ¶S-æƒNcÁcEk7èOnÐõ¹b5Œ¢ eÞ Sà-ªæ2‘?| Y¯7•»]Ï—Tk¦1ä$¡tÑM«k¦1ha/ä^c¥¿–‡âiQjÍ“YåÝæ;Yi²ÌÎgTË8.B^ìpeEGhÔ­S+Æq¡´§Ä°O³²ý.°;Q|iE¢Ô¼ ùrg{Dexr&ŸÇ¡«„iÈæ“Ï'™Uܱv½Z)©¶úDg ¸9ÉE©˜Vÿ²¤² ›/J)7·ý¢„xÚMã r@`‹Z}i S‘ Í.vÍ[ýæ-žãU"r 8 Yoa ¹ÚŸ¸\^†¬UשU,Ýàä1c¾7³^o½c·ÙíUhãÀÈæë[O]‹Ï7úÛV‹¿4«¿¥ {MÈà¿’ãù¬êÙ›Õ"_ Û¶‹•àÅ$Ÿ²ƒ9iò[v„gšž !> × È—ív¸˜A¯Üs >z¼LKŽ°ì ¼m½+ßÖM×)©¦ç:Òp=Ñô\•µ‡–9ÄêMއK3;³•QµùH¸ÑÒÇž»º77o»ªµ%‘šÞ¬µ16¦"ˆÙDÑ¥w!ßm}ý3 œ‡l¾ßû€jG†¢¿'!žVwd„òQ´œ¾ è$ìÐô…´ÖÑÂŽÌÁLFU;h5¤Ø›ª]ešÐ´Å'\ñr·ø1_U,ϳóÌ)ÓÒ’Õ>àä‰Ä«¶Ã|REƒÚð.ä$k˜˜Š¢ËçS5_­®Ø>"Þƒ¬U£4žÎ¤þm²\å½ Ää>ð dógS,è'¹¶Íè0ïä®)ò®Se¹ _ôš±žW¥|#Ô=ŽF§Ì*&ÙoNr‡ԯ뒲 ê>Eã2Í¢Ñ'¡þ©³lÉ +2‰dKJµ§h#n1Ó=ˆÅ–jýõy¾…Ó†Oeéœßw°Yx4|Í&ÍŠ…·Êµ±î.B^4f˜Ñ?E*Y”¡t¤;¡ay?ÝIAWRŒ¹v~Luxž…~Ž@Ö:-«ÖŠd%…Û¥¼ŽAñO33¨‚§Ã2åØ*˜¢=L® ¾Ï^4õ̃*—¯Rï7Ígp ïêˆ)/ãļ¸ Yë`Xcw‘ja1{¢ÈhÅHh¶.¹øBçŒU¨ ‡!kÍÛª;E×<Ù|÷y óœ\q¬6᪥\ ³àMÈ7;P ÌBO;P P´ÉUU t*5RfåB#–=À,äl í& ê¦i¡Eƺ×m«S(£›@<‰ÙsŒšˆÍ­­äÓ©Ý£JŠþ°„xÚMãr@`kfÝŽ’·ˆÐÁ‰"?š&Ꞁ|B‡çu¨Ù¸_Hv­©Ì9årxç+Û°ýÛ.«Õâ#œ‡¬7¯­ã9-¶%:KÀÏ!kmöTkA)º{ÀUÈ« 2­r^U݉ÂSàsÈÏ+˜>ÉIWÜ,slá܆v¦jNZ]8·Ãtp4òÒ¥V ÏIÑvÐiEZB}§mF4ä¶[W "/8ŠÌî@ “?7_úTn!ÇÞÙt¿/Û*¼£õ÷ t#èr9›¡ßžB9\Ë®Ýë¦aøÄ¿¸yŸ ÓÛŽ[ø§ì¤ò7l4¼ #¯&Açðæ4y/A³¢ºìtz@á;¸U†yGжƒ“î}FB<í¦!9!k¡aöŸTŠìîÁ §LOè5wŽæžGgÀ•…´’°K¢~ø²¹“˜Ë1vù¢¶-I‘¦|Á¹Ø˜à^Ô=*æ=ï\;Ú¸•¢&·µŸ6xseòlåš’¨LEµu·õ5å=I'’sV¨\EÝÉn^9º^›øˆˆû$’½2­²€¢ï’~-mFçA*¬Žâ1Ì•“ÍžfUi-¢€¥‚ÓÚˆkߺt×XL¦PŒ;«*¡U%z¾£¾z«È†äGCµ†c]QMºrva ñ´»Ô>ƒÂÔV~ Èá¤çUˆŽp¨ÑãÓŒôï¯a˜á5û ëþû¦4k_óÑw¿>áõ |ç÷z_‡ZWEÒ”¨cÄÿs=å]eÕ2mìõƒÞn¸½}Ó)Ézµ©]Ï|ó™5Þk.æ'•·C¨½—Jýò“£uSÇ ›lQÙà%S:´jpTB<†¹¢¾Ž"-%D­£(fKJµ3zY@±ø¥«:¹Ð#a“ÿtÅ\ˆÛ€z ö „=h‘°É ×þiEÆÚ½îù®#\Ù}ñpòHbÇÖ|]/pòhû« Šþ¬„xÚn›ò !°MŠö °ƒ¶)ßÏÒBÛÜÕ uF¶Ù&E8l£mRt½ÀÚ&EVÂNÙ¦èÙ4u-Úe›¢ AØAÛ¤§GBsÛlH½U¬l[ª£š#° Â!ÈC­·#° ÂSOµß>è9-aÓÊ`ÛìC¾¨§ö!ÙD'íC¾&)yû8B›Ã«®ªtÃ(º¡©ºšªf 8Æñ4dsÍÔººiX¦©¡¶ˆ¸S¤§3Ò£ÚÙ!ù‹« äÐf¡XT5\Ì(î›ãò`ëÍ£&빬Õl™™EJBSX6â·(|:&gbÞŸÑ úîf„žÝÚ‡Ñ{s{Øßmù»îøßø´IO(ìNS¹QØÝ}šÐ›{iº£# ï>ˆ°E9ìDö°)Lüæ’>†}&‡®¿»Ü¤ãrÞ<ŠùN|ÿ8Æ6W"té‰6X÷ó^Ðϧû°zï‹|ÁéËþÏ#Þ}ö2"ì«ß°?™ëšün=üÕ>ëz÷uDùu„N#‡õÖÿþr8zŒÉÃo#tõ»½þ^GWy½©ïþ¡¯?Æüî›}¶1‘ýÎ…Æüû)ø½.ñ{£1= cëe{'ç”J–¸ãÈj~åÑú+û}Åý>¼•Ò[póé`´±e/ðó?|ð§èÍÏϯåßT¬ÜÛà›7Òù¨‰±ñ™±É_#:<—Bj7!oÖ;ïz¾]ʈ^àïõŠx3—}ò‘5è}÷æåÚÄøL¤¶ CC#<ˆÿ/öÝ%«nò %sn};ˆïöïWæ³Ù嵥癵©Šëü 3Ž»•…‘,ŒÏüúa½òvëC D¥XrQ"O류޴åŽè§ðìzaÓ.zö‡b £ïƒD8Uÿß~ýõ‹JÆ(¨NCž6-8ú‹Í„ ìzýæü¢_³É÷Ú~ù»¤t5*+¶ÊЇêYQ(ç A%Ÿ²Oé!ÿh’ôövçÚ¶G_-¯­¾|½úây|¢å‹7"Ú¶ý'šÞ*$”ØEõÄZUÛqãÓ9†´®C^7©£~N(­×óNa~Ýó‚„Ø rÎkaª}ƒ'"MY¤ƒ0ÂÙZÙ½M(=ËêeW² e?xì=ÊOº&•‡œO¼¦jꜶû¡?î¿©w²‚\9+­jý·ý4ïc.þ%%þÑòØgš¦"ÓWÙ;(î uc—¹ÎûÝ-»<;Ïò+;>³ótAÑ.Û¶b/í^~ñå—ŸÇœO„'¥ÄûÔ÷Oçÿ,ÂÍûÔ+FeòsÁ÷m÷wß­6›™¦’(àÿå¾ ¶Fæ*{Y´-ÏÕ/ïä¸~óm²Xã9<…vÕõ² ” 33Æ´µtg%Ä£A#j†qľy¼öY1qî„ðd꣛÷O,2ÖÃëå`Tíà äÁö E?$!žÎ‹|Æ{0UÛߟP±Y·Š+j)]>aᩲ]åBÑŸ’°iç²a¹L¼t‚Š—faÑí¡ï°ª9›{˜§ Ø'ï?ЬåÿYÈZFSh|ðïàtê£n» ¢Ÿ‘f¡2Þ‘r$µçyOÍlY‘Œz‚îÆ¦½Y ìù×Ïž¥Ã› ű±(ü´m¶¶}ñQ91òEiK­abî2î/š®l)äƒv·àYÅñ ¼‚Äe+ã–‚~õª:ùÙ]ÈwùO1ºds'^4O™»”fÒ5ºA]Af™LF}WW/xò˜Rµ®Obö\õ‚ÑRŒâR\1§'ÚeÏ¿qzBÑž/šÒ¡…‰> ›îÂR¤C‰‰jºaÒŠäú`š„ýûuÈqR}M¤®’¯[º÷­v3Xz,øk1¢Ó |x ò-£66*?ª_fM„–€Ë—3»ØaÝ=à#ÈŒ6fcE7| ù±V14ä-s\U#+ÀUÈ«‰+Ä¡@!Þ(2ë—žulµFH†Ü’±QŒF`ÒŽcrc£¡ [ÝW;“Ç´ ½Ô(†!àUÈWë•~Ün«6Ø„iàä…öØ5àÈŒ ì›Ð¸åŠpø²V-ÖÀå ü«O¦éžöðwùN%q«‡è]J ö +Úïì"Ž,¨&æ8´ŸP:±e˜˜‹4¾ËðIN¹¸ËÊv8ôª•JQ¹/‹/&f¿Ñ‰µ„˜(á È7Zo Ý%`rÚ¸ÀÎ’ãjŸ_Ê[ðÊ×}f ESU(â5\l>Š:¨?·ÚŒMzÏL‘Ú èáiȧ,±ß}R´ÒN‡v5è369(k“Èú#¯=ï¡iEfÔÀm5Qw„(0ºš-,…S|QcG!]»tÑk¨êëï«f2%AômV!ëõ3åo¯ #Œi{´ŒRÞ #­X¶Ú(¥h¯A¾Ö~k è¯Kˆ§Ý4N!¶Æ(ë\r:Uwu ò1m«ìi¢4·Trªe>ò—¯ÿ`ÒÅX£+ë!«æ.Q?ü ògÆ…¼Ê¨£håóAŠ+LÂiÅw6OCÙÞ²ø‡úÕ!iæ90]JšWqmKù®© «L ráÉñw ¹ð;~¸4˜¢¾‰ò]g@Шr13/é4š¡yÉß>cÔŠ8%ÒÉ  A«Áï÷½5}UÔÉ®í9Å*ŸkF5+ódwɶʞΰa© üò—Æ)Za°°°ô½`ôS —\®ZÙewêi*”*EÒ :žaË–ooöJ¶KiSM‹ä Á!ÐÓÐ<‹…­2nY%â倪í†vh‰³æ®X¹’7™ SÚ¦NÙœC% æéáý‘€xÁ¿îñý,Auã6Š6ÚÙ¸}²àù…r㵓žC)ÙžjAÞqi”µÂi)ZÉ‘D»ëŠþ™„xÚMãr@`kzGBCPäFsÝ@i•àߥ.Q.CÖšÿ}t.ACç]z„ì"\FÔÿÝï"Œ!„ÿ®wÆÁŸð¿ ]ÉÊ+ºòVç6v.JÑv°‹@Ñ?“°C]i¥…]„C·¯Ó¬J70ù™½{Ôì+Rkªa|7¨27·î± 4¿êÙ¾ÃI=>‹]ˆõ-µWBúO ›×CCEk×vÓÌ *£ !®Æ¾<ùLŒÑ¦F5¼.E+Íaµ[ó)úÓ69ÙoIä€ÀÖ`Ø»¦ÈîáñÔG·ËáüK±£ÎÊÿ\õ|ÚâžfvÖ´dÅN3, …‡möp{¸W:NŸB6o;'­ ù ÚtŸýÊÇia›Õ°ÅTµÌP„©Hot­²ÌO¤h…üIûMâFôÓnò9ÉÎ¯ó ¤ŠÔ¦`Š„æóëGš( †„ŽO@>¡Wåß\§ÍqkýÄå ðäs QÌZ?EwxòycíMó]/¬¾ßĵKλ`(U*}õòV}dåo«*:1½üòçÆŒ‚qåòÛ‚ù€V‘TG8y 1:¤³Š¨ G!¶^¡2x‘ð,䳯Ås™y…bÐFwcTIµÍÊÀÌïA¾—`îÄ´YS’žD¸¡hWcAÑ/Hˆ§Ý4²È­i³ŽI‡  N§ÂÖŠÐhï('ÖÝDìÓ¢³E£¹ {µíT‹ùp6Œ”ØMÓäŠUÌ«Rm¦À[TÍe" ø²^o2*w»ž/©ÖL3ÈIB骪V×L3Ð0Â^ȽÆJ;-o¨I‹Róh·›UÞm¾Ó˜¶¼Ùyå)dâ|¸y±Ã=–Y¡Q·N­gQt„bß›Þ ùÛÓ¬l¿ ìN_Zgk5Qê^†|¹³½¢2¼¹ [H)º1`²ùÒ“Ì*îX»^­”T[}¢3\€œäÖò˜VZRÙ´¿¹¥è%ÄÓn7‘[ÔêK Ò9ªn y«ß¼Ø«1^%"§€Ã‡;\û— À˵ê:µŠ…¢;ƒò¶õ®àTƒD¹NI5=·‘†Û‰¦çª¬=´YYlÈñ•š4³3[UûÿôÍ6ìu¦¯{Ãqó¶«Z[©YàÈw¬bŽõQtià]Èw[_ÿPt×€óçµæ€jG†¢¿'!žVwdnIŠØÁé Š~AÂM_ÜAlMGæ`&£ªdÝÀÞTí䄦-.8ኗ»Å½©¢Am(É­®Ø(ª,p>Uó#ØêŠ¢›Þƒ¬U£4d|ß±èÚ4÷¡j^Ää>ð dóS,è'¹´Mh·töÈCM‘wq½í¥ Ö±×ÁÅQ–ü=šù1«˜î!jÉìôS¿QYj"¢nTV4î!Ól!}êû1Ë–dÅB"Ù’RmÄ)ÚƒÀˆ‹¦5³á[ªõ×çíxÁð©,y;áû6 ‚¯Ù¤Y±ðV¹V Ö=ÀEÈ‹Æì3ú§HEšÊ‘½w%4,ïÏ9Å`ضÀÆ\;?¦:<ý&<¢ÃM­y á(äQãÒ!?(:…sxò…Ä §‡ßzºÀnê”Ëà Èm˜¥è.ÓÍçc»”×1(þ)`r¦UðbX¦;PS´ÉUÁ÷Ù‹¦ž¹ž³ÀæKšÂŒ¼«#¦¼t¶wKU/?MÒ“Jâ4IÕÂböD‘ÑC#¡ÙºêžàXc'*CÀaÈZó¶jÆNÑõÏ@6wÃpžÃ<'WàŽÊj>c¸j)WÄlxòÍTKÐÂTíA`rÕÀÄGÕ@ÃÝÇVråB#–=À,äl í3Ôg¦…k/¬ u@DÌëObö£&w¥‚|¨ý£JŠþ°„xJýÑõš¾FÄ} É^N%9¢U΂e¨œÀ.]ÕSsŽG‡\ƒ—a®<©Ÿ1åWlód,ç”ßÙåí 4õ'¸Ý ybÛ„º×YÕĈûŸ “;÷ìz˜’ë¶JÆ,±$¶cíÒäÝ“P¤4Ùe4ËYU/tÇ™/xÁ¯ûvÙö”WÌV ˆ˜twªÊÌ+YÅbP<´VŒ³=åº\Êàø©ê[—np‹Ñ[ŠñóÎZóç°`fÖLÕs¡Ø]ýH·ŸûQ´½ë86u4ãKD·ž¨þ*w^)ú. Í:¯Í>O”éü gk6mDLȯÉoïRŽã÷c*<CNLab›üæ-Ç3µŽ&ªÍRü½$”nÊ4ÔÑËüŒkoUƒj6ͪåЮí<ã%¢î2ŽèïB¾knJL‘Æä@}‹ÞKwû¸în8ï©¶Ô`x8 Y«g¬¦½]ð,d-ßæjÚKÑuÏAÖº !ÿ³\{­rèÍ Ç¡ŠŽó–o]¯ßÎ9åMÕ®Ö4$}‰/ÐE+µëä,öÎr ÖFQùûOÐnÂK/%V 4 d[Eωi(6ËØÆäo•›) ê$P¿Õ4¢±¨‘oEÏPŠ9Ä—Ò‰“Þhžˆ£°~ }šñ¯à;j½Rú}锿;^’ñ(uJÃáÜÓrرúß7ÅIag"xPøˆŽe…Q9 ç‘ÏÊaX9ñÞy9ìd=½"¾ œ£z÷¢ü.òÿRDÞ°˜|¸Üįù÷Çbò¼)^~EGçæjD¾\‹ÈÿëM¼ÅoNÈáõðI9|< û$F—öÊÃå›Þ#_ÄßME¤!Ӕϖø- ŸŽÉÙ˜÷gcô‚¾»¡g·ö¡GôÞÜöw[þ®;þ7>mÒ »ÓTnv7FŸæ#ôæ^DšîÇèÈBÄ»"lcQ;†=l ¿¹$‡…aŸÉa§ëï.7鸜7b¾ß?Ž±Í•]z"‡ ÖßýìƒÞû"FŸEpú2†ÿóˆw_D„½Œûê7ìOæº&¿Û_µÏº€Þ}Qg~¡ÓßÈa½õ¿ÿƒŽÀcòðÛ]ý.F¯¿—Ã1F]ojçÄ»?Dèë1¿ûfŸmLäC¿s¡1ÿ~ ~¯KüÞhLèØzÙÞÉ9¥’%.£±š_y´þÊ~_q¿¯ôÜ|Úó­-{®ýáƒï8Eo~~~-ÿ¦båÞß¼‘ŽÛOŒÏŒMþÑá‘:¸©MÈ›õÜ=¡0ÃsÉKÿàøÇZ¸ù¹äåì³Â†k¹»Ù×*Ù;ŽûÖË®e6Ňìší9U7g{YoÛríìZ>[²r®|Þõ|»”½Àßëqfñf.!=úä#=jÐúîÍ˵‰ñ™Hm††F¸zþ_ï»KWÝäJæÜúv߇m߯Ìg³ËkKÏ3kS×ùÙÎùÇÝÊÂHÆg~ý°^y»õ!¢RŒI Žî:ÔRLoÚr GôSxv½°i=ûC1ÐÑ÷A"œªÿáO¿þúE%CZ)¬]<2mZpô› ØõúÍ/øE;¾f;dJ“úÉèjTVl%”Õ³¢P΂J.>3ä‹@„ü£IfÐÛÛkÛ=~µ¼¶úòõê‹çñ‰–/‡ŽhÛöŸhz«PbÕkUýmÇOçÒF(\ÖMꨟJëõ¼S˜_÷¼ !vC…„óZ˜jßà‰HSé ”hë•ÝÛ„Ò³¬^v%«PöƒÇÞ£ü¤­©<ä|â5USç´Ý¥ Øœ‚NVÐ+g¥ÓZ®D¿Î»™‹I‰AÌ‘òÆËh¯²'vP*ÜqåÆ.s÷»[vyvžåVv|fçé2™]î ,Fcº—_|ùåãçqŽXÄ#Õ½-ëVÿÝ?ÿ³7ïV¯K‘´Ý*oÙ¿ûεÙü4•锄xDÿoöm¶ 4ŠWÙË¢myv¨y'Çýò‹‚È1ÐÏä)Ãx–›qÓ"Èv]Çm ªE=Œ/C"P]±»`Â"ä¢q¢µ< •$Ä£A#ÒË:×c‘ÅqÔ¾y¼öY5qš»äÓ!û§ëáõr0¶‰öðäSí/Šþ´„Mg¶:Y0²ã!éØeBsdÝ*¬¨½0²Û§·Ší*Š~XB<‰–Œ¨‚KFv;ÓÎ’‘þt°d£4&[2ÇeÅ¢9‚â8‚,êÑÍ"Å¢ lÓ¬S»‹†ž36y2,šúN-²‘=^ CÖÊ#Ų‘ýœ¬—)FeCÑHˆ'¡²™ùÆv}ºˆ=èt£ŒwV0²cdE^š‰Ècט¨ò”¯–Ý0Ü©cb¥Ç§Çbâ=¼ ùnûK¢Ÿ—fé0ÞqÝ›Úóø¿f¶ÿ}ºÙ§úûw,v«àž¢@~`œˆÏ™äÁ[æÇ6­`N³´[¹leÜRð_œ¦»Yw2E;Uç)KêÉ‘OGœÔLÎ9Ƥk jt…zše2õ-ÖÒ"|ÞTÃ.¼¤)–&·jˆ'í5\˵÷8ˆOT{çcµ7q}iˆIËß¾ž«Öדˆ[`2úºØØÕm¹Â‚9á"äÅ—V^Ýü}*¬4•ÑQ…•†‡ *ìæ@Ë5V^Àù¡q2îÆjlPæR/áV³ +ó—† v^'ØÇ¶¡ÂêÚ++‘W#ëãW=k+ªß‹¸FÕVå>>Eß%!Í>þ9S:t:£O¦«^éPb¢ŽÝ°aErT¹uû!÷ëã¤úšH]}eûüTÄGЃÁ¬-Á4(ŸÞ‚|Ëh•Ÿ-qÂP‰Øpòrbf{ˆ¢»|ùQ‚ÑÆœ¢èæ€!?66vº^UÕÀˆÁ pòjâ q(Pˆ7ŠÌÎêÎãýþ[­]7ð$ä“­×yë“ÔG5Ôˆ¡ [Ýd^ÅÎ6 tiIÐTjÃð*ä«F "¿5øq“­Ú`±4pòB{ ìðdó‘ï6¡q‰+qX>‚¬U‹5Þ‡ûá&Óts\Î)m£4éÊPq}œè㬡ïTXÑ~g©ñÒHÌh?aÄýqš‰¹H2ì[º.·\Üee;H Ýn^­TŠÊÍèEðºØ('d¿Ñ‰µ„‹0QÂo´Þ(ºK©Ú]Ô\NØYVàêCw+yåë>³„¢©*ñš®@^1æw:Pntú–ôž+˜"µKÐB£Õ̘‹ñ¿xNжƒ+uý õWêŒh0ä€@ý‘×^cŒC4/ Èìr*ì W²Gu˜¥À¬ÑÂR8WÁ^4vÒµ;ކª¾þ¾j&Sú«õú™ò·W…Æ´=ZF9 ŒpÕ*£¼,E{ òµö[E]B<í¦1ŽØ"£Üã6ø8fW`ˆWZb”÷^ãZï‚.eÓ,£´1¥p;aÐe©z6¿œì’Û#o€ Ê×Ú^>lÞÑâ7ɧ™Ewô’‡ò–ªÊ›«¥éîVà)ÚnÇ£èOK¨¿ψ†TµÐ{Ä$´"»ë0<Âã'f„ó/ÅÔ¸•ÿ¹êù´›7Íì÷°")vÐL†}¿ðtAÐè¨æ2ñ? | ù©qaOZ,¨:ŠTYXõiþzZØfµÌýÚªZ¦|-öAÖš¯çœŽ4/Z-±R`g…J1hýÂ;›mZ9?°A~Ë{ í…2Mí#%]O 9Aô€O ›7ÇK…|¾h³ Ë¥cŠœ$φò¶‹„æw=MÆ™hÜܱ: ‡<ž`Í3÷p…Cxòã‚奤C(1¾Ü”™ªI³0|nòjJsn2²ÌN6/E+—Z&JáÆ¯U¥&mpã§[‘ª¶fý¨„xZÝš‰Œ¢= ù¬yêUu“¢?'!žvÓcµ®5;Ì71(RËÀ"ÅU%Çt¨E6fW7™¡ãÀO$Væ€ü ýÍ-E¿(!žvÓ¸…Ø¢V_Ú§Hv‘vÍ[ýóñ*9†<ÜáÚŸ¸\^†¬UשU,Ýàä1c¾·Q£Þz+_^A Ç+WŒ™>u-¾zæo[eì%¤AØLXʰ×Ô‰ þ+9žOú›Õ"_ÚÞ¶‹•àÅ’•ò2÷m˜*áSÈæKlOƒ„ø,Ü~Â6èæ%¾O¯Üs >z¼L;Ø`ÙAyÛzW {Ú6]§¤š鎫ÓsUÖÚ5#6åø¾ƒ4³3[Uû¿z„F;iöÜ\Þ½á¸yÛU­-‰Ô,P’«bö—STià]Èw[_ÿPt×€óÍ *O¹Sô÷$ÄÓêŽÌœ¤ˆœ¾ è$ìÐôÅ]ä€ÀÖtdf2ªÚAŠÙ ì…¬5Òœ¶¸Þc¹[Ü=›Ç*–GëÆá®* ª}À ÈZÇ÷¬ÚóI jsÀ»“¬ab*6Š.›ª{ÜꊢšÞƒ¬U£4^jEýÚ{n¹Ê›ˆÉ}àÈæ›¦XÐOrm›ù»• ³GkмëTY.èWÑÎ@b=¯Jù^¨{¥¹vWLRÕlX1Éßv1¦ÈcqvAîÒ6î!Ól!}ê‚5Ëi lI©6âíA ðÖØmœ wØR­¿>ÏOÙÁð©,»å»è6 ‚¯Ù¤Y±ðV¹V Ö=ÀEÈ‹ÆìÓ=jªå¸ˆ²#”üé%4,ï§;¨é ê1×Ωϡ߄#µ¶†¨µ"‹ŽB5.:«S8g _H¬pzø¦¸vS§\®Åf«6ÌÇRtéT팙iÕ§¼ŽAñO33¨‚†eʱU0E{˜\|Ÿ½hê™U._9 Ð,..æ]1女³“˜÷—!kùhì.òë,1{¢Èh ÅHh¶.¤zÂ%ÖØ‰Êp²Ö¼­š±StýÀ3ÍÏžgÁ0ÏɸnjÚáe®ZÊÕ1Þ„|³ÕÀgÐÂTíA`rÕÀÄGÕ@ÃÝÇÁ(åB#–=À,äl mµlZh‘±öð Z÷˜ÄAÄ|°þ$fÏ1j"Ü“Q´’Gív*)úÃâI(õG×kú·Øßû(•äˆV9 Aåvéª^WÔÊ 2rys\B<¦Ýˆo,·àT=Æ—ÚMæÚ×öȱy§`ïš½3qzXÝÒ Ê’ÐlB9ªÑ>ð^µÅ^~ ÄÓꛢ[>‚lîx¤KyÍrÊ´Ò('Õ‡Ú-ʪ%B3Ý@£cÂj%"yL‘}ñO3hì*" }ÀO$Y(–²™•3À³µ6ùªÊIà9ÈæG-ÔG±ÿyàÈZs ‘±ö­K×—ÆÔú¤ŽÂ-t‡ÚBоKB³¶þ:J=Ögù­¦Â c¿|4¥yúó;dš]DcXB<í.5i§ƒ™òð«ÅÇT*û»x#¶z!R⦅S%¼Lÿþ†^!ö·¡°î¿oJ¹öb}÷sN¹ló]6Âw~¯·€©U¿’¾DyYúßê©ð*«–iÛ‰4áæ«M§Xtvxg³¾hµ©\;ß¼£ºPfN1?©¼Xw U÷Úô#ä“£uŸ× ›,RYâS:4¦=*!Ã\QåKݨQ¾b¶¤bu=fÌ}Y@15£«:¹Ð#aÓÕй·="vœ´­36yÛ?­ÈX»×=ßu„ß¾"Ž@I,âØš¢ëŽBmUAÑŸ•OÛmSZìì„mR´´MоGÂÖØæ^ã³½˜F ÏZgžáðäs‰Ekž]/ð<äóæ ¡jžý ñ´Ýz¢Ÿ„ìãm.¬ºªÒ£À-Å\ÖÒT5‘/§< Ù\3µîí–°i ·mÒ £èíŒôÂ(D•Õ! !0Yé¡Ék:" j"½0‹^(È€®’¨™H¯ôœ©c»M„¾‘°ébâ¶™ÈQ˜ÅÑΘˆ<ÚA9 ³˜¬‰òj»¤öoGa„ƒ[oG¡“Xä²VÏÎÌ<(úSâI(õ{m];#{ôWŒ2€¢ï’OBpèÙê«×1¿Ðµ–àó²‚ðägu>íZ•¥è¿”: z«ÞêGbŽì©/^¸JÁhµžQú²?FqlÌ2ëôF`“).ìí—Nl•ö%ôY Cº:~³e~C!9J/ðmûbû>9Iðl_™ës¡™'ùÛÁü&»?ÅIeø­&ÊÄ^€ á äAcb—ó]º86ôo=‘›˜I³à¿Ùà¿ÉIõ;X_‚á%È—ŒYŽ0r|_ hr~siv3ÍniÐû ”“ó|™±-שVš²q6ÌIl\7ÂË/'Á³Z!'<3”“™ #oÒÿnef5x¾·W‰òdŒðœÎÜ!v·ƒœÌÜ"²·Õ¯Ú} j„ 23¦Ù¥NäkDNÑëNº5åñ â˜Ì¹é Uráfœ‰üfš6¢LÕKš[oš…S*A©rk™TϾ?€*á4äicÚ·*ìkºž˜ÓÂE@–«bšÑ*cð‰õ?‚.¡äßËú\ºäœ=qîß‚/¡pp2gÌýa{í2€ß`žf;…¼¿|žj+åd|ê„!?L0¶ë:në“ñ=¨Ÿh2ÔëuÄ-0™:äÊ8{äZ;ŒL‘î ÷ –·Ð–l+Þ1W,Õ@ð ä+ÆT%¯LåGDO˜ÜQ¥1V¯À¸ú‰þjZ ¢o@Žp ò˜1Ѭ­¶òˆ>€ü ¶b!nÉØÊÃqrÄN•w¬²OGóN~‹_ûz„¹ì¥ù[â*Ú’U®ZÅâ®r26@ða*©ªçì8\À톞yx±+Ì¡8gî[=óýšÍB±hЫɃ(ar¦3µ“è “«n†6Oæ^»#lñ‚Kó³¶ô¹§tþî˜Nuµ ¶„’dCækªµUTú¤lN];¶BiXØö*lq L¦ ûtœ}fç¬*nÒú¸æbÛÖ» N(lnÚ.](Ç3S½PcBɯ¥!û…q¶c×oøF%¶íìÍ0EÎÆÏAÆ£÷h/>éß·ïí+6 ?ƒ7áäã4Œ‡õmPÁ Ý}ÃC&xN/Lgîªëì[°#‡<Þ™­ˆè “«ÑfYd•Æ3.¡ ­²„³g‰¥Üÿú8yfõYi!”¦ãÔÓmï:&€£ÎȉèœT’U˜òô$‡csÎ)9 ΆNËaÇê?Ü'…‰àAá#r8vàŒÊaèDŸ•ðuê\Ä{çå°“õôŠø.DpŽzèÝ‹ò»ÈÿKyÃbòár¿æß‹Éÿñ¦xEø9{ ¯Fä˵ˆü¿ÞÄ[üæ„>PŸ”Ã1¦ú$F—öÊÃå›Þ#_ÄßME¤!Ӕϖø- ŸŽÉÙ˜÷gcô‚¾»¡g·ö¡GôÞÜöw[þ®;þ7>mÒ »ÓTnv7FŸæ#ôæ^DšîÇèÈBÄ»"lcQ;†=l ¿¹$‡…aŸÉa§ëï.7鸜7b¾ß?Ž±Í•]z"‡ ÖßýìƒÞû"FŸEpú2†ÿóˆw_D„½Œûê7ìOæº&¿Û_µÏº€Þ}Qg~¡ÓßÈa½õ¿ÿƒŽÀcòðÛ]ý.F¯¿—Çðõ¦vN¼ûC„¾þó»oöÙÆD>ô;óï§à÷ºÄïÆô€Ž­—휌{ÅåšVó+Ö_Ùï+î÷®íU‹¾·àæÓÁhyË^à®N~øà;NÑ›ŸŸ_Ë¿©X¹·Á7o$Hcã3c“¿Ftx.…Ô8Jóã¢Ã#wO(ÌÐKÌÒ?øþ±nî%f9û¬°áZînv…vÌí8î[/»nŸ£Ù5ÛsªnÎö²Þ¶åÚÙµ|¶dÑ^‚¬·ëùv)#z¿Wç2âÍ\BzôÉGzÔ ;ôÝ›—kã3‘Ú2 !Œð4øo÷Ý%«nò %sn};ˆïöïWæ³Ù嵥癵©ŠëÐD{Æq·²0’…ñ™_?¬WÞn}„¨c˜Ï1bo³ZŠéM[Náˆ~ Ï®6í¢g(:ú>H„Sõ?üé×_?°¨dŒ‚:á4äiÓ‚£¿ØL¨À¨×o~Á/Úñ5Ûy$“PÚÖ“Œ®FeÅVBYñP=+ å|!¨äâ3# üò&™Aoow®m{ôøÕòÚêË׫/žÇ'z %ŒhÛöŸhz«PbÕkUýmÇOçÒF(í¸Ò¯£~N(­×óNa~Ýó‚„Ø rÎkaª}ƒ'"MY¤ƒP¸nž×-»· ¥gY½ìJV¡ì[´g4¾ü¤3òF„kª¦Îi»JA±9«¬ WÎ6nÅ­õâJïi.þ%%þ‘s?‹§›&$ÓWÙ›~Á½.»ÎûÝ-»<;Ïò+;>³ót?æ.Û¶bï¼ï^~ñå—ŸÇyÆTý¶¬gýwÿtþÏ"<‰žµIÉ”¬Êï¾gm69M¥9%!Qºÿå¾m¶Æ«ìeѶ<;Ô½¼“ãÎÜù­§´·Æ³wв×U×È.ð%¼ù†1g-_i Ó†¡@#ò̹PÀ8Vß<^û,‚•ðæBxòqV‘±^/CÒ˜h ´¿Lâ=x:\&²ãÆTÍsFBerdÝ*¬¨M ²ÛÌõrèP(ú“âI¨P.¾tŠ»[NÙã?3‹Bûçr6£úE‘«ìÇï*ä« ìÅÄ{x òµöE]B<šEuÐx'æÀ&§šÙò@ØñDðThâ{þõ³géð¾qñ!ø2bƒ›úÉAÙÇ×ÈŒqŸ±²•qK¹•¥g¯§éRôLÑú~yJÃRZ\Žž±l/y½öuðV&“QßÉ&»aŠ˜036‹ªgmE™…è¢ô¦:¢í6 ¾Ð.!M³1¥CÛÖú$lº»T‘%&ªbí†q(’;M'ì‡Ü¯CŽ“êk"uõ•íó{zk7‰‚¥Çrüx¼ÎÅ3Çðá-È·´óó@LCuÐ;5•ˆ-—!/'fv±»©(º{ÀG%mÌn*Šnøòccc§ûBu<“¬W!¯&®‡…x£È¬V…{_¸|¢õAÑuOBÖê©i„tuc”#MÊÐY²ðCîP¿†‡¡zâÝÄ¡”f71R1?n·Ul"–NÕ¯¸N§P´²À®@6ïêa·’Š A֪Ÿ<Á¤“AïŠí–6ømgµ;0Å…¥¢gô)Øw*¬h¿³‹ØŽ¬šÌúr”®£2LÌEš”ʰoéþ×rq·~¼§Z©•›ÑãàExòÅÄŒâ7º#±–p&Jx²Öl‘š%Pt—€iÈz³Cò·gY«]u╯ûÁpÙ¢ªPÄk ¸yŘßiqûí`&½ç ¦HmºCqµŒq‰Åøé;&E+mh÷Xƒ¢?#aÓuí¢q9 Päµ×ã ¸™Iý¨K]MŒ–ÂI¾÷¦±£®]’í5Tõõ÷U3™’Ð\…¬×Ï”¿½*Œ0¦íÑ2J©ûå,¬UFyRжƒóbýu õçÅŒhÈ»xZg”÷˜áŽ!v*Õè±^Ì5mòd¡»jèo Õt6Æ*”C3 ØŽ›/”ƒñ¿—aìõvÐ5Û)‹ªùKôû€Rµ®£a1Ÿów+tGnУڰkÓUº‡Š¥æŸç9j¸´!¡iwÐzû…Í] rÀ äLëǦÝ0 9ÛúEw8 yÚXW†ébv+hs,¿`q¤^ùNRâ4\lÞ¹Y †5U¯f~ää¬Z ¬P‘Ô¹ŠòLh8NP¿ç™x\’O«ˆ¢2È̸hºK§@.¯@¾’X*:ê£6¢r˜œd]²G™\f!kÕ%ÞÓ:%2 œ<“œ‰ÄÕì{Ç ñ´£8fw!ßMÄDTkTb0\€¬5Ÿ½4P´|Õ"¡qawªîà_»Ë¥V$gBú%Çú†Er$­3 KŽO¤jë8 Ê×ÞªùÃV+ñœ¯c;Êå$ðä iMˆÁEàeÈ—+•®BÜÆ=Kd8 y²=%2üò'æcFÕ;ECB<­¸ŸJÕ뉈m£í1SôS&³¿Q™†ÔÍmålmVQdF½Nx{iÁlÚ½×ÁX<Ÿ†ÀŒüözÁð²îõòÆBc>¡Æ‡ù|æ¸ë÷l¯„ôŸ¤j+%†%=T´vÉS”åѨÌwƒ1»ªJŽmä œVਭ0ÆSí×|Šþ´„Mɵ‹†4YÒB<Ìwd)R;«#”6ÏhZà‘æ®åê&Ó txò‰ÄðÃ|·šj.õ¤xžIiN|©µáÝI $još¯g³úJ²k—œw¶ÇJÏ ¾³ŠUÛã‹ÊªŠN,/?‡ü¹1ã‹íXn™j?ÆÔ5ê,Žpò@buHgƒQŠY˜ÑÖ+Ô¼HxòYãâ¹Ì¼BÑ.ûÅÝURm³.ÀÌïA¾×ú6Kœu¥h¶™š5ý‚„xÚMã"r@`kÚ¬cÒ¶aE‚—RakEh´+Œën"öiÑÙ¢>c†½ÚvªÅ<ï2Þ£u”B9W¬æí<'¢Ú4L·¨šËDþð)ä§É WŸ/©ÖL 9I(]ŠÜꚉAÃ{!kÍ'5¤ÿvZ^*O‹Róh‹UÞ­ïãõ¸Ï`ÚÌbç•×;ˆóQà"äÅ÷X.£èºujÅxEG(mŸ4,ÆÓ¬l¿ ìNŸÖtQêJr'{Dcxr6‡QtcÀ4dóÉ‘“Ì*îXÜÇiXJª­>Ñ™.@NrÓhL«IRÙ´¿¹¥è%ÄÓncÈ-jõ¥-ÆŠÉËy7мÕï1¯‘SÀaÈîý‰ËàeÈZuZÅBÑŽ¥jsІ:|%nç[½õVv¨<.=+u4dúÔµhw,í*cs6 ‚ÄîìR&ÜüWr<Ÿæ7«E>å¸méºÀÍj™ß‚ª<ýx¦Jø²^7²!=|»S¸Ÿm8A*ø)5¾rÏ)øèñ>2m †e}ämë]n¡£ƒ±ªé‘y$—ž«²öÐ6D±»2ÇçƒÓÌÎleTíÿè]KnMÜ{SÔ†ãæmWµ¶$R³À;“\9ÙEÑ¥w!ßm}ýsMzæëhÚ†ªvd(Ú{âiuGFÜÿAÑvpú‚¢_°CÓב[´Y5“QÕêäw{S¦›U›§-.8¼²Ü-îóÄcËóì< W»4¨ö%9áªí0ŸTÑ 6¼ 9É&¦b£è²ÀùTͱV«+6ìàx²VÒxSõGè0Ïw$í•ÿ÷O ›¯wN± ŸäÚ6ów+áÝuE¦{õr¿?ƒëyUÊ“¡îqœ‚ÜÅøOµ@ýŠIþ¶‹1E’’{È4[ˆFŸ„ú^̲Eöñhž-)ÕFœ¢=Ž”º³á[ªõ×çùK;>•%?A˜Å6 ‚¯Ù¤Y±ðV¹V Ö=ÀEÈ‹Æì3ú§HE²pÙ½MBÃò~ºa›.Øsíü˜êð| úM8Yk ºZ+2%áhª¶Oðtt6郳@±©·]0ÒQ–Wø;(››:årxræc)º‹À4dóùØ.åu i‡ßõl{œ Ë”cª`Šö 0¹*ø>{ÑÔ3ª\¾rnñ’. ã]1å¥s\Ÿ˜÷—!k9niì.R-,fOeQŒ„fëBª;c¨ ‡!kÍÛª;E×<Ùü€õy óœ\Ÿí«yƒàª¥\ ³àMÈ7ªWÓÐÂTíA`rÕÀÄGÕ@ÃÝdžUåB#–=À,äl m5cZh‘±öð Z÷˜ÄAÄ|°þ$fÏ1j"Ü£S´’ÇËv*)úÃâI(õG×kú·8ˆ3›JrD«œ³P9]ºª'füÌèPÕy\B<†¹rù‘c{ܯ¶µ¹içüú­Á^Î*ÚžrÅq F(íÞHHqúÖ¥ûsb2‰bœë¬êÌA]«NädñÑú \‘ßmXÙmüòÑ”æ&~Îïiva ñ´»Ô¤ëåÍ”‡;¶?7šü ·Ë±L¢#œ¯O}ä ›·ôï¯a˜¡ëú¿ý …uÿ}Sšµ]×÷ÝÏ9å²Í—£„ïü^}ЫuÀ%M‰Ú þ_é)ï*«–i}Ö·Êùp—¦S,:;Ü [}­|µ©\;ß¼õ°PfN1?©<«} ö^*õGÈ4NŽ–;ú6Ù¢ ²ÁK¦t¨ówT¦«Ö5sE½;,õ£ºÃŠÙ’RíœBFŒat•C'z$lò£­˜ qëˆG‚:úMìùܽ¸F˜Þ?·ÈX»×=ß­9 ø(âàÈ‹8¶ú£èz!_l}AÑ_’OÛ Tö|ߥh;h ò½ÉhCê­beÛRí>†MAj½}†M b§Úoýi ›®¶Í>D£©o—}ˆ¶üHgíãlB`²öq„«®ªQ¦èjªšQVö&¢™ÊBϰ„Mcжˆ|½F D2ŠNN‰Õ0Y9Œ‹ªæÑ “ „<ØzóÀv>ŽCµš-3óî0âi»yÈW·tÀ5ÔnA"cÝk%÷ Œ@¬+êÏ%eEß%!ž„2àгÕW¯c~¡KÜúÚÀ粂pòJO»V](ú'âQ§AoõÑ[ý©ú3^_¼p-"‚ÑmüýÝh}Ù£86f™uz#°I‡î¦öK'¶J£3 Ç$Äc¨CÆÙ¶í2œŠóõ²Jx-fšïe#gè¬î†<¼çeÇ‘®.ðb×=b“rå„ëÁ¸üÈ8)Ç™S¶]¼KîÝéH‚må¶ÒÇ&Äú»7™fü(äûõbÓ"×âwH%q÷ØRœGµ…S§æmb‰ _šÌ0¶Tf…¼r:Àp ò’q:ÆÆönÁÚ(ÚŒÎå„¥B ä;[6¥P™è#ƒ<Öºº4–Ç"â˜Ìþ‡{…¼ÇîO±M+ç;îDnbl&33–fc³!ÌdfÃO³á§›á§›c“êws>ë‡&Ùöœ”Ô-Áœ†Ù™I•U†WVÊä>!ÂaÈÃÆäúX`£l!ø_üøXJË A˜œ§–IV4«ÜÄÍ4»™™©ýo–Ksôÿ9u=“ªxù$—!ß.u"Rýl¸-ÕLá¥.`‚ ?ZkÏLu^º'®æ tÔ˜ß9è¼kW&HïÃlÝšT7ÏÁŠÐì:ùÛÆÞsõô=ÐûRþÙLøa:ø/s³!0Ãß™¥søH¯('f XM%9:˜c›¹F†œõMúø)>òW¦3·ù!yx¨íœ3æ¾ÌØ./ˆ©_X‘ª¹z /^Ÿ¢àæÔSòØJ5¬aJn±PYêüfkUêlæ>Ά5,¯ugÕëµg K(m mû%"'ìdûq L¦‚] ÷Á‰®6»Áj×Á[¶7îaáú$¿>ëC vC9/ÀœPêmšWÃöûJ0ÜyS,” ¾' ƒ”¾+Âäªá+ ùœ¦ýv´Œä'šÔÉ̯@Pr¹cHušµXÖ@•pòôïJ^Õ«ß¿¼½×ÿnéÀ× úu¢:0¯AͶNíMu…ø Å=×#ò·êÀ·Àd“ãì3Û÷íÚ‘Oe^“Oš÷]sn¡ôÑp—¤ÑˆÎwŠÎŽíN¸ÎN™æì&¾~µäº¶ç{“ŽÖ?('æ[$€0¹¾ë'abJ”š€Ø¶U±gççKvÑŸ¿I‡C‰uÂß$¡äÏÃðéÂfmƒ8UA¶²ÊܾÂÓͯ<cü\¢íQ E9JéÈÄSÏÄu#ƒ<–D„Z_rCuÊÉjÕû?€"ar5Òªn¨ùÑ@}Y%oµº¿žù:Ü_ÂäX÷ˆ{cõÿ¾êº{/ÍGar å«+˰&ìä4ãOˆ[`2íÁyÆŠ–ç¿ázK-'_rà*¡žUh —öæ·FL6ÙU)1ÃÚGÂäfönÅVØóKÆ®r K˜Ü˜yAß®4ÒoBiýÆ\£­?Øþ›7(ö§ÚŽºFÛ e'ªÑ]¿*ÙDä„FS‘Ñö®£7uÈzÑm¥’¬x”´·r]º9`Fc9 P;7"ߊÞ!þ_J'Nz£y›…õS˜8ÚŒ_ÚðSøþIé7ô5¦gPþîx=|HÇŽ¢Srœ–ÃŽÕÿ~¸)N ;ÁƒÂGäpl•Ãà#ᬆý^ç"Þ;/‡¬§WÄw!‚sÔCï^”ßEþ_ŠÈ“—›ø5ÿþXLþ7Å+¯ÈáØy5"_®Eäÿõ&Þâ7'äðzø¤>†}£K{åáˆòMï‘/âï¦"ÒiÊg ËFü…OÇäáLÌû³1zAß݌г[ûÐ#zonû»-×ÿŸ6é …Ýi*7 »£Oózs/"M÷ctd!âݶ±(‡Ã6…‰ß\’Ã1šûL;]w¹IÇå¼yóøþqŒm®DèÒ9l°þîç:¼¡ŸO÷aôÞ1:ø,‚Ó—1üŸG¼û""ìeDØW¿a2×5ùÝþzø«}Öôîëˆ:óëþFë­ÿýäpôþ“‡ßFèêw1zý½ŽmëMíœx÷‡}ý1æwß쳉|èw.4æßOÁïu‰ßé[/Û;9§T²ÄYVó+Ö_£÷{×öªEß[póé`X°e/p/ ?|ð§èÍÏϯåßT¬ÜÛà›7’W–‰±ñ™±É_#:<—Bj¥ž¯èðÈÝ 3t`±ôþ¬…›;°XÎ>+l¸–»›]¡YÌÇ}ëe×Â)Mú]³=§êæl/ëm[®]ËgKVÎu‚Ï»žo—2¢ø{õ{!ÞÌ%¤GŸ|¤G ºCß½y¹61>©-Ò¾¦(÷óÿ‡}wÉ㪛|BÉœ[ßâû°íû•ùlvyméyfmªâ:?Û9?ã¸[YÉÂøÌ¯Ö+o·>BTŠqЀ£´z®—bzÓ–S8¢ŸÂ³ë…M»èÙŠŽ¾áTýúõ×,*£ N8 yÚ´àè/6*°êõ›_ð‹v|Í&M"ÈsùÉèjTVl%”Õ³¢P΂J.>3d×?BþÑ$3èííεm¿Z^[}ùzõÅóøDK3øQmÛþMoJì¢zb­ª¿í¸ñéCÚ¥ý:êç„Òz=ïæ×=/HˆÝP!ἦÚ7x"Ò”E:ŴؼnÙ½M(=ËêeW² ü”½GùÉ!I3µ ×TMÓv?”‚âÇý7õNVÐ+gŤ­ÿV¢Ÿæ}ÌÅ¿¤Ä¿ Zîöí\ÓTdú*{bEÂHlì2×y¿»e—gçYÞá~í<ÝnµË¶­Øk»—_|ùåãçqîºÄ#U¼-ëSÿÝ?ÿ³7ïS?2*“Šåoÿî;ÕfóÒTœSâÅûÜ·¹6ëäË¢myv¨|y'Ç}±òKËÈsÜÏß)ž¿®ºNvpW´Nj’Ör!7%¡~ÞEî­©`­o¯}AKx× HÕüJ¨ÓŠŒõð:m¥‰‰öðäí/Šþ¤„x-r_ X(²G¹µr'2Ö#ëV±`E­ÂÉþüNBÖË£R¡è%ÄÓiS‘݈µ³Td'n,•Ã( ­(Ï·+Š¥r%q¤Í¥"ÚÃ#-•#( É–ÊéåÐK.s6<Û}Ç›d囯eïIç!ŸO°„ølHL¼€ _h Qô%Ä£YBýÆ{¼~Ã[f¶Ì×jUÚ4U¡“ò ìù×Ïž¥Ãsðâíè¡‹¥ ù ‹WðwÇÔO!õ¢,y´ç°ÈêÎæøÑ¡lÛ.Ó.°±ªï#äg§À_tj9¯‘ áþƒpò¢q*2N®Tð]ÚÓ<“fe+ã–‘ß´f–ë:;õÒØvv2E{+LÞó%õdu‡'ƒÎAÖïP¨½^û: ŸÉdÔ·WIÇ£_$] ÄòÀ,L ñ$bwTæ-·»ã } ›®œU¤Ó•оõ¥–¬HŽ#v§êwÄu‡¨NŽ“êk"uõ•íóë•kÀ‚¥Ç‚¿sß”OoA¾¥ŸbF\-±?Z‰Øpòrbf{Y8Ewø(UóT•X´1þ)º9àcÈµŠ¡!o™ëfi¯|_®B^M\! ñF‘Ù¬jï÷§’œ‰ÕŠ®x²Ö”ˆšFŒ„¹ÆQj÷ 5b(ÃV7™W±s…ÍÝh´—Å0¼ ùjbs3ƒ·Ûª 6K /´§À®@~`\`GØ„Æe²Äaø²V-ÖÀå .’ zWA›ã”6‚štu©¸gVtƒƒþ.wúæTXÑ~g©ñÒHÌ(´ŸPrPd˜˜‹´™aßÒµ½åšƒC‡yÕJ¥¨ÜŒž/‹õ§Ã»#±–p&JxòÖ[Ew ˜†l¾6y–¸úÐÅ[^ùºÏ,¡hª E¼¦€+WŒùÔŸÛÝ MzÏL‘š4<Ž:n\b1þ¤ÏHÑCnÿXã¨ÄÓnòNC³‘×^cŒC4; ÈŒ&üÅÄÿQÈGu˜¥¢®K]X’¼»6vÒµ»Í½†ª¾þ¾j&Sú«õú™ò·W…Æ´=ZF)UèòÞ®Vå)Úk¯µß(úëâi7KÈ-2Ê=n¥cÆ`ˆ¬%Fyï5®/x>ùbf¾k•½ )…[‰‚.KÕ³ùUäd—ÜyTðT³˜Á Ÿ@6ïh ñíÓÌò‚ÛóÝ ÁV5ÀË(ïË©†)ÄV “¢•fÛ­ùýi ›®k1ä€ÀÖ`˜ŠVd7Ã#<žúèâ^C#œ)&È­üÏUϧ|if¸§nI±ƒf2ìû…;ŠƒFG5—‰ÿIàSÈO {ÒbäÆ* «>Ù_O Û¬–ùD¿ªeJÎÔ¢ü€´Ê2Ç¥h#|9µË$(úâi7 y¿yë,³;É]ƒ1šÏ‰7“ºò, ÅhÕÇów‹6›àÒŒ¶4¤™÷KÕríI Æ'€7!ßl½NK]¼(¿4íR&Š~NB<í¦q9 °E­Øó¢ÈnŠLhÞÚ4³ºÊ•šoÅiÔj¾&PnШj5Q= œƒ¬U®jZ-ŸÙº ùvûÕ‰¢ÿTB<í¦!5‘-ÔêÞÚf)EzŸ@• RÛæ#iMpµ7qqYl¢\-m=¨-¾|I='«ÌfT5›ØïB¾ÛzÍ–ú îePV)Šþž„xÚMãr@`k4û0ߢH- M&<ù˜¶Vi^Ú^Ýd„ŽO@>¡Wåß›§ÍqKÄå Pš†M̈b– (º“ÀóµvQ7ž½â‹f¬¾\åÚ%çí•ǯ»Â 1´r¥ªèÄôðsÈŸ3°ØŽå–in„1u’ö%ÉûÒ¨C:«°De8 y´õ 5…ÅúΉ ‹ç2ó Å`œ\ÜQ%ÕqóÌŒðd­Z[­Í')Úíj,(ú ñ´›F9 °Emßœ®H-› Û)Bó6««‰Òøß/ÕŸHæ´úûȈèqà4äi£(Ѽ\>¬5­ckõ}Cÿú¿i®9·Ü‚ê„IAøòC]ºýò§ÀÏ!k5]jU2E7\…¼Úúº.êGé²¢vW2ýâi7iä€ÀÖÔuǤ}ØŠI+ºFÛì8±î&bŸ-Z=˰WÛNµ˜çëcŒ¯L± ›ʹb5T|…p-L·¨šËDþð)d=‹ÊÝ®çKª½°Yä$¡8­¨u,NÍäg¡a„½{•þvZÞ{¥æÑÆ «¼[ßí1˵ùî ;ŸQ-Câ|¸˜ªeëèèì&ŠŽÐ¨; VŒ7Qt„÷Mên”beû]`w¢øÒ:»P‰R?ð2äËñ• à ÈmØmGÑÓÍwÛdVqÇÚõj¥¤:Â!:S@©¯ßêVFRÙ´¿¹¥è%ÄÓnÒ:R+[}i϶"AZ‰èNÕW$ÌZýó¹9"r 8 y¸Ãµ?q¹¼ Y«®S«XÄyÂ1ÈcÆ:|%n+a½õŽ=W¸W¡W ¯3}êZ¸‰Ý*c·;Møˆíî¥ {MÈà¿’ãù´ k³Z䛯¶íb%øC±©By#–´P–àÐåiŸ…$Ù†¤‚ï£ÆWî9ÑZ:ï#ÓkXvÐGÞ¶Þœj(×)©¦çS¤áÓDÓsUÖÚ×Ù<¡ag¶2ªöôözî9ѽáÐMQªµ%‘šJr f2>Š6 ¼ ùnëëŠîpr lªŠþž„Ú ljqåEÛÁ©ZŠ~AÂMÕÞElMGæ`&£ª¤˜ÝÀ^ÈZ#ÝÈi‹ N¸ÃÐÝâÎ=V±<Ïγp߯Õ>àä í<Œ¢å“*Ôæ€w!'YÃÄTl](É­®Ø(ªIà=ÈæKö}Ô¡ÓQ–«|ƒ˜Ü>l¾ó{Šý$×¶™¿[ :{tt½¦È»N•å‚~í]'Ö󪔥 ÍÜ2˜ULRÕlX1Éßv1¦ÈcqvAîÒ6î!Ól!}ê»i0Ëi lI©6âíA ðGÚmœ wØR­¿>ÏϬÚÁð©,9†àû¼7 ‚¯O“s¯·Êµ±î.B^4f˜nT-ÇE”¡ä92¡ayÎ)Ã6ò{fçÇT‡ç‹ÐoÂÈ#­oE%…–¢ƒ<Ö~c9âI(õG×kmHDÜÃH¶p•Ì,“r< Ä£Y5¥C{XKˆ'¡n豺ï÷IÕÞèj*¬¶5¨õFW¡„ƒÕdåÂûÂõzùÒ±_’¯fÒ‡íBŽ÷Vwí¾³”«B¢>|ù…qú u÷(ÊKÂÒŠµìîvòyú÷×0Ìð:пý …uÿ}S¢µ¯í»f6°Üá;¿×k=ÕZIUðE±üŸô´w•UË´SÏ·Êù°ÿ»é‹Î÷o\ß59áÚ¿T ®o>„ôb6œb~RyÑ? üò·ÆÉѺàó€„Mƨ@ƒŒð’)š<*!Ã\QŸ•æ£&F³%«ë1S"‡„³ÙºÊ¡“ =6]º¦˜ q;ʼנuFÂ&7Âû§k÷ºç»ŽpÆýQÄÀÈ#‰E[óQt½ÀQÈ£æÚ j›ýY ñ´Ý6å›E;`›íA`mS¾×µ…¶¹«A댄m³MŠpØFÛ¤èz´MŠþ¬„²MѳiêZ´Ë6E‚°ƒ¶IO„æ¶Ùz«XÙ¶TG5G`„C‡ZoG`„§ Ÿj¿}ÐsZÂ&Ëm³ùvß؇d´ùnåäíãíö¬ºª‚a>ÇSµ4UÍ@p „ãiÈæš©ußó°„MsCm3i²¼Ò£ÚÙ!ùÛ® „{Å¥3ª&Ò³è‚ è*‰š‰ôÀ,Ï@ÖêSš™E?"!ž¶›H/Ì¢·3&Ò ³•V‡LD(„ÀdMäWÛ¶¶óè…IBl½yôJÏPÛmèÙÕOB©ßk/áAÁQ þ¦QPô]âI(=[}õ:æºÖò|^"+“»WO9[(úÏ%Ä£NƒÞꣷÄ&#{ê‹'ï9ühŒþþ«h}Ù£86f™õôF`“)®Îî—Nl•¶– R Äc¨CŸŒ3iW yØðªŸoþàwJ6ól·`ÇzÖˆ%ü ¥A(yð6$<.‚MØ9§ì”È… ­Mä-ßN³jÙ.ßîNN²rº”¹¿_BáÀüj†‡ÍÜߺɦž~„pz&ÍÂ[¨íÅ¡$)'ãkP'|ù¡q2Ž3£¼ýDC>ÞºÊ0–Ç·ÀdvN<„A…[‚È à­†ï4¡J;VÙ§# µ]1bK E9õ?&ZƧÇù ìn¨‘|‡ŒFð-øݱÙÀíkçè&¥ûS¬fIßפ+dI쳼̣@š›ž¹95=ü76™f?('â;'|ùq"fQ„iiI%ö=ÈÎBžm+ñД‰¯ƒìz¢ÄÕkˆ·ÀdjˆÔ´!†mxh°ßYçÚlÛÙaþŽS«÷ý ®]ä'Ôèp#o”cwÅ&æG$€pòŠqb2ã¡ï'QöüŠ3rlU±]Ï)[EæYï å-¹A”I¿Q äŒ1é›%ª;¢;"!ÙŠSI³JÀÞvýIuþ l %瞆ÌO”„i…»å•iY bÕþ€£©4Ò¢|¬u`‚z¸\-]ȯ&&5òrD7Õõú ‡¸&S<gË´•ö9U,ºà×l‡M)ýSNKü űŸÇÆi™Üoï\™¯ Ž„“'ùž—»²5•å¾)ÔÕt´¥‹­Û®¦[ˆ[`2jz{œ}íñSõŒ_ P×Uî%Ÿç~Qø7â€~©Êä·A˜ð6äÛÆä/޳W¶ÍC~4²-Qc›·}«PTï×@Œð"䋯$³¹øfé} –¡íRÐ6iT£?ƒ)arÖ˜õ¥\C75Ìá…P&4X¾3ÂK/³hd©Ìª&„ŒYÝg¬1¿‚f HXfæÒtÕ¦G•ùKsÏ^ô1Wt<­ê©ڄɹ9ìR'RFä„]õfÖäoÕëIq L¦ž¼4çNÙw"¯ÃË%ëíº2Ë ˜Uµ‡Oò›TÙðSz›Ä×03ó7à &7q+ÍfÒ쮆ÿ’„ÉÍû]ܰ‚Ö§^?æ7Q1„5Hº F˜\ ~ž“”»Âð¨43­NÑ-ÂäºÙxŠi†{‡yˆîAÕ¨e|0%L®‘ùì·Xs+ hó;/ÇRBk$¤ ò„ŸAþ¬µÔ;Ä-0™ZêÑ8{¾ä± ×¶ÞÖ:kÞÃã?÷šû»«V*®í…ç1po+Ö–zßnô %‡†Iü¨*S&öd!;ÆXX©Î©ÏÖì‚á1Èæ«=gÛáÕ{P·Ï¦YPÛõüó¥Iu‚R„g!›Ÿ"%‚³œàó%‰áœÁ õ!Q‚£Á›RMNP™ß¿N„£G;Ñû‘&×»ÑNÏÔg†+A}íO˜Îpÿ t ¥ 8Z@}6iê ºÛrê7“¦þgÐýs¢ÔÕ[Æq Ôoi…~ИÏ ëjɬÐÓÔ…ÏÎóñ¾ó°Bœ¥~2Ó†Ü"‡¬å`§yéóYaÐýÊsW6ù')ì|è+—'Â"7;ÛNÑN3ÏaŸöÆóÊÄžyY/ÿ…YŒý2¡tí—:ýÈh{×óNÙ÷mÏé”Stÿã”é AþV}p@ñwIˆ'±,€ ô(—–kHöÒž,ˆÛPýŸ Õµs€׎˜ÒùŸ¤Âó›ü›hø…‹:½Ò‡qwqwKÙéîš Û!ÂÈIÞvsUE× …¬51mÌÙ™ÿšI˜\ïÜ<[)‹Á8ŽV <6¢ð&ï©* ;œƒl¾'\ù´Õ†¼h6ë±·ÞzömèÓ`x8 9IŠÑ[Š®x²–©é-E×<ùœ±Zœ˜çRPÊ÷š›óÀ“»‘…ŽôØVÑsbêUÒÉc¬Ÿ f¢šÿE!P¿µ1¢ñŸ#jçFä[ѧÍÄ¿ÿñ¥tâ¤7šUQX?… ¿{ÍøWð¥å§ðý“ÒoèkLÏ üÝñzøŽnî)9ìpvZ;Vÿûá¦8)ìL ‘ÃqHrTÃgå0œn=ñÞy9ìd=½"¾ œ£z÷¢ü.òÿRDÞ°˜|¸Üįù÷Çbò¼)^~EDZï«ùr-"ÿ¯7ñ¿9!‡ÔÃ'åpÌE}£K{åáˆòMï‘/âï¦"ÒiÊg ËFü…OÇäáLÌû³1zAß݌г[ûÐ#zonû»-×ÿŸ6é …Ýi*7 »£Oózs/"M÷ctd!âݶ±(‡Ã6…‰ß\’ÃǰÏä°Óõw—›t\ΛG1߉ïÇØæJ„.=‘Ãëï~¡Ã«úùtöAï}£ƒÏ"8}ÃÿyÄ»/"Â^F„}õö's]“ßí¯‡¿Úg]@ホ¨3¿ŽÐéoä°ÞúßÿAGà1yøm„®~£×ßËáÃaØzS;'Þý!B_ŒùÝ7ûlc"ú ù÷Sð{]â÷Fcz@ÇÖËöNÎ)•¬2:%Vó+Ö_Ùï+î÷®íU‹¾·àæÓžomÙ Ü×í|Ç)zóóókù7+÷6øæäüzbl|flò׈Ï¥ÇMÈ›õÜ=¡0C7ÁKÿàøÇZx­¥í&x9û¬°áZînv…Ö¿hêÚË®…‹aô!»f{NÕÍÙ^ÖÛ¶\;»–Ï–øºcÖÛõ|»”½Àß«wañf.!=úä#=jÐúîÍ˵‰ñ™Hm††Fìƒþ?ï»KWÝäJæÜúv߇m߯Ìg³ËkKÏ3kS×ùÙÎùÇÝÊÂHÆg~ý°^y»õ!¢R,ÍËÞêõRLoÚr GôSxv½°i=ûn|$©úþôë¯XT2FApò´iÁÑ_l&T`Ôë7¿àíøšMZã‘Ï!'£«QY±•PVÒ—îå_~ùøyÜ­â‰Ø¡‘x§ú¿8üÿû³7ïT?6+Ú'û»ïV›ÍLSyNIˆG”ïÿeßÛ@cê*{Y´é°×¾¼“ã7-ò;ì膎5žÁSa»êZÙÆ]ì YkÝÕ‘‘ÈkŽêJÇë›ÇkŸEð…âýîÕyEÆzx½ŒIc¢=< ùdûK…¢”OÇKE¾¼ã$d­ì‰ŒõȺU,XQ?ä«S!ëå‡Q±PôCâI¨Xο¤¡cò?Øo1/gù¾íRµ«ÈT¾Éaòx‚ÅG{1ñ^|¥ýEÑ_•fA2Þ3uE °É±¬f¶Ü“ŽÂ”¬J…NV,°ç_?{–æÛÐkè>y:@ZÈ-XÁßSß·,;™¿ùžq æ«8^·© üjg7W–ž½z¤`ÛÙÉí­ð$ìó%õÈNÀ#†0š 8Ç‚¾À¶íüŒe““ƒ×k_t3™ŒúÞÂ^°â¿ ù\‚6[¥£®1ÊIqŸºm—Íþ†«[E›1¥C« }âѤC‰‰ªó»a·Šäú`‰„ýûuÈqR}M¤®¾²}ºA·v-KW£òQšåÀ[oiçç˜6ô %6Ž*[.C^N°§³É‹¢»|ùQ‚ÑÆlò¢èæ€!?Ö*††¼eŽò­ÝÄ`¸ y5q…8(ÄEfýÒs¢Ž­ÖÉ£.€o•F`&Žcr}ë¡ [Ýd^ÅÎ6éÄ$yRÔ(†!àUÈú¸fÅü¸ÝVm° ÓÀÈ í)°kÀØ6¡qC:á"ðd­Z¬Ë“¼½iU‹þdšÜçœÒF¡,°’û|-š%fù<Øw*¬h¿³‹¸þ]51Ç¡ý„Îí5s‘†oö­SeN¹¸ËÏ ‡$Eåft¼/B¾˜˜QüFw$Ö`¢„7 ßh½%Pt—€iÈiã;Ë \}è&^:ã Ä‘-ª E¼¦€+WŒùÔŸÛ÷kè=W0Ej' ;„­K,梗>)ZiûB»ÇôÎ ›n”l i†Ñpäµ×ãÍ(2£Ž@7ð(ä£:ÌR`ÖÀha)œŸà;ƒ; iîÚ-äm¯¡ª¯¿¯šÉ”Ñ·Y…¬×Ï”¿½*Œ0¦íÑ2Jy{‹´ Ùj£”¢½ùZû­¢¿.!žvÓ8…Ø"£¤99Ef§Sõ+ý’7Ê{¯­%V/ò[Eæ»VÙ Ú˜R¸ætYªžÍH"»äöÈ ‚ò™žÓ0CÂ'Í;ZCEk×vÓ¡KÏwƒ[Õ¥&)êtr« ð´­¤~íÖüaPˆ§Ý4Î ¶Æ{Äij"»áqÈÇ3Âù—b:ÜÊÿ\õü¿™Â.PwTVì4Cß/Üü4:ª¹LüOŸB~j\Ø“ ªŽbè ©òqZØfµÌ¯ÐRµÌQ(á$äÉÖ[æˆm„ Øv™ECB<í¦!fn¡eæk?ŠÔÎÁ A>¦m–Gš§•ƒ.ª¡ãÀOhçÕGyÄ×Åâ´9n˜N\Î%¹ÕÃtŠê$ð<äóÆÚ›æV¬>UäÚ¥`ìà±RÁóhVˆ_øäñY#UE'¦€ŸCþܘñ€%ÏfS×(y õäÄ4êÎ (QŽBm½BÇ‹„g!Ÿ5.žËÌ+ƒ6ª¸£JªmÖyIçïAÖZ3Wk³ÄÚ1Eq,¤]E¿ !žvÓ¸€Øš6똴AA‘ Íâv–}8±î&bŸ’3½ K–a¯¸‹¤Ð{)‘cÈB9W¬æí<íhäγy ¼EÕ\&ò§€O!ëõ&£r·ëù’jÍt 9I(.^×Úq£V3]‚†öBî5VúÛiy.,-JÍ£‰j«¼[_¨ïX£Ùj;ŸQ-Câ|¸y±Ã=†¢#4êÖ©#CÑŠ)k½Íò·§YÙ¦kïDñ¥uVE‰R?ð2äËí• à ÈmXý¡èÆ€iÈæ«?'™Uܱv½Z)©¶úDg ¸9ÉUá˜V_,R´ ›¯ +7·ý¢„xÚMã2r@`‹Z}i"ARÖn y«ßc>^%"§€bRoe.¹ÚŸ¸\^†¬UשU,Ý $ê𕸥­z뻫u¯B®@6_`~êZ|¾Ñß¶ÊØ}Aƒ ±ý¢”a¯©üWr<_\ M‹Ûv±ü¡˜äS^\6ónäT“’O¹—ópÁŽÑ%dáê5¾rÏ)øº¥5XvÐGÞ¶ÞÈ{è¦ë”TÓ#mO0=Weí¡uF±|šã+5éð"[Eªò±G£µÇ=·ãuo8nÞvUkK"4 ¼ùN‚AÌŽ<Š. ¼ ùnëëŠîp²ùVõªŠþž„xZÝ‘“±ƒÓý‚„š¾Öã[Ø‘9˜É¨j­Îw{!kt#§-.8ኗ»ÅO]z¬byt‡E¸­Aµ8y"ñªí0ŸTÑ 6¼ 9É&¦b£è²ÀùTí\«+6Šnx²ù!¢>êÐn=ËUÞDLîŸ@6߉0Å‚~’k‡Èxü(EM‘w*]Ã÷RëyUʲ)ÈSí¯˜&µÀdN u1¦ÈCZ•º2BѸ‡L³…hôI¨lÈ,[n +n$’-)ÕFœ¢=Ǹ»³á[ªõ×çùjÛç—u×*ñ}›…÷ASÁ×lÈÝÿ[åZX÷!/³?ÌèŸ"ÙUt¸6¡ay?ÝŒP»(^uxž†~Ž@Ñá¦ÖФ%MÕ6H–aÒ)œ³À /$V8=¸ö¦N¹\ހ܆ùXŠî"P’M«>åu Š{ ˜œé@,5Ψ‚)ÚƒÀäªàûìESÏ<¨rùÊa¸ù’fpƒïêˆ)/ó8ļ¸ Yëdfcw‘ja1{¢È(ƒb$4[RÝkìDe8 YkÞVÍØ)º~àÈæ'(γ`˜çä üŒqí¸W-åj€˜oB¾Ùj =!ì@5@Ñ&W L|T 4 Ð}l%W.4bÙ”ä¶Ú4 jÚ´Ð"cíá…´î1ˆƒˆù`ýIÌžcÔ五`ÉÛN»G•ýa ñ$”ú£ë5}ˆ[ÜN>“JrD«œ3P9]ºª'füÌè̦½«ñæJ–›pÏ5üª6ZKâwÔuGèbBö}ä)W#7Q|„Rý›õ­Kμc²Œb¼ÕYEºåh¦H—MéÐÔæQ ›®)ÓÌ•~j©®+Ð$± ™/x• û@Ë—ái‰"_"ó¶ ¶aû;¶´W;ŽjZn£T W ›¯»>É9e¿P®:Uîd.XE¾I¨èo;Õ­m\.Í躢ÆK²Í꫚˜O‘Â䎽/Ñz*'Xó–ãò#e"Uáñ•'òK/ÃØ+[y´ ]ÇÈ}¸Ñ o¹åƒûÜú¹@ú¦Hæ÷ûF]昖=f®Ÿ¢ëJ‡—Z=@¸‹" …l>KsŠ[uÅñ¼ÂF¡Xð ¶zã@ŒÎ§ w`]rB–`+qˆêCE&’?7þ_¤ÅlT7«Îm[®êW"t xr’N ìRe;&ÚÃÀaÈZCê†|˜¥¦©Á§cXy[´%ÛÍת?lß ºBªE|Ï?‡l~jå ÌÑT¤³vÙ¨‚®­¸±²n? jprªú®”{ol‡ÞUMŒ´ôŸ`«ôÀ*‡+˵ܦ]L"ÃÑ#õ¶­ŠM-Txopšm;;´qW¹¦Yo´¿¦‘¢N°¦ù‚jšÂÖ–íùAÆùäº1ЊëÙZºÝÔ5£é@’ƒ®ÊÖ<)ß­š E$‚ð È_'è1ÍWn[ï t\;Üýf±M{ZŸú²Ký/ž1åQ!ëº;ªIyú„!›ûc[šc§õ=Êh»¸K]bßqC¯ï ^5(3Ò˵Ê9»Á{…jZ¤^W‚½âÏ_ÃÕ4Ô¡ôœbUx$à§Y ri¶Áo'“甂R žrá—ª­Ü-þ ) ü²ymz‡ïE¤¡½’AEú-öXù<=üÀtP$…rÝó‚Î Æe0&Œ¸¨<ÑÞ°WrmS$HÞÂúmì StÝÀ6ö†¡“ë w¥™F®Ÿžƒ¬uxOµèçjñKÕ šá&Z‰âðä[íQŒ1àä¹ö(ÆyàmÈ·ÍGþ8‰Á§ÀyÈz»N÷R®y»ìüÝ7³ª‡%©‰ìžƒœä öå èºç!k`WS©C Ÿc5TŽ+áéóZo‡z8UÞF²÷8é¬|^.AN~ò%¼Ë}Ãy¯áÚB89ÉŠ?FsV -„£µ*~5Í‘º_²×CÍ™â]_iþq³Z ”i©ôðËA_å]пL‹Žª*´“&|Ù|À·êUK¥`¬çñ¬\-m£¿ÚH–Ü·ÙVn›ðð?‚YcÆûj…2ïIª&G³r·sRI¸;¶c9\åN  I}ØÚR—ÖQÚ=M´‡–}ß™®Ánx ò¥Ö›'E7dYëÍ“¢ë^†¬u°­!ï?ɰ%LoÔ†=4n‚ç6îÏ­ŒŒÊ¾ª2Ï1àÍÜýb\­s^I²)Ù…µ:ËoHWkXÅÊ6Ý¥1™ž›Œ+é¸í9Dïðä6ìÅ£èŽÓ;±âŸfR{ñ"cíYÏÛ¾U(F­æÏA'ı»-ÂRô]âÑTSúëÈêû¢ù‘5AÖ¿Òèiva ñ´»Ô¤»…Í”‡ßwx8¦’ùí{¸b«"$®ä9‘úèz4¾ŒCÿþ†Þiø·¡°î¿oJµö†}÷sN¹ló3˜ÿ½^M¨VíJºu}ÜÿU³ ÏèЬôMãã›N±èìp×÷õÌ®ýKµàÚùf0AvÃ)æ'•ýAàw¿3NŽÖ…$l²Fd…“¦thGÞQ ›6²hæŠúEi©6j¢b¶¤bu=fÇà!daÄÆR]åÐÉ… ›®VSÌ…¸aÍ÷´ÎHØäa~ÿ´"cí^÷|×÷4|ñpòHbÇÖ|]/pò¨¹6¨Ú&EVBi¢:ª9› ‚<Ôzû8› <ùTû탞Ó6¹ßo›}ÈW½vÀ>$›è¤}Àah “µ#áÖ2Ué†QtCSt5UÍ@àÛ¥vùHo"š©l ý°„M“Cm3ù*áHŒBhg‡ ¤'úIÈ@mŠEUóèIBl½yôÀ$‡ k5[fæAÑŸ’OÛÍ£&ÑÛóè…Iˆ «Cæ!B`Âý+¾GYÕ>zaPÐvõ¯z¥§ƒý+´Z5ìTÿê(lâhgìCžºì }…ML¸ùðj§«÷oGa„ml>ŽB'±ô֩惢?%a§šioJ'ÌãLBx›ïyƒILxøASTo• äŒâXª­Ãc0 ÿêÔðƒ¢–P{øë^>! „Ëý0£  è»$Ä“Pz¶úêuÌ/t­å#ø|‰¬ Lr¶Pô«âQ§AoõÑ[b?Ó‘=õÅ Ð#‰3QÏ£õeŒâؘeÖsèÀ&RÜorn¿tb«´©Ð â1Ô¡± »?ÅÂ] %?g¹tŽßö&vü4+U¶&'•‰¾D)ŽA3&z²Ân0i¯›:¯¯À…0bËCÒFËc q Lf¿×è8[ÊK*ÄMð±§Ébù½'ÂQÈ£Æü>i*?Ò±pj‘-°M+ç;îDn·8©¡p¯A’Pr²jHx2‚pxÞÖ”ï×àH8 yÒ˜ïå(¾¡_Æ_‚ Xƒç7àFx²ùÞ_uƒù☌ÁœgËÛVy‹;e)ÆŸºŒ¥õGPùcí8Òú|/;á |Ï¿ ƒßl¹V¾`¯rºQ¬Úcê¥ý-’@˜\ee¿VTKÿvÂsŠ…|ð¿E=1ß!„+W: ºß#nɨ.g¯lù:Ú8/ùV¦¹j„ 23¦ùh¯nE£ZÔ4œ»÷M3áPV½ä}Bé,kÛKþGÄ-P¿ä‡Â_4äó&v&Ó}œgßX.÷Z>htjU´Ü ~¥;l<ÛW¯aB¾NAž2oØóR—7_°JN9í ôÔ ´âr¶Fƒi#ar û…|SŠS3Ù™iuŽàE˜ÜIÍx޳sà•K”ãÅ=òQƒdÄ/B¾¨;˜þ(ÚÞõ¼Söý †±eŠÎN%Ùª¨×)—„úCd3›ÈÉäÇê8[!AÔñ–ü²Å«¡Øyìg³3“µ“¤ðÃÃw¾Êy“¶Êyåôl! „«µæiÒótœ9UŸ“òì Õtvq7þÆÓp¢µñ†‚’“/lîò¯w yòß·¹—{ìØm#„â˜ÓSãõŽ£$”ùÀ°r¯1ŸK{÷w”Yþ f„— _2fù“+AÑŸI³z'l£håÞÝ0ÚÚ@Ÿw¶ ¾]ï–Í¥…¶²zÍùi!”&eÚ^m·@³.Úic>¥TØ-˜Lmy¼æ¹':¬ ÊÝv3§^j·ÝÐw9•ªE¿@^ñqðÜÙTNI¹I(ù÷1LÉà8 ª£M›ÎsUTïQ: C8yИاq“¨å§UÉLUÀ˜Pò…jÈþö~gæjöK§6û„ oC¾mL>Í¢‡‘[®½{wº^eÍd4**4 ¥ëm )g+qc_QíŠl8kd´¦„YÈYcÖŸÄdt¥P–)ëöA’0¹ùÛë¬5³·U0$¾è¯w õz‡¸&Óé}4N3ƒ.¡ýÞw­°QðX0¹N×çV­bqNøè°&¿óÂÞ²ËùХݎ½—?•ؤì€>ars6#ã4‘ã½Ûî²÷ Ž:½÷ D8YË!Oc»¬P Pâìd¬‚^¯}ýXÇÒvÁž0¹vùÁþª†¤ñ7 Nøòƒßmuñ ?t¸ºø÷·Àdª‹/Æ¥\c;–[æNtˬTð¸ëŸÐKW8pÞ öy×á>lé’êðrqºáÚ³c=½Ä¦èW¤‚09ߪKãܱRÙñ…ÛÔúèÞ¯ºåБ§³¹I}æ€6ïE—­Œ[‚J+§ãOàN¸yÉ8Ã~è,õL¹?òÒYëœÓ€naÓ.zö„[-6'nÎN²ûl:3›fÏ—t×þÿü “s;ÕеžÝs%AóŸÁ“0¹Yæ» œeõQçÿïƒ3á]ÈwÛ3YBtÿA¢•ŠzåFñwIˆ'±,À=qQÞ{^ Ùÿ¬=Y·[éŸ!Õµs +ê’ke:ÿa*Üž+°ÉóDB.ÜŽbÅ8~u¿ž w‹CNLab¸ýó0o9žœ¤+á˜m©ÿzI˜\v2¼×û'È‹UwW˜¦ùoß¶ò{LíU8£À%Èæ âQÆh£DÕSvEü/eÿ"Õp$"ae6¸¯å_@/CÖÚ¨£¦ÍÝIàä±Ök3Ew 8yÜX=ÆI›ÃÜŸA€kç«Ár¢T(æc[潊å pòŠ1ÑÖp7*© &€$‡ãäÑ)9ìpvZ;Vÿûá¦8)ìL ‘ÃqvdT;†•Ãpðå\Ä{çå°“õôŠø.DpŽzèÝ‹ò»ÈÿKyÃbòár¿æß‹Éÿñ¦xEø9š«ùr-"ÿ¯7ñ¿9!‡ÔÃ'åpÔûŸÄèÒ^yx#¢|Ó{䋸»©ˆ4dšò™Â²¿EáÓ1y8óþlŒ^Ðw7#ôìÖ>ôˆÞ›ÛÃþnËßuÇÿƧMzBawšÊÂîÆèÓ|„ÞÜ‹HÓýYˆx÷A„m,Êa'°‡Maâ7—äptg>“ÃN×ß]nÒq9oÅ|'¾c›+ºôD¬¿ûy„¯FèçÓ}ؽ÷EŒ>‹àôe ÿçネ{öÕoØŸÌuM~·¿þjŸu½û:¢Îü:B§¿‘Ãzëÿ9=€?Æäá·ºú]Œ^/‡c\ºÞÔΉwˆÐ×c~÷Í>ۘȇ~çBcþýü^—ø½Ñ˜бõ²½“sJ%«ŒN‰ÕüÊ£õWöûŠû½k{Õ¢ï-¸ù´ç[[ö÷ úÃßqŠÞüüüZþMÅʽ ¾y#]l;16>36ùkD‡çRH£´ILtxäî …:Ÿ]úÿÀ?ÖÂk½(mç³ËÙg… ×rw³+®U²w÷­—]ËlŠÙ5ÛsªnÎö²Þv0üήå³%+ç:ÁçÝ`ð]ʈ^àïÕg­x3—}ò‘5è}÷æåÚÄøL¤¶ CC¥Ký„¶üßöÝ%«nò %sn};ˆïöïWæ³Ù嵥癵©ŠëülçüŒãnea$ ã3¿~X¯¼ÝúQ)Æ<GÉ“´^ŠéM[Náˆ~ Ï®‡kŠŽ¾áTýúõ×,*£ N8 yÚ´àè/6*°êõ›_ð‹v|ÍvÉ$”»$£«QY±•PVUîU£y?öó%õȦ#2š 8Ç‚îÀ¶íüŒe{Ø™f™LF}wd/Xñß…|.A«­zÁ@(F=).±aO»­V¸nˆGÓjGLéКCŸ„x4éPb¢*ünØ­"¹>X"a?ä~rœT_©«ä²ÅÙŒðÐ…s™|¨¦Aùðä[F gT~´ÄÖW%bKÀeÈˉ™]ì–4ŠîðäG F³%¢›>†üX«ò–9±GÛ÷Ê÷à*äÕÄâP o™õKω:¶Z#$Cæ»S ^ÿZ¥˜ã8Yk ÕïC¶ºÉ¼Š+lèúÄ áÖ(†!àUÈWëj~Ün«6Ø„iàd­>‘z]>€üÀ¸Àް‰=üeìUF‹ÀGµj±.Oòö¦U-ú“iòÒ”sJ…r C;;<ˆ~-š%ºpž‚}§ÂŠö;»øÎ?âsÚO(]5o˜˜‹4q–áž œrq—•í )´½Z©•›Ñð"¼Ykhi¿Ñ‰µ„˜(á È7Zo Ý%`rÚ¸ÀβWºåÕ£ÓÄ–P4U…"^SÀÈ+ÆüNêÏíü–‘ÞsS¤vºCx²Öµ_O Û¬–ù ª–9 E œ„<ÙzË‘¢pøÔ.“ èoHˆ§Ý4Î"¶Æ2óµEjç`Š„âš©cÚfy¤yZ9è¢j:<ù„v^}”G|],N›ã†éÄå P’[=L§¨NÏC>o¬½i>aÅêSE®] Æ^³Cš5RUtbzø9äÏXÜïõKS×(y#õäÄ4êÎ (QŽBm½BÇ‹„g!Ÿ5.žËÌ+ƒ6ª¸£JªmÖyIçïA¾×ú6K¬S´‡CÚÕXPô âi7 È­i³ŽI Ò,n7ÐhÙ'åçÓ¢³E£¹ {µíT‹ùÐ))± ;t5˜·ó.½EÕ\&ò§€O!ëõ&£r·ëù’jÍt 9I(]9ßêšé4Œ°r¯±ÒßNËsaiQjMT[å]ùz˵ùlµÏ¨–!q> \„¼Øá CÑuëÔŠ‘¡èÅ”µÞæùÛÓ¬l¿³ÝZñ¥uVE‰R?ð2äËí• à ÈmXý¡èÆ€iÈæ«?'™Uܱv½Z)©¶úDg ¸9ÉUá˜V_,R´ ›¯ +7·ý¢„xÚMã2r@`‹Z}i"ARÖîTÝ•Y«ßc>^%"§€bRoe.¹ÚŸ¸\^†¬UשU,Ý $ê𕸥­z뻫u¯B®@6_`~êZ|¾Ñßæ÷ÄÐî ‰í¥ {MÈà¿’ãùò-ZÛv±ü¡˜äS^‡©Fܾ¢›~#N¸`Ç6œ |õ‚_¹ç|ôx™ÖüaÙAyÛzW 7ÑäX5=W†+‰¦çª¬=´Î(–Os|¥&ÍìÌVFÕþåÃFk{nÇë¯ÁQ­-‰Ð,ðä; V1;ò(º4ð.ä»­¯(ºkÀyÈæ[Õ¨vd(ú{âiuGfLRÄN_Pô vhúBZoaGæ`&£ª´:ß ì…¬5Òœ¶¸à„+^î?x鱊åyvž…ëÐTû€'¯ÚóI jsÀ»“¬ab*6Š. œOÕN÷·ºb£è&÷ kÕ(§©?B»õ,Wys1¹|Ù|' úI®m3—®¬¢£5Eúi/±žW¥,{Ó˜‚<ÕþŠiQ LæÔPcŠ<¤UYùPµ¦q™f Ñè“PÿØY¶Ü@VÜH$[Rª8E{(NqwgöTë¯Ï‡>½ƒáS¹ñ&HK¾_:ÍèæKÕB$Ö=ÀEÈ‹Æì3ú§HEv$¯MhXÞOWàÔ.³Vž§¡ß„#Gt¸©µ"i GSµ †¥CG˜t ç,ðä ‰N¸Z\§\®o@nÃ|,Ew(ɦUŸò:Å=Ì@Ît  –çNTÁíA`rUð}ö¢©gT¹|å0Ü|I³@¸ƒ„wuÄ”—ÎybÞ\†¬u2³±»Hµ°˜=Qd”A1š­ ©î Ž5v¢2†¬5o«fì]?ð dóçY0Ìsr~ƸvÜ‹«–r5@ÌF€7!ßì@5…žv  h“«&>ªè>¶’+±ìJrÛ m5mZh‘±öðªÝôÑâ b>X³ç5þQ´’«v*)úÃâI(õG×kú÷1${&•äˆV9 f r»tUOÌø™Ñ™M…{Wâ1Ì•‘GGªìn¢œD •ä¤o]òÝ“7ã­ÎjÌ-h‰@c‰œ#>Z{+ò£IÍ£À!Èz>Õ”ü1íEgXB<í.µÛPÚÊÃkŽéSîÇÕ[lß’( ÇOƒ©|ðñ†‚þý5 3tŸù·¡°î¿oJ·¶û̾û9§\¶ùJôƒðß«Lµ¾·¤-Q§Ôþz ¼ÊªeZšõ­r>Ü °é‹Îw°P_&Ÿpí_ª×Î7ï:,”Ù†SÌO*Ohã´ÇuÈëÆÉÑr…y@Â&{T AerÅ”õûŽJØt/¥f®¨÷„e¿‹=aÅlI©öK! #†/ºÊ¡“ =6¹ðSÌ…¸%Äï5h‘°ÉÁþiEÆÚ½îù®#¼|ñpòHbÇÖ|]/pò¨¹6è8=+!ž¶Û¦ìo³¶IÑvÐ6eo§-´Í] Zg$l›mR„À6Ú&E× ì mRôg%ì”mŠžMS×¢]¶)º„´Mzöp}«a› ©·Š•mKuTs6A8Y«û¬fG`„§ Ÿj¿}ÐsZÂ&'m³Ù¡pìC²‰NÚŽ¥Õ0Yû8BËûUWÕ@ºaÝÐÔ]MU3ì ¬¹¸éMD3• „¢–°iz¨m";¬î€ôÀ(„vvÈ@z¢Ÿ„ äÍ=«šGL‚pò`ëÍ£& ¸l>ë£lý) ñ´Ý Äc¨CÆÙ¶m:,C«òRvšï.Ý)¯ÁÝ y¸©¹Vßq$oÁ^ìrdlR¤Û¸Oû©$|Ú?gNÙf9‡_C.°æÇÍÊ–²­Ü6CúØ„ðžèM¦?œ¼ÇÚØ´ÜÂÇͯûX Ò‚â¶p³Ö¼q³11áK“ƖʬWN‡t”_Ðr DÃtŒìÝ‚µQ´” K…Èw¶lJ¡2Ñ#ƒ<Öºº4–ÇÄ-0™­I÷ yÝŸb›VÎw܉ÜÄØLff,ÍÆfC˜É̆ŸfÃO7ÃO7Ç&Õ¯ÃZëÅF5n{N>DÜ“ÉÉa˜M™TYexe5¡LN²…ýé÷±ÀFÙBð¿x—±”> Âä|'M²°¢ Xå&n¦ÙÍÌLí³\š£ÿÏ©ëÙ28NBž4æÛ¥NDjk 7Š›)¼ÔN$¨ð£µöÌTçWÀ‰pò¨1¿sÐy×®LÞ‡ Ø»5©nÒå1f7ù50\aì=Wÿ@ß½Ÿ!åŸÍ„¦ƒÿ273üYú8‡ôŠrb>G>oÌzÃÄ̱€Í\#CÎú&}üù+Ó™Ûü ‚X_BÑ™Ÿ3æ¾ÌØ./ˆ©_X‘ª¹z /^Ÿ¢àæÔS"ËäË0%·X¨,u~³µ*u6sgÖ׺³êõÚ K(vJßêDû ‘v²‚ýq L¦‚ýtœ-W]7t`»c×î™*Yå*•lwË6ïá>cBiæÀý µ4\ Ö3Ř!]s#ˆ» AŸ³×éO¾WBqÄc¦¥ÿq L¦ô¿š¨PÎ…[”'Df¦i“îÄû…÷Ápyawr’ÝhDOз´¶€Ãò[®S­,ò“ùûÒòU£Üöü]CÜ“ÉßEš‰(=϶K÷*À,F¾·‚ûŽã¾ ”³Ê¯ Æ·þu/è>x»ÜAžÅ)§â˜J#!ÃTÌŠû¦mùU—<È–CÀõ©æíz¾] ½ˆ©Ïž¼YÂYȳPƒ¯·À„†mžïÚVÉ´ û &7l»‚bµäUKnµ\Øœ˜ º$%‹‚§33“]¨?€¡äÎÎtæ]¨&ªSe¢9Âäf^4ºß"rÂNv3¾CÜ“±€;шÐâðî™Í"Í G c[®½{sz,ÍàÃBc\þ=(Š x-Ÿ†Ù¸Ž¸&“Ÿ³¥r7MÖ»8â$MÑ)oüjÞæ3¿EËçÒ²÷(å„üò„Ò$y“ÂÛŽ7%«Bí]ÅuòÕœÍò…ÍM›z£äŽœB—Y¼Ø3ž±ÄYB£&%2ÚÞuø«ˆ:|ѽI´ð•W{(ú. ñhЈºÝF™ÎO©põV`ÓÙ$E:b–Ö{îªåo+Ò³RábáéTíª¹„ô%Ö©E× NÕ6&m̪¾µ$”®N3Tѳܓ Õ4eq> oªÊB¼F€3w1EÈú–¼—Îã:ë66”/–#bÇâr¹$½iÅh-E×…¬5›ª¦µ]ð,䳯Zq-ÔÚÚº£UÎm;.Ü’íìû)ë½úu•Äñð!䇉em@°­¢çÄT´¤¨9c¥m°Õ È¡€ê7?F4òÈÚ¹ùVôÞñÏF|)8éæ- ÖOaâ}3þ|‡B= ÷OJ¿q ¯1=ƒòwÇëáCr8v{’Ãà^å´v¬þ÷ÃMqRØ™>"‡cKר2gå0ìÅ;ñÞy9ìd=½"¾ œ£z÷¢ü.òÿRDÞ°˜|¸Üįù÷Çbò¼)^~EG{}5"_®Eäÿõ&Þâ7'äðzø¤>†}£K{åáˆòMï‘/âï¦"ÒiÊg ËFü…OÇäáLÌû³1zAß݌г[ûÐ#zonû»-×ÿŸ6é …Ýi*7 »£Oózs/"M÷ctd!âݶ±(‡Ã6…‰ß\’ÃǰÏä°Óõw—›t\ΛG1߉ïÇØæJ„.=‘Ãëï~¡Ã«úùtöAï}£ƒÏ"8}ÃÿyÄ»/"Â^F„}õö's]“ßí¯‡¿Úg]@ホ¨3¿ŽÐéoä°ÞúßÿAGà1yøm„®~£×ßËáv­7µsâÝ"ôõǘß}³Ï6&ò¡ß¹Ð˜?¿×%~o4¦tl½lïäœRÉ× ZͯíùÖ–½À×üðÁwœ¢7??¿–†Ð¹·Á7o$gVcã3c“¿Ftx.…Ô8nBÞ¬wxäî …úüYúÿÀ?ÖÂÍ}þ,gŸ6\ËÝÍ®ÐÌ<-ÌxÙµpšž>d×lÏ©º9ÛËzÛ–kg×òÙ’•sà3_öȈ^àïÕUx3—}ò‘5è}÷æåÚÄøL¤¶H‹Q—uü?÷Ý%«nò %sn};ˆïöïWæ³Ù嵥癵)ÌJfw+ #YŸùõÃzåíÖ‡@ˆJ±äpIÞP —bzÓ–S8¢ŸÂ³ë…M»èÙŠŽ¾áTýúõ×,*£ N8 yÚ´àè/6*°êõ›_ð‹v|Í&ߟ,­$£«QY±•PVBiÒ+ᚪ©sÚî‡RPlNÁNVÐ+gåmMµ>\‰~ž÷3ÿ’ÿ‚¨¹Ç̳MÓ‘é«ì‰ ?²±Ë\çýî–]žgy‡•ŸÙyºp—m[±w|w/¿øòËÇÏ㼊Gª|[Ö¯þ»:ÿgnÞ¯þܨ\~©Ze?èçþî;×fóÓT¤SâEüÿÚ·Ù6î6¾Ê^m˳CÌ;9îÁš_õH[ÖxOÕòØMAä|] RW×.¤ƒ0b¿±fZ´œr>’Èëo´3ŽÚ7×>‹ &¼â ;ù4õþ©EÆzx½ Yc¢=^SOµ¿`(úÓ6¹‘êdÁȾ:%O% Ì‘u«X°¢öŠBiBvÐΣ’¡è‡%Ä“TÉPÍ¢[2²§Æv–Œì'³ƒ%s¥!0Ù’É,åóL gµ=~g1³ê¡®½tU½ åÈ(r?‚â"œƒ<—`Ññ±{L¼€·!ßnÑÑó©„x4‹î¨ñ¦Äßð§™-ªÝ‰’U©Ð¹ûöüëgÏÒ {=ÃTÐÅqâí1õ­Å²‡³'b‘Õ¶S¿B>è,üݱ4· »L‡üÆ6ª¾ŸÑuªå¼F*zÁœÇ yÑ8+Œ“+|—öÏΤYÙʸ¥@\Yzöêqš®*ßÉí­0AÏ—ÒâÊòŒþ{½öõcõÄÈ.ƒV ¯'¦›±L&£¾Xøi9–jðÙ*ãå!c–Çq¦ÖÖДîmmd˜†Ö†éŽÉYÛj¬µ ª?*9™«çütn’ßWªkITNÏq¤pòªqz>g¬dûÛ¯%Ü_‚t„3–»E))<bò·­Q99H¡täÖ09tªùãjAÏO€aÄ©fã.@Õ³¶âü‚R\'µ>å.Eß%!Í.À”)ÁTX lºhX‘%&ªSÙZI‘œ4æõMwˆêäø/ô5‘ºúÊæÇîê×þ‚¥Ç‚¿ów”OoA¾¥Ÿb:é-qÌ@‰Øp²ÖLLÌÁõÁA?.mC5éÂZq»°èÒ[~èvÁ©°¢ýÎ.R㥑iêJv1c˜˜‹´˜’aßÒeÍåš=‡yÕJ¥¨ÜŒƒáEÈ3ŠßèŽÄZÂ0L”ðä­·Šî0 9m\`gqj”NŠzåë>³„¢©*ñš®@6íŸÔŸÛÅá§[IÁ©I'Ù̦lcJ,Ægñ­¤Êíkœ‰~ÚMCºQÕpäµ×ãÍt(2M…ýBá_ú¨³˜50ZX’<ˆ6vÒµí½†ª¾þ¾j&Sú«Íç1® #Œi{´Œò,t€PÚ£Òj£•¢½ùZû­¢¿.!žvÓ¦^Zh”=bVO‘Ýy#áqÈÇ3Ìù—b®ÑÊÿ\õ|Ú‘fv!¼‹Þ ZBÏwƒ†0°Ò°é 7f:¯šËÄÿ$ð)ä§Æ…=i1òTÌýÕçMëia›Õ2÷’ j™ „“'[o™ç¥h?üIûM‚¢¿!!žvÓú»-´Ìn,c)’»c$4Ÿ’k&uåY@ŠÑì·çïm6ÁWÓ¸O¬À@½_ª–kOj0>¼ ùfëuúJŽðd½‰@#e¢èç$ÄÓn 9 °E­XˆUdwŠLhÞÚ4³ºÊ•š¯7j5_• ”›úSªZMTOç '·‘"V«/£ìoC¾Ý~u¢è?•P…1ä€ÀÖhuom_‘Þ8T™p U»/!µžàjî,(dåji#èAmñÕê9Ye6£ªÙÄvxòÝÖkö8Ê0â`@»TŠ¢¿'!žvÓ¸‚ØÍ>Ì—¿©]…&ŠÇ´µúHóÊZ0J× txò í¼ú(øÖ€8mŽ›©$.g€ç '·È;SIÑJCCíMó9{VŸ-wí’óÎö‚ÊÇã7ºàš8WUtbzø9dóýÛ±ÜrÀ-غFI³ò†Ž„4êÎ"QŽBm½B]Ë„g!Ÿ5.žËÌ+C×Ѫ¤:n¾3#¼Y«ÖVk³ÄäEqlº]E¿ !žvӏިš6똴GK‘ í­|‹1ŽÛ‹Î]`•a¯¶j1:d.Z»AOlƒ¼æŠÕ¼]5]6žoQ5—‰ü)àSÈz3ZQ¹Ûõ|IµfšDNJ{™[]3IÓc¡º†h¨ô·Óòr@Z”šGkuVy·¾W)tñJ vv>Öj\ç£ÀEÈ‹î±|‚¢#4êÖ©£4ÝuÍîÚ%+ƒz·V|i!D©xòåÎöˆÊðä6,€StcÀ4dóð“Ì*îX»^­”T[}¢3\€œäƘ˜V_¸ h@~Ðþæ–¢_”O»iÜ@lQ«/m£R$H Û 4oõ{ÌÇ«b/á0äá×þÄåð2d­ºN­b¡èΤê•Ê™Tƒ³M¾·º_o½•ÝÃqà äc¦O] pZel@£AØVʰ×Ô‰ þ+9žOîâ7«E¾!gÛ.Vè,4*;©J—R™¦'HˆÏÂ= là RÁ7TPã+÷œh}‰÷‘iÛ,;è#o[ï NÕåÇUÓ“A2‰¦çª¬=´ÕBì Éñsûáå*ªöŸ=B£í{îHîÞpܼíªÖ–Djxò+‚˜MÉY˜á]ÈIN:ÇÔ?ݵTÝ͵T"“ΪŠþž„Ú“Îjá¿„¢íàôE¿ a‡¦/¦‘[Ó‘9˜É¨jÇL*ì´öBÖéFN[\o’²Ü-îÄcËóàjÝaTû€'¯ÚóI jsÀ»“¬ab*¶(6á|ªVÓ´ºb£è&÷ ›/cõQ„6,[®òþHbrø²ù®÷)ô“\Û¦ÛãÃÛ×ëŠ,]²Ãˆuì%hq”gCÝã(õ—Ú]1ÝDÔõ+&ùÛ.ÆyH»h¢.ÄR4î!Ól!}Ƛ4Ë–9dÅ\"Ù’RmÄ)Úƒ@áÇÈüpý¶Të¯Ïóc$¶O×ÈÔÏjò½›…÷AS['é2EÕB”|𠌞T“‡ýS¤reG(yšIhXÞOWª¹ü4ºSžß†~Ž@Ñá¦ÖŠÜ–pò¨qéÐ)NÂ9 ¼ùBb…Óƒëínê”Ëà Èm˜¥è.ÓÍçc»”×1(þ)`r¦U°tq'ª`Šö 0¹*ø>{ÑÔ3ª\¾rH½_îxƒáÊ;ÞÕS^:G‰yp²¹›À>ª…Åì‰"#éªHÃu¡ÈÅòÙ¢jìDe8 YkÞVÍØ)º~àÈæ‡Èγ`˜çä ÜÍBíÄ+W-åj€˜oBÖÚámX Ü…žv  h“«&>ªèTj¤ÌÊ…F,{€YÈÙš´×Ó¬Ð"cíá…´î1ˆƒˆù`ýIÌžcÔdFJð!ȇÚ?ª¤èKˆ§Ý4î!¶fÖí(9Þ Ý)ò£iŠnà È'tøq^‡›xe¿öèLgCÛ]k1sN¹^¶Ë6lǶc¯Ÿß‹üp)UóA“Ôf?Þ]c[ÓdæBª5~wcZÓè¡ä’ÄxÀ©±¿„(œŽBÖ]i{xݳtXªîo„¥4Gê¥s6UßÍq6•ÈŒ›êŒ;EŸ‘O«[±#C°6Óî*™¢Ÿ–O»i<@lÑážšCEz‹©°Î"H%}¸çfPùçù±b«(¹`t6Ù.µ9«˜«ÒA¼ÞɼJÐs×HÀ ðä$=ƒÅ(ù"Š’ð1dsÏ`ÊÚEѯHˆ§Ý4"¶FÉ»á¤S‘ÜÔš°?•ôYãÂs¨kšLÛ^vÙ;Ë-X¤é’¿¯Ô ~89ÉE·Õ^BJýÚvëE_B<í¦ñr@`kTûHè×U‘Û2´™°²Öìçt°yæî«µ w´^W=;ÃØrÕuÃ#0Ü]¹ér\_y¥`ø²Ùq€Ècî/м¨E9œäŠE}¹ý_ÿ7ͳù¼½ ²^ƒr?ðTªæ›QòG¿Ü MÕ\µº7ýVG(ùüiwoš¢?'!žVׯËRê¥;Û] Rô$ÄÓnRW«…µñ1É˶"ÁØ¡ù6íCÍëÙÏ ^èl8_ëVï1£Z ªXÔpÅGìO¿€ü…qiŸÛ|™p¦îYò4i8ñ¡Þ ÇN3™s@™µ¾b¤è„÷Í˵v»›UŒý˜„xZ]1®Hš y]hwDÑ_‘OB©?º^3‘lá¡?™-UÊY@ÑwIˆG¿R6£³šª_Ãp¼þæÊ?Â@ñ6lêûæCo9'è"—«N•ÎXEg«jóú™ß‘ñfÃyÏ=ª&AÚú/Oõ&¤T}ëÒÝë1H1~ÑYµúª$ÐX­¢×Tê;ÄùÑ}ÛGCµ¦þ»¢šzåì"Ãâiw©} …¨­<ÅJSò‹6ÄIÜã±hCeÁÿý5 3¼ýôoÿBaÝß”píÛOûî×—Ô„ïü^o0UëÏHêÕ·ûëið*«–é‘o•óá9ºM§Xtv¸+ôúi® ×þ¥Zpí|óáøBPã;Åü¤ò¾k¢/œEÿùãäh]Zz@Â&ƒT A¦rÅ”mO8*!Ã\Qß°!íYˆÚ°¡˜-)ÕÞë!daÄ.]åÐÉ… ›nîSÌ…¸y·ï5h‘°ÉãøþiEÆÚ½îù®#üöñpòHbÇÖ|]/pò¨¹6¨Ú&EVB-!ž¶Û‡t3l'ìC²‰NÚÇoÜmhGèZÕU5ìmª]7 «©j‚ƒîOC6×Le¡è‡%lšj›È÷lwÀ@z`B;;d =ÑOBÂ=ØÓYrUéYô@At•DÍDz`„g kõ)ÍL„¢‘OÛM¤fÑÛé…YˆJ«C&"B`²&rÈ«§Ù¿yôÂ$!¶Þz«‰9²§¾xá"a£gøûÑú²?FqlÌ2ëôF`“µ«Ì^"M[³ÓppÙ)Uª>÷>£wHà«TXßžƒ¬µ-5rár¶‹âiwé­¡Äš•žq®¼J…u¢@<†¹¢Þsz¬xŠì9%¤Ô=¿±/c/v½ÀOh«r3«ÁŠögå t5çFUãNÑ×ø}ÂO ¢[™ï¿×IÑÞ€Ü[%)ú´„xJ}/v¦mDõq^Aa¿N™Ú´Q| ͨÝ>)7Ú_!Ñßt6¾A¢ê7ÐX¥ØØ1ÇRa…*0™Êu®ÄîO±pkÔD©²•¦}AüŒjšÍ°,ÛÞÙœd7ž§Pö'&•¹ÿÅH(yà3ä~ª$x‰:OƒÚ· Ch¶Ó^þvücjõsÁ l:3§Îô;°#Ln'øØ/3Ó¤žýËÄtfz.»üc—óœÖ ú=ÈŽAku–ÉPgºvë‰f©ºmÿ€¸&SåM³oáUÕ*zü(#sñøqÝ͂ϼ’CNßk¹¨LûGP%œ†<ÝŠ‚ÆqLòÇðS/è7`÷&Ñ‚~<Ξ;>ù±ü0góŽí‘›üJ!÷–.Fç9L[0sN™¶fú̪úNÉòéî©ânšyŽrZ~ÂäÎä_'¿t׋EV¶m~òÕß±­·¬h•6ò}çzv1öJ÷X¶Jw޲ùMI æT‹Í¨k̸Î@žé@ÕCÜ“©Ø8{eËWl„uBÍ?¬2Í<¨2È̘æÝ‹9\®Y ÎÚM¢Û¸ÚàLxòÝ;üðýu¼éˆn3ÑVîïÒuI¨ßß5¢±…¨‘oEÏŸŠÛˆ/¥'½Ñ¡dέoñ}ØöýÊ|6»¼¶ô<³6UqŸíœŸqÜ­,Œda|æ×ë•·[!*ÅXXã(ö<ÓM1½iË)ÑOáÙõ¦]ôìäNò}§êøÓ¯¿~`QÉuÂiÈÓ¦G±™P=P¯ßü‚_´ãk6Éw”cH¡´Ž¡_GýœPZ¯çÂüºç ±*ä œ×ÂTûODš²H¡tÕ€^Ù½M(=ËêeW² e?xì=ÊOºLVž=M¸¦jꜶû¡›Sð¹F'+èÀ•³ 3ÁµN\‰~Ÿw4ÿ’ÿ‚¸¹g•sMó‘é«ì‰” ¿Iec—¹ÎûÝ-»<;Ïò+;>³ót»ñ.Û®)ÄLJw—_|ùåãçqÎ0Ä#Õ¾-ëXÿÝ?ÿ³7ïX¯Œ[ØØpÊ¿û¾µÙô4蔄xDÿ÷mµ 42WÙË¢myv¨~y'Ç¡ñk«É3ËÏá)ä°«®—] L˜œ1¦­å¤%+! ‘þ,%5Œ#öÍãµÏ"ˆ‰³¤„'Sù³Ü?±ÈX¯—ƒ¡iL´€ƒÛ_,ý„x*–^^,Á8ÜR,ÙkË È'+”#ëV±`E-ÈÉ>sNBÖRs7%ƒj+GÂÆ"{섬EL±\d)Ò½ÝåBÑŸ’°é|˜a¹œYãEâñ»"Èh5„^F‘ä” áEÈ,#> ‰÷@ê£YÆv—=LB<šeÔc¼‹ã7hfË}Ɇ'JV¥B;Øó¯Ÿ=K³¼å[µt½í™(äƒnEÁßK+'A>Ð1 ¨™„yÆ*ŽÇ<7òce+ã–‚°•¥g¯)Øvv2E;è«ÓŸçKê èimê£Á¥fα ƒ¶m»?cñˆ¯×¾èf2õM(ò‰ÏsϵÎxbyˆãu1Çìt‹ºÖh¹®Jw&XÔŸ6êjÀ3÷¶ŠŠ9 ŽÒe¹¿#E=VÇM5¦u©zÖVœŠk QÅTn](ú. ñh¶.#¦tN@ÓâѤC‰‰ê˜tÃhÉI£©¨k‰öOŽ“êk"u•v1’#êÚM÷`é±à¯Å$åÀ[ouð¢òó ¥|’-—!/'8J­_ÓòQ´÷€ ?J0Ú˜ÓîÝð1äÇZÅзÌqU Œ¬ÿÿÔýÙ{I¶'ˆÁ ‚Iàj¸d pK$ˆA‚ &·™Y•™¨b9"€'#£Ü#¢ØYu»gï;½ÍôôÌtÏz§gæö,ÚFËhFúô «I’$=Húê+éAWßýfäÇügAw$ÌÌÃ#/¿ôüXxÄ9fvŽÙ±íØ2èåÄb_ o%‚U áýþL’CäX vÝÀvL—ÄhÄPXjõÑp2Ó%Gslyù;ï¬;YýrPæ(ðèK‰ ‡>í·U;l, œ=—N…]>ýÀ¸Â°ñ ±W5b’a>S¿9‘ÓZ­X“,OpÿïD–ѽ nißøR¿£]\,<ÞÀµ¥äª[aEû½]¤ÎK#3òé®ÃÌœã·8ðCCüš3q„®;+*w£Òi:>±'£9i?âŽÄZÂ1˜(á5Ð×Úo Äî<0 :k\a§˜ÃÕ‡â·ósG–P4U…"¹&3ë&3M7ljÊw\Ü€´îz\﹂)Š&‚Ëo¦«±˜“èƒ[iTÚc bB–8Äi‰!•€áÈk§1Æ>šP”Œ ¤(bUõéH–‰º–gn!œœà› ›…lý"x¿©©o¼¯ZÈ”…~à2h=?Sþô’0˜¾GË(OB¥ í6ÊÛË /§o ÄþŠ„xÒc% °MFIrŠ’‚!žj‹QÞ{h-Iåøü -«zVÙ§ŠÃóðÚV~C Ù%·GÞ9Ê7¶ž‚>mîh-ZÛ¶— ïÖ¢-å U”¦ÝÌÃÔ ð”Ä6"\BZšOìKØ;-1äݦí3À1ë¬(ÝYáaЇ3ÂÙWb.Ü*|_ó«´a%Ël‡ÜQY±ƒn2ôýÂýsA§£ZÊ$ÿ ð)è§Æ•=a1:ƒO…Õ˜×oä…‰k¢]VŸ”_‹Óæ¸a:Ér"Ó¸göD&ɦØa:±ž}ÆX{³|Š5¦Š<»Œ|Vr|Ÿf…xÌŸÏ©*:Izøè/Œ%°Ø–å•É/aL]£.„zÀqô@bµOg”DŽ€i¿B]À‹„§@Ÿ2®ž ÌwŠAUÜŽQ%Õ>ëÌŒðè{íﳘ¤'Éí)Qî,ˆýœ„xÒc% °=}ÖAiƒ‚¢€9©h´ì#®#mÞ^Qt7h4—c¯7ÝZ±ÀÇkŒ”è2b§œ/Ö vöCSkæÀŸW-eþð)h=o2ªt»^,¨¶LQ’„Ò±v·L¡a„½ {•þvVž ËŠZói¢Ú*o·Þ:J³ÕvAùâh’¹8z¾ÃË%T¡‘[§Vò1"iÛ“a5geû}`w¢ú²:«¢$R?ðè õH”ñL}Õ‡Ó)¬þ»Q`´ùêÏ ³Š[Ö¶_¯%Õ^ŸÄ™ÎNrU8¦×øˆíÐæ«ÂÊÝ-±Ÿ—OÚbHÓØíìõ¥=ŠÒäv7м×oÝK­1^%AއAë­Ì%×ú“,g@kµuj ±;=j¬Ãã–¶½wì®Ö*m ¸Ú|ù©gñùÆê¦UÆî ‰í¥{CNdð_Éõ«´*°^+òÅ€M»X ¾(&ù”äcæOA›OJ>å¡DÃ;¶FÑYùê? "yNÁŸ>÷‘iÍ–øÈ›Ö{‡‚#®{nI5?ÒLe‚ù¹$k­3ŠåÓ<_©É2;·‘SµivÓlíqÇíxÝk®W°=ÕÖ’„º¼úN‚ AÌŽn˜¥Õ³5›ÐÂ8*›î£'ï–ê'õÀ¼'€_€6?ö³¼µéíÀ·õZ |o{Rƒú!ÇØâ¦ëò“&ô ß"C;ò·6ÀC.8ëëA×P®ªfgEO¸ ZÏÍ’?}Ê˹Ìýa ë È gS|èÑ¥Ìü 6ßA|Áæûiƒg20rª:Õü|Ž<&·›ê–oón—ÑÍ/ïB-p–*V5pmË”šÄ¤Ã@¬VÓùwÊ=ßÄ%”æ›O(ØUË)FjÅÑ&v¨×#ö]šõzôí¨æ¹¯±>¨(Í/÷‚Ö־ϴ¸HŒa ñ¤]k 0µ•‡_²¿ £’H0ØGÍç²èßÃ4ûA~ÿJëþ³–lkß rè~à•m¾YöAøÎOõ†5@R–¨ ‚ÿÍž”ÕÊ´{4è^ ¡K¹î‹îרÉ;îÙ¿©9ž]h=t©kn±0¡¼ç†Äñ@¾ýqv´núØ#a‹9*ˆA˜0‡¦¦û$l:h–Šúd½4_5Y¯X,™X]™:߇" ŒXaÑURè‘°%¾b)Ä €ö|Ðë„„-¡Öv/V$×îU¿ê¹"`á'Œ€'AŸLŒqlËGìz# GÒo*ˆý) ñ¤n›òõ"°Mb»ØAÛ”/wiŸmîÛ.YªæIž­¥'ªæI €§AŸNŒq¬y»^àÐgÌBÕ<‰ýY ñ¤nžÂ¹iñ.Ò2OáEvÐ<éé‘°mæéÄov’ì0Uó¤g˜¢yÒÓ ì yÒsVÂN™§ÙvÀ<%“ì¤yþÈ=OæÙ”{«XÙT^*ÆÒ0Ç£ ¶ß>pÊŠã1ÐÇÒ·¬#Ô±%Rdjö!_ŸÕûèMåì}ôD? ÙÇ:#PóT ¤FÑMÐÕT5éQô@+{ÑLe!ööÌߦf ½0ŠÞÎH/ŒB4Y2¡“5}ëNQy_X/L‚pôPûÍ£WzŽ60mó@·UG<©›GL¢¯3æ!OžvÐ<ú`“5ž¢S¶é ¬ª‰ôÁ,‡Akµ¡j&Ò½$<ZkÂÒÌDˆýI ñ¤n"òµ•0‘ƒ0 ü­C&rf!0áįŸؽy„I¦Øƒ„Iv°!öÇ$ÔîA"¹ît@c/Œ@œÿÒ_„3*bß%!ž„ `ß³å×ob~¡k¥!Ïcá2èå†ê ù‚=ïpå¾oÉTîÈ[("nNV–ï%d"=b,ß¾ 2•Eyö„É }Ê"­@¨›d3¡=ÔS®±™‰,£ÙŠX²áÙÛŸMNhdègÈar‰Ï C4Þ56“ˆE(]ˆ¤çÇ|¶w1¢v ‹«O_'jÊÎ ±ï’ÐÌ9é5'HãcqúçdÚq¾ä«Lè¦x¾„ØuS<_ò´’pô°±†2¼¤àøÁ;U»~ºÕgãA}øÊÁyIºÀÛ oK©>ƒó5JèëLä NBš{¸Þöñƒ-2Ï€N®¹‹Õ_b× < úlûõ—Øížmî]ˆÕ_ª &ñÎçAÏw@¥ýy[øWàŠ[ÜÞP¾ðçPYÂS Oµ_}•%< :…û¼~•%<Úü>¯a®¾|¤^d¨åâ$ÓYàuÐ×+šç±“rcÒÌ_d:ê6ýF"Pßm2㔀@íÒˆ|+z Rüûü2:<éÖ™6Jë§4qš¨ÿy©]ùuøþ ô{5çgHþìp#ý¨œŽIõcrBá—Ó6¾?Ü“ÒNDÈAé'åt¸Š#rFx§ä4,yœŽx6ØÈ¯àw6B樇Þ='¿‹ò?Q6,¦.´È×úû£1å?ÖÂW¤_”Ó±x)¢\.G”ÿ•¹ÅoŽËéô 9},L»£K;•ᵈúÍîP.â{“yȵ”3¥MEü¥OÇ”áLÌû×cô‚>»¡g7w¡GôÞ­ìï¶üYwüo|Ö¢'”v§¥Þ(ínŒ>ÍFèͽˆ<ÝÑ‘¹ˆwDØÆ¼œv$Lû¼%Mü悜>¦=”ÓŽ7Þ]lÑq¹lÅ|&>c›KºôDNj¼ûE„/GèçÓ]ؽ÷eŒ>‹éyŒü/"Þ}‘ö*"íg?b²¬+ò»ýô×»l èÝ7mæW:ýµœÖÛøþÏåtx¿ˆ)Ão"tõÛ½þNNÇÀ}µ¥Ÿïþ2B_ó»owÙÇD>ô;g›Ëï×Áïu‰ß‰ñ€®–í­¼[*YâêG«õ•G«¯íï»ð²nÎ+dýªµaÏñ¼¿üXuÝ¢?;;»Rx[±òï‚OÞJ¡lÆGÇfF'~ˆpx·¢q\½Þpxd÷„Ò ?/üEuÏ_ÖÓÍ?/N=sÖ<ËÛžZ¢µ¯-×{çO­„ aôÇÔŠí»5/oûSþ¦åÙS+…©’•÷Üàïm¿j—r ü©ž™oæÒ£«ŸèQ“îÐgo_­ŒÍDj‹4Su±Êÿv×.y\sSH(›·V7~7«ÕÊìÔÔâÊ‹ÜÊdÅs¿·óÕœëmLÁHæÆf~ø¸Zy·ñ1 ¢r,ŽlJ‹cz9¦7m9‡'õsxjÕY·‹¾ý±èè‡ n­úñw?üð‘EeCZþ‘ãú›U}c=¡ { Þ¾UjÑŽoÙ¤%úpîÛ¤t5ª(6*ŠÏÕ‹‚âÎ\|aˆØ¬„¿ý+“ ·7;×·=züzqeùÕ›å—/â3-_Ñ·í>Óô–“PfçÕ3kÕª›®ŸÏQäpôªIõ}By½RpÙUß2b75ÈA:o…©õ žˆÐsfHø´¹£u×Õ[üŠÌªtت(uI²1¶ÛKl%õK[ó‡!ŠÀ–°i‰q% °=Ø#¦¡¥; Ã#4Z™Œ4ÂÙWbrÜ*|_ó«´Þœe¶^ÌÞPì ›Äs|çKÐ騖2É?| ú©qeOX,h:ŠÔXX‰þF^Øz­Ìƒ*©ZæpôDû-ó¤Äö*è«é›±¿&!ž´Å8…ØËÜÏW‚E; S$qj›åþ‘`wÍ]zê¹E—9†+W’ßZfm#°×J…¢?ú®ZÖ”‘ÃÀW _Wyv¹*îÚôíjh¦ÈeÊrÊ|>¥¼­q­´¼¿7b‹•áÔÄѪ·V3น æðè;:B©ÍL»IàÝLýRkÃÚʆ.—[É2ÏÙØ¬*ÿ'yf_‚þÒX®Á5·ZuKáU®E{]yàsêB( ŠÛݺŸ–ØŠAÐPúÍ*±?*!ž´Å¦ÛÙºó•}EÑÎgÂмu?кh¸¬ÜÖ‘ ‡G@I¬­ÛÏw=¨6u$Ë àiÐÉíˆmêˆÝ ð h½}7ò§Y¾Á žM7öú¬äøü¾á÷V±üIkªŠ~¶Føhó­ Û²<ê?sŒ©kƒÅ€HL£öé¬o‘(ÃÀÐ#íW(† OÖÚÇÖIÇwŠÁ¤¸£Jª}ƒ™Þ}¯ý}ÖyIO"Nü¥ÕYû9 ñ¤-Æ”€ÀöôY¥ígŠ+ï­õ¹`Ý-‚}Vt7h®.Ç^oºµbÏÆ1>F.¾SÎkºÈ=œ´ sàÏ«–2  ø´Þ\ATév½XPm™ÆP’„Ò-Rín™Æ a„½ {•þvV^éÈŠZói’Fb-ÓZ¤]PO’Ì}ÀyÐóöX.¢êÜ:µj¼ˆª# ’z[ûäO³²ý>°;Q}Y=/$R?ðè õH”qà5Ð)¬í»Q`´ùÚþ ³Š[Ö¶_¯%Õ^ŸÄ™ÎNrÏOL¯?*©ìÐÒïn‰ý¼„xÒC>ŸÙÆ^_Ú!¦( ­¢vÍ{ýóñ* r (V™†;Üú“,g@kµuj ±;=j¬Ãã6.4zoåÉ:’p ¸zÉXÒ§žÅW“ª›V{ëh$6וrì 9‘Á%ׯҚïz­Èç7íb%ø¢XÂQ^ö½S%ŒÑ­›>%nÇ`kn ¾6M¯ì9úÜG¦]°ìÀGÞ´Þ;n-È”ç–Tó#‡3H.?—díá« Ø“çëðYfç6rªö?ñv–ì¸Ùº{Íõ ¶§ÚZ’P×w@'9G³ßšØewAkÍÑ«µ?°hÂYгÆZ³GÕ‘!ö÷$ÄÓnG沤ˆœ¾ ösvhúBZRn£#³7—SÕrô»½™úÅ M[œuÃý Þ?Pﳊåûv…»Œ4D=”iŒM…˜pÓ¶ŸOªhˆv xt’-LLÃF즀³™zÈ–v7l×`O„RËbhS‡È¡½Ø–§¼õ“$¹|Ú|ŸÙ$ ü$϶]€É×ýмíÖøú:í”#©gUE–ãBM‚žL¿a’X6Lò§êaâsàMغKÛ¸š ‰qHBýC¡fÅ2…¢˜J¤X2ª8±Ý Œ¸ÀS³î°…º¿>ËOÈØÁð©,CåÛUÖAWÁ×l²¬è¼SnHêà<èycé÷3ú§(Ê4êŽP £Ð°¼Ÿny§«çF=»0ª:<Ÿ†~ž}RG6µ^dZÂÐ#ƵCTu*çð,賉UNÝÔÍ z¹¼–©Ï˦Q/ç€YÐæó±]ÊëĘë@<Ö)Ç4ÁÄv/0¹&ø>{Ùâ™M._9 ·ÖÓ,n㮎˜òÒ9mI’÷Ak»ov©³'Š]G5š­ ©žøˆ5vå(p´Ö¼­š±»~à Ðæçãΰ`˜çæA¢~˜—«–r3@’Þ}£ÍÀ è ašb»˜\30þI3Ð4@¯â r¥‘”=@É K½Òn¢¢nšVZ$×.Ï¡Žnñ$fÏ1j"â [)œZÚ£Jb¿_B< å¾oµ®¯¼"Û·2IŽh•‹àTN`—®ê‰?3qng½«ñ–ʱˆ`vª’}†:"4:ÉõЪtCL¹Ç;Õ–;ÐÆÚ9?Ü×w+ÊG“š}À£ õv®+ÅÜÛIœa ñ¤]kRxl3åÙ+Î"é„ñŒõ)IÜïp擌¼ƒ  ÓöòÃJ¡ÿJëþ³–t?ï–Ë6_~¾óSi¬æsKšµü§§¼Ë¬V¦%ÙªU.„ÖÝbÑÝâǼËããžý›šãÙ…Ö݆N™­¹Å„òDöžú{á½…GB4ÌŽVxã=¶Ø¢‚QA˵"ûöIØrã´f©¨{À’å+KFÕ݇" Œ¶è*‡N)ôHØ¢U±>Y2´Š•MKµu&Y€GAÕ‘I­õ!v½Àc ™×ˆNåã¶„ HÍ>ä˜Æ°ý°‰ýµ9¢tòöq€–'jžªì‡Q쇦èjªšì‡Qì‡Vö&¢™ZQ®‡%lqqS3ÑÅ·ô±iˆèKtÖ@À(&k =tÇ;m2P5‘0‹P]%Q3‘0  O¤o"ôœ”Oê&"PHfÑIÁѬ:&k"ûüú<ëîÍ£&!Ü dšŽý·Ë<°‡ŽãQÐZž™yûcâI(÷;M~ï…ˆPüúc1£ ö]âI¨ö=[~ý&梯¸¿‡¢ \½Ô'­Y+bÿDB<êbÐ[‡è­þLÃGˆ×?œË‰è.¾/ö kÍ£ÅIcVX÷¡7[tHqâ³u¬úe#´ù „x uh´ÂîO²p‚l¼TÍ[j´ýñ­j–•*ê—\<@-Ž‚5t°Â®1>Zqru\]®yÈB8ZëÄVKìç¹ÄŸt‹ºŸC0Âs Ï 9¿“<¶ÕÜèÚèm¬c+µ Zþð€ÖʹX€ä ÍÅn˜‹{»È 5äb¡H'šj^ºK9!5¡Ôzæ`j§ˆXzsW¾wªUÛ»¢®=‹”p ô”nÿ ÛÞUl ŠZ|»Gƒ–ܼÕ&ö]ê·ÚFbS†31ï_Ñ úìF„žÝÜ…Ñ{·v°¿ÛògÝñ¿ñY‹žPÚ–z£´»1ú4¡7÷"òt?FGæ"Þ}aórÚ‘0íó–4ñ› r:¼Ò‡rÚñÆ»‹-:.—Í£˜ÏÄçcls)B—žÈiCw¿ˆÐáåý|º û ÷¾ŒÑÁg2=‘ÿEÄ»/#Ò^E¤ýìGìO–uE~·¿‘þz—m½û&¢Íü*B§¿–Ózßÿ¹œà1eøM„®~£×ßÉ阴]méçÄ»¿ŒÐ×_ÅüîÛ]ö1‘ˆN)•߯ƒßKâ ÷GêW¸K[·âïp?ŠÆqôzÃá‘ÝJ3Üå²ðÕ=YO7ßå²8õÌYó,o{j‰î¼Ør½wþÔJn]ü1µbûÁø%oûSþ¦åÙS+…©’•÷Üàïm¿j—~ò~‹7ó éÑÕOô¨Iwè³·¯VÆÇf"µeBq,ý¿k—<®¹)$”Í[«›¿›ÕjevjjqeáEne²â¹ßÛùjÎõ6¦`$sc3?|\­¼ÛøQ9–®7È<ýL7Çô¦-çð¤~O­:ëvÑ·?ýd­U?þî‡>²¨lŒ@tÂiÐÓ¦GßXO¨Â¨·oü¢åø–M޳ý-èo“ÒÕ¨¢ØH¨(>W/ §\p‚F.¾0äóÒ¿ý+“ ·7;×·=züzqeùÕ›å—/â3-ž‰èÛvŸizËI(³óꙵjÕM׋Ïç(òF¸ zÕ¤ú>¡¼^)¸Îìªï±›ä ·ÂÔúODž¦Bi£°^ݽK(?‹êuW²~_€½CýÉqÚ   ‰·T-ÎiÚå ø©ÿ¦îd\yJLøÖý·ý4÷1çÿÿþ;ì i™ŠÌ^bOì JÄÍžûa{Ã._Ÿe—•Ý*³ õj›mZ±‘l»_>þøEÜž^ñDÜð¸Oý§uæODº¹OýĨN|{ƒŽýäýj³©iªÑI ñˆþ?ìÚb›W˜.±WEÛòíPÿ nžÓ ïsÊl…ñ¤(b/+Rò5ï½óÔ5µ y œ=oœ­ÝçŸKˆGCŒ¨Í/‡dÅŒ“ìëÇ+#$;ƒ‡2õ½0ê’ErÝ¿Zª1l÷¥HÚõBìIزư^úx½pÝU¬yCú èÁÄjåÀªUt¬¨õ9ù8Àh-m0ßý}T£ÚÚ‘´¹È;¡’UO2ÅŠ‘÷¡Gœ‚L«bĦg-Ûò +fä…îDÅ„¡:¹ñ(g–·ã2Ð,ÁZâó¾{€@_H¿–ÄI ÍZê5Þ”ô#[?5‹eN6ãqqü{ñÕ³gÙ0ö«øƒ‚Pø#§¼êT·GcCðÆæAìU$œ=gœ‡/XãrÄ&ù˜åyîV=´ÜÌ!xg­V­ŸóÛ“‚¿yÄeõìô" \Ð_gg’1é† ’~!ˤèÙA EžÏ²\.§¾o¥rJ¾i»¬+VA@ C9î5œ…¶+³Ô&jß’®w«Ì”+«Zó(ÎÕtî݈°Q¤?îNšœ¯Ô-õ\`¾ƒcr¾ý"S´½OU^9'‡!=¡´;Ë0'§Yr¶7©Åmy§u$ŒéQk¾µ·W~Oýí¤lM¹G¥wº$Ä£Ù£^1g¶+°%ü¤¢8”™È(Þh†…“F‘Ü4»CTŽ u¨E¨K¯í*µZ )}|[Ìwiˆ|xôM#·62ü²úý$Ðp´VÃ3: Lìî~” Û˜ƒ1Äîð1èÇÆÆN!U Œ$X.ƒ^N\!ö ñVQ²£°ª£x¿?ÄvkN'pÌ|r‘I»4B^œ=d¬Gst/#nS Pê÷3I³|U˜Ð@xèÓ~[µÃ¦ŸÍç@kWÔ+ì2ðèÆv€_ªjÄ$Ã<ðh­V¬I–'«H÷¦Èa EÌIáÃ[á-àU·ÂŠö{»ˆûÁU3#MúðY{2M§²43sŽVrì áY.n³ÀÓ-ðˆËµJ¥¨Ü‡\„ç@ŸKÌ(~ĉµ„ã0QÂk ¯µßˆÝy`tÖ¸ÂNÑe€UßñéK(šªB‘\“À%ÐKÆòïß)„÷“zÏLQ4y–¤S‰ÕXÌAé!‰­$BÚc b}BBc¬½Y¾ÌÀüž]rßÛ>+9¾Osùü²AŸÏõ«*:Izøhó WÛ²<º·=ǘºFI*Q¡æ 5jŸÎº‰2 =Ò~…ºŒ O>e\=˜ïƒ‘Eq;F•TG—af„÷@kmÜRë³Ä|±8VgAìç$Ä“¶WPÛÓg”¶•) HÇA»F‹õ‘—vVt7h.Ç^oºµbϲ…··±5º("_¬‚Á†NÆ…9ðçUK™„?| Zo ªt»^,¨¶L(IBi7s»[&iB!T×LÓ ìšJ;+¯`dE­ù´¼h•·[oÿ 5F» |wÉÜœ=ßaå*ªŽÐÈ­S«Fi‚&êNIÝåVV¶ßv'ª/«³—…Dê^}¡³^‰2¼:…5{b7 Ì‚6_³dVqËÚö뵤Úë“8“À9ÐIîå‰éõEtbûôƒô»[b?/!ž´ÅW' lS¯/íüR¶hÞë÷˜WIcÀaÐÃnýI–³À  µÚ:µ†…ØÈ4•ÝYò§ã6$4zïØ³;UÚp ô’±¤O=‹¯U7­2öÌÑ Hlš+åØr"ƒÿJ®_¥µÜõZ‘OeoÚÅJðE±4£¼œ; S%| Ú|)éi‘* ·YP äÍpÍ™:_Ùs¢ùJî#ÓN-Xvà#oZï :¼î¹%Õüä‡\¢ù¹$kíaM‹ Yfç6rªö?ñvŒì¸‰º{Íõèb; á®“`C³z ¦ExôÝö·?Äîr¦lær¦)ØŒnªêÈû{âi·##B”ÛN_û9 ;4}1ØGfo.§ª3™Ði!ìÍÔïIIhÚ⬻ÓU梎ƒO¼iÛÏ'U4D»¼ :É&¦a›bÎfê-M»6b7¼Úü$ë!òGhµå)oé$I6ß?6É?ɳmF×€ùü\]‘·ÝË~í€#©•¯h½êGÉ_J»aºÖõ&ùSõûº¤UÙ¨ûºû¨i±‡$Ô?ìiV,·P·)–Œj'Nl÷#®1Ó,†;¬qçù,?ùbç²t¼”ï[w>]_³¡áï”[’º8zÞXúýt‹j=ÞFÝJae–÷Óež–÷ì¨êðü6ô›ð$è“:²©õ"·%=b\;tðT§rNÏ‚>›XåôÐ-yAÝÜЩ—‹Àk S˜%vç€YÐæó±]ÊëĘë@üYX§;ÐÛ½Àäšàûìe‹g4¹|å0Ü2O³@¸Rˆ»:bÊKç%IÞ\m¾“ïµÂböDQ¢;¨FB³u!Õ“±ÆN¢ƒÖš·U3vb×<ÚüÜÛ óܼÃ÷¿ÖérÕRnH²“À µv 6w¡'„hˆí^`rÍÀø'Í@Ó½Š@Ê•FRö§@Ou Ò¤Ïf•Éu§ëVo¢Žfx³ç5™‘2,Å•L{TIì÷Kˆ'm1äË]Û7ëÖ[´¥(ÍRt2õ«‘ÕÅãbímkz•£ö‚áC± ç=­ÿQ[%·Væ!}ê²+Û8I=\ÈÔÃæÖñêÖ_ØVÕyo‹½ŸÏ-Ôò´­i½:¹ÙQ™Å‰¢ú›ªy˜ƒR&·Ú¾@y2{ÎÆf‹ÐDÿÖö\ñNqYô&|¦:‰+‰._ðÙîÆæ¾Äö!è‡é[9±_”°C'EæQÛ´«žGñSíóLظšïªßß"ÒXkC³fW·l»Ì¦¹¦ÏÜ™V^'A§AOW)¿E­ M7… Í?½³·x»˜wËUÏ-ªŠ+ÙœÙYÄ&qóf„n£õE 0$;c_‡íbÑöýpyÿî´” z)ÈÖ–å”[DÉŽå«R“hÕáMzÕ0S\9ÐÀoð³r^L^Tó EsL°U?Åó–*—NFñœ¨6× ¡\ ÝÍõç[£p’fí$±?#!ž´Åø‘{€“Z‘-ç+Š‚-eš°7cº"ÛÕ"Ð- ê4×kµ‘û6x¢™©ùa(ª‚gIö§ì’臀ŸƒþܸŠgÈŸ»žÝ*uxÒ–{Q%7\qåV[ ñUHÍ´ß.—$¶×A_Oß ˆý ñ$”û¾ÕúCïAd[DÅNfR¹¾ ¦Žx4Û„¦â,gBÏG MqZ›¦ÝÜÈ;]I»àºC™äo0‰™®”6ß%xƒÉ ÞÞ}2 «û±hfÆ?ÌdÙöÌ9.ªU)¦áö~,“ÄϾñב®O(oü…G(…xOHµ~ü–XÅ"§@'éÅ(±;< ÚÜ7®+/‹B8¸WÕ’é ptrÝÒ¡UéFߘFˆ´C\SÚ¡¦™ØwIhÖ4ǹk} Šò=‡!=Ç/÷eLnÏÙgZ\$ư„xÒ®µPÚʳWL<$Þ“‘H"à}DOÆgÑéßÃ4Ãkõ~ÿJëþ³–|k_«wè~à —m¾MCÜŸêÝxj ²¤-Q=ýÿQO—Y­LûÖ«Aâ×ÝbÑÝâ3B3ãžý›šãÙ…Ö#™N™­¹Å„òn?_r[½jœ­+ñöHØb bPL˜ŠC‹b}â1,õeBi¥,j™P±X2ªÀ}(ˆµ]]åÐ)… [nŒR,…¸ýÕ{>hˆuB–м»+’k÷jàó»"Àõ'Œ€'AŸLŒqlËGìz# GÒo*ˆý) ñ¤n›ò%|°Mb»ØAÛ$ö=¶Ç6÷}P{Až­¥'ªæI €§3õ[’ÚmžÄ®xôs…P5ObVB<©›§pnZ¼‹´ÌSx„4Ozz$lS×¹­!Ö Së:馨uÒÓ ì`×IÏ) ;ÕuŠa-alS²ÇNÚæ\„šT×¹­Þu’D'€©vØhVŸR׉•LŽì:‰ýY ;ÕuÊ·ÛvÀ<‰í^É6:dž=Ñy6åÞ*V6­¸¢ÙéÞáàQÐZ“OjöÑ› <úXúöAìKØõ?5ûè…MôvÆ>za¢Åê}…˜¬} “ƒ5OÕ@zaÐPNkiªšôJÏñ¦m ôÙ°„-‹+©ˆ´pÛ ‘gn;h }0 ÉH-ÙÒùUéƒYôAAt•DÍDú —„'@k ùÌL„ØŸ”Oê&"_ß9³›®;d"a“5‘}~ýÔîÍã L‚pôPûÍã L‚ð(hóeEeó öÇ$Ä“Pîw:—¶F ޽꯱ï’OB°ïÙòë71¿ÐµRˆç%Š‚0¹oÊÅBì¿”ºôÖ!z«™9°£¾øá‚‰žãû¯¢õewÅIcVX¯ 7[tHqËÍÙÝŠÛ¤ý,´@<†:tqÝŸdá¶ŒñR5oyt‚ÌöÇ·ªYVªlLL°kÊ¢® /‚¾h,êc|'ß/9>¡,ÕkHB8z }F+Çð˜Ì–·¹Â:Õ$ŬÌñ{KÇ?̰9v=wûz–}¸NBr·>£¦”:“›¦9s+7­^–_AnÂ9ÐsÆyØ·¦¡l_ƒ=arg’¿fM¦ãd‚²â;tÜÖ2)‰vȆäv@†ã] •ÿ9:‘ £ˆÎ±ÂºŽ%ýúysF 3÷ &oiÓʾۜAåìýYúE3ºI~Þ“1ÉŸꬣFr™fG¨ƒ¿'§s×ÕKù[äèÛf…2ÌÝ›Äs7£žµïB©]5ÌÚ‘–¬)‹µ QVë_àh(Ö$c»/de™ 9 'AOËÜϤÚV–éWƒP8wýÆ2enSœÃÕ‰E»¼QÝ þ¬•êøtnúF––+ùÑ u| 1 EÚâ[© òk0'Œ˜›H­mµÀ[`2m«pY}Û*Âc-ºtOmѪjù¬kfÆb.±ˆ®64R7hf v±j½ e‡ùYh|dGÝnòÈáè%ãÌäè„äΖ3“Í—³Ñ©%ÌÎ }”1D¥`CO¦,™ i“;¦nJëà-0Sšcß Ül`Ká­ë²ÒÒ‰]ÏOÁò@òã4aMNàæè‹Ý«›‹ HN8zÞ83y ·àÓÈòsÒ0¨j­mÞizÁÈÑŸ™žÎÞšÐhÙ7!+á h­ƒRMrO…r_üÉëb< ó›–gå«¶7.ÞÑÚ¤„S §Œ¥¾Na× V6TŠY¶äٿɲ†v­ñ5h3Ó‚a ¯ƒ¾Þ£{Þ“1ºóè¿DòŽ!,A­Æ³Éσ>o,åãøîëC½»šSqÜðGêØr&¡Ðø½áìžUÝT¯’ G„ÇAOL_bÃã»nà0èáÙÆ¬1U –„'@›ÇÔܯsˉpx´^¬•× jV4Ä›Îdê— ¤¡cÀë µ:.u½8 ¼Ú<’é!«·T+VIÕfƒ$¹ œmîèfL8¦¤á•LÔjøÊGßó!ì`È"¬êw:;™Q5Á¯¸ïTí(è(y›J8 :Ɇ.ÆŽˆ]7PìcÖjèÔìÈG ž­¯¾©ô¯q;²êª[±hpøöÅDZÛ>*ºáÍ\ªêC‚ŽA›(cŒÒí‰0 $ )4 ÿó NMÝܪ(MÂ1Ðc‰U(-3ÓdãÀ·š±…ÉŸ*:±ï’Pß­3ã=J@ viD¾½BüÛ¿ŒOz£u¡ŸÒú)MDRhÅ?B^j¾?(ýÆžCÍù’?;ÜH?*§cò瘜†ÄÇå´ƒï·ð¤´rPúI9wFä4¬ož’Ó°ãêtÄ{gä´ÁF~¿³2G=ôî9ù]”ÿùˆ²a1åp¡E¾Öß)ÿ±¾"ý¢œŽîáRD¹\Ž(ÿ+-r‹ß—Óér:Z®«1º´S^‹¨ßìå"¾7‘‡\K9SÚTÄoQútLÎļ=F/è³zvszDïÝÚÁþnËŸuÇÿÆg-zBiwZêÒîÆèÓl„ÞÜ‹ÈÓý™‹x÷A„mÌËiG´Ï[ÒÄo.Èé£aÚC9íxãÝÅ—ËæQÌgâóÇ1¶¹¡KOä´¡Æ»_Dèðr„~>Ý…}Ð{_Æèà³™žÇÈÿ"âÝ—i¯"Ò~ö#ö'˺"¿ÛßH½Ë¶€Þ}Ñf~¡Ó_Ëi½ïÿ\N‡ð‹˜2ü&BW¿Ñëïätxù«-ýœx÷—úú«˜ß}»Ë>&òÁ:¹ü~ü^—ø½‘èàjÙÞÊ»¥’%NOZ­¯y+E4›ø!Âá9ŠÆQZ·ìžPšaà§…¿¨îùËzºyà§Å©gΚgyÛSK4NÙr½wþÔJ¸¢BL­Ø¾[óò¶?åoZž=µR˜*YyÏ þÞö«v)'¼ÀŸj¼(ñf>!=ºú‰5é}ööÕÊøØL¤¶ CC#®³ý?íÚ%kn eóÖêfÀïãfµZ™šZ\Yx‘[™¬xî÷v¾šs½)ÉÜØÌW+ï6>DTŽ¥uÔzð¿gº9¦7m9‡'õsxjÕY·‹¾ý±èè‡ n­úñw?üð‘Eec¢Nƒž6­8úÆzBö@½}«:բ߲A6 ¥­eÉèjTQl$TŸ«…S.8A#_Òy·’~aÐÛ›ëÛ=~½¸²üêÍòËñ™GF #ú¶ÝgšÞrÊì¼zf­ZuÓõâó9мJ[úôÛ¨ïÊë•‚ëÌ®ú~»©AÒy+L­oðDäi ù œ=«[wïÊÏ¢zÝ•,§\ {‡ú»„üJ»‹n©ZœÓ´ÊA±5O4œ¬À+OÉËýu®D?ÏýÌù?dÄ¿€5›z®uwå%öĪ…ßη¶Í<÷Ãö†]¾>Ë .+»Ufœ*}°iņ4é^|ùüùãq¡.ű¿2q¿úOÿêÌŸˆts¿zɬ^øý?y×Úlvš*tRB<¢‚ÿÏ»6ÚæMn—Ø«¢mùv¨~7Ïo à .wu…—ð$JØË ´[°ž ®¨]Èá<èyã|hÅdý\B<bD-*”ô2N°¯¯<ŒLÄn"=¨#X$×ý«å`¨ÃvpôPúÕBìJˆ§óÕ"‡i­U>‘\¬ZEÇŠÚy%ÝŠÚc›V½ûc¶6­jSôêEÑ™f½ÈR;X/ûQ“­¶P(4î÷)Ð @A/t V‘•l«œS”ö*ˆð è+ V¡ÇðÝ“ùd–veÑ3!!ÍÊÚõöÅØ ¥?£O³Xf¥Fv¼dU*æ}޽øêÙ³ú·ð²z~h’¿;ª~žCŽå1hÓÌÀ ”;ó½ºÁXØå7³—jE}›ýŽ6ùú´¯÷ÍÊWÅm¨¿¼îïÉ©nkd¦à"€^2ÎÌ}ÆÊVÎ+Â--<{ˆëoº[¹¢½nF~± ü¼MÛsª9Ëöë™Êårê;”åÐHÓµIÛÙŽaNöHˆÇT±¥^jgÅ& 0Rl'äPÒŠ­«Jú®œL„pLN±ïŠˆtg:­b9ûìV y­Xô¬ò†ÝÐø¢ýÞ.òîÞRÿ0D&¼úޱøwE#“³¼ 2»¢ãWÇ'²?j­Êò@f» ïËš%×lT„ûMÝ‚šomÄEF%^ƒ‰6Ên±ï’¦[0m*yч$Ä£)e&ʵìFª(ÜQTa?è~áø/jêÒk›_Ï^¿†AJqÛ%Ÿ¹Óùð&è›F.zTyîµÄÁ%Á€‹ 3»ØýËÄîðèG ²Ù¿Lìnƒ~¬U MeË\OÕÀH‚%à2èåÄb_ o%;«:†÷ûCl·F»n`;¦¼b4âXXj‡@kM4¬Î±åõÀ%±óκCwY©Ÿ:å ¼úRbƒú¡OûmÕ›Ëç@Ï¥Sa—@?0®°l­ÕŠ5Éò¤`¯[µb5ð ÏqKkN9Ð!:UÌïMÃÇ¢[bÁø™’«nNnxc½jfŽCû ¥ë˜ 3sŽRrü½[.n³²^sí×*•¢r7*o:ú\bFñ#îH¬% ÃD ¯¾Ö~K vçYÐYã ;Å®>tåž_¾Re–P4U…"¹&K Í‡|Çõçö@g†H﹂)Š& •õ>±‹‰I{Tb+©rÚcÑOÚbHÈ G^;1öѤŒ¢d#™Ðÿ !¶ût$Ë@²æh„ áDß0Úì(d™ûÞö<§`ûMM}ã}ÕB¦,ô—Aëù™ò§—„Æô=ZFy :@(íNi·QŽHl/ƒ¾œ¾5û+âI[ iê¥Fy œöR”íL¦qÍ!ÐZ“\¦žV³ 'jÉ£ÂLèøz­ÌƒóNÇRóí,³7r¬Xʲ þ?+ø_ѵ}?vBn§¬ d—‹dš¢ kÖö5¯Xʱ¥ c¤÷«~è5–Ù}63==]oO¿RQà³ÐÂk µ|œÇ«ûyijˆvx´Ö‚ƒÚ€•Ø]ÎNaüCì²À ÍÇ?Íj£ªÎ$Ì<ð9èçÆBÝäÊË—â,¸Kê®ù6Å ŒÒÚì“ur[ôm[U¯¥QŸ˜Û“iËÄ\ ž†`O€Ë µ:îÕê¿óß·ºL¥ü{ q€@kOè}òË÷€OA?m¿»[À/A›·ÐÊý1±&!C1×…Aìªå}U_í¼ ú®Q‡Ð¤Ù|%=Níã&˜H–Ï@§°ZBìfA›¯–t);ËÄ ø´ÞÌdT•¦*©¸Åm ér}BµnF¡Û„ÒF»ëf4Ì G£¬–ºQ5â? ÓZzsI‘q™¨nŠîÆø­z9¼:¹m†;ÖËIà8h­]†jãI&@O¤ß#û«âI[ )€R;Æ._5XØÅLØ>J{.5ûÄ®y Ž_)ZÛ´Cwöuå©_¬Òx©È,Ï­• è$çÙ8­øÑ>Œ¡øØIµ˜)_‚6w‘„‰AÇä£ê¹EE©äƒmG@i¿^”ØyÄfªOì‡$Ä“¶ÒDj-°GìdT”î lð0èÉÙáì+±¿Ò*|_ó«t–*pEZTc–O{髞C1í±‚žìdîºj)_®>­54n’Âby«È-Ðjìmä¥î_«å£ÑF”še^‘Ø^ÝN‰Ø_“OÚbHßFËÜÏw°*Šv¦H(®í<¨m–­CƽËëLC ÃÀ# $7ä»{UýZ’åð4èäöÉÆúµÄnxôcíÍòm7¬±áųKî{Ûg%Ç÷i(¸.5;\ÅPUt’ô,ð Ð_K<`±-Ë+²åS×(ié$êž=CÚ§³‹DŽ€i¿B]Ë„§@Ÿ2®ž ÌwŠAUÜŽQ%Õ>ëÌŒðè{íï³D?ElS8D³Sîç$Ä“¶r ™öõY¥cŠÒÖ¦n ÑæU±·½I°ÏŠî†¸d9özÓ­ Óèø,éþäñòÅZÁ.Ð$(µ¦aüyÕR&ែÖó&#GË/T[¦J’Ðh¸¬Ö2å a„½ {•þvVÞÑ“µæÓv;«¼Ý8n <›ï¹³ Êa¤Iæ>à<èù{,S¨:B#·N­§Pu„ÒQ:Ãj<ÎÊöûÀîDõeuöv“Hý@±>r¡³^‰2”F)iTÒ(0 Ú|ë ³Š[Ö¶_¯%Õ^ŸÄ™ÎNroGL¯?)©ìÐÒïn‰ý¼„xÒc% °M½¾tBQÀ™Lؘš÷ú­ûÑ4Æ«$È1à0èá·þ$ËYàÐZmZÃBìNGAë🠺Þ[yu“$.^2–ô©gñùÆê¦UƉC$¥{CNdð_Éõ«´†¾^+ò=õ›v±|QLò)ï»S%| Ú|Ròi‘* ·³57Èßͯß<'Zâà>2\€e>ò¦õޡ˹×=·¤šŸÈÃDósIÖÚ--6‡÷œd™Sß» m`3ÛA½ãf¶nܪ!ÜuàÐZGèc‚˜mšÄ. ¼ únûÛbw8 Ú«X>]èä–iiICÔCÀqÐzÑ›vÞN“*¢ÝÞd Ó°»)àl¦´¶Ý ±›Þ­Õ¢4_¥Gþ9´<åm$É}àÐæW'Yà'y¶Í¯ìõy@ˆº"oãJhÚyHRÇÞó'òg¡îqƒ¾Éô&)’aÃ$ÚŘ¢wÁ›° t—¶q5-ã„úÁOÌŠE ú”@±dT;qb»(‚‘vöP÷×gùIp»ÊoЫ‡[áûÖAWÁ×lèÚäwÊ­I-BÂ̓ž7–~?£Š¢ÜCÝJ!#–÷çÝb0l›c£ž]Užßƒ~ž}RG6µ^äž„# GŒk‡±èTÎ)àYÐg«œ\þ}C§^.¯Na>V´!Ì‚6ŸíR^Ç þ“Àè\š`iðÒ‰&˜Øî&×ßg/[<ó Éå+‡äýò¸ ÷ÀsWGLyéD!É{€‹ µâK5»‹Ô ‹ÙE‰æP„fëB‘‹/RÕØI”£ÀaÐZó¶jÆNìú'@›Ç8Âaž›wx¤´zЮZÊÍIvxô4ÒbL'šb»˜\30þI3Ð4@§Z#eV®4’²8zª•6Šš7­´H®=¼²‚Þ=f±œ÷6žÄì9FMnKÞz_ú£Jb¿_B§Ö+,Hši¹¥)÷ª-±ÏJˆ'm1QÛÓ+ì)+ŠE§º»%Ä£Ù´Š3^®•ÖOÏ]g×Á€Ï¦ÉµÀI7{Ž jFÒög@Ï´_£¡Þ¯ƒ¾ž¾*ûâI[ŒÇ(íÑè}__Q²%(òR&‰0z{[$ZX ‡†q¬’[+ó¸ÝRœ¯n.UWwåq e£øôsãúþâuÉ*ë m4„yn¡–·ƒ¡óÆFÑ >(:eÚgZ Æi¯‰ì¨æF ñÊÇìÉ$q<æVµg”øó¿÷„ØîvdIb+®0V+0±ï‘0™x”ÅXF lO;Ò[¿šCQ¼§¨$ÂÐÚIW몔/NVØlÝ©†·‰ð?qYx•ˆÚ’Ý¥ó°ª…LÒ—A/×uoåÔãœ~‰jþZ·GWóÔìî©Ä¶toú Oìû$Ä“¶Òïm´»ý<ª‚¢hÏag„ær[EºU°Æé¾)PÅ„F‚~Ø~ŽŠ$”†ië±$!ž´ÅxئüÒ]Jо„ršïäß×Ú¹°7cpêZ­Þ~ µ%ìmî­,õFçv©(nŠUŒ\ÍáÙ–ýªWËW1ÙM‡‚ÆPµ>IüƒÀ䂎ßñóVуy’•Ùš•7Yõ¬²ç “óc_ 2ôÓôe7þW(xBéômBuß³Šë|bœUâö6ÓQžØwIhæÂÓ·#we7Θ*Ê÷kXǯñË}Ý«}¢V‚”‹‹Ä–OÚµfAaj+Ï^±W=éIìÝá1»I5Áÿý1LÛÿÉõfi–x õÃL˜ÞM i^zÏïÿ@iÝÖ’í.á{¾zùzùï‰RàV3uÃímepè~cKþƒð¾ÖwnLU<ç½Uµ§ª¥ÊÔJð¿ŠýáÍûé©•µšS,ÌÌäíëŸÍL߸óÙíµ© šÁ¾žij/>©žî zÖ¢½Ã+†Ž¤,Q³¿ÿ=ý]¦¯íñ¡R8jZw‹Ew‹ß†Þˆ5îÙ¿©9ž]h ®éí»[,L(Çm ñ¡¹Ü?=¢av”ͱ "l1G1(¦âÐñ¦> [æA4KEýÀ—tæ)êÀ—b±dbu=fisŠ€0┞®rè”B„-Û K!nx½'î³Ä:!aË¥ã»+’k÷jà[ºåÆÀ“ O&Æ8¶å#v½ÀÐ#é7Äþ”„xR·M)îE'l“ØîvÐ6‰}„m²Ím ±NH˜šmÃ`жIìz´MbJÂNÙ¦ðlZ\‹´lS¸„´Mzz$4·Í¦Ü[ÅÊfÜþìØQÍØáQÐGÛo`„Ç@Kß>è9.!žÔíC:Ò ûl¢“öÛ꘬} (V5OÕ@°6(n]å´–¦ª¦l9m®™ÊBì‡%l™JÍ@¤³#0…ÐÎHOô“ì[wŠqç7bÍ£&A8z¨ýæÑ“ < Z«Û23bLB<©›G/L¢·3æÑ “ V‡ÌC(„ÀdÍ£‡žR¨VUé…YƒÖjCÕL¤WzN40m¡ÏNJˆ'u‘$;a"òìeM¤f!0áįG«Ú½yôÁ$SìAú “X~ëTBìIØ©ä Lâ`gÌã LBœíy„ILx²e;›qûÅb ä Œâ`&ÕÈAaG Ä~XBíH$×bìí…ˆžúk`F@ì»$Ä“Pì{¶üúMÌ/t­"äYCQ.ƒ^nȓֆbÿTB<êbÐ[‡è­~dæÀŽúâ‡kèýßÏGëËî$Š“Æ¬°òÐ-:”V'í9¥=´(6¿·<ÇZ+*_»FÛú€§Akm@Œ<¬­\l$Æ9 ñ¤]{ë¨1fµg|6b#v ñ–Šºç´‰¢ØÌDzN )µòЉÓ+!Mng{ߊžäÆâ/“Øížm¾±XYs‰ý ñ¤®¹´Õi«æîÛ.9e Éz‡@kEP”èFÑݲ½0Pá–ãÛ‘û‰-N¤„á2låÀt$øp´Ö!m5w Ô„A?L_Á‰ý¢„xRWðï¡Ôß·[Á-Õ½JßC©¿o‚×*•6+ø÷PêïÓUðï¡ÔßwVÁ¿‡R 씂¿ƒR¿k«‚wùªýû;¨4¡4Ñ–z®tæg5dëž‚ïñÚJØA߃؟‘PÛ÷ˆäÚ‹SÞkQó)PÐbÆtü`TEhºÀ.]›Qž °‘éRg  „L Ô.ÞhŒîVœØùÍ ¨øàM`2¹óá…ñRe#K»óÇyð„,ÛÜÚž˜`×”¥tQa„çAŸ7–rñ` oyW=®#W²‚4–ëä ʌǞüë7å7õ/pl—®ÇÊá·ÀdlîñàÆpuɽ¢8ÑÜ— £*—mß]£ÃC+çŇü„RLnü|1F£†yqpÖųÂx|pî5?<¡H¡km+¿ä%8‘ž½áy Þ=é›*²@˜\|èçcA[Åb=ŒuÉzg3«ì:_óÞÛŸ»Æ[õHõü­ØÃ—±yª!„ÏA?ÿɵeï!áO©-Û‚,„ɵe§šÛ2®èsl:wC½Uû¡OÖò [µmð˜L«ödŒ-—ýªmx(Ѧæ*Ût%±UÞf¡ÔC‰2ÄS½!ø-r@(ÿ‰ÍGHöñ'f4²üDf¢ÙhncŽK£YæÓ£K Ï^?V·¡ #áè‰ØÐïÀ[`26”´Öý’ýþ'¦uYþ$Q­{º£ÖQœ„ZÑ þÞf¿ îeÍήùã²ìÆ„™ZþMd‚ð)h­õdCµü[à-0±¦ýuèÚ„ç“­ZÕ¥'WÜæNÝ×C~݆çÖ*l\ŠÄœ·ªö†ëѻʹùçÂäšö;còykÜÁ ^OŸà‘6øE³”­u+oÇÞ¥+þ?‘ ‚i*ſޓQŠ©ø¶*ËÂÓ=å‹–ïkµ]ÿ"$%œ=õh»þ%ÈBض³ÑeYS;¦Þ4ýË‘0¹3éžê_d„?¥žêoC–¿hmŸ‰TÜÑñO!áÐæ ÂGYØê½Ýò¬Êøï Þ{uÕûW! ¡K¡¬FþT½ü;à-ÐlïÉñ]O¡~ýxåa„87®kl‰G¡Y, cìM8ÃBc¯ Ǻ1i†%‚•íp"&ïÚ^>ŒŠÅw`ø;…©ÉÆßCI.€ÖZÄkÊÆÕ1ŠG[+ñ˜”ïí|5胋Û4DÄU°lš÷Í3ñ±­bäýû‘ð*è«ÆòŽ­9e·äXE3»?YÌŽçr¹ öQUÐá“»ƒàYœw¼ÁÝcér’ ±¨ÏøºUrÿ.xEäq4p“)Oª9ú× Bé>!Ãuý *ǿބ] »Ú× Å‰ñÁZ`2Y]²W±¼êìì»íʦë;~Ø=/lØYö%’vê¡ãdþ7 'atÎÜ€R~ïÐ}ã›|‹;ï §oiù ar^Ä1ÆZŒ<~I#N²Ò},}Íû·ÀZ`2š÷àG5ÏòshÓÇëJÈ&ÙŒŽ&þÛ›ðè?5MüÇìÿä4ñŸ@šÒYMüwÀZà_GMüw!÷¿ûSÖÄ‚ý{‰jâO51f‚­Ì'Ø®O(+ê¿a o€6¿ AYQÿ°˜Œ¢.ޱ‡µjx½Ÿµü@7ê~qîšµø]¿Ô¿X6­ß¼F~¼çÛÅuÕŒü‡žp´ù¶³gcÌwëË;ö‡`\A{K.Å®l“¿îÛ6…âåË>K_v«av-¶á~(ÏšjŽþ ¹ 4r+#¹ö¬HþZÔfœ¿ nÿQ¢J¡>²%þ]âI¨zWíV©R?óÉÆÊö?M§âö#ýSäZ v ð±ýASqþãL8ž˜ÌØþÖk›öÞœ÷N¡f#ÖM}>YÍ­1–•ƒ‡þ'¨DÂ[ o™Ò”·¥þ§àýŸfLi;¡ëŠ Œ¾“\À# $fk±W/»^à h­È¶1x‰Ý^àè!cm8ÎÕ”<ËÃÞ?«ª¨$ÒQàÐW: ¨åüó¶*ê!üwl8:I•‰ÑÔ?‡vþ9T¦WWeÔ4õÏ¡UØ›Ib–ù×T~9ŽUthÿš¡Ö’xÇ€7Aßì€Öþ3hê?k«ÖîxeÈN¢ # ¶KoÿtõŸe"à ¶Koÿt•ð8èãÆ q4laùþJ¨ªª¦’@ÃÀqÐÉÝöH{Üm«è»1Þéã–é¨OùŸÁ4êû”Fbüç(Ú¥ùVt|ñï¿¿ŒOz£5 ¥õSš¸é ÿyÉð¾?(ýÆžCÍù’?;ÜH?*§£ñ8&§íÓŽËißnáIi'"ä ô“r:ZŒ9m_˜vJNCD˜Óï‘ÓùüÎFÈõлçäwQþç#ʆŔÅùZ4¦üÇZøŠô‹r:"‰]Š(—Ëå¥Enñ›ãrú@#}BNÇÊÙÕ]Ú© ¯EÔov‡rß›ŒÈC®¥œ)m*â·(}:¦ gbÞ¿£ôÙ=»¹ =¢÷ní`·åϺãã³=¡´;-õFiwcôi6BoîEäé~ŒŽÌE¼û Â6æå´#aÚç-iâ7äôÑ0í¡œv¼ñîb‹ŽËeó(æ3ñùãÛ\ŠÐ¥'rÚPãÝ/"tx9B?ŸîÂ>è½/ctðY„LÏcäñîˈ´Wi?ûû“e]‘ßío¤¿Þe[@ノh3¿ŠÐé¯å´ÞÆ÷.§ÃøEL~¡«ßÆèõwrúp˜¶ÚÒωw¡¯¿ŠùÝ·»ìc"ú³Íå÷ëà÷ºÄïÄx@WËöVÞ-•¬2œ«õ•G«¯íï;Ü\<ç²~ÕÚ°çøíB¿üXuÝ¢?;;»Rx[±òï‚OÞJwŽÍŒNüáðœEã¸z½áðÈî ¥^Ì´ðÕ=YO¯{QÚ3-N=sÖ<ËÛžZò¬’½åzïü©•ܺøcjÅöÝš—·ý)Óòì©•ÂTÉÊ{nð÷¶_µK9áþTïsoæÒ£«ŸèQ“îÐgo_­ŒÍDjË04„ð>èû mù¿îÚ%kn eóÖêfÀïãfµZ™šZ\Yx‘[™¬xî÷v¾šs½)ÉÜØÌW+ï6>DTŽ¥}{Qk,j9¦7m9‡'õsxjÕY·‹¾ý±èè‡ n­úñw?üð‘Eec¢Nƒž6­8úÆzBö@½}«:բ߲I{AåË£“ÑÕ¨¢ØH¨(>W/ Z ¹øÂÈ¢úW&…Aoov®o{ôøõâÊò«7Ë/_Ägz%ŒèÛvŸizËI(³óꙵjÕM׋Ïç(òF(Ý„¬ßF}ŸP^¯\gvÕ÷ƒŒØM rÎ[aj}ƒ'"OSÈá,èYݺ{—P~Õë®d9åjðØ;Ôß%äPŠò˜pKÕ✦ýPŠ­9XÒp²®<%må­»p%úuîfÎÿ!#þœù¥¦'Zf#³—ؾ¸Q Ïiyî‡í »|}–\¾;Ã.8Uú`³®ŸhL÷âËçÏ¿ˆš»”æ+å¶·mnõŸþÕ™?éænõc³j©¸ï쟼cm67Mõ9)!Q¿ÿ·]›l““—Ø«¢mùv¨}7_+ÙAóÁÃI8e¶Â x2,`O]+» qW³ô†RkÝš“†QKo} %Œ“+f?•¸Åi/ÞïÎ4ípؽ\‘\÷¯–ƒQi Û=ÀAЃé× v8ÔOÇk…šJqaê h­â‰äz`Õ*:VÔ¯}¨Š}™È»‘ÓªbTB­ÕŠ5èBŒØ‰,aÍ»¥5~kË©n6…N¯ž'¬ºV´ßÛE„šUÍÌ´Ÿ0">—ffÎÑŒgŽ}ãÖ˜[.n×c–øµJ¥¨Ü\„ç@ŸKÌ(~ĉµ„#0QÂk ¯µßè¥óÀ,è¬q…bWÏ´¯|…РXTŠÞ™.^2–ï¸G·Ž`o\ÁE“&&ùný=™¦ÝúÆ5ø¿_b+m>I{¬AìOHˆ'm1¤îÖpäµã•,4 (ýN7°tŸŽdHÖ$ÑÜB8?Á÷u5; Yæ¾·=Ï)Ø~SSßx_µq¿ÇåLÝß4¬ëKÂcú-£”âWÈ‹Èí6Ê£ÛË /§o ÄþŠ„xÒCj Ûi”4'§(Ù0 q¸-Fy¾§ÅIŸ‡BeUÏ*û#\¯ \ŠvMÙ%·GÞ9Ê'²†a†„O@›;ZG‹Ö¶íQHŠ]_õ‚[ÕO ¾Odšv ¶Û‡%¶1lÒÒüÐzxÒã$J@`{ °GL<+J7Ã#”Fì áì+1n¾¯ùUZ-Ê2ÛáqF$ÅΊ@¿áÖ¥ ÓQ-e’ø´Þ‰üé„Å(Š25Vcj¿‘—z€UË”.ˆ ûÚ.Ë‘ØFYLË$ˆý5 ñ¤-†´*ÑFËÜÏ×~E;S$<ú ¶YhV\T d꓉ Ô÷óu±8mަ“,'€§A'·Â;L'vƒ™Æk  µ7Ë'¬XcªÈ³KÁØÁg%Ç÷iV‘`iÖHUÑIʳÀ/@k-Ÿ7I<`±-Ë+“_˜ºF…Å€HL£öéÌ€’(ÃÀÐ#íW¨³x‘ðèSÆÕsùN1裊Û1ª¤Úg…™Þ­µf®Ög‰ƒÄ6âPOZ±Ÿ“OÚbH“¤mì³J<Ÿ {+B£e1iÓ$Øg;;pÉrìõ¦[+Âø||¤ÄÖ(W¾X+Ø…0rŸÍÂøóª¥LÂ>­¿á¦µt»^,¨¶L %I(í¼iwËÄ a„½ {•þvVž ËŠZói¢šnŸ’îÿ ûLh¶Ú.Ä©C’¹8z¾ÃËT¡‘[§VPu„‡@ëmþ?=ÎÊöûÀîDõeuVEI¤~ DwÒ 1Æ×@§°úCìFYÐæ«?ƒÌ*nYÛ~½–T{}g8:ÉUá˜^ÿ¼¤²@›¯ +w·Ä~^BgìÜFNÕþ¥…?³µÇ·ãu¯¹^ÁöT[Kê:ðè; 61;òˆ]xôÝö·?—¥g¶¦}¨ª#ClïIˆ§ÝŽÌ˜¤ˆœ¾ ösvhúâ J@`{™½¹œªv“ß ì­5Òœ¶8^¨lyüĬÏ*–OG¥Âuh Q%:á¦m?ŸTÑíð.è$[˜˜†ØMg3õ¨ ín؈ÝðhóCD‡È¡Ýz–§¼9ˆ$¹|Ú|'Â$ ü$϶Yu»8{t”¢®ÈòÍá$µr\û‰P÷8N‚žL¿a’VC &ùSõøÏ×À›° t—¶q5-ã„údž̊Ed^,ÕNœØîŠ#øÝÆÅp‡-ÔýõY¾‡Ú†Oeé ßw°î|º ¾f“eEçr«@R÷çAÏK¿ŸÑ?EQ$ —J'4,ï§‹é^ãQÏ.ŒªÏ'¡ß„'AŸl/2)áH¦¾Oðvè“N圊µÈ³‰UNïü–îM¾¡S/×@§0Kìγ Íçc»”×1&¥'×ÀÔ›à\X§õÐ()7ÁÄv/0¹&ø>{Ùâ™M._9 7_ò;æÃ[–¸«#¦¼tÎãä=ÀEÐZ'3›ÝEj…Å쉢DS¨FB³u!Õ=Á±ÆN¢ƒÖš·U3vb×<ÚüÅ óܼÃÏ×{qÕRnH²“À ot ˜†žv  ¶{É5ãŸ4Mô*¶’+WIÙœ=ÕJ›AE͘VZ$×^YAï3€Ø Î{Obö£&"¶&±•"%¥=ª$öû%Ä“PîûVëúÁ[4è×3IŽh•‹à:TN`—®ê‰?3q¨é<,!ÃRyhI57Q£„A?LL³­JÑÙcJ‘8Š‹;¤[· Ou+r6¹¯1JW”ïv&Üvt;Ó8z¨…k×q›vgXBhˆuB–€Aí³Mz€'AŸl¿mÒÓ›©¯­rz$}ۤ甄xR·M1¸%ì€mJöØIÛü‘(ÖIÙæ¶†X'$LÍ6‰á0EÛÄNËz’Ù&±?%a§lSŽLÞÛ$¶{%ÃèmöD?¶Ù”{«XÙ´âŠf§˜ñÀ£ ¶ß>z`„Ç@Kß>ˆýq [¢)¥f½°‰ÞÎØG/lB´X²¡“µ´®æ©H/ŒÊi-MU3^é9ÞÀ´ „>–°eu%5‘ï]è€È“·4>…Àd ¤‡V{i7¼ª‰ôÁ,ú  ºJ¢f"}ÐK µ|J3!ö'%Ä“º‰ˆ«AÄÝ)›ÈA˜…ˆÑ!9³˜¬‰ìóë‚voa„C ‡Úoa„GAkyvæWÆ“OB¹ßi—Ö^Ø3¤¿hTľKB< À¾g˯ßÄüB—¸´Iž;( Â/@›ÇMS.b¿,!u1è­CôV?2s`G}ñÃMÝÆ÷ïFëËî$Š“Æ¬°îBo¶è➛ֻ„ÔïJ£óˆ%Äc¨C ëìþ$³?T¬r!·á9…ñlŽÍÌÎLgÙö¡ú]ÒEhrèCQYaý"_à%½ZÙYŸ™¤ þ»~µâ¨‹)¢–TŠ™ Äô+t™Å'bú¿ñªãÓ¹v•òòaB]ä9ˆIqßrÒ I¬À[`2ûöN†;„Æ ëYÚ3þ!PÁ‰ vMY¼yˆD(…M6o1¾¬â:å긎\ŸCˆGšrMA®ðÆC*¸ÐLæG Ê×]ƒ„éÜ-u¥[€¤„S §: tÁ[àOLé!ÒâOLéA–G‰*ÝÌÎJ'éo 5ںǕP:w ç­|¶wDZ¢¶¼Ï‚ÝR¢š¦ì‚û. õ]#1¤;ŸÌJCÁcÿ„·œÑáåRZ?¥‰Í·­øGÈK^Û¯Ã÷¥ßØs¨9?Còg‡éGåtŒÉi8¾q\N;Øøþp OJ;!¥Ÿ”Ó1БÓpb唜†úéˆ÷ÎÈiƒü ~g#dŽzèÝsò»(ÿóeÃbÊáB‹|­¿?Sþc-|EúE9SW—"ÊårDù_i‘[ü渜>ÐHŸÓÇ´«1º´S^‹¨ßìå"¾7‘‡\K9SÚTÄoQútLÎļ=F/è³zvszDïÝÚÁþnËŸuÇÿÆg-zBiwZêÒîÆèÓl„ÞÜ‹ÈÓý™‹x÷A„mÌËiG´Ï[ÒÄo.Èé£aÚC9íxãÝÅ—ËæQÌgâóÇ1¶¹¡KOä´¡Æ»_Dèðr„~>Ý…}Ð{_Æèà³™žÇÈÿ"âÝ—i¯"Ò~ö#ö'˺"¿ÛßH½Ë¶€Þ}Ñf~¡Ó_Ëi½ïÿ\N‡ð‹˜2ü&BW¿Ñëïät¬@¬¶ôsâÝ_Fèë¯b~÷í.û˜È‡~çlsùý:ø½.ñ{#1ÐÁÕ²½•wK%K„+·Z_y´úÚþPñ¾ /˜ñç¼BÖ¯Zö?ðòËU×-ú³³³+…·+ÿ.øä­tn|tlft⇇ç|(ÇuÐë ‡GvO(Íð¬ÐÂ_T÷üe=½îEiŸZœzæ¬y–·=µD·\ï?µ’[L­Ø¾[óò¶?åoZž=µR˜*YyÏ þÞö«v)'¼ÀŸê#ñf>!=ºú‰5é}ööÕÊøØL¤¶ CC#‚þ?ví’Ç57…„²yku3à÷q³Z­ÌNM-®,¼È­LV<÷{;_Í¹ÞÆŒdnl懫•w"*ÇXâø ô3ÝÓ›¶œÃ“ú9<µê¬ÛEßþX tôC ·Výø»~øÈ¢²1Ñ §AO›V}c=¡ { Þ¾UjÑŽoÙĽ„ß‚þ6)]*Š„Šâsõ¢pÊ'häâ CŽ?ö+п2) z{³s}ۣǯW–_½Y~ù">Ó"ˆaDß¶ûLÓ[NB™WϬU«nº^|>G‘7ÂUЫ&mÔ÷ åõJÁufW}?ȈÝÔ é¼¦Ö7x"ò4…|Ši±Yݺ{—P~Õë®d9åjðØ;ÔŸ–ººxKÕ✦ýPŠ­9x¬ád\yª1\÷àJôãÜËœÿCFü óSöç[WË.±'vP)<²ÑÚ6óÜÛvùú,+¸¬ìV™] hãÛlÓŠ½A¨{ñåóç_ÄOÄzYâ^õŸþÕ™?éæ^õ#£Z ¼‘êOÞ­6›™¦êœ”¨Þÿç® ¶9–Û%öªh[¾*_ÁÍóØ8áu¿N™­ðò,Zkv1·’óòöÔu´  Œðå53¡u~NB<bÄGÑàE'××WFÈ%øìÅû-A4v/W$×ý«å`ˆÃvpô`úµBì‡$ÄÓñZ‘ô‚Ö*žH®V­¢cE­ÌÉá†@땇Qµû£âI¨Zzëí·b­ÈǸ€NÎVâkE>DßAcÙ¥˜¬±{THÍ*2«8&¼7P¾ë*…ð4èÓ VŠÇðÝ“ùd<žvÑsVB<štÐxGÉœÜÔ,–{Vuœî¤@sìÅWÏžeÃvÄ ’‚L;…À½pªÛ£±íx–lPÚvg˜ƒ'¬qIy“|ΧMüÞª,ËårYV®‚mœló?”sÓ‹p@?1ÎÍc¡¯V± …°2je‡vâ]¿•e£tÃÈâ%¯ññŒü±rfäó3b#É’qfn‹Ì v˜ ~5x£Z¤[WIÙÔ…—O6ˆMº·…fLº.®UTß$…–gÂÛÕšÅÊ™Œ:â1”c¶Þû·½õ8 ¡ #&wþšµÈÁ@¢­Ç,cùM;ÿî-…ì.Z•†ø‰Ý}$ÑêHÈè$¿ÎÌèb\—šomÄ뇗Ÿ ‘)».ľKB<š®ËUSqp¦ Ž-÷©(ŠÓ•‰ŽXÚHQ¸c¨6Â~Ðý:‰ì5_ó÷Ú®ò»ƒê·›@JŸß‰"Þ}ÓhèUž{Õ/D%€‹ 3»Ø›°ˆÝ=à#Ðds€ŽØÝ>ýØØØéU# –€Ë —Wˆ}B¼U”ì8¬ê8ÞïÏ$;!£Ä®8˜ùäfÞviÄñ°Ô8Š.@oL/z4Ç–×Åõ ‹UýÂqè(ðèKF "¿5ôi—­Úa“`Yàh­ ]õ » |úq…`ã7¥ óÀG µZ±fÿ·¤CFÇÇEÀò½âá½n:%WÝ +Úïí"u^™‘÷ü$çÞž£•û†î¤)·Y™N®ÑbµJ¥¨Üž€\„ç@ŸKÌ(~ĉµ„0QÂk ¯µßˆÝy`tÖ¸ÂN1‡«…ŒöéJfK(šªB‘\“À%ÐæÇà ¥ üÊ#Ò{®`Š¢Iç§ä ±‹ ¨pLb›ÂÄÂN¹?!aKä¶´ÄA Ôyí4ÆØG“Š’ÉñÕD|˜>É2QwÌ-„-|÷j³£wW}ã}ÕB¦,ô—Aëù™ò§—„Æô=ZFy:@(m•i·Qž’Ø^}9}k öW$Ä“¶ònÊ6åW®ÅIv†x¶-Fyï îÎrü`ÈoYÕ³Ê~ÐÇ”Â}ËBWEvÉí‘w@ޝZÄga†„O@›;ZGq å=¶_õ‚[Õ%JÞÝn<+±=ä±ô5ŸØ—°%p`ZbœG löˆtEé ð0èÉáì+1¯o¾¯ùUÚ•e¶Þy×Pì,ƒïnÐ :ÕR&ùOA?5®ì ‹MG1¼¹òi^Øz­ÌCÕ¨Zæ(áè‰ö[&“Ø^}5}“ ö×$Ä“¶£(í±Ìý|KQ´1˜"¡ˆÖv01³¼¸¨4C”ŵ kvÑg[N èkv¸æV`N9PzÚ4mû>í\¡)/Õ&éƒ6Ÿ+8~…:Ç5!áa¹5.1›'75èà7•‚qa÷„Øns“ØFÄ=Jˈõ% ñ¤-†¼›¾}æ¸7—Sm¬/à {3õÀášÆØÝ"ÐYw§`5D==®]†q«û¹kª!Ú-à]Ðw´±˜eb7œÍÔÏ¥$Æ6f.ØMï6ßgu(ÇÞð™<ËSž8 I6¥L² ñl›QPZŸ/³Ö™î-Ï[e>Î"©•oª»êGiÛ~Ú “|-¹êÑc%G1*z¬¢q5-ã„ú[ ÌŠErd(–Œj'Nl÷#‚êjÃÖ¸üu–¯¯ØÕÀ“61ð1ɺó!è*Þ[ÅšeEçr«@R÷çAÏK¿ŸÑ?EQ®¡î¥ â}—üV?…–§½š£ž]«ä¸¡kÐo“ OêȦ֋\“p$SŸe7¬ÚÞ S9§€gAëïÄþdö›SoèÔËÅLc :z9Ì‚6_©ëR¾Œ›øOs sh‚åSêh‚‰í^`rMð}ö²Å3šÜpÀÌ'fiº1¹«#VztÖêIòà"h­][Íî"µÂbÉIQ"Éß’÷O'dð;­Ä;‰r8 ZkµUÍØ‰]¦±ôÝŸIbuõ †ynÞáûë[A¸j)7$ÙIà Ð7:Ð ä '„hˆí^`rÍÀø'Í@Ó½Še&åJ#){€S §:PiS¨¨)ÓJ‹äºSðÿ ÔÑObö£&bM˜ØJÇCÓUûýâI[Œi”€Àö̺Á©ú‰ E)g2¡IƒÖjú#çÃ?ûÂõœßºå*?¬Œ§l/\3–VzS碋éòµme‹'áG€/A¿4®ñ/¾òíõZ‘»#îúz0N¬Ò&B:ÄÖ=·Äx$hŸ¦ rU+Z^q›¯‚ã?[ 𝠫¶òÑÔëPˆ;*Úe½3ÛeÐËé› ±*!ž´Å¸Øëío:©(âM˜ëÍL}þ[oB¤hŸ-”ÜZ™Ÿï§5-/H)àÔ#{º¿Üy§³ŒŸÏTUv~ø ô³ö+ûMT)ásÐÏÓ×2bÿBB;áFìg@›ŸÉòa¬q˳Kî{Ûg%Ç÷Éoä«h>Ÿ‹SUt’ô,ð ÐZc¡&‰,¶eyeÚøË˜ºFÉ·ª €HL£öé1$Q†# GÚ¯P÷ð"á)ЧŒ«çó¢]®£éhURí³îÁÌî5Óíî³DäbÙÁx‚Ä~NBë üCQ@*—nà`Æà\uän´ÏŠîM}åØëM·V,ðá²muÊùb­n¶äë<þ¼j)“ðÇ€OAëMŸD•n׋Õ–éJ’PŠðÕî–é4Œ°t¯±ÒßÎʇͲ¢Ö|: j•·›H|ÚHƃÚåéL’¹8z¾ÃË<ªŽÐÈ­S«ÆyT¡Ùb©üéqV¶ßv'ª/«v€Dê^}¡³^‰2¼:…MÄn˜m¾icYÅ-kۯגj¯OâLç@kõ{j½þœ¤²R+”vw;ý¤-Æç(mêõ¥ ŠÒ”\7м×ï1¯’ "ÖÐ0h­¹[’å,ðh­¶N­a!v'€£ GuøbÜÙñFï1n§J.^2–ô©gñÕM«Œð&4›ZJ´i=p"ƒÿJ®_¥íàb½rÓ.V‚/ŠStÊ'oÂT Ÿ‚6_…{d¤ÊÂñlÍ rÁSç+{NÁŸ>÷‘)¨,;ð‘7­÷Ž[óøÚ«j~‘‡ÅDósIÖ:!%âäùQè,³s9Uûñ÷ïxÒ¤;œVm-I¨ëÀ; ï$ØÄœ5!vYà]ÐwÛßþ»ËÀÙLý¨‹iªêÈû{âi·#³ )b§/ˆýœ„š¾/Ánㆀ¦§Š"RÇÓ 4ß°ÏÜ•!A†"’Öæþä†H$Êyà(h-—B­%!v#™†o0’Ñ<ÛTW³án$Þ­Bg|Vñlê(ýð³p>IUÛI΋Àç Í÷GÜò­¶â†§¢é^¡µ0NÕ.äØûMÍÉ¿ã.@ÁñªÛ,*Š._’.mlhwk¹$±½ úvúͱÿLB< å¾oµ¾Y7‚·ˆ„"6­é7‘FE@ì»$Ä£Ùê´®@*‹³œ ×âI¨üÑJb[Brƒ» ÚßJÞ7¾ »+zY…Z¼ á°ó´x„Mäa\EÅZ“Bð‘ƒ!&Tk?~ÝÏŽÕv¸:ÉíD;TÛuàCЫ­›Ð§SrªázXð¢jF^Bø—™¦IÃŒ,YµªKñê(Õ6Eã±øÖÏÀž±ÚÀxt*ºH½\ãîtq;+Ž(\¶i½Wvª_A~Bá.šO>õˆ8W¯,[«ñ`“Û¼Ð+›Û>?sAwéøY^[|ÚÿÍã^0KìõVÍÒÏŸe’ÜGý„ßfÁÍçk•í0œ …Y¶@«(y·ØG™q9še[›v™ŽªffXIÔhžy6?„mqÙë:H¾žq£1½Q¯7þ—ˆj}°}–ß z%ÛWîg^#„wµA+ØUË)F„2¼Ét´!ö]šõ1ôíHw®RBQ¾¯2aGó~¹/cr}aë”rq‘ÃâI»Ö¾†ÂÔV~ÓñþćN$¸ 'bèDõÀÿý1L3¼Ìø÷ ´î?kÉ´öeƇî gÙæ CX˜þ©^J¬6F‘T%jhùÿÒÓÞåp,@=M!\/\w‹Ew‹Ÿˆj¬Z{öojÁȳк (èœÖÜbaB9H‰?üô7ÆÙѺŽx„-ƨ ᜩ8t–¹OÂ7]³TÔOwKœ£Nw+K&V×c¦÷¡#Žäë*‡N)ôHØro§b)Ä-VîßñbäD;ŒØc¿{Ñ"¹v¯úUÏg6?a<<úLbŒc[?b× < úlúͱ?'!žÔíS¾ ¹öIl÷;hŸò=Ôí³Ï=4Ä:!a˽í³Mb8< údbŒcm“ØõG@¤o›Äþ”„xR·MáÝ´¸iÙ¦p#;h›ôôHØ&ÛÜÖë„„©Ù&=Àm“ž^`m“žSvÊ6Ÿ–°¶)Ùc'móGî£×°Í¦Ü[ÅʦW4q³˜eÛz8}´ýö Üõ{d{3M—ޤeâÆK-—ޤf=°‰žÎØGlB(g‡ì£'úIÌ>h VÕ>z`=éÚGl¢§³öÑ›Ø)ûè…MôvÆ>za¢Åê}…˜¬} Ë5OÕ@zaÐPNkiªšôJÏñ¦m ôÙ°„-k©HŒ¢¯3"ÏvÐ@ú`6u«äãF>±Ò£èK×@ú •}5>…ÀNÈAÅÁÎÈA…8åÜ!9£˜¬ô¬»å꺕Wv²Â,BAt•DÍDÂ,O€Öš”03bRB<©›ˆt¾&rfq¨³&rf!0áAÈ&…¨UµC° Â!‡`„„ûãvjÒ›èïŒ}ôÃ&ú;ký° ÉÚGEà ÷ªI? ƒ0Å™Þ~áH¦c3½„§$ìÔLïaÆáÎÉaÆáÎÉa†Àddß±@cÍã0L‚pôPûÍã0L‚ð(h­®ËÌ<ˆý1 ñ¤n0‰Î˜ÇLb ³æ1ižXMØÇz¯ãc HOŠ>Ö@¦1…ÖA‹Ø—PÛÇŠäºÓµ"{aG€ú; €Þé’OB°ïÙòë71¿ÐµRˆçç( ÂäŽ ( ±ÿBB<êbÐ[‡è-áEØQ_üp'q„D_áû¿ˆÖ—ÝI'Yaýz#°E‡Òª³o'É•HøÔé·x‘pôˆ®rí¾É%v}ÀS µâËòré7­.㬄xÒÖšï )“9[Ó·Xó¼0ꮢ<«a5Ó´º¡©Å j- 4<ZK}Ô´–Øž­Ý»©†YÁµÃƒo~­Rq½ð¬˜F]΀Nî\û^ÏUöæH’;ÀYÐZA–Ô+é:ðhó{Äè2(«dWé^»rAÕ²I˜ûÀ§ ÍÔq|~VÒ)ØžµØ·_t·DX9E Ö:Ç3 õBÈ'{$‹ä^BèSbw˜múô@x*W£j&×A_O¬jö­;Eå˜D¹ ¼Z+„˜z­ÜΞ3®•ƒ“]ªvM‚<~ÚüƒÉÀ¨«ž[ O¥­Yùwá ]áöq‚8¼”FUä_…:ÀqôdbU·Ó°á[p{›IÒ½Qö²ˆ}—„"ü% 0¹!‚üvïBÑÙ(Sð Eñ¬LèóÒöЙ–‰q\–ɑ´*m %0¾ò[cù Ï.¹g};ŒÀa‰ŠkÜu¬(l^}%±~CoŠdɯƒÖêËÔ:b7¼ú†q½í× /O"ÜÞ­i5ÁÅm’e¸Z+‹z­Ü>ý(}£&ö%Äc(ÆRã¸8÷ú|››¸íðÈÏk7¤\+­qººeÛe6ÍÆ=ZuZs«U·4¡3Ð(„:Áq ô’q^žÍ°ñª[™*ÚëÕ æC Š\âYyRòh––œB¡hÅóAD˜¢òASf{£Ê¸mä‚Ð(ÔISŽŽùà5ãÙü<uË Ã<Ó5Æ¢ñõgÙ¨SÞ²¼‚;¹µ*ÿKÙïZ‡ì„A?4ÎÇÂ2N\©ÀåF¸¼ªKŸ„>dXøað&äïªfc¢.€^0ÎÆI'èð‚„÷/7$V•nž­˜VÙ¹µÀÍÉtÔ¹%ö]ê;·Ô»LìVœØžåûL8M&a±Ü¯°û“, O2^ªæ-®z±ýñ- æWÙ@0&6ÇŸƒ~ÞFào·ÀdsŸ*-¼Ù­ª†eýsŒðèsÆBÎn$é)C@nðkä[üüßx¯Æ_P—ûŸ‡¬„3 õ6ïÈŸÎíX¸Ág¡õyVÁ©ùãò̱üøìm²ÿ 7áhóµyuEýÁ[`2ŠzŒ‰Eº ™ª-\Þ³}Ÿna¤ù¾]­RèØŠåù6¦rŒæ—•³ð/AlÂäfœÇÂz‹1­È Í~‡7K¬…•ÏÓÄZÉ!çËáUVlÿØœüËž0¹(ÿׯjM—cRÐu\‡0¾T1±³ô±ÿ+’0¹®îóOMQÌPV,?èòhârôWãAŸt&9P¾MSJ££Aߢœ¿ Ñ ?ý¹ùd!kRoõFâO!ÊŸÖ¿Äd¡z#ñ¯‚·Àd‰“pi±€_”‘ߪ,ÞßH„FËÍ;½*®ßß{B)4²¹"IsÎbý=ˆò÷U¤Ÿ3Qköø(É6ÚXIå7T”*콟 zÐà#š‰¹že4Þ¹•eè\ïÈž gë8}9"”N¡¤n&ÿ¼ê› MaŒËó¯eÂ$ɬ&½Ì–ÖB©÷Æ%´Nº´tlRùŸr¦þu,á Ð/Œ35TX§52º>%·N;—Ç•û‡†pô±`g·1tŸÉ²à¿ÀŒ®ëôsÿä"< ÚüäÆqÆš wƒ 7£!Û?‚<„ÇA›ïY;4^…K7jñ-ô?PêMÍ¿ Á“2u© òo9aèNÌvýÛà-0×àé–«¯óÓtú»²»E·±-ºê¨ê² ç½ÝXkò—½w¼jÍ*†·@)gè#„OA›Ÿ=c–ØŸìù±w`ÄJõO áèc©ncO¿5jŽÖÃm‚N:Ë0iXO£WßÖšûw 0ámз…¿ §((Ðq?ðAÈp v¹êT·󮸾CÞ$%Ó]mö¨Žèÿ.Ä%¼ úfSy .BPe1ÿ=ˆFÈ@3c1±×nàzàTÕuö߇ „‡Aþ뢳ÿþþúéìqÿÃDu6£³‚|ËŸÎÝÕ˜ û3ˆI˜m~~hiŒ}Œ¾·Ã™¨ áKªLÜÞ(®3õé¶C¿j[ÁX´À×_©Þ¦œi Gÿ#d€p ôÒ_½ÿ§øŸþõÓûÿâþljêýSÖ2E®î6»n*h’=²¬¾¢¯nÿ 2A˜œ+¢îãý§à-0ïÑ{ã²J‘_qI3@N™^¸-š&]m+O±<úÄ ï€µù@3¼Ar‡«-c³òçŸðhó=ô—ÇXÙïM-„—mçÝR¥Ng‘œžoc/öŸA@ÂË / »u«žUö×]¯4NMIPè|«‰õÞþ¾4)Áÿƒ¶eé«4ú¬•ùFÞñ÷Vq‚åk%¿V éI¨ù-v•vé,îþgÈ¡t~>uÿÏÁ[`2*žR›ý_@`ÂäÚìó;4Ù:Rþ—Œð<èóÆRžŽh¹2k(ãÿR&·ýP]ÿ‡à-0e|1Æž]‘³îäÃvI}²ÎdÞþ¤æíþdž0¹y»Sá¼S†31ï_Ñ úìF„žÝÜ…Ñ{·v°¿ÛògÝñ¿ñY‹žPÚ–z£´»1ú4¡7÷"òt?FGæ"Þ}aórÚ‘0íó–4ñ› rúh˜öPN;Þxw±EÇå²yó™øüqŒm.EèÒ9m¨ñî:¼¡ŸOwaôÞ—1:ø,B¦ç1ò¿ˆx÷eDÚ«ˆ´Ÿýˆýɲ®Èïö7Ò_ï²- wßD´™_Eèô×rZoãû?—Óáü"¦ ¿‰ÐÕocôú;9}8L[méçÄ»¿ŒÐ×_ÅüîÛ]ö1‘ýÎÙæòûuð{]â÷Fb< ƒ«e{+ï–JVN‰ÕúÊ£Õ×´Ñ÷;ÏökŪ?ç²~ÕÚ°çÖjN±ðËU×-ú³³³+…·+ÿ.øäm¸Ç¹Â'~GÇfF'~ˆpx·¢q\½Þpxd÷„ÒöâFõfi§*´~˜ Ó»‰!µi{þ¢ºç/ëéu/ª ïw¿zùzùùªpªøŸÕFaö¶2Xœzæ¬y–·=µD“G[®÷ΟZ g’è©Ûwk^Þö§üM˳§V S%+ï¹ÁßÛ~Õ.儨×úÓ7¦*žóÞªÚSÕRej%ø_ÅþðæýôÔ /ñ™™¼}ý³™éw>»½6…Í.ÍUÿ‰“Ø8‰ëÝûʧñÄðf>!=ºú‰5é}ööÕÊøØL¤¶ CC#¶êÿq×.y\sSH(›·V7~7«ÕÊìÔÔâÊ‹ÜÊdÅs¿·óÕœëmLÁHæÆf~ø¸Zy·ñ1 ¢rŒ¨S#âñ¨å˜Þ´åžÔÏá©UgÝ.úöÇb £‚L¸µêÇßýðÃG•ˆN8 zÚ´âèë UØõö­êT‹v|Ë&…u­Çbü6)]*Š„Šâsõ¢pÊ'häâ CÚ”!‡ÄÔ/ z{³s}ۣǯW–_½Y~ù">ÓãÈ(aDß¶ûLÓ[NB™WϬU«nº^|>G‘7ˆEXõ6êû„òz¥à:³«¾dÄnjƒtÞ Së<yšB>gAÏêÖÝ»„ò³¨^w%Ë)WƒÇÞ¡þ.!„RD»„[ªç4í‡rPüÄò5œ¬À+OÕ'Æë\‰~›;™óȈß½”ï‘ÖÍp—Ø;¨“€sN3zî‡í »|}–öðCu§JlÖ•á}é^|ùüùãQ3—ÒleÔv¸Äê?ý«3"ÒÍjÃJ ÜŸ¼Wm61MÕ9)!Q½ÿï]ÛksÔÉKìUѶ|;T¾‚›¯QHÆp­ß)³^¾“ ôr^¶ž@.mãO^þžºÎv!C„Ž®f¦”Ë–Ø?—†Qñbr ‹0N°˜-¸¸Œã èAÁ"¹î_¥¸}1l÷‡@¥_-Äþ¨„x:_-Ô”ö‡@k•O$׫Vѱ¢–ê¤Ã¡ò1íz!öÇ$l¹eа^Â{,¨Q¬•ý¨‰ýx¿'Ķ×Ê~Ôá h-#5«•ýPFCºJ¹Óí"¼ËSª•¨‰)׊è3t¶V &&[+GyÖ#[áQÔüœ¢tݨ O$X9|¶$†ï`ÄÞ•´*‡ØHˆG³rv}Cì.žèǰXîKÝ8"€±9öâ«gϲ »ŒÃ?>=e¡œ…^Ô&g ú¾q¾`MÇ=¤S õй[Ò± úáM|—f*ƒ¤¥…g¯«g§Y üôæ5ÂXÙÊy¥º\Ìßt·rE;¨6HüMÛsª9Ëö $Ër¹œúû`¢5¢®Ü‡À[ C9fëÞBÛUs9#f‡t3«Ú?¦"Ê8 ¡'šÓ,9]€T„›éSÓÕ#à-0I]%ªíº*y<=uUvþDuU^¤3ÒÕß©æ[Q¾SxKT7•}'bß%!Mß霩8´ûç„x4ÅéÊD_õÕ »UŽV®»ý ûu„‹¼èëàv×#¼²àÛb¶YCä#À› oj—瞘ñË^KlIVl¸z11³Û¿ZtÊïbØÞ>ý(A¶1×7»[ÀÇ û>æ*_ûB,—A/'®û…x«(Ù XÕ ¼ßŸIr†!V#ˆ7·cn6F#N„¥ÆQê$ 5âhŽ-¯‡W3­;Aƒ¡qé tx ô¥Äf:†>í·U;l, œ=—N…]>ýÀ¸Â°ñj|ØÓêhø´V+Ö$Ë“‚½nÕŠt<ˆß–\ZsÊÕïTÄÇ¢[bV,£êVXÑ~o+U53ÒÄQæ è'Æ™9GË9‰Ö-·ëgôéÞpõëÝG á9Ðç3ŠqGb-a&Jx ôµö[±;Ì‚ÎWØ)æpõñì@û(`‹%MU¡H®Iàè%cùŽêÏíaÝõ¸ÞsSM:!çθƜª]Šéô[A§?Ö ö'$Ä“¶Ò(ÏpäµÓcÍ(JFÛ »} û´]-Í-„ó|‡s³£å—‡yNÁö›šúÆûª…LYè.ƒÖó3åO/ #Œé{´Œò,t€PÚNÕn£<#±½ úrúÖ@ì¯Hˆ'm1¤^µFIsrŠ’‡!žo‹QÞ{C¡+i§Ž ù­b#6O¸y'pYj¾ÍÜ0>Rh¼r”ï#=3$|ÚÜÑ:Z´¶ù}©>ÓDÁåU ¡¾YÆp?„šž—ØŠY8½ýFšOìKˆ'm1. ¶Ç{Äij¢t£0<Âà'f„³¯ÄtxöÎeÅýÓ’bg|¿poÐ騖2É?| ú©qeOX,h:ŠÔXX©ýF^êA¼T-s Š@8z¢ý–9*±½ újú&Aì¯Iˆ'm1¤{NÛh™‡ø<ß%¼‹$=¤m{[$»»ézÎoÝr•n/X੆]å÷M!­ànxîZޱÇV>6þóNÙ8|Zoÿ¨üér³˜ü:MZY« 1wÛS&g‚<< ½p~çtî–jv$§’»à{2I¸à·ÉýXsé›0ÀMñhç9âAõ0'šû*E7̶jÃsòÞ}»ý Ï%‰mÄÅ™iY<±¿#!ž´ÅÏ@µ¯á9(íðQº¤n ÑÜ=ì@ëªV0BÖèp´ÞDKäèEgºœD9 d Y‚–3IHìN/€¾`¬Â§š¶ƒ²myÅí,MjÔÔ(ðè{‰ÕÔ~¾B§ª—@kM\ªWÕ}àÐæãBåÖ†Ø!!C1øúŠ˜Ïš`—¦–%%Rí˜$w4*Ú~»:¦ ‰­4RK»Ž®ÂRâI[ é¶¹6vLûùn(EÑhA¤xôAÑ’ê’HÃÀ# t¸¡Ë·„§A'·ç*¶¡#vƒÀ3 Ïko¶¹‰É2Ï.N°ÏJŽï“sÌ=~Ÿ¯£ª*:Izøhó6qÀb[–G—xƒ uš„Å€謓C¢ gË~ÃÍj 5‰ O>e\=˜ïƒ¡Uq;F•Tû¬I˜á=ÐZ¾ŽZŸ%N/Ûv¬ï”û9 ñ¤-F% °Mƒ)iË®¢€S™°·"4Lu·öYÑÝ I›{N}Ð ãk4 â”óÅZ!¼R—ßëÅsàÏ«–2  ø´ÞüjTév½XPm™¦Q’„∖ÖY µ–iFØ º×XéogåÕᬨ5ŸÆ_Vy»±uÕç%Óþ »{±p\’Ì}ÀyÐóöXfPu„FnZ5Πꥃ7†Õxœ•m>K‡êËêì$‘ú@ëHóH”qà5Ð)ì‡"v£À,hóýPƒÌ*nYÛ~½–T{}g(õíîõ§$•}úAúÝ-±Ÿ—OÚb\G lÛj}W­¢€72acFhÞë÷˜WIcÀä§PõZ’å,ðh­¶N­a!v'€£ GuøbÜf¯Fï{Îk§J.Öš¹l¾~ͳø |uÓ*c?2 ‚ĆäR޽!'2ø¯äúUÚ'³^+òí1›v±|Q,{+o•¹ S%Œ¸}M7?AFª,ÜÂÆ—ÐÂ52ê|eÏ)ø3\ §*¹e>ò¦õÞ¡«Ò×=·¤šŸ[ÈíDósIÖ~ç;6†k~Yfç6rªö/­ö™íÆÛñ€J÷šëlOµµ$¡®ï€ÖZ˜‹ibΨ»,ð.è»íoˆÝeà,hóÛ{TbOB<ívdnHŠØÁé b?'a‡¦/¤Õð6:2{s9Uí 3ìö‚ÖéFN[œuÃ=`ި泊åûv…;35D==žxÓ¶ŸOªhˆv xt’-LLÃF즀³™zÄÎv7lÄnx/S_6´©CäÐùËSÞ.O’Ü&·;É?ɳmVÝ®Î.®+2nF滋IêØ;¾ãD¾êGiI í†IŠ*`Ø0ÉŸv1¦(Ç=ð&ìÝ¥mÜGM‹…Ä8$¡þAz³b‘zΊ%£Ú‰Û½@±Û¸î°…º¿>ËOÚÁð©,Ýç;q×AWÁ×l²¬è¼SnHêà<èycé÷3ú§(ÊêŽPŠ”—а¼?ïƒaÛõì¨êð|úMx´V2µ^dNÂÐ#ƵC‡úu*çð,賉UNïü–boÝЩ—‹Àk S˜%vç2Ãáç2IÌÇv)¯cÈ‹Ž9й4ÁÒ,l'š`b»˜\|Ÿ½lñÌ«áíë8ŽD³@¸-‘»:bÊKç„:IÞ\­«¤Ù]¤VXÌž(J4j$4[R=%kì$ÊQà0h­y[5c'vý™F8„þLgŠÏ°`˜çæu§«–r3@’Þ}£ÍÀçÐÂ4Äv/0¹f`ü“f i€^ÅáJåJ#){€S §:Pi ¨¨ÓJ‹äÚÃ++èÝc{ÁyoãIÌžcÔ䎔a)NvÚ£Jb¿_B< å¾oµ®¯¼E`ˆ‡™$G´ÊEð*'°KWõ’‰ Gïa ñ$Ôåýh´òØ~âït@´¿ß{ÅxTÿGã¡¡ÆNax´Þf­ˆå;ÖÌàEÐÓ©™aà%Ðz Xò§gèvÞY%rbùiäµZUg²‘$» \½`,áéŠEBèD uÀg}Ýöø6Vå5ÀÇPhB³ø±ÉÚ:É3 ”ŽB´[£Cy ¯6?‡Ìhê7Ü Niúâíº[SŽ,HÒe_‚þÒXÊÞ¼ë•mÏgãŠâ,Ao{A÷&7DúPrʪ계 ‚N2ÎEŒú»>à1Ðæq.º²L£FŽgá'g=ù¡d}Щ‘³@–Iíp$±;¼Iêp¤^Œf[vFCLªF¶5mäj¦¸íjFsUI½F.s Íçê´Ü)a x´Þ|AL¥è™É,pt’[Iw¨”›À WÊÞ åÙ`¸ZÏaJÖÃ¥•ân`Šc)Jg‚ck $ ,!œ*nHU‚¯E¨ú$è ðèä{ïQ¶'’ã¡„xÒ¨7l,àÃèû™$æ±»”w‹ÿGÀÇ õ¢aGVǶju|Óˆ§ÝÕ!]DS¿ Àüš u/€ø÷û@k¸‹ÞŽ´åª›:U24šSP¯’ƒÀaÐz.ªy•œž­w±VT•Ø´MåÑ/ sxt ó)Än(¢›Ï§^€N¥\Žƒ6Û¾'¿µ‹{,w¬™)à]ÐwÓ©™ à,hóýÁiC¿Å6UíXH{ÀǠͯYX¬ØÈYÎÛáw«ÈòtÙ.-2omÚeƃïÁU Ï>Ö§êÈaQv8—Cá¸:¹Û1­l?ï9•F ÆO¦ÚqB ÓÁbß%!M{£oGÙ]_c+—¢|4ÉÕ< Zk:‡Ë·Ï´¸HŒa ñ¤]kÒýÏfÊÃ/_ߟø˜‰ä÷VFŒ™¨ø¿?†i†÷«ÿþ”Öýg-™Ö¾_ýÐý¼[.ÛüT†Â?Õ{ÒÕúIU¢Æ”ÿ=í]fµ2ó©ÃG3ÛÅ¢»Å¯¯h¹÷ìßÔÏ.´ž`wÊlÍ-&”7G“øƒÀo@cœ­Ñ÷HØbŒ b^4‡öôIˆÇ°TÔwUH ¢vU(K&V×cö8ìCFl…ÑURè‘°åšZÅRˆ;Ž;;²“X'$l¹%b÷bErí^õ«ž+îZù„ñð$蓉1Žmùˆ]/pôHúM±?%!žÔmSÚ\Þ Û$¶{´Mbß#a›l3nªl'±NH˜šmÃ`жIìz´MbJÂNÙ¦ðlZ\‹´lS¸„´Mzz$4·Í¦Ü[Åʦ¥:ª9› < úhûíãl‚ðècéÛ=Ç%Ä“º}ˆqewgìC²‰NÚBœÕ1Yû8@GÅjžª`˜Ïñh-MU3œFçx´¹f*±–°en(5‘–¹:a =0 ¡2žè'!ٷæÑ“ =Ô~óèI­Õm™™±?&!žÔÍ£&ÑÛóè…Iˆ«Cæ!B`²æÑC·P<Ué…YƒÖjCÕL¤WzN40m¡ÏNJˆ'uéƒYôuÆDäÙËšHÌB`Â=ˆ_?¶{óèƒI¦ØƒHV:Ùƒ`Ouµ{H®;ÓÛ #8ÔŸâ7*bß%!ž„ `ß³å×ob~¡k¥!Ïsar·Š+ ±ÿBBíKMè­CôV?2s`G}ñÃ%‰¾Ä÷_DëËî$Š“Æ¬°^@o¶èâ‚úéÝŠÛ¤½„> Äc¨C_ŽQ˜¨0deÞ-•Ü0í%¡3IVyƒö8< AÁ³¶èöÉš·nåíð:{„Þ²ÊUå½Bu½’ÁüŒÎ£1qM­´‡‰•bkvÞ¢œêŸù.+Õò›l¿F®xn¡–·c#tÆfågŸP: i˜•‹cÌ/YÅ"í>®U+µj¸¿Ç·ÞÓ’qËW–”E]x„Akmœkî.ݯ[Nus½V,diõz|+ø“´½ßàãOL°kÊ2¿†œ„“ µÎa4É<*kÈ8‰KƒU6Ç vÙwªÛÊ‚¾p„£ GÛ×ÐÇÊñx LfÓÔó1¶\¿¬Š®ôK®[Ý ÷2 Y`—ë!p)î-ÅÀåJëÙ´÷ôÖ)Y¶» -6O_#„R‡ú“VÜŸCΟ'ª¸·Lq³M7ÓÍ1Š_¯®Ì¿€À„·Aßî€2Þ“Qæ ç[^çÑx¨ójôoÞšSõ,o[êÿ²î„6yOPT¬ú¹Ýqõ’ý¹ L®ç*¬³û“<ŒsnN?+ ö„!=d,ØÆ>ZèÙ•ñüøõ,»•eŸeÙÝ,›¹¨jð(˹ Ù/€6?³xŽ±íºœ3\²ð2Ù9vKCÈ_B0Âs Ï%Ðk±ßmmÕõÆIÖ™Ù[u9¯Ohú+G˜\¯u•±-”&¿Št:ËnfÙí,»T}ðÇÌÍ ^ÿÊ¿…„WAk}ožÿQä×`NØZo z}Ra=ìŒ>dÙ¶V÷cA$“ õNnÈŸžfR[(õ>¿Õp˜Ö ¡Yp…¶`"å-À»q˜eü|R@n†®-RÊ ÏÞ¾5=ª^¼ÈLxô]cù_´oÉ)b~`“ÅO± …§ãï<åšHÙßÙ&ж|6£U)62B(&^$V)¼Kok¥¬CæõD+EݯÚoú~Íp ˳™ g5&3Ãq{Œ=mºó>ï–«ž[ôi\‚³1y»X ÷X[åü¦ëÙeá arÎòÅÐ¥³?T¬r!·á9…q²iêñ·CB]ÿ¾‡x„ÉÍœ,¬_ü- ëÕÊÎúxÙs·‚B£Kx‘“ks'Æêá-ƒñiÞ-UmX+Úa@EÉ·W–· '@OË;Ñ…eY£§ ZOy¨.v ¢Nƒž6{`ŒýÖö\V± …`ü¬,U’€0ŸT+ÌÍ¬+ËÞ R½€]ˆO˜Üœ z³ZoÉ Ÿ?£¹ ¿ÂÏ©¬móV”OìLb‚_ÁÃC8}i—Ù—ew­hÕò±‡(c¥ÿ $&”®ý0”>—·<Ÿ+(F©J ¡r”*Y1¼Êo'4š0‚æ@猅>Æ…†ªV\§¬3õàCÂc Íã/݇hÞôíšS¾^]¨\.ïÖÊÕ\.🂅;•¿‘Ñ(Ý*Ä&Lî.œ?’èuR™¨Ap t uxÞ“i¾’ %_œ¤Ð<Ü>o~G³¬âŸ‘¯$:Á›ÕàM G{ ù!”fÄ óöúGóÖÐövåìrC(-ލç,’mïj!ð‘«¶_ñÒ‰Ýv¢ £®¸Ä¿KB<‰âµGÅÄ}‰lÿ6"ˆ[¡þ-r-P»ÌÄøˆ¨]‘oEo¨ÿþøetxÒ­û(­ŸÒÄÉëVü#ä¥!ï¯Ã÷¥ßØs¨9?Còg‡éGåtl:&§íÓŽËißnáIi'"ä ô“r:úú9m_˜vJNîÓï‘ÓùüÎFÈõлçäwQþç#ʆŔÅùZ4¦üÇZøŠô‹r:v6^Š(—Ëå¥Enñ›ãrú@#}BNG¤Ã«1º´S^‹¨ßìå"¾7‘‡\K9SÚTÄoQútLÎļ=F/è³zvszDïÝÚÁþnËŸuÇÿÆg-zBiwZêÒîÆèÓl„ÞÜ‹ÈÓý™‹x÷A„mÌËiG´Ï[ÒÄo.Èé£aÚC9íxãÝÅ—ËæQÌgâóÇ1¶¹¡KOä´¡Æ»_Dèðr„~>Ý…}Ð{_Æèà³™žÇÈÿ"âÝ—i¯"Ò~ö#ö'˺"¿ÛßH½Ë¶€Þ}Ñf~¡Ó_Ëi½ïÿ\N‡ð‹˜2ü&BW¿Ñëïäôá0mµ¥Ÿïþ2B_ó»owÙÇD>ô;g›Ëï×Áïu‰ß‰ñ€®–í-Ú%g•á”X­¯DTŽqr€£ôI/Çô¦-çð¤~O­:ëvÑ·?ÒV¬A&ÜZõãï~øá#‹ÊÆD'œ=mZqôõ„*ìzûVuªE;¾e;ƒlJû¢’ÑÕ¨¢ØH¨(>W/ §\p‚F.¾0²(Â_þ•IaÐÛ›ëÛ=~½¸²üêÍòËñ™GF #ú¶ÝgšÞrÊì¼zf­ZuÓõâó9мJØôÛ¨ïÊë•‚ëÌ®ú~»©AÒy+L­oðDäi ù œ=«[wïÊÏ¢zÝ•,§\ {‡ú»„üJkn©ZœÓ´ÊAñË×p²®rÔòl+²lå<siáÙëÇAÙoº[¹¢Œ8 ”¹:V¹i{N5gñìêåF B37ÝŒår9õD"RÇÁLSÄÀv™}¬‡À[ S;kê"w¶4±W+´J ;ÃÌÇäìì‹4(«€É3YöÎöÊv‘ŸI±j¾ïXeS‹; ñ #ö.ÿ5³¸ä`à'aqG ÁS‹‹éàk¾µý‘x &jaÊ<±ï’fÅT•’¦8”™(‡°-¢pGQm„ý ûu„ã¿p¨E¨K¯í*mЯ_3Á ¥Ï‚o‹97 ‘o‚¾iäXG•ç^KlÌTl¸z11³Û¿ôïbØÞ>­Õ’ư‰DFìnƒ~¬U MeË\囸I‚%à2èåÄb_ o%;«:†÷ûCl·F;ø·SU1!霪:š£(ü²u‡®¬Q¿bø”ƒðèK‰ Ň>u T;l, œ=—N…]>ýÀ¸Â°ñ ±W5b’aøtþ NdR¼~&sÍ):ÄOdÒ2q`S¸íÁH˜ßkçVXÑ~x¼á¼ª™‘¦tÏñÉÍ-·YÙ²Ru™_«TŠÊݨ¼ƒçès‰Ÿ#±–0 %¼úZû-ØfAg+ìs¸úÐÍZ~ùJ•YBÑTŠäš.^2–ïx þÜ(é½Îlâ èΉŒátkLÅD¦=*±•T9í±Æ‰è'm1¤Sì†#¯Æûh6CQ²‘LèŠ(Â}:’e Y“Ds á ßçÙì(d™ûÞö<§€KÖESßx_µ) ýÀeÐz~¦üé%a„1}–Qž‚J›JÚm”#ÛË /§o ÄþŠ„xÒCŠ6ÔF£<Ü9Ee8ZË‘RsXFñ"á)ЧŒu÷ªì°ðug>T²œbÝÕ•’ó4ðhóydzA‹ÈÛk«¼a×Ý ›ÌÔ•k ¶G(¹, )×~¾0®ª]$ËEà8èÜabw8ÚÜ>8Á.ÍÏ5k–j§EB]~úóöwZ£’ztpã6±(!ž´Å¸ˆØžNk?ße¢(MÄtÅf¨ƒ:¢‰ØM"=vÖ±çEn+É;CËÈ6­÷a0Rß*Ù‹ÔbãköºK!JÅ/iÌKSVW@¯WúrÝ'x{9ÊÃ]Ñ–¤@æ0Š*/~JÅõÈà 2ºÍÐê–k¥5ºÑDÙK–æ¬ø ßžL3|Ý5ßöÞóÓ~˜!Ûmt§ê)YœR­FVm‰®@ö+°Ã=º¶¨Ö]’Ø.‚ÖÚaÖûGâI[ ùÐi["¾¿MQ4ê:»æ-Qþ3 rxô‘»8$Ë àiЧ4¢‡Ø Ï€>c¬½Y¾(σg—Ü÷¶ÏJŽïÓÊ÷{«X þ¤•qUE'IÏ¿ý…±ÄÛ²¼r [Ži8ÍÒð=*Ìo'Fd$Ê00ÅÙU¼H˜Üˆìó¢]®·cTIµÏº 3#¼ú^ûû,1»Dl“ÛR­ÜYû9 ñ¤-Æ5”€ÀöôY¥MØŠÒæŒn ÑÖ6±óµ9ätÑÝpÏ2Ç^oºµb!pÇŸ­íÀ›\³™SÎk…ÀítÊÜQ sàÏ«–²ØêEø´ÞdlTév½XPm™&Q’„ÒQ¤v·L“Ð0Â^нÆJ;+¯÷gE­ù´Ç*o76#‡# Ú‘cb/‹‹«C’¹8z¾ÃKUGhäÖ©UcUG(²1¬Æã¬l¿ìNT_Vgç'‰Ô¼úBg½ex t ;܈Ý(0 Ú|‡Û ¸žUÔ’j¯Ÿƒ ÎNrçkL¯/bqÛ ¤ßÝûy ñ¤-ÆJ@`›z}iŸ´¢€Ó™°1#4ïõ{ÌÇ«$È1à0èá·þ$‹ØRp´V[§Ö°»ÀQУÆ:|1nû^£÷Ž=¥·S¥—@/KúÔ³ør}uÓ*c‡9 ‚ÄóR޽!'R\Y[ómº±–vÜÒíµÁŹòÒÕL¨:Ÿ‚6_Ód¤ÊÂM‰lÍ rÁwLRç+{NÁŸ>÷‘iÝ–øÈ›Ö{‡n/[÷Ü’j~®#×ÍÏ%Y{h/¥Ø"^Ö•evn#§jÿ7 ¡ÑþÊu¯¹^ÁöT[Ë(CÂ; ï$ØÄœ:"vYà]ÐwÛßþ»ËÀYÐæG÷÷¨:2Äþž„xÚíÈLKŠØÁé b?'a‡¦/n¢¶Ç‘ٛ˩jŽìö‚ÖéFN[œuà cÞ泊åûv¹eZÓõp´ÖÊþŽMÛ~>©¢!šxî6°Ý ±™Îfê‘(Ûݰ» à=ÐZ-Jsà òGèD’å)€ I6?Ö6É?ɳmVÝ®„{{ŠL—§ç¿ŠnG'©gUE¾êGiº)í†IºWΰa’?íbLQŽ;àMغKÛ¸š ‰qHBýÐfÅrEq7‘bɨvâÄv/P„4s‡-ÔýõY~NÔ†Oe)ß¶»î|º ¾f“eEçr«@R÷çAÏK¿ŸÑ?EQ¤ÐMr¸„†åýt33¿˜Ù³ £ªÃóYè7áIÐ'udSëEf%=b\;¦A§rNÏ‚Nncïü–ÂþÜЩ—‹Àk S˜%vç€YÐæó±]ÊëÄ(MƦÞß ë”cš`b»˜\|Ÿ½lṉ̃C{¿Y> „[¹«#¦¼tbä=ÀEÐæ›¯Q+,fO%’Æ£†ëB‘‹/xMÕØI”£ÀaÐZó¶jÆNìú'@›Ÿ?Âaž›wx¥zH ®ZÊÍIvxô4sÐÂ4Äv/0¹f`ü“f i€Î÷|ʬ\i$ep ôT*MZA3«´H®=¼²‚Þ=f±œ÷6žÄì9FMnIÞz_ú£Jb¿_BŠžF«U”ïóLhÌŸãýîÕåãrío‘kê+Ÿ‚64õÝõ3ï–Ë6_Ýakvu˶˪…û9Ø.dêAæêDwx=¶/]@Q-ʪõ¥Ò—£Œí×Ù]"ÕïÖft»õÈáæn‚¯ïX;ç€WAkeU¯“Àk 8ºª:ßNì³âiw¿ð¹¤›œm$ö9 ñ¤-ÆC”€Àöô ÂãæŠ²Ñ©x´ÖØ$ò,Ö>ß¶™†DÀ!ÐzíÚŽKÊ?r—ÃÂ^d<¡˜•b7¼ úrû±ÅL#ˆëÐæñƒñá~ÁæÛ4Êx´ÖðL­=“qÉk«i7$Äþ–„xÒãJ@`›Ú³0Öº¢l·˜|{6Žøï5Á["ïð}4A›§Z¢$íð6èÛ?•6o)NÔ,eá±¶¿Í[BíEäRkó– Ð„ÉÝšcÒæ‘$ÃÀ  “ÜÏÓæ=– bôhú ±“OB¹ï[­ÏEEðÃ*º6™Õjå" ö]âÑooÍÄ¡£‡%ÄcX*ýòENª"-£rûA÷'¦$‡V¥‹ãc {4;©&O¡Õ$zú©±˜®(…Ãë­ÕpùZC,*‰1,!ž´kMºBÝLyöŠI¹¤ç·H"ùF“–ù->ñKÿþ¦ÞÝúû?PZ÷Ÿµd[ûîÖC÷sÂw~ª7°ª9*’²DÍÿýÿôôw™ÕÊ´Õºj• áƒu·Xt·xPøÆ¶÷qÏþMÍñìBë) _s‹… å j$>47óè£uíê [ÌQA ÊÀ„©8´ŽÓ'!ÃRQ_Ù’w¢V¶‹%£ê‹îCF,Gê*‡N)ôHØrC¡b)Ä Óö|Ðë„„-±×w/V$×îU¿ê¹âƒOO‚>™ãØ–ØõG@¤ßTûSâIÝ6¥ ~°Mb»ØAÛ$ö=¶É6U'OHœ¦f›Äp˜¢m»^`m“ØŸ’°S¶)<›×"-Û.am“ž Ím³)÷V±²i©ŽjÀ&‚>Ú~û8› <úXúöAÏq ñ¤nÒ­œ°É&:i?róµ¡} íú5OÕ@ºaâ½]MU3œäx´¹f*±–°ev(5‘oï€ôÀ(„vvÈ@z¢Ÿ„ dߺSŒ[gÜñª÷àPæ“m í2˜áQÐZÝ–™yûcâIݘE_gLDž½ì ‰ôÁ,&܃øõmù»7>˜aŠ=HtËoêAˆý1 ;Õƒ„IìŒy„Iˆ0…2ƒ0 @¶lgcSùÚAÅÁLª#ƒ0 ÂŽ@ˆý°„Ú#H®;&Ú 3gõ×ÀŒ €ØwIˆ'¡Ø÷lùõ›˜_èZ)DÈóEA¸ z¹!OZˆýS ñ¨‹Ao¢·ÄŽ™;ê‹®¡GHô%¾ÿ"Z_v'Qœ4f…õz#°E‡Òª³—È“Àöì˜ZtK•Z•G±ðkMýÔW™°C&< Z+Ôä-¨ÊÅFbœ“OÚµ÷3Ô˜@³Ú;j*ÎJ&ìâ1,uÏé5Šâu&ÒsJH©57-“P½ÀL},ª©É­Bi½qUCº!àÐ)lé%v{£ GÓ·'b?&¡ö–^C~¥}ÓV>^Ѥ![/ð0èÉéïx«þfÅERU·~ã’»Îf4¤ÞdÄͽ~]&¼ únúzMìg%Ä“º^]þª­z½Ÿ_F¦!Z/°´ÖFíH‘µ¾Ú¸úŒU\‡"MLÒikS´M§w×ÈçG2Þ7v«:K_á=Âç Ÿ·_Ù¿‚‚¾ý"}e'ö/%Ä“º² ÿº­Ê~0Ô~ †€½Àˆù6E•ïŠSy´ßë¸ [Òë,³òy×+Ð^ŠtçÙV–qãUŽ´My¾ýÚ¸Òo°¨”ŠË—wË´¹Ú| ¢à?‡fÞ¹ѯaŸÄö&èœ%ö·$LæÜ¨º­þ%ÿ‹¶Úêž²†X½âIj¬ÐÚiHwxt’×ïŨî/ ®„g@›_¿§¬ºÄþ¬„xRWÝo ®ß´Uu÷ë´mß@e “÷©Îp‘H{Ñ¥¬=ïKÖ\Õêßà=Âk “ 1£Êß@} ³ ÍCL*«2±Ÿ”OB¹ïÅ!ŵ¨ýhì·ÀPüª/°K׈"¹î4Eý ™þ®³ð2-P»x+r`·âÄ®°­fÂéCÉL%^«°û“,<'7^ªæ-.-³ýñu+_u½ñüvq"ËJ•‰ e‰‰Ê#”.i4”x¨Â®1éˆä¸º`¿‚0„C ‡Ú§a±r¼of“ÕSÆòüj%0Ë~RaâïïjÕöÆ7ùŠ3›cÓêUi¡ØÅiæýÅ…(‘ón00{»^t**·Ù/€ÖšE6¬âQqÕ[Î-ð˜LËÉ?Ø–oö%ÇHº–JYÌfÆbÞj­]Ôìè†goß™¥ÅE:pJIc7nܾ½´¤áoC^BqÍ@cÆÊñ[ð˜LUU½én±ßÔ¬`,[´Õ»”…pô`òu[𬭷”e.%5ããӹ뷲l:Çÿ÷Ù- 3þ÷ot¸noÉÔí5 g}öÞÏ…3Šg%÷½cû£죲˜¿‡h„,“TÃóTÌÔ ’GÜõ™›ÏÍÍš$‰k'°)¢¼á׃“å±?Z}Xñ'È¡ó¨µé¾5C‹êÑ”+k½j{[–Wt‰½\ ÆKïÃ<Úëëv¾Ê¯Î‰¿$+6C™ø›‰fhxLÚxåÖªEÇö|õÒþ[ˆpô°±p¯Jò²×îpYb;hÖÞC‚àÏéå_ÞȲ Ï­U¨Å«Ußò1ë¸ø$hût¼—Y!|ú•q¶†JÆkÿ<„!=d,ØÅO þæódo·ßÝ™i QÿˆGxôEcQ'£D çæ¹Urå2k¸2ÿ"ä$œ­µðÛ$óü.Š7É\üKœpô|:í¼&ÓiŽ1)±^#—w·§\sk>û >ÿø¯@8ÂQÐ£Æ‚Þ §Ô¨¨¦klÃ$—wèF‚,a–C9RJ÷RæàzTl[^–­Õ vub¸AûSKxôuóm‚+‹ú¯B<Âä´öÉøûÓî,”}fzbÛÿMÖ/þd'LnâµëeAþ.˜vîÒ$’mïj!h_¡Áú×`÷÷2I6MêMäßCÖv%\¸ª5*dþ*²ý÷Ó)‚¸6¹¨]|Ä^SqþA&Üš'a©ÜùÂ)WkgÙÓ{–˲vѧ HVrìQŽÏܽ{gBôj¯¨W›e ì¡ûAUú õHx´Ö©ž&é“H“0R{ãYy›½Þ.ÛÞ†ã—rìMÐÁ-”lÏÉ[eöZŒãœà[׃FëÎÌäÌ›ÊüëŸP\pñ81Ë8¸¼c{v9iÿ ÿagmãÂšÙÆSqþLxÎX Mqöd¢CPì"~œ€ÿKhtiqt#wÿ ±ëž}2A¶1Ñ/þ“pôˆ±’•¯ø&×Iý’Iè0 Zo#ÇNzrˆ_6©wæ˜$» |úQ:ŠrøtrmÚŽŠ2 \½”~kFìŸHˆÇPŒk¬IaÃá mIaVÑ¥sTAïôYœøÙ­8ÿM¡Ñn$WÚm[ÓÒ·+ÓÑþ‡ØwI¨ßÿ‰ño£j—Fä[Ñ!dÄ¿ ~žôFk¤Jë§´}øÕVü#ä¥6ï×áûƒÒoì9ÔœŸ!ù³Ãô£r:N1“Óö‡iÇå´ƒï·ð¤´rPúI9qŸFä´}aÚ)9 A«NG¼wFNläWð;!sÔCïž“ßEùŸ(SZäkýýјòká+Ò/ÊépN.E”Ëåˆò¿Ò"·øÍq9} ‘>!§#nÃÕ]Ú© ¯EÔov‡rß›ŒÈC®¥œ)m*â·(}:¦ gbÞ¿£ôÙ=»¹ =¢÷ní`·åϺãã³=¡´;-õFiwcôi6BoîEäé~ŒŽÌE¼û Â6æå´#aÚç-iâ7äôÑ0í¡œv¼ñîb‹ŽËeó(æ3ñùãÛ\ŠÐ¥'rÚPãÝ/"tx9B?ŸîÂ>è½/ctðY„LÏcäñîˈ´Wi?ûû“e]‘ßío¤¿Þe[@ノh3¿ŠÐé¯å´ÞÆ÷.§ÃøEL~¡«ßÆèõwr:–W[ú9ñî/#ôõW1¿ûv—}LäC¿s¶¹ü~ü^—ø½‘èàjÙÞÊ»¥R0ê _±Z_y´úÚþPñ¾ól¿V¬ús^! „6ì9~Ú/?V]·èÏÎήÞV¬ü»à“·Òˆã£c3£?D8<çCÑ8®ƒ^o8<²{Bi†wÇ-üEuÏ_ÖÓë^”öÝq‹SÏœ5Ïò¶§–<«do¹Þ;j%·.þ˜Z±}·æåmÊß´<{j¥0U²òžü½íWíRNx?Õ+çÄ›ù„ôèê'zÔ¤;ôÙÛW+ãc3‘Ú"­õgßЖÿn×.y\sSH(›·V7~7«ÕÊìÔÔâÊ‹ÜÊdÅs¿·óÕœëmLÁHæÆf~ø¸Zy·ñ1 ¢rŒ)ŽÒMz9¦7m9‡'õsxjÕY·‹¾ý±èè‡ n­úñw?üð‘EeCš(ÊLƒž6­8úÆzBö@½}«:բ߲A6 űêo“ÒÕ¨¢ØH¨(>W/ §\p‚F.¾0¤ƒUòAXý ·7;×·=züzqeùÕ›å—/â3-m@ŽêÛvŸizËI(³óꙵjÕM׋Ïç(òF(–÷VMÚ¨ïÊë•‚ëÌ®ú~»©AÒy+L­oðDäi ù œ=«[wïÊÏ¢zÝ•,§\ {‡ú»„üJ^n©ZœÓ´ÊA±5KNVàÀ•§¤Å¢º W¢_çnæü2â_À™ß»|²e62{‰=±ƒZ±(ïÚ6óÜÛvùú,+¸¬ìV™]pªôÁf]>јîÅ—ÏŸ?~5w)ÍWFjMÜ­þ'&ëéænõºÕÂ×fÖkeåã'ï[›MOS•NJˆGTñ¿k«mcú{U´-ß°àæk%»\å[Åh§Ø /ãÉz{êºÙ¡ §3Ÿø‚š‚k]ä<#! 1¢– û›T1N´¯¯<ŒMÜ8GxôQÑ"¹î_-ÃÓ¶{€Ç@K¿bˆýq [®ìdÅP³)îw>Z«„"¹XµŠŽµ1djcŠcv‘Õ ±–OB5sâu­b{N©âòáõ&FQÈý¨Âs Ï%XG|ØÃwð<èóé×±gâѬ£}Æ[   ¶\£Y,³MV<Žäl޽øêÙ³l¸/þ _6®V¬êæhV9ò ¤#Í Ë(qfz&Ë,oƒÕ¿:>¤[9¯LB=/òe‘»Û4ó2ɘ¿énåŠvàÁ¨Ü²¯°s5gñCoV¾zœe¹\N}ßp/ääœ2u'1{®ùÁ8)Fq‰W_¦ÉNÛž‰}—„x4íù‚©8´$qHB<šâPf"ït€A+ wfJغ_G¸LÔÆÅiÚqúIÔŠ,«ù5‚Ç!öjyÑÑv Õ¢=„÷çAÏõ®QE»×R¾ô¥_z˜˜;³mMªAþ…îc³m ó4AÛý> W­QîCÀã Íá(…è âm ¸êæF8 ¼úZ:zq˜MG/†“ ÍÇÛ'rìe9h<ʶ]àáÖlæÛUÕ¶ƒ0|ú‘±p÷¬*ßÈX´¶mí÷v‘N‚o»5~ZÚ}o{ž†Þ¢i†èL¾ª×~–Fq’̸Rc"ÿ’ØF,(¦ÕÉû9 ñ¤-ÆJ@ ¾Ë³Sç¾¼sEÉè´ÿõ‹bût$‹¼#a~*îWì¼³tî$b`†l’¹Â:ƒ^º¿E— ¦ ý=[¿SfD§ö%è/k{ÈØ¥Þ.ê”w»lðˆÄVZîN[ù‰ý1 ñ¤-†Tðí´A+J&ÍD&`ƒ­eÉ»&©ìÀÉ3w¶J•Õ|›Bý ýÖ-ïqž=Ÿ¾YûÏ%Ä“¶gQÛcÝûù°¢hç2¡I}PÛ¼[WÆö.¯3 €>’˜åîçë㪶K²œž­åz©Ù.±žmîjeÙxè”ÏNd™g—‚!¦ÏJŽïÓ“GŒöµV*ÏAÉ ¿ý…±ÄÛ²¼r [Ž1u:‹#­7ØŠìSiƒªB‘(ÃÀÐ#íW¨óx‘ðh­‘Ksè~æ;Å ¿.nǨ’êtóy˜á=Ð),ùœ“ô¤ƒK>Ä~NÂ-ù0”€ÀöôY¥ýAŠ^È„½á h­åx1Ý$ØgEwƒîóÈQ´õZ± ÍtÑJ¬SÎk|å§.„òøóª¥LÂ>ýT»”[K·ëÅ‚jË4Š’$ì­µ+O­e…†ö‚Öšðiž]Í2©«ËŠZói½®éf–0È7mÜÙ!Äw\’Ì}ÀyÐz¾nr˪ŽÐÈ­S«Æ1T¡XA×Û&zœ•í÷݉êÓ F"õ/€¾ÐY/€D^ä6™*i˜­µM¦ù^ f·¬m¿^Kª½>‰3 œä9¦×¿ ©ìÐZd³î–ØÏKˆ'm1.¢¶©×—ö+ HG»æ½~ùx•9=ÜáÖŸd9 ¼Z«­SkXˆÝ à(èQc¾˜­ï§ñåî\ê½c÷»ïTicÀ%Ðæ ¢O=+È£ûáÊtcÈšCcÖ0`ðM8‘Á%ׯÒÊÓz­È—x7íb%ø¢X—R^འS%Œ¸“C7?ü¢» ¸²ÍÖÜzÃr¡És þô¹\¾R»ûyÓzïÐ]Nëž[RÍÏäáJ¢ù¹$kß%¶uñSŒYfç6rªö/Ÿå—ÎKØä¾÷5×+ØžjkIB]Þäþ–˜¸Ä. ¼ únûÛŸqXá,èö³¨:2Äþž„xÚíÈå#¶œ¾ ösvhúb% °M[r9Uí¸š ÂÞŒéÖ†Ö ÷³.ïKh´~fX¸×ACÔCÀqÐãÚe×´í×Ù>D"ÝÞd Ó°»)àl¦¤Ý ÛU(2á=ÐZ-J³$o•U­‹¹\mî?=ÀÐQö.¶6éÐ/–$ä=Ö¾]Íòx%«’c¯måÍÖReÃ_âÚMýe?p0S?qÔní&vÝÀ!ÐCí×n9TrÛ¼‡¸c]¢{ý vÕrŠÊ$Ï1 4Êkw?~U*ɯO»%öW$Ä“PîûVë]Toq­ôdÆ´ó6*bß%!}ÂLœ@ùj¸@<†¥r2&¸‚ªtS¨'Bi«bBúrhU S6Äqº³3 -h¬1‘^gßB½T”o&.OÌd§5ôšZ¥;‰3,!ž´kí:F ¶òð€^ûc<]Å—‰Ò#™DÀ‰ˆÈ?™dãvýþ”Öýg-׎Ûuè~Þ-—mžsøX?ÕØ[j¾‹¤.‘‘ödô4x™ÕÊ4ÛóÿoïKÛ£8¶4 ±‰EH€XÄR‚R•‹A „dcÀÛ×ײ¹©ª”T¦T)2³t÷íéÙ§{fzö¥g½=û>Ó==ÛïèÿqŸû­¿Ì3y"ߨ ¥2eEDVÉîǺ$Ä£ÎZÏCÙu>ÔzU¥ì»%Ä“Ré÷rY,ÿ|3§t½–~'aT”}›„ëM>Ó Øõtúå«„_ˆt UAøhó;äÊÕBÙ?•Þt ³hyñìbÂá*¾=V^¶ÈQ7f•ur#PÚ`ÄÆ ”I`sÖÌ{&¥åùBzg¹ek®¢|àf&ƒ OÖ:ŽIeClœ‘O«[ï´˜@³Ö‹ž‡Tf‡¶÷IˆÇ°VÔ¦Û¨ŠÛ™8£)µ‹‚«luHˆGS†£ìZ½ä!Þ ÅܲêÙZâj?ðè4/<$X˜”ÝNàiÐÛp·”²ï“OËEWr*ÙLÑM²x7c«CÂtE7Ï÷zèJ`ý–¶MIܺ峢㺶·ìT¹{)Uµ…0®òf ö(„yt=ÝjÁ¦¬ïH˜îÉ„¬ÑÎÅYë"ú·páµM ´w µ--eóó& -ŽflSÜE¡ꛚ¤¼l«ì$ΞéxÈ> Ó1º<ÛÏ{¶]Ê^½~{Dݵì=4aè.c®zJóìî?DFË*36f{@÷3ÖÍØ*cnÕq—²W‡‡Õ+ì>x!ì­µc½~ÈTgd™OdLÇLùÓÎUÞpóçW•z&;AkÝŸ_‰sŽ"1<… áÙÒ|޳«ƒƒì ÷–%"‘gÕëplÆÄÑdy„³|…­wÐä•HòrÁØ^¡£c¬ßµKýêŒ?³„# GŒ¢Ê8wÎ-|s/Ù½xmP½8’#n~›vG&Û´ê}ôò˜ÎÐuf€½ 3¸õCÏü ´Sóy©Ìäc0Fx´ù,|p€=‘Ü­’µLF(hf9‹Þ›½²ÞX‹–·XVæWjPù°bËwy L§qO°—ülõs­ê·çW‡(ê½2ƒÒùoÙiŒ!ƒ—EÇÙŒi,f‡sldpPêM•–V]ë‡y.›3Ìb; {u¹È R®Úݦ>2E†ÕEñcä-0QìE?c1ê«­ +ÖÜw‰§™{†{A›ŸU˜Já9vc&?ê-þ ”z÷–·ø ä-0ÿd€½rp·c-h÷Ry~ÞvÉ«"Œ—y¥w¯H[ë<ƲEuïÓåà›µåeîÛwO•Ëõ ÊòÉzÚ°\W¶.,ÊÏ€KBéd¬!Çcñ¬&9„ ̤‘\Ð6æohØK/Á7áè&^=Häãò˜ŽTŸ ¤zÅ‘Ì%'t=àrÀo3)óù)x#<úœ1Ÿùyy^3¼^–DU™éÏÀ(atÞ˜éÂ|Bë•«æ%êõ98%,€.˜ÏãÕ«èx2ÏsA¦aül¦7 Tצ/·ÀÔ ÔO¹‹+°RÏ”Vˆù-JN¨Ã« ï$È}v-FήoAŽè½›èßMù³öäßø "'”v+Òn”v;AžFcäæNL™î&ÈÈXÌ»÷btc\N;¦Ý¤‰ßœÓûôrÚÑÆ»“—ëæaÂgâóG º9#K崞ƻObdx:F>?Ü‚~Ð{%ÈàÓž>NàÿYÌ»ÏcÒ^Ĥ}òú'ó:#¿{ ‘þr‹}½û*¦Ïü4F¦?“Ó:ßÿ\N‡ð“„:ü"FVš ×_ÊéX ›Œsâݯbäõë„ß}½Å1&ö¡ßé[_? ~¯MüÞ‰ hßlÕ^):KK–ðChE_y8ûÒ^]v¿tmb(¹¥\`ò.ØcüzÊWï}Ç©x£££3¥×ËVñMðÉkéÎZ¶àjÿà·1ÏÙ5Žó çlžPšáÍž‰?öwüI=ÝüfÏdáiyεܵÂÍòW÷W˜ §üôGaÆö‚yhÑö Þ¢åÚ…™RaÉ*ºNð÷šçÛKya~_/‰7‹)ÉÑå r´Nvè³×/f²Wc¥EZzŽñò±c×–Mò¤î¦”R1oÌ.ù½_ôýåÑBarfâY~fhÙu(zSÞq P’±«ß¾Ÿ]~³ð> âJ,K’v*ôJLoÚr ë—ðälyÞ®xö{ ½°©ùïãÛoß³¸bœë„à‡M޾1ŸRƒÝSïßxÄóäžMv/-’¤#«qU±RUÜW¯ŠrµT:¹äʽ| úk“Ê ··ol{øèåäÌô‹WÓÏŸ%Zv޵qlS(4½UN©°ãê…µjþ¢ã&—³e#”V¯ôû¨oR*륒Sõ¼  öº9Hç½0õ¾ÁS¦ÊA(DÖk»7)•gR½í–¬rÕ{“ö“–B3%Ð¥Ô{ªˆqÚê‡JP‰–à‰†‘pÕºåÞº·D¿Ï Íñ_eÄ¿ o~3þdtûâ{líÂvÏ­1×Y][°«#£¬äp×>v‰< ®±E+Ñ;xûäó?~ô,é2³xb60R7¬oÏP=Ýܰ~`Ô0oß~ïíj³¥ijÌ! ñݽe]Èæ{Q±é¸½’Sä>j¸{HºU?Ãkw(¨]W]ÛÀ.áÆc6º,k]®¿"! 6bUBü’˜úìÑ̃¦p—œãÐt˜ŠÍu÷l5˜Ž&d»xôÁÖ7 eß%!ž´š„VnùžýAÐZu›ëžY«R¶â¶àd/] õ*èMĽzx¶WMv£v·¸MÄûÝÛÛ&»ñžÀtÛäÒ¤U)Ö*agOÎãÞÖ¬ªŒjC‚àÇlòŠLïA;æAçSl3> OÈwGfƒ-ßê6£gXB<šmuØ®~œMêq¢Y-7 ÏÙ%jcÏ>}ú4z̈sº„ÇDxL¥–Cs¥Z ó§Aª±ÊÁñ*Õ’)l&Õ CVͳâ†,áàN˜éH±òEÙ·IˆGsÈ:cÊÎ!è†@<šìPab-Rè¸"sÝ™z ³‰[¬;óáW‹’7héì~ͪTÖXÑ©º\+Ò’N¼Ên¼G8zÜÈ Œõ¯æ¦ÕÙ1<Ñ4¸æÃ  {2u¯Ïü íM;!Û_f=a¥qìÝm¬÷»è¦‡F½‹çhSˆÎ@ ^Ó ¤¬nÄO?ð h­Åu¹8 ÌεF.zC ÍùŽåÙó*¿ßc—xlñ9›¼É«öÄTøôCcæîX~P’Gš¬Øïì E+$Ï÷äÙ‘È£·xD´Qöo.o¬ ·wRlÔ_(ÝR¶-0™7+ý˜„xZ͆ä4ÖÐäÙlpßE»"gÔýµ;Awêp–‰ó~>>!˜øœ"PC6Ä¡_u~]Ô Lµš©€þȸµ{ŒuP>Î#‚ÍÖÁ£R¶C.´Lø{3õxyñ´šc¨MÒAš'+rvzw<Œr”#뚸²S¤Èœ9:›EZFWcƒYòr ¡aÄ=õÞã8”Œðè[Íl)ò€ìù¯ÕEÙJˆ§Õlœ@ lŽ`ïë,ŠÜ„@­µ™;ÀÜ$ᮯY¥ojžO{¹B¾iŸF“ –¶øê•ràEâ½8zʸ¡ð«½"Þ¸"K§ÐЧ2ëÖ¢š­y'¥l·q+•²ï’O«Ù>6OóöËK™ŠöAã{2Ñ`O¦CËðCy‘µîÉ1Ô½Yu«ü„¬?[ÕA)q}ø´ÖäKMÈûД„’w¦VKe?%!žV³q5 °9BÞŽ%yEæÎB¦ Í&£N¢&J%>²X•†ï³h‹gñáèíÚÔé*÷ˆ¥ÛÀ‡ ÓÔ¶„åÊîðèmж³Ð0éh[Gýì¤"; šFغ£ù]ßY)Û~ [Ö”ý> ×û mçP›Óõíæ[~ЬõgÂήµÓ®[C±;2;§ç™C‡@J­cÛÍ·CU{4âá鹩x,#;8oZFÙuOƒ>m,½9–•"›æ˜k/S-•=îãáSuvȈÓ>àÐæ»Ù][±ÜjÀ[ž1u‰€ÆvÖ3òcjhç\U ˆ•^à Ð'š/Px‘ð$è“ÆÍsŽyåJ0W®¬%ˆ’ê˜55#¼º[ ý’œlãVe?&á6m5œG lΘµO:—¢È ݾiJç 4G®h“*ÎB¹hUòìå¢S«”¤ÚDìéóçp¼Þ¸j-K‘‚¹ËÒ#!¦Ô7µ=›Pí™.¢& ¥ƒÍî™.BÂÌÔõ«z9& u9Ñj­(XÕµh D:0b—”cÙÏÀqÐãÛl±\BÓ™ujÍx MG(Ô3lÆ£¬j¿ ôN4_.h¼Sl%béðèsÛk+YàÐiÏØ¤‘ú3xÝýÍ㑨VeÅZóê­¤:ê;CÀ1ÐZãžÚ¨/.sR¶÷@ßkýpKÙKˆ§ÕlÈW°›8êKgOÌ„¡ù¨½  1_%FŽÅÎtï6÷þÄKðh­¾N­c¡ìŽ¥)³¡ ŸÏÕÏqxòp.މǮ7k´àhóEº]+`È ˜´ª¬è,Í•iÎÊ'ÒÄøRž½"#2øoÉñ|ÚÛ˜¯UøÖâ¢]Y¾X÷Ö«Z邨ìß´Ð}©eœØýQvÀ3 Ï´¾¿ ìÏJˆ§å *»ÀÛ¥lw·QAe„é(è:vVUM'áP žfëÆnèƒpDØb«uƒ²ï–OËuC˜‘ñ½Uº!Æñ=Û«{ SÖ5UÝØ}Ø"ÝØ}Ë>Û¤{ µu#6×½\Ë?ßÌ©°˜Òé[¸F@Ù·Iˆ'¥ Øõtúå«„_ˆìøª‚pïNRöSâQgƒÞŠÆ˜ÜD^¼p†Ñðyx+^^¶ÆQ7f•u r#0"C­j³Û(“ÀælýöL:KË5r%÷ÎrËÖ\Eù(m vOÖºU{çT¹Úˆ3âiuëI¾¥Rh½è±~evhgsŸ„éÜ T7šÆPc™X£)%¡Ö›ëOÀƒ µ6&by:òTß—PU3âªÈ@3Ý.|ëf&e·x´Þys#ù¥ìû%ÄÓrù½™½×TùÝç/ÚŽKËŸVEƒÁàaÐZ[!±Œ•Ó–db­x´VH5I¾é%¼Z/ˆ‘$Sö9 ñ¤Túl(ÎÅÙèâ8ÝxÆtL2ªqH¾@mûJÙè½îooÜG¡ê˜‡C96ô£>‘ úÆÒîD"?ÀÃc~äO/–æÙÝ!~ö;ŒÔš]ccÌõ³#ÃÃ9|8Æn ª» Ÿ„^}јÙsËÄk¸)˜-ÍçhC, bŒ­iðù¼žm>\fW˜¡Î”4%NÑÖibŠ{ñçþͲĹÃû¶_Å)°E(9¸jVŸ‘ÈÇcä-0¾ëöû”ü•}î*‡ßr`O¼|IgmÏ//Y¾½>x@è˜H™)*@ŠN o"rA ,–—çÑ ˆûÑQQ¢@yίåX¿ß?x^”G]¦Á0áMÐ7™?³‰~³+ÊLJ7Ld/U†LÞ`uýŽÄxëË‘#BâËþÒ|ÿWêüø%L/†º–I±–SÔ²Ò2î¾:PªÕ Í];¼&W¨3Ϭú"Œ2ãƒYÂÐ#ÆŒwCB—ü¢åz:Bù ¼vƒî6櫯!”ëgiyAch|¾û@÷}êîxy‘jÝ]K®»+:ºì6Ææ­¢ï¸ÙâZeP£F?·„Ò Êô&9NÕ÷ƒî<Áx¤ìfRÕ`õž„òo“0ÝYNǬ½Ê.îÜñŠý²5U4Íy‰R ÔŸæ±ñ 5 P»6bߊßöÿ>E~<éè4q<2Š¿Î4Vo~¾ß-ýÆŽýëËÓ#v°‘~XNÇúÑ9mw˜vTNÛ×ø~o$OJ;Ã¥—Ó„i'ä´]aÚI9 {̧bÞ;-§u7Ê+òë‹á9î¡wÏÈï¢þÏÆÔ K¨‡sþ¢¿ßŸPÿ‘|Eúy9ýX˜v!¦^.ÆÔÿ¥ßâ7³rzW#}PNÓ.'ÈÒfux%¦}s›Ô‹øÞPLò‘z¦´BÌoQúpB^Mx$A.è³k1rv} rDïÝØDÿnÊŸµ'ÿÆ9¡´[‘v£´Û ò4#7wbÊt7AFÆbÞ½£ãrÚ¡0í~$Mü愜Þ¦=ÓŽ6ތȸ\7>Ÿ?JÐÍ©Yz,§õ4Þ}#ÃÓ1òùáôƒÞû(AŸÆðôqÿÏbÞ}“ö"&í“ïÐ?™×ùÝô—[ì èÝW1}æ§12ý™œÖÑøþçr:,€Ÿ$Ôá1²úÓ¹þRNï Óf#ãœx÷«yý:áw_oqŒ‰}èwúÖ×ßÏ‚ßk¿w"ÁÚ7[µWŠÎÒ’%¼ÐYÑWξ & î—®íQä–1·” & ö¿’ðÕ{ßq*ÞèèèLéõ²U||òZº¡”í¸Ú?ømŒÁs6dã<èùºÁ³Î<¡4ÃÛìïø“zºùmŽÉÂÓòœk¹k…)Z^qÜ7^a&\%¦? 3¶L‹Š¶Wð-×.Ì” KVÑu‚¿×<ß^Ê +ðûz D¼YLIŽ.o£u²CŸ½~1“¸+-½Â[6É“º›RJż1»ä÷~Ñ÷—G …É™‰gù™¡eס˜1yÇ](@IÆ®~û~vùÍÂû€ˆ+±t!X^cÒ+1½iË%<®_“³åy»âÙï+Œ®…pjþûßøöÛ÷,®'À:á0èaÓ†£o̧Ô`÷Ôû7J<¹g“ƒZüôOÓ’Õ¸ªXH©*î«WE¹Z*\reÈ^‚¾ýµIeÐÛ‹Û7¶=|ôrrfúÅ«éçÏ’ -;“Û8¶)šÞ*§TØqõÂZ5Ñq“ËÙ²΂ž5飾I©¬—JNytÖó‚‚Øë:ä ÷ÂÔûOL™ (¡ØýÕm»7)•gR½í–¬rÕ{“ö“ÜveJ K©÷Tã´Õ• -Á #+0àª,„×Í·%úenbŽÿ*#þ¹òЧ#+‘¹ ì±´ˆE§gç֘묮-ØÕ‘QVr¸K»DäÖØ¢•èº}òùÇ?z–tuU¯K²J(¾5- #·ÕùuìRÂÚú¿–¬ÕHB¹*”KÒî;R-ɰ$–»@Çòø‘ÈÁãAÕ‚¿¹#ö\#FpÐåR`–ý5¶bâÉ7Þ K0ĘO‡ªw"Ç$_ûA ũȱ|>¯~6iø$”¬ïfu‰|HE乞!ã²F¶@±ÂqôøR‚ûƒ?Xmì×]? m<>™jc‚™Pó¬…83Aø)èNUû”ÍʾMB<šfÂ9Svz2a$&;T˜X—è–™ÃEhŽ2‚o9þ û#L]xiûü ¶ð<ÇÀ¥Ç‚o‹5> –¯ƒ¾ndºÇºoW?C?3œ­ÕÙ%¬C$¸f¦ìî‚~˜b¶ ÞY(;áôhó¥©]ÌqUŒ8˜NƒžN] vñZ‘³#Ъ#xÿ@ˆÍ–Ê®ØÙ©Y!­µðÎnGfpM‰8œ§¸®ˆÆB^,Õã»p^}ÁH@ä·z6ŽÛª61–Žeê2ZÑ`÷@ß3n°=<ˆ°ªãÀ‡ µz±u¼/tô™Ô”â;Ì‘DMè…Š^}¥ùš@Ùæ@çŒì$¥ +v }Ë‚¦*PÄ×p ´ÞŒüéÑ0~W‰ûv'¹ç¦Èš´õ!Ë}j-–àyâ°”­$Ê­žk‹Z͆´’n8óÚlޱ‹Ö9£…õv`'èNÎ2qÆ&Âå~ªt½¡°ñ¾j%S§AëÙ™ò§„&Œ=ZJy2@y®YJyBÊö"è‹­×Êþ’„‘ø$­bãj@`“”’–9; E<ŠRF©ÈûA`—ý[§~ ÿlÎöWl[9ÀÔi¨áÐz+rqÕyû¸X,{¾³tªöKj“Pš†5Û~éƒx Âë%¾ Ø4”}¯„xRjš¼iæ]ûí²SYÓiñ 6°-s xôeã–Ù­3 &®   ©µÎ^¾I’|aÓ†¹ Ý‚É/e7 ¼Ú|ò«”²—O³GjqŸ²½ú~ë‡HÊ~BB<­fCšÿ6q¤Þ+¶ß¹£Éh;ð èƒÚ£u4®ù͉zliƃ:—=¶P~gWù°]tÈ!¹+áÃxΪ5L¼w§@›O`\Û¯¹Õ`^ݰêÃźã]¦È(Có€H­“ÜE»©ª$±r8:½í¼Ä’²;̃Î7Y[N§E ÀaÐ鵈º7|âã ñ´¢9®o¾eÜ{r:–ñpx´ÞØ™ $–rübåð è'­i•qà4hó5e+‚²ÿPB<Ͷ"Îf¥äm¬ÕÃ7eÿTB<­fãj@`s¬ˆâPŽç4Ží(²ÛŸ M‰þÌ:CÓ¬ˆzL½4Qñm·jù)Q ˜Ä&…¿èÚz®T~W.Õ¬Šj÷KÏ“6õ¤°€¼Ð¢ðx¶U\!Ò-öÎ&×]´$·zÉ“ì &,Õ‚H¶EŠ'£’G¼ŠÍªµ¥9ÛUíE΃ƒ µ Mµ^¤_ʶ tWëÕ÷<Þˆ§ÕlÈ7›<¡tŠÜѪn;Ð|.åêösîê0«T* RDƒÚH' x)ÔVUÒ‰ýnà4h­a[MÒ¥5qÙ³h«EŒ²ÿHB<­fãj@`s$}7?ªÈZ¢M¸ô>m1ßaiçô<Ó`è ðèC©YÜ»ù™YU“›x9<úTŠJ”`rSvÝÀÓ OKoŽŸZaó"®½ä¼³=¶Tö¸›Y\ã¡ÕUA'Nû€O@›-][±ÜjÀ[ž1u‰„Æšº±s8cPÄJ/ðèͨA¼HxôIãæ9Ǽr%¶£7^”TǬA¨áÐZû^jc–ðÔAÙÆøjÕ`AÙIˆ§Õl\F l’u&./(rG;:í@së¬-ÂÕè q¥Â*}Só|2ÊrÌ.Ó 'f³"Fž·« 9†ãD¡/Ž`Ò¤ZËÄ7ðCÐævÒ ÅŠV¥BÆ£Õ¸Ò(KÝœTÕLÙƒÔ­6[3¯HÙJrÙj•ÈxZÍÆj@`s4sŸtmG‘Á<2Ÿ1<•{è⃊³@¤òìe¸0á/–=V±ÖÝœ£—b¥V &Oåp_',7®ZËÄüà‡ õ43®vÛžM¨Ú Ô$¡t·Ù6CFغÃXèoæä³29Ñj#µªk{4_¢¢Ã¤v)¯Ú†Äs'pôø6Ï%†Ñt„F.µfFÓJwG ›ñ(«Úï½ͧµÇB,ž}n{ísb% ¼º‡³)»~`´ùáìnfUV¬5¯ÞJª£>±3湕„Q?/‰ì=Ðz{oò§ÊÃ-e?.!žV³q5 °I£¾tÅG‘Á‘LØ™šúÑÃ+IÄÈ`/èÞmîý‰—>à9ÐZ}ZÇBÙöƒî7–áóI'Ï£wâ5ôÍm8zʘÓ]‹ÏÝüE«ŠËQ´©R¨–Œê NÙî ¼íÆÕp‹MÔíõQîâÀ¦OUÉßÙ/¯CßMͱJùr¯@\6_ÄØÍèŸ"+’$ûHMiZ~€bRÒ~×.õ«NÏïB¾ ƒÖòÙª6ŠÜ•ðèÆ­C†tç$°t_j³×+ÿœ‚Å^Ói—óÀ+ [°KÙæ@›¯Ç¶)ïcPþCÀ<èü6tÁca›r܆.˜²Ý L¯ ¾ËžG,sœ¹äÖoޝ!\.7uäËÞª IœïN‚6? ½Ÿza±z¢È‘´°n¸/»ùBWeU•X9 ì­µn«¦ì”Ýà1ÐæNN³`šçËÜ`Ý-ån€8;¼úÚ6tãÂmè(ÛÀôºì†n`Ã!lfåF“¬-3Oæ†v uß´ÑbsÝË+Ý&;‘óÎÆ“š>'ˆÉRwÞÕúY%e¿[B<)•¾s¶.¯1y÷ Ø™4g´ÊU0‘ئ+zmpÞjÆÎƒLxfP ž”†¼­ÄIúÈ&hö€îiþÐ']Ë’cMÊÉæ,óøVõ¡aH¦ØVÄÑà%ÐzŽb¯D+_¾%>òâiEeÐ) "wtšcxôÕÔšc«‘^6m[ÀÇ µÖ>Õ[gø´ù­å~²Ÿ–©‡Jì¸\‹ÑE‘³‡acs<ZËWTJZL|œ’O³å„²; < Úü>ϾY°ž“t‚ÿÍWìÕò\0[ &ª¿ê«~.XìNdênk ZLÇ“RwäòàðH¦îy:µöKØc¢ìÚGA§é4AlAc{Ak͇×Õýð(+W=ß¶J´›C7XÑ©U}~­;Ä Ê,×|›ŽäªJq{ 8zʘë}Ö‚k/F…òDl UG(EqI©õöÏJ‘îŒNÊQ8IÞ&Sœ²o“Ð̧oÇéugcSC‘?>;‡AëY¢ôí]¦Õõ*'°7ÕSfc#P[xx$ÚÝ͘¹K"*ÊÆ™ o þï×aša¼Ù_üŠÒÚ)·v¼ÙýwÞ:ï…ï|_ƒÆª’´ÄÍìöë ðt0›£3o¾U-…'?çJÅYáŽåç³®ý¶VvíRô:G90$JiPù¤ G޳ g‹£%v‡„}T`ƒÚdŸ);´ Ö)!ÃZQ_b”VÙâ–«%“(ë ~»P„1뺡S {%ŒÄJT¬…$Ó9qÒ³[Ç$Œøoß:[±¹¶Ïz¾ëˆ(2î}<µŒ{>Ê®xô‰Öw”ýI ñ´\7¥“Û¡›”íNà6ê&e¿WÂ&éf’õ´[Ç$l™nR†]™FŒâé&eבiÄ$Þ&ݤìOJ¨­›±¹n¶%¶3”š¨‰Öê ¶ŒÀÈlаv=~ù*áÚfJ1üHJ¶Ókeý‘„Ú^£è-ªÄzœÓ=›Ê‹N@b8z‚ï דZÀ$nÌ*ë#ÈÀˆ µªÍž¢L›s« ; w¾Ö¸¦ÈæÇ™Ð<'< ZËgï¸i­}âiuã=Cƒ Lgqìæ8˜Ç-pÌéE›PrÒ|œUäý9ø%¼ ú¦¶àm¸‚Á]ž&¯I‹1ÄËp´Öê½Ú°NÙ}|úq3¶)ß!¥ü'A?L­Iö~‡ÚÄVy‘ m_ƒŸEj­òBIغ+…VaŠ­òïvƒîN»UÔ÷Œ‰ãÀ³ Ï¶¦Uz€ 43n•ÓƒÜ%Uè¢*t[y Ú±gç€wAëÝZLl¯MBDlÚ^“ÀA§é|“ö~ÚÜ“èNõ%Pbà)ðèg­²? Û´Žfö–ñ™®™L¸©'i'§¼ÌòUAØZÏþNŸÆñUˆ«à!Ї´­Ï¶W·'E•¨‰ÕpÕe½á.»m·\žÆ-eŸ /ÁáG Íuñ2¿ÌT®.×|î9þÎ¥x+A·êÔüàsE~_AÜ×%tY knT=;‘íÐÛஎ²ÏIˆ§åªù)jþÓæ«æ&vÈfÜuÓWÍ›ÄѵdYoµ¬*‡>ú¹Š |ósp'H-¡Œëœþ*²÷ðèÍWÃO¡z”íIÐæNw•Õ²?%¡ö™7C5ü5ÿySÕpÓyóf¬u€>šŽn\zø.„Ø«6õçxpô´qS÷)àOÐÜ„= {š¯€ŸCé~’©pIát»²RöG$ÄÓrü5ÿESð»VI6ã®x(Ó„qÐZmú8ør'üŽƒ?E£¶püªGÙnã8HÙŸ’0ݳß8:·†0ƒÊþ2c:g6ª/CŨ#žV³1‹˜Nm<”ƒßÕ†þÖ•¼ì1ÛòʶçÓ}ÎÇ}ÞǵlêA6CýR-ÑW(¡´eX¢éPËsl®ÆC–zÎ’½Bîÿ*¶çÕûç)0ÆyõÛлá·ò4ûkp´¹1²T«øeÞ@aœ‘ $Nµh³,÷ñÇ'*dúPO=˜ãN…ù~ ^ G@hp©-\;·÷AßO±ÛMX¸¤ì®'@ëÝä?U÷aAù?N‚6w} Üëü !0^çv |U‡‰Ë ¤uíE:ñÊ÷íR.èr*•º¯ßQeßËVf¿*ÙŽ“ñö%Ûª¾ölEææ2Ἁ«ºz†v‚„'\Ë¡ìÚG@§y(A±æPý„GAkÝ2T,Ê¿x ´–ߊØ\7;•ò1J]LU—”Uš²o“Pßž§‘­±“ØÑ—2áþƒÀtö"FJìî ïd—ü¢å’·}ÛË×*9¶´¼08È®°ÛYz½ì”«~vP™qmHh6pÊŸN•¾ä«%Y1‚’—.ÞÓ+¯çÇïÏ1òÞU«»ïÊ18ŒQ/Ì< @8zªy™ÈÇò˜Ž’Ü`ât ޵4±HC9”ã•^ö¸¿¢Ðæ L.åb,‚uÂû ï£s Œ>»š¸ šÈPLv‚î4fh,VX×BI-•­jª2ú ø&=f\†;›•!å¼ׄ’ƒFÃ<¦ð¾M0:oÑd.ûÎã½\lá¨l9ÞŽõ–‚ݯ^š J@(.jšûNUï3–·ÀtúŒñD¹«Nì\QB=è6­—[«‰§°KQç„ã ÇKÑÃ"â«Þ̘!ìݳ ͼŒ¼¦Ó̹KL¶‚^kÉ©–„µ`¹–ŸcËn¹hªWÝ[°I(ƒ3mÓ’0]¼¥ÀXÔ°]\0ã¦Ú¦ëŒQ’%å!±“\”½gðÿ•rÉ_ >Î_…ÞÔ{[õ¢x`ŸPòœÑrñô‘·ÀtÄs3Ù¬ù"Yk„ 43f³«Þòs–«!ïÀ aè.c®&£]8‰`–êŽ.Tꨆc"ý”DCWÀ=¡ä(JszuÇX,W3á”J`:Ó«'l‚;_væEø—˜ƒâ^PÇN`eÛ%<…›ÔO–Ê^‘-[Å7ÖB²ïóÄ⬡J Å5óÍ¢BH^—æIßDhÈFRÑu VЖÊÞrÅZ ýƇ[0É'pËó×QÂiÐÓÛP¯y L§^ï%övUÇ]²Òî0~ŒÞ}Ï|¦ýÝ…Ö¬íºŽ«·ó7Á/az3í¶Î;·Ä]«º ³¯ò·À1¡pËÿ1÷×¶Î}¸¬¬Áùß·„×@_Ûü;È[`: x}€½}SÃ0–¿ÂÑl®¼°`»ál׳}õ®¿ v ¯ƒ¾nÌúÙ`B;B^¯6°• þÌQ¿ÀαOÕúï3³ ÏsyiIž“‡3òÕ1>'_[\YÓš•ÿ}pHx ´ž[|ùÓc ÿäS$ÜýpD˜žm|_p·ùY’ÐRŠOÛ6a¯¥¾ùÁ:á}Ð÷‹q‡ÅýKÚ‘oØœ: ñÀ5az»ó‡ÁójÅšËö’¬Ñ¯þ¸!L/âD[b8óDFþ12'Lo¦0À&ªõ¨a¼'],/,’÷™7öJ0#ÌCß-ÏÕø¾‚zŸúOÀ)azë[¬<_÷Ùší‡ Û%ç]0:ôêìüS°FÈ@3c6ý}Þ³íRöÆí›ê¢÷ÏÀáAЙÊõD}}X]_z¼å³U×YɆIƒ9vuxx8€¯”Yþç`“0½]÷ÙÒˆ<<9ïÄè$ŽÛævµ”u-r ?8HÖ;Ç·=ó“†ÿ… LÏÑÛc(øÿÖOŠ‘¢±¦\š_¢„éz;PÄ ÓרeÂ~9l5®ù÷Q‚ßOµ4;—F”9ù—ÈPxLÜiÌÉÔ{æøå¢Í>?§ˆŽ¤Ta¼ƒ¦ þ<{Wöè4å²ímîÖŸ¦ýô>Iraþ @˜Þöâô®P0¾ðçZ+¡½Î±ŸF Œ:䃻ì±×A™×^³òÒ²ãúVUý@è¿F·siâß oéÌŒrØ«~ [ö¥J…Uç ]TâÝÅÁ±‚¤@VŠV%9E"Ëÿl¦×«WÝ¿CÞÓ©º[ìU`r{óÁ$\H$¯(®7¡»øpï4˜kúâM;ñ–m"ûÿ,¦·œ`óe× šÞš÷ƒ‰ïÊb¹¸(+±+u%uËí?€QÂ<è¼1ÓGÃ!jùõÚë@4¯kŒÊÿü¦w£åfŒ<ðí·rÕ"_Akžo/1§X¬¹ê\gŸÿ?a› o3ÿ“FÓ³EËcs¶]¿QY¢ÈKA_ÊuÐSdX•b­bÕûbÑûRQ©kV.ÞF‘%? ¦&à¿kÌEl¿¸(x´ªˆƒ\ïé#O\oíÐìð0(*è¿ „陀‡y{UK–[b|¹Uckï¿‚Âô榧¹Š†ûμ×Ë®õsMÕ°ÑþØ"< Ú<’˜ÆY¥ÿŽÌ ¦Ï±ÙvÌ–) †\?&ëUd÷™4G/õQôPtm)WV¼˜¬K(ö¶¦ ’.àý!J-P»Ò ‡ò?2á x4ÙÙ‘‰¿#{€O€Å–Ž"‹” oÇž}"5™I¼)KÙµO‚ÖrÁ‘mÂMÙ?‚hž‚ë)e´”ÿi`è¾Ô£«±2ÂWž5˜¼ ¼Z˪UóÀÛ o·F4ÎGA¦ ª}åxt T%ôB;êwè›IèÁú%ÞON3xj‚€Rv{§Ak™Û¤AM,…j°˜ÞÝ‚ž‹²»¼ º=eÇ€£ Í{®ƒ,˜&c¦î„x¹|: Çcâ0Sý.yiÓIl{ÿ+”8Ž'@§gõ§ ÛªxN‚IH¹ýï̶Ê”}›„ú†²ÿ5 P»6bߊí#þý_ä—ÑɓވF°¡´”&"ŒFñ×à—ú»Ÿ…ïwK¿±cÿúòôÈŸl¤–Ó±pDNÛ¦•Óö5¾ßɓҎÅðAéÇåt¸²9!§í ÓNÊiˆcv*æ½ÓrZw£¼"¿¾žãz÷Œü.êÿlLݰ„z8á/úûý õ?ÉW¤Ÿ—ÓqÊäBL½\Œ©ÿK¾Åofåô®Fú œ>¦]N¥ÍêðJLûæ6©ñ½¡˜2ä#õLi…˜ß¢ôá„:¼šðþH‚\Ðg×bäìúäˆÞ»±‰þÝ”?kOþ"rBi·"íFi·äi4FnîÄ”én‚ŒŒÅ¼{/F7Æå´CaÚýHšøÍ 9½?L{ §m¼;‘q¹n&|&>” ›S1²ôXNëi¼û$F†§cäóÃ-è½÷Q‚ >áéãþŸÅ¼û<&íELÚ'ß¡2¯3ò»é/·Øл¯búÌOcdú39­£ñýÏåtX?I¨Ã/bdõ§ rý¥œÞ¦ÍFÆ9ñîW1òúuÂï¾ÞâûÐïô­¯¿Ÿ¿×&~ïD‚´o¶j¯Àj­Â(±¢¯<œ}i¯.»_º¶W«øÞ˜[Êy¾µ`ñ¨Þ_½÷§âŽŽÎ”^ãŽ÷ëÐÅ+?í¸Ú?ømŒÁs6dã<èùºÁ³Î<¡4Àèìïø“zzÝŠÒˆ>YxZžs-w­0E¡/È[ªW˜ÉÏ‹? 3¶çÔÜ¢í¼E˵ 3¥Â’EÇB¸¡—Và÷5Žºx³˜’]Þ Gëd‡>{ýb&;p5VZz!!„1hmÙ$OênJ)óÆìbßûEß_-&g&žåg†–]ç»èçw¡%¸úíûÙå7 ï"®ÄÒÎZœ³\µÓ›¶\Âãú%<9[ž·+žý¾ÈèjP§æ¿ÿo¿}ÏâŠ!Íc3à‡M޾1ŸRƒÝSïßü²_±“{6iÃQö%žŽ¬ÆUÅBJUq_½*È«^ÐÉ%W†t~Gv˜¬_ôöâöm½œœ™~ñjúù³äBgQPÂc›B¡é­rJ…W/¬Uó7¹œý(¡ä®\¿ú&¥²^*9åÑYÏ b¯ëƒtÞ Sï<1e* „£ GuÛîMJå™To»%«\õ-ÚÃHn?ÉaE}¯¼”zO1N[ýP *Ñ<Ö0²®ZM×m¸%úyngŽÿ*#þY濫¼ÀÛ´µäÛ%6·Æ\gumÁ®ŽŒ²’êŽÏìRÙ§ëò°AdÚ'Ÿüñ£gq‹—Ò‚eÌáÉôíêßÛ3TO7·«§ŒÚ¥V-¿­Ùß{ÓÚluštHB‡¯Õ"Ÿ$óú!æí FuÈþŠUå!O!ÿÊaMeƒÚG ?2níc”F;³¥5<$e»+”ý õW.ŒØ*¾™:H_EÎCï§¢ƒQŽr¯pQÚö)X¸3G HËÈÿ§ìüS£÷bgò‹2ë.R4K°åé-(Ke?*!žV³q5 °9‚½W,œ(rwMxôÁÔ˜›$Üõ%«ôMÍói·DÈ7ÝQ¡Ñ¤‚µ*¾¥_šxïNž2nèÜÓBÙ ‡HE–äcXÒĪٚwTÊV²,[-ò”}—„xZ͆ä2²‰š·›¯M*²vªF¸ô>mµ‹®Øìœžg }H»®6Ô_·M’æ¤Ðãh;ÂS Ó[MœðRvÝÀÓ OKoŽeù(Ú¨ƒ9æò--•=ú>D±×YA#Nû€O@?1æ¸Ë ,~·ð–gL]¢N@㥠VJµ‹VÖUŠXéJt³ê^$< Ú|ìóÊ•`, ¦iñ¢¤: :5#¼ºKÇ%9ÙÆ¥Ê~LÂmZŠöH›8fí“6Ð$©h¿óªõŽä+ÎB¹hUòìå¢S«”$ ŒVËÕb¥ÆW$B/Xa ¼qÕZ&æ?ý¡v-Gk·íÙ„jÏt5)´g4÷ƒÕz&ùvèc¡¿™cÒP—­æÑ:’U]kì%ÁW|`üÛ¥D÷ZImH±3­5î©úâDe{ô½Ö·”ý¸„xZÍÆÔ€À&úÒÙEÏfÂÎŒÐ|Ôßk>_%FŽ{A÷nsï‚Dx.SïóšÝ±PvÇ€ý ûeø|®¾ÏãÉù4z+;Ç"€S Íê>t­€!röjqªseš³†>«ƒ–à\•ü«:ž/¢ÒÐÒã¢]Y¾XˬZU%Œq=ª[ž  |3«\µÙœ”"ôr ¾²åDîV¹L1p¡Ù¼h½+“Sw +­Zžs(ùTËsA–¾Q'¶ù¡ù³ó yUýï{„1ádS:#Ò>ç¸%ÛUí-‰©à-Ðiî»$EÁñ6èÛÍï(»‹ÀQÐ)쳨2”ý ñ4Û9+ â6._PöcnÓòÅj@`s ™ù¼ªtœÏ„F ah­™nì‚{ŸÃG Ë]à—<¶lyäÜŒ¶¦Áê~`t6õ®m·Î¶±t#SwêÉé4{˜„޲+G3õ+§ÍîØ(»AàÐZ=Êz+öH19öÇfÕ8ÚÜ~º‡©£l]¬,:ž-¶$ä³?žíçøåË%k9Ï^Úʇ€ä«´f¿Ô¥›®ÀîLý$l³¥›²kö€îi¾t_Då¦wü¨‡Ö<ücÉö­rEyA‚ø9¼Z˲SÇÏKÕ!UM«PÊú’„xR*}çl}ˆŠÉ{Š-AnÓÍʾMB<ú6„;4”a­Þx£O•±A4¡‘ÇæºVòN•P-”ãåí–ËÆÂkpvNÔ‡FEþh¹(êß×ÝòÅÃÍØé•O«[Mvvc$<ÜqÄî#` ·™×òˆ#qÉqã‚'o þï×aš¡wˆ_üŠÒÚ)¶¶wˆýw‹NµjóU-WßWjF‹$,qGµ{ôäwšÕª´ÌCÂÅÎy§RqVhQ2ŠEHÓRt³\esN¥4˜Åk3¢ëþô—ÆÅÑòõ°Cˆ:*°79ÖòqÐ)a$îŠf­´1¦È‡ìZ@ª"ÍjɨZ¤»P„ÂáE»¹pèÔÂ^ #WÕS«…§l;€] »Z¯"»ðž@<êlÄæº—Ë@ùç›9žô•Ó¨vC F -à Øõtúå«„_ˆ÷?„ª œ=ÝzK†²ÿPBÿ1¢ÇÆ´O¾Cÿd^gäw4Ò_n±/ wŒè¡ðüÑã;Ö–Œèñ§:¢Gï–Mò¤îæ‡ÑC­Äôæ÷2¢‡^ÃÑ7~°=Ìd5®*~À=Ô+ƒÞ^ܾ±-ˆ[/4½õÃè¡ÞG}ÿ#z¨µÝ;¢GJ=Õ÷1¢Gª‘#’zÐg {•\ê{`£O4=_Jž³\ú­0) >W®Ž”‰]a¢³JŒD“‹NÕlÍèOZuû%»ê•ýµFrœüzcž%Ç_Ÿg7O¶]×q¾„eY´WIyÒ7eß·Ýè/TH4­ê‚ý:S[OÚ®µ[þb´x|ý=Êí²SY[pªäC<ùmͪúýåÌ-ÏÍÉo‡ ¸µ…èïzöŒ~ß[rœœyËÎ;Z„ÀTò7¤Å°ô®ì5#€ œ¸œÕHïäéoßJœFƒÍàg£›ùÿûK.ôÞggplot2/DESCRIPTION0000644000175100001440000001074512634752653013400 0ustar hornikusersPackage: ggplot2 Version: 2.0.0 Authors@R: c( person("Hadley", "Wickham", , "hadley@rstudio.com", c("aut", "cre")), person("Winston", "Chang", , "winston@rstudio.com", "aut"), person("RStudio", role = "cph") ) Title: An Implementation of the Grammar of Graphics Description: An implementation of the grammar of graphics in R. It combines the advantages of both base and lattice graphics: conditioning and shared axes are handled automatically, and you can still build up a plot step by step from multiple data sources. It also implements a sophisticated multidimensional conditioning system and a consistent interface to map data to aesthetic attributes. See http://ggplot2.org for more information, documentation and examples. Depends: R (>= 2.14) Imports: digest, grid, gtable (>= 0.1.1), MASS, plyr (>= 1.7.1), reshape2, scales (>= 0.3.0), stats Suggests: ggplot2movies, hexbin, Hmisc, mapproj, maps, maptools, mgcv, multcomp, nlme, testthat, quantreg, knitr Enhances: sp License: GPL-2 URL: http://ggplot2.org, https://github.com/hadley/ggplot2 BugReports: https://github.com/hadley/ggplot2/issues LazyData: true Collate: 'ggproto.r' 'aaa-.r' 'aes-calculated.r' 'aes-colour-fill-alpha.r' 'aes-group-order.r' 'aes-linetype-size-shape.r' 'aes-position.r' 'utilities.r' 'aes.r' 'legend-draw.r' 'geom-.r' 'annotation-custom.r' 'annotation-logticks.r' 'geom-polygon.r' 'geom-map.r' 'annotation-map.r' 'geom-raster.r' 'annotation-raster.r' 'annotation.r' 'autoplot.r' 'bench.r' 'coord-.r' 'coord-cartesian-.r' 'coord-fixed.r' 'coord-flip.r' 'coord-map.r' 'coord-munch.r' 'coord-polar.r' 'coord-quickmap.R' 'coord-transform.r' 'data.R' 'facet-.r' 'facet-grid-.r' 'facet-labels.r' 'facet-layout.r' 'facet-locate.r' 'facet-null.r' 'facet-viewports.r' 'facet-wrap.r' 'fortify-lm.r' 'fortify-map.r' 'fortify-multcomp.r' 'fortify-spatial.r' 'fortify.r' 'stat-.r' 'geom-abline.r' 'geom-rect.r' 'geom-bar.r' 'geom-bin2d.r' 'geom-blank.r' 'geom-boxplot.r' 'geom-path.r' 'geom-contour.r' 'geom-count.r' 'geom-crossbar.r' 'geom-segment.r' 'geom-curve.r' 'geom-defaults.r' 'geom-ribbon.r' 'geom-density.r' 'geom-density2d.r' 'geom-dotplot.r' 'geom-errorbar.r' 'geom-errorbarh.r' 'geom-freqpoly.r' 'geom-hex.r' 'geom-histogram.r' 'geom-hline.r' 'geom-jitter.r' 'geom-label.R' 'geom-linerange.r' 'geom-point.r' 'geom-pointrange.r' 'geom-quantile.r' 'geom-rug.r' 'geom-smooth.r' 'geom-spoke.r' 'geom-text.r' 'geom-tile.r' 'geom-violin.r' 'geom-vline.r' 'ggplot2.r' 'grob-absolute.r' 'grob-dotstack.r' 'grob-null.r' 'grouping.r' 'guide-colorbar.r' 'guide-legend.r' 'guides-.r' 'guides-axis.r' 'guides-grid.r' 'labels.r' 'layer.r' 'limits.r' 'margins.R' 'panel.r' 'plot-build.r' 'plot-construction.r' 'plot-last.r' 'plot.r' 'position-.r' 'position-collide.r' 'position-dodge.r' 'position-fill.r' 'position-identity.r' 'position-jitter.r' 'position-jitterdodge.R' 'position-nudge.R' 'position-stack.r' 'quick-plot.r' 'range.r' 'save.r' 'scale-.r' 'scale-alpha.r' 'scale-brewer.r' 'scale-continuous.r' 'scale-date.r' 'scale-discrete-.r' 'scale-gradient.r' 'scale-grey.r' 'scale-hue.r' 'scale-identity.r' 'scale-linetype.r' 'scale-manual.r' 'scale-shape.r' 'scale-size.r' 'scales-.r' 'stat-bin.r' 'stat-bin2d.r' 'stat-bindot.r' 'stat-binhex.r' 'stat-boxplot.r' 'stat-contour.r' 'stat-count.r' 'stat-density-2d.r' 'stat-density.r' 'stat-ecdf.r' 'stat-ellipse.R' 'stat-function.r' 'stat-identity.r' 'stat-qq.r' 'stat-quantile.r' 'stat-smooth-methods.r' 'stat-smooth.r' 'stat-sum.r' 'stat-summary-2d.r' 'stat-summary-bin.R' 'stat-summary-hex.r' 'stat-summary.r' 'stat-unique.r' 'stat-ydensity.r' 'summary.r' 'theme-defaults.r' 'theme-elements.r' 'theme.r' 'translate-qplot-base.r' 'translate-qplot-ggplot.r' 'translate-qplot-lattice.r' 'utilities-break.r' 'utilities-grid.r' 'utilities-help.r' 'utilities-matrix.r' 'utilities-resolution.r' 'utilities-table.r' 'zxx.r' 'zzz.r' VignetteBuilder: knitr RoxygenNote: 5.0.0 NeedsCompilation: no Packaged: 2015-12-15 13:04:37 UTC; hadley Author: Hadley Wickham [aut, cre], Winston Chang [aut], RStudio [cph] Maintainer: Hadley Wickham Repository: CRAN Date/Publication: 2015-12-18 10:45:15 ggplot2/man/0000755000175100001440000000000012633013307012417 5ustar hornikusersggplot2/man/fortify.Rd0000644000175100001440000000111112611730203014357 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify.r \name{fortify} \alias{fortify} \title{Fortify a model with data.} \usage{ fortify(model, data, ...) } \arguments{ \item{model}{model or other R object to convert to data frame} \item{data}{original dataset, if needed} \item{...}{other arguments passed to methods} } \description{ Rather than using this function, I now recomend using the \pkg{broom} package, which implements a much wider range of methods. \code{fortify} may be deprecated in the future. } \seealso{ \code{\link{fortify.lm}} } ggplot2/man/geom_path.Rd0000644000175100001440000001242712613770162014666 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-path.r \name{geom_path} \alias{geom_line} \alias{geom_path} \alias{geom_step} \title{Connect observations.} \usage{ geom_path(mapping = NULL, data = NULL, stat = "identity", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, arrow = NULL, show.legend = NA, inherit.aes = TRUE, ...) geom_line(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_step(mapping = NULL, data = NULL, stat = "identity", position = "identity", direction = "hv", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{arrow}{Arrow specification, as created by \code{\link[grid]{arrow}}} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{direction}{direction of stairs: 'vh' for vertical then horizontal, or 'hv' for horizontal then vertical} } \description{ \code{geom_path()} connects the observations in the order in which they appear in the data. \code{geom_line()} connects them in order of the variable on the x axis. \code{geom_step()} creates a stairstep plot, highlighting exactly when changes occur. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "path")} } \examples{ # geom_line() is suitable for time series ggplot(economics, aes(date, unemploy)) + geom_line() ggplot(economics_long, aes(date, value01, colour = variable)) + geom_line() # geom_step() is useful when you want to highlight exactly when # the y value chanes recent <- economics[economics$date > as.Date("2013-01-01"), ] ggplot(recent, aes(date, unemploy)) + geom_line() ggplot(recent, aes(date, unemploy)) + geom_step() # geom_path lets you explore how two variables are related over time, # e.g. unemployment and personal savings rate m <- ggplot(economics, aes(unemploy/pop, psavert)) m + geom_path() m + geom_path(aes(colour = as.numeric(date))) # Changing parameters ---------------------------------------------- ggplot(economics, aes(date, unemploy)) + geom_line(colour = "red") # Use the arrow parameter to add an arrow to the line # See ?arrow for more details c <- ggplot(economics, aes(x = date, y = pop)) c + geom_line(arrow = arrow()) c + geom_line( arrow = arrow(angle = 15, ends = "both", type = "closed") ) # Control line join parameters df <- data.frame(x = 1:3, y = c(4, 1, 9)) base <- ggplot(df, aes(x, y)) base + geom_path(size = 10) base + geom_path(size = 10, lineend = "round") base + geom_path(size = 10, linejoin = "mitre", lineend = "butt") # NAs break the line. Use na.rm = T to suppress the warning message df <- data.frame( x = 1:5, y1 = c(1, 2, 3, 4, NA), y2 = c(NA, 2, 3, 4, 5), y3 = c(1, 2, NA, 4, 5) ) ggplot(df, aes(x, y1)) + geom_point() + geom_line() ggplot(df, aes(x, y2)) + geom_point() + geom_line() ggplot(df, aes(x, y3)) + geom_point() + geom_line() \donttest{ # Setting line type vs colour/size # Line type needs to be applied to a line as a whole, so it can # not be used with colour or size that vary across a line x <- seq(0.01, .99, length.out = 100) df <- data.frame( x = rep(x, 2), y = c(qlogis(x), 2 * qlogis(x)), group = rep(c("a","b"), each = 100) ) p <- ggplot(df, aes(x=x, y=y, group=group)) # These work p + geom_line(linetype = 2) p + geom_line(aes(colour = group), linetype = 2) p + geom_line(aes(colour = x)) # But this doesn't should_stop(p + geom_line(aes(colour = x), linetype=2)) } } \seealso{ \code{\link{geom_polygon}}: Filled paths (polygons); \code{\link{geom_segment}}: Line segments } ggplot2/man/ggproto.Rd0000644000175100001440000000302212613770162014373 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{ggproto} \alias{ggproto} \alias{ggproto_parent} \title{Create a new ggproto object} \usage{ ggproto(`_class` = NULL, `_inherit` = NULL, ...) ggproto_parent(parent, self) } \arguments{ \item{_class}{Class name to assign to the object. This is stored as the class attribute of the object. If \code{NULL} (the default), no class name will be added to the object.} \item{_inherit}{ggproto object to inherit from. If \code{NULL}, don't inherit from any object.} \item{...}{A list of members in the ggproto object.} \item{parent, self}{Access parent class \code{parent} of object \code{self}.} } \description{ ggproto is inspired by the proto package, but it has some important differences. Notably, it cleanly supports cross-package inheritance, and has faster performance. } \section{Calling ggproto methods}{ ggproto methods can take an optional \code{self} argument: if it is present, it is a regular method; if it's absent, it's a "static" method (i.e. it doesn't use any fields). Imagine you have a ggproto object \code{Adder}, which has a method \code{addx = function(self, n) n + self$x}. Then, to call this function, you would use \code{Adder$addx(10)} -- the \code{self} is passed in automatically by the wrapper function. \code{self} be located anywhere in the function signature, although customarily it comes first. } \section{Calling methods in a parent}{ To explicitly call a methods in a parent, use \code{ggproto_parent(Parent, self)}. } ggplot2/man/geom_errorbarh.Rd0000644000175100001440000000506112613770162015714 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-errorbarh.r \name{geom_errorbarh} \alias{geom_errorbarh} \title{Horizontal error bars} \usage{ geom_errorbarh(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ Horizontal error bars } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "errorbarh")} } \examples{ df <- data.frame( trt = factor(c(1, 1, 2, 2)), resp = c(1, 5, 3, 4), group = factor(c(1, 2, 1, 2)), se = c(0.1, 0.3, 0.3, 0.2) ) # Define the top and bottom of the errorbars p <- ggplot(df, aes(resp, trt, colour = group)) p + geom_point() + geom_errorbarh(aes(xmax = resp + se, xmin = resp - se)) p + geom_point() + geom_errorbarh(aes(xmax = resp + se, xmin = resp - se, height = .2)) } \seealso{ \code{\link{geom_errorbar}}: vertical error bars } ggplot2/man/transform_position.Rd0000644000175100001440000000110512611730203016637 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-.r \name{transform_position} \alias{transform_position} \title{Convenience function to transform all position variables.} \usage{ transform_position(df, trans_x = NULL, trans_y = NULL, ...) } \arguments{ \item{trans_x, trans_y}{Transformation functions for x and y aesthetics. (will transform x, xmin, xmax, xend etc)} \item{...}{Additional arguments passed to \code{trans_x} and \code{trans_y}.} } \description{ Convenience function to transform all position variables. } \keyword{internal} ggplot2/man/stat_ellipse.Rd0000644000175100001440000000612012633014264015400 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-ellipse.R \name{stat_ellipse} \alias{stat_ellipse} \title{Plot data ellipses.} \usage{ stat_ellipse(mapping = NULL, data = NULL, geom = "path", position = "identity", type = "t", level = 0.95, segments = 51, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{The aesthetic mapping, usually constructed with \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set at the layer level if you are overriding the plot defaults.} \item{data}{A layer specific dataset - only needed if you want to override the plot defaults.} \item{geom}{The geometric object to use display the data} \item{position}{The position adjustment to use for overlapping points on this layer} \item{type}{The type of ellipse. The default \code{"t"} assumes a multivariate t-distribution, and \code{"norm"} assumes a multivariate normal distribution. \code{"euclid"} draws a circle with the radius equal to \code{level}, representing the euclidean distance from the center. This ellipse probably won't appear circular unless \code{coord_fixed()} is applied.} \item{level}{The confidence level at which to draw an ellipse (default is 0.95), or, if \code{type="euclid"}, the radius of the circle to be drawn.} \item{segments}{The number of segments to be used in drawing the ellipse.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. This can include aesthetics whose values you want to set, not map. See \code{\link{layer}} for more details.} } \description{ The method for calculating the ellipses has been modified from \code{car::ellipse} (Fox and Weisberg, 2011) } \examples{ ggplot(faithful, aes(waiting, eruptions)) + geom_point() + stat_ellipse() ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + geom_point() + stat_ellipse() ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + geom_point() + stat_ellipse(type = "norm", linetype = 2) + stat_ellipse(type = "t") ggplot(faithful, aes(waiting, eruptions, color = eruptions > 3)) + geom_point() + stat_ellipse(type = "norm", linetype = 2) + stat_ellipse(type = "euclid", level = 3) + coord_fixed() ggplot(faithful, aes(waiting, eruptions, fill = eruptions > 3)) + stat_ellipse(geom = "polygon") } \references{ John Fox and Sanford Weisberg (2011). An {R} Companion to Applied Regression, Second Edition. Thousand Oaks CA: Sage. URL: \url{http://socserv.socsci.mcmaster.ca/jfox/Books/Companion} } ggplot2/man/position_dodge.Rd0000644000175100001440000000321312611730203015710 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-dodge.r \name{position_dodge} \alias{position_dodge} \title{Adjust position by dodging overlaps to the side.} \usage{ position_dodge(width = NULL) } \arguments{ \item{width}{Dodging width, when different to the width of the individual elements. This is useful when you want to align narrow geoms with wider geoms. See the examples for a use case.} } \description{ Adjust position by dodging overlaps to the side. } \examples{ ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar(position = "dodge") \donttest{ ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(position="dodge") # see ?geom_boxplot and ?geom_bar for more examples # To dodge items with different widths, you need to be explicit df <- data.frame(x=c("a","a","b","b"), y=2:5, g = rep(1:2, 2)) p <- ggplot(df, aes(x, y, group = g)) + geom_bar( stat = "identity", position = "dodge", fill = "grey50", colour = "black" ) p # A line range has no width: p + geom_linerange(aes(ymin = y-1, ymax = y+1), position = "dodge") # You need to explicitly specify the width for dodging p + geom_linerange(aes(ymin = y-1, ymax = y+1), position = position_dodge(width = 0.9)) # Similarly with error bars: p + geom_errorbar(aes(ymin = y-1, ymax = y+1), width = 0.2, position = "dodge") p + geom_errorbar(aes(ymin = y-1, ymax = y+1, width = 0.2), position = position_dodge(width = 0.90)) } } \seealso{ Other position adjustments: \code{\link{position_fill}}, \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}}, \code{\link{position_nudge}} } ggplot2/man/element_blank.Rd0000644000175100001440000000052712611730203015507 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{element_blank} \alias{element_blank} \title{Theme element: blank. This theme element draws nothing, and assigns no space} \usage{ element_blank() } \description{ Theme element: blank. This theme element draws nothing, and assigns no space } ggplot2/man/fortify.sp.Rd0000644000175100001440000000242412611730203015010 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-spatial.r \name{fortify.sp} \alias{fortify.Line} \alias{fortify.Lines} \alias{fortify.Polygon} \alias{fortify.Polygons} \alias{fortify.SpatialLinesDataFrame} \alias{fortify.SpatialPolygons} \alias{fortify.SpatialPolygonsDataFrame} \alias{fortify.sp} \title{Fortify method for classes from the sp package.} \usage{ \method{fortify}{SpatialPolygonsDataFrame}(model, data, region = NULL, ...) \method{fortify}{SpatialPolygons}(model, data, ...) \method{fortify}{Polygons}(model, data, ...) \method{fortify}{Polygon}(model, data, ...) \method{fortify}{SpatialLinesDataFrame}(model, data, ...) \method{fortify}{Lines}(model, data, ...) \method{fortify}{Line}(model, data, ...) } \arguments{ \item{model}{\code{SpatialPolygonsDataFrame} to convert into a dataframe.} \item{data}{not used by this method} \item{region}{name of variable used to split up regions} \item{...}{not used by this method} } \description{ To figure out the correct variable name for region, inspect \code{as.data.frame(model)}. } \examples{ if (require("maptools")) { sids <- system.file("shapes/sids.shp", package="maptools") nc1 <- readShapePoly(sids, proj4string = CRS("+proj=longlat +datum=NAD27")) nc1_df <- fortify(nc1) } } ggplot2/man/economics.Rd0000644000175100001440000000216312611730203014664 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{economics} \alias{economics} \alias{economics_long} \title{US economic time series.} \format{A data frame with 478 rows and 6 variables \itemize{ \item date. Month of data collection \item psavert, personal savings rate, \url{http://research.stlouisfed.org/fred2/series/PSAVERT/} \item pce, personal consumption expenditures, in billions of dollars, \url{http://research.stlouisfed.org/fred2/series/PCE} \item unemploy, number of unemployed in thousands, \url{http://research.stlouisfed.org/fred2/series/UNEMPLOY} \item uempmed, median duration of unemployment, in week, \url{http://research.stlouisfed.org/fred2/series/UEMPMED} \item pop, total population, in thousands, \url{http://research.stlouisfed.org/fred2/series/POP} }} \usage{ economics economics_long } \description{ This dataset was produced from US economic time series data available from \url{http://research.stlouisfed.org/fred2}. \code{economics} is in "wide" format, \code{economics_long} is in "long" format. } \keyword{datasets} ggplot2/man/benchplot.Rd0000644000175100001440000000106112611730203014657 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/bench.r \name{benchplot} \alias{benchplot} \title{Benchmark plot creation time. Broken down into construct, build, render and draw times.} \usage{ benchplot(x) } \arguments{ \item{x}{code to create ggplot2 plot} } \description{ Benchmark plot creation time. Broken down into construct, build, render and draw times. } \examples{ benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point()) benchplot(ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_grid(. ~ cyl)) } \keyword{internal} ggplot2/man/ggplot_build.Rd0000644000175100001440000000202612620213454015362 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-build.r \name{ggplot_build} \alias{ggplot_build} \alias{layer_data} \alias{layer_grob} \alias{layer_scales} \title{Build ggplot for rendering.} \usage{ ggplot_build(plot) layer_data(plot, i = 1L) layer_scales(plot, i = 1L, j = 1L) layer_grob(plot, i = 1L) } \arguments{ \item{plot}{ggplot object} } \description{ \code{ggplot_build} takes the plot object, and performs all steps necessary to produce an object that can be rendered. This function outputs two pieces: a list of data frames (one for each layer), and a panel object, which contain all information about axis limits, breaks etc. } \details{ \code{layer_data}, \code{layer_grob}, and \code{layer_scales} are helper functions that returns the data, grob, or scales associated with a given layer. These are useful for tests. } \seealso{ \code{\link{print.ggplot}} and \code{\link{benchplot}} for functions that contain the complete set of steps for generating a ggplot2 plot. } \keyword{internal} ggplot2/man/margin.Rd0000644000175100001440000000111312611730203014154 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/margins.R \name{margin} \alias{margin} \title{Define margins.} \usage{ margin(t = 0, r = 0, b = 0, l = 0, unit = "pt") } \arguments{ \item{t, b, r, l}{Dimensions of each margin. (To remember order, think trouble).} \item{unit}{Default units of dimensions. Defaults to "pt" so it can be most easily scaled with the text.} } \description{ This is a convenience function that creates a grid unit object of the correct length to use for setting margins. } \examples{ margin(4) margin(4, 2) margin(4, 3, 2, 1) } ggplot2/man/scale_size.Rd0000644000175100001440000000641012611730203015025 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-size.r \name{scale_size} \alias{scale_radius} \alias{scale_size} \alias{scale_size_area} \alias{scale_size_continuous} \alias{scale_size_discrete} \title{Scale size (area or radius).} \usage{ scale_radius(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") scale_size(name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, range = c(1, 6), trans = "identity", guide = "legend") scale_size_area(..., max_size = 6) } \arguments{ \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{range}{a numeric vector of length 2 that specifies the minimum and maximum size of the plotting symbol after transformation.} \item{trans}{Either the name of a transformation object, or the object itself. Built-in transformations include "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". A transformation object bundles together a transform, it's inverse, and methods for generating breaks and labels. Transformation objects are defined in the scales package, and are called \code{name_trans}, e.g. \code{\link[scales]{boxcox_trans}}. You can create your own transformation with \code{\link[scales]{trans_new}}.} \item{guide}{Name of guide object, or object itself.} \item{...}{Other arguments passed on to \code{\link{continuous_scale}} to control name, limits, breaks, labels and so forth.} \item{max_size}{Size of largest points.} } \description{ \code{scale_size} scales area, \code{scale_radius} scales radius. The size aesthetic is most commonly used for points and text, and humans perceive the area of points (not their radius), so this provides for optimal perception. \code{scale_size_area} ensures that a value of 0 is mapped to a size of 0. } \examples{ p <- ggplot(mpg, aes(displ, hwy, size = hwy)) + geom_point() p p + scale_size("Highway mpg") p + scale_size(range = c(0, 10)) # If you want zero value to have zero size, use scale_size_area: p + scale_size_area() # This is most useful when size is a count ggplot(mpg, aes(class, cyl)) + geom_count() + scale_size_area() # If you want to map size to radius (usually bad idea), use scale_radius p + scale_radius() } \seealso{ \code{\link{scale_size_area}} if you want 0 values to be mapped to points with size 0. } ggplot2/man/annotate.Rd0000644000175100001440000000347312611730203014523 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation.r \name{annotate} \alias{annotate} \title{Create an annotation layer.} \usage{ annotate(geom, x = NULL, y = NULL, xmin = NULL, xmax = NULL, ymin = NULL, ymax = NULL, xend = NULL, yend = NULL, ..., na.rm = FALSE) } \arguments{ \item{geom}{name of geom to use for annotation} \item{x, y, xmin, ymin, xmax, ymax, xend, yend}{positioning aesthetics - you must specify at least one of these.} \item{...}{other aesthetics. These are not scaled so you can do (e.g.) \code{colour = "red"} to get a red point.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} } \description{ This function adds geoms to a plot. Unlike typical a geom function, the properties of the geoms are not mapped from variables of a data frame, but are instead passed in as vectors. This is useful for adding small annotations (such as text labels) or if you have your data in vectors, and for some reason don't want to put them in a data frame. } \details{ Note that all position aesthetics are scaled (i.e. they will expand the limits of the plot so they are visible), but all other aesthetics are set. This means that layers created with this function will never affect the legend. } \examples{ p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() p + annotate("text", x = 4, y = 25, label = "Some text") p + annotate("text", x = 2:5, y = 25, label = "Some text") p + annotate("rect", xmin = 3, xmax = 4.2, ymin = 12, ymax = 21, alpha = .2) p + annotate("segment", x = 2.5, xend = 4, y = 15, yend = 25, colour = "blue") p + annotate("pointrange", x = 3.5, y = 20, ymin = 12, ymax = 28, colour = "red", size = 1.5) p + annotate("text", x = 2:3, y = 20:21, label = c("my label", "label 2")) } ggplot2/man/coord_fixed.Rd0000644000175100001440000000276512611730203015202 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-fixed.r \name{coord_fixed} \alias{coord_equal} \alias{coord_fixed} \title{Cartesian coordinates with fixed relationship between x and y scales.} \usage{ coord_fixed(ratio = 1, xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{ratio}{aspect ratio, expressed as \code{y / x}} \item{xlim}{Limits for the x and y axes.} \item{ylim}{Limits for the x and y axes.} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ A fixed scale coordinate system forces a specified ratio between the physical representation of data units on the axes. The ratio represents the number of units on the y-axis equivalent to one unit on the x-axis. The default, \code{ratio = 1}, ensures that one unit on the x-axis is the same length as one unit on the y-axis. Ratios higher than one make units on the y axis longer than units on the x-axis, and vice versa. This is similar to \code{\link[MASS]{eqscplot}}, but it works for all types of graphics. } \examples{ # ensures that the ranges of axes are equal to the specified ratio by # adjusting the plot aspect ratio p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p + coord_fixed(ratio = 1) p + coord_fixed(ratio = 5) p + coord_fixed(ratio = 1/5) # Resize the plot to see that the specified aspect ratio is maintained } ggplot2/man/waiver.Rd0000644000175100001440000000074212611730203014203 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{waiver} \alias{waiver} \title{A waiver object.} \usage{ waiver() } \description{ A waiver is a "flag" object, similar to \code{NULL}, that indicates the calling function should just use the default value. It is used in certain functions to distinguish between displaying nothing (\code{NULL}) and displaying a default value calculated elsewhere (\code{waiver()}) } \keyword{internal} ggplot2/man/ggtheme.Rd0000644000175100001440000000446112613770162014342 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-defaults.r \name{ggtheme} \alias{ggtheme} \alias{theme_bw} \alias{theme_classic} \alias{theme_dark} \alias{theme_gray} \alias{theme_grey} \alias{theme_light} \alias{theme_linedraw} \alias{theme_minimal} \alias{theme_void} \title{ggplot2 themes} \usage{ theme_grey(base_size = 11, base_family = "") theme_gray(base_size = 11, base_family = "") theme_bw(base_size = 12, base_family = "") theme_linedraw(base_size = 12, base_family = "") theme_light(base_size = 12, base_family = "") theme_minimal(base_size = 12, base_family = "") theme_classic(base_size = 12, base_family = "") theme_dark(base_size = 12, base_family = "") theme_void(base_size = 12, base_family = "") } \arguments{ \item{base_size}{base font size} \item{base_family}{base font family} } \description{ Themes set the general aspect of the plot such as the colour of the background, gridlines, the size and colour of fonts. } \details{ \describe{ \item{\code{theme_gray}}{ The signature ggplot2 theme with a grey background and white gridlines, designed to put the data forward yet make comparisons easy.} \item{\code{theme_bw}}{ The classic dark-on-light ggplot2 theme. May work better for presentations displayed with a projector.} \item{\code{theme_linedraw}}{ A theme with only black lines of various widths on white backgrounds, reminiscent of a line drawings. Serves a purpose similar to \code{theme_bw}. Note that this theme has some very thin lines (<< 1 pt) which some journals may refuse.} \item{\code{theme_light}}{ A theme similar to \code{theme_linedraw} but with light grey lines and axes, to direct more attention towards the data.} \item{\code{theme_dark}}{ The dark cousin of \code{theme_light}, with similar line sizes but a dark background. Useful to make thin coloured lines pop out.} \item{\code{theme_minimal}}{ A minimalistic theme with no background annotations.} \item{\code{theme_classic}}{ A classic-looking theme, with x and y axis lines and no gridlines.} \item{\code{theme_void}}{ A completely empty theme.} } } \examples{ p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg, colour=factor(gear))) + facet_wrap(~am) p p + theme_gray() p + theme_bw() p + theme_linedraw() p + theme_light() p + theme_minimal() p + theme_classic() p + theme_void() } ggplot2/man/qplot.Rd0000644000175100001440000000527212611730203014050 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/quick-plot.r \name{qplot} \alias{qplot} \alias{quickplot} \title{Quick plot} \usage{ qplot(x, y = NULL, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), asp = NA, stat = NULL, position = NULL) quickplot(x, y = NULL, ..., data, facets = NULL, margins = FALSE, geom = "auto", xlim = c(NA, NA), ylim = c(NA, NA), log = "", main = NULL, xlab = deparse(substitute(x)), ylab = deparse(substitute(y)), asp = NA, stat = NULL, position = NULL) } \arguments{ \item{x, y, ...}{Aesthetics passed into each layer} \item{data}{Data frame to use (optional). If not specified, will create one, extracting vectors from the current environment.} \item{facets}{faceting formula to use. Picks \code{\link{facet_wrap}} or \code{\link{facet_grid}} depending on whether the formula is one- or two-sided} \item{margins}{See \code{facet_grid}: display marginal facets?} \item{geom}{Character vector specifying geom(s) to draw. Defaults to "point" if x and y are specified, and "histogram" if only x is specified.} \item{xlim, ylim}{X and y axis limits} \item{log}{Which variables to log transform ("x", "y", or "xy")} \item{main, xlab, ylab}{Character vector (or expression) giving plot title, x axis label, and y axis label respectively.} \item{asp}{The y/x aspect ratio} \item{stat, position}{DEPRECATED.} } \description{ \code{qplot} is the basic plotting function in the ggplot2 package, designed to be familiar if you're used to base \code{\link{plot}()}. It's a convenient wrapper for creating a number of different types of plots using a consistent calling scheme. } \examples{ # Use data from data.frame qplot(mpg, wt, data = mtcars) qplot(mpg, wt, data = mtcars, colour = cyl) qplot(mpg, wt, data = mtcars, size = cyl) qplot(mpg, wt, data = mtcars, facets = vs ~ am) \donttest{ qplot(1:10, rnorm(10), colour = runif(10)) qplot(1:10, letters[1:10]) mod <- lm(mpg ~ wt, data=mtcars) qplot(resid(mod), fitted(mod)) f <- function() { a <- 1:10 b <- a ^ 2 qplot(a, b) } f() # To set aesthetics, wrap in I() qplot(mpg, wt, data = mtcars, colour = I("red")) # qplot will attempt to guess what geom you want depending on the input # both x and y supplied = scatterplot qplot(mpg, wt, data = mtcars) # just x supplied = histogram qplot(mpg, data = mtcars) # just y supplied = scatterplot, with x = seq_along(y) qplot(y = mpg, data = mtcars) # Use different geoms qplot(mpg, wt, data = mtcars, geom = "path") qplot(factor(cyl), wt, data = mtcars, geom = c("boxplot", "jitter")) qplot(mpg, data = mtcars, geom = "dotplot") } } ggplot2/man/coord_polar.Rd0000644000175100001440000000361512611730203015213 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-polar.r \name{coord_polar} \alias{coord_polar} \title{Polar coordinates.} \usage{ coord_polar(theta = "x", start = 0, direction = 1) } \arguments{ \item{theta}{variable to map angle to (\code{x} or \code{y})} \item{start}{offset of starting point from 12 o'clock in radians} \item{direction}{1, clockwise; -1, anticlockwise} } \description{ The polar coordinate system is most commonly used for pie charts, which are a stacked bar chart in polar coordinates. } \examples{ # NOTE: Use these plots with caution - polar coordinates has # major perceptual problems. The main point of these examples is # to demonstrate how these common plots can be described in the # grammar. Use with EXTREME caution. #' # A pie chart = stacked bar chart + polar coordinates pie <- ggplot(mtcars, aes(x = factor(1), fill = factor(cyl))) + geom_bar(width = 1) pie + coord_polar(theta = "y") \donttest{ # A coxcomb plot = bar chart + polar coordinates cxc <- ggplot(mtcars, aes(x = factor(cyl))) + geom_bar(width = 1, colour = "black") cxc + coord_polar() # A new type of plot? cxc + coord_polar(theta = "y") # The bullseye chart pie + coord_polar() # Hadley's favourite pie chart df <- data.frame( variable = c("does not resemble", "resembles"), value = c(20, 80) ) ggplot(df, aes(x = "", y = value, fill = variable)) + geom_bar(width = 1, stat = "identity") + scale_fill_manual(values = c("red", "yellow")) + coord_polar("y", start = pi / 3) + labs(title = "Pac man") # Windrose + doughnut plot if (require("ggplot2movies")) { movies$rrating <- cut_interval(movies$rating, length = 1) movies$budgetq <- cut_number(movies$budget, 4) doh <- ggplot(movies, aes(x = rrating, fill = budgetq)) # Wind rose doh + geom_bar(width = 1) + coord_polar() # Race track plot doh + geom_bar(width = 0.9, position = "fill") + coord_polar(theta = "y") } } } ggplot2/man/geom_dotplot.Rd0000644000175100001440000001544112613770162015416 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-dotplot.r \name{geom_dotplot} \alias{geom_dotplot} \title{Dot plot} \usage{ geom_dotplot(mapping = NULL, data = NULL, position = "identity", binwidth = NULL, binaxis = "x", method = "dotdensity", binpositions = "bygroup", stackdir = "up", stackratio = 1, dotsize = 1, stackgroups = FALSE, origin = NULL, right = TRUE, width = 0.9, drop = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{binwidth}{When \code{method} is "dotdensity", this specifies maximum bin width. When \code{method} is "histodot", this specifies bin width. Defaults to 1/30 of the range of the data} \item{binaxis}{The axis to bin along, "x" (default) or "y"} \item{method}{"dotdensity" (default) for dot-density binning, or "histodot" for fixed bin widths (like stat_bin)} \item{binpositions}{When \code{method} is "dotdensity", "bygroup" (default) determines positions of the bins for each group separately. "all" determines positions of the bins with all the data taken together; this is used for aligning dot stacks across multiple groups.} \item{stackdir}{which direction to stack the dots. "up" (default), "down", "center", "centerwhole" (centered, but with dots aligned)} \item{stackratio}{how close to stack the dots. Default is 1, where dots just just touch. Use smaller values for closer, overlapping dots.} \item{dotsize}{The diameter of the dots relative to \code{binwidth}, default 1.} \item{stackgroups}{should dots be stacked across groups? This has the effect that \code{position = "stack"} should have, but can't (because this geom has some odd properties).} \item{origin}{When \code{method} is "histodot", origin of first bin} \item{right}{When \code{method} is "histodot", should intervals be closed on the right (a, b], or not [a, b)} \item{width}{When \code{binaxis} is "y", the spacing of the dot stacks for dodging.} \item{drop}{If TRUE, remove all bins with zero counts} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ In a dot plot, the width of a dot corresponds to the bin width (or maximum width, depending on the binning algorithm), and dots are stacked, with each dot representing one observation. } \details{ With dot-density binning, the bin positions are determined by the data and \code{binwidth}, which is the maximum width of each bin. See Wilkinson (1999) for details on the dot-density binning algorithm. With histodot binning, the bins have fixed positions and fixed widths, much like a histogram. When binning along the x axis and stacking along the y axis, the numbers on y axis are not meaningful, due to technical limitations of ggplot2. You can hide the y axis, as in one of the examples, or manually scale it to match the number of dots. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "dotplot")} } \section{Computed variables}{ \describe{ \item{x}{center of each bin, if binaxis is "x"} \item{y}{center of each bin, if binaxis is "x"} \item{binwidth}{max width of each bin if method is "dotdensity"; width of each bin if method is "histodot"} \item{count}{number of points in bin} \item{ncount}{count, scaled to maximum of 1} \item{density}{density of points in bin, scaled to integrate to 1, if method is "histodot"} \item{ndensity}{density, scaled to maximum of 1, if method is "histodot"} } } \examples{ ggplot(mtcars, aes(x = mpg)) + geom_dotplot() ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) # Use fixed-width bins ggplot(mtcars, aes(x = mpg)) + geom_dotplot(method="histodot", binwidth = 1.5) # Some other stacking methods ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackdir = "center") ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackdir = "centerwhole") # y axis isn't really meaningful, so hide it ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5) + scale_y_continuous(NULL, breaks = NULL) # Overlap dots vertically ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, stackratio = .7) # Expand dot diameter ggplot(mtcars, aes(x = mpg)) + geom_dotplot(binwidth = 1.5, dotsize = 1.25) \donttest{ # Examples with stacking along y axis instead of x ggplot(mtcars, aes(x = 1, y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center") ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center") ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "centerwhole") ggplot(mtcars, aes(x = factor(vs), fill = factor(cyl), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center", position = "dodge") # binpositions="all" ensures that the bins are aligned between groups ggplot(mtcars, aes(x = factor(am), y = mpg)) + geom_dotplot(binaxis = "y", stackdir = "center", binpositions="all") # Stacking multiple groups, with different fill ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_dotplot(stackgroups = TRUE, binwidth = 1, binpositions = "all") ggplot(mtcars, aes(x = mpg, fill = factor(cyl))) + geom_dotplot(stackgroups = TRUE, binwidth = 1, method = "histodot") ggplot(mtcars, aes(x = 1, y = mpg, fill = factor(cyl))) + geom_dotplot(binaxis = "y", stackgroups = TRUE, binwidth = 1, method = "histodot") } } \references{ Wilkinson, L. (1999) Dot plots. The American Statistician, 53(3), 276-281. } ggplot2/man/gg-add.Rd0000644000175100001440000000444712611730203014037 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-construction.r, R/theme.r \name{+.gg} \alias{+.gg} \alias{\%+\%} \alias{\%+replace\%} \title{Modify a ggplot or theme object by adding on new components.} \usage{ \method{+}{gg}(e1, e2) e1 \%+\% e2 e1 \%+replace\% e2 } \arguments{ \item{e1}{An object of class \code{ggplot} or \code{theme}} \item{e2}{A component to add to \code{e1}} } \description{ This operator allows you to add objects to a ggplot or theme object. } \details{ If the first object is an object of class \code{ggplot}, you can add the following types of objects, and it will return a modified ggplot object. \itemize{ \item \code{data.frame}: replace current data.frame (must use \code{\%+\%}) \item \code{uneval}: replace current aesthetics \item \code{layer}: add new layer \item \code{theme}: update plot theme \item \code{scale}: replace current scale \item \code{coord}: override current coordinate system \item \code{facet}: override current coordinate faceting } If the first object is an object of class \code{theme}, you can add another theme object. This will return a modified theme object. For theme objects, the \code{+} operator and the \code{\%+replace\%} can be used to modify elements in themes. The \code{+} operator updates the elements of e1 that differ from elements specified (not NULL) in e2. Thus this operator can be used to incrementally add or modify attributes of a ggplot theme. In contrast, the \code{\%+replace\%} operator replaces the entire element; any element of a theme not specified in e2 will not be present in the resulting theme (i.e. NULL). Thus this operator can be used to overwrite an entire theme. } \examples{ ### Adding objects to a ggplot object p <- ggplot(mtcars, aes(wt, mpg, colour = disp)) + geom_point() p p + coord_cartesian(ylim = c(0, 40)) p + scale_colour_continuous(breaks = c(100, 300)) p + guides(colour = "colourbar") # Use a different data frame m <- mtcars[1:10, ] p \%+\% m ### Adding objects to a theme object # Compare these results of adding theme objects to other theme objects add_el <- theme_grey() + theme(text = element_text(family = "Times")) rep_el <- theme_grey() \%+replace\% theme(text = element_text(family = "Times")) add_el$text rep_el$text } \seealso{ \code{\link{theme}} } ggplot2/man/should_stop.Rd0000644000175100001440000000065612611730203015255 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{should_stop} \alias{should_stop} \title{Used in examples to illustrate when errors should occur.} \usage{ should_stop(expr) } \arguments{ \item{expr}{code to evaluate.} } \description{ Used in examples to illustrate when errors should occur. } \examples{ should_stop(stop("Hi!")) should_stop(should_stop("Hi!")) } \keyword{internal} ggplot2/man/annotation_logticks.Rd0000644000175100001440000000664012613770162016774 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-logticks.r \name{annotation_logticks} \alias{annotation_logticks} \title{Annotation: log tick marks} \usage{ annotation_logticks(base = 10, sides = "bl", scaled = TRUE, short = unit(0.1, "cm"), mid = unit(0.2, "cm"), long = unit(0.3, "cm"), colour = "black", size = 0.5, linetype = 1, alpha = 1, color = NULL, ...) } \arguments{ \item{base}{the base of the log (default 10)} \item{sides}{a string that controls which sides of the plot the log ticks appear on. It can be set to a string containing any of \code{"trbl"}, for top, right, bottom, and left.} \item{scaled}{is the data already log-scaled? This should be \code{TRUE} (default) when the data is already transformed with \code{log10()} or when using \code{scale_y_log10}. It should be \code{FALSE} when using \code{coord_trans(y = "log10")}.} \item{short}{a \code{\link[grid]{unit}} object specifying the length of the short tick marks} \item{mid}{a \code{\link[grid]{unit}} object specifying the length of the middle tick marks. In base 10, these are the "5" ticks.} \item{long}{a \code{\link[grid]{unit}} object specifying the length of the long tick marks. In base 10, these are the "1" (or "10") ticks.} \item{colour}{Colour of the tick marks.} \item{size}{Thickness of tick marks, in mm.} \item{linetype}{Linetype of tick marks (\code{solid}, \code{dashed}, etc.)} \item{alpha}{The transparency of the tick marks.} \item{color}{An alias for \code{colour}.} \item{...}{Other parameters passed on to the layer} } \description{ This annotation adds log tick marks with diminishing spacing. These tick marks probably make sense only for base 10. } \examples{ # Make a log-log plot (without log ticks) a <- ggplot(msleep, aes(bodywt, brainwt)) + geom_point(na.rm = TRUE) + scale_x_log10( breaks = scales::trans_breaks("log10", function(x) 10^x), labels = scales::trans_format("log10", scales::math_format(10^.x)) ) + scale_y_log10( breaks = scales::trans_breaks("log10", function(x) 10^x), labels = scales::trans_format("log10", scales::math_format(10^.x)) ) + theme_bw() a + annotation_logticks() # Default: log ticks on bottom and left a + annotation_logticks(sides = "lr") # Log ticks for y, on left and right a + annotation_logticks(sides = "trbl") # All four sides # Hide the minor grid lines because they don't align with the ticks a + annotation_logticks(sides = "trbl") + theme(panel.grid.minor = element_blank()) # Another way to get the same results as 'a' above: log-transform the data before # plotting it. Also hide the minor grid lines. b <- ggplot(msleep, aes(log10(bodywt), log10(brainwt))) + geom_point(na.rm = TRUE) + scale_x_continuous(name = "body", labels = scales::math_format(10^.x)) + scale_y_continuous(name = "brain", labels = scales::math_format(10^.x)) + theme_bw() + theme(panel.grid.minor = element_blank()) b + annotation_logticks() # Using a coordinate transform requires scaled = FALSE t <- ggplot(msleep, aes(bodywt, brainwt)) + geom_point() + coord_trans(x = "log10", y = "log10") + theme_bw() t + annotation_logticks(scaled = FALSE) # Change the length of the ticks a + annotation_logticks( short = unit(.5,"mm"), mid = unit(3,"mm"), long = unit(4,"mm") ) } \seealso{ \code{\link{scale_y_continuous}}, \code{\link{scale_y_log10}} for log scale transformations. \code{\link{coord_trans}} for log coordinate transformations. } ggplot2/man/geom_tile.Rd0000644000175100001440000001142012613770162014657 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-raster.r, R/geom-rect.r, R/geom-tile.r \name{geom_raster} \alias{geom_raster} \alias{geom_rect} \alias{geom_tile} \title{Draw rectangles.} \usage{ geom_raster(mapping = NULL, data = NULL, stat = "identity", position = "identity", hjust = 0.5, vjust = 0.5, interpolate = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_rect(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_tile(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{hjust, vjust}{horizontal and vertical justification of the grob. Each justification value should be a number between 0 and 1. Defaults to 0.5 for both, centering each pixel over its data location.} \item{interpolate}{If \code{TRUE} interpolate linearly, if \code{FALSE} (the default) don't interpolate.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ \code{geom_rect} and \code{geom_tile} do the same thing, but are parameterised differently. \code{geom_rect} uses the locations of the four corners (\code{xmin}, \code{xmax}, \code{ymin} and \code{ymax}). \code{geom_tile} uses the center of the tile and its size (\code{x}, \code{y}, \code{width}, \code{height}). \code{geom_raster} is a high performance special case for when all the tiles are the same size. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "tile")} } \examples{ # The most common use for rectangles is to draw a surface. You always want # to use geom_raster here because it's so much faster, and produces # smaller output when saving to PDF ggplot(faithfuld, aes(waiting, eruptions)) + geom_raster(aes(fill = density)) # Interpolation smooths the surface & is most helpful when rendering images. ggplot(faithfuld, aes(waiting, eruptions)) + geom_raster(aes(fill = density), interpolate = TRUE) # If you want to draw arbitrary rectangles, use geom_tile() or geom_rect() df <- data.frame( x = rep(c(2, 5, 7, 9, 12), 2), y = rep(c(1, 2), each = 5), z = factor(rep(1:5, each = 2)), w = rep(diff(c(0, 4, 6, 8, 10, 14)), 2) ) ggplot(df, aes(x, y)) + geom_tile(aes(fill = z)) ggplot(df, aes(x, y)) + geom_tile(aes(fill = z, width = w), colour = "grey50") ggplot(df, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y, ymax = y + 1)) + geom_rect(aes(fill = z, width = w), colour = "grey50") \donttest{ # Justification controls where the cells are anchored df <- expand.grid(x = 0:5, y = 0:5) df$z <- runif(nrow(df)) # default is compatible with geom_tile() ggplot(df, aes(x, y, fill = z)) + geom_raster() # zero padding ggplot(df, aes(x, y, fill = z)) + geom_raster(hjust = 0, vjust = 0) # Inspired by the image-density plots of Ken Knoblauch cars <- ggplot(mtcars, aes(mpg, factor(cyl))) cars + geom_point() cars + stat_bin2d(aes(fill = ..count..), binwidth = c(3,1)) cars + stat_bin2d(aes(fill = ..density..), binwidth = c(3,1)) cars + stat_density(aes(fill = ..density..), geom = "raster", position = "identity") cars + stat_density(aes(fill = ..count..), geom = "raster", position = "identity") } } ggplot2/man/scale_identity.Rd0000644000175100001440000000343412611730203015707 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-identity.r, R/zxx.r \name{scale_identity} \alias{scale_alpha_identity} \alias{scale_color_identity} \alias{scale_colour_identity} \alias{scale_fill_identity} \alias{scale_identity} \alias{scale_linetype_identity} \alias{scale_shape_identity} \alias{scale_size_identity} \title{Use values without scaling.} \usage{ scale_colour_identity(..., guide = "none") scale_fill_identity(..., guide = "none") scale_shape_identity(..., guide = "none") scale_linetype_identity(..., guide = "none") scale_alpha_identity(..., guide = "none") scale_size_identity(..., guide = "none") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} or \code{\link{continuous_scale}}} \item{guide}{Guide to use for this scale - defaults to \code{"none"}.} } \description{ Use values without scaling. } \examples{ ggplot(luv_colours, aes(u, v)) + geom_point(aes(colour = col), size = 3) + scale_color_identity() + coord_equal() df <- data.frame( x = 1:4, y = 1:4, colour = c("red", "green", "blue", "yellow") ) ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) + scale_fill_identity() # To get a legend guide, specify guide = "legend" ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) + scale_fill_identity(guide = "legend") # But you'll typically also need to supply breaks and labels: ggplot(df, aes(x, y)) + geom_tile(aes(fill = colour)) + scale_fill_identity("trt", labels = letters[1:4], breaks = df$colour, guide = "legend") # cyl scaled to appropriate size ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(size = cyl)) # cyl used as point size ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(size = cyl)) + scale_size_identity() } ggplot2/man/midwest.Rd0000644000175100001440000000222512611730203014360 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{midwest} \alias{midwest} \title{Midwest demographics.} \format{A data frame with 437 rows and 28 variables \itemize{ \item PID \item county \item state \item area \item poptotal. Total population \item popdensity. Population density \item popwhite. Number of whites. \item popblack. Number of blacks. \item popamerindian. Number of American Indians. \item popasian. Number of Asians. \item popother. Number of other races. \item percwhite. Percent white. \item percblack. Percent black. \item percamerindan. Percent American Indian. \item percasian. Percent Asian. \item percother. Percent other races. \item popadults. Number of adults. \item perchsd. \item percollege. Percent college educated. \item percprof. Percent profession. \item poppovertyknown. \item percpovertyknown \item percbelowpoverty \item percchildbelowpovert \item percadultpoverty \item percelderlypoverty \item inmetro. In a metro area. \item category' }} \usage{ midwest } \description{ Demographic information of midwest counties } \keyword{datasets} ggplot2/man/facet_null.Rd0000644000175100001440000000113712611730203015021 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-null.r \name{facet_null} \alias{facet_null} \title{Facet specification: a single panel.} \usage{ facet_null(shrink = TRUE) } \arguments{ \item{shrink}{If \code{TRUE}, will shrink scales to fit output of statistics, not raw data. If \code{FALSE}, will be range of raw data before statistical summary.} } \description{ Facet specification: a single panel. } \examples{ # facet_null is the default facetting specification if you # don't override it with facet_grid or facet_wrap ggplot(mtcars, aes(mpg, wt)) + geom_point() } ggplot2/man/format.ggproto.Rd0000644000175100001440000000113512611730203015653 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{format.ggproto} \alias{format.ggproto} \title{Format a ggproto object} \usage{ \method{format}{ggproto}(x, ..., flat = TRUE) } \arguments{ \item{x}{A ggproto object to print.} \item{...}{If the ggproto object has a \code{print} method, further arguments will be passed to it. Otherwise, these arguments are unused.} \item{flat}{If \code{TRUE} (the default), show a flattened list of all local and inherited members. If \code{FALSE}, show the inheritance hierarchy.} } \description{ Format a ggproto object } ggplot2/man/aes_auto.Rd0000644000175100001440000000056512611730203014511 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes_auto} \alias{aes_auto} \title{Automatic aesthetic mapping} \usage{ aes_auto(data = NULL, ...) } \arguments{ \item{data}{data.frame or names of variables} \item{...}{aesthetics that need to be explicitly mapped.} } \description{ Automatic aesthetic mapping } \keyword{internal} ggplot2/man/map_data.Rd0000644000175100001440000000272012611730203014452 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-map.r \name{map_data} \alias{map_data} \title{Create a data frame of map data.} \usage{ map_data(map, region = ".", exact = FALSE, ...) } \arguments{ \item{map}{name of map provided by the \pkg{maps} package. These include \code{\link[maps]{county}}, \code{\link[maps]{france}}, \code{\link[maps]{italy}}, \code{\link[maps]{nz}}, \code{\link[maps]{state}}, \code{\link[maps]{usa}}, \code{\link[maps]{world}}, \code{\link[maps]{world2}}.} \item{region}{name of subregions to include. Defaults to \code{.} which includes all subregion. See documentation for \code{\link[maps]{map}} for more details.} \item{exact}{should the \code{region} be treated as a regular expression (\code{FALSE}) or as a fixed string (\code{TRUE}).} \item{...}{all other arguments passed on to \code{\link[maps]{map}}} } \description{ Create a data frame of map data. } \examples{ if (require("maps")) { states <- map_data("state") arrests <- USArrests names(arrests) <- tolower(names(arrests)) arrests$region <- tolower(rownames(USArrests)) choro <- merge(states, arrests, sort = FALSE, by = "region") choro <- choro[order(choro$order), ] ggplot(choro, aes(long, lat)) + geom_polygon(aes(group = group, fill = assault)) + coord_map("albers", at0 = 45.5, lat1 = 29.5) ggplot(choro, aes(long, lat)) + geom_polygon(aes(group = group, fill = assault / murder)) + coord_map("albers", at0 = 45.5, lat1 = 29.5) } } ggplot2/man/diamonds.Rd0000644000175100001440000000177312611730203014511 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{diamonds} \alias{diamonds} \title{Prices of 50,000 round cut diamonds} \format{A data frame with 53940 rows and 10 variables: \itemize{ \item price: price in US dollars (\$326--\$18,823) \item carat: weight of the diamond (0.2--5.01) \item cut: quality of the cut (Fair, Good, Very Good, Premium, Ideal) \item color: diamond colour, from J (worst) to D (best) \item clarity: a measurement of how clear the diamond is (I1 (worst), SI1, SI2, VS1, VS2, VVS1, VVS2, IF (best)) \item x: length in mm (0--10.74) \item y: width in mm (0--58.9) \item z: depth in mm (0--31.8) \item depth: total depth percentage = z / mean(x, y) = 2 * z / (x + y) (43--79) \item table: width of top of diamond relative to widest point (43--95) }} \usage{ diamonds } \description{ A dataset containing the prices and other attributes of almost 54,000 diamonds. The variables are as follows: } \keyword{datasets} ggplot2/man/translate_qplot_lattice.Rd0000644000175100001440000000562612611730203017635 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/translate-qplot-lattice.r \name{translate_qplot_lattice} \alias{translate_qplot_lattice} \title{Translating between qplot and lattice} \description{ The major difference between lattice and ggplot2 is that lattice uses a formula based interface. ggplot2 does not because the formula does not generalise well to more complicated situations. } \examples{ \dontrun{ library(lattice) if (require("ggplot2movies")) { xyplot(rating ~ year, data=movies) qplot(year, rating, data=movies) xyplot(rating ~ year | Comedy + Action, data = movies) qplot(year, rating, data = movies, facets = ~ Comedy + Action) # Or maybe qplot(year, rating, data = movies, facets = Comedy ~ Action) # While lattice has many different functions to produce different types of # graphics (which are all basically equivalent to setting the panel argument), # ggplot2 has qplot(). stripplot(~ rating, data = movies, jitter.data = TRUE) qplot(rating, 1, data = movies, geom = "jitter") histogram(~ rating, data = movies) qplot(rating, data = movies, geom = "histogram") bwplot(Comedy ~ rating ,data = movies) qplot(factor(Comedy), rating, data = movies, type = "boxplot") xyplot(wt ~ mpg, mtcars, type = c("p","smooth")) qplot(mpg, wt, data = mtcars, geom = c("point","smooth")) xyplot(wt ~ mpg, mtcars, type = c("p","r")) qplot(mpg, wt, data = mtcars, geom = c("point","smooth"), method = "lm") } # The capabilities for scale manipulations are similar in both ggplot2 and # lattice, although the syntax is a little different. xyplot(wt ~ mpg | cyl, mtcars, scales = list(y = list(relation = "free"))) qplot(mpg, wt, data = mtcars) + facet_wrap(~ cyl, scales = "free") xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 10)) qplot(mpg, wt, data = mtcars, log = "xy") xyplot(wt ~ mpg | cyl, mtcars, scales = list(log = 2)) qplot(mpg, wt, data = mtcars) + scale_x_continuous(trans = scales::log2_trans()) + scale_y_continuous(trans = scales::log2_trans()) xyplot(wt ~ mpg, mtcars, group = cyl, auto.key = TRUE) # Map directly to an aesthetic like colour, size, or shape. qplot(mpg, wt, data = mtcars, colour = cyl) xyplot(wt ~ mpg, mtcars, xlim = c(20,30)) # Works like lattice, except you can't specify a different limit # for each panel/facet qplot(mpg, wt, data = mtcars, xlim = c(20,30)) # Both lattice and ggplot2 have similar options for controlling labels on the plot. xyplot(wt ~ mpg, mtcars, xlab = "Miles per gallon", ylab = "Weight", main = "Weight-efficiency tradeoff") qplot(mpg, wt, data = mtcars, xlab = "Miles per gallon", ylab = "Weight", main = "Weight-efficiency tradeoff") xyplot(wt ~ mpg, mtcars, aspect = 1) qplot(mpg, wt, data = mtcars, asp = 1) # par.settings() is equivalent to + theme() and trellis.options.set() # and trellis.par.get() to theme_set() and theme_get(). # More complicated lattice formulas are equivalent to rearranging the data # before using ggplot2. } } ggplot2/man/geom_density_2d.Rd0000644000175100001440000000756712633013725016004 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-density2d.r, R/stat-density-2d.r \name{geom_density_2d} \alias{geom_density2d} \alias{geom_density_2d} \alias{stat_density2d} \alias{stat_density_2d} \title{Contours from a 2d density estimate.} \usage{ geom_density_2d(mapping = NULL, data = NULL, stat = "density2d", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_density_2d(mapping = NULL, data = NULL, geom = "density_2d", position = "identity", contour = TRUE, n = 100, h = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_density_2d} and \code{stat_density_2d}.} \item{contour}{If \code{TRUE}, contour the results of the 2d density estimation} \item{n}{number of grid points in each direction} \item{h}{Bandwidth (vector of length two). If \code{NULL}, estimated using \code{\link[MASS]{bandwidth.nrd}}.} } \description{ Perform a 2D kernel density estimation using kde2d and display the results with contours. This can be useful for dealing with overplotting. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "density_2d")} } \section{Computed variables}{ Same as \code{\link{stat_contour}} } \examples{ m <- ggplot(faithful, aes(x = eruptions, y = waiting)) + geom_point() + xlim(0.5, 6) + ylim(40, 110) m + geom_density_2d() \donttest{ m + stat_density_2d(aes(fill = ..level..), geom = "polygon") set.seed(4393) dsmall <- diamonds[sample(nrow(diamonds), 1000), ] d <- ggplot(dsmall, aes(x, y)) # If you map an aesthetic to a categorical variable, you will get a # set of contours for each value of that variable d + geom_density_2d(aes(colour = cut)) # If we turn contouring off, we can use use geoms like tiles: d + stat_density_2d(geom = "raster", aes(fill = ..density..), contour = FALSE) # Or points: d + stat_density_2d(geom = "point", aes(size = ..density..), n = 20, contour = FALSE) } } \seealso{ \code{\link{geom_contour}} for contour drawing geom, \code{\link{stat_sum}} for another way of dealing with overplotting } ggplot2/man/update_labels.Rd0000644000175100001440000000107012611730203015505 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labels.r \name{update_labels} \alias{update_labels} \title{Update axis/legend labels} \usage{ update_labels(p, labels) } \arguments{ \item{p}{plot to modify} \item{labels}{named list of new labels} } \description{ Update axis/legend labels } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() update_labels(p, list(x = "New x")) update_labels(p, list(x = expression(x / y ^ 2))) update_labels(p, list(x = "New x", y = "New Y")) update_labels(p, list(colour = "Fail silently")) } ggplot2/man/absoluteGrob.Rd0000644000175100001440000000056312611730203015337 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/grob-absolute.r \name{absoluteGrob} \alias{absoluteGrob} \title{Absolute grob} \usage{ absoluteGrob(grob, width = NULL, height = NULL, xmin = NULL, ymin = NULL, vp = NULL) } \description{ This grob has fixed dimensions and position. } \details{ It's still experimental } \keyword{internal} ggplot2/man/annotation_custom.Rd0000644000175100001440000000337712611730203016461 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-custom.r \name{annotation_custom} \alias{annotation_custom} \title{Annotation: Custom grob.} \usage{ annotation_custom(grob, xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) } \arguments{ \item{grob}{grob to display} \item{xmin, xmax}{x location (in data coordinates) giving horizontal location of raster} \item{ymin, ymax}{y location (in data coordinates) giving vertical location of raster} } \description{ This is a special geom intended for use as static annotations that are the same in every panel. These annotations will not affect scales (i.e. the x and y axes will not grow to cover the range of the grob, and the grob will not be modified by any ggplot settings or mappings). } \details{ Most useful for adding tables, inset plots, and other grid-based decorations. } \note{ \code{annotation_custom} expects the grob to fill the entire viewport defined by xmin, xmax, ymin, ymax. Grobs with a different (absolute) size will be center-justified in that region. Inf values can be used to fill the full plot panel (see examples). } \examples{ # Dummy plot df <- data.frame(x = 1:10, y = 1:10) base <- ggplot(df, aes(x, y)) + geom_blank() + theme_bw() # Adding a table \dontrun{ if (require(gridExtra)) { base + annotation_custom(grob = tableGrob(head(iris[ ,1:3])), xmin = 3, xmax = 6, ymin = 2, ymax = 8) # full panel base + annotation_custom(grob = roundrectGrob(), xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf) } } # Inset plot df2 <- data.frame(x = 1 , y = 1) g <- ggplotGrob(ggplot(df2, aes(x, y)) + geom_point() + theme(plot.background = element_rect(colour = "black"))) base + annotation_custom(grob = g, xmin = 1, xmax = 10, ymin = 8, ymax = 10) } ggplot2/man/faithfuld.Rd0000644000175100001440000000060212611730203014647 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{faithfuld} \alias{faithfuld} \title{2d density estimate of Old Faithful data} \format{A data frame with 5,625 observations and 3 variables.} \usage{ faithfuld } \description{ A 2d density estimate of the waiting and eruptions variables data \link{faithful}. } \keyword{datasets} ggplot2/man/aes_position.Rd0000644000175100001440000000312412611730203015377 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-position.r \name{aes_position} \alias{aes_position} \alias{x} \alias{xend} \alias{xmax} \alias{xmin} \alias{y} \alias{yend} \alias{ymax} \alias{ymin} \title{Position related aesthetics: x, y, xmin, xmax, ymin, ymax, xend, yend} \description{ This page demonstrates the usage of a sub-group of aesthetics; x, y, xmin, xmax, ymin, ymax, xend, and yend. } \examples{ # Generate data: means and standard errors of means for prices # for each type of cut dmod <- lm(price ~ cut, data = diamonds) cuts <- data.frame(cut = unique(diamonds$cut), predict(dmod, data.frame(cut = unique(diamonds$cut)), se = TRUE)[c("fit", "se.fit")]) se <- ggplot(cuts, aes(x = cut, y = fit, ymin = fit - se.fit, ymax = fit + se.fit, colour = cut)) se + geom_pointrange() # Using annotate p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p + annotate("rect", xmin = 2, xmax = 3.5, ymin = 2, ymax = 25, fill = "dark grey", alpha = .5) # Geom_segment examples p + geom_segment(aes(x = 2, y = 15, xend = 2, yend = 25), arrow = arrow(length = unit(0.5, "cm"))) p + geom_segment(aes(x = 2, y = 15, xend = 3, yend = 15), arrow = arrow(length = unit(0.5, "cm"))) p + geom_segment(aes(x = 5, y = 30, xend = 3.5, yend = 25), arrow = arrow(length = unit(0.5, "cm"))) # You can also use geom_segment to recreate plot(type = "h") : counts <- as.data.frame(table(x = rpois(100, 5))) counts$x <- as.numeric(as.character(counts$x)) with(counts, plot(x, Freq, type = "h", lwd = 10)) ggplot(counts, aes(x, Freq)) + geom_segment(aes(yend = 0, xend = x), size = 10) } ggplot2/man/geom_jitter.Rd0000644000175100001440000000750512613770162015234 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-jitter.r \name{geom_jitter} \alias{geom_jitter} \title{Points, jittered to reduce overplotting.} \usage{ geom_jitter(mapping = NULL, data = NULL, width = NULL, height = NULL, stat = "identity", position = "jitter", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{width}{Amount of vertical and horizontal jitter. The jitter is added in both positive and negative directions, so the total spread is twice the value specified here. If omitted, defaults to 40\% of the resolution of the data: this means the jitter values will occupy 80\% of the implied bins. Categorical data is aligned on the integers, so a width or height of 0.5 will spread the data so it's not possible to see the distinction between the categories.} \item{height}{Amount of vertical and horizontal jitter. The jitter is added in both positive and negative directions, so the total spread is twice the value specified here. If omitted, defaults to 40\% of the resolution of the data: this means the jitter values will occupy 80\% of the implied bins. Categorical data is aligned on the integers, so a width or height of 0.5 will spread the data so it's not possible to see the distinction between the categories.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ The jitter geom is a convenient default for geom_point with position = 'jitter'. It's a useful way of handling overplotting caused by discreteness in smaller datasets. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "point")} } \examples{ p <- ggplot(mpg, aes(cyl, hwy)) p + geom_point() p + geom_jitter() # Add aesthetic mappings p + geom_jitter(aes(colour = class)) # Use smaller width/height to emphasise categories ggplot(mpg, aes(cyl, hwy)) + geom_jitter() ggplot(mpg, aes(cyl, hwy)) + geom_jitter(width = 0.25) # Use larger width/height to completely smooth away discreteness ggplot(mpg, aes(cty, hwy)) + geom_jitter() ggplot(mpg, aes(cty, hwy)) + geom_jitter(width = 0.5, height = 0.5) } \seealso{ \code{\link{geom_point}} for regular, unjittered points, \code{\link{geom_boxplot}} for another way of looking at the conditional distribution of a variable } ggplot2/man/facet.Rd0000644000175100001440000000062312611730203013766 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{facet} \alias{facet} \title{Facet specification.} \usage{ facet(..., shrink = TRUE, subclass = c()) } \arguments{ \item{...}{object fields} \item{shrink}{shrink scales to fit output of statistics, not raw data} } \description{ Create new facetting specification. For internal use only. } \keyword{internal} ggplot2/man/guides.Rd0000644000175100001440000000340212611730203014162 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/guides-.r \name{guides} \alias{guides} \title{Set guides for each scale.} \usage{ guides(...) } \arguments{ \item{...}{List of scale guide pairs} } \value{ A list containing the mapping between scale and guide. } \description{ Guides for each scale can be set in call of \code{scale_*} with argument \code{guide}, or in \code{guides}. } \examples{ \donttest{ # ggplot object dat <- data.frame(x = 1:5, y = 1:5, p = 1:5, q = factor(1:5), r = factor(1:5)) p <- ggplot(dat, aes(x, y, colour = p, size = q, shape = r)) + geom_point() # without guide specification p # Show colorbar guide for colour. # All these examples below have a same effect. p + guides(colour = "colorbar", size = "legend", shape = "legend") p + guides(colour = guide_colorbar(), size = guide_legend(), shape = guide_legend()) p + scale_colour_continuous(guide = "colorbar") + scale_size_discrete(guide = "legend") + scale_shape(guide = "legend") # Remove some guides p + guides(colour = "none") p + guides(colour = "colorbar",size = "none") # Guides are integrated where possible p + guides(colour = guide_legend("title"), size = guide_legend("title"), shape = guide_legend("title")) # same as g <- guide_legend("title") p + guides(colour = g, size = g, shape = g) p + theme(legend.position = "bottom") # position of guides p + theme(legend.position = "bottom", legend.box = "horizontal") # Set order for multiple guides ggplot(mpg, aes(displ, cty)) + geom_point(aes(size = hwy, colour = cyl, shape = drv)) + guides( colour = guide_colourbar(order = 1), shape = guide_legend(order = 2), size = guide_legend(order = 3) ) } } \seealso{ Other guides: \code{\link{guide_colourbar}}, \code{\link{guide_legend}} } ggplot2/man/luv_colours.Rd0000644000175100001440000000067512611730203015267 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{luv_colours} \alias{luv_colours} \title{\code{colors()} in Luv space.} \format{A data frame with 657 observations and 4 variables: \itemize{ \item{L,u,v}{Position in Luv colour space} \item{col}{Colour name} }} \usage{ luv_colours } \description{ All built-in \code{\link{colors}()} translated into Luv colour space. } \keyword{datasets} ggplot2/man/labellers.Rd0000644000175100001440000001034412613770162014664 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-labels.r \name{labellers} \alias{label_both} \alias{label_context} \alias{label_parsed} \alias{label_value} \alias{label_wrap_gen} \alias{labellers} \title{Labeller functions} \usage{ label_value(labels, multi_line = TRUE) label_both(labels, multi_line = TRUE, sep = ": ") label_context(labels, multi_line = TRUE, sep = ": ") label_parsed(labels, multi_line = TRUE) label_wrap_gen(width = 25, multi_line = TRUE) } \arguments{ \item{labels}{Data frame of labels. Usually contains only one element, but facetting over multiple factors entails multiple label variables.} \item{multi_line}{Whether to display the labels of multiple factors on separate lines.} \item{sep}{String separating variables and values.} \item{width}{Maximum number of characters before wrapping the strip.} } \description{ Labeller functions are in charge of formatting the strip labels of facet grids and wraps. Most of them accept a \code{multi_line} argument to control whether multiple factors (defined in formulae such as \code{~first + second}) should be displayed on a single line separated with commas, or each on their own line. } \details{ \code{label_value()} only displays the value of a factor while \code{label_both()} displays both the variable name and the factor value. \code{label_context()} is context-dependent and uses \code{label_value()} for single factor facetting and \code{label_both()} when multiple factors are involved. \code{label_wrap_gen()} uses \code{\link[base]{strwrap}()} for line wrapping. \code{label_parsed()} interprets the labels as plotmath expressions. \code{\link{label_bquote}()} offers a more flexible way of constructing plotmath expressions. See examples and \code{\link{bquote}()} for details on the syntax of the argument. } \section{Writing New Labeller Functions}{ Note that an easy way to write a labeller function is to transform a function operating on character vectors with \code{\link{as_labeller}()}. A labeller function accepts a data frame of labels (character vectors) containing one column for each factor. Multiple factors occur with formula of the type \code{~first + second}. The return value must be a rectangular list where each 'row' characterises a single facet. The list elements can be either character vectors or lists of plotmath expressions. When multiple elements are returned, they get displayed on their own new lines (i.e., each facet gets a multi-line strip of labels). To illustrate, let's say your labeller returns a list of two character vectors of length 3. This is a rectangular list because all elements have the same length. The first facet will get the first elements of each vector and display each of them on their own line. Then the second facet gets the second elements of each vector, and so on. If it's useful to your labeller, you can retrieve the \code{type} attribute of the incoming data frame of labels. The value of this attribute reflects the kind of strips your labeller is dealing with: \code{"cols"} for columns and \code{"rows"} for rows. Note that \code{\link{facet_wrap}()} has columns by default and rows when the strips are switched with the \code{switch} option. The \code{facet} attribute also provides metadata on the labels. It takes the values \code{"grid"} or \code{"wrap"}. For compatibility with \code{\link{labeller}()}, each labeller function must have the \code{labeller} S3 class. } \examples{ mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "gamma")) p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() # Displaying only the values p + facet_grid(. ~ cyl) p + facet_grid(. ~ cyl, labeller = label_value) \donttest{ # Displaying both the values and the variables p + facet_grid(. ~ cyl, labeller = label_both) # Displaying only the values or both the values and variables # depending on whether multiple factors are facetted over p + facet_grid(am ~ vs+cyl, labeller = label_context) # Interpreting the labels as plotmath expressions p + facet_grid(. ~ cyl2) p + facet_grid(. ~ cyl2, labeller = label_parsed) p + facet_wrap(~vs + cyl2, labeller = label_parsed) } } \seealso{ \code{\link{labeller}()}, \code{\link{as_labeller}()}, \code{\link{label_bquote}()} } ggplot2/man/geom_smooth.Rd0000644000175100001440000001411712613770162015241 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-smooth.r, R/stat-smooth.r \name{geom_smooth} \alias{geom_smooth} \alias{stat_smooth} \title{Add a smoothed conditional mean.} \usage{ geom_smooth(mapping = NULL, data = NULL, stat = "smooth", method = "auto", formula = y ~ x, se = TRUE, position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_smooth(mapping = NULL, data = NULL, geom = "smooth", position = "identity", method = "auto", formula = y ~ x, se = TRUE, n = 80, span = 0.75, fullrange = FALSE, level = 0.95, method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{method}{smoothing method (function) to use, eg. lm, glm, gam, loess, rlm. For datasets with n < 1000 default is \code{\link{loess}}. For datasets with 1000 or more observations defaults to gam, see \code{\link[mgcv]{gam}} for more details.} \item{formula}{formula to use in smoothing function, eg. \code{y ~ x}, \code{y ~ poly(x, 2)}, \code{y ~ log(x)}} \item{se}{display confidence interval around smooth? (TRUE by default, see level to control} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_smooth} and \code{stat_smooth}.} \item{n}{number of points to evaluate smoother at} \item{span}{Controls the amount of smoothing for the default loess smoother. Smaller numbers produce wigglier lines, larger numbers produce smoother lines.} \item{fullrange}{should the fit span the full range of the plot, or just the data} \item{level}{level of confidence interval to use (0.95 by default)} \item{method.args}{List of additional arguments passed on to the modelling function defined by \code{method}.} } \description{ Aids the eye in seeing patterns in the presence of overplotting. \code{geom_smooth} and \code{stat_smooth} are effectively aliases: they both use the same arguments. Use \code{geom_smooth} unless you want to display the results with a non-standard geom. } \details{ Calculation is performed by the (currently undocumented) \code{predictdf} generic and its methods. For most methods the standard error bounds are computed using the \code{\link{predict}} method - the exceptions are \code{loess} which uses a t-based approximation, and \code{glm} where the normal confidence interval is constructed on the link scale, and then back-transformed to the response scale. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "smooth")} } \section{Computed variables}{ \describe{ \item{y}{predicted value} \item{ymin}{lower pointwise confidence interval around the mean} \item{ymax}{upper pointwise confidence interval around the mean} \item{se}{standard error} } } \examples{ ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth() # Use span to control the "wiggliness" of the default loess smoother # The span is the fraction of points used to fit each local regression: # small numbers make a wigglier curve, larger numbers make a smoother curve. ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(span = 0.3) # Instead of a loess smooth, you can use any other modelling function: ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(method = "lm", se = FALSE) ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(method = "lm", formula = y ~ splines::bs(x, 3), se = FALSE) # Smoothes are automatically fit to each group (defined by categorical # aesthetics or the group aesthetic) and for each facet ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point() + geom_smooth(se = FALSE, method = "lm") ggplot(mpg, aes(displ, hwy)) + geom_point() + geom_smooth(span = 0.8) + facet_wrap(~drv) \dontrun{ # To fit a logistic regression, you need to coerce the values to # a numeric vector lying between 0 and 1. binomial_smooth <- function(...) { geom_smooth(method = "glm", method.args = list(family = "binomial"), ...) } ggplot(rpart::kyphosis, aes(Age, Kyphosis)) + geom_jitter(height = 0.05) + binomial_smooth() ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + geom_jitter(height = 0.05) + binomial_smooth() ggplot(rpart::kyphosis, aes(Age, as.numeric(Kyphosis) - 1)) + geom_jitter(height = 0.05) + binomial_smooth(formula = y ~ splines::ns(x, 2)) # But in this case, it's probably better to fit the model yourself # so you can exercise more control and see whether or not it's a good model } } \seealso{ See individual modelling functions for more details: \code{\link{lm}} for linear smooths, \code{\link{glm}} for generalised linear smooths, \code{\link{loess}} for local smooths } ggplot2/man/discrete_scale.Rd0000644000175100001440000000441712611730203015662 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-.r \name{discrete_scale} \alias{discrete_scale} \title{Discrete scale constructor.} \usage{ discrete_scale(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), na.value = NA, drop = TRUE, guide = "legend") } \arguments{ \item{aesthetics}{the names of the aesthetics that this scale works with} \item{scale_name}{the name of the scale} \item{palette}{a palette function that when called with a single integer argument (the number of levels in the scale) returns the values that they should take} \item{name}{the name of the scale - used as the axis label or the legend title} \item{breaks}{control the breaks in the guide. There are four possible types of input: \itemize{ \item \code{NULL}: don't display any breaks \item a character vector giving the breaks as they should appear on the axis or in the legend. \item \code{waiver()} to use the default break computation. \item a function, that when called with a single argument, a character vector giving the limits of the scale, returns a character vector specifying which breaks to display. } This parameter does not affect in any way how the data is scaled - it only affects the appearance of the legend.} \item{labels}{\code{NULL} for no labels, \code{waiver()} for default labels (labels the same as breaks), a character vector the same length as breaks, or a named character vector whose names are used to match replacement the labels for matching breaks.} \item{limits}{A character vector specifying the data range for the scale. and the default order of their display in guides.} \item{expand}{a numeric vector of length two, giving a multiplicative and additive constant used to expand the range of the scales so that there is a small gap between the data and the axes. The defaults are (0,0.6) for discrete scales and (0.05,0) for continuous scales.} \item{na.value}{how should missing values be displayed?} \item{drop}{drop unused factor levels from the scale (\code{TRUE} or \code{FALSE})} \item{guide}{the name of, or actual function, used to create the guide. See \code{\link{guides}} for more info.} } \description{ Discrete scale constructor. } \keyword{internal} ggplot2/man/scale_alpha.Rd0000644000175100001440000000210112611730203015131 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-alpha.r \name{scale_alpha} \alias{scale_alpha} \alias{scale_alpha_continuous} \alias{scale_alpha_discrete} \title{Alpha scales.} \usage{ scale_alpha(..., range = c(0.1, 1)) scale_alpha_continuous(..., range = c(0.1, 1)) scale_alpha_discrete(..., range = c(0.1, 1)) } \arguments{ \item{...}{Other arguments passed on to \code{\link{continuous_scale}} or \code{\link{discrete_scale}} as appropriate, to control name, limits, breaks, labels and so forth.} \item{range}{range of output alpha values. Should lie between 0 and 1.} } \description{ \code{scale_alpha} is an alias for \code{scale_alpha_continuous} since that is the most common use of alpha, and it saves a bit of typing. } \examples{ (p <- ggplot(mtcars, aes(mpg, cyl)) + geom_point(aes(alpha = cyl))) p + scale_alpha("cylinders") p + scale_alpha("number\\nof\\ncylinders") p + scale_alpha(range = c(0.4, 0.8)) (p <- ggplot(mtcars, aes(mpg, cyl)) + geom_point(aes(alpha = factor(cyl)))) p + scale_alpha_discrete(range = c(0.4, 0.8)) } ggplot2/man/summary.ggplot.Rd0000644000175100001440000000101512611730203015670 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/summary.r \name{summary.ggplot} \alias{summary.ggplot} \title{Displays a useful description of a ggplot object} \usage{ \method{summary}{ggplot}(object, ...) } \arguments{ \item{object}{ggplot2 object to summarise} \item{...}{other arguments ignored (for compatibility with generic)} } \description{ Displays a useful description of a ggplot object } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() summary(p) } \keyword{internal} ggplot2/man/geom_ribbon.Rd0000644000175100001440000000634112613770162015203 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-ribbon.r \name{geom_ribbon} \alias{geom_area} \alias{geom_ribbon} \title{Ribbons and area plots.} \usage{ geom_ribbon(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_area(mapping = NULL, data = NULL, stat = "identity", position = "stack", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ For each continuous x value, \code{geom_interval} displays a y interval. \code{geom_area} is a special case of \code{geom_ribbon}, where the minimum of the range is fixed to 0. } \details{ An area plot is the continuous analog of a stacked bar chart (see \code{\link{geom_bar}}), and can be used to show how composition of the whole varies over the range of x. Choosing the order in which different components is stacked is very important, as it becomes increasing hard to see the individual pattern as you move up the stack. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "ribbon")} } \examples{ # Generate data huron <- data.frame(year = 1875:1972, level = as.vector(LakeHuron)) h <- ggplot(huron, aes(year)) h + geom_ribbon(aes(ymin=0, ymax=level)) h + geom_area(aes(y = level)) # Add aesthetic mappings h + geom_ribbon(aes(ymin = level - 1, ymax = level + 1), fill = "grey70") + geom_line(aes(y = level)) } \seealso{ \code{\link{geom_bar}} for discrete intervals (bars), \code{\link{geom_linerange}} for discrete intervals (lines), \code{\link{geom_polygon}} for general polygons } ggplot2/man/cut_interval.Rd0000644000175100001440000000334312611730203015405 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities-break.r \name{cut_interval} \alias{cut_interval} \alias{cut_number} \alias{cut_width} \title{Cut up numeric vector into useful groups.} \usage{ cut_interval(x, n = NULL, length = NULL, ...) cut_number(x, n = NULL, ...) cut_width(x, width, center = NULL, boundary = NULL, closed = c("right", "left")) } \arguments{ \item{x}{numeric vector} \item{n}{number of intervals to create, OR} \item{length}{length of each interval} \item{...}{other arguments passed on to \code{\link{cut}}} \item{width}{The bin width.} \item{center, boundary}{Specify either the position of edge or the center of a bin. Since all bins are aligned, specifying the position of a single bin (which doesn't need to be in the range of the data) affects the location of all bins. If not specified, uses the "tile layers algorithm", and sets the boundary to half of the binwidth. To center on integers, \code{width = 1} and \code{center = 0}. \code{boundary = 0.5}.} \item{closed}{One of \code{"right"} or \code{"left"} indicating whether right or left edges of bins are included in the bin.} } \description{ \code{cut_interval} makes \code{n} groups with equal range, \code{cut_number} makes \code{n} groups with (approximately) equal numbers of observations; \code{cut_width} makes groups of width \code{width}. } \examples{ table(cut_interval(1:100, 10)) table(cut_interval(1:100, 11)) table(cut_number(runif(1000), 10)) table(cut_width(runif(1000), 0.1)) table(cut_width(runif(1000), 0.1, boundary = 0)) table(cut_width(runif(1000), 0.1, center = 0)) } \author{ Randall Prium contributed most of the implementation of \code{cut_width}. } \seealso{ \code{\link{cut_number}} } ggplot2/man/lims.Rd0000644000175100001440000000207512611730203013653 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/limits.r \name{lims} \alias{lims} \alias{xlim} \alias{ylim} \title{Convenience functions to set the axis limits.} \usage{ lims(...) xlim(...) ylim(...) } \arguments{ \item{...}{If numeric, will create a continuous scale, if factor or character, will create a discrete scale. For \code{lims}, every argument must be named.} } \description{ Observations not in this range will be dropped completely and not passed to any other layers. If a NA value is substituted for one of the limits that limit is automatically calculated. } \examples{ # xlim xlim(15, 20) xlim(20, 15) xlim(c(10, 20)) xlim("a", "b", "c") ggplot(mtcars, aes(mpg, wt)) + geom_point() + xlim(15, 20) # with automatic lower limit ggplot(mtcars, aes(mpg, wt)) + geom_point() + xlim(NA, 20) # Change both xlim and ylim ggplot(mtcars, aes(mpg, wt)) + geom_point() + lims(x = c(10, 20), y = c(3, 5)) } \seealso{ For changing x or y axis limits \strong{without} dropping data observations, see \code{\link{coord_cartesian}}. } ggplot2/man/scale_gradient.Rd0000644000175100001440000000757712611730203015667 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-gradient.r, R/zxx.r \name{scale_colour_gradient} \alias{scale_color_continuous} \alias{scale_color_gradient} \alias{scale_color_gradient2} \alias{scale_color_gradientn} \alias{scale_colour_continuous} \alias{scale_colour_gradient} \alias{scale_colour_gradient2} \alias{scale_colour_gradientn} \alias{scale_fill_continuous} \alias{scale_fill_gradient} \alias{scale_fill_gradient2} \alias{scale_fill_gradientn} \title{Smooth gradient between two colours} \usage{ scale_colour_gradient(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") scale_fill_gradient(..., low = "#132B43", high = "#56B1F7", space = "Lab", na.value = "grey50", guide = "colourbar") scale_colour_gradient2(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") scale_fill_gradient2(..., low = muted("red"), mid = "white", high = muted("blue"), midpoint = 0, space = "Lab", na.value = "grey50", guide = "colourbar") scale_colour_gradientn(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) scale_fill_gradientn(..., colours, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar", colors) } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} to control name, limits, breaks, labels and so forth.} \item{low, high}{Colours for low and high ends of the gradient.} \item{space}{colour space in which to calculate gradient. Must be "Lab" - other values are deprecated.} \item{na.value}{Colour to use for missing values} \item{guide}{Type of legend. Use \code{"colourbar"} for continuous colour bar, or \code{"legend"} for discrete colour legend.} \item{mid}{colour for mid point} \item{midpoint}{The midpoint (in data value) of the diverging scale. Defaults to 0.} \item{colours, colors}{Vector of colours to use for n-colour gradient.} \item{values}{if colours should not be evenly positioned along the gradient this vector gives the position (between 0 and 1) for each colour in the \code{colours} vector. See \code{\link{rescale}} for a convience function to map an arbitrary range to between 0 and 1.} } \description{ \code{scale_*_gradient} creates a two colour gradient (low-high), \code{scale_*_gradient2} creates a diverging colour gradient (low-mid-high), \code{scale_*_gradientn} creats a n-colour gradient. } \details{ Default colours are generated with \pkg{munsell} and \code{mnsl(c("2.5PB 2/4", "2.5PB 7/10")}. Generally, for continuous colour scales you want to keep hue constant, but vary chroma and luminance. The \pkg{munsell} package makes this easy to do using the Munsell colour system. } \examples{ df <- data.frame( x = runif(100), y = runif(100), z1 = rnorm(100), z2 = abs(rnorm(100)) ) # Default colour scale colours from light blue to dark blue ggplot(df, aes(x, y)) + geom_point(aes(colour = z2)) # For diverging colour scales use gradient2 ggplot(df, aes(x, y)) + geom_point(aes(colour = z1)) + scale_colour_gradient2() # Use your own colour scale with gradientn ggplot(df, aes(x, y)) + geom_point(aes(colour = z1)) + scale_colour_gradientn(colours = terrain.colors(10)) # Equivalent fill scales do the same job for the fill aesthetic ggplot(faithfuld, aes(waiting, eruptions)) + geom_raster(aes(fill = density)) + scale_fill_gradientn(colours = terrain.colors(10)) # Adjust colour choices with low and high ggplot(df, aes(x, y)) + geom_point(aes(colour = z2)) + scale_colour_gradient(low = "white", high = "black") # Avoid red-green colour contrasts because ~10\% of men have difficulty # seeing them } \seealso{ \code{\link[scales]{seq_gradient_pal}} for details on underlying palette Other colour scales: \code{\link{scale_colour_brewer}}, \code{\link{scale_colour_grey}}, \code{\link{scale_colour_hue}} } ggplot2/man/position_jitter.Rd0000644000175100001440000000301312611730203016125 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-jitter.r \name{position_jitter} \alias{position_jitter} \title{Jitter points to avoid overplotting.} \usage{ position_jitter(width = NULL, height = NULL) } \arguments{ \item{width, height}{Amount of vertical and horizontal jitter. The jitter is added in both positive and negative directions, so the total spread is twice the value specified here. If omitted, defaults to 40\% of the resolution of the data: this means the jitter values will occupy 80\% of the implied bins. Categorical data is aligned on the integers, so a width or height of 0.5 will spread the data so it's not possible to see the distinction between the categories.} } \description{ Jitter points to avoid overplotting. } \examples{ ggplot(mtcars, aes(am, vs)) + geom_point() # Default amount of jittering will generally be too much for # small datasets: ggplot(mtcars, aes(am, vs)) + geom_jitter() # Two ways to override ggplot(mtcars, aes(am, vs)) + geom_jitter(width = 0.1, height = 0.1) ggplot(mtcars, aes(am, vs)) + geom_jitter(position = position_jitter(width = 0.1, height = 0.1)) # The default works better for large datasets, where it will # take up as much space as a boxplot or a bar ggplot(mpg, aes(class, hwy)) + geom_jitter() + geom_boxplot() } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_fill}}, \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_nudge}} } ggplot2/man/aes_all.Rd0000644000175100001440000000065212611730203014306 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes_all} \alias{aes_all} \title{Given a character vector, create a set of identity mappings} \usage{ aes_all(vars) } \arguments{ \item{vars}{vector of variable names} } \description{ Given a character vector, create a set of identity mappings } \examples{ aes_all(names(mtcars)) aes_all(c("x", "y", "col", "pch")) } \keyword{internal} ggplot2/man/geom_violin.Rd0000644000175100001440000001244712613770162015234 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-violin.r, R/stat-ydensity.r \name{geom_violin} \alias{geom_violin} \alias{stat_ydensity} \title{Violin plot.} \usage{ geom_violin(mapping = NULL, data = NULL, stat = "ydensity", draw_quantiles = NULL, position = "dodge", trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_ydensity(mapping = NULL, data = NULL, geom = "violin", position = "dodge", adjust = 1, kernel = "gaussian", trim = TRUE, scale = "area", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{draw_quantiles}{If \code{not(NULL)} (default), draw horizontal lines at the given quantiles of the density estimate.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{trim}{If \code{TRUE} (default), trim the tails of the violins to the range of the data. If \code{FALSE}, don't trim the tails.} \item{scale}{if "area" (default), all violins have the same area (before trimming the tails). If "count", areas are scaled proportionally to the number of observations. If "width", all violins have the same maximum width.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_violin} and \code{stat_ydensity}.} \item{adjust}{see \code{\link{density}} for details} \item{kernel}{kernel used for density estimation, see \code{\link{density}} for details} } \description{ Violin plot. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "violin")} } \section{Computed variables}{ \describe{ \item{density}{density estimate} \item{scaled}{density estimate, scaled to maximum of 1} \item{count}{density * number of points - probably useless for violin plots} \item{violinwidth}{density scaled for the violin plot, according to area, counts or to a constant maximum width} \item{n}{number of points} \item{width}{width of violin bounding box} } } \examples{ p <- ggplot(mtcars, aes(factor(cyl), mpg)) p + geom_violin() \donttest{ p + geom_violin() + geom_jitter(height = 0) p + geom_violin() + coord_flip() # Scale maximum width proportional to sample size: p + geom_violin(scale = "count") # Scale maximum width to 1 for all violins: p + geom_violin(scale = "width") # Default is to trim violins to the range of the data. To disable: p + geom_violin(trim = FALSE) # Use a smaller bandwidth for closer density fit (default is 1). p + geom_violin(adjust = .5) # Add aesthetic mappings # Note that violins are automatically dodged when any aesthetic is # a factor p + geom_violin(aes(fill = cyl)) p + geom_violin(aes(fill = factor(cyl))) p + geom_violin(aes(fill = factor(vs))) p + geom_violin(aes(fill = factor(am))) # Set aesthetics to fixed value p + geom_violin(fill = "grey80", colour = "#3366FF") # Show quartiles p + geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) # Scales vs. coordinate transforms ------- if (require("ggplot2movies")) { # Scale transformations occur before the density statistics are computed. # Coordinate transformations occur afterwards. Observe the effect on the # number of outliers. m <- ggplot(movies, aes(y = votes, x = rating, group = cut_width(rating, 0.5))) m + geom_violin() m + geom_violin() + scale_y_log10() m + geom_violin() + coord_trans(y = "log10") m + geom_violin() + scale_y_log10() + coord_trans(y = "log10") # Violin plots with continuous x: # Use the group aesthetic to group observations in violins ggplot(movies, aes(year, budget)) + geom_violin() ggplot(movies, aes(year, budget)) + geom_violin(aes(group = cut_width(year, 10)), scale = "width") } } } \references{ Hintze, J. L., Nelson, R. D. (1998) Violin Plots: A Box Plot-Density Trace Synergism. The American Statistician 52, 181-184. } \seealso{ \code{\link{geom_violin}} for examples, and \code{\link{stat_density}} for examples with data along the x axis. } ggplot2/man/position_stack.Rd0000644000175100001440000000356012611730203015740 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-fill.r, R/position-stack.r \name{position_fill} \alias{position_fill} \alias{position_stack} \title{Stack overlapping objects on top of one another.} \usage{ position_fill() position_stack() } \description{ \code{position_fill} additionally standardises each stack to have unit height. } \examples{ # Stacking is the default behaviour for most area plots: ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar() # Fill makes it easier to compare proportions ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar(position = "fill") # To change stacking order, use factor() to change order of levels mtcars$vs <- factor(mtcars$vs, levels = c(1,0)) ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) + geom_bar() ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(binwidth = 500) # When used with a histogram, position_fill creates a conditional density # estimate ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(binwidth = 500, position = "fill") # Stacking is also useful for time series data.set <- data.frame( Time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)), Type = rep(c('a', 'b', 'c', 'd'), 4), Value = rpois(16, 10) ) ggplot(data.set, aes(Time, Value)) + geom_area(aes(fill = Type)) # If you want to stack lines, you need to say so: ggplot(data.set, aes(Time, Value)) + geom_line(aes(colour = Type)) ggplot(data.set, aes(Time, Value)) + geom_line(position = "stack", aes(colour = Type)) # But realise that this makes it *much* harder to compare individual # trends } \seealso{ See \code{\link{geom_bar}} and \code{\link{geom_area}} for more examples. Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}}, \code{\link{position_nudge}} } ggplot2/man/aes_colour_fill_alpha.Rd0000644000175100001440000000354512620175102017221 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-colour-fill-alpha.r \name{aes_colour_fill_alpha} \alias{aes_colour_fill_alpha} \alias{color} \alias{colour} \alias{fill} \title{Colour related aesthetics: colour, fill and alpha} \description{ This page demonstrates the usage of a sub-group of aesthetics; colour, fill and alpha. } \examples{ \donttest{ # Bar chart example c <- ggplot(mtcars, aes(factor(cyl))) # Default plotting c + geom_bar() # To change the interior colouring use fill aesthetic c + geom_bar(fill = "red") # Compare with the colour aesthetic which changes just the bar outline c + geom_bar(colour = "red") # Combining both, you can see the changes more clearly c + geom_bar(fill = "white", colour = "red") # The aesthetic fill also takes different colouring scales # setting fill equal to a factor variable uses a discrete colour scale k <- ggplot(mtcars, aes(factor(cyl), fill = factor(vs))) k + geom_bar() # Fill aesthetic can also be used with a continuous variable m <- ggplot(faithfuld, aes(waiting, eruptions)) m + geom_raster() m + geom_raster(aes(fill = density)) # Some geoms don't use both aesthetics (i.e. geom_point or geom_line) b <- ggplot(economics, aes(x = date, y = unemploy)) b + geom_line() b + geom_line(colour = "green") b + geom_point() b + geom_point(colour = "red") # For large datasets with overplotting the alpha # aesthetic will make the points more transparent df <- data.frame(x = rnorm(5000), y = rnorm(5000)) h <- ggplot(df, aes(x,y)) h + geom_point() h + geom_point(alpha = 0.5) h + geom_point(alpha = 1/10) # Alpha can also be used to add shading j <- b + geom_line() j yrng <- range(economics$unemploy) j <- j + geom_rect(aes(NULL, NULL, xmin = start, xmax = end, fill = party), ymin = yrng[1], ymax = yrng[2], data = presidential) j j + scale_fill_manual(values = alpha(c("blue", "red"), .3)) } } ggplot2/man/labeller.Rd0000644000175100001440000000747012611730203014475 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-labels.r \name{labeller} \alias{labeller} \title{Generic labeller function for facets} \usage{ labeller(..., .rows = NULL, .cols = NULL, keep.as.numeric = NULL, .multi_line = TRUE, .default = label_value) } \arguments{ \item{...}{Named arguments of the form \code{variable = labeller}. Each labeller is passed to \code{\link{as_labeller}()} and can be a lookup table, a function taking and returning character vectors, or simply a labeller function.} \item{.rows, .cols}{Labeller for a whole margin (either the rows or the columns). It is passed to \code{\link{as_labeller}()}. When a margin-wide labeller is set, make sure you don't mention in \code{...} any variable belonging to the margin.} \item{keep.as.numeric}{Deprecated. All supplied labellers and on-labeller functions should be able to work with character labels.} \item{.multi_line}{Whether to display the labels of multiple factors on separate lines. This is passed to the labeller function.} \item{.default}{Default labeller for variables not specified. Also used with lookup tables or non-labeller functions.} } \value{ A labeller function to supply to \code{\link{facet_grid}} for the argument \code{labeller}. } \description{ This function makes it easy to assign different labellers to different factors. The labeller can be a function or it can be a named character vectors that will serve as a lookup table. } \details{ In case of functions, if the labeller has class \code{labeller}, it is directly applied on the data frame of labels. Otherwise, it is applied to the columns of the data frame of labels. The data frame is then processed with the function specified in the \code{.default} argument. This is intended to be used with functions taking a character vector such as \code{\link[Hmisc]{capitalize}}. } \examples{ \donttest{ p1 <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() # You can assign different labellers to variables: p1 + facet_grid(vs + am ~ gear, labeller = labeller(vs = label_both, am = label_value)) # Or whole margins: p1 + facet_grid(vs + am ~ gear, labeller = labeller(.rows = label_both, .cols = label_value)) # You can supply functions operating on strings: capitalize <- function(string) { substr(string, 1, 1) <- toupper(substr(string, 1, 1)) string } p2 <- ggplot(msleep, aes(x = sleep_total, y = awake)) + geom_point() p2 + facet_grid(vore ~ conservation, labeller = labeller(vore = capitalize)) # Or use character vectors as lookup tables: conservation_status <- c( cd = "Conservation Dependent", en = "Endangered", lc = "Least concern", nt = "Near Threatened", vu = "Vulnerable", domesticated = "Domesticated" ) ## Source: http://en.wikipedia.org/wiki/Wikipedia:Conservation_status p2 + facet_grid(vore ~ conservation, labeller = labeller( .default = capitalize, conservation = conservation_status )) # In the following example, we rename the levels to the long form, # then apply a wrap labeller to the columns to prevent cropped text msleep$conservation2 <- plyr::revalue(msleep$conservation, conservation_status) p2 \%+\% msleep + facet_grid(vore ~ conservation2) p2 \%+\% msleep + facet_grid(vore ~ conservation2, labeller = labeller(conservation2 = label_wrap_gen(10)) ) # labeller() is especially useful to act as a global labeller. You # can set it up once and use it on a range of different plots with # different facet specifications. global_labeller <- labeller( vore = capitalize, conservation = conservation_status, conservation2 = label_wrap_gen(10), .default = label_both ) p2 + facet_grid(vore ~ conservation, labeller = global_labeller) p2 + facet_wrap(~vore, labeller = global_labeller) p2 \%+\% msleep + facet_wrap(~conservation2, labeller = global_labeller) } } \seealso{ \code{\link{as_labeller}()}, \link{labellers} } ggplot2/man/is.facet.Rd0000644000175100001440000000046512611730203014404 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-.r \name{is.facet} \alias{is.facet} \title{Is this object a facetting specification?} \usage{ is.facet(x) } \arguments{ \item{x}{object to test} } \description{ Is this object a facetting specification? } \keyword{internal} ggplot2/man/geom_blank.Rd0000644000175100001440000000516212611730203015005 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-blank.r \name{geom_blank} \alias{geom_blank} \title{Blank, draws nothing.} \usage{ geom_blank(mapping = NULL, data = NULL, stat = "identity", position = "identity", show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ The blank geom draws nothing, but can be a useful way of ensuring common scales between different plots. } \examples{ ggplot(mtcars, aes(wt, mpg)) + geom_blank() # Nothing to see here! # Take the following scatter plot a <- ggplot(mtcars, aes(x = wt, y = mpg), . ~ cyl) + geom_point() # Add to that some lines with geom_abline() df <- data.frame(a = rnorm(10, 25), b = rnorm(10, 0)) a + geom_abline(aes(intercept = a, slope = b), data = df) # Suppose you then wanted to remove the geom_point layer # If you just remove geom_point, you will get an error b <- ggplot(mtcars, aes(x = wt, y = mpg)) \dontrun{b + geom_abline(aes(intercept = a, slope = b), data = df)} # Switching to geom_blank() gets the desired plot c <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_blank() c + geom_abline(aes(intercept = a, slope = b), data = df) } ggplot2/man/update_defaults.Rd0000644000175100001440000000136612611730203016062 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-defaults.r \name{update_geom_defaults} \alias{update_geom_defaults} \alias{update_stat_defaults} \title{Modify geom/stat aesthetic defaults for future plots} \usage{ update_geom_defaults(geom, new) update_stat_defaults(stat, new) } \arguments{ \item{new}{Named list of aesthetics.} \item{stat, geom}{Name of geom/stat to modify (like \code{"point"} or \code{"bin"}), or a Geom/Stat object (like \code{GeomPoint} or \code{StatBin}).} } \description{ Modify geom/stat aesthetic defaults for future plots } \examples{ update_geom_defaults("point", list(colour = "darkblue")) ggplot(mtcars, aes(mpg, wt)) + geom_point() update_geom_defaults("point", list(colour = "black")) } ggplot2/man/scale_date.Rd0000644000175100001440000000761512611730203015000 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-date.r \name{scale_date} \alias{scale_date} \alias{scale_x_date} \alias{scale_x_datetime} \alias{scale_y_date} \alias{scale_y_datetime} \title{Position scale, date & date times} \usage{ scale_x_date(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) scale_y_date(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) scale_x_datetime(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) scale_y_datetime(name = waiver(), breaks = waiver(), date_breaks = waiver(), labels = waiver(), date_labels = waiver(), minor_breaks = waiver(), date_minor_breaks = waiver(), limits = NULL, expand = waiver()) } \arguments{ \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{date_breaks}{A string giving the distance between breaks like "2 weeks", or "10 years". If both \code{breaks} and \code{date_breaks} are specified, \code{date_breaks} wins.} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{date_labels}{A string giving the formatting specification for the labels. Codes are defined in \code{\link{strftime}}. If both \code{labels} and \code{date_labels} are specified, \code{date_labels} wins.} \item{minor_breaks}{One of: \itemize{ \item \code{NULL} for no minor breaks \item \code{waiver()} for the default breaks (one minor break between each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} \item{date_minor_breaks}{A string giving the distance between minor breaks like "2 weeks", or "10 years". If both \code{minor_breaks} and \code{date_minor_breaks} are specified, \code{date_minor_breaks} wins.} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{expand}{A numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes. The defaults are \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for discrete variables.} } \description{ Use \code{scale_*_date} with \code{Date} variables, and \code{scale_*_datetime} with \code{POSIXct} variables. } \examples{ last_month <- Sys.Date() - 0:29 df <- data.frame( date = last_month, price = runif(30) ) base <- ggplot(df, aes(date, price)) + geom_line() # The date scale will attempt to pick sensible defaults for # major and minor tick marks. Override with date_breaks, date_labels # date_minor_breaks arguments. base + scale_x_date(date_labels = "\%b \%d") base + scale_x_date(date_breaks = "1 week", date_labels = "\%W") base + scale_x_date(date_minor_breaks = "1 day") # Set limits base + scale_x_date(limits = c(Sys.Date() - 7, NA)) } \seealso{ \code{\link{scale_continuous}} for continuous position scales. } ggplot2/man/borders.Rd0000644000175100001440000000264012620176170014354 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-map.r \name{borders} \alias{borders} \title{Create a layer of map borders.} \usage{ borders(database = "world", regions = ".", fill = NA, colour = "grey50", xlim = NULL, ylim = NULL, ...) } \arguments{ \item{database}{map data, see \code{\link[maps]{map}} for details} \item{regions}{map region} \item{fill}{fill colour} \item{colour}{border colour} \item{xlim, ylim}{latitudinal and logitudinal range for extracting map polygons, see \code{\link[maps]{map}} for details.} \item{...}{other arguments passed onto \code{\link{geom_polygon}}} } \description{ Create a layer of map borders. } \examples{ if (require("maps")) { ia <- map_data("county", "iowa") mid_range <- function(x) mean(range(x)) seats <- plyr::ddply(ia, "subregion", plyr::colwise(mid_range, c("lat", "long"))) ggplot(ia, aes(long, lat)) + geom_polygon(aes(group = group), fill = NA, colour = "grey60") + geom_text(aes(label = subregion), data = seats, size = 2, angle = 45) data(us.cities) capitals <- subset(us.cities, capital == 2) ggplot(capitals, aes(long, lat)) + borders("state") + geom_point(aes(size = pop)) + scale_size_area() + coord_quickmap() # Same map, with some world context ggplot(capitals, aes(long, lat)) + borders("world", xlim = c(-130, -60), ylim = c(20, 50)) + geom_point(aes(size = pop)) + scale_size_area() + coord_quickmap() } } ggplot2/man/stat_function.Rd0000644000175100001440000000563512633014264015602 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-function.r \name{stat_function} \alias{stat_function} \title{Superimpose a function.} \usage{ stat_function(mapping = NULL, data = NULL, geom = "path", position = "identity", fun, n = 101, args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{The aesthetic mapping, usually constructed with \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set at the layer level if you are overriding the plot defaults.} \item{data}{A layer specific dataset - only needed if you want to override the plot defaults.} \item{geom}{The geometric object to use display the data} \item{position}{The position adjustment to use for overlapping points on this layer} \item{fun}{function to use} \item{n}{number of points to interpolate along} \item{args}{list of additional arguments to pass to \code{fun}} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. This can include aesthetics whose values you want to set, not map. See \code{\link{layer}} for more details.} } \description{ Superimpose a function. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "function")} } \section{Computed variables}{ \describe{ \item{x}{x's along a grid} \item{y}{value of function evaluated at corresponding x} } } \examples{ set.seed(1492) df <- data.frame( x = rnorm(100) ) x <- df$x base <- ggplot(df, aes(x)) + geom_density() base + stat_function(fun = dnorm, colour = "red") base + stat_function(fun = dnorm, colour = "red", arg = list(mean = 3)) # Plot functions without data # Examples adapted from Kohske Takahashi # Specify range of x-axis ggplot(data.frame(x = c(0, 2)), aes(x)) + stat_function(fun = exp, geom = "line") # Plot a normal curve ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm) # To specify a different mean or sd, use the args parameter to supply new values ggplot(data.frame(x = c(-5, 5)), aes(x)) + stat_function(fun = dnorm, args = list(mean = 2, sd = .5)) # Two functions on the same plot f <- ggplot(data.frame(x = c(0, 10)), aes(x)) f + stat_function(fun = sin, colour = "red") + stat_function(fun = cos, colour = "blue") # Using a custom function test <- function(x) {x ^ 2 + x + 20} f + stat_function(fun = test) } ggplot2/man/zeroGrob.Rd0000644000175100001440000000043212611730203014473 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/grob-null.r \name{zeroGrob} \alias{zeroGrob} \title{The zero grob draws nothing and has zero size.} \usage{ zeroGrob() } \description{ The zero grob draws nothing and has zero size. } \keyword{internal} ggplot2/man/expand_limits.Rd0000644000175100001440000000152512611730203015546 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/limits.r \name{expand_limits} \alias{expand_limits} \title{Expand the plot limits with data.} \usage{ expand_limits(...) } \arguments{ \item{...}{named list of aesthetics specifying the value (or values) that should be included in each scale.} } \description{ panels or all plots. This function is a thin wrapper around \code{\link{geom_blank}} that makes it easy to add such values. } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p + expand_limits(x = 0) p + expand_limits(y = c(1, 9)) p + expand_limits(x = 0, y = 0) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = cyl)) + expand_limits(colour = seq(2, 10, by = 2)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) + expand_limits(colour = factor(seq(2, 10, by = 2))) } ggplot2/man/coord_map.Rd0000644000175100001440000000764512611730203014662 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-map.r, R/coord-quickmap.R \name{coord_map} \alias{coord_map} \alias{coord_quickmap} \title{Map projections.} \usage{ coord_map(projection = "mercator", ..., orientation = NULL, xlim = NULL, ylim = NULL) coord_quickmap(xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{projection}{projection to use, see \code{\link[mapproj]{mapproject}} for list} \item{...}{other arguments passed on to \code{\link[mapproj]{mapproject}}} \item{orientation}{projection orientation, which defaults to \code{c(90, 0, mean(range(x)))}. This is not optimal for many projections, so you will have to supply your own. See \code{\link[mapproj]{mapproject}} for more information.} \item{xlim}{manually specific x limits (in degrees of longitude)} \item{ylim}{manually specific y limits (in degrees of latitude)} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ The representation of a portion of the earth, which is approximately spherical, onto a flat 2D plane requires a projection. This is what \code{\link{coord_map}} does. These projections account for the fact that the actual length (in km) of one degree of longitude varies between the equator and the pole. Near the equator, the ratio between the lengths of one degree of latitude and one degree of longitude is approximately 1. Near the pole, it is tends towards infinity because the length of one degree of longitude tends towards 0. For regions that span only a few degrees and are not too close to the poles, setting the aspect ratio of the plot to the appropriate lat/lon ratio approximates the usual mercator projection. This is what \code{coord_quickmap} does. With \code{\link{coord_map}} all elements of the graphic have to be projected which is not the case here. So \code{\link{coord_quickmap}} has the advantage of being much faster, in particular for complex plots such as those using with \code{\link{geom_tile}}, at the expense of correctness in the projection. This coordinate system provides the full range of map projections available in the mapproj package. } \examples{ if (require("maps")) { nz <- map_data("nz") # Prepare a map of NZ nzmap <- ggplot(nz, aes(x = long, y = lat, group = group)) + geom_polygon(fill = "white", colour = "black") # Plot it in cartesian coordinates nzmap # With correct mercator projection nzmap + coord_map() # With the aspect ratio approximation nzmap + coord_quickmap() # Other projections nzmap + coord_map("cylindrical") nzmap + coord_map("azequalarea",orientation=c(-36.92,174.6,0)) states <- map_data("state") usamap <- ggplot(states, aes(long, lat, group = group)) + geom_polygon(fill = "white", colour = "black") # Use cartesian coordinates usamap # With mercator projection usamap + coord_map() usamap + coord_quickmap() # See ?mapproject for coordinate systems and their parameters usamap + coord_map("gilbert") usamap + coord_map("lagrange") # For most projections, you'll need to set the orientation yourself # as the automatic selection done by mapproject is not available to # ggplot usamap + coord_map("orthographic") usamap + coord_map("stereographic") usamap + coord_map("conic", lat0 = 30) usamap + coord_map("bonne", lat0 = 50) # World map, using geom_path instead of geom_polygon world <- map_data("world") worldmap <- ggplot(world, aes(x=long, y=lat, group=group)) + geom_path() + scale_y_continuous(breaks = (-2:2) * 30) + scale_x_continuous(breaks = (-4:4) * 45) # Orthographic projection with default orientation (looking down at North pole) worldmap + coord_map("ortho") # Looking up up at South Pole worldmap + coord_map("ortho", orientation = c(-90, 0, 0)) # Centered on New York (currently has issues with closing polygons) worldmap + coord_map("ortho", orientation = c(41, -74, 0)) } } ggplot2/man/aes.Rd0000644000175100001440000000300112611730203013445 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes} \alias{aes} \title{Define aesthetic mappings.} \usage{ aes(x, y, ...) } \arguments{ \item{x, y, ...}{List of name value pairs giving aesthetics to map to variables. The names for x and y aesthetics can be omitted (because they are so common); all other aesthetics must be named.} } \description{ Generate aesthetic mappings that describe how variables in the data are mapped to visual properties (aesthetics) of geoms. This function also standardise aesthetic names by performs partial name matching, converting color to colour, and old style R names to ggplot names (eg. pch to shape, cex to size) } \examples{ aes(x = mpg, y = wt) aes(mpg, wt) # You can also map aesthetics to functions of variables aes(x = mpg ^ 2, y = wt / cyl) # Aesthetic names are automatically standardised aes(col = x) aes(fg = x) aes(color = x) aes(colour = x) # aes is almost always used with ggplot() or a layer ggplot(mpg, aes(displ, hwy)) + geom_point() ggplot(mpg) + geom_point(aes(displ, hwy)) # Aesthetics supplied to ggplot() are used as defaults for every layer # you can override them, or supply different aesthetics for each layer } \seealso{ See \code{\link{aes_q}}/\code{\link{aes_string}} for standard evaluation versions of \code{aes}. See \code{\link{aes_colour_fill_alpha}}, \code{\link{aes_group_order}}, \code{\link{aes_linetype_size_shape}} and \code{\link{aes_position}} for more specific examples with different aesthetics. } ggplot2/man/txhousing.Rd0000644000175100001440000000133712611730203014737 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{txhousing} \alias{txhousing} \title{Housing sales in TX.} \format{A data frame with 8602 observations and 9 variables: \itemize{ \item{city}{Name of MLS area} \item{year,month,date}{Date} \item{sales}{Number of sales} \item{volume}{Total value of sales} \item{median}{Median sale price} \item{listings}{Total active listings} \item{inventory}{"Months inventory": amount of time it would take to sell all current listings at current pace of sales.} }} \usage{ txhousing } \description{ Information about the housing market in Texas provided by the TAMU real estate center, \url{http://recenter.tamu.edu/}. } \keyword{datasets} ggplot2/man/geom_text.Rd0000644000175100001440000001551712613770162014721 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-label.R, R/geom-text.r \name{geom_label} \alias{geom_label} \alias{geom_text} \title{Textual annotations.} \usage{ geom_label(mapping = NULL, data = NULL, stat = "identity", position = "identity", parse = FALSE, ..., nudge_x = 0, nudge_y = 0, label.padding = unit(0.25, "lines"), label.r = unit(0.15, "lines"), label.size = 0.25, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) geom_text(mapping = NULL, data = NULL, stat = "identity", position = "identity", parse = FALSE, ..., nudge_x = 0, nudge_y = 0, check_overlap = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{parse}{If TRUE, the labels will be parsed into expressions and displayed as described in ?plotmath} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{nudge_x, nudge_y}{Horizontal and vertical adjustment to nudge labels by. Useful for offsetting text from points, particularly on discrete scales.} \item{label.padding}{Amount of padding around label. Defaults to 0.25 lines.} \item{label.r}{Radius of rounded corners. Defaults to 0.15 lines.} \item{label.size}{Size of label border, in mm.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{check_overlap}{If \code{TRUE}, text that overlaps previous text in the same layer will not be plotted. A quick and dirty way} } \description{ \code{geom_text} adds text directly to the plot. \code{geom_label} draws a rectangle underneath the text, making it easier to read. } \details{ Note the the "width" and "height" of a text element are 0, so stacking and dodging text will not work by default, and axis limits are not automatically expanded to include all text. Obviously, labels do have height and width, but they are physical units, not data units. The amount of space they occupy on that plot is not constant in data units: when you resize a plot, labels stay the same size, but the size of the axes changes. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "text")} } \section{\code{geom_label}}{ Currently \code{geom_label} does not support the \code{rot} parameter and is considerably slower than \code{geom_text}. The \code{fill} aesthetic controls the background colour of the label. } \section{Alignment}{ You can modify text alignment with the \code{vjust} and \code{hjust} aesthetics. These can either be a number between 0 (right/bottom) and 1 (top/left) or a character ("left", "middle", "right", "bottom", "center", "top"). There are two special alignments: "inward" and "outward". Inward always aligns text towards the center, and outward aligns it away from the center } \examples{ p <- ggplot(mtcars, aes(wt, mpg, label = rownames(mtcars))) p + geom_text() # Avoid overlaps p + geom_text(check_overlap = TRUE) # Labels with background p + geom_label() # Change size of the label p + geom_text(size = 10) # Set aesthetics to fixed value p + geom_point() + geom_text(hjust = 0, nudge_x = 0.05) p + geom_point() + geom_text(vjust = 0, nudge_y = 0.5) p + geom_point() + geom_text(angle = 45) \dontrun{ p + geom_text(family = "Times New Roman") } # Add aesthetic mappings p + geom_text(aes(colour = factor(cyl))) p + geom_text(aes(colour = factor(cyl))) + scale_colour_discrete(l = 40) p + geom_label(aes(fill = factor(cyl)), colour = "white", fontface = "bold") p + geom_text(aes(size = wt)) # Scale height of text, rather than sqrt(height) p + geom_text(aes(size = wt)) + scale_radius(range = c(3,6)) # You can display expressions by setting parse = TRUE. The # details of the display are described in ?plotmath, but note that # geom_text uses strings, not expressions. p + geom_text(aes(label = paste(wt, "^(", cyl, ")", sep = "")), parse = TRUE) # Add a text annotation p + geom_text() + annotate("text", label = "plot mpg vs. wt", x = 2, y = 15, size = 8, colour = "red") \donttest{ # Aligning labels and bars -------------------------------------------------- df <- data.frame( x = factor(c(1, 1, 2, 2)), y = c(1, 3, 2, 1), grp = c("a", "b", "a", "b") ) # ggplot2 doesn't know you want to give the labels the same virtual width # as the bars: ggplot(data = df, aes(x, y, fill = grp, label = y)) + geom_bar(stat = "identity", position = "dodge") + geom_text(position = "dodge") # So tell it: ggplot(data = df, aes(x, y, fill = grp, label = y)) + geom_bar(stat = "identity", position = "dodge") + geom_text(position = position_dodge(0.9)) # Use you can't nudge and dodge text, so instead adjust the y postion ggplot(data = df, aes(x, y, fill = grp, label = y)) + geom_bar(stat = "identity", position = "dodge") + geom_text(aes(y = y + 0.05), position = position_dodge(0.9), vjust = 0) # To place text in the middle of each bar in a stacked barplot, you # need to do the computation yourself df <- transform(df, mid_y = ave(df$y, df$x, FUN = function(val) cumsum(val) - (0.5 * val))) ggplot(data = df, aes(x, y, fill = grp, label = y)) + geom_bar(stat = "identity") + geom_text(aes(y = mid_y)) # Justification ------------------------------------------------------------- df <- data.frame( x = c(1, 1, 2, 2, 1.5), y = c(1, 2, 1, 2, 1.5), text = c("bottom-left", "bottom-right", "top-left", "top-right", "center") ) ggplot(df, aes(x, y)) + geom_text(aes(label = text)) ggplot(df, aes(x, y)) + geom_text(aes(label = text), vjust = "inward", hjust = "inward") } } ggplot2/man/geom_segment.Rd0000644000175100001440000001057112613770162015372 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-segment.r, R/geom-curve.r \name{geom_segment} \alias{geom_curve} \alias{geom_segment} \title{Line segments and curves.} \usage{ geom_segment(mapping = NULL, data = NULL, stat = "identity", position = "identity", arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_curve(mapping = NULL, data = NULL, stat = "identity", position = "identity", curvature = 0.5, angle = 90, ncp = 5, arrow = NULL, lineend = "butt", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{arrow}{specification for arrow heads, as created by arrow()} \item{lineend}{Line end style (round, butt, square)} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{curvature}{A numeric value giving the amount of curvature. Negative values produce left-hand curves, positive values produce right-hand curves, and zero produces a straight line.} \item{angle}{A numeric value between 0 and 180, giving an amount to skew the control points of the curve. Values less than 90 skew the curve towards the start point and values greater than 90 skew the curve towards the end point.} \item{ncp}{The number of control points used to draw the curve. More control points creates a smoother curve.} } \description{ \code{geom_segment} draws a straight line between points (x1, y1) and (x2, y2). \code{geom_curve} draws a curved line. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "segment")} } \examples{ b <- ggplot(mtcars, aes(wt, mpg)) + geom_point() df <- data.frame(x1 = 2.62, x2 = 3.57, y1 = 21.0, y2 = 15.0) b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "curve"), data = df) + geom_segment(aes(x = x1, y = y1, xend = x2, yend = y2, colour = "segment"), data = df) b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = -0.2) b + geom_curve(aes(x = x1, y = y1, xend = x2, yend = y2), data = df, curvature = 1) b + geom_curve( aes(x = x1, y = y1, xend = x2, yend = y2), data = df, arrow = arrow(length = unit(0.03, "npc")) ) ggplot(seals, aes(long, lat)) + geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat), arrow = arrow(length = unit(0.1,"cm"))) + borders("state") # You can also use geom_segment to recreate plot(type = "h") : counts <- as.data.frame(table(x = rpois(100,5))) counts$x <- as.numeric(as.character(counts$x)) with(counts, plot(x, Freq, type = "h", lwd = 10)) ggplot(counts, aes(x, Freq)) + geom_segment(aes(xend = x, yend = 0), size = 10, lineend = "butt") } \seealso{ \code{\link{geom_path}} and \code{\link{geom_line}} for multi- segment lines and paths. \code{\link{geom_spoke}} for a segment parameterised by a location (x, y), and an angle and radius. } ggplot2/man/graphical-units.Rd0000644000175100001440000000070112613770162016005 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-.r \docType{data} \name{graphical-units} \alias{.pt} \alias{.stroke} \alias{graphical-units} \title{Graphical units} \format{An object of class \code{numeric} of length 1.} \usage{ .pt .stroke } \description{ Multiply size in mm by these constants in order to convert to the units that grid uses internally for \code{lwd} and \code{fontsize}. } \keyword{datasets} ggplot2/man/fortify-multcomp.Rd0000644000175100001440000000246712611730203016234 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-multcomp.r \name{fortify-multcomp} \alias{fortify-multcomp} \alias{fortify.cld} \alias{fortify.confint.glht} \alias{fortify.glht} \alias{fortify.summary.glht} \title{Fortify methods for objects produced by \pkg{multcomp}} \usage{ \method{fortify}{glht}(model, data, ...) \method{fortify}{confint.glht}(model, data, ...) \method{fortify}{summary.glht}(model, data, ...) \method{fortify}{cld}(model, data, ...) } \arguments{ \item{model}{an object of class \code{glht}, \code{confint.glht}, \code{summary.glht} or \code{\link[multcomp]{cld}}} \item{data, ...}{other arguments to the generic ignored in this method.} } \description{ Fortify methods for objects produced by \pkg{multcomp} } \examples{ if (require("multcomp")) { amod <- aov(breaks ~ wool + tension, data = warpbreaks) wht <- glht(amod, linfct = mcp(tension = "Tukey")) fortify(wht) ggplot(wht, aes(lhs, estimate)) + geom_point() CI <- confint(wht) fortify(CI) ggplot(CI, aes(lhs, estimate, ymin = lwr, ymax = upr)) + geom_pointrange() fortify(summary(wht)) ggplot(mapping = aes(lhs, estimate)) + geom_linerange(aes(ymin = lwr, ymax = upr), data = CI) + geom_point(aes(size = p), data = summary(wht)) + scale_size(trans = "reverse") cld <- cld(wht) fortify(cld) } } ggplot2/man/add_theme.Rd0000644000175100001440000000075612613770162014637 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{add_theme} \alias{add_theme} \title{Modify properties of an element in a theme object} \usage{ add_theme(t1, t2, t2name) } \arguments{ \item{t1}{A theme object} \item{t2}{A theme object that is to be added to \code{t1}} \item{t2name}{A name of the t2 object. This is used for printing informative error messages.} } \description{ Modify properties of an element in a theme object } \seealso{ +.gg } ggplot2/man/position_identity.Rd0000644000175100001440000000070312611730203016460 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-identity.r \name{position_identity} \alias{position_identity} \title{Don't adjust position} \usage{ position_identity() } \description{ Don't adjust position } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_fill}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}}, \code{\link{position_nudge}} } ggplot2/man/calc_element.Rd0000644000175100001440000000161412611730203015320 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{calc_element} \alias{calc_element} \title{Calculate the element properties, by inheriting properties from its parents} \usage{ calc_element(element, theme, verbose = FALSE) } \arguments{ \item{element}{The name of the theme element to calculate} \item{theme}{A theme object (like theme_grey())} \item{verbose}{If TRUE, print out which elements this one inherits from} } \description{ Calculate the element properties, by inheriting properties from its parents } \examples{ t <- theme_grey() calc_element('text', t) # Compare the "raw" element definition to the element with calculated inheritance t$axis.text.x calc_element('axis.text.x', t, verbose = TRUE) # This reports that axis.text.x inherits from axis.text, # which inherits from text. You can view each of them with: t$axis.text.x t$axis.text t$text } ggplot2/man/stat_summary.Rd0000644000175100001440000001610412620172326015443 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary-bin.R, R/stat-summary.r \name{stat_summary_bin} \alias{stat_summary} \alias{stat_summary_bin} \title{Summarise y values at unique/binned x x.} \usage{ stat_summary_bin(mapping = NULL, data = NULL, geom = "pointrange", fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, position = "identity", show.legend = NA, inherit.aes = TRUE, ...) stat_summary(mapping = NULL, data = NULL, geom = "pointrange", fun.data = NULL, fun.y = NULL, fun.ymax = NULL, fun.ymin = NULL, fun.args = list(), na.rm = FALSE, position = "identity", show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{geom}{Use to override the default connection between \code{geom_histogram}/\code{geom_freqpoly} and \code{stat_bin}.} \item{fun.data}{A function that is given the complete data and should return a data frame with variables \code{ymin}, \code{y}, and \code{ymax}.} \item{fun.ymin, fun.y, fun.ymax}{Alternatively, supply three individual functions that are each passed a vector of x's and should return a single number.} \item{fun.args}{Optional additional arguments passed on to the functions.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ \code{stat_summary} operates on unique \code{x}; \code{stat_summary_bin} operators on binned \code{x}. They are more flexible versions of \code{\link{stat_bin}}: instead of just counting, the can compute any aggregate. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "summary")} } \section{Summary functions}{ You can either supply summary functions individually (\code{fun.y}, \code{fun.ymax}, \code{fun.ymin}), or as a single function (\code{fun.data}): \describe{ \item{fun.data}{Complete summary function. Should take numeric vector as input and return data frame as output} \item{fun.ymin}{ymin summary function (should take numeric vector and return single number)} \item{fun.y}{y summary function (should take numeric vector and return single number)} \item{fun.ymax}{ymax summary function (should take numeric vector and return single number)} } A simple vector function is easiest to work with as you can return a single number, but is somewhat less flexible. If your summary function computes multiple values at once (e.g. ymin and ymax), use \code{fun.data}. If no aggregation functions are suppled, will default to \code{\link{mean_se}}. } \examples{ d <- ggplot(mtcars, aes(cyl, mpg)) + geom_point() d + stat_summary(fun.data = "mean_cl_boot", colour = "red", size = 2) # You can supply individual functions to summarise the value at # each x: d + stat_summary(fun.y = "median", colour = "red", size = 2) d + stat_summary(fun.y = "mean", colour = "red", size = 2) d + aes(colour = factor(vs)) + stat_summary(fun.y = mean, geom="line") d + stat_summary(fun.y = mean, fun.ymin = min, fun.ymax = max, colour = "red") #' d <- ggplot(diamonds, aes(carat, price)) d + geom_smooth() d + geom_line(stat = "summary_bin", binwidth = 0.1, fun.y = "mean") d <- ggplot(diamonds, aes(cut)) d + geom_bar() d + stat_summary_bin(aes(y = price), fun.y = "mean", geom = "bar") \donttest{ # A set of useful summary functions is provided from the Hmisc package: stat_sum_df <- function(fun, geom="crossbar", ...) { stat_summary(fun.data=fun, colour="red", geom=geom, width=0.2, ...) } # Don't use ylim to zoom into a summary plot - this throws the # data away p <- ggplot(mtcars, aes(cyl, mpg)) + stat_summary(fun.y = "mean", geom = "point") p p + ylim(15, 30) # Instead use coord_cartesian p + coord_cartesian(ylim = c(15, 30)) # The crossbar geom needs grouping to be specified when used with # a continuous x axis. d + stat_sum_df("mean_cl_boot", mapping = aes(group = cyl)) d + stat_sum_df("mean_sdl", mapping = aes(group = cyl)) d + stat_sum_df("mean_sdl", mult = 1, mapping = aes(group = cyl)) d + stat_sum_df("median_hilow", mapping = aes(group = cyl)) # There are lots of different geoms you can use to display the summaries d + stat_sum_df("mean_cl_normal", mapping = aes(group = cyl)) d + stat_sum_df("mean_cl_normal", geom = "errorbar") d + stat_sum_df("mean_cl_normal", geom = "pointrange") d + stat_sum_df("mean_cl_normal", geom = "smooth") # Summaries are more useful with a bigger data set: mpg2 <- subset(mpg, cyl != 5L) m <- ggplot(mpg2, aes(x=cyl, y=hwy)) + geom_point() + stat_summary(fun.data = "mean_sdl", geom = "linerange", colour = "red", size = 2, mult = 1) + xlab("cyl") m # An example with highly skewed distributions: if (require("ggplot2movies")) { set.seed(596) mov <- movies[sample(nrow(movies), 1000), ] m2 <- ggplot(mov, aes(x= factor(round(rating)), y=votes)) + geom_point() m2 <- m2 + stat_summary(fun.data = "mean_cl_boot", geom = "crossbar", colour = "red", width = 0.3) + xlab("rating") m2 # Notice how the overplotting skews off visual perception of the mean # supplementing the raw data with summary statistics is _very_ important # Next, we'll look at votes on a log scale. # Transforming the scale means the data are transformed # first, after which statistics are computed: m2 + scale_y_log10() # Transforming the coordinate system occurs after the # statistic has been computed. This means we're calculating the summary on the raw data # and stretching the geoms onto the log scale. Compare the widths of the # standard errors. m2 + coord_trans(y="log10") } } } \seealso{ \code{\link{geom_errorbar}}, \code{\link{geom_pointrange}}, \code{\link{geom_linerange}}, \code{\link{geom_crossbar}} for geoms to display summarised data } ggplot2/man/as.list.ggproto.Rd0000644000175100001440000000112412611730203015736 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{as.list.ggproto} \alias{as.list.ggproto} \title{Convert a ggproto object to a list} \usage{ \method{as.list}{ggproto}(x, inherit = TRUE, ...) } \arguments{ \item{x}{A ggproto object to convert to a list.} \item{inherit}{If \code{TRUE} (the default), flatten all inherited items into the returned list. If \code{FALSE}, do not include any inherited items.} \item{...}{Further arguments to pass to \code{as.list.environment}.} } \description{ This will not include the object's \code{super} member. } ggplot2/man/geom_histogram.Rd0000644000175100001440000001436212613770162015727 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-freqpoly.r, R/geom-histogram.r, R/stat-bin.r \name{geom_freqpoly} \alias{geom_freqpoly} \alias{geom_histogram} \alias{stat_bin} \title{Histograms and frequency polygons.} \usage{ geom_freqpoly(mapping = NULL, data = NULL, stat = "bin", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_histogram(mapping = NULL, data = NULL, stat = "bin", binwidth = NULL, bins = NULL, origin = NULL, right = FALSE, position = "stack", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_bin(mapping = NULL, data = NULL, geom = "bar", position = "stack", width = 0.9, drop = FALSE, right = FALSE, binwidth = NULL, bins = NULL, origin = NULL, breaks = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{binwidth}{Bin width to use. Defaults to 1/\code{bins} of the range of the data} \item{bins}{Number of bins. Overridden by \code{binwidth} or \code{breaks}. Defaults to 30} \item{origin}{Origin of first bin} \item{right}{If \code{TRUE}, right-closed, left-open, if \code{FALSE}, the default, right-open, left-closed.} \item{geom, stat}{Use to override the default connection between \code{geom_histogram}/\code{geom_freqpoly} and \code{stat_bin}.} \item{width}{Width of bars when used with categorical data} \item{drop}{If TRUE, remove all bins with zero counts} \item{breaks}{Actual breaks to use. Overrides bin width, bin number and origin} } \description{ Display a 1d distribution by dividing into bins and counting the number of observations in each bin. Histograms use bars; frequency polygons use lines. \code{stat_bin} is suitable only for continuous x data. If your x data is discrete, you probably want to use \code{\link{stat_count}}. } \details{ By default, \code{stat_bin} uses 30 bins - this is not a good default, but the idea is to get you experimenting with different binwidths. You may need to look at a few to uncover the full story behind your data. } \section{Aesthetics}{ \code{geom_histogram} uses the same aesthetics as \code{geom_bar}; \code{geom_freqpoly} uses the same aesthetics as \code{geom_line}. } \section{Computed variables}{ \describe{ \item{count}{number of points in bin} \item{density}{density of points in bin, scaled to integrate to 1} \item{ncount}{count, scaled to maximum of 1} \item{ndensity}{density, scaled to maximum of 1} } } \examples{ ggplot(diamonds, aes(carat)) + geom_histogram() ggplot(diamonds, aes(carat)) + geom_histogram(binwidth = 0.01) ggplot(diamonds, aes(carat)) + geom_histogram(bins = 200) # Rather than stacking histograms, it's easier to compare frequency # polygons ggplot(diamonds, aes(price, fill = cut)) + geom_histogram(binwidth = 500) ggplot(diamonds, aes(price, colour = cut)) + geom_freqpoly(binwidth = 500) # To make it easier to compare distributions with very different counts, # put density on the y axis instead of the default count ggplot(diamonds, aes(price, ..density.., colour = cut)) + geom_freqpoly(binwidth = 500) if (require("ggplot2movies")) { # Often we don't want the height of the bar to represent the # count of observations, but the sum of some other variable. # For example, the following plot shows the number of movies # in each rating. m <- ggplot(movies, aes(rating)) m + geom_histogram(binwidth = 0.1) # If, however, we want to see the number of votes cast in each # category, we need to weight by the votes variable m + geom_histogram(aes(weight = votes), binwidth = 0.1) + ylab("votes") # For transformed scales, binwidth applies to the transformed data. # The bins have constant width on the transformed scale. m + geom_histogram() + scale_x_log10() m + geom_histogram(binwidth = 0.05) + scale_x_log10() # For transformed coordinate systems, the binwidth applies to the # raw data. The bins have constant width on the original scale. # Using log scales does not work here, because the first # bar is anchored at zero, and so when transformed becomes negative # infinity. This is not a problem when transforming the scales, because # no observations have 0 ratings. m + geom_histogram(origin = 0) + coord_trans(x = "log10") # Use origin = 0, to make sure we don't take sqrt of negative values m + geom_histogram(origin = 0) + coord_trans(x = "sqrt") # You can also transform the y axis. Remember that the base of the bars # has value 0, so log transformations are not appropriate m <- ggplot(movies, aes(x = rating)) m + geom_histogram(binwidth = 0.5) + scale_y_sqrt() } rm(movies) } \seealso{ \code{\link{stat_count}}, which counts the number of cases at each x posotion, without binning. It is suitable for both discrete and continuous x data, whereas \link{stat_bin} is suitable only for continuous x data. } ggplot2/man/geom_count.Rd0000644000175100001440000000726312611730203015052 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-count.r, R/stat-sum.r \name{geom_count} \alias{geom_count} \alias{stat_sum} \title{Count the number of observations at each location.} \usage{ geom_count(mapping = NULL, data = NULL, stat = "sum", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_sum(mapping = NULL, data = NULL, geom = "point", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_count} and \code{stat_sum}.} } \description{ This is a variant \code{\link{geom_point}} that counts the number of observations at each location, then maps the count to point size. It useful when you have discrete data. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "point")} } \section{Computed variables}{ \describe{ \item{n}{number of observations at position} \item{prop}{percent of points in that panel at that position} } } \examples{ ggplot(mpg, aes(cty, hwy)) + geom_point() ggplot(mpg, aes(cty, hwy)) + geom_count() # Best used in conjunction with scale_size_area which ensures that # counts of zero would be given size 0. Doesn't make much different # here because the smallest count is already close to 0. ggplot(mpg, aes(cty, hwy)) + geom_count() scale_size_area() # Display proportions instead of counts ------------------------------------- # By default, all categorical variables in the plot form the groups. # Specifying geom_count without a group identifier leads to a plot which is # not useful: d <- ggplot(diamonds, aes(x = cut, y = clarity)) d + geom_count(aes(size = ..prop..)) # To correct this problem and achieve a more desirable plot, we need # to specify which group the proportion is to be calculated over. d + geom_count(aes(size = ..prop.., group = 1)) + scale_size_area(max_size = 10) # Or group by x/y variables to have rows/columns sum to 1. d + geom_count(aes(size = ..prop.., group = cut)) + scale_size_area(max_size = 10) d + geom_count(aes(size = ..prop.., group = clarity)) + scale_size_area(max_size = 10) } ggplot2/man/stat_ecdf.Rd0000644000175100001440000000404412633014264014647 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-ecdf.r \name{stat_ecdf} \alias{stat_ecdf} \title{Empirical Cumulative Density Function} \usage{ stat_ecdf(mapping = NULL, data = NULL, geom = "step", position = "identity", n = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{The aesthetic mapping, usually constructed with \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set at the layer level if you are overriding the plot defaults.} \item{data}{A layer specific dataset - only needed if you want to override the plot defaults.} \item{geom}{The geometric object to use display the data} \item{position}{The position adjustment to use for overlapping points on this layer} \item{n}{if NULL, do not interpolate. If not NULL, this is the number of points to interpolate with.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. This can include aesthetics whose values you want to set, not map. See \code{\link{layer}} for more details.} } \description{ Empirical Cumulative Density Function } \section{Computed variables}{ \describe{ \item{x}{x in data} \item{y}{cumulative density corresponding x} } } \examples{ \donttest{ df <- data.frame(x = rnorm(1000)) ggplot(df, aes(x)) + stat_ecdf(geom = "step") df <- data.frame(x = c(rnorm(100, 0, 3), rnorm(100, 0, 10)), g = gl(2, 100)) ggplot(df, aes(x, colour = g)) + stat_ecdf() } } ggplot2/man/geom_bin2d.Rd0000644000175100001440000000577412633013200014720 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-bin2d.r, R/stat-bin2d.r \name{geom_bin2d} \alias{geom_bin2d} \alias{stat_bin2d} \alias{stat_bin_2d} \title{Add heatmap of 2d bin counts.} \usage{ geom_bin2d(mapping = NULL, data = NULL, stat = "bin2d", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_bin_2d(mapping = NULL, data = NULL, geom = "tile", position = "identity", bins = 30, binwidth = NULL, drop = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_bin2d} and \code{stat_bin2d}.} \item{bins}{numeric vector giving number of bins in both vertical and horizontal directions. Set to 30 by default.} \item{binwidth}{Numeric vector giving bin width in both vertical and horizontal directions. Overrides \code{bins} if both set.} \item{drop}{if \code{TRUE} removes all cells with 0 counts.} } \description{ Add heatmap of 2d bin counts. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "bin2d")} } \examples{ d <- ggplot(diamonds, aes(x, y)) + xlim(4, 10) + ylim(4, 10) d + geom_bin2d() # You can control the size of the bins by specifying the number of # bins in each direction: d + geom_bin2d(bins = 10) d + geom_bin2d(bins = 30) # Or by specifying the width of the bins d + geom_bin2d(binwidth = c(0.1, 0.1)) } \seealso{ \code{\link{stat_binhex}} for hexagonal binning } ggplot2/man/aes_.Rd0000644000175100001440000000345012611730203013614 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes.r \name{aes_} \alias{aes_} \alias{aes_q} \alias{aes_string} \title{Define aesthetic mappings from strings, or quoted calls and formulas.} \usage{ aes_(x, y, ...) aes_string(x, y, ...) aes_q(x, y, ...) } \arguments{ \item{x, y, ...}{List of name value pairs. Elements must be either quoted calls, strings, one-sided formulas or constants.} } \description{ Aesthetic mappings describe how variables in the data are mapped to visual properties (aesthetics) of geoms. \code{\link{aes}} uses non-standard evaluation to capture the variable names. \code{aes_} and \code{aes_string} require you to explicitly quote the inputs either with \code{""} for \code{aes_string()}, or with \code{quote} or \code{~} for \code{aes_()}. (\code{aes_q} is an alias to \code{aeq_}) } \details{ It's better to use \code{aes_q()}, because there's no easy way to create the equivalent to \code{aes(colour = "my colour")} or \code{aes{x = `X$1`}} with \code{aes_string()}. \code{aes_string} and \code{aes_} are particularly useful when writing functions that create plots because you can use strings or quoted names/calls to define the aesthetic mappings, rather than having to use \code{\link{substitute}} to generate a call to \code{aes()}. } \examples{ # Three ways of generating the same aesthetics aes(mpg, wt, col = cyl) aes_(quote(mpg), quote(wt), col = quote(cyl)) aes_(~mpg, ~wt, col = ~cyl) aes_string("mpg", "wt", col = "cyl") # You can't easily mimic these calls with aes_string aes(`$100`, colour = "smooth") aes_(~ `$100`, colour = "smooth") # Ok, you can, but it requires a _lot_ of quotes aes_string("`$100`", colour = '"smooth"') # Convert strings to names with as.name var <- "cyl" aes(col = x) aes_(col = as.name(var)) } \seealso{ \code{\link{aes}} } ggplot2/man/geom_polygon.Rd0000644000175100001440000000666512613770162015430 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-polygon.r \name{geom_polygon} \alias{geom_polygon} \title{Polygon, a filled path.} \usage{ geom_polygon(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ Polygon, a filled path. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "polygon")} } \examples{ # When using geom_polygon, you will typically need two data frames: # one contains the coordinates of each polygon (positions), and the # other the values associated with each polygon (values). An id # variable links the two together ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) values <- data.frame( id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) ) positions <- data.frame( id = rep(ids, each = 4), x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) ) # Currently we need to manually merge the two together datapoly <- merge(values, positions, by=c("id")) (p <- ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=value, group=id))) # Which seems like a lot of work, but then it's easy to add on # other features in this coordinate system, e.g.: stream <- data.frame( x = cumsum(runif(50, max = 0.1)), y = cumsum(runif(50,max = 0.1)) ) p + geom_line(data = stream, colour="grey30", size = 5) # And if the positions are in longitude and latitude, you can use # coord_map to produce different map projections. } \seealso{ \code{\link{geom_path}} for an unfilled polygon, \code{\link{geom_ribbon}} for a polygon anchored on the x-axis } ggplot2/man/is.ggplot.Rd0000644000175100001440000000045712611730203014617 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot.r \name{is.ggplot} \alias{is.ggplot} \title{Reports whether x is a ggplot object} \usage{ is.ggplot(x) } \arguments{ \item{x}{An object to test} } \description{ Reports whether x is a ggplot object } \keyword{internal} ggplot2/man/as_labeller.Rd0000644000175100001440000000311712611730203015152 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-labels.r \name{as_labeller} \alias{as_labeller} \title{Coerce to labeller function} \usage{ as_labeller(x, default = label_value, multi_line = TRUE) } \arguments{ \item{x}{Object to coerce to a labeller function. If a named character vector, it is used as a lookup table before being passed on to \code{default}. If a non-labeller function, it is assumed it takes and returns character vectors and is applied to the labels. If a labeller, it is simply applied to the labels.} \item{default}{Default labeller to process the labels produced by lookup tables or modified by non-labeller functions.} \item{multi_line}{Whether to display the labels of multiple factors on separate lines. This is passed to the labeller function.} } \description{ This transforms objects to labeller functions. Used internally by \code{\link{labeller}()}. } \examples{ p <- ggplot(mtcars, aes(disp, drat)) + geom_point() p + facet_wrap(~am) # Rename labels on the fly with a lookup character vector to_string <- as_labeller(c(`0` = "Zero", `1` = "One")) p + facet_wrap(~am, labeller = to_string) # Quickly transform a function operating on character vectors to a # labeller function: appender <- function(string, suffix = "-foo") paste0(string, suffix) p + facet_wrap(~am, labeller = as_labeller(appender)) # If you have more than one facetting variable, be sure to dispatch # your labeller to the right variable with labeller() p + facet_grid(cyl ~ am, labeller = labeller(am = to_string)) } \seealso{ \code{\link{labeller}()}, \link{labellers} } ggplot2/man/annotation_map.Rd0000644000175100001440000000202512611730203015711 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-map.r \name{annotation_map} \alias{annotation_map} \title{Annotation: maps.} \usage{ annotation_map(map, ...) } \arguments{ \item{map}{data frame representing a map. Most map objects can be converted into the right format by using \code{\link{fortify}}} \item{...}{other arguments used to modify aesthetics} } \description{ Annotation: maps. } \examples{ if (require("maps")) { usamap <- map_data("state") seal.sub <- subset(seals, long > -130 & lat < 45 & lat > 40) ggplot(seal.sub, aes(x = long, y = lat)) + annotation_map(usamap, fill = "NA", colour = "grey50") + geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) seal2 <- transform(seal.sub, latr = cut(lat, 2), longr = cut(long, 2)) ggplot(seal2, aes(x = long, y = lat)) + annotation_map(usamap, fill = "NA", colour = "grey50") + geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat)) + facet_grid(latr ~ longr, scales = "free", space = "free") } } ggplot2/man/geom_contour.Rd0000644000175100001440000000656012633013516015417 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-contour.r, R/stat-contour.r \name{geom_contour} \alias{geom_contour} \alias{stat_contour} \title{Display contours of a 3d surface in 2d.} \usage{ geom_contour(mapping = NULL, data = NULL, stat = "contour", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_contour(mapping = NULL, data = NULL, geom = "contour", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom}{The geometric object to use display the data} } \description{ Display contours of a 3d surface in 2d. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "contour")} } \section{Computed variables}{ \describe{ \item{level}{height of contour} } } \examples{ #' # Basic plot v <- ggplot(faithfuld, aes(waiting, eruptions, z = density)) v + geom_contour() # Or compute from raw data ggplot(faithful, aes(waiting, eruptions)) + geom_density_2d() \donttest{ # Setting bins creates evenly spaced contours in the range of the data v + geom_contour(bins = 2) v + geom_contour(bins = 10) # Setting binwidth does the same thing, parameterised by the distance # between contours v + geom_contour(binwidth = 0.01) v + geom_contour(binwidth = 0.001) # Other parameters v + geom_contour(aes(colour = ..level..)) v + geom_contour(colour = "red") v + geom_raster(aes(fill = density)) + geom_contour(colour = "white") } } \seealso{ \code{\link{geom_density_2d}}: 2d density contours } ggplot2/man/guide_legend.Rd0000644000175100001440000001337712611730203015331 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/guide-legend.r \name{guide_legend} \alias{guide_legend} \title{Legend guide.} \usage{ guide_legend(title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, keywidth = NULL, keyheight = NULL, direction = NULL, default.unit = "line", override.aes = list(), nrow = NULL, ncol = NULL, byrow = FALSE, reverse = FALSE, order = 0, ...) } \arguments{ \item{title}{A character string or expression indicating a title of guide. If \code{NULL}, the title is not shown. By default (\code{\link{waiver}}), the name of the scale object or the name specified in \code{\link{labs}} is used for the title.} \item{title.position}{A character string indicating the position of a title. One of "top" (default for a vertical guide), "bottom", "left" (default for a horizontal guide), or "right."} \item{title.theme}{A theme object for rendering the title text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.title} in \code{\link{theme}} or theme.} \item{title.hjust}{A number specifying horizontal justification of the title text.} \item{title.vjust}{A number specifying vertical justification of the title text.} \item{label}{logical. If \code{TRUE} then the labels are drawn. If \code{FALSE} then the labels are invisible.} \item{label.position}{A character string indicating the position of a label. One of "top", "bottom" (default for horizontal guide), "left", or "right" (default for vertical guide).} \item{label.theme}{A theme object for rendering the label text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.text} in \code{\link{theme}} or theme.} \item{label.hjust}{A numeric specifying horizontal justification of the label text.} \item{label.vjust}{A numeric specifying vertical justification of the label text.} \item{keywidth}{A numeric or a \code{\link[grid]{unit}} object specifying the width of the legend key. Default value is \code{legend.key.width} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{keyheight}{A numeric or a \code{\link[grid]{unit}} object specifying the height of the legend key. Default value is \code{legend.key.height} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{direction}{A character string indicating the direction of the guide. One of "horizontal" or "vertical."} \item{default.unit}{A character string indicating \code{\link[grid]{unit}} for \code{keywidth} and \code{keyheight}.} \item{override.aes}{A list specifying aesthetic parameters of legend key. See details and examples.} \item{nrow}{The desired number of rows of legends.} \item{ncol}{The desired number of column of legends.} \item{byrow}{logical. If \code{FALSE} (the default) the legend-matrix is filled by columns, otherwise the legend-matrix is filled by rows.} \item{reverse}{logical. If \code{TRUE} the order of legends is reversed.} \item{order}{positive integer less that 99 that specifies the order of this guide among multiple guides. This controls the order in which multiple guides are displayed, not the contents of the guide itself. If 0 (default), the order is determined by a secret algorithm.} \item{...}{ignored.} } \value{ A guide object } \description{ Legend type guide shows key (i.e., geoms) mapped onto values. Legend guides for various scales are integrated if possible. } \details{ Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. \code{guide="legend"} in \code{scale_*} is syntactic sugar for \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). As for how to specify the guide for each scale in more detail, see \code{\link{guides}}. } \examples{ \donttest{ df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) p2 <- p1 + geom_point(aes(size = value)) # Basic form p1 + scale_fill_continuous(guide = "legend") p1 + scale_fill_continuous(guide = guide_legend()) # Guide title p1 + scale_fill_continuous(guide = guide_legend(title = "V")) # title text p1 + scale_fill_continuous(guide = guide_legend(title = NULL)) # no title # Control styles # key size p1 + guides(fill = guide_legend(keywidth = 3, keyheight = 1)) # title position p1 + guides(fill = guide_legend(title = "LEFT", title.position = "left")) # title text styles via element_text p1 + guides(fill = guide_legend( title.theme = element_text(size=15, face="italic", colour = "red", angle = 45))) # label position p1 + guides(fill = guide_legend(label.position = "bottom")) # label styles p1 + scale_fill_continuous(breaks = c(5, 10, 15), labels = paste("long", c(5, 10, 15)), guide = guide_legend(direction = "horizontal", title.position = "top", label.position="bottom", label.hjust = 0.5, label.vjust = 0.5, label.theme = element_text(angle = 90))) # Set aesthetic of legend key # very low alpha value make it difficult to see legend key p3 <- ggplot(diamonds, aes(carat, price)) + geom_point(aes(colour=color), alpha=1/100) p3 # override.aes overwrites the alpha p3 + guides(colour = guide_legend(override.aes = list(alpha = 1))) # multiple row/col legends df <- data.frame(x = 1:20, y = 1:20, color = letters[1:20]) p <- ggplot(df, aes(x, y)) + geom_point(aes(colour = color)) p + guides(col = guide_legend(nrow = 8)) p + guides(col = guide_legend(ncol = 8)) p + guides(col = guide_legend(nrow = 8, byrow = TRUE)) p + guides(col = guide_legend(ncol = 8, byrow = TRUE)) # reversed order legend p + guides(col = guide_legend(reverse = TRUE)) } } \seealso{ Other guides: \code{\link{guide_colourbar}}, \code{\link{guides}} } ggplot2/man/scale_shape.Rd0000644000175100001440000000235412611730203015156 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-shape.r \name{scale_shape} \alias{scale_shape} \alias{scale_shape_continuous} \alias{scale_shape_discrete} \title{Scale for shapes, aka glyphs.} \usage{ scale_shape(..., solid = TRUE) scale_shape_discrete(..., solid = TRUE) scale_shape_continuous(...) } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{solid}{Are the shapes solid, \code{TRUE}, or hollow \code{FALSE}?} } \description{ A continuous variable can not be mapped to shape. } \examples{ dsmall <- diamonds[sample(nrow(diamonds), 100), ] (d <- ggplot(dsmall, aes(carat, price)) + geom_point(aes(shape = cut))) d + scale_shape(solid = TRUE) # the default d + scale_shape(solid = FALSE) d + scale_shape(name = "Cut of diamond") d + scale_shape(name = "Cut of\\ndiamond") # To change order of levels, change order of # underlying factor levels(dsmall$cut) <- c("Fair", "Good", "Very Good", "Premium", "Ideal") # Need to recreate plot to pick up new data ggplot(dsmall, aes(price, carat)) + geom_point(aes(shape = cut)) # Or for short: d \%+\% dsmall } ggplot2/man/coord_munch.Rd0000644000175100001440000000134712611730203015210 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-munch.r \name{coord_munch} \alias{coord_munch} \title{Munch coordinates data} \usage{ coord_munch(coord, data, range, segment_length = 0.01) } \arguments{ \item{coord}{Coordinate system definition.} \item{data}{Data set to transform - should have variables \code{x} and \code{y} are chopped up into small pieces (as defined by \code{group}). All other variables are duplicated as needed.} \item{range}{Panel range specification.} \item{segment_length}{Target segment length} } \description{ This function "munches" lines, dividing each line into many small pieces so they can be transformed independently. Used inside geom functions. } \keyword{internal} ggplot2/man/scale_continuous.Rd0000644000175100001440000001261612611730203016266 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-continuous.r \name{scale_continuous} \alias{scale_continuous} \alias{scale_x_continuous} \alias{scale_x_log10} \alias{scale_x_reverse} \alias{scale_x_sqrt} \alias{scale_y_continuous} \alias{scale_y_log10} \alias{scale_y_reverse} \alias{scale_y_sqrt} \title{Continuous position scales (x & y).} \usage{ scale_x_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity") scale_y_continuous(name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, expand = waiver(), oob = censor, na.value = NA_real_, trans = "identity") scale_x_log10(...) scale_y_log10(...) scale_x_reverse(...) scale_y_reverse(...) scale_x_sqrt(...) scale_y_sqrt(...) } \arguments{ \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{minor_breaks}{One of: \itemize{ \item \code{NULL} for no minor breaks \item \code{waiver()} for the default breaks (one minor break between each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{expand}{A numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes. The defaults are \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for discrete variables.} \item{oob}{Function that handles limits outside of the scale limits (out of bounds). The default replaces out of bounds values with NA.} \item{na.value}{Missing values will be replaced with this value.} \item{trans}{Either the name of a transformation object, or the object itself. Built-in transformations include "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". A transformation object bundles together a transform, it's inverse, and methods for generating breaks and labels. Transformation objects are defined in the scales package, and are called \code{name_trans}, e.g. \code{\link[scales]{boxcox_trans}}. You can create your own transformation with \code{\link[scales]{trans_new}}.} \item{...}{Other arguments passed on to \code{scale_(x|y)_continuous}} } \description{ \code{scale_x_continuous} and \code{scale_y_continuous} are the key functions. The others, \code{scale_x_log10}, \code{scale_y_sqrt} etc, are aliases that set the \code{trans} argument to commonly used transformations. } \examples{ \donttest{ if (require(ggplot2movies)) { m <- ggplot(subset(movies, votes > 1000), aes(rating, votes)) + geom_point(na.rm = TRUE) m # Manipulating the default position scales lets you: # * change the axis labels m + scale_y_continuous("number of votes") m + scale_y_continuous(quote(votes ^ alpha)) # * modify the axis limits m + scale_y_continuous(limits = c(0, 5000)) m + scale_y_continuous(limits = c(1000, 10000)) m + scale_x_continuous(limits = c(7, 8)) # you can also use the short hand functions xlim and ylim m + ylim(0, 5000) m + ylim(1000, 10000) m + xlim(7, 8) # * choose where the ticks appear m + scale_x_continuous(breaks = 1:10) m + scale_x_continuous(breaks = c(1,3,7,9)) # * manually label the ticks m + scale_x_continuous(breaks = c(2,5,8), labels = c("two", "five", "eight")) m + scale_x_continuous(breaks = c(2,5,8), labels = c("horrible", "ok", "awesome")) m + scale_x_continuous(breaks = c(2,5,8), labels = expression(Alpha, Beta, Omega)) # There are a few built in transformation that you can use: m + scale_y_log10() m + scale_y_sqrt() m + scale_y_reverse() # You can also create your own and supply them to the trans argument. # See ?scales::trans_new # You can control the formatting of the labels with the formatter # argument. Some common formats are built into the scales package: df <- data.frame( x = rnorm(10) * 100000, y = seq(0, 1, length.out = 10) ) p <- ggplot(df, aes(x, y)) + geom_point() p + scale_y_continuous(labels = scales::percent) p + scale_y_continuous(labels = scales::dollar) p + scale_x_continuous(labels = scales::comma) # Other shortcut functions ggplot(movies, aes(rating, votes)) + geom_point() + ylim(1e4, 5e4) # * axis labels ggplot(movies, aes(rating, votes)) + geom_point() + labs(x = "My x axis", y = "My y axis") # * log scaling ggplot(movies, aes(rating, votes)) + geom_point() + scale_x_log10() + scale_y_log10() } } } \seealso{ \code{\link{scale_date}} for date/time position scales. } ggplot2/man/ggplot2-ggproto.Rd0000644000175100001440000002715212613770162015761 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aaa-.r, R/geom-.r, R/annotation-custom.r, R/annotation-logticks.r, R/geom-polygon.r, R/geom-map.r, R/annotation-map.r, R/geom-raster.r, R/annotation-raster.r, R/coord-.r, R/coord-cartesian-.r, R/coord-fixed.r, R/coord-flip.r, R/coord-map.r, R/coord-polar.r, R/coord-quickmap.R, R/coord-transform.r, R/stat-.r, R/geom-abline.r, R/geom-rect.r, R/geom-bar.r, R/geom-blank.r, R/geom-boxplot.r, R/geom-path.r, R/geom-contour.r, R/geom-crossbar.r, R/geom-segment.r, R/geom-curve.r, R/geom-ribbon.r, R/geom-density.r, R/geom-density2d.r, R/geom-dotplot.r, R/geom-errorbar.r, R/geom-errorbarh.r, R/geom-hex.r, R/geom-hline.r, R/geom-label.R, R/geom-linerange.r, R/geom-point.r, R/geom-pointrange.r, R/geom-quantile.r, R/geom-rug.r, R/geom-smooth.r, R/geom-spoke.r, R/geom-text.r, R/geom-tile.r, R/geom-violin.r, R/geom-vline.r, R/position-.r, R/position-dodge.r, R/position-fill.r, R/position-identity.r, R/position-jitter.r, R/position-jitterdodge.R, R/position-nudge.R, R/position-stack.r, R/scale-.r, R/scale-continuous.r, R/scale-date.r, R/scale-discrete-.r, R/scale-identity.r, R/stat-bin.r, R/stat-bin2d.r, R/stat-bindot.r, R/stat-binhex.r, R/stat-boxplot.r, R/stat-contour.r, R/stat-count.r, R/stat-density-2d.r, R/stat-density.r, R/stat-ecdf.r, R/stat-ellipse.R, R/stat-function.r, R/stat-identity.r, R/stat-qq.r, R/stat-quantile.r, R/stat-smooth.r, R/stat-sum.r, R/stat-summary-2d.r, R/stat-summary-bin.R, R/stat-summary-hex.r, R/stat-summary.r, R/stat-unique.r, R/stat-ydensity.r \docType{data} \name{ggplot2-ggproto} \alias{Coord} \alias{CoordCartesian} \alias{CoordFixed} \alias{CoordFlip} \alias{CoordMap} \alias{CoordPolar} \alias{CoordQuickmap} \alias{CoordTrans} \alias{Geom} \alias{GeomAbline} \alias{GeomAnnotationMap} \alias{GeomArea} \alias{GeomBar} \alias{GeomBlank} \alias{GeomBoxplot} \alias{GeomContour} \alias{GeomCrossbar} \alias{GeomCurve} \alias{GeomCustomAnn} \alias{GeomDensity} \alias{GeomDensity2d} \alias{GeomDotplot} \alias{GeomErrorbar} \alias{GeomErrorbarh} \alias{GeomHex} \alias{GeomHline} \alias{GeomLabel} \alias{GeomLine} \alias{GeomLinerange} \alias{GeomLogticks} \alias{GeomMap} \alias{GeomPath} \alias{GeomPoint} \alias{GeomPointrange} \alias{GeomPolygon} \alias{GeomQuantile} \alias{GeomRaster} \alias{GeomRasterAnn} \alias{GeomRect} \alias{GeomRibbon} \alias{GeomRug} \alias{GeomSegment} \alias{GeomSmooth} \alias{GeomSpoke} \alias{GeomStep} \alias{GeomText} \alias{GeomTile} \alias{GeomViolin} \alias{GeomVline} \alias{Position} \alias{PositionDodge} \alias{PositionFill} \alias{PositionIdentity} \alias{PositionJitter} \alias{PositionJitterdodge} \alias{PositionNudge} \alias{PositionStack} \alias{Scale} \alias{ScaleContinuous} \alias{ScaleContinuousDate} \alias{ScaleContinuousDatetime} \alias{ScaleContinuousIdentity} \alias{ScaleContinuousPosition} \alias{ScaleDiscrete} \alias{ScaleDiscreteIdentity} \alias{ScaleDiscretePosition} \alias{Stat} \alias{StatBin} \alias{StatBin2d} \alias{StatBindot} \alias{StatBinhex} \alias{StatBoxplot} \alias{StatContour} \alias{StatCount} \alias{StatDensity} \alias{StatDensity2d} \alias{StatEcdf} \alias{StatEllipse} \alias{StatFunction} \alias{StatIdentity} \alias{StatQq} \alias{StatQuantile} \alias{StatSmooth} \alias{StatSum} \alias{StatSummary} \alias{StatSummary2d} \alias{StatSummaryBin} \alias{StatSummaryHex} \alias{StatUnique} \alias{StatYdensity} \alias{ggplot2-ggproto} \title{Base ggproto classes for ggplot2} \description{ If you are creating a new geom, stat, position, or scale in another package, you'll need to extend from \code{ggplot2::Geom}, \code{ggplot2::Stat}, \code{ggplot2::Position}, or \code{ggplot2::Scale}. } \section{Geoms}{ All \code{geom_*} functions (like \code{geom_point}) return a layer that contains a \code{Geom*} object (like \code{GeomPoint}). The \code{Geom*} object is responsible for rendering the data in the plot. Each of the \code{Geom*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Geom}, and each implements various methods and fields. To create a new type of Geom object, you typically will want to implement one or more of the following: Compared to \code{Stat} and \code{Position}, \code{Geom} is a little different because the execution of the setup and compute functions is split up. \code{setup_data} runs before position adjustments, and \code{draw_layer} is not run until render time, much later. This means there is no \code{setup_params} because it's hard to communicate the changes. \itemize{ \item Override either \code{draw_panel(self, data, panel_scales, coord)} or \code{draw_group(self, data, panel_scales, coord)}. \code{draw_panel} is called once per panel, \code{draw_group} is called once per group. Use \code{draw_panel} if each row in the data represents a single element. Use \code{draw_group} if each group represents an element (e.g. a smooth, a violin). \code{data} is a data frame of scaled aesthetics. \code{panel_scales} is a list containing information about the scales in the current panel. \code{coord} is a coordinate specification. You'll need to call \code{coord$transform(data, panel_scales)} to work with non-Cartesian coords. To work with non-linear coordinate systems, you typically need to convert into a primitive geom (e.g. point, path or polygon), and then pass on to the corresponding draw method for munching. Must return a grob. Use \code{\link{zeroGrob}} if there's nothing to draw. \item \code{draw_key}: Renders a single legend key. \item \code{required_aes}: A character vector of aesthetics needed to render the geom. \item \code{default_aes}: A list (generated by \code{\link{aes}()} of default values for aesthetics. \item \code{reparameterise}: Converts width and height to xmin and xmax, and ymin and ymax values. It can potentially set other values as well. } } \section{Coordinate systems}{ All \code{coord_*} functions (like \code{coord_trans}) return a \code{Coord*} object (like \code{CoordTrans}). The \code{Coord*} object is responsible for adjusting the position of overlapping geoms. The way that the \code{coord_*} functions work is slightly different from the \code{geom_*} and \code{stat_*} functions, because a \code{coord_*} function actually "instantiates" the \code{Coord*} object by creating a descendant, and returns that. Each of the \code{Coord*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Coord}. To create a new type of Coord object, you typically will want to implement one or more of the following: \itemize{ \item \code{aspect}: Returns the desired aspect ratio for the plot. \item \code{labels}: Returns a list containing labels for x and y. \item \code{render_fg}: Renders foreground elements. \item \code{render_bg}: Renders background elements. \item \code{render_axis_h}: Renders the horizontal axis. \item \code{render_axis_v}: Renders the vertical axis. \item \code{range}: Returns the x and y ranges \item \code{train}: Return the trained scale ranges. \item \code{transform}: Transforms x and y coordinates. \item \code{distance}: Calculates distance. \item \code{is_linear}: Returns \code{TRUE} if the coordinate system is linear; \code{FALSE} otherwise. } } \section{Stats}{ All \code{stat_*} functions (like \code{stat_bin}) return a layer that contains a \code{Stat*} object (like \code{StatBin}). The \code{Stat*} object is responsible for rendering the data in the plot. Each of the \code{Stat*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Stat}, and each implements various methods and fields. To create a new type of Stat object, you typically will want to implement one or more of the following: \itemize{ \item Override one of : \code{compute_layer(self, data, scales, ...)}, \code{compute_panel(self, data, scales, ...)}, or \code{compute_group(self, data, scales, ...)}. \code{compute_layer()} is called once per layer, \code{compute_panel_()} is called once per panel, and \code{compute_group()} is called once per group. All must return a data frame. It's usually best to start by overriding \code{compute_group}: if you find substantial performance optimisations, override higher up. You'll need to read the source code of the default methods to see what else you should be doing. \code{data} is a data frame containing the variables named according to the aesthetics that they're mapped to. \code{scales} is a list containing the \code{x} and \code{y} scales. There functions are called before the facets are trained, so they are global scales, not local to the individual panels.\code{...} contains the parameters returned by \code{setup_params()}. \item \code{setup_params(data, params)}: called once for each layer. Used to setup defaults that need to complete dataset, and to inform the user of important choices. Should return list of parameters. \item \code{setup_data(data, params)}: called once for each layer, after \code{setp_params()}. Should return modified \code{data}. Default methods removes all rows containing a missing value in required aesthetics (with a warning if \code{!na.rm}). \item \code{required_aes}: A character vector of aesthetics needed to render the geom. \item \code{default_aes}: A list (generated by \code{\link{aes}()} of default values for aesthetics. } } \section{Positions}{ All \code{position_*} functions (like \code{position_dodge}) return a \code{Position*} object (like \code{PositionDodge}). The \code{Position*} object is responsible for adjusting the position of overlapping geoms. The way that the \code{position_*} functions work is slightly different from the \code{geom_*} and \code{stat_*} functions, because a \code{position_*} function actually "instantiates" the \code{Position*} object by creating a descendant, and returns that. Each of the \code{Position*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Position}, and each implements the following methods: \itemize{ \item \code{compute_layer(self, data, params, panel)} is called once per layer. \code{panel} is currently an internal data structure, so this method should not be overriden. \item \code{compute_panel(self, data, params, panel)} is called once per panel and should return a modified data frame. \code{data} is a data frame containing the variables named according to the aesthetics that they're mapped to. \code{scales} is a list containing the \code{x} and \code{y} scales. There functions are called before the facets are trained, so they are global scales, not local to the individual panels. \code{params} contains the parameters returned by \code{setup_params()}. \item \code{setup_params(data, params)}: called once for each layer. Used to setup defaults that need to complete dataset, and to inform the user of important choices. Should return list of parameters. \item \code{setup_data(data, params)}: called once for each layer, after \code{setp_params()}. Should return modified \code{data}. Default checks that required aesthetics are present. } And the following fields \itemize{ \item \code{required_aes}: a character vector giving the aesthetics that must be present for this position adjustment to work. } } \section{Scales}{ All \code{scale_*} functions (like \code{scale_x_continuous}) return a \code{Scale*} object (like \code{ScaleContinuous}). The \code{Scale*} object represents a single scale. Each of the \code{Scale*} objects is a \code{\link{ggproto}} object, descended from the top-level \code{Scale}. } \seealso{ ggproto } \keyword{datasets} \keyword{internal} ggplot2/man/geom_quantile.Rd0000644000175100001440000000713512613770162015554 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-quantile.r, R/stat-quantile.r \name{geom_quantile} \alias{geom_quantile} \alias{stat_quantile} \title{Add quantile lines from a quantile regression.} \usage{ geom_quantile(mapping = NULL, data = NULL, stat = "quantile", position = "identity", lineend = "butt", linejoin = "round", linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_quantile(mapping = NULL, data = NULL, geom = "quantile", position = "identity", quantiles = c(0.25, 0.5, 0.75), formula = NULL, method = "rq", method.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{lineend}{Line end style (round, butt, square)} \item{linejoin}{Line join style (round, mitre, bevel)} \item{linemitre}{Line mitre limit (number greater than 1)} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_quantile} and \code{stat_quantile}.} \item{quantiles}{conditional quantiles of y to calculate and display} \item{formula}{formula relating y variables to x variables} \item{method}{Quantile regression method to use. Currently only supports \code{\link[quantreg]{rq}}.} \item{method.args}{List of additional arguments passed on to the modelling function defined by \code{method}.} } \description{ This can be used as a continuous analogue of a geom_boxplot. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "quantile")} } \section{Computed variables}{ \describe{ \item{quantile}{quantile of distribution} } } \examples{ m <- ggplot(mpg, aes(displ, 1 / hwy)) + geom_point() m + geom_quantile() m + geom_quantile(quantiles = 0.5) q10 <- seq(0.05, 0.95, by = 0.05) m + geom_quantile(quantiles = q10) # You can also use rqss to fit smooth quantiles m + geom_quantile(method = "rqss") # Note that rqss doesn't pick a smoothing constant automatically, so # you'll need to tweak lambda yourself m + geom_quantile(method = "rqss", lambda = 0.1) # Set aesthetics to fixed value m + geom_quantile(colour = "red", size = 2, alpha = 0.5) } ggplot2/man/autoplot.Rd0000644000175100001440000000122412611730203014551 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/autoplot.r \name{autoplot} \alias{autoplot} \title{Create a complete ggplot appropriate to a particular data type} \usage{ autoplot(object, ...) } \arguments{ \item{object}{an object, whose class will determine the behaviour of autoplot} \item{...}{other arguments passed to specific methods} } \value{ a ggplot object } \description{ \code{autoplot} uses ggplot2 to draw a particular plot for an object of a particular class in a single command. This defines the S3 generic that other classes and packages can extend. } \seealso{ \code{\link{ggplot}} and \code{\link{fortify}} } ggplot2/man/last_plot.Rd0000644000175100001440000000046112611730203014705 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-last.r \name{last_plot} \alias{last_plot} \title{Retrieve the last plot to be modified or created.} \usage{ last_plot() } \description{ Retrieve the last plot to be modified or created. } \seealso{ \code{\link{ggsave}} } ggplot2/man/ggsave.Rd0000644000175100001440000000366512611730203014171 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/save.r \name{ggsave} \alias{ggsave} \title{Save a ggplot (or other grid object) with sensible defaults} \usage{ ggsave(filename, plot = last_plot(), device = NULL, path = NULL, scale = 1, width = NA, height = NA, units = c("in", "cm", "mm"), dpi = 300, limitsize = TRUE, ...) } \arguments{ \item{filename}{File name to create on disk.} \item{plot}{Plot to save, defaults to last plot displayed.} \item{device}{Device to use (function or any of the recognized extensions, e.g. \code{"pdf"}). By default, extracted from filename extension. \code{ggsave} currently recognises eps/ps, tex (pictex), pdf, jpeg, tiff, png, bmp, svg and wmf (windows only).} \item{path}{Path to save plot to (combined with filename).} \item{scale}{Multiplicative scaling factor.} \item{width, height}{Plot dimensions, defaults to size of current graphics device.} \item{units}{Units for width and height when specified explicitly (in, cm, or mm)} \item{dpi}{Resolution used for raster outputs.} \item{limitsize}{When \code{TRUE} (the default), \code{ggsave} will not save images larger than 50x50 inches, to prevent the common error of specifying dimensions in pixels.} \item{...}{Other arguments passed on to graphics device} } \description{ \code{ggsave()} is a convenient function for saving a plot. It defaults to saving the last plot that you displayed, using the size of the current graphics device. It also guesses the type of graphics device from the extension. } \examples{ \dontrun{ ggplot(mtcars, aes(mpg, wt)) + geom_point() ggsave("mtcars.pdf") ggsave("mtcars.png") ggsave("mtcars.pdf", width = 4, height = 4) ggsave("mtcars.pdf", width = 20, height = 20, units = "cm") unlink("mtcars.pdf") unlink("mtcars.png") # specify device when saving to a file with unknown extension # (for example a server supplied temporary file) file <- tempfile() ggsave(file, device = "pdf") unlink(file) } } ggplot2/man/geom_rug.Rd0000644000175100001440000000477212613770162014533 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-rug.r \name{geom_rug} \alias{geom_rug} \title{Marginal rug plots.} \usage{ geom_rug(mapping = NULL, data = NULL, stat = "identity", position = "identity", sides = "bl", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{sides}{A string that controls which sides of the plot the rugs appear on. It can be set to a string containing any of \code{"trbl"}, for top, right, bottom, and left.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ Marginal rug plots. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "rug")} } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) p + geom_point() p + geom_point() + geom_rug() p + geom_point() + geom_rug(sides="b") # Rug on bottom only p + geom_point() + geom_rug(sides="trbl") # All four sides p + geom_point() + geom_rug(position='jitter') } ggplot2/man/gg_dep.Rd0000644000175100001440000000234412611730203014133 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{gg_dep} \alias{gg_dep} \title{Give a deprecation error, warning, or message, depending on version number.} \usage{ gg_dep(version, msg) } \arguments{ \item{version}{The last version of ggplot2 where this function was good (in other words, the last version where it was not deprecated).} \item{msg}{The message to print.} } \description{ Version numbers have the format .., like 0.9.2. This function compares the current version number of ggplot2 against the specified \code{version}, which is the most recent version before the function (or other object) was deprecated. } \details{ \code{gg_dep} will give an error, warning, or message, depending on the difference between the current ggplot2 version and the specified \code{version}. If the current major number is greater than \code{version}'s major number, or if the current minor number is more than 1 greater than \code{version}'s minor number, give an error. If the current minor number differs from \code{version}'s minor number by one, give a warning. If the current subminor number differs from \code{version}'s subminor number, print a message. } \keyword{internal} ggplot2/man/geom_spoke.Rd0000644000175100001440000000474012613770162015052 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-spoke.r \name{geom_spoke} \alias{geom_spoke} \alias{stat_spoke} \title{A line segment parameterised by location, direction and distance.} \usage{ geom_spoke(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ A line segment parameterised by location, direction and distance. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "spoke")} } \examples{ df <- expand.grid(x = 1:10, y=1:10) df$angle <- runif(100, 0, 2*pi) df$speed <- runif(100, 0, sqrt(0.1 * df$x)) ggplot(df, aes(x, y)) + geom_point() + geom_spoke(aes(angle = angle), radius = 0.5) ggplot(df, aes(x, y)) + geom_point() + geom_spoke(aes(angle = angle, radius = speed)) } ggplot2/man/theme.Rd0000644000175100001440000003234612613770162014027 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{theme} \alias{theme} \title{Set theme elements} \usage{ theme(..., complete = FALSE, validate = TRUE) } \arguments{ \item{...}{a list of element name, element pairings that modify the existing theme.} \item{complete}{set this to TRUE if this is a complete theme, such as the one returned \code{by theme_grey()}. Complete themes behave differently when added to a ggplot object.} \item{validate}{TRUE to run validate_element, FALSE to bypass checks.} } \description{ Use this function to modify theme settings. } \details{ Theme elements can inherit properties from other theme elements. For example, \code{axis.title.x} inherits from \code{axis.title}, which in turn inherits from \code{text}. All text elements inherit directly or indirectly from \code{text}; all lines inherit from \code{line}, and all rectangular objects inherit from \code{rect}. For more examples of modifying properties using inheritance, see \code{\link{+.gg}} and \code{\link{\%+replace\%}}. To see a graphical representation of the inheritance tree, see the last example below. } \section{Theme elements}{ The individual theme elements are: \tabular{ll}{ line \tab all line elements (\code{element_line}) \cr rect \tab all rectangular elements (\code{element_rect}) \cr text \tab all text elements (\code{element_text}) \cr title \tab all title elements: plot, axes, legends (\code{element_text}; inherits from \code{text}) \cr aspect.ratio \tab aspect ratio of the panel \cr axis.title \tab label of axes (\code{element_text}; inherits from \code{text}) \cr axis.title.x \tab x axis label (\code{element_text}; inherits from \code{axis.title}) \cr axis.title.y \tab y axis label (\code{element_text}; inherits from \code{axis.title}) \cr axis.text \tab tick labels along axes (\code{element_text}; inherits from \code{text}) \cr axis.text.x \tab x axis tick labels (\code{element_text}; inherits from \code{axis.text}) \cr axis.text.y \tab y axis tick labels (\code{element_text}; inherits from \code{axis.text}) \cr axis.ticks \tab tick marks along axes (\code{element_line}; inherits from \code{line}) \cr axis.ticks.x \tab x axis tick marks (\code{element_line}; inherits from \code{axis.ticks}) \cr axis.ticks.y \tab y axis tick marks (\code{element_line}; inherits from \code{axis.ticks}) \cr axis.ticks.length \tab length of tick marks (\code{unit}) \cr axis.line \tab lines along axes (\code{element_line}; inherits from \code{line}) \cr axis.line.x \tab line along x axis (\code{element_line}; inherits from \code{axis.line}) \cr axis.line.y \tab line along y axis (\code{element_line}; inherits from \code{axis.line}) \cr legend.background \tab background of legend (\code{element_rect}; inherits from \code{rect}) \cr legend.margin \tab extra space added around legend (\code{unit}) \cr legend.key \tab background underneath legend keys (\code{element_rect}; inherits from \code{rect}) \cr legend.key.size \tab size of legend keys (\code{unit}; inherits from \code{legend.key.size}) \cr legend.key.height \tab key background height (\code{unit}; inherits from \code{legend.key.size}) \cr legend.key.width \tab key background width (\code{unit}; inherits from \code{legend.key.size}) \cr legend.text \tab legend item labels (\code{element_text}; inherits from \code{text}) \cr legend.text.align \tab alignment of legend labels (number from 0 (left) to 1 (right)) \cr legend.title \tab title of legend (\code{element_text}; inherits from \code{title}) \cr legend.title.align \tab alignment of legend title (number from 0 (left) to 1 (right)) \cr legend.position \tab the position of legends ("none", "left", "right", "bottom", "top", or two-element numeric vector) \cr legend.direction \tab layout of items in legends ("horizontal" or "vertical") \cr legend.justification \tab anchor point for positioning legend inside plot ("center" or two-element numeric vector) \cr legend.box \tab arrangement of multiple legends ("horizontal" or "vertical") \cr legend.box.just \tab justification of each legend within the overall bounding box, when there are multiple legends ("top", "bottom", "left", or "right")\cr panel.background \tab background of plotting area, drawn underneath plot (\code{element_rect}; inherits from \code{rect}) \cr panel.border \tab border around plotting area, drawn on top of plot so that it covers tick marks and grid lines. This should be used with \code{fill=NA} (\code{element_rect}; inherits from \code{rect}) \cr panel.margin \tab margin around facet panels (\code{unit}) \cr panel.margin.x \tab horizontal margin around facet panels (\code{unit}; inherits from \code{panel.margin}) \cr panel.margin.y \tab vertical margin around facet panels (\code{unit}; inherits from \code{panel.margin}) \cr panel.grid \tab grid lines (\code{element_line}; inherits from \code{line}) \cr panel.grid.major \tab major grid lines (\code{element_line}; inherits from \code{panel.grid}) \cr panel.grid.minor \tab minor grid lines (\code{element_line}; inherits from \code{panel.grid}) \cr panel.grid.major.x \tab vertical major grid lines (\code{element_line}; inherits from \code{panel.grid.major}) \cr panel.grid.major.y \tab horizontal major grid lines (\code{element_line}; inherits from \code{panel.grid.major}) \cr panel.grid.minor.x \tab vertical minor grid lines (\code{element_line}; inherits from \code{panel.grid.minor}) \cr panel.grid.minor.y \tab horizontal minor grid lines (\code{element_line}; inherits from \code{panel.grid.minor}) \cr panel.ontop \tab option to place the panel (background, gridlines) over the data layers. Usually used with a transparent or blank \code{panel.background}. (\code{logical}) \cr plot.background \tab background of the entire plot (\code{element_rect}; inherits from \code{rect}) \cr plot.title \tab plot title (text appearance) (\code{element_text}; inherits from \code{title}) \cr plot.margin \tab margin around entire plot (\code{unit} with the sizes of the top, right, bottom, and left margins) \cr strip.background \tab background of facet labels (\code{element_rect}; inherits from \code{rect}) \cr strip.text \tab facet labels (\code{element_text}; inherits from \code{text}) \cr strip.text.x \tab facet labels along horizontal direction (\code{element_text}; inherits from \code{strip.text}) \cr strip.text.y \tab facet labels along vertical direction (\code{element_text}; inherits from \code{strip.text}) \cr strip.switch.pad.grid \tab space between strips and axes when strips are switched (\code{unit}) \cr strip.switch.pad.wrap \tab space between strips and axes when strips are switched (\code{unit}) \cr } } \examples{ \donttest{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p p + theme(panel.background = element_rect(colour = "pink")) p + theme_bw() # Scatter plot of gas mileage by vehicle weight p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() # Calculate slope and intercept of line of best fit coef(lm(mpg ~ wt, data = mtcars)) p + geom_abline(intercept = 37, slope = -5) # Calculate correlation coefficient with(mtcars, cor(wt, mpg, use = "everything", method = "pearson")) #annotate the plot p + geom_abline(intercept = 37, slope = -5) + geom_text(data = data.frame(), aes(4.5, 30, label = "Pearson-R = -.87")) # Change the axis labels # Original plot p p + labs(x = "Vehicle Weight", y = "Miles per Gallon") # Or p + labs(x = "Vehicle Weight", y = "Miles per Gallon") # Change title appearance p <- p + labs(title = "Vehicle Weight-Gas Mileage Relationship") # Set title to twice the base font size p + theme(plot.title = element_text(size = rel(2))) p + theme(plot.title = element_text(size = rel(2), colour = "blue")) # Changing plot look with themes DF <- data.frame(x = rnorm(400)) m <- ggplot(DF, aes(x = x)) + geom_histogram() # Default is theme_grey() m # Compare with m + theme_bw() # Manipulate Axis Attributes m + theme(axis.line = element_line(size = 3, colour = "red", linetype = "dotted")) m + theme(axis.text = element_text(colour = "blue")) m + theme(axis.text.y = element_blank()) m + theme(axis.ticks = element_line(size = 2)) m + theme(axis.title.y = element_text(size = rel(1.5), angle = 90)) m + theme(axis.title.x = element_blank()) m + theme(axis.ticks.length = unit(.85, "cm")) # Legend Attributes z <- ggplot(mtcars, aes(wt, mpg)) + geom_point(aes(colour = factor(cyl))) z z + theme(legend.position = "none") z + theme(legend.position = "bottom") # Or use relative coordinates between 0 and 1 z + theme(legend.position = c(.5, .5)) # Add a border to the whole legend z + theme(legend.background = element_rect(colour = "black")) # Legend margin controls extra space around outside of legend: z + theme(legend.background = element_rect(), legend.margin = unit(1, "cm")) z + theme(legend.background = element_rect(), legend.margin = unit(0, "cm")) # Or to just the keys z + theme(legend.key = element_rect(colour = "black")) z + theme(legend.key = element_rect(fill = "yellow")) z + theme(legend.key.size = unit(2.5, "cm")) z + theme(legend.text = element_text(size = 20, colour = "red", angle = 45)) z + theme(legend.title = element_text(face = "italic")) # To change the title of the legend use the name argument # in one of the scale options z + scale_colour_brewer(name = "My Legend") z + scale_colour_grey(name = "Number of \\nCylinders") # Panel and Plot Attributes z + theme(panel.background = element_rect(fill = "black")) z + theme(panel.border = element_rect(linetype = "dashed", colour = "black")) z + theme(panel.grid.major = element_line(colour = "blue")) z + theme(panel.grid.minor = element_line(colour = "red", linetype = "dotted")) z + theme(panel.grid.major = element_line(size = 2)) z + theme(panel.grid.major.y = element_blank(), panel.grid.minor.y = element_blank()) z + theme(plot.background = element_rect()) z + theme(plot.background = element_rect(fill = "green")) # Faceting Attributes set.seed(4940) dsmall <- diamonds[sample(nrow(diamonds), 1000), ] k <- ggplot(dsmall, aes(carat, ..density..)) + geom_histogram(binwidth = 0.2) + facet_grid(. ~ cut) k + theme(strip.background = element_rect(colour = "purple", fill = "pink", size = 3, linetype = "dashed")) k + theme(strip.text.x = element_text(colour = "red", angle = 45, size = 10, hjust = 0.5, vjust = 0.5)) k + theme(panel.margin = unit(5, "lines")) k + theme(panel.margin.y = unit(0, "lines")) # Put gridlines on top meanprice <- tapply(diamonds$price, diamonds$cut, mean) cut <- factor(levels(diamonds$cut), levels = levels(diamonds$cut)) df <- data.frame(meanprice, cut) g <- ggplot(df, aes(cut, meanprice)) + geom_bar(stat = "identity") g + geom_bar(stat = "identity") + theme(panel.background = element_blank(), panel.grid.major.x = element_blank(), panel.grid.minor.x = element_blank(), panel.grid.minor.y = element_blank(), panel.ontop = TRUE) # Modify a theme and save it mytheme <- theme_grey() + theme(plot.title = element_text(colour = "red")) p + mytheme } \dontrun{ ## Run this to generate a graph of the element inheritance tree build_element_graph <- function(tree) { require(igraph) require(plyr) inheritdf <- function(name, item) { if (length(item$inherit) == 0) data.frame() else data.frame(child = name, parent = item$inherit) } edges <- plyr::rbind.fill(mapply(inheritdf, names(tree), tree)) # Explicitly add vertices (since not all are in edge list) vertices <- data.frame(name = names(tree)) graph.data.frame(edges, vertices = vertices) } g <- build_element_graph(ggplot2:::.element_tree) V(g)$label <- V(g)$name set.seed(324) par(mar=c(0,0,0,0)) # Remove unnecessary margins plot(g, layout=layout.fruchterman.reingold, vertex.size=4, vertex.label.dist=.25) } } \seealso{ \code{\link{+.gg}} \code{\link{\%+replace\%}} \code{\link{rel}} \code{\link{element_blank}} \code{\link{element_line}} \code{\link{element_rect}} \code{\link{element_text}} } ggplot2/man/geom_boxplot.Rd0000644000175100001440000001414112620220650015402 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-boxplot.r, R/stat-boxplot.r \name{geom_boxplot} \alias{geom_boxplot} \alias{stat_boxplot} \title{Box and whiskers plot.} \usage{ geom_boxplot(mapping = NULL, data = NULL, stat = "boxplot", position = "dodge", outlier.colour = NULL, outlier.shape = 19, outlier.size = 1.5, outlier.stroke = 0.5, notch = FALSE, notchwidth = 0.5, varwidth = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_boxplot(mapping = NULL, data = NULL, geom = "boxplot", position = "dodge", coef = 1.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{outlier.colour, outlier.shape, outlier.size, outlier.stroke}{Default aesthetics for outliers. Set to \code{NULL} to inherit from the aesthetics used for the box.} \item{notch}{if \code{FALSE} (default) make a standard box plot. If \code{TRUE}, make a notched box plot. Notches are used to compare groups; if the notches of two boxes do not overlap, this suggests that the medians are significantly different.} \item{notchwidth}{for a notched box plot, width of the notch relative to the body (default 0.5)} \item{varwidth}{if \code{FALSE} (default) make a standard box plot. If \code{TRUE}, boxes are drawn with widths proportional to the square-roots of the number of observations in the groups (possibly weighted, using the \code{weight} aesthetic).} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_boxplot} and \code{stat_boxplot}.} \item{coef}{length of the whiskers as multiple of IQR. Defaults to 1.5} } \description{ The lower and upper "hinges" correspond to the first and third quartiles (the 25th and 75th percentiles). This differs slightly from the method used by the \code{boxplot} function, and may be apparent with small samples. See \code{\link{boxplot.stats}} for for more information on how hinge positions are calculated for \code{boxplot}. } \details{ The upper whisker extends from the hinge to the highest value that is within 1.5 * IQR of the hinge, where IQR is the inter-quartile range, or distance between the first and third quartiles. The lower whisker extends from the hinge to the lowest value within 1.5 * IQR of the hinge. Data beyond the end of the whiskers are outliers and plotted as points (as specified by Tukey). In a notched box plot, the notches extend \code{1.58 * IQR / sqrt(n)}. This gives a roughly 95% confidence interval for comparing medians. See McGill et al. (1978) for more details. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "boxplot")} } \section{Computed variables}{ \describe{ \item{width}{width of boxplot} \item{ymin}{lower whisker = smallest observation greater than or equal to lower hinge - 1.5 * IQR} \item{lower}{lower hinge, 25\% quantile} \item{notchlower}{lower edge of notch = median - 1.58 * IQR / sqrt(n)} \item{middle}{median, 50\% quantile} \item{notchupper}{upper edge of notch = median + 1.58 * IQR / sqrt(n)} \item{upper}{upper hinge, 75\% quantile} \item{ymax}{upper whisker = largest observation less than or equal to upper hinge + 1.5 * IQR} } } \examples{ p <- ggplot(mpg, aes(class, hwy)) p + geom_boxplot() p + geom_boxplot() + geom_jitter(width = 0.2) p + geom_boxplot() + coord_flip() p + geom_boxplot(notch = TRUE) p + geom_boxplot(varwidth = TRUE) p + geom_boxplot(fill = "white", colour = "#3366FF") # By default, outlier points match the colour of the box. Use # outlier.colour to override p + geom_boxplot(outlier.colour = "red", outlier.shape = 1) # Boxplots are automatically dodged when any aesthetic is a factor p + geom_boxplot(aes(colour = drv)) # You can also use boxplots with continuous x, as long as you supply # a grouping variable. cut_width is particularly useful ggplot(diamonds, aes(carat, price)) + geom_boxplot() ggplot(diamonds, aes(carat, price)) + geom_boxplot(aes(group = cut_width(carat, 0.25))) \donttest{ # It's possible to draw a boxplot with your own computations if you # use stat = "identity": y <- rnorm(100) df <- data.frame( x = 1, y0 = min(y), y25 = quantile(y, 0.25), y50 = median(y), y75 = quantile(y, 0.75), y100 = max(y) ) ggplot(df, aes(x)) + geom_boxplot( aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100), stat = "identity" ) } } \references{ McGill, R., Tukey, J. W. and Larsen, W. A. (1978) Variations of box plots. The American Statistician 32, 12-16. } \seealso{ \code{\link{stat_quantile}} to view quantiles conditioned on a continuous variable, \code{\link{geom_jitter}} for another way to look at conditional distributions. } ggplot2/man/is.ggproto.Rd0000644000175100001440000000042712611730203015001 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{is.ggproto} \alias{is.ggproto} \title{Is an object a ggproto object?} \usage{ is.ggproto(x) } \arguments{ \item{x}{An object to test.} } \description{ Is an object a ggproto object? } ggplot2/man/coord_trans.Rd0000644000175100001440000000514512611730203015225 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-transform.r \name{coord_trans} \alias{coord_trans} \title{Transformed cartesian coordinate system.} \usage{ coord_trans(x = "identity", y = "identity", limx = NULL, limy = NULL, xtrans, ytrans) } \arguments{ \item{x, y}{transformers for x and y axes} \item{limx, limy}{limits for x and y axes. (Named so for backward compatibility)} \item{xtrans, ytrans}{Deprecated; use \code{x} and \code{y} instead.} } \description{ \code{coord_trans} is different to scale transformations in that it occurs after statistical transformation and will affect the visual appearance of geoms - there is no guarantee that straight lines will continue to be straight. } \details{ All current transformations only work with continuous values - see \code{\link[scales]{trans_new}} for list of transformations, and instructions on how to create your own. } \examples{ \donttest{ # See ?geom_boxplot for other examples # Three ways of doing transformation in ggplot: # * by transforming the data ggplot(diamonds, aes(log10(carat), log10(price))) + geom_point() # * by transforming the scales ggplot(diamonds, aes(carat, price)) + geom_point() + scale_x_log10() + scale_y_log10() # * by transforming the coordinate system: ggplot(diamonds, aes(carat, price)) + geom_point() + coord_trans(x = "log10", y = "log10") # The difference between transforming the scales and # transforming the coordinate system is that scale # transformation occurs BEFORE statistics, and coordinate # transformation afterwards. Coordinate transformation also # changes the shape of geoms: d <- subset(diamonds, carat > 0.5) ggplot(d, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") + scale_x_log10() + scale_y_log10() ggplot(d, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") + coord_trans(x = "log10", y = "log10") # Here I used a subset of diamonds so that the smoothed line didn't # drop below zero, which obviously causes problems on the log-transformed # scale # With a combination of scale and coordinate transformation, it's # possible to do back-transformations: ggplot(diamonds, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") + scale_x_log10() + scale_y_log10() + coord_trans(x = scales::exp_trans(10), y = scales::exp_trans(10)) # cf. ggplot(diamonds, aes(carat, price)) + geom_point() + geom_smooth(method = "lm") # Also works with discrete scales df <- data.frame(a = abs(rnorm(26)),letters) plot <- ggplot(df,aes(a,letters)) + geom_point() plot + coord_trans(x = "log10") plot + coord_trans(x = "sqrt") } } ggplot2/man/scale_manual.Rd0000644000175100001440000000433712611730203015336 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-manual.r, R/zxx.r \name{scale_manual} \alias{scale_alpha_manual} \alias{scale_color_manual} \alias{scale_colour_manual} \alias{scale_fill_manual} \alias{scale_linetype_manual} \alias{scale_manual} \alias{scale_shape_manual} \alias{scale_size_manual} \title{Create your own discrete scale.} \usage{ scale_colour_manual(..., values) scale_fill_manual(..., values) scale_size_manual(..., values) scale_shape_manual(..., values) scale_linetype_manual(..., values) scale_alpha_manual(..., values) } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{values}{a set of aesthetic values to map data values to. If this is a named vector, then the values will be matched based on the names. If unnamed, values will be matched in order (usually alphabetical) with the limits of the scale. Any data values that don't match will be given \code{na.value}.} } \description{ Create your own discrete scale. } \examples{ \donttest{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) p + scale_colour_manual(values = c("red","blue", "green")) p + scale_colour_manual( values = c("8" = "red","4" = "blue","6" = "green")) # With rgb hex values p + scale_colour_manual(values = c("#FF0000", "#0000FF", "#00FF00")) # As with other scales you can use breaks to control the appearance # of the legend cols <- c("8" = "red","4" = "blue","6" = "darkgreen", "10" = "orange") p + scale_colour_manual(values = cols) p + scale_colour_manual(values = cols, breaks = c("4", "6", "8")) p + scale_colour_manual(values = cols, breaks = c("8", "6", "4")) p + scale_colour_manual(values = cols, breaks = c("4", "6", "8"), labels = c("four", "six", "eight")) # And limits to control the possible values of the scale p + scale_colour_manual(values = cols, limits = c("4", "8")) p + scale_colour_manual(values = cols, limits = c("4", "6", "8", "10")) # Notice that the values are matched with limits, and not breaks p + scale_colour_manual(limits = c(6, 8, 4), breaks = c(8, 4, 6), values = c("grey50", "grey80", "black")) } } ggplot2/man/resolution.Rd0000644000175100001440000000146312611730203015112 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities-resolution.r \name{resolution} \alias{resolution} \title{Compute the "resolution" of a data vector.} \usage{ resolution(x, zero = TRUE) } \arguments{ \item{x}{numeric vector} \item{zero}{should a zero value be automatically included in the computation of resolution} } \description{ The resolution is is the smallest non-zero distance between adjacent values. If there is only one unique value, then the resolution is defined to be one. } \details{ If x is an integer vector, then it is assumed to represent a discrete variable, and the resolution is 1. } \examples{ resolution(1:10) resolution((1:10) - 0.5) resolution((1:10) - 0.5, FALSE) resolution(c(1,2, 10, 20, 50)) resolution(as.integer(c(1, 10, 20, 50))) # Returns 1 } ggplot2/man/continuous_scale.Rd0000644000175100001440000000644512611730203016271 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-.r \name{continuous_scale} \alias{continuous_scale} \title{Continuous scale constructor.} \usage{ continuous_scale(aesthetics, scale_name, palette, name = waiver(), breaks = waiver(), minor_breaks = waiver(), labels = waiver(), limits = NULL, rescaler = rescale, oob = censor, expand = waiver(), na.value = NA_real_, trans = "identity", guide = "legend") } \arguments{ \item{aesthetics}{the names of the aesthetics that this scale works with} \item{scale_name}{the name of the scale} \item{palette}{a palette function that when called with a single integer argument (the number of levels in the scale) returns the values that they should take} \item{name}{The name of the scale. Used as axis or legend title. If \code{NULL}, the default, the name of the scale is taken from the first mapping used for that aesthetic.} \item{breaks}{One of: \itemize{ \item \code{NULL} for no breaks \item \code{waiver()} for the default breaks computed by the transformation object \item A numeric vector of positions \item A function that takes the limits as input and returns breaks as output }} \item{minor_breaks}{One of: \itemize{ \item \code{NULL} for no minor breaks \item \code{waiver()} for the default breaks (one minor break between each major break) \item A numeric vector of positions \item A function that given the limits returns a vector of minor breaks. }} \item{labels}{One of: \itemize{ \item \code{NULL} for no labels \item \code{waiver()} for the default labels computed by the transformation object \item A character vector giving labels (must be same length as \code{breaks}) \item A function that takes the breaks as input and returns labels as output }} \item{limits}{A numeric vector of length two providing limits of the scale. Use \code{NA} to refer to the existing minimum or maximum.} \item{rescaler}{Used by diverging and n colour gradients (i.e. \code{\link{scale_colour_gradient2}}, \code{\link{scale_colour_gradientn}}). A function used to scale the input values to the range [0, 1].} \item{oob}{Function that handles limits outside of the scale limits (out of bounds). The default replaces out of bounds values with NA.} \item{expand}{A numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes. The defaults are \code{c(0.05, 0)} for continuous variables, and \code{c(0, 0.6)} for discrete variables.} \item{na.value}{Missing values will be replaced with this value.} \item{trans}{Either the name of a transformation object, or the object itself. Built-in transformations include "asn", "atanh", "boxcox", "exp", "identity", "log", "log10", "log1p", "log2", "logit", "probability", "probit", "reciprocal", "reverse" and "sqrt". A transformation object bundles together a transform, it's inverse, and methods for generating breaks and labels. Transformation objects are defined in the scales package, and are called \code{name_trans}, e.g. \code{\link[scales]{boxcox_trans}}. You can create your own transformation with \code{\link[scales]{trans_new}}.} \item{guide}{Name of guide object, or object itself.} } \description{ Continuous scale constructor. } \keyword{internal} ggplot2/man/remove_missing.Rd0000644000175100001440000000170012611730203015727 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r \name{remove_missing} \alias{remove_missing} \title{Convenience function to remove missing values from a data.frame} \usage{ remove_missing(df, na.rm = FALSE, vars = names(df), name = "", finite = FALSE) } \arguments{ \item{df}{data.frame} \item{na.rm}{If true, will suppress warning message.} \item{vars}{Character vector of variables to check for missings in} \item{name}{Optional function name to improve error message.} \item{finite}{If \code{TRUE}, will also remove non-finite values.} } \description{ Remove all non-complete rows, with a warning if \code{na.rm = FALSE}. ggplot is somewhat more accommodating of missing values than R generally. For those stats which require complete data, missing values will be automatically removed with a warning. If \code{na.rm = TRUE} is supplied to the statistic, the warning will be suppressed. } \keyword{internal} ggplot2/man/is.theme.Rd0000644000175100001440000000043012611730203014414 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{is.theme} \alias{is.theme} \title{Reports whether x is a theme object} \usage{ is.theme(x) } \arguments{ \item{x}{An object to test} } \description{ Reports whether x is a theme object } ggplot2/man/facet_wrap.Rd0000644000175100001440000001013612611730203015017 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-wrap.r \name{facet_wrap} \alias{facet_wrap} \title{Wrap a 1d ribbon of panels into 2d.} \usage{ facet_wrap(facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE, dir = "h") } \arguments{ \item{facets}{Either a formula or character vector. Use either a one sided formula, \code{~a + b}, or a character vector, \code{c("a", "b")}.} \item{nrow, ncol}{Number of rows and columns.} \item{scales}{should Scales be fixed (\code{"fixed"}, the default), free (\code{"free"}), or free in one dimension (\code{"free_x"}, \code{"free_y"}).} \item{shrink}{If \code{TRUE}, will shrink scales to fit output of statistics, not raw data. If \code{FALSE}, will be range of raw data before statistical summary.} \item{labeller}{A function that takes one data frame of labels and returns a list or data frame of character vectors. Each input column corresponds to one factor. Thus there will be more than one with formulae of the type \code{~cyl + am}. Each output column gets displayed as one separate line in the strip label. This function should inherit from the "labeller" S3 class for compatibility with \code{\link{labeller}()}. See \code{\link{label_value}} for more details and pointers to other options.} \item{as.table}{If \code{TRUE}, the default, the facets are laid out like a table with highest values at the bottom-right. If \code{FALSE}, the facets are laid out like a plot with the highest value at the top-right.} \item{switch}{By default, the labels are displayed on the top of the plot. If \code{switch} is \code{"x"}, they will be displayed to the bottom. If \code{"y"}, they will be displayed to the left, near the y axis.} \item{drop}{If \code{TRUE}, the default, all factor levels not used in the data will automatically be dropped. If \code{FALSE}, all factor levels will be shown, regardless of whether or not they appear in the data.} \item{dir}{Direction: either "h" for horizontal, the default, or "v", for vertical.} } \description{ Most displays are roughly rectangular, so if you have a categorical variable with many levels, it doesn't make sense to try and display them all in one row (or one column). To solve this dilemma, \code{facet_wrap} wraps a 1d sequence of panels into 2d, making best use of screen real estate. } \examples{ ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class) # Control the number of rows and columns with nrow and ncol ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class, nrow = 4) \donttest{ # You can facet by multiple variables ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~ cyl + drv) # Or use a character vector: ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(c("cyl", "drv")) # Use the `labeller` option to control how labels are printed: ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(c("cyl", "drv"), labeller = "label_both") # To change the order in which the panels appear, change the levels # of the underlying factor. mpg$class2 <- reorder(mpg$class, mpg$displ) ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class2) # By default, the same scales are used for all panels. You can allow # scales to vary across the panels with the `scales` argument. # Free scales make it easier to see patterns within each panel, but # harder to compare across panels. ggplot(mpg, aes(displ, hwy)) + geom_point() + facet_wrap(~class, scales = "free") # To repeat the same data in every panel, simply construct a data frame # that does not contain the facetting variable. ggplot(mpg, aes(displ, hwy)) + geom_point(data = transform(mpg, class = NULL), colour = "grey85") + geom_point() + facet_wrap(~class) # Use `switch` to display the facet labels near an axis, acting as # a subtitle for this axis. This is typically used with free scales # and a theme without boxes around strip labels. ggplot(economics_long, aes(date, value)) + geom_line() + facet_wrap(~variable, scales = "free_y", nrow = 2, switch = "x") + theme(strip.background = element_blank()) } } ggplot2/man/hmisc.Rd0000644000175100001440000000137012611730203014007 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary.r \name{hmisc} \alias{hmisc} \alias{mean_cl_boot} \alias{mean_cl_normal} \alias{mean_sdl} \alias{median_hilow} \title{Wrap up a selection of summary functions from Hmisc to make it easy to use with \code{\link{stat_summary}}.} \usage{ mean_cl_boot(x, ...) mean_cl_normal(x, ...) mean_sdl(x, ...) median_hilow(x, ...) } \arguments{ \item{x}{a numeric vector} \item{...}{other arguments passed on to the respective Hmisc function.} } \description{ See the Hmisc documentation for details of their options. } \seealso{ \code{\link[Hmisc]{smean.cl.boot}}, \code{\link[Hmisc]{smean.cl.normal}}, \code{\link[Hmisc]{smean.sdl}}, \code{\link[Hmisc]{smedian.hilow}} } ggplot2/man/reexports.Rd0000644000175100001440000000123612613770340014750 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.r, R/utilities-grid.r \docType{import} \name{reexports} \alias{alpha} \alias{arrow} \alias{reexports} \alias{unit} \title{Objects exported from other packages} \description{ These objects are imported from other packages. Follow the links below to see their documentation. \describe{ \item{grid}{\code{\link[grid]{unit}}, \code{\link[grid]{arrow}}} \item{scales}{\code{\link[scales]{alpha}}} }} \examples{ ggplot(mpg, aes(displ, hwy)) + geom_point(alpha = 0.5, colour = "blue") ggplot(mpg, aes(displ, hwy)) + geom_point(colour = alpha("blue", 0.5)) } \keyword{internal} ggplot2/man/print.ggplot.Rd0000644000175100001440000000137712611730203015342 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot.r \name{print.ggplot} \alias{plot.ggplot} \alias{print.ggplot} \title{Draw plot on current graphics device.} \usage{ \method{print}{ggplot}(x, newpage = is.null(vp), vp = NULL, ...) \method{plot}{ggplot}(x, newpage = is.null(vp), vp = NULL, ...) } \arguments{ \item{x}{plot to display} \item{newpage}{draw new (empty) page first?} \item{vp}{viewport to draw plot in} \item{...}{other arguments not used by this method} } \value{ Invisibly returns the result of \code{\link{ggplot_build}}, which is a list with components that contain the plot itself, the data, information about the scales, panels etc. } \description{ Draw plot on current graphics device. } \keyword{hplot} ggplot2/man/rel.Rd0000644000175100001440000000066512611730203013474 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{rel} \alias{rel} \title{Relative sizing for theme elements} \usage{ rel(x) } \arguments{ \item{x}{A number representing the relative size} } \description{ Relative sizing for theme elements } \examples{ df <- data.frame(x = 1:3, y = 1:3) ggplot(df, aes(x, y)) + geom_point() + theme(axis.title.x = element_text(size = rel(2.5))) } ggplot2/man/scale_hue.Rd0000644000175100001440000000455212611730203014641 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-hue.r, R/zxx.r \name{scale_colour_hue} \alias{scale_color_discrete} \alias{scale_color_hue} \alias{scale_colour_discrete} \alias{scale_colour_hue} \alias{scale_fill_discrete} \alias{scale_fill_hue} \title{Qualitative colour scale with evenly spaced hues.} \usage{ scale_colour_hue(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") scale_fill_hue(..., h = c(0, 360) + 15, c = 100, l = 65, h.start = 0, direction = 1, na.value = "grey50") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} to control name, limits, breaks, labels and so forth.} \item{h}{range of hues to use, in [0, 360]} \item{c}{chroma (intensity of colour), maximum value varies depending on combination of hue and luminance.} \item{l}{luminance (lightness), in [0, 100]} \item{h.start}{hue to start at} \item{direction}{direction to travel around the colour wheel, 1 = clockwise, -1 = counter-clockwise} \item{na.value}{Colour to use for missing values} } \description{ Qualitative colour scale with evenly spaced hues. } \examples{ \donttest{ dsamp <- diamonds[sample(nrow(diamonds), 1000), ] (d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity))) # Change scale label d + scale_colour_hue() d + scale_colour_hue("clarity") d + scale_colour_hue(expression(clarity[beta])) # Adjust luminosity and chroma d + scale_colour_hue(l=40, c=30) d + scale_colour_hue(l=70, c=30) d + scale_colour_hue(l=70, c=150) d + scale_colour_hue(l=80, c=150) # Change range of hues used d + scale_colour_hue(h=c(0, 90)) d + scale_colour_hue(h=c(90, 180)) d + scale_colour_hue(h=c(180, 270)) d + scale_colour_hue(h=c(270, 360)) # Vary opacity # (only works with pdf, quartz and cairo devices) d <- ggplot(dsamp, aes(carat, price, colour = clarity)) d + geom_point(alpha = 0.9) d + geom_point(alpha = 0.5) d + geom_point(alpha = 0.2) # Colour of missing values is controlled with na.value: miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) + scale_colour_hue(na.value = "black") } } \seealso{ Other colour scales: \code{\link{scale_colour_brewer}}, \code{\link{scale_colour_gradient}}, \code{\link{scale_colour_grey}} } ggplot2/man/seals.Rd0000644000175100001440000000132712611730203014015 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{seals} \alias{seals} \title{Vector field of seal movements.} \format{A data frame with 1155 rows and 4 variables} \usage{ seals } \description{ This vector field was produced from the data described in Brillinger, D.R., Preisler, H.K., Ager, A.A. and Kie, J.G. "An exploratory data analysis (EDA) of the paths of moving animals". J. Statistical Planning and Inference 122 (2004), 43-63, using the methods of Brillinger, D.R., "Learning a potential function from a trajectory", Signal Processing Letters. December (2007). } \references{ \url{http://www.stat.berkeley.edu/~brill/Papers/jspifinal.pdf} } \keyword{datasets} ggplot2/man/translate_qplot_ggplot.Rd0000644000175100001440000000722212611730203017476 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/translate-qplot-ggplot.r \name{translate_qplot_ggplot} \alias{translate_qplot_ggplot} \title{Translating between qplot and ggplot} \description{ Within ggplot2, there are two basic methods to create plots, with qplot() and ggplot(). qplot() is designed primarily for interactive use: it makes a number of assumptions that speed most cases, but when designing multilayered plots with different data sources it can get in the way. This section describes what those defaults are, and how they map to the fuller ggplot() syntax. } \examples{ # By default, qplot() assumes that you want a scatterplot, # i.e., you want to use geom_point() # qplot(x, y, data = data) # ggplot(data, aes(x, y)) + geom_point() # Using Aesthetics # If you map additional aesthetics, these will be added to the defaults. With # qplot() there is no way to use different aesthetic mappings (or data) in # different layers # qplot(x, y, data = data, shape = shape, colour = colour) # ggplot(data, aes(x, y, shape = shape, colour = colour)) + geom_point() # # Aesthetic parameters in qplot() always try to map the aesthetic to a # variable. If the argument is not a variable but a value, effectively a new column # is added to the original dataset with that value. To set an aesthetic to a # value and override the default appearance, you surround the value with I() in # qplot(), or pass it as a parameter to the layer. # qplot(x, y, data = data, colour = I("red")) # ggplot(data, aes(x, y)) + geom_point(colour = "red") # Changing the geom parameter changes the geom added to the plot # qplot(x, y, data = data, geom = "line") # ggplot(data, aes(x, y)) + geom_line() # Not all geoms require both x and y, e.g., geom_bar() and geom_histogram(). # For these two geoms, if the y aesthetic is not supplied, both qplot and # ggplot commands default to "count" on the y-axis # ggplot(data, aes(x)) + geom_bar() # qplot(x, data = data, geom = "bar") # If a vector of multiple geom names is supplied to the geom argument, each # geom will be added in turn # qplot(x, y, data = data, geom = c("point", "smooth")) # ggplot(data, aes(x, y)) + geom_point() + geom_smooth() # Unlike the rest of ggplot2, stats and geoms are independent # qplot(x, y, data = data, stat = "bin") # ggplot(data, aes(x, y)) + geom_point(stat = "bin") # # Any layer parameters will be passed on to all layers. Most layers will ignore # parameters that they don't need # qplot(x, y, data = data, geom = c("point", "smooth"), method = "lm") # ggplot(data, aes(x, y)) + geom_point(method = "lm") + geom_smooth(method = "lm") # Scales and axes # You can control basic properties of the x and y scales with the xlim, ylim, # xlab and ylab arguments # qplot(x, y, data = data, xlim = c(1, 5), xlab = "my label") # ggplot(data, aes(x, y)) + geom_point() + # scale_x_continuous("my label", limits = c(1, 5)) # qplot(x, y, data = data, xlim = c(1, 5), ylim = c(10, 20)) # ggplot(data, aes(x, y)) + geom_point() + # scale_x_continuous(limits = c(1, 5)) + scale_y_continuous(limits = c(10, 20)) # Like plot(), qplot() has a convenient way of log transforming the axes. # qplot(x, y, data = data, log = "xy") # ggplot(data, aes(x, y)) + geom_point() + scale_x_log10() + scale_y_log10() # There are many other possible transformations, but not all are # accessible from within qplot(), see ?scale_continuous for more # Plot options # qplot() recognises the same options as plot does, and converts them to their # ggplot2 equivalents. See ?theme for more on ggplot options # qplot(x, y, data = data, main="title", asp = 1) # ggplot(data, aes(x, y)) + geom_point() + labs(title = "title") + theme(aspect.ratio = 1) } ggplot2/man/label_bquote.Rd0000644000175100001440000000212112611730203015335 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-labels.r \name{label_bquote} \alias{label_bquote} \title{Backquoted labeller} \usage{ label_bquote(rows = NULL, cols = NULL, default = label_value) } \arguments{ \item{rows}{Backquoted labelling expression for rows.} \item{cols}{Backquoted labelling expression for columns.} \item{default}{Default labeller function for the rows or the columns when no plotmath expression is provided.} } \description{ \code{\link{label_bquote}()} offers a flexible way of labelling facet rows or columns with plotmath expressions. Backquoted variables will be replaced with their value in the facet. } \examples{ # The variables mentioned in the plotmath expression must be # backquoted and referred to by their names. p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p + facet_grid(vs ~ ., labeller = label_bquote(alpha ^ .(vs))) p + facet_grid(. ~ vs, labeller = label_bquote(cols = .(vs) ^ .(vs))) p + facet_grid(. ~ vs + am, labeller = label_bquote(cols = .(am) ^ .(vs))) } \seealso{ \link{labellers}, \code{\link{labeller}()}, } ggplot2/man/stat_unique.Rd0000644000175100001440000000342712633014264015260 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-unique.r \name{stat_unique} \alias{stat_unique} \title{Remove duplicates.} \usage{ stat_unique(mapping = NULL, data = NULL, geom = "point", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{The aesthetic mapping, usually constructed with \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set at the layer level if you are overriding the plot defaults.} \item{data}{A layer specific dataset - only needed if you want to override the plot defaults.} \item{geom}{The geometric object to use display the data} \item{position}{The position adjustment to use for overlapping points on this layer} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. This can include aesthetics whose values you want to set, not map. See \code{\link{layer}} for more details.} } \description{ Remove duplicates. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "unique")} } \examples{ ggplot(mtcars, aes(vs, am)) + geom_point(alpha = 0.1) ggplot(mtcars, aes(vs, am)) + geom_point(alpha = 0.1, stat="unique") } ggplot2/man/aes_group_order.Rd0000644000175100001440000000632212611730203016065 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-group-order.r \name{aes_group_order} \alias{aes_group_order} \alias{group} \title{Aesthetics: group} \description{ Aesthetics: group } \examples{ \donttest{ # By default, the group is set to the interaction of all discrete variables in the # plot. This often partitions the data correctly, but when it does not, or when # no discrete variable is used in the plot, you will need to explicitly define the # grouping structure, by mapping group to a variable that has a different value # for each group. # For most applications you can simply specify the grouping with # various aesthetics (colour, shape, fill, linetype) or with facets. p <- ggplot(mtcars, aes(wt, mpg)) # A basic scatter plot p + geom_point(size = 4) # The colour aesthetic p + geom_point(aes(colour = factor(cyl)), size = 4) # Or you can use shape to distinguish the data p + geom_point(aes(shape = factor(cyl)), size = 4) # Using fill a <- ggplot(mtcars, aes(factor(cyl))) a + geom_bar() a + geom_bar(aes(fill = factor(cyl))) a + geom_bar(aes(fill = factor(vs))) # Using linetypes rescale01 <- function(x) (x - min(x)) / diff(range(x)) ec_scaled <- data.frame( date = economics$date, plyr::colwise(rescale01)(economics[, -(1:2)])) ecm <- reshape2::melt(ec_scaled, id.vars = "date") f <- ggplot(ecm, aes(date, value)) f + geom_line(aes(linetype = variable)) # Using facets k <- ggplot(diamonds, aes(carat, ..density..)) + geom_histogram(binwidth = 0.2) k + facet_grid(. ~ cut) # There are three common cases where the default is not enough, and we # will consider each one below. In the following examples, we will use a simple # longitudinal dataset, Oxboys, from the nlme package. It records the heights # (height) and centered ages (age) of 26 boys (Subject), measured on nine # occasions (Occasion). # Multiple groups with one aesthetic h <- ggplot(nlme::Oxboys, aes(age, height)) # A single line tries to connect all the observations h + geom_line() # The group aesthetic maps a different line for each subject h + geom_line(aes(group = Subject)) # Different groups on different layers h <- h + geom_line(aes(group = Subject)) # Using the group aesthetic with both geom_line() and geom_smooth() # groups the data the same way for both layers h + geom_smooth(aes(group = Subject), method = "lm", se = FALSE) # Changing the group aesthetic for the smoother layer # fits a single line of best fit across all boys h + geom_smooth(aes(group = 1), size = 2, method = "lm", se = FALSE) # Overriding the default grouping # The plot has a discrete scale but you want to draw lines that connect across # groups. This is the strategy used in interaction plots, profile plots, and parallel # coordinate plots, among others. For example, we draw boxplots of height at # each measurement occasion boysbox <- ggplot(nlme::Oxboys, aes(Occasion, height)) boysbox + geom_boxplot() # There is no need to specify the group aesthetic here; the default grouping # works because occasion is a discrete variable. To overlay individual trajectories # we again need to override the default grouping for that layer with aes(group = Subject) boysbox <- boysbox + geom_boxplot() boysbox + geom_line(aes(group = Subject), colour = "blue") } } ggplot2/man/scale_brewer.Rd0000644000175100001440000001003712613770162015353 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-brewer.r, R/zxx.r \name{scale_colour_brewer} \alias{scale_color_brewer} \alias{scale_color_distiller} \alias{scale_colour_brewer} \alias{scale_colour_distiller} \alias{scale_fill_brewer} \alias{scale_fill_distiller} \title{Sequential, diverging and qualitative colour scales from colorbrewer.org} \usage{ scale_colour_brewer(..., type = "seq", palette = 1, direction = 1) scale_fill_brewer(..., type = "seq", palette = 1, direction = 1) scale_colour_distiller(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") scale_fill_distiller(..., type = "seq", palette = 1, direction = -1, values = NULL, space = "Lab", na.value = "grey50", guide = "colourbar") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} to control name, limits, breaks, labels and so forth.} \item{type}{One of seq (sequential), div (diverging) or qual (qualitative)} \item{palette}{If a string, will use that named palette. If a number, will index into the list of palettes of appropriate \code{type}} \item{direction}{Sets the order of colors in the scale. If 1, the default, colors are as output by \code{\link[RColorBrewer]{brewer.pal}}. If -1, the order of colors is reversed.} \item{values}{if colours should not be evenly positioned along the gradient this vector gives the position (between 0 and 1) for each colour in the \code{colours} vector. See \code{\link{rescale}} for a convience function to map an arbitrary range to between 0 and 1.} \item{space}{colour space in which to calculate gradient. Must be "Lab" - other values are deprecated.} \item{na.value}{Colour to use for missing values} \item{guide}{Type of legend. Use \code{"colourbar"} for continuous colour bar, or \code{"legend"} for discrete colour legend.} } \description{ ColorBrewer provides sequential, diverging and qualitative colour schemes which are particularly suited and tested to display discrete values (levels of a factor) on a map. ggplot2 can use those colours in discrete scales. It also allows to smoothly interpolate 6 colours from any palette to a continuous scale (6 colours per palette gives nice gradients; more results in more saturated colours which do not look as good). However, the original colour schemes (particularly the qualitative ones) were not intended for this and the perceptual result is left to the appreciation of the user. See \url{http://colorbrewer2.org} for more information. } \section{Palettes}{ The following palettes are available for use with these scales: \describe{ \item{Diverging}{BrBG, PiYG, PRGn, PuOr, RdBu, RdGy, RdYlBu, RdYlGn, Spectral} \item{Qualitative}{Accent, Dark2, Paired, Pastel1, Pastel2, Set1, Set2, Set3} \item{Sequential}{Blues, BuGn, BuPu, GnBu, Greens, Greys, Oranges, OrRd, PuBu, PuBuGn, PuRd, Purples, RdPu, Reds, YlGn, YlGnBu, YlOrBr, YlOrRd} } } \examples{ dsamp <- diamonds[sample(nrow(diamonds), 1000), ] (d <- ggplot(dsamp, aes(carat, price)) + geom_point(aes(colour = clarity))) # Change scale label d + scale_colour_brewer() d + scale_colour_brewer("Diamond\\nclarity") # Select brewer palette to use, see ?scales::brewer_pal for more details d + scale_colour_brewer(palette = "Greens") d + scale_colour_brewer(palette = "Set1") \donttest{ # scale_fill_brewer works just the same as # scale_colour_brewer but for fill colours p <- ggplot(diamonds, aes(x = price, fill = cut)) + geom_histogram(position = "dodge", binwidth = 1000) p + scale_fill_brewer() # the order of colour can be reversed p + scale_fill_brewer(direction = -1) # the brewer scales look better on a darker background p + scale_fill_brewer(direction = -1) + theme_dark() } # Use distiller variant with continous data v <- ggplot(faithfuld) + geom_tile(aes(waiting, eruptions, fill = density)) v v + scale_fill_distiller() v + scale_fill_distiller(palette = "Spectral") } \seealso{ Other colour scales: \code{\link{scale_colour_gradient}}, \code{\link{scale_colour_grey}}, \code{\link{scale_colour_hue}} } ggplot2/man/annotation_raster.Rd0000644000175100001440000000317712611730203016445 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/annotation-raster.r \name{annotation_raster} \alias{annotation_raster} \title{Annotation: High-performance rectangular tiling.} \usage{ annotation_raster(raster, xmin, xmax, ymin, ymax, interpolate = FALSE) } \arguments{ \item{raster}{raster object to display} \item{xmin, xmax}{x location (in data coordinates) giving horizontal location of raster} \item{ymin, ymax}{y location (in data coordinates) giving vertical location of raster} \item{interpolate}{If \code{TRUE} interpolate linearly, if \code{FALSE} (the default) don't interpolate.} } \description{ This is a special version of \code{\link{geom_raster}} optimised for static annotations that are the same in every panel. These annotations will not affect scales (i.e. the x and y axes will not grow to cover the range of the raster, and the raster must already have its own colours). } \details{ Most useful for adding bitmap images. } \examples{ # Generate data rainbow <- matrix(hcl(seq(0, 360, length.out = 50 * 50), 80, 70), nrow = 50) ggplot(mtcars, aes(mpg, wt)) + geom_point() + annotation_raster(rainbow, 15, 20, 3, 4) # To fill up whole plot ggplot(mtcars, aes(mpg, wt)) + annotation_raster(rainbow, -Inf, Inf, -Inf, Inf) + geom_point() rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) ggplot(mtcars, aes(mpg, wt)) + annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf) + geom_point() rainbow2 <- matrix(hcl(seq(0, 360, length.out = 10), 80, 70), nrow = 1) ggplot(mtcars, aes(mpg, wt)) + annotation_raster(rainbow2, -Inf, Inf, -Inf, Inf, interpolate = TRUE) + geom_point() } ggplot2/man/scale_linetype.Rd0000644000175100001440000000172412611730203015707 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-linetype.r \name{scale_linetype} \alias{scale_linetype} \alias{scale_linetype_continuous} \alias{scale_linetype_discrete} \title{Scale for line patterns.} \usage{ scale_linetype(..., na.value = "blank") scale_linetype_continuous(...) scale_linetype_discrete(..., na.value = "blank") } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{na.value}{The linetype to use for \code{NA} values.} } \description{ Default line types based on a set supplied by Richard Pearson, University of Manchester. Line types can not be mapped to continuous values. } \examples{ base <- ggplot(economics_long, aes(date, value01)) base + geom_line(aes(group = variable)) base + geom_line(aes(linetype = variable)) # See scale_manual for more flexibility } ggplot2/man/element_grob.Rd0000644000175100001440000000100512611730203015341 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{element_grob} \alias{element_grob} \title{Generate grid grob from theme element} \usage{ element_grob(element, ...) } \arguments{ \item{element}{Theme element, i.e. \code{element_rect} or similar.} \item{...}{Other arguments to control specific of rendering. This is usually at least position. See the source code for individual methods.} } \description{ Generate grid grob from theme element } \keyword{internal} ggplot2/man/is.Coord.Rd0000644000175100001440000000040212611730203014357 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-.r \name{is.Coord} \alias{is.Coord} \title{Is this object a coordinate system?} \usage{ is.Coord(x) } \description{ Is this object a coordinate system? } \keyword{internal} ggplot2/man/scale_discrete.Rd0000644000175100001440000000424712611730203015663 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-discrete-.r \name{scale_x_discrete} \alias{scale_x_discrete} \alias{scale_y_discrete} \title{Discrete position.} \usage{ scale_x_discrete(..., expand = waiver()) scale_y_discrete(..., expand = waiver()) } \arguments{ \item{...}{common discrete scale parameters: \code{name}, \code{breaks}, \code{labels}, \code{na.value}, \code{limits} and \code{guide}. See \code{\link{discrete_scale}} for more details} \item{expand}{a numeric vector of length two giving multiplicative and additive expansion constants. These constants ensure that the data is placed some distance away from the axes.} } \description{ You can use continuous positions even with a discrete position scale - this allows you (e.g.) to place labels between bars in a bar chart. Continuous positions are numeric values starting at one for the first level, and increasing by one for each level (i.e. the labels are placed at integer positions). This is what allows jittering to work. } \examples{ \donttest{ ggplot(diamonds, aes(cut)) + stat_bin() ggplot(diamonds, aes(cut)) + geom_bar() # The discrete position scale is added automatically whenever you # have a discrete position. (d <- ggplot(subset(diamonds, carat > 1), aes(cut, clarity)) + geom_jitter()) d + scale_x_discrete("Cut") d + scale_x_discrete("Cut", labels = c("Fair" = "F","Good" = "G", "Very Good" = "VG","Perfect" = "P","Ideal" = "I")) d + scale_y_discrete("Clarity") d + scale_x_discrete("Cut") + scale_y_discrete("Clarity") # Use limits to adjust the which levels (and in what order) # are displayed d + scale_x_discrete(limits=c("Fair","Ideal")) # you can also use the short hand functions xlim and ylim d + xlim("Fair","Ideal", "Good") d + ylim("I1", "IF") # See ?reorder to reorder based on the values of another variable ggplot(mpg, aes(manufacturer, cty)) + geom_point() ggplot(mpg, aes(reorder(manufacturer, cty), cty)) + geom_point() ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + geom_point() # Use abbreviate as a formatter to reduce long names ggplot(mpg, aes(reorder(manufacturer, displ), cty)) + geom_point() + scale_x_discrete(labels = abbreviate) } } ggplot2/man/coord_flip.Rd0000644000175100001440000000232712611730203015027 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-flip.r \name{coord_flip} \alias{coord_flip} \title{Flipped cartesian coordinates.} \usage{ coord_flip(xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{xlim}{Limits for the x and y axes.} \item{ylim}{Limits for the x and y axes.} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ Flipped cartesian coordinates so that horizontal becomes vertical, and vertical, horizontal. This is primarily useful for converting geoms and statistics which display y conditional on x, to x conditional on y. } \examples{ # Very useful for creating boxplots, and other interval # geoms in the horizontal instead of vertical position. ggplot(diamonds, aes(cut, price)) + geom_boxplot() + coord_flip() h <- ggplot(diamonds, aes(carat)) + geom_histogram() h h + coord_flip() h + coord_flip() + scale_x_reverse() # You can also use it to flip line and area plots: df <- data.frame(x = 1:5, y = (1:5) ^ 2) ggplot(df, aes(x, y)) + geom_area() last_plot() + coord_flip() } ggplot2/man/geom_linerange.Rd0000644000175100001440000001034512613770162015673 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-crossbar.r, R/geom-errorbar.r, R/geom-linerange.r, R/geom-pointrange.r \name{geom_crossbar} \alias{geom_crossbar} \alias{geom_errorbar} \alias{geom_linerange} \alias{geom_pointrange} \title{Vertical intervals: lines, crossbars & errorbars.} \usage{ geom_crossbar(mapping = NULL, data = NULL, stat = "identity", position = "identity", fatten = 2.5, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_errorbar(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_linerange(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_pointrange(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., fatten = 4, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{fatten}{A multiplicative factor used to increase the size of the middle bar in \code{geom_crossbar()} and the middle point in \code{geom_pointrange()}.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ Various ways of representing a vertical interval defined by \code{x}, \code{ymin} and \code{ymax}. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "linerange")} } \examples{ #' # Create a simple example dataset df <- data.frame( trt = factor(c(1, 1, 2, 2)), resp = c(1, 5, 3, 4), group = factor(c(1, 2, 1, 2)), upper = c(1.1, 5.3, 3.3, 4.2), lower = c(0.8, 4.6, 2.4, 3.6) ) p <- ggplot(df, aes(trt, resp, colour = group)) p + geom_linerange(aes(ymin = lower, ymax = upper)) p + geom_pointrange(aes(ymin = lower, ymax = upper)) p + geom_crossbar(aes(ymin = lower, ymax = upper), width = 0.2) p + geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) # Draw lines connecting group means p + geom_line(aes(group = group)) + geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2) # If you want to dodge bars and errorbars, you need to manually # specify the dodge width p <- ggplot(df, aes(trt, resp, fill = group)) p + geom_bar(position = "dodge", stat = "identity") + geom_errorbar(aes(ymin = lower, ymax = upper), position = "dodge", width = 0.25) # Because the bars and errorbars have different widths # we need to specify how wide the objects we are dodging are dodge <- position_dodge(width=0.9) p + geom_bar(position = dodge, stat = "identity") + geom_errorbar(aes(ymin = lower, ymax = upper), position = dodge, width = 0.25) } \seealso{ \code{\link{stat_summary}} for examples of these guys in use, \code{\link{geom_smooth}} for continuous analog } ggplot2/man/mpg.Rd0000644000175100001440000000160512611730203013470 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{mpg} \alias{mpg} \title{Fuel economy data from 1999 and 2008 for 38 popular models of car} \format{A data frame with 234 rows and 11 variables \itemize{ \item manufacturer. \item model. \item displ. engine displacement, in litres \item year. \item cyl. number of cylinders \item trans. type of transmission \item drv. f = front-wheel drive, r = rear wheel drive, 4 = 4wd \item cty. city miles per gallon \item hwy. highway miles per gallon \item fl. \item class. }} \usage{ mpg } \description{ This dataset contains a subset of the fuel economy data that the EPA makes available on \url{http://fueleconomy.gov}. It contains only models which had a new release every year between 1999 and 2008 - this was used as a proxy for the popularity of the car. } \keyword{datasets} ggplot2/man/stat_identity.Rd0000644000175100001440000000300012633014413015562 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-identity.r \name{stat_identity} \alias{stat_identity} \title{Identity statistic.} \usage{ stat_identity(mapping = NULL, data = NULL, geom = "point", position = "identity", show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{The aesthetic mapping, usually constructed with \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set at the layer level if you are overriding the plot defaults.} \item{data}{A layer specific dataset - only needed if you want to override the plot defaults.} \item{geom}{The geometric object to use display the data} \item{position}{The position adjustment to use for overlapping points on this layer} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. This can include aesthetics whose values you want to set, not map. See \code{\link{layer}} for more details.} } \description{ The identity statistic leaves the data unchanged. } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) p + stat_identity() } ggplot2/man/element_text.Rd0000644000175100001440000000214412611730203015401 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{element_text} \alias{element_text} \title{Theme element: text.} \usage{ element_text(family = NULL, face = NULL, colour = NULL, size = NULL, hjust = NULL, vjust = NULL, angle = NULL, lineheight = NULL, color = NULL, margin = NULL, debug = NULL) } \arguments{ \item{family}{font family} \item{face}{font face ("plain", "italic", "bold", "bold.italic")} \item{colour}{text colour} \item{size}{text size (in pts)} \item{hjust}{horizontal justification (in [0, 1])} \item{vjust}{vertical justification (in [0, 1])} \item{angle}{angle (in [0, 360])} \item{lineheight}{line height} \item{color}{an alias for \code{colour}} \item{margin}{margins around the text. See \code{\link{margin}} for more details. When creating a theme, the margins should be placed on the side of the text facing towards the center of the plot.} \item{debug}{If \code{TRUE}, aids visual debugging by drawing a solid rectangle behind the complete text area, and a point where each label is anchored.} } \description{ Theme element: text. } ggplot2/man/layer.Rd0000644000175100001440000000342412611730203014022 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/layer.r \name{layer} \alias{layer} \title{Create a new layer} \usage{ layer(geom = NULL, stat = NULL, data = NULL, mapping = NULL, position = NULL, params = list(), inherit.aes = TRUE, subset = NULL, show.legend = NA) } \arguments{ \item{geom, stat, position}{Geom, stat and position adjustment to use in this layer. Can either be the name of a ggproto object, or the object itself.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{params}{Additional parameters to the \code{geom} and \code{stat}.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{subset}{DEPRECATED. An older way of subsetting the dataset used in a layer.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} } \description{ Create a new layer } \examples{ # geom calls are just a short cut for layer ggplot(mpg, aes(displ, hwy)) + geom_point() # shortcut for ggplot(mpg, aes(displ, hwy)) + layer(geom = "point", stat = "identity", position = "identity", params = list(na.rm = FALSE) ) } ggplot2/man/theme_update.Rd0000644000175100001440000000201012611730203015340 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme.r \name{theme_update} \alias{theme_get} \alias{theme_set} \alias{theme_update} \title{Get, set and update themes.} \usage{ theme_update(...) theme_get() theme_set(new) } \arguments{ \item{...}{named list of theme settings} \item{new}{new theme (a list of theme elements)} } \description{ Use \code{theme_update} to modify a small number of elements of the current theme or use \code{theme_set} to completely override it. } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p old <- theme_set(theme_bw()) p theme_set(old) p old <- theme_update(panel.background = element_rect(colour = "pink")) p theme_set(old) theme_get() ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(color = mpg)) + theme(legend.position = c(0.95, 0.95), legend.justification = c(1, 1)) last_plot() + theme(legend.background = element_rect(fill = "white", colour = "white", size = 3)) } \seealso{ \code{\link{\%+replace\%}} and \code{\link{+.gg}} } ggplot2/man/geom_hex.Rd0000644000175100001440000000563612613770162014522 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-hex.r, R/stat-binhex.r \name{geom_hex} \alias{geom_hex} \alias{stat_bin_hex} \alias{stat_binhex} \title{Hexagon binning.} \usage{ geom_hex(mapping = NULL, data = NULL, stat = "binhex", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_bin_hex(mapping = NULL, data = NULL, geom = "hex", position = "identity", bins = 30, binwidth = NULL, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Override the default connection between \code{geom_hex} and \code{stat_binhex.}} \item{bins}{numeric vector giving number of bins in both vertical and horizontal directions. Set to 30 by default.} \item{binwidth}{Numeric vector giving bin width in both vertical and horizontal directions. Overrides \code{bins} if both set.} } \description{ Hexagon binning. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "hex")} } \examples{ d <- ggplot(diamonds, aes(carat, price)) d + geom_hex() \donttest{ # You can control the size of the bins by specifying the number of # bins in each direction: d + geom_hex(bins = 10) d + geom_hex(bins = 30) # Or by specifying the width of the bins d + geom_hex(binwidth = c(1, 1000)) d + geom_hex(binwidth = c(.1, 500)) } } \seealso{ \code{\link{stat_bin2d}} for rectangular binning } ggplot2/man/position_jitterdodge.Rd0000644000175100001440000000230312611730203017131 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-jitterdodge.R \name{position_jitterdodge} \alias{position_jitterdodge} \title{Adjust position by simultaneously dodging and jittering} \usage{ position_jitterdodge(jitter.width = NULL, jitter.height = 0, dodge.width = 0.75) } \arguments{ \item{jitter.width}{degree of jitter in x direction. Defaults to 40\% of the resolution of the data.} \item{jitter.height}{degree of jitter in y direction. Defaults to 0.} \item{dodge.width}{the amount to dodge in the x direction. Defaults to 0.75, the default \code{position_dodge()} width.} } \description{ This is primarily used for aligning points generated through \code{geom_point()} with dodged boxplots (e.g., a \code{geom_boxplot()} with a fill aesthetic supplied). } \examples{ dsub <- diamonds[ sample(nrow(diamonds), 1000), ] ggplot(dsub, aes(x = cut, y = carat, fill = clarity)) + geom_boxplot(outlier.size = 0) + geom_point(pch = 21, position = position_jitterdodge()) } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_fill}}, \code{\link{position_identity}}, \code{\link{position_jitter}}, \code{\link{position_nudge}} } ggplot2/man/position_nudge.Rd0000644000175100001440000000150012611730203015725 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/position-nudge.R \name{position_nudge} \alias{position_nudge} \title{Nudge points.} \usage{ position_nudge(x = 0, y = 0) } \arguments{ \item{x, y}{Amount of vertical and horizontal distance to move.} } \description{ This is useful if you want to nudge labels a little ways from their points. } \examples{ df <- data.frame( x = c(1,3,2,5), y = c("a","c","d","c") ) ggplot(df, aes(x, y)) + geom_point() + geom_text(aes(label = y)) ggplot(df, aes(x, y)) + geom_point() + geom_text(aes(label = y), position = position_nudge(y = -0.1)) } \seealso{ Other position adjustments: \code{\link{position_dodge}}, \code{\link{position_fill}}, \code{\link{position_identity}}, \code{\link{position_jitterdodge}}, \code{\link{position_jitter}} } ggplot2/man/element_line.Rd0000644000175100001440000000072012611730203015342 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{element_line} \alias{element_line} \title{Theme element: line.} \usage{ element_line(colour = NULL, size = NULL, linetype = NULL, lineend = NULL, color = NULL) } \arguments{ \item{colour}{line colour} \item{size}{line size} \item{linetype}{line type} \item{lineend}{line end} \item{color}{an alias for \code{colour}} } \description{ Theme element: line. } ggplot2/man/mean_se.Rd0000644000175100001440000000065112611730203014314 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary.r \name{mean_se} \alias{mean_se} \title{Calculate mean and standard errors on either side.} \usage{ mean_se(x, mult = 1) } \arguments{ \item{x}{numeric vector} \item{mult}{number of multiples of standard error} } \description{ Calculate mean and standard errors on either side. } \seealso{ for use with \code{\link{stat_summary}} } ggplot2/man/geom_bar.Rd0000644000175100001440000001322212620170057014463 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-bar.r, R/stat-count.r \name{geom_bar} \alias{geom_bar} \alias{stat_count} \title{Bars, rectangles with bases on x-axis} \usage{ geom_bar(mapping = NULL, data = NULL, stat = "count", position = "stack", width = NULL, binwidth = NULL, ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) stat_count(mapping = NULL, data = NULL, geom = "bar", position = "stack", width = NULL, ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{width}{Bar width. By default, set to 90\% of the resolution of the data.} \item{binwidth}{\code{geom_bar} no longer has a binwidth argument - if you use it you'll get an warning telling to you use \code{\link{geom_histogram}} instead.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{geom, stat}{Override the default connection between \code{geom_bar} and \code{stat_count}.} } \description{ There are two types of bar charts, determined by what is mapped to bar height. By default, \code{geom_bar} uses \code{stat="count"} which makes the height of the bar proportion to the number of cases in each group (or if the \code{weight} aethetic is supplied, the sum of the weights). If you want the heights of the bars to represent values in the data, use \code{stat="identity"} and map a variable to the \code{y} aesthetic. \code{stat_count} counts the number of cases at each x position. If you want to bin the data in ranges, you should use \code{\link{stat_bin}} instead. } \details{ A bar chart maps the height of the bar to a variable, and so the base of the bar must always be shown to produce a valid visual comparison. Naomi Robbins has a nice \href{http://www.b-eye-network.com/view/index.php?cid=2468}{article on this topic}. This is why it doesn't make sense to use a log-scaled y axis with a bar chart. By default, multiple x's occurring in the same place will be stacked atop one another by \code{\link{position_stack}}. If you want them to be dodged side-to-side, see \code{\link{position_dodge}}. Finally, \code{\link{position_fill}} shows relative proportions at each x by stacking the bars and then stretching or squashing to the same height. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "bar")} } \section{Computed variables}{ \describe{ \item{count}{number of points in bin} \item{prop}{groupwise proportion} } } \examples{ # geom_bar is designed to make it easy to create bar charts that show # counts (or sums of weights) g <- ggplot(mpg, aes(class)) # Number of cars in each class: g + geom_bar() # Total engine displacement of each class g + geom_bar(aes(weight = displ)) # To show (e.g.) means, you need stat = "identity" df <- data.frame(trt = c("a", "b", "c"), outcome = c(2.3, 1.9, 3.2)) ggplot(df, aes(trt, outcome)) + geom_bar(stat = "identity") # But geom_point() display exactly the same information and doesn't # require the y-axis to touch zero. ggplot(df, aes(trt, outcome)) + geom_point() # You can also use geom_bar() with continuous data, in which case # it will show counts at unique locations df <- data.frame(x = rep(c(2.9, 3.1, 4.5), c(5, 10, 4))) ggplot(df, aes(x)) + geom_bar() # cf. a histogram of the same data ggplot(df, aes(x)) + geom_histogram(binwidth = 0.5) \donttest{ # Bar charts are automatically stacked when multiple bars are placed # at the same location g + geom_bar(aes(fill = drv)) # You can instead dodge, or fill them g + geom_bar(aes(fill = drv), position = "dodge") g + geom_bar(aes(fill = drv), position = "fill") # To change plot order of bars, change levels in underlying factor reorder_size <- function(x) { factor(x, levels = names(sort(table(x)))) } ggplot(mpg, aes(reorder_size(class))) + geom_bar() } } \seealso{ \code{\link{geom_histogram}} for continuous data, \code{\link{position_dodge}} for creating side-by-side barcharts. \code{\link{stat_bin}}, which bins data in ranges and counts the cases in each range. It differs from \code{stat_count}, which counts the number of cases at each x position (without binning into ranges). \code{\link{stat_bin}} requires continuous x data, whereas \code{stat_count} can be used for both discrete and continuous x data. } ggplot2/man/translate_qplot_base.Rd0000644000175100001440000001155412611730203017117 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/translate-qplot-base.r \name{translate_qplot_base} \alias{translate_qplot_base} \title{Translating between qplot and base graphics} \description{ There are two types of graphics functions in base graphics, those that draw complete graphics and those that add to existing graphics. } \details{ qplot() has been designed to mimic plot(), and can do the job of all other high-level plotting commands. There are only two graph types from base graphics that cannot be replicated with ggplot2: filled.contour() and persp() } \examples{ \donttest{ # High-level plotting commands x <- runif(10) y <- 1:10 plot(x, y); dotchart(x, y) qplot(x, y) plot(x, y, type = "l") qplot(x, y, geom = "line") plot(x, y, type = "s") qplot(x, y, geom = "step") plot(x, y, type = "b") qplot(x, y, geom = c("point", "line")) boxplot(x, y) qplot(x, y, geom = "boxplot") hist(x) qplot(x, geom = "histogram") # cdplot(factor(x), y) # qplot(x, fill = y, geom = "density", position = "fill") # coplot(y ~ x | a + b) # qplot(x, y, facets = a ~ b) # Many of the geoms are parameterised differently than base graphics. For # example, hist() is parameterised in terms of the number of bins, while # geom_histogram() is parameterised in terms of the width of each bin. hist(x, bins = 10) qplot(x, geom = "histogram", binwidth = .1) # qplot() often requires data in a slightly different format to the base # graphics functions. For example, the bar geom works with untabulated data, # not tabulated data like barplot(); the tile and contour geoms expect data # in a data frame, not a matrix like image() and contour(). barplot(table(x)) qplot(x, geom = "bar") barplot(x) qplot(seq_along(x), x, geom = "bar", stat = "identity") # image(x) # qplot(X1, X2, data = melt(x), geom = "tile", fill = value) # contour(x) # qplot(X1, X2, data = melt(x), geom = "contour", fill = value) # Generally, the base graphics functions work with individual vectors, not # data frames like ggplot2. qplot() will try to construct a data frame if one # is not specified, but it is not always possible. If you get strange errors, # you may need to create the data frame yourself. df <- data.frame(x = x, y = y) with(df, plot(x, y)) qplot(x, y, data = df) # By default, qplot() maps values to aesthetics with a scale. To override # this behaviour and set aesthetics, overriding the defaults, you need to use I(). plot(x, y, col = "red", cex = 1) qplot(x, y, colour = I("red"), size = I(1)) # Low-level drawing # The low-level drawing functions which add to an existing plot are equivalent # to adding a new layer in ggplot2. # Base function ggplot2 layer # curve() geom_curve() # hline() geom_hline() # lines() geom_line() # points() geom_point() # polygon() geom_polygon() # rect() geom_rect() # rug() geom_rug() # segments() geom_segment() # text() geom_text() # vline() geom_vline() # abline(lm(y ~ x)) geom_smooth(method = "lm") # lines(density(x)) geom_density() # lines(loess(x, y)) geom_smooth() plot(x, y) lines(x, y) qplot(x, y) + geom_line() # Or, building up piece-meal qplot(x, y) last_plot() + geom_line() # Legends, axes and grid lines # In ggplot2, the appearance of legends and axes is controlled by the scales. # Axes are produced by the x and y scales, while all other scales produce legends. # See ?theme for help changing the appearance of axes and legends. # The appearance of grid lines is controlled by the grid.major and grid.minor # theme options, and their position by the breaks of the x and y scales. # Colour palettes # Instead of global colour palettes, ggplot2 has scales for individual plots. Much # of the time you can rely on the default colour scale (which has somewhat better # perceptual properties), but if you want to reuse an existing colour palette, you # can use scale_colour_manual(). You will need to make sure that the colour # is a factor for this to work. palette(rainbow(5)) plot(1:5, 1:5, col = 1:5, pch = 19, cex = 4) qplot(1:5, 1:5, col = factor(1:5), size = I(4)) last_plot() + scale_colour_manual(values = rainbow(5)) # In ggplot2, you can also use palettes with continuous values, # with intermediate values being linearly interpolated. qplot(0:100, 0:100, col = 0:100, size = I(4)) + scale_colour_gradientn(colours = rainbow(7)) last_plot() + scale_colour_gradientn(colours = terrain.colors(7)) # Graphical parameters # The majority of par settings have some analogue within the theme system, or # in the defaults of the geoms and scales. The appearance plot border drawn # by box() can be controlled in a similar way by the panel.background and # plot.background theme elements. Instead of using title(), the plot title is # set with the title option. See ?theme for more theme elements. last_plot() + labs(title = "My Plot Title") } } ggplot2/man/geom_map.Rd0000644000175100001440000000732112613770162014504 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-map.r \name{geom_map} \alias{geom_map} \title{Polygons from a reference map.} \usage{ geom_map(mapping = NULL, data = NULL, map, stat = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{map}{Data frame that contains the map coordinates. This will typically be created using \code{\link{fortify}} on a spatial object. It must contain columns \code{x} or \code{long}, \code{y} or \code{lat}, and \code{region} or \code{id}.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ Does not affect position scales. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "map")} } \examples{ # When using geom_polygon, you will typically need two data frames: # one contains the coordinates of each polygon (positions), and the # other the values associated with each polygon (values). An id # variable links the two together ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")) values <- data.frame( id = ids, value = c(3, 3.1, 3.1, 3.2, 3.15, 3.5) ) positions <- data.frame( id = rep(ids, each = 4), x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3, 0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3), y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5, 2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2) ) ggplot(values) + geom_map(aes(map_id = id), map = positions) + expand_limits(positions) ggplot(values, aes(fill = value)) + geom_map(aes(map_id = id), map = positions) + expand_limits(positions) ggplot(values, aes(fill = value)) + geom_map(aes(map_id = id), map = positions) + expand_limits(positions) + ylim(0, 3) # Better example crimes <- data.frame(state = tolower(rownames(USArrests)), USArrests) crimesm <- reshape2::melt(crimes, id = 1) if (require(maps)) { states_map <- map_data("state") ggplot(crimes, aes(map_id = state)) + geom_map(aes(fill = Murder), map = states_map) + expand_limits(x = states_map$long, y = states_map$lat) last_plot() + coord_map() ggplot(crimesm, aes(map_id = state)) + geom_map(aes(fill = value), map = states_map) + expand_limits(x = states_map$long, y = states_map$lat) + facet_wrap( ~ variable) } } ggplot2/man/stat_summary_2d.Rd0000644000175100001440000000632412613770162016037 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-summary-2d.r, R/stat-summary-hex.r \name{stat_summary_2d} \alias{stat_summary2d} \alias{stat_summary_2d} \alias{stat_summary_hex} \title{Bin and summarise in 2d (rectangle & hexagons)} \usage{ stat_summary_2d(mapping = NULL, data = NULL, geom = "tile", position = "identity", bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_summary_hex(mapping = NULL, data = NULL, geom = "hex", position = "identity", bins = 30, binwidth = NULL, drop = TRUE, fun = "mean", fun.args = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{The aesthetic mapping, usually constructed with \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set at the layer level if you are overriding the plot defaults.} \item{data}{A layer specific dataset - only needed if you want to override the plot defaults.} \item{geom}{The geometric object to use display the data} \item{position}{The position adjustment to use for overlapping points on this layer} \item{bins}{numeric vector giving number of bins in both vertical and horizontal directions. Set to 30 by default.} \item{binwidth}{Numeric vector giving bin width in both vertical and horizontal directions. Overrides \code{bins} if both set.} \item{drop}{drop if the output of \code{fun} is \code{NA}.} \item{fun}{function for summary.} \item{fun.args}{A list of extra arguments to pass to \code{fun}} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. This can include aesthetics whose values you want to set, not map. See \code{\link{layer}} for more details.} } \description{ \code{stat_summary_2d} is a 2d variation of \code{\link{stat_summary}}. \code{stat_summary_hex} is a hexagonal variation of \code{\link{stat_summary_2d}}. The data are divided into bins defined by \code{x} and \code{y}, and then the values of \code{z} in each cell is are summarised with \code{fun}. } \section{Aesthetics}{ \itemize{ \item \code{x}: horizontal position \item \code{y}: vertical position \item \code{z}: value passed to the summary function } } \examples{ d <- ggplot(diamonds, aes(carat, depth, z = price)) d + stat_summary_2d() # Specifying function d + stat_summary_2d(fun = function(x) sum(x^2)) d + stat_summary_2d(fun = var) d + stat_summary_2d(fun = "quantile", fun.args = list(probs = 0.1)) if (requireNamespace("hexbin")) { d + stat_summary_hex() } } \seealso{ \code{\link{stat_summary_hex}} for hexagonal summarization. \code{\link{stat_bin2d}} for the binning options. } ggplot2/man/stat_qq.Rd0000644000175100001440000000524712633014264014375 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/stat-qq.r \name{stat_qq} \alias{geom_qq} \alias{stat_qq} \title{Calculation for quantile-quantile plot.} \usage{ stat_qq(mapping = NULL, data = NULL, geom = "point", position = "identity", distribution = stats::qnorm, dparams = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) geom_qq(mapping = NULL, data = NULL, geom = "point", position = "identity", distribution = stats::qnorm, dparams = list(), na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{The aesthetic mapping, usually constructed with \code{\link{aes}} or \code{\link{aes_string}}. Only needs to be set at the layer level if you are overriding the plot defaults.} \item{data}{A layer specific dataset - only needed if you want to override the plot defaults.} \item{geom}{The geometric object to use display the data} \item{position}{The position adjustment to use for overlapping points on this layer} \item{distribution}{Distribution function to use, if x not specified} \item{dparams}{Additional parameters passed on to \code{distribution} function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. This can include aesthetics whose values you want to set, not map. See \code{\link{layer}} for more details.} } \description{ Calculation for quantile-quantile plot. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("stat", "qq")} } \section{Computed variables}{ \describe{ \item{sample}{sample quantiles} \item{theoretical}{theoretical quantiles} } } \examples{ \donttest{ df <- data.frame(y = rt(200, df = 5)) p <- ggplot(df, aes(sample = y)) p + stat_qq() p + geom_point(stat = "qq") # Use fitdistr from MASS to estimate distribution params params <- as.list(MASS::fitdistr(df$y, "t")$estimate) ggplot(df, aes(sample = y)) + stat_qq(distribution = qt, dparams = params["df"]) # Using to explore the distribution of a variable ggplot(mtcars) + stat_qq(aes(sample = mpg)) ggplot(mtcars) + stat_qq(aes(sample = mpg, colour = factor(cyl))) } } ggplot2/man/coord_cartesian.Rd0000644000175100001440000000421512611730203016044 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/coord-cartesian-.r \name{coord_cartesian} \alias{coord_cartesian} \title{Cartesian coordinates.} \usage{ coord_cartesian(xlim = NULL, ylim = NULL, expand = TRUE) } \arguments{ \item{xlim, ylim}{Limits for the x and y axes.} \item{expand}{If \code{TRUE}, the default, adds a small expansion factor to the limits to ensure that data and axes don't overlap. If \code{FALSE}, limits are taken exactly from the data or \code{xlim}/\code{ylim}.} } \description{ The Cartesian coordinate system is the most familiar, and common, type of coordinate system. Setting limits on the coordinate system will zoom the plot (like you're looking at it with a magnifying glass), and will not change the underlying data like setting limits on a scale will. } \examples{ # There are two ways of zooming the plot display: with scales or # with coordinate systems. They work in two rather different ways. p <- ggplot(mtcars, aes(disp, wt)) + geom_point() + geom_smooth() p # Setting the limits on a scale converts all values outside the range to NA. p + scale_x_continuous(limits = c(325, 500)) # Setting the limits on the coordinate system performs a visual zoom. # The data is unchanged, and we just view a small portion of the original # plot. Note how smooth continues past the points visible on this plot. p + coord_cartesian(xlim = c(325, 500)) # By default, the same expansion factor is applied as when setting scale # limits. You can set the limits precisely by setting expand = FALSE p + coord_cartesian(xlim = c(325, 500), expand = FALSE) # Simiarly, we can use expand = FALSE to turn off expansion with the # default limits p + coord_cartesian(expand = FALSE) # You can see the same thing with this 2d histogram d <- ggplot(diamonds, aes(carat, price)) + stat_bin2d(bins = 25, colour = "white") d # When zooming the scale, the we get 25 new bins that are the same # size on the plot, but represent smaller regions of the data space d + scale_x_continuous(limits = c(0, 1)) # When zooming the coordinate system, we see a subset of original 50 bins, # displayed bigger d + coord_cartesian(xlim = c(0, 1)) } ggplot2/man/geom_point.Rd0000644000175100001440000001241212633013516015050 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-point.r \name{geom_point} \alias{geom_point} \title{Points, as for a scatterplot} \usage{ geom_point(mapping = NULL, data = NULL, stat = "identity", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{stat}{The statistical transformation to use on the data for this layer, as a string.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} } \description{ The point geom is used to create scatterplots. } \details{ The scatterplot is useful for displaying the relationship between two continuous variables, although it can also be used with one continuous and one categorical variable, or two categorical variables. See \code{\link{geom_jitter}} for possibilities. The \emph{bubblechart} is a scatterplot with a third variable mapped to the size of points. There are no special names for scatterplots where another variable is mapped to point shape or colour, however. The biggest potential problem with a scatterplot is overplotting: whenever you have more than a few points, points may be plotted on top of one another. This can severely distort the visual appearance of the plot. There is no one solution to this problem, but there are some techniques that can help. You can add additional information with \code{\link{geom_smooth}}, \code{\link{geom_quantile}} or \code{\link{geom_density_2d}}. If you have few unique x values, \code{\link{geom_boxplot}} may also be useful. Alternatively, you can summarise the number of points at each location and display that in some way, using \code{\link{stat_sum}}. Another technique is to use transparent points, e.g. \code{geom_point(alpha = 0.05)}. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "point")} } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) p + geom_point() # Add aesthetic mappings p + geom_point(aes(colour = factor(cyl))) p + geom_point(aes(shape = factor(cyl))) p + geom_point(aes(size = qsec)) # Change scales p + geom_point(aes(colour = cyl)) + scale_colour_gradient(low = "blue") p + geom_point(aes(shape = factor(cyl))) + scale_shape(solid = FALSE) # Set aesthetics to fixed value ggplot(mtcars, aes(wt, mpg)) + geom_point(colour = "red", size = 3) \donttest{ # Varying alpha is useful for large datasets d <- ggplot(diamonds, aes(carat, price)) d + geom_point(alpha = 1/10) d + geom_point(alpha = 1/20) d + geom_point(alpha = 1/100) } # For shapes that have a border (like 21), you can colour the inside and # outside separately. Use the stroke aesthetic to modify the width of the # border ggplot(mtcars, aes(wt, mpg)) + geom_point(shape = 21, colour = "black", fill = "white", size = 5, stroke = 5) \donttest{ # You can create interesting shapes by layering multiple points of # different sizes p <- ggplot(mtcars, aes(mpg, wt, shape = factor(cyl))) p + geom_point(aes(colour = factor(cyl)), size = 4) + geom_point(colour = "grey90", size = 1.5) p + geom_point(colour = "black", size = 4.5) + geom_point(colour = "pink", size = 4) + geom_point(aes(shape = factor(cyl))) # These extra layers don't usually appear in the legend, but we can # force their inclusion p + geom_point(colour = "black", size = 4.5, show.legend = TRUE) + geom_point(colour = "pink", size = 4, show.legend = TRUE) + geom_point(aes(shape = factor(cyl))) # geom_point warns when missing values have been dropped from the data set # and not plotted, you can turn this off by setting na.rm = TRUE mtcars2 <- transform(mtcars, mpg = ifelse(runif(32) < 0.2, NA, mpg)) ggplot(mtcars2, aes(wt, mpg)) + geom_point() ggplot(mtcars2, aes(wt, mpg)) + geom_point(na.rm = TRUE) } } \seealso{ \code{\link{scale_size}} to see scale area of points, instead of radius, \code{\link{geom_jitter}} to jitter points to reduce (mild) overplotting } ggplot2/man/presidential.Rd0000644000175100001440000000066712611730203015377 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{presidential} \alias{presidential} \title{Terms of 10 presidents from Eisenhower to Bush W.} \format{A data frame with 10 rows and 4 variables} \usage{ presidential } \description{ The names of each president, the start and end date of their term, and their party of 10 US presidents from Eisenhower to Bush W. } \keyword{datasets} ggplot2/man/print.ggproto.Rd0000644000175100001440000000137312611730203015523 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ggproto.r \name{print.ggproto} \alias{print.ggproto} \title{Print a ggproto object} \usage{ \method{print}{ggproto}(x, ..., flat = TRUE) } \arguments{ \item{x}{A ggproto object to print.} \item{...}{If the ggproto object has a \code{print} method, further arguments will be passed to it. Otherwise, these arguments are unused.} \item{flat}{If \code{TRUE} (the default), show a flattened list of all local and inherited members. If \code{FALSE}, show the inheritance hierarchy.} } \description{ If a ggproto object has a \code{$print} method, this will call that method. Otherwise, it will print out the members of the object, and optionally, the members of the inherited objects. } ggplot2/man/labs.Rd0000644000175100001440000000204412611730203013624 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/labels.r \name{labs} \alias{ggtitle} \alias{labs} \alias{xlab} \alias{ylab} \title{Change axis labels and legend titles} \usage{ labs(...) xlab(label) ylab(label) ggtitle(label) } \arguments{ \item{...}{a list of new names in the form aesthetic = "new name"} \item{label}{The text for the axis or plot title.} } \description{ Change axis labels and legend titles } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() p + labs(title = "New plot title") p + labs(x = "New x label") p + xlab("New x label") p + ylab("New y label") p + ggtitle("New plot title") # This should work independently of other functions that modify the # the scale names p + ylab("New y label") + ylim(2, 4) p + ylim(2, 4) + ylab("New y label") # The labs function also modifies legend labels p <- ggplot(mtcars, aes(mpg, wt, colour = cyl)) + geom_point() p + labs(colour = "Cylinders") # Can also pass in a list, if that is more convenient p + labs(list(title = "Title", x = "X", y = "Y")) } ggplot2/man/is.rel.Rd0000644000175100001440000000042712611730203014102 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{is.rel} \alias{is.rel} \title{Reports whether x is a rel object} \usage{ is.rel(x) } \arguments{ \item{x}{An object to test} } \description{ Reports whether x is a rel object } ggplot2/man/msleep.Rd0000644000175100001440000000220212611730203014164 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/data.R \docType{data} \name{msleep} \alias{msleep} \title{An updated and expanded version of the mammals sleep dataset.} \format{A data frame with 83 rows and 11 variables \itemize{ \item name. common name \item genus. \item vore. carnivore, omnivore or herbivore? \item order. \item conservation. the conservation status of the animal \item sleep\_total. total amount of sleep, in hours \item sleep\_rem. rem sleep, in hours \item sleep\_cycle. length of sleep cycle, in hours \item awake. amount of time spent awake, in hours \item brainwt. brain weight in kilograms \item bodywt. body weight in kilograms }} \usage{ msleep } \description{ This is an updated and expanded version of the mammals sleep dataset. Updated sleep times and weights were taken from V. M. Savage and G. B. West. A quantitative, theoretical framework for understanding mammalian sleep. Proceedings of the National Academy of Sciences, 104 (3):1051-1056, 2007. } \details{ Additional variables order, conservation status and vore were added from wikipedia. } \keyword{datasets} ggplot2/man/scale_grey.Rd0000644000175100001440000000261312611730203015022 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/scale-grey.r, R/zxx.r \name{scale_colour_grey} \alias{scale_color_grey} \alias{scale_colour_grey} \alias{scale_fill_grey} \title{Sequential grey colour scale.} \usage{ scale_colour_grey(..., start = 0.2, end = 0.8, na.value = "red") scale_fill_grey(..., start = 0.2, end = 0.8, na.value = "red") } \arguments{ \item{...}{Other arguments passed on to \code{\link{discrete_scale}} to control name, limits, breaks, labels and so forth.} \item{start}{gray value at low end of palette} \item{end}{gray value at high end of palette} \item{na.value}{Colour to use for missing values} } \description{ Based on \code{\link{gray.colors}} } \examples{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = factor(cyl))) p + scale_colour_grey() p + scale_colour_grey(end = 0) # You may want to turn off the pale grey background with this scale p + scale_colour_grey() + theme_bw() # Colour of missing values is controlled with na.value: miss <- factor(sample(c(NA, 1:5), nrow(mtcars), replace = TRUE)) ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) + scale_colour_grey() ggplot(mtcars, aes(mpg, wt)) + geom_point(aes(colour = miss)) + scale_colour_grey(na.value = "green") } \seealso{ Other colour scales: \code{\link{scale_colour_brewer}}, \code{\link{scale_colour_gradient}}, \code{\link{scale_colour_hue}} } ggplot2/man/facet_grid.Rd0000644000175100001440000001761012611730203014777 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/facet-grid-.r \name{facet_grid} \alias{facet_grid} \title{Lay out panels in a grid.} \usage{ facet_grid(facets, margins = FALSE, scales = "fixed", space = "fixed", shrink = TRUE, labeller = "label_value", as.table = TRUE, switch = NULL, drop = TRUE) } \arguments{ \item{facets}{a formula with the rows (of the tabular display) on the LHS and the columns (of the tabular display) on the RHS; the dot in the formula is used to indicate there should be no faceting on this dimension (either row or column). The formula can also be provided as a string instead of a classical formula object} \item{margins}{either a logical value or a character vector. Margins are additional facets which contain all the data for each of the possible values of the faceting variables. If \code{FALSE}, no additional facets are included (the default). If \code{TRUE}, margins are included for all faceting variables. If specified as a character vector, it is the names of variables for which margins are to be created.} \item{scales}{Are scales shared across all facets (the default, \code{"fixed"}), or do they vary across rows (\code{"free_x"}), columns (\code{"free_y"}), or both rows and columns (\code{"free"})} \item{space}{If \code{"fixed"}, the default, all panels have the same size. If \code{"free_y"} their height will be proportional to the length of the y scale; if \code{"free_x"} their width will be proportional to the length of the x scale; or if \code{"free"} both height and width will vary. This setting has no effect unless the appropriate scales also vary.} \item{shrink}{If \code{TRUE}, will shrink scales to fit output of statistics, not raw data. If \code{FALSE}, will be range of raw data before statistical summary.} \item{labeller}{A function that takes one data frame of labels and returns a list or data frame of character vectors. Each input column corresponds to one factor. Thus there will be more than one with formulae of the type \code{~cyl + am}. Each output column gets displayed as one separate line in the strip label. This function should inherit from the "labeller" S3 class for compatibility with \code{\link{labeller}()}. See \code{\link{label_value}} for more details and pointers to other options.} \item{as.table}{If \code{TRUE}, the default, the facets are laid out like a table with highest values at the bottom-right. If \code{FALSE}, the facets are laid out like a plot with the highest value at the top-right.} \item{switch}{By default, the labels are displayed on the top and right of the plot. If \code{"x"}, the top labels will be displayed to the bottom. If \code{"y"}, the right-hand side labels will be displayed to the left. Can also be set to \code{"both"}.} \item{drop}{If \code{TRUE}, the default, all factor levels not used in the data will automatically be dropped. If \code{FALSE}, all factor levels will be shown, regardless of whether or not they appear in the data.} } \description{ Lay out panels in a grid. } \examples{ \donttest{ p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() # With one variable p + facet_grid(. ~ cyl) p + facet_grid(cyl ~ .) # With two variables p + facet_grid(vs ~ am) p + facet_grid(am ~ vs) p + facet_grid(vs ~ am, margins=TRUE) # To change plot order of facet grid, # change the order of variable levels with factor() set.seed(6809) diamonds <- diamonds[sample(nrow(diamonds), 1000), ] diamonds$cut <- factor(diamonds$cut, levels = c("Ideal", "Very Good", "Fair", "Good", "Premium")) # Repeat first example with new order p <- ggplot(diamonds, aes(carat, ..density..)) + geom_histogram(binwidth = 1) p + facet_grid(. ~ cut) g <- ggplot(mtcars, aes(mpg, wt)) + geom_point() g + facet_grid(. ~ vs + am) g + facet_grid(vs + am ~ .) # You can also use strings, which makes it a little easier # when writing functions that generate faceting specifications p + facet_grid("cut ~ .") # see also ?plotmatrix for the scatterplot matrix # If there isn't any data for a given combination, that panel # will be empty g + facet_grid(cyl ~ vs) # If you combine a facetted dataset with a dataset that lacks those # facetting variables, the data will be repeated across the missing # combinations: g + facet_grid(vs ~ cyl) df <- data.frame(mpg = 22, wt = 3) g + facet_grid(vs ~ cyl) + geom_point(data = df, colour = "red", size = 2) df2 <- data.frame(mpg = c(19, 22), wt = c(2,4), vs = c(0, 1)) g + facet_grid(vs ~ cyl) + geom_point(data = df2, colour = "red", size = 2) df3 <- data.frame(mpg = c(19, 22), wt = c(2,4), vs = c(1, 1)) g + facet_grid(vs ~ cyl) + geom_point(data = df3, colour = "red", size = 2) # You can also choose whether the scales should be constant # across all panels (the default), or whether they should be allowed # to vary mt <- ggplot(mtcars, aes(mpg, wt, colour = factor(cyl))) + geom_point() mt + facet_grid(. ~ cyl, scales = "free") # If scales and space are free, then the mapping between position # and values in the data will be the same across all panels mt + facet_grid(. ~ cyl, scales = "free", space = "free") mt + facet_grid(vs ~ am, scales = "free") mt + facet_grid(vs ~ am, scales = "free_x") mt + facet_grid(vs ~ am, scales = "free_y") mt + facet_grid(vs ~ am, scales = "free", space = "free") mt + facet_grid(vs ~ am, scales = "free", space = "free_x") mt + facet_grid(vs ~ am, scales = "free", space = "free_y") # You may need to set your own breaks for consistent display: mt + facet_grid(. ~ cyl, scales = "free_x", space = "free") + scale_x_continuous(breaks = seq(10, 36, by = 2)) # Adding scale limits override free scales: last_plot() + xlim(10, 15) # Free scales are particularly useful for categorical variables ggplot(mpg, aes(cty, model)) + geom_point() + facet_grid(manufacturer ~ ., scales = "free", space = "free") # particularly when you reorder factor levels mpg$model <- reorder(mpg$model, mpg$cty) manufacturer <- reorder(mpg$manufacturer, mpg$cty) last_plot() \%+\% mpg + theme(strip.text.y = element_text()) # Use as.table to to control direction of horizontal facets, TRUE by default h <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() h + facet_grid(cyl ~ vs) h + facet_grid(cyl ~ vs, as.table = FALSE) # Use labeller to control facet labels, label_value is default h + facet_grid(cyl ~ vs, labeller = label_both) # Using label_parsed, see ?plotmath for more options mtcars$cyl2 <- factor(mtcars$cyl, labels = c("alpha", "beta", "sqrt(x, y)")) k <- ggplot(mtcars, aes(wt, mpg)) + geom_point() k + facet_grid(. ~ cyl2) k + facet_grid(. ~ cyl2, labeller = label_parsed) # For label_bquote the label value is x. p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() p + facet_grid(. ~ vs, labeller = label_bquote(alpha ^ .(x))) p + facet_grid(. ~ vs, labeller = label_bquote(.(x) ^ .(x))) # Margins can be specified by logically (all yes or all no) or by specific # variables as (character) variable names mg <- ggplot(mtcars, aes(x = mpg, y = wt)) + geom_point() mg + facet_grid(vs + am ~ gear) mg + facet_grid(vs + am ~ gear, margins = TRUE) mg + facet_grid(vs + am ~ gear, margins = "am") # when margins are made over "vs", since the facets for "am" vary # within the values of "vs", the marginal facet for "vs" is also # a margin over "am". mg + facet_grid(vs + am ~ gear, margins = "vs") mg + facet_grid(vs + am ~ gear, margins = "gear") mg + facet_grid(vs + am ~ gear, margins = c("gear", "am")) # The facet strips can be displayed near the axes with switch data <- transform(mtcars, am = factor(am, levels = 0:1, c("Automatic", "Manual")), gear = factor(gear, levels = 3:5, labels = c("Three", "Four", "Five")) ) p <- ggplot(data, aes(mpg, disp)) + geom_point() p + facet_grid(am ~ gear, switch = "both") + theme_light() # It may be more aesthetic to use a theme without boxes around # around the strips. p + facet_grid(am ~ gear + vs, switch = "y") + theme_minimal() p + facet_grid(am ~ ., switch = "y") + theme_gray() \%+replace\% theme(strip.background = element_blank()) } } ggplot2/man/aes_linetype_size_shape.Rd0000644000175100001440000000450612611730203017603 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/aes-linetype-size-shape.r \name{aes_linetype_size_shape} \alias{aes_linetype_size_shape} \alias{linetype} \alias{shape} \alias{size} \title{Differentiation related aesthetics: linetype, size, shape} \description{ This page demonstrates the usage of a sub-group of aesthetics; linetype, size and shape. } \examples{ # Line types should be specified with either an integer, a name, or with a string of # an even number (up to eight) of hexadecimal digits which give the lengths in # consecutive positions in the string. # 0 = blank, 1 = solid, 2 = dashed, 3 = dotted, 4 = dotdash, 5 = longdash, 6 = twodash # Data df <- data.frame(x = 1:10 , y = 1:10) f <- ggplot(df, aes(x, y)) f + geom_line(linetype = 2) f + geom_line(linetype = "dotdash") # An example with hex strings, the string "33" specifies three units on followed # by three off and "3313" specifies three units on followed by three off followed # by one on and finally three off. f + geom_line(linetype = "3313") # Mapping line type from a variable ggplot(economics_long, aes(date, value01)) + geom_line(aes(linetype = variable)) # Size examples # Should be specified with a numerical value (in millimetres), # or from a variable source p <- ggplot(mtcars, aes(wt, mpg)) p + geom_point(size = 4) p + geom_point(aes(size = qsec)) p + geom_point(size = 2.5) + geom_hline(yintercept = 25, size = 3.5) # Shape examples # Shape takes four types of values: an integer in [0, 25], # a single character-- which uses that character as the plotting symbol, # a . to draw the smallest rectangle that is visible (i.e., about one pixel) # an NA to draw nothing p + geom_point() p + geom_point(shape = 5) p + geom_point(shape = "k", size = 3) p + geom_point(shape = ".") p + geom_point(shape = NA) # Shape can also be mapped from a variable p + geom_point(aes(shape = factor(cyl))) # A look at all 25 symbols df2 <- data.frame(x = 1:5 , y = 1:25, z = 1:25) s <- ggplot(df2, aes(x, y)) s + geom_point(aes(shape = z), size = 4) + scale_shape_identity() # While all symbols have a foreground colour, symbols 19-25 also take a # background colour (fill) s + geom_point(aes(shape = z), size = 4, colour = "Red") + scale_shape_identity() s + geom_point(aes(shape = z), size = 4, colour = "Red", fill = "Black") + scale_shape_identity() } ggplot2/man/ggplotGrob.Rd0000644000175100001440000000044712611730203015016 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-build.r \name{ggplotGrob} \alias{ggplotGrob} \title{Generate a ggplot2 plot grob.} \usage{ ggplotGrob(x) } \arguments{ \item{x}{ggplot2 object} } \description{ Generate a ggplot2 plot grob. } \keyword{internal} ggplot2/man/ggplot_gtable.Rd0000644000175100001440000000160412611730203015516 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-build.r \name{ggplot_gtable} \alias{ggplot_gtable} \title{Build a plot with all the usual bits and pieces.} \usage{ ggplot_gtable(data) } \arguments{ \item{data}{plot data generated by \code{\link{ggplot_build}}} \item{plot}{plot object} } \value{ a \code{\link{gtable}} object } \description{ This function builds all grobs necessary for displaying the plot, and stores them in a special data structure called a \code{\link{gtable}}. This object is amenable to programmatic manipulation, should you want to (e.g.) make the legend box 2 cm wide, or combine multiple plots into a single display, preserving aspect ratios across the plots. } \seealso{ \code{\link{print.ggplot}} and \code{link{benchplot}} for for functions that contain the complete set of steps for generating a ggplot2 plot. } \keyword{internal} ggplot2/man/geom_abline.Rd0000644000175100001440000001021712613770162015157 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-abline.r, R/geom-hline.r, R/geom-vline.r \name{geom_abline} \alias{geom_abline} \alias{geom_hline} \alias{geom_vline} \title{Lines: horizontal, vertical, and specified by slope and intercept.} \usage{ geom_abline(mapping = NULL, data = NULL, ..., slope, intercept, na.rm = FALSE, show.legend = NA) geom_hline(mapping = NULL, data = NULL, ..., yintercept, na.rm = FALSE, show.legend = NA) geom_vline(mapping = NULL, data = NULL, ..., xintercept, na.rm = FALSE, show.legend = NA) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{xintercept, yintercept, slope, intercept}{Parameters that control the position of the line. If these are set, \code{data}, \code{mapping} and \code{show.legend} are overridden} } \description{ These paired geoms and stats add straight lines to a plot, either horizontal, vertical or specified by slope and intercept. These are useful for annotating plots. } \details{ These geoms act slightly different to other geoms. You can supply the parameters in two ways: either as arguments to the layer function, or via aesthetics. If you use arguments, e.g. \code{geom_abline(intercept = 0, slope = 1)}, then behind the scenes the geom makes a new data frame containing just the data you've supplied. That means that the lines will be the same in all facets; if you want them to vary across facets, construct the data frame yourself and use aesthetics. Unlike most other geoms, these geoms do not inherit aesthetics from the plot default, because they do not understand x and y aesthetics which are commonly set in the plot. They also do not affect the x and y scales. } \section{Aesthetics}{ These geoms are drawn using with \code{\link{geom_line}} so support the same aesthetics: alpha, colour, linetype and size. They also each have aesthetics that control the position of the line: \itemize{ \item \code{geom_vline}: \code{xintercept} \item \code{geom_hline}: \code{yintercept} \item \code{geom_abline}: \code{slope} and \code{intercept} } } \examples{ p <- ggplot(mtcars, aes(wt, mpg)) + geom_point() # Fixed values p + geom_vline(xintercept = 5) p + geom_vline(xintercept = 1:5) p + geom_hline(yintercept = 20) p + geom_abline() # Can't see it - outside the range of the data p + geom_abline(intercept = 20) # Calculate slope and intercept of line of best fit coef(lm(mpg ~ wt, data = mtcars)) p + geom_abline(intercept = 37, slope = -5) # But this is easier to do with geom_smooth: p + geom_smooth(method = "lm", se = FALSE) # To show different lines in different facets, use aesthetics p <- ggplot(mtcars, aes(mpg, wt)) + geom_point() + facet_wrap(~ cyl) mean_wt <- data.frame(cyl = c(4, 6, 8), wt = c(2.28, 3.11, 4.00)) p + geom_hline(aes(yintercept = wt), mean_wt) # You can also control other aesthetics ggplot(mtcars, aes(mpg, wt, colour = wt)) + geom_point() + geom_hline(aes(yintercept = wt, colour = wt), mean_wt) + facet_wrap(~ cyl) } \seealso{ See \code{\link{geom_segment}} for a more general approach to adding straight line segments to a plot. } ggplot2/man/draw_key.Rd0000644000175100001440000000273712620170460014524 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/legend-draw.r \name{draw_key} \alias{draw_key} \alias{draw_key_abline} \alias{draw_key_blank} \alias{draw_key_boxplot} \alias{draw_key_crossbar} \alias{draw_key_dotplot} \alias{draw_key_label} \alias{draw_key_path} \alias{draw_key_point} \alias{draw_key_pointrange} \alias{draw_key_polygon} \alias{draw_key_rect} \alias{draw_key_smooth} \alias{draw_key_text} \alias{draw_key_vline} \alias{draw_key_vpath} \title{Key drawing functions} \usage{ draw_key_point(data, params, size) draw_key_abline(data, params, size) draw_key_rect(data, params, size) draw_key_polygon(data, params, size) draw_key_blank(data, params, size) draw_key_boxplot(data, params, size) draw_key_crossbar(data, params, size) draw_key_path(data, params, size) draw_key_vpath(data, params, size) draw_key_dotplot(data, params, size) draw_key_pointrange(data, params, size) draw_key_smooth(data, params, size) draw_key_text(data, params, size) draw_key_label(data, params, size) draw_key_vline(data, params, size) } \arguments{ \item{data}{A single row data frame containing the scaled aesthetics to display in this key} \item{params}{A list of additional parameters supplied to the geom.} \item{size}{Width and height of key in mm.} } \value{ A grid grob. } \description{ Each Geom has an associated function that draws the key when the geom needs to be displayed in a legend. These are the options built into ggplot2. } \keyword{internal} ggplot2/man/fortify.lm.Rd0000644000175100001440000000452112611730203014776 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-lm.r \name{fortify.lm} \alias{fortify.lm} \title{Supplement the data fitted to a linear model with model fit statistics.} \usage{ \method{fortify}{lm}(model, data = model$model, ...) } \arguments{ \item{model}{linear model} \item{data}{data set, defaults to data used to fit model} \item{...}{not used by this method} } \value{ The original data with extra columns: \item{.hat}{Diagonal of the hat matrix} \item{.sigma}{Estimate of residual standard deviation when corresponding observation is dropped from model} \item{.cooksd}{Cooks distance, \code{\link{cooks.distance}}} \item{.fitted}{Fitted values of model} \item{.resid}{Residuals} \item{.stdresid}{Standardised residuals} } \description{ If you have missing values in your model data, you may need to refit the model with \code{na.action = na.exclude}. } \examples{ mod <- lm(mpg ~ wt, data = mtcars) head(fortify(mod)) head(fortify(mod, mtcars)) plot(mod, which = 1) ggplot(mod, aes(.fitted, .resid)) + geom_point() + geom_hline(yintercept = 0) + geom_smooth(se = FALSE) ggplot(mod, aes(.fitted, .stdresid)) + geom_point() + geom_hline(yintercept = 0) + geom_smooth(se = FALSE) ggplot(fortify(mod, mtcars), aes(.fitted, .stdresid)) + geom_point(aes(colour = factor(cyl))) ggplot(fortify(mod, mtcars), aes(mpg, .stdresid)) + geom_point(aes(colour = factor(cyl))) plot(mod, which = 2) ggplot(mod) + stat_qq(aes(sample = .stdresid)) + geom_abline() plot(mod, which = 3) ggplot(mod, aes(.fitted, sqrt(abs(.stdresid)))) + geom_point() + geom_smooth(se = FALSE) plot(mod, which = 4) ggplot(mod, aes(seq_along(.cooksd), .cooksd)) + geom_bar(stat = "identity") plot(mod, which = 5) ggplot(mod, aes(.hat, .stdresid)) + geom_vline(size = 2, colour = "white", xintercept = 0) + geom_hline(size = 2, colour = "white", yintercept = 0) + geom_point() + geom_smooth(se = FALSE) ggplot(mod, aes(.hat, .stdresid)) + geom_point(aes(size = .cooksd)) + geom_smooth(se = FALSE, size = 0.5) plot(mod, which = 6) ggplot(mod, aes(.hat, .cooksd)) + geom_vline(xintercept = 0, colour = NA) + geom_abline(slope = seq(0, 3, by = 0.5), colour = "white") + geom_smooth(se = FALSE) + geom_point() ggplot(mod, aes(.hat, .cooksd)) + geom_point(aes(size = .cooksd / .hat)) + scale_size_area() } ggplot2/man/limits.Rd0000644000175100001440000000110612611730203014202 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/limits.r \name{limits} \alias{limits} \title{Generate correct scale type for specified limits} \usage{ limits(lims, var) } \arguments{ \item{var}{name of variable} \item{limits}{vector of limits} } \description{ Generate correct scale type for specified limits } \examples{ ggplot2:::limits(c(1, 5), "x") ggplot2:::limits(c(5, 1), "x") ggplot2:::limits(c("A", "b", "c"), "x") ggplot2:::limits(c("A", "b", "c"), "fill") ggplot2:::limits(as.Date(c("2008-01-01", "2009-01-01")), "x") } \keyword{internal} ggplot2/man/geom_density.Rd0000644000175100001440000001033512613770162015405 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/geom-density.r, R/stat-density.r \name{geom_density} \alias{geom_density} \alias{stat_density} \title{Display a smooth density estimate.} \usage{ geom_density(mapping = NULL, data = NULL, stat = "density", position = "identity", na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) stat_density(mapping = NULL, data = NULL, geom = "area", position = "stack", adjust = 1, kernel = "gaussian", trim = FALSE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE, ...) } \arguments{ \item{mapping}{Set of aesthetic mappings created by \code{\link{aes}} or \code{\link{aes_}}. If specified and \code{inherit.aes = TRUE} (the default), is combined with the default mapping at the top level of the plot. You only need to supply \code{mapping} if there isn't a mapping defined for the plot.} \item{data}{A data frame. If specified, overrides the default data frame defined at the top level of the plot.} \item{position}{Position adjustment, either as a string, or the result of a call to a position adjustment function.} \item{na.rm}{If \code{FALSE} (the default), removes missing values with a warning. If \code{TRUE} silently removes missing values.} \item{show.legend}{logical. Should this layer be included in the legends? \code{NA}, the default, includes if any aesthetics are mapped. \code{FALSE} never includes, and \code{TRUE} always includes.} \item{inherit.aes}{If \code{FALSE}, overrides the default aesthetics, rather than combining with them. This is most useful for helper functions that define both data and aesthetics and shouldn't inherit behaviour from the default plot specification, e.g. \code{\link{borders}}.} \item{...}{other arguments passed on to \code{\link{layer}}. There are three types of arguments you can use here: \itemize{ \item Aesthetics: to set an aesthetic to a fixed value, like \code{color = "red"} or \code{size = 3}. \item Other arguments to the layer, for example you override the default \code{stat} associated with the layer. \item Other arguments passed on to the stat. }} \item{geom, stat}{Use to override the default connection between \code{geom_density} and \code{stat_density}.} \item{adjust}{see \code{\link{density}} for details} \item{kernel}{kernel used for density estimation, see \code{\link{density}} for details} \item{trim}{This parameter only matters if you are displaying multiple densities in one plot. If \code{FALSE}, the default, each density is computed on the full range of the data. If \code{TRUE}, each density is computed over the range of that group: this typically means the estimated x values will not line-up, and hence you won't be able to stack density values.} } \description{ A kernel density estimate, useful for display the distribution of variables with underlying smoothness. } \section{Aesthetics}{ \Sexpr[results=rd,stage=build]{ggplot2:::rd_aesthetics("geom", "density")} } \section{Computed variables}{ \describe{ \item{density}{density estimate} \item{count}{density * number of points - useful for stacked density plots} \item{scaled}{density estimate, scaled to maximum of 1} } } \examples{ ggplot(diamonds, aes(carat)) + geom_density() ggplot(diamonds, aes(carat)) + geom_density(adjust = 1/5) ggplot(diamonds, aes(carat)) + geom_density(adjust = 5) ggplot(diamonds, aes(depth, colour = cut)) + geom_density() + xlim(55, 70) ggplot(diamonds, aes(depth, fill = cut, colour = cut)) + geom_density(alpha = 0.1) + xlim(55, 70) \donttest{ # Stacked density plots: if you want to create a stacked density plot, you # probably want to 'count' (density * n) variable instead of the default # density # Loses marginal densities ggplot(diamonds, aes(carat, fill = cut)) + geom_density(position = "stack") # Preserves marginal densities ggplot(diamonds, aes(carat, ..count.., fill = cut)) + geom_density(position = "stack") # You can use position="fill" to produce a conditional density estimate ggplot(diamonds, aes(carat, ..count.., fill = cut)) + geom_density(position = "fill") } } \seealso{ See \code{\link{geom_histogram}}, \code{\link{geom_freqpoly}} for other methods of displaying continuous distribution. See \code{\link{geom_violin}} for a compact density display. } ggplot2/man/fortify.map.Rd0000644000175100001440000000150112611730203015136 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/fortify-map.r \name{fortify.map} \alias{fortify.map} \title{Fortify method for map objects.} \usage{ \method{fortify}{map}(model, data, ...) } \arguments{ \item{model}{map object} \item{data}{not used by this method} \item{...}{not used by this method} } \description{ This function turns a map into a data frame that can more easily be plotted with ggplot2. } \examples{ if (require("maps")) { ca <- map("county", "ca", plot = FALSE, fill = TRUE) head(fortify(ca)) ggplot(ca, aes(long, lat)) + geom_polygon(aes(group = group)) tx <- map("county", "texas", plot = FALSE, fill = TRUE) head(fortify(tx)) ggplot(tx, aes(long, lat)) + geom_polygon(aes(group = group), colour = "white") } } \seealso{ \code{\link{map_data}} and \code{\link{borders}} } ggplot2/man/ggplot.Rd0000644000175100001440000000712212611730203014201 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot.r \name{ggplot} \alias{ggplot} \alias{ggplot.data.frame} \alias{ggplot.default} \title{Create a new ggplot plot.} \usage{ ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame()) } \arguments{ \item{data}{Default dataset to use for plot. If not already a data.frame, will be converted to one by \code{\link{fortify}}. If not specified, must be suppled in each layer added to the plot.} \item{mapping}{Default list of aesthetic mappings to use for plot. If not specified, must be suppled in each layer added to the plot.} \item{...}{Other arguments passed on to methods. Not currently used.} \item{environment}{If an variable defined in the aesthetic mapping is not found in the data, ggplot will look for it in this environment. It defaults to using the environment in which \code{ggplot()} is called.} } \description{ \code{ggplot()} initializes a ggplot object. It can be used to declare the input data frame for a graphic and to specify the set of plot aesthetics intended to be common throughout all subsequent layers unless specifically overridden. } \details{ \code{ggplot()} is typically used to construct a plot incrementally, using the + operator to add layers to the existing ggplot object. This is advantageous in that the code is explicit about which layers are added and the order in which they are added. For complex graphics with multiple layers, initialization with \code{ggplot} is recommended. There are three common ways to invoke \code{ggplot}: \itemize{ \item \code{ggplot(df, aes(x, y, ))} \item \code{ggplot(df)} \item \code{ggplot()} } The first method is recommended if all layers use the same data and the same set of aesthetics, although this method can also be used to add a layer using data from another data frame. See the first example below. The second method specifies the default data frame to use for the plot, but no aesthetics are defined up front. This is useful when one data frame is used predominantly as layers are added, but the aesthetics may vary from one layer to another. The third method initializes a skeleton \code{ggplot} object which is fleshed out as layers are added. This method is useful when multiple data frames are used to produce different layers, as is often the case in complex graphics. } \examples{ df <- data.frame(gp = factor(rep(letters[1:3], each = 10)), y = rnorm(30)) # Compute sample mean and standard deviation in each group ds <- plyr::ddply(df, "gp", plyr::summarise, mean = mean(y), sd = sd(y)) # Declare the data frame and common aesthetics. # The summary data frame ds is used to plot # larger red points in a second geom_point() layer. # If the data = argument is not specified, it uses the # declared data frame from ggplot(); ditto for the aesthetics. ggplot(df, aes(x = gp, y = y)) + geom_point() + geom_point(data = ds, aes(y = mean), colour = 'red', size = 3) # Same plot as above, declaring only the data frame in ggplot(). # Note how the x and y aesthetics must now be declared in # each geom_point() layer. ggplot(df) + geom_point(aes(x = gp, y = y)) + geom_point(data = ds, aes(x = gp, y = mean), colour = 'red', size = 3) # Set up a skeleton ggplot object and add layers: ggplot() + geom_point(data = df, aes(x = gp, y = y)) + geom_point(data = ds, aes(x = gp, y = mean), colour = 'red', size = 3) + geom_errorbar(data = ds, aes(x = gp, y = mean, ymin = mean - sd, ymax = mean + sd), colour = 'red', width = 0.4) } ggplot2/man/element_rect.Rd0000644000175100001440000000076412611730203015360 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/theme-elements.r \name{element_rect} \alias{element_rect} \title{Theme element: rectangle.} \usage{ element_rect(fill = NULL, colour = NULL, size = NULL, linetype = NULL, color = NULL) } \arguments{ \item{fill}{fill colour} \item{colour}{border colour} \item{size}{border size} \item{linetype}{border linetype} \item{color}{an alias for \code{colour}} } \description{ Most often used for backgrounds and borders. } ggplot2/man/guide_colourbar.Rd0000644000175100001440000001433312611730203016054 0ustar hornikusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/guide-colorbar.r \name{guide_colourbar} \alias{guide_colorbar} \alias{guide_colourbar} \title{Continuous colour bar guide.} \usage{ guide_colourbar(title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, barwidth = NULL, barheight = NULL, nbin = 20, raster = TRUE, ticks = TRUE, draw.ulim = TRUE, draw.llim = TRUE, direction = NULL, default.unit = "line", reverse = FALSE, order = 0, ...) guide_colorbar(title = waiver(), title.position = NULL, title.theme = NULL, title.hjust = NULL, title.vjust = NULL, label = TRUE, label.position = NULL, label.theme = NULL, label.hjust = NULL, label.vjust = NULL, barwidth = NULL, barheight = NULL, nbin = 20, raster = TRUE, ticks = TRUE, draw.ulim = TRUE, draw.llim = TRUE, direction = NULL, default.unit = "line", reverse = FALSE, order = 0, ...) } \arguments{ \item{title}{A character string or expression indicating a title of guide. If \code{NULL}, the title is not shown. By default (\code{\link{waiver}}), the name of the scale object or the name specified in \code{\link{labs}} is used for the title.} \item{title.position}{A character string indicating the position of a title. One of "top" (default for a vertical guide), "bottom", "left" (default for a horizontal guide), or "right."} \item{title.theme}{A theme object for rendering the title text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.title} in \code{\link{theme}} or theme.} \item{title.hjust}{A number specifying horizontal justification of the title text.} \item{title.vjust}{A number specifying vertical justification of the title text.} \item{label}{logical. If \code{TRUE} then the labels are drawn. If \code{FALSE} then the labels are invisible.} \item{label.position}{A character string indicating the position of a label. One of "top", "bottom" (default for horizontal guide), "left", or "right" (default for vertical guide).} \item{label.theme}{A theme object for rendering the label text. Usually the object of \code{\link{element_text}} is expected. By default, the theme is specified by \code{legend.text} in \code{\link{theme}} or theme.} \item{label.hjust}{A numeric specifying horizontal justification of the label text.} \item{label.vjust}{A numeric specifying vertical justification of the label text.} \item{barwidth}{A numeric or a \code{\link[grid]{unit}} object specifying the width of the colorbar. Default value is \code{legend.key.width} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{barheight}{A numeric or a \code{\link[grid]{unit}} object specifying the height of the colorbar. Default value is \code{legend.key.height} or \code{legend.key.size} in \code{\link{theme}} or theme.} \item{nbin}{A numeric specifying the number of bins for drawing colorbar. A smoother colorbar for a larger value.} \item{raster}{A logical. If \code{TRUE} then the colorbar is rendered as a raster object. If \code{FALSE} then the colorbar is rendered as a set of rectangles. Note that not all graphics devices are capable of rendering raster image.} \item{ticks}{A logical specifying if tick marks on colorbar should be visible.} \item{draw.ulim}{A logical specifying if the upper limit tick marks should be visible.} \item{draw.llim}{A logical specifying if the lower limit tick marks should be visible.} \item{direction}{A character string indicating the direction of the guide. One of "horizontal" or "vertical."} \item{default.unit}{A character string indicating \code{\link[grid]{unit}} for \code{barwidth} and \code{barheight}.} \item{reverse}{logical. If \code{TRUE} the colorbar is reversed. By default, the highest value is on the top and the lowest value is on the bottom} \item{order}{positive integer less that 99 that specifies the order of this guide among multiple guides. This controls the order in which multiple guides are displayed, not the contents of the guide itself. If 0 (default), the order is determined by a secret algorithm.} \item{...}{ignored.} } \value{ A guide object } \description{ Colour bar guide shows continuous color scales mapped onto values. Colour bar is available with \code{scale_fill} and \code{scale_colour}. For more information, see the inspiration for this function: \href{http://www.mathworks.com/help/techdoc/ref/colorbar.html}{Matlab's colorbar function}. } \details{ Guides can be specified in each \code{scale_*} or in \code{\link{guides}}. \code{guide="legend"} in \code{scale_*} is syntactic sugar for \code{guide=guide_legend()} (e.g. \code{scale_color_manual(guide = "legend")}). As for how to specify the guide for each scale in more detail, see \code{\link{guides}}. } \examples{ df <- reshape2::melt(outer(1:4, 1:4), varnames = c("X1", "X2")) p1 <- ggplot(df, aes(X1, X2)) + geom_tile(aes(fill = value)) p2 <- p1 + geom_point(aes(size = value)) # Basic form p1 + scale_fill_continuous(guide = "colorbar") p1 + scale_fill_continuous(guide = guide_colorbar()) p1 + guides(fill = guide_colorbar()) # Control styles # bar size p1 + guides(fill = guide_colorbar(barwidth = 0.5, barheight = 10)) # no label p1 + guides(fill = guide_colorbar(label = FALSE)) # no tick marks p1 + guides(fill = guide_colorbar(ticks = FALSE)) # label position p1 + guides(fill = guide_colorbar(label.position = "left")) # label theme p1 + guides(fill = guide_colorbar(label.theme = element_text(colour = "blue", angle = 0))) # small number of bins p1 + guides(fill = guide_colorbar(nbin = 3)) # large number of bins p1 + guides(fill = guide_colorbar(nbin = 100)) # make top- and bottom-most ticks invisible p1 + scale_fill_continuous(limits = c(0,20), breaks=c(0, 5, 10, 15, 20), guide = guide_colorbar(nbin=100, draw.ulim = FALSE, draw.llim = FALSE)) # guides can be controlled independently p2 + scale_fill_continuous(guide = "colorbar") + scale_size(guide = "legend") p2 + guides(fill = "colorbar", size = "legend") p2 + scale_fill_continuous(guide = guide_colorbar(direction = "horizontal")) + scale_size(guide = guide_legend(direction = "vertical")) } \seealso{ Other guides: \code{\link{guide_legend}}, \code{\link{guides}} }