gridSVG/0000755000176200001440000000000014402464642011565 5ustar liggesusersgridSVG/NAMESPACE0000654000176200001440000001566014402217552013011 0ustar liggesusers importFrom("grDevices", "col2rgb", "dev.cur", "dev.flush", "dev.hold", "dev.set", "devAskNewPage", "pdf", "png") importFrom("graphics", "par") importFrom("utils", "getS3method", "getTxtProgressBar", "head", "localeToCharset", "packageDescription", "setTxtProgressBar", "tail", "txtProgressBar") importFrom("jsonlite", "fromJSON", "toJSON", "base64_enc") import("methods", "grid", "XML") export("svgOpen", "svgClose", "svgStartGroup", "svgEndGroup", "svgRaster", "svgRect", "svgLines", "svgPolygon", "svgPath", "svgText", "svgCircle", "svgScript", "svgAnimate", "svgStartLink", "svgEndLink", "svgStyle", "svgStartElement", "svgEndElement" ) export("animValue", "animUnit", "as.animValue", "as.animUnit") export("grid.hyperlink", "setSVGFonts", "getSVGFonts", "hyperlinkGrob", "grid.animate", "animateGrob", "grid.comment", "commentGrob", "grid.garnish", "garnishGrob", "grid.script", "scriptGrob", "grid.element", "elementGrob", "grid.textNode", "textNodeGrob", "gridToSVG", "grid.export", "gridSVG.newpage", "gridsvg", "dev.off" ) export("getSVGoption", "getSVGoptions", "setSVGoptions") export("gridSVGMappings", "getSVGMappings", "readMappingsJS") export("gridSVGCoords", "readCoordsJS", "viewportCreate", "viewportConvertX", "viewportConvertY", "viewportConvertPos", "viewportConvertWidth", "viewportConvertHeight", "viewportConvertDim") # So other PACKAGES can write translation methods for new grobs export("grobToDev") export("primToDev") export("animate") export("garnish") S3method("grobToDev", "default") S3method("grobToDev", "grob") S3method("grobToDev", "gTree") S3method("grobToDev", "recordedGrob") # S3method("grobToDev", "linked.grob") S3method("grobToDev", "script.grob") # gtable fixes S3method("grobToDev", "gtable") S3method("grobToDev", "gTableChild") S3method("grobToDev", "gTableParent") S3method("primToDev", "grob") S3method("primToDev", "gTree") S3method("primToDev", "clip") S3method("primToDev", "move.to") S3method("primToDev", "line.to") S3method("primToDev", "lines") S3method("primToDev", "polyline") S3method("primToDev", "rastergrob") S3method("primToDev", "rect") S3method("primToDev", "segments") S3method("primToDev", "polygon") S3method("primToDev", "pathgrob") S3method("primToDev", "text") S3method("primToDev", "circle") S3method("primToDev", "points") S3method("primToDev", "xspline") S3method("primToDev", "linked.grob") S3method("primToDev", "animated.grob") S3method("primToDev", "comment.grob") S3method("primToDev", "garnished.grob") S3method("primToDev", "element.grob") S3method("primToDev", "textnode.grob") S3method("primToDev", "clipPath") S3method("primToDev", "mask") S3method("primToDev", "patternFilled.grob") S3method("primToDev", "gradientFilled.grob") S3method("primToDev", "pathClipped.grob") S3method("primToDev", "masked.grob") S3method("primToDev", "filtered.grob") export("listSVGDefinitions") S3method("labelsUsed", "patternFillDef") S3method("labelsUsed", "patternFillRefDef") S3method("labelsUsed", "filterDef") S3method("labelsUsed", "gradientDef") S3method("labelsUsed", "maskDef") S3method("labelsUsed", "clipPathDef") S3method("labelsUsed", "grob") S3method("labelsUsed", "gTree") # Context popping export("popContext") S3method("primToDev", "popContext") # Clipping export("grid.clipPath", "clipPathGrob", "clipPath", "registerClipPath", "pushClipPath", "popClipPath") # Masking export("grid.mask", "maskGrob", "registerMask", "pushMask", "popMask", "mask") # Gradients export("linearGradient", "radialGradient", "registerGradientFill", "grid.gradientFill", "gradientFillGrob") S3method("print", "gradient") S3method("forceGrob", "gradientFilled.grob") S3method("forceGrob", "animated.grob") S3method("forceGrob", "linked.grob") S3method("forceGrob", "filtered.grob") S3method("forceGrob", "patternFilled.grob") S3method("forceGrob", "garnished.grob") # Patterns export("pattern", "registerPatternFill", "registerPatternFillRef", "grid.patternFill", "patternFillGrob") # Filters export("grid.filter", "filterGrob", "filterEffect", "addFilterEffect", "registerFilter", "fe", "feDistantLight", "fePointLight", "feSpotLight", "feBlend", "feColorMatrix", "feComponentTransfer", "addComponentFunction", "transferFunction", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feFlood", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "addMergeNode", "feMorphology", "feOffset", "feSpecularLighting", "feTile", "feTurbulence") S3method("flatten", "filter") S3method("flatten", "filter.effect") S3method("flatten", "fe.point.light") S3method("flatten", "fe.spot.light") S3method("flatten", "fe.diffuse.lighting") S3method("flatten", "fe.morphology") S3method("flatten", "fe.offset") S3method("flatten", "fe.specular.lighting") S3method("filterSVG", "fe.distant.light") S3method("filterSVG", "fe.point.light") S3method("filterSVG", "fe.spot.light") S3method("filterSVG", "fe.blend") S3method("filterSVG", "fe.color.matrix") S3method("filterSVG", "fe.component.transfer") S3method("filterSVG", "transfer.function") S3method("filterSVG", "fe.composite") S3method("filterSVG", "fe.convolve.matrix") S3method("filterSVG", "fe.diffuse.lighting") S3method("filterSVG", "fe.displacement.map") S3method("filterSVG", "fe.flood") S3method("filterSVG", "fe.gaussian.blur") S3method("filterSVG", "fe.image") S3method("filterSVG", "fe.merge") S3method("filterSVG", "fe.merge.node") S3method("filterSVG", "fe.morphology") S3method("filterSVG", "fe.offset") S3method("filterSVG", "fe.specular.lighting") S3method("filterSVG", "fe.tile") S3method("filterSVG", "fe.turbulence") S3method("link", "grob") S3method("link", "gTree") S3method("linkShow", "grob") S3method("linkShow", "gTree") S3method("animate", "grob") S3method("animate", "gTree") S3method("garnish", "grob") S3method("garnish", "gTree") S3method("as.animUnit", "animUnit") S3method("as.animUnit", "numeric") S3method("as.animUnit", "unit") S3method("as.animUnit", "matrix") S3method("as.animUnit", "list") S3method("as.animValue", "animValue") S3method("as.animValue", "numeric") S3method("as.animValue", "character") S3method("as.animValue", "matrix") S3method("as.animValue", "list") S3method("print", "animValue") S3method("print", "animUnit") S3method("toMML", "numeric") S3method("toMML", "character") S3method("toMML", "name") S3method("toMML", "(") S3method("toMML", "call") gridSVG/.Rinstignore0000654000176200001440000000001112164147374014065 0ustar liggesusersMakefile gridSVG/man/0000755000176200001440000000000012616240500012326 5ustar liggesusersgridSVG/man/grid.element.Rd0000654000176200001440000000472412164147372015215 0ustar liggesusers\name{grid.element} \alias{grid.element} \alias{elementGrob} \alias{grid.textNode} \alias{textNodeGrob} \title{ Create a grid grob representing an SVG element } \description{ Creates a \code{element.grob} object which is a grid \code{\link{gTree}}, representing an SVG element. Useful in conjunction with \code{grid.export}, to produce an SVG document with elements inserted at particular points. The element (and its children) are inserted at the point where the grob is \dQuote{drawn}. Text can be inserted in a similar manner with \code{grid.textNode}. } \usage{ grid.element(el, name = NULL, attrs = NULL, namespace = NULL, namespaceDefinitions = NULL, children = NULL, vp = NULL, childrenvp = NULL, asis = FALSE) elementGrob(el, name = NULL, attrs = NULL, namespace = NULL, namespaceDefinitions = NULL, children = NULL, vp = NULL, childrenvp = NULL, asis = FALSE) grid.textNode(text, name = NULL, vp = NULL) textNodeGrob(text, name = NULL, vp = NULL) } \arguments{ \item{el}{ The name of the SVG element to create, e.g. "rect". } \item{text}{ A single element character vector of text directly into insert into the SVG image. } \item{name}{ A character identifier. } \item{attrs}{ A list, where the names are SVG attribute names, and values are the values given to the SVG attributes. } \item{namespace}{ A character vector specifying the namespace for this new element. } \item{namespaceDefinitions}{ A character vector or a list with each element being a string. These give the URIs identifying the namespaces uniquely. The elements should have names which are used as prefixes. A default namespace has "" as the name. The values here are used only for defining new namespaces and not for determining the namespace to use for this particular element. } \item{children}{ A gList object containing children of this element (if any). } \item{vp}{ A viewport object to draw within. } \item{childrenvp}{ A viewport object to use for the children of the element grob. } \item{asis}{ If \code{TRUE}, SVG id attributes will be generated from the \code{name} with no modification so that we can easily refer to the generated elements. } } \value{ An \code{element.grob} object. For \code{grid.textNode} a \code{textnode.grob} object. } \author{ Simon Potter } \seealso{ \code{\link{grid.export}} } \keyword{ dplot } gridSVG/man/popContext.Rd0000654000176200001440000000177512164147372015006 0ustar liggesusers\name{popContext} \alias{popContext} \title{ Leaving A Modified Viewport Context } \description{ A modified viewport context is where the appearance of grobs is no longer determined solely by the grob itself and the viewport into which they're drawn. This can occur when applying clipping paths and opacity masks, which modify the appearance of anything drawn after they have been applied. This function should be used when attempting to stop the effect of a modified viewport context (e.g. to stop clipping to paths). } \usage{ popContext(n = 1) } \arguments{ \item{n}{ The number of contexts to pop. A warning will be given when \code{n} is greater than the number that has been applied. } } \details{ Popping a context can produce a warning. In this case it is recommended that the context "pushing" and "popping" be revised to have matching pairs of pushes and pops. } \value{ None. } \author{ Simon Potter } \seealso{ \code{\link{grid.clipPath}} and \code{\link{grid.mask}} } gridSVG/man/feComponentTransfer.Rd0000654000176200001440000000636114402220574016612 0ustar liggesusers\name{feComponentTransfer} \alias{feComponentTransfer} \alias{addComponentFunction} \alias{transferFunction} \title{ Perform Colour Component-wise Remapping. } \description{ This filter primitive performs component-wise remapping of data by taking a colour transfer function, and applying that to the set of RGBA colour components. It allows operations like brightness adjustment, contrast adjustment, colour balance or thresholding. The calculations are performed on non-premultiplied colour values. If the input graphics consists of premultiplied colour values, those values are automatically converted into non-premultiplied colour values for this operation. (Note that the undoing and redoing of the premultiplication can be avoided if alpha transfer function is the identity transform and all alpha values on the source graphic are set to 1.) } \usage{ feComponentTransfer(input = NA, transfers = NULL, ...) addComponentFunction(ct, channel = c("R", "G", "B", "A"), func) transferFunction(type = c("identity", "table", "discrete", "linear", "gamma"), tableValues = numeric(), slope = 1, intercept = 0, amplitude = 1, exponent = 1, offset = 0) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{transfers}{ A named list of \code{transfer.function} objects (produced by \code{\link{transferFunction}}). The name for each element of the list should be one of \code{R}, \code{G}, \code{B} or \code{A}. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } \item{ct}{ An \code{fe.component.transfer} object, produced by \code{\link{feComponentTransfer}}. } \item{channel}{ The colour channel that \code{func} will be applied to. } \item{func}{ A \code{transfer.function} object, produced by \code{\link{transferFunction}}. } \item{type}{ Indicates the type of component transfer function. The type of function determines the applicability of the other arguments. } \item{tableValues}{ When \code{type} is \code{"table"}, this is a list of values which define the lookup table. } \item{slope}{ When \code{type} is \code{"linear"}, the slope of the linear function. } \item{intercept}{ When \code{type} is \code{"linear"}, the intercept of the linear function. } \item{amplitude}{ When \code{type} is \code{"gamma"}, the amplitude of the gamma function. } \item{exponent}{ When \code{type} is \code{"gamma"}, the exponent of the gamma function. } \item{offset}{ When \code{type} is \code{"gamma"}, the offset of the gamma function. } } \details{ For more information about this primitive, consult the references to the SVG specification. } \value{ For \code{feComponentTransfer}, an \code{fe.component.transfer} object. For \code{addComponentFunction}, none. For \code{transferFunction}, a \code{transfer.function} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feComponentTransferElement}, \url{https://www.w3.org/TR/SVG/filters.html#feFuncRElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } gridSVG/man/feSpotLight.Rd0000654000176200001440000000512014402220760015045 0ustar liggesusers\name{feSpotLight} \alias{feSpotLight} \title{ Create a Spot Light Source } \description{ This filter primitive defines a spot light source that can be used within a lighting filter primitive: \code{\link{feDiffuseLighting}} or \code{\link{feSpecularLighting}}. } \usage{ feSpotLight(x = unit(0, "npc"), y = unit(0, "npc"), z = unit(0, "npc"), pointsAtX = unit(1, "npc"), pointsAtY = unit(1, "npc"), pointsAtZ = unit(0, "npc"), zdim = "x", default.units = "npc", specularExponent = 1, limitingConeAngle = NA, ...) } \arguments{ \item{x}{ A numeric vector or unit object specifying the x-location of the light source. } \item{y}{ A numeric vector or unit object specifying the y-location of the light source. } \item{z}{ A numeric vector or unit object specifying the z-location of the light source. } \item{pointsAtX}{ A numeric vector or unit object specifying the x-location that the light points at. } \item{pointsAtY}{ A numeric vector or unit object specifying the y-location that the light points at. } \item{pointsAtZ}{ A numeric vector or unit object specifying the z-location that the light points at. } \item{zdim}{ Either \code{"x"} or \code{"y"}. Determines the dimension to which \code{z} and \code{pointsAtZ} will be located relative to. This is necessary because R graphics has no concept of a z-dimension. } \item{default.units}{ A string indicating the default units to use if \code{x}, \code{y}, \code{z}, \code{pointsAtX}, \code{pointsAtY}, \code{pointsAtZ} are only given as numeric vectors. } \item{specularExponent}{ Exponent value controlling the focus for the light source. } \item{limitingConeAngle}{ If \code{NA}, no limiting cone is applied, otherwise a limiting cone which restricts the region where the light is projected. No light is projected outside the cone. \code{limitingConeAngle} represents the angle in degrees between the spot light axis (i.e. the axis between the light source and the point to which it is pointing at) and the spot light cone. } \item{\dots}{ Further arguments to be passed onto \code{fe}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.spot.light} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feSpotLightElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}, \code{\link{feDiffuseLighting}}, \code{\link{feSpecularLighting}}. } gridSVG/man/gridSVG-internal.Rd0000654000176200001440000000074712164147372015760 0ustar liggesusers\name{svg-internal} \alias{svgOpen} \alias{svgClose} \alias{svgStartGroup} \alias{svgEndGroup} \alias{svgRaster} \alias{svgRect} \alias{svgLines} \alias{svgPath} \alias{svgPolygon} \alias{svgText} \alias{svgCircle} \alias{svgScript} \alias{svgAnimate} \alias{svgStartLink} \alias{svgEndLink} \alias{svgStyle} \alias{svgStartElement} \alias{svgEndElement} \title{Internal gridSVG Functions} \description{ Some functions you can call, but I'm not documenting (yet). } \keyword{internal} gridSVG/man/feMerge.Rd0000654000176200001440000000340114402220717014171 0ustar liggesusers\name{feMerge} \alias{feMerge} \alias{feMergeNode} \alias{addMergeNode} \title{ Composite image layers together. } \description{ This filter primitive composites input image layers on top of each other using the "over" operator with "input1" (corresponding to the first child merge node) on the bottom and the last specified input, "inputN" (corresponding to the last child merge node), on top. } \usage{ feMerge(mergeNodes = NULL, ...) addMergeNode(fe, mergeNode, after = NA) feMergeNode(input = NA) } \arguments{ \item{mergeNodes}{ A list of \code{fe.merge.node} objects, produced by \code{\link{feMergeNode}}. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } \item{fe}{ An \code{fe.merge} object, created by \code{\link{feMerge}}. } \item{mergeNode}{ An \code{fe.merge.node} object, created by \code{\link{feMerge}}. } \item{after}{ The position to add \code{mergeNode} to in the list of \code{fe}'s children. When \code{NA}, appends to the end of the list of children. } \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } } \details{ If you wish to add more merge nodes after an \code{fe.merge} object has been created, use \code{\link{addMergeNode}} to add merge nodes to the filter primitive. For more information about the \code{feMerge} primitive, consult the reference to the SVG specification. } \value{ For \code{feMerge}, an \code{fe.merge} object. For \code{addMergeNode}, an \code{fe.merge} object. For \code{feMergeNode}, an \code{fe.merge.node} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feMergeElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } gridSVG/man/feColorMatrix.Rd0000654000176200001440000000337314402220561015402 0ustar liggesusers\name{feColorMatrix} \alias{feColorMatrix} \title{ Apply a matrix transformation on colour values. } \description{ This filter applies a matrix transformation on the RGBA colour and alpha values of every pixel on the input graphics to produce a result with a new set of RGBA colour and alpha values. } \usage{ feColorMatrix(input = NA, type = c("matrix", "saturate", "hueRotate", "luminanceToAlpha"), values = NULL, ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{type}{ Indicates the type of matrix operation. The keyword \code{"matrix"} indicates that a full 5x4 matrix of values will be provided. The other keywords represent convenience shortcuts to allow commonly used color operations to be performed without specifying a complete matrix. } \item{values}{ The contents of \code{values} depend on what \code{type} is: \itemize{ \item \code{matrix} A 5x4 matrix of numeric values. \item \code{saturate} A single element numeric vector whose value is between 0 and 1. \item \code{hueRotate} A single element numeric vector whose value represents degrees. \item \code{luminanceToAlpha} Should be left as \code{NULL} as there are no applicable values. } } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.color.matrix} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feColorMatrixElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } gridSVG/man/setSVGoptions.Rd0000654000176200001440000000225212164147372015421 0ustar liggesusers\name{setSVGoptions} \alias{setSVGoptions} \alias{getSVGoption} \alias{getSVGoptions} \title{ Get and Set Global Options } \description{ Provides access to a predefined set of global options for the \pkg{gridSVG} package. } \usage{ getSVGoption(name) getSVGoptions() setSVGoptions(...) } \arguments{ \item{name}{ The name of one option. } \item{...}{ Named arguments giving a name, value pair for a new option setting. } } \details{ The options currently available are: \itemize{ \item \code{id.sep} which controls the separator used between the grob name and the suffix number when \pkg{gridSVG} generates id values for SVG elements. \item \code{gPath.sep} which controls the separator used between elements of a grid \code{gPath}. \item \code{vpPath.sep} which controls the separator used between elements of a grid \code{vpPath}. } } \value{ \code{getSVGoption()} returns at most one option setting. \code{getSVGoptions()} returns all option settings. \code{setSVGoptions()} returns a list of previous option settings for the options that were changed. } \author{ Paul Murrell } \seealso{ \code{\link{grid.export}} } \keyword{ dplot } gridSVG/man/grid.filter.Rd0000654000176200001440000000431712164147372015047 0ustar liggesusers\name{grid.filter} \alias{grid.filter} \alias{filterGrob} \title{ Associate a filter effect with a grid grob. } \description{ Creates a \code{filtered.grob} object which is a normal grid grob, with a filter effect applied to it Used in conjunction with \code{\link{registerFilter}}, to produce an SVG document containing graphical elements with filter effects. } \usage{ grid.filter(path, filter = NULL, label = NULL, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) filterGrob(x, filter = NULL, label = NULL, group = TRUE) } \arguments{ \item{x}{ A grob to filter. } \item{path}{ A grob path specifying a drawn grob. } \item{filter}{ A \code{filter} object, provided by the \code{\link{filterEffect}} function. Provides the definition of a filter effect that will be applied to \code{x} or \code{path}. } \item{label}{ A label that is associated with a definition of a filter effect. This is the label used to create a filter effect definition with \code{registerFilter}. } \item{group}{ A logical vector that indicates whether the filter effect should be applied to the overall parent group for the relevant SVG element, or to individual SVG elements. } \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \details{ If \code{label} is specified, uses a filter effect that has been supplied to \code{registerFilter}. If \code{filter} is specified it will be used as the filter effect applied to each grob. If both are specified, it will attempt to define the filter effect with the given label, as well as applying the filter effect to the appropriate grobs. } \value{ A \code{filtered.grob} object (for \code{filterGrob}). } \author{ Simon Potter } \seealso{ \code{\link{registerFilter}}, \code{\link{filterEffect}}. } gridSVG/man/gridSVGMappings.Rd0000654000176200001440000000276712164147372015651 0ustar liggesusers\name{Mapping Names to IDs} \alias{gridSVGMappings} \title{ Mapping Viewport, Grob and Reference Names to SVG IDs } \description{ This function is both a getter and a setter function for mapping information imported from a plot unknown to the current R session. } \usage{ gridSVGMappings(newmappings = NULL) } \arguments{ \item{newmappings}{ A named list mapping information, produced by \code{\link{grid.export}}. } } \details{ In order to generate unique names for SVG IDs, gridSVG output will not produce the same names as are visible on the grid display list. This function will store and return mapping information. This is information on how names have been translated from their original grob/viewport names to their SVG IDs. Mapping information is stored as a list with 4 components, viewport mapping information, grob mapping information, reference mapping information and the ID separator used at the time of exporting. Viewport, grob, and reference mapping information is stored as the name of the object, paired with a vector of suffixes associated with these names. When combined with the ID separator, we can construct the SVG IDs that have been applied, given each name. Use \code{\link{getSVGMappings}} to do this. } \value{ If \code{newmappings} is \code{NULL}, then we get back a named list representing name mapping information. If we pass the named list representing mapping information into the function, we get no output. } \author{ Simon Potter } gridSVG/man/listSVGDefinitions.Rd0000654000176200001440000000120512164147372016356 0ustar liggesusers\name{listSVGDefinitions} \alias{listSVGDefinitions} \title{ List All Reference Definitions } \description{ Returns a listing of the labels given to reference definitions. } \usage{ listSVGDefinitions(print = TRUE) } \arguments{ \item{print}{ If \code{TRUE}, prints the listing of reference definitions. } } \details{ When definitions of referenced content are stored in gridSVG via any of the \code{register*} functions (e.g. \code{\link{registerPatternFill}}), we can use this function to show us all of the labels given when content is registered. } \value{ A data frame, returned invisibly. } \author{ Simon Potter } gridSVG/man/readMappingsJS.Rd0000654000176200001440000000203012164147372015473 0ustar liggesusers\name{Import Mappings JS} \alias{readMappingsJS} \title{ Importing JavaScript mapping information. } \description{ This function reads in a JavaScript file and transforms it into JSON text. This text is then transformed into a list that can be used in conjunction with \code{\link{gridSVGMappings}}. } \usage{ readMappingsJS(filename) } \arguments{ \item{filename}{ A character vector that represents a file name. This file should be a JavaScript file containing mapping information produced by \code{\link{grid.export}}. } } \details{ In order to use the \code{\link{fromJSON}} function to parse JSON text, the JavaScript file produced by \code{\link{grid.export}} needs to be transformed. It needs to transform from being an assignment of an object literal to simply the object literal itself. This function performs that task by producing a valid JSON string ready for parsing by \code{\link{fromJSON}}. It then returns the parsed list. } \value{ A list of mapping information. } \author{ Simon Potter } gridSVG/man/primToDev.Rd0000654000176200001440000000212412164147372014541 0ustar liggesusers\name{primToDev} \alias{primToDev} %- Also NEED an '\alias' for EACH other topic documented here. \title{ %% ~~function to do ... ~~ Convert a grob to device calls } \description{ %% ~~ A concise (1-5 lines) description of what the function does. ~~ This function is used to make calls to a device to draw a grob. It is generic so new grob classes can write their own methods. } \usage{ primToDev(x, dev) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ A grob. %% ~~Describe \code{x} here~~ } \item{dev}{ A graphics device. %% ~~Describe \code{dev} here~~ } } \details{ %% ~~ If necessary, more details than the description above ~~ This function is not called directly by the user. It is exposed so that new grob classes can easily write their own methods which call existing methods for standard grobs. } \author{ %% ~~who you are~~ Paul Murrell } %% ~Make other sections like Warning with \section{Warning }{....} ~ % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ dplot } gridSVG/man/coords.Rd0000654000176200001440000000267612164147372014135 0ustar liggesusers\name{Coordinate System Import/Export} \alias{gridSVGCoords} \title{ Importing an external coordinate system } \description{ This function is both a getter and a setter function for coordinate information imported from a plot unknown to the current R session. } \usage{ gridSVGCoords(newcoords = NULL) } \arguments{ \item{newcoords}{ A named list (names are viewport names) of coordinate information, produced by \code{\link{grid.export}}. } } \details{ In order to translate between SVG coordinates and the coordinate system that \code{grid} understands, we first need to import the coordinate information exported from \code{\link{grid.export}}. We can then take the JSON representation of this coordinate information and import it as a named list via \code{fromJSON}. This can then initialise a coordinate system by passing that named list into \code{gridSVGCoords}. We can supply new definitions of a viewport's coordinate system by simply passing in an appropriate list with information for that viewport. All viewport coordinate system information can be wiped if a single \code{NA} value is passed in. } \value{ If \code{newcoords} is \code{NULL}, then we get back a named list representing coordinate system information. If we pass the named list representing a coordinate system into the function, we get no output. We also get no output if we pass in a single \code{NA} value. } \author{ Simon Potter } gridSVG/man/fePointLight.Rd0000654000176200001440000000232512164147372015227 0ustar liggesusers\name{fePointLight} \alias{fePointLight} \title{ Create a Point Light Source } \description{ This filter primitive defines a point light source that can be used within a lighting filter primitive: \code{\link{feDiffuseLighting}} or \code{\link{feSpecularLighting}}. } \usage{ fePointLight(z = unit(0, "npc"), default.units = "npc", zdim = "x", ...) } \arguments{ \item{z}{ A numeric vector or unit object specifying z-location. } \item{default.units}{ A string indicating the default units to use if \code{z} if given as a numeric vector. } \item{zdim}{ Either \code{"x"} or \code{"y"}. Determines the dimension to which \code{z} will be located relative to. This is necessary because R graphics has no concept of a z-dimension. } \item{\dots}{ Further arguments to be passed onto \code{fe}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.point.light} object. } \references{ \code{http://www.w3.org/TR/SVG/filters.html#fePointLightElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}, \code{\link{feDiffuseLighting}}, \code{\link{feSpecularLighting}}. } gridSVG/man/registerClipPath.Rd0000654000176200001440000000436112164147372016106 0ustar liggesusers\name{Clipping Paths} \alias{clipPath} \alias{registerClipPath} \title{ Create the definition of a non-rectangular clipping path. } \description{ A feature of SVG is that elements can be clipped to by more than just a rectangular region. Most graphical elements can be drawn. The purpose of these functions is to define a more sophisticated clipping path that will be applied until the current viewport (or context, see \code{\link{popContext}}) is popped. } \usage{ clipPath(grob) registerClipPath(label, clippath) } \arguments{ \item{grob}{ A grid grob. } \item{label}{ A character identifier that will be used to reference this definition. } \item{clippath}{ A \code{clipPath} object produced by \code{\link{clipPath}} that defines a clipping path region. } } \details{ A clipping path will be drawn within the current viewport at the time of definition (if the grob has no \code{vp} specified). Most grobs can be used for clipping but there are some limitations on what will actually be used for clipping. In general though, anything that is drawn as the clipping path will have the union of its drawn regions become the new region that the current viewport (or grob) will clip to. The limitations are as follows: \itemize{ \item Any viewport pushed by the clipping path grob will no longer clip to its contents. However, its clipping region will remain. This means that the clipping region for a pushed viewport will become the union of its contents and the viewport clipping region itself, instead of just the pushed viewport's clipping region. \item When drawing a \code{textGrob}, only character labels will be used, no \code{plotmath} expressions will be used. \item No \code{pointGrob}s are able to be used for clipping. \item Any operations that apply to containers (e.g. gpars, garnishing, animation), will no longer work. Any operations that are not applied to groups are unaffected. This affects in particular viewports, gTrees, and the familiar gridSVG grob grouping that occurs. } } \value{ None } \author{ Simon Potter } \seealso{ \code{\link{popContext}}, \code{\link{grid.clipPath}}, \code{\link{pushClipPath}}, \code{\link{grid.clip}} } gridSVG/man/convert.Rd0000654000176200001440000000470612171060447014313 0ustar liggesusers\name{Coordinate Conversion Functions} \alias{viewportConvertX} \alias{viewportConvertY} \alias{viewportConvertPos} \alias{viewportConvertWidth} \alias{viewportConvertHeight} \alias{viewportConvertDim} \title{ Functions for using an imported coordinate system } \description{ These functions convert between different units. The conversion occurs within viewports unknown to \code{grid}, but imported to R via \code{\link{gridSVGCoords}}. } \usage{ viewportConvertX(vpname, x, from, to = "svg") viewportConvertY(vpname, x, from, to = "svg") viewportConvertPos(vpname, x, y, from, to = "svg") viewportConvertWidth(vpname, x, from, to) viewportConvertHeight(vpname, x, from, to) viewportConvertDim(vpname, w, h, from, to) } \arguments{ \item{vpname}{ The name of the viewport that the unit belongs within. } \item{x, y, w, h}{ The size of the unit in \code{from} units. } \item{from}{ The type of unit that \code{x} is. } \item{to}{ The unit that \code{x} is being converted to. } } \details{ Although \code{grid} has conversion functions available, it only converts units relative to the current viewport. After writing out to SVG, we no longer have actual grid viewports to convert units within. These functions are designed so that once coordinate information is loaded into \code{gridSVG} via \code{\link{gridSVGCoords}}, we can translate units within each of these viewports. Note: this requires that a \code{gridSVG} plot has had viewport information exported. These functions can be used in much the same way as \code{grid}'s unit conversion functions, the only difference being that we have a new unit, \code{svg}, which represents the size of a unit in SVG pixels. The \code{viewportConvertPos()} and \code{viewportConvertDim()} functions are for use with a viewport that has a non-zero rotation (both \code{viewportConvertX()} and \code{viewportConvertY()} will fail in that situation and \code{viewportConvertWidth()} and \code{viewportConvertHeight()} will give a not very useful answer). } \value{ A numeric vector containing a single value, the value of the new unit, or a list with components \code{x} and \code{y} for \code{viewportConvertPos()}, or a list with components \code{w} and \code{h} for \code{viewportConvertDim()}. In the case of the \code{viewportConvertX} and \code{viewportConvertY} functions, we always return a value that is in terms of SVG pixels. } \author{ Simon Potter } gridSVG/man/grid.script.Rd0000654000176200001440000000175012164147372015064 0ustar liggesusers\name{grid.script} \alias{grid.script} \alias{scriptGrob} \title{ Create a grid grob containing an SVG script} \description{ Creates a script object which is a normal grid grob containing an SVG script. Useful in conjunction with \code{grid.export}, to produce an SVG document with script elements. } \usage{ scriptGrob(script=NULL, filename=NULL, type="application/ecmascript", inline=FALSE, name=NULL) grid.script(...) } \arguments{ \item{script}{ A character value specifying script code. } \item{filename}{ The name of a file that contains script code. } \item{type}{ The type of the script code. } \item{inline}{ A logical specifying whether the script code from the file should be included inline or just referenced. } \item{name}{ A character value giving a name for the grob. } \item{\dots}{ Arguments to be passed into \code{scriptGrob}. } } \value{ A script.grob object. } \author{ Paul Murrell } \seealso{ \code{\link{grid.export}} } \keyword{ dplot } gridSVG/man/grid.export.Rd0000654000176200001440000001740712620215506015077 0ustar liggesusers\name{grid.export} \alias{grid.export} \alias{gridToSVG} \title{ Generate SVG output from a grid graphic } \description{ Produces an SVG version of the current grid page. } \usage{ grid.export(name = "Rplots.svg", exportCoords = c("none", "inline", "file"), exportMappings = c("none", "inline", "file"), exportJS = c("none", "inline", "file"), res = NULL, prefix = "", addClasses = FALSE, indent = TRUE, htmlWrapper = FALSE, usePaths = c("vpPaths", "gPaths", "none", "both"), uniqueNames = TRUE, annotate = TRUE, progress = FALSE, compression = 0, strict = TRUE, rootAttrs = NULL, xmldecl = xmlDecl()) } \arguments{ \item{name}{ The name of the SVG file to produce. If this parameter is \code{NULL} or \code{""}, a list containing the SVG document, coordinate information, and JavaScript utility functions are returned. } \item{exportCoords}{ If this parameter is not \code{none} a coordinates file is exported. If this parameter is \code{file}, the coordinates information is written to a file, while \code{inline} will include the contents within the SVG document. } \item{exportMappings}{ If this parameter is not \code{none} a mapping file is exported. If this parameter is \code{file}, the mapping information is written to a file, while \code{inline} will include the contents within the SVG document. } \item{exportJS}{ If this parameter is not \code{none} a JavaScript file is written out. This contains useful functions for manipulating gridSVG plots in the browser, including unit conversion functions. If this parameter is \code{file}, the JavaScript file is written to a file, while \code{inline} will include the contents within the SVG document. } \item{res}{ The device resolution to print at (in DPI). If \code{NULL}, this is automatically calculated to be the resolution of the current device. Typically the PDF device would be used, and this uses a resolution of 72, i.e. 72 DPI. } \item{prefix}{ A prefix to apply to all generated SVG ID attributes. Useful for ensuring unique IDs when many SVG images exist within the same HTML document. If a valid prefix has been given, the root \code{} element will be given an ID attribute with the prefix as its value. } \item{addClasses}{ If \code{TRUE}, adds an SVG class attribute to all grobs and viewports which holds the value of the class of the grob or viewport. If the class attribute already exists (via \code{\link{grid.garnish}} or \code{\link{grid.element}}), the resulting SVG class attribute will be the union of the existing class attribute and the grob/viewport classes. } \item{indent}{ Determines whether the resulting SVG document will be exported with indentation present. Indentation makes the document more readable, but when \code{indent} is set to \code{FALSE}, parsing the SVG in JavaScript is easier because there are no empty text nodes. } \item{htmlWrapper}{ If \code{TRUE}, saves a wrapping HTML file. This file contains a snippet of HTML which links to the exported SVG file. } \item{usePaths}{ If this parameter is set to \code{vpPaths}, then when writing out viewports gridSVG will set the SVG element ID to the current \code{vpPath} instead of the current viewport name. If this parameter is set to \code{gPaths}, gridSVG will set the names of grobs to be the current \code{gPath} instead of the current grob name. When \code{none}, viewports and grobs will not incorporate paths. When \code{both}, viewports and grobs will both use paths. } \item{uniqueNames}{ If \code{TRUE}, gridSVG will make an attempt to produce unique grob names. Unique \code{id} attributes are required for valid SVG. It is highly recommended that mapping information is used when this parameter is \code{TRUE}. } \item{annotate}{ If \code{TRUE}, an SVG metadata element will be introduced directly below the root \code{} element. This element contains XML that describes the information that gridSVG used to draw the image (mostly arguments to \code{grid.export}). This output may be useful for debugging purposes. } \item{progress}{ If \code{TRUE}, messages will be displayed in the console that show how quickly gridSVG is progressing when exporting an SVG image. This is particularly useful when there are large images being exported so we have a reasonable estimate of how long exporting will take. } \item{compression}{ An integer between 0 and 9 indicating the level of (gzip) compression applied to the SVG image when it is saved to a file. Higher values of \code{compression} indicate smaller file sizes at the expense of increased computation. } \item{strict}{ A logical indicating whether checks should be made that all attributes added to SVG elements are valid. If this is \code{TRUE} and invalid attributes are detected, those attributes are removed, with a warning. } \item{rootAttrs}{ A named character vector containing attributes for the top-level \code{} element. } \item{xmldecl}{ This parameter sets the XML declaraction that will be applied to the SVG document. By default this parameter simply declares that the document is XML version 1.0, along with the character encoding that was used to export the SVG document. If \code{xmldecl} is \code{NULL}, then no XML declaration is printed. This may be useful when you want only the SVG document and nothing more. } } \details{ The \code{uniqueNames} parameter is set to \code{TRUE} by default in order to ensure that each SVG element ID is unique. This is a requirement of XML (which SVG is based on). This differs from \code{usePaths} because \code{usePaths} can still generate names that are not unique (there are several ways for this to happen). \code{uniqueNames} modifies grob and viewport names with a numeric suffix to ensure uniqueness. When \code{FALSE}, only grob names will be kept unmodified because modifying viewport names would affect coordinate information. Occasionally the XML package can report warnings, despite valid SVG being produced. If spurious warnings are being produced, set \code{options(gridSVGWarnings = FALSE)} to ignore them. See the files in the directory gridSVG/tests for examples of things that can be done. See the file gridSVG/doc/overview.tex for limitations. } \value{ When \code{name} has a valid filename the side effect is to produce an SVG file of the specified name. Optionally a JavaScript file containing coordinate transformation information is also exported. Optionally a JavaScript file containing name mapping information is also exported. Optionally a JavaScript file containing utility JavaScript functions is also exported. When \code{name} has a filename with zero characters, a named list is returned with four elements. \code{svg} is the SVG root node (and all its children, see the XML package for more information on how to use this. \code{coords} contains the list of coordinate information for exported viewports. \code{mappings} is a list containing information on how names have been modified during the exporting process. \code{utils} is a character vector containing JavaScript code to manipulate gridSVG plots in the browser. This list is always returned but when a valid filename is given, it is returned invisibly. } \author{ Paul Murrell } \seealso{ \code{\link{grid.hyperlink}}, \code{\link{grid.animate}}, \code{\link{grid.garnish}} } \keyword{ dplot } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/grobToDev.Rd����������������������������������������������������������������������������0000654�0001762�0000144�00000002545�12164147372�014532� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grobToDev} \alias{grobToDev} %- Also NEED an '\alias' for EACH other topic documented here. \title{ %% ~~function to do ... ~~ Convert a grob to device calls } \description{ %% ~~ A concise (1-5 lines) description of what the function does. ~~ This function is used to make calls to a device to draw a grob. It is generic so new grob classes can write their own methods. } \usage{ grobToDev(x, dev) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ A grob. %% ~~Describe \code{x} here~~ } \item{dev}{ A graphics device. %% ~~Describe \code{dev} here~~ } } \details{ %% ~~ If necessary, more details than the description above ~~ This function is not called directly by the user. It is exposed so that new grob classes can easily write their own methods which call existing methods for standard grobs. The difference between this function and \code{primToDev()} is that this one takes care of setting up coordinate systems based on the grid viewports so that SVG output is positioned correctly, then it calls \code{primToDev()} to produce the actual SVG elements. } \author{ %% ~~who you are~~ Paul Murrell } %% ~Make other sections like Warning with \section{Warning }{....} ~ % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ dplot } �����������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/grid.hyperlink.Rd�����������������������������������������������������������������������0000654�0001762�0000144�00000003354�12164147372�015567� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.hyperlink} \alias{grid.hyperlink} \alias{hyperlinkGrob} \title{ Associate a hyperlink with a grid grob } \description{ Creates a linked.grob object which is a normal grid grob, with a hyperlink attached. Useful in conjunction with \code{grid.export}, to produce an SVG document with hyperlinked graphical elements. } \usage{ grid.hyperlink(path, href, show=NULL, group=TRUE, redraw=FALSE, strict=FALSE, grep=FALSE, global=FALSE) hyperlinkGrob(x, href, show=NULL, group=TRUE) } \arguments{ \item{x}{ A grob to add a hyperlink to. } \item{path}{ A grob path specifying a drawn grob. } \item{href}{ A valid Xlink URI. Can be a vector of several links (see \code{group} argument below). } \item{show}{ A character vector specifying how the link should be opened. \code{NULL} and \code{""} will avoid adding an attribute. The most common cases are to use \code{"new"} to open a link in a new window/tab, or \code{"replace"} to open the link in the current window/tab. } \item{group}{ A logical indicating whether the hyperlinks should be attached to the overall parent group for the relevant SVG element, or to individual SVG elements. } \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \value{ A linked.grob object. } \author{ Paul Murrell } \seealso{ \code{\link{grid.export}} } \keyword{ dplot } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/registerGradientFill.Rd�����������������������������������������������������������������0000654�0001762�0000144�00000001462�12164147372�016745� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{Gradient Fills} \alias{registerGradientFill} \title{ Create a definition of a gradient fill. } \description{ A feature of SVG is that elements can be filled with a gradient that is defined somewhere in the document. The purpose of the \code{registerGradientFill} function is to create a definition of a gradient fill so that it can be referred to by grobs drawn by gridSVG. } \usage{ registerGradientFill(label, gradient) } \arguments{ \item{label}{ A character identifier for a gradient fill. } \item{gradient}{ A gradient object filled with gradient stops. See \code{\link{linearGradient}} and \code{\link{radialGradient}}. } } \value{ None. } \author{ Simon Potter } \seealso{ \code{\link{linearGradient}}, \code{\link{radialGradient}}, \code{\link{grid.gradientFill}} } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feDiffuseLighting.Rd��������������������������������������������������������������������0000654�0001762�0000144�00000005205�14402220621�016203� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feDiffuseLighting} \alias{feDiffuseLighting} \title{ Light an image using the alpha channel as a bump map. } \description{ This filter primitive lights an image using the alpha channel as a bump map. The resulting image is an RGBA opaque image based on the light colour with \code{alpha = 1} everywhere. The lighting calculation follows the standard diffuse component of the Phong lighting model. The resulting image depends on the light colour, light position and surface geometry of the input bump map. } \usage{ feDiffuseLighting(input = NA, surfaceScale = 1, diffuseConstant = 1, kernelUnitLength = NA, col = "white", lightSource = NULL, ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{surfaceScale}{ Scale applied to the input alpha surface. } \item{diffuseConstant}{ \code{kd} in the Phong lighting model. Must be non-negative. } \item{kernelUnitLength}{ The first number is the \code{dx} value. The second number is the \code{dy} value. If the \code{dy} value is not specified, it defaults to the same value as \code{dx}. Indicates the intended distance in current filter units (i.e., units as determined by the value of parent filter container's \code{primitiveUnits}) for \code{dx} and \code{dy}, respectively, in the surface normal calculation formulas. By specifying value(s) for \code{kernelUnitLength}, the kernel becomes defined in a scalable, abstract coordinate system. If \code{kernelUnitLength} is not specified, the \code{dx} and \code{dy} values should represent very small deltas relative to a given (x,y) position, which might be implemented in some cases as one pixel in the intermediate image offscreen bitmap, which is a pixel-based coordinate system, and thus potentially not scalable. } \item{col}{ The colour to apply to the light from \code{lightSource}. } \item{lightSource}{ A light source object, produced by one of \code{\link{feDistantLight}}, \code{\link{fePointLight}}, or \code{\link{feSpotLight}}. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.diffuse.lighting} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feDiffuseLightingElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}} \code{\link{fe}}, \code{\link{feDistantLight}}, \code{\link{fePointLight}}, \code{\link{feSpotLight}}. } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feBlend.Rd������������������������������������������������������������������������������0000654�0001762�0000144�00000002024�14402220547�014157� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feBlend} \alias{feBlend} \title{ Blend two objects together. } \description{ This filter composites two objects together using commonly used imaging software blending modes. It performs a pixel-wise combination of two input images. } \usage{ feBlend(input1 = NA, input2 = NA, mode = c("normal", "multiply", "screen", "darken", "lighten"), ...) } \arguments{ \item{input1}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{input2}{ Identfies a second input for this filter primitive. See \code{\link{filterInputs}}. } \item{mode}{ An image blending mode. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.blend} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feBlendElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/pushMask.Rd�����������������������������������������������������������������������������0000654�0001762�0000144�00000002566�12164147372�014435� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{pushMask} \alias{pushMask} \alias{popMask} \title{ Apply a masking context to the current viewport. } \description{ This function is intended to be used similarly to \code{\link{grid.clip}}. The key difference is that instead of applying a new clipping context to the viewport, we apply a new masking context. } \usage{ pushMask(mask = NULL, label = NULL, name = NULL, draw = TRUE) popMask() } \arguments{ \item{mask}{ A \code{mask} object, used as the definition of an opacity mask. } \item{label}{ A label for a defined reference. } \item{name}{ A character identifier for the grob applying the masking context. } \item{draw}{ A logical value indicating whether graphics output should be produced. } } \details{ If \code{label} is specified, uses a mask that has been supplied to \code{registerMask}. If \code{mask} is specified it will be used as the new masking context for the current viewport. If both are specified, it will attempt to define the mask with the given label, as well as applying the mask as the new masking context for the current viewport. \code{popMask} is an alias for \code{\link{popContext}}. } \value{ A \code{pushMask} grob. The value is returned invisibly. } \author{ Simon Potter } \seealso{ \code{\link{mask}}, \code{\link{registerMask}}, \code{\link{grid.mask}}, \code{\link{popContext}}. } ������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/grid.garnish.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000003155�12164147372�015214� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.garnish} \alias{grid.garnish} \alias{garnishGrob} \title{ Associate arbitrary SVG attributes with a grid grob } \description{ Creates an svg.grob object which is a normal grid grob, with SVG attributes attached. Useful in conjunction with \code{grid.export}, to produce an SVG document with attributes that have no corresponding concept in grid graphics. } \usage{ garnishGrob(x, ..., group=TRUE) grid.garnish(path, ..., group=TRUE, redraw=FALSE, strict = FALSE, grep=FALSE, global=FALSE) } \arguments{ \item{x}{A grob.} \item{path}{ A grob path specifying a drawn grob. } \item{...}{ Arbitrary SVG attribute settings. } \item{group}{ A logical indicating whether the SVG attributes should be attached to the overall parent group for the relevant SVG element, or to individual SVG elements. } \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \details{ The SVG attribute settings can be vectors (in the case of garnishing individual SVG elements) or even named vectors (if you want precise control over which attribute value is apportioned to which individual SVG element). } \value{ A garnished.grob object. } \author{ Paul Murrell } \seealso{ \code{\link{grid.export}} } \keyword{ dplot } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feComposite.Rd��������������������������������������������������������������������������0000654�0001762�0000144�00000004216�14402220612�015073� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feComposite} \alias{feComposite} \title{ Combine images using Porter-Duff operations. } \description{ This filter performs the combination of the two input images pixel-wise in image space using one of the Porter-Duff compositing operations. The arithmetic operation is useful for combining the output from the \code{\link{feDiffuseLighting}} and \code{\link{feSpecularLighting}} filter effects with texture data. It is also useful for implementing dissolve. } \usage{ feComposite(input1 = NA, input2 = NA, operator = c("over", "in", "out", "atop", "xor", "arithmetic"), k1 = 0, k2 = 0, k3 = 0, k4 = 0, ...) } \arguments{ \item{input1}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{input2}{ Identfies a second input for this filter primitive. See \code{\link{filterInputs}}. } \item{operator}{ The compositing operation that is to be performed. All of the \code{operator} types except \code{"arithmetic"} match the corresponding operation as described in the referenced Porter-Duff text. The arithmetic operator is described in the referenced SVG specification. } \item{k1}{ A numeric value. Only applicable if \code{operator} is \code{"arithmetic"}. } \item{k2}{ A numeric value. Only applicable if \code{operator} is \code{"arithmetic"}. } \item{k3}{ A numeric value. Only applicable if \code{operator} is \code{"arithmetic"}. } \item{k4}{ A numeric value. Only applicable if \code{operator} is \code{"arithmetic"}. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.composite} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feCompositeElement} Compositing Digital Images, T. Porter and T. Duff. SIGGRAPH '84 Conference Proceedings, Association for Computing Machinery, Volume 18, Number 3, July 1984. } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feMorphology.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000002611�14402220731�015267� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feMorphology} \alias{feMorphology} \title{ "Fatten" or "thin" artwork. } \description{ This filter primitive performs "fattening" or "thinning" of artwork. It is particularly useful for fattening or thinning an alpha channel. } \usage{ feMorphology(input = NA, operator = c("erode", "dilate"), radius = unit(0, "npc"), default.units = "npc", ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{operator}{ A keyword indicating whether to erode (i.e., thin) or dilate (fatten) the source graphic, \code{input}. } \item{radius}{ The radius (or radii) for the operation. If two values are provided, the first value represents a x-radius and the second value represents a y-radius. If one radius is provided, then that value is used for both xand y. } \item{default.units}{ A string indicating the default units to use if \code{radius} is only given as a numeric vector. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.morphology} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feMorphologyElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } �����������������������������������������������������������������������������������������������������������������������gridSVG/man/getSVGFonts.Rd��������������������������������������������������������������������������0000654�0001762�0000144�00000001524�12164147372�015004� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{getSVGFonts} \alias{getSVGFonts} \alias{setSVGFonts} \title{ Manage SVG fonts } \description{ These functions control the SVG font stacks that are used when exporting text to SVG. } \usage{ getSVGFonts() setSVGFonts(fontStacks) } \arguments{ \item{fontStacks}{A list of font stacks (typically the modified result from \code{getSVGFonts()}). } } \details{ \code{getSVGFonts()} returns a list of three font stacks called \code{serif}, \code{sans}, and \code{mono}. The user can modify the values in each stack and then reset the stacks by calling \code{setSVGFonts()} (a default value will always be forced at the end of each font stack). } \value{ A list (for \code{getSVGFonts()}). } \author{ Simon Potter } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ dplot } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/animUnit.Rd�����������������������������������������������������������������������������0000654�0001762�0000144�00000003645�12215443562�014422� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{animUnit} \alias{animUnit} \alias{animValue} \alias{as.animUnit} \alias{as.animValue} %- Also NEED an '\alias' for EACH other topic documented here. \title{ Generate a set of animation values. } \description{ These functions can be used to generate a set of values for use with \code{grid.animate()} to animate some feature of a grob. } \usage{ animUnit(x, timeid = NULL, id = NULL) animValue(x, timeid = NULL, id = NULL) as.animUnit(x, ...) as.animValue(x, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ A set of animation values. Could be a numeric vector, a character vector, a unit vector, a matrix, a list of units. } \item{timeid}{ A vector that associates each value of \code{x} with a time point. } \item{id}{ A vector that associates each value of \code{x} with a different (numeric) identifier. } \item{\dots}{ For future use. } } \details{ A set of animation values is ultimately either a numeric or character vector OR a unit vector. Subsets of the animation values can be defined per time point, or per identifier, or both. The \code{as} functions allow animation values to be specified as matrices or lists, which are converted to formal animation value sets. The \code{grid.animate()} function calls these functions so the conversion typically happens automatically. These functions should only have to be called directly in relatively complex cases where multiple values need to be specified per time point AND per identifier. } \value{ An animUnit or animValue object. } \author{ Paul Murrell } \seealso{ \code{\link{grid.animate}} } \examples{ require(grid) animValue(c("visible", "hidden")) animUnit(unit(1:24, "in"), timeid=rep(1:3, each=8), id=rep(1:2, 12)) } % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ dplot }% __ONLY ONE__ keyword per line �������������������������������������������������������������������������������������������gridSVG/man/feImage.Rd������������������������������������������������������������������������������0000654�0001762�0000144�00000002055�14402220507�014155� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feImage} \alias{feImage} \title{ Draw a referred image. } \description{ This filter effect primitive refers to a graphic external to this filter container, which is loaded or rendered into an RGBA raster and becomes the result of the filter effect primitive. } \usage{ feImage(preserveAspectRatio = "xMidYMid meet", href = "", ...) } \arguments{ \item{preserveAspectRatio}{ See references for appropriate values and behaviour. } \item{href}{ A \code{URL} reference to a stand-alone image resource such as a JPEG, PNG or SVG file. e.g. \code{http://example.com/img.jpg} } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.image} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feImageElement} \url{https://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feDistantLight.Rd�����������������������������������������������������������������������0000654�0001762�0000144�00000002160�14402220650�015525� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feDistantLight} \alias{feDistantLight} \title{ Create a Distant Light Source } \description{ This filter primitive defines a distant light source that can be used within a lighting filter primitive: \code{\link{feDiffuseLighting}} or \code{\link{feSpecularLighting}}. } \usage{ feDistantLight(azimuth = 0, elevation = 0, ...) } \arguments{ \item{azimuth}{ Direction angle for the light source on the x-y plane (clockwise), in degrees from the x axis. } \item{elevation}{ Direction angle for the light source from the x-y plane towards the z axis, in degrees. Note the positive z-axis points towards the viewer of the content. } \item{\dots}{ Further arguments to be passed onto \code{fe}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.distant.light} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feDistantLightElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}, \code{\link{feDiffuseLighting}}, \code{\link{feSpecularLighting}}. } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/pushClipPath.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000002576�12164147372�015247� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{pushClipPath} \alias{pushClipPath} \alias{popClipPath} \title{ Apply a clipping context to the current viewport. } \description{ This function is intended to be used similarly to \code{\link{grid.clip}}. The only difference is that a non-rectangular clipping region can be applied. } \usage{ pushClipPath(clippath = NULL, label = NULL, name = NULL, draw = TRUE) popClipPath() } \arguments{ \item{clippath}{ A graphics object, used as the definition of a clipping path. } \item{label}{ A label for a defined reference. } \item{name}{ A character identifier for the grob applying the clipping context. } \item{draw}{ A logical value indicating whether graphics output should be produced. } } \details{ If \code{label} is specified, uses a clipping path that has been supplied to \code{registerClipPath}. If \code{clippath} is specified it will be used as the new clipping context for the current viewport. If both are specified, it will attempt to define the clipping path with the given label, as well as adding the clipping path as a clipping context for the current viewport. \code{popClipPath} is an alias for \code{\link{popContext}} } \value{ A \code{pushClipPath} grob. The value is returned invisibly. } \author{ Simon Potter } \seealso{ \code{\link{registerClipPath}}, \code{\link{grid.clipPath}}, \code{\link{popContext}}. } ����������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feConvolveMatrix.Rd���������������������������������������������������������������������0000654�0001762�0000144�00000013005�14402222172�016110� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feConvolveMatrix} \alias{feConvolveMatrix} \title{ Apply a matrix convolution filter effect. } \description{ A convolution combines pixels in the input image with neighbouring pixels to produce a resulting image. A wide variety of imaging operations can be achieved through convolutions, including blurring, edge detection, sharpening, embossing and beveling. } \usage{ feConvolveMatrix(input = NA, order = 3, kernelMatrix = matrix(), divisor = 1, bias = 0, targetX = 1, targetY = 1, edgeMode = c("duplicate", "wrap", "none"), kernelUnitLength = NA, preserveAlpha = FALSE, ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{order}{ A numeric vector of length 1 or 2. Indicates the number of cells in each dimension for \code{kernelMatrix}. The values provided must be integers greater than zero. The first number (orderX), indicates the number of columns in the matrix. The second number (orderY), indicates the number of rows in the matrix. If this is a vector of length one then the number of rows is assumed to be same as the number of columns specified. } \item{kernelMatrix}{ The kernel matrix for the convolution. The number of entries must correspond with the values given by \code{order}. } \item{divisor}{ After applying the \code{kernelMatrix} to the input image to yield a number, that number is divided by \code{divisor} to yield the final destination colour value. A divisor that is the sum of all the matrix values tends to have an evening effect on the overall colour intensity of the result. It is an error to specify a divisor of zero. The default value is the sum of all values in kernelMatrix, with the exception that if the sum is zero, then the divisor is set to 1. } \item{bias}{ After applying the \code{kernelMatrix} to the input image to yield a number and applying the \code{divisor}, the \code{bias} attribute is added to each component. One application of \code{bias} is when it is desirable to have 0.5 gray value be the zero response of the filter. The bias property shifts the range of the filter. This allows representation of values that would otherwise be clamped to 0 or 1. } \item{targetX}{ Determines the positioning in X of the convolution matrix relative to a given target pixel in the input image. The leftmost column of the matrix is column number zero. The value must be such that: \eqn{0 <= targetX < orderX}{0 <= targetX < orderX}. By default, the convolution matrix is centered in X over each pixel of the input image (i.e., \eqn{targetX = \lfloor orderX / 2 \rfloor}{targetX = floor( orderX / 2 ))}. } \item{targetY}{ Determines the positioning in Y of the convolution matrix relative to a given target pixel in the input image. The topmost row of the matrix is row number zero. The value must be such that: \eqn{0 <= targetY < orderY}{0 <= targetY < orderY}. By default, the convolution matrix is centered in Y over each pixel of the input image (i.e., \eqn{targetY = \lfloor orderY / 2 \rfloor}{targetY = floor( orderY / 2))}. } \item{edgeMode}{ Determines how to extend the input image as necessary with colour values so that the matrix operations can be applied when the kernel is positioned at or near the edge of the input image. \itemize{ \item \code{"duplicate"} indicates that the input image is extended along each of its borders as necessary by duplicating the colour values at the given edge of the input image. \item \code{"wrap"} indicates that the input image is extended by taking the colour values from the opposite edge of the image. \item \code{"none"} indicates that the input image is extended with pixel values of zero for R, G, B and A. } } \item{kernelUnitLength}{ The first number is the \code{dx} value. The second number is the \code{dy} value. If the \code{dy} value is not specified, it defaults to the same value as \code{dx}. Indicates the intended distance in current filter units (i.e., units as determined by the value of the filter effect container's \code{primitiveUnits}) between successive columns and rows, respectively, in the \code{kernelMatrix}. By specifying value(s) for \code{kernelUnitLength}, the kernel becomes defined in a scalable, abstract coordinate system. If \code{kernelUnitLength} is not specified, the default value is one pixel in the offscreen bitmap, which is a pixel-based coordinate system, and thus potentially not scalable. } \item{preserveAlpha}{ A value of \code{FALSE} indicates that the convolution will apply to all channels, including the alpha channel. A value of \code{TRUE} indicates that the convolution will only apply to the colour channels. In this case, the filter will temporarily unpremultiply the colour component values, apply the kernel, and then re-premultiply at the end. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.convolve.matrix} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feConvolveMatrixElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/filterEffect.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000006702�14402220524�015224� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{filterEffect} \alias{filterEffect} \alias{addFilterEffect} \title{ Creating Filter Effects } \description{ Create objects which describe filter effects. These objects can be used to add filter effect primitives. They can be used to apply a filter effect to grobs and also to define a filter effect so that it may be used multiple times. } \usage{ filterEffect(feList = NULL, filterUnits = c("coords", "bbox"), x = unit(0.5, "npc"), y = unit(0.5, "npc"), width = unit(1, "npc"), height = unit(1, "npc"), just = "centre", hjust = NULL, vjust = NULL, default.units = "npc", primitiveUnits = c("coords", "bbox")) addFilterEffect(filter, filterEffect, after = NA) } \arguments{ \item{feList}{ A list of filter effect primitives. For example a list containing a gaussian blur primitive created by \code{\link{feGaussianBlur}}. } \item{filterUnits}{ If \code{"bbox"}, the filter effect itself is positioned relative to the bounding box of the referring grob. All units attempt to be converted to equivalent "npc" coordinates as a reulst. If \code{"coords"}, uses grid coordinates to determine positioning. } \item{x}{ A numeric vector or unit object specifying x-location. } \item{y}{ A numeric vector or unit object specifying y-location. } \item{width}{ A numeric vector or unit object specifying width. } \item{height}{ A numeric vector or unit object specifying height. } \item{just}{ The justification of the pattern relative to its (x, y) location. If there are two values, the first value specifies horizontal justification and the second value specifies vertical justification. Possible string values are: \code{"left"}, \code{"right"}, \code{"centre"}, \code{"center"}, \code{"bottom"}, and \code{"top"}. For numeric values, 0 means left alignment and 1 means right alignment. } \item{hjust}{ A numeric vector specifying horizontal justification. If specified, overrides the \code{just} setting. } \item{vjust}{ A numeric vector specifying vertical justification. If specified, overrides the \code{just} setting. } \item{default.units}{ A string indicating the default units to use if \code{x}, \code{y}, \code{width}, or \code{height} are only given as numeric vectors. } \item{primitiveUnits}{ If \code{"bbox"}, all filter effect primitives will be positioned relative to the bounding box of the filter effect region (determined by \code{x}, \code{y}, \code{width}, \code{height} and \code{filterUnits}). All units attempt to be converted to equivalent "npc" coordinates. If \code{"coords"}, uses grid coordinates to determine positioning. } \item{filter}{ A filter effect container object, as created by \code{filterEffect}. } \item{filterEffect}{ A filter effect primitive object. } \item{after}{ Numeric. Determines where amongst the children of \code{filter} that \code{filterEffect} should be added. \code{NA} indicates that \code{filterEffect} should be appended to the end of the list of children. } } \details{ This is primarily a container object to hold filter effect primitives. } \value{ A \code{filter} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#FilterElement} } \author{ Simon Potter } \seealso{ Any of the filter effect primitives (named \code{fe*}), e.g. \code{\link{feGaussianBlur}}. } ��������������������������������������������������������������gridSVG/man/grid.gradientFill.Rd��������������������������������������������������������������������0000654�0001762�0000144�00000004756�12164147372�016175� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.gradientFill} \alias{grid.gradientFill} \alias{gradientFillGrob} \title{ Associate a gradient fill with a grid grob } \description{ Creates a \code{gradientFilled.grob} object which is a normal grid grob, with a gradient fill used in place of a regular fill. Used in conjunction with \code{registerGradientFill}, to produce an SVG document containing graphical elements with gradient fills. } \usage{ grid.gradientFill(path, gradient = NULL, label = NULL, alpha = 1, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) gradientFillGrob(x, gradient = NULL, label = NULL, alpha = 1, group = TRUE) } \arguments{ \item{x}{ A grob to add a pattern fill to. } \item{path}{ A grob path specifying a drawn grob. } \item{gradient}{ A \code{gradient} object, provided by the \code{linearGradient} and \code{radialGradient} functions. Provides the definition of a gradient fill that will be applied to \code{x} or \code{path}. } \item{label}{ A label that is associated with a definition of a gradient fill. This is the label used to create a gradient fill definition with \code{registerGradientFill}. } \item{alpha}{ The alpha channel for transparency. A value between 0 and 1. } \item{group}{ A logical vector that indicates whether the gradient fill should be applied to the overall parent group for the relevant SVG element, or to individual SVG elements. } \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \details{ If \code{label} is specified, uses a gradient that has been supplied to \code{registerGradientFill}. If \code{gradient} is specified it will be used as the gradient fill applied to each grob. If both are specified, it will attempt to define the gradient with the given label, as well as applying a gradient fill to the appropriate grobs. } \value{ A \code{gradientFilled.grob} object (for \code{gradientFillGrob}). } \author{ Simon Potter } \seealso{ \code{\link{linearGradient}}, \code{\link{radialGradient}}, \code{\link{registerGradientFill}} } ������������������gridSVG/man/registerFilter.Rd�����������������������������������������������������������������������0000654�0001762�0000144�00000001456�12164147372�015631� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{registerFilter} \alias{registerFilter} \title{ Create the definition a filter effect. } \description{ A feature of SVG is that elements can be filtered using filter effects defined somewhere in the document. The purpose of this function is to create the definition of a filter effect so that it can be referred to by grobs drawn by gridSVG. } \usage{ registerFilter(label, filter) } \arguments{ \item{label}{ A character identifier for the definition. } \item{filter}{ A \code{filter} object, produced by the \code{\link{filterEffect}} function. } } \details{ When registering a filter, all locations and dimensions that filter effects refer to become fixed. } \value{ None. } \author{ Simon Potter } \seealso{ \code{\link{grid.filter}}, \code{\link{filterEffect}}. } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feTurbulence.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000005612�14402220776�015255� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feTurbulence} \alias{feTurbulence} \title{ Create an image using the Perlin turbulence function. } \description{ This filter primitive creates an image using the Perlin turbulence function. It allows the synthesis of artificial textures like clouds or marble. } \usage{ feTurbulence(baseFrequency = 0, numOctaves = 1, seed = 1, stitchTiles = FALSE, type = c("turbulence", "fractalNoise"), ...) } \arguments{ \item{baseFrequency}{ The base frequency (frequencies) parameter(s) for the noise function. If a two element numeric vector is provided, the first number represents a base frequency in the X direction and the second value represents a base frequency in the Y direction. If one number is provided, then that value is used for both X and Y. } \item{numOctaves}{ The \code{numOctaves} parameter for the noise function. } \item{seed}{ The starting number for the pseudo random number generator. } \item{stitchTiles}{ If \code{stitchTiles} is \code{FALSE}, no attempt it made to achieve smooth transitions at the border of tiles which contain a turbulence function. Sometimes the result will show clear discontinuities at the tile borders. If \code{stitchTiles} is \code{TRUE}, then the user agent will automatically adjust \code{baseFrequency}-x and \code{baseFrequency}-y values such that the \code{feTurbulence}'s width and height (i.e., the width and height of the current subregion) contains an integral number of the Perlin tile width and height for the first octave. The \code{baseFrequency} will be adjusted up or down depending on which way has the smallest relative (not absolute) change as follows: Given the frequency, calculate \eqn{lowFreq = \lfloor width * frequency \rfloor / width}{lowFreq = floor(width*frequency)/width} and \eqn{hiFreq = \lceil width*frequency \rceil /width}{hiFreq=ceil(width*frequency)/width}. If \eqn{frequency/lowFreq < hiFreq/frequency}{frequency/lowFreq < hiFreq/frequency} then use \code{lowFreq}, else use \code{hiFreq}. While generating turbulence values, generate lattice vectors as normal for Perlin Noise, except for those lattice points that lie on the right or bottom edges of the active area (the size of the resulting tile). In those cases, copy the lattice vector from the opposite edge of the active area. } \item{type}{ Indicates whether the filter primitive should perform a noise or turbulence function. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.turbulence} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feTurbulenceElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } ����������������������������������������������������������������������������������������������������������������������gridSVG/man/feFlood.Rd������������������������������������������������������������������������������0000654�0001762�0000144�00000001560�14402220671�014200� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feFlood} \alias{feFlood} \title{ Create and fill a rectangular region. } \description{ This filter primitive creates a rectangle filled with a specified colour. The rectangle is as large as the filter primitive subregion established by the \code{x}, \code{y}, \code{width} and \code{height} attributes passed onto \code{\link{fe}} via \code{...}. } \usage{ feFlood(col = "black", ...) } \arguments{ \item{col}{ A colour that will be used to fill the filter region. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.flood} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feFloodElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } ������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feTile.Rd�������������������������������������������������������������������������������0000654�0001762�0000144�00000001712�14402220766�014036� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feTile} \alias{feTile} \title{ Fill a rectangle with a tiled pattern of an input image. } \description{ This filter primitive fills a target rectangle with a repeated, tiled pattern of an input image. The target rectangle is as large as the filter primitive subregion established by the \code{x}, \code{y}, \code{width} and \code{height} arguments that are passed onto \code{\link{fe}} by \code{\link{feTile}}. } \usage{ feTile(input = NA, ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.tile} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feTileElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } ������������������������������������������������������gridSVG/man/gradients.Rd����������������������������������������������������������������������������0000654�0001762�0000144�00000007233�12164147372�014616� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{Gradient Objects} \alias{linearGradient} \alias{radialGradient} \title{ Create Linear and Radial Gradients } \description{ Create objects which describe linear and radial gradients. These objects can later be used to apply a gradient fill to grobs, and also to define a gradient so that it may be reused multiple times. } \usage{ linearGradient(col = c("black", "white"), stops = seq(0, 1, length.out = length(col)), gradientUnits = c("bbox", "coords"), x0 = unit(0, "npc"), x1 = unit(1, "npc"), y0 = unit(0, "npc"), y1 = unit(1, "npc"), default.units = "npc", spreadMethod = c("pad", "reflect", "repeat")) radialGradient(col = c("black", "white"), stops = seq(0, 1, length.out = length(col)), gradientUnits = c("bbox", "coords"), x = unit(0.5, "npc"), y = unit(0.5, "npc"), r = unit(0.5, "npc"), fx = unit(0.5, "npc"), fy = unit(0.5, "npc"), default.units = "npc", spreadMethod = c("pad", "reflect", "repeat")) } \arguments{ \item{col}{ A vector of colours used for gradient stops. } \item{stops}{ A numeric vector of offsets (typically between 0 and 1) to place the the colours (\code{col}) at. } \item{gradientUnits}{ If \code{"bbox"}, the gradient is positioned relative to the bounding box of the referring grob. All units attempt to be converted to equivalent "npc" coordinates as a result. If \code{"coords"}, uses grid coordinates to determine positioning. } \item{x0}{ Numeric or unit object indicating the starting x-location of the linear gradient. } \item{x1}{ Numeric or unit object indicating the stopping x-location of the linear gradient. } \item{y0}{ Numeric or unit object indicating the starting y-location of the linear gradient. } \item{y1}{ Numeric or unit object indicating the stopping y-location of the linear gradient. } \item{x}{ Numeric or unit object indicating the x-location of the radial gradient. } \item{y}{ Numeric or unit object indicating the y-location of the radial gradient. } \item{r}{ A numeric vector or unit object specifying the radius of the radial gradient. } \item{fx}{ A numeric vector or unit object specifying an x-location. Determines the x-location of the focal point of the radial gradient. } \item{fy}{ A numeric vector or unit object specifying an y-location. Determines the y-location of the focal point of the radial gradient. } \item{default.units}{ A string indicating the default units to use if \code{x}, \code{y}, \code{r}, \code{fx} or \code{fy} are only given as numeric vectors. } \item{spreadMethod}{ A character vector determining when happens when a gradient begins or ends within its bounds. See details. } } \details{ When defining gradient stops via \code{col} and \code{stops}, the order is important. Gradient stops which are defined earlier are drawn first, with later stops being drawn over the top. For \code{spreadMethod} the possible values are: \itemize{ \item{pad}{ Use the terminal colors of the gradient to fill the remainder of the target region. } \item{reflect}{ Reflect the gradient pattern start-to-end, end-to-start, start-to-end, etc. continuously until the target region is filled. } \item{repeat}{ Repeat the gradient pattern start-to-end, start-to-end, start-to-end, etc. continuously until the target region is filled. } } } \value{ A \code{gradient} object. } \author{ Simon Potter } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/fe.Rd�����������������������������������������������������������������������������������0000654�0001762�0000144�00000004013�12164147372�013221� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{fe} \alias{fe} \title{ Creating a generic filter effect } \description{ This function creates an object that contains all of the basic attributes that each filter effect inherits from. This is not intended to be used directly, instead it is to be used as a convenience function for building up filter effect objects. } \usage{ fe(..., x = unit(0.5, "npc"), y = unit(0.5, "npc"), width = unit(1, "npc"), height = unit(1, "npc"), just = "centre", hjust = NULL, vjust = NULL, default.units = "npc", result = NULL) } \arguments{ \item{\dots}{ Further attributes to add to the object. } \item{x}{ A numeric vector or unit object specifying x-location. } \item{y}{ A numeric vector or unit object specifying y-location. } \item{width}{ A numeric vector or unit object specifying width. } \item{height}{ A numeric vector or unit object specifying height. } \item{just}{ The justification of the pattern relative to its (x, y) location. If there are two values, the first value specifies horizontal justification and the second value specifies vertical justification. Possible string values are: \code{"left"}, \code{"right"}, \code{"centre"}, \code{"center"}, \code{"bottom"}, and \code{"top"}. For numeric values, 0 means left alignment and 1 means right alignment. } \item{hjust}{ A numeric vector specifying horizontal justification. If specified, overrides the \code{just} setting. } \item{vjust}{ A numeric vector specifying vertical justification. If specified, overrides the \code{just} setting. } \item{default.units}{ A string indicating the default units to use if \code{x}, \code{y}, \code{width}, or \code{height} are only given as numeric vectors. } \item{result}{ A character identifier, naming the result of the filter operation. The result can be used an an input to some filter effects. } } \value{ A \code{filter.effect} object. } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}} } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/getSVGMappings.Rd�����������������������������������������������������������������������0000654�0001762�0000144�00000003446�12164147372�015476� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{Retrieve Names Mapped to SVG IDs, CSS Selectors and XPath Expressions} \alias{getSVGMappings} \title{ Retrieving Viewport, Grob, and Reference Names as SVG IDs, CSS Selectors and XPath Expressions } \description{ This function gives us SVG IDs (or CSS selectors and XPath expressions) that have been created from a grob, viewport, or referenced name as a result of exporting to SVG. } \usage{ getSVGMappings(name, type, result = "id") } \arguments{ \item{name}{ A single element character vector. This should be the name of a grob or viewport (as determined by \code{type}) present as the grid plot was exported. } \item{type}{ A single element character vector, must be one of \code{vp}, \code{grob} or \code{ref}. This determines whether we are trying to get the IDs of a grob or a viewport or a referenced object like a fill pattern. } \item{result}{ The type of output we want. \code{id} gives us SVG element IDs. \code{selector} gives us CSS selectors. \code{xpath} gives us XPath expressions. } } \details{ In order to generate unique names for SVG IDs, gridSVG output will not produce the same names as are visible on the grid display list. This function retrieves the SVG IDs associated with grob and viewport names. To use this function first requires importing mapping information, see \code{\link{gridSVGMappings}}. To make using results easier with existing JavaScript libraries and R packages, CSS selectors and XPath expressions can be returned. This is the case when \code{result} is specified as one of \code{selector} or \code{xpath}. These are targeted to match just the SVG element itself, nothing more. } \value{ A character vector representing values that can target specific SVG output. } \author{ Simon Potter } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feDisplacementMap.Rd��������������������������������������������������������������������0000654�0001762�0000144�00000003237�14402220632�016203� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feDisplacementMap} \alias{feDisplacementMap} \title{ Displace pixel values from a filter input. } \description{ This filter primitive uses the pixels values from the image from \code{input2} to spatially displace the image from \code{input1}. } \usage{ feDisplacementMap(input1 = NA, input2 = NA, scale = 0, xChannelSelector = c("A", "R", "G", "B"), yChannelSelector = c("A", "R", "G", "B"), ...) } \arguments{ \item{input1}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{input2}{ Identfies a second input for this filter primitive. See \code{\link{filterInputs}}. } \item{scale}{ Displacement scale factor. The amount is expressed in the coordinate system established by attribute \code{primitiveUnits} on the parent filter container. When the value of \code{scale} is 0, this operation has no effect on the source image. } \item{xChannelSelector}{ Indicates which channel from \code{input2} to use to displace the pixels in \code{input} along the x-axis. } \item{yChannelSelector}{ Indicates which channel from \code{input2} to use to displace the pixels in \code{input} along the y-axis. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.displacement.map} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feDisplacementMapElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/gridsvg.Rd������������������������������������������������������������������������������0000654�0001762�0000144�00000004056�12620215436�014275� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{gridsvg} \alias{gridsvg} \alias{dev.off} \title{ gridSVG Graphics Device } \description{ Provides a convenient and familiar graphics device interface for the gridSVG package. } \usage{ gridsvg(name = "Rplots.svg", exportCoords = c("none", "inline", "file"), exportMappings = c("none", "inline", "file"), exportJS = c("none", "inline", "file"), res = NULL, prefix = "", addClasses = FALSE, indent = TRUE, htmlWrapper = FALSE, usePaths = c("vpPaths", "gPaths", "none", "both"), uniqueNames = TRUE, annotate = TRUE, progress = FALSE, compression = 0, strict = TRUE, rootAttrs = NULL, xmldecl = xmlDecl(), ...) dev.off(which = dev.cur()) } \arguments{ \item{name, exportCoords, exportMappings, exportJS, res, prefix, addClasses, indent, htmlWrapper, usePaths, uniqueNames, annotate, progress, compression, strict, rootAttrs, xmldecl}{ These parameters are passed onto \code{\link{grid.export}}. } \item{\dots}{ Further parameters that are passed onto a \code{NULL} \code{\link{pdf}} graphics device. Useful parameters include \code{width} and \code{height}. } \item{which}{ An integer specifying a device number. } } \details{ These functions provide a more familiar and perhaps convenient interface to gridSVG than \code{\link{grid.export}}. It uses a PDF device as drawing occurs, but when the device needs to be written out (via \code{dev.off}) then it will save an SVG image instead. When a grid display list is not in use, or any device other than the \code{gridsvg} device is used, the behaviour of \code{dev.off} is the same as \code{\link[grDevices]{dev.off}} from the \code{grDevices} package. } \value{ \code{gridsvg} returns nothing. \code{dev.off} will return in the same manner as \code{\link{grid.export}}. A list is always returned, but invisibly when an invalid filename is given. } \author{ Simon Potter } \seealso{ \code{\link{pdf}} and \code{\link{grid.export}}. } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/readCoordsJS.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000002035�12164147372�015153� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{Import Coordinate JS} \alias{readCoordsJS} \title{ Importing JavaScript coordinate information. } \description{ This function reads in a JavaScript file and transforms it into JSON text. This text is then transformed into a list that can be used in conjunction with \code{\link{gridSVGCoords}}. } \usage{ readCoordsJS(filename) } \arguments{ \item{filename}{ A character vector that represents a file name. This file should be a JavaScript file containing coordinate information produced by \code{\link{grid.export}}. } } \details{ In order to use the \code{\link{fromJSON}} function to parse JSON text, the JavaScript file produced by \code{\link{grid.export}} needs to be transformed. It needs to transform from being an assignment of an object literal to simply the object literal itself. This function performs that task by producing a valid JSON string ready for parsing by \code{\link{fromJSON}}. It then returns the parsed list. } \value{ A list of coordinate information. } \author{ Simon Potter } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/registerMask.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000007357�12164147372�015305� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{Opacity Masks} \alias{mask} \alias{registerMask} \title{ Create the definition of an opacity mask. } \description{ A feature of SVG is that elements can have an opacity mask applied to it. An opacity mask is an image that, for various levels of opacity, makes the object that is being masked inherit the same levels of opacity. The purpose of these functions is to define an opacity mask that will be applied until the current viewport (or context, see \code{\link{popContext}}) is popped. Alternatively it can also be applied to grobs. } \usage{ mask(grob, x = unit(0.5, "npc"), y = unit(0.5, "npc"), width = unit(1, "npc"), height = unit(1, "npc"), default.units = "npc", just = "centre", hjust = NULL, vjust = NULL) registerMask(label, mask = NULL, ...) } \arguments{ \item{grob}{ A grob or gTree that will be drawn as the opacity mask. } \item{x}{ A numeric vector or unit object specifying x-location. } \item{y}{ A numeric vector or unit object specifying y-location. } \item{width}{ A numeric vector or unit object specifying width. } \item{height}{ A numeric vector or unit object specifying height. } \item{default.units}{ A string indicating the default units to use if \code{x}, \code{y}, \code{width}, or \code{height} are only given as numeric vectors. } \item{just}{ The justification of the pattern relative to its (x, y) location. If there are two values, the first value specifies horizontal justification and the second value specifies vertical justification. Possible string values are: \code{"left"}, \code{"right"}, \code{"centre"}, \code{"center"}, \code{"bottom"}, and \code{"top"}. For numeric values, 0 means left alignment and 1 means right alignment. } \item{hjust}{ A numeric vector specifying horizontal justification. If specified, overrides the \code{just} setting. } \item{vjust}{ A numeric vector specifying vertical justification. If specified, overrides the \code{just} setting. } \item{label}{ A character identifier that will be used to reference this definition. } \item{mask}{ A \code{mask} object that defines the mask. } \item{\dots}{ Arguments to be given to \code{\link{mask}}. } } \details{ When registering the mask, the rectangular region that the mask applies to will become fixed. When referring to an opacity mask, the masked content will be opaque at the same coordinates that the mask is opaque. The same applies when there is any level of transparency, as any transparency in the mask will also apply in the same corresponding region of the masked object. The mask's opacity is defined as being the level of luminance present in the mask. This means anything black is fully transparent, while anything white is completely opaque. The background is assumed to be black (i.e. fully transparent). The \code{alpha} value in a mask will still be used, but its effect is combined with the computed opacity from the luminance of the mask. By using an opacity mask it is possible to have a grob with non-uniform opacity. In other words, rather than specifying an opacity via \code{\link{gpar}}'s \code{alpha} parameter, which is uniform across the grob, we can define varying opacities on a grob via an opacity mask. The \code{x}, \code{y}, \code{width}, \code{height} parameters determine the location and dimensions of the area to apply the mask to. This means we can apply a mask to any rectangular region, relative to the viewport in which it is defined (via \code{registerMask}). } \value{ For \code{mask}, a \code{mask} object. } \author{ Simon Potter } \seealso{ \code{\link{grid.mask}}, \code{\link{pushMask}}, \code{\link{popContext}}. } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/viewportCreate.Rd�����������������������������������������������������������������������0000654�0001762�0000144�00000004113�12215445653�015633� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{viewportCreate} \alias{viewportCreate} \title{ Recreate a viewport from imported coordinate information. } \description{ Creates a viewport object that is positioned in the same location as a previously exported viewport. The purpose of this function is so that we can recreate content for later manipulation. } \usage{ viewportCreate(vpname, newname = NULL, vpPath.sep = getSVGoption("vpPath.sep")) } \arguments{ \item{vpname}{ The name of the viewport to be recreated, as stored in coordinate information. This is most likely a viewport path. } \item{newname}{ The name that is going to be assigned to the viewport as it is re-created. If this parameter is \code{NULL}, then the name is taken to be the last viewport in listed in \code{vpname} (because it is usually a viewport path). } \item{vpPath.sep}{ The viewport path separator that was used for \code{vpname}. } } \details{ In order to use this function, coordinate information must be available to \code{gridSVG}. This means that viewport information must be imported using \code{\link{gridSVGCoords}}. The \code{ROOT} viewport must also have coordinate information imported because the created viewport is positioned relative to this. } \value{ A viewport object. } \author{ Simon Potter } \examples{\dontrun{ require(grid) grid.newpage() # Pushing a new VP to draw a rect within pushViewport(viewport(x = unit(0.3, "npc"), y = unit(0.2, "npc"), width = unit(0.1, "npc"), height = unit(0.3, "npc"), xscale = c(0, 20), yscale = c(0, 10), name = "testVP")) grid.rect() grid.export("create-test.svg", exportCoords = "file") # Importing coordinate information gridSVGCoords(readCoordsJS("create-test.svg.coords.js")) # This should appear to be the same rect grid.newpage() pushViewport(viewportCreate("testVP.1")) grid.rect() # Let's see if the scales are accurate, should be: # xscale: [0, 20] # yscale: [0, 10] current.viewport()$xscale current.viewport()$yscale }} �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/animate.Rd������������������������������������������������������������������������������0000654�0001762�0000144�00000002210�12164147372�014242� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{animate} \alias{animate} %- Also NEED an '\alias' for EACH other topic documented here. \title{ %% ~~function to do ... ~~ Convert animation specifications to SVG elements. } \description{ %% ~~ A concise (1-5 lines) description of what the function does. ~~ This function is used to generate \code{} elements based on animation information on a grob. It is generic so new grob classes can write their own methods. } \usage{ animate(x, dev) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ A grob. %% ~~Describe \code{x} here~~ } \item{dev}{ A graphics device. %% ~~Describe \code{dev} here~~ } } \details{ %% ~~ If necessary, more details than the description above ~~ This function is not called directly by the user. It is exposed so that new grob classes can easily write their own methods which call existing methods for standard grobs. } \author{ %% ~~who you are~~ Paul Murrell } %% ~Make other sections like Warning with \section{Warning }{....} ~ % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ dplot } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/grid.clipPath.Rd������������������������������������������������������������������������0000654�0001762�0000144�00000004126�12164147372�015324� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.clipPath} \alias{grid.clipPath} \alias{clipPathGrob} \title{ Apply a clipping path to a grid grob. } \description{ Creates a \code{pathClipped.grob} object which is a normal grid grob, with a clipping path applied to it. Used in conjunction with \code{registerClipPath}, to produce an SVG document containing graphical elements with masked content. } \usage{ grid.clipPath(path, clippath = NULL, label = NULL, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) clipPathGrob(x, clippath = NULL, label = NULL, group = TRUE) } \arguments{ \item{x}{ A grob to clip. } \item{path}{ A grob path specifying a drawn grob. } \item{clippath}{ A grob defining a clipping region. } \item{label}{ A label that is associated with a definition of a clipping path. This is the label used to make a clipping path definition with \code{registerClipPath}. } \item{group}{ A logical vector that indicates whether the opacity mask should be applied to the overall parent group for the relevant SVG element, or to individual SVG elements. } \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \details{ If \code{label} is specified, uses a clipping path that has been supplied to \code{registerClipPath}. If \code{clippath} is specified it will be used as the clipping path applied to each grob. If both are specified, it will attempt to define the clipping path with the given label, as well as applying the clipping path to the appropriate grobs. } \value{ A \code{pathClipped.grob} object (for \code{clipPathGrob}). } \author{ Simon Potter } \seealso{ \code{\link{registerClipPath}}, \code{\link{pushClipPath}}. } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/grid.comment.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000001547�12164147372�015226� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.comment} \alias{grid.comment} \alias{commentGrob} \title{ Create a grid grob representing a comment } \description{ Creates a \code{comment.grob} object which is a grid \code{\link{nullGrob}}, with a comment attached. Useful in conjunction with \code{grid.export}, to produce an SVG document with comments inserted at the point where the grob is \dQuote{drawn}. } \usage{ grid.comment(comment, name = NULL, vp = NULL) commentGrob(comment, name = NULL, vp = NULL) } \arguments{ \item{comment}{ A character vector used to write out a comment. If this has a length greater than one, each element is assumed to be a line. } \item{name}{ A character identifier. } \item{vp}{ The viewport to which the grob belongs. } } \value{ A \code{comment.grob} object. } \author{ Simon Potter } \seealso{ \code{\link{grid.export}} } \keyword{ dplot } ���������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feGaussianBlur.Rd�����������������������������������������������������������������������0000654�0001762�0000144�00000002165�14402220702�015531� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feGaussianBlur} \alias{feGaussianBlur} \title{ Apply a Gaussian blur to an image. } \description{ This filter effect primitive performs a Gaussian blur on the input image. } \usage{ feGaussianBlur(input = NA, sd = 0, ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{sd}{ The value of \code{sd} can be a numeric vector with either one or two elements. If two numbers are provided, the first number represents a standard deviation value along the x-axis of the current coordinate system and the second value represents a standard deviation in Y. If one number is provided, then that value is used for both X and Y. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.gaussian.blur} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/grid.animate.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000003657�12207503335�015177� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.animate} \alias{grid.animate} \alias{animateGrob} \title{ Animate a grid grob } \description{ Creates an animated.grob object. Useful in conjunction with \code{grid.export}, to produce an SVG document with animated graphical elements. } \usage{ animateGrob(grob, ..., duration=1, rep=FALSE, revert=FALSE, begin=0, interpolate="linear", group=FALSE) grid.animate(path, ..., group=FALSE, redraw = FALSE, strict=FALSE, grep=FALSE, global=FALSE) } \arguments{ \item{grob}{ A grob to add animation to. } \item{path}{ A grob path specifying a drawn grob. } \item{\dots}{ Arguments of the grob to animate. } \item{duration}{ The duration in seconds of the animation. } \item{rep}{ The number of times the animation should repeat. \code{FALSE} means once, \code{TRUE} means indefinitely. } \item{revert}{ What should happen when (if) the animation ends; \code{TRUE} means revert to the first animated value, \code{FALSE} means finish on the last animated value. } \item{begin}{ When the animation should begin (seconds). } \item{interpolate}{ A character value describing how animation values are interpreted. One of \code{linear} or \code{discrete}. } \item{group}{ A logical indicating whether the animation values should be applied to the overall group element in SVG or to individual SVG elements.} \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \value{ An animated.grob object. } \author{ Paul Murrell } \seealso{ \code{\link{grid.export}} } \keyword{ dplot } ���������������������������������������������������������������������������������gridSVG/man/filterInputs.Rd�������������������������������������������������������������������������0000654�0001762�0000144�00000006736�14402220540�015317� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{Filter Inputs} \alias{filterInputs} \title{ Identifies input for a filter effect primitive. } \description{ How to use and identify inputs for filter effect primitives. } \section{Filter Inputs}{ The value chosen for a filter effect primitive can be either one of six keywords or can be a string which matches a previous \code{result} attribute value within the same filter effect container. If no value is provided and this is the first filter effect primitive, then the input will be \code{SourceGraphic}. If no value is provided and this is a subsequent filter effect primitive, then this filter effect primitive will use the result from the previous filter primitive as its input. If the value for \code{result} appears multiple times within a given filter container, then a reference to that result will use the closest preceding filter primitive with the given value for the \code{result} results. Forward references to results are an error and will not draw. Definitions for the seven possible options: \itemize{ \item \code{SourceGraphic} This keyword represents the appearance of grobs before they are being filtered. For raster effects filter primitives, the grobs will be rasterized into an initially clear RGBA raster in image space. Pixels left untouched by the original graphic will be left clear. The image is specified to be rendered in linear RGBA pixels. The alpha channel of this image captures any anti-aliasing specified by SVG. (Since the raster is linear, the alpha channel of this image will represent the exact percent coverage of each pixel.) \item \code{SourceAlpha} This keyword represents the appearance of grobs before they are being filtered. \code{SourceAlpha} has all of the same rules as \code{SourceGraphic} except that only the alpha channel is used. The input image is an RGBA image consisting of implicitly black color values for the RGB channels, but whose alpha channel is the same as \code{SourceGraphic}. If this option is used, then some implementations might need to rasterize the graphics elements in order to extract the alpha channel. \item \code{BackgroundImage} This keyword represents an image snapshot of the canvas under the filter region at the time that the referring grob is being filtered. \item \code{BackgroundAlpha} Same as \code{BackgroundImage} except only the alpha channel is used. \item \code{FillPaint} This keyword represents the value of the \code{fill} property on the grob being filtered. The \code{FillPaint} image has conceptually infinite extent. Frequently this image is opaque everywhere, but it might not be if the "paint" itself has alpha, as in the case of a gradient or pattern which itself includes transparent or semi-transparent parts. \item \code{StrokePaint} This keyword represents the value of the \code{col} property on the grob being filtered. The \code{StrokePaint} image has conceptually infinite extent. Frequently this image is opaque everywhere, but it might not be if the "paint" itself has alpha, as in the case of a gradient or pattern which itself includes transparent or semi-transparent parts. \item The result of any filter effect operation. This is the name that has been given to the \code{result} argument of a filter primitive. } } \author{ Simon Potter } \references{ \url{https://www.w3.org/TR/SVG/filters.html#FilterPrimitiveInAttribute} } ����������������������������������gridSVG/man/grid.mask.Rd����������������������������������������������������������������������������0000654�0001762�0000144�00000004206�12164147372�014512� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.mask} \alias{grid.mask} \alias{maskGrob} \title{ Apply an opacity mask to a grid grob. } \description{ Creates a \code{masked.grob} object which is a normal grid grob, with an opacity mask applied to it. Used in conjunction with \code{registerMask}, to produce an SVG document containing graphical elements with masked content. } \usage{ grid.mask(path, mask = NULL, label = NULL, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) maskGrob(x, mask = NULL, label = NULL, group = TRUE) } \arguments{ \item{x}{ A grob to mask. } \item{path}{ A grob path specifying a drawn grob. } \item{mask}{ A \code{mask} object, provided by the \code{\link{mask}} function. Provides the definition of an opacity mask that will be applied to \code{x} or \code{path}. } \item{label}{ A label that is associated with a definition of an opacity mask. This is the label used to create an opacity mask definition with \code{registerMask}. } \item{group}{ A logical vector that indicates whether the opacity mask should be applied to the overall parent group for the relevant SVG element, or to individual SVG elements. } \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \details{ If \code{label} is specified, uses a mask that has been supplied to \code{registerMask}. If \code{mask} is specified it will be used as the opacity mask applied to each grob. If both are specified, it will attempt to define the opacity mask with the given label, as well as applying the mask to the appropriate grobs. } \value{ A \code{masked.grob} object (for \code{maskGrob}). } \author{ Simon Potter } \seealso{ \code{\link{registerMask}}, \code{\link{mask}}, \code{\link{pushMask}}. } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/grid.patternFill.Rd���������������������������������������������������������������������0000654�0001762�0000144�00000004551�12164147372�016046� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{grid.patternFill} \alias{grid.patternFill} \alias{patternFillGrob} \title{ Associate a pattern fill with a grid grob } \description{ Creates a patternFilled.grob object which is a normal grid grob, with a pattern fill used in place of a regular fill. Used in conjunction with \code{registerPatternFill}, to produce an SVG document containing graphical elements with pattern fills. } \usage{ grid.patternFill(path, pattern = NULL, label = NULL, alpha = 1, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) patternFillGrob(x, pattern = NULL, label = NULL, alpha = 1, group = TRUE) } \arguments{ \item{x}{ A grob to add a pattern fill to. } \item{pattern}{ A \code{pattern} object, provided by the \code{pattern} function. Provides the definition of a pattern fill that will be applied to \code{x} or \code{path}. } \item{label}{ A label that is associated with a definition of a pattern fill. This is the label used to create a pattern fill definition with \code{\link{registerPatternFill}}. } \item{path}{ A grob path specifying a drawn grob. } \item{alpha}{ The alpha channel for transparency. A value between 0 and 1. } \item{group}{ A logical vector that indicates whether the pattern fill should be applied to the overall parent group for the relevant SVG element, or to individual SVG elements. } \item{redraw}{ A logical value to indicate whether to redraw the grob. } \item{strict}{ A boolean indicating whether the \code{path} must be matched exactly. } \item{grep}{ Whether the \code{path} should be treated as a regular expression. } \item{global}{ A boolean indicating whether the function should affect just the first match of the \code{path}, or whether all matches should be affected. } } \details{ If \code{label} is specified, uses a pattern that has been supplied to \code{\link{registerPatternFill}}. If \code{pattern} is specified it will be used as the fill pattern applied to each grob. If both are specified, it will attempt to define the pattern with the given label, as well as applying a pattern fill to the appropriate grobs. } \value{ A patternFilled.grob object (for \code{patternFillGrob}). } \author{ Simon Potter } \seealso{ \code{\link{registerPatternFill}} } �������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/feOffset.Rd�����������������������������������������������������������������������������0000654�0001762�0000144�00000002302�14402220740�014353� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feOffset} \alias{feOffset} \title{ Offset an input image relative to its current position. } \description{ This filter primitive offsets the input image relative to its current position in the image space by the specified vector. This is important for effects like drop shadows. } \usage{ feOffset(input = NA, dx = unit(0, "npc"), dy = unit(0, "npc"), default.units = "npc", ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{dx}{ The amount to offset \code{input} by along the x-axis. } \item{dy}{ The amount to offset \code{input} by along the y-axis. } \item{default.units}{ A string indicating the default units to use if \code{dx} or \code{dy} are only given as numeric vectors. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.offset} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feOffsetElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}}, \code{\link{fe}}. } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/gridSVG.newpage.Rd����������������������������������������������������������������������0000654�0001762�0000144�00000001505�12164147372�015564� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{gridSVG.newpage} \alias{gridSVG.newpage} \title{ Move to a New Page on a gridSVG Device } \description{ This function erases the current device or moves to a new page. In addition, it clears any definitions of referenced content defined by gridSVG. } \usage{ gridSVG.newpage(wipeRefs = TRUE, recording = TRUE) } \arguments{ \item{wipeRefs}{ A logical value that determines whether referenced content should be deleted. } \item{recording}{ A logical value to indicate whether the new-page operation should be saved onto the Grid display list. } } \details{ When creating a gridSVG image, it is possible to create referenced content. An example is pattern fills. This function should be used in order to remove the definitions of referenced content. } \value{ None. } \author{ Simon Potter }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/registerPatternFill.Rd������������������������������������������������������������������0000654�0001762�0000144�00000007643�12164147372�016634� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{Pattern Fills} \alias{pattern} \alias{registerPatternFill} \alias{registerPatternFillRef} \title{ Create a definition of a fill pattern. } \description{ A feature of SVG is that elements can be filled with a pattern that is defined somewhere in the document. The purpose of these functions is to create the definition of a fill pattern so that it can be referred to by grobs drawn by gridSVG. } \usage{ pattern(grob, x = unit(0, "npc"), y = unit(0, "npc"), width = unit(0.1, "npc"), height = unit(0.1, "npc"), default.units = "npc", just = "centre", hjust = NULL, vjust = NULL, dev.width = 7, dev.height = 7) registerPatternFill(label, pattern = NULL, ...) registerPatternFillRef(label, refLabel, pattern = NULL, ...) } \arguments{ \item{label}{ A character identifier for the definition. } \item{refLabel}{ A character identifier referring to an existing pattern definition that has been created by \code{registerPatternFill}. } \item{pattern}{ A \code{pattern} object created by \code{pattern}. } \item{grob}{ A grid grob or tree of grobs. } \item{x}{ A numeric vector or unit object specifying x-location. } \item{y}{ A numeric vector or unit object specifying y-location. } \item{width}{ A numeric vector or unit object specifying width. } \item{height}{ A numeric vector or unit object specifying height. } \item{just}{ The justification of the pattern relative to its (x, y) location. If there are two values, the first value specifies horizontal justification and the second value specifies vertical justification. Possible string values are: \code{"left"}, \code{"right"}, \code{"centre"}, \code{"center"}, \code{"bottom"}, and \code{"top"}. For numeric values, 0 means left alignment and 1 means right alignment. } \item{hjust}{ A numeric vector specifying horizontal justification. If specified, overrides the \code{just} setting. } \item{vjust}{ A numeric vector specifying vertical justification. If specified, overrides the \code{just} setting. } \item{default.units}{ A string indicating the default units to use if \code{x}, \code{y}, \code{width}, or \code{height} are only given as numeric vectors. } \item{dev.width, dev.height}{ The width and height of the fill pattern's graphics region in inches. The default values are \code{7}. } \item{\dots}{ Arguments to be be passed onto \code{pattern}. } } \details{ The pattern fill is drawn off-screen on a new device. The size of this device is determined by \code{dev.width} and \code{dev.height}. The \code{grob} and \code{vp} that have been given are then drawn within this device. This is relevant for determining what the pattern definition looks like. The previous arguments do not determine the size of the pattern as it is being used (i.e. how big each "tile" is). This is set by the \code{x}, \code{y}, \code{width}, \code{height} arguments. The values of these arguments are relative to the current viewport as this function is being called. From then on, the definition of the location and size of the pattern are fixed. In summary, the \code{pattern} function defines what a pattern looks like, along with how big each tile is (and its position). To avoid repetition of pattern definitions, use \code{registerPatternFillRef} to reuse an existing pattern definition (referred to by \code{refLabel}). This means that a pattern "tile" can now be reused, repositioned and rescaled without having to describe how it needs to be drawn. In general use, first create a pattern object, then either give a label to the definition (for grobs to use), or alternatively simply pass on the pattern object to \code{\link{grid.patternFill}}. } \value{ A \code{pattern} object for \code{pattern}, none otherwise. } \author{ Simon Potter } \seealso{ \code{\link{grid.patternFill}} } ���������������������������������������������������������������������������������������������gridSVG/man/feSpecularLighting.Rd�������������������������������������������������������������������0000654�0001762�0000144�00000006464�14402220750�016407� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{feSpecularLighting} \alias{feSpecularLighting} \title{ Light an image using the alpha channel as a bump map. } \description{ This filter primitive lights a source graphic using the alpha channel as a bump map. The resulting image is an RGBA image based on the light colour. The lighting calculation follows the standard specular component of the Phong lighting model. The resulting image depends on the light colour, light position and surface geometry of the input bump map. The result of the lighting calculation is added. The filter primitive assumes that the viewer is at infinity in the z direction (i.e., the unit vector in the eye direction is (0,0,1) everywhere). This filter primitive produces an image which contains the specular reflection part of the lighting calculation. Such a map is intended to be combined with a texture using the add term of the arithmetic method in \code{\link{feComposite}}. Multiple light sources can be simulated by adding several of these light maps before applying it to the texture image. } \usage{ feSpecularLighting(input = NA, surfaceScale = 1, specularConstant = 1, specularExponent = 1, kernelUnitLength = NA, col = "white", lightSource = NULL, ...) } \arguments{ \item{input}{ Identifies an input for this filter primtive. See \code{\link{filterInputs}}. } \item{surfaceScale}{ Scale applied to the input alpha surface. } \item{specularConstant}{ \code{kd} in the Phong lighting model. Must be non-negative. } \item{specularExponent}{ Numeric exponent for specular term, larger is more "shiny". Range [1,128]. } \item{kernelUnitLength}{ The first number is the \code{dx} value. The second number is the \code{dy} value. If the \code{dy} value is not specified, it defaults to the same value as \code{dx}. Indicates the intended distance in current filter units (i.e., units as determined by the value of parent filter container's \code{primitiveUnits}) for \code{dx} and \code{dy}, respectively, in the surface normal calculation formulas. By specifying value(s) for \code{kernelUnitLength}, the kernel becomes defined in a scalable, abstract coordinate system. If \code{kernelUnitLength} is not specified, the \code{dx} and \code{dy} values should represent very small deltas relative to a given (x,y) position, which might be implemented in some cases as one pixel in the intermediate image offscreen bitmap, which is a pixel-based coordinate system, and thus potentially not scalable. } \item{col}{ The colour to apply to the light from \code{lightSource}. } \item{lightSource}{ A light source object, produced by one of \code{\link{feDistantLight}}, \code{\link{fePointLight}}, or \code{\link{feSpotLight}}. } \item{\dots}{ Further arguments to be passed onto \code{\link{fe}}. } } \details{ For more information about this primitive, consult the reference to the SVG specification. } \value{ An \code{fe.specular.lighting} object. } \references{ \url{https://www.w3.org/TR/SVG/filters.html#feSpecularLightingElement} } \author{ Simon Potter } \seealso{ \code{\link{filterEffect}} \code{\link{fe}}, \code{\link{feDistantLight}}, \code{\link{fePointLight}}, \code{\link{feSpotLight}}. } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/man/garnish.Rd������������������������������������������������������������������������������0000654�0001762�0000144�00000002171�12164147372�014265� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{garnish} \alias{garnish} %- Also NEED an '\alias' for EACH other topic documented here. \title{ %% ~~function to do ... ~~ Convert animation specifications to SVG elements. } \description{ %% ~~ A concise (1-5 lines) description of what the function does. ~~ This function is used to generate a list of SVG attributes based on information on a grob. It is generic so new grob classes can write their own methods. } \usage{ garnish(x, ...) } %- maybe also 'usage' for other objects documented here. \arguments{ \item{x}{ A grob. %% ~~Describe \code{x} here~~ } \item{...}{ For future use. %% ~~Describe \code{dev} here~~ } } \details{ %% ~~ If necessary, more details than the description above ~~ This function is not called directly by the user. It is exposed so that new grob classes can easily write their own methods which call existing methods for standard grobs. } \author{ %% ~~who you are~~ Paul Murrell } %% ~Make other sections like Warning with \section{Warning }{....} ~ % Add one or more standard keywords, see file 'KEYWORDS' in the % R documentation directory. \keyword{ dplot } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/DESCRIPTION���������������������������������������������������������������������������������0000654�0001762�0000144�00000001603�14402464642�013274� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Package: gridSVG Title: Export 'grid' Graphics as SVG Version: 1.7-5 Authors@R: c(person("Paul", "Murrell", role = c("cre", "aut"), email = "paul@stat.auckland.ac.nz"), person("Simon", "Potter", role = "aut", email = "simon@sjp.co.nz")) Description: Functions to export graphics drawn with package grid to SVG format. Additional functions provide access to SVG features that are not available in standard R graphics, such as hyperlinks, animation, filters, masks, clipping paths, and gradient and pattern fills. Imports: grDevices, graphics, utils, methods, grid, jsonlite, XML Suggests: lattice License: GPL NeedsCompilation: no Packaged: 2023-03-09 00:13:06 UTC; pmur002 Author: Paul Murrell [cre, aut], Simon Potter [aut] Maintainer: Paul Murrell Repository: CRAN Date/Publication: 2023-03-09 23:20:02 UTC �����������������������������������������������������������������������������������������������������������������������������gridSVG/build/��������������������������������������������������������������������������������������0000755�0001762�0000144�00000000000�14402222222�012646� 5����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/build/vignette.rds��������������������������������������������������������������������������0000644�0001762�0000144�00000000357�14402222222�015212� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������‹������…‘A‚0EKA‰QÃ=8Á…£Æ¸­RL(š ;/®8àÅh\tÚÿ^ÿ¤û1!„‹RBM8š”!¬Y#ˆEØ'LŠ”)‘I-+4çü¬¸,ÅA$B]Þî©Ñf·h­>Èé@šÜƒ i#àwŠ<Š¿§x5ºÕ¹oã 5ýFçíFᵈ'Š|Ùÿô- Å@ð@²”—Ø¢i…"áúƒ­P0WAˆGCG³žs•(GK~©²tÿ"§È*__6iÞú ¥®ëÛg¢cÂJH›ãˆ)æÇüêþ�•²[Å-�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/��������������������������������������������������������������������������������������0000755�0001762�0000144�00000000000�12616240501�012716� 5����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testgrid.R����������������������������������������������������������������������������0000654�0001762�0000144�00000004325�12215442555�014703� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Try to reproduce testsvg.R from grid library(grid) library(gridSVG) dev.new(width=6, height=6) # Force white background and black foreground pushViewport(viewport(gp=gpar(col="black", fill="white"))) grid.rect() # NOTE: that svg.R has transforms that assume that (0, 0) # is at bottom-left so y-locations and heights in "native" # coordinates on an X11 device are not # handled properly (by svg.R; grid draws them fine). # So for the outer viewport, we fudge an approximation to the # "pixel" locations in testsvg.R # Ultimate fix requires something in svg.R transforms (ty and th) # Also, the viewport pushed above means that the "native" # device coordinates are no longer available here pushViewport(viewport(unit(1, "mm"), unit(1, "mm"), unit(0.5, "npc"), unit(0.6, "npc"), just=c("left", "bottom"), xscale=c(0, 11), yscale=c(0, 11))) grid.rect(gp=gpar(col="green")) grid.lines(1:10, 10:1, default.units="native", gp=gpar(col="green")) grid.polygon(c(1, 3, 4, 1), c(1, 1, 5, 4), default.units="native", gp=gpar(fill="grey", col=NA)) grid.rect(rep(6, 2), c(3, 7), 2, 1, just=c("left", "bottom"), default.units="native", gp=gpar(fill="cyan")) grid.text(c("some text", "some more text!"), 2, 8:7, just="left", default.units="native") grid.circle(rep(8, 2), 3, c(.1, 2), default.units="native", gp=gpar(col="blue", fill=NA)) grid.text("centred text", 4, 5, default.units="native", rot=20) pushViewport(viewport(x=6, y=5, w=3, h=1, default.units="native", just=c("left", "bottom"), xscale=c(0, 1), yscale=c(0, 1))) grid.rect(0, 0, 1, 1, just=c("left", "bottom"), default.units="native", gp=gpar(fill=NA, col="black")) grid.text("text in a box", 0.1, 0.5, just=c("left", "bottom"), default.units="native") popViewport() grid.rect(5, 2, 2, 7, default.units="native", just=c("left", "bottom"), gp=gpar(fill="green", alpha=.5)) popViewport() popViewport() grid.export("grid.svg") dev.off() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testgradientfill.R��������������������������������������������������������������������0000654�0001762�0000144�00000001433�12215442555�016417� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) pdf(file = NULL) # Define a linear gradient lg <- linearGradient(col = c("blue", "red")) # Register it registerGradientFill("lingrad", lg) # Do the same thing for radial gradient but also set the focus for the # radial fill to be off-centre rg <- radialGradient(fx = 0.3, fy = 0.3, col = c("white", "black"), stops = c(0, 2)) registerGradientFill("radgrad", rg) # Create rects that we are going to be gradient filling grid.rect(x = 0.2, width = 0.2, height = 0.2, name = "linearfill") grid.rect(x = 0.8, width = 0.2, height = 0.2, name = "radialfill") # Now apply the gradients grid.gradientFill("linearfill", label = "lingrad", alpha = 0.7) grid.gradientFill("radialfill", label = "radgrad") grid.export("gradient-test.svg") dev.off() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testid.R������������������������������������������������������������������������������0000654�0001762�0000144�00000000407�12215442555�014347� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ library(grid) library(gridSVG) # A very simple test dev.new(width=6, height=6) # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) grid.circle(r=4:1/8, name="circgrob") grid.rect(name="rectgrob") popViewport() grid.export() dev.off() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testsvg.R�����������������������������������������������������������������������������0000654�0001762�0000144�00000003067�13430134367�014556� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) svgdev <- svgOpen(width=400, height=400) svgRect(0, 0, 400, 400, style=svgStyle(fill="none", stroke="black"), svgdev=svgdev) svgStartGroup(svgdev=svgdev) svgRect(2, 2, 240, 320, style=svgStyle(fill="none", stroke="green"), svgdev=svgdev) svgLines(c(23.81, 45.63, 67.45, 89.27, 111.09, 132.90, 154.72, 176.54, 198.36, 220.18), c(292.90, 263.81, 234.72, 205.63, 176.54, 147.45, 118.36, 89.27, 60.18, 31.09), style=svgStyle(stroke="green"), svgdev=svgdev) svgPolygon(c(23.81, 67.45, 89.27, 23.81), c(31.09, 31.09, 147.45, 118.36), style=svgStyle(fill="grey"), svgdev=svgdev) svgRect(132.90, 89.27, 43.63, 29.09, style=svgStyle(fill="cyan"), svgdev=svgdev) svgText(45.63, 234.728, "some text", style=svgStyle(fill="red"), svgdev=svgdev) svgCircle(176.54, 89.27, 2.18, style=svgStyle(stroke="blue", fill="none"), svgdev=svgdev) svgText(89.27, 147.45, "centred text", hjust="centre", vjust="centre", rot=20, style=svgStyle(fill="yellow", stroke="black"), svgdev=svgdev) svgStartGroup(svgdev=svgdev) svgRect(132.90, 147.45, 65.45, 29.09, style=svgStyle(fill="none", stroke="black"), svgdev=svgdev) svgText(139.45, 162, "text in a box", svgdev=svgdev) svgEndGroup(svgdev=svgdev) svgRect(111.09, 60.18, 43.63, 203.63, style=svgStyle(fill="green", opacity=.5), svgdev=svgdev) svgEndGroup(svgdev=svgdev) svgClose(svgdev) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testplotmath.R������������������������������������������������������������������������0000654�0001762�0000144�00000005675�12215442556�015620� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) ################## # Testing ################## # Test of a combination of shape and plotmath library(gridSVG) grid.newpage() grid.rect(x=.4, width=.4, height=.8, gp=gpar(fill="grey", col=NA)) grid.text(expression((a + b)^2), x=.4, y=.6) grid.export("test2.svg") test <- function(e, file, cex=1) { require(grid) require(gridSVG) grid.newpage() grid.rect() nrowcol <- n2mfrow(length(e)) pushViewport(viewport(layout=grid.layout(nrowcol[1], nrowcol[2]))) for (i in 1:length(e)) { col <- (i - 1) %% nrowcol[2] + 1 row <- (i - 1) %/% nrowcol[2] + 1 pushViewport(viewport(layout.pos.row=row, layout.pos.col=col)) grid.segments(c(0, .5), c(.5, 0), c(1, .5), c(.5, 1), gp=gpar(col="grey")) just <- c("left", "bottom") tg <- textGrob(e[i], gp=gpar(cex=cex[(i - 1) %% length(cex) + 1]), just=just) grid.rect(width=grobWidth(tg), height=grobHeight(tg), just=just, gp=gpar(col="red")) grid.draw(tg) popViewport() } grid.export(file) grid.refresh() } test(expression( x + y, x + y, x + y, x - y, x / y, x * y, x %+-% y, x %/% y, x %*% y, x %.% y, x[i], x^2, paste(x, y, z), sqrt(x), sqrt(x, y), X + Y, a * b, a == b, x != y, x < y, x <= y, x > y, x >= y, x %~~% y, x %=~% y, x %==% y, x %prop% y, bolditalic(x + plain(y + italic(z + bold(k)))), , # space symbol("m") + symbol("\042"), list(x, y, z), 1*...*n, 1*cdots*n, 1*ldots*n, x %subset% y, x %subseteq% y, x %notsubset% y, x %supset% y, x %supseteq% y, x %in% y, x %notin% y), "testml-1.svg", cex <- c(1, 1.5, .5, rep(1, 100))) test(expression( hat(x), hat(xyz), tilde(x), dot(x), ring(x), bar(x), widehat(xyz), widetilde(xyz), x %<->% y, x %->% y, x %<-% y, x %up% y, x %down% y, x %<=>% y, x %=>% y, x %<=% y, x %dblup% y, x %dbldown% y, alpha - omega, Alpha - Omega, theta1*phi1*sigma1*omega1, Upsilon1, aleph, infinity, partialdiff, nabla, 32*degree, 60*minute, 30*second, displaystyle(sum(x[i], i==1, n)), textstyle(sum(x[i], i==1, n)), textstyle(x[i]), scriptstyle(x[i]), scriptscriptstyle(x[i]), underline(xyz), x ~~ y, x + phantom(0) + y, x + over(1, phantom(0)), frac(x, y), over(x, y), atop(x, y), ), "testml-2.svg") test(expression( sum(x[i], i==1, n), prod(plain(P)(X==x), x), integral(f(x)*dx, a, b), union(A[i], i==1, n), intersect(A[i], i==1, n), lim(f(x), x %->% 0), min(g(x), x > 0), inf(S), sup(S), x^y + z, x^(y + z), x^{y + z}, group("(", list(a, b), "]"), bgroup("(", atop(x, y), ")"), group(lceil, x, rceil), ), "testml-3.svg") �������������������������������������������������������������������gridSVG/tests/testprefix.R��������������������������������������������������������������������������0000654�0001762�0000144�00000000440�12215442556�015246� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) pdf(file = NULL) pushViewport(viewport()) grid.rect() grid.circle(name = "mycircle") grid.text("hello, world!") popViewport() # All IDs should now be exported with the prefix "TESTPREFIX" grid.export("test-prefixes.svg", prefix = "TESTPREFIX") dev.off() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testball.R����������������������������������������������������������������������������0000654�0001762�0000144�00000004357�12215442555�014675� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(lattice) library(gridSVG) postscript(width=8, height=6, paper="special") # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) y <- 1:4 x <- 1:4 g <- factor(c("Earth", "Moon", "Jupiter", "Mars")) n <- 30 d <- 20 # metres k <- c(9.8, 1.6, 24.8, 3.7) # gravities times <- 2 * sqrt(d/k) # (twice) the time taken to fall d metres cx <- unit(rep(0.5, 2*n - 1), "npc") dy <- 10*seq(0, 2, length=n)^2 ecy <- unit(40 - c(dy, rev(dy)[-1]), "native") ballpanel <- function(x, y, subscripts) { pushViewport(viewport(yscale=c(-10, 50))) grid.rect(y=unit(0, "npc"), height=unit(10, "native"), just="bottom", gp=gpar(fill="grey")) duration <- switch(subscripts, times[1], times[2], times[3], times[4]) col <- switch(subscripts, "blue", "grey", "brown", "red") grid.circle(name=col, x=cx[1], y=ecy[1], # r=unit(2, "mm"), r=unit(1, "native"), gp=gpar(col="black", fill=col)) grid.animate(col, x=cx, y=ecy, duration=duration, rep=TRUE) if (subscripts == 1) { grid.text("20 metres", x=unit(-1, "lines"), y=unit(20, "native"), just="bottom", rot=270) grid.lines(x=unit(-1, "lines"), y=unit.c(unit(0, "native"), unit(20, "native") - unit(0.5, "strwidth", "40 metres") - unit(2, "mm"))) grid.lines(x=unit(c(-.75, -1.25), "lines"), y=unit(0, "native")) grid.lines(x=unit(-1, "lines"), y=unit.c(unit(40, "native"), unit(20, "native") + unit(0.5, "strwidth", "40 metres") + unit(2, "mm"))) grid.lines(x=unit(c(-.75, -1.25), "lines"), y=unit(40, "native")) } popViewport() } print(xyplot(y ~ x | g, subscripts=TRUE, layout=c(4, 1), xlab=NULL, ylab=NULL, panel=ballpanel, scales=list(draw=FALSE)), position=c(0.1, 0.1, 0.9, 0.9), newpage=FALSE) popViewport() grid.export("ball.svg") dev.off() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testelement.R�������������������������������������������������������������������������0000654�0001762�0000144�00000001150�12215442555�015400� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) dev.new(width=6, height=6) grid.element("test") grid.element("testParent", children = gList(commentGrob("This is a child comment"), elementGrob("firstChild"), rectGrob(), elementGrob("thirdChild", attrs = list(anAttrib = "value")))) # Create a 'title' element with descriptive text grid.element("title", children = gList( textNodeGrob("A gridSVG image with customised SVG content"))) grid.export("element-test.svg") dev.off() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testattrib.R��������������������������������������������������������������������������0000654�0001762�0000144�00000002674�12410700007�015232� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ library(grid) library(gridSVG) # A very simple test dev.new(width=6, height=6) # Test script chunk grid.script(file="test.script") # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) grid.circle(r=0.1, gp=gpar(fill="red"), name="circgrob") # Test setting SVG attribute grid.garnish("circgrob", onclick="circle_click(evt)") popViewport() grid.export() dev.off() # Single attribute value on single grob grid.newpage() grid.circle(r=.1, gp=gpar(fill="black"), name="c") grid.garnish("c", onmousedown="alert('ouch')") grid.export("testattrcircle.svg") # Multiple attribute values on single grob grid.newpage() pushViewport(viewport()) grid.points(1:3/4, 1:3/4, pch=c(1, 10, 16), name="p") grid.garnish("p", onmousedown=c("alert('pch=1')", "alert('pch=10')", "alert('pch=16')"), group=FALSE) grid.export("testattrpoints.svg") # Multiple garnishes (one with single value, one with multiple values) grid.newpage() grid.circle(x=1:3/4, r=.1, gp=gpar(fill="black"), name="c") grid.garnish("c", onmouseover=c("alert('c1')", "alert('c2')", "alert('c3')"), group=FALSE) grid.garnish("c", onmousedown="alert('click me!')") grid.export("testmultattr.svg") # Sneak an SVG attribute through via gpar() grid.newpage() grid.text("test", gp=gpar("text-decoration"="line-through"), name="tt") grid.export("testsvgattr.svg") ��������������������������������������������������������������������gridSVG/tests/testplot.R����������������������������������������������������������������������������0000654�0001762�0000144�00000000374�12215442556�014735� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ library(grid) library(gridSVG) dev.new(width=6, height=6) grid.rect(gp=gpar(col="black", fill=NA)) set.seed(1000) grid.multipanel(vp=viewport(w=.7, h=.7, gp=gpar(col="black", fill=NA)), newpage=FALSE) grid.export("plot.svg") dev.off() ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testpolyline.R������������������������������������������������������������������������0000654�0001762�0000144�00000000371�12215442556�015607� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ library(grid) require(gridSVG) grid.polyline(x=outer(c(0, .5, 1, .5), 5:1/5), y=outer(c(.5, 1, .5, 0), 5:1/5), id.lengths=rep(4, 5), gp=gpar(col=1:5, lwd=3)) grid.export("polyline.svg") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testmask.R����������������������������������������������������������������������������0000654�0001762�0000144�00000003134�12215442555�014706� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) pdf(file = NULL) # Create the definition of an opacity mask, in this case # it will just be a circle with a gradient fill. rg <- radialGradient(col = c("white", "black")) m <- mask(gradientFillGrob(circleGrob(), gradient = rg)) # Register the opacity mask so that we can refer to it and apply it. registerMask("circleMask", m) # Creating a simple plot that will be masked to the circle sp <- gTree(name = "simplePlot", children = gList(xaxisGrob(), yaxisGrob(), rectGrob(gp = gpar(fill = "grey"))), vp = plotViewport()) grid.draw(sp) # Now lets mask it grid.mask("simplePlot", label = "circleMask") # Alternatively we could also do this which avoids the need to call # 'registerMask' explicitly # grid.mask("simplePlot", m) grid.export("mask-simpleplot.svg") dev.off() # Now lets recreate the previous example using 'pushMask' pdf(file = NULL) # Clear previous mask reference gridSVG.newpage() # Create the definition of an opacity mask, in this case # it will just be a circle with a gradient fill. rg <- radialGradient(col = c("white", "black")) m <- mask(gradientFillGrob(circleGrob(), gradient = rg)) # Create a new masking context for this viewport pushMask(m) # Creating a simple plot that will be masked to our current masking context sp <- gTree(name = "simplePlot", children = gList(xaxisGrob(), yaxisGrob(), rectGrob(gp = gpar(fill = "grey"))), vp = plotViewport()) grid.draw(sp) # End the masking context popMask() grid.export("pushmask-simpleplot.svg") dev.off() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testpendulum.R������������������������������������������������������������������������0000654�0001762�0000144�00000004435�12215442555�015611� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) dev.new(width=6, height=6) grid.newpage() # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) n <- 30 L <- 50 #mm A <- 20 #mm t <- seq(0, 2*pi, length=n) x <- A*cos(t) v <- -A*sin(t) theta <- atan(x/L) y <- L*cos(theta) pushViewport(viewport(layout=grid.layout(4, 1, widths=unit(2.2*A, "null"), heights=unit(c(1, L + 10, 2.2*A, 2), c("lines", "null", "null", "lines")), respect=TRUE))) pushViewport(viewport(layout.pos.row=2, xscale=A * c(-1.1, 1.1), yscale=c(0, L + 10))) grid.rect() grid.lines(name="chain", x=unit(c(0.5, x[1]), c("npc", "native")), y=unit(1, "npc") - unit(c(0, abs(y)[1]), c("npc", "native"))) grid.animate("chain", x=animUnit(unit(c(rep(0.5, n), x), c(rep(c("npc", "native"), each=n))), timeid=rep(1:n, 2)), y=animUnit(unit.c(unit(rep(1, n), "npc"), unit(1, "npc") - unit(y, "native")), timeid=rep(1:n, 2)), duration=5, rep=TRUE) grid.circle(name="weight", x=unit(x[1], "native"), y=unit(1, "npc") - unit(y[1], "native"), r=unit(1, "mm"), gp=gpar(fill="black")) grid.animate("weight", x=unit(x, "native"), y=unit(1, "npc") - unit(abs(y), "native"), duration=5, rep=TRUE) popViewport() pushViewport(viewport(layout.pos.row=3, xscale=A * c(-1.1, 1.1), yscale=A * c(-1.1, 1.1))) grid.rect() grid.lines(x=unit(c(0, 0), "native"), gp=gpar(lty="dashed", col="grey")) grid.lines(y=unit(c(0, 0), "native"), gp=gpar(lty="dashed", col="grey")) grid.text("Displacement", y=unit(-1, "lines")) grid.text("Velocity", x=unit(-1, "lines"), rot=90) grid.circle(name="key", x=unit(x[1], "native"), y=unit(v[1], "native"), r=unit(1, "mm"), gp=gpar(fill="black")) grid.animate("key", x=unit(x, "native"), y=unit(v, "native"), duration=5, rep=TRUE) popViewport(2) popViewport() grid.export("pendulum.svg") dev.off() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testpath.R����������������������������������������������������������������������������0000654�0001762�0000144�00000000115�12215442555�014703� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ library(grid) require(gridSVG) example(grid.path) grid.export("path.svg") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testanimate.R�������������������������������������������������������������������������0000654�0001762�0000144�00000041037�12215442555�015375� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) # animValues animValue(letters[1:4]) animValue(letters[1:4], timeid=rep(1:2, 2)) animValue(letters[1:4], id=rep(1:2, 2)) as.animValue(letters[1:4]) as.animValue(matrix(letters[1:12], ncol=4)) as.animValue(matrix(letters[1:12], ncol=4), multVal=TRUE) as.animValue(list(letters[1:3], letters[4:6])) as.animValue(list(letters[1:3], letters[4:6]), multVal=TRUE) # animUnits animUnit(unit(1:4, "npc")) animUnit(unit(1:4, "npc"), timeid=rep(1:2, 2)) animUnit(unit(1:4, "npc"), id=rep(1:2, 2)) as.animUnit(1:4, "npc") as.animUnit(unit(1:4, "npc")) as.animUnit(matrix(1:12, ncol=4), "in") as.animUnit(matrix(1:12, ncol=4), "in", multVal=TRUE) as.animUnit(list(unit(1:3, "npc"), unit(4:6, "in"))) as.animUnit(list(unit(1:3, "npc"), unit(4:6, "in")), multVal=TRUE) # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) grid.rect(name="rect", x=0, y=0, just=c("left", "bottom")) grid.animate("rect", x=unit(0:30, "mm"), duration=5, rep=TRUE) grid.circle(name="circle", x=unit(0.5, "npc") + unit(0, "mm"), r=unit(10, "mm")) grid.animate("circle", x=unit(0.5, "npc") + unit(0:30, "mm"), duration=5, rep=TRUE) grid.text("hello", name="text1", x=unit(0.3, "npc") + unit(0, "mm")) grid.animate("text1", x=unit(0.3, "npc") + unit(0:30, "mm"), duration=5, rep=TRUE) grid.text("hello", name="text2", x=unit(0.3, "npc") + unit(0, "mm"), y=unit(0.3, "npc") + unit(0, "mm")) grid.animate("text2", x=unit(0.3, "npc") + unit(0:30, "mm"), y=unit(0.3, "npc") + unit(0:30, "mm"), duration=5, rep=TRUE) popViewport() grid.export("animate.svg") # Animating rectangles # There are numerous possibilities to consider: # The animation values could be numeric, unit, matrix, or list # The original values could spec a single rect or multiple rects # We could animate only one of x/y/width/height or several of them at once # Simple case # (single rect, anim only x, anim values are just numeric) grid.newpage() grid.text("One rectangle moves across", y=unit(1, "lines")) grid.rect() grid.rect(x=.2, y=.2, width=.1, height=.1, name="rect") grid.animate("rect", x=c(.2, .8), duration=3) grid.export("anim-rect-simple.svg") # Complex case # (multiple rects, anim x/y/width/height, anim values are matrices and lists) grid.newpage() grid.text("Three rectangles: one goes up, one goes across, and one goes diagonal and gets smaller", y=unit(1, "lines")) grid.rect() grid.rect(x=rep(.2, 3), y=.2, width=.1, height=.1, name="rect") grid.animate("rect", x=cbind(c(.2, .8), c(.2, .8), .2), y=cbind(.2, c(.2, .8), c(.2, .8)), width=list(unit(.1, "npc"), unit(c(.1, 1), c("npc", "cm")), unit(.1, "npc")), height=list(unit(.1, "npc"), unit(c(.1, 1), c("npc", "cm")), unit(.1, "npc")), duration=3) grid.export("anim-rect-complex.svg") # Animating circles # Complex case # (multiple circles, anim x/y/width/height, anim values are matrices and lists) grid.newpage() grid.text("Three circles: one goes up, one goes across, and one goes diagonal and gets smaller", y=unit(1, "lines")) grid.rect() grid.circle(x=rep(.2, 3), y=.2, r=.1, name="circle") grid.animate("circle", x=cbind(c(.2, .8), c(.2, .8), .2), y=cbind(.2, c(.2, .8), c(.2, .8)), r=list(unit(.1, "npc"), unit(c(.1, 1), c("npc", "cm")), unit(.1, "npc")), duration=3) grid.export("anim-circle-complex.svg") # Animating points # Complex case # (multiple circles, anim x/y/width/height, anim values are matrices and lists) grid.newpage() grid.text("Three points: one goes up, one goes across, and one goes diagonal and gets larger", y=unit(1, "lines")) grid.rect() pushViewport(viewport()) grid.points(x=rep(.2, 3), y=rep(.2, 3), size=unit(2, "mm"), name="points") grid.animate("points", x=cbind(c(.2, .8), c(.2, .8), .2), y=cbind(.2, c(.2, .8), c(.2, .8)), size=list(unit(2, "mm"), unit(c(2, .1), c("mm", "npc")), unit(2, "mm")), duration=3) grid.export("anim-points-complex.svg") # Animating text # Complex case # (multiple text, anim x/y/width/height, anim values are matrices and lists) grid.newpage() grid.text("Three letters: one goes up, one goes across, and one goes diagonal", y=unit(1, "lines")) grid.rect() grid.text(letters[1:3], x=rep(.2, 3), y=.2, name="text") grid.animate("text", x=cbind(c(.2, .8), c(.2, .8), .2), y=cbind(.2, c(.2, .8), c(.2, .8)), duration=3) grid.export("anim-text-complex.svg") # Animating lines # Simple case # (line only has two points, animation only has two points, only animate x) grid.newpage() grid.text("45 degree line becomes vertical", y=unit(1, "lines")) grid.rect() grid.lines(c(.1, .9), c(.1, .9), name="lines") grid.animate("lines", x=cbind(c(.1, .9), c(.5, .5)), duration=3) grid.export("anim-lines-simple.svg") # Complex case # (line has many points, animation has three points, only animate y) x <- seq(-pi, pi, length.out=100) y <- sin(x) grid.newpage() grid.text("Sine curve becomes flat then inverts (on y)", y=unit(1, "lines")) grid.rect() pushViewport(dataViewport(x, y)) grid.lines(x, y, default.units="native", name="lines") grid.animate("lines", y=cbind(y, 0, -y), duration=3) grid.export("anim-lines-complex.svg") # Animating polylines # Simple case # (line only has two points, animation only has two points, only animate x) grid.newpage() grid.text("Two parallel lines slide to the right", y=unit(1, "lines")) grid.rect() grid.polyline(c(.1, .2, .3, .4), c(.1, .9, .1, .9), id=rep(1:2, each=2), name="polyline") grid.animate("polyline", x=animUnit(unit(c(.1, .2, .3, .4, .5, .6, .7, .8), unit="npc"), id=rep(rep(1:2, each=2), 2), timeid=rep(1:2, each=4)), duration=3) grid.export("anim-polyline-simple.svg") # Complex case # (line only has many points, animation only has many points, animate x and y) grid.newpage() grid.text("Two random walks", y=unit(1, "lines")) grid.rect() n <- 50 x <- 1:n set.seed(1000) y1 <- runif(n, .6, .8) y2 <- runif(n, .2, .4) pushViewport(dataViewport(x, yscale=0:1)) grid.polyline(rep(x[1:2], 2), c(y1[1:2], y2[1:2]), default.units="native", id=rep(1:2, each=2), name="polyline") grid.animate("polyline", x=animUnit(unit(rep(x[unlist(lapply(2:n, seq))], 2), "native"), id=rep(1:2, each=sum(2:n)), timeid=rep(1:(n - 1), 2:n)), y=animUnit(unit(c(y1[unlist(lapply(2:n, seq))], y2[unlist(lapply(2:n, seq))]), "native"), id=rep(1:2, each=sum(2:n)), timeid=rep(1:(n - 1), 2:n)), duration=10) grid.export("anim-polyline-complex.svg") # Animating segments # Simple case # (single segment, animation only has two values, only animate x0) grid.newpage() grid.text("45 degree line becomes vertical (on right)", y=unit(1, "lines")) grid.rect() grid.segments(.1, .1, .9, .9, name="segments") grid.animate("segments", x0=c(.1, .9), duration=3) grid.export("anim-segments-simple.svg") # Complex case # (multiple segments, animation has three values, animate x0 and y0) grid.newpage() grid.text("crossed lines swing out to vertical then shorten", y=unit(1, "lines")) grid.rect() grid.segments(c(.1, .9), .1, c(.9, .1), .9, name="segments") grid.animate("segments", x0=cbind(c(.1, .9, .9), c(.9, .1, .1)), y0=c(.1, .1, .5), duration=3) grid.export("anim-segments-complex.svg") # Animating polygons # Simple case # (polygon only has three points, # animation only has two points, only animate x) grid.newpage() grid.text("Single polygon slides to the right", y=unit(1, "lines")) grid.rect() grid.polygon(c(.1, .2, .3), c(.4, .6, .4), name="polygon") grid.animate("polygon", x=animUnit(unit(c(.1, .2, .3, .7, .8, .9), unit="npc"), timeid=rep(1:2, each=3)), duration=3) grid.export("anim-polygon-simple.svg") # Complex case # (two polygons, animation has many points, animate x and y) grid.newpage() grid.text("Two polygons shrink and grow (flipped) then revert", y=unit(1, "lines")) grid.rect() grid.polygon(c(.2, .3, .4, .6, .7, .8), c(.4, .6, .4, .6, .4, .6), id=rep(1:2, each=3), name="polygon") grid.animate("polygon", x=animUnit(unit(c(.2, .3, .4, .4, .3, .2, .2, .3, .4, .6, .7, .8, .8, .7, .6, .6, .7, .8), "npc"), id=rep(1:2, each=9), timeid=rep(rep(1:3, each=3), 2)), y=animUnit(unit(c(.4, .6, .4, .6, .4, .6, .4, .6, .4, .6, .4, .6, .4, .6, .4, .6, .4, .6), "npc"), id=rep(1:2, each=9), timeid=rep(rep(1:3, each=3), 2)), duration=5) grid.export("anim-polygon-complex.svg") # Animating paths # Simple case # (path has one sub-path, # animation only has two points, only animate x) grid.newpage() grid.text("Single simple path (triangle) slides to the right", y=unit(1, "lines")) grid.rect() grid.path(c(.1, .2, .3), c(.4, .6, .4), gp=gpar(fill="black"), name="path") grid.animate("path", x=animUnit(unit(c(.1, .2, .3, .7, .8, .9), unit="npc"), timeid=rep(1:2, each=3)), duration=3) grid.export("anim-path-simple.svg") # Complex case # (two polygons, animation has many points, animate x and y) grid.newpage() grid.text("Single complex path transmogrifies as it slides to the right", y=unit(1, "lines")) grid.rect() grid.path(c(.1, .1, .4, .4, .2, .2, .3, .3), c(.2, .8, .8, .2, .4, .6, .6, .4), id=rep(1:2, each=4), rule="evenodd", gp=gpar(fill="black"), name="path") grid.animate("path", x=animUnit(unit(c(.1, .1, .4, .4, .2, .2, .3, .3, .35, .35, .65, .65, .45, .45, .55, .55, .6, .6, .9, .9, .7, .7, .8, .8), unit="npc"), id=rep(rep(1:2, each=4), 3), timeid=rep(1:3, each=8)), y=animUnit(unit(c(.2, .8, .8, .2, .4, .6, .6, .4, .4, .6, .6, .4, .2, .8, .8, .2, .2, .8, .8, .2, .4, .6, .6, .4), unit="npc"), id=rep(rep(1:2, each=4), 3), timeid=rep(1:3, each=8)), duration=3) grid.export("anim-path-complex.svg") # Simple case # (single raster, anim only x, anim values are just numeric) grid.newpage() grid.text("One raster moves across", y=unit(1, "lines")) grid.rect() grid.raster(1:10/11, x=.2, y=.2, width=.1, height=.1, name="raster") grid.animate("raster", x=c(.2, .8), duration=3) grid.export("anim-raster-simple.svg") # Complex case # (multiple rasters, anim x/y/width/height, anim values are matrices and lists) grid.newpage() grid.text("Three rasters: one goes up, one goes across, and one goes diagonal and gets smaller", y=unit(1, "lines")) grid.rect() grid.raster(1:10/11, x=rep(.2, 3), y=.2, width=.1, height=.1, name="raster") grid.animate("raster", x=cbind(c(.2, .8), c(.2, .8), .2), y=cbind(.2, c(.2, .8), c(.2, .8)), width=list(unit(.1, "npc"), unit(c(.1, 1), c("npc", "cm")), unit(.1, "npc")), height=list(unit(.1, "npc"), unit(c(.1, 1), c("npc", "cm")), unit(.1, "npc")), duration=3) grid.export("anim-raster-complex.svg") # Simple case # (single xspline, anim only x, anim values are just numeric) grid.newpage() grid.text("Two xsplines move across", y=unit(1, "lines")) grid.rect() grid.xspline(c(.3, .1, .5, .3), c(.2, .5, .5, .2), open=TRUE, shape=1, name="xspline-1") grid.xspline(c(.3, .1, .5), c(.6, .9, .9), open=FALSE, shape=1, gp=gpar(fill="grey"), name="xspline-2") grid.animate("xspline-1", x=animUnit(unit(c(.3, .1, .5, .3, .7, .5, .9, .7), "npc"), timeid=rep(1:2, each=4)), duration=3) grid.animate("xspline-2", x=cbind(c(.3, .1, .5), c(.7, .5, .9)), duration=3) grid.export("anim-xspline-simple.svg") # Complex case # (four xsplines, animation has many points, animate x and y) grid.newpage() grid.text("Four xsplines shrink and grow (flipped) then revert", y=unit(1, "lines")) grid.rect() grid.xspline(c(.3, .1, .5, .3, .7, .5, .9, .7), c(.2, .5, .5, .2, .2, .5, .5, .2), shape=1, id=rep(1:2, each=4), name="xspline-open") grid.xspline(c(.3, .1, .5, .7, .5, .9), c(.6, .9, .9, .6, .9, .9), open=FALSE, shape=1, gp=gpar(fill="grey"), id=rep(1:2, each=3), name="xspline-closed") grid.animate("xspline-open", x=animUnit(unit(c(.3, .1, .5, .3, .5, .3, .7, .5, .7, .5, .9, .7, .7, .5, .9, .7, .5, .3, .7, .5, .3, .1, .5, .3), "npc"), id=rep(1:2, each=12), timeid=rep(rep(1:3, each=4), 2)), y=animUnit(unit(c(.2, .5, .5, .2, .5, .2, .2, .5, .2, .5, .5, .2, .2, .5, .5, .2, .5, .2, .2, .5, .2, .5, .5, .2), "npc"), id=rep(1:2, each=12), timeid=rep(rep(1:3, each=4), 2)), duration=5) grid.animate("xspline-closed", x=animUnit(unit(c(.3, .1, .5, .5, .3, .7, .7, .5, .9, .7, .5, .9, .5, .3, .7, .3, .1, .5), "npc"), id=rep(1:2, each=9), timeid=rep(rep(1:3, each=3), 2)), y=animUnit(unit(c(.6, .9, .9, .9, .6, .6, .6, .9, .9, .6, .9, .9, .9, .6, .6, .6, .9, .9), "npc"), id=rep(1:2, each=9), timeid=rep(rep(1:3, each=3), 2)), duration=5) grid.export("anim-xspline-complex.svg") ############################################ # Multiple animations on same grob grid.newpage() grid.rect(x=.1, y=.1, width=.1, height=.1, name="r") grid.animate("r", x=c(.1, .9)) grid.animate("r", x=c(.9, .1), begin=3) grid.export("anim-rect-multi.svg") # Animate group grid.newpage() grid.rect(x=.1, y=.1, width=.1, height=.1, name="r") grid.animate("r", visibility=c("visible", "hidden"), group=TRUE) grid.export("anim-group.svg") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testcomment.R�������������������������������������������������������������������������0000654�0001762�0000144�00000000260�12215442555�015412� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) dev.new(width=6, height=6) grid.rect(name = "mainrect") grid.comment("This is a comment", "mainrect") grid.export("comment-test.svg") dev.off() ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testvp.R������������������������������������������������������������������������������0000654�0001762�0000144�00000003445�12215442556�014406� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # Test that 'vp' slots [viewports (vpTrees, vpLists, vpStacks) and vpPaths] # are being recorded correctly library(grid) library(gridSVG) grid.newpage() vp <- viewport(width=.5, height=.5, gp=gpar(fill="grey")) grid.rect(vp=vp) grid.export("grob-viewport.svg") grid.newpage() vp <- vpStack(viewport(width=.5, height=.5, gp=gpar(fill="grey")), viewport(gp=gpar(col="red"))) grid.rect(vp=vp) grid.export("grob-vpStack.svg") grid.newpage() vp <- vpList(viewport(width=.5, height=.5, gp=gpar(fill="grey")), viewport(gp=gpar(col="red"))) grid.rect(vp=vp) grid.export("grob-vpList.svg") grid.newpage() vp <- vpTree(viewport(width=.5, height=.5), vpList(viewport(width=.5, height=.5, gp=gpar(fill="grey")), viewport(gp=gpar(col="red")))) grid.rect(vp=vp) grid.export("grob-vpTree.svg") grid.newpage() vp <- vpTree(viewport(width=.5, height=.5, name="p"), vpList(viewport(width=.5, height=.5, gp=gpar(fill="grey"), name="c1"), viewport(gp=gpar(col="red"), name="c2"))) pushViewport(vp) upViewport(0) grid.rect(vp="p::c1") grid.export("grob-vpPath.svg") grid.newpage() vp <- viewport(width=.5, height=.5, gp=gpar(fill="grey")) grid.draw(gTree(children=gList(rectGrob()), vp=vp)) grid.export("gTree-viewport.svg") # Pathological grid.newpage() vp <- vpTree(viewport(width=.5, height=.5, name="p"), vpList(viewport(width=.5, height=.5, gp=gpar(fill="grey"), name="c1"), viewport(gp=gpar(col="red"), name="c2"))) pushViewport(vp) upViewport(0) grid.draw(gTree(childrenvp=vp, children=gList(rectGrob(vp="p::c1")), vp="p::c1")) grid.export("gTree-vpPath.svg") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testclippath.R������������������������������������������������������������������������0000654�0001762�0000144�00000003067�12215442555�015564� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) pdf(file = NULL) # Create the definition of a clipping path, in this case # it will just be a circle. cp <- clipPath(circleGrob(r = 0.3)) # Register the clipping path so that we can refer to it and apply it. registerClipPath("circleClip", cp) # Creating a simple plot that will be clipped to the circle sp <- gTree(name = "simplePlot", children = gList(xaxisGrob(), yaxisGrob(), rectGrob(gp = gpar(fill = "grey"))), vp = plotViewport()) grid.draw(sp) # Now lets clip it grid.clipPath("simplePlot", label = "circleClip") # Alternatively we could also do this which avoids the need to call # 'registerClipPath' explicitly # grid.clipPath("simplePlot", cp) # All that remains is a grey circle grid.export("clippath-simpleplot.svg") dev.off() # Now lets recreate the previous example using 'pushClipPath' pdf(file = NULL) # Clear previous clipping path reference gridSVG.newpage() pushViewport(plotViewport()) # Create the definition of a clipping path, in this case # it will just be a circle. cp <- clipPath(circleGrob(r = 0.3)) # Create a new clipping context for this viewport pushClipPath(cp) # Creating a simple plot that will be clipped to our current clipping context sp <- gTree(name = "simplePlot", children = gList(xaxisGrob(), yaxisGrob(), rectGrob(gp = gpar(fill = "grey")))) grid.draw(sp) # End the clipping context popClipPath() popViewport() # Again we are just left with a grey circle grid.export("pushclippath-simpleplot.svg") dev.off() �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testfilter.R��������������������������������������������������������������������������0000654�0001762�0000144�00000001515�12215442555�015241� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) # There are many filter effect primitives and many of them are # quite complex so this file could end up having plenty more tests! pdf(file = NULL) # First, lets draw some text that we're then going to filter grid.text("hello, world!", gp = gpar(fontsize = 96), name = "backtext") # Draw a copy over the top with white text that will be left alone grid.text("hello, world!", gp = gpar(fontsize = 96, col = "white"), name = "foretext") # We want to create a filter that takes the text thicker, and then blurs it f <- filterEffect(list(feMorphology(operator = "dilate", radius = unit(1, "mm")), feGaussianBlur(sd = 1))) # Apply the filter grid.filter("backtext", f) # Now lets export this grid.export("filter-test.svg") dev.off() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/test.script���������������������������������������������������������������������������0000654�0001762�0000144�00000000414�12164147367�015141� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ function circle_click(evt) { var circle = evt.target; var currentRadius = circle.getAttribute("r"); if (currentRadius < 100) circle.setAttribute("r", currentRadius*2); else circle.setAttribute("r", currentRadius*0.5); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testpatternfill.R���������������������������������������������������������������������0000654�0001762�0000144�00000002666�12412600424�016276� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) pdf(file = NULL) grid.newpage() # We are just going to be drawing a cross for our pattern crossGrob <- gTree(children = gList( linesGrob(), linesGrob(x = unit(0:1, "npc"), y = unit(1:0, "npc"), gp = gpar(lwd = 1)) )) # Call the pattern "cross" # Using a small device size because the line widths # will be too small otherwise registerPatternFill("cross", grob = crossGrob, dev.width = 1, dev.height = 1) grid.circle(name = "filledcircle") # Applying the pattern semi-transparently to the circle grid.patternFill("filledcircle", label = "cross", alpha = 0.5) grid.export("pattern-test.svg") dev.off() # Now lets create a new pattern that uses the existing pattern # but much larger pdf(file = NULL) grid.newpage() registerPatternFillRef("bigcross", "cross", width = 0.3, height = 0.3) grid.circle(name = "filledcircle") grid.patternFill("filledcircle", label = "bigcross", alpha = 0.5) grid.export("pattern-test-ref.svg") dev.off() # Test pattern offset pdf(file = NULL) grid.newpage() grid.rect(y=1, height=.5, just="top", name="zero-offset") grid.patternFill("zero-offset", label="cross") offsetPattern <- pattern(crossGrob, x=unit(1, "cm"), dev.width=1, dev.height=1) grid.rect(y=0, height=.5, just="bottom", name="non-zero-offset") grid.patternFill("non-zero-offset", offsetPattern) grid.export("pattern-test-offset.svg") dev.off() ��������������������������������������������������������������������������gridSVG/tests/testclasses.R�������������������������������������������������������������������������0000654�0001762�0000144�00000000473�12215442555�015413� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) pdf(file = NULL) pushViewport(viewport()) grid.rect() grid.circle() grid.text("hello, world!") popViewport() # All grobs and viewports should now be exported with a class attribute # holding the value of their R class() grid.export("test-classes.svg", addClasses = TRUE) dev.off() �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testtransparency.R��������������������������������������������������������������������0000654�0001762�0000144�00000002606�12215442556�016470� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) dev.new(width=6, height=6) # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) # A plot with overlapping polygons where the overlap needs to be # coloured differently # Implemented using transparency # Some dummy data set.seed(1000) x <- sort(runif(20, 1, 10)) y1 <- (x - 5) + rnorm(20) y2 <- -(x - 5) + rnorm(20) # Some "analysis" lm1 <- lm(y1 ~ x) lm2 <- lm(y2 ~ x) # Some calculated values to plot p1 <- predict(lm1, interval="confidence", type="response") p2 <- predict(lm2, interval="confidence", type="response") pushViewport(plotViewport(c(5, 5, 4, 2))) pushViewport(dataViewport(x, c(p1[,2], p2[,2], p1[,3], p2[,3]))) grid.rect() grid.xaxis() grid.yaxis() grid.points(x, y1) grid.points(x, y2, pch=3) grid.lines(x, p1[,1], default.units="native") grid.lines(x, p1[,2], default.units="native") grid.lines(x, p1[,3], default.units="native") grid.lines(x, p2[,1], default.units="native") grid.lines(x, p2[,2], default.units="native") grid.lines(x, p2[,3], default.units="native") # overlapping polygons grid.polygon(c(x, rev(x)), c(p1[,2], rev(p1[,3])), gp=gpar(fill="red", alpha=0.5), default.units="native") grid.polygon(c(x, rev(x)), c(p2[,2], rev(p2[,3])), gp=gpar(fill="green", alpha=0.5), default.units="native") popViewport(2) popViewport() grid.export("transparency.svg") dev.off() ��������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testforce.R���������������������������������������������������������������������������0000654�0001762�0000144�00000001372�12240527563�015054� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������library(grid) library(gridSVG) x <- roundrectGrob(width=.8, height=.8, name="x", gp=gpar(lwd=5)) grid.newpage() grid.draw(x) grid.gradientFill("x", linearGradient(c("green", "yellow"))) grid.export("force-gradient.svg") grid.newpage() grid.draw(x) grid.animate("x", "stroke-opacity"=1:0) grid.export("force-animate.svg") grid.newpage() grid.draw(x) grid.hyperlink("x", href="http://www.stat.auckland.ac.nz/") grid.export("force-hyper.svg") grid.newpage() grid.draw(x) grid.filter("x", filterEffect(feGaussianBlur(sd=5))) grid.export("force-filter.svg") grid.newpage() grid.draw(x) grid.patternFill("x", pattern(circleGrob())) grid.export("force-pattern.svg") grid.newpage() grid.draw(x) grid.garnish("x", title="tooltip") grid.export("force-garnish.svg") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testrotate.R��������������������������������������������������������������������������0000654�0001762�0000144�00000027171�12215442556�015261� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ library(grid) library(gridSVG) # Primitives to support: # rect grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect() popViewport() grid.export("rot-rect-default.svg") # Check justification grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect(x=0, y=0, just=c("left", "bottom")) popViewport() grid.export("rot-rect-just.svg") # Primitives to support: # text grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.text("rot-test") popViewport() grid.export("rot-text-default.svg") # Check justification grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.circle(r=unit(1, "mm")) grid.text("rot-test", just=c("left", "bottom")) popViewport() grid.export("rot-text-just.svg") # Primitives to support: # clipPath grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30, clip=TRUE)) grid.circle(r=.6) popViewport() grid.export("rot-clip-default.svg") # Primitives to support: # raster grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.raster(matrix(1:4/5, ncol=2), interp=FALSE) popViewport() grid.export("rot-raster-default.svg") # Check justification grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.raster(matrix(1:4/5, ncol=2), interp=FALSE, x=0, y=0, just=c("left", "bottom")) popViewport() grid.export("rot-raster-just.svg") # Primitives to support: # plotting symbols grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect() grid.points(1:5/6, 1:5/6, pch=1:5) popViewport() grid.export("rot-points.svg") ##################################### # Full STATIC test library(lattice) grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) print(xyplot(mpg ~ disp, mtcars, pch=3), newpage=FALSE) popViewport() grid.export("rot-lattice.svg") ##################################### # Implications for animation: # rect grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect(gp=gpar(col="grey")) grid.rect(x=.1, width=.1, height=.1, just="left", name="r") grid.animate("r", x=c(.1, .8)) popViewport() grid.export("rot-rect-animate-x.svg") grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect(gp=gpar(col="grey")) grid.rect(x=.1, width=.1, height=.1, just="left", name="r") grid.animate("r", x=c(.1, .8), height=c(.1, .5)) popViewport() grid.export("rot-rect-animate-height.svg") # Implications for animation: # text grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect(gp=gpar(col="grey")) grid.text("rot-test", x=.1, name="t") grid.animate("t", x=c(.1, .9)) popViewport() grid.export("rot-text-animate-x.svg") # Implications for animation: # raster grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect(gp=gpar(col="grey")) grid.raster(matrix(1-4:1/20, ncol=2), interpolate=FALSE, x=.8, width=.1, just="left") grid.raster(matrix(1:4/5, ncol=2), interpolate=FALSE, x=.1, width=.1, just="left", name="r") grid.animate("r", x=c(.1, .8)) popViewport() grid.export("rot-raster-animate-x.svg") grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect(gp=gpar(col="grey")) grid.raster(matrix(1-4:1/20, ncol=2), interpolate=FALSE, x=.8, width=.1, height=.5, just="left") grid.raster(matrix(1:4/5, ncol=2), interpolate=FALSE, x=.1, width=.1, just="left", name="r") # NOTE important to specify unit for height because default is NULL! grid.animate("r", x=c(.1, .8), height=unit(c(.1, .5), "npc")) popViewport() grid.export("rot-raster-animate-height.svg") # Implications for animation: # plotting symbols grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect() grid.points(5:1/6, 1:5/6, pch=1:5, gp=gpar(col="grey")) grid.points(1:5/6, 1:5/6, pch=1:5, name="p") grid.animate("p", x=animUnit(unit(c(1:5, 5:1)/6, "npc"), id=rep(1:5, 2))) popViewport() grid.export("rot-points-animate-x.svg") grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) grid.rect() grid.points(5:1/6, 1:5/6, pch=1:5, size=unit(2, "char"), gp=gpar(col="grey")) grid.points(1:5/6, 1:5/6, pch=1:5, name="p") grid.animate("p", x=animUnit(unit(c(1:5, 5:1)/6, "npc"), id=rep(1:5, 2)), size=animUnit(unit(rep(1:2, each=5), "char"), i=rep(1:5, 2))) popViewport() grid.export("rot-points-animate-size.svg") ##################################### # Full DYNAMIC test library(lattice) grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30)) print(xyplot(qsec ~ disp, mtcars, pch=3, col="grey", ylim=extendrange(c(mtcars$mpg, mtcars$qsec))), newpage=FALSE, prefix="plotgrey") print(xyplot(mpg ~ disp, mtcars, pch=3, ylim=extendrange(c(mtcars$mpg, mtcars$qsec))), newpage=FALSE, prefix="plot1") grid.animate("plot1.xyplot.points.panel.1.1", y=animUnit(unit(c(mtcars$mpg, mtcars$qsec), "native"), id=rep(1:nrow(mtcars), 2))) ylab <- grid.get("plot1.ylab") grid.animate("plot1.ylab", y=ylab$y - unit(0:1, "in"), "fill-opacity"=1:0, "stroke-opacity"=1:0) grid.animate("plotgrey.ylab", y=ylab$y + unit(1:0, "in"), "fill-opacity"=0:1, "stroke-opacity"=0:1) popViewport() grid.export("rot-lattice-animate.svg") ##################################### # Implications for exported coordinate system info (*.svg.coords.js) # need to record rotation info # AND use it in convertViewportX() etc library(lattice) grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30, name="rot")) print(xyplot(mpg ~ disp, mtcars, pch=3), newpage=FALSE, prefix="coords") downViewport("coords.panel.1.1.off.vp") grid.circle(unit(200, "native"), unit(30, "native"), r=unit(2, "mm"), gp=gpar(col=NA, fill="grey")) grid.circle(unit(300, "native"), unit(35, "native"), r=unit(1, "mm"), gp=gpar(col=NA, fill="grey")) upViewport(0) grid.export("rot-lattice-coords.svg", exportCoords="file", exportMappings="file", usePaths="none") # Read image back into R library(XML) svg <- xmlParse("rot-lattice-coords.svg") # Read in coord info gridSVGCoords(readCoordsJS("rot-lattice-coords.svg.coords.js")) gridSVGMappings(readMappingsJS("rot-lattice-coords.svg.mappings.js")) # Add new point to panel panel <- getNodeSet(svg, "//svg:g[contains(@id, 'coords.panel.1.1.off.vp')]", namespaces=c(svg="http://www.w3.org/2000/svg"))[[1]] vpname <- getSVGMappings("coords.panel.1.1.off.vp", "vp")[1] pos <- viewportConvertPos(vpname, 200, 30, "native") circ <- newXMLNode("circle", parent = panel, attrs = list( cx = pos$x, cy = pos$y, r = viewportConvertWidth(vpname, 2, "mm", "svg"), stroke = "red", fill = "red", "fill-opacity" = .5)) dim <- viewportConvertDim(vpname, 100, 5, "native", "svg") line <- newXMLNode("polyline", parent = panel, attrs = list( points = paste(paste(pos$x, pos$y, sep=","), paste(pos$x + dim$w, pos$y + dim$h, sep=",")), r = viewportConvertWidth(vpname, 2, "mm", "svg"), stroke = "red", fill = "red", "fill-opacity" = .5)) saveXML(svg, "rot-lattice-coords-mod.svg") # Pre-existing bug in convertViewportWidth() and convertViewportHeight() library(lattice) print(xyplot(mpg ~ disp, mtcars, pch=3), prefix="bug") downViewport("bug.panel.1.1.off.vp") grid.rect(x=200, y=30, width=100, height=5, just=c("left", "bottom"), default="native", gp=gpar(col="grey", fill=NA)) grid.export("bug-lattice-coords.svg", exportCoords="file", exportMappings="file", usePaths="none") library(XML) svg <- xmlParse("bug-lattice-coords.svg") gridSVGCoords(readCoordsJS("bug-lattice-coords.svg.coords.js")) gridSVGMappings(readMappingsJS("bug-lattice-coords.svg.mappings.js")) panel <- getNodeSet(svg, "//svg:g[contains(@id, 'bug.panel.1.1.off.vp')]", namespaces=c(svg="http://www.w3.org/2000/svg"))[[1]] vpname <- getSVGMappings("bug.panel.1.1.off.vp", "vp")[1] x <- viewportConvertX(vpname, 200, "native") y <- viewportConvertY(vpname, 30, "native") w <- viewportConvertWidth(vpname, 100, "native", "svg") h <- viewportConvertHeight(vpname, 5, "native", "svg") line <- newXMLNode("polyline", parent = panel, attrs = list(points = paste(paste(x, y, sep=","), paste(x + w, y + h, sep=",")), r = viewportConvertWidth(vpname, 2, "mm", "svg"), stroke = "red", fill = "red", "fill-opacity" = .5)) saveXML(svg, "bug-lattice-coords-mod.svg") # Implications for exported coordinate system info (*.svg.coords.js) # in viewportCreate() library(lattice) grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30, name="rot")) print(xyplot(mpg ~ disp, mtcars, pch=3), newpage=FALSE, prefix="coords") downViewport("coords.panel.1.1.off.vp") grid.yaxis(main=FALSE, gp=gpar(col="grey", fill="grey")) upViewport(0) grid.export("rot-lattice-coords-create.svg", exportCoords="file", exportMappings="file", usePaths="none") library(XML) svg <- xmlParse("rot-lattice-coords-create.svg") # Read in coord info gridSVGCoords(readCoordsJS("rot-lattice-coords-create.svg.coords.js")) gridSVGMappings(readMappingsJS("rot-lattice-coords-create.svg.mappings.js")) # Create new viewport vpname <- getSVGMappings("coords.panel.1.1.off.vp", "vp")[1] vp <- viewportCreate(vpname) grid.newpage() pushViewport(vp) # Draw an axis and, convert it to SVG, and extract axis SVG content grid.yaxis(main=FALSE, gp=gpar(col="red", fill="red")) newsvg <- grid.export(NULL) axissvg <- getNodeSet(newsvg$svg, "//svg:g[contains(@id, 'yaxis')]", namespaces=c(svg="http://www.w3.org/2000/svg"))[[1]] # Add new axis to panel panel <- getNodeSet(svg, "//svg:g[contains(@id, 'coords.panel.1.1.off.vp')]", namespaces=c(svg="http://www.w3.org/2000/svg"))[[1]] addChildren(panel, kids=list(axissvg)) saveXML(svg, "rot-lattice-coords-create-mod.svg") # Implications for exported coordinate system info (*.svg.coords.js) # in javascript viewportConvertX, etc library(lattice) grid.newpage() pushViewport(viewport(width=.5, height=.5, angle=30, name="rot")) print(xyplot(mpg ~ disp, mtcars, pch=3), newpage=FALSE, prefix="coords") downViewport("coords.panel.1.1.off.vp") grid.rect(x=200, y=30, width=100, height=5, just=c("left", "bottom"), default="native", gp=gpar(col="grey", fill=NA)) upViewport(0) grid.garnish("coords.background", onclick="addPoint()", "pointer-events"="all") grid.script(file="rot-lattice-coords.js") grid.export("rot-lattice-coords-js.svg", exportCoords="file", exportMappings="file", usePaths="none", exportJS="file") # Pre-existing bug in convertViewportWidth() and convertViewportHeight() (in JS) library(lattice) print(xyplot(mpg ~ disp, mtcars, pch=3), prefix="bug") downViewport("bug.panel.1.1.off.vp") grid.rect(x=200, y=30, width=100, height=5, just=c("left", "bottom"), default="native", gp=gpar(col="grey", fill=NA)) grid.garnish("bug.background", onclick="addPoint()", "pointer-events"="all") grid.script(file="bug-lattice-coords.js") grid.export("bug-lattice-coords-js.svg", exportCoords="file", exportMappings="file", usePaths="none", exportJS="file") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/tests/testlink.R����������������������������������������������������������������������������0000654�0001762�0000144�00000011253�12215442555�014711� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ library(grid) library(gridSVG) # A very simple test dev.new(width=6, height=6) # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) grid.text("Click me", name="txtgrob") grid.hyperlink("txtgrob", href="http://cran.stat.auckland.ac.nz") popViewport() grid.export() dev.off() # A scatterplot and two dot plots designed to be # linked together # Some data data(iris) # A scatterplot of x vs y dev.new(width=6, height=6) # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) pushViewport(plotViewport(c(5, 5, 4, 2))) pushViewport(dataViewport(iris$Sepal.Length, iris$Sepal.Width)) grid.rect() grid.xaxis(name="xaxis") grid.yaxis(name="yaxis") grid.hyperlink("xaxis", "linkdotx.svg") grid.hyperlink("yaxis", "linkdoty.svg") grid.points(iris$Sepal.Length[iris$Species == "setosa"], iris$Sepal.Width[iris$Species == "setosa"], gp=gpar(col="red")) grid.points(iris$Sepal.Length[iris$Species == "versicolor"], iris$Sepal.Width[iris$Species == "versicolor"], gp=gpar(col="green")) grid.points(iris$Sepal.Length[iris$Species == "virginica"], iris$Sepal.Width[iris$Species == "virginica"], gp=gpar(col="blue")) grid.text("Sepal Length", y=unit(-3, "lines")) grid.text("Sepal Width", x=unit(-3, "lines"), rot=90) popViewport(3) grid.export("linkscatter.svg") dev.off() # A dot plot of x dev.new(width=6, height=3) # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) pushViewport(plotViewport(c(5, 2, 4, 2))) pushViewport(dataViewport(iris$Sepal.Length, yscale=c(0 ,1))) grid.rect(gp=gpar(col="grey")) grid.xaxis() grid.points(iris$Sepal.Length[iris$Species == "setosa"], rnorm(50, .5, .05), size=unit(2, "char"), gp=gpar(col=NULL, fill="red", alpha=0.3)) grid.points(iris$Sepal.Length[iris$Species == "versicolor"], rnorm(50, .5, .05), size=unit(2, "char"), gp=gpar(col=NULL, fill="green", alpha=0.3)) grid.points(iris$Sepal.Length[iris$Species == "virginica"], rnorm(50, .5, .05), size=unit(2, "char"), gp=gpar(col=NULL, fill="blue", alpha=0.3)) grid.text("Sepal Length", y=unit(-3, "lines")) grid.text(name="returnlink", "Return to Scatterplot", y=unit(1, "npc") + unit(1, "lines"), gp=gpar(col="grey")) grid.hyperlink("returnlink", "linkscatter.svg") popViewport(3) grid.export("linkdotx.svg") dev.off() # A dot plot of y dev.new(width=6, height=3) # Some default settings pushViewport(viewport(gp=gpar(col="black", fill=NA))) pushViewport(plotViewport(c(5, 2, 4, 2))) pushViewport(dataViewport(iris$Sepal.Width, yscale=c(0 ,1))) grid.rect(gp=gpar(col="grey")) grid.xaxis() grid.points(iris$Sepal.Width[iris$Species == "setosa"], rnorm(50, .5, .05), size=unit(2, "char"), gp=gpar(col=NULL, fill="red", alpha=0.3)) grid.points(iris$Sepal.Width[iris$Species == "versicolor"], rnorm(50, .5, .05), size=unit(2, "char"), gp=gpar(col=NULL, fill="green", alpha=0.3)) grid.points(iris$Sepal.Width[iris$Species == "virginica"], rnorm(50, .5, .05), size=unit(2, "char"), gp=gpar(col=NULL, fill="blue", alpha=0.3)) grid.text("Sepal Width", y=unit(-3, "lines")) grid.text(name="returnlink", "Return to Scatterplot", y=unit(1, "npc") + unit(1, "lines"), gp=gpar(col="grey")) grid.hyperlink("returnlink", "linkscatter.svg") popViewport(3) grid.export("linkdoty.svg") dev.off() # Check link to overall grob works grid.newpage() grid.draw(hyperlinkGrob(linesGrob(gp=gpar(lwd=20)), href="http://www.stat.auckland.ac.nz")) grid.export("testGroupOfOneHyperlink.svg") grid.newpage() grid.draw(hyperlinkGrob(segmentsGrob(1:3/4, gp=gpar(lwd=20)), href="http://www.stat.auckland.ac.nz")) grid.export("testGroupOfManyHyperlink.svg") # Test *individual* hrefs grid.newpage() grid.draw(hyperlinkGrob(linesGrob(gp=gpar(lwd=20)), href="http://www.stat.auckland.ac.nz", group=FALSE)) grid.export("testIndividualOneHyperlink.svg") grid.newpage() grid.draw(hyperlinkGrob(segmentsGrob(1:3/4, gp=gpar(lwd=20)), href="http://www.stat.auckland.ac.nz", group=FALSE)) grid.export("testIndividualManyHyperlink.svg") grid.newpage() grid.draw(hyperlinkGrob(segmentsGrob(1:3/4, gp=gpar(lwd=20)), href=c("http://www.stat.auckland.ac.nz", "http://slashdot.org", "http://soccernet.com"), group=FALSE)) grid.export("testIndividualManyHyperlinks.svg") �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/vignettes/����������������������������������������������������������������������������������0000755�0001762�0000144�00000000000�14402222222�013557� 5����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/vignettes/gridSVG.Rnw�����������������������������������������������������������������������0000654�0001762�0000144�00000024351�12240527565�015602� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\documentclass[a4paper]{article} %\VignetteIndexEntry{gridSVG} \newcommand{\grid}{{\tt grid}} \newcommand{\gridSVG}{{\tt gridSVG}} \newcommand{\lattice}{{\tt lattice}} \newcommand{\R}{{\tt R}} \setlength{\parindent}{0in} \setlength{\parskip}{.1in} \title{The gridSVG package} \author{Paul Murrell} \begin{document} \maketitle @ \section*{Introduction} This package is an experiment in writing a graphics device, purely in R code, for the grid graphics system. The specific device implemented is for the W3C SVG (Scalable Vector Graphics) format, but there is also some effort at a general device interface that would support other specific devices. \section*{User Interface} There are five functions of interest to the user: \begin{description} \item[{\tt grid.hyperlink}] takes a grid {\tt grob} and turns it into an object of class {\tt linked.grob}, with an associated {\tt href}. This allows the association of hyperlinks with elements of a grid graphic. See {\tt gridSVG/tests/testlink.R} for examples. \item[{\tt grid.animate}] allows the user to associate a duration (plus some other things) with certain aspects of a grid {\tt grob}. This allows a grid graphic element to be animated. See {\tt gridSVG/tests/testanimate.R} {\tt testpendulum.R} and {\tt testball.R} for examples. \item[{\tt grid.garnish}] allows the user to associate arbitrary SVG attributes with a grid {\tt grob}. This provides a way to associate with a grob things that have no corresponding grid concept, like an {\tt onclick} attribute. See {\tt gridSVG/tests/testattrib.R} for a simple example. \item[{\tt grid.script}] allows the user to create a grid {\tt grob} that contains an SVG script (e.g., some ECMAscript code). This provides a way to produce a complete SVG document (complete with scripts) entirely using R grid code (i.e., without having to hand edit the SVG file that \gridSVG{} creates. Again, see {\tt gridSVG/tests/testattrib.R} for a simple example. \item[{\tt gridToSVG()}] saves the current grid graphic to an SVG file. See the {\tt gridSVG/tests} directory for examples of what can be done. See the section ``Known Problems'' below for things that are not yet supported. \end{description} In addition to these functions, \gridSVG{} supports alpha-transparency by respecting the {\tt alpha} graphical parameter which can be specified in a \grid{} {\tt gpar} object. For example, the following code produces overlapping transparent circles\footnote{The {\tt pushViewport()} call is currently necessary to set some default values. It may be possible to remove this in future versions.}: <>= library(grid) library(gridSVG) <>= pushViewport(viewport(gp=gpar(col="black", fill=NA))) grid.circle(x=0.33, r=unit(2, "inches"), gp=gpar(alpha=0.3, fill="red")) grid.circle(x=0.67, r=unit(2, "inches"), gp=gpar(alpha=0.3, fill="green")) popViewport() gridToSVG() @ \section*{Internal Structure} There are nine {\tt .R} files in the {\tt gridSVG/R} directory, corresponding to the nine different things that gridSVG aims to provide: \begin{description} \item[dev.R] This contain (S4 methods) code defining a generic R-level graphics device interface. In other words, generic functions that may be called by a graphics system (such as grid), and that a graphics device (such as an SVG device) should provide methods for. \item[griddev.R] Code for running through the grid display list and calling generic device functions. \item[devsvg.R] Code implementing SVG methods for the generic device interface. \item[svg.R] A set of R-level functions for producing SVG output. Callable directly (see, e.g., {\tt gridSVG/tests/testsvg.R}), but mostly just called by code in {\tt devsvg.R}. \item[gridsvg.R] The function {\tt gridToSVG()}. \item[hyper.R] Code implementing the {\tt linked.grob} class -- i.e., an extension of the standard grid {\tt grob} that supports hyperlinks. Includes the function {\tt grid.hyperlink()}. \item[animate.R] Code implementing the {\tt animated.grob} class -- i.e., an extension of the standard grid {\tt grob} that supports animation. Includes the function {\tt grid.animate()}. \item[script.R] Code implementing the {\tt script} class -- i.e., an extension of the standard grid {\tt grob} that supports SVG scripts. Includes the function {\tt grid.script()}. \item[attrib.R] Code implementing the {\tt svg.grob} class -- i.e., an extension of the standard grid {\tt grob} that supports arbitrary SVG attributes. Includes the function {\tt grid.garnish()}. \end{description} \section*{Known Problems} This package is a partial implementation of several ideas. This section describes some of the known holes in and issues with the implementation. \subsection*{Overall Design} The package is ass-backwards in its design. Normal devices receive calls from grid to perform operations; gridSVG works off grid's display list so only has the information stored there to figure out what to do. This means that it has to replicate some of the work that grid does when grid draws (e.g., in order to enforce vp slots in grobs). If/when normal devices are implemented as R-level objects, so that grid includes a {\tt dev} argument in all its calls to devices, it may be possible to make gridSVG behave more like a normal device and this may lead to some simplifications. \subsection*{Sizing of and units in the SVG image} Software that tries to render SVG on a device has the same problem that \R{} graphics devices have when trying to render \grid{} output: Locations and sizes can be in a variety of units (cm, inches, percentages, ...) {\it some of which are physical units} with real-world meaning. The renderer has to figure out how big something like 1{\tt "} is in the native device units. This problem is worst on computer screens where it is not necessarily easy (or possible) to find out how many pixels there are in a physical inch on the screen. What \R{} does is try its best and it seems that SVG renderers must do the same\footnote{According to Section 7.1 Introduction of the W3C Scalable Vector Graphics (SVG) 1.0 Specification, ``a real number value that indicates the size in real world units, such as millimeters, of a "pixel"'' is ``highly desirable but not required''.}. gridSVG works off the grid display list. This means that the image must first be drawn on some other device (e.g., X11 or PostScript) then copied (via the {\tt gridSVG()} function) to an SVG format. It is not possible to use the SVG notion of transformations to mirror \grid{}'s viewport transformations because the SVG transformations work on ALL graphical elements, including text. In particular, any scaling transformations scale the size of text. Furthermore, \grid{} actions such as {\tt upViewport()} and {\tt downViewport()} are difficult to replicate as SVG transformations. So the copying of \grid{} output to SVG involves converting all locations and sizes to a single SVG coordinate system. There are two (serious) possibilities for this coordinate system: \begin{enumerate} \item specify everything (including the size of the SVG image) in pixels. In this case, what we do is work off the original device's concept of a pixel. The SVG image may be rendered quite a different size compared to the original if the size of pixels on the rendering device is different from the size of pixels on the original device. Things should be pretty consistent -- something that is supposed to be half the size of the image should be rendered half the size of the image -- though this will {\it not} be the case if the change in pixel size is different for x- and y-axes. An image drawn first in a screen window then copied to SVG and viewed {\it on the same screen} should hopefully be the same size. If the original device is a screen device, there is no guarantee that physical sizes will be respected; this will depend on how accurately the screen device can determine the physical size of its pixels. If the original device is a file device (e.g. PostScript) then physical sizes will be accurate on the original device, BUT the correspondence between ``pixels'' on the file device and pixels when the SVG is rendered on screen is very unlikely to be good (e.g., ``pixels'' on PostScript are $\frac{1}{72}${\tt "}, which is highly unlikely to correspond to pixel size on a modern screen). \item specify everything (including the size of the SVG image) in inches. In this case, there is no guarantee that the SVG image will end up the right physical size (it will depend on whether the rendering software can find out enough about pixels-to-inches, BUT everything should be in proportion (if the image is overall a little smaller than it should be, at least something that should be half the size of the image will be half the size of the image. The final rendered size of the image will totally depend on where it gets rendered\footnote{This is not to say that it should be riciculously off; it should be pretty close to the right physical size if it's not exactly the right size.}. This appears to have fewer problems; unfortunately it is {\bf totally killed} by the fact that the locations for drawing polylines MUST be in pixels! (technically, that should be ``user coordinates'', but since I have a single, flat coordinate system structure, it equates to pixels.) \end{enumerate} \subsection*{Plotting Symbols} Only {\tt pch=1} and {\tt pch=3} are currently supported. This is just a matter of filling in the other options. \subsection*{Mathematical Annotation} The use of things like {\tt grid.text(expression(x[i]))} is supported in the main R graphics engine. gridSVG bypasses that and so does not support mathematical annotation (and probably never will!). \subsection*{Time unit arithmetic} Animation is no longer achieved via ``time units'' so old problems with arithmetic on time units in previous versions of \gridSVG{} disappear (i.e., the user does not need to be as careful when doing animation; just specify some unit values and/or expressions and it should go.) Having said that, there is still only support for animating a small set of aspects of grid {\tt grob}s (basically the locations and sizes of {\tt grob}s. \subsection*{Acknowledgements} Many thanks to Nathan Whitehouse and colleagues who contributed ideas and code for including arbitrary SVG attributes and SVG scripts. \end{document} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/vignettes/extensibility.Rnw�����������������������������������������������������������������0000654�0001762�0000144�00000036463�12240527565�017200� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\documentclass[a4paper]{article} %\VignetteIndexEntry{extensibility} \newcommand{\grid}{{\bf grid}} \newcommand{\gridSVG}{{\sf gridSVG}} \newcommand{\lattice}{{\bf lattice}} \newcommand{\R}{{\sf R}} \newcommand{\js}{{\sf javascript}} \newcommand{\svg}{{\sf SVG}} \newcommand{\code}[1]{{\tt #1}} \setlength{\parindent}{0in} \setlength{\parskip}{.1in} \title{Extending the gridSVG package} \author{Paul Murrell} \begin{document} \maketitle @ \section*{Introduction} It is sometimes useful or necessary for the user/developer to define a new grob (or gTree) class. The \gridSVG{} package only knows about the classes in the \grid{} package (basic graphical primitives, gTrees, plus a few others like frames and cell grobs). This means that \gridSVG{} cannot export, or animate, or garnish new grob classes without additional information. This document describes how to write methods for a new grob class to work with \gridSVG{}. <<>>= library(grid) library(gridSVG) @ The assumption in this document is that a new class has been made because there is a need to have a special \code{drawDetails()} method (because what the class draws has to be determined at drawing time rather than at grob creation time). There should not be any need for the information in this document if you have grobs or gTrees that are entirely defined at time of creation (so do not need any \code{drawDetails()} methods). Those cases should be handled by the \gridSVG{} package already. Users wanting to garnish or animate pieces of your scene should be able to get at whatever components of the scene that they need using gPaths (assuming that you have named all your grobs properly). \subsection*{Simple class example} A simple case is one where the grob being created (at drawing time) is just a simple graphical primitive. For example, the following (contrived) code defines a new class of (text) grob, a \code{timegrob} class, that writes out the time that its text is generated (see Figure \ref{figure:simplegrob}). <<>>= tg <- grob(name="tg", cl="timegrob") @ Because we will be able to reuse it later, we will write a function to create the grob at drawing time. <<>>= timegrob <- function(x) { textGrob(paste("text generated at", Sys.time(), sep="\n"), gp=x$gp, name=x$name) } @ The \code{drawDetails()} method for this new class just calls the \code{timegrob()} function to create a text grob and then draws that grob. <<>>= drawDetails.timegrob <- function(x, ...) { grid.draw(timegrob(x)) } @ Drawing the \code{timegrob} object calls the \code{drawDetails()} method above. <>= grid.draw(tg) @ \begin{figure} \begin{center} \includegraphics[width=2in]{extensibility-simplegrob} \caption{\label{figure:simplegrob}A simple new grob class that draws the time that its text was generated.} \end{center} \end{figure} The important thing about this class is that the grob that is being generated in the \code{drawDetails()} method is just a simple \code{text} grob. \subsection*{Not simple class example} A slightly more complex case is when a new grob class actually generates a gTree in its \code{drawDetails()} method. For example, the following code defines a new class, called \code{boxedtext}, that creates a gTree containing text and a bounding box (at drawing time so that the box can be created from the current size of the text, in case the text has been edited; see Figure \ref{figure:notsimplegrob}). <<>>= bt <- grob(x=unit(.5, "npc"), y=unit(.5, "npc"), label="hi", name="bt", cl="boxedtext") @ Again, it will be useful to have a function that creates the gTree. <<>>= boxedtext <- function(x) { tg <- textGrob(x$label, x$x, x$y, name=paste(x$name, "text", sep=".")) rg <- rectGrob(x$x, x$y, width=grobWidth(tg) + unit(2, "mm"), height=grobHeight(tg) + unit(2, "mm"), name=paste(x$name, "rect", sep=".")) gTree(children=gList(tg, rg), gp=x$gp, name=x$name) } @ The \code{drawDetails()} method is again very simple. <<>>= drawDetails.boxedtext <- function(x, ...) { grid.draw(boxedtext(x)) } @ Drawing the \code{boxedtext} grob call the \code{drawDetails()} method whch creates a gTree, containing a text and bounding rectangle, and draws it. <>= grid.draw(bt) @ \begin{figure} \begin{center} \includegraphics[width=2in]{extensibility-notsimplegrob} \caption{\label{figure:notsimplegrob}A not simple new grob class that draws text with a bounding box.} \end{center} \end{figure} The important thing about this example is that it creates a gTree at drawing time. \section*{Exporting a new grob class to \svg{}} If \gridSVG{} knows nothing about a grob class then it will not export any SVG elements via \code{gridToSVG()}. The technique for telling \gridSVG{} about a new class varies depending on how complex the new class is. \subsection*{Exporting a simple class} The \code{primToDev()} generic function is the function that converts a simple grob into \svg{}. There are \code{primToDev()} methods for all of the standard \grid{} graphical primitives, but for grob classes that \gridSVG{} does not recognise, no \svg{} code will be generated. If the new class only creates a simple grob at drawing time then all that is required is to define a new method for the \code{primToDev()} generic that generates a standard grob and calls \code{primToDev()} on that. For example, the following code creates a method for the simple \code{timegrob} class. This method simply creates the required text grob and then calls \code{primToDev()} on that, which exports the normal \svg{} code for a text grob. <<>>= primToDev.timegrob <- function(x, dev) { primToDev(timegrob(x), dev) } @ The \code{gridToSVG()} function will call this method to produce the appropriate \svg{} code. <<>>= grid.newpage() grid.draw(tg) gridToSVG("simpleclass.svg") @ The \svg{} code is shown below. One important feature is that the \code{id} attributes of the \svg{} elements are sensible. This has happened because the \code{timegrob()} function that we wrote sets the name of the text grob that it creates from the name of the \code{textgrob} object. <>= library(XML) @ <>= simpleclasssvg <- xmlParse("simpleclass.svg") cat(saveXML(simpleclasssvg)) @ Another feature of the \code{timegrob()} function is that it sets the \code{gp} slot of the text grob from the \code{gp} slot of the \code{textgrob} object. This is important to make sure that any graphical parameter settings on the \code{textgrob} are exported properly to \svg{}. \subsection*{Exporting a not simple class} The solution for exporting a new class that creates a gTree at drawing time is very similar to the simple solution. We need to write a \code{primToDev()} method for the new class, the only difference being that this method should create a gTree (rather than just a standard graphical primitive grob). For example, the following code creates a method for the \code{boxedtext} class. This just calls \code{boxedtext()} to create a gTree containing the appropriate text and bounding rectangle and then calls \code{primToDev()} on that gTree. <<>>= primToDev.boxedtext <- function(x, dev) { primToDev(boxedtext(x), dev) } @ The \code{gridToSVG()} function will now generate \svg{} output from a \code{boxedtext} object. <<>>= grid.newpage() grid.draw(bt) gridToSVG("notsimpleclass.svg") @ The \svg{} output is shown below. <>= notsimpleclasssvg <- xmlParse("notsimpleclass.svg") cat(saveXML(notsimpleclasssvg)) @ \section*{Animating a new grob class} In addition to converting a \grid{} scene to \svg{} code, the \gridSVG{} package also provides a way to animate components of a \grid{} scene. The \code{grid.animate()} function allows the user to select a grob by name and provide animated values for features of the grob (e.g., a set of x-values for a circle grob). The \code{grid.animate()} function actually only attaches the animation information to a grob. The real action happens when \code{gridToSVG()} is called and that calls the \code{animate()} generic function. The purpose of that function is to generate \code{} elements in the \svg{} code. As with \code{primToDev()}, there are \code{animate()} methods that generate \code{} elements for all standard graphical primitives, but nothing will happen for a grob class that \gridSVG{} is unaware of. If we want a new (simple) grob class to be able to be animated, we need to write an \code{animate()} method for that grob class. For example, the following code defines an \code{animate()} method for the \code{timegrob} class. This is similar to the \code{primToDev()} method in that it creates a text grob and then calls \code{animate()} on that (to take advantage of the existing \code{animate()} method for text grobs). The only complication is that the animation information on the \code{timegrob} object must be transferred over to the new text grob (this is done in a brute force manner here; perhaps a nicer encapsulation will be provided in the future). <<>>= animate.timegrob <- function(x, ...) { tg <- timegrob(x) tg$animationSets <- x$animationSets tg$groupAnimationSets <- x$groupAnimationSets animate(tg, ...) } @ With this \code{animate()} method in place, the following code draws a \code{timegrob} object and then animates it so that it will move left-to-right across the screen. <<>>= grid.newpage() grid.draw(tg) grid.animate("tg", x=c(.3, .7)) gridToSVG("animsimpleclass.svg") @ The \svg{} code that is generated from this scene is shown below to show that the animation has been recorded in the \svg{} output (it's actually an \code{} element rather than an \code{} element for text grobs). <>= animsimpleclasssvg <- xmlParse("animsimpleclass.svg") cat(saveXML(animsimpleclasssvg)) @ For the case of a new gTree class, things are a little more complicated. Again, we need to write a new \code{animate()} method, but this function can be a bit more complicated because there may be animation information to apply to the gTree as a whole \emph{and} animation information to apply to just the children of the gTree. For example, the code below defines an \code{animate()} method for the \code{boexedtext} class. This creates a gTree containing a text grob and a bounding rect grob. The \code{groupAnimationSets} information is added to the gTree and then \code{animate()} is called on that to output an \code{} element for the entire gTree, \emph{plus} each child of the gTree is extracted, \code{animationSets} information added, and then \code{animate()} called to output \code{} elements for each child of the gTree. <<>>= animate.boxedtext <- function(x, ...) { bt <- boxedtext(x) bt$groupAnimationSets <- x$groupAnimationSets animate(bt, ...) # Animate the children of bt btrect <- getGrob(bt, "bt.rect") btrect$animationSets <- x$animationSets animate(btrect, ...) bttext <- getGrob(bt, "bt.text") bttext$animationSets <- x$animationSets animate(bttext, ...) } @ The following code makes use of this method to animate a \code{boxedtext} grob. The first call to \code{grid.animate()} makes both text and bounding rect move left-to-right across the screen. The second call to \code{grid.animate()} makes the whole gTree disappear after 1 second (once the text and rect have moved to the right of the screen). <<>>= grid.newpage() grid.draw(bt) grid.animate("bt", x=c(.3, .7)) grid.animate("bt", visibility=c("visible", "hidden"), begin=1, duration=0.1, group=TRUE) gridToSVG("animnotsimpleclass.svg") @ The resulting \svg{} code is shown below. <>= animnotsimpleclasssvg <- xmlParse("animnotsimpleclass.svg") cat(saveXML(animnotsimpleclasssvg)) @ \section*{Garnishing a new grob class} The \code{grid.garnish()} function provides a way for users to add interactivity to a \grid{} scene, by specifying (\js{}) event handlers for components of the scene. More generally, the function allows \grid{} grobs to be garnished with arbitrary \svg{} attributes. Like \code{grid.animate()}, all \code{grid.garnish()} does is attach the garnishing information to a grob. The appropriate \svg{} code is only generated when \code{gridToSVG()} is called. The crucial action happens in the generic function \code{garnish()}, which transfers the garnishing information to the \svg{} device that is writing out \svg{} code. As should be familiar by now, there are \code{garnish()} methods for standard \grid{} graphical primitives, but no svg{} attributes will be exported for grob classes that \gridSVG{} does not know about. Fortunately, \code{garnish()} methods are once again pretty easy to write. For example, the following code defines a method for the \code{timegrob} class. This is very much like an \code{animate()} method: a text grob is created, the garnishing information is added to the text grob, then \code{garnish()} is called on the text grob so that the method for text grobs takes care of transferring the \svg{} attributes to the \svg{} device. <<>>= garnish.timegrob <- function(x, ...) { tg <- timegrob(x) tg$attributes <- x$attributes tg$groupAttributes <- x$groupAttributes garnish(tg, ...) } @ The following code shows the new method in action. A \code{timegrob} is drawn, then \code{grid.garnish()} is called to specify that a mouse click on the text should pop an alert dialog. <<>>= grid.newpage() grid.draw(tg) grid.garnish("tg", onmousedown="alert('ouch')") gridToSVG("garnishsimpleclass.svg") @ The resulting \svg{} code is shown below. <>= garnishsimpleclasssvg <- xmlParse("garnishsimpleclass.svg") cat(saveXML(garnishsimpleclasssvg)) @ The method is just as simple for a custom gTree class as well, as shown by the \code{garnish()} method for the \code{boxedtext} class below. <<>>= garnish.boxedtext <- function(x, ...) { bt <- boxedtext(x) bt$attributes <- x$attributes bt$groupAttributes <- x$groupAttributes garnish(bt, ...) } @ The following code shows this method in action, with an additional demonstration of the difference between garnishing individual components of a \grid{} scene and garnishing the overall parent component. A \code{boxedtext} grob is drawn, then the first call to \code{grid.garnish()} ensures that a mouse click on any part of the text or bounding box will produce an alert dialog. The second call to \code{grid.garnish()} sets up a different interaction on just the text so that moving the mouse over the text pops up a different dialog. <<>>= grid.newpage() grid.draw(bt) grid.garnish("bt", onmousedown="alert('ouch')") grid.garnish("bt", onmouseover=c(bt.text="alert('watch it!')"), group=FALSE) gridToSVG("garnishnotsimpleclass.svg") @ The resulting \svg{} code is shown below. <>= garnishnotsimpleclasssvg <- xmlParse("garnishnotsimpleclass.svg") cat(saveXML(garnishnotsimpleclasssvg)) @ \section*{Extending complex classes} A more complex case is one where a new grob class defines its own \code{preDrawDetails()} or \code{postDrawDetials()} methods. If that is the case, then it will be necessary to write a \code{grobToDev()} method for the class, just to get \svg{} exported correctly. See the existing methods for \code{grobToDev()} in the \gridSVG{} source for some examples. \end{document} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/vignettes/animation.Rnw���������������������������������������������������������������������0000654�0001762�0000144�00000023337�12472704522�016254� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\documentclass[a4paper]{article} %\VignetteIndexEntry{animation} \newcommand{\grid}{{\bf grid}} \newcommand{\gridSVG}{{\sf gridSVG}} \newcommand{\lattice}{{\bf lattice}} \newcommand{\R}{{\sf R}} \newcommand{\code}[1]{{\tt #1}} \setlength{\parindent}{0in} \setlength{\parskip}{.1in} \title{Animation with the gridSVG package} \author{Paul Murrell} \begin{document} \maketitle @ \section*{Introduction} The \code{grid.animate()} function in the \gridSVG{} package allows various features of a \grid{} grob to be animated. Calls to this function can be quite straightforward. For example, the following code animates a circle so that it travels from left to right across the screen (the result of this code is the file \code{"animCircle.svg"}, which can be viewed in a web browser). <<>>= library(grid) library(gridSVG) @ <>= grid.circle(.1, .5, r=.1, gp=gpar(fill="black"), name="circle") grid.animate("circle", x=c(.1, .9)) grid.export("animCircle.svg") @ Things can get more complicated though. For example, in order to animate a \code{polyline} grob, it is necessary to specify a \emph{vector} of \code{x} and/or \code{y} locations for each time point \emph{and} it may even be necessary to specify \emph{multiple} vectors at each time point if the \code{polyline} grob specifies more than one polyline (via its \code{id} argument). To give a concrete example, consider the result of the following \grid{} code, which draws two polylines from a single call to \code{grid.polyline()} (see Figure \ref{figure:polyline}). <>= grid.rect() grid.polyline(c(.2, .3, .4, .6, .7, .8), c(.7, .5, .7, .3, .5, .3), id=rep(1:2, each=3), gp=gpar(lwd=5), name="polyline") @ \begin{figure} <>= <> @ \caption{\label{figure:polyline}Two polylines drawn from a single call to \code{grid.polyline}.} \end{figure} The task is to animate the two polylines so that they appear to ``flap'' (the left will transition to look like the right one and the right one will transition to look like the left one, and repeat). The y-values for the animation look something like this (the x-values are not animated): <>= polylineY <- animUnit(unit(c(.7, .5, .7, .3, .5, .3, .3, .5, .3, .7, .5, .7, .7, .5, .7, .3, .5, .3), unit="npc"), timeid=rep(1:3, each=6), id=rep(rep(1:2, each=3), 3)) @ <>= polylineY @ For the first polyline (\code{id1}), at the first time point (\code{t1}), the y-values are just the original y-values, \code{c(.7, .5, .7)}. At the second time point, the y-values for the first polyline are \code{c(.3, .5, .3)}, and at the third time point the y-values are back to the original \code{c(.7, .5, .7)}. The y-values for the second polyline are the reverse of the y-values for the first polyline. Specifying this set of animation values is more complex and can get pretty confusing, but at the same time, we still want to be able to specify the simple animation values (like in the first example) in a simple manner. The \gridSVG{} package provides a consistent, but flexible system for specifying animation values that is based on a single, coherent data structure, but which allows the user to use simpler specifications where possible. \section*{The \code{animUnit} class} An \code{animUnit} object has three components: a vector of \code{values} (as a \code{unit} object), a \code{timeid} vector (default \code{NULL}), and an \code{id} vector (default \code{NULL}). The \code{animUnit()} function is used to create an \code{animUnit}, with only the \code{values} as a required argument. The following code generates a single value at four different time points. <<>>= animUnit(unit(1:4, "cm")) @ As this example shows, the default interpretation of a \code{NULL} \code{timeid} is that each value belongs to a separate time period (and the default interpretation of a \code{NULL} \code{id} is that there is only one shape to be animated). This example also demonstrates the \code{print} method for \code{animUnit} objects, which is useful for seeing which animation values belong to different time periods. This simple sort of \code{animUnit} is sufficient for specifying something like the x-location of a single data symbol (where there is exactly one x-value required per time point). For the slightly more difficult situation of animating multiple data symbols (where we need several x-values per time period, one for each different data symbol), the \code{id} argument can be explicitly specified. The following code generate values for two shapes (\code{id1} and \code{id2}) with values at two time points (\code{t1} and \code{t2}) for each shape. <<>>= animUnit(unit(1:4, "cm"), id=rep(1:2, 2)) @ In the case where we have a single shape, but that shape is described by multiple x-values (e.g., a single polygon), we need multiple x-values per time point \emph{for each shape}, the \code{timeid} argument can be used to associate multiple x-values with a single time point. The following code generates six values at each of two time points (\code{t1} and \code{t2}) for a single shape. <<>>= animUnit(unit(1:12, "cm"), timeid=rep(1:2, 6)) @ And in the worst case, we have multiple shapes, each requiring multiple x-values per time period (e.g., multiple polygons from a single \code{polygon} grob), so we need to specify \emph{both} \code{id} and \code{timeid}. The following code generates three values at two different time points for two different shapes. <<>>= animUnit(unit(1:12, "cm"), timeid=rep(1:2, 6), id=rep(1:2, each=6)) @ The following code uses the \code{animUnit()} function to produce the flapping polylines example from the previous section. It produces a file called \code{"animPolyline.svg"} that can be viewed in a browser. <>= grid.animate("polyline", y=polylineY, rep=TRUE) @ <>= grid.newpage() <> <> <> grid.export("animPolyline.svg") @ \section*{The \code{as.animUnit()} function} The \code{animUnit} class gives us the range of possible specifications that we require, but it is overkill for simple cases, and may be less convenient even for more complex cases. There is an \code{as.animUnit()} function that can convert vectors, matrices, and lists to \code{animUnit}s so that we can use those simpler data structures to provide animation values. For example, a single value per time period can be specified with just a vector, as follows. <<>>= as.animUnit(1:4, unit="cm") @ Even better, the \code{grid.animate()} function makes use of this coercion function and fills in the \code{unit} based on the units of the feature that is being animated. This means that the call to \code{grid.animate()} can just specify a vector, like the following (taken from the first example at the beginning of this document). <>= grid.animate("circle", x=c(.1, .9)) @ When we need to specify values for multiple shapes it can be convenient to use a matrix, where each column provides the values for a different shape. The following code shows an example (again, in a call to \code{grid.animate()} we can leave out the \code{unit}). <<>>= m <- matrix(1:6, ncol=2) m @ <<>>= as.animUnit(m, unit="cm") @ If we have multiple values per time point (e.g., a polygon), we can get \code{as.animUnit()} to treat columns as different time points rather than as different shapes by specifying the \code{multVal} argument, as shown below. <<>>= as.animUnit(m, unit="cm", multVal=TRUE) @ The \code{grid.animate()} function guesses how it should use the columns of a matrix, depending on the shape that is being animated, so for relatively straightforward cases we should be abe to simply pass a matrix to \code{grid.animate()}. Finally, we can specify animation values as a list of units (if that is more convenient than calling \code{animUnit()}). The following code shows an example, which shows that the default behaviour is to treat each component of the list as animation values for a separate shape. <<>>= l <- list(unit(1:3, "cm"), unit(4:6, "cm")) l @ <<>>= as.animUnit(l) @ Again, we can specify that the components of the list correspond to separate time points rather than separate shapes (by calling \code{as.animUnit()} directly and supplying the \code{multVal} argument). <<>>= as.animUnit(l, multVal=TRUE) @ \section*{The \code{animValue} class} Some features of a shape, such as \code{visibility}, are not numeric locations or dimensions, so they do not need to be specified as unit values. For these cases, there is an \code{animValue()} function to create the various specifications that we might need, plus an \code{as.animValue()} function, which \code{grid.animate()} makes use of to allow convenient variations. \section*{Summary} For relatively simple animations, all we need to do is specify a numeric vector, or possibly a matrix, in the call to \code{grid.animate()}. For more complex animations, how we specify the animation values depends on what we find most convenient. Specifying a matrix or a list of units may suffice, although this may rely on \code{grid.animate()} correctly guessing our intention. It may be necessary to directly call \code{as.animUnit()} on a matrix or a list of units to get the behaviour that we want. Alternatively, a direct call to \code{animUnit()} should allow us to specify any set of animation values that we need and the \code{print()} method for the \code{animUnit} objects that are created by that function should help us to check that we are generating values in the right format. \end{document} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/������������������������������������������������������������������������������������������0000755�0001762�0000144�00000000000�14402222222�011750� 5����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/hyper.R�����������������������������������������������������������������������������������0000654�0001762�0000144�00000006172�12240527563�013247� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # FIXME: What should happen if a grob has BOTH group and individual hrefs? # Is that an error? hyperlinkGrob <- function(x, href, show=NULL, group=TRUE) { if (group) x$groupLinks <- href else x$links <- href # Determines which window the link is going to open in x$show <- show class(x) <- unique(c("linked.grob", class(x))) x } grid.hyperlink <- function(path, href, show=NULL, group=TRUE, redraw=FALSE, strict=FALSE, grep=FALSE, global=FALSE) { grobApply(path, function(path) { grid.set(path, hyperlinkGrob(grid.get(path), href, show, group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } link <- function(x) { UseMethod("link") } link.grob <- function(x) { x$name <- getID(x$name, "grob", FALSE) href <- x$links if (!is.null(href)) { n <- length(href) if (is.null(names(href))) names(href) <- subGrobName(x$name, 1:n) } groupHref <- x$groupLinks if (!is.null(groupHref)) names(groupHref) <- x$name c(href, groupHref) } # A hopefully useful default for gTrees link.gTree <- function(x, ...) { x$name <- getID(x$name, "grob", FALSE) href <- x$links if (!is.null(href)) { n <- length(href) if (is.null(names(href))) names(href) <- sapply((x$childrenOrder)[1:n], function(x) getID(x, "grob", FALSE)) } groupHref <- x$groupLinks if (!is.null(groupHref)) names(groupHref) <- x$name c(href, groupHref) } linkShow <- function(x) { UseMethod("linkShow") } linkShow.grob <- function(x, ...) { x$name <- getID(x$name, "grob", FALSE) show <- x$show if (is.null(show)) return("") if (!is.null(x$links)) { n <- length(show) if (is.null(names(show))) names(show) <- subGrobName(x$name, 1:n) } if (!is.null(x$groupLinks)) names(show) <- x$name show } linkShow.gTree <- function(x, ...) { x$name <- getID(x$name, "grob", FALSE) show <- x$show if (is.null(show)) return("") if (!is.null(x$links)) { n <- length(show) if (is.null(names(show))) names(show) <- sapply((x$childrenOrder)[1:n], function(x) getID(x, "grob", FALSE)) } if (!is.null(x$groupLinks)) names(show) <- x$name show } # Set the 'links' slot in the device # The catsvg() function in svg.R picks this up # and matches links to element names primToDev.linked.grob <- function(x, dev) { dev@links <- link(x) dev@show <- linkShow(x) NextMethod() } # gridToDev method for linked.grob objects # grobToDev.linked.grob <- function(x, dev) { # svgStartLink(x$href, dev@dev) # NextMethod() # svgEndLink(dev@dev) # } # Ensure the hyperlink is retained on a forced grob forceGrob.linked.grob <- function(x) { y <- NextMethod() if (inherits(y, "forcedgrob")) { y$links <- x$links y$groupLinks <- x$groupLinks y$show <- x$show class(y) <- unique(c("linked.grob", class(y))) } y } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/script.R����������������������������������������������������������������������������������0000654�0001762�0000144�00000001332�12164147366�013421� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ scriptGrob <- function(script=NULL, filename=NULL, type="application/ecmascript", inline=FALSE, name=NULL) { body <- "" href <- "" if (!is.null(filename)) { if (inline) { body <- paste(readLines(filename), collapse="\n") } else { href <- filename } } else if (!is.null(script)) { body <- script } else { stop("No script specified") } sg <- grob(type = type, href = href, body = body, name = name, cl="script.grob") sg } grid.script <- function(...) { grid.draw(scriptGrob(...)) } grobToDev.script.grob <- function(x, dev) { svgScript(x$body, x$href, x$type, x$name, svgdev=dev@dev) } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/svgStrings.R������������������������������������������������������������������������������0000654�0001762�0000144�00000022703�13422214447�014264� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ## Generate SVG using string tools then parse to XML ## [instead of using newXMLNode(..., parent=)] ## For some svg*() functions in svg.R, there are svg*String() functions here ## Difference between svg*() and svg*String() is that the ## latter is vectorised ## For some *() functions in svg.R, there are *Vec() (vectorised) functions here # Removes NULL values and flattens our attrib list # so we can include lists as elements in "alist" # and arrive at a flattened list # ALSO removes names from attr values so they don't corrupt attr names # e.g., avoid list(a=c(b=1)) becoming c(a.b=1) attrListVec <- function(alist) { lapply(alist, unname) } ## 'rx' and 'ry' because x and y assumed to be already rounded ## Assume that rx, ry, and angle all same length svgAngleTransformVec <- function(rx, ry, angle) { trans <- rep("", length(rx)) sigAngle <- !(is.null(angle) | angle == 0 | is.na(angle)) if (any(sigAngle)) { trans[sigAngle] <- paste0("rotate(", round(angle[sigAngle], 2), " ", rx[sigAngle], " ", ry[sigAngle], ")") } trans } svgStyleAttributesVec <- function(svgstyle, dev) { if (emptyStyle(svgstyle)) { list() } else { # Remove non-SVG style attributes (with warning) names <- names(svgstyle) svgnames <- names %in% get("SVGParList", envir=.gridSVGEnv) if (svgStrict(dev) && any(!svgnames)) { warning(paste("Removing non-SVG style attribute name(s):", paste(names[!svgnames], collapse=", "))) svgstyle <- svgstyle[names[svgnames]] } svgstyle } } svgStartLinkString <- function(href="", show="", svgdev=svgDevice()) { href <- paste0('xlink:href="', href, '" ') show <- paste0('xlink:show="', show, '" ') noshow <- is.null(show) | is.na(show) | nchar(show) == 0 if (any(noshow)) { show[noshow] <- "" } paste0("") } svgEndLinkString <- function(href) { rep("", length(href)) } svgCircleString <- function(x, y, r, id=NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { # Draw nothing if non-finite location or size draw <- is.finite(x) & is.finite(y) & is.finite(r) tmpattr <- c(list(id = prefixName(id), cx = round(x, 2), cy = round(y, 2), r = round(r, 2)), svgStyleAttributesVec(style, svgdev), svgAttribTxt(attributes, id, "circle", svgdev)) attrlist <- attrListVec(tmpattr) attrStrings <- mapply(function(a, aname) { paste0(aname, '="', a, '"') }, attrlist, names(attrlist), SIMPLIFY=FALSE) circleString <- paste0("") circleString[!draw] <- "" ## Excapsulate within anchor ? if (!is.null(links) && any(has.link <- !is.na(links))) { circleString[has.link] <- paste0(svgStartLinkString(links[id], show[id]), circleString[has.link], svgEndLinkString(links[id])) } svgString <- paste0('', paste(circleString, collapse=""), "") newNode <- xmlParse(svgString, asText=TRUE) addChildren(svgDevParent(svgdev), kids=xmlChildren(xmlRoot(newNode))) } svgRectString <- function(x, y, width, height, angle=0, id=NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { ## Draw nothing if non-finite location or size draw <- is.finite(x) & is.finite(y) & is.finite(width) & is.finite(height) ## Cope with negative width or height negWidth <- width < 0 negHeight <- height < 0 x[negWidth] <- x + width # shifts x to the left width <- abs(width) y[negHeight] <- y + height # shifts y down height <- abs(height) ## Avoid stupid number of digits in SVG rx <- round(x, 2) ry <- round(y, 2) attrlist <- c(list(id = prefixName(id), x = rx, y = ry, width = round(width, 2), height = round(height, 2), transform = svgAngleTransformVec(rx, ry, angle)), svgStyleAttributesVec(style, svgdev), svgAttribTxt(attributes, id, "rect", svgdev)) attrlist <- attrListVec(attrlist) attrStrings <- mapply(function(a, aname) { paste0(aname, '="', a, '"') }, attrlist, names(attrlist), SIMPLIFY=FALSE) rectString <- paste0("") rectString[!draw] <- "" ## Excapsulate within anchor ? if (!is.null(links) && any(has.link <- !is.na(links))) { rectString[has.link] <- paste0(svgStartLinkString(links[id], show[id]), rectString[has.link], svgEndLinkString(links[id])) } svgString <- paste0('', paste(rectString, collapse=""), "") newNode <- xmlParse(svgString, asText=TRUE) addChildren(svgDevParent(svgdev), kids=xmlChildren(xmlRoot(newNode))) } svgUseSymbolString <- function(id, x, y, size, pch, angle=0, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { ## Draw nothing if non-finite location or size draw <- is.finite(x) & is.finite(y) & is.finite(size) & (is.character(pch) | is.finite(pch)) ## Ensure the "dot" is only 1px wide size[pch == "."] <- 1 ## Ensure we refer to the correct id if (is.character(pch)) { numpch <- as.numeric(sapply(pch, charToRaw)) } else { numpch <- pch } rx <- round(x, 2) ry <- round(y, 2) tmpattr <- list(id = prefixName(id), "xlink:href" = paste0("#", prefixName(paste0("gridSVG.pch", numpch))), x = rx, y = ry, width = round(size, 2), height = round(size, 2)) ## centering adjustment r <- round(-size / 2, 2) tmpattr$transform <- paste0("translate(", r, ",", r, ")") angleTransform <- svgAngleTransformVec(rx, ry, angle) tmpattr$transform <- paste(angleTransform, tmpattr$transform) ## Preserve order tmpattr <- c(tmpattr, svgStyleAttributesVec(style, svgdev), svgAttribTxt(attributes, id, "use", svgdev)) ## Need to scale the stroke width otherwise for large points ## we also have large strokes sw <- as.numeric(tmpattr$`stroke-width`) scalef <- size / 10 # 10 is the point viewBox size sw <- sw / scalef tmpattr$`stroke-width` <- round(sw, 2) ## For pch outside 0-25 or character pch napch <- is.na(pch) if (is.character(pch)) { isDot <- !napch & pch == "." isChar <- !napch & !isDot } else if (is.numeric(pch)) { isDot <- !napch & pch == 46 isChar <- !napch & pch > 25 & !isDot } if (!is.null(tmpattr$"font-size")) { ## Strip unnecessary attribs tmpattr$"font-size"[isDot] <- "" } if (any(isDot)) { ## Because we really want just a dot, use crispEdges ## as anti-aliasing isn't really necessary tmpattr$"shape-rendering" <- "auto" tmpattr$"shape-rendering"[isDot] <- "crispEdges" } if (any(isChar)) { ## Make the s-w small so we see a stroke just barely tmpattr$"stroke-width"[isChar] <- "0.1" ## Set the font-size, otherwise it's going to mess with our scaling. ## 10px so it's the size of the point definition tmpattr$"font-size"[isChar] <- "10" } attrlist <- attrListVec(tmpattr) attrStrings <- mapply(function(a, aname) { paste0(aname, '="', a, '"') }, attrlist, names(attrlist), SIMPLIFY=FALSE) useString <- paste0("") useString[!draw] <- "" ## Excapsulate within anchor ? if (!is.null(links) && any(has.link <- !is.na(links))) { useString[has.link] <- paste0(svgStartLinkString(links[id], show[id]), useString[has.link], svgEndLinkString(links[id])) } svgString <- paste0('', paste(useString, collapse=""), "") newNode <- xmlParse(svgString, asText=TRUE) addChildren(svgDevParent(svgdev), kids=xmlChildren(xmlRoot(newNode))) } �������������������������������������������������������������gridSVG/R/svg.R�������������������������������������������������������������������������������������0000654�0001762�0000144�00000177533�14402221527�012722� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������xmlDecl <- function() { paste0('\n') } htmlFile <- function(filename, svgdev) { # For viewing using Adobe SVG Viewer in IE # OR in Firefox 3 (native support) # create a "wrapper" html file # NOTE that for including plotmath output (as MathML), may # need to use the right sort of headers. # See ~/Research/Rstuff/SVG/PlotMath/README for notes from some # experiments AND email from David Scott that contains an # example from org-babel output 2011-11-01 htmlfile <- paste0(filename, ".html") # NOTE that different browsers prefer different approaches # See email from David Scott 2011-11-03 for some sample code # The empty text node is so that we ensure the object tag is not # self-closing, i.e. there is an explicit closing tag written out obj <- newXMLNode("object", attrs = list(data = filename, type = "image/svg+xml", width = paste0(ceiling(svgDevWidth(svgdev)), "px"), height = paste0(ceiling(svgDevHeight(svgdev)), "px")), newXMLTextNode("")) fn <- saveXML(obj, file = htmlfile) } svgOpen <- function(width=200, height=200, strict=TRUE, rootAttrs=NULL) { # Ensure all vp contexts are now zero assign("contextLevels", 0, envir = .gridSVGEnv) svgdev <- svgDevice(width, height, strict, rootAttrs) svgHeader(width, height, svgdev) return(svgdev) } svgClose <- function(svgdev) { # Ensure all vp contexts are now zero assign("contextLevels", 0, envir = .gridSVGEnv) return(xmlRoot(svgDevParent(svgdev))) } svgJSUtils <- function(exportJS, svgfile, svgroot) { utilsFn <- paste0(svgfile, ".utils.js") utilsFile <- file(system.file("js/utils.js", package = "gridSVG")) utilsLines <- readLines(utilsFile) close(utilsFile) if (exportJS == "file") { destFile <- file(utilsFn) writeLines(utilsLines, destFile) close(destFile) newXMLNode("script", parent = svgroot, at = 0, attrs = list(type = "application/ecmascript", "xlink:href" = utilsFn)) } if (exportJS == "inline") { newXMLNode("script", parent = svgroot, at = 0, attrs = list(type = "application/ecmascript"), newXMLCDataNode(paste0(c("", utilsLines, ""), collapse = "\n"))) } # When we don't want to write to a file we might want to retain some # info, thus just return the JS quietly invisible(paste(utilsLines, collapse = "\n")) } svgCoords <- function(exportCoords, svgfile, svgroot) { coordsJSON <- toJSON(get("vpCoords", envir = .gridSVGEnv)) coordsJSON <- paste("var gridSVGCoords = ", coordsJSON, ";", sep = "") if (exportCoords == "file") { coordsFn <- paste0(svgfile, ".coords.js") coordsFile <- file(coordsFn, "w") cat(coordsJSON, "\n", file = coordsFile, sep = "") close(coordsFile) newXMLNode("script", parent = svgroot, at = 0, attrs = list(type = "application/ecmascript", "xlink:href" = coordsFn)) } if (exportCoords == "inline") { newXMLNode("script", parent = svgroot, at = 0, attrs = list(type = "application/ecmascript"), newXMLCDataNode(paste0(c("", coordsJSON, ""), collapse = "\n"))) } # When we don't want to write to a file we might want to retain some # info, thus return coords info quietly invisible(get("vpCoords", envir = .gridSVGEnv)) } svgMappings <- function(exportMappings, svgfile, svgroot) { usageTable <- get("usageTable", envir = .gridSVGEnv) if (exportMappings == "file") { mappingsFn <- paste0(svgfile, ".mappings.js") mappingsFile <- file(mappingsFn, "w") cat(exportMappings(usageTable), file = mappingsFile) close(mappingsFile) newXMLNode("script", parent = svgroot, at = 0, attrs = list(type = "application/ecmascript", "xlink:href" = mappingsFn)) } if (exportMappings == "inline") { newXMLNode("script", parent = svgroot, at = 0, attrs = list(type = "application/ecmascript"), newXMLCDataNode(exportMappings(usageTable))) } # When we don't want to write to a file we might want to retain some # info, thus return coords info quietly invisible(formatMappings(usageTable)) } svgAnnotate <- function(svgRoot, callAttrs) { # The purpose of this function is to collate all the information # that gridSVG knows about as it being called. Provides us with a # method of potentially debugging output and version detection. # # We put all this information in a comment node so that the output # is not parsed by a viewer. # However, if we are able to get the *text* from the comment we want # to be able to *parse* the output. argNames <- names(callAttrs) argValues <- unname(unlist(callAttrs)) # The call elements that we're going to be building up metadata <- newXMLNode("metadata", namespaceDefinitions = c(gridsvg = "http://www.stat.auckland.ac.nz/~paul/R/gridSVG/")) # Using the package DESCRIPTION version instead of packageVersion # because packageVersion converts our versions from 1.0-0 to 1.0.0. # Ignoring timezone in Sys.time(), should be fine newXMLNode("generator", namespace = "gridsvg", attrs = c(name = "gridSVG", version = packageDescription("gridSVG")$Version, time = as.character(Sys.time())), parent = metadata) for (i in 1:length(callAttrs)) { newXMLNode("argument", namespace = "gridsvg", attrs = c(name = argNames[i], value = argValues[i]), parent = metadata) } seps <- unlist(getSVGoptions()) for (i in 1:length(seps)) { newXMLNode("separator", namespace = "gridsvg", attrs = c(name = names(seps[i]), value = unname(seps[i])), parent = metadata) } # at = 0 because we want this comment to be inserted directly after # the main element addChildren(svgRoot, metadata, at = 0) } svgComment <- function(comment, svgdev=svgDevice()) { # If this is a multi-line comment, to ensure comments have the same # indentation, prefix and suffix the comment with empty lines if (length(comment) > 1) comment <- paste0(c("", comment, ""), collapse="\n") newXMLCommentNode(comment, parent = svgDevParent(svgdev)) } # , , , and elements MAY # have a rotation angle svgAngleTransform <- function(x, y, angle) { if (!is.null(angle) && angle != 0) { paste0("rotate(", round(angle, 2), " ", round(x, 2), " ", round(y, 2), ")") } else { NULL } } svgClipPath <- function(id, vpx, vpy, vpw, vph, vpa, svgdev=svgDevice()) { clipPathID <- prefixName(paste(id, "clipPath", sep = getSVGoption("id.sep"))) # Correct w/h if necessary if (vpw < 0) { vpx <- vpx + vpw # shifts x to the left vpw <- abs(vpw) } if (vph < 0) { vpy <- vpy + vph # shifts y down vph <- abs(vph) } newXMLNode("defs", parent = svgDevParent(svgdev), newXMLNode("clipPath", attrs = attrList(list(id = clipPathID, transform=svgAngleTransform(vpx, vpy, vpa))), newXMLNode("rect", attrs = list(x = round(vpx, 2), y = round(vpy, 2), width = round(vpw, 2), height = round(vph, 2), fill = "none", stroke = "none")))) } svgClipAttr <- function(id, clip) { if (clip) list("clip-path" = paste0("url(#", prefixName(id), getSVGoption("id.sep"), "clipPath)")) else list() } svgMaskAttr <- function(id, mask) { if (mask) list("mask" = paste0("url(#", prefixName(id), getSVGoption("id.sep"), "mask)")) else list() } svgStartElement <- function(id = NULL, classes = NULL, element = NULL, attrs = NULL, namespace = NULL, namespaceDefinitions = NULL, attributes=svgAttrib(), links=NULL, show = NULL, svgdev = svgDevice()) { has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) attrs$id <- prefixName(id) # If garnishing, clobber any existing attrs for (name in names(attributes)) attrs[[name]] <- attributes[[name]] # Avoid clobbering "class" attribute if it exists # Instead, add to the list of classes available if (! is.null(attrs$class) && get("addClasses", envir = .gridSVGEnv)) { cls <- strsplit(attrs$class, "\\s")[[1]] cls <- cls[nzchar(cls)] # Get rid of whitespace classList <- svgClassList(unique(c(cls, classes))) attrs$class <- classList$class } else { classList <- svgClassList(classes) if (length(classList)) attrs$class <- classList$class } attrs <- attrList(attrs) element <- newXMLNode(element, attrs = attrs, namespace = if (is.null(namespace)) character() else namespace, namespaceDefinitions = if (is.null(namespaceDefinitions)) character() else namespaceDefinitions, parent = svgDevParent(svgdev)) svgDevChangeParent(element, svgdev) } # This is pretty much the same as svgEndGroup svgEndElement <- function(id=NULL, links=NULL, svgdev=svgDevice()) { # In the case where we've got a link on our element, set the parent # one level up because we've got an "a" tag above the group has.link <- hasLink(links[id]) if (has.link) svgEndLink(svgdev) svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) } svgTextNode <- function(text, svgdev = svgDevice()) { newXMLTextNode(text, parent = svgDevParent(svgdev)) } svgStartGroup <- function(id=NULL, clip=FALSE, mask=FALSE, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), coords=NULL, classes = NULL, svgdev=svgDevice()) { # If this is a viewport that we're starting a group for # we will have coordinate information, otherwise don't bother. if (! is.null(coords)) { currVpCoords <- get("vpCoords", envir = .gridSVGEnv) currId <- prefixName(getid(id, svgdev)) currVpCoords[[currId]] <- coords assign("vpCoords", currVpCoords, envir = .gridSVGEnv) } has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) attrlist <- c(list(id = prefixName(id)), svgClipAttr(id, clip), svgMaskAttr(id, mask), svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "g", svgdev)) attrlist <- attrList(attrlist) # Avoid clobbering "class" attribute if it exists # Instead, add to the list of classes available if (! is.null(attrlist$class) && get("addClasses", envir = .gridSVGEnv)) { cls <- strsplit(attrlist$class, "\\s")[[1]] cls <- cls[nzchar(cls)] # Get rid of whitespace classList <- svgClassList(unique(c(cls, classes))) attrlist$class <- classList$class } else { classList <- svgClassList(classes) if (length(classList)) attrlist$class <- classList$class } newparent <- newXMLNode("g", parent = svgDevParent(svgdev), attrs = attrlist) svgDevChangeParent(newparent, svgdev) } svgEndGroup <- function(id=NULL, links=NULL, vp=FALSE, svgdev=svgDevice()) { # Handle case where clipGrobs, clipPath grobs and maskGrobs # have started groups. "pop" until we reach the appropriate group if (vp) { # In the case where we have reached something we know # is a viewport, then we don't need to unwind further parentIsVP <- function() { id <- xmlGetAttr(svgDevParent(svgdev), "id") ut <- get("usageTable", envir = .gridSVGEnv) ut <- ut[ut$type == "vp", ] baseGrobName(id) %in% ut$name } contextLevel <- tail(get("contextLevels", envir = .gridSVGEnv), 1) while (! parentIsVP() && contextLevel > 0) { svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) contextLevel <- contextLevel - 1 } # Remove latest vp from list of contexts assign("contextLevels", head(get("contextLevels", envir = .gridSVGEnv), -1), envir = .gridSVGEnv) } else { # In the case where we've got a link on our group, set the parent # one level up because we've got an "a" tag above the group. # Only doing this in the case where we're dealing with a grob. has.link <- hasLink(links[id]) if (has.link) svgEndLink(svgdev) } svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) } svgStartSymbol <- function(pch, svgdev = svgDevice()) { symbol <- newXMLNode("symbol", parent = svgDevParent(svgdev), at = 0, attrs = list(id = prefixName(paste0("gridSVG.pch", pch)), viewBox = "-5 -5 10 10", overflow = "visible")) svgDevChangeParent(symbol, svgdev) } svgEndSymbol <- function(svgdev = svgDevice()) { # Close symbol svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) } svgStartLink <- function(href="", show="", svgdev=svgDevice()) { linkAttrs <- list("xlink:href" = href) if (! is.null(show) && ! is.na(show) && nchar(show)) linkAttrs$`xlink:show` <- show link <- newXMLNode("a", parent = svgDevParent(svgdev), attrs = linkAttrs) svgDevChangeParent(link, svgdev) } svgEndLink <- function(svgdev=svgDevice()) { parent <- xmlParent(svgDevParent(svgdev)) svgDevChangeParent(parent, svgdev) } svgAnimate <- function(attrib, values, begin, interp, duration, rep, revert, id=NULL, svgdev=svgDevice()) { n <- if (is.null(id)) 1 else length(unique(id)) newXMLNode("animate", parent = svgDevParent(svgdev), attrs = list("xlink:href" = paste0("#", prefixName(getid(id, svgdev, n))), attributeName = attrib, begin = paste0(begin, "s"), calcMode = interp, dur = paste0(duration, "s"), values = values, repeatCount = if (is.numeric(rep)) rep else if (rep) "indefinite" else 1, fill = if (revert) "remove" else "freeze")) } # Special case just for stroke-width # values here is a vector of *numeric* values, not just # a single element character vector (e.g. 'svgAnimate') svgAnimatePointSW <- function(values, begin, interp, duration, rep, revert, id=NULL, svgdev=svgDevice()) { n <- if (is.null(id)) 1 else length(unique(id)) keyTimes <- round(seq(from = 0, to = 1, length.out = length(values)), 2) # Change the spline depending on whether we're increasing # the "size" of the stroke width or decreasing keySplines <- -diff(values) keySplines <- sapply(keySplines, function(x) { if (x >= 0) "0 1" # point is growing else "1 0" # point is shrinking }) keySplines <- paste(keySplines, "1 1", collapse = ";") keyTimes <- paste0(round(keyTimes, 2), collapse = ";") values <- paste0(round(values, 2), collapse = ";") newXMLNode("animate", parent = svgDevParent(svgdev), attrs = list("xlink:href" = paste0("#", prefixName(getid(id, svgdev, n))), attributeName = "stroke-width", begin = paste0(begin, "s"), calcMode = "spline", dur = paste0(duration, "s"), values = values, repeatCount = if (is.numeric(rep)) rep else if (rep) "indefinite" else 1, fill = if (revert) "remove" else "freeze", keyTimes = keyTimes, keySplines = keySplines)) } # This and svgAnimateY are untested with id != NULL # and I have a strong suspicion there may be problems # because tapply returns a list -- see svgAnimatePoints # for ideas for a possible solution (esp. the lpaste function) svgAnimateXYWH <- function(attrib, values, begin, interp, duration, rep, revert, id=NULL, svgdev=svgDevice()) { svgAnimate(attrib, paste(round(values, 2), collapse=";"), begin, interp, duration, rep, revert, id, svgdev) } # DON'T call this with a list of length < 2! old.lpaste <- function(alist, collapse) { n <- length(alist) if (n == 2) result <- paste(alist[[1]], alist[[2]]) else result <- paste(alist[[n]], lpaste(alist[1:(n-1)], collapse)) paste(result, collapse=collapse) } lpaste <- function(alist, collapse) { n <- length(alist) result <- alist[[1]] for (i in 2:n) result <- paste(result, alist[[i]]) paste(result, collapse=collapse) } svgAnimatePoints <- function(xvalues, yvalues, timeid, begin, interp, duration, rep, revert, id=NULL, svgdev=svgDevice()) { if (is.null(id)) warning("Only one point to animate") else svgAnimate("points", paste(lapply(split(paste(round(xvalues, 2), round(yvalues, 2), sep=","), timeid), paste, collapse=" "), collapse=";"), begin, interp, duration, rep, revert, id, svgdev) } svgAnimatePath <- function(xvalues, yvalues, pathid, timeid, begin, interp, duration, rep, revert, id=NULL, svgdev=svgDevice()) { if (is.null(id)) warning("Not sure what this animation means?") else { # Split into time segments x <- split(xvalues, timeid) y <- split(yvalues, timeid) pid <- split(pathid, timeid) d <- mapply(function(xtime, ytime, pid) { # Split into path components xx <- split(xtime, pid) yy <- split(ytime, pid) txt <- mapply(function(x, y) { paste(paste(c("M", rep("L", length(x) - 1)), round(x, 2), round(y, 2), collapse=" "), "Z") }, xx, yy) paste(unlist(txt), collapse=" ") }, x, y, pid) svgAnimate("d", paste(d, collapse=";"), begin, interp, duration, rep, revert, id, svgdev) } } svgAnimateTransform <- function(attrib, values, begin, interp, duration, rep, revert, additive = "replace", id=NULL, svgdev=svgDevice()) { n <- if (is.null(id)) 1 else length(unique(id)) newXMLNode("animateTransform", parent = svgDevParent(svgdev), attrs = list("xlink:href" = paste0("#", prefixName(getid(id, svgdev, n))), attributeName = "transform", type = attrib, begin = paste0(begin, "s"), calcMode = interp, dur = paste0(duration, "s"), values = values, additive = additive, repeatCount = if (is.numeric(rep)) rep else if (rep) "indefinite" else 1, fill = if (revert) "remove" else "freeze")) } svgAnimateTranslation <- function(xvalues, yvalues, begin, interp, duration, rep, revert, additive = "replace", id=NULL, svgdev=svgDevice()) { svgAnimateTransform("translate", paste(round(xvalues, 2), round(yvalues, 2), sep=",", collapse=';'), begin, interp, duration, rep, revert, additive, id, svgdev) } svgAnimateRotation <- function(angle, xvalues, yvalues, begin, interp, duration, rep, revert, additive = "replace", id=NULL, svgdev=svgDevice()) { svgAnimateTransform("rotate", paste(round(angle, 2), round(xvalues, 2), round(yvalues, 2), sep=" ", collapse=';'), begin, interp, duration, rep, revert, additive, id, svgdev) } svgAnimateScale <- function(xvalues, yvalues, begin, interp, duration, rep, revert, additive = "replace", id=NULL, svgdev=svgDevice()) { svgAnimateTransform("scale", paste(round(xvalues, 2), round(yvalues, 2), sep=",", collapse=';'), begin, interp, duration, rep, revert, additive, id, svgdev) } genAlpha <- function(N) { m <- suppressWarnings(matrix(rep(letters, length.out=N), nrow=26)) alpha <- apply(m, 1, function(x) { unlist(lapply(mapply(rep, x, 1:length(x)), paste, collapse="")) }) t(alpha)[1:N] } svgLines <- function(x, y, id=NULL, arrow = NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { ## Never fill a line style$fill <- "none" has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) ## Handle NA values in (x, y) xylist <- splitOnNA(x, y) N <- length(xylist) if (N > 0) { if (N > 1) { alpha <- genAlpha(N) } else { alpha <- "" } for (i in 1:N) { ## Grabbing arrow info for marker element references ## Arrows NOT drawn at NA splits if (! is.null(arrow$ends)) { if (arrow$ends == "both" && i == 1 && N == 1) lineMarkerTxt <- markerTxt("both", id) else if ((arrow$ends == "both" || arrow$ends == "first") && i == 1 && is.finite(x[1]) && is.finite(y[1])) lineMarkerTxt <- markerTxt("first", id) else if ((arrow$ends == "both" || arrow$ends == "last") && i == N && is.finite(x[length(x)]) && is.finite(y[length(y)])) lineMarkerTxt <- markerTxt("last", id) else lineMarkerTxt <- NULL } else { lineMarkerTxt <- NULL } attrlist <- c(list(id = prefixName(paste0(id, alpha[i])), points = paste0(round(xylist[[i]]$x, 2), ",", round(xylist[[i]]$y, 2), collapse=" ")), lineMarkerTxt, svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "polyline", svgdev)) attrlist <- attrList(attrlist) newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = attrlist) } } if (has.link) svgEndLink(svgdev) } svgMarker <- function(x, y, type, ends, direction, name, style=svgStyle(), svgdev=svgDevice()) { width <- abs(max(x) - min(x)) height <- abs(max(y) - min(y)) if (length(x) != length(y)) stop("x and y must be same length") if (is.atomic(x)) { if (is.atomic(y)) { x <- list(x) y <- list(y) } else { stop("'x' and 'y' must both be lists or both be atomic") } } d <- mapply( function(subx, suby) { openPath <- paste(c("M", rep("L", length(subx) - 1)), round(subx, 2), round(suby, 2), collapse=" ") if (type == 2) # Closed arrow paste(openPath, "Z") else openPath }, x, y) # If the arrow is open, we don't want to fill it if (type == 1) style$fill <- "none" # [[1]] and [1]: markerStart # [[2]] and [2]: markerEnd # pathattrs is simply a list where each element # is a list that we can simply pass in as attrs # to newXMLNode ids <- markerName("both", name) refXs <- direction * round(c(-width, width), 2) refYs <- round(c(-height / 2, height / 2), 2) pathlist <- attrList(c(list(d = d), svgStyleAttributes(style, svgdev))) # It is possible for width to be 0, i.e. when angle=90. # Ensure that the marker is always at least as wide as the # stroke width that it is given. mwidth <- max(as.numeric(pathlist$`stroke-width`), width) mheight <- max(as.numeric(pathlist$`stroke-width`), height) pathattrs <- list(pathlist, pathlist) pathattrs[[1]]$transform <- "rotate(180)" newXMLNode("defs", parent = svgDevParent(svgdev), newXMLNode("marker", attrs = list(id = ids[1], refX = refXs[1], refY = refYs[1], overflow = "visible", markerUnits = "userSpaceOnUse", markerWidth = round(mwidth, 2), markerHeight = round(mheight, 2), orient = "auto"), newXMLNode("path", attrs = pathattrs[[1]])), newXMLNode("marker", attrs = list(id = ids[2], refX = refXs[2], refY = refYs[2], overflow = "visible", markerUnits = "userSpaceOnUse", markerWidth = round(mwidth, 2), markerHeight = round(mheight, 2), orient = "auto"), newXMLNode("path", attrs = pathattrs[[2]]))) } markerTxt <- function(ends, name) { mname <- markerName(ends, name) if (ends == "first") lmt <- list("marker-start" = paste0("url(#", mname, ")")) if (ends == "last") lmt <- list("marker-end" = paste0("url(#", mname, ")")) if (ends == "both") lmt <- list("marker-start" = paste0("url(#", mname[1], ")"), "marker-end" = paste0("url(#", mname[2], ")")) lmt } markerName <- function(ends, name) { if (ends == "first") mname <- paste(name, getSVGoption("id.sep"), "markerStart", sep="") if (ends == "last") mname <- paste(name, getSVGoption("id.sep"), "markerEnd", sep="") if (ends == "both") mname <- c(paste(name, getSVGoption("id.sep"), "markerStart", sep=""), paste(name, getSVGoption("id.sep"), "markerEnd", sep="")) prefixName(mname) } svgPolygon <- function(x, y, id=NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { if (length(x) != length(y)) stop("x and y must be same length") has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) # Handle NA values in (x, y) xylist <- splitOnNA(x, y) N <- length(xylist) if (N > 0) { if (N > 1) { alpha <- genAlpha(N) } else { alpha <- "" } for (i in 1:N) { attrlist <- c(list(id = prefixName(paste0(id, alpha[i])), points = paste0(round(xylist[[i]]$x, 2), ",", round(xylist[[i]]$y, 2), collapse=" ")), svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "polygon", svgdev)) attrlist <- attrList(attrlist) newXMLNode("polygon", parent = svgDevParent(svgdev), attrs = attrlist) } } if (has.link) svgEndLink(svgdev) } # Differs from polygon because it can have sub-paths svgPath <- function(x, y, rule, id=NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { if (length(x) != length(y)) stop("x and y must be same length") if (is.atomic(x)) { if (is.atomic(y)) { # NAs allowed; turn into sub-paths xy <- splitOnNA(x, y) x <- lapply(xy, "[[", "x") y <- lapply(xy, "[[", "y") } else { stop("'x' and 'y' must both be lists or both be atomic") } # If the path contains multiple sub-paths then NAs are NOT allowed # (to follow 'grid' behaviour) bad <- !all(sapply(x, function(z) { all(is.finite(z)) })) || !all(sapply(y, function(z) { all(is.finite(z)) })) if (bad) stop("non-finite x or y in graphics path") } n <- length(x) d <- mapply(function(subx, suby) { paste(paste(c("M", rep("L", length(subx) - 1)), round(subx, 2), round(suby, 2), collapse=" "), "Z") }, x, y) tmpattr <- c(list(id = prefixName(id), d = paste(unlist(d), collapse = " "), "fill-rule" = switch(rule, winding="nonzero", "evenodd")), svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "path", svgdev)) tmpattr <- attrList(tmpattr) has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) newXMLNode("path", parent = svgDevParent(svgdev), attrs = tmpattr) if (has.link) svgEndLink(svgdev) } svgRaster <- function(x, y, width, height, angle=0, datauri, id=NULL, just, vjust, hjust, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { # Draw nothing if non-finite location or size if (!(is.finite(x) && is.finite(y) && is.finite(width) && is.finite(height))) return() has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) rx <- round(x, 2) ry <- round(y, 2) transform <- paste0("translate(", rx, ", ", round(ry, 2), ")") angleTransform <- svgAngleTransform(rx, ry, angle) if (!is.null(angleTransform)) { transform <- paste(angleTransform, transform) } attrlist <- c(list(id = prefixName(id), transform = transform), svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "g", svgdev)) attrlist <- attrList(attrlist) newXMLNode("g", parent = svgDevParent(svgdev), attrs = attrlist, newXMLNode("g", attrs = list(id = paste(prefixName(id), "scale", sep = getSVGoption("id.sep")), transform = paste0("scale(", round(width, 2), ", ", round(height, 2), ")")), newXMLNode("image", # Suppress the namespace warning because # we know in this specific case it is # a spurious warning suppressNamespaceWarning = TRUE, attrs = list(x = 0, y = 0, width = 1, height = 1, transform = "scale(1, -1) translate(0, -1)", "xlink:href" = datauri, preserveAspectRatio = "none")))) if (has.link) svgEndLink(svgdev) } svgRect <- function(x, y, width, height, angle=0, id=NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { # Draw nothing if non-finite location or size if (!(is.finite(x) && is.finite(y) && is.finite(width) && is.finite(height))) return() has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) if (width < 0) { x <- x + width # shifts x to the left width <- abs(width) } if (height < 0) { y <- y + height # shifts y down height <- abs(height) } rx <- round(x, 2) ry <- round(y, 2) attrlist <- c(list(id = prefixName(id), x = rx, y = ry, width = round(width, 2), height = round(height, 2), transform = svgAngleTransform(rx, ry, angle)), svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "rect", svgdev)) attrlist <- attrList(attrlist) newXMLNode("rect", parent = svgDevParent(svgdev), attrs = attrlist) if (has.link) svgEndLink(svgdev) } svgTextSplitLines <- function(text, id, lineheight, charheight, vjust, svgdev) { # Splitting based on linebreaks splitText <- strsplit(text, "\n") # If text is "", produces character(0), so fix that if (length(splitText[[1]]) == 0) splitText[[1]] <- "" n <- length(splitText[[1]]) # Need to adjust positioning based on vertical justification. # Horizontal justification is done for us. # Only the first line needs to be modified, the rest are all # just one line below the previous line if (vjust %in% c("centre", "center")) firstDelta <- - ((lineheight * (n - 1) - charheight) / 2) if (vjust == "bottom") firstDelta <- - (n - 1) * lineheight if (vjust == "top") firstDelta <- charheight lineheight <- c(firstDelta, rep(lineheight, n - 1)) textContent <- splitText[[1]] # Note that x=0 here so that we push it to the left, hjust # is worked out automatically from there for (i in 1:n) { newXMLNode("tspan", parent = svgDevParent(svgdev), attrs = list(id = paste(id, "tspan", i, sep=getSVGoption("id.sep")), dy = round(lineheight[i], 2), x = 0), newXMLTextNode(textContent[i])) } } svgTextElement <- function(text, id, rot, hjust, vjust, lineheight, charheight, style, svgdev=svgDevice()) { # Rotation in SVG goes clockwise from +ve x=axis transform <- if (rot != 0) list(transform = paste0("rotate(", round(-rot, 2), ")")) else NULL attrlist <- c(list(x = 0, y = 0, id = paste(id, "text", sep=getSVGoption("id.sep"))), transform, textAnchor(hjust), svgStyleAttributes(style, svgdev)) attrlist <- attrList(attrlist) newpar <- newXMLNode("text", parent = svgDevParent(svgdev), attrs = attrlist) # Set parent of all s to be the el svgDevChangeParent(newpar, svgdev) # Write each of the lines here svgTextSplitLines(text, id, lineheight, charheight, vjust, svgdev) # Resetting parent svgDevChangeParent(xmlParent(newpar), svgdev) } # NOTE that the precise placement of math is even less likely to work # than normal text. Besides the problem of the browser using a # different font (which is more likely because a math expression # typically uses multiple fonts), the web browser will be using # a different formula layout engine compared to R so things like # the spacing between operators will be different. # One particular problem is that R justifies math formulas # relative to the bounding box of the formula, whereas it # appears that Firefox at least justifies relative to the formula # baseline (just from observation). # The code below tries to do something rational by making use # of finer detail metric information for the formula # to mimic R's vertical justification. svgMathElement <- function(text, id, rot, hjust, vjust, width, height, ascent, descent, lineheight, charheight, fontheight, fontfamily, fontface, style, svgdev=svgDevice()) { # Determine x/y based on width/height and hjust/vjust if (hjust %in% c("centre", "center")) x <- -width/2 if (hjust == "left") x <- 0 if (hjust == "right") x <- -width if (vjust %in% c("centre", "center")) y <- -(max(ascent, fontheight) + descent)/2 if (vjust == "bottom") y <- -(max(ascent, fontheight) + descent) if (vjust == "top") { if (fontheight > ascent) y <- -(fontheight - ascent) else y <- (ascent - fontheight) } tmpattr <- c(list(x = round(x, 2), y = round(y, 2), id = paste(id, "mathtext", sep=getSVGoption("id.sep")), width = round(3*width, 2), height = round(3*height, 2)), svgStyleAttributes(style, svgdev)) if (rot != 0) tmpattr$transform <- paste0("rotate(", round(-rot, 2), ")") switch <- newXMLNode("switch", parent = svgDevParent(svgdev)) foreignObj <- newXMLNode("foreignObject", parent = switch, attrs = attrList(tmpattr)) svgDevChangeParent(foreignObj, svgdev) expr2mml(text, fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(switch), svgdev) } svgText <- function(x, y, text, hjust="left", vjust="bottom", rot=0, width=1, height=1, angle=0, ascent=1, descent=0, lineheight=1, charheight=.8, fontheight=1, fontfamily="sans", fontface="plain", id=NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { # Draw nothing if x/y non-finite if (!(is.finite(x) && is.finite(y))) return() has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) if (width < 0) { x <- x + width # shifts x to the left width <- abs(width) } if (height < 0) { y <- y + height # shifts y down height <- abs(height) } rx <- round(x, 2) ry <- round(y, 2) topattrs <- list() topattrs$id <- prefixName(id) angleTransform <- svgAngleTransform(rx, ry, angle) topattrs$transform <- paste0("translate(", rx, ", ", ry, ")") if (!is.null(angleTransform)) { topattrs$transform <- paste(angleTransform, topattrs$transform) } topattrs$`stroke-width` <- "0.1" topattrs <- c(topattrs, svgAttribTxt(attributes, id, "g", svgdev)) # Flip the y-direction again so that text is drawn "upright" # Do the flip in a separate so that can animate the # translation easily # Use a tspan to do the vertical alignment topg <- newXMLNode("g", parent = svgDevParent(svgdev), attrs = topattrs) sec <- newXMLNode("g", parent = topg, attrs = list(id = paste(prefixName(id), "scale", sep = getSVGoption("id.sep")), transform = "scale(1, -1)")) # Let all child elements or MathML fragments be # located under the *second* svgDevChangeParent(sec, svgdev) if (is.language(text)) { svgMathElement(text, prefixName(id), rot, hjust, vjust, width, height, ascent, descent, lineheight, charheight, fontheight, fontfamily, fontface, style, svgdev) } else { svgTextElement(text, prefixName(id), rot, hjust, vjust, lineheight, charheight, style, svgdev) } # Reset parent to parent of entire text "grob" svgDevChangeParent(xmlParent(topg), svgdev) if (has.link) svgEndLink(svgdev) } svgCircle <- function(x, y, r, id=NULL, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { # Draw nothing if non-finite location or size if (!(is.finite(x) && is.finite(y) && is.finite(r))) return() has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) tmpattr <- c(list(id = prefixName(id), cx = round(x, 2), cy = round(y, 2), r = round(r, 2)), svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "circle", svgdev)) tmpattr <- attrList(tmpattr) has.link <- hasLink(links[id]) newXMLNode("circle", parent = svgDevParent(svgdev), attrs = tmpattr) if (has.link) svgEndLink(svgdev) } svgScript <- function(body, href, type="application/ecmascript", id=NULL, svgdev=svgDevice()) { tmpattr <- list(type = type, id = prefixName(getid(id, svgdev, 1))) if (nchar(href) > 0) tmpattr$`xlink:href` <- href script <- newXMLNode("script", parent = svgDevParent(svgdev), attrs = tmpattr) if (nchar(body) > 0) { # "body" adds newlines because otherwise the CDATA delimiters are part # of the first and last line of text, break it apart to look nicer newXMLCDataNode(paste0("\n", body, "\n"), parent = script) } } # Beginning of definition of all PCH elements # Note that these definitions come ported from # R's /src/main/engine.c # Note in particular that radius is defined to be 0.375 * size # so that width is 0.75 of the specified size. Most of the time # this means we have a computed radius of 3.75 svgUseSymbol <- function(id, x, y, size, pch, angle=0, attributes=svgAttrib(), links=NULL, show=NULL, style=svgStyle(), svgdev=svgDevice()) { # Draw nothing if non-finite location or size if (!(is.finite(x) && is.finite(y) && is.finite(size))) return() has.link <- hasLink(links[id]) if (has.link) svgStartLink(links[id], show[id], svgdev) # Ensure the "dot" is only 1px wide if (pch == ".") size <- 1 # Ensure we refer to the correct id numpch <- if (is.character(pch)) as.numeric(charToRaw(pch)) else pch rx <- round(x, 2) ry <- round(y, 2) tmpattr <- list(id = prefixName(id), "xlink:href" = paste0("#", prefixName(paste0("gridSVG.pch", numpch))), x = rx, y = ry, width = round(size, 2), height = round(size, 2)) # centering adjustment r <- round(-size / 2, 2) tmpattr$transform <- paste0("translate(", r, ",", r, ")") angleTransform <- svgAngleTransform(rx, ry, angle) if (!is.null(angleTransform)) { tmpattr$transform <- paste(angleTransform, tmpattr$transform) } # Preserve order tmpattr <- c(tmpattr, svgStyleAttributes(style, svgdev), svgAttribTxt(attributes, id, "use", svgdev)) # Need to scale the stroke width otherwise for large points # we also have large strokes sw <- as.numeric(tmpattr$`stroke-width`) scalef <- size / 10 # 10 is the point viewBox size sw <- sw / scalef tmpattr$`stroke-width` <- round(sw, 2) # For pch outside 0-25 or characters if (is.character(pch) || (is.numeric(pch) && pch > 25)) { # When we have a "." we have a special case if ((is.character(pch) && pch == ".") || (is.numeric(pch) && pch == 46)) { # Strip unnecessary attribs fsind <- which(names(tmpattr) == "font-size") if (length(fsind) > 0) tmpattr <- tmpattr[-fsind] # Because we really want just a dot, use crispEdges # as anti-aliasing isn't really necessary tmpattr$`shape-rendering` <- "crispEdges" } else { # Make the s-w small so we see a stroke just barely tmpattr$`stroke-width` <- "0.1" # Set the font-size, otherwise it's going to mess with our scaling. # 10px so it's the size of the point definition tmpattr$`font-size` <- "10" } } newXMLNode("use", parent = svgDevParent(svgdev), attrs = attrList(tmpattr)) if (has.link) svgEndLink(svgdev) } # Dispatching function, simply following a naming scheme, # somewhat nasty but works fine svgPoint <- function(pch, svgdev = svgDevice()) { textpch <- FALSE if (is.character(pch)) { if (pch == ".") fnname <- "svgPointDot" else { fnname <- "svgPointChar" textpch <- TRUE } } else { fnname <- paste0("svgPoint", pch) } do.call(fnname, if (textpch) list(pch = pch, svgdev = svgdev) else list(svgdev = svgdev)) } # Special point, the dot svgPointDot <- function(svgdev = svgDevice()) { newXMLNode("rect", parent = svgDevParent(svgdev), attrs = list(x = -0.5, y = -0.5, width = 1, height = 1)) } # Actual point character svgPointChar <- function(pch, svgdev = svgDevice()) { # Transform to "flip" the text back newXMLNode("text", parent = svgDevParent(svgdev), attrs = list(x = 0, y = 0, fontsize = 7.5, transform = "scale(1, -1)", "text-anchor" = "middle", "baseline-shift" = "-25%"), newXMLTextNode(pch)) } # S square svgPoint0 <- function(svgdev = svgDevice()) { newXMLNode("rect", parent = svgDevParent(svgdev), attrs = list(x = -3.75, y = -3.75, width = 7.5, height = 7.5)) } # S octahedron (circle) svgPoint1 <- function(svgdev = svgDevice()) { newXMLNode("circle", parent = svgDevParent(svgdev), attrs = list(cx = 0, cy = 0, r = 3.75)) } # S triangle - point up svgPoint2 <- function(svgdev = svgDevice()) { TRC0 <- sqrt(4 * pi/(3 * sqrt(3))) TRC1 <- TRC0 * sqrt(3) / 2 TRC2 <- TRC0 / 2 r <- TRC0 * 3.75 xc <- TRC1 * 3.75 yc <- TRC2 * 3.75 linexs <- round(c(0, xc, -xc, 0), 2) lineys <- round(c(r, -yc, -yc, r), 2) newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(linexs, lineys, sep = ",", collapse = " "))) } # S plus svgPoint3 <- function(svgdev = svgDevice()) { xc <- sqrt(2) * 3.75 yc <- sqrt(2) * 3.75 l1xs <- round(c(-xc, xc), 2) l1ys <- c(0, 0) l2xs <- c(0, 0) l2ys <- round(c(-yc, yc), 2) # Horizontal newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l1xs, l1ys, sep = ",", collapse = " "))) # Vertical newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l2xs, l2ys, sep = ",", collapse = " "))) } # S times svgPoint4 <- function(svgdev = svgDevice()) { xc <- 3.75 yc <- 3.75 l1xs <- c(-xc, xc) l1ys <- c(-yc, yc) l2xs <- c(-xc, xc) l2ys <- c(yc, -yc) # / newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l1xs, l1ys, sep = ",", collapse = " "))) # \ newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l2xs, l2ys, sep = ",", collapse = " "))) } # S diamond svgPoint5 <- function(svgdev = svgDevice()) { xc <- sqrt(2) * 3.75 yc <- sqrt(2) * 3.75 linexs <- round(c(-xc, 0, xc, 0, -xc), 2) lineys <- round(c(0, yc, 0, -yc, 0), 2) newXMLNode("polygon", parent = svgDevParent(svgdev), attrs = list(points = paste(linexs, lineys, sep = ",", collapse = " "))) } # S triangle - point down svgPoint6 <- function(svgdev = svgDevice()) { TRC0 <- sqrt(4 * pi/(3 * sqrt(3))) TRC1 <- TRC0 * sqrt(3) / 2 TRC2 <- TRC0 / 2 r <- TRC0 * 3.75 xc <- TRC1 * 3.75 yc <- TRC2 * 3.75 linexs <- round(c(0, xc, -xc, 0), 2) lineys <- round(c(-r, yc, yc, -r), 2) newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(linexs, lineys, sep = ",", collapse = " "))) } # S square and times superimposed svgPoint7 <- function(svgdev = svgDevice()) { svgPoint0(svgdev) svgPoint4(svgdev) } # S plus and times superimposed svgPoint8 <- function(svgdev = svgDevice()) { svgPoint3(svgdev) svgPoint4(svgdev) } # S diamond and plus superimposed svgPoint9 <- function(svgdev = svgDevice()) { svgPoint3(svgdev) svgPoint5(svgdev) } # S hexagon (circle) and plus superimposed svgPoint10 <- function(svgdev = svgDevice()) { newXMLNode("circle", parent = svgDevParent(svgdev), attrs = list(cx = 0, cy = 0, r = 3.75)) l1xs <- c(-3.75, 3.75) l1ys <- c(0, 0) l2xs <- c(0, 0) l2ys <- c(-3.75, 3.75) # Horizontal newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l1xs, l1ys, sep = ",", collapse = " "))) # Vertical newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l2xs, l2ys, sep = ",", collapse = " "))) } # S superimposed triangles svgPoint11 <- function(svgdev = svgDevice()) { TRC0 <- sqrt(4 * pi/(3 * sqrt(3))) TRC1 <- TRC0 * sqrt(3) / 2 TRC2 <- TRC0 / 2 xc <- 3.75 r <- TRC0 * xc yc <- TRC2 * xc yc <- 0.5 * (yc + r) xc <- TRC1 * xc # Pointing down linexs <- round(c(0, xc, -xc, 0), 2) lineys <- round(c(-r, yc, yc, -r), 2) newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(linexs, lineys, sep = ",", collapse = " "))) # Pointing up linexs <- round(c(0, xc, -xc, 0), 2) lineys <- round(c(r, -yc, -yc, r), 2) newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(linexs, lineys, sep = ",", collapse = " "))) } # S square and plus superimposed svgPoint12 <- function(svgdev = svgDevice()) { svgPoint0(svgdev) l1xs <- c(-3.75, 3.75) l1ys <- c(0, 0) l2xs <- c(0, 0) l2ys <- c(-3.75, 3.75) # Horizontal newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l1xs, l1ys, sep = ",", collapse = " "))) # Vertical newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(l2xs, l2ys, sep = ",", collapse = " "))) } # S octagon (circle) and times superimposed svgPoint13 <- function(svgdev = svgDevice()) { svgPoint1(svgdev) svgPoint4(svgdev) } # S square and point-*down* triangle superimposed # Note: R source refers to this as being point-up svgPoint14 <- function(svgdev = svgDevice()) { r <- 3.75 xs <- c(0, r, -r, 0) ys <- c(-r, r, r, -r) newXMLNode("polyline", parent = svgDevParent(svgdev), attrs = list(points = paste(xs, ys, sep = ",", collapse = " "))) newXMLNode("rect", parent = svgDevParent(svgdev), attrs = list(x = -r, y = -r, width = 2*r, height = 2*r)) } # S filled square svgPoint15 <- function(svgdev = svgDevice()) { svgPoint0(svgdev) } # S filled octagon (circle) svgPoint16 <- function(svgdev = svgDevice()) { svgPoint1(svgdev) } # S filled point-up triangle svgPoint17 <- function(svgdev = svgDevice()) { svgPoint2(svgdev) } # S filled diamond svgPoint18 <- function(svgdev = svgDevice()) { svgPoint5(svgdev) } # R filled circle svgPoint19 <- function(svgdev = svgDevice()) { svgPoint1(svgdev) } # R `Dot' (small circle) svgPoint20 <- function(svgdev = svgDevice()) { newXMLNode("circle", parent = svgDevParent(svgdev), attrs = list(cx = 0, cy = 0, r = 2.5)) } # circles svgPoint21 <- function(svgdev = svgDevice()) { svgPoint1(svgdev) } # squares svgPoint22 <- function(svgdev = svgDevice()) { r <- round(sqrt(pi / 4) * 3.75, 2) newXMLNode("rect", parent = svgDevParent(svgdev), attrs = list(x = -r, y = -r, width = 2*r, height = 2*r)) } # diamonds svgPoint23 <- function(svgdev = svgDevice()) { r <- 3.75 * sqrt(pi / 4) * sqrt(2) xs <- round(c(-r, 0, r, 0, -r), 2) ys <- round(c(0, r, 0, -r, 0), 2) newXMLNode("polygon", parent = svgDevParent(svgdev), attrs = list(points = paste(xs, ys, sep = ",", collapse = " "))) } # triangle (point up) svgPoint24 <- function(svgdev = svgDevice()) { svgPoint2(svgdev) } # triangle (point down) svgPoint25 <- function(svgdev = svgDevice()) { svgPoint6(svgdev) } ############# # Internal functions ############# # SVG Devices # A device is an environment so that we can modify values # stored within it. # Store a list of transformation functions for # x, y, width, and height; this will allow viewports # to be defined within user coordinates (see svgPushViewport # and svgPopViewport) svgDevice <- function(width=200, height=200, strict=TRUE, rootAttrs) { dev <- new.env(FALSE, emptyenv()) assign("width", width, envir=dev) assign("height", height, envir=dev) assign("parent", NULL, envir=dev) assign("strict", strict, envir=dev) assign("rootAttrs", rootAttrs, envir=dev) assign("id", 1, envir=dev) return(dev) } svgDevWidth <- function(svgdev) { get("width", envir=svgdev) } svgDevHeight <- function(svgdev) { get("height", envir=svgdev) } svgStrict <- function(svgdev) { get("strict", envir=svgdev) } svgRootAttrs <- function(svgdev) { get("rootAttrs", envir=svgdev) } svgDevParent <- function(svgdev) { get("parent", envir=svgdev) } svgDevChangeParent <- function(newpar, svgdev) { assign("parent", newpar, envir=svgdev) } getid <- function(id, svgdev, n=1) { if (is.null(id)) svgID(svgdev) + (1:n - 1) else { if (n > 1) paste(id, 1:n, sep="") else id } } svgID <- function(svgdev) { get("id", envir=svgdev) } hasLink <- function(link) { if (length(link) > 1) { warning("grob name has length > 1; only using first name") link <- link[1] } ! (is.null(link) || is.na(link)) } incID <- function(svgdev, n=1) { assign("id", get("id", envir=svgdev) + n, envir=svgdev) } svgHeader <- function(width, height, svgdev=svgDevice()) { # This header tested on standalone SVG file in Firefox 3 # FIXME: add default xmlns for animation and scripts too? attrs <- svgRootAttrs(svgdev) # Resolve any conflict between rootAttrs[c("width", "height")] # and 'width' and 'height' passed in (from device size) if (!"width" %in% names(attrs)) { attrs$width <- paste0(round(width, 2), "px") } if (!"height" %in% names(attrs)) { attrs$height <- paste0(round(height, 2), "px") } if (!"viewBox" %in% names(attrs)) { attrs$viewBox <- paste(0, 0, round(width, 2), round(height, 2)) } if (!"version" %in% names(attrs)) { attrs$version <- "1.1" } # Give the element an ID only if there is a prefix AND # 'rootAttrs' does not specify an ID if (!"id" %in% names(attrs)) { if (nzchar(get("prefix", envir = .gridSVGEnv))) { attrs$id <- get("prefix", envir = .gridSVGEnv) } } if (svgStrict(svgdev)) { checkAttrs(attrs, "svg") } svgdoc <- newXMLDoc(namespaces = list("http://www.w3.org/2000/svg", xlink = "http://www.w3.org/1999/xlink"), node = newXMLNode("svg", attrs = attrList(attrs), namespaceDefinitions = list("http://www.w3.org/2000/svg", xlink = "http://www.w3.org/1999/xlink"))) # Invert the y-axis so that y and height values measure "up" rootg <- newXMLNode("g", parent = xmlRoot(svgdoc), attrs = list(transform = paste0("translate(0, ", round(svgDevHeight(svgdev), 2), ") scale(1, -1)"))) svgDevChangeParent(rootg, svgdev) } # SVG attributes svgAttrib <- function(...) { temp <- list(...) if (length(temp) == 0) list() else if (is.null(temp[[1]])) list() else temp } # Removes NULL values and flattens our attrib list # so we can include lists as elements in "alist" # and arrive at a flattened list # ALSO removes names from attr values so they don't corrupt attr names # e.g., avoid list(a=c(b=1)) becoming c(a.b=1) attrList <- function(alist) { as.list(unlist(lapply(alist, unname))) } listToSVGAttrib <- function(alist) { alist } emptyAttrib <- function(attributes) { length(attributes) == 0 } svgClassList <- function(classes) { if (is.null(classes) || ! get("addClasses", envir = .gridSVGEnv)) list() else list(class = paste0(unique(classes), collapse = " ")) } checkAttrs <- function(attrList, eltName) { attrTable <- rbind(get("genAttrTable", .gridSVGEnv), get("presAttrTable", .gridSVGEnv)) validAttrs <- attrTable$attribute[attrTable$element == eltName] names <- names(attrList) svgnames <- names %in% validAttrs if (!all(svgnames)) { warning(paste("Removing non-SVG attribute name(s):", paste(names[!svgnames], collapse=", "))) attrList[names[svgnames]] } else { attrList } } # Only use the attributes that are for this 'id' svgAttribTxt <- function(attributes, id, eltName, svgdev) { if (emptyAttrib(attributes)) { list() } else { attributes <- lapply(attributes, function(attr, id) { kept <- attr[names(attr) == id] if (length(kept) == 0) NULL else kept }, id) # Drop NULL attributes attributes <- attributes[!sapply(attributes, is.null)] # Need to wipe out names because it messes things up when we # need to create an attribute list for nodes if (length(attributes) > 0) { attrs <- lapply(attributes, function(x) { names(x) <- NULL x }) if (svgStrict(svgdev)) { checkAttrs(attrs, eltName) } else { attrs } } else { list() } } } # SVG styling svgStyle <- function(...) { list(...) } listToSVGStyle <- function(alist) { alist } emptyStyle <- function(svgstyle) { length(svgstyle) == 0 } svgStyleCSS <- function(svgstyle) { if (emptyStyle(svgstyle)) { "" } else { paste('style="', do.call("paste", c(mapply(function(name, style) { paste(name, ":", style, sep="") }, names(svgstyle), svgstyle), list(sep="; "))), '"', sep="") # paste('style="', paste(names(svgstyle), ":", # paste(svgstyle), sep="", collapse="; "), # '"', sep="") } } # SVG version of gpar() # NOTE using SVG presentation attributes # RATHER THAN CSS style attribute # BECAUSE ... # - can modify single presentation attribute without affecting # other presentation attributes (if CSS style then have to # reset the entire thing) and can do this from JavaScript. # - presentation attributes have lower priority than CSS style # SO this allows overriding by specifying CSS style later. # Can also override with general style sheet later. svgStyleAttributes <- function(svgstyle, dev) { if (emptyStyle(svgstyle)) { list() } else { # Remove non-SVG style attributes (with warning) names <- names(svgstyle) svgnames <- names %in% get("SVGParList", envir=.gridSVGEnv) if (svgStrict(dev) && any(!svgnames)) { warning(paste("Removing non-SVG style attribute name(s):", paste(names[!svgnames], collapse=", "))) svgstyle <- svgstyle[names[svgnames]] } if (any(sapply(svgstyle, length) > 1)) stop("All SVG style attribute values must have length 1") svgstyle } } # Specifying text justification textAnchor <- function(hjust) { list("text-anchor" = switch(hjust, left="start", center="middle", centre="middle", right="end", "start")) } dominantBaseline <- function(vjust) { list("dominant-baseline" = switch(vjust, bottom="auto", center="middle", centre="middle", top="text-top", "baseline")) } baselineShift <- function(vjust) { list("baseline-shift" = switch(vjust, bottom="0%", center="-50%", centre="-50%", top="-100%", "0%")) } alignmentBaseline <- function(vjust) { list("alignment-baseline" = switch(vjust, baseline="baseline", bottom="bottom", center="middle", centre="middle", top="top", "baseline")) } splitOnNA <- function(x, y) { # Check for non-finite (rather than just NA) nas <- !is.finite(x) | !is.finite(y) wnas <- which(nas) N <- max(length(x), length(y)) start <- c(1, pmin(wnas + 1, N)) end <- c(pmax(wnas - 1, 1), N) xylist <- mapply(function(s, e) { if (e > s) list(x=x[s:e], y=y[s:e]) }, start, end, SIMPLIFY=FALSE) xylist[!sapply(xylist, is.null)] } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/zzz.R�������������������������������������������������������������������������������������0000654�0001762�0000144�00000001457�12622172516�012754� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ .onLoad <- function(libname, pkgname) { genAttrTable <- utils::read.table(system.file("svg", "genAttrTable.txt", package="gridSVG"), col.names=c("attribute", "element"), stringsAsFactors=FALSE) assign("genAttrTable", genAttrTable, envir=.gridSVGEnv) presAttrTable <- utils::read.table(system.file("svg", "presAttrTable.txt", package="gridSVG"), col.names=c("attribute", "element"), stringsAsFactors=FALSE) assign("presAttrTable", presAttrTable, envir=.gridSVGEnv) assign("SVGParList", unique(presAttrTable$attribute), envir=.gridSVGEnv) } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/coords.R����������������������������������������������������������������������������������0000654�0001762�0000144�00000002306�12164147366�013410� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVGCoordsGen <- function() { coords <- NULL function(newcoords = NULL) { if (is.null(newcoords)) { coords } else if (length(newcoords) == 1 && is.na(newcoords)) { coords <<- NULL # Wipe existing info if there is only 1 NA } else { # Keep existing information, but overwrite any existing definitions # associated with any given viewport names keepOldName <- ! names(coords) %in% names(newcoords) if (any(keepOldName)) { existingNames <- names(coords)[keepOldName] for (i in 1:length(existingNames)) { newcoords[[existingNames[i]]] <- coords[[existingNames[i]]] } } coords <<- newcoords } } } gridSVGCoords <- gridSVGCoordsGen() validCoordsInfo <- function(vpname) { currCoords <- gridSVGCoords() if (is.null(currCoords)) { stop("No coordinates data has been loaded.") } else if (is.null(currCoords[[vpname]])) { stop("Viewport not found in coordinates data") } else { currCoords } } readCoordsJS <- function(filename) { jsData <- readLines(filename) jsData <- gsub("var gridSVGCoords = ", "", jsData) jsonData <- gsub(";$", "", jsData) fromJSON(paste0(jsonData, collapse = "\n")) } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/gtable.R����������������������������������������������������������������������������������0000654�0001762�0000144�00000005551�12632377300�013353� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Here are some fixes so that ggplot2 plots work properly! ggplot2 imports # gtable and includes some nastiness that make it difficult for gridSVG to # parse. To support the ggplot2 package, these compatibility features have # been created. # NOTE that the check for a makeContent.gtable() method will # bail out back to normal processing; this is because there # exists a fork of 'gtable' that does NOT need this special # case handling (and one day that fork may be merged back # into the 'gtable' trunk) grobToDev.gTableChild <- function(x, dev) { if (is.null(getS3method("makeContent", "gtable", TRUE))) { depth <- enforceVP(x$wrapvp, dev) NextMethod() unwindVP(x$wrapvp, depth, dev) } else { NextMethod() } } grobToDev.gTableParent <- function(x, dev) { if (is.null(getS3method("makeContent", "gtable", TRUE))) { depth1 <- enforceVP(x$vp, dev) depth2 <- enforceVP(x$layoutvp, dev) x$classes <- class(x) primToDev(x, dev) unwindVP(x$vp, depth1, dev) unwindVP(x$layoutvp, depth2, dev) } else { NextMethod() } } # Ripped from gtable package's grid.draw.gtable method in grid.r. # Note that the class ordering on a "gTableChild" is switched. gTableGrob <- function(x) { if (length(x$grobs) == 0) return(invisible()) children_vps <- mapply(child_vp, vp_name = vpname(x$layout), t = x$layout$t, r = x$layout$r, b = x$layout$b, l = x$layout$l, clip = x$layout$clip, SIMPLIFY = FALSE) x$grobs <- mapply(wrap_gtableChild, x$grobs, children_vps, SIMPLIFY = FALSE) if (inherits(x, "gTableChild")) { gt <- gTree(children = do.call("gList", x$grobs[order(x$layout$z)]), cl = c("gTableChild", "gTableParent"), vp = x$vp, wrapvp = x$wrapvp, layoutvp = viewport(layout = gtable_layout(x), name = x$name)) } else { gt <- gTree(children = do.call("gList", x$grobs[order(x$layout$z)]), cl = "gTableParent", vp = x$vp, layoutvp = viewport(layout = gtable_layout(x), name = x$name)) } gt } grobToDev.gtable <- function(x, dev) { if (is.null(getS3method("makeContent", "gtable", TRUE))) { grobToDev(gTableGrob(x), dev) } else { NextMethod() } } # Functions borrowed from 'gtable' to keep the package checker happy. gtable_layout <- function(x) { # Commenting out because we won't be here if it's not a gtable # stopifnot(is.gtable(x)) grid.layout( nrow = nrow(x), heights = x$heights, ncol = ncol(x), widths = x$widths, respect = x$respect ) } vpname <- function(row) { paste(row$name, ".", row$t, "-", row$r, "-", row$b, "-", row$l, sep = "") } child_vp <- function(vp_name, t, r, b, l, clip) { viewport(name = vp_name, layout.pos.row = t:b, layout.pos.col = l:r, clip = clip) } wrap_gtableChild <- function(grob, vp) { grob$wrapvp <- vp grob$name <- vp$name class(grob) <- c("gTableChild", class(grob)) grob } �������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/refs.R������������������������������������������������������������������������������������0000654�0001762�0000144�00000027327�14402217144�013055� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file is concerned with the use of objects that need to be # referenced, e.g. pattern fills, gradient fills, filters, etc. drawDef <- function(def, dev) { UseMethod("drawDef") } # This function ensures that if we change the ID separator value between # the time of definition and draw time, we still get the expected IDs. assignRefIDs <- function() { refdefs <- get("refDefinitions", envir = .gridSVGEnv) for (i in seq_along(refdefs)) refdefs[[i]]$id <- getLabelID(refdefs[[i]]$label) assign("refDefinitions", refdefs, envir = .gridSVGEnv) # Because the separators might have changed, ensure that the # usageTable has the correct (escaped) values for selectors and xpath ut <- get("usageTable", envir = .gridSVGEnv) inds <- which(ut$type == "ref") for (i in inds) { fullName <- paste(ut[i, "name"], ut[i, "suffix"], sep = getSVGoption("id.sep")) sel <- prefixName(escapeSelector(fullName)) xp <- prefixName(escapeXPath(fullName)) ut[i, "selector"] <- sel ut[i, "xpath"] <- xp } assign("usageTable", ut, envir = .gridSVGEnv) } totalDefinitions <- function() { # This function should only be called for calculating progress bar # length. In addition, it will only be called if definitions are # required to be flushed so this should always return a non-zero # result. sum(get("refUsageTable", envir = .gridSVGEnv)[, "used"]) } flushDefinitions <- function(dev) { svgdev <- dev@dev # Keep copies of old tables because they will be modified when # we draw any children usageTable <- get("usageTable", envir = .gridSVGEnv) vpCoords <- get("vpCoords", envir = .gridSVGEnv) use.vpPaths <- get("use.vpPaths", envir = .gridSVGEnv) use.gPaths <- get("use.gPaths", envir = .gridSVGEnv) uniqueNames <- get("uniqueNames", envir = .gridSVGEnv) # Set required options -- we don't care about what the user # has specified at this point because they shouldn't be # touching any reference definitions assign("use.vpPaths", TRUE, envir = .gridSVGEnv) assign("use.gPaths", TRUE, envir = .gridSVGEnv) assign("uniqueNames", TRUE, envir = .gridSVGEnv) # Begin creating definitions # First ensure we're under #gridSVG rootID <- prefixName("gridSVG") gridSVGNode <- getNodeSet(xmlRoot(svgDevParent(svgdev)), paste0("//*[@id='", rootID, "']"))[[1]] svgDevChangeParent(gridSVGNode, svgdev) refDefinitions <- get("refDefinitions", envir = .gridSVGEnv) pchUsageTable <- get("pchUsageTable", envir = .gridSVGEnv) if (! length(refDefinitions) && ! any(pchUsageTable[, "used"])) return() # fast path for leaving early, avoids creating a defs <- newXMLNode("defs", parent = svgDevParent(svgdev), at = 0) svgDevChangeParent(defs, svgdev) # Check whether we have any dependent references, e.g. have a pattern # fill by reference in use but not the pattern itself. We need to ensure # that both are written out. n <- length(refDefinitions) rut <- get("refUsageTable", envir = .gridSVGEnv) for (i in seq_len(n)) { def <- refDefinitions[[i]] if (isLabelUsed(def$label) && ! is.null(def$refLabel) && ! isLabelUsed(def$refLabel)) rut[rut$label == def$refLabel, "used"] <- TRUE } # Now trying to find out if there are trees of referenced content. for (i in seq_len(n)) { used <- labelsUsed(refDefinitions[[i]]) if (is.null(used)) next flaggedLabels <- used %in% rut$label if (any(flaggedLabels)) rut[flaggedLabels, "used"] <- TRUE } assign("refUsageTable", rut, envir = .gridSVGEnv) # Now can work out how many defs to flush ndefs <- totalDefinitions() progressInit("defs", ndefs) # Now try drawing for (i in seq_len(n)) { def <- refDefinitions[[i]] upViewport(0) if (! is.null(def$vp)) pushViewport(def$vp) if (isLabelUsed(def$label)) drawDef(def, dev) upViewport(0) progressStep("defs", ndefs) } # Resetting to original values assign("vpCoords", vpCoords, envir = .gridSVGEnv) assign("use.vpPaths", use.vpPaths, envir = .gridSVGEnv) assign("use.gPaths", use.gPaths, envir = .gridSVGEnv) assign("uniqueNames", uniqueNames, envir = .gridSVGEnv) # All of the points that have been used in the image will now be flushed. # This is done after any of the other references primarily because # a pattern could use a pch but we want the definition of the pch to # appear beforehand. flushPchs(dev) # Reset ref usage table rut <- get("refUsageTable", envir = .gridSVGEnv) rut$used <- logical(nrow(rut)) assign("refUsageTable", rut, envir = .gridSVGEnv) # Again for usage table assign("usageTable", usageTable, envir = .gridSVGEnv) # Get out of defs svgDevChangeParent(xmlParent(defs), svgdev) } flushPchs <- function(dev) { pchUsageTable <- get("pchUsageTable", envir = .gridSVGEnv) if (! any(pchUsageTable[, "used"])) return() usedPchs <- pchUsageTable[pchUsageTable[, "used"] > 0, "pch"] progressInit("pch", length(usedPchs)) # Reversing so that when we insert at the start of the # the pchs are ordered from small to big, not big to small. # This is purely cosmetic. for (pch in rev(usedPchs)) { asciipch <- if (pch %in% 32:127) rawToChar(as.raw(pch)) else pch devStartSymbol(pch, dev) devPoint(asciipch, dev) devEndSymbol(dev) progressStep("pch") } } anyRefsDefined <- function() { ut <- get("usageTable", envir = .gridSVGEnv) nrow(ut) > 0 && any(ut$type == "ref") } # Methods used for grabbing the list of references used by a definition. # Particularly useful in the case of patterns where it could contain # content which also references other content. In other words, it allows # us to be able to get a tree of dependencies, rather than just a flat # list. labelsUsed <- function(x) { UseMethod("labelsUsed") } labelsUsed.patternFillRefDef <- function(x) { NULL } labelsUsed.filterDef <- function(x) { NULL } labelsUsed.gradientDef <- function(x) { NULL } labelsUsed.patternFillDef <- function(x) { labelsUsed(x$grob) } labelsUsed.maskDef <- function(x) { labelsUsed(x$grob) } labelsUsed.clipPathDef <- function(x) { labelsUsed(x$grob) } labelsUsed.grob <- function(x) { x$referenceLabel } labelsUsed.gTree <- function(x) { c(x$referenceLabel, unlist(lapply(x$children, labelsUsed))) } # Used for knowing whether to write out a definition. # If a definition has not been used we do not write it out. # If it has been used more than once we do not repeat the # definition. isLabelUsed <- function(label) { rut <- get("refUsageTable", envir = .gridSVGEnv) any(rut[rut$label %in% label, "used"]) } setLabelUsed <- function(label) { if (! is.null(label) && length(label)) { rut <- get("refUsageTable", envir = .gridSVGEnv) if (any(rut$label %in% label)) { rut[rut$label %in% label, "used"] <- TRUE assign("refUsageTable", rut, envir = .gridSVGEnv) # Need to ensure that nested dependencies are also handled. # e.g. a mask definition that is filtered needs to trigger a # filter to be drawn. refdefs <- get("refDefinitions", envir = .gridSVGEnv) for (i in seq_along(label)) { def <- refdefs[[label[i]]] setLabelUsed(labelsUsed(def)) } } else { stop("An attempt was made to reference content that no longer exists.") } } } # Convenience function to list all referenced content definitions listSVGDefinitions <- function(print = TRUE) { refdefs <- get("refDefinitions", envir = .gridSVGEnv) n <- length(refdefs) if (!n) return(invisible()) defs <- data.frame(label = character(n), type = character(n), refLabel = character(n), stringsAsFactors = FALSE) for (i in 1:n) { curdef <- refdefs[[i]] defs$label[i] <- curdef$label if (! is.null(curdef$refLabel)) defs$refLabel[i] <- curdef$refLabel defs$type[i] <- switch(class(curdef)[1], clipPathDef = "Clipping Path", filterDef = "Filter Effect", gradientDef = "Gradient Fill", maskDef = "Mask", patternFillDef = "Pattern Fill", patternFillRefDef = "Pattern Fill Reference", "") } if (print) { orderedTypes <- sort(unique(defs$type)) indent <- " " cat("Reference Definitions\n") for (i in 1:length(orderedTypes)) { typesub <- defs[defs$type == orderedTypes[i], ] cat("\n", orderedTypes[i], "s\n", sep = "") for (j in 1:nrow(typesub)) { cat(indent, typesub$label[j], sep = "") # If this is a pattern fill, show us what we're referencing if (nchar(typesub$refLabel[j])) cat(" ", paste0("(referencing ", typesub$refLabel[j], ")"), "\n", sep = "") else cat("\n") } } } invisible(defs) } checkForDefinition <- function(label) { if (! all(label %in% names(get("refDefinitions", envir = .gridSVGEnv)))) stop("A reference definition must be created before using its label") } checkExistingDefinition <- function(label) { if (any(label %in% names(get("refDefinitions", envir = .gridSVGEnv)))) stop(paste("A label already exists as a reference definition")) } # When we need to generate a temporary label (i.e. when specifying a # gradient fill directly on a grob with no label), we supply a prefix and # return a new label that is going to be unique (among labels). # getID() will perform the task of ensuring uniqueness among IDs. getNewLabel <- function(prefix) { i <- 1 candidateName <- paste0(prefix, ".", i) refdefs <- get("refDefinitions", envir = .gridSVGEnv) while(candidateName %in% names(refdefs)) { i <- i + 1 candidateName <- paste0(prefix, getSVGoption("id.sep"), i) } candidateName } getLabelID <- function(label) { ut <- get("usageTable", envir = .gridSVGEnv) suffix <- ut[ut$name %in% label & ut$type == "ref", "suffix"] prefixName(paste0(label, getSVGoption("id.sep"), suffix)) } # This function allows us to collect a viewport that, when pushed into # from the ROOT viewport, should allow us to draw in the same drawing # environment that we called this function from. getAbsoluteVp <- function(vp = current.viewport(), tm = current.transform()) { transloc <- c(0, 0, 1) %*% tm loc <- (transloc / transloc[3])[-3] viewport(x = unit(loc[1], "inches"), y = unit(loc[2], "inches"), width = convertWidth(unit(1, "npc"), "inches"), height = convertHeight(unit(1, "npc"), "inches"), xscale = vp$xscale, yscale = vp$yscale, gp = get.gpar(), just = c("left", "bottom"), angle = vp$angle) } # Used for the case where we want to work out locations in absolute units # *but* do not want to leave the current viewport. Useful when flattening # locations for things such as mask areas. getAbsoluteOffset <- function(tm = current.transform()) { transloc <- c(0, 0, 1) %*% tm loc <- (transloc / transloc[3])[-3] unit(loc, "inches") } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/element.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000005224�12164147366�013552� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Functions for generating arbitrary SVG elements elementGrob <- function(el, name = NULL, attrs = NULL, namespace = NULL, namespaceDefinitions = NULL, children = NULL, vp = NULL, childrenvp = NULL, asis = FALSE) { eg <- gTree(name = name, vp = vp, children = children, childrenvp = childrenvp, cl = "element") # Keeping copy of name because of asis. # If it's TRUE, we leave the id alone. # When FALSE, the resulting id attribute could get modified # by things like gTrees so that the name is a *path*. eg$asis <- asis eg$origname <- eg$name eg$el <- el eg$attrs <- if (is.null(attrs)) list() else attrs eg$namespace <- namespace eg$namespaceDefinitions <- namespaceDefinitions cl <- class(eg) class(eg) <- unique(c("element.grob", cl)) eg } grid.element <- function(el, name = NULL, attrs = NULL, namespace = NULL, namespaceDefinitions = NULL, children = NULL, vp = NULL, childrenvp = NULL, asis = FALSE) { grid.draw(elementGrob(el, name, attrs, namespace, namespaceDefinitions, children, vp, childrenvp, asis)) } devGrob.element.grob <- function(x, dev) { list(id = if (x$asis) x$origname else getID(x$name, "grob"), name = x$el, classes = x$classes, attrs = x$attrs, namespace = x$namespace, namespaceDefinitions = x$namespaceDefinitions) } # Unlike gTrees, we don't need a group for children because it # complicates output, when we want clear output to SVG. # Also, do *not* add gpars because they also complicate output, # if we *really* want to do it, then just use the 'attrs' arg. primToDev.element.grob <- function(x, dev) { devStartElement(devGrob(x, dev), NULL, dev) lapply(x$children, function(child) { grobToDev(child, dev) }) devEndElement(x$name, dev) } devGrob.textnode.grob <- function(x, dev) { list(text = x$text) } primToDev.textnode.grob <- function(x, dev) { devTextNode(devGrob(x, dev), dev) } textNodeGrob <- function(text, name = NULL, vp = NULL) { if (length(text) > 1) stop("'text' must be a single element character vector") tng <- grob(name = name, vp = vp, cl = "textNode") tng$text <- text cl <- class(tng) class(tng) <- unique(c("textnode.grob", cl)) tng } grid.textNode <- function(text, name = NULL, vp = NULL) { grid.draw(textNodeGrob(text, name, vp)) } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/patterns.R��������������������������������������������������������������������������������0000654�0001762�0000144�00000026026�12240527563�013760� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������grid.patternFill <- function(path, pattern = NULL, label = NULL, alpha = 1, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) { if (is.null(label) & is.null(pattern)) { stop("At least one of 'label' or 'pattern' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.patternFill") registerPatternFill(label, pattern) pattern <- NULL # use the ref from now on } else if (is.null(pattern)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerPatternFill(label, pattern) pattern <- NULL # use the ref from now on } grobApply(path, function(path) { grid.set(path, patternFillGrob(grid.get(path), pattern = pattern, label = label, alpha = alpha, group = group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } patternFillGrob <- function(x, pattern = NULL, label = NULL, alpha = 1, group = TRUE) { if (is.null(label) & is.null(pattern)) { stop("At least one of 'label' or 'pattern' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.patternFill") registerPatternFill(label, pattern) } else if (is.null(pattern)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerPatternFill(label, pattern) } if (length(alpha) != length(label)) alpha <- rep(alpha, length.out = length(label)) x$referenceLabel <- c(x$referenceLabel, label) # Attribs to be garnished *at draw time*. In particular needs to be # done because the label ID is not known until then, because of things # like prefixes and separators. x$patternFillLabel <- label x$patternFillAlpha <- alpha x$patternFillGroup <- group class(x) <- unique(c("patternFilled.grob", class(x))) x } pattern <- function(grob = NULL, x = unit(0, "npc"), y = unit(0, "npc"), width = unit(0.1, "npc"), height = unit(0.1, "npc"), default.units = "npc", just = "centre", hjust = NULL, vjust = NULL, dev.width = 7, dev.height = 7) { if (! is.unit(x)) x <- unit(x, default.units) if (! is.unit(y)) y <- unit(y, default.units) if (! is.unit(width)) width <- unit(width, default.units) if (! is.unit(height)) height <- unit(height, default.units) pattern <- list(grob = grob, x = x, y = y, width = width, height = height, just = just, hjust = hjust, vjust = vjust, dev.width = dev.width, dev.height = dev.height) class(pattern) <- "pattern" pattern } registerPatternFill <- function(label, pattern = NULL, ...) { checkExistingDefinition(label) refDefinitions <- get("refDefinitions", envir = .gridSVGEnv) if (is.null(pattern)) { pattern <- gridSVG::pattern(...) } else if (! inherits(pattern, "pattern")) { stop("'pattern' must be a 'pattern' object") } if (is.null(pattern$grob)) stop("A grob must be given for a fill pattern definition") # Now convert *at time of definition* to absolute units (inches) loc <- leftbottom(pattern$x, pattern$y, pattern$width, pattern$height, pattern$just, pattern$hjust, pattern$vjust, NULL) x <- loc$x y <- loc$y width <- convertWidth(pattern$width, "inches") height <- convertHeight(pattern$height, "inches") # ID will be overwritten later, because we might change # the separator used for "id.sep" defList <- list( label = label, id = getID(label, "ref"), grob = pattern$grob, vp = getAbsoluteVp(), x = x, y = y, width = width, height = height, dev.width = pattern$dev.width, dev.height = pattern$dev.height ) class(defList) <- "patternFillDef" refDefinitions[[label]] <- defList assign("refDefinitions", refDefinitions, envir = .gridSVGEnv) assign("refUsageTable", rbind(get("refUsageTable", envir = .gridSVGEnv), data.frame(label = label, used = FALSE, stringsAsFactors = FALSE)), envir = .gridSVGEnv) # Return NULL invisibly because we don't actually care what the # definition looks like until gridSVG tries to draw it. invisible() } registerPatternFillRef <- function(label, refLabel, pattern = NULL, ...) { checkExistingDefinition(label) refDefinitions <- get("refDefinitions", envir = .gridSVGEnv) if (! refLabel %in% names(refDefinitions)) stop(paste("The reference labelled", sQuote(label), "does not exist.")) if (is.null(pattern)) { pattern <- gridSVG::pattern(...) } else if (! inherits(pattern, "pattern")) { stop("'pattern' must be a 'pattern' object") } # Now convert *at time of definition* to absolute units (inches) offsets <- getAbsoluteOffset() loc <- leftbottom(pattern$x, pattern$y, pattern$width, pattern$height, pattern$just, pattern$hjust, pattern$vjust, NULL) x <- loc$x + offsets[1] y <- loc$y + offsets[2] width <- convertWidth(pattern$width, "inches") height <- convertHeight(pattern$height, "inches") defList <- list( label = label, refLabel = refLabel, id = getID(label, "ref"), x = x, y = y, width = width, height = height ) class(defList) <- "patternFillRefDef" refDefinitions[[label]] <- defList assign("refDefinitions", refDefinitions, envir = .gridSVGEnv) assign("refUsageTable", rbind(get("refUsageTable", envir = .gridSVGEnv), data.frame(label = label, used = FALSE, stringsAsFactors = FALSE)), envir = .gridSVGEnv) # Return NULL invisibly because we don't actually care what the # definition looks like until gridSVG tries to draw it. invisible() } primToDev.patternFilled.grob <- function(x, dev) { setLabelUsed(x$referenceLabel) label <- getLabelID(x$patternFillLabel) # Allowing fill-opacity to be set by a garnish because # grid only knows about a colour and its opacity. If we use a # reference instead of a then nothing is known about the opacity. # We want to ensure that we can still set it, so use the garnish # to overwrite it. pg <- garnishGrob(x, fill = paste0("url(#", label, ")"), "fill-opacity" = x$patternFillAlpha, group = x$patternFillGroup) # Now need to remove all pattern fill appearances in the class list. # This is safe because repeated pattern filling just clobbers existing # attributes. cl <- class(pg) class(pg) <- cl[cl != "patternFilled.grob"] primToDev(pg, dev) } drawDef.patternFillDef <- function(def, dev) { svgdev <- dev@dev # Convert grid coords to SVG coords x <- round(cx(def$x, dev), 2) y <- round(cy(def$y, dev), 2) width <- round(cw(def$width, dev), 2) height <- round(ch(def$height, dev), 2) # Checking for flipped scales if (width < 0) { x <- x + width # shifts x to the left width <- abs(width) } if (height < 0) { y <- y + height # shifts y down height <- abs(height) } # Attempt to use a known-safe prefix # If the prefix is safe, then it will *always* be safe # because the names are known *after* content is drawn # and the referenced labels must be unique prefix <- paste0("gridSVG.patternFill.", def$id) # There is a little bit of replication going on from # 'grid.export' but it avoids some problems. # We could use 'grid.export' recursively but we lose the ability to # definitely generate unique names if that is the case because usage # tables would be wiped. # A viewport and gTree are forced to ensure everything is unique because # we want paths to be used. # We do not care at this point whether it is strictly necessary to # perform all of this because we just want unique IDs. olddev <- dev.cur() pdf(file = NULL, width = def$dev.width, height = def$dev.height) newdev <- openSVGDev("", res = dev@res, width = def$dev.width, height = def$dev.height) pushViewport(viewport(name = getID(prefix, "vp"))) grid.draw(gTree(name = getID(prefix, "grob"), children = gList(grid.force(def$grob)), gp = get.gpar())) # Force gp to ensure correct styling grid.force(redraw = FALSE) gt <- grid.grab(name = "gridSVG", wrap = TRUE) gridToDev(gt, newdev) newroot <- devClose(newdev) viewBox <- xmlGetAttr(newroot, "viewBox") gridSVGNode <- prefixName("gridSVG") # Clone this node so that when the pattern definition refers to # namespaces (e.g. rasterGrobs have 'xlink:href'), the namespaces # are not destroyed when this temporary device is closed. gridSVGNode <- xmlClone(getNodeSet(newroot, paste0("//*[@id='", gridSVGNode, "']"))[[1]]) dev.off() dev.set(olddev) # Creating the pattern element pattern <- newXMLNode("pattern", attrs = list(id = def$id, x = x, y = y, width = width, height = height, viewBox = viewBox, patternUnits = "userSpaceOnUse"), parent = svgDevParent(svgdev)) # Assigning its children xmlChildren(pattern) <- xmlChildren(gridSVGNode) } drawDef.patternFillRefDef <- function(def, dev) { svgdev <- dev@dev # Convert grid coords to SVG coords x <- round(cx(def$x, dev), 2) y <- round(cy(def$y, dev), 2) width <- round(cw(def$width, dev), 2) height <- round(ch(def$height, dev), 2) # Checking for flipped scales if (width < 0) { x <- x + width # shifts x to the left width <- abs(width) } if (height < 0) { y <- y + height # shifts y down height <- abs(height) } # Creating the pattern element pattern <- newXMLNode("pattern", attrs = list(id = def$id, x = x, y = y, width = width, height = height, "xlink:href" = paste0("#", getLabelID(def$refLabel))), parent = svgDevParent(svgdev)) } # Ensure the patterns are retained on a forced grob forceGrob.patternFilled.grob <- function(x) { y <- NextMethod() if (inherits(y, "forcedgrob")) { y$referenceLabel <- x$referenceLabel y$patternFillLabel <- x$patternFillLabel y$patternFillAlpha <- x$patternFillAlpha y$patternFillGroup <- x$patternFillGroup class(y) <- unique(c("patternFilled.grob", class(y))) } y } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/filters.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000100771�14207471511�013564� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# High level functions for applying filters to grobs grid.filter <- function(path, filter = NULL, label = NULL, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) { if (is.null(filter) & is.null(label)) { stop("At least one of 'filter' or 'label' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.filter") registerFilter(label, filter) filter <- NULL # use the ref from now on } else if (is.null(filter)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerFilter(label, filter) filter <- NULL # use the ref from now on } grobApply(path, function(path) { grid.set(path, filterGrob(grid.get(path), filter = filter, label = label, group = group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } filterGrob <- function(x, filter = NULL, label = NULL, group = TRUE) { if (is.null(filter) & is.null(label)) { stop("At least one of 'filter' or 'label' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.filter") registerFilter(label, filter) } else if (is.null(filter)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerFilter(label, filter) } x$referenceLabel <- c(x$referenceLabel, label) # Attribs to be garnished *at draw time*. In particular needs to be # done because the label ID is not known until then, because of things # like prefixes and separators. x$filterLabel <- label x$filterGroup <- group class(x) <- unique(c("filtered.grob", class(x))) x } primToDev.filtered.grob <- function(x, dev) { setLabelUsed(x$referenceLabel) label <- getLabelID(x$filterLabel) fg <- garnishGrob(x, filter = paste0("url(#", label, ")"), group = x$filterGroup) # Now need to remove all filter appearances in the class list. # This is safe because repeated filtering just clobbers existing # attributes. cl <- class(fg) class(fg) <- cl[cl != "filtered.grob"] primToDev(fg, dev) } filterEffect <- function(feList = NULL, filterUnits = c("coords", "bbox"), x = unit(0.5, "npc"), y = unit(0.5, "npc"), width = unit(1, "npc"), height = unit(1, "npc"), just = "centre", hjust = NULL, vjust = NULL, default.units = "npc", primitiveUnits = c("coords", "bbox")) { filterUnits <- match.arg(filterUnits) primitiveUnits <- match.arg(primitiveUnits) if (is.null(feList)) feList <- list() if (inherits(feList, "filter.effect")) feList <- list(feList) if (! is.unit(x)) x <- unit(x, default.units) if (! is.unit(y)) y <- unit(y, default.units) if (! is.unit(width)) width <- unit(width, default.units) if (! is.unit(height)) height <- unit(height, default.units) # Convert filterUnits to SVG values filterUnits <- switch(filterUnits, bbox = "objectBoundingBox", coords = "userSpaceOnUse") primitiveUnits <- switch(primitiveUnits, bbox = "objectBoundingBox", coords = "userSpaceOnUse") # Need to get npc-like values from units if (filterUnits == "objectBoundingBox") { # Convert to npc x <- convertX(x, "npc", valueOnly = TRUE) y <- convertY(y, "npc", valueOnly = TRUE) width <- convertWidth(width, "npc", valueOnly = TRUE) height <- convertHeight(height, "npc", valueOnly = TRUE) } filter <- list(filterUnits = filterUnits, primitiveUnits = primitiveUnits, x = x, y = y, width = width, height = height, just = just, hjust = hjust, vjust = vjust, children = feList) class(filter) <- "filter" filter } "[.filter" <- function(x, index, ...) { x$children <- x$children[index] x } "[[.filter" <- function(x, index, ...) { x$children[[index]] } "[<-.filter" <- function(x, index, ..., value) { x$children[index] <- value x } "[[<-.filter" <- function(x, index, ..., value) { if (! inherits(value, "filter.effect")) stop("Invalid value to assign") x$children[[index]] <- value x } addFilterEffect <- function(filter, filterEffect, after = NA) { if (! inherits(filter, "filter")) stop("'filter' is not an 'filter' object") if (! inherits(filterEffect, "filter.effect")) stop("'filterEffect' is not a 'filter.effect' object") # Assume last if (is.na(after)) after <- length(filter$children) filter$children[[after + 1]] <- filterEffect filter } flatten <- function(x, coords) { UseMethod("flatten") } flatten.filter <- function(x, coords = TRUE) { if (coords) { loc <- leftbottom(x$x, x$y, x$width, x$height, x$just, x$hjust, x$vjust, NULL) x$x <- loc$x x$y <- loc$y x$width <- convertWidth(x$width, "inches") x$height <- convertHeight(x$height, "inches") } else { # location and width are relative to the object bounding box # (i.e., NOT grid units) hjust <- resolveHJust(x$just, x$hjust) vjust <- resolveVJust(x$just, x$vjust) x$x <- x$x - hjust*x$width x$y <- x$y - vjust*x$height } # Now flatten all children x$children <- lapply(x$children, flatten, x$primitiveUnits == "userSpaceOnUse") x } registerFilter <- function(label, filter) { checkExistingDefinition(label) if (! length(filter$children)) stop("No filter effects exist for this filter.") # Flattening all locations filter <- flatten(filter, filter$filterUnits == "userSpaceOnUse") filter$label <- label filter$id <- getID(label, "ref") filter$vp <- getAbsoluteVp() class(filter) <- "filterDef" refDefinitions <- get("refDefinitions", envir = .gridSVGEnv) refDefinitions[[label]] <- filter assign("refDefinitions", refDefinitions, envir = .gridSVGEnv) assign("refUsageTable", rbind(get("refUsageTable", envir = .gridSVGEnv), data.frame(label = label, used = FALSE, stringsAsFactors = FALSE)), envir = .gridSVGEnv) # Return NULL invisibly because we don't actually care what the # definition looks like until gridSVG tries to draw it. invisible() } svgFilter <- function(def, dev) { svgdev <- dev@dev if (def$filterUnits == "userSpaceOnUse") { def$x <- cx(def$x, dev) def$y <- cy(def$y, dev) def$width <- cw(def$width, dev) def$height <- ch(def$height, dev) } filter <- newXMLNode("filter", attrs = list(id = def$id, x = round(def$x, 2), y = round(def$y, 2), width = round(def$width, 2), height = round(def$height, 2), filterUnits = def$filterUnits, primitiveUnits = def$primitiveUnits), parent = svgDevParent(svgdev)) svgDevChangeParent(filter, svgdev) } drawDef.filterDef <- function(def, dev) { svgdev <- dev@dev svgFilter(def, dev) # Adding the gradient stops children <- def$children for (i in 1:length(children)) { oldclass <- class(children[[i]]) child <- cleanAttrs(children[[i]], c("just", "hjust", "vjust")) child <- compileUnits(child, def$primitiveUnits == "userSpaceOnUse", dev) class(child) <- oldclass filterSVG(child, dev) } # Going back up from the filter to the parent of the filter svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) } # Remove unnecessary attributes cleanAttrs <- function(x, attrs = "") { ns <- names(x) rmInds <- which(ns %in% attrs) if (length(rmInds)) x[-rmInds] else x } # All filter effects have these in common, # compile the units to px to allow us to have more specific # methods later compileUnits <- function(x, coords, dev) { # Only resolve child x/y/w/h to px if UserSpaceOnUse # (otherwise, x/y/w/h are already just [bbox] values) if (coords) { x$x <- cx(x$x, dev) x$y <- cy(x$y, dev) x$width <- cw(x$width, dev) x$height <- ch(x$height, dev) } x } # rounding all numerics to 2 dp roundAttribs <- function(x) { lapply(x, function(a) { if (is.numeric(a)) round(a, 2) else a }) } filterSVG <- function(x, dev) { UseMethod("filterSVG") } ################## # Filter Effects # ################## # Light sources flatten.filter.effect <- function(x, coords = TRUE) { loc <- leftbottom(x$x, x$y, x$width, x$height, x$just, x$hjust, x$vjust, NULL) if (coords) { x$x <- loc$x x$y <- loc$y x$width <- convertWidth(x$width, "inches") x$height <- convertHeight(x$height, "inches") } else { x$x <- convertX(loc$x, "npc", valueOnly = TRUE) x$y <- convertY(loc$y, "npc", valueOnly = TRUE) x$width <- convertWidth(x$width, "npc", valueOnly = TRUE) x$height <- convertHeight(x$height, "npc", valueOnly = TRUE) } x$coords <- coords x } fe <- function(..., x = unit(0.5, "npc"), y = unit(0.5, "npc"), width = unit(1, "npc"), height = unit(1, "npc"), just = "centre", hjust = NULL, vjust = NULL, default.units = "npc", result = NULL) { if (! is.unit(x)) x <- unit(x, default.units) if (! is.unit(y)) y <- unit(y, default.units) if (! is.unit(width)) width <- unit(width, default.units) if (! is.unit(height)) height <- unit(height, default.units) x <- list(x = x, y = y, width = width, height = height, just = just, hjust = hjust, vjust = vjust) if (! is.null(result) && nzchar(result)) x$result <- result x <- c(x, list(...)) class(x) <- "filter.effect" x } filterSVG.fe.distant.light <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feDistantLight", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feDistantLight <- function(azimuth = 0, elevation = 0, ...) { x <- fe(azimuth = azimuth, elevation = elevation, ...) class(x) <- c("fe.distant.light", class(x)) x } flatten.fe.point.light <- function(x, coords = TRUE) { if (coords) { x$z <- if (x$zdim == "x") convertX(x$z, "inches") else convertY(x$z, "inches") } else { x$z <- if (x$dzim == "x") convertX(x$z, "npc", valueOnly = TRUE) else convertY(x$z, "npc", valueOnly = TRUE) } x$coords <- coords NextMethod() } filterSVG.fe.point.light <- function(x, dev) { svgdev <- dev@dev if (x$coords) x$z <- if (x$zdim == "x") cx(x$z, dev) else cy(x$z, dev) attrList <- cleanAttrs(x, c("coords", "zdim")) newXMLNode("fePointLight", attrs = roundAttribs(attrList), parent = svgDevParent(svgdev)) } fePointLight <- function(z = unit(0, "npc"), default.units = "npc", zdim = "x", ...) { if (! is.unit(z)) z <- unit(z, default.units) x <- fe(z = z, zdim = zdim, default.units = default.units, ...) class(x) <- c("fe.point.light", class(x)) x } flatten.fe.spot.light <- function(x, coords = TRUE) { if (coords) { x$z <- if (x$zdim == "x") convertX(x$z, "inches") else convertY(x$z, "inches") x$pointsAtZ <- if (x$zdim == "x") convertX(x$pointsAtZ, "inches") else convertY(x$pointsAtZ, "inches") x$pointsAtX <- convertX(x$pointsAtX, "inches") x$pointsAtY <- convertY(x$pointsAtY, "inches") } else { x$z <- if (x$dzim == "x") convertX(x$z, "npc", valueOnly = TRUE) else convertY(x$z, "npc", valueOnly = TRUE) x$pointsAtZ <- if (x$zdim == "x") convertX(x$pointsAtZ, "npc", valueOnly = TRUE) else convertY(x$pointsAtZ, "npc", valueOnly = TRUE) x$pointsAtX <- convertX(x$pointsAtX, "npc", valueOnly = TRUE) x$pointsAtY <- convertY(x$pointsAtY, "npc", valueOnly = TRUE) } x$coords <- coords NextMethod() } filterSVG.fe.spot.light <- function(x, dev) { svgdev <- dev@dev if (x$coords) { x$z <- if (x$zdim == "x") cw(x$z, dev) else cy(x$z, dev) x$pointsAtZ <- if (x$zdim == "x") cw(x$pointsAtZ, dev) else cy(x$pointsAtZ, dev) x$pointsAtX <- cx(x$x, dev) x$pointsAtY <- cy(x$pointsAtY, dev) } attrList <- cleanAttrs(x, c("coords", "zdim")) newXMLNode("feSpotLight", attrs = roundAttribs(attrList), parent = svgDevParent(svgdev)) } feSpotLight <- function(x = unit(0, "npc"), y = unit(0, "npc"), z = unit(0, "npc"), pointsAtX = unit(1, "npc"), pointsAtY = unit(1, "npc"), pointsAtZ = unit(0, "npc"), zdim = "x", default.units = "npc", specularExponent = 1, limitingConeAngle = NA, ...) { if (! is.unit(x)) x <- unit(x, default.units) if (! is.unit(y)) y <- unit(y, default.units) if (! is.unit(z)) z <- unit(z, default.units) if (! is.unit(pointsAtX)) pointsAtX <- unit(pointsAtX, default.units) if (! is.unit(pointsAtY)) pointsAtY <- unit(pointsAtY, default.units) if (! is.unit(pointsAtZ)) pointsAtZ <- unit(pointsAtZ, default.units) x <- fe(x = x, y = y, z = z, pointsAtX = pointsAtX, pointsAtY = pointsAtY, pointsAtZ = pointsAtZ, zdim = zdim, default.units = default.units, specularExponent = specularExponent, ...) if (! is.na(limitingConeAngle)) x$limitingConeAngle <- limitingConeAngle class(x) <- c("fe.spot.light", class(x)) x } filterSVG.fe.blend <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feBlend", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feBlend <- function(input1 = NA, input2 = NA, mode = c("normal", "multiply", "screen", "darken", "lighten"), ...) { x <- fe(mode = match.arg(mode), ...) if (! is.na(input1)) x$`in` <- input1 if (! is.na(input2)) x$in2 <- input2 class(x) <- c("fe.blend", class(x)) x } filterSVG.fe.color.matrix <- function(x, dev) { svgdev <- dev@dev attrList <- x if (x$type == "luminanceToAlpha") attrList <- cleanAttrs(attrList, "values") if (x$type == "matrix") attrList$values <- paste0(c(attrList$values), collapse = " ") attrList <- cleanAttrs(attrList, "coords") newXMLNode("feColorMatrix", attrs = roundAttribs(attrList), parent = svgDevParent(svgdev)) } feColorMatrix <- function(input = NA, type = c("matrix", "saturate", "hueRotate", "luminanceToAlpha"), values = NULL, ...) { # Checking validity of args if (type == "matrix" && (! is.matrix(values) || ! all(dim(values) == c(4, 5)))) stop("'values' must be a 4x5 numeric matrix when 'type' is 'matrix'") if (type == "saturate" && ! is.numeric(values)) stop("'values' must be a single element numeric vector for 'saturate'") if (type == "hueRotate" && ! is.numeric(values)) stop("'values' must be a single element numeric vector for 'hueRotate'") if (type == "luminanceToAlpha" && ! is.null(values)) stop("'values' must be NULL for the 'luminanceToAlpha' color matrix effect") # Clamp values to valid bounds if (type == "matrix") # Need to transpose matrix so that it is written out in row-order values <- t(matrix(pmax(0, pmin(1, values)), ncol = 5, nrow = 4)) if (type == "saturate") values <- max(0, min(1, values)) if (type == "hueRotate") values <- values %% 360 x <- fe(type = match.arg(type), values = values, ...) if (! is.na(input)) x$`in` <- input class(x) <- c("fe.color.matrix", class(x)) x } filterSVG.fe.component.transfer <- function(x, dev) { svgdev <- dev@dev parentAttrs <- cleanAttrs(x, c("coords", "transfers")) children <- x$transfers cm <- newXMLNode("feComponentTransfer", attrs = roundAttribs(parentAttrs), parent = svgDevParent(svgdev)) if (! length(children)) return() svgDevChangeParent(cm, svgdev) for (i in 1:length(children)) { child <- children[[i]] child$channel <- names(children)[i] filterSVG(child, dev) } svgDevChangeParent(xmlParent(cm), svgdev) } feComponentTransfer <- function(input = NA, transfers = NULL, ...) { if (is.null(transfers)) transfers <- list() x <- fe(transfers = transfers, ...) if (! is.na(input)) x$`in` <- input class(x) <- c("fe.component.transfer", class(x)) x } addComponentFunction <- function(ct, channel = c("R", "G", "B", "A"), func) { if (! inherits(ct, "fe.component.transfer")) stop("'ct' must be a 'fe.component.transfer' object") if (! inherits(func, "transfer.function")) stop("'func' must be a 'transfer.function' object") ct$children[[channel]] <- func ct } filterSVG.transfer.function <- function(x, dev) { svgdev <- dev@dev # Need to format tableValues as a whitespace/comma separated list if (x$type == "table" | x$type == "discrete") x$tableValues <- paste0(round(x$tableValues, 2), collapse = " ") x <- cleanAttrs(x, "coords") newXMLNode(paste0("feFunc", x$channel), attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } transferFunction <- function(type = c("identity", "table", "discrete", "linear", "gamma"), tableValues = numeric(), slope = 1, intercept = 0, amplitude = 1, exponent = 1, offset = 0) { x <- list(type = match.arg(type)) if (x$type == "table" | x$type == "discrete") { if (! length(tableValues)) stop("A non-zero vector of numeric values must be provided") x$tableValues <- tableValues } if (x$type == "linear") { x$slope <- slope x$intercept <- intercept } if (x$type == "") { x$amplitude <- amplitude x$exponent <- exponent x$offset <- offset } class(x) <- "transfer.function" x } filterSVG.fe.composite <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feComposite", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feComposite <- function(input1 = NA, input2 = NA, operator = c("over", "in", "out", "atop", "xor", "arithmetic"), k1 = 0, k2 = 0, k3 = 0, k4 = 0, ...) { x <- fe(operator = match.arg(operator), ...) if (! is.na(input1)) x$`in` <- input1 if (! is.na(input2)) x$in2 <- input2 if (x$operator == "arithmetic") { x$k1 <- k1 x$k2 <- k2 x$k3 <- k3 x$k4 <- k4 } class(x) <- c("fe.composite", class(x)) x } filterSVG.fe.convolve.matrix <- function(x, dev) { svgdev <- dev@dev if (length(x$order) > 1) x$order <- paste0(x$order, collapse = " ") if (! is.null(x$kernelUnitLength)) x$kernelUnitLength <- paste0(round(x$kernelUnitLength, 2), collapse = " ") x$kernelMatrix <- paste0(apply(x$kernelMatrix, 1, function(x) { paste0(round(x, 2), collapse = " ") }), collapse = " ") x <- cleanAttrs(x, "coords") newXMLNode("feConvolveMatrix", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feConvolveMatrix <- function(input = NA, order = 3, kernelMatrix = matrix(), divisor = 1, bias = 0, targetX = 1, targetY = 1, edgeMode = c("duplicate", "wrap", "none"), kernelUnitLength = NA, preserveAlpha = FALSE, ...) { # Note that defaults for targetX and targetY are: floor(order[1:2] / 2) # This is going to be 1 by default, as floor(1.5) is 1 if (length(order) == 1) order <- rep(order, 2) if (length(kernelMatrix) != (order[1] * order[2])) stop("Invalid number of entries for 'kernelMatrix'") x <- fe(order = order, kernelMatrix = kernelMatrix, divisor = divisor, bias = bias, targetX = targetX, targetY = targetY, edgeMode = match.arg(edgeMode), preserveAlpha = preserveAlpha, ...) if (! is.na(input)) x$`in` <- input if (! is.na(kernelUnitLength)) { if (length(kernelUnitLength) == 1) kernelUnitLength <- rep(kernelUnitLength, 2) x$kernelUnitLength <- kernelUnitLength } class(x) <- c("fe.convolve.matrix", class(x)) x } flatten.fe.diffuse.lighting <- function(x, coords = TRUE) { x$lightSource <- flatten(x$lightSource, coords) x$coords <- coords NextMethod() } filterSVG.fe.diffuse.lighting <- function(x, dev) { svgdev <- dev@dev if (! is.null(x$kernelUnitLength)) x$kernelUnitLength <- paste0(round(x$kernelUnitLength, 2), collapse = " ") diffl <- cleanAttrs(x, c("coords", "lightSource")) fedl <- newXMLNode("feDiffuseLighting", attrs = roundAttribs(diffl), parent = svgDevParent(svgdev)) svgDevChangeParent(fedl, svgdev) filterSVG(x$lightSource, dev) svgDevChangeParent(xmlParent(fedl), svgdev) } feDiffuseLighting <- function(input = NA, surfaceScale = 1, diffuseConstant = 1, kernelUnitLength = NA, col = "white", lightSource = NULL, ...) { if (is.null(lightSource)) stop("A light source must be provided") if (diffuseConstant < 0) stop("'diffuseConstant' must be non-negative") x <- fe(surfaceScale = surfaceScale, diffuseConstant = diffuseConstant, "lighting-color" = c(col2rgb(col)), lightSource = lightSource, ...) if (! is.na(input)) x$`in` <- input if (! is.na(kernelUnitLength)) { if (length(kernelUnitLength) == 1) kernelUnitLength <- rep(kernelUnitLength, 2) x$kernelUnitLength <- kernelUnitLength } class(x) <- c("fe.diffuse.lighting", class(x)) x } filterSVG.fe.displacement.map <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feDisplacementMap", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feDisplacementMap <- function(input1 = NA, input2 = NA, scale = 0, xChannelSelector = c("A", "R", "G", "B"), yChannelSelector = c("A", "R", "G", "B"), ...) { x <- fe(scale = scale, xChannelSelector = match.arg(xChannelSelector), yChannelSelector = match.arg(yChannelSelector), ...) if (! is.na(input1)) x$`in` <- input1 if (! is.na(input2)) x$in2 <- input2 class(x) <- c("fe.displacement.map", class(x)) x } filterSVG.fe.flood <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feFlood", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feFlood <- function(col = "black", ...) { cols <- c(col2rgb(col, alpha = TRUE)) x <- fe("flood-color" = paste0("rgb(", paste0(cols[1:3], collapse = ", "), ")"), "flood-opacity" = cols[4] / 255, ...) class(x) <- c("fe.flood", class(x)) x } filterSVG.fe.gaussian.blur <- function(x, dev) { svgdev <- dev@dev if (length(x$stdDeviation) > 1) x$stdDeviation <- paste0(round(x$stdDeviation, 2), collapse = " ") x <- cleanAttrs(x, "coords") newXMLNode("feGaussianBlur", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feGaussianBlur <- function(input = NA, sd = 0, ...) { x <- fe(stdDeviation = sd, ...) if (! is.na(input)) x$`in` <- input class(x) <- c("fe.gaussian.blur", class(x)) x } filterSVG.fe.image <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feImage", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feImage <- function(preserveAspectRatio = "xMidYMid meet", href = "", ...) { # Docs: http://www.w3.org/TR/SVG/coords.html#PreserveAspectRatioAttribute x <- fe(preserveAspectRatio = preserveAspectRatio, externalResourcesRequired = TRUE, "xlink:href" = href, ...) class(x) <- c("fe.image", class(x)) x } filterSVG.fe.merge <- function(x, dev) { svgdev <- dev@dev children <- x$mergeNodes par <- cleanAttrs(x, c("coords", "mergeNodes")) merge <- newXMLNode("feMerge", attrs = roundAttribs(par), parent = svgDevParent(svgdev)) if (! length(children)) return() svgDevChangeParent(merge, svgdev) for (i in 1:length(children)) filterSVG(children[[i]], dev) svgDevChangeParent(xmlParent(merge), svgdev) } feMerge <- function(mergeNodes = NULL, ...) { if (is.null(mergeNodes)) mergeNodes <- list() if (inherits(mergeNodes, "fe.merge.node")) mergeNodes <- list(mergeNodes) x <- fe(mergeNodes = mergeNodes, ...) class(x) <- c("fe.merge", class(x)) x } filterSVG.fe.merge.node <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feMergeNode", attrs = x, parent = svgDevParent(svgdev)) } feMergeNode <- function(input = NA) { x <- if (! is.na(input)) list("in" = input) else list() class(x) <- "fe.merge.node" x } addMergeNode <- function(fe, mergeNode, after = NA) { if (! inherits(fe, "fe.merge")) stop("'fe' must be a 'fe.merge' object") if (! inherits(mergeNode, "fe.merge.node")) stop("'mergeNode' must be a 'fe.merge.node' object") if (is.na(after)) after <- length(fe$children) fe$children[[after + 1]] <- mergeNode fe } filterSVG.fe.morphology <- function(x, dev) { svgdev <- dev@dev if (x$coords) { if (length(x$radius) > 1) x$radius <- c(cx(x$radius[1], dev), cy(x$radius[2])) else x$radius <- cd(x$radius, dev) x$radius <- paste0(round(x$radius, 2), collapse = " ") } x <- cleanAttrs(x, "coords") newXMLNode("feMorphology", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } flatten.fe.morphology <- function(x, coords = TRUE) { if (coords) { if (length(x$radius) > 1) { rx <- convertWidth(x$radius[1], "inches") ry <- convertHeight(x$radius[2], "inches") x$radius <- unit.c(rx, ry) } else { x$radius <- dToInches(x$radius, NULL) } } else { if (length(x$radius) > 1) { rx <- convertWidth(x$radius[1], "npc", valueOnly = TRUE) ry <- convertHeight(x$radius[2], "npc", valueOnly = TRUE) x$radius <- unit.c(rx, ry) } else { # Just use Width for radius x$radius <- convertWidth(dToInches(x$radius, NULL), "npc", valueOnly = TRUE) } } x$coords <- coords NextMethod() } feMorphology <- function(input = NA, operator = c("erode", "dilate"), radius = unit(0, "npc"), default.units = "npc", ...) { if (! is.unit(radius)) radius <- unit(radius, default.units) x <- fe(operator = match.arg(operator), radius = radius, ...) if (! is.na(input)) x$`in` <- input class(x) <- c("fe.morphology", class(x)) x } flatten.fe.offset <- function(x, coords = TRUE) { if (coords) { x$dx <- convertWidth(x$dx, "inches") x$dy <- convertHeight(x$dy, "inches") } else { x$dx <- convertWidth(x$dx, "npc", valueOnly = TRUE) x$dy <- convertHeight(x$dy, "npc", valueOnly = TRUE) } x$coords <- coords NextMethod() } filterSVG.fe.offset <- function(x, dev) { svgdev <- dev@dev if (x$coords) { x$dx <- cx(x$dx, dev) x$dy <- cy(x$dy, dev) } x <- cleanAttrs(x, "coords") newXMLNode("feOffset", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feOffset <- function(input = NA, dx = unit(0, "npc"), dy = unit(0, "npc"), default.units = "npc", ...) { if (! is.unit(dx)) dx <- unit(dx, default.units) if (! is.unit(dy)) dy <- unit(dy, default.units) x <- fe(dx = dx, dy = dy, ...) if (! is.na(input)) x$`in` <- input class(x) <- c("fe.offset", class(x)) x } flatten.fe.specular.lighting <- function(x, coords = TRUE) { x$lightSource <- flatten(x$lightSource, coords) NextMethod() } filterSVG.fe.specular.lighting <- function(x, dev) { svgdev <- dev@dev if (! is.null(x$kernelUnitLength)) x$kernelUnitLength <- paste0(round(x$kernelUnitLength, 2), collapse = " ") specl <- cleanAttrs(x, c("coords", "lightSource")) fesl <- newXMLNode("feSpecularLighting", attrs = roundAttribs(specl), parent = svgDevParent(svgdev)) svgDevChangeParent(fesl, svgdev) filterSVG(x$lightSource, dev) svgDevChangeParent(xmlParent(fesl), svgdev) } feSpecularLighting <- function(input = NA, surfaceScale = 1, specularConstant = 1, specularExponent = 1, kernelUnitLength = NA, col = "white", lightSource = NULL, ...) { if (is.null(lightSource)) stop("A light source must be provided") if (specularConstant < 0) stop("'specularConstant' must be non-negative") if (specularExponent < 1) { warning("exponent less than 1, increasing to 1") specularExponent <- 1 } else if (specularExponent > 128) { warning("exponent larger than 128, reducing to 128") specularExponent <- 128 } x <- fe(surfaceScale = surfaceScale, specularConstant = specularConstant, specularExponent = specularExponent, "lighting-color" = c(col2rgb(col)), lightSource = lightSource, ...) if (! is.na(input)) x$`in` <- input if (! is.na(kernelUnitLength)) { if (length(kernelUnitLength) == 1) kernelUnitLength <- rep(kernelUnitLength, 2) x$kernelUnitLength <- kernelUnitLength } class(x) <- c("fe.specular.lighting", class(x)) x } filterSVG.fe.tile <- function(x, dev) { svgdev <- dev@dev x <- cleanAttrs(x, "coords") newXMLNode("feTile", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feTile <- function(input = NA, ...) { x <- fe(...) if (! is.na(input)) x$`in` <- input class(x) <- c("fe.tile", class(x)) x } filterSVG.fe.turbulence <- function(x, dev) { svgdev <- dev@dev if (length(x$baseFrequency) > 1) x$baseFrequency <- paste0(round(x$baseFrequency, 2), collapse = " ") x <- cleanAttrs(x, "coords") newXMLNode("feTurbulence", attrs = roundAttribs(x), parent = svgDevParent(svgdev)) } feTurbulence <- function(baseFrequency = 0, numOctaves = 1, seed = 1, stitchTiles = FALSE, type = c("turbulence", "fractalNoise"), ...) { stitchTiles <- if (stitchTiles) "stitch" else "noStitch" x <- fe(baseFrequency = baseFrequency, numOctaves = numOctaves, seed = seed, stitchTiles = stitchTiles, type = match.arg(type), ...) class(x) <- c("fe.turbulence", class(x)) x } # Ensure the filters are retained on a forced grob forceGrob.filtered.grob <- function(x) { y <- NextMethod() if (inherits(y, "forcedgrob")) { y$referenceLabel <- x$referenceLabel y$filterLabel <- x$filterLabel y$filterGroup <- x$filterGroup class(y) <- unique(c("filtered.grob", class(y))) } y } �������gridSVG/R/convert.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000014461�12171060445�013572� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������viewportCreate <- function(vpname, newname = NULL, vpPath.sep = getSVGoption("vpPath.sep")) { coords <- gridSVGCoords() if (is.null(coords)) stop("gridSVGCoords() must be initialised") rootvp <- coords$ROOT if (is.null(rootvp)) stop("the ROOT viewport must have coords info set") targetvp <- coords[[vpname]] if (is.null(vpname)) stop(paste("the viewport", sQuote(vpname), "must have coords info set, see", sQuote("gridSVGCoords"))) # Avoid having a vpPath as a viewport name if (is.null(newname)) { splitname <- strsplit(vpname, vpPath.sep)[[1]] vpname <- tail(splitname, 1) } else { vpname <- newname } npcx <- targetvp$x / rootvp$width npcy <- targetvp$y / rootvp$height npcw <- targetvp$width / rootvp$width npch <- targetvp$height / rootvp$height viewport(x = unit(npcx, "npc"), y = unit(npcy, "npc"), width = unit(npcw, "npc"), height = unit(npch, "npc"), angle = targetvp$angle, just = c("left", "bottom"), name = vpname, xscale = targetvp$xscale, yscale = targetvp$yscale) } viewportConvertX <- function(vpname, x, from, to = "svg") { currCoords <- validCoordsInfo(vpname) vpCoords <- currCoords[[vpname]] if (vpCoords$angle != 0) { stop("Viewport angle non-zero; consider using viewportConvertPos()") } if (from == "svg") x <- x - vpCoords$x width <- convertx(vpCoords, x, from, to) if (to == "svg") width <- width + vpCoords$x width } viewportConvertY <- function(vpname, x, from, to = "svg") { currCoords <- validCoordsInfo(vpname) vpCoords <- currCoords[[vpname]] if (vpCoords$angle != 0) { stop("Viewport angle non-zero; consider using viewportConvertPos()") } if (from == "svg") x <- x - vpCoords$y height <- converty(vpCoords, x, from, to) if (to == "svg") height <- height + vpCoords$y height } viewportConvertPos <- function(vpname, x, y, from, to = "svg") { currCoords <- validCoordsInfo(vpname) vpCoords <- currCoords[[vpname]] if (from == "svg") { x <- x - vpCoords$x y <- y - vpCoords$y } width <- convertx(vpCoords, x, from, to) height <- converty(vpCoords, y, from, to) if (vpCoords$angle != 0) { theta <- -vpCoords$angle/180*pi w <- cos(theta)*width + sin(theta)*height h <- -sin(theta)*width + cos(theta)*height width <- w height <- h } if (to == "svg") { width <- width + vpCoords$x height <- height + vpCoords$y } list(x=width, y=height) } viewportConvertWidth <- function(vpname, x, from, to) { currCoords <- validCoordsInfo(vpname) vpCoords <- currCoords[[vpname]] convertx(vpCoords, x, from, to, FALSE) } viewportConvertHeight <- function(vpname, x, from, to) { currCoords <- validCoordsInfo(vpname) vpCoords <- currCoords[[vpname]] converty(vpCoords, x, from, to, FALSE) } convertx <- function(vpCoords, x, from, to, loc=TRUE) { i <- toInches(from, x, vpCoords$width, vpCoords$xscale, vpCoords$inch, loc) u <- toUnit(to, i, vpCoords$width, vpCoords$xscale, vpCoords$inch, loc) u } converty <- function(vpCoords, x, from, to, loc=TRUE) { i <- toInches(from, x, vpCoords$height, vpCoords$yscale, vpCoords$inch, loc) u <- toUnit(to, i, vpCoords$height, vpCoords$yscale, vpCoords$inch, loc) round(u, 2) } viewportConvertDim <- function(vpname, w, h, from, to) { currCoords <- validCoordsInfo(vpname) vpCoords <- currCoords[[vpname]] wi <- toInches(from, w, vpCoords$width, vpCoords$xscale, vpCoords$inch, FALSE) hi <- toInches(from, h, vpCoords$height, vpCoords$yscale, vpCoords$inch, FALSE) if (vpCoords$angle != 0) { theta <- -vpCoords$angle/180*pi w <- cos(theta)*wi + sin(theta)*hi h <- -sin(theta)*wi + cos(theta)*hi wi <- w hi <- h } wu <- toUnit(to, wi, vpCoords$width, vpCoords$xscale, vpCoords$inch, FALSE) hu <- toUnit(to, hi, vpCoords$height, vpCoords$yscale, vpCoords$inch, FALSE) list(w=wu, h=hu) } toInches <- function(from, unitValue, vpDimSize, nativeScale, dimInchSize, loc) { if (from == "inches") return(unitValue) nativeToInches <- function(nativeValue, nativeScale, vpDimSize, dimInchSize, loc) { if (loc) { dist <- nativeValue - nativeScale[1] } else { dist <- nativeValue } nativeUnitSize <- vpDimSize / abs(nativeScale[2] - nativeScale[1]) dist * nativeUnitSize / dimInchSize } npcToInches <- function(npcValue, vpDimSize, dimInchSize) { (npcValue * vpDimSize) / dimInchSize } if (from == "native") { result <- nativeToInches(unitValue, nativeScale, vpDimSize, dimInchSize, loc) } else if (from == "npc") { result <- npcToInches(unitValue, vpDimSize, dimInchSize) } else if (from == "svg") { result <- unitValue / dimInchSize } else { result <- convertUnit(unit(unitValue, from), "inches", valueOnly = TRUE) } result } toUnit <- function(to, unitValue, vpDimSize, nativeScale, dimInchSize, loc) { if (to == "inches") return(unitValue) inchesToNative <- function(inchesValue, nativeScale, vpDimSize, dimInchSize, loc) { npc <- (inchesValue * dimInchSize) / vpDimSize vpRange <- nativeScale[2] - nativeScale[1] if (loc) { (npc * vpRange) + nativeScale[1] } else { (npc * vpRange) } } inchesToNpc <- function(inchesValue, vpDimSize, dimInchSize) { (inchesValue * dimInchSize) / vpDimSize } if (to == "native") { result <- inchesToNative(unitValue, nativeScale, vpDimSize, dimInchSize, loc) } else if (to == "npc") { result <- inchesToNpc(unitValue, vpDimSize, dimInchSize) } else if (to == "svg") { result <- unitValue * dimInchSize } else { result <- convertUnit(unit(unitValue, "inches"), to, valueOnly = TRUE) } result } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/options.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000002541�12164147366�013613� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # Get and set global 'gridSVG' options # Initial settings assign("gridSVGoptions", list( id.sep=".", gPath.sep="::", vpPath.sep="::" ), .gridSVGEnv) checkOptions <- function(options) { optionNames <- names(options) validOption <- sapply(options, is.character) if (any(! validOption)) stop(paste("Invalid option for: ", paste(dQuote(optionNames[! validOption]), collapse = ", "), sep = "")) } # Get/set options getSVGoption <- function(name) { oldOptions <- get("gridSVGoptions", .gridSVGEnv) optionNames <- names(oldOptions) if (name %in% optionNames) { oldOptions[[name]] } } getSVGoptions <- function() { get("gridSVGoptions", .gridSVGEnv) } setSVGoptions <- function(...) { oldOptions <- get("gridSVGoptions", .gridSVGEnv) options <- list(...) if (length(options)) { names <- names(options) optionNames <- names(oldOptions) names <- names[nchar(names) > 0 & names %in% optionNames] if (length(options[names])) { newOptions <- oldOptions newOptions[names] <- options[names] checkOptions(newOptions) assign("gridSVGoptions", newOptions, .gridSVGEnv) invisible(oldOptions[names]) } } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/b64.R�������������������������������������������������������������������������������������0000654�0001762�0000144�00000000506�12765642434�012515� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������base64enc <- function(filename) { filesize <- file.info(filename)$size if (filesize > 0) { pngdata <- base64_enc(readBin(filename, "raw", n = filesize)) paste0("data:image/png;base64,", pngdata, collapse = "") } else { warning(paste(sQuote(filename), "is empty")) filename } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/aaa.R�������������������������������������������������������������������������������������0000654�0001762�0000144�00000003137�14020031502�012615� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Setting up an environment for use within gridSVG .gridSVGEnv <- new.env() # Don't show any progress bars or messages by default assign("showProgress", FALSE, envir = .gridSVGEnv) # Setting a context level for clipGrobs, clipping paths and masks. # Allows popping viewports to work correctly if we know many # SVG groups we need to "pop". assign("contextLevels", 0, envir = .gridSVGEnv) assign("contextNames", character(0), envir = .gridSVGEnv) # The following definitions are required for references to work # because we cannot assume that everything is determined at # draw time. # References require definitions to be created *prior* to drawing # which means we need naming systems and usage tables present. # Needed by getID() assign("uniqueNames", TRUE, envir = .gridSVGEnv) assign("prefix", "", envir = .gridSVGEnv) # We are going to be filling this list with lists of information (describing # reference definitions) keyed by their labels assign("refDefinitions", list(), envir = .gridSVGEnv) assign("usageTable", data.frame(name = character(0), suffix = integer(0), type = character(0), selector = character(0), xpath = character(0), stringsAsFactors = FALSE), envir = .gridSVGEnv) assign("pchUsageTable", matrix(c(0:127, logical(128)), ncol = 2, dimnames = list(NULL, c("pch", "used"))), envir = .gridSVGEnv) assign("refUsageTable", data.frame(label = character(0), used = logical(0), stringsAsFactors = FALSE), envir = .gridSVGEnv) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/comment.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000000622�12240527563�013554� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������grid.comment <- function(comment, name = NULL, vp = NULL) { grid.draw(commentGrob(comment, name, vp)) } commentGrob <- function(comment, name = NULL, vp = NULL) { g <- grob(name = name, vp = vp, cl = "comment") g$comment <- comment cl <- class(g) class(g) <- unique(c("comment.grob", cl)) g } primToDev.comment.grob <- function(x, dev) { svgComment(x$comment, dev@dev) } ��������������������������������������������������������������������������������������������������������������gridSVG/R/dev.R�������������������������������������������������������������������������������������0000654�0001762�0000144�00000007257�12164147366�012707� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This is hardly graphics-system-neutral # e.g., it uses the grid notion of what constitutes a viewport # But anyway ... ################# # General Device Stuff ################# setClass("graphicsDevice", representation(name="character", width="numeric", height="numeric")) setClass("graphicsParams", representation(pars="list")) setGeneric("inchToDevX", function(x, device) { standardGeneric("inchToDevX") }) setGeneric("inchToDevY", function(x, device) { standardGeneric("inchToDevY") }) setGeneric("devArrow", function(arrow, gp, device) { standardGeneric("devArrow") }) setGeneric("devStartElement", function(element, gp, device) { standardGeneric("devStartElement") }) setGeneric("devEndElement", function(name, device) { standardGeneric("devEndElement") }) setGeneric("devTextNode", function(text, device) { standardGeneric("devTextNode") }) setGeneric("devStartClip", function(clip, gp, device) { standardGeneric("devStartClip") }) setGeneric("devStartClipPath", function(clippath, gp, device) { standardGeneric("devStartClipPath") }) setGeneric("devEndClipPath", function(clippath, gp, device) { standardGeneric("devEndClipPath") }) setGeneric("devStartClipPathGroup", function(clippath, gp, device) { standardGeneric("devStartClipPathGroup") }) setGeneric("devStartMask", function(mask, gp, device) { standardGeneric("devStartMask") }) setGeneric("devEndMask", function(mask, gp, device) { standardGeneric("devEndMask") }) setGeneric("devStartMaskGroup", function(mask, gp, device) { standardGeneric("devStartMaskGroup") }) setGeneric("devStartGroup", function(group, gp, device) { standardGeneric("devStartGroup") }) setGeneric("devEndGroup", function(name, vp, device) { standardGeneric("devEndGroup") }) setGeneric("devLines", function(lines, gp, device) { standardGeneric("devLines") }) setGeneric("devPolygon", function(polygon, gp, device) { standardGeneric("devPolygon") }) setGeneric("devPath", function(path, gp, device) { standardGeneric("devPath") }) setGeneric("devRaster", function(raster, gp, device) { standardGeneric("devRaster") }) setGeneric("devRect", function(rect, gp, device) { standardGeneric("devRect") }) setGeneric("devText", function(text, gp, device) { standardGeneric("devText") }) setGeneric("devCircle", function(circle, gp, device) { standardGeneric("devCircle") }) setGeneric("devClose", function(device) { standardGeneric("devClose") }) setGeneric("devStartSymbol", function(pch, device) { standardGeneric("devStartSymbol") }) setGeneric("devPoint", function(pch, device) { standardGeneric("devPoint") }) setGeneric("devEndSymbol", function(device) { standardGeneric("devEndSymbol") }) setGeneric("devUseSymbol", function(point, gp, device) { standardGeneric("devUseSymbol") }) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/progress.R��������������������������������������������������������������������������������0000654�0001762�0000144�00000002676�12204306301�013752� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������progressInit <- function(mode, n) { if (existingProgress()) progressClose() if (! showingProgress() || n == 0) return() progressMessage(mode) con <- txtProgressBar(max = n, style = 3) setTxtProgressBar(con, 0) assign("progress", con, envir = .gridSVGEnv) assign("progressMode", mode, envir = .gridSVGEnv) } progressStep <- function(mode, n = 1) { if (!existingProgress() || !showingProgress() || diffProgressMode(mode)) return() con <- get("progress", envir = .gridSVGEnv) curval <- getTxtProgressBar(con) setTxtProgressBar(con, curval + n) assign("progress", con, envir = .gridSVGEnv) } progressClose <- function() { if (! existingProgress() || ! showingProgress()) return() con <- get("progress", envir = .gridSVGEnv) close(con) assign("progress", NULL, envir = .gridSVGEnv) assign("progressMode", NULL, envir = .gridSVGEnv) } progressMessage <- function(mode) { msg <- switch(mode, grob = "Drawing grobs", defs = "Drawing reference definitions", pch = "Drawing pch definitions") message(msg) } existingProgress <- function() { exists("progress", envir = .gridSVGEnv) && ! is.null(get("progress", envir = .gridSVGEnv)) } diffProgressMode <- function(mode) { mode != get("progressMode", envir = .gridSVGEnv) } showingProgress <- function() { get("showProgress", envir = .gridSVGEnv) } ������������������������������������������������������������������gridSVG/R/griddev.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000126223�13651654416�013551� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ vpError <- function() { stop("vp should only be path") } # Functions to take a grid grob and call appropriate # functions from dev.R to produce output on a device # Each function has to convert locations and dimensions # into device coordinates THEN call the dev.R function # Convert a unit object to a value in "device" units # The calls to convert*() are just to get 'valueOnly' # from "inches" units. cx <- function(x, dev) { inchToDevX(convertX(x, "inches", valueOnly=TRUE), dev) } cy <- function(x, dev) { inchToDevY(convertY(x, "inches", valueOnly=TRUE), dev) } cw <- function(x, dev) { inchToDevX(convertWidth(x, "inches", valueOnly=TRUE), dev) } ch <- function(x, dev) { inchToDevY(convertHeight(x, "inches", valueOnly=TRUE), dev) } # Convert a "distance" (e.g., a circle radius) cd <- function(x, dev) { pmin(inchToDevX(convertWidth(x, "inches", valueOnly=TRUE), dev), inchToDevY(convertHeight(x, "inches", valueOnly=TRUE), dev)) } # Create a full name for a sub-grob based on the name of a parent grob subGrobName <- function(baseGrobName, subGrobName, separator = getSVGoption("id.sep")) { paste(baseGrobName, subGrobName, sep=separator) } # Return the base grob name given the full name of a sub-grob baseGrobName <- function(subGrobName, separator = getSVGoption("id.sep")) { splitName <- unlist(strsplit(subGrobName, separator, fixed = TRUE)) grobName <- paste(splitName[-length(splitName)], collapse = separator) # Returning the base name grobName } prefixName <- function(name) { paste0(get("prefix", envir = .gridSVGEnv), name) } # Convert a gpar object to an device-neutral graphical parameter list gparToDevPars <- function(gp) { # Split up col into col plus colAlpha if (!is.null(gp$col)) { if (is.numeric(gp$col)) { zeroCol <- gp$col == 0 gp$col[zeroCol] <- "transparent" } rgba <- col2rgb(gp$col, alpha=TRUE) gp$colAlpha <- rgba[4,] } # Ditto fill if (!is.null(gp$fill)) { if (is.numeric(gp$fill)) { zeroFill <- gp$fill == 0 gp$fill[zeroFill] <- "transparent" } rgba <- col2rgb(gp$fill, alpha=TRUE) gp$fillAlpha <- rgba[4,] } gp } # Repeats all elements in a gpar() so that it is fully defined for n values expandGpar <- function(gp, n) { if (is.null(gp)) return(gpar()) # If there are actually gpar elements defined, repeat them if (length(gp) > 0) { for (i in 1:length(gp)) { gp[[i]] <- rep(gp[[i]], length.out = n) } } # Returning the gp gp } # Repeats all elements in an arrow() so that it is fully defined for n values expandArrow <- function(arrow, n) { # If there is actually an arrow, repeat its components if (! is.null(arrow)) { for (i in 1:length(arrow)) { arrow[[i]] <- rep(arrow[[i]], length.out = n) } } # Returning the arrow arrow } # Converting locations and widths locToInches <- function(x, y, dev) { # Convert x and y to inches x <- convertX(x, "inches", valueOnly=TRUE) y <- convertY(y, "inches", valueOnly=TRUE) # Transform to inches on device n <- max(length(x), length(y)) loc <- cbind(rep(x, length=n), rep(y, length=n), rep(1, length=n)) %*% current.transform() x <- unit(loc[,1]/loc[,3], "inches") y <- unit(loc[,2]/loc[,3], "inches") list(x=x, y=y) } dimToInches <- function(w, h, dev) { # FIXME: Doesn't handle rotated viewports!! w <- convertWidth(w, "inches") h <- convertHeight(h, "inches") list(w=w, h=h) } dToInches <- function(d, dev) { w <- convertWidth(d, "inches", valueOnly=TRUE) h <- convertHeight(d, "inches", valueOnly=TRUE) d <- unit(pmin(w, h), "inches") d } # Generate (left, bottom) from (x, y), (width, height), and justification leftbottom <- function(x, y, width, height, just, hjust, vjust, dev) { hjust <- resolveHJust(just, hjust) vjust <- resolveVJust(just, vjust) left <- unit(convertX(x, "inches", valueOnly=TRUE) - convertWidth(hjust*width, "inches", valueOnly=TRUE), "inches") bottom <- unit(convertY(y, "inches", valueOnly=TRUE) - convertHeight(vjust*height, "inches", valueOnly=TRUE), "inches") locToInches(left, bottom, dev) } # Generate hjust/vjust from just justTohjust <- function(just) { if (length(just) > 1) just <- just[1] if (is.numeric(just)) { # Rounding to nearest of 0, 0.5, 1 roundedJust <- round(2 * just) / 2 # and clamped to 0 to 1 if (roundedJust < 0) roundedJust <- 0 if (roundedJust > 1) roundedJust <- 1 switch(as.character(roundedJust), "0" = "left", "0.5" = "centre", "1" = "right") } else { if (is.na(match(just[1], c("left", "right")))) "centre" else just[1] } } justTovjust <- function(just) { if (length(just) > 1) just <- just[2] if (is.numeric(just)) { # Rounding to nearest of 0, 0.5, 1 roundedJust <- round(2 * just) / 2 # and clamped to 0 to 1 if (roundedJust < 0) roundedJust <- 0 if (roundedJust > 1) roundedJust <- 1 switch(as.character(roundedJust), "0" = "bottom", "0.5" = "centre", "1" = "top") } else { if (is.na(match(just[1], c("top", "bottom")))) "centre" else just } } changedGPar <- function(startGP, endGP) { diffGP <- mapply(function(x, y) !isTRUE(all.equal(x, y)), endGP, startGP) do.call("gpar", unclass(endGP)[diffGP]) } # Enforce a 'vp' setting # This could be a viewport (or vpTree or vpList or vpStack) OR a vpPath # The general idea is to push or down the 'vp' slot # THEN check how far down we have come # IF we have come more than one level down then start a group for # the appropriate number of parent viewports as well as the current viewport # AND then do the corresponding number of end groups afterwards startGroup <- function(vp, depth, dev) { if (depth > 1) { path <- upViewport(depth - 1, recording=FALSE) paths <- explode(path) for (i in paths) { parent <- current.viewport() parent$classes <- class(parent) devStartGroup(devGrob(parent, dev), gparToDevPars(parent$gp), dev) downViewport(i, recording=FALSE) } } vp$classes <- class(vp) devStartGroup(devGrob(vp, dev), gparToDevPars(vp$gp), dev) } enforceVP <- function(vp, dev) { depth <- 0 if (!is.null(vp)) { if (!inherits(vp, "vpPath")) { pushViewport(vp, recording=FALSE) depth <- depth(vp) } else { depth <- downViewport(vp, recording=FALSE) } startGroup(current.viewport(), depth, dev) } depth } unwindVP <- function(vp, depth, dev) { if (depth > 0) { for (i in 1:depth) devEndGroup("", TRUE, dev) upViewport(depth, recording=FALSE) } } # Grob to SVG # This mimics grid.draw() # Push/down any viewports and then call primToDev() to produce SVG grobToDev <- function(x, dev) { UseMethod("grobToDev", x) } grobToDev.default <- function(x, dev) { stop("We shouldn't be here!") } grobToDev.grob <- function(x, dev) { depth <- enforceVP(x$vp, dev) x$classes <- class(x) primToDev(x, dev) unwindVP(x$vp, depth, dev) progressStep("grob") } # grob to device grob # This just converts a grid grob into a generic (bland) device grob # (which is just a list of values) devGrob <- function(x, dev) { UseMethod("devGrob") } devGrob.default <- function(x, dev) { list(name=x$name, classes=x$classes) } moveToGen <- function() { curx <- NA cury <- NA moveto <- function(x, dev) { loc <- locToInches(x$x, x$y, dev) curx <<- cx(loc$x, dev) cury <<- cy(loc$y, dev) } lineto <- function(x, dev) { loc <- locToInches(x$x, x$y, dev) lineArrow <- x$arrow if (! is.null(lineArrow)) { ends <- switch(as.character(lineArrow$ends), "1" = "first", "2" = "last", "3" = "both") result <- list(x=c(curx, cx(loc$x, dev)), y=c(cury, cy(loc$y, dev)), arrow=list(ends = ends), classes=x$classes, name=x$name) } else { result <- list(x=c(curx, cx(loc$x, dev)), y=c(cury, cy(loc$y, dev)), classes=x$classes, name=x$name) } curx <<- cx(loc$x, dev) cury <<- cy(loc$y, dev) result } list(moveto=moveto, lineto=lineto) } moveToFuns <- moveToGen() devGrob.move.to <- moveToFuns$moveto devGrob.line.to <- moveToFuns$lineto devGrob.lines <- function(x, dev) { loc <- locToInches(x$x, x$y, dev) # Need to add in attributes to know where arrows # go if we have any lineArrow <- x$arrow if (! is.null(lineArrow)) { ends <- switch(as.character(lineArrow$ends), "1" = "first", "2" = "last", "3" = "both") list(x=cx(loc$x, dev), y=cy(loc$y, dev), arrow=list(ends = ends), classes=x$classes, name=x$name) } else { list(x=cx(loc$x, dev), y=cy(loc$y, dev), classes=x$classes, name=x$name) } } devGrob.points <- function(x, dev) { loc <- locToInches(x$x, x$y, dev) list(name = x$name, x = cx(loc$x, dev), y = cy(loc$y, dev), size = cd(dToInches(x$size), dev), angle = current.rotation(), classes = x$classes, pch = x$pch) } devGrob.polygon <- function(x, dev) { loc <- locToInches(x$x, x$y, dev) list(x=cx(loc$x, dev), y=cy(loc$y, dev), classes=x$classes, name=x$name) } devGrob.pathgrob <- function(x, dev) { # The complication is converting the 'x', 'y', and 'id's # into lists if (is.null(x$id) && is.null(x$id.lengths)) { loc <- locToInches(x$x, x$y, dev) list(x=cx(loc$x, dev), y=cy(loc$y, dev), rule=x$rule, classes=x$classes, name=x$name) } else { if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } listX <- split(x$x, id) listY <- split(x$y, id) listLoc <- mapply(locToInches, listX, listY, MoreArgs=list(dev), SIMPLIFY=FALSE) list(x=lapply(listLoc, function(loc, dev) { cx(loc$x, dev) }, dev), y=lapply(listLoc, function(loc, dev) { cy(loc$y, dev) }, dev), rule=x$rule, classes=x$classes, name=x$name) } } devGrob.rastergrob <- function(x, dev) { lb <- leftbottom(x$x, x$y, x$width, x$height, x$just, x$hjust, x$vjust, dev) dim <- dimToInches(x$width, x$height, dev) list(x=cx(lb$x, dev), y=cy(lb$y, dev), width=cw(dim$w, dev), height=ch(dim$h, dev), angle=current.rotation(), datauri=x$datauri, classes=x$classes, name=x$name) } devGrob.rect <- function(x, dev) { lb <- leftbottom(x$x, x$y, x$width, x$height, x$just, x$hjust, x$vjust, dev) dim <- dimToInches(x$width, x$height, dev) list(x=cx(lb$x, dev), y=cy(lb$y, dev), width=cw(dim$w, dev), height=ch(dim$h, dev), angle=current.rotation(), classes=x$classes, name=x$name) } devGrob.text <- function(x, dev) { loc <- locToInches(x$x, x$y, dev) gp <- get.gpar() charHeight <- grobHeight(textGrob("M", gp = x$gp)) # The R graphics engine does some crazy-ass calculations to # determine line height. This does WAAAAY back so we just # have to swallow and follow along. # textLineHeight <- ch(charHeight * gp$lineheight, dev) xcex <- if (is.null(x$gp$cex)) 1 else x$gp$cex textLineHeight <- ch(unit(gp$lineheight * gp$cex * xcex * graphics::par("cin")[2], "inches"), dev) charHeight <- ch(charHeight, dev) # height of current font # This corresponds to lineheight in SVG terms, # which is defined to be font size # see http://www.w3.org/TR/SVG/propidx.html # comment in row for 'baseline-shift' in the 'percentages' column # This is needed for positioning plotmath expressions # to anything close to the right place fontHeight <- ch(unit(gp$fontsize * gp$cex * xcex/ 72, "inches"), dev) # Width of the text/expression # MUST set x$vp to NULL before doing the following calculations # because x$vp has already been asserted and the calculation may # involve trying to assert it again! # (which would mean hidden error because viewport pushed twice OR # visible error because try to "down" to viewport that does not exist) x$vp <- NULL width <- cw(grobWidth(x), dev) height <- ch(grobHeight(x), dev) ascent <- ch(grobAscent(x), dev) descent <- ch(grobDescent(x), dev) # Checking whether to use just or [h/v]just # Will convert numerics to strings in justTo_just function just <- rep(x$just, length.out = 2) just <- c(justTohjust(just[1]), justTovjust(just[2])) if (! is.null(x$hjust)) just[1] <- justTohjust(x$hjust) if (! is.null(x$vjust)) just[2] <-justTovjust(x$vjust) hjust <- just[1] vjust <- just[2] list(x=cx(loc$x, dev), y=cy(loc$y, dev), text=x$label, hjust=hjust, vjust=vjust, rot=x$rot, width=width, height=height, angle=current.rotation(), ascent=ascent, descent=descent, lineheight=textLineHeight, fontheight=fontHeight, charheight=charHeight, fontfamily=gp$fontfamily, fontface=switch(gp$font, "plain", "bold", "italic", "bold.italic"), classes=x$classes, name=x$name) } devGrob.circle <- function(x, dev) { loc <- locToInches(x$x, x$y, dev) list(x=cx(loc$x, dev), y=cy(loc$y, dev), r=cd(dToInches(x$r), dev), classes=x$classes, name=x$name) } # Because viewports and grobs can be used many times, and each # time we use one we start a group, we need a *unique* id for that # group, otherwise things like clipping paths don't work correctly # # 'append' determines whether we add our ID to the usageTable. Useful # not to in cases like animated grobs getID <- function(name, type, append = TRUE) { # If this is a grob or ref, only modify if we're trying to ensure # uniqueness. We *really* need to do this for viewports though, so # viewports are a special case. if (type != "vp" && ! get("uniqueNames", envir = .gridSVGEnv)) return(name) # Finding out how many times a VP or grob has been used so far ut <- get("usageTable", envir = .gridSVGEnv) suffix <- ut[ut$name == name, "suffix"] suffix <- if (length(suffix) == 0) 1 else max(suffix) + 1 # Test if there are any existing names that might clash. # For example rect.1 has rect.1.1 children, test whether # these child names might clash. candidateName <- paste(name, suffix, sep = getSVGoption("id.sep")) while (length(ut[ut$name == candidateName, "suffix"])) { # Just increment the suffix number by 1 each time, should (eventually) # give us a unique number suffix <- suffix + 1 candidateName <- paste(name, suffix, sep = getSVGoption("id.sep")) } if (append) { sel <- prefixName(escapeSelector(candidateName)) xp <- prefixName(escapeXPath(candidateName)) assign("usageTable", rbind(ut, data.frame(name = name, suffix = suffix, type = type, selector = sel, xpath = xp, stringsAsFactors = FALSE)), envir = .gridSVGEnv) } # Returning the new ID paste(name, suffix, sep = getSVGoption("id.sep")) } getCoordsInfo <- function(vp, tm, dev) { # Need to maintain x, y, xscale, yscale, transform # Units of particular interest, npc, native, inches # Keep inches as our baseline transloc <- c(0, 0, 1) %*% tm loc <- (transloc / transloc[3])[-3] coords <- list(x = round(cx(unit(loc[1], "inches"), dev), 2), y = round(cy(unit(loc[2], "inches"), dev), 2), width = round(cw(unit(1, "npc"), dev), 2), height = round(ch(unit(1, "npc"), dev), 2), angle = current.rotation(), xscale = vp$xscale, yscale = vp$yscale, inch = round(cw(unit(1, "inches"), dev), 2)) coords } devGrob.viewport <- function(x, dev) { vp <- x # Modify the path so that we can use a different separator if (get("use.vpPaths", envir = .gridSVGEnv)) { vpname <- as.character(current.vpPath()) splitPath <- explode(vpname) vpname <- paste(splitPath, collapse = getSVGoption("vpPath.sep")) } else { vpname <- vp$name } coords <- getCoordsInfo(vp, current.transform(), dev) if (is.null(vp$clip)) { clip <- FALSE list(name=getID(vpname, "vp"), clip=clip, coords=coords, classes=x$classes) } else if (is.na(vp$clip)) { # Clipping has been turned OFF # FIXME: CANNOT do this in SVG (enlarge the clip path) clip <- FALSE list(name=getID(vpname, "vp"), clip=clip, coords=coords, classes=x$classes) } else if (! vp$clip) { clip <- FALSE list(name=getID(vpname, "vp"), clip=clip, coords=coords, classes=x$classes) } else { clip <- TRUE list(vpx=coords$x, vpy=coords$y, vpw=coords$width, vph=coords$height, angle=current.rotation(), name=getID(vpname, "vp"), clip=clip, classes=x$classes, coords=coords) } } devGrob.vpPath <- function(x, dev) { vp <- current.viewport() tm <- current.transform() if (is.null(vp$clip)) { clip <- FALSE list(name=getID(vp$name, "vp"), clip=clip, classes=x$classes) } else if (is.na(vp$clip)) { # Clipping has been turned OFF # FIXME: CANNOT do this in SVG (enlarge the clip path) clip <- FALSE list(name=getID(vp$name, "vp"), clip=clip, classes=x$classes) } else if (! vp$clip) { clip <- FALSE list(name=getID(vp$name, "vp"), clip=clip, classes=x$classes) } else { clip <- TRUE transloc <- c(0, 0, 1) %*% tm loc <- (transloc / transloc[3])[-3] list(vpx=cx(unit(loc[1], "inches"), dev), vpy=cy(unit(loc[2], "inches"), dev), vpw=cw(unit(1, "npc"), dev), vph=ch(unit(1, "npc"), dev), name=getID(vp$name, "vp"), classes=x$classes, clip=clip) } } devGrob.clip <- function(x, dev) { # Should be similar to a rect in description, because this is a clipping rect lb <- leftbottom(x$x, x$y, x$width, x$height, x$just, x$hjust, x$vjust, dev) dim <- dimToInches(x$width, x$height, dev) list(x=cx(lb$x, dev), y=cy(lb$y, dev), width=cw(dim$w, dev), height=ch(dim$h, dev), angle=current.rotation(), classes=x$classes, name=getID(x$name, "grob")) } # Prim to Dev # This generates SVG from the grob to reproduce the grob in SVG code # General form: # startGroup # for i=1:n # dev&(devGrob(i)) # endGroup primToDev <- function(x, dev) { UseMethod("primToDev") } primToDev.grob <- function(x, dev) { } arrowAddName <- function(arrow, name) { list(angle = arrow$angle, length = arrow$length, ends = arrow$ends, type = arrow$type, name = name) } primToDev.clip <- function(x, dev) { devStartClip(devGrob(x, dev), NULL, dev) } primToDev.move.to <- function(x, dev) { devGrob(x, dev) } primToDev.line.to <- function(x, dev) { # NOTE: MUST NOT evaluate devGrob() more than once # because it has side-effects (within its closure) dgrob <- devGrob(x, dev) dgrob$name <- getID(dgrob$name, "grob") x$name <- getID(x$name, "grob") # Grouping the grob devStartGroup(dgrob, NULL, dev) # This is a bit of a special case where we know there is only one # actual graphical object that is being created, so we are simply # going to modify it's name in place. dgrob$name <- subGrobName(x$name, 1) if (! is.null(x$arrow)) devArrow(arrowAddName(x$arrow, x$name), gparToDevPars(x$gp), dev) devLines(dgrob, gparToDevPars(x$gp), dev) # Ending the group devEndGroup(x$name, FALSE, dev) } primToDev.lines <- function(x, dev) { x$name <- getID(x$name, "grob") # Grouping the grob devStartGroup(devGrob(x, dev), NULL, dev) # This is a bit of a special case where we know there is only one # actual graphical object that is being created, so we are simply # going to modify it's name in place. oldname <- x$name x$name <- subGrobName(x$name, 1) if (! is.null(x$arrow)) devArrow(arrowAddName(x$arrow, x$name), gparToDevPars(x$gp), dev) devLines(devGrob(x, dev), gparToDevPars(x$gp), dev) # Ending the group x$name <- oldname devEndGroup(x$name, FALSE, dev) } primToDev.polyline <- function(x, dev) { x$name <- getID(x$name, "grob") # If we only have one line if (is.null(x$id) && is.null(x$id.lengths)) { x$id <- rep(1L, length(x$x)) } # Multiple lines exist if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } # Each line has an id, grab corresponding positions listX <- split(x$x, id) listY <- split(x$y, id) n <- length(listX) # Gp needs to be defined for each sub-grob, as does arrow gp <- expandGpar(x$gp, n) arrows <- expandArrow(x$arrow, n) # Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) # Now we want to create a new lineGrob for each line # Naming each line with the polyline name suffixed by its id for (i in 1:n) { lg <- linesGrob(x = listX[[i]], y = listY[[i]], gp = gp[i], arrow = arrows[i], default.units = x$default.units, name = subGrobName(x$name, i)) if (! is.null(lg$arrow)) devArrow(arrowAddName(lg$arrow, lg$name), gparToDevPars(lg$gp), dev) devLines(devGrob(lg, dev), gparToDevPars(lg$gp), dev) } # Ending the group devEndGroup(x$name, FALSE, dev) } # Any more efficient way of doing this? # FIXME: will lose any extra attributes of segments grob primToDev.segments <- function(x, dev) { nx0 <- length(x$x0) nx1 <- length(x$x1) ny0 <- length(x$y0) ny1 <- length(x$y1) n <- max(nx0, nx1, ny0, ny1) # Gp needs to be defined for each sub-grob, as does arrow gp <- expandGpar(x$gp, n) arrows <- expandArrow(x$arrow, n) x$name <- getID(x$name, "grob") # Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) for (i in 1:n) { lg <- linesGrob(unit.c(x$x0[(i-1) %% nx0 + 1], x$x1[(i-1) %% nx1 + 1]), unit.c(x$y0[(i-1) %% ny0 + 1], x$y1[(i-1) %% ny1 + 1]), arrow = arrows[i], default.units = x$default.units, gp = gp[i], name = subGrobName(x$name, i)) if (! is.null(lg$arrow)) devArrow(arrowAddName(lg$arrow, lg$name), gparToDevPars(lg$gp), dev) devLines(devGrob(lg, dev), gparToDevPars(lg$gp), dev) } # Ending the group devEndGroup(x$name, FALSE, dev) } primToDev.polygon <- function(x, dev) { # If we have only one polygon if (is.null(x$id) && is.null(x$id.lengths)) { x$id <- rep(1L, length(x$x)) } # If we have multiple polygons if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } # Each polygon has an id, grab corresponding positions listX <- split(x$x, id) listY <- split(x$y, id) # May have id.length == 0 so use # of groups n <- length(listX) # Gp needs to be defined for each sub-grob gp <- expandGpar(x$gp, n) x$name <- getID(x$name, "grob") # Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) # Now we want to create a new polygonGrob for each polygon # Naming each polygon with the polygon name suffixed by its id for (i in 1:n) { pg <- polygonGrob(x = listX[[i]], y = listY[[i]], gp = gp[i], default.units = x$default.units, name = subGrobName(x$name, i)) devPolygon(devGrob(pg, dev), gparToDevPars(pg$gp), dev) } # Ending the group devEndGroup(x$name, FALSE, dev) } trim <- function(points) { n <- length(points$x) if (n > 2) { remove <- 1 while (remove < n && points$x[1] == points$x[1 + remove] && points$y[1] == points$y[1 + remove]) { remove <- remove + 1 } if (remove > 1) { points$x <- points$x[-(1:(remove - 1))] points$y <- points$y[-(1:(remove - 1))] } } points } primToDev.xspline <- function(x, dev) { # Setting up function that turns an xspline into a series of points # which is then used to define a line or path splineToGrob <- function(spline) { splinePoints <- xsplinePoints(spline) if (spline$open) { linesGrob(x = splinePoints$x, y = splinePoints$y, gp = spline$gp, arrow = spline$arrow, default.units = spline$default.units, name = spline$name) } else { pathGrob(x = splinePoints$x, y = splinePoints$y, gp = spline$gp, default.units = spline$default.units, name = spline$name) } } # 'grid' does not allow NAs in (x, y) for Xsplines if (any(is.na(x$x)) || any(is.na(x$y))) stop("non-finite control point in Xspline") # If we have only one spline if (is.null(x$id) && is.null(x$id.lengths)) { x$id <- rep(1L, length(x$x)) } # If we're dealing with more than one spline if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } # Each xspline has an id, grab corresponding positions listX <- split(x$x, id) listY <- split(x$y, id) n <- length(listX) # If x$shape is not defined for each point, repeat it for all points pointShapes <- rep(x$shape, length.out = length(x$x)) listShape <- split(pointShapes, id) # Like x$shape, if the following attributes not defined for each grob id, repeat it splineOpen <- rep(x$open, length.out = n) splineEnds <- rep(x$repEnds, length.out = n) # Gp needs to be defined for each sub-grob, as does arrow gp <- expandGpar(x$gp, n) arrows <- expandArrow(x$arrow, n) x$name <- getID(x$name, "grob") # Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) # Now we want to create a new xsplineGrob for each xspline # Naming each xspline with the xspline name suffixed by its id for (i in 1:n) { xsg <- xsplineGrob(x = listX[[i]], y = listY[[i]], open = x$open, # Could use splineOpen[i] but grid.xspline applies this for the entire group of grobs shape = listShape[[i]], default.units = x$default.units, repEnds = splineEnds[i], arrow = arrows[i], gp = gp[i], name = subGrobName(x$name, i)) sg <- splineToGrob(xsg) if (inherits(sg, "pathgrob")) { devPath(devGrob(sg, dev), gparToDevPars(sg$gp), dev) } else { dg <- devGrob(sg, dev) if (! is.null(sg$arrow)) { devArrow(arrowAddName(sg$arrow, sg$name), gparToDevPars(sg$gp), dev) # The arrow orientation is determined "auto"matically by # the SVG renderer, so we need to avoid identical values # at start or end of points (this has been done in # xsplinePoints(), but we need to do it again here because # we will be rounding to 2 dp for SVG output!) dgTrimFront <- trim(list(x=round(dg$x, 2), y=round(dg$y, 2))) dgTrimBack <- trim(list(x=rev(dgTrimFront$x), y=rev(dgTrimFront$y))) dg$x <- rev(dgTrimBack$x) dg$y <- rev(dgTrimBack$y) } devLines(dg, gparToDevPars(sg$gp), dev) } } # Ending the group devEndGroup(x$name, FALSE, dev) } primToDev.pathgrob <- function(x, dev) { x$name <- getID(x$name, "grob") ## Grouping the grob devStartGroup(devGrob(x, dev), NULL, dev) hasMultiple <- !(is.null(x$pathId) && is.null(x$pathId.lengths)) oldname <- x$name if (hasMultiple) { if (is.null(x$pathId)) { n <- length(x$pathId.lengths) pathId <- rep(1L:n, x$pathId.lengths) } else { n <- length(unique(x$pathId)) pathId <- x$pathId } if (is.null(x$id) && is.null(x$id.length)) { id <- rep(1, length(x$x)) } else if (is.null(x$id)) { id <- rep(1L:length(x$id.lengths), x$id.lengths) } else { id <- x$id } gp <- expandGpar(x$gp, n) listX <- split(x$x, pathId) listY <- split(x$y, pathId) listID <- split(id, pathId) for (i in 1:n) { pg <- pathGrob(x = listX[[i]], y = listY[[i]], id = listID[[i]], rule = x$rule, gp = gp[i], default.units = x$default.units, name = subGrobName(x$name, i)) devPath(devGrob(pg, dev), gparToDevPars(pg$gp), dev) } } else { ## This is a bit of a special case where we know there is only one ## actual graphical object that is being created, so we are simply ## going to modify it's name in place. x$name <- subGrobName(x$name, 1) gp <- expandGpar(x$gp, 1) devPath(devGrob(x, dev), gparToDevPars(gp), dev) } ## Ending the group x$name <- oldname devEndGroup(x$name, FALSE, dev) } primToDev.rastergrob <- function(x, dev) { # Finding out how many rasters we're dealing with n <- max(length(x$x), length(x$y), length(x$width), length(x$height)) # Repeating components as necessary xs <- rep(x$x, length.out = n) ys <- rep(x$y, length.out = n) # Finding the dimensions of the image, c(height, width) rasterDims <- dim(x$raster) rasterHeight <- rasterDims[1] rasterWidth <- rasterDims[2] # If we haven't been given any information about the h or w, # blow the image up to the full size but respect the aspect ratio x <- resolveRasterSize(x) # Use widthDetails() here (rather than grobWidth()) # because drawing context already enforced widths <- rep(x$width, length.out = n) heights <- rep(x$height, length.out = n) # Generating the filename of the raster fileloc <- tempfile(x$name, fileext = "png") # Because of issues regarding interpolation, it's best just to # store the raster with as large a dimension as possible. # OTOH, never want to REDUCE the size of the raw raster (?) rasterDims <- c(max(abs(rasterHeight), ch(max(heights), dev)), max(abs(rasterWidth), cw(max(widths), dev))) olddev <- dev.cur() png(filename = fileloc, width = round(abs(rasterDims[2])), height = round(abs(rasterDims[1])), bg = "transparent") # Need to ensure that the raster is oriented correctly in the (more rare) # case of an xscale or yscale being big -> small # To do this, position natively in a new (temporary) viewport xscale <- if (rasterDims[2] < 0) 1:0 else 0:1 yscale <- if (rasterDims[1] < 0) 1:0 else 0:1 pushViewport(viewport(xscale = xscale, yscale = yscale), recording = FALSE) # The raster stays the same and is only repeated for each appearance. # Given that we know the dimensions of the PNG, we can safely say that # the raster occupies the entireity of both the x and y dimensions. grid.raster(x$raster, width = 1, height = 1, interpolate = x$interpolate, default.units = "native") popViewport(recording = FALSE) dev.off() dev.set(olddev) # base64 encoding the PNG so we can insert the image as a data URI base64Raster <- base64enc(fileloc) file.remove(fileloc) # Expand the gp such that it fully defines all sub-grobs gp <- expandGpar(x$gp, n) x$name <- getID(x$name, "grob") # Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) for (i in 1:n) { rg <- rasterGrob(x$raster, x = xs[i], y = ys[i], width = widths[i], height = heights[i], just = x$just, hjust = x$hjust, vjust = x$vjust, default.units = x$default.units, gp = gp[i], # Will be ignored, keeping anyway name = subGrobName(x$name, i)) rg$datauri <- base64Raster devRaster(devGrob(rg, dev), gparToDevPars(rg$gp), dev) } # Ending the group devEndGroup(x$name, FALSE, dev) } primToDev.rect <- function(x, dev) { ## Finding out how many rects we're dealing with n <- max(length(x$x), length(x$y), length(x$width), length(x$height)) ## Repeating components as necessary xs <- rep(x$x, length.out = n) ys <- rep(x$y, length.out = n) widths <- rep(x$width, length.out = n) heights <- rep(x$height, length.out = n) ## Expand the gp such that it fully defines all sub-grobs gp <- expandGpar(x$gp, n) x$name <- getID(x$name, "grob") ## Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) rg <- rectGrob(x = xs, y = ys, width = widths, height = heights, just = x$just, hjust = x$hjust, vjust = x$vjust, default.units = x$default.units, gp = gp, name = subGrobName(x$name, 1:n)) devRect(devGrob(rg, dev), gparToDevPars(rg$gp), dev) ## Ending the group devEndGroup(x$name, FALSE, dev) } primToDev.text <- function(x, dev) { # Finding out how many pieces of text we're dealing with n <- max(length(x$x), length(x$y), length(x$label)) # Repeating components as necessary textX <- rep(x$x, length.out = n) textY <- rep(x$y, length.out = n) textRot <- rep(x$rot, length.out = n) # If any given label is a vector of length 0, we don't want NA to appear if (length(x$label) == 0) { textLabel <- " " textLabel <- rep(textLabel, length.out = n) } else { # Checking that no element of label vector is empty if (!is.language(x$label)) { textLabel <- sapply(x$label, function(t) { if (is.na(t) || nchar(t) == 0 || length(t) == 0) " " else t }) } textLabel <- rep(x$label, length.out = n) } # Force fill to be col for text if (is.null(x$gp)) x$gp <- gpar(fill = get.gpar()$col) else x$gp$fill <- if (! is.null(x$gp$col)) x$gp$col else get.gpar()$col # Expand the gp such that it fully defines all sub-grobs gp <- expandGpar(x$gp, n) x$name <- getID(x$name, "grob") # Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) for (i in 1:n) { tg <- textGrob(x = textX[i], y = textY[i], label = textLabel[i], rot = textRot[i], just = x$just, hjust = x$hjust, vjust = x$vjust, default.units = x$default.units, gp = gp[i], name = subGrobName(x$name, i)) devText(devGrob(tg, dev), gparToDevPars(tg$gp), dev) } # Ending the group devEndGroup(x$name, FALSE, dev) } primToDev.circle <- function(x, dev) { ## Finding out how many circles we're dealing with n <- max(length(x$x), length(x$y), length(x$r)) ## Repeating components as necessary xs <- rep(x$x, length.out = n) ys <- rep(x$y, length.out = n) rs <- rep(x$r, length.out = n) ## Expand the gp such that it fully defines all sub-grobs gp <- expandGpar(x$gp, n) x$name <- getID(x$name, "grob") ## Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) cg <- circleGrob(x = xs, y = ys, r = rs, default.units = x$default.units, gp = gp, name = subGrobName(x$name, 1:n)) devCircle(devGrob(cg, dev), gparToDevPars(cg$gp), dev) ## Ending the group devEndGroup(x$name, FALSE, dev) } adjustSymbolSize <- function(pointSize, pgp) { # Points are affected by cex and fontsize but only if they are # char or lines, etc # Solution: push a viewport with new gps from the grob and can # therefore can convert unit safely to inches because grid's unit # conversion routines can handle when the *viewport* has the cex or # fontsize information but not when the *grob* has it. # Also, not recording on the DL because this viewport wasn't part # of the original vp tree. if (!is.null(pgp$cex) || !is.null(pgp$fontsize)) { xscale <- current.viewport()$xscale yscale <- current.viewport()$yscale if (!is.null(pgp$cex) & !is.null(pgp$fontsize)) { pushViewport(viewport(xscale = xscale, yscale = yscale, gp = gpar(cex = pgp$cex, fontsize = pgp$fontsize)), recording = FALSE) } else if (!is.null(pgp$cex)) { pushViewport(viewport(xscale = xscale, yscale = yscale, gp = gpar(cex = pgp$cex)), recording = FALSE) } else { ## if (!is.null(pgp$fontsize)) pushViewport(viewport(xscale = xscale, yscale = yscale, gp = gpar(fontsize = pgp$fontsize)), recording = FALSE) } pointSize <- convertWidth(pointSize, "inches") # Use width, matches grid popViewport(recording = FALSE) } pointSize } primToDev.points <- function(x, dev) { # Finding out how many grobs we're going to be dealing with # length of x and y already checked in grid.points n <- length(x$x) pgp <- x$gp ## Force a stroke-width, col, and fill if (is.null(pgp$lwd)) { pgp$lwd <- get.gpar()$lwd } if (is.null(pgp$col)) { pgp$col <- get.gpar()$col } if (is.null(pgp$fill)) { pgp$fill <- get.gpar()$fill } ## Expand the gp such that it fully defines all sub-grobs pgp <- expandGpar(pgp, n) x$name <- getID(x$name, "grob") ## Grouping each sub-grob devStartGroup(devGrob(x, dev), NULL, dev) ## For testing validity, convert to numerics if (is.numeric(x$pch)) { chinds <- numeric() } else { chinds <- which(!is.na(x$pch) & !(as.character(x$pch) %in% as.character(c(0:25, 32:127)))) } pchtest <- x$pch if (length(chinds) > 0) { newpch <- integer(length(pchtest)) newpch[chinds] <- as.numeric(sapply(pchtest[chinds], function(x) charToRaw(x))) newpch[!chinds] <- as.numeric(pchtest[!chinds]) pchtest <- newpch } if (any(!is.na(pchtest) & !pchtest %in% c(0:25, 32:127))) stop("Unsupported pch value") ## These can differ for points pchs <- rep(pchtest, length.out = n) sizes <- rep(x$size, length.out = n) ## Check whether the point symbol has been used yet pchUsageTable <- get("pchUsageTable", envir = .gridSVGEnv) ## Update usages pchUsageTable[pchs + 1, "used"] <- TRUE assign("pchUsageTable", pchUsageTable, envir = .gridSVGEnv) if (!is.unit(sizes) && is.numeric(sizes)) { ## Just a number -- convert to a unit pointSize <- unit(sizes, x$default.units) } else { ## All other units pointSize <- sizes } if (any(pchs) %in% 32:127) { asciipch <- sapply(pchs, function(x) rawToChar(as.raw(x))) } else { asciipch <- pchs } pgp$fill[pchs < 15] <- "transparent" ## 46 == "." ## Don't do anything for a "." because we need a ## stroke for it to be visible noStroke <- !is.na(pchs) & (pchs %in% 15:20 | (pchs >= 32 & pchs != 46)) if (any(noStroke)) { pgp$fill[noStroke] <- pgp$col[noStroke] pgp$col[noStroke & pchs %in% 15:18] <- "transparent" } ## Size is now relative to text so use text grob ## pointSize[pchs >= 32] <- grobWidth(textGrob(asciipch[pchs >= 32])) ## Enforce gp$cex or gp$fontsize pointSize <- adjustSymbolSize(pointSize, pgp) pg <- pointsGrob(x$x, x$y, pch = asciipch, size = pointSize, default.units = x$default.units, name = subGrobName(x$name, 1:n)) devUseSymbol(devGrob(pg, dev), gparToDevPars(pgp), dev) # Ending the group devEndGroup(x$name, FALSE, dev) } grobToDev.gTree <- function(x, dev) { depth <- enforceVP(x$vp, dev) if (!is.null(x$childrenvp)) { pushViewport(x$childrenvp, recording=FALSE) upViewport(depth(x$childrenvp), recording=FALSE) } primToDev(x, dev) unwindVP(x$vp, depth, dev) # Ignore wrapping gTree as it was not on the original DL if (x$name != "gridSVG") progressStep("grob") } primToDev.gTree <- function(x, dev) { if (x$name != "gridSVG") { x$name <- getID(x$name, "grob") x$classes <- class(x) children <- x$children[x$childrenOrder] } else { children <- x$children } devStartGroup(devGrob(x, dev), gparToDevPars(x$gp), dev) lapply(children, function(child) { # 'gridSVG' is a special case because it is just a wrapping gTree. # It is not useful for us to track the entire gPath as a result, # only the path *after* 'gridSVG' if (get("use.gPaths", envir = .gridSVGEnv) && x$name != "gridSVG") child$name <- paste(x$name, child$name, sep = getSVGoption("gPath.sep")) child$classes <- class(child) grobToDev(child, dev) }) devEndGroup(x$name, FALSE, dev) } # Viewports (and vpPaths and downs and ups) # on the display list get recorded as wrapped grobs grobToDev.recordedGrob <- function(x, dev) { x <- x$list if (!is.null(x$vp)) { # recorded pushViewport enforceVP(x$vp, dev) } else if (!is.null(x$path)) { # recorded downViewport enforceVP(x$path, dev) } else if (!is.null(x$n)) { # recorded up or pop unwindVP(NULL, x$n, dev) } } # grid to SVG # Given a gTree created by grid.grab() gridToDev <- function(gTree, dev) { grobToDev(gTree, dev) } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/mapping.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000004174�12164147366�013557� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������testUniqueMappings <- function(x) { idNodes <- getNodeSet(x, "//*[@id]") ids <- sapply(idNodes, function(x) xmlGetAttr(x, "id")) length(ids) == length(unique(ids)) } formatTypeMapping <- function(x, type) { objs <- x[x$type == type, c("name", "suffix", "selector", "xpath")] if (! nrow(objs)) return(NULL) objNames <- unique(objs$name) objList <- vector("list", length(objNames)) names(objList) <- objNames for (i in 1:length(objNames)) objList[[i]] <- objs[objs$name == objNames[i], c("suffix", "selector", "xpath")] objList } formatMappings <- function(x) { list(vps = formatTypeMapping(x, "vp"), grobs = formatTypeMapping(x, "grob"), refs = formatTypeMapping(x, "ref"), id.sep = getSVGoption("id.sep"), prefix = get("prefix", envir = .gridSVGEnv)) } exportMappings <- function(x) { x <- formatMappings(x) paste("var gridSVGMappings = ", toJSON(x), ";\n", sep = "") } gridSVGMappingsGen <- function() { mappings <- NULL function(newmappings = NULL) { if (is.null(newmappings)) { mappings } else { mappings <<- newmappings } } } gridSVGMappings <- gridSVGMappingsGen() getSVGMappings <- function(name, type, result = "id") { if (! type %in% c("vp", "grob", "ref")) stop("'type' must be one of 'vp', 'grob' or 'ref'") if (! result %in% c("id", "selector", "xpath")) stop("'result' must be one of 'id', 'selector' or 'xpath'") # Because the list itself uses vp/grob, rewrite type <- paste(type, "s", sep = "") mappings <- gridSVGMappings() if (is.null(mappings)) stop("gridSVGMappings() must be initialised") nameData <- mappings[[type]][[name]] if (is.null(nameData)) stop("Name not found") if (result == "id") paste0(mappings$prefix, name, mappings$id.sep, nameData$suffix) else nameData[[result]] } readMappingsJS <- function(filename) { jsData <- readLines(filename) jsData <- gsub("var gridSVGMappings = ", "", jsData) jsonData <- gsub(";$", "", jsData) fromJSON(paste0(jsonData, collapse = "\n")) } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/gradients.R�������������������������������������������������������������������������������0000654�0001762�0000144�00000030543�12757205367�014107� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# High level functions for applying gradients as fills to grobs grid.gradientFill <- function(path, gradient = NULL, label = NULL, alpha = 1, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) { if (is.null(gradient) & is.null(label)) { stop("At least one of 'gradient' or 'label' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.gradientFill") registerGradientFill(label, gradient) gradient <- NULL # use the ref from now on } else if (is.null(gradient)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerGradientFill(label, gradient) gradient <- NULL # use the ref from now on } grobApply(path, function(path) { grid.set(path, gradientFillGrob(grid.get(path), gradient = gradient, label = label, alpha = alpha, group = group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } gradientFillGrob <- function(x, gradient = NULL, label = NULL, alpha = 1, group = TRUE) { if (is.null(gradient) & is.null(label)) { stop("At least one of 'gradient' or 'label' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.gradientFill") registerGradientFill(label, gradient) } else if (is.null(gradient)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerGradientFill(label, gradient) } if (length(alpha) != length(label)) alpha <- rep(alpha, length.out = length(label)) x$referenceLabel <- c(x$referenceLabel, label) x$gradientFillLabel <- label x$gradientFillAlpha <- alpha x$gradientFillGroup <- group class(x) <- unique(c("gradientFilled.grob", class(x))) x } linearGradient <- function(col = c("black", "white"), stops = seq(0, 1, length.out = length(col)), gradientUnits = c("bbox", "coords"), x0 = unit(0, "npc"), x1 = unit(1, "npc"), y0 = unit(0, "npc"), y1 = unit(1, "npc"), default.units = "npc", spreadMethod = c("pad", "reflect", "repeat")) { # Vectorising colours & stops nstops <- max(length(col), length(stops)) col <- rep(col, length.out = nstops) stops <- rep(stops, length.out = nstops) offset <- round(stops, 2) stopCol <- sapply(col, function(x) devColToSVG(x), USE.NAMES = FALSE) stopOpacity <- devColAlphaToSVG(col2rgb(col, alpha = TRUE)[4, ]) gradientUnits <- match.arg(gradientUnits) spreadMethod <- match.arg(spreadMethod) if (! is.unit(x0)) x0 <- unit(x0, default.units) if (! is.unit(x1)) x1 <- unit(x1, default.units) if (! is.unit(y0)) y0 <- unit(y0, default.units) if (! is.unit(y1)) y1 <- unit(y1, default.units) # Convert gradientUnits to SVG values gradientUnits <- switch(gradientUnits, bbox = "objectBoundingBox", coords = "userSpaceOnUse") # Need to get npc-like values from units if (gradientUnits == "objectBoundingBox") { # Convert to npc x0 <- convertX(x0, "npc", valueOnly = TRUE) x1 <- convertX(x1, "npc", valueOnly = TRUE) y0 <- convertY(y0, "npc", valueOnly = TRUE) y1 <- convertY(y1, "npc", valueOnly = TRUE) } grad <- list(element = "linearGradient", gradientUnits = gradientUnits, x1 = x0, x2 = x1, y1 = y0, y2 = y1, spreadMethod = spreadMethod, offset = offset, stopCol = stopCol, stopOpacity = stopOpacity) class(grad) <- c("linear.gradient", "gradient") grad } radialGradient <- function(col = c("black", "white"), stops = seq(0, 1, length.out = length(col)), gradientUnits = c("bbox", "coords"), x = unit(0.5, "npc"), y = unit(0.5, "npc"), r = unit(0.5, "npc"), fx = unit(0.5, "npc"), fy = unit(0.5, "npc"), default.units = "npc", spreadMethod = c("pad", "reflect", "repeat")) { # Vectorising colours & stops nstops <- max(length(col), length(stops)) col <- rep(col, length.out = nstops) stops <- rep(stops, length.out = nstops) offset <- round(stops, 2) stopCol <- sapply(col, function(x) devColToSVG(x), USE.NAMES = FALSE) stopOpacity <- devColAlphaToSVG(col2rgb(col, alpha = TRUE)[4, ]) gradientUnits <- match.arg(gradientUnits) spreadMethod <- match.arg(spreadMethod) if (is.null(stops)) stops <- list() if (! is.unit(x)) x <- unit(x, default.units) if (! is.unit(y)) y <- unit(y, default.units) if (! is.unit(r)) r <- unit(r, default.units) if (! is.unit(fx)) fx <- unit(fx, default.units) if (! is.unit(fy)) fy <- unit(fy, default.units) # Convert gradientUnits to SVG values gradientUnits <- switch(gradientUnits, bbox = "objectBoundingBox", coords = "userSpaceOnUse") # Need to get npc-like values from units if (gradientUnits == "objectBoundingBox") { x <- convertX(x, "npc", valueOnly = TRUE) y <- convertY(y, "npc", valueOnly = TRUE) rw <- convertWidth(r, "npc", valueOnly = TRUE) rh <- convertHeight(r, "npc", valueOnly = TRUE) r <- pmin(abs(rw), abs(rh)) fx <- convertX(fx, "npc", valueOnly = TRUE) fy <- convertY(fy, "npc", valueOnly = TRUE) } grad <- list(element = "radialGradient", gradientUnits = gradientUnits, cx = x, cy = y, r = r, fx = fx, fy = fy, spreadMethod = spreadMethod, offset = offset, stopCol = stopCol, stopOpacity = stopOpacity) class(grad) <- c("radial.gradient", "gradient") grad } print.gradient <- function(x, ...) { prln <- function(label, value) { cat(sprintf(paste0(label, ": %s\n"), value)) } prln("Type", x$element) n <- length(x$offset) prln("Number of stops", n) cat("\n") prln("Gradient stops", "") for (i in 1:n) { cat(" ") cat("Offset:", x$offset[i]) cat(" ") cat("Colour:", x$stopCol[i]) cat(" ") cat("Opacity:", x$stopOpacity[i]) cat("\n") } invisible(x) } flattenLinearGradient <- function(gradient) { # Flatten all locations here if (gradient$gradientUnits == "userSpaceOnUse") { offsets <- getAbsoluteOffset() width <- convertWidth(gradient$x2 - gradient$x1, "inches", valueOnly = TRUE) height <- convertHeight(gradient$y2 - gradient$y1, "inches", valueOnly = TRUE) gradient$x1 <- convertX(gradient$x1, "inches") + offsets[1] gradient$x2 <- convertX(gradient$x2, "inches") + offsets[1] gradient$y1 <- convertY(gradient$y1, "inches") + offsets[2] gradient$y2 <- convertY(gradient$y2, "inches") + offsets[2] } gradient } flattenRadialGradient <- function(gradient) { # Flatten all locations here if (gradient$gradientUnits == "userSpaceOnUse") { offsets <- getAbsoluteOffset() gradient$cx <- convertX(gradient$cx, "inches") + offsets[1] gradient$cy <- convertY(gradient$cy, "inches") + offsets[2] gradient$r <- abs(dToInches(gradient$r, NULL)) gradient$fx <- convertX(gradient$fx, "inches") + offsets[1] gradient$fy <- convertY(gradient$fy, "inches") + offsets[2] } gradient } registerGradientFill <- function(label, gradient) { checkExistingDefinition(label) # Flattening all locations gradient <- if (inherits(gradient, "radial.gradient")) flattenRadialGradient(gradient) else flattenLinearGradient(gradient) gradient$label <- label gradient$id <- getID(label, "ref") class(gradient) <- "gradientDef" refDefinitions <- get("refDefinitions", envir = .gridSVGEnv) refDefinitions[[label]] <- gradient assign("refDefinitions", refDefinitions, envir = .gridSVGEnv) assign("refUsageTable", rbind(get("refUsageTable", envir = .gridSVGEnv), data.frame(label = label, used = FALSE, stringsAsFactors = FALSE)), envir = .gridSVGEnv) # Return NULL invisibly because we don't actually care what the # definition looks like until gridSVG tries to draw it. invisible() } svgLinearGradient <- function(def, dev) { svgdev <- dev@dev # Convert grid coords to SVG coords if we are using coordinates # rather than the bounding box of the referring object if (def$gradientUnits == "userSpaceOnUse") { def$x1 <- cx(def$x1, dev) def$x2 <- cx(def$x2, dev) def$y1 <- cy(def$y1, dev) def$y2 <- cy(def$y2, dev) } gradient <- newXMLNode("linearGradient", parent = svgDevParent(svgdev), attrs = list(id = def$id, x1 = round(def$x1, 2), x2 = round(def$x2, 2), y1 = round(def$y1, 2), y2 = round(def$y2, 2), gradientUnits = def$gradientUnits, spreadMethod = def$spreadMethod)) svgDevChangeParent(gradient, svgdev) } svgRadialGradient <- function(def, dev) { svgdev <- dev@dev # Convert grid coords to SVG coords if we are using coordinates # rather than the bounding box of the referring object if (def$gradientUnits == "userSpaceOnUse") { def$cx <- cx(def$cx, dev) def$cy <- cy(def$cy, dev) def$r <- cd(def$r, dev) def$fx <- cx(def$fx, dev) def$fy <- cy(def$fy, dev) } gradient <- newXMLNode("radialGradient", parent = svgDevParent(svgdev), attrs = list(id = def$id, cx = round(def$cx, 2), cy = round(def$cy, 2), r = round(def$r, 2), fx = round(def$fx, 2), fy = round(def$fy, 2), gradientUnits = def$gradientUnits, spreadMethod = def$spreadMethod)) svgDevChangeParent(gradient, svgdev) } primToDev.gradientFilled.grob <- function(x, dev) { setLabelUsed(x$referenceLabel) label <- getLabelID(x$gradientFillLabel) # Allowing fill-opacity to be set by a garnish because # grid only knows about a colour and its opacity. If we use a # reference instead of a then nothing is known about the opacity. # We want to ensure that we can still set it, so use the garnish # to overwrite it. gf <- garnishGrob(x, fill = paste0("url(#", label, ")"), "fill-opacity" = x$gradientFillAlpha, group = x$gradientFillGroup) # Now need to remove all gradient fill appearances in the class list. # This is safe because repeated gradient filling just clobbers existing # attributes. cl <- class(gf) class(gf) <- cl[cl != "gradientFilled.grob"] primToDev(gf, dev) } drawDef.gradientDef <- function(def, dev) { svgdev <- dev@dev if (def$element == "linearGradient") svgLinearGradient(def, dev) else svgRadialGradient(def, dev) # Adding the gradient stops for (i in 1:length(def$offset)) { newXMLNode("stop", attrs = list(offset = def$offset[i], "stop-color" = def$stopCol[i], "stop-opacity" = def$stopOpacity[i]), parent = svgDevParent(svgdev)) } # Going back up from the stops to the parent of the gradient svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) } # Ensure the gradient fill is retained on a forced grob forceGrob.gradientFilled.grob <- function(x) { y <- NextMethod() if (inherits(y, "forcedgrob")) { y$referenceLabel <- x$referenceLabel y$gradientFillLabel <- x$gradientFillLabel y$gradientFillAlpha <- x$gradientFillAlpha y$gradientFillGroup <- x$gradientFillGroup class(y) <- unique(c("gradientFilled.grob", class(y))) } y } �������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/sanitisers.R������������������������������������������������������������������������������0000654�0001762�0000144�00000010316�14402221373�014267� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Takes a grob name as an input and returns a selector capable of being # used as a CSS selector in JS, e.g.: # jQuery - $(...) # D3 - d3.select(...) # document.querySelector(...) # # Note though, document.getElementById() works *without* escaping. # # Mathias Bynens has written a *JS* implementation of this escaping which we # could use for any JS code, but I think an R port is ideal. This is because # we are not dependent on any external library, and the data is fixed. This # means that it can easily be abstracted away for most purposes. # # https://github.com/mathiasbynens/mothereff.in/blob/master/css-escapes/eff.js # # No escaping necessary for XPath! Should just be "//svg:*[@id='OUR_ID']" # Only need to escape quoting character, (') by default # # Params: # x, a grob name to escape # escapeNonASCII, if we have unicode characters, should we escape them # escapeJS, if we want to have safe values for JS, we need to escape # that too. This is FALSE by default because RJSONIO does this # for us. escapeSelector <- function(x, escapeNonASCII = FALSE, escapeJS = FALSE) { isUTF8 <- localeToCharset()[1] == "UTF-8" # *must* do \ first because it is the escape character and we do not # want to escape any escape characters that we would have added in. escapeCache <- list( "\b" = "\\b", "\t" = "\\t", "\n" = "\\n", "\v" = "\\x0b", "\f" = "\\f", "\r" = "\\r", "\\" = "\\\\", "'" = "\\'", '"' = '\\"' ) # If we have a unicode string, we have to do some special checking if (isUTF8) { # Line separator escapeCache[["\u2028"]] <- "\\u2028" # Paragraph separator escapeCache[["\u2029"]] <- "\\u2029" } if (length(x) > 1) { warning("grob name has length > 1; only using first name") x <- x[1] } chars <- substring(x, 1:nchar(x), 1:nchar(x)) n <- length(chars) # Begin CSS escaping for (i in 1:n) { charcode <- as.integer(charToRaw(chars[i])) # Some unicode char or non-printable char, just escape it if (escapeNonASCII && (length(charcode) > 1 || charcode < 32 || charcode > 126)) chars[i] <- paste0("\\", chars[i]) else { if (grepl("[\t\n\v\f:]", chars[i])) { chars[i] <- paste0("\\", paste0(as.hexmode(charcode), collapse = ""), " ") } else if (grepl("[ !\"#$%&'()*+,./;<=>?@\\[\\\\\\]^`\\{|\\}~]", chars[i], perl = TRUE)) { chars[i] <- paste0("\\", chars[i]) } else { # Do nothing, no escaping required } } } chars <- paste0(chars, collapse = "") # We shouldn't need to escape anything because RJSONIO does this # by default, but the code is here if required if (! escapeJS) return(paste0("#", chars)) chars <- substring(chars, 1:nchar(chars), 1:nchar(chars)) n <- length(chars) # Begin JS escaping for (i in 1:n) { # Would ideally do grepl([\x20-\x26\x28-\x5b\x5d-\x7e], ...) # In decimal this is: 32-38 40-91 93-126 matchVector <- c(32:38, 40:91, 93:126) charcode <- as.integer(charToRaw(chars[i])) if (length(charcode) == 1 && charcode %in% matchVector) { # Do nothing, we do not need to escape this character } else if (! is.null(escapeCache[[chars[i]]])) { chars[i] <- escapeCache[[chars[i]]] } else { chars[i] <- escapeCache[[chars[i]]] <- paste0("\\", chars[i]) } } paste0("#", paste0(chars, collapse = "")) } # Much simpler for XPath, just escape quote chars # x, a grob name to escape escapeXPath <- function(x) { # We're going to use single quotes, so escape only those. # RJSONIO uses ", so is safer to use single quotes if (length(x) > 1) { warning("grob name has length > 1; only using first name") x <- x[1] } if (grepl("'", x)) x <- gsub("'", "\\\\'", x) # Look through the entire document for all elements, # then return only the element with the matching ID. # This could possibly collide with existing IDs if # embedded within a document (e.g. HTML) but very unlikely. paste0("//*[@id='", x, "']") } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/gridsvg.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000027152�14070726231�013562� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # Functions to take a grid grob and call appropriate # functions from svg.R to produce SVG output gridToSVG <- function(...) { .Deprecated("grid.export", "gridSVG", "'gridToSVG' is deprecated. Use 'grid.export' in future.'") grid.export(...) } getDev <- function() { get("gridSVGdev", envir = .gridSVGEnv, inherits = FALSE) } setDev <- function(dev) { assign("gridSVGdev", dev, envir = .gridSVGEnv) } setDev(0) # User function grid.export <- function(name = "Rplots.svg", exportCoords = c("none", "inline", "file"), exportMappings = c("none", "inline", "file"), exportJS = c("none", "inline", "file"), res = NULL, prefix = "", addClasses = FALSE, indent = TRUE, htmlWrapper = FALSE, usePaths = c("vpPaths", "gPaths", "none", "both"), uniqueNames = TRUE, annotate = TRUE, progress = FALSE, compression = 0, strict = TRUE, rootAttrs = NULL, xmldecl = xmlDecl()) { # 'XML' can sometimes give us namespace warnings, despite producing # valid SVG. Silence any warnings that 'XML' might give us. if (! is.null(getOption("gridSVGWarnings")) && ! getOption("gridSVGWarnings")) { oldNSWarning <- options(suppressXMLNamespaceWarning = TRUE) on.exit(options(suppressXMLNamespaceWarning = oldNSWarning$suppressXMLNamespaceWarning)) } # To avoid having to ask to redraw, temporarily disable asking. old.ask <- devAskNewPage(FALSE) on.exit(devAskNewPage(old.ask), add = TRUE) # grid.force() the scene to resolve high-level grobs # to their standard components dev.hold() ; grid.force() ; dev.flush() # Important to know if we need to modify vpPaths/gPaths at all usePaths <- match.arg(usePaths) paths <- if (usePaths == "vpPaths") c(TRUE, FALSE) else if (usePaths == "gPaths") c(FALSE, TRUE) else if (usePaths == "both") rep(TRUE, 2) else # Assume "none" rep(FALSE, 2) assign("use.vpPaths", paths[1], envir = .gridSVGEnv) assign("use.gPaths", paths[2], envir = .gridSVGEnv) assign("uniqueNames", uniqueNames, envir = .gridSVGEnv) assign("prefix", prefix, envir = .gridSVGEnv) assign("addClasses", addClasses, envir = .gridSVGEnv) # Saving how to export exportCoords <- match.arg(exportCoords) exportMappings <- match.arg(exportMappings) exportJS <- match.arg(exportJS) # If we are exporting js but returning a character # vector we need to save the contents inline, because # we don't want to touch the disk if (is.null(name) || ! nzchar(name)) { if (exportCoords == "file") { exportCoords <- "inline" warning('exportCoords changed from "file" to "inline"') } if (exportMappings == "file") { exportMappings <- "inline" warning('exportMappings changed from "file" to "inline"') } if (exportJS == "file") { exportJS <- "inline" warning('exportJS changed from "file" to "inline"') } } assign("exportCoords", exportCoords, envir = .gridSVGEnv) assign("exportMappings", exportMappings, envir = .gridSVGEnv) assign("exportJS", exportJS, envir = .gridSVGEnv) # Ensure contexts work correctly assign("contextNames", character(0), envir = .gridSVGEnv) assign("contextLevels", 0, envir = .gridSVGEnv) # Ensure we're at the top level upViewport(0, recording=FALSE) rootgp <- get.gpar() rootvp <- current.viewport() roottm <- current.transform() if (progress) { assign("showProgress", TRUE, envir = .gridSVGEnv) ngrobs <- length(grid.ls(print = FALSE)$name) progressInit("grob", ngrobs) } svgdev <- openSVGDev(name, width=par("din")[1], height=par("din")[2], res = res, strict = strict, rootAttrs = rootAttrs) # Create a gTree from the current page # NOTE that set the 'gp' slot on this top-level gTree # based on ROOT vp # Use 'wrap=TRUE' to ensure correct capture of all types of 'grid' output gTree <- grid.grab(name="gridSVG", wrap=TRUE, gp=rootgp) if (anyRefsDefined()) { # Reducing only to reference definitions usageTable <- get("usageTable", envir = .gridSVGEnv) usageTable <- usageTable[usageTable$type == "ref", ] assign("usageTable", usageTable, envir = .gridSVGEnv) } else { # Emptying the usage table assign("usageTable", data.frame(name = character(0), suffix = integer(0), type = character(0), selector = character(0), xpath = character(0), stringsAsFactors = FALSE), envir = .gridSVGEnv) } # Emptying point usage table assign("pchUsageTable", matrix(c(0:127, logical(128)), ncol = 2, dimnames = list(NULL, c("pch", "used"))), envir = .gridSVGEnv) # Because the root viewport is never entered into, we need to set # the root vp coordinate information before we start entering into # other VPs currVpCoords <- list(ROOT = getCoordsInfo(rootvp, roottm, svgdev)) assign("vpCoords", currVpCoords, envir = .gridSVGEnv) # When using referenced content, the ID generated at the time of # definition may be different to the ID at draw time, see getSVGoptions() assignRefIDs() # Convert gTree to SVG gridToDev(gTree, svgdev) # Flush out any referenced definitions so that grobs can use them flushDefinitions(svgdev) svgroot <- devClose(svgdev) if (progress) { progressClose() assign("showProgress", FALSE, envir = .gridSVGEnv) } # Adding in JS if necessary, always write utils *last*. # Not strictly necessary but may avoid potential issues in JS. # NOTE that we call in REVERSE order because each one is added # as FIRST child of the root svg node jsutils <- svgJSUtils(exportJS, name, svgroot) mappings <- svgMappings(exportMappings, name, svgroot) coords <- svgCoords(exportCoords, name, svgroot) # If we're annotating output with gridSVG call info if (annotate) { # Realise true values for some arguments if (is.null(name)) name <- "" if (is.null(res)) res <- round(par("cra")[1] / par("cin")[1], 2) # Ignore annotate in this list, because it will be implied # Also ignoring the XML declaration, we can see it in the # output directly. Ignoring compression because it is also # implied and does not affect output. Progress is also not # useful. callAttrs <- list( name = name, exportCoords = exportCoords, exportMappings = exportMappings, exportJS = exportJS, res = res, prefix = prefix, addClasses = addClasses, indent = indent, htmlWrapper = htmlWrapper, usePaths = usePaths, uniqueNames = uniqueNames ) svgAnnotate(svgroot, callAttrs) } # In an on-screen device, we can be left with a blank device # so refresh just to ensure we can see everything. Also happens # with devices like png and pdf so just force a refresh. # Sometimes display lists can be large, flush all drawing at once # to speed up redrawing dev.hold() ; grid.refresh() ; dev.flush() result <- list(svg = svgroot, coords = coords, mappings = mappings, utils = jsutils) if (! testUniqueMappings(svgroot)) warning("Not all element IDs are unique. Consider running 'grid.export' with 'uniqueNames = TRUE'.") # Return SVG list when an inadequate filename is supplied if (is.null(name) || ! nzchar(name)) return(result) doctxt <- saveXML(svgroot, indent = indent) if (! is.null(xmldecl)) doctxt <- paste0(xmldecl, doctxt) # Now save the SVG to a file, optionally a compressed file outcon <- if (compression > 0) gzfile(name, "w") else file(name, "w") cat(doctxt, file = outcon) close(outcon) # Write an HTML wrapper for this if (htmlWrapper) htmlFile(name, svgdev@dev) # Return result invisibly invisible(result) } gridSVG.newpage <- function(wipeRefs = TRUE, recording = TRUE) { if (wipeRefs) { assign("refDefinitions", list(), envir = .gridSVGEnv) assign("refUsageTable", data.frame(label = character(0), used = logical(0), stringsAsFactors = FALSE), envir = .gridSVGEnv) assign("usageTable", data.frame(name = character(0), suffix = integer(0), type = character(0), selector = character(0), xpath = character(0), stringsAsFactors = FALSE), envir = .gridSVGEnv) } grid.newpage(recording = recording) } gridsvg <- function(name = "Rplots.svg", exportCoords = c("none", "inline", "file"), exportMappings = c("none", "inline", "file"), exportJS = c("none", "inline", "file"), res = NULL, prefix = "", addClasses = FALSE, indent = TRUE, htmlWrapper = FALSE, usePaths = c("vpPaths", "gPaths", "none", "both"), uniqueNames = TRUE, annotate = TRUE, progress = FALSE, compression = 0, strict = TRUE, rootAttrs = NULL, xmldecl = xmlDecl(), ...) { # Avoid multiple gridSVG devices (because referenced content can # have side effects across devices) if (getDev() != 0) stop("Only one 'gridsvg' device may be used at a time") argnames <- setdiff(names(formals()), '...') gridsvg.args <- sapply(argnames, get, environment(), simplify = FALSE) dev.args <- list(...) dev.args$file <- NULL # remove file arg dev.args <- c(list(file = NULL), dev.args) # readd do.call("pdf", dev.args) gridSVGArgs <- if (exists("gridSVGArgs", envir = .gridSVGEnv)) get("gridSVGArgs", envir = .gridSVGEnv) else list() gridSVGArgs <- gridsvg.args assign("gridSVGArgs", gridSVGArgs, envir = .gridSVGEnv) ## Record which device is the gridSVG device setDev(dev.cur()) } dev.off <- function(which = dev.cur()) { if (which == getDev()) { # If there's nothing on the display list then nothing # can be drawn if (! length(grid.ls(print = FALSE)$name)) { grDevices::dev.off(which) warning("No grid image was drawn so no SVG was created") setDev(0) return(invisible()) } gridsvg.args <- get("gridSVGArgs", envir = .gridSVGEnv) name <- gridsvg.args$name image <- do.call("grid.export", gridsvg.args) grDevices::dev.off(which) setDev(0) if (is.null(name) || ! nzchar(name)) image else invisible(image) } else { grDevices::dev.off(which) } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/devsvg.R����������������������������������������������������������������������������������0000654�0001762�0000144�00000054720�13165014206�013410� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # Functions to create an SVG graphics device object, complete with # "methods" for performing all necessary graphical operations # This is designed to foreshadow the time when graphics devices # in R (or at least in grid) are R objects and graphics functions # include the device as an argument (i.e., no longer have # the notion of graphics always going to the "current device") # This will not be called in this way yet (instead, I will just # be running down the grid display list and calling appropriate # methods from that, BUT I thought it was worth designing for the # future anyway. # In another forward-looking move, I will create the device class # and methods for it using S4 methods ################# # Utility functions ################# # Any non-grid parameters is let through untouched # BUT code later in svg.R will complain about things that are # not SVG parameters # NOTE that 'cex'/'lex' have been incorporated into 'fontsize'/'lwd' # and removed by this point devParNameToSVGStyleName <- function(name) { switch(name, col="stroke", colAlpha="stroke-opacity", fill="fill", fillAlpha="fill-opacity", fontweight="font-weight", fontfamily="font-family", fontstyle="font-style", fontsize="font-size", alpha="opacity", lty="stroke-dasharray", lwd="stroke-width", lineend="stroke-linecap", linejoin="stroke-linejoin", linemitre="stroke-miterlimit", name) } # R lwd is in points, pixels or 1/96 inches # However, most (perhaps all?) devices use 1/96 for their # definition of an 'lwd', so use that. devLwdToSVG <- function(lwd, lty, dev) { svglwd <- round(lwd/96 * dev@res, 2) if (!is.null(lty)) { blankLty <- lty == "blank" svglwd[blankLty] <- 0 } svglwd } # An R lty has to become an SVG stroke-dasharray # This is going to be imperfect (to say the least) devLtyToSVG <- function(lty, lwd) { ## If necessary, convert numeric lty to char if (is.numeric(lty)) { lty[lty == 0] <- "blank" lty[lty == 1] <- "solid" lty[lty == 2] <- "dashed" lty[lty == 3] <- "dotted" lty[lty == 4] <- "dotdash" lty[lty == 5] <- "longdash" lty[lty == 6] <- "twodash" } # Convert lty to numeric vec numlty <- lapply(lty, function(x) { switch(x, blank=, solid=0, ## These numbers taken from ?par dashed=c(4, 4), dotted=c(1, 3), dotdash=c(1, 3, 4, 3), longdash=c(7, 3), twodash=c(2, 2, 6, 2), ## Otherwise we're a hex string as.numeric(as.hexmode(strsplit(lty, "")[[1]]))) }) # Scale by lwd scaledlty <- mapply(function(x, y) x*y, numlty, lwd, SIMPLIFY=FALSE) # Convert to SVG stroke-dasharray string sapply(scaledlty, function(x) { paste(ifelse(x == 0, "none", round(x, 2)), collapse=",") }) } devColToSVG <- function(col) { zeroCol <- is.numeric(col) & col == 0 col[zeroCol] <- "transparent" svgCol <- paste("rgb(", apply(col2rgb(col), 2, paste, collapse=","), ")", sep="") ## Handle "transparent" as a special case transCol <- col == "transparent" svgCol[transCol] <- "none" svgCol } devColAlphaToSVG <- function(colAlpha) { round(colAlpha/255, 2) } devFontSizeToSVG <- function(fontsize, dev) { round(fontsize/72 * dev@res, 2) } devLineJoinToSVG <- function(linejoin, dev) { # Only need to change spelling of mitre, SVG takes american form ifelse(linejoin == "mitre", "miter", linejoin) } devFontFaceToSVG <- function(fontface) { # CSS uses two different properties to configure the appearance of a font # Setting defaults to CSS defaults N <- length(fontface) fontWeightCSS <- rep("normal", N) fontStyleCSS <- rep("normal", N) if (is.numeric(fontface)) { ffbold <- fontface == 2 ffitalic <- fontface == 3 ffbolditalic <- fontface == 4 } if (is.character(fontface)) { ffbold <- fontface == "bold" ffitalic <- fontface == "italic" ffbolditalic <- fontface == "bold.italic" } fontWeightCSS[ffbold] <- "bold" fontStyleCSS[ffitalic] <- "italic" fontWeightCSS[ffbolditalic] <- "bold" fontStyleCSS[ffbolditalic] <- "italic" list(fontweight=fontWeightCSS, fontstyle=fontStyleCSS) } getSVGFonts <- function() { get("gridSVG.fonts", envir = .gridSVGEnv) } setSVGFonts <- function(fontStacks) { if (! all(names(fontStacks) == c("sans", "serif", "mono"))) stop("Font settings must have fonts available for 'sans', 'serif' and 'mono'.") # Need to ensure that basic font fallbacks are available and # are placed at the end of each of the font stacks. if (! "sans-serif" %in% fontStacks$sans) { fontStacks$sans <- c(fontStacks$sans, "sans-serif") } else if (tail(fontStacks$sans, n = 1) != "sans-serif") { ind <- which(fontStacks$sans == "sans-serif") cleanedSans <- fontStacks$sans[-ind] fontStacks$sans <- c(cleanedSans, "sans-serif") } if (! "serif" %in% fontStacks$serif) { fontStacks$serif <- c(fontStacks$serif, "serif") } else if (tail(fontStacks$serif, n = 1) != "serif") { ind <- which(fontStacks$serif == "serif") cleanedSerif <- fontStacks$serif[-ind] fontStacks$serif <- c(cleanedSerif, "serif") } if (! "monospace" %in% fontStacks$mono) { fontStacks$mono <- c(fontStacks$mono, "monospace") } else if (tail(fontStacks$mono, n = 1) != "monospace") { ind <- which(fontStacks$mono == "monospace") cleanedMono <- fontStacks$mono[-ind] fontStacks$mono <- c(cleanedMono, "monospace") } assign("gridSVG.fonts", fontStacks, envir = .gridSVGEnv) } # Setting default font stacks sansFontStack <- c("Helvetica", "Arial", "FreeSans", "Liberation Sans", "Nimbus Sans L", "sans-serif") serifFontStack <- c("Times", "Times New Roman", "Liberation Serif", "Nimbus Roman No9 L Regular", "serif") monoFontStack <- c("Courier", "Courier New", "Nimbus Mono L", "monospace") setSVGFonts(list(sans = sansFontStack, serif = serifFontStack, mono = monoFontStack)) fontStackFromFontFamily <- function(fontfamily, currentFonts) { N <- length(fontfamily) stack <- rep("sans", N) sansfamily <- fontfamily %in% c(currentFonts$sans, "sans") seriffamily <- fontfamily %in% c(currentFonts$serif, "serif") monofamily <- fontfamily %in% c(currentFonts$mono, "mono") stack[seriffamily] <- "serif" stack[monofamily] <- "mono" stack[!(sansfamily | seriffamily | monofamily)] <- "unknown" stack } devFontFamilyToSVG <- function(fontfamily) { currentFonts <- getSVGFonts() stacknames <- fontStackFromFontFamily(fontfamily, currentFonts) knownFont <- stacknames != "unknown" blankFont <- nchar(fontfamily) == 0 fontstacks <- vector("list", length(fontfamily)) fontstacks[knownFont] <- currentFonts[stacknames[knownFont]] ## Assume font exists, but also assume sans-serif fallback if (any(!knownFont & !blankFont)) { fontstacks[!knownFont & !blankFont] <- list(c(fontfamily[!knownFont & !blankFont], currentFonts$sans)) } ## Assuming a sans-serif font if (any(!knownFont & blankFont)) { fontstacks[!knownFont & blankFont] <- list(currentFonts$sans) } # Formatting the font stack for CSS fontStackCSS <- sapply(fontstacks, paste, collapse=', ') # Returning the font stack fontStackCSS } devParToSVGPar <- function(name, par, dev) { if (is.null(par)) "none" else { ifelse(is.na(par), "none", switch(name, col=devColToSVG(par), colAlpha=devColAlphaToSVG(par), fill=devColToSVG(par), fillAlpha=devColAlphaToSVG(par), fontsize=devFontSizeToSVG(par, dev), fontfamily=devFontFamilyToSVG(par), linejoin=devLineJoinToSVG(par, dev), ## By default just pass through the actual value ## e.g., lty has already been converted at this point par)) } } devParToSVGStyle <- function(gp, dev) { if (is.null(gp)) result <- svgStyle() else { result <- list() # convert "cex" into "fontsize" if ("cex" %in% names(gp)) { if ("fontsize" %in% names(gp)) gp$fontsize <- (gp$fontsize * gp$cex) else gp$fontsize <- (get.gpar("fontsize")[[1]] * gp$cex) gp$cex <- NULL } # Do the same for "lex" if ("lex" %in% names(gp)) { if ("lwd" %in% names(gp)) gp$lwd <- (gp$lwd * gp$lex) else gp$lwd <- (get.gpar("lwd")[[1]] * gp$lex) gp$lex <- NULL } # Just remove "lineheight" (this has already been incorporated # into text object information by this point) # Remove it so that it is not exported as SVG attribute gp$lineheight <- NULL # Scale lwd amd zero lwd if lty is "blank" if ("lwd" %in% names(gp)) { if ("lty" %in% names(gp)) { gp$lwd <- devLwdToSVG(gp$lwd, gp$lty, dev) } else { gp$lwd <- devLwdToSVG(gp$lwd, NULL, dev) } } # Scale lty by lwd if ("lty" %in% names(gp)) { if ("lwd" %in% names(gp)) { gp$lty <- devLtyToSVG(gp$lty, gp$lwd) } else { gp$lty <- devLtyToSVG(gp$lty, 1) } } # Font is an alias for fontface, set to fontface if ("font" %in% names(gp)) { gp$fontface <- gp$font gp$font <- NULL } # Split fontface into fontweight and fontstyle if ("fontface" %in% names(gp)) { svgFont <- devFontFaceToSVG(gp$fontface) gp$fontweight <- svgFont$fontweight gp$fontstyle <- svgFont$fontstyle gp$fontface <- NULL } for (i in names(gp)) if (!is.na(devParNameToSVGStyleName(i))) result[[devParNameToSVGStyleName(i)]] <- devParToSVGPar(i, gp[[i]], dev) } result } ################# # SVG Device Stuff ################# setClass("svgDevice", representation("graphicsDevice", res="numeric", attrs="list", links="character", show="character", # Object created by svgDevice() in svg.R # has no S4 class yet dev="ANY")) setMethod("inchToDevX", signature(device="svgDevice"), function(x, device) { x * device@res }) setMethod("inchToDevY", signature(device="svgDevice"), function(x, device) { x * device@res }) setMethod("devArrow", signature(device="svgDevice"), function(arrow, gp, device) { # Angle is specified for the arrowhead in degrees, need radians ratAngle <- (pi / 180) * arrow$angle # We know the length, it is the hypotenuse, need to find the # length of the opposite line for the entire arrowhead, not # just one half midpoint <- sin(ratAngle) * arrow$length arrowWidth <- midpoint * 2 xmult <- cos(ratAngle) arrowX <- xmult * arrow$length xs <- unit.c(unit(0, "inches"), arrowX, unit(0, "inches")) ys <- unit.c(unit(0, "inches"), midpoint, arrowWidth) x <- cx(xs, device) y <- cy(ys, device) svgMarker(x, y, arrow$type, arrow$ends, sign(xmult), arrow$name, devParToSVGStyle(gp, device), device@dev) }) setMethod("devLines", signature(device="svgDevice"), function(lines, gp, device) { svgLines(lines$x, lines$y, lines$name, lines$arrow, device@attrs, device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devPolygon", signature(device="svgDevice"), function(polygon, gp, device) { svgPolygon(polygon$x, polygon$y, polygon$name, device@attrs, device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devPath", signature(device="svgDevice"), function(path, gp, device) { svgPath(path$x, path$y, path$rule, path$name, device@attrs, device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devRaster", signature(device="svgDevice"), function(raster, gp, device) { svgRaster(raster$x, raster$y, raster$width, raster$height, raster$angle, raster$datauri, raster$name, raster$just, raster$vjust, raster$hjust, listToSVGAttrib(raster$attributes), device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devRect", signature(device="svgDevice"), function(rect, gp, device) { svgRectString(rect$x, rect$y, rect$width, rect$height, rect$angle, rect$name, device@attrs, device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devText", signature(device="svgDevice"), function(text, gp, device) { # SVG text will use fill, but fill has already been # set to col back in primToDev.text() in griddev.R svgText(text$x, text$y, text$text, text$hjust, text$vjust, text$rot, text$width, text$height, text$angle, text$ascent, text$descent, text$lineheight, text$charheight, text$fontheight, text$fontfamily, text$fontface, text$name, device@attrs, device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devCircle", signature(device="svgDevice"), function(circle, gp, device) { svgCircleString(circle$x, circle$y, circle$r, circle$name, device@attrs, device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devStartElement", signature(device="svgDevice"), function(element, gp, device) { # Ignore gp, complicates output svgStartElement(id = element$id, classes = element$classes, element = element$name, attrs = element$attrs, namespace = element$namespace, namespaceDefinitions = element$namespaceDefinitions, attributes = device@attrs, links = device@links, show = device@show, svgdev = device@dev) }) setMethod("devEndElement", signature(device="svgDevice"), function(name, device) { svgEndElement(name, device@links, device@dev) }) setMethod("devTextNode", signature(device="svgDevice"), function(text, device) { svgTextNode(text$text, device@dev) }) setMethod("devStartClip", signature(device="svgDevice"), function(clip, gp, device) { svgClipPath(clip$name, clip$x, clip$y, clip$width, clip$height, clip$angle, device@dev) # Because of the fact that we never stop clipping until # we pop our current viewport, we need to store information # on how many times we have clipped. # This allows us to traverse back up the appropriate number # of SVG s. cl <- get("contextLevels", envir = .gridSVGEnv) cl[length(cl)] <- cl[length(cl)] + 1 assign("contextLevels", cl, envir = .gridSVGEnv) # Can hard-code 'clip' and 'coords' because we're always clipping # but we're not a viewport. # 'style' is always going to be NULL too. svgStartGroup(clip$name, clip=TRUE, attributes=device@attrs, links=device@links, show=device@show, style=devParToSVGStyle(gp, device), coords = NULL, classes = clip$classes, svgdev=device@dev) }) setMethod("devStartClipPath", signature(device="svgDevice"), function(clippath, gp, device) { svgStartGrobClipPath(clippath$name, device@dev) }) setMethod("devEndClipPath", signature(device="svgDevice"), function(clippath, gp, device) { svgEndGrobClipPath(device@dev) }) setMethod("devStartClipPathGroup", signature(device="svgDevice"), function(clippath, gp, device) { svgStartGrobClipPathGroup(clippath$name, clippath$cp, clippath$classes, device@dev) # Because of the fact that we never stop clipping until # we pop our current viewport, we need to store information # on how many times we have clipped. # This allows us to traverse back up the appropriate number # of SVG s. cl <- get("contextLevels", envir = .gridSVGEnv) cl[length(cl)] <- cl[length(cl)] + 1 assign("contextLevels", cl, envir = .gridSVGEnv) # Also note the ID because we're pushing a context, makes it # easier to locate later assign("contextNames", c(get("contextNames", envir = .gridSVGEnv), clippath$name), envir = .gridSVGEnv) }) setMethod("devStartMask", signature(device="svgDevice"), function(mask, gp, device) { svgStartMask(mask$name, mask$x, mask$y, mask$width, mask$height, device@dev) }) setMethod("devEndMask", signature(device="svgDevice"), function(mask, gp, device) { svgEndMask(device@dev) }) setMethod("devStartMaskGroup", signature(device="svgDevice"), function(mask, gp, device) { svgStartMaskGroup(mask$name, mask$mask, mask$classes, device@dev) # Because of the fact that we never stop clipping until # we pop our current viewport, we need to store information # on how many times we have clipped. # This allows us to traverse back up the appropriate number # of SVG s. cl <- get("contextLevels", envir = .gridSVGEnv) cl[length(cl)] <- cl[length(cl)] + 1 assign("contextLevels", cl, envir = .gridSVGEnv) # Also note the ID because we're pushing a context, makes it # easier to locate later assign("contextNames", c(get("contextNames", envir = .gridSVGEnv), mask$name), envir = .gridSVGEnv) }) setMethod("devStartGroup", signature(device="svgDevice"), function(group, gp, device) { clip <- FALSE if (! is.null(group$clip)) { if (group$clip) { clip <- TRUE svgClipPath(group$name, group$vpx, group$vpy, group$vpw, group$vph, group$angle, device@dev) } } # If we're starting a VP, then allow for "contexts" to be # added to children of this VP. A context is a clip path # or mask. Coords are only present via VPs. if (! is.null(group$coords)) { assign("contextLevels", c(get("contextLevels", envir = .gridSVGEnv), 0), envir = .gridSVGEnv) } svgStartGroup(group$name, clip=clip, attributes=device@attrs, links=device@links, show=device@show, style=devParToSVGStyle(gp, device), coords = group$coords, classes = group$classes, svgdev=device@dev) }) setMethod("devEndGroup", signature(device="svgDevice"), function(name, vp, device) { svgEndGroup(name, device@links, vp, device@dev) }) setMethod("devStartSymbol", signature(device="svgDevice"), function(pch, device) { svgStartSymbol(pch, device@dev) }) setMethod("devPoint", signature(device="svgDevice"), function(pch, device) { svgPoint(pch, device@dev) }) setMethod("devEndSymbol", signature(device="svgDevice"), function(device) { svgEndSymbol(device@dev) }) setMethod("devUseSymbol", signature(device="svgDevice"), function(point, gp, device) { svgUseSymbolString(point$name, point$x, point$y, point$size, point$pch, point$angle, device@attrs, device@links, device@show, devParToSVGStyle(gp, device), device@dev) }) setMethod("devClose", signature(device="svgDevice"), function(device) { svgClose(device@dev) }) ################# # User Functions ################# openSVGDev <- function(name="Rplots.svg", width=6, height=6, res=NULL, strict=TRUE, rootAttrs=NULL) { if (is.null(res)) res <- par("cra")[1]/par("cin")[1] # par("cra")[2]/par("cin")[2]*height)) new("svgDevice", width=width, height=height, res=res, dev=svgOpen(res*width, res*height, strict, rootAttrs)) } ������������������������������������������������gridSVG/R/attrib.R����������������������������������������������������������������������������������0000654�0001762�0000144�00000007771�12616256403�013412� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # Add arbitrary SVG attributes to a grob # This works by ... # 1. Enhancing a normal "grob" to make a "garnished.grob" # by adding an 'attributes' component # 2. Intercepting primToDev() calls (special method for "garnished.grob"s) # and setting an 'attrs' slot in the SVG device object. # The vectors of attribute values are given names # using the same name-generating function as is used in # normal primToDev() methods, subGrobName(). # THEN the normal primToDev() method is called # (which will create SVG code). # 3. svg*() functions (like svgRect()) are sent the 'attrs' slot # from the SVG device. # These functions look in the attributes that they are given # and pull out the values where the 'name' corrsponds to # the 'id' of the element that they are drawing. # The idea is that, if only ONE attribute value is specified, then the # attribute value is given the name of the grob, so it will get picked # up by the devStartGroup() call and the attribute will be set on the # overall element. # Otherwise, the attribute values # are named using subGrobName() so that they will get picked up by # calls like devRect() and each individual SVG element will get the # attribute (rather than the overall element). garnishGrob <- function(x, ..., group=TRUE) { cl <- class(x) # Should check that attributes are valid # Will need to be generic check with per-grob-type versions if (group) { x$groupAttributes <- c(x$groupAttributes, list(...)) } else { x$attributes <- c(x$attributes, list(...)) } class(x) <- unique(c("garnished.grob", cl)) x } grid.garnish <- function(path, ..., group=TRUE, redraw = FALSE, strict=FALSE, grep=FALSE, global=FALSE) { grobApply(path, function(path) { grid.set(path, garnishGrob(grid.get(path), ..., group=group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } garnish <- function(x, ...) { UseMethod("garnish") } # This is intended to handle all basic graphical primitives garnish.grob <- function(x, ...) { x$name <- getID(x$name, "grob", FALSE) c(lapply(x$attributes, function(attr) { n <- length(attr) if (is.null(names(attr))) names(attr) <- subGrobName(x$name, 1:n) attr }), lapply(x$groupAttributes, function(attr, groupName) { names(attr) <- x$name attr })) } # A hopefully useful default for gTrees garnish.gTree <- function(x, ...) { x$name <- getID(x$name, "grob", FALSE) c(lapply(x$attributes, function(attr) { n <- length(attr) if (is.null(names(attr))) names(attr) <- sapply((x$childrenOrder)[1:n], function(x) getID(x, "grob", FALSE)) attr }), lapply(x$groupAttributes, function(attr, groupName) { names(attr) <- x$name attr })) } # NOTE that this has to be a primToDev() method # NOT a grobToDev() method # OTHERWISE, viewports will not be set up correctly primToDev.garnished.grob <- function(x, dev) { dev@attrs <- garnish(x) NextMethod() } grobApply <- function(path, FUN, ..., strict = FALSE, grep = FALSE, global = FALSE) { paths <- grid.grep(path, strict=strict, grep=grep, global=global) if (length(paths)) { if (global) { lapply(paths, FUN, ...) } else { FUN(paths, ...) } } } # Ensure the attributes are retained on a forced grob forceGrob.garnished.grob <- function(x) { y <- NextMethod() if (inherits(y, "forcedgrob")) { y$attributes <- x$attributes y$groupAttributes <- x$groupAttributes class(y) <- unique(c("garnished.grob", class(y))) } y } �������gridSVG/R/animate.R���������������������������������������������������������������������������������0000654�0001762�0000144�00000167051�14402217461�013535� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ####################### # "animValue" stuff ####################### # An animValue is a vector PLUS a timeid PLUS an id animValue <- function(x, timeid=NULL, id=NULL) { if (!is.atomic(x)) stop("'x' must be a atomic") if (!is.null(timeid)) timeid <- rep(timeid, length.out=length(x)) if (!is.null(id)) id <- rep(id, length.out=length(x)) tu <- list(values=x, timeid=timeid, id=id) class(tu) <- "animValue" tu } is.animValue <- function(x) inherits(x, "animValue") as.animValue <- function(x, ...) { UseMethod("as.animValue") } as.animValue.animValue <- function(x, ...) x as.animValue.numeric <- function(x, ...) { animValue(x) } as.animValue.character <- function(x, ...) { animValue(x) } # 'multVal' controls whether columns of the matrix are used as # 'timeid' or 'id' as.animValue.matrix <- function(x, multVal=FALSE, ...) { if (multVal) { animValue(x, timeid=rep(1:ncol(x), each=nrow(x))) } else { animValue(x, id=rep(1:ncol(x), each=nrow(x))) } } as.animValue.list<- function(x, multVal=FALSE, ...) { if (!all(sapply(x, is.atomic))) stop("All components of list must be atomic") if (multVal) { animValue(unlist(x), timeid=rep(1:length(x), sapply(x, length))) } else { animValue(unlist(x), id=rep(1:length(x), sapply(x, length))) } } listFromAnimValue <- function(x) { if (is.null(x$id)) { if (is.null(x$timeid)) { n <- length(x$values) animValueList <- as.list(x$values) } else { times <- unique(x$timeid) n <- length(times) animValueList <- split(x$values, x$timeid) } names(animValueList) <- paste("t", 1:n, sep="") } else { shapes <- unique(x$id) ns <- length(shapes) animValueList <- vector("list", ns) for (i in 1:ns) { animValueList[[i]] <- listFromAnimValue(animValue(x$values[x$id == i], x$timeid[x$id == i])) } names(animValueList) <- paste("id", 1:ns, sep="") } animValueList } print.animValue <- function(x, ...) { # Generate list from animValue and then print the list print(listFromAnimValue(x)) } ####################### # "animUnit" stuff # An animUnit is a unit PLUS a timeid PLUS an id # The timeid breaks the values in the unit into different time # periods, and the id breaks the values into different shapes animUnit <- function(x, timeid=NULL, id=NULL) { if (!is.unit(x)) stop("'x' must be a unit object") if (!is.null(timeid)) timeid <- rep(timeid, length.out=length(x)) if (!is.null(id)) id <- rep(id, length.out=length(x)) tu <- list(values=x, timeid=timeid, id=id) class(tu) <- "animUnit" tu } is.animUnit <- function(x) inherits(x, "animUnit") as.animUnit <- function(x, ...) { UseMethod("as.animUnit") } as.animUnit.animUnit <- function(x, ...) x as.animUnit.numeric <- function(x, unit=NULL, ...) { if (is.null(unit)) stop("Require 'unit' to convert numeric vector") animUnit(unit(x, unit)) } as.animUnit.unit <- function(x, ...) { animUnit(x) } # 'multVal' controls whether columns of the matrix are used as # 'timeid' or 'id' as.animUnit.matrix <- function(x, unit=NULL, multVal=FALSE, ...) { if (is.null(unit)) stop("Require 'unit' to convert matrix") if (multVal) { animUnit(unit(x, unit), timeid=rep(1:ncol(x), each=nrow(x))) } else { animUnit(unit(x, unit), id=rep(1:ncol(x), each=nrow(x))) } } as.animUnit.list<- function(x, multVal=FALSE, ...) { if (!all(sapply(x, is.unit))) stop("All components of list must be units") if (multVal) { animUnit(do.call("unit.c", x), timeid=rep(1:length(x), sapply(x, length))) } else { animUnit(do.call("unit.c", x), id=rep(1:length(x), sapply(x, length))) } } listFromAnimUnit <- function(x) { if (is.null(x$id)) { if (is.null(x$timeid)) { n <- length(x$values) animUnitList <- vector("list", n) for (i in 1:n) animUnitList[[i]] <- x$values[i] } else { times <- unique(x$timeid) n <- length(times) animUnitList <- vector("list", n) for (i in 1:n) animUnitList[[i]] <- x$values[x$timeid == i] } names(animUnitList) <- paste("t", 1:n, sep="") } else { shapes <- unique(x$id) ns <- length(shapes) animUnitList <- vector("list", ns) for (i in 1:ns) { animUnitList[[i]] <- listFromAnimUnit(animUnit(x$values[x$id == i], x$timeid[x$id == i])) } names(animUnitList) <- paste("id", 1:ns, sep="") } animUnitList } print.animUnit <- function(x, ...) { # Generate list from animUnit and then print the list print(listFromAnimUnit(x)) } # duration says how many SECONDS the animation lasts for # id indicates the identity of multiple animated values # (i.e., allows a vector of animated values) # If "auto" then it depends on the number and size # of the elements being animated. If there is # only one element, it is NULL. # rep says how many times to repeat the animation # (TRUE means indefinitely; FALSE means once) # revert says whether to revert to the start value of the # animation upon completion autoid <- function(id) { if (!is.numeric(id)) if (id == "auto") TRUE else stop("Invalid id") else FALSE } animationSet <- function(..., duration=1, rep=FALSE, revert=FALSE, begin=0, interp="linear") { animations <- list(...) if (is.null(animations[[1]])) stop("need argument to animate") list(animations=animations, begin=begin, interp=interp, duration=duration, rep=rep, revert=revert) } animateGrob <- function(grob, ..., duration=1, rep=FALSE, revert=FALSE, begin=0, interpolate="linear", group=FALSE) { if (!interpolate %in% c("linear", "discrete")) stop("Invalid interpolation method") as <- animationSet(..., duration=duration, rep=rep, revert=revert, begin=begin, interp=interpolate) cl <- class(grob) if (group) { grob$groupAnimationSets <- c(grob$groupAnimationSets, list(as)) } else { grob$animationSets <- c(grob$animationSets, list(as)) } class(grob) <- unique(c("animated.grob", cl)) grob } grid.animate <- function(path, ..., group=FALSE, redraw = FALSE, strict=FALSE, grep=FALSE, global=FALSE) { grobApply(path, function(path) { grid.set(path, animateGrob(grid.get(path), ..., group=group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } applyAnimation <- function(x, ...) { UseMethod("applyAnimation") } ############################ # Convert to animValue then take value(s) for shape "i" # This function is designed for animValues where timeid is NULL # so that each time period has only ONE value # RETURN a VECTOR ithValue <- function(animValues, i) { av <- as.animValue(animValues) if (!is.null(av$timeid)) stop("Expecting only one value per time point") if (is.null(av$id)) av$values else av$values[av$id == i] } ## If the API is available, extract unit "unit" the right way unitType <- function(x) { if (getRversion() >= "4.0.0") { ## Call this way to avoid R CMD check errors in R < 4.0.0 about ## grid::unitType() not being exported unitType <- get("unitType", envir=asNamespace("grid")) unitType(x) } else { attr(x, "unit") } } # Convert to animUnit then take unit(s) for shape "i" # This function is designed for animUnits where timeid is NULL # so that each time period has only ONE value # RETURN a UNIT ithUnit <- function(animValues, origValue, i) { au <- as.animUnit(animValues, # Only take the first "unit" value unit=unitType(origValue)[1]) if (!is.null(au$timeid)) stop("Expecting only one value per time point") if (is.null(au$id)) au$values else au$values[au$id == i] } # Convert to animValue then take value(s) for shape "i" # This function is designed for animValues where there is a timeid # so that each time period has MULTIPLE values # RETURN an ANIMVALUE ithAnimValue <- function(animValues, i) { av <- as.animValue(animValues, multVal=TRUE) if (is.null(av$timeid)) stop("Expecting multiple values per time point") if (is.null(av$id)) av else animValue(av$values[av$id == i], av$timeid[av$id == i]) } # Convert to animUnit then take unit(s) for shape "i" # This function is designed for animUnit where there is a timeid # so that each time period has MULTIPLE values # RETURN an ANIMUNIT ithAnimUnit <- function(animValues, origValue, i) { au <- as.animUnit(animValues, # Only take the first "unit" value unit=unitType(origValue)[1], multVal=TRUE) if (is.null(au$timeid)) stop("Expecting multiple values per time point") if (is.null(au$id)) au else animUnit(au$values[au$id == i], au$timeid[au$id == i]) } ###################### # applyAnimation methods # # There is one of these for each primitive, but they all have similar # structure: # if (group) # animate the element # else # some sets of values (e.g., x/y) are animated together # so bail out if this combination has already been animated # recycle animation values to full length # for each shape ... # select anim values # animate sets of values # animate anything else ###################### ###################### # FIXME: # When animating some cobination x/y/width/height/size AT THE SAME TIME # the code below only makes sense if the number of time periods # is the same for all of x/y/width/height/size (that are being animated) ###################### applyAnimation.rect <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { # We may be dealing with multiple rects that need animating n <- max(length(x$x), length(x$y), length(x$width), length(x$height)) # Rep the original x/y/width/height out to be the same length x$x <- rep(x$x, length.out=n) x$y <- rep(x$y, length.out=n) x$width <- rep(x$width, length.out=n) x$height <- rep(x$height, length.out=n) # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) angle <- current.rotation() for (i in 1:n) { subName <- subGrobName(x$name, i) # If x AND y change, need to transform together # If width/height changes, have to animate x/y as well # because SVG does not have justification if ("x" %in% names(animSet$animations)) xi <- ithUnit(animSet$animations$x, x$x, i) else xi <- x$x[i] if ("y" %in% names(animSet$animations)) yi <- ithUnit(animSet$animations$y, x$y, i) else yi <- x$y[i] if ("width" %in% names(animSet$animations)) widthi <- ithUnit(animSet$animations$width, x$width, i) else widthi <- x$width[i] if ("height" %in% names(animSet$animations)) heighti <- ithUnit(animSet$animations$height, x$height, i) else heighti <- x$height[i] lb <- leftbottom(xi, yi, widthi, heighti, x$just, x$hjust, x$vjust, dev) switch(animation, x={ svgAnimateXYWH("x", cx(lb$x, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) if (angle != 0) { if (!("y" %in% names(animSet$animations))) { svgAnimateXYWH("y", cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) } }, y={ svgAnimateXYWH("y", cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) if (angle != 0) { if (!("x" %in% names(animSet$animations))) { svgAnimateXYWH("x", cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) } }, width={ # If x is also animated, this has already been handled above if (!("x" %in% names(animSet$animations))) { svgAnimateXYWH("x", cx(lb$x, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } if (angle != 0) { if (!("y" %in% names(animSet$animations))) { svgAnimateXYWH("y", cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) } dim <- dimToInches(ithUnit(animSet$animations$width, x$width, i), x$height[i], dev) svgAnimateXYWH("width", cw(dim$w, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }, height={ if (!("y" %in% names(animSet$animations))) { svgAnimateXYWH("y", cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } if (angle != 0) { if (!("x" %in% names(animSet$animations))) { svgAnimateXYWH("x", cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) } dim <- dimToInches(x$width[i], ithUnit(animSet$animations$height, x$height, i), dev) svgAnimateXYWH("height", ch(dim$h, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }, # Any other attribute { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }) } } } applyAnimation.circle <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { # We may be dealing with multiple circles that need animating n <- max(length(x$x), length(x$y), length(x$r)) # Rep the original x/y/width/height out to be the same length x$x <- rep(x$x, length.out=n) x$y <- rep(x$y, length.out=n) x$r <- rep(x$r, length.out=n) # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) # Because grobs can produce multiple elements, if animation is to # occur on a grob it is assumed to occur on all elements, but # elements may simply have their properties assigned to the same # value multiple times. # # Also note that when casting to a matrix, units lose their "unit" # attribute, we have to set this to the same unit as the grob # attribute that is being animated, for this reason, attributes should # be in the same unit prior to calling grid.animate() for (i in 1:n) { subName <- subGrobName(x$name, i) if ("x" %in% names(animSet$animations)) xi <- ithUnit(animSet$animations$x, x$x, i) else xi <- x$x[i] if ("y" %in% names(animSet$animations)) yi <- ithUnit(animSet$animations$y, x$y, i) else yi <- x$y[i] switch(animation, x={ loc <- locToInches(xi, yi, dev) svgAnimateXYWH("cx", cx(loc$x, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }, y={ loc <- locToInches(xi, yi, dev) svgAnimateXYWH("cy", cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }, r={ svgAnimateXYWH("r", cd(ithUnit(animSet$animations$r, x$r, i), dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }, # Any other attribute { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }) } } } applyAnimation.points <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { ## We may be dealing with multiple points that need animating n <- max(length(x$x), length(x$y), length(x$size)) ## Rep the original x/y/width/height out to be the same length x$x <- rep(x$x, length.out=n) x$y <- rep(x$y, length.out=n) x$pch <- rep(x$pch, length.out = n) x$size <- rep(x$size, length.out = n) ## Need to grab the lwd so that we can keep line thickness the same ## as we change the size of a point if (! is.null(x$gp$lwd)) sw <- x$gp$lwd else sw <- get.gpar()$lwd if (! is.null(x$gp$lty)) lty <- x$gp$lty else lty <- get.gpar()$lty sw <- rep(as.numeric(devLwdToSVG(sw, lty, dev)), length.out = n) ## Repeating animation parameters so that each element can have ## distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) ## Because grobs can produce multiple elements, if animation is to ## occur on a grob it is assumed to occur on all elements, but ## elements may simply have their properties assigned to the same ## value multiple times. for (i in 1:n) { subName <- subGrobName(x$name, i) if ("x" %in% names(animSet$animations)) xi <- ithUnit(animSet$animations$x, x$x, i) else xi <- x$x[i] if ("y" %in% names(animSet$animations)) yi <- ithUnit(animSet$animations$y, x$y, i) else yi <- x$y[i] if ("size" %in% names(animSet$animations)) pointsize <- ithUnit(animSet$animations$size, x$size, i) else pointsize <- x$size[i] ## Enforce gp$cex or gp$fontsize pointsize <- adjustSymbolSize(pointsize, x$gp) angle <- current.rotation() switch(animation, x={ loc <- locToInches(xi, yi, dev) svgAnimateXYWH("x", cx(loc$x, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) if (angle != 0) { if (!"y" %in% names(animSet$animations)) { svgAnimateXYWH("y", cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) } svgAnimateRotation(angle, cx(loc$x, dev), cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) if (!"size" %in% names(animSet$animations)) { svgAnimateTranslation(-cd(pointsize, dev)/2, -cd(pointsize, dev)/2, begin[i], interp[i], dur[i], rep[i], rev[i], additive="sum", id=subName, svgdev=dev@dev) } } }, y={ loc <- locToInches(xi, yi, dev) svgAnimateXYWH("y", cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) if (angle != 0) { if (!"x" %in% names(animSet$animations)) { svgAnimateXYWH("x", cx(loc$x, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) svgAnimateRotation(angle, cx(loc$x, dev), cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) if (!"size" %in% names(animSet$animations)) { svgAnimateTranslation(-cd(pointsize, dev)/2, -cd(pointsize, dev)/2, begin[i], interp[i], dur[i], rep[i], rev[i], additive="sum", id=subName, svgdev=dev@dev) } } } }, size={ pchi <- x$pch[i] docharanim <- (is.character(pchi) && pchi != ".") || (is.numeric(pchi) && (pchi >= 32 && pchi != 46)) donumanim <- is.numeric(pchi) && pchi <= 25 ## If we don't have a good pch, don't bother if (! any(c(donumanim, docharanim))) return() dimsize <- cd(pointsize, dev) svgAnimateXYWH("width", dimsize, begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) svgAnimateXYWH("height", cd(pointsize, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) ## Centering the point trdimsize <- -dimsize / 2 additive <- "replace" if (angle != 0) { loc <- locToInches(xi, yi, dev) svgAnimateRotation(angle, cx(loc$x, dev), cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) additive <- "sum" } svgAnimateTranslation(trdimsize, trdimsize, begin[i], interp[i], dur[i], rep[i], rev[i], additive, id=subName, svgdev=dev@dev) ## Ensuring that stroke-width stays the same. ## Only do this with low numeric pchs because if (donumanim & length(dimsize) > 1) { swi <- sw[i] scalef <- dimsize / 10 swi <- swi / scalef svgAnimatePointSW(swi, begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) } }, ## Any other attribute { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }) } } } applyAnimation.text <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { # We may be dealing with multiple points that need animating n <- max(length(x$x), length(x$y), length(x$label)) # Rep the original x/y/width/height out to be the same length x$x <- rep(x$x, length.out=n) x$y <- rep(x$y, length.out=n) # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) angle <- current.rotation() for (i in 1:n) { subName <- subGrobName(x$name, i) if ("x" %in% names(animSet$animations)) xi <- ithUnit(animSet$animations$x, x$x, i) else xi <- x$x[i] if ("y" %in% names(animSet$animations)) yi <- ithUnit(animSet$animations$y, x$y, i) else yi <- x$y[i] switch(animation, x={ loc <- locToInches(xi, yi, dev) additive <- "replace" if (angle != 0) { svgAnimateRotation(angle, cx(loc$x, dev), cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) additive <- "sum" } svgAnimateTranslation(cx(loc$x, dev), cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], additive, subName, dev@dev) }, y={ if (!("x" %in% names(animSet$animations))) { loc <- locToInches(xi, yi, dev) additive <- "replace" if (angle != 0) { svgAnimateRotation(angle, cx(loc$x, dev), cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) additive <- "sum" } svgAnimateTranslation(cx(loc$x, dev), cy(loc$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], additive, subName, dev@dev) } }, # Any other attribute { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], # Apply these to child element rather # than parent paste(subName, "text", sep=getSVGoption("id.sep")), dev@dev) }) } } } doNotAnimate <- function(animSet, animation) { # Avoid doing BOTH x and y if BOTH animated animNames <- names(animSet$animations) if ((all(c("x", "y") %in% animNames) && animation %in% c("x", "y") && match(animation, animNames) == max(match(c("x", "y"), animNames))) || (sum(c("x0", "y0", "x1", "y1") %in% animNames) > 1 && animation %in% c("x0", "y0", "x1", "y1") && match(animation, animNames) > min(match(c("x0", "y0", "x1", "y1"), animNames), na.rm=TRUE))) TRUE else FALSE } applyAnimation.lines <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { if (doNotAnimate(animSet, animation)) return() # NOTE: only ever drawing ONE line begin <- animSet$begin interp <- animSet$interp dur <- animSet$duration rep <- animSet$rep rev <- animSet$revert subName <- subGrobName(x$name, 1) if ("x" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$x, x$x, 1) xx <- au$values timeid <- au$timeid } else { xx <- x$x } if ("y" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$y, x$y, 1) yy <- au$values timeid <- au$timeid } else { yy <- x$y } if (any(c("x", "y") %in% names(animSet$animations))) { loc <- locToInches(xx, yy, dev) svgAnimatePoints(cx(loc$x, dev), cy(loc$y, dev), timeid, begin, interp, dur, rep, rev, subName, dev@dev) } # Any other attribute if (!(animation %in% c("x", "y"))) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), begin, interp, dur, rep, rev, subName, dev@dev) } } } applyAnimation.polyline <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { if (doNotAnimate(animSet, animation)) return() # If we only have one line if (is.null(x$id) && is.null(x$id.lengths)) { x$id <- rep(1L, length(x$x)) } # Multiple lines exist if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) for (i in 1:n) { subName <- subGrobName(x$name, i) if ("x" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$x, x$x, i) xx <- au$values timeid <- au$timeid } else { xx <- x$x[x$id == i] } if ("y" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$y, x$y, i) yy <- au$values timeid <- au$timeid } else { yy <- x$y[x$id == i] } if (any(c("x", "y") %in% names(animSet$animations))) { loc <- locToInches(xx, yy, dev) svgAnimatePoints(cx(loc$x, dev), cy(loc$y, dev), timeid, begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } # Any other attribute if (!(animation %in% c("x", "y"))) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } } } } # Possibly multiple line segments, each of which become elements applyAnimation.segments <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { if (doNotAnimate(animSet, animation)) return() # We may be dealing with multiple rects that need animating n <- max(length(x$x0), length(x$y0), length(x$x1), length(x$y1)) # Rep the original x/y/width/height out to be the same length x$x0 <- rep(x$x0, length.out=n) x$y0 <- rep(x$y0, length.out=n) x$x1 <- rep(x$x1, length.out=n) x$y1 <- rep(x$y1, length.out=n) # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) for (i in 1:n) { subName <- subGrobName(x$name, i) if ("x0" %in% names(animSet$animations)) x0i <- ithUnit(animSet$animations$x0, x$x0, i) else x0i <- x$x0[i] if ("y0" %in% names(animSet$animations)) y0i <- ithUnit(animSet$animations$y0, x$y0, i) else y0i <- x$y0[i] if ("x1" %in% names(animSet$animations)) x1i <- ithUnit(animSet$animations$x1, x$x1, i) else x1i <- x$x1[i] if ("y1" %in% names(animSet$animations)) y1i <- ithUnit(animSet$animations$y1, x$y1, i) else y1i <- x$y1[i] if (any(c("x0", "y0", "x1", "y1") %in% names(animSet$animations))) { nvals <- max(length(x0i), length(y0i), length(x1i), length(y1i)) loc0 <- locToInches(x0i, y0i, dev) loc1 <- locToInches(x1i, y1i, dev) xx <- rbind(convertX(loc0$x, "inches", valueOnly=TRUE), convertX(loc1$x, "inches", valueOnly=TRUE)) yy <- rbind(convertY(loc0$y, "inches", valueOnly=TRUE), convertY(loc1$y, "inches", valueOnly=TRUE)) svgAnimatePoints(cx(unit(xx, "inches"), dev), cy(unit(yy, "inches"), dev), rep(1:nvals, each=2), # timeid begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } # Any other attribute if (!(animation %in% c("x0", "y0", "x1", "y1"))) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } } } } applyAnimation.polygon <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { if (doNotAnimate(animSet, animation)) return() # If we only have one polygon if (is.null(x$id) && is.null(x$id.lengths)) { x$id <- rep(1L, length(x$x)) } # Multiple polygons exist if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) for (i in 1:n) { subName <- subGrobName(x$name, i) if ("x" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$x, x$x, i) xx <- au$values timeid <- au$timeid } else { xx <- x$x[x$id == i] } if ("y" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$y, x$y, i) yy <- au$values timeid <- au$timeid } else { yy <- x$y[x$id == i] } if (any(c("x", "y") %in% names(animSet$animations))) { loc <- locToInches(xx, yy, dev) svgAnimatePoints(cx(loc$x, dev), cy(loc$y, dev), timeid, begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } # Any other attribute if (!(animation %in% c("x", "y"))) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } } } } applyAnimation.pathgrob <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { if (doNotAnimate(animSet, animation)) return() # NOTE: only ever drawing ONE line begin <- animSet$begin interp <- animSet$interp dur <- animSet$duration rep <- animSet$rep rev <- animSet$revert subName <- subGrobName(x$name, 1) # Rather than looping through 'n' different shapes # need to generate a set of animation values for a # single shape consisting of multiple sub-paths # at multiple time points # If we only have one sub-path if (is.null(x$id) && is.null(x$id.lengths)) { x$id <- rep(1L, length(x$x)) } # Multiple sub-paths if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } # NOTE: according to the SVG spec, I think the animated values # HAVE to follow the original series of M, L, Z to be # valid; otherwise behaviour of browser is undefined? if ("x" %in% names(animSet$animations)) { au <- as.animUnit(animSet$animations$x, unitType(x$x)) xx <- au$values pathid <- au$id timeid <- au$timeid } else { xx <- x$x } if ("y" %in% names(animSet$animations)) { au <- as.animUnit(animSet$animations$y, unitType(x$y)) yy <- au$values pathid <- au$id timeid <- au$timeid } else { yy <- x$y } # Only one sub-path if (is.null(pathid)) { pathid <- rep(id, length.out=length(timeid)) } if (any(c("x", "y") %in% names(animSet$animations))) { loc <- locToInches(xx, yy, dev) svgAnimatePath(cx(loc$x, dev), cy(loc$y, dev), pathid, timeid, begin, interp, dur, rep, rev, subName, dev@dev) } # Any other attribute if (!(animation %in% c("x", "y"))) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), begin, interp, dur, rep, rev, subName, dev@dev) } } } applyAnimation.rastergrob <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { # Raster may have NULL width or height x$width <- widthDetails(x) x$height <- heightDetails(x) # We may be dealing with multiple rasters that need animating n <- max(length(x$x), length(x$y), length(x$width), length(x$height)) # Rep the original x/y/width/height out to be the same length x$x <- rep(x$x, length.out=n) x$y <- rep(x$y, length.out=n) x$width <- rep(x$width, length.out=n) x$height <- rep(x$height, length.out=n) # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) angle <- current.rotation() for (i in 1:n) { subName <- subGrobName(x$name, i) # If x AND y change, need to transform together # If width/height changes, have to animate x/y as well # because SVG does not have justification if ("x" %in% names(animSet$animations)) xi <- ithUnit(animSet$animations$x, x$x, i) else xi <- x$x[i] if ("y" %in% names(animSet$animations)) yi <- ithUnit(animSet$animations$y, x$y, i) else yi <- x$y[i] if ("width" %in% names(animSet$animations)) widthi <- ithUnit(animSet$animations$width, x$width, i) else widthi <- x$width[i] if ("height" %in% names(animSet$animations)) heighti <- ithUnit(animSet$animations$height, x$height, i) else heighti <- x$height[i] lb <- leftbottom(xi, yi, widthi, heighti, x$just, x$hjust, x$vjust, dev) switch(animation, x={ dim <- dimToInches(widthi, heighti, dev) additive <- "replace" if (angle != 0) { svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) additive <- "sum" } svgAnimateTranslation(cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], additive, subName, dev@dev) }, y={ # If we are also animating "x" then this has # already been done if (!"x" %in% names(animSet$animations)) { dim <- dimToInches(widthi, heighti, dev) additive <- "replace" if (angle != 0) { svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) additive <- "sum" } svgAnimateTranslation(cx(lb$x, dev), ch(dim$h, dev) + cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], additive, subName, dev@dev) } }, width={ dim <- dimToInches(widthi, heighti, dev) # If x is also animated, # this has already been handled above if (!any(c("x", "y") %in% names(animSet$animations))) { if (angle != 0) { svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) additive <- "sum" } svgAnimateTranslation(cx(lb$x, dev), ch(dim$h, dev) + cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], additive, subName, dev@dev) } svgAnimateScale(cw(dim$w, dev), ch(dim$h, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=paste(subName, "scale", sep=getSVGoption("id.sep")), svgdev=dev@dev) }, height={ # If "width" is also animated, # this has already been done if (!"width" %in% names(animSet$animations)) { dim <- dimToInches(widthi, heighti, dev) if (!any(c("x", "y") %in% names(animSet$animations))) { if (angle != 0) { svgAnimateRotation(angle, cx(lb$x, dev), cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=subName, svgdev=dev@dev) additive <- "sum" } svgAnimateTranslation(cx(lb$x, dev), ch(dim$h, dev) + cy(lb$y, dev), begin[i], interp[i], dur[i], rep[i], rev[i], additive, subName, dev@dev) } svgAnimateScale(cw(dim$w, dev), ch(dim$h, dev), begin[i], interp[i], dur[i], rep[i], rev[i], id=paste(subName, "scale", sep=getSVGoption("id.sep")), svgdev=dev@dev) } }, # Any other attribute { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) }) } } } applyAnimation.xspline <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } else { if (doNotAnimate(animSet, animation)) return() # If we only have one xspline if (is.null(x$id) && is.null(x$id.lengths)) { x$id <- rep(1L, length(x$x)) } # Multiple xsplines exist if (is.null(x$id)) { n <- length(x$id.lengths) id <- rep(1L:n, x$id.lengths) } else { n <- length(unique(x$id)) id <- x$id } # Repeating animation parameters so that each element can have # distinct values begin <- rep(animSet$begin, length.out = n) interp <- rep(animSet$interp, length.out = n) dur <- rep(animSet$duration, length.out = n) rep <- rep(animSet$rep, length.out = n) rev <- rep(animSet$revert, length.out = n) for (i in 1:n) { subName <- subGrobName(x$name, i) if ("x" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$x, x$x, i) xx <- au$values timeid <- au$timeid } else { xx <- x$x[x$id == i] } if ("y" %in% names(animSet$animations)) { au <- ithAnimUnit(animSet$animations$y, x$y, i) yy <- au$values timeid <- au$timeid } else { yy <- x$y[x$id == i] } if (any(c("x", "y") %in% names(animSet$animations))) { getSplinePoints <- function(x, y, grob) { tempSpline <- grob tempSpline$x <- x tempSpline$y <- y tempSpline$id <- NULL tempSpline$id.lengths <- NULL xsplinePoints(tempSpline) } # for each time period, need to convert control # points into (x, y) and then generate new timeid nval <- length(timeid) xx <- rep(xx, length.out=nval) yy <- rep(yy, length.out=nval) xxx <- split(xx, timeid) yyy <- split(yy, timeid) points <- mapply(getSplinePoints, xxx, yyy, MoreArgs=list(grob=x), SIMPLIFY=FALSE) timeid <- rep(1:length(points), sapply(points, function(p) length(p$x))) xpoints <- do.call("unit.c", lapply(points, function(p) p$x)) ypoints <- do.call("unit.c", lapply(points, function(p) p$y)) if (x$open) { # animating a polyline element loc <- locToInches(xpoints, ypoints, dev) svgAnimatePoints(cx(loc$x, dev), cy(loc$y, dev), timeid, begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } else { # animating a path element loc <- locToInches(xpoints, ypoints, dev) pathid <- rep(id, length.out=length(timeid)) svgAnimatePath(cx(loc$x, dev), cy(loc$y, dev), pathid, timeid, begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } } # Any other attribute if (!(animation %in% c("x", "y"))) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], i), collapse=";"), begin[i], interp[i], dur[i], rep[i], rev[i], subName, dev@dev) } } } } applyAnimation.grob <- function(x, ...) { # If we got here, then we've hit something that is not yet implemented stop(paste("Animation of ", paste(class(x), collapse=":"), " objects is not yet implemented", sep="")) } applyAnimation.gTree <- function(x, animSet, animation, group, dev, ...) { if (group) { svgAnimate(animation, paste(ithValue(animSet$animations[[animation]], 1), collapse=";"), animSet$begin, animSet$interp, animSet$dur, animSet$rep, animSet$rev, x$name, dev@dev) } } applyAnimationSet <- function(x, animationSet, group, dev) { x$name <- getID(x$name, "grob", FALSE) animations <- animationSet$animations for (i in names(animations)) applyAnimation(x, animationSet, i, group, dev) } animate <- function(x, dev) { UseMethod("animate") } animate.grob <- function(x, dev) { lapply(x$animationSets, function(as) { applyAnimationSet(x, as, FALSE, dev) }) lapply(x$groupAnimationSets, function(as) { applyAnimationSet(x, as, TRUE, dev) }) } animate.gTree <- function(x, dev) { lapply(x$groupAnimationSets, function(as) { applyAnimationSet(x, as, TRUE, dev) }) # If you want to do something with the 'animationSets' # for your gTree then you have to write your own # animate() method } # NOTE that this has to be a primToDev() method # NOT a grobToDev() method # OTHERWISE, viewports will not be set up correctly primToDev.animated.grob <- function(x, dev) { animate(x, dev) NextMethod() } # Ensure the animation is retained on a forced grob forceGrob.animated.grob <- function(x) { y <- NextMethod() if (inherits(y, "forcedgrob")) { y$animationSets <- x$animationSets y$groupAnimationSets <- x$groupAnimationSets class(y) <- unique(c("animated.grob", class(y))) } y } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/R/MathML.R����������������������������������������������������������������������������������0000654�0001762�0000144�00000056625�12164147366�013256� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ explicitMathVariant <- function(fontfamily, fontface) { currentFonts <- getSVGFonts() stackname <- fontStackFromFontFamily(fontfamily, currentFonts) switch(stackname, sans=switch(fontface, plain="sans-serif", bold="bold-sans-serif", italic=, oblique="sans-serif-italic", bold.italic="sans-serif-bold-italic"), serif=switch(fontface, plain="normal", bold="bold", italic=, oblique="italic", bold.italic="bold-italic"), mono="monospace", switch(fontface, plain="sans-serif", bold="bold-sans-serif", italic=, oblique="sans-serif-italic", bold.italic="sans-serif-bold-italic")) } unicode <- c("\u0020", "\u0021", "\u2200", "\u0023", "\u2203", "\u0025", "\u0026", "\u220B", "\u0028", "\u0029", "\u2217", "\u002B", "\u002C", "\u2212", "\u002E", "\u002F", "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039", "\u003A", "\u003B", "\u003C", "\u003D", "\u003E", "\u003F", "\u2245", "\u0391", "\u0392", "\u03A7", "\u0394", "\u0395", "\u03A6", "\u0393", "\u0397", "\u0399", "\u03D1", "\u039A", "\u039B", "\u039C", "\u039D", "\u039F", "\u03A0", "\u0398", "\u03A1", "\u03A3", "\u03A4", "\u03A5", "\u03C2", "\u03A9", "\u039E", "\u03A8", "\u0396", "\u005B", "\u2234", "\u005D", "\u22A5", "\u005F", "\uF8E5", "\u03B1", "\u03B2", "\u03C7", "\u03B4", "\u03B5", "\u03C6", "\u03B3", "\u03B7", "\u03B9", "\u03D5", "\u03BA", "\u03BB", "\u03BC", "\u03BD", "\u03BF", "\u03C0", "\u03B8", "\u03C1", "\u03C3", "\u03C4", "\u03C5", "\u03D6", "\u03C9", "\u03BE", "\u03C8", "\u03B6", "\u007B", "\u007C", "\u007D", "\u223C", "\u20AC", "\u03D2", "\u2032", "\u2264", "\u2044", "\u221E", "\u0192", "\u2663", "\u2666", "\u2665", "\u2660", "\u2194", "\u2190", "\u2191", "\u2192", "\u2193", "\u00B0", "\u00B1", "\u2033", "\u2265", "\u00D7", "\u221D", "\u2202", "\u2022", "\u00F7", "\u2260", "\u2261", "\u2248", "\u2026", "\uF8E6", "\uF8E7", "\u21B5", "\u2135", "\u2111", "\u211C", "\u2118", "\u2297", "\u2295", "\u2205", "\u2229", "\u222A", "\u2283", "\u2287", "\u2284", "\u2282", "\u2286", "\u2208", "\u2209", "\u2220", "\u2207", "\uF6DA", "\uF6D9", "\uF6DB", "\u220F", "\u221A", "\u22C5", "\u00AC", "\u2227", "\u2228", "\u21D4", "\u21D0", "\u21D1", "\u21D2", "\u21D3", "\u25CA", "\u2329", "\uF8E8", "\uF8E9", "\uF8EA", "\u2211", "\uF8EB", "\uF8EC", "\uF8ED", "\uF8EE", "\uF8EF", "\uF8F0", "\uF8F1", "\uF8F2", "\uF8F3", "\uF8F4", "\u232A", "\u222B", "\u2320", "\uF8F5", "\u2321", "\uF8F6", "\uF8F7", "\uF8F8", "\uF8F9", "\uF8FA", "\uF8FB", "\uF8FC", "\uF8FD", "\uF8FE") # See ~/Research/Rstuff/SVG/PlotMath/greek.R greek <- structure(c("\u03B1", "\u03B2", "\u03B3", "\u03B4", "\u03B5", "\u03B6", "\u03B7", "\u03B8", "\u03B9", "\u03BA", "\u03BB", "\u03BC", "\u03BD", "\u03BE", "\u03BF", "\u03C0", "\u03C1", "\u03C2", "\u03C3", "\u03C4", "\u03C5", "\u03D5", "\u03C7", "\u03C8", "\u03C9", "\u0391", "\u0392", "\u0393", "\u0394", "\u0395", "\u0396", "\u0397", "\u0398", "\u0399", "\u039A", "\u039B", "\u039C", "\u039D", "\u039E", "\u039F", "\u03A0", "\u03A1", "\u03A2", "\u03A3", "\u03A4", "\u03A5", "\u03A6", "\u03A7", "\u03A8", "\u03A9"), .Names = c("alpha", "beta", "gamma", "delta", "epsilon", "zeta", "eta", "theta", "iota", "kappa", "lambda", "mu", "nu", "xi", "omicron", "pi", "rho", "", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega", "Alpha", "Beta", "Gamma", "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", "Lambda", "Mu", "Nu", "Xi", "Omicron", "Pi", "Rho", "", "Sigma", "Tau", "Upsilon", "Phi", "Chi", "Psi", "Omega")) symbolNames <- c("..."="\u2026", cdots="\u22EF", ldots="\u2026", greek, theta1="\u03D1", vartheta="\u03D1", phi1="\u03C6", sigma1="\u03C2", varsigma="\u03C2", omega1="\u03D6", Upsilon1="\u03D2", aleph="\u05D0", infinity="\u221E", partialdiff="\u2202", nabla="\u2207", degree="\u00B0", minute="\u2032", second="\u2033") # The general idea with each of these mml*() functions is to # create a single MathML element. # This means that, if the output is a collection of several # elements, we wrap the whole collection in an mmlJuxta <- function(e, fontfamily, fontface, svgdev) { mrow <- newXMLNode("mrow", parent = svgDevParent(svgdev)) svgDevChangeParent(mrow, svgdev) e <- e[-1] lapply(e, function(x) { toMML(x, fontfamily, fontface, svgdev) }) svgDevChangeParent(xmlParent(mrow), svgdev) } mmlBinOp <- function(e, fontfamily, fontface, op, svgdev) { mrow <- newXMLNode("mrow", parent = svgDevParent(svgdev)) svgDevChangeParent(mrow, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) newXMLNode("mo", parent = svgDevParent(svgdev), newXMLTextNode(op)) toMML(e[[3]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mrow), svgdev) } mmlParen <- function(e, fontfamily, fontface, svgdev) { mfenced <- newXMLNode("mfenced", parent = svgDevParent(svgdev)) mrow <- newXMLNode("mrow", parent = mfenced) svgDevChangeParent(mrow, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mfenced), svgdev) } mmlBrace <- function(e, fontfamily, fontface, svgdev) { mfenced <- newXMLNode("mfenced", parent = svgDevParent(svgdev), attrs = list(open = "", close = "")) mrow <- newXMLNode("mrow", parent = mfenced) svgDevChangeParent(mrow, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mfenced), svgdev) } delimiters <- c(lfloor="\u230A", rfloor="\u230B", lceil="\u2308", rceil="\u2309") convertDelim <- function(delim) { if (delim %in% names(delimiters)) delimiters[delim] else delim } mmlGroup <- function(e, fontfamily, fontface, svgdev) { # e[[2]] and e[[4]] are the delimiters if (length(e) < 4) stop("Invalid plotmath group()") delim1 <- convertDelim(as.character(e[[2]])) delim2 <- convertDelim(as.character(e[[4]])) mfenced <- newXMLNode("mfenced", parent = svgDevParent(svgdev), attrs = list(open = delim1, close = delim2)) mrow <- newXMLNode("mrow", parent = mfenced) svgDevChangeParent(mrow, svgdev) toMML(e[[3]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mfenced), svgdev) } mmlSup <- function(e, fontfamily, fontface, svgdev) { msup <- newXMLNode("msup", parent = svgDevParent(svgdev)) svgDevChangeParent(msup, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) toMML(e[[3]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(msup), svgdev) } mmlSub <- function(e, fontfamily, fontface, svgdev) { msub <- newXMLNode("msub", parent = svgDevParent(svgdev)) svgDevChangeParent(msub, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) toMML(e[[3]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(msub), svgdev) } mmlSqrt <- function(e, fontfamily, fontface, svgdev) { if (length(e) > 2) { mroot <- newXMLNode("mroot", parent = svgDevParent(svgdev)) svgDevChangeParent(mroot, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) toMML(e[[3]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mroot), svgdev) } else { msqrt <- newXMLNode("msqrt", parent = svgDevParent(svgdev)) svgDevChangeParent(msqrt, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(msqrt), svgdev) } } mmlFont <- function(e, fontfamily, fontface, svgdev) { toMML(e[[2]], fontfamily, fontface, svgdev) } mmlStyle <- function(e, fontfamily, fontface, style, svgdev) { displaystyle <- switch(style, display="true", "false") scriptlevel <- switch(style, display=0, text=0, script=1, scriptscript=2) mstyle <- newXMLNode("mstyle", parent = svgDevParent(svgdev), attrs = list(displaystyle = displaystyle, scriptlevel = scriptlevel)) svgDevChangeParent(mstyle, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mstyle), svgdev) } mmlSymbol <- function(e, fontfamily, fontface, svgdev) { newXMLNode("mtext", parent = svgDevParent(svgdev), attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode(unicode[as.integer(charToRaw(e[[2]])) - 31])) } mmlCSL <- function(e, fontfamily, fontface, svgdev) { mfenced <- newXMLNode("mfenced", parent = svgDevParent(svgdev), attrs = list(open = "", close = "")) svgDevChangeParent(mfenced, svgdev) sapply(e[-1], toMML, fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mfenced), svgdev) } mmlAccent <- function(e, fontfamily, fontface, accent, svgdev) { mover <- newXMLNode("mover", parent = svgDevParent(svgdev), attrs = list(accent = "true", align = "center")) mrow <- newXMLNode("mrow", parent = mover) svgDevChangeParent(mrow, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) newXMLNode("mo", parent = mover, attrs = list(stretchy = "false"), newXMLTextNode(accent)) svgDevChangeParent(xmlParent(mover), svgdev) } mmlWideAccent <- function(e, fontfamily, fontface, accent, svgdev) { mover <- newXMLNode("mover", parent = svgDevParent(svgdev), attrs = list(accent = "true", align = "center")) mrow <- newXMLNode("mrow", parent = mover) svgDevChangeParent(mrow, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) newXMLNode("mo", parent = mover, attrs = list(stretchy = "true"), newXMLTextNode(accent)) svgDevChangeParent(xmlParent(mover), svgdev) } mmlUnderline <- function(e, fontfamily, fontface, svgdev) { # NOTE: and are currently not supported # by Mozilla-based browsers (2011-11-21) munder <- newXMLNode("munder", parent = svgDevParent(svgdev)) mrow <- newXMLNode("mrow", parent = munder) svgDevChangeParent(mrow, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) newXMLNode("mo", parent = munder, attrs = list(stretchy = "true"), newXMLTextNode("\u00AF")) svgDevChangeParent(xmlParent(munder), svgdev) } mmlSpace <- function(e, fontfamily, fontface, svgdev) { mrow <- newXMLNode("mrow", parent = svgDevParent(svgdev)) svgDevChangeParent(mrow, svgdev) if (length(e) > 2) { toMML(e[[2]], fontfamily, fontface, svgdev) newXMLNode("mtext", parent = svgDevParent(svgdev), attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode("\u00A0")) toMML(e[[3]], fontfamily, fontface, svgdev) } else { newXMLNode("mtext", parent = svgDevParent(svgdev), attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode("\u00A0")) toMML(e[[2]], fontfamily, fontface, svgdev) } svgDevChangeParent(xmlParent(mrow), svgdev) } mmlPhantom <- function(e, fontfamily, fontface, svgdev) { mphantom <- newXMLNode("mphantom", parent = svgDevParent(svgdev)) svgDevChangeParent(mphantom, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mphantom), svgdev) } mmlFrac <- function(e, fontfamily, fontface, svgdev, lwd="medium") { mfrac <- newXMLNode("mfrac", parent = svgDevParent(svgdev), attrs = list(linethickness = lwd)) svgDevChangeParent(mfrac, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) toMML(e[[3]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mfrac), svgdev) } mmlBigOp <- function(e, fontfamily, fontface, svgdev, op=NULL) { mrow <- newXMLNode("mrow", parent = svgDevParent(svgdev)) # When checking for is.null(op), # Either specify op special character or format the first # element of the expression if (length(e) < 3) { if (is.null(op)) { opmrow <- newXMLNode("mrow", parent = mrow) svgDevChangeParent(opmrow, svgdev) toMML(e[[1]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(opmrow), svgdev) newXMLNode("mtext", parent = opmrow, attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode("\u00A0")) } else { newXMLNode("mo", parent = mrow, newXMLTextNode(op)) } svgDevChangeParent(mrow, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) } else if (length(e) < 4) { munder <- newXMLNode("munder", parent = mrow) if (is.null(op)) { opmrow <- newXMLNode("mrow", parent = munder) svgDevChangeParent(opmrow, svgdev) toMML(e[[1]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(opmrow), svgdev) newXMLNode("mtext", parent = opmrow, attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode("\u00A0")) } else { newXMLNode("mo", parent = munder, newXMLTextNode(op)) } svgDevChangeParent(munder, svgdev) toMML(e[[3]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(munder), svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) } else { munderover <- newXMLNode("munderover", parent = mrow) if (is.null(op)) { opmrow <- newXMLNode("mrow", parent = munderover) svgDevChangeParent(opmrow, svgdev) toMML(e[[1]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(opmrow), svgdev) newXMLNode("mtext", parent = opmrow, attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode("\u00A0")) } else { newXMLNode("mo", parent = munderover, newXMLTextNode(op)) } svgDevChangeParent(munderover, svgdev) toMML(e[[3]], fontfamily, fontface, svgdev) toMML(e[[4]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(munderover), svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) } svgDevChangeParent(xmlParent(mrow), svgdev) } mmlFun <- function(e, fontfamily, fontface, svgdev) { mrow <- newXMLNode("mrow", parent = svgDevParent(svgdev)) mtext <- newXMLNode("mtext", parent = mrow, attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode(e[[1]])) mfenced <- newXMLNode("mfenced", parent = mrow) svgDevChangeParent(mfenced, svgdev) toMML(e[[2]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mrow), svgdev) } toMML <- function(x, fontfamily, fontface, svgdev, ...) { UseMethod("toMML") } toMML.numeric <- function(x, fontfamily, fontface, svgdev, ...) { newXMLNode("mn", parent = svgDevParent(svgdev), newXMLTextNode(as.character(x))) } toMML.character <- function(x, fontfamily, fontface, svgdev, ...) { newXMLNode("mtext", parent = svgDevParent(svgdev), attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode(x)) } toMML.name <- function(x, fontfamily, fontface, svgdev, ...) { # Convert special names if (as.character(x) %in% names(symbolNames)) x <- symbolNames[as.character(x)] # R does NOT automatically italicize symbols newXMLNode("mtext", parent = svgDevParent(svgdev), attrs = list(mathvariant = explicitMathVariant(fontfamily, fontface)), newXMLTextNode(x)) } # A "language" object may have class "call" or "(" or "{" "toMML.(" <- function(x, fontfamily, fontface, svgdev, ...) { toMML.call(x, fontfamily, fontface, svgdev, ...) } "toMML.{" <- function(x, fontfamily, fontface, svgdev, ...) { toMML.call(x, fontfamily, fontface, svgdev, ...) } funCallToMML <- function(x, fontfamily, fontface, svgdev) { funName <- as.character(x[[1]]) switch(funName, "+"=, "/"=mmlBinOp(x, fontfamily, fontface, funName, svgdev), "-"=mmlBinOp(x, fontfamily, fontface, "\u2212", svgdev), "*"=mmlBinOp(x, fontfamily, fontface, "\u2062", svgdev), "%+-%"=mmlBinOp(x, fontfamily, fontface, "\u00B1", svgdev), "%/%"=mmlBinOp(x, fontfamily, fontface, "\u00F7", svgdev), "%*%"=mmlBinOp(x, fontfamily, fontface, "\u00D7", svgdev), "%.%"=mmlBinOp(x, fontfamily, fontface, "\u22C5", svgdev), "["=mmlSub(x, fontfamily, fontface, svgdev), "^"=mmlSup(x, fontfamily, fontface, svgdev), "paste"=mmlJuxta(x, fontfamily, fontface, svgdev), "sqrt"=mmlSqrt(x, fontfamily, fontface, svgdev), "("=mmlParen(x, fontfamily, fontface, svgdev), "{"=mmlBrace(x, fontfamily, fontface, svgdev), "=="=mmlBinOp(x, fontfamily, fontface, "=", svgdev), "!="=mmlBinOp(x, fontfamily, fontface, "\u2260", svgdev), "<"=mmlBinOp(x, fontfamily, fontface, "<", svgdev), "<="=mmlBinOp(x, fontfamily, fontface, "\u2264", svgdev), ">"=mmlBinOp(x, fontfamily, fontface, ">", svgdev), ">="=mmlBinOp(x, fontfamily, fontface, "\u2265", svgdev), "%~~%"=mmlBinOp(x, fontfamily, fontface, "\u2248", svgdev), "%=~%"=mmlBinOp(x, fontfamily, fontface, "\u2245", svgdev), "%==%"=mmlBinOp(x, fontfamily, fontface, "\u2261", svgdev), "%prop%"=mmlBinOp(x, fontfamily, fontface, "\u221D", svgdev), "plain"=mmlFont(x, fontfamily, "plain", svgdev), "bold"=mmlFont(x, fontfamily, "bold", svgdev), "italic"=mmlFont(x, fontfamily, "italic", svgdev), "bolditalic"=mmlFont(x, fontfamily, "bold.italic", svgdev), "symbol"=mmlSymbol(x, fontfamily, fontface, svgdev), "list"=mmlCSL(x, fontfamily, fontface, svgdev), "%subset%"=mmlBinOp(x, fontfamily, fontface, "\u2282", svgdev), "%subseteq%"=mmlBinOp(x, fontfamily, fontface, "\u2286", svgdev), "%notsubset%"=mmlBinOp(x, fontfamily, fontface, "\u2284", svgdev), "%supset%"=mmlBinOp(x, fontfamily, fontface, "\u2283", svgdev), "%supseteq%"=mmlBinOp(x, fontfamily, fontface, "\u2287", svgdev), "%notsupset%"=mmlBinOp(x, fontfamily, fontface, "\u2285", svgdev), "%in%"=mmlBinOp(x, fontfamily, fontface, "\u2208", svgdev), "%notin%"=mmlBinOp(x, fontfamily, fontface, "\u2209", svgdev), "hat"=mmlAccent(x, fontfamily, fontface, "\u005E", svgdev), "tilde"=mmlAccent(x, fontfamily, fontface, "\u007E", svgdev), "dot"=mmlAccent(x, fontfamily, fontface, "\u02D9", svgdev), "ring"=mmlAccent(x, fontfamily, fontface, "\u02DA", svgdev), # Used "macron" "bar"=mmlAccent(x, fontfamily, fontface, "\u00AF", svgdev), # FIXME: these are just normal accents positioned as limits "widehat"=mmlWideAccent(x, fontfamily, fontface, "\u005E", svgdev), "widetilde"=mmlWideAccent(x, fontfamily, fontface, "\u007E", svgdev), "%<->%"=mmlBinOp(x, fontfamily, fontface, "\u2194", svgdev), "%->%"=mmlBinOp(x, fontfamily, fontface, "\u2192", svgdev), "%<-%"=mmlBinOp(x, fontfamily, fontface, "\u2190", svgdev), "%up%"=mmlBinOp(x, fontfamily, fontface, "\u2191", svgdev), "%down%"=mmlBinOp(x, fontfamily, fontface, "\u2193", svgdev), "%<=>%"=mmlBinOp(x, fontfamily, fontface, "\u21D4", svgdev), "%=>%"=mmlBinOp(x, fontfamily, fontface, "\u21D2", svgdev), "%<=%"=mmlBinOp(x, fontfamily, fontface, "\u21D0", svgdev), "%dblup%"=mmlBinOp(x, fontfamily, fontface, "\u21D1", svgdev), "%dbldown%"=mmlBinOp(x, fontfamily, fontface, "\u21D3", svgdev), "displaystyle"=mmlStyle(x, fontfamily, fontface, "display", svgdev), "textstyle"=mmlStyle(x, fontfamily, fontface, "text", svgdev), "scriptstyle"=mmlStyle(x, fontfamily, fontface, "script", svgdev), "scriptscriptstyle"=mmlStyle(x, fontfamily, fontface, "scriptscript", svgdev), "underline"=mmlUnderline(x, fontfamily, fontface, svgdev), "~"=mmlSpace(x, fontfamily, fontface, svgdev), "phantom"=mmlPhantom(x, fontfamily, fontface, svgdev), "over"=, "frac"=mmlFrac(x, fontfamily, fontface, svgdev), "atop"=mmlFrac(x, fontfamily, fontface, lwd="0em", svgdev), "sum"=mmlBigOp(x, fontfamily, fontface, svgdev, "\u2211"), "prod"=mmlBigOp(x, fontfamily, fontface, svgdev, "\u220F"), "integral"=mmlBigOp(x, fontfamily, fontface, svgdev, "\u222B"), "union"=mmlBigOp(x, fontfamily, fontface, svgdev, "\u22C3"), "intersect"=mmlBigOp(x, fontfamily, fontface, svgdev, "\u22C2"), "prod"=mmlBigOp(x, fontfamily, fontface, svgdev, "\u220F"), "lim"=mmlBigOp(x, fontfamily, fontface, svgdev), "min"=mmlBigOp(x, fontfamily, fontface, svgdev), "inf"=mmlBigOp(x, fontfamily, fontface, svgdev), "sup"=mmlBigOp(x, fontfamily, fontface, svgdev), "group"=mmlGroup(x, fontfamily, fontface, svgdev), "bgroup"=mmlGroup(x, fontfamily, fontface, svgdev), mmlFun(x, fontfamily, fontface, svgdev)) } # Table of Unicode math ops at # http://www.w3.org/TR/MathML2/022.html toMML.call <- function(x, fontfamily, fontface, svgdev, ...) { if (is.name(x[[1]])) { funCallToMML(x, fontfamily, fontface, svgdev) } else { mrow <- newXMLNode("mrow", parent = svgDevParent(svgdev)) svgDevChangeParent(mrow, svgdev) toMML(x[[1]], fontfamily, fontface, svgdev) mfenced <- newXMLNode("mfenced", parent = mrow) svgDevChangeParent(mfenced, svgdev) toMML(x[[2]], fontfamily, fontface, svgdev) svgDevChangeParent(xmlParent(mrow), svgdev) } } # fontfamily is used to set explicit 'mathvariant' when it is not # implicit in the formula element expr2mml <- function(e, fontfamily, fontface, svgdev) { math <- newXMLNode("math", parent = svgDevParent(svgdev), attrs = list(display = "inline"), namespaceDefinitions = "http://www.w3.org/1998/Math/MathML") lapply(e, function(x) { mrow <- newXMLNode("mrow", parent = math) svgDevChangeParent(mrow, svgdev) toMML(x, fontfamily = fontfamily, fontface = fontface, svgdev = svgdev) }) svgDevChangeParent(xmlParent(math), svgdev) } �����������������������������������������������������������������������������������������������������������gridSVG/R/clipmask.R��������������������������������������������������������������������������������0000654�0001762�0000144�00000041346�14402217262�013717� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# High level functions for escaping clipping paths and masks popContext <- function(n = 1) { if (n < 1) stop("Must pop at least one level of context") # Not even giving the option of configuring a name because # it should not be used in any serious manner grid.draw(grob(n = n, cl = "popContext")) } # We have nothing to draw here, just rip out the SVG device to # start unwinding the tree primToDev.popContext <- function(x, dev) { svgPopContext(x$n, dev@dev) } svgPopContext <- function(n, svgdev) { # IMPORTANT - clipGrobs are left alone! # In the case where we have reached something we know # is not a reference, then we don't need to unwind further. # This is because viewports and grobs (in particular clipGrobs) # will be treated separately to clipping paths and masks. parentIsPushContext <- function() { id <- xmlGetAttr(svgDevParent(svgdev), "id") cids <- get("contextNames", envir = .gridSVGEnv) id %in% cids } contextLevels <- get("contextLevels", envir = .gridSVGEnv) cl <- tail(contextLevels, 1) if (n > cl) { warning("An attempt was made to pop more contexts than possible, ignoring extras") n <- cl } # In the case where a gTree has a popContext, don't do anything because # it would affect any remaining children that are yet to be drawn. # An example: # pushClipPath() # -> draw(gTree) # -> *draw*, *draw*, *popClipPath*, *draw* <- pop will be ignored here # -> leave(gTree) while (parentIsPushContext() && n > 0) { svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) cl <- cl - 1 n <- n - 1 } contextLevels[length(contextLevels)] <- cl assign("contextLevels", contextLevels, envir = .gridSVGEnv) } ### ### ### CLIPPING PATHS ### ### # Alias for convenient popping of a clipping path popClipPath <- function() { popContext() } pushClipPath <- function(clippath = NULL, label = NULL, name = NULL, draw = TRUE) { if (is.null(label) & is.null(clippath)) { stop("At least one of 'label' or 'clippath' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.clipPath") registerClipPath(label, clippath) } else if (is.null(clippath)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerClipPath(label, clippath) } cp <- grid::grob(referenceLabel = label, name = name, cl = "clipPath") class(cp) <- unique(c("pushClipPath", class(cp))) if (draw) grid.draw(cp) invisible(cp) } # High level functions for applying clipping paths to existing grobs grid.clipPath <- function(path, clippath = NULL, label = NULL, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) { if (is.null(label) & is.null(clippath)) { stop("At least one of 'label' or 'clippath' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.clipPath") registerClipPath(label, clippath) clippath <- NULL # use the ref from now on } else if (is.null(clippath)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerClipPath(label, clippath) clippath <- NULL # use the ref from now on } grobApply(path, function(path) { grid.set(path, clipPathGrob(grid.get(path), clippath = clippath, label = label, group = group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } clipPathGrob <- function(x, clippath = NULL, label = NULL, group = TRUE) { if (is.null(label) & is.null(clippath)) { stop("At least one of 'label' or 'clippath' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.clipPath") registerClipPath(label, clippath) } else if (is.null(clippath)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerClipPath(label, clippath) } x$referenceLabel <- c(x$referenceLabel, label) x$clipPathLabel <- label x$clipPathGroup <- group class(x) <- unique(c("pathClipped.grob", class(x))) x } clipPath <- function(grob) { if (! is.grob(grob)) stop("'grob' must be a grid grob") cp <- list(grob = grob) class(cp) <- "clipPath" cp } registerClipPath <- function(label, clippath) { checkExistingDefinition(label) refDefinitions <- get("refDefinitions", envir = .gridSVGEnv) if (! inherits(clippath, "clipPath")) stop("'clippath' must be a 'clipPath' object") # Note: grob must be forced to fix the definition of the grob # at the time of registration defList <- list(label = label, id = getID(label, "ref"), grob = grid.force(clippath$grob), vp = getAbsoluteVp()) class(defList) <- "clipPathDef" refDefinitions[[label]] <- defList assign("refDefinitions", refDefinitions, envir = .gridSVGEnv) assign("refUsageTable", rbind(get("refUsageTable", envir = .gridSVGEnv), data.frame(label = label, used = FALSE, stringsAsFactors = FALSE)), envir = .gridSVGEnv) # Return NULL invisibly because we don't actually care what the # definition looks like until gridSVG tries to draw it. invisible() } primToDev.pathClipped.grob <- function(x, dev) { setLabelUsed(x$referenceLabel) label <- getLabelID(x$clipPathLabel) cpg <- garnishGrob(x, "clip-path" = paste0("url(#", label, ")"), group = x$clipPathGroup) # Now need to remove all clip path appearances in the class list. # This is safe because repeated clipping just clobbers existing # attributes. cl <- class(cpg) class(cpg) <- cl[cl != "pathClipped.grob"] primToDev(cpg, dev) } drawDef.clipPathDef <- function(def, dev) { grob <- def$grob # This is always going to be true because we basically assume that # referenced content is fixed and therefore the names don't really # matter. if (get("use.gPaths", envir = .gridSVGEnv)) grob$name <- paste(def$label, grob$name, sep = getSVGoption("gPath.sep")) # Start clipPath devStartClipPath(list(name = def$id), NULL, dev) # Draw grob grobToDev(grid.force(grob), dev) # Close clipPath, open group devEndClipPath(list(name = def$id), NULL, dev) } primToDev.clipPath <- function(x, dev) { setLabelUsed(x$referenceLabel) devStartClipPathGroup(devGrob(x, dev), NULL, dev) } devGrob.clipPath <- function(x, dev) { list(name = getID(x$name, "grob"), cp = x$referenceLabel, classes = x$classes) } svgStartGrobClipPathGroup <- function(id = NULL, cp = NULL, classes = NULL, svgdev = svgDevice()) { clipPathID <- paste0("url(#", getLabelID(cp), ")") attrs <- list(id = prefixName(id), svgClassList(classes), "clip-path" = clipPathID) attrs <- attrList(attrs) cp <- newXMLNode("g", attrs = attrs, parent = svgDevParent(svgdev)) svgDevChangeParent(cp, svgdev) } svgStartGrobClipPath <- function(id = NULL, svgdev = svgDevice()) { cp <- newXMLNode("clipPath", attrs = list(id = id), parent = svgDevParent(svgdev)) svgDevChangeParent(cp, svgdev) } svgEndGrobClipPath <- function(svgdev = svgDevice()) { # First need to collect all children and filter out unwanted content clippath <- svgDevParent(svgdev) nodelist <- flattenClippedSVG(clippath) # Wipe out all children, then add in the ones we want removeChildren(clippath, kids = xmlChildren(clippath)) xmlChildren(clippath) <- nodelist # Go up one level from clipPath to defs svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) } flattenClippedSVG <- function(node) { # Mostly taken from spec, only adding in what we use though # Omitted - animation elements, 'use', 'ellipse', 'line' validElements <- c("animate", "animateTransform", "circle", "path", "polygon", "polyline", "rect", "text") clipPathID <- xmlGetAttr(node, "id") subset <- getNodeSet(node, paste0("//svg:clipPath[@id = '", clipPathID, "']", "/descendant-or-self::*/svg:", validElements, collapse = " | "), c(svg = "http://www.w3.org/2000/svg")) for (i in 1:length(subset)) { el <- subset[[i]] name <- xmlName(el) if (name == "text") { # We know that the structure is: # # # p <- xmlParent(el) gp <- xmlParent(p) gpattrs <- xmlAttrs(gp) gpattrs["transform"] <- paste(gpattrs["transform"], xmlAttrs(p)["transform"]) # There might also be a rotation present on the text itself if ("transform" %in% names(xmlAttrs(el))) gpattrs["transform"] <- paste(gpattrs["transform"], xmlAttrs(el)["transform"]) xmlAttrs(el) <- gpattrs } } subset } ### ### ### MASKING ### ### # Alias for popping out of a masking context popMask <- function() { popContext() } pushMask <- function(mask = NULL, label = NULL, name = NULL, draw = TRUE) { if (is.null(label) & is.null(mask)) { stop("At least one of 'label' or 'mask' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.mask") registerMask(label, mask) } else if (is.null(mask)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerMask(label, mask) } m <- grid::grob(referenceLabel = label, name = name, cl = "mask") class(m) <- unique(c("pushMask", class(m))) if (draw) grid.draw(m) invisible(m) } # High level functions for applying opacity masks to grobs grid.mask <- function(path, mask = NULL, label = NULL, group = TRUE, redraw = FALSE, strict = FALSE, grep = FALSE, global = FALSE) { if (is.null(label) & is.null(mask)) { stop("At least one of 'label' or 'mask' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.mask") registerMask(label, mask) mask <- NULL # use the ref from now on } else if (is.null(mask)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerMask(label, mask) mask <- NULL # use the ref from now on } grobApply(path, function(path) { grid.set(path, maskGrob(grid.get(path), mask = mask, label = label, group = group), redraw = redraw) }, strict = strict, grep = grep, global = global) invisible() } maskGrob <- function(x, mask = NULL, label = NULL, group = TRUE) { if (is.null(label) & is.null(mask)) { stop("At least one of 'label' or 'mask' must be supplied") } else if (is.null(label)) { label <- getNewLabel("gridSVG.mask") registerMask(label, mask) } else if (is.null(mask)) { checkForDefinition(label) } else { checkExistingDefinition(label) registerMask(label, mask) } x$referenceLabel <- c(x$referenceLabel, label) # Attribs to be garnished *at draw time*. In particular needs to be # done because the label ID is not known until then, because of things # like prefixes and separators. x$maskLabel <- label x$maskGroup <- group class(x) <- unique(c("masked.grob", class(x))) x } mask <- function(grob, x = unit(0.5, "npc"), y = unit(0.5, "npc"), width = unit(1, "npc"), height = unit(1, "npc"), default.units = "npc", just = "centre", hjust = NULL, vjust = NULL) { if (! is.unit(x)) x <- unit(x, default.units) if (! is.unit(y)) y <- unit(y, default.units) if (! is.unit(width)) width <- unit(width, default.units) if (! is.unit(height)) height <- unit(height, default.units) mask <- list(grob = grob, x = x, y = y, width = width, height = height, just = just, hjust = hjust, vjust = vjust) class(mask) <- "mask" mask } registerMask <- function(label, mask = NULL, ...) { checkExistingDefinition(label) refDefinitions <- get("refDefinitions", envir = .gridSVGEnv) if (is.null(mask)) { mask <- gridSVG::mask(...) } else if (! inherits(mask, "mask")) { stop("'mask' must be a 'mask' object") } if (is.null(mask$grob)) stop("A grob must be given for a mask definition") # Now convert *at time of definition* to absolute units (inches) loc <- leftbottom(mask$x, mask$y, mask$width, mask$height, mask$just, mask$hjust, mask$vjust, NULL) x <- loc$x y <- loc$y width <- convertWidth(mask$width, "inches") height <- convertHeight(mask$height, "inches") # Note: grob must be forced to fix the definition of the grob # at the time of registration defList <- list(label = label, id = getID(label, "ref"), x = x, y = y, width = width, height = height, grob = grid.force(mask$grob), vp = getAbsoluteVp()) class(defList) <- "maskDef" refDefinitions[[label]] <- defList assign("refDefinitions", refDefinitions, envir = .gridSVGEnv) assign("refUsageTable", rbind(get("refUsageTable", envir = .gridSVGEnv), data.frame(label = label, used = FALSE, stringsAsFactors = FALSE)), envir = .gridSVGEnv) # Return NULL invisibly because we don't actually care what the # definition looks like until gridSVG tries to draw it. invisible() } primToDev.masked.grob <- function(x, dev) { setLabelUsed(x$referenceLabel) label <- getLabelID(x$maskLabel) mg <- garnishGrob(x, "mask" = paste0("url(#", label, ")"), group = x$maskGroup) # Now need to remove all mask appearances in the class list. # This is safe because repeated masking just clobbers existing # attributes. cl <- class(mg) class(mg) <- cl[cl != "masked.grob"] primToDev(mg, dev) } primToDev.mask <- function(x, dev) { setLabelUsed(x$referenceLabel) devStartMaskGroup(list(name = getID(x$name, "grob"), mask = x$referenceLabel, classes = x$classes), NULL, dev) } drawDef.maskDef <- function(def, dev) { grob <- def$grob # This is always going to be true because we basically assume that # referenced content is fixed and therefore the names don't really # matter. if (get("use.gPaths", envir = .gridSVGEnv)) grob$name <- paste(def$label, grob$name, sep = getSVGoption("gPath.sep")) # Start mask devStartMask(devGrob(def, dev), NULL, dev) # Draw grob grobToDev(grid.force(grob), dev) # Close mask devEndMask(devGrob(def, dev), NULL, dev) } devGrob.maskDef <- function(x, dev) { list(x=cx(x$x, dev), y=cy(x$y, dev), width=cw(x$width, dev), height=ch(x$height, dev), name=x$id) } svgStartMaskGroup <- function(id = NULL, mask = NULL, classes = NULL, svgdev = svgDevice()) { maskID <- paste0("url(#", getLabelID(mask), ")") attrs <- attrList(list(id = prefixName(id), svgClassList(classes), mask = maskID)) m <- newXMLNode("g", attrs = attrs, parent = svgDevParent(svgdev)) svgDevChangeParent(m, svgdev) } svgStartMask <- function(id = NULL, x=0, y=0, width=0, height=0, svgdev = svgDevice()) { mask <- newXMLNode("mask", attrs = list(id = id, x = round(x, 2), y = round(y, 2), width = round(width, 2), height = round(height, 2), maskUnits = "userSpaceOnUse"), parent = svgDevParent(svgdev)) svgDevChangeParent(mask, svgdev) } svgEndMask <- function(svgdev = svgDevice()) { # Go up one levels from mask to defs svgDevChangeParent(xmlParent(svgDevParent(svgdev)), svgdev) } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/MD5�����������������������������������������������������������������������������������������0000644�0001762�0000144�00000015601�14402464642�012100� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������fec02939925b43bb834c0ba0dec2d407 *DESCRIPTION 50b304cc5eb73aeaed413f3a2a151543 *NAMESPACE e440d5f8086540130b160855cc636a0d *R/MathML.R 184a2488e8ea2450691dd6ee788c87fc *R/aaa.R e63862e1563b266dd46169550ecfd181 *R/animate.R b212b754e7d56b44a45846958f195263 *R/attrib.R 2afd766655813068aea44afbc21db6d8 *R/b64.R 66e8d93b216aeaec529da47b08a1a513 *R/clipmask.R f22f176156b7131171669c3bd875926c *R/comment.R 4130578d4f7d8c3545529686ca004777 *R/convert.R 8cb4acdaa7359674d6386f3c9eb44f89 *R/coords.R dc54ca2bce22216d5a7b20c5d2f679e2 *R/dev.R 1e4e4bfe4aa46fdc4b8579b0dc7bdccf *R/devsvg.R 9c0eae3158de3b4bbab6bc2eb61f0105 *R/element.R a85a932e56c338a1e5c2ddad5b84efac *R/filters.R 3c61bbcc1ee029a4d288f7da34ff1825 *R/gradients.R aa8f3c2f607fd70406f6e3d6ddc0a985 *R/griddev.R 7809724bf87081082b62e4a224ea8dbc *R/gridsvg.R 14048aeec7d54ef79dafde8b4ee8b507 *R/gtable.R 89537d57aa0e1210fdebd6f323a7f143 *R/hyper.R 7ce613b928993a06ca2570d3657458b6 *R/mapping.R caf3e34f8ac91943928943eb458e2c24 *R/options.R f7f6f5f795023cbed81facc7e5a5b9a2 *R/patterns.R e32c7d1dcecd2db0a3f04805094c7dd1 *R/progress.R 27ea7296352ccaf7ad8816466fc98c24 *R/refs.R a3955afa68ebdd288af0c55682faeabf *R/sanitisers.R d620018bb1505e397cda73f940490689 *R/script.R af81602333d85f844a3013acd52149b6 *R/svg.R 7ab3487c54d6a14c25a8a0db6392b7c6 *R/svgStrings.R f4e77caf38383e872e530df688883c21 *R/zzz.R 32f5efb7f12c467e7835d1e0aa1d623e *build/vignette.rds 6038af5607fc65e40b996235271f9357 *inst/NEWS.Rd 6893e658e779057c2adcf56d81ebac69 *inst/doc/Makefile 2cb8f0d3adaec82d0180087ac9432154 *inst/doc/animation.R 057a85a0f37f9e0e6dc028e0767ce68c *inst/doc/animation.Rnw 03ec655d0f473c80c2e1e1dece797d37 *inst/doc/animation.pdf 7125d362ab24bd7289e20cc297643594 *inst/doc/extensibility.R 9a20dfe04816ae5a3f2b601b3fe092cd *inst/doc/extensibility.Rnw 83379ace44236c6ef2fa3ac826426e67 *inst/doc/extensibility.pdf f6c8caa9d7dd128ff1f9304a39f883b5 *inst/doc/gridSVG.R e019ea7dc398b352a803cf3a28e53ecb *inst/doc/gridSVG.Rnw 2949b8c1b16689d02cf663be605c5b72 *inst/doc/gridSVG.pdf a0d05eb085ad6ec74ff60dedd111f210 *inst/js/utils.js 6a2970881555127cafe615cf6aea7b08 *inst/svg/genAttrTable.txt df7fd50ea1d5c06e16c85f496dd271ab *inst/svg/presAttrTable.txt 2605b94d65829d6cfac2a1b3d74e4f3c *man/animUnit.Rd 29c0d2f90071c2a4c1a544c7a3e862a9 *man/animate.Rd 54686c0667a10fe4ecb9f2a95fbbe862 *man/convert.Rd 5a85277ed4cb27d2af7ba373666d27d6 *man/coords.Rd ab775a15004faab59c4811c0f03e43e0 *man/fe.Rd 69524dba4d8e09ea78e8be4e0b81d404 *man/feBlend.Rd 4c5df0b2a344c35be206a6febf295b19 *man/feColorMatrix.Rd cb7b9cd147195aca2e86d2b1316905ed *man/feComponentTransfer.Rd c07bd99bb67b7adcd0753e62490caaef *man/feComposite.Rd 6d693bd281456b34012c6154237b8615 *man/feConvolveMatrix.Rd ae09a34c39e2d45895992c7672c2d4b0 *man/feDiffuseLighting.Rd d1a824fa4f58af89428990af60381c4e *man/feDisplacementMap.Rd 00d906e7a78d50836238798903d8cfbc *man/feDistantLight.Rd 7d85d2e54922d2d816301430d7a52703 *man/feFlood.Rd b38a095b0cf37b6dd711a113efdf1f48 *man/feGaussianBlur.Rd c5ec1b7a73ec8c0518ca7567be676b27 *man/feImage.Rd c9ad908663ed01cdd9afd896c89f6330 *man/feMerge.Rd 975c24a90e0ef34290542cd81524c0f9 *man/feMorphology.Rd 254f608bb5aa7388136e0d645721ce21 *man/feOffset.Rd 6ca6808a0f4ebcf35e860375c92c2fe5 *man/fePointLight.Rd 684522eae7147d3eec18daf48791313e *man/feSpecularLighting.Rd 0b839c1252e792755b3ce9687087d730 *man/feSpotLight.Rd 90c3f838997891bb34e002b0ce0f7a80 *man/feTile.Rd fdfbdcfe7ec5a3187223452b27fcf510 *man/feTurbulence.Rd 7e980825fb20e567b84df4ca948c43da *man/filterEffect.Rd 33595c1f1e861608486b73fd8face53f *man/filterInputs.Rd 6c9676a8578d9f32192c5f79a2e84ee9 *man/garnish.Rd 009c753f91b2b4d2ba0cf8a92e398355 *man/getSVGFonts.Rd fb9ae45debe5a79ab41ccf20e6f429ba *man/getSVGMappings.Rd 0cbffcfcc9940c70cb19f40c3b9cceec *man/gradients.Rd 50ba25a1289af4eb150350f74976846b *man/grid.animate.Rd ee6565cc659e52e11cfda90de75f2731 *man/grid.clipPath.Rd d6000085e25a2db881944e14cbf94ca8 *man/grid.comment.Rd 8200b5bcc2d3b272900eefb337651e8e *man/grid.element.Rd 3f3ba60e15815c9f35b7701699bc2766 *man/grid.export.Rd c1ae86d75403aea705cea957d2c9a82b *man/grid.filter.Rd b95484121689b630ac4d8dd56eee78bd *man/grid.garnish.Rd 55c4f7c5d29dd55587c9be0af333fa5f *man/grid.gradientFill.Rd d7a263fcffe55138a3a2fac2df0dd86b *man/grid.hyperlink.Rd 527ab1711c7fc9ce7938329e4fdffafc *man/grid.mask.Rd e4172826001cd568c8312413612ea1eb *man/grid.patternFill.Rd bc4564ce39d7a0b2b132a2dbadf88e95 *man/grid.script.Rd 0be32ede4385f7cad7e3c89680ea6641 *man/gridSVG-internal.Rd 1dccea5bd62a41f4f2bd50fcd3e50914 *man/gridSVG.newpage.Rd 2cbf462421d3a2a399ed7dd8b67a6258 *man/gridSVGMappings.Rd 1c0fb87010657ecf4788995359ae4275 *man/gridsvg.Rd d9f8d5155595f31039fb72c28493bc74 *man/grobToDev.Rd e5b8f71df56d2a98e7cf8c8705047a83 *man/listSVGDefinitions.Rd f7c53bce018871bd94c932ff69d2b28d *man/popContext.Rd dd6bd2a2f353f1abb49c81a677373bd4 *man/primToDev.Rd 78142ae68ec68b6d462b58f93800f883 *man/pushClipPath.Rd de54fbc4785e65b3d7fd8d1cd7e788c7 *man/pushMask.Rd 2fb3c4e5cdcd1b34a6be244d56904c29 *man/readCoordsJS.Rd 7200ec6a262dc9a606d08fca9c2fb9f5 *man/readMappingsJS.Rd 82dd911923a910ef7bb29cf6dbcf6755 *man/registerClipPath.Rd 4635f190d2342463a55077c139e5f55a *man/registerFilter.Rd 492b0ad8b4b08e3ddf520091a49c28dd *man/registerGradientFill.Rd d0dedfbef926e8392262866ccce88659 *man/registerMask.Rd 56c22692d60bf587a8ac3d3b60efdec9 *man/registerPatternFill.Rd 0f2a2771862011f725e574aa62065e92 *man/setSVGoptions.Rd cce9618faff0a0a0365bc032a1b0809f *man/viewportCreate.Rd 9aa59d73abe414c7333583281626e61e *tests/test.script 71fbb18e38a41b5f3ce06f1dcc855f0b *tests/testanimate.R 0fba88a56ac2bf7079fe51ac2211546f *tests/testattrib.R f6f962a69d47d49b0fee4c007b3196a5 *tests/testball.R 1500188c9066759a7cc4f21b048f10c0 *tests/testclasses.R 4a69fbdc0f9b583baf2ac4d82c26f50e *tests/testclippath.R 3211a4b3dfb4c49a88c39b9f543db98d *tests/testcomment.R 0dcf5e080c0adb714a585dc1fd34132b *tests/testelement.R 668022374403ed92f79ad7b33860b64d *tests/testfilter.R 3225ff0b68bc5c42a785909a8081f317 *tests/testforce.R 411c1e76e7cb93c96dd32a08b8cda1f9 *tests/testgradientfill.R 2198e3689860cd80ba3d95c6c1c158fa *tests/testgrid.R d2605ccd3e13d2228a66929e9d930c6f *tests/testid.R b545a2e79ef7aa9f27c7e5ea26366a67 *tests/testlink.R 295bf0947f6e9bf984fea4e876c5dbc1 *tests/testmask.R a5dec3ed4c347dde195ef0de2bfd394b *tests/testpath.R 5641b302bbedebcb58ef48922806992a *tests/testpatternfill.R 766a28d1aea840179f464d28a51ab7a8 *tests/testpendulum.R d2686dfe593ed59082baf05d08455ba1 *tests/testplot.R 5d602bf58a22f9992f8a228cbb19e838 *tests/testplotmath.R ff60c749a98e55b7246e981c79b6e146 *tests/testpolyline.R 82aa80b13df456252582e92f040da118 *tests/testprefix.R 37d34feb7ab64698d9c112f5a32a8a2a *tests/testrotate.R 9ba28a8b16c67bf7f79813366de22b25 *tests/testsvg.R 771adc295d8fdc7e35ba003e9c3fda32 *tests/testtransparency.R a584e8aa0525478382132390ada0e637 *tests/testvp.R 057a85a0f37f9e0e6dc028e0767ce68c *vignettes/animation.Rnw 9a20dfe04816ae5a3f2b601b3fe092cd *vignettes/extensibility.Rnw e019ea7dc398b352a803cf3a28e53ecb *vignettes/gridSVG.Rnw �������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/���������������������������������������������������������������������������������������0000755�0001762�0000144�00000000000�12765642435�012552� 5����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/doc/�����������������������������������������������������������������������������������0000755�0001762�0000144�00000000000�14402222222�013271� 5����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/doc/gridSVG.Rnw������������������������������������������������������������������������0000654�0001762�0000144�00000024351�12240527565�015314� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\documentclass[a4paper]{article} %\VignetteIndexEntry{gridSVG} \newcommand{\grid}{{\tt grid}} \newcommand{\gridSVG}{{\tt gridSVG}} \newcommand{\lattice}{{\tt lattice}} \newcommand{\R}{{\tt R}} \setlength{\parindent}{0in} \setlength{\parskip}{.1in} \title{The gridSVG package} \author{Paul Murrell} \begin{document} \maketitle @ \section*{Introduction} This package is an experiment in writing a graphics device, purely in R code, for the grid graphics system. The specific device implemented is for the W3C SVG (Scalable Vector Graphics) format, but there is also some effort at a general device interface that would support other specific devices. \section*{User Interface} There are five functions of interest to the user: \begin{description} \item[{\tt grid.hyperlink}] takes a grid {\tt grob} and turns it into an object of class {\tt linked.grob}, with an associated {\tt href}. This allows the association of hyperlinks with elements of a grid graphic. See {\tt gridSVG/tests/testlink.R} for examples. \item[{\tt grid.animate}] allows the user to associate a duration (plus some other things) with certain aspects of a grid {\tt grob}. This allows a grid graphic element to be animated. See {\tt gridSVG/tests/testanimate.R} {\tt testpendulum.R} and {\tt testball.R} for examples. \item[{\tt grid.garnish}] allows the user to associate arbitrary SVG attributes with a grid {\tt grob}. This provides a way to associate with a grob things that have no corresponding grid concept, like an {\tt onclick} attribute. See {\tt gridSVG/tests/testattrib.R} for a simple example. \item[{\tt grid.script}] allows the user to create a grid {\tt grob} that contains an SVG script (e.g., some ECMAscript code). This provides a way to produce a complete SVG document (complete with scripts) entirely using R grid code (i.e., without having to hand edit the SVG file that \gridSVG{} creates. Again, see {\tt gridSVG/tests/testattrib.R} for a simple example. \item[{\tt gridToSVG()}] saves the current grid graphic to an SVG file. See the {\tt gridSVG/tests} directory for examples of what can be done. See the section ``Known Problems'' below for things that are not yet supported. \end{description} In addition to these functions, \gridSVG{} supports alpha-transparency by respecting the {\tt alpha} graphical parameter which can be specified in a \grid{} {\tt gpar} object. For example, the following code produces overlapping transparent circles\footnote{The {\tt pushViewport()} call is currently necessary to set some default values. It may be possible to remove this in future versions.}: <>= library(grid) library(gridSVG) <>= pushViewport(viewport(gp=gpar(col="black", fill=NA))) grid.circle(x=0.33, r=unit(2, "inches"), gp=gpar(alpha=0.3, fill="red")) grid.circle(x=0.67, r=unit(2, "inches"), gp=gpar(alpha=0.3, fill="green")) popViewport() gridToSVG() @ \section*{Internal Structure} There are nine {\tt .R} files in the {\tt gridSVG/R} directory, corresponding to the nine different things that gridSVG aims to provide: \begin{description} \item[dev.R] This contain (S4 methods) code defining a generic R-level graphics device interface. In other words, generic functions that may be called by a graphics system (such as grid), and that a graphics device (such as an SVG device) should provide methods for. \item[griddev.R] Code for running through the grid display list and calling generic device functions. \item[devsvg.R] Code implementing SVG methods for the generic device interface. \item[svg.R] A set of R-level functions for producing SVG output. Callable directly (see, e.g., {\tt gridSVG/tests/testsvg.R}), but mostly just called by code in {\tt devsvg.R}. \item[gridsvg.R] The function {\tt gridToSVG()}. \item[hyper.R] Code implementing the {\tt linked.grob} class -- i.e., an extension of the standard grid {\tt grob} that supports hyperlinks. Includes the function {\tt grid.hyperlink()}. \item[animate.R] Code implementing the {\tt animated.grob} class -- i.e., an extension of the standard grid {\tt grob} that supports animation. Includes the function {\tt grid.animate()}. \item[script.R] Code implementing the {\tt script} class -- i.e., an extension of the standard grid {\tt grob} that supports SVG scripts. Includes the function {\tt grid.script()}. \item[attrib.R] Code implementing the {\tt svg.grob} class -- i.e., an extension of the standard grid {\tt grob} that supports arbitrary SVG attributes. Includes the function {\tt grid.garnish()}. \end{description} \section*{Known Problems} This package is a partial implementation of several ideas. This section describes some of the known holes in and issues with the implementation. \subsection*{Overall Design} The package is ass-backwards in its design. Normal devices receive calls from grid to perform operations; gridSVG works off grid's display list so only has the information stored there to figure out what to do. This means that it has to replicate some of the work that grid does when grid draws (e.g., in order to enforce vp slots in grobs). If/when normal devices are implemented as R-level objects, so that grid includes a {\tt dev} argument in all its calls to devices, it may be possible to make gridSVG behave more like a normal device and this may lead to some simplifications. \subsection*{Sizing of and units in the SVG image} Software that tries to render SVG on a device has the same problem that \R{} graphics devices have when trying to render \grid{} output: Locations and sizes can be in a variety of units (cm, inches, percentages, ...) {\it some of which are physical units} with real-world meaning. The renderer has to figure out how big something like 1{\tt "} is in the native device units. This problem is worst on computer screens where it is not necessarily easy (or possible) to find out how many pixels there are in a physical inch on the screen. What \R{} does is try its best and it seems that SVG renderers must do the same\footnote{According to Section 7.1 Introduction of the W3C Scalable Vector Graphics (SVG) 1.0 Specification, ``a real number value that indicates the size in real world units, such as millimeters, of a "pixel"'' is ``highly desirable but not required''.}. gridSVG works off the grid display list. This means that the image must first be drawn on some other device (e.g., X11 or PostScript) then copied (via the {\tt gridSVG()} function) to an SVG format. It is not possible to use the SVG notion of transformations to mirror \grid{}'s viewport transformations because the SVG transformations work on ALL graphical elements, including text. In particular, any scaling transformations scale the size of text. Furthermore, \grid{} actions such as {\tt upViewport()} and {\tt downViewport()} are difficult to replicate as SVG transformations. So the copying of \grid{} output to SVG involves converting all locations and sizes to a single SVG coordinate system. There are two (serious) possibilities for this coordinate system: \begin{enumerate} \item specify everything (including the size of the SVG image) in pixels. In this case, what we do is work off the original device's concept of a pixel. The SVG image may be rendered quite a different size compared to the original if the size of pixels on the rendering device is different from the size of pixels on the original device. Things should be pretty consistent -- something that is supposed to be half the size of the image should be rendered half the size of the image -- though this will {\it not} be the case if the change in pixel size is different for x- and y-axes. An image drawn first in a screen window then copied to SVG and viewed {\it on the same screen} should hopefully be the same size. If the original device is a screen device, there is no guarantee that physical sizes will be respected; this will depend on how accurately the screen device can determine the physical size of its pixels. If the original device is a file device (e.g. PostScript) then physical sizes will be accurate on the original device, BUT the correspondence between ``pixels'' on the file device and pixels when the SVG is rendered on screen is very unlikely to be good (e.g., ``pixels'' on PostScript are $\frac{1}{72}${\tt "}, which is highly unlikely to correspond to pixel size on a modern screen). \item specify everything (including the size of the SVG image) in inches. In this case, there is no guarantee that the SVG image will end up the right physical size (it will depend on whether the rendering software can find out enough about pixels-to-inches, BUT everything should be in proportion (if the image is overall a little smaller than it should be, at least something that should be half the size of the image will be half the size of the image. The final rendered size of the image will totally depend on where it gets rendered\footnote{This is not to say that it should be riciculously off; it should be pretty close to the right physical size if it's not exactly the right size.}. This appears to have fewer problems; unfortunately it is {\bf totally killed} by the fact that the locations for drawing polylines MUST be in pixels! (technically, that should be ``user coordinates'', but since I have a single, flat coordinate system structure, it equates to pixels.) \end{enumerate} \subsection*{Plotting Symbols} Only {\tt pch=1} and {\tt pch=3} are currently supported. This is just a matter of filling in the other options. \subsection*{Mathematical Annotation} The use of things like {\tt grid.text(expression(x[i]))} is supported in the main R graphics engine. gridSVG bypasses that and so does not support mathematical annotation (and probably never will!). \subsection*{Time unit arithmetic} Animation is no longer achieved via ``time units'' so old problems with arithmetic on time units in previous versions of \gridSVG{} disappear (i.e., the user does not need to be as careful when doing animation; just specify some unit values and/or expressions and it should go.) Having said that, there is still only support for animating a small set of aspects of grid {\tt grob}s (basically the locations and sizes of {\tt grob}s. \subsection*{Acknowledgements} Many thanks to Nathan Whitehouse and colleagues who contributed ideas and code for including arbitrary SVG attributes and SVG scripts. \end{document} ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/doc/extensibility.R��������������������������������������������������������������������0000644�0001762�0000144�00000016673�14402222221�016324� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������### R code from vignette source 'extensibility.Rnw' ################################################### ### code chunk number 1: extensibility.Rnw:32-34 ################################################### library(grid) library(gridSVG) ################################################### ### code chunk number 2: extensibility.Rnw:60-61 ################################################### tg <- grob(name="tg", cl="timegrob") ################################################### ### code chunk number 3: extensibility.Rnw:67-71 ################################################### timegrob <- function(x) { textGrob(paste("text generated at", Sys.time(), sep="\n"), gp=x$gp, name=x$name) } ################################################### ### code chunk number 4: extensibility.Rnw:77-80 ################################################### drawDetails.timegrob <- function(x, ...) { grid.draw(timegrob(x)) } ################################################### ### code chunk number 5: simplegrob ################################################### grid.draw(tg) ################################################### ### code chunk number 6: extensibility.Rnw:110-112 ################################################### bt <- grob(x=unit(.5, "npc"), y=unit(.5, "npc"), label="hi", name="bt", cl="boxedtext") ################################################### ### code chunk number 7: extensibility.Rnw:117-126 ################################################### boxedtext <- function(x) { tg <- textGrob(x$label, x$x, x$y, name=paste(x$name, "text", sep=".")) rg <- rectGrob(x$x, x$y, width=grobWidth(tg) + unit(2, "mm"), height=grobHeight(tg) + unit(2, "mm"), name=paste(x$name, "rect", sep=".")) gTree(children=gList(tg, rg), gp=x$gp, name=x$name) } ################################################### ### code chunk number 8: extensibility.Rnw:130-133 ################################################### drawDetails.boxedtext <- function(x, ...) { grid.draw(boxedtext(x)) } ################################################### ### code chunk number 9: notsimplegrob ################################################### grid.draw(bt) ################################################### ### code chunk number 10: extensibility.Rnw:178-181 ################################################### primToDev.timegrob <- function(x, dev) { primToDev(timegrob(x), dev) } ################################################### ### code chunk number 11: extensibility.Rnw:187-190 ################################################### grid.newpage() grid.draw(tg) gridToSVG("simpleclass.svg") ################################################### ### code chunk number 12: extensibility.Rnw:199-200 ################################################### library(XML) ################################################### ### code chunk number 13: extensibility.Rnw:203-205 ################################################### simpleclasssvg <- xmlParse("simpleclass.svg") cat(saveXML(simpleclasssvg)) ################################################### ### code chunk number 14: extensibility.Rnw:227-230 ################################################### primToDev.boxedtext <- function(x, dev) { primToDev(boxedtext(x), dev) } ################################################### ### code chunk number 15: extensibility.Rnw:236-239 ################################################### grid.newpage() grid.draw(bt) gridToSVG("notsimpleclass.svg") ################################################### ### code chunk number 16: extensibility.Rnw:244-246 ################################################### notsimpleclasssvg <- xmlParse("notsimpleclass.svg") cat(saveXML(notsimpleclasssvg)) ################################################### ### code chunk number 17: extensibility.Rnw:280-286 ################################################### animate.timegrob <- function(x, ...) { tg <- timegrob(x) tg$animationSets <- x$animationSets tg$groupAnimationSets <- x$groupAnimationSets animate(tg, ...) } ################################################### ### code chunk number 18: extensibility.Rnw:293-297 ################################################### grid.newpage() grid.draw(tg) grid.animate("tg", x=c(.3, .7)) gridToSVG("animsimpleclass.svg") ################################################### ### code chunk number 19: extensibility.Rnw:305-307 ################################################### animsimpleclasssvg <- xmlParse("animsimpleclass.svg") cat(saveXML(animsimpleclasssvg)) ################################################### ### code chunk number 20: extensibility.Rnw:325-337 ################################################### animate.boxedtext <- function(x, ...) { bt <- boxedtext(x) bt$groupAnimationSets <- x$groupAnimationSets animate(bt, ...) # Animate the children of bt btrect <- getGrob(bt, "bt.rect") btrect$animationSets <- x$animationSets animate(btrect, ...) bttext <- getGrob(bt, "bt.text") bttext$animationSets <- x$animationSets animate(bttext, ...) } ################################################### ### code chunk number 21: extensibility.Rnw:347-353 ################################################### grid.newpage() grid.draw(bt) grid.animate("bt", x=c(.3, .7)) grid.animate("bt", visibility=c("visible", "hidden"), begin=1, duration=0.1, group=TRUE) gridToSVG("animnotsimpleclass.svg") ################################################### ### code chunk number 22: extensibility.Rnw:358-360 ################################################### animnotsimpleclasssvg <- xmlParse("animnotsimpleclass.svg") cat(saveXML(animnotsimpleclasssvg)) ################################################### ### code chunk number 23: extensibility.Rnw:391-397 ################################################### garnish.timegrob <- function(x, ...) { tg <- timegrob(x) tg$attributes <- x$attributes tg$groupAttributes <- x$groupAttributes garnish(tg, ...) } ################################################### ### code chunk number 24: extensibility.Rnw:405-409 ################################################### grid.newpage() grid.draw(tg) grid.garnish("tg", onmousedown="alert('ouch')") gridToSVG("garnishsimpleclass.svg") ################################################### ### code chunk number 25: extensibility.Rnw:414-416 ################################################### garnishsimpleclasssvg <- xmlParse("garnishsimpleclass.svg") cat(saveXML(garnishsimpleclasssvg)) ################################################### ### code chunk number 26: extensibility.Rnw:423-429 ################################################### garnish.boxedtext <- function(x, ...) { bt <- boxedtext(x) bt$attributes <- x$attributes bt$groupAttributes <- x$groupAttributes garnish(bt, ...) } ################################################### ### code chunk number 27: extensibility.Rnw:443-449 ################################################### grid.newpage() grid.draw(bt) grid.garnish("bt", onmousedown="alert('ouch')") grid.garnish("bt", onmouseover=c(bt.text="alert('watch it!')"), group=FALSE) gridToSVG("garnishnotsimpleclass.svg") ################################################### ### code chunk number 28: extensibility.Rnw:454-456 ################################################### garnishnotsimpleclasssvg <- xmlParse("garnishnotsimpleclass.svg") cat(saveXML(garnishnotsimpleclasssvg)) ���������������������������������������������������������������������gridSVG/inst/doc/extensibility.Rnw������������������������������������������������������������������0000654�0001762�0000144�00000036463�12240527565�016712� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\documentclass[a4paper]{article} %\VignetteIndexEntry{extensibility} \newcommand{\grid}{{\bf grid}} \newcommand{\gridSVG}{{\sf gridSVG}} \newcommand{\lattice}{{\bf lattice}} \newcommand{\R}{{\sf R}} \newcommand{\js}{{\sf javascript}} \newcommand{\svg}{{\sf SVG}} \newcommand{\code}[1]{{\tt #1}} \setlength{\parindent}{0in} \setlength{\parskip}{.1in} \title{Extending the gridSVG package} \author{Paul Murrell} \begin{document} \maketitle @ \section*{Introduction} It is sometimes useful or necessary for the user/developer to define a new grob (or gTree) class. The \gridSVG{} package only knows about the classes in the \grid{} package (basic graphical primitives, gTrees, plus a few others like frames and cell grobs). This means that \gridSVG{} cannot export, or animate, or garnish new grob classes without additional information. This document describes how to write methods for a new grob class to work with \gridSVG{}. <<>>= library(grid) library(gridSVG) @ The assumption in this document is that a new class has been made because there is a need to have a special \code{drawDetails()} method (because what the class draws has to be determined at drawing time rather than at grob creation time). There should not be any need for the information in this document if you have grobs or gTrees that are entirely defined at time of creation (so do not need any \code{drawDetails()} methods). Those cases should be handled by the \gridSVG{} package already. Users wanting to garnish or animate pieces of your scene should be able to get at whatever components of the scene that they need using gPaths (assuming that you have named all your grobs properly). \subsection*{Simple class example} A simple case is one where the grob being created (at drawing time) is just a simple graphical primitive. For example, the following (contrived) code defines a new class of (text) grob, a \code{timegrob} class, that writes out the time that its text is generated (see Figure \ref{figure:simplegrob}). <<>>= tg <- grob(name="tg", cl="timegrob") @ Because we will be able to reuse it later, we will write a function to create the grob at drawing time. <<>>= timegrob <- function(x) { textGrob(paste("text generated at", Sys.time(), sep="\n"), gp=x$gp, name=x$name) } @ The \code{drawDetails()} method for this new class just calls the \code{timegrob()} function to create a text grob and then draws that grob. <<>>= drawDetails.timegrob <- function(x, ...) { grid.draw(timegrob(x)) } @ Drawing the \code{timegrob} object calls the \code{drawDetails()} method above. <>= grid.draw(tg) @ \begin{figure} \begin{center} \includegraphics[width=2in]{extensibility-simplegrob} \caption{\label{figure:simplegrob}A simple new grob class that draws the time that its text was generated.} \end{center} \end{figure} The important thing about this class is that the grob that is being generated in the \code{drawDetails()} method is just a simple \code{text} grob. \subsection*{Not simple class example} A slightly more complex case is when a new grob class actually generates a gTree in its \code{drawDetails()} method. For example, the following code defines a new class, called \code{boxedtext}, that creates a gTree containing text and a bounding box (at drawing time so that the box can be created from the current size of the text, in case the text has been edited; see Figure \ref{figure:notsimplegrob}). <<>>= bt <- grob(x=unit(.5, "npc"), y=unit(.5, "npc"), label="hi", name="bt", cl="boxedtext") @ Again, it will be useful to have a function that creates the gTree. <<>>= boxedtext <- function(x) { tg <- textGrob(x$label, x$x, x$y, name=paste(x$name, "text", sep=".")) rg <- rectGrob(x$x, x$y, width=grobWidth(tg) + unit(2, "mm"), height=grobHeight(tg) + unit(2, "mm"), name=paste(x$name, "rect", sep=".")) gTree(children=gList(tg, rg), gp=x$gp, name=x$name) } @ The \code{drawDetails()} method is again very simple. <<>>= drawDetails.boxedtext <- function(x, ...) { grid.draw(boxedtext(x)) } @ Drawing the \code{boxedtext} grob call the \code{drawDetails()} method whch creates a gTree, containing a text and bounding rectangle, and draws it. <>= grid.draw(bt) @ \begin{figure} \begin{center} \includegraphics[width=2in]{extensibility-notsimplegrob} \caption{\label{figure:notsimplegrob}A not simple new grob class that draws text with a bounding box.} \end{center} \end{figure} The important thing about this example is that it creates a gTree at drawing time. \section*{Exporting a new grob class to \svg{}} If \gridSVG{} knows nothing about a grob class then it will not export any SVG elements via \code{gridToSVG()}. The technique for telling \gridSVG{} about a new class varies depending on how complex the new class is. \subsection*{Exporting a simple class} The \code{primToDev()} generic function is the function that converts a simple grob into \svg{}. There are \code{primToDev()} methods for all of the standard \grid{} graphical primitives, but for grob classes that \gridSVG{} does not recognise, no \svg{} code will be generated. If the new class only creates a simple grob at drawing time then all that is required is to define a new method for the \code{primToDev()} generic that generates a standard grob and calls \code{primToDev()} on that. For example, the following code creates a method for the simple \code{timegrob} class. This method simply creates the required text grob and then calls \code{primToDev()} on that, which exports the normal \svg{} code for a text grob. <<>>= primToDev.timegrob <- function(x, dev) { primToDev(timegrob(x), dev) } @ The \code{gridToSVG()} function will call this method to produce the appropriate \svg{} code. <<>>= grid.newpage() grid.draw(tg) gridToSVG("simpleclass.svg") @ The \svg{} code is shown below. One important feature is that the \code{id} attributes of the \svg{} elements are sensible. This has happened because the \code{timegrob()} function that we wrote sets the name of the text grob that it creates from the name of the \code{textgrob} object. <>= library(XML) @ <>= simpleclasssvg <- xmlParse("simpleclass.svg") cat(saveXML(simpleclasssvg)) @ Another feature of the \code{timegrob()} function is that it sets the \code{gp} slot of the text grob from the \code{gp} slot of the \code{textgrob} object. This is important to make sure that any graphical parameter settings on the \code{textgrob} are exported properly to \svg{}. \subsection*{Exporting a not simple class} The solution for exporting a new class that creates a gTree at drawing time is very similar to the simple solution. We need to write a \code{primToDev()} method for the new class, the only difference being that this method should create a gTree (rather than just a standard graphical primitive grob). For example, the following code creates a method for the \code{boxedtext} class. This just calls \code{boxedtext()} to create a gTree containing the appropriate text and bounding rectangle and then calls \code{primToDev()} on that gTree. <<>>= primToDev.boxedtext <- function(x, dev) { primToDev(boxedtext(x), dev) } @ The \code{gridToSVG()} function will now generate \svg{} output from a \code{boxedtext} object. <<>>= grid.newpage() grid.draw(bt) gridToSVG("notsimpleclass.svg") @ The \svg{} output is shown below. <>= notsimpleclasssvg <- xmlParse("notsimpleclass.svg") cat(saveXML(notsimpleclasssvg)) @ \section*{Animating a new grob class} In addition to converting a \grid{} scene to \svg{} code, the \gridSVG{} package also provides a way to animate components of a \grid{} scene. The \code{grid.animate()} function allows the user to select a grob by name and provide animated values for features of the grob (e.g., a set of x-values for a circle grob). The \code{grid.animate()} function actually only attaches the animation information to a grob. The real action happens when \code{gridToSVG()} is called and that calls the \code{animate()} generic function. The purpose of that function is to generate \code{} elements in the \svg{} code. As with \code{primToDev()}, there are \code{animate()} methods that generate \code{} elements for all standard graphical primitives, but nothing will happen for a grob class that \gridSVG{} is unaware of. If we want a new (simple) grob class to be able to be animated, we need to write an \code{animate()} method for that grob class. For example, the following code defines an \code{animate()} method for the \code{timegrob} class. This is similar to the \code{primToDev()} method in that it creates a text grob and then calls \code{animate()} on that (to take advantage of the existing \code{animate()} method for text grobs). The only complication is that the animation information on the \code{timegrob} object must be transferred over to the new text grob (this is done in a brute force manner here; perhaps a nicer encapsulation will be provided in the future). <<>>= animate.timegrob <- function(x, ...) { tg <- timegrob(x) tg$animationSets <- x$animationSets tg$groupAnimationSets <- x$groupAnimationSets animate(tg, ...) } @ With this \code{animate()} method in place, the following code draws a \code{timegrob} object and then animates it so that it will move left-to-right across the screen. <<>>= grid.newpage() grid.draw(tg) grid.animate("tg", x=c(.3, .7)) gridToSVG("animsimpleclass.svg") @ The \svg{} code that is generated from this scene is shown below to show that the animation has been recorded in the \svg{} output (it's actually an \code{} element rather than an \code{} element for text grobs). <>= animsimpleclasssvg <- xmlParse("animsimpleclass.svg") cat(saveXML(animsimpleclasssvg)) @ For the case of a new gTree class, things are a little more complicated. Again, we need to write a new \code{animate()} method, but this function can be a bit more complicated because there may be animation information to apply to the gTree as a whole \emph{and} animation information to apply to just the children of the gTree. For example, the code below defines an \code{animate()} method for the \code{boexedtext} class. This creates a gTree containing a text grob and a bounding rect grob. The \code{groupAnimationSets} information is added to the gTree and then \code{animate()} is called on that to output an \code{} element for the entire gTree, \emph{plus} each child of the gTree is extracted, \code{animationSets} information added, and then \code{animate()} called to output \code{} elements for each child of the gTree. <<>>= animate.boxedtext <- function(x, ...) { bt <- boxedtext(x) bt$groupAnimationSets <- x$groupAnimationSets animate(bt, ...) # Animate the children of bt btrect <- getGrob(bt, "bt.rect") btrect$animationSets <- x$animationSets animate(btrect, ...) bttext <- getGrob(bt, "bt.text") bttext$animationSets <- x$animationSets animate(bttext, ...) } @ The following code makes use of this method to animate a \code{boxedtext} grob. The first call to \code{grid.animate()} makes both text and bounding rect move left-to-right across the screen. The second call to \code{grid.animate()} makes the whole gTree disappear after 1 second (once the text and rect have moved to the right of the screen). <<>>= grid.newpage() grid.draw(bt) grid.animate("bt", x=c(.3, .7)) grid.animate("bt", visibility=c("visible", "hidden"), begin=1, duration=0.1, group=TRUE) gridToSVG("animnotsimpleclass.svg") @ The resulting \svg{} code is shown below. <>= animnotsimpleclasssvg <- xmlParse("animnotsimpleclass.svg") cat(saveXML(animnotsimpleclasssvg)) @ \section*{Garnishing a new grob class} The \code{grid.garnish()} function provides a way for users to add interactivity to a \grid{} scene, by specifying (\js{}) event handlers for components of the scene. More generally, the function allows \grid{} grobs to be garnished with arbitrary \svg{} attributes. Like \code{grid.animate()}, all \code{grid.garnish()} does is attach the garnishing information to a grob. The appropriate \svg{} code is only generated when \code{gridToSVG()} is called. The crucial action happens in the generic function \code{garnish()}, which transfers the garnishing information to the \svg{} device that is writing out \svg{} code. As should be familiar by now, there are \code{garnish()} methods for standard \grid{} graphical primitives, but no svg{} attributes will be exported for grob classes that \gridSVG{} does not know about. Fortunately, \code{garnish()} methods are once again pretty easy to write. For example, the following code defines a method for the \code{timegrob} class. This is very much like an \code{animate()} method: a text grob is created, the garnishing information is added to the text grob, then \code{garnish()} is called on the text grob so that the method for text grobs takes care of transferring the \svg{} attributes to the \svg{} device. <<>>= garnish.timegrob <- function(x, ...) { tg <- timegrob(x) tg$attributes <- x$attributes tg$groupAttributes <- x$groupAttributes garnish(tg, ...) } @ The following code shows the new method in action. A \code{timegrob} is drawn, then \code{grid.garnish()} is called to specify that a mouse click on the text should pop an alert dialog. <<>>= grid.newpage() grid.draw(tg) grid.garnish("tg", onmousedown="alert('ouch')") gridToSVG("garnishsimpleclass.svg") @ The resulting \svg{} code is shown below. <>= garnishsimpleclasssvg <- xmlParse("garnishsimpleclass.svg") cat(saveXML(garnishsimpleclasssvg)) @ The method is just as simple for a custom gTree class as well, as shown by the \code{garnish()} method for the \code{boxedtext} class below. <<>>= garnish.boxedtext <- function(x, ...) { bt <- boxedtext(x) bt$attributes <- x$attributes bt$groupAttributes <- x$groupAttributes garnish(bt, ...) } @ The following code shows this method in action, with an additional demonstration of the difference between garnishing individual components of a \grid{} scene and garnishing the overall parent component. A \code{boxedtext} grob is drawn, then the first call to \code{grid.garnish()} ensures that a mouse click on any part of the text or bounding box will produce an alert dialog. The second call to \code{grid.garnish()} sets up a different interaction on just the text so that moving the mouse over the text pops up a different dialog. <<>>= grid.newpage() grid.draw(bt) grid.garnish("bt", onmousedown="alert('ouch')") grid.garnish("bt", onmouseover=c(bt.text="alert('watch it!')"), group=FALSE) gridToSVG("garnishnotsimpleclass.svg") @ The resulting \svg{} code is shown below. <>= garnishnotsimpleclasssvg <- xmlParse("garnishnotsimpleclass.svg") cat(saveXML(garnishnotsimpleclasssvg)) @ \section*{Extending complex classes} A more complex case is one where a new grob class defines its own \code{preDrawDetails()} or \code{postDrawDetials()} methods. If that is the case, then it will be necessary to write a \code{grobToDev()} method for the class, just to get \svg{} exported correctly. See the existing methods for \code{grobToDev()} in the \gridSVG{} source for some examples. \end{document} �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/doc/animation.R������������������������������������������������������������������������0000644�0001762�0000144�00000011674�14402222220�015402� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������### R code from vignette source 'animation.Rnw' ################################################### ### code chunk number 1: animation.Rnw:28-30 ################################################### library(grid) library(gridSVG) ################################################### ### code chunk number 2: circle ################################################### grid.circle(.1, .5, r=.1, gp=gpar(fill="black"), name="circle") grid.animate("circle", x=c(.1, .9)) grid.export("animCircle.svg") ################################################### ### code chunk number 3: polylinesrc (eval = FALSE) ################################################### ## grid.rect() ## grid.polyline(c(.2, .3, .4, .6, .7, .8), ## c(.7, .5, .7, .3, .5, .3), ## id=rep(1:2, each=3), ## gp=gpar(lwd=5), ## name="polyline") ################################################### ### code chunk number 4: polyline ################################################### grid.rect() grid.polyline(c(.2, .3, .4, .6, .7, .8), c(.7, .5, .7, .3, .5, .3), id=rep(1:2, each=3), gp=gpar(lwd=5), name="polyline") ################################################### ### code chunk number 5: animvalue ################################################### polylineY <- animUnit(unit(c(.7, .5, .7, .3, .5, .3, .3, .5, .3, .7, .5, .7, .7, .5, .7, .3, .5, .3), unit="npc"), timeid=rep(1:3, each=6), id=rep(rep(1:2, each=3), 3)) ################################################### ### code chunk number 6: animation.Rnw:83-84 ################################################### polylineY ################################################### ### code chunk number 7: animation.Rnw:116-117 ################################################### animUnit(unit(1:4, "cm")) ################################################### ### code chunk number 8: animation.Rnw:140-141 ################################################### animUnit(unit(1:4, "cm"), id=rep(1:2, 2)) ################################################### ### code chunk number 9: animation.Rnw:152-153 ################################################### animUnit(unit(1:12, "cm"), timeid=rep(1:2, 6)) ################################################### ### code chunk number 10: animation.Rnw:163-165 ################################################### animUnit(unit(1:12, "cm"), timeid=rep(1:2, 6), id=rep(1:2, each=6)) ################################################### ### code chunk number 11: animpolylinesrc (eval = FALSE) ################################################### ## grid.animate("polyline", y=polylineY, rep=TRUE) ################################################### ### code chunk number 12: animpolyline ################################################### grid.newpage() grid.rect() grid.polyline(c(.2, .3, .4, .6, .7, .8), c(.7, .5, .7, .3, .5, .3), id=rep(1:2, each=3), gp=gpar(lwd=5), name="polyline") polylineY <- animUnit(unit(c(.7, .5, .7, .3, .5, .3, .3, .5, .3, .7, .5, .7, .7, .5, .7, .3, .5, .3), unit="npc"), timeid=rep(1:3, each=6), id=rep(rep(1:2, each=3), 3)) grid.animate("polyline", y=polylineY, rep=TRUE) grid.export("animPolyline.svg") ################################################### ### code chunk number 13: animation.Rnw:197-198 ################################################### as.animUnit(1:4, unit="cm") ################################################### ### code chunk number 14: animation.Rnw:208-209 (eval = FALSE) ################################################### ## grid.animate("circle", x=c(.1, .9)) ################################################### ### code chunk number 15: animation.Rnw:217-219 ################################################### m <- matrix(1:6, ncol=2) m ################################################### ### code chunk number 16: animation.Rnw:222-223 ################################################### as.animUnit(m, unit="cm") ################################################### ### code chunk number 17: animation.Rnw:231-232 ################################################### as.animUnit(m, unit="cm", multVal=TRUE) ################################################### ### code chunk number 18: animation.Rnw:246-248 ################################################### l <- list(unit(1:3, "cm"), unit(4:6, "cm")) l ################################################### ### code chunk number 19: animation.Rnw:251-252 ################################################### as.animUnit(l) ################################################### ### code chunk number 20: animation.Rnw:260-261 ################################################### as.animUnit(l, multVal=TRUE) ��������������������������������������������������������������������gridSVG/inst/doc/animation.pdf����������������������������������������������������������������������0000644�0001762�0000144�00000553613�14402222220�015756� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������%PDF-1.5 %ÐÔÅØ 4 0 obj << /Length 1625 /Filter /FlateDecode >> stream xÚËnã6ð¾_aä$£1W|IThÝE ,P F/Ý™¶…È’KÉqò÷áP²ä(Ùl Éá¼_üeóáãg‘,xÊ×j±Ù-x"™Ì²E’(&2¾ØlG?×å1ïʦ^®$—Ñ¥ìuKÀÞ•Û?ÿZŠ$úB§¼ÀÕãR‹(ßÛå?›ßUºàœeZ Ï*ŽY’òÅJ&,6±úc)Ò(?W@®=;g« o3þc¦SMÈ_sW þ°³{úŠXHb(Í‚+&U⮸ÔL)³X©ŒÅ‘ßê¥äQç<Úž ¯(ɫ˰܎+×xtsJÉl„ÄÔàz´ ˽ñì·XÇðã3”SПËþÒî\“+aDTú/÷–ö7U<º™$L(1f‡N0à„×\$8Yó×ûÇ ´÷g’WUƒ»—–˜?ùSW6ç–v6ïÎΆãfGŽáYÆT¢ðÎ%y—e&6cigÄ‚ž^‘šd¦¢®¡/.ÓÈÒ"ØvË–+rÚ)zw(ÃÎØ®**òz†Þ¿ç² `Û¹¼ÜÐÝ®q—8Q,BèŠ?/Œa$edŸó%ŽËN•½§MJ)¢]ã-B*Õ{:+/ÈÖÒ2hÖ†UÀ)]Q„¶éiæAeø‚à(õþÙ*PعæHPew=b㕉§j¸^k´)˜¸pMÛ"¬I~Ül gmM0v8ÐÄÆ¹ 7!<ü—\€×ÑxqYÞ’ýKUÍ¥•мéWwhOÞ¬}ÚßÍ„‘‘, îƒ×TÌ2¥¦ú^¥O,"2ZÇÇ]¬ýTÚ‹·ç–°Êzâ:{ ³’È:LxAÜÔà ðÓr¥Á Uùàr÷‚æÄÔèkÅ­{æ±!íyôe|èC^NîørD1„÷‡;÷tÄt�Üšñ�îOëý)Gâ]YUë»À¯òâñùÜÏ ÷Ãr•!£:?Úõ±ºûŽ&·Eò¸„›AçuAòöÂfHòÿµÏ§Æuž*¦ã4jÞ¨Æßl ˜BI"€½ÅJLtlœ gÍñT•Ö"ÚèÍy€º¤5•ptÅáªBj(–`·q[ëˆ0V/Ü f ‹™Ä¸ÑýÔT/UYÛµ”fFéq]½Ç¤‹}ÙP±¤l„om Û¶[¸^ÜnO”E¹{¡¾ÂËqÿS†Åz¨ñOv êTÅ™†É8ô.ê%·ÝT°X2?ÏÐÈÆý/¯·{N:RŽ8½¼AfhU©ÂO<Á(;¢‹¡¸ ŸšÝæ}Q ,V-A'_Òp0|ºs¥8œÈ‘üs ‘ÃpÖ£xgå£/ñèÅ#û„ô}=†ÕP·oìL8ó΄í‰3g¼Ã_"¹ŽPÒËS5U2céµÌRËAw·Ä'ï‚Õ`BÈÔ›V“© V“)YÍÕ|½r°f§. .e2Œ6ï&¾Ú›† $µ¶ ßuYHo8‡&[ÔÔ–ƒ”•?Ã:óTæA⮑tÅ•b:Ùijƒ—,M‡LÊÝþ|´d’¡«àDë‘`c\'¡fQµY ¥ª$ŸÐ*§OÑÔп»°y-F"Å]· Œ-X‹ðÜwgúÞŽ0ööÉa˜h M4¯G?‘Æ0¾«ïz˜ý†i!ˆvmÔ!¦ð¥rÓÌ·4û\ZjÅ_à_˜–&^»TßÍ[P¡³ )­f®B¥˜O&pÖÇß;¿á,ÕCÀ"bkÃÏåþìÃXò·æ‡•Hb–Â,ýf›w†cÞë’c±ùúf+úf+{@õ@Ò©TÄÌë‰ &‚Ô@ºÑôvܸ’¯Žä{c†'Zn×Ξ2ÿ±—ªÊaí¯úéæÛ£ù¦ºl×ú»ìhªé­õþü08eC3?¤mÞ>"”úNëwú^»ö | ±kún2Š]^fxøû/D ?…ª–»1¿âM@\HƒéÇ)€_§xDôO„C\JL‘i|c@Ï©,¡çì‡ÞÙ<†eùØ—DòŶGO \úšŠØ�‰ü3½ÁÔƒ$É$zF’™¨¼ÊEO(_ïnŸGÀ쾌…±¢ž‹ù¨óÚ>EÆŒI‰ƒŒ¿n>üãi¶ endstream endobj 18 0 obj << /Length 235 /Filter /FlateDecode >> stream xÚUPËnà ¼óáàµY0«ÄR{«Ä­êÁŠË6©Ó*êß[rµ†™ÙÙA«T‚ T`+¤èŒ•ô<’/ZêZ=;ø”ÄÚ·åë(è1’÷T›Tl™Å.ôÅ“²Áš:p5õW*”‹i²©ÀêšúŽ~°fèæ /¤”Lx¡TÍ<·Š=8³pãZÃo¦Ë=sÝÜòD>¦|½Îq\bm&îÃÔ‡5øÜ†ÅïÈ?ý[ÙH·[ QƒK°Ê+õóÐÁm–íÿÞ¡ 8ã67,ŽôÊB­Ói+Ph²†‹FNžüµ{XN endstream endobj 1 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp3Y0EVc/Rbuild26e625695619d8/gridSVG/vignettes/animation-polyline.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 19 0 R /BBox [0 0 432 432] /Resources << /ProcSet [ /PDF /Text ] /Font << >> /ExtGState << >>/ColorSpace << /sRGB 20 0 R >>>> /Length 136 /Filter /FlateDecode >> stream xœU‹±‚@DûùŠù‚sw; •„D¼ÒØiC P _Ž\³“ì›§ì©ù°ä𹞎ìĉ÷7u—å[~q»Sø€²_2Bó€çÕYǬ¼íêýüŸÛDW ½X®j­‹BÓ˜… Z›k6>!ÁBëLX†3 Ú _… ÏÆ€è±+ endstream endobj 21 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ�"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}Öº�üƒÂLX € ¡Xáçň‹g` ð�l�àp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁ�ÿŸ”¹Y"1�P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6�(’Ü.æsSdl-c’(2‚-ãy�àHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™Yár�fÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ �°¦eµÙú‡mi�]ëP»ý‡Í`/�в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~�(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 �E@ê@èÀ¶À¸�àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº� C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎè�t,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 24 0 obj << /Length 1540 /Filter /FlateDecode >> stream xÚ­XÉŽÛF½û+à µÙ+I8@ 0r±œ‹í‡¤F´%rÂe–¿OUWsi¹Ç“ >õV¬~Uýj‘~Ý¿xýNèMÆ2#ÌfØp¡X‹MÆE¶Ù—›OÑþXmw*–Ñãîn«u”ŸÆª§CÛáDEÃ$“7õ9ê¶¡å©ÝîDµßH¬oÏÕp¬›wZÛÂi5é¨ÚϱŽF=lyôÝÅyçN›vØ~Ùÿ±‰7;ÎY¦5a&U šøxýNf+CA\dŒsg⫺ä!5¸ÿj}â_¶;-t³¤¹-ܰ2½,éÈ}-$ËøZ¯xF¯|Z¯¼Ôë)–?°Ô,5‹'|¸fÙÞCÿÅ’µ^ñ=ï)–ÿðEèLŒJI×»m*#Œ‘ Šœ|Ž¥êú·§ÇSÝÌç:°5Ó,V®°ªW/CW3“&“ òþ tf"Ê„ôA õ¹òàÔ †äðC<<ΘÒ3 !ˆ'‘4€gv†ŸNpÇF5N¾Žý 5>¼aÌŒJük»ú¦nòæC ͤGWèIÊŒ¬ dɽ-Óv¢"– Þ€Q&aY2Ŷ;cdôÖ9 !¸¬•D}U´Mé6­qæûnSB-ßøøQ󫵞+à ÷·ßI/* ·W$ «p Ý •RqßÒ÷Lä<‘M__áE dÝ’å"ÇÜÞ¹3òÎ.G‚îÐsùÀpµÉK?–12I£ë¼@-ßh5´n<ºã™(!2'LqýCJèg(‘­(¡áºýt¯Ïqܱ%S&É‚ ¨‚lµtÁ?/é‰f2S5ÎÚ.¥Ó$UÔUw¶žv½;i>Åðˆð¬e:Á®†ÍY2Ýã‰TE}x¤ÊžÎµ<Õ`Ý@[ˆG(Íh®í ·6$æ1Öô¹ŠÎ­­ô°S´çÛSõ0))ib]—7´¸™îºíªaØB<†jDæaì«¥­Œ®G4V'D[== LlÉÏn…ÌuŸÜ»¾Å õéDÓ{¼3ŸùŒß´4^““Ü=×§Ê?îWN¼ÄP£ÝO79¶×’×½—M©‹Z:,Ü©$é^—\T9Þdyî‰ç48 v~Λ¦êí™´l·¡âU`H(ÂÌquÓÕ凿Ìï(ÚMÒž·SPcÝ`m�÷Þv-nÞÕ¥-0Íi€gíë~¨æä*TFo‹Ÿ©ºz¨­çQºÑ3Ím  PÉe«~q3ʬ:ð&Ã1w‘SÛ�™úªtáØÐ˜Ó Rðd{E{¬:ÄžXêÀq™9õC7ÃØM²DX¹?ÚX²^:ÒV~‚ž”Ü»ë]XËhì«)ÒÛòqJÓ;óÈÉ/^A¾Ö.{Ü#h/Sô=ú˜¹D›n¸bRáZ$3®äò»‚h£ÖRR0næ‹ÎÿØÔCHŸ‘LdzdqÊû>D-èžLbl{O ÿÛ&T •Ç:|³§Šq"Õ$ØBlCä}­ Ì>Ðáóž&ñ«*šbö"5Ž ý›í.1É€”¹‹Áþ¢‚5¤Ë� ¬çóÍw3 /�JÃDbVÍW> stream xÚ¥XKÛ6¾çWE23âK�-Ð Ð"èisJrÐJ\›­,m%9»ûï;ÃÉ’WÞéÅ"‡3ÃáÇyѿݼzû^ç›\ä‰J67w©ŒÈbµIãDH•onªÍ§èõ ·_nþÜÄ›”"·–ÈŸä—íÎ*Éò8®+-r)G1õ¢˜º¥ô‹RúÚfæE1Cboß+;;.*I„Ê2âþµßît,£áàyä‹ã}íhÒÚ­Ê¢‡þ Î3`ã…Êݧz ‰oipÝ}ç†bðmCôö޾Ù±€]i+t¦Àž`Ç_?|`KüÑùjÅr›Ùé(à'à ¶Â%šq ìT®E’äKl¾nmõ a’8ºÝî@ÀÕm³mÆæÑÐÒ· †ÞÝ]18^ˈ~O‚v•FQ?Ç6.šŠ™Ì;!…Ô5¤ ‘¢}Ÿ#uq¿„”QI´Š’ÎE–Ú9J,$”PìêÇŶ©Ÿh±mx©?|F–o‰ávN,p*8·Û]ªLts•Nn8ë¾¥kaó'ªÜ±múîQÀ{DšŠ8ËÇ£Ýw¾V�P™Èµ¹Žn8´Áè ¯*îÚnEµ…‘Ù(„ûØø5íÆˆDNNØàQ»rÀQy=<»a8 ÂÛžz€BFw§úlF`èóÍž}6–"¶èÌjmt 1­ÏÝÓòmpHWãfíVF öÄ‹—ˆßÊ޵7 g$Arn\¾tîUˆ)ÕäBÚ„LãÛŽMÔ{¾l·Ý@#ðêçPg©Èý¨­È`§¹'£öŸ”~2‰Í°ÊÆ—þî aeƒÐ ¦iíÿٲÌâ;º©5Ô¹¼„š|¨däU¦BȪLcªÀiú$UÅ0RŸŽ¸…M[óÄ…!rãP‘·� ‚§0(ÃF 3>îfù W:÷ïÉw®¢åñÞÖŠÂåí¶œˆ(tW®öý4TsÍå€dí÷‡-æƒ1`éØv¼¼*))Õ!¯Nc†Ë e¸|òßp(Ú@Æ“û ž�®ðRvé¶î×6ÃÒ=Œ7 ã&D¢ƒ³Þ} k]Qa†fO” À0ãl?£{N$é&Õœ,a¼S ³gafLB§[9Ç…£à½„’k¯äB› ¥ÏÁ±V ¤FM‰°èö§ãdŠÊљѓóôœÔqâïk_zò>à äÁÄWA²7ZAø³Ì][C€�×C¸W$•Œsì]ã:°4‰M—Ç5VK9¯ÐÐ}-à‹ƒ!ô"øÓá\¦˜Ýa-)­ˆ¥>Ã%×ðÊDš%çÄT­)‚13ØÕš+’sŸ‚7I¶=øá0ÒNI桃Y;‡-Œ–aäÔÕÓBæ4ç`ëÎamúòawZ¥ÐC™‹T²zf¨Ÿ6»83dº:„ÐH©ˆéÙ½ RfÔ|_Ö¶hT¡¦v¬xô¡ÌÉwæ 1üTâèÁ©¯~îÜ=rÉwŠi ׃«ÍÖ|××ì*—áŠô}#Qõ½?´ÉYrÞU]±F]Z“|ßÓ#HªÿÿŽøs‰årªÀ½Ë¢wDKÑx|(Е¿rÂF‘‚¦JŠãÉQ°½J¡e? ÄL풇案·r}ÙyNnÑnÑ€'‡„;–ž�–Bgiˆ7'ö @£½:K&{‘ƒÃ´~Ú· {!rŽe Ùr[E³…AÅómÏu %8'œ7ãœÀ¤ço-…N¦tÅ­/øÓÇu[ ™¨Äâ•0¨@pkY=¼µ†jˆûKŒîIbùØ'VS¶¹úÂC_7f½b“SÅÂw¹4Öº¢Qx¥˜,*úžû5O7X[”ÐÔúÅ™°æ²ÿ¦´‡G!~¦ûŽó)AÓ“0¥Ë€ö(TÈ„*$òq…̸B¢@Éí5s`…Døº€¦òö{¤ÁÂ/О¾³Ü 3ztç‹b²’®u„üޏRZl"Lž~«²¤iöÍ2ª“³šª(:ÝÆó²²Ir¡ wB"2¨ÈASøÏäÕï7¯þEaŠE endstream endobj 31 0 obj << /Length 1079 /Filter /FlateDecode >> stream xÚWKoã6¾çWÆ(´fħ¤E]  =íÁ=»{P$Z& Kª$;»ÿ¾¤†”¬XvÒ=¿yp8óÑù}÷ðøÄé*Á‰¤rµÛ¯å8é* %&4YíòÕgôk°T ´ÒÇ¿+Ý Exr߀ ò‘П±ÎŽk£%nÙë£Òù¶U…’�ãHZŒý ¾îþz|bÉEájC#'BèU‚!@ý™|…$;ò1DˆÄ(Eãn2êˆ5q.)à ñèÝ@ttÅGWr”âq—„VR£èñ‰ŠÛü­Êƒ •éÊ~#Ô(^£ºízXfi§LýhÂŽø!µ‹ó¨‘èÐÊ^7¥Ót‡´±–HuÖC” •fu€ýVý{Ò­®ŠÑA Ì™wòms„DiyRÝR¥\„Ö¢áêAòz]ÛÐ(­m… ìò™B–3³ºü^ÔUª}[AJáÓ™” þº‰( 1 ¥IR7 —ÁL9󸢭Ÿ]ûÚ¤ºÂLå¨R*NoV æ<™¡¡Î:ÓûïÖD™ÂrŽCÆ}Øç@T÷‡¥ƒƱê|á„aJI«|Á ‰ÍPGc¹T ‚Y$< N%Ú ýhδ¯Ë²¶¥xN1ª¬Ž™;D¡*Õ¦½ê`ÙZ5ìØþ[gØJ{üÙV¬¡ª„ÆXP6¯j®¿„Œ©VUnLã®Ãc¾U4ìv Ü×-½õ³ŠEo#‚Ý…ÑÛCû„¸01? l˜L4ilgL)€)|ͤÂÎñÁXmßè.ê/RªÕ¿‹m­À@à×^’)¹töFµ÷ÎääŒ Ë)³¹'9éßÊøÿ¼�ƒ»û9ÿ8ÏcÄ{=FŒP”YžuôèP§ÎŽŠ•ì{°0Ñ”âHÐiì§NœÚ`–˜‡ãpïOUÖkÉ£†DšÖ ô)SSôaËÌŒH›ÆåÌ&~Þ¸ÁbLD4¯[©«aâ)Eê[zr§¦­iÚÌ© a!M«Îº>9ƒN Z côgï1ã3BÉÒSø˜$yé¼eiYª%2¤áiTW‰µ­Ý's›,îÎÅz¡xo4gûCÚ§di<òü±{ø]Ï@â endstream endobj 34 0 obj << /Length 1440 /Filter /FlateDecode >> stream xÚ•WKoÛF¾ûWF m¸>¶¨{(z* Eáø°¦(i>\>bûßwfgI‰4•4'r‡óžÙo†¿ín>Ü+±ÒLÇ"^í+.KC±J˜q¡W»ýê!øu½D»g¦²¥éòÏaÞ®yð\o…­òÛ ñ¼Ý ”¿=¥ÉŸïv~Þ Ä×»ßWájË9ÓQô^þú\7So@¬ýá²öëñvPñá^¦+®˜T±@¿A£Ô,‘œ4îN9q)uÉ%ãq ÌŽÉ´.šO•uö®©Ö.¡C_e­+âÑEî¶ô‡)_m…f!×3W¤¾à!p$£'Þ¥J±XŒYaÚv½ií×µHƒÜ“ ÷äÌ9BcªcN´ú@¤g|uÛÚ§Âswô$È3û9”*3Þ¨ÍtÄø²F¯:ÿ··M¾qµÜÆŠ%\M+úÔƒ˜’i`‡gKÏ}&Ç›/¶(ˆz¨zimùŒ®á{fÚ¼…&R±‚í‰X”}£Ã“‹Ç³yëmdP²W6w'ïGN¶«™Ý²nò¥ÎÌjôçu½•R’CldÓŒGñXãÆ¹!} <^¨z±XÈïöߤÁàλÏÙ ê()À5OšÄÞø¯tʺºqùŒHcרŒÒ¥.½®–\$®Ù'I(lÛAT2ÒAW/D%%qôz™³TŽá{•mÏ¡Õò²¦ªâ» _úÖSºSM¯C·4Dß›Îx]Óg]ßäg§ûsCÝg÷Tëm±P§Ó` ß\Š¥J uQ˜¢ÇÂoU÷ëTØ6�AþjЃ êC"­­ŽØÃq:Òté³eNzº­ÝËž¾Sìðyìs§Þ3ÓmÍ÷Kmûb»õì?}‹Y•Êyêì… LKßuQ¸ü¼PÏX1K„š@ö¬…ùÏ�ÙÊĻ۬¼Äl½ Q’ÆŸºÅÙðÀIÏÊá»Ð¤ƒ”˜HÅ3)qEJ~Ó–œIbê›bŠÄf]?‹óãˆ@RIWZ‡«<èºÜÕD)âï–ÀhNG(˜Oãkð伇´]š/ÑJøtHèN¶%JVûͼ°˜ÌAHGÄYêùUÂFND€Z-,*Hø•cÀ=úÛ/ãì(瘞�•½ç["h¢ w™…®ôÖ]lgˆ#7ÕaHZÏï¯\i:û„ïi lµ`1Ó°w”6©ƒ27•Ë`8h–Ú[–m8þi U¹,‰ø—;Jãq]pÐðqx#Š¡ÇyHlÈåÂ~€ØàA“Ã>$e2½ogð Lž “˜xl²„úÐæÐÔ%½ùjpxò0 –—1ò Ï-n*r䓞/^È)uaÉÆ_Ë4MHÖ1Þ|ÜÝü­+Ñ endstream endobj 37 0 obj << /Length 1068 /Filter /FlateDecode >> stream xÚ•VKoÛ8¾çWE43")êQl{(Ð�»Ç…»—4F’mz•4ÿ~9R¶¼r’=‰óàpßÌèûöæî>櫜æ OVÛÝŠñ˜f_¥QBÏWÛrõ@¾­7’K¢ªZÝülµùɨ¹vLFKýT4Ÿ,“­·ÝÝ‹üÌd´Úð„òÁ^ë „¯^èEÅf z÷ªÛýz#„°¯U i‹íà,d­±eþGÕ ™öÈã)»ý~l¼“·` ÉÈ€ÇáÐä¥Å‡ŸÐÃ™ÏæÐ&‹iË98?8‡nQÍ{þuû÷ÏM?Ó4qoŠåF~§‰ã`G;o÷¦wo»X.Ñ$šÊµïué²£LõÊÓ„&rªÝnl £;(Nœ½mâ€Ô-µMçmðk«9Ö%žÇ¡Â€É¦Æ�¢ÛáWá§QÊMžRnó2Ëéõo€Ž$eåAÜ–ˆVɈóÏ~ñ!é°ÅvBJC”ê¿k“ŸœÒ¿4tÈÞu=Zè«ZÓ®~õ/™^éýÁ{±«ìm7˜T_" å¼si´d˜Zpž²gûÂ;‡5£`ä8uÝö|D«Þ¨ÂÆ&nº´€™QëèÿDˆ <ÊÂ%ŠU‚ÑTf6öœ²0ïu«jëa&ä4:›Ñyîg´= S)ìnæ«á°J³5bi7A ÉZ€+à@Ó{]FïPŒ0�®öš®uíiŸ-V³ÕÓ´iH3L]þ›ãŒQ¥Ó0|ÏHn{j[P¢vd‘ër÷Ø®«ý€Dì¦àºCHé5ÂTP¼¬~+ ™ Š‘Gäå  Ð:` ™TæÙ<àsC2žšH„^öɲóåOXIø/HɳîÆ•°åØmó83‘|t›] •%9 ¬âœf™>śۛ¦4* endstream endobj 41 0 obj << /Length 915 /Filter /FlateDecode >> stream xÚVMo›@½çWpè¤x»ß ‡Vj¥æÐcëö’æ°ÁØ^ƒÅB"ÿûÎ~€cÛ¹ÄÃ2oçÍÌ›!_—wX‘¨T&ËuB(G9¦‰,8"Š'ËUò˜>>Ò§§ìiù=ÁÉ‚T_§l!¨Hy¹ †O%€øøÀé›ëO DHðŸH[¤³ûÕ˜þ¸†?$€O¸à<€?˜™#åÎ?ôä*_Øù+*y ¥W¡ô úÉ®"ÙÉÊ¥œ ôBôVübôVâRôVSk©¸Ü/mšûlÁIž¾fT¥ؘ¤¥n‚a÷Ù‚æiUšõ!œô[Ý;‹‚5z·»àÖ6U“ÁooËv}æYÛ˜®«ì[Å»Ûào«½ît_$Ñ›\FIX¥­iq’*œl[uÁ¨6átºÐŸÛ­ŽiEÓó³#~¥®kÓlfÔM)AŒs åÉœÍÄq$NŠ®0’Š˜•骲¯c( ¹»,¡-a¢N»i‡ý¾>8* Ƙ¯ãÿœ$E «ñúÝP÷¿u=CƒI'ºÛ »Ø.ÇÍ,‚ÁäD3ÖÁ}Ø(1ü§å_ßÞ¹!Þ±¦™ö1Ø…yº1KWÖË¡±’F‚#ÂY¸`9VúþÆ‹QDd>•jyÕÜ… �•£kYkkgúã«]å˃Çíû³uzç§ëJ÷Cç4ëžÚŒ¤ë`êðs”µ›h)A=¥kï6zÙ™^!š©½kžMmúà ?Z€ ]c ÝEvMÛGÃÅiu¦ uëµÔ½i›‘}U!Uu¦úŒxcó}нm'ý‚µò'd9wŒG¶ ÁKm+ 8£9·ƒüÊS©ñ»0Ì”ÆNÀÄkèÊ.‘€PÓ°¯‡¦tU ¡ÂúÌÓ²«ü®ógÛh@V0´ šÎ´CätÜî®"Çy\Xójü.øvÂüÿ'ÉîÌfë×T%¾®o…J÷µ‹äg³/ —‚íÒ[P aVœ |Ýßá ûÿ#*‚8¶÷¦3+ªõîˆ;ý7 Ÿ_Fàm!N+2Ø(;÷tJ5 ߕ֡_ÃcÙúo׋¿°1qO*„²u&4Åoç„È1 ÁFŒÆý™»Wwß–wÿ�ùEÌ endstream endobj 44 0 obj << /Length 924 /Filter /FlateDecode >> stream xÚ•UKoÜ6¾ûWè(^†Q-Pí5ÛSÓÃZ⮘èaP’ÿûÎp(%rœ=’óü¾áè÷óÝ»Ug¢dª¬dv¾fB–¬æ23¼bBÚìÜfÿäï×a¸„—âßó_ï¤Î,³•¬Pg'iIñ¡¨U>…â¤J•×_ÿ\È:wý Í~xêÉ—Ñ 0ó=èüÒ÷tó9Ú<:×’´L´¶iõsòùTœP¿ñ×å’LÑÍ:¸à: \še ÷X f/³ZSö˜x)ªœüMóì1o<ºà¢ó¡8 E¾ÿ².•ÉýH*KçHhbñh"È”ý2¡AÖ5AoÁ·Œ p¸æð‰7€6ŠIn6#Vœ*+¿ÂÁ†)l Lò—”ùèO±Ø“TЉJkþÊ�*wS! ÀRÖ" &²�òã’óT.;¤ù\hdru3]·MÁÑØ¦ÔÄõswY’”øFùW娒¯aš—Q%ÝL‘Z¢sDN¼‹' �c¬Éß“®oàYóÈ¡X1GrÄN ºâyïç%]\i]G¿Ì›Fx¡Í¼BžUã·\÷K7­·Ž.—ZóþÚ=¨JãëHó}—èŠqeþo“T¬.õfÔL!@³oan@ÉÁˆA×@´/°³$ü€F€P—<ÿs¡ûCÒ+mFפÎJ²º–Çj!Î Pµôtamýž‘áôP¾/Ýp¶q™cÝ?+\° š#ÙÄV„hZ6ÂQ޳ÉðíŠWZá{Ò {sI[žê­,Óª:Ö›°é"^Ï>,+ls”¶•äžÎÖ´¥Ôùoýâ¸Llk@ª.ó{ôl0g´$ I¦Q#ÍFTšI-v, ¤ÖÐvr3˜¡©û–BA¤4h˜XÎd­Ž¬€œ´eD×ãÔÀª8mfŸn÷Q‚[%Õ6J¤Ý‘„›m` L?2OB"ê5Ð%R—[qOÁ?ƒB!ÇjÓ¼ðXMK�(Á™©Í€k(¼þA0€kk^ÓñFìR3Ëw&h-@â#Ð>oîitBø9’›à`>´´yܦÕAýºŽ Œç¿xÓ¹þ‰N×™N¨¥2¨ÌXûj£÷Î5ØŸàu(•‚ ´ÿ¾pÞÜèR‡ÿîñ7Jn’Að0Oq4Ñ …Þ`1%| ÿd%äÆMßâÝÝç»ÿ�ßJJŒ endstream endobj 56 0 obj << /Length1 727 /Length2 10898 /Length3 0 /Length 11481 /Filter /FlateDecode >> stream xÚmxspfï²ulcâÉÛ¶mÛvòƶ9±mÛœLœLlÛv2I¾9¿sϹu«¾Úÿ4VW¯^O×®go2"q{UOG3&:&zFn€Š¸°&###€‘žŽŒLhfäbå`/jäbÆ Ð03¨˜9˜˜ÌŒŒLpd�GO •…¥ €Ò„êŸ @ÝÖÈÔÊÎ Pw°up³2±𺹹 º9»Ò]ùéÿ©˜™\,Í�æV¶f�E-)y �¥„¼@ÂÌÞ hd Pt5¶µ2ÈZ™˜Ù;›QÌ€�Û;�{S«qr¦ÿ‡€½›Ðå/1s ƒ@NLUH\A^ & *0²7ÈJþ-·wqæþ‹631öø×t´�—ÿZ¶FÿµŒÿký7 ôø·EÇÄ0µ2q›YXÙÃ1üK7){s�û¿Ã¦®ŽÿIý%äü—€ò¯†T�S3ó¿hW[[y#;3�¥ˆƒ£«‹ ç`j´;ØšÄ<\ÌìMÍLÿƒ6²³²õüÿâÿ!åbôW!{‹¿ 2þ;då,nåafªhåòWrs#Û¿Rý×0û÷ùü«Ñ¿«ÿ¶ü=WS{[Ïÿiøw˜Ú1(«H((+Ñüw þI‹Ù›8˜ZÙ[�T\þ*j4ýoàŸ´¢‘Õ¿wè?Tþ³S�¦ÿõåŒ\€V�Fú- 㿞ÿXzÿ‹vðð¦cfæб0±˜8X8�\,\¾ÿ‡®‰+hfïòìgùÿÏ:™™y˜™À­.9˜ð„X§µ†Uø‰ÍTBÒÌü6T£Yb]žê½ÖAµúeijpp‰{§Š›ïŽ@0hÌ·s±-u×Blo†p41C¡·„ûRBRiáW»ù¦TðÚ¡¡Žcg"qyë’±¶¤H=Éš•{V+íTƇ*ÁcXÞ9�‰²•°2ÿ`/A¥G–©ý‰`¶GSƒ2cZxe,ð²» ž¼ƒpM†c`YXèx®]Ðpi-¢ 6¨±HѧS›ÇdòŠ,lqëà èYJËfˆ1WgF•Ý]þ3òø>¿£)™˜i/‘ÆNÀ¨OÃ3O™�µ´PA#…™ïatýA_c‡$º|×­žT¥'ô‘\Çi‹‘z·…˜­!Óª{x€Ù…ê+E¤ú±84ÅfèíM)0®þJd³óæ†qÕÿ;¼”¹%ž#WÓŽ¨˜ nd¥¹P´o,C3L|.B'§Ž»Âíz ’ÿ¦cb5;Ôª}…«h¯±»Ât*L0¸­å\ú“†k¤È˜¼àׯJûÌÍKnî<±GÂù·çò#µ³Nì‰I„âöþha4K†>*üüHòdQnI¶`jO,ãXB©rmÒèd*T9Bûá÷ðuÿù^z/ýy”ìôŽí$¿åN6º$§Ñ¤1b©—¸¨SkŸ3§Wè­uùÇüGCOˆÖîøyô,aÕà—ºa)õ°Ñ?•Ú윥 ´Xçš,P\·š÷îbà+!j5ÙÇã½±ß,SLxêûÝb,?O“3xÛÇöäÏ Õ™äÍÀËüºH;<8o8ËžÒ$O»uZÄ‹0ÊR)ž"…ô¥úÆ®qø&¢EÃYTîˆ{ñ¦^&HºD$dd ,’U0fT„Ÿq+9çgJ2‚Ò†øt,áè…iŠ¡¢<û× À<_A¸ k2ZS‚┾—J}“ϼë %ÂN¶³‹ äÑÓһϞHßÎw£Î]|ߣs‡ëÇ.\)mY¥Ç/f]…àò/éüA†RM@À¿gwÃ{AT0ü&`¨ûðÝ‹b#¿og)Ücû=¿¨ô¤8Öô«�S1oö l«ú“(êÒ�P¤Z -ñÌ÷g#™H6þ¬_°£×4x¹UÂÀ2hqú*8.q×0ØîÞÌI­´ ô³èâÖHfÿ4h‘ºÿùcã^f¸ÌÇ+–C ®Þ$´F½Ä ¡òïÇÊqˆxcÅ®“bø SD8álíoñØyúÃÆµ¿}s) ¥‡¬cä‹C 6iš:Ö^D]ã¡ÈH7ÂÞtgsP"&@ð 7†¡­˜mHˆ|¨ øFO‘éÆ÷:N‹´Y¯æl¸‘“'õ¿\ˆP°ø·?šgûˆä6йB<Ïsl†X@žVxícƒÊÀ‚÷ËøÇ%·çGRç}çŽÅ¤lqò#36¥7>ï jwœY•G¶¹)µ¤òš¦Ì0·2$ݤtâ¼1ÔH;8þCˆ¦è³N)Õ)¼¸Ö$ ß“R–@™“¢‡›¾K/eðAy®®…ƒDÀX0.ÍJ£WTÚ;i\®øƒ|ðä¨H5=Ô+ÌfÉþN'Èùb¨óÛ¶¸áeA2Piì+,CZA;­ˆîH#‚ÃÀ²•àýlUé‰jÔ¤Ù¤oœÑ½‘u ;LÀÿÕ2 ‰ú™RôÍûD#¯C…CZ2ØÖ¼=ͩ̓D èÊžqïqZ”ÏæQ•ãêjèÜn°'ÝÕŽ*巸ħO³¸Þmâé“j§-äéÈ[xö£¹Ð¦F6æ;Ž2{ƒ„W…æíh4£5ý˜Ä÷êÒ«I«wgsتFÍÀ~ú««çЀ§a™Šæug¾@t¡Ëv\È»¾U;×¥ÁPÄTZpÞ„+šPU$mÈÀDhë -½6…}›ñ‚‹ª |·yÛ.Ìšs¸R+×µX:7?Xq\ñö IJ ;ÅEýþ3ÂÙÂy8ŠÇ¢1ê/ð«#Öš ?Þ‰ô±4ã›ÒLÏ´½]ëgüOÙU¹¸È{ž¡Q‚ ~º¢ÅwÊohï“„õ07É�åÄSðO1nÌ?!lôi7©éN‹ú¬ßoC@r÷6“ÇXVáFÞ2™¨ó¬Pã–ðîéâe¬Ç”¨øJ  JUN8oÁÜ}t·-‘7(rI…'ÏC@)á뽚¹Öº^‘%X QüUNÅÊÊüÒb«×³²–Ù7¥â‚ZÏeM:ã!9H¾2ºCàñ@3w¹"S“ÑðÞ«ÃP%¼¨émŽ0䲫wä–«½ —Çü}Åg‰�q˜¯æ¨zs}£}Û«ã™ X…깩–ùŒ/WjB4l“Ï?–Áé¡"ظ·l÷Y§³J–«¥6,À¢SêÍ¡LÞööìm¦iméZ±ÌÛ‹ û°³U±wŒEº¡»~€4dÐ :¹W-äf²ã« ò©JñSMõzŸ°d® ÙY<Å7°é*Þ‰ƒâ£m àƒ5°ßÌÓŸç{3¢†šœÙê2;¨ÜqXêæ‚4†ZHÉýäèŒÚöH5œb#ÅFÓ™Z_$`µ-3„a]ð„ø%3‹k7ÕÆ}X±‰öN‰oŽÐ¦ÊÝ@Rtn6ûCÁÉ‹*ôlàŽð+«z™®’õ¦¶*,£Ö~‰×mzãâ‡ìlöûozU6@?z‘åŸuVE(™àÜ÷›%çñEì1Í&×c.†ŸÂHÆÔAjõ?bˆŽ–O,$«W-ÃQ"Ƭ¾¥šæÂ!‚ó§;Y+I·1c™7lAîÙ1W)gW›õÃ`æòFr8J¯¬³ÏÿÉ€ž4 ªR˜ ü’3±u(vf‚YVåæä÷ö®F;§6_½_ùôáÿ‰[!mÿÝüÛ”èúûƒÁ}Êp¨¢/å É8zh¹“cžfš—ý“a<\²&‹-w7ó‘|iÿùê~|”ÂT/ïaAsððÄôzüý «ôþxSÏ6;­~`ŸÇšÏ&\œ€ä“ÂêuU—¯{yPhàÂÚaþü°ù7øèå «·dö|‰nÆÇnå!Ó¾F÷€¡ešò[iܵ“SZï€öÌ}/j1t ø…îËEacð‰§Íi{�:-8͸;àBûùh6¤÷Ø{­¯hÂ‘ÇøO±þñדË%9ï¨Ó ÿâDWHPê¶—]ym¶<åÐ` ›V”œ:¿yV .SåD±¤`¸ƒ™É€@ºú½”Bg˜jõû2׈CzaTf“&ñ¥VΔµm6Ò} èø2ÛàdR)ä’¡Q_è˜V„DQ¹Ÿ¥Í±AlVÇ‚Ž@‹gÞà^N'ªHÜŠ'˜R70(öËæRN¯Ä+¨#¾i¶ß>å¥ê½iüV×aÊêÀ@ø·å}í3xõõgþ5Ñ›©IÕcòEÌ}é8ÅPãØÀ|ð,wÚå‘SÐP¼¾?°6Ý~d(‘`=ð¹Øù·ÜûD Ú=ìñ^K-pÅ7ù©dË•Yr"NAesÆÁÅÁâ”ö;] ëp¹Þ˜]DQk×ê‹ûÀ¸íIÐôaÐ{¹Û!qºÏ’tùºê<ÓÍ©ÅßÝ´\´reÄ&Î2•\¾ï©>Nh¡óÑÜ× 0|áU?®¨!ô÷Án}ïÁÚ7ÁŽAò(ø êéfºóŸC´¥ÆWy¯JŸ®ß÷›™òA‚@ï¾¢g>Dôž~5l9¡×“vÑ¢ç þöÆ:\9hû•*–~ݯûŒ@ûñdÑÝžaKC€z@\Á.Y0V¿Ï"åfÚyê�ãÉä>{¼æ&‰:ã: dŒEÊ6›)JP¥#ÈØŒ(+ ¤ì»æsUžðBmðõÇ»“4²ô«eÖãbâ'ó#5§“ŸN ´"˜”BÅ›üØÅ 6¦![3מÍ-º¤¼qW+ßvíI“„ÌÑá5/” ¡z¸¬ù *:ñT›"Â:\Ù§a—Š˜O)¸æ»7aLPBìðòi|PK2!w»>? {Ö‘ãÚ­c}£Xfбƒ.éO„î¨�hÍÏ¥KÆwó ±£ûípÉý‰dË2…~œ‰•ƒÛnš7tún¯Z,.Å©E£’žK¼ŽÓÖÊÍ…À5‰xËâiNæöÀ·’:mÓ­“…î_~äÔ»``l—„ ¡;Ýw‰£éF†$ BÉôÐÂÝYæY¼|}YPFMs©±Ä-"¢a}^—`l<’Æ?*Í–šTIp×¢aÆ©[`p\;{Ђ9 á|‘Ñ÷ÝM¬¾FØ×9> ‡$©TDŒô?òj±É£Án¢wÉ   *`�ý »¬Çàe/!œ-üc뇡úè}oÉK�õ ¿½õ[Àu¹ÕŒ¯XVÒõ9ƒ­›a� Œ´×_.—ósáÊú”ʨ°¥Y¾?òþbƒ±ç.Üú“¶ˆƒgžÔsBƈÒeÝn¤Ðý£~™ÞÄUÙ+KL£æQ’!Û"«Ý=-µ»~Ÿ:SÑØ«Tgs¶‰„')íür"p’«uRffH@'{l÷îPºÕfX4J¶Í¨îº›ºLïÕLÂMÍÓöÙïomYQæž—’o7T‰Ù1ûÄféˆE4´‡¡)l6õnØ©ëšñùkñ޾ʡE ‹R † £úb›–æiÿZŒï. ?Ê;䟷ֈ۸Ö‹ä#hÈÚ—ßNoçºôŒ8qüH‘‹²=¦Ô. â`›C6+æµÊ[`sgs8D¯®}·M[ó0Péi¨:ϳ°²êXaŒk~FŽ)‹e©.ßß]Xf ©ÇSd#nÙÉp1dùl=UGz8¤o‹^5 ×êßmÏ…p™;ñABh<–A¸C÷mÑ· ú4%ÏfH6&r‹]¦XŒ:LÌY¥vï°¢s¥m®øßî§XùŽ.ÄY (n§æñLd—n Àþ$ÃãOÚJË,[6˜"}ÎB7Å—œv•ÿtD¹ÉšÌ—À+G¸Mé*â\VIˆûPÉç¡F‹QŸQP*�­µÍ ÆŽýnwÊ™ŒŒxaQ¾4Ì䆯 ¤Õúɪ‰å´:GW­—íäXgC쥈×X[áR+”Àÿ½âë![‡yŽv„£±«4O#À„‡aΘ`—%\e¿3pŽ4,¼@½öbßÊ´O§W5ï îüèlÛ;; àùÂè²7ê|—ò«,óŠÊü)¼ÆD•\3~@ÌH˜#ë³ìׂÙÓ÷{¯NÄ56wӠͪF툹$‰M\Æ“úÏê÷ôB׫Ê|£¼õ¾¤‚§¢RÖN‘€a9j¸V6M[!Wäk@MOâŽc+ayY¦Ó?6e[»èâ×ÓÆq§÷Sàà³l°©…ZeS¾üërbN^KS`¨iü<)¾ÖØÄZÓø‘M×&gŽ˜HÇ›ÄxŒ9©*®0‘L‚¡˜º½)´Ö\‚îo¬|ÅÖ÷î‚`©ÚÇÙ qõŒqýGŠ>D$¼i~ÒÖ8L¡j™ò/„Íë°8lOï$£‡xj’‘É÷Ÿ6l݉}‹uè°OÖþ5À¸œ˜i†“eTÐ ¨8åNêü|±EÛ š6;³j‹­]E‰\ÀÔæQŒ~Þ±tR¡>îrûGe5'“®ªŸõj£4L%¶µÒWJ±@dGrm`ˆìItä×’Ú.üìò­®]VYK¨…˜!²ý<{wÀ¶‘¤•ìN!…%]=Ü)Àf äsâH†KòÆÆ›YyÙÓu-À{¤{@…~>3 R<×þ5}U°¥mmSp`eéùj‡”µd1Õô‹ÈÖ$ïØŒ>P]N×]p”õ Ï©Ëଘ9{‰q”aÌ ÷mIm‰’æç‘N&xéȨbNutÞÏÏ–ì­eEú®{÷>Ed«°ûÃo`‚œDîy´P³ËK¦[í±eìŠJþÜšÄûín{ÍL㎡QÜÅi×k—ôõLÈ—;àçöúFHx¾Üb³×)³^Õ¤ lÛpõK¿“óúyˆöâ÷‡^ñ,Ä‘Àî·Úi¾Ãl@CóçpFwש·f]/©Ôñž ³ßámÔçQÀ»n–ö¼„ï8r×ÈN‡3ÊC˜úwyúþŽ"Âi¢gwŸYƛŠ/Y'#±J7e;û:~æc.ô&±ïÑHîE¾z÷0‘c ›¬O=^"YÈm'šuô8Ã9jðP™ˆ<>Þ<3ñlïºëÒ¢÷’©o_¬³>_^Qîi}èÐ݆˜y}Öð¤އ¾­Ëû$È20{qžn\ÎÓ‘ð¥=¶/„ôöImÐð•{¯cÚnSXÅ\±'t4w80-ˆaÓN¶–*fÊ€5L“®FÊ鈥vßœ®Tåo‹ cŽ?A„[¾žJØo¸ûe1q­Zr­–†´Hçæ3øŒÖªØ|õÆ^,–¹sdŽ‚÷K`Û0ƒ~ä&¦hê¶B¾;j¿¢8Hà*a%ÝP„Ò±>� Ãx;Y›<‚ïþ™h¬Ä÷Nëó)²ÏR¹×®@ÁEè` ö(¢}/–¦œ—•r=+»pg%ÇcÆÏ9MÕØçÚÔ_|IC{?þ~9ñ/;AúOX7Læ ìêÍ�’=Í0DN¦˜áɺá[Š*H‚ ¶dDÆ$FS2eÇÿï¯&ó}²Yª$¨�êuQ˜B\¡Â¼ —ppôÌoC(BŠÓѵÖTl÷Ó?KV×U²Æ0"DÅ8…ÐÓì`˜×MBÂèm‚h£h|xÚ¥L÷ß Ûұ̺�²Gè$ ¢§H»TÉG´1O`‚a¾lćßÞžYs™š¤Nx¢é·Ç©hÕÌØ�Uq/ª‡ggÚ1×U�’ éç I»1îìWžÐ,›õߎÐDs*‘îü«ùL6KŽô:W"Ì;·”»½Håí½«N#$¸×Ç¡¢MD`c{…!ú®z€ ­lh‘OfȾV'BòRô™%f³z9vÁ–Š Ò/y¢1â±$¼eùèW_GÚ:k)”¬Âæ24d¼ó'Ö�]ÁKͯE£ óx–1“b81!ÇÖõ©uj”TNº¡®ï×!\VDyû7¾´|®žäϦ„ ÊȤÁÇàßéño„Î@@a©Ø: @g¹ÌcÝ•æÑu«^D­}XɶKYƒ)À£Ôî ¨ºnNž‡Hƒš0x¹à€¥Ÿ©àc˜òï*ä¾X’‘ú0'bšO».êk{Gˆ©¶ŒÎÏSB¥p© ‹§ƒËËëXª—Ç9ëàÒgªX«Û€ómn`€3Ìåµ%i®Ž*ªìå)ï&7Eðmð0 ‰ «˜)Í8f©4m¡žÑÐ!ÁßcLÁã½0¦ïýv$œ Ÿù$NyÑ“‹Ç2<–=íw¨F8>j“Ul–{/Õ‚ÏÙEãLÇð«áUxÅßQ — ûÉPúwL+á!8)óq³Ê<£Õ+•î 0ÐÔdãlñÌ'JíÄ<£àSu›—$o´×œyÓ,ø1©Q »Í2 éIr½1º#ScS¾Düåª~3œ�8ÅD˜Y"{=Ÿ‰Åaòóhs”Ð(O ÁIÛmýÑ=¤{Æõ˜j¬–[U}ßtÕ×°Ó|Â[> å"«çk£,ñlO*·ßKñOP&G±òŸöy T+jàg“Dë2ÎdâŸNm¸;`ù÷Ъü7¾… ¬‚‹:™ÇIEŽÂÇ´—§~Šèo¥5Užåj)¥ëtÆ“ÑëÈ·)®"³¯¥ˆò¿>…ÈÜe«]Ü„²$( ІòS¢ºÏwîۦ鯸Î]åsvëà×£š“\ÊÃ'eús¿›CÉróã¢~©=›ã{„±TŒ®5ï% €Ø pýWÜêÎPN·ìûúan‹ýÄ1z}R˜ð‰“.PÝ‘UÚ|¼b÷V[Wж|º–Ïü‚‰Í°œ¼ãÃjض_/¡=¨ïPb럗?gjÞBÅÔïðkôÀcÂN?*Ƨa.2õ°sÂÕࢨû£EœN5K 3"Ïɪ²2GÐéÑŸá¢T6AGä\ Wi:ö¿9çÉÞ~¹¯(MšŽnäÍq¦q‡Ü¤¼4€FXÚšÏhûÆÑLÝd¬S•Lk-³Ü Š‚ê›ÿÌ‰Ž¶Q0‚a¨‚0�Í7²î!£]s™Õ>FBH1{»”rOvgO­F\gð´I ûŒ®i•«'h„iØ+ôpÇ'V"­~þ¥öHÇ@ÂâXÊÛü$±‘ÔõV—FÒ;HUñ!b29qC)ăøúVÆ€A0ŒÑÊP1 Ó’w¡7C¤RdôC”†áÇû>¦}F ‡ÆǼT(�‡+‘ëkzÕÆÏ·°lÚS3ûb’¿–žî¿QÓñ>Š‹üTx¡÷'M=dÄ©û²O¶ e´ØÆVÌP=„½îs¸%Y}ßɇéJVrIëZ±¥’-2…÷}å·ÀP*§XF>Zb6*äŽñWB ‚q‚[­îe¹2MÜcw=»X›qÏ\à3Né]3/Îi é³Ô!bzÓÔ§LSd{VµÎ¤_¿Cä ÖX]FÐo«~ ÖŽÄøååMLŸÍS>æ½gê"8 ÁÊ#ª¾A‹R)£Že—ÔÁ }òš–ªÆ¬*åó8!8p–l­õž*ˆPR¼âDóU?±¡¢‹pÙ™ç=ˆmXv¯ãvÃËð²ü°Vf9XÇ3^òfo-WÝAÞq®8 çÐXšEâ {/ú+?àõî„Ót>+˜ÀÑ×®"5b@ì×.2½_΋1²¼æ©îÅ%¤þ»ÀÊ`ˆh¦ è—€Ä|ÒT3¥8ìh5š+¨^MC×7q~.äK¼QÊÈM¸vq¤ÖÁÁTT$ 3=1+Í?3Sr'^óWN¸¡G†ãTþÙ²}ÀÄL‰o龯­WK6[»mev�̗͸Œß­�éòrÁm<ÔNÈLY´ùÙ¿¹ ~Ò;×våR(ˆÂNÄã\ƒ¾'ÛX "ÊòêO§¼3uÅÃÇ'Î-€…iuFâ“Pðn¹E° †TLê¾òA8ÐP[_” Ó²m§k(VÕ¸0GåõýN5öâºíõÈßÑíÉÔÃË~Û°©j“0õa¡ÑÂ)º»ëriPÐÛ¤8KÏ…&5A³+ʉ¸ªü)Ø´Ž¥'x¢ù¬±'ýª†¶.Äq=§1ŸáW½’×,Ej®qêWG÷ˆþ lË Ùˆïˆq™éš^Ðý÷Ÿ ±HÐß³4]h»‘ÚÇ,GëöòQð>ÁÈÕÕ»—=«¯Ìc QRÉWhk«‰=×!Ûp‘Mׄhq#ûa8m§î}~á—8°#Hè@¸ðæ‡4þjoŒ›Ä+Ëf%=´”ýðh&ÁÅ¢WaÛÒÔ—¤ß?Lµ­þÕNîÓmY„ʇeñÓ=& Gîña/ð;u®žn¶Ý£Š o¿ çZÒ– o�ÜF<‰tê�rƒ_¡™”’¼˜PmcuÈv�÷|#´Fóyˆá]F¬ ¼çªÆh57.f­eË»7¢ø)¨Ì¶H4Òå.aÆ/c¥á“·q@SºÌvÃ)5¼n´§ÁãrNPb’¸ X–Øp5Š«`p»>Æ""n|âb«Tˆú\XÇoAXk‚Qi! vÇS惢ì6ç.ãÏ ƒd*Eä-E\›?4V‰ü9 +B€g®k<©&¡zIÁöº?¡Q{Å™-hxçä¹[ž¥))Ý T°&Rp…Ë…ìç œ ­U‚t—P=h 8øU® #VèÑ”¯¯,†ûÉ›$äMJ£éÛ”÷R$\M§ñ±þÍD¹£ì ë¼ÎÕeO5Øû7%©¯*Î%âV_¢£=9ÖšãÕ÷wÎ߯=÷R\×ð£±FN¡“Ôß Œ»à«dG(ó¹„)š» °uB.ÃLá~Á«^Ynx±‚ʨÃiž‘Ú¬t¯òj "Ю a9«X@±)_9óL¨ž÷» Hw¤©…Ò˜ŽZÔ_GDÎ9)þ¬ÍÁʉN•λšG7CGcýº¢xÙhd™øÃû©Ðôðù“­.•§†%ˆêEËÑH3J¸€cÇÀDâºZÈç h(t™´ »pO ŒgŠ—Ö’”á"=ù5d[xªUñôR¯KyÌLŒ.jF¬£õ*†rH—D^¿-ƒº€·²"X‘:©˜óÕ‹}³MÔTe;a�‚ÆI]Ôµ3Q+Þ©•/LÝz!P©æžww ($þ¡­Îé}r¢ãù­lÀ‚Àù3Þ;ª„k7QQoûm=Ê®vH-ãAˆUÀ….eûý~}ÕNãiþ«"º{^„¿‘êUgÔ…žÀþJ¹ßÈì°¾äNrYC:Äïx£^ÞèY]KI¯`ê% ãõÊÀ;oðºäVÕ‘—¸¹8Z8$:vÔ³s6ÕƒšÞ7Ê/;ˆKéÆé­µ°%¦Çª__·Å³Q5J^ ~‚ZnT¿_¥t«ëAù˜Òn˜Ë$ò£?x˜èÁ1wùEE½Ð‡ù^8¼¦Ú´çO(¼Žåå6ènÂD8w�ÐÈš¾J¢}¨¼¯Ò­3%â^fTkÝțΪ€O»¾\v z¥ÛG…šZÒûÕõÞ~h.(ÄÊ;†u‡â˜®Ø¸œ¦’Æ>>yzf¥-‡7PȦ’£ÍB"Ü3ÞØ[m)YéÚΕ$(º<€³z/çšæ Ú v-Cì®>XŠ‹&m‹²/ï!WôS€FŒ§ sjÄ|Ïnw+ÆPž:œL+S`†Q„§ÿÄCŽD4® hñ*ô–P‹cá¥DϸU‹›¦U™ºß{¯ÙqAI­® ­ âRW•˜E=Žªz7ô´ûSªJŠÙ¹èš;´¸Í¸Mê=,¥¥vºÊ¶ðÎpò—û ³æã„¡ãü\ø2„ý.w™mbýè1€ºänËœq½e›Kí7L3Þ9Ù²á»"eÒ‘ÛŠÀŒß7vu°RáÂüSZVcÀ8Û*¢Ä ž ”ì–!ššg ÝצÞg2"˜¾ì¦üþ¸džhØÞÅã’Q6í—%6Ç^Þñío·õnV#Ï:ôÄáô)Û.ÌϲÈ¿m{<ݸ¤%$Îw?$†7³~dguhêÌ>[‘Ä0Ig –íÃPÓÒmé”ŲÐLp‰Ž\Ô¢ª0Ž&³e` l$’S~ “¡ÝX±2=ó@ Ü%÷Þs€LóÉßiðÆR»ð£`¥xt20]!r[-ÃŒ§†Èt=btL:êÍvÎèU!Ä$ú'ßÕ#ÞPæ0{¥ÌñnøYù¨òì9r—‚Oô%80µ›Ã’íê\†ú†î±ÛÍ#ù‚¬"'‚ ×ªõ#®êcoÍ‚S&*C°íǹڜuh.&O†Î¶ $¯‹Q#ÛL‘Ø"=;I¢g:b1ƒÓ dS«²ôçK o(ø {üF²G¨®ý‘è¨pFÐ3¢dü7¹†”u¬%#,%Q3:Ç,üâM‘äÖl(B‚Ü>eö±”Û3ãCfbÙ¦+«z+UÂ6Òúp>¨–}›¦æ:$ü¡·$xë¨-…í ¬6èjÖ$”ŒCó3¨±¨Kl‹V}¶‘OìÚ»B ^X‚ÑÙÎé"!Gû>»¶¥ûW÷1ëF ~ïÁŒ^š¤oî¿Ïú¯*9ž½x•v —BîA—Ö¶Rµ˜³"˜é5@nÅ~\¸DÅ:øfC©äð&Řv™®>|Òˆ—±µÍJÈ2:+ùúÖÚþÁ€“L·kÄüÅ1ÍηBþÿ�Þ´v endstream endobj 58 0 obj << /Length1 727 /Length2 11561 /Length3 0 /Length 12143 /Filter /FlateDecode >> stream xÚmvsp¥ýÒm&¶ÍÛ¶mÛÙÁÄ;v&v2I&¶m›{bsbOŒ;ç=ß9_Ý[·ž««W¯îúÕCI*åèàªáådedebá¨K‰é°rp°�X˜Øá))ÅA@SWG SW @hP:XÙ�l,,¬ð”�qG'/•µ+€ÆœöŸ @ËÎÔÂÆÞÐr´st·1·¸»»‹¸»¸1Ü„˜þ©�Wk ÀÒÆWVÑ•U’ÐH+i¤@©@ÅÍÌÎÆ `ctpÒ,A�»;�sG ›qraú‡€ƒ;äú—˜%ÈÑ (©!*¥¬¤gÖ˜:X�dþ–;¸ºðýEÍÍ<ÿ5Àõ¿–é-³ÿZÿÍ‚<ÿm1Á³²,lÌ]f@+xæé&ë`éàúwØÂÍé?©¿„\þòÐüÕ`´ü‹v³³S2µhÄíÜ\ €¢£ä�s´³�Hzº,€ÿA›ÚÛØyýñÿƒu5ý«‡¨ƒÕ_Yþ²q‘²ñZ¨Ø¸þ•ÜÒÔî¯TÿĵÿÞÏ¿ý»úo+Àß½Z8:ØyýOÿÃüÓŽY^\QYFþ¿gðOZÒÁÜÑÂÆÁ  îúWQSÅÿ¤ULmþ}Cÿ¡òŸ›°þ¯¯hê ²ñè³0ýëHXþõýÇ2ü_”˜˜£§#+€‘• ÀÊÅÉàeåôû¿èš»@@×dÿ;ËüÎ ôšÃ¯.9šó‡|Mm +÷—,œ­€¢Ÿ6Ѥ_bý²<Õs¥f3dma|p«ŸçH4óÍLpç|[ö¶™Ì4ˆx41Ca¸„ÿTL^aå_³ù¢šÿ\at ©…go®yyãš¾¶¤B7É‘™sZ#ç\*ˆ&ÍcRÖÑ…º•°²pï MkHž¡÷Ü£¯Fµ-¸4~Ú]Ï ÞA¼¢Ä3¶.(ÿæt®—·woÚ}ºÎBo6âðf*|hÇåŒ[§“)t(¦¡]à ÿÊCnÊSœ«³ áwÊ@Qž«Ö×ïØ…(Õ´Lþ¾zd–N«GàðÕ€7»¯·•ÛÑZéŽkÑÛRà¯/FÈ6} •B±ÊÅÖDõöbpÁ!Á+°\ŸµHÖá²ëš¸YÙºƒÀl{ cÔú¾þÉ~Ó|(¥î쇈ª—˜wnFx™}.» …†–dô›¦à]ºwò1éRã;ŠGÿDYû8z¶”•Tïn®\(ɆWäµNXè~gô)¸»5²ù#íϹðF±Òլ؃NÖù·Ù«xz“H¬R–=rLlÄó)f}/ß|ú'K#äò„ÅP¬}LÓÜ66V¡ ‹†š|ëà›7È RÁÌ?»ŽF&÷ ªtR ­ §–ÈÒJ:0p×nØ'É4qWÆaz—h¸c•n2ßähý¨ºÃoR‰»nÐÁr†Æ×¥"—õ_ú³gY°p–Í^‹Â‹ØÄß^ÐG?Šö%9c¡æ½Ò’ý¥ë3Ù¹f˜³l7Öž5á4Á­ýß7;EŠ»Èƒå]nx lÇí¹£÷#lˆDyq{…WŽÓGæ:cF“¢»,- Í¢/XÖw •ʰ¹‡lŸð; _YÆg~Ÿ^ög…%Â𣌳”xoÀr(èc‹Ô,ý–]ïÒO±¦ ð%Rs¦q´û®{ëɶùãGn†:©ÝötÆ&ž}~‰ D~]ù<9F)¨rþ^¾îÛS}[×+c›7‘ŽÃöæÄùBþɋ﷫–³î©%Áõ¸pC…îÃ.’Æã›t«ë:ø6–)äüÜ•� óÇ%(Ä#÷k‡©Tœ‚º›%=µìÏŸ"óúAtdÞ8Œ•bþ¿$±QÅáfF’e¤z|+KdíŽ É“$ÝþHe´|ÿY‹q¾æQ€A$¼„dUF M¥ßÏ·$éß`–oŸˆ¼5J­eº×‰¾Îëo¸®NË~pZ(P‹ƒ´þ.äFéEÝ"!ÂÿHƒw1öG˜šMK°|÷$=lápÊBaIm”æ¸,ãJWGyµhÔ‚ŠCÂÕrº¸oBÌ ™Ù…Ÿ€ußÒK{d÷Zšü+¢ž*Jµ¹õWEÈsfÑxkAPó–«â?ç¹Í_ ;Í,Kºñn/kþvto#àJ‚ák¿[ºá«m:£¹©.Ò›i?ÍÛA©õ1VÑ÷£W“÷Ô§>‚àÈÎù<Ķ{_‡ÈN(ÚˆðÅÛƒ[7òãS,èFï[ûWŠ–Ó‘LBåc¯§{\‚*2å˜ú+ýÃ/˜N2–ßE¥Z xž£¨¹t…¸zî¥-Žr7ƒ[¹òÏ•àô¢áè¶zGÁ{0ó„ &dYvòG9-^7_½¼T"ò¿´WcÈ"ÔG·Þ×̰À9Šºÿ¶€OüLF2`Êsò=íŽ$t¤·dXÿWˆ.HLj!‡9•»€án÷úÜ‘Æ)’ Ÿ]0’?)<†,k¸(BRIÄm“$$ü­>ñ07á þ1Í[˜lÀ3=IlA,*pÆØ‰[ï¥Ð¬b‚[«Z€«Hni«} Úk/ÊhF'8£Ý§êT`%‰†²uŒ¶I JÿŽÕ*$±9áÔ¤„Ú X4üæ5ð£‘âߌµÊÕFcuE{W€‡ñ¥zæ7+_œ¯¶`“KŸ‰]tÐÐ5‡æÈš>R¼šõXA¼ÜSÍòùŸî÷„F’k±�'QÏQ BÎæÁPÚ.UŽŽ)Õ¡1Ñd^X~q#ôõ±®`$óç£4’z°Žâe(ÒØM ¹j_¶Riìkg7™ GÁLœ¸‹Úƒ j·bkÝ*Ñ(Ž=“¦ïÃУXûë‚oiк˜kö’—[“º|-Ûv[\K>ŒÍÌ–~jªyUnº+ÓýkN#¿ ÆÎ¢\·‚¿¶ŽCPƒ=7|Ó½LÜÁÒ½I úà3ïU¦.j>ˆ·”ÒíåãÞ8Ô]à`L6^æ`[¦ì’Wákš–vøAp§“ƒÈo8z"¢ɳ¸(–…¡6/; JC¶gů'åm4D|м¬´á!Ìdpg¡kìáÇaØŸ|ÏŸ É‘9˜AXÉ1Ý`¯I-y(·1DèóIyÛÉÚ)ñhÂ|ö&Yÿ”žŸýi2KÆ@:ôä5KÀ8fS=)(.îê¶ýüKvÝU•¬ô b±µC èFûíZíâFžQ¸ç× =Ò<,ú"–=ú–²vžÎÍ4cN^P`†æYb]Lº{µ0O4ó› À 'å)sÂjšÈZ>nG,o{ËØªv¼¨Ãp›zB_Ç(¢zîbí0ï¬S’Ü2¾–NJÍjàØ¸™0×0¨i½šö\7­»§š.)Ëe{& Òwsè%½¢õ¡×ºZy±þÃYÙbú{øod©ø_«îÞ¦oN6…DbñRƒ—Baý´ GgÑ ñ³(ZÙþÿ÷¦³ö-ú #ß¼¯ÚáVé¤aöëûG‚$IÚõˆ\%[û‚#_³à Cè">cóYŽÓ2óøŽMÝuÀöo2R"¡ÄhsíL`*?PÛIfΛØc~錄·[½ ì’|¢Î…ÜÅx:ªF^˜™É•g5çˆõ¶ŽSÂrhÞÔ¸$5¦´ áe–öq$&ÓpÓ;Áó’ĉбÔÓUsºS²ÌCá;NÃÉMv éÜ« pMKÐu”-¨zl [ªöÌ:Ñ^ÈñÊ]ײÈe¤¶ä즇Tà‰ÌQ¿=éÖŠž€{ráãmÕÇ'®Xwsíüƒdœ2pÌ•W~¿9c*iYÓG6ć$ÑÚ$‡X«ÂMd‡õ„ ÃpW÷)‰w :·d§wãvuæy!Ç­ ²†6’¬|1N¼ÐîÊn¤G#‹ÔdoçÊå4Sš³€ZTfÄKðÆ¿÷>¢E�¥Ø£Èxo}¡¼' ˆÙà÷ûWÆ»€çApý‹DE^Û©ŒÔÓBò[©Fdðày$¼«Ãñß«a}˜Ä¡ DrÙØˆP >–5õ€ƒX!àâ£kÄ‹7‡×û®È`YP$¾¬‹—AQQjuªŒy–K[#Wá TqˆY•d½ÕÌ£D/ÕÌBa“2´pÝ,œ÷HM°Uí\c¤ˆ) ÞƒùkbõÓ€ÛÏ9o[ÿ%Êw%SI¡óúgÖvcøs§ÆÌˆ Ü0Co‚W‚`Ù/|Õ”¿¥¼,3U!¿ÝÌw2îÂp,81:ÙR Nm¸ÐLøOE]®ÀÌ骔±Æh ;âŸfC¼Ù‹²ïÇ™ fS…Ún 0X Oïž Óõ‹–Rßráeµׄ…ÉÔ$pù½«júÎî¡Êff$ߤêÐÄX¶uÐÝÁMË%HÓ<ùËèr‚&`ÍljN>',ŸiöOƒÒ£Sõ(öL•±>ޱtX®f¼(1jK*5ù[èEÚùŸTï’ÒŽ8Il½ÀGäø Æ…Û×LUs|Í™E%bgF/Ê<5fò,.€˜2«ÝE‡¦à”^¯Vžp½ó%(¹!·é!i€–œÉqZy–šXq;þíÖÉ(RL¥›[ÕzeÎ÷ãÈDß'B ·3wd-ßiMèúÚ$O€ýXr`�ݺÚÎÍÞNm§²Þ“@|"Öÿ âá"p÷R§÷ňv˜Ïü:Gg%?ÉSBH°·ºèêïú|+VR®»@Š?+›¡Ÿ³ÎY,ª˜¦¸ÛŸB-)ò©aK†[¨?Dv’€™Ã@-†ÐA)Þ‰•LHFÇW‘À_píÖû,ùC'¾ý;æÇN>âŠUÖm ØK`ëÞ zLÅ ~æÙGÜ2¯Úï‘¥åe�OºÙ‰fÓ}Ãø¯i®HH”M¸£¬œâÛbâ<±ëØÂ¸“jaR‰‹Mï 5ññÝ×^ƒ2Q;õ‰äƒ¸ý‘©”c9®Š’jñmûõ‡¥#øÁ½Á¸£— ÜÀYÏV_áïöî!w Ì8’+fßhÖ¥IéÝÚ3uðnÞcóŒÛ½Õ²Â.çSÆE­øÂ›üyÀ¼n§Úà‰\‰º3œ‰ã"ñ4+Ý#{8©zk ¥J² •–Qµ1Á¤ÑK©aK’±×Ä» pIÓœÏÃÔ¯šÚGÛó®H‚\¯ÓÝ;VêJê#<­1ѽ >Ù°‹mXò¾Ë–¿?øÉª¥‘Úã…¿»_òº ‰edáfRÐÿôY2ï¢=ýŠe×€gGVJg·ãò6Ý+Y¾æ»Eëîì©éÃñÌa5i‰µE¶6$O�½°x }õÕÔ ­~R°ÇSè¸ìà/ØŒ¼0FÝ0¶Ã›fŒLFX0žC¡>3ùÝæa¾‡í…Ž8´$«öçxU~E÷ÌÌÖãÇØîêá"½^ÌîàpE¨zU‹o¤‚=`ûœ µF5rO诖 â`z ™l¬Z/G(RE¢z)9ÄÌ¢[³µOš;áíìXBs^j¶—k¯ñ[CžŠþ†5¾/%ìSУ»F´°Ã=zaŸ8RýŒR[¿K- Ú Ï:ãè˜ ñù‚™QÚƒç ;n͹7Ñ„ñTÖÄlzÿÈE|5DÖúýƒ…Fþ‹l½uD¸‘<dzô Mkë£@IfÝký˜! /Ò *yž"€ZºTÎp~j«_•d¹5l ˆÈÕ Ži[ÌC/`Ã6Ýãw•ñ ²^J•+JCWˆ`Üì" ók÷;·ÕŽl¤Z­P»o[¶7ÌOÈ1–[¥Z.ÚxHn0ñW ’ŒëWCGUÉᵑÇûÜ^S¢ž/V|ø<í*–B¨\VÎY<=(ÞËj¶3×ní(йɚOÕ™ö^ÒWO¬îf¹o4Pž,¼k¢“1ëèÚW¸‘ç·ê7Ýp•žÝÛ8nTË|Ã'Tu.Ö¸Ý7•®˜³¸£'…䎂;^6é.w¼å^” 7)ŽÍ_+Z“t‹þÔÙq¤>6*4Ié¹CWO:öeWV'pDÆhJ2'¤¿®*ß»ÿ8HÅãìEiQtEðQ‡eæèÇJvݱ¦×ôOÁÍ»uÆ™u±_BãDg؈Äbœ{Nz²vìß°=Õð ×ï›3b7P–(WAâ)‚Jsvú2v€¶ŒÎ t[è¨Ô¾™V§I2ºæÒeD2¥ÑI¯ö1ìÓii5oè×øfõ#‘ [Ê,C_5–W ¼=k ƒÃ'Ò“˜Iƒ*„³ºöw2U|9¶ @ú+ú(®ðª¢¬{N‹xƒøÆ™­Eœ–¬h£4±K Úwª óFöpg¬5b:\¢hØAwɲî:qÙ«|Ö©Á‰˜f9„ ùÃ^©ÔÔÛÀd‡î*$IÇ¡·-×{þÆü¼sÝæ>©>õBôW°zñZÒ^ˆµ rSo¡Ÿfåð5ÏʘÉzµrËFFçFOHÓ·Ð@g °ëN…«¾çÅ]Î ß}ðS;2R“9fÇ‹j÷Ïÿšˆ²à4^XtFv$_èËvQìÝ�kÖ›R“`&%?$ÙðñCùñoùHa µ±¡_F ’`ÕE…2q >¶àìžr:x‹ÔV"ÄøõÔð¢wL*\±^–ô€WÆOiÖÔ˜3&Šó¨äEœÑZý‹âðë]ÃÞ÷]U†ßˆâØ2w6ÄæŸíº) «Ù™S"Ôv=ü]‚&uÓl—¶-ÑIh¥Ö´Ŧ¥ o1¥ê&ê^Ó²³N”=¥ [.˾‡+ª«0ô+_-úÜù2n’‰É·|hÕ4³9uänaê,]ê_Äø¬Æé…lºZ´8Ïœèb5¿¾ÐöYØ, 9EONBœÂS¤ýTŽþÀìd§ÙU²)'{¾äÀ´ÓÃ%DÅ›óÕBœ­Y^ŠiÑÞ‚¸ÌtèÞÎãÕŽñù g~Lœøþš| ZéëÕwMÓNZ1õåºÓ_"§Gp¢”„£LQIîdÖÙ,Ld›„\-'œ§ pNo$“º±ƒ³Úú^ ª(|¹$žª§ló±MÞä¨q4ª[$zªí¯†ZOcxŒ¶uÞ dY¶ÌŠ0qN€Ž*ÖÒâU:ÂÄW¨¶¤ïÖLüÝÏÒœíej  ûšªQãfcÈŠœ,ЈIÁÔ±­áø0•úÙõ½è’ý)ÇÉè2Vl×øTÂõhïØ²YDkß‚Kžw%„ µÉ.èôZþþÇ&âq­˜€Õämô¿æÚÿ ¬ý¦ï ådÌãN çƒçÑ;>Ô g, ßù•ù!#~h{×F:5¹WÎDh;YòU/$ßóåÑ‹£¦»Ãºr4 eê.Ñ]E4¬¬èC”däÊ¢ªßóçÆßæâ£Ó–bIAJ /§Ôô%ˆ{ä¼UøÅº‹eöDîŽ÷ŒîÏýÜΊä!Aîþw’ãê¡}N-p»„ÌšO² ÉǺ1vÓ€ÔU¦x“å¥ÏDVªÉq¸Y"<1«j¥Mêòƒeìy“D‚ÁÉV�ôT!-ç’½/W.8æ"¦–* 2‚h%Ô&SÜz_!Ìu·7åòö9y¸%öFˆH[Xk;µísiOëÖä«^ä~ÄE„  ¯’}ÓWç&ÅšõvˆD™³¾ц{9l…ä‹ÀLBqˆ¦¡¼QÛ‡´Søm&jtË.ßg-óøÒ¯ÚñU”A›‹Ø6z à„T BÒœ ë|mol'c°õaÏÚþ>´ßY·Ç„c·>·½ìí³Z…Ø<É~]Uëêõàû!f Ü{:ìꆿMº†Áƒ¶cË/ù©+ «:µ¤þ˜D¹gqÛ ;ÇW–\̯5ëÿia^° Æ56Uå¹ÇŒ×®{ã8ë@þl=íbˆiž¦0½‰÷% nîZ€%KS÷4¸œ–ð‡Ã\yU �öPl‹kñåÇe½Å3ÓdcÆkîúìÌ\^¦9p³„yÚ‡i}Ò÷Ûϳ¬}ËðG‡A(|Õw‰·%õа~ÿIé0N†®‰Cbßú äÙ�2ë öäc‰—ŠØh[ž•Jr\C¿¤îš'±oÌ=ß¼Åo5v®öü~`pª*‹iJ¾­USkQOWaô'¤"nØy^' ÊÈ™Œ`‚"ïG¡*Lö‚ÚrôÅ‘8Ø–¾´Ê‰ewÏáóöô½4òÖ‚qÎÚˆ°ðúÚ»éÊd|?N]Kž+ñï¡ì¸2À$yL™C(k³øÊ/úó>T¯4‹;É*ŠZ¬ í~=3sÚz&Èî‹è@ý lnvž'ÀÁå¾+æè}¹|3¯ ÚP%{]ÇqávÎΊ’®M´S0#kÒM<Éw¤C‚…FvzȬ=²°q®¢šÂý‰™mº©3“VE<£Cz§õ¡ÏЂœ´~˜÷žR(j%î4Í+Ðãþ´z7î£Fyˆ¤æì宺 OßX†|³ÇbÊ¿íÁ¾Ú®ÿ‘!& ´?húùûx¨!w‘^ŒÁ‰r©¢%ïÃ*!ñ½Z–‡l¶!î~ÁÊ|ê+LðBcK5a/›¤çú“ ÊEüeµâ×[Xñ‡yéb7•‚74Ì$ú,z“¿ÆÌŸš$‚_¿ø:A,H†X‹M/^E õˆ« •PJÆaì ʉyúH³‰BÓ,½£ç|ˆÃÑ ­ï£u¦0˜ïÏzqöï:ðaJ<âb{FÍ…’±®I5BЊ>«…e䙃WÌ•»ˆj[*‚š»úÐü.imj0³£Wã‹MõǦ2ŽH£ßQIÀ+ŸQ˜°[ó#¸O:’¨ z<º¸LgÁ+ñtŒ €[y®–ù Ûd»#f7ZÝë/mKŠœüó©“ã|+Š3ð‚‰ò‘ ÄÄßE2(”;lOÜË9Q|"Ò§€ v$È/¦áçðÌåÆ;7Šå,r½Õ†Ž¨õ‹/ŽÔæÎïÞ¤ ~!š”¨D‰¿ï–ÄCú„ÍšŒ\1úo\¦á8‹`S{= ˜+íí/ø¼•Í6„taé;sh«§¿eÊíwH$÷=¬áÀ„ìi¥Í6tÀŠ+ûI ÛÆøaK7ü-áUû˜ëd,å¹=Ž~b±P§n1‚:§Ôö#Ubh:·Ìßü(:‹’ÚþY¼òà¹=ïÍzRqê[w]7ÇKEø#þQT6¸¿[Ð k·Üõ)Šå­¬¥¤j!q‡j%O-=tÏõÜÍ4bÆ…j<À:±»à2¡‚½g–Ô‚ n.lwÐ@ŒÙ»»–œ²€:e¤µŽjŽPÉ5<™hn8A2#£r?çD›êâo7>yømndp¦˜8»&t¯ê³û»m¾Ÿ–~†¨`ÌM­ìciÇ:YÝ*°Qž[’Ì)%äÔʘ®u®§¯|ùô"þçWQã§Ui`6EöÁ6EWטQh¤rôÅÚvaª˜¬ÌÔš¢g—B¿®¼ûB‚hcuaÈñÅ!l¦ Ç$íRCùÈwWÔ´áOB0êZ‡È :ÃXÐ6!å²)td¿Ô®„bFˆ¶™oþ®­Õ<®T¶Òôžv`ô·D‚&¥ ©"³ù@ÍïÀ{ш&žÙúêì„Ai `Ûw%Ÿ rÞZ†<¤ã9óó0Dåc¶ÇÑ vüù¼ ܜˋtåþu¹³}h9ýãsl¿Ïå-ÓÍbxÍû÷Ø^… ÉäC"µ wÍÆyÖ ð Žï?øß4¨GÇw©e�† ‰Üdí$‚.âmÞš/u3ŽÖ•%‹³r Uú´‰B¢œòó鯲È*¡ÒÊwïýx´W†ƒyY3o-|S'‡×n¯_¦^añà ËÃxÈîÁ¯œ?”hšmp‡ñ¯Î›YùêðÔNF<¹½:®_ÁîÁÕ6fËöŒ*‰w“ôö,GÖ§¬©ž¤Ï‹6“E{DLñ|±?×{nÍðâZlgŠØ¥ uíj­Ìk [6´ èñŸ,umS#©­•qü©–³þº€ h"f pk|m‘ÑÅ~5äÝ¥7{=,ŠÜ «HL­×rŸ¾zNI@«ÞÖ'™è“^+W!‘5P¤ ,ï)趸ªß&L‡)LYïy ­M<‰˜&òh’ż ÏH©êãÎ1ÕYKxÍÆ»üæF‚É[ý�+-Ï“–Üž®Å;c$ƒ‰ ý¨OGxÛ$ ™ŽÇÅÏg$“ŽÓQ“1ºhéж1uθ¾0Ê#³>^*ý'ÔNx©|"«CB™ZÊLþQCybº.SÄŸnN*¤7v@}N‹Jý’EsÎÞåAåFáã ‚k,t=˜_%6ÀctP4ÿU-g—’1/oq"”v"ÒoSßÚšªùÊ«TBݘ¥JsiNMƒN>ôÎù$"Pó!{«/]Ø+®<ïéiDfÈÏÐ Ñ#²?äv#“ü7Òéžm—eÑç;‰u1-+«zh£E_ˆe"þ§ú&´¨é³WÄáK*ªL¥C©K¹drðÅWȹµK?òÈæ_&Aÿ±Rd®|ÔýrL7&…I7ÝŒ*wgŸ¸—WM†þ8Í™øª#!¹ì <Œ0g_”^“+• s†”˜$Ó#±,±Rá&µLFýÊ?âí}üȯ&¥Ñ°ÎYþr œ�:Û’‘±Ì$u¡×)BˆÈÚ]*Ù™ÃïÖCØ‘‚0_` Ì×\÷néÅd¶‹(ÍÓ"WoÕÄöõV¡ƒÙT'‘aBˆ=ƒ´ûîŠFØž¯|Pn¢v[-†²ûäeÌÉÏœ,b£Nê( ¨zFÆ›ÙV{å;› …(„œ‡+œ DébĺLÜà“ùȬ«©…Û0q×s¤´kz^ÎP»È”ða’�¶+žeã%iÉlß°ÉO‡9„TK ^]Ô¡éX*8"Ii¿àRâ°{ÝI§riU5`ÈÏ„7<“va†XØÛîÇ6LPA`óO~…_8`‚/§ºòçÛæHX_Vøœšóø i&¼¾]¶€@9ßXÍŽ¯,[¼aâÃ{óò‹7ëÿÜ”Q<Ægøëþþ; G­ÂĺLWýq⪮‘¼¯’MY™ÕC:]<ï:âtòÜ9¶w…r¡{W=@¶7!?š³Ãkqü÷ú^:œ“ÜWyÞËù*æ •¨hô<|½qÐôu5zÔûÞ‘Yþ53‚‚qiË:Ç}èß·}N0#¯åR~Í kÐocÿé¥ÁÏ?O’,àî8óFmDáJ„ .O5j½+cÎø"©?!þ¢²ÁûFm~Nt:»¸U¢\ÔÍd³üÀâ€È*ÛD4šÓ3ÆRu°ˆ‰Á°ÃüÀš¨b³8­^Pî¯mRÍ—Ý.h…Â9ùU-·; Þ/H¾÷A•Ð?µÉð \âáÙH’ Ë8? —ƒÖÆ3x5`Ô¾‘HW ¢ xKÆKC3ý"+W"ãQ'ACÛ¸î§ô :(ã‰ÿafÑ­ÔqÏËЬf›³\ßÍ.Jj’9ÞÄ¿h[Z^!™Ë*ÌF€Ú‰tsyÕõPibÐvfŇ-s§ÒÂGcË;gV£‹'ÿ‡—׉nÔµÁúâp@Mâl~ñ°å0ÙFMǦÃΗ~Y¡u»A¹=ö¯ríO#Ñp³xê¥óð3q  §Ÿ&‹>]?20èäïa[›|O±—kû¦ ¡ŸCToBæ×üB¼ë1J ¾dèjûùV1²iõÆà¼:S ·O–Zí6«)”¦do~Ù°hKð;´‡$Ã’ÃéGz=Õ…|7øRËÃApb}}ÖÊ}J™b|ð+65·~í“êGî-QáFàÕâ“ çx$—AOcR? ÿ £éYŒs5 +àhY•N2š¥EgG±÷.þ}ˆ¶Lg}úÄ‚œ\N¢€>æCH…ÄDŒÌÅ!ãìZ~öÅ›¦EÞBŒZ¶üð5ÃÉ>ªV+ù'éoHiϧ"öœ‰Zb”ÎýâISýž‘êE 3½1§Ð±ÓĨ§‡ÁJyPJÚû¡·(#²é£®Ÿýõ'´«#ܳöÆ�ìI–WLñ ’ávËm7M`™ms¸8ѦÔb–¶NÃÆ/N¦þ½ðê­ªûn¯ØCiD43XYÕùï1A&¢´mV¤‡ð¡…KñÁ£åÇÁ:Ùþ_ð´C‰Z9¿Â[^oA^©hzW Óˆ6C 8Ï߆’ÝUj»@#øÙÈ}}Ÿ®”üH‹½3ÚT ’T¿¾}(há»ùN2#»Ô᪂HßÄAô«gvvç³_GÿÆ<\;ùÊK:•æÐ²˜¹â/×s—…QÒîgÚö)ôæ_„_¥BK;B…~æn+'˜ïg„4d_ö‚ôƒ±>v¸Mb»LžøD22&Dá¿ö§¢ºv,›zÚâÉ:5 6"JPŒÉçDYóìr§N‹Þ°_k526.Ü(³SDžÑL–†”Úª›¥ZÑî £Lz®ÞRáKNæ£ÂßÅèȧd_wÉskMcmIùhŸ$-½ˆä=b>ºUºTÀÁેæÁ®8:6Jð[h›ý2÷sÉ¿/­ZC ¶4Å«`Õ­ùRî¶w,A/«Ádx½{Jk&Vâ^÷y Y£Îㄜ®ÂøCÌZÚŠM®G$ 8ÿ®+î-7ì}Œ°ï¦ñ,âa“‰Çkò! ÉI>ÿæ:Öóx›°[‹‚„O3bpdV9)mR„1M¸„Âåîà´kÓ­õªh¶ uèâY¿žGÂÝ×­9³°tͳÃá[]µ·æò“•Ü›µTjÑBáÜ€½F’êøÿ8Ê ®Å䔡`C†K ϳ~ÔÂü^ ‡¬v+CVTƒY¡ß¥¾ÁÁW¾î8ðÕh#Ü‘lóP=dw¡>66`„~öù) 㣙}oÛå²á4ùò…\–-ÕÏÄÄ ?–`›S„ °±¡“f6�©¹ùˆùG ¥£ä½=}ÏgTû)5e·T¡>ðjzeO[Œƒp‘¨+±¯ñÏÓLJýT»—pèÖÔz  ž„mhzçÃØõ�è H±®´§ãÇЭ+•ÂÑ‘†IþË{9Ü…\Œ%ˆ+Û ÖjKýG›5 / ŒÊ ãßVb ¹ˆáèn1×Tá ²[&س XN{ö€‹£jwûo‡¯ÝÜw{QùØ©õÌÎø4/¦ç±RžýzTn¶Á7øgRpèzJ3¿`°~Ëš¾|£cV! Þëao5O×ò#^-JÌHÃß›±Ö„»õ*ˈsÙPÄà]ôÞSØêaÛ ¡#ÄñÙƒ'Pƒ]&i§½Y[ñ«ŸLûèNmö¦¢Æ>¨¸5•žÃà!TE&+!–ëÀzlÎ×Ä`Ý4k´0ŠÂE­¤_ ɪÏ(úUw$ <Ükº›¿&hØœåô!彑ÕéŒöèõÅŽ÷¢™Šì?X죫قf¼ßXÄ.ÍÂçdSé›õÆ8 àæM”îw‰s» :а@_­AãMJ7ÖÀ¨÷ˆµŒtr°.Ûfÿƒ¦Îò:^8_¼2„µ"j¾~²íítº £phZœìÁ$÷<þU°F ÜøY#ûÎÈ<­­cĺ®Œÿì¿XEßÎ ƒeØéÇ'Þå²Ï±0už„ÜMc7wN9wuG§à f99³¯`½Xööˆ6¹­KöƒšŒñæMÅÉ” ‚ŠwÁbج‚ùnn[Žî“sîÊ>L4Ne¦V­´NeaÞŽVЭ–Þ €q62Ò 7•T_bkv0æ> ûÝL¹aÁ™£¯PÒˆfÅÜ‹òî¾ÊîèqìzF¹cÏKªŠ/•ár£\á ™kï^ˆ‚Âd“ØP_êc·Û䶬móÁŸÀô|«ßºö¢’f˜Æ8ÝÔŠÀŒï¼…GW¿qXù»—ÊAć$Ä·úe„°d¨€’]'$N 2ö ´$Ú”P@¸ËÊBdµt4]¦»¸Aó8à+ÛÜöSemTàþ^ ýMŠÊ)\ŒF%qÀ¢S1Œ[ëí ×*×·ðÊjF�„!àðëÿų9j•ÆÂÔlÈŸ½ÕŠ\CÜF¥–2Z¥Úp}ý~òH{=ð^Ñ9¸ú|™OC÷QiXœj£Ê¾øÂ£¦@ü�¦×ª¶å»ïtÃ$.Ò‡¯*G�–é×Ãnò&ß㺾h]y]? à«‡t³ß¤R]æ·ì ÛCÐR_Éÿ0“]+ endstream endobj 60 0 obj << /Length1 721 /Length2 18866 /Length3 0 /Length 19444 /Filter /FlateDecode >> stream xÚlvch[ÖdÙ¶mÛ¶mÛ¶mÛ¶]u˶mÛö-Ìûº§{b&&Ο…ܱsåÊØqH Åìí\T<Li鸔Ŕd蘡HI…L ],ííD ]L¹ÔMM”M™˜¡H „í<,Í-\(Œ)ÿU$P³14±´µt"P³·±w³4¶ àqsspsv¥srå£û粩)‹…)™¥)°¼‚¦¤œ8…¸œ*¸©©“¡ ‚«‘¥1Œ¥±©³)%™½Í¿c{;ËÿáäL÷/vn¦N.ÿ3s²·%U“—S!¦W&0´3!‘øç¸‹3×?hSc'Ûÿ™Ž†Àå¿‘á#£ÿFÿí:yü;¢ƒbd$0±4v!025·´ƒ¢ÿÝ$íÌì Øþ]6quøOëBÎÿð# øGCJS³Ю66r†¶¦Âö¶®.¦N²ö&¦NvJö¶†vÿAÚZÚxþqÿ!ébø‚væÿ(Çðï’¥³˜¥‡©‰‚¥Ë?R›Úü#Ñ¿êê¦ÿÞ‹¬©‰¥«í¿Ï›þ£Ç?5±·³ñüßWþ3Æ¿.¤”“‘¤þ¯þÕµ3¶7±´3'PvùGKC'“ÿþÕV0´ü·{þCæ?n"`ü?¹¬¡‹“¥6Ýÿ؃á¾ÿDºÿ%$dïáMËÈÁI@ËÌÄHÀÈÂÊFÀÉÌîûÑ5vur2µsù—àÿÌòŸü_F25õ05†ÚXµ7æ±Jo «ô-ž¯¥žŸ5P¥^e\›é½ÓF´¶0Ñ?¾ÁzTÁ*p‡Á 4âݿޓ|l%2Œ7…9šŽ!ŒÐ]Åz/%®2÷«ÛùT,ühŒÐ»Qô5–¹‹|pÉÜÜR šfÉ묓r,çEgŒ1¨è�EØMX_z¶§Ô%GÊÒú1=¤®E˜·-º5â?Ø� /Þ‡¹#ÅÔ·(ª t8×|4ÿa†Vß3²ës^tÏ’²£:=Á< ä,‰xüAH)·$!Ù\VçZšc9&sˆ¹·óëûê}ÑT@°#Œ|ÆXðZA¸Ñ¶RŠ‹ªâÒ‡¡:Ú­gº·6>Œn¢Ü{þbµîÙ Ú£Âô§#›XÑ'- ®Èb“ð«:¨a¤IÊÙ>'ú´Ñ´!ÓõX­~ó×™…„[ /xDMs)¯ÑÐåévšn'ù8˜í¨Ûâ*Ô©}v|«Þh¸¯w® —_ìÆŒ(CÏ µw@U\U´™¬Û¬Ù‘ (8Mhr@S—oƒv™Ú»x>Êeœz*€T*Wt~.ð^'0A6ÜÕX¦J3"‚j†~l®*²¾òEE=BN1¦ikÂS%þÔƒë­ÙÑ„†°ìÕSÞ“Xë7«Ë7âfŒ%¢gòÏDåŽHølµŸ€ÜjŽŒÆ¶M¤ÓæÌâíü+°°mL†÷>ÍöpyfYˆ2©¾ø€f•Û›Ë ¡3°yUNîøAW×Ú7t=)¯Bo“¿ïİt!çc7ßx:Ñ±ŽŠa–ëóºó7gZe؉Úv”öŠŸ wšÊœ7‘Æ+:ÐÞSÿ8®Òö+N\êÎÇýœh„!)€y¯V2Ê1ù"Úгµü¬U˜“Þ}oοú«pæÂ9Mþ•QΛYŸ'ot0ÌwZA[ÿ%VpÁ€?¹![OÕǹ?¤4"º€EøÊÊX,ÞŠg:ƒÑf|/K±G ³ z¬í(䘔9íþHÊÔ$À9$ãFNÔöSߺ1\…S2¯º<ÒMÂc„µ*îEª–ô]ÿF0TÔâ`w›ÙAF;íû4Eo‚äEgqØ”vÏúÕ×óÖ¢~Hk¶” £pu…­Ýô*®ÅCÜÔèÉž­@‘s¢¼d^ûz¡H£á¬™ðݘ7ÇM€«ÎfÆNeKOÅÿ54ò'>Ïx=½’¥ rª-‹z;ÿG¤l<†’f–X™'d­GiTNER³…O#y Ã7áKü¶ /Uͽç0nüñ¯€R¸+Q›p_ƒ®§\ø±þIPÎñ`™ZÙ3—Õ`Ž19²‰ã®:.òBÂçhP-Šú_}…%æÉ©³áíàXª=åDöÊîU?ÒmF–$�iã×õxÙb)z4ÐñÏC —.­!œ2akôç]€D(áºXz¢×E/ylûôr¶!Sâo×N—ÒýÀÓJ¡ªç"Ös¯eH &½u¬÷K$Ý÷N·k"fÚ¾¨°Qè;4e»¹“’ÊXY¦ wse—È9>/œyºfÃ&%¿pVÆï(q?x" Z͸Š,+)Oeÿy»³ÑÓjµ¤«y¨˜ÊY‰æÍñnâ†;Ô)ù)2ÿÆýÓ34?LåRÌô;½=»%χ‘fn±#�€2ï\¸¸E_eËä{Nz‰pý{5;¥ó„’ ž¶¯vˆbÙd[wP0¶g8H{ì¹ùþm5­¯ø|±N¯yV·[ 5ϺÛ‹Ðl¯Ø¨äÙ€‡ßg³üÃqáâq¸!®çP7rh[Ç>ëtÂÃOà”øî›%üÑ\gè„#…i–É<r³² ûLÚÌR±ÊQ€p¿T©TÛ÷�eƒÈ!‹j¡<=Ÿ?óuD#ó:='#¢ôqî­p¡¼ß“ŽeÚzø“ÇÎX3ý´,úÆÏžÔ @Bu4^ÜEHŽïØñCÆ¿‘æG:uªcJV™Üðw#,�L‘¨!n @…älEÐ˧S—I†ä ʘðÖ2·ƒz0Z*t¼ÇßOæjÐa+{:Îc…·NìT^îŸtZI%ö¶}©ÛÍ#ºðzÀpiô{H` í«ÇO8âpÍbæ3ˆ ë2+)bI2S U¤ïé¥K£ŒHNÈ»ò;%$]©iýHÄ„J©Er�˜-[¶Å>8ùæ®Ãtê4¼C8$µh6-b$hÛóŽEû;©R}gõl‡!ƒ§>”omaViÒ¿Ž²«’¬±ÚbjÝè4$¥oP!º„Vi Õ`¼r¿g =éó$@«Œ Ø!.¢ºy:ÑÍx{qr/©à/õº6ô”�­Æ¦xÆD)4ûûa|î9ï…Úy †Ò e¥_.oñ€Ÿ3ì¹[+7æ.Ûè#1$-ëÜúìÂÜcOñò¨ªŸƒ0ÚZHg¡Ÿ~Œ 3×ù}GfèôD†w¹¨tY´iÀ01wÅAMZ hâ2±¤|[—O£m¹Ñ°£[;Ÿ¢ôßCxžk”BùëFwAVlFðòW–¤¼á+'®Ñn/‹7·v~¼ÜŒ÷»°6úˆð˜½ÐFü Ì’d'» !O·äô€ãuWX!†»K¢9•ºtj+:ÒÈܵ¶öÁ ÛS72ªNˆKðÀbgˆNöTk±ûç~ÙéÅÃß™ÓD‰6[”­àÕûì¡4"ØJ'î ^Kìz¥Ì=œïh˜0èG=Åoe´é36¢U÷€Û'Ï\—cЀ¡¾Y(ãu[Xþ\+"„¯#z ªøåŽé ¼mL$Êê%”GE;LÇü ÜbE²@Ÿ9KE ï Ö_ºþìP^¢‰)ÔcªÖçàuöÊ<,ø!ŽZYþí”Z¯\@<”+�ª}4ÉíéÝxÐydD*ø B|]³�ÆÍ07“}Ô/&×h»AÌŽ n;r¼¿ÌÔ=5«z1‚É€¯F»²zZë íf²å©Ê ðšOˆcf©áXWÂ8½ÕqÉÂá”Õ&ÈÍ¢SØ€¾2óžK»@Sã/ðtürƒýµaÖš…†7e hlòñ¶”ìÞÊý†�ªþ€§CûSÁ~áß™L514UEGa~Æ Á62Ì¿ž·BO¿é{ˆ/J„–j¦Í+á +@zÄù^^SÈ=ӃʴTLèõýnÔVq"ŠÓAPìÁ×µù)ÊY&GÖ/g¸ÑUö˜•*Ê4 ™éànTÓÇ)þ`Dòù c£ýäè×IÆñÆàD£×ß$¯Ð]|wuÛÝ•§jm¾J ñy>´›úD§‡>¡À-¯[Ú²Ž 9pò€§Â :HjâätÃ<Æsöz¥õ HGO1Pî“ô8ø¢{Öa-+5| ž»gPV ?Ìaµ$d»†’yÇ�§³7n%+æÕ8­¿mÒ·J oÔM@z×@ónY;’â­82;噪Kƒr¢´fí\dã7�.<#ÍâÏwtÅ5AEÔqÂÃT óÁƒäŒ?#i]:fÐü}‹„lg:ŽN€€ñ“X?ß"&‚+CÿgØAT_îUK÷¼£øê;˜Œj¨-Þ«ˆ§Z]ûíìM¹äÚCߢ{D)Öeæ ¹‰| ˜É¡™’нÕÑÖ)EÅux¼ãµ³==ÇØA s®gòMîÔ|‚« LvkÜÙѼ˽8iw{XÛl~Rìÿ³_÷“CRbà¥ù¯¯T î¶w™Î0*ïNKü¯[­<ßfT«â®ÑTÒ )½4ó¬uºùLÑ*¿ƒð ¯Í‹ý½�bIÅ5ݼ]™¢OÝ"¹¸ˆúÑÆé<ÄÇÎ’…ˆ]½;HQ:yL¥žÜB2µ Tí½ˆ…O…ØJÓÌ‚• ®`4l”Òfì0oyMfÙÛôQ(ÇN–û6 ­JŽixn%eä~¼âæó'8j¹m½¸‡tÏ»Rà 4pÇZÉ}uJp½5ô¹ÁØÅ¦R)ÞÍs‰ÉØ÷ÊßÚS®¼8gÈŽÇ`f:þ‚Vå±»¨éº•ÁÑ¿-ÓBJÊÆò3!ë((~b_} \Þk™N¯’ 𩬨ÝQx©÷LóŒ³;¹²ÁÇߟ•_Bî˪r •‰J8¡)ðêJ_íÙ"uùèºDYoÕƒcƒ10äGBâ~÷XÚ¼œOoÕiä’°‹ãò`¡ÒUÞ £’%W³êŒ’›ÜxÌ­rY¾~T!‚7ž¶‘ïÑäK­gdY¢ŒÌ=ˆsrŽhLdF‹yÙ+ÄôÏ gUtà0pi-wíiÃðvÙÕeõ!, ,í‡ÇÕ䦄ŽyŒåe,¿,üÈjW,zÕCáæÇá§÷4œ€"?&p\5ë0É‚sœœd­h8Eˆüä†16ÄT°çêß,²x•ôNÌ’@kÖ°ˆMåY$©ÝAUÿÜV—Ûr²Ìßk\BRæuæWá3…„«r™‰Qº. 8/nml÷ÇipOž@å;l8Ÿ ‰+KÀÚ8qUÙĶá'¬¤£ÍÀ î°ogJ;J4g(%)¦©‡÷ë-~¡P´~=¶dÊi²+¿…‹Z_dÂTÙN|G.ãñвº÷â×x!u©ÖWéÌ}-¶¹ý3¥�ÃvŒÚÒŒˆ¨:U}EÁçSV¦Ô@2K€h`©÷ω½ò¹[àü+“±<†I(x @/óRUxZß•-c8ð‹ï:ÉúK‘4gÌ{§T_N–ÊYètÍ;àÖ¾Â9 »)6>cÕç¶ê|âäœu ¹ªþLÌà<>Qö7è¢ägޅɬàáT ß ó ´éðL®Š[Û¨¤t6ÃxìgÉómĩټũÎÀÜwê{ù²žþ¸»c7îjÌ_ˆÂ@VX»‡§¤&ã¼¼KwQÊN—}œ3\¿Ú˜hk {ªhá’Õ†'Ð#ö‹2¤|r[$P š7ò RüD̆›žnwÖ.ÒÅBì¢ÎÏ×[ ùþ/< 23-ç•—(( Œ±ì!X»`‰›õiéHêÝ»Á˜°6Êpu¡õ2LQAÎãò°fü‚ígÿþjŽ…t´Ë„A‡YØ$ ƒ…—`T¢ep•ƒíNZt£—6$;üMçS‹•`ç°gÄ5­æPçU£ò§€D ØN›Ý ß}âì´ÞºÅ¨E[ ç‘ÄüÊ1ßûdQ³uÑ ±àß8dbøU¸ªNÉ)‰êï¬ð䆦ª—¼#b¤cɽ÷Xà ÆÅs%âìöa]YàsæÔý³X´ÉìšUµØEcã[örž7Ѧ1,„!í,_’2¬ N8Fo’e3Ç”éª}‹ “ ªº]¾ð¹#Dד²ˆY°M#•ÙúÞV¸¿¬|'Rìào§ãÊñßK*m+“nª^C~ÜFó¡¦Ïè—•qíÕ¤—R¬q;îVCÖÂ?µ?y8Il+jQÂ\8Ža/ÄY©ÙØ»IJ+×y^z°Åa*lÄ`>@"Hüü¯  -ýÉ·øäÚ—Ô§U9s7¦#%Xóog‰ƒep·¾#ºÏ+’ Î"ÜêµBv�M¼SÙÍ/ä‹ÖðCr9V�ƒ(¡×SWñý“wžy./2œYßÒ}òªX2—7J( ž6y©¨ •ZR{0 ExÚ#ýºðݼ6Âöò“ ,�ï'5ˆ íÀI·æå©37|FZ—ÌÇŠ   ~a qîAqRyS¸”­ÄŽÝ%(ô¸à{ýM(F “í!–ãÕFž]ͧ¢äN | Õâþæ˜_響½€½'wmªfZ7ÉæWé ã _]25äI”×›¨j·ú½¿¹9´•—}”�¦„æŸOá ¿æÄå®–Zºv@-6÷Ò0¤êHꋃý½Ü]¥àY ª¨mñ7ßÊ£à¬XtYøÈèêÃß÷Q<"ðÍv€ }©XQŸ@êUñÜ ~ZWöIz:éw7 "0ÁP¨­JåWEïYrªäTœGÁîôï¢û';§,.Ìß×Gz°ÁNŽRA"ùB6µdRYŸHˆZéÜ ä7¸j >ÉÜû)=š_+©ÀÐ-´u覆‰ì3ÑK3÷³•¯Sl2’\«²šÙ÷oˆm¤ÖF3#ìØNz}k2†/ÄRè#¼!î8z“ l²ú/]&3‡ŒI-À§ç>Í«uäúh4Òs?75có.Pècœ„3"#¥«þxè•9t1ëãáx=í`ÆùÂQ3‰ö Êä2W8)ˆQòsÕø4¿×ËÝ£Uã=)• 9Øá5÷PsCv²ý (¢úEاBu&„4 Á†ÊÐ×üËš£® Ыܨ\vvžlD,åГ_5R¶ÉçñKMdÞ슼dn£ÿôz‚žÄ‘]AõŠ9Ol§ŒÍñãÌ^F5ñ>‡[ jj`¡Þ™Lº°®¨$â;z F‹K؀ϲ ér»Š«¶^z¡ ݶXŠ¾Ï†VÅ‘6ó°B±‘еÔ—¢¦¾Áw?—)UËru®¦ð£|ì´ ˆãv<4µúõÿ±rP‰ƒ=ù±eìZ`[ÙJÊ5þˆ"0L”Å2±â3 ?D¯Ûù¼¤VÙ 6Û ŒO™®f°%ÅHÉœB>"Ãñz–„Àm–jÚiÙẕï}êÖ<3­¬Y¬%Ö3˜.þ(ÄW€‡Òqž[t1ž¦T_LŒ1L÷`AøÓ”^” sXiýXÙ5ÃöF¢§ŸÂ…÷×^5U%w]™ŨeI]v.¿|ù “ãmçy¹‰«¥û8°Òí{‹ÙÅ­9ÅØªWÌNT(øM'L*Zk¤xÉcÊdÂÀÐÓÕ §ëÄŽjQü$XFŸˆoåí ÂÊ™:è§ßçÉZȽ&zorÓ)ïŽ6“q¿0¨ÙBèôÎ’i†ÓZž¡$sE×qxñ÷°ÎäØ6é$QÜ» ?æg˜O4í/¥1¶½sbwÉ™‰óG¥Ä“ôŸ+‘UwWsj� |G¸ó™&aÙkÓ8ËR* ‡À TÉèòõïc,ôáHô'"8Œ0J1¦QN\×7¹‘D«ÎV¥ðhòe’Òá­·ݬrØm5#?ŸlÉÆu‘Ð4ÑBáŽùií¼(˜£…p&DØæ['3,mÓu¼å$åÅdsCÓWƒxŽ]«"“;o'ìWý…–«;î,@Å"-T¹äŸð£–µbþîŸj/ôã`<ž\·L�L6Žº÷ìl Ã>;ˆôµâ¬ÎU%GGUȃ+¤U¾ƒÁæ8Aö24ÁLV{“[$$`œ-^à€‰CKËI¾(ÄÏ+[H^VøÉ‚(VúhSmôsMCŸÑZ›§-�²€0•¨øÕÕÕÔËÊÓψš"“À’¨…ÎAÿ¶PÂ:K“1¯ÝNàE”ŠòŸECõMJ4í—´0þäBt¸È‚ÞÂòJ{¾-i|ˆv ‘öçQ~7±$íhc)jb¾¢ÀŽn]søŽÊHÅãrŸÆ÷{+åy_«WÃzˆgÝF쇩#ö(@g$»!í, Ós�³0×,ÑOÚÔ€ÀÃÄi.ÆÁYZŠª{t’mŠV™›E³¡Y®Ãoúc˜wz,gò¤† “&:šw£T…²@þÁD¦]3·ï|ÅE‘Î,µì_rßk#ytÀë\ú?1ƒÅãšw ¢?”)1]‹8þ,‡¼`À…\}ÆjãSB äsoM ª3¿ÒòR‰l8œäºÛºÝ£w!”G¤ LÖ¹ˆƒã·ûY£¼Í)ð†96sé[ÓM3xøî[B4P€O݈ر~ºÑɘVX§9,e5²bæ2ž8WM²µ´­uG qx&ØîƒöÖýæmÈLý|‡r¾½ `å†â–ÂÀȧ°èÿ5$¤È^Y$isÕÅ޾%~]leÙpUÿņYê—YÅ·F$ä“ ˜ò‰× Ô‡ …o½æÑ`bŽw ïÌ4йŒ xè¯K²¸ö%¿?óȰíg $`é"?{É´d5ÿCD3wñHÞÚ•¦²”™‹bé÷K¡¿Ú nä& y‚ÛLçúól‚Ë…÷2Œÿ™¯àkZæd 9¤r,?Ø™б£Õ«‘BÜ!´±-SÆ%óî3AŸâ˜•-XËŸÒ>¡¡»¤Ø…PȤ×ÛWt†t5Ê}çSÀFS*–ºš7ù×.µƒX¶Ræ[¼òtúq�Ü —²Ž_XèPOl.¼þû¹ì÷2ùQð·v‡Öî–ýûïÜÀ¬ÿhv?BOLr¾œnÓÕ©µíxv>ê.­}tY­ÄV)®ÞÂï©i¼ ù>1$©*˜]°º[œa VúMèœ%­¸ÛðU “0F"âùÃÜ+z°¡p JAêëÆ~>7;ö“ ïÖˆôúå¡=ø£¤Cˆùâ*þ&Óeú0Í�Óêßëïc”Yr}ƒ…Yi^þT•Q“?šbž7_ð4‰õ³”zÒL«I¦!±ÕÎYÜ?´ZM~ך??}[/t ´6–ÏZß[ˤ#�+¨œÑ—Pëxó>7eÐXÏ8 ýÂ95=°† Ú8J&XÇçiœòÒº—@~Jè=½ qv7„Y60ÇÞ:øùf•ÏR;\rýˆòåG’B¤fJ±(lۃΩf¼„W=§éìCj Ë»’nCðj�¼:|Jkâ ¹ ú7)Ðo±ÉP…!¥2\Ф‘ÉÙ¹?|6=~=ÇþJú©ÆQëÉŸ7yäž ê¯ÔJß5›ÏœüY8ümW4`¢Â%‡8d(`þ¼†çäÅ_îx¼|È=DŽÇHe²¯'W¾Ù-Þ`|KYU˜Ú1oÞYHºñ} ±™“®èï»WQe$ˆ¡>’žáZ”ÿäFnïGЄ~Â;‰Y ÁØã޳‰’a§È"Í!ºñ¼/ÖgZÑö3¢¦qC¾Û$–!™à¬ÄŸì`«æ�ét"ÐÐ�À¾J(vc¦%ïú%Quå¡å¿(s¦�€±ý…ƒ) šlů×V²óžÁ;ȉZ†“bœÍ_«©Ò‰“ó•~¯ÛÄ…{‘u{ÆÑmÞÒzÔ»§|»ÐQ;ÚÔæ4ê;^±YÑ û¹@ç_‹ïïþ шcN39º(K{7mé|ù4˜!'ù[PéË»Â7K ¯ £]¢n¯°¼ÍtlñrZÞ!m“íÔòãΨ2T W>’P,|[1’þÍ˲ø/‘2ö#_–-ð3›:3ÈvAßþj¸Ç&›«2Ó²-jô48ë=–^WžþÊ´å5 5+OV <¶–Þ€k‚„£Šl6èŸWaˆqäNëoœªð >Úýtrøíø·& Xø5ò­^¥ø¿R’Ù"\oaH¬‹â ÈEÅ—t Ö–mëädH'*½Doö4RD)crÚ{áMçªØ"èåI°Q‹ˆ¿B{ñDŠA^¢Ã( +I–f$‹À'¿'³Úëó�¹aðýW›xcøa†ë¾y&b·ÆLZRöYùAé‹ûÊâÉqך=âUð•"|¯Äg«õC¸eÁÜŸ!üý¨xØÖçìX p=¯�Õ¨G½·lâˆ@šFÍÀRÙË™²äk§x÷_M^”¬g^?Ö“â}ÞY B­ÌÑrqþl´¢\®Œcè¶²ÛÏ<k§á>ô¯}Ú W“WXÅ ¤$-M‚˜Wkéû!EèQ!nqãj®ó8kÿLyÛDÎtˆºØ”ß©ŠïmûÜû^ô¯h[vK~Ñ•ôX¯åà­ëË€u‰Ú_éž@/Eo·éÐPYØ8úZí°ß"ZÐþ:HzôIÛ{áØz q8fMZíz”e4÷ï)’FøÁèã¤ñö¸ûÙ·“Ø%¤¤‰àøÓƒ8èŸh[Ø-·½O”Rp"=@㨀gÁ Þ3wëÇcö/BÊ–ñ1q”CÆb,­¿Üž*!̸U)Góæem^:Òå…Ç·3 l"÷gª8î­ˆgçIQÓ#2TáLï½4\H yÀa’ˆJ5QUÿTÁšÍœŒò^Òg³n¤¢GÖ¡Ý2˜‚Ðv ÎñI^f¤‚ªM†ï¬êºý¹7 ܾC8X~kåDÌP€Ù°¼ÃÒ~ñKzPõ¯iªf º“â/c‡ó FË´ 6ƒ.u¾g%4GKkI„i¤j ’1dÐ ¶Ùƒ]q„¾äÝtX+xȬçŸâV JKlv¢Nœ([Ò†íÒÈÊçØ6犡ÿùqs̈¡ìNKšyæj£Äð\šl£ä�Î`CŸÈô`9NÅcÎ ]XhÊÍk௑F¨±Öh/1¡E^lñcÜ87pËŠ‘¿WF.-àtnÇ*©™¼ÐÖdÌE²:û! rÚáj ÷²G$(hžª,e0â¸ÜÇ…q¹3‡Å€=­ö Y°ôE ŽÈ¡ñ‰Yíôìâ†h gš=yÌ?™ììiˆR´H;xñHŒmùÀ9šÒ¡ïÍÄ5|¬C8•wš½ÃÄGBVv£RÇȹ}�~t°€Y)¤žBÆTC§˜›†/ë®bZa‚¾p*?â‹¥¼~Y°/Õ“æjm«Ö3'“F Fø¶Z5šp:¾H[À‡‹L €}s$PÌÿT“‰¬Èçý»­Æ]J^awÆò vY´®r›] „¤N Xø›pÁ0©‹‡ððñ {*îo!b³yβkÎÒrkrâúBÅ£îU;®ÐxçfÂJËøª‚xœ,2 ˤ¾fÍu‹]ø•0°ÛAjz?÷*u€ AÌNp"O{DÒEÐȽ¯eÚ²×û»ÖWUHÙg>WëÐza>E¾ŽÈ‚ êC»³Fa!rÓµg@ÿà—Z^÷ÔíxâáL÷ФçoîìþI½€Tì-3!0W•DÃû×Èæ„¯Ä|º_u ›«Ç¶ÞûÂ}(ˆ*Ï._Gß+®ÜŸQм©Ò¨.žµµ•ñ”)1Rš+¡·Êì°õ ‡þ9ýñ°y ‰0x‰Žì®ëéÙ¾fÄN?ÙáŒN$ß>ÂwÍn2Èô•­!„j<Çû¦(f«žcÞÊ%v˘táåž¾H¹PnI¶C-ash&ð úɯ޸n}3`ífÅÄÇžF OÃ]ç“÷]Ëàï_ FcüöÆ„™˜&>àk­ªD_£¥ÅúÍŽ»°æä~lA¡e^[Úø3i&•µ/ùœÇ šá6¼v¡•ÉMœ¼Š“”cÊüí>µy=0-ñCAã•ÊÄá´RØì¿.àTw*œÖ ÅL^j p¸~8ž{û¸—â)]Ô±ÐtC!°6©UˆYìŠX|*d¯Ý#§W¬!¥¢É±5Ú†¾ødÜË~(³æãbO®yf¶"ƒÄ&âÛ �.KwѦÈ”cßñRê‰^HZÊɸž_ÆqÄJ½lÊÔM BU  ².æ¢ú þ¡W|gæ,rª3aˆ`n’ Ás<* :ú{r‘Ýiš<ÛÖG–Tü¬Ìý,Ö "qjxÓã¢n ‰x âøþ«QXÍßÚÙÙd¥¼>îõš>ƒÝ>ÓõF ø,lræ«*‚Ú·³æ"y4ïSÊYW„°¸œÕá''|"Ì1å-Œbð7U”8ô‰yEçÒèRY Y¹‹‘BYWí…Š.¨Ó‹: ®$1ç ïž ,Í㳸¾+ƒ%–EcüÎì…É&ÔØ<~ùÉÃÝy§]ÍL»Ç_©©¦,ÅÓÞùjj)ÌU´NÇ`ŸÖzñ¯×R¨†u Äü\ýI@¯,_Lîc"‰ÙÐÑâˆôq.@»ë®ç¾ ³Pä…qgï<«O5™PdºðŽo«ºU£;°Î ¶ÖèìÄûë�ˆ qÓI eŒ Ùœ ælû¨éð¤›L¦z6´@B‚ÿ_ª^fG&šâ‚œÈkÎuù-ꆰA¨Ò‘ÔØ\“”!½™Æ¸[ØŸ¯7§R=¥—ÙÖs«Çå‰Ö4ƆÌÃÆ ŠÁ>+ǤÝn'¤’ÈjߪÒaŽˆûÌvKñŠ2k´yjs,¸#ÓÝ�U·?ƽˌ6Gä×ú š�ˆ¼èE)-4w�ÂA‚3ÍtqÖU9¦�èö Rä=#ÖÚ%¶­FôH]ïB(ŽÂA´Û"võ!ß�‹‰ZФé¥"ø(¡7.uä†S]ØË8ßÖå˜ÙÔl“ìCTªÓG]ï'ǵ|k±§»i(-awî±q1YßÛym{î®øwrá²ä`=?á>wAGݯI¢‡xÒ+ƒªuCªLÜ.×&úÈÈà®Yx‡ß’95cÄcÛ‹.bã}”3YÇÙ^žÚµ@'õb/xïCwí;ëA–(WÚ[À•4—Kè¬ñ�Þ+ì@¶Â•x€©‚üì{_Ø>-v R(LŽÀ—‹:}×%#¬ 3G OiW>ÑÓ°¼ý~•-º{²2á!LÞ»4°0-]è‹4µÓb=éæù ´3ƒþ• õãìÍ`g³×³Iü^ø5Jƒ#$>kvÞ‚é…Ùe0Rì»z h{�iÛ®ìP,l¥Ô#+¨Ë^èx¼„s Öñgc@š1,%8I°Sºâ! à÷{€¨»v´çk†ÏI²JÜcK'Mˆ•›a®„Œ¢!{�tÀ�5ß6²¬ÆÇ!NÀHUDú„œ sVÔÈuÆ­º}fÁ/|í¡©g€`2¥VðR9Ì$„uíR–áY/? iH†5¬¨2°“àÝÙ|¯³»ß¯8€Ö<œ|hìü”¥EÏr‹:œ¹gƒ¨Êü `]Œv¡ßÜ/2.þ«<`É•I]ùüíÔz¨¹€~›‚Y_2ZPH¯Ž7…Ú¨À= ÈŸjÑ£ONpmD[_Õa#9þì2c/œ¢H9=ò€z†°PèäsQ #=¢v‹ÿ˜Z®†²•šYuQ%7ÆBµ[*^’ï”ø ƒÜÄ•ð²ß•sjcââ¤ûb)  e‹lg³pPûÊûãr³>d&1Q# [& Á¤ ÑKkDÀj)¡‡¦Dâiçv/äVªóÁØY L8“Þª<-¯¾¨>Em$Wç¶@Sè[6äçÏeHí£B=Eá¥L ‡Ð0\ÖA÷Ó¹RQ”L9S5i¼¨Ãù“-n»¹yãáì EQ´êåfÜξÍkQC‹¼Ìò¢çz:珂]þ-nJ÷±^mÍÑ /¼Æ»–Ó©XX [ç¯Ü·ÏSÀ6Á÷É Ê5ËwèÙ|üõÁ´©ÇªÇ A*7ƒ¬Ÿ¹ $lFg`ªD|xk®HÈ…?”ˆýE¿ÚÒÄÙûZÄÏ›¼Ë=øNùÊß?´Qv³Ï Ÿ¶§is_šnsóòm)\•\±lì+& ÍVŒE)�gf3‚‹*TÑ„o¹ëF8qÝÌ0«| £³ð¶£"È`Q®›Ôr1Y0È’�ÐT¼’;6N’áM Ió×ïõZãd¡°YAþï&úöÜKÝŸ]Ö¯|ñ¦Zw~Y™ž'&ß"µõ%Ń2@mÊŽQ#_.½ðáÊá¡E# ¼¢!|Šâɦ—EÚÊŽ.}›Ùgsµ(ÛP¶OÄß|B+߬+\s&çFšýä­ƒgübÆ€K­¢I ?F Z‡]ÇŽ œl*/ËdŠå±–M�ØØ²À§­üPù$‹ÖÓ\±ªo)Ìvð"°ˆ ƒ †OøD€8 |Î ŽB(¬†é`àe‡pdhÜÅ®ðÂlÝ…ñ{éO €¶lµ@×QBö¡h:²˜ºr¸ì–Ôö@PyJÓéœ-îˆsyu®:òp!]£cɲàBJßQi†_ï â…/ó±~™�ÀÄJ0†t¢w ¸'P¡bYµúÖæË iD~²wéQ*âÍý�(gÅp.»o¸hjQ‹æ2ø8*.«öšãÚü*¹î¡ëxOsvàç–¬ ›üÆÝ‘áÊl™wÙ98‹ŒLÂBËØ±ŸÒEx’u« µ`.ý&šKˆáÕ�J"Ž*Gû±mIebê 2›òP”7°ö(Úðë¹ð¯Šìó”’„Ô”"ÆZo§"ÏÇüyËH][X4K×ÈÜUƒ Š˜*›œ°tVLi°Ú^e††o×Hú¸Ž gþ>-\ÊFv´(?—Ñ ìIoÇ«¼BöjjZ �:}Œx‹óͼ",<ÜÕÅJËçm*íœøpJNoAT)Y&KàR˜ÝJV„\R߸"P?€é4¨Hâeþð-mÍÑ »T [@áv´“!s8C!{¤”Ü«ªÚ‰ÄSßI£×)º"Â\ßÎOŒ[`¹§òŽÓM‡d= ¸ •"]ö¥™2ËÙÞö¯ªbä\§ÔC=ë‘Þø¨µµÈT|/‰ªž‘¦E¡á7GWÿNñ'b˜—R¹î-Ɔ©mÄãøàØi5ë.ÁÄBHˆ†¬òág›Rµ1¨À5¢O ó*Å,@n0/V3]3Õa°N$H`"GïêäãÂãTBø–GØ^M¬`BÓ3M+˜UêxäM�ZÔ1r·üŠì×7áØž=ƒ®÷p”„è¹å,÷˜r–±#y›UdQŸ³^þr÷|ÁúZvÓÉyòzTîÃm1�êºÊ%—‹œµ œ ƒ‡a ©'QV0I|IFÄZbX¡\1SãQeX;C ªÈ+¹Ñ©Þ‡ÄR@ÒÕQá­#­u¯ð ó}Ï ÞH[ËžßK]¸wägÖ*—£‰…°=G ¹ãRZXT'í¬OZ{hŒz!H›Fõ€ë¦° ]…¬å­oŠ*‰ó %e;ßqÐ!ÎÕDÃjæ*¹.È“‹¶?öCsX76£×û]²Âr¾Ë†‘Ä„¸(Þ`Vd .fb€ }õŒõßj‚{R`“ÌØ8)�†Rþâ;€ˆž¸æË?15T§ÛÎUé¡cžkVÔÅbw=‰¿†Ó‘i×Q©Ï‚¯IÀóüšD9èhØù÷J öýl/ôõ´›wÏ|ÏÞ¯†ËK““àìäaSÍùV²Æ¯B0_¤Å)”ßJu>ÅdìëÜ×ñ²zŠ~oAeE`u©–AâùJœ‚@Æù·{ùr®QnÌ�&_.ë8˜ób$l¦ù¾™àË-ìMþÄAib2YÉ™~(ŸÌç•GAÓ¦·&l?÷ÓYßÞ¡.-_YÅ[ôs›%ǙαJ-YEðº.s·_‹û$F0/ØÜ,°¡eÜÒÛÑ+%ï¼Þ-V6î^õcûé†re!#Žro]ÔP*>†áú¬v0)/½J¯?Àb›&ñ€-ÒRă½­ÔL:çi¸š=Þ‹g _hT'¦Kn‚W²V`ë\#B œÐ:èŠâ™ƒikH"ÏY–pÜ))f:‹ŽR½Ëb–ëØ=$€ÍÂózå´]ž¿h¸5›Ð¯KÞí\aܱ£"ÌB¯q”˜³ƒÎ€­ƒê€[{b@K×CÜBí¸HçY«*|V fú½¯ñÀ«3NkìK«wª·ú²Àd7?ª1䴂튮èn°?¼ˆGô"î<5—©¸wV ”oI>|„>mH.EÒTØÜZÝ^wek¥¡îg!9·Þ9ÿœŽÚ‰)–¬�Ÿ>´åi×[xàdÚBšÐtîŸöà•§Ðó´„[øüs¿8¬°ê©6ÃÊ‚çîÝ$ì¼#Ùx-´;ºHÜÀtÿŽ$°YP*¾€¸H¡BJÝII½Ö·ȇ.¯Ó2 É‚êäÛ"ŠÑYò´m«]-- âÓ»ÃÔ¢=¬¤, ^šÅ=øx6[Õ’3’q‡†½:€^]á1eœ)qºuö; lïUᾆ2"͕ł°Å„tEò‹'†>‰SQÁjy¢r&+ΜˆdÃ>'±uxÆÊÚG­é‘ý‹ÌÞÅpÿÁZÇèkÆ~¢òpPü=]ó,ôÙðEY& Od $H©aDÿ…wДÙaO °á+šíflí¶ýi ƒ/ [ö÷y_¿±~öü‚]*,EÊχµ-ëó`ÏåW+@”i .êÆÕ]ÞÆÔ‡þê�©UÜߥ í§Ì 6³_=u³ä~ãÑôøEŠÓÌìç.„CD–m´®Þ+Å$~B1¸dBe|Ð:#WÚË\²¤@)$íº“|®ÑËc=Éòr#7ÞÇkQB:ò[Éû§zÊŸ½È–# >97b•ªÊzdúíGœ™ˆ]²o5‰ÛpŠy#ÿïUi!7¢0X^=KM.®ûÂ72V“I‚p̧;4œ—¾§€È/a¨¥úGêzR‘‹|Hz1§°Ÿ5èA pIE ¡1Œ,§3ïŸÓenØå²‚yäk·YÉð°'x9Oø­ÄTO™éF¸Œ»ˆJ„¼Í*h6Ç©v3—Œ÷Ùµ–•»'|Ì~¥)`‰Ù¢!”ô‹q½d? PÜ#+À$Ûâ8EVåQ·’<¸íí¢V#%Aÿ&J0S8húÉ™V‘$×H/¬+Ó¶gN‘Š Æ]·§bŽS«…ëå Æ\P5ñ6HÖ’æ8³l;‡·Öàf|½Œä@§d÷æ»rQ˜‹�òªÞh—F:˜ÖbŒòøG‚·7–µÑ ùK©_ÚRÝ)¿ÁŠ£WÑhLóz•[›\jÂBGBÐéB@_Và™þ?®ö¡ªú½/ yúìŸf*j ÖÔdÄC#(R¬fCƒ·ï oõÒ=®@Ûè!S¾^;Û˜K˜»5´¸½eQÄa<ª8Ñm!äÐÃ7i¾}ÙsL&óå5î,ëFýA°1‚Ô¶?Ô¢):…ýø PÔÊWràÁÑÎiY´$.VšV‘G{PVš€rÝ#… #âäÁEæði¹o[”f ÖHž•y~ÒmsÚ O&gw0OØ¿S>&âm¬ UÔ{Ì¡@ЦéZ|'Ç÷I~É,GD NbžÎŽÎÃoË,óß{þ¨ÎÐVåçC|£DÐMíÙR~6o³º/cOžˆ¤&+)š€¾LƒÌ”«œ0f×Nh0¶sa‹“ÿ®K6%Ü!kå &ŽØt ªOa˜ní@øgJI ^"ŸSb¸4áñ јÅWQÇ»pÇiýYïXð¿,ÇŸIÛKÓÎe+ŸÁÈ܈ŽlѧP?}\CZ~À¦slJi‚R›„Ù4à —+&V”5ùã Z#NËßKܧ ­-ÔÁ·ÌÞTžZÄ!!ñû¾€Êñ³ÅÒÌœ˜v‰£3 Äã1èÛ34žý‡´ ;r>©ø‰Mö ž)õˆ².¸ÛJb¸;ê8Œ ¹M«ænj5¿T•¸Æ‚cÚßf͵ÀîjÙ“øo|Cƒ½¿ßiÆ 6”ºÄ}y‚ªè £Ëýû–YÄN6³%Hò\ÌObˆ†ëj6‰ÇiVá+6$Æ¡„üÌOöÅQOÇŸL®�¦™¿ÈneÔ“Êú›_Uø¤AÇÃ0ñEÒ¼6”;~çP÷îR#TOëDc^™1¨4÷îÍ‚/£Iø":k.û`MjD†’‘|¼OÓ)V"óÙ’ÔŒ&©Q˜ë,xyÔåøïu•z9)K·¾î!7FG*l¸6ƒ³F¹â*æÉ`ÑfôT. GîȨðê‚>r¤oÑXt0ê*æu KP]ÅHk ½Ë"ìªí°¾ÍAA~¯tv¿Ö0WTPrV ó8<3j-Ë¿™ÉûçG¹Óß[üï j{’t40¿·7ºÊM‚úåÿ Y ¦ôøY;gˆÉQÇþu‘>íÿ@„;¿ÅýÐøøzãA—Oš×¡§Ì‚)zÙ BJäÉSžÑÇn[Ë àúò%Ço´LiQFÿQÝcÊŠ²}úO8‰ÈÏžž§DcÙÊšISÖ|;þC‘ý.ˆíØüà<ÐÓ4¼}¤f‰MeuAÈý½reÿ‘^¯«ºóúeT*‰'Ãp¥ÌI×Í% EoÜä‡%®ôf�#þ¢Be«ö܉#ù”ùUtàTk3ÎcAû-04ClbͦIx›y§íëŸ uøZ#LÞÊ3QJv(¸%Õ;�Ù­XôüÅê™Ýtv:ž1"(Ì?HäÖW§¸Î_Ê.¸'*Ø ÛŒ¦ÁjÜeNG”b&ް) Ý¥ºg<\~‰dÿ;)}@.tÓ¾ÄR#UópLHŸ”²)uªïÐ@_N–•eÂê´ÝÚc3íJM¡P >e®‚ó¡2çþKüÚº±f´¿}CÚæéM€Žñ(?ñÜ”œ 0ã6Å÷Iv¹òk–ƒ(àï#�ѵÝ"-ôYenäžÎ\¡È$AiZ¾žåºê;ÓL"™/7ÔFà?3j 5éø`ûrã¶äR�´¿yÒ"êÙ~‰µç”¶FÄ´¹n]‘.ACgnÔW^³ß«8rƒk]˜©&]¼[02kï¢�àŽYf=ù±ñê•M׋¥ Õ‡uN<ؘ<5»jôGÛe `³xÃLFwá°˜‚Weù|/vºÔÝØd3ñŒ¨÷%>t·TŠ9Zé›Z^rÒx#Ó9Ç–@“&•$  ©×z$œm.°Á—ÏÞÚtðÞƒ¢»€„›gâ8< n»qïRÌ}“ê7˜ø¹òø\\È.nÛȉ¢>Ïe_7—ƒ²eÚ}l1�éèæ Ý£â%¾™­îÐR¾œƒp˜wX$`ý€äI³ƒgý’ ðkNiôÈ]‚ïÂ"]/Ç=oNrRú‹¾ÓÞ %™ãÕ“Úá# óÐ]µ¾pþý1Y¸ÆŒ&4œKáH–T’LyК·ùòe~¶::‚XC"pK®KôB»zøm§ yDÉî¤ÑNÖŒæ§ï‰–èJRÈèÃYçƒ;HãÿñÙ—SÐ �°›Íd-…)J½è˜Ö/BÜvCVJچ͗Ê ‡‘jM òho¼5ñ¨Ž|„¿’êÓC¿nfî«;‚ l³Gq¼ûé ÇÌ¡ô‡ù„z8çíÑ1ã à¿™’5HJ ú"8¤YNªy¯_þ~à‡¨o¾±)Á™ÄJ)ð½†Æ=ª�ZNÑÏùa'†Ï>äDwZ>mð37G¨~ ÉqoùÙË(xd¡ åï‡5¢æëÊ—ð:3àHC|-OÖ 9%]°aËÒ ýfŪQnx¹œùULø"çÉìK£Õ,(ѧŽÜ. D“@9õ/(ë‡+Så4Ú7Û*e>—’аŸŽ@½V77óB>L`¯$žðÐ]è!Nq§m4û”·­Bc£ã;ßÀ¶ÉT)Á-'d®vS:ŸÕ’£3è"ÿàcküNcžc%jsåzÓDbªÕ&ßíôÔºòöEež¶¹õÎÉ•‘k­K$^ZÝîÎDϦ¼B€£ÌóÇCc‘W!(ÉxÀ¥õ»Ê öÝý³;§´ìõsD†øoÇuþâ¯Ac›]Åø1LgE«"wFD0$9[ecªl¥ ¿…ºÕóÔ^›JÙÛÙÛ÷ç=?õ3 ¾ýÿJ‡¯JüÓNýÞJ¦Ö«u‘ ¥5Œ$ †‚I®™v‡Eã?/ÒÖ�T00_\D–„}]‰»,¥· \™wéïqʘ†Ô±¦-P€e#lóÓ~ÂÒ¢Þ|öÝ‚CÅWJèwA׆¿ÿJgŽäþ•@Aðjm š@³í¼on“¤àÜ^éï¤[?ú[K„åß9aB%Zªš¡éR»ï©,0’z¿å\Äöá¶Š¾žÍ—|ÑÔI2êvÒ¡È”\ºÜ: ³R ‹b›Ñ…ýß"…ø¤€òqðAyºE³­¿·¾ÀÀ)6Tk.±6Q>œà~qÁGÐДÇ9¦ôá_öR‹'#j5Ó"]øm©ŠÁÚsdE¡‚=ñÜÙñôë›ËèÂ7¬¡Ÿß'Až¥ÔêVÃÿ“l‚—ZT,Ó9&èU7*Õú(°Ç`Òî¨w—U›ŒbI¤æ·A\O»:½&{—v,–ÔY²?)\°Em™ ä ûï #¸t¯µ,ÀBŸNK‚k¬YU·ÎPá\Šzy()Ø ã ÙD2¿'7m2h#©JƒpüÒÂ3òኲáåx'(‘‰ðAa„cGýU]*V¯Æä¢âLºn›ebó%•FQ-¢öœyÒ­µÛ P]ÙDwh:hpØúøFyƒM_B*šuûa877JEÛÞ«¿ çÅ oŒŸ;z�ª^ŠüŒ=F>¨>¸Œ\M¸eVúITÿ&ïÐ$î‹÷~pÁÑöVf÷ðÓ·ú#É¢Ú£,êd›r¡ørmzÇÁ#0qºÅâBh~ówÚêÿ‰àh†ä(¢Ö¡ógìz‰IJüsqS×éF}¼ŠmtоwéÉA˜¤Šw8#Ú©´z抔3ŽiVñÖuªs™\q&™æ½±þal»وȇöùj6*„žóÂ;5¾×ÂÙ¨ötrÃùžPÉgr±ó¬€+p²›þ9ËEÿÌ…Íä‹^½y(nÆ,qŸÀw]‚–é—}óIЄ ¯C§&Å-.m,I{­VÑUÃKè›ßlp¤¯‘Ú•ë[a:üú"Fu2}o/žÔjü|†½ì§Š{eØÐ¿´ ·¤rŒŽÉ €éIˆÕ¸y–å´˜ÙÒ:lÒÇ;%õ]1ÓÂbi&Á›÷zÀã8ixÇ™nLÊn‚}Å$ãÿŠP2X“zbBÌë5:‰KÐ…]ÀQ¬ð«ýëñ𖉓3+/»07 Øv#9ëDF¶ØáPáb>Í—È Ë•…¥èå+’MÁ³À¨OªÈÇñác¼˜ûe^Ò³ýÞI–‘‚Z/·ÅáÞ8¨Ðñèmàôé–ÜŸ¾ès(~“M]DCb©-ÒL9'R†ç‡³-Ø· < /YñŸ…y÷XkŸ;§Ébøã˜ÌeŠèdÍ'ÁõŸÀmÜs;™0HÉ„^~õ¡i»ãÛ3EàÒÖžÈiHÕp#TJÜ@F+ dQ Jr[ß•µÔx”º:99`”棼žÍ“ê¢|ܤŸ…g‘Ž[ªÜ6TÈÝxk§ôÍýà^ìB¼Kj¥ÚôõQ+*·ˆçç>HãóÃmå5üeoeYÙ&pKhSÑ­ÓC>­$ÿ%Å)¨Šå endstream endobj 62 0 obj << /Length1 721 /Length2 11641 /Length3 0 /Length 12230 /Filter /FlateDecode >> stream xÚmwP\Ͷ5\‚,¸ ww î0À�ƒ»{pwIpwwwwBðàîÁþÜï¾{_½ª¿ºêÔ–µ«×^½«º5¹¤­³š‡=Èdfå¨Jª(�ÙXY¬ÌìÈÔÔbŽ`3ÄÎVä æh‚Mª`{� ðD¦ˆÙÙ{8BÌ-œ´&tÿÖ Sˆ Ä agmç 1±�𻺺 »:¹0;º2ÿ-RƒÎ`€Ä SRÖ–Q”ÐJ)ª¤À¶`G5@ÙÅØb‡˜€mÀt�3;G€õ¿€‰­)ä_œœ˜ÿ!`ë vtþKÌÌÑΠ ¡&"©¤¨cQ€lMòÒËmxÿ¢Á&Ž6ÿêŽàü_Ëô_Ëø¿Ö³Žîÿ¶˜‘@€)ÄÄ` 6‡Ø"³üK7[3;�ç¿Ã¦.öÿIý%äô—€ö¯†t�S°Ù_´‹µµ"È  ³³±wq;ìLÁ޶�;íP ˆµÇÿ÷?gÐ_DlÍÿ*ÇúïÄIâ6U†8ÿ•Ú dýW¢âšàŸ‹Øâbóïzð_=þž¨©­µÇÿlù·6d‘”×PT•eøï�ü“–°5±3…ØšTÿj r4ýoàŸ´2òïéù™ÿL�ø¿¾ÈÙâÐeeþ×x°þkýÇÒÿ_”¨¨»›ÀÄÎÆ �~ùûáùÂæó蚸8:‚mÿüo/ÿñÿ$0Øl‚¼üË΄/È2µ)¤ÔW"¦ žafÊHázq²ëB÷#dÀÂÔp÷ŒðZ0Ç •d:ÀX`ótC溑 FÝŸˆ"ÓÿEøXHYfî[µþçkîSm˜Á9œ‰"ÜEø•súÊr 2ýÄ—YÇU²Å¥€QF%m½ð˜¿ã–æom¥èôi°¾ë¼¡‚·*1g,‚óÎ…·–aBs¾m¢^PZ䕨ï†jßpжðlüleº”¹¶isûhú*@«»ÅWiItA.¨å‡íè¦xCbVÇUiäÀdÔñ盦üàc„•¤+‡eÓD›L¬¨£„Ò=E{,ŒóúµT›†,o,Òm)ÞˆåDÑÐ̹¹ m0l´|¢3׈lòyÒ3†ÿ%’Ô!FÓXíîÒ°œzš¿tÊ çœ Vµà3úcߨfÌeªJhÿýÊÃô.¸+Á¼¢Ó×HáD“°eOqÍG&ùöü!e¯¯9zS*©é+€£u ŽÁ8MEv§Êƺ^.»“ÄøQñ‹í1éñRlEãÁÍ1Ì)Gº2¾N¨K"œfðêZ¯ ß‘£5£¦´áËO𖛇ï/Âã}ô¯:AÑøv=VãS¿¹)ñ3ÑöÑúõÊ仕O¬™Ø ÞNUò)ßß#7N,Jâ|±‚é ±òvt<&hVtß ‰ä– ÞY ö]é7ƒ™¿{)/­–?ä«îð}æ…Å}u›„¢#z<†ð©ù·Uˆ•\’ Áðó‰áê/,¦kÇ[ƒ8!=ã”÷ó †¤µµ�wj«°« –Ÿ{„äZŠR¶Ÿ  _bD÷Œcic~ïð›˜å ±$n:Kiek€§s÷·ì›,·_Q²eµê³ÚQò ÓÊ>ÆjgøÖí¦ß'wz Ë|â˜p)oÍ‚ÑPA+y- ê¤ 9x«ÇeÍ×d Ñxo00hÌríÍ’CîÃýC(ûZn}*;g¼“±÷gB1jª÷O„Ž!Ø®ª^yA±¶$§fI½[›ÚÅ^•ÖÙfÕ‹N4M:èÝm=Idš©»ÚÛüv‰¨?¯?¶áÀ=lMΞÖ+Íœ¨±Éà:HsÅ.÷¦“•fnY“~Ïc9ήv+Fxõûžç: DgôAAcê©)¢»B²XÞ\öXò×liÍÕˆwtø_öÉÍ‹V/ ¹eÎTÀ—o_”Ë‚kÅ®í!\€Kzè"­dO«¸i3K¯G2õ‰™„†ÚǸ¯B—¤ßSb¸M–Ôܵ9\d!c_Ëø+µáºfížo©„¢÷büSƒ 1Ç %;}ØÜâCwéêêJºnMg¶F¿{'Ý>N;9?xÊ ›¥z5bþ±l4àõ$ô2›¶{ˆ#õÓÖZwF[Óºt¶—IHà6Ãö%qÏ;‹-‚üúý§ˆÑ˜ê÷690Ùš› <=Wý¸HþÅIäòD¬_ÿñò•€3BÝ{&em"¥šÇå’˜wḇ¥ºê¹c¤óÉêA©ÊkA„¶ÅýVßý¢ôŽn;*½,le=}³P_nú|ãJVv^6GÝà7ÀË÷È÷&Q% <¥ïyø{_õÛÍÌ çm®O¿Ìø"dÍykEôˆº_á·ÚøíÎDÿ  ¤^çõB$¸gÔûùU„7°Ä .¯ÃbÚ…}\ÓUt;‰úÏ7+Ž’¡$:© g¡Š—×^4 X-Y‰3±©Ï—õ²i,/ÌŠ-™”Ð^À›·¶P±,)N&6ªŒì´Z>žke3Sùòa;”?isÄÖ’Ú_M$ŽA¡fv!ÑßíÒàïœh ©õû눓´Eð6O²ö œ°#U‰„ž?v0¼óè¶-õèn×C€üƒF-ŸCðç%Ëk€Í<õœ~U=-sW‹•.‘C-ù)âʸ¤®Ûƒ€oëöd—3ï^3{“v*€bhJ¼ÅO^^4D›%çZL¦5n“\:£ ã6hz!u‹à‡¦0ut®”ûÌÁ8ÛŽ.•$ð.¸ú¬$¡HªO/™OƒÔÝïVÅ&ñF.ó¾jàª4L$Ÿ¼C¼Xø³¿fÀ¾I^öx–m`KƉ`óÑT'$j¢4ŸÇ¦fô©ô»¬tãÉœŽœsª7\(ëGÉË…gÂ(H*mó3¡Ž‘Ž0¹nPïÉÎõZ‚—'ûùi_7"ÕQÊN4ã*gÞ¨æ2($„ùŸ‘Ã$*k¨<´,rZÚÏ(„¡3€’½üÇ5?L½)<Ë»‡ç*6d$6qÍã¤1úMê' vFqÇÄ­>uÃ#ô 0oŠLt?œ0VWÍžDÆÅÙ"T½½äÂèÅ«­/ÆfN_f)îíU1ª"¢îZ÷Ù©9µ à‘ä�e’–†& "43A±ïÓû9žßü“ðØÓLàÃ¥Aë%Ózö(Õ ‰6nð~8œäÑ‘ìð/aKnHLUa~ßO Ê*æ¥Ók]+Þ—ö_–» ŠÁÈë¦`I\Y»±wkTY•)¿2¼äF+BøYÏŒov@œ<à?¸ýkÙ•>âªGz?„°Ö$ì7Çë·j•¬]SínêûK»MN+óKYá‡ýŠ5²èØÌ¥Ü[¯ˆ“eÌÈ{a‡P¹J)‰Ë Ï¡-r¾§2QlY/€ðÂ*u’¶ƒHŽ�@–ÜC~e4Ð çëN8Bc4qRòR£«mŠ2jó¥ìgËÖl6æéMÆ<=Ž>ÀG/PÕK¸ ú� » ;¸FUFÝj•ÿVŒ9ªt:G æ¡6‹bó 9ö‚*“FÅQUr¶¯ dòÁÛ-XLü¨Uÿ¡þçQ‰¯$õžh{MãüµÔË‚_åéûÍÖüQžæLP*Œ”_ŸÑº¶õÜ;ÒAqh e}o¢"_,pY}YçøŽ¹Gˆ\9±åRpô‚p¸¼¦œþA¨@²}õYö‹²›òolÅÁH—Îß“°I>¡E_ŸIDêÊ‘+ò¾ú|/®F±�˜Â[q⌋Ûd Îaw´d…¿øÕÙ*Š@N¹ÞÙtçÚ-Õc ¶y'öŒÈKeÍCLߛ0ö¬Îó£ëo÷ã0a†„~K®Õǽ˜§V_¾ÁßÏ›ý)í‰[ ôzü ‹“×â2öaÈ .ýÆÈÞ£\¹q3>®Z¬»íŒ@÷]mÔ="´¿N”B’Ã}œÚhz¸£˜M÷†Ž€K¤—tŇ.6Oê:ÚW'+‡ñY2×…7;ˆ�M” %‡Ì‘6“YXƒöAS¾ÛÛÞ µÇ næ™ãøÌ:º„×Upó‰ÊV²hÔ,)hÖ•—L˜iÅGèÃ{iÒ*Ò~A<µ2TËô Ì|0agï—D¢ö–K‹DKî¢BJÃÃôCbŽ'7çÊbÄK ñíûÉ1Ð 3¡\3ðÎj+ÓüÉÞŒ7{qÕUlÁˆeE³YÙjz¼ádoƒ-f¾ѧ–ÝlÝ ´¶»{pyFKÞ'鈱V5)Ø(ÕµKé馉îMù¨[Õ…Ž%”ÔžRÐ ²Péž qÌ÷Zºo\ž8%ÁâaïKe¼­‹«6¼ÕTëuVIТÐjÔ L«Á€‡é²SÍ-Lÿ¹ßù§Õ(¸~õçïÑL7k0®,.ò—mšM•Íëk×ru]îPW„>÷!©š6ÓþÁkÑxnõ ¯Î–¯ƒ±Æª’°?‰b q_Ø@Jfoxxá©ëû©'ŠGj„‰e¢ÂÐú—CU6J’>jíÄĹ9 ÏAXdpïd>IW¬{Uè9N¥à¢2Kì0#£ï’¡øI(哱%‘¿Ç<ÐOj¢‹ÐL pOgþŒí´Ç�·‰œ÷»õ^tè»2þÒŸSîÛœzGRŽËØËg¬>8çµ½4¬6ÿî ¦Ý×@ÇÍDróžƒÑò‘¦}ªío!²äöt` µåÔJ5ƒþÕ•>flWnÆ’u' {½šµßñ¯Ø:+wº\ éfZE¨?%Úa¦Ç£@zt´wGþ(š/X#0ØþH™FÎúÔKmª…ê6‹Y ,÷v/úÃ(Ri6šÈ*²ñ%¾éÙÂ܈Ò6Ä*^: Úß:<Ô¹èT@!\“ç’ ¥KX)ŽÑ ŽºÈ&=ݘ¸X|× P$O|“©r…2ÍRÎ×µÉßÜ…¸Œà7�Ã>ÓnB bw œl‰:$1RÉã Ö‰ôçÄ·šq¼ƒC¿$Jµr òãZèn\j£iÛñiäööŸ“§mðô´“ë@$ÃãY"ßÔ(„¡u‹Î²53Cª}’¹.œ ñ&ùåK~b˜ ‹ŒhÚHÚ÷?ÍÆ”0#o÷} ¸Î#sÄh'­‚ocÓȶBþ%au–.Ѭ9r j?yÉsë5ùz²×¡?«²MànH?ìØý"ÓçüQVâ‚4Àÿ„=A2pÉ2Ñdo²m„¡Ê5[“pâ.ù!Pàyœ ¨v˜0Œ¦+CFå^êËyà…~Ýc©ÇÁáž¡»Ø#nâüOøùrïêHp<´…<8½`kaô…tugS–è~½ÿÿú —3ˆ©à:gMÌó§êA9r<‰ZÝ5Mô€Çï+¤ÖõàÑѺˆƒ†+#üj )ðÒè†¥.l^ëŒÅs˜¤€lMÛ/\¤nN׿ºäv(ç¥zíîs5‹ý$…&öãÉkäý e¾£o,žŸ#žá?»\4¼o©D¨Bµµ°A†d6¥ ³Ç6Ó6ZQ”+•7oC'ùÄqª ¤3x÷±CoÛÅâ‘k’Æ2û¬â”BÜO³pZ Ás|è·×ùÍÍY=jp÷Ëaø+îú¢ì€b¯¾ˆà% ÿ­Ð,Fx"¡…Ðbé´­ŒW¯ü+Îç»10ù=°#N¯^+‹çNIu#5´‚^ß*-®¯¯lÀ¦u·¯‘èK9YªÖ… ªSFɺaedš¶ÚGcsóóL&¤VÖW“VK8P3qRéPdñÖ!ßÉ‚,—q5ú»÷¶øü~ã-„Y4èà_ì´2t&RtºRˆáïhÊ-s­W©ð§Þél´h7ˆ%€¿ŒÉ^A( åR›fŸx_¦N³Þ1]¡[6Ìbä 7PuPl˜á¸A®¬0¹Î<ÔÅ6ÍÕûNE¡­ø#pc¶ µ•ÚûkKÀ£ûEìÝ~xÙÕpºølbU®nE6‡e9ùaÇRï'§ü ÚíöÔ¶À0F[oŒã µ-ÝÔ¾â@œÖ›/³C«A—— >’¤ã%ZrR 8‘æ"ã{ÒAž,©¹EÜ44Ææ,¯ƒJÅ?¯ØßCèvNªÔÆE£ù w9¬U5tï~Ò– ì_~:ºå¸ (ëÍéºn ™ ‰ÊN3;TX˾sàô´Ï×îç¾PJ¯ºz ŸWIåÓªçµ7nL×.Û âï¸Ùm›…ÍÏpoM «7ˆ›:ý¶Ž²ÊIeÜvc ×¹-ãmwøôFZª4$ùãþxf,±ØÀ"LUñŒ<†Fø4Š)ìUù¶¦>%Ä;Éó§éÜ#šù25ÍC1ïi1«¿©B¨G¹æIjBo‚߆ƒ*ЫLþ0æ×>dhqY¨wsúñ"“çžj1ƒü®ŸžðS6¸Rs¨X-~€®Éône£Ì%®Ƙx?b2d€±×pf?ú Å•µUÒEµðläå}TU&¤öžD½8ðHÀ\/¶÷sI‘1½ ¾ZñÊÝN 2RÌCñ¸V0cD&råä_°¸Ü8/V\Bm*ÞÜe÷&º¦Sj¤ €N%mŽE”î©é¡PôøˆåiK"2/Í-7ØÜ?„[iu¯ðòxŸ¶=¼¯ƒïä¯H‡g¥eí0â3%£U Ðšc“/l‰#l„~:NÞxÚq¢Jé“À9! ë®Öhéú/Åj^š¸¦®Ô…tŽyi7ç —PúJ5àwD;ýо‰–1áqS)@»z¾s=J§‘NÈ'Ô¦îfËØãìÐXx¿jlcw5šç.‰ïΆ„@azšyùvÜû/ë„ÄšðlÙÔ‹¦$!:¾ì†ICGÆù¯ñ®õüf5ðœŒb¸ìŽÄÌ/ÀS.ñºj9§.úucsNÏ4MfeüäEZ€£A³$v¹=–ä¢9ËlBR¤êHOPý¬ìíƒå_ïláæFxÙ3ЍS 5UñNØŽá²3v#.ñ›Ål7·Tpa{QþéÓòâÚ6ÑB@èlÚ«n¾-?¹MZ8Ú,Ã]ú¶‹›‘Â{R¤n÷÷ ¬Žï+`QÛ\CÁ.5ã‰4ø&9¬[Ì_v äµ>5¹ôæi#¨÷àÞ×8nÍtéе¼T.6lÝÄ–aÊñåå …B”Çî‰À†f´ /VçH?Q²ÀÊñú¨äŽUh?Þݶ©ÖÍüI²:gÍiÒdzýƒßrz“¶ÁnhvpéTt¶Ùµ”Ä/œ›ÛE°2+´nÙ9Oýxw©ûú§7ßEkÕô×}RºÂñ%ì'­Ìø½é<,[8©¤z3ï 4OT’¶Ø%<¦â­¢®¢s–æTùÑǦעz,Æ>·!ÄWXúkUoNx7,Ù6ádW}Wz:JH¢šEâf×å$å„u‡ ³ô²Ï¼¤„±\’4Íö‹µ.ŠHdèJn«®rƒ¬Dñ‡gºÜ‡²=V&8“Hstµ‚do$R*—ÑõĨ ’¨¾i~ÔWîø…½ š3]Æ› ‰»7‘?Í_hÎä?⹑&· šù…‹Ì‹¹\O÷‡33ë´û/&%G…²WŽ|ñ“Ùª0í饇)NEW˜øk0¢ßCõƒ×^Rß÷žF‡wÈšõS… Ç®b”Äü+èGóEÁÔVágZ‡ŸåÒr3€­wXai~Õ¯Ò$Â#+‰ÈϽe[bÔ’~"òH_z44Ë[eLiµŸwxg½¾ð¢A¾m€è2\9éæAEéåh"šz;qþ\ì¾6$¼P!Æ*Ÿ:†ãzRâD„–k ]=cŸûíäøðÃ&0­Téí-aâÕª8ŠîAg`C7¹s·/›ddõuÏ`‰gšp)¾K‰Eêû‹4ó=`jýø¿O';bºÆŒÜÛ>¼Ó­ßz„l¥+~Íaàºî-Õ²á׃µ[r†nú7†Ä`‰ƒopÍ© ‚¦ynéÊÁæÞt­W+¼V>v-±T üåÈ]†Ûsvn¬óB*+ùsu‰7•Ξ1,£æ®´?Cxd –hÎ/ë0}B¨ˆå¸‰,óÕ3›¡‘YW® qñ8¶‡SÏ%Z ©5¾Öh+ur3DÿõËb.jEtGûTx‚÷™M9õ<“´4ss>³ÿ\Õ:êðà»èïÙ)#úÔùß+.Þkpr% FoÛ¦ßG³¬Ý’CrfMø¢rS›½ÍjE®åˆIZI¸yжåeGBšè ñË<ø¢0gð*/Q¤?†9hkÖ2O¡"Ò:8ñ1‡¦Ch£SŠ y¡íöEÛ&½£ÃÆ ‹üõ= ;ϽÚCg4žÂ™µ`d,Û3j[øõ“œ @”æ•rô½ˆ‚ìÅþ(ã+šê'ìæí²‘‹†<Æu“IÌönaò=DñŒ±Jê¤:¦?å=t¦í0m}Èn¬´Ô$°#=²˜Ç÷ÌH©±—Ѿ§uÄ\ÇìR ñ¢´:J?ˆ§E>F`Ãm‹f42$±/…Ë}ú5ÔeV1‡š›Ì£·‚ø ‹U­_hð5åæøÃîw}kò¬{’Ò.žlHÊØ'û'1¿NÊÞ0âX£BîBö÷¬µJh#»˜ÇñœÈÄ¢ƒ?éŸ|ˆÎôX K}£WŠ73O^¼¿?¹”,ß+)ê”bû´;DšrL·rí©¹§“²#qd„ÎÀE%öäb!Šníj•õÍ,k„ÅÀ¾mHŠ6¢W; &ÚÞ 6Ç? wØ¥qKÝ`æG0u©H²ÎBŸ…v5èýÈ€õBWþéFŒ¦Û$Ï'ïÛ$êÂW¢7K/•_¥.Ù4§ÌDæO ¿åçø‡š™õ¶í~µ„[ yž^e"Äè$­‚ÅÚ µqº¢~W_ˆ`N»¬È{ˆ9†¨„3?ñ»„’¯— GFÊæ")˜ç…1½êÜ~“é~KáÆÓÓ|Ò6;_F„¡çUίõAä™;t†>$›­äÆ™5ÓB%µô{¯=V ÏSƦS¨™îÙè¥&2€/†;Òi*«ÃÀ§Hƒ‹o°Œí÷÷,+—²L( 3Çšî5‹RŒ]K§2P,Z.¼»Ì[·3ÇZ[oŒ÷)º‘&² ”‚ywZ­úFE4„ÙÙvÈšWoð·m=={-)£0âýsû¿ƒ ¯q´RehT³/n2úZøšD7ìd( ]§7LLuó$%Œ;Ÿn* ÂYPTo¬†OEvFˬ@[1§“€íOÜ÷Š Ž"B #ÕoìÉß?úáCxÈøN¬3-jÜg>¹÷ãäwUD%1HÛ]SA_9ÿ°V$øä³E‹¬yTmZ}nøDÛ¢èpjÁ&Få©%1"Ù!Tm¾¨5#½ºvLÖ8↡ó¾Á0Õrû“zÈõ`2³émQŠ®ˆO³mau^-O©-Š6NÕ}&‰§Ä[¦÷ƒŒ¡œžpé–SÁì4«ó|6©Šˆ¸PF¬Œ‘wß® £‰4Ï€°¯Õ²©¦ƒ­¶Ï6εíæsÆ¢•@ÞòŽcál Çç┿ 6Û%÷UÑÉ®;c¶ê‡ó‚«ßku«2ª¿}ÍG ¡ƒL;3˜í¸ÒK+ëî²þò÷O›3#}&£¹s'€cl$ÇÃÒvVv’¾«ëDW×è1ÿ,|èÔ«.ÅÖëMIC"/‘cw{º_ƒŽ!vfç›m—Ý!>´gÈŽ£¦èHÉ ùÄ[ C(<‰§•¼L?P „GÃÛÙ+ãW‚;­´û§Q\"EÛq©<Î{›àÞ`h˜"³bUVqwA/­ÔÙ ÊRE­¶„\Cõ)s¯°;íYüŽÍé·-¾IHº‰QÒ)œíÀFˆ¾n7Õ¥˜÷›£¼…1gí§9iÒa+ĪmŒÐäÚ±ø“ÕúAúÁ1”÷jž…ÃÍÑe€~›W±¦!Ÿ5…|\¬ï0»[ü #\BÆTºäº(ŽÞFÈÆüÕËœÁˆ·ÙÓYË]–È{QøÆãëhÁ­Ø4媳³Ú1eµ ï Ïßµý.äç¡Ý¿4&1½ – c"I'ôs`òÕ›ÒÄÍA•Ëó8¸År˜Â^+ý5²6ÏVžj?ç0´ódù.körK3|ñU‚‡ù6­¶¸*ܰƒàÀüXC ÷_¹¦kä7–›“¥/9Iú†&ý¡÷ËÏúv ‚rýº®˜"fÝxLy_ž¯.+რÕLˆ×Ç#ýòm+Jq wqÊ9Ðc˜¨œ´XI¯ïJË1K“ –Mß(‚w¢Ø¡¨Óˆ•²œ'ÝL±e~í‰Ç«7âø ¢1”éÚÓ¾rèËy9°ó0:VÚUä{:~i–5ÊpŸ[Â.³Ê„JfÐ%e³(Œ¢éž&ÑUDÙDSÿ¡ºžl/ðë»Åû5r×!g¥"cœ²Â¥¯:½îVwQ ¢C9.ÌZ1{rG »Ejܼ¢-ZÄþcV’z:ò Ý¢› ÏIö¬È°ÚqˆûX€°=d$²×íãBIãn¡Ãyr6Áð5)qôèØº¤ÍEã`lžÓ“-5V‡Ó Mðí†u§uÉ@ €z¦Ô:@ß—Ì(·|¼5°-¤)|OYnê°ÔYìèk®¸ÇmE.JÔáD¨M’&'àªön·É+²þBÆm¡GáÁ2¬ ªk$zuØŽ‹‘¾ˆKl¦„ò¶¾}¸[A‰@f–p öêÏÖ×¾¨JG±×tìÂ,NxíUR5/·Ò*º¡Yæ·B†,]ø¡ç«`¿º‡á´ žn{|úáq%ý–b@ $~Å3W$4»ŽÖnûØß?o>h棉á{Û‰k%Ø:RÔMu_õAŠªâ“•ø¦T‹³x€ù[á%Ø  Q‰U3q5†PkÍKÃF¨™3›')˜sk{š±ôô.„¬SüñxiM¦%i¬Ä[VU_&ž§tÔFx¾OaPî“Ê »[UÙ«Ô¡†/®ÚyºÊ//«l+bÒìÁǬø Gm…ö Ö•§MÖ³ÖR§&ÒÑÎ:e«V©0 m˜¢JGþÂy®œÞb<«Éá`Ê;¿ØîÕ‚êÀ>)8Т¬5PásøqãŽÍ"Öâ>‚S©¼éºÀÍ" $(œËÏ,@•¸O¯_ÔgòÅ)©;IL&¨䬋Žâ´iÂö™sòÙdkƒÅ¾]s½?Ó|Àd,¡Ð¾ÎZ ð,\OaN?—’â%Œaü ϳ3ë G½‹çš’ä䨻ɮ!®ŒÎÿºÐ† Õ¹á„ÆŠü¼ÿžsX¡òtòÚ5\­)ž¦JŒŠ'Ù,ôfMБ ¤Ì^ :¯5ðè^TqƒTú´Å¡ñ›  …ãµÖ ¾ –'»t\’®öÊŠ D&àÕ'nßìÐòÛƒ.¬¾žx²6 `1ÜùÓÁ¯5ðL™å“ Á4ARkôž0Ú~¬ù@èGß~Œ½Â‚Ë…$òzXŽdÆzDÈòŸ_)9­y»Vœ¤~6ð„½®mceÚÿlÇZk[{â0††û8à~ǃ:íN„›ý#%e+{û3^¢ÍŠI#˜M×j…Šî‰ÉͦGñ}²Ô^Ü^\n¬OïáéXN?àVOØš¥ÄøDX£Ñ_Ì6¶·´aƒ5xåè™?ÍqG>ȘMîÕîÔvùɲu¼g“¡D§¾H"˜[¨ÏÉÉQE‘ˉ²Œ>Ë©ÂÊ^^=,Áo>ìFµªÊ-þó&ÂŒeo¯ÔDaØcS)Á±¿öMŒ;Ha“ò¥×ê‹ç±É‰0Krýg0•´´9ö·&ÝW8ây–y|õ¯2‹¨3sšþáæÞ‡=iHRîf~߈SVdåM:3àª^à±)9ÆØïRùÉ„8á8Ú/TÜĉ«¨Þ‡ÇuOu’•ÅZYÀT,þ”ðÙ)Ttו¬Žô9¬kœì–\Eï¼=ÊâÇì xçã$£_<¯Æ#W†«0ˆFÀµŸl±ZáXÔö}—’Šçb˜\Y@Äý˜xþ³s‰!ü™–ëjàr[.ù?! ç:% ÈCPŸ<áš —G~rzôžÁÜ*˜’lí¦H‘¤iáQäŒÊŒ‹„Ë}JåN´—2Uò¼%~Üâ &/%çc;ÄÙÓ6ê®»¶ Ù9gÊ¥CmzÞtlõƒNÏ'_RN,w™ÓtTr%O¡v§ÑZœà…>=æ ØK{Sz½¬¼\ºÓ«¤¬(Ÿ_]QÇßM:Ãà2Nó9©Ò6#‡æˆŒœHëa¯j$æ§O¾'Õï\vßÐÔ¯’¤Êþ»xÆ[@¶êë¶'21†íÇÿªñ÷– rX þ*3y€#¹4€£-tíö.l,„rÐð‚·ßo‰Éõ9á:‰»#xz‘ŽÙÒ$BÀ…Åå*œ¨Â %²ŽuLFÚ[4åÃÊ‚C¿x˜\8‡L #gÄ^^{Ư/3Ÿ1ëš7³ˆÅNªGc>EØ"nÔ{Í-;F§§ ÀN;ó ¾ï,Oa¦ÓIyè¡Ú¸‘<›Þ'ž0ÌzÖ§îH½&ÇÍ%ªÂc¿~cPB³4µ®;¥í‰ øŽ üJ •ÜL(ÄÁoµ1Xô]è”3VöVM¨æ¸ï3µ£æyܸ A û“éAÿ›Rþ@BXcJz@®›™_ØDMXò9…w_ب«Ÿ:ô—X> Ê‹ì5¯SÛ~Ÿ¼¬L,>@9% ¨ÍàEáÓ=|¨'÷kûcÄ@3i¦hB Íû¶Z:Vô<[®jû yH©£h‡ˆTùœë6·š§ìÚo²ë—‰•‰ΚšwrðÀ—´#´$3ÿâõ­Œ6ÂØÉLJ6´uï>5lj´®Z¢ŒMð#nèÃÒ†œñbÔ‹Iu-[.E¨¦¥¡ß-ürììù¸…Üí¡Æ <•™i­é«ßx¸D»ðö’‡°CŒ½åä”ûzkO*}Ä=–¶¬Ú3²%1ä롽tö¸fé"p¹„– &Î(p~ÞV;™ð¸2<¢²—ꙨҜh’3Ñ«~¾~9Ý‘/°¡wé_ {liZAŒ!½wžI]÷Õ&øº?Ó5f¤é±KÀSÄN×jž“õ³.¬ Äe›Â©å§½ X"ü…Žê¬;®š ­Û Em׉·¿, Î 1òë§ÔŒNgx×ôyÃ[ïÇ|4odÓõêôxHÐ"¡æ²¹$ØKMÐãóG¸õS{SÝS‘ß÷n,‘ÑZ•ÁYJ C¸|ȺÐXaä±oµa kü”•M3üž8-5X0Y3–iý‰÷³ƒ`™F‹CœËÖéÏ*ùÅ‚}¢Ÿø1,±žå'•&.h»šûT«AÔ‹’§Üa4d­)LÔVQŒÊ—LŸRCìáVDÐ0²Ð±ŠÊÖ·jü/|èÿ»F˜u endstream endobj 64 0 obj << /Length1 721 /Length2 9698 /Length3 0 /Length 10277 /Filter /FlateDecode >> stream xÚmxePܲ-Á îîw·ÁÝgwwÜÝ Á!ÜÝÝàå|çžsë½zµÿ´¬®½zu×þ±i(d `WM/' +» (£¡ÌÁÇÉ`gåB¥¡‘„‚Ì\m!`)3W @d ‚œœNvvT€$ÄÉ jkmã  ·`ø'Ðv0³´u´…´!w[ €»»»˜»‹+ÔM„õo¸Ú€V¶ €¤ªšž¼Š,€^VE ƒ f57s[ €’­ìbXA ‡; ØÒö_œ\Xÿ!vA]ÿ³‚BÊÒšâ2ª*šiI6MI€Ø $÷·ìê"ø ²€:þ«;f€ë-³ÿZæÿµþ›…zþÛbEåàXÚZ¸ÌAÖ¶`T¶é&¶‚xÿ¶tsúOê/!—¿üô5dX‚¬þ¢ÝTÌAzIˆ£“›+ P†X‚ `€ÄÑ ü”™£­ƒ×ÿ÷?yW³¿:ˆƒ­ÿ*Çþï­‹Œ­'ÈRÍÖõ¯ÔVf%ú'®ú÷\”A–¶nŽÿ®ýÕãïD-!`¯ÿ¹òoÿ\Ȧ% TÖT`úïü“–[@,mÁÖ ë_-Í –ÿ ü“V3³ý÷öü‡Ì¶ Àñ¿¾²™+ÔÖ`ÀÎú¯õ`ÿ×ùeô¿( ˆ§ 7€…‹ƒÀÁÅÍàðû¿èZ¸A¡ °ë?‚ÿíå?þ?‹y‚,P— ŸBíÒZÂ+ü¥‹¦+™¦'Mµ˜8`Mt_àØØXšìž‘\k’ä{ “M™ ožnÈ_¥4‹¡ïÇRD-<–PUZû×®=«<5DŸ#h;Z¨ \D]¹f,/«1Žsgå×*8— ãÈrÄš–·÷"b¯',ÎÝ‚eŒèp3õ_ÑAÛL5ØÓ6a…çæ¢[Kpù!›è4Ä&6…AN»úÅ«¶ùÂVg)’G'Ü*úŸ—÷ˆmh)ªÝ¤“;°í†ÆÚú¥Ò†[ZüCy|Š•ø*]E=:\Yж­Çð½Ø¾L²Êà8sæ¶Ÿ#´&!ê" N"Ý —6·1Ð]=&”\£5ð!qo2£·r\¸mŽîdÉqª&,ñç˜TGN~Ö¥Xm—ž¯òŸ&ÎØLÙJYšvp­³æš Jåh÷“‚ÆdêLZˆø(Ç ðÄ^”MG{÷^#¥ê~N vÓ¡¬u^>¢TšÚèž´… k2^¦l8^Ca~QD€ÂÇ{™ÃF†Ÿª´|÷Ø5â;¬YkõUÖ¼/®þvPòø€^MÌgÂ>Äu‰KeÑËûu=]/Q+1·®šgþëW©º~Á*öX×ùÁÞôЃš‘} .ÐD|\V´ØÕ³¾î…E9fˆü‚ý”f”A2¸Ð¸ðWR·“¢ Êj±F<;ž<1À™¦ t"¹ïWÿ'C÷Ú®})—–Rļ٤èžZH! ŠÜV­j‹I™0BvsÔúkÿ›¿bpÀw0œ’ròú«z½bd55¬C:ÒfÉ—ì`PÔjR½“=«Q?'ë1s'þ5‹V¥Š××®jcÇß„»Ýæ%:ÉTfˆ>6pSU°ó`QÊiNþ{êõûÂÞ°ÿSÅônù¡ü~"ïeZƒ*šÀÏÙÅ<°tꛡM^š½¿-CÃTÕ†—è%€Wùšj` P¡;$æ§-7|‰•gÕyL»e2,°OȾ:Ôï DhoöbuH­ù@ûË+´¢§æÆ(úÑåszá²®a)¶ÅÑŸôµ5zh¨Êãø§dü‚æçÓ8ñ~~$•2=ü€O-0C,ò@ÏqE÷WsÝ æ›¥Â('tt‰¬'O*¹iŽy-pÝNZuo[úªwùÅÝ‹­$Ò¾wÇ|Ê;¤'»á熳®Ù|ÖòËêÛ‚su¶SÅKóS9 ñ²J ^^ÙoH97 ÀÆS”&ʃÕ3ÏHäs¨Ê¬fÞ Žå£V$×ÅQ¬ q¢“"÷”F&BKŠXøÚ÷V:“ûç¾°©n·Ò †œ)óݘðh;‹Ò«>¡!MjŽb"J ‹R¼H=ÚÆLžˆØRJV©É'ooK#£c==]æ™z|>3ß\’piM½Ã[áŽ_kFÆ»¶o0¶Lùõ4ó]¤èl¯GŒÖwÜb0Ž¡±/ÿAfl@9QL{cr<°¿p’¼wú9í^G8‹Ì½+©ÏœÛ´¢wR:ÛM–Ã4ëvÇàœD&è²AR¯ˆ"#™#°?$ò U §ª°¬(÷þúðã´ï,Ç®µÚIv+ hâ Q(#úHüöM…gµèHC¼¾5”«\&!Y®b!ê%(Ãw_45Nükܘ÷’Ƀ}í¥ö¹5Ý‹!áe(³1[‰ÜõÃÒQkG] LÍÔ‡àg_áf—ï¦Ñ ÷K§Ã ÇÖü,–HÝÔºì1ŽZ.zô—]o2WUÌŸ–8ˆnœÎ°°JÁ„„¯A}ý*Ê?ÔË6Õ†ÊÌ<+_99ÇlLaŸ–‰6S–$¦†¿ºÃýR=¢‹ÚUxÝÅ«=às¡ÿµ†ùŒxªšyÈCaj¦Ãå*hŸ0 x+*Õnß/ˆ¢pßçI>óÕ4XÚ|¶L1ƾ‘µ h±Lˆ>c^ÁáÀDL:j(|&úX%(•«°ÎöµLdRÞSåÇü¶¼¹F;º±»«a†K_¾¯ŸŒ*• ‡Ä˜”ÙO¸e]¥oÐÏÃå"¥TbŒõ“TúÕY‹ýGa_îé׊:÷WR·½œMЫ¨˜·p£š ÓVÖ-ÛsmÜW\Ö ´sÂõ"C=OSõZ·>ô„ч¡Ú‰W>ƒˆ÷³?º;¶ü¨¹I»IÅMôt<¿F†S‘YÄŒàY_—Ìì« ;,–CžW©âK&Dƒ¨%~æÎ‰åe­­(_³ï¥éx¹e»f¦I9żx퇭é¢{ÈžåEg¿DˆwñÛ/5€ûqÛóâ°e2ß¾’ðIú„ùÙƒV-eºį!þ%›b£n×f)ÆâÛÇ,[ý™l8-ò¢;Ÿ‘˜YáU¾¯On*èŠ7㥢РÏÛÄêŠy [Úv‡(³f%]g¤ßŽZ*×~-ËF›§¥Á‹Áÿñ±ìÕ™ãÊùÏénNÐs%Ûì- F"ë¾.œ±ÿ¶“Þ¿w8Ùîhx°ã4t²’wzTǦZP \OoôÖ ÈH Eµ^VÈZn¬Nœblë·q½Ïšƒ|á¶­¨ éÊWÖß‚Bã+¢>”âE~ÀÃl-yÚ.×SêÔó4ß®‹|™#©¯%$ A‡Ðs"\>„è* }ÞåfÆ+A÷C…1æU¶ãm£Ú –㢻äÐàÚöƒ‡YÛ6JûQkrþœÔ.`~·Ö´H«—Wó°9ëˆh!0¸¥~#t׫65ÏÈqZñŠAéAû¦5w­_ÙTßì!gH‹×³«™*”ZºJÑήÐâö|Ódxíã¡KË7êv·8Â’m‚²`¶ÌµpÿÅëÂËc¡8à§àul/qtèéé‰2UÛ D• %!Óv3÷½ËûŽíƒ#•´[‹ˆë ­GKEòáÅz/Y$cž=bugÊLÓ«p0RÓÒ¯Ék*˜UªRA˨fÆ“Tº“`‚ÿ ¦ÐÎqiÂ`wUî¼@2-føåMö°rø ÃsAN0•5ÆV—†îu!н§™Òû*¦“ëÐèϘ;Îdˆ-ÇSˆó…¯E0³øAnU\þCg.¶ÏÕç=ä7!gÖ2q½T×?Ülaâìâî—ñäOª±_t€O*’AÎðúŽ›k_ëIïð\!Qcn¿PjD ¶beÚc¬±,æ6eϺ íù?~@²XŒ0ö Xt<Ρk=Âen“¯šå…͉/¡‰ÎÌj’³µ~fçL>^"Ñ[¯|·Òà®ôô£ÔYìif:Ì<'¸¤nÿTÞš¡žˆYåØöF ã_âÆ¿sQ½¤Éó6“g8§‹ B»%\É‘fD#(!‚)åWºŽL­×juRÍÏyXc¨ÿz lVqÆo·Ûb°;{Szå¸t?ÍQÆÆ†DM3¼ñ9úÛ¹çô&ŒœÉËî`b|DJ¶~¸\£»J¨þÂ-RŸ e¼ÿ=&0würîl;¿…htFêDù5éá4ȦÖ½Ä#>ô§ÉÄ’ZǬ×Ë`aÀÕZsŠï°ÒþMøv\ì|æ'ÊΪ 4ò—/fÏsLûòBk] ¡CrÒ¥ ÊÒ¨¬Aµ¾ó%ø>ŒFͺ!šI XíP·Zžên%Ïܤ½Cc³×7aŠ®Dß  ˜˜)2Úå®[ǺK@,x]( WeÁ̃ù2¼€è…YñÕR¯{?ÅHD,pU$þM±²™99SàqÑùïÁ[—@Þe”É9Ô¤àE5ñDr»Òks°ÖšŸµ«ÌZbwCÂË@^¿â{ÑûæowŸØËÉ,˜Œº‘¹€b™9\¥C8Ý›ìÊ£Œ4mÊŽ?8‘‘1Ò—ƒlã ¤'aPÆ6š®ü³o6 ªSÿpŠô*u‡gßb8q †¿ëŒÇåMeó×é-É=¥9ÿ%¤»y•b¼u¥¬Þ]C¡O5T«nîvÍqˆsö6PEÆ1I.v¢X¹cðÏ—;Ù£õJ®8AšŸÙLÍ%&a¸›MW2J¼N#Ûº]á¯1:RHn WTŒì¿ós'Ô3¶ÁØ>¬ŒŸEÁ>a9¼z¥_ûozYÞÔ+²  "]D<:iÅlq5öÿÚr°ÙçÏR–rôv´øõñt§G•À ìŸoѹ­( ¸G?yHòÓuï7hJùxu]3É–ÉÜØRMɘ$$‘®åÅ㮇b°ò£YW"Q[Vœ“2aÍÊù:OÑ8ó á¶kªâs¨—/º™œ¼Ïú*D„ydí§pבÃ4„âVÓfa`QgŒ[·‚‰Ø¶$K ž‹ çví1¾’`ÜAþQ»ÖÐüܾÅè(—È’¢\ñ9bº&!ëÞ°>!À¡øÏºs¡¨õÍ~Tc£UN2s=ö–~h-ûn¨mà©!¡ùçP6¼þ¾a”%¨$V‹^ÅiÌ «ÞÊ;ð‡"Î=#üsÒ)­Y*ž¥ÔS÷laã  µˆ)^íîõrx¤“ÊèÄC>ipûM¸ËSãµûŠ¢¬F Nuè)ï;V$}Ú àkøî¾˜O•úGAs°[H6E$9_ΩpµÄ(2n^ÖÞ]Þÿ¤³}ë­(#2ƒ%d¡PìDÜÔ¬°,£Zs&’Æi;— •±Ä@•ÈÖ'Œÿfò>ÏxÈ“9dy3£$ë&{FÖ)1Bçzp0• ãç4Ïü0qÚ)ïU%²¾™C«žTgËÉdñ®í5ñ<í~1l§,„Hô±Jßá§—WvœjDQõ­ªOa}N°ÿKºA:ÖÓ‚”õöE‘ëQÎòe%k/nVþ ë:‘P—x %<;. .5Ëõ~('ÝÎ'g¸¢óPð…ŽTPý”«eb0My{¡hÀ„j¬¢0ñg\¤g“šÊh·Þ–Ú;ä¢|¡PF.˜HF—}Íš0¹n, ŒNóMNëô%¶X²¡T8È ;Î8­Mv{fÀÅ_ÜðÀÕ, åÏu„‚uUhQݘ¿^ÿ8áå~¨çiÜ|2“ ÙvÔ_€‘lïdtrK×Ô²lY08Œ·Ä®²³ÅçÝ)¢¿ñĵëƒHaÇ/¥¨ž?6° hxø””Úìj/sb\ÂàŒšŒÔ‹¯Ípfwê¡”¯£UÒ2j5§g¨Ò½6,=r G=£#l4ê6/[ÇnÑ))ÃÉ™!È%ÔÊ‚1›ù{(uGÐKñÃ:è.N¾²š,ôghãLÜXû?7“Îr…£kÕâÔªþFõµ”¨!›M—µ.õ3Ó“ø £ïWJžÎª#5[XòŒ‹Çvèâ*ýiÒ¡ë3i ³/”€Åh÷%"ü¢ÝFÂ/:ŠŠwJUʵGmý•ê›áN7º5IkÍQѤ½p¼D·?­“IݵݶEc{«#Ý{Ô{kTMtEâOÜ­<`0¤ŒËqMùm4Ü"'fV‘Zûíw;*qΆÛSØ ±Õ1Éz€uº¯ÚÏoÍQ–Û·u0+{]Gï†Äp‰3¹pÂíë2­G¾CFîѶ…â®DQ#ÂųÙ3ÔŸèÚC¾>NC’ÕÇT¥c“;Ë–V¥öÉ0·Ñx‘d½Ç8€•h)¶ýÅ‹Qf~I.¬Ì#5,BôEÎ…0ÚW=Zƒ. äêüÚýáxª\ Ö†™ºü>Ôº;GuóÐ1÷ÔÉ”æ|P&œ!Ñüh nc­s $&`â±[4E7ò`AZÄ‚*=e=xhâOûˆêÑU?'ÄàÊOÄñ®í~êÜfã…³Éû]9_mÉ«`3û«™uv?Î?(úd䉉P›ƒž_òÙóQ댃41Â1m~Ë)çÌBúï†uè<úa›¥±=g1¢z”ý¦I ¦K Ó«NÏ¢ùZëðyÎg‹_]……}ùäÓ&ºtï„2¢aYÒèF£jêÌ\ýÄD ±ÿÀŸ{ií÷ž+Xï2ë;hMâ¾wì‡O#-¿¼Ü“3Zµ!Ôò¢–#tÂÊcÏãÝwÒ„K„}á6+üS>'ò¨ÎJ׋‹_t/Ÿ›ç=f4J±EÏoß ÿ7A÷*”/¿%gÂ3z^:b‹ü¸ˆHÃPEègÉiË—i6ÎG>¯ÅöbâòBŒGÆ`õR†÷2ßpmôµÈhnâ¶L…ÎPŒ«œüß7øã?ºZÓðþ(ÂSfòóÒhÉ߆¦6°ÝÛ½8¿U²£ï« rv•·°am´ý”4CŽIãvϾ‰bÇß›Q­H¯A ¦“-‚/Í3R¼sDŠ[ ÊIÄ~f'ïï=âñ`NâC_²8ŽÓS‹‹`GrQ Ù?ždQ¢ãf}P¿ýCµC`®wA•k÷ 0çD ¤ó/.Z,çRž¡‘å¾V’`ô-»ìBÉË:#KPñu\èv¶1ýþÁ¶{–wán¿l_æ{õ ¹wµ]‘YO¿©þüæ"6)¥Ãtµºï9âªo-ßQ½ðÛÔS†ùÔÁ€ªcÂOx…úš„UªŸ#îo‘™†ö©îXwÛ7<·!Ïc¨fÁGm2Ç%ñ©* ÛÈ}›ÓOE²ù@ƒ•å@N“Ås«§ìM"u΢9Б4SH˜y~‚A^ˆôýÀÿÂÑ]î+í°5ÜÖnP1/ô3¥y–:»¯F¼cÛù¾ùnøåìƒØCö¬r²uœéKÖ*_QdÛëÊXø•± 0ˆßy†va|øªt,€Ÿ¿/¢+ZX©²c™éªuÚW@»ÊNq1§gÊ|ó¦²Dßeæì )ÕbQ7C2:|ÜKçµ@·ÅÔüFÚ²œCOóÎÌú±ç…^’*[¬Ö·}d¶Ùwè-\½ê¤Û–òtAáL]ä¶ùâa>d?Ó7/Ð:¬1ŠPh[¥"j¼¤Z¦†XÂr}¹h«à5[ ’ÜiÞßÿFP.ìú9™ DË«]9Kkѳõ.Pè™]YÕ¼ýÜÙå–ü¾3ÿÌà£Íª6\³KàÑgVß:¸3ôßüIù]U“ä1Õp;ÙRö‰ürË)xGz}”zf¼f¸Ô^‰Ïø©®íq±´ ¹@"“° ÏC›^ðÖ*Þñ¡Ñ Í#„¸tÄY9çT­_¨W@–&0-ÅK8ÏŠgõ-ÚÕœH|("°.I^V®ke4|üJiÖ¡y‘fnúÝZœÝHß­¯·ò“uÆÚ£¥Y–œ†P‡zQî‰Qõý>Ú7qI¤ËÜD°CÁ¥§øÆ»jñK¢CLM©R¿Ì|$ƒ”F­‡=ˆPÉÍ®ÞVÓXQ ®ˆ·dLo¼{´×7´®ì£¹ MÌ©âÒ%YŸ²ù+žêÐ-‚F½9=ØcjFbt Í/mYŸ{L aî6G­&ŸCßÍ}ïO1ÎÎ ®“°Xú 6+~ £R„œÚlÜó£“ySÿZoc’]ê8p"a²ëÿª/OÓ¢ÛŽL·E{Qdm)ýëdD$¡{¯Å6À±d9I?M6ÇåUÓÊ ^ĺõh¦í ø[ì$Z”º(HÈÇ`µA3³Ž13†³ »>r¯ÈZÊrl‹hvS\åu>P@ ×Ìyšºø&Ud²|TÑñ#y‚ÕeäþÇt#yu8”µÇ7w„zÍIé|3ºŠ[xÅ᣻`xŸhÈŸ}sÖ{Ø•¡W C¤Ì„†¬²I3Ã)µ%¬;§Ðyaycf±ˆ/Z®Óbö'Œý€Ö&ª~B6©£Ãæ©ôb 0§âb $æªé|V9šñ›sí4<·Ûg¢<‡9‘MKœ0gíßá½#åÞ¬$Ю- Ä×5b ’dòŸ‘QÉI— 7á[˜‰¦ CÜEùqGlÜë~±uîß—LèAD+V¬|ÊVˆ%Á°pm4šîèƒYÉ ìv3~øŽÈ,7ý'öö£#ͪ/‘¶«y—˜  CXÏ6Ûêõ‰žèèf{µ d8d>qïæ\‡¥ ½6¬ û?ËHÉûÝâ©9Q`•Ü1Îo?’Á¶ü³Öµg¸R¶9Êx ÛÄS¾¢•»BJŸ‘W§Éû`&ƒó…æ!ɲH¾Z8JåGêŠà {ÕLæ¢ûǦªbÅê‡F²à§í½±%3ž¼iª­Cê¾]Ì‹»±§7ÒÊJÌ:þçU©:žžtsn¯MõÍÚ)A’Ô˜ýãr+ÏІ?ab4÷È£€_ÕƒŽ òÌ2k¸G+ªÄ°B½tÀ(?Ýw<ŸÖ ò•ß"ÒxÑ‹Öpµ_áGñrWÌØ:Ñ\}È ¬}ÇQ©DÒá–“—М(áÖjÙŒ\Ë~vêÚ%†©`%¹ŽÕLý¡šaàk!op?Ô¦f–ÝóÑuÓaaèFü#ä*tøfù~²aOë¢ Náô›‰ø^ÓŠÝäCXá©8g¡Áe½«³ ;Ë•&Îjp&™­S?4#]sÄ.Žž8lC†W•—k¾e5Ðs …s#´×žâLÏbaÀùŠqC•ñ ¿îõœ«U±U{ü¡ef‚Ÿb¤"7Ãjov¾¤óÀc€ùë!´{ËÂB5°Õ‹L7]Æ¢1ÕxÖƒ³O '<¥iº…‹"ó0ò^.x5œˆ Vr²Ù­¡uAƒªˆ¦”ËIœŠZÊ0£ ñ\Þ¤\…”' ˆ•7šE×Û ‹~¨Ê´„ ß òTÏ¿‰b)J!“CÞ”6xúb˜+()ÇèV•±he+,ž#&°5X†bQ›€ôé)Yç;t†(ß’^H¿ ?oœ£G·…)þ$ªóÖñé‡gÙEÃN%Keèׇ3Éã æ£·@_ÍÍ>žôN#‡”ª>Ø"^»Óˆä ÐÛ&x #¸Óô;BËLâþwA±† Õ½œ)|û¢`êo$Ü9i-mȶ¿›º¤eZ'âqßy_¹Œr´l»|J%]–H×´™§ XŸ¦IYÓ€ï5fRxºwuïdûȤØíî@bál˜:Fè ~ïãÚ¥ˆ@(𛳠‘£3-võ*õ†ŽDZÞÌ•Jƒ§O&µ1ߤOçbYï~A‚Ñ 7ûyÅIb=}6— ã‡¼¸ŸR‚‡ WL}r'§†hMk[Éd£Ä|Ç/Á«Ê3ãó!‚^L:}O–zC(Ÿg µ4-F°Ðòr羯µÆâ3þ»ê¡—yóæ•!÷¹‘¬D ïœçMÍácJû¹0˜ì“kÞ¶+I ”Z  ´Ckì°çÃÐgŽ•Škdõ}—^G^ß1!ÿa‘»>Xõ:dÌOÎGïD÷Ù1 ¬º)¬4­PðÀ¤`ÔßöU“CQâ®ôw ;àO¯÷q{¹¼.%µâVëKñ¢ÅÅÃÖÌȘ%Áø²/45󢛢ÀõÀ?EÆÊ%ßÐÍ­!nÐeTÆ3­V©Ðš¸oÐXˆp}—ÔžÂE¶G\Y4×6Ûèä6(¶m$»d'¹:å÷nzåFµcåu„{ã¿ýß8…u.{Rˆ‰£)£ ng;`c-Õ‰y–Ôž¤è”nðóÛešS5EÜÿG³³œ endstream endobj 66 0 obj << /Length1 726 /Length2 4832 /Length3 0 /Length 5430 /Filter /FlateDecode >> stream xÚmTw4Z÷%Jô!Fo1fô.z‹=º11ƒ1&jô.J&z¯!„‚è]Ñeô-%ˆîóò¾÷¾õ[ë·î?çì³Ïºûì{ÖåbSsC Œ|Ü¡`A0$ 0T34ƒ@ (BÂÅ¥Œ„Ú¡`n;T` uBÝ`a€0&á(»¹û aNÎ(/„ï0qµs€ÁaH€‰›«qÈ¢Ñè‡hO/ ÒKxÓd…PÎP€#Ì PÖÓ7×ÔUðªëÔ¡(ÒΠïeï ƒÁ P„'”à膸þ nØ_š< ÐP$êF˜#Ò ÐQ5RTÓÓ5¨* )ì€G7í”§ô  ñôükºÔ¿‘«Ý¿‘ý¿Ñ¿U¤÷ß 8À (€=Ô † úË7M„£@üoØÁËýŸÒ Ï}ÞùPǶ—««® àUvƒ»{¡ H€Ž›‰Ú!ÿ/ù¿ M”ÝŠ§û@C0O5˜7ÔA†ºñÛÑÎõƧ?¸)ôïÇÑ:À¼à÷CoL¹yV7„«Ï¯¼™åÏ…BfšÕ͵þÝ‚?eUÄ͆p¢n µC:ü ü)ëÛÁþ^¡Äü³Rðÿr;æ °ÿÚÐ_çŸÈê,%%7o?Aá\PD ‹JФ@à€ÿ#â…DB¨?®ßÌòOþg› Po(„;å‘ sIýQö\µpä ÀȰ­±Àwz¨uׂÖíì`³öƒñÀˆ1ïó—`{¹¥E̓:v»(ÙúçÁ8¶(«)Æ“bŽ7NÏ+çÏ òO«£¬â›0À!ºø»Ñû¨ôlˆ>ÿ hfÎv¥–Çk9jupœméǪ…įã‡u>+šŒ'WdзT#Îá?íN–±·"óB—Èv¹lœ Ê‚Ý×"Íœ®DHõýïŽ0jfMÙÏTû¸WMq Ð=žƒ¹0]ª„YÓ  Ä;¬ß‡wƒM‘NDËí•4L¸mòøŒ§lð˜ÕÕ-°{×ÊR…‹êv~¢ïŒR÷ny!›wÉh¡¾T8)Í%EIõö†õ žÕo1Þ_÷nñ¿¥| óÛïîV©ó )åwÝ¦× Ÿæ0·)- öRFœ’‹…w &¯!þ†Pq¸uŠ8Ù(L¶ØZ¿)ºRÝÒ F“½ù½½Í6ú8Oà`¼˜r‚& åÀ_¥Ú>R¹cAŸ7cp‘Z8Áaa`¦šš»£C1[¡”f˜Ø]‚Vṵ̈:áe $lT›—=fGg|É)Å«CŸ„Ð\XžàŽÌ. ‘Gzó˜î}à]8½~7ÔõÐTûZ⇠é }’ eX}½XŽ,bs+ë¤éÕá…ò “4ÄÖ@ŸÎš·ÖR„’ ±iZ­5¿ìæ€ó`¼ø4)8 >òÌÄ[Ì÷¥Ú „k{ÕYâ%»LªABCׯñG2Û¦:#•„بmhV&­vqÎB¬¬41«ý1|<0µIì^üè$þ®OwMº¿uý3ßÁ ZjMlXÕ%ß](1nM:+q8ðE’ÜH‡ö@¡Zç£Ó‹½YSá¨v0¼ç9K5·wu[£Õp_î8ò^å¾Zkžz&aӪЀ=Ä®„ïBŽmíOGhÌ((iŠ HoÔñ«‰ó–lA8×eÀ„bøTÊCƒHíC]ÀZá›u?ŒyU]™ é·Ü|Ÿ/Œ)#µIÛë†dj¬yMü½DR!·¶´H/}?^=ñè~Ü4.[FŒro[‡EÍ&Jf–ò*ˆË$r¤8_›.°tÉÑ£«°ZAšàß’|”ëk¯“Õl ðG¦ó&ŠÄò×ÕtÒkiž¨ÄumS‰‘éÙl_óÓGáføÎ2»ÜÙtîEGâ t=À'âGðÈÐßo9‘úÜç$˜ o+‡?—cNú9§'P[‚ÝÉÑ‚I®_¿—z*n?ÞÁY\Eˆƒ§&ÙÉÆÜ6íB½û•øõ[³3aV@Řgi§ïÉ’õæg­ì»ó6&‹zçû¹ãdŸTí¹‰qgg_¸PuνÔ)zû’ØÎöWóŽ6*L‹Ói¤:Ò´´ü‰¥u!XóT×ôÕˆÙ¸T¢å2®Ïaû"·}ëž’Fʧk¼§Yw‚Ùºg…Råú©9’:±gß«D”NŸ©~§®²­}ߟPz_ñÅ&Ô‹gü t ãq †ÿ( ™^Å›ž€á.ÀF—"*ÎhÙY3†(Hl&¡;|C¬.joý8“&8&ƒèy~¿Ó˜õN4TÀž7¡‹Ì B-™ŠØ‹­å•Å]vÕ×_Έ²»jeX‚YŒý• &Â¥ËݽÜVƒS×Â5»Ø¼w÷£«$»³£yu ¥€¢©+1·gmësŸ ›ŒëÕjù𩟟U⎚·6Ì^; iÐm}JfQ¶’p0´]ÆE–OçQÃáyrbÙCÙVyLáþ¬$ÆæÁÆIÐëÄ/´{œZØ[ãuqÊŒ4š¶¿ÆY-±0UüTÖŒ Í2Vz¿L©x‘0&?ð(uÆŒzHùtñEkÞƒ<‰|!Û Å©Î_ÚávÕ¾i¶3×^>óEøÈ¯Y..^ ƒîÜ#‹ÛÓs8Q÷Džê«‡£ciIøÇqjÚrΚDýú!)oJ™ù,SŽ”-:­o’®ë+L0@]1åÓ•qžJPßpyõ;¸®ÐÁE à£Ú­ÓáùÐ{Ì^ëdx6/îí—0ŒœRõ¦ìNÈ…3¶–ÎY~½::Å{Èg"“C½¸ýˆdqÚ]雋ªL6:S?4jÍ5œë­Þ1†oÑÑv—;ë‘k½yÂŒ±n°’^5v~¼{ç“ðЧ üþ© f[rSç“©L«Âí]âöÜöQ|³¢RÕ\CU-e’ËÆÜÍLȈ9ÒïZéùèHïçc›z‘ya4UA Bõçà=1æ†@ ø1}´ýa¡Eü’ãÖû˜jYF:«&“¨sÏXâý׋K‚ìCs±qÛ²)r?£k¿2˜E7ãYe´Ù;h[%®Èm”¦,ùÓÈ2 ËÞúaD4='!O?©züðéSĸ G»èŒŒÚ)ÝF=í}’á5()5„?ÏÅj±(¡îTD.º˜@œëþ#ºO¢2ØEZÂdj?“"Ľ3=o«/ˆ#±¹Þâq¿,ë*ϵpu¨E;]y™r>û.k馩Ž;µé@å÷Á’¬yùåw+O± ê®oü¾Äb§Þ²r¨¦ÌU²_íî)­âåÜ™Ïê¬Mœ¹Åq´Sav/‡Ÿ‰ÓÞÿÈü½Á~Uu)Ñ|¿ê˜ˆúQ]~WØ""×é ò þ\DžÛ}Þc좴úåÈqV.e.œHÌ"û&´on`»ˆÔ ª÷®ÁŽç&¶ätã¾xÅÜâ^ë̪7ösËœæ£d@ôRe_üðÜQ‡q&8¾HÆ¿‹~VeŸÉ eµÆÿÄʤ2¥.wf ôÍZ}|GyàIÁè‹’ÜÔ•Î:É–"ÏÈRH;- W¨(r\£ÖM{WøÂ"Þ~°o¨ÿ¬—ùCcÈ mEå8ÇÂ[m_ŠòðÖZ‰à¾óù¾²"FÏ7ÉζšÌ+ƒ#õJ…9²Ÿª„Ì„3×&ÜLnµÐ½ÕûiUîµOÙ"ôø†Ç_ QŽ|0áÍ3½N4ð…P£âqÃ/6–2Hsïí1&ÈÓŸ…ögÔ ÃÖõql˯Åêê¶5&÷V}WJå²kV¹]ü“sߨ’îEãïNz5C+à™x¥ÅIÎn]ˆ-žšÅ ‡_<»‡ö]¸k’Ò5±ydô´–ñ Å^7ÞÈ¥¾ôlh,ßÜ4–ßtß“ÉLÍv¡uX2>Ì–-p,ópóû¹^![Wò2™¨¾DvVþ\¢É// [ dô»SïiŽ¿Ÿbÿœ“>ûóÚå=ô}Ìo&{0Û»u×±ró“»É`AJ ²5Žf,ù€úES¥P˪EÊí7*fÈ9ììw4òH‹-]©cóï»(î‚N™|˜ÜXŽm˜„O)J-/ÍN4Ø‘Z2h< ~ÙwŽi Íeà>2díÃ^)¹f‰l á‡MÛ—¯Þæß‘±T_Â(t)}ëYy¸MjÑwçí³Ò´öæÎ7Ë ÷~¥?“)Ž­Tôr«‘î˜|­Â12n­½U¸‰_Zó£ˆÈ-»ƒ¼ÿ¥Îÿˆs²„µ‹J+ãÀjFùù¤ß;QçêgøÒõ8?òú¨Ye7Ï Fé:l^l™³Wá±SŒ¢Ñ¹Ñ±Áò—šõ1VÑÐg£_êY6l,“=F¾ß¿ƒ„ì¤øJê‹K©·ÚíÒbðãRÖ·asßN¾ ËígÂ4g³‰æ‡$…¥{¨Ó-û¤®Ïím3ÓôJ%ß¾õÞj…'åXŠÀÙŸÓj÷ÖF_£Ò±ôãE®ý¯íÂùU"à'ÂIVÖ—´óæKã7ÅA‹óW™@h£ÅµÉ£¬½r'ez@—Íór¨6¯^UÓ)Ë.‘ï¼1oÖ ˆt¡a¦ ô ËÕ.Ú%œ.­´|âßÇÍ¡“-ýÞ|iØE¹XéœëUý=ëN~¶qs U~t0h­‚Œ[û© ™fTeÞé€Vtä#Çyî°O_a‹=oݦSê8FÜ*¿$ÓØ¶t–W ,n›WÔœ,ÖO u;üÈáÚ˜•êg“ fú•…ˆÅ[Mºº:Ë`D‘¿èñÚg¦p‘d-€>Îô§ºá”A$È›¡ö#Ѓw¡Â(ûõCv„¨Êsñ˜…¢±Êç9QÊc,­^6Š×™ÁWgêª)é6—s ÈñP6o~«(#í@˸з>LÂÓ<µçO•ßSöhLó-)²Üp ça¶Kxýùe#¯Àqƒª X7]¢¨ §m‚\0¿=zeVç‰Çyb­½¤š\Ж²#æü'\’?Žm”Ö§L&wñ ´' dãþŽw''~÷ ©eh<›ãT)ò%Æòi½aSph ÃüpKcðß8…Eù½Ð!ÕqºthÂ+=¦Û’a·Üt©”…‡Ê3ã³yqo<–I\•VÉÏ5Yåo¹ßSA¼ou×Ɉ_2¸Äy©NQš—*¸¥fgY”‰ös¤:L{Lnð ÔË›rÛ{`NHñXeÍ6ÇèjYÌ4MZÐ8£f°!xX¡È)¤Ût÷•‹"ú «„ê„ÊøØgà'_êŽ0Êá…„©zɤ¾•mšUb=åUK¯.dz.bg}…i†ª:,×5Ôhïf?Ί)>•úí&¹ÒÑð!ž\~ël|ocn¾a@ÙðvO™OL´®ñ sY¿CÓ–„#xnü3m´áÏ¢<[{üòú½ïÂò¦e•vǯݑfÿ¢1t—š¢(v‚ψösÿ8KÝ:ÄhˆgÜþþòþÞ-/Û—(ªðÂñÓâòêãÚI¸TB‚ Iïz/Ãc¨ ;ÖÃÜqßÖß_äZ3O<¸NsZh(,dݼ4±E5…^½}/kâµÎg¡¡qäZýljôˆ„ò#µðûl(ÉT45×DFã…£í‘y¡ì‡*áqþ¦%ŠFa»®Ûä,d‡"ö•{Z Ò©cÅr9S¯äê´‚<¾â¨’gÊØ ÷äQþh°t 7Ê9:(ºÑ#êM½`ìÔ}nÆŒmBL|ºÖ¶Îõ¢¸‹ðÚ`f:ÕÀi0ÆÊ~M+QØËº+]½ƒÊ»(™èïX}Þ£)Kšçjoð“¥°TÃ"Í<È•õ¦'¼§C³tóÙbßojR™„ä É—g¯}/)ÄmÝ‹"]±‰ø&ñâÓYe@Ò ÿ–;ùÛsi¶í²Ã„ŒÚ³xP;ÑYV)i/LHªu-‘z…ØÎ¦­Ý"7±¥>g Kª3 ‰ g/*½%¨> stream xÚlºloݶ>\»Ýµñ«mk×¶mÛnwmÛ¶±kÛ¶mÛøÞsÎÿž››|YÉÊàœÏxÆÈ\™É"%µ³uVö°7a¤e¤cà(‰*)3200è˜aHI…M œ-ìl… œM¸j&Æ%{#€‰† dgïáhafî  0¢ü· jm`lacáPµ³¶sµ02𸺺ò»:¹Ð9ºü¦û'IÉÄàln0µ°6ÉÉkHÈŠ(ÄdUb&¶&ŽÖyCk #€´…‘‰­“ %ÀÔÎ`ý`dgklñ/LNtÿ`ëjâèü0SG;€Œˆ²€¨œ¬2@Dˆ^Y``k ÿ'ÝÖÙ‰ëŸh#'çUGpþ¯dmð_Éð¿Ò½Žîÿ‘è`ÆFÎC3 [úñ&akj`ûÙØÅþ\ÿrú€â)Æ&¦ÿD»X[Ëؘ(„ìlì]œM2vÆ&޶€qïæhñ/‹’µí?•üOŠ…µÇÿoÒÿ‹p6ø‡[³h¤å¤caûÙÂIÔÂÝÄXÞÂùî]LþcV3ùOŸdLŒ-\lþ³„É?üüÓac;[kÿ·ë?eý{OzI%II1êÿÄ¿Ý"¶Fvƶf%ç¸5p4þ¯áßny‹ÿL€á—û·Îø¿ºŒ³£…;@‹î_ãÂð¯ç$ÿ´s÷¢edcÐ2ÿóbdæ`p0søü¸F.ŽŽ&¶ÎÿnÀ?µüþïÁ21q71‚Y[¶3â²Lm)ÿ#R8[N=;­¯B½Ì¼2Õ}£…d1hn¬wx…}¯Œç‡7ãoÈ»{¹#qßDdkw<1E¦³ŒýZL\aö§fë]!ÿ­>L÷LËÆHì&üÎ9}}-@žj’%3ç¼FÒ¡”IŒ1J¿¬½q;nuáÑVŒR‡9CóÎdŸºqÖ<¸àÚïuo $4/pî†Kϼ Üßþ0T3¿þÊRHKC~ޱS#Wë Kx+„lÛµâ+fp3@àþŠy"mÓM`ùPû)~x"¢ü†GnsÛOOî– 2kñSª’G%"v뉗¥¢Ã'üpwÆõåÏ´šš6¹C„Ÿó4¹Î¶ä¼L?ì¡×ˆÍWκԒ³´Ã¿×8çÆØª2^¹Åñl¼Þ&:QedkDâüµãYÁ»¯õ© b„ó†±ì[¨-؆q®¿í œ´Ðiôèik«d\9ó;Ð#ýÀ¨Y€.¬m¬9_<ÂÂÉ´Û~>gG“ë~2¹Ø¨sFcÌ€—+Ÿ@â Ûþ¹²i)ý…í*’ø…ZQ t\wÒ€äÄ)ü±€®ù;gtûñÝw×ˤ4Xïòì…‚±ƒeVÐð‘â±b9RE!×,'ú™–ÝË›em:“™g-—ÝwNKåbh‹0²Ö:[3¤t~úÜ=¸9ÒpÑs¯Ì0¿^ýoí³,°á nÒdVf€3æ™_‚ÈLœe~x‡ G«öAgÖg\|ˆ{òì+leU:¸rlž A‘úÝ⫃wƒ*”‡q'HÊï+‘ó0Ñ·ÈXkèãyäIªIšjzyGQÂò1œ¦â×hñûÝÞ/§E¯‡®qˆ]ÀÒ'Ûw ÊøÖžž$óÝæGšd}C¥ôaÕonæ{|Ð$o½¬UCM&Šä\Á˜64ÙBŒN Ç®ýùYÂ<ØéÜ&a£°°#ä+Áz IØRyOâשÜëVÁuö(á‘vW9­h+çù&ÖéÝ;нn„2ðÖn°5‡Â‡há³U[»H-P?D&‹6(F(Ð0õúK7b'Ï/Фá¼Í¶]©ÃÕ·„ÁÑàÈ`CsØ ‡Š…Ê£ÛJÆÅÊã5æA™HSAÚè ¿"O#cZ©8OŠ ÝŒ…S¼Ÿé–X™X6Œãb> ¿p'ñ½» >ʽ[¼{¼"6xAüîü±Ö(¦4}S Ùý¿2eåúÊÖ¤úÐÖ<¤e·ª}ÝmÔ©×:À‹ÝZñ’ ìŒ4Ë,B¶="»Ó~XØ…ÉMpâÉë2z¼ô«oCº^“Ù¨fÑ'ÓÄr§\®vî6WmSû¨>³;å¦däëëàÎö….¢Á-ÏurÄ,ÊÅ_¯ây'ªSµ`Àˆ è¸ÖÙ.èt>T¥ÙáäÌøÆ‘k,J©´z%:)¨ÒÃþ3½¬ÚK%‹»`ó¹еw¸4ä¯ñÕ±P8×Ptˆ$¯áÊݬŒh)5rJ062ª•õ¥Ëã[ÛWs'g;S®–VWŒ¯·~i?6L9¬Yl‘ÝÙ {}ðcy=YŽÚŸ´Ðm1æpÙGkè:b q»m HTP¤8YdþÞú®´Õ…ñõ;¬‹äTÈe)‡ß÷A@§‡|R`òÏ;É?UçÛÌvXI¯¨üœw:guÊn©÷ o"J 5,ý[Y¼µ.€àè‹ÛܲøÝæœÁÂG>ÉÊBa:ú?…'.Sn-*†‹!*ë32ÝËTûà Ašì³ê E¥ø…‡É Õ¿,X8|#õyEä»>ÆsŽ+â¸C̹µn•îÉhü((ú^²<¬30“êöÎ}§‹‚xZí×»¸ê`p;8³ŸT®¢*t7jÓ_\ <¸gzÓ<$Zy"@o달 1Hf¿nˆ1ET¿V×`"RDAëaîÜ\«-’Ò•Ì‚yº?Ëkf`C7Ç^ÃJUÙífL„Íå{¯‰ôEú”;¡6uòx(7 Ãÿ²é²)Ñ~ËšÊÂx^ÖMùð+Ï4KÓÌ#,§sZÚd+Á·15Ó±Ÿ-—~…º;QÝÄ6°×=^„_ß¿zX{¥ 8”S¤™ [áÿ„tZý(>¦.5¢… Û“A'Ï?[ÚÁÆ4˜,ö.jb%¶ãÁOýº¢go@»ƒòäFÂíˆPÿ%µðM¦*ú|XŠÍ‘œ*jv˜vÁ’^óɵ ²¨“þ¥‡PÔ‹wkEZnI{‚ºpjŽB™Ä´™´Q3£l GÒ¦ßG† ª<‡R0tˆ§¾+êt{ƒa¬?S7èl1®xLd}#©<^[ 5«ÊEA3C†â„6E™ñ{—c¼°5‰öyÌo¢d¤N#'2]ÌÛÕ–m6p£´•Q´!^ºTgR)$„ÿuÀp ;äq^É¥#¥’ê/XŒu«Œ:*ÍVÑñM])æ@F†Ö¼i4ÈèÒW²ÔŠÆÜQ mýUKâH®ƒbÙ¢ßn‘³kÚÇ/^¸“² z[:ƒpqC º‡ÚÃ.åˆAðåc ëR•˜.=ó¹;•¢Œr~M®~É«oÊ´¿˜ð.;‘s¶…Ï"í®Z2˜·(ìcíâðZ4 7NráÞò­Õ‡ü›qËyœ0o˜²ÚD ²Örè»ÆTÖîï[°N%n® ä;ÛDEƒ:ÇOâA “rW‹Ó‚ö.|"üuª~Aº`²£Œx}yæÕnùPÄ(øšPÞ_¤Œ¹—„{í@vTá{xèÓ/²vƒ¼çHÙÚɧX©!úqç`i›IÓ%n,C5¤!ž®N˲1a7´F’Ì—Åýyôà~FNüfd‘é¦7ù=%y[’T„MÌ£$´Œ$ÿ1Døù†«çÓåô¹ÑÓ"ªú§F9K˜š5r7½Ž6®ÍžPÇ¥ª“”ÑÐÊQű*$!N°ÌmA¨à\MȈA^˸VÆ ™ð7P‚ú«®ï%˜lß;¬×M.¥…Ч¦[·KoÞÎaðUiÞ"Àmfíð‡‘ôÑ žÇ²ƒ[ßõ†Dþ«ÇÓ¨ø»¾%Û°;N|pùìò«PóNª¬¿X…!€z“ˆË*1¸ŽW¤Ú²—}µtâœ'³Nðn)i]†ÎßíÍ3ÊÙ¼'ÈpGsÝ…µ,{3ä†( àÉ3™,ªŠ¯¿hÉ:ûóÎö÷/r`Âfyÿd\®åWåQBYsf¾¦¿†XdÈ&·ñ½GwgEÑ»§rãùt0"n;ÞE«áÈnœÆ]í3ÿh*ʼùïÉ“)}ÙÓý}‘Ò²Eß~LÕ:ÖQÖÑRƒÃîW¹AûÝ@ŒÊ¶_%fŒ.ƒbg϶pUEÓ$ôBŽÀfUnhC[ˆPñSubñ^+¦®^×½¿Ý=#a†Ð?!ÌdMjø30ù.è‹þþiã6:¬µ5?<¡0Ä,¯LÚÇHPD ”i_bMM%^Têè/6-¤µ=›{J¦Çä’Zsl¼¶É¾Ì©–*ê|[gõÑŸ!ÜSFU^"rœ1N±9Á™Çiç™ Sàã¬.žÇ„P‰‹çîßXöó­„.DmF)ûYB‘ÐuꊔשrÏpù\•ÅÊ¡Âvu£¾>žá“:\.ˆ‰—‘Cz•˜Ãkï;¢µŠ‚ ”ƒàëcÊf•oïN.*;/ ?X£3–ÛÅÛ4ñc‡ ê8Üô½rÉQl„}š»Î¿Ñ½Gçi,oð§·Ògdªm„Ï bf¬¦ª"*ã¿$à‹5Ÿ£ÒCÄ”,AŒwiZè0j:µàŒ—–2ï% †=T6Ô= …­ôi½djË©îݯbtö_lÉâ6ò_üÉÛPE,¶±Øµ¼Ï4ݘ<›ÓDåÝ/UÊÅtæÁ•àI‘¬K•~²ç%Ү尶‡à]Ü&À L70§S±æIƒÈpæ¤Õ [ŽLÌ" ÝÝ™g«!îPÖƒé¸Ðg¬’pz¤ÊLT9ŽPì-Á$¸io'žDõ§gcl—v$̯·ÁÄ^t£_z‘‹=ë:´‰oPÉ,z5%ÍU'äÝsyV=Ïz˜«§:ÁKЋԣU|…ušWp¢¢nÚ>ðÈã·ÝúL687…Ñß³¹F|ÖWôˆnìwÃÍ-O¸9ëé‚P tç@ŸwN ¼aZŽá99r u7FƒIP H[~½{°š›öª ûÚ‘Ÿ‰Ò>:âïä«'ŠÆ‹é‘1÷‚«ñËR¿âã w˜K}(g$øºÚlè¸ÐûÚ£~Ê1`õ{é†_}î}@Á†üÎz¥Rcv4,ÌÐA£<, =âþÅx&ŽVÕ¶6èë yc²t!Uåû N!²Ro®™lp6q'²E{Å‘²ô~Œ0ˆL#±‡+Û N`ÿŽ2ˆøþ>d3qðÔÐ_€é°ðT)(Ñž1yÓÿ0¤ÂÌÑ7z‘ôÌÄtÅŒ'Õ˜žòkÞ_–¶É[3{3,Ô· o¿šÊQã¢aV„È^z8ŒâO•* ~®çO®C¨~#- 0~Ë—>'öPçÄÞ½²ÚQÿKânK—µ %1L¦n.;׬«Íµ5z}ô§.Õ¯7m÷({/·ÛIäQ<:ÿƒ ˆÄ~ÏÞ $’c«]ÏЋÃy÷g³b…ý §|!3:MN(àeŽàçxS„1ü’VÿdZx°è©˜"ÕÊ¢ßsç8CëY©õ{níó)³ànÅêïàeÿgßdÒšãÚ O=\#&£‡¢S÷›p•ÿù œfÇ;†ë 0’rȶ(†OÑ$µ®n¹7VÞ~ä&é}½k¶­½ †sþT%ÏöBs[(8m;ê"Ÿœ¤ñsì }Mêh¡ û»]¨Rs‚ËUé]VˉuRrÝsr³Ô­ ~žq@Ú¸UÈb7n×៧=NÖ›e¢ßÞv»K¾,…´ì+È[…NeE0?; 1çrÌÔIfY1¿Žx©ØŒLŠ71’¢sh*Ÿ©;(\ó ÔÝ?LåJ|Òw!ÃöAuun1÷{Gí¡ÕuW­[ÌŽW7²}ŒAó}Å䱸AÔ·ð#Ïž÷`§)ãWŒj™›< ’nšó$d—n·(Ê“¤î·úD~z_4Öxft'C”Ó‹im›ûZ$¡qkª¢ñ·Ñ2®u7¬`d¢fˆéGêȧ„ž]°e«´Xpž*Ìלt,óêf‘«<Çj¼t%Ö†¨ØþC © šÝrͤº{ñšÕ÷ j]çH[ 8HˆÊCY*äâ=(û­àÙ9‚*të> ß–ÒÐ^%é^W£Š {xý’}»C|o iªcÚ,å_–êpeTúÆò÷£qŒ œõ ìtA¾×^CPÄ6µ»µIFtFþi£jôÕמÈÅœ! EÉYÔÆdLöʨ+7ó?ëiWÞø ÈçÑÅR'ÇåöŠœ¼‰¬µ6#Ï¡þ²H8é£Jv+‰6=™ê„èõ³!FÅëšë†!u¹ªÑâÅ1š»õWé%äixö]Ù+V@Èá7çé"*¥ÕúŠUfM|ɺY!½ÍÚü¶ƒ2ï¼—f»-5BQÆIŠ¨Ë¶Í±E1UÜV«x\Ù“­ªl•Çk*Çø8çÉÿå’ïaD¿v§D\ñƒ!À!ÇYKâ‰RšUí›ÏU­¨ƒœ"´õÔ3R‰ÍârïëISéÍGFØëGו°»5Fpv*™eä+¡äP8Ëâ¦}AwÝ¥Á7ˆó˜f(Œ¼)WH´ß)#u«L`fGÔš»œ¬â!ŒšD¹:8Ì f†V™e]£Ý®±À­gÔóÞ§™Rù`TœO2ô'h«ŽrÊ +íéöÊì3¡G¤@Eg?îpKã¾bÍ‹no²^<£¶ÐŒ3˜{=›åÄJèÝÝÈ’Ñâž"ª|JOƒEPƒL!úÕ߯±ž¨¥¡ÍšQHs¢²¶ã¥úÛ³°ËG%š=4Êé° ¹ž&únÜf*o7¦jp,D]MžJ´vZ3:ª¾ê±) Qç©a‡ a$tÞKt…»Tx8•ñˆ÷1v fOʽM?€Õ&¾4IÌóª…=éð%ñE9ó–öB(r–¥æÆ÷áíë gNûdŒÿž0ñ!ruaXjÔZ¯A^yo)x>•Ž 1Ã&æ¥6ÂŒ1]ðñ÷Ú'Æ@RΤÛá‚6®¿¢¹ëI÷\â\\Æ}g>³-“Õx½ãCüT´ó{æ²ÆDc»ãü(3»ú9È@í’Ô¿þ’˜ðæ¥h¤œÐQäªù™éöŒ$wï³En×·dšö56ÎÜ é6”Á˜À¿‚Pþ³°¤ ¢ï«±/‡†%³wPº Ž~l^Á)f,õœ<ø,¢)¼H|Ìv³]7ÚÑæ1˜õ]'È#;2‚šðÒ”\΃¿Ì÷[U ²«*íÑèmŸ¥ûh)„à*¶µ’ô\’5fKÝÍrÀJè;ŸîÌ|Æô"^Î|Îp–°«#¬³îºÓB†‡ 9«« R‡V‚o;ù²”5y8½|RÅâÏ!‰V©‚ þ­w0cYÍl Ø¥UFéOWŠþÌGË!†M­‰¾ Ýl0ǯ“ºéò×–ð£áyLS^ ´cÆHgS@ôQ 'y þ ›czƒŒÉD¡3±íB°›=k0Hü`¸({‹ÏÆ70Ð`Hud 9D8wWG_ 9E 0Y¿Ñxïy/°„s((Jú¢€üŒd%pÆT Л}Lýå_u,á©VˆAeyú†¦¿ #ÆTïAµ4OF>þˆ¤úúäK ‘Fd§¬ ؘ=nj׳jËß‹ãG;æ,àþÎ’¥>)ã:Ü’T+÷´/ªøñÆÒZ¸#ÎâíÒî«+e=yD‘ÙBqîúú}Š9€Þ²ð^ÓxqÈ d*k7eâÒ+‰žXÁDË»¡£î0Ä%x;ù®”pÊ·“-jÇ(U:ª˜Ôœ;c»:<1EX‘¢Á¯ÃâƒÂdN§KRRõAi('”"üâ¨ÉôYÐÃÚ¡€&œ8ñwcs1""4'=”ûSØ0ó£E5Ó…—YQTeO³|!ô¶òÓY­zý»×—û·â³±${iqŠÜvŽtJð™‹TcE®É÷´Á¥!–Kì­‚ÉiX­)ºVøÏXÚ\Æ€Žûv½¬pìõ9¸ìk[›--Ù÷[ã:{: òÙ‘¨Ê^ lôï©rJÐ\–¿Øê±5BæØ©PüßAEvC›¥-²Æ3./¿¬ÕF'æJ<ÞHn|îp5dÜF¹‘Ñjvët>Ùô1H™Å§wNJ"xPJªÌ´ÞîA ¦I ¡ûG~»™Ú¶á°ãm9sБ«ú·¼mÕhÙÍ‘>Ÿù‹½;èyôÆ¡^.ÈÌœ}ükYyOÏ:®y9C}ö}3e¾À;íìÙ_öÍ.úAIKîÙª¥ ñ¿ “€ ¸¦ OÎAÿœ.\ŠH2Ê\WYd,ƒ¾²Ú ÑËÿQJîIŒD²ó«®w‡ˆU¥…þé t›: ‡Ä®ä³x‘)T{f&Ò 3÷]j˨3öÖá{iëJˆl¨ßò×ì,ªuOË0Ìk®Þ‡ES,7Àß§xB¥5ž…#L’ƒf ³¼“¶¢B£†L…ä}HEv 1¬ûô ¼¬… Ü—Qz˜8oÚzrY õDyMvrK•úN*¬îÉ™è‡-b½±‰Jµ)§õÆš=*Ã"cóƒï'ÈþŽSÔiŽÍ 5C+”YÍo³žY?¤å˨ ÀÚ/o”©½ ä›Ì,EàÐõ¯ndŠ›ÔäZòaµW«ÿí;ã—Ø£ÂèRDJ6ÏÏb¨bhÎ;Aûü…\š‚ ä ?w´\kå+Ò EÒ'_°¼+NØX]‘C´ZÄUöp>Rùç$gû}¥§šXyúg2(…4 «$m^‰H2uëJãNüº¼'3I£yzÁâüU¦Y©{Ô\¶àö:³}¿TÅ“]Aê¼d"Cº­¦Ž­9[æŠJÙžd¹2p×ÁZ¶uœ²ãZ«ÞsÖÇl®©S_ë_©Í~øÏ8ª«QçÆ). ¦t®Á³M”¶†¯Û!à¡x"§/-r¯b¾ˆŠhiÙ•_T¸èý *a: ìÛôÒ™hNÐ$.Ü }«l·CÉô5Á/™$™*5ôè§¡ÂÄÒb4NÊéœ;íi±¸ºµký²ìö¥ú*¥+q>Ëþ ìG¼³¤7š´ ¨ÂI䂨>b)“ý,ílÆX¸”F>&…n¹(]Œîé[CÎÙé=±K}Å’' ôõÅUav̈§»MÖ9ˆõ†Q³ÑÝBG(—½3pÚKŸøÈ‡Ä©ì‹“¬VÚäÈH|¶â}Ooµ L1£ÚåÝdÐ<ç.¬ËÐdÐ9ÿl¡ºÃ³1cŽ‹c'Ž4Òðu/ÎPÃÏC!/¡Ù oKZ%kN¦hv§à‚?‘WZæ[wz%™òN~T°PQŒL4zÉvæ–®èM‘¼d¢ càŠÏ8]àý–ŠíìÄZ9 -T#°mÁsLÀhžPÄ}qôŸßõµÕZYÅ×ÄxÑ‘¯h2ro¹F¥!$WžùCí‡êëãÆ çò÷Œ+<´ÉƬÑÖt‰àî¢_ 7ªµân~!'cÈi¨£ 䌤„è§K-Ô)ÂÄÐØEF;‘ä/“ ö1!gd&dùì¯>ÿZ­Òë‰_¨ÀãÇæ‚®š’w™°D@ŒCC|­„ÙìèzT´61ý͸93—³90›Ë-l¤-µ/Ò,TE„‘™„(­/KçЗÅ÷[âÑ(}ï)Êé8Ø~p×úV"#š 3\U,¢G;ù 1ýgì/2egJfÔvffla*@¿'Ì(\›Öˆºq‡Å@ñRšxÓ7B,YçÏâ1´çVÁ>†©R¶cæì¼}ãC›sѶNþ–ï…géùËORÆ LxEÓo®ç á‚°Ûp:9w™°’­WzÂÞò —Æ‚¢P+ì[ß]ݸ \‚„&\­•í«šØÙõ¯Õö³"øy­/k¹S4™1aaÎÜ.ãȺÃ1jÿ¶Í7EÄohV+Jî×Û8·¾ÞG?\禼˜—N †‘€Æ‚ûV@ao"Ó7å´ðº:iõ"µ2EãFzëýƒ|ÔÁª{´Þ`o»á»ÓÕ… ©’˜ì0Q¾ÿŽéXÏÇÉ;?‚²x­ä’ùtð‡áT5­ÐÇIE.ýäÜù»W9B:£Ø*R¸¢ÇÂ.82ŒÊ–Ý zïó·ì­ÃSݸGa#M@A©V;²«¤µœ>'¢çãJõ€ä…dùrYŒ‡ÀŽ aƒ ۾爡/¦ÖZZó(Î@#G 1ÙzØ)9XÁýS•ĘÈLó€–$º¶k)ë³ØÎr.à cEñTE¡Ák àsO¢¡Õ®*Ö’0 XµPfd°í*5rÅ¢®ÞÂïhíÒ;?%éÀÀ×…è·Â˜á:ÞÓÌšÍöƒÍŠ1®‰¢y$hðÔÚ7§èT?Wxˆaï›1r +ßtȾ,çž™M«4’’ Ó¹Y±pf#Lû¸!¶xãÄz˜6¢®“S,¸À›µTäïŸ~g\E«Š£úE•@^ ?ˆ 'v€«rkfÓ”Ð2’5ß©{I€ö› <ý7‹ðñ#¨$O)ÃÏeµQtˆøh}Xÿޯ߯û±%k›‘¸;€ÏºÝpù[pšþøpí „ÇÃñ„Xª¹}©U%xÃc‡ƒíú|ÝÁö9ϧ ~úà,ì‰â4ÌûÊî9Õ¢¹pJî† ½‹#—ì¸fƒÿD̦­„·<ÜmZ5—šÌ©½`bîý(‡.N fKëj~r•ˆ¬!Ô±œ9¥º%Ä£]¼ßÛïÀãCŸ™VøpO&§¥Âá>ø4zêfR^­*ÞG/uâc$‹mâJTßè HÔÀçJ´„Àž¨‹ê¼aOÈ…–¿àÌÕk…ß =9óïb— ñzœ´Fña—3? ?„ζC(48‘0"ÍÒKù©d—£v²º2ˆ¢ ‚…ôq×{ɼ DžÍr÷ ’ Þ ÿ¨0Oim7fû ø[3ÊfÍÙåÖH]ï²åvpñV{¤:œ«Ä ‘‰i3apœ[l²Ä‚ÓUϪŒùt«Í ø9zö-_æ†Hß—©#«Ÿ½CåU|ù1\ò7Kß5H*ÍIU¢1hñEÚ$“Ã1Cÿ1™ã³ª×¹Î-Õ¥C-Õ£DØzeý˶¡(?Ñ 3˜Ñ’Ý#Îtœ0€èVI?UŸ¥]ÕÍ bˆ-V]ÉÂTßzzG ùÒšJ°)k«O—=R&éß¹Ö7¹ÔJx(ÇS¥áüáÅ«U»–"röè°þcDZ› ÔU‘ß²Ôj™ùüÇWÅqnGÜé0FÜTŸêXò›m uj¹Ì~éŸ×Zkæ$ÅL=hn¼Ñ #™IÙÙ^4èzûØFðÕ&Ø*œNÉ¢‡³vÖº¦ÊØÊîThf–ÕÖ,‹ëe‹ÄÍ[Ûk2Α¸@èÕªú¶­¯’yÏ8¸jª|ŸÛ†·•q½Û˜×œ.¤ü’»>ØH<ÚºÕþ"a@ʹmóGó®×åYÛ nhG®Õ›‡s£xfŠkÄ FT†m±Ìœî³·Õ>· ÓòMªvÁèá7«¶ù na³ñØ2¼ÀE~ ¬¼Dèø‘¸Ô¸‰óAs¥ÈxA©´>us6™EÃ;ˆš:üä=}Î%ïÅ+ü/wœÑ³DN+(žÄÓøW$<2òRJ²ý‚N’: àS†ó pçõ´„ Ó–3miTL(ò/«.Ü0•”O,¤UK¨=}Œ—rœ>sBºy)9æ–?úmQZlÞv8HŽ*b§~„-÷˧ðÑp<YE0ƒ¸Î “ÒöÔy“-&LwÁ®iÏ@cä‚jU§2”ucpA¯þÛ:¤–”7;êaŠw~Qü²0Wp52f¡|ö˜57¬Ë5ÌPº·KÙÆZ—‹‘èÀv¼XŠÌ[ŧp—(-ÇeN"pØ ›O{Ó4œÁ*{‹d&š ð’èÔ‚Úš›œB$œ@÷Qó•µö'ê.›‡ù·ˆ“D…÷½gÑæùX\Ρüv ‹]·ŒY`S:KjS ÇöV.{Åu{g#í¥û%àí³ŠSå ‹¢ì‘õ©):‰ÅAÖj€¸^¿ ËÈZŽ.9æ),ÑÈ)µFl G¦æ,x08Ç'A9õ b(x¿ZñKiLÃú v?cÉûô;}K:¶+¬ÍÖÈß•$€?º_ÉW%xXÈPÕjHº­Q@%¤±È…nS¨Eç§x~Ù<Â)ÕŸzº“˜½Óß’À¬»s‘I0Äaüó0¹f™“` ld•zƒw]òNÅÛJ5Ûa%‘ÎþÈ'¿yõ€ø—8ü9ˆzŵK½<¾BÎÇ|x5Ê4­RÖÍp ͽ«¬.gÎ9Gî7jsÛVZá´ï²Ÿsæ®§a©]1µ ÐN¾Òê¶Ps)îÇ}d¶S˜c„kJ vêjr7ìÓE.ø¬¥DН½³Z-®èMW€uD–óíy3Æ{æe$PEšŸ.Lðñ)v8²áçÕÚ‰pçFâĦ¦{žµeû‹Ï¼A&!¼íž.sµô ¸ÀÄÛrȇq:/š¥É&b ß嬵R_é’#Íö&ÔüaI¤»_K…'È/¬Ç Âb.:ºêoVéZjñUýHˆ¶— þï$#s¾‘bFÓ£Ä˶ï*-|ûI-°XKÅ—~9?aS¥mÜæ+"Ãrâõo±žV6lðZŸŸï+Âoc-x'ö(HMPŸâê²ÉõÇ5>-4Î|f„û‡ÃA¢S_VD@‚L³^Ê_ÕuÅEòŸ’“ÕO˜t¾˜tçƒÌ»0ãAh|áN›Ÿ Ò'±±©”î›L=¤!vHïã@,ùJTefX5í Ãþz|ê#Aø™2 íŽK¢ÿœÆº nXŸ4Ü Gñ*ÝS:ùáွ®1™oõ6qÔ÷€à®N ‘©·ú½…Ÿ!$SNÖ¡ÙÁ"Içâ~­e¶#‰“Ëd»ÖçøÑŸ[YØ£`Æ2ºêq¶Ã0¤þÄt„^ÏŽðQ‘ƒ9דÍe¤'¼#M§y?É;X˜(Ô”ú_ ÿ(gaäÉY_òëxg9Áy1XhnÿD{ÜŽe¥.9í–ûCfáßËÌÃa$6DÆŸâ¸÷máÂíU@¹~%¬1ªN<€Ã²Øj3Æq…̾ÍÈ3ļzk–Ë¥sªö)4&î³h²ŸÄNGzÚ|„=œrÿeThµÈ’ö$ #þšŠZgÃîÙ$ŒhrOàfb¥4¼A#×7§ß«yðöC Cë€5ÆP¯©€`Ïʈ|ÕbW¸üHôDºq?•ž'ìb|ö'L!›dx;Ñ+éNÎ[³áîì¢ù3“ö7îq¡Ìƒ¦LNyV¸¨ÊÓLl¯X’gÑž=;Úß.™Ä mš]´íµ‡©Â£ÅKf˜ÑÜç÷®"ÌiL¸2bíY;éý>þ·sÙÂD—KN6Ù‰¨ TVò)E Žw?³¢haßt¬ÏÌÖÈ5»PÂÒ%Â÷@ê¡ßA;bX”I€»ù¨m…_/®‰Ê 1ð„CjŒn£RË Ý0LÔó÷0ªú~´Ö:çKq¼¥J&%.vCcÜW2ìwpw©¦……Í<í®Ö ÁPƒwMý °lUHcv„ñâS—WëÃ)ÖßÝžÇçüôã2îo $G’Rñ£.ùƒKdÄqŒÃ’ lé;s ÷#rÓJ{M;D[‚+uje”H@ï¥Ê’´};¢.*!]ùQˆŽiF*ÕU4éÚ¤qâp"PmÛø`·x*ExçåX‡7¡Ú…(3´‚ˆ3(}\ÿû/§Š1ÿü¤1G®„;vß|!²d[)á‰g%|@&¿ªÏŠ[À?V鎹È;¡_å¡YTöÏ=‰0Ì·/È’d»».šÝ½jía›vÀF!7Zìñr-½Rº[rª½Ç„éàf.´ïl}<,Îjö›ÝM}LÕ¦Nõ}Ã1Ù˜\–½Qј²àÂ:ûù·ã¯½ûhý`èk°ÔèXgDø:(¼é]Ãâ±ó˜¿®ù>-#_é\F‚X0DÛ"rê~x:@wòÏÇÞ˾59ÅYÔO4"ô­Š†“ª5/Ðøq¾ªh;ŠŠr™½¾ÅùÛ]®ØØËiÙïŸQPâx¦M­Z¹ÄQÄèk||äÞ”R„)äÁL6`q>ç­üòyïE>3Ñ£” Ž*Uç0‚bz3ïþ c€á’’öÛbœu¦óÔAš>¦o•Ë<¯½·½ï.Ê_*wYûÛa¼—]Vb$‰L«ì ѱtÁýòW§_»øíÏËBY T „à{f•šz>æ¿]B¶‚õÎÈ%ãûÚ‘BDwQ Y'¾Œs‰ºËUðyŠÕSuHtøô¤³ûÍj¯J*í¦•»Œà4²Âñ§%Ò~®pvCõ˜ú“)—»ÞZr}Ogù¢Vð¤?)…êlØÅ,³$”i5±yŽfð‡« áUVàkX…>¶¾Wß)¯ºOB7t²þ9øÓÃ:OKŨÞIèÇrI²ÂÆâÉsB§8](n¢_ÝW÷œŒB¤§ ˜Ÿš‚hJIèá¾ ð§ÂëEÍR]d]‡s;åÕ¿©%+¿gý±®[s2Î5âòΆÿ+r¬Þ‚éXG®Œy˜±«ÿaŒë]Ú-÷ ·zIÅÍ73ôŠ( ÊÒùyR`kÅ^­¥/ë¥8¨{zm{¿D×-ݹ#[ +e ÀW+§3§þÙ²g! í½Ê6Á{9øfÁšÛ;Šõ^'ÏàâgChU“åúvÈ«Gz@ç ªo£Þº~G®Ç&Çó=’CG Ñcñ«'¿ýf,hýJKE±8¼zJ¤â&£mæŸÀ•Œ_iJŒl +Á{Ì{Ã, !.Í ­k­SNÚ¡|û%¬°´ýƒóù7ò@—qðóÑF3á¸A¾)o•Ç÷ôxárìPǯ^t*·"|¶[+©šŒzç}¾·g«¡ƒ« ZJtÑŠ„’šÖ‚ø®é\ÖµÞÕbt9³0®åuìÑ ®@ÃÆlvgEíö8À¶çRûrýB±»ù¬ûõJ!ï,†(:ÿÕY•ÍHî_ã …ë•UXaÅs‘;¾²Çó¶¸6‚¹eМ´mS iºòÛÐg¿ý¶üÅ_æjÕœ“VC?>wcúøäe'Dûâµ,]MÓñÐÐXù€ã_VN…ÝŽØ–DΆQ……<ûwâ`šô¿¡ž÷Ó M팓÷&²¸Je†î$›"ÕÑD®aö(uÅ.s\$ˆÕ∳Èáu¹Âd)ÑJû^B6'Œ>èç 4Hƒ¼X ÜŒ~U;?eìx›d)wÔ_¹8ŒËJn’µ¹ãÖ”Ç}H ]„Rá¼C9yeÆÌ90ÉRÑpÑ\”“˜Ì¬U·Ê°ål/jÒ¼ˆŽ(Ûr[˜E$É)½ÈDö¥ m¸ X©M¼Êi(³>Y»0±1ßl×pœšÓ»RgŸJq±¨¥•B¤“Ñ+Ÿ§àZÝ©k"¿¾뺡GS(ž¾CuCNåõ¸—–U¥ò>,™)E‡‚ÞE.W³Ÿv.—ÅT„¢ècUú8¸b[”ÍP¸‹—}?ÈØŽ • 6 b‹zøzä¥(]ͨ,¸O„;mX-®¶«õSmZ&”dð®ÇÆ}dêlÇablýXô¿øæáS—QEªíšDåàëłᇺ=É¢¬`%ua]ÛòmªcqÕ S2…dbðü)ó7Í€ì‹"¤Ìœð†¾¢w;eêy…ßEËÔ-UCèŠäûyð9+[¿µTsÕë,“w± ŠPòCy€0"c „¥y¬jyZŽvQ»‡ç]Wr/êqç‹¿Aká+ŠUéªSÃÖú±90ÐÃ(:t! óÐàt¥ƒ|™O“Mƒ¸'µ ) 40+äEÃ39@µj E‡d޼ֹõïp(¼ÿhæÎMw=”á®–x¸jçDFŸwšïÎ 0øË>ÀùÀ3¤³ã[–RÞ©ÇL™¼H¥TíöíÊMÂ0wÑ·eº2\ºd!“ê{“C8ßÀó¤ô¼Aˆ1Í´L&ޝJٜ²Vò ª@P,Š”ÍÿºÒµªWNM=†:Š¡ÄIw°U»X•ºESÖÊ!Ö¤ßó÷Aò%ìÞhÛ-ÈaÚÕ3dŒÄ|ú¡h«ÙnJÞ÷"úÚÞy)~XÕ§˜'LJdå1߆j?/ኼÉRޱ°ÉäšåѪy1¾ÕËÚF¨Yë+î×ÄÙ¢ºGâä%ëÓºÏÀyq›ð ¾³…’¿—oÆ·÷ºÔUç:Mò¨û†~,¾ùéêbUGm{Ê톞hŠL_:¸Ü× â$Ͳ\°;(ò–h¼BLEψväd³3ÂÕ U Ä»ùþȘñÉ<ñ>tÜX†ÜÅßtB¯uÔ§})D˜®‹}-ñÚ3óú‹¢ Âèz|y)7Ü"¢ºÄ…üQÉë~|¡m}¯Öb2Ž¿‰oÕ¸ áÈÊÇ=R„´„†eÈm¿4êמ‡EæzWðøÚ ÍDÚшŽOÍȼU7ÿ8Lfö¶ô UœrÍýè+™ÛãwËÓΟ:h¾k `\Ÿã×õ©/pTì[)‰»Uñ_–•¸Ôí¨­f=Ó“[§<¤}N †áŠŸ÷‚.Kçj­ð¶ª˜nÒÞ> Ä¡ ,ÏÙ’v·ÜàŒñ¸rC´ËM2mïßÊPNfðûkè^“oÖ=T¶M©AYFd›xžœê‡öéü1‰býð9c÷–h.»!¥¾wÍÔÉ=¬Ë4>Pß•<\qË›‚ÖáÑÈ3“…þ»Ý^3¿0Ûàñiñ´Î$°•æ÷R³­Vëö@FW&^ü~jÀÞØe£<^–ÈD\ë³Ï·x*¥Õóâc2ás®ÄU1Ê_G{Tú´ˆ~K%×,Ó1Mâ¥.]%õ¬/¯ñöû¦ê´ú垆AA/µ†„¦Þº Á´ ¥F¶ »óK…øï‚ “àHZß±Z8ö¸hÔÎwýåÛï¤em| ^òoiR÷[ãê2…yƒrßÄÖB#ÅÆuáRðÃæJXO4†±ÆðØÄºÕþ¾KßçŽCÔå=ØÑï¦K ½˜xéðÑÙ~Ð këL\âª{–¹Oá_¡ðEèàñ¹ÔS›hŽÞ]ŠÉ¨ªˆˆ^¾Z›xã,ö×.$äXl”&B§xw#ŠîœŸ:@Š—ÒY68^¾ ØÚ(«{ï;f\ß÷*?¦DãÉÉy êaWY¡+`Rè'´¦“.ž«ÒÚŨKÓ+þóUô <Õu ®zŽ$?8UÚÿÎ'eÁ,М‰Ï"{"¶–°ú¢‰›¤ÏAæ–Mµ¿™.I¯S˜°ÎS‚S™å‡ê?õ˜Ô߯åõ‚RU±k÷FO‹B†¼<äg¼«Wü–6‘Sš|üUçµû{ØÛÆp}Æ,ðyaôAi­)c«t¾d V}HÇ«vLwÀ5òû(-ôÆÚ©y}}Þð!±+¦ÌíÍé—’)"ò+9ß—Û¼Ù¶§uT|çäA¸'Tj/wï`ããæ±‚º÷‰Œ<$æñÑñ*èu;b(ö·«áb/"Éñðž|ju'+ïÌæ“›\OLQ9â—õo,ȨÏì3BÊdtÄwÓßž’èîiÉí‰n£œ9P´Wd«<'7øõ)íÜH¶Üÿ_þ/ÐÐŒôÜ•‘®Ê¿”Y¼¡Vë’@Â:õàÛu3ì Ùò ÈéCy¢ÒÛ˜ Øêî#+-UœÏĉ̿ÌLÁ¦—¤oJýnžüyÛZcr“è>^ä+Ü• ’ído6‚R@t°„Üm:u®¾£?¿äR&-Z’ûœ¸Gý°qõC+¤ŒLÈöQ® Š–G~ ([úÁíQ8gµêà#oŸéßžÙ4Œõ˜"6?óº‡^se=d–[XhZŠèÊ¢yÇð —‚†±=ý„PÿðÔHžßn+©¬:¨óíƒÇ«~óǞϿS#0혩0W®€8w3íBa·§µÄ¹725—=)Â$hV×AnKJÓJJ”Qfûnr5¯ä9ÓdòÍÏ ™8Ú$c­dãÿÿVnUÜ“ bŒ6¿¦z T´*k« qÖÏÒ.Ÿg Ò'T0ýù—¹Ø3m@¦4BPð/Є¿ÂÑûÄË5k[u`Šdä'¦sÏÿ×…'¼šCß’ŸÊÇG δ6t7fã–‘qöÛлÐþU˜´•J¹y—åCãðºñÓ“ÃűH5ÈЊ d„õ–R>H_žvïæ¨6Y8–1z€õƒ;Ñú|ï3všyÓA¤ÓLåEÛ»|{¤èG^Â+xaVï»Ó—ûªHúàÓl2‹ä^{(êCœUŒÏ/ˆîµÕ<íɎ憴¤¨‚;‚dc…9©ù·úúq†Å®3ç>Á­4ߨ'Ö‘1 šÜÿä»JÍň:ž¡YD9Ì¢?›Ir¨•$F?íèŶçšâÓþI± y³ÇcÎÿþ—/ñSñÊ/<ŽSÕǪ ¹U~·IeþuºÇüzhÛä4HvTQÇiïl Ûü¬l ùfSètáxn©Ñ7´,5Ã]o¬µÛbUëÏBˆÌ´ç=ÆáL`uël‰ìÚ Ü‘Ó´ÖÉ»jœêxÜ’‡=̘nã.? ì1G¬Ë…JtÞµÆF1†yÕÕË' …º/Í&ÅM.EÒ$Öê4ÐŒOí: %“1ýPÇ«2ö®gŠ•µx¬E¢44ƒ§È•‡(¾Í7Aó%åba@³iÕ”þ K\¿©1f¼GŸ²½žœÃ÷üõÌë½}ó•šûŽP…„º Q äo $LrO ßã!ªw­–' (Ù «ÓAÝ´+zGÞßÁ"¶÷^%VÐÇfW­RÝQcÀ÷Þ°Ewñ|J?â²Î ÏÛ+ã8@”ïins4|Ã9óÒZØÂ!¥±Avžezé8ƒŠTTÏ÷§Ý¹2PiŠ®Ñö(¾-gÕË ˆrAÔ‚œá:cM¹d•áÉIÙNÞèfŽìý§“+>¥jò¸*cÄøê5ÇcB©§ tlJ`¸Lý 6ƒV Édå.ˆ-Z±|ë%¨Ó†»'Z¦ÖÕmº™èŽ´½‘Q8þ±O^æÎôÆÞ1ô( #ÃÝ&ŠAÙ>ã,³Ìê4-és¹×¹fv=èw.ˆè^q+¬ö‹'ãÃèSâþ q—‹Ô aäj<<%ÐÇÜ\­v·&§í°Ú˜ClA°§”£©UJÙù¦|3]¢ÜyÈ'²Ä±J”Pë Ô]Ct0iðzMi¹0òéøš¨•ìM£Ô¾ÿš;аqpO¸q¼Kç+•#—ÁŒä;úÞ´™Ç±üTõºÙw¢;#vË„^´ežµýù­ ?Fe× D¯ ²vÃZ½p­Gt¿œ±C½H´WPìòId¤¤²-æëª\#û^ã‘vÃ.º«¨=«ž#>’Mšk¹¹Nù z:·]”¼=)ÒÕO™¶û¹¹´.ɽQƒL¢ }˜§©A¿²ïî^'¬ÌÌ%þ c&Çì ØþÝl»#_Ω@Óš fÉ&»l¿ÚQ!ˆ¶ÎƳ²iO,étàÈ8Ÿ Pè?\¸¦Ìa`ŽÑìNv+`1ÌWü»¨rYËù,{[³»¿o9†“è´à€D!FäÄvž™Y*U4(n¯´*tìqùy¾e–³` ¤q‰€7Ä=~*¯óˆ~¸9÷¢©èjZÝŽ‚ g¢S0t0•l´;–eðF|RíF|®I4]½3KÝšõã–HŒñ÷ ›j&1@s^Ùw Bëˆr¾[ÁFizM°Š9 ú’”¶ÉsâkIÒÞvÜò¬ËþÝM ñ°(ví¾ŽúÀÒáˬBìÉŽ•;üÃW3>(³Å=2D8›2.óJ%Úxq{{ñ¦Ké+Jð šDèÙ'®8&/OEú‡FOì¯,ˆÿÈ|„n”㞈=›yÓs1®;ì‹¢1Þ-P'ÛFf¨[Æ‘øÀ–M¸Õ.E4ÅfñÉä5c™´›ä;œ÷iì,2%€¯ýA©î+HQ&ãêv\†‘t³Þžâ,àæ„ÝX,zŽFꇼò¸¶Ána)eëÄÀ0AP®ÎhŽû+ú¼Ij‘íz]ÉzxþÆe P\x;¥XZRdÉdU˜Y w“q; n}¨”g势]߹ؑ»ê]ˆ|ø‚,¹KB^6þWE1«éô¾á~èÚgÙ´Û·¨ò9²ünî墥¯¦×’œÄÕ‹)ï?¤+ýÞ b€Ä¢cÎ8&Ê@ ô­{>ëïþÀÁa4·.Ïlü*N±ý×´Ÿ£iGiUCAå©„üJT6àˆ–È”'x1O*NhüÒб/Cdz«=ë¼("q\ÔfRÈ®Å0…4´q“´Ònct?äºJÐxTt¦7å®p/õYÅ1ȸ ‰!Qêì’XÕô#Ô€ÕL½dÙÞp ·÷™svþONïwó#ˆ\å(:…å̽˜ëu°’ð¥%üô3Bð–UðÔ © T'VÍŽYžùÕlÏñŠß1c¬V4³@h˜ŠqÉq£nZU‰¸*n'¸°!!Æ] T[xwåí` wÉ•ÍÍ×,rnÂ>ᘢ«ª¬k;E8CJ†°‰6Ct¶}ÌuÞ  ò,®@™Ü7=iC×£3KÛüã­Ër©³¿GŒÀGÏ/>¹j¨¶ UlRóÈ;©zƒoîžöÆ‚t¶õð$Ï~ˆö/ØNÅøœ/˜Ž&Zà•æÔŽ.i“ëûo´ Wozÿ±=lû½‰ÂØt}<…´û^‘‚o–ÄTn²”v³áC°kƒÓ)›«ácP÷ãN«!:÷ˆLê•y„Ã3à·ÁÕê«?ðˆ°Ü†Á¨ü]„ò«éÒ `2hêÏX1Å T‚ƒµä¾îd°,ÍÿFøÊ–01›pÁý‡l}iö°DË_Èú2TdåA2ÙÛ!¤¢c-Ü ò~y/öÔØÊ¼-*fʃÑý…¶*B``sÊW†Š:AFɱÕÍþ` ½ãDøê^b©±ñ§W ¥Gz‘t–¢3Ëñ1¤‰•Ÿ2ù)®’þSxû¡KçTAd /v™|­‹ïë²8Ö6ÄjrËk'næ²4ë‰ìs6å ¯½Qè*áª_΋éiô@.½‡›’`ëIoÁw MŸW×QݼFŒ¢–:âZÓœ´êüÛöüØǨÇÁe¡Hù^öaï'Åôˆ ö sÑP"×OØŸuµÛ¥ß¨žPÆC:ëàRTâ;,ä1!2T"Æ"æ°‡ž+µç\•až><‘Jªj \S—ôÅskd‘ÞN0„fŽé™O²¼™ ж‚§ø›ËÊÒϤ‡°æüíeÝz%t³¦6])i¯Ÿ–'¦’Mea"$UÍ¥[ZÏûc€Âà¿ÈUÕ¶qäQ”˺¿å¿1ê14Ä{y—ÇMy" |Œ{Gá3ü:éZg‹‰ZçBÏB™i¬=Br{mxx‹9ÄÜ}F%wM……3ö¹­!Á–sÔŠ¶,fñ+Œóþ9Ìq€—Àq*‰ÁŠý^"_›M˽Ò!a†-LyÀ}' :¶ÿ9ãZÊåÁ!"%Øi/áÂ=gÿ¬« µÆ/h=´¥ \ ®%kf_’Ãm/‘šümõöÛWÛQ¥VÏÿ¬’¸QPd—oj86Ô¦–x¿{1ÞâvMñƒ“ÇVVÃp¡ôÿ‰<¡âa@ͬ´[’{Lle8›*jZAáìÿ>q]Èäowruä¡SuNtŒšTÁ—T õÓÔS®ž*ûe˛ه„oL ¢´*·’Ïßrw½H‰W5[moÒ[/½¾>xg7d×ζˆ¯ÛÜ¥xæ9^±5Ç£VúI¿‹7à3Kñ­nÍùËïZïß-°Wr?yÊV’žg™KqXɹ|²¹‘ù1V7‚/HûŠ1íìrpFíŽçJgOñ)þåyk§”žòŠ‹å§7VÀÿ+U¾"ÆIdpaìÓ>ÈŠ%ÂùÌ8á ‹¡;"Uvh¿R ˆ‚˜5„â!0&¸W³û™ ÍkÁ´’øùC’Xq×[ŸûAÆN{Áç÷£»  ¢Ó)–‡…Dæ¿«èjàdº¥†¢•FÅú}”ëSÐt˜ræb¤ëÃüð=­)B4ÐÔ» èØ<#¼DóÈc*Ö¼îžÓ%WuÚ;ñ­Éçf;pÝöçW ’Ôßàefeið³—༽•Ëè#X¥‹o Yî•k£¶ tökp¡qÍ:`-°G,ü‰­Uyàk¢“û=е;©ÕÏ_z`ezþ5ì9x™nQ)Qžìo[@hcIõ¦"qΠëÕ…ŸÌGñT­‡ýÛÈ•£®w†‹|åú1–ÜyhCpÄ ¯éĤúû ˆŽÂo¬Ãº¼ÕÔ‡·¿ôÊ_ÐÝâ)°_ùÛmÙ§çŽ÷vyã> á wô(æAü>Iõ©‰þàEàU‰h1ƒéÂõA(ñ¡ÚPYD]}¹lGß'=…Î{TcZÐu? W¶ûí¡¯g»,uö Y/$²ñ¼fõÜ’­û¾tœßðs?K‹¨“ 1,v,»¤ Õ´‚a’~Eˆô¬·K+Ä éÃ167&¦mþ/sň0è˜ç3É9ÀjõqQÃâJ óñ¡%×D³|`sM²ºA”ÀÙÏhäšÛ],„¨ ïÔtw´ßš„*Ì3UCÖþÎMöNÃI̼†`=6$KŽ(%Æ W.¯÷5Т…‰Ñn}ð°HH¿.¯z#úݦ©ú<ýDnZYç]³ZÇþu¦šî(·²¤5êvÿÝ{³O¤ž È \Á¡a'»0\î8rÈ ¾Âqkáóáãj:Bšÿ®az³Í:Ò ífÍCÙîR"åÕ⹯ç³®µ±¢ôÍdtY"8í¿¨ßÛuMMi ט;$˜ƒ^Œ#ê0ò7Saè¿rµÐ3.1&é£{xnƒÇé \pù¥!nâ­“r`ÐpýÞQ> Ð&‹ŠnwÚÍ2´ž“ÐÝ?rµ¥Ó ñ•ƒÐ|Ñ¥_Ÿ:PXiH&q 6RL›wé¾öš¾®TTp)Îô8ƒ—«>³œ(’…‚ µï³+‘s¼Ä,)’ºÛbí\ÜX•ü%>ס¼WÕ¥äÍ5™bå9R’Dè´‘,…C31`ÇT§ã\í%¾ò›5Ž«ŒœD¯ä £‡ÒU«x\›Æ‡¾ÏúoÅcîMA9%ÔUzÓp0pœß7ÙY^ ª¬´GÐø\Ñi-—Èb\);ÙŽ0¥¬wQ³Æáwà9ÆÆ'kÚ¹‘ † •²Aù´¨YìÅ+ÂÚ#¶\GÌþ½½ß $®¸O(—/º‡Ðì®·Üùä–ABáåusT¾ƒÕ. ¥c5SOlMlTeõ¤aPŸJ\R§CÒ`Z˜‰õzt‹(>p <"»UÆdK¶ŽKŒ óõÚ…és2@çÿ»Ç®åxÉ q 0›sÙ[‹Â´Á|aÈí‚ZÀ•òXÕÐ僰^×…‡`­_µÍ>IH¬oSb•Ò±ËlNÙ (%¦Ì qSåý5íKnõ™+ç¬u´0f—9çð¥ÉkJ¯Ô€Ô»‰¥›Jþ–qšM41Õ”†6nJ¢•{b·ÇEÔþ£Îé€)6à|y¼N€Û*)/èrlñê-¤R'·ôÐÛ*áîål&ý¯ÐÖø7Ñ“«mSi¼¬”‘W]­r™:.Vpœø&&*e_ À:¥^.†âgžµÅ<ÃBmÓÁÞ©î¡*<ºÔ¦§ÿhã>;Ò%X³‰ î&M“•³6|+õ"³ãøØc™î6Ú1àaD8¤á2›F&ÒEôöIj$\§F“ðÓ´«„°‰hSËuZZFn#Å5Ó]kN®K}¦ziðœ”î¹´}™ýG…@Ídñ¾™Vòl@XÖ¤à7®É -ô‹Îû Žu©œ€ðÅü ß[—¿@q~©š†©xŠLºÚ®µXk|’L ”0Ý0/Ë)D÷®qˆ­sJ/cªGä‹Û@rkÔ7]˜Y6Å{?û@³qQ4žk+xñ¥˜Î=]yÒ¦æl’ kаwýÀsUvÖlÄuÉß©˜“u©¦XÒ‰ºæñ*…[¥N–ï7U…FôåW5Õx¸Wدö¶M¿áA$f©„>â=D_:,0"·ã³Ñ³àÖúÊú¹¹ïƒÇóÂЕ­¢H¼%ÜÍH¿ÊÞtüûÙJÅ “5†À·F³'Îü@/të:ä0ƒM9ºì䄸ˆZ‡õ¹ñø½$-Mí;-‘HÿÀ>(Ö*n17h9µt<“”l‹ $1¬É’8%Kç{)²C$‡«æ/ç¶NÄ…!U’Y7¦÷ÐW4ÇxÎRÖÄB_ eÐË…); ÚóW 2*¼þo=„ƒç+V¨4à' @Y¿üVWcå:®SS’.ÈÇÍN\Å—!Ó 5øX¾ZÔµóm9Ûj•PœÂäóK ÏLüƒ)Ã*•hD-FËøÏ¾¸Â…«M7sôüI îäòÿ2+È]ÔMˆ?ÛÍi¬eE‡—¤¾æjã0õÀ óoy)q" .ÀbrbFA  ÝÂ}§m(^ª%c~ç3A˜²êõ7ï§(À$Âf¢RØÚ"üu’Àµ½N®SÉ ¬•sö˜ ”8¸Œ¯. ÊU{“&‚zÝD ›¹ Sî&èݒ׫<<¨ïËò²9¸%?,èž³®B³· ¨\“¼¨$4ǽӎRçi†»"£g ŸJü¿eªbªÄi_K·|£¦'žPG¦%ɸì³råÿ\šA¥CØm_m¤nÒí¢øÿµS Ð"^ÜÉÞÃD¨PÌò£€ÏUé‹—gŽëgQžÿ‡LÕÏÀŽ´7ì¿®¶;Ÿ:ÈÆg]„÷µ¦& –_íAjH¢\¿öâ÷k d{}•0kk:ê÷j¼œ¯R³ßËÍ<ñ<Žœ{7ˆà•‘ÅøŸÅŠ¢Û%™`u¹•jò‘(À”CQ°4´Úç´~Wj¥¾Ï! ²ùU7æKðb„æi]øqZõ!„S¨H|æ‹iÝÂ7 ~)§¿ïôWÝ…vTØÂ‡ ÜQB!H׿^|]gׇy‘\¤±87ºùqPG*22 ‘×ä‹›¶ŽÎcL”ý<Ø”ûõs£lMÖ: np»§¯¼à§…%½š«›N)¥Kuà[8 ;RŽÔÁg…wS"” ô†›Øc`d¿æä ÷&x°•…]ï&Uq×4¸›Baþ *‚”Híír lNÎèñâ¹¾LÒ9©…f¥aöòŠøMô’ksšZ ƒ4CÍu奋T/ïcû#2*Xö&¥Gø<"x…~Sê;l¬åêÐCÖ§°@•˜8°J}GänîuñP'ÏË΋RdmŽ—_álŠhïðÅ~Ëk„–/Ñ´ÕGî¾ËL!˜C aA CžÙ‘%ÉåûÚЀòíi=d‚É{¬™UCU³¹XÿŸ¾OÔ.¹þqµ»¸mÞ‡ì¹6šñˆHÒ9#úÆ8åX·¬øb#+Jàç«`ô›œËK½Ô69¯ÎZØî™º…«-"Uþ|ጳ߯»È¤ëȾßšüâØpuuúY†²•‹b{D¦Ÿ-×÷‰ÔIë8ÑUØqtúP˜"W6-ÒjQ 1²i]dÌsĨtª¨÷£‹põÿ‘7•/!z—»(L™«ê^ª­œ¯zÇâp¬£¦ºE“±ÙùF-¥xìs´mÎÏÔ»8Œí•X¨hgüàá+Zvc‚¦[Á-9X‰—ÖÇrÅ\¥wLß}]]”€9Ÿöɫ㗷‹9FZ0b ³2’"ÊÒc8 ÚaWCÃ{ªˆ×&—‘À¶ÆZæÀ¹y*ò:©t<à¥v¼û”}ÔÝdX«ÄÎk xª,>]Nã\ŸMéIô’ýE:„G³µì\œÀ‘v.gtüºDZ ]…»™Ù+•yÕ¼a¹`$ú$qû­Q7ûmÒ[a¬V†U¾"ÚŽô½\íÞà;ß þÙ"¼nVF L ··óVõ†ÿq!y˜±nàîÆ¢ÝA†Ôàäv½k=«à;Ϲ²z?m™Ä&2ÔvCl÷{\È‚³è âú¼ùRéN\õï~Æt T)ŸÖ®õ«óψ¤­uSÜv0¥¯qª!ÞÝMïdïvJz*‡’Y-&>3A!3x|½XÅÙĺՒŸ¯AúzPÄüë€pfju§•Îs£Ö>2µ8¾)×e£§lº*VYGÎÀ:£—F§Ï ¼€™]”±ÿÂA5´eMÍ„¾6I‘³yÛ‰ ËÁîo¹Jp<ñ.`¹Ù¹§š¥Ë¬=k_k>/kí¸¡>š®¹FÍ–S¨z!á#`¯®9r¨ìQUvtÏêôvXŠ”xL¨L‘·¯QŒõ·}àè*š© )ŸÒdJZ#¾Më3>¥¯¯$39ág–Ì/Šúû$Ðíð7q˜û­Ô£B îdë rµp]¸ ×g¾lìÊEŒ=®rU´eZí9?ÜhyúMüô’àïU$x TA¦Rí0»öTìxæì`ùǹºA1“¶7KÔ`ôÜÍ› =Ž&_&éÖšÓ}\èžúËT%ò® ¯Ø¬dZœür¸%ó\³®ð.qñrÍÌ…"v$ðRiN»}×—ÐG²°®íHÔêK/·ùÙf2´„ûà#¾Òc)šä4j7•ü œT¥ñXš®¾,ƒ‚ôšðÜ.ÂR[üßÒ›½3çõ•„'½f…ÀÛ¶:²bK. ¼¡ò­œƒKµ.?t2Aª‚Ò!Íhµ–DšDA2p"ªÒ_Ó÷ȆÜ bª¤%4Q4ëDtNœ¢¤ò)6œª¯è T†ŠÆbSâŽiOì6ƒ€M}(ÁbÐï#å„‹×?Š *+’ÉWÔ‚˱¡ î§öt|êó3žY/m€ì…¬Jý&RcðÇÀ©LBW w@½P`÷o&STœÃÔ€†ž²"­ÔIl¶ÁÀ¨_‰lw¡MƒU0cãh]M‰T óȄ갗¦Ÿ÷XökGʈcPeä™G÷K›8ö|Áê¸ãS;žÑÐMÐ¥úê|–Ê[¹Yûçùói£Çy/íüXdõvÓ‰à8:%G£IZƒÒÆ(íC-Ð!ýkŽ·þ›¹MŸ+ÙfMŸÑœø¦­k=MÇx]”2Ö"‚Q¦@¿¸tç’é GŽÅt¡­hpéç±"1YY±>ÀÐÇòëîÕ¨æÇÌ™ ±b³ëtÑäæ3‰Ñ>­ea¼5/oâXë r Uæ“a Ê“¸_pìÈ€óê‚Y !´Óç `FŽîL´µF"œÁ©á#äǛŮ©6Mƒ€¹EŒ€ÛB…¹»Áìêg;㘊2‚©22v‹8Ý”ï«UZ!0kaü,übã¹Òe—8Wòûð—©p9õ´ò£†Õ _ƒvÆE’ F6´øJ9o£)5‹®ŒV÷¤í««.DåÖ÷ìÆº¿äyÞDÇýlÅ8aÙ©O>¯ÚÆÆ®öÕ¹À{›~ÇÔaX‚-(¹ùoe櫱[ïâ0ŸÐ´ÖÝÓ­#‡MC¹DHªY¢öÒ4MgA·wH_¥ÂuÏùÑ`•®{ò !”~ç@úVƒD@äºó#CDc&Æ…AÙÊ!VÒAj¼˜.©Óçf}àY¦,ìÎoìÑ£Z¿¢,CÔSûë5”NZ.¨m4¿*É]3¯<þÒê»ôAÖœÁ|wôcÄóð]6òÏ!àG¼'à¿›>é‰éíClj|Dâ¤]Ü ¯žŒü`šQðQ›A¨âN ÖÙ?ùk¼5‘R7ÆMI>ATŒXMè¾ßÞ¿yù¡ÛjW$ ­²©úܲ~¤N‘c<ï<ØÉ}K¡ÊÉÀ–¿ÿ§‰•¯Sì#!_•i×*E‹^¿yzÕNO~M þ÷Ró›ÅÌ–™¸Yš\ñ0&T“­@‚ôï·Im;1hdíÊKûˆ)hÊÈå¦>X1=™N@¶Vç1Ûà L!Á”ýjùÒŒHQ–žõíþ¼’ESO~/ÅÄ.)û±‚›s© vñaE?\¨ l¶ïçóÿ¾F0|ÉïååÏQÁð§Á£åŒ…I@e-›9Úo`bÀP‘ 9k7ɵkO÷q¬ÅÍž¤î¤–YékºûZ^¹Y:>dÊØ—ïœÌ”)Eö8Ó\÷Íbq舱*îý¶fsj2êšÇŠV,/¯¦—U7¯kÉ wÄr«Ñú{ŵ•XÎóâêe˜¬rmVâãžÅïˆé–; lƒñžfŠ|á~§aí‡Å)̬hH\þÓzj¹þ¯& %lˆÝ¶I^LoÎbÏ?1MQâ‰þ†™ÞXðO?D?AñO'-pÄ)Íÿ ½¶ÎýyâîM]Ìà5ŽñSFÝÈiq3#°#Ñݺ ª?¹ [³‹;u^èýxÕÊgùfPè2׃=Ø#QÍü¹vöáMè[󠣞DY­0;£ vÚ‰Æýõ Èï5·Òý:^c,!÷ æLÕ¼À<á°Úš?Äé3ó¥?7Ê"P™YÙ_å(¨èI¦üXÛuñ&{¸_ËVâ&Mï½F3eĤãä-ëõñJw§%”¥G’œ¦r̸Qm½ÖùL<ÖÓtQµÛ›”ûízq;²}Ã+±&~Õ?—…e÷Yâ`ŽO#·õ«œw—¸nÂJ¨2À“,z¿ž/C0þª á\š]ÉãS4¤cq™Tuð‚û ú|¤)ðŸ_˶§.-K9æ¼2¢»5RyÔÍâF†¢m» ]2.ˆ åi¸>ï#ˆ+N'´Ð~^˜%à'0ä×P8˜jsâ§9û†Œ4™>¥nìêAuÙ¹Q³ô@×4[ûZ"[Æ)ä=YbM¨gwÂ0„dcÒ°‰¥‚+¯Ë V̨º)ö‹×ð·;Ò‹Kñ?êByÖÂÖBoÙŸ³¬R‡Ž—®@à[œþyo7ØÛL!2óD!m¾)Åš4 I$¨J³U¯‚ÐÈOA‡%™—->îÉNýï¡åp"À<šÓÕ¾?L¹ iÊÕpûƒ?òµc—–í4?’£ J )_i‰‘güÈŸð€‘j—Üþg,û46ÌÈßÃv1!X–r(Æ­Ûyø~·ÜÕ¢û_üg‘UrÌ1^¼ú¶Ó àšb‘}itº‹Ài…Ø”ŸzÙ0öpV0Hƒ×AÜH¢q¤³SÞøñi™ÍVL/½cJï>ãV럊nú…cQæ]%ÒuM6Ø1|Äe(#©ŽZZ*áÕô™²n?N AA? UýÇ õùü%¾I°Å $¾Ü¬p 3±„½l9ŸÚÃé–OáŸ|.rÐ2‰›ï¯³HƒªÕ x( * ¸›îBØŠãÐ{ìw&ô&O9~‡ÕÃtTý¿kܯ8nĨ” ¹À VÖ ¯$@•¤é$Ëÿ«ùèèë†=¦$S\’‡œž?­@kÎJ±3ì$O´Ž‹zDÍK}:Í®Ðñ/¶‚© Výªà4ÛõHtް“Y?nÝK”7>¶ApyHƽøAá±o‹;Q¤.EëR)ëÞšsH´½©a˜C½äѳ„jk¹üB=6ÑoÎÕöT‘_`W驽“-Þf²S…CÚ(ÐbÍC BZ¸:¨”AM@ÐýöYɳêýq„Yái@qq+û÷IY þ80AÓ7 Œµã€ìÚ2ê¿¥s˜ ÃêšÛǩĘ,Ea2n”{.·'àõæž ±c<ÏP2¼§N”¶R˜¼Ã–0z¯ÌÏš…À¥§¬¤ü·hÚâw¸áüŸøItGnÒÏEvü๲)®ÍfNˆX«RÓ¢£ t÷Žˆ˜]•¶óõVÐ Fµø½‰èîgãŸÃ嵯ƗtàV› Ën96’ ®Ì듈>Ÿ™¦÷­;àÚ<#bÝ›>rGê”\dƽTßHu7ÛS@›äf¢ÜkÎŽÃ5˜Hº‹òûúDGážj—)A…Ö<¼ÑcO30sQ+Š,qîy§WŸzÙìò=Èb,ëeËJyÈDœznöýï•U”ÓVLQj vn÷`Ò‹!‚¨Üm,aSžt­®yŠãàûüÆi=ù‘k9g[UqvN?ñ×v)È-9§ß4_ŸÈ@HˆþÓ´jÒÿÞúò ½ô¢Oyctd5È{8T/ ½ÅôDÏž \›‰]«û±QØó·@Ó±³æòpо:Ї㠘k™Ê.x&¨§é-Ÿu‘2ߦ šøäìoR^OP¿œd ï6Né>æKþ ËçÃG‹¶‰ WG¬ ý/F‘˜NÇ'­w¥Gg¸gG® lÜ» áñPJó{ö‡XßÊ0OQ€Ìâ°¥ñ€"ÐóÒÔ'7à’dS2¥z^@S×M·){‚›!©GÕ=gÞ›+c…­“çJ]z~žÂBh—ZÁJõ‹ml ÈšùЉ„ó –úröØ¥6ì8£ô‚”ß°N¿ØW¶…óDntÉ9à¤jþÄ‹k¥ ¢¤›øš xÓ‘B¸®@û*hÚÌI& :jK!Ò]4&=`'¤³î7 à•j.@šƒÂÖ¬ÒPS¢[Œ-Ï!kեФøËÑ>úŒÉ†Ø)ȶ µ"¨¨a~ ŽB§’â9¬Ns*{Ó%Eè8[Ì&©+'AñN(…!–´úŠZA4>¹ëÀK´í( عa endstream endobj 70 0 obj << /Length1 726 /Length2 15985 /Length3 0 /Length 16510 /Filter /FlateDecode >> stream xÚm¹ct¦Í¶.wlÛÖÛv:¶<±mÛIÇvÒaǶítlÛçÝkí½Î·ÏøÆýg⪪9¯šw‰„=ÐEÕÓÁ À`dæ!V‘P•03333²ÂRPˆ:™¹XÙÅŒ\Ìxˆ5ÌL‰Ü,Ä,ÌÌX bQ{O'+ Kbjš‰ÕmL­ì¬œˆÕímíݬL,‰ùÜÜ܄ܜ]\ÿi¤bfFìbiFlnekF,ª¨¤%­ IL-© F,i4s2²%Vr5¶µ2!–³21:›Ñ›Û;Ûþ[!6±šZýWLÎŒÿ èfæäòO`æNövÄòâªÂŠ ªÄâ¢Lª¢ÄF@Sb9©š]œyþA›™¸XýWvôÄ.ÿ‘lþ#ÿGú×Éãß#,@ljeâBllfa„eú/Þ¤æöÄÿ6›º:ü럀œÿ‰˜úiˆMÍÌÿA»ÚÚ*Ù™S‹ÚÛ9¸º˜9ËÛ›š9‰¥]ŒþÉì`FvV¶žÿ¿ÀÿFü. ´ø‡:#3Û¿íVÎVf¦JV.ÿnndûQÿ²k˜ý{väÍL­\íþ݉Ù?¬ü3¯¦ö@[Ïÿ÷Ÿdþ5*“šˆ–ŒŠ:ÝÊà_nq ‰½©ЂXÅåFœLÿcø—[ÉÈêß5DÌü»û—ø¿º¼‘‹“•±3ã ó}ÿ#éý_”ˆˆ½‡77;1+ €À`'æfeñý_Ñš¸:9™]þÅú?©üþ¯j23ó03][¶7á ±No «ð/𭄤›6T£[€®Lu_ë X Zš\âÞ©âæ»ÃÌóÿ½Ø‘¾k&5Š7ƒ?š˜Œ!‰Ð[Æ})!«´ð«ÝzS.xmˆÐ¿‚PDZ3Q€¸Ž¼uÉ\_ R¢dËÎ=«•q,ãG‘Ä–·÷A"o'¬.<%iô¨P³´¿àÍöèjg-C ¯Œ_v×ÀÂóƒÿÂ_SàXV:„kÝjmÀŸ‹€º²v4BY0Ån]EñÚd³6eym‡H,­ÊìÊSœ¸ ï= ïó".W#(½n›‚?ÜxMR< .ÏÄ…j¡'“ðl¥ã'Ϋ\i|yúÕK­øGÙZ<ívÆŠ)’°3E ½|ÔËl]©ñôŒ„Šå ¹2Єõ” ˜kL­!Á¿í4$$2¢Ü®—¦UvQTÓÑ ”¢cÀ TªÈ4‹ý¨#™ÉÒÔ×vm DzØl¼I »Jðnn¢ñ§ì0[+–¸÷@Mÿh}‰C’ð"ñ—•[wQDý/)-ƒgˆ9'E?êÙì_7ä3ê d¢–ÅlÓ•î+4øúK*#,ÿ°l&Dqš>ËÂ¥Aãì*I‰žúSLk*¥æybv;øŽB ¢_\DtG‚®–.’´ñµ`½X0Ô6S=ëLÇ0@P_oapE³Á m*”9µR\é|F+Ft^â]l:Yܱ«¤’ËÄâçë'ÿŸ§_'_ÙîIwòC‘c ¢ m¯4²Ô}n ‹»µÂ†ùúÖ쯎¾x°/?ëö©z†ú ñwÁß,e„0.I4º¨ÙÊŸÉä"’( ƒMIø|RÃñá›Ïè¸ ú(ÂCúõyr”@ŒÎ¿/È¥~e£¨Åb1Éœp‘FÈ‹˜>ÿÚƒLËA &`«UjyÖÜ‘›=&êZ7:;à_&®¶³ÖŽQœîà“ΛM஫¡¢VŒ•ë!FÂ?P 0™‘€sÌòU(”î¾¼ç™U/ª±IO—oA»M4‘vÌ/n¢ºëÔ®8Í;PϦQŠÉ3«‘-°º´T" 5ó˜kfßU9¬ ϯ¹«—â:Týà¡©Í©»JìQ©¨~ `{Œš"çÑaûk»•µLØÍ›kç&S„¡º–íóç[àÿîY£F«–½4óœÃGé®õÓ4®h¸-8 ƒ—ÉœeÐʃG<'ˆÎ±|$«¾¯çå²K‘¤¬L±øüF“V/vh~>ÀÚm–C¬ªA!ÞéW&ä}.Ô_ÜW©ºÛ¢ÿ%JWélЂÑJUóv"‰§ë'Ÿûkô&ܲ0ÿÐSÀ»ŸxÊ8¬v³¾¤!™kxº…î["ßj;X» H•@Äym²ùó¯i†~jÝö%à,ŽŸæf˜ ×i²X 1¡3ˆÚâÿÆj/d;†Žr ¸jRüaÍQ¬<û™ì¶r)H5ù›z_¡+ÄÿË?Êâ8J˜‰‡ªq¤!ŽÂ¦ùö—;ʋ—¦Fµ#ëL‚ósêK_?Ђ¶»¨mwÆèûiøõ»Øk,ØúüÍyØ£Þâ/ ’'=S /HMÅ«ñÉÈÃ;S‡Is f1e ‡ZŽX”ëÉUFLáÿu› ^ôÃR+9©6_0áâp}§f ôL˜ Š|ìŽÌWg+ŽU)é‡|é 3ú<^Ïf•}~:}ÆÓ=ÓÐu½çW võ)vç L:]ü5G÷´ ®ç.G¤{Äïßüþ7Éâæ«\âAÅà[ߥ±?9A~ù¨ –㥉‹TvÄ ¶ë¸­£X©Ü Û Ý†ƒ´œÔx¸E—[™\,.´ƒCD#²ÿ‚7Ñõ:µb™â¶Qd.Î\Òç7A\}Ó×ç­A»t•J–ŒPU9°“<¨Z.®jÌÀÒ•±Ö eØ®@)ù°/~¸žÔv¿4^g†ol § '¶âµqÔü‰8ú‚®[- zÔ…­e …<Â2¸•nv9ðžM:Œ¬Dsg|ö%à<àªõØÎø!ãÙ³>quX$)Üð[_ÒÁyôƒÚŸROJæ 鎼J(< ÑäzÎÁê_«„»Iïrþý©F^ý<¨öÈÀDÂêPÊ×¢‚X8Ц$ºß®¸&mP]ÛσxÙÿÒÕjEÂ3³†xÍŒBFšŽ-=n»ÎS=}Ÿ8JàºGHˆ§ªNõZ-½¢g@ñ±K!BH³³ÞBW^…JÆþ}*ÎB5û™¢G0æU»’Íwxš$F$ÿî°˜¶M´OÁ>øˆdå‡wz®ÿò;`EÙ!4é²|@W~Jƒ³HÎÃ!ìºÕnSùSÒíTk ¿"F÷7Þ©&‘«9~ƒÙRFjxš¹rÿHéJ~û/8ø=@IT‰f· ŽÊ«ô"³s’\!–;_ì”M9³(Åþ Ôéo‰€`QÿnâE }®áØŸîÛÚçþ[²‹»ð!ンya>oºoÑòôÌ*œ:y3â"hp{^ê `È46¥$“Džâ£¯p‚& ‘Ma)Fªj³'5~޾@_saŒä9X/Ìøo.žç— ÿÌàé~ò©=ƒç200,}ßÂ4_ýÙÊé¢dƒ ŠmÛ((‡æˆ¥mBɶ½Ú ü©äÒÝèN.[~Aˆaœ… é~§óÌä1…Ëy86Ú§ílºÒ».¥ 7 ?UÈσ˜_·Éã_>ÕnÁFÿðÒ®Ïí "É|Vbñ¼ŒF¸+QâÖ3šv?˜*¡ab\>Çå ŠÕÚ©Ó{NìLlrs$ U?™ì*”Zâžêf7¹ÛþºÜ~¿bÂ9èvWE"áÈÞ±â ÁW…?Néù ½C;[¹¸(—&î3ÿÒˆæÕÉUÈü;nçÖJ'×êÙ&^uB¸ùQÿ¤ŒŠ›IröË0o®¾=‰›j]dh‚ŽzH“G¾ímìˆÊÌhãHÃÓhò¼;ý¦_€ë³Ãhp--à—ð_Î!oy=FÝ <¸\_”̳®-wúÛ4ÜÔ=8Æá´‰í$Ie7^ÐP+ôfôøØPŸý¿à£·@<]m° ÇñOÅ`Ö.ÕCµù?FiÉBïKhI©ú©‡Œýà,0òS‹€êƒ? ¦ÓžY¨zÖx`’<2,憡`.çrSQæzqãliôó'T rŠu€‘ùÝ}ÒÆË¶®»URkü¸Bqr-¯0/ f¾h|!/Ø›„x­W½}μ&|IŠwOâÃXãÚ³‚ß ¦×ÂÆÁèïM÷'¤8µœ÷ö¿deë›ßŒ6Ç›B¼¥Ý¥’ ÜØ~ Õàcë}™Õ¾O‹z¬ßoC@r÷¶RÆX×`~(ìÌ€KŸ1" ^Y~®"ÚßnîoîÇ„è…Hx¡ÀÞÕ¯ïm^|ªÛ-!–2<šú"hTÅ0ÌRæè'°¢Yù¯‡RÀmæº[À¥+Kô]Ð×B†oð9nâ# {Ȫ©ú¦cL ¤X’ijxµFðE¨ªhp§êÅV¨° ¯­ä8ø –o/}ÌÆáTQ­+ ® 0DˆŠîki$ï_f«»Xï®¢Š ÔðØîË9ï¬ejÒ»ÉË YÂû=ÊÌ7¦ ßUKF;¶¼1—| Ð\Œ/7!8Q`Æš>WSy«¢«S¿^j/=,7½ÒnL àksÖE8¿ œ¢{›‹¼?u]tÜåó¼^3Ù9sbàØóª1[ö¡°I>ZÏî ¸S$ýKòüÁ0ϾºŽæ–!5¹Ò®†bmú·–kVé¿~c1iÔÚæ}©tMJÓ’Wt¢ŽýìZ&º îˆâq ª]9‡á4ëÿÆNyfCVm¢µ©‚s\ž™Gd̳îä£áŒúò\–t²’TŒXêê—@A¤:ƒ€ {È[Ãf+ÆY¶ÙúYºâFø-ø†«Yûÿ]øË\qz9¬}U­¦Ÿ]?ò]­»LAÔK¹£ÿòoá­OàÂÝVcuÝá"%ìÈÄѲ¾O&¥ž}¹«/‚«n 'Ç®ÄÕ½¿_×XS29ß-êÉŸU®ù¼¢éDžºl•Þå¦|ÓºH8Ø|»öÙª Ù¯ð‘o(añ †«#•¯Òñ€³ÿü”±_¡t):è´*z­Šû6ãUœÒyÌ[SÞ-ÌÇ3ÝùÙjĦuÊë —Gß”5ò "¦T¹¤ uã··PïðÂÞ¿e”3›)H'¯¹SGm>$™Õ§4ÏDˆ”8Ç•°>O[ÂrAóþª7p_×£|[Ãr/¦ D~B£½¤åȺÊ]]$é°ö ï–0¥3ã³Æåš¢[E8 ƒì¨é}—ô3½­ÉÛ4-ŠèÛ_$þa±ÍPœS’3ܲÏR r/§Ë†‘ïï —ewísR¤¸wg=QG#{ºgýhÛŸã./–˜% q 7°9˜ÄÇl} :ÀÝÚ‡‹§dMŠGZ'Ûóy)'ºËä!ƒ¢ÑfÒ>Œú”a5-v 8a@ĦaÿSXešlŠH>Éîk{ÛtÚàâüô"’Q§¶ÌGƒ4ô¤¤[úl}>vZ×Ì‘0ªKè-PþŬfÇKz: ØšÎ8qhñƒmMa!+³ô5 w]«Áñ€¿ñÚ/Ä ªjÞÓôèyÅ^"ÛÚÓÞ7‘“»FEX“ lóàúšÇ‚SŒ–Åð“w£SѸ÷9G­ˆÊ’Ô3çWSЦ?Ý87ìõozxV˜zŽ)¶äýU¹VÚü^p»eo˜Wï;Ò÷3b3ÃãÎyú@läþhD"õíB#$h Æ…–üº¥Aª{–òȶò+ÇU´?<²“+ol¾jsF‡®í õÛl«­ƒ}×KTeLÑËÍh(“ï25«±ºßÌu@ MiÑÚò oTü±ƒ¬=‘0~/%§ŸVjÛXÂê0k¾Ü -A?2MTº#£˜È_EðOhòÿ©ŒF/Ï Ä“jEáPÉæ?hÄ7ÛM/w_YŒ™;6ÓpC/K&*È–Ö}¼ ÅrQy’0®’ûJÚí5¿ɠÊäN !ÇB¹¼!¡›ßu¡Ô—?üȧ‘ÿäië«£ƒVÑßýMÜ¿h.®£ €‚ñ MOÔ/Z6:ìGå`£ÆÎóÑQmØq&átÂl°Xé³;qY16–ç?¬ßÄùœOÚoÂ7‹@ìÑ~œb°·ÎƒÒhÕªÝ<Ïuü’î…þ¶wŒŸú&Ü—PÚ¼Äã‰?yðáŒ4Ø7˜|N9½÷©‡£$aúÍHû…¢ÑÛM x ¸a„ä•7šÀoü²’(É0î1bÊ—YàRÿ€ è(|ŒúÓ!6Q2P…þšÔ~,/’¯áÔ˜0þMç` Èr<ˆO¬ií§*cVÌ3 7sìÈ4×hóE7=¼Üú¨ÓTçWá”[=‰lEEÝðy”.½Úœ… ô¢»Ç(`-&‚1øF?:Eî"­E¿D­œvË6îíµ·ˆd†•Äûy™?ÄžzPztCx¶M4»: Af?TõÖ;cª……SÕ^¡¯|‚Zk­…b”• @kmsƒ±c íNÀê ¬{“v Ân¸8*r ƱL¶hŸL­÷ ¬iE# 1“;&~ß:õo"Nî ÅJ›ÿÝ÷õ@Tˆsi3è^1 ‰O€Á抴7 òª€ÎsÈ™°‹ÕVÐd0dËîÑ4¶bë€4½‹; g EªšÖL7­ö÷]ø?u£/ï½÷÷nÊG‰OímZ­2‘ºˆ®•rÆZSÈýâ4¹o`„vÌ)ïè[Ý›'WªYk6Ó6|Efƒ–#@Fùl3âwx¥÷ò÷“t“Zõ0Jã‚’=ÌÀ¼ômÅjM³‰c‘}b65¦œt‚D·æÈ-äìFGˆóÃ+ä¼àÑßú–®tƒ¢¢~Ö+3ä›/o¡1êéafzïNWw‘B•÷ýæÞYÃc7]"»“n‘xÇv޼š‡ì P¨¨ò¾‹YH—^-WíGJ“kl]sˆ´å^Œ+cg+NjäN4 $7GØ"(èzMR0Q¶Â9XŒq”(Qe7‡jNß L\t$h%H ô=Æ¥¬™Þèp:@'Êrv›š3Á'’êÌý6Ò ƒÂ¿!õF—x²ǖ̌‰°Aœµ"Q¡]Ôþïk“ÎÕ.Hhdõôkzö¨\ä]d Mëxüà?…ÒØÎðH.*²×É‚q7ÑÖò¢°DžaP)£L+ÎYÝà÷ïða£«Ç•Š Xd(<â¾ M½Í[÷[]ÙÈ =К}c‚’Ñ*oÄcm£‰[tWm®Ý™wØU‚Ðe)§‡‘ª°sÓsìäŠF)ì<³Œå øÊõ#Å@n4ûÖyîw»ùã¨?´pJO`'¦m=1×rã>07€ÈÕ“Ü‹ëM†{éyû–7/~ÍPЫ,÷'…øûL †ü`†=tR©òÏ =mW`Õ·‚¦•ä½Tco‘¤ƒÅÔ+“%&…d­ÊBÁÄèsD"oùù—]³7 þÓaNEÞ«ù»6óØ9 Ó{˜õ {ªb­<”¼T¹Ë¡MU•åPóêþgåu%^„øþó*beàEä¹È÷‡ChÆ„?zZSe¨{o¹´¼†_¡VÒfŒÂÇËs©˜È´óeUìYˆPûòKfÐwvßCV[u4ñV´[ëU¯¬ö=ØÄi„TÜ‹Åq9¿”ÑönOïË+ÄüîLŠQ[*‰~½S‘6…¶rÀ-±S¢s“Éz-'§¾OF RºxÏÁ®ã¿zûŒØZgP,Bt”0)Ê2tÍÐ`›¸z…×Wv¾~ö’N×5¹” à@º¦z¿*T…†ƒ£¸Ìh`Ã5ÿD’¢h”tH°#%f¥c?ì$^Fe¸GÈ_tŽmì—{¥ŒÃc ‹}ÒŠ¸ qq-œ¤6r¶X@n±`zD)½¸Z(FCDô½4ÖÛ‘x2›Öž¶Ÿlmï^nÕ·Ý ß;éƒÐ8tL…Ì|ödx}ÑâÛå-$°Meâcp¢E×Çñ„\å@ܶ¸’fÈæ{ʳ3…³5PÞyØ'ÄÎVÑê2ŽzŒ$ojõyÆÆS&žÐý¸V z™œ‹0ËàãXî1:(Ä×â*cÛ*ïÅC°ÆÞÊM„«y†C%}7a«‚ Ü Fó;Fý©n)Y2oCÐ%˜.dMa²J=q"Ú9Û õJá`Ž3"#?0Oíï+Š^Û”_8™ 4„âd°Ð(0ÓÛŽ`.&Ä&²É4_ â»}ºåM? Ðò¿€ï-<‹e-±ßt‹ÍZ!w娍Dˆ®@DZæß|f~S*W¬ò“—É ÔÑDÙV·íw0y+\䋨Åýc·ñ²hì±ÖΩ–Õ¼ý“@l{c?¡Ç™°G&ýÎ0xÄftúÞý„©«©&0AÄ¥+N˱hjÂDÄà!e>a­Múî>ƒÁŒßA?O[ ÔRݺåüÑ1PE×Ò&¹²{’ýØs@𔬾îD™)<4 "ðÌiL×î'…€ýwšÁ\qM”Á´ë²ˆö"YäÐ?ˆÊP)¿³fi>ȦÊ/p†À{žV5„Ÿ˜å·ñbbî¡D– °ŸÞyžÉÿ÷Zh¾ÚÅ–lWþRõƒ}É˪ÃÎ#úC5ÝÛ#¨|½ÜƒòW)gª•xÒœM‚†/ê¶ Ñ†q•'¬§Ä{PÎÐ×èÈ!NÚˆ: ­TT÷ëaT˜0¹Uðs“Þ0ù|¨M¿l( S6º(Ó»+˜aa¶#Þú· µ¡ !¶ø9öâÇRºÕ(N»a†‚Êl)nb«pƒ9‡—|°ÃǼjcÔ`$NÝÕÝ#%‹#ѨÏXÜèJ:–Ø:Øsû=¦tÁ(–…0Q¢ºRQ>"åÀ+z<­¦Eê(1£<_õ·9Ö“QÙúÎTžÚ_ÿrBuÙ_?qCÐÙ¨§^0ÅyÜ&] øáofín«é­²~QqÆž>Ó·. Âô倞#uâòeȪ7”Ã/±”Åy­&꿇di)2-0Ïz1èôÃAÚº´ØÝK’ ê[ÄÜŽ¿µ‰ûšF†$B{2F„¨ÕQ£±¾®ùpÑíd\ñ’6×¢'SA¤ò¤¥.º (M1i1,¥¢sÖû¾…Ó᱇au`O{êì„Θ_}ÒISð+xiG%·p¤µÀ› n–¦Ùq>Æ‚ˆÄè^ÞY÷±M<º­îŸÚ%, òØ],=s}+¬|û—”ЇNu E¿óh.¢1%ùë[Ê\ƒ>Ø:cLâfþ㺋Gz#Ön‘ïôO°ƒøâÀìN'óÑ ÞʆÌÚÖÏžö:_#ÌT£zÁ_;;§™±z{N zþ±-m&yiÃg<­þ¸DOöWnÌAÉ…ä©&j ˜ÑjTWPm‚\zé \u/–² Xðæ®2R‰ÌÂ[S×Ì\—·(çg—qw¢]/<÷=à\"»Ú†<ýLÏÔ«N"-qðÙ(Å ˜få•kƒ‘¡rîû|d ìÝñýú˜ÍBhP‡p(õU¦—µwìœb”ô L6xªæ:³´:fëå„ú¨à8Œä ™ïœŽæÚ`Ñ&w+C¬œŸïÚ¼(Ÿ•™Éu}n·3™¾äÐØÂ¢üôý¢="ãgõIfÃ(‚W˜gO <è€s²²§] ªSöEI3¡$Ñ5ÖÏíy|[KÅáOaç{0wTâJÚ¹Bñ×ôÅ/%$—`±‡•5†¯ÃQ,Ã2>x`†kÍåàiÜ6wµ^ê#k@'– ì„μð3Ù[2!'õû¶ø¦/Z& h/¾+wй´Aa¶hõ·ÛµÁÛ* = 2„nNæ:êh2ïí`æ^Q¸¤ÁÈ«¨þ—âáe:›—PÍF—Ç¥Á!?¼ž^Œ:”âÅ gÝ7{¸¬K; ¡èŠ: ±íŤŸw£`Mñ£Â\~ø¶…û‰þŠ)©Q‡‹9Ñ hÈäæ©>üëT2U˜èKÔ±v­¿9cÆP†sô¡˜pLóºCï”_ :aJàí)€k܆l {+¿Q –]BÈ™îâõ7‰üûè÷%þÐYßD3Ê'­1Ñ<3U‚«¹rßFçÁ^+ÝAN§Æoå˜Î´Æß%Q½ „>Âæ~ËòÁ­¦Via,³¢Ö§˜ê¯z ö Öe·¬¬Ò\í†còçóYh7”_ñ âêmâñÍxb…³÷øÓ×Ôbü,®QË­À·uäs#“Çè©~¼œ­Û,hà·æ:Ûœ>ÿ+|Îd‡×Á¸47]·ÈV/W=’…¬Ó†ò]e§£Ä¸)r—ÛhÉ cŒ пåz·Ä aBOÈ€*‰/GÙXr¶¤ü'ÉÂbú9œP¢Y;ƒË=^· ¦’ؼØËÛ=Ïž9ܪ³ìT9¦ Ó­W ¡9N^¸Vª0ajJóPÙ\²Š‘~Pªa ­4Û©PQË_.~&¥¿šï‰ÉÀI‰$UD¿ïnã€ä¯l#ù{hž¾†k:aÏ&À 8Ô^¸dy0:¤ƒø‹”íáÅŠ}"zYõZ×2 ¾Û· ª—ï²ÄkOÅF %„L­zL·÷7ÔSì$rÂñ€‘Z²Uüûóiómß#s¿B#ð ªÈ6œzÆ¿ƒ‚¶Ò#¯}¢Ì”ïÍ7ù‡»FHýW2Ð7”Ñ;ö{ ^øÀÀßhRí­ôÌ'²4]4_=]ež[Ûö6AP¶·ö.u¸ÊwQ¿éò©É¬†UÁª‹°Í_±ÏŽàRXSNìfœÈüwx*W¾cήÔ%Ëo±ÔI]S.V'OÅ€ê™Q3ÏÉûô¾¡– ¬æÃÄÊûЧ©è‚^•*u¹ß;AÉ»p-.–K ã2²9þƒ¯CˆR[\Cýa‘šf–Â9ƒøØ­„½ÂQ©¼ÕØSç°h›=CxœÔk¼€™ž\ázŽÎô½¦¹6¦ÙJ", üòÊ’ÿ€C%"7߯Žq­ä4ãà•îZuuã´z‡<>X])Ì¡FhÇÕtÞ›±äb#û–*•$7[ôá½Ï£ˆ¯L‚ô+ΰZ*§ù÷¡mÿ¡lÐV&ïß»^›Ûœ¸›Ñ~ï«ì„f,,²H¤‘}ýo’·ê¾²D24Oàj^†Âo˦4ßÂ¥y¿–Í×’W>çˆ`·eˆ{Ã{È€˜óìå p$¡7H’ Dbž^‡ëCá[„)¾ë-bm†ÎÏþM3Wu€Höÿ¾bݵ¡Eº°wÉáP¾\9WŸmk™•šDÒÆfa &0¨d*ß7ÑÞ”ìV~E™Å*Þš–šß‹kø•ž Ç'´g¶dX€ÉE&%Emãøî=JÙD9ÔñáÍ¿Rô%kÜQç;ŒávÏ9NÐÇIð:Íl7M²ƒ>®@Äôoeîe[ÏÅ^ÕèÝ]-èø@™ ý"ñ8]’ZâA1²Uù‘ ÏaH1&3íw`ÝB')c{ 'cb!q¥ ¸ÛWí)÷}9¡$ì}òæ«]MksU)B¢ÀjÓ¾[³ß—Œ˜‚9æ¥ÇÅQC1À¸éìR–㟠17º†Š•6”* ØZòçû­«Öhªv'pìÕAÆ‚tÜðeºjìÀºK.›K]¯ ÛÝ;½A|^ÈKðhóái® OõÏ^gñŒLs'äCÉ8š|ÊqE Ü}ºvƒ0PêLýÖ±0'~ͧ$õº_ŽÝˆìEmò‘*_мU›mñ®ª€Ë0öæ5n"¸a@U°ñsTrÛ‰Èm=¯¿äÛ6]¦ÎÅêÏÃr*ò½V,Ü@|KcöXm#PÔ¹k8¾ÏšF^gä¦A!1!*èHН׵<¹²<½UÝ<øŒ£F56í£ò$NÔÑ”×-?ò#È'd!¥ª ñEV½áùw&ÔÌ)ú4ÃB=g‡÷IÙïÞN7íYi!Fœ¬¢úË>ÁYŽÓ;tÈ׈+Ÿ:'9F Ïó2 N–lè” )¾©qÂÂßðÒüÿûyw@B£‚Ëk+¨W©75W£2¤?åÿiÂÇpXÍwÝ~úzÏ>±kåÜ)¶¸™ô Å €Å™Wü&ªºvtÌ¡Î$‰Ù–¨ô·ÜÞl,ž×6@@Ô{Ï•1ZvôS͛̔d¡VÈeÈv:áéøÓr"€L#Ìåúz ´ìo÷{ ø=Ì™P{ˆ™]+Ü™îØß'ª{öÃý‹p»/+Øô;Íi²'P‡<µNU$¡´"ƒ–É_yzY=šKÜ¡-¿,òC>Xqæå3¶”¬§KÍ1µ êxšL±ò„Ç­ÃÞÃîòϸÁí1…h¢žÿîcß<üÙ’!;«HC¥Rl($Ô Y9F *} Õ"~%ø`ãšÅïÄÁ³!#´ .G` È=âk”=Èõ¶ê>saà‹}–™»Ü³M׈õÀëwÎÃÍiÆ],`¢à°Èµ×L n¸5S$>Þøµ®Gõ㺔´¬%· [XÖ9ùdïŽÓ 0¢ ƒÉc£úë÷ïšÚ¡K Öî_ýpÆçR)«i^®ûõP?Ld¯½ñto¤.[1ÓÅ®¥†òÿ’Wôçkp<–»ÈVRyÇ.ñ§â5ÞÖÚnKÖÔ§›k¨¦DÖÿŸÉ÷_Ïþ½õÚÿÉ›ï¨:÷p$Á"@¥ hQQeR%?ðVR‹½(6½õShÇp>8zÔO‰Ï‘õkÚÕ@R¹ÚëÍé–<a„Í\)nÉ&HNÓíȼe-•w5¼f*çºå²užGËÿ”3›“†Ä¿WVÜÍWoÝ͹\:v͗ߊ$úªcJèÀ…2Ûùä5µKaÁó±ÏS\?4„›YÙÓÔ²ÊlŸÝ.¤Ý¹bFjcrÓ›ùC¨¸Y6‹íšcTåe†=™e6®%#s¦í¾¾Ftû\ØRw†/°Y:×ßx—Þ ³QM†–'€ø“_²1,Uçm´È& hjÿ-{.dþ–V468d0lñó­V; ÏÐXý¼¿K}6 êó»=©ªíäà_§ÙÜkØb{êòÍFj=Ñ¬ë … ƒµ x£T3póö¤ðŸÅÄ…b‹=­F;%UÇïÊ,”ú:-”*ÿr£ ÍðÈ×ÿ]úp^ÿ³<µJŽoÒÄp8HD­ó-õ›ÍÔ1“l­I'"ëÝ>W'ìÉæ˜ÚÍ~V5ï•H ÞG“w_¦Ô³ê·,Y^}‘S»Èá?¨gàL´<ãÅíÜÔr úÑIè§W‚MÝø/N6Ø'qÔr¥Þ¶€°Ñß]õÓáÑ ûIž”Ï/§Â8vˆ²Kà9{ÞYäFÍ‘òwŽ»mVá»7Á|WâéÙÅÄEæx Ù”<Ï©«ŽWŠK II,)°áá·aBç?㈠Ð/–WyYWóÔ0SŠ”p(0Šöˆ …e~s‰Å°ü-ÛÁñ6¾õüâ›4ÛœeMø2Èÿ$ÕàVT¶âÒ†Óìšd@ÏbAþ­QÜ\n2x†ê§ñ^4X÷ŠÐ˜ÊE"or‘;¼M˜O[W­¸ôõçY L‰ óè5xïvw!5Lš)ßp ÌJÙ±å¦è±àŽ7¤1Ccÿl1Ú¬Iʻܿf ÿDLôgOýÝúX˱P«srç‚LÀ„“áAwƒ¨(ùaƒðÙæ%%¥Fã£fËxiNø£+]aDUD»À¨RšÛm<㯠戠¹|g»+zð¨3˜9EÕCÇ–¨o À«W5Jà’û¿ËÙR°å‡t4âãò[I)Ž˜µy‹P«ž‚¨¬Ø‘,z%]ýCÆ—7Ù ánZÒ¥‘Ú)ŠíÙTØDm4ó2׆™‹Ñð;­ 9ëË/†VG±oú.ýlŸìxÑ€Q¶¸§®<}µO~.ºPw]¿^ŽÀ©PY37ˆ Ç ¥‹j*<=¸©W{ÍqխŇï4ÇÔ9…C?ŽƒRÍgIJ5Wgþ m'íÏ~:厳#Õš¦ռʡæu*µ†ƒV˜äJ½íîûû[²–ßÍŽFºˆ•чy®5/my·çOãÆÔÏäꆋÂy½´ 2‰h­÷0¡ì+d¨ß0À(ÍÌ9ظÎ5û^"5–M›^¥TÇs& ƒs­ûG›î)“/ôÐò¼d× /TÜi’ˆ®+5Õk-ý0HÄÛmÕ4È1v*¯º 0¾ûEêSzyóÎ;—ÃtŸ¯V“ùðª+µù;'üAÌ•j1Gð‰¡_b>ç6†ùë)jþ=`êO ½ìôèM#£ºöý2táSdý°yF8_&-yÆ<€C9Ý:¡ rsoå}˜¸5Rþ”â²hFH‡KOæ¸ÛwMê8ˆcÙXöÔÌI ¡¢~›%:Í]+2äT}Þê21àša‚ éšß#ZHº•÷‚Ö³¨+p¶ëÙ0#3ÿ^.˜\ ÆÊ˾ ØÁ^×`Á,…m÷ÕëU …á8Ó7.êœÊæqÞ½¸w•Ì5‘5<iÇHÛ¤be™–+žf«é,ŽŽ°O-ŸîóÔ§¤–et†_iªl(í\¦lõHp~=MM×,¥üÊ@JçhöMâØ¯12K”ºÜ3ÔíXHðëA LI {Åaß{ÞD.„éµo—'̤i{Q¾’»û•e˜ý4*ýå|ØòT#rrŒ6£èº†è‰ëëÚ»`Ì{ÈiŽ0;_ÞWœ# ™‡9€º^¯-Ë‹™ó Ç“Ÿ@6Sä®Ï.ª›ÂÃ* ˺̉.íkú=äL@ì0ìáy—Å? Ì'„Q_0ÛÝÄÄóU ž¼!ÖÛkѼü sÕçu8Wæ›mràÎ-kò$®Ô;µÜ»®…%¥§y ’Bãÿ³í1ûÇS‡y ‰å³£ž­ÐêålÕpモ?‘—êZó=àˆ5)Š>ƒÜIè.jþÍÒ_¬h¶ÇEÞ9,éîÇ ;ì"ξ h•ÆŽ)wƒ¾ÞBŒ/Šêé±IR\‰ÿ –“×þt½ÀonßùÜþÊ%Þýl' ŽÅ‡üK}ESû&n¸‹ní¡7±ta¹õ)¾3³i–€"9¨Õ‰*Çî„a[‰wîß)ÉÉ?ƒ:Q]sL•úPÄ7¹ /t,“]ߜлçh­îëLcÅm€&j ëÈåÚE†ªÔŽvkwÌNQaÿz».—ÈÂ^”J9õœÜÕAr‘!ûÒ]gðaŠmöRxG•õõä#Ò 6 7:½,ÀmBS*Ö Ï ;ƒú §¬0=Ûæ:j®¶¨•”{RÆ^#€£Û×LœåÈ\ ÅÇ?‡P£ˆ7m©59~Xo{èBi9 ‚EÕAHö‰}aï¨N!,&|¹k°R| Þ ÞOÂ3@à­)NØJ59æ}XÂpwšÃ³tôµUïœ)L´Í¾-<>ž›ÿ„²ÛZú§AðpãŠUçÊÕ¿q™3(¤U/SWRãGËÇo+é­ßMˆ\f­úãOYçv öçK®|Vúq3[hx19r6Z8d‚ÙèÒDQ1v²/Oa4 î¨ÂPg œ°«0Qçâ,iÕo‚–ëUñÔOô7)4ž$ ²Ûüóƒ¨kµ×ñÔ•ÆæZ·¬˜Z’¢òÅÊI6ã Šð³wì-jQ @Ÿ0ì]ǖ؉µ"ŽêÂÅ&$Ê—¼eÃŒí•sï¯\…”*×Ë^ÞdW­kk²0÷Qp=΢Þ9?ˆzXˆ|(V+¨æŽ ¡£P˜ó¶ºËæJÏïÎ$mó±žC±„–Øk*­!ûž¾ˆl3Ù®û׋.D»Bo iÓ”¾ƒ[º“Ë”uIê67µõ¤cæ}Oæß¡f‡ý7Uñ‘Ï«cj\åK7"QëýaåCÆÃÌÇ5YySŽ4C:Î_s‹ö÷ò_šŽãfg¼)òJÙˆpfG¤H׎V¯áLh©Céoå\bFd膘ЉYmpŒÈ_|õn™¥™âòĨbø"¡P+tC½äðcÖš‹(l€È\“ÌÀlYfî×´ªPÖîË1Ϭû/{ Ô?ÂD†ï¡9°õÃqkÿœÄÊêÓ× `-dÎ{|JW¸ÓçªÔÖÓÓ[ÜÇiÈjuÌlB™˜HÈ¿QQÙ:2NH;2Å.kÄ^ï.—é¥Ö…>MÄ~À±úxÄÏ÷ñ(=nôdÕT2Ì£€5hÑ‘‚êú¬ÝØ8PçÉf¯@m˜Ì¾ÚÌ _ûP¾. S ¨,T3s–²š„%P7–6³É³ÕQ%™ÚSÏÜR«Äˆ˜=HÍ/;[1£e=wó±¸q½ñ=%èÎuªÔc:¥ŽÄ¬¯[˜_8³y&úñÂ&ìÙ îYÖRs v+±–¡Ž)Q{@ÍòeÎT=V~ÂVTÀÿ1ô…¯æ‘é•uçÈtŠØöÙFdèôô°Y]±EŸ"hßñæ;÷ëkÕ½GÉÏ¢,ÓÅv'í8Vy•¯FÔíOj*ÿc™Jÿñô^[œˆ;ÞÌ7¤ûîgd1£÷ÏÑMg1ó""†ªN2 G•X¦¢|×%\@~”©ú5:Î ×™fáu1á·öˆ«ÖØ”ŒÓÓ‚ÓçÉä íÞÆ¤iQkf{JB ñ¥Ø%Ò5ª Íçèåw‡dL÷mä£ìûjP´!µØÓ‹?¥¾>0Šk î'¾³§½½#kU×;³û:Ÿæ)<˜ˆ°¼X‰å\&Œ #%•nAehUR{øÁ· U>{JþŸ ¹kÜwí»KJµ˜Žú¸C=U#ωîwŽ@Ûª-`Ä/9}C6AÝHw>·0#Ý>xꊮ§ :Êï½YtjÃø¼áëEˆª+òÓRSO4{³"õÌ·‹ì ÿ¤¶§ˆ2ݠݬCϧ¬á§ü—yˆlfO‘ÊÛ •Íç¹|# †™®y—-’Ë›Âé ws­®Q®ÜŠ®¢bÅVV=ÇT\˜±{¤Íî†>íÿ±J*7К8TD5ØŽ˜n%¦/ž=îÕd‚Q»<ïr=dجš «Ç—ï…0B×€…ÝŸÙ%º Ü‚„J~ÃøUŠ|l9–¡>Sf9]ò µ¢8~l¬cýƒ³*8pFüíSKE{È “S[²Ô£é àˆbg­³Ì'% å.(ò̪éØèL„êߟ®‰‹Q Á“%qò[z6ÑWEW¶·ÈƫφØìxlï¶ á|DÔ%ûõbK¤»¤Ÿõ²›7W…Ši›DO)öG~>Õ>sѽ♄º[œU†-K» žðàT¡éJ7ý}0èS«CûÆÂŽƒ'áÐ[d-»¿b ±v'>Þ¯„Ž¿ë‚ÙQÙ¤zR¥<Íü’ÍOÅ¢µþöbà{ÚÈ •… v$)Ø×ª“®Ð2ÐßÔž§rUfF®Vlheq›¡7«~XÅ-‘ÃÏqð²1R\²Õ(%n90}G¬$öƒÅœ°±‘Û TÎO ©ØÍ9Uÿ²¦®Dy¸ÿ25W_siõO.å®þœãüˆÐ{´×½Ë0äŠ5@“÷iý ™‰™ß:J/f#íÃO#îXõ”ÞæÉ_|“ŽA1*MiíÔ‡½›û”:-¬·î§Òà4¾ËjuDtß4a|Xt\å„ää\©þßšd14ópm Œ°ßü=Ú‡k<“5’$Ù!Ä©H/ Ò²Í磑 øà襒y|­ŸÏÚˆÒ3ħá<¤+;ÁXñ– 8n½*´ÃƒDòÁ»Ò]q¶D}p¹Û£SkO{_¾î‡g=e~ e‘àR£Ì¥e_ðeå ÌXLô¬´È£÷D*–aœ÷çç’ÑcÞÔ±$÷ê÷ÿÄ%1/íE]|Ž5¹ô^ þÄò.@Jx¹Ã97û™è;¾¤‚hñuFˆ•œCîX\¹ÅÇ®òË8ÁÍ}|nž¤]¯ÑFêçdžÜÏ6:Cìf4 U#‘Ç.ÖLX«tØ—]c4Éâi.´ ‘-¥V Ë‚y`³$†ÑÜÄzû™am‹ÉÍ¥Mÿù­ ÄK"EëPÆ +¥ê1CÕЩ& ÝCu0Iš ‡6«¡pƒYš4ºkuŸ\Þ¿g£íý~%Ó[‰Z_-‹ùµrånŠì3þYÿù ïž endstream endobj 72 0 obj << /Length1 725 /Length2 30483 /Length3 0 /Length 30965 /Filter /FlateDecode >> stream xÚlºctfÝÒ6'Û¸cÛêØ¶;¶Ý±Ù±m«cÛ¶m;œçÝû{÷wög¬?5«jŽyÕ5kÌ5W­"'··sQõt2Ó330ñTÄUU™™˜˜L ¬°ää"N@#K{;Q# @h P:˜Y,LL̰ä{O'Ks • õ¿”u#SK[K'€º½½›¥‰€ÏÍÍMÐÍÙ•ÁÉõ'Ã?“T€@€‹`fiˆ((jIÉK¨$äÕ@; “‘ @ÑÕØÆÒ ki´sRÌì6ÿLìíL-ÿ“3ÿع\þfædo SWWˆ‰0ªŠŒìL²’ÿL·sqæùÇhââò?ÑÑ\þ#ÙýG2þô«“Ç¿%Xff€©¥‰ ÀhniËø?¼IÙ™Ù8þ­6uuø_Ó?€œÿÁ ú‡Cj€)ÐìoWy#[ €JÄÞÖÁÕè³7:Ùþ‡{w'Ë4ÿëjdkiãùÿëü<¤\Œþ!CÈÎüú˜þ­²t·ôš*Zºü÷‹“+ðßj à¿÷FhjéjûïéÀ8ùgWMííl<ÿÏŠÿ„ò¯õ5äµ4´ehÿ“ÿ2‹Ù™Ø›ZÚ™T\þáÓÈÉô?Š™,ÿAÿ‹å3 ÀüÇrF.N–&†ÿI¦ÿyþWÒû¿^ÂÂöÞô,L\zV&3+'€‹•Ë÷¿àš¸:9í\þEú?±üïø_ÉzM`×–íMxƒ­Rÿ„–û‰ÎV@ÒÎNªÑ.3ƒ®Lußè XZ˜^áÞ«âæ¹ÃÌóï^îHÝ7“Åá'&£‰Ãõ–q_‹I+Ìýj¶Þ•òßêÃõ¯!ÔqlMä!n"î\Ò××i&Ù2sÎk¤KùQ$˜£ ËÚû ‘·ãWí$¨õ(Q3´¿àû´Õȳ!ׯ¯{k`ayA»ð7ä8å‡aÚùõWV":ZŠsÌ’X¹:88¢[¡ÛnŸ±ƒ›B÷W¬{Pi›îBˇºOyŒÃóP‘7| ›Ûþr ·<ÐY‹2•|j‘q[Oül¾‡»3n/~Óº”Ž‘þ.Ó”zÛÒób$°‚p‡Þ#¶{<9ë2K.²Ž‚ÞãÜc«¨4å–dz ›˜$•Q­‘‰ó×NgïÎ8ü6;äÂÊiP.¦òàv¦¹v'ð²"§¡?FO[[¥׳¾ƒ<1Œšê3ÁÙÅY$ .ܧÝ÷£ ¹;šÙ÷“)%FE,Y3šb¼…Ø„W8öÏUÍ È/|éWQ$/hËS"<Î*‡«“néê©Åšž8¥}yƒ‰¼B«ªD·¹û|E%?⻓4 'NŽ…ô-Þ¹cÚᄎ^&…~@ô.Ï^(™Z3Yeß™(+—£T‚ñÌBpcžéáØ¿Ü¸[Õ¦³˜{ÕòØoðæ´T.†µˆ¢ê,`rä±BËæ§¿ÁßCZ  =÷Ê Sà d1ñ×>˃¿à'Möádº`ŸIü›‰·Ê/‚ìôèÔ>èÍúŽK—¸¹‚\'ÇàT/ÀAsЃ9P­‡Ä¨!ÖäR7ÓUZt°ý™GÞoZqÂ#x'Á5ê”ÉßAEH=´s8D[N}ÔÍ¿°ßïêF‘.8@qbÞ¸šÙSŽûQ×H÷ùsø!ÞýtWT+¡U”=# Où¤7ì7ùÖñûÂó•WŒâ/ä.Ï–Ì"Þ×k#ôH°«Š¨zÃÛ“wìäáÉMþK†¶Hs{SŠÿ£_ÆJ]¿‰ìR³«Ô1â}|òà6ÿÍbTÊspv“úœŸ= l-ó?FœTg-OvÈÜ}¯Íη(õó+Ž«þàƒüø›'ÐxÈg@Å1àc¯…‡â¤&qêOÜØÝ¨ÚŒ»Ÿû!ô¼ñ1InŠ®iË"i¸5Œ”§r?tĜϳ\KŠ÷ m[]=IkväpðçiZƒ¯N+ú¨/aNkWýXîY³3`Uô-}"‡>=[2û!&(« ãoÂk#÷qj D½0x’Õ(çòÚ ìÄUìMÎѨB?òø‰ƒæI]TpØpлIȼàFñgz¯*a_e õ†™ç /|N„ÁÞehz ’¨ØôGG…z$ äHI¥õÕS&Ç1=¾óOIú¬hà}y’{Rõ»âÍÊ)ØÍö§±`Uï„ÃÚøbÒ¯ó3U#¿ÞÂÙ¨èÊ{YÈjÒÂÈvnq>êî—œ!2%aFí•{P+¹¿G¾1b£ƒÙp§]ƒ¿¶\%£–çæ 8;)_ËËõ’öqö‚mBßDƒ,N¡r4+²æ£MÑöjµ¿6Ƅ؃§`'”d5Ó£ ~¾@É´šWOÕ¯«F›Ó>àƒ˜5Ð#È·ÅÖW_ÜvŒË3ßÄjcÿ¡+£»M—,rên¢O,ûÓrÚ¨ $|s¥EžXÒZªHsìà¦á­Úì`tÙ•æ@÷i“ŠEd©nÜSm’ Ë3¸-˜Ýpùä.VLˆ8ŒM ã_Y-oйì¤wƒg$Ú'÷IV"1c–ÜC©ÐÍJGíZFrœ·Ï˜'@ç\Fe¬ƒO©~«llb àçĈ+.~\6µ};qüXæ°'$ š„B3+ˇª|o3f6Çñ³ó}æ©Iong3|hË=âß-ê×`Äýᤧq´³ï‡ýx ó­¥€ÍUï8› ö·Û¯“Ãh¬GSÆÂ;3 ïÝ»˜ 1–kTS ©|ÇeÙ6Úc‰‰ÜV—Ë1)=¼£­èHhâuMÛd/®ÝÀÍ,—ßñœŸÝù¡Üè‘cryH¤Éª°L<¡Éù˜n0À¯gG=NøËZE£YƒQb©¿¡2}F•Y§âüHˆq°Tž½&Bl¦¼„ #obá¶dÉ`AŒmÈìnìÝ$½)ó0r#ž+³ŒJð£œ3‡›¬öÜÓ‡v«¥fïôQ‡})™ŠãQ3«R}x¼¦[)É—!›aã`Ùû®³?%¶ ¿“†àÐóðq¶`—êо~?ñÜYþM*þ{ùo˜[×µñY²£’Gh/‚®MÏÝ”Ï6ŠÎH#ðê-gd¹Í“Z³³Ï¥M-ÚUKËÊÛvz±¼æe«4šÈ¶ƒ0A•ÍçÏ H¢än‰zÛuû×\Š 8§ŽBš˜&³4¹š¬IWï¾Ñ¢_m2‰4`Ÿw¢3±Kssm”pe!¿Xv¤Œ¿bìyÍs¥©Bçw!9sþ§Íânª²§î%”F|¸·ï' *8˜Y¸^ÕòÚ¨þÄÒÁr|ÝŒ©ü#_š³ýcëM… Œæ®©ÏÚ*}kv_õ¸jxò½/⮵:±“ý­R£ÕËãÈë ¥SÆÒhNFˆ¯oZoþE–°´Åkx0’‹Pß<ÕÑA+éîw¶ð/ý›‹ª‚–ÙÔf‚[+[VwzòGInXí•âbž¹¶{…§Ì"¦–k”·¿2_IÃ6G.vH:²ˆ”®º\ ŒDgA­¿ªJˆ¤¡‹‰84ô1r«ñíUF«ú˜ÑFÄ9ª´†oqŽïo ”žîök¸‡ì_¼U< \§‘¬úÜÕ¬m&z¤ÚCç§/ÔYjyƒ;†‚:lh»]{o Ë\ñ#‘ö`4ñSï”.âhÓ ¢Í›|qÛE¶$ð>ñm³Ã±wô.å®s]“¸±4ãŽWÏésSñVØ®äPlúŒ7Eê¢ÃU±ô㵚Gô¨Ã¥†Q«¸òË=Ž&ò¢_ÍV°b­K¯Ù1~¼HÖT™ófðõúœ'(uð»ÝOEÖÊê#;;SßÅ!ŽJÄ2B"{WÉ-ÓÐö÷nÍ/vF­Ò?¬O‹ÖµÒÚnÉ£zWµsê¹mS= «™Œ,mÓÔ€ÌBtš…µìÓò”yÎ[Rbm$¨!l¢¶‡…*;M²«Œ°Ûu¹`4CI6¡ÿyD=©^¦ˆ…Iiÿ؆OÇÜ·\Ì–øD¨ú}ÝAj›·ØýÁY—íè ÐêØ)¢Vî¹" d’tý–{pàê™Æ /JzçâR˃^¯‰(„ÌyŸofÍBÎøë$»sõªü¼Ó1®“|N,âœÊz;X< q @’öÒm/ò‚m2VIú'îôÑ߇”y¤‘À¾º\YK=÷h(Q3!¶a«E{Í3øæòç~”†`ðdGß—ù'Str¶ç¤JÖMå}ÀÑþRÚs.ï§o¤âðçR¸¼šê'SãxÿýuóP-¶º½ôÈEE ÍÊαƒîÕ"R5‘“–8^çq¸Ö@ÍMl:z)9áüø·X½Sv©Aó¶¥Ô°H¤$… {<¾_ Óh†(“ÈYìLæEN†³IÓnaʵ룶ÉÎÃYT²U|ù™À«eð\»•¢¸•E3ª_[d'›¢úd@#B ¢¡ÞÆWÄ„¥ê¦êóª ”0!4–‘¦”,±,ÒߓˆóÔdg´ZßcîO½ÐË,Õ–Üc]s›ÊäžqÌà‚ÐŽõúãbžËƒèÂ[üþ?§5J•èU¶ÐDâk0¥.Õ“ù2™!;kŠCšîŒkìÁº÷ø†#vÊáÓíLd°ÜA«“ñ[Ëá¡âwu™oÏÊ|™%-‚OÙ \ø¥F9¢©âó/²ZX Î'{þi Kp@VÌßHkÁÙì¤Jx;9×hB}¢’w±ÁÇ\‰¸s\–%+ ]„È#HWh$ê·êñ¨™14DFœÇS\m¨5¢ï›’ÔžhÝ­´fg¡%)(Žæ¸E¢œq#2›z“-š9&MVìZ;ZJôÇ”™_ ¼¬š×¿¯am_º°ÑÛηn"o\Ÿ¯Î–ƒÈã9Tx†î´:°Aû½ Š-ç÷ù lnªyª"à·Þ¾$ëþù¨Ò…‘ÛD4° × ñ—ÇΦ¦TßqƾñFaTP»ß“Ü»µä%–—(Xâ©JžŸ»t hÝàÓ· ðýÓ"RLï¹4,4S´ÔOà(¬Ri&c«£K.Ä,¼œùoßüs-6’‡ôÚkÅ~ jöSbÅ€¿ŸèõYãð@sƒ¾È“(y×î¯,H.С¬ °ye3ñ¦œÙˆW0gMqjË'¢Ç"B‡d|øÒ}ض!tüWu\`•„/< z¬²Î=Ü›( 1ñ„yðUÁ,m2qè£I[Õ=/${ p” |ø 1˜ÑrÞùÅÉ=\½d˜.VϬù W&õXÊOw ÆÔž‘GöS– “±3™ó3ôø‚£àï‡jT¾Lèš:DOµ_`¼‹"ÿ¤ëÕò“w˜Gp¸{«”bæ«”²ÚÁLVˆéò2 ÀìOD@2çs÷ÉftÀr¬ä3Yø=é÷u³¼93Ê‘_!º‹ý99p§Œdûó’qïÓ*M=ë7L3PBQh|d«›šH ¼éL§¬®‹82 *ù‹40Òoµ#ëÙyý‹È~Ï>ßm4ÕLݦ^è-íÎ~ÛÙÊâí¦TÊ\þÞ…Á 6žmOÂÝù  ›ÎÉ„j8ÙT„´ø egq›ì;_(3ÊDç>ÐúpaμËOò™Í®¬ºu_ ¶_95ÀÁ ¿/ùGäxwKè»ë½‘È ~T%*l3>}ÖÙ¹à0S€—ßÇdK$*Ý\·üYþ&uìÛéÌ}ÏÕøûcØœÉx„ÚFµÂÔo_È_žce•­ #I Eçõ­¯§ú´òc7xÐ\ࣃM(8ÃKÈfÍî‡ÒC2bSk µá>VËxšŸP« l¿1 uËŠ0yDJÁÅ#Œ¬‘Õì P,%\õ¨˜l§3ƒö¨ÆðãÜOr.Þîö­ "yj %P­Ì 9k’ÛH¡@¯Ú¥t)U™ôñÍÊÁ  ÜšIŠ*Í(àÍÀä=ÕÖ1ü—0 æwNu!æ„&~Û2üîÖ§˜;@æâVgüMãø rÁo :;Qã§Q{Á…ÒM;&YNñ·â ÊG "qc*m^4Ž‚ ŽÛD®Í4yoLjM~ñÔV}_>pçÜ̳ÄÒ02“‹1²nLÛš·'~kY ~¤Ý󋮉Nœ7ç%+;²K(5ÞW˜{n¥/“!lm_Aø•hke-H›Šž‹ÏÀKAÕ•ö"-ˆBïbÊBM'­öìôÿ›íÔ‡d›4‹ :3ŽªÂ$ »wÍiQ¿}·Uy~‹ªð…µeààêµ4âZhQI,Ç.?nþ&fÈוäq¥*X¯šñÀ–†sñzEeR€ UÙ­ òÝFƒî÷toåy«»i@ªU‰ çNf±‰¼¹´d÷ÈüÞ­7ñ7=Êò„hŽk. 8–î•eóUWKvëîÑW-ªÿUÓ?ê™–|>!G¢XXµ1:‡Ÿ…< $—™ùtCòñÈcê÷ `µ^ò+Ow-9@/y ´Õ¹Ûdœdbþ‘ÙÔkãåü%åTd…küXQbÛxS5ð&:LJsXÕÍkrKïùäŸ{›]‚ÆKQiàºÜSbÀE¹ÌuC»G=ª ¾…¿ܤ—pODŒñ-ÃêùýÃåù…¢Cïš„Z’pß—ô£Ï»pÔfÌRŠfÅî‡[Êë2àGìÆTñÛ~™–_§–Nè~qbàÊZÁžØÜl Þ 8e §Â#«žã£.®âòMÜ% áP¡õºî äKÄgAˆ~¨döUQÁ¤çÈÅtÞ¹ù.Å??v-˜!GTÚÛ?Ënˆ(Âç £½iwbꟵ³žD°-èóÍ)ÊKg`mB^·ï‡&{V­@½/¯ÊyÇte [À’$ÿBOð€ƒÁ…ii6T>Ýy%û¶r õÈ„†Woò&šÒ&%°ÎÜq¹±cmÐq—˜°ª›Ø9š{*LC®*$t“|í-Šºíƒ‡í~ˆç?UéÈíl‹3B!~rÆ`íþ¦È+"r.,C­ IÜG¦ë Œ)ý_ ~_åPÉNY³ êa±Yš×•'ÿi/ôm§ ,ÂuÎæ,Þ'–®q¦3±×؉tÝ_”¡Àø¢-U×ÍUPá§ ¤øzÆô­ë¦È=ÅÈ[ )Õ@`¼t$ÅÛQXEàìIDXò¤Ýü ð=xâhÏÕ°×ç?R36²m8ÌÄŒŸI£Q€WèÚM)•Êïxá7rÒr÷ËNë]öp{óXáqVVÆ›¯Iãx¤Ñáþm¶Ý‡1 hv ikh•ˆ ro:Ä*|ֳݬ윦ìZ]eý>ÞQ“‚ìMèü®>Mswa4^tC"ÝŠxæ!*‰/fÅ7Ó•ã?i­Z<ÑððkŸ¬pí]åë1•˜ÔAß³ ?—ñP`&÷Á ª•lˆ:ä¥Bš¿ßÀÛ{ýY ·~dç÷è½ÓgŸ¦—CÅz@õÚpy‡†â‘¤¶ˆí¢YàÚú¸­7ÝĶ '»³%^•“†?y£@–•˜i§êºD°™€EE[eÝiYV$uçŽûàœ4Ó‰_3ô³u«üœÎxÊB5¦A9RÇã¥,[o3y"f%n%uÈå€frƒy¼kØÅ¤ŽYþí_º+&ñŽqJ—{wfŽf’K£™ ðêê.11™Öœð+t½’˧1›¯ìüºw’·Xíѽ6ûõs¬˜|·÷e.#’ãw!l%² MìØts Zê{+PëkÍ?¦ §ê0¯k#8r©ò_CÀïí‚cßBuKÑ*x‹•´]Ùc.ÍÄ•…ê0Ûœ?%žQ«ág´?ÄÞ‹ŸÔò_Lg†ØkL^Ã>Y*©Ò…úê Înû•âBì?ýõ~"Az/!Äx20“Ï—Dâ bW—zäÜb-¹ßû­¹B¹U¼ ²ÿR ½‹×Ó—Nô†lŒ,HÅ<©•¶Z «:^&Ž= aÏ&ïv¢Lå9E8T!¸ Ö.ÅR3˜UßÑVy7çÁJŠàKy]o¹è¨üsPÝ•í½ˆ“Ãæ87È™?U>éT¯ûýÏ!=™]8žF¡þsÛÙPŸµ¾îä¾v6ÍŽqR©Ný½­Ït›KV/V ê`‚®úÏHRúîxmYdN6è[‹êƒ:‘®Á)ÛüÉq{èŒB¢ä¹‚èùáËjèbm“òkúFî©pϯÙ's‚<(-¨Ýè_šë¢_1­†ò¬)%A=9¶ád­È¯íüåæ—{˜É=Òý×À¹!Ö9í5¿í]wŠ­¡$”‡„K¢úìµeºq3º#¬„¶!Uç¦îFüè|)ª…±[ÞøÛúsÞ˜ÒÑ.DV¾|)'yse{uÿç<ùf6OÙì’>|¤Æ:¦» ?t™ G7M:©6Ö ð­ïð"²Â2ãV );”'Šjsû´·=$5…Ñøp1B0ï§b"œ Èò&¹Ú» ÉÌRDžù›¶ŒdíVG5—gl¿âÛ#YKÎÉÔfÆ$“RA”6W™Ò¢<,ÝÀÙ}iÄt°?â_hüb¢¶^¶&+D'À'-ÒxH­ï_EÕCÒÐQ&´Q©‘vã¨bY{WĘ«Ã­QãèŽÒ3Œ{}g CI±·BU Ê+ÛTIÏŸvl"ÚÃøÇz†±§OY”¶bwï=Bxñ.L4 ÙtòÜom‘B«]W;¨/¦Ðz—Z7Âêl“~üÞ§Œû4=‹‰DeÈ\RLg§«²å&§=;ÂJ`îù°½ó< Ñæ Ç*ÞŒ³q„žÑ¢ò‚Y> í’ѰRWt «È!¿?ÆTe˜²î\¢Âö{,µ‚‰J|ÕìÖt] =#X¹ãç2°>†V_]A‡vZ7Åÿµ^’€W•«üžkOåÑíOóUP@ã ÷ÚXèôJ·ôÒúíEÆÙDìR0wͪ ƒ3R™Hs“zÇR}’FòMÇK}éÐÒ¶¥õÂŒ¼HÅ­Ri:î8–YÀªŒòb)B3Þ†žÇ½ÿõ÷ÃàT6Û û‹Óò‹¨©ü9‹è—õÕl8}Š¢ƒ]õÙ!õ‘».!mña³3A ¸mÞ§C­æöMÖ0KÞ¤°þƒL¢ËÕ·n¶³¿µ3aÖ_£•Ò–ÊÔ…Çž4Æšrmùßÿ¤c]Á­9ì€ £:?Ë虚g7¬¢7¦Zh爰þ`ûf!A$-ZòÐâõ³–‡®5ÐÉtS÷" —ÁÔÛKEÀ÷P¢~ŽþÝÒ¢Ž¹h5~«/„-¨Áu­1Gºí殉-T›X(.¹¶èÆ)'ö’æ{aÁ¦¦šŠwË’6ü˼ÆÚz® Ä»ÓàNݼq3ø‰½!E–B:‰xúÀtkg¹­dï@;˜†UIš‰w€ÏFÙÐüµíÓº’v4,0¾}Y*•zDê¿¥#GAj„˜?Î>l•«8jûÉ“Ÿr ”çõ™EÊöëoÀV] WjhÞMÓµ’m¿¦Ž³blU’®Ë#k9¡š \·Ap‡Ø¦7ŠòpFshhv$Ëñïd÷JƉEÿʘÓutˆ¥¦}ñs©E¦G-“V—xÖÐß{§ÓPþð ýha Ê›ìî'Þ8>-9ið4Öd¯ºcˆ¬…/<½¿L sZïÇ÷ˆxÌ:«¢^f ›UáÜP6ó×wŸÝ¸Š%ŽÖ»@޽‘±‘ÀŒHc?q^5ð«sÊ:#RêêöÍ!ëŒ{Kø‚}/?J/¢ó3ƒ'§Ç.‹·!QqÅïâ z³#ÁB—Ìäb¦¶¬èÕwrLÑçv þê.ÇÕÅ–AC/YZ¢Oí:¾MÈ@ýÃï’úTþDv%fÆni« yÆjd91dOðê¾Ó.xfïÏeUÒ E[ØQ€¥`/ök[²(o_˜Âº|ÒÐIÕÌ{ÆXïd‡¦(·+*M ]|éñ1åÑìlÝJsÞ³±ó£ľô&s¬üçP§M¯©d MþïÚ&ÜÃU<¹Vyzm'¥"tu7˾Šâ*1cr ‡ú—ãEVájœÑ†z’j¨NWº‰¼ª†]©Z޵:ůÌwhÌä#Ý}ÝŸëŒ'V./üwÙÔ³ƒ©]Ü*鯻uøZÅ¢òœ˜­— ¤¿;ü—¢©¸£“i§‰8¥ qÐQY§"øN {šÇCÿÂGWYDåå*aõ_bù¾¢ÕKö÷ßœú*F)r‡U¿¦ѱÚ1‡äjyôÄÌèH[Àñ¡ ½3~ç†ÊxåšM ¼,¿h†9Õ4ðÄ»i‘ls4î¯=¶Vïà9 ^T±ˆ`' œÞÍ&¯néü½zÛÅ”ýcLrœ?rXD6Lè”Xo1ò¥…©qF¼¦ÁçÇàÍ›#e&K7¸*¾~,÷[c€Ãå Á>FÃYï{ŠŸ÷/kÅ\( Uƒ_Îa}äB•²ÓiÿÝþ`³:G“4\¯ã½³¹: [ÃkêoQeíτdž,–ÃV^!ªìÚý`:%¤—M§§8®ôgù¬’ãÃç ãMšn¤æ*þèúŽl—ÝOßìJæ|p„**Sš¡«{#C ë¤m´’—9DÓmG`µ¤'ñ®© ÓÄ%×w׳Áþ¬A×Î'Gl8<½ È÷;ãh-&xRЋÀüï{÷Û(AVÞv]£X•½Í…oÊ„H] £ýë].6à1kTÌ$O7Î^*2ªö8Ty¡Ø!&òóÕ¸ ªìH /®\jE› 6=Ê^)ºë¾õ¼'.§¡{?BAÃ×½ÄÏ;ýÑ6¬«ƒzš›s’}ÀQ÷›f°ÍÄ4 tÔì 6<¬áWr!܆MzK”ƒE¤¹/hË“0Ê>*¥CÂë7xÿâeÏŽ:õp†ƒ*¼û0–H#Nˆ8ä $?›O«Ó$<ÕâeiNè£+U’ä\TBÚ¤(ÏœåN0WÙDyք‘FçPüqFóA·¢'k¡46u f÷æû¯_æto’ ì¨š%N=±ÌòæfÌkñBĹ?¢u ©õ‚/šîçßX?ŃӟEhÇ ÉÅ,sKõwÖmÈwìl<ñº¼´¢b` ž¹ TÒu}ù(-lNÃù$±ñLs¿ŠŒer)©@·ýx±[/°¯ô‰ƒ£Qµ=\Q·¬Ú¡ I_iqçÚÏ*°{ëg!4–sæ )Y—jz0`©U»³ÚÇ1iîCkã Õ/ýÏ1•µöm¸²3zähP RÞî.‰4~xp N˜˜÷rÚEï…m=r½-±{‚ñ¬¦øUœ(0ÈŒõ7!б=”XkC×9r\žØWoŸ®9´»q1ÇV4$^‘àÜQ Mïŵ»~ï–¹EyTÓ?Î78JPkG޵"§ð jvý£ùKApP@Ÿ9.r`j\Ýßä$©{)ÌŠÍt¼øÄn%¨ ïYé)kç?^ öMØÈ¾ç<b¤F™Û#‚û¼Îd6At$ºóÒ·óä« ÉÍÿf‰¯fðйL\P¸êü!©¼·>ŸJÇ…šá†ðV‰“èkžZÀ–ÛKø©¡{ÈÚÆ>`xk¼ Œ’ÅÓÙÒÈrµ¥ÓÚâ›]!n+@­Ø~}8XgI'A­QÚ‰.ï{"V aÙ꯷»¬’ÕE|šåxÇ8?6ÿõF?•Ù‰B¼Ú#ʬÂߎæosåÓŒ c®§Ì¤4Ut=œà'ðZ /´R]ÛJrÛÊ4 ðPÍdqR‚_ﻉª­þˆ¬¦ ªc¬âSTTü¼%yB<`n¨O?ïÒµïà2 ]d‘+Te§3‚cÂmL¨YùÄõ>Ü‹×;¶é¥É½åõ´°¤œÀ¶_ZmN¥Ùôéü*w@!ÖÞ÷=å5Z”õÜo’I5ÔÙôþ¸oS5ÙzÆå«f@>5wRÏi¹mŽwÉ »E´zm|“t;‘R0ƒøé<,r:ªÞ¹^ù­¤ë¾?mîk™£ßÊ0É¥„ÌÛ7@‡ŒV¤_©tÓí²­¦wú¦BX\‚pÕPH³&ØQâ0ú…5Ÿr¹Õvèù§±š=¦ò8—"!m'Ø bjf]$ÖßÚFW“U—1¸éÞ#Ä¿˜»«œßÎ5uù8ãG–Mu” ß” ä¾±{àdQâ•6¸óí!}$FmÀ~K€åÚ$”çÉQ¡]?n+}R]Zl5Q•è@„±D§«´†'g®˜¹N¤Ã½K0‚sÝDV* £çd1×ßuÓ¡½ )\ÅȲR"¹ytI#<6uÉo«¿¹$£)¾×—Žbõ©@†;úµ]º'+ÃNõ@ü)G^kÿgç=3W€¡^/˶ùjƒ¦ýØ4Añž”|¢—1ße€±Ž`à{ð©!éq×cSžz¹é:Ê- Y 8,yÓá „4BKÑ$ÂußøŽÊ¨©€L 6áÞQ„Z²¾8è†m•øÙúh @+ CÚ•½\uèk;~½(rÀÉÎ @$%½Ö?Dº¯Åq^o"eùÀ$«a)¦(„[;RÀ–ÝX4ö¯iía9å¿×ýIÁlà‰Åܨ«z2Ún¤œjíÍtêüÁ\QÃ_&v.³g™¦±=Ku&n{ö‰çûl rÙ'3®²Uð4c׿O?ÜŽH¤œïLbŸ2Á[â.?Úy6 ­$9f“ ƒ@S“pâþ1k‹ôÕÿÑ¿¥?«Iw±@ìˆF¾ŽVäàËbÀ鈦(™õëÉ¡?ÊZäTy!ß¶Ì:fº ÌÄK­_\sör¶OØ…nÔÑ^X™-]¸…=þc «ƒ±˜?â@l® tÍ(Nô)Þ¿Ç“Ã| ¿ØÿâPõp£w<àŠ`Æè-PëzUÒ{^T´aQ²LðÖoã¢ä çü豂ØK'šð…_9‡&Š“_TN°b Úú^žñÆ,i49¤}¹ ýËPÞd 6M5 h(yfú>Ô`6:Á*C6tÊ3×ú"ÀçòúÿþæA›é«››$bF$õ±­(‹=Æö„]wGE}8Ôµ¥nãƒw‹#Þ¹V™ÉõR, ;åê$IwGó©(Bhq¹åÕ@À²ð|Á+¤0—^9ù ßšfŸT?§ši™Ããçÿn³ª¼°‘nÖ·‹ƒªÓü®àd¾°äòQ\êñ‘Amv,ZŽIÜGqõ¹9J½J¿¿ÜñwP2t0Ž‘»Vr’÷¯Ð¼Çà¤?üJb®ºäˆz⹺Óy«*OÐ5ŒÙð =;~y5w냢Žõ½Bƒ©zimÅËŠèì—ûòWõô"óx„Y±(qØÜçS5‚ßÌ yæ'H­§ƒÂ3bfvBûh8/êßa€‘Kk 4„`ŠäiØþP¶ƒ>þù¯ª£1qO?n#©Â?è0¡-Ï&°¾ä(z˽/„‰øÒK5úC 4£÷ œ{Ö¥yûÑ´f¼ó±9?xv›_°,!ÕáÇY¹Ó†È”T@.üê QP*øÍƒzúç`)ù¿K¿dÇÎz[P•šM:ªwæ[k ”¸N±ŒÙ .j›¯rÔȽ‰ØbnJ-›ÎÛ}Y¼~Ûÿµb¨ŠðØ×¨ïC‘‰ æOwÖå÷ÅókÍ;ë· ¤{áwøªÝužÒ™íÊþ›$—ÉuÞ¿îÓzr#:ÐáÆ ÿÇoÇv–:‰.N=χ гl :¬ÿKhCVïNŠ4º=õFyyÑK"¶4ŸŽ*þuÒ_P¢­NÃþÕ[GTý ­˜!Ó+—QØåÑ—iWpÜoÁTêCÐ9›ýfKìä-!Éž›#íPâ#‚޽L°-\-6Æ)vÀ6¹ÞY§ݡ럋ß~YÄ›a•ph #è±™Ànóž„èøt…Íg´A žÄt ¡CR¿ŸOš|g&Êj ”¬X]Ž'TršÙ;)Íì‚Ý÷¡—/ãÕE¿ò þ-}ã´'û§2o/Ô~ª>‚‚­¨­êAo…“/Åv’ÆÁ‡¥ßIÈýXßÐHÎ÷à' ³úi¡~ÀD? ú±¿PÔ„ ‘ÇöA¸[küÛ‰9&kòÉ2)-¶%N›+EzíÃQ vKw2VUãOC]PœàˆiT°v±SŽ+"¶‡zá$tñˆÁ¨M1mzªö©õ%ŸÝ^ÇJPç\Çù¡·¦COÍŒ©sã(‰9â§@¬m¿æÉô¹õ”3ý|õªÇ·$°âÌšÞ"ßZ:Ó!¡?ûÕ[ó‚ÈMËšU4F|#Ëp,|òx²÷6Ÿ´ 87®Æ÷ùMˆC²Ññ#LÿªJb 3Ǭ£¯°‘¥pô_DÊ*¿eí&h;f-Êjê*îß\V7JZÆÝÀÇ‘”m7ïX1hÉ €‘QÚfK»‹©C]–[;þÌõ„@ºfKâF ÇùÕõ&åò!ï³·{~WOfÈyïù´ÖN$‘¸Âw™4öÅWK<°œ?ÆØ;¢èF m¾Z¼€zyãÂô$ÁÓÔ~&¡2x®kcj;xUé~?Píºd¤?‡ÏÒ¸æ5Ze=Å w2nzÈÜXÏÉ¥ð,e?é±ÄMæÊ_·kS’'"ýi|6D*ᯩà% ?×á4!Ô‹õ±&”¾.¹üUŽ\Qã#¼äÔØÙïPÃŒCµ¨ÖÓô³q׿¹Ç0G±ÔxéŽv«2ßq!¿òΞ!ªWCZ ¥Ò/Om3E¢Ú“ˆÂêt ŠÄùúïQŒym§ŸJQ;(X‰Ç/©üºc«ø›æ5?(ޛ羦í9 ú¢±™—™±á™*s‹avOl6ÒA~—d~ßµIYó@ÞQŽVv*+%8é"©b.í2³Ã®Ùý.ÃÑd|ì—r³¡•ÉÂéu^&rðÇÛ$ûÔ¹“"~U¢çûöïG£V97h2:ò-µpqÅ¢ÆäçíæpùãCî¦'ïj†ó°™¦Ìà ‹ýó£C…Ÿs:Ú÷rr9Ý Uð±¼w+µNˆÏßk†B~aÙ÷¥ü(ƒ"Ýò€Ýƒãj߸˜0Q“€çñ ò;CÐú¹µž‰Ö‘_ÌÀDÃø+º‹+dzê÷S7Ÿ)n2 Æp&âN¥¦:â_øŠ¶ÑÀWÊ‹«ŒcÜÜ»?¦g•h' -4Žõ\0 Úoa 8x)ôv“iïOg¨9ù2e¯vf-„X'Eu½)ß@“FsW ÍS¡ðº.b…cØfF>öj<èÇ3ÎvD4Z~vJ2ÿ?]œS0€–lÛ¶mÛ¶mÛ¶mÛ¶mÛ¶mÛüºûž›y˜œù;©U©µEQ=)4,u˜@¥œP™'G"<¦Ñg )_úY 9ªx„˜c´¯I¨ŸQEïåT*…ˆ6¡8ñÕÁf¿œ þ‚tê^…’¡öN¦Wf15õTð¨t^“U,å®}Óû8BYYüi,àÕ:j~^ì­cPùáŒÞ%õss k[—±ØhìEÅ…µufBƒAå\B¤HÌÃÕ+Z'QüZc¶#æcS]â(‘ƒ¹  ZLdžøŠ ,6¤˜žé¼äÒ…”ìõŽßýâ‘‹|T±(²$•[ ‰8Öúîy_Iø*%øÃ_üäŧ=³ãÝê6„ZK•¢5>Šë…åUF¤ÐQ,¼óXÑV”@™ùØ»væcZÔ‡k‚Œ¥Æžè’G(—b "HWb·Pƒ<$ io¦S¶·²žnªß¤5;t¶xPOs_¢ÿ-–]á7{êzÉÕØ©Js£ ½Bk"?ô7â –2¯0JoLÀ/Uü! ¤ô»ÿ¸WÏHHld)ý.àSÀghë2å‘ —ªï6ŸÇuõ±è‚‹Y0é.ðÖãÔ’JD/ßžìêj½&”†2…@&jp:x/І“„¾}ÙÒ* ÎL~0[Å÷Øñ]ñÐ:Uu³ŸÃÅÚb‘[„½楪†xaãÌ÷ %Ö­¨™ï»Ô"‹n¿‰År¬Ž<UŠUàItÿIÅxŸeF¯T†›¾ÕÉ! Ï zzrjÃsDˆ8æ^вàöî²ï  ïrVYÖŸ/ØÆ©¯»ª|¿•:•—òNhûnÑß&ÈŸx|œÜí>¡Rjg,“ƒ“dZÒƒëHW‘‘~ÀšÖÊL3ÏëÁíR-š=µ"q ¿¡›XE¸ÔÆ´AÝYô© ‘Ä/èöÏ<ÿÅÓ±‰ä%q,ó/z¿N~O>Õ§âÎlð‰ÝönÉËé äÅÒtÿªºú…¢@.ÖD¡C˜åcÇ[Ãc\úaܽI0²† oݱ±.ÆnŸÇ1Ò€…8‚òHD†c¤Ûyh­ŒßÎhuj8ß<Ë€ bÒ(wÌÞ¡øKm >~a{a)‹ƒ=ÂŒÛñÒ>|«ãWµmZ¾a:G˜BŠ‹Ny\²±)–ìK¬ª ¥¶-`£1³,íxAz?jç€èF±Jfd5!Qžå¡j•ìàä’kµ3ý5Aþìúö¯•ò‰jrnI½'.ñ"Iáí=*zrCà¸Õ 'ìÀú`¯Ê.L‚M6ü ü7aw}ï÷ÓbÍ9d¹99:Ûiõ^[oÏÉLx«iTÁðΉ…Þ8¼½‡Ö}7l5º ]Ye]v\¸jìÇÒÒ¹Åàr©Éf\†§ç*“1$ÂÅfÞo5.E6}>Vü,ÌIoÿp¢†6Sj×À$Dl¡âð7\ ~¿ž®@@ŒéŽ"¦s#ÓIÙ¾0vÄ)˜¨3vk I¨àa{ÌÁÕÀ³ˆ©¥ÄU«gœ‡}ÿ ¼ó‚¦ë½ïóÒ(©ô2{'¥ê¶ö5F‰-)# Þžý»õw¡5gP .Ìy|Š"¬¥”Qž í[þËnšágT±¦OÑ ¸+Š["\͈‚ <ÎU ¹ª£•î–Ä(Ê5¹OyÄ-~w¯Ã™h‡Öù<æ,±\ &(D¢{2sxö&É4Z‡5 í¾1mû¨Z…ô<·;‹õœ(›4l $$"…L¶tv›QAžleÚlcL,èS64,ßùÛ[î•Pœ 6™3÷k¥æ¼BÌÒƒX¬¯T'~!»gQ³3WÂ\±èé*Cy¿$¶• ÙORóþú0˜€UËíþjád™g¦ÄÝ©ÿ[yÆšis13ׂ÷Éyÿ±ÏžÏÇùî‘'t­wìsd)²2žJÙ +ø0]sq¸éޤzùØ~Ñâf@®ÈoÙ}Ú*˜!Œm~ŸX@þ}"×× ŽÏŽGeO¹+tµ¡>ü&*ðÓ^'~*³ðê¶ãVQ%qþމ̉ð¤øDj–`¨.b -’Ύض{ F›ÿ'S% @å'êÞˆÏë^Ï9«|ælßÈZÅo‹Ì»õÙŒ>:µK˰x¦;­†2!ýmˆý89ð¢Åi?kË g>M¾íîkËm’SÖÅu¨2“7ÄÞ°Ô`ÑóÏÌ¡CUø0"ÊZor^9¢9ÇÌþ猶?u’S³Ž¶!q÷$o‰kyÁÃ%KY¯˜KÑðá<*_*áDдbªÕG­¯VcSZN‚ÁQ;®#£—žÑÉçÿÊ\üzº,¾”ý ¤:Ž ÌgÑùDNŠÊÌqËþf¼Qêgý€©ÙïU+gï6À}»n®$†F¸ágK²¡Ê‡±:ºâQšK#’îrS¡$¶Ñ|(r Ä  ;ÓŒ¬!Õ\±ÔGS²Ý™m:²ÐwA0ÝxÈ^€v+œ¿¾œ/g±m½ä*t„ËsèhuÆ#ëz+(ëálWÚžUüó6~¬Š7޵«C€÷éiôd°u9‡çE<êŽÌ x$in ™Ö[þeÿ ö?2ð y an†Çb#²’]â!¦V)Bà[ OHˆp0»?pL·ß‚µd¥†9¶Ðsk׃l¦\ ëþù-it`›Ñzó~·Ø$n¢· ÷s)e56y^s} ¢>µÝ̇_ 'åw&pû¿q}…K'ÀÔ mNÔgŒ |ÝLž¹ðWÄØûÚ°ð‡äoÃÒ”F†Ï K“©xÅT“6sËC5¹óSV Zñ‰YÒý`€¼ücM7úà„ù‰uÚSDÎ@˜žÜóÑô~ºÈé•“Ú7D®f+h¤êäu<‘­»8ÌMi­çpß`ºŽUšÿæâê9(ÈÃ.¬6ˆä"•¶B!øÐàÊÈk jâƒs^ìúˆè½÷[Éÿn`T5¦€|·ÌaAø]ÿ¿ÃXàËQy$A¸‘û˜ÙŒ“;¾/àöù‡Ñì…Â? E·ölmÍÖ¶Cì4 âJö«é’Ín L*¯œkàÍðQôÂÐoÖlµ6ùI”?ý~ zÕ‚Gwšõ*p,_rhÊäm &&ÂÕùüQT®‡nˆ”ƒ­WíÍz.E¿2zÿa £ü@~‚̨kØ0RlÞjÈœuÀXýRY¥˜„"gÚð×–ö„uü‘ÆôÐÝØÇÃ<ø+òhÒóÓ~bÿTg轊áI¥‰=Øžeß((¨q¬~Y…Ÿ©£6rwf>)hWòÞR²„íE ¤î[Ø¥;¤Äöw™îi ÷VbòNör4å,àê YåJV–˜fS«¤zHo±ßîepéº`Wfà ·Dð?í±nÉVo˜Ä!™ËÊ«ñ¯ð7„íºðóÙ8YÌŒ‰€íé&,òdíÀÛ@N\ð_¹‡õ§çx³678S·+<±!5ϳ„Y%2jéc)ÿ”OÜÌþ~ð8VUE:"¥ÔŸ½A¦^žö_â¢Wzø¢,K~íU@ãÅ· KÜhœÍÖŸr‚l¨0j.w•ÊÀ²ÃÛ‹ ã-:¥‰Û?Èè³1¨Þ)Œ¢ ‘ÖM:œRÀ˜£UìÝä{˜ÄP‘>·œ´cîÛ÷¯Â¬žÅYè,ÿ˜³ð„óÇ –2Ǭ± *Gvª¼&÷ZÒ¹"T.Þî¸g–ôܤÅ*“¤4ߟDKAü#¾7˜¸Pæð*°§=ñqi…i‰J’ËŽïŸ}Y©ÑøSÌoÚû¬[ÔÌ¿`õvÞÏ}-›Êugá+ÕYV´.’|>èn2«Eôù?ò“û¸IÙßTù(’/¢ۅ†–Õ1(åDöÊž5?ÒFv•ï,$û•üˆ 4Ú£…)%@®à#V«GôÂÊZÞïSû5øþ¬ø¤R:«zso;€ˆV;O´ÙKMi·åWlÁæÚâ‹‹ŸÒ*OçßÌ‘Ê{®»ŽHæÛ cyࢡÁ¸!JBdPS¹ÌBD6þ—ØTG‘/•ÍH\Δdñ"T+šÃ ËÅÖN¥Ȫ³a&K¶”×ð–Ú&ýàŠW`”ñÆÎò Ý!,µ n€[µÙ;„1Qÿã ÞTapÊ$u•º4Ü m063ň)þ°.%𥉖ý`P¯hB¯â¤«ðWŠÊjÀQ²ß^ÌŸVp/6ò2•§ˆÕWÚ ÚúLv-Uº½#cH×±`(hÄò±$ ½E–Ã13¿U9[¦h=l ²zví•¿-Öû‰oEEMqpF §pti,vIWElÒ>2fTSŒmsœ‚ü”/ ŽPkÆÍ™èÈ%$§@Èï +{¡]$›õMe¶1IöÏòú.ν8«»ïØVÜßdÆ-ºã‘«P­’Ì8@ÉGЃš´³ò×C£DŽØT¢Ÿ7Ðû“ÔÑ#_B€¾}}G}’šõÒKI•Y9š”TÂÀ.í¬*ã6>/ñäóbáŽÞÁ°*‡õñ6¦ýt.¸v«›»uó­µ|@ºàèâÆ Û`E©EsûÞ+Y–Ñd÷)uãD/°ˆæ;6”†%“ÚAõœÓ0ØŠÄm®ŽìÌþýë,Ä¢ m±rÇV²êú‘;ýöÛK• tlîQX#ü훫‰­úgÚ3NEp³$¿o•¢H^›}a•#¹ù¶ñ¬9Ï^œs{#ÕŒÕñ’k„ËL8‰¬!ÈD™'5ÿÂnüÐ!kœ21­¼Â¥½Âç-„ƒã|ðtG«ÿSA8vØìzØ!Á F[ò"‚®ýk2GÛlpÅ_KSh¬Ð¤ÄÑFYÜ– Ìa×qé_EcÒÂ[ÿ&o.Sµnþ’¢g»Ê'zMòâÄIÆÂƒ¹‘3ÄÚW|nh}$Ï(ÇJÕ Xì.i÷:b°²ײžꆚò¹31Îyú¼Û>ßéÈÞ¿èø´@b®ñ~ ZÀú ±ãšHr"Rzµ§*2Á½ü¥ý•ÐÀé`‹Ÿm§98P¸(u°ïh+ç+JÀ¸w9%2bHÿ<Ë·{°ŠïR%Z"Háj>Nºüp«Ï'ãÎ-“ÔÖÊ"Ø]‡ Ra ohQ|¬–åü7VzZA´åNÓüß ?€Ê‘ÑÈU!-}F)fÖÇÆoX-{/ÕæzŒ±$„_î–Vê¨Ú;½Ûåô”Vp½ÁX4c.é`„Ev•ó5ج¢Rêëb™|¹rÿç·ZrEÒócò_Ù쾉àö~~ ™ÅR´’*ßdV´ùØqPâ窗̪ðL gdÿ4‡åUèèJ>&NÀ½±¢K1άj•@{Zýôä×ò‘yŸ üi•¡,VE‘CµN·Y‹Ñþ¶Xë2ÀÒœäëNÛhâêbÎŒUÚChxU…u‘½ìkºZ#šu¦ÌœŸüMöŽrœIâÉëCû)lnñp³ýż<áÌkJÃùàm^Žù0Pn%Î.jØÖ‡ã׋ŒuBúmÎa{:¤ìndï–4🺂­Ÿ?DöJÖ-E®‘†ÏÝlþ†ðÆlÎGÝ­¯BÊbÅ4ǛЪ`ú!ÃËÙè³ç­œ¯ö·½!»f[,jÞÒ=£Jnd¢.¢Boj͘Xñ\…ÆRÞJÙ{CDrë‘˜Ž‰¶!€Pvo«½ÀøÐükaL[ýÌñ“Œ½qy÷ û¬ŽP‡g™bé2¥JÊðdÒUG’vŠô‹Í.‚Lýª u¸Â“u¯Ó»•{"I ("Œá›D±Æjk"*Å%4Ëñ·@¨qñTÔ!º7ùç&:RÓ¾¶óbëä,kéØLШÙ;Ÿ£ze9³–×fžø!iÔÑ¥Ó>Ú[)¼QÄÓ¼]òµÔ#:@ô½VÛV$™„ØÉ/Œ'ÛZÊ0àkkÚ蹎ÀÓiÀKï?¹çwÜ®pX$ ö)Š&«–´‰´+$ù]\©¬—#˜ÕaUler—É÷nÍi€ÔÕæ&YR>Ÿà;¾UåÎ^ã÷2õ$ ¨•:úèô? «q-é:œÙƒ}Õ¶˜¡GÑ›ÃÀx{œÂÕa¨F²jýS¤ÇN`¸§¢ÄÑPsq÷P+ž7qíóɼYíÇ]°ž!Þ¥jÁÇ\Ü66ëq{Àó^$w…G¾¨UpíÌà£æQvyÛÒ759[ÑÃÊöQêKúfžñÊûSœ.šo®A£Búoá¬9›tuÝ®tH{Î׌zkkWVO"½•l—UúQ—š*×]gEà:uó€g“¢Í±ÿ{Ò–<ùÀˆžãÿÔ¯x·¤y¦%ç\7é‚1"_`Ñü*S‰)&o¯)]•‡©Àמ—sÕi;-·Ýé˸ñÜÙ÷ea꽊J hÍïoøÿ^w^õ¹—K4ß·m‹<´ÄûÑ„ñpPV2¯—áŸUçÕp2’–ˆ`b˜ü¡ÄE$ÐOÏvPc`kß1Ô6­J‘=ºB{n{MůþwmSåYêñùdÑ’®M×JË0˜“0gšúûOùݯöÇèE@hÁ ŸWªŽ†Àùô¹h ¶‰±flŒ¹®¦ýòTö”ÓŒQ¢¤Ž³ÝW <2Ÿ¶$µšŽ’zQhCâ(‹F,Óý0Ðèg$Osv5SfF¼øÈçàj¬g÷8=@‹ñ½33!§x‹ÒåBî„Çl#»°ÁBiV@Î]ùÙ ¸‹y[§»ìPSô$±“ì9ôm6ºp@¹îò8¶L⼓3O†•Ý®™¸qÚn½±ø¿+ I XÞ¨^ýø™„PôíúiÕÎ#ú9Y$Àù*™Se­fjZÑ”ùÿ“ð—eEÌ#w_Ý\ó»ù?Ò$8™³‡þû?g(<Þ7¦îÕ²nÀ¬,ŽÝ%æ°Ðtv±1«±pË"'WäwÛ]„‘.ʱ0ñäÑ‘ä2E ñŠëô*÷S3™$¤gƒIùð0§Dy»ô×Ç{Ïñ× ÇnÜ' ÆdµJà@sS…i s#¨DoU3`J )0ŽnŸ}VËMË•£ ÅVšçPóÛhþ®GÅkÊå6¢YPu“@­yK-m¦æÛ—D¯ÇUæ ÍÌ›‚Ll]•§˜c¸¾~ÝÛL´Bn[„5‚NÈú9p~fbì\&‘öP4r¿;CÆz㞺ª?`îKä÷Ü?yîÅ”ÙÑó…õwî;%j…¤3¼õ}q”Á%-Ö][Èü3#ƒ…TùÚ–C‹Ô+^#s£B#vÏÈé(ªH ”£b¼\íòîQ1ìÉÉ]¨0¯?¹­pa˞ݡòpé‘ÅÁì ÞÅ;k 8Ù݇"3(ÿE qAÒÉ ð¬åWuWüæÄnq½ñàYçi›Š¦–ã¶\\ô®çëF Tåï^¨ÑÍ™cæÄEf.ÜùЭC©D="Dé¯v©!ÖW{‚g7a½¹0 gÒq;P…>.X[¼›¤GE&¸ò1‚þ€^Ð,¤5hðÜòþï¶oÜ2•;®”LЕA ýÑríó XÕßU:ª5¯*8 Ë댕ß_z²€Î¦¯Ž÷×s)©½?ĽÇg '¢jõ‘ˆ!ê KS!þô Øûu¨xôùAMëIêÊ%ï%¯$™ìöig\ ø:jzé«"CˆÝ«}ô9½¿WñûÍæD’•úÙEñJT¹@*ÂO×½´{í;gÚøËµC;Hþ¬lÛecúê_ðí— 88 gq‹æ•/EOéQrX¯¡ÚYn/¢ç1ÔTðì¿"ÂÆ/Ò= {a=¼ùU*d–JÐÝ.¡4äwîH`ŽW…Òžš]ÏQŸÁÊÛ‰œù…"JÈñ´¾G~Õ7Œ¸qg}$jjØí‚€>»ËþêXdÒe(leGÒÙS|7V¯ÞT«¹cåÜÎéBÈ ø ÉFn<¨OŽÍ&á:ý°úŠn†½–^ß¶q¨`2z—l>:œG Ãõ¸@.P•öª4?’CSH`ùý!ÙДÛ'g¡B`ž_ D›s«¾³Ä»ªQšžõ³Yë9j š™úêc^ȧ†)𚇨«èÈkXvƒÏB DÌl縪w¹…ï z8µwo©æ9Úδ…eí(׿’Ã…ÌtT“!›dÉ=œ†bžÐ8vyÚDË ÐT‰¤ˆv‹¾'g‰(^¡ºp®uBD½3¯€¬%IÉlŒIàYMеýØb„£,g(Ê89hÄø‹ 2z3Ù\Éò ? ІÝÏê¢X8B¸Ÿqk\#†÷!Íý-/‚}1œ‡¦WÅ4u+'Õ°Õ½-Š€k 3_gŽ€\#$ú¢3ÕŠ _OÁ•](-˯û SÒíK6ôO ¢&/´}nc–¾¬ò£õ1XͪBº¨˜[Ê+ݽ»gÝê)¹vPˆt–ÈÄ„Ý~áL ¼8}'¿ÞréYêTu˜¸óü:ÁÜiîgL­ÖPvkíÄSø¦'r@?YR°QެíÀñ2Tk5ëJ7ÍB¢ æ,û»=uæ;é°ÎËÂ+Ï\ÿÄòiÍqß·jpÈóÆ‚È`EÆÆ—Z‚Gýû¼îÿ©¸Gh ‹€³ûF™¡Y 1*jÊùšÐ­U>fÆ™¡ôWž±v¡"8Ññà¿Fn ;Wå°M)5q´]1J¿t¾{à7·>{dà9P°VñÀ^šú'ªª³"XÆ…î#:SOþ ©–ïk7Ö©=ª÷ÁÞø~³¤¤/CKÓª:Ø|yl4˜ ʹۑlÚXï÷Tîß?¶ -ø_/. ¥ Á¨)¢ªÖ[}s?¥iõ‹a€®jÇB“²m2@ÙÔgu&åìb„¼‹G3&XØŸ'Œ.ÖK毻¬ñ$­:pu˜ýÙk‹8yWŽ5׉،hÜbýLƒy-ENÅa4´ëHPSvRÀà›mçIÀ5bµ¡߯ä:ÛÕˆ&r"ážÇ'ãÎ0þd°µÆ¥ha¼ÜHŸzZ:RÕ~Hk+ÌAÉö‰AÈÔÂ|£µ!ÉG$yNìÌ×»tˆå]øÙmÎÁ'*ŠgGi§@á&^¤Éáºb¸ô{MòQ² ) !„0Ó³At€ÕÆJ=H0LPÞ§E܃Ç`…`íüv¼Xµ7ä¡•&¤öÑ·ô|è~Ñ©æiZ÷—ùЛ“>ñ™ú í;Ú?HŸ^ C›ŠÖ}Ýtw¿I E¡=ÎçÑqÖGß2Bn@·~Éuh6ÆqÄ’¯nzÏØ®ï{(cC¿­ öœFbaŽÔGõ[xq`¾áC Ù@s5WÊÅjzDUôà cÀ~—¡ðZN˜‡iêàþi]UjÃÆ!Ù¢ýP5yÑË%3ûÙü¶ùeî·UŸU 5±C"pÿT| Þ”L÷9 ½ˆF^Úgtl“&©zZË’\F ÖrEŽÁ8‘õ”És¸j#ce®QËYëÎñÓ[µQ’>­ýGÂJefÐBƒ»lˆnc)|Û΢"uÀ<ÎqCK…Ü¥OÈCD›(šÔØ7böŠÔÍ_$¹í:Õ>V¤›ƒfZ£è™jEpRÞŽÎ×ÁR8ä‰/=$»WÒUâ­…£ ×ìôsºôJï>la ^Ú-¬ÀäÁ((çX"œ‰n|÷y)8œH|*cMV—O#¼ì_¤"\k³Ñí~ùc’r|aø@äeX A:éfPÆmŒ"ï)OĨÞÕE¯enöÓY^µõfa“¹ 7ªÂ(é þ9 LN“W‚cUƨ—·å¸%øë›`â£ÌÍ> ›—¯ Z‰H¯)¨²}¸¤?á‚ ¾7³%Iº5»”=èž®OœM>éŽ<Š:ËEm¬Ö¨Ôö  ‹lŒÏe½íºö—A¹ûÞv¤ïwùw— 4€³ ›ãhg£äOl3µzÔ³‹ÆYx†Bc“mm Úøù"ö’‘8OSkëöìR§X¨ùlŸŽÂ3ç½v»KÛ ]~iFǘ'ù@aå5ÕFç-bÒå„ u2üB?il÷O@›Vß¡÷·ëú“nBµÒsšê–ს0¶'ÜWñ>áÑÀxAÜFv±ŒýÐ=ÄjƒU‚ºÙ)ýï?Dk²}:z¿éE]~îÿxç(J{œ}ñÛ”ÛçÒtP[ïàÓ0‘âaF#ÇøÌPJ$ïF3(¡IÔÚÑ±è ¯—ÓCa›óŠF´#(:µ+/vrÇf¡Yó0“z«„Æî¤RáXKô ÆéG¿NW“ŸŒéÜÂÑEœÔ´AÔW´º°âc(îØ©iwc–f;½É‰ÌÔFü™Rß/øûÓ“ð%_Z?ÈÅFWOîýL„Õg;ŒwÉ—UèǺW‹?µ!Q¿aÑr›&R%fwÉDˆ!3¶I‰Ìº²+5×Ñ]ão²ÅÒW÷`‹5R{Ô¬Û¨4QzN[â±G2œãY«QŒq' [8`.0Ú¶á^8 ß{´“Jz\`ˆ P*zž'®x²^îTr5ÇûòÝO¢-(æ°ƒ&ËW‰ gˆÑ  Âc~AöÒ®n ctKŸî ª„4dQêRØÊäþœB¬À(¿¯í+¡qJ£8¥å¥rŒ¢êïÛ%ú pòª£ÏvíÎfPËêvÇgx&ŽhÚì¦]h~z1­ˆ_k̬0´3ïr tr=Ê•$®©0úxùÒb©ÂÚ‡x¢nv#áN¬˜aìžE¯M!/wY!–PÞfª"\!W‡a›Ä ÇW+ÇùÀXN‚ØŸ.[QW{ÅiÐG·ý ‹U™5|R´e\Íñ¢U€‘Û†üœÍ:u¡&ºm>ë•­ü3¦¤>Z81°‹l‰¼Ä°¦Ñf¾æ-’9Y·EŽöégµ6’ˆÌÆR¸`üxÊl÷±EüÔ>0\Ž´­ùÑ1̃ã†ò¶“VüªË Vùò鈵-/{®ô}"òç(kD¾“ÀSÁè4ÉóؽI6¾?“2ŠÔ¦ÎÉ5…#ž8 ô šuCø%ˆ wÝ*³j‹Ç†ëÏl{óZ¢o'­£ºK!·fð÷ÐýyQéÏÐ{£á $4t®×àS‘ íçI•/m#º!ð_ß †…̙ĵp%`o)X!èQÕŠ¶ {K8æ¯a÷ÀU…Z5iÞwEpÎøãp„ƒøÎ.™#Íb°Ñ£´W·‘oG•÷v<Ë ùL])mt=ò¢“4DUpLVALžÞõ@Û MEñöØc’ÄûIö›„,ØÎ¨M@¯Ïž ÂŒ{Dló… ‰< ØŒá|8²z„•R<¤»¸‚„¸Œtm[~®x2¢©@—âã¸árãÇrùò?»‹¯b<¬;{Å¿rßϪ2݇"ÐLgèÉÉ™é"è°yæjÇ×lñærGµÐ7çÇÁØ6xK:²QĆ" À5¿ï£Â¹øÌ„ƒÇ\×q>ËÓvÆ:ÏF»AXcfË0»š© îä-«jAOF•£L@€ íÎåÕ|”rס‡8çóZ>( ÃëCÒnÉG,í±ÌÍl9.Ÿ¹Ø{ú[?…ð\\†*Yú–‹é¨ÖñÀ&JŽOa–bC‘W- "&p1í¡ø*\.4%(É|ýôR¨®ˆ)­šÛäçvýíÇć?kºò"¿7ï‘¿}úd ÕVNÛ"Šã—¾ÒMEºGDS'°åú¸ A[XC)Ö"®”Ü̯< ±·AZ ¨ÇJŠ( `‰Ñ„˜n¢Ü0C3¿E¸S>]ó2hÓŽïYã™Ë°éز2 ëåw‚tËÔÁäågi,9öøÎ×zlÃ7pÃzšŠ…°Ypûa¸ôVÝ]Îý=Ì3?˜[§ï/LÀ´IŠ[3’ǾJÆÚë¥-æ]Õ¶£‘¨y¾ˆóÀ5Œ«,$]°¹ïîJp{dp™ÉãVxOd%£3í­Ÿ4½˜0\Ã}l¹ȈĦŸô(Ð5°Óázu›lb`ÿi¶.ô}ùzüRŸÑT¥Üó*?+fwæ¾™Ô ø“ñ"8\¥ÆÏ{µ&yŸDÿòÅ=¯àª,Àï<«@šœê«ÌbäÑ«B-}+* '?²É*\§Í mHZÒ»ºâ9qáå«'·ªÓ:LÐØÉãÞ£s@ýö ü´«€œ»ñ î¤\˜•§>–ªFÝQyn n·½Ö¾…„À?æÿ“JÀ†ÑˆêyU»J™÷]ZSZl«ˆ!ø8*™t­itùTÚG_Ž ¿7ûä^ŸI'ãºÇ)Ù=2 Ö×jYUTrI- õbÃÞ½Ž÷^J€ÛþxÔWVŠÛ¼ˆ^V'ô ð¨+F©Ë¹´F}F¤-äþ¢Ýõ2£•²Kyu;¶ãn\RhtÐ`¿îÀuúù.‹µOž08P‹‡oMò¥+¡q=ß6˜£øº>©'dDñ12µ…ˆ šÎ¤é´ò%YÙJ& «N›r•vmýSÌæL©óZ93ä×HÀþcî »N2DÕ¹´å€Ø­Uδ3@o5 ^eA3〩?€Pÿ¬ƒi uÄÛ«:³s›å†7v•Ô®uWqÞ:M—¤"¦{<2$u½OÂÊrõRÈÉílPlî-hY¡Ê€­‡X I×.UÈ·,Q]³‰$˜x‘³„L΋‡Ü&ì§öߨGù`!Y¤ªÚ·{°€Ç—ÒJ¸™Êä8C-‘ u^›c½_œm†q÷ÙÝ¢Õ“hbH;s¯'9“Þ÷»ï8!‚´€Íæ¥7M£ûØPý»¶UºûÂ_‡P} Â>àª+íN v[Ûýa³„žór\×oè×|aa ÁyÅÀ ŠOQ„BóêèɲBJ*d\gt*!*µÅ;Ü­‚•èAV›ÚÎòyRÈ£ÁüM^ÍIÌÝ¿'\—‘¯íè,È(#~ÎI­["þ”#K;n¹#'ͧ`Ž=yüêÊç©`*ºÂ~8<ÃÉp62Ÿ +Wáój­öÏ£?C•/¤ój‘+¬ïQºÊ ÓÂístÔ~y·ÉKö*Ýz‰?†{Ç~©‚–ºÒFfNfø'ézÐ_º±ö,²}‚ðÁT=_é;]Sçé e8°%äè(¼Æ{påyÎ;Ž”ðB¥õæ:…'ÑrG¹¡x\ì M‘É•ûvîm@²j™^ã^d/)¦0VOe·0¬„\˜@ÍM+)L®CUý9Z‹ã«¦y{ëKœ¦†ˆÌ ˆ?Óø}·âʦnÛ}‚1ü¼_£.2QAûrÏ@–ÓÈÇ ŠÕÒdÝ"XÅ⻳>–«yijé¢Ê Ck%½FZÆ‚ÄoÍIä0e8D^RáЧ*Ý ßgLPû6%rA@j®)pãÍ¢²bh©‘Ê<(°‡oAuÉ…;ÿ²—Çú‚À>˜Oe+¥n´qd¿`¹rÞYÀ+ÄöÏÔ­ýJÔDZ!(SCçÆ=°w8Í7Þ¶ÿzÅÓç~‚Kì$”Ž9ÁYR‰öFv7B¥çäá¤Qùèml$CG÷Ij†€žÊß}ÍV‘üÉøQÜ 0`sÑS\6ô@Xr*R6‰±ómŽIo³\èÏ"ï*•I^„öå–v£?>*†›IÚ¡g÷Qw&:º/x/ÄŠzkª Fʪ"jM já¸Û÷ªEñw‚I¡&ˆ÷g{œoÝòÇ©@ÚlMrÄìo¿Ñ"„\Ô®æ_{-nœä{r*þFn²‘¹ë&ŠBù2ÝÓ³“Û{X¶"Tó>·’VO÷*ó\å!V„³F{…†WmŸe6âÀ휧Ý(ôô»£fdL¸;Ù‰‰'ˆFœ—±´I"Iv¶`ã¬1î'êª:ŒLÊ …¨O÷»›Ä³·‡‡»În–)ô‚ùæÖür»_ôMˈ"Â)Ët#A¿ÝF§ÏÓÍi£W,«ú©~‰~~ÞþµÍš¥Kç«lÉ¡è öç»m?´;yDbÓ=“«“¼MXeüfBB«n{4!À]YAع¥Yx:g|;‰“†ì/Cd‰W]û—&ãô~ÞQⶬy¬ˆë^ÛŒE¦¹Ú.HËÉÒö|ôo#€NƒEØd·­ÝL7ýà2ÏÖRÌçõgs—ùi7WðWû©Ò ú;0PÍÓ\[_ýÍÄÑ_Zð¹ÕÒ/ˆFQ"b‘š*FC~ B~5Ë0Ð`]¦OŠTg u˜ø•áP’G÷íísü}ÔJ ØÖ|Ú¿ÒtšΫ³qÚ13½ s9.†"z²ñ‰çýCi%ÒH]”j¶ÀdH\¸Â¼2µÒY°±ôš;Â¥Ò„¢Tø²±Þº*ÍÖúÆÎÜ¿º%L,W-7‡UÞ»³’’[hv °ÔœŠ .9G0xb1ú’(XN[zõ:ñF*ìoÔ8Hê[­Ê ûk•d†0¢)Î÷Q³->üV>Þ+³…œC³A‡þÙUÛÿhCÈ馡íxˆS‹|5lƦЖL—äj Ç„åñú¼å…žZS‚Ž'i ”'óð:skÿK‚H›gÍd¬²§.TÍãEž„» (šM}´…Y’«ö»çì1.­ =[r«Qþ—jÅà\ýœ_êÉu¤’ÊsoµµÐ^÷?™eÍ Ï»ªæ‚S‰ìšýæ?œÿ•ã×B‘Úé&–‰Ã ‹€Xõ9kúšõÿøaà endstream endobj 74 0 obj << /Length1 725 /Length2 19432 /Length3 0 /Length 19989 /Filter /FlateDecode >> stream xÚl»cfͶ-\6»lÛ¶mÛxÊV—ÕeÛ¶mÛ6ºlÛºïÞûîsã|ñÅú3s"rÌ‘#VfF¬EF$noç¢êá`¢c¢gä&TWUebee$d¤g!#q¹XÚÛ‰¹¸ 5¦„*B&fBfFF&2B{'Ks BJª; ÕmŒL-m-ÕímìÝ,M,yÝÜÜÝœ]é\ùéÿ)R],„f–6BE-)y BJ y5B €ÀÉȆPÑÕØÆÒ„PÖÒ`ç  "4³w"´ùÏ€ÐÄÞÎÔò_˜œéÿ ÀÎ àäò03'{[B91U!qyUB1UB#;SBYÉÊí\œ¹ÿɘ¸¸ü«;ZB—ÿ±lŒþÇ2þë¢Nîÿ±èa˜˜M-M\æ–v0 ÿâMÊÎÌžý?nSW‡ÿ†þäü>BÊ8¤"4˜ý“íjc#od ¤±·upu8ÊÙ›œìÿÅýo'Ë<ÿM5²µ´ñøÿMþ¿R.Fÿ!dgþ}ŒÿqY:‹[ºL-]þáÛÅÉð·à?k#0µtµýO9àNþYUS{;ÿ;ã?­ü{>5y9)-šÿÁ¿Ãbv&ö¦–væ„*.ÿðiädú?އ,ÿ£ ÿbù¯¢™þßXÎÈÅÉÒP‡‘þ_aü×ó_Kïÿe Û»{Ñ1qqÒ±°32±03r²0úü/¸&®NN;—“þO/ÿÿ[L€;Àf}ÅÞ„'È*µ%¤ÜW¬p®œfnÆPf… xuºçFÙrÈÂÔàð û^;ï7Þl€1ßîåŽÔ}3±Q,îxr*Š(Loûµ˜¤ÂÜ·fë])ÿ­>LÿLËÖDì&üÎ%}c=P‘zŠ53ç¼FÚ±”Y‚)ʰ¬£i;nmñÑN‚JâW†ö7`Ÿ¦iÎ"¸àÚXàuo$4ïÏ.Ü –EAy€Ãa¨vÞþ£QòIÚ-.KÐkœkƒ9x- íeyi³û"~e¢ÎI{%÷_DeY¤¬«‘qKu7ÄaØOôrQ}2ók-Bñ´J‡üÂT£³z۵̺‡†¿;f8)ý㺉Òíâ ‡U ¬8QCymÔzødm€32pNöÌù÷/î7ãyÔðLœjóVÿ†9[[s‘™ªöROÕ7EäÌœC?PžHîåÌ~¯ Áv*rý™z"71±¤~/و̓ÙMˆ‰½úðÖV†<’ûgGhÝN—ß<’ÑS¯î~ô±ÒmÝ&æ?+¬SfSGf÷/ÝTæ†EÈßÖ•à¦ö¢QÁ·Ÿ¯x2‹ÀXŸ{0¥è€-s¼¤­»÷P"ªE>mrÔ øXDµˆÕÞðpiÛA”¥îªór¶¦SÕ•ï‰Ò×Lôeï®rîö2E·QQç.o¹ÝtT0ŒòÉz>ÊLx:l'‹P#ç¡èDXáthÖâ4®s| ÉÀD%(Á+;mΕœµúÍ®©ødÛ\¨2%…`ÁŸªUë~á•¡Û«Ã)³YhJ/ÝÂ$Ä0¯(Ÿïòo3ù(YQA̲¥Ksд;ƒæÌï+OÕùô½SÔ•¯5PÚ@HxÖ¥ÅãFA€ÚmqïB•’ïì0Ä rëÌ”ŸòTBÍ'>˜±Úí=­½Ú×+†ÚYwi5Æ!hmu*6à’ ü<Š:VË6ïÕڂϸMEiÊý^Ï[±S¼#“بĈç‡S3Žž×—&’ëS_[ØÆÝ=à ç L¦úöLf³ð(%‡8dÚ¸GðQ®îK_Pgz‹¤®ìu`ß-\g]àºA‹¡BÎñÙ6c¸‚ëë/ÈØR›?I¤RˆÅÃc>Q躦@è8æíGðêS‘yÍc>W÷Þ_†¼Ún7·»F66Íe,ĆÌ,«¸»èzÐ,?b ¾ò1»Ý£ˆn o2}ññ›?ܹ”N=`Owƒ÷ÙâÚH&¡Ì:_ùôB¡ŽnÍô7ö+®tƒC!©§ÞвEä í!¡éCSàÎDÿZö;UÒêEÀe¡µ|sÎ Å (¨ÕÇojyéE½S,Ç l–^áEˆý!HÚÓAÎ9"C=2žwÖéê>¡8F ó¦Rš;÷h ŸÍk¸keyš.•LJKß×—(H÷äõô챯¢®4à(™täñyÕo3t5‰ŽYÊl'éí_=ª`ž¡fO*Îq¥ ¦˜Bðm–î=_ï÷:x¬ÊÆ.Vwt(Õ9Èw‡â^-F³|Òk¬uk xBö=|+D#@¢¢?è•Úäïe®‰"d‹³IVŠÛp46ÁÉf¿.mÂ\–ò*,ÛzSŠæqžnkU÷=rÉ×§E¦è láh—tah†NCÖÞò/ÿsfìæµ}ç^o,ÝÕŸÖ ;|;.ôzE•Yiµ$é”^% ï÷´AQoZrm+¶"B÷ëܬãJ—Äž“OAÓ4–ïwyÆ>"xÛÖ…Û†ÆÑ‚列ì1„ãÏ Ý«äÞ×)bÂRŒÛ—¤7cå¤ÄQ¶ò ­×¡,XfÏïÇ‚bF‚91g<ƒ]{¨Hd-Jb3,:¡?"2¤Hçž“Z£`¼6ò „¿ö\ú%Þ"è ciF†$ÀOBIô»&jþ¢lù/r½ÏÍ›»¾™~æ ³lÖ¿–ìè^ ­Œ:a8%Œ-åæ³±¿©‡“ö4¢i´ }g Mf0/A¸ «Ó[’c”ðK¤ÐåÓ¬€”ƒ’÷Ü„ªý¤‰ÙÒ‰hÍ—ÓѶAPÑØÔ%ªñ»àvãÐ1À÷¹{Cϸ'XÐhèÙR¢ÍЩÛ×à@UΘ) R|Gïbâm}æ?!H^•œPTå£òôµÉÁ^t,JñÌ%´t§!¤+{›·)G¶6KQÑÒÞEÊæ—)‡Ò<žÓM³WÇÕþWÛW®—Š€˜u¹oê ܺÀGf>¯nœí•2û}§¨ü9¤)æt'©©"’ÿEu.à½| Ük* ×oOwKŽÈHÒ«;v±ÉcØùõ]/PÂeJ7Ú™§·Ü%X„YÀ±FÀ2$jÛ,ŽßF&¤ã™ãüˆl,*à£z1‚ Ü”ÅÚG+]•â´Hâ¨9÷jÙŸYž(y ¢7œï ƒàãÐ6"9™øÒôQöǸÏPQ&.["~™Œ«ž8tg®fì6ö`=˜O:{¦}êîÑë™Ñ%hRóZó- ­šñxAÈPM¾kªÚœŸ¤9%J®%ÛÙEjÍúyÇJ9lˆogGÌÆÎÖÇ+ÌYðl®-}`g<¨s{Ü.lÅÄ´§í«–‚ýÔß ËN/;«b|Ÿ§ÖoÑ{éÚí$\µ9gWxÐãw ö¢r×eDt »aá'=Šß6À ý€f)™]ÓAËU¥®!.ÒÎAvJ+ŒÙTdýª®æïA¬_x¢óéÞaÅ'¶wÿ)ðX?@-£tí ØçÛ4}ôܼE_´b«£ _8e~ð²Ýé+]Y6rÈ^(y¯ÅÌð…`^Ÿbx^we¼ Ü6çRjJ§5ųj[e Ûp.Eø&`Ð×qN ”2™†;Þ—èùÐ%O(±Hbõ«‹E`!,¼f¤kú(8Dªµª}ïy…t$"ÌæîµàiòM©·šúŠƒ?1Ï Kwà^#xÓ&‚‡Š1Ý,ao1RÉqÁ*43óx2!£fÌB>þY»øw¿[ãîŸM 2’3¥íU¤Û!ƒ/xcisïÚ께N]„Ãe{q EÍ4›Ï¾/îQÉGnN·ÖKD›} œÚ2Q6Áœk3ø£ƒ\gʱ­(\œTk~‘æÆ ä¿í Ú͹JçÓ­T—¦Ùúæ£dK<öRI4Þ»eÐRx³jòö[ÊEî¤0çÒB¸5;§ÂkW©sa¨¿óâã”3—Sb'z½¯¸ë 'ìâKä ÙÝJÚev‡M³ç]†½=Ñš"toˆÙ‡±©-êqƒ»’¶W'œÇv1ã€(ÿù}—pBñrº‰ø5õóa4 –9ž‚ÕøUb‘Îõñ+a\FE,¯ŠvLá¢k?§¸¡ùœsz\1Ôho2ZW _ äÁžnÊÑ8À{Ó®ÌPV ‰OÙ <¼ÕV­Ò¡ð! + JáÜ6Y[Z"…‡µ;¸9²Tðs‡Ú'NŠñ·I.,²*ï²öžÌ°Ø:-T³ƒH²ÕJ#þáÙMdñðé~œmzñ7ÍÖÊZ275—ž‡œf$`' ò[Ò>qð'$嵈Œú0rÍ5ðÂ&LÜ'P”¿gç/iú(qMT R·8I¶KÝÇøÜéV¤©ôG§ˆ¸XŸßBH#L¯ÒÆ®cîkñy—¬U]4˜¡Ô?›4ûp‡´«k\?8\:d×z¥–Iü)âq?iÖ,¬ð¤C¿ÿzõ½ë íc Šk:Ù KñŒT'ørlÓ7ô^èL-"{žOI§›±<Ê€{oS%)ö€®80q´÷šbâc,ßóÃ{z®¾J£×¢lç;ר7ÒdcÇ(… ­(Û•´ëˆ?kn¿5Š{QÜ@ùØÁ 'õÆo]ö•Å&±]÷¤} HfN„µ Ã×<"‰FûòM°ž,¬iº™¥ ,ŒÈ¬Ć« uØÎ(Z&ôÑ_©­†8¶ÝBßݺá* ;,3­Êx¯[ZS•ˆšÓÜšˆµÇÚ”ßþuá¦b_zïY$¸ðøk™ÿpˆÉ/Ð-"‘—ä¹ÏJK/½¥’Ä[ ™ÕMå=‰XÛTØx˜Ï¸!ºeÑðßñ‚Ì›¯Å $;¼>4Ñ–t¡ÆEœh°mõ—ïÿ"êúwÄkkµÈцúö¢ô=ƒ×âßÚÈDéÌ/¦P¯óµo."V“ñ i;(²wĶDÀUdÒèÃzûúR¼dŸvR¸Íó…à¡ÐIަƒjeqúôs¸Ùõz{’½D6à:¹({¬ÓÀz—>üpš,'P»`ˆþtg‰òF&Ñ|»l¢i@‡]C>Ëù< æx©£î»H[¦i_Èõg†êѹ¼EÝ÷|P‚¯ðW@:+Ë‹ ­BÍÑ&}*ÉJ¾-?–º¿>Î4n"öþõkL‹KhßJ . æ@‡`•u1%Weޝ‘#,g€ ‰À~î,³W…\Cyò‡¦®ç"j#Ö‹÷.‰ U¥¤P j ä¸#wá]ðU»ëíe÷ýºº–˜Àe­Ö®¢Uͤ\¸;®#ØO½š.k9“$œóí$š×P2öž\ž@,91Á°þXb‚÷>¾w¢Ö²aáüÙ[òB›áì¿ÒÊUÛc­‰Aóãxÿ½—WýóQŒ/•%ú~#Ï9(IS. F!l™ºìˆMæ^Yk -tò³¿gà›òVv°E´"çM“Ê®¿à«ü¼~†Œ "à̲ÞÚ´2âí?²ètnóˆõ/é…vûùƒ`s,ئ!{þ ŽhGº_¸ F«Z|©nar¡Œíj¹ŒR;Ò¯}§òcù;)5*™€ö…¶zži޲³Ù4v{°¢+ yV.t̰ÐDó“xÜÃlúR Õñ; sGZ@¹o߆kÞ&¹ ôõEÌh#C¶8¡Ÿ—Ï3¢ö j4ËûÙ]ŠA) ]ÖOu“I´ìTÿH ‚;ÿÕREîXK ç.VôG%É–üX¤çVèíÔjdfkqðÀÚ±ãÙÄ·¯ü=ð±™m€XÐ+¦øÞ_¹‘'¶1˜æ›D Oų:¹&fw÷õa^!tÃ{´²ÝhÐ0Цc˜—%ŒÇ³#Šc>ØÊ]àƒVÊÝc*b¾¯xlzÝ­o2ÏÉâù%µÙÇäù³fŸ?®˜èBË'ð(Ì\Pëú~CýýS@¬rå1жiú–ì‚5^#¿<€`vNœ.™™wg¿K`y‡1¥àÛÉ,]’ÚE íŠYë¨Î[ýÝÉ¡SüÛeŽYWÓ×û|Š\ísA`ñ#\ö XX媃™)³Mª§¹î!ÉjH°³QæEHRïQ°}fŠf¶ãâÌç"Z|µ±5#k—¦ÐMéÕŠ J´mË–qsðH³@–˜üöùÒõ·éz&!5 !¦cQ!v4h‰ªêÑ”Œ‘~¸Æí@…Š§åŠ¯Âëð·Ð )¼2ªÞ£!k$&ýë­±œqJÂ+Æß½á´…&ºÉ%›Nv,þŠ¥ñž±öÉhw¶œ]ü³…ìw“¶„'Kcð$G]ë¿€³Iv5û>a „=ë"°aéÉã³zsPjíHáÙ<óÞ8lqH³``Ö¤A˜ ÿOj.–®û«’/»~¡c HH¶”Á½ÿ;Ö!>ñ€‘ü'“OV›u+!2Cñëñü°z<Óª°ÙyPƒ³§³Î­’»|›"©G¬•þ§­»ˆ˜é/ÈâàH‡Þê•x^rì8Õ¿êÉ Gy›Õm”ê+[²º’ž@Ó v"FoaGï©Hê•v¥ÆìZ.;S´F]#{f)#”†Š”™ÐY½‡;†Ìh޶*Ö%ª’‹ìQp2ÎÕãwNˆÞê¯Ý•‘&õ–«pëÍ®÷.Ž×”Ë9–×P+¬K“šŽKM»nŒq 2î¯á»£|œ‹7ôELÞ' OÈel'øŒyçhM(6 Ýñ:\òRãKrB‹éË*9Rµ[µ‹-[&οû©ÚËf©6²ÏZèb(…ÖO‹[›>z…àkFPÆ@<’žNóÁÍ@NÎ× g8äôˆ²X²¥$¢´#mTïü¼i³Ka£%n<Õ~­\&â-‚ïÛ2žT*gUú Ðrðó l‡Öˆª ŽNð;(¥·Maq% vµø%h4V4w0I¾ˆàMôƒ¢™ü1¦9 ã”ÙÏJmA ÀôùT–ì´}þ Jm:lW”ÏJØ%x©JŠ-óiXMî¶øGP4¹%ͲŽmz¬oZ…֬㬃Â7'ô|PGŒ‘H°¨øü{sÖÞB…ìˆluØš-¿5‰ nq|­$JÎÿÚ Ñj°_à“`Þ :•9 ´Lb_j¿#òô0Õb`ªÛÕ¼ ‘&îN75A—;ÐÑçgÌpE¤3òrÂ_ ÈS> ¢U«õŸ\Šooû£:Î;N44}Ï™˜à4Øà…ñuÞÓ7óŒ]VnK„}¬È,fs<Š¿$eXBàÖ$usnsf®¶b‡-Pl¢Ú-, ËÁRÉ1U¬°sû(:¡è!ÂØ¸·mXg3‹Wk·ˆ4·¢ŸƒÖ ès„Y¹"ÕWñ«ÅŸ”ÞyÁ›Ùa‚1^ƒ(`‚6xHc×v³?ûeˆ’w ·À‘dÊòæW×5ËÇdÞí§ +|UH6§aª^› bêþYë¯2_ÁÒ3ø*z& Äâj›ê ú4¹m¾ øhq©œgR/Wéбtõ)>÷ǵbm¬Û˜Ø‚~bƒÛ—ƒ»Žpà *®ÉïXc„–‡õðšÉ[«BÙ×ΗéYk÷Å ±Õ͹cPr ÏÝÆÊž½¤¨6[u›§³ûä²êψjê?u U¼ CŠŠo陿ÕkçëŒ&JaÞd$” Yô$ŒÉriåTyAg£’mÈNëÄ;÷ÁxX˜°îf¶Ìõ¿Ïs8P"–›‚òq}öi{ÐÅ@¨Á~ï[­LŸ¥ú…>Ov•BW…;ˆdKW™sÏøË#ç0^¨Ñ`0.ËØä=mmíúÖÛºK°ô¸¯Õ5{ ¤±wÞ3úùà‡CN²÷ 4yœ†áÍH›=\’f4ŸIþrGÀ!"•Ø—n¡p.?ªl¶è¤Èj&›}H¢D›p»—Óë‡:·/Ö¸pKIy~í3Y ²Kï¾i†Õ××Ö çü¸iA‚†Œþ©µÆÐÄì'Õ«FU  –ªôÓ“ä~¾²ùce¾`Õ3Å,‰§w&&Ó^îëÙ‡…Û脯+ýwTÖYÒ vG7@ö b€æüDÔ?B”=ÀcBãùέ¡¼ÕòBÉz8Ú‘Mªu*1¸ÛýXyà¶Wr«0ãkµkzù¼ß2zsÊFã—i+‰ä!ߎâ¦*ÂñÏ×(‹,8}oñÒø{DÞ‡ÏG‹U1cE ïsDèJ"ðŸŠF€›xúàÝvPç(ð·¢[ÿüg™©^m®|}Ø>Ra¼ã/0Ý8Ç^+gió#ë…Sr8±åxùz»§mážeY=â×?-SÓ\o4“Îb¶È ’ZË“r«mZö\•õ÷züÐT²uD@£¦q ¯RJ[Ʋ5 ,r!®Û¥og“ãyź2Àæjk«n~ð‚ï9BÒ!´ma]vg{ôAÉ:Zp¾E?Žý^€Ö6n‡ gZ7 ÙLMñVá²g“cD|gx=åð‹_ÙÁ-ÄþÁ.2ÛÇ*±mAJRÕXÙЛ¿u+XòêÄ~t”R¤áüýd*­Ç´FÔçã€u™…¶îÓp²Dp´ `qd\¹á¶ge¡ã“íUiÌÞZ°´ G¥q¿E©j´44AÐþ‰Õ ©ÿ;Ã<¡ žÄŒ.MÞŒ¹ Vúþö)ãîÀû®YÁq ÅBVÒ’­¬C·˜á^f> SAv1ÉÀžÃl‰¤†c{íªÔá÷U~³Ylö…§$WnÆUPÚ´ª!¹†ìe)Á<=xoì,£¥V‡Ãtƒšüí†êÓúyQ¤îØÙ‹ßG²xŒ_ûf3aÇÀÃf¾%Uúc°³¥©ìsZ&™=ŸÆëŽûó7ÐhŽä¹ÙPÆ$ä ¤l‘Mmu„Åùƒö¡Õ›øÖUWú"å$¹§n o/óµÑ²1dúTCCr— TöïzxÝ[S·¾&,xÛÑÚ\ýEÈsO¼œú^và€U¨úî_Á½K‹õá/•Dgò< ÷ì’  4kÁCðïã¹uó‰½oKµ¨¿Šª‚¤xIϺJQÆ`áOg‚C´û‰A ”Õ1 ‚ª ‰¦Ÿ ž#–æÜ¸_w6fDëÚhl·äÆ€½uw,ÿ*Pä O]€±(¡dޅ׌w‹ÿÞeØf—n!¼ž‡‡à”ÒÖª[˜Ð& V•µ ÝÑîšÄÖÉPx>©l.;qZHwM€c×–²#»Æ&gúø|ôµå}¬Ð~í¹òžJ*D޳w }XÞÁ¹ oÖü¥Šz°££™¨=R‰‘wu+!zÌ?)& “WÕ>yÔÔHJrªiE…µ¦)ãÇÓ0éÖ÷ìõÆw÷šA;!n7`¦kîÝNÑuÎz¢Î 3Ã;Q>3Ø,zÔ˜(¶[vè!ïÜ‘?M‡ƒ9”=åâ{pÚ|b‰ÞênCrc XÓ >ðYΑSˆëÿ!¯:¾½Ô.ݓѕ]©¨Y?çnžçI«ô±òD 3\«ùëeHºqêz œ:„vøÀ¢n.{bå.Š¡k¨ÚÊ–>O@žà> ôêwŒ]9^ÐQ͙԰îEFyE/Cý¦n¶ ä(¬µyØy#›Ò]ùÎO W¿F9œ>ç¿ÃÂótp2ŠÌõV•g™&é^ïÝhºŠÙ JèÝ^À Z=+Äî4d’ÿæªlK_T’‚ŒbŸ¦£pM–#ñ’$:jI)qÞ’• ÑßN“~‚eceHGÝÿ2ÆJÕlíDz¸ ÔjD’EY†fÊÝ>„¯Qs€¯ '¾.šƒjIKnö§êeÊÁôݹðÿˆuFµ.¨Ê]?ðZ•–Cé6ë—%¢;©»<§† Imú|¸O³±ƒ–áÑßßÀ`±pÎÚZäEI<Ý¿çpcÒ…Fç¶V“T_Þ¤ Nr—æw›aóÙÙÓˆ’E<á]¦7gbVØ`!×d$ïÕP *Ï} PsƒñSDçE·C!Þž§­8È¡Ì"8À˜ ª j`þ-ýÓì5C‹üº>Ød§1ŸË*?ùa I`Vçc½·#GRdÂ0Xªwîê$Ø­hñ•=‚èÀ“Õ´‹Ã!3impJÒu£Dóâ‰Ðþݧû¦¿EHï";Ø¢ÇÓïê刧œ'`–Ñ5•å7˳âjVT˜‚ÕçV7©ì¸éþ‘;ƾ&œž;ñ?‚¡@¢),Cò¾:#î×áZõÔØŒÂÎJ‰™ë­1ªZ¿ã¤%¥P5c¦˳.nj¯ %í1V„•ã½Ðagœ“äØ0ZZÊun¨QzVþÁÞ‡¹Ë–SìÔJ7–(’šé¦ ¾F£QHÁ>$ÔõðNèºëÇHÂÎ@×]rÄ5‘ÚþÇ;›l=Gøƒ}ÉþÚM?¬°(Ûä/˜ŸÆOÈu ’¼âçϸC †ŸUðƒEP£) ÉNIpu Úª’6>‹è%C&›´¤#<=e]ÅËb Y-¡5mèb!5¶ã?ØÓ5œŒÐxù§ã! ɪ`|ß%›2;“ìQi{Dݺ·ÎjB3œbÏÃâb’xÂ,àô@–¬wÕuáØ[Íwtgð®O¹7ܲry!|;ƒ×5IJÏT'“{šdA‰å¾xKqRù@]åQ/\À÷Acáœú“"Ùº~)7£AV<ã_©„Þhwѱ×ÕóÜ¡n8¤é°qê¦ëR“™±n5ëHÂÍÅÊ‘ªÚ49ëlꮺá ˜}'Û\çꯖ"º××ôy€÷€=–„H‡LîÚ”Aí4ŸoÌ$qâÆÊÂEåÜôíšèø¬±lŸÒˆÑ˜‹ñO‹Š¾òÀWyù„)…¹²”Õ9£2Q„ª0 £ç.KfÍ_Q¾z~‹Ö00Ù:vø/æIãU;ñ$ÒwK¾˜Â#`o1ÐÐ/š{X(Ôœy”³Q47¦J¯Tç)GäîïºKeþ;G´ïJPýce<¡Šñúòªá[šØ¿ã°aÝÃDÐeºOi=›d¹àøÒKà "ÌÇ|Ìí`§Ý›­¸ ïcp#&Ó9†x]ª¾€B=2ÐIPb{)¾†nÕ¥jÅ÷GûÝšgÁY°M:3Eùª7¯Ón=’¡xa#Ñ9fmGöî×^$‰ &÷Mç/P-qAYo4\«zÍ?Üm•‹˜Øy^ªMz Ù¿”åýW´kþHÉûÃç<ÐÃh§Êš‡tVY¡,ÈqV%!ä\¾ ©¨J7Ü7uý1>±C&˜¬ã»?D;0 }±Üîã31éŒí­þf²Õ¤õLÚÙÇeŸp2‰Á‹%’–g1$^À¡AÇ[å7{Pærá+#MAi*J/‹çl.ô+¦øç6i ±½ÎL8Š¥a©¶¡¨aS•k¯V-©ÆJžömìI¢Oç+=ÆÅÓ˜ÅR„Ñóžiˆý•ÌÐÕÏIÅ 6)¸·>؃¤K„,ÄÒhÀ—N:ƒH‹Jà'#PfÓÄóxIJKö¾&¸hc­•Ö•mhœÎ_7û{ÿ¨mKMh@6ŽÃ¿õg¾—‡xg'½í Äh‹íKEHí(PäÏ=‡öÖ\*º –31ID 7†ð±ã Š.løò*¨†Ò %†Â$lé·ƒA$ÊóvïÙ†ô3Í`¨q¤{v,‹š–½~sT|ѨaJã=ö¯×ÊæzðNÍm‹¬ ® kÛË›•§bY÷Û²±÷p{é”vßðÖâ0ïÕ]›#šO. vhÇ`Q¨ÎH©ÛÄ™%î®uÁæù¥à"/¡s¶åf™é Ô<«ix_Ãn³‹02'7°š¦’R=Ʀ?hÉmG¸ÐïÁé±Q-¶ÊÃ2$[AhSRK¼b„B®…®ïë FƒÙŸ}뮢Âjƒ%>ªÀÂ% Ë`S'ÑP,ºJÁL(Ú„xŒµ‡þbWiš…ƒ ù%·‚>gŠU[>52,ãͽ”im¿ý5€’MëÏÓà1Ðrïä&ã9ž3¶|ûmhª9¯jƒßp”RF–K䜓K&]=šÕ•õ>v-PM~¶ÉqÙQ©i 1``N˜ºLYÝ$ÂûV®ÝW Ú¦u×…V¨ B6•7š/Ì]#ðL%œÇ6Û¥[sÊ€l¦QG .éO¬þœÛYÌ4gR•)?­¤&@–)!Ìòn™Žëüæ1OwVAX+Èx#÷Umä/Â," Ç)1žîž¼uÑ«·eöÛ0à‰Î7ôóè,·Ë¿BwÕÊjc›êÝzi$½:&Éó^W{¥Õ›­+Ũ1U„âÛ1, ¹n”PA+Ý<ÇZ&<~L$çîŒü:Á¾Áæ€söè î‰xJôw"Ùä#Ü“¦C§߇ÈewEuéisO·šHe9a÷¨‡Ãgîáüg_£©Îà}n«õÇ’J¯aãnQ§å¬v}óÓË%Çà•jëþ<Íx6Æè¦Æ¿ø³ÜážòÍ~bž6K·æC°‹ÍÏí\\d…›Xϯ0®¯Òú7¥/ ¤uN/1èƒáaxÊ’XÝß[Ãõâª<&e¤ ¼nn'¥óxô¬æÑ…Ú%}ü3ù®ÔÉC†I펭uÃitG4peRoÙ&øQJê?S ®ºùžã3_¶Ý[BÌ%~[ñ>K蜌çLëm¹E™-2`ÔÙ×®‹>•†ð€:ÆíÉ`SÜõnæ­HºˆÿÙÀTqw´j¾ö. ††_>jY;]oWãRëa;Î¥#Û`+!Ë8jã:ëUJcD»5­ÿ©\æTD)ë£Q²(Tªö”Ñj%í6Rì¢è#w-5tq¬–F#V)Ö£}ô½¢F7°)Åv—@óàÇŒßÆ"»ˆ¨¶tñ±à/Xpe«™-üD2å.KTb@u©3[OQOƒSþ>±‰BBaLbX3›ÍFåC„K:Ô*ÿvû°y£@¿HBÅ>öÖCnê²ZÈ÷Z5¸ u>ÃÉ<ë,¸[î9>Ñ ýyÞ&jrÍ÷²ÞyÓ°¼TuîbêÙNÉs·Ê¾4!`ÛÌ™iªÅôïÕ§¡ -Ë4\Mê£ù{rÛ l±x4ÖfŒÙ_€DRd‹¶%´/ Ë>‡&{ﯪäÞî.Niæýmc>òÐùCDŸ¯+ÉíJ-T°Q5뎛9Ìg¼OqÎS‡ÌrŒ{xÕ‰!Ë‚·Þd4F[Xì/ñIȃ2Ð+z“a×5$ù5¤m…|º{£»DÕÿÎÿ“Û]ÇŸŠøý*¨O8íôý§REi¡EÂèð±…'ÿ+ç÷ˆ¡°\ÙTñKeèòZOâ"Cò‘J@Ø`Ç}fß^ ™óo²˜€1ŽŽ¿³QMƒUQÚÐrõš+ªõð+;3„(œ>¢v¤ãÑž¶l‘¿#š÷|ÉÏ”Ò;VÙHÿ°¡öáu.6“ãÕÅŸ7¿ôeq.*}騚-æû3¨°ý%#ÍiŠÅN²vkÙ`SŒÑ½½¨ÛiÔ$8§¼äb¶~³•·X¶RnØWjâì K?jóLöo t«¯Ëy‘–G$Œû3Œ*Þ͘…&öáþ%Z"ïbYmž$ÂmûiE7¤]žjNkÔyÔ86Ÿh=L5ªµRè&A‹ÓùcbÅÇ´ô7–WhDÒt/ÝÌ %º®=Hʈb À@ÙÁVxŸ;ëíËä*–ØÿàŽ´'–êl–^–zr¥Ð¨ÊŸ\-zðk®J;OÄÕçšmFèé;ã‰vþÅc;=‰dØ1Ïz dË’ ‚ô:€î›ý`œœ5ѳhOêà»@άE\ÿ$9ÍÒ³9˜õD^IÍ›XX®&½þVâÍ¢Wð×#`ŒÒœŒŠ¡®¯ëWØðZ W´w-q# ¶S&ÂÁPCc›¬zíXK¶*‘´Þ6,É΃B2ÉZ²&5þ5:HÄa½^ÐPkCÓx-*ôœê‘ÊfEÞ¢ðþ[’ÀuDŸœMIã­Ø‡5þ/i3`V@“ Ñî¾´Hlœ„õYƒúŸˆ¸ùmLïÿg7]DƒÂrù®1Ûv/´3,R¸^¤¨)ÜËDçà˜’ÛôÎõ)¾¡æäÚ‚6ÇõÀ=7*)r¯¬5Òݺœã$P´[ ¯óš¦ÁÊõl\ò ¨.¥ìƒOíf§“ust^þðT«Aïz8šá±णëFoßkw–âTö/v”Œiªûº¸¨ù‰¬B!uýúÁ¾¹&HÅÒ¯ ž2ï};݃˜9Þcx&@€oü0SÑ&¨šROkêcÙõ|rŒö¾›J¡YÞx<©è…ÒåÛdô 6 ™Å)¹ðjRÛš×ܷôá?=Ba‹†=f¥dÔÚÌ’-ŽÓ@cãï%ë⤒/×ÖVñ?{©) ¹`C2–ÐãŸüö¢Jh}>¨x×í1?ua:UÀ|o#»ÁébuVó´¸Å…KŸ ­b›ÙÝÛ@5+ÕÃDfU„BìÛ\(Ñ)V;&XÛÊcÇ1^æDœjžªçµj²@B]xm ­Òò›1N•õ^à±%Mst–XÜD OTÊZˆø2»,š,®¦áj?€Xe\Åÿ©)Ç^O€‚¿uE‡8<=ðmHÒ£spšDrÿ幌’¤Sx,Ô;íVlñE"ñüÐè—Kc>axWË÷¨5wƒ¹FA­íìÏi7&QžaiFºp ðÇáöqÃH82áÙïKÚO8€+õ¿lïÐ䱫Þ…ÄMþå#gX.= í¾6²ú‘6û|ĽQ‰PÂ1i¯õv×*Ye2údÖŒpš©Ê{ÓâT,áP×j…ãSÏûR"È@Cñ—%ó¬u÷svã×G9¤;¡k¡Lc·ßM­úá8i‰ãt‡©a ÖÜdÀä ¼Ýn½r<‰2 é6®Ãœ¦+¨W±teû¹ÉCñtDÐiÄGdy.OÑ66NHP˜œT-' ƒÀ-£yêAÉqôuõûÑÚ°s²[l 4›DQÝJ°Ö („²)Ñs$8 –Üqf®¶uYÓØjárRÌè`U?)ÍÇ+ßMsLJ8P[Ðå)Iì@›ì®% ˜E6 ü¤mN–£ç2ÿv$Iò—YjæÑb^€Ý޶j$…‘^ËW줈SMu"a'[¤Àá:yÄ+¯¾|'ËÆŸW b¶Ýf«÷ÍÖ\ñ׈·í„-=Øê¢ˆÌÖÆå¹tÄ8ï°n™ŠÕ½St¯×ìD*É=†YÒKì\­”Q¯‹ù(#œøh¯G>–,›Y€Öy÷yå.Ëx×5®Lâl¥üÍk;Ȇ (+|àágQãÉzU“ ×!kΉ¼Æ,ÄРÐi´!ŸŸi³â­)Нõ§O ¢Í0Ëêaì ‚üªÎ÷Ä$&ŠŸ€ß^ޱè} A7G}®­ÐþüäÝ*ŒGŸ×ЛÁ)®Æro6A3$%×·CÅJKùNB/}fÙ…3)ëÊ ªÀÃNŽ>Gû€–’mU° ‡;˜'Aqym`)  ê@Øþ9 EEQ9«¯5¡ó3¥Ù¼~À³¹^»3F æªUÈë9ŸE$¬È;Ìãz1'5&ŒÚíVâÁ.uöJö‡+»ÁŒ”÷£ÍÀöëilé}fyøŒiX}F®žâ¤¨þ¸I5b¸¾1ã­§Z›Š3ñ«(VE²[Ý Ço“'•ëX&Ÿi=Îý¨ñétÂÅ¡Ÿ*¬e›dØêò$](ߤKù· ù¾ˆ%´| òP®†(¯^—%é –*BdÄZÀ…:K¯1¯Õ©ì”[¸þ1€‡3ÊrÞLíûá¹]á ºÿP.$íÔ©7k¤—xí[ÆôIv*çž›^ ç1mžhü« ¯[ µb¥§ÿ¦¤æ¸åf Ã)V,¢ZK…;·˜× †= h?>V«Ýe& ©·Ç¼#§ TÉ¢‚ÐMÙòó"Ë‚ÀOlNý÷Ë_1õàoô‡\®÷]’ó]æk©Îˉ2æ L(·°™šZ>†Î¨šÙûU(gÏœÃ6,x= '@æc$dŒí%²¶Ì™ÏÂG³äÃ9§ôm¯ì:÷w8H 8RZeĬ)¢ÿ¥4FX{_¿¾§Qp#ÕØsȪvv,×oŸÛÇIân½kîY6/Š8Ö@Uî“ïÌf9nƒÐôÌË+¸üˆë_ZIˆ¦œóF{ÌCxÕ&¹üǺ,¤Ùø‰Ïˆ³¡ ×+@ÑëÛ]ª7˪Q’§PVMó,^Ó„ þ’Àˆ†åK2ßV¶Lü¯XK¡šGǰŒº£À¾/¥C”!ýݘÜUѧzvb¬Î7˜|†kÃ*#Å•ýejÉ%›tÆS‘›ˆ÷SuR¤¯¡ÎtDC½Y*ÖosªT•ºÙMúMX°:µ×ëjîrÙ#›ÎÇ›ý$ï$Êä_ ʼfJ9.LØ|ºI1î+ŒÛûfÁÏ¡ÒO‡Riãþ÷wÐ|ÃaŠCSÃì^ìv]qãN ­E ›&ßs+dMë]Zµ› øêÈKŒD#6©2rc:ÝàNy üƒÜP«C˜iön5§{BRà –V_rSõA:‘ž›…sû³ Jר‘Y0ÍD< ˆlYZyXí鯽j¤Õîš,m±‰pé8¿é¶ëjÙ(|,eöz ÏF u¼ÇO1’ÛO.HÄKØá;n ö‚ÕÚõµdʆ—è–f;Kæ™RR8Æɨ^¤Â¸;§R„†Õ¢˜³WЃñ畘®X·13-¾Üõ–v ø”ö„x™þÎ×uÁPÒli[XøXŠi·òxŠY.ÎXh§y^p IÖ8<^<-jIECÆå¹²-äL*ÃN1•b¨ °ÝHSJ&e³¾''1³‡ãŸ-᪘øÆ}&¶“}3Ý÷¦Û@jÑd·"nôOú„KÃÓ÷¡úÕ†éòĺæ¨'–|C«Õ´¶½Q6BU_ÒÎ&al¸#M$+f„Æ;4+­‹Ð¾ñ\àyÒAÿ‰Ö,Ý‚ ²Œ2lc/vfû£>s¾ñZ¢(=—CÜŽ§¾—ko(P9à-Þ§ÜÅö¯y¯ÒJiZÕ÷·‡|J™z¤¡‚>¯Îu2Ùi~æ:>û­³^§ú7Á”Y®BŽËôoÓ_§R+GtÅøúøÓV²áû²Ùn§¹˜éywùÜD@xÚÝì±M'#m¬}¹ gu¹ÃéÔ+öñ÷É\h#2ÜCP‘xÖÕ(%&¯[%eØ„E-5ÐZ=`iì‚JYZSÐSîêÐ ¥äº¼1c(iÙç¡ã±žŸ*ƒ]à!GñÝA»È¿wÊ tf‡yü[”©ÊoŒJgÄ@rð}ëx­¼TÇ©A6Fó]§n¿—Ñs&ÑÛ5ì”)yu·Íq.9¡·V¯o’nÇáR§vH ½&ŒQƒŠ§ 4‘šU?9!ꬽÐþ#m2¯@Q4=¹xR¸Â][ỜœÞ“ÓZ ‰Òô%ÂÔ)]=§ÙuË_0/¤pNV¦e¸6¼ÎžT@PÅ“áŒPÛÑÅ—Õ~5X=·m`½ßeTd!Êà¿÷\•"P0bþy…Ð$gpì"O¶ìÖh{6[:º8kfb gIås¼¨#þŠS—½sC'^Ü£‰•:Œ*­±Rnú?¿ÝxÒdºAWÔt| ¡·j¼”)XÅY›×Ý‚5ÑÕîÉ?âq6BHÊ‹ší ³'Õ¥­$_º*á÷“þ6Ø¥ Ï£ÇIåçAN´÷–†dÿÞnÒ[E– ýAZ T©Ëfã)á… [«ÄPZU_€¡u›˜µ*Þ³©ÁðT3[¤Ö8Ú§Úx·’`³ù(P8{_j&é*˜a~º™qš ϯA¿f€Ñu ÍòK‹3èiiOépX ëp¼­Os½ü€ºÑ·…WQS{Ã^Ô#ûCò&U<:ˆ¦¦„ôÓÏŠè¦+dŠ›bÑù‡5z‡NÑÖ¢8%T¨2šûô»xÎÛy3x¥&L~~`Ëg*&Y¦?Á¢<)!èùBóù¨œHp¹Ïßè¬ÿl€¢¹~ª¤ tz)€þ¤5»‰C˜ EòTàãï?¾PT[ê ˾nªrÉÞ¥ÎLø˜ú¼ˆ9cø‹;KŽô!)T´«CLÙ­ê´Å<î¢àt _×Ü¿ïd¹µ©BÙ ”B(àShg«ƒ «ÛÍrø½Œ@éÒ(¸q¿Û?„I±Pêøš&¨Tvs¨1%ÈÌýzÊ··Äªs6ôΣŠõ¦1•YNöø…€G´xéÝ7w¿˜ ý «¿à³ú7®¢6ã ˜ï尿ÞBðáÖTh·=MÊžž7Ÿ;–ÖFý=<3œíüŒüÍUd߅ž…ä¬Àðêï åêWÒŠ5 <<˜ÏFcÈì+ë…°º'C ð¤M$MGßµõÓµýÇrš:½™ª©î9¶¯ïEH]f ç÷`6 ÀrþÙÛ žü-­—€xâæ»†Z,} B‰»§ˆóν|…xžñ‚¿Z¼åäi9½K“wn­– rŠòî¢Ï‹\ó’ñbîf‰D¶çÒéšï9#’›»ZÒBðYñž4N™•½z‘‘üÂhŸ…׿[ïŠíZp[DO_æ<~ëÑïK³ÌAh;sF˜b̶½Y£Ÿç‘{d-Áv¨ôpÛ®Ö02õÇÕ÷’FAóÜ$äzàXc¤“&Ä >¨ò­XÖO¨õ:¡cκŒM¯¡wèÑ!3¥õ¬L^¶ ßÇU£YÂùîõvL:ydä§ZiI§‘v‹Ç»åCÆµÇØÑ=‡ A?ª( Ƞȱ8»Þ¹…(¹k§èÿüéÂÔé¡ãb ŒðÚVEr{”¬Õà ·ü˜e!QHóûäθpQÌÓTE+Ÿ8Ô\ÅûÓ}OÇ+Ä!™æBýWq•qC£õ?¢~Ĺ•ÀgNKUk]x¥ ióÙH¾¦åÕ†Õð£ø=Î)Ò‡+1[»ÿÄîÂÄ+[/0M ‹‘pl…ÁßÁ!--YUVr¥þXÔ© ó”ÝL9Ò-/£û‡É#à&¦IIÑ|›«5š^£B×Ï@”M7ÍR ²`a\*‚ÌÕè¢áé7Ž.#¾ K{Aq*³~¼ì¡ÝIÊäVa8ŠÂzÎÃâtüw‚*’꤫Ãðp4fuÐÁ “¶(Ã{˜‘i:¦ýäbeÁ¬ ¾Æþó=Jݦ^àòW<“بq›%=¯~¾ÐyiodÕÄ6{æªoÜò¬Hbà7[õ»Yv¬2º55éˆâí÷hE´è_cñe“мnE]Ú(Ô=ž%nÜìñÕ á/øov9 ®¨p†–ë1 %Ì—!ÿ'` ŸòõýŒ¤F‰åÑuy±C”–Ê2oeÞÑ/KÆŠµÄnØä\㸎ôà»Bî°~Y>ø¯‘ç0p/s¡ößu•YYFÆB Oo4”øp‚vŒìÓ¨!Lž¬â(YËòœ,1ùsÏ4_¾ZÅ*O‘ÿ£±Kö6äG,Hbœ§ý´ç.ÚŸŒ9€ô áiº,¬ŽïaJAu÷/á?¸ûºØ×Õ»‚Ï}8êõ]ÅPDȸǗ)”‚j”Áõ*Ï¿Ce!yÌó—ÁŶ‚µÑÿè¾2¤Á¥ÝVY ;wHv¾!rU#ÞÐHþ)‹ö4xɉ:i‡J?“Ö‡ø}©<›‚epÉò÷–Ý¿­³µ$F^ ¿ãØ%c:õ@tˆxœ]®L2ÿ­ÄÄȸýQDŸöy¢ßÚk’ðšcÆSa·<[è€tYáÙ@Gï=‡ ³ÂŸ ¾ò¼÷O¹wÉõåÏY‹ƒ€$!*1y‚í8DÙ^,²ÁÛþ¬VÒâÂ@¸Mj¸H6÷Ë” Ð!€Ü8|`×9ºþ@_hfIPbSü ¶…w8ÊœTôOL_ŽزRg®Y¨p¿¥OñKv]ôâéß 779^J÷Š7‡3¸pñ•Dë‡ZÌ ?.@Uƒy $S–샦q\ðœ+$^ú,Æ­0´VB³ÉM TW½IÍ ì1§üÔÝ¿~lüyR(‚=ü^-mȧJ). nÜ*ëBW@IܯìÿSÇhÖ²9(xÿ2«ŸLÄÕ?T;ñvqýCÁð–mJ[p\×üç&nÕΕ„MƒÑ.´T«;'û?X'ˆd Q1¿Wbq­XÙ¸œ ÁÆsMè‡J§H€™ª£ŠCœÆœV©‡ÙÌ ê81°]C§©O×6ÅZ']“›Ðœ|E]v_/”ª_I^‚½ÁSᩌµÊíñP(ðG ~%·fˆ¬_‹Dº#®5}‘qIDÉ=^å‚)ÿÇëì‚έöèH\bÍÁžDŽUmâ.)LLGz7í†DY /U‹ÎcÃD‹õ¦QºF‘YÉCÇ~ïR΂Ûh <-J\T²¥`¥½1$œ¡ÖbѨx¨—Œ"ö ¬Kí_ÉyѶæpŽIa(ЦC\ìôÞ ²xíEbzže¡2;©ÁùOÍL‚Þƒ½Æ¢Y#„'K–½Ÿ#°nCÏÊy3¬æ O,+èMå»:ëÃH¼KÜ0pÅnÛ6¸ƒhº× vdîÒhÔŠµžÝrÇå ÿ›whä«`CÊÿV`Ý—{U?_ðí ¶ºå‘yÕJ–»àK¬¶¹ß:ƒåïrr\îÙ“%;¼n‡[ƒç­ý@$³å‚MFðÿŒb¯¬Tg¹=v]ÓÙ”šõÉ`…n\Y)‹ÄDÏÎó?¥‘zx}Æ õ`ô–Dñ͞ѠÍ|Ä ‹~0Zâmù%”ðÝj3#º~_‹ÝÿN°…ªC<Ž½Ø¤%Öq&oõìq¼Íê›Ï}ˆ${¹¦h§ûîòqâ}Þ#v—\é‚ ÅŒx9½=þSÓ[æºNkF޾{ëT#ŸßÊl`–qþŽú=ʳ¿mS×Yä¶TûþU¶¶¤‡Á¥öËû4ÿ6È&•GRôh½0‰ŠÀ¡îÕ?F¸«Hǯ üGcA ¥ªôÀr™Ýÿ*~ù„§Õmt#AÏ„ÆÉodâýÄ/’`´\:„^£úœ˜¥¡†eìßçîN<’oa!q· ³„ð>â¿.8ÐÒ@£kÁÔ1PxpMÎ$5å¨éŽ›«©Û²E'gþüv뇠·ç¶Ãª'Æf|Ä.XÒa§fGþ$O1e¼ë7éND¸!ð÷íýK¾© –ª<úþ~Yω€¢ñÊ6ô| ¹«æ4q­U÷ ¨WÆÏÁ%uÆÓÙEaøÓ°t€Ã…›wø3[²ëLNqRÍQA ŒMÿ©öèH–qanœ™NøÕ²– êbÉ:Ë…«.0–®”¬"‚p#¯,!¯’lÉ#cßgû7üc‡GYç0‚ÆÞ?4dK&$ˆü|öF0ýh×B+º÷·“áµy®ŠpV'd@Сé&:ëÁp>gq @CVà·Âå6K‘€‹¾¡ÿÒ+ð¬Ë˸ʶÆÒk7ç'óV¨û[5º±"a,+ÑM|¸ë—u(Í(zB†‹ÇRчQ»ÙÞ‹ÇEóÌìüWzµ­@öób„j±®û~¬Gôx_ôrßY„u½ôx­F俯¤T0öÄÒ+=n#†ö½h7Dc5w‰áµtÙúª/T…ÅÙŽ–‡oƦ¶êö4(*`ÓäpLGU1=(çH[-—bÊiÐââX‰Z…FUFÙ¤¢Ý‹`(y㔂/&*äq(ÍãHL{=“L…Ñ8TºwU…‹vf6 §h´EcÔ:¬e¼ÄÚÏZ#§à3ÅÐ0÷l/1?ŽäÃ÷“%.ÈB‹êe|[GØþÁVéìÎ㕊㩠,硎+.qÆ=q®¯Éô^"Þ4w¬¨|k û8‚ü Acê .•Ì£& ´«šfÁèY}ûÛb"’,Õ…èWk?1E߀ \[/5¥Z¨s7ø‹›—²z‰‚ põK*sZáM´ÿë»KéL›v¾Ñù‘çmÏÌžý€côà¤âÜ-yIå€G*…8LÕ”4úîçèUÈ ¦Ø©Â\Ƥ0WË\š $ýO<®…ñfÙ×a V:Vò˯ë`ce4fÛêÚž¹ü™~WU¯”4{¯¹B(Ä»Yà¸àž|µ›á;j³¯¹ÎWVéí*üØšä¸1hú}È9ÿ\#d°ØÙ£ ¬ÚÀMãÜJ?»÷eÖœ¹Ü_ëwë@e[„Ÿ}\ºo³G°ÑJ#©$í¤›ñítšœýà$=òY\•`ŠÐªgò¸(¸9°Ä©,Œc¸o'×-…Ží¸„¯³ƒV‰È)ã$gq'SYý÷ZÛˆZ©2ê~ ü.& Ù§¾~NqÆf8r¨ƒß+­uë¹{´ýÑi‘¨c)Ææº}¤ËW`l*Hþô¢o½Àð@*‘]qú5ev1‡Ä^}×ï¾ Ýúèä/žÔÇqjR¯X·eƒ÷ƒâðˆ~ÿºl?6°è8ªa[TŽÿcçÈ|ï&Õ¼÷¦­Q:>èsù·µy­tÉ e¡‘(å#B­p@Tyúàƒ‡Ô«Â”¥` ·D¶J±|2ÿ7"=òM5Œ ~ ¯i}F ãysn– 5Q ÀÖãÁñ%ÀŒç'IBGŠBÂò^1ì{Låÿí[‰3oªƒ¨«»âZð˘›Ýv[²‚´Ôðvˆ_ ¬{Œ­¸Ó³eºwR\JtáúØkÉí"‚«*9/ÑlŽ@WR٤ߗý¿®Ë:Å`ü°­šb°XEyÝnð3ã^ÿæöÐ.º¥íñ)X[D` }ÄàcC×:pŽÛyƸMqxå¤ÞZÖ¯¹ÉHO8Ëø”Ó¢ƒ6†ˆÌ5XyT­žÚDñˆÔ4bnéaC¨‹-«¶•7Ý;„R´þWç¯T‰å§æn-©¼¯_zJçh¾ðiHÃü‘¯EàÈ~è¬1À…œrcW÷܇ýßÍò^”K¨öïõd$š©§sЬ¼#íõ÷£q^.dk4´XÊ6f‡æžU´ž.9ý¸ót³—5X¼Ã¢AÒÇÑ€ý®0;{çº4¶±{/U)Šââµ–ËÓ‘/.<9ñŒH±´è€ã¯ÿñ.8«Ç añ7úÀbmú_aÕ^ÊLí}7÷šé š(æp©š?Fäþî8_ðk}h¢sQ]ßÕߖ烃ŠNaIGüPñ#I}Ã6Ò+·ö$ó)fžB×™ç[t£é)hÙ`àµx\R/B¯¨Š˜òà¤Áá©RŽ[10^ÝLN¤µJh‰%àjùÌ YäÒsþ·&HZ½F–$RÅ0eq?ûìÝšùÓ!ýôÏ&ŸŸo<µf"¥ ¹X;ÞÆgCÕònJÄðÊvú ”@ÑG Ù²à¸ûÒÆÝëÙ6u³_Ò/‹IôŽ)#õÈM+£‹rk±‰¥”Vîíçdݤ„–ðŒj—åf'ÒÊ$!¡ªuþŽÒAÆß—»ŸƒBfæs)ž·õØÒ@ÅåÑ Ûyo3C³Nº½Lµ[¿×~ “ Y0[ë4j–TL¨C—N>Æ4S{mo`¢w…fƒ÷ôŸ¾ñŒ^!<]@]%ðÛž`{|ŽË‚s§4 Y7Fû•·RêW¢Õü«=UŠ6EÎЛ\¦@—äNQ¸h :?ÆÌp’ÍTö]Ä5÷-+rSxå€a.š í®éð%Lt|Â|¶Yô§—LÅ}Ž¼Ý¯¦SE5ˆ¬ÃÆÂµõ˜Î€04¶’L…|¨æ5‡•J„gÞÅkܯ½¹ endstream endobj 78 0 obj << /Producer (pdfTeX-1.40.20) /Creator (TeX) /CreationDate (D:20230309131304+13'00') /ModDate (D:20230309131304+13'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) kpathsea version 6.3.1) >> endobj 14 0 obj << /Type /ObjStm /N 55 /First 424 /Length 2582 /Filter /FlateDecode >> stream xÚíZ[S¹~÷¯Ð㦶°î·S©­JH $ä¹°)Œ=€7Ævl“Ëùõ§/c{ìÁƒó²•*Jh¤V«¿îO-É3V(aDŽBGaœ: ë´0J¸„Â%è°ÂGøgDˆA˜("6‘RhX£0Yh­°Vh´° Ê%lÚzPê…v> §„öÖ ò„ÈGÆ©“Õ òYÁ´8kÄé…ñ ¬ æò Rƒu¦°Éo@•†ÿ ÊÃ$ÞÁ•…‡ªq®á#Ta^0Áǘ”V"X`^„!+xÈ"jµˆúRŒ $z‘HÃÁ›À3Z¤ˆB"eðR`4hÙ('¼È ‡i²Ëè‘9\• Qäl\ÀK”B/cÅ€”Å1p¨@ ^×Ê™Ðxü¸! !ß¶.ІÜô'E2x؇Åxp=jcˆ&5ìnëéà»ø¤ Ágß4 /9ÝLù´ZF0§Fé¿þ¢ v@©xüXÈ.õ`§SƒnD¬Ó2dîy{T´&ÝAÿYkRˆ?žýÇ(ƒDËÚjøÿ”:+ûŽ»“ôŠÝQkxÙmÅ›ëÉðzòˆ€u®ÛÅ{]Ó4Í£r®6=Âé?ɽíí§­qцï#§•/^JŸãö¨;œ F|I=h]AÏáÑî›Ãÿþy´óô#DAW¯u7`–yJ—ß-c²Ø²:àåQd‹—ß'ã6^~C†1Û­á‹¢{qY>âLØ·¥3èÙ›´zÝö“þE¯Ðy4)®Þ­òc9R$¨¸lð&ü‡ìÈ Ù•£GlÁN†ùP½aÿ Ò«íý7/þfHέ‚¤S 6È/þWBÚ“GòX¶dÀò\^Àž¼’}9#9–y-,Në~rðâõ‹=|¸¿:†:a Æ!b+€S^Œë¶ª ø‰Ü–ÏåN ü@?ðíAoЇòêªEŽ ¡àŽsüëJúû þéÉóÁõhp)/ /‹>¸ëù¹tY¿Û/Ào(‡rˆ?ÁôŠó ×F¤qXŒºƒŽü"¿\&Eç¬GÓ–A·‹¯ {Üý.Ç½ÖøÂ0¹…œ|@@¾ÊoòûbX‚Z',;¯ß½ä°˜Õaña1øÂÆüʰìË·ÄBAþí±;G ÈÿWŒ °Í:°ß=?Ú?.aG“VÀŽ—ìLÖE|OõkÙ¸ <|?[€´?— pˆèå·ÀnÀ÷wOðÑÑ-)TééòKVd¥ç€áض˜oÜCó ý!‘†µéË£ç/_î"°ã[ò ,Š- …†½ßNV"©õ0|œ3ˆº l+ß!”˜VvŇ”XÞÊ“[“KñåºÕÃC‰…³Ê¾+FÕ삹¥WŒÇë%˜aïzŸt¸åÀw:§téxrÞÖÍàü]ÆZ8u£y‰³S£Ì;S›éðQ#`(9¨Äb Q(èL%¢ e<8“pæâLWæ6¼|×¹ Û ÄváR"÷à^4Þ—")ùîû•Dúî–òŽÂUjCY`·ÈqaáóV:?œáòÿ2OœöNë܃°_ŸMè#ø%½;»áJ²@V¸cñÛ¹îht;“Ë1~¸C²Ó ço^ ·T¿P,”— жjÑ3{¼Ý€=õóþ¢=A×VÙc6`Oý »d]¶+•xŹ=nöÔO Köøe{‚_°'Ïíñ°§~@\²§Fè¨WðÙ« ØS?×-ÙSã³u+øãÒ&âU;Ü,Úk|ÎqÁ?inOÜ€=õÃÇ’=öÎþñzþ©mÉKöÔøìÔŠõåÂìÁï#ÆøÄ5îç³ïb9öU·»%­£ù ÃO†Ÿ,be-U¶Z·]¥›?ùs¬ÇýTOžä¯xÊ/2–Fl·àÜ1¸hðÐéŒ ò˜€q endstream endobj 79 0 obj << /Type /XRef /Index [0 80] /Size 80 /W [1 3 1] /Root 77 0 R /Info 78 0 R /ID [ ] /Length 227 /Filter /FlateDecode >> stream xÚË?Na„ñ™OdAPtdÅ?«èšp o@å ì<€5…•G0ÖÖ&Fk@cCgiƒ™i~yæM^˜ù_ L‘ç‰8Gb ÎÅ©8g"eøêûc(–D r¯¾-ˆE¢0óÌ‹Q¿ó¼±LľŠÑéy®Š‘<{F¢L ž>= library(grid) library(gridSVG) @ <>= grid.circle(.1, .5, r=.1, gp=gpar(fill="black"), name="circle") grid.animate("circle", x=c(.1, .9)) grid.export("animCircle.svg") @ Things can get more complicated though. For example, in order to animate a \code{polyline} grob, it is necessary to specify a \emph{vector} of \code{x} and/or \code{y} locations for each time point \emph{and} it may even be necessary to specify \emph{multiple} vectors at each time point if the \code{polyline} grob specifies more than one polyline (via its \code{id} argument). To give a concrete example, consider the result of the following \grid{} code, which draws two polylines from a single call to \code{grid.polyline()} (see Figure \ref{figure:polyline}). <>= grid.rect() grid.polyline(c(.2, .3, .4, .6, .7, .8), c(.7, .5, .7, .3, .5, .3), id=rep(1:2, each=3), gp=gpar(lwd=5), name="polyline") @ \begin{figure} <>= <> @ \caption{\label{figure:polyline}Two polylines drawn from a single call to \code{grid.polyline}.} \end{figure} The task is to animate the two polylines so that they appear to ``flap'' (the left will transition to look like the right one and the right one will transition to look like the left one, and repeat). The y-values for the animation look something like this (the x-values are not animated): <>= polylineY <- animUnit(unit(c(.7, .5, .7, .3, .5, .3, .3, .5, .3, .7, .5, .7, .7, .5, .7, .3, .5, .3), unit="npc"), timeid=rep(1:3, each=6), id=rep(rep(1:2, each=3), 3)) @ <>= polylineY @ For the first polyline (\code{id1}), at the first time point (\code{t1}), the y-values are just the original y-values, \code{c(.7, .5, .7)}. At the second time point, the y-values for the first polyline are \code{c(.3, .5, .3)}, and at the third time point the y-values are back to the original \code{c(.7, .5, .7)}. The y-values for the second polyline are the reverse of the y-values for the first polyline. Specifying this set of animation values is more complex and can get pretty confusing, but at the same time, we still want to be able to specify the simple animation values (like in the first example) in a simple manner. The \gridSVG{} package provides a consistent, but flexible system for specifying animation values that is based on a single, coherent data structure, but which allows the user to use simpler specifications where possible. \section*{The \code{animUnit} class} An \code{animUnit} object has three components: a vector of \code{values} (as a \code{unit} object), a \code{timeid} vector (default \code{NULL}), and an \code{id} vector (default \code{NULL}). The \code{animUnit()} function is used to create an \code{animUnit}, with only the \code{values} as a required argument. The following code generates a single value at four different time points. <<>>= animUnit(unit(1:4, "cm")) @ As this example shows, the default interpretation of a \code{NULL} \code{timeid} is that each value belongs to a separate time period (and the default interpretation of a \code{NULL} \code{id} is that there is only one shape to be animated). This example also demonstrates the \code{print} method for \code{animUnit} objects, which is useful for seeing which animation values belong to different time periods. This simple sort of \code{animUnit} is sufficient for specifying something like the x-location of a single data symbol (where there is exactly one x-value required per time point). For the slightly more difficult situation of animating multiple data symbols (where we need several x-values per time period, one for each different data symbol), the \code{id} argument can be explicitly specified. The following code generate values for two shapes (\code{id1} and \code{id2}) with values at two time points (\code{t1} and \code{t2}) for each shape. <<>>= animUnit(unit(1:4, "cm"), id=rep(1:2, 2)) @ In the case where we have a single shape, but that shape is described by multiple x-values (e.g., a single polygon), we need multiple x-values per time point \emph{for each shape}, the \code{timeid} argument can be used to associate multiple x-values with a single time point. The following code generates six values at each of two time points (\code{t1} and \code{t2}) for a single shape. <<>>= animUnit(unit(1:12, "cm"), timeid=rep(1:2, 6)) @ And in the worst case, we have multiple shapes, each requiring multiple x-values per time period (e.g., multiple polygons from a single \code{polygon} grob), so we need to specify \emph{both} \code{id} and \code{timeid}. The following code generates three values at two different time points for two different shapes. <<>>= animUnit(unit(1:12, "cm"), timeid=rep(1:2, 6), id=rep(1:2, each=6)) @ The following code uses the \code{animUnit()} function to produce the flapping polylines example from the previous section. It produces a file called \code{"animPolyline.svg"} that can be viewed in a browser. <>= grid.animate("polyline", y=polylineY, rep=TRUE) @ <>= grid.newpage() <> <> <> grid.export("animPolyline.svg") @ \section*{The \code{as.animUnit()} function} The \code{animUnit} class gives us the range of possible specifications that we require, but it is overkill for simple cases, and may be less convenient even for more complex cases. There is an \code{as.animUnit()} function that can convert vectors, matrices, and lists to \code{animUnit}s so that we can use those simpler data structures to provide animation values. For example, a single value per time period can be specified with just a vector, as follows. <<>>= as.animUnit(1:4, unit="cm") @ Even better, the \code{grid.animate()} function makes use of this coercion function and fills in the \code{unit} based on the units of the feature that is being animated. This means that the call to \code{grid.animate()} can just specify a vector, like the following (taken from the first example at the beginning of this document). <>= grid.animate("circle", x=c(.1, .9)) @ When we need to specify values for multiple shapes it can be convenient to use a matrix, where each column provides the values for a different shape. The following code shows an example (again, in a call to \code{grid.animate()} we can leave out the \code{unit}). <<>>= m <- matrix(1:6, ncol=2) m @ <<>>= as.animUnit(m, unit="cm") @ If we have multiple values per time point (e.g., a polygon), we can get \code{as.animUnit()} to treat columns as different time points rather than as different shapes by specifying the \code{multVal} argument, as shown below. <<>>= as.animUnit(m, unit="cm", multVal=TRUE) @ The \code{grid.animate()} function guesses how it should use the columns of a matrix, depending on the shape that is being animated, so for relatively straightforward cases we should be abe to simply pass a matrix to \code{grid.animate()}. Finally, we can specify animation values as a list of units (if that is more convenient than calling \code{animUnit()}). The following code shows an example, which shows that the default behaviour is to treat each component of the list as animation values for a separate shape. <<>>= l <- list(unit(1:3, "cm"), unit(4:6, "cm")) l @ <<>>= as.animUnit(l) @ Again, we can specify that the components of the list correspond to separate time points rather than separate shapes (by calling \code{as.animUnit()} directly and supplying the \code{multVal} argument). <<>>= as.animUnit(l, multVal=TRUE) @ \section*{The \code{animValue} class} Some features of a shape, such as \code{visibility}, are not numeric locations or dimensions, so they do not need to be specified as unit values. For these cases, there is an \code{animValue()} function to create the various specifications that we might need, plus an \code{as.animValue()} function, which \code{grid.animate()} makes use of to allow convenient variations. \section*{Summary} For relatively simple animations, all we need to do is specify a numeric vector, or possibly a matrix, in the call to \code{grid.animate()}. For more complex animations, how we specify the animation values depends on what we find most convenient. Specifying a matrix or a list of units may suffice, although this may rely on \code{grid.animate()} correctly guessing our intention. It may be necessary to directly call \code{as.animUnit()} on a matrix or a list of units to get the behaviour that we want. Alternatively, a direct call to \code{animUnit()} should allow us to specify any set of animation values that we need and the \code{print()} method for the \code{animUnit} objects that are created by that function should help us to check that we are generating values in the right format. \end{document} gridSVG/inst/doc/Makefile0000654000176200001440000000026414402222222014734 0ustar liggesusersPDFS= animation.pdf extensibility.pdf gridSVG.pdf all: $(PDFS) clean: rm -rf *.tex *.bbl *.blg *.aux *.out *.log *.R %.pdf: %.Rnw "$(R_HOME)/bin/R" CMD Sweave --pdf '$*.Rnw' gridSVG/inst/doc/gridSVG.pdf0000644000176200001440000104343614402222221015303 0ustar liggesusers%PDF-1.5 %ÐÔÅØ 3 0 obj << /Length 1864 /Filter /FlateDecode >> stream xÚ•XKsÛ6¾çWèHÍX Ø[šI3m'3™ÄMM4 K¬iRÃGRÿûî¤,NÒ‹.ˆ}áÛ ý|ýâå/Ênd.”4Ùæúv£d!´rk3¡ ¹¹®7%׿Ýi©“ýÐÔ?m•MÞ²àXVøv·5*)÷~û÷õo 1ßH) cjÌ2‘gj³ÓV¤®`…ï·*Oʹ%°úÝ< ¾mq1|&~œ “þø]9Tøý¿.®ø©R¥Ùžv™ Y²·“Úˆ,s›I…Lƒ’_»­–É4ôèwRÏÕÔô]p×l QXȬN7;UˆTKä͸Ý)›s¤9Fj)Rò¤KÊŽßý¿G¸Äͽï¶0šøƒ&|ðuh¦¦ÛóKÉýPMµÝÉ$تý—¦òW¨*MŽ3Î [™x´ÁtÐøUO†k^%“Û~ |B<¼ÏD;™ZÚI™ÅüÈòñaœü½Øî2m’k4È+L2†Ðªæsª³Š?gOyÜÜ[¿„íë zÑR³zð§~Í”@EÜýœšôcU¶åMëÑ¥4ù´u|˜P¾¿ Þ×’%`龜 ™É’›yb)˜‚ t Ÿe;ö<ûû0ç!6ÝaQ¹<ù±÷ÊöÌQËŽ®yÐw€2ùá¶\DÓUáè+ÆÚÏ-¦GgÉ89­d?èÑS>Í8ÙÒ(bЧ2ÀxÐñ”î€3þÐÁ-?«¶LjW2CþÊ‹½¯Å3Þ™\͆O¯…{j[œ—Ò×fB-,9FÏqdÒ¨šëõ©'ίڃ¿å’(Wo9,ì1ó&YiÛëákxg\šG2&)ážLåæ˜ƒ°žâ 0ejE®/Âô' ÂÝ1ŽÓm˜mᕉøëd‘|ô>¶Î#kOÁóïíË Ð=Ò/À "™‘ʉԮù# DÃþß©rDXŠˆQˆÙ § D³z(»È-VÂ6‡d¬Xæ¬;Î:¢•²®dB‡ ó¼Qm"VÏ Às%OÕó°l‘í´2oâha-Ôy€Žù˜¶)S¢, F™%•¦Ï2|)WÆÃÍC ÁgøA›Ù% /›ºïò%P3í ¢‰Ç)“æÌd…s_áŒJF%ŠQæ<Þ ¾ÌÁïa-Ü3ÀsàlªŸÇ*쀨…ƒ¤GßÕÐUÁ6ßG©”½GdŸN•ÈM~Ñ9€úÈQT¯1ÂJytdúèQC„Fº€qóãûrèšñð¿0®lÁÇfk&|“¨ýÙ¾I6Ü4ÓPüéÒ…ðÜ4 ô>¨f¼Ò žâ9Øí÷áhÃQ.¼©˜Ç‚ûÒÔä„.È4LPQ=²€‚ÄyzA¬ñ(.`çµ[4C´„k5¨¡GÒ¾öø]×óLÕ;†yðþ "pæ‡f¦«¹Éf|‹ç]ßUþˆ™Ê °æÝb€Ëù½ę%E°¼mªX' p§Ê^7sšæÏ˜UÐ=|ƒØA Ô(г¾¹ó¬À/C-1õìþ¬✟AÁç‘r«¡9N±jP¤*Êøiª¡(–j(¸pª<ƒ£ P¡hO±F¹nSιï7I®8õb %P{NÍ0Pü vüÄzË©Þàå#& /öÁ“Ëpð(h«Þ¼~÷*¬¦÷õ„ÕÂñ8{QTx•ÇÁ¢ÊOE*ª°‚Ε?[Qõ¸•|_ÞV.É@k˜g>(ƈV ΆÊkß8¨å^ Âê®Ê,™Gª2~àE\l(XóÀh­hÀ‹«ØM I¢ÇË’.˜r €Ð:£~h›`ùº¡%ÅÒÖ¹Sì(ÅKC&Oñ¥d*¬¾,ÄÄ2üK`%ÆðHíf‘¼ÚÀB÷«`ßUzqzñîÎ yª lñ?ƒg8@êB¨<rꊓwü‘â—pBÓ÷´ú¯{ð7oé§¾Éã#âùNÂ4€ì‹²¬IœóÚØÐ‚‹ëËé\„ÞOâUn\ø*tˆ%W)+€%£Ù2ªÑú|ßj€;^ößÜBÛÇ-4¾Q‹ÿ®0ïàß!Ë?2kçEÿ«ô9a²ó ]Cáÿ„èåsªÒß;&Ô zÌ·‹U;t‚P¦ ËT²Að/\zÂ]yÆrÞòáQ"Âø‚\.wî®WçÚÉéé_Ø<¢'2ËDfà ”Á ¹&'/Þ\¿ø&#/ endstream endobj 13 0 obj << /Length 2226 /Filter /FlateDecode >> stream xÚ­YYoä6~÷¯høI LsxI”x$Ø ² lÆÈK’Y¢»•¨¥^öøß§ŠEVwfƒ}˜i¥b_¤¿{¼ûøI†»„%‘ŒvÏ;!5‹¹Ü1!“Ýc¾û%ø±Údiž]Q»Yt5­v'ÛZ>÷U†í‡ýoÿúøIó9k%˜áŽÓcSäŸþ2¨„Mdm¹ó8¨›®õb”—SzØ‹ kÒ ÖDpI˜ZVÙ‰÷´‡Þè‹Æ¶ÄÄfÝOÜ„á,ŒB–„!VTG ‹BÔiC%™J¢A2'Ɔø2f&6“šéåTdiIŒAÒôl;ÛÐô¶öÒ'šfiEƒ'’–&£ìů\i›ÓjáIÓ A%Á‹ÉÜÔD|DK½Y&&“×p:íw0#c)¡™àfi¬OûXWö¥T`¿¤çKi?Ð Í<×eY£#^iq/«6¹¥é¥ñó>³--Õh‘üÊ6ez¹ŒŸ:ƒ¶ÂÍŽŽÈŠ&+áS²‚ØE,1*vî†~ŠE‹,¶tg:J@ʼnêÏkNuPR0q€Náã`( NíÛÓÏ…}½Få!0ΦÇËÚ‡Y]>Ü?•iöÇýúö¹(ˇÃß¾þ9³ó¥½ýaèLFJ#Ç/ð-gJy~ÍC_îXéWî‹*ƒ½G¾nI3‰Š€Á\žûÆæ÷[–Èü_e96ÖV_#Í¥¾Ì½ð²?Ö6i£ÖAð t$ @£9ZŽÙQA.²M…A®"|îš>ëúÆnÀ;ñA'Û`$$qÒÀUQmeŸ(f‰ƒ”ý´Á„Ôb {Ì¥ *àŽé™og¶½¶NÍ·ŽãR ”yÑ@–¨›7Ìà5-0À›1ßÖUNÑ `½p¿§•ž`ò8d<”K?å˜î”]F{w~íeÒŽF$0’ý@diqˆê)ÏÀþK‘[ß*Y¹’ ô~Ïí˦XÚ?ž ³ Q`†wKöKg«ÖÝ€‘âŒÚ—D1¨`ËüïRÜwƒ¶ƒD˜69Í\æ|/|, ›¹eSh ]’ãÃ×Wßýçî;|m×jjYœSè±4T¡ù#¥–;„7hà)Ü’$‹…œZ="Ó32C4J¿~–œT^ð'f´6Äà|`né7ë÷“®Æ¥Êf¶mCqŠo,øë. :‚TUŸ--åö9íËŽ&/û\öÎ×1ôS?zúsºW<ðÜžÀë<ð.OÅ1¾aÀ–WËí×m[øû‡¦Gømì¹FN/(í°G4¡¦'0ø}îÝÛœeÓ€VŒ%À,Ûº^DÍø×¸Aí¡'tü <(Ì endstream endobj 22 0 obj << /Length 2830 /Filter /FlateDecode >> stream xÚYI“ÛÆ¾Ï¯`é"°J„ÐÝX“D*ŪÄñ¨äTÙ>@ †D4Îxüëó½¥ArŽtB÷ëíí¾ûpóúËW&]œÚÕ‡»•±q˜Gv•Eihl±ú°]ý|ßõkg‚‡n½qiü0ôŸÚú0®ýð×ol²*Â"µ)V[„‘уöÍ¸ÞØ,Žeµ¶yðy$A¹«èKúdØ3LMÙêÚáˆ7ênm³`*§¦ïÞßÉf5A}O—ÖÃ|h[—c¸ÞÄ6½x{¬«óùm=VCó dicÂ"Ié±??ç¿å\L{|#pŽé¾oqoiTv[4ãxò‹Í´è|“Ç4tt¥ Kãt%Yå©KÂ(O½Ý“,ˆfí²$ø[=6»îO„‘„Iž{aÐÛy"²ÈH©È‚€Ä,ú–ã¸ù¤³rØêÓHßI[ÆŸ^ÏÓ( þÙ’/Ö÷MUëΡ®êF„E€4¨€¾®Ý ýaI»¡Á1q­—ïQ¤6ÜáôÄìÿhîøäíGzí­l{ rúáó¨§~‰œ“!m}©àm3Û’Ž=  mƉF1tBOv­®íËEå§PÅŽ°TÅ%À8õCMÊ‘´kÐ}D}R¼;yhšdð°/§ëÌô~mðÖè÷)¾ªM|kœC@Ƕ©Ê©–©Ú@,öæâL ÀóÒƒù!ÀE\4ÚöÞºäÀ¾î®·dÁv(éšÝòK”Du¸ _ašQ4z{ØÖƒ ç·kbrÅ<‹‚û£|ǶgM ¹ <ÖˆG ñÌÆÁ»»×Š;¯´Ÿ•§ËAo¾òE,CZeñÇM«n¨]B±‡«ý>h$òR+®‹ø¸ò/ÉÀŽ„“>éCÖ|•1L¥ô ÖBtoL’‡±I¯ÉWG‹í…·ß~ÄÅr?–ågï½2`ZÖköüÞýÅÎC?èåmó™ä£³R>³l±UHÐevÓô¾Xcp¦å‰ ÛºT¯Îè²?ð1b$åhÈz+ñA_ãÃo›?šn'î› _A ƒS'‚ÈÔãâ+Ƈ˜çÿVW使è÷oû»‰£–xóšü—7ÜØA‡¦&uÚˆ¡îØúváLaûK™z¶ˆœŒÞ®ÏŒåA׎’5\¼þ\¯ƒ åÖëì Ämüž'±¢<î›jõ<[qJŽúJgñ¦q"‡TE‹¯Ò½`tE†4iFŽíõ9~ÈŸgü&øñãiú. Šƒ÷äa]ÄlÒøðNOnA %•úC3“µ&ÌaèWÄV%K :M ¼!Gwˆv"«x é}UÅhH®—1:À¶ã„2ÎÔö5»)ú0[ùleǾ F6†!yVeXvÉŠÔ†‰É=/ÄfbxF߈l/ÃrXÃñ×Jµ¼¢ú¸›Šv‘AÇ™§â¹Ò8ŒÓY’|ÅàÆP—톭 Ú­À(fBrc%Eâ­kBô“.°€RÑîDMßșÇlÞ×slZ™« û©ÎÅ‘c–Àu:e&l`t0/Â$);çk˜Eç á½ÙK5†é{²ˆ—ŒlAGÏù•¯ÇÈuIr­åkJ.ÍY0êI/K8MŒòä*/Šà?ÆèÝÿgÿãt‹"ú8©åœ¡è3Ul8GÎS¾í¾)ç- z¼PôÝ~|KÏQåJ¸IºsŠpw길WL.R´²;kaîµPj2Õ½éJÞåÖ‰‡£/» ë$å%µú}O£ìupKýÛz•t!´³À»(Å\(Ž—w"·m†¡_ÊDl…W_ÊD¢°0™ßôR/¿oê‡ÐïÀøÌO¬øÐTÏÚçP•®*™jÞ¶×Á™ÛvØ[—ÌX9ñýöý{h&W.Sµ–aðÀ”~XŠ\,qµ”½Ö¿“éÅæï:q[©:µåÀG(ÓV[µŽb{ÙVoHi‚ÝÁ®$“JåÜj}l¯ÊØ‹?sng¬ðì›umÈ©vyµ Þ" ã(ÿ’tdw®î*%^O>ÐЬžHáSÓùôéøZq„ÐÿÝ¥()`%þÁn»”"#ä$ñ9äsO¤uá‰$¹6ìxÄuÏåÒ¹®Nr)ç…HžRÎŽ BòN.P òiŠð3Ç­ô¦ä ÆúÕuûÐHÛ®–1§[øú.9=ç;©OO64;0¯•JUª…—þ¹¾«ê£>ÃÝŒÔHlùpI1´_jT¦- †û~ Ã/Ҝܧ’[YúíÔLºP „=†ÃiØ P¤@»¨)çã¢ë¹ÏNžöG/ÏÁ0¢.”/¹™oU±4— ëä«Û#Å\ Óœ;R¹Ê[yŸÉIê»vXçnù|+0¾ùû‡›ßn¨ä‹VfþcZkWÕáæç_£Õ‹ -tpQ¼õ°2.ÓfK»º½ù÷Íwô7(v«év¦mÆ%.EÚùUÂÛU†‘‘„‰öÆ")q²éÛµ-‚ªb“#{°‘ÍÖ·þo M`p2€b;ìH`Âéb[U¦à'÷W½ ¡¸äTŒf×y;ÈÐüíÜ¢Y(uÏ¢à­Ú€&Œ|ï2´U rˆµmvdT`øçæY•q—H׌ôh”LÀé@„“¶•Aî×Ô-nOµœÐäßPvËlô µÀU©L*5¥ÉæWR2ÕBÛ4åZ]±â°_p}‰nOãè¡iÛæPo¼r…Þc ãŽ{,Ú‹o)Ÿ¬Å/@'1*vZ‘ åûf·—:œzªc3ˆhúIªêØWî10‡}ÂØèªp©I¡BðÉalTÅœ×ëÿ®¹tû endstream endobj 27 0 obj << /Length 2714 /Filter /FlateDecode >> stream xÚ…YI³ã¶¾¿_!ç©ê‰CàVS9ÌTÅŽS岓‘}Ï#BcŠ”Ið-ùõé \ÎÌE›`£Ñë×ÐûÃÛïU¼Éƒ(»=éYÞoÓõ«~U‰kâ±ÇÎZ!=WMÙ¢8Ï£÷7Þ]o•¿&ׂñÃo¸ã­‘·O•}F°zÅDÚ£0ÆL$z7p¬¾¸Z&P»8ÃàO³bÆ=sZltR­·—–ž†º~eÚ ðÀ^®lŠ$´Q0j ìl˜ïè©äœL¹Ÿ8ðœ<4%Ýâàu;-{D(ƺ»Oš–ÇóPtû„µ~c xœÝ.¨ò×8Ônö?õš‰ñ$ÈVI¬Ðlòuxèl/ ::[¾…i¢|„-¾*-ntã˜G#-§€pñ΂ÄâxºÂYT7>³ºT2iad÷´CÙq¶L#>ž ô:1bí®Ucù‘mTdÒžÎO‰/˜Qƒ±r½,¦´‘cLH¶\°šåuÚmI äû‚Œ¨z5ëd°*mpÆÝ”Þþ²£œì>»êæà]Ä«8®p¶< R¼í`*V€Ùd;xðŠæ§¶y ”ëõEi1Îòíû_0 E&TèøÁ匶GË«D ÇVÇ)¾ÇÏ e‡¬h˜Á)Ms|Ïy‹ ‰è•†tÌ+’úz¬ ìÆ3> „é'Ãôƒ•¬›U ÃU©£Ž+!Oa$Ù†¦®þØ±Ž£m-TÌtøÍ¤~ ž[.µô+y³?~¡/uçŒ/Ò=$<„iEg9㥛$ÈSQÝŠòÀ@€h(?ŠùF¸êá?° …›h£’4ˆÒ|'Œjs¼>|ünJx bd6Ï´ôºI!¿a*®7þõðAÓ|¿‘SÊH`¦Jrz8KÅyÁ':0ZVýe%_^’øH@µ¹T\9ùØo0^ªó…R6ÌÅ,`(O¡â㟎/©JG: 2®¸Ó”é9û“€Rðp«ÚNèì9¹°VA 'Ùƒ9r%VîqnÇ”Z^9Ï[ïe߆¾R5Çz(™Å[‡GcHb|$h “»4C7- ÒÏä°’ZðM3‘  FCök!C÷öä“ùn‡Œ^PÉâ]µY«Ì6 jq£‚S ®¤gÎ{×îÁEp0æjås5°E§ÊfN…ßyìƒó1[áâªÆ ¢¶sUÛ¬ç)PØ S²ñ9[{£! ]I-Ê%2¤××Ô•sµ¬ï¯ð–4"Þ" !Ç”Qd ‰ÈtRðk'ÌlÑûÅÐí×°‚ï‹ÒQ_¤Õ .PŸ4@Zyü7åÍÈa‚†j„×@cºã§F~úËüÔØ<Üû,r¸Tèk*$à>„FL2+føJiX})Ä…^P“zA©x¹‚±/¬( lÍ`œ–òHßP˜¯‰èRœ­H2ŠÄu šUŒ:«TC!H"ù\¯˜$Ûìg«+|"¾‘fÖP¨'Øc¡×=í&,t²ÏœaNuíçÚ^û·œ3‡*74• $N€o¾×ù¼«H£@áJ˜é1Ûþêõ§_œ N¯òtê+¥Ó½gÌ9GçI…»{Yså9=¿än^Rs‡x\ÞH(ׯ5€ãžýôë‡×(‘eqŠ))„1'…0‘ló4• çKg¹b4˜PáÌ™Þ>²yXdü˜:1vã%gÄ:CÏAEZ $Ò’+Ö,G5‹Ðpÿ<Ì™Cêv?®yåÒ °Š>ôšsI ’bΆåÀ¾ „ àLßkïìU¾tÝptCç?®äCûçë{ ñ–Gi(¨ær$–Oqkj‚<õë83IS¿Ô­sl>,‹¯×&8 ¿mݯøœYÅAœeüýÏ Xãÿ±l•êØ{Ýíxù[´ÂKåAœ&~• í;N/ÓlÎI›SGIô;tÜdq ˜Ù•T &ÆxšIŒãk?þg ‹;~*x¸Ρ iK®3Ü;Ô¨A†a¡t¯ÜlÌ{û–+:%ãV°f±pi«Ÿ ø dîìõ®i øºùuKËEÛ¡— C9ûk£Æã-^‰ö»±!ø†+*º\BxÛPNYÑUîrµà^ßv¦wMu)ç]n#}iÝ6g*}&§Äʈ±K^ôT<ÁÜìH |B¤!%È$,ÛZ>ó¥Túo™gKñï5LúTÐðÁ¼çi%/Á{Ÿªvª´H½Ô=E1¿’  ¥Ué" >üöÊ udf¼d,«~†'˜?ÝÀÞHT¸p¶ð·Ø_%ƒmBè«Õ@h,«:‘û‚d¼"§‡¢çñéò4Ôüàï3™µÜâJoí·Üò@rD´Y𮳄µˆyÆž…³§] LêÁöž_ù Ä jö„Užäq‚p$Á,ôsËoÇáö\¹žáâ¢*™Æ0ª5›GÍ`‹ÞöŽÑ)][Q|%ù" ñ» ½¼Úˆ Öe¡‚d£Ž¾vµé40ÙÝå†Ñ›°jÊÎAšåÀrš “\ßIaa1\˜ºWA)ŸÞù0RÂ`äd Þ(ï ]{"'µÄˆfÍÔœ$Ü÷ä„blx1„«ãPCl°v ð_‚·¬©op0þO¦qócÝöv);;L¨½Ö¡ü÷„÷Ý °ð`@â/L.ÄÊß²ÆÆ· 0Ã>‘F÷מg¬˜ØÀ¹$~ì·‹e;`ç&NÁêß39×u0‘ Æ{ÃÿlÒFU endstream endobj 31 0 obj << /Length 390 /Filter /FlateDecode >> stream xÚR½nä ì÷)(턃My']NŠ”4±rÅ%k³^/D†U”<}`?î’R¤1Ì73ûç°¹¸d)¬$“hØ!ÊZ܆:"1e ú[ig:Z7× g¤Ò°„ƒ^–Màw…žê†õ•c8¿™W;ÕÃÕÅeK>úvw]‹8Ϋßë,#XÑî©(ßA¶:Ø1Åy£¸7Š1¦ôÞ¾vSIm_MÈ.¨¡ªÅRÑ(VB€~ŠüEPŠyû­œòN\t$y–9)Nì† Lz Ì5§Õ˜ÎלUÏ‹™fs0.ŸÅð…A Xô=(\kW§>õ RÚ=†‚=¬7:Ÿþ³·Ñìý1Ø—jRa~YŒž¦ ?ïËôèOúqµÛcLS´*v2:¼«äVÉy#|‹){q^íü Àºq9Nðwñ¶ÒëÖÆU¯/p{{—ý~ÃFÇb ÷”÷3+äXãjŸ"4¨T˜KÁ)¦¤ƒ<"ßm~ ›7|È. endstream endobj 47 0 obj << /Length1 1391 /Length2 6224 /Length3 0 /Length 7174 /Filter /FlateDecode >> stream xÚvTlû7%1:¤‘I(½”.éN©1 Øcäh”$$)EZš ˆ„J§¤Òü§Ïó¾ïÿy¿ïœï;;g»¯¾®ûúýî3Á«Æfâª.hg¸…‡H€€ê¦r@0XJ – š#°^ð¿´AK8ÆF)ü/»:ÅtP,ÁÍêúy!R@ˆ¬DN J‚ÁòÿrDc€P„ Ð@¨‹FÁ}‚êhï ÂÍK¨ò¯#P& „ÈËˉý ª"á Š@±îp$¡" ê4CÃplÐ?RÝrÇb½@ €€ (ÒWqS °î@S¸/ãwþhEÂÿ &š»#|ÿR›¡]±P HPx!`p”/!ÀåÇ µf:ú@#o8ê/gý¿Ä€_ "ùwº¿£'B þCa04ÒŠ B Ü€®/8ÐHK_ˆBQ.¿¡^¾hB<ÔŠð‚:þ4j©š¡„ùþžÎ†Axc}%|^¿'ýNC¸dM”‹:‰„£°¾€ßýi 0páÖƒ@Öê‰B p](×ß#¸øyƒ,P?¸ŽÆßà?:78(ƒåäÁ@¸sýNnä ÿc„üVúÅy£½®„à¡W8á€ó…úÃXŒ<÷¿ ÿ”ÐÃánà?Ù j¸ë_2aóD ð˜<üûóï“=[.h”WÐÜÿ,¤g¤¯gj+úgà›ÔÔÐ@œ¸¤P\R „@$%r„Cè?³CwþO¬Ê ”ÿ«YÂ-ý«aÿ¿·/ô71„ÿÌeˆ& úÀíÀ2`á òÿ ó?!ÿ7tÿÎòÿø÷£åçåõÇ*ôÛüX¡H„WÐßv^ý°ì  @ý·«ü/ºÀ]~Èÿ¶ê`¡¨¢Ü¼þ}‰_-D ÜÅ…¹ÿ•¿ô¿ æ…@ÁѾˆß Pÿ—À*˜'áÑð%àñ N Í?Kj¢`h—ßì’”‘B1h€°b‚$ÄA4tþA0$Bc !@Âx¡@W4ð{ŸÒò@áYú­ü#Â@¾pÝÿ­AØôù¥a~ x Aèë_ò–Ãáp`b »y×ãÍÝw‡Uª\âKŠÃ‚KV™Â⸠L³ß1Ešð«ì¨ÌjZoÃ×M¡}•IÞ3ÜzÃ[ŠØÆ“¦“SÇdÓOKM€ñ!Ö÷ƒÏ×U«ñ!–‘ž¤ Ä­º‚y>~7èŒ ˜º´«ñeScÆ–L–_ÉêQŸ–}`‘hùbD0ßùÙ(;9Vœ‡R„i'~dÿ`˜)wð‚W7Yºñ@ªg;+ùðh4ø[…¹¤o‡‡-;é>ÓÇO×pj«éºl_p%EÓ…#v~ÅñR_ÛˆìµÃÆæ©än!’o¼Vî!½ºì6÷k£•º¾%¦W9™þ|ùL¬<¼Ò›Dfy弟Ûΰ…ã)cª}Ã×zú\Nýðí“Ëó²ñºüW9÷¯§òî`îOúó*Mòjïq¤W^ÑòšÐjѼ û‚W¸Dò÷…rø®"JÛsz2ÌJ4øÂS*—1]‡òš{\db;ƒöQ€à66ÎÏ"\T?kDã<ÝK‡I<ŒV›¿úlPíx^KYvTŽxòñ¼7v…/¥|P<0j—"œ“’>zŸ—¹s€‡´˜êggúrBšÓæÛ—u© ½GfL´Ôé"ýÊi5äá°ŠÅÔ%+¼º%y+ùl”óCåçvÄ w¸ïaK• =âøno£´°V~ò³ý‡ƒ§Æ4–[K%¬ãImÞÏäz'íÑE§¶¬švÍr a4åÖ÷«j5C×ûíSmõÑÆ½æ‰ãäÅŸ¡ŽÛk /i{ý4\XbÆ¥šPd¨qØš¹ùIÓ¬æ”vÌ7ÎÍ|2<ºuž›çú<Ÿo=ç™&Ç6¬“Õ $Èuº:¿>µdþäB¸4ì²€ŽàÀ…Ïìccþjq¦”ÁUË@ϺŽ@ü†Êô»‘©lfÛ]Y÷ˆí—ó“Šîª“U3ÉZù“ÐÎcþÓ,`x‹Ýï}þ&qG>žœÒ»zifüJ-‡ç,p%Rœ9¬u$|ÿ¦ýô:®ò¥MÅe@#,ÈÓ’¦Qid›T¢Ù+1˜ôUq=EHС¤$iÙVÏ&\ßÂùìûg|÷¢ÐÌÎ&r»‘õ‘ƒâ·éCI0»Ót|¹>rD|°hÂüPÿñî(Ú`½qäkÞþ¢×EÙ;§ãT¢kõcþªÕïh;sí@Þ2îMë:@U’Þ]«·¹Ï)zŽG•'Õ;ÊZ×e>‘E§îm_ ÈvXK¡9bï*÷O"Ýû$-&^ïøñn¸©Rd¿°‘¡üP£ÚîÓžÞÁøìA97eµx~^ e ææP`ÿkæÖ¤)ô»¹ÊÌ(›Q0NÔPâø¬&¯4w]1/²®[G÷„»àjÿ1VÏ×U•'¡ÂI+jžNzT®“HïØ~½Ú×  ˆlT>'Þc}¾ºÅŸþ6/†L¾Œóæà-™ê%á§ÆAtÔrq¡_j~\Z[ÙãÝ’Ç ù©UaHÙò[–z^¤¼Á–‚~U>çÓ,ºA¯Íp˜¿Œ_ìªëjQ‹óh¦[y—Ði–é”dç@ÏyñôD´È>GŠ·¾n¬î‘:©M¡ ÈÛp8Ÿ”Õ~JËܦ£Ïý²Î}{Ùí‹ë)}§¨bcÐöE$v©ïc¶}ŠÔÚ9õ‹Ð!ôI¾J"Õî:íoö…=2òožÖ†"¼_@÷(NòÃø>´'™]ðTŒŽö9Ÿài¸ó4Ǹ)×nNÇäbÙkmÖâœÛ˜…ø×i‡J‹åô¼Ò×(µñʘ"»Ù¬º'=úÂð€Žbö䯙j¢˜µ$ØÊTNžÔ½v@VÆìÕ· `œ‡>àJgÁêŠ)Pœ”•ƒQéõg߄ΘÙmŠˆzÜQà1«.ÓÕGfsÊD~LGD“]4g$¶xÞªÚ´¸GˆdÔÛ…ÑŠÍõ“yÝ™Âë)¸ßWŠ«H»¨È¨´V?F/mwÃÞqr•“õY!îŒ$_Ú@²¦cÙË)ܯɜ b#¯3‰|§¬½NZVŒ—]R^\ZGµªæ5à²sªžðŠ5=Äá²4â6$ÆL‘†Òž3ËB,DÌY ^R`ƒ#†2ÒÖÜ©å9;M¢Žj àb•äí å“}ï³Í~ìfÐ7*Îô&½Ò€÷âê˜ñªÎì ­½ pGãI¹Dúö“c&»æpóqu¼}äWüñŠå÷ÊÑ”òi9K¨#´·mwŸOÇ¿9¼É¶ü‚K<òø2à@a…ÛÙ(cêÎaÆ­Û/ßQŒ¨Z“Lj®7¥v]¼øeá–{˳Æç‘>GgµZùòØŠáFFwº1Äë4—ZT&1 Ÿ Á2o/ Zˆ‹ÖÎumÉOv%£™N/wiç©{êÿ@{$Iª ÍæŠfë0½®5ñ¦Ým¿°­¥; ¼¢Úê {o´Dù CÜáë±¶™HŽ U¬ŠÙ`ÈÆÁ`.rJT±ªÌ²‹ù6¹UžñЬÔÏ’þdZ•Ž<ÖªéùZ¡÷e¬Ô‚HB­”F†%ƒÒ|–É^¼÷©Š.LäâËÞ;Çèô†õ~åx¡ä»L1½¹_H~ \e£RrÔØS"s\ºÊP‡Ói~8N¢Äü1èÒJÔôúÛoѼª’ŠmjGÊ[…ïÚùLã«ín޽baµ'¿|$4C€(ôÇÁ sÙ›eëçÒÑßöB±¿à9mç¤ì$#“uúƒ°õk)ú.¶ý¡{’1V»YŒëÒ/FKl59ö‹ ñT³öiL„lÛ*WoÞ•»ûÐ ²Cü’F„Vã–ñ¤ÏÃþ(~–:X·…ù0-ïù÷ÇJ*/ò –þaÏ÷†ßyž>€T—#ŠÑŠ0|ID4çAy=ë}bžIÂH2¶á€ûH’ë‹ù$*lKb³<x·µ+-¤Ì…y‡}&©þÜsPè¥Ö€Z¸!’sÊmC$uÄ'áF¶&e¦6^qµ?ãg¿ïôwT¢ ßbhÓÓ™õkr ½¬§MG•»üK¯ö§ÚК'Æàa°w)ªìã}M»È®‰ÊÑq¹ôŽÔM&¿(ƒ£M»âiÙhµÇÙŠ!yy(RIçË–Y-V¼{Û5,¦;~;O6ìßÊIòǼlÝ©ʱ,Õ™i²6ÉT¦åŒm[|PPF¿ô¡©f°²£?ÿpùÇo®OI1›ñ Ñì­ýËîÄ 5Ýýs¦bþ¯äîÓk:Eá—meX9÷•:³Ž2(žìàDzY ù/7¹›1™ªVo(IvM“GS*{ÑóùL ÑÒøn»ïç¹O*íÊ;ÕÃ_JCTädØw 6,§ˆbhrT_ª˜P»5¯Xî¶®gDC›¯n^IrÒí{ù…C^"¶Û´°¯$BáAQüà •¡_ýËéØõh5¢,ŠýåXX™_S‚îkAvˆüNžƒ•œþ±PÍçVÏÛ«70øp¶ uP"k7¹#å½òµO W™išïÆ@Ü:Ýœ€uŸ\ªõK§ª=™·tA›78–k ļˆ~bÒ·U_tþN7Ë0ð(‰]ø¿ß9¼põÛ,Ūȭ$9>”‹üâJhüý[á¶oë t{‡iörµ ¨Õ{giË­tŠ ²ñë°°+üN/ÉÐNõ:³‹µÕ8`øY¦B®ŒÄoi ôÊóikJ¢6z\ê¶,÷ËR}Y„½?þšÜ9¸¸mĦaúÅý®þ I|bìã|i©2@KìûÊT]ÒÓîN/ñyÁ@:æ«Y¿•÷ú$mæyéqrм~ÀÒ'ŽžóxgÅyôᧇ¬õ%°ÙñÐsÀ2ÆØÆ§¶Ž‡¹Ã•ër¼8ÇDÖã1…ÃVüÕÚäblø’¾¿æ÷sÿè¾±³úÊô*C·Ö/Ê¥ÛwŸÎwÔŸ ·Úle°µÉ:X€c»8µLX‹Mô I‚‹ŸRÑLÚÇ”œ=!§S7Û)ðvëní¹°ëÄÅáÙ%Å 3…æ×tM·Õý®Q4ðWÁ[RBúNB¯èžÜ]›G?cÏ 6°1OW·_FŒtƒŽß?êq8ÔÇšC{Ô¯ òq‰ä7‰çž—2QÜuz»y Rm¥þ­ï—g¼¤ÍíY†Ô$mu݉®ý‘” £%=ÑHZnQ­©] jA½¯›_¬&éé&צ­l/ѤùÁ¸M NFM²'­˜?‡äÔ<~SÚÆ¬Fd¥o&$ÞÔº¢=öâÇõ³…7øÒB—ˬֱƒ¨wûöý%…> veìi£/¢ØPÀÙ;=â³wÝ- ç}0orém­õ£êëÝ_‰mؽê{Ñ—_ØÅú!ªÃ¼øú¦^ï´çþ@ß´ ¢Hù.ErÕ32yÊ‘ëcêζ ùâóxÔ5O|9„yÚ÷Óƒ•”˜¹@áñ+ŒÞ,µÐÑ«v›m¼Cî-Ä {ýfÒo—Ñ´TT~¶S-dþêo ÎAæ1è!Vq+)ÜÝ‹ô¹ÒZE|ûXÀÄP¢/¾ÃtN<'.Ò6T5ýÍõVŸ°´ÿ —Þ¤éÖv-òĉŒ;›;-N€Y©Qÿ¶ÃěѸô .ö0¾'눑_°éõ~öÛžns™?¦A}s´hg‘À5_LJG«Õ ûîSvßX·Ø×lÝ #)nRT×ò¿UÕ–US®åÅwƒ˜.àWY®“žî‰Æ;–n fÐM¨6·ß.nß2§ÿ dèÒªvúÕ˜Vé œôf¦»ò@¾+-…M½¢œ>ZQ0é°8½"Áx2Ñ/³Lý;W€ìŸÜðê[ñ³(aY:ÅAø>5_jn)±ô×Ú°ñå.ô»N,+GÌ™Œê'"îGÁì¢U¢sPÍË4=)ÒÙƒmeuÕçšËTÖ×!ð²óEÃò&ú+ù—¼ ÆZNíã(Bs.ÏÛþJ~#\ñè†wTñXº€µú~¡r¾¦;×Êý zEHŸažúm‰÷S%(f–ÔðaÔÕP¾n£\ww²û݆QoJË4ƒ'o9¿(‡RïOÄÎs‰2½!üǹ|62Ò’NIZÝŠQl­@¿.©`ûyô|”®’Çu¤ß1%Éf½l}»TPºJÔ`ê6)6`“8”Ø~”R(ôÈ+b·kò4L­ðÌ!–,…‰–à2wÓÀ%O+¡1t˜!‹Å v¬ L¤î TŸ<¨Šn÷u•>JÕÑ2;}ï.¼n80P2źP¦§D ®Á;.Њ8½ TyGo°‘ót!49äpÉÖ°É¢û×Ãõ«ü3´&Ÿ›éÕ«ÒstZ aËh®_ÔÀ²„y=3ª;$P>»1nsTþùÅOÔ8©Æù›È•ù‰œ] üHùÔUÞ»y#I\6˜Áb ‡Ýä;C¦ÄжKÁ*Ýý^NUݕ˂ÒT·¦†ÂJ¼†Ç˜%û6S­j<Êš\ Œ:[y‰–̦ðR®¾ÎæêAÅ$q™|Jl×µ×9ä^¬ò ÍRZ-À†Ç„\¥-šÄ>kÿ-‡±¤{è‹Õz”°õÿ©Ö@ï)éÏ Ñ¶”›(½ìùzýÈvæÄJ–r§FñšÑפí?3²¶Ù+=ðC§nÿܵÂÚ%þÚz?ôS»M7ÚÕ‹cc©e]õÉO×=W%¨Œ†:ƒ@©lü—[RËYZ­ˆô6(_„9“{AÀ`–«¼ø9ï"@QR"ÀN$ƒ/yÉA¡_O+ãh…¸¶¤âìÖžØYç,¨ö´f…Kg9}´µ™’â³=) i~Dsv/×¥Y–LBN«ÑS}4KוqÉZf‡gkw¾Ž?æŒö‰ªLoˆà#ò2çši›É1ì\ Q±k$}OWwÜPêd°Þ¿SûYÝGS”‹Ê5¹òÆÖð=†Ê´ú*·8Ô´9 2M¡L»¼ö„Íq(;ñËÓ•ŽqúaJÍÂ}OåÁõ¯H”'ßc®/2/<@’‰a Î÷íkVÞ“ßão×JGÚL•®„…jx¿Ì0ç6—µüq2t› ÆpŠÇz”ý –ÊÍž´» Ie¨¹‹äMyîd½/êÍÂÖ¤'ÆÊ6“‰ô¦O_9T‡SÏI9o ªqª”¸ÔnÜZ÷M¹oüÁ Vls±£ ™öÉðÚOF²þ¯Ò™ûIù€KÿêŽ÷·kÉØÌ€QÚjQåG奲½‹Jó¾¸ku•¥*´ÖÁŒ4‹'oø™nßÕLô· ³2z lI)…—"5¤Öº7™-?DL‘¸ÃGÃ×TƒAVÀ³ã2Ö3ûpã#çRú¼œrVܲŸuWg¼[7%s2Ñ»ñš×îpgk2-Â쾟÷q«òâKþ=Ú èñ÷ù¸>»wÆ3G1 /»!úÓwíî 1T©·h9oïz˜?àmì›ÏßÑ™zETu£ÞÕŸ¦\|b`–Dp2§È(rXÍÜò1ÛíÒ)6Ñ6oÝP3ÀLï¤w‹.‡TLI¯Í½3h/ͷܲ3ýF5cÇ;Q·­ÈÔ˜ºLÜ\—N;-Üa\Œ%7î~œ"}"# ò^$ûç!¨ë•²‚9?0w/ù õy;tµ¨<á÷ º%½àÌ v )Zæý²ãža2®Éu/O3"NÅÕ0oÖ._‚ÇÉ…_ÍÄ^R¡ž_bçôÅ4JËp$š‰wZ°ô2°9>%™½pú¨ÅO7³Ôš„ ztËbºÄ¢È.Â;„~­×ùiªXÈÓ©*âøu2Œ´Jáp!Œ¿ä5ƒ{˜:×/%+ËìU>¢Ì¹3mÿ€„f”ÿv÷ZBd·¡_GÂÌà‰Q2üõ6’Z͹¸¹Êÿóó”i^jøq©·ÄÅ-‹×üaüôÊ !Rû±Ñã¯ñü}[íPÙC{[¡¯xæ§cæÁf£1¼qª±WŠ}ÚM%Q^7êeÎB“4^æÒ께Þùk–U)jëw‘iâAF¤% ¤E $ çî¼Wò4«àeUž{iCüáÞþSRŽÞ®´™™ÊÈ¡Žŵ÷Ñá¦Jïº,_ß’²fÕÓÄ—L¾Vͣ Tvåts{¿34çn3×¶&a,( ®Å‡ötÚc!ÉìjRæ°+Fg±S -·f$²_1‰÷IÉè_3›ðŽÕØ?;-i¹aþT@õ!mG¹1ÐøU5žŒOSæñ[crDdk^4iNs+Âm8¿4Äÿêuè òÀ¯0åíî¾nsË 1Á–||Œ¤–ΙwWÃ?L>dIxÆàjù`?V^"‰Ù&ï›1vÿ,¦(Á8o0ó†{^.ñ²*Å6í¶Ó,"úÑnاcÚ^K ix'UäÕajvÖÕ“ð>]=.~ ¶³q¶ø·Oð?KšÖÊTá\+¯í{®UP›³.ê÷ÔÓ~ †Ìr‰ìùkDUd¦È]ߘQ®/g½]2/Xº˜¥XàSò…&²~K•s¸ñ Á cøÕVk,´QË+töšlênµíKFÿµÏ¹gºm)IÖ?‹Äíã„;ýl7¦#B™5OFÎæÌrÃ/pæÚ¹á‘lS4ÈÌ_ë0Ж[Jr…xéHø9þ½-‘™ºEë¯ÔCdÓûÞ‡¹ojÿÜÌv endstream endobj 49 0 obj << /Length1 727 /Length2 17472 /Length3 0 /Length 18033 /Filter /FlateDecode >> stream xÚlºctnݲ-ÛvžØÖйbÛ¶mÛÖJ²bÛ¶mÛ¶ïÝ{ß}N»·}mþ©QÕG«^}ÔYsL2"Q;[ge{&:&zF.€’¨:###€‘ž†ŒLØÑÄÀÙÂÎVÄÀÙ„  fb P2±01˜™`ÈÂvöŽfæÎJ#ª;ªÖÆ6ŽU;k;W #s«««€«“ ½£ ý?›”LLÎæ&S k€°œ¼†„¬€RLV fbkâh` w1´¶0H[™Ø:™PLíÖÿYŒìl-þÅɉþßl]Mÿ!fêhgù­,(*'« ø-Ì , 0°5H‹ÿ³ÝÖى봉‘¡û¿ª£8ÿemð?–áÿXÿutÿEÃÄ0¶0rš˜YØÂ0üK7 [S;ûÜÆ.öÿ ýCÈé~Ê4¤›˜þƒv±¶–5°1P ÛÙØ»8›8dìŒMmBvÖÆ€ßîÎ&¶Æ&ÆÿEØXX{üÿâÿBÂÙà=mÍþQñ?. 'Q wcy ç$75°þGªûÕLþs>ÿJôŸÝÿ¤üs®Æv¶Öÿ'á?Åü;ƒº¢„¸,Íÿ´Á¿Ã¿mìŒ-lÍJÎÿ(jàhü?އå ,þÓCÿ¥òßž0ýïZÆÀÙÑ ÅHÿ¯&aü×ó_KçQBBvî^tÌÌœ:&v €“…Óçÿ¢käâèhbëüoÙÿ©å¿ë·“‰‰»‰ÌÚ²w°eZsh™ïï‚ÙrpšÙi}še&à•©î-d‹Asc½Ã+œ{eœ\78ü™CÞÝˉû&bƒ8¸ã‰Éh¢peœ×"’r3ßê­w…¼·ºpÝk0Ul#Y°›ˆ;ç?ëkòÔ“¬™ÙçÕ’%¼ÈbLÑú¥í}àHÛñ« ¶bT:(šßp&û4UH³æ!ù׆ü¯{k a¹A»p7dØzæùeö‡ašyuW–ÂÚ jK=ZÕ9LF¯!ˆBfwvN€®å´,†hSUfd齕ÏY §…]uñÄ [±4v|F]¾ÛÊxˆåÅ2 ô\wƒ›/ú*‘•ûNyФ Y€¸·øvK´Ä‡ùEËå•#+åˆ qËr*Úš|t`»úþªódŽyqµ@³Êôh1c”Ù–e7ç›_• èú/~i +ßO¾Å¿¡ã¦ù ÚÙbu/L¥Ä´ïUÈñ+X,¶`Xþ\΀kg¤¡« …Pïô¼©´Õ™§Ò%’»ÎŒmÀݨ)¹¤û_4½rV¶Ù†ƒP íIÑ)ø,5©fí£Côd "寥¡)6}//Jþq]P’­öÛ[Æ5?X Ss¸}{Ά]9+œˆrSÁ(Ÿ†F¨¸l¸ö_:Øvìpw~[ö‰•ìk¶e."ÝfÄnr3©PA ÖæóéÏj.Âc²v€ÁÁraÛ¯Œ­+.0=®œßO„ ï/¥Ç*çíX“p…­½UZ,PB(æ =Tx¹äÁˆ"\âlAÔ˜†1„¥š¤9.65ut•7¹mWY1ËBÚó î2¯¿¯¬Î°ó¨xì~"u®(”™î Šv BÂö ãåã‰lŠò”/&k=0Ó.)…!¹Mn:-Ï«ži ë½`qÏ–çnôúv»Ä4Ÿ&\Œ8.~K>ÄýÉO‚HÄ¢ì[”êΠ6ÂÎC\;!º˜’avZ´rÊ·ö탔 š„eõã<[¾œ´£ÿ‹è{¤–ú+,‰ô;1¢‡»"ñâ(RºÍw‹L¿µØMòtiƇ¿GùûkÄ%ÇhèŸ„}w\mÒÜíwÏ;ÑfD°t£§]*'HºS5±#S_ÈØ=Â÷;Úf¥±…_†<°‹IêªÌ4–ÕPïH }T¿j|ê{æºHV,£TO_UÏD’£É@yðtºí2ZY/Ï9šyÄz+½÷-@>T\Ÿ›ÞxmÕ[&á.±J\³¸MÌÛuô¤@‘ò”.ð‡ÏYÍ)ƒêÐ$_ªK žpL0L‘(ÆSÅ®é›4¯M¢å+hCžE#D )§J\j>ŠÆnånß­,€óóÞŽ GSæÔ)¶«Z»kMØ45&ujÄÖ"g!UÝñ.¼’?ía!j‹w _?ê:B0 ÓõüÜj¦1£5V‡_CÎIuÐt©`¬÷á6:G ï»]ðZûdPš Fu$!¹â¨Ìÿ¿—úÝCíN³$bc¹=x‘È ~‹uÌÄéÎuÁú‰³—uµ ݘðò•°V%1,—'Ân«ª¯Z /D Ý`UôR»ÚhQûŽ[ ›;µU«E’'DÂ~Xr„6raE}]{ÿuú.뀀[¯”™’S¬¯ƒ:fÀ 7^ü6´¨I ‹"ÙŠÑ.§sØ–ªÏ)bÜ’“|Ó7°¿eÇ×ïhè~l4ý™ýº“ÁþŒ:MÀ÷ÛîŽg:·ëa¨’úxCÒ “¹B§“p^Á£Eù ³2“Ñ„ãaAòéѺ}Õ Cè“b gcUʸv‚J/# ¨á 9A”zß¿ž¿X”Ò;EjožBkŠ 7ñÙ04}‚ð"vÑKã`9=!R2I "Ümõå3ä7ÚF-¾–ÆiÍpá9íáÊ¥ðÏO¸íÁ ÓªÎE=º€çnÛÍÑ€…²–)z¿ô™åPô÷§â“ƒ¼ª§”ƒ/{9µ§°’}‹÷ 6VY6œA J< GiAªG}ÑLA"¼û¾ÙV§Óñ4îÃxxæDå'Ýj€tÚÐ$;8íX õÕð{†Ju-S=ÖÌýuÉCþÕÏÖ°ª{çÆ ` ÚAšÈ´TÿJÀªîUu“^|‰ )FéôUô‡ìÐñ™$Ñ2Y³E%  ¥?QªþΪ“¯¡ê"(:·W.ó97§9Ê"й"Йµ9 ó7e ÷_ÊŒ¶\6ÌF ǼÕÚá¦ú@zm­Ø)`DäS4b£ßu ¢Ý®JHÉk{X»·Hµ¦#z˜X÷íÕqdœÜ)0å÷[ªÞLÓ÷à¿×–&*=é Ž¬V»óOø›½OÞ‰F'¿C b𦅭5‹ç“³&ÅZWMÁÐz™ú Ö™8Æhmô³R·uÙôô/»ÒÖÛawÂñ…ëÚ²ƒ>‹óuXKãk¯gP…J‰Ò«J#çÓÆÊíÃ~æ©é0ÖPÄ,‘Ká¤E‚fif!.TÓú€réëœe´ü4›XÞ“WÁIý,g‘¹ùUÔ aÓ—UËW× ÐMGWa)½<›Ñ­Æ­ý ´^=ìP$7HÈêWÜYñnü®—osÒÆN''œh°&¶Í&RˆüOd?Òa.jL²âNôþtVûOÍ̦ÑÔÇQa „K¨“Ú8,†ûeì:f’ Ê`Bß 9{"\µO_ÉŽó‚UÍÜéç«}0H4¡[p‘#çi¨zv6¸Ñ©žÒ3Re¡?}‘0O•¤) û’ ²ìm/ ŒøMó=$jJð>°ñ×dš[fã{4×’ ëàþ¸‰Æ=z~püE1:7 ˜‹¶¥vƒlÞLÛ…>pÎ=šñø[~lÆ{^éå­Çsi]dÉÌJ$n­»ÝôIw´©Æ™£.=õ­®%?âAâ¡Nû>©ljDÝð®ud%4W¾/ª6ô» pâÍ>*Ïœm@«r#ó”Ž<“æ‘Ö»U˜åk³Òâ-xœ~úl± R`êÛˆ¨Tø~–4-½ã zŸ€îEëÚ´ rè ]÷â(›§º …纹_Z$ïÍ¡l^B^-T¼4ÿLýfê­þÓd¸£Ç”«£ƒá]×ÒœâG–Lûš:VmIXÿËæ)Ô Õ›–æÌ ÃÒ©ôt+Ì,˜9IF¼ÇÃO÷ÃU67> [¶ÿB­ï¬_¯Ùlñ§ñ*ßÓ ^Ðózä°o *âäÑK¼ièæ=.EU£±©bqcnF;èà:µÍJ–U$±î=_†Çr¾óŠ-§p_–„(< ‹]*Ë5„ ñ±g'Xˆõ¦ƒÈÐaýüº¡V“¦Ü”ùP©ãù‘q cÉö qBÜ6*E¥gÈî´›ó’ Z ªŽÑ–Œò݆sõÌë¾PAaƒ– ²érz/j#i1Þ¤øk°B‰vøñË;™ËÎ//¼­º˜²òèÉÕß_…ŽôÙ³¢lóŒÙ•² 4Zm>,R;ÚK—vâ”Q)<&Ónøœpz#¹Ž{Ýt­Æ÷«_»/9î¢82SjÒîö¡7-6«H]Ö8”Ö¢Œ·[Ñ.[…¼Œ|9©k÷çóbX}Êáþe޽ä*NÃÏO"¥â¿®3`,kª=rÅYìo.BÕJ=‰WI¶ úœH[yª}@Ÿ?c>gÚÍÐC, x¹&8’n\•Ö31†=R4ugMe{:›†„Õ†ùpʦÃÄ<À|eGZ]ì+Y+©]eÂì—‘<%phB‹°NÙÜ¡®00îÈ-×£îüN>áÊš´;P\¥Ò¨q¦9–&‰€y`>®BOiËýVïznÅhyn¨6©ðÇ÷ÛÎ ã5Y¯ç­¸M9×€|¯†0.ău×.…ZUÐ&`èwX÷ìáàûæÂ—#/ã‚¿éÊð?HÛ#Ô͇•Ôr$(ŒÑ‘‡òÜ•'I·Í鹚`,¨Q‘ÝŠí…×ïu#§Ó‡$²ò:ip›L¨C=æn'{©ú™ðnëî;@àX÷¬½¥¹ûgô•>t¨ð/B‘ñ¤ ¨B¦A(n£(0D•ýª:Ť޺—×Ùhh½AÚe(™ý€$…‹p–ôã×>ЃNâ1ÚYO6ü¾§‹cãÜ18Ð3Í›®Ô»Pò?eôx Äé÷žå9?'s¨w&Z2I=^e³µ˜˜…åºÇƒæêß`iãÑXKõ@Jˆv¥Y?œ‡ªEqh”ˆïNÍö¾"Xî+ÜýÈ¢rÜZjkµe'^Λ•àÐÍϳ››öª`øÙ‘Ÿ‰Ò=:ÔBfOÞc•YãØù)m”Ú'8O{'gâÜôÕcÇfS~þõ†£5 Ï+"¿B1BŠ`£æ¥éž4𠘕—ñ¾gæ¦ÔH&åbñ˜(ÃuÚêá-q™þV.ÍoLø NpÜÀ~‚ûJ³aÖÐc˜Þl<Énƒ!„ÈØûHÞgŒ§þLÇ c&kŸˆS…ý3tœÆâÒž2Ë'»T;wBalÉÐí/L/²lùaÛ%¤p«¸â7’ì³ä1"À$âëèD°iÈìñYšªöÌ=“:Î@AqÇi7´T·ƒÔw©Ï ·g&‹fúäF»o ¶Ô)^âœ9WÁéSÊúäj‚°WJ_©N³‚VU\\íX;,nå §öQ”XÂ_òö9º£Œ%¿ë 2óRº›íow Dêõ9GÑÆ% 4= ÿr"¼„Zôk5øóÐ+\Êt÷ˆÀôÀidm¸AµcêÈlOçßþM×ížËg,ä‡1¡1Go‰õÉ­ †V¢UÐý‰_ôz]Vs”ÐG\öò(½Ö§l0¾·9Ú9ÿˆ„ëÆ>vÀ-V”Í u58”‘h ¶ÍÓàÛ"„j¥‰æx,üÍïæÚ{À¦J bŸYýCœñû团˜†Ë^>`’$(N`D$Ô¤ŠÚosà²)0êîeàXU9é.t+„¬ï9C©N/鳎a%@r?ÁÑ-Õù»•L$yhý¹„ì5úí¡ I±6ªÙŽAWYüg°òÄ×hÊðh€™w¦•©#ŒZ%€M{Õ*Uv¶ª‹?'›5ò."ßͰ½ðñ+~XÓ3“ú¹Œ5d¥Þ©ùwpW!uÔÓÿ¬¥•0ÚÁ9¡(þvsej%ñ¡4 ®tm¾¦=ÇÄ{Ëó¦ÏqX̘ybÜ”¾ôÈþr¦¹ y“Ì\\êiõA: óeß™…So57y§ñ5G ´ ŸŽw–œ£…æöO¹•`øûÌ£xViŠî‹ÛNîôWå)ó1n”×ï¦$>Š×MAp³_¡ô\†‰ä¼ÁöºªnlÁ AÐÄ[lºÆ¾Þ”†¹Í6¦ÓñËvN âI†p.vžlÂÚ´Ô» Ç·ìàN•$¶˜×z~8 ±U›p£ %‡jÝBäè¾Ù½M®hýÝúáýÁGp%8/͉üìöT'L­o½ž 3åçkä°ãŽu¢:–qixmž<·\äó€è¬tÎjé- ×Hvt¡£ bÌ cuè†|Oùaq, ðî-ËIoZƒ^†eÇ$ž‘ŽJv¨¢¢ÉéVBµ¼ˆèS´0íN•ýC‰…¶ŸzinÅY[»”ÑAëû‘õ­èû O»¶ý.µÄyˆ«3À)…fî¼A°Ü¨†nLÓ”–/ ½d[A„h6µòw€dñ²wÁï¥Þä¤o;,ÆÈ!’T<Ó»°èØØžñ³ÒŽÇ]†Å%‚¨/=ÈÜj“ÝÙù•—®T²‡XÈuwK)fæÁdgù±£·Ë> /ØÊ+s†Np×7 4»£=>ŽÏ-•À…‡´C“ZÙZR¤7® ™‡žFµwùQ4Xe‹#Ÿ24z±—èÍRÔmHL7à9¼YÁ„df¥?x%€YZØå.׬íª¤PÖ¿Ä4ך·×WU]‰²tg•õÃ^ºa,’(”X|¥"Ë88d!sÙGú^ØãØ€X«6¦ÔS¤•±sÅ¥[i7ó¦ÿHe'GÁRâ´ L¿šUjˆ-käZ‰SdO–‹ð¢HÐ ²íˆfž˜‹h^{òÏÖ÷¾&+•ý~XSÌÙÚǪ1ß5Í2sIýµNÕA¦ ýÑ;ª¶O½ã¥}Íå}ïJ \ãðÍÐ9±€@i(®2ïðQÍj¨œ›$±ó×~Ã#lªŽ•aG1Ûܨ·û×or[’å?Ö”™óYÚ¼Õ¥ãgv_“Ù˜<Ò-NÌEñzjæ ÕyÜb¢ím˜ø˜9Ç·{Øœ„×Ú$v9MKA„Ðü9îA2/Ë|L41zûÍUFþR‰ÒJ$å_’+ßîP1§FÐê ;¨D)©dÄ–ʲÖDØ#­ÞÉçìB©½Ðk‡ÐGºrÍ©À£¹8¤9Р|ð™$-ÿ·gõk/•ü†rµÌ¢êLr¾I½~…(3«£®)‡ÓÉyŒˆ„¾%_28ICSá0êi…œ è0d7ÍSì1ŠFz àó+—DžØËõ•|ñ•¢Ôî'ו ‡êº­ÚbU’´É”¥ûuW ¤…ØÜNš¤ƒºÁ¹äfà ü¼é.© ;¢pŘ‘SÅCÄx@ùZûMõUö<|Ø$‚¹ðþ;s^r³›òâü^4ý÷hdµ-8.ê]´O¦Žf¾sŒ*^£iîpøIhÉÙâMBeqùÓÞ—ôi©-› º‡ÛïWÁpе¢¦Ä‘†â¿ß¸YŠ–:‡;Ćв•]ÓøÈ©$Ó ,2˜Ö'óªA"Q¼þú¶¦†ï\aB$Ó+Ó2 žYlF§8´‹ p ’åZ㺕£ÏT¯%SxKo0½'ìöÓ :½.L=ãQXFàPŽ!T_±g‡ÏÛ©þÐ Ï1äµ¥x"6 7žûå²^møÝWû@á;\`Òá AšÞCØd}êœ0ûÀÒè×3È„M3óP¸- Ì#j·^‘‹4VeÄ E* ŸÛ»\#›±¡sjŠ©è#ÜþÖÔ¨Fö%í££Æñ°©N1üæjþ];¸k0ÒbâŸ.µ0§HCcWÂîbr8‡ï–3þ®Ìt)Ș„|[¶Ðyo2¨Tº±M>9žf¼1Çxý\éð/ß}Ü}“†ðBö·f)³Åò;G„¥ ýŸc¸<-‰¡~…¥…Ÿ)ÍUÂ+]¢`Ãh“¨šžó_Q÷« ;%¾>£lšÀ`àSŽ;Á¬ç15ԮɡRf¸LÅ/IЧW©«QŠ7]7ÿÌ ¨r;2íÆºZaÌûìL¾¹8ˆƒó•õw ˜¬SnQà¾]T[øå”vIêŒðxÒcùuŒ®@¨ä*õ£`g+ƹ˜~OÁȤMÉd¸Ühäc‰÷›ÊÞYÕå¹rUG´øÈ$ŽOO°†‡{#Z_Ÿ9Vý>ØÐlÌ„ŸœjäRœ1!F¬ùä^kñ±Pݼê?'VË. ÌhÐqkc"–ЦB·„‘Žh¿oŠš«½ ‹®‰Ì̦ÁgšbÄø‚Žådƒ©Šõ–V<â*«¸ì“Ø‘‹T¡ýX‘µ»U‚”dží.²üÜÁÕ?Ù.Þ¦ºßÀÄÛ/Ù9‰jׄ‚ ña³–dzNH]?>"<"L€ Î*ZŠ]¸À´õgeR|bÔDøižR~n«­mzŽX$ß`B{ÐŒ˜¤9³$@+[V©1æ+ Ñâþ:ùÁέÊ>ã.è‡ü”.:yËòÚ}ô‚ÈF3ê*Ш¾lp=„„4ßTg¢x½4Œòzq¥¶p3™`™¾È”å|h¾Æ…ºüÂ7ÐÐŒºÒÐçOU“úéû  ¤kÝÕÅ9@Gi,*cy¦ua£ò] ZÁ‘Ú&P\&¤{òW÷ÒíVW¾Hmâ@ ¥W{÷Ô´h±j1Þw0 kû‡ÔXÿº2@Õâ÷•Â3ýÙøÓÄälGÁ2szcŸÏU&*yÀ$Õ÷ 2qªÉ´µ£ðÚëeÌÞò<ªo¶kÜ6J;ƒy‡<‘¹ç{ù€q(òp·ÝûȼÕV ª¢ :ùê7жȽä­@Kk"+ÕgƒJñCôˇ™/¢4®‹Y(Ù>ZBp“±g„åR£=é¨fñëÐq„ÛÍ)kþû×îÐ|ѸÁ /p^Ò“«$®f¦?ÉyøJ£^÷G“üem¯úÔÈ™4-7Š»Ñ®@²nôùÞÁ«…¿¡¿ð(Š>§+%½Z²eaw9âÖ%ɼ+3‚¢zÛ‘]Ÿ&ð0¬t¦r!d³ÜÌ›ÿW´ï{#ã+~H{C À‘ÒÛZb‡dkê— _Ñç¼ï<ò#C'‘h§ÇÒœÏΑÉÍx]:Ö—uÄ_À’<5*Q]Ehy†W\ÝÆòƒíU”À¤"Sð#ÈYîpƒKÆ8ç¡ ÄÏD@ÙØ.j†gF:H íWò$ïr®óvËv9 %÷¶ÉF­K_óa?ÌŒ$F™¶X»Ðù‚hUP9·Á© ‘(³eÊøEIñEâÝ}ƒ‡Zœm‚L—xõî¼WtÖ̇›·ø×rwE‚ïjž›¡–Ç|yÍŒLTª}B wª‹J!þ+xÛy2à3RTq±õ=ç&ým ‹gâ]Y~#JDdøCµ´uBžtˆ™=°o&>ÍÈ™?¦]è–©ÓòÞžåÂõV2îL±øœF ØÂœÜœZyEoîG)ubmåJíÏÏ€†ž=7è/ôá?-î•©kfÏ2>aYì„•!8¬˜UÅÔãbúL‰ üÀQ=¤ ò¾Ù¿Ú¶ª¦6N[.½UhËhay–K…m¶¾¥ ÌLñ­æå¿$9T£Oç¸Bs§9͈ûD*Älb—1a˜Ã«œìGOcµ×*òp* šJI¦k«{ëæôs|I™}ö$f)Çfïã¹lš}0ŠZ’k‰ÐëÄÎñ[]3æ6kÆÔ4Æì×`_úÐŽ[ÃîfÊœuA¬•ýê|¿&s6Õ¨äáuG!céa[ÁÙ蹆Øi1ã|p@â-Ìå= x m·Zíw½/Üá¦JI›*…ãλÿ]:¬X]¸N^MqÉN_|ÕŸû–ѪŽeÐm uE.ù~N“îVâF,þõ°²ÅéŽ:CyÊúrü–EÌÊ?†­d_÷¥^à¢e²ˆ³`Tˆà§þÞ´ÅE óCÛO¥Ÿ#Ò‡á;Û!iÞ-R5šÐèiÆ€B«)*°@­é¾Ô˜Ð3)~\²‚ç·µpñZˆ;±¹å`¾Æ£u¾•žãÄ”¾ûþQçDø°í¾®ÿ0µ’r"#±ˆà/=!\î‚Í‹‰ˆ è¼J·¤@"ÙãGB0q5‰¢˜Ö§¿õÒ¯»ïŶ£KwFÆXÑùôHõ,ÆPhk®ï¸õýï:Þ£à%¥G 'ïéú˜($ùZÍC(#W 'Á·¼KQ§¼% cëÜSB„—†brKÈ cÖ£,8<úõIÙóÇê±u¯02Êèͪk#-TqY k’Á!§fž /'ê“U¯o•C\Ñ­C?ç:ˆ“~!ù‡Âý¦´˜À'@GÓÉ„—Ô0©èù£lE€%¿žžÊ!y³sCË&?U^‡;t ÿí¥võ˜}¼ª’u±žO·Çœ€J}ñÖô€}ËW‰Ê€!i/‡Í °¬„ê¹È¡h€ÍôÝ!¾·yly±Ò¢—ÜÝ¢\Ùzå³W½|zY&â¶GùDwý‹ _4Õžû8²„1°jL”ÒÏÍøÜ1\¸Ž*·¥Œ®+ñ~(õâØQ3¸äsÁ9éÙ¶t4·>˜ß«ŠºGõ—ѰüÛMó×FÄc‘®]Ó캃ðûÛÿ}/…¸`ÒD‚>äVã—¥a—`×<²©¢; }ʰvY„òáÁ ToŽ)Øb-^“l̳®-—ûRm õ3B'¹cAêyj°þû”­ùÆv)ã $‹k¹°6žþ¾~B%ÝŸ“±˜õ >Çý·ÊŸÓªÌ|Qþ±ŸÔ=û ê‹ nÿúàú·JòTèLÁ–ñšÿH¿¸'8YH¿g?裧G™Ù!€z¨E•‚0 '†L¬¤ÚBÂGí\…›ãp%7‰i˜ªƒ×;±KQä>¡¢\åÆR öÜdpýÒÜ’­£SíZ§¹{ªz†α¹®õ“»Â“w寒ù„Uww^SÐnè½k”DVØŸa£5Ŷ>ß×Ç ¶±a†ëÅÎQ©³æ²/åà0ìtƒQ+¶0Ë"H0Ïë"4êu—nÒØ«Óòì]‡‰üA2<`ï9Mó’_»A™l¨=<ÀÔ›Í&û¹Ä~i¡’Ì©ùYðëO:åÓ=¤ÙLÉM¼2¶ãŽeh€Æ¼ì@ÍúNÔ.’Êš§‹ƒqý£ôJðE=öñ-O-:Ǭ¤üã¡Ðc§h¾å%¸•¿ùºIñžn«;PÇ9e(aœSy4TgÒÆB5H™¢aÚ ~0ÂH•µ–9Êm ;­5Î …E„4ï€jˆ‡ñóÕqÓÕÉz¶éBK»=ÀL©; Žo@LdNfp]Å’¹K=ØÕn“üe¹ QIÇÂý j9›jÀŒP…8Ä_ÂÞ 唊¿¦A×'£LßÒB”³À÷ä÷À{£Ræ’¼q8 Rá½<$UX%aÜþþùÞ¼~®Õ|¸G›ÊMý»ö(_/¯ñëÛ—¯ì;xRyoO^«Ó°A¦NÌüº«s„Ô2„•p#鸢ªq Rx|Jî&‡[‚ûG— }¿Ô´°Dƶš›p”gØ3?†½³ÖnÕ}Ñ®ž07kuIƵ3« c…z~r¸I›'TåÜå²v›qÓõ~Ä—…Ͳ]‡aRrºPZ«š±N1Ÿ›*«¹ÅoôÀž61¶|òÛÖb:Õ¨/g¨óª -°^³ö CL:†ŒoãÄÀöÂKEy†XFVÉ3xlRÃv2u_ë/E^¯ MœX#>!éœø„®M·ºR‘,!Q–,‹× _æÌ²JItÙe¾¿ ƒQ¥4ã.œ½•çÉqÁ>M¬ŠÜÇò€ÒrŠ·®4üw$ÕP¯ØÏ½ÌãÞßó]1P‡±ÍŒH[W½ã–·R‡*¹w¾MõÅVsãã}ØUޑ È'i×5}¨â&Ö ëùŠ“9Qþ/vT‚uõäà«AÒÏ ëöl 3ðSLðƒGt®IÜÙ›WÄ%ð&¦œéÍô̧8w9G=‡°õë·h›Û5;…ªsj=NêmûÀ0ÍósÓÔ}dœ;#UXÜÎy:œâà‘ÓI²-Ô>«&¢ ÍÀWú†Þ“^fÀ­¸p|òjÚÑ–õCïãðÉ fyG'9}ܕʋe€.ا(ç•.TÜ`£1ýû ¤•oQ‰^RVOS(Ú)8µzÉi¼a,evLJ®äì ã‘hèhçÎMe^ÉÈw2N$EÍ[2ŽítQ)«à_…5ç|HgÝl½Ü#í ‰J÷èÉ»Éw¹8Ýx?§?:¨%2ûGÀ Ê_>Uöö ]¢OôB‹AiÔ/¹¢ ®ûo›Uóª•íù¶÷GœçðèÒ6¦”"Ûò`ôal‡R’L‚ùpŸiŠ×D­"”,ÿ5δQ¾y)¤XÚä¸Ü^î/³r¥Á)X…z"œÝ3&~)“á/| ת@K‡G”§…šà~Á Û‹å5µÄ¢owqï:íßTý¶ËËÜ?x'VRІQ7Cè²¶ï3ˆÊ›¿Z›€ì!TþŸÉ`œcžƒ×&…¸ð• ˺b‘yÜû}XU­^%•(޽6ùÊØþqNÚ"ä¥?"̪ý%Äñ¶)ªd ŸÐÄqím¤/®°š<ãTçAWZ®L3l¾ò·B‘S††6ß[z»2ê B§ü"CŒox¤ï¢––E a”aÅ)£ôá.ttõ¤\J-Ýà˜?6æo™— òW·åk’ #58êFÌo[ìõÉ Ÿ5‡ê¤æ"'Ú%! wo •î@JÆú=Cñ^· $¸n)ÆïOï ³\D’žÄÒó ¶tƒ)iÈràO&ÒOÚî`x ¹|0š¤Tÿšý¼FË %£lT ŠœdüT>ýí·ƒ¦‰v’E—•?o<\Üð9J?WTÉOT§?Š¢Cû+xŸ8IÑ̰çŸH>jÍ ewm2ÈoàWÇ"7÷0c¢)øü]ƒlÈfâ7Oýp¬8„Ïjñ?ejiTŸÄd}U`ÃìCÏ^>`ëµêx D‹ùò•ڌ٬Èþœ2{yBöVJj=Hjdª`KExõEïµÚ?®´ é3šó‚LrE `ˆjÕ'´=û(¨ž×ù 浾󜹞ØÞ…Èu,·mௌÊN•pL¬9V2ÂbwGºà«`k*s(º;?hœTpÚƒTQ;Üzmõÿ;\9ãc¾Û–ëâí³mÄ3ð0­«N$ççK·æœCáÖ=²´!a”gÑ¢ üî»×ÛÛumÄ‹L©ne¸â,t’,÷ŒEÿÒaï- ’ 3$<­¯Ø k¥ð=-¿a²‹wnïåHú¹P“Ø­P/#÷xqç¯ü^ sìZL‹êÍ÷AœkdCðã/ÕþR'vì—ä!“[kr qÇ<Íöà¨Y3&0BD›¢»Ê¢™³Ñk—$;ÈbÇS1àU–ࣚêöº‰_ˆ—á*šž)LuM íå3IZˆ¯?]nÅÞÝ¥Sh£´_ätçÂU¨³8é‰ óšGÈkÝJÕhÓ$Ó8–(>L›Ê;ñ÷·†ÂMè9°&b[…&gbìåºgù¸4‚ˆÑ#ø¿iWúQ×.gÇ™|‡"´ôâX¥È4¬rä_ÞëùÔ8@S¥¸ku±µ…Ìêêü®rAK—yÿÛµß0Æ’åG§£ÓF²–Üýx´eOx;û9?ŧs”€Åœ±S„”ðò¸jnë àÄæ cj{V |·$…BÀ8¦÷‘ÁR³’“Ï8kÛ( zV}À­Çuý¤ø­Ô¢–.;ù=^´þ•† Q­S+Š÷v%Ò&Ú¤Q$Ýä¢$ aŸ®+‡¨êöËß´"Äëë0¿Ï ZÖôÙÞ{²NwËèìŽÏV"”äÏO*þËaÍ©“Z^Y<Š1"¦FœY”cŸ”±-žÜÃ^€¹ cÿ‚ΤØBâ„$ûîÐGó‹[Ó%PQ;&6&tFŠÞâ}É-¬—L%¸-cõIceß «?:9΄-v»&é¦?êðiD¥öà„ž1˜“à·ÁÊ;š§:u¼7Ž ¾ñí]>gøƒïZøÚœÃ—–ólcü¹Ê"ü1z6ºO}6ú{òéõ¡ÜùzÏVnʸùLŽ3ã~žÚR1)°»jAå3û‚×@È<ÀÇ6}Ê—EG询„¸%Ö®d‰¶0;Ë4÷QuOi Ï•IPhêÉÏÄ=Žý‹ÓPÔ˵ª¤A„ÖèP¶ åx%^/…v ƨGŸeÖK’{ÒñU«±5x±æÅ·ÄbK<›¦' V¬ôz¢n›¸P/^¥IÊÛ7'ö„KÿWË)ÒÊÈ–íþ`@é${]2«ùðdÄDãx*ÇÂ&m Ðjí½4 wnжf3˜¶‚^·T¾k"}‰ƒ¦ÈEaäÍe!;È—´ "ò‚­òÕÞn/{˜k¯Ç——ŠévþÌZ[-†/\ã“îÑWëNë‡íµ¤¼ÛV;pT®£¬«J(uzŒ@úÈÕkIç… ‹ËkÐn³$k™îbF#j ¢™Þ̳Md„þ8CȪºCØr¡mìÆ ü{•ðZÙ¦¦÷žºœu`š*.Î*ÔŠ= 6%¥ 0¡Qå&ñ®¿RÏÁi‘(øÒ&æ.kÏ ‰@…”bâ©8\˜óbË¡êºåÀy‹õ'Ž"Uþ’ÌØ‚(ÜqÚ¡9v_[&nb‚÷tÀŸ'Z-™pkÆŒ’ä¾7½aê[ª!¢5³RkÒk¾e¼âáz?eeN¬¶2Pépø²ø³š'ÓìE³©Û•=pšbgÊr'"ŠmDvC`9#Mgôb Ñoúc ˜è¢I ¢,–¿bÑšQÖ ¶é®å¿'º#Oö¶R1ì<ôV©LE"À|¤ ?†É…E&ý‹vQø1$KóJ­Ïp¬Ám…À4”î-e>ŽÊ}¢S޼ŽÏú™öFª3Ñ[Ê[·WP3H+µ‘UÞU—í±‚ŠìÌþš,¿ ÃÀzló¹’.xaÌ÷f§‡u‹B>¯f*pÉyb›ð`5¼¯‡Öii¶2É\–&Wø#Ÿ‰'X´0¼âä£?»˜uyŠlõÙE¯q±·ñ¢\¶ÿ(@þˆ4˜fŠhow«ì*ýÿÀ4ÎêcñXNî4â+dÅ>åÉUßGF[Êúà^+BÊ{Á.b÷1K|þ"—Ö§ƒ'Àõôâ@ý³óœ-{ 3°?{ü>å?ëkppƒ¬™Æñ°õÍÆKe§\ä÷~„u´ëøç%±°7u[Å×â‘ë•@ÞUDªà[ÓÞ´ó³$ð‡ÕսݽŸÇŸP>ì6k#F†%Ô,¢b[»).…þ0£“±ß)S~‡÷oô¬Û÷W~[ó„¿ =≘Õ{׌0l†¶¤Št7÷4E–+q,šÑW Vu*(‚¶Š’ÆPG.¼Q˜Ð©Ãf.ÍL—6³Û–3t8?nqJ„%€#£­ÊV¦”TzzSV$‡7x4èq­,…„ã$3WŠâY“×rŒò0þ±¹Æ­Gú»ûX¾Êøõ8”Éà“v’NÓœpü¬ºóRÅfˆj¿9z:AoQvZ·²o¶)L,êh2gÇ5QnçõÚÆç®Ú¦^7ÓœKsõ®zƒžX]¢¾ûÒ¾ytÃ Ñ pT»t¸S´ßÒ&7Ì3 Ö7YDQ`¾8Ÿ¢¯võ$(3—.XåD‚üO_:÷ÛñÎ׸h^uÑfúi,éQj›\"ï.Í–‘Õ{Çš¦ž±âÊódî”)Ê 3Äk ñPoËÉÝ!<¾ó|û´ÔMÙ‘cWN¼]âÖ̉;+…M{íQRPÇÇ™×€‹„Q™Çó&œ®É­DH-‡e0 øìè+˜F÷b¿ã‰_`pÔ¦éŸJ!˜­’³q®»±W½_ZL!ÐÊâÓÞ¹,س9±¡q¾j)‰h#Ë:wΆ;EŸ΀â¦Q‹å7(gøo?›òÁïY{•ÈHD²UãÕHÝEâð‰ÆQ+=ŒHצˆÊÁ*þ\AMâ9¥Þãã‡ÏúpB;ø‘-¤`œ{–Iùî,胻ŀ»#q¾Ý$y Nè6`ò°7RÕÃTz{ñc/l‘äO½EˆPûŠðšâîïy6ŠÙ×THX \¤mÕk´Zûœj›ò’´åGÀ)´dŠÛ¬Wìg• D¯žÿðÇXZe‰\±CCÝÕ ²ÁmW­ÔÆQQM3,¢ÎŠ9 (ùKA¾(&¿èîéœø•—³¿=O0Þši™vd4$¯àÞÖ6Ó¡ªŠ£Sú›A¯ù j?›^!° ¬¤6âòÔ‡œI!ü G Æ9ùÁ~:¿•Pd–Rã}uÛ+qÕ¹+}ÍvE8ýO£KNÆ|;_4áJœ/y¦Œ¯ø‘ëÑé÷®çÆüî /M”½‘ÃD€‰zèÛ°e-çʼn۪&u7V/³eË{I2ú+,‡R6t"!¼ÛÊm¸¯!Å~—+JãËæD+­>j‘û)ÑÄ4¨&DêpD©Àùñé|ß\BÜ|ÿ[œ Æ0É@'|ãw$ö@Ccz¿Ñ+H#0F~®Ç­r÷Št=Ræ}ýX”ñ  S {‚²VÜ篘¶ž=¹uK„N¡n28® ¹ÀUÁ³Ù-ðÔè]¼\ýgÄfQBŒÔÈ£`‡nZÔùŽlÃ?¥U^üãtNø:#UÆà¢ê錼ô$â}27u´Ú§T¼¶§dSÄ®Âç*yÎQ#7(Ú‰åW ^Àk„¶<¶UÚ×QïQUáMG0£o ÇÔ6{dÈÔÇ:ïL>ní¢¦)Y‚/#¹;z8p½JwVk¢0µ˜nè+›£©¶3'Gâñ Óú¾tsôu•)‰çw7*·¢Hb±³hÔ=\Se(ªÖ† (@ž‰¼"‰4ÖuSÁÙÂy+¸æä(ƒ]S©Ù.‘âXEyå-gØw¯C©š¡ð¥H™sjÒÁ@,ôŸ†Ÿ#P·¨GÅ^ǘ ±1Øúç&šxJÑW9isû@Ñ×)ì]RRt]´ä¹Õ¬Á‹ÒU_¯í;Ž¿ó¤•”Ä }à›™j‰†ÉûháFÂÕ7Ū™¥}Wk´¨%\CëvÁPyÒ9œSÀ¹>{ÂñB]ÉMŠîîx€NøÒBêt Ì_»ÌÉR’îBF`à2AlšKzÀðÓ‚qŽÞó½FC@Ýáµú¦QØC„x‘÷w^Ð÷å|Ž«½ÄÕ¤¦9‚·I~½›‹*^˜‚ÝîŽko32· £.ÌæÃægÁUÔyšQµø8¿s¶Ù¡g¤Q½ô‚/A…“bˆp2îKP ´ÃŽ”®pÉ“çXk‰ :KX®Õ†Ï·ù XÖáP³œ'Ý÷§šÀFy¬¥uã6B'øÿd„êŒ<œ‘=žíh÷ þJØG;æHp5ô17÷(¬ð³ý@ v ÕéÀ;y´àVêÇ©þfŸàœ‘y3¥éDÁóŠûv²®¬9ö_…©Üð¹''?/“dmKœ•yZiRmŸ+Ê·rn¶œ|¬å¹ž“N3‘]óÑ£•õ@`¨.âO;¶_„E¥àÀòKÇù=âTW\â@gØ(ßC³âÆT¡è§~KÿÑyzŽÁ?Ùv È½ó/Ó¢;¡ø1zAËåÚác@[ÖÝ÷„LÏ ’pJðtŒo—REóeî¡ö¥Ù¼œî’Ôð9í…7²ºg[/1™MMbt¼·ŽŽ€xLNï«¿²g…š”OÃ<øã¢¡Û!·Ü{”ýRÃÚè¡@›š2ŠVÇóýÚ8m6DzK•x˜d7 >þÓ¨oò%jfEˆ@[Í”O©Í!Þ‴¼£]ÄÄ¢µïx@jÉ5` V™J$Ä݇5ì¾æ7éðN< ùn¸ŠÒJƒòL‰è\Àˆ®[{Wì«´¼F žù3Déìыœ‚2 ™ Ë¥‘ Ìò)<`îå$pyœG”"cM‰à‰Œ}ÚõmÍCù¾¹YDTOÁ‹[0éÙ1ÜKZ[Tê„¢(.à‘+ •J´…ûœy¹p¡ÐI_ÌH¹š}t¹âëaW)ú( ,ö‹•¦QïÚªg[êÀ…ïCo ´n°Æ-mtcQ–½3™$ÿÒ_9‘D&Òþh¹O!öaê5Òn| Ú†}`G²]„ºâÔ)w]œv™¦ÑžÑ„lA&h¢CB–ç÷Û·%C¥·pÐG™ó'y‡:¦!º$QtGužF.Ùmï!'*3hƒæjÆgy%ù©ýŒT­»Ø\0Ë9°Q+æ=É™%ñÑe*iþ¬=íí~‚,—çò}õyw¦"[r[7:ßôþóàK/õét×EÀ£i0h=ÕÊὑWÜ@…VXŠËÉ.º¡¥„P˜T¾dêFn‡Ë.ŸªÎ²d'›µüÐ])““$éÂ"ô˜Â½¸¹ÁY:ikCh•;<üO $K¢FÂ,*]4ÞdœT$…åÌù„Ï?¨9%ŠJ~æ ­ü#¹½Ãy[ñjõ?`°^zgjoó\hSðdÃÌÏQå‘UäpQ©WèÐËÀâa´È‰âvJÜuè¥(k±™1Árüq{ȰœÏ÷Ôxäk±Û;r:DÆKAþ¾ôVƒ¥ÄÛ¸_'ÓžAÉOœ” B¢j×namRe˜ÑÒ#¦¹Ý9˜"5µûÉž‚DÝ® Àºîœ;“ ÝÕ<1én¶Øƒ £_-”ûEXg´l‰èÈ4à{G“FçlRÔJñ_’¿ü&¹KOþl / `ÝÞz‹«Ëtè ÿ’8gàgwÿHx–{F{£L1Øõ‚ àÜàsÝ{ä)H6il¼pH7 £3‚xS:mÓ¨_+ØBÖ’ë¹²Ð?—½ô Xêèâ$\áêÀsXbs£n€Ðß) ä(„Ì»OmV|HJ3‰Ò?h·LâÕ”‹$þÝ'€Ô-žýœ¨J|’1<èÊ=–…œ$î!*=!½Æ,šµC*ßìͼ;룶+VBaj†Yšz B|ØÉ¤Å+PPCh Š=Óösé-Gî*ôTƒ”nÝ7ÅnÑÚo|W¢+ózG^óFÚ%¦D4ÿ^–Ì` >¥¹z#+%«Û•s©C‘×—úÝCNü‘• 4\–º`8O%?Pbr:5ñ|§gtý­pÒÌv‰Å  O›£[ÒÕÙÃ^À<Ïî§•9 < Vˆ2…þ[~ŽöWç*µÊW»y„•C'ExZ=†øK-BmE™Ì´b »CäGxü¬}9S-ÝŸš¡¦¶|£ÐíõÇD³4,K¸Ê$¾HË‚c`öÕpnh$>°³×?®tt³mUý>¶ê»%¼w½ˆËé4Œ=jÅìÍ¡q°­ –f¿$‘ÐÚÂd endstream endobj 51 0 obj << /Length1 727 /Length2 16898 /Length3 0 /Length 17492 /Filter /FlateDecode >> stream xÚlºcfM5Z¶ízʶ­.Û¶mÛ¶mÛ¶.[]v—yß™ùf¾¸7nœ?+c¯½rGž'’ŒHÌÞÎEÅÓÁ”‰Ž‰ž‘ ,&¬ÁÄÌÈ`¤g!#q25t±´·ûeèbÊ P75(›:˜˜ÿ@˜`È"öžN–æ.Jcªj6†&–¶–N5{{7Kc ¯››› ›³+½“+?ý?‹”MM.¦3KS€ˆ¼‚¦¤œ8€R\N njgêdhPp5²±4ÈX›Ú9›RÌì6ÿqÆöv&–ÿâäLÿovn¦N.ÿ3s²·ÈŠª‰ÉË©DETD†v&‰–Û¹8sÿƒ656òøWw´—ÿY6†ÿ³Œþgý/ëäñ‹†‰ `biì025·´ƒaø—n’vfööÿ„M\þ›ú‡ó?ü”ÿhH015ûíjc#ghk  ±·upu1uÈÚ›˜:Ù„ímL¢.¦v&¦&ÿEÚZÚxþÿâÿBÒÅð=„ìÌÿQñ?!Kg1KSK—$73´ùGªÇÕMÿ³?ÿ*ôŸÕÿ”ü³¯&öv6žÿ§à?Íü»ƒš„”ä/šÿÁ¿Ó¢vÆö&–væe—5t2ù_àßiCËÿÌЩüw¦Lÿ×—5tq²ôh3ÒÿkHÿõü×Òý¿(aa{o:ff ;€‰‹ÀÅÌæûÿ¢kìêädjçòoÙÿéå¿þ¿ÇÉÔÔÃÔfcÕÞ˜'Ä*½-¬ÒO´x¡ œfaÎ@•f• xm¶ïVÙrÄÂDÿøçA§À>ЈoÿjOò¡•Ø0Þîdz&†(Bwçµ”¤Êܯnç]±ð­1BïL ÛÖXì6òÞ%ss#Hz†5;ï¢NʱœYœ)Æ ¢ki7aý÷£8•.J–Ö7œé!M-Ò‚EhÑ‘ÀëÁHxAð>Ü-¶¾EQe Ãq¸VÁá£aÆÅs-и}‹fWgÎlµ(ðOÄžÌþÆv>$®R89QÚâzäõÎߎZì­ "êûóè²%=þsRM5iŒ¼³Dn÷CœU’]iBÖ«Lç‰p¥.c3S*b˺TñIítËB=Ǽv9ö8±‰Ï`”ŧ÷nU«uVA|#¥|nÜ®ró“õG}‘¨ú¢}öh&¤Jä·X8\Œ2‹õæ9Sr˜òóâwæJeÉú¨ÚÆ:ÓݘàB˜nS#µqáããÓ]ºÙGïy>ˆX4 ÖÜJ€ây{K¼–¢BCg$*ŸÔ|ȰßCtbÏÐÌï²|¾G욣?.[2Òì8ŸE–±ªHÔ¥¿…zÃT„¢YÅyÉlç` zlìò 2¾“y¨óªb\eá×ë£ú¥ƒu©x< o!É{lã¾rVI,õðZÝŒÕiÞÆi3yuÁ, wmB¦>Ñõ‚G…ûØTC d2ïÒEkö½9+1ÓÓes""¬óx°8Žv–™ïš£d]1Xþº50Ûo®1Õ:­ÞÀ|È }À"kqž–y+ó%Èãß§ ’º=öX\;p ´Ãâ‚aÓ:æÅ0ÍZlš3°¦µr¹ñ¬Æ)ºÄrë(:Z˜u¤ûÆÜwˆ‹×(ÝÅ6ã“–›rN‹«o{¤}ªzÕÒð¾FÔ@hËçüÌÛWBå6²×ø½›Óóº!…#pãJ¿Ü#DvL~2БО;H:æÇŠÝgÓsìcrÔÉ{DvØÝÕÕ›…5¡ƒö7ªpÛÈ¡$JÚÜš Ÿu&]lÊ_$lÉÍÑü Ií5ùÐä*:ö˜X,âÝ9}ØÇ¦t­^’ÈL*³ "%¾{¡ÔsWÁí'ÁæD°C]æâ¯68Üf*³¦;£mPEø­4 `G+ J–œÄ¡pŠmÌn×{–»ôÓlÁÌ…âè—(ÎOÉF†Õ reQ»û<‡ÜäYíEK‡o•úÆþ˜TKöucÈé/åÞmÇ6Z 7 W @3Ö¥«_€ìvèö·@9õêf©øËõGéð•䆜ÍQ•7Uñš7²=al³ŠÄ*‘&£\ŒáLÄl6ŒÜ¯¾ïsóRóm)ŒÅdm4½eÙbQ—þMÖYåäŒtRô^ ÅÊHܘAœßèVÜv®é«'YÐ96µÑÒ¼¼“äBÑ?ÅðÒ<ù«À…ÐÆd¿L“ìÛ;äˆÃEg¿z$[Kk_bwÙ@v¾“¥@±ÈÒåûà0…iïßÄþ(ò!(±ùíŸXD˜€”CŒÈÁñ:€Ax½O“¢‹ðñ~ÑZþ‘»ÂRžï\f›Îå´ÅÒ$p“¤€GK•£ð¨’Bh};î?ja\É~UXÃiú)a˜r„F 6_–k­_•zYˆpÖò]j{©'«DbÌ}Àa~;âÞ›2Ÿ7T]óxڙظ+xHLJäƒ*®¾/4c©êXög»SþìÁ+6½ºJi›¥ÊFIY{Àü i1”(ÿDy ëhîÅ(ò5–Ƨƒÿ±œEïJQý)GaDÇS›7y¯û ›¶¾‚#^4Y¶n}ß„ËqYÓmÝl‰¿qÔt{ňDÀnæ ø•@C‰8*a TêV’í˜Ûl’ú–]êVòî¥Òr1í—„üAhšR”‡€ñQ“óösË[gËnDôB9“/'%2ÉV%€Œ_Šá$"ߨũëéœ7,v„hñÞ ÅôãñäºÏ渌‹0›XgQþ|îXx†‚Ø ºs“Sä<¢sͅеºž„O[ô|‘mV!|@¤vªEk&ù P ¸%>éÉSXÍw¼eûÕÕyJ*. þ;¾Iû×ó+N€0Ç87 1[°z"WyèIåzq“ÿ°ñü½4³¥¤Ó%ÁÏÊLš²¨î“ÊåZÕ¦zÝÙ‘‹ädCq©æ \cÀ‰)*gæÑâŠBðàE±–’Ó¿OÇk,ý¸äH¤ "<Ç!ÖùZ÷ËvÆuzE©× ¡b<Yµî™ºÀÃÛÍ™>€Âv˜kc‘ªÁég4 ¨”:Zâ/'á/ƒ–7–!#¿‹îmúÆp,vêÛ¨( Ÿ]¡|Ð^¸ƒžÅãí¾«o™+™X¾¦ Te¢wÜË7ŒìX]swà†ÄÅ?¸³« °¦/÷.—» ‹×%Ôg9I³‹~ßtN2ÄÄ1,igg"ƒŸæQZjnïˆXIìy Ò¿®8šÐxlóµÙ²î7$ÕoÌ—À™Á»ÐäÓ»jðþ,A3íËS‚>¡¢\ÄQŒôßfqª"¤×NeéÃ’(­ªAã(7_£s¯3ýÈÔ; S.É¡»iÒ’Æ q›Nw±¨ìö~Œ`:6ï@7Ú´Ü»>·æc#rÁ…B¤ …¥S ÚéŸÎöò*Ùf¬úIV¡` ¥L ໩m31e¶kN£àPÖ„{.éLQ'1‹™àç:Þð:yûQ)Èb1áŠq© ·dr nùŒT ’%÷r¶<Ã' ú!SÛ§¢ÚµÎÞÔdaÃ0Å"$+¶(òÎ?‰óg’û:X¶x”‹!ª6`n-¦xTü¾C^è¬ñÊÎ9V+Ûylj«Yº\wˆ¸;‰Çæx 5iš×h“õÇÚr£áǶvÞE'¾† é9È|UlÃÞ BCŠãÔ%ê.Ï~vÇ_Þ¤hì14îEMƒº|>ÐSбº­ˆe#VÒÚvã ç¼ ¡ôÑ(8xç±ÓÌðw¾á·cU'ùΪ6p¶;ÄƒÔ Ãè&Ý-£å.Lg#:ŸÁ-êÂÀïs`Ú'®å?yAl³S̤äH‘OçÙ¸à{O*‚žÜÕFßäK¥õe’¿‡Þ&ñ 6}ç‹9îj²ßžžAàåßå*™Ü’dal3Ìb}M’ÛÇjóŸÁÌ†Ýøò#d*öþœ½y¾i?~•§‘á»Ì‚ÕïŽvßê‡B—UÕY|­¡{û¿íoÏ9ÏP9³50ݬ…Ô»K®£;qcŽœÄj”5ÙWh^H0†øÛ#/ýn~î_šxÿ­E³xƒŸ4ýþKU÷í†ü¯ïç àir0Ȇ•óõY«ƒ]"s6ÃáRb_àCûx@"LCÊTî°uòòû]ý Ù`¹æ¦»ÇÏ6P°*ÿÆ8Y'‡ê“zˆÞŽkzAõCfáÍœ\ô*ø ÜtIí¹¶„kãïât35FˆçªI¾/—:ª2;;VÝÅ3$A!®R2µd¥¼ì¶ÈU!›É9òÞd9bíBÖRÀ7©\ð[£Tç-> Èrªì 1Ž¥}+¦«2vî ¥’éè»—¢z¿=ŒF3w¢g³•ê&Ö_¦6Ô_4sÐ é5ûÍ Z'±î£S@UÖŽ~Iyꢰé¦/HFÎ §è”½]YQÉ ÞJ ”ÀP2Ò*È3N–n½(¤ø¥¾v êÆ)òmùä0Šæ?Ê"1§ÄÆ»(¹ÕJ\²4´E>2»51IsE$—^{|ŽÛ”f¯!§ênU0ü„uK2ü Þ€qÏ¡3R”v ½ˆšR|"OcòáÔ&û.Ê-:š`æ;1ëD¾ÒT=!oCÝ-Þƒ"£7ôÛ äóNÎw#å]_Qø‹ªßDâEþë=±O9î cÞÜÁÿF3Ð>­wÇg¹ü}Rqai\…;_—Õ&NS|þ§I®z˜Tûϼ ñ¤íÚN‚Ìß5òöÛ$_3§œ§¶§ì¡[—?‘kŸÔ{µû qÔŒ‡6×ßJ<ðŸµZø|!¢®Õ’·Ì;¸;5¿ÝU=mV¾§ýt¿î¹P[lN÷©çþº³ ÉêS$ñæ*‰/4õ€*‘zíBBý [âC¨úF«Xê7œ™ ƒ`YÌv_ñß1¨e7&&qRŒ6êy3»,˜GM<úiÉ%¢‘“pßGuŒ%Æ+ŸM€×œ€ð°ÊøûüLô‡‚ÿ oºÔ[¥­JF™ùYu.> (>züUg1íE 'Â`±ºúVa>;ùjõ¿£ÏW”£sÅUÆ`«š§(ÚaßR ¨)Ëæç¹%‡o ÎÇØµ\Îÿ‚¯Iºé&1Š}µoià’îÝ&œBGk¾‰:| q 8öJ  ìÉ\<‡ÉËu2°„ÈÖ§€½{à'Àßñ²C=2ˆªA·7ä L`·l*˜íËK ¾†Ù˜Ôi0òá³ñMoÊ uµn2©èn‹¾l=aã)©xt~°åNˆZ,ò~¢U7lr[pu~+ÓQ œÀìCœ…½aíD’WL‚È0ª‰#ñ»‘|;«…j»bád67{ò¡8¾âÆWÿDši¨þˆ‹8}G`ìWC¡slØ>á’™`تV†ÇijA7 ò„Ü(´Åw|òóÍч¯ý…×)uªRhÖ‚ ¤BP¢E¬U Kgãƒ"†[î/ë'µ¾ï88¹ô¤^¢@9Ây&Ÿ0NØm§î«R9•åmÙWâ<Òð$7E¤&‰jhˆ#Ì X”3˜zÝüÊ{¢½ ®bÔÙb´¬h^ó²êiˆê+)ÀÞCl¦±Á„ñ‹IéÞ iS-øûÕʦqZ'Ϭ¢Ó|tñ(I‡f8¿ÕB_çmO½YhÚf”àü_ë"ÖëóbXtŠVª¢•”æn£þŸg¬ŠÒxôè^w¶‰·­Ñ#ŸU ×»‹Ó0Zù·Z…]”6ˆµhóåÛE¼ïÄ " °~ÐÖñÍ1‹ÎBçþš6Ñž¢sÍÙ_vÎnîÎÃÒÅßËÒVO(øn7;ïTKq³¹©K€{j"ó™ùF™Oèá¡»t¢>Ïڇ唧ÍÏš0G¯ô´bþ@—zž‚5ÂÐVÊùÌ}qûø2å@zÂmy½)œƒª´$9æ”`>ÅŽ‚E¿0`&î0>{@ÍßÑ]UmÔk¤VƽϷƒ»9SØà\³¹qÚ3[ ÌŸÂå^& öÅWiÌÊ)ãØ)è¿ Ï5ú &d´þCæU¹ÝZ{_]jÔTN™¹Î—“¨¨5qÓotPÌûV#ä½*4˜°1à*®ƒÍ¿0ÇxîbZ/8ØB¸åó´5û• é[ú05>Ì[ŸËøB±S­7!Ë•ÓùTbßß=Pº…R×Üâ(7¢X­§€)©wXknr ÕOÁi#î˜qW—Ö®ƒ‰[¯Ô¨VÝq˪F²§Øy®|pø’³˜ Íê¶_4uŸc"'0`[B©ãñì%Í8åׄ±äÕ°N‰ßå ‰¥#Ó³'W$'÷Q3RçÛ$ôìý"v¦ƒëʲ÷ CFÑŠ´k%©ž!„\§iüM˱{Ž=gÌ:Èpz‘v³ cÙlc4.‚|6fC÷O¤ŠÀ:œ÷—7sÖцR"ëC8¦“q2~|…”{s˜­Àl/ôݬOµ·ØL@ƒ*Õ;¢H&Ë·UGlXÿdjÄNÜòµ*-^¹0x·‰þv$yr:v?ooßž†œ VÑäEÇEE±ºMT|_!9îA›\LRýöð͵SO¯ØÈBÓq’‹Á™;)5$a]¶Œ W‘ÑñtcÅdyp|\ZO¶ŽYˆ }òÖ*TS¦ž„SCç2QCå)ý„ƒyìå%Ø|ÚcÛ ê‡Þ6¯S´f0èô¶Yq8ºdHÁCzo¦ÿ uoé¡öާ„Ž\ta›—AJ¸ʇ®6Óý=)¢¯Þef’¥šè/fEF*›‹ñvý;À©®fw?ó`Íø »—ìOÞES—@úyTÕõ{7ÓÎØnçeêdzµX5LÎoPORó.½® vdC—v±T–>ÇV| LP¿U² â¤ÞMTCº¨žm^M­b*Êr]Mãºs|üÞÝx(ñQZ/Ï•"}óó¿'öÁ$Oiœ!qÓÒD ¿/|X¼ÑS#ñ_–ä–Z±&/aq¾$ø0}ü=t@öP\÷Ôùe)Kqk9©¯3•xBN¸}4gó‰4îüÄàP$¬Ü4*õçøÌ×ÏM¹â¶©šó!·uq3õH¡Ð+ÌJÊeíêxgWb/¯  @ì2䳯6·®ž7oK+ØÄsÆØ"‹ZŸ ’ñ¤VêôF¦›¨'hjq¹Ì‰«ðl‡Zñ0‘ñz‡çgÌ„ Ö\F, Ì„`=óZÅ-{ï@ωÑí(zĺDIš¥6qu™}“ï¬[þ=‡+êºÄYåJ4Ô¢}l¸( Z¬PJê&Et¦Ç²g[¶¡«(èºj¦¬¢›-#GiâÆòéuÜq¼ãˆ‡XÓÕO^¬œlˆM žº × µ«G+«¾ËŽ»{¬¸àœG7Iž*0óµ+sH}9fºuxæa°yϼ+ߥ ä÷°]» ­ÁG‘†P©ÚÑ^F®\ÿ“k3µhÛzNxÁtül§ð¶Ûkg‰?kÍL]¿Vù1ý˜&3[â×ÄwöWžØ>fT¦úudÄ”ú”;*{/c fg¡«ü5ýØûÛ—C»Jÿê›|dKÄë“GKFøF´‘é~À(s?l“æ(Ò0–›(Âø&VÓªnFà P ´ÿ6Bš{5󊘀¿¾Á‚))%!™üD!›!¿DD_ïÉôÎÆ-À ºp­ëqFbLPxÄÑ/vˆ«JÕâa…ÁÄjÝR­Öt¼àÍéÆì~jÀ±1^&³Ô€@´ gûaß317Ø·i…Âùq–ù*CwÔMµ€OÂê¶RØx^¾š·­Ò!ÒEÓ}†ØCÖe)ªdòŠÚÉ:ŸÉ¥?â¸}.vølµ¡ÍœŸÝêˆeϰû~ÚP£õ¼2°Ol¶|9aU@;");°GÅJKùNB/unûl ‹ÆkÒ‹‹} mµXD™Õ™}š} 2¨ Óä|±q/Fna®€2@—¹þü´¾1¹EXÑ™iqÖÊ.J#ñˆ°@’C¨¸t'V‹·Ê ˆÀŒ¿gµ%¹%¿òÓìfço¿ëxÕz*@þ¡áÝùÍù7±.gðn…!Ó–FœqÒ'6¹†ò7cÓ¼Fh^K2j_0Rð*©fÕç® Ö—û £0NøÂEêËêA‡K—Uã¿ì5 ¦Ç* ÆŸ¹Ëb#‘Ž(œt/M N¦ AÉP!‚ý:6(ïWhºdC“G·þK“ÿ&Yû¨ú7t§"¨+O)·çÌ€'W>e«Ü'#]"ð±¤)ªy˜/xXn¢Zê[wøÚš»FÔÇ2Ã9A~-œ ù¥I>Cz¡=IáX0"ÓaÐ+”IšÒ@k5áÔr€ëNŽÞÎGæ&©5ççë.ü½°š`×g³Ÿÿw!#kÇüû„É¡ÊsƒIÉcï8ªÌ§X³€%k%TkEåì¯à;«n°ßÃŒÓÞŽŒ”­è±8ßC9Õ,e9$Í¡t½æÁ´€‰’æýÐóQO›²ç‹Î…ü¢“¼@!{« ƒÓÇ¢çäå šã•BŽ…·PÒIŽØœ]É^-๜&‡ˆœóœÁ®àKÂ]ÂôÙ T:ƒÝ¹Nù¦E}R^ZâubFÑޯ؇^˜÷Õ[VÙKš^Õî„4Øé—36q-Cqˆ]¨k>ÏΉsL”lCDy25¼› ¶„`i:ˆ*§î±àoÚûÄ_ü¢ÃH(³qîĘj´?cÇ´ijnˆt%æcÌÚ1©™."e¼»)ÎD¹ö/³³Z æb4ŒAÞ^Qsu@W&ÄF˜¹Sâ•øàÏ"}Ör¥õi½Ô!^ZЧâ?l–š[†§6z¥£Ò=ÔVU*"'æ°¤)4zÃ(éÖ¶mìBšJ§›Ÿ¬T~g†hýK“›ìÖ]£ÏûœCV˜˜'Äid=ÍÓ¶ÒAWgÞd2@©ø&ãT\Ñ ‡ÙÐhÚïh¼"1LÛ•–¶›Ð¬ÅqiŸbFlA²Ûç&Æã[Y0?A7‘¥/cf¨0í 7ÕëyRéx¯‰IÆ[Í£t–e> #‘ê¹u³¯me0UŸð¥´ÃÓêèï)wð^ˆêîü¶«¤ò™ˆ½0X<ˆ½*döÚÕÍôÍ‚X›Àõ >ËÞ~Ò÷³\ˆºm,È íNˆÔ~Ì%)P2^åYg Óš=|ù°* à5Õ¥=ôý§JècIô½tÌ™Û_UNh?óª]‰×4”ck‚è·„Ì,s<êú+‚|¯MƒÃÒÞÁ¢=®h µÄ¿dGU(Np³Æø×òÉ1°À"&2ÅwùȂ㠩¨¢pýœN;œŸ³‹þ9°‹Êõ†ü*«^Dç4°óõ=S»1%l~¨Ž$ZÖW•*R\Êêó± Yêü*#À-ƕº¤%«[¥–ÉIÝ)á ŒnÓò “ãÌ,æ ç*ò— ßÙ.í^³Gç]yuç¾ãà?ýÄ»Jº†­ ÌÃ[ªä° {>“ÉÔM¼°¦tö.Žl©?GJu^q§˜–W^ÔVr©½^±eã÷ßoˆ´Ì:'ÂÍd IÙ‘: !Ÿeîym@40;Y÷t%Êx" ý )#-î~?îÕ¬ö&!m'>*›ª–~0UEG/HuMÃÔÔÁºkÛñi¥½þ”ô#¹Óvß—Þû¼ÙkY$q¢„„1—'¾ÑŠê®»Ê:·P¶+ºß°¹Yêî>t0*P#μ¿®Âýg®$¯D;v5éùUsm¤Ýé8g \X|™d.•è¦"¶þ“*}LYUR4µþ=ÉYjÃÐ÷[ 'sßCº"Ï)¢KLÉ~4 ¬cn«æŸÜ.‚÷ê2BÛÇöÛ…ôÖ§¾ƒ–_ .Ve»Û<סtÐB-0Èæ7†2…‹ÞÕL‘)؈½9ð€ñ ÿ‹ktÔGjÓ{Q¯¢ Üu-­)xÊ#Ì@$}g©­­{·¾„6‚=ú †iè6RÅ«Š9Îþ¡àÊøŸÂÖ6/†üa*™s#¼{£ý W ÈS‡ çxû©`Fÿ†£´:iYžëÊŽ¬´co¡SÚ$ÏâøÛ5u9ªAlžg²~óÑ¢±¬Œ¶LÈI¼š w\Uæ2‹¿ZÚ367š±–@]ÇjW¿Äz)îƒÂv¢éï )ÿ#Þ1T´î½Ž«+ŒB _U<ƒ?SwD³öË“¬[¡Œöjî©ÔåFic¤¶L·”vßLQz¬êË/òꘞ‡*Ã2—åh|Ü£«+³²¹6©9P¬Pd“=\ Ë•9mo:6ыʆ¦4!ô¼£ê{4í¼º¿ñšÁ1¿:!«³R ß”ÈS¯2ª®ƒCtÒTšá*aI^HYyþ¸¸iLïçI‘d çèðy~_¢¨$§Ðˆ Íœ°Od#+æiFõÏ‘Ã%om°·h®Ÿ´ÚEЦœPVTÎ2ßý(âzœu’‘Ñç^ôaŠÿD”ä™ñõ{¹&ļéTiõ‰ô$]Y+Xåþ¯v Þ@O×j”eNÖã× ;úäêžJ Œ%îtcÇk$ÞÁã$š%‚Uº ÔŸÏ¢`S! w¾s=øƒU¹Ò†Ô²äø$¹׬@"´È`ޝÅo•Ö‹_ê°þ梁5Æ‡ä– ºm©;v)÷¥ÞÛËc0åDŽÊžU?²m&–³mgr>²zÈã‘!&«ëŸ1X)›þghlŒ"NÇã#wŠ(–È‹oÕA”P Ú]sÉn#§ûÏ"š­;<7Þ9ÊÚ%:h^óÑ<çÝ‹G'¦iàEWù ؤ×óÈ[61“ÚRÒ}ª£™#9,p¦°0zš({ÿ;[ ¼Ï’­?þUölj ÀOVØEÁا*´sƒ.Òô‰ŸÎÞ¥iüŒrÈN ‰47Õú%å%Àç‚ë&ž½2Ÿ#M8 ¡ÖV¡*ãrª Eï&ÀÞžë øùeyqÈ8K£¥E9=ÐÁ o0ºAbª¯=ì+xy9“M`dÊkœ„3±`‰¢U?N[_xpÀ¿z©Å¢¼ÝhýYsõb,/?XßUw/7±ôeÞV;¢”÷ìDnŒAÔ¸)y¼BdîqÒá‚Êx<ª¡8W;@ÖCÿkøÐ!Íäºë÷aœîvr+ŽÛqˆ_zêoÏàZNû,í~¬´<–ª„±¤®>é0$ìÐús €sÖG#E—~ìMúpdù$Ô:¡üé’LÖ¼£ÿÒB2c**;'ÃÞ/Ò ÛoÓéÉ_öÕåÄÓZh5eqÞ oZñ6gv”ªOD,ÕYX¢ ®&T£(&šóœmCÖßÃÝ·£áÞƒ¼ØÃâ36³}7^?CÝDCL2“q7³ëS=MR«לÊR5MÂtSÔÑþ8¤ñèIf&ïáÁŸ@ž²ê3Ó’þÄ ¬ø Å]Äöьئ¿LòÅ<䫸òq1%ÅÉ~õwÚž”åsÚsŒ[dÄHýçÏíg™åÈ_A˜ÿO¤¿C²0÷8DeÕ2U´×í®¸Ø,yµm¸|¨ô¼ fy½ÈVóæøû;ˆ¿C ¨&Bð´k)Žæ_ín’|þœ€5ý>xD6–߯ۺf÷PL—œèi¬£}3uXWêì`þÁÝJδÙ.”í>.so6<¬Ò7¤©¯¶„#þÜVÓìi#¨Zõ9óõT,b àoJ|“…¼HÐ 1^g%öÙªÅ__fßYÑÍ8$3{: sÆ9½çjå˜w8æeþós4ÚVܪd¦#àþž~Æñb¼°ïcQ‰èÁ§ÓÔÈ\ìZåEKÜæä ÕV¶[ÍÑd€ÔM?¸ÈE]ý@ÍâuP©½D@Û´Sj96áÇô5ó¼ã滺2zóç êKÄK¬—ÇqÚΰÇkn——Ø‘šT)Ù*½xj?'"‹Ú&GK+‚MKp£„6šÍõ[‡Å `¾–Tï,åu$Qºâ^ÑݙڦQÏh¤CTV„µémöÞe_EÄçŽ"LWטì„Ür™#ètòž€ß%Ý2£ò6 ¼¬ˆ‚Cê–œ©+nÝ¡u4TΛ)<‚)óç:‰\uàŽ’"^Òk½À%â™Ó&“ ùY„³.Û÷·>ö%4Ñôi8Y/d kÒ³µzR<÷W³SIk5Ó,ù]ÿx½„vzÖ)¹@Ÿá>ã"?T^NÛÀ*A]l€a›)’ŸÌRÀ¹ôãí/C—…¬Ëb¡ÖÖ¶bÅm%%éÈ“zžœ"‡f•Pç³#7H–ßC¶½ó•í°:À‰¦í{` ÐO1à¦Ð‰ÎýGÎwÍìté’¸ç;OçÖå r3k'H6Ù ñq5`ͪî„N¡â¸¦‡[ 3t?ý–yE³»v¡bcyo´“"Yç͆P¼&f‘Ncâ=aži¡*¢Ù(¶Ë\²ÝÝ/Å>¨Øë·ÿ‰üÃÊ÷–sµRq|!â#:¿®#5‹œb…œC0”»­¦ÇEQÍ[q”©fÍ$}UˆNšíÀ-ca#i9è3õ†ƒ X‚? *å”Ö£¥Fß0 0ÂÊ£`¬«{ŠÜl²(3ÆQ2SºŸ“¸øëj0*œÐ`~¶úš¼8|Ëoë(;ꊕ, RÚv9sìç;^wÍô‡óSñQ%Vè¼’ùS@Ø[Jâaý@®,Ñ•¸?¼(_j˜Åy×èì4æÒÀ‹×BKþ¨Ó 4"Ê#Ïä{K"“ÇÓ[°Ì¯!€7á|ù˜¸Ž¡ÑÆPé×ÙDŒûüsN ן¼S{†5M~1}†¸~AÔLz)krˇÈJŒbúýûMqÓÚ0…Ì%!1Z¿“#ÚÐH ¦C p’ºÚ€”©=€-c¯ta¤BáFÄòO6`œÝúø[|Ȉ DmSÙTˉKÙ:Ô{Nzv—­Xþ.,*‡‘þ–þ­Uï{Òì=ªâAû"=zVê5KIO¡W1m¦¼='ã±wûüè†o%¾YªÐç"©‡¦¤‘U;kÒS¦u‡\dt\©}_Ò%'¦ Ëó¤DÛ: Û“ ÛÒ^—ÝÜöÏHk_OÐ\«ùðÖz‰ÛW1ZÛ¯Ð^ñ•Ñ×ãoî "=÷ãÛ{ý5˜ßl\yÔt®Ø òÏþs~Š ›ï¡üb¶߮ e˜¡Jó¯»6,³ê¥~}sßÞºõŠèåú–Þ›ËA1 Ít¯0MpV?:Þh5 TžÌ³SèVÍ“ ðË›–]K’à(‚«¡ÅphÛ2Au÷B×ÄàbX`~æ`F‡¬ ÝÏœú>v‰Ì”HÚ—CÇ&ÿô÷Hð¾µÓw©ßlé*ÏÐÖîBe§|^Q‘üÙ=Kߤ²btw(¸ñ•…Ÿè?Rd~&|Ú!ôg‘̯×w6PÔﭟ¦ž¿ŒÀ«Dî­Zx ˆŸ(Ú±s72h1Éîäb?~ýØô0t3 mI¡»Ù[ù¯î›ÐXoï)E¥8"¸)Yð:Âoµœ"zFk¤žwÉËŽ1¯å:Ë(›TÛ¢#H+H±NZM±»O'­ …`ÒÃPÛ¼ÚT"ÑHÅ«)»Éˆˆð $¿ùêJ‹JýÆ=‚åù6Ybâÿ5œw£gMãD“HHD“8vûF¨Ý*Ö¢QñQe|qçóp~ò*ý´ocó´ $½¨g«H·ZÍ8þM[‰c=:È\ÔÇå5ÏTKÁÜ*ù)¢–Ò‹T[à>_ËDJŒ*#œ˜­ÕeKz®d2FÐc([ÓbU eâÄ.š]ah>ÈB[¥æ8Üý Aº:+ó Å+½ó’£Ñ¼(Ò@Åò³j¦ VÉîq @‘V•g¨š¤-þvläÝþ³œ¥D€êªw¬ÿgâdÈscÐÔÔ 'þâkn1Þï¢043æ_7Uõ7é’¢k)”&-Ô¶-y…±8¾Ûm¯3ª7®™`^aË+O&}À]1³h\Éü©UòQëݾ×ôÚo¢²®“óJyÜýÁOox^¨P~ñ´‘¡MÕ&uuÂiÎ')š_"âË)¢àþü?Cñ«u—›eÓnÇ×LÐýg<¾´”MÍš ²µ€N†]´™ßIu‹Õ’EëÉËþ°Žö•¹â>;zâÓ .9?¯8àøð¹n8ËHú4V¾¥\³—^rË~)qÚ’Ž2Ã5?¥|ªU‘«‚*õõdÖÙÖôqâÿù²“‰¶pho(´½+ñú~¿Õ:Ø3ŸŠ¾áDãI-néM=ôŠ.Ôài>&âU²e)Qìœ4_UÞ×íŽÄëË^^TJDžÅÉÊeעðr´úR¡–®ôjÉÀD<Ä®ù”_ú*¤î¶–ãË”Iüo¤ûåŽ\“«NC¿·ì¥¬<7aÕ.:«X­ß-ü”‡9¨x%¤Ÿ¬$í´ Âš`º¬Q͆yì½èñ^'ãV™ NØáÆ]^6pþQ ƒr:u0Ú\µ0¥±Ô<{þ[$n$ª]®‘³u’‹r4\ó¬I>ÉØ=÷K˜ ;™Z|ä,[FRXð˜®"ÃÙV¢ìôÌ“DÆ—ó^Å\²þl \TÝÄ‚¸l‰ËkLÏ<7ÇF·Ì®Q­ý¾Ò›±­ž-ç‰AS÷é”0š¢o­kT·¤HËsŒèô/²gvf|ðøeôo,…?§DºEbÄ9»}F{¬Ïß! 0Žo¡zÕþZá­ê0\ùÁÊB±Rµ‰™; hM‹](U“ gÕÎUÄ¢AÉÁÞéB´þÛ Ôõ_[Þ¤ÖQ™XýôH(èí„R”T')6“ÉÕ{é*`™ìh›ÌDYíèxѺô•2<¿ò‡[ÏpâM§.맢͸X¬ê°%Ÿ,¼é±”Oí`ôïڮˬÛF¶¾aµ%?Øo—x¥£’ºuÚÀ//tºVcyÚ-‚©Ð\á¶*â²m`ŽAÞ-#¡"»&ðA¢—‚Ÿb#5å-l_YÊ”Ç-kIó#åK‚Ÿôˆç Øñ àFûm ·vwB1[TåwŽ¥œÀÐÊ2z6Š=´èšèψ¶Û.ñ­ ÚE%\l“ÔSà[)›prä—7×#ÉÓ%O¨÷?ÚO[‹-Jê¦l0'ÆòíSëzíÃà3öÒÑ5_,2:ßÀÄÃ"ú.zNi XnªIš8q‹ü&Ë|3ïÆ…‰¸‘¹Æ9³ßm~2=”…¿:Pp.«–Š4:xSû'_uÿõ3ݵ®ü„£ wÚŸPòBÝa¤­µŸñÐá·¡ÐÝF:¼pzE›sŠS»Žmχ6“¿ž‰V£\õ‹Ùí/n3шÐEã<®bŒ‘Ç´‹ª4pѨ’«–Š??˜°c œTµ±ý£"7eòOh>v7K´/€¯æýŠ÷Ä®(z® gÖEàI6 [Vm/méã&7ûÃðg©®UCÏSÂE·¢=q_ÜBñbØJR¾´fÓ§[ݵͺé‹ó¢hJ³aMä §ÂTc ~—«x<@廿ÖXt1þEvxÏ +¸îEºê*]êÀT;è‰zo¦$ãÜÑl§°;^:%É,4ysÐ7:“³ÖG€FÏ?(‰†é"å2)?ë*ªÍú*,õxýÆDúèÝf R8·æ¹MxFÆ %$v€%÷êÇÐ]å ·]«žï/´¤_¨¯lIx•qÉWézå¾9~ ¸v©4Lk<âä»×&©:f­¯ÝÎ àpJqG« 3›!§nhMñ"{•òó@–Íú«BþÄû@|Rë˜A÷•m)ðÁsÝmÀ)‡c®ÿ=ÄÝZHý‘.Äsõn;Mòˆ—û~8 1BÓ"a¨@*+MËtö†~&!Öˆú$ëR°¡}F6dÈMû4¯Ì×`¤yeËær`Ó³d€¼ip(›ƒ½wª™oóU6rGŒÊÍžs盹FÚÅàˆºƒ3mÉ Ž,Á:Ù€: 0­åõM©±³¹<9ô)¹‘SwƒÇÅ9vŸi3¥«+θÿ×GÃ5(Î0yjñܱԶZðÈ2úÐb’Ü-®±œ œqû¹LDÜÐqa#å?™w˜ÈÏà)¦SèÑðH;À«‰Áw4uë™q*éøD¶ë©3ÄÞ—å|‘Tý~iRªŒ7~Žüö¸ÅêE㱉vÒœ5ŸË[ž¶Ç^~ Ö€‰Õm·Û…_¨pTÆîŒtø•èNgTôòÛ+·±\Á´¡æ# ]=ܪ-c–D¿—uÌÿ»š-–8³Nó–Cû« /I0Âú1o5½?R2vyõ :ˆxðú#쟷Gw†j„?gL~q sEa5JÖð,»'Æ®zKiŠO; ®ùÑÒfïž×yxçF‚gIžuw½M7å©ÅáøŸ$šHw£‰Ò‰zxþ; :ƒŽ!UâûÄ,’5Ò¥ytä þr'¡Ç>&Ì6:éÊ#? I+_>Yý»Þ”ÓÞ-™Á†‹Ú)`A#‘Y}O¼ h|Ä þÌ“ ²)…Ç Gµ¦p@5ÌÁ‡Š-¯ !êNe³‹¬Îj±· ©Ü=ã`%‚x„ “!%Þþ^{õ†Ú|¹1«Iª1–eÿõó•6+ =É«ø³‘–mÔ­æþóG‹‰~Ð¥Ú'ùßÔ6Ëí·tÐùÁbÑy|‹Ó©˜ùIþØÎv ¿:^6̹±ÙȈ1˜AX²²ëKPq£,l&ý˜êTqðgJz3Ãì šÂãçìG¨ÍÐ|݆R¯óìýð¡nèƒN¯:›4ô®¡X1&ÜíðÖ/%ÙÐý¬nYŠF¢²•1!E{à\ðív®•¢°,$p²†ÎÔXàÞÈÌÀ ±±æ¼p7㜫å7Ëe5²˜ç üSwÎké„M¿-¯I¨k|gì–{24³–/f9IͰð™QõúJ ƒ[âè*îqr´<“ÇÏ~Ée4FG¤ÝÅTÔ.¬¸Â à/&”¢K!]¦dUØÚ’–1èC0rñÂAН±o½¥FB0÷ôžöÐîËÃÇ k›Ûa¾ÔÙ K`ߟàÅ)«l’‡Ë¿6†|ÙÖ‡A’–1­¸¼íHóF?Œ-ËÌë^w‡úÚš…LùbXÓÌsh*«<O$àÜÄFl:Ê5¨æJ^öKŸJ´3C"Õ67áì[ Q5.VÿhÌêJ1Ô”ÍAþ%áh!Ô†Ëc2uÆïsÅ÷Ñï3Ø¿@– Y2'¥uå™je&Ï×5"eeâ~ØF¾¡o•Dvfo“|ГÜòöЭŽý¶ÂÓ¤žGÍ+³¦›VN`Â<<{Š’q˽ìŠh—©üáö®ì-Øæd•ÌÌɆn¹ªZަÚö¶cÅ#[)¡í Λba£khÛ½[ÁU|úåxìöŒ ™¿ÊŒHЈýÿ©Vü¡"ëØz{Í\ìvRu‡ŽöØØd¡þâ±n[É`PIZ„ÂÕ™¾zôý³zÀ²„¦ÝHÑü¾ãýÏù/˜divî†T.ŒöO·…ȼ¦Çä|„ý,§ѼÀ<«ro!À²õr'Â’©ñÃ0> ¨Ûº’2—­|îÒ‚¯Ìè¢î„üÍîœZ/0:S¶pŒ5¬f„¶9ö3ï^q<-ý‹1®˜¶˜{Ê ¯!#¿Je)¼à%‹rõ‘ëýÕ¾gR_§µÊ>f/ã{¾ÜA^ÌøœPÏ¥DðþÏe 1L³ Â7õà°at%kB×öß§}µÕ9Z›p.„¸¢~µkÙKÕ¨ó9Я˳ zî™Q¼…Ò6©ZÂH¯¡ŠúÌ>šï­^ÔL䔢Ÿc ©(sÒ yêß*X{´’ÒZ Pj¸êÚÂÆÖÀv,‘ˆ-F[éW}þ‰°KÛ¥½ÛO'‘'<ð Â=ϲ:öÁ±@tâ¿4ÎOý÷sãÈ¢Còp¢˜¦–¥(a–(ç¹@ì-‡®£QuÓÌHº½’½ÁÂŒk`ñѰ_¯-dÊë7Ðs%6‚DýÄÊ /'†­ÜfhÙ* ’u'fô±âۓኮX¢—§#c¨ì­öîÇÃpÐWcê]f7äÙÖ0>y°rrCÞÍkŒír·.ýÙ9,~0Ç¢…æ2ÞИ5R-G²ñôˆ-ŽIã4n®ò=éâä¹ÿº@‹|é‹©_¾Vø—s:Ôùx{Û=&¥ÕH=[R³Pç5=Þmúr’:‰$7ÀhiÀÞ4ã6<*ÓI¹1‘èRÓD~'feìm'¯¹ÅM›éÛ,:ÛíÝ %:¬)^,ö²"†S{Ÿz´-:®÷‚Ïâ(’neM/Â¥&Î2û7ï›Õ¦ÿHÎ{ @Ä\ÇÿRSYIѽ]&ò'KšÕÙgØ}(DL¨{Ø M‡©Kf¦Ç 3§áãƒì÷ì»°x´ }Üïd5ˆ¬ImVs¥[!:™ýç‚à|ÎS‘hRYë?G˜dJìí¤°0¦qŸÔç½ (—Ž4|àg½eßÁM4Ïêo¹•òï±ð­·2x·šº+±fÛZ +C<®Ñmº;»$ÌK ³Ïøo×¶š¾ÿo&~×xÙ˜¸…ÙZÚÙþ'§b_ÅyÁET³m)ÆvŽ—â‰·—ü¨æ <±h endstream endobj 53 0 obj << /Length1 727 /Length2 11947 /Length3 0 /Length 12542 /Filter /FlateDecode >> stream xÚmvsp¥ý²uß’¾m&1Ž3G<&×_Ä{úAZaé[³ñ¢\ð\np ¥koªuqã’±º¨D3Ζ•{Z#ãTÊÿU’9Ú¨¬£u3~yî(I­O‰–©óh¾K[:mRxi"ø´³–´xEŽkhUXฦ“¿{oÜuºÆLk6|3<°ãŒt©ÓÊ8QÓ¬a†å¢3æú‘§µbÌ똉¢8S­¦Û±5 Yªn‘œ°rh’ñ-• V!–vøÝ€;³§³™ÓÑZé†cÖÓRè«+‚Ï2¹¯‘J¶ÂÉÒDñö¢wÎ&ÆÍ·ô#.{¤ÃyÇ%q£²uÑvßOË õ}í“õ¦ù@B%Ìé;¦?ªî]b6ܹ þe*̹ô4Ø×$ƒ#ªÂwÉžñkĤKµ÷¾±P’öQ´ K‰ž:m™¢uψk vhÈ^gÔé77+dÓGêß3a"¥+Ù1û̳oÒWq´F˜¥L/:¤XˆçŒºž>´OzÈåñ !˜{Æym,Ìf 5VAýÖoP™ÄüYv  Œîç”i$@™Ž-¥•4`.?¹`ŸÄÓE!]èÑ:;ßpÁÀ+s ‘`û$ÇÃèFÖHtT$î¸ÂÉè^— ]Öƒ÷åLù3ab/™¼‡³ˆ¾½  Ç@Ïz¦'ûJÖg±rL1fÛ®¯>«Ã©ñCXù¾ot ýxì" ’AvNœ»‰ç‚´µsàŒÚ ï·&æÆé\>ÎŽŸéŒNŠê²°À7‰º`ZÛ.R(ÃâtX´}Náþº²ˆËÂÿ4<½ìËMü‹2ÊTâ5ºË&§‹%ÄÇWC4'p$½Ö¥›jEîçC âDì`— }ëÁ²‘’’—©Jl·5™¹k_IÄ/VÐAS>KŠ^ ªœ½—­ xªoëz¥oá$ÐnmŒÏœ¼ø\µœý žXä_‹ Ó—ûyÐEÔx|“aùq]ßæÌ4¡…\7¤äGfú¸xèv ÜžHÃ.¬»YÔQÉùü-4««HCâ…M_)â;/Ž™ˆ* 75”,%ÑíSñX‚$mw¬Oš$îúG"³%áw-úù:Bº{a<:à"’eÙ7I Ý>ž9¿@qǸ“ûDäÍaJ KнVÔu~_Õ`uz΃3ô\¡J,”U‚€9'Jê&öèG:¼³¡/ÂÄtz¼ Áƒø …Í1…)­_’í²Œ#C~YèÕš¯Q: GMÂñâ¾ 17xj~ ÖmS'ý‘ÕsqüCl¤˜r¢8ÍúÖWb!߉Ií­AÅK¦Šgôœë¶`Žæ4«,鯫½¬9àðޚυÝÇ~§tÝGÓxJ}CU¨6#Â~’»5œ\ãc¤¢÷=Z§&ÿ©WuÁ•ýye羑_¸ÇÜËã :§vÄǧHàN@» YËéP¾â±çÓ=ŽÖ·*Åèú+݃\.Ï/$LGÅ¥ñ¸Ãf¨y4E8~:n¥-c27›y²Ïj•´Âah¶:‡A»_fñåŒHгídÉ.r[<+nl<ù<• ÀÛ«Ñ¥õê£Zïkfõ˜à„ݎ̾Œ&~&#é1ä;úœþŒÄwd´dí[ý€‹*LLj!ýr6,sñ…³Ýós=X»XŒtzÎ@ö¤èª¬á¢I)§MÿHuìaf (ú1É]”¬Ç59NfÞ‚X\脾»ÖC¦^Å·Z5Z‘Ü %ÔVû¹Û^œÙŒöíŒz¢SŽ™( ÚÔ1Ü&7 y¢ñc€Èú„]^4r{ÈoA?À÷jŠn[-)Ø·1r…£ÊòþŠç®¼zꈙ'ÖG“¿É¹×È.*0tͦ>´ª‹§b5R'óT³J€üGö·Û=¾xãjE ÀQmØÝcYX Ÿ=š±?„ºK™­¿cBypD8™–WÔ-Xu¤+‰Ïôù0¨¬ãÇ’;4q̺LµK©û$Öµœ“«T…vìúEí~&¥ë+í*áH¶]£¦„_0Ø{këü|doé0Ú«öâ—›Àqmž–-»MŽEoúfFt‹ï*ÊùcU®ÚË“}«ŽdCbóP‡#g‘.›A6­E£”`Ï Ú÷þ‰Û˜Ú7ñ<¦=Š”ÅÍAûqqÚ=Ól2ÜQëÚslôɆKl,Kä]²JA.´vðPi¾]«\ÜÈÒÑ vÏOÑ"Í¢-`Ú£m*jækÝLÒçæúw£«Ÿ‘$ÖEg¸U rE1¾i0‘ôò°SŸ²Æ,' ¬dc·Eò·6 -kG‹;ô'±(Çtù± «g.VòÁ:ÅI-âji$T,û ›ñóô›Öª™`ϵÓVbWÓ$e;oMùUúìÁb ¾dT´>ôXU+.Ô8)šM&T@!ÓIÄͯ¸y¿9ZˆÄI \ „öQ7žEÑÅíóM£häøþßMgï™õ>èG¼y]µÃ-#ÓH~Ù«ï 'j×!”soí Šx͆ƒ ¦ ÿŒ)`:NÏÊç96vÓÛ»ÉL€éí§Î³3ú‚àWùÚN4uÞÄ=¯5ÖnùÊ·ëOô‰:|íá qab"SžÝœ+Ò]Ô:JË®§~SãœÔ˜Ú6ˆgx˜UvÚË–˜LÅIëÏM+DÃT?rNSÍîFÎ4 ç0 '=8ÞñU×ï^™cRŒ¦£lNÙ}KÐBI¿{Ú‘úB†[æ¾”I&3­%w'#¸WhÊ€ò•àI»Vøb€0àÉ™‡»U°bÍÕ¥ó’ajÿ1G~UØýÔ”±¸EÅ—^’A$±Ö&ÄZ%N;Ì'ßbqsèj, „*Š>­µœ¬³’u¸Œ€è©¤œµ]$hTö5L;› û=BìEY3Ï)|B{NöZŠPõÔïösÆËÖwQ«ò]ÁX\à¼þ™¹Ýþܱ1+<0/TßëÛë· iðLžjò# ÏoYJøæÁG®¦;™w¡Øfìè,iz§Ö_xO…ö¯ÀL絕ʘ£5ðNs‚ ßì…Y÷bMù³‚(Bl7øèÌÐ&wðOiú„K)o9p³[kBC¥jû9¾¿+«ûLï¢Jgeí'ߤiQÅ‚˜¶´ÐÜ ŒËňÓ=xËhrÇ`MG N>Ç,ž©öN3¢ÒtÈv1?ޱäⵘü®¦<ÉÑûkJø*Õy[h„ÚyŸ”ï“àS9Šm¾À‡çzĆÙ×LT³ÙäL"±²¢ÊòÆOc <~BN˜Ôî Á±K®ÕýRs¹óùVrCjÝMÔà#>•ë¸ü$(1¶ìv|äÚÉ(–O£™YÑxe,øÎË—…¶G€fgêÀ\¾ÝßeÓ$K†€óà_²¯Ó²ÒÎÉÚNi§´ÖäGx"Ò÷ äîÌw÷R§óMÿõ €ñu†ÆRvœ«"Ÿaw-dËßÅ×åùV¤&¸2L{ŽoZ:S7wý‡°|º–ÿN{\*¥¸Ð§š- N‘îD ÉI OE‚ önÁw ŒØâË&Tk’òÄ´®íYZ¸7ï1ù†møñÈ^*Ù¡—³©£Â–ò•dÕýQ²Ò$ó$¤å*¨dHÄbÿ*H‹gþ^%UnÛ"pq„cØs—Âõ[·Mgu?ª2¯Ç˜ Ü’ë£]ÉB•ÃÒ)›+Øâ…°¤b;uíÚŽ“—¬þTeï)yõÄìf’÷FÝïÁĽ*<½†¦y…q~«zóެÒãç¶+ÅϯŠ:g+œŸ7•.Ó8Ã'E¤üáÛžÖÎwÜåžäñ7©áÍ6­æã4 ¾”9±îÄÞÖß”¨’2ò¯ž´ìË®,OàÆ ¿*ü‘Ë“´YQ¼wK9æKÃeïAi‘wAðV…eåêÆˆwÞ1gÔôMÀͺþŽ5ù9Âzƒ•iÛ/ƒ~î1>àÁܱwÃòTÃó«~Ï”«¼D±ê WTš»=×›¹mÞhK_áÔ@³‰†JéÓ±žeyš$¥m*YF &U•ôjþÈ:™ž^ó†vgR?!·©Ø¸Ï4h£¶´‚éåQS6–‘ÄHX!˜ÝE··Ã—¥äÃÞ° Òõ_ÖEqWfÞu\ÀuÀ3Ìj-f·`þ:L³¯y§\Ñ0k`Ÿ wÆ\#¢Å!ü+ð.YºbßM+6g…Ç*-(Ã$®à—g%åV…y 2ðg’8•ÃàÛ¦Ë=ocAþ¹vs¯ÖD/Iµí¬^´–8•ruŒÔØKà·I9|ͳ"†²Ní…Lÿ’ÁÅŹÁS#Òä-Œ¹“$Øu§ÜUïó {…ÏÄ© 1ŠÑŒ7£ÃEµÛç‹oMxYP:7,šZ#+’Ìe»°Ñ¬?+æ›R£ …ïHÒa£R²£H¡ Õh‘Áy²LQò‚\™¨K·ùô® rD‹Äf"äèõô¯o¯èLT¸:Ù’ýž‘è¿%}™Ó¢ÏÈÎ#“°‡ku/~4ÐA\ïèLq¿ï(Ó!ŠbIÝYš~>´g†k§‚®¦§JŒ PÛét€(Îx;Zßš@”ÝŽÓ]š¶'!•“:dü>?È•7Pw›–œ´"íÉù]ó˜ö\Ù\XP]a^yjÑfΗpºŒŒ `”ÓM>dT‘ RfkSÎêá1Še™±h5¨±žÙÑD>jæÁ©zͬ—£ÆÇ!OáÉÒ+F}`t²Rí(X—“€=_²aØéàà# ãÎøh N×,-F·hnB^ðgn›ÏâÖòx f}ŒøÌ?.÷ö躤k&-{ sÜé.’Ò"8’‹Ã‘§ )%w2jm¥ò³ŒC­”ãψRù9¥Í6’HÜØÁYn&”‚*Š^. 'êÉÛ¼m“7yþz*lª£f‰*{+!V“èîÃm·|Ù-ÓB ìc ÃŠÕô8¥ŽPÑeŠ­‡É{ºþ5 ‘¯ÛYº“½TMcá$}oS•‡V=ÞuaQqÈP€ïFáû…1lO2>åvh'é§—HˆË-AÙŽ]n(¨® ¹Ö× ‚×~.s¸àáe0ªtþKÇ;rÔ$sYž 1)ˆ2¦5 ïK¥nN}šx_êq2š”%Kæ5…`}æ×w,él‚Õ€ ’ç1ýMÒƒ¹ –¿ÿ±zE‰¸ËÏÏCdcþ¤lƒ2ù„]‘׸³ºÞkB–è¡ßµ’7TÐ\—Í÷&Ê…Óò×9ƒc ‰Ø|üB›6­À§NýEéopéƒXMþázoÐkž} ym€®´£!—!ü7®{Ïè`œ!Ÿ|§ ãCfÜàÖŽµdZrŒ‘ÀV²ø ª2npÇË£'[ÍÏ«Êá0”aè»D7%áÐH“â9P’ “fˆn÷Ÿ_ë‹N[²Eah ÜÜRã—@Ρ?ð–akÎ9‹yÛ^SÚ¿÷ò:+’ù9ûÞõˆŽ«÷Ø5¨ ìâ³j>I2Å?hFXýÒRªŒqÇËKŸõ,•“3cq²…¸¢W¾©”6©Ê”±æ‹ðu&[ÐÒ܇4œRÄ{ _®œ±M…Œ-”¤ø¿Š•PMp^èØ@šjomÈäï9$²sqŠíÆï·0ó×v6jÚ7æ!RŸÖ­ÊV½È¤D „£è¡­hªrâƒbL{:ô„¢Àg¬î…4á^Z¡x¢!12P€qq‚T”ü7*{PvrG&·¬²½VR/}Ê6Âtš„¶Q«G¤º’úIçk{c; s¸­7köVÂlà^gÝ.¶ÝÚÌzÔ^—÷J‚ó8ëUTU­‹çƒÏ‡x¨±ùîûÓA×OøÛ´‰KÁ/¸0V",%¿µù´•g U_Óã(÷L`¡çqX£Šâ ™²µ&}f¦…`#ÕÙ»Œ¸íÚ7Ó@ÒÏ «Ig}ÄÓt¹É¥\p¿Øu»j>¦luíÓ rjüàLyU4ö@d“•cá%e“¼Þì™a¼±ýµ à§O´ÈÏxí¹S¯±+A~·,ê@µ 79”:éŸKˆ„ìfƒQ± ß 050}fl2B=—XÞ--KÔ'£ŸúÒ)Ç%ƒq,+fTw(R7çé8oU@ôˆÔŒØE °´#ñ‡µæ_„Óîo"+¬nŠ…´msü ÊP Ç?!¦­Zï11Ô zÂ[É¡¹r$†\¯pUªÅJÞjRgÑE*F¦ÿdöø¨{ø—–øü ˆuÀGŠg2TœÈý^j˜ºûÔ»k.† %`Bbœ”]™xÞVM#_CŒÿlœµb.³t$€Ø–nŒXT?£–WÊ3I‹ç”žZªûSxl¹ˆÀ†Gô ÿY®™Fý–!);ëá)¬¦„íarß &à@J›ì{-^Ø<$“g’ r±±»ù¹£þø5¦²Ð L+ÑXk¡ «åË&³—ÎF Óìvø)ƒËŽô¼š°s¦ìòyOŸ‰ðQq”`ç²pMÔSìý§­’‘‡Ão™t‘6–¯CÉû)ú£ §c2ÇÔÑè¤jQXx6òTÄ*­ ,û~)ÄsË”ðªƒÝZÖÊìmx M1^‰é¬ÎqT§ÚçÙDz ¹©À¢ïFpO¬Z>Ntjuëî0Ô9@‚Œ•œU”:ú½K&><©ç·Í”jÞ>¼K;³´&pj.[$fq§hw’Ó>Fð_ö?DzàWÇE¸(2ÞèFŒÍlnšŽµ—åj› ^‘¬©ÖÃ(r¦0ü'^œ_.°–òî­Ø×ŒŽhÆcó¸©êKRloܼÓÞoÉ­ oˆwk¡¾³ØÇfJnÉÉÙí=ãJ&“T·2Q]K %õh?Ù÷pª—¯nKHh5úã†töͳ@„tâ&JøÒg\¼¢¶VÿXÕ%%JøñæŠøóE¦ƒQ¬FÂáz_¹{þMHi‹2^¾!&4}ƒ"¾+›–ÓZÔ×F! F ®Ñ¡“#áâ¶; §?¦=-M¹¼»ë­ó-€Oõ]è’‘cғⱋc–hÎuCÄGr‹!ôdaoÂUèkm}ëÑÆ¬fCü€È}«’ùE?ܰˆ/ 2´@ÉÐùÀμÒa>S}lfÉóà›Ï?/NáG|Dq†LH"8I£" y!x^‰ÉüÇi:cÏ)·=dü‡8‘•aƒ³ýºù/—`> È’²MÁ£g«šßveë ›&e&àýÞ¤5»ÜšíŒyN`IúÂ)'“ŠÃÉ1‚›¾Ä¥mi±6ÎöÎÄñl†õœ¼5ßR~+Ó(ÅB»+·Ž<–ëÜÚ]]ÏÚôF†Éh¸Aü€ºÍnª\ªõ‹˜¹ª‘$DÓIÄ~gË’ù•¥I@ ^`³O™35¯½âð§IúEÆ vec8(¹9|òA§áÁå$OìÚöÍk½æ×Ù R<7ÍêD2ÙÖö pGÖX»‚¿Ý²åqÖD¸Ï›8©M‡Ñ.±ÓDß‹ ÈdÙ™L(øÝòõ$‡ndºQ!{×›šÕ Ø“®aðä4qý‹L‰áqJøB«¨›¨dŠÁrÃïšÎ G¯O–‰@+`ò!…ÃÈ 3c5[,‡ÄÉÕ¾ÀÀ:ô¾Bk¢hxæTÜbm->ö,ªd”Ö°–¼KÖVW–¹ù¢q¢~Bùùî_0Æ©¯.¼¼}N5£ù0›A8®‡ˆ†187%¸Ó·÷=ÉB³¦„(NW¡%¢íFž“ ë‹~¿‰$‚'a¥ ©Ù„6Ù‘åëÔ×CM½0xø Íáœ*¸_»ÃßÚ»f«¥Ì É<žÝÀªš|FnV‡CÁ~»×Ÿ¶u+ð ¸c½X8¥t¼µßÁ&Š,O|]B¦ 2—~Qº›ý…«½žrTW  EÆþA¡§®zÜeÿ1߀ZÝ]«C¹ì³¨Cº‘¿@\ „æ½Ëáel²\’c/O4¸Â…Óó66Ô[»âmÄ–ËÐn1hîOøC;Ë «7ûÃçwÆut³DMÚñøp¾õR÷è›UЯ Ö³GCg­’ÓƒG Œè},™0BåË-­;8I(?Û†×××Ö`å~ºéÃAlÂ2·#wϺ}ɶ¡nÃ5ÖwÄ’M‡-ÊðþD?7Ýgß+ó3 ÿ"x.†õî‡öÞ" z‘ÕqzŸ%êB”¾0.+†‚gÀ£ÈøfsXAS¢/ô`e„„…½…Õ…›M{P(Œ „KÕ¡¿¿”ªdõ¾ð&»GUÜóUJ…Ê,ÃØàƒEþÈíwž€ÓAaÒ¸„&Òò#màÏ2Kš÷³›„9Ê dýqb:Õ ýxý‡¥ìØ mÈÏ1\'Q¸e0‡65Z:ì¡´ãÉà&¤—÷å‡/¥×=¯Ë]œ+Dð ØÆa9έŸi"`¾{ôÎÍW]ƒ*PûÌÒÒoë÷¹ ˜¾L+G®ø–ßœ˜K“`¹¬ØíädY.7ǯ¢¢M©3­ýé*ü–oz®%éø®©1×)¯5³ð­Gâì6Ã'F»A§PæÉKm/ô«O«±GÝ™‚O•1ÝåžV+ÜJ"p´lÌCÑ3Æ´º“ôôw åX@…®~È)N½})!íù©î”üê¿Wu#’€M°·14]×úMýdÝhx’Ý&Áh«’Úm)Óós·¡"Qö9Ž Yå5þ°y÷‡¶2à·á«\å«xA:òþ×€Ò²=vôP B;ÝÞ¦x7ó¯7vr¢·ßY¨Uê:¹òIjiæ`ö²Åv“Èc+Æ?€Ö“©¦}y;à6¶š þù¬O÷«ÜK¥|ÞjŠ#äÁödD²â" ,FgÒVÌ-u•‰¤Ô›ãPßÉøqHa¤Væ>à€ WÙ˱²ê97³Vtb”¶n#„‰‡U€ÑÛI+ÌÚ?­¢ÙšwíˆÚfÞWŠîÁ)FE{7X+¢˜ºª$~áÍ™ Ô?Šk®&µ“vÜœd…ñà˜ðOCœßü¥q·OD7ÄAT±]VXÙ³Ì ¤ (,ý-\…EÐË ´.-ÅQ¯8ÅÔzÑñÈÈð´¸_¬'ªT å-5±RèúÕpí¾‹ü­b#IRt¸£k‚¯ì!®TGj½ú½”ØÚvšœ!M6#ŽŒÐ…_7µ!ê}íeÃ&©v?æ QÌ»Â‘|æº ÒñPñÏ0ÌÂãí¬®—®;þ >6†%ÈET¯ZÛjS¥I lŸ 2CwNŒò‹9ššGøì>š*uÔ^•=ìñæ~;É2›o{ ä'ȵ+\ŸXϤ}pí wx„”Ó¡º'Ú5(B¤þz 5¨éèYª4òƒƒ.g£f3HùÒ:Ij‚¾ƒdsCݵçÀF+ú‰×Ñk,G ήðp¨|ÏAúËh±³\F>ûZÜ×ñ 1MA* sÔc#ùOSz„úX©`¦ðq¢ÑÜ·$’~­ÓÆ{z$\ŽæÃ'¹¸-H¢€žaæ•‘Þªtl  =7¼PÃ6§'KNØ1Ž×ûMäKg ã›óí< '7f^¬fžÉÖð±Ðmõ(ZéU©ê›œßÐa•vû—Üñ36_Ù¢o_–(~²í;Þúûáó¾?9TVå ÑTEÈA¥ëýÞÏ Ø¿Ü%BwNå OgX nÔ.»ñ(sLÊ(›a”HíR‚c-ÞñEùÈÌNæÀ19쮹b¦„`Õ&Ñí¹§ –qðpƒ<Õ*ÏPßêb,3èÊèàuayí“Àqëã,·=™¸x¹ÂÒã=0lF½R‘ІD ˜ÎŸ ?{™ L•"¥§+^#³”iÏ¿iÆ©÷B¿xëDìy$·uZÁB?ÄkÙd+% ¼ulN2;1|øEÅ#‡Lïæ*…RÊ8úR“¸BŠ'7=”öPÊÂÞ¸‰`ûó^2}t¬—õÍÂ#ìâŒT¨$åz Ò)7„¨0&Ž’Ðzúâw¥ÒßüØæ¹ƒH TçÏ üôx/L½È_ü³ 4ósôôÑå÷/\„]~9]1ÕàÉ´µØ0¦Âw¨›n·eú6Â/qº±âË¢B”q?ßî‘…{0¼PݾV÷LÓ£6rY•zEøn\/Ä­îúP[eÆùÇVÓPÔ ÌŠ¿*¼éV—ôà~äm9æM[ɃuÁ²æŠðï“¡ž‚ÿqÞe0 &å¨ÖÐK‘ë7Ý>?jµ8reš9p²2¬zÓésl‹ûºÿbt·‚6ol¨ t/]ˆ”tI:\‰.ˆ¾3ýT+6é§jÂ.¤‘Ž$Α!ê¾^5½—®”ÏÆý©Z¹Ö 9BÂ%]D‡OµÈëLþ©÷¥Ý€—§„O¢&0¤Ê¡ˆÞ€ªºg ¿¸–Ïw  +ñÖ °×÷Ô¡ÿDy¾öÉõ"m÷›¿ü*æ@{¤k4ƒølIgª­Pà ¦EM@ÈÌÍpVìk{©¾rzÀ:ð$‰ò rÔý͸D ¶“6ìUxƒYÀk‹†¼>>ŠêM‰Ã"qM‡wèÚ”±ˆ¨¤¶òd#‹+ìœãùÖ€k̼g¯W)eVðýe¼ÏJ Óa8µáŒÝÇçñ`"’‘÷j™Ý¡³«DÎ:v\V8@{ñŠ5ã;¢iàÿp€1ˆ¿»¨²h-îÇDÈX]æ*±Ê ä:ÊßO&l5j®½òU ý¡ì<šú®3¢·dí‰Ow±1ïhb›ãfxìí¬ˆÓM\ˆ÷¥îyMgÊ`÷¿–„aBX6Üg/踇ìA¾’ço†øÁE¿¾:@±1bê[-¿Ð¢¤‡³tŽ—©Ü×Dp‚ÈáÉQœé¿ø,Ù "áZÉW‰¬\ë©pºl~á5ƒãÒݰiI,K§åZ— ÈÃdmô{#ƒ+;ÌXC ÉåÒ"%qÓš&¹^ÄyïJ]ÁžQÉ]wñ·c§c–ƒ/²MNjÎÉÿ„•Êw>÷¦?_* ­V'ÒŸÐð•—Òº5æ`®kß1>n¨&¡•<àýÈ»Y²ö¦´Í§¸g>@æ“ìk,nñO¥s«D‘œ¨ub2ÎÆ¿I'"ôrGÛ³¶ËÆF» fv±]N>qÃZ7Ó36Y`ú*;çïëHòÇO òÊ/;¦¨Wµ€Ø#QÖq6®•³¾*9áˆåŸl“¯²Þ[ ÑqŸ‹ÂÓX’n±IÄûF k'Â=:‘;kíj¯=3«ªxÜ`Nä°ªÝ+wàýûÈÌâ) íeYn¤É¸ë©O&?AnH¿Ž-š ExBŒ×ñcž=– çC§®Tw}©u¢XH(ÂSàÿû~8öÇŽÒÒHm#úƒÅ’™¶bò’£‡)’>ËΚ‹½@­Ç8à¸í¯ã%éæó Bl¿9ò}lù÷=Êcüi™Å}túŒ‹(ž…O§|þ2¡Mžô72ŸbaƒÕ«¦Þ$Ôïšf®°™”}Ôùp.ëÁ#" I' €Å”öÆÂ<,ƒrS±÷ÈU{ˆï´Ä“S±á€R=>=8]‚Ep'jš³’lÙ ïÀ3”¼¡ˆ|_ËqKåTº\w6Ë 5/@ÈpFþ)Š¥+Øë„è¹ïÊT•º_dÌ™@ÀÒŸ¹ˆæš.‹u3ø@€ÍEñZ;0ã繃È®†ìñ4F_Uó Šå‚ŽÿŽÂ=“ñövd°¿£q°!Ð3™óë¶ŸÀƒBÇùÕEÒž8WÓú8H55È¥(‚P&¼‰’݃xŠÑ‡šcÈð&êùµô&&wõ˔쨲õ©Õîø±+Zœs—åösh\öúS~³ÀûØÊt›4ŸÚžl2C¢ÐÙV%ì ~Øï–8öü½S…3g"‚ŒW½n¶á“׋5‘_¦ÓŠa4ù˜xêë²´cà­OIø­ê¹@&²œV.-ñ%g·Á-ð¥Ü,×åT4é$±pzåÌó†ƒÒ€sþ¯yVFbhf,j,y>NrŠ„(‰vŽß7Ì7kr;¤ ¯JhªUI·”£±¦åüÚ~È!´nWÄŽúÓÛGkÁ-ËñìõýQo¿vÆÍ¶¶-NqŽá/sVÓuö÷ƒßÍc›´”ÝÙBä­ñCéþ@ä2õ³vt>Ë|G^¸ž+ÿRxæQæ/§a]‚¾„½ S’ûõ"×ÔpE×ÂA„%ïÞ®±Æ•ž*ˆXëGc”c¨ò}å…¤ù3œ¥¼2-,Ÿ=®OrÆKD#ÓåQ<® ju’m ô·jgÕXJ`‡%Fd¦¢äŸ¢“qÕ-Œm7 †ž9+ëão`ã™ØÇõj…WÇúOôS”ÃEV÷þ&crÛ-Q "â TGƒ$BÈïÔ+Ø‹K§àN‘©FwàEÓ±k{8Ñýͯ—ß÷Il®4m€H^ÉÚ"l\±ì»úóh» ~pƒ!­¼Ï ŽÓ®Ômê~ÖBïŒV,ñê¥êK›áùg'(?†~°Sù«æ…DÊãfÔÿp!J endstream endobj 55 0 obj << /Length1 721 /Length2 16080 /Length3 0 /Length 16641 /Filter /FlateDecode >> stream xÚl¹cfͺ-ÚeÛ~˶mÛ¶mÛvuÙ¶mÛv»lû~{­½Ö¹çÆùçaäxFŽÈ˜IJ(foç¢âé`ÊHËHÇÀPS’e`c`0Ð1C“’ ;™ºXÚÛ‰º˜rÔMMʦF&#4)@ØÞÁÓÉÒÜÂ@aLù¯ @ÍÆÐÄÒÖÒ  focïfilàqsspsv¥srå£û§IÙÔàba 0³´1Ë+hJʉ(ÄåTâ¦v¦N†6W#Kc€Œ¥±©³)%ÀÌÞ `óo`logbù?˜œéþÀÎÍÔÉå`fNö¶YQA1y9€¨0½Š0ÀÐÎ #ñO»‹3×?Õ¦ÆN¶ÿ3 Àå¿–á-£ÿZÿÍ:yüÛ¢ƒfd˜X»ŒLÍ-í éÿ‡7I;3{Û¿Ã&®ÿIýÈù|Š8¤˜˜šýSíjc#ghk  ¶·upu1uÈÚ›˜:Ù”ìm íþSehkiãùÿ[÷¿’.†ÿð hgþs ÿY:‹Yz˜š(XºüCµ™¡Í?ý+®núï}‘55±tµýw¿é?|ü³£&öv6žÿ»ä?cükAz M - êÿ à_iQ;c{K;s€²Ë?\:™ü7𯴂¡å¿Õó0ÿQ€ñÿø²†.N–mºÿ‘Ãÿ|ÿ±tÿO•½‡7-#€–™‰ÀÈÎÈ àdañý¿à»:9™Ú¹ü‹ðfùÿ/!™šz˜Co¬Ús‡X¥µ†Uø‰ÍW‚QÏϨR¯2­ÍôÞh#Y[˜è]aß«`ç»ÃâÍñî]þ‘¼o!2Œ7…ý;5C¡»ŠýZB\iîW»ó®XðÖ¡w ª†ek,zyç’±¹¤@5Í’•{^+åXÆ‹$ÎcPÞ9†¸›°¾ôh'N©KŽœ©õ kz@]ƒ8oZxmÄÿº¿ž¼{CŠ¥oQXèp®yoþÍ £þÇÈ®ÏU¦wª¾½ZH ò!(€c¡’Ë=UD¼ôkcaeur³=cܬ@ù‹¨áõTY¥Üòë÷Eåž±­1Íéx¡¸¡í9â'íD]>[»Â–(¬ÞùÁ£¼zé¼-›ëN.\fxi¡\$:çqÄ5oŠúì™ý¶rÇȰP𥢒6z;‹ß<·${X†Íî .Õ_½lvߎgpÙfÚÃ(¬îA†mËêOŒÀeøøÒ[…ÀõWÆw8¤4_â³³òÄ%êT9Ñ“¢Ü¹3é‡#í¸p’š¾@OÊ)Móx£Ú ´ÉDçí-r«PöKþ5ìËdÊߨ= ½¾~K}­çALašQÔŠ„Ò§};±f"ç]KŸÙah4Jo:–˜b&ÝÞnĿ֎ž§wáŒuBØU3¥¼vÔš±xY˜Ós·#MŒvMÔ)/œÃþ,u6R“…7!›%ƒ¹'žºÖ—‘Òr•3!$!UøÅùõ >Σ*ã|“µ‘ñ»~0K,Aî¯ë´7Ç–õ]¾è¡Ó&ë…ç+Ðjõv7àW}wdëÚ±,ö‘}d^ Wî85ؾvi„œÔL›"¨\I¼q8†Hk:Ôd÷cZ¼­ÐËO²¯¯³@z“ÍšHx”I®D’>^blD»[UÞad0ú5¸a%œqv—“u-ÕO:8s§íkÿ„½…Ý/o^³uÒ¹Ëb>£ÊŒßi ¤}‚FCñ_V4jœŒ.&3 îl–¸èP!sêÆ¬!#t¹ITDvÄ(¶îÞ%D!y²Ü!‰üÂÜ9‰š]5(Ó€4³Aèö Œó4ª’rHîÕ/›ÒxäJ¸ÂàV‡É^ôÝT:òudÝôM["â,ƒfgX$àS+CÝ{ Õ²:¾½Žã¶×ÈQCi:ÙŒë“ÄIk îuíor¼Á+w%EûPRmŠÞ+o2¸ý=$ÂÅfÞg5.E6u2Ë5ãw@¸œÈTk–@0¬Èé3‹¦u!UÚLØÄ%#P6Â-= ¸ôM LN˜cNvZ«^òõZ;®ˆÂÉ`WTí[¾b qKÇkòïͲÝ^º‚ø‰IÏAGÖåÚ¾œ:»ÇèÐίéÞK9ßø »§©güõ¤¹Ø›=Br̈ÐI çSÊ Á=˧oÖ¿~ì ‘Üù'”Ýœññ´¤»W2Ó] )˰»ä™Çéšò9jågm\ï’<¢_ÝãÜN"1¢<¡G8ÅÍnÖ²–¬J|ß#â“7“÷݆±¯©%…Œ Î!P0ùÂSß›œwP–ü—Ñb3R>Dõ žó1Ç…­¼DJÿ,ñdX·©ö¶%gÀ¥e¦\­ º-º&Ë\u×l(–é± »,ýM‹8<äörKžÿ4E‡†Ó®ôü€s»1ÞMGèAñxØ·?úŠÜŒÖRr?¢ÇŒXÙ[ÿuû»;Ô`è²ú™[ïs¥[y$&ö ì6Âÿ]S“¹Æ»Z¼Æ×¹ÁÎp'rØoÇ£÷§v‹¤A+š›/¥mD¾ÑY1Ï8rDJ¬òÜš–×aÄ-º‰•2œ*ÒãoUå[ý~@ œ®\˜ÞÒOŠ<)™É¨7Ô A9½è\Xp§‘ó û9ÃŒøK8Ò}vÂt³ t¬L?N"M¼¼*¾–I¶Œ§öw½ BÞ.‰ZA9ÍçÙ×aìà._okéòÉÄΕObäå£Zë«Ñb˜ï)ó&&4QÂxñ‚”}4“AÄ‚•­j¶šÍF“[*ÉÅÔ¸±îlž0ÒJY/Îpk°3á:~BûØÆ/,ž+;ôôwx䫌„Wƒï¡kBÔØXU²ªQ¨Ü3R‘sB'ûÂØÌÙõ‘³Îï\¼êTIŽÈLHõ}&½€9_u.ž"CÏàü mrÖÂà²Õ؇&(H1k‡Û·épavbeŽ’1Ðå '½DÙ·/FÆyòM/BôdÆ“¨ÝЄÁ=YÅ"<Ñ)ÔGÕ"§yÐ+¦ðçœiñx®¢ ½©q}sø²‹R>ÃÔX“$§…¿¡RÍ >·™=‚g>—Êy}¬uŽƒoLGk¡®¨Ñûó #:-…’¹¢ÔYc´¬¨_s³œðë¨ +â(þ’:³;;AŠèø8Ò DnÊÇæaK¬Áð¦vý•_S3 2y±qÛ|wqx-5À2èÁlÞ¶Á·»˜_†ùüçèsgwìY[G‘óЧ&ÝÌ<‰<¢áÈÝ 1J~|2)Ö=©{Wº“Å6÷ËŠ'%xz¾þ Úó‡_¡ÃQHN•ô¦ÉÅ_2m"ñ ÃKc»…ÌïA퇽"Åàfûg[êø„™ú¨”ÃÅÊ•<)ÉTëjSÅòµ©º¨QÂw"€PãVäA¯‡Ux#ˆt°ï±e@F Ãþ7,dåŽp¡´ÞÄ.ëÛ0éŠpØýurêFÀFD÷ú0‰‘pòúhÏÜ)²¸‡«*¢ýûsÛ¸a‚™s9Ÿ¶½³ålaŸÉÓØáü¹ÿeÔŸ»û™Â;sÜb3mŠVÁÒkk\)¿À¥–dxkºdr®‰«|Á8µÖÖXÎk…»^Î}ÈTqj3PJ¹Ž…Ÿn)Ð,ú›ó?<«(™`ã-9Së£é8åŽUhÀëpeÌ¿»ËÙbäà¤*µð’õÚu¹UÍ胉ŠÕ€–dZ£F£C.”ËŽ%“{ÄOÉ(†f-ÙEBpq1ÅŠÂóÍo G.üMû8TíW'ª˜8ÁŪ—ʧ¬“Ôl?›ºØÝ¹ïCyÚšic!ã÷bØïüµ/lCp]1¯&úác~…ä[-F–€…·!Qš•êÄS†a²~(üöÀ-U:Ãøêþ”?[€øL„+gnÌ#j0)íøäÖѤ¬b9±¾¯¬øjÂ!C¤Öº)ª+É]ððå•Pg¤r¨½K¶ÚL¾g|1¹ ±ä ?¨Ü¡"]Ô[·ïØ¢Íødþ¸Ž#رš ŒJ’]×àEU¶GrYæãV´©WÅ«Ñ÷>Kº!<ìebä!úZù¤|tH<ëÖ õÚ£÷ÐôÓsnÑá6";ÕAþq‡Ÿ©îK§&2I(Ïz“²¡þº#“˜Ò†nòeÈÓ„ “qøx4ž‘©Êìmå·Ñâ»›VNïN§ÕVX/TÚ¿æÏª²Qbƒ‡7©Ö†lb¤)_¯êv’ Äoåþe$¸?`FE¤õýbÚ©wÊ}ÉíŒhxa·Kÿ‚vTÜOɨ½¹æèm ?à¶È]>º.QÖ[u8`Яl…bKXž3~OJ­ .N®2éb"Hriy2âœ#B¾Ø‚"b|ÁYÞ†õebb ŸÉœL} 7×õÑQ såYòÃüç§Ÿ¿[ÐPݹ¤#ÚïQ ºÛP~¥´)#¨uœyt®Ÿ3j&©/­ä2áè¼ïÃgÙ ‰qa¦mìÝX27Àæù€c*¿ïp Za`ü%J%ínš²ÉVq†¯L;FF5ÚžBl Ó?Ù1†u‹†!g½™+Q;È\È'ŠB :’¡0àîMd'8Æ/J:mÑÍÓ`%ÁëÙaßþ ßá¬4x`6‡  ,³c«]R+!ÀqØ«iêê·ï0ŒçµH´ô¤É»³Ú@o£DåœÐš7,èË(ŸªaJã ÁÊuøMª œ­ù¬|Ó´ÙËÈ¡¥Ë…ìµ\OŠ´]¯«ßî4{§¹$‘Ê5Œ7’mM|k‘p ±Í´òr‘<âÅ$㺠Ñ×ã-|¿Ô%|QkŒ÷÷ÂN õ€—N¦V^i°,$¡¡âzzš`¦ÜHÀ$ßR³ÎÐt¾I¿ý»e$Ɠ՗¢ÓÕ^sÀ¼ù]{£ˆÇΉÜuQ£°¿±Ðõ£ûo¦&ܹyݳ½™ÕÜõãz¯g“Ò#Ðéã:—ôãÇ‚‰Æ´l ÌæxiQ ùàè2Ê‚&‹áà_V`3²D(#Bžt k€h‰Àþbè_ †ÊõßÜ‹Ÿê6ˆ˜‚2ÏÌAð‹Nr%6 =3m— ‘Àæw}ׄ¶w&:©´Ë‚•ü &Úà-ù A¤'ïft9h¿KÒ¿u I4ï@‡‰AÂFë°z fÓ”ìÞT@媫¾|„à[.y†­‡ñô),êžÆòÆKôim4dB&8C´‰õ»0A¿#ö˜'›¦Ž 3)ð1X±æo[þ篃‹&SjCQþ­OÓ ìkòÝf…ÝæÞ­V ¨Zé)äÔ5GU½ÝSЦ¼…~|öê±FÖæEëž-¯`]æ³C§þÖçÈ\… [~¦YYÒe»š¤¦«ùú™I8g<ü6eSÞĶNdù-p§PZ}À“Òé˜0(œJòý!ì·Ëu¢U*zÿ Ju:~NIò77Š?ßf@§7%VâþØ}Ù%«êƒÖ­ôA¦äñm`WÝ:߯ŸüpÏJö\&áÑas–Ÿl²,›'…ÔRÆÒ¡ÖÈ®æ;úÌUŸè§ ^2·|#áFAöQ{ª&Mp&$ö´éQMîÜ+†VÖ¨íP§‰Œ¿œ×$\†jwr;*“…0Uój\4qst±˜ö¼‚) B›h.Ò}ÙË2’â¢^_äÏ˦ôáEþÕB°^\Њ• e}­7 ©[U*tDÖ¥Ô×Ox¾ê-4eDnCój`¾ÓjÆ8ãvÚô{9ê0<ÕèÌ ùÉåþò œ}°za¶z‹è?$›3¢Ì„QžˆT¾âûº´²5jö|¶Wiª`µ'yQWǼ.q™§ —ϱֲ›$»ujcÇŽË_o‘µ¤y5°  ™× µkmOºËŒÄPÛÌëT|œŒ"+Öû[Ü©ô?îûÙ‚–7Ö™n"þÊ?)W#A ½lÊÝxšP¥mÜ+Z$í±_`qÕö`ùÓšjGÖã„ö®ðŒÙÀÖ,:Û®;B>âèÂÎV—€]gþÖtW¤³ú÷ëÀ£šú-Q¡‚& Šd¹„jßÞe˜ßÖC·;3ÌhÀä ÏX‡Ü“BDs•-„ˆÞÙ¦.5lÏ™z´6ÖöçiÞ'«žýyBòÏ5s€Tó˜!€Aj|t*cåÐb«ñÍü«©š›ô»ºq~lwÞ¤Y¿‘7»Aº~m?·çz!¥·DR¸’†kO™5âà¹î'[ðà„lµÐ,”¤‰œ£L£€É€èÂüpHï}zͧ£œæ£e™Ùåï‰)¦é®”j/éë…äÀb›b­l{µ,LQïc¤¸ØÁ+v•‡ Þ¨Z:ÑiÍ F«‡(Þ”õ·Ò[‘éá$Cƒv%&ò)êM‡5  »s)ݯ}âÏ) Ð£f‹  ãÞÅïêã 1O?NCõ™PuÏ‘ä“pÓÍ&Š>Xª6$¾­NÌD×ïõõ&ª°¬hÞ;Hh5J¼¥„'C§†ImLà6*kfe",„@£cçR?œ–øŒÂJÐNóµ1âlALll¡£šuÏ8‰$ûõ‹U(Ù5$ÿ—ŸG«û¨0y%bj™éóò¦ï°’è*d[…m‹°ró3BðWÉ‹âì*%ÒõvªàP¬’ sfÙÄÅE5MÃÁ²7]ÂÌÃ: ɽ÷ó‡¨k‰×• º<€ P:¸êoË|dêØÜ#6MoN‡äYÞ½>•>ÉM“é qÂ,#ÝrØ'|ÝäÑýÚÍ$?–;µÄ_D*„ ¯5ãc)VåÃ.nÉzé”9·Î޼—±WÊ="ƒã(§”_k@&µÉëRX)zN¤ÀÌï<?tl ›aHÞ³»C¢nÝ7ý $•£®úÓAUüoïÚ´+u6jó¸ íHçW‰?½›‡S=O¶È¾‘PÐd™è yÜ0¯N¼P}8¸$•íãÚ'+Fë>û$‘gƒkôù z®îâþ}U&¹V² -02™å_^u+¿¢–CzüVö±øÔc]œ´Þì*“OõŽ?º†•3ãy¼ö„¨¢¼ERòë*¹Ø"q=pÇ99䕇î^å÷é€YÞ„¡èÌo3ý¹:ºÉ{‹œ@=õ&É×›åĦ® ZY5LÅ4'SmŠVƒË*‰Ÿ¸æaVë³é©ÛjÊì×[{ 0&]sÖ.ÒH”Ôãì=¨w¸’u±VÇ@qµ{ ¥c]ú w`×S rg Y †"Úa©…§Â³ÑŠŸ¸íhöeäx1&BOîÂ4^]´E´©n*J›P¸ØC6¿ÕÚ|<ÈöˆÖ ”/ÑÈu@¡ó+¹c;i·õûQ•ƒõÅ.ÕR»•q >NÀn ø=ÍžWþºYg(Ñ 3íäŸvk u†™ÒÐX›JH/OüürùyOçÆ÷Pp œÝO±%K3(äŸKWþ«ÒU³ä. Û8ágg T(¯ÍÞ{}eƓθòg¥K{Œµ¼Úftΰ7¹…ñîÀGkk-ä“$l}€ urPfŠáVè˜èûfbY«¤fRþ%ÀöC7-Éb嵪u¸NŠB0rñ>c…šˆrGØP¬1+ö•fú[×µ»·º–KðAÅW;ŽSØ6Ì…TFA‡[¸‡èÁï×€Ykû8pé¢Wºé·„Þf"Ù/ž2þ4>xP2•@$ çŽZõ(²Ä(¸ñ[ ^kYdÜžóÝyéo³Ô>Y‰—‡žår‰ŽÌ"§÷u†]•×ôOæ #ɤ¯ äRü‰„?&‹¯pæ¤ä/e\YsÂV±‚­ãŽMwýUäzø{öfµ˜’!†âYu;Ò]fŒ È¿«Dn…•IÆ€ËwVõ‚(nˆÆ%¥ jU‡†É€`:+bz~i†¹\‚ìÒ*CQ¹HÂõî]zj$i°Œ£Ææa×5WóX ²ú-s®¾Z‘3Øhz …’³‹.3‡…í{NoÚQ ¡`æ(. ?±z0çÏETO8äx´}‘ùy20¢ŠoD –%Åœ°' ££”Ó_œi¾&\7< ‰ƒ¤^ÕêœxÅ‘­·]¥{ÛÞÃÂò+þÎEZKºÖÞ}ûu®ŠS¼Ü+¹aÅŸ{Gæà4ÂT)êݽ†ýø€ç.s‹÷Ô:i¤H~ý,„$¡ÔWÕ‘÷È}—ó¨VpÉíÑ6…*Aa2nà>Y ²R[‚} ႸáåTÛ‰ˆp7hr³Iš†¨_8ï£e„fä°Da«ñ^ 9®€ r¡åЉ´ Ñ1– ï8B’{áGš£Õoü¶,T´|#}nuö2ad¿†ï$»L¡Z•ðWÏ©b;S{Îë?A}öÀ€nc#ñgsÞ•ùìÆ ÉÃô(¿M5…Yä]–̉8«3ÓðE`ÆÂóEBÇEI:Ù¢3ESôæ`Ú¾þÃ0"äÄ.)2³“óŒ?4®ÝÜjî"°$ŒÑÄèÀõ~“WDFã¨5Á┪V)>×7àí,uR:2M3›t`ˡٮ°»X›®ï‘æ{H¾‡_ù×NÑ8±Ë˜ª®\IB*þ£¿‡‘\Üòè6›»ë†ž×:Ëgg½áè™ÝÕEªJ”H%Ýá|†ð™%3Íö¶ocÚ ÁŒV €e‡'û<¬|@2lS­}ÍÓBžÙÃBhj[)¥d,ˆÖM^Oþvφ  €øîº&Ù`Û˜x£"[M÷š¾\Ùë±xÆRŸa:ÉC}}@rcçÚlÖnÙx `‘‡¤æò›-l]hýTïúúEØü¾®.ŒtŸLÆ&=ƒsæá6v³‘°S’S)— ÊyJž†äY®v“(™ŸR­=͈õííb`µ”Î[=’£«B •Fs3éAëÚ=KµtæÊ¬Eg“ƒSx„R¡ÌêØ9ž"V‘wûK¨98^à yÂ)0DŽ:憿TbéÃwÛTÜ¢g Üñ†Ã_AJÚ‡ ¦N1˜{M‚¨…rG"ñuqe^¥%jÒ§s%0Îacî‡(c††w€!¥ˆ-ò¸3|À¯@V¥&íIvÝDÂr©y¨@iÁ§8æGÔ/y@hX¿Vƒtý{–fHib Œê¬ŸêXíœeê£}›úâR% ·† ¿”I.‚ÞvI‚Ì®£GK'öTšÓå¼½âkÇïàëjó}ëIˆñßíæ: 9"÷ú2ª¢Øù×[ÂV(ˆöp¬•¶¯YÈþU7öó¼§2÷U™–KUÁW‚ÌñÀ_4"¡+öÇ$áüß _aúO^i_‘èf>”òI åo]á+Ÿ0g„¯Õªû{6uý0f!àèiVâM„k$Èd“Ír ¦:} -²Æ±Ÿä–tÓû} U]HÅ{(íÙ>Tl·ö¼÷‘µÀ¥2|7Çs•‚FðÍ &Ä4÷psš?Ÿ¢¼4Ðx/A€¬õ‡ŒÈ nXõ¿“+ÀH#ð9È7ñHÉñœØHž{\G(ù$9ýøx±ß¡Ô)ÚH!ØœÔàðoÅ1äF6Uê?Kü1ºãÑ9bäýÃ^Ýl¥UL VÆNÎw-»ª{•k]¼b¹û‰Öc.‹§YHÕ¥u—~að”Î`ÙJãü Vz4Dÿ‘áÏEgf}krÊžZp½ýuV¬ÚdˆI€ÕøML† â4úÊiîÞ³šœ¨}J™ï:IzñË ñêD9>JYRÿ´0ͧٚáäN…ŠÈ1VîbÕõ7±Ä¦×S$ê“0Êœ ¹Å”[U ïçM%åÖf[íMQ±ÏÑ?·¹3áY»¤(n£R‹ûPajÝWª ÉåÚ‚Ÿßp7‚Åv9t趬lfŒô²´’«†±0oW|¾ÃP(£C~øA ¾™GâÕ«Zq“ 2fÀ´Ÿ&01’&ÖŽŒÉ“oj>‰ß±Ò1ò/ »…»yH¨ô`]ŒKÔ¼Ù«&Ù©žÁ§Ò&ó¼b¤ x#Ä“vi  ò…º jŸ4môè,q¼zzã±wäó¤6”醰®¿#Y%˽?™ÜQõ9ŽòíŽÝb÷“¾qǪ“ãÖYŦ¹’]«Yþ¨Z©¸+ÔÍ?߈ø[=6åmܾ^Båò"{N‡‘2‰¯ÁÐðÀVY%u¤JЊ;Ý$tOUBÃÏSàœªhÞA¸?ÐóO0Фcƒ&9£ EÚ¶Ù2{G–n¸{Æb£‚Ëਠ+Qrƒcüs Ì˦ÙÚÀRªÅ=x £#·ÌÝúñXý‹P²¥|L¥º§ËSŸø°ö™0›¯ðꉌäêª}f#üX?ɯ>؉|€*ìõï É/6éØw"ù´9ùv|ÃÓMm÷ÞòÊ1 mäK_‚;ÙQ˜=_Ñ7 ô#3!ðø;¡[o°–žö`Úá)Q-ˆ@ 2ÞéA– /C°åše _~ì1øÚ z‡åY–Pi@Í¥â™÷%`‹ýÊæ›ñbìFaòã¾— Œð³š‚ijKx(Ÿ²+ÔýÛÖ |à©Ý9vùw[RŒ™_Yu¬ç[{«~ª:Þ[)’ƒ¯Èn"hŒ~½pc—µ@üálÖp.Jf¬·u“VšFàáj=¦Kj­8TÓ= ƒ?ò˜y†ß+bæÁ3¥õÓ Y<§˜ÅDè[L|S}*—.¼¥ÃCRN#©fÔQ‚ñÔA¯úœVï‚¥àÍ)ˆdñg÷½ª¾>ë”¤ä» $Ú¨Àˆ}.Õÿš:ÈçÞÔÝ0cÖ‘2÷ú!h¥F&ç¸NPÏüdjú]¢„LÏmÖϾºË¹¼òçmËÃÖÏ…G¶ªÉ>¢(~~®?ÌÝÀŽæRo Ù*Eþ|‘ß©ØÑ‚`gcù1¹„”wSPƒÙë6TÜ©£¡gfö·L£+³K‡­;Õ÷-£“ƒÎiöï–«R~OhÆéGŽ‹³ÌÃIÀrÍàœëÈUîÃs·RÎîðyçêJ&K1ƒK‡±—¿K‚Šmê•Eî ñõ‰X¼Oo‹dù§ÁÙÎÚÈXî|I] X¿&¡+UXLn¦8ã´Z§WJM§¹PØW&’’‘‡] Yú«ƒÚÕúÀ;[Þr´ðgõRFž?ûP"xñ齿^Ðl˜Ê;M<5´ÎCs€D·UžN4T^äT…úÀ°E'™8%ØØ§€]—†t7ƒ{#ä¾O¾ï1„˜-tU49@ˆ¬ Ó ßèœà8dIåcÆŽ’ãer½Š;û£g„›ö~ ªþƒÝ%P§fƒLŽò½;ÏÒÿoè(Sv“Ð/Âcì™k`-¦ ŸoÍXZü¶ÅÛnqXzH€ùÏDy™z‚Ìò5³#¦UÁÕ8»ÌÓÏèàvu’ÄóÄÍo[XògñV±ß*[–•à'w­x¶BÞlÓÙÜáú¾Ä|=ÃÞUjæ+„ K èÂ`nèyòÏ_N¥®‹q‡WŽ?—_@ŽdMÛ4ÞOªëúKA{ê…ý¡, ©¾¿„}~9ÖX6^ˆW¶'ë«Sœ®µ^¡=Ú™y f»B8âm[IL•œµ âû%’µV*º¹\ ¯Ã»¾H.g“g}!/qÿv¹ü™¤Ñ7œÜìÝ7Kœ_wA›Klos•½r·|Ú,¨5ôf4t„rEq$uÇM0[ÞzÉZv0ÜŸ½f–ƒýÞûHGêƒÔ˜à×V~'Oq ·6ˆlÿ@¢†{->Œ\"£eÉ,üE^9ù‚¹äéÙÒC|ÊÕ`êÕ¹ã—Ýèâ(/çpγkÈ“é3ÙƒlgD O["•oçtqØÑ´R›Ô)d¾/MZðÀjÝ~ÃyýôÕŒ¡‰|fù-Þ¦R5-‘Ó/PwÔçg—÷nÚ‚9j±‚hÖâŽv$5"-:C>2ä’¥ÍQé»ÂtŸ53†¶‘eù Ð…¯údÆ YÍ8ò *h´ŽöCêU±ÝRi«òÿ9Çø·†•@gäÊ;S̈…ÌDàÌyDÓýåzQ óñÀ„ ÿÞƒ¾P|¹ÑMéùqÿm¾)“K´ß71++FÜw¢“ÁÙ-Ÿ …ä2U_sÕƒ+ÀÈ0£1ìùÙÕ¥³¢'­Ÿ‰V¸~¡§\žIâž~þ¾ÅfÍ0ÇÅûú–Õ&©z4+$Š_ìw¦â›I2§Ž‡•5^%ÌâÊ êõž9ÎP½B^׈º;ä¦r_!W?Ó÷vÛÒ¹û á—ª/7~qf³tŠ©ªwFNPž%7¥ 1Ãsà™D!T-‘†”¾öú^Uôíq%óeþÙ—”Éà1f8Ð÷ùTÎwz"XÇÒËN¾§8SIOl{ ýoÖÖÎðÃ<ïŠRŽ¡~ö°rÏh‡ˆ¨V¸æ¥x]RV±£Š+½ÖqÔ—³I±[À)-å÷ÈW`ÿì+¸›á £ý8D:>7~[¤=U®úµîïÃ/áGý»Tö̺Ð`UvòLôc›Çô r\õ$ŠBI•‰K H• œºgeø«ŽÕ Úð/%«'Z(µ@Ùce›8ƒnZ1fAJ±^C”Olßz,Þ£™ÓõuL!Êö°ÐúøE׌·+»(].J¤1§‡%ªIb§iöCÔR&H”-‡ƒø<æ/vð$oNÒBˆ¾õjèoÈõmìâß³îü¶˜šd.£’´ü0âha â¶NoÉÜ9rCè__˜õ„[-÷ ªÖl/é&å1XvÒµ‚N##µP¬˜5 ¿gµ¤6„éREK€(¼0mð®uÝÁ«n„å5ô £ÐMG™à?„0ÓÚËwU»'βé|¸öD\»øàÜxŸ]gª‡õPœ‰IŠ…cí ?Èâ¶è¥ N®m¤C€Ø¦Ž{XŽ=g×.¬CçTö–WEéšâ¾ßÙkl"QI²¶UÜhplɤÝòívp©–ŽðxÅÃ]²‘€Œ”Ç É×'é~5L#C›ŒSÂÆ`³È‡"$ÿaWjw¥îs½‹ðÂY¿Ì*«™¾«óÙ†j¶ÍŒ°¿o—‘ñœwã_r,“æÓÇëL',¯9Q<¿æ¯¯„yk³$ÿko£ˆ4$÷x6©µ— ±b‘TY¤²hù6‘æ±½\í7Eщ@¤¾Ç™ÏgÆðˆœ‹s`^T€xn®<£ôYWze=ΙîP…z|ˆ7à!„QùüÃK]Ñýi'°ÍY(?ÿ€±PUÚ´“ãÝηäŽE Z. *Nc€}J¢§ 44pÙ°ñ{{ÅQm|ù,„Š”¢JóøÜ‚l{Z­ÜœäɧR'sÖ3/z¶˜ÄÌ•ÿSv. ÇcjÇ2rR÷p'EsÅÞõgUOlèÀÓ†ïô…5æäG'¦â=¨9º;Rvc—BÌçž «j?3ý¬óŽ7 y•”@Äu¿¯¶AIšº÷åtª¿ÞþðHÈÊôMÑ‘¾‹LÂ%e¥É¹ûÇãj4u­+ ¬ú«¨I¨!M—¡¹X+^úÒ.‰UnѨ«qG•ñ„õA'ÿAËtz•LÌLeņ蘎ڗ‚a~ÇöÎòˆk?­PY5­ŠÙÐ뒬窳Õ9a7Ir¤.VÚ׬LRRdk´Ç:>v¹(¹H¦¤)™”4 j>·–Y6ñEU~À2¸ê¹”uO‡ú“‹åÀ9ND:=)\í3ëïwx Îzl5sŒºvÚ䋆Tý @Á¦´4•x¿E‰b¾–‹•)åéɪDyùF'X(ý„O ¥‹¾rS8‡÷–yíPP,LvÉ<1bjW4T :††##êKŽl®8ýf$öðVþ Uõ ø‡E ôF@Ôüug÷ðRK²[µI­ã•¨h½ç8(Òžr õ~Èq¯k,]»1ù…ɲ3:D?›_*Ÿbú’Ï©vo6–4:O’E|Ü8†Â$‡ª*5¹ð7 ÆŒðO)9j’¾Îù4$U‹J|E¦EeZC?f4Å,¥åáCàâœrâŒ0D!y|?ßtüt@$²–âlM?i7Ý}ŽõÇœí,ømœÑªqí¶$1õ gT¦žc›º‰š¯´…eŠÐ{Ìó«š“ç¹Öi´óûÿëº>¨Ðô1w…|Œ€¢° ¬®¨R‹!PÞI,”F€˜áˆ«ï®_üGxá"FÛï#ÿu\á8ÖknïàRò3b))3ÃDòuÝÍFLÚŸlš®,$û´ûƒí‚pš÷ÉCÈÔ¿c7«¢6l>%²+µˆ`K»Æ=Ýø¿æ!TôÂþŒ‘÷ž£ÀnZí—˜cçð4¾ôž \åÆášçTàî ÅãY½Sh=… ‹R¼…yïâJ¸=iAßiòòš&õ;‡¿ß‹yYaHÎ%‘Ì—pÊ­cRÃNלiK¸6,¥™é» ÷X| û²—t»Xen£Ø¦³t½JqrèTÈç>‚iä¡aÿޤ„DÌãÞšTg~¦å?ª@¾qÿ+ g1cËÁ“|73Y¥Li/„Â4ÝjHšOgnÑÃb6¨5ñK››‰C|Ý4gÏlúÂOÉv?ÀDQ˜]& ÊÿE½£=˜Y^{Ó ´Ù1ýOI#)±ùÍÆ‹?D•þ³7ÄŒŸ«•Žà@n ­í²püªJÜe¬à8­\™Ânâḻ×.R‹­ŠÑ½rl¢!ã`%îbo6 1“Úk©ã¨ÝxS†ž<>µ÷µÞ-{&…m¥2ªE2Á@vyç^î|Ͳ*.j°úèTâ=5¼æþròqyx°ÇÝ(1ÕÞ6x}§ªUeM—xa`G‚-()™mÝ¡Vê;ÚüœQÞ7Ԗ΄­³Bz@4,!©ƒÀÃ*ðÈ!?²Gã/{6býáÙË+b‚Ü ’Rûn…Ãz¶£]lj¨•[~T3¥Œ?{ORÝÚSEx¹{†—¹ _€Ï+úyÂö)v1)ü6¢½"£cÒÙ£¡ß4+ÂÒwâT1|l?[~” ÙéàÇi :¬LdJÎÔ૟YÅÍSTÕÇy¾Z![<ö: ŸÃ7+Ñú~°ú3aBN?Ý9íÖ 8€Ž~ºØ™ŽQ+UeÃaÒUüžïK<ÇœK4Ö¾Á–d\q‰¢‹WW%úùíÜg_Ó@þ÷õ:–L ©›Ý^Tv@¥E;žè*uú1¤¯NƒÔ?¤/ÇŠê«bÂÚS•ZÄ\¡g+ ·a'Âw}ìèukÕ¿‡ˆ«fа\JBºp­í¢!”ƒ¾ñ©”‹Y†>É[ý£?? ¡™_¡ï>Ê¢ž¡X@Œ3¹XÓ9Y'q̰ÓÏæÓS‰"‚÷3AÖvB-B²&øŸNy¶¾æ”Ü¥aãÑž>ý¢»W2ûAÇä~J.9"±°ÍB¾ðÊqL¹ûí‹Yÿv•ž“è¨_V¦ƒÚzðKŒµf²m;Ûë›E.ŸU$ÔýE* ökPÕ\îç6Ò$ i˜ù5Ot¯^þÁ¢½;Ã?%'+Ͱâ'ÂUBóRivmÍ/7ŠA\µlPdˆœÃ¥ÑS°æñV×0úä ¡tˆgO÷^€Ý’çÝH€[ìí0g‚Ûìœz%+º4Z´a&…BS³W:Q¹cµ‰3PCÿæ5#ª)¾d3èøôü*:PÉtîo$PIì+ÂÓSø ×8D}™áÜüc7c3 0Zh1íZ!/œê½ ØÝBŽŸéï€â9x$‰íòQOóÅWñ©Ú¢:/êVa 2KÁ æÿzYN.I:pôÜÒµô4iøœ<’«uv 3MäÜ8-8Ï÷Ÿp£‚š±9s¤] Í‘ïăóˆæTÕ¹ïbá$>p;†y/‹sÂ÷Jð)‹‘@ðÏO%äG>0á 4Ô‘ÆuH±ý™[Ê;³¤kg772x”Iíï©N€ ÿIõå9þQ«DYÙ’»"Ü—rŽ¢_€„jAÓ+m>URÌcs¼ïG‹_+~9'Ok£j“5@ôJ´`<åŠÎ¤ëÂC{ |THlÄ)?-­dö µ ºãÒ×Q"¢ßå~Á¥je×…Þ-]>ÎÞvå2F‰yZ¯9Bj’ZìÞŠ¾ö!.ÀÔ0]T´;à|ïg¼ä€>@TQ'@Bá\x»´!$ˆ>køãkyQJúüÙK”~DÛþÞ¾¦ùü+—Ïb!ÔïÎI7ä¤TìyÙz}ºº‹¢¥)ÍsC)s¼+bV&ÛÏâÀ‚ÜÜ\Ü !-sÒxIÁ0E“9_È3xG§†ë€H*•tÀz[!_ÕzuËÉöƒl¤Ìør”jl‘ñÌÔpÂú›X¬xÖ§½ôç9=(4gþ¯R§»f‡Šji?’Ž÷ ´9ºkì7q¹9\5+üF“ywo}.<åÿV©ÿÇçÁàˆ±8qÃèH½ž A+h~v‚WCé$:ñÆ:‹±””Ҕߣ"º{3y^ú©:Íá7Ôfð½ÏÙjÁ&æ Ôp¿ ÖÖ{§WÅÂÁiT ë endstream endobj 57 0 obj << /Length1 721 /Length2 13405 /Length3 0 /Length 13943 /Filter /FlateDecode >> stream xÚm¹cpfÝ-£c'=±mÛÛzbÛvGÛ¶m›[ÛÎíóž{έóÕWûÏÄXµÆs®]k×&#·³uVñ°7a¢c¢gä(‹+É2r02éY¾‘‘‰8š:[ØÙŠ:›pÔM€e{3€™‘‘é@ÄÎÞÃÑÂÌÜ@iLõO fm´°±p¨ÙYÛ¹Z›x]]]]\è]øéÿ.R618››L-¬M"ò šRrJ 9U€„‰­‰£¡5@ÁÅÈÚÂðÃÂØÄÖÉ„ `jç°þ·0¶³Zü‹“ý?l]Mÿ3u´³ÈŠ©‰ËË©ÄDTD†¶@ÀÉ¿Ëm¸ÿ¢MŒmþU-Àù¿–µá-£ÿZÿÍ:ºÿÛ¢ÿÆÄZ;ŒLÌ,l¿1üK7)[S;û¿Ã@ûÿ¤þrúË@ùWC*ÐÄô/ÚÅÚZÎÐÆ@)bgcïâlⵚ8Ú”ìl mÿƒ2´±°öøÿÅý_„”³á_„lÍþ*Çøï…“¸…» PÁÂù¯Ô¦†Ö%ú'®nòï¾Èš-\lþ½Þä¯; ´³µöø¿[þ-㟠Dee”Õ¥iþ;ÿ¤Ål퀶feç¿Z:ÿø'­`hñïéù™ÿL€éÿù²†ÎŽîmFú㿞ÿXºÿ%,lçîEÇÌÈ caf0±3s¸X™}þ‡®±‹££‰­ó?‚ÿ­å?þ?ƒdbânbümuÉΘ'Ø2¥9´ÌW¬`¶’fvÚ@•f‰ tyªûJÅbШpñýVå{®<þL€ßÎù¶Ôm±a¬ üáÄdQ¸îÒ÷ç"’r3ßêÍWż—ºp½K5c9ˆ«ˆç´µÕ@êIÖŒìÓji‡> ¦(ƒÒö>Hä­_+¿ïm%¨t)PÓµ>áMöhªgÍCò/žwWÁÂrƒvà¯ÈpôÍóËìÂ4ïØ([¹¶Úè®%IBhE7Œõø©T  Òoa.ºnóˆÛ\üI¦mÓÎÁk7ZÝÌ—Ç.ËF‹tkš¢Bü+úŽ,KÄ*EÐ|üª6úϜڞ“A­jøÆ«< R©Ó³ôŲ{(½ ƒ+ÁEA¡•û~šA<[ñ+ÞëÇ­|¨ÌøÉ•!Ÿ¥•[w%óÈé êu’žHö8R ³¯Z&ß.Ý$¯ŒÜMˆ¾ô/w}ü#†åȹGJ×ãçèe½ƒÛÙde=ëçéÖl½ }ƒ‹æ9ó=·µÖ¢~„Ÿã9ßAù>HÄ}تXH›°N¦©‚ncyÓcŽ`m)¯Ø ³ "QE/¬øz“2 {Sj[űºÛ.X0ýUSãl3ÒuGuiF»Õ¼¸5”1LµßœÁRÕ×H± ç>üµL#Ó­go Ú«.¦ìŠï° áüœ»­)cزCŸ½•££ò¦Á7û§pÈm±±öŠ[l)©ö 4ç A‰ŽBZÙ2q‘£¹J‚úν—t~&.M'œ75š¡ˆÁχŽþþX–¼3ñCc7.ù=0í®WQ6ÅÜe3ÃÑ@SÁíW9îÆù„ò‡iŽÕn5Î!û(sª§á;‚‡öÅã¼,ûœVKjwlZ@ýíG®ŒÝAËÔ¤•sœÈÿ¿ÛIaðÏ—èqX?ƒcëÛPRga¦l¾ÝC[P¢Y·QA~[·éçÔ>p‰Çî¡ bs{ _s3šû°^ç Ì? å6iªŽwdV™~‹æºà?¹HÁë‚T¤¶rçDú®QНÖõ…Ô¯Ìk•ØIg01jÙCÚê-q±Ë}—??©bÈýP)_Ó ¯0æ%ü¬À‡Â”ñ¾f«Áø¹þÙÃçΛU›z‡›%ëÎÖhÖj$¼&‰N!ÅEÏš²ç÷zÝ %Ç=’{¨“³Zª[_kV‹œÞ•tr&7s‘61tÀ­ávì¹y1 ߯cüGÕ$•RE ne«*¤ Ûvܼpä ð»Œ:æ®S7ìÒmþ¨“ÀVßàu,ëÈjù{—²I.éj~¨xHJ µàÙLìÛ0úñU8÷‹»o÷M•y…OÔ4¢1>ærƒÆ¦À÷ ðàÚTŽL¡QªY/αUkbfs‰$=ÏÍÁ}Mõ¤ú®É©\˜_’rÙ;ó6@ükŒTrZG9óFá| 1ìf¥žk$$­½„<~F½QWHnµ•tÆ&õ@›ÓH=[‚.š·;ïà Ô[ooâE3/åqïªçw$RâOÁ?òè×KŠ:êöJéóõ…¿—~öxóüÑ÷Ò ÎV‘Â4'úvG³Þ(ÏûCl©¿ÿ†#$uÒ¾Ñz—ÿzu,êPe¯Ý´ì(B"ÇןÃ7“•Bˆ[pÀmµ§ ¯¾VO‘ ´„]ÊÑ oÚdXT—Úwð±Éž[Å-×ô&…?\ªƒ²‚ªÌ¡åákìˆ;]_Euiõq]Îá/W½3„KIƒº½Mž¦¬I¯µ„h€½L wÃ0ç ËI¤¾âoëP2´½©…+Tf(–^3Òßg¢EÎþsl~vYNÃ,ìîÞ6Aá6ÙñM/‡W,&Ñ«´ˆ˜;Î~0Ý*é‹ÕUL%Éû>F‚Ì›p7B|êS4ìú@¶ë`eÔ¸Ý×âôþö‡ÿ‹Î.ѸœØzK³ûÅÕf´FOìéàun°S*Ò Ž }0ˆÿ~Ã;²É«Póïùûž<žý¸úaÅnÂiäÈøMä lî;ÑÛç ÅJŠýŠŒÌ×Åœ Ë× î•}džÜÖyÙèö¬I‹Æ‹ØQ5t,¯IDG‹SH0¶?6^/ØÆÊ/•Š©‡b™™À!‰iÜa&‘;pb×üm&ëîúXC.¦­!'^åÛÃ8ö¦]uðüNò*q½(Ów~ßÏcý7uø)ĺҘäW2£c•,òöV¼TÓ> ê„iÔY|­¿˜cÆ€”B+×á­¯ë5ô#äÛê~·c÷?™^y]{pŒSÍ+Ý"òåè)XUw# ¼ §¯(4mê–ïâöåw?'Mñ`6• ¦äJÛMI„MEA–óiAaü½ˆ§ì4 ^ŠþüïyϽº˜¬¼i/$ˆ®¬PÌà1yá*»½žµM… Œp 11îÍÇ´¯NÃŒbf˜¶Ä8” ôHÅÑÔ¯" ‹J ÞkáhƒÕ¼vÎ]ïüJòÒ6ß ÕÑZD©˜sÔùXçÝ¥ Aa¤ŽJ.Ñqr$ZÕ/æ·Éxf=̘¥hB ¥´¡j°½lAÃ~ðɬ%NÈ÷pή]¥üäªJ7Ú¢mQ6ÐüŠc‘FMKd¾s¢÷”KV²ÓÛò\VÇ6¶Í]3ÖÇš¿Ëèâ«.Ö¹šÝ»ašàǼ¯úÄfìàþ -PÜ` Ñüü>Q•u§¬˜HŒx»‹Ÿäjâ%ø"˜‘±Œæõ¨ š¿m¸¯Qb[lµ wG פÞïÈ 7¯|ÕĶ·ôaÿˆ*»ü¶sHì»^žùº¡VQ:ÊÝØGàÜ«½±«Ñ²®T,ðR‡×‚¿iì’9/Ÿ¨T­þ{‡~lÓD3†Èu¤•WOˆ a1(çïhP=Ñ«YJMÙ¦ŽÙ´²)í(K¯Üi"·bGyêRŠÖ)`Ê‹aA¾~ëJ ¸ø° ¸ufñašýq¦TK7¾…mCÆç’øïÂêÌŒì,Él²Ç¹EÊt:Ú˜ØRZwÊ ’¤‡\Ù)ááxß§q'hÉ®òC5¾·–7w‹ã UöK@tj×Y‘ô³ÖÅ]cÞ˜Š*3^Ÿ&Ò}Â/å`¥Bâ…ŸSiZaß§WÓ…ÈVeJ:Ÿ"¶—ì[ìd•`ì¸3“º7Áô÷²7t{¼4âúá ,Ð]5@7Ö#HAâgô ÌqF_c†d›¨sÄÙò°¾v¸oï1ÖeÐÌ÷8eaífšÙìüáçåÉKh”ÝEQz‡ïÖµÎxfµÅ”69òk àf–÷44-ÒÚм¸ÌIQç”Æüßs…wÃÏp-ÇÙ¯rzõê_×=É®…·šxªÅžlŽ6ù ‘…ÔJ¥§-Këy€Ì£Ðþ ›øXû7ä–k‘7~GïðeM:„7ŠwêiS_ËÜžqäe#¦Swåµâ² 9ÚhXÐŒç¿F|YØ,Ûu&¥§ h—?¿cþø¥Áèw5ãA†Ö_=PrSþ~eO?™‘¬l@NùŠÂ¬S(“7jÄ“aìçE3 „’ßê25ì‘…4ú‚y7·ú…#E4Cü·ŸnÞ»W”èÓã´‘Tñ€ ¨ ¥}gOE"sÔݱ@Ç~Oâ:³ôýœ¬“£Ò¥œìŸ^’>Ž‘ýÄbÝDÐÑ6IˆòX¾ß×­ˆðÚãû|è‹L#žçx,“Fa6 ²ÃÌ3xkÝ »,øÓ?;Mƒ„\ʨ×AqÜË.ñÿûž“TIñ5¬cæ<%l8ôcÿx3AΘ‡!w8ëÅ¿)k÷ë&R“ßôÏ® Qêéá瓜ƒ†¨ªŸ1fÌ…Jèòo*5(ƒUñËô¾C¹ÄzË,x¥r±¥:ºNº ]º¼ƒÚh©BS)%:JÝzÊêYY½:¾OÜEÏÿ*ÑUT‘»ý-NÈ“åQ™Þ’ˆՈ‰-ɶÅIZ6µÖ‹°zï9Lù¾Ÿ•¨¦Ðáöà…⧦7€Èû­ÁúByÚ/:¾ôÒd0š[:œŸ“îµ›®Òç'à{Çm9š³1O¥¢Ì9çˈ(b³¶Ûü|ÇÎÒ^BƒlnÇî Ù² !çÚrZUëÉ£å–ΡJ‘%ÞÖ‹ˆtqhYø‡Ö€ ù3¸TÜ)bÂ#H^ER Ci]hdù7f¯V÷K½íÄI”ç{û»æÄˆDï:<ÛœÅÚŠ‘ Ñ“ÈÅ#8oÐYšgýùœ>º>Æ„ƒg#éÏeo~ôŒ*%Õ"Ä-ˆ" QõÕxÆÐO?'+—+p¬“—CÂÊC)­òídRTöR‹Ïµ$(>ŠÒH Ü>åA½,›H‹l¼àÒj!—ÿÌ­ æ÷ªáE…îRe1š°9c¬ÎÍ þèËRuÞ ¼4h˜Ëmaü$éO¶Zê'©²n‰ ôq·1› :¢ó©‚…Ì+ìijñu¹”p4ýÖ®šåW®Ê3dñ£‚½„Ð þ”÷‘ÕéܶW/ij¾}NN…pŽmͼÒzfDÊöñùLaûŸùM,Q×qÞç¡ãÜël"…0+ˆw¢¯Î%´}y«ïU{iG‰z61ívƒÑ/–bµ4·¥›o‚—¿·ÙÓW†ZÊ8R*~µN>ö‘5jÆóŒ_IOÌgLÏ‚äý çŒfˆjI Z“›&ÏÚZK‰Õ¤!` ?Cµ…Uº¬/©ংљbjIs_†ÊÅú-ƒk뮑†ŽË.?8Gêž¡^ê¥8 {Ž{ô³( ®n‰Í¨½â²~ø¶¨š°è "p ÂÂMnYÙañh&âçÞDjlØ?n° 9\`Q]ßa#ÿQÞ‡„H+2¸øÓ\÷D"b*Œ”zÝ´^-?õF^÷AÈë¾ûÅ·/éjý¹oÌ4Œ©ãêlœ²:ÚÿMº“F¼×1ÑàdüÔ–Ãg]÷û›ë³"ÿ Â\$Œ]îÝ]÷2O¡×Tý™­¤\„ß‹ ¤PÞªÁJq„YJ)ÜlÚrì¼±åaÇ_ "Ý| µ’IG°\»‡kAo0‰¶171].€r×å¬ñ5jãC ½,ão 4<×(Ÿ³½‡´i½;txýf`‡±îêÊR'p-ixàôpq¸ù)7þ}Ì{v0¿×=ñ ¦Òï±_Ìá‚¶åú·`«§Þi¾SLN@^%ÚÑÎNUƒ$„z!Q­Žp ǸÅniÔKBhAj'©p”{q9@÷WÔB êú>¸®‰ÅX¤x@c\¡%ŠÎâ-ÌP,¨÷b(ŽqJÿÊ)Ñ®Váà²ðÉï"4ÍBx¥âÙ3Z$ÅùäéJúEaƱëUåAìé¨ã„Úëorµ>Tòc ÁQõ§\&/;O åÍŽ™(±~$çÙ38÷ÌÑd—`v¿Yœ<(¶‰ÝÃk1ïäw}ç3Ku¢ÞÔz{o_¿tÝXpG­°Ä3ÈŒ–Øëøfòtã|¶õkî¢PŠú8 1­‹BŠÏŸ¤üO½RÈ7*j+žôÓptEÕ™ýñ¶.V[Sn±œ²ŸJO~Œ M]‚Šß®É#S½!{ÛPdX!Áw@¸¨5üh&38oÞ`Fõu;ÑØÎ;e’T¶Q–bìØÖ÷çèÁ퉄aµÚ…âì8çÛ·šÃBsÏ´ñ²<Õ1^móQD·VÈvñ4#ã̪ƒkÖæ¬Så³ZV3Ɇ•Vi¬°zpqDqpÌüš7]¡§½šãú#(”ø²ðPîKåÉÄÎR Íîï@X£®°ÓŒÜ[dü2ùÃ{jmÝߊð \ŒS9^7úg?¶¢«~¦ãXËÑÆØ®¯~æŸ,Æë_@.!„pè(®£rˆíF$Ûo8ži=0vT^ÛùÚ ÄrŒØ<=·*Ħž¶yÆ…[Ý—”wÜýUbÉåÑÏl ±C#ykäj´ÇòX!³Çˆ.ƒ‚ÃæòÓAŸçX] ­§®d<OxG®ª¾º0ÞgwÀÿ‘ûQÝÉd)P©Ù«-×BV`Æî¦<$W´ûîÿ–u_W½·¡zL&AhŸLÌg©VM¹òðäÄ9û¾ICp [ö°Îã~­ÛÎ6éÌZ4ŽMˆNÛš¼ˆÁM£ZkJI0ÑòþÝ&פþsT;W¤¢f-{±õ%øÐcšN´þt+e@ëºX<¬Ê‰UßìS¿áÎIÔÆY—€¢6¯û@Œ#¹¢`ëϯ«+`{oK-'Ì×áy¸\ohÕ3ˆR£DFÂRš§~ÔŸ`?gÜ“®ëìþÃA‚ó6äØ@×Ãóü NˆU‰ z²i©2`4+ 9X«¥öø#eoHoH¥¦|Ë<¡Õ Äùod “§¯;ý¹5蕦»°‡¸Èý~g¼^~EÒc–§ÖŽõV;§iš«äKÄI—m Sn¾pQ Ê ~T®ßnÃ0Šè*ÿ{ÇüœÎhà–= ªûA²8?*„‚ɪšÃ^ø ½Ëú`æM¡3œ)ì!hÌíá=×mŒÌ‡§*ïž|e(uúÉõÄåÂaº®«Àš(ª³ež)¯ûON‘δ ÎhÄD¬9þ™Ps>nà»›oªóÒ‡h!HÔ¥·Âèœ _ñrˆzELwA]©@m‹_'­sƒú^–^¼ß¥j¯× ó¤Q_­\Ç,uY’n‘Þý q”hÛ[ BPà"Ê :?V¬^jkI@s*nTI!ƒ…{Çè4¼ZÕ<´èµ±ú†Y-"É{’^ ?µUT©3 £°ßv©i]ÞAÛ:ί­.¥#â½÷X8øG)Ö»¤‰AŽrÊT†Î töˆ\3)¹¢¦ áPÊ]ŽÄâö¢šíÙ9E³ÙÇ<~°_†¹àu{þÖUÝc¸ïôG”‹ Ÿ ½ÈcõžMNöh€‡Ù·v`j •Xú¹*ƒ#Ö¨mE?0òõ§Ÿ I–¯øVtà )1#©ü '&.É“g«…‹v2Ú±JA­6[Ù³üò ܵ ¸Eþî1Î%KôB.ETÊøk ¹öp¾ss“J¡ƒÚ3/¤V_ˆ×Ê$1k¥ÏmV3è!½ŽY ÊmÏ­H6&Uë·1ÚWÈve)•bSFç3{r50@6LûËZ/O†Qïè">1=aí)šŽw5÷Å–] ƒùÓ¤šàëº'‘`xçÌ¡\1Ö@`®ùãó^ˆô¬îÞÞN˜Ëcñ+õÀCý§:oΡ¬aõï÷!‰ã@[QHnvƒ†ýÀ6Õ‹;Â0yÝšx¶ôGú±Îy‡ëŸ ŠŸ°vWeWÔ/ ÌÝ>tm®›1ð_Õ‹ò«±ê[¾pµÁOwØv¬t² ò"Ò™„þ0µÀ˜,IvÆyyQÛï=‹‘-êÃì¾:ûŠŸá“ûSÄÝ"y柖³¨ÔÉð9 >tXTÔRš@±/޶)Î-¡´XhT,¢Í—f?ÛÙò"ç/ Ú îá—…>\©õ Ä¢œÃ¿9£kÂÌž.Û9Õ,Lùä ØI^îG?}yDìÔYA€ÿYô Äš‚A+˜Œf ÆUç¾¥†›RGæÈD“[]óy_Ι¿"N,^âL+d 8užÎ¢•³ñ¿Ÿ$2€_Û$#1T q*"úÃäå7™4ó™ù%냮ÆoÝ䊛É@R*Ì3ÈMÇ©°Ks Cg‡[-5õéh.ÆWdu‡yÀvIÖÐøå«zéÿC!ŒËâ*W>Y Ê¡huLµðŠƒ$}wχ…ƒ{Íð²´>¥[—Ä©y ÖGÛ¶ð µÀbÙš§CDèùŒ”‘LEñµ.&šO¡]6ÌÓžäuÚ‰®±ƒ0Q’B}±[†ˆ5Î8¶Üò¾ý¨SQWzЫk ¶¥k)F«&ÏL Y×O f­¡P‰.6 zº&A;£ óô´'KI?µþ5$àü”³p¢l­ìeÛ&3©ˆÓyúƒA‰"·Èõ FJF‡„ÌAqÇpç<_íñ˜sþEj˜{Þ¯Nˆ†i ßj‰>ˆFŠ-h­êu:f§;5‡Œ7¬ñ*Ü®X°Ë+©O;zlûÑfƒÚÚöéè×my“‰ð ù+”ø5ýLA_(xÈ{ÀM= ç‰vxi¶GÕ®¶j‡™ÉÑÝäÚ'[kl×±ÑØÔzŠÌ#ÂuM9îÏx‡n§‰ŽéþÜp°æ€:!§È«Hê­Noiñ†7XîE%¢råâ´º6@C ùѱw혇ý³¦=¯Ÿ Q±õŸ³Â‚MЖüdøui­^ïÁ¢JÉ<¤²qwŽÆ á¦IE;¡ÞSTÄþRÓxïËy½$G+*¶g=•%TÿtªÐk]Ì(„ãI]fQw\w,ö÷’Qu§ÌABGL´±¶‰hw¶ì·‚“ù¬W ¡èœ©b/_Za *|÷ À>4ÓÛiM±/ër‘™ø‚æ2}o"Í)U¸±<‘À!ñ#ÿŠ ßMè^vŽÔ=ˆŒ/{¾U!Øn+îÅ[Û—oÏH÷EB²F2I°Ä‹7ôÑ"ŽÄ¡>oEisûÕŠ¾›{håݶh”«mÜ» è ¬NŠU¤pe¹ÑjD?M/Çý ãìÎx„"á/IâYéêãFñw1#“çS€ìgù±”„œ=âU±·#õ飚fàÁº³“ۇtyÅ– Jbp®{Îk„ž :f|×!mºÐC3BzzÆãXä®JžŸA¼:ý¶PµAõ&NÄ™A:{å¬ÇªGi %¸¼ëÎz3¢ÿdS¡ÅÛʸ`Û]–å,rAd>$ç¬J=ß-iÖð ð¼6Ÿo™×«`ŽîYiÀ‚Ç¿7u¼¼ŒÊGQÛÅû56µ§ÚoBÏ»#]¯s°†ö¹ó581éŸèÛÒã6xÿ.¹ Âêi®2bÞæßþzÝÛcÝ©>/a¿7'DÅÆ‘‘Îíè6yïåSLµÊ‹~²Q²•Þ± YÐÀ"‰>Z]Oe[ ½Y¤Óˆ¯6‹=mWQuZ¯ ‹¾qëmqzzRQä•ógµ\5\Œ«.i–_n±vîˆhÉÐêSÛÇEkqRS{êæŠ!Ë÷¿çŒ<Á$UÕ#+Þ‘­¾ øã·`‹ß¡+¡¼= ó€2mðè¾?…ȺԂÒK‰^AgkÁÇz¤ÀÁêa–±ïò7‹Ï7á¶JRõ£ˆVÑ$V¿ýÂ'±uÚ¢…@ÊD 7'-W°ÞsðTzŠ0À´Dâ¬bZ Ñ,d¤þÙÊ¢öu²í@®wчmîèSêÈð.àï)Ò9•Ôë&¼iÿAvÆo뛽JnyÁûÛîÎß§ª Þ `on°˜o•Y °hÎv.Ëuß~Uñç´Å#!B“«z¡{h“Ô¨•›ï¬pd÷8 ,|ø¸ÁEÉvÓÉö:jÓ[`ºÒ±Gu°Yé_ƒçù*×Ëà ‘ùÉ¿²U‚iŸ.KlðýÄW´NF¾ÕYÁüÒ¬f­m˜DŠVËû O‡mˆÓyÝOqÁÄI‘„Gï~Åè<™êÉ¡²LöÆk0ùæÃ}…mZ¸'©•9·úûx—>~tÔø,€C?a¬;©ÊÓYŽ;=C–½¿;¶vž’ƒŸjá°$–·±Ï^´0\§Qñ£X¥?‡cY5:¤Î9õv–¦ UGžÄWwBÎtÎ"Nן†>ŽÍà¾.'Ç€¦«VîïƒßSöÿ\·zü⃆»€“fvÓ÷0P-ÛöÔî^2"&oøxB½¡™ú‰<z\<-ݳ©|]Í7y–yTžŸï^kî¼d~ˆ=óÒB.¾ÂÅC?Aj¯øÓ$vûI Žˆ¨­mmàÆ6<¿BÌ}V¤PhJ_{Ë QG“-$1~Ë9zŸh}/… PûBßàB8!&sœ}ÆÁ"|*|" 9½››—E›Üú-ÓúŽ dqÚÉ¡ ³Ê»•{H.ýÁÜB³üM!IøIT‡Ë¨r7Ö3EIÀx *GŽ–7\Ôw}’ÝjE£/F…Ô]¥Ú/‚ÊÊjïRß9«ÔVof`k#¥~{v× ÊžZ¹ ËÑ÷œ‹œGÀkö'â%ßWÅüëÉ(yÝF3!°ä€)Ó rù²|„st»X7²\þ²R?„j>X‡Öå‹RŒ&¤–§˜ß¹u:YG}¯.Ç^ò½W0¢v¶“µ™Ã»Ìv¼ ‘bÑTRdÒÅ^÷o(=Á_~%Â97ŸÂ|ã>©ß:HžÁàõÔßN^”)îAU­Ëª,70ž3Ðy\G—Vz¢y©< N¬R„ðöõ¨°(l9%¤kX~í¿MýiñJÒƒºæ#è¾íu­0b­î™ÔÚØBäZ§Ûo›vÙâÇvÜ´S¾ßk o;%¯ö‰n“Ýk¬M·Hš°ÇÈK â³Ã4ϲr°aV€U2ù6ö—ã¾ó´ÈèÜ ½ÿÃ2§±–åx¸Ë§êI,йßU* \ÒÍLþWÙÝ#½(Ns>æ*ª*4$>”¡XþV=Ã@T®B"÷µÓi%Û…Á¼Ó*Tç~„í¨/ùVEÒжçñ¾œH¸ÆP–© Ê·Æu{â CZ­ðNe$Ðñpc¹· „¥¶ikPÊMˆ÷Åi[:]ž#azlà§V#ßú/uî%—&½ìKÐüÊá\ÌvHæ„Ò‡•<Ô_)%bÆÃ¢#xõËWQG”ɱc¨¾BãŽvÂ0å³Î~æ¡8ƒ$«}./žSìPó þp‰VP[ºÙ¥cL'UÑõy8\z4a±½©‘ÓñPÊË¡ˆ5¤ G´†Û‰ÞgÙ„¬Í¯ÄH~Dq§³‡x} À6¼†IÅ ÄÝ…—ƒúÑOö[úóUÛÑÈ™ð`L4äjK]vf7eܲUðSÓ}K„‡ “‚ÑÍ@þ¨‰7­yf¿9[h.¾3GHµyáYBbã‡_Æ!baë%• W$Û[˜!cÖLI•àÙ JœMS öòaÇ‹UÞ!6‹zܯX3¢žê6ÄÊâJB*9‹<È´< ±ê r"tdë<¯·O(÷aGt†¬çwKB§MYá…}±ä.æòaˆÎ‚ùJüì,¾Ð°AKvH MJö»Ë؈ ÛŒîžkÝÁpó©ö€tÿy~{ud¹ZûkÔXèr¢qíç.wïQ9%üQAj1ËJ÷×emGï4ÎO¾ <å¥*¹iLXæÕîzT xåãM‹ücxX!ï4´HƯÔ0ò|o @猵”ËÂ’d ° Ç»õ O°h·ÊFlóMo¼…˜îTÓJUÓ?ˆaó¬4_t74|Ð!~oµñæ³ÈìÇZN ¤$!i<\»o7ïˆw[¹¢Í><%µš¾n}`¿@Z fß>Aco¿²œHöÞ m0- U5t‘³[z¾4þ¸’ ^_Ÿ(¬bkß<ä„!‰@‰î TŠ"œ´²YíVIDØ(¢ÑÞ^oŽrþúîÈ®r‡yÑ¥¥6“‡qãâÇX°PPjs§h¹Öò'‹çó›o%)º¡¦|Uf+à•uLsâÒ¢°—ð½¢ÒøZŽx˜ãWê ¥Œû9ÈÏü†¶d×ÓBÅoh£s±ry3Ü~tsªP¸ý%T ä$W„"=N2˜bnl6}ÓØ‚ÊÕímU¸ÈÓptärãkšbäoùD ±c-ÛŽs‚ùÚ­Dª-wDßéÄ„aÐ… Ÿ¤&ØF~Ä€áix_N嬈¬Le>WŸÎÓÝ2߯M¯ª‰&Ú¦GMÖÃ**•NZà™3¦2‹¶¢6¢‹àüâRCÔŽŽ±yfÅõWö«5²¯0¯}Ü¥šòÀâ17Ž)D’‡ïã˜=>­X‡Ïœ³Ãc¹½¡ÄÒªLTíÿ>bãËÆö*²4ÌKc¶€“i;KãÖI{k²»Àîo ±1ÓÏ„ùd†ìiv D&/F[\Ép&çí½óGP@ö{wl^½VØÈ̬=uÞ;Y-4û@èaf‹ñlŽMÍ…@{Ž›” ~3@ò7eÚ—Æü:ŽuûÙ±a‘n©ÝÕ™¥£~_'eçôU!k>ÖÞÉ™—eà­fFÆ[%$ˆ®ÞHߊ©êÅ$$À`”uFydW 0 j{ÏÞÁÈO )m™á†ü²Ùg=s @v\”¾GÁpËdS‚;æ{1´s0ʱ`^`ëvs†eb)Ó£qƒ¯#Ú-qµ—eÐY3áÓT°áæ‚2Ü_Äáð`âcËöÿ]ë;ëîCtúF˜µ– .(›¯À¡þ°±BŒõSÔ&ê\«?¢#‡„ùy_*<<¸{Æ%n%†Å¬¶NC•!UÓÿÖN»>Œ9ø%ö( *^m¬ų̂Ĥµ)Ef—‘ÿq#|lEÂæxÙÒ*íí®ÖÅb•W$ªŸãÇ7ÄÛÔm‘Qf™ìÂ]sçž÷çžF-¦LCµ´”ó©µgvGÊÿ¶»µÅ~+èW…$É—|~r\È|BÇ:°7óíÀ–¯‹Ÿ+Ô>õIìÚi|¢-÷_ÇŒ@ì)_Ì$äÄoé‚k¬dQÌü¢êMÊé¡´ "1T¡ç÷·Oyówà‘Œº‡w!vUŠÄgÃü§ºÁÁŠùbÛA…ÎKÆNhmèB ˆV7¿u¦“Ö¸0†e¸a"ñ­ªÐJ2ÓÎeF#˜YÀŒ ·AKgfÔÐ4ú*$‰[{¢Idê·’+žãÓ–K$Áe¨ã+s7ì`é;ü ŸÎÈÉjìä'a(hÂ8£C%ÂѱëaékôõœŽžOÛSx.‘ù„˜«·ï?"t#U´Mg6óY°õ_R˜OËWÐP\UƒÔ¤E«Õîy¢ñ3P˜×öknŸ«ç^ÀëÐcË©'ÖG…oŠ—‰xÓÒÂĤåãõåhô’¯a‹ôÊ!v‘h…Tˆ!± ¡Uº¼tl ™ñ*x.Œäx@KØxTµÍÎnÃùS?É7._G¸ÚÚÌ(¸«éÒ“‡t2zRê¶™œ¦ÁÓ3²nž®˜ÔU)ê<Ú†«Ž”Rç ¯6hÀ­A ¸i4o¤}Wõh íÈxûíܲX §ù×È¢ºDJ0¬úwK¯V‹6'Œ“ÛþôÅéR¡ÙƒÚ3_Þ²AŒ .Ì ÌL³~6“8 ,ܰŒ®/èôý)ð2`Ý=YV`¸8ç>75U\—¤Cy:´ÓÙN:Ûè ÁŽ`¾™…œ’=ö<ø}éàþ=äÐ(n*ÆŒYO.=[¦þŽ ¦šELåô&âäòÑŒöp§@V)½p'~æ;º¼o)¤f…ù€àkµ3î­\ȵ:9 ÷ÐhÈ’õÚM3) ÖæØÑæÍ¢  Þ£ÇB)žÙÅ^à b öšW1æéú0á{À„`!k’kâ,Ê7vž¥„[æÛ¨ÙL–B0Á€èŠÔ"UZ¸›þ­_âQñÄk5€}¥¼ÒtÓ§iøÛy‹¬¤öâØ÷eƒî!qÇrW‘3‰Ø´h‡|·”ÚX«ÿÀë¼} ¿£ÿ%½ËÉE|OzOªâG¨6õsæ7˜‰Úù™n±r' ´!DC(y…ž²´Ú#,³$ȱEÊàÛLgÒ–Õ3x0+–Úßù˜6eû£r„³Tj‘¶(ñÆšxÙ%ä`„…gŒo³âãr{!»ŸñHgfXhn%‘t·ŸÌºïn½:¦¡I?JæÝ]“Ñb˜kPVЩzêÉ> stream xÚl¹cfݲ-\F—íê§lÛ¶mÛ¶mÛ¶mWºlÛ¶õ½{ï»Ïsã‹õ'g"æÈ13r®•‹„@ÔÎÖYÙÃÞ„†–ž $ª(CÏNO §eúEB"ähbàlag+làl P31(™ØŒôô ¿HBvöŽfæÎr#Š+ªÖÆ6ŽU;k;W #s·««+¿«“ ­£ /í?AJ&&gs€©…µ @HN^CBV @.&«3±5q4°È»Z[¤-ŒLlL(¦vŽëÿ,Fv¶ÆÿÂäDûo¶®&ŽÎÿ3u´³Ȉ( ˆÊÉ*D„è”…¶ÆiñÂm8ÿñ61r´ùWvÔçÿ‘¬ þG2ü鬎îÿ‘h10Œ-Œœ†&f¶¿èþÅ›„­©€õ?jcûÿšþäô>ù?RŒMLÿñv±¶–5°1 ÙÙØ»8›8dìŒMmŠv6¶ÿõ2°±°öøÿõû?Îÿð `kösôÿQY8‰Z¸›Ë[8ÿCµ©õ?ý[¯fòŸs‘11¶p±ùO¼É?|üs¢Æv¶ÖÿgËÒø÷†tjB2J’²TÿSÿ6‹ØÙ[Øš”œÿáÒÀÑøÿ6ËXü§zþ æ¿Õ`ø¿kgG w€=í¿Êƒþ_Ï%ÿë%(hçîEÃHÏ ab¤0°°08˜Ø}þ\#GG[çþO.ÿ]ÿ»LLÜMŒ~­-Ûq[¦µ†VøŠÍV‚SÍNë«P-3¯LõÞh!Y ›ë^aß+cç»ÁâÍòì^îHÜ·Ä™ÀOLF„ë,c¿–UšùÖn½+¼5„ë^ƒ©bÙÉ‚ÝDÜ9g¬¯ÊSN2gåž×J:”ñ ‰1Dë—w€#nǯ.<ÚŠQè!gj~ÚìSÕ Îš‡^ò½î­„åíÂÞ`é™V؆i<°·sì,vÐÜŠ'…Ð ƒsz€õÙ¢J%‡'w ¹&,D"|Á$maÁwÇÑ[µE¨0§h®Š½iau@Û{9DM(úÅèøþÑý•޲Q_ï¨%ôômÂ;­A5?€ •¿¼ò¥ÃF2ôÈ~hI†°Èhož©Gßð½ŒïÝ"|ëwäã‹1é‰jùµHÉÒ&)øÍL/?½ÝWä'¼ò¬éú'ˆæ|K’ +‹Q! ˆÂHÎj ÈM·Xvñ) ÁÕC”d®{jæöNYüÍÛíª—$>1xÈ I—|}Ǩ¼ȹwEuT#(òsZ ØÙCÐ:ú…Íчële8xÄ=Øžv€!_^ržn­‘†Hy ²0åiÞé®5/ Ä®?QÝM”iQæeÐ1s ÿ#.Î_¿* וù…o¬îæov¨C—óqÐ Í/9…ïºísXóˆï­|ÎG|\ÉÅ›ºž:ص‰Ä3xD?÷qF©ï(軡ÓOeÌäþ,X0‘3[ÇŽ¦àQ&ùë©ÅË0âWìê,ç¢3PK¢x¸éŸ¬6J[ ¸É…¦õ>Éñ—$êkâ{1-t”o^¯‘Gƒù|³&q¸OØ)#0ëûîŽï›‹‘[ãåZ8d¦q€:±MؚΠԛɨQ2þû¡{–!›­ñ“ôŠÒLiw¯OVõ@A$*ˆ!fÁ§µTh“1dGë¡l[k-!4ûÑމQæBqkXY¼Ð3C™{½"2õÖ+¤¬HVhonÊ,È«c¶'ÒÛ`7šÂÜFÞ °ÒÞÃØáN-×u$ ¥;k‘Ÿ¥P㼹ɰš‡OdÌ»×ðÍ„ ñ!3¶Ôç{%!ÁÃuÿõ‹ÌJ¶Æ/mÆx~†QîíÀžìð»ÊYE ‰ŽãÆŽ0Ï5òÒ­Þ<èe‚í‚·ú…kwEÄ ¥j\¡5!­Õ«@P{ç ¤ñ ÿ3Ó¸ô@f×Ï…@•¡Úþƒý›FBzŸ\#b9ó¿ˆÄ›ºItÈå³ç ŸVÄS ±¹.íŒj¨¶$¸.œp[¹Øïä±'ƒ³Ã³9!üšà$¼2ÅÑ›Ô-bR¸WÉTfV7‘køÛÝ“  ²°s‡‰VÏ ÙlÌí¸TA°»j<ë=NÒMž¨ÑG‹o]n$ÔÃʵÛ|C ç{8ƒŠÜŒù†xv<KŽ©9mˆe‡äs½(#7E)Ëß9AŸLœ+ô«ª9;cyÃ\9h°0<ú€Æ½_\öb[½É> j²õÞŽ]&Ÿ¡VúÆ4U Gƒc7æ<”HÀX©˜1³²ÿéC6Éå+{̋Ɍ&çæ OŒÅç¦ð³Þ—v)‹¸6v)ra‹+Je"4ÀxKT “¸»C2õÏV²¤W~ŠfÌ…èà[¼ºåÕµðw’ë ]<Ýn½²=3h7­ý:ÍbÃKÌ__¼5ζãPå ߿¢=ýîœýtw|Œ»2Ga5'ëK¬»úþÁæ­x}Z~T<» …~¨Pæ‚”‹·«º²Å…í¦ý &ÙÊÑ€¿ì¦¾–#•ýÍzÜÖ¡šã l¥ŽÂX.̓9 6ÏhQ€MíÕѯ·™Š„&qYþ«±îuZ½Í«Á0Úz¼.ËTÏéµ<˜,¬Øü£>‘1=3"P9nÖÒM˜Ù—«~ ÔG›o¿;{1/ÏŒ^¸:,Yó“1îøäËn\‰î09áàîË4Io\¥zG™sµÚ‡ôWÇño¾W¦q¨‚á'c,–s®Ð¬NbÉi.f9I’[CWç]2„ôNÞp;Õ™÷PQ‡òÆogŽfçF~hmsѬÄÊmŽ9}8?CR..Œ¤’Öi©Ò6Èý´uµ=NÏ“¹Ç%y¼‹ÏÍFv†+¢çßG²…=‡tÚðÍÎB«L¿ƒÒ7èPzBMŽ2I‘"Ýï:Z2d.ãSé(ux~›±Bõì걇™d.%æÕ‘Ìûú͉ŸMM)=d‰ù©pBqDÊÇðáJͧì‚~¸¦—u³ÜÝySC>.`Ô+S̬¨¡0,æ­§úµýuÈN„Æ~À¤u¾»¨Ú-–íëZ“=}!ÓŒÁSEƒ? …âçGizªÂ$›‚ˆ1œÉº §oæ‰È%Þ$týˆ ÞY^Ì !0p¥Å‚ÀÜLs4‡¹@ô™‹÷‹nÀ+;©”ßcѦ-c=ŽBê•~s2šÔÑÇ‚>Ç´(HŸýðé²Ê¤"8È áD‘aòÄtÿž›)ÝdTFÆáÖò2ùq®t[Ö8ÆÈüØ @oyæÆ=fwY1Pˆ•wAB ÎÙ{Ÿ7ÞoIwoÙ'ÔÑ–’É$j®¼²ÿ“N¿±ÇÔx%¯ˆyÊM\“œklzüw†Líí¥<€œV{a½áÓnn4åÚÊ›)ÌSžó`31ú §GV‹¶u·›&MOr‘oV)<]º¯”Pž¿ý:ßd½™àÛ>Ý ׎“9øùáÒÓ’¦dß/ÄŒ™[o‰9vã3:’àpC#Ÿç©4^òŒµüxÊ; ¼)܇ã–kÞ@GR÷µ˜â%”90‰Å[“{Ðl-\Rh?Gv‡Ç! Û—l¡²#àÿmÖ8Ãb…¼hKómiZ•V§.–K¨¢×SËyX"Li`e]¦Ú tsÿœëôŠö0®íEùA)ʰòG9ŸŠ„' RÞ€ º/%‡œ³p]à£.7‡ Sp.…þ >t*å øAP´&-§Nä’Ôü“ˆGÕÕÎC!U™²àqG$ÍÎuøåþäÅøîfm¿ÛRN°TÍ¢Dê’'½xv»\æ%Α©'…„u1~/r qDµ³Ltá¶l"}æsºa1ô%E¢J'¸6sŒÝP}ÿ²¡¥¼\UÐôc{éÄŽüþ>îP©ï™}ËX^Ÿ¦‚ý4=‹Žj‚L›µlB:‘_‰þlÖj¡Þno(Aˉ‡|Œz‡KE$M@?}íÒ-9lÒ„ûlºÒ;/‡5¡õÃüšИÜ+Hèd{X,Û+÷¨MÎé×iƒGßÄòîðÜ*¨äd¬Í¦5T³(ãG‘@ ¯„ çCõ0.Öå:‡,ðîß#´rãih0tèˆêün7ƒ8ÅZRÚ…"²ƒ{¤ß™—äÍå‰$<9~¯˜Éo¼kczš*“ÅÓV÷>Ð4J‹}¥ŠÂЀ3¼ I°ïºFĶjÃáæÛ}¤YÑ×ýºm|ÿ•„;çdï9¦®jé'ž[kFOM鋎èé§ŸíÎ|&J]:;ŒÈü“³åSŸ çº ÆW?牚˜üõ…î{„½0_€²Ebôž ¬bŠÆ¡Ü%²é…Vs+‹HbôÇ#ZØFØIpÔÉ¢û´Ñq©ŸÄº’·»K(t"͵„.’¡¶iÌ  Z®áÉÚbÀæƒ{l (‹™Ø¡dUŸâˆõ›O;|ËYùÙøûáMâ†MÐo™G}—˜#¹1ö‰#¥Äï‹ò>CU¹bÚ÷:ÍÔ‚ÆùÚ¥i=ဪh;ƒÞ«d‡à> L? Ê{Œ /¾u™6ŸÖJ[¸ç@;ƒ³ÀDïÇ_ñú,=‰cp•÷ãi—ÓbÝõëákߺnl(÷ÉïÃ[–h‘"·Ke9æ‘”sž$”•>ÅD~¢kÝC„ûª1,§õÆ "èÉ¿AmßÖ {e“—ptÑ¥êÑæHø (æ|¥%|dÚ›ÈÈœ+VК ÷8’Ê‹«ÌcìOì»Vã³®*”ë£ÔI ùœ¯á¿¦DJ=Žß$1°²úTÃ6-®*î+B"(zy:õÞw|¤Ë7´¿'dßË9ÚW#±Inǵi–4ö¿‡6íY(©J ³#Á#9+ 6[€¡?´]ø6JÝ!zŠó¿‹¯ÀNGg\…Ns´vϼÌÒ‚ŸÙBƒ©k[)$¥Í‰Ûvö·”‚äá›D.¹Õ™bÅáe½…—jÌ•к•¸_ÌeÉÜ kC5§ÇÏÉ̺ÔÍEQÑ Ã%Œ÷£†¨”KÈ"ÄA?k#áF/ÛtãÝœ”çŽñþîwœÇk2_Ï[q"$0i»X© «3ÒÎMèãn¦!ìÞÖXÄÍ5wUäñC£D‹7;+MN‘¶·iPÁf°øÜ&‰˜®²‹ŠƒnýÄjkîÖäGÿuI¯W¬’(Ø”¾·óõ/Ùåwɸ7HÑ!ùHè[2½ñÄ£{ÉÀzåxåØÜj˜+eJÐ{C9ævØõ•Ã!¥-¦'ò^g™LÎã›HU5iÆ:wå³àKQ¡Æý°s~¾¼nøeM‡¦žÜ¥c¥UƘbËpŽç˜7ÄÁǽªvÐ8:C¾MÎP×áaˆ52P€ðD%Íì³g¿x š§‘±ëô¡AµÐJ•„àYÛZááapœ÷ÿÙj¯Qê”ûà“Š%>–KCù3ç<™ÒW‘=í_aèë/W½c%‚.ÕHq5¡Áóv*eZ 5ÙT ÚH&¦g?÷º'Ðȱ;TcqqÍã§]oî®z^é,ŸžZ\b6®ª¶&{ܵŽ\ü`Ï 3‚Õõ€‰æzz/™}7,®ŽùÛpÑ–}æûÎ&ü÷7G¬i²ÎYg"£"xa¦9yÖ|¶6Omy@NüÌîkÊñÌÑê\–®Ã£¢À$JyβÌS„ л‚Zž\ø”2Çá,Ùü…,X›°†·DU:|h ³6„çÓVy|0qáÅâpa´+ FijýJo˜’öt`Ú“‚z Š2 j,¦Þ–áà&²­¡ˆ“±°N²¥¢Š¿¾¯¬MN5¡Mðú{¸ùwŤ¥ªœ ïòðÞoàòO<; ŽÃ,®8ôýñ!ØwŸ¹¢×ÉfË %£\l ª¼øAKôœÊÊ´¤Ù9J’Ã#bÕKQƎϪ8Ì,¶÷ï¡›¸?þ±ÓôcÊç`wM4\ ùåeÏbì?3^¾³`—<÷ŠBªe¸\ƒœþÇ fš~ˆl‘`_µS ã^/:(¥Í7PMn2è¡0ßnLAÓ;Pô‹€>åN"¯§ñ¹NÉïÿ„Ù톢%‡Û»tJNö!ƒ½Bûº0z#„J=‚j“v7Þ CFº©xüè)%¬)+¼Ë¸í³E‚¶Y`÷FååbMzé(’SM.v <©Œ'Í.Œš/"¸½8 ŠõA/ç_G”D”êB0Ô¤u/O1­øOÕì„8I1³Í¤^‡ÁAWg-…h.)Ÿ>ˆ¾3kú<0úë^þn›0 ïD4|ɶ +L¬¿û!ætes˜x!AýÂ?fÉ~ƒ¶øUªšBÏ¢ú§×}Uò4×-D±Qxý‰G’´0ð€úÃÄÊïËÞyÇCÃ!‰Þ3¬Qá"]“N–åOýfòRø#mFV9ƒäìµGéDå:ý²ønWÐñÐ96e"!ï¡•¿2šVúý r‘¦¾¬;BJ‡÷Î¥O¤øÈ2FŸlÅEú|y_üÂn³¾%û³wÃxÅ—;5êxI†‘$¶ÁAô竉KkŸå—$T•„Ù²Ct’³MÒ.1&2<ü™ PCÔ´ù0«½bòÚæîm bU½é¨& nÌòu–'Å36D}ül‰B òçîK]`øëZã9Nq*Ì*G­ n¸Ø2Æœ#LwHÖ*”R N D ,Ù—HóöaÌ@§UÖ%ˆàˆfJ‚d¯!Ûî¹ ²´¶¨«ù“!Zé ¡ÊVy< TBC( œ-ç.cpÖÞ6èl4Œ‹Ð¥O¾ÃDo×E;ÖË«…Üœr^)ü‚Ù)~ þÄë[V[H««LåËÖßûÕ8fùÁá+; žp5?Wɺ$QiÚ..<ßÿnSòýÉ„åJ&„¸zÚ£KnøÇ&]Ùï²–(T°Ð&ûXR—s—®}Å çØY—Äv㣇º Ès• 5yçv³‰Œôo¾tF{-Ÿ§Lýç¼rSäpVÝõCáksßì/]î û!ž£iÐÕ)&&çÇÀS"¼±Ô5«<`%yHkèë÷üEð´7Ysy+tÉŽ®Ô5Ù'Ö9Þ˜ç!¢û¿.@1V/1Ïë(—õ1_.Æ‹™—·«.º³lÂÕÀ š×h^x(á¾T›š ùÜ죑u$Lv³4ý'«åw»¾^Ox›k`TÈü ‡&uãп¤Vü Ax+’e˜ÄCô ˜|³ìi¤±nºH ˆÜF­N3 ÔÂN*JðÁ!ÒP¹#dËmγyÌ‘6 ¾‡û¡PwpÄçMß}k 5ß)q·1è Íáu_|ì”7ÛÁßGé§¼‡À9Ï(N,l¦bD<€íØG6=j;†Aîß$ÚL=øˆÓÉVêGÓ*Ë69ðãm¿Í§SÄZž:ŽÇXxò2 œl<Š;pÝ«Ht¤±vžÿyI/1¸Û öN±¾ÀÔ`ÝÌè5õÇ&ݸõLQlÖ¦]¡¨Úûûú›TÀqZæÅ†C«À/¬ã»?Š88µm‰jâjœcKøq»ÌFqÿ¡XDÜ¥Õ`:Öfø:(µ X·Æç–3[ ^µ5084ne°;òuÞ¤!Ëe&DØ·@MèÁþ$Z?æÞ¬ðpj…¼úDJïT¾o•îÏêEoߺѪ%´Á¹>Ò+·1aÚ°5ÇòÜ(a^õðÓål Äý€l•w Ì‚~X“à‘e™âO¼Aioô€çGÞݵ÷óš5Em !B¦õ¶Â •Ù9A&«jK7ü9EW=;Ú}ÊT‡Å5ñ<¯Ã¤V-µ+{±ué e@K²¡p¸œ$%Ê"lª„ª79–Ñ2b‡\1VÀŒä«SVH‡:ˆòh£Eiy­ÿØ%3,UÔÄ‘ ÷íÃ¥D8¹ù¼µÛ}QI¤ø}K8BásRú‰2|‰ Ö ùGÌeÆ;˜ÙóiFä ß_?¶Þn ‰5E-NDõYiÀ×ïz•_Á¿ÎFÿšîÓw aw– žÑX<3£¿dmÚe^Ù‹šðÔ‡X¹a’y¢:T¹»Z,D‚w­û=…žy [7­ï“ nà%Wá‘«1?‚Ç–îØbÑ„#ÄJG½r­ÖÎsçàåÙR5!l2¿sT¦N•f'€Ì«]÷tÐ?š>°Û‘†ôNà?J¿¿uW=ñ½* sWOîzl¸"èø]Ÿÿ²å€K`‘sÎõéœñ[ÀÃÕ¤<ÙÁ7Šë®çìØÜÂQ*°¯g`äÞ±ËH%°ÛŽŽ?Q‘Œc ð²Gs€]ðÇUËàx™ªÖ„NwȬ5÷±a„£€+¡xÂmŠAa®`øž“îY»Ú¾º6t‰ç­€_í•è”â¹n·37ádP£Â©ˆ@jPüàí2oÃ{q34D2Bo‹©[ E¯{“D~.=ÝaÙ¯|V)n&ìénGOŸ©È•ƒÑËKù-jÒ|)bú®³‚ŽgeÓêYR ËêøE ÌD|ÉT,˜÷ÿ̮ަƒ¡›¦û2c/¡íQËå4H‹x\œÝ7ì…N%LÇŒ óù1ëÊk)žhÔ3 ÝÁsW]CýÕÄOD› ëG«ë rN嬢€¤1:ˆZ:Dº_K4·Ù÷ÐAÍÝ"U|g³iØø¥«ó0½4U ï[ë%‘ËÂúÔëOžQô=ìËZ˜PÁR‚ð불XG6Ó;i1I©Ø ’/ –XWÓcƒ±o†¢ž(²ÃŠ/ùm&ú8«àDQº}?8Áx®x^l´{ø_ºÞóz¢k–қǽ>(ö²°Ú2ÌE0—ÎEº‹£¥…”Ónà•¯ú£¿@Û’íÞXõÝ¡°ðà&Iµ-‹G»¶4•ÌÅdeiô• £×ΰ t%£|)œµ|Ï!ù,sxÖM ¢!c58õsÌjþ^ï0) {µÃ­o;EUŒÀùdx¥V–¼ŽL{¿¬U«TÔ‹Z½ôR›zï4 :M¦m3g#ý@å·"E´Yh÷=Ðiñf`‡Ù), .l8ŠA©›Ë÷z²¼Ò,Ñü„×5b—ØsÖt@lPpgJŽ*Ytiø9«J$¨†M„ÈZ³üB:\¦Qåj°«0­y¹‘·E‚„ouŽ‚D½arî½fó©ñ  }úƒ_Ù:°ò*þ[`—Ž“`€ cÜIlÐZÊ×›ž—šz–äìÃ9¹ÌUñ…ñîM·é:þ×c¥¿íu§qþöfjW݉e`ß ©¾o:è§‘õ˜3X|¿¸ÆÑQéF!s±\¦EªKÃKgoúÌûÈø¿ò|*ѶMûÙ×î ÙP/7áN(«­xfúHØ<¼± ÏW½n—a~³ Z½(ŽÎ¸EZ'4b‘ÖtE~fí„!VÝê…=øÑ£ºYYpB*ÒGê·ôá[<‰E|¤piöu”ªµmÒªöVg7B ›ÜsMC®#«óap/òlS>AaŸ=g…íüÉ…U%#ÙÒ¯c£…pꨑþó[¨}W°b¾ŒÛì—@N»þ"Äà‘¶hqb>,Š ßW7/f{ ¿GäÃL”NÎ}†`Lö Á‰«tļ^…þ¼D`®õpµâ…ª†ƒô@illÏðéjD°…ØÅƒH|<²'ŸVpMô7²¶Ñìž`dÆþÖ’Áæ&&±žõ¦M0ÝNħù+JX̧/"bàäb=U[É›M–µ°+¢\|© pBœ.X*.uX„ߎ­yDÄ9Ý8ëÓÑ_Œ ²õMæ˜øÔºš…ðrªœ ¡õn%ó\ÿ8ùéJŸÁ^¬’äüÀ´³«3[&¡oo»`†¨r—'jTìW.EÓ¹jq¾µõ ZÐrËï$¶z9 b*ß.!aÉt_)´Œ]ý'åq¹¶)£;ÐpfÙi*̶ƒoKE¡"Ž)œ°š'Û-êó‚¶¹Wú¦F0W"ÇÀŒÞ‡ðt»d%•qÏOâ-*ùUKºt°QùûåËì¹å`Ñ{r>š;©ÿi\†—Ölr¼Ì7Ô~¿–4׸çVs ”W|Â#Ûü½7]/‘æu ÝüûÙ™‹ipÿV/µc8틪pæ.G–=~Y•·¡‚:‹£˜d5£½|5o:À{!<kõ\¹ðžV¸!%yGaþ¿¿o™Ÿðý¨âbX•e’å=6ë¹ßí†?qD¿ò§ý¸/·í”ô.*ÄÉž=üÇé†-&Aá-áÄM[7 ¾¡ªPQý…Æý,‘0Â7Ò*+N곃âg›¢äÕK‘`eHì0¸ †¸¼;ín$(7šñ%&xÒKÓψ+þ Qòèý‰ó°ŸÖøq>Öb_‡zçùû»#Ú¹A™`ƒ//T~Y¶ŽJÀr£64.n7Å‘ô}Á•VÎ9S ›Q¥TÌŸÌãªPÚC™éÖ‚–¦¥û‚‹ø­ÍÐ~*ìî׿®¥"ގؽ›êÚHÂíŒÀ­rÛò"¼¡m¬f=q“^^Þêº+^£6ñ¥1  äˆüö5—£«íä¬ÖCoÌà}sÑv‰RÇð{lÿ _ö^R‚íÜüw¦¹)ôb3n(Ðø°–±¤_c ‘’n^-æ ön~‚|Ê”†ôtQXc/ç§òÔ?ùÝ?)%RC˜4srKÖ0¤&¶_1ô'%¦™?‚÷R`Ùç"÷+é¡CHUQÝ¿ï]på8导xáÚ t¢z§iëó®ÊhIŒå‰FˆÑßåÖkóЛmŠ¡z«¼€Ïh‰D}¶è=yÈñž˜ØýPEŠa«Âž¦t¼Q> Fœld `Ú£õá0?ÃD÷"í1|K ¬Tù)Y÷ž ávXžX¥"±Ñ`w®~öþ¨â¿ì2A}%èqËãTâ>8¶±|Nʉ?^5¹hÅsÊŽÂ^àlÍÝâ\››Æµ—ã´ˆÏ!Fõ*üm[®uæoêú=°¦ƒž•žs¤Yq°] çÛ4pÉG„žÕzU:’7ü#?fÄÛ8v²¸Ï'êÌCÖÁ‘A¶*y/×#¡v.Ì5ë!Ñ0ÁO$œµä~—¹ÏJ$ìÖL¨2ù\D¡Ñœ‹:Å È‚³æÝE1w¡cÉÀQJ;(A0o>»óW1ç«@Û5뚀>0š¾wGÝ\×Hªt8ž‘ö£0D†ì–}&ãéηªz¡^M´·ýUÇH¯°Çà÷Ä;Ž*II§ƒQi¨½)*ö>ÔW;>š¶MŒ:Ð æwÑ¥Š]ϱô]?%Ä£­aÛ×Áß‚3T‡}ÓŪèŽ_Dbbx›:’Z}n°êPm„Ö[jW÷Ôî¿Äü}­ÅM[ x5!eÑâ¼Ã7äC£œfÿ“ãLȯdõ~Ô3æÕ)D_—Å£ÿ¬ÚbÐÁFBÝ}•Î_2—Ä2† òªl.k†ò§{ûÞ ?ÜxòMeà°(Dbg )Mxõö>줰‰)õTÉÐ/4ï;©ÛëÛ1-šaÛUé^×ÎHç¾`ų8þBЍ%ÉÝÀ5‰€Þ ¦û™¼—Æli.ÜQo10‰ôéfB¢eùÚÉ3ÒhL+ëS'4®vêüó=Ißýåhu-ÄV[”:Ÿô"º6­'‡ [¬Ð’»ÝËà#&–¤¥gʹD‘íÀab\ªâӎ˦ðÖ®ÍΟ<çXQ£G”%D6 s*•tv™økÃÓÁf©s8¤òêÇñÅ“Ò-‘8— а{ÿM7qüsžë5¢ Ñ7#)xÛv!¬_¡U€ßÈÓC5ªéÌïAµ¡›©l¬Íz[ëÀøIãOª'Ͳžê§cP;{NIN¹§›4:ô3¼;-k–rçBÎ|`¸Ä[ô[„O Û ¨Ó¶ /º…nGË(i•¶}û¾ù]ƒÑX¬AºÕsdë7ß-îpZ¹w Õ©OÞˆ¤ô(d3©Øpž@Ó&È0Ö!fþÅz0û6#Ëóâ©’€~Ô±EÍû’“›hl|“ÍWáÂÕ’ÉJÖ=‘ûƒËÔ‰'Á´2¥~¿ÕZnéÊhÀÄbÙ©C7)9],­UËÇžŠ²G83ù†èkàµu¾\ÔàR ²0HŒœ£AˆV¼z{»hÏLí ×ñyQ´³ží~ÙâTØW¯6úlúFY“Ì9e‘7;|úMJZ™§ˆ|ü9aî’k#R›W:‹öj9›j¨×?±¥H÷Ú?Î¥4ÐÓ ®O:ö‡IŸ þŽ\Íã²ùiC²ƒÃ±Ö:’ñ½‘ŵ^84Ÿ}ÖÑ;ËKO´Ãî7ô&ÿ¬úC×öooòÞÇ`!gÒì³Gгòq”“ä}e†0 ßeïtÖÕ“—ÞÜzD«o¾H0} Eÿ¹ÌTÃ(­›¬\{…»ïÛGiÿTáÈÜad5…3Üèd* Ž32Ñ<Éà2Aú½Ù4RÐÒ5Kx»WZ´6Nk£óJûQÌhÌ ~ò¼¾X¹ëQ&÷hýŽI7oSütª,hØ™`’óÑ<ÛOß™'ׂ/]Ñ;÷n™R1ÛÉõ•Ì_Ã@(:/§ˆ•Ù~ZÌÉÓFæâÄN‰ƒ±ÉlU2dMÁNw~{ý2Ç¿•7S§E\Š6òV°S¾&ît²4»ÝU/n§ &õ ž[Y½mÒãT¬+ئDÅ•2D^gû`q ¥KÊLÿ ™ã£0”o_™|©{òæ"=‡wl•0Fpö“`kÕ«‡EúPÖˆ'’¬³œWY?Á‹9¡Âù«¤[M@ÌF ÌfnQêoU¦hùò{®HçO„qt•¹›€‚ü8­äý)I•m?¾ï~”Êú¥›è/õÌ7IyÌ.¡â£§]@’<¡ñ† CpÌ%šZs¼‰b'ˆU‰Dú*êºÓãudY·SÑ;zäŒòän [! eÉKúÖô7AŒâ÷É#^EÍå;Iþ4¸R0£©ã±ŽÝçàà’e#‰~«•6ò_6B½Á'¨òèýÄŽž8B9õ ‡5C?5%&ä3Êfc6€^4ÕPÉßÊ•_]$(M*òFã=ÈÕ «¦èaL¥=W¿[ù‰.mL'ùíwÁ3˸-TšŠìnEÆÜ}üî)€êkk˜ê|³©Þ´]ßè ° ©ê”ÝnµÈ»ª3iK’ëLý&ûN”0ÍÌéÕÈÖà'¸±Â‰Þöa°v²Lô#wëÇô 2\µDò²úRUU9•ƒfs»]ͺë Q/´ë½…j2HkR«•Åeobüõ ØI#è ¦å2lC“»n©ãì¯X–hÈR¡°hl/I[¾ôJAÞ ðt”|‘¨êæ3§ž…aÈCg±´ÞÊtv9馹[C,ŠÊÐÜ›Èo*WÞíà¯Ózkô³Mii´-voö’1¤qÃãœtdz2ð b¦ W•xHu«®3ž°ð×Çø,B/p |ì¯Å`úÁoO°keÛ­®eì]kFÙ¹ƒ}³Á0Ç @±ö…Þ¡á©bÍH;”¹ú…UÇoÇêZ‹de¢—Žwàè«áö‘D]#gù¬õ: Ãå-&Üéº;ïî4£¥ (Mí¾¡¹>‘`‘Ì!‰6ûS!Ü)™²`5÷VQùy ¨ÝPò¤Ð0µé-ü8u% @­dø›¶!h.[Er. ¥¤ÚáÖo­BÂNmž´¤„~5~ ˆ å\ ûnW´-–>MH¾ÛŒ/ôvKlþ]å!xœì·÷ÊR9Ø}(Ptƒô¥ˆ5§Õæþ'÷G§Q%m|ùÛÒX1“ *_0Kꡆ÷wþ#< “)®pûãFÅ[•™= ¯ õc?çð]2TIA~¤'Ö<ÚÜo£ønœå%Öš[1_êßáç´çyŸœüHcëÖAhOÿÜž½Ê)G°IÁµáYÁwš¥3ê}µëŠ(¹d| |1 Ö x6¿™õùŽ"Ï‘œõ(ilb{_¹™óÓpÁOgà'K g;‚†K%Ü  Ú6l÷”i4ëuÌå4œêÕg1=§°iGB·w ICÄYh²ms{&ñ®œ¼L” Ô&ÿàð¿â½™½÷YP‡{,óñ£nõØÏ•3ЙÛ#Á‹o@=‚)TÍwØeÞRáéì»Î1¥ž²ºP…0qŸïßì!¿h6ËàØÉ/(v›7PÇ®OoŠÓ2Ž…cQr_߯Íb2†þ5t,s>ü£f†eŽ0ä»ó{bT𵛩1ÁÒó@€móë\Ï{fvv{L÷±Z¨¨òj:bæ¼Ê0Œ¦.ß1ô ,±`ÕK±¸ó€ìÂqIZ"¢2eDPqx:Ü¡9³Ž:Ÿv=½œçº0Í]2x†åû:N“¨ºõ+ý¸ùR j‘ˆÚ,l'ÈcÁóz:ÆGªüÉx¸/Dm fã÷øHÑÝ 1êïà¼-(åI0Ž[çªF!J¬­é“IoJJÁ©ežd°¸X’™Þa*¿ß#˜‰ eY3¶¹Ø, Ç¸æd' ÚˆÜ׸~ŒîOÈ'úqˆbVgU÷í>[\¯±„³Ïýd2þÅv‰ö8QL³ƒMGŸé(±Wg‘hú;H‚ü¡÷ÉŸ¤À¼‚"͈Ѐù” sRÜZŸq‹®J0!óšå"ÞÍ·Y; ´øô ª©Í>¹‡¤n2žÔe¯ƒ¯¨ 9a&8Qt­YU”ìTÝü¨ú’\Ööø€‘ßñ7T ÌjÉ,Z·h5¯1üAèŒLŒ³ýMòl(<$KÞÈ}YÆ5zÄ “2ðw¶‹WµVžc¬eZ ì­4ò]§[m€]Ú(5ùÂ$g·@ò–dS¹Ê5D¤O¥¬jI^‚üšw{³…lãÀ3n=Ðvãñl€À²ËÎÈÏäg 4®U ùÁ„$*U¨IK¸õåe¼J%PrÈV?ek<©ô^r´çõ®•@]šË…Bzô£=UÉü=Xm¾©Òy£“Q²òݬñÓFYŒ$„0–®ÅÙZæÃgIò©Øæ‡T|fƒ,¯Ý™v«Ýàyör4Fq†é²ÖÜ‚^ k\/>ÓÈd8ÈÌ[Íì¤Û·€ŸÌ¡[d#°³T9:ÁG~ÊÛÑH<Íp!§ÃýËö„ÓùC«5×.½ð½âƒ~l6«LC {U;e|œ¸Mmà¢lÝy ÒA¾é¬å¡ðÇi~Ý¿ý÷Ó¿mƒ›5|ׇtÎ;wûÞóídIüNÑ8; [3-ôûž@);¹$“Ó÷0NþúC|ÆeWèg’a¡ ß¾ ט· p™Y;ø’ ’>º1Ÿ¥=K5ë¶Ÿ*?’ȰøqˆƒU!ÂX²%£Üç‰@¢óSAµ(•8!yB8Øö²ï…4F/NÜU¡Wﻎ\úxmSÉ` XàÙžÇV˜Ð˜…žþ?“-ÓÿýïìÈl䄆z%{»7.®òPÓ5@"ÔèL² iõÉ€gV8Ø0,lLÚ’€“¼Ï:F#·Þô2a¸ƒÑ:ƒWnN^Z#Vjñ,ÁØÑ3#ØgÒŸé{J©pyÓº>oqgØe`é;£Ðÿ s|ÔÃÈrôʬ6?˜B–‹S໬ é1‘'a¡×z³¶ë5Ëm7@šcø*qÕP ;¶['9P]œw*ØÝAyÑ7lS#c!•ÁDw"õu{Clmu¤ïŸ/8i&Rz÷Q¾‹D{9qÍŠW›)æpdÆWy†€kÿvÿFK›j26¿è}J§¨å'ÿäO]Íûåvâ1"[•à s\B T„nëAîDÅ‚Ÿêý¸!MÔ Ýz<ò7²±n{T3gÆðxÕÃ… ýy\Ç= ë8SЊ2ºbú%¥ôþêpÜÓù`+˜-ÖÁgÒhª¾ýT&IMfy}äÊ25†ûÊ@0-IÏT­J—Ž+àÄ$®UÒà%Ž?Âã© ¡Ðt<'¿*û‹¿_‘É–¹Wér„[ègNädò7G$ù`Ĭ\Åå /)²Ê¬` ôìp5}³|‘x&Äù&çÕšèÂY%'†Ç Úž¿‚:Ì{Å™5B/¤¥¦K¶èŒUdMÂô"úç`Œ&öš.(7³Ë·`ÁƒN–¹Dgü~ÝãªNp’Á;ýðWT‚Ùîë—ÏÙ%$>ÚâHÕx>U•Û.²W¨…ÿÁqˆ>š¢tD”þf'CÕ””ÍæÎîéŠsÀÙD:§ãM²A¾–Ù$öÉÓC´” J4a”~Š¿Írsµ^nh6íø3ÓÙ»µÌïdôfØ¢°=¸³Â0rî×ì½ÈÌnqîàlo¿6èå IB¬·\“ÌòôS’þ›úÄfxõ‘ÿëF5fpdÄ6ûÊe;õ··ï¾¨#·‚ë‡Ü*Ü)óÇô_ ¼05Ì–2#–ž‚šãçÀÁõ½ú™jr¦ÎüÆåÒñstÓ똘…sR“Ì̧â¥Áï«,3°jå9”Â?ÇAx껢N·7±¸>ºeõ:6k‘å,EJéÄ;¿2ñcòöª´‘9ÒèPÜuf9ô\uÿ®=})|äl¼8”uŸ \åÆâš äTàn¡ùÓ¤s–C'h4”«]^ÿür)ÃN½+¢5þ•Çýó>i2Ìïj«ý{ú`³•o Ó[Xìä »¸;YÈ/ð`o¨µíšç¿Ìò¼kÄh·ÂÉT¤6Á¨i—Ÿ£èi¥úTãûwr{¼êñèÌ>­,@‘ ŰD@øï fåÄ·®ëV¡Õ*%·ˆ‰žã~ ´¾&¡¼n.C5ÌôÙ½ºQƲø]t™äræ‹óI[yÓf@šbµŽÀÈZ#GDµ,/l¯¶Îï¿ôM©*ê[×FÓ+Üê'$Mˆ2©ÉCèòámq# ä°“‹y4 Ë !†2XƒXjck$æSM]wˆ œÔøeG4/ëφ/ÅhŽüæC°µÇ®ê€~Ê4kmW UÒÖAðvÊó¼êží}â°µØ#1öÑ£ÃeBŒX†“óA&ëSmç"V5qh~¨ìãmY?ÁŸ²7'c[a‚0H[fÝÈ)†;圤¦eàîLqp¿6ÐÃJ2BÅYÿÅû_AY]·c’©B¶aÞòXÝ·LHª?Ãþˆ·7ï£yÛÁ[8ÄàéIä—~µ?éˆ/ Âôžr¦,'@ã> JÏ>ÞêU$Mܳ zæˆ ‚8\è»,”z:2‰sf#‡—ÁgÒ2ƒ$ürŒÙ=ahu*þûSÃø-1ý•Õj}<‡NŸåÎe5‹BQ[r&ƒØ¸ÝþŒµßâ!Ò`>Pÿ‡gßû¶V•¿ˆp$Šs\ÓzN¬˜ðç›oöw•S~ïü³XÔ;ˆÞ2«”ôÇ„ÖIsÿ_ß´$ €ô:ómÛ¶mÛ¶mÛ¶mÛ¶mÛ¶}ö¯½Úó}Ó•Nª“äÔ+1þ.ýÎWé¶.ÊSËÂÊÕgI¯2Ï­®ÏïÔ±Ê0Ã`\ø <ø=iJ÷㌿N4Sr•„==— œíiíWë±½bSáÄÚéFn=‰ì¦ðBv+#Ó }ùõ³xDçá¤!y\“ŒédD·˜uÄv½‚z‹1s‡Öûʱ2ª\%¾–Æ#Î%æ´ìùÞ9XLtñäâí3¸¸ÃKGOÉ5pGtŽ_ÙXìü£P(£'n’AáÑrk/‚°Ý†ŒŒa›œ!r¦ú¨ƒŒ¶ÕÅâûŽ.áüæÖ[îEO`pùLÈ£Wæ#Óæª\çOÞ[FL©¹]O̳°ÆúÑ>…ÇeŒÇTî#_ {#€ùÑòtl'õ‰3w áÁ:ßÀòjzpÂý’{d{þÇf—U¹~¨jÚi(ŽðVÅ S[t «„€é\M= bÁGÎæµZ­Àñ]ÔûF`®@ÃC»½¼nEàŸ»7á(«FÆÒSç¦"ßW{‘ÈòšýœÒÿM¹M“u76˜Ê7Ë]aí±…a©’RÞÄïEý3ì%€Å,*–WÅo8ó»ÖA:qÝMû*²ó'"&"a3êáìXn«Îœc´8WdkÇI‰ÈQþì%Ge³Ìønà}ƒtÓvü¤xÙø¯±gÆÃ‡¦–gQ+#oî³'®°J“ºB{ëÓQ5L@ì1¶óÅl`ÆÏÒÔ0¢E£Pæk‘è%XOO=œHÿÓå¿æHh­˜Àx1‚,Ãö9^ª§U®ÙÚª8 íñ«‘®$‹màÛ±Œ'ò|¢`åÌÝK¨á‹GcìΘLÉÌA.#ˆ–‡º4V”C£1ÅÎgÛ¯a­cÖzdÉŸ!_ÉÿP¾»ÈüE7ïdëû,ÁbEò®óŒœ¼’Ò Õ/ öŠ7ýÛTÓ2t„\˜%ªbè‚¡úô¸E_pÿËš|ýŒ{,‡QrÄtÆ–w—MùfYH°[™kômH.x¿ÐJźâ•à.‹P~L£ncÍ6Ë m?S°Í—c”-½b¸Ôõ¹Ÿr,Ð *pQ ¬Z =¢ÿ(îmÇßuËRò’¢´Ì R¾Ïñ1¢À­¤û²j¿ðÏf›Â .cÛ½mÉ“3&ªãRv¿u$Kn»¤Š—t¼¥¢Br›hßf],Ù=˜ÝA4&sGÀ콘dé"MÛ’þMså%xÕŽžÑ3`Jcõt ߣàô–¾-ãĘf5²#o—H&àƒu}(4‚Cõ™à‰(N}ðþ‡ÜšÅRá>§PbÛa™0«Ì:½Õ ®/ÁîJVRk©¢¥ÖX$Xûž=ñ…WÇ„û[À¢Ñ [ƒ>ß»¶’`ÄÏñ’j]¢”a—ÚúYQª¾s·ÖU¥²–eá Ê”(G%hPJÄ…qæ3]ÿ v4k#"‚£TÏö”…j*aü%ê¹N¨GÐ5^è;]J…*a›ã["%ñmj7ÀÔç·›ËÖ¡ù©bZìšMÊoÙ2ÚZÐßÈ‚Ä[R޽dD6JWÒñ Ó3^Ôý;ÑLêÅWtRI–¥úWÕDDä9˜‚#VÇy‡V}g,þ䛸¥¸™†œaGÏ®i®ÁÌS¶í͆ðÛøgG@&²ð7O§wXƸĎm^üyb[üõÈŸ5£I¥£..‰z©ä <úu Ó#$v ·mƺõ/ζ"¤·c²‹Äû)¶œcËfN:ï.=E /ö÷øè®\«^V4â¹9½)ü%Vë¾uô³[ë9ÇÏܶl‚S_2~Iƒ¤Êª.Š}ƒ$ù`—Ü¥¶¾£Ïj|KͲÊñz$݉Aß W(ÍË—„¦éÒôÙ$ÞJ<õ7¥.ÚÃöºd‘5ULÔ+5I•¾ÕN[¨Z=r_3Ð_ý«] eø¥n¶IV8øÎl[h¡›bLöÓ 8ßrÿ$z¾0„ɲQx_B¦ÙðÓ*³ÝG*ëäûü°>"â¶ Ò\"†´—îjgìØôº¦Ïä6ð|@9Îï6ZѾ;Îaž{$œµì!ÉK*13T†b Ò`0äËoÙ“ŽÉRãœà¼ º";¡“žÕO‚ǬtŸð˜õeƒ–’ ¡ªVÝÂ51ÙF4Ô{ƒD£ ß­‚Ä+ÎÉ`Ýw_› uW•r  ûvüÈC/ï/.™¢èšAÕà{~’×~uøx•=ÛÛ–ñ»¬’ð‚ `§\¶o^̤XÞ„n‰‚DS}W°#$Ã(êD­X=ˆ $̈>FŽéžf$Ku™ZiàF2æX®Ê1kŠ‚ lCX˼ríøŠ!Z¦çÒ„t^•"‰Õ~-2° Áz·³˜NöWþ,ÙKö€4-o…2ä[j.¼¸#d­—Ã~oXô*¯”©OSj¾¼+á]-nK†MžZØí}tM¬IÌx"¸¡¹µU®þ3ÑJKPÕö#ŽL,{ 1“n?ƒò¦Aÿ†ÉÆ‚ºêyñØX¥ÚÕKîÀubòaã¶0‡cä¥/ðÂS”â¾rÎj·UÎIĈð{[D7rnº€ñ L•í, —lžmCžuVV‚s{ì&©÷ î†…ý=¸Þ“FÈxR¾‰ô‹È••€Æ°žc¯2òFW3+b€Ðaú'¯³øUG[‹p²uM¡àã{ûª—I–¦q,ƒHêâ(ÞÀNQâ˜ÿ7ð‚"­-ä}øZ<|¢ç]ÖG¢;­Êÿ>d8Ôˆú¼¨äe#ÎbÈŒ7Cÿ­XóàÐÒï}Ž˜§9!Q¤t¢ƒ¤µ<ì¸ÔÁ`Ô~È ö'þ¾.}vp»f¼ò¾q,{ÚÒ„gÐ3O­¸€re5»Çñåºj ²n.‘ÿÞ˜ È™4›Šj4Z±ÆP!2WQÊŒ’?µt_º¢·æÓð¸qb`¦·ÛÝž¦zÐŒ>jŠófÛ÷Øp?ï½Nq3þ Ev Úúé&eжÏ>ÑóÈîáxDë™O-@s:‰ËŸ,C®  'ÎC=‰S6ǸúpqB˜sÛ"i¤˜-xN~‚/³c¡“7±|»wÑèŽ3IPc2¤†¾]Ôâ5KàfkGBæû옧H=[|]n» ÚÓ——+Rë,Ã4L«Îͬ_ï~9Êc¡¼üÕð  N¬öMMÞàR48&– É¢–[2Ûž£¿Y†7$Z dE-å…åç@h@•üº‡§óľÆg±Æ€ÝÑ„.ÑäâBåJÿC,´”ÝYÑŠVCcŠàV6„ÀË­¼Ê“”[†`Æ>ñ¿²¬£¢øPf?Õƒx& U•[ÁÞ<Êlƒò›¹sÎv« 2nðK•rü(˜Ó¯:ëE—ûÄäŸz%U„ƒŠÍ+@”ãlåº.Â`H´Ò‹ïE€ª(9ŽÌÇJK\¸¤ÀÞBNÅê„›Q_î3Z&>ìXU\›nšQDÚb\Ú|Ä&® ŽKuúˆ 0ÏÜñÇøM״ɼãZšº:E÷1Ÿ  Þ…Búb>H*ƒp”¶CÕ}‡¿%ˆZ´ )uŠ´ãù“xŒƒv4Äi¬ÕW˜èÈ÷ö²# é–“n$f4&üót?l„ëøØ¸ö<,7-‹Y°ø¿Qmö‘/\ˆ|ÒÆ7=\VqØA…èNÐpCÎ$Jüƒ±nOòÎÊaGB³8ßœ;úM>ÎÓÒöTùÓm&Œ!ž Èh!£÷Íͤâ$3?‚¿í@>$¹p·4dË .úò˯TÔ« m #­KE—µóÁ•ƒÊà½ó´m«õØÍ^3# ÆgKðCÛ±‡|µ—ª:ÕM5N(&f2ŸÑm·Mõd£t?>NkY! ãpÄg¾±E޳} '¾?ñbÉá?m+uð°Yv‹âé¸Y¡qyD"Áb™b½©hÓ1½m¤ Ü)¿¶_¥kµáP¹Am¦/«ÀkÇ‚ëþ¦M±hK+0ÈÚ¢†º±y[ô[îkÚx7šç¸oßs’³‰$ãp,Èoö m8¼âã*²·µxE+§T{¹ÇÿZé„INm]˜Ö†‚ôêÆsnÊÜ•qoL˜€‰vñ¼MÿÜ¥ÉD¸¬dðŒã¿^ÅèÕDa„HˆÐ$ „p¦@.´Û)`eNù‰ð~ÏD̼W½ÁSwÛšCþ׸É&@mEï5ò»ÝŒ7S/˜ —3®LE3=oû¬½¢–šã¦àïާöèbö< Wýº¨<ׂۙa¬ù_2Àå$Ÿ•dç%]o'H¶`Xðï ¼¡yÑÐ=xO_ƒ;O¬gª©{ýž›ÛØLäðK¤vµ1-[bÌI^6{!ä³#¡G=sùU~ÔÑç8?f߯CeÄUJÖǤå~çé® £ŒÒ&LQâ™*.§ÀÖvtA̺£.6Ú5²¶ÛkÄÿ×±7 º)E»~kšÞò¦â£—1£ë¡´¼æ)¾è§ß¸h¸^8ÜÅð«Ûñ™!}Ï#â/o å¶ôt¯kíHF:±¿FTC§@:•º{'T\ç5“ÙïFID ÿÜÇ¢ Ö;Xã #Ð*˜7fœ£ëæÞ¤`⓪|X;9!‘Q)÷øm¢O*pÏp2¿6Â- ÓpÈ¥ÆÃ¤H‡Äh ˆÐNZ´ð†±i$OÉbVsñ ¥s[ÕÔ'OÈ R‰aD·e~Ë~•Ô¡øKªe `qVâe»u$aå!ç]ø#:MDì€5ÜÄN]+!w~ˆb"þ]EggŒ.—U©¸k,›9„fL5²âœãå¿í^h(ØÎX˜Qó6ÐÚ g–|nŸí²„â[Ðk"¢¬¾™žcÀK…$%¤£Ž4 qåáõòq à×hoPÐÚ™_õDúe™¿ MñÏK@û–´Cö7ú|UïDô¡Å6¿ ²»÷á£Vó~óo‰éªÝÚÌì?–êÐU-Pnmuk¨h“"©Q±œšè—×y¶‡ñÐ’•¨nÅ—è³IÅ&aq DjŸjº_J¨w%lö÷²ÕSTÀ¢z½å»ÃÒ¡‡woÉ²Ü Á-šS€ŽÝùï[B~üŽ]qO3㸭UÒWòñ /¬S¡ò´ìÃK©³0þBiXÆÀÈêÉ=ÿÝ„"ÜÂŽ ´C®/ÀH[ÜùáÊj­²i’Íe Êèî=q:‡mÓ,ùBf)¢‚õúU’üD°MYb=(bè^ÒÃs %÷>¬l³µœÊªGÆ‹>ú¦S^²©…†NmÔg‹Ld ÏMowZˆ¿^‹p]WÉ7â)Úðû­9Ïã Ófþ.£rÉPÔ¥‡ê‹1q¼C†Qü)àŠÙî†9³Œ^ªU6 @ª¶ÉUžäÎ$ NØþJ{¥âÏ`R¦Ý¼­k"‡3ßSum"ÙÊ6)û &ì˜)šì˖ׇñ©šEnýÕ.)¦vÍ¢`?OãÍc¬‡·Öé7†ÙÒ%Í8€!?Ê¡úÊ|Ìöíþ÷³ñµÎîzMÕ@‚ÝV4w”5d áb3 b&hÅ0· àTÿ›Tb¹î·~q5ÈE0·…Mqê©‹ÝÎt æìps•âu ×ìØõ«=Ü`òþTÑJ®À ó+•»ÎKGƒýÍ}¸Ê!¦uf>¤`Å=ª#àLkŒ™ðUÓ–°¿¶¹úÿ,I*Ê ·uºfgSÓŸR`%¤ºŽOá»8½q ¢šFM¿7ùË+Ÿi¯jS,žôà§kìæZY¶Íðv)Žƒ€¦æ)¼éÔXwRŠì £v·îøö9°—E²gyx\¶ðtp?) Ú"~+¨zZ(Ý¡K=º/;§…|oÚÈU©ÑD^&6´ zS(äi‡JÕÈø×÷9ï6þt…JœP-_2 ˆ«Ï5ÂJd ¿×9£·?ÞYÄŠP­¥äU\ñ-hª ³|8¸¢ÄDéøjË7ØEf(Ë ¦fV©íuK„ùjìú¢„)Gd±lllÕ(A¯÷Z‡Ïó{LFCį«iIê­çÕØ…‚òRÖd)‹Ó\éë=2mÉÆ°9 /yþ÷ÇϬj_öVY¨x !V¶z;+wDuj'´tßÊkh‘øþb·UßÈ•¶Ù®Ï8º‹ìÿ¥qkj0¼ë’´~‡FíLñK¶ ¡ “<^ü{O´ÈÄîZMÄܾÇ×øÚÓ€:ÊÌË¿â/…nKšH»”¬éÄ +?ÊÌ™Œ;Oh¯ ãtfHÜ(2@ú‚[¢$¾N›qà\ôØvñG 7$kXDxKâèð® `©(­—ê£bQÜGÛ‘vñ™ ‰ëö¼U©Àsò±%.ºøØÕ¬ð'Ñ#[$W_ƒú|‘uLg ‡² —=?ZÜÂÖ~ “(3f„GòÒWkòVCÑŒ™AÍ YD—ÐB~î( Kë[GS-øâ!˜@v¥|R"!*AkÂÍ.Q“ŒÊWꩯÐÒ|Lk€”›;K‰f7\á«$9ý‹œ‘å‘qî@u×Y5…¿ýYñ%“©ÔG ãJt&E«‰%²*ªN8Câœnšwoef.òcžaTœµÕê“ÔóO× ’í{ÖkÕ©O$¾¤„ÞK1tf@ϺÎܦG’õ2é[Ru¹”îâ½¾Ñö»­¡©ÄäÖšû ïëe"ˆœ’îlµóþ×l`f% ü“ÔùH×2W®öqkœVݶÔr„RY9rÌ8?%™Èež¬XÙ¨3Ì£3ÖÔS²kf9\˜ÿ—Ç;`ž›þ&«|^  å­] =Î&=þèV/ƉÒV—Ï¿£Ço Ÿg3Pnòh|<ßP¤gú%HÔ:Г-çëk ¢?ŠÛÚ 2>Èý½0ïট¢äºTÂ=}a´p/x¬³"aê;­äYË¥ÿªîÎ+ ø NÍvwVx»^¿( R’Sž¯0A¼ëT»É—n6$·B ŒÒW‡•R„Öæëi+ÒW©î„Õ`¯tíÕ ŽDÌ7ZöÔ6­æCMY0öž%áœà×Ä·Q7ãŒP •â.캶 ZÊ©¾®Ì‡õñlÃtê,{H·ÁQÇüZÔŒµ›d„c’ë —²O|ºùå3$~F¡ã½¦ÚÎ4oOò¯âD»ùG×jÙ›u}ºœgÃŒ9†ëP¡®á‚Ѿ¢¾O'p8ÒïÃz{ºhèwÈ$º7lj˜æ,ÌÐAõÍì[[Ÿ*š8ÂZKïp¶R³ÑGcËÁyÇ~—E•‰Û”Õª>o‰®ó¾Ø,Ù9ûleÒô3àÕn1Éà0G`‹ÒßV=|¸N{q=¿Ÿ"!T"ZM,߯ÿ€E#^)øOÜ(t/©BáÞ[O ¨¦ÏyðI„$§;ŽÔœ›g0€Ôø¬NÕïVÅ|byÐÚ’“Èëh3Ú¡l@Ñ›c›tmš2Ÿ‚fù¸ŸìQû!u­‡qä× ÖÁvùèxÁ¾£©ØjcW |ØñKSªh;ãüæTn¢kj›c–é'/ãùe¯½ù*ŸÐ¬L °ž¯£àNn@Æ[í$™”Yp¯T}‰Å[^ú®Ác·¡36îÜdíÜ©Ý8ÿýÎãX¹»“¬(xGZ–ȃ1˜_^¸ÊøO Û9æã ܺ‹ãâa™7騻€éS„Ö“h¡%TõC+¿ù@M§ë—‡û¤ä]”}ÂÁ„ÏS`w€Þäó7sÙMÄí é%?°Œc~lIyO?SxcÆn]üýͶ ¯Štv÷þ&ò¢¾p–áLT¿÷9OÜb³‚zv eX$×Ê`¢/Jˆ'–Z€:eý[‰Ý1k=Ð$ Þî½²Ý]ZMLJ†|Üì+RMÕ‰f“õcI®! ­.2Àá°*=2o¹`Ó|ß¿‰/‡ùRšëú×r3kÏ;¯ÚD¦ T³§Ä6ªdÔxoæ'ëä@¡ÛøBá‰ßGǬz•ômÂAë2¿^ÊbÐC]~Ü6hä‘%81¼éñ\’ˆ²—«;)2•¡Z÷ÀO–hñkßy^¨­t Ô`JÎÖ jæ\ñ%[”Ðf!þÄcìÒ¤T-ó@N$‡;†BO?Š>m|ôïéxŸÇÆ « òƒ±nˆ?žÒ÷^iÜz.,üL­Hîwº­ã”j½,jL¯@+]tÇXØ'ØŠ ÎÜOôzœ^ýŠ’1yó':iœ½4áäg2fŸSIÍŠþ~\qÇŠ˜¦7/ëúeQ÷Ï«4ÿ]6»<“@ Óݽ)"¹Ô´±¥ö’ˆ€å8YŸ×1?ïÀlÞN/]}g¼ÑÝô?'ŒÄiÖ4PÃw0oSÎü! cîöÈéÆ7oBL scµUû{6ChT“ʼC¹È5ùuI. Øå+Éû´ÖÐ ›X‘÷ù¥ÉvDHjy€´‘fyN“ææqá+ý“ÊÚŸ6 €Ò‡ì0Ž˜3/@ñ¯„ûé*5 <óZ8·‚· T¶ž‡Z¤J*W5± >ëº"!S¤¼Î™W=-ísô\x›$=ú±áT`Cè O#xáÄø§w«²µÄÁÆNrúg¸¹_â¤A’šœ“7²·õKSÐeŒzvAE!ø$͘6’äaåÉ ¿ÃÇÂhŒ'9LùÔnê*áá“ly?ÇxXTú¾¨Hýªì0÷Ô<_ˆ"DEyq&õÆÏãbÚm ¿º‘—M:z¦¸æ5CöJþ%7C,"c-·uµL± âHšl‘>IÄ©äøk }P÷^'`%1ÞÒÍ~œ®ELrŠ1ª¾ªì2+Ö’•gÀ { ¤Ã‰q-ÒÖ˜j™ÄË &û¨)‹6Jr"zÒ~s¶¶PëÖˆóÑ"QÚœO»*—KØ3£å×å5eúPui‘Féo.vÓøåR¦Þi;·ÄZƒ÷O(ÆõjdëÌ€5ž¤7ë/c‡WYf©üG”3ÅÖT–õRpcGÕ¾lú,ôaL x_×KÑnüSY2ÿÕ¼IÅ:’x˜ù# ù´HÜ%C&þ8Y•ªê‡¤¹¿—‰½¿!*Mï;®bx-êö}[Á a€Ò‘°kÿ’#­´ãþðK,t–7]#Jû|.Ó¨0–zÈSFbœ‡Û\”ò»µvÐg¦ê{¾N¤Æ+¶q˜×tBÿÚÒ À[Pã&ƒ;aà$ÃüiDÒSY¤É½ —ÖŸÕž´„µ†+~9Y3Þ:‹”Á|¬a."°Äö‹W™<€¾Yú."ä¯.‡w*”ňDéEëùý6B]Å*¼JÓB¢ÝÌ3H§àDät&Âõ÷“û¯| @>µ¡:S7F³˜™#[ê@æ{u6à^•¿½L„~SoÜχA”\ôA=v%ã&mk8áã]ÔD¡„Lïe:ŠÒŸ ôÕÑñ£t”/jDˆÏoCÇÅïž{ºóί `žA†`®¢gÎ  !F¢ñ È]<ë¿å"õ.ÃÒŠÊÍžãn'8b¿½hT"¨Æ,_ß»’A¨äâcù#©³µbº<ø¤¾c§IEœ+*#P’MÛõ@€¢™:iµeOqøµº^÷cGåä?bÑ™ô0[ÕðØ£Ø@ÆÓr^éf‘c61Å86—‚œD1츢[€o‡yHcªøóÃö8 Ð7וv°Ûf&M4 mBõw²F¾èÄ€yÒkÝV»û8r:cÌ¿˜Ìµ¢€nÌg—ÆŽ’i {JØÝÐŽÊ °œ—1²Y#òÏ>‰™„QûAcñÞÑŸ»šÔ ŒaöõvVͪØ4é='RF?­\X;ªe'Àõæ¢ØK ýf…ü22s2¤7SèTo+™03 ¹ë0•Ìd›™äŽ0 {¿wíÇ|ÁÚ*â'Ýò}Ø<æÚJü[›rÃzù1},;ßIlÕë7Ê,K¼É!±Žo÷~mÜ!0FCu­ Ó)Ø£—1 ¸¢Xîª5Ö´!ãv%€TWrð¿ë/Vvd%¦¹vó*…[æ&q¬‚Øf52Ý×kŒØÄÙ !å.ø»ƒ@õŇPZ–j¡¯u:UHuÀZÙµl¬j'JAxÌvSñ'*½:,:K…ª ‰šz—.XÒi å!$î_ z¸Ðuê¶š®\¡(É1v’î^p‰«æo´ÓBIJƒ{ºQú SŽÞVfÅŠ;9²×ãØTD/µú|Ô<宽?U3Þ˜w »7ã›`×*Ðy6ÕME- H¤°z5- 8Ûæ&f8côm¸»|P S±P|PÝHE‰HRez†füR,–ê­ÐmÛpú —ùS‹@’>¢bZ½SxßÄä‚Ý­7Ûkj á̧ U©ÇÒ\jÖ®b?Ì]0IaŸ<0KòÞà†#‘#ŒTQš‘4m0òòJ]aÍ´Ð7bõKa˜èe•>sëîU{€ÁľÍí„Líuf6T©šH‘Ñ-¤í;J‚†Ã<åm¡A¥ð±Å·àâÉ ŒfÜÍåŠ?'rŸñÌÐ8Tï )b¦D“Æ;éÅ.ééæ0Á!êmSücÏ HÛ.ÛPç¦%ƒÚHÂ@5ÅéNXãhÏžD©?*·^7tkehã‚T‚gpŸÚ¡`ÕcÂBœgHÙÐwrYZú…X¹ØJ¡œ~'VœŽ`ë«í¾!4pîJQ«ç=k®_M™¤K\s¥ã”ßê|8X×Þ¹˜6ñ=K¶Dæù¿"8V,.êžù£®Ä ®D¶qØãFÛ%HzpuÎ_…Yö¬¾um5‹ ðá¾s’MýqÑ/èØ=¶/“ЬéÕ¥oÍ8?/ rêwU×vÒ3à–¼Gÿåƒ<ˆE!ìSߎ¡-8·¯(è ¦o*mg„²¤‹cð©wmXâü.WÁÄR“8ÞÖȸfíª•¿NO!x½ §lcC­öMn¿a’OEu±V'˜7<€CƒlêêÈCg.6Ë3›¿(72YÌ #A‡§þ’ß"ÌN-›4&ÖéÈö5]cëóD-“éqŦ¦oÔ‹h"Õž<©ÕBt´i"™\»»[C®K¶— ,«¹«ä.Zk«H^ ¥»ŠŠù mv˜[@Ÿñ:ïi¨‘ø)UCñkl„ìXóÄâ.ø²È:da( V¸pBÅ;“ ³ž´byÞæg¿ž@-sØÉ¨„ÁÐç—`Ó(?/8Ã]Š™ý` ÞyÛO«*˾úÞ`ï0¬½5¤ø–îww~ ‚¨­/ÜpdRƒn¥-Â}Oì`&:Ý£ŸæÉÊcö¥f¡9˜Â%=¦w£î°jk²1CF-:lITÿVU›o½<pµIjí’ú†[¨G­³«ôUœsoÇçX0Ð/>kj&ï…{öúi[ŸÉ)2› .&Ã-„6Kîc,,ÄØÉ.'[¥!Ñr}Ü„(‰ÇëOú¿$n D“å{ uM/êqI9ªÈÛõ ùÝ\㳉/ÿPa Í-Ó¡‚èCÅ«Ínðçç7b÷ 86KÊ£ÿœ)©W¤#󛽨 ŒdÁäßâÉ2^üMÊXæÆ“1nzxZ‡ôù"¥½‡ðúØ[€Øí„Ùg-ïѰ²ë0vå¥ácY­çH³”©;)k´tõËÜÖ½éÎ[ä.d'‚‡ OÐF}ËÐ6|"¦~™ÐQï‰{ÆtV7ÆXÒÕE† 惔;k³ƒ¿rÔ¼ZnXD=»[ùøÆæ>Øêw£éú)®•tÉ÷¼euU)fý̲ä8mp–^ nK‡) ÌUà,ûh:Ïæçù¡RÙ*R;¾;/ÍD'k>6xH^Cô®3’ ù-¨Ýà>1ÕÞùDðBþ.Zw²@»êå„%ÖAÍäŒâV¢ó1Üö÷1íŽQ°Œo#æ¤V[b<Ë[UlïŬyŠÞñ7;K¶[Úç5·4r!óörÏ-”CsÏÑÇ `®sÇ/­`aœŽ‹[_|âÏ(g!,Š1Z<§¤ÛÜȹ¯„µÌø¢ù HÅóf5hŽÎ&IÅË)„²æMOwû4ó/p#)ÄdVì¼e4¶Š9=«lH.¦6ܬrºôßô*œÔ$">ðÇ΋Ï„]É”69Ö¿ÍøÉ25¸/Ö±–iú•ŽýËÕ—#“–Ê|ò^cK±¡€^VnTÑšY£ pFW¾Ñ¥ ]pÙÖµž¶®P†Ôy¥%.cè.Dž\kÛâÌáÇBoö/êC©|åÀ11ÄÛ*w— qíýˆ’ Žìkî5ŪKKjT¥dbóyêñpvþX‚'{¼ ´˜¡ä§ÛÌ#éµ"V‘!ØÉØ™½éH$ý%0ÀA‡þŠ÷‚0!Ç#°7D^Q†éì)N¾ <èœ[ìÊŽsd? û+oºìN—÷ )åK‹¨®¶gÌc¨YÂQ$ÀO=~…CÔ’ë|¬NH‹IóªáÖ^“¬`~ƒóʤԌò?—”Ç¢ñO¥¨ÑEB8b–Ô=’ sÚãW?¬spö‹p­•(Ó#ûÜþûMäz˜00ªäØ£L89þåʶ6«¶š“ CGj÷ù(F£ÌËúE«ëcÊ¢©wO\ÖÄGÂ=²*·"ÖññîG¹p¼t̪fbýæ^Ñnø%Gq$Ëåe{FNžÅ–M•‹r‚_$Q+äË8+óÐ#Œ!Ú-ႚé¸Trð™ÏçTï“J)i1Ÿ¼ÁÁ¢ÿ5FÍ•?¾ä(€²s-ÔÉ«”$ÑѺL>ç¼÷ —èS¨Ô9zS1Û°éÕUD•žÑŽîCÜ©WòƒWŸ¸5º ­£î*t\çr~y‘æÖ\kÉÿB|^¼P<\”÷†ç¡©ª¶ P¯Y>p¼†‚ÿtüËÃæ>Ûû7Mø°Ý­Ÿÿ¶vyS v²šõQPz‚ d`‹¿†¯ ÞVw¼Àɧkyâ¶Q#sÞE×ûI!ÿÅÅu-AÆ–‰þ+Y†BW¢ÃÄøLÒF†Ã–‚˜å/y g¯NðÓÊÓ-lÖÍlÿ„ñ€D°&ļ1ÇžiX.ç’–rt¥ò ü'ÀÈÛõ—Ž4¬ûþÄõd¢ñ¹tQAÄ©¼FiªS{8vÊ~£&‘µÕDu»ß)ôÕ`›GƘnƒØíSm{Ý¥ßûIú ‰jö9aÁfÞ‡ákR+õUTŒ—ÍÙDMú¸_ Š7süiZh÷´Ê¬N@zXÝ+Ë «4®ñ»þZDŒëæÙ0t%oÏá.þx½ 2—y—6*ô—v|j &¥œY¿çÞy¥µØ0ôvWŠøf„Œ~AŽ/]ÑÞ`.3UZ ŒjT9¼Þ¨_œ­ÃK²a+QǤg‘‹Z ^q_ÞÀ«(*ÄÊNÈ "î|AÔÙ®UaP<—ŠpõIwuðj̻߃zQèö&B:"K»4\ïq‰çe-½CŽëJ!÷š‡î¼»yN²k°ÉÖKFÓNDwAªúxÔ¸1œès—çÒ™}ت¢Ó¿æ!sÁGÓ”ŽÃVbß™>ßUIÕ-²Ñ/°þ²¬n=iAè™GIl}2nuJ ñ×FÄû$¹¦Ùûåçøñþ!7Õñ4‹1ŒTˆ¯=Ÿ†|£Iáu~ï÷`€„òyøÐ¢ÌJØ6»‘Ö–‘4o‚! _eçº·è/<œm?ÙI_“Ú…Ó5Ex9mqÌy&iÍ.A…#ö²LÉ.=]·Ü^Ñ’þQë#'6yYecÔ~Z/f•S6™uÑ.Êù³dNjÍa;jEEäãQ9Çá¬ç't5µÉRHñà§ðל7úVÁ­^È—=>Œ ¸§7~Á$F k£k n¼ëËHžJÖº}/‹z!W¸pù"2#ÍMÎÁòôþ—I[…‡x•“a4'skOƒ‡hµÒ}ÿý=FNhzŠli^.Ðà~–6ÐÒU¸{¢˜ZåJ}1ƒ£bÅ–‚ŒX 7ýLô$2UÍÊ&JP…‘æÕ_@{C˜FÌ ¹õáUÒ|ø5Fg³t»¶K1ð±vveúÖW< J` „{žÆ[²¡I Ò+Uã'¹½Ím™™<˜ Lëcö¾Ág+?…-y¹ÒpWKÓg|~†oS2–\õ÷ŽMÿI à¬>î¹IuöªE·;nš `„£¿Ã¯ýi`Á~–Æå1¿Ðpg$YcõYæîÓÄ/[ÏUŽ xÁ'otÛ Ÿñî¡æ‰ïoè&‰ÉA·Ö*Qd¼þÿýXh endstream endobj 61 0 obj << /Length1 721 /Length2 21361 /Length3 0 /Length 21930 /Filter /FlateDecode >> stream xÚl¹cp®ÝÒ-gÅvVrǶmÛ¶m¬Ø¶mÛ¶mÛ¶¹ržwïwïS端®?Íš£GwuÍY ¨­³ò{ZzN€’¨¢ ===€ž– š„DÈÑÄÀÙÂÎVØÀÙ„ fb P2±00éé IBvö-ÌÌäFÿ2T­ Œ-l,ªvÖv®FænWWW~W'ZG^Ú’”LLÎæ&S k€œ¼†„¬€\LV fbkâh` w1´¶0H[™Ø:™PLíÖÿVFv¶ÆÿƒÉ‰ö_l]MÿfêhgQ•“UˆÑ)  lÒâÿ¤Û:;qþmbähó?ÕQœÿ+YüW2ü¯ô_¯£û¿%Zh€±…‘3ÀÐÄÌšîx“°5µ°þÛlìbÿ×?€œþÁ ÿ‡C €±‰é?Ñ.ÖÖ²6&r!;{gG€Œ±‰£-@ÑÎÆÀö?Q6Öþãþ7BÂÙàlÍþaŽþß& 'Q wcy ç¨65°þ‡¢ÙÕLþÝc ›ç›üÃÇ?5¶³µþó¿GþSÆ¿¤S“–—‘¡úïüË-bkdglakPrþ‡KGãÿþå–7°ø÷ôü̦ ÀðugG w€=íÿŒýÿ|ÿ‘tþo”  »' ;€†‰‘ÀÀÌ à`bóþà¹8:šØ:ÿ‹ðjùþ¯A21q71‚^_±3â ²Lm )÷)œ«§š›ÑW¡Za^î¹ÕB²27Ö;ºÆ~PÆÎsƒý=ëoȳwµ+ñÐLhk{29E¦³‚ýVLTaæS³ý¡ÿ^¦{¦Šec$ v~± O9Åœ™sQ#éPʃ$Æ¥_ÖÑޏ·¶ød+F¡C†œ¡ùÖ䀪qÎ<¸àÆïm$4/pö–Kϼ Üßþ(TãÁì/ŒÚ®¡m¯Ó‚[†¤•(åÉ1Öqh8GQØÃ_ĤR ’iâ%5ÎÅYæ#Rû¨;[ŸÞ¯žg å_ˆ¶áO˜óˈ×Z–Š1á œzÏ”‡;•ŒwVF‘m{¢O?,VÝ;»”X¾´¤@Ëb$ùe¬â>ûU Ô Y[Ç„ÖÖ¤x2î+#•¯¾Ú3ðð«‚¡yÀ¨Ñ)Î¥Uê:Ü]ŽSmÄïû3Ý¿j69‹€µ«Ÿ^+×ëîjÊÈä–º°ÂJ0ÒƒmÅìÑ”V¬'j6ª¶å^üÄóNâìÑÕäZ`œ'wÏŸ³&ó Kœžò<— Æ(À;êK”I£†„Ð0V—Þhh‡(IFÔ- x*Dºð=UÛ0Ðý=ºJ»R@«}o¦5¹†\ Ñ„tŒîcéh\aqÍvüP›á‘86ñ´Z<Ÿüó[v!xo#‘¬?a±~ç!ù¸±Çj ÷è–™Q<ÙÙ,¿´pû—Â/«C)!Þikš{¯&ä”éLÁ¸ãöé@Îe£lçêOÆ»ÂÖÐ0M³½^V¢>³¦”‡l©lFh.ù=S”f<ñÔ‘þvôŽbÊ]i¾±cÄ$o½ÜÎçÀè’€˜öv«%"Ï# þ4—ž6 qйíÎúV~åoÀž;¥È½0Èz2éqçŒ „xOÉké=G Ìëó%Öeêªx9õ‡E–1 }C[‰ÆZrO¥1Xíf(”âò§çU޶‘0¥ÜJšû9¥]Ë*Û|èYÕ‡*sHäTÔ†»Š»³TÄUÒ'|ãïÖ뽬hf†aƒTÌÿ™%"âÍC?qøsð[¥3ЩÿÒA'$Pj†WÚlZ»e$?aÌ÷ØxÜ·¶ ¿ âÕºÈ‰Ž†¿Ä– a‡ì=oî©×\œ›‡Ä×ùËôõœ÷H©¬’Cpe$t×N!ФøNýÔ€ Rî݂ދ"È{JUÙ2‚f™ã:¢Ì¿oõMXù&3‹;¸þ áƒ1Õ³W²óæÏ~æ—‡£wIí.\?Ô /š¤†Ú¬Y~ÝmXø‚ƒÂñ@M6F†{Á¥¸¹&ï\3%5êl¦ù˜S|.ò‡›‰ý­sŸñ}æ°ì~jɺ øf#X]¬žJ8š—xè3–Ù­×<:øÖêFóþñÚa´Ã9ܱ ÇÀvëãÇçà!þTŽO`a•‘‚‰ ÿ—#æEî׿o¹øžˆ›93q䜘‚£b+ÉZ#AøÑ’üšß%(ÛŠNJtºåÅH»>zž±½€+2õ+}Sƃ¥„ÙÉœ) ›uPêN«¹däS¸â@B¨èÇ•±ˆj›ÒzðÝV3ŽGÇADžrÀ|þ3¿•_‹ü”"¬ï[MØZm¦§=÷Œ(›i,_Ï!‘GžW¼š£ºA~:øã Ô ØÝ/ǰ)Œ½Hð4e­Ž²àÑ™6åíµhÍÏ+gOƯŠ\ò[J‚^ø †"eqøG…Q¾VÀ9+5΂ãvÉ]Gáeûz]11qêy~ ¡¤«â“« ¤ rRW펅ªg¡$ÀÛæ`ðœMV‡ªî×õ¯¥QM€EÓ:.À¸½„%ƒ\]r‘D c×l g·s&€¹9ÃwM­VDÔZ$FÉd¨éœ¼"’–<kæça—½¦rßÝ›ŠÁRÛ^AÆÚ.š0gé‹TPýe˜ÎBm›6îú§ç¬dgŠ 3Ç[ B&¹z•È-“Í2àaÑnΈS÷›¶ÚBËÌŠG—í%_',õhgb·4:íQñÅ…~S»³äD€/0$.çÔ7‚5'&D¤Œ7(«Ì[‡µã> B¥oº7ÿbËV€Zõêp‡¦3)ž‰oS;£ä6o(& S3ãä×]Ë™~ØRsúËòÁœÌqh×mÛ,¼ÛíÉet{•#¶\Ré×PCä’½~Ð$<¦(íþ¦ïÊ’ÿh˜“Ä×%aÊ$8Ø;RÁM´¬´¢èJû1<ì¡*ù¾ãà«t__ ±™JEcžì—E¶v¨—æZ”›ªy× ö­ÀYlZ³ë×b‡Ê`ÍHàš!-2©ž˜Bêú¼‰ê‡$ß×GnoJè—ß²f±¶¤_œîã ýKø œ›Àؼc„`ÓµÔ%Ñ5šT³«½gÓªluZÑW«~êŒ%®ÇÍ,H1†ÉN¬áö¨°Ü³Æ'Ÿ’ ±n§„ج֣P‹Pè?w0×]©Qct"[±äõ¾ŒÓö ¢ %~caÓUÜz*ë#z`¶†_ÚxwMU»,|l0,á ÈŸª°¹ ¶O¤Êdçl”ÚXTM&JO5/»`Q@¼ðïÖ1ªeFxωjæõái>Ï®}ˆ‰˜ÑßÔ×UÛÉÚ'z8…Š´·IäX)ž'õ}ºÚ¬|i>Šó¢S¾XQ$臺õ¢ƒ­«oU›­Ï»jÅD[âVÊÇ›×âaÕÞy³7’Æö üB¸¤et© g=D=M26Hû™5VëØö å_Rô±Ú3²‘ÙUúf Ó®màp1W§~}ˆ¨Q‡¤ÐÞX1åÓÃ3%£¯$nÁŸ)ŒÎ–”ðm¯¼†ÑÝ“FyL‚R ñh'ôÚÝÂÛ^žVJæÒ{(UÖ¶ª3^¹’ò¦^2C§+§Sã9m‘U/g÷“c|QngmÅY¢/ã°ƒMPc”¸21_æÎûìÈe>)lZSÊ Pós’/áœW0W® yyðÅÜ®åþRpxGl¥.žÉ‚ÓnL]¸T¸ˆŒm# 8U |±!¤2—\>¿ˆZJ=Jµ^ ¿«P»¹˜QqQ~Þ€cøz¸ð›©¹l›½-äE°-ît|¼DW\`¬›äÖ¦ÆoéAÉLjB ]"¶Z¸†S R'ûÇ…q!ƒ †¤¦RÏžÙw'môK¯8)Á,¤]2­ïô9+S¿±ˆôèÎ%ËÒ®ì ‰ÔîºãqfðTHi >˜-ïyDP—ØÛꪇ—¸2¨œþè³'Ö~ÖDN×RÓm¶º™tŸðæ~™{)öãïuÿõJ#Áêâ„*_M¾£÷r³ü^ºÁ*AjuPU/X@ÕÚC|ãEÃQÍ€Ù—eÅQÆŒoŸ)`®B&Üq˾×K¶ßâšçañ»“V^ab¨¥`½ßE”€ u/¾œ‰Ç9飕*Ä–šF-—ëìbïe¶:R/m…íÌ{à&Œ»hõ¡¹-ppa$ß²ÎH•´BFë§nús†•³5T«X”Ó6ò½ÀÇE:|õŸÄŒòÖÎiˆÆð¬¢JómUFÆÁ"¯ Îw]Ûl¸UœXˆæhå2?C…a}'Dl1¨0öxIÑJ‰Z#Ð3Z¶Ä»eŒí7݉¹CR »˜&‰”âÁ6¾ÓµÈU+k3Ÿ Œü.à­ýPêI°{ân×ïFWB±½`OÓhSý†œù œØBiô„ûJbª‘5G½÷\6rtŽÇêòGq¥,ÎÆXþð™»Ò¶†¦ÏJ§wAØt«˜¡ôp¿\‚%1Q}åOp8ºTÚ¯ÂtÏî@šÅ¹ÎXóí“”ûð¤K¹¾r‡‰BÉE&ö¢4ˆUW5LqU˜Ã6X$ È[Í–pRqÑ£¿°– ¹‰ ZOÇûÔ¿£-Eôe+Äöc¨öÒ‚¯ˆÁ"Š2ªðÆÓÐÚïŽXú¿kKG(hlZ¾2­©A˜ç0o[þ–õÍåµ®¤KF¯ÌB.z&xÛöhK乿»®Œ]â« ~³Í3®ÁpT]ÿuÖ~w\_NP|…0Dr¶ÅDݸs¼,|ýý”àŽ¢¿~Ç{±Dz‚ضg“x൴ôÐó:Ô§z¦7lÆø‰‹N/gÛÔ qOú›«w¡ù¢mMŽ·I–Ï’]ÎÚqÌ.±lM-ÉJ×|Í\¸Ú}‘­1è;®Œ kÀOç¼jÔ;Ó”'ŸØýYü<ºŠ-Å\w{‡½.wí· FÅ’ÖßxEBtÿ°øâ¬O_MBäÔÑn2®@)'Ðü~´ahP,Q]û½nÔj >£Jé‹ÏÐÈwï—®Om my¹Úª—ÔÓª\Õví½ß„ qókï¯ ÜÕÊÓ)§âÎýoƒÞA» ‘©ýr\822}ýCÿaõŸ]ÏÏ>Xuœ1Gà騅ހƒ£SÞI*FS Òef—Š!2>ÔŒ[Ú’‡¾Ëzã³Mk8Ãë`¢ $Î)ZcÅÛeñ’QöÚú‘€õ­hû‹Îzü·ù…Ö–ŒÇ¥m[+!¥yíSöw¥2 þuoŸ$sï„ÖMÓ-Z¬äO†;{@ÝÄîôºL¡©&9 ¬tì°Ï›—œ<ò#ùùúâµ¹ÇÁ õUn!Ðan™q1 v¦ÊÞ¼† ¯²+ùS.ê˜Q~‰©ÜÙ{íómőş%¥¥V_|r.SÀÄ’u6”lÜqû•µ`íðqõ´\ Ö“'EIiƒË½ì¬,ÌÞÉü—+"„I´%É?ŸFÇ6{(\·9‘ ·Ï$(xBÿm¥€&°?¡‡¾ÎÈè’õ J¦ ·nv[ÈóÎ.Ò’Y =/FzZgØê†™‘ì²ü9G_󀫯iÂëØ¥K0ý6sýøÅ«BU}7¸ÎæQ›æ*ø×‚i—“€àtÍ=~‰=dúÏù@A´ (f9טšZ¯Œ{¸x¨¤$Â#¤jcxb'ó;óô$úü–EóøÅa¨åëØÞÞ+¤'[`ô9¤x(Ÿ&õM Ù¶ÌWk¤w¿D2nãÀA«E€ðŽ¡hÒ{®®ï(f¨OéRHB6]—âöh}öã™: Úµ®‘]'ôj»õJ5É«Êaùz9t5ìæŸ]÷·KÈÊBmŸèÂKp *U*sÏKNÇ;P%…emsN´«56rÌ Äéù’S¥äŠp?/Ø-NÞ6öжsR9kæÛ?ó#›Aww2Þ¢x“eŠÇ7B¸üµ{¼¨ãÓ›PÈëø:þµæàT †$:Øg½ ˜¬âÚ·¤@PÕo¡Ðú¤Çº§ °œ3$x:€m޳âbiÂ}¯f¡2d*‰ÆÁKü".€Ì¿9¨:Á?‹âszCOGzNf#…¢46¸{1-.v¬‡E$GÁ5neš]$Šk‰•ýV/LüÐ;KÊ/­iƒxÏÆ_{•èulÖbÏ+šA–}1oõØù¢(|DÍç7œM!}¿XP²U ds¾™Š»Õª%ÅöÖºößÇÚVà‰+‹+’,°èþ‰­Þy8ó÷õ¯àß3XôX½ ešÑ¯”ì«%6es+Ü+䟖0°‰æsŽ·¿íâ£IÕ“œAä›S OkJÊ‘ªšFG­mà×ü9ä,TþåàýÓ„Wèù­í¬å&šÞˆÜ¡/ ´|G4Ë'ˆ¬IªªÒðcµ;b‹ç@hácxôë·vÁÍv'1mô8ÁìY0î:Ùpm¯fpÛ‹zXƒ—¼]õüÊàŠéÙ²„wP ²¦äÁZ6·µƒZwbŸóážíÊãaø0–å÷Ñk0¿äðB82¡6~Jbàáxµ¬M2T ‘üHÅÿ»žã%΄ÿ^M‰¡`6ôú»÷¶´Bÿ´Þ""VêÑím5–’°µO¸Iþs¹×Õ?§>úêÑ~ë·óB5Ûx]!ºh÷¡Ë~“Å,»÷ZÒ+ã_4ó°¤ 9¤³$ØÌ[ê¦@Ï<ïØ÷ &ŒšÙg”1 Sã{ç¬êŸë"«\ÑgnÝd6‹.Ö–zjCŽŠå_s@¦8˜Òèò–¦hb~ÕìoÀ«ý‰Œ4>ÎúÖ9Þ\@zŒ)Ù'€ ùÞƒöHJœÕY ñ-Ù©„øb*Aë¿æ=í.DEåSTø4«#±N6ÑÇ@a3‚3F†_óZæg¥<;A² ¸•Ï:AäfŒæ<#RÛØÁftÝÑ"Hs›µ"Kg{‘S«ìŽŸX·^T›3+ç¸Ú®N1뻤 ­¢lImÙßÌFnÀæ¼rŠéÆ,éh·Ý{M³œ–ì?@›§º9dÛ`ð™°¿ÔËØ!øä” £D)#ûÃÓëHTN:ol22šðšäZáo½f™,OjNû›ÙÕ…ÖÔ(Ê1ú´6¢¡VëËlßÅÏ?…È5ÌÎo%ÇxÃ4Ñ=éeš­1¼/òš cÍÒ±+pC²j–Íâ{Ú‰j>ïŠéÝHX*Àܺ@:è‡ÙN³*L¡S½tÔ¾Ö4Ôò–“j߆³\¥Ïddá[½g^kV,L}òßë͈0\t-vÃì0O7Là¯Á8Ý×–é A-U2–@Q˜&™§÷±L•OeúiX ZÍaCÜ÷·Îxû£~»¢¤•ëô÷Óª.kK¡pUÛØ…ŸF°2q¹×‘¦¡u¨tb-Ê;ØÜw…´ÌnðúòµÖÍb´:±F:xX8=£4Qü¶>3å¾ ó²/ÚI[ún™ïÃS»Ò´Ý¿W¿H!Œ}_ ˆˆ:!Œ•Õº¾$oŽO’hùàÉ=Wò›òYPzx›.<_:G4(óíÞD„A«Ä²£®+N{xH.¬Î -÷”ÇiÓ…˜ú‡o>[TÍϤÕ> PÑ™ÙHýÿÞokI×¼9÷»¥7¦cË`uSÜrõÈ"ðã¾L6¯»<ÊýH78†ߨî%Ú&é»áz¿=O\$d—ï¶)qÑño3ÇJ‰ö¸´'™/fãkJ× *rŒþˆ x$;•؈ßÌÂZ€Z³‰ÙÉÉPœQ–[»ûúq'ÙaO¡Ž^ÕˆŽR_ù÷Ì1§Ußá`±0HT§ekN&ޏ³¾bìóD£ê…!3 ·y¾‡}ô:ÝmËÖ#éËZ1š»Åº65Žk¯Ä)h_Í©VµWTþ6™ýàþç%ÃøEu—6+]Ð^¢ÀFrk=î8 ØÒ 9!Þ]•÷$D ïéɂřEÞÂÆ\¸JÂ¥K±Û3»ˆì/ÐE¿˜4«ÊÅû¼Û½Ë7µb\™Gd†e 1«Nh¤´+>†“¡ 4Óaú|ª± "†2©ƒóCÐŽ(D3‰sòjŽÀ4‹ko¬R÷&óPå•>Œ¡ËœÈ%×#Fl„¥n°4KéËùí–I±ÏZûåt {ññü•_mÕ>d˜¦··R†ÓÝ Î\ú8öõ Ãáþ:šŸÈbÆ#vç4ŽÛhÒ›/÷\mÊ™´S4÷àˆ>‡2¹„O³6Æ:É<`‰_úìYß˸*S¨ÀöpÁ:š¼+ò`˜Ü{²ua3³|`䋟:]¼µ ¯TXlU'Œ wÜÿ¸ê÷ ükgS„2þ\E`À1ÆŒ§‡% ü°NAw[MF¨ ¾$ˆwµ„ÐÃåÍccyIˆÜ9´ÞÎÆÔNfË@Ú`2_Xàÿ»»ËÆdmä0^l2òv[ŽáÄôþõV]ìâI“†?ÚGP( °²«–Ñxuág¸°Øøc‚k¡ýd.±ËXì”5 Hd “@Œmè&þ0\úßvЍîÁãž%±†Öë½þèö̹B6ÙhœÖY;.Mð´…Ü"y†´$7×U¹:˜ûnºþÏXê¨Äí`­+Ó¯žOßñã—IÕðûòŸVìvàßôñ¾r DZuÇ^èdË ˜{whð± nûtŸÀAÉNÄC‚´_j8+}2u³7q.ïþ’t²?\u,ŠÐZ†NÀñŒzÈk²´_­ÎHcvKœðiõø)½¨’OðEø"™GŠ…m,í¤çã'›REX"»šóÄ/k{ðƒÆî¦Høš”‡lÕk×:™?2t‰èg¿ý‹ª·îc¨-¥OÛåÏ öGsxå£ ¦2§´}i „[ƒàŠ«©Û`å$‡5Y|l›½Áa Š—'?9{c뤳oü#1ÇCÕwçJ*› ε÷!iuò7œN¹ÙÞ·D•,üåã{Ðoþ,ÅÑú+xƒ%ó’·óC":ñ4¦úí{³®å3?°óÔìr鬮ßdgùö]3!ch$39Gåt’†{¢—+MÑËò›¯[bmª€SßS+QÈÛD8Ô„A'ÇéãbJ¬ñìÚÝÔò¸<ó³ÎùŠ*F[–UI>MJp‰ l†ïÑ%ò'A^—í` d½s2Éøþ´aq ¸¶‡a±ÈwWJ°ÜV—¡¼Ax–¶ 4]4Ø•~s–EMD¹7j(¶ÃîU‰-Ø#”ÖÚMnzî´™Ó™ªµM&CšXÀºgbÐòQ9÷5Krub|-å+Cz?ºf% \ÿ*ü¹dÕ¿-=ˆŸLN{$ï’v\‹åu:HW´k¦7„×ÈPÍ—nèkš®6jn´ë6íá¡û/zbõz¸>¡/ÚÖTéñ3¤3ãAm:Cï'îÖOV¹4ÜŸUeÓûfx.R±?–ã *SñcxQ¡ Úšë2ÑΖRo²¤»‘².$—¨é$&zóÞ'îH§{T#w»ÅElÆÙLr¶(ì_ ×O$3BÀS¨ˆ.­b÷2È7WpÓ¢ð¼U2€ª½šÎ°4!4tu1Þ¬i3ìÀ¸U“4ÚèÈã'«¥ºØ'øç°†Ô95Î67™âƒaxŸíox)M‘ñá 0hÍ=ü”Ï«*¼ã3R0ù_Ù3‘®¿¹úO«—tubµ ýØ!z>3$15´+¬‰ÖæýW¡Ü0æ[²¸¡óå-y]Ïhò(È\1XKK1þ»Ù¼·¿›Ð…8™Ë»*žê ™(ÿ´äl“\DuäÓ50N/’®Œ¯ñpÜÃפ=íYºV3´55>ë–‰£SŒõÛºQfCé o´»‰OK/‹êЏäã›–HRý¼bH›p‰KZ&éJ~ÔMFM1¢eø6ú§üçÙ]¼g“ ÂáÚ®sp_€´âü+áFgMgÿ4М+ž5eEqóÝUÁ €ÉygŽz4ÿD˜ºJI…–aÈ‹î>›Îé¤ãöüÁP—uh–wÅ V5,é¼Ó<"ÊâÄÃù¤2 Ë÷žr™4jõxuAØ+”ég¡¾8ePˆëzÀqB¤ê„úuŠbÌ‹ï‹GðSø‹rNΑ=„?-Ö/¶Ç®m±[®B8¦ãçq$'±n{öúÂ-.Oé˜Gîlq`zÇÕÄÕ8;Æ–ð®úV`B°ÐýOí‘c@wô¼MOñòGï#±?%¤¤;ëh|@EÃtÏ«»Õ"Õ>•_ÜpYÀQ¬ôÄDŸ1ô` iCí\~ÕÁ5ù-PwSjùÒHŒX0Zµ7ë ”Ù ö̾í% ’¹F‰‚¾ds(-içjù$yÕJ”FtåÝXÈàŒ>;&Tæ¼R‡ªš÷¢]‘× y;ü>b\µÊk»s!«k*«¤)ã`ì÷ÚGí.TÓBS¹è†OW†@'Èç,ö92”Tì$a‚“FÜ·2½M—Êb*ãR0û î&ybŒ¹© rÇ;Ó«+¸H›´ð<ú¬a½"ìÿþû,1¾Ô˜E$7»W‰03V¨¼=MGôYYÊn21µ$5¥Ì×µéú×Ú°øD¼4B–È(•AÝðΉJ-´[Œµl9~ä‡9=NÞ ®Æ}á·/~ 1ÿ¥y,rÇEº2oH%‰ØœUâHjì=€|Vy~~YæÖÞ­·Gm ʨuZtÅ9ÓÎêwŽŠ=nÝSLk¨ЪTíg ‰ÏeB¡6‰Ï–Ug†²ü!´ë£#vw0k¡ó)ͼ°B,%K#ÁÇj ™£Ú*‡vïaòz±Åû¥¾õå\„¼oÆ|—º¶µa‹Ñ…ß+æþeüü„¿9 ñ§ »üµz"ðz*Eò¥Íƒêp¯«?ül÷´A½iìbÃ,ê¨3áánqÔ´$['·¶ÉXñw¨Â¬¯&L ®;ß7œÔÙꜧq·“\ “ƒZ¢“æ&çe. uãÉÀRnjäÇ‘€Ä(%êÇá›óAw—ð}*øXÝ ‡üŽ üÌf3Æÿ‘ÝÚ8çÊö†%ÚW…ò§ØS3 FäÛH@ó¼–¾ù[y¾>P®®ùUrE0|¦–wˆ.¯>Ô‚ÚhxÒݽkä^Ygrëél¢M®Y;ðläé¹™1[”ϸ>äY1¿Ñé½^b<_O¿Q·ûÅlÂ.„çN\mD×&ñVÅ8 ì­|˜L°6†”ར™Œ.•ÙÆ¨TÀZ´îÜ0¨œ±Hæñz >""n‡ÔŒEÄ‚$aû ¼†æÞˆþHsáZ¤Ó<=ëà’LJÛGÕ§2ËÊ|2ð×'MXe}–†ðºÔNh„œž2@ ²Aãw@í°Ü§0Ÿ¼þQùËŒ¹üäW:~z5ÖX‡“6¢Ñ±ü¸Ì}Á¬€øû¾Ã¢9Šg\ºõ!̰Ùµ©ùæbˆ>¿:…¦Îa-ÐfaoÑëç2—¨êÚvÒܱ¹èy!YfaŽ“^ƒÝPsQii:¥sù…©ˆ¢ì!ÉN7bX3Ž_ëÒ—È•GÁÞªâFK¹+#3¤QG *ý·e|$JÖí¢,×­Äõ*M©‘›¦´ª×^ÔÈæ ^Ìö§Šðêо´¾Ë¥uøÂôVübû°{^x&Þè[)â“n \Ì\Ü p ³D&­mK(o¹—'¨58Mwbßó¸: /­+Ø„µJ c7á T`Þ*’"φ;Ÿ½bpþr2ˇzÈ•ÏD²ƒBžÿ…¥I#Sÿ“Ãgò‹’xÔbbê-w"=…FïØpA·.¥4ú °ÃUBQÀ™ e¾žÉ—IÖ’íÎ>K¦¤6¢Fty[ê¢*O=ÁÃáAš‰<~ SQ'¹ù!’´™y,–G†ðd:¡¬÷›µˆã€“â³êKçàÁ={·™}&¸œGáÚtg{eI`4úõ8Àr»›‘`ì‹zë^L­¸žÙË tèÍI´mÖãÚà œ»ðN½y>wÚ¼Rx¡j¡Ý*¨Èc®BjŽ”ÍåºÖ v(äÀoŽfÏI2 ÇHg…Jcu.6$%Çu6pŸ<Øÿ¡ºÄ.ýiMø£:ÿü³a|(±· JÕÉœµÔ?‚Óù)Ö7fx–À&ÙåßPøÏº_/|I…Ó¬êį*¿ø¨”ÇÍ·­JÄ‚Á­-6•pæ×û{{¼S‹a^ìù„D“Ê}¡ŠÐçðWìø¼ ¢©Ÿæ< ,W2³zÓšûŸuâÄa‡wkdT_"™*&™Î…ÃŽú%o—ÆéèTDìúö hñĶýé ™†ð7áG]žÍ=¾è@#4FíÛ÷\ /4p°Ìö¢ü¡Få~àVâ„QýP‹=xÚ} ï“Dw³—Þ,¢N‹u÷^;ZjÝ“B¿áþõL:þT°Z,séC~Mêv !’P[š‘¥,þŠû•´o|¤†ê=Œ¡¯òzgQ–¨[B|VæÐ”…ùʼK€& º®têM¡Ä‡«E¨W–Û“nLì~éa‹ŒÓž ‰…ù=H•7Û+A™dêőػ oµŸJìÀ^Æ{K&×S¡Hùý–¨­¡ã×ý?a|¾‡”ÃíÖ×X½¹emm× ûê‹®åó#ôiWóIÑ>?:ñ _BÕ9Ú[…·cL~ýI_¾àý‘f+…¼Þw¶)¾p‘A¤kCU3 7eß+ÿ¥ïÎ1¸«º•'læÓÜñ˜*g–,}lÅLOpÜZ‡i)Ÿka Þ½þ‰ÝŒ‚ÒÉ„Pa¦+Ö‰ÛM*S-ÏÞÌn(]TÕ…zG«Æz +;!ÆMédI9Qò'üN±¡g§Þ—‘ò l§uÝ®2Ýá~bÞ¶‰K.{x×J´Sõè=üÐt ÓñöÂTð0Æ+>7fЦ(ó1¦ßbŠ‹Ÿ?ó´›7H½’ï¯5éô<Ò®WŸåzôk˜Âñä¤2 rƒcÁðw^®ù’’r¼¶Àí<é#V8#Þ)ðº‹V—ÄõÁèQæçɬ$e(mä·ðþÚ3ÆßIf¸ü©½ê$ç½ f¤Ú•œéº)6íé¡Tªéí$.U«%|íï=¯Ñ’…þtñ¼ Ðs}xˆ¼¸£Ùø’Ñ;xõʘ?r=Ul6Þ Ø ÀåÎ6牜å™Kz û9ˆÒI>箜͇Æ8P½GàŒú×PEæé†fP7¢cm&‘tåà:ïÜ$À¼<#­MÞÀÎ>ÚŽ£oî;ëý¥f¬TƒC€Ø~=ÌØ‘­„L7š«Yˆ}#/*8 yüÐæ~í°F˧¡mÊÆ’A5/u Ñ-¿Ú%ýܱ!»q¼Q=2žÌ\Æ6\.½ÚC0ineûc”žÛ¿µ°ð6(ö(ç+½â'æê^¹jÙ½hÁ1>"ú¹wÚ1‡’<£ôr{âGj"CÚ™3~ë(åq•égïŸÍÒCÎ,áË "é>—„K&”ÃRñó™™• Ä9Šž#=–`Œ9qúNú¿íOxÀÓÓÏrº1L"šqs{ä«ä|ydp P. 2å½x©DÝž¿ ˜¹V nku8dã&ŽÂ¼~p¦>h1dÖ-´QŸvˆÈrÀ•Ü?B§“%GÔ¾…â¸×Z«jpoµ\jŽ>Ô·0~ÞrÉÔ³°zëîð¡V^úD&¥CÌ0/pk÷Jf?ì,í¼€B¸Å_ˆ5Ývð¤ŸãxDõö”êP_ÄãÚö±û¡y£ËHTŒPi£¡‹ÁsµNêì Qõ[§)œ+DÑÒ¾Âó>e1’{ÿUS4ñÌûüø#UEiëp ¹o%ò>³ÙÒk@QU—r˜® ڜ֠ŽûÌL›Xô@``Ù±ÈÈÝsâÖX€p+XÙƒ3¼ûòvûåq §3orüH¯A¶Myá{^ð&Ç–ù×ÞÎ Sf «æ‹Yÿš}•ä J4„^%tBjST_éÜc_ú­Ž.)•Ž1d§â6‘z÷ù~ †=°ØøM³×&!Æ„DQŸúj¶5Ò:ct°ðùû¡ÎÍh2_2Í¢dÎo‹ö"u–‹õðÂxóïêÚàghp qQ6“ëd(¯H=<øŒ-$Ú :Xg>¿D…¹,[cžVþŽ'WêKáŒF#aöØKälK­×÷餖ÀCJ4Bj²ôà5ƒ:?9¤ÌCŒª¼RãFñëWÁýø†5 y÷#¬ ”>¥åÐr9=Qö»Ÿ¦}Ù_\¯;ÒÍ E´ÝHŒõ¿D"4+üˆc>œ$í°IÜz_{V² ’0¯îÖòxñ…ûën~nÜ•v†Û“}ïø–Dœt—ïå½|cŸôÛ”öT¬~Ug¿ê©¯²1&JdXF?æ<=íŒd}¡šeÐ.èBYæ’ã²ÿì’ìNzÇNÞ¸,ãuOˆŠ}ò Øgš<…™¶êK'A™q¿ª„^è_‡‚uFÍbÌùšºPî?UT êdÞ»du2ÙåÀÉêÔ®q j6ÆUå’§û¹ÑGÖ|m H;‹ ¸}1±„@ñ¬wì·‹kGša†˜cª˜,¸¦ˆq{ü —ð=(lÊï‹n+äôiür—l²z,ŠÎp›I''ÙIˆ¢†‡Ù™Îb*l>öéúK›Eˆ†ÕÚ¿”*pÞUjùhúz¡êP|ûsœFxS tÁ®Y@ ÎL'ä'LšŒ—x"üÑ}ycÏèÂÃö©J_O23ý{:mï+bÒàëp*ÕœŽÁ†R 9WLÄòq×%°}€ DG?[êOiõ“¦o}u.½4¤W1%ZÊ0T=Ž-ï`~ù'Ï/­ ˆEä7v–Ìá–BÕîòv±è÷~öžÙ“ľ–!pÿ Í7IL0/ø¥DÑŒË$pXâ¦ÒäŸïàœ%Òù£®¯˜¢pƒy:apÿ·¦Y‡# #¡b=aŒ­ßƒžøÌÄ!¶#éî}Þ8‘X¹¥ÕñRæ!çOåÚÓ®ÜÍŒÖ3æ‹Þð'ˆ°}Ç\ôv…[…\÷øVˆùˆ]á]!Ã_ˆ¥ÛžWX˜„ ч¶ïÈ}}™Aêµ Ôý,3r}¼Eãï©Mc+j tôñšSÅZtö–¦<—]æ|~-ÔGSHWÔƒïÃ9½þ^I¹e Y\u)æÜx¡Ûd2Ö»s'¤ D¥3ehaQíp\²E4C×K6[سlºÇÄS‘„¹×¶¯/w÷刈âNð;? 'ÈÎW¯Ÿ5Š'÷@±]п»™€Æí_øõD3 -T¤‰Ižš(ˆà`%‚.¬`Ü1¯c–6þÌëŽ-ùT Îý8ã ’=xº+ÏЖáè‡ ¤I¨öÌ?2§sMþB7H%"Ãí¥ŒðØ_Q-¡£î/Á;ƒ­ª‹oYø.€0«Z½¡µû5)ÐÜ&^™€ƒú6 ïÍ(« Ch¤Ó×»G¶6”îÛ¤L,½C Z»hÝö+BOIýFb)Àp8=0}|[ïU9¦Ì™|憓!d%ëŸpôUSgóÌyLRÍXêãÅøæ£-£óXÛ­Ý{¾rˆÀ·^ÌR'dá_&­¢6‹k4»!j:’¢¿I°îý‘-¨Y™Kàl†Öí•øíT7˜-¨"!Ý63T¤´Çoäö'ýð»íùÊwÀ§jÞt‰Zvœà›c®Í—œ´QAÄ[ªk¯b΀™ãßÑ©CÎyÛ5E+™h:sÒÑ? n©ôQ.©Q}ö>FòošøK‚Lø­ áÕ†òÌë¯Yò³Ê9ë+º#nH‹ŸpÐk‘U†y´ÁØ™‰4ÖÃá‚âÝ1Â-(õÕ ±ÖÁ íTtòû¹XtµºkØDˬj¼©Î÷P¶Í“r.µ7Ä—ô †r€=êÐ9qƒÃé±`bkxǺN$¬™t}ªÒŒžî Äv(Ú¨—ò@¾ iwd#©lL–Î=VGA¤™l3àzäçʉ’™ÚÀóÙ2°e5fRßñ´—Ì5"k ä æä{B¡Æ_,‹ÏüÔ³—ßÖŠ?Uè˜ÀíÕHw&ŠëI6ùÜñþžïa U]ƒKÇA¸2ÍtæÏÀHh[‘l:/}@çA¢7±fŽ¡— ½|º%x±¦_Y|1]®‹¤>çÜÎÐBâC¤˜Gžm¥`–ʯBxoßyŽW7᣸M@¾‚K´?Çn܃yF®Á,çB¼þ°°ô¿¯W0ÏúÊÄ':ìš %¬ä·³õ¿êN"˜µ¹ª’ǼòqŽížHFz#ñpáYÜO\à[+L!>y˜?_…0t"Bf’0@ä‚0’íëôñ/rý¥^™ÉFíJ6Ë×–sŒ&÷ ìÔ æ}D=ýUUeÌîîJ|Ý©ðͨ)£•<Á³úˆ  ãc7ä'eEÑÇèµ”öe+3ÞêQ< Þ‘çˆZµ<ªY°TÀ ¨#½`w È…2#šêÏ«"+3Ѩ?~+Kfgâè<2Þ^@aRñÕÓ'°KŹu*I/ç’üKîÇ6{yé#!Nl‘¸¬âYJúw BpA¥¥8{°|>IüÓ&Õ¸“óŸ¿ýï— µÓ~C-aä[s[-»:O@“ÈÅ£EÍÞ;S]¾Î§D1„Ú9…Ëû/ «V «{~ìÑÙ~Ý[ˆˆµ3ÃYÇ4Y’(­ûì­v\Ìò?ÞV 9!b$‚ºEK[¾’4Œ>3ÖGüé$Ål<;V¼ÇzÒš8bZÖ_wþ’ÿz+£GD iæ¢o ©€Ê2g ¼bÁ¢ŒÛ²÷ºRè°áUk&¬Xî&³¶³¬«a0ÈÏ1á6³Òˆ€Á1·T,X\SÀp{ƒG€óª2-­Eo'Ç£[·55EÝ'±tfzÁд¡S‹’ªKëQÜ”úHîŒ|R.°=‹”ÖðßV fG¨Ã™%%½È¿á Ì<ø¨tȵø“¾!ì’ÛæLßÛ!?Ú»RÞ¬²FR‰@‚38©7J’:R%5¡‚¯” ƒßu,7·IÌu«9# 柮Ÿ*\~ùáÝtó7lübM1_p ~M«à¥ªÉá bwãÓ~v)dUâžšwþ»‡çþv¹fdgf]IK#“g¶¬(Jw[ÆÝŸéA÷;‰Ðæ•É4Îüd—Þ©¼&«UÚKCüa6“5…SòÖO#I¡¦Fç½§t1NÇ1㦞!›Jô²ZŸˆd}‰Û¤ÚU|©«Ø~ ^“ÙÓ†>^ß~د™!qwí¥È“ÇñGȦýMÄ~ô í*1Ÿ¹•\ï©ßt|[¤VuºC½Îv¯†¹qtD¢©`½]Ã’Úz sÝö<.¢ßó5ŠÔ8ëRW38Ñ]®Où˜Ä5s„=a—õëôŠã>R?D·G:k`ò4±ÁÈ‘FàÛBÄ<ÿ %™ò¯õkš‚GÏFÍDÉÃQ<¢u·/f.=Ú'1M»fc¯e—v ÕÜc5®êÛ¹NÏó ¢¤ ¨o—Þ3U§ARߟx oyÕh©šŠfq8jÙÊ)ŠÉ1ªÃȺCBœÓ—ÖTZÝÍ{ 4ŠN‚óTÉqÀá(ÂҞ̴LX$M2|§<+úÀŒè©úõè€úêHò‚g"ÑŠâ^zßhð‹éÆáÎJ†^´Ò‚”G<ø½”Uc8_Sp™²) émb5Ü›z”¹ŒkèB h9ÁpåÞß´Ø…¶i}W‡LáÉÍH@Qm¿L~š»>Ž›„ Õã°ÊÕ™Ê þq` ªÔžÀ§‚?ܸL?l=ØÊ»GN£gdS áf Ò´ ÷¾ªyMƒ2)Qp¸ÝSH€~ J® Â’>•›¡úÔˆ%ï ÍŒÉßC“oà w÷—7Ê™¾=ÅG1øõ–ÐDæ(µÇ9I­AتoAgw*ÑÜŠY08ò÷躦˜ÑNEô]*- %~4ÓÚâ~‰Z*¹"*1¸&ØO¢®F{eÓß;÷E˜‘ç¦C¤ÔäNÉ÷ØÀpñ±¥€RBH÷ÃÀ ¬ë¾p™Û¼I›©DЖ¯è½H!ñ͸°Kþ¿¦bõØÚSIN×.æìn—èœcˆEË-RÏŸååˆCt–G^‘Ïei;U*÷–o×Ü–@k—–Á{0—î«£7‚ªÍ£—ûÇ-#ÕU² ýt©P4Ù„{ì ¬A¿pÌP ·«"|ÛhÍìÖW²“¨þ(NInûæ`õªÔ£=àÃ51ðaÆÇ?®·Aü†>}¨o¹k™ .POa;Êðä´’ëߨ]mY"Z*¡þæõ‘m±|Yá‹5BävÚ«K`ð#q$Sáç)–+PêôÅÀVÍ1ƒù¨-Öë’­`×6dÍ·ÃDA ǃ¿ô£1o&Cð|:‘–Îé«ðB±–Cþk ~za0#r~Ê)4̽4à™ÄeÛ#ŽròΡ¸ ³ ÎÊù×>~—´Üª¿·LTÚ\ؔѾ‹¢r8ðÎa"¸Y» œìt¿GÝ®2ÉUM²Û Ûudÿ<åÁ­›0„ø¾O%V§g¿‡‘|½ä€du NFßAZšî¯’­·Š¤,¶ˆ¬»BM¢W¹ˆû ¤fŸ×Яd ¥¸Bì2¯HŸÄAB˜„ÝBÅtpapï9JÃóùŸøWÑqºM!Â×Iãf"›µeè&ýýBKX£¥'½¨g£=ÿÖd6^º£ve2ZSt*gŽA>¢oG]å ÅMÕœ`,–R T%Âô@¢ÌèLâ—BÄ-ÿ-NV¯êìœy}陑Åù¢´Z‡ÞOY'Øœqù‚7¿¨,“v“±ïkUEÄ Ø µ:3ÒLYn0üœ_Î&Œ¨àà#ŒR8wêÐGÓÜ –ë) —ÛãÎjmP{ëüüŒÐjdÅ…\¤}AC¼U|ÊQ´&Ø'±ØC½6_ïä»â´´‹~žÌ‡öÏUYK±ÙRÛ„°òŠ0Ë ˜"dK'¯Øé!“¥››¢3¿šóoó¸=Â2xŒ§H‰­Çv‚Zwæ¡X{W=:BÒv)TÊ<„Xmq éc­yEÕë¼(› ½¹©÷wì"†ã5D$)¬þŠðáS؉j›:´U zˆŸ¼`*èõ@¨Òx5”,¢¨Ú ?,çógU2Þó¤Î˜$o¾XC„‰ «Ü·B9xçÑi()©Læþì™'®ÿÊd[¥RÀêyÀ2YÕšfœPçXÅE 5¿R½S½“ý?ûë}8òýÕÒb+ɽ”8HÌ4l M€6lÝû-_çh¡¦¤”Èþl2ª 5à¶µâi2.§£ƒ·oT.–ì,°¨ãëüom*®U*ÀyŠsmá$ùK`xVØ Éª«H=ûë*k|ÔeêÊkÀñs‘¡„§ÍN;ꨞϣH×3aíõ°¤t51ùùæÌý¥l¦Öâ@÷¥ ­ä-¥k·y=UÔ‹ïbßéÍV·è é± /G´Òºi¯hTU_{IöRa‹©bMàøäf&?+`&pÅ<Äa£CÂ}±àìÆ•Ìã…}/®-r*[~UàdL‘º•7Òœ°5Éò*k6ý}*\ž®P%׸Ù.R’‰­]'çh:²¥ö‚  µàEÉ÷»®ÁŠqY?_*Æ3PÓÁõ‹°ÃúéGxƒ¨²4ìÇcms×"çÐ-E+ÞEªW‚¢ ­Ua6’X{ta[_*q|zã9÷1û,0_Þú”`°õæÁQ• ÕôáX~ãCžÑ2k’s²¦¿)µ‘Röjt sX†û§[ò­ñV½¿‚ÏëßEÒì赆ˆã[A4‚åa„²ÏÍÌén!„•€Å1ú8ŠRfŠ„¤´ËÐw$Þã…ÈÝ$7¼³hþN@\ÇJ8Ÿú·ü’©“žæÎ2!E=´Ây{Ü›]¨‚ùû5¡ž)Šfá_-ûÄ¢Ïöé«y¼€ %¢fä»ÐIQÝ%ïjš6èzíW'l ÷µ(´8ÞÈÍÑ$;ºÕˆ¤É¹õòÉ\KW3»N©BëN_ç$7ßò®Sª]._KT. G UÕÚJ´=ÃDÅŽ—d’¤[NÄ'á) ¿=*:o¥ËªEÃ›æØ ~·‰A‘Jï'ÔÎ}˜ŽÐ:M¿W¤HìA_ár®>!©ß“u¶Ô!Â'@ÖÑzN d¬¡Í#g™ð ÔNà¥3IÁª’6¤¢Yh}Mñq‡9|ùW Úi8”Ÿ½…£-k ô‡|A ýúpÂLéCð½}­k,däµB‰{¼(ØÆà“Õ§ÔÚ†D¾äAÙ)#f‘y«ãÇй)(ˆÌûøæœ±ß½¤HæqÙÿ«TÌž™×@Òorý­ZÖ÷‹ ¹¡¡"•×14MGxheŒµc"á|z×2¦˜Ãsdp$:dÃÄ¿ïÜæKÀê×ßÈŒI»©ÙŒëùD× Zjé¥ó¢ØíÝ\üZY¤WV_à†Äd$ZÈx;¹¸ ȹ¶{c¸¶éB×Üw¼5ò蜤z{¤ô¼YÖé´Ì,‘éá,—:HÈ®·DMÿŠlctjêcåv—Ý/a®ßÆcpØ´E"ÎÔØ®W´‚ÓfôO«_ †£¢n:¸õ[[UA>œ¤¶fë§ü„Fh¶Çu_7à—úÛ%_IlU‹5íýÉø—ôÌ ÚÕïJX,û²guhäë¢,›¶‡ð#¼“³RźåÓpñF`4ê™i…0ùãYaOã°¶1ÿ,ÚôèýaË;®t»C”‚©Œ¸H·$XmH6ªž3"­B"ðý*X¯¦§Ö‚²N_R,â)ì>«Á ÷–Êh³/ÀäƒáˆæÿmÔ—Çï|›¨Cªf'p8Á ·Œ•œh ÚP…=“@›Ìfø8(‚Ÿ3iè­´ëm¼d™|­ Øh’î¹ãµ7Ú‰µe^£aÐLv˜ˆwÚ¤Èßbè®>"œ¬F~šŸW²2:b°PŠéÛ»äñh)ùZê|&šLÆ!¤´íŠ'i*¦Pák&ïÇæk^’wfªkæÝ¸1¾Q{Q?=½ºõ—|ð9¿%ÙÞ)¦ÿ‹‘­¯%’ J93…WG&à($~㆒ïaêvøc]Á:…Sû<‡JúŒÌ:-8Q-Ÿ¥Ržj÷ÿÛšJåä„+k¾Úvi5Þåm¸¨ %}åZîÔ ž±›Â€S¹ç¾‰—[²£š™à5DZ• hŽÍ™uÂÔ¥QÙAâC7É<ùqåü/,{ uô«ÒF×fêñtqUM4Ú äš­XšWƒ”á0†¸*ÐR¾›þÖÇÏAÌîï^M'{4rLAWÃt5ôÙ(!Ÿ e9LBróÙ õ]ªÙü-‡Ï±ãݵK"çEë¤:Å "÷¦ _ n@`T%)dP ©+2hãQ;RQ’§CWéõ°Ç<ŸS±iç}©tØÑ½ˆÊ¤ÅÆwéHÎðß»µ Vìųûîáßò­—°å’ý•O‘}2%ÒäèžZÏÝâÎlÛoB±ÏôŸ$ŸfÁ¨»Çí÷Ÿð8ã~VÁÌ¿X®Ô¥Ê9Å‘8oOÁÌæƒmÛaJ°8,ð!©dïÎ}Ø+æÚÛ gá,Ö§À$ÔC ɯ¢‹pÅx PL2LàA=a¿ öÔ+âY2cØ*þ[üÎZ7F·Î-ÅÀÍ[7KªÑ2qË)bÖ%zœJ†W,!¤ð!]|nŸOn‹%oFEXhU!¬&Èk(–ž iCwŽÞ©Þn³3P£5dFGft/2D&@ ÕÍöÆÉxçIy(„h lšé$Iñ:0ð.nˆ‚7’‘ºóY™ ¬ûÜŒ-•Q!ÔEs)ÁN‚®¾¬ðb¦0JV \%èEÝȬÁù_‘Úf &>‚¥¦j;ym^¨¹ž‘·b§’—EŸAæŽe(vŸ¶¶Eÿ¶YN³–Ÿ^lüÎ(dâö“‹Ž[iÔÿ¿d@›íÌ,‘šh§Y8|2P[À÷ºœ ÷œ²’ .ÖñIôˆ[ïߨ|PxCè¨B±ÂaRA³ŠÆÊ¡éÓ=B-]Ú;)ä·Bu~@×ÌÓĵ×Výa*ô¿{=¼µìܵ­Oå©õÓC3,]…†X*[hÌÝÑ2[w[ôù}&MÞo–¨ƒgšU¥ #ðyS?RbɦÖÊס?>C4²‹cvÄeT8ÊÛrüs2hA€qjéäc^‡¾eƒL,y<¿ò¤bN'K:PUP°U}5k¬,×­Î_J$±yyßóà NÁwÜ;º‡}ıó>¨ÜÃcª[»çVA¸]Ôtd7£"0¹})ôm\Þ²ÞÎÂçúbà¡eg*ømŽEÆÇH”“ͺPë7„½î"™Âœ— q¡~­OÜ=]‡(kÍqúG]·þF¥ÍÓöËSþ•Í»¸~9=‰Á¼¬î%¬«¹»Ó–s«E”I((/0e/ÃÕ¤N Ø&„g_»Ûd®A¶FJ*Þ½fY²ÊbQšdÐÈy¯e¡]-+>:Ö÷ý5Íú*A~:ÿב…òêcèGŠªÉ:†™A&ióì5ð_a7é*jy‹c]Dn”èHðM´}¸¹Cb¡«ƒ±SN§sHx„ê†Ê0Ðô×Ý%’ôvt?¤)\Ë~óê–ÔèÒåØíŠ—ê4›;/ããa€§yzŠ .ª\)¨8Ÿz èá/ÇÈ‹³fmû4ÿDs zô迚ø‘·kw¹¡°¤¾§•V/¿[“¡wΉ!‰ê†Œ ¤«ÛºÃ Âa·€mÎÏ'VŠìøS½¢6Ô‡ùªj!ƒI ¯Ð_å*Š(Æj|8´Ç¦l&I_ÇÉ5ºËÝ´QÙ6CcS!Oç/n/d²>!cMZê5 ÉÓ¥Y0Rý>£¡K>ëjŒáÁòë¡øvÝØ—€höÒ2_¯`J–zJa§‰ÉªÕ÷û¼U88óØMÒÑ{r8·”³… ~aNlr¤Ö‡X¾Cï—»f­@© ¢“Ž ß½E—ø§Õ/æ=ʸ “°Î(u/¬D¾àJsgi(Mw¤ h$œ’aJ-+6 ¾öÝt…ÔmƒÈ‘Ù§¾¸Ñ™¸U5[«"›——ë(|p5·-–6Nèó¼ªdA`µòÆ`W¶Õh —†UöŠÁ«™ûµ†¤´©0úŒLµqõŽ3#­¡g?«û¸ÜçnÊá¼½´b\?$$(T,þô…=Cu ”PœUhpùí?”{¤&“̃i\ü#tH²OÛú¡´ r+æšâdV£6Š­3Êþlü4•͕܅ OTµCI®‘çgLÀ’»­{ FîîÚ ¾¼•éñ܃7&Ë®×Z@Ïmß: ݸËõh$‘ ¹—uÍ«­›ÓÉÐdÏA;¼¤ae‡orŒ©BtØ‘da˳s{9&§l£,·•Ïê_ªG(×Q2ågƒ•æJv}ÖÁc›5Ù8ÖsTÖ0 SËÙŒø!2¥·;(AÆ4¾ËÔÙ}W¿§åàü¨¹¾ÑÁ± ¡T, jz×A{áz>ñbܬÀŸ€¡“#1¦È'€uTȱ"ÁôG}µ0“ïyw QÀùã‘Q¶†nà{ÇXàb†¾bq$&‘7Rg¨ÇÈ<Å€#FOÿ¿ ­Áð1VêKMÒ ^Dð™p ç/ àÌãHÚëzª;\À9°äÓùó#°Ãˆ÷ Ù¬\DÂ^ʧ¼%ËI4w’ØøJ`?°¤¶¾0·Ëþ“ñŒ9q”a½râS[°LÝnÍO”³j­2{½Û%ÞJdý'V\„ Œl!¥SÞŽ’EÁõz`F†{´4ÏÖ¹LDí wÇLÓ¤Ò’r¦ò[5˜²šgNÚõÉkÿf(#ÕI“^g)ž{zøÖG²5‚“ªÜO6Ò´y5kŒ„a±ctß5ãÌÆÙµÓT òÚ8PdÇò‘(Z4ûùµ(!Ä•râù±ºô`ŠŽQØ’zåAAì™ÑÎæúVh¸oOïx¡=;}ß£á „=É%O|ÒO¤ÑÉçæ}L{;øêuÆ|µµæRWä(š×rbÐôA*õÂ3o\ ŸÀåPC“Däbþ†T¸ù‘iõ¦ÿÇ9úà}²[[.ÙíÂàv>Äý‡¬‘û5>¶ÙP”¥J1HoaK'#ÄÊ£/\Û0pé÷½ýfKs=ó¹%ÃM‰½fžI´âáâ‘ââBDì‡LFžÌ–ñ÷ÿÉpÀþ8íçÈvSf¶k—ñTþâÇžDŸSWGé‰ Õà§ìæxé æ8†áßlSZÏc‰ÆgÚ4­*`%÷½i4g{¡és¤ ù>ÀèÁcÜuŽ"wKNOÊûÛ@°<Ó>ÒP׊±Eòp! pÔÆI¦‘rpz7éFØ{AU×@¦H¦ˆc¾Žàí¿³ÛU|L7®·]~Rv€“÷3ìðÖ,bô.èãVK}yÏ„¡¬‰M™…Âys¸u¸üûÉy´_¹F™ô8óì=¾Ðê^–²sÀÃàÀ+þgÎõ‹=Å=*¼+uëw2¡tÖ¢+|!£p·9ÿ¼6š¯=VaEô’ž>ýA?áo—@% º tj&a qÏ÷äÅþq¾Î‚ÇÄ”æ¹é ˆIoþöãéS“jëö:xº4˜Fi”§;ja…Ä®‡¬#½N‰Wß2zNå“¿Ó~?ôfH3mÍaðñmtFh³ÿ •FÍ Ý"u&Ïz…¦P&MPRÑBq1¢†VÁ&ÏÉå8¼,xχêÑq@èâÃG¡k¡@ª‡é–+eeXÑXÉEò"K§Æqä¶4ÚM7z–á; üïÞž¤iƒh^0[¸T_éG]Æì$RJ‹ÅÔ”Øðß„ëý_ƒs·# dl…Åæ„›¨b;ÑÆê¿ÖuTèèU²wïæ¹é!tŽóBF%ŸAxÿµPH—ªR`4ŸY«Nlþw¬Ø]ëA¹RvKà¡b‘¼-Iø0ů€Oö‹é/®ù'í1þ?zaŽw*Mßð àÃÕ^ÀRÄX[ŠÅ÷RÂ4Œ›,_„Kê@8”¿Ó%h §_‘L%—=½ìŽÈ\ >0£³\þ쥔XßïçêW•9ÓËýnè1O¹î#I³F´Zá5uý&™±eðäuÊ¡ À d’AÇ4úã{ ÉJÌÑÈ* žOœ¢˜£ CË*ã¯Ør xã”c2DZq$zv÷¦X´jÁƒ¾3;­ÛiSϼ’ LQ[üë*> stream xÚmwP\Ͷ5\‚,¸ ww î0Àƒ»{pwIpwwwwBðàîÁþÜï¾{_½ª¿ºêÔ–µ«×^½«º5¹¤­³š‡=Èdfå¨Jª(ÙXY¬ÌìÈÔÔbŽ`3ÄÎVä æh‚Mª`{ ðD¦ˆÙÙ{8BÌ-œ´&tÿÖ Sˆ Ä agmç 1±ð»ºº »:¹0;º2ÿ-RƒÎ`€Ä SRÖ–Q”ÐJ)ª¤À¶`G5@ÙÅØb‡˜€mÀt3;G€õ¿€‰­)ä_œœ˜ÿ!`ë vtþKÌÌÑΠ ¡&"©¤¨cQ€lMòÒËmxÿ¢Á&Ž6ÿêŽàü_Ëô_Ëø¿Ö³Žîÿ¶˜‘@€)ÄÄ` 6‡Ø"³üK7[3;ç¿Ã¦.öÿIý%äô—€ö¯†tS°Ù_´‹µµ"È  ³³±wq;ìLÁ޶;íP ˆµÇÿ÷?gÐ_DlÍÿ*ÇúïÄIâ6U†8ÿ•Ú dýW¢âšàŸ‹Øâbóïzð_=þž¨©­µÇÿlù·6d‘”×PT•eøïü“–°5±3…ØšTÿj r4ýoàŸ´2òïéù™ÿLø¿¾ÈÙâÐeeþ×x°þkýÇÒÿ_”¨¨»›ÀÄÎÆ ~ùûáùÂæó蚸8:‚mÿüo/ÿñÿ$0Øl‚¼üË΄/È2µ)¤ÔW"¦ žafÊHázq²ëB÷#dÀÂÔp÷ŒðZ0Ç •d:ÀX`ótC溑 FÝŸˆ"ÓÿEøXHYfî[µþçkîSm˜Á9œ‰"ÜEø•súÊr 2ýÄ—YÇU²Å¥€QF%m½ð˜¿ã–æom¥èôi°¾ë¼¡‚·*1g,‚óÎ…·–aBs¾m¢^PZ䕨ï†jßpжðlüleº”¹¶isûhú*@«»ÅWiItA.¨å‡íè¦xCbVÇUiäÀdÔñ盦üàc„•¤+‡eÓD›L¬¨£„Ò=E{,ŒóúµT›†,o,Òm)ÞˆåDÑÐ̹¹ m0l´|¢3׈lòyÒ3†ÿ%’Ô!FÓXíîÒ°œzš¿tÊ çœ Vµà3úcߨfÌeªJhÿýÊÃô.¸+Á¼¢Ó×HáD“°eOqÍG&ùöü!e¯¯9zS*©é+€£u ŽÁ8MEv§Êƺ^.»“ÄøQñ‹í1éñRlEãÁÍ1Ì)Gº2¾N¨K"œfðêZ¯ ß‘£5£¦´áËO𖛇ï/Âã}ô¯:AÑøv=VãS¿¹)ñ3ÑöÑúõÊ仕O¬™Ø ÞNUò)ßß#7N,Jâ|±‚é ±òvt<&hVtß ‰ä– ÞY ö]é7ƒ™¿{)/­–?ä«îð}æ…Å}u›„¢#z<†ð©ù·Uˆ•\’ Áðó‰áê/,¦kÇ[ƒ8!=ã”÷ó †¤µµwj«°« –Ÿ{„äZŠR¶Ÿ  _bD÷Œcic~ïð›˜å ±$n:Kiek€§s÷·ì›,·_Q²eµê³ÚQò ÓÊ>ÆjgøÖí¦ß'wz Ë|â˜p)oÍ‚ÑPA+y- ê¤ 9x«ÇeÍ×d Ñxo00hÌríÍ’CîÃýC(ûZn}*;g¼“±÷gB1jª÷O„Ž!Ø®ª^yA±¶$§fI½[›ÚÅ^•ÖÙfÕ‹N4M:èÝm=Idš©»ÚÛüv‰¨?¯?¶áÀ=lMΞÖ+Íœ¨±Éà:HsÅ.÷¦“•fnY“~Ïc9ήv+Fxõûžç: DgôAAcê©)¢»B²XÞ\öXò×liÍÕˆwtø_öÉÍ‹V/ ¹eÎTÀ—o_”Ë‚kÅ®í!\€Kzè"­dO«¸i3K¯G2õ‰™„†ÚǸ¯B—¤ßSb¸M–Ôܵ9\d!c_Ëø+µáºfížo©„¢÷büSƒ 1Ç %;}ØÜâCwéêêJºnMg¶F¿{'Ý>N;9?xÊ ›¥z5bþ±l4àõ$ô2›¶{ˆ#õÓÖZwF[Óºt¶—IHà6Ãö%qÏ;‹-‚üúý§ˆÑ˜ê÷690Ùš› <=Wý¸HþÅIäòD¬_ÿñò•€3BÝ{&em"¥šÇå’˜wḇ¥ºê¹c¤óÉêA©ÊkA„¶ÅýVßý¢ôŽn;*½,le=}³P_nú|ãJVv^6GÝà7ÀË÷È÷&Q% <¥ïyø{_õÛÍÌ çm®O¿Ìø"dÍykEôˆº_á·ÚøíÎDÿ  ¤^çõB$¸gÔûùU„7°Ä .¯ÃbÚ…}\ÓUt;‰úÏ7+Ž’¡$:© g¡Š—×^4 X-Y‰3±©Ï—õ²i,/ÌŠ-™”Ð^À›·¶P±,)N&6ªŒì´Z>žke3Sùòa;”?isÄÖ’Ú_M$ŽA¡fv!ÑßíÒàïœh ©õû눓´Eð6O²ö œ°#U‰„ž?v0¼óè¶-õèn×C€üƒF-ŸCðç%Ëk€Í<õœ~U=-sW‹•.‘C-ù)âʸ¤®Ûƒ€oëöd—3ï^3{“v*€bhJ¼ÅO^^4D›%çZL¦5n“\:£ ã6hz!u‹à‡¦0ut®”ûÌÁ8ÛŽ.•$ð.¸ú¬$¡HªO/™OƒÔÝïVÅ&ñF.ó¾jàª4L$Ÿ¼C¼Xø³¿fÀ¾I^öx–m`KƉ`óÑT'$j¢4ŸÇ¦fô©ô»¬tãÉœŽœsª7\(ëGÉË…gÂ(H*mó3¡Ž‘Ž0¹nPïÉÎõZ‚—'ûùi_7"ÕQÊN4ã*gÞ¨æ2($„ùŸ‘Ã$*k¨<´,rZÚÏ(„¡3€’½üÇ5?L½)<Ë»‡ç*6d$6qÍã¤1úMê' vFqÇÄ­>uÃ#ô 0oŠLt?œ0VWÍžDÆÅÙ"T½½äÂèÅ«­/ÆfN_f)îíU1ª"¢îZ÷Ù©9µ à‘äe’–†& "43A±ïÓû9žßü“ðØÓLàÃ¥Aë%Ózö(Õ ‰6nð~8œäÑ‘ìð/aKnHLUa~ßO Ê*æ¥Ók]+Þ—ö_–» ŠÁÈë¦`I\Y»±wkTY•)¿2¼äF+BøYÏŒov@œ<à?¸ýkÙ•>âªGz?„°Ö$ì7Çë·j•¬]SínêûK»MN+óKYá‡ýŠ5²èØÌ¥Ü[¯ˆ“eÌÈ{a‡P¹J)‰Ë Ï¡-r¾§2QlY/€ðÂ*u’¶ƒHŽ@–ÜC~e4Ð çëN8Bc4qRòR£«mŠ2jó¥ìgËÖl6æéMÆ<=Ž>ÀG/PÕK¸ ú » ;¸FUFÝj•ÿVŒ9ªt:G æ¡6‹bó 9ö‚*“FÅQUr¶¯ dòÁÛ-XLü¨Uÿ¡þçQ‰¯$õžh{MãüµÔË‚_åéûÍÖüQžæLP*Œ”_ŸÑº¶õÜ;ÒAqh e}o¢"_,pY}YçøŽ¹Gˆ\9±åRpô‚p¸¼¦œþA¨@²}õYö‹²›òolÅÁH—Îß“°I>¡E_ŸIDêÊ‘+ò¾ú|/®F±˜Â[q⌋Ûd Îaw´d…¿øÕÙ*Š@N¹ÞÙtçÚ-Õc ¶y'öŒÈKeÍCLߛ0ö¬Îó£ëo÷ã0a†„~K®Õǽ˜§V_¾ÁßÏ›ý)í‰[ ôzü ‹“×â2öaÈ .ýÆÈÞ£\¹q3>®Z¬»íŒ@÷]mÔ="´¿N”B’Ã}œÚhz¸£˜M÷†Ž€K¤—tŇ.6Oê:ÚW'+‡ñY2×…7;ˆM” %‡Ì‘6“YXƒöAS¾ÛÛÞ µÇ næ™ãøÌ:º„×Upó‰ÊV²hÔ,)hÖ•—L˜iÅGèÃ{iÒ*Ò~A<µ2TËô Ì|0agï—D¢ö–K‹DKî¢BJÃÃôCbŽ'7çÊbÄK ñíûÉ1Ð 3¡\3ðÎj+ÓüÉÞŒ7{qÕUlÁˆeE³YÙjz¼ádoƒ-f¾ѧ–ÝlÝ ´¶»{pyFKÞ'鈱V5)Ø(ÕµKé馉îMù¨[Õ…Ž%”ÔžRÐ ²Péž qÌ÷Zºo\ž8%ÁâaïKe¼­‹«6¼ÕTëuVIТÐjÔ L«Á€‡é²SÍ-Lÿ¹ßù§Õ(¸~õçïÑL7k0®,.ò—mšM•Íëk×ru]îPW„>÷!©š6ÓþÁkÑxnõ ¯Î–¯ƒ±Æª’°?‰b q_Ø@Jfoxxá©ëû©'ŠGj„‰e¢ÂÐú—CU6J’>jíÄĹ9 ÏAXdpïd>IW¬{Uè9N¥à¢2Kì0#£ï’¡øI(哱%‘¿Ç<ÐOj¢‹ÐL pOgþŒí´Ç·‰œ÷»õ^tè»2þÒŸSîÛœzGRŽËØËg¬>8çµ½4¬6ÿî ¦Ý×@ÇÍDróžƒÑò‘¦}ªío!²äöt` µåÔJ5ƒþÕ•>flWnÆ’u' {½šµßñ¯Ø:+wº\ éfZE¨?%Úa¦Ç£@zt´wGþ(š/X#0ØþH™FÎúÔKmª…ê6‹Y ,÷v/úÃ(Ri6šÈ*²ñ%¾éÙÂ܈Ò6Ä*^: Úß:<Ô¹èT@!\“ç’ ¥KX)ŽÑ ŽºÈ&=ݘ¸X|× P$O|“©r…2ÍRÎ×µÉßÜ…¸Œà7Ã>ÓnB bw œl‰:$1RÉã Ö‰ôçÄ·šq¼ƒC¿$Jµr òãZèn\j£iÛñiäööŸ“§mðô´“ë@$ÃãY"ßÔ(„¡u‹Î²53Cª}’¹.œ ñ&ùåK~b˜ ‹ŒhÚHÚ÷?ÍÆ”0#o÷} ¸Î#sÄh'­‚ocÓȶBþ%au–.Ѭ9r j?yÉsë5ùz²×¡?«²MànH?ìØý"ÓçüQVâ‚4Àÿ„=A2pÉ2Ñdo²m„¡Ê5[“pâ.ù!Pàyœ ¨v˜0Œ¦+CFå^êËyà…~Ýc©ÇÁáž¡»Ø#nâüOøùrïêHp<´…<8½`kaô…tugS–è~½ÿÿú —3ˆ©à:gMÌó§êA9r<‰ZÝ5Mô€Çï+¤ÖõàÑѺˆƒ†+#üj )ðÒè†¥.l^ëŒÅs˜¤€lMÛ/\¤nN׿ºäv(ç¥zíîs5‹ý$…&öãÉkäý e¾£o,žŸ#žá?»\4¼o©D¨Bµµ°A†d6¥ ³Ç6Ó6ZQ”+•7oC'ùÄqª ¤3x÷±CoÛÅâ‘k’Æ2û¬â”BÜO³pZ Ás|è·×ùÍÍY=jp÷Ëaø+îú¢ì€b¯¾ˆà% ÿ­Ð,Fx"¡…Ðbé´­ŒW¯ü+Îç»10ù=°#N¯^+‹çNIu#5´‚^ß*-®¯¯lÀ¦u·¯‘èK9YªÖ… ªSFɺaedš¶ÚGcsóóL&¤VÖW“VK8P3qRéPdñÖ!ßÉ‚,—q5ú»÷¶øü~ã-„Y4èà_ì´2t&RtºRˆáïhÊ-s­W©ð§Þél´h7ˆ%€¿ŒÉ^A( åR›fŸx_¦N³Þ1]¡[6Ìbä 7PuPl˜á¸A®¬0¹Î<ÔÅ6ÍÕûNE¡­ø#pc¶ µ•ÚûkKÀ£ûEìÝ~xÙÕpºølbU®nE6‡e9ùaÇRï'§ü ÚíöÔ¶À0F[oŒã µ-ÝÔ¾â@œÖ›/³C«A—— >’¤ã%ZrR 8‘æ"ã{ÒAž,©¹EÜ44Ææ,¯ƒJÅ?¯ØßCèvNªÔÆE£ù w9¬U5tï~Ò– ì_~:ºå¸ (ëÍéºn ™ ‰ÊN3;TX˾sàô´Ï×îç¾PJ¯ºz ŸWIåÓªçµ7nL×.Û âï¸Ùm›…ÍÏpoM «7ˆ›:ý¶Ž²ÊIeÜvc ×¹-ãmwøôFZª4$ùãþxf,±ØÀ"LUñŒ<†Fø4Š)ìUù¶¦>%Ä;Éó§éÜ#šù25ÍC1ïi1«¿©B¨G¹æIjBo‚߆ƒ*ЫLþ0æ×>dhqY¨wsúñ"“çžj1ƒü®ŸžðS6¸Rs¨X-~€®Éône£Ì%®Ƙx?b2d€±×pf?ú Å•µUÒEµðläå}TU&¤öžD½8ðHÀ\/¶÷sI‘1½ ¾ZñÊÝN 2RÌCñ¸V0cD&råä_°¸Ü8/V\Bm*ÞÜe÷&º¦Sj¤ €N%mŽE”î©é¡PôøˆåiK"2/Í-7ØÜ?„[iu¯ðòxŸ¶=¼¯ƒïä¯H‡g¥eí0â3%£U Ðšc“/l‰#l„~:NÞxÚq¢Jé“À9! ë®Öhéú/Åj^š¸¦®Ô…tŽyi7ç —PúJ5àwD;ýо‰–1áqS)@»z¾s=J§‘NÈ'Ô¦îfËØãìÐXx¿jlcw5šç.‰ïΆ„@azšyùvÜû/ë„ÄšðlÙÔ‹¦$!:¾ì†ICGÆù¯ñ®õüf5ðœŒb¸ìŽÄÌ/ÀS.ñºj9§.úucsNÏ4MfeüäEZ€£A³$v¹=–ä¢9ËlBR¤êHOPý¬ìíƒå_ïláæFxÙ3ЍS 5UñNØŽá²3v#.ñ›Ål7·Tpa{QþéÓòâÚ6ÑB@èlÚ«n¾-?¹MZ8Ú,Ã]ú¶‹›‘Â{R¤n÷÷ ¬Žï+`QÛ\CÁ.5ã‰4ø&9¬[Ì_v äµ>5¹ôæi#¨÷àÞ×8nÍtéе¼T.6lÝÄ–aÊñåå …B”Çî‰À†f´ /VçH?Q²ÀÊñú¨äŽUh?Þݶ©ÖÍüI²:gÍiÒdzýƒßrz“¶ÁnhvpéTt¶Ùµ”Ä/œ›ÛE°2+´nÙ9Oýxw©ûú§7ßEkÕô×}RºÂñ%ì'­Ìø½é<,[8©¤z3ï 4OT’¶Ø%<¦â­¢®¢s–æTùÑǦעz,Æ>·!ÄWXúkUoNx7,Ù6ádW}Wz:JH¢šEâf×å$å„u‡ ³ô²Ï¼¤„±\’4Íö‹µ.ŠHdèJn«®rƒ¬Dñ‡gºÜ‡²=V&8“Hstµ‚do$R*—ÑõĨ ’¨¾i~ÔWîø…½ š3]Æ› ‰»7‘?Í_hÎä?⹑&· šù…‹Ì‹¹\O÷‡33ë´û/&%G…²WŽ|ñ“Ùª0í饇)NEW˜øk0¢ßCõƒ×^Rß÷žF‡wÈšõS… Ç®b”Äü+èGóEÁÔVágZ‡ŸåÒr3€­wXai~Õ¯Ò$Â#+‰ÈϽe[bÔ’~"òH_z44Ë[eLiµŸwxg½¾ð¢A¾m€è2\9éæAEéåh"šz;qþ\ì¾6$¼P!Æ*Ÿ:†ãzRâD„–k ]=cŸûíäøðÃ&0­Téí-aâÕª8ŠîAg`C7¹s·/›ddõuÏ`‰gšp)¾K‰Eêû‹4ó=`jýø¿O';bºÆŒÜÛ>¼Ó­ßz„l¥+~Íaàºî-Õ²á׃µ[r†nú7†Ä`‰ƒopÍ© ‚¦ynéÊÁæÞt­W+¼V>v-±T üåÈ]†Ûsvn¬óB*+ùsu‰7•Ξ1,£æ®´?Cxd –hÎ/ë0}B¨ˆå¸‰,óÕ3›¡‘YW® qñ8¶‡SÏ%Z ©5¾Öh+ur3DÿõËb.jEtGûTx‚÷™M9õ<“´4ss>³ÿ\Õ:êðà»èïÙ)#úÔùß+.Þkpr% FoÛ¦ßG³¬Ý’CrfMø¢rS›½ÍjE®åˆIZI¸yжåeGBšè ñË<ø¢0gð*/Q¤?†9hkÖ2O¡"Ò:8ñ1‡¦Ch£SŠ y¡íöEÛ&½£ÃÆ ‹üõ= ;ϽÚCg4žÂ™µ`d,Û3j[øõ“œ @”æ•rô½ˆ‚ìÅþ(ã+šê'ìæí²‘‹†<Æu“IÌönaò=DñŒ±Jê¤:¦?å=t¦í0m}Èn¬´Ô$°#=²˜Ç÷ÌH©±—Ѿ§uÄ\ÇìR ñ¢´:J?ˆ§E>F`Ãm‹f42$±/…Ë}ú5ÔeV1‡š›Ì£·‚ø ‹U­_hð5åæøÃîw}kò¬{’Ò.žlHÊØ'û'1¿NÊÞ0âX£BîBö÷¬µJh#»˜ÇñœÈÄ¢ƒ?éŸ|ˆÎôX K}£WŠ73O^¼¿?¹”,ß+)ê”bû´;DšrL·rí©¹§“²#qd„ÎÀE%öäb!Šníj•õÍ,k„ÅÀ¾mHŠ6¢W; &ÚÞ 6Ç? wØ¥qKÝ`æG0u©H²ÎBŸ…v5èýÈ€õBWþéFŒ¦Û$Ï'ïÛ$êÂW¢7K/•_¥.Ù4§ÌDæO ¿åçø‡š™õ¶í~µ„[ yž^e"Äè$­‚ÅÚ µqº¢~W_ˆ`N»¬È{ˆ9†¨„3?ñ»„’¯— GFÊæ")˜ç…1½êÜ~“é~KáÆÓÓ|Ò6;_F„¡çUίõAä™;t†>$›­äÆ™5ÓB%µô{¯=V ÏSƦS¨™îÙè¥&2€/†;Òi*«ÃÀ§Hƒ‹o°Œí÷÷,+—²L( 3Çšî5‹RŒ]K§2P,Z.¼»Ì[·3ÇZ[oŒ÷)º‘&² ”‚ywZ­úFE4„ÙÙvÈšWoð·m=={-)£0âýsû¿ƒ ¯q´RehT³/n2úZøšD7ìd( ]§7LLuó$%Œ;Ÿn* ÂYPTo¬†OEvFˬ@[1§“€íOÜ÷Š Ž"B #ÕoìÉß?úáCxÈøN¬3-jÜg>¹÷ãäwUD%1HÛ]SA_9ÿ°V$øä³E‹¬yTmZ}nøDÛ¢èpjÁ&Få©%1"Ù!Tm¾¨5#½ºvLÖ8↡ó¾Á0Õrû“zÈõ`2³émQŠ®ˆO³mau^-O©-Š6NÕ}&‰§Ä[¦÷ƒŒ¡œžpé–SÁì4«ó|6©Šˆ¸PF¬Œ‘wß® £‰4Ï€°¯Õ²©¦ƒ­¶Ï6εíæsÆ¢•@ÞòŽcál Çç┿ 6Û%÷UÑÉ®;c¶ê‡ó‚«ßku«2ª¿}ÍG ¡ƒL;3˜í¸ÒK+ëî²þò÷O›3#}&£¹s'€cl$ÇÃÒvVv’¾«ëDW×è1ÿ,|èÔ«.ÅÖëMIC"/‘cw{º_ƒŽ!vfç›m—Ý!>´gÈŽ£¦èHÉ ùÄ[ C(<‰§•¼L?P „GÃÛÙ+ãW‚;­´û§Q\"EÛq©<Î{›àÞ`h˜"³bUVqwA/­ÔÙ ÊRE­¶„\Cõ)s¯°;íYüŽÍé·-¾IHº‰QÒ)œíÀFˆ¾n7Õ¥˜÷›£¼…1gí§9iÒa+ĪmŒÐäÚ±ø“ÕúAúÁ1”÷jž…ÃÍÑe€~›W±¦!Ÿ5…|\¬ï0»[ü #\BÆTºäº(ŽÞFÈÆüÕËœÁˆ·ÙÓYË]–È{QøÆãëhÁ­Ø4媳³Ú1eµ ï Ïßµý.äç¡Ý¿4&1½ – c"I'ôs`òÕ›ÒÄÍA•Ëó8¸År˜Â^+ý5²6ÏVžj?ç0´ódù.körK3|ñU‚‡ù6­¶¸*ܰƒàÀüXC ÷_¹¦kä7–›“¥/9Iú†&ý¡÷ËÏúv ‚rýº®˜"fÝxLy_ž¯.+რÕLˆ×Ç#ýòm+Jq wqÊ9Ðc˜¨œ´XI¯ïJË1K“ –Mß(‚w¢Ø¡¨Óˆ•²œ'ÝL±e~í‰Ç«7âø ¢1”éÚÓ¾rèËy9°ó0:VÚUä{:~i–5ÊpŸ[Â.³Ê„JfÐ%e³(Œ¢éž&ÑUDÙDSÿ¡ºžl/ðë»Åû5r×!g¥"cœ²Â¥¯:½îVwQ ¢C9.ÌZ1{rG »Ejܼ¢-ZÄþcV’z:ò Ý¢› ÏIö¬È°ÚqˆûX€°=d$²×íãBIãn¡Ãyr6Áð5)qôèØº¤ÍEã`lžÓ“-5V‡Ó Mðí†u§uÉ@ €z¦Ô:@ß—Ì(·|¼5°-¤)|OYnê°ÔYìèk®¸ÇmE.JÔáD¨M’&'àªön·É+²þBÆm¡GáÁ2¬ ªk$zuØŽ‹‘¾ˆKl¦„ò¶¾}¸[A‰@f–p öêÏÖ×¾¨JG±×tìÂ,NxíUR5/·Ò*º¡Yæ·B†,]ø¡ç«`¿º‡á´ žn{|úáq%ý–b@ $~Å3W$4»ŽÖnûØß?o>h棉á{Û‰k%Ø:RÔMu_õAŠªâ“•ø¦T‹³x€ù[á%Ø  Q‰U3q5†PkÍKÃF¨™3›')˜sk{š±ôô.„¬SüñxiM¦%i¬Ä[VU_&ž§tÔFx¾OaPî“Ê »[UÙ«Ô¡†/®ÚyºÊ//«l+bÒìÁǬø Gm…ö Ö•§MÖ³ÖR§&ÒÑÎ:e«V©0 m˜¢JGþÂy®œÞb<«Éá`Ê;¿ØîÕ‚êÀ>)8Т¬5PásøqãŽÍ"Öâ>‚S©¼éºÀÍ" $(œËÏ,@•¸O¯_ÔgòÅ)©;IL&¨䬋Žâ´iÂö™sòÙdkƒÅ¾]s½?Ó|Àd,¡Ð¾ÎZ ð,\OaN?—’â%Œaü ϳ3ë G½‹çš’ä䨻ɮ!®ŒÎÿºÐ† Õ¹á„ÆŠü¼ÿžsX¡òtòÚ5\­)ž¦JŒŠ'Ù,ôfMБ ¤Ì^ :¯5ðè^TqƒTú´Å¡ñ›  …ãµÖ ¾ –'»t\’®öÊŠ D&àÕ'nßìÐòÛƒ.¬¾žx²6 `1ÜùÓÁ¯5ðL™å“ Á4ARkôž0Ú~¬ù@èGß~Œ½Â‚Ë…$òzXŽdÆzDÈòŸ_)9­y»Vœ¤~6ð„½®mceÚÿlÇZk[{â0††û8à~ǃ:íN„›ý#%e+{û3^¢ÍŠI#˜M×j…Šî‰ÉͦGñ}²Ô^Ü^\n¬OïáéXN?àVOØš¥ÄøDX£Ñ_Ì6¶·´aƒ5xåè™?ÍqG>ȘMîÕîÔvùɲu¼g“¡D§¾H"˜[¨ÏÉÉQE‘ˉ²Œ>Ë©ÂÊ^^=,Áo>ìFµªÊ-þó&ÂŒeo¯ÔDaØcS)Á±¿öMŒ;Ha“ò¥×ê‹ç±É‰0Krýg0•´´9ö·&ÝW8ây–y|õ¯2‹¨3sšþáæÞ‡=iHRîf~߈SVdåM:3àª^à±)9ÆØïRùÉ„8á8Ú/TÜĉ«¨Þ‡ÇuOu’•ÅZYÀT,þ”ðÙ)Ttו¬Žô9¬kœì–\Eï¼=ÊâÇì xçã$£_<¯Æ#W†«0ˆFÀµŸl±ZáXÔö}—’Šçb˜\Y@Äý˜xþ³s‰!ü™–ëjàr[.ù?! ç:% ÈCPŸ<áš —G~rzôžÁÜ*˜’lí¦H‘¤iáQäŒÊŒ‹„Ë}JåN´—2Uò¼%~Üâ &/%çc;ÄÙÓ6ê®»¶ Ù9gÊ¥CmzÞtlõƒNÏ'_RN,w™ÓtTr%O¡v§ÑZœà…>=æ ØK{Sz½¬¼\ºÓ«¤¬(Ÿ_]QÇßM:Ãà2Nó9©Ò6#‡æˆŒœHëa¯j$æ§O¾'Õï\vßÐÔ¯’¤Êþ»xÆ[@¶êë¶'21†íÇÿªñ÷– rX þ*3y€#¹4€£-tíö.l,„rÐð‚·ßo‰Éõ9á:‰»#xz‘ŽÙÒ$BÀ…Åå*œ¨Â %²ŽuLFÚ[4åÃÊ‚C¿x˜\8‡L #gÄ^^{Ư/3Ÿ1ëš7³ˆÅNªGc>EØ"nÔ{Í-;F§§ ÀN;ó ¾ï,Oa¦ÓIyè¡Ú¸‘<›Þ'ž0ÌzÖ§îH½&ÇÍ%ªÂc¿~cPB³4µ®;¥í‰ øŽ üJ •ÜL(ÄÁoµ1Xô]è”3VöVM¨æ¸ï3µ£æyܸ A û“éAÿ›Rþ@BXcJz@®›™_ØDMXò9…w_ب«Ÿ:ô—X> Ê‹ì5¯SÛ~Ÿ¼¬L,>@9% ¨ÍàEáÓ=|¨'÷kûcÄ@3i¦hB Íû¶Z:Vô<[®jû yH©£h‡ˆTùœë6·š§ìÚo²ë—‰•‰ΚšwrðÀ—´#´$3ÿâõ­Œ6ÂØÉLJ6´uï>5lj´®Z¢ŒMð#nèÃÒ†œñbÔ‹Iu-[.E¨¦¥¡ß-ürììù¸…Üí¡Æ <•™i­é«ßx¸D»ðö’‡°CŒ½åä”ûzkO*}Ä=–¶¬Ú3²%1ä롽tö¸fé"p¹„– &Î(p~ÞV;™ð¸2<¢²—ꙨҜh’3Ñ«~¾~9Ý‘/°¡wé_ {liZAŒ!½wžI]÷Õ&øº?Ó5f¤é±KÀSÄN×jž“õ³.¬ Äe›Â©å§½ X"ü…Žê¬;®š ­Û Em׉·¿, Î 1òë§ÔŒNgx×ôyÃ[ïÇ|4odÓõêôxHÐ"¡æ²¹$ØKMÐãóG¸õS{SÝS‘ß÷n,‘ÑZ•ÁYJ C¸|ȺÐXaä±oµa kü”•M3üž8-5X0Y3–iý‰÷³ƒ`™F‹CœËÖéÏ*ùÅ‚}¢Ÿø1,±žå'•&.h»šûT«AÔ‹’§Üa4d­)LÔVQŒÊ—LŸRCìáVDÐ0²Ð±ŠÊÖ·jü/|èÿ»F˜u endstream endobj 65 0 obj << /Length1 721 /Length2 8822 /Length3 0 /Length 9405 /Filter /FlateDecode >> stream xÚmxeP\íÒ-Üwww›™ÁÝ]ƒ;w  H$ƒ îîN€›óžïœ¯î­[ûÏêîÕõ¬^O×®]›žV qÓñvq³ssp}hËi©r ò¸8x±èé¥a K70"céúÐÚ g7€‡‹‹‹ uö†míÜLÖÌÿ$zŽ–@°Ѓ:B=ÀÖv Ww˜»Çß&màfØ€Aiu CE5y“¼š.@Á,îVŽ`k€ Øq1l 0€ã¿€5ÿK“+Ç?  ˜Û_a60¨@UVGRN]M +Í©# °„* Û!n®þ²AÖ0§MÇpû/r´ü/²ú/úoæõoÄÅÍ ‚­ÝV [0‹ó_¾)Bl §îÎÿ)ýäúW€é¯‡Ì Èæ/ÛÝÑQÍÒ `’†:9»»`U(ƒ´ N–ÿ°,ÀŽÞÿ_Þÿ0Ý,ÿú ±ýë׿S`W9°¨vûkµ¥ã_‹þÉëƒþ}/ª ØÝéßý ¿~ü½Q âèý?GþãŸÿÚe$©,Íúßø§, ±†Á[€¶Û_/-aÀÿ&þ)kX‚ÿ½=ÿóŸmpÿo¬jé{Œ¹8þµ\ÿzþƒLÿ—%%õòeçä°ór ¸yùïùÞûÿ_r­Ýa0ÄíÃÿÎòŸøŸE¼@ÖX ³Pká0ûŒÖˆÊÙbx*+|ÂB—u–qn¼ûÔ˜Üo4ß:¦¸Ð¡(ôÄ¡úl%ºv´ªxÑòÖ2„³3:Ge:KqWJWeP·ü ùé¾1ÊìEÜÉZ å4úÜ-kq!DƒeŒ/'ÿ NÉ¥\”@ž;΢¢£%i~ú "ÏlÊH˜môŒÚ`­Å‡Û…X‰ß­/ E†®áœÒ“›ÛU;oE•, ¤µŽ.2w΄ÕL3g7¨ŸÚ°ÓÔ»ßßQNl~Eì01Ó36*û“1ÔÚÆï[¢Â,Xå&ÞäùÕí#{ñ†™í( ª7gʇ#9OÞ^Ç Ê—äQTƒ ” ´+Ѳæ/ÅÌŒƒwIeئh<Ú—Ù1ëy®|vû×òÔ5Žã@âiV4õáÙú4›²“%¡£ÔÑ¢I»ŸvE2@‹î]¾âß%ù¤Šóôú(A£rõæ­d‚oG?I<©ZŒôn?GÉ&ÕÏüèfÄXî<»Ã¨²°38l Òd=ýì·ã~ûˆð#˜61ÖË>‹ ÆÕôA ¹%üˆŒMškaŸ½uzOaáêC LRÚŸÎ WWu ï´[µ•ºCcgÀ|È¥6^Õ'±¡\ÀT~yíï"ÖÈ5aþ'x R‡ã'›½w:· sÞa•=µ—¦1w® ™E‹&¡ÚBhq­N”GX_b«=@f¤guŽâ%û„ÐØÕÊ ‰…[ÙOOµ½Æ”=ž ¬ *Ù.Š¢qp¤¾âÝ{Ñ)À¹éBê73jzÛ2—|*N¯ŸÀÒh;>_ß#¼½F»q“&Ì2wM sTœÕ\}š´Ò䜴P>³:2W •,¯Ò6,(€Tó3`œüÅâüx=¿XÈ|÷ÔÙ4¬%ñ|5Šº˜#KŒv¥õÓî3¨Ä(Q‹h`H/e?cóÿÜ}®Ÿö}눇@M†–ù!ÝßÈyëÝÔ˜!3M;£DD -™7Òy•:¹ªýVºZCÑ,ucCûïþþ¬ÀÂà›ÀvyFÁ« ßÇ$úÍ’¸ÜŒNtáÐhL›»Ÿü&V|¼Ý#Áà7f=Ï\……#4ÿ½ðöÂh¿8úG ½Õ‰± ¾¢ ê^øCƾh•GWòw+>‹ÊÞ 1ØT7Uë”û5;€g¤ËM³2š2.A1Mâ°Gæ¦AW ¬,êði¹ýqôý8—ÀþK³üz޶¹T©œŒ†ü¥]Œ`©x_K ²²Þœ¯Z.%]¡f-î­¸''xÓüsŒ.dnÌLàŒÕ —gù©îáK¦·JÒÆ`v3j® µÛ›…ý/ÉÜõ¥µ?w¹?$øé‹6»~³pŒ™½Y8R:°b¢5u¿3àŠuÒu5d:ëz‘;¯f^à&G¹t>ÆÃG}$-’AX†ùùWVÌ¿iÿ\&7ù zîì»ú—ü¨\¼™®¨â4ù;äók”ša¬®¢‹.ž8½~ßS£–Z¶còŸ5lƒžJc0K}^7)@ÇT¿™ö{e•º›Yq ¾Kjí_Â%‚µÀ¢»`šþ¥¼Ã@`+0´+þðêyo!rÂIK)Œ¦úƒL¾Ò gËw™yEO%ò¹?GÈËâÚ2ÃÈêÖ––%!SÅŽjb*–L.Krv-êºmµ‘y`7ž«x´J©Þ ¥ì³‹.΢ïùG-•õÏ”îÛ›yk gq Ѧ÷Ø®¬ë9xWœuñ£¼ñ9‡°Îq·Ó,Íõ ƒ†°C_ægÅH\2„|Å+óï\æ•—1Ôpˆü¿²0‰M¡¦á†Lù¹f¯–â_ã±ïñ?Ë”œ±¢G/è÷!°uöH-.ê®G£øY~+Ë|#À'ß5 §ä‘ðqp¸²eŒé¡zPDŸJ‰”ìrXh„ôvÄãËec‚Z(¥}Ãý@K@9’ð.É h@PéšÄˆ{Ö…eš™äÆÁ{\öõ¾lN‚VEñÍ46dµo+kJ’ÍD&Œ èù¦ònÁ캞ýÆ”ei×1eû~kÕòLð¢|ŒUFÒâÐ#d_}»ÞŠP!`lÚÀdmœ‰÷ãÝöâ‡1AèϳÇ\6£²;7Ž{Ã_Ÿ\Ôž5qéÖtýðU’Þº÷r²¢dÑ_Î*åëKãG¸Fm¼¯s¦¡)|àÊúЮBU£u,±r7úqQÔ¢W_FJï7* UE: ý>GlÔG=MS4Ô"’R„â@™xPÏnC TGÛñ§øØˆÊbq¼%°ÌTíÃé¶Cxϸµx7ü‘–7L3~Ô™ß@’;Þ[]/ÞAe0,¨½]›rBµ~?°®y)rÝ«ñó3 Ïù·wä0Fúè„pÍèèé £ªÏ Íž & D=[:é"éeK´\J­î—ŸM.|= Gܯç‡ÙsÍ1fá‹\ѳ7)Þ§Þܳ%3.âzÉcÂŽŽUéÚ~CÕy1’ ׬×ò_»¾þº±»¢“uosûC¯ÍàÙZ™ºwºÒKÅRà€ZÓ™6Ùãü¬¯=¥ôÿìý3„Cƒ®ZÉÀ¢a)›\¶™dN,ŒPdï´0n '\R8ù$;ôô"‰¸W5”BÄüð)/„Îw½KËà¢ÃÁËRåu5ëáEXL«M*ÔÖƒŸ¨¿Šž‹¦ˆƒÝ«y"]Á(·5'=Ô—¡Ç¶Ærñ½t?ÜÁñ·ñ7‹DŠGý5øOúÚ÷jÒÁ.ÈFNkË-õ€dL"7hô¨û\#VR­Ø§õ8¹ŽX[<ëé5ù»ã®"!š7hÀ±(€õ0K¯v‘3»¾ç l¹G´Ü}âY§¢¨ùãSØG6 é©:ËVßHïq\±À˜÷ëÏ‚´W²®YœÌ'Óô)üY 6ÆWÎHÉÝ鵃=‘Sªq?L•ÆpSâǾñÒ=e(¶ûX*2Ÿ0FÒa_‘IüΓeÁ&)%C+R¹ˆJoÀübsX#Ä ùÚâjÎÝ5«¹„wد3Û¿h>sŸy婆àãC#Éà,$/‚Î&öy½IÆÃGÅŠò›¯piÐRmoÏ–Ï“ ß´ç‹5ÇXn¾AÂH¬œRN\À¿ÖQM)½‚ß¶$ßÛÕùã”z&†Í˜/h|ò~( LQ¯³¢ýæù¿?ã…ȸß×ÓÍ!²Üœª ÓÅ®§Œ”?PÛ2è0#š³CpŽVU-¶¸íµI;d/+ç’l29p©ðî ðÈ`=uò2›ÓÁÈœ5¦ g+â–d|òÓ é_ýÂÞ©Dê§çÙOLêì¯ R†fÑ‚¼_U¶ »wÒLÅ”¨‚–ÄO°•k kÙ£Q“Ÿ¼"O;ˆn6 H]G(Ð\ÂÌ?=©<”Þ¨ò^Û&­D´Úáè*·•ÚZ•ò6V4ªüVüº¹ýZ˜Ë¥©‚z¸ÏjÚΫ-‘Ç[6Hнƥ:ÂBߦêôƒ7s1o,;€1ºúù< WûÅT}A›Y­éøàW‚$©à6éyvY•ÄÖ_—ÞV™X@»þ¥VB´¢’Ó»e"’祅bÉÇסs) uÉÝÐV“sJVˆ/QmÅø“r-¿¿RÅÿ~††ÓÂJjá}8_³‹Åï¬R½¶n7ä ܯi·W¤¿ÕL¾ …ð%5°´!€oG#Þã9>{g^¬y/”9Þ¿@;¼sÖ]çmêš[÷è·ÛÊQ•qòq²ž£Ù]Ò%ñ h—üÕªUYxƒsx›ìoàÑgü9æü¢v‚3›­©µæ-K²ˆT¦ž7¿‡! ˆÙvП~1B…BcQyZÆ„7¥àè<8Â1å)€E€—Õ%§0o?KEßfFÍ%¨ÛðòŒ–ö–·E(핎Ýlÿ¼þ(Ÿ‚/-+9¸4G™——àjù.±ŠdÌQùN¯ÎÄêÒ±Îâ¤ð‘=Mµ2!^›”scÒèXòg™ Ç¥HÜör'º©É&/•­Ý(¬Žk+ tdBj•ÐÊE6Ú (ŠÖz *ÓeRsuÆk°ñ ú¡LpÂü|Ä`™N ˆ¾ïž*jšÔ†i‡YÇ–,u÷z;Þ1Êdu¡6º?’|Üâ¯õÞzÆÐЮÁ Iwì©ø~ Ly¿(ØøÍc¾®0ì’Î@·¸6ÕO2é_EÊrb“x"ÖJ%ÁäÍÁÍJ‹rêµÇb<àé\˜â0K*׈4±ÝüuÙ ð[èâZViÎeóÇHý‹tV\Ïž£«[ÒÂy¸sÁ³Z(te-A3¹ÌÃjÙ‹ýüñ$ãf>|³<”Lü®ÚÈqF‰•×;7^=²¸æÊË·¨!/DBè)Ǹï~VÆöÿ´Ø@ô,Ž`Où³?¥xŽwñ‘Ô€|#"7>)=ÇM˜8Œ‡qSÀ¡ì2®ýቑòƒæoë/¨1üíÕ©²1+–™šÒøŸHC°Q¼]zb‹ýJ[.Vï «ê^¤R9µBÐG*ÆÜ ޤ‰3ií˜ ¿ÔôøN?rë¥A»·J»áY{ å‰n¯,¤ÄÓK~¤ÚyŒFqþD_$Ä@Ë ½åâÇ®œß=ôî½G£o¶Krçæ®æ“v'¦œ~~Ù²†R˜÷=·ÙºÄyn®ä/Úè½vþÄÁ#%âÁؙ̻¤‡=a“Fv-ÏâÝ€O¥ev[z‹|Â, ¸<ÑQ†‰uyžÜNCŒŠì*ÝæÌ,uÆçÆ…;Þ¡è”ÕÝ&ƒæáƒEÛ¸uF¥}U$K´]…¤:¹½ È«f¡ž·Ã8eÄá_O[8Ìgû²ôÆ/­©š)§x#ptëêÔ±ü€RµTS©cr#¶eþ–†R3FþeÔ™Z2S€•`¯øD|Ç.Þ²ó¯¾;"Ix,ö)‘1'½6ÚP!ñÂD,¢ø#º2Þm’\Ûºv“Ín[Š/µëdÅ¢‰RÝ b¬æõöÖMŸ9œ˜_cÝØbéèg*“ ó}á‡@ å¼Nœª/[ xj«‚„eez]ûcyÞªû}ø!¹ÍÅJ m¦ŸÆL{s4pãªá÷v×>æ !y6/axˆC}¶íð7¨§~5üËùŸvÏG©’c¡„LD(„c¢Û6ù®ø,òB9í^öŽjÚ¦/¿xz’Ï=–é<Öë‹NBóÝÓ&óhyVEùTÓ¬øÌ¢K®–:ÔšÒ´²ý[€¤  ÈDn…£šA·ieXHÖxF¶ldÏMøÎm­ýæCŸ¤Ÿfƒ Ëk?ÙyL¡- ”J’^œÝ‘`Þ*K3 Ý…é`Ý÷Sû/Ð ¦¼-Ã.9þpµtdÇwÏ’6}±þ‹Q?À¤J½§VojZa $ï¬Ì–Pˆ_{éÂv×ïÍo¶ŽÞ—êïÀo#qãµ$ ”TÞî½×ŒóÈ*Í¿9²ö¥~S5/2\ ¼·]_±Åæ*ô£*>”åüxxà[[™í´”st| ÌùE7ÛBq]U"³¸¸&\}EÓDŒys¬Ä}´ìxÝýMM÷é¶'ôŽY:’ó°P…ðg`:ŽA?<Ù~BŒ×)Íš¢/lŒKöÝ'ãçX€%HƒÎª#ôtë¡Ò¦Ö`õ“w6@5vËÛ*(ÿÊ¢b¶-CütNÀuˆÇ7ü”×ñOlÇ5–sN%†×êÖÑÊ5&Ø€íüî-/ø‚V/@•®Äš³¯\½¼6U&&³ÓDž“i+vz­p=iž¢Òß¿ÕXStyEâ{U°1²¬Ê½è÷=ã'r½€ò¡\·ö‹(@l!uÓ9g×Î!5žVË¢âÖB­-ª×N›×&•ÕOú\MmÞ’ÖaJÑ?j¼>ë.ÈcŠºúD;D“X_é‰>ëjXtÖrÏïv8v‚ ‡£öòÅzJ»?vbB¢üÖWÿ«´fg™ HÌßµòKOäa„ym YÁ‚5æûà³~¸ü.ä}+Õé|å‹ðçÌ@7÷Yz‘Ö»q®Ø<ñáÜ;Øò) ±‹v<“¨ž*p)AºAÈÒ€9ÆN󤲎DÁCXV|••%fwpæ½ì‘?ñzyI5z]aëüµü#«¦äïþÏ!lUì½,NÝ#!É5/t­—k´»lo:¤™Ú÷ ”õ½îYïÓ+EB‡ Ë’eøŒ(»GD¶ù©”ƒhÙpRÿ˜ †s¢÷‰¨©‹Ž#c§Éâ6ʇãtû0Ä9`+™½ .m©€»`[á·ÁϽ^y âŒÒ©QÐoÑnñB‰Œ n–f퓲sœ?©d–¬û9hN5úß\F“佨„q¯©JI÷C…Ë '=—=nr¿ÁaPô—yÏo¹1Î øG„^¾¡y-š¨m†¶0Â¥OÑïP‘9˜ Ì -wphªæ¨ºl\jgùÂ’ÌÕ« l´$yŸQžÚ ÒŒÉ9é…O¿¡5.BÄúODp;>,y~ >E5V¨÷ï@â¯v5^bíòSçáÝÍÏÈÖSo*W–÷F•J¡Cc(ig«¿«"ñÞ6Ôs«øç»øˆ';Ú<Lå>çÖS‡î+nÈXóK¨¨}(y@taÿ8ªÍ Ðä³+šJÝé2Îûû¶Ñ“>A±tH"±™ÜÔäòçùƒaDE=þ:f·Û³:§˜ëø+z…e€>VJ4¶Í1í„MÄsH?ѳ±Yßk 7ºGÕNI/3Épª>:ŽüROÌ2Urðì&âE!>Ö“#Xë…XL±S¥Òöº„VÉO B/ŠÞëÇ>"¥r-œ/;$€Ì[«ñëü†§Vx(÷ ŽKT¹_-ʹõppžýÙúz“½p—ÿXt#L½e‘päÏ*¤f²m&\>bˆz¥Ëiß{WÂÌR¬*x© tY¯³n\òk˜¾äÛ¦á‹+ønªå_“? éZjcúlê¾~iÏÑÑ,i%W€qJ³õ½ìŒ©œŒ<¿ˆó/Ü,íüîB´=-ÔSËó‘¿Oöm_¸JtÆÖ–6¹Ó«[¸°Õܳ2@ÞåŸÙú¿æ 1<‹ÀûZ–ºéýá›Ì ¤¨pï‚üΚ<­E䛀r0Ç:ðû|?üLH†êƒ=%:£˜µ_ocàÇKN,¾]HÊÇÿ„;­Üjè¿AìLüHDÒ½,lÍ÷ ‚” ƒÑïV‘¸Ê¢#(}ìym…rÍÆ¢¨‡å¸ÞW„P³áQDôÁ¦mæìB;#]*úËøu Ѥc ³jç€ý×Äwn¶ôBˆOÊÈo³…èu‚¯ÂÒ9oì‹_v]^ª¸pvÔ°xº*Z9_™®¶ÍÈX¢Çfðˆzd‹^FsoOª†UfÖb…0…JÈ—ˆ @~±Ðb:¡ÅÏç}Äà¢îëÝç÷dKÄY°>ˆ7ÔˆäBsU¢9?$L°«0òqÜj^ý¡Û$±2<¥Ë·¿}?íL¦Í0V/ž/•äÕš¤—ç»P‘bñ+?ëÂ(È9¦JRósšívµ³øþƒmô,n!]¥l\z÷ŠxtµSÉá/ê3í®²9ú¬‡¼K;^ÃnF°ŠMõSÿ5CUá¯ÌXúÆi,‰¤çXÏÉxeF¹(±’ÖÙ…ØØOAК¯+î;&'vÔ\¯‘aïDÙ‰±>›KRøV—õ3®æ¿LI¦£Ù½¡ÇËq¤¦Ïá¿2ˆWõ¡Œ>a×éÿš<[Dš…urˆK]„öm7àÔÉC¡…aÈi}+¸DÀe±ð›+—÷ȦÖ;*zºõ„WŸmdp‚˜ëä][n¼'÷–ô( ç$ S”dù™¨è79w•£¦O{™Çå´ÚßLäwJãZ­ÎÚ f?ÎÝØ‚L¼Ò’ˆ]„¿hId5ºáMïëÍ4Ë¥D€·D …ÓžŸ¡ˆÐoû§cj¼ÄÈ Qò¼„ Ò7N•øñíIHv W”ª™ÝfºéYÛ5/|L î ,áŽíO‘v{¹y ³¥"``õøãbD¢¨X¯ÅÇ/Ç::Nj»GãçWа‚éCVJ@â{•èæ¨äd¹¿²ú¨¬,1 I¢I{)ªPÞhƒØR´Zñ%„ N8…aߌÔ_¡¬1”X4Ô8~ŸÖmºûnµ‚þHŽÓ¥¤8ƒn*uø4 kìÆô ‡t}öCC°6ézB3`qñ4Œf$±~¬ÓݳóA§~I½Ãmp .ŒŸú­êïdWŠuïå£x*·½èOÜÝò{‚¼:Cé¡½ì¸Øbü8E¿u¸ÍÐöE¹):+Ôˆíñ¦úE?KáÄï`n, a9¼^¯é’]ÅômGR1±±fÈóv\œX)ýqÇîjŽžc]Í øê“?;oêSf?4Ô3ÍŽáµ-µ¿"U,óCò Ýï\n|Ä- ­7¬úy6åÅÉu¿Å=t9Q°}+ÞI_«fš zw…—’é§àùÚßËççXüi˜~%i÷vd­=JÑJþXk?ïÕ‘7ÂËÌ9?Tz¢äÿ5‚O`Y¾|ö* žnÓÍÏ5ý:¨…Öñª¨ÿ°,uÃI‡‚féÁ÷]µ|ÓáÓ[4óÏE¥×yêru‘GßZ•Ëvøs15Ç„Bß¾x\¤ª½ê\à¿tì \ÀÔÒ„j¼ŒÈæ- r;’°^øœöˆj!<Ì1Qt£ã#Þ±ï®cõ>“mÅQF¸gfnê…k£´TÅÑkǘ|g½¨_„wø»µ7d«„®6§aýé7›».Ñ.8¢cÇ-“¥%致ÛÞf…ÂàH¦ ˆñÔ`äT—2ãñ­9kà±(áÍ#†9¥òËVÔNÛ‡‹3*!´ãö·ñ¿SöÅŸòèMo)IJ§/Ž În{/hɹ ù 7ý!VWl NУäM1î$ËÖòÛ”ã'ÈÒ‹¬AZŒ" ß#MœÞˆËô» —./«þB2·ê¬Áˆ{ÅZŒ°£)ˆV,_[üK¡{ÔîÓ$7É“¹y‹GçÁìòÅ&M‹ö ã×™>Ãé9qž<º~ÊðóžG¸¯;Vyíp)-I7’0Òn¯•ªyiGXaÉ9g{]%Vô,†ïÙ^\àÞ2ï‹Ò/ Žrî71‚ºôÎò^œ}I¬8Zꊘ… he{’ož‰6#k=ytØ“Âæªu^ø”äZ<àæÛ3ŠÕ¥þ, ‚°§³[ó"ÞÝ'YÑ/¸,ûõ#pÑ0üàÄrÌ{.õˆ¡õá& Nâ,ëA([Lè=Mǵ˜QQ‡…(5ŪêC¾Ú¤:¶&ºÖ—Jž‘õf‡]{@".˜éR55˜ÙiJoCy‚ÝW›Gk±>.>Ä5&—æÿ¦×®Ã"AÚâûšt2P¨ÊJ£ Åé—sÑ·½²‹ü“¢,6‰6#Ý Yât³DA´%ðÃ{e±’~"¦‚àŠÂ벿ß Š×ÌÖóõàÏ=íxéeœßK¹ÊõKs<6Véßj U>p^áÜËøÝ_\õÂŽž¨±B´,GµVâíÀo3;õ4•é™x7Ü{¿hhв§‘¦Cß[Y9$?6å‘,˜õxŠ¥õÛûGù›grkÐ}Š=ˆKß„¿êLÁØñÀ­–í’ÚøÑ×øyÇŽkÏ›’@q®)9î{Ô{§;^Ââ;$]Ò*A4¡[lê°‚$¾Ñæ´T væÐÛd6q†Ìæ -PÞJ¨¦A“O/¶ž([¨Kp:a“ö[Oò¸›Æïž\šßê Íc^ÛûŒÉVùÉÑ<Þ?#êIwK*UYß—2žl-5ã­W烸åù*wC¾c¶ºl‘ᡟ]ÿ( í endstream endobj 67 0 obj << /Length1 737 /Length2 25251 /Length3 0 /Length 25829 /Filter /FlateDecode >> stream xÚlºpfÏÖ/ÛÎDOlÛ¶1±m>±mÛ¶9±mk’LìäþÏ9÷=÷{«¾ÚU»»×ú­µ«wW79±„ƒ=PÍÓÑŒ™ž™‰ *¡ªÆÌÄÄ`b`…#'u63Z9Ø‹Íxf¦U3G3 €…‰‰Ž êàèélea P™Pÿ[P·52µ²³r¨;Ø:¸Y™XøÜÜÜ„Ü\\œ]þqR53-ÍæV¶fQE%-iI•¤ÂO€¤™½™³‘-@ÉÕØÖÊ gebfïbF 0wpØþ‡˜8Ø›Zý+&†`ïfæ ü'0sg;€¼¸š°„¢‚@\”QM`do “úÇÝèÂ󵙉 ð_ÙÑ€ÿ¥lþKÿ—ú¯ÖÙã?33ÀÔÊ06³°²‡cünÒöæŽÿˆM]ÿGõO@.ÿÄ úCj€©™ù?Ö®¶¶ Fvf*Q;GW ™3@ÞÁÔÌÙð/ìÝ­þ%Qµ5²ÿ'“ÿq1²³²õüÿuú¿Ò@£@¶·øFzn6Žÿˆ­\$¬<ÌL•¬€ÿ`tv5ûXÃì?u’73µrµûÏfÿàóO…Mìm=ÿï¬ÿ¤õï9%~ Kü”£ýoCü[-noâ`jeoPþƒ­‘³éÿV+Yý§›Lÿo¸óÌÿ—7:[yt˜þÕ.Lÿzþ‡ÒûV""ÞôÌLzÖ^̬\.V.ßÿ®‰«³³™=ðßø'—ÿáÿÝXfff&p«&¼!Öéma•~âÅóU´ó³†?iW™A×fzotP­†-M Ž®~Ü©ý(pG ˜ 4æÿýgOú®•Ä(Þ ádj:†8BoõÇK)i•…_ÝΛrákc„þ5„:®‰ÄMä-0ss#H‰fš-;ï¢NÆ©œU’9ư¢se7a}éÁ^’Z-Kû Á쀶eÞ2´èÚXðe,¼ ø7 9®eQe ãQ¸va㕵¨Ž–Òs·v¾Î!.®ØNÅ®[ÕgÜðvðÝë>Tƶ»ðê‘îcãè"TTä Ÿâön€ <â_èœåÙj¾ŸQñ;ülU]¾‘G¿çÜžýf54t)¢€³”z»2‹â$pABðGÞcvû¼}¼¥`"ÒÒÙ¬ûA !wW« ûA*¥ä¸¨kVKÜ·0» pòÇÁ…šy9ã¥/ý:ªÔ¥""meZ¤ÇyÕÑhÍC €À-S=}«TÓ—¢|  j8™Wx]èo~óŸFIlBoÊôÔ≰¾åwlçÉíWÏó´0¬ Dÿêü¥²© “uNÈ證ʉJ%jU1Ï<7Ö¹®Ãó»u}&‹…W=ÃoÞ¯êåð_bh:KX¬Ðr…™¯w–¨£%Oýò£xB9Œ#üõO  ÆÏø)Ó¸ÙA@œsIÁ$ñ¹ëÂÈ.i@ŸNý½Þ¼ï¤Ôß…‡£0¿Àñ¤#Ÿ_"å¸Ü^¬‹ùÏ—™¦+EùÁ è”f4,vǧÑ,B³hA4?OÅd݃A“^ŽoèV͇š¡ÔÇÜ^Ÿu•ðœ€+EP¹ƒ |ìxD¶œšÙ¸|Ú*ÃïäÛEJ²_E 5°ì|bøW[íôµ ì–;aëç$ÉÛüßÛ\é« ñRb(“/V…JÄÔìÈ(„@ˆeÝÄK÷ ¢ôDºêìÎs2§“Á­Êi‘§ãŽfÁžsÌíD˜6\†wq.‘4>Ûp¦{ê«åûMÕXK²Ú)Å#áSÈXûÁñ ú‰f%”·XÏqûø:ùzïÏJ28@r5ŠJâîŸÛ×kh› Ì [*»¸HV0Ïi ½s#þ®¦*jü¹02ÍÄq˜†^ª.š"Ô—5÷ÞFi!McØKs½™Xƒ”Ë@ÙÈOÅ%´•Ðá»WÄøù6ˆ«£Aý _æ«oþrŠŒ«KÑNÂPà~u8ý¾iñT cÝ9Ø4Fb÷bÜ»ô›ãŒ(«Ú‹º½)F~ÓžG¬'\߸·…wŽÍ"$¤Ð~q£1´Û²VOŒOŽÖ1ÕL|¼äBî÷wÇçdüf<Ÿð¨”é~<–¹7zlCψèÊóÍòàµi¥‹G:ÂN ì4³¦Í,·XîC™öÀ‰± `Þ¼Q€fDJ±á|Y²´&Þ†šjL—˜‚€.Eó&¤evN¿¡Î3ç é^,–3A`ÓàõŠVÉì,?BÕ·ŒyhØì;¶—] Ïb—zù'ª Ø9]E)øý WIÔš›Ž”:üá 'Ò‚ÉËÓùJûOÖîžN"ˆÞ‡÷2ÁØã¸€ô]CM‰efÁô#ë]þ¹ÖYÄTñ767N/Õ $š,…¶þ_{Î CBE:íÄÕ?=‰ï¶Ô¯Mýk¶+WŠ€¡57ÍKxÏ»é{7ª‚ð(ƒ_P 3-Âþ\i ¨$ðÐÈJ¸Õaw€R¸8ÔdúðZ’Ñ -MÕ½ìߪõÖè8•±æüë˜#_60U'±²#ûñ¬ðôç­áÃÙvûÖ´‘L’u‹¼“’U9CœæÒ[Ñs-Ø5N˜1aݨ˜-JV¬‹Òáæé"aŒò߇Iµ ƒþéêN¸{õp´¹¡Ò ­D§.Ü¡:…Œp•j4;°ðÅwé4Ôkþîr÷ˆ!#ðb°}ù>z¾Ãm¾‘aãÕ(Ìor¯ÊíÖ*£äj:düß…íé¶®JORäüáJ/kऻÜTÕ‹:LäXQãKþòØZ×@‹#~ÑÍÛ-~‘ËZ¬Ñ!ú5öÁd/F0i©ÙAë fR]'p-?ŚݩÛA¿ ¿‘ü@I÷î“éºöÜÏ~a\\ð&2»6ý`úvÖ:áˆÛ3½6¥°ŸÏùfœü2ÞjòŠà¸˜{ZøôY^·ùý$‘Eá°Nð!Áº¡Åó]£í€ŒíF újÆ@Q÷›Š^øœ:lië}°Å$¾þƒ* Ìk*Ðl+fªÖï[þÅ.Dâ–AÐì݃€¼KQOÑ®¨Ž¡ú‘YkÙÀ7?CB+£èÛŒ}ÁBÒÛZÑ3ZñË¢³j^œ§Ò—ƒÛQîüÐW),áçÞɉdØUWrl2›}=ÏÙ»GŽ+óWEsÜýÜÔ8U šw60Tj1C’ÅûÂìY§Í(& Ó’Öp‰â‰‰VFe€ë}ÕžÏ [ûÔV3§¢é!~íà…ø…(_ŒË¨V~™V_Ë;‡Ôu;¶ÝmB‹W±¤~³h¢+• ¦µÛU±â>9"µºœ&·ÆÁ´e¤+Æ[¶„CqDŒB„£ŸZ>•v¸ƒŒïCÌ ¡‘7|å6èéÞÎóÚpÓ„\¯Áz m/¹kQô{=eÐ<º‰Þ)œw7ÝŠNÝQ&ñPa€©î¯ÎQë=ìšÔ]©À¯6޽oW/K‘}£Ò;Q0%¯‡±Û}—ùÝæwQ*𛄷%#Í‘±~3ÃÆ¬œr!ªvôŽJùèÁÌ-¨&~¥œeX ðÎVEÜŒ:àómH[>¦Ï{&lmìªÍ¥*ü:ë‰bÛ6êòžêrâäÆÍc=c¢òæ×­N¥ÀŽÒñÐDœíCk9‹Z?·Ú^§‰ÙŒ5s¸B\£¹®Pˆ¥[jÝ8½Í3~º-p™¤~0œðά5Ò%b©b¼\íäpÊU’7©FB´^58ÐÞ©±-u,rD(g®Ü;…¬ŽÖWo‰;Ws%$ {@¬Ž¼ý‹5ìŸH:w^ôó(Y«šâ»I÷òª?ÄÝLfigq¢°Îòî#«êVG’7´0ïZ†4`=¿…‹Ýc€h¹ÍA¢—‘êDÑ4¶{ß>ñÉNÁÅ?énÉô‡´Õ*ÿ[†ÄáäœÁõ©ÅÀÙ¥säŠptðME¿íz)oüqcéL’¸…ÂÁZvÈ'`ç ‹ÊðÅjhHÌÂàøj>ÕLgz¿¤z`³!‡¦g0 W"Ü hœœù¡ã® õÉ]½-¹ƒvÚÕÆãk§f«ˆÊÒX¤°ˆ¸ù“§ÄO]Â’v‡ü=è`úÑâ&Móâ?œ¨? LÕ‰:xòÿ<%VžQPÇòB×a$O(&„<‡¶£rÖç:NDиS\€¾è%ÛĨDÆ`ÿõª5ƒL¼<¡ !Ê8Vûë5ñõ­ªLá ì0c%nt–¥ãùŽzý}®ûs“S®—ªÅ‡ƒ¼êh¶lèU}'å„4çŽ!avW_T5*Ý'%-¶¡ž7m?óy,n2–ìk‘¹×ù,Åýwy`˜;w¿ÚÔö v ìgR0ðJÇ[nËbp->Ë •öuMV¤+*¥®ñð/¯"¶¥ç3¦|i(†I«v‹`T›î=ñ°ìT­ËL"ØîNœA{ _w§q>©(Ë϶—zì­>J(›{²E,W·Í´rdÊU&52º9î"‚j4ÆLŒÑ¸ãÏgj†˜ ­ÇiïvUNñéwÚÐÔY0RnÁÙÞ­Œ¹ŸAˆ©\ú8Ϣ̓K„ô»¨ýwD†£¥d³*-ç‘Gû½!¬¿ñfS³øëdciMÊý¡«/ðj¿›¡”›ˆÖû _/D6˜¼Ý"¾‘n¢š'@?ª—}}oî‘E$…[¥²ó_ƇS§ê¼©ˆ‰6°SlzÝàúr0jeèÉWEb„PùI0iÇñöŠËò˜L½Ïajk•x_/SQud¤+ub÷7[ºúGÊw2c1å—üGÙëãù¦¶¿Œ©*¾ÐØ8…{‰p¥:ÕÝN±9ÿZëêtä%ýY´(ÿA¿@ê º.övA[¾¤ãÕ±¤xªù€]¹m/øÈL~ Þ´È ‚—õAPPcÙ˜(”Üp•±‘‹öÜÛ@žt…ÔŒÛôý Ú~…GítxŰ¢¤TÒéµ:èCç§EÑS¾o~cÚ•SIueë3ã_1êt’n~,m<È%¹ÜÌÄ‹bÌ3OHÁœ¬j‘y¼ºÔ´®ø MÜnއT'±^½êdÅRaÎ%ãPµÄ5õ„Ù{•âsŽÂš(r•Äσä$m*Îøi3˜wQ8|ûŒd½ºVl<)*hW¢ûö¦ ŒêÛ0’ÿ¿j%(üÕ.Œ–ŸWŸåâäµ²'MÀ âÉ$î‚((,€a†ëjL5“EèãðWý0zÌUÒÉ(ü¼ŠL‚%árŒ—k‚-¦)Cåe,)LN¶‰xŽä±±7SSÔ˜&…Åý«Í¬åKÚövÉø*ÑÖ·ª½†RÍêL®¶©ØèàVMqìà^ïú*[·hm¢ëÍPÖ_—gùƒâTÿ}¤5½­×º \ýw[h6Ò×îBÎò¡‹ +¤{“8ÄN_úzP/ÁG]o˜ .ÇKžŠçÑEíyGP¬¹]³U ²°Ö;Ì/C¿ï) ›®IÆÜ|¸ ÿ4ïQ ~É-͘®î„^^FÁÉÞâqŽ.H)¹ˆA,ƒ]ŸÀ ý,#+ª½vÕãÞz]¼%¢u“T¸Ž`Ù–¼³y†‚– Éžb ›Á»1UöÊ"Y°–øè”gÁÇÑ*xψ:—˜ÑCâ$É:_Ö!JŸȦSò-}Yã‘S­B¾ÞN´25êÖý´’/6u*—ý<œ¿‹‰Ü!hàXÓD?éým¢¸&A_.JÔSušb†ïÌ‹'"vùM>ZsÜö#sq9A ACWö¢ –9•ʼ>ïƒñ\FÔ¨°ú‡O`¯Û„} kA;µÄ|rŒ½ÛžÑÏ9Ø+Ì‘ÊL~q€8V®ÖîÀ²{ƒ½\“_wáR…ƒÓøÓÓ3úà_K­uwØPáÞ©ÛÝ?p$ôßQ†zÕÂ<éÍvÂüÿ]ÔîÖ`lÂÕ‡\½æBeå$PRcÔBvÌb±Þxà)qÖ§œ¶_À®›¬H¥ÅOËãB1ikžÔThx(Mh1ÑTt„ue0ž4‰í=”zJÁ«¼Ä÷Ejhþ˜Mãßßû aŸ“Î+ðÖØtŠ–Ì÷Rî¢ô˜«È”õµå=‚I eL˜P{öEfÅYèõÀt=9Œ©½—\êzð½êœ"ªÞU òÄÖ»hŠV¶ñx~y’S°™¤:•®j„#ÌHÃüüâ«ì›È¡T¨4KäÖyý¢™òà6?¢ÓÆ{‹‘òÎB Ô1³(­I¹ïÜlˆ:X2¶‡ÒQ.¾¯#èYh3“ó{`SÙ›^«†GÕ´÷iÓØÒCòD›Z’û†u.FÝ\³Þ€ý=Þ@ë&ý$5G´/¶;>K,´3þ›¨ËëónKb!9_á!°Où  :aà¼óM¿7:ùà.³†ž«”Š« ÙáfÍO3ÿ/䜂ÉøŽM?š5‰‹„ 6ô'§HôçEÕ†yŽ•Ì›zC)K@-qkÅó”¸/.Üu¯S—qc'H«¼Ý”S,LÓø¤rš‚hF<úâÏ4ý½o îCênÝaú™^£ïŽ›¤†̪Kläò“w-âô*‚¨ÅÂÙÔìB`ëFªÚÛIŽŸmäh£ä†ÛãÏCup7®¹høûˆ³l…fM¸BíqÏÀ,R%÷ "sôb1tˆ#ø§?n /·I+ÎŒ.úÈyôÆÖ.ćÑÂËfô‡$ú£Q‘Õºå ÷Cs¤)2@ð¯­'¬PK1-"b?¦[xÍÞ§86M¹5b 5Z ª•¨Dgxµ±ã÷0î^’/õtƒ)g“© ºwF7d³ äežç/È•@¸Â€ÊaÉ ÎÐ/6DnzîZÔËÄŒhÐøµbôy‹^Ñ*˱ò캪ªÑ™ïãnAÊäGŠÒÏ”QÕJ3¬ÊTòàuNµ;I¥mLÄ·þïxâIJ놌z~‰OË3ý¯åõáª{„:j£wJ;I„]åB“Ënw $VȆVµ‡úµØt–Ë!Žê$T=˜¶T¶ÈÅ1Ä)7½ÎÑXr9ÝFå•<çJb\0 žNáŸ`ïï‚âõà!ÚtÀ`)šé± ;¡Ü.¸²¸ ÅmÇ×fL¤Hl8¾‰¨ô[\…^²ðƒW‹š&L~ U£h•tÈ,èåÂ)úx}9qŸG.?¶5¶Z“ü<_ ~Ô  —Jß>$ç¯Q’ž©QøÍ-ßo«­ßQÇ¿õ/îOåÖˆü™ˆKåý7Õ1*öZ:{â‚ØÖJ "¥|K¸Gõ#°ëÌŇC‰SE‡f8jêp9,-6Sý5Ã?$[ð•,ûSù’6 ¼ëó@ê–ǧۛÊ%`¹…`û­7;õûÁÞ•+ÂÂJæŽEà˜žâúa¿¥È™.¹©µÒ޹¶Ÿ¼›á. *Öè®{æÕòij?‚ -W‹³§XtB¥¡èl™Á<ŽUû׉ õS8xO|_êÐÝàgl+­FÍPKS›Ÿ…5õteOûaR‚ɈѱØë{ÆZð/¾Oˆ ‡Ø°}NØ5½M )øsã«cc¿~,‹1 B˜ÊæµâÈìó ÒÕGt†—gztL1bÎ4ƒ…"Œp&všÇ ‚1ÃJ¿˜ºfVtL¡f}K{vOê@ñI‚Vµgƒ¨…/|¸×w?8úÚ‘KPg`kþè]yæ5šÂjvC˜Âm)6ŒBi­})¾Q ÕÕ\©%O»MìO˜ÝiN?Lƒ&c>jV~µ•÷¥Àß+‚¼_Ïþ”y†Æ‡Bñ×äùÚ­Ë!ô–»Xæù;QcdG¨2 rgÛrâ*­»Øl,JÚVyÏEo¬u1sœÝ7~žIPÞ÷Mß|333å½çØ o—°üX‡ÕÝSxYy(÷xy˜ml!÷í.{V7¸û9h,"”iIbßÕ™áARð‘;µMȹ³Ñ‚ˆMäíbŠ<ë}˜tj&(·È‘iˆî´½¦Œv ^NüñÚðÙ7m¾{ö-2§ïÅÅë¦MºF±Ý÷ES¶Ê >o–ÙNàl#ògN Šå„ûûÝäŒÖž=ZÎmóǃAÌÐ){/x.Id{y'ú•£¾s"}1p«eb¦b4€?Txá~4BY\ÈT "®&ÞÊêEÏ¿˜Ë´EºóD´kü"™àêv©ÏmPІŠ#E#F(æâ'D2$*+ócHßþçË“¸ç»fÌ/÷lU£‰]Ñ™×Mz=®¹³—V8€q©wK- ó£à¿ÍþËTƽòã[wê[ñ$ Ÿ{t²‰z —çÍ OÊà’ZþÓ4^‹k¯FtÆ=ðÎÜ’&iàžA‚±`d©€%0ÎåHiŽ íçc÷ý«¥AÉ‚xˆhf¾Mÿ48àÿ/D#~* êWŸIè9q!gN›ÕŒe†¾¸T Ë' ^bËWë“uE¦t‹)d$ž:u ¢8!l,Q›ÿš¼r–ÑkÑ#äAd>„‰Ñ#üH+wÎD¦?‰d…bHòGZðÚCW¿ºî<ˆ 3)H7wkŒï‡¶*èH®F¡°,:Ón(ɵÁD™ÍóÃmv˜¾yÃIa,åñ «…"ÈH€9:tÖ!ûìö4„jÞ¡º•{ÔåüòŠ|1#  —©‚%<ñÁú\a“4‚¦Q‡íoÏ.<°Q¾xóÜE`Ф–…q'éd‡‡³Wn㜸]NvIΟŸ+$æowmï]§1k”“‚éûð¬Ûsí†ÞPt}m›é{Z`*îôÌø¬¨–IÓâKàx‰?Ì``gtL„~>gKÖ÷v ¬YJ¨½þ#4ê £$« ïφ/¾S Ø_õ¡!50÷EÛA.—m' ŽÏùÅL í’Å,ã÷„_—šGa3DÅöSpòão? ®bE¸ ñ»#$WzÂ&åptE‘"­¿[b°X$Ǩ¹µ<^wÜâàpýÅ)׌Ô㯽¦Þ`kÅü/5C;¯ª$ZNG_ª¤ CÂ0 x8,vEnºŠ,s‚ú´k˜{t„ªÚ?Œr‘júSö¶ñY Ü-2SîªD£ˆ¯Ç‡pÃï`÷w]š¯Íxã=j¯ý©ôKŠÿzª¯í”ç(×—ƒvﻘ»œŽ}(@è±Lä_ÜYLÄNäæ‹UÌŽ¤îÐßßÉÙ^ú¦M‰61:Ó¿ÜæÐɨ–å=éËÌí3ó{ðÑš=nåþÑ8׋wHÑw<­$¢´Jû„‡ú¹ GΓc;ÂqŒñái;ÞþdL™<–Ÿ°Jpåh„ã~1÷oMT„þæ%/‚î[¯û‚YßþQ’:uÐôöó» àRëùU(gFðAi+ñvtÚÔµõT(ç*•‡«¹s¼(!Ãl@nFv¢[~U(®Ú݇—4x !#ίÚUNaÑN`l¸¹ßžX”O\þ«ÿGÎßÿý«ÃÎè嶽®üá W¢wµû•L^=ª~˜¯ºOBžçôõÃU†…iòAi£¶ WÝCf‰^¥…èxžIÄ2$S­î²L› ùÍGi4Ÿ&Ë%›–[—™¬Jï×0ýek|å ‘D²±È¡~ ¦/³™ÐÃÊExNRÝI÷ßÔM)E!ãé ô\zÊÂ~yÚxɦ6»Œ8Ü}]pájuW“ù„·”ÀI§ÎÖáÁ)/r½-ž®¬îü~¬ ÉJüÞ¿£!’"àsL÷yµF w’ðm›"ù&¼Ÿ!SÔÄËFE&>7ð•9Bµ0mèyý%½È:-v‚Þ,Ó#OSÜ,qK$h/ƒ P*NÞe´>AζiɽJÒcØqgJ«%šÏçwî„’ÄÌîsLÉG(CTœzð̓ƒŠ!UØWDϦî±hÿQ¸í¿O•“@`¿tµ£]¥ã(’ä: †ßÑwiÖv þt´¶¿qXÀ£ÖZ U2õýŽñÙ¿”ȨxÙ–y© ßy…2”f$4dð'ŠÅÿ›À¥î2çýH~—¢ÑÂâÒ)+™\oŽT±Mjäo’‡½Jà&%ZÎqÄ4CÇ!Oß²Âlw©gxéÕdêÂQ¿Â¥JA›’?~¼Ã4u€üU`·§ÀŽHÈiH‚ÎZyU”—À´O¬Œ÷Vux«í¦xçuˆ©+m¤º5¹lžRš°*=Œ:ÆÅ­(mÝ?oK¶«Ú„OýG³j¥êí°ùµ‹Èâù!p™•c#5ŒÐKgN¯~r$Žþ‘¸ò¦—>£y !Sœ>ÅÌh‡%E«Dê,ÂñÐ~0 p®=£°Æa±PèíO´)¦¯èŽçóºäÚi$‘Åžv‡ ØÒàgå·bÓòF‚›yPKšiðsœ¼"1ßÀ¨ –¤þiõ›Æº_‡¬×gø3!îÞ”Ô'wS;uDý™Qˆã|jR;ùql¾˜\‘æ%Kªð^õ|ò»£ ŒÊäQ ½¡1Ã×Ú98ÏMgæE昴ô²Xö~M9f!Y™‚exîNH­!JŒæãí7f“),tp_xé×&â³·x°ñ_$Ž·/Åì;o_lâ½X¢@ºÑ‹Ww:z®ýY%% PQwâŠM¬+v©ZýM‚L&øJv5ùŽZµ²úÜÔ¿æÞdÝ¥Ö*öÈT¾ï볂#i ¼ú-ÍÉñÁI¨½i"ZæºìE­D—Žß'Øg–®Àå@ðAk›=H•… »]Ó£ ØMkÏ;Ïvv÷¯ wÚî.`¤%éDÊ«/=3?µ¡u˜6®ŒU÷ñBù5Ãb—' Þ<˜Ø­ß‘fA¯õ»M ¿Ö)O¨Û E‹nþpÚ-ß‹JœŒÿÂiX?ð×ÖæKø}µË0Gq{‘Ós°udô5wQ]¤û²É“Ú|8 Y:„]÷ ÙÙÁLÆÔ=ÁwL<øN·µê­Eª‡¾Ý%z{Kci# Ñ`“Í[TÀ¼#1F4Œ eŠr¯(s»y«vp$2#»Ý¤À‚ˆ¼ŠÐÇrì› qâTPZ¿TG¾O]rÇ;wˆ¦fçÃP+—3‘5Ëcòk»·ÎRu˜/»Ñ@ßSKü¾Gž‘;ÓŸ€GÌߨhí è u9R–•G±KqWRG¨lÜ ër¬+±¨š²]éÚ ÆpWjpˆZÖÉ >hqdu-í=MyÚüpã›þ=X=ö5y¨|™™d¥..†Æ"ªÌDm{eßõ»xÑ©r%•cñ»g<($¬Ÿ>s} ò´¾1¹EDÙµ–’Ÿ^]üM8‰¬-ñµL,/õàCòåek"ÙYx˜t¡°2ï½/ü¥þ·„Húð EÓvŒ÷Yd®{VMÞþŠP‹‰{+3MR²§ üb’Z7ÄØùö£xù£½Vâ2n¨«S°dÈËê'½ž)¬Å™Ýi½ê ùÛùGÌ1\|%Q¶eQF¦!ßæ³Oµ ï+ïû~3±"]Þ'žøþ‡@nt•pÛ":q«õw÷í‡)¶õ6`â—o&a9qšB^ïGÙ½¼ç'ÁÉÈsœ]æŸçû(æ*LÏ_­/>ŽOn`‡É²í›Êí(q:Ï~a¿I»Ö˜%ªÎÚ¯ÇPÝŠôõßlª&ûß‘F¡ºI&û~cv¦4žù¢ZD4øÚìïÉ“–˜0•+Œ© y)V?¥£-=Âf&·Z/ÏÍàŒyZ÷Û.éÛ–¥2S*U@L:¯ï6¦ÿ\W{X<ÓtÆÄÓý•BëRÛ˜sVEiÓØÂÿíª²Ëd‚ÓovÑÀ¼ÍckšE¾YΟž»t¶(âªïV”)'ÿž±” ƒÝs½;áT8Š’ˆ…­Ž“À‘*Z7µ†!7ŠÞz›Ýs~"é>?zzƧR½®LMû1JÛÄûŸÏ‰¯µm*!Wþ»Á%õÕ ô4xI¾¤.bã'o]Ÿ6´P¶S†Fòº‘×8ǽÎ*)-¼{L š@.ŠÂc¡ùwÜãVùÎö—ÀZâˆÜi±\9šÇ›€\·õÏøÒ‹•žéCyâøŽ?êMöP2ˆæL`¼Y”†ƒ3”,“R(m+wZÂÏ ÛhÊ\¿|ä¯_*ö#:úþjÁ§,¨˜ù„÷üxCY¬™E©x;l&¾!6Z\z’àÑØëf³ØÑûÁ_ÄgC‰ñý¿wÄMó†8|ÖÓ{-Ê9q…Š5¨Ôf|MÈišYu¹ \‰™¸[Ûo‹œ—MÝßNäý¦0b<óÛ_qý.LØÂ ¸)q¿A]Ç[ ¥‹¾aÿh† ùý©´®ùßGÊÚ"èwî©|i¼Adz $äW2·ŠfèjÒóYÛ3Œ«)²Œ+%-$Úø¤?”®ÙºmLô ”¨V„BJ_ñr2pYEû:™ß4QõBÒvMð9Z¨ïWwÃÕ[@ÆNL?di­å¨ßÀëÅ|˜¸P£æÐút3š£•)(£û…Jî2«\é»íX:°lÜ«—›ò0@"É Û¡¦ סóa-r.&ˆ½\ãF7@±ï|¢êJ9o±Ž0‹$‰ÒvOMSˆÜ¢§kI#ÈUÁÊ4ßÙ›©Z¦ô•-–µñóšQ·RMT¦JY:`Ç¡ÝÌ娆º# Oiaİe«Op[ë'­u1~\¤Pã¶;zòãÞá2q¦ ³×Ìxÿ;] .)¹38ª ¨áwi図”ûĉ¿ƒæ×–Ÿ¯;bhQ g…ÚRHœlQÚ¯—9€Þ é3qTÛ+›æµ’-‰,BÓm]áñ!Æ'ôò.óùÒ4û7è„9‹.¤Ó䵯™pI‚Cü/'ªÏŒQ-›9'Äÿi 2æ1¾ ÙŽâN]š'ÈWÕY»ZU™=ò&¯z騱ÿ8a@èBdwÜàᵈûfby»ŒVRÁ ,„ôZ#(…Ysƒ”ªGËTõ1(RºÍèâ¯ê¦T$Vó® ©KS´A£S¸2$|!–¾¢d‹Á%ˆ[ƒø‡ç¡@•M¡×¸9æÕÆ/2¸6QwQ “˜¯üÝöZ¨/Ì>;Däf~“íãöWB.å|ý‡ªU#†æ8ŒÌ#Õ>øÆ?×yù*î™S ¸Z—?v÷nÂjË+â,?ç½Ño0M$Ðwôc½ÜBOßã< LÁ^3׸ß; $ÙÌBo†+<Ú]FãzÄØ8ifÃRJ½ú3E9ÄþHáxé2쵎Øã!¼\ÑpqïÀZà{â_X4°ü¯äVäÞo‚Y2á¬û]ôNlQù›“pÁIo˜Lûg'Ôo¤Þ[U½(b@ÖWÖAc¿‹®m†Æ÷õ© V¢Y8LJ¿ß]À7öö­ÞZd‰ÛYÀ|ši!ݲ0· –CL…›‡µ¾¨œ×n h7ëÁ"· ùƒ÷Ž)U rSÀÝ{ à–BåÓP¬n…Ü.ßPû¯oþ2Aš›ÃGU°/ ¢d9cj£zƒÆøìwå¼ mcÎë_ÏìZåűhçq_&ô‘îÝ;op èôëÏSö¦yYp²ÙײRåÁí'bâ°!O‚‹‚å°¾ë–~Í]Ë9¿ýmùS7dÝûï’URÆ=}ؘâXË’8½Dú¯¼q9ÝÚßm¥K8r{ˆ2“Rƒ™¨Å©*M™=æ³[æÔz$$¶‰É9B¸óÊ$-\¥e%õéyjŠ ;?•+ãY#HêòÈ}_>Qì&.…ÚÞ;:ð[ˆÛÙ‚(Ff¡ìag»ä¯4x-#£¾¢EÃC&îožâ$’<ù\ÙW«“U¨+R%=ô4ªesĹ ¨æowìÇé#ú@¹ r± ܼmᔟ¬Õ6O“sÿ÷)¶þßX,ñ AĤñÓÚÜ ebqÒ1vYcrš¬cGX‹Ù„OÆîçç²ø;‰,V&"q_L J;éÅŸªóh›ôè=ûÔìÐpˆyXJ®µïO¹v &^…È1ýãMÎÂ.#@2·˜< *Ò›b?<è®Ïž´–·vf~±E í‘L­é¨Â3Fæqáû¾fj´ÚR…'ô.5-¨™eMÉðñs!II&˜yú÷i|}¡Û,‘O˜ŠŒ£½g¿þÈè}xN …µXîè|³Ù ÕŽû`|„ªU}…˜M£WÆ›Æ?kÉAzÀ!§¸pqÇ<Ü9Ëî&]ØhÕhYÉCN/ú­;oÝ3åo]¨üs7\ ´¢‹ ˜ä´8áðârFXºµ²l¥f'?ÁÄ=ýæ¶®Û E@𾤣4‚8twjëǶ€äІ ¯ÖzQ¿µ½ÎÒ漨F¼¬íGg2 ño«VÁ d@îÀ½Ä3•Œ‹˜ª­røªIÓM ®ª{õƒ'`ò¯:EĪ|6ó½¬ìœ¦ÌÞ%13›qÖr-´íåž×B?B^±eNÃ`½”™D£D¦z7'­w—Âg¡m«JŠÍ5Bùlcç1‡˜Í2Ð}UZÜü댉H§´¤íexÛÃkR¬IÙy± ™}Ìî }qI³Dn•ÌE¦.’M²’yª\øÆÿœ¬F6”*VïYéÛ2Ì€³Äø"dx‘ç‹é$;ÅŠ(]ÖŒýÖTÃØÿDÓ a‘/+1½Ÿ²M]hÄüçN¸”í ÇÊ¿îæ!U3»Ô !ʱI9o}ÐLØFnbú;N„Øm¼Cj¨¥qºx*ôñÈ*>ú öø.ÛÈ|¬C7êNX¹IÌö^Nј‰ä¼ùŒõbGcÅ¿ÕYŽ;q$Œ§$§²c¢a˜ £¯Š; Ö„?ÝhtB|M“Öæ?AX ¹ñgÎs‘¤«Â;*YGoA ¬ö¿ß„ÕºlÏ„,$™L!‘\Áy—Œ«Ú±<û~j¬Òª¦¹®o`•/ð Ä4QÜvœŒ$`‰Bc"r©½d—™ ƒ¾f-Ç'&‘²V“~šÉ$Ú´Ô°ùB”_,GÓÁZ*9®.á~”C/å¡§ÎëxnlBåz“ºÎj±Ä•£¤¿¨ÒÔð;ÿÌDð%×úËL,ÉÏé Ÿº~ryŠK»æšQX~Ipèï-SA<‹.ƒJڌΎŠËS^“G>'óçß‹ԚÓÛ,ÝHàTÕÙÜò¤)ÕœMJ*¤ú„hF«“öå Û`ƒX´€@ÁJ²MÑì?…’Â`‰nS_^ávic¶”¦ òŸ˜Ým±×låãdÜòƒh÷pÄ·\‚xõl¡1?ó$!Z¬.o£.Íï;]é½”Gœ?Ÿ*P¼-Rå鵌ú•VTš}à¡uh jµâøå qån·Š‹þ°(ù¹•×à\„îPÿq莢dÓÁ€u‰kòâDWwº¯É§”ù]_ºTµ·±¢sª‰Afko$¡æü~Þ²É݉ÅÿÉFlk¸î¶ê]#?öA¯zM#ؤ8ÓÄS®Ièjý´xáE©y'gm&\„íN÷”ÎJr¨°—2éßVŠ á¯ €º.foí9aC#Ž 1xÂÃaÀ|Ö)K…ð:aœ‰äÏ‹ž£Õ¡!0tv•ËCUHÏ—Ûä³*iæ¢ç‰pQª ¿vÌ´ÃDº‹ (51\Y%ŒëCV¸Êc'…VªýA͘‹”•!Ã|ö¥ÓÈSŽ(!˜©HT–©åͺÜ:רSî÷KI?±œ¢ºô.s\ó†jºÚ‹û(„ö50£A¨ cl9ÚÑ[á,hGŒX’:¦S%ª+­é:1Œ' ²øÖÚ¹æã.Ÿ%lø‘ڞϠŽñ¨%¥®ŸSùóÞ7ÿòséߥ|iLó!ž$š¹l“¼Ûåy¡üQÝAK2н˜†„¡iU‹¯Ì²¬Jvú˜~&ž=%Ä„"¢ T«“ä& Tš'$úü³ÔÈE„Fñf÷%û±ç‚à)Y}݉2¢Ó®9¿ú£¾bÈ€Â>B:ŸŒñª’pá"»”ùáµÆç>r³æÕ$”•tƒ¯O5Süt²ÛÒseôwÄšÿPdÂ^¼Ï#Ê@%}e©¯¯{·>øñ2ñ•dér\·ê«Œáîfb[Ô´ˆ^¿„*Bâ˜Õ%rcÆmg:ûåx(Ï­šJµ1Æí~£¶n§V…‚ ûsQ¼û!aÊz¬õ’Žz£5á;n}–\ ãr¨;]«kàD,ñ¼¹¢!™çp|¾ƒá[*ÿËñ¯¶I*"^n{™ .°º}¿³ŽˆÌ»ŒÌ­Á@^ŒÍ’úöEª³¯UýÓÛ‰A6·~Í9¥tŸãlüÍüPÔ5='ÿBë2F|øÀŽ<èðgj†—“ŽS. ÖÿY££=˜UQg£3ѲeMz–…áCÊ,H¢úü«˜Ö¸óÍ•iÅ=P~¼17!áNõ6àQ7’];K„°×¦ÙÓ o‰"’<–5êGî!·ßj—1_=ÍÆFÀç…†ÕÀa(×Ñj×ÛòòG!ÖÜ÷-I"CX™ö´Ÿ%»ÿ¡w<=Õ oò1žS>ƒ%@X´û¬né¶ É~ Ÿ9 Ñ•ŠÀãu­d¯/2HŸÉ¯ qؘkÍEp×1[þˆßP ¸‘º!°›Å¹¨mÍ¡G»€à,i7*àË`•H˜žƒfÑôDoT y6V00îó,~ÄøÊÉW"=f]NdÕÿCØX¨nTš¿t (¢LõŒëÎtëH˜hS›\ UgÅŠgYè”d~ÊT׎!÷f‡$Ÿð¶žœ²ã_ë¼ðï™Òã]úÌ5›ID%Å'MÅß@ 3ñVóI¦Ô7ýÓÚ—9±t?eûôUþr°:Ëà÷ ®TÙ_ßPïÒ­wÜo®fÙ{ûçÂ"¦ý&ÖõE^)°7w³`õê÷Ðȣݯdòû¹®›\~>ˆÖ5û³Ð?-/’lÑú—âSPDÓoe€áàèYX#(ÂJsÑuF×2*”TöÄ>¶w¤–[¯ åșډªÝrò‘£x^*M(1!0"t¹½÷A0‘óÁ¿ NáIßos»c9ò𳉘î@(Ð GKþžçµ›“ݦ£¹†™‹TM|øF_ —ü£Œs0­edphÇ×y"€bh)®ñØ‚Œu*âTí çꦨœµ‘ZFŒž+Óó«,í÷ÎXóC?-=dCÖÛôÀÇs:eö)Û&zú–€È&@»{j²àÜJù)¸LgŃïdÍèÛ` WÔR½ÛUâq}= `cpé|¯rL6.Wyßë§F:K–Ëh…ÍvoyìimTì"•XäP-­ !L¡L'?1®MÂ;×›jE6.‰10VèÄñÇ3ÉFWÌxtfËb)a¦X“V¥~–ÊgiŠ5ó97)_âz@ÀËUž‹³„ÙkMÅ ‰Ûa¢©GÌšÁ-ò½çÃqðê™]ægŽÇªõb8 Õôœg G£.Œ wçð··³ fпq#D0¨w"óÎ}‹·ÖŠ-5õ»åÀ>+`ösŒPœ3®6‹âhö'¢ þì"¢ ÈÔlöXN½÷îÙö!Í “‡SW¤ìú<í‹ç~:ùÔÍü¯1~„B’C‚ÎaŒ¢˜Yº>‹em€›™2'ÙôQæ ü@Ï€GNëÓ´°:¡õ9«Io˜/ ‚U÷Å—´&×ið\€S¬Ý¥ßßžÔjã [oº€èQz"§œµ¥v` ãå8ï;õù…&D. 5GHo6VIÚ/Ô†^HìâcÜ,FãS’pAÔÌa·@.ó£”iGz"˶¨c€tè´¬ÞäÂ2Í·4† -Ÿñ)Ê #À'4êP¨*5×ïxêøLÒ!½1ö!–&Ã÷åŽÝ÷Ÿ®h\çø q êD3ۉĉ-Ó–]?:£h‡§¡ Àíø‰æž@~NÜ&ÈC=J™%þÀ]æKæb<É2>+¹ õÔKP‡ÏÃ7ž1;Öö¥ ý,þ¯‰r\þÎÖ¨§í¾nð1T¸±ÖJiO9Ì8ž«˜ö*C’çÞ6:úºø ‰Ûc®âæ…‚&Ÿ@,*EƒÌ Þ1ñï ’QÍ}wL³ë­yĹ{ÇÀ÷wäbÈ’Ÿüê²|ÊûG^ÝðŒàn•á·V(jЫäŽ(ÁÚø‹ìì†z4¦hÿ–‹S”#Æ8 7:v”ßupâÍf)fëØÝˆs˜%Ïu.„€ã³ü]C¼Þí,×Ó׆¹¢!Èê¦KJp­h >túCÆ—H4†Èa&¸!çZ³‹¡ç¡-éTó:ºþh¦nçeÝSš0“#í¬¯IÄiƒ—7g¶Æ.¾Åe)AÐ;%%˜+Þוµ~Šff‘‘³ËegB@óvOºf¾ýAý"üuÌÊa)7×!¦ÅN¤ë‡¼w=%IÖ×M«SŒ(tÌÒMòqo÷0­Z+ƒÏ~$ÍÊ%Ü L?ó%!çíäc²T Þ5ÁÂÕ·÷ëäɨÉ=†s–î˜É–SD fM"¯˜(ðÎÒÝ ÞŽéùMÈNL@&”©ô´Ê²°”åÚwÔbUZÙ2ëøL…fK uÔ‡z–c"Œ;p×F»fƒ»߆¾rýçÿNRŽèL‡Äù•E[Ô f „*[ûꃸŠ%Rc›9w ª9n!êHòuÔOÃü¨Qÿ®íx-h#Õý¼UVA…ç… ˆrmô›¢ñט’¢*H:*A;©Ô.9ÕÄçYÛÝ5 u›þc¨ñ«.ÓÒgìÍM®ü`³”–/Ôrû|2¦ããî¯;É}e Uÿ¹ì=-a¥ãÚŤ^¦ž'{´-JßÃí3¦¨ŠPÁÛoä<3OTBËÓ!Ty§»ìHà¶$Lr‹&{‡~ÞðÔNPð¤Bì2Z6‡‡°5#ÙñÊÐ+hRDE¬V3ê—l¬Ö_ñš˜¼Ì<Ð%»9Ö¦]GÕm¢,wHw_üÁ4ýx2~$Ïz¶àv‹¦Î1-ëð¼p)üLüèY zg€Ïå¹8/«’‚„žóÂً֨߆æ">rˆ ¡Ñ-¹™ûEÆÌ:á)œ¬¨¥µ†‚´•Öpã’¨bÄ©åÄÌ ð´iSm^Yã o?7È+hjvFC~˜Í[ÜäLרq|<éz³+̉¬ãöïpá–]“ÌfÃsg•VÐd‘L–&hO`aJX:„†Ï¨„êC0.ž¬XÎÄ4Þ[?nò¢S1%Ïш˜(IgeŸÄ}ŸÕbÒoáSÕlr’uLú‚ÆõÙë<`,ˆyÃt]‚ÍÚËs¬Xj¦Ñ 41‘Bó·rüƒž<P(f3L£ïäç÷‡þïÕ(hë$äâöô»`LÖRæVþýÔ\+õßyfàGtR¯ÀQI²Gìõ;‰ì‰_s¢ M;ÈÞGR‰6LîÇð0ÍDd£¦‹L>ÒYâÃë/d]äû¨@Å×]º!Qƒ_¤ë‘ÍÎÅz’ìWœå1ÁYð|™vÕ›æÇÄž¼ -þ¤eŽ©Æ…ÑËë^ÿàö ã—Ñ ÑFZ¤zñÍY´.°8´?©¤Æ£õa;÷ÁæŒÉlbRp[Æ¿? ò%Z •õ\)¾­Ub§L.ˆ!RZ¥23L2Çqá"NB¯< @;½zhå- ¢GÂLàΔW-„Ó|F­ú0f£ë–­9\I¨zžq+V yìó}w63£êß×fØ1µ;‘Ï·ý•sÚÏ¡ b›bi½Pt‰kȉË=ß•žç_/&|ÖåÔm6üžð¼­ˆëåç4ãEŸLÚª—T1˜þÞá¥ÖDO­q£K4ZbYX­¬¹l$çòç•5‘ÿ ]ºX¼çýÆlš_M,žÏ¬ßÛïåá õ>bÍåÀþ]zÈ™+é‘KÇ3lMJÍÒÃl$wÁI,5aî‡?•žQH(z ¶r)oRâuË#§µÖ¿û²TÀ¦ì*a¹FtlúCzï›Ó€Sñ[ÖèC¹ÄŸ]è¨{6þåí+ä¿75<§5*û¦T=Õž@Ë0L",ËŸ•Nxf…:èEÉ¿ìî^}V,ÖÔ¥¹-žÜæ/*Fé䎚õw¡®-”ö¨ýfLèNà%ÓüÊÜè®Ü"Iì‰œÆ §­8-vÏÎÙ¡½s  Ý\d±Ý…œ”*Œ«ØHS¹M`dVÓ»É9rB¸Ï°iê/ Ôšh#$•ñ%ó_䈖©3rëYï 29!xuXÈo݈õ·òf›ÝÛßfTÚØñ…F¡ØDgL_‘ÀÅQi¶ï‘Û*Äd•µ¦¬h‡ÿ€ûm¦Gjô%y/¤o—2Ø÷¤D;ãÛtÑ –.ÍÝ÷, cA3ÇmÅ‹Õ?¢÷«UA«€{´õmì+–ƒ £&–fW®!¯o'•6½“§4âÖ¬/ýÌ•ƒ @tò´O‰€IÜŠ:Ùdc§¤Q>z—“>€ùè·EÏ,C{hÖUµ•øôÍ©ž´;”: OQÂ66Ø Ç¡3gÚïšC ¬¨(.Mi]ÇÄtVÔF]O`SšU;ýÅ®P9²¶M¤ÕÜ-­ë ²×X;d¾ve¸ž‡Ñ½M!ô;E+,™K¨õ_4^Û’æ2<:éã3ì+j¶‘…+¤J+n<Í 7À—„ÆáÃaäUï²Q1S¦ÿïø »ýpÕxÇšs7ðDã°ÏVÔM‹$NoHoฤ Ñ™ a¾üE#çV§!’M›ºuþ%Žœ+Ì{=Dr&q‘Ï7Û7û´ 4lïÅ()ê’ýµï£?Lò"›LŒzÉªÝ ¢Ç9îÑpNâF t¹^#N­® ¿’ŸOìA¹üU¡”ŸË²6T£.¬YLbam€;ˆÎ)lâKL'0[™,#¿eD ‚\ä¥Ã^ÛôÚx:'/æQ a7øŽföSÿ(C{„,«iê` úý锈\»ÕáÓXA1`´ˆ©Pø:0øm'6äío³ê  Ö×ç•ÔÒÂz;Ò·´¦8&f@XÞýŽJÓ EšG×biÏM‚ï@)ŠÑ;®ÄOh˜j¡î¼y”«µ—`z“ƒÛ—™æÊ‘¢%B‡Dw{4!ÈÈ÷œP¯€6iTãÅxïéœfbsÚÍá Ë#¯³aÅ”¶§u(p3â$ƒ©H_ZO£‚5I~M®% fSLØÛÄ»{y ¼ :':Ù NZŸÇ/Åÿ:ƒRÐ 1’w0Œ÷WW]Zd§ànØ£åèªÊ3lìô+¸yf•Ëòüý "™·Ø/8 ˆpQÍ[&ïm°Ìª‰Ö«„/¬øª ™¢‘M­YñH8Å)ÏænÄ-•}¸ÊŠnâÑÁ˜"À*ÕW: ËiCö†PÞ¨M1n Q0òþ.𢸤u–•;8©,]¥ ¶>ÝòWôʵvo ¥ÿ9e×qérX©>ßãoo3…oY²ë®¢t¾c8ê.D¸é¨?e’Ækd"ùÏ.t¡Z=¼a·åQnoMé 䨚êý°[ÊŠ œè¤<Èß2©´÷=ýÝ™bz¨£:†CÖሓ<ÿû™}J%‰1;W ØÊ}®×tÙn´ƒE -HÙL ½ÕÚÆX:“)»²ç<‰J¤¥q™-Þ.l. '0pÿÃÍŽÿ?iÏ"Q¨X38HóŠnãwN`5§W‚û‰oM Í+?¿¥›ìË÷MsÌ;wù¹ÐžÐ¦×“† vO°Û¹(ä†Ô )¶–é}cHèsëÑvlW’~¼‘™UÃÛ† ìp÷tvŸÒ‡|P6(ަ_ãk°éÍ£þÂ$6%0À¡ní¬ò pÖâÅÂgœ7LQfk$äQ6Âx \‹o}< “ BЃµÓâ”°v»F&x4CV›:vZ/e1ݤ³>·Ãô`AU¡ß_ð¿À#%ÒcÄ…ßÄLhý$ŽO©!¢ê€#, ^Øß\دôÿ˜­ X¾ÚÎAœ¦˜enþ1ª0Q‹@<¨ÒÞ•i:‚Zo‹Ò@aS7põ ” ýb7ÅãB€‹uvôªÌxnX¯VÇk R϶ø[×hQX\¾`»{ºçu+?‡œ… 7Î8˜µ%$3xÇ' «[s¨³EÓk" DÁ•üÐóÕâ…©ŽK]ÍH(c)/ÌþŒýçåÆIqVÁM¡C´Œ7SýHVGêê{ûa>  =2…^ÀoýóüP¬{S"]+”|l¶˜ÒE¡;žñ¼J§ÿµ|kn’3´ƒ™_ÞŽºöŸ¹2*bÏtì+¹:G’?ˆ–åœà=µ%ÚpŽ&wãj/¾SáNÛNWQm‚ñBrCi¦ ÑÂK¯h³XèM}£kLZ C¬ïŸKÁXbÙý‚Ïÿå|ÐG­¿È§ÐjšÝœœ³›z¬DHÚçQé1 :º4")Ï-F•¢sI!½öc²çmºg8l»ÂåL2.?zj­áVI²À—Cqhú™PGefÁ ¹g›(Ì›\_jå¦Gm ìw¬ Ä2>Þ„áVÓI”´ƒð“ÊÜeGk5™oãûÙž&sØkž}Œ‰Õ8÷Î$ÍáÎúÝFñêõ Чžø•¢¦ê¯‚¸1:ééð!‘Zɲ`@úUtô . wl'ON5à·§öà#s¦àM°úgz›UJáb‹Ù€©ÞaL]&åæ<ë¶š+g©,pxìAíýJwÓ‹dÌs’è©ZiSº­¹š Ç ÖïÓ.à s{ÝL˜¡ªÔˆè~Z©Èä¯i‘êÔxNN¾NÍØ ÿ–´âÝž¤Ùò‚€J|0!¯¢ÛEœnÚ³ê `c8*—ë*½g¾¡Êu/S¾ö—õÑr5ry Hy1Èc-z8wZúg®ã€DÑÙ¬Œ¬¦‰Ì3¢T¤°&‘MÁéàH‹¼ö„MõÔM‚ÿü÷´qåA6Îâ?5ÏÄaR.÷5ÔÝYöo“qé«“ñïABÏ{ ÎñÖ"Øãb|øý†ØüuKªg±„M£Xƒ%ÐRHV\x"Ì>é¡:HãV¸-4Ý׉ֵ¬”jTøê.E`óÇ*Éö³«ò2ÍL.G³’%•èAPž4éÊh所4­Ao·©ÄµHË]¹Ë3šÝωbжÿÓ¥˜Åu?¦ÏW¨º¼ Ïà, ®’xáºõjZh£,ž@›Í)Çf²1r)%> ‡‹†Œ ëO¥ŒA]Ò‹$Ó¡’.A—I*ª­Ýš÷㌴º°ÔçÑ%&.^L™,_äu#§!tÜùçö,bT ½XÉ­B¡ï*—¦TŒç½£ãÅ¡4à ãÛ“XÐ…Ö_¢®ô{`g=c”x€²–Ë¢c3¨ÔXÙ¿ÕkœDŠ~˜YÁxmþWÚ³9nY½ÕZ%[@¿-£: Ã$$g¢ÆXÍæ¼ÊXrÐNÇÊÐ-Aqú2÷ÓòÀ«×’˜‚ô¹vQø6+uaEŸqKTú t¦$[äIqŽ’¥[çâÐG¬9à’Ò æu¤3q4€”^Y!Õ*Ïm (¼»ûZ¨.z>IÐÄÅ™o¸a[ÅÓ0hœ§¸ƒLœø8v»–ë‰9&ü@y4@ÌC£'?¢¨¨òšçHÿ òGzÖŒŽÈèGö©:´|¦ûµr­Õ6²Dõ¿9`Æ<̪ È—o#AêIâõ-ÁÖ¼”‘§*Oìf^5Àkƒ–Íó\ ‹Ãé'õ¨äÙ Ü®±õ§YÍÙ¦S0·íë%ÕWÜèWK2![Àïe%-g²ô^ΗQQàs‘.C,Ä Ù¼°Ê+ˆ½/c>îכ໻f¦€>_ŠJ>òJ†#ÕûœåÞFï'WÊLÉ®šâGô¦ýî•Å>vÁñ2d´7ÜÓïü*AC‡ŸÜž¬ëû(’L  ›t<½/5ò¥%Fû¤Ž†9.–;âlÙ›^/¿ÁÐ1Ù鑯OªX^=u ê+Nó3½D™)™}»B†!?9PtïxTȘŒ •h]å]780…s˜Ð áPsEyªKx|½'ü€v<§ô•…‹ù©(y|=ø* Lm6ÁÕöš‹6ðéKÙÍÑêRs>Ã6Q¶èÂ'g£«ŠŸIgTXçÛ5KùÒÎhWf¼Å½ÒSú‚î[‚?ʪƒ´Y_d|0=‰ÿ—ë+âu´ò+ºG}[ff²êø]eclŒäu Ou®EÄ ûmr«ƒ?Œ‰Ìè™uR*Ïke†çëYB¥Njâtï7Ÿ3•­&P¤§Ž³ž$~™!$ʸRVŸjYâñù$n¦5.Pt‘'¢þ(Wo•ÅÂ9¬çPÜ1MÉeYy׺ÁÑ”6Œ“'-‹{ÇjGUÇÂÜ üß[¡ñ³Úÿú>…Wùüœ[å†iÅçYñÀÃçµw¸³ºÅ´ú^ÁlÕ§Ö¦ UñÃî:ê€Åq§g¦È²8xËå~“‡©Ä‡Fõ‚oMê° «M³sùÐ’ñÓ¾EbüEo´·?áln¾âŒ·ÎüvuÐÊ ú¢UYÛªŠkís“+v“ÉLB äËdb’¦¿‹rAuË ÓPßãÏV`·Ó_xbm°Þ,«º{ž¥ÛçÜ"2 ’cØrÑ ãzPOõ—ÑvÜõD÷ ŠC‡a[ýÔ©œkÇVYÅòŒ…ó\y.&xx¸Ú¦Ö§su23 $DÉiÔ"£ŒZävÃÔÂ#í¨âözLƒìá†rµÑN¸…vš8½A“˜tî•c«ê¿¼œ‰LçvºŠËÏ ;Z0¿lÙî$‚âçäˆX_Ul‡š”«Ÿ³Í@Z‚†k9¨-”£“ÔÖúçcV1õ)Q q> Þµ³Åcþ™€~"mc…8º…dÓ¤‘lŸ1ó£í“=ß ûd­c Èü½Ä¿—ó˜g#–á–(·*UìˆÑ‘S•ùêÅ–3ÜïYu»“¡y@Òʉiý¢2 šj°ÝÌŽ)QEc˜üÎм·Š‡Ò7•žºâ×÷-uÝu;xBx=­~jfP5Ý¥%ÂÙ+I­Î:N ¢¾wº@%ñcgdÀ˜¼Nݽ«x—Š\ ê´­j†Î5/µn¡Ñ€ŸïÛö´Öuõ³4!4W ‡ g0dr‡tH1"÷ íAÁº¯<ï7“`zF aïy8¢™ÁHÎúƒé‰F:^_õâþ=×°™ÒH#µ3&¾k1—>†Wqš›­p0qêþòö„’ì(äò¹ï„Õ¼iÊ~$UÊcZ}#õ«”ýŽGÇÕXkzŠÚ[PÐÊÁÆöv#èhŠ‹½YI `•Wá¾ žö pÏ.iF2Z¡’R§¢U5“¦¥ôÌÆŽmEZõ6â“¿ Þ%³hz¬ŠÊ¥¼³kRßðg$ÛÆœ&¶i!\jÂ+›þZ- ©©0º —©ßB ~J`Èÿ±b$7ô67®b½lOyÚÏaÇd3¶ñĕۜ£xhT³ª£>d L0ë©UƒÅÉ#›(âna~ ʳ¢ÚÂúÐÆåp'­ž±y@’)P¬fG›æ{¿²œ„ 4ï·üx惷šM"=]êùZ‚qÄzÿUñ¥Ú"žîåt±"”Bɘç{À¿¹ñÏU­5ßfÄ^2͘Ѣ 6P½Ž»J¤Ö!?XZÉhä&¾0º˜ƒ·›ÉÇÆ+ñí 0•r¥/Zq§{qûqý£‹æG5âÛjt¢'ub/6«iÂO:Öõ‰„•?|˜=8·áŸL»š¦Õ‡M дIªzp^y²×½¢†ŠÖd¼¥­§(C³nS¿ÍôÖæu¤¥BÞc<:Ú÷±KšóD›Ô’I…ãüÇ5£¡Ñô‹£¾W ®Y\*‰É²¥FÅ~ó€;Ù~]ñ³vªh²§tÁ@Ÿ=Z¨_.Š‹ü«¾ש–Àù§ÊLDÜ0z3x Ø,àÇÒ ¡õY󆵮1=k7ÍUñVàÜÚ´EÄEBÄwþDMs!à~'\ä6ãÛããEyO}IïDñ|ݾòÉ*ÿqú<‡»þ}6>­Ÿ:M?7?žSA¾ð¦Dxdù(e9J™}ã»ûÆ©ÆqNÈû^3éÇEŽTuöb¨ ‹ŽD9@_KL­,hÛúcÖ– v@Ô© ùD¥\"Ö]¢‚K+ÎŧüMX%ø)è®Æ¿– 8Eíà#ûúî–à –sW<•3_‹½áÁiéŸ#(pnÃÿ<ø|U¦* 4ÅqSsöE|¡Hç’ú¤=0;ÿ›pMHX¢£\ü¹ð1-”bÔY*Ù¸&i ^sù—ŒøßmMoÌQŽa‹Q”äfaÁhE0X·þºIúÅòIö„®A®Vmuz¡EbLnF¼ãÌÀ eSIÜ?é… #¡q{8ñ’™£±üx0û±D¢(’~Û®¦¸zVŸ;ðÅÿµ‚7ßʹ½\VtÇïZÇ–m,éÿK±Ø 癚ØüÍtù^“À÷*2È”Â_ડM€Y„ÿvUHË5ò¢¯áHÿæCàñ‹F,…‡‚7,ÏW:G4k¶G˜¥þ!e[\ÂG‰`ÆËlHF³í¢[æYío ÛFÐø)PŧNŒVm·rdX–Oy¦VƯɜ“Väìrœv°BšD¿oýÀ¾Ï…=*-n»õÿÄÑÁËÄÃWQ§õ9Iý<…—Å%Lo¿ïÿ½Â—•@Ýb(ŒIm¦£ë4„4À#aIÆcì¦Z…ÒÁ^÷){PìIÁKÅ4Vjz•_·Ç1—ý§ÔW^ÇÔ5¾g䩈D‹Á/6úÅLu·{ ÀñÎd—rÔó£n¥,ËO|¬]Îe?mgÝrxÆÍÕ3²Ÿø®ùëz.ÝÔÅAN® ‡ÛóÚËXF°æ70îÖ [BÊ^"Rö<”e˜ÅÙÊ2'á˜Ë&I—Ñ ’ßߤq×Ážªpó•Ï6#»lñÇ“ÞÌ!ê E¨z°*A¨}µ$ÜX{«þ¡þ½ŽŠhyψ”¾0“sÝP;r zOà ÒRŸT/cË%jù!æU`6Uõ/V†Q Þµã¢/5OÒ4™bÐá7Ûkg¼o!î±C: !èe*~…“´YÅG»ΚÌÊ~(2˜rànfÜòíß…,å4ÁÏO|΀çä endstream endobj 69 0 obj << /Length1 726 /Length2 19920 /Length3 0 /Length 20495 /Filter /FlateDecode >> stream xÚlzsp/ݶmlÛù%Ù±mÛ¶mÛ¶ís‡;¶mÛ¶­÷ÝsÞ=·î«WýÏÄXk9æìîêª&%³·sQñt0e¤e¤cà(‹©H2200è˜aHI…L ],ííD ]L¹ê¦&eS#€‰† lïàédiná 0¦üW fchbikéP³·±w³4¶ð¸¹¹ ¸9»Ò9¹òÑý³HÙÔàba 0³´1Ë+hJʉ(ÄåTâ¦v¦N†6W#Kc€Œ¥±©³)%ÀÌÞ `óo`logbù_œœéþEÀÎÍÔÉåbfNö¶YQA1y9€¨0½Š0ÀÐÎ #ñÏr;g®ЦÆ.–ÿU Àå?–á,£ÿXÿÉ:yüÛ¢ƒad˜X»ŒLÍ-í`èÿK7I;3{Û¿Ã&®ÿú‡ó?üÿhH 015ûíjc#ghk  ¶·upu1uÈÚ›˜:Ù$] ÿ©ì¿a†¶–6žÿ_àÿEü.hgþt´Œ,t ,ÿŽ[:‹Yz˜š(Xºü#¸™¡Í?Bý+®núïîÈššXºÚþ{ÓTù§¯&öv6žÿ÷ÜŠùשô"ZBR2Ôÿƒ¥EíŒíM,íÌÊ.ÿ(jèdòŸÀ¿Ò †–ÿž!Ãÿl÷/Ÿñ|YC'K€6Ý Ã]ÿméþJHÈÞÛ–“@ËÌÄ`dadp23ùþ/¶Æ®NN¦v.ÿRýŸRþÛÿ×4™šz˜ì-Ûs‡X¥7‡Uø‰ÍV‚SÏN¨R/3¯Lußh#[Z˜è^áÜ«àä»ÃáÏñî^îHÞ7Æ›ÂOLÆEè.ã¼–TšûÕl½+¼ÕGè]ƒ©aÛËÝDÞ¹d®¯)PM²dÿ>¯‘r,ãEgŒ1(oïGÚNX]x´§Ô%GÉÒú†3ݧ®Fšµ-¼6âÝ[ ÏÞ…»!ÅÖ·(¬t8 ×¼ÓÜ€»veîh€86§ÝºŽâ¶ÎfâoÌòÚ> [4\•Ú“%=uÞ9:D;àFX®‚WxÛ6}¼õš$}á_ž‰ ÕDK &âÚJÇ3JœW¾Vÿöôª“Xñ²1Þ댑'b¥xý¬“Úº1Tåê! Ép¥Ã§ ë)ç3SŸZC„{?¨OH¤C¾[/1H«ì"­¢¦Ò/EC‡ªT–j¬%šÉÒÐÓûv­'C|Ül ¼M »Nðnj¤ñ'ë4]+{ð@IÏ;²ºÂ&JxÛeæÔ@RÛ%¦¢õ 1Ce'íG9ŸÝuC:§˜@"l^Ì6Yé¾ÖG…›¡¹"7ÄÄ÷˦G¥ì³(\4ÊŽ Çë©;ð"WhšP²ÚÂu¢æpRó»Z˜3r¥¬ëÆ‚ ´™èZe:ö€0õõöحȱ×;¡ ®C„2¤Vj€*\ÌhÆÏ‹}ˆL'‹:v•TRc›+½}aó¶=çœ~g»{$ÝËEŽ-×·¾QJSô¹Ñ.îÕäëY±¾9úâ¼*Õ÷ ôàí¾[H  _©wQ°”¿ÈD$‘>›ñø?†ñûÜÕ4%âðS‰$ñ¨€’Û¶Hq€1BlWù—³,~îa:DßëÛ ò:õÉW]ªm~KûyõÙÏ®^¯¥©N]V" íǹ_3£;nžol‘%%ÙvØ:ÁÞΪÐj’µÉóív–QhàóìÆ6ª µ4[RŒc5Q6:—Á×ÈÀíB„ °y\Sˆôj€|œ"¹ˆ:sÖw“j©¶Xà·ËfÁIy¤ˆƒõ¹Ÿ¾:íå··fMMªS4…KQ¢û`@„ÓœBb[KSAc&¼”Õ¥[u‹Ù‰Ê‚¿è„IEkØ>âWÇUk¨RÉ¥‰žf ö_I_6¶+Shjs”ˆÐ©>‡¼h|þ9çšìž©Š¢Rn»luØ\MÜS ­†%’)!çÏe¬Çøà3‰Ú›å\‹šRlH´*nxuÉÉv¿_ï–VD¡¡WßÛ)Û÷Û1À GS”VÕ¹…j”\ÆRN>?L—†±øµS± $Ê–+ø%õ~I@pO´×Ùý ÌW8|JLIHçlnãJÙå%ÐÙP'R`ÖsYåÄ9%=¬ÿyÍjÝKdµ£lê¶Y¥:‡á*öžÒe>¿ q¯{1Dñ}ó‚¸w‡êh˜Ò,,Ø[*9ÿÅöÖãYÞP`°!mMÄß+âè«>çý&o…á»}]Á‹+Nf=I¯M\¨¯Ê I ˜‰ù‚§Pì›v "~®º´a+×»‚oÁ›˜@ˆï¦?ÀvITtÍ)ÄaÄö~Úž¬/‹q™ ®wP™cÌî×êàâ2ùžìN„ÃÉâd/eC?S Þíaý}ØW·wØv˜5âMK“ ¥Œb„âºÌ?ðÞÊ’;"ÜáÞGZÆl‘Ñ®}ÜÔs˘)º}lðÀÊîÈCFcv±àH»&ð+L…ƒ/²jx½'ì6{„Ì3EJÇ÷l;­Ü_pá«õ¸‚ß[ðàÕJ’˜«Í²¸`´«áFiÁœ?• ІY4eÃÑ/5‰$y°xWBÈ?ØvGv‘g½l׿kS ´‡(B$2o4Ð#~„6™©(^oôôøyºAÕ P—š]0+¨}ˆž^[èÂu€ÜÎybþ,ø©áOù\¿vˆ‡Ê"<ð°ŽI´ÐY*ãNC£cLX,YÛ¸óLÁ%Ü·)'9Á¼;µYÃò /ÙNܤŒO3²%¹õ2Dpt“è‘®ó[W²ªÍ/ê`µ yÔk+coX̪ÁÍÉîÖÏ®Kȃ<±ÖI“‚´ í3MÈ}eD‡‹PZ9ånî0 ÅJyèÔX/ÈzÜþ{zú¥6·<ûdÏØÈžÇYXé¾h<à¨2NEN“{ œÞ<^>Δg3ð£jÆÂi;3wÝ4XåbÂÆÆMÕ8¿ ƒ'ï÷­QÑ×3\ø2£+‰¹Æ1ÞËHi;ÉÄS2>­¶Ä`ŠÎiüѽjÐyí%¹r"³ï2SfiÛC‹c‘}CåÝ,úºO²Úhww#{ó®ŽÙ?1–Õ›LWþ­ÿQý·â8õàd¬”x#ÃÍë™JÓ´ÀàŸQMá~ëNêœ!QVÔ÷Áw w_’·\°p:>?”¥„½Ý»i5eDÚBwš&ÅΘ‚{*­”ŸäÕ©)n¼\ëj#à¤$^†ëÕùå©ýÜô%éð'wpØŬ ì•_øÅH™Œ&ôn>5üëíZûÛt|b­Iëx÷yA:ãì%ùxÀ˜A”)÷ב Wmt¬§øAíŠë½‘!Ò-š›ã¹B<4> ,dº¹ Ù>Dp:‰gÄ“X ü«šf[–¹˜ššT"…Ãq½‰6Sa{~D‹„&ò ¦qæ²Ä]&t™Ôr2rɈ³àâ¾ÃÉEÉ 2—Æ©½R¼ÓðK˜°è—3 Æ«KôÁYÏvçSl5îj?te“ 6¶0æÕe´•ƒ²_q-$.§¯ñÆÝ•*ø¯‘º`(Çò·;V˜sš]ùðáÔRBrW§Iã¡XÊJ8ŽÕþü.òÕªÏUWàHéRÒá2É3 ŠøwW\ñ.uç'©`ÑØÞü2Œ·õ©¿þñ-ïYZHšøÃJÅêR¾衟iÝY!ÏèFAÊŸš‚VÙ$þÞ~BSaiñAçhˆY…ÙŸ!û“h³ü@÷ÚDÆl‰Ý˜Ü‘áî}ÉÏèÕñõ7(å´Þ%ØŠCNŠi½íÖ~6£¶_¾o=ÎÔ+²è¬ŸVš.;`n-»1JÇÆ~D×ízFE… _N êl)U0Z=lA󦬾•ÞŠLÃ{l ä%¤yüZ>0‘#°’”Jõçrõ‚Ë­B¿a—¯È8}€|K’tê)uÖ¬¦™ú¡.ó´Æá+©ÿ‚ž»$ô°ˆz'#çQÚ½[j¥62òqÑ®pì ÜBƸ¸'÷0_Ťpf>_ B—ºFÅbU>ƒžóóÉ(¦•Ð\Q]£3©® ˆ‚‚^:ßáÞO:dùìT51ýžU]b,‡¾²Ú Ñ/øúªS1¿×mK*û,¿#²kd@ë½XïÕV•>¼ä0Ó·@´á®që¯ng$e[è”…¹ô©¾ÂXTÜì,÷bAe´ŒË:Í¢ªA„¯Û>U`¿ÿËúœÔîFo¹JBò5,±æÒ«_ó¡™,|Ô|îÚ}àg£ßÖ‹}Ë[;:þ>£¿Ñß J‡¼zº“ò}"c²>º÷ –'žž¹+0lO¯«‹‘é½7\Õm‡ª¸»T¡O5‰œt:<¤™¥mí©ÛLÍ!Q5^:gÅ¿| ÑZ_`éšÕ,ô7K/†@Có»Î×ÝÊÊ.’MÅÒQ‹þr‚l§êH¥ÒxT\1IpaÓê¯ÂðeË%Ÿ$ÕBµÑ]O4hË&üÀìÙÑg¸cçÇYþFu+…Úò–ŒŽ„ÐÍpm*̬Œm×}±¿­8ºÚ4¬í¹»;#ª[Ä5Ò¾ç C:fY¼t5‹ƒU6ð˜ð!¥öÀ ´¼ÑÝ$à½Å§FÅùqë{õòbÈ3 õHÉ®^£ä4'®ÿG%˜Ý4;û¼üNâW¾Ö}CgÇifn^Ié˜Ú%GÅ‹%m®G+3&ÙĽâ jÀtI²YÜ%OÖmé;Å,à×­hâŠø‡Q4wg/Ó—äÒTL «û…زö¤Rl]&W6_ô\­ê{~7žÎ&﹓v4m„é—Ì5³eG¦  º&è§"K»ÆÊnU$ìÁ="”:ô$ÚaTƒÔÙÈã‰Hb2˜x¬¼H);d8®¶ EÁÀê'áH»»–Ps -¢ øÆÔ®Ì†ÎÀ÷&(ñÞìÌñtô࿾¡„ˆÉÈ$2Ñ“kÆX¯£ ÔŠ½z½Hê 8,K=1VIìH!CøØgúÄî¦s1>+2‡”ÂͰy4õ‰§¢Æ©ÖÀb1iΰ_̽’Ù¬×ׂ'—g„õE ~r#fâ×¾]©y·'å&šÊdç¿hffŠÒ—F˜¸¾ÕƒÕ_6ÒǧâMœGG+ógÃU8¼ÇOB³CØw7tãPgc戧B ð4ÒÕ]¶ Î5Z¬ªÑçÁd’("®9á$±O9ec Ôôò{g¯‘9ãG/U ´)‰3òæÅê_&µèÊÛtŠ›•õª­uø#Æ¢B¬¢­ñ8™G7€\ô†ôKºM©8‰-ȳ,­Ìt¤â9eõ–0;Ü{Jóü£¸"«ÝÐF‡zð(¥\HGž[ »ã4Œ>Ö¸È_|²¢ÙÒG¿Ÿîq2JxƒŠ•UÖj„Ý ±(C#8„Ðq[øøs§ ‡ãÏÕ«Í6&“®¥–†D”p/¹õ÷ã¡E¨!ÕpO÷v¯v\†IV =M~ƒv\ûM…&&Ls…Þ¨ äÜ6ź½T›¶;xl ³ÂL툿 RªÅPc]øË3_Ñ"§p¹Pé1AøÌì´:sè„EÉ/ÖŸÀQt¶.ÓÀ>l„2ù‘ñqzª¿Ir÷ø[1]ì?áSTƒ žmŸe\iÚ›œÛǸòtOl¤à›> C$HÞÈ^–Œ°äþöþ˜Jn<™ªÁ÷$H“›ÂEœÛÊÑä^UöíPÊüä@Ðdü>°W²Øò܉.1\VÔ6–Wà¿aw„åÔ÷ÿÿx™µð+3ÆJtÍíTÍÈ£=E}Cï¦ðZ˜°ë{nÊœk_yfÜßx·4>ñšÑЮŽâvžRôÉF w‰oCm.âbZ|º¨_¨uŒŠhïòm7ŧhÑM¸›x8Ò™ ÀÚ)>ñ·ó5|¯˜QÚ ãòNŸóJïG–eÉ«>¨?}·ßÁØÝºá,Š8,7©Êz‹J`€÷—sò-9›óA@ÕY§v. àÂ+7‘R=×… ãù„·ëŽ.ÝàDV~ãü ”¤|ï̳ô?fÊi"»`ͯ.hŒåüe:áýýœúyÙIqÊð@Þ¹òqŸÎý NÝMqsTÐ×>ó®Ò<êw°|ÄýÆI+"±X-ñ’õÿ±#=_il?˜®êt)ø‹QÌ‹ MqëÐaœŠ0¶èFÚYOš-§ô7™¤4Ì ·Ÿ‹qøØ¤(›²iÄmÅÀϬ:øSÓfpRJÁ‘Þn/Ò [1[ü·ÓCpA%À£`þ×Ë_§óWýIA#ìa•‹}ŒÎbœzÆ ÛFX/t†±ÆÈÐÂ"èWžÉ‚³j~1ÙçÝ•vBìnG›v´e~UG¡ì·qúç¬nЇ¸°ÑÕ“Jù?_rrI“ò³åi+³Æ6†åB¶ï5Ñղ⩒×2ý9³UÕõQF¾a #tËæñÊú…EézúLÞ»ì৯ú ÍþÈ øá!SY †Jtà5¾‚X]{Å~Ú*oSØK£–Ý?ñ9°¤e-Цt/dL˜Éâˆ}v(sœ,¿Ó`F‡f7ÈeÚ·+·‰£rÜ¢\Là´xÇ)2û_¬GÄîò¢¨^Ö ³¸ûŠç¯á°X/­–2+ŒÌ‘гÜËQÓ60£Ùްޯ6ƺ7[¡¤£§»ÿöžo™6FIÎÈàäKkû-¨âÜØÝ€,ïcƒSfœíto™#ªKÄUèåÄס6î. :ÅL@+±«„ª†ë_vs/~ª[/b Æ<5À/.G7l@rJ­Ã‹ªÙì·c;K™B¯–ïÃBZLÖynaWÕŒƒ¼Z| ¢ ;ŒuW`P’swP³þŠÛÔÝÛLψo I´c™ÌylS ìmÂ,º\{.ȆÕÛéP†©Ìïú{i¤N¡1iáåSÿ}å-y4& þ†ëîðÜá¹µ¯¬š}–Ù²¶ Ž£xþ«”"ƒcÆÝCàü}¨Íz1þñgºrrt¢èº;t[»†{4®s îaÍoôP+©TŸ ØþX¨}êÜ'6bBï zr:Mu±SáD^o‰¾$ƒ23>äÌ09óbh¯-Ä/N|šñB ÌbxÖ¦7ô]VU„Fõ{Þ¯i3ÞwÔgU­/ªD6ŸÎÍP/¨Ž©¢þ÷4t«k²«_ê‘çr{.è0Œ\iØÙbŠ@:›}xqZdÒÐ>_ºVxÏ妈S³L6=M}›Ü YÑã”m7ଖö êJ{j¿ânDOú­ÐæÇûß¹R™ÕÛ<ôêû£ä¦™ *¶¼ŽdÛ-»c2µÿÜÓæã£õeaT»´÷Lý/ÃÑñ.·™ní«u¥õh(ž¶î/&@¼¡“èMáIžøF·"`怋”*±3àw\*¬ô!íj+%‘²OÃãj:­{HRå½ß+­Q.JšöL†ÖÑ嬑c8¡Ž»—¢÷!x†láwŠÞ´Á#©ìxÎnP;Ùc§÷‚¡|h[±sq²óZ^u'o[ø¾âÝg«Ô.l~[q]®†••(ÜŒD+¨OWÏ[.—.{¼ƒß$UdxßÄå³’jš„J›O]¹óÇHå€í·¼Âm濾$uY ´Ÿþºuá¿=* CbbÉq^ŒHƒ3×£ñKXû*ÙEÄÚ͸¶²ÐìVWYþÓ­Q^†÷ËÕ*RK@¼³áûd¹I¸~ܸjb†ÌùZEq¦e³ímv-\bnz}Ïý¯ð|jDÓŸùƒ«çÃ謿Fëž›àvë{!S¨ï~ mRî‘æ…Ã:7†(jV…Ù¸qôÏfÊù|A×oBŸÌ'^¯eÑøÊ ʼ㶊Ôie<“ìKNí"¤Ùü´ š±4‘ùg¼£¹I*À‹(Bô<^S£Ö5Ê¡â^gÚ²€AIåÕ­Wüø†]ɤ6Fÿ(—¬™¥EæÏ÷µ‰ŠG츖|X-Ž4©µOGI˜-Ñ€˜Çy3ñD[{Åhø~E¤Ž¨#õl:ŽÜ÷Ó•0³'Šˆ«¡’­ù4Rƒ yÁ‚W¬6øÓ©¾ÀŒ“Ž@§ŸD<”B—©è¼^ôߥ›â þ ëëå3¸£|ïz}/Áu{½~; Ê’²BáX;Þ^Ú8°S;ͰbÒõÏN">2Øm…]Æc€ŒË ¦¦.¾•„ Õ§ŒŒŸ‚ÁÌ&EÃV’ºEY1­*äñß©9lIÒ·ÚÄðlÜÎ?>›ÐxòL÷à¯p/ýâbÊûëâ(/çpγmÈ“åeI÷B¬™¤ê}Éwü4ÇÌæñVG/3AÚLŽ7²ÅòÏ•\'Ý8˜V3g3øžMšš"m±ù0“vLj¦‹÷ÈC¼d‘yóXÞc7_“°(÷ÍÉ.ÙttDlÄ8‚¾þ|·®-1E,Ø^YžÜõ;†ä£ñ©'ã>—_Ùz-9÷å¦C¯:î˜%ö©ù™ ŠŒÖÚ ó£EóÈ£ZÂûá7zÀñ¸ÜRn™ô¾tx×T_[4ûB¤mŽž"M*L¹`"1gưÚìÈ ¶žÚ{¹ý€LÌ-ÝsÅïRÒ?‚oiÑ} \Œ›hß÷Ke…Z12îi¹+È n`ŠæmÞ¹ƒ;2,Üß‹Vc¼¨™HÞß0=m«O²bj°3f¬˜Á`Ît„‚-<ʱ~iðÄ,…ÀbäÝÛ ¦ž›ãÞòE ¿ó襀ù^’óCÁÒ¼-;ܽ}Ø“4VEÕ ts—w’…›ÀùÖU¢iº9à‡àSUUá‚ ÜÞÙ{‚oÐààl¥ÍP-¼ÑÁ?«Þô…¸°½÷‡öܰæsë1”t1:JÒjÌ+¼\ëE%[7É=QÞ©oÝhŒ<§¨qBòñ,–ü#« iû{ÈFDU¾ÊÖžù¦õJûl¡ú ~Ìûµ¾léûÉÔ~„’[]왪¾ñ*r¢‰ãÜÈ©ž„ºÈ&óww>hÕð`r´dæp9ô ;áÚ’ €ÿd®ÞŸ't ÙûÀÙ±lã´Y@ÒÁó&>|úïæ„ ÁúfZL“¨6¡çy!Ttß@(áðÖebÖ“üUJ©äkµ„b8¥Uީ豺Q€†|À§à/Aß¾æ‘3õHØK¤ö%•HíD=OælÞŒËíò]G XS$—Šˆí.¼ÓP\´“–Z’JQ4û°sâÜU—do¥˜ß—æ£8%¹†¹†J%#"Cò±/gZ>[âÚŒ7$ +u«Ü·ÁEã£!”FírÞ€ù«…;°£ÎÜíBÀ)I½¨’žC¸t§!1°!ä=å¥ÌÄiáTçxJóäL¥µ*¬›<™A¸]Áþ›óW¡Í¼Þþw¿ Ü]ß1(RañucÎ|¶ 8o³ˆˆªÇB¼B•µ¢Ô>:Ÿ€¼eHýȺMÔ•»„ËE1Û=›–(2cd c`Õôê,TÛÞÍÀÂx‘ÄÉÈ©=Jüb줿ø¢ø¸’zϵHQN¯ŠØF×fã³ß°YáÞ5%Ä›MŠŸí»×!׆/ tŠÿ‘Ó.ˆO xNy(Þïêa êŸÇ÷kém‹ƒwÛ: çç›óà=}ßâ8̲÷»xE J𦧡ãPÜ¡©÷}toCÅ)˜âöÌ\4Y=šõ¾JL«áèʃæ>€J·Ç(=¦¤6…T¿d%ÓÛ{uw¹ ÎM’  X6‡ÏÚ•ŒXIÞIzP™tú¤xåEû¶Ç]ûŽÌâˆR|Y¨ù}tdCóçÔõÒ¿  ïSò‡zw¦1z=ñæõž%×m6Ô%{ûŒ¡Ä¸[ôÓLÖ•¶T±íŠHç7·–{L™óœj«& dÍÓS®êÅ)§¼™IKÖ`iÙ¹äЬ­½9¬„-~=ÍϦc~ݲpz“Ä»ïêÃÈ¡eƒÏÞ>ú¨&˜c[>=М¥_ˆl–~â8rOP­œ0g2iä;ëÓÚ·©Û.8Â7R:{E­Ò2’~­¯8Šõ¦«twkÀ»b`p^S§®WÆ#/W´ùq åú$ÿóV+­éN`?R¾g/º÷‰PUÐZixÛÕ÷Ñ¡/S½¼wmrnÖžI”yacÌÖ÷ÍÓ£Á˜N Þ´ÞžÀ]NŽà’Qäi§ÿ\žX¼J©!ÉCCÁ8q´J÷‰²£Z«£ì&dþ$„?'³EÛÖé‹!.5-}M’[†«óžÁÌÜx³Âï‘ýàæ‰CåÿHË{S¢ýµU“ QϬÔM!»mÎÏÔ/ÙUz}¯›O:•‚™ƒB>Ü‘¾äG Àg¶ˆÏÛJæ» •Ù™m_t$G§ AbpÆ_¶ƒd*Úú¦´óX-ÍUm÷¦9žZ3ùŒÕ§Q¼Öh9reDC1¯øŸñ#€D?€£Œ&æ–}/”Bá4‰^|¦hsLд¶ Ž²È²:¤˜Ý°þZÍÈIi7ÿígÎ'Zÿîœ>KìcS²V« IdÌ}Âñf|½P@?çš¡#h*PÒ°Šõ¦ f[ydp®V§sœÃ¸Y:•jRxO@SŠÝ¢t¡@SÐÝæJþÕÔþÛe+±–A](Jâ¢ùêdÂψô/幈ZmäeÀíEÇüQ„þ¶ ® ¸+ÝðÄ䧌 ÅÖÊGÎ9Ókm?Ó@,T¶[™ Ë©žeq‡¹Ë,Ø¢Û=jàA¯z9Ï^“ßiËTï~>ð›#5j©1¤ìµÒát³(*­ ïY»b=лü—gB‹^).K(ˆž%õLÁUWè–ž;I÷Úhk—c7qísªnVE£îrV¤£ŒÐnñŠ»Ò¥ÌÊè¥Vy›ã×KöX–\éI³þéì_tc°õ…Ep¸}Œ^ôº¶‡}¬_¿Ê\‚§¿ÎVÊó×öÜCû?âæ< L@Þ2W8ßÑõ+éËŒµ6Å»ßg1KBÍŽ8â9g?åc½6-Ñôxeµ,.”¦ÜPèx Pr jpål,²›„È¿¼û~ÒrÊ–·ýöìÜñÙ¢Eó­.õ ¦äP3ŒnúÏz¨Å~OžTwåz/$£cÿfqœ›F`{ž;•™n…™³ ÉJðÜ¢ÿðocÃ(¬¼u,\{*ùxYXÓŸu4†o»X*G(@²‰«û”,}¼?»¨$–¬Gû5d!>ðñJú4x ·0§ ›:ÆÂƳ{HÎýƒÖagØþ!éWYæKO{Êâ™tÛÆÔÓ·ž1¯ùìùiʺE¿÷–Ÿ‚‹!±ÓO–Žï‰+¬†½kUèü­ÆÎ`WsStà‰ÊC‡QæäÀíOžr¦á¼2a‹ˆÞVåº8iÁ˜—ê|2½83/Eðÿø)>(4¸v¶cµˆˆ‰œíÄʴݬOì-_Ó`£ ¦«½‘Ê@h_‰¤ž5ëïóö¡]é‹cϨkrVÈ÷b­îá||K={b:“Ú³C»ãÂö‚¾´ðÔ•(¨4´ëžÑíMõ‰ƒeb³q3Æé{Ldjbþ bT8/¢Ê³Ó‹ôübŽ'Ù 8jÍr§ ØrQËÓòêááyáññ’E}óLÀËøžÄÐz"#kfÂs”Ò6 У†âøÝJ/‘ßΰYQ Áppy7ØÒõ¦Ì¤Qgíù¦øÇ[>Sé]ÆÕ#Cþ´ä:¨0mT¬¤vi0×àÙ;Uƒ¾ýFéšØø©@U#åÀ¦už:ì­Éí—™$"|S<†fra³ >½‰1^þQßr{ÃÑ~ÍÑ6O]E"ÊÊwªÔ=^ÚužCUoÔüZC²†©v'©4B­„|cB`2_KX”;O©êÑ gå)ífï*Þ/.Áü¶ÏÑ aé`þPE®’¼ØËuoÆ¥#¦(|ÓDôöK±Å3þì‚w& ù®•ÞA¯«’j,èe1+³óNÝŸO ;2„9±’ud2:à ƒ2HÕ’Ñž¶@<•Ú‰HÎ<å½屉ø¯µ½6¢IR-IBu®Œ»?œ´Õ{+'«j0V #,ô–ä±H!‘ç;µa…˜ ãò 4hHŽ«­ooâÆ7¼¾ƒ-‚@¢º†¡ÕƶPêýɲ0µg¦4žèõO+ MAœtÔ6“óò¼å> rÞ öL¢2v<Îò¯W7‘HËÃv&®tö ÒB“Wå[Ü#.ÿÄ·§ä»ê‡1 ^z!ù²…ýîÞÎsßáäØÊ*v(˜˜*Œœ9JÜg—†õ  úØ|–©ÑFAÄàÃ-íýeÅÉpùøݓdžTŸY¡q²»*ó™n¼ÇNdþ峤ÒÉלÊÌ.ÔHsÈèá­ÍÔ.;צñÞÛ5Ëúõ½©ÃdáüªÝtûmaN»241cÙ—Jk¬CÐZèæ…Ôþ‹´*Ò{ÇI÷¼×c FXÛR†ÚzMR5/[[ øÍýnâÞe@Sq¹€è¥Îy±ù™P+8R®þ÷Ô^}<òü=@ö³ƒ9Ú-==T-)ÎFS?Zظù×M-»Ž¡Aú²ngB´Lh×Ë „^ƒv HxÏe7PQVÈ%h|øç7O~o.ÓŠÞbÝäˆìa0Âl€xk5hvB*ªÞà»·ìóùƒÃ€mŠia£åË¢Tñü×óÈ‚¾ÎʧÖo…¥áÕQô`ð\¡E!Ý{åHbRêÓ¡¶÷"‡ÿýå´Ò®Ø‹’ôJ„ƒé‹úަ¼!Z¿êLÆKZ y8ØÏhu•ï3 çPÓ"TÓ(«'µ«ÞÈÿ,›q=¯2Р;¿½“V*vŽ¥ýåiçÚ&ôQ8¼¢æGfüBTu©ì­ìò·6ø÷›Æ0ïïjÚˆ: •DZà·ÁHÎ [ºŠƒ«ù±a‘IíÇÄq}\$©:5•l¬H³Ç—³Íò8¨] ËS'k˜˜!‰ƒ6z6ƒÙÚ0¢wüt9Í¢˜Ø­zE‚N×ô(đ˸ŠWÀrÐy¹Ó¨Ô˜L†¼0…e¹Z:(A«š°ø8¦o—ŸyV»7A'¯ŸØ»ÚÑNæSbUµID ³šéõ Ä{eìt;°¦8—kÈ›dùÊ .þ„@Ü}B/J$«¿ªìÆpަ†®±:'Ášz™MÔiP>¿·€0ìQ¬rÜ™á •j]6ÔÍBt”±uˆ/¾ÕSŠ' †}°úÌ¿’Î…Ž¹¨§ÑÑ9).Ι·C( ª Û m³ ê#ó‡†Á2ÝÔ$¡àl§‡žzaÙÙ.ßï&8Ux&h“×#ñt­Ë¨6¬“͵ß_Ó1X‡tàn“TŸ1l 7/FÄãôCBïµ9ž³ü²ÃL3xëÝE‹{ðÌ8]Àð¤â/61œ7,…íUvàÄ-ÃZr1Ï—’B3 U~»³ÖŽ84’V¿noF€æ•g<œjÀ‚¡_éÛwÀ¬´Yäè¦Iì¶±ÞólÀ/‰Ð¢FUAõM&æR€ ZÁÎp/&,Ë¢1È Áû‰×ŦaŠ£»Ç=ª(YWD x®—.қƠÕÉmm¥)œ¤%È(mó]ñdã=I0jÄÒy¢Ws‡£™²+/ï •$jÎÇ]ú†<&¢¡ò 2t;޹ãµìßk'$of¡Œ4Mo+¾²¬ø°(‡ç~ÕÎb±»çÃÒ{o~EîÌš˜ãÀµUG S#ókRêwu“±¨ ù:ݨÍש”}ézögm¹Š¨A›ƒ€b‘#8®†» ¶a¿j£U *uÅ¡$ßß1¬§çß ßFЀÃÍ¡3†3uÜm“xèûÁ“ÑFäf]Íi_’tÿ€¦Á  üã^‘É%ýµÔÐnÉ2WÚZfE,7âjîÎFxOdÐ7Óßßú×<Iù¼2) _~ûÇöWd}”.PAõk2›š×"W> ²ÔÓ3r<¦|·„X‹ºRš³w²ác<ÉÈäG¿5k«Pů,2†Ø=ýt¸åïÏ×Åq_= ˜ŸÆ²L>—R™€ù]~£‚éH?_! ƒÅªˆÁæz™´€¤ƒºpIˆ!Í;›/ˆŸ§„º©q5½âo=ÍAt¸bd¦f¢Ò‘ÙÙ'ÃŽÅwC]û[‹o…gL%º„­BJ é²öÑw´°UPoÞÍò×»[A:H@Bða#Ã³Çæ$*vb”ÝÕ®“4]'e UÃ:¹½ÉÜXç¦ût­Àë1¢­òxk5t NÇnOmlæ5söl:ZË_Ý“?@ !ÎAwm·InëÁ0T<„Úéƒ rØ—^É'çõÝ,:Qš2*äEþk—0€6nÌù7nn”wÌ?b!íÐÀ7éwiôd½ð59{'…̼­¦!Ÿ¯êô³÷”‘Žñôšg~‡Fþ‚û¸Öa/ú{NkM¦’_ öc ¾[îÀ2”ä:JMMÔ0Ù›@œ’‰T„ú¥íB ±i öÃYÀ}b\ÛÍñ (´Á˜­yê4_[O)wÄ8¡?™©îügÞÙ”`eÞSϽKL€÷ åí1ý4Ïeu[VW#Ï_ ©"“\¼¯Xh|â(Ò,à7W¶ÄÇPÁZ°¦S€héðKQJÔ:}ÓOÁh¸ÍX /VU²çûVΑÛÛxà|±Ti¿ÁÍ:ªæ·öNr×ib‹>Ó!/O±B&¸½ßèìDÏ–ðØváäAßj|`0³uÒj†ÐKŸ(vpÑ-t‡ØpÆ"z Ân‚þüÒ°*iJßïL(z‘ãÆ‘W®«NçÁ·é¸~+*K]TUîýËüÕ²¸lEžö͇÷K9íµ–¢ZW¼>­>D” ¶Æ$TÑysã$Fºeø¿9S Y‹†ê¶=úB ô’q<8XÑ ÂŸïÂ@¥/·lžÚãb81PÃ%^é É\ŸŒ¿EjÂöbÖ>${›Š3ätM¼Îê­jÏéYT<¦MÆÖF8Ö鯠âÄ,°œ@v{»rò½¸‰4ñòªZ&Ù82žZõQjOP,Èž­|+f¨ž¸OW†+GÆz8àEòŒ®*ã_B-qb“‹·1vµ™j? IÁ¯<;q\Â¾âø¬ÂONEhuu½^ÓÀõHuküXb‡[Šð4¾°g[˜Çïc¸®'9ÈT0\·ôPoÝÃ;Ô¾ÒN˜ 1nOÓ¥“ê{¦_¿ä @üS•ûHß2³œ'l÷•PÈÌÑ#Ÿ ˃“£É™#aÅ'’: ž}ñ#Ò!k4F=ƒZÇoE9˜!¦çh£Àõ­Ä0‹ùæçw&ºfäÁoõqNzãe{h:Ì¥/ ãZü”‹dÛª¹I%ß2’#q ÿhçÖ÷ˆ ˆö¥¦`$¼Ô†“ˬÜk ³ÔÏuU¨´s´¢€ På e>¬·ËãèÉ4XÄþ9¢*ëåòD «ïÎõ“sTÉtR?”UPÙÑ©xˆé'mµ‚Ó“J„Aô*Þ“ü6õ›'cÒü¥ÌTx0Ïq®9Ð4Óiæ~‡[¸ÛwÈ×oǺ‚百3Ø«Û/ Îà z¢:”³ùy5h‚#­Ž±çÜ =x_8)%ý¸ð?2ÂËŽeû\ÑL  gÐÜ(ˆ’)IPGgåë!PrIËutYü§wÙé®ÂBQä8yJåÄHpŠï(öý™'¤9†D¿žâl'‹êãxÙ¢Vgš$²Úé]݆Îò€8dÏ„¬¤ˆ­ö^ª8ÂÖŽ¶íæð8 µJr¤D”K0®l!YŽ˜g.{,<Ë'ß~Óƒ§§W!ÐZ%§pìÛéb}±rçYVóî3…G‚uï†ÎZR.W;6oluÔ1E®åqgڻﶛ-… t]u\¡F=_ÊðL›XíhX¶`MÂ#°BÓÿ_e®G] —( Hãli¶@Úö?©0’È3òg Ï1¶Êj`½À5Ø:¯'xI0BªJYËÆ¿M5OÞêjãw‚.ô‹_švª®m`«òeÍ'c[ÿ÷ ü|B>?=ôûÛ/¬¼>.146¹#‚“H„:\…"/Rg¦o¨•¤œZ×bíšyjpŒßE†Ê¤|)"„‹Ó˜’>ä󸨖5ÊúqåÛœá+Ú¸]öV‹ûÓ.Ìl…B¼mênt¤¼1*tò•8SªÛ©"ÅóÂíÚ[‘U;§òÖ7O†Ìj¥ßÔCø™ãU,lކô;×s·ö7Vyù­­gTü)k«ûS^J‹à* ï»s•@–‹¤6ïЊ"æDIj•8i%¸!Ý7ß9¯>ox *TÐÍ9% ¬žYæË<µQ‡  ×!Þƒ~©€¢n»î)û=çE äªêS<Ó_m¥ƒ0¬Þ•îË·×FBõÐk_Â0®ú©+a¾» O].¨ã¤leŽ÷žüýÛÂOñÅ×·‰—P8¤7Ì¡;ÉÔvº7†PÇÌRBt³Ço(zô ­¦ð¯—–%K/aQjÕ“dùQžJ¼L?§ÎØlwÞuO +¡ŠðKUr™s´™ý,â²'oþX ˆAÈPÈ,968RÁ0QzÂz0^D¡¤ÇîÄ©ÚbøØ~6ü(?àݯÐEs¼~›0qW ÷Aë‹ÓÇ®±s6ú)a{aMb…ú†(LUÖã|{«_=þ~ mà˜œYJº–µrqâÁÎÎå?øU mSA|Î&1¤ësRéî®Iý«.Ø¢bVá‡"U‘>k /¨ƒôÊ&s¬£„ð†ÓæÜQ>o»zÓ>ª­G@ÉÎkÚ!B¸Ë`!œ<ߎjNÉŠ4c•æWä§÷æÌºÊrwþKYï ¡Ÿ ¹1°wqšm3 q‹úx3çw!tX<DŸÔGü©OÓ—;×›¡.DrÅä 9­¼¯*5”÷rN‰ù¹‹‹ŒP#Ëù *ú‰€Ò°|¶9ÓÅ(¡Eý‹Ú¼#=*E¹Âžæ‘ò© ÌŽ€–’?Óâ^<7ÄA‰¢DVØ‹Ÿ)&År·l4/ê°6k"·S¦Lò]ÏÍ^w.„íJ ++µòRÑšÖ^¥Äÿýëh×)ó%©¸7mVÆCxY¦j}t~»÷JC·¬õ(l´ ¨›c”ÿQ­i½ªý"+µuÐSQc5N–w »ç}öŽ¯áŒ³$÷8qÏU¸¯zëÚo¤ðõ)ÜÈ›…/ø ?Òœ –Yo(±Òy;Äi ŒÙÈ!$`h)oç¿Tî%ÄÕ"M¡~Í(Úmë™öá5í#dLûz¸ºAxæ©Z“iZÝixàOä¬ ļ~xšØT¢ûûâGí­9¶l.˜ÛaFq/°_¼Pmª‹ºä!c{ë ¤&ú|Â…*¨Zqa+9Ñu¹è^_t©!¥þ¨èI¾H2Ü‘ì;\l%­ n™™pö/ewokfÒÔ±Yñ(†ÿyÊÌ€EP‡L#Fìoã›Þr..zKG‚ež.’mø3†Fl’‡‰õ¸š™öIÔØq>ç»°Ë W,ØürUÌ2|+|ß`Ï3vF¿X 7Ž@Xí[àmÿE0+©Ø70fm¸7üuÞ )Çí€h¶J³êéF…_xœY¹I}˰Ü-¶þK¿õ8©zVÐóÙ¶"R=8vû¶ÚG³RÅÀ¸çTJˆáZ“5~ªèë°¸ñ'àÕÆe¾ ¸b#®‚Øêyšç#ÿÒÚý<šy™}³R´Ö³‡ ¤Ç‚FŒ5YªåêŒég‰wÀ”e ~áÄ D 3ޝ€”2?š‰(ùȽ j©!s«ðD%­ÏN2ÚþáWïíPÏr$º¼„â¯LUËtñmýSȱ8Woîô›1‰?É­“:&¾> î"}rëlý,Ú}_u¾ „VèÒ* sÎ’ã/$©ŽÔú¡åVøç{ŒC³®¦:`¶ŒFîn # Çi4uH{Z!5 ‡!–—:„Ū?©všIeí~úÊJgØúå=¼æNžèG¼±b …Q˜ðF÷»‰éXbu*%‡6fW(þîï{G¦”ø§ª—¿i!²6mŽf2_]üXP/¼¥æ´Ãs±8º=ÊlÒ[+›Z¬pºãJÐ[Ç› MiF>Ž-\³³rú|J'Í. Z…ÿ$‹~|ŠƒŽlx7d\²ì!¡+§|â¢*x¸ªxàM7‰?l{!ýÃÝ¢ÁhÆ(çp»H‚¶ðH^ˆ>ò¨Ã5Ÿ4∘ žbƒÂµ`}od>>—GäÆâp7 >w²êÚÛUð‰8!~ÌžT'ü¢§.ÁÍ~^Ž”yJWöjñ¿¹ ðK†*Ã~—[èýQøXfvW¤|z$ u¯öá }WtõÕVÁgŒÜŒOêÌRÄDNgL׺un¶kö{õÑ®ÈÑly­l_ƒ´¼™Au- mXzFxŠ:XÊx·¹Øé¤ 8 -] ·€Ðhj«³?»B,¦üèBtY6¢Ü¡-Y¿Ýç“Hãí¸C¤`Âo”áø\3ò¯j¸·V.M)-#Yóý˜êE!ÂÌÅL‘VE=X=¾Nä5o›ò_‚Cܾ¯U/‚[$dázXyZîEB+Æ[|’³š°0‰š¤~6ß/EUŸÙ}ìˆeEì¸ ÍÂ$]©çV/êƒKx’*|ÐTþ8'¢°ëAÌJ+A…d'ÐWÜg·˜]^þ]ñ²¸Ä3Ba(ÜLzê”]¨Ó³©•yÓ"ÙᡯDDÿÇ=X¯Ößz* ^ÔUQjâRkŽ 機Wу04qîPQý¿ªG¯=Μ4$ĉ¹=³ó‡¢¾ç.ç´¬食… £ÍáÚÃ^a€HÈØH²?oÓïL¤wòœÖ»(s„0!¿ŽÝ8'‚ìJ˜ÎéŒWÚ˜¤ñkkŸ·I&Žk‹‰Qœú“›0…¼b"¬ö’Xúf¦Ï—\©§íßž{2XF^œ¹Ñ¿¿IÆ1“‰/ù{ŒÖgšOmœª*Á–¾Å¹>#ù8XËš)u¥po<Ûœ7àpF_°Æ~³Zñ’3Ga \¤®íò¬Q4;ö|ŒÙÒù¡½~kpAùå5Y©`“/IÑõa.f¸ ݸx}°"ÁŽ ­Xo‘Ö:…öè‹mq(k¡Em¨°[è ×wëD‡i‚"þÁ¸°zZéíd²å)¿/E=j$3豿ìZ¨2ü?ažð;Zwó;< Ì’Î}U¬®Ç04,ß~ëÍñþ8§¯€çZg´ó M”ô´Ý«l"ü(Kð"¦ƒL|´¶Ä9¢é "< æ‘esÜ"ûmžzì]Êíõ®aÆäD‚@d3P»öÙø_<… 2`‚ÊO½!m>κ@=QÉ„ißÔí6'ÜF÷ò(O)JF—Ú}åT³‘º¸ø.¤4_fGüúÔÕ0ƒ2v„’`´çvĹÕQ*èüþ=³¨Ò9†}ùͰüÍ,ëpÇEÓ{ŒÝA<1^îdŽŒ5Û”Rí)ó”B#ƒÀ:µƒ(’¶<”K£Dû¦œ 3 ì¯ ½˜׺Ԝ¾#TÎK<þʰç:ÌTøn¤h½Ã%Dœ©Ñ?vá§.Z šV>ý7Wþ'¯Tx9Óñ[¬eãÆª2Ñ'›ÐÄì-˜³ä)mPÙ„¶%Àp ä»Ò£/,ÅÃwú¿€Ð– {Ùteð³åúü¦„ÝÀÆ})¨\z’Ú­_UžQ=¦è“ ²]Ÿèæ° ‘ 6ÕßZ’Ó~j6#ªJgI¼ÀåoqãVú˨[úæòYdÚ®…& cûdðò­uew· &YΙ*˜XÇs¬‚\v”€Üa¦^)Ú“A¼®˜KrÀCÍ?Ó¡!ïv–°§^ím*ˆr«ãO9Ƈ a*¢¨°¼à’!ØäsW©b—|N;RÑ.L×+t;"¿Â,îAªMĥܺùBêÊ»ï»Ì;E7fZ"yc>8·Å8À³£¸s¼­®ªs”9ßàeŸ»+ã‡ñS“唤 º’££c0oktdâ£]“E©cY­àq­TJ¬ÝmSpXd)_Gë$¬SP 3s¼Ð´¤ç=gª}Î/Ëa°`çVˆacÞ2KÀ µ ­È+ÏX¨+ö‹ì’RøÜ³:ˆ¾DÿÈÎîÕÛòNWOº’v©vÞ›÷F¢‡”çì±N+™RRŠË™1:Fè<©Cf†í5R„.Äï?F(ÇìºAWÝ•‘s~»Ž”mÿíºýµÁAÉLF^¦ÿC´º‚ Ä“üFí|RäÉBxúzD—Ý|Ä‹9dÆÕŸ¸Àààžt——ÑŒÉþÃà‹"™¬ú•w¾…b~(yûœIXÈ 7Bºõ¹äÒÙ¼˜•ÍóÕÆèOá ë‘GÀ4å€Rz„Rà¼W¡š$´u[Z¥1žžW`DO?èþOƒCn¸Çnžðuv7%JøædµŽXˆÆ·p‹Ø·çw× ´ù—œèRM ¯O»¾©d‚÷N%ØSÒ=ÍærâÝürÜu} N¦í–/°×v„C“°%µwËÀÀ%ÀbŸXñ:‹=ÿÖ‡'ÜűYµš@ß½È~ô¹K¾vÉ謉Á›.ÑIöµFŸ"Dù&Ži…½ܘôWzm}d|L-/jéó ’±ïÿ³×Ñ/‰Ê6‹¼l~ôåÙ¸‹VÝ»˜f\­±FpÐ-•Å´{õÇ=œÿqÓÓå/»‰ò6žBËc£ t¬óȾS8»ËA€\…¾‹:®þ&å{ÅVø0»)Vý~gVþÐêÊ&9â“ÈÃ*9JÁ¾RòÞñˆÌS×#³Û=;¦ ³ˆS7ô£Aáè_¡ÁôË·(˜}{`ØÐÎW7VÞ¯vœk«e0Câ7ÙXëPTHÃ7B^ø‡+ª•…žÒPëK`A3é8lR+WÅÐë+°H¬dŒZ?@ÐzAŸ iÇ08³þ³È= ÑË>gâ§ÁßRùÁ }‡Œ&ÛA.âúÉ\nmóØÞ °;ß'Ÿ"‹÷*;~ºõ=fý¸¡À Eçðæ£é 2|—ïìþ¢/{ë\f†A,À=øÃŽg–QRZ’d´üÖ$OÝV`#¸ŸÃ˜Œ]|3ˆ÷àûkm· ¡Ñ ZOï騳QþzVз±Qß2­W`CG»™Ég~­Ô,ü·½®i}³·8Iw7ªL|p†ãc.ƒŸz$·!Ñ  ÷*Eð¾æ]Ô›8”œ?]V ÓÍx ²¸ S«âKØê^é¬ããòk.žÃáó—±<Ö¤õËüZ¬•ú|½|5»0.„lå\4@’mû5 á‰'ÑU­ÖÚôØvN¶|y FÍ^­L6‹¶ü¥ïöŠ{h=‰šƒ1]>vŸ~¨²(Ýêu’TØ‹¯øµIäS¶æBÈëãÈ/—ŧŠ@æ"ÄxUòÅGZæÌÿß"¦¶Áÿ øs—ïGGÅk[úý_/k4¥ÈS´§]Ünn`‹3Ôáí¸<ö8TÎ)w2¿ &{qàäáJ;I²ùã…qÅaÁ{± ´Ó‚š´ê$÷ª¨¶ëÝ`ÛMxÝèO†9<òáƒßÛ?ÅPX#škÔÄf}Yás.?¢ÜÃn! ý¹v@¯x,XãkèÂhýC7†íšvh’÷²¸¾s6nì§àÛ2…7üõKåõÌiœK¤Z¼ØBf$´ÓiŸg¿>ƒÏ†¹ô«3hÖIò”); ,¯Éï:êÜzC9þÛ‘-kOÇCwnæ÷/œQƒj"C­G!ª=: UßÈÆÃ­MÖÉóÔÂ-§!}ë\’à»T‘‘†Þ¨‹¼Ÿ!û’r‘<:ÊØjŽ˜ôUð0»Ü„˜ó§ÓW¯Ùñ„»Üø”óöz`Ûÿ›úÙ‡zr–9)›ÅF!1Éd‘%h×_•–íU¢oŽzýDF @®'$¹y WC¬˜ÁˆÞ8g0Ǩ £òY0ÏÌ„_(zvsr®ËšUFSص96&ÃÉÜíO_Û}OoÄí×%ör» åêÛÐ#ÎÎÕ“œ‹½¢l¸ìCE¨šøÆ6Œ+JÇôÏ·µk¦%öÛnîâé%íµ°ìBZÊÓÎ5gqëh}ÜÛNÊ»¹JyÓŽæP‰ð„¿·#ȼ|‡áÕ‹q÷xÎâ¿™¡)œç!´ÞÊnÛ1ôþöʵÚÐ¥zY\çôÖOXFH²hëJǪÓJÕûú%~¢jºiÕºÎÉŸ­nÕ¼ø«…YôÐxå–H£îZ°j‰²_£™Ÿ}°âw¡ß?סcîÒP ¥øûEϘüá!@o­a»žÑäIš:Sûm„¥:ø(Oé úsr£¹„»25%ï×2äú4®G§ Óƒ!ö·=èÿaƒ»«RH1Í`ÃåÏ?ò:ùN/q 4«×!n$²Š–ð¹×< œi#ž±<ª`J] JiÈú’¯º{aŸÞ™+¨Äâ÷÷ÔtW¡ß§ž%&bhÆ1>N:Ÿ©‹~,Qƒ¼,ÂÔöê©ï’ñC˜}= ûÅ€æPÊ›D¸`&Úþµ(üÍŽœ‰ùÕì=ÁÈ­ЦZðÞ>÷Úsg{„EMñß±_¨d\iÅE¿èÌ´c«X>⻸_8ö@çl«€ï™û~\Èå.KðôÔìfBf¹§vkE‚mn˜3ª¤ÆùÍÖóÏ—yåV#O´oq¥@¢ÃëÔßw,a‰ÿl°Ÿ–m3‹Y•Ç^ìZM½­²Ã¼bŸy+Ñ/ѵø¸szjPS•¸ëtãC7Ù?¤o^zë3G"·kðë’G±¾>àë‹ y镘ê²+ó‰m³g±º?í7ŽZ¼‡ìª°ÑnG÷ypdT“Âûd (4ò8´&zÔ}R¡$[Z5,“ÄñHM(F™" 9V:ÎÑCÿNKŸ³Á„|nHÍÑ9%°)ϧ³~Ÿ¬WôÊš"J.EsEì8vƒ é(+YqTcàhƒj`‹Cä%]‹—_ΧIŸÝúæÚ\K,­dµÅ¾ìœxIB&âúË÷ÎÃ,hU¡/³ƒ]ƒùµë8û.KüT4¡i`WCÒ.¾ŒârÍ2 º­_6›¨ H¿(ª'q=osààp 3§ûÂånå¤6’«y~è7ÉXV7q^\aüau_|<Ôÿ¾²  7ªoE¯S, ƒXØ:ívDXüQ²*3äÉq主¨Óð±ùwºØi÷[•º-‘€*ÄJƒ×j˜“~`ül*OÕV8ûn¯)îÙRõâ´6ruX§(å`KeW{¯tœ[UšïfŒ6(DD;³¢¡»Ù2µˆ”á EÆ+ ÆÊl}><O\8Þ¸#¢ áÞæë2)•ú#ZÇãBu> è‡™Y­btÅjÝ¡cA‹ù·Ôܱ ; *¤97EÛ‰£gìöC«cmW½“«dÛ°‘ö$sÈçd[ÂÑoÀµµ!²±M¹÷ a‡UQZÿomà÷‡´šØBßኵólB£–§hPM±•LsMø. žHïZýìx(ÊP ¸ÇF:®ÔVrõ±ÕE†ß‰(ì¿eÄ–°ML‰JCJQ4<‹d_-ÖРÇðÜ0ÞäH†Ë>vKJª¨VÖ2•VOßÅH‡8&š Þí<ç XÛ½Çá ۗ橯¼êoúõ$Áª¶•R@k¬qqù'Q'‘Á¨TÍtØ¥ÛÇ÷D¯—Ø€|xÛ6OédØÿÆü¾oWz“óÞl²ÁPï”nk²JÚ3_× [×öÓÎ’Ï'¸·ôõ†ÞC|Ú÷ò endstream endobj 71 0 obj << /Length1 725 /Length2 26457 /Length3 0 /Length 26877 /Filter /FlateDecode >> stream xÚl¹c”fM¶-œ¶+Í'mWÚ¶JÛ¶mÛ6*mÛ¶mÛß{ºïé;úŽoì?‹#fÌX±c¯¤„¢¶6NÊîvÆŒ´Œt œ%Qeev3 )©ƒ±¾“¹­°¾“1'@ÍØ dl`d0100„líÜÌMÍœ†”ÿ2T­ô̭ͪ¶V¶.æ†fn~Gg:g^º’”ŒNfÆs+c€œ¼†„¬€BLV flcì ow6°27H›Û8SLlVÿV†¶6FæÿƒÉ‘î_l\Œœþfâ`k Q•“UˆÑ+ ômŒÒâÿ¤Û89rþmlèäô?³£8ýG²Òÿdðé?^·Kt0ŒŒ#sC'€±©¹ ýÿð&acb `ý·ÙÈÙî]ÿrü€â)FÆ&ÿD;[YÉê[(„l­íœŒ2¶FÆ6€ÿáÞÕÁüËÿ†ê[›[¹ÿÿÿŸ 'ýȰ1ý‡>†›ÌEÍÝŒäÍþáÛÉÁÙøßf5㯌±‘¹³õ¿ÓÿáäŸU5²µ±rÿ?#þ3•G/&#¯(.HýŸ"ø—[ÄÆÐÖÈÜÆ äôŸúFÿ1üË-¯oþï ú_,ÿ[QÆÿ«Ëè;9˜»´èþ§Dþçù_éÏÿ´uó¤ebdÐ2³p™9Xì,ŒÞÿ×ÐÙÁÁØÆé_¤ÿ3—ÿÕÿULÆÆnƆ0k˶†\A©Í!å>"…³àÔ³Óz*ÔËŒÀ+SÝ7ZÈæƒfFº‡WØ÷ÊØy®px3þ<»—;÷MDú±ÆpÇ“Q„a–±_‹‰+L}j¶ÞòßêÂt®ÁT±¬ eÁnÂïœÒ××ä©&gæœ×HÚ—ò ‹1F镵÷#mÇ­.<ÚˆQþ!GÉÐü†3Þ§®Fš5 .¸6à{Ý[ Í Ü…»!ÅÒ5+(÷·; Uä]MüÁ“(á«'R¸ž(ÊfK‰ÆYETô¼Ü¢¿Oª Y—‰ÂEŒ¹bªê}M/¨¶±Jóbæêé2k¯Õåäk²`Îô`ö²ÄuOA GÒh#Ë›}£Ö6î¾ÍdN­Í—Æ_.ùÆè¹]Vá*T¸¨ß…¢ïëd8+a^wÓvösV.d}§Ñø{~q6;ƒøæz¿Çœï°Ów¤±"a“#{ZðÃ̶۷ˆ}`P£ ˜Ä)Ýæ÷z ªéA¹¡™Z4¬a õJQ'‚VA3·ÎS¼lõüpÒKÿ a\Fë©¿Lú¬’p<6#ý/¢«Ýb¸ð‚l´'KªS$|±»o#í%&ÚÓDºÈenzîVïÃFp¼óªéKŒ.)ò‹¢ÁÍm~ãKÉûl]:L‚p'±!xn4ÎN–3C*iJ*~½’Ÿ%ܾI±eZ42%gü™ß¸\:~ŽjX¢uY&Ö`œ)¦¹Ý¨¶­òCLGì^ K¨ÿ:¹«p¶kë¨ðErþðµê‡ðÛûÄLtd„ú†º’‘çP´ µWþ²z­ÀG§~(¢e}˜±nIT ì‘lîÁ³«_”ËÜ©µµ=É ´V“†ƒTr;‰l~vØð;Ž£k"û©»±rX£X8¢á,l1,¬ß£èÂÎÏ‘vcŒ ­k—ôââ¦5ÙFä4ÁÞÒ²x š’.èðéÈIÌÇ&~ÎkN—GÖœa®öÜÔ¸D²Ó-(qs5†Ö§R ¦#j9ÅGèηS+"I²t ![Ã|G[)ä\ÉÖMí®ï‹}¸©´ÐZ®É¥VÌûcמm´»¤N_æ"Þ bÑ€ˆ/Ña Š?@!$‹Ë_ÿ’ã*Q3d¬Ñ† ‡:^^¤_Å´s»a®šE!2„8Éy|+¢ÍïsKxºµ\Ï~,#mmð3š¹P‘.•ýZÖ@•Sá]Ü#.ûij¥äKÜp %Ï×ä¿j 3ŒW+…,˜&õJ³1ª X *‡û½×=•‚½a2\ˆlv©Rz  ŠŽ•+SGÄv’˜ƒud ’Z€~XÖLš&Ú(ï±¼Qá燂|À£e){ÁeUµÒ ŠfôsÄ/Š-Áx›Õ§Ë¦•¶ëð‘\'ê-cÕÜnä'³à¿Èd¹¾¸8¹<#¨+dð€ÓÓÚfT2žOË&†0‡ÒøË'„X$ac’:”ýfÊ)H&Ÿ{Ð9«„Ðü°Âü5n_¢å§Cp6~èè=e'}gÈe1¤æ¥×ަØ^Ö9¤ ͧ].—󮞋†úµÊi¨zOÞñD zl)m|?u昂*ý×3"”ô¼EKPêRTCtÙ úÂ7Ôc•Ÿ:µq Ñ6ìãmíK„4>³Ç; ¡S—fg"éè3‘„¢k|hc{‹¼SÞ¶°aöùUòQ$8_¹íD_Æ=p’à ²ê{uà**»ò:s¤¥QÍm3¨ø×ƒb½ÝÒ\“ÑÆ IY\Û£TŒ´7y™IPîšñQéà¶K`ñ3£S5 ï¤Ê¤­¯pñh·çç³÷N]À;æQKi’ÂIrÑË7ç¹Mô—>b¿*/\{^>wÛ!á8 ïâûñ‘^`ž‡÷Íá4fúyÒ£Åzé nd,$©¨,J•ÇDòÀ^Wm½òÏ/äühlÁˆTƒ.Ÿu‘oP–æ7Ø¥Œ7D,¼$Šþ¹vó^7Âåk® ôÔ^íá«x=÷‰h&¹Ï,»×ñÙ ³së: ú ƒÚ‘F×Ý;ÝÕwáÖﮆ?Î; ¶‰]§9äâCfQN8ÌÁÞÎtûÄîñb¬p?e Ã}d›êp™ ækú…Öy56N>‘.Òâ9 Jdá¦ø]$+Ê‘QÏYW"±¶N‹Š½-âËl†ËººPLV÷¸¶M)T`õh|f~´VQL´àÁ‚µQ½[˜á/záΫ#ÿ-l @[YæSœlðÉC,L§ b,gµ-ù0Ð:ZÕ®u꫱§êwM.Ÿð&»+Õ½pø&÷N¼çÙÑ”,á0¥ÝCÜ£±ŠÉMFÝ_¿o7¦ ì){eù}‚XŸÚÒȸé¢k’Œ$( »˜Üeâeñœƒ Jl§oB˜8£¨ƒ›åC8>ykÈ*|}eЯtj˜Ý-Ò´u€ 8ùû÷6¨ù<~ª†0’Yß-m5w¾âfªêÄå: ˜m±Iþ6Õ¯"‰¶R „ÄÍÂâõ+Öz/$ªDã]·tí‰ ©ô`¥ÐnL@ ßí)¢xl+‚´OJ»JŸF ÛèÅ~±kðž¶1‹vÍÒ²NUç4ø¡6Ô£äƇ³êHwk= œ_6Û@³ßÚ›]y!p³j˜ÔÒ ü²…Ð iöº›ËŸõÕ£wR®ûÞµ¿ð`³½ÃR„×ÑJ  &PÈSÈ áþ|Ä—Z¬;ç¾BÁKQ ïstxO2ÕhðË™*wŠè>q£ÝLâ}âˆ&uFÜÔ^üô1¤¾cF•ö^B? "Ô± }!9o|%¤ ­Z< •\l-+ŠmNÖõD« ˜aí½‰pá]Œ&9âå®@µ)ÃQˆaV†se4`ñ€ï˨ÔVei•„"œ¿ÜyÛl7¿P¤‡vy¢§W%Z[PU&ƒÌD‡pâO¯´ØO%{-ý Ñ žbzVjt½9ÈÆ-¢çh¼ ÊwÁ÷HúÀO÷öP«Z9ŒÒ«Ø„µàú\1ò/Ú#áÜ!Aª›ƒÒT¢Pušê;µFôgÎ-íOø’·d™½_§¢˜Â!a¹¯lÃCöóyææö¶ž×ÇUÜM% Ɉë²èW,âÕ@{qêx[h,N.š§$,È\Ñ0¹®J(Såå j!ôA Äór, Ô©÷éénoI0uì˜Æ }Ê0ƒ•š½Ê­wh…ê ¤Ó@ã•/ë7Îb´?}oo˜ S$ïS¶L¹Q{¨¾ý§¡?d_ÅÊv5•r?y éý5ˆZcâDšôÝñÒ"†¬SÄ)akÒTu.$¬‡äúòu6"ñÈ^aˆ¯\úaªDYÎ&ým0¦¾úáÑò€£Ê7Pÿ9ÈÀ`݃JCö¶k2Ò®¬—ÇX+ü»>#{“ôþ@úàåÎúý« G„Ûl §ó±Óû‘ÞrŠzž° ¿«rEß]/aÄkŸ³ŠdÕw;µIy 阮¦_å—vŽ…:Æç¸=ç×ÌzwîMvn5ö9½¾·G1´¿omP÷ù½ °[Ý wFpÛ©J zO¤Ÿ„é£ÚÕ¸‰ ,Ó;9Ü;¥— ½7EH.MÈmv›º)šC„_”KõQ a͘?PºâLq™qÒÁa›Lí¡%ž_€ÉA¨ý]‹Ü•Ú.ë¸2/¼ºQF?eüÍß˜ßØ<ºÝTN—ö˜oîÝÆ) zyEî°K¥q8×ÑüT'ÔºpÒB¥ÐVÃ1 Ïe‹LŒmÐÀž³O¨BúöžßóÏÓÄdÁY†ÞQØ;“Ó¥ÑÉ—¹u䨙ݳ¢åB « a< þ&æLòËi•¯½ŽQKBxÐ¥–‡ÍBU‹ÈˆWx â|BE*_~ö2U ëœ$¬n‡HÔ£Vµ-#à=/“ G”‹íé[É\ˆZtìël‡šn¹uï,IüFLÙÙð&wÇöîcHHj^6ð­0»8ÌÜzèIâŸ7ÄG´¿ )jiwõIZr£½lC/ÜyhZ ÖN\)NÍÏFÍ\å=< Áø½Êâà’ÇQ’÷ƒgãç#¦ŸL—,Ô7@Õ¦¹å(Ûƒq)5ÎÄ bX´p\6q§º¯úæ—,ö§" “om¿¡~=ðO¢T0Á—6ÉIÎÄ=Ô-IÔå«Ò&ͼ$@% QrÚ*ò•k7i3Ìÿ6¯ÂVœ[6¶X=–P·ƒWÌ:ZSÖE´Õ÷9\·: ¿œÐ¶£.G7ˆBôÃnË?e›à€0Œeð Ñúo')JMÖ½‰‘ٴî%?þÚÀ“ú>_(É»@r]i.ŒS˜èj«Nºð­±‚ÈQUëâ£ìåþÑ#6þè~Æ~òv]ÿã!¯é-å“äGD”pÌAØC8%†ƒa"^lÅøµ Ž^Tæ]ô¼ ¿J‚.nã´#=ía^¦œ!è,ûú'Í\ +^ÌwC!u…AHq®Zx§IŸ€s9Õ–[ùU3.8‚Ú­ßBìéxýf6/ÌÈ—_¼Î›¨cy! ‡î"ZjÂo&Ò&­o!‡4–PÓ=1f#vSе̵jxì7ý(L^ƒ'Ík¼M0uóþ¨W¦1$ç7dõ8ñD7äÉ<œ‘ÕDœªª>èÄÑÏv„7šuŠ3žƒ(’ÔxÍ(纰/wi\–sû]žõ%Fú™«/LZ!è;Q,%£¦©÷¯Ë+@ä3ÊÚ-²ï7êmÍ ù:jâ6·It… Y5¾i° Š?;´×¯ Á^¡uÅK ¢øÄŽ—7Y”Bèš+HEZSÒ¨LrôcMÑ_IN—¡Šfçìýw×`l»s`£‹©%λoD.‡ŸÀæÕf]ÞSvÅ?;¨ÏŒÏpðýå±ø¥Û•áL Ï¶sÈöh–ä˜6Ë}ßIÔ?2›ƒ/26˺š„}3ùt@™ZœâÿÛ€EÜHXÃ…|áOÿ‘´¥ySÈo'È‚HÓˆoVXœsfHÈøò °‚PØôæ„?ÄpŒå—JtµJ“æË–”GíG< [ÈÙÃÓ¹iàò\XíÂ}N…42Kø gÂðê(f“vÆP"ÂÉT?U€n{gX^øµ\GÐVGP™®ÃÕQÃvN[ä5ÚÖDCmÅŸ¦0‚·ôßÍxt ?P!°&eû?ßW¦“[ !ÉACoÝÒ7z`à[ô=®ÅÎÏòÈßùœ>kJ¢ùX¼r¾z4R¥ ‰ÈI¥aBlß`ë´`Ë}[Õtd 9§H#q\ëa̘Œ­äžIxƇ¦‹A…X(p]&Õt núÓ)v¤¦ %­|$4+ ‡* ¢cïv^:Šê0+n㜠 U϶ôîëóÌ[()Ö'g9°ñfxdÏ¿«áËì¾^?Šñ%²Ä€F+¹£óVÔþFc¬ø?û3Qúø¿`ÀÄu5ê O È{ú&Ê!ZõFAÓc½­ækSÑÆ„¼@F¯À#ÅÐ¥¸ÜP•r¬)½»hDéMDø« ìê9Xø™iÞ ˜©D¬¥÷ž|}ÛBOqÅv&îÅçÊüQ+]±äÊùƒh'7x¢t™ˆÁÊ_й’Œ+~–QMw«1’ÀR‡«}µýX‘äÍBþœ0ÄDÌ"5,çvC$PSÃŒr½ßy›w|:˜'û†s‰‘˰0:BZ¡U»þ!õ%²•Ûh…‹Nð~ý~\~Ñ8žÈ7H*Û˜KCÛÑŽf“<±h'­ÄI3‹;Ú¹‰5pÔ²ÕPT'‘™-qwøºG¨IuRY´U( ›Â’$/ˆr6_MÃDï,êð ÏGÂÊ.‚à»æeŠ–ÎPu0ÆPÝdbÔI±"ëØ¿?Oêãõ'‚‚ó g[¡ó»ÃóÿN²³ÚW²i©ø`¤¾ð¸5k: tdƒ¤=U;2ÁñŒ­}6ËJ]rÜ-ÿö‡Ì¿÷ãWC—™7Dùëœó‹¡Cê]LÈá;Œ3o· mã0Š’Þ[yœ£È:Õ¾ y'k³ü„²¶ZIÝe m-ÌúCÿ –1 3ÍA™äš’@˜Ü ­ aÓQÒ`èÃÚ®ç]ÜQ¦[¹%:ë2Ž ª5`ŽÍ¯:¿À ³{ÓJy*ÅÝ'ó{#ÓC@äF2åÙ%¯jµD/@b+öüÑOh-W×çØ–²å Ë8”³ÑH=¡”º?gnÄä…×^­<ŒœYS–s-G„‡oa!ÿ7žIÔˆe"‚A'§Ô¤ß–ú÷ß÷A˜&Çë V¾†ª4¿8{8$:Èb3*МYÒ•5gÑ‹-QN¬ªúÀSÝb)>¨ÆÛw °Ýv|G$BÑïëú¥Ûù‹¹¬¨Yèpüùd¨)›‘a܇O½ð-Hªøîà\ëûaUAn 6c¶‡½É§G«öUWtÁw‘³9n§I÷P÷ÉǹTôë>ndín•@åñþaÛ‹,_ß ¶Ànv{ Êpìòg¨0U©“2ßïýîDR¤o³íÐtMý˜«¼Z{*`–­LÜ)—¤¹Ë¿gµW}ÒψÒÖJ£òcšQ¥vXag?etøOÌ4ú<3¬]]ìþÑJHã@®ú¼OžÏ@µÖ½Õ©„*ú•§;3$ª‰ó‚>%•‡ºù”ðf0„V@ÖV’žU;!Òf0íŒ%ÓÓø¥¶«y­E!î—æ±o»Ç8-æNX±t^ ß:=áè@‰ eÕE] ˜|/6qxtU›é$¬Ãá4/c»³¤G™ Y@]JCãÖU“Ù¥0¿ÑyˆÌ%ÐÔ·]¿W# úÔ½ f%J(FÆ ª}S“ŒŸÎʸÙm^[Tz¡~C+W|ûѳfà—l"æÁÕÀ”bí£bn$_q)êCoÁE öA˜ø@L›'¢šáà›å¤'vã\4ÿù–$_ñ[‚+Þß@-ï?ƒÞPÕZ]Q^BiÌ¡Q¿—}.¸­t†UÔ&>Ñ¢9Œ\ÿ“ËãW~ôäO)+ï T.…7(ægºN€ðM}.{Öžé/#oƒÄ©ùkldwÑ¿­oñhn}° W7*d2›Á¤'v3 1Å•ýyæ Öàðx"%(ٶ˺§9ù÷òþg²D[íî0õ;§d¦="Zj0TjŸâVŠ˜’aJKÛ̆WKW”'×Ô«¯žëê  Òk±|ª§pD"›ÿxý@ì6ã}UÚv°‚X8L›*°¤ŸÔxËÆ4ž©rì<‘É’$‘Œƒ³\\ÚËyRÇÊ+sÈ$sütÆ™f?%õ¯Ç+ï(Ô‘­é¾†>Åvè`ôT›3y„çOsS^‚N+ž¤*Y)ü}žcžÂ‘iÊïÈ-ˆPóÛ,¢÷8Íeqœò?Xl*Cü/›o?uR®j´§¹[âúZM?6>nyéó8Ì40Éa¥óN^" Oqž&W ¿×õ©fò9§Þ´j¨ç£DD¶Üø©_WôlõhwP\¨‚ 'ž8v·ÀVÍnçÕD¨ów¤LLlV¢šcŸ‹žªtW/F–Fèš*ÛkÈîÁ3ôa×MK(ÜWc1Ç!5¹r“þŒ”Y‘×p/˜%ƒ‚ùÐßrk1«ÈIEkFßDÁX‘àuûšmýb_y~`*$’ûÃ"?‘ÕÍ2Õ¢xõPuûn®8ž]U¬Sæ¹!›iç¾ Û†-Å^2%ЧQHå)ÛqöÁ߸°@™!"¸QQ‘¯ÂšãÆ«áè‘JíŽ/ ½£í.‡g ñKÞ6xêÕqÅâ4tÂRßPc Øé‰‘D·_¨Y_5…¶¹½ðà¶ÐÜo}«E|´BÞ€Üܤ{‘žïºBÛXhƒ#ø…Üpa/‘Ók 9“‚lÁ¸Ð&8×}\Õznu6¡Ì¨zóx¢Díæh:ΨÐ>\)1ÿá‘ë±ä¤Ò²‘ ©éìCQ:båZ©a]Ô[°à÷žàü*4ánSY© 5QÞò %Äš&ö‘ÕÃV–ðÝžôÊ6¾ÃƒÕ¦%úàõÃûÌiÑþÙ쎲©»4…\y/–úmp-¿U-D'5÷wÊ‚WçÖï÷UEœ/–ŠûÓ#;* FßQz]Ò—æÂ}”üEНb®8<`®ä LS2•†HU„·ÌâØ±k.àfÿ£¾xíS@Ú $Ës`› )mÍmºx‘Cw#mbYsË9fƾܪ·ªrÇeŒ–?é†Mvâpe³h;Û¸ór‹]£Á'æ5L‘â#Ƽc:ÿ²/1ô3‹'òÞߊÅt®X¢‡`¡þ nÔ)'ª–ØœŸè‘5bvùÊ/#ŒRQlÕ¶íêb±œZ!ßè=ýŒVLbpÙP‰‹o:x„k‹¡£×L8å¡ç*iRÀêžÆ8À.¢»s6aƒÙ‹ºÉ‰29‚6 a¹ýùuÓÀÓåþv)™ßFBf'ê>£¶ƒ„úCô&96lnxæ™ÀÍžÄeª¡n È[•þëÉ›7~!‰PHÁvµíɩׯ?s*Üá?ㄟW¶¬ìM'kîû Þ.EOä2»-\>.‘º £· ¶e|7ª8Ò^?’ÈVlGýázK僵s[þ|äH ­ØûâRÑL A (²ñ¿·¼•žà!⥠3*…ÐèЂgÍ]¬7Þ5‘â8'Î4f”¤©á S­4¿ŽSp ÜÁ”!3` Pjgk#”ùòQtÞ®Ô<îsöÔ¢iø4õ|f §1/úª_™i¶ë¥ØLÉ¢Ô!‰D·+ZKX¿¥>Û œŽâDœ|àÇ.9Ð ©àšî‘ÎìSP•[|ÊWF8úän cõ4@™%­á2À¹ˆóÖ K½$S€p-;^[×)ÓõuYb|ý®)BHg'l¶B.cÑAÆÅ?þ°˜Üꎭ˜à•uȪ9Ä*}1ô»¿¨ö r €v= Gä'€ ||ŠŽløy¶ãj¬”^z³i˜"]̰0,½U‘)¢>b®œü(ôáÒ „ø’"ØA:vŸÔêý¿gT8]^˜ç]ºYÙu©ùšTÔ_W,^™ EB2tJ#®³?I&EýÞÒs猤.|ëkCeOµ§?THC ™P©aD(L1'Z2Û6·ü·JÊ¥ógJI)ëÁûIª|š.Rx=ŒØ©÷D-ewt›•nû4¼.Ò;ˆûœ·aQ=ˆt{ÇzX^•¡%Åhé?ÙÏO‡‹¢÷v#lcÊCL5›¸«G:ÑϠϳ©kðýªÃÍÁåÆÎW;š¼…a¥ÿuK©PiYÀ–9ß“i‘Nù´}ŠõáÏi%¦hî-JŒåô]c²íVhc4P$w=Ç_ÎÂ~¨žÉ¸s=Òå ñðef>o–šõ3멼Ûr€…*Õ=^Ýç} =la?È:ŽðèêÕ}ç›ÇnÛØBXßÖÛ7Ä„öÂh®-!_ØÝÜ C]æž'Îlws¢VæA´J¼ZÞLž.v$gJ1éPÔ‚ð+úÍŽ fèáˆätuQp±8j>.Ø»¨ð t)°çÖ_êS”è$§ô‘ýŠ·¶kËù#28‘¥xÙ:›§mpMÒýêIöã}^V*j¤AI½õž¬Û5ž5ÍPFW´€@A7˜›»Ê9à"ºs Š뢹\ñ›!Œ`æF›ÞMø¼ÚÁè0;é5ÿ¬è$EóüýUO•ô/=ìoq\¯r‡SÓlöü†ì̯±æ,$@¤GY–´€ï[17üq¼±ã&чuŽÒ¥¼˜ÆAw Ûl)–)¬ íÝŽgø8ö0e„MÛ­À®,”Tû”¿è†Äب Òó¢µFÓl†T­AŸ¸‘aÁëØ8ÔÏììÇgl]qì² —˦è÷dxÏ)¬%¿oÀWaåF]:¾LöÙ•šéòÀXÅ𿤓_…B©ÎPt˜M¢ãû‹­™˜Sànâß[¶¬©I­_ëlã°|•; ¬V=Sêh*fѧlâ®äZ'Ϲ›¨)>ý1>4º™9íH¥Ž4ºìdjŠZŽ…Q»{†çrñ6ô„6ñ$?\’7d0ù„¿!~ù¦¦‡™¿ ÄG¬ÍXàxÿ–9q€¦AZ.–ïzˆ¿CLOQyŽu1±Î¢®ré–ÕÿyRç}‡GãLCe[AaÐHF—4–d©!fL=!##ª+¯^ªÜÌšÅI}‡Ñ]2¾¤œ"°­öº'I íñS¦…¡q‚Ÿ±(Þ³*te/»·ŠÐyjLT|hb˜Ä†³'| µ5~L"{Ý™IDó†ƒ[Ò&ä¡sP•…¤¥ƒý±Ú®¶dk’9½j£•ÄÔ‘ÆÔÊ¿Ÿ) ºÀJV’ÍÙÉþ7µPÇŸÏÚ…P§ñÀ´!HßÌ›¡kò§WUÁç)~dà}¤ª„ž¬-z 6C—îíœñmýk‚Ú‡¯¶Ù±áWD”âÄm—Ÿ cÎ#¿tYåwÒUU0öƹ”¸ñ7'¿ò%]K_Ë1£$v¦ef†xÿpÒ/õ³ vº J’ Xþ/”²ôädÏGyÏtP©xlŠ ¥&šqC0Tâ%ÀŒî‰¬QÂZ’‘KîýI°!^Í[Oög—!T?›4 Â}ÚŽÐ(“Tö‡ÆÇêzGq ŒÞ jÉõ¤Åcþ2ÿ;³-¿Õ.X(ò Â3ŽVã±·åþÏ{6þa !úˆ.LÿúÌËé¤oÃP¥vþ.žÒsÜÙˆ›{ûíGÐ#(0ľáÓábrI«HeÂmÿ¤ôOî–rzjà ”|cŽÅaÈ ÃXä¬×<Óæ£Eíe*i1¼4õÝÍ£xÀ) ºé]P^þNÔW¹j$W E’cµˆ)Õel:¼dR˜wß—¶Î›‚Šý–=|˜9 »H±*|v™~uKÖ„lK§í.J´÷ë=†Õ!~ÃŽ·’yâ-e /5æéªKs;O]M¥Z@yö«åì/Fb% µ+éîo;q¥r†u·ˆ%ÖûÉV¾ÍÅ­ÈdÖÚVO&|b'X½æåº—«À95èþ_eZ€þžÎò^ k¤.Ôß?ÃmU±^Äç_¾xíÄ.Žð—Å…ïô¤§A”0WwJVå_6Q<ÃÛ ñUÍ‹àw+zvºãþhKéò¼YœwZþøÂW ²u^éäe¾ø³rá4ð¶3‡½Ú~½ÚiF¬žêó#§UH°:¯Q5ÄRE`ÝÔ™õ¥§u‡>Š&©ÿïŽ"Îþï«îH/ØÍÖšZ˜?ñÊtIrmQFîÒƒßdËê®åÅ– ½™´¡ä2š, }ñ± µ)Oâ’!“ÙTÚréÝBö­ÕÍ"j¥HsÄæâ)ÏÖíùöJéŠ!0BÏ^hD$¶Û_»Ï! ZågTîõéYßä‘Åßq¼F’I†[ÅupïVö’BåÙµx2ÛHtÿŠ“ ahñé ®‚¹ Ó/ßCŠ'Ìo3E—…Ø(G8K™4& ½N*it7Â1‹oÜ`sq)¾v¶†‹Ò7ZuܳVð IŸËçõVãuüKl¹ñ#‘=KƼmù\:Š!¾`DÛ¥éÔB!$Ü#5òë;/¾5VÏ_¤QÓÞ J!„GcØ:Ü<G•² ^:š Ù• ÔXmH Q;þ0þòð»›È²¼C­BÇ]Ö>„_†ÄѰ+ÁaTb•(ÓÑ<äŒh^ýï6Ö ú,´<"§±}‘}@U·QÑÊû‰)ý/:îQx“7Šƒó€ôÈTM’}}q)ZõüÒa]cKð‰%2i*|ž Q/Ï;¬RG E~VíÊlÈjÚþ Eª$f?møü=€x†bSU°zº)µÏ“vd×Y¢"Ù‘MYdµV¤Ñ"u‡š\í)¹öd±F›¡EN7|EÙššOGêÞ‘Up5L¹aÞeoïRÞq²»÷· {}™þ¥[E8=ž©;­f•â pyúäý‰ 2ÁÄ_žûC´“ÐË–ˆb ªiE<Ùùøô G°t.„ 3ÌÛÅ,ê~&¨+i`âS.¢hª?Ü+ÓF»²À•iíbÔ¥é•?ßž2եލ–vΈe/õ/©«Ÿ¡"ƒ­ä54?v)\:é‰;¸ðGjþ¶Ù6|¿*ݾT>û“Í7ÀOð:Ùƒò…–KràâûÍð÷)žÐDifá“ä ™´æÇB`ŸÍضá$5u ‰žeí a4¥Úô‹YšTMÀÕ í¿¿Áäxí7çÅ#—çnë’Hq¸PÉÆî7•¼r ï’”òqi‹í&ò õë@ꎆ«,“P mûëÍ{k^-.V›²m÷-6Ž1øÜ' k…›K+$}b>1*ç[Î5­.Y@Cç¥ÏF*I$¤ÏrÖ¦ T8?Ñ3Ä–3x£¡圯mÔ”3UÖ›VHÑu_Ç7OkψDU6T4ÏÍɃ"’΢‡/l¯E~³!%³Ê Vó¿Wg  @4þÓN‘$þùµÁ±äªïüxb1ÓÒGJ¡Šî³Û¯¸ÔÅ.ÿ+![Ÿ>˜Ú½Éq‹ƒøÆñWQLzÖŒá6³à‹6®Q«¯\­Ž¾ öƒ"_LcoZ_Âÿ N·êoæh¶‰?ºõ¦?J&R <3Aã—fÚd&†pUo¤ã|^k­H€&Zçx[-)Ü.üðµ‰H…"¢ß N»Ðú3ÅÛ„*üibuÌ ºsýß~±SÎ8ï cP†<¿Þk5bMJŸ$»µ ¨ÞîÇ”X›ÑM ÁÅex“½+­Ef•^“Ùs´xÅžæšDD³5‰ ÷=*ˆRŽðïàÖŽNdLI$‡ü ½A}Ê6í%gªŒ€3›¤(÷º˜ô÷ÍÍy¯ç–b-Éõ>w“GËàîiðn¿8uíÒ9¿¼©ªÆŠñÙº\3¢“aiã È5"¨™Àð˜‹`Vh=a»Í“+ó^©a¯S³ zŸÿ„zÜ´A¯"P‰Azr™;yÛø¼ŠøÓ¹¦ÿÈÞ.ˇÁ„M×óX(ÞùÖøs¡&±[ ¡WNæþ”Sk£Ou:¤¤¨·x®ûMò!£åö¢šÊ 1鸞&‚#õ±#[³'Ó±Èöc_Æœ÷ôó†k§Ý]Žˆ%uÏŒï0W©Mñ“f%Ê›®Þ3O§i“ìœ]µìÔœf>§Oû‡r€£xB_þL/S“Çšó¬lVA—lÅa]š Õš?® Ì^²ó‰Dª3SÅfÚ‹ås·ôØÑ9Ñú4(# zòŸÍì0–CJµÈG§Z•W6«÷ø5¸ü— ññhÌŠbæfpèBÏÇùi &öÓ‹íâ$ RþÖeI9vtñè=ƒW0Wí ‡G./åVÖîñõ¢Ö4‰Õ©Ëjü´ßÎsB’{‘~§šõ‘!¿¸yI·2 ³m]£+Âeƒ€ Ôí„P~ÚI=r‡ b»¼·C>ºsß“ÛiRŽ x°n8Pê"T€ÃÀÄQ¯ú”ÃÍ'âpøø;Û`is•ïWìj[3ÀSÒÑ\bè×W­–4+šûÎE©èïœóï®ã¹epuöTFg=áÖð%^ÂÊ#Мb6R.Mp­x¤Û]ß~ï3®¿e´Çq0ýÍÚuúþ/«UZ+Zzøsõl.'>‚O~ïîø{ïçp·Xqw¡禋DÚ  E=YblÄ…Ù§Ÿk/¾×«“9ÜBCž¬’¹ÿœOz‹J£ÔhæS5)´žfQš.È¿èRÜš*¡œµ<àURV¿©ÍÚª!}?ûÛﵚ‡îÝr_‹¤fß¼Þ±>Õ& z,´%‹í4öðî@&‡mÅ,^©Ðà–º%°5_­÷‘‘Ù0¨¹±‚ýqðû|ƒèG,_xCÏÍ.~&z?y.¬ƒyÜeMŸˆ¹sG¿×oÞœ þc‚z .ªOÃÖ\›ì' §HÐ"h¼&½g»åCÛ»t¹ªד÷+olÎYh=Ôùj{ز%¹¬hYqCݽÙÓû£Y—ƒ²˜À¾¢†û9æ¸ß¥YÑ'ÏCSœÿë¸K†Î­?½®¬½[ÔÎQ¤tKÝÒßK=޵ÇÚè¬_W0¤I…Ø•56óéNô±û ‚øgÀ\, 1YиÞÖêÍn'3Å@mò¥®¤ý¨esíïAøŸ†Æœe÷$„g”ýPOzÓN/D.俯â{±köØ6’¯fùVf¶ÒÎëe•DÃÊð®ŒPQyÁ¾¦2$Zxe+f˸¾ñtkÃÆïî1Fæµ[–¹Ðë8Ó¤ÎÐ,͸U˜H÷…¯ŽÍxvd*þ{Jn1ÑˆÈ û›}ƒnCÑå»öÀHsxÆ^ŒF¶‚û×O2”t:á_Ò'ËaÊhœ!Õ]F\bêpÍð„S÷ܾZôa‹˜X,Fõ˜jÁH[[gxžûl0 “aêÛ© ùUxß8ßEà|¥/U­Ï™ƒX²Ôn¦ãë¿ûE>RÔÐ)V•|;mt=3£ùú¤*3 ìâ9:†Çá6NšM±ð-Ï_¯N¦¤}e©Ç6z[è¼ìRæ‰çË ˆäã¤=d:>13XEU6s;[Ðù•Ã,çÓŽŽœã±åàÀÊPãi³„zmßaÅx°œÜ…cEr~çÅw³¬6œKÄëßßã5Nb­>–¨/3ò<\[ÂÅ[||, ìR1N¶ADZo¨úó¨±Ä¨(l[4·MЦ¾A§Ú/¿µ–ø5U{=¼"ü¥^ªuúX]¤{ä7Î'’·ê‰VlÅÔð›†o=¹8æv𽦈s°$·Í-6+W‘f]̆žìÛr*·ì,_v& ‡´ÅYÛ÷¤vjŸ‡¥[–C®5꿆ÍíiO` ˜ß§Gó˺¯©Vqb£U·¤þóò°#àÛEtÛBY;IÀ—Rvsµ@Öjé²ô¡¨G†GèßÙÃoÀBOGûШY ²`Ñí²w?ªÂã¦@XØÄT¦h 9–¤DóöC‡¥B U_”Ât3%¿jÖkaÇD¬~Š5‰ç˜ eŒKÏ~—°<Óß°¹™I<”jè™jE$GR†®%ÂnfSá²èc=ÕmñU³²^Š'ÜÚ݆‡uiLl´)¯'ëÆ_Âóg¾ÚnŒuò£ ÒX—Ï](åOðk}®oÑ k/ &bF#°škCË"5Ü.ˆõÏ^WÀT‡Ó¿ájÑ: V‹¦vý™¤”ÏþÏ7!VêrRÒöB?9÷#!<ÚnÝ®äZz’j*(CÇì(õýTÝ9OjN̈f†9¼J„ùù›»e¨îd¸å’ôvf}?W* å"³œý^,Ùí©ç´mįU‚B©LŸ¾èã«üò€Ú+ˆc"ÛS$£œš¥½:YŠÓ× ¥*pîo[Ñò²ÚRg5éJíÎÜ©.?…þ.…zØÒ!™AÂ~¦ú¤‘ òŠl×à'jÃæ}JÄ”¥çé(§ƒeRôå½t·‘¸eÅöSÑMqÚi4áºF·jZØï^-ÕÀ Æõˆ*£¿Æ!(orý´ï¼„É5¨›)/ÖÙ`ÞTZß©ø97kjtÆÛ_ÂÆÇZJøw鿯Iõ;JH¡c#(Ä®–Ñðð×L’ÜÇÎ=né[. ( ü« Qó<Öw&ŠÖuÀ>)“XSÄûA"ýÌQ污õË-H]Û»,Gm§\ûW¸`ëQƒÆ+*Çïîá…£‚á/‚Ý7Jëç€Ðÿ~mÍ8$ö$F¢ÙúU×9‰CÄ*ˆƱH~¶ƒC¸£4{lCŸÖL Ig=èÛŸ®ó oPu+gô·wóTí¿<싹¤éxfC½¨U ](ç›äåü@ ÈîÆcº9t!Þ™Ó}.…Í²Ç ¿<¹¸!ò©1¡HÕ.Üc)¬¨Îÿß}5¨'“JáÙo–‚æo¬ó)0 Uî]ÀÉië°i¦ã|ÚPgÉe*“o±¦îîùºÁƒƒ´YZ¤ ‰ RG1ðȈ5T¯7]/ÕYX’²çä2íÛ2‚ÊwÁxwL/ý¥‡T«áȤ,¹à$ÂjâA߯%ýtúöd”ƒâÏȯ`%‘Âá{uvñfàËÞçÐQmÙÍ!/VZt“º[”«Z¯¼÷ºäßÂ<º"D=â„gþ@1ÒÞ›ìºÌw¦¥˜v+*U‰EøqÂÛt‡I•lp +½qÜÑõ|5<Ÿ«Ëµ̼ÎQ9Lî(&kf ßøN ¤P༲§¼÷ÙÀ¿¨…ÕnéÁÐȾ “_€ë¶ 眩¬~`|Õ¡^öæZçqWÛA< ^Ú¥à…-ÓòÂsþ›úÜðñÙf£=ØC(y ïì;–]ëcåÑyÆž9Ò¸ÕQnþßU¤Ž)»‡Ä×o‡v¹ù}ò0jyQȸÒ]Á‰ûÕuY`©Àç ±¦¾U%W ]9íËÜE쇥-¤•ŠöGvû”hî€aC³yÌUWRšH̽nè>×R·í œûˆŸ~+/¨J* H ‹PyY!ìBè‘J¼,}ÎŽ0Žé@ g‰¿“·ej€gSb>·0 ø·ç0¡ÍÆxê6¸~ƒËb~xµ Ã/ËÙ3¦]¸Õí}ÐðÅß;‡wi3¼’º ¸þn¬% YX‚9Â×Ëp‰ò?Û[ÚË>GP ðø»Lª@½>ä¹ؘ”ƒgNZeÂs2S ˜M[íRIãH¿È2·Œ)Wuy££2ðé,Kî[”3õzšî‘¹åK&-Ÿz<œ-“±C‡eï­-ˆ™–$m÷M´~â¦&ô@uC€³†H¥š~ qX2{¾e³Y~9°„”>MeôcØymÚ£²~ÍΧ;Y-˜¾C“lµ3€z6„íÝäúÁëz/á'j|C´ØSá†Ì{º„ý Ü®D_m'’V«ä*í‘&3kŒ)S/–Ò¿g› cMÍû˜À(ôÒÿ7‘Z¯Y-ó17þ1ƒ‚E4F7ÔšÂ>[GNU­æ{?Æen9C5#¡ÑîêlÕÛB-²¶e*‡®°¼†{;\%E¾›b·ÅÁ¢*,Ï;ñ”öA¾ÛÃuÍñ„ë]Ònd(O†ø°œyó-̲ÚÏ£.N:ÁPCþ+þCoÿMÄw#e׉s„>ˆ ¦ ¬{M×ÃmQ—z!7šJ¨"›»2~¥DÞô†mÎX2ßø~Àœ$~©T+$ÌA¡úX'ü‰¿ÙÆ»-øâ¡h߉ÆOt8,±½lwNÈ ”îÕD_Ïë$}ÓFÙÄ-µ?OX}߯œ"Ÿ¶¤5U ©¶­ˆüý[èN²™4©©Œ;–Îä ’‡Þ®·Ú{,µaÙò¢}t§ÅÇÂëòe¸ì9WV¤†³¬¢ú$V&³&Ù;EÒL…‡JbÌ 2#Õ¶ÇT?3N~Ä‹¼òŽÆXx ƨ¢¯¿ äè(­|î¤o´ÿâö1¤ßS¦GÏÌLš+Ì×F^ʲÚðh ex°þÑ…€J˜¸WT'æ…û6Ë?J1ù&?‚¥W‘ „R›g$æXÂ#3©†EF…é*0>šØÓ'Á¨^d*­Î"hß}'ûý³ë¤¯ ~ÚÚ¬Ô ‹ÇNŒ8UýÃ7H%q%xRž—©þ¹ê!•ˆ¿u·>ká&”ghCñ¯µäÖZߪ×ëïˆ\Iã ò’Š„.·âí$¶éÆZÅ0–±hC˜”g¨Fõé7›Q‰±¶uaÃÆ?g–iB ¼)‘ƒß¤çæqSj!ÛUrütkÇgß*ÈÇ¿é$UéµÁ;šµ¼ök•%·?ýsý¥7/øsœî­z0ׇܙÜ/)¸…¼ÂÉUŸÿ`&&ý'¹gáÞVbˆ^cD_/ •á”ä¤À`!¥"F¾$ÑB¥.4chÑ¥~<çZËW2 fÄ`Gº_¦^»*òº÷Ƽi2³Çë²ïFb)jõÞY«‹f?AJ¾^×ôÂ×üÙ©AÖ¶õ±‹8——P€3êÆqà V‚jÁå,ˆoâ§#Hr³ÃHSð¡‚S.<à¸ÄÈÄ »ÿß*áÇ¿IÑì^ˆgƒ$*}RžW¾Ý)y7Çåf:jÌNÝ™\Ü1-2Zr8Y[f‘…ú/-ª@DÊb9Ÿù¯©c“X€<Š¿9±¯±ó…iÔF{î­ûËë ”%¯ÞÖ0Æ#7ãðÓJJ1(öøóQ|Þþ·´±”°ç©‚s KàD=Mj̶Lf£x®²1XÝí&>‡¢¶g~ô4~ºœžÎ¹b"îÌ÷Fñ7å>”]уCÏB ‡²KƒÀJ×}BOvö¥ÚpaÒŸÕšPÉ2Sd<Ÿòqx¹Uÿ~XaUšÌ}ÇpA0æÈŽäjƒƒNêå¤Ôi§t-ÒiˆöÝ(¯]…¾ª¤Skº“\Ù²žN7´\ºtoÈè[g[aõ÷{œv3l¼PW.Ô_w9¯}—\Ÿ9™~zF±2í„éÏüòÌ$‡Ìg€÷ `›X$fÚAï»#±2¨ÿ_92ø3*Ù”é~±¸õÄæxn6—úµGåŒï]ÝvžÛ¦ +! ‡F_­’R¯N­‰NrªBÌ3Ob—ñcÂZaõÖÕŒ±ŽÝ„úûŠùîaþ¼zÒ×%tTNüvWx­ô’ñ¬³[‹1Ù?úkí™Ú¥ŠÂ÷ÊÐÿ‡Jlõ*" è¿£}”ÀEýÒt:rà vcôc¨ÞŽŒjÃBw>·è’öÆC#_Ö ’)ÿ÷àý«a®ûÐ]íðs0*p*}¤´øþ—ÄBcJà]¾*IGÒ†ª,Pî^×\ AúÁ¢ovKŠ˜˜U&pí?º†·£¯dƒÙ¿FÜTÑ]éßíùz,nûÊât:÷iM\W´Éð}vnðÒàlØiOíÞ#Kx¥)o’šÀöÕt .EŠ|/Å)tCÏ0]à}”P-ý+_ÉxÙ(Çô«dŽM{ÂoìÈFÃEçä¯ú0w&¸J¡.6§bÒWø~ÓjÁs˜?›®,éÒ%7 Ì–äó[WfVj®dcZŽñ6®®ú[Ì‚Ìk0^ P½.¿þ Z ³·¼…iò|Eýþ°íÓ®:ôÛz»/ûJA;•«*Dü}Œ Š·b#yÇCkùT¸²Ýió¾:”KJ©¸VoñòP|îäq›H¡šÙ†a½ ŠÇ¥VÖˆ¬% §·öÌHYíIå$Žm¨/î×g[­Öþ +ªêD­ ßUÑ‹x`ã*œowðE…ÝÖ·ƒëñ|¨ðT4y3hcz‡¯ÙÐí™&AçÏË h9lœ«Ð)BûLZ78ÑHk¸êœ#ŒÛtiÜd¯pA_y4VSF‘êAûBî3¿Ÿ.£‰ÆÝZ_)¢“twܫêeˆ†2xY$*G}Jù«v"EÝY_LŒê]ã@ÞY_Gÿ#S•‰@|"(Òa:H_çT‚PxD§ãifö«[Ô¤s줯sÕåq—‰•Õ¼˜}D©“×'Ãð87e¨eÝzíñ>–mGÐ] 1Çà±G)Ë›¦q¶6…÷»žI‘ʘtYUð,­†ÿøF´ßK¾&¼ }ú0‚=ævêó ›¼n Ãéúq~&a§"éÑ<”ô`k³Áv±úŒýÄœ)'ŸˆÆZ …²­ÿ—ž‰v]Þ¨šÑÏߟÚÍó»Œî|Ô{D›æçA"Óa?«‰Äu6ÉzŽ c*@M*¢§KžpÊlÑ+´ÕßîS¨ç†e៸üUL]»p¤Ž?®+øžbÜ¡‚ªvy·Ñ¡s¦tÛà±ÑSŽcÒxM‚—P›óm….ñu žÀf×e#zä1ÙÛì™2)/‡WY5oþ”¸ [jþ­¦e³ëR ‚{”mŸ¬µkR#@aöCõ˜ä2Ëb\jòRåÀ:¥ù§3€7 IâÉ5# Gˆ,F™—Û éàH]M‘#”áÞû7â„S36.â#ÂM88¯òÅë,Ö9YTy(÷}:xÁ“×Î923MáE@²]ã*²Vm_•Þuö}6…𓾠ÊeSóTδc,àñˬ«ÔUŽ2¾wEVpçQþ¥#1[Çÿ•:–ü9¦œŸÇ‘¤¨K% 9- Þh ÓÂÿÓÄëqÕ¶)ÍAz[ïe­ Y—æ‘<›˜›Èqþ’fv±ÉZ‡,J–>)Íìkز™^n˜Ûªe|†@³HöôJÜU¼ÓCÜð¾ ú £Ð …,!õ¦¤Ù#šÒð 3ÍÏbéèQ^Ó©»ÁëH[XÿÀ×á$v: ¾»Xnç¹L Êä@êD^F[Øâ‚հ׫ph^ÜCñª´öX/´<¥›¿ãÙ¯‡k°FuÉI`#%:‹™Êq‘=.(ûƒ%Sý–±¼žËmb¨ŽóÍm~o ”qB]*…7îܯӎN?oŠQÎùQ}جPæ¬ÉÔè—tgäa†âñ4­ÞjAi„ÒÚh‹Ñž7ú™¢0‡;ªN(ÏÌ)£''®)à÷"0btèüRŠ®ûgX†ýDvÊ`‡´ððzXŒ¨ï¹ª•O×_Éz¼“Œmí¢cœ \n™X4 Tñ^¸•eéøÿÀ?_›Gjÿ\$ÇxžÚø) ’ÄG3qÿ]ú•ŸÏS'VM̸~I ?·Œëx¸Ô”SpÝã–jì&XVÒ_^M™\;e28w”¾Fa¸Sé áôÔ”{öNª ‚è"eÀG)ìÎFõ½à-ը͠:e¨9KÈ:M¹]íF¾ørA2]Y™·ˆÍ™·ÕiîW2ˆe=£··!Æ-¡¢Fà½%'þÙèËP 9üœðã—tYÒ‘Æä¼urS{·R •Ǻ™9§¯&;§{¢ƒî}œä¥˜å t“<^³zu¸ŽU¸J…š[™ÙAAǽÝç—»_»ðÛú=c³©vDcP¸ )¾ýêg, I¾¿L½HìÎPE^0“JSÐ?;¥ «ÿÌx<ÀhÂÔE6²Þ$ÞÂÝø¾ê{Mdý„+ašH{ (Q@´uŒ…‘Û&ažÑç;M÷2Ù÷„cu£Ô®GîLåȼ ¨LKØáÂò¯0,¡u#ü¿ó~W¶ÕÐd9§‹Ê€äØ£VL?zˆ-D©‘wJìéÿé¸LÿÒ"˜RâÖ·$hË7Üóâ \Tþ˪_ß]!î6o6DÜ;ž\ói¬[®L5ŤXaô”fÙ—¸e³g”}!º­!Õ””rÇvýR.r³yŒ’×l‡ÞrÖ /•ÝB8ÎÇ팇ˆWQ>Ô¡¶Û‚ŒÆaYó¥•Êèñ?£È ßOék»YèÆ é¤­[â’ðÂyÓ±&=Z)1r‡h%?Ž%®ôS€7ܰޓ›d?¬¶<0a§mq¶ šËÞ7übòcÅ6?)A냞ËîÐmqjŠžõ±pó j¬àV ÷ô§Z Ð]ÿ})×ì/ä¿>¢æ¢ã؈ æèòHù²ø%j^m‡9‚Àø´I7†ë·/Ð/f}ÓÕÀJC¿7Ë™,fÜåy&#qÝ`§hJ_ѽּ¸¼§žänKD/Qsøà=4µ¼Rî?°0/FO!oj‰«7ŽùœÑ~HdW¶ÿºhÔÔ–Ûtr¬¦ à©‹gIݰ@QÄ 'XÛéMZsEëȸ»Òþ5Í·±ÌU€à.ŸaÒµvJá·Ä‚¡–’iT±k‹†9ñÞÛâ‡GÉé›3#â e|ì²~¤$lI=¸óQºé².0:㎠2ˆð>ˆ¿,[×Nâíø‹®õÍ–½u¶]ŒôÒzæS¤,˜¡?|ƒ®åæx4V¾ßðuÓ¯'˜pKŒ':u퀶Ø@…é”'|Oÿs6A¿%9¸å7®Uð[*C5{ UOñÈXïøì[0!ÿ¤ …bzõŠ ' ‡¸&G}?.ŠNŠš›ÀDÛüHšAæ}ÿ±XN@q}ãº5•dÓïõ¤¿ÓP/ŒNBRMÁ§›}^ÄÛY¦Ü¡.¶ô¯B&%¯Ú1òY[¢M¸+ !yÎü§³pºÊg\`¶Ä×k" ífxèÝs„¡™u÷¡ÇƒÊqk-óHíëW¹ æ'…«i_¼B ^F!{³=;£££äŠ ähjÏÂ&Ñ/²1$¿fêsó…¤C‡5y-.×zòÐÀH?™b0‹NF!Ç- €² Ú¦%|§!¦Þ;Ú”´Çëœ%Å6£ŸËXÈóŸv^óúa~Xô+GîA á´|ðȳ󾵤–(¤ç΂üŸrâç¬}=µ")¿¯nwô©"mè®AÚª·¨Ý˜šaîËpoE7®Å÷r–úîíXPÏ{ÓóJsçêì2ØHÎî ‹?¬ò-7ë’š*„͵ªõ&x[Þ8Žçô—ÈÈ×kÜU§ØÑG¨™UM?xËR[Ø+§ã’í_³‘ͲÕ|óWá{™bÔðD“iT¨+7Û:KúߌDŒæ`*¦ÉW¯yûûNi^é[°ÿUc£RÊ‘!¡ûûói½Cè•‘æŒñk.ÜäÎ9aXŠ3ÛnhÍc-Á€Á¡ ŠÂBðj®q·Õ ª@·´žgÓ¹]« D¡ÊO™ñ‹ ó™“Õë%>MJöçðuÉ7A'>½Æ7Ù½@”¼bSFÝD‚g3oôf'e ŸÒ%lnð˜¤&{Pttúû×ÑWÒÿëÌ9åÆÒ~C¾DÃ^ÞŸR$œòµµœ–u‘™¿]’V Þ]BlxÂã]L?IƒŽ¹Œ™:‡éøïx ð*³ýõF®zÅ(Šíð0dlo)¬ÊpÅè‘Jjvá2’O:½kIŨÞ{Iæ;fGÔnmzˆ¯/° !·kR$‡ÒD¿ÆþâË-g¼¤?²7w¥DaŽKÉŒš|3­E«õ ,½Ý“ý°1tw]Õ±4c½J~©t2ä|A©ŽdXÈö:¸UÞÚÈNñН8ª^qYìaóqG‹Ç¢‘H÷‡PìÁ„Ë'‚=‰êgdÄD,á{žä'¦ `´ÇŠWxg›ü””͉77«ÿ™ñ¿;¾DØ„” ø)·g°T½ž´Ç’"2ÏÚ¿!!§×ÉÀ¿ tÛÏ£™ì ÿ㹞VµÍõ»µÚv:de à¼‡Kßr5–‹é†XïÙè}5±-ÅÕz$|þ·àµž*Ò.d6Ú­‡S´_o1×½nè—!M M@ë˜úœa7 ‰*j9º­hxÍ(´‰ájO™o ‡RËÜð 'Z˜n`Õ;ñ,¤?»fDA«òÉsó“„¹Î[Ñ$f´ !µÁ™ÎD·é × T¤i/•RBhÁŒÜݤ“W/(5r^Ò×|æT†W®·ë´¾ºL™ÄÏ—€šÉµ›t•‚þÛ°Œr°RE.o{PëÕàj¤”¸!äYytö±%åÉjÿäý¿4>L¤q™×Ñvf;êe×tKSŒà;ìä ^Ïßo+ŽXN"ýÁ£7¸û슳EŽH1Äá»oîLúµü’•ΆŠék³˜cãë²Õ–¿D®ßM.2c·gÕ°Òþ/²ËM®T=`GW$P]1Ñ¢_ua& <Ñž%~ÎÓšN{ ÕÎ% `œ“˜Ÿ¶ï\*2o¨ Å£µˆQ#Q>…ëtÇbuiW*Zà´ì›»F1‡^ƒ–ñð²»°šÕq¦˜ŸÄÞßì°Êëü¦ñj'?Næ" Ãù‚¥›Ÿ˜Ç—äÅî#Γð“eG<ú× ”…ÝSW«76Ýi|¸(#Ñ ÊùøPiðí‘63)€¾XýV>]Lù›ÁÉm”ÀUÅyq,ØÉŒ8C²5 cí`Á¹55íÈ€ÒÈ˶¼UÓƒ³ûtœ§jo_Õfò…áì-u½¿Kë cͳˆÀ¾>ÂÄ( 8ÃËZ ╪M+FÝ#ŒEYeÀtþ #ã!Æ×»¹ð{—üi§…½b‘öú­&?·ìŸ¥y@¦ûÍ–‚ÿ€†-š%OŽhÿ»ËÅ„{§Ø~c¬µ1"ñhLˆ­—Ì:¶ù¶-…{ayO4§Ý[`rywJÀ /–î/ o8)ˆ ”d–ŸçVΩäwÓ¤ñÓþ5n(9qBdè÷ê)é÷"žßƒAü\¿~á\G ‰o–\<~ ôfD¥³tÕ(FäÈðÂÎë¡Ã×µ‘wÆ+u™¢ ÿ@4;%!¬¢A>Ú)pÏF«à)f#b,®Eà?• §iD¾Zç¬öü¼ŽHÄ…ØW_\ ýÄÃ!fÒ8áœÀªr]©Œd·3¦ð¾H»šŠm‡Œ™±„‚Ni„î§âRf¿?ìXÚ.‘éðÞPúÂÒøÏ*ý:º©¬8He©Ô*šâeÈÛ^é` Ô™’èРÎà“îúHI˜ýÝ Ñ|xÌîÒ::ù“Ö¨D øL"“jØ2í/ó$f´½ž)µ=`ä~°WŒÓA!n$›ÇBÇÊàx\xõ—äKš$÷{|ÓºÆmßúÁ{çGÓeÜ¢þîôÞ }wÐØÎÀÄ wYMw6¼¨îl1[Šyaa„OÅ·þÀ#ÿ~´¬ÞLPPƒx¾²7l쥃 „ ) edyC}A7,¥Ì’YÐù·žeÅÇÄõ*ÉyËpõl”x“×9Ññ‡¨ ?Qs !”eÒ. kǾ9þ1)¶ J×ô[?¾öíQ¨Ò´4UÕ’b67úSe¾ú+=™–¤>!ÅÑg&ñÕ\L@—’܇ Ín'B³8ùnàÙP¤€Ãr¸FsQ÷FïŠëY™çmzâ “1³¸Œ £{Ì—"jëÈ„@²båü‡ ô²â·­&ûðiVóUŽ£³Dti¶ÅeB½¦¦<†o滆B©‹m‚ ùMA †‡‚kE]RÁŽ…¤À‘i`uÓå!•@«ëŽ:ý~ÇØúâÙá§—“…z0˜ïp_ÉÇÍ4Ë{+[÷”f­¨|Ó‘à›Q§±¼Û–ô]\½Ð¸™nÌiŸ ©ÿ,jy©¤BôЧ-!…ûµ4)u©Qq¡Ý”[ë±tgÝU% ,›l'WwÎåöõ“æ VßÍ´4{<èi$´„÷ÍøHú•fßTðVíÂÔbö!ÒAOx"}a'ü4ˆN˜wf ë¬fiûC¯x+‹ŠkáÓ³ŽRÝÿŒSþçF¡S^«µfggqt/ê.¤š?¦#çmð*ë†E­ïœåÏÛèåóê@_¾K¶%÷ï&\X&NŸvtùpƒ}®F‘r3ûÛY–÷û©š.ôÓ\e•)~}ZdÂ$Uº9(9±@—ë†Ñ„"éq®>÷J|¸h $Ø,sëKmúº„segÔVl1&­ep,°y$¶7'x¯§ðiHÌ|*{C—R5èÁf.•3“ ¬µziÄQX·ÀRX!0.'uG—)1ðôo°ï\7ûŠ=}sÇÐ×LæÉE'›Íý6|¢ ÄÕfß‚:ÅM‡g뚈sÚI~ÔóØ¢­B§Tñµ2„‡×¥DSyË&H¾·3dÃÜ-¡™½¡ükî·žä¨îŸë7&cr‰û®„± {Õþe çûó‹•ÂÆL«¢OU‹("gÜqÂ-þ°½è­ü_{î¡cH!iö¢Ì¯_Q‹Ò=‚Ämß ?\¬‹h³·X!µ{‹ ½$ãsSϺRë5mVpˆ]ë윳‰Î7L¸GðÕYÊQ(·iµÆŽ[nY¡©æ…D?â·åàP´ØŠÜYÝ|¥-\‡tÿÒ…€æ õˆ`cðÇü«šØ½)‚NJóñwÑË}Ê}®a<ƒngk¤þY–\WÊyÖ]ÞRYÖ?O2mîfrZÄݬ7Ø_i@ž,_-h*Î!¢•_é4Aþ ZÕñ¾M…oZ»\ø0Ës4<\½ßñ9ÆB.è|v¢%­•ë?»çwùòRl^É=ïÉ«4b &“ ÇͧRfX¡ a\Ú}q«úJ²nTÊÐhÊ–ž§á˜ 0Zi"©£©µ›]Úü›Éqœ™ñ@Â*³?}YP÷£ÝÔ…€šeí=^àç¹F(–’xyø1µoëb:)× RH t"å$rÊ Qö…¿›ÏþT>ÚÁüÚ7ã¬& ܱøf¼w¬›î›ÌªÅ±9æÐ–æ_–袂“,§_cΩÆ¢¡ˆ¸h / 3 ÞQ¸aVÌŸ9È|`ÌëÅo89̵øP¿ŠG§ãŽSAtS¤ b°ÿQD_ endstream endobj 73 0 obj << /Length1 725 /Length2 29724 /Length3 0 /Length 30215 /Filter /FlateDecode >> stream xÚl¹c¦ÍÒ-ÜÖ´í¾Û¶1mÛ¶Í»mÛ¶mNÛ¶1ÍiÛÖœgï}Þ÷Äþâ‹ëOæÊ¬¨•«2ªâª"'w°ªz:š1Ó330ñTÄUU™™˜˜L ¬pää"ÎfF@+{Q# @ÃÌ bæ`f°011ÑD=­,,*êƒu[#S+;+g€ºƒ­ƒ›•‰%€ÏÍÍMÐÍÅ•ÁÙ•ŸáŸA*ff ¥ÀÜÊÖ ¢ ¨%%/ ’WH˜Ù›9Ù]m­L²V&fö.fÔsg€í€‰ƒ½©Õ¿8¹0ü›€½›™3ðbæÎv91U!qyU€˜£ªÀÈÞ +ùÏp{  Ï?Ùf&@࿪£ÿײ5ú_Ëø­ÿ:{üÇb€cf˜Z™ÆfVöpŒÿÒMÊÞÜÀñØÔÕñBÿrù‡€ê ©¦fæÿd»ÚÚÊÙ™¨Dì]fÎ9S3g{À¿´ww¶úùŸT#;+[Ïÿßäÿ›!4úG !{‹äcúdå"nåafªhüGo ³«Ù` ³ÿ¬œ™©•«Ý†›ý£É?«jê`oëùgü§”ÏÇ(/¤¤ ©Dû¿Mðï°˜½‰ƒ©•½@øžFΦÿ ü;¬hdõŸú.ÿÓQæÿçË­<:L ÿj¦}ÿcéý¿,aaoz&.=+€™•“ ÀÅÊåû_tM\ÍìÿýŸZþÇÿw3™™y˜™Àm¬:˜ð†X§·…Uú‰ÏWAÒÎϪѮ2ƒ®ÍôÞè X [š^áÞ«â¸ÃÌÿܻܕºo%1Š7ƒ?žšŽ!ŽÐ[Å}-%­²ð«Û~W*|kŒÐ¿†PDZ3‘‡¸‰¼fþÞR¤™fËÎ;¯“v*ÿ‰"ÁcXÑ9‰¼“°¾ôh/A­G‰š¥ý o¶O[‹<¹)|ÉÒiílI xôËZk4ƒ[iu•š!F¼OH†íXÒÜ,E¥<g7iÌãïKdûµ;æ¬:ou²Köàî{%h~¾Mé?ÈS¢8Yª Ë'øùQ Ð|Èg@Å1äã …‡â¬&q@ÜÜÛ¬ÚŠ»Ÿÿ)ônvãc’8ÚSבCÒtÿj3,#Nå~脹X`µ‘’àÖ±¾~’.ÖêÄáÀÓ²&_›QòÙXƜѩú¹!.þÜ·aoÀªè[þD!|z¶b<+&(« `Âk+÷yj D½´x’Õ¨äòÚêÆUìOÍÓ¨ F?òàÇAó¤‰)©¹_(¸tô¾|KQ/õK›´°"Šg âæ£–q§ràÕvÀ+­Aª­²i@ñ’ˆJŽŽAÓ~ãÃxZ&Œ‘}©ŠF>y)í éí^äólLXhµN4Aé<˜1cÑlÞA?¯?¡ŒsŠa ö'Â8åÃA¹Î¨«T§÷Éw•0–<=†÷˜6«„‡OëF¯‚‰áøÑ-Ml«+=ÖúRžù`‚·†d#¸µ;Ù ÔÈÂ=ÇÔL¯³K÷´ÉÇ’_Ñï4uf×f›ý:¿‚ Ž?°§d]YÀx9(0çé0R¯ eD]9¯£=%g+ûâ1¤ÌÒà¡òðæº:xÜE^=¨ŒÅF€™]‰vŒØ<8L2JNZG8n¢8A¦Æ‰KšŠñ‹³]~• ¬)ç©íÊ‚´y<:/®1CxšxnÇŒP7d@<÷—»6iúñâåÇ’V‚!ñw‚£ë½U[cœTë_WX®ö û„­‘ò½þ”Mûžº¦JÍÞ¾ZÅ#ƒocVjÞÏé’ÈêTŠæýéàöú?4‘ðÝme™ó¢A7•)î)µïŠ7k§`ßP4;_ŽÄ‚5ým‡õ¿àKI¿ÏÏTiŒüú‹çd£c")ïe!kI‹£nعÅù¨{_òFÈ”L„!´TîA­å>Žª|cÅÆ‡sœölûo»JF¯.<,º8+_ËËõ“pöƒmAßÄ€,Ï q´*²¢ÍÐþÔjoN±‡ÌÀ9M)Éjf"Æð¿@É´ZÔÎ4þV± }À1o¢Gïˆk¬½¸í#—g¾‰ÓÆn£« »Í”,qîm¡O®hûuÚ¬jFøºàJ‹<µ¢µR•áÔÅMÃ[³ÕÅÜ“æ@÷éŠCd©mþ£Ú"^`p[ 0¿áòÉ_®šq4˜˜&¼²ZÝ”rÙKï †ÌItNEaÆ®¸‡Q¡›—ÛÿËsÙ9tfž]pU—…ý >£úW}ls S?/V\qùó²¥ã¯3ì*‡!Ið4šyE!Tõ{‡á(³ŽŸ½ï3O]fk'›áCGþÑÏÑ’A ö(\Xg­Z Gk0û~Ø2µ°¹¢æ³Áøq{Ýùº9ŒæÁªq4õa,½³3ðÞ½KÉ¡ã¸Æ5¥ *w«v…³+Lävº\N)™]fN„&^—á1$pMàfì¥õ›¸Ùàò»ž‹ó›¡°ÊÍyæ¡×Q‡D𬠫ÄSšœ™C?õì©' ýmT4ú5ÈÕ!VJñ›ª3çT)‘uªÉ„‡Ë•áÙë"Åæ*ËØ0 ¦–nËV –ÄØFÌï&ÑÙM2[²£6¸²+¨°•œyÜdõçž>´Û¿êþœ>ê°¯¤’@q ò<1ê eÑi$ߦBsßÕúw·0øÄßÞ×è½rQTy/Œ[Æò…"Ux»u/"²v>QZÉDfÉ7߬_]þéz“¾Òƒ $”ˆ€ÇCê^!œóâe¡aäÞTEYåjeTÞRÉÉmv^óœ Qvþ¹-#_ðó°M-ÆUKËÚÛnv¹²îe»<†È®‹0Q•ͧí$Y òn0‰zÇuç÷Bš 8§ŽB†˜&³4¹­š¬IOÿ¾Ñ²_}2‰—hà>ïTwræÖÆ(áÚR(ÞÏRÙ±ŠŸUÏžk- :IÅäÌ…_¶Ë{éÊžº—\P Þ¾_T4¨à`æz5«m´ÑƒÉåÕøºY3…GþšóƒU¿[ŠA-\ÓŸµU†6"í¿qÕðäû_‚Ä]ëu,ã¦Û¥ÆkW'§ƒ–ÏHK£9!¾¾i½”Xµai‹×ñ`¤– ¾y(ª£ƒVÓÝï%nã_´–Ô¯²©Í…´WÿZßí+ '¹auPJhŠ}xæÚéSTž1œAX­KTb<Þøg¿’º„o]ì’tåÖ¯¯Æbr ÖCF_U%D2ÐÅ&D[¹ÕƒùöŽªcT}Ìi#ãÍ8j´FoqŽïoŠ”žîšöë¹Gš^¼U< \g‘¬ÜÕ¬ƒl§ú¤:Ã]f/ÔYêyCºF‚»li{]û›n +\ñ#›‘þÀhâ§ß)]ÄÓf&Ƙ'·øâvŠlK à}áÛåF`-ïê]Ê]çz¦›qãh&®ž!2f¬±]‹É! Ø61ô!nJÔ%‡ëb™ÇuE,Nèч+MãÖñ•—8>™ÈKü?,šÖ°âlÊ—¯Ù1`_$ëj,x³øú}ΕºøŒÝîgbëeõ‘]œˆ©ïâÇ% â!‘½kŒäVihû·—»£×é~ÏŠ6´ÓÚmËM£z×trê¹mS=Œª™ŸŒ­ìÓÔÌBt›‡ÿÚ§å©ðZ´¢ÄÚLTCØBí$Svž=ktaä¶ ì#4hüÀå±s©)ÕwÍâÞx£AÚ¼zŠ(‘^KfCVÒˆµœ\ãήª²¯RN!6a0ÞÖ›KýÎÖ·ÿNÏiá×€Cî° iUm&ÛIälL ¤›ì0 ¡îCÞºð¼Y1ƒ± ƒ¸æ¾%æ—§€áúië› ³(c£ ?”%íu Lj v’•ýÎú‘@=•w…Çü9=³®Õ´……X$%keb­s졆:)cØöœ{¡*™§l©ò®sÐ Ïzrb¬éöã.ö¤yžÞdí‹ú[is‰aQµ¨~G4‰rœBVÚQ[<@˜…-ìx±Å¶Ê‡(IÍ…Jö•ZÙŸ¸;Tœ 'ß¹-8I­çë$lnîâúj|©zòÙK\Ë ÄkÁñvÁ©ÚöëqÝb£€–e¸!¿LÂÅfÆ;Ø£ÿTꇹtež´„"Oêl‹å_æbøAÙo÷ 0µ’qé{¾Æùï£ñ×l°›GžDHo%Êå‚ôñãP:´„ƒïQlо–*›iídbÛÝN]ðN¡Jcß’4¡›³aµ Ré€`¡…þz*?y­çF:Lدg8_r½ÕDÁ•_]Xµ0„ð’?ýQ4Š¡‡ö'×wÓÕÖåÁW\;•ÀÂÈØ•¸’‡Êž!ãEud‹>—$øqÍŽÒûGü÷<`u™³?Â÷÷ F¿ÁÓ“Sþp ÐáðØb)‘ç…ï*gê“G"ŠÖ%XYŠ;ß3>@%`~¥³v…TiÛ´ÖžYC‰B;dndqÕ<ÙÏßÜ­åÏ_ëŽ @G£1êÎr*Ñ­3Õ¸,MEvåS4vÄ™`à ‰@¿vqhý:+Í¾Ýø¹¹¡ŽÈìŽ,ìÇ'¾;ÌvuªwuדÍ+~m‚À¶W<µðÙmL&ddEƒV'/Øe¼Þû.eoËó9}ÕÔG‰§©÷Ôõh€g|Ò,×G×e!sQ6âÆ­L°ÏÜÈ”@®Éíè½Ù.îžYÒYÄÓ˜ë4S•ÆM•tkA¹¨ëü£sêØ ÑL0©Mņۦúq g¨*-ºëîñ,ó;¦Ä‚¥¶ûsˆm]ƒ§~ÆSJ1™³Óõ#_$„·W[ôx;AÙ@QœY„+ɵ²Lóç™gžA£Þ ò0ò0$X¯ƒJa…ðHæòqoL¼TÌIB÷0ûðZÒûI²0ö·ì†\Ü!dª=o®PŒ(x]„‰Vn¼š¿SÒzXƒ Ÿ§o {ä4î'î$UQêijWÕmÖÃWQDg'—ÁãŽœŠ¶ïÖgi”¢5¢÷u†uÖ£ç^¸Ýäåq:Qól—+äõ$\Ù!f®ÍþRKè2¬j"®™œ¹V´v<ßí\Î Jÿ — ˆ¤ÖíP±6¦|»˜ä«Õr†'°‚¶‹i Bà}†ƒ_9zp‰oŒ=y‰_eObs|#0J¢1íÕäçÒìqÛšîÖC6"ßõª~ÖîyVÙIGW‡©2 LZ›…Q ²¥ ìü}xs°PA¸äi·•:úÇ`­óÁ‡%S~/D5&ør$ýX-¾À¦iYGÚ‚é_f,w¡N‰4بˆˆg”j ]0³2TÃÜÉ:ê*rÖˆa³9¯Fô:(„ü>Ö#• )”Ü;íC¹ZZâ£Â° l)¹¯ŽAná—7Ó¿/Èø„™ïYÆ‘]æd…[QÆiöÑ>`väü7kØ.G\v ’hý³¤Û0᲎l×ål÷¥TÉÖU¦^RÂÞŰß F6Ò“Gf;˜Oò4×~š!]éj³–ÙÆ™jG¼d6•‘=ŒÐ³J¸±nÇ„w˜Exæ±äJa{¤–£Cœï[ÆrÛcl»ƒmƒm¤-Dõ â7}ÿD'úC¼An承54V ææT~þŠð”«Ï7êzr3Í0XÀ¨©w×-Êòs¡fòåüì®p«¦S4L³Bݦœäå…{k“CMBy´Bif>éMÍ~©Z>~q´ïÝvó3µ Nç´heè1£šgBˆey·¢Ó—*\RE³.{÷¢÷ÅqÓ©_Ö8Ã’™-QÕQÂ侯õ¦^Î5Au‘æ“qOC'.\é`¾="¾ÄY <Âÿ±Õ"ÀŸO©°„ÖI¨ÔÅ~‹@$(šùìÓ†- OKBåoÈnWŒyåa¸_c¢“Š{ý’›øI~™ŠH‰Ò!>Æl0óeÌä‚rœ—@º‹À Æ–ôv>Y¹+vwQ¡}zÙí!ÂúòÎ,å4¼G‚…¡„k@ßïi û[í:íy×¾p½#o·[õ~åS~FÆ­µq¼¯(™ÌQ´<ÿ*rŒ¹})ÎGˆr’EȘõGxŸ¼²ö9ÇFÎ/Їæ62z×€ÙUº„ŸËýÛKäbËîkÿ·`síÜs.cõ¨wðø„ð¼íŒ‹<…9æ¼G˜ò-hðöüàA®éeŽ>nG+íPôÇÑrÑ<ˆÛ¯4/×S—WWÇ&PúW\† /|ݙ޿ ŒîüÜuâöŸØš ‰ô³Ýû™Þ§wËý1âhâ)Ö*Ë7ÚâõÌ~3rŸä± p㨂ëPÇÈ˵îåŒÐÖÙÑË=ïíJ¢ßø‹d¥Õôs晋ÞÖB‘¯,Jü¾6 "©Àèü^äYÅ£·m³]í“(£Žÿýþqly çÈ\¾´4Ð×dÕ±üÀý3"\ÌÀ.N¶HØâÙ t‘‰Ú&­HYX,ü,^Ë\”t€ø–­Ëâut §¨º«[ù3HÞn ¯+ìÞÒºÍWžÂ¼þ©ýômjålW å«ðjB»iºHW¥ïRÆ«…ûƒ|gy'm–ÙÚ¿2¦(÷ve®¢£8½Ú² ÙLˆ½«„Âr*¡³>sJ/Æt:~Ô×á$êé’ï’Ÿ¸\$Gi£ÍËÁÝ’éúó|oõóôb\8_õ7èþ…9ÆÉH+s2 Y`ÞãRª`2³ƒkž)8é' ˜ocKëöÃ6Y°—£ÚvÊú zÅYEøY?W’ª-ÞˆDú+D'§æ˜™ÞÁL¾Úé·8ƒ€<À«ìµ·‰ÝÅ?…‚¿ÚÑ󛎲øµæžw!šeðÏ2x°ytè°nuû ›:é®Rwä™ÊŸýçc.⫳ö³¢_Ÿ/Àû{x>`ÙäçøYµ9…#9ú€2ð ïúEùKÜß„¢¥ £}}WUçÞ5‹5}?Y,õ0£U^n"Xo5v—æsY¬ÈÚ¥ïü0ß•—ê¼\l}ªÊõ•ëFçó«nÃnÆ´]+ÏfÀøLxL˜¯ž'kÝKy)l„©'–æUü6Îä†Vt0óa K¡üo •05BÑòyÆTŠžæñËn< ¯1%–Wí}:’îÖñú$ï»p#ÍÔ~ýuXŠ!v¾!Æe»'—Ó죒šÆÜ–1z©# ´èw‘šøí®@—rP1 :õë"rVà²f| IóPf©Ëh”’£§¹Í©&²w¼´­öG»¡u‘ðþ8ÒŸ»z*´Ñü6N0óIºK9¶È“‚[’-uìLûáslÕ'šs3Ô_S†«eðnÃÜ}á˜ç$fÀ[_²ß“3_ûV}zd›×…ï‚§)n¸Ó;ËbFk%·j:»¿á °ØÍÚ­sÝá—©^ôpf*.1z¤H¥™Gò06kÉ”« ¡¾mf™Ÿ'F•ïj|ü«ƒ£ Lå̇jÀÞœŸûa P!³¹J®.ÊÒ‰e#£·Mé¶:3¿Yc³Uó®zù7iÄ3À0ô-¥Žc=u78ˆ‘ns2¼PågÃU™(¢up¦=Œ­æ§9žÙA)|ïzVuÇ¢c—² Îá%²ÃÑÆþTʱ׋G)³ÑZ¸xöÛí`xh’®lÏPü :ý»¼p)M>^‚ŒƒÞ§ê¨¼8¼QŽëÈï ÌðþPøûÂiî3¿BKaW÷(Žœ#Èx¼@‘wð Ÿð%ä–ýæs'Ð!åaÙ¢%ÔHÃBö“%òI×sn?ŽïÿxvQ3ì\F#KN¸2 ‚?óàu¬3Õ´ö{â¥af#R_NžàÉ}3qvâ:ÒRœ^j&—±› [v ¯¥pMaðï<~œMC£)/Efé(êbÒ_aI ò±:88§tˆ`!1~:Az*Ê|¬ºä¼œ:ýךÃgѰœ>Ö’üž ±æg;:Üç‚ÙêÊg»Ž„mžíËŠ»„irD¯PÐ".ìשo‘Ÿ ƒ%/7‹C)¥†ŸÞåŒÏ.Ì=ºÐ—‡ ‹¦7ÇlîC\3_çšø%Ú“±¬&Êü«±!¶ä%öz%]íÊÙžÊüùŠžÈ¤…­Y¯½{Žjüsá/ÌfÓÜÇ é5³vœ>¿K|A \Z“3µ…¸Êamï;ÕÀ_;ˆ+馹Í_|q3ëâX3}Óã*qˆ¢òë ZTd¼yhß–uûOð)l† d>=cd­–çoö.Âs»*6(u¹³µáÕp#·H³˜ÿý69>n(ŸtYó,ïy[3xTê[HzçU¥Æ;b%[ÍQNäÎw‹›é r øŽ'“uˆŠ$íóÎ}t^%è„7¶¦}¼(Œo/tn«*g`Jƒ™£ág&⑤DíS¡ó}ÿâ–ÓÉ\6.C™ƒQ?mcê¸Jë@¿fÝDìmÄ•˜e8UTóè­ 8³ËL`¬»ÕÈ‘ ‘þоTÁ‚-ëe~ –ôÜÚW ç@þµ.´Çm~Ç€²Ù€s¿”Óháê3/ B´þ{÷‡½ w’¸ÖlH{«2<¸Õ{–ósõÎ8íZ-nX‹É=ÛW¶dIœ z' RPƒ yz ^¦ìøÆxòéYjhBŽh‹9dÌ“ª£„ã»ß1×–?È8ËÏññGvÚÿ°@ é©ÐíM_JðtàÞ5`\$«J¡ž^}ì¹ Ç ¤aÉMÃó ¿m„¾3ž[êGÌkþ’Ù¨§¥ûd3B¥¨¬—O³cþmgbµÁ¥X=@8êã,wfsÂq-¿XÄæ¨¿êD„.@Y[Y4ÙÙYH›ŒÒ é•Uév:èÿ'ÜÕ,ÃÕkù²õ‹…¸gôjäA*×JµÌµÊ‰<8‘ ¢_p Y­¶À ÝJ`kŒ™e†¿äŠˆõú£÷8»­cwÌ’˜î£§ñ¹®¥Q°’Rÿ:’•³æHåÆ9Œd3=¾s‡ z=PâÜ}©Ãü«bù|âKöeÕ™u3B$œ›ýܰ"4ðž åkrð²Ô§yãg(d—Ïgrr‰˜ŸB‘ç‰æ=ˆÓA ÷ª¶ë1E;)ˆbÃao®œZ2ñY"L6ñ¼ÅöÛ«ý]ÒÓ¼|0"]Ô0 ¡Hð«¥13‡º\Ö Jjõ´L’‘H¬’?:J-?yçÓ V÷žþ'Q 0‰r’¼Bß/n§¤Æ~1`¾ç0žJð«ÔãPv ¦ÙlêJéÐ*µAP†A„+–U‹×-úB€†µL@»Bœ¢ïàÛ[&íŬ4€ _T¿½Ü•jËiÃÌHñîÛ vúá¤ÎõcÊ4„A*fún')N(í!e?ˆÞ½¦ô%c{ö›¸GN 7‚©´&ÛÏ{¥ë»b2ص†îJZïëiŠç”`Pèa‹å.çLé3MŽúÂ…^ÛrÂs½Öc)[-þ~ÜÀÓ¥½¬ó­Ž.)øý¼nM’y_à3¤+ð·l8î)ƒ–µÚ(™ÎÒÛŸù›D„K“Ÿ27×:ÝÜÏPgTèÖÀªíÙ;ÏrÞQ,´ÃŠœÈ¢·{™Eè¬}$gù—vs„ø¡Îxéàäå,†‡Œ:œòyê$¬wošcâ o¡ï2Ö:[r] ž‚ù}â×;¦»»Ephæ¦ËB°ìÕ1­øý" w`ÏÇ@uªàQç¸k^|~Ô±)s7"qz'ÿëí_… ŠµJ±úù|‚ ¯ºµl¾£³$Q|.²âQ°ââçÛÚ³àßÔ#ÞöÜf˺‰•KÕ˜;¨Ëï0GIõùÃ~ÀÅÈ-*ýb$üÙ¡£ú ƒ«u¥žT"†ޱä£SdMÛÝÞ2ÞK³ È\2‰«ñS,'—ûJÃõv÷_Љñt%ømqo†ó¸ª:K ‘ªR±Œû AN‚a¡sv8†Ùn;k ™ ¡&^Xï÷¾C%Á;YK¸&q3í¨[ÊaNëae¼eoD½Üÿ¨DÐ|Ä™³w‘/žzz‹"ͼWeÈSyo‘r×Ó¨&Ÿ~Kÿäáî<£ZÖ±Àà-Ìs?.ÙÜú‹¤¬R·Kêã19Õ:+¬‹×§|Îû$”PI ›Þ5$J¢†Ç ¼Šà @µf'ÓÞ0©åͤ¹Y¿[1MèŠ[|gu´À‡G¹@Üee>]IÁ8Vgé ,Mú¼1|òünÓXy♣'ƒAÚ†—ºÿ)ñúº9‘ì,4L‚ aɰ«or­¯ n–ýçH=êþýk¬IžwÍG{°RCf;ëé M2æî6Ûšâ'ò›"û±GW7)ËJ’p‚fyŠ`=lpËy„îÆ.* $J‡82‹yC”*išABÂ[’˜wÐ-ƒËMT`§Éãè› å¦0ÉÍ`85kÂþ•JÙŠ$–ü¢o̰‡³eßpFŸòèi¹>AÓâlK(y^S;4©>#ÿ ÖÝ_¡FÒãF M!Ì ‡©ªC7͸,éµÉ‰õ´ Pœ,Ù?±u«A‰¶/Æò`å?5Œìä—oÊÌEt,¡«Ú‚PÀýè°,w”òŽ¡™aÔ?ú“æN6jYÉßÖC¼ô÷Q œÀ@ÝFì¢ùäI,ªE¹Z¨Šž;Sùˆ/L«ýÅ’•p9gà£böÞ ‚ÝV!  b.²W/‰Ó·ï’ðY8¼Ï³ UáZ•…ÃDHèîÎç@ÔOÞœrŽÆÙçjg8ø¢¨KùH6ëò1YZìJ`z«½AÏœȹ,Ù;D‰HÓ¾ÿLAÛ,ò¯ÿãyáõëâ ødS`ZÂâd›0¬…öd xÔoE,¦ †PÛ[‹DÄD¶tJß¾Èßf'Æz›K„e™ókWÂÿvúa·ßp­¤-^üùëð7ýᥨ¤{۶ŒzÆíK«'€g°}jùÎâaõ;¡­Û:?õ¾°PnIð‰“XvoˆõÕò#“5nB³Ý¦ß©¾rq¦Ó9IŒèÑb5iɺÑÔ×@€£‹²NòXН_ÜÛ8눵”`¥í¸,æ$CÑÞS¹(béú?ï»u|\.í†4δmjôá_ÊÖOô°ê#€òæÈ jAu¬bìË =)ÊxÅ) *ŸiùõE¦µºBŒd´†Ag„‹FÐRÅŒ·ø `²Ù¢Þrã‰;Éa´§HØ¡œp"ºú¿ÆÐ~¿@Ûo+Ã»Š¬Juú{[–%×. þhjª‚e¾{'ù)E|ºr)EAruú… úÈf“»³†$Ãì4_g]m3'V„šP \Ø‘ /¿…w]üF ]V_3³ß÷/´Yžû1P&šë*°ùs=†KCkÂã³ÎDZ=Š <ÛFWHtÁÎ.o¡ß›ÃR3ž©Ávã]"¿4f±P9"áÛ@úå$¥gêEnq4¶÷˜µ å@w˜“Û³&À.ø‡”¨HÙjŽg{ŠgÉèÿcz?Ði ‡„û™^ó>È}5µçÚ¸¨U^ÿÌE„¶B•WQ*2‰k’A ´)¶©ò 6±µ˜Ûo(Á9>©ë=âå>”ü5F¤D¤ÁõÞ6#yêvGí´Œ[*üIûœzM3‘ôŽ\õ•ö ‡Ð¿Ð—-m5EÍ Ô„p3-Ï®khF¸½ ÇZGg(9‹[¦šìbòplüQ¡Í‘~#É6G!à©jÜkÁkî>­Á,+”iÑry¶* $C5wŠÄÏÔ#ÊÎÀI3C–º_êÕŸ)X[…¿€`Pù¬˜€i‡2˜OtÿG»“b&¦ŠDÞ#&fJ  ±£Ø=dÏIwÒ7†TWU—l“ûÚæÉϺ®µ~Œ|- €Ç¹äe?‘õvÈÿªº»uCYUoKìeó _Y‰gÊ£I¼Üh;÷p5*zòôVäÁK5q?Ô¨¿A>„à ¦]G$6,çtìµÁ}pJ¨®µ©í·;·P«ü Oä¤<ÒK¿¯ç‰KS`åWƒúµéê¢?§"‘Bœ{Ð]Ü÷‚Ÿ²lÚÈÔ}$3ÌuEbónõ€øíL`s]ˆøÂëÛÿ½‰“ÔŠ W™Â•Givt-…:F5ÞèåqyBw‘0””«§BŸãîÄo¶•¾ÂWó¨±Ú,!×àðH!ûI­RÕG?ÆÄCSÜ }DÔbv~âÛØæ{î˧ﺕ”M³À•0ý³}?ätꩯo2ÓŒW ÃôTH§9]:ãihƒÀš”ce‚½xƒvbUo¢MJ C¤°w½Üš9ÍV)Þ\7KŽì‘U|—y¤‡ JÙ‹Ýzüt:ž˜4oN!í¯8åò3 ­¾Ð8/£?‡µ¬O¯Ã Me'-6™v®~+.€Íê ½FzQ c¡-í³q›3%ÔË%TvÓ{˜ `_8½³>°ešfâ…ä4®„›¶c&v“õƒó\5å£$âÀÿüÞíÅÕ÷8zñø•ƒfÉþPX8_w2¹d„×z5.•ø+ª <%´¯O„¨OøÓ%о b•sµhÀ@Jk¯ö9"QÇß.¹fmÏ—‚cµ‹PÎà‘b.½ý‚ß#wÝDÕ ÅmÐ{GÊhÛ›1Ëaû:H‰&‹ï§)2·¢T¦s/éÄÐ =®¢æÑÆ óf\ñóß%AN†í œš’Þ Kؤ –ÁÂ¥µ2à°‘„O£kÁ YŸÀ–—-öü£ª+M•'ºj'h€êdùÊ;hå€ìœëürH†;þ ókÝH‹nÜ»¡ŽTè •ëpEIÐÙ~‘CI3,ºÅ*<‰\š[ØN%ç Ù¦=ÎV#%ÙÉvm䢿1š×Û¡Ú-²`Šñ~Ji"òZY+[+AÍÖ¬B!6¶™GìSšž’$´hN »qŠŽÖ9­ ®ŸeðíÁ õ¡ÅÖFlà 9¶°Ã –f$Ó¬.$³ÄÎqVr[Ã2ñ7¾K§ œœ^¢h¯Z^3ƒSѺ_ZC–h‹âs”§[:‰MÊá‰ü0ßaYÿpÓtý¦h²fc~³Pþh@âRèDÏ/#bʤFÿ1 JßgQä×»+‚•Ûúù÷úáC«s;6ÍK31ìüΖŸ0»‡åƒöžÚ$ƵÜrGƒÖ=k·ë@~¼ ÒjF–E[eÊiüŒÅ =Ì­/ùK±DÁ “šGуaÒÖ¶9Þ]º5WbÐXÂhP‡½Š4ˆ}>š²BF‹¸²Ûl§c <0ˆà_½ÐfU2¹SºÍSöáÄbŒx5ðZ~­ÔÔ+W_ã—ËŠâÖ~D›˜s{‘¨žõJO³p‰Ë©F´Nï;CG[N£¹uÚX`˜ôR‰ g¦Á:c>®G²‰Q GM›9Jµ`£¹o ¢¢rV–QÀÍ_qäáaTÇKÖ\È"açWv\ù«!Ýl'{üçÉß¿#üŸYâ÷îB ñ}± r‹CíØ$K‹â€d³UÂJÊ÷HݾJfdKB·{£°F]–Û­†‹ˆ-Ó:ë’lYSî"ãéƊ‰òàøhmK±»ÞùëJŒñC·ß2>\¾p!1QOÑ.°=Òí0ØÏ¦巧'\"´5ùÃjöe~ÍÏ}–µ +ßN ¦³‰U`téôDK*ü-»À7~ ïN¹Nêýëp ê; OñnY@ë=f UMwhsJ˜ ÷Þ–òŠcœ°p£C“R¹’ez99¶—w“\ܶïß×tÕåæ!án“äníð… ‚Ý¼üÖÎTÀ-5aŠKV-…¾Sšì<$‰Sû~Ï•]#Ú55>»Fõ$Xlà¬Ý~çHXVmÒÃûƒ÷—½dV·;g!AfÏÑâ1ȯÃï>†§xJ×bB  cbE« 9·åáÖUÌwr‰iw#Clkú¾PWfËucçQi®ý¥š*?©Åª^ ?û6» ·õ})ÃH´m’.¿3!#0â3 Wr¹âÙp&qa«‡¼˜|}UØàÈrT.Ô+yõ’d…EÁXØ>òX´¼BûÿE'¥=\Fô·èĦÏÑ!WJN’9ŠC@iȺV¾R¬žrÎݞʻƒ4ÌùX»@‰²·L9þ–e|¹« ü^jûf¦vÜ»÷~L}çþËàÀ„EÕÜeÐï…çøq~²Ò!Fø# ƒöW»LC®|‰(5®ä[AÜÒåLƒœŒWl{zRÝÊê­Ái^eÀ†µ›Õ$Vb_áÑÛ%û^Åþ§ñ¶¿×ÇTòð•"ëXÅáÜZw¸C0m\%ìãËž«â Ÿ^=A4õVÑ݆˜²Ÿ|' ·%(2©>£á¥ßŒ7xÜó­r&±Hß÷VJ ł؛± \ÏRZþßUàßST®ÁCýfC šN‚”µÒæ-sI:}ßÞf8AFy¦.fC³¹‘–7’“Çqœ7‘TŠJWä6ÉkíÝ6´vZø\”ó£:85£‹ÿ}Í)iqd­~Ä3Q•ëÊûå™8V¨%©­RÇô&¼ä…1—$Å©\Þsè0¤SR(Àz·IL¢ðî8ÿ±*6Š÷¨–»HÃ+¤{h÷†^2ÉDâg>V[ÌB-EŠY¯ “-wÊ7?b¥‡+ˆ=Ò¸pü ËvOþ*8{Ø£ä‡ êǾŒ% $(«<.I”aÖŠÃС†„ü —UFË»oÌœ‘­‰ÝïGÚE;{Å„ q /¡øÁï.䲈"¸*%6³¿hµÎHÙ(.´K[õ•,û³Îz*eaFh°œQļT"3˜®4…G‰Ãí% e™ÖY ’–“´jªúN“/èb!îÁ·V¾¾æå ,MîjÓ}¤_~Ñz¬ÃÅ]-—n´©Œ¦dx‹Pù¬C‰G º ²Ï(fÉN>Olööví“€@ ‚2M àEÇŠ–âôSˆk3*ЫŠF¨—9$¾SÄâÔqÚ_1ëÍf¢J]¹ž;©5<öÀÕf.5… ¾&”ëžþâæ­Î»o1zÄz†M§VƾBæ„–ÉÂ¥ ”7S_£y'R©y6~î˜&|*¨h†ÔróÍ ¡ü‡ÞUs˜ÓlÝÜf›£¿¬ 4=ƒz,ü$5€I°‡MÌ;%ŸvÜþÝJ;µ…™Så§•`Ëùpš ºQ=“ìZHÞ7BQõÈ Žã]–ñ©“eÍþ!õ¹XTòá1[ ËýºUSÛªùN&ïFÈ}ŸBßc)o$z} Su$Õ€pô’¶gÛ*ajx‰SÐ÷ÂåBêZ‡ ÄYȇ<»?þŒ×Ý›ÌÅÑ\ï&4g…û! 8‚ÀN™)A!, `«-ÄO_è+Õq`Îïªgq¡^Ò\ ÷ìçnüCvøVÈÅQLûc2Ésc2V€6óKG‚’:˜-%,œ Ü;DPú¥7ì¼°é\›¯/ã´oX—( ÏÞ>¨e¸†—=ÚÏ1ß”ÚC:8UGG-~ ™ª6LûóïJÓ>AÏFÁÍêT]òïÊ  'ÜÇ>²óoŠŠk„bö²î¨·”OøÎ9ˆKÔ?ÍÖg.Qsû™Æ6º‹ëÕ:¨ çü¢ˆb:ª#Sƒ ¶–rÂ׬çâp¯¯^Ξø„Éú6Ø®ød—ø?Ÿ#üßµ´Xk½k$j}]SsƒØ ÒëÁd À–²E²µ<‘•” üñ?±þ,éZ¹ð+ï?|¡¡­^tpy''©©Øtÿ,¸ºÁS Õ½D2ü©‰vž8Ëô¬²qãÖ¼šu±L—ÿ€zw]ürÙœ›éZ[Ä´'ð®Ã1{wÏÆN£`B-VD•ÁàB†·,êxPµºµo~&Äù¹A?ó‘‡Ý}ŒÁƱž9ÚøÖŠ\_‹áÔŽá>ÝMlóæ¥}e€÷ò?­î}G :‰?þÛ‹¹³@ènØÇÞw+žÒgý e ×-Ï8p;ôš1q¹€úl ¡ÉNG ZâÿÅG<톊¶Æõ'ÒbPÁkvuåžèઢzËÅ|Ž×%æKúì¦Ñ¸ Ð¹3«;÷«ÝÍ:5J@%ÃDY5‹·È3ïÍ;äã8ja9¤Çoe/€‡_#ÖQ[¡±òÜŒÎëŽÏ n’~ºx¿• ©:ÔÑfV”3_€ïT8‘>U®2.|¾6!ûY·!³OIÇ«Òô~-CLÏ”MJBÙ0ö"†”æ$Ô£`ˆÏS+Ww+•~ÊÖ°O{‰*€9ñ~ZŠ 8å÷ÇQkXEÄE@¨6+Õpb×à"ûE'=&Z$7µùižŸ•r×(yçÂ@ÿò¨ºáÌÖýt`j©iL‚)w ºµ¦^-Ù1ÍP9\瀙ÆøB¼|áO¶?ý‚H«ÿÇå`EA¥¹æ¸rïTáçi“Ô`ÊŠsÀ…E~7¤ùþ½¾õŸçˆÍmÔ"É/„,A˜sßQñqì˜O×ÄÞòd¬£8Ç}ÈÒèjT;Å-˰ ‹}}B R®ÝÏDäÑ;àW4½&ÑgÙôRZ꼎çÆo¨\ ~þ…ò³gŒ?ˆÄ¥Á-n@¢ê´6ÏÓ®T@¸ ,¾¢Û­ÖtîqGÜ·Ð9uÆ@Ù©oFq›1=kÄïižããüP”|Ôâa§Iê$ÏsÄU3a75—HÍÉmù¤t­xš^ ŒUî–!kÈ:ÀD¿À {ÊÏ>kŒ±)14¦¸ §óéë<•O8CÉ“ÝM ÂŒÚbøZi¶òõ{êì9ZaOžíÿs_ð—…)j€”H —k\àQ½u˜K;•¾aðáu‡¦´êÙ×ÛCE/$ ¢ÏÊj!6¶j ÈCÚÆÂENËëe%ÉKì}Qšø—cæÑ«SÂöl4IÐYqχ·qÜWW`¿;çÿtq‹•( Œm[3±mÛvrbÛ¶mÛ¶1±mÛ¶ùÖ÷ýC¯ª«{)/é†hÄÏ¡X YJÒA%¹µ¾ëNéÌ€! ¯Ï$8dÂò6׺®È“™ÃMBa¡W0M&¦ª8äϱuÂÇªÏæ'çÉ6‹VïTéĪ1-^¿4Õå¹ä0å€ü¥XR5³~‘®±ÚW@–ç³¶ì|Q@6­0oÍО8þæKŠjd>8Ý£ÔŒvd>G·W™Mz{uK‹OV#Ä•Ó|m¼ÄµGa‘GòÚ¢i6{“Àø”½N¼<ùÈnðE[€5>ÈW“¥ñ/ \lQ§ 8…Ra€n°T\`Mÿr“®&êÆêó@µÆªsPJ„ Ä õÂdG `ýÌÈ\‡”9'ühöcFž)î5³¥-µ“£“(ª3Ü”J-ßÛ~cý׉ëôïUÍ‚dQ°¸gËuæ9l Mì' lö‡¸Öƒ¨·ÎÆ T_pïš\nPÚ‘¬°ìù)"ÐÃ}Œ\4µ><­Ék% ~bD0Á4öøPÐÝu¡Cý¹CùöÉÈÿÜV‡2*¢÷¥OÔÃ$ÿ½IžH?Vî°³é`=XKCElzIHãTCŠƒµÌôU‰Œ[ÙŠÀic }¼ ß@Îc‚/©X} Kõj Oòkàí\«]ùWí÷JÔlÿ’Ž¡Y&µSuR]q±nýЫ8ò…,p¢.`ܼ"•Ž#cLÑ ã… þÅ鼟sC.Wâ ¸[¦°=,7«¯ YK¹?Ê- %^ÙI°ÎŠêãÇL>£%zAH´ŒXi3L¯S÷;‰žê÷ú½lµs?˜|/Ä„¬=2CÏcÖ¦…KGÇëûp$\ò‘ ¸Zâÿ¦27»ŸŠK—î—ÿxVg}¯Ö@¾¾Š–Ù¼Q:,ÿ”ܲ6éšëŠ=©þ’>ïÕ!éÁnõÑ»=HjŸRÒºH¡3ÂU‰Œ‚A&˜qŸmAý fûå‚jà#eèºÛo^K±T;òð ØÖTïØ›—Ű “­Z3‰«Gxè@Lè×;6·>×âÍšî$³¾Fä€Ânö?ÊÐ;ÛFWh$à‰X!HN@nR{ï¸ ×—äƒ î¾Õ×0ùåŸ\t>ã_fÿ×,Má`Éàëüi"ùEÇfí^1_§ ¶%7?îqiîç!iÜ?/Â(ûüq¥Iw»³³> ¡õªÊÞª6ò Y,ø½Åà\@GeG6Uñb09UBÌ©sœË‹Ô½ì˜Ww"5¹Šx`)] hÏ !—W£S‘ˆ‘Ø2‹ÁŒÕä`Qx͒G‰lë—ˉÃHÄjtfÔšÍÅ@–Œ}Aä›f×á‘"fYÐG4Í/6uY%A#Lºl]?µ¤zÚƒë?ÏS®gáyW†«ï ‰¯æ‹~¨8Q|0R(/rÑlé§¢J]j=«¡÷[SÇ'è¤JhÍÑ+%EkငRw_E^•.Ò4ÙóYñ{Ì?˜(E7‚:±ŽžÒ(fš€óD;p~éîðæPqÅãR-Ô ž+¹ó4ÐYÏ¥ûéäíæy>4*1Ù°V²ýemoŸsÉch(~>àq'£‚2‘8gŸÿˆö’'鼡YÓŠWGÏÓjŒŽÅNQe0˜m®;få'õW28}w}7½\hÈ·ξÍS9Ní”L:\ÑO—Nz£Zµµ¢ Y)l¦$¥ G6Ñ{üË®,U/ ÷G/ø\ñ6P˜yߎ)Ñ&­üRTÙ9T8Giª"DÛê¿X [Ïߤ³6ýL%4ŠÙ“AÕé¶vq-qÝ€{8ÚÒ-sôÙ)~k•$Ð8üÛ`Ú¥æ÷·ŒÃEâøŸÂá ÒVr@¼…W—(é3/骟U8lzè> Iê±®†‹©[·*‡ÎzaNöÄ#ÄÊ Š UL%äªu‚q¨RÏ'Î6«ÊW é2/ÑåIŸ~ƒÚÑìþ:ÔÑ0Ê~å>RÈJlÓÏsè»Æþ}’C2ª&l.ÅÇw0‹¢+Š9ÉüØ]0Jh‘VW&ËübS1>³†û÷_ ‰8,CdWü%Ó3 ¢ L¢ÝdjŸ Y6Æn”mnÀþ†,Whöñ üŽ«Ðy\¢ØÎ÷ÞÙׯ®çü©–ÿµ Ñ@ 3!;’öƒ‰ o7šÈLòÅÁøŽ¯ YPícˆYÈ1hýÆÖýZ¶»ÓNÙÞìX¢ÙäÙa´w÷é–HGîÖ¤±Ð¼Ûíý0‡•bÐÖ¶‘š›˜‹‘Ü€…þ¦Q-`K˜»íÉGegx¹¬£0Wz*æÀ1Ç„§dj9ÛÉ—ˆ,Ž( ÜÆæqò®ƒ‰÷EP³Ö7âiäre't8šf»a&£.,?søÒŽû*â+ˆLÅk0 x¬ÚR‰àŒnËíÙùçý“¼˜í½UÚl©òÞ‘ÂR?s…´œ÷¦U~L¸$Í?¨̲/q"ôŽƒÍ¾"‡l ‚R©ª ·º]܆u7aA¢",Âzy0œãdÌødšÈN5÷ò]U¤âdà¡Z7B,V h¹½GD=H%hfss}à‚°K¡¹ðîÔZ³¡m·²l æ³^üÜ®öð†§;­Üñ„[2zNé+, 7àÂ.§ 85Wu\¥Úb9¨6åXèÐc`ÓnßÀêh\\—ê‹ [þî{¥0z^œÖñSQ{+$&§$о$$i'ÚTu4z²«é¨_áÑóÍÝ…(…„w@}M…:esHÐø}ûZ™˜½¤]–Tª6wB\^'^ÈM'¤)/»…‚n&œ$4mñeBc²MÇç{êº×Š(vœ ´˜PÂ{9Ç¢RÈõ®óU³\~2öÑT›Â'kE­:kqlµöÏ±Ðø”¿Õûôƒäc§°!KÀ—j^,¸7f@y^LÍ=gν`‚ðtÀK %uÞ#žàâÄ@Ÿgyòau> W—½5í ­e©mÌP[QÕcxÊð˜·ä:FVrÊDêø9éãBl²ôsS‹It~›’ÙRÇw”ð“+éYƪŸóê[ðƒG£÷R›ßÅS„ÓüŸ›í Aa?Oþô0Ø''œÄ†ÕÌC_.Z»2Hâ§'‘3\´Æätç´c¯¸°@ÿ–"¦† ý-¨ŠRÖ…-Tgâ}yã$JǴDZZ3ÇÐó?$¶¨L²ý¥i=ñ†?8ÃyOiPij¿¿]´ò\æ6ÒNPñ‡³e+O‚˜d›UÔŸÞ§nPÃËÌWaü Ö2‡ðçÄ\ý-Q¥ÒùGð]3)Ø,Ýv°Í}ó&¡rÚùðÁÍ¥ë©#g“dü›¾@€é¹–c2öÙ˃Õ;M|¿o‚p… 7K©µkÛ{'\<€Ñ$èˆ@‚͇~‡4DÙ€ÎL€m×ÚÒ>9sÛ7êw@™Ìë7ÛŽ&j}r,A=’9é^¢¬ÄÇD- xö¨›œþÛÙÊÞ¾*WÙ!Z6݉V}ß“Dš56ð·^Øn[wÖ·èCözGîªP'Ý íõ,‰ê%eâYäóJë>AíNaü`9°íŸE·¾tâÀöœËŸ&ç8[é0Ð{ƒÁ܃ÃaIݺ€ì¤æR–šÕ³ ®qãœIÞ Z…¥ŽÙU;Õ'NȨgþœâ·•„F/ÄÆ3UŒzÇs_ûa6ßñœâ·ŸÕù^mÝû3%N€Jk²|dxn"Ó]>¹ÊNh*ßE„øiãrxDnÍö2È´HÎE~®¦ÄQ±{Ü{Ûš0Ü6ï¯UÁÿŽÖá@9”¿ß³¿ h‰²æg}£X]M]iõ1ÁÐÂuŽ9ù½öÐó`ª}¯/Ø#>%¦”åff aòýž»ÌVÏ+'TÅ/ Õ$…º4Aˆ,¨}Ô1rç^KßႹö¨úX˜Í«î(¾×®ÞàBdÕñ)R]ÙøÒ0õÃa€3z ö¨/¤úI7…Sq èº^ñ™¢\ÆŠ•|Psëìµ ª’a~¶ £pPº d›õ¸À¯1WeÎDK똣¡x#Òÿáô-ñã”*–¾øÊ¼oI$ÛÑŽ‰£æC%ånѳ‚Æ‚Ú=&n~ñÅÃ*äMn|Í5'íŸIßG ×–¦ì¢n\i²+î0…¯ (…*5SëÛX*Ðñ3Ùra…WñL¨`JäM žé  ÂÂF8Y§e㥃gf¶B!ÞuW:Rn”Ï<¥NûÚ;ÿĬQYÎkñÛ_KȶubÜ„ÒíŠÐº8ó>.XÐÐÉ@Ö$'„ãâØ¯6œÜÉÃÿR#Æ}?#RG-P]k††ÜÔjbðÝg®*ò…’ºG™¤Ë€Iv^I6¹˜F€2ŽY˜Æñ}˜Õ”E.`…)4iCÄ6ݤ®ž÷ 7Ï®«2¬”ü‘º«6 %=0ÃÎæ_±òƒÆŽiÓæÊéÞ™…S»Òh –ÄS×׊æ€yôâåØHC^)Z,tk²Í«ü@*:f–Мc.×*Å<×É¥ˆªtr”\^C°_YýZn³,m½sKëËGBÖèät^F¤ì_òm.­‹®$òµz,ï1¯ßx]¶¢ãb$]*©ï•d¯ KHTLµ°+Nþ®ŸÈ+.,ô]òo¥®“ `1² -˜6a,¼¯ä@×°¹ë¤¢ôR5ñ®‰L”@ÂO¶lqßó¼ÇíãUöfµÒuGêåOl/Zb£3;ªŽÆDècV®vŒhçÉ#cFmÿ4L^èõçíï~Ñd<|heÆ9“¸l¿‡§Cx-m”ùð"Ì•–ëðnfGrÎ"LÜÚ‹L€ðHBׄVµ=»æE x§L4¥ÑÂvzóX¤{\ÐÍ®ÿÜ⫝̸¤•i{û³¤mÄÜŸp‹Úìi”XýûÏ'cT¦iË.dVg,Ò(ÔÛU+GZRÄKð¿ëÚô¤ì–n/å="f›©©€² É–[é0UË 5‘êðò“üŸfè£ …2¼yjúÄW¸÷¹\”`åñî x£÷“t\Ÿû’@oð]êò4É»qä(Oz1¼ÕZ} Ú´_FyòÇ(û1_¸ö B(^"[±¹–pA#‘G«]`Mù$}K$`ÜÚ7,·-ü°ÁC '¬Íg ½p4łズ´yk¡N›V×®וÍèÛ¯kîÊ $o®(ÙÔã1Þ0†MCSªh‹½êwØÞë‚‘ ýk‹q~EâQßÌû‹X{îITÊœÑ+`·cÕÊ|°ÀiEúäõ mL‘ŒØ‚ú2§ÓO2Ê!¶4¥AñJ¸jpêÄZåëV‘Á%ý½ÜÔiÁLªãìÁ&áÊUýÉXlr±#íXß±D\_qJ7fosyöÑ~¢ÿÕÿçâ‹MÑYΛCºRÑ•’ÛxÇöGÄ—F¡^ YÓ©òÒî)õk/hqå;‘ïq:Ê?šò@Ù-ÜÚÓ š®›×$İÔÿ=&Z#“è·3nàðì#y£"Ä[(fà'öŸ~®ü´UXt㮨žèѸ7=Ž,h#ô}#ó£wéú3ôáȈ±K‚¿Òoòõp h›r7¾&t)÷$$¸~¿éE4ƒÜo6g˜âÚ^°k¼Ø "P  -\ê¯GÖ¡qËéà>Y¿[P®¾ ×ç~ä'°bàZ íEº£âÑmjí?Èg-z¾¢F0ýmÂ¥¾!¥Æ»ÃwvÉZ~®²uI¢òtÇOϫӧ¬réê òŸämýŽï=>ºËÅžtnÒööqP…:¢Z_é"0äM´gÞ 8!š¢2‰½é¹¾7Ë£Åû/Rû4šzÝ’:¢Eô<ÔÞ,Ué_ŒÎ>¬«NvUíˆüaw :ϘÀ²t<Ž©ÙÍÈŠéRE«Aðp'°šy îÞ !Ha+ýV¹˜²Á»˜ªÞª7’_oÒm­iOëËÈû»…66u*¢ö)/9óCSNµÀ!ô½LÆUtkÀšÔ»šyQÈ6¸ÍorÄòãV©­\1Á>NÉù *XÕ;‡^H^kB ˜v'oåò¯’•kAºŸk7꾇L ÇñÐH…X9Dׯ»aÂO#â+ÁÄ,-mvG¥Çõ ’òlpÿˆ / ‘…h+¢)W(­Šà*½¹©Œ<”Ø9 L4Y`÷ʆñÐaѸ<ÏŠO·ÿT¢U}éϹhl¯¼$gÈ^Üf}² “aa`ÕÙjƒ)x@Û³h½5&êÏì3îaÏnlxœ~pNH€ëÁjYc}vGDK±»…øÝ®Á­ŸNâ×`ánb”:O ÓsÜóm°‚ÜXÝìù~ÉU¼Ý’ZP›êK”¹ƒŠ$õ”X˜Ê,ÂÛ(ÏgMF!ßèØP±í[˜Õøå¿x3螥›+uµùé|#v^¹+ìÜ›È~§bÓ&%뤅Ç®Â`€:ÖCL¯yü=#íwª¡W²Ê¶‹p²« >b¥~Ö;ÊKÅ+Œš±“Lðw>a·#•'yNª6\S…(Í92„ ¿^”ÓC‘.®T8û'Õ’U ;-›+Õ8zï&Ä–B¡ i‡‰ÑZvç*{«õhŸx:ÿS¡0×fáÉptI¸ývá ?(,"êg¶ÉÃÉK©Öý  _÷Ì3t9ò/®÷8Òšß§×æÓ— Bï$<´èbI;f“ε‰·ð(( 'o¿#ÛgÉ­ÿŸ^o#¯€o,x»ˆÝÊ,ºþAÑSö,[ÉÉ•Ú.øOÿbô³MP÷ºÒÜ¿;³Æ²ï´QqÚ|"ÞbÐçYÈë²¾›IØó{¦Ô½Òæ¼±×êpP0ÚꇮÞj¶wð:Þ¨XÞå×ÿž.¬òAÛ6»_Øl¥'¸Ã+è+v‹þëQ$-õSRÏâ¹h"Wý,ÁûÑÛ]׸þ~øÖ†—¥sÂæ‡ßNR¦ oY¢Ú+[øˆ+\oJQþuÉÖÚ{ƾ"»ZKYw¶—õЍ„gÜŽ9úÐ T:ßQ%/g^ýÁæ<ð½L‹‹Dç$³ßáiI]Ü «Õ½2®WÄH_áFò#’ðYÂõ…ó6æ ³R\‘.íßÊî‚äÇYµË·h$º`{Xf™ )[ ù‡.!é 󸃬¯@É¿ùJZHÇíoŸb èŠs“º=¬è¾æ€GÉè¤C ¯Äzìt­Ÿ‡qƒÄœ†;ÊíIÅ–ât€(¹®Š—‰…¡O Ú>Þ!a;xûÆ|E:=ø¹ñ˜$"h€‹\Ÿoß»?¼íÂýØt‹;A“Žlì@}zã‰ÍG¸D½Ú ‚+Ó%2>ß›¦¥I7K“HmæÅe–w8ÔÅÙu¼M‚F:-¡NvåEóŸ®h(å•óþ¡ƒ%gâcU…â­®·¢ëxÞc›ä02cù·6óm[ ­Õÿ²dYã¡äfö,<å º‚éaã vþ«·Ò3ì¸ ã‹µDRB{kx>)QPN DÆÿç–P¸×I£J´¬S–{(¦ðIÞX¾îÑoiI`(-¿ˆ.DÈEÒ—¡šŸ|HQåšf>{ÆMíøx§Ðؾ‘[.ûcTø™‰ã‰Ÿ1*!ôþ×jZ U¥í€¥!Eq2àØkÉ!±³šv¾´B¹3œÔSÚS”{y™¶4v.ò™ÓÍÚ£¤eð{MLÂÝQ2Ç(ãÜ-¬zì¢ ‘‰k<º/§!}Rå±j½x¶J0ZLàÖdœ@©,нHYX!úêH"”µ —hæ‚kî…¾Ž_?|¾¦ òÂÆJFCOðÏæ½,Îi{3ÑO!ô°F€ª—ìÉÊ&®@ŸšÒeÉêÚagýå/_ ÂÏ– pá˜|ÅØåZý£ÚÇ}2s@ÿî©÷:¾w0ÝS:¹ãh¿µß™Nƒ-Ê- hï”ßRK`ƒ«l «p•§`Þ¤e…¿waŒëpé1ÉÖŒùËš $£:Èm²÷X„П˷¤›¤¦í(©>"ïq‚M¹$¼¸!#ò©Q‰…ÅCTÃé„#ÖBLÔ7+„bo¥e=U™du¤+iS^s!ùŽ3ŽÑŒ™Æoö"sᬑ!Ùµþ¤ÆÀŸ]ÑL9€ö"5J­â.¦;‹¤5^7µˆbm—¤äž¨k³k;÷2®°–sD=š àƒ†”׊œj"¨ ¹Ôwj(§äñè ²ÇVîÊ#X=À²ƒÂ4‚]d÷´Åã|ºøhüñ“¿Å=g[^¤¸lo3b¶úÀÍŸÉ{¾7P~0Ú1¢ÿ6–¼p«L6eçWù4nxÞ32ü¼Åu.¹× N_×e:×éeL×0¹Eêb£3HMƒôŠq.…©! $ôâ{Úƒïõ¡’;°óîr§…¿S(«wæ"R\g"Å*¶4·Mô;‘fÏgããúï!8ã²”M:—SÂMÏ+¥O‹›ã ôß®Ð?Ä’Ë_™FkÙÇou Qm°‰gô-ö ®¬adÈ×Íîk­”WtníÅ`˜AµÕÜïd­¡ÉÈü=ïµü¹å ¦ÆÝåËc2Ö(gpܤܒ’wj?”(»ðé€vÖ||³11qvÏÞ÷ ±ØÞ)ù|då´R6|1^{¦¾S§9°d(YóÁÀ¥pÝ“(¿,ó}N0P¶ä!é‚í¦­7¦…?÷þX†l¿»ûíåÎþ;>ëÈ@-¸èc8R”ûÓ¹û*YµŒ€÷ÝC–èצ0ÐÛs¼³«¥d(½cQv¥Lè=>Roζ²ºWn¹69yëSVdº’0u¶È–4öíÄ«Å1¡i2 •eÐãÃÒþóF¿Þ¼¢4™ÚŒÊ[¯ôH.ªoœ®Ÿ?¥¸•/Ëj¥F1à£ÎìÊ_jEÖèi«Ø ÷îI=„Øm)ü¤·ƒùïÄ-%óg3üW¸ÊNIª’¥† Îz<ÓC‚íÔõúÝÆu¡VPY¤éÖi]ÔÓí·#|~ÖƒŸgöj&¯Ä?Á×Ùi ÆÆwn®]Õ8‰j4üÝ*̼ýÕ!×qqµÎ”{@®×“KoABÓæÔ©Ì»ŒDeë›@+aHREîi® ø¥•õnæXŸøMP¿F ¥ꍓ›$Ö(sâgf1ÐMäœ ½‰öáÂwå’¸xô«›P§Ú„®)•6>¡‡;˜Ùá)tÒTS¶¡¯ãqQ&ã\²Ù‘ž+ž)"þºÝ'c’F^ù‹$\B÷tw¿\ó‡`²t4n»…ËÄë³”––’B xb©^¯ÐÉXbBðb·=i ²À©¢vîïþ”5Uí uSjýøäûG¤œ¹?âMç/DôGô3Ž@á ÛGù;ñ±3! ²¡‘œQãÞŠçùó.ZÖ ª+éaøÁvŠT´„$„"y…„š}ÏÏ\´eÕzŽÆyê’i2vE­èSþN­Ç½ïÀµP˜‚­à0:Ï ¹7ƒO²¼âo"\&Švƒl⊇ί š=ù*–Ê’õ΀Ñxfà½\õ:èü‡…EosR>¡,í-gG†¿ì!è¢%7Ù- I š@bËÂPwu°·ÖƶqŸvl=Íõž´Æ¡Ø¤Ò,¸_„ŸãÚ¨7å]FëDÝ3dæ“5o˜Íý-¦XGͤS”vF“Q¬q­ºo¦®T,<¤Aýu9ÛÏ×¼úwG×ðLnN¼:)cÞ¹¶â˜‰º”l@ã‡{‡•×”&ìßàJÁ@9^h€l€6†ÔQÖØq“½óÉÈtmZ^a4ô¿¸5ü‡bt ¶ÌíD¨/õ ה#¿`np>[ÌØUðs¢Iy1¢í"õì$ùlžüK™ª<ö‚ØFS©œ+Šðöí×S…ügã¢ú$Â\6.7Çê[-¢‚Õ'ýùóî Ó€s'…`>geå8‡™umeãÔŠWªï÷0°õ¿Þ宩2´oͺ$Á> ±²ðQe‘Åþ¸ƒ·’K™ðw“jn—iô.hi9)I1k­”c¸ÖïŸ1H ÍqÕH6Ì—K¤£·WFë“§a'׫¥ÏZš¾0^ÀúµÓËç&šððŽ‘fÿæ §ÐÐk5­íßüWôÃa,ä»sÏà8vï³Ò£÷gã, ”…g:¾Œ—ëàé*DK5ðìï"áEêà…»Sœgp:A4êú6^xßí*ôç_ï£6/î‚Ü·WE%†G6—·Úôj–ݲœ.õdý.ÀúK2~[µm–;ófø Cë?­‰¡iÏ:cD‰I÷õY“t1öʬAk=¦lá~i~äòdô=—xk©¶:æ7ÖJäÓ Ó>²dþ§›•„=LgFjä@ ãk¤¿£m3wЬêç &GÞ²œ2ÚÿäíáWp#nH´£4¶Ý ãþ,/ó¿WrïE°Âf™EÜÀƒ_Z–mlÌÀéArÚ©ØþÖ¦Û'±8Ûêg²UoÑÞ³/åŒoãNRzþ ù;GËZÑ ÉD½…¹ÁœÛ¡jTæ/¢…i¶ã‰„7¡Â(Zœãòu ËX?r.G‚Hx7솛m³Òün¶{ˆz—à²fÒYÞø‚ð¹_(’â3J :øøzÀ&íë§N{ª ¼·`|”m™ú#¦úëãyVE§ƒZ*ñ ?y\Kn| ‡˜ìÓ÷¬€¹cVÇ]¤ñãó¶7ÔŒwÙ äµdÞ —ÂB£«ÓáU;îsv+p3^äŠB/. á$£! …ð ­øQˆ‡ÇBÄs3'Ðû·Aʵ뗑V?-)$3õ Iú}è?Ú7”I-šüàŸÊ9ò:Y¤VKzP½>ù¼ÚÚ-ÃÅá»5@ò cAktÖG8)O4è…Ò8CdÄ£ýÄÖb$):Û[²,W¤êæ'Ì®ò„U‡+JËVæ‰ ñ¾v±( «+äJýÚp²áQסŒK1.)ýó- uŸ¥Î.Ág7w 14•°î·ÌÏë =ûJÑÿÅÔülÕÂZ­ ¡°¤¯&ëþ4“ioµÁþ i¶Ç™ê ?#Æ©¸ 4'³ç¶¦´ºÑ$˜¤¥Ýáa_(‰3&,ãûÜ`Ò{úîSc°ÐOA@D c‚„!XmlRnß@Rš(íXêI9é¤hÝs ïµrsn»ï^ùs‘¯ ÛiÛüáIʱ!&7)TL½Â]ãžNU³èo­(N_oÞÎñ4!~¦ R'×óõê'šÁç¼Ï"\p…Œµ¾R›³ùôdëA"Ϻ«àP¿,“—GÂËZɳU*9„6¤šqL¸7Ê:"ùÀu|¯¦uè0%à]¿Å+,« ðÃÙ”‹ }ò`0…˜Ór,nâÌy_ì[@g¬L=Mh¹“C mXƆy,ß Õ©]{¼6×s%}áèªCíX E‰ùÔ÷ç|Æ3Ê'Vÿl(Yëx’B6Ø#ôËl8dŽm‘~-€Ù[UJp9_"¤{ª~‰ ˜¿Æ Äk<ßáþÌ7¡ìíço_NÞÕ¦WÔÀâwó¥ÿ®—ï`Æ¡ñ‰‰»|jYâbGùzÆÜ€æÿž§Ê•Ñ-B¿;`BG±´Í™Ò-&Ö[=½FQ}öb€'è½·»ÛJôHKH4 ÂÖzª,ã…èe]3£=TËo2štå4“§iú-Ù(B¥à»ÏBÚLüý|²½êxœ)ƒ‘†á¨w=´{ð£f66^gcmËøS–îV_¨`öž³¾Yçäߊžœ]CúpÁÉÆ³Æô¬ MÝ,„tH3Ô+7CòŸAVdhˆô¾è7†Ö‡:.ñ=8¬ùÏ1 •©>SÍ`dÖÛîC³wÜ$ôB¢…ií·TéÚpÚË$^YülUN2fAÑÖd›Y²‰µŸv‡/oYwÝú =¬n×(p Þî;AÕ:0†Ò 7ñTò'â2.ŸlÊ8Á¨<'íûf˜¼€ª4×ü|£þY¡éºgeøz5*®óüŽügCFåÿƒó¡êðq‹a'_%¨Jîû_@Õ!‰ÓžÊàLX,6jiYˆO–Ë7l‘jvC ûß}Xj€—ÆôK ü9z+ §×aÐFOˆ/áÈ G ´Àì½rÞÞš÷˜²( :ãßúPÇžhÈVͲÚô¨‘^9ˆAÓ–™laSÙáè»[¡¼ò¬Xñi™¹s¡ŽûDI1ïøQGìà,¯.”ðj¨zi›ØS ¢}£NX™Óë`„ôá Ê_qZ ŽTf€x“ä!RÊj÷Âw䡸dcLŒXÓq•Æ1°s©ðÈ¿5ûèŠÛòhýÖ`³øÜͣ©f)œ4BX‡Å y·áF ã2ôï| ugœo ú²§‘£'·™ÉÇÓ}æíUŽþÂŒ¼¿Zð1q·%bzg\ŒµPã¥ÃÈÖIzÒ%òﲕաf¡ ;묗Ӕ …ÁYÖd·Ô«ܦd[I6WÄ›Ghjoó-s7'奿-޹!y)–œ9ß83ÒJ¸ßL'E½#ÃiU€¥ÊÝ¥Ý†Ñ ÷þÔ©C„ô~%â0ã¶”€I¶œþËÈ|´XÙ£ÎnÇxÖÀ岸Z÷› ’Ó+€ÿ´\yމdn È^¬ßË{?«ÌKŽ'9§ÞºÿÇd+ïrþ}³xuö–P¾"–¾jy¹²H#ºô²ÉëœYM,~Fš@“6BY£R:1XÑÒô™1á¢Òó¯Þ(D#†OØá|½ääæÓ´Ì>ñü>¬ö~zYšo¬,†ëã¾…tœRpíÍ|šæ¬k?wTÑùz#\±8_wx@„`“ppÐn*G2‘l_†°!9ybÙ&@x›U|f–‰æåûK©o\zr)¾~òe‰ïwþÍ|ö"!ô¢ªO²©rPÊ Õíú슅*çRìÊ&íVÀ„)­rlºÐçunn›ADå*)©4hÍ^0S鼈ýŽ$]çy²–Ò‡»=êDšætô(>àȈV À &’Xf}>í( Öž£â¬¼öoÒ¤nùиݒ£“¤¯DBáÇî*ˆd;˜ë\¾øÓÃwÜiÛ^ï胧´BsyÒ|³¦Ì©–L]Új§"ÙéVÉä€m‚Vÿ=˜É ©+õ”|èðÃRTïq6™'²)´]•W·ŒË¹{¡[‹\”i(5Nÿä\£Š¶½±ÖÚšêÙ +½»™Ú€k~Y!ë"œ…áýäAâ“90¸£ÿÎ4ìï¼"¬j;Êê(´‘>:úúí)Kn„S.Y c–ôPõˆ’‚[xÓ[uT2fO/8î¥ ƒ ´; YÎüçõÛ܇`;L¸Tdä ¼KŒ†øÿòv'ˆÖ#;äê!–#µðŸë.·L,0)ì„dWMŽÓ8 žè< PGb»xÀò„ 2éï³—ŠÄL »«¨õï¹+ûLÂÙÛ¬ó†ü(‚0gÿÅ1™ÞÆèúÒ¬qgH¬xDõî5Š` ¼’qok©7mõz”QA§m‚Û=›¿…‚*}þ + ›†‘°X~6Zú7:ÛVXB~¼ËEîk ¥Ç~ûü…W~±9àjmœ)•–ëo‹2í æ²+>†ç¼@Ê¥€ªÎSªÐ£BvÏŒ'nr“õ:-PÈn{¸¶%Èu2õ±HZSSÑc›KµNêaýêaá“ÖòxC·Ê¡g¡‰b4k“²cüÓ¥õê.‘¦­ª>Jú¯j)‹9­ÖvÔ£œÜ=Ù½²‚¬÷7¥QU¼ÄÖà]®n{ð@³ :µýGUb”‚CëÇŸ®DsÌf¼98¯Í.ÓDi²7HÑÓ c\ý±Š¶õï1\ÆèªOosÉñÝgÅÇ$“ᔞ•ÍzËC@ïB~êúÉS0õ`HmP„IH²ÆéÐÕ"(|7?'²l¿Fˆ‚ˆY.v¡O§¤.Ü8ô`-¨uZöã†ÝAêÊû3(' ümû#©9ª]—:¿ Ê+KDDrÜüçÖ[†œ„b° ë7øS8Ù›Ö¬¸¸ ³fnSÄ ý¨„÷ï¨"îü—Ím6¯Ÿ­û ™ÕZEfâuëŸ.AQ-(ÇMÙ¶ ö)}Ë^ÒR£G•ÃÝN[?-¡1¨ }aiZsInt»ôB!³ÛÅ~ô_tv>@¯³!6öêÒxUÏ¢Šr0¥ûÞæ‡aâm†2ö6~Ò BÁHmw¿Ò©6ÚHÉq`]š_÷c[]Xê-ݸöð¤aHM  °¯Yk’W›ódüîÍYŒSQöüc2m.Z2t‚#¼ÇÊK$gÊ7ެ‘(tƒèÿÂ'1$\ ¼v§×ž Ý%âáý€=ÝI>œ{×ï­½½t(¡®B»ýCI¦°CeDNÕº­ø&¿‚Û³;ˆ”—€}¾µ‡“ãKÅÖÚtß¡° Ý5sZfýb&±Ý{ˆµHO°øÆ¹«dCÃz 7 ]ÅË’ ¯¸u?ÕKH 2©:^îÊÙl#h›wy"õ’-!§€µÂcü4ê®è1lÌ´äGé¯gR><Ÿë»QUŸ·AŒWÔ[Úºsq ÍD±*–ZÛ[˜ñe‹å޽‰iÈcyYγ`°_;uTdÃsa¼MsôëS¦àÞÃÒR’،䜈æ”ʆñùÕaâ Vd´\Àÿ)´‡KF¨ó©Ÿ±‘Sy<­ Ä /| h@ˆÌ^••›ÕVHËëXu®Þ~´ß®*þ4½„W«o‰4Îó%+ÿæR‰ºì ¼»Ðúy„ª›É¿Ây¾;Ì:ËÂî¸4ÛÕó DWõÁ6ÄÉš˜ÚQÅ2­px™>¢ÊA^ø¬‹ƒ´M´³ÿ‹Iõ¦Ùæ:t×âç ´ §J)õ»ÔZ÷.}/€æÔí¼`^ö?Ðñ'{ endstream endobj 76 0 obj << /Producer (pdfTeX-1.40.20) /Creator (TeX) /CreationDate (D:20230309131305+13'00') /ModDate (D:20230309131305+13'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian) kpathsea version 6.3.1) >> endobj 9 0 obj << /Type /ObjStm /N 55 /First 437 /Length 3015 /Filter /FlateDecode >> stream xÚíÛR[Gò]_1»•2s¿U¹RÅ%lã8€/k—d8€Œ°$;_¿}IstF±xÙu•ÓÌ™ééé{÷¡„9 m„ÎNh-L¶ÂháœF o³0A„è„ñ"F+¬LZéܳ°Qe/,ndëVÒ¡ ÙÔ€¬MÂDÏ@/+€¼5: K€3ð7螃%“ñ|áðç…×É„ˆŸ„O! ¯DP1 oD°pŽw"xÀ³ ñIDåC/( °Œˆ!xœHZrÉ È"ù ‹J¤ ÂD#²†8;„µ L'”×»Ìi"caà€Eœð@¸Ó**@„±J^ ›2p+ `þ”þ:Ð«Æ UÏàLÄ W€{Øj”BíÂ@ƒø5ktè=~Ü“Ç_¯!_öÏ›žÜ^Mš«ÉXX°æaO6ãáÍ褃iiâ 9ô·†_Ä{>û ä?9½‘ò‡PÁv<±þ™Ø¢âñc!wM‡+8½—!¦³àeVM4*òåhxrÔLÄ{`tgWÈãæËD|˜p«º+Âzd¸…Ej4U{4FG6ð$=ƒkêƒÆ-c²ÚwHmÌ¢ÔF­Cê%6"×í*Õݦ˜[¥þ§’ÆŽ¤~Ýö­äˆ¶wš½eßZ1ë”ÚêŽÔù½z&ÆÝì¾÷!o@vý6ü¸‡Îç\àüÙª°ªY~®g÷@)é¸9Ülh«(¸*m$H·´nìàÕÜÔ„`aÕ%¿á€›ä2ÌÅœa_ÒƉèF›60•G‘äù˜7 Šè„œ%0Äbæ701‡€S„”œÛˆP ’¢q²¸-¨1 ›€ÄÄ£µ`¢òÀ0¤Ð7ޤteÌó)"¡²êÀ¤]γc¼¶pŒuV™Ïó®2Ÿ-j—f²EÊeo…Ï8¨=ÞÑ0Û«¬5|ä-m5YàüŸ„`aë<ÕÐg5‡„ Ñ>ý8%6…‘Á |t&§™oI–¦@ÞÎø<®ç ¦ ‡é3,8Õ*³WSûÈtò)5ô Ó#à`Ç¥!8cˆˆ£1DCa– fk) !¦… ÉÒyÌéHX¢Ñ`^!œB™(”qÒ˜H‡|J9— tŽj¶™a€LÓVy¾V\›H»hÆlȧ6°˜%‹šØx•g”1á8ù5OÍW­°8<.¸x2x_€¼_þC_Ô˜¥ã¸h©útq†É«¬3ÄšaÈ?àÿ;üÀ]¥üá?`ÇK,ÏzÊ¿ ¹+Δ8W¼˜1£)¼Kø„r½‹±.w3>ëyLj·‘B“è3dœÖ*qWSûÈtò)5äê\fJUâ¦**–(ûz¬ ‘J ãá«,¼?¤²›{ý¬Ö¦Äó´¿œ`±`ùR÷Ì ¾âšgˆE»Vq¶V¯3:73,Ù|5Nˬf®6SíÅÜ„c3öj–Ê2®^EaxÄΧsŠ\Z¬Ù eˆÅ®ûÉS™6x7ÄÆO—1v –Å t1tžj –qP`, ·W,ãë1Žy>õ*’uÄ?޼gÇvc¶Æ¸4G†ãg6+í˜aòºƒ«%\–-]–ÍÔ>¼3kÁDìj­ äÖ8v ¯úߙð3ª¡£n¨Ìo!ÛrQŽÜ2j2ÝÁuÁ²žÂ\¦Š² ¾s,ëL÷ÚFÑõšÖÔ ‹ VÊÏúŒ±U«€Ç<Ï$ëU&ì,õ×ÕØdì¾kœ¢š÷:SãLÒÈCÙ[á3ŽMŠ`@¢1­‚É"Ýô£Â–Ôäe«(b–ú,ãà<ötô–„ÇÔµzƒ.JM)ãÌnÕ ö„  0.xÌóL±^EºNÇrLŠÕ*cÓ\ö³Ý1Qãž9Z·À8ëü•¾õÚiÆ'£Áõd8â·`/úŸ`åٯϟ¾ûiûà0Âôeÿ|,¯oÑ›µGÐ?2^á«w`Þ«=¹9>Ák!ævÿz¯œ_Lð‡ƒžÄCpí‘ÆÅýIÿrp²yu~ÙÕ“G“æÓkˆ¤ž|[ö8«ÄE„/Ùþ%‡W76Wrò×ðßÌÆî6»X¿Ãû–Lo÷·ö^üt´»õW-‘ËdñÈâïà"Û\ ¦Z‚áã=óª̹Z°CÙ—å‰<•<—r ÿ—ò“¼’Cy-¯›Ñ`x*Gr,'òOùµ%y^Eò×{O÷w^²äf¹ä¶HÙø‡”|SîÈ'ò@þ*_Ê#y,_Wš8ëè‚UpJøK~•׊ðz%Eì>Ý?xÇŠpn™"tš*ÂãWªˆ}ùŒT𪥀AGô¿ZBÛ•üþ?o÷ÞíЇ*,µ¾V ´€ŽºDç–4FêªB[µГ‹QÓ,´÷«¶sðìèÍS,.LÙ"X0м9S –r;S= `+eª7ÛGO_°`éÛ‚yï­ÓC ¶)·!^÷K¬¾)Îz2üô©_\ö þ (r/¾^_@®žû0jÒþîrÙœMx4Âc¦9î³ü|3œ4§/gœ>02=ñÃbÜ|œ /‡WÓâPTÏyâ f ùw3jÛaµ¼ùäù˃²ÃòŠ¡V ƒ¿ù€¿<¬¶À¿È]°Æ%çE_P=$ë¼"û¼Yõ3·SsuÚ_ÈæËÉeÿS±˜þý f¼”gÛQÛŒ¿W™xS®dÁKdk2žÚеÃJù~÷ùëGœ!–>| $üðà3Ī? ô|)¯ ÕQKöE¿ +eüãíw›Ï¶YìhÒ±£Ã2]¼…>*»üb?™Uùv·s-G-1WÊÿ»¯6w_=1ŽïÏ€… €†KþY‰©uKL|œ‰iŒi‹ù(ß+>Ÿ@4ÖM{Ÿoú—ÔÝœš>ÄÁ¬Ë)ýÞ]Q5M6˜îƃ/·LÇuV*=;{ï¶ž¢N÷—ë4ûiÆÓpq¶ÿ8`iw¢Ï`…¹¨JÊõ¼1j7Æa¥ÿäàåáÞJ{|G¡ÕXh¡rh ‚'¯ÿ©Ý'P^SN,wˆ[¸RV|±ùÛ¯o#©ï¸©4›è¾'nî—« ù8êŸüÑLHò2fÙOâ¨}K¸GmjEQ«äÌÊMK­·dÝ_®N†§ƒ«sypvÖÀøíÉ{î¨{ÂèRy…‰¥SÂR{6ÖN‹ñt‡°¹®“·É—ˆ’WJ‘.ò±H˜¸…¬ÀÒQQ§ Yƒò´¤\x¦-T)Å`΢ᒥ )—¶cgÞxÀ•¿î=D2íö®Mµ!I´,)r¼åÂ÷{ëúû¹uí£FàC×ÃÁ¹n>Nè'Á·úã†>çYx‰Ñ üä‘>ÚŒÆtD¸R÷äó~yð¾'ß N'caÍí±u×ÉÝW íӽꜪӵÑóãËWMS¿Ã'Wæ§û`³ÈOð-~Ìœ¿~:÷ð~Ü"?ÑÖüè<ãǹ5ðÓ½"/ðîö–Ê\i ìt/¶ ì¤û²ãôØé^GÛ섎7ë°Ì{â:¼§s-[àÇÜ›g×ÀO÷–±ÀOÇ›ñPåÍqÎÏ:¢«Ûþ/ðÓñæ¨[ü¸9?aúéôé ütÜÙ¶ôcÔœµŽðêô¸m~bÇŸs\–ב}º]è?Æ”yk6´ë°W·?\àÇ}Ã^Uþ1÷à¿ìã§½7p:ÔgƒSè¨h'þ?øÇhþß[2ÐB7°Ý‡¦sxÞcrÕ÷½ÿ³î< endstream endobj 77 0 obj << /Type /XRef /Index [0 78] /Size 78 /W [1 3 1] /Root 75 0 R /Info 76 0 R /ID [<6AFD906E5984AC2EA2AD333300BAD07C> <6AFD906E5984AC2EA2AD333300BAD07C>] /Length 220 /Filter /FlateDecode >> stream xÚÌËMBqÄá™ÿ½rEEÞ>Á' *Š]†èL,ÀÄ„XÛ0$®µpÅ2³ùòË9'–HS€@ªŽ¸WâF<0~.xÛ‘DòáY[܉¦h‰kÑk"&rŸ>¾÷")¢’ò¢!Òb¨ÿ{¶!êbSl‰ŒØY‘yQEQe±#v‰æ·ÿ탾kŸxo¹ˆŸ…ë W…ìÿ¹ªä˯ëˆ\Ì\Ç £¹ë„á®S†Y×uÆ(™ºÎË®£¯7×…xdü”€ñ`ˆ%8 endstream endobj startxref 279879 %%EOF gridSVG/inst/doc/gridSVG.R0000644000176200001440000000113614402222221014721 0ustar liggesusers### R code from vignette source 'gridSVG.Rnw' ################################################### ### code chunk number 1: gridSVG.Rnw:71-74 ################################################### library(grid) library(gridSVG) ################################################### ### code chunk number 2: gridSVG.Rnw:75-81 ################################################### pushViewport(viewport(gp=gpar(col="black", fill=NA))) grid.circle(x=0.33, r=unit(2, "inches"), gp=gpar(alpha=0.3, fill="red")) grid.circle(x=0.67, r=unit(2, "inches"), gp=gpar(alpha=0.3, fill="green")) popViewport() gridToSVG() gridSVG/inst/doc/extensibility.pdf0000644000176200001440000062046014402222221016667 0ustar liggesusers%PDF-1.5 %ÐÔÅØ 3 0 obj << /Length 1789 /Filter /FlateDecode >> stream xÚ•WI¯Û6¾çW9ÉÀ³".Ú€¶@ƒ&A ·—¦>‰¶Õ'K†$ÇÏÿ¾³ÑK¢ éE$‡CÎð›U¯×/^½ÕÙBå±V©]¬7 U˜8IÍ"Ël¬KµX׋¿¢7Ï“ïê¦Û.WF™hÚyžl‡¦þôçRgÑ;&\…«§eª#·õ˿׿ƒ€|¡T\¦©F…Š•/V&‹“¢äû?.u¹c —ÀéÇaðm‹‡-.4|“8ÍSfþà† ùwÌ]>ð¨mXž)ÊÆÆf$o¥L[[,V¶Œ‹$ãKÞwK£¢ièQï¨>VSÓw¢nº(ã2Xàt²XéEßOÀo“¨qTÑØïýÔìýÈäãè7ô Øê¦u¾òãè†3/7LW"^ÕþËR‘oûÃr…9=õÌ]ûω±qáêïn‡þ‘àujV÷s’&$/I¢ízYØhðp… rÊ2ªZ7ŽñreÖ;±˜)o ( ]˜ð•Áä˜ü[¸L[£/yCÞ’7À¾kQƒ3¯žºYNH™ä þ8±â LHU‚MwÝ%=lr£‡*ulÌÒ3ڂߘ8×Z@˾£µ1ˆä£›Š—ÛÁvMåZ^†fßL ›p‡´*#À ΄<:´Ç‘ù´NzxÅ {móD×ËàÈ»èTWϹÂXÄ,¹Áˆ¦E{Âëú)îì½ëhŠÁë¦++mã<×?lf}å­\×õ òÏì¿àuàâhQK¡€›®könòwTH"nèšqÇ,èÒ÷*ÓqbíýSÉÏW¦47¾7šiÇî;®® f´ n6„ˆÀ’i+°à^Ý“²Õqï;|«\Qû±và cü *g qš ]ÕÀ4¢óõÈŽ{2ÇkŽ]c› ¾ £À-)èƒTÊ0ž–ëSX<{Æ’’_™ÿhÀZÈÞXBI߉†¼ xL\d†Y®R‚¯>Ù08P e•`æ¹A)½ gfò.ʳ|Úr&‡q<iÝÈ8‰MËy›–QØ&÷‡YA†"dBžîœLļHÙ»ÚßmT²÷Ü“1 1áe\+tZ¢<\vÞ×L@Ë"eçPÏ/õHÖc))kÅ2ê6d! ]ãÕƒ;ýæ'×´˜’ï›C%TåÌŸ²N”çnßFŠœ4œQ2FFF‹BU'yœ–úІ†’ºbDqB†Q„ð¢ö“öMGÈÀš¤!].¡ÎƒNC­åÙàb¡î\wƒ gÕà»K8Ï 2جŒUHük¶™ÈGÈ'mÍå6$^TFª#ç:óÛÉæ@⪔›üÃ;Œ¸ÿŽÂxdÎ9ÏEþ oŸ)™xç33þG¥«@NyÖêÛzÄtŽœaÊÁ—ã\D7ÐI™Æ³¡ý¨å€ds C¿aÊn\¡7=Ïëž9 N@›Q= ;ãðЉåÿÓÝUœ¦sîêdª¾GO7èÖŽr/e}X^ü åÏ#á«[Ù3ϧÙJ«"Îà-?”“¡¯)c¥÷°|ÛLðÂð®ÏhX¬ùJGŒÔIh“sÅ@4ÑPAp‚â6¯U×°‹Ðu\ ™xh°s† ⃯ÆÊwÂ,@͘óè ¤{l=zÒ«¿—ÎB˜k¤–¶¡ê÷ÒTtâÒÕV…ü !(Ú–´óg¦IêÚqd@PÓ´ï´Ï®4Õþù1áb¬ä×€ò}Çí:·š7vh89£1¿Pú¥Ê†Kãßž/ üßÜþ;rð3“Xù-ûÔ숧ÉÓKõ‚©vDŸ¯ªiœŸÿùÁÉÃ5E‚þï™JY (}'„“¤Ç"´ä@“æ%¿D† /ÂD@ïϹªj0§œžKNGBÈÉ÷bÿ9ŽrÀÍÙ墳)n›qcÊûf£¢ò-Fw`EÀçÙù-0ÙômÛ_Ë r¢ÞUÏ>7àÿµè Û•äÑ#$Éq6«ác´t0¹ØË# ¥Mþy `h‚Õ,4£ðu>„)D$« áOð+Ã[°ú5ýl¹WÜ„Qû:òœ»é\KIõL 'šI:•Û8)ó¯Z x ;7Ù"b Ñ9ˆW™ªƒ—Žùm³=9ê6ôLWxß…N[ZáÈ¿Ax7àÏ/§íËÞ¯ZX F/ÿ£ï ¯Cd¬äÓ0o(¤ímW Îo8ã÷êêå|3ñØŸ&xgþíáOoÄúŠcWaa‚Ú Åº»—Á±&´Ÿ‹—ë_†£ÜÇ¡a s_¤²26XtEÎ7Z/Þ¬_ü y–½Û endstream endobj 18 0 obj << /Length 1391 /Filter /FlateDecode >> stream xÚ­WYoã6~ϯ0Œ<ÈhÄ]í¦ÀÛ,Ú‡E ô¡ÛY¦m-d)•äÚiÑÿÞr¨#‘·Ûn ‡äßâ‹~ùBÅ¢0YDIÀ‚t‘o~»á,€ŸÐJŒh»I‰ñê»#_¼­o~„_·å»KýáÖoÖ7¯D¸HY‰h±Þ-8%X€ ã±X¬·‹_¼‡bjôÊ—RxüË•¯”ôÞØe[KÚªôÙû¦Þ Ž|ås¯ÌÚÖ.»CÖY‘m“­Dâ[»ìtGWE²Ü+:'¥/tüŒ‡3bïu¥õëú{0Ô眥ahÏ:½e¸ñêA‰‘• &S–„ÜŠ}½òCš·­ê¸z½âžoÉݩʻ¢®Þap?ܲÿœ{ò‹•/"¡Œ®ïà2<ó˜µFbi-ÀÃFiÐ^ÙZNÖ-ï,õÓSËP<‚Ï»Õ÷Ë÷\ªj §ìƼ±T‰·¼¿Üîép•5¬ñŸ±`þ Jþe6HŠ”qžXÉ5„Ëz•„DÀBƒ¬‘Ÿßê.+ÊÖÙ1sqÌ™Œ¸;sÔÝ¡&è)SoW7@¨ÐP´–"”¥^N¸Þ‡SÛY*Ïʲµûݬ’ XÈÈ ó[.¬¡Â†lJS(C! ª>?Ô¨J}hW(Ô—lÐí B&hïBÅ^[ûƒ ~ùd9Ç'¤ò¯ºà"i‰nAÎÙÔ.äd–a 7®mØÍØÍòîiF¯¸H»Mâ®W‰ô­çâ^`¥LB3-Ìô¦è?õ¦„‹™ø3È/€ãjcT¢œg¡\Ê4!ˆƒ6»º,ëQ½VN·Äú1´t4—™ý‡Î2M&M˜TéÔTã6xI aj$ÄLñ Y*ò›ú¢·Wð¦bD½™t­MH(/o´ „ ŒvÈaE åEàÏÊX‰<Û×ÌìfȢîhT[6Fò@”ÅÔÊQ¼ W%Ž<é{)5ÄØ¹49ÕbãMû&™J /ï̳ÊJSÁ± kôÖŠìšúøìžüÔ4ÚUEófñmÕ»kU©ï÷w¶\•k/­º IaÝ»@ƒ¦ÒrȨÚX ´› ô¶=¿²B­¦ãÃÀ.=èþØ„0m›n< (¯ïÞ÷§ªèb!ÍËê1_ŽæÓ§^ôž“šïûiKøFØà„TÞ/År<².7ýXœÃ.d/ÝòÓ:Ú›=àòŽj6¹ó\”åÄŸvqjõîTŽÇ7ôüЂ'“ŒI¤|4ñõSYŸ4£¨Ú´Q˜6Ÿ>° ‰k¢ñús¾HöÓ1oü…r¹…èòξr¹ucßåöi¶¨¿“*mŒúïû}á,ûo|¾°å?LFÕæ™ª Œbƒª½rpåsýÂgú‹mw¸GÿŒÔh2WÐØép+ÈËãq€ìó/dödBß…¯pAþ(xóíúæoFöÞ endstream endobj 15 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/tmp/Rtmp3Y0EVc/Rbuild26e625695619d8/gridSVG/vignettes/extensibility-simplegrob.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 19 0 R /BBox [0 0 144 36] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 20 0 R>> /ExtGState << >>/ColorSpace << /sRGB 21 0 R >>>> /Length 147 /Filter /FlateDecode >> stream xœ}½ Â@„û{Š)s…›Ý=ƒ?e@…t‘ëÄ"ÄSлÂÇ÷b,¬„Ùa–o ¦ÍW{SÆã¡F 3ã×c?šr¯ùß_!Jßb¶9ëŠT JÎÁßq*R°pŒâ•p cxZHN] tÉžá³óŸÝÿ`q¤kTÄÕÄ-”Õ-8k“›m/-ü0±Zó>Ä-’ endstream endobj 23 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 27 0 obj << /Length 1704 /Filter /FlateDecode >> stream xÚ•XßoÛ6~Ï_a}±šŠ–Únö2Ôè˶Õflb¶”JJã`Øÿ¾;)ɮҦ Qäéx¼ûî»cø"‡_¾B1£íÂØœååbs¼úxÅY?š$&cZŒƉ—obñª¹ú~ÓÒ*)]Z^_½|#ô¢d¥f±¾YpQ2“Ë2^ˆÅz»ø3{ãww­[®¤”™ø~¹RJg?ÑkÝô4èüñödTV»{šÜµÍmU×ѰßW=ÉmÛj)lvŸÜ)*ƒÏyæû=½UôM ÜÜÕ[_ïΦPɉ-ÿ^ÿöò“Ó¬³9]q¦áäá0ßî\•E¶w~·ï¯ÑÆ_Ãð¯\çýþòåJ ’ø¸«}XZòL¼ ©gÇã3”{{‚wWœ³Rë‹ êêè®o«®wøùé9¾'­ÛôÏâKç@õíõ3t†ýçÕ #T¶[·.(ÜìýaÛºúz÷»ï¢ñQc»#ëà>¸½>=ßÝÆ¥`Ùò…Pò?rè<@RXfeÆzï¢×ùDHäL dƒ ùþ•ë+èÐÆ´é…â‚3QÚôÍÑõû&ÄvKö"Õ®ò5çFݵSøÍb ä¬$Ÿþ#qbûÐ@NnK(ÄÕVô¼¹«7½oêÅèFÆXŠÊþýb¼Z¿e¸~þ¡‰;]_ ÷ƒð*feEYB‚ÍEZž<<2£_½€ò(sônªÃGö‘ Њýæ°—ªœ;ìs¿ß,d*½mZWõ®#cªà´•ÀÔâÜw»õÒÊ ÒäE$Ÿ¦F1u¤•He䜪Þ>Ê3˜­U½;B5Êž1˜ÊšC`>‹½s\ô8(}ËÇ„[É¢Ìîdf †…ÃÑ|¿'£ ›Ué ãRG#wª"Y£¦ŽÄ#-ãL|Žþ.Êà/x kº6ÎFÑíƒ3`îý1妴 ®˜TFÄã),FŠä^ŸàT’g˜Š-Ö€ÞÃ(ÈÁxPu1&!¦Ruɾ‰PÓ}Ì~÷QõËŒ»WQpe0ç%‰¿½‰¦—ÓB $'Çñ[Tjg•JË„øðŸº c9Ð2›Ÿ‡ ßI&&ÒAa9XÓ²Ò÷>ä')¥)w`5°<ØÄdˆƒeƨ󸹃;:‚ì*J`]_Íq‹aBÛ©7ÖÍ»÷¿|!ñui›>`ÐR@Ô¸q“ÞmpÏ}í?ÞÅ©› Z>"Ð.ƒÂ Sú‰Q)˜4õL=/ÊÐsàVkøNŽ'Ê1`{Yœ{êÓR›¬j½‹L°uäx7a‘¦¦çž@‚›Sñ”Z£ØeÅJMû&ß%r‘ Ú:¥Ô@Øæ"…Ú>2¦ÜÕc‹ãá<3|£™¶åW ¼•ƒën[\7¯Ü§/„Û@yÏÇÀ¸Úµ~ƒ–äCu¥7b£Ål‡'ä¸Ú¸“H… ­ÍT$ù0¿¼DÔ£ä|OÊmÁ¸Ôߘg67Ÿs•èF)(©&¨Y~~ÖŠ²¯K o ä!Më8…}u7g;Ÿ6ÔO¥1I“Ò¿ê±Är›½ÁîxB¤6ð^Tl" =šñF,> /ExtGState << >>/ColorSpace << /sRGB 31 0 R >>>> /Length 143 /Filter /FlateDecode >> stream xœm± Â@DûýŠ)µÙì&¹‹iT(Ä»N¬Eô ßÃ(XXÌÀÎ owê“OYÜ­ ‘„E¿‡e«<íý šó§˜lºmÅE-ØÖðWÌΗ9| å—Ûº?\×nSZ> stream xœ–wTSهϽ7½P’Š”ÐkhRH ½H‘.*1 JÀ"6DTpDQ‘¦2(à€£C‘±"Š…Q±ëDÔqp–Id­ß¼yïÍ›ß÷~kŸ½ÏÝgï}ÖºüƒÂLX € ¡Xáçň‹g` ðlàp³³BøF™|ØŒl™ø½º ùû*Ó?ŒÁÿŸ”¹Y"1P˜ŒçòøÙ\É8=Wœ%·Oɘ¶4MÎ0JÎ"Y‚2V“sò,[|ö™e9ó2„<ËsÎâeðäÜ'ã9¾Œ‘`çø¹2¾&cƒtI†@Æoä±|N6(’Ü.æsSdl-c’(2‚-ãyàHÉ_ðÒ/XÌÏËÅÎÌZ.$§ˆ&\S†“‹áÏÏMç‹ÅÌ07#â1Ø™YárfÏüYym²";Ø8980m-m¾(Ô]ü›’÷v–^„îDøÃöW~™ °¦eµÙú‡mi]ëP»ý‡Í`/в¾u}qº|^RÄâ,g+«ÜÜ\KŸk)/èïúŸC_|ÏR¾Ýïåaxó“8’t1C^7nfz¦DÄÈÎâpù 柇øþuü$¾ˆ/”ED˦L L–µ[Ȉ™B†@øŸšøÃþ¤Ù¹–‰ÚøЖX¥!@~(* {d+Ðï} ÆGù͋љ˜ûÏ‚þ}W¸LþÈ$ŽcGD2¸QÎìšüZ4 E@ê@èÀ¶À¸àA(ˆq`1à‚D €µ ”‚­`'¨u 4ƒ6ptcà48.Ë`ÜR0ž€)ð Ì@„…ÈR‡t CȲ…XäCP”%CBH@ë R¨ª†ê¡fè[è(tº C· Qhúz#0 ¦ÁZ°l³`O8Ž„ÁÉð28.‚·À•p|î„O×àX ?§€:¢‹0ÂFB‘x$ !«¤i@Ú¤¹ŠH‘§È[EE1PL” Ê…⢖¡V¡6£ªQP¨>ÔUÔ(j õMFk¢ÍÑÎèt,:‹.FW ›Ðè³èô8úƒ¡cŒ1ŽL&³³³ÓŽ9…ÆŒa¦±X¬:ÖëŠ År°bl1¶ {{{;Ž}ƒ#âtp¶8_\¡8áú"ãEy‹.,ÖXœ¾øøÅ%œ%Gщ1‰-‰ï9¡œÎôÒ€¥µK§¸lî.îžoo’ïÊ/çO$¹&•'=JvMÞž<™âžR‘òTÀT ž§ú§Ö¥¾N MÛŸö)=&½=—‘˜qTH¦ û2µ3ó2‡³Ì³Š³¤Ëœ—í\6% 5eCÙ‹²»Å4ÙÏÔ€ÄD²^2šã–S“ó&7:÷Hžrž0o`¹ÙòMË'ò}ó¿^ZÁ]Ñ[ [°¶`t¥çÊúUЪ¥«zWë¯.Z=¾Æo͵„µik(´.,/|¹.f]O‘VÑš¢±õ~ë[‹ŠEÅ76¸l¨ÛˆÚ(Ø8¸iMKx%K­K+Jßoæn¾ø•ÍW•_}Ú’´e°Ì¡lÏVÌVáÖëÛÜ·(W.Ï/Û²½scGÉŽ—;—ì¼PaWQ·‹°K²KZ\Ù]ePµµê}uJõHWM{­fí¦Ú×»y»¯ìñØÓV§UWZ÷n¯`ïÍz¿úΣ†Š}˜}9û6F7öÍúº¹I£©´éÃ~á~éˆ}ÍŽÍÍ-š-e­p«¤uò`ÂÁËßxÓÝÆl«o§·—‡$‡›øíõÃA‡{°Ž´}gø]mµ£¤ê\Þ9Õ•Ò%íŽë>x´·Ç¥§ã{Ëï÷Ó=Vs\åx٠‰¢ŸN柜>•uêééäÓc½Kz=s­/¼oðlÐÙóç|Ïé÷ì?yÞõü± ÎŽ^d]ìºäp©sÀ~ ãû:;‡‡º/;]îž7|âŠû•ÓW½¯ž»píÒÈü‘áëQ×oÞH¸!½É»ùèVú­ç·snÏÜYs}·äžÒ½Šûš÷~4ý±]ê =>ê=:ð`Áƒ;cܱ'?eÿô~¼è!ùaÅ„ÎDó#ÛGÇ&}'/?^øxüIÖ“™§Å?+ÿ\ûÌäÙw¿xü20;5þ\ôüÓ¯›_¨¿ØÿÒîeïtØôýW¯f^—¼Qsà-ëmÿ»˜w3¹ï±ï+?˜~èùôñî§ŒOŸ~÷„óû endstream endobj 36 0 obj << /Length 1518 /Filter /FlateDecode >> stream xÚ­Xß“›6~Ï_áá Oƒ@ü²¹9_&I{édÒ´“sÒ‡¶:± Tȇ“Nû·w…_.žÌÝB»úv÷ÛÕJÜ‹õûÚwgŠB7œ­73ìúh鸳…"ìF³u2ûüš[˜%g»uñ#½C‚íè›)/n•èÒRÏÍ>+ò?À9~U.F‹(jõ:Šæ@ᔩôགD£ÎÕ+l Ò &fæ–ï»æ¯y»hW6 $—Ë„Zµ¡DìùYl‰P3b²`eÊeW±,™{há¶DÎn÷‚V ó–ç`»}À±“!>š2!àý̹wÍ莪peh!Ô2¤³ ÆÍ+v›AåAææzna³Ù(Ò-饢޿4QSšj©“}EGޏrëu\õÛˉJ‚:ÂȱsÜã^¶ ‚Q-ƒ£íâ`!š™DØÄݬÐJ9ÙéQCx_$èA£ª;´Äô3æP2TÃnx±;¢Lì*mÎó”9Ï?AS,;–À“Ƈûì@éá Kps„æG 4jaØÇxØF.Ÿv™Úíw”WÀêÊÀ@r 5Kó¸HXž®Œ÷ëkki<»„jèJàòjel…(æÂ¶ëºFµ‡ žÚ®ã8¶ì=Õ‹CÆòO ªÖ à(ŠìFA/©h&b»2Ç/zvKYºù;FkÐ}QV†£¦ô´ºÑ ]‹ŒaCň¡CA9¼„Cƒ$D~©ÜH,ÈAT‚Döñ§Œä "1Ê¿€¢ý_Iö™ýΖÝz«ýµTÁ^¤°á8WG¸¬¤•¡ŒqúР¥(·ØÊp׳ø”*ö.ࢷ¯¦ê´³Jxº‡ž!úFåßÖ"Éö0çBÿP€ÏÁ¥‡úñË¢àI5ÄÏ‹œžø ´,(ß)L™Œéjþ:ìë›ïã$§#Ïî90%§v"ƒC’ä¥L䨫ëçon~:å Ì ÁÖïÞßÃz ó[±Ë~çOÊ¿“wp^ýFÄvì]©&ÏÌÙß{úÆÕ×cV´$÷69Ü×`~†ÎBJeT÷Á..ÎBS$=g :Z›`»m 'l*0ÁI^m ¾[0„šWœ´ò¦à<íºwûM˜Üïiû‰báF½è¡îªtY2쥾¹ï†¶I(|Á‹Or»¦·Êø‘´¾[ ©¶„sòyb­¾Ô¬9º´´lSäªØ€Æîqt…µ!;–ÔÏ4»£‚ÅD‡ö¾>2=¾æò#Þ[zæ »•'Es=’ï=ÑÛæ»¯Ž½F+T0cU”³Ž«(IÌø€‡±À‰LcRÅ>O†$HÙÇ‚å}¡^(]µvLPž1x¬3Ä=Ú“™Ót@.ާO\­Î}©›C­lÀªøœ5¹ôª :]"}øð©¢6ÿÃr=Ö*|1jjat¿^ºzø6£¨Š!d(xãÞf9±¦àÛ ©nºÍeæHïçæBÖ¾õLKíÖ, -’Ç[yqâ+cÇ’¤óIí ÉíBX1È*~(?¢*I>p–7¾HjAÀ±|äyF/š+!k® Pߢ䧋|%âÒn0¦[ÑWìº=»xÜåÀ® º'n]£Ödȶävª‹v é·KÃIi4½vüë/‘ïGòÿ0§‘|©øä§õ“ÿ",Ô endstream endobj 39 0 obj << /Length 1642 /Filter /FlateDecode >> stream xÚ­XÝoÛ6ï_aèIÆjZõ$-Ú®)PlÃиíúÖ¢mµ²äéÃv7lûîx”"+J–’"÷ùãÝ1/Oæ×ŸÄ,Ü`²XM¸ðÌB'`Ü'‹dò›}9_?›þ¾x;™q‡y~#g±ï·»Õžöç×®ßcåLfnÄü–îE^ÔUNgnèÛ+%ë¦TôQ¬h„mbs¢Q±‡ÀMs©Ó­Z—ÅçOŽïÀ/‘ëûÌ-ýªÉ—uZä$!­ZI²6+f¬T]=¤çÔèØ®w#‚„ǦUVÔwí£‰:ÖäP7rXà‡§Eû¦3áÇöª,¶0 œ{´ ¼¾Äq¥<ðF|ª2D¥PÄ8c/bÜï|êjîr÷|æq¯%DµýÀþ¢–5ƒ™+ìÅ]ŽrôrÓíœÙEYË)·ó©ÚµQ¥ ’­ü: E«â„Ðr6RD–9žù†xPî6éRf´·“¥ÜªÁ‡Ÿë:Í×Ñ"6puÜ®ã2!øã\ø¡Dp#[uììU‰Q§,hM•Ù7ƒ/dqäŒ+H „¯O—ñ°óøÍ´úÍXÜáê‰̘&&$ÀE’™pÓF„›ËþõõÁð*iÈ5vð²@3Eóe&«êžÛï3?Šˆíb£ÃÚU‘5t!ñk5EI4ïyŠ$ÃJDåê@ß$MOMèawYB6QUïDh¯Sðt ìA.',6í¤”è·C'Ó ÍRm ªßÅ^²4ðûÓL–ô¡Q‹£¶vÉ;87Öâuˆû#*e€‘+ÂÃ-‡C™Ö會¢3ÏëRЮL·‹âGµ œ ¯ \M¡]œêäó0dŸÆÃã!äñˆ¼íý§0Ñín‘ˆõ$ýä¡J•£Ë—ŠV?Ôµ«‰-FOÖ:9à¬Õ xÐBµ)šÌÌ)¼tXŽÇÄZ¡ï„°Ñ¥¤Zƒß Ñ&<û À¡Aݪš¶$ U-óD– }õ“B?§uºoS’¦Ðˆ³N›Òe@Ú\£2èC7òÓ˜ä¶(0®scƒÜ]YVÜ—–&@†¢ƒ6~Húa„¿E wîIa[„ÛeóÏÅQ%mæ0˜¶t:Ø€[é4N‰*™ gNð¥A‡zްÁkY5VOsÃðŽ C×tñŠhþ-<zÑ×….µLs‚œ# VñÈso™v<´h+OÚÇcfž…â¢ÉJ%.6ëÌ`Ïk¼€°œ–îs÷ñÿºÈpÂëŠK‘wÈ6@îœÐ&z·wxæ‚)!?mÇžaöo…3 `• ¡÷.g4¶=êw|Jk‰V—ã‡gÿ5v+—®wjÞIäÈaÀoœRüý@‹éÝ™ü’ܨk’Ê4Y7Þ<Œ½(öï¶žˆáªfÍò{—}¬U®J„ÕXÅvYüwŲ˜ßƸ©wMMÌ© ÄÙX]Bh<u½áö,ðbãß`¤k»‹ž nÐ ÃN®Uß“ÃàõÉ¡ê4êGPw1²°íপRR‚‡uOèŽ'qáó˜ ùá0"xßt7 —ê”ÎßæBšZg’: ¤SÝOžøôòùq›‘é{UV€µ+‹ƒÍ̱hUåË3Ï•õ~q=‹¬çÏÆ¼w ~!z`—WWÖ¦®wÀæb>?ì XQ®ç®ã8ød³z¤Ç,Í¿)9=Àã8žksäê<±¹²|ÇÛÍêF¥ëM}º¶O¡uàöËâxe9´d ê&VÏtìÑzÆ-²qôÉ %P&=Öpp–µ½f²Y~Í C3¹dùŸ@8ÿg'›lþnŽP ÍǤ™ûq¹&¶æŽcµÅ¬—ÛâÊ2 ¬aøX8ó-"ÄæòÊ‚—„˜9ð)ðÖÏǃÙJ•åºÙª¼î Å¿­D™5¸RÔý‚B|kè¡UeR Eäê|Ž?CíÅG×OŒÇ¹lßÞ|%K5Ð,t‡l‚G°Ù•j•O9£ŽL’WÈ¡V×/~ºy}Ã4O`å”ÙâÝû³xmêmöšä*¿“vM¥~…Ž}`ì~G‹ç0ÌÓ?õ Ì«{m¾ó’žW1IµÏV Ÿ¼^<ùi9 endstream endobj 42 0 obj << /Length 2201 /Filter /FlateDecode >> stream xÚÛnÛ8ö½_øIjF¤$Jê6ºØé\0,Ð`^vö‘h›SY2$:—ÙŸßsxHÉr”4ˆHžÃs¿ÑýçÍ»«/)¿(Y)…¼¸Ù\ð4c9/.òX2.Ê‹›úâ?ÑÇmoêánûaÐÕ+Ûõ—ëL¤Q«öúzejç+<Ê¢;Õጭ®>]þ÷æ—‹øbÍ9+³ì5”¶ÿVv÷”؇‹ÚÝá{äÖ¬Ox“ÀÍ_©L_5š¨ y46Å,ÕhÙs‚Cíy«çòœe<Ü™–&`¸ÊÁi´ëÚ°RÖR’ìPã18X¾Îi3~s§%Bøjì h1XHÕ×^Š^vÆÇ•¾y‘?IР”ÎÖ0ÑÐ肯Ð$Nàýiša`pW²Ái°rƒ žß›Æß÷µ"‡ZAN6ÄQ´§âŽ4j¹ÃÚg¡&dÌd‘¿rØÈYR”§•)[7$и@A€n/XœŸÕËn³Ø~†N‰(5®¹OJTn ÄÏ`ö÷&ã„Cš#ÔkŽKÌ{Þ’Ñ<µÛFŸ‚ .ûÐv1̳„¤ÑA,›HƒÃó.|ßœÒ,Fùj$Œ(ÙJ$gYZ.$±p¾O³xä+4Ñ!‡pør e0\Ðø®Ü#lˆŠæ¥ï…ÝtnàG`RµL/ÏžtcÍðý#NRÂØ]ñhÑé }"-™Ì‹E# J™<Ó• •eb4¡5{íL´À&eédkB ]Í¡ý¸hÆë¡gøvt¸Ì-$Cúdîþ~É…äLD²¬wÅ¿ÂûÞøoÓ†u.(ÜŠgôK®|(üàé€;í‰Q“_h€0‹ÇüM>+¦@ïZ "˜!ŠÎæ _Ìyæ’ÚõiX[õͧ]Âá=YÃ*CI Ç ¹æÈ;§Ì`}Ìž·ƒÍY¼i<±X4?ò¤žÀ3oY\¡eš|¡?âôçrÁ×DÏŒ³(ƒiáR©Æ´t¡†ŸÚn¥i1UË0ª†ƒ" ßå€Ä÷ŽÌ³×d„t9œQ>øŸ7äM.Y‘§óæ¾GK¢MeÅq?vè¾w%åt¯zÄ{”ŽîªRÁÇge<ò.¡&`wd¨É`u×ê`o//L´ž,¬ÒKõ{¯ÚVû§ N7ÿ 'o¹=tßaöTjMÐu[ôˆ.opÈ÷3h’úî8£=psòö® Ñ´_j›#>åÆÇxRœýf’¬ÁIöOô³’lFŽAœãðqí9ô2šïÁÿšÉ ÿsFÿ[ˆ.K¯÷+MQÄQ"â»nÞýw³6 endstream endobj 45 0 obj << /Length 1673 /Filter /FlateDecode >> stream xÚ­WmoÛ6þÞ_ah&c-RRdgqжh:m14nûaÛF¢e¶z›HÇNí·ïø"[r”45б|÷ð¹Þ©ç‹'“ËŒfhvJNG‹å“M}2ŠýS„Él´HGº¿Ž=rJBWfc/"‘{î™oÉ –5Õõ_~äoáÿ½x=òGÆhE‡‹¦%/¨äUyŤèSm•rŒÝŽþa.°»®ŸÝGá¢KyÚ§4¾1ŠÌN Bè¨â_¥›\’¨“B@’ÂxjŸ¸\½0\¹âÂàCÜÁ‡1ÂaË4¼ãGkû€?Â(ˆ§-¾`rUA S75Vxi¾ëœ&  £XfF¸¬ò¼xÃË̈’±‡]Å»©F…nÚPAœ&~€‚hçu[ îzÑîå ^tê~f‰{2R¦æ|-[‘N…òO ·`QµXª%áN³áynž çÍâbF’³¥ôdå5<[)]k9i*! N”¶4Œ•ÈFNîßÞ SYÃST²MM³ÞÞ–[iÞ˜z»¯ÊºèNa8Ð(2sl•n牢 ­ÚXÑ=‚rQ]}|¥ùlï ^Ô9Kr*7™sOd`9Ó `Ö$ðˆgm}\}T 5@F š}Üâ[ÊLÕcl÷—ÄS:Ggà§®ˆ’5Ôà–MU½î1- +Y±X™Ú/ âZÛb¶!ìúª=ôCš`G^ˆ!ýÔîÆ@ qWT˜k‡YyÃlËa·Iu,©Qp à …-žÎâGdÔGq¸Ë|µ–õZbµ×\þbÝ¢‰\+ëÉÕC~kå@ÃcßGát7vÎm9.ZŠeÕC­Ob‚pö[€å¬€\´ º°‘+Öì:z×ýƒ^p<Ň^ W1 Zä£à³µÈ¶v¨&TͣˎBÝ+ýó§Û"7 uÃ[?w0¤A‹j)+“*…Q;w>,.½©óôb¨'Ï¡Ùl/y)æÎJÊhÎ&“Ífƒ6ªšlB|ߟ¨¶ì@϶9/¿Ô¬é/À³Ùl¢vÉFuy*Ws'òÃzk¥+óPöe7œmû¼ÚÎ߈ì vN't@ëèvLŒê%:˜úçpZÑ”JÚ Aµ4L#ˆ¬„T"ºN¾äp4 š ò+'ÿÕtOÞOÔƒñ5yÈZfhÏ2¦§…Úqu5(iÁæŽ%p·Å^ä :ÕæñIàùð™(ÎàÑO†7³µJ›l 5'»FÕÿÖ"Í× QÜ™»ªxÔpŸ>‚›m몑/ªªIEßFY•ìo ã[Z×PÂCœjCŽ¥}}õcœlØg19†¦nØ’oûLÇìMÓj#½º|öæêå1Žñ2IŸlñþÃQ\+YäŸØOÖü ïÖ‚ýãû Ø›Ú!,ù?köžÅ÷Ç,XMï4:Ü@Þ'CßÚÚA¦LEu—ììì(¿L’¢ó§Ú¤¢÷Ø´ïfíÁú'» ®oxú‡Hh®µØj=s…ÄîƒÖ`yÚŸ§p¼Â=¼†_6ÕÕ®Ùµñþ”‹7j/¥bE›†Þ¬õÀ— ×ÇÜp"«[V¥ôÿ Ô˜ìeê†ì-iÁs úå7Lò„ÚО5œæöù²aêJyÙ²’7üZú§~wTïxàëµØkì  ñkøÒÆUÕ4á|ÀýXàTf ­!ÕÞ| ËwÔŸ+^Z}W©¼õ .Y“søf¿¿vorO«¶c¯ð»¹Û˜ã_aK(š÷+os=›µ¢S³ƒB8¼Ú—puù8[Áh;?É ©Ûa§R6üz-Ù;0¬ÛaW°!oëVª ׿óše*+~; j“·U H•2ÚXXºn þÞk†«9!ù-ˆšž°µEƒ›K~£Oýîlåð‹Q8V».å~#M…/á5ñ+»wšìÛCEÿÈNê$*<èã}C¶æàén#íåûŒ"‘¨ýÈÛà;ÖïÑ›«µyGÝÝ­¾­¶¿:¦º5 -“•ºUÂN™ÄÎPŠ^­?ì ¨iyÇ5;”bW¬)ðx! §ÍE]èÚû¥z5µ}>ÑÃúFIÇ(Ž™öŒêË(`î£=£ý££­Ç‰òùÁ³%z•Âà‡Ãk\@@fÉb|òrñä­ïˆ@ endstream endobj 49 0 obj << /Length 1770 /Filter /FlateDecode >> stream xÚµXQoÛ6~ï¯0´<(Ẍ¤DIEœ¢–{\ݾ¬{eÚÖ*K†DÇ.†ý÷Ýñ([r”6ݰ‡ÀÔñx¼ûîãñ˜wóW·!Ÿ¤,UBMæ« WŠ)Mâ@1.ÒÉ|9ùÝ¿»]ß_ÿ1ÿu2å £~9K£ht6ýæl·V½ÌrûHó·"êyL¦"a*IHïá:‘~Ý\Oe˜úf£a~žµnT¯h*£ÏJh°žãÂFkšÎˬmop*+EµnI-kœŒôʘ҉¶u7™×Û]Yä™ÑKv= Sé¿]gEucà †®Eâ㺠oô’F¦Æ_åšÂ¸É¬Ó9 Ã\‚Å ÈhV[ØýsðÇG`‹ƹêô·Úl`Gðd‰Asá/öÆy²)Zòeµ¯rSÔÉóÌ °.ö‡N. Ck,&”ÔH°$ЇÁ÷€BýÈ8òloÈaã†Û ±ú:ФŠ×ùùEµª›¾€à½Ý®ü:G`pfÀH–²£Œ0>CZ6u©]ú¨†1 D/ ËäyÊ"0;È”uí<ÇÐM»1yÞý¹o l 8•#@›¢\6Ú­G¾T0ÌÃd”8äQ¬ Ú”ñî(ž—¾>f$my‘8¸@œ;¾¸O—޲FðLñæ>2¬tKŸ@˜âÆ’ñ$ü1â&ÑqɹZGŸn§f»Õ‹ZõÒè£Ùh*RÎBqAX¬ x¦¹òçödˆ0ñóFƒÓî)Æý‚bU ¡à¥2Õ¤§ 2ÜŸÖ4õÂMuú:tÈê=d•ûKg!ó¹!\zòk,ò Bƒþ~÷¶#ßmÚÒ8qBëâT…>HìrIç7t§Jv§*ÔUT­:Å¥C’²8V?D‡ IO.¶Dj)á ru‘»¬,­ŸQêÛ"¼!2ãFµ›Ù›ÝÞÉÆ+$Kä •;çãý¸sJžœÓ¥Þjb™'®FÝ=¥ßMt‘¤gônFŠ ‡{/Dg~WîÇr(€ÄáÙ‡ŒJ„ƒI„LA½ÂÔÕ`“ŒmÁ_ëc(U?£(Gà/¸¹æ>؆B=¿ƒ.”LˆøIí{†~±`R$£ôÃ-í ,…J¯œ›cI› Ù²;h9^D/™œ >1HJâ‹ ;¾<Ý [ŠÒ¤·I&-mA<=OÙ³_0Ž]¢ðÓv6²;z°l éèrÅœƒ¢ ÖÞ$P®Šiûûëi$ºU³E,Ù"…3wSúíÚDïxC2Ƙ>Bÿ¯ÁEê ÿÊ•‚ÉÅ…5Ú6±æºl\V­óê«‘Ö3úÇ«ñ÷œÉæ"œo,û‰4iM68Èé*ô*`Žl´æÛÑQ]ïã³Öæ=”øž{¡ï- CMjÌàUöZ‘¯²…š~9^ cž0鹨PÓ{™Áÿ)64ý¢ØPãïï¿Næ¶ ƒzµªKl•bÿ@w9ˆz ~n³/öe€]…’¾í‡Qn:%]_n5û= lƒh‹¢#%êg#%J@å‰Dzn‡žï†Â”©ó½Üu‚wÝ\&AÀD ¡Á°Á6UªÐ–O‡O½‰`]ž·(–ìû:VpŸjg4܆šÒÚlÜ®–yÁ°mÈYc_QO…":{8ÚÚfö±{ ¤Ô+35õÔ=ið–jxæšb½éîør7uÛÒ˜*3 Zhu*'¬TC“¸¤±ƒ*åãPñT­þÃXA;ÇùV}çNo nô.Í®sìutBA3ÚÂÛ„ºÿ¬!Y¶2Ú 9ýœbƒ1zXW¹]6œÎ ö ΞKZ鸌Àh“ 2Ëû9rêöfÆßÓÁ¾Äfw9¿OnNÊ¢8vo^œiwaÚÀã|—­9¸Ü¬¯¾l²š—h÷ìAD ã¹Òtœå(d²+U1šûO&‹¶Xea¾’mÏ JÝÍ{İÊè›gÊb,ñí¢×E5ãnårߨ:<ƒwœ«õö¢žÍûøËsYÏçyýáÓ{ë8Nl«Ú´¾PémÖ>®½gø?VŒ1ïn÷¥Á`×@ÇÞ{0r‹Ò‡OH´÷ãm6þw£k{cØÀ>”à·µD§'rE¢á»™µ®‰dRña—v÷æ¸-]ªtÓ"ž4äÑJu•×XÓfÞÇùÃ4ñÞÜázh9m˪ycv`æõííáp`Éêf}+‚ À¿y=Õ×Dz¨¾€*­.àišÞZ·ä€™ZšÍÌ0wG'Ýh8•f({,ôtßÕÇ™Èý€ÖiàõBm=ãÞXsÍU ðEøœgI_‚Н~™¿ú±£j= endstream endobj 53 0 obj << /Length 1592 /Filter /FlateDecode >> stream xÚ­X[oÛ6~ï¯0¼˜h‘ºØJ›]Ñv(Úbh¼îaÛ-Ñ[YÒ(ÚŽû°ß¾sDʶÅiŒ"ADñ~çÊT~?›¼ è(&qÄ¢Ñ|9¢~H`4õ"BY<š§£¿œ+¡yÊ5¿rC:w«¢l®³+ê(™6›ìfœk]_O&Ûí–4škÂ×Éׂ—)á )¿â俚¯‹É§IKn?¿Œ¹úgþnD=„³‘K)‰ÃÐZË ìu&J¡¸®š œ’¯ÄÍØŒ+¡Y•7cJ¦n86ŠZ¢"ó˜ïzðUê_ïŒ'Æ´÷€U®²õJ”úØ(þí,òb 3¼”«²Ò\Õ…H ‘7 õ§ðÑwÀ‹»ºRúUU©´é›)«R\â°AüÀëZ–Ù&ÖäRØw·?ÆI%N<›²K`j%–ò®tIxš¾* Š§^½yùþöõ%ŽÉ2…™>ØüÓaåzUü© žBý ïÖøëü$ØMm&/,å¿kñÆÍÓcnDÍïíu™˜ïƒ‘ÇJ;ˆ”aT÷Á®¯/òË$éœ;Hl“ŽG°iÀ´âe³¬Ôêf CبeSp-þöBÏûÙ¨„^¯Ô¼4 /Z)µR—¶Bêœ%Y£+Ó>¥ÎREG_«ê+n×la|€4`õØMy“s¥øn`­ ¾leªó›±G¦¡•-«R»üДæ@W»K¾’@ý&ŠÐ2á6´—JòÂŽß(ºâ²egÞËp ˜÷#ÑG¹åź9Hì«ÐÀŒÛ%—6®ªæ‰ÔàíÇRÈR$¼†|Të2Å,ß©diåÇBôÖ]I-T!áÈ^íÁäËqxÇ¹Û ™åúuKh^ô«wEËÍ­à¨â“FÀ“ ÚËíà>úy©ÞŒZh҅ϵVr±Öí‡= ¹ Z€cVe!2 œvû3ùP¥ YÁ3²#¯t­°h)‹Zˆç ›ËèÓÊ•¨‡r]êCAL§.ñ"Ä7ñ1<  Dù@œ˜Ü»~xÞpx\ŠÖ†w/8ødúÜBâÛ;– @‡Ù†5ïØÂ ¶ñ§ÅݽàÚÐÕqÏ6VCïênX[ö;£·!=zH û™…ì¹|éœJS©å¦½ÔOÄ¡èhÿ‘åR¤·¶‡¿ »„Ù§.Á-»OsŸÂü 1[ºa ²=î)`O“O¶ß:MÚÃà¾g¨·æÌt;í¶9PÏ®ÝÝ[ßÚ:ó0Dæçe’WÐ+ØÐ{ßL 8RúœGϱ—nj^ö]Ážé¼Aé¾*)€Äï^1¦öÌå‹I«y|vŸš`8g÷ìéÒèDz¾‹[¢z¬5Qét©G$³ á¾ íë,²Ù·-HCâu+rsÒƒwåEÞÝ7Ø#Ÿ'ä&¾(s î•OÞø³xïï\Ht{,`Fñ-W¥lrøVºrý(r8>¦N)¶f©ja$ ~!D}6 ‹!aö‹yž £Ôû¶fñ¼t[¼v‘ÌXÆ]Ð^Úî#O#âARì¢åºL̇Í"§VÕ›:™ŠÆÌpóØ^±ŒA¶3K¼Áâ®ýªÕ:º²kÒÔ d‰Ëà~ÂÁÆFê£õ{]–w䡃‹Qد F7 c$ðYM“À'>0‹|g¶ÑZdX£5G$r¹k‹‚“˜#[Ëø1ö ªà¾áM¢d­lû1 ã½msF`±AÓ¢Äpµ™Êy \Õ&*mò`T+ãÜpM®ZÈ©–FACÝM±­2âGA¿7?Tp}uýsÌ¿9Šbw5óH†…‡zãhUhvÛ ”†3°Ùq{ î qxPªÁÆ ãsaRo}3í)Róº•:·ž¨…„óEí*âÒ#Œùý€o?£ço‡\¢dN;—ö÷¯Æ¦ÏŠ]Úu×{ùµ­ÙÐ&£dø½Mf¯Jç6™O˜·w‹àG˜í|p#ž†OßÄaH»EierÜ;²}¶—3ž`ææÝ4(dÇô„ JèH×f‡JéÈõ§„QKg1Šž½ž?û«†qC endstream endobj 56 0 obj << /Length 1874 /Filter /FlateDecode >> stream xÚ­XmoÛ6þÞ_a&c1MRïAÒ"-šÅ6 Û}X÷±‹ˆ,y’;¶ß¾#R$GiSc@ZQ$u¼—çž;úÍâÅü’“„$!'‹› ã>‰)ŸD4$Œ'“E:ùÝ]‹F•ÅtÆ9w›Ÿ«ª¼&Ó™Ocw‘I»´ÙTå¦R¢‘Ó?æ—^Ò?ÁOcÑ„¢ì«ÏS»ïqã@NI´Û–úØØMíªÆgYä÷VYÈ NLõ«çî2Y LŸ Ì¡Œ·RW•JåÕç÷_h@áQcÆJ‚(™Ì#Ià—ZÏ Ü¥Ès™jøÖžç»Ëj»œÎ˜«Ä”¹9îKt¢gà"Ð3reaå(»Ò´"Œ=j‰³7Û¿~lâ…Ig‘¨ Ug_±Ç ;œà» ŽÿfúƒÉÌcœøšÜT¢¨ode4özšâ‘ªXá‚*nʪ…ŒÙY>|1‚‡8!gÏÀ#qÐá&•wj)[Á¢A]”UnW©¦S¨Ü6cç2DIøísg‹|ëðĸŒÂ*àºõÕ… k•Û<Åñ5FÜFT¬U®DÕ.¨{¥~Ùtx¨ì'¢’cˆŽB£ïˆ@‰—tn\Ë&³–X•!xè˺E*ªÔJ{2Àö³hÜoàa·(ZUb`¹>”º@kÕÝT»¦£yÂÜk˜Y-J|Öw+ˆ¦©,K]5ÎíTn…]C$¾ÈýƼ–’LÓxÌ káÔ2u-kœ68zŒ:Œ¼6÷i´x‰ÂÎ5)úVZXeƒƒ[åÈÝá›@ŧĿ @êr{Ú˜m,¬û¼ñ„@pþwÁ!aì 8Ä¡A”…I·8rÅJº‚ÉM%›¦/,IQßãŠIzxêL„™…Ô×&ø®—ÞºŸ¡±ŒF$0ëM.u@aA¦¡ â—瘘Û0Õ« ú5•_¨çÆßð*ðѳªTá £¤!§ÕиãÈF­¥AÌ™BµôºLº@ö,2e•hŸwZsYÝ£Õš·v@*k½J@#Ó^¢n®n§ˆiý&Æ*@H âVQ(à^ùõˆÇÁHÀO§³À‹Ïà¨Fîa²x±µD'M%u¥ÕáI¸ ÞØ/ðn Ad8£ñ0ÈE"´Ì xKS™âëFWÃV'iNìä•>b$¼ïJèbÚý­:Xßqܪjõ ôÁQ]Úø†’ð°„ÚB<Èbó¤FºeçF ºö£­åÝ`«teË_ðDÙåahp÷¬²u„Òp«OknC&Z;Zï#à4ÿ¸rOl ù Ì$„ƒ „S·¿,ó :Á †^LGI/œÍðÙ6Vûœ#„ˆÀ‹ïþÝU÷ža?B¼BXlVCi-Qi-ÌËÇÃÇ/ûÎìËÙÛPØ,~U…—pâvsñ¤¨H9Øñy½ßívd瑲ZÍ9¥t®ýÚÛzºÏUq [ñ›á,I’¹Ù`?Ù)Ø™6Ù¹ÎÜìíl&Õ*k†sw ȹoÊý¹CqÊ>`W7pz¦ëê§­'ÌA¡#óƒƒŽì ¨U¤¢}LQ)X60î‡ Ûåm÷D"–¤ø 6Îÿ݈m>ÿ8ÇkÒûùØi®g+{j¼Ñ.º…XËsÇ pÃG¢YààFMàç§Ü›QøKp+óNᬟ³=UT«íZMÿPý{¢È·Z ä‹6wÀÄ6}Ž—R¸Â½-Ë*­‡Çe!—ø³ØlÅc2uLŽûáêÛJ†ÏÌ1ñcl…ÛæÚ%#îoñÞ?”uyñÓÕ»cª"…™¡°ÅÇOGÉÊšuþ[ñ”Õÿ¤µ_E“{·ÁÉ#¹-ÔŸ[ù Œë'm>ü]Ù‡ënè_SIGx3ÕõŻŋÿÏšö endstream endobj 60 0 obj << /Length 1827 /Filter /FlateDecode >> stream xÚkoë4ôûý#B"ÄóÎt;t‘ØEè !­Ü/À7ñRsÓ¤ŠÝÇ@üwα6i³­B›TÛçø¼_΋w³‡ˆÞä$O‚äfñtC£˜¤4»Iý„Ð ¿Y”7¿»ï«N”rWÝI¾aSmwëÅAä6lÍçŽ( œ;x»;VoáŒ8³ûÛ??ßø7¥$ãk(U¿2µº$vw÷¿¨í6o‘ó¨O¢8³DKt¶æŠ•L±xbªc|j»õÜå-uY3ÅÿðcßÿΠÄ~[j6²`µ†R õ¨R×1|F²œ1%t}üüÑ1*>‰ºž;MÛp«œT]û´ëª¥‘þÅ7`¯drźŽ=OÜõ@–½(Õjîø$-ì©m”'Åß@š§3ÀUÞ[‹HýÄëW¢`Vµ`µ]?tpù#XËž|KÎ@Dï _Ä—[y‚Ø;A‰'y'ž¬^í†B t¬K-^° Ø£Ý6%ZùüW+ QZo-ïj?@Ùß=±<‘EwœþÐv{.ª•š#náÂê‘aÕsÍç=`ùË *Ò{µmÖíVò²Ýƒ&_Bß#Hët˜ÖIJÂB0krßX”aæÇ$€|·í¶XM |’Óôj*:þúTË2DÙëjg×)µ‚8°‘«Ëð>†/Jªä%¦Dà°Ÿs‘Û/¤ík9«øAÜÃ)žÁi7`Ø=[Xz¬ËS·íæÎZ”åQ&“ð“Ù @¸1ŠÀ×”Ö\‚Ò-ŽAØ8mî{í"·â æ1/ ˜©÷3M`ºl¾Á40¥) ²ÓÀB,O~èù¹ÐðþýhÄÔ›Ôw†2¿ŠP½ÚªëïæWQ¾ íÞ¤XR ,Ä$÷Cƒ·Xñ[/ #ÚÖª½õ‚Ô-Íøºm¥2'ÌžH±ÞÔöÚvM»71lµ$†?6ž¾r¼÷lbo›;%â`+!¤+"÷Ÿ©dûDK¸<£vÔS“ë ûòí¯™RXn—cB ‘5pH%¹ RAÝ|x‘TTÎ0^‘jKuf‘ékˆñï•y¬‹i[×èQã[ÑTÉ܆7[¹:áHs¤VB*£ˆDhÌ/ÓÉ£ÜÚjeðY.K¬6ç%_·7¥ô<;E…Yî¶OæWér¤Kñ‡†¼ãMÁ ÈF¬2‹KÞ\kT­(bЦ;QnQÜíz£/ÃÌØàM%ÍÅž+³¡ïì!IƒãÌó넼m¬[Í8Æ>¦Ä ‰­).´vºu ‡‡ð °¢šý¥  LS÷ÃDyÂDQ~M}ˆrÇÑIÉviøa Ôe‡£ ·§ëjd!ñ!ìFƒ6ÖG‚ÿ¢N—nØZ³0‡†ÙNHœ‡$I‚¡­ÉÛ54M‰ŸeçÜv\öB0˘™41Ü­lE- ´âVv¦Mûl6àeû[Š/Šd\!0v"J¾z¡Ë®°x㯉XœÐMžŽÍÁœìZW›Îfܶ°$uVQ=Ûu–v o“¶ç'iê.P¥ž¿äE‹Á†kcn-U{E»ºÒÞ ‰‚¬··ä:‹‚ÐÝ¢³fæç”½6†C¨}Âl Ê ›ø€i~£¾Ë¡ \hƒ"P¶=ˆY¤u‹1¹C»jYÙÎcÒô:ýÊ0½O6¨ƒ«A–ÙLÛØV¹Ý &Œ "Œ«çú!Àºæ²úÓýÍÞðý†U|hös÷ ÑËŽíMó¸{àS_¦Ê±-çÕ—W2z2å„&Ñù›)¸â啼ùò ^}yô‚È'q˜ÿ=Ûïæ…±›~²¼¡tBa ¯wÏhmê« ‚TªSy{^x¡½-¸!ÍHž&JF™«§“ùÇO?^‹öñóGm&0~õ«5­2µž ŒíÎ `ztÇ [nkesqöžŒª”Äþ1~?c¾|œ P’ÅÇŒ*È  G–fjŽ%Å΃~&ÔÊØçÉ÷‡um¿«ñNB92DHÿÆ…¹£Å²=w~[> stream xÚ­WÝoÛ6ï_aøe20ÑõÔº6éVtÅÐxÝöF¢-¶é’tìôaûŽ¢d[¶â¦F#&yÇß}Ͽ̟MoB”¡,Æñh¾ùA„`•x1òq6š£¿ç5Õ¤ šLÜGζ®¸ºZN|G²BÝ/gãRëÕÕtºÙlÒD#²Î?W„ˆäˆÆé+²®¦¦K¸rûñÍtübòïüíÈ÷P¥#×÷QE­´¥…½ZRN%ÑB±¡ÃIMgã`lU¹§R1Ágc%n4¶ŒšFìáÀõà“YV?¸‚ާV´÷ˆT"—ëšr}(Ôüï$’jmÔ ’3Ur¡«W˜HóŠ(…âXBü t»R¿Bª/‰ N/ÑÙ"þNV+Æ—C˜&,—¾½ý1JJz¤Y‚/YIº`Û>Ò%Q EñÊDñX«›—ïn¯/QŒñNú`ó^„UêºúKB<©üAÚ­ýƒèòÈØû•=¼³/kúÖêûmVtENÊÎû`è[¡DZ«NÁ®®.ÒË:éœ;ØÛ¦]+}D¦Ó’pµ²ža …ÊUE4ýÇ‹<ïgËy!l}»Q9©ªßR]¿!úÎÙ>kyYÑ瑱³`UÕ5 ‹¯¥ølÊuygu€?# å·d· ª$R’‡».è²a….gc%QK[®]ž´÷gÀ«Ý©YP¿Òêžj–“Ö´—’‘ª]ßHj:ï-x«=yÇîÌ›o‚ÝÞ³˜ïÖjOiï´ N\E%[´v‰É™ü¾-ã4'+ð‡XóÂxù„üI0ÞÒ‰F[·fšÊŠÁ {ý»{‘{XŽ=Á;ô݆²e©g†—CºªçXýP5½¹!$Böx"ÜiÔEUðZ@‡(Ä,ü’ÚÄÞ ÀÈŽ q‚‚À‡dnà~jY§ ˜)`˜hÄ:/`°‡2?y2J“]©¥)ÂazÜzfiºÕå?±$º+&¨K€~aî«G¸M" ìÞÇ.°»äÿnùÒ¨)ñS-*Ø|3(Æ·³Ü>¡š4êv}üfщ‡¥©gÂóRÈÙ¸fE±ÓÍöŽGE?“ýs9©ÕŠð¾*¦x:m u•ÀBt[cSÓúJö|ÚpväcAScÎPËîÒhº<ÛПDõÎÆYÒüÛ©i˜Žo™Fiü±7‡!Švm¶iÜz¿MA?B^w£´ýcì‡g]xÍ`¿K°áçìßdyî*<Ì/l‡Òh„16-B…e¼ÞjÊ €'nÇN.`V§[³IœÜNzG}@pNjþ¼œ¸c§ðÚ4«L³™¸P ª%1e¿áý³‹MI»kÄ|§»_Jq×bUì²€jBN•efºœàÔÙ𮈓 EIÜõE˜…_K²y s«”©Âf8µÒí.ö\ cΩ£8 v„Ò­xŠÏ‰Èà^¶Ó FŸR€5©S(¹–fÎo ˆEŠ]mV~ã@{Bí"ßBo ²Ðœñ–K[âŠ=¹k€Û;ðrÏÙGÝO‰Úä[€ ˆéÕMûŽcHhþB8I-³ íÙõüÙÿ'¸› endstream endobj 80 0 obj << /Length1 727 /Length2 10898 /Length3 0 /Length 11481 /Filter /FlateDecode >> stream xÚmxspfï²ulcâÉÛ¶mÛvòƶ9±mÛœLœLlÛv2I¾9¿sϹu«¾Úÿ4VW¯^O×®go2"q{UOG3&:&zFn€Š¸°&###€‘žŽŒLhfäbå`/jäbÆ Ð03¨˜9˜˜ÌŒŒLpdGO •…¥ €Ò„êŸ @ÝÖÈÔÊÎ Pw°up³2±𺹹 º9»Ò]ùéÿ©˜™\,ÍæV¶fE-)y ¥„¼@ÂÌÞ hd Pt5¶µ2ÈZ™˜Ù;›QÌ€Û;{S«qr¦ÿ‡€½›Ðå/1s ƒ@NLUH\A^ & *0²7ÈJþ-·wqæþ‹631öø×t´—ÿZ¶FÿµŒÿký7 ôø·EÇÄ0µ2q›YXÙÃ1üK7){sû¿Ã¦®ŽÿIý%äü—€ò¯†TS3ó¿hW[[y#;3¥ˆƒ£«‹ ç`j´;ØšÄ<\ÌìMÍLÿƒ6²³²õüÿâÿ!åbôW!{‹¿ 2þ;då,nåafªhåòWrs#Û¿Rý×0û÷ùü«Ñ¿«ÿ¶ü=WS{[Ïÿiøw˜Ú1(«H((+Ñüw þI‹Ù›8˜ZÙ[T\þ*j4ýoàŸ´¢‘Õ¿wè?Tþ³S¦ÿõåŒ\€VFú- 㿞ÿXzÿ‹vðð¦cfæб0±˜8X8\,\¾ÿ‡®‰+hfïòìgùÿÏ:™™y˜™À­.9˜ð„X§µ†Uø‰ÍTBÒÌü6T£Yb]žê½ÖAµúeijpp‰{§Š›ïŽ@0hÌ·s±-u×Blo†p41C¡·„ûRBRiáW»ù¦TðÚ¡¡Žcg"qyë’±¶¤H=Éš•{V+íTƇ*ÁcXÞ9‰²•°2ÿ`/A¥G–©ý‰`¶GSƒ2cZxe,ð²» ž¼ƒpM†c`YXèx®]Ðpi-¢ 6¨±HѧS›ÇdòŠ,lqëà èYJËfˆ1WgF•Ý]þ3òø>¿£)™˜i/‘ÆNÀ¨OÃ3O™µ´PA#…™ïatýA_c‡$º|×­žT¥'ô‘\Çi‹‘z·…˜­!Óª{x€Ù…ê+E¤ú±84ÅfèíM)0®þJd³óæ†qÕÿ;¼”¹%ž#WÓŽ¨˜ nd¥¹P´o,C3L|.B'§Ž»Âíz ’ÿ¦cb5;Ôª}…«h¯±»Ât*L0¸­å\ú“†k¤È˜¼àׯJûÌÍKnî<±GÂù·çò#µ³Nì‰I„âöþha4K†>*üüHòdQnI¶`jO,ãXB©rmÒèd*T9Bûá÷ðuÿù^z/ýy”ìôŽí$¿åN6º$§Ñ¤1b©—¸¨SkŸ3§Wè­uùÇüGCOˆÖîøyô,aÕà—ºa)õ°Ñ?•Ú윥 ´Xçš,P\·š÷îbà+!j5ÙÇã½±ß,SLxêûÝb,?O“3xÛÇöäÏ Õ™äÍÀËüºH;<8o8ËžÒ$O»uZÄ‹0ÊR)ž"…ô¥úÆ®qø&¢EÃYTîˆ{ñ¦^&HºD$dd ,’U0fT„Ÿq+9çgJ2‚Ò†øt,áè…iŠ¡¢<û× À<_A¸ k2ZS‚┾—J}“ϼë %ÂN¶³‹ äÑÓһϞHßÎw£Î]|ߣs‡ëÇ.\)mY¥Ç/f]…àò/éüA†RM@À¿gwÃ{AT0ü&`¨ûðÝ‹b#¿og)Ücû=¿¨ô¤8Öô«S1oö l«ú“(êÒP¤Z -ñÌ÷g#™H6þ¬_°£×4x¹UÂÀ2hqú*8.q×0ØîÞÌI­´ ô³èâÖHfÿ4h‘ºÿùcã^f¸ÌÇ+–C ®Þ$´F½Ä ¡òïÇÊqˆxcÅ®“bø SD8álíoñØyúÃÆµ¿}s) ¥‡¬cä‹C 6iš:Ö^D]ã¡ÈH7ÂÞtgsP"&@ð 7†¡­˜mHˆ|¨ øFO‘éÆ÷:N‹´Y¯æl¸‘“'õ¿\ˆP°ø·?šgûˆä6йB<Ïsl†X@žVxícƒÊÀ‚÷ËøÇ%·çGRç}çŽÅ¤lqò#36¥7>ï jwœY•G¶¹)µ¤òš¦Ì0·2$ݤtâ¼1ÔH;8þCˆ¦è³N)Õ)¼¸Ö$ ß“R–@™“¢‡›¾K/eðAy®®…ƒDÀX0.ÍJ£WTÚ;i\®øƒ|ðä¨H5=Ô+ÌfÉþN'Èùb¨óÛ¶¸áeA2Piì+,CZA;­ˆîH#‚ÃÀ²•àýlUé‰jÔ¤Ù¤oœÑ½‘u ;LÀÿÕ2 ‰ú™RôÍûD#¯C…CZ2ØÖ¼=ͩ̓D èÊžqïqZ”ÏæQ•ãêjèÜn°'ÝÕŽ*巸ħO³¸Þmâé“j§-äéÈ[xö£¹Ð¦F6æ;Ž2{ƒ„W…æíh4£5ý˜Ä÷êÒ«I«wgsتFÍÀ~ú««çЀ§a™Šæug¾@t¡Ëv\È»¾U;×¥ÁPÄTZpÞ„+šPU$mÈÀDhë -½6…}›ñ‚‹ª |·yÛ.Ìšs¸R+×µX:7?Xq\ñö IJ ;ÅEýþ3ÂÙÂy8ŠÇ¢1ê/ð«#Öš ?Þ‰ô±4ã›ÒLÏ´½]ëgüOÙU¹¸È{ž¡Q‚ ~º¢ÅwÊohï“„õ07ÉåÄSðO1nÌ?!lôi7©éN‹ú¬ßoC@r÷6“ÇXVáFÞ2™¨ó¬Pã–ðîéâe¬Ç”¨øJ  JUN8oÁÜ}t·-‘7(rI…'ÏC@)á뽚¹Öº^‘%X QüUNÅÊÊüÒb«×³²–Ù7¥â‚ZÏeM:ã!9H¾2ºCàñ@3w¹"S“ÑðÞ«ÃP%¼¨émŽ0䲫wä–«½ —Çü}Åg‰q˜¯æ¨zs}£}Û«ã™ X…깩–ùŒ/WjB4l“Ï?–Áé¡"ظ·l÷Y§³J–«¥6,À¢SêÍ¡LÞööìm¦iméZ±ÌÛ‹ û°³U±wŒEº¡»~€4dÐ :¹W-äf²ã« ò©JñSMõzŸ°d® ÙY<Å7°é*Þ‰ƒâ£m àƒ5°ßÌÓŸç{3¢†šœÙê2;¨ÜqXêæ‚4†ZHÉýäèŒÚöH5œb#ÅFÓ™Z_$`µ-3„a]ð„ø%3‹k7ÕÆ}X±‰öN‰oŽÐ¦ÊÝ@Rtn6ûCÁÉ‹*ôlàŽð+«z™®’õ¦¶*,£Ö~‰×mzãâ‡ìlöûozU6@?z‘åŸuVE(™àÜ÷›%çñEì1Í&×c.†ŸÂHÆÔAjõ?bˆŽ–O,$«W-ÃQ"Ƭ¾¥šæÂ!‚ó§;Y+I·1c™7lAîÙ1W)gW›õÃ`æòFr8J¯¬³ÏÿÉ€ž4 ªR˜ ü’3±u(vf‚YVåæä÷ö®F;§6_½_ùôáÿ‰[!mÿÝüÛ”èúûƒÁ}Êp¨¢/å É8zh¹“cžfš—ý“a<\²&‹-w7ó‘|iÿùê~|”ÂT/ïaAsððÄôzüý «ôþxSÏ6;­~`ŸÇšÏ&\œ€ä“ÂêuU—¯{yPhàÂÚaþü°ù7øèå «·dö|‰nÆÇnå!Ó¾F÷€¡ešò[iܵ“SZï€öÌ}/j1t ø…îËEacð‰§Íi{:-8͸;àBûùh6¤÷Ø{­¯hÂ‘ÇøO±þñדË%9ï¨Ó ÿâDWHPê¶—]ym¶<åÐ` ›V”œ:¿yV .SåD±¤`¸ƒ™É€@ºú½”Bg˜jõû2׈CzaTf“&ñ¥VΔµm6Ò} èø2ÛàdR)ä’¡Q_è˜V„DQ¹Ÿ¥Í±AlVÇ‚Ž@‹gÞà^N'ªHÜŠ'˜R70(öËæRN¯Ä+¨#¾i¶ß>å¥ê½iüV×aÊêÀ@ø·å}í3xõõgþ5Ñ›©IÕcòEÌ}é8ÅPãØÀ|ð,wÚå‘SÐP¼¾?°6Ý~d(‘`=ð¹Øù·ÜûD Ú=ìñ^K-pÅ7ù©dË•Yr"NAesÆÁÅÁâ”ö;] ëp¹Þ˜]DQk×ê‹ûÀ¸íIÐôaÐ{¹Û!qºÏ’tùºê<ÓÍ©ÅßÝ´\´reÄ&Î2•\¾ï©>Nh¡óÑÜ× 0|áU?®¨!ô÷Án}ïÁÚ7ÁŽAò(ø êéfºóŸC´¥ÆWy¯JŸ®ß÷›™òA‚@ï¾¢g>Dôž~5l9¡×“vÑ¢ç þöÆ:\9hû•*–~ݯûŒ@ûñdÑÝžaKC€z@\Á.Y0V¿Ï"åfÚyêãÉä>{¼æ&‰:ã: dŒEÊ6›)JP¥#ÈØŒ(+ ¤ì»æsUžðBmðõÇ»“4²ô«eÖãbâ'ó#5§“ŸN ´"˜”BÅ›üØÅ 6¦![3מÍ-º¤¼qW+ßvíI“„ÌÑá5/” ¡z¸¬ù *:ñT›"Â:\Ù§a—Š˜O)¸æ»7aLPBìðòi|PK2!w»>? {Ö‘ãÚ­c}£Xfбƒ.éO„î¨hÍÏ¥KÆwó ±£ûípÉý‰dË2…~œ‰•ƒÛnš7tún¯Z,.Å©E£’žK¼ŽÓÖÊÍ…À5‰xËâiNæöÀ·’:mÓ­“…î_~äÔ»``l—„ ¡;Ýw‰£éF†$ BÉôÐÂÝYæY¼|}YPFMs©±Ä-"¢a}^—`l<’Æ?*Í–šTIp×¢aÆ©[`p\;{Ђ9 á|‘Ñ÷ÝM¬¾FØ×9> ‡$©TDŒô?òj±É£Án¢wÉ   *`ý »¬Çàe/!œ-üc뇡úè}oÉKõ ¿½õ[Àu¹ÕŒ¯XVÒõ9ƒ­›a Œ´×_.—ósáÊú”ʨ°¥Y¾?òþbƒ±ç.Üú“¶ˆƒgžÔsBƈÒeÝn¤Ðý£~™ÞÄUÙ+KL£æQ’!Û"«Ý=-µ»~Ÿ:SÑØ«Tgs¶‰„')íür"p’«uRffH@'{l÷îPºÕfX4J¶Í¨îº›ºLïÕLÂMÍÓöÙïomYQæž—’o7T‰Ù1ûÄféˆE4´‡¡)l6õnØ©ëšñùkñ޾ʡE ‹R † £úb›–æiÿZŒï. ?Ê;䟷ֈ۸Ö‹ä#hÈÚ—ßNoçºôŒ8qüH‘‹²=¦Ô. â`›C6+æµÊ[`sgs8D¯®}·M[ó0Péi¨:ϳ°²êXaŒk~FŽ)‹e©.ßß]Xf ©ÇSd#nÙÉp1dùl=UGz8¤o‹^5 ×êßmÏ…p™;ñABh<–A¸C÷mÑ· ú4%ÏfH6&r‹]¦XŒ:LÌY¥vï°¢s¥m®øßî§XùŽ.ÄY (n§æñLd—n Àþ$ÃãOÚJË,[6˜"}ÎB7Å—œv•ÿtD¹ÉšÌ—À+G¸Mé*â\VIˆûPÉç¡F‹QŸQP*­µÍ ÆŽýnwÊ™ŒŒxaQ¾4Ì䆯 ¤Õúɪ‰å´:GW­—íäXgC쥈×X[áR+”Àÿ½âë![‡yŽv„£±«4O#À„‡aΘ`—%\e¿3pŽ4,¼@½öbßÊ´O§W5ï îüèlÛ;; àùÂè²7ê|—ò«,óŠÊü)¼ÆD•\3~@ÌH˜#ë³ìׂÙÓ÷{¯NÄ56wӠͪF툹$‰M\Æ“úÏê÷ôB׫Ê|£¼õ¾¤‚§¢RÖN‘€a9j¸V6M[!Wäk@MOâŽc+ayY¦Ó?6e[»èâ×ÓÆq§÷Sàà³l°©…ZeS¾üërbN^KS`¨iü<)¾ÖØÄZÓø‘M×&gŽ˜HÇ›ÄxŒ9©*®0‘L‚¡˜º½)´Ö\‚îo¬|ÅÖ÷î‚`©ÚÇÙ qõŒqýGŠ>D$¼i~ÒÖ8L¡j™ò/„Íë°8lOï$£‡xj’‘É÷Ÿ6l݉}‹uè°OÖþ5À¸œ˜i†“eTÐ ¨8åNêü|±EÛ š6;³j‹­]E‰\ÀÔæQŒ~Þ±tR¡>îrûGe5'“®ªŸõj£4L%¶µÒWJ±@dGrm`ˆìItä×’Ú.üìò­®]VYK¨…˜!²ý<{wÀ¶‘¤•ìN!…%]=Ü)Àf äsâH†KòÆÆ›YyÙÓu-À{¤{@…~>3 R<×þ5}U°¥mmSp`eéùj‡”µd1Õô‹ÈÖ$ïØŒ>P]N×]p”õ Ï©Ëଘ9{‰q”aÌ ÷mIm‰’æç‘N&xéȨbNutÞÏÏ–ì­eEú®{÷>Ed«°ûÃo`‚œDîy´P³ËK¦[í±eìŠJþÜšÄûín{ÍL㎡QÜÅi×k—ôõLÈ—;àçöúFHx¾Üb³×)³^Õ¤ lÛpõK¿“óúyˆöâ÷‡^ñ,Ä‘Àî·Úi¾Ãl@CóçpFwש·f]/©Ôñž ³ßámÔçQÀ»n–ö¼„ï8r×ÈN‡3ÊC˜úwyúþŽ"Âi¢gwŸYƛŠ/Y'#±J7e;û:~æc.ô&±ïÑHîE¾z÷0‘c ›¬O=^"YÈm'šuô8Ã9jðP™ˆ<>Þ<3ñlïºëÒ¢÷’©o_¬³>_^Qîi}èÐ݆˜y}Öð¤އ¾­Ëû$È20{qžn\ÎÓ‘ð¥=¶/„ôöImÐð•{¯cÚnSXÅ\±'t4w80-ˆaÓN¶–*fÊ€5L“®FÊ鈥vßœ®Tåo‹ cŽ?A„[¾žJØo¸ûe1q­Zr­–†´Hçæ3øŒÖªØ|õÆ^,–¹sdŽ‚÷K`Û0ƒ~ä&¦hê¶B¾;j¿¢8Hà*a%ÝP„Ò±> Ãx;Y›<‚ïþ™h¬Ä÷Nëó)²ÏR¹×®@ÁEè` ö(¢}/–¦œ—•r=+»pg%ÇcÆÏ9MÕØçÚÔ_|IC{?þ~9ñ/;AúOX7Læ ìêÍ’=Í0DN¦˜áɺá[Š*H‚ ¶dDÆ$FS2eÇÿï¯&ó}²Yª$¨êuQ˜B\¡Â¼ —ppôÌoC(BŠÓѵÖTl÷Ó?KV×U²Æ0"DÅ8…ÐÓì`˜×MBÂèm‚h£h|xÚ¥L÷ß Ûұ̺²Gè$ ¢§H»TÉG´1O`‚a¾lćßÞžYs™š¤Nx¢é·Ç©hÕÌØUq/ª‡ggÚ1×U’ éç I»1îìWžÐ,›õߎÐDs*‘îü«ùL6KŽô:W"Ì;·”»½Håí½«N#$¸×Ç¡¢MD`c{…!ú®z€ ­lh‘OfȾV'BòRô™%f³z9vÁ–Š Ò/y¢1â±$¼eùèW_GÚ:k)”¬Âæ24d¼ó'Ö]ÁKͯE£ óx–1“b81!ÇÖõ©uj”TNº¡®ï×!\VDyû7¾´|®žäϦ„ ÊȤÁÇàßéño„Î@@a©Ø: @g¹ÌcÝ•æÑu«^D­}XɶKYƒ)À£Ôî ¨ºnNž‡Hƒš0x¹à€¥Ÿ©àc˜òï*ä¾X’‘ú0'bšO».êk{Gˆ©¶ŒÎÏSB¥p© ‹§ƒËËëXª—Ç9ëàÒgªX«Û€ómn`€3Ìåµ%i®Ž*ªìå)ï&7Eðmð0 ‰ «˜)Í8f©4m¡žÑÐ!ÁßcLÁã½0¦ïýv$œ Ÿù$NyÑ“‹Ç2<–=íw¨F8>j“Ul–{/Õ‚ÏÙEãLÇð«áUxÅßQ — ûÉPúwL+á!8)óq³Ê<£Õ+•î 0ÐÔdãlñÌ'JíÄ<£àSu›—$o´×œyÓ,ø1©Q »Í2 éIr½1º#ScS¾Düåª~3œ8ÅD˜Y"{=Ÿ‰Åaòóhs”Ð(O ÁIÛmýÑ=¤{Æõ˜j¬–[U}ßtÕ×°Ó|Â[> å"«çk£,ñlO*·ßKñOP&G±òŸöy T+jàg“Dë2ÎdâŸNm¸;`ù÷Ъü7¾… ¬‚‹:™ÇIEŽÂÇ´—§~Šèo¥5Užåj)¥ëtÆ“ÑëÈ·)®"³¯¥ˆò¿>…ÈÜe«]Ü„²$( ІòS¢ºÏwîۦ鯸Î]åsvëà×£š“\ÊÃ'eús¿›CÉróã¢~©=›ã{„±TŒ®5ï% €Ø pýWÜêÎPN·ìûúan‹ýÄ1z}R˜ð‰“.PÝ‘UÚ|¼b÷V[Wж|º–Ïü‚‰Í°œ¼ãÃjض_/¡=¨ïPb럗?gjÞBÅÔïðkôÀcÂN?*Ƨa.2õ°sÂÕࢨû£EœN5K 3"Ïɪ²2GÐéÑŸá¢T6AGä\ Wi:ö¿9çÉÞ~¹¯(MšŽnäÍq¦q‡Ü¤¼4€FXÚšÏhûÆÑLÝd¬S•Lk-³Ü Š‚ê›ÿÌ‰Ž¶Q0‚a¨‚0Í7²î!£]s™Õ>FBH1{»”rOvgO­F\gð´I ûŒ®i•«'h„iØ+ôpÇ'V"­~þ¥öHÇ@ÂâXÊÛü$±‘ÔõV—FÒ;HUñ!b29qC)ăøúVÆ€A0ŒÑÊP1 Ó’w¡7C¤RdôC”†áÇû>¦}F ‡ÆǼT(‡+‘ëkzÕÆÏ·°lÚS3ûb’¿–žî¿QÓñ>Š‹üTx¡÷'M=dÄ©û²O¶ e´ØÆVÌP=„½îs¸%Y}ßɇéJVrIëZ±¥’-2…÷}å·ÀP*§XF>Zb6*äŽñWB ‚q‚[­îe¹2MÜcw=»X›qÏ\à3Né]3/Îi é³Ô!bzÓÔ§LSd{VµÎ¤_¿Cä ÖX]FÐo«~ ÖŽÄøååMLŸÍS>æ½gê"8 ÁÊ#ª¾A‹R)£Že—ÔÁ }òš–ªÆ¬*åó8!8p–l­õž*ˆPR¼âDóU?±¡¢‹pÙ™ç=ˆmXv¯ãvÃËð²ü°Vf9XÇ3^òfo-WÝAÞq®8 çÐXšEâ {/ú+?àõî„Ót>+˜ÀÑ×®"5b@ì×.2½_΋1²¼æ©îÅ%¤þ»ÀÊ`ˆh¦ è—€Ä|ÒT3¥8ìh5š+¨^MC×7q~.äK¼QÊÈM¸vq¤ÖÁÁTT$ 3=1+Í?3Sr'^óWN¸¡G†ãTþÙ²}ÀÄL‰o龯­WK6[»mev̗͸Œß­éòrÁm<ÔNÈLY´ùÙ¿¹ ~Ò;×våR(ˆÂNÄã\ƒ¾'ÛX "ÊòêO§¼3uÅÃÇ'Î-€…iuFâ“Pðn¹E° †TLê¾òA8ÐP[_” Ó²m§k(VÕ¸0GåõýN5öâºíõÈßÑíÉÔÃË~Û°©j“0õa¡ÑÂ)º»ëriPÐÛ¤8KÏ…&5A³+ʉ¸ªü)Ø´Ž¥'x¢ù¬±'ýª†¶.Äq=§1ŸáW½’×,Ej®qêWG÷ˆþ lË Ùˆïˆq™éš^Ðý÷Ÿ ±HÐß³4]h»‘ÚÇ,GëöòQð>ÁÈÕÕ»—=«¯Ìc QRÉWhk«‰=×!Ûp‘Mׄhq#ûa8m§î}~á—8°#Hè@¸ðæ‡4þjoŒ›Ä+Ëf%=´”ýðh&ÁÅ¢WaÛÒÔ—¤ß?Lµ­þÕNîÓmY„ʇeñÓ=& Gîña/ð;u®žn¶Ý£Š o¿ çZÒ– oÜF<‰têrƒ_¡™”’¼˜PmcuÈv÷|#´Fóyˆá]F¬ ¼çªÆh57.f­eË»7¢ø)¨Ì¶H4Òå.aÆ/c¥á“·q@SºÌvÃ)5¼n´§ÁãrNPb’¸ X–Øp5Š«`p»>Æ""n|âb«Tˆú\XÇoAXk‚Qi! vÇS惢ì6ç.ãÏ ƒd*Eä-E\›?4V‰ü9 +B€g®k<©&¡zIÁöº?¡Q{Å™-hxçä¹[ž¥))Ý T°&Rp…Ë…ìç œ ­U‚t—P=h 8øU® #VèÑ”¯¯,†ûÉ›$äMJ£éÛ”÷R$\M§ñ±þÍD¹£ì ë¼ÎÕeO5Øû7%©¯*Î%âV_¢£=9ÖšãÕ÷wÎ߯=÷R\×ð£±FN¡“Ôß Œ»à«dG(ó¹„)š» °uB.ÃLá~Á«^Ynx±‚ʨÃiž‘Ú¬t¯òj "Ю a9«X@±)_9óL¨ž÷» Hw¤©…Ò˜ŽZÔ_GDÎ9)þ¬ÍÁʉN•λšG7CGcýº¢xÙhd™øÃû©Ðôðù“­.•§†%ˆêEËÑH3J¸€cÇÀDâºZÈç h(t™´ »pO ŒgŠ—Ö’”á"=ù5d[xªUñôR¯KyÌLŒ.jF¬£õ*†rH—D^¿-ƒº€·²"X‘:©˜óÕ‹}³MÔTe;a‚ÆI]Ôµ3Q+Þ©•/LÝz!P©æžww ($þ¡­Îé}r¢ãù­lÀ‚Àù3Þ;ª„k7QQoûm=Ê®vH-ãAˆUÀ….eûý~}ÕNãiþ«"º{^„¿‘êUgÔ…žÀþJ¹ßÈì°¾äNrYC:Äïx£^ÞèY]KI¯`ê% ãõÊÀ;oðºäVÕ‘—¸¹8Z8$:vÔ³s6ÕƒšÞ7Ê/;ˆKéÆé­µ°%¦Çª__·Å³Q5J^ ~‚ZnT¿_¥t«ëAù˜Òn˜Ë$ò£?x˜èÁ1wùEE½Ð‡ù^8¼¦Ú´çO(¼Žåå6ènÂD8wÐÈš¾J¢}¨¼¯Ò­3%â^fTkÝțΪ€O»¾\v z¥ÛG…šZÒûÕõÞ~h.(ÄÊ;†u‡â˜®Ø¸œ¦’Æ>>yzf¥-‡7PȦ’£ÍB"Ü3ÞØ[m)YéÚΕ$(º<€³z/çšæ Ú v-Cì®>XŠ‹&m‹²/ï!WôS€FŒ§ sjÄ|Ïnw+ÆPž:œL+S`†Q„§ÿÄCŽD4® hñ*ô–P‹cá¥DϸU‹›¦U™ºß{¯ÙqAI­® ­ âRW•˜E=Žªz7ô´ûSªJŠÙ¹èš;´¸Í¸Mê=,¥¥vºÊ¶ðÎpò—û ³æã„¡ãü\ø2„ý.w™mbýè1€ºänËœq½e›Kí7L3Þ9Ù²á»"eÒ‘ÛŠÀŒß7vu°RáÂüSZVcÀ8Û*¢Ä ž ”ì–!ššg ÝצÞg2"˜¾ì¦üþ¸džhØÞÅã’Q6í—%6Ç^Þñío·õnV#Ï:ôÄáô)Û.ÌϲÈ¿m{<ݸ¤%$Îw?$†7³~dguhêÌ>[‘Ä0Ig –íÃPÓÒmé”ŲÐLp‰Ž\Ô¢ª0Ž&³e` l$’S~ “¡ÝX±2=ó@ Ü%÷Þs€LóÉßiðÆR»ð£`¥xt20]!r[-ÃŒ§†Èt=btL:êÍvÎèU!Ä$ú'ßÕ#ÞPæ0{¥ÌñnøYù¨òì9r—‚Oô%80µ›Ã’íê\†ú†î±ÛÍ#ù‚¬"'‚ ×ªõ#®êcoÍ‚S&*C°íǹڜuh.&O†Î¶ $¯‹Q#ÛL‘Ø"=;I¢g:b1ƒÓ dS«²ôçK o(ø {üF²G¨®ý‘è¨pFÐ3¢dü7¹†”u¬%#,%Q3:Ç,üâM‘äÖl(B‚Ü>eö±”Û3ãCfbÙ¦+«z+UÂ6Òúp>¨–}›¦æ:$ü¡·$xë¨-…í ¬6èjÖ$”ŒCó3¨±¨Kl‹V}¶‘OìÚ»B ^X‚ÑÙÎé"!Gû>»¶¥ûW÷1ëF ~ïÁŒ^š¤oî¿Ïú¯*9ž½x•v —BîA—Ö¶Rµ˜³"˜é5@nÅ~\¸DÅ:øfC©äð&Řv™®>|Òˆ—±µÍJÈ2:+ùúÖÚþÁ€“L·kÄüÅ1ÍηBþÿÞ´v endstream endobj 82 0 obj << /Length1 727 /Length2 12567 /Length3 0 /Length 13168 /Filter /FlateDecode >> stream xÚm·sp¦_-Ûè8ycÛ¶m'¼±m³cÛ›Û¶m;é8÷73wæÖWõÕóÏÆ:µ×^gUzȉ%ìí\Ô<€ÌôÌ L<U -f&&+9¹¨ÐÈÅÒÞNÌÈÈКTfÀ?f8r€¨½ƒ§“¥¹… €Ê„úßE€†‘©¥­¥@ÃÞÆÞÍÒÄÀçææ&äæìÊàä*ÀðÏ!U àb˜YÚ¢ŠJÚÒ ’*Iu€$ÐèddPr5¶±4ÈYšíœÔ3{'€Í€‰½©å¿893ü›€ÐÉåbfNö¶yq5a E5€¸(£š(ÀÈÎ 'õÏq;gžÐ@cmGpù_dcô¿ÈøÑÿºNÿ‰à˜™¦–&.c ¹¥ã¿t“¶3³pü§lêêðßÖ?„œÿá úGCj€)Ðì´«‚‘-@%joëàêtÈÛ›ì"ö6¦q )Ðô¿h#[KÏÿ_üÿEH»ý£‡°ù? 2ý§dé,aé4U²tùGr3#›¤úw]øŸûù× ÿœþgàŸ{5µ·³ñü¿ÿYæßãµD4Ddhÿgƒ·ÅíLìM-í̪.ÿ(jädú¿Â¿ÛJF–ÿñЩü×Sæÿ—˹8Yzt™þe¦}ÿôÿJDÄÞÛž……@ÏÊÌ`æàfp³°ûþ蚸:9í\þ-û?»ü7ÿ·€@  ÜÚ²½ oˆUZKX¹ŸxÑl$íìôOuÚefЕ©î]TËA SÃÃ+Ü{5Ü|w‚™@cþÝËéûf£8 ÂñÄd4q„þ2îK1i…¹_ÍÖ›rÁk}„Á5„Ž­‰ÄMäKÆúZÍ$[VîyŒc)?ª$sôϲö>H”íøÕ…G;Ij}J´L/à>m5ʬEháµ±àËÞXx~ð. 9Ž¡Eay Ãa¸Nþþ£Qûó –Z[û_¬ÚímÙS%•â ß;r»k›yÐx*áìÄ©s«‘W[­Õ8ù:éÄz¸4wgQ%ógdÚ²?rOôäxÜ÷q—I·e= Ø.3œGÃUÚMÌ€Ô$–5)œ’c?uÓ, s88b%F?ŽAÑæžÞ:Ô­VÙ„Œ•TòxðÚKÍ“M[5]l´vE×~Õ¾ïrD1£”£¾Æ àý(±XmœRÀ•ž½±”«J×þª®¯öêGÀu5F|DO¶é§½gø¡b0´Ø&ñÊÊgšâ¬°••RÛ"Ñù¥`fB,øïë`:û'J¾ ø;âT¹lÈÉrìá~Zƨ£Ð/w…© G ±Jò‘ÛN ÂçwÚÆÛå¦~%2ñÒäVD»Ê#î¯ÎÕ„ÿê‘ Ö§æõ,¸¦è´ýÌ^&µ¬7Àov3Ѥ}¡›ËàÓ‡°ÈïÛ¶ ÿÀ4éfW=€’Û˸MݯÚõæ*ÇJK“Ía2鈰ÎåÅæ<ØZd¹mü%_ïúƒõˆÌ­ŽÅt}…¹Úiù6î]¡ÿUÛ˜ë¤Ä R•7(^‘à&8Eˆtßí±Ó¢PT?õIù‘tëR1e 2ý$ôÀ£õ©—Š ^nÿ‰«eÇf›cÙgü“ïMu#€c‚Oï4ÍCùÛËwoð¹›2fŠf; Ž%5È• ËPf;G7&Q$àƒ†Û"\%y«XQtŸ/ÍNY‚x[€ØÞ)&rÖ®8éüûw­Õ÷*X°$x³­OJŒicZög,‚ *@§@*§,®â=JÍÞ‡¢–TÚ6"HEi§úwý¥^Üu D€@{íð•±pÆEO*"LŠ6Çó½i‚ëSžu7Å Ä|þ¢º´œÍ{ÝúÕuëTøfˆ!&·o¿æR¬zY"‰gç\(÷ÝRqs9ó9iI³s`ä‡G”ïñ"ãàb«¬'ÞóJÌsѱïîóͲ:¿óÙ(6+Æ›á’y¾ÕW/1´ xnº7®+€$ódFìŽö–±Ð аeMÀÙEŠþ®#p¨¶dعl~>TO¦Î¦ú(ŸÝìÚôÃAòtó§{¯•fâ= jÒ[2T鿤24EûcQÜr‘ÌuÁû·¬Ú‹BwÊD¬ß@4€ÿm-(V^2÷2ºßÖ0bÂ(êi¶ðÇÓ÷>J£ESÅGnnªƒW͈oƨfÌ…’ü>ágÖ³Ò³“©G¯È™ÒŸx­z")^2ÁR˜Ã¯5‹\,Ç•o×é,âòñØ?ÚtV{o‰o}§Zòx[töèÈǸº™„ÍXÑ>Ð-ÎÛ_?Mó›½ÿ&$ˆù ¥MÖýGQÞQ‚¹øQå™snäû>•Èë“MÑõZ ò—`°ŸªÂa¾•Ø•¤Í$u?[4²˜}•õ¾ùÃZĽ*jg|ÝÓX n‘™¥7°Ü^·½V%«gݶ ÂSÒEðN}åœæ­s§R›KñœÎ¢ß´7ÿü׬lúÔ  ©h;¯U~Ô‰sW@ìÄ•Ë&ƒ,³³KðÁùf}\@暪 ?ˆR¢Ÿr:0ô¦‚c‘E²ÐzÑÑ‘]ìØç?¦†¬`$Äè²bÒ3Ýô›f í€KvöӄBc§{ÅEGÒ%or¾­™¥82¸±>·Ù·Î³U¼ò”pó£îN s¤Úfž¨bÅ‚)Ï=^hŠú¥d-)<*ny_ÀwhfàÄÄÑp:ûUD¹ó„NýSUEó>¶¾„ŠÐ£Èªu§LS³Æ‘cÀvkìd%¼33@CËiLüt,fÜINgné\°ú„ø‘ôkjl5Äz°^ºîƒ°WøW ‹—”D'p%3L¤|%ÇJUÐLÿ‘ÀƒP~ñ“czäóçíµ’Õ–z4޹Y[¡ÑÙû‚ B‚kÛY›Üp›£qí±=´"dó‰(ÎØTç²»çà>y³Šý‹êÕÜIrø`……6Ël[I¸8)ä €s׬õ®0ü¹­1£Œ%tÓRnª7ÑLy MøT1 cøl¼‡aûø²ªR޵ù(Ó@Ô‰O%8usùÞÐsCXá?OȾ¯0&szuè¬ý+— Zq-Û¦Ns‰i¬ì¡Šf8`šAÖ…ªY$ª*Rå¶ØãmÊB²i©Ìç1Äý¥úÄË%ŠJàÝ¶É  /u7‘¯ ˜CQé=fP^óªM+e#(»ÃÅÅ>¢êˆ¨Ý·“ÊEåi)¹´ÜvcÀ…‡$°ª¢6 N*¤ ƒG{ýdrÜ…öC° ?wær©‘ »¥ÜÒVÎl†'/«”ÚÌ Ìòé<¸'ö’“˜1yÉÔ År.R¸Nî]eÓEwÃÖ?Ký„ëù´P1Ò)'”Ò[W€ýΪ+Ú†´d@ÚÒ§'Nˆ‹ƒ\¯ýÀ²!ÂØ"ih¦ß««lë7ÔÏhÌqý·Òí’?ê}òEIWש3Ö‰ Ž"6G3Þƒé!ÐK®ôP{n´èWÛƒBGâ Üç 6/V|æn?Îé1_Ióeiéª6¿…ÝÞµ@W“š°nìÊà=o \cÝŸŒ;f£Ú5æ2ý˜0,TŠq‚ùã~Ýî—Ù¶±Ô‡ür§,ünÉ´ÎÅ:s_Ù…¬¬·|Þµ‚³gLÝnß§qÇQ»’²Ð”±ËìÜÙo>O°yVø–yo¶¢êLŠj‹PßL„æEg*î¬=S€L‡|0rñD)#‘‡7çlx@PõxuFQ}À´`EŸÄ2}⛈mvø/•fÂ6âçŒì¹½~c7zaö*ÿo\ˆxÖß; †ë+U=¿lÏË÷ZÐ=WëÄ=\$ÉM;†9Š¥ÆËp´Ó”¼X•}fѼ•s ;ŠÇlH™ÎÍEò ëOÓ¼Î|ÒaèÑ>R Ö:“á´Ø[ñã'ÿÃ’ nõZ]…\Mœ|Ó%)ìÇyé›&¦—Ã÷ nÃè>ú›‚pX÷'Šž¨†}šØiv1ù‹Ô~ûYóȃ›÷åÝHD@ª½GÚ³t`@µ[$Ú(øÐ²âV<üê@æ(q}³êðsý6èû“·zñYSOô8Öât4¦’TâJ)ƒNµ9Ÿ;»cÊ'¢…v&#Ù+þiŒ—i9WqŽÀÏu÷ÌgGÅì8š]!î=—o›tZVÇ,m20.ÐÉïËèÊGªîuYûëµ>ðým<˜ÿã†@¹˜h+ %_…{`ŠŽJ5½r°1$1׿"ˆüëDY…ﺛp:¬¦ÿÒ|„£z¬ý§3­@Kb($+ÅœñúÝOÝû´pGŽ‹€´vi=}0§™5K4p”ê06üwܲ‡˜’¹LÀî¡o-ÚÜå v·ÂÏŸPÊYwKN~Í .ý'+ú kë#§H\W©_£2yU¦†4e§ûg%6¿uÖ²í5²°…Ľ#LÐ-üa•hîg ZÏTø^£ø/vT Ä&£¶ =ÂmÒH´2–Dw*í—°ž #¯ä«dÏý›&§Tª_hÉ*V) k ážæ‰·¼û²+˹lùë”Ńx*|»oöMšßƒOÛ_E z–Ê{›isˆaÑ´©þœÿi(ÈVúû;ǯ!‚íscÔ•Kè ÕÁŸö™Ýu¯®b–Q¢á ŸæÝxR‡ŠTÎq˜¢{K’°tO:z7Ú"ÍQRƒ’ÿS¬u§iŠ“ñjbÈ|ñîûõ'aLQº])ª+¦yÿJ\¦*í늬HׯäZ§&—œžºñWÕ[xÐN‚Kï–ÙÈ€‡TÔú‘êD¶MgNŒ­¨Bõ<Ã~TÜ!,²Šùy¼Lï¼*6†…%oØ›¸»v}) O%ø°Ü¦40ÙÉdyx)+§C’vïaœ)½t¼Cyw¡Å#语ˆBê8ÔLþÁ¯ï±–l@=´WY¶œ°ÿk-6ùÖ à´ÀYÊ÷YlÒåaAÜ)+E[~6}i ÎWA> bÿÏ Âf¶0èËßÄž^NŸ<(‚2t³O¤@÷¶®¯´µ²œ<ÓÊßÍ¡%.ãô†ü'êw.5gp/û"E]DºÂ(MF(!T…éžÒ”öMïúËåþ½Ÿól…D«ø? wVƒ7e'„0î›ã„™´¶£Îž÷ ·ûÈíIrvÑ?WØ1?.7*’–Ñ;Ù)JS1R«.9Z‹}zÝ€œÒ%¤Ôú‹jŸ1Ç«í»Û¾Þ A×eqÈT¤|fí?qä ïçZŽ7çll'‹&·Ç=_Ø× ±2äO ³Õ³Ž&íGyþù„§¹y 0oË;#'I†x| ›®ÚóÃÓ‰Â>B\¹Sº ÁR€?l´Ùfª ¼¦Cq€GjL@Ú„%Wp$Unbù- Å…i@{¶s¦“…ô×v ®v+M?‰·ýÎ5áCÿ3%»—~'.–LE2«êaÞâ‰i#… ­“GîRÆIÇÚa,ÞYòX7D*ß7:vˆ;_/Dpµóˆ¸-ÌE€Ä?pIU÷^¨ˆ›„yÒÐ#ÊPv²XOšè*õg(™}aõ7ÌàFŠÇÏÂVw_¥‰ËÞ\ªÔ[º¢ØS•(2S&ã‹7Œ_Ô=À¿šZûþ ®Ì½Ò°·UöÎDÁIQÄ}5ºÿž€ÊÉV6 }l¶9$_¯·]<Ó:O º•©§"zOä2..MÚk1Zqýx´˜mä(#œŽ»òê‹1¿Í]ùæI\‘7îDH:ÌOˆÜ‡èø­ýs7æÛe·\ŠÚ.ÚJœÝ:n½™˜W™=[;§-ß(=ƒ þç_#Ü:Áz¡~kÜ¿ªö3¾ÌÂq K7‹=2~Œ£Aaó³ ×)”™*¯I,}{pºI20šÕ—x8g–<±£6)=g­8c¾{¶Â)ˆº2]ºJ­‘£T«½‹ AÈCåì‚YÊ)wvø7WzsïMS´ªÜj26¡˜K¾Ä–­º’§DIx•E)ér'ÿüS X°@hQ*!ú ÕÎxÜà|¸B›.f^Þöµµ­ºÌr¤xØž èG¬ï¡MÄE™…]¢š1ϱà‡-f÷üDùÊ »3D[‡>HBÀÅC¯l¥ë KÒGßà^r7rÈ| ß}ÂÖ;Ç=qÕà eÄËþ¾8˜¸€ôÍŸ4tPR¸– àLd÷_¥-Q Ý×h™ÛGû´1à—¤†-®*v¶„‘e¾ ‘-÷Ïkm˂ǴE8ÆÎŸulÓõô2›þ%+žÇWo«8´Ò‹m¼)øã€E‘ „+}ñ8ž« Z´õ¹ÆY–ˆøkþõ[d'ŽD9ÈKÔN«‚÷a¯`§né©Õ`¤Û|ÅoÌ`}Ûì<Þ øRQ%J;‹7š N oRqK^(<±Ya¤õ w‘C"I]fq¬$Ńåk¢¬pü¹‚¢ßÚFxÚ2î$b¦ÁNÇIë (–Å£F’R ¬¶dÒ»A“7Í‘ N>‹‚žÌúO‚=bezçÒý%éíwÞc½ä&ƒu¨†fríl(|ÆØõ¼5z U<©¸H,èKþ{Q¥8uâÙV{ýef/Û@|³ËF-í³€ (Û×;Z±ðZq½ÄAŸ/j®½Kâ ÀìŸd㽺g5…¡óW¹Çv@á¶“ Øš˜¨Ì7¸+®¼ã¢£_?@:å”#˜7…íZ‘þU^@àuî熺Mµ™fs `\ög-ÞVD^ç È6%pnÓºK6gˆÑI¤ø3/õ¡‹­nFlüA«¦&y¬ètÀ„¬åe|T"·³ÃÝN #ó¹JwÞôB{ 6êTbDP¯Ê1vU ݧEªr~‚£«ó{Ч4›^Åz|+5êçæU™Šc~õPŸÙ¸¼P…÷ÃÛOæFu½°gÈK_¼‰T´sŒÖôƒïNie£QIKÿè¯kh¾@Clk¹Aœk=IMŒ\-* ³^MK=C'&€ ~:÷Iþz“l‚`rCß½§ež¿·…­C"Làq¿™Ë~ö$ÿ°S¢éÜú›öe±•Z%†ÚLšzH´m6‡Œõè°œ~HnˆÞºZÈ~\ôüäru2 ü¥‚y×Únz[!¯a¯§JVƒØÙ0&”´(=ʇéÖ”}r·5·^± 7¥¨ÐWõ;ïT¤ é›,!„Æ™!£Rét>š- ý]^×ã¯F“ô¤óz&¦ð .Y]sÃ*ŠD+pXü,Ìc}29/ÅØCâý¦ZO&«ÞÈ3y܈_yq‰žê[Ãü—2䂜+>©³qÔïåeZ‡’§®Æ¤È ðû·nààGEÝݲŽJÎ÷°Ð¼®^ ±â˜&ù•Lþ‡"0]Mz6Çø2/‰måŽ5'2€«IØéë¨ÓÉe~ °üiûóÝð‘à±Ï)úìiß@Î@Íx\§!öQ¨¾g+¤Ãµu"gÊ>VôþË´³4¼†Í¢ô|1Šî§…’Ãòr!b"WzÃ[,±ï>ŽŸ^êÄ„²B¼CQ´ô"C×"Ë3Á Ð^”þ›·S»ðÌUôo»S’±jGΑ[‡G:ñy{õþ«ðf/“!ÈþòšØ-D¶Bþm鉪U+ö™ cróŸy}3é^”í¨²^gSÌX `•ò–ëÛ>fU¾^<¦Ññ`Å3—Y(Q3B GZõ"Û¯9ï—„„÷Ä{ݯ |Eç$Ä`ÉÓF”’;µ¶ŠRùY&áD3‡¸â¿Yf©øh³ÐÓAúÆ–5J¸£vù·ðÖ'páÊ'3÷Qz’ ayTå“¥x´ÿPwØ éDö«d*Rà®ÒÉ¿\1J˜ÎU©zLí ª– ëÂë&…; Ѐ¸9ùó³n¡·}öµ´¸˜4ZÙ‹0Bè<¨ÞƒZÉ¿UøFèIÜ•R‰­<ÈüiÌÄ‘¦&ÆWô áxjK§àcˆ©I6•&iøÅ]\ž–¢¹ƒ¿/èžžå„_F›†äí‹Æ~Ó¼~§þ׻ݵð‘dé9Ňq‹l‚£™‚M–´`µn™ü  Ö˜qªTƒ7æa}Àò>*A<ïßH1º_¬Î À¸IÂg‡\íÒ”Š ã`Êòû[`DbñG>Œÿá¯o²·ßäǾƒ€ÕbY<Äpp['C1>êÐIoY‰€zYã¶Ù_º(è»bü€ªr§ÓiÜ»éè̉úwºu¿ ’Ì,Å,LyË?öËo˜ÿ]æ'¨³EÌÞÜ Žm]Áâ÷qÀõ`Ÿ ]Å<}=øA¤úÚtè{ù¸‰ÔvƒüZ³¹s°S-gòÝ¥…Ĥ‡iþ%p–1Db¼@¨"œÞ…°×9w¸Ù}ù%wêÈpv÷öà‡É1¨$b:óD*@{ê’þXÚsî㯺Q#Ì:ë¼_UÉ„á% ˳HŒ }Êù×dv×Ç¢V"ú&Ö4€7o ¦˜X$D•©ü7¼ÐôªóÑÉOŠàÓÛ“ø¿þoÚÚ¬ÕÞU’Õ¾Îõ–u‚|sì¾kbU‘µPBôã\kí‘hxá1ð'ëè_»^¶>`[§öØ ñSOÉ"Tè2çkuŽ\{<2<ˆ¶lå”Ò@›í3}-ÚïàS¼×„!e“‰~ñÙ ƒ^«¤¨c(:ÃÛDÒ‚0wô\«k{B©ÔoqU{¨R¥`\ZqiM‡05o¼cóO¦IúGÆ…æDÅN£z`s<+™ &+©Ý×éØúµÍõoô=›.Áv¡h “Vè‹é‚Ь@ú¨8Ø"Û Rp‚…§Kg‡•Ø}YȪ–ZívôRD'µ¿ò4¬´!ÕöwýD6Ìdm¸páy±S±×Q þ€àÜHòž.ð˹ØwWEÒ3s" ¬P7„¯ÛÝáùmn+šì¡¢’L6Öžh÷m{™µbd‰_Fb·®‚CÞ¥¸þmV^˜°pÉ\­c–êíšk*q «\Sqìo#6ã00P:_!{äÅD4ADK7k¡¡ŸŒ³Q[PDC¿ñS!x! ´g܇ BD~&Hî_”õ›|I8fRéÅ»Ù#Ξb}òús×Fó¸2‡‘"a°MÑߌ°rœ-|’½U>û–`ïÊn¶kÝFT3Š¿\þ Š9§œ$š£ˆ9ã¼:~¡£}v!Ù‚ÓyêZó¤ó¶Ä$téEã âÆ¸ûØ ,b5's¹vu$ö›vi†Q1iH­r‚ºOËUŽØÐ÷mßmžjD†ëª¥²±»_Õa¬*'¶ísy £Sj U<–>=‰É(ù(]ßýg€^€ *kúýOŒßR:2­³r¢Áíì¥ä±F~{Y…N¾úžî‘}!÷›Ù›Õxþß5Û'i95-åk¸±ì ¶xSÖÆt§1‚!iàÝk0Ïõ?S¨»â[9 î3yVl`±où?„Ö¹ E ^uZ¿{£#±*ÝñÎSÅê¿Ø{ —åæ ±‹]ÊyÓéð9eHþPÈÒÞÔ»"ÙP?÷9!ôÂ1Ù5(F­üó|m·]žÃKS—l¯ã¹V -iD)Îäìt|ŃÀÞRsnX'ßåÕ«—[œë“ É)€šeŽäD¦«»s]y—éä³cØtý íòƒ¶öexcÿ^½q)tÀ·P=IhDíJÌãÞLì+**ÒS„X,X!ËÛ{¥õä‘8Û óbªiÌ-r%/L‚ªÏè]ëÅÚeÒáê‹×Öküµ»Ó$ Q–ì:3ùªa…x0Œi; Ïjh¶gĵcK~Þ¦ü½+ÍZ¹ç')£ ½ AÞÏŒYŦÉ8‰˜¼|Nå±wà¦úœÖ;ëãU\ä£Z›ÿæ)-Þ˜CBM'€¾¤ñ3—0“ïxêK©ht”`°Pg&!›â‰ÔALÚšEjÙñ‡ºwÍrÝÍTüvR¾8.…ô¡s»,0LyÈAûáÎîjÏC“÷€H<'ÊÊeÒQsje–#¾™ ·¶÷v•ËT‘Ú”o1Aö×kI@èʲšŽqÈ©ˆ¼¼ÕÍ'žÊÀÍA¡î(@›Ž3Nøñ7Ý”*$Øq;_ý2)îÄD–²&Ê`ë³L "ËáæÀòý£Ìº;,‚ ÐZ¯gOÝ¢Êg@ÿ­h4•>!ZÅ7öÑèNÿÈô“˜¨ÉfIó‚$£ 1%ÀúÕ£]gŠrr‚•ÉÎpfObQÖæHJ0°Ód(ì(féjªfz[ëôäÓQŠÖv±Ö)¿ÕÿXÎG`‘³q£R¾UxÐ ×¹®¾¾¶#8~õƒ”8œ-dîa&YÔŠ‰³ó‚?$¢8üŽ]xÐ5,î²EV†OÙ­”ž0ŸÍ·à¦ãÛ="©­o‡ ÅKê?çäU¤œD‡”ˆE'S·ºàEã¨êµ‰ØÌ.î¬âyûSý@Ý ç`1}Km@­.NȨÚÎÝ» ŸWË+³ìú¦Z?œ¨ÙÔb<.˜ª|9GËû -•Ïä‹‚ýí¬#úTš7;“uëÉž¯5Õ©m«%þìÚæúj ×i%Ü‘ÂzÜM}Ã6¦eTl2[Kbü¬N ’ë³¥Jûf£ÔoŠÌlË?£çöT‘p—E ¤×2cñ%.'¥M|(Øjœ00³'U÷9:Yäá¸;×x¬ Ïv|À9þ>nm,AÞ ¾Ðgîvlp+aão72TD Áú²žÝ‚ 0õ@9ßë3gåÅ~ðl’“‚6eÉ„.¡M 8@¡–§z¦,:`v²ædâc‰lS 'g>´á3‰t?ÐnÜ’­’¹?Q–Ü6Y-;ëÍiÐ /ÚV+çcH•ΰ+V´L¼Ú% /¶JÒeªêWe§4LEO“Àæe}BɂދÆf·¤ýÿ}òÊ¥ñ0šßw´©›{¿G²)ný.›DWŒü†Ür Íam.MQ1%l;'©wVXŽEA1Ř Ø5¢/ÞÛUÅä¨å‚!æ1r˜“¯¾az|–NÅþÓgQ@“ôæÊzóÞÑêAŒãâa¯÷mÚÇŸ ËýðbäË%¢ ­«…›æ¿à{™‡U½É‡z‚oϺ4?šÖÌw>6–ç` Ô¶ó†xJ¶?•¾õ@ðbZ‡¿ NüY3=ÓrCÄMY#(*²o 1^ûùX ú:M[psxX¼•Ý_ Djo ª™¨Hìá®:-C—ȦÑ|“³øäòÇXØ´ùløŒgÉO¶Ùü"†_~-5á9Kظ0ÖbM h$ŽËf4?›è 0èÓöާ‡ –¤êy7.ã´9–ækÜ뇴4¦W‘Fg” ðß$(ézro}TQ?WuÝÃ32u©gÈJ}ùHø¡öVœÁ׌ºÓQúÌ©²‚MÈaá-Å:økÁêGë/3 ¥‰ÆVô(ÌO5¬é×5?:4ÞºV«Í^$Jä‰)’Ý€†¼éx‡£ÓÅÖÃmw¨,.;`¥½îý&á@9K«@ÁÆöÆþ¾¤” @ÏÜÎtÚµ…£+§ÄJµž&@DC)~ÚY­â‰·x¼×z7ÌúÞž…æ¸}–+ôÙF9`‚Q²)¥U7 îC°±Y£ìlè%„lÉEjÉé8…¼cK”ÛB=ôê 6fÉÆœœ{7#…Ýæu9U4»€õð×r>ÐX¾äœ*ÏS1Ë‘u(•Œ×d¥Àû¿å¢QàÎýÔ˜Ì}S¡™ø©×PŸ¥“wYÙHSÚž£D.r^(qá£Ç±=VíqIíŸC$W“`ÈL<°N9ÇoçüŒrxàÇ3R×åšo±‡ÈQKïÛ•.–×4É/»ŸZ¤Ï:"¬[}­ì"OŸ³¯4K˜­PP+ƒ¾¼OKŒ+æ»æYõ}¨7Æ :Ä>ø¥`/1“åd怟^¤ÞÕO¸2Á tô¿€ÍØs£iZä ¦§YÉ€f航Û!0‘s<åúá`ôF=òîºWêhn±çb[Í$ÚÔ¼áìl–ž{ÖóÄìxrãQŠ;uäþu¿ÌéKÔ_À˜Š¸¥êè4”0Ÿ”eV£00Uö;­gßE %}$ÈÚ¯1˜ü#L¢º{)/’´ÖµôuS§êáÚÁþ–,ÖAQ=H‚ìôÛ°“ ·Í` C’M§!A_ÃPŽ5ÜgÙ舃~dèk›çoƒzûü™ E–ý tíäødï‘c?Â5?–ÑÉ·×ö¤Ö¨é·ñƒÞ.þ1 …ùqïD¹4 Üâ^ÈSÒï-ú¹3Í®a?$f»¤þ¤ÌÈ9bä€o€ß ¾áO»òMÓí-›¨tq!¤Wó„œeèBg©5Pg˜tÁGÜÁ%iW/ÌïR>ÒºˆŠ×t€•u±›=›LKšj»©ÍqÄB~æ†mϛˎ%Ú=)æb¦«3o(Ún°«^ávö|®*èš»drz/må+ .AGÚ$3ÊF‹K³ ³1úwlÖ¢R…¡ÿ53®{òý”úô[< QäéB¥ðýµhP€V§âˆGÐàdã ¥t²¯W¸U«¸Í—MO%ŒhþJŽÂÓAoÜ=hž Œ'B¬;A¶,•ÒO0úQ**Ö#o|à "[Ì{ôþOÎÍ jŒÔ‡éÇ#5ÌÕUäw8ÁllðHÕz#ŠÒ5CM;Ù§KÄ(Óü€tù£“„lm¤MîY˜ÈUD.pæÎ¨Q&ðµ-?eÆiMuCÑ”éw¬í.0ã¾UΈ¬4LH<ÚkáaͪÉ9:ŒRZú©`Q"~VìÁ$«¼ëBR€=öÂÈ 6c´ŠUùîš;ÄÖ04ƒ\|ªÕ4l¿æGCÿÕNýsŒ¿ Ö™…†£æ0€4 ð3N_9,ákzxvÝF‘9TÈ)ðÔƒáÌ× ”.oÅÞ!¸†J&oCQÉÄ·ƒìC߿ֺ6®žnr½eîľ«sK_Þ¤¨gmýp¹…µû‡u?Áõ¬;zÇÎ Mu=j R¢Ðì{a:îDùŒ{×Ë5*Âì%£õ@·¤¼M$i„“¯,íJg"ÖÝmªuÅÄ%o“Ò˜»ïJ“7{_>ùq«›êÙ“ô°Œð°pÇέ„?Õ"½ƒðe´ÇȆ Šwa´1W\P¶bå¤áø,fÔ-‡Ýü±C^sþÛEÂJѵñ™DfkÜiŸçÃÔ©â`lžùáñL¤$¡î}šw¹˜5^—”·µw’G \OÿRÙ"Pï¯tðëØsùl±ãe ˜c2tô¡žó\6þiÞ8êt6ÑŸº¨›1yºJZ8P>㙇å%.j¡—šE=@@¢±W)kز‚ õåByjk :Ê`)ëš[n8ÀRR#Ƨˆ^P›C­æ†Û÷-;£ bȽ†‡ q‹©.^|}ð®,pÉ´Kq(‘‹”uÂdPOÏEú!¢·¶Úz¾ Š$l ý-…½…B=Uª#ZNm³r-®ëÇÕ£á‘æ©Ñ;ƒðå %tªaM¸yvªT5ŽÐ>’„ê’‹Z—e¤Yë !‡øS *(?=ØuÃw‘Ž›?^±› äìIFÄU³ÔÂJRUçIÖY=ûsèWkùüíŠ/hÁH·ŽÌ*ðž2oÒ)è]¢Ù”#ç±E „NĆ,ñH¾ÜT=ê~%gÕ0£ã§©ßñ>ÑB¿¨•›%]$ãbÃ8°é‹œ¸lõã‰çi…w?åËCWÑòðCÜé¢`ç¼ Ú½éR_Å×0êÓ \¤±¤ÅeŽWµÇfè¡Ýó_: Ù¤“Tµ:Ž´QË MÃË‘{W]‹V­„€ô(iÝZ$FŸn}|ÆÄ˜º¾m-mÑ`œ¦™²Uᛒ TÛf¥FÓö´úý¹Ùú¤Ê)—ÝÖ®—꺨ÔÆOJ3¯pÏøMm¿š(´ûÎ_Qo‚ÄA æ D¢äó˜–ãõPßZ'ޏáQ¾ÂÔ´Ó?µŒ+²Í¾b|£VOÚüØKo q1èg—`Éð¼³Ýá’,âã.õ/;Z2Ë#XzÖV[I»š2P~êcí™lJví«L@’>~çœÝIúùË#Ê:Œ’Ød¥É™9\æä<’žtßHAï)$×6’ pá‘bò§#Ï•² ”³§@Óº>ÿÓ”òz¾ÁÜbèÛå<§™â½T6ǹiÐ>ëµ.=X{ ËÊ6_.±ÆÑ;ÌÅ•¢Ä2a˪7¾¬E}v[¨EA«ÝèÆ,€Ö ê@/Íæ·ú eÕÿDgÎ endstream endobj 84 0 obj << /Length1 727 /Length2 12535 /Length3 0 /Length 13125 /Filter /FlateDecode >> stream xÚm¹cf]-\]¶Ý…§lÛ¶m[OÙ¶mÛ¶ÑewÙ]è²m}ïÌÜ™7â‹ó'±väÊ•y"ÎŽCF$ntQõt0c¢c¢g䨈 k2±²2éY`ÉÈDœÌŒ\¬ì¢F.fÜ 3S€Š™€‰ÀÌÈÈK±wðt²²°tPšPý;P·52µ²³r¨ÛÛÚ»Y™XxÝÜÜÝœ]é\ùéÿ9¤bfp±4˜[ÙšDµ¤ä%”òj 3 ™“‘-@ÑÕØÖÊ kebt6£˜Û;lÿãLì¦VÿâäLÿo@73'—ˆ™;ÙÛäÄT…ÄäUb" ª"# )@VòŸã@gîÐf&ÆÿêŽàò?ËÖè–ñÿ¬ÿe<þcÑÃ21L­L\ÆfV@X†é&4·°ÿ'lêêðßÔ?„œÿá üGC*€©™ù?hW[[y#;3¥ˆ½ƒ«‹™@ÎÞÔÌ ¶·5ˆy¸˜MÍLÿ‹6²³²õüÿÅÿ„”‹Ñ?z-þQñ?!+gq+3SE+—$77²ýGªÇ5Ìþ3ŸúÏéJþ™«©=ÐÖóÿü§™—c•WÔ¦ùßü;-4±7µZT\þQÔÈÉô§¬þ³Cÿ¥òß0ý__ÎÈÅÉÊ ÃHÿ¯%aü×ó_Kïÿ¢„…í=¼é˜™8t,Lì&v6f›ïÿC×ÄÕÉÉ èòoÙÿéå¿þ¿×ÉÌÌÃÌv}ÅÞ„'Ä:½-¬ÒO¬x® ‚fnÖPf…éÇêLßµŠÕ°¥©ÁÁ%î*n;<þï@c¾Ý‹©»Vb£x3ø£©é¢½Ü—R’* ¿º?oJ…¯úWàê8v&òàב·.™ëAŠÔÓ¬ÙyguÒŽå|(L1†]¿ ·Ö€Tz¨YÚ_ðfij‘ç,C‹®Œ^öÖAà ‚wá¯Ép ,‹*µ þ>uažm2‡ÐØŒ?Œm9¢±4³ù…U5ê˜`ß9©Â8Kó5×ÍBx²ækUÃuºvÆÁÊÕÌS×OƒŒ3¦±BËÇÑ_ špæc÷µ·³b»Ú«Ý°MûÛŠüt„ñ˜gÔÓH×£˜[È?ÞtÏ#XE¹xWKãs–‰»œ÷\’þT·ïÂ1Øøkê·n~³Ü¶Š+‡;úb ëÜ'åÀ\ã]¥A^H­Bà‚ $ëS}JôOßÀ'_©&"¹ÿš #îœDÍ·ïßkÐ’%ÜòŒ¼b……îwGŸýu³D4y¦ÿ o._ω=èfZøè’ºŽ§1ŒÄ(g|Ó&AÇ„¿˜aÐñô)¤y1××E¬LXÅØG7Êï`fâ¯2mª+´ ´úÏ"âË~ܳ×7|XT¢wRÏrh‹,¯¦uéå„~Ës¡¡qv¾å„„9Q á$ÆòII€Ô‰j8 ïªJÚs… –Ö3¸)¼jüñ+÷w#Öªñ{Ix ³ÈÇêøWɾ[,Ä‚gFŠŸDc6 ûo†›­W5U>PK¿Ï?Ý‚¥Ï=$ÁÒˆÎI‹· œ`6“¶öÑûƒVøB\Øýk'™ã óÝ1ãÉÑ=ææxÆÑ—Œ›»Åò˜öËÃ6¯©<À‘kóøl¼oƒ³«_9aIPøÊŽ4!ö¶‰ZwÌRSó³Tˆlwf³þàØFò‰vQW. •;U/<È4¾4vô¼ÓusàkwþL],ž¾ù^·÷†Ì¬ðmÆ…ëÉöö6ŸÜfZ|Ý4Àv83Îh"æ)ú“š<¯@À¹ÝwgÒ±ŠnW´•s¿Gttƒ¨‰½°èª…ý–Ä0’E`~¥HŠ÷ùT=—!HÙžè‘$‹¹>Šgµ%ŽÖ£]lÁe¸% á ¬ XTü” ×ùŽè$æßd\h—„¸=N¡náô }Sð«éZ 6#÷Éb±H9Ü2‘ߌ©y›kò+ÖÙÀnf.#ÁèAtØÆêƒÄ˜ÞÄ'ÁzUÁž)7‰(ønÅÛ¬‡€­*îpùПò{v Úm[;ã™ÅseúK d¢„b¦$ÝêÎOt®À‘Qõ£ NÙKº†{ò‚ó®p‘ú,»"ùÖ«³¢5ðèÁŠ×…ÍÇn¯|ËGÃè·ÚÁNèÌH»Y®ö2õ¯‰ªÏíº‚—•18{¶×a潇x<¡flÿ^PhZ‘_ßÂA·ÚÖ¤mgcÙx 'ž/Øš?kˆb¯uó8=¡º‰KÊÕp<ÆM‘ó©‹±ýµÝÊÛ¦ì¥o‡¶óe^U«Ai„ÂQm´‚ÿB-àÉ£åØÊ=]æµyVÝZ{òz*Fþè¬E“ÒƒkŒn¨[Ðe„±r;6…šLúNAÐ¥/pð9ë$te¶eXŽÊF%%·‘@K_Bqtz~o…H`•ˆ’Ì-êËœŸ€W4]– (&awˆáá«L=ÍOE¾f¹ŠSt9g§IÍÚàKŠÑvã6ûIÕjèa6jaêRš$;ê?B£þv–dµ¢þ<§Ú'ï–e"Œ†°uê8ŽU/"´:eS#ƒ‰Úó_Ö ô»þM»«šâ× µÎÞAiñpM}_„ƒö£ö÷1wœ_‹ó€¡mtPªÓ «Ú؆B¼²åDQ¼ôKÝ>â£Ì¨Ûž¾XóFU,ÀAuÜÝcMH-†¡ˆ/”ªG‰u°kFixB(… šGD5De¢'×äõ(ƒ°¤«tÕ‚(öšt­s¹û,欣«d•=_6VÜÖeýA…k©¥VPë_ÖÄÈqŒýÍ®->^Ò H-ô ;±«mà´wÛŽí6ûŠ7]+𹝲RÁT«ÖÚì¯ Ò1Ñ%ð£‰ó(—í`ëöâI0 צ@­‡€¤] ­Ûü/n“~Š’Öàƒøxsq­þ9Vi®è­C­EVºƒUVæU²Eî–Y ×ÁTšÿ{ÍÜx½ñSAµHÎåeá„4e©Ip§ D‹I&ÜF"®f=ø'µ«j+N¼lZ7Fʉæ>,ÚýéÏ|‘¹<ɃßpkyF[,uI§tg8”#Ë,á¶²û§D¼}@ZAÈTj_@݈iÇ'L,¸9|@Ë̓­Kr‡AGÓQ$ñ³Ô«‡ï—oÄ‹Ÿ>áÒ-JRž<´/˺¿¿à1%*JÓù€!Æ1AµÍÅ `ŒÙž‹ÎLu<ÑELÛtú&Ìv9™mÆ\N¾L%N^ív…¢Uêg ¥-ÄéaQ›0¶h”C‚ejTCXGðk¾aL¡…ñÈw¸àC³ìrs  ¾9ò'Îé[de©ÇórÅ©8¸!" wÃ7Cnq÷Â.õÖi+RQæcE~Ö ) äyV:•¹cà"ăœ*ë)ÌMâ³L =Ð[V·ï±‡^‰ê°­Q¡vn§ )¸`LzF ÃÅ­F,I¶a®DïÃÌv8ŽSäÂw¢Åƒ[²ËP×”µ¶G2W¯¾ðvŠN––ûÈŸ0å\þ©ÑØ5žÍSß_./+î ´:Üâ^¶RvúòœjPßýÉ–£ s£VNÆ)èõœX9”}™Íö¼¬ûýGª\J«ô?Þç]¼ù×Ëó>±f–IÜŠ”Ö¤Ú›û·~þòæ)Ø$~ñœûI7aU;Í'"ââºóº$µéˆ¬D\þ¶ÜÞÅ[rH©ñq£|y+CK'зô›auÃu[A£@óv–.¯ ( Míœ8©!&Ó­V€3šáC‘ ›•ö’=e1‹o)·+\°³m`Q?YÒ¥7‹I1¥Ã‡¥Q;¹qXpÒ-Fb_O-®l1xbЊ—¯Ô²YË}¡•Ñ[UKœã¼óÛ¿Úç/!4úð[fUûS¿e­Ârã—£‚élbè1"­xüÒº›—чƒU1¾p¼øÐØ/ª¦£óhÚøÞ9$õ\¿ÿwÒ9û¦Oz‘^×0kˆÔPû¿Æ‚Ä;µ d]ÄÚ‚#ßs` C¨#¾c O2² ¸OŒÜ4Aöo³Ò"!E©òm ¡àü«¿; _´°Ä,iŽ…wZ¼óþ üFž¹ñ°Wм46–®ÌiÍî+nŸ$ƒfÓU»­sNnNëÆ58Ê®8`MJ¡ä q€å"Œ¤flœ¸ ®es#c\€ÀµŸ…‘žîBÑñPâeŸ¥îªXTrß0WÔë;˜s º”æ’¾-g”ÎJoËÛË ©Âü­OñŽÿ¢U/t :DøâÌÍÕ®ƒKPµéêÒýˆ`6xÂ^Pþ°þÛH̼ j€x˜A´½E¾^‘ßã×) ÍMÅ»($ˆaÎBê8Áá<îÈùF‚ë´6ÄÚL¸ömPB7õFµ'µ•(x2X—»“/×JfÂèÔ¦4š/ÊÿÙÿŒa&ÎEÌuçá5AÀ »ÿkm²Çì"èÛ¯DHHö½“Ü I%#¤°|Lö™SÔ«6÷³Ú›^RLÈ?Ÿ™¹èkUMÛ 8„*2¾A°|{x³ï‚’Aèô|¥¥Ü DW`¾²=v=î„,‚1§¹–¢½ž}´難”½[,`X®•C‰õ©ò¦¤‘o€1£Êu°(s#I ræ÷=ïeã·¢Yý)o$ÆÑøÊÔi{áМ”¦çõóýg°Ô,îZ²cqÏŸæÙŠxf!Ç®&{pY÷aX¦lÏhÝÌéºgVì(†H¹MפŒsbÜÑDu5ª%Êðà© Î š‚6™Ä?ýžB0¥Ü? ÊŒN×&ýk¤€ñu‚)› ÉèýÛ“ m°n¨Œ·Z§æP°“çEéa”jÌAtû 6"Ï{(.Ü®n¦–Õº€o•„™XÁŸ?}k@ïQZ6c\¿‡ IÊ&±Ù0¢0årïó³ì–ΰÉRìwžÃÚ‹€øÔšÈɱk7; D.z~]ý¡Ð—‡7u)ÜÖÄž©r·=¡ÇºE† ò) ì@²-t½“ƒ¥“ÂVq³/ÙŸàTø×“ »3ïý[ƒöÊa!Ãû<µ…Ì4gU ÜßÍÐ?—×;áºêp­E"Ü9©,¼M¶R!¹ Í€½Îø4 1ÁoUbìb™ âÓÔðÈ)ÉÊÁÎ&¥õ^1é¡:³Æ°m±Œ#.§¶Ýuþ˜í«Üð{ÀÞ¦rsôPsŠa}eµ˜7ÇØ&Þ–ù ¹¸pymmdŒÒ8Í×ç!bf¿oÆ×ÅS´3y9h€¼e`‹3K™·h0DqnxüëÜÝä/¦'*üðŠ”òŒýuå5õ+sŸ/]§‹»³Äf) x§t]«¯ˆ9‹îoóšmj‰¬ï–ð«VŸ•þ-d¯¹f³®D ™Ÿü­ì=‡zÃÆ.yþ$„«»kÅq¥ÕNº³>Æwq&:cr_\À»¨Jk`‹}ôÆ2u¤ô¥¼yŸ^D¾žsÆÚ5âý=«¼1ÎÏ_ vÒ’m7n,¢)í¥¢….Øèá™àz˜¸ý 2‰Ræ‡T£eƒh¸¾ ë«ÄU{û3oYv㢥NÌ0©'Q¹ g @9S<k¤0=É·F¼ÒºÍ ßņ~GÄ]ÇË&ƒÅý¸ÆàQ;­Æ©©'„/fnŽnÝû‰Àa±+©\ÏßéÓ‘ë5 >Áx'_ÏNäy7%̺y׳WÙ{~Èï7ÂïûaÁËùÕ©hÎÌná˜ÃìCò‚[U¶ù}ãÚ‰™Ÿ¢öR›mç)qýÂäfœÿA 1èÁȵ!4³‰ªqyq§rÛ CZíÑ»ƒåJ¾Ê=rJÞàl‰Ý{[í‚>‡=~ZÜLbϱëi•é|ÆUéI–p›Ñmßj]Õn6M½ìG‘çNämõS‘293øúEÓ®âÚâf ßEþQ6{JÂz]áÁ-õ„7‡­©MÎÎ[vÈ);O'V¬ëèž)³î× Ì‚kïxœqïË $Vt–Í `,Ú…ÇôS×þ-óK÷Hã¾ fY™BÍ98ŽœSyÞîâ@Ö®Y³ ]•cõ6*2…O×V¶ÅY²¤–‰D¾ªdytò»] Ú3ËlFFÝê ®qãX¤ì¶Bóã°µêê:˜—G]qpøTf2QP•@Níþo¶¢[Ó6„“NÀš’ ¬’Ó_‡e÷!\ƒìö6s&”qÊØ•{¥ª¦}»,˜s¦:aMv!Ì û©ª7͸ÜunËôà$tã<¼ÅÂÏt Š*³6D`o ‚¥ýðǶËOsaÁ…Vë€æÌQ¥õ¤Q¤ž( lcŠÄȋԸ¶îU= E»þRzpU_ÿòòBÿ¥aöÒÌQ ä¦[özàuy‰­ÊgôÌ–˜ÉpÞ›Áþ²Öíûͯ.¢"8ƒ Uµ™ÁòªSÈ sÏß’é¶Ü0˜^ÞA*|òPRf2°!Ìi#FxxIŸ4ˉ0XiY¶BD”›¹Ïlî¯4b&h›øFØäÍÄȲ·WL2L©vŽÄ '{Ú¨„SzÌ9=éETÊ2Öx½Îei-èÍžÞ×o®Ï=%ÚcxLÉ{+“ï§Î¬­4§ë¹ßeFøÈ´Ú@$gÜ=ÍŸ-N}s=6ø§¡Õê³Ú¤Ìù|JÉ”þ ÿmYuÔŒ²#ãsÍgÜweuaFv€|ç®G¿XÅî“74 ,„TÊ0þ’VAì5 ÈÑ¢X"ÐÅe2Í,6eÖªSa=½²¡ Õ-ý :0µZåwˆžž;ƒ%ÍUˆþBïf¡Ü“·ª$y½bE·ÕÆÆƒ™÷Q‡Ÿ«[]‰iÓØ»äËöîš-àÔq{ dMú,M?­ ôë¸dh$¯y³ßë¬ÐÀ9‰Á¥)¦t3hþ)Nãcž_¯Ä›¡ôwL_h&¿µ…±ØN,wª*~»"˜i$ëð¶IÙäè*³6«Lš&y(﯇Z΢¹wtßñæ˜·Í Ò³M9UmdÄ+v…‰¬‘ï<5I<Ðn ýÜÎ3í$ëš‹ÁèZj<4èp‡¨ŠŠKBÇýþ}^A÷§àQì†u“|{ ‡ºÜáWìÉÒæ…95´ ÖûéGòØ-fí>½í&/F´½£&³&åØ!ᓃ)bÛÃq¡ªurûEQÅ~¥¤ JZ0gÝà’ 4f¡|bJåào—½î‰òë-k.^Rk·ýó«[œ„þöú:F:@Â:,ýU@Ðuƒ³ ã½)8cæ«™òGÕuÍì q¦Rˆ!½`‹#$Ž€ˆÅË'¸mÝÎ|éÖ[q2ùâ )2©+8Ú~Ï·K%«Ôq„p0àt#€½÷ÆqïŸî‡1àÕ†í¶fxÊŠÞÙ³’HOé—6äßI»DBV )ôx{öd­ëí²¬ÏAÚÔ.åH7è×-Œ®¦Œ¢„¼ÖúP!Í„Xúº3ª=À’Þúç¯Û9B4j“z"¿ÝV˜Â‚šŸü2¯{1.B,—iÚÚ¿È$Jói!xP¿û¹ÚÈÉy)Ÿo ¹Lˆ£Áá¶s ÝʃBÿq{ ÄvÏH5"7ß:D—¹î6 $ݯÒi8£[Ú«ûÛ$¨´' ùš °\Ž@˜Ã¤úüa?—…È-Jýb$\{äÈKg S"JtCN®Qc_zí4«r¨6÷ŸS³Ë·f^];^̆D” Hn‡3ß5luyã~<Ïüò°“íQ½K’7jÛ»^µ‚02<ÉÇ#^ nQ‘îL˜‚\ããÜ÷?ÛGl0ÀãnBsÊq„!+×è×½ðC9T¾Ú:.4Ò_ •eã&oiÃ\\sÃÔ_É»16üw+ÄB挪\‘”vo„agÊœE8WEuqŒÍpçõ“ÖúË£'ó)Î8"AíbJ6õmí¾££Š§Ž³k‹ñ?ØÔ#×E‹1£R`äÍîfØ¿û°"Œ@Û.ôOî²ðHjîXçû½D‘ÂJœ¹Ž¿èŸZ²,°‡·ƒ¿¾CŽ£®q&?ËÜ6)A„æé8ÅôæÌÔ‡¢U_ìŒÂÆ9”1šË.› ?Eòóa@ÝdXôA/6Ì‘à„qàmðáNþ²ª8)ÈG]V(Ÿß¼Àv¾¾8XÙÈOнo'GàQ!¿†Ù ´-k"Î߈ºÇ5s M&8xÇˉÛ‡G.æ{ùϯpC §‘¦¹•æ–B#ó¶RÎõrhc*‰{nr($½9´7R¶ô ’CTá˯f\œV\åêi^;5”CšfÕ/Ñ_ƒì¥+¾Í?`£û¤à >JŠÜ8°[¯Ç¬wÊ1>ä]Ê*Å3ÎÑ<ü­Ã) uà„ ÊjÍê!£„Í›¨8 t^ñ|œ{sï$õÞfåõŸšË20|¾]¬±=¸h_%I´Eñ§ÛÚtÒÙŽ… }©9¥šÏ_C9@"Té¡ÑPÑ)H´V¿îi’=zÎk&­?õ=«ÖN^ÆêެȻsåçÄ«WƯOö{ÚZ,XÊä{(î‰S…yqìX!-ž“€Q‘+íÆÙo¥•jÒë¯e>,zE[žãtöm¿¹Û~HtŽÞ²ç€M˜î×éJ$Œ~$­aA[ª¸“ÊpAúïaC¡WÃÛG2­O£etwÊÎT nŸ µ3ÄB»6µQ©ºÁŸ“Rž»/´N“H¹K&»Ydžµ*ÄuD-E˜ÕoeXùš|P8» Þ剦vCÀ¸8†kìÜß<å?h}–‚Œ—Ѥ+L] WêB\v Á´Y~æauå¶w5w5:‡D‡‰÷<x*0ÓƒæyêWÒÄŽ…Pî‰dxªæSxÄy’ËKfÊz~‡ híù¿¨=ëòPáË7Á¯ wxcƒw»¾J¿ï¬+õh¥â1?¬ w>ãˆÇC×­f°Gñj’ ’S!Ñüð†ß¼åNYÎîFû)˜>üõ{™aeC¾~Âbs­¼ÜUøÔÍÂáCu6š‚’/ž…­0ßá^Ð?L‘ˆOi{ö3-ð5ï‰A_ù;´×ãO’­‘>ɪWàøË4‹}~¨VcÎPy+gϰ²ÑÚAI ¡ÕF—Õ#߇¥mý¸ÄÇAÙÛà³BIV±ªµHPfáËÒ­ øŠ-—¯‘Æä‡Il© t7Ò^Üõ‰$y—~~zÈõÇ,5qГK&Ù*ã-ñ¯x ´'WQB3²j¢Nq«ùUžH‚æ \ËÏo¢úãé÷Œš,|WÙR"½™žÀ›‘dÀg¢îëuÒÈÍdyÁ‡:3-Š'mƒtZ&h:~QAÔ&¥ZÖ÷Dͼ¶º‘Åçî‘%ÌÉZ¸‹,…i ¹3¢¥Õ4#0 Ȱ/XMQ~Da†°öNp¤i™g¡é#­Ëí]-;;»šUHqÄÐK‚XÏEâ0CÌAB-žWeo¨P÷ˆÕŠ/çΟ¨Y3YÕ²:Yíí¦ÕÂæ”f];ñ»Å¾ÎÏC©ÑÛŸ¬ZdA飺¨íïÅLÿ"3ÑÙt¿Õ—þˆ°ºNƒÅÓ§ïã=ÀuáݕݫÜ’½Kî««Fž„qEhzÓü2“ÁÑ>‚ ßä%-ºõ8ivˆprBªwG±q8žÝö(Ežàc¬_ú•A?²,Û„«sל'•,Þ´fž¢bÐ,Ã!Fìrfa@c7 FäªQóáÄüÈœ—è.·(M×eo«Wš{3(›r"ÇÌu„FÛ>‘sˆÌÂ0ø¼‚Ö­Kýó”¯Ü·9Ø¡ªƒéñÕ8µœú†l}Ê$I$1˜ÖJÖ4ò7F8­A!Iûï·s®Å“ýÆ'^U §\ö8â·=öQPÄoÁô*ݳ;ýœ¶Ÿ‘íפ{SõÈ– ˆ{…h Ì-=–7x OT¶)POE}ÁQmé¼ÅX¶¾æÑ՚ؘNícEb]‡Mñ~=žœu"³y c¸»ËžÊJAK&Ô‰ŸáP‹bf6â¬e[h:Ê=¯qÃÁcûȘ@÷’­–;üçÇlžñÌ@éâ\n6_±C®gèÌ­ …Ý ÿyó»Gڠܻو9Ö¡AZüÆoyGÄW.BÖAAÆöaÉSÍܙоã]ÿЬ‹S8KyeàÒr~ZZ2™˜v~À²THmïí="?–tC)Hõ‹Ç“Õ¢©Ù·¾ÌÙ§(M)ˆÅ¤ô”ïÜ'Bó<µ%¤|b…ÕáÞòHQ¿c*¥MeàM ${Ý÷H!É÷Û(Hb¶CÎzx2ð÷ÜiZU&¸°_At‚»$EáÇ ”fõWÎfŸù㾸Mý7˜ÊÈämoyqçE˜¾´{ÈY=6ˆt¼z©Áââ>•Wyºžz¨ý#KlKæ'Ä U+"DÆ]>ð#†Kq”Ô*¹¼W¥rD¹Í}4š>º]†6 båG Oÿî¹ £Ðü¹âó€w¢÷¯5еt‡5™ïËyA6ß_G¯ãç%8¹…áˆäĈ¯¶qê&“5,Cg %cIÞY¦3Øgì:/R#‚roc}שQ ’ÙÅß¹Uea.ÿ6u†hTê;¥ÁD6=Z „0(7‡áûjôú¸÷Rò>鉃»¸›,Xrë>#ÉÌÔ‘SÎÕ€o|8¨Z6½"JžÏ&#b‘ÐHÙ #úæPÀ9¼f\S~•G’ó¶ùZÈ‹fg˜¶%SD !ÝÇ“Ú-«7/(›Ê¡¦•V4©>Âq.mf´è—à4¤ËjcoDÑK#…bû%,ãÀº7Ö˜/´P5Cê6ê—+Ü ÝIØæQTE„!õ²tÌoúù7v³4_!Çï'‚Á+Kˆ§D`;Ã1UhìEøŽoYCêà…é„ÂÍ=pРr·Î+˜ª¤'•ÊkÞJ ^5¥üˆM°ïw!šöuxüáW$¨Íy$É*ãb¢·» 9ü™ÓƒÆF(WÐÂ^Ðî—Iåÿ!„—º—AªTñÚ9è2¿w ÕŠýó˜¨â¦íÎ4ÜÇœd“Üë-Í?`œL°ÛÛº¯‰l)ú_?ª­ g „mª†wñÄaAIH¬ü¶øì²Ï ¬e7ĜͥÙ[¥âŸ P¥ûÕ5l×4Žâ˜tÕÁ´ã¿îgf¥RŠ®G˜å/fÍÖIYä)‰Z9)_áE|6åz eÍXÐi2ÒÑO$›VE¥£ïßyÂj$Åî3Nm×]ZhÉ„üßZšã¡<”—-vGÕz/þjš¹.(¼zM(dâçŽz*ˆ8·-I!´eÄ»Ó~85ñ âødÆ^ î67z?vx6€­-œý;ò=ž>G”g"æøN£nSÂï}9Ðïì =Ko!aíèR¸2 H–Ì‹òÐÇ#¨N¬~~!©œ­4R‰½$ŽAÝrï±Ö¶ÒvúW 6¹SŒÜ&ž‚~IÉ.±sAnš²w¢ŠüIfËšä% Cݯ&)”ʙة9I™˜a(Ì +Á0ùTØ¥mhæi®‰x<öôÏÑ>ƒ¯“³ Öx@ÓÝ5ò Žïªe0I§ï^ îyÄ™—-~—ž,kÁŽïÌ;Ñ$äÛR´Ê?x÷Â_”wQRûÕǼ;¹÷P‚ç+•e³¢j¦ˆÒ‚}\ºÁöò\!csï¦î¦|æBHöúßZ Z.ÿDrXQ—f¶Xc÷d ËLµéW/¥ƒª¿Ú(dUâCª“ªŠU/k•>%Fo¨xFß61¬¾%÷ÖÁæ¯!e,³€0—J°øLýÐ: Ø`ÇixúÛo ´É¿YþäiÁì|™Uêð×tEþ¨ ÛëÛ‰óÎmÒP·m<• ›rÿÐèzæ,c"›+Ðô²…ýÆé?HqŽ·ŸY¬áºç÷iÜÒ6‘…þ»’þ}ü&Q+1ž5Qy#ÝÔ½>eG;x“D=lh8å¹Ö§Èòxç~Õ¬-ÌÊù—éÅ»¼}7ŠU ÆÇ–ŸÈbÆ3hîÑÓÂwAz:דˆÎW5Iõe“_z ͋٠+Ž&Küô¶³­Ý¬XzqKŠgsËJ$]£…¿{&â8È_ Úwµ_Í®¿ W§'Šj©Mø´Nß)k4v¢XHN0ÔIÄ úÞ‚vtZÈõ‚ÜjÕKžû\ŸVšèÖÁïP:³;‡¡\tAÓÓà¹teF˜ê;ãóÊÉ!}ÄhqùÐ>±‚ã€òw}^^Ù'ZDBñÁÏhÅ“y}V#©.)}”Ûl¥wÿŠ$¬½Iiegb®vÑœëH¼³ß8 âõ5s{<‘Ý6å Xe†¿-ªqÂDÍð®:åÆC$ä>PåçRšƒH ³¸{¬ŽóœFûKd'Óð‚ב¯”AA'eÅw¬È&áãRY…k¬ÙZ+n¥°ì‡ó33Y"C.1œ‘>g|:óg°ø²<ƒ³wÅG¢ñ8aJ9Iµ$nÍí×R p”ß(”tM{q R>€ ãðÐÃ[­'iF ÇÅ“* ÙLääÜiDâ›\bÔ60=[‹Íìüg×êZbžq{ÆœšOßN]U¡:à›ðT~g„Ö–´ëôÙXz©^¹É)݃Á +|®ï£Ym®»Éç‘Ò¿¦¬V³Ó'…Â_ª¤L@ÃD«½'¢$ŸÖ‹m³÷p7ü·¶ª0 Ûh`kUQÍH´Ä:@'IEŽíŒùí$Ù¹G@Ü%óK‹ÿ£e$Ò¡½â9«BZQÇï®ÀÝ!QºÔÑÞn \޽„Ù!h D¶pžø­Œ$‰æµGŽ‹?ƒ;]éd,#U'êé‘FkçÉv¥.MÃf7½aÅk¥;#ÑYŸ>nÄñ&år7l77³ÍX‚åJû:½Ñoì)A`¦?k[É]ª ,ýùI„³œ rýF»p6`ë³Ô4ˆ”B&hlj U«ÉÔ—/f Žm=ÉšâÖéÎo5³2-Ö× ÒÙï[™AÈòz™»w ,/˨ôÍ0>2.×#úsÛ¼'ï\¹:®gk¤š™Moš¨e¹¹Œ×±7ɲ˜ VþŠÊ7:EbT²:këæú›jÓ;?¡Çëμ=æê°~ã»%ñHªlÍ…"ÜJÖõìÅ'_šÝ¾„¡ùºÛV+|ã?L¶Wß>Ú§ ¬«¿÷êæ9 Fñ'â"¦þå=ÇžM‡ÆWŸš‹l[‚Ááî\˜‰bªýÈxî(H6·ïÛ­éŨ~Ô"ºþ{s É5Ѳ™6!…½Þ S½‘A=|O爘ÞëCxÃ+;Éãªö¯„2“Ä]ïÚËjp« ´ ,¥»Í¨˜>u×Íõ‘_xZ?–½}WF¾‰3*4¥¨*œíI üC';fd³7¸•Øg㑹z¼¤  Û^¦”… JT(ÆRîx48‹mÒ,:¡Ç"S,:ÂΗü¬M¾ –+°=_S–UÚïgáƒú€çÐ !¼ývÙ}ö‚l‘½Nç.­‚¦ã“ ]ÌPQoz˜e ’ÑD±ÐyŠgÓv¨g ”‘€™AðëïBm7㬠LØIeDâog§0Šôé¡ÅVTqkõ7JÀ5›ÏC'婱âÂûÛ-V{kÕmXÇÉÕ¡…>ÿ“漓”åïKHµ?ܧ‰W…è·PÝ‚z!fr^u#Å¥“$Õϰ9ÇÔóo¿E`×èZõv ¼4X°¶E–˜ÈÉ˪ZQ™÷ìR~g¶CL5.Äõ‰^FuèÖÁKd,ä¢"¿Äð!\…ÃÛ9 ú Ú5vÙ YQ—LÍ”ÉZ–Ìá|öÀ©t‡5åÛ’Ô©;—štnüû1ÿóá=Û?> P|+Ð,×’¸rˆÚ˜Dxø øJX«Áßuºë\#Y0B5¸êᩪ0š§Ã¦þ4P!zD›ÖHûk36$Í…Üä¿ÃÙÓYì6£ão¨aªS˜%¼Ö©I‡¡–‹ß}„>hl¡!A¿„ÑÉ,ÍZt2ýð/Jé ÞµÜG–\ó‰UH•H¨Ãì8Hc˜éWàFMñ ÉìÁ}ŒƒÙ±í°C÷ëÍkõIO˜ôL,@e1<ÎÌû«åÇo§¢¯ù|£ Â`8Å—³Fe~È­}¦u¥»g]ŸKçFZ®”Iå2=~§ß>]ßR§‡À‡ «eA{N  ¨®2)µd=R´pŒ3 `Á™­}²°)v‚Kùbwi?NÆ7,{7{åWí_rSŽØÀI¿#‡~Ñò¨šµ5‚Äf†u‘§€þŽÆ/ q1ˆb;ܸsÜ:š‹„ „ì œÃÓ|‰BÇÙ{l=V½œ>¸ÃÌó‚Z]ö13Â¶Š±íŤ³kñÄÜ•fã¡Ò–yUÉÞÀ"^\¤×é’¶îÌ,ôèÁø>fˆ¢á£‹„8Fä>·Û„•»ïïg##¨v֟Θ9€î‚f‹#=¡Š§b[M_ì¾=¯ƒn€+næŠ'öóß+]^nâ›ðeB{úƒ3XÔ 5ÂbwÒœ³°ß0ÙIÙÄÞÊÅ©©Äµ¿D¦w·2òå³ ,6¢Ôëñw …Þ;>å ',–¿ÇÎ’ŒÐpí *ø[´­’ž]î÷õ«Iç‰Ëõ4Zö,ÓOé ¡Ÿ £™ï4~7¬urptûááÆÔçªÚzž-’¬–‚5oLG+±(:ÐËFæî—¨•çfsqqD;€à6]ó' vºóbpõêŸYgíq*™¦Ø›Æßge_™·Ë?;Ô ê÷nà$ÞŸOÙ¨gA“:ØXy LõÙÑi{’ö&õz‹òGl†.Žü¼Õ’ÇØæbèx~þEÞMÊÝ×|§=â ÚJ¶ß½˜Ç'?Ì‚\Èÿû;j„U²K»r‹> stream xÚlºcpfm.vlû‰m[ÛvžØê8Û¶mtlÛ¶Ó±­ï™3sêT}µÿ,Ö}­ë^µk­]›œXÜÞÎEÕÃÈLÏÌÀÄPW–cfbb01°Â’“‹:\,íí~¹y@S€ ÐÀÌ`abb†%ˆÚ;x8Yš[¸¨L¨ÿm¨Û™ZÚZ:ÔímìÝ,M,|nnnBnή N® ÿ$© ÀÌÒUPÔ’’—PIÈ«$€v@'#€¢«±¥ @ÖÒhç ¤˜Ù;lþ£LìíL-ÿ…É™áßìÜ€N.ÿ3s²·ȉ© ‹+È«ÄDUEFv¦YÉÒí\œyþ‰š8Ùþ«::€Ëÿ$£ÿIÆÿ“þçurÿÄËÌ 0µ4qÍ-í`ÿÅ›”™=€ã?fSW‡ÿºþäü>Õ?RLfÿD»ÚØÈÙT¢ö¶®.@'€œ½)ÐÉ lokd÷ß(#[Kÿ߸ÿ!åbôÂvæÿ0Çô“¥³¸¥;ÐTÑÒåªÍŒlþ¡èßv àîEhjéjûŸ|à?|üs£¦öv6ÿçÈÊø÷Œ²ê2šÚ´ÿk€»ÅìLìM-íÌ*.ÿpiädú?ÿ݊F–ÿéžÿ‚ùo7˜ÿ¯.gäâdéÐabøW{0ýëù¯¤÷£DDìݽ虹¸ô¬,Ìf6v7+§Ïÿ×ÄÕÉ hçòoÂÿ©å¿ú¿ tšÀ®-Û›ðY¥6‡”ûŠÎV@ÒÎNªÑ.3ƒ®Lu_ë XZ˜^âÞ©âæý‚'˜ñ7æß½Ø‘ºûCb „?ž˜Œ"Ó[Æ})&­0÷­ÙzSÊ­Ó¿‚PDZ5‘‡¸¿uI__ P¤™dËÌ9«‘v,åG‘`Ž2,kïƒDÞŽ[]x°“ Ö£DÍÐþ‚îÓV#ÏZ\ ¾ì­…æîÂ_“ãX”û;†jÝ™±ÂiìÛõ8Ïÿʶ§9>Â9 ç. »ûBN*µ$Ÿ"[_ÔàY˜a;¤pˆº±óíùè~ÔR…F¶#Àžó\B¾Ô±RŽ «à1@z¤9Ø®„b¹±6Ùl  ÞøŽ`·îÚØ¡Áñc YÒ’ Ï,Ëàô­Ø«b¦KÈÚ<‚"y³Ñ²¡ ”s_®|öÓFF\ Í»EGŠNq)­ÒÔãëtšl%{ݛÙà)Õ­~p|®\«»©u.£TXîÄ +ÁJ¶“pÀP^V²ï¯Y¯ÚRxú-™w×à€©¡Ð ç2±súpÍ÷ÁÀ8@K2¡kn T#}ÓGì®ÚÒ‚ƒí³ìÖWÙ‘Yé}1«É5æeŽ&adqMÇà ‹{ûc?.³Ñ‰gÏ ÃÁßþ.4·iHBø2Éñûûì4Ä2?öh\cþÓ*3Š?;›Z¿o1ü¼:”Êñ•¡æOÏÀŸ‚*£_<Ò®Ó<Ø©¼K”ÝlýñXgØ*¶Y¶÷ÓrÔ{Ö¤ê -*­í0ý¹  {’Æœ?žÎ3ÒßÞCŸ³ â»=J‰Ò£¦0H§þÜß‚ˆœâ/ h$×(5Øy(ÁÇLþ¨­Z4Ç”±2]–{ÆGV8 s‡^ ôMØš ±¶Ð þxž, ¤{á|™ÇŸm¾¢1Z÷ı\-EŒê'Kgd¶Ç‘ÓæA¿E¥Ðg®OƶY/O™áCøÕÊÂW5š©! q5'Û6drUFÊ>J.ÝÓ/z/qKES>¤£Â#@¦t( ~7¾ßo‹É@Í}L,n”LPÝÒ©VšWêÀQ“Æ ïbðV&L˜Ü œƒæ°‘·aÿ£(¢âo•ENÔ™Ñ*~ŒX‡¹¹FÓø‚•&]B,­ÐêëÒøfãËL¡Ç£YXYÌ­bï¨gÈûÇnLŸ ¢©ü„x_¼Ž•k#üí³Ljð¨Ûó]ÊÛ)Ê·º›@-¿=„ÄñK§xu9›¶ä©Ç²'ÞÚû úFx!v)¿Dư9³â£d„'="]Ä   ¡@賩>=ûŠ&ò¸ì›X“ì)–ý g¤Œ=³Âp™ 푨G ¾:÷Ù’:®×Û½–ÃmZ7($æ›7¼âa€­-84TB,¡Y]ª_%Q˜K Í©}ã›4î¸ U˜¾Éó ƒPg²Q÷èÿV\¶'ÉžÜùdpŒGú~›Ý!ÍÙ—ƒò4y¼UÔŸúµGf7»7>?-}YÇ®°g!9#8´v½Ð#|5ÿ´\,¹¸’\£(E°X:œ*+*ÁAqP®4˜·q¿›Ž¬X)‹-°ôºIÈ9‹uÜ}8{ØIòn}M†3j‘wW!©Ë/oÄ®J…. íÒÍ-é»z|d-_ÌøT(æ0¢Ìl•= ­ˆ““¢¼ÎCëõ]º´z8¾ôrݨµwÓ« i…ã¶Øæ÷PÉZ€svñ×âœ_Éw0óšË[3—£Ñ0C¼'ÇãyãWé3¨°÷1~ØÓn§˜Šª ‘…w÷‡ŽTuú¹%ê=Ž+€>·"™Ý 2~=öf ŸÔ¶.²‹O  f¬ëíD T+áŽö1€ÑÐo [&á}Óï;ña)A%H×ý0ËA3, ª…}–•öÄ4o”Dˆ4FLJÚ|óAÁ‰aÆýµÝýÊ [›'¾–|é-ê%:ÄU#v}š¶jÚ7ð›dÌÄMýƒÙxwJGœÌˆú›¦ÿpu]܆)XŽ£åC¢tÕLEVÑsúÌÈÝRj6_¢d ªÿ=Ì¿Ó#GÏd$»¼XÔl(<І³,UëÆ‹åç-‡Æ¼«ð€ÑkÈ"C3µ½Îä¸O¬²u8ëpÑë7¥˜iŸS.oqqo>uéÒ“5Šü @9ÌÂèh¤äʦ¾D&û˜±µÚ„>¸o|ºñMKÖ]*VáþÞ‘Mù¢?³Ü ày‘ñªêp‡P(E%o¨ã´L/áApé÷lä¥Ü„hÜìä¬Íï¢à›äɲŒ ÀKÞÿxyÙKt$AX()—mÛ ±¨ý‚4WË4€á ˜œÓ1SËvh¸úç“£º¹³ xÞnº­w«P–-#²Ø–DŸFTyð!QæTQ¿nòH 5<Ï!¹Ó‚K(døZr%ýÜÒÈ‚~Á' W2ç)•Û¤ìb»ÜÚU :úï÷åçs‰^Ô’Dc»æŒw"Lög“JåÂð{@&Ìñ¬ µRuÓIS—­±50S ääéa# ‚ów¬x¹é©|kmAÊ´&k»ûCÿ›JÒŽ_ ïìê |ô0ÒÐq>ϨŽJ?©8ëõ½ØBþ ÏÊé˜ê&#õ(’”t94ù¯ì¶˜pˆ5Hbiëö¿FEÈžYBSND¤l1¥Œ Vï5Ö‰"í¦laï_u,y¾?w䦀Õv­xVö¿Ù\ÞÔEÀ¶ñ½0Úìè„~$ÓøÈj†L[?‘ò—aò~æ–^i…:µØ8Ýd­n÷Žr©.D)YŒwì¢8˨w±¾Ö!-„ʦu$ÏúÕ9½ÜI 5 åÔ[2¡ÌΛ”F}kJ ÎS¥Í ÌÎŰ?ÈMpÅ-Ÿ?O©ö'¼bÏäHÍŠäêÖáÕÊK®[Y¼f0Êîe–Óû?©¢=ÐC }ƒk„=ù‘ne‰z£i ¦‡àî—}Ør»$F/üÅI‹ëô“*O7è=cS†X· ë ª0RÞQ<9ÐöÊ!«ñÔ¿W÷Ó±b9ù@øFñüh‚5ìmÌ…þ2Vy!üÌ9[Ûh¨fª­ÿY!G5°¯l¥ðî´(DáÇ2'ÄðŠwOÍð º4/Ò’°Ýý‘ÒwTlc”øcl#æRr·3Ÿí+÷—L$ñû=¡LzÁÝbÓlb ¦—‰ŠšbìGc€ÕZ Û~°+føåzìx†k¥êbu÷8¡ÙXüŸIúe™ˆ÷Ú”$éÀD!ð»á©´|ügá]K;ê¿¿±¤K»§Ù\‘sˆ‰¶,âãœ"ʯAhË=+ÉLÔBï‹SwýrÕ ìXŠõ˜h&ˆÞ¿\aĶYÔ ¾ƒJ©Ž„oÝL=éÅf­ønÕà«6÷¾•1å-G³¨¥ÞÀ x_- 4žo7cà¸`º åìyöý›»E0)0|sÞ{›y¿ÓM!8ÇþH ÷=+Iü Þ H›^·ÍÛïÁQ \%kèÅ¢ãh¼•"‹ó—¤Hšó=e^ ]W$³Ý'kü[þ P ØÜÍ9 ¦ºèÑ­yG¶½ªZþ6’dð·U@R•ù¹cUtÛ&ê°Ü¾ÐÁÏ.wýŽ`U‰OÛŽÞ `50;¹q.WØŽ”|“S&K{•ya“ëZ:¶KZî-Ñ8&¯LVäë‹!ÜŒ†KÜ‘geôLF>yÑ”üÑÓg´oãr´ìwVôK™cÍJ„x告㨌 &ëasÈBbJmà—`»*ãH—ÿ î”vÄ Ë­ “iþÁÁÈãºýœ’!Gí;…Kx±r…RÈÕò‹fëj\z\?v]Œ‘ÿ¹#ÿÜ·{XªÛÂÔþ}$+ßÞÉgïÄ·ævÒRָ韪\¥'<¼ÖÀ$ä·qçàËØÚÞÍsªÝ/óÇa˜¥xÂÅBJÒœPÛ@@&=×]¢ Çpu£;+ÕYs~¯©üv¥¼v­x8¬´ƒÖù›°¹Àë§Aà}¢Ù(3ÚTM¹@å#i8Û”ÛBÛrÑAd¶L›ÏZ}†ç*2BÜ=ÏN¾U ì¤Ì¶Ù…ï12sá@ dmñ!ß3ôàƒ“˜ÆÂ¦†WacÔºzË»þýcæ òŒëº¬ç ¨³@ˆ@ì÷+þk¸4ì§Ir­µ}q>Z-'5·Ñm•6ûê§ÜÎŒzÓ.ž ÑŽŠ+Ûl3qRùCÓxC]Ò£uÿ_‹V×?É<<ÇE±¿ÞsRk¾?$ÏzÃʳÁ=¶ŸÙG¢ÆðÙvSù⃑¤P”¿¾åi~L))'_¹Î•(ü¦Téy½«ÂINŒ@Ö3äœMÞÎ+ú3²Õíø3î@~(?²ÏåyŸçöŒ.tgÁ"©Jüô ×;÷@Õ6m[Óæb‘¦T®âóêc8–hJ]×GÎ>“ùB¸ü»8%U±¨Ãø´…œ™Å¬¦ Y’ô9JªþE0DG®kúÀ?OçCO[#èô6ˆXŽbž…Hï Ï긃|Fê÷·sôu©eS"ÂY»ËÀ½gª ( Þ%§£ÜÆžHâ¶LG2DYÆiw=oÄfžÒÂÌGÌ~ÚËHj[’ÙDþãCs»8°ÿ ÛlLrœ?rXD6LèvñûZNÀrÅwgÈèQ\­‚…ÂtÈh'?váCÑA’%`ï‹Ër„ /%¢}b¬P†"vM>/: “Çm|Â3B›ÂGK~Þ'jÐ]‡YŽÇ¢g0W‰Ä#ªmúùzÿè¬ë@ÿB†ŠõreøÞ5Sf×Î +lFÐCOâÙ,H”ö‡o8öP`Öpc‘¥nÕX`¦Š8„±jVÿü) ´7QðEM=Üâ73H­Fâ#͹žƃ%»/?¨|nØØò¤8‘µÖPÈaþÕþŸ·TAt›½¸Æ=*óá z:<†Í/šl²¡I‘9þ‘¶ÇA0qP6a¥d†Ú˜å”71,@KIõ~Že«­\M»|üOÄ).i¡Ç[qõCsïÉñŠ×”èÜcκ¾ñw'߸àR!رê_ Þ”_ÂÉšÞh¢í± Rü³([J$'-p²#ÏÒ$÷ȃ˜X‘êÂNÍ9¸5e³=Ä;«)@ÿcæz¹”©<Ðͬl>Z<æ/ZR¤ êJVñýº\yZVW1 eBkp”¶g+Õ•IŒZCyEͯI-Ügu¿«…¼„‹vïð›‰=ñ¿Yììeq>ˆ¥¤ZN® è¾E¨fo…þºøaÛ´méwWu SDgûn¡¡Æ<Öp˜U)Æ4þáJ\ý;X¤î﬎©pnŸ²¦e¦e!e+Š. ÕRËÜÛÛ†ˆ<4<'PÂí-(P:(I#퉘=€ø~ FæˆP(1¿vžté­É ºFèìFCÈ/c3¦’h½ß ïú¾ä¢ˆ#ØãžG§¾h„ħs­™œ+ïsžV­§ßB¢Ü]wÙç@ñ`úXZÃe')ÑV­µÇA~Hï-ÿ­7©š˜¡p~ÆQÃ.¿2#vP5)“/Ÿ£Ä^ÐpªæVú!GòÙ Nã»*‚©"V¢cÌ ÂP‹Åϵ.–ßÏoù¶‰7d‰œ{¯è$¦¿BlÜw¿kk†™8¢Ÿê{/S…IÎ )ib{Í•é±àÌ\Ã{YÀ¼MÿCgMS´’în7~ ÿâ÷Ÿ¢ZºNHÚP¶˜-„ÂhȽÊÝöÂGWôp¢eùXßCE ts碿ÚKìù+}¶ )ÎþÃq§f‰pY¯ê¬C¸Ö>â3&GV‡&·7²é÷¡ÎOäº^ÙÃ]GPsÏÔ¸™^bêé8,ÖFVB|®¾4ˌ楅HwîIøðÒ° é ݳÛa•öRÞ¦D-Ñ_Ÿ j‚1éë7µGi‰ÐqߺD='6Nq½Ž/ªýžû^3?‚4í4GÀßOùƒ"Qq ‰¼Óã¢b˜#íºÜ²Ù½= ×À¥ë1¯­ÒOî…ï?%“üm•S=+î³RT‡Ÿ$L“F_Àw0¦¡¿Ù0~G†LÎQ¨êÒJŸE$ÁÏ¡u¤‘x¾¥øÑ¯S’›^Bè]0ŒPØmŽÞ–£Ð€íp\ev£¸ ü¨„Øä¾ŽV?o­?_ú4Pͽ”wÌæ>8& Ï+¦AÞÅú; AšI¬…¾¡6 §˜ìëÀÜù…`Î&¯re ˜×/LªÌ‹ùâC³‡•Ì­±ÇÁ]7*ÐsYtá°aúYš¤ýÁ{ü€D¡³àž?NtÒï-”œ2燠kñÓ¡åPH:––³q¹Õ }%–‡»Sµ\³‹“Ëñ#Jfˆºe˜Q;Ó†Gq™F.Þ‘8ŽEáQë¶+4þ‹ü˜;].?(Ã@!Q$õ $òZ»y=œBRüð ÞŠ7iA”ÿLº€:AÖ¸/Ç^SEä껌š<$ß·áò×hg‹—­—_øä¬>Œ™DH†é1W‰÷ÁËPe²Å¼EÎk~±¿µl»E!™ÃÛoÃÑ)GÞ‡Ú3¿Sý„=Ý/_vEÄ\O}¶Z>È©55u~`×»ƒ®6оeH$ÒúAu£¡é3r§àZ]åÅÿõ‰‚ ˘¿×j4ƒ WyN«0Kôû×µ§µï²få7… ór‘ß"Ï]TNDÐÅÅž~P‹Àâ/÷(ÒuAùÈЩ¨’L@ÙßÅC[¦Â²hˆ¬Ò?p‡¤èÐf·dÔ¿Ç"œ  BEöÄÇÃ÷¾²ÙˆŽÎÒwè\;yÕý„'cŽ$$_Cšøúzƒõ‰x¹;5Œ®1ƒ×zÁu»èvxŠ}GyûRšX­v;ïcj7–xÔ¿ÀÿëÏž"gú(^”¨\—ֵغ w ß·gÿ­eKp%·Å°Ò>v†å3ïS“¢ávkn¶]ΑczÕ­‹wZžgí·ðÒZýýdÇîÕ¯ÛQÀ³w÷Ÿ:™ç™þ/íóA2V±´Âœš—­÷‘SX埔‘™Cš\ÕTø*ï]ÊÇEúÌÝKwȬ8)‘)is!‹¨ã”ù§K;¸ØF“ÅÞE˜øDÂÊ.ÂèèŸS'³šîã'<#F~FÙáeÂõˆÜþ‡UgŒ­w6tŸä q5¡»,£¹ít“-yg]×Ç%bÌzc~u¸ã€þ+Bcþ‡äºÐï^:â¨Ò·1¸¾¼!y"­0«]JÓ€/ ¬›ŽWû:['±D]÷ìlœ¿\qŸÑjýÕ˜ìub†ÑOÌã< ¾s8SȶÍKÚ¹uP“m±Ï\m,+ú"¤0ä˜è^[}X*La[“ ÍåÆ%¿—…n­87dÊ­ËJÑóŒýžÊ°ƒÙîµ HT.=F06L_“]¡G?+j`+á^tpè'›Þ>ƒv»ùupn»ËmųFfDXÜH¶–„êT̓гQ± á\ôœ{êÛY$ËúÑ–$À» '—àÁFÚ$"­JëwíGß3 ¢#À£ë¹ v¯øáQub]‡FÀ gHœUqÖ©¡mA'®„/‘z£j’ʆá$˜… 7ca¤¯o1‹XôÚ‹Òç†:àY3­­ã·?ûѲé~ó6x b}î7t€%ȼÆüQ~»¥,fêõO‚€«|ãÊ´yãÖk·åùÆHmz* !ß%›Ü]òmÜœcˬáÖÀØö¥·2Fä‚U‚Ào#À^+`0¥6š³8}ÒËðdÌß# qQ–ÒÞ¬¶Õ¬ÃWÌJ¬>¶Ô S‰W™ 'É»“&¨÷A–•ÌÆ²×é™¶UÓóF­à'ò5ó´½Ü%¯<3Á_ý3ÞÜQ±åw¸€ MÛjÈQTûãüì\U3K•òCûîúÑÆpgÂÍ¥ÖÄóÌ?5®|í"HÜ;_Î.DÇ9Ó}&Ù-ŠãôjäK^´$òbýÞÝÜ;àÖ-ÐÉbh£‘ø·ìC :EvšµÃ-ŽN€9%¿Ž ZiA5mò“ÉW¥R ûÙðnT'‚„šæCõ+1r¯a‚CªÝùû2Ô(])gÚ‘Z:5¦Ìcã•Ù˜¸›ŒÉiPÞÁI!A‚á90l÷ó þ ë~½•cCund{ÔÙéχva(ù ^媞6×ï~…00e ¢{AÒ‡/LѧùˆyMWëR`‰Áªäß³_T€÷ehº °¨¨¿†Äj“ƒ«ÿF">Ü¥È>:ê]Ù3W}üXÈy„#+à@4Ã’BK؃h£òðŒ^+6>’’ýV±±ƒÇ9_˜\–RÏÌ»L¹»Ø˜+D3*&]}bUuRqQ>Š]ý©ùʹR…}¡B[3 ¿’ü,ô¶»~åôYdå£ÚŽjðïùh`3oƒäÈ) CšieÝSéåZD) žhJʈy3?V–ÈF°" rxŠáË^¶k˜ø×½T»mƒÃÖôEþY¢žˆL4µ%$SªýZ£ÞÌ`ÊÉ+3½gÍ}˜H–‰†‡mß`ØÍÝø=غ¢WiÀÊ´#:‡]³—Ì”€'Ö çÜÆÁ“ý«Øîä£éòÏËBH)no²Ô7p® BÌ|òæìÓf‰‹ƒ±Ú1ö"¸–û¤.ðÌö$ðëó%…¨c^µ„›ëð|` /2i  rõ¹±\‡éuB$šôÐõnq b¼S¶Œ/ðêû{„‹ß¥Ç.Fd9uQnÚý“:®žÌÈ4:â´®˜5-Å)~õaäéªG æáÈÁµí\§¨o¡õþ †&èÑ5<¨wP­|Фm‰Çtб”µ¼×ì 2Ü—œìE\ZUØcèÏØ§^A¸l“P)*´{`43U{g•UšèÞ“@ׂªIÌ`Ô`‚S^F.p±æ9æM8é¥ñ·!rBlNm†³£çÈzŒ[õà¼Ü£ý³Sµ6màŒ/5+«_²zØUB#KpŽ%ùØm»eY•µ¯—Pš]© /D=• m×h6Ä=ã=†¡Œà“ßg’è]üŠiêgÄUéÀÉ­tÉ®°ô)•‹ÂXYº*®ñßÙA ´C5jüxÜréûÊIÞÍË›Þåmå8K”ÝŸL1FM¸©—53†–4ä¼\ûEùSá3Gq¿¹L§AvŠW´£ CŸeßçHvúVCÂ3<®g/×^Ô5tÙ½Æetoe¤~Þ¹‰a-ŒBð‘$U"çSÞÖšfÆOùv¶ÇÔ¸îMÓ¤§V…™”d-£ÐŸÏhET63˜{¶É¤ïg ý%ڥ鴇­1™'"딩P[Ϻ¦*IAxŠ‚GäBѸ„âv{uîê`åG³ä7Š%ò–,ý 4cØUÊ’Hñ C/ÿÛ?÷¹aaT)[Û½l”™à¦$ƒ#]6™áu>c;™ M•ç‚íµ÷jÓåêxçBìMUÕÎd™ù—Y‰Á•n. †Œ ‘Iêg€È2ž3îÃ;Xä‚Î÷à|´ÓÉ£¥ow|Y(4£´îÚE¬Ú}£=›â0EHcYäsU܈ë€LýìÚã´v¼Cgy(í¦ýŠ] ¬ps^»>á´T@É®eiòmŽ@¼¥ƒdPøç©€Xþ7ʧ‘OÙ%†FŠÍ{9¢«ãG¿œ‘=Œk½ µ9ç® ”Õb˜"Š‘P½Ì»„>’—b¡duh‘ö‰È%'ÕÞìióýc;{ÇxëQq?Äð_7©0ÓINE¼Ë5J÷¥¢¶=<.•âhNß1…ýT{T/qJqß”¸ºé§€p=^¾[šQW æP @vIo9 Ê¢¢’*êRÉgÝÒººÞÒ5ç¢Ñ5hæ÷‚Ö“Ç}‹qï5.2/yÀ`(µ@–;6—ÀTu¶~ï7€@Ây+Þbyñn Ê·“Ý>s‹Þ›·UÊôÀù ª%ËÌu—$È»¯YÝê}HS—yk¤ ׬̿|ÀF>ìIDú…t1ó8?·-í;ϵÊVí8¨—¡¥‡ÕoIÖ]Ý­ Ö*T ±M¤ä°ÂÒòÿ®±ÄÇT‡]!\ÆóTûÊ2Xxm!¾úQ3¬$j.ï-2»Ý7ákþ¾ªvy_òJ^ñÚ†ß/çò2ðî·¼3/‰×µŸO£ B”·‰•ß=µ¶I;‹<&w›Kk)$´O/u@†g4§ü¡‚vhÓ©Ñ¿[‘i² ,X­N˜ ôhømàÔÓ„’ ÛÄp鲿Žo§»ï¿›zͲ¤Š•S=[¶¶¸e‡m”$ØÝò~¤d˜r@0+îzºGÉOÆ€È@ÑÖõ>Q4Ha½H“©ÞºC{MÔÌD/y¬ŒL6xxÅm;‘”>þæÊìsv·q³.èÖþä’GiÙøST³=Zøåq|ºîi»TðM^L1ìD¯[æßÖñgüxëæ;ýiÕ¹~åÝ0\»> Ä£¦gÕ+ ± qê¡‘mû=3x|ç«Næ‰Ù£à•¼¨¦slz] ê.°ú3O­±d –ÇIG¢=#8ÃíõŒÍÞfFI#Ö¾¯„P´¼Ô‚8y?3d›þmS·¸³^n’PVÉ[&mßÂB§—òa*ž8J«%þneŒúk¾vì!±ÅÆOa>ë°ÄÄý–É3J0YªªŽ©~v(ÔÜ’M¿Ú(r£ T’HjÇþobp‰ªÚŽä!‘Ž}­n°]­Hž­«ÝÖ46d­Nô«D8\˜Ø ¤sÙ\MŠPYÉÝ>TŸ›‚~Ú'êjRÇ{†µWªÐ%'IóCDÊç™ï•`LJÎ LA[l-Šß.ÃRô‚p! lÎð 1ù…Ï þÐvúûnâåµKÖ‰ãV¢R’RpŠù5ÛSWç¾"D+ aÇ(Îþ·<…‚‰zÄq. §±|ŠÌ/)†þîâÐP<Œ]LgXq‘i©¹MÆž™¾¼_PygÎ{—„ û,9ÃëX) ;h’‹1’Ûð+IPÉbÀZŽÿWû@ÞoÌu*jjh‘Ä‘ƒs¾% ²£æ=íæ;Vóí°°¾`…)œ "We"YŸ¿õ«™æëµƒßus]HÿìÜ7ŠæGnš¦ú놈o„>ˆê|¬9¯±íáÍ£¸=¶V -[¡ý¯J—i*„ðMnÑœìOÕ–ˆ0ØêkÙ*S[E<î‡ß Ë»~&²sÈ•ƒ~w—1y 6™­\]Úlñb󽙺zZ<(Åj&vZ5Í Ç1ž »`·P”^Ö­§‰Ú a ×Už#Ëa#“­øß&\¯Q’Û ÜïfÂtŠ:|˜¯§Ägæø•.X›—ìufI®eth㙳ëÇDÃwÀƇ¢ð®Å©•V~iF¼/2žæVã›X:³Åʿރí .Ü~Uù 9ØÓ±ôÊFkùÙ„3G%kè6çd%ŠF-œÃ]°ø´­ä˜‘†…ku¢X¼ âZlÌ,eŒ'ˆa«‡¸-A¿õÞ¸ݢOg\ÈÅüÏÅÑ2«& ý=èÍ»°|GáU¯ ]C÷9貜F%Š8¬E4è½{"J@|={_¬Ò¡„âìˆü]Bp§Fîëz %ßx~Á>C®5nŽ•7”ðÊT½ÑPbÞë@Ô¢¾Wj¤T.±šÖÔöäc!UÓ…2ÓC å>’ìPÓ8܉§s ¾ÌD5,6h¸ûÆòNOr(c'¡…¤é—œÏ¸Ã²mÍSB¿E,å. Å )áèyÝtÊO3)éCtó«d&å¾™ItuedPÄFKîú6H(VûW`ƒ}@ÜX:…]P‹”ºmDP.f>󳑤Ý}E<Úƒ]h!šOJ©ÿ*à|Ë$“Pæ:_k‚ƒ‘Ÿ¾ð†L:…B€‚+ûß%ÆåÍ8ÑS%{½^#ÊÖq¾š{§­³ƒ¹®¯wQÿáÊzîs²Iq5%äï5‰Ð…û"a³ Ž`§¡R pŒ½|0%DÉ»\p\'»TYÓ/BX§QWÔ¥xG´NÞ冬å–<‰ûLï$Š÷Cœct „6‡wú(xEþid:ÇBöÃ/ Æ…h=Ž•8½q†Ÿœe<;ÌþdÐiP¬_±©—o﮳PH^úà`¤Úv–®¾ž“5c´­¾*–ý{Ëòœ*-Õ>ä1oÇ-¢zp…qüèn£ÏÆUЯHP˜Ä¤AÈ÷ü÷§°†3ª­[ÀÃA>_Âf’òÏ?+@b…Ùô—ƒ$ËA‚Råf/ê@«ºúßPÕ®ËúJí}‹½ÝwÕš¼ÛÊ ôÊ\m›‰õ¦æk’¼I`‰þ2­²wÖô\xJ¨aÖm˜g¤ïðLJÖwkDeËõÔA»gC "åJdz¢ÌMMŸ©Š"víËÄaúÇ|Uõ95«l#hhÇ l–ÈFQ`¹¬È°Tî=MÚzüœÏ¼KÈIî)stwô »mÞ] HÂ@ÍÇØµdÞap+Â]ÎeF^lø–×IÐ2³¤-Œ 9„âC`Æ€í”þ2x·¨ï;ñh}¾”÷êÓjdŽŠjRýšH‹¤sàf9%…añׇ{ۆέ¼p[=P©ÖxÛÇ$‡ Å[´¼´m~cÌTš{3ˆ 8¢qÜäGùjNL;q BéóÂ7˜F$Ó†€mÐ¥¼ÿ)…·Lœ0¯¡«òh¿ƒ²Yß½\Èfå“ç&´RØU7ù\Rè8ÃÁ¤Äg;ÐñÇŸnªULBK˜Œ§ÃÕöð¡"Ýb}5E DÁ^¶ÞA ˜ÃáÒ:$$Gòጃ]7¯}¿ˆ†”W.ŸEÛæ&Çlv´sv;oštÌ·-†»SÓýÓÂk·£‘[eEìÑéÐ;œì};vüö!A3Ù¥Ž<Ð2JÍq$ lí¯8’ê[Qûû²9AõbÞGíHcM—cV Ý/c^<õ;k0ƒkõ#tϤ§Ãz­FÐUÇà “*ÛéêP@ë áú±¸æÃNºS¥ªeÂÊû€)‚¨aÔ©Þ¿-»Öf¿¦¯jñU„ÆTÑ.ïHŠXãúsYHj>\Œ¸[—ò»-¸F©§^ó:¯îÉûNçÜ„9rŠæC?¦.sÛ?RYÉoE¦ËÄ<”BçðãìOvBmîd-ÀK¶˜6É5Ý*4Âùu¦Å.³ƒ‰‘s9ÿy¤|áLî„ ÃôꚌ ¨ÕÖÛ°w¥¤È3.º?ÁX—øk9ðʃe9M>¼ÓñóZ£·Õ–¨1 sf´—/¤˜%žƒ3ˆÎ×ïæŸ¸îð® a]?ÂÄå‘p&övΟE‚(©«T˜3fŒb®C‡>M®xæÑ&tUÍ”xãyRÐ9ÙW$\EÎÆÝ®ëâ'®7™­z·ú~ä´s׈ª»‚°.¤ÐÙ{±]ñ°=Ì(û¾%³»½"å…âÌ£ê×9@Mõï,@²¯¹=—LzÐ\ÈÛeI¢rÏ7@‚ Iq—Öªªs‚I$v¾­Bž¦HTYI‹IOŰU}|T]by Ü.ÔÝÈ5]S N?uܵ鹩ìÿ}Í?ã˜VWÀµãÊHª®Om{Z¢òrà¼OÆ,ÞÀôN’C ÐþÍã™Ô.`99wÒý­h!%é÷±ªÇíÙå,i³·ïî•Á9lY¸}E¨ÒºW­‚ªØ~|ç*÷±¢¼Á¼.ZÃßzâÜ6‹—}Þ=tÆ2)öк“‹?ƒmRÿlrS*[I*2™YE8».oà6D&¡Ç õSÊõ[ùøMF*¸`«T·ë%à ä õï—,äe}þrõ„sRüO'©ãGxg•’q½.5Nÿ»6³ãðÛ"°œOï )FxyazÄÏÓ=¬šµ6Hêuæbè­.¬;QVÍ)Õk ¶âp7I¨½¢t}‡©vê]c+yû)˜½'{!K]GMޏúVáW;†Xñ­ì=5i·T*Á9>LgI a‚ÔxÎÇ…CÜC"„ª}”Æká‘óêw¦µJÁ*9S샃ƒ€OÏPziÓLô Eí Ø2K÷]Eò™†K5;éÛö²Ìh“a´È*'µŸlBRT#+ºÄÐüþ‹±%C±zÍ—EB!øSwŸTV4@Ò“ï’DTdÒ3mÄf^í½ QÄkÇ!qã{ ‹´|[vYRü‹¡ ´Ò|ä5¤ðN)É€g—{F›j!HåœÒ¤Jg]D ¥O§k¿Éö¢_§…- M˜#ù¤–Aƒ.Ùž¼òrb-î¬(O˼+@Vr'çé¬dÈôíäŽqù¦ë‰Jz¢1ü俜äWv; Ú*©ÌsÈ©c›ñqÆüÚýIRµ8`1êcm¯ø+X™-˹8&W Á›,èD¤)îŽ$6nZÐe.+6ܘï®$tÛ‚ù#Ñû´²7‹GÐê¡Ð7ÜŠH¡VŒøë bQ{Ô÷¤)ÖG ÙI{I,ê|(õe«™üÐaî÷„ŽõÌØ"|ªtLãöu*ü_ ¯ºÆTŽÏoÎ:ȱœáÛ¬˜@T„ šû²» ×(¦•$… ')Wmnn9Å>îeEÊ’I/ŠþéUkkÀb-†½uyè°÷üŠVyJN‘ùEÛ‹1ýˆuL(šw}”–›fÒ¤TÀé1.Íðle¬³¼Ëѧmta´Ì&Çé¾U÷*Ö_ÛC};蹄ã+>˜¾c$0 —ÖH÷†Y«ä啘ÂyB1}/x_ùTÒù¡Í™ô6×ÃzàÄMEeµmú­C'ù¥$ ºY¹”K¨‰ðÊR+B£¬«&#ÛQ·À ÚQ“õû[|umÄ{_Žì‰®ËkTÜ.dce øçGÚucÝÐâü~5=Zèžp¢H2±VO¥¥ñkÜ*ÞïeÕõÓ¥»¬ù-ÂÈ~¾¿BÌ—t–oíkýV½kBM^-Í›úGò»c¿!gtûúbYö|ÃyÁBÀÇK+¤´oKâÛsºZöe ™ƒs>†Ù{’„«{yÒk†5×±l5<´âŠ@)ª‰[²L²JÎ3æµð«â§S'î;h:ô¿×m$¨ý° ¬à·˜WV¨="…ªp•’E÷újõQTx¤ú\æ¾õ4—áVû ƒ³ŒIó£{.F=©LÝúÚæïâ—VŸYÑSZ1E¼×sAgWÙ»¬ þ[‘öóAqÐf°¨õí¥Y|LO‘ì´XuðÓOôs‰ÿîùaÚÎ& %Ôq\CWejðvW&9~áïÕžzW&Ì” Gfª3ß"ïθ5Ihø·øæ¼cጱ=á'[4ö,Z§Âò,¸x4ÓÝ[ÓûJçáp\ÿBÌPk_¼¤â¤.ÙÓa°ºN¼×“Š>ž¤Gj^ìõ´FŦA«@|X| OØõ­¢Îf«a5ìÝ ‹‰‹­É ÒZ ø¼?B´ë¸âúåQ2Q͸²uÜ"Ct Ûc“.oH¨áªxÓžŒm=<ùV"‘Åtr òÈÉûÞëi¤ƒ<*ó6Ϭš9Þ{\YsdÝÉ‘\¢&‡ÿ·jŠ;ËÜR-¢²„5»"ˆG¡Â€ž%s^{ÓžUî«é­àyÅ×ùaù½lè–£<ÝÈþ&IuC›G!z!`æÀ1¼ =5…,LBÙé&™ ¯]DykÚîez‹]Xë‹!ÞÀ–"cÉ›ý`÷#ݾU‹Óa‰³~}žüÔêäE—r‹uy47eö+ãmy«‰¿ÖÆåüi§ã5þ¬ ÷3¹áp̸5,tEl`µ¿¾J¹ˆ3ɽ,h4ìkžV+ T§KlÖõѤiFlJ4‚ÖõVž7VíØ`ÀÇ"ÑAaFöŽEYfx©%¼#œ?éÁk“ºMß ~UÍqs½ãçÓnjæÅ bI­ÔcËAá !…Ôi–oãD+ÃcgÝsÕORÑÉÜѤü˜…VuYºÀæYx¨dÊY)^ Þ¶~’šö`˜®¯$#õH¯=΀ [hüýî½&†3 ïÔQnr ¨4Ï…€Ó$üû(|ÃEùÿþëVDHå°UB¤|FW;(:w‹Óåa_6Æo©øI£Ÿquä^;HÜO5m é)-Ô¥–1¿‘×§n³éu'$$Ù좖oп*hGAÀGä“ÑøpfàW±^²i"Ü ,ºþ»ü‹ÿ¤ç3‹7æ‘45•;$È쇷CvØaŽŒlDϯ˜Þ²6ù<]Zg°~ÐŽè»{W¿žeU_Ó ±/1—!ˆ(CDÚ-ß9[£NAþÚ±ÑtŽ>AÅ­w_fË 3½CÛqÇò‹€'ê›Ó$~‘í­å¦‚µ‘ßêQ]à(€”I»¹j?ÒJ{ ÕF ùþ¶8òî;üÇ1UÕ—4œæý?-º"ý"UêÖYe+îÕ-›Ë-Î=íI!]#AnFÆ#aÙƒåá•”¤cÊtã¹ë,º¾+CY,²ùjγ®pM’þZlXtNÁa ‚ÛäÕ°ûcÈžé˜ËÅJNÕžóN‹)bê]¶ÔE ]qt2ã€×ù·AJxqµMÝJé˜níû¾d™Äû2ðÃIƒ§«È÷™ï¯#öØØX<›Uí(émŠSõksû•ÌsÔ‘…ÆB‡{ÈôY¾ZmÀ¤Š\|žzÆ’ê“ä×ÐÇ„vUŠv[£Õþ-öÅ51ôéo"Sª×ËîÓ~“Z šÚ½‚Gni„»?6î4âo±ÐЀÃ@f4«Sƒ‰ùÔ ÚXcSyîÝÍn*¤¾ó9ýúÜzzGO qa拳0Ä»À*ëà ¦z%îÂêhÇŒˆr´2 I"{$V2¼ˆßmy[@ÃJìô”ŽC¦Úþ;¡Ló>b',œ³o(ˆ·-SrJXWw=šE Ÿ‹y0Щ±æ¾0.ý‡¹Gûì[wYòÁðmÎaKÅK'’,ÉG>—$‘.–ì«dW@ɽø÷–wÚùÕ#lŽ‹LôôXï]#h¢®Röý;±k¦(€ Ýø{•õãÞdÌE²ÎbtªÂ›÷•æ` khµ °£{‡Ì¶XÅ”KcØf¯@×çÉ=†Å±Î: ¶oÛ;¡ñ°Øëp=ˆ— §¦ž£fB`DñLì¤Ü¤Ökd'²W1ŒÛŸ !Õ…¡³Ò>$O±À{mˆ,à4ø¹‘â”sç4¼.ZZWìõ…Ë¡VÓ°Æ=>©Çºxù¬Ö÷—…¶:F°)Þ¡Tè΄¦‚OÝË;ÖÀ­bé˜+û÷&+×Ò¸nºŒöˆuÿ›Ùe_)´R_ÿ« –ÈI{3–ˆ74nQQBå0N=wfÂæ'çUèÎ(’;qè¹­)žX‚ ¼ªj¶“pÝËŸ•üEØV™àöà´ødL[´1’•Ûñµl}¡îZö:ÙÜgéQfk¥©_vz€±Å©a¯…„YŒo¤Ú}bZ2¹¹Nhó¾‚ò`Ež[v¾²,Â=»u&þᛣqî³Æ¼qÀX~za%ÁÚ 6ÈSÙ±"ðRà¨ËíµÔªø-qEŠ‚áßrøÐJ´b|ÕfSY C„ùáµØ‰Ü^Âç¦è M©âo£ÅЉáQãN¯Ö›y¬µ?‘Çó»Ò¬£+v»‘eN€ þë“ARî~â-­²ãtò¯[,ÿ•‡ "Î×TÑÆ/ áGú;7Ž+u_ŽñÐë 8œT-2òx¡»´„¸#3Ï•›pÙ&|sßöB ÇØ¾EÉžŠáÇp >‡’¾CÂßS1¤‚þzlºéÈÝ"ÉÌÇ`pu§ƒÔÃõŽU¾Æ mõ1·–—JÏî¯?‘ÆìËf™hð‘â« VÚRÉ»r·~&si.žš¾á4àu2±LÐÂöüü ¬“40MñœîØ}Lcà2Ô‘0¿7{‘gP½å¬PÄÊQÈü¼•_ÌÖ¼5®‡zŸ]ôgŠ!oL_UEezÚ@F7&¦,¶$ ¾ \Zl²½G©99­ ÿ$YUL ?¨ãü¸’~¯I_ö+œª6Þ e¹öîÕÑÁ@„?º(–Å–I ß:E!P ÚÈB° ëì3çò|Ú=7¶:ültÎMÔm® ( CűA¨Ç=k—‚ÒàÁîÑG}MÝþþ|:Ó-4½\—7Œ'üçÛP-bi'™©‰FMí/Cm÷Åð§>hdÉMNxH{CŒÓ¸2.®THQº]õÌIʆתÇŽJUÞçÌã(8’÷ö É΀gæ!r(eévÕ2®ù#%w¿{Jä/˜¿à4ílëÑqc¡UÔvÁ`Ø·/²€dþ×*מVšŽÒŠbk´þúë<ó·^ô~Ávr}F†KB®¶Á»oÉn>Ï2·4\+b}îFÑ”2«ÜbØa¡¯š£ªÄ_þ‰J ýþ«\ø¥Q¨Õöé•TÜ÷ö>.ÔB˜Ê$™.Á‹ÞÎìÞ¨ þ6tŠv¬NFÇàŽ5RkعÎp+–îH’†Nÿ ¦¼¶Ã›B\¼œ•$ 7‡ÄJ¸˜·ü¹fcat&eõNУ;xR•º¢&Š¢#Eùï%® 8ÉFZ¯7œ¼Ü akë£Nj3o-ãö¾ŒNÆ_w¯®âÂùÆ·ó•!I/”ðâÖ[Î…±uíÄd‘È™ìæÈ&Úß}P5,K ÷¹R]?˜pw½‚F†e6Ó%œd]»}/µ‹Z“háª,Ë„Þúñk¹~v‘§ÃûQ·Ô*Úðë­cÂ⃑dq&ûÍxcÿ¬¸4ÑçìKŒ‰E5EsJÓ/hz‰},Ý Wvsà¹)U‰Â! WóÈWîÈe=o&d¼¸ã ×L—.4æ‘×xÊcëÑw{gs˜¥ÙƒN½½µf­ébu¢P%`(ôÖïù&Ï¡×å‚ÉîW4c§íŒ¤ZÁ[4šR“!5‡ru¦Wν)Il?#á0k›àwz›%å%Õ~ßú˜EF‹ynqKAF%›ãÌRxRãöñy‰Ô“Þ ¬Ýã¨;äoºªµjÅq’4òq7ƒ‘&Ž^S;£“̨ÙÊÒè„û ây[³. ExecM.ç‘?Á=ä'@nhÖ•ÕdCl‘Æ–k”’öÒ#[8r9"ŒèN"ï4žBJRðºF÷ ôÅï1žAÈ4 xVdðKŒ¨æp ÷¬êÄú”°eD{»½ùYÞ LÌ$øDá‰,­|ª?íê([×èx¹'§¯Å$¾cf8%é©`Šö¯4º$ÁÜ[ë^˜¾’)R9Kø™mçÊñ<5óÛî,<"æ|P†é=¿°cß…í2B äoa:ªKC7î­s®UXæ$ÓL±}íåÕ,¢ß)ZäðĘÍÓ·ÍF=×:Ùáã^}0Û€ª\ŽGr¨1VßÊ^½œîŒÔ'ÛÍÓéù•3Å ãM‚]gà´`¡Žù”ð_æÖ€/DóÈáQ#ø³ìTوĢ–baGøÏÇ) ø9’Ð!3Ðh}ÀQ ¦~p³Ñ¶ëÃÙK}ˆÿx8ïõAk|)Äz~]Ï|\µ°7+Ä ŽUÿ{¢ŽyªKÎR¯?ì"S¸Æ³àúÇ5Ñ’F†ñ®:»ÄÂÌRùígZ…±6Ò’¬Ù UÎHd:èaØæy§[žór8øò ¦m^Ó {)ZF:Ìo‹α÷Ý QU£G¨Jî]½o .¬þ±›‹ï‚2RÍpêÖ_ØQŽÁÏЬA÷NƒB 4lÿ¨¡kmxÒ@ÐîÌ ˜©­¬Ðhf«ãÅN¾D+k¡]ÛBÜq»Þ2„§.È[n™Ä»é-v¯b-‹‹^¡ êŒÝØRì[3 »:"œ#bš„JÉò¶ìdZîçß þ=¹Pàƒ¤k¹ZáNwʣݕ»ÎÂT­F§dâA®ÛPil0Âú;’ŽÝpÇ=4ŽñùïÖxEÐôà{,ò¹£)ל†ß2¸&ضòÓ±B~ÈI‚[˜g€€ƒØ§N—3–¢ï‘ŠØ n fª³!ó›ŸBàÐîÙÔ› ! ‰ü†ÙXñ= ꦜW«®°émlÇš5+Ñ9dŽòž9Æw¿®2ݤ⟨³ ¤ì3On%\=ðöœqx…k¦[êþ9È0ï€ó>±·½¿Ü”e¦¯A9µê¯~àPóº‹ù'6¨ÌWŒ°y”S‹È%OÀaºkžp.È2/¹!ÉlTejˆ“!4DûÛóW;цٓ¶8Èaî»aój!®))Ú’ ±o8AÊ~öÓ"w·Ÿ§H¨zÔ]:¦ ö„Æ[tpœ®È cN°µ£QlžŒèÝâæ\膩jCZýv浄¡®ýí[Þ'äPáq¤{þCô@@ï ›Ï¶Fïl„(š{ôA}Zg¤0ÞŠeCf´•½DN:oL$öcxäÓXv4m΄\\‰}Fh‚¶£?/œeÐÁHÌ$J}¾C=HNêÏxCÝÌ›Ä`q‘Hò+8ø€éa8wÓ9Ui»wš¶ø\Y"5z.ô¸ÙÞš.–4Pÿ=ÑÌø®(^º1¼˜`Rà gAÐ:?³ 9 w›È7ƒˆ/ԽȢ8™ õ¢qsÿ ‡®43/ø¥QoXyî^þwÂõž±Þ?‡0ÉíßW¤7f¿èmôð\^Q®`Ã$±VpŠ[EbªBCÆ{n4à4óêù{Ç_Jôˆ}8ÙÔNËŠ}éjÊ)Á]QR–Ƚ] 0è² '¤vRfÓØIx§š\[¦Çi»œxF/î é±ZcSH;7u7úµm£îßè$W®\±ö,ή®s»d¾ì<1¹H”|\y­'ó“æí´RH¦¼Jg´S¢PB˜¼á£Þ¼¦i¶¸¨|BÎÔQ5MHcuqcNQQ.‘È%¸Ü¦JžËCäQ…‹ªMíö&WÄN݈VAÍ'üzÂÿ¸’l07,“uSQÊÃüñO‹V¼§ZŸ‹!¶ ˜'XÛLÓè‹gß å³f·ëôâÿÙ$ÿôþÝd5Þ˜ðú¢€“¬?þ[*¶Œh7ö½{Ö>Ÿ™##mÙ5 2ÁŸù-ž4Ìn(õøS%¶¨}Ñ;î9=º]Q'[v鮀î m«y—V2OÕCŸ] j9ÏwÓÊEÿx†—†Do8HDö•“/(X媜'/¢°ÉsÇÆ ˜°NïÞðI6I)ƒ0ôS*¡ë!|SúÛ˜¿ºôˆŒkö·æwW¨ki¿ñÇ–ÌâPåº&ßRl‘LùFÞ=ÇIÕ³b{‡¢{²ü#°ºõ|}qãã ]…ÿP0Ø®xMOQC—íåö}tïñº5{â,› t| % H”9÷²Üƒó‡M-ÅÖTa;š%vè eWà¶4åhÊ›“æe/;Õw<œ-MŒª»|PPާ±±i¤c¯Ü½:w_\ºiåÓûÕn˜°³OÆÓU ãUé>âQücÃân)Î+ŽùÚ–å >ÁZŽ?'â,ß2Æa\¾TÝ­Ã>g€Ÿ½;ö€Ê­ºñ•Wv \Jñ§fÀËâJ­„ªÿ¡Zðg¢$ÒV³}_´ôs ¿Ü›½/šV센¶qÊÍUPPSFTß?ÏÔa3§{¼ËÄf%€™«›þ¼ó¦ü !Hvê¥¾Äˇéð¢h)vÍNÒd»¨#l­MZ`1‘íÆ¨K*!tX~¯ßˆIIv)P–<ßiצC­þ¢½W €Ö¯Áærn1#Ø‹-çƒì^7EeŽ"e=æz5§^¬îŠèkÔIÓÜ¡ÕY¯ÎO¶ˆˆd̨QÙØî¾ Ñ:à¦r'\ytÇ•º2 3CIh(•1é^ó›ôwvX’žôûÞÛ¶Ó¬¦Ÿ·1s»\8rIÖJÕ Æ%3Ï­å2Þ>éöù-žwœ¬¼Ák¿}ø£©=’ BÄ{´.8ATásÃ¦Ž‰ ¦®TÚe.RqþF¦t¾{ÝÅûóê·pîîë¦^Õá <Ùxè¹ s§¶ˆ£<™Vm¼Ð„ ÐÖàwýQÇ„êÖsp–Í´ a`Ê×·®!‘‹>Õ †‘™âÞÂP;jâtÚù[”†?Õ8*…PT †=_,d÷)ã,ŒõÛ4M±Ô¼h³¨vÏùì|_rÆ­ ¥—¿ž=|‰'Ø^œ~ÈnÜJ¨¨j>!}žþŽ!ìë²¥"l+xûHROr“¼1»!‘kL³<IV¢áKÞL¦¿»¨õ]-O­à#èÇ*s€3³N«¹e{ÄËÚy6K]QY:­Ñ>£ú×±žÀž‹sO9£P§˜pKÃîbṲ̂ÏÁ¤ÎÙ)>¡+'c(ìvx{³jBûæQÞ›SÛ°72©œAsôLS:Zºj‹oû\ù:‰æ›¥äÛQÝEK%Ÿ´Uk,(D´ud9Ýø!êX6<ÐèB©d[׆=¡æp dI‹xàkÕcOc– O°™¯S;Ÿ@ŽÅSy0"¡¶—+ĉÅ7®rØg-ÖÅãJ@.FÝ!€£8`ÔEè¥G)Áâó¤K7þiHÜ›¦‡´ëìQ–+Ú¦ŠÄܶ@N0% rštj…B§¬®û u¤ c›0jŠÎ|Ö°V˜aÀÃÂ_¦ŒÖ-@Ž“ÇÞ2ø5zöè’¤ëaWOì®p&n°üÙ ï-ØtÍqj¹W} ÔMtX}•¼mĤš3î^NúÎw&¹Å„³=#+¦÷OÜ£)´z`wVʆYg”K7k ÇÒašƒ~P5R}˜²é{šC&Еº],*&åN& {ƒPu¸’Ëi3\!ã?Û&ÏÀY\J¿…Æ¡ÕÏÃ(öÌçvà8à|óýºê”7×úÂKz;8ó}àýÆúÆêùn¶Ìú¦uJø¿o¯àr.`yÅbRkª3%¿6ꀞ¥ÊPýS’ZÚ·¤¸³xaS³`ðš¡oÉ“îû@ͬm­|Ñ©]û¼âó‡Mu"Ü'Ë5cR—ÂÄà`¶T xê9ç¡XÛG…B-kû “ fƒÙ?=ä ©;ÀÒC³o{‚êå!ÉÀÒÐM±³oH°VL ëëCò½.žÛ…bÖ°‡èóØG¢5sbâZ Lø‘ŸÀ÷ãè,/ „ãtòRu¸h‰cî*&Ÿqð^K~Á l!Å4ñr HI‘ìP^yW‚”¦‡`À¡ÈßÂÚexœâši‰ \ж)Ó¨›ojú´}EŒ&àN¶ó|g€†òku¼[º–Dr”|HcQ. 17?e›Ã´*Åñ»dlÛ—TŠí=$%I¨œÌú1½ ,í”&¢õñÑ(µ6Ÿ7xŒ„ŸZòÌÅL)©IŠ\®Fßtó{ïÞý5a¾yŽùÔ¤Ô°Ÿn ÞÕ•œ7@è§ßJ#¬3Û! Íhä ¥Çƒ[=(ä ?V¶žPÏGg(dÍΧãÎ÷ù+ˆYpÒ'Dg¬ðÇe¼¢KζË@å÷µ–ÅÛÛÈ Þ4–1lŠ‹í“£Þ9†1VÄ/…oP’öøS¨Ê䵕àO^ñHþ‹¹Çš ßûÔј;‚Â23…P NxŸS­Ðº^âÒ‡µ¯`(À°CvcÚJ8 endstream endobj 88 0 obj << /Length1 721 /Length2 11641 /Length3 0 /Length 12230 /Filter /FlateDecode >> stream xÚmwP\Ͷ5\‚,¸ ww î0Àƒ»{pwIpwwwwBðàîÁþÜï¾{_½ª¿ºêÔ–µ«×^½«º5¹¤­³š‡=Èdfå¨Jª(ÙXY¬ÌìÈÔÔbŽ`3ÄÎVä æh‚Mª`{ ðD¦ˆÙÙ{8BÌ-œ´&tÿÖ Sˆ Ä agmç 1±ð»ºº »:¹0;º2ÿ-RƒÎ`€Ä SRÖ–Q”ÐJ)ª¤À¶`G5@ÙÅØb‡˜€mÀt3;G€õ¿€‰­)ä_œœ˜ÿ!`ë vtþKÌÌÑΠ ¡&"©¤¨cQ€lMòÒËmxÿ¢Á&Ž6ÿêŽàü_Ëô_Ëø¿Ö³Žîÿ¶˜‘@€)ÄÄ` 6‡Ø"³üK7[3;ç¿Ã¦.öÿIý%äô—€ö¯†tS°Ù_´‹µµ"È  ³³±wq;ìLÁ޶;íP ˆµÇÿ÷?gÐ_DlÍÿ*ÇúïÄIâ6U†8ÿ•Ú dýW¢âšàŸ‹Øâbóïzð_=þž¨©­µÇÿlù·6d‘”×PT•eøïü“–°5±3…ØšTÿj r4ýoàŸ´2òïéù™ÿLø¿¾ÈÙâÐeeþ×x°þkýÇÒÿ_”¨¨»›ÀÄÎÆ ~ùûáùÂæó蚸8:‚mÿüo/ÿñÿ$0Øl‚¼üË΄/È2µ)¤ÔW"¦ žafÊHázq²ëB÷#dÀÂÔp÷ŒðZ0Ç •d:ÀX`ótC溑 FÝŸˆ"ÓÿEøXHYfî[µþçkîSm˜Á9œ‰"ÜEø•súÊr 2ýÄ—YÇU²Å¥€QF%m½ð˜¿ã–æom¥èôi°¾ë¼¡‚·*1g,‚óÎ…·–aBs¾m¢^PZ䕨ï†jßpжðlüleº”¹¶isûhú*@«»ÅWiItA.¨å‡íè¦xCbVÇUiäÀdÔñ盦üàc„•¤+‡eÓD›L¬¨£„Ò=E{,ŒóúµT›†,o,Òm)ÞˆåDÑÐ̹¹ m0l´|¢3׈lòyÒ3†ÿ%’Ô!FÓXíîÒ°œzš¿tÊ çœ Vµà3úcߨfÌeªJhÿýÊÃô.¸+Á¼¢Ó×HáD“°eOqÍG&ùöü!e¯¯9zS*©é+€£u ŽÁ8MEv§Êƺ^.»“ÄøQñ‹í1éñRlEãÁÍ1Ì)Gº2¾N¨K"œfðêZ¯ ß‘£5£¦´áËO𖛇ï/Âã}ô¯:AÑøv=VãS¿¹)ñ3ÑöÑúõÊ仕O¬™Ø ÞNUò)ßß#7N,Jâ|±‚é ±òvt<&hVtß ‰ä– ÞY ö]é7ƒ™¿{)/­–?ä«îð}æ…Å}u›„¢#z<†ð©ù·Uˆ•\’ Áðó‰áê/,¦kÇ[ƒ8!=ã”÷ó †¤µµwj«°« –Ÿ{„äZŠR¶Ÿ  _bD÷Œcic~ïð›˜å ±$n:Kiek€§s÷·ì›,·_Q²eµê³ÚQò ÓÊ>ÆjgøÖí¦ß'wz Ë|â˜p)oÍ‚ÑPA+y- ê¤ 9x«ÇeÍ×d Ñxo00hÌríÍ’CîÃýC(ûZn}*;g¼“±÷gB1jª÷O„Ž!Ø®ª^yA±¶$§fI½[›ÚÅ^•ÖÙfÕ‹N4M:èÝm=Idš©»ÚÛüv‰¨?¯?¶áÀ=lMΞÖ+Íœ¨±Éà:HsÅ.÷¦“•fnY“~Ïc9ήv+Fxõûžç: DgôAAcê©)¢»B²XÞ\öXò×liÍÕˆwtø_öÉÍ‹V/ ¹eÎTÀ—o_”Ë‚kÅ®í!\€Kzè"­dO«¸i3K¯G2õ‰™„†ÚǸ¯B—¤ßSb¸M–Ôܵ9\d!c_Ëø+µáºfížo©„¢÷büSƒ 1Ç %;}ØÜâCwéêêJºnMg¶F¿{'Ý>N;9?xÊ ›¥z5bþ±l4àõ$ô2›¶{ˆ#õÓÖZwF[Óºt¶—IHà6Ãö%qÏ;‹-‚üúý§ˆÑ˜ê÷690Ùš› <=Wý¸HþÅIäòD¬_ÿñò•€3BÝ{&em"¥šÇå’˜wḇ¥ºê¹c¤óÉêA©ÊkA„¶ÅýVßý¢ôŽn;*½,le=}³P_nú|ãJVv^6GÝà7ÀË÷È÷&Q% <¥ïyø{_õÛÍÌ çm®O¿Ìø"dÍykEôˆº_á·ÚøíÎDÿ  ¤^çõB$¸gÔûùU„7°Ä .¯ÃbÚ…}\ÓUt;‰úÏ7+Ž’¡$:© g¡Š—×^4 X-Y‰3±©Ï—õ²i,/ÌŠ-™”Ð^À›·¶P±,)N&6ªŒì´Z>žke3Sùòa;”?isÄÖ’Ú_M$ŽA¡fv!ÑßíÒàïœh ©õû눓´Eð6O²ö œ°#U‰„ž?v0¼óè¶-õèn×C€üƒF-ŸCðç%Ëk€Í<õœ~U=-sW‹•.‘C-ù)âʸ¤®Ûƒ€oëöd—3ï^3{“v*€bhJ¼ÅO^^4D›%çZL¦5n“\:£ ã6hz!u‹à‡¦0ut®”ûÌÁ8ÛŽ.•$ð.¸ú¬$¡HªO/™OƒÔÝïVÅ&ñF.ó¾jàª4L$Ÿ¼C¼Xø³¿fÀ¾I^öx–m`KƉ`óÑT'$j¢4ŸÇ¦fô©ô»¬tãÉœŽœsª7\(ëGÉË…gÂ(H*mó3¡Ž‘Ž0¹nPïÉÎõZ‚—'ûùi_7"ÕQÊN4ã*gÞ¨æ2($„ùŸ‘Ã$*k¨<´,rZÚÏ(„¡3€’½üÇ5?L½)<Ë»‡ç*6d$6qÍã¤1úMê' vFqÇÄ­>uÃ#ô 0oŠLt?œ0VWÍžDÆÅÙ"T½½äÂèÅ«­/ÆfN_f)îíU1ª"¢îZ÷Ù©9µ à‘äe’–†& "43A±ïÓû9žßü“ðØÓLàÃ¥Aë%Ózö(Õ ‰6nð~8œäÑ‘ìð/aKnHLUa~ßO Ê*æ¥Ók]+Þ—ö_–» ŠÁÈë¦`I\Y»±wkTY•)¿2¼äF+BøYÏŒov@œ<à?¸ýkÙ•>âªGz?„°Ö$ì7Çë·j•¬]SínêûK»MN+óKYá‡ýŠ5²èØÌ¥Ü[¯ˆ“eÌÈ{a‡P¹J)‰Ë Ï¡-r¾§2QlY/€ðÂ*u’¶ƒHŽ@–ÜC~e4Ð çëN8Bc4qRòR£«mŠ2jó¥ìgËÖl6æéMÆ<=Ž>ÀG/PÕK¸ ú » ;¸FUFÝj•ÿVŒ9ªt:G æ¡6‹bó 9ö‚*“FÅQUr¶¯ dòÁÛ-XLü¨Uÿ¡þçQ‰¯$õžh{MãüµÔË‚_åéûÍÖüQžæLP*Œ”_ŸÑº¶õÜ;ÒAqh e}o¢"_,pY}YçøŽ¹Gˆ\9±åRpô‚p¸¼¦œþA¨@²}õYö‹²›òolÅÁH—Îß“°I>¡E_ŸIDêÊ‘+ò¾ú|/®F±˜Â[q⌋Ûd Îaw´d…¿øÕÙ*Š@N¹ÞÙtçÚ-Õc ¶y'öŒÈKeÍCLߛ0ö¬Îó£ëo÷ã0a†„~K®Õǽ˜§V_¾ÁßÏ›ý)í‰[ ôzü ‹“×â2öaÈ .ýÆÈÞ£\¹q3>®Z¬»íŒ@÷]mÔ="´¿N”B’Ã}œÚhz¸£˜M÷†Ž€K¤—tŇ.6Oê:ÚW'+‡ñY2×…7;ˆM” %‡Ì‘6“YXƒöAS¾ÛÛÞ µÇ næ™ãøÌ:º„×Upó‰ÊV²hÔ,)hÖ•—L˜iÅGèÃ{iÒ*Ò~A<µ2TËô Ì|0agï—D¢ö–K‹DKî¢BJÃÃôCbŽ'7çÊbÄK ñíûÉ1Ð 3¡\3ðÎj+ÓüÉÞŒ7{qÕUlÁˆeE³YÙjz¼ádoƒ-f¾ѧ–ÝlÝ ´¶»{pyFKÞ'鈱V5)Ø(ÕµKé馉îMù¨[Õ…Ž%”ÔžRÐ ²Péž qÌ÷Zºo\ž8%ÁâaïKe¼­‹«6¼ÕTëuVIТÐjÔ L«Á€‡é²SÍ-Lÿ¹ßù§Õ(¸~õçïÑL7k0®,.ò—mšM•Íëk×ru]îPW„>÷!©š6ÓþÁkÑxnõ ¯Î–¯ƒ±Æª’°?‰b q_Ø@Jfoxxá©ëû©'ŠGj„‰e¢ÂÐú—CU6J’>jíÄĹ9 ÏAXdpïd>IW¬{Uè9N¥à¢2Kì0#£ï’¡øI(哱%‘¿Ç<ÐOj¢‹ÐL pOgþŒí´Ç·‰œ÷»õ^tè»2þÒŸSîÛœzGRŽËØËg¬>8çµ½4¬6ÿî ¦Ý×@ÇÍDróžƒÑò‘¦}ªío!²äöt` µåÔJ5ƒþÕ•>flWnÆ’u' {½šµßñ¯Ø:+wº\ éfZE¨?%Úa¦Ç£@zt´wGþ(š/X#0ØþH™FÎúÔKmª…ê6‹Y ,÷v/úÃ(Ri6šÈ*²ñ%¾éÙÂ܈Ò6Ä*^: Úß:<Ô¹èT@!\“ç’ ¥KX)ŽÑ ŽºÈ&=ݘ¸X|× P$O|“©r…2ÍRÎ×µÉßÜ…¸Œà7Ã>ÓnB bw œl‰:$1RÉã Ö‰ôçÄ·šq¼ƒC¿$Jµr òãZèn\j£iÛñiäööŸ“§mðô´“ë@$ÃãY"ßÔ(„¡u‹Î²53Cª}’¹.œ ñ&ùåK~b˜ ‹ŒhÚHÚ÷?ÍÆ”0#o÷} ¸Î#sÄh'­‚ocÓȶBþ%au–.Ѭ9r j?yÉsë5ùz²×¡?«²MànH?ìØý"ÓçüQVâ‚4Àÿ„=A2pÉ2Ñdo²m„¡Ê5[“pâ.ù!Pàyœ ¨v˜0Œ¦+CFå^êËyà…~Ýc©ÇÁáž¡»Ø#nâüOøùrïêHp<´…<8½`kaô…tugS–è~½ÿÿú —3ˆ©à:gMÌó§êA9r<‰ZÝ5Mô€Çï+¤ÖõàÑѺˆƒ†+#üj )ðÒè†¥.l^ëŒÅs˜¤€lMÛ/\¤nN׿ºäv(ç¥zíîs5‹ý$…&öãÉkäý e¾£o,žŸ#žá?»\4¼o©D¨Bµµ°A†d6¥ ³Ç6Ó6ZQ”+•7oC'ùÄqª ¤3x÷±CoÛÅâ‘k’Æ2û¬â”BÜO³pZ Ás|è·×ùÍÍY=jp÷Ëaø+îú¢ì€b¯¾ˆà% ÿ­Ð,Fx"¡…Ðbé´­ŒW¯ü+Îç»10ù=°#N¯^+‹çNIu#5´‚^ß*-®¯¯lÀ¦u·¯‘èK9YªÖ… ªSFɺaedš¶ÚGcsóóL&¤VÖW“VK8P3qRéPdñÖ!ßÉ‚,—q5ú»÷¶øü~ã-„Y4èà_ì´2t&RtºRˆáïhÊ-s­W©ð§Þél´h7ˆ%€¿ŒÉ^A( åR›fŸx_¦N³Þ1]¡[6Ìbä 7PuPl˜á¸A®¬0¹Î<ÔÅ6ÍÕûNE¡­ø#pc¶ µ•ÚûkKÀ£ûEìÝ~xÙÕpºølbU®nE6‡e9ùaÇRï'§ü ÚíöÔ¶À0F[oŒã µ-ÝÔ¾â@œÖ›/³C«A—— >’¤ã%ZrR 8‘æ"ã{ÒAž,©¹EÜ44Ææ,¯ƒJÅ?¯ØßCèvNªÔÆE£ù w9¬U5tï~Ò– ì_~:ºå¸ (ëÍéºn ™ ‰ÊN3;TX˾sàô´Ï×îç¾PJ¯ºz ŸWIåÓªçµ7nL×.Û âï¸Ùm›…ÍÏpoM «7ˆ›:ý¶Ž²ÊIeÜvc ×¹-ãmwøôFZª4$ùãþxf,±ØÀ"LUñŒ<†Fø4Š)ìUù¶¦>%Ä;Éó§éÜ#šù25ÍC1ïi1«¿©B¨G¹æIjBo‚߆ƒ*ЫLþ0æ×>dhqY¨wsúñ"“çžj1ƒü®ŸžðS6¸Rs¨X-~€®Éône£Ì%®Ƙx?b2d€±×pf?ú Å•µUÒEµðläå}TU&¤öžD½8ðHÀ\/¶÷sI‘1½ ¾ZñÊÝN 2RÌCñ¸V0cD&råä_°¸Ü8/V\Bm*ÞÜe÷&º¦Sj¤ €N%mŽE”î©é¡PôøˆåiK"2/Í-7ØÜ?„[iu¯ðòxŸ¶=¼¯ƒïä¯H‡g¥eí0â3%£U Ðšc“/l‰#l„~:NÞxÚq¢Jé“À9! ë®Öhéú/Åj^š¸¦®Ô…tŽyi7ç —PúJ5àwD;ýо‰–1áqS)@»z¾s=J§‘NÈ'Ô¦îfËØãìÐXx¿jlcw5šç.‰ïΆ„@azšyùvÜû/ë„ÄšðlÙÔ‹¦$!:¾ì†ICGÆù¯ñ®õüf5ðœŒb¸ìŽÄÌ/ÀS.ñºj9§.úucsNÏ4MfeüäEZ€£A³$v¹=–ä¢9ËlBR¤êHOPý¬ìíƒå_ïláæFxÙ3ЍS 5UñNØŽá²3v#.ñ›Ål7·Tpa{QþéÓòâÚ6ÑB@èlÚ«n¾-?¹MZ8Ú,Ã]ú¶‹›‘Â{R¤n÷÷ ¬Žï+`QÛ\CÁ.5ã‰4ø&9¬[Ì_v äµ>5¹ôæi#¨÷àÞ×8nÍtéе¼T.6lÝÄ–aÊñåå …B”Çî‰À†f´ /VçH?Q²ÀÊñú¨äŽUh?Þݶ©ÖÍüI²:gÍiÒdzýƒßrz“¶ÁnhvpéTt¶Ùµ”Ä/œ›ÛE°2+´nÙ9Oýxw©ûú§7ßEkÕô×}RºÂñ%ì'­Ìø½é<,[8©¤z3ï 4OT’¶Ø%<¦â­¢®¢s–æTùÑǦעz,Æ>·!ÄWXúkUoNx7,Ù6ádW}Wz:JH¢šEâf×å$å„u‡ ³ô²Ï¼¤„±\’4Íö‹µ.ŠHdèJn«®rƒ¬Dñ‡gºÜ‡²=V&8“Hstµ‚do$R*—ÑõĨ ’¨¾i~ÔWîø…½ š3]Æ› ‰»7‘?Í_hÎä?⹑&· šù…‹Ì‹¹\O÷‡33ë´û/&%G…²WŽ|ñ“Ùª0í饇)NEW˜øk0¢ßCõƒ×^Rß÷žF‡wÈšõS… Ç®b”Äü+èGóEÁÔVágZ‡ŸåÒr3€­wXai~Õ¯Ò$Â#+‰ÈϽe[bÔ’~"òH_z44Ë[eLiµŸwxg½¾ð¢A¾m€è2\9éæAEéåh"šz;qþ\ì¾6$¼P!Æ*Ÿ:†ãzRâD„–k ]=cŸûíäøðÃ&0­Téí-aâÕª8ŠîAg`C7¹s·/›ddõuÏ`‰gšp)¾K‰Eêû‹4ó=`jýø¿O';bºÆŒÜÛ>¼Ó­ßz„l¥+~Íaàºî-Õ²á׃µ[r†nú7†Ä`‰ƒopÍ© ‚¦ynéÊÁæÞt­W+¼V>v-±T üåÈ]†Ûsvn¬óB*+ùsu‰7•Ξ1,£æ®´?Cxd –hÎ/ë0}B¨ˆå¸‰,óÕ3›¡‘YW® qñ8¶‡SÏ%Z ©5¾Öh+ur3DÿõËb.jEtGûTx‚÷™M9õ<“´4ss>³ÿ\Õ:êðà»èïÙ)#úÔùß+.Þkpr% FoÛ¦ßG³¬Ý’CrfMø¢rS›½ÍjE®åˆIZI¸yжåeGBšè ñË<ø¢0gð*/Q¤?†9hkÖ2O¡"Ò:8ñ1‡¦Ch£SŠ y¡íöEÛ&½£ÃÆ ‹üõ= ;ϽÚCg4žÂ™µ`d,Û3j[øõ“œ @”æ•rô½ˆ‚ìÅþ(ã+šê'ìæí²‘‹†<Æu“IÌönaò=DñŒ±Jê¤:¦?å=t¦í0m}Èn¬´Ô$°#=²˜Ç÷ÌH©±—Ѿ§uÄ\ÇìR ñ¢´:J?ˆ§E>F`Ãm‹f42$±/…Ë}ú5ÔeV1‡š›Ì£·‚ø ‹U­_hð5åæøÃîw}kò¬{’Ò.žlHÊØ'û'1¿NÊÞ0âX£BîBö÷¬µJh#»˜ÇñœÈÄ¢ƒ?éŸ|ˆÎôX K}£WŠ73O^¼¿?¹”,ß+)ê”bû´;DšrL·rí©¹§“²#qd„ÎÀE%öäb!Šníj•õÍ,k„ÅÀ¾mHŠ6¢W; &ÚÞ 6Ç? wØ¥qKÝ`æG0u©H²ÎBŸ…v5èýÈ€õBWþéFŒ¦Û$Ï'ïÛ$êÂW¢7K/•_¥.Ù4§ÌDæO ¿åçø‡š™õ¶í~µ„[ yž^e"Äè$­‚ÅÚ µqº¢~W_ˆ`N»¬È{ˆ9†¨„3?ñ»„’¯— GFÊæ")˜ç…1½êÜ~“é~KáÆÓÓ|Ò6;_F„¡çUίõAä™;t†>$›­äÆ™5ÓB%µô{¯=V ÏSƦS¨™îÙè¥&2€/†;Òi*«ÃÀ§Hƒ‹o°Œí÷÷,+—²L( 3Çšî5‹RŒ]K§2P,Z.¼»Ì[·3ÇZ[oŒ÷)º‘&² ”‚ywZ­úFE4„ÙÙvÈšWoð·m=={-)£0âýsû¿ƒ ¯q´RehT³/n2úZøšD7ìd( ]§7LLuó$%Œ;Ÿn* ÂYPTo¬†OEvFˬ@[1§“€íOÜ÷Š Ž"B #ÕoìÉß?úáCxÈøN¬3-jÜg>¹÷ãäwUD%1HÛ]SA_9ÿ°V$øä³E‹¬yTmZ}nøDÛ¢èpjÁ&Få©%1"Ù!Tm¾¨5#½ºvLÖ8↡ó¾Á0Õrû“zÈõ`2³émQŠ®ˆO³mau^-O©-Š6NÕ}&‰§Ä[¦÷ƒŒ¡œžpé–SÁì4«ó|6©Šˆ¸PF¬Œ‘wß® £‰4Ï€°¯Õ²©¦ƒ­¶Ï6εíæsÆ¢•@ÞòŽcál Çç┿ 6Û%÷UÑÉ®;c¶ê‡ó‚«ßku«2ª¿}ÍG ¡ƒL;3˜í¸ÒK+ëî²þò÷O›3#}&£¹s'€cl$ÇÃÒvVv’¾«ëDW×è1ÿ,|èÔ«.ÅÖëMIC"/‘cw{º_ƒŽ!vfç›m—Ý!>´gÈŽ£¦èHÉ ùÄ[ C(<‰§•¼L?P „GÃÛÙ+ãW‚;­´û§Q\"EÛq©<Î{›àÞ`h˜"³bUVqwA/­ÔÙ ÊRE­¶„\Cõ)s¯°;íYüŽÍé·-¾IHº‰QÒ)œíÀFˆ¾n7Õ¥˜÷›£¼…1gí§9iÒa+ĪmŒÐäÚ±ø“ÕúAúÁ1”÷jž…ÃÍÑe€~›W±¦!Ÿ5…|\¬ï0»[ü #\BÆTºäº(ŽÞFÈÆüÕËœÁˆ·ÙÓYË]–È{QøÆãëhÁ­Ø4媳³Ú1eµ ï Ïßµý.äç¡Ý¿4&1½ – c"I'ôs`òÕ›ÒÄÍA•Ëó8¸År˜Â^+ý5²6ÏVžj?ç0´ódù.körK3|ñU‚‡ù6­¶¸*ܰƒàÀüXC ÷_¹¦kä7–›“¥/9Iú†&ý¡÷ËÏúv ‚rýº®˜"fÝxLy_ž¯.+რÕLˆ×Ç#ýòm+Jq wqÊ9Ðc˜¨œ´XI¯ïJË1K“ –Mß(‚w¢Ø¡¨Óˆ•²œ'ÝL±e~í‰Ç«7âø ¢1”éÚÓ¾rèËy9°ó0:VÚUä{:~i–5ÊpŸ[Â.³Ê„JfÐ%e³(Œ¢éž&ÑUDÙDSÿ¡ºžl/ðë»Åû5r×!g¥"cœ²Â¥¯:½îVwQ ¢C9.ÌZ1{rG »Ejܼ¢-ZÄþcV’z:ò Ý¢› ÏIö¬È°ÚqˆûX€°=d$²×íãBIãn¡Ãyr6Áð5)qôèØº¤ÍEã`lžÓ“-5V‡Ó Mðí†u§uÉ@ €z¦Ô:@ß—Ì(·|¼5°-¤)|OYnê°ÔYìèk®¸ÇmE.JÔáD¨M’&'àªön·É+²þBÆm¡GáÁ2¬ ªk$zuØŽ‹‘¾ˆKl¦„ò¶¾}¸[A‰@f–p öêÏÖ×¾¨JG±×tìÂ,NxíUR5/·Ò*º¡Yæ·B†,]ø¡ç«`¿º‡á´ žn{|úáq%ý–b@ $~Å3W$4»ŽÖnûØß?o>h棉á{Û‰k%Ø:RÔMu_õAŠªâ“•ø¦T‹³x€ù[á%Ø  Q‰U3q5†PkÍKÃF¨™3›')˜sk{š±ôô.„¬SüñxiM¦%i¬Ä[VU_&ž§tÔFx¾OaPî“Ê »[UÙ«Ô¡†/®ÚyºÊ//«l+bÒìÁǬø Gm…ö Ö•§MÖ³ÖR§&ÒÑÎ:e«V©0 m˜¢JGþÂy®œÞb<«Éá`Ê;¿ØîÕ‚êÀ>)8Т¬5PásøqãŽÍ"Öâ>‚S©¼éºÀÍ" $(œËÏ,@•¸O¯_ÔgòÅ)©;IL&¨䬋Žâ´iÂö™sòÙdkƒÅ¾]s½?Ó|Àd,¡Ð¾ÎZ ð,\OaN?—’â%Œaü ϳ3ë G½‹çš’ä䨻ɮ!®ŒÎÿºÐ† Õ¹á„ÆŠü¼ÿžsX¡òtòÚ5\­)ž¦JŒŠ'Ù,ôfMБ ¤Ì^ :¯5ðè^TqƒTú´Å¡ñ›  …ãµÖ ¾ –'»t\’®öÊŠ D&àÕ'nßìÐòÛƒ.¬¾žx²6 `1ÜùÓÁ¯5ðL™å“ Á4ARkôž0Ú~¬ù@èGß~Œ½Â‚Ë…$òzXŽdÆzDÈòŸ_)9­y»Vœ¤~6ð„½®mceÚÿlÇZk[{â0††û8à~ǃ:íN„›ý#%e+{û3^¢ÍŠI#˜M×j…Šî‰ÉͦGñ}²Ô^Ü^\n¬OïáéXN?àVOØš¥ÄøDX£Ñ_Ì6¶·´aƒ5xåè™?ÍqG>ȘMîÕîÔvùɲu¼g“¡D§¾H"˜[¨ÏÉÉQE‘ˉ²Œ>Ë©ÂÊ^^=,Áo>ìFµªÊ-þó&ÂŒeo¯ÔDaØcS)Á±¿öMŒ;Ha“ò¥×ê‹ç±É‰0Krýg0•´´9ö·&ÝW8ây–y|õ¯2‹¨3sšþáæÞ‡=iHRîf~߈SVdåM:3àª^à±)9ÆØïRùÉ„8á8Ú/TÜĉ«¨Þ‡ÇuOu’•ÅZYÀT,þ”ðÙ)Ttו¬Žô9¬kœì–\Eï¼=ÊâÇì xçã$£_<¯Æ#W†«0ˆFÀµŸl±ZáXÔö}—’Šçb˜\Y@Äý˜xþ³s‰!ü™–ëjàr[.ù?! ç:% ÈCPŸ<áš —G~rzôžÁÜ*˜’lí¦H‘¤iáQäŒÊŒ‹„Ë}JåN´—2Uò¼%~Üâ &/%çc;ÄÙÓ6ê®»¶ Ù9gÊ¥CmzÞtlõƒNÏ'_RN,w™ÓtTr%O¡v§ÑZœà…>=æ ØK{Sz½¬¼\ºÓ«¤¬(Ÿ_]QÇßM:Ãà2Nó9©Ò6#‡æˆŒœHëa¯j$æ§O¾'Õï\vßÐÔ¯’¤Êþ»xÆ[@¶êë¶'21†íÇÿªñ÷– rX þ*3y€#¹4€£-tíö.l,„rÐð‚·ßo‰Éõ9á:‰»#xz‘ŽÙÒ$BÀ…Åå*œ¨Â %²ŽuLFÚ[4åÃÊ‚C¿x˜\8‡L #gÄ^^{Ư/3Ÿ1ëš7³ˆÅNªGc>EØ"nÔ{Í-;F§§ ÀN;ó ¾ï,Oa¦ÓIyè¡Ú¸‘<›Þ'ž0ÌzÖ§îH½&ÇÍ%ªÂc¿~cPB³4µ®;¥í‰ øŽ üJ •ÜL(ÄÁoµ1Xô]è”3VöVM¨æ¸ï3µ£æyܸ A û“éAÿ›Rþ@BXcJz@®›™_ØDMXò9…w_ب«Ÿ:ô—X> Ê‹ì5¯SÛ~Ÿ¼¬L,>@9% ¨ÍàEáÓ=|¨'÷kûcÄ@3i¦hB Íû¶Z:Vô<[®jû yH©£h‡ˆTùœë6·š§ìÚo²ë—‰•‰ΚšwrðÀ—´#´$3ÿâõ­Œ6ÂØÉLJ6´uï>5lj´®Z¢ŒMð#nèÃÒ†œñbÔ‹Iu-[.E¨¦¥¡ß-ürììù¸…Üí¡Æ <•™i­é«ßx¸D»ðö’‡°CŒ½åä”ûzkO*}Ä=–¶¬Ú3²%1ä롽tö¸fé"p¹„– &Î(p~ÞV;™ð¸2<¢²—ꙨҜh’3Ñ«~¾~9Ý‘/°¡wé_ {liZAŒ!½wžI]÷Õ&øº?Ó5f¤é±KÀSÄN×jž“õ³.¬ Äe›Â©å§½ X"ü…Žê¬;®š ­Û Em׉·¿, Î 1òë§ÔŒNgx×ôyÃ[ïÇ|4odÓõêôxHÐ"¡æ²¹$ØKMÐãóG¸õS{SÝS‘ß÷n,‘ÑZ•ÁYJ C¸|ȺÐXaä±oµa kü”•M3üž8-5X0Y3–iý‰÷³ƒ`™F‹CœËÖéÏ*ùÅ‚}¢Ÿø1,±žå'•&.h»šûT«AÔ‹’§Üa4d­)LÔVQŒÊ—LŸRCìáVDÐ0²Ð±ŠÊÖ·jü/|èÿ»F˜u endstream endobj 90 0 obj << /Length1 721 /Length2 9341 /Length3 0 /Length 9922 /Filter /FlateDecode >> stream xÚmxeP\íÒ-Áƒ{ww‚»{pggww'¸{p BÐà<¸»»¹9ïùÎùêÞºµÿ¬î^]Ïêõtíª½i)e!`Wm/''+'‡@KVS…“ŸKÀÁÆJK+™»ÚBÀÒæ® !€.Ð98¹\œ¨´)ˆ“ÔÖÚÆÀ`ÉøO ã`´u´…t w[K€°»»»¸»‹ÔM”ío“pµ¬l@)5u}U9ƒœê'€ ‚š;ÔÝ,l-ʶ– ° ˆ`þ,!` í¿4¹°ý#삺þf…8Td´%dÕTµ2RìÚRs0 ,ÿ·ìê"ô— ²„:þk:€ë‘ƒù‘ÅÑ«PÏ#6TNNÐÖÒ`²¶£²ÿË7°À÷ï4ÐÍé?¥¿‚\þê0üõYýe»98¨š;‚ RG'7W ‚ `€&ÄÑü–¹£­ƒ×ÿ—÷? Wó¿>H€­ÿ:Çñï”­‹¬­'¨nëú×j+s‡¿ý“×ýû^T@@[7Ç÷ƒþúñ÷F°ƒ×ÿùwŒdW•’S“ÖeþïüS–[B€¶`k€–ë_/Í¡Àÿ&þ)«›Ûþ{{þ#æ?ÛàüßXÅÜjë 0ä`û×zpüëù2þ_–¤$ÄÓ‡•“ŸÀÊÍ)àäæáòúý_r-Ý PØõÃÿÎòŸøŸEi>6Dšœ!è;Zª"œG]ºf.-«3ñdçÕ*:y/ÇkVÞÖƒˆ½–¸0s–c4¦ÇÉ2xEm1×`OÚ„Yˆ=l.ÂE„l ŸÓ›ÚU9íD”¬ØjØœ¥Iœpªf/î [ÑRÕ:H'¶À¶™è”=§¶´ø‡òú”(3òWºŠ5züpMb-Þ2±ÅE@ôbÿ<Á&ûÞ˜+÷ í á[ò(¢^ BÿÒHYÓ·bFú«‡Ä²€+´>c$.­ë¬èÍ\›Ã[9Š÷Õã@¼f$µ¡ãÙºT«­²³“”Ñ¢)›_6EÒ@³Î}žâå¶<3!Éâ\^RШl]ƒi !?ÕhC!®ø‹ŠÙpÏîkD LbÝì¯þNz”Õö‹”J3½ãÖAm@æË¯>Î×Ð$˜‘ ÊPøXKØÐàcÕ'ß]vDÍ8ÇÖlµj³5D%Õß÷KîñÂë‰ùM9¦´p\âÒXõó_MÖK–ÆJά©å[ü>ÆQ®®@ð„ʇ=Ôµ“Ù›xÐ0‘ ÿ‚ 4•“+qõ¬¯{aU‰ 8ç8á‚™e⃠¯ dçþÊvòB”a¡ Ù-Öˆ§Gdžï'éHîzUÇfãdé_Û4¢ï0åÓS‹Y6¾*¹§QÊ€"û7DÔªZcRÇ‘ÝõE…?ÇÚÿ¨èßð簾¿þ®^«ZIËë’µÚFò§83­ÞΙ֬Ÿ‘󘺕hΦS­âóµ«Zßö7åi³y‰N6“`ˆ ÜPjß_všQdèN»Úä˜ßô¬ÉèT(è%ô^¢3¬¢ ŒÏ)á…¥oÔØýê¥ÝsþÚ¦¦>¸È ©UxY°¾® ¡ÑjÑRì ‰™µå/µò¬:‹ á¦ðÊiý¶„¯õ;ÃØÛŸ¾XÐhßÓýö ­èª¹6Ž~p‰Ï(ZÒ3 Ñ@Šmqô'=Aý=0På1ž•J˜×Ž?‰“è@bUý¢ð±f€õü\AËsLÉýõ½…^ËõbQ”:ºä¬GOjùIιOàºíôêžÖŒïòóÛ[)¤=ïdx0T·H C‚øyÆÓŽé!<¶ò‹ê›Â) ö)3¥ ‹SyJ‰/•Zúù_þ@*yéÐvÞât1^¬®9&BŸ5u‹ ,õbùƈƒ}ÉcÝTùÇtrQ:RĢи·²_1yÏwE_ëf|¨°`(‘²Þ½ ·²©¼êÒ¥g(Ç¡¤°H!% 4Ã`Ì”ñˆu-*©*u“”­-d´3¬ÇÇ‹|3o€O<Ëõ ÷§ÉÃw¸Ë<Á «MȸWö &ÀÔßSݢŧ»]ât¾c–ýqŒ•¨è ? î…`FûÄ“ÄuÖ'Æ{‹&(z&ŸÒïtE²ÉÝ;’Zð˜UôLˆB§;És™§ÝnY\Èø6HQ¤±“â$3øö„¾¡JáÔÀŠ¢¾pïæû‘“Ÿ§9ïí¾U;Émfk™úB¿~ ~û®Jø~¥øPS¼¶Ù”§òERª\ÕRÌKá@–ÿ®>è×uðï1¾ fW VôÕ—Ú§o^|‰'(YMˆ9Ê®d‹‡ß’9ëJaj~ís ÅûêŠ4¹t›9DÏß-ž *Y °‘;iô8b?¹è3\t¼É^V±|\ä$F¸v:ÅÂFüCP$ ¾ õõ«(_ «—ûZ*;õ¤réä³þ ƒøä‹XuQ9™1 üå-Îçê!=ÔŽ¢«®X>Ÿsƒæ–Sâ_Õ,ŠcPs]nWI@ÛtŸ‰– ·’ríÖݼ Ï5…ÖÉÇþš`Q¿M<0ÕûZξ? ˜Ú{¼„?x1ᨩOø¡JH:Oq½ù'˜Ð´¼«þÒ-ømic•nx}gGÓ‡¡|O%!U:‰)9«—qÓºÊÀ4 —ó=–‹X”r© Ö,©Ì«ó'ô‘¢Ÿy'Íun»Û¹ W1qo‘FA4æÍl¬ö§Ú¸Qî¸ìchû¸ëy¦F¾¶Ú•^}è1“cµŸB!_¼?º;¶Â°…éOÓŠëègUt\¿LŒ'¢Óˆ©ÁÓ¾.Yë¥ØE—A·X¬¼¯Ò%̈†Q‹º½0,í]’KKŸ6£|Í»Ë2Èøxä:¦&I¹Ä½øì­é£»ÈŸŦ?GHtØ/6€{qÚòã°e³ÞšIø¥|ÂüìA+@Yü°‰+ˆ`醸°[æ•yª‰ÄÖ‘ ëfoûû±íx$6xÕ E=‰&Üt#zäi‹XCi?~SÇîeÚ¼´ã”ôûaKåêlÐ’\´Ez:Ü‘8ìàð!?ën޼ÿØŒžÑÆ8wÒ Íî’Pt ²Þëü)Ç«Q™½;‡ƒ¡­ /Ž÷ ílíÕ±i–Ô}W“ëø=µ‚²2"„Qß.*䀛+ã'[­ÜDÙ3Ï<¶u!*›PhBÅ~™an$.æ·áÒÇ­r}áv}_!Ãð­ºÈ—’úX’tb@ÀÅ}ˆžÊèÀwìiܲt/qT>;¾†0êÝ`ynú NMî-?x˜Õ-ãô‘ZÓ;p|r› Åíê×=D:ýüšûiGDKÁþMkáÛõ_sŒ€\§e¯ˆ!”.äÑg˜0¨¨™+ƒÊ¯õMòFt¸];ÚiÂie+”mŠ-nO×_®|<ôèø‡Ýn†XsLQæaKQówŸ½Î½Ü9çKf…®b{ˆ£CONŽU¨[—!jÜ(‰–°yD.D?¶öAÔ2n-¢®Ï´Zt-)çk=ä‘LùöˆÕí©S]N¯ºZý‘Ú@¿¯^¿‚ÙÔ©+ tLêæ1ÉeÛ‰¦xaŠìÇ 'qVäÏ ¥Òc_Þ$`*?ã2>æS[clvhê]¡Ø{š+U1_…FÇcn;“#¶ýBœ+z-†™Æ r«âö8u±E¸ª>ëj§¸9µ6”롾q³…‰³¿»[ÂU8髯~ÑÕzT• r†7plßXm®$¿Ãu…Dºýn@M¬-ÜŒ•m‹±Æ²œÙ{8í(²ø@†‹X1õh9±êzœAW»D¾¸M¼j—5%½„&9³¨KM×ú™Ÿ1ûDxcˆD n¾òSÞÈ€;æÑ3^ŒÓ¦±»dHXè1óà’;ýÓøjº"¦UbGìÇ0>ÇusS¿¤+|÷6W`<£ F»!”è_ΕaBÃ/%„-P¾ŠL«÷Íê¸Z€ ò °ÆÐøýؤêŒ×f·Éh3zú¦1ðÊyá~’«Œ ‰ œdÂãw2ò·sÏíI4:)VÛÆÄø€”b}±J™XîÖúS¬1NÇt× =·pü|æl;·‰h|JêDÕœ|dSë‡^ê‘:k:¾¨þcÚ륿(à³Z­e·Ç3v_ú3‰ð¸ïóíxœìÊ@c…Ž|ÇôÏÏ:ë2È=’“]P¶fe š˜õ­/þwðA4jö5áTrÀJ€æðDo3eê:ý»½)st%úNø=þøTá€ñOÝâÖ¹x"báë|!ƒ+f>ÌçÁy¤@/ÌŠf ~ç^ª±¨"yàŠhšR5d#k4rªÐ3â¼=÷ÞK_Áe˜É9Ô´ðE-éXj«Òkc— ÖZ`­ã‹µäκ¤—¡‚AEw1QÓ÷ÛÎåûÀCfãNdn-ñ¬\î²÷*ÃL´­*Ž#\ÈÈKA¶q†20(£ë_/ýs´Þl@U'þá”UO¾%pZþ®Sו‰,Í“›R»Ê3þ‹H·sª%¸kÊÙ=;F¹žê¨V<b9¼ze\ùox¯ë•Øû‘Î#œ>Ålr7ö þÞtï³ÙÈV‘vôv´üýat«OÈ£õSb®E÷¦¢8àýø>ÙOϽ×ðkê‡Ë«š ö,–Æ–j*¦daÉ ,/^w}£õ€íR¸2‰ú’ÒŒ´1kZÞÐ~t‚nÌ• ·]U“˜ @½|ÑÍå|é5V ¢,C«³šZ;Žœf!”7Ú6ó} º£<ò>”ÌĶ¥ÙÊðÜÜïoV*ñÇäátj,®Ám›LŽòI¬©*ñ“5‰ÙwFõ‰%Ï«äèÎEbÖ×{QV¹),õØ›¡µ;¡¶'Fñ} xƒ=ÿ¢(M*Piì'U§Q'¬z+ïÀ¥÷wLðOÉ'tæi¸@ÿ¨ÇÎ颯)-¨V¨eLÉJg—ýtf;.òqƒÛü¤Þ¯Wu­jÑà4‡®òŸGJ¤»ü Ýî Ô¡ÏŠÚýbZä¿¥æŠÂ¹/™DûÂ-¾´u–÷vƒTc¶n¼•dE§°„-K܃ˆ›‚š—dÕjNEÓ¹lgr  C@ TÉ‚„ï¦Dù&@L–¥ÌÒìëœ)9§¤Ý«þþ4f ®“|‹{‚‚…I§üWÕÈÚF.Fr-³å»´×¤³ô»…°í/!„bU³ŠÌÜ^9qjÅÕ7–¨>Eõ¹Áâ/è† èXóÒÖ—ØçÅP¬Gq8ëçåìݸi…K¬«$=âU”ðœ¸l¸´l×x¡\ôÛ\áJÎãZB/ô¤B'Ü-sÃIª›s%CfTUÅñçap}AœMZ.l(“ÝZkjÏ€‹ÊA„â ùÀ$rúœ+¶Ä‰5)­ètß”´¸v_bË•*Åýü°£ÌqÐêD§g&\Âù5/\ÍúAaáLW8XO•Õ¹ùjd_–碙£uoðÉrN.bßÞ×xÑŠd'«›W¶ª®˜mËŠ!Èi²)~™“#1çNuð7a ÍD {4v!M“øtðѨAÓ£xß¿°´ÌfGg‰ç#Ó"WÔD¤~Bm.€+§]¥| ­’ŽéSSF¦ýkÃâ÷`Ô:Âú~£^ÓÐÑ’uì&½â¡ œ¼9Ò¾|b­ìA ³I ‹Jo½ /ìýùq3›é|o¦ÎûñkK ÿ§&ÒiîpôOµïkÕþ ú%kȧSÆd‡­ËüÌõ%ga üÊ(2Ø4ßKO—Ö‚<ã°:¸ËfMèùL˜Áì 'b1Ù}Žˆ¿è´R†ˆ ã$ âÆP—qïâçX7S7ÚîD·&ùV³IXd• ÂCÅÀGëÍ5k” Ž_òâcö¤ã#Š,g†•ì“[ø#%öoŸ²Ì6UÄ3Š›€‡¶8+£˜ñ"î.Ãá9OVn;»¥‘Ä1^î»B¥"Ø ”q~¤¡ëõM&ÛMˆâð`8¦Z’ô†ŽqèPÒ¾ÆÌAêÔm!ç;O5àVÕ‹_Üóþ*1;^y7fåó­,ébdRÙþ·ÁîÝØŸ‰â^XN«Í?¹;–èߪYFÁ(U¡vó:w<'5{*Ô%–ì½_Ô¾Ô¤HGg´ɱ°3ìÄÌll&.Tøùõ"ºâiˆ¬®‰ÿ¬ 2„—Q~ùy`øB¬ãÿe0ÇõûU$ ¦€¢qš˜½cï˜K³yIag1”ÒÑs¯Õ—c›Üâ—7mŽ—wI˩ȳ*·÷ŸþMgx’1…O º¸{¸S¨?hq¿~R·îÀ©Öç\ØosèéEä‰Êw•v&µ¿GÖûÙo®ÿWiõÞ0<·3smNGøi˜qi^ÞŒ9úçÀ«,v˜Ü>X°…ü|¡âíã׌W·y÷:á–‡qoŽ˜\±¡œèê9¶ƒr<·Ž<`%^ª^À\1ÚF㬢_Þ…XV|“™)jstáµêž7“N´º §µ)¿sy‚ø%‰šYCb¹ï«z0K%«8É3¿§ßù’[8¹úºåzƒrŸ…¬MŠáû˜´®Ç-SÆ> ­B8v§¡,GšÇðˆ”¾sXx——\)’õ=åÙ1Œ¹WXUM´`-U£A. £¿Ó›.ÖMÑ3¨´¹2äŒfy‚}ÚŒO8yé‰éÉ>J­JB»C‹³Ã Á5»š›|WŸÊÊv*TÎ(áÛôµ×˜nÂñ»»ŽÂÏ |³9 å\P‘ú–æ‹8)ó1ñµ¤èÏ6ûd÷$"ü¶àQ/í%;Æè=™ÏÍS-° ù!r—®5g¥0Š.Ýž±þXÏÞÒü0 IÑU“‰Miÿ²¸"½G޹…Ƈ”(ç=Ê5V¦£Üò'(A™ú-µX¸<‡Ô°H1í;ÆhZñøtŽh(_ç׿Ç[å2o¸:ÈÜáGVëîÕÉKÏÒUg,[–K¦B0B¢ýÁ8@ÂÆZw_Y\Ð:Äc§øM\?H؃i ªü˜}ï¡7é#¦O_ý”ƒ£ u,q„{e÷gT‹ Ác>V4²×a˜û÷m£#uŒ`nŸˆo5µ­ÁáÇõŒb@N1žµÙïZÿ­ã0µÆÔO#)Óê·”zÆ"lðnP7€Þ£¶IÛs#ªKÅo’²Ì(ݱêä4šÿ[ïÙtÉÑ««°'‰ØXW6'l1uø^¥r+Q ¥*>œ/_¹N$­7êÈ!,©6|Í$OV°?¡—2jÃ…-ͰÎ3tçÈ/’<5#d7Ãlsí.6¿Ñ„9WûÅ ¼ÓYƒÿªœO`"£ÞjÄqå- «Sºšú³g.ô½Ég‹rnŠe¾N ómæs^5÷<ëTl1~}Óã]¼[*Ú[>/ÐQÍõ–{ ûüѧUlñ&Á eHXÚèF«fæÌRýÈL±'È»°ö#âÖ¿Çê­JÞõŒŽø$3Ñ (È?:£ÑX@ç5°œ¡6Æ{^ïŸÇ_q±Ï½Ñ¦Efr#ë¬ôü°¸‰ñÄv xx_Ðc†£”Zôý¶ðœðþàâw®@ù ZrÇ=¡geC¶È뀈t %‘a„^ÖÜÖÙ&C‘|päÓjl&ÄdhV?u q—1ë ÇÆà9íuܦ™Hâ)ŠI•“ÿa?Qƒ?Þƒ«5­ì‹úõ¼·‰4$2Z¬l ÚlÞ½8o‰¨3Ví¾ÉÓ1E™°‘gÇEHÝûþçŽîòÍtƒÖp›;A%|οÓL+¬xÃÌãû¿ouØS í½.¡j6xÂñëG½¾ý¼*¨_‚Dü>ƒ%°ÇÞÿÝEA½eWàÓ<4Þ ÝÝùí²4à9=Û ËYˆÿíë.৯1ósU­=CK19Ê]sš0ò³Œ•†L /J·²BD ö8ÿ¢=Uê†µÎæ¬ÏR«åº½”ðÍ¡…“¬ Ðq §®F|öìÂàQÝ[ô˜þaÎÏÓ(¥ŸR‚a™-19Çþ·h¡Ä¼Ês ?Å€•çŽoÀîxQfœ€Z‚Q= ɺ“¯ìÎ{>Õ7­%™ÎÈå šå“xQÅ­ãkO…è„»œdŒî¯–®Ažð|ò­¶È¢û•ß0u{ªäÐ¥ñ€e‘Q/ö O¡Ï“k¹·O%Vãæ¦#‘G#6*ºRôß’æÓc›vÅ‘‘Ø0i¢ÂUu$à³æ‰Ü"Òï`YsÐÛÉUЦ åÛ3cƒÞÛã¿'“'§5v mÎî#UmŠ‘8”¼ñÖdv±V‘¬Fä‘°£¹’¨S=n°Küpïiªõ°äjŸ[s“]YC›çÎW¸×`m¨ÜöÈ74TzÍèßé7òó6ß,¢iE_J‰Jâ Ù´··+´˜Âñf4K/¾AÖ<ŸDk(#²w9§¯ÐTñú6ORóž âÈX䥨SKDOi-ˆ†d­+κäz”óÅL@S”2½Ö›ÂžÓƒâj(I¢ ÃvÅ upjÙò™Š[ßGðÎã¯?ÍÄÊš“Þy_ÝI“ˆŒQkYµ:Üe¢0%*gš\e˜Í/÷6ÆùNjwú47ëú0!„ÐH8<åLþñ„0çÍß—~|˜Ã &>¼ÄÒHÊ9×9:;‘ŒÖJzà,‘ÇžÎ# Ë“^@Mðý™.bŠá’ À1>Qspü¶K䌤Ð}º©Ëk~ô,Ñm›¬¢“בºÅ\Îüû )øåd·(/a}M¼2_BЗY¦FÑLù7WùÀB…³ú¬|·~«Ž´J|”ÀôÎGÌÐßò·6ê)v‘¾ÆnP½;éšœ·>ò›xÏ–¨tlô§p$áÚO2Ù~% ÔÿmCæſ¾›V…¹@½2 ày§M(ÿòýI ¾½¯uÔÓEßéB‘Ú{Oæ¼c["o¸–Ófimn xé•e·FL}LÅM[/§E‰Ó=J®ã™âzc׳ŒÐzÌM+>Úˆv¡ìwäòÔÍbê¥w?]8a>soXÅMjǸµÏXv¹ w»´É íÝMp'nÈ¿Gç>ßO 9-›È_~(È”¬º½Û”‚©æ6ð䂉Ï{” Qž×¶yK·%ü:»VøEvE_(Êõ‰Qã‘Ý”½Ç¦êÏŸGÁ>vî‘14¬>›½i¡’2RÏ«Tïpj¾Úèâ¢HòíÞGk(¥ø¯R7’뵑6廘+þF:«/u§ x–‰–óý ^<Ãh"ëDnd(8êÌT¾š_[„Þ‰•S*cPÉkJ=ðœb°5Ùó6âQ›]ÏyºoñyƒtXí©¦å£zu_aK©KàÀÉp‰Ù¤<„³ºLÁ½¾_7º÷„y×µ_-ð–i¹ô[ÎÁÇŒþÞ—r¿èÛ3)*¼9õh{¬®ÀâVL¢ïT0V¶ èuÂÿ8Ýn;A]MdÙ$-M.fNRT49¤¬½"ýÉbÿY:-8îÚ"š^6}åw‰{̯¿ß8ÈþØ—ë4üyÓ§Y§! k–§Ò9r£¡µPIíˆÖµ¼Ó§¯\]¶;¡Ö×TÍ`&‡ý•„ƒ9ñ éêÌ_:Û@êZª`\3{œ?øn\*½ˆ5F6Kzl€ o~Ø{ísLŠb”oÔ)W ]t?D]zeƒ¼ô²T Ȁò ³ᘉé©5šŠ*&!€cúâCÛ"„Ò{`¯ïÞ*¸fãÏóTœÚ4@"¨©³JOc»‰ýi;¤BE‡—j½Ç½Öw|lXSK$ 6'À%è¸ÁÂ^ÿtÁÙ¡nÞvñó•rƒ…eƒQOj¶&h$9¸¨8Ù9Öå%›8É‚ÔJèXÓX>}ë©O ñϪïOf1®N”Œ¡7W h™rxóˆlu¶pÞ}~(w3Ø|ËP”<Õ¡hþÝ>§Jæ¤äù’ÔBªê§´Çx³â«(¼âN–\¥¢3ÿK±uuåÖžŸ}_úàX¦û@j^DÔoÆe)§=\óÐ]W]ó!{؇—ÆÅ åÊâuŸ•cùû=óÖ4„ øËuB§1ãíe±ÅÖŽ‡ÉÏWЛ"Ž“éx¡WÜÔže5©ö·ÛPq…¹JѹᶌYW‚£è±¸WW÷bÆw,ÿ¨3O/ì­¹n¯F¿9ú Ï' !Ç<F²”ªzäôªJ·Ÿó¿ÞËõðù½7ëݱ+«#×®í jäë nÊ}Ù¹¦Ò–g)*Í-Í͆¦1fÞ¶rKE*ëÓš2vÍqÂoQà36¡Y<Ý3oë0&X¶}÷™€DlÀ àí<Ù2¢ðZ]s ³ “F~Vø„áwüE"£‹óg2­oÙbSþ'BkJÃwL«‰“ëY-4£¬É+šBE¶šüí’#Ž]ÔO®‡‚„ðÑ.¶fõ%ðyOý€Sgk{•ŠN)Y.ý¦ó…ݯ_$…“í ;Æ(Ò;u`€°ú3†´î†¡› J*Vîæ‘-d|³¢}¶¹‚Öªl6¿Ž‘ûÚß½>‡Û¡Ñ•Ε–1¬k?©Ï —Ñáø òq½ëÜÆ`¬´yXµLÑ6> øŠ¡øT™ð;ÜéKß qÓL÷ø>Ū9nWX6Ù6cäý‚‡8ñŒŠ! ›ûÆ]'’ c[/øêÌ-Îw~ÀL]Ì%Ôœ°Âu¢qk›™#­%ÚF–¡Ær”ù¡û°;ÛÍ#ª2<¿Ì¡ Ü€ÍÚ˜9€vwØY¼η Šù‘K ù´ÆÈ…©àAϪC*:%"××µ&BMiBõ+cÞ²ïB\ WØ¥ÅE—tvúrõ¬Ã¿ôŒ¿­ÐQái©%YRÃKäÁÅ9üó|  endstream endobj 92 0 obj << /Length1 726 /Length2 5763 /Length3 0 /Length 6359 /Filter /FlateDecode >> stream xÚmtePX°5,¸šÁÝ!¸—àd€ap î‚»ww,èஂ»»ûv_}U_Ý?ݧO×=}n×¥§–³‡À´Ý@ÜìÜ\Â-9--n.../=½4„í!2@H 2hÜ<..n z€´½ƒ;li0™1ÿ tmæ`;0 kokï6³ˆº¸¸Hº89s@Å9ž›´@ Ì °Û‚ÒjêUåLòª:yÚÔMmÁf€÷`3Ä Ä °°‡lÿIfösð_šœ8þqAaÏÂ, övYíwrjªÚYiNmibx¯ðÜ9 ?³AfNNMÇ€ýÙÿ‹Lÿ‹þ«BÝþ‰80¸¹æ`3Àd †`pþå›"ÄÂðöØÜÙáßÒ³ §g}¦g™æ ‹g¶³­­*Ð`’¶·sp† {sÐBœž‚-þ¥íÀ¶îÿ_òÿ2aÀg3ÞA,Ÿíãú;ÉÝ@æê`سß@ÛgŸþÆõ@ÿ<Ž Èìl÷O?èÙ”çg5·‡Øºÿï•ϳü}!§ŠžÊ;UÖÿ¶àï²,ÄÌÞ ±hÁž BÍÿþ.«Áÿ¬Ð¿bþ])÷ÿå*@ì0äâøkG¸þ:ÿFFÿÇ’’²wódçyÆÙyy¸Ü|‚¼!.nïÿG®™3 ‚Àþvýy–ó¿· r™aÌÏØ›‰Z'5ûÈæ— °Žšè°Îp#ÎŽtâƒ{­Ì·Éδɲ]±(ÇüLÅÖVÏêi€1 ¬íŸÃ‘Ô¡F3d7ù´%–>Ëw9·Õ¡ŸŽuIíÌT‘ÃNa) óþê,Ã|i™{JŽ…bøòÜ‘&E-](x+_æ&/ òÌFŒ©X  Ör¼q« Ü#S‰›õy¤ì€5¬czRc«Üb?‡­g–¼˜ê^DãdŠé3¦ Õî•3´—NÃYÍ`U¼˜Q=_ªyφªáÖKôõïfiv&¡Ð÷ŒoœDýàFHÜ=keÖ²{9_<¤zKó¨Ý &zðPÕ…‚ˆ1 þ˜ÁˆÍ’'ÜyªhÁÝj.Α§Bäñ´Î™îÕ)Nj|ãWgÓFÇï,ïü>­(Æm„33‚å¦çO¢'¦‘Ý{kR¼>…’¸z„³O½â’­ñÊZW¶`Sy3«=œI2Sm¤rÎÆ@©¶Û†%bUr:f‚– N¨+Ö…[ei-pÎôž„¬&_j&XÉÝýö·D2-á Âbs Ÿ)ÍÊ÷G_ûšÔ$Àk±F‹x”jUa·X#C°¥ßþÙ«rh©}g±#ØTæ.Ê&<èxO…­œÌâê1AÎ4Œ›½²3@±ïŸý0Åœ%—Lxå¡d}½Hu É02îN­JlPŠßRXïÈðÜNågšÿ3ïU³:Y4:r«½­g[Z¸›þð•娯›¸röØo¶ ê_‘ø^–é÷BÞÜú€¬v]ËÜxD§4>õ`Ü'f–¸óOK¯ÅYãHéò‰oüPszDë8ª…€¶÷—’S•Ä--ýõ»vØ:¤RyXƤRü’îál—d¤ÒM¨¢/y>çZð4P˜n×´Ôè9³Ê÷›”¥®t5¦G6Yê¨õ’BSKÃrþù³^'³ ÁP5jñ˜AœTq»udLjô¸(ΡɎH·hõ’ì ”}X‚šœ®ö}Ú—ÄJ´ª¿µa!þécÙ—CÁ=Ö‚º%x.–!»‘}i&o{­"ÑДn8sMºê´pÊîߊ]×–cåôçÉ»ZSŠÚ’@Ç„+$+溿Α…{4;Àð†+$Ÿ éÄÏhY4…¿þ@lEX~šRŠ)v³††sVvWEH9]|å°iÏøvòÃ~§:ÉË‹_ÎÍû†yoºV˜N7ÓHª•ßâr¼»’Õ‡ö/&7FÁº«vVý¶¿`ì‘{PfVw¾Eô›E¯n'bYîkþ„N·¡‡Žiº ×á!ñyk¯õf0ðX!Âh» ñ#echÄ>­b£i¹“MêD½5%,üpÖª×Ú‚ƒ×ªfžëuÜsà£QXáê_»¦0?½Ç¤ŽÊ=ë.J“8RÍm?¢·¦ 6úNø‹“ó&4zêÉCE€Z:Ž6û# pÿ Æm]€7Báå–5¸^? örÜ.Ö½º¥'Í£ËëYR¾Ç¤r/üAUÊÄKø ÝoÖOƒ®‹—ßÑfxÊíÓÍÎó¼óVBm… æëow¾`¥•ÍèFÁÍÌö³Ã,ó’×?ÉQôä½ÎHèŸÓGrNW—å–r õ+{—/Õôþœ…ïFY¹nÉ,7 éh[6^ó¾;[K¼svÖG»¨…˜¹»Ó-¡/Öu‚ÐŒ@–‰å ÿu_Ôx;7ëíùІôõvo¨x1Jöt-ŠN‹3Í0áÛ|#7:_vßâ÷‹˜µH£Ç)AëC+AÊ«ÀÑÑèy~(ó¯è€ÐÖ¥G ­(žønqè‚5¶BMUK³G¿ >-!eV]ÍÔZi¥ù@·‚ª„mÁ…$²—ÊJâD4Â.¾&8„’×”º‚C/§‘ ´Ø÷ÿÖ»”‹cÁÑü°T+®TâQ¼•ZTm„#!WÕú2¯ÓF­ \ÅyVÑ@·]†Õÿ¾tJÕÕ‚Â4â°>Z™–å£8x­!Ì ±W"ËŠQ¾EðÒ×bÒ º½'©‚²Ù«ÂŒy²&ÁßQMÉŽ|[­o>7íÚTÝôÝò’u Ö€€ÍÉ–q7g±D´Àz’+Þ\ºÌ6>È/ý:¥&t`“@ícýi\ÐÍú­´¬92Ñf<Ž oy!fäËB ¤m@øàªQoópBñà{*nŒ¼YÝêý5«ÕD$­}ýî§y‚¶Ç$åjU‹Œà+ë’òVaùÒŠns•«äêp±CŒð¡¾ÝÜœyF¡O›8î]2ü©_&;i§h–‡œ‹㘵=‰Fó9wgË£ÏÑÏê,ÜÛdp›Ãõ‚òÄz4.[Y DR†P:u—2À"?¾‘õ²§Õ¹îk…ÑÚa­PT¼Y\4¢¤CÄ€¥˜ëlÜY:ÆÅ͘Çi½šYÌ}bì“#ª ìŸÐœoK;gÁ8ß4:™w±×M˜‰j›§óÜBgU§þ„”‹û¿Ú"ÄPùLÝ}hÄÎìMawÌ…»ÜžPO;½Á2°ïŽÏÒ§`©°Ð[‹_ÔíÊáH }c­ËéHÔX0ÏÃGüÅt§¿g³¿úi,Ê P¼Jáë´·þv”J6Ì35X%¬ï³{v|š¡`‰÷4ÏYÚÈ€Ìw0ñú'Ï zFý#™éßZiméwGå ;¡‹µÑëVÉœɰ1<`Y ›(’t“Ψ››ÜæC­„yP.ÁôÁÐÄWÏø³A  FT1Î*r4I"nYóU•Y,‹¥‡ˆtëØí|ŒÀ©(5u¡ùQ&?`ÊóÛTíe=sAa©$)³ bìÝûÒÐÔª•/ô}Èk›êÑžp.Íù¥yÂÚ¢] ¢^cǘÕH%éDÈD-žïÂ] ¢YS=¤¬YœÑó¢ö¥TúŽÏ«?g¹ï•–“²·q’ý_Æ!cñ©ÃðèÙ~è¦Â…ßC‰Ÿäø¥h¢²‘’"ÑeäãÝÔ•dN"Å¥|îõ# ]Ó´€ƒ+ÒcêGÉ®$!w€æ0<â”zÝkrºÍrrʰ_†ØSM¥*7&ˆCªyÚ;*­¿ß—‰ýfôM“o|£qîÏ1nŽ]`+è«™ýnÌùÙÿ£i+• “=°wÍçwçF2…Àb¹ÿ ÓÜ®2³”ÑkƒKj–_µ€¸(÷ÌÇ ž)RÚ#Ë®|,;5±&,İOëMËDß^.©¸±äPßËÊ9† ‡·GJÕ2ïu™½ÄåiÁ|äØH9f<™K-kÖ‰ó‡‘[x1«}}Qt~Û2~qeNÅæ.:Ú}O9O%2M'h!–?¸‡¨ƒË­¿$L÷ë;Òqs.Ø¥$»Ð(¡S ¾µ*Ê^ݨö&ÀúÖ–¦æ©!#3FT™\!¦E<””í@ìLS²K\6ñžÙŒÜÞ)¶íÛŽ¹Ó="ZÅ ù¸Beûu†]]K¢«0Š—Ú ñ‹hŸÝÞ…X…l£bÅ-ü5c¾UZÒ*ÌUÂ^‹Ðîþûà ªö­˜dmd<°æ­Óy…œ„?­h·Q¡..s˜ £<Ÿ‘jÌ|üñ"-ç0'ë,.ú!õF\yW³jsµ%?thrÞ›¿>£sûGïš‚»• UüTi<ÈrîKwt[`\ÓÖ‡}Æ0eHB¡¼Ð ‚æà®«ùú¤Äi“ ¥† ¾î¯`,ØÈ'¨‚ãŒ0Ÿ}ÕѶ€ÊÝ'A) Ció…U!¿XQ]ˆÇÔt)p‰OëÐCï£ I2Zȹê[ÊC„2?¿ºh¨ýÀ§Ç~ªx2 ‚†U~`(÷`bœlkYÈ"2eKP¹ÈIHF$,+¥di!³pí6û¾µ‹5r½t3«ˆfUsöî1s›zèÚÚÆKî»Æ¨¹ÐŠÝƒ$£K~BÛJÉJøDØC+'F1X`Ibm½áºÙ?уç(ŽþMoÎG½ÿc.wq4çK*Ÿà ìú ÞK^Vê'’’š<øk• Š©Î/Õ }È`ׂ» ô¸CÄx1së\WyŠ0«þº†õiÌ÷…€ê°vzýt}'ì÷}ÌE=¯i~̨àÜ7U“œGé2ÒwBÌ6ëµ¢ †l3¬Ëé|¯T9¿ešÐ¼(A¦øÑQ僣«!L~—åãuó”T"¸dÍdí3QGDØrDín(½ú¯­ÔðñÈFbòyDI‡÷™Ø]œ\·bß±d!Mü•ÁÛFuÐ|‡á®‚fH©Žðqÿ‹oäYß—î>õô‚Îp‡=õ5gWãsdÀ -2æ›]µâäpFß,–響bïd¤ÙÛ³ Å꨸"…±5Æ;³WNòÒ¿nJ¢ëDÎìIÁ~t< ¡WžÖ/Ö’IÜ_½A¦^y˹áêçôÈ)¯ÅIÉ»ü!·Þ¹SçÉ_ÿýìO72–bÏ ‰¯ÖpVñõJ¯9C¾¬®_¿9¤¼õ4 ¢àì÷gÙ.ýò¹èÜø<<'¯À™?AçisŸG[²š\j!¶5ZÐ5­ G¬\—±1&›ƒ ýà³¶x:4xÃÚ|3?üîXO’’¨çnyí4ÂÑŠMFÀ{†™™ µv½`£¤‰F$žÄ±0ܼºW¯Uí;C]ÛÖèzGÞ´älë-Ö>Žˆœß<~ôwÐ -·¥‰»Qõ»°ÆÚN`Ȩ‚¤—f& ï PáL™DjÛ¬ð6.àhá´U«ÿ*43^:໸IOÜ!Ôdía4^þI6r%ܽ^8Q¹ØBº»¯î¨ž/vÁ‰¶Ý´³ç رÊFÛ\ã]öárÔ›¯ÿÀn‹ÿb\‚%«ÚÔ™Ãxå´x:#fá@ÊhàÍëµlóÒ¢°²Io©8#Ö,…ܨßUUܯ!ÒÍ75N=ì¯JŸÚ~?lDóôçF*ýªJé(„ÇW™<4#äïgŠdOÒgŒwœõb{’¸«™¾!:É7`>ÚL¦Fá;jî1¹{Ù¢óD²¼lǹטpøOPüsDª‡›ù“z¬]S/Hu]ŽáXP^85K%ùf1†ÕAë‚\€&uÒq˜9–M lT>ÜÉ®‹g< ^vÚ=Sްý³G6t2³‘I~KM’@rkÓ&½$êÑóIuÀYJÕs·óS\d;‚°».ö/ݶ„/ÖªÈdJø*zÁnBztû¬ˆ>ƒòéßéòybæŒjVµ°Kâ¾c8ñ<›„DÂMÁ[we"Z‰¦N…ÚýFƒ«¥×1ABΟ£²¿Ýãý°*Ÿø~6š ï2–ãÓÕ@]ÿªç?ñëOŒ‹()š–Cq$ú‹)-°œë®ž•šü›iö÷±Ô95S¡ù’˜ïxÙNþõaúÎøÖ –ÂeTÏ–fؤüƆ¾3˜s9ã5”‹QKE¢‘q Œ&Vµ‘QBÛŽ+®ð·š"Ä"¦€)aÝIàka~ùdD°&ÔË;l³;ñš\¸FØ"p¼~3²íE…FL%Y…ò«Ï&7Aú„eûÅMyŸ¿ù2$)šÜÓ ‡ ‹„¨„ÇÕO¬qœéf4ù¶odŽ÷^}\Œ›ô˨án%ãøƒ&©±ãÚPAÓǸa«€P|†itþÞhÚ÷f¢ªL,‘cùÒy{Žî- ÑI˜H¨ÊÄQ LJÁªPæœk—Æ¿qµÛàNú©Î0ržœÓý»ZŠ›Ž*p‰vª„o¹Gu4¤V証Vœ³š“ B¯Q ³’á‹3¢Ê*ÛËĶÌyfh¥!Ž2fèëÀF¸}UˆÌ2ltqn§c”›Äü©íœYç5’•6{n÷þÚþWPéº+aøG=g g†rëô÷nÚQ–T‰TÓ⺡Õ(ñÆ¥mÅCT£XTÌŽÔ’wàÚøv4J¥¥h„Ó(^q¢¹2fâbFÏŸ¤îÙY7jÎTƒÁ…x…-uü"jïÏ$9…Ò*s\•ŽNÒö£êÛZk–QMÊd™[nÚ;Õù8½¯‰uHY¯4I® TI.múi©òÌ!/ÉëÖ”Ï+™Ó[ aø;¥zh±ù–Ç…+áñoiGŠ•üŒ b›ý«û>ͱˆwï]&ÅijéWk U67T¹ œ`iU[(mÑÞqÕ7Ë?}h>„÷œq s#!²ÖÞ†U+²9^hãøËÜ¢q6/´Ÿ¶OÕ7íytп©d;Ô ³}×ܧU=@Öô䫆ųoÙxš•$Ï/é«y$FMP#¡Ô’ˆFÙäkb[>@ßÛ 3Øûsžõ3º&Þ”]˜j ~Àßàtáý¥¦ÐuÀ£qÙýD˜B„Ù/÷¾Tÿõ> stream xÚmRy8Ôû&5e‹nEdz¾Œm¸˜±ï²g7ëØÆÌwøf63c²eÏ–+nu+ ÑMöµ…ÜŠÂ%dÏ–n!k²–{'nÝç÷<¿çóÏ9ïyÏsÞó~ŽŒ¤ʆÒA´Z¥ 8Y89¡ÕÕQJYOFÆ”âYj†gº€+Hœ@:€VTQ(4Ÿ `J£‡2 ÿ O@ O„(p¡‘ilˆè³Ùì“lf°2#ØP™Óä‚+HLÝ­ì-yK{gÀ¤‚ <p ö#CÀ"€T&ˆH4@ÞMJ„¾ib*ï ²A‹#ŒÄ Q;s¬±…ƒ=07UÁšx*°=Åi§²˜º6H`2¿m÷3Àú‘ñ?"¿Ñ*#d7RæC£"D`~ ?DåSù曕D4wab0ý{‰#ˆÉÑÈsA/þÌÕû …‘æù]Eû»þôuVìCs÷w4.àAOˆ>SsâËXñܳðÎ?ƒñcVË÷¤ðA¿ÚÚS%“¼úÄ×GùG–½ÙÄÜÚ¨Lòžßë"F!Øï]H^b]ŒuThWÏÊž)³*08d‰Nõ½[÷dŸðhú@Ï Õé%÷S¦Ç¶8©X*Üp>oÞÏh}bpObnܸÀ‚Œ˜O@^a }*ÑãN-×á¢û5<‹=,Û;£Š¾#à%îHhQ@ÖÎçÿ ‹*T[ÊT©Fì£ 2¸~!…_ (En^\"Âëo-¤9¬sƒÂ‹kKÅ7—R’.-Ór‹:.1ÕEÓYþŸKŠ c¤Ð'mÔHQ‚áýÆI'V鿪g«l•„¼lÒ“ý+IPŒËiã® ®ÊÎ(Rî^æaÞDE‰Á9ǵÉ<=ñ"×¹Åf·Iv%ya%ß×D–>̹ÙÒõylè/Oê–¦&r+«-‡Å«žþþI`Ú±ÖY ©¢ŸÔÿRK®¨8tTBŠõ^ðÏegíxåO«íåb±bCn°~kÅ­^߸Ð0'‰2‹‚­þjTP¯eõN€KS ŠŸ:Ÿ3WZ­•ÕnaÚ=2TD/ð6eó*Ø·éE[n˜¦¡jE:;ÆÙ<9S)­«> ¦ç¡f,2«x$3ή2¬Þê}6h&ˆ÷EÙñJ«!Rq°Yî2>óR]v]^kEôÛnXê²VsK{Æí剟Â+ŽjÐ=ï~HWá•ødSÃÊ—às1t‘¾‰ó¶ë–] «½ƒ_óé”èWŽÆ6Í{Ó’÷ÑÝN5Š/ñaÇ¢Ãz)¦È…p$bv85&P»\X|µ ·G)7–bà»êroêbüõS¼[†ñ^SŒ ]\yBÉ.-õi|x#žC0¤hçq#ßÕhyAÌöDÅiX¸H~2³ÓvŒ´ö¦I»ð&âƠW]A“J± Ýob£ük1˜àìI{Wÿ y­Ê'ûAä‘Ç{²(‹éE O$Íìß2Ÿ2ÖAŒÆ?÷õå•ïòÉõ¹TèigQ#ìBZ,ª=tF+ý{ñB—V)¶÷Ëw¢¡¶vne“êÏmAõ§•ìX¯ny `êJCä mí¬„}ôñ¹Ùã%·ym”“[3÷Ìó”Ž ÄØüi€ÏVA¦¦ó«|ÎQé%ÅTƒs‡ëgs%ë…ø:,ri·è(…Œ¿ˆ!Dû‰>}‰¦E)þã.7}ýØÆ/‡®b^ºÊG`(Í>n8¦cZ¦üeOzÍèü\í#Ÿ¡4M›t^Öb#(EÕp¥º8ô±GæÅ¯ø!YúrÉËë ‡gaÞwIÛ»*Òõ^0‚®ÒÓQ¶|X¥ÈK¥XäJË•‘¨,dhM½F•ĨO£™ýC RüˆöÉ"k'p·‚2&ïÍóôco_Q ¿*&iÉꔬn¹+v›XÉù͆EŽ ÂT'ž*â&/ã"3[¯5Ÿªé©+R= 4÷ˆ¾ Ë9QÐç¬~y®$®îz‘x9¿°Ýr¬"³åªì€þ¦‚ÏÁ8“õr柸³hryŠ–>R'Нó÷N鄉‡“:ik)6’_£ÜÝFNéxizŠŸ*0Ïy»û<ìIMè–:ÜÃïÕ,z¡½ø‹Øüít؃8¾ìœçÏXÚùBú†Hà Æ ÇhMk£pó³{—"¬&«þpŒl»ðêkÛtò}®ûf+Ô´›Â/n›‘Þ)í›ÊªýR£ï±=rq.–ÅøÔLœx»ÑòL¬ìFð‘YêÄûË7ÎÍcظߡÖ\Ô3ÑN2çÞ¿!¿ùîÚvvòªr¯ èÊÈmg”ç!¢®´LTÕËûuíœÉÖÃG² ÙK÷B 1& åØõ[¤-éÕÆeÃ|e¨Q–v³:ôTõnV™ókp3w)k¹|?4ms.*—ÞUCƒû¤•°\CDžtY Çäû4$Š©€ù º|HpX•~e-ÄÌ<Èß!{k¯"\7–:O4#=Uv~šP1t׳QTݦÒWøk¿ÚÑ+¸¾dëtÉ3YtÑtŠu±õô[ωø%q³ü±ü¨ùæ¢ ºƒ endstream endobj 96 0 obj << /Length1 737 /Length2 29346 /Length3 0 /Length 29905 /Filter /FlateDecode >> stream xÚlºpfݲ?ÛÆ$ybNl[Û~bÛ™8Û¶‰mÛ¶mï9çÏ­[õÕ®ÚÕ\«û×½kwÕZäÄâv¶Î*ö@¦ŸLôŒÜeqe&FFF#= 9¹ˆ#ÐÐÙÂÎVÔÐÈ Pš”ö&f3##9@ÄÎÞÃÑÂÌÜ@eLýo!@ÍÚÐÄÂÆÂ fgmçjalàuuutur¡wtá§ÿÇI8›¦Ö@€ˆ¼‚¦”œ€JBN ´:Z\Œ¬-Œ2Æ@[' 5ÀÔÎ`ý`lgkbñ¯˜œèÿ€­+ÐÑùŸÀLíl²b*Bâòr*1€¡­ @Fòw[g'î¬ÆNÎÿÊŽàü_ÊÚð¿”Ñ©ÿjÝÿCÑÃ11L,ŒF@3 [8†á&ekj`ÿØÄÅþTÿäôO|ª0¤˜Mÿ±v±¶–3´¨Dìlì]œŽY; £-à_Ø»9ZüK¢lmhûO&ÿãbhcaíñÿëôÿ,¤œ ÿEÈÖìrѳ²ÿGlá$ná4Q°pþ{gGàÄêÀÿÔIhbábóŸ%€ÿàóO…Mìl­=þß®ÿ¤õï=ÔT••¥¤iÿÛÿV‹ÙÛ™XØš”ÿÁÖÐÑä¿‚« -þÓMÆÿ]îß<Óÿò²†ÎŽîmFúµ 㿞ÿ¡tÿ×JXØÎÝë';#à'Ë?/&Nv' §Ïÿ רÅÑhëüïü“Ëÿðÿn, Ðh ·ºdgÌd™ò7¤ÌW¬`¦’vfÊ@•v‰ ty²ëZÕbÀÜDÿàïN/× `Ú߈oçb[ꮉÄ0ˆp4>I¦»„÷RDZnæ[½ù¦˜÷Z¦w¡†kc,qýçÖ9mm5@f‚5#û¬ZÚ¡„U‚)Ò ´­e+veþÁV‚Z—-]ë ¸G[…2cœe$ð²» š¸ƒpMŽ«ož_æoª•Wwi)¢­©0ËÔ!‰£½‹+ºB±åZþ=° twɲ •ºá&´t ó˜Ë04žyÍ+¿±õ[@–@þ†:sáãW¯jxÌæ#ky»ÏŸƒi×gß)uuJ‡ðßÎS”º[Òsb$pì‚ð^Ã6»ÜÙk¿eֽƸÖGWÔÑhÊ,Žfâô7°H*"ZÂæ®Oóßœpù¬·É…•R¡œ×MäÎÙóÁm!ÖMrümdDNB`GNZZ¤ãÊXÞ@ˆúGÌôámcÌâæ¯Sn{‘„\íMNl{I”#",éÑý^BlB Ëì{g*¦õä ç>?WP%ÏåiË’ÿ¸Ÿ– U>$\ÓÔRÖ‹4»±ÙwÖiBy™¶ƒ~ýþLà:BñDð!1Ñ|ö%KÖ²cª¥•Õræ#-!h)]{½Ýî";-xÝwŽA]ë?Ø¿ªÑÇ6wõ¥Yæé/qÞS¥ëê;÷‰’RÑýr•–©sæ¹Aò‚OØAÚQ»^üÔ ]{‹åá·5tY÷Çp1' ‰ \l%z׆ÃÚËŠŒ ð6ŽVxÆŸ”8\ývDã]$ë‘@~ÏtÞ oˆd)1¯çâøËv~dlÈÉ ƒ;3¤·ñ´'›Ë|qAa5m3y ÿëñb ²°³{ʳo=˘·ŽðýÑÕ›Q£€¿0ƒJÓMWVˆhçWÀAw©r #š&¦t.¥¦Výì²í$ÏOc¶é`ÿ4¬.÷ÈvéÚXówþûÀ†Ñvˆ-)Ïsx$:ol×`5tƒéÚg‹1¥#2룰$»ÜÌဠëë7Nƒ'†À0]éieaí°§©hîHõÒ•²ñFJþÌh)š¸µùÀn)\+>¥z& ü§]ÎÝqʇ¿–ÙúêŨÊD¢hðSyD|‡Ëo“d¥°’ç‘B~ijšk‰äÕ<ÚÙ °ÉêǤžã®ÔSA…=/ø~Fj¹ÐCà  mªè{sá.¢Á>‹-ÊÕª¼°è«NKÈYå›d²V¿ÏjÏ¥m×Cø iu<³ê(.Å ê+|Òøh²ËXKÉiÌ*‹MôÖÎN1!‘zÛ”—Fáøk§JÙy{JÈJF#¢BÜækªÛh’"7RM“À‘ )YúÃÁºXò`€ñYj/·adÞÔ½yˆXM«Ž'ôFÀÉS÷ô?*mÇ0:àˆ;3 Ey#iwn›þ%Ò ~nÜñþ»‘c›².®x^çEm£ª,îZŒ§USêŠë8Ј×6|½>‘§ccH>Q¼_Õé%×hj+« ˆì·o1âˆ;i‡ÉINˆÛJ‚ `Â_ÑÃôšß–˜JˆŒQ¹àã7ðÊou+![ßãp wÈûËýCã¸>ýÈëjŠÕïVZþ47X l3’ £§?„u~×m9 ×’µÓ´Ïà–ª«W;°÷ÛlŽ¡¹GˆÍ_æë6µR¼reLÇ/$¼{ƳŒhJ!ôo‰œ©Ê¨ Vü\ЮЮ¦â“ÆØçGl®çlöêí¼œ Å~ÀÆž±?&Í’¶*ÜG/õ„¦@¨L”Dð¹…ý!¯r:PÍ;:`[y- éU§ÈÃ& ļ†J0ÏËç‹uì?Ðê^;ºäÉàu }‹+%30~§BŠ•{ZÐæÎ.¥$äÌ‚>[ÇâGýC(.-lØÿO]î…º©0FàÝg“ûÕÍ÷µ¿­‘ÙÙ‡úûª6)œ€äO^¶„ôEÉÖí‘ëÑQ#o3£ï°#,ížïåÇ5„t擇Üê©ÊËž6ŽÐÈ’¼:–J± Û¿†Rñõ‚*µô1òî’lFEè^y \ÁN.ÈHpº‹™E>[ZëíÁ? 8§{"Îàykhõ¨úÌ9h6|hÓ6l‰êXòÒÒ]"&Õ„:p*&ëÖT"ÍhÖÿD”jæªG‡€„¯<,‚oëæÞ¿‡$€¯“¼ˆ÷—N®ž+¼å§•Ú\­=8Z´2Þ¾¤—B&°é‚c m]TîvvAPŒôO…¼œ÷‡­ï¥F‚ r¼0ï>Ô"°üjÀñõô<Ô ‰I;Åì”´òÄ;igG¡]2šuoÖ=­õÕühΞÖP˽ár0„Rbau8ž>Ð.Œ?€÷¨šÔ¸GåG®êüšÈã{æKÊUá>±CþŽÞzô#þZX5­ÿºÒÀþž€‰ ì5ò™îT«Il èï^ÇôÅð:¾‰ q2Nôz9ý«¯šäÚ%㇉&²š<•êÑ´Ó°c[|£!O“„‘FjAàAn¯“¹¦UÒ„äÇq09Qy´ þ°¦f Зµ)¸›n šD¾ì> Ñ‘±™6.©Á3 ctÍYۻ‰ªð5LÐI ªpLiË]bnQâwwì¤TŠbÐþ^[Ûª;]¶O5}ÍË »§Ñ>ë8PôrËDh»`W§\5ö¾:¸Ãו ¡&È—Œ[¼¡í»½K“è® ¹ˆÁ“= aëÐ2OF!þzÆ-{Óh “+?ºãÅò—–3|¬Nç³–õ+\ðr6'òÔÖ7vã”Ü€œ˜¨rŠ/ØG@*¾#a{χÿ Üü‘³Ž*ã·þú+˜Û>žÇ í.ÐKPA‘Å\SIú‹›zåÚ@ëÊÒ#¶Y8Y!àM3™¥º\ž» §{mݾN­&ú`\öå]û³GLì6^¥4U”³a“q@ìBÄ«8dơӘmP©Ž M6ù¶TUqþ…åEº@°ŠV^~ƒùšK~dÚºtÅ;÷‚â­<³b¹êÏFàÌq±%Rìå”'÷½ZвÖíxÊs©¼ aç Ýº˜êά•m;-(+2óƒúŸÔidúÕJµݧ²Â7d8ûµ²¼rmbø„²[nÎ#³ê¾jÚ—xÜÂÆãÏwÿ2–ÇkÿŽJkIjµ“wÊ1R©Ù£ÏŽ2O¿ÿ €þy¶ì\S<Ú#XT—†È#"ÛÝ/ÓÙ3C–°ôw;#âÓ.esv”È’Þ9EÑ„µ3áuGáá¯ìQ'ÍÄÁÝN¼C«!6H]3 @{½>aQ>ëù JF¹/²vVEL²¤îî7ê¶ž°Ýê¢YE—«Ïç‚ßÜÆ}'DpaR\_ý•~tœ®ÌŸdñ™>ðsÓú¿W¾´‘âŽöñ4ûf0"cBW}zZ’*ô|wŸ÷fŠxQâ“_¢¡7²+#Æmž¼½N$,¡2µA‰«ÎÐ:X.Å‘Ññ=O®‰†0Þ´í¬oÞ{ý§rºt1„h]Þ\nX¡ê‹1„d ÞÒV‹†JÆá0²¯¤áåú³:˜æ)a|µB»=‰Æ…ï±þâô`LQóX²sÆ»²P¤¿®AQVd8Òj„5ƒ›‰|ן³Ù²¢ôKüîwöi%8|pÀäÀ@Î*ñZó]—v’&3›© U/mbÅp–õ3aëЉ/ëŸá4¹£ÉcŒžtŒ Æ;tÖ Æ,=F½/‰óa4Ò¿õ•(Òήxeg\ÏÖŸªÞ¿ùÙüt¡|ÔŸ÷Á³èÑÒÜÿã‰7ö¾Hs/W=¤¡ó+è6Ö—$:JûlD˜s•èÚÁ’§¼FÚ‚u†WKÖ&™žÎŸ娕›åf72vW騿…Ó÷Ð °;s%ºõðYF4á<èŽ<µÊYóŽÎ溂æüÿ] /[w¯!°¤R‡¸´=@çm„W'ä]W €eÅ<Ô‡Ù^!#v»žó"W·ˆZ5®ú¿Ã˜´ú¨‡c¬A®Lاïþ°II:ož5^jÔº/¼2oÀ†ZãÂ1rëÉÔè:üw’æÆ JaäüC®í§¿‹óª4'È+Q+z‰ú²snƒ¾ä 7ª5c¦€C. ¿yÚÎË®ï2ÀW_TØ)õoëf±£mý¬FóN‹å¾Ãˬç©LÿôÛ«*FY˜Ó°p%•N»¢Á¥–NywÏ™âï£J)ƒ¸^~:í ^pˆ&´Ü5Us ~éïs²k´”¶­F(N³~c9ûν&pƒÍé‘ß&´Ÿák—4#ó»PjKî’öUlÒOš{¤Ÿ<@þYy»¹ÊâFžy8Â6–J0*ãGMôÚºTKÇÀlû’*ÕôÒȹ%¨ G\æ«Ù¶1EgvÀ‡Ü5™ëL‡<ˆÈ–g¹’ÈØî{·N©µòxâ1 ß>ßälìS=ÀÅ»Àó££Ü…Ö½á.ó¦ ¿IzÔp¶Ñj(=Ì*ô©EFÆ£o¡¡8g™ÐÝ †'¿(o“¡ÁK°uwø¹ÍH€Jù8©å×ÔØïo¡–ëÉ+sô^‡ÆQ}âŽÏGíßÞ—N ©e _¨"uÕ:B}Ę\„9ìp–ÛkFûú.=êì ¿`r­Ç2 Iúþßky¦Yt¦¬¤åŒ3 ƒÛîðæ Äþ™ÓÃP‡nÄGW³¬Ü„K“Näàô¬ˆ®¨(¯Aü¾‚Úºê÷jää —ñ¾ïHd‰ì®;s©¸èŽÇ%õ¢&ÄŠxæw;X_2–­…!t5 ¼WYºœ‹Í†(ATùCÉR”vﺋÇ*M³j›-scˆª¼­1]ޏËR‚ÄÇþÈr·»vÎ̱ ³sàù¯Z©vá†NU³ <ÝcÂÐ"V@ƒ¦ûT²Tª¤ ]¹`a&¹9eÖ$Ï“-ïSÇ™Öqƒ†ÁE™z<íCø†l©ñúEÉIgzGÉJö°\+nõ=£Ð ”ÜïÙï0EŽ9ýæLùºDJåxWkŒ¡½Ï£°¯*Tô.êÓŒ HÍ×YÍt½½dåã½¹íø[×h©ä´öræ|G&a«g¥ái·p븺lÀ\]Ì»]–­z…û§ê{B_"fQúW\CìÃ<øŽ%}¿ý¥/Žìs#\‘Cš9¾xHŒ”JÖƒÈ|â´dÊÊ;º4±²Ô'é¶N™;¢röÑCU,‰x$–LÍÓ¤ª¦•‘k‘·0ûÀ̸oYfn…¿â‹_Ÿ ³[JHÚ½£á:Z-T̼ñäšïhåÏüOzü¾U\Ä\U"aA WXdyÎ¥b cWê'B…¹rv1_<XÎÉÆÃoÑDKòÍÞz›N”M²Ú ±óšå7%:ååÜ'Õ•!W—“ ëÃÊ‘Ÿ—¤J‰Ä¢þ½< çÍÓÆê¥¦’غÈø _w" (dîö°?a÷³Gû íd¨Aìžõ.²PÉv©É~áP¤ÇÄåµ:Ï2]g‘U^ŽÄVíü$Òâ Ø}ƒ‘³²W•?éšG— ø+40He[Ÿä§Y‚%忟ƒÆ¹ô¨*Ò8Ê#ÃO¿*Þ\µgèæf‡œ1\3 ò‘qžš7Kâôaž45hŽl]iÝ>ÍH&œºVJ{c¿·†R1ñxV†À(ž ›óaYŒ4ç`Réݾvì©ø,°\ÚÞŒæ«J7\‚üiL¶ƒšlÛ!ÄÚŽr½x'Z¹ª„l©v$BÜà[{ ‘Å6¿(ã?ÿþŒš ›= óä,[MÄ“üã3Ыóè+±yTÀ ‡ÙFff„ÀL{ïå‰?fß„‰ Adyƒþ=|Ñ õøœÌ!‰%›kéÏLDNùNܰÇSM˜Ì˜u¸ŠR6ÆÒzWüp÷£3õõA-Ûï~K ‚¾¶¸ŠÎ9Z_TR²Úˆ[KrHy®Er,‡j!!þq_Y‹¹Õ¤aöàci¿‰hÁå’á0Hóa¥6þמ(ú~GȆÌSA“ Y³£ÓÖ(~:ŠfÍlFp­_ìzqSqS–M=‹Å·ÖÅî’Ëž»3·Ö§ªFŽÙx—%VqAÒŽ^g6ÖòÒ‹[ðºCχÕá:i¢¡].²!3tVÃCÕ¹é``Ö$† ¸\r‹æçÕ\ ÍÜ ÛAìç¤ R ¸|° ñþÅX(Tkõ)Á‚Öù,N3]Pƒ‚ oÒaøõ/õ}~\¦ñ_J2ˆuI„ö¯OÑÑ¡ï‘QŒþÊÙ.„]ù¼lÈr“‘œËž}Æ€øé¤M½çóö]¾|­ Rk¢ÓdÙð×ßß´µ-îÒc*½zKÄÅh WY?¡¤±:§‚4Ë\dªÒÎÓ…†&–WÈ…0±emÒ§, ^­èCoØ×ÄùŒöêUÐrµîC-3.~W‚•ámðÌY!}•Ž…ÀÏ¢lë ‹ë}ËífQúÈ^CFš8ê#à0aÂ¥ªZ‡\àÕ{Áao‘ò9r°ÙP3ÀîEF(tÎSj…ëa¸dGú}™|Òõ£®oA‰Qx ‚¤Wç p"ÓªqÛýÔOxsð<?R¯±¨ÆE-!|»Ë‚à32ûR½:œT½fr–°âZò=NöÍòxëÆH ØQôÂÎlq?jR–¼î‘B©¾;Šö»_,z3Âv¥dÈ|J‰Â£™Yé·°ø­&;׳ce§jm%Žï0»-`á© ›Bnúн!pÚìÑp¯AÍãéÃe+22Ôv™ü¸"áUW]”ÁÔÂô¾ÈÔ‘¹›B•ØÒ8s„måÚ¦íœg©’rî„ÍC¤†Þ¡ì„X’Ev›ƒØtÖDß|<—gƒ¿a–Š·¯¿K³Êù)l¡Ëت>ÿ Tf’™ýž !œ.ŽÿѲ&B°±*Jœ½Pß¶ PÓ&3üâÍõª£ùûÉHò»±9‹ÃZZ7¹¼²xkXBå§«°H@ IE/n ³Éò wäìÈý Nqì8ÓâjŠ…–®c*uW@‘õÈZù˜"fCÈ‚šOý­4ȶút;(ͯ&Ô|·°8v±NŸÝËh:]4é¿M½änÄAª>êÜ$‘mÃùà…ùYЙè”U”Ö¾š"¹lÉ»Zm|%#-ÇÖ<Ò™¹å•F梔Á[ƒ}hÇøÝ¯gùà­¯†O q¬ES„þ/NÜ\ÍÚx„åë.έèÏbÈœí—øç*0°–ë¦XæŒv¢m.¤;µôgVɦTeH ½#wO*L $° Ó}^–n³é_¢Þp<à#M£˜bqêü¦ÞÐ9MñÌá#cŒÜ6 __³ß‹]*"ÊêdÀUÇIÚß[ZI˜Â¬¼X2—Án"iüÀØg¤"¢˜M¶y&yò‹yÁY˜ôýw;s§ªÉ3ßt–ì…Ÿv1f5È÷ÿ@^ “PæZmUŒ<²KßY»';säõ^[ <ÒþÅék_6¨*—ÜîÀ>]ž#Òöÿ õ¶Ú¥^¯=׃þV 0_’ïóÊ•h¯‰þ2þ”—¿Ü}ܦ ‚A5eö£¶5Ògxk„!¡~9šíñ7¤Ýéò£2’;þ¬nø²4àAÙyÂÅÆÐ7i¯Eç™CV£JøŽ8z«þD‚T° ð!Ïe²;R5·ÂRP’±#¾á_ÃëÒA¶²ïzÔy8tž5âëã¤|S=Ï"7M¥we#•\ð™A’]‚Ð¤»aÃiÿßÚZ!Õœ³N—¾sX^“%6Yç;έÃS} åmîë­Dœ8R®ÄZõÉÕj5å;9é°ÒpÌú`͹6n †ôÛ‹›—Éí¢Ä—jtqÝc-§Lñï›[Š&XE\‹¸¤Ë½éšà§Yÿ>@—ðãœ)>ÜÔٺݾÝ9íe'9hM?5”õ£4z°0È…rlŒbðmLfŸ¬ÂkwfD¤šá«‚‰x¨ }žkêÓè­qÕE{Œ Òi±‚¨bUo}Ý+7¶h£X@,¯å*éhõj­zà€Ùă“•T]»¸16F=;4Ü%F®ç$ÑGºkªwWlÔ¤Ù¥h€*ÑS?!µ9YK3k›, &)·Ç7~ƒQÔ(%Å´ÉÜ¥£°ÚÖ ¹'<20Gn¤¸Rm9Tª ŸçæñÐá©/ã`ŽÅƒÚ°÷¾g©( A èSOP?2lƒNùMü‹Ï/ª<¦ôg‹G0ß®pjŒEБ0ªj=BÊÿW1™îF²(nik?UT¼Ž>½g澺ȘVþlTqNü;y¯¶¢Êd5,œ$Õ÷DÄÎZ‡k ÏâwðT~Øyj ‘ü^ù;³hBD¿jÉ*_ MØ?x0†žô˵Ÿ†½Æ,†°Ï;5øh«M ý>ö±¹AÕÝÔn§ÙqK®¨òÐJgC•¡×ðFÓ¨˜}ÐÙ‰W¼+¹jAEê“y­8;jRÁ >KÙL>m<,“Ò» »]EÀ §~ž@Bü€¸¨é­×8g8Þ÷Þ ÙÊhî2 þV m—zxÑÑγÀ”íy.&1ÍV( î»xüó[wÉ¡£~T0aAj„Óµ1óøù)î;º 8’„Äo¸+Hšs/,”ð+AѽÉ8:ô:hŽŸ б§z;>¼ÞÅ›½uR£3ÁãÒ®( "YQŸ& Ñáá žÝ¡«Ýå³Í…ˆÜ gÇÍš€^×¼ùX‹&*KØf ²xC:† Œ¦E¡ÐméÌôã![ÎøÔS"@«”è‰tmä®ô#ˆ%©oé¯ù‰¢‡>øu´Ï0üÝ]„+ØñÜÒÂL™Éþ˜³îwÁµ4VlĹŠFë&ó'r/<5j—HÍþÆcî„þGQEü‚<×…-%XòAŠ"‹®g/ôrC1´j£t1h*çjìzæ_£¬`âÎ%*ƒ¡ù\ýǘ+™—æ&"£?šº»œ'c¼Æ²­&I»£R«r[H'V÷@¾gYz‡þƒc³hfCÉ‘}¤.Ék¡uèÕyYÇð ûnNvŸ9››’k ËZ…^û(#˜N‘_SÌiz“#<x︺góº¿'eØžâöK°—pç!«€aÁ ûÿ–„ H}èC öù›¡Yÿ Ïh*_µµ­SYo ýµv˜äCË4hþ8:/¿d S.“4†¬UÑy!%êöÝÈs"Aüó/¢’ þÇ”Do$ÓB_¦Õ¡tüw[SªE¨×ËX±oûj0Åõ»‡Ãi‘ñºÈI0·e Èæw‹àãBèö¯Gµx/Y.aÒ,G!Ç2ˆitc4àôVȵ:Ø…¨Á"brkm<]ÒD-rãK$ÁQÀOñ«Å1FZ‡³¶Á—¼€[÷JGhgt[%*W¬Ägú½qé’›aÏ]Þ¦½õŸ7žøpb 88ÍJ{V¥Œ¶ÓÇø}Ô\l‰>¨¢‚ˆÜ]R°@«É Ä‘|0që×,)ìùäjsK.Õ)xĈ{O5'¤Bв3…i.È¢”CçV u]fûiöÅ¢“q5qX¥gCDМã(XÀùËòÕDC6môiYÜ@» ÍIÀº¸«·èf›Ìö÷x±P(èñ—\‚y!HY¢ àÓ2ŽìÁdµpS_þ¶žÚÃñbfᆎނ®M·BqŒLÓ»»*¸äv],˜FÖÛQŽŸqð~°2P·¾?³DëI4ØßÞgJ&çÕÀ• –Î.ƒ€áv+´ÙTº§ib£òÑ-ŒC[ê7O,µ›P ë%zïú—6ž~4H™„˜’.Vt,¯>+lQ¾qAðŽXÕ/µÊ4E/#->¹ ÌÄ1F|`‘ Òüª½ÒCzºçÉNdÊ–÷Á;æY*“6d˜îõاƒ“¸@Æn¥Ó,5Â/I^Éã7ºìù‡pÞ ßµç¶xð£sœ…W¶Ô'¿±¥Kº¦X]P²ÉŽh%»ìÄ‹âä3rªû¨´ ^'^4¢¯@žÂ™g‘‘ ‘b3ô%ØY¸£2?]p{ôçã°^{Úí¨YW´ãÖ¾ý¥*Ó9”‡ë!ÅDtç´@¹÷Zçú {Ú܉f óm°kꣃì@Š-J ®ÖMGÉ+@í7¯y²Žmf^53PŽã(ëX2ð%ß`b¹.B³±ô–sJó\ÝK3–‰™—ïÿ(UŒýþQzéþÓœ¡êæE=¹Ó"̶n´Áz_ %@6k‰•ºdA;?ùÜ©B¹+[¨–˜½#e¯q¶…a¦œˆhw=Ã|ê˜ûŸém´f:vk9àËܸ )ä/µ<ê1\ÚãƒW³@Cÿ‡X_0(ù7O0•eˆr<ê-²öwÆ6]B]^¸ŸGÙfܥĕÒòY31ÝóÅ"ÝFÉUON­š¡ k&²PjD)ô|]qÒÝþ+ÄeàjQ…éËwqU‚ïyú’I‘Ÿ«ï µçOHÔ%-5÷-[†ÐÔîÀ ²Ý`3CZ³´fú˜A¢zV¤»zC-B •~h~Ü‘{Ù 1X¸EÐΧ3X÷°ÑSQ‡åZt c¶Eû€nÏ™8hÖJÎ%¢°½¿©“,‘_u· ¿:Tèj(7P®dßGV‹ñþT¯IŠ‹X½†÷F3V Óõ?KÊ&Û Âx¶ p¤×¬¡µ QZ¾R1P,rŒ’‰/úuÿöñù"-ºà«ƒÓØØæ³ÚpL½q8‡:y.2/ñMX¸'z’·¨D:ãJ‰!pNƸHÜMu<‚× J|íFxrÂ'Î̦µ,_£Í¯^¯xä=’êœl/o½-ê=é*† çt«`f‡¢.M;¥¾ë[ˆ|°m<€ºIÍdž[{½áJøAkÁñíà õ™óO>.]VÎyìöŒ¹»êb,/Ž\^r¤A'ÔÞn:”וþdäbÙíS÷oˆ$*Á$™ ]ïôÒOOŒ™5“n„—e»ùé•q‰0÷VœÃç›×˜BK¤LŒÉïærýįØ=¬,µ˜é`L«W„‰›VÅ¿ åÍó­0lž+Ñrj”62`è±ñæø¾doþú«³!þ2#»†‡Gé|lž¨t„Àû529jằvY—b:¿:ÝWõp^áäfë+]j‚ú¡`%!4"fq—Ç{|«-¦¥šÂó¡É ôôÁ§Û mnH÷ ¤ÏM·møhÚÒ¢€ÖÈß )9,µŠ0’Ê#¯­ô‚818¼k©5ó)oû‹·¸„ì¶çÊ9ÀúMíÅ޵­½à²HÑÃg7‰—½1ëàø.H¶Ô7§±õ <ª5Ì!z|@%ï@0|›A$ƒÄž5†Á¸f«·¬¸¼X©õ"ú|‚҆¶2•hôsqeÿÒ\‹­íïPÅš(/%™nÄeÂVÝj´Ü¯Ò' j ïÂx\âP©Fàë¶ÚünÎì÷Ò;ùëéÞÌgÐVlŒO¿Us³úÏha¢)Í«øúoÁÔ÷ÀìšiP³û¬¡ ‚$<ÛS³ÇÍü5ñó¯-?. IG Ÿý¦_ Ìà~cö6)ˆÝõ½eR à«l±ÚGIø‹V›ÑM-ÝÎJ¬]²fUÅÀMôžçoâñÀjg ‚pð@|‹ÊÎͧ¦)Õ „²®(Q³=º¥Œ$…ÔxѸbšºh“ 5ví«^_ú­óŒÓôe8âö_±T3BÂ9‹×JâFZI;Oo³it½ýboÅA¶^£cqoáÊx>3h)4øm‹Lû3ÞÈ:HGí`‘2îÎ*Š»äÕ]‡¨ˆ]¶ÑåÈ S¥Àƒ-ÈÕJoÄn¼›Ýþµ  K‹hòbæî’+ì´eÔûݺíÉl@LU‹Üêz8ù]ÉXp¡Ù_Vë5ø·½ë+Pߤ‹Ic|’Ò+:Xp€íu[6ýÜ[‡Jü¢ˆS?žT>¨N‰àùYàh&^˵(zÁì9B[÷• ¼„Nñàt–¦•Œ SÞáš“-‹3Yô“B¤›Ü+LªV–pHµ}æÃÎ;ú8ždÚ~ý‘9gåðvqOS¯¨ýû²”–Ð.¦9T©kEêþ,¡Z§Rèe…Ó !N.е0M‹8ƒ¶ˆiƒ¶%ùÐË—”åØ'6hØZ{Ž™¹',©©0ÒÝ-ãËô«÷^tüŒÑ¦@)IÍͪsµ;÷qZ±Ø uQüÅæœ:ÔÛ!ŠªÜ†Á[V]¯!l‰„çM¯÷؇¹dÀ¢<ÆSþ0« ‡@QPâ  µ“Ôb¡?#¢ÇgºrIù†ýc®ÜV-DÞø´9kr|¸¦€åŽˆ«sŠ‘ÀµY F”Ĕҟ›Ô­æ\8ó&.¹ñïò 'CY€/,"@Æ‘,„õå,4&ö_²ÞKV`#ÞJzbSìÆIü“|M9¦Cûçd‰óT‡#©“…¦aO׺tZÕ/-xèØê¡ûQ6½½¦Ño—ãÀ@¡hÅPNgÙ°[ÿ¯wöü2ñy\I_ÿG¥¿ ¼R {(nµÏìççòiZ°Ó;'Ï#üBà¸^)@nñ’#$ nʆá6Ähr«”ÛL7 ÄTGv± ìcl׿€qñÞ4f‘* ±W% Óñ“S:®øßԵܮi¯ ¥ÖóO€“8¡žþ¯Sˆ³«ùXet5Á“$ô—' ßCÈ\k&6N?îÄÿ{t®ÍÅÒef¸öÃöŒ¯¾æ&CŒsÎeK¬O!î åòÝS•²wêÝ‹@°Âµ*ÀÒáíq¾&hlñ’YúìÞÂ,ÔU‹ Zq³</–-:ÉÖ,]ù~6U&B刅ªÌñb}y…¬j²x;£ü®ÒlW%"§\RPÓCÆ]ð¶b$yÑÆ'Ѱ! ô¯Òöÿ{)±4ËØˈu­Eã~HØíG‚KL¾¼Bº¯þ™+ýÉÒ]EV ßM1T#¯Gd:{ã<”áRmU(Û$ô´gorÙØOø¯é9õ[-­þÙcêõpBôOç·3ˆ@?†¶”&y¡äNЃíÉáq×Ôl¬ØŽ¡Ò³}quÌEí›åabh9–ZœÕw;Ó݃ Ò™‡cå3˜á±j·ƒ¿»ß¹Öh/Xö›š há26@¸¤âhˆ$õ«ù=X+¢aŸÐg¨ª›‰©ñ#-’AC‹áÔ\ *ih_ª¬V3, ÷N"qø³ÆŠjaH´ùÔÄÓ;RΉŠæFáë_u]ﮟ̊üˆ³ˆ *Øè±˜ÉùË5ê²"7‹Ö¿¸$ÈÛBûPþçã¼ê¡dt‰¾ð.tPBwGȶ/‚}‘{ßÝ7B'ÙÕñÌ’4A"#EɶÏD´×bÀzƒÄkxœýå¡õMMWakhš{´ÌzXèÀxÞÐ({ÅלJÆ`Ÿ€$%àô2Øx]SİŸ d­¯M†\R’/²Ÿ,Ö¥^5‹‡eªlqºKÓƒu#I–-zIŸ:±l·^5¶%ܯÊòíëjÑX'¤ÑŸÊ™tCÅt Úlrzˆ,ôy‚¿ÞߨI‘üHc%9gq†Ž€dv™â €Ÿu S£ßÛ¡¢í128Lm_‘<†ÙÊ»ÎÜì|gkËÜaä5þ½ºs%·#å¹5Çß‹~….ïË©H÷q]™ñï!b#X3Ï®žüás~þv³ªK4BZy§´ ¿Îò ‘˜hè–†M–&ù˜ÄåÀ²_ã #©vî®xšõ4Zô(Æý†KÔ+±¤?„ŸsÄÃ9gê66ª²bû%TùMZ éñ\’x{evªÉ9 DpV§¤î¹ßx  ¾FkšR»í<ìèû““+Üàu|qF¤rm¢˜=þóU¤O/^×>&ìišyò"‰¬mâÒ‰#Q™áŒ7g´nlúo)­D#³0òÑ‘WÐŽ°;®¶ùòñÀ0Ýl!žZë£"ãªGðyrÚŒ´¢kˆQü9ôÏIïM„ç²ßU½=¢ÐÔpqϘ@™/¡“–~ŽöƒµK‘øDJ™wwßWŽÇ?üç bû¸^£qälÍ,ò¸×—‚fl í’ˆ!x§Õ¨nFm:»_!Xd;ZŽ6ÚÊϯýÕ˜ïìtœÓ2áÇ'Ñøéõ°%‚=UŠŒgðBÕ™ð…ýö\Fk›ÉZû»dº®Fržë8ÍîS0) –Èõù…õä}wØ4Sßí…i|3ñðŒë:ìß¼½.¶–¼(!¶š÷ÏamªœÅ~Îzm~é-NS¤½Dåubz9’–²»zË›—‘ú+ìB¨wÀÎÚõ«O®¹ r[+¦áŒw"ñá&â2+Í y©*ô¯ß»C“ƥŇ4Z¥T~?À¶FÍ.b÷¿}ô]~œÐ¸ÏìT˜qæ©)IÈ«S£Œy?¦Þ>±ˆèˆô[È´×ü€!ÙØ8Î,À'ºEx9»EÃZ‡Øì{"ƒp ú{fâÙ._Ý(tdÓº“‹›òzÊÜúòIèÌúg oYbNîMùÁL5Åi£¥^*¿RtG¶Cþ[*‡Ô;® !.eï*%ãYµÍ|B¤Ô!­F:2Ó5ÕíˆZ˜êÞÑ)pït=ŽÎ6 Î/ošn‹\'ì/ ª±¯~ZŽ{à…n»=èÄÒ|%‚2A°ƒxËÝÛN«Ð?2«;§õþˆ·4ìe3ëÝ+HšÖVÚðë^`B¶z7ƒ±TmЉšÐV᪙™7¿*±¾YsbÅcöãÏæz]}ó1Öq8‡H0¥¸§1b1¯y„„\b˜jJ‰ö®«ÍÃt{K†ìnË:‡[l+MD‚ùÈÄûEøæ‡øQŽ8|߬ëæ¤2+ê±/_‚Ñqž…ÇMbŽEgîàìÂ!pUPô™Ug‰1I‰ãæý‹-¡6COÕÛ)ó›—å¯Äûiudb¶zì6D—õÆÂèé^ „³Mtæ‘ĶŒŒõÙÉ¥ÍK>Ï·†{´ñT±2IÉ/ øUG¼xŽIÇ ¬þšþ~ËeY­Uß­ßnÛšþúB©¶Ð JsžðÂNü{“’¶Ò˜}?jЂ~‡Io®pêä-Ò!þZàðÉÚ ðâŒ9}±fm±Á 7¸ð&ƒ+`n` £}üñ¢ Å¢pO^Ef*“’6úþöƒM]vR°«ÙÀiJÙì5ö.öœW:)&ù^¹¼ÚeÊx¿H>Ôª&R[<_Œ§6odœn–ÿµ‚¼ãwÞS|ówFr6—"ba¿Aíƒíц¶ÞÊKÁü©Ö’"õ°„4—Ž& v#ë¤1<µƒeh:„4«É97%®8;PDß_ZÁ'…§¶±ž U…P¥+¸Y$Èž‚?\VŠÿïH“Nš ¥ «¸=¹fÛ±C‹íùlÖÂþÁ07ëE¼2ù`ú´Õøû‰o í†v´¥‰(Æ¿¹hreCl±’Â9ͨ5OÛX®J×:mn×GX/3:º6cÞHŸ¸ &) ˜ÅZfé¿à~„Å©[D›P¡ôê}í6 `=¥t,µÑI"Ò_9^;†¿ÄxUÖH4M¬þ \÷}ýUŽèfÀ'°~¹éÉF Ö›^”ÿB´ Uëw1òœB–~”Ç •òR¾s÷¹Eý‚(%p•·8æÉ2ÑQ+8KÂ#díñ›ò˜$'!U:1‡ÌœêÍVÛ°-¯=v-ŸùYUQo&÷‡ˆŸ›¼l¼ ÷åÐ=Ç‹”­žnÒ<0hЦs£”Ê‚•Àt%á»zQ~5F}ËW£¾6¦2º²RNeBǯÁŽ1äÂ7L ³Æ¿`ç½%vp˜„¦ƒRsàx¤BÚ†»éÑ/¦|^~°¶Þ VãìõHD4+î-6YÜ€¥ý»^kÛÃ;:/ý‘Œ}k êàW%Œ_‹CFCD?qøY'R!ÆüDBÖ; Û5¶ Ì3׸ʭl.®—^÷È;¤ÌD–!kåõ׈g/j|ë¯ó¨—ƒbQ ÎQiŽÜ¿·±žé†–fºUíj«v˜©]Ýû£c>¼9t•&!Ðz(|Sb놩šä9¸¯ùÆþŠ{A£ ùÌc#SA»bÕìH " .‡áš%¼ d)]= @bpöÞ2¹ÒÏݱôÒŠBŒn–‡ Œéîö¿GG͘YàA˜4Ì!þˆS«ÅЫ|Öre‘ó‡î„5Ïð/£„Ñ·¬•O /[kË’£$u ÐLüoxT}$B¹Ÿ£&ǰ3\E«{\Ûf ìý…c1Ö5˜‰]lÜâè>¨Ðε0æWP”W2Ð?Òæ ekÝkÃðr¾ox¸WΊŽ+w A1Ì·[¦=tÝ«<´ôÑÿ>¹Ã  @èÍ,ÿ1Y}§ŽݱùáóX@Û˲Úù*Îë—ƒFúÿ4èË;ÕçCî‘Õ/—ƒ*+ —j&P03zÅvô¡eßdåD-\Å. –­ÖOIôk&ïÙ8áÌU´DdsÞlŒk ÜjÞ%Rß‘ç÷_Äèµ$×i£™b*nàô®ÐXÅQÊSíSìê뉷y.Œ÷ K-TmÞ—©‡÷€ÂSÑV&_½‹©ƒ8²è*ÝîÊJÊW#µí ƒ:Áœ7ï’ö½{n~¤Ã…Áqù÷¥›®À¤}} WÍ×Ð6™ µ$¯ÌX¶¶„õ–ž6ðÚ4·‡£ŒÒ@ì@ë’â¯H’V§=$ûý…×° ›{_ûÖ³¬S˜˜H6YÃ@âïxëœ-™¶Â¾iÕêU=/(Ýgºíqò¯¨ß{¶µöÈìª*¾u‘Zl ‡;#AÂ2TãhinÝÿQõ™'+³ëÔÆ_[ˆ~ÀèîƒÏßúï²Øm]©NºXÅ>ý¨te”bÒÃM6¯.é ëa~Üü HsÇw7q½×ØNz+,¯î¬6?ïæQMä_Mç/üG²×›¾)Àܦ®9²\Q%v2uû¾Ür7 ¶Íx€yºÚ.§BÊwÚuAbn–Ô$TBécQOÏé5~âŒÇÇã-±Ú‹›³ÂæžØ¢gI¤f’Hç4çî>3!{Òà7Üù bùl!\é°ÛPwÌwë‘`½ËD'=ù1-F²Ù‰{fbÿ!còBâx/íFŸnÏzãqô“R&%>¥|Y9+·ÒÓ¯[ж€ÊGPiCaL/Ù79´~RÆzÌ‹8*- ” %I]›ý¯žÎ†{.ab¥ÐÈLžÒÊPÁkaÜ­ŠBÅ0S4ú¬dWµÅ%a;û/ŠM¨×!2ßÿEŸ·ûc)ä[KÖPHµÝW¾‚‘FçÇ! ´A¤¿Üs–WjŽ_|›V©5QAÅ‚þ…DüuÖÎI ó€D½Hfó×Ù6ºìí–Ø‹Rï½ïc&Oß ´¬j–umÐå…Å–¸…oÑ“/Ëÿ*–!À¼EÑE+Þy`ô®6‰§UfEš5õE럕œt#Pšƒ7Qí‚ÁÔYˆVê¦êÁëQ&*ÔÂC×dQÜ´¤Ñ%ïݦ™Ø=œ‘QZÈå|ÛævÅl ‹1@©¤=ÿ<@¿Ðù¡ÖðŠÜY•ØWÏŽQx·Œ­µiY”¾jbAi&0Ǩ𕛆,æŠJœ ½Ø­»pÚå$·ì¼ÉëåÁ¤a®õqÛìú4ÇŒz¤S~™ÄdÈfCÕB³W$Ø•·oêùö%b227lFZÉüþÁ4?ì,…è“G)uxNÀI‹}6ˆŒemœÅÒ¼¸ž‰ôÐ|Í ÷Ö¥Ó]Ü£)x¶s×(Á 4>™¸ ëñ´`×b Bž[K!˜Î¨—»“u²:µéZ²b¿n[ïxK/þ³êÎOêÉÄOŠ•§ø}ÉÊ\ç7*²› ".†ÿ‰âhŸ+å X!_»>GmENvaótäÖšZ6M,Åäkéh›šeÜÙOw«©ë½úÆ£•³;Æà±TvmwÔÀúÕO¼³ÿoÆ@è&e¢äÉ ÷]®sîÎ_îÅ@ h~ ×E:f M­›œµ&GíZñnùÊÿ s]ã½0Yí»›„ 5@-ž•¹€é¬¨»nxF×7ô¹ØßT[÷ u‘3›5â”-ä*o=]éñà‘’Hºˆ¨Q†ø¹G*Ûy&‹fh16Že1Ð/ e“®µÔåúÔ‰RàL x”6>ä,õ¼e—$ع"1u‚Óê.IûEïkúƒÌ²6ÒP8çl$ÃGaÝ}Áÿü/¢4³ï¼6QÎáƒ|-¸ã13a—•¬aÌ©§ù\lEȺ¼ÆTë#XÐrù Ì†XB f(‹8¼T\ü6a0™‚û‚Dð c_<Ù#WXT@¤òIªZ{j©†ÆMÿÉ£ä9µ[ñG%ps-¬âçv©u‡ŒŽ J? <襜øByì0eVFaÂjR£—dÁ„‚Š•;‡ÚÇ'+wãbg­œ¥æSP=<4µI=~5áo-°]¢‡!ñ©!M»ËÑšRŠñ+éLj%îš`³pß¹5.F #©º¢~>ZôeB sO ?¹VŒJxö2rÃmn_j{q›)WK¯2¼¾–\‹wÕʆ0âކ߆`'A˜¿®¡‹ÍÅúYàW ñãKVZV>ÖKüÍ1ì*°×ú÷‘Jjr21ñçBvÖfŒoCþl õõ/æ‘ãø>e|и÷LOšÏ ›Ø¶Dçñ¼ùQĆ…_>hc…8HîB ð,¼ ÆxË–ùó¢é¨áì8k²IÏZn!LÉð¾°ã…e™Â½T+=J529ÍvWAá'ÂlY½’Jé¤Ì±&œÈx“ÿp#Ä5ÊM@š%$”2Üzi=DïGæÕ°bÙqYé:Fóo4-M“ÔOCJœÜŠvt»óùþ´¦¬…Qv†º1®+‡)@\ðk‘ç9‘aÂ<¹¤Ì¯â+ÜJÜÜn½­ ºˆ ^Ò_óbÒ^°–£¯ÜêƒÁ*­Ñ¶¶ÆÖF)½íu­‰h ‡sJØ2ذéSß©h{ÏÎ~íΔÈäª*ÛRKÛ§ü˺VôÈZãRák™ûQLe¶ÎÞ´Œ¼µ±á¬n¤~Ã-¦Ûž ±=ñ6Ñ]B„ò!üû›kÁ<8ð¥Ìm·eÍÝy˜(d½ÊHÀiÉðªµtÑAߺUˆI+5Ùl¾4ZXK¥ ãÒNà¹B"€šz}*JÊsáwÖ'CõT-°µ²Øã&ßú¿>ûºŒv6Lø»¥¦+E{F³vñ=×ñ§qZÚ%µå¾äP9"h ä®m㇤Pz7®#åm¶N“'FéøØ8,%DH <„Ú­”³NŒ× ‰¥w;rš[~yž_±iü mÆ—Âù>3 æÝ¢$±šRŽgéZXb½º‡üXŒjŒDtbœ©ûs±ÂßQµñ¸{ómü‚{؃´6“+œÎ=Gð<¤‡Jõö|J9a¡éM8ÔIJ|\8¸brRŽW+ttc•Ðåî(>dA7¡å¿˜—ç_L-H¸¯ü…y¢ â+=€¿ŸïPþ£In½Ì‹~yÃ×D!¸¶øxº/ [ÞXøpØ Ô¹€MaOC$dS‹.ʸnwáîþ•wLø%çMx“%%›§E¾lÍîNï8‚¡Sˆ…þiÏ´ a_í!Œ¤“™Ó1°mL¬2ú¥<$¡ñWħkÒt7Ó©WXwdÃøåé“ÉCµ! À¶`¨É¡Õg™ÄsT~Tr”87Â?æíD²;!ذ(þãGg¦úz† Xõ•‰aÌ•Ž\“_Cx ËÔ¤ç`/X84…§Ñ8feùÃ)–gÂÎïTIvì‰Ù‹¨b…m!ÐhNQhïÁ‚?#³‰ãª›±5øþk©1å_£:µiìxb~íñF"¬U &šuÅ6“8 •;*Ö#jf§»Ôkf" ˲ÛþÑ]˜3ÑŽkÔFBÝ’w\³¶9áEØ ´küªÌ€¯ dÕ'òÔ¡í%‚ÂOÎ’s‡óKÓJ„¢e±9}»¢ ÜZ„—*D iÄ X™KrŽ\N8f$x˜HÓ¬¯Bcü‰™ìLçm³zq3#Çu5áv6­fÿ¸h/Ãÿeg¥[‚SÞ [ŽÞêŒÁºQ1Ù£"ƒ\õʼÉG6ç<‡e=,¡vÛ±¢ŒéàÇ+5ø`Ûrû³´¥˜OKeš"¢»+V©{Àº•¦rJcOüU ñ‰^‚2ˆfHa:0p™GúNPÿ&÷Á¹n‰Hú$ýù@‚ißÒ»nîãß‹ÃhP8g„Ë„gêoêÜ“äš Õ-ŒÅt*irÎCÇQ3Â…}Pó–¾ÏjÛ7D✺,›ß.êÒ`ßïÓôŽÃ/Zvü‹y†À¥™~ˆ€¿’5ñ´!ž‘ ûA%ßv¶6 bõ _ý7ت¢(ø¨É"£È`r`2AçÌ¡”‘ÚïÑþzr÷ÚÜeذ#ÔP«jOO/Ÿs¬ˆGº;ËA»vñr‚oÓ)ÃY¥ûóÉÖÙR G2Ì?ξ–Ýå0¬h#1!þ,P*bÑ™8v†¡ rßÇæÁ ¿1Œ,……úÝþŒ*ùg;Là¥ß…ŠÎGRËÈKÄ’:["ødI^Þ(+?Ø|)“ñG‰¬öøvD³C a`Ó΋yÞ(ËÛž’F¿&òL·²E]רÌ(–âRMaY·/i¿ŸËxû¥‰!¥ãaØÕ÷Û_ñòúËÒ&ŸßµµL1[ÊçCë¬DcŸÀœáÙð8KZù_Ê q; €“þ-ÓG|€‡ÒXšÑ]êô¾VplŽà×­ÄÆ£âºß%颯ñBf/TLNEÙt‚àýA¡–ûüfÇOãì’ÈC÷ ¯+˜ë­DjEŽ­œ3ú—+ð:leÔ´DMß+%(ØÒuåÂM?!§£³õ$­ï¶_M6¨’âÕmÝPu»“qßRyöÝíŸå3ÄCŽ%šq³dx+6U[qX-ŸÚDÈÉÐ$Mí§´ …ÈdM*˜ÍþóK¼Ø)«™alo!ðçU ¼¢-ä_°úβõ# †¾^ã êÑÄ‘-“×§ßzAž5V5é=ƒ7£ Lô(¿¹8lÆ|=äá§rRÞÑÄ›™3|Òbù“ü|ò£ê`ÊÀ^ïiTFÖ{qÇNSì3 .(c*ž_vtã”6Õ":’Xˆe³Ç.LPߨ¡Å]ÏÔ@Þ|O{CÕäÑöü•Í»ªÎw†¸®’Mç„eaÖŽç¶‹bˆï×gïÞ7.ß”— g jM9{8ß…9ÌþE{ó\¤´åzZèv8”& [5QÄ» Ç_#5h='^þèåüД]Æ;Ø6„…â†+¤»ÄC} ¸Õh߀ö¯r¹1ؽXL }ƒ–AÀª~ã“€LúôTû×qÞ:ÊÎÝ‚ƒ¥1étÌ—ÛÇqpcЖT%ÅÝ×T𢱈ûå({(7—B;¬Cî e|sµBEog+nQ„À8ƒX¦à!dÈ^Ð…:Çõ·ÃšY}›!ÿx¬¹1]»tRêÁÂ,Ý­Nƒ/ç­6IÚºÉÇ&­÷FÊñ_‹±×aWn"9æõMhÌtWÝ6ü‰7û ýňŒ;®²Î»”¯¥úÁï<Äå¨Q¢:fRˆÌÍe ÈRNÑüD“›v«ùÞyÞÝÔØó “è¼Gš•¨ÝÆ•†øÎË|~¿>~渦h©à©äw\÷¼éêqm ›C8 )$ë¤ØÅëgcå}êÛw v#7EÚ†U9y©13ðÓn"IÔ\Ÿ•+´ Zý6wȵ¹ð¥!©üû¿¸86"A)Åî8Aš«xó45!ñ3ëÚè F´ˆpÝ)„Šó4öøK EìkC·ã0®ò˜«öòýU^é‹EYÕ=èv÷ð}ïƒ[8“R%ãÉ\ö8¾×ñUú»rCÜ5_¡šßWºœ-8´N‘”Y(½»X°PÞVX…ù®b°$2H(ó,;r#µ¬¦ð=0 ‚cÕY¥FÁLû…Š$¢£[b«(>ÕõÏÌm·&·0œo·vJ!¹Ý+FÛb"Ù 0,Í„•n$ªoýïž‘ˆ,ßË…V©¸LAîdé 3A¹Ó íE‘„M@BÇ ®£ýéæeåað½J×üßšÞ­µ…1c¾ ¥Ê§ 3mµvö`37lHÂþ{ 8P\¦L {g‘¥F·g=ò.…R)<|for}8°{ÔŠ[¢WC¸óUïüÔõ‰,^yššLû 5”)Ì¡8ÛrÜu§÷…ïmŽz‘qâ»´KˆÑ>½ix¶*ñßE9(PãìÚÒ0ÆÎ+îÓðvgoêðSFðèÌ­®[j!®ÁÙúÇ ©4´Í޹‡Ç¤†ÔæÞ¤ ͰúØÅÒ_V$—sPÎS4{\\ ïÚ…ò³œÛYY³{$ èÖoîpŽõ?cm ‡Ò¸SÂèYŬv[…eoB¥¯À›Ã nÿr¯bð÷Õ:ÙׯÐEèÉjé[1íº—è 88JZà’3”‚M¾±ID\’ä¦@x‡’ÎädÏ´h^›+g=dÐ3À´›XNCƒ\2â„0›Uô±$S–w™àNUÝì"IEYãF°¶ƒ:ö7JZÑâ4²nXK]ûCâ2A†•0°•« \Œ§"X¶Æ!ûÅ%ÔÅÙÍÏojF›Ó2¥²>`Vi9Òo(ÒbÐpåw‘A WEÛ©W‚e‚#Ç,Ü ìì#—jM\¸‘9/¸~/8zòM`gæ×šhÞtIfžÙpuÁ3€ÌÁœ²/•Ax$êêú´n¶½@¬ªn4MVPs€gÍ{]ýî“ tu¿5—cʳ(~zöç×è-·mðÀ¤¹óªÝ›¡õ†¬îÅD{‡vÿ¤v:ÊÐìàô·v„o ‰á_½(×Ñ–ÚÂüŠZ&ë2Uå¶.µ;*ý)AÔ2Ù!D·äŶ ¼6tUA¶Q×þqðZ` ÷ŸÊN›Ì˽ÙÜÏŸ%¥Þ_ȶ<£èÅûMÆ+Œ¨JU+^C·gä ¿!9¶U°A²]q·ÆCäÃßâ‚0ç¬> |0r3~ŠÜ—ì¿IÄfŸ80]œ+¨òÁ´qr®üÝ/ƒ9ÔѬ‹ÂöPèÅSo?9cU+ÏãzŽóG\À ÆC­JÕ”\MíHkÎ÷£ "çüc¤•¿~ƒr3סcƒŒù¢Íñ0%ú‡WÜ@¿Š&ØÜ³3£Äá¼zÉJCßwÝ ù5Óá²Ër€ÑöÃüØYSŽîW&Ìà¿Ù‡Q?l½E ‰¬dѤ]|ÊilGù²18ßׇÊ{ñ˜Âä1˜Á#}ay­p“c?o –Zà¯/º78½àWr` Ïíq<³—é‡íYó’!‚«@ÞZ£ÚTis6Ê×,_ï«…:Rda8´Ô_’vxþwÌ[ø5"±®acÕÆ + ?+™|Öì£_Èõ(ÃT[oQ9fQ5[© Ñ´ŒP¾–@y?)6mÍÁÛLñÓl¬AÒ§Ûª=èt¿ýf$½7µ#Çä¨ßÝÈVéìÀz³øwÏû›ý¹À¯ä±Í¦ÃF_¸ü›` ^›–dÿqîä–Ÿ«¹®lÛƒœ²nVúæz.à´Pü›ùÛ˜W>©2íÆa£(‰Ü©YJá’á‘v3zm’`ãüãpØ:/fÎÔòÁ½H§ò“# I‰iÅ` •Iò‚¾C•Ì|oc*lx·ÞhŒúÌ»U‰ïŒL!Øšeܱ˜eG\çŽA¯„yåb :‰Ód£Öɧ“­Á•†Eo¼—A £Üè+`X­PÍl(ô$Y¼ 7ÿÁÔÕ“ÄçkjaË,îl,\ª`[„ü«von(¯»n]ÖUÀ,×.óàÏÛ˜¿5‚¥¾Ý é45W\&:WÀêŒ̱1¦8%¼hñËÁŒ¾\sGÞÎ),¾_J°ö°¼=¸¢"Ý‚pí±ƒ-^d…@™ B±÷%ΛóJu¢MìîQŒÏE±È,w  Í‹¹>F“i\êE1‹¼ÑuÔu:Æ×È·ˆ¹aÁ.(_/è†C9þQÄ;–þ2H´ Òjƨɔù?Ö9:Œí‹Ÿ9UjYämÉrÆuP„ °Ùq ×FPxv ‚-¨THú*ÄÁyî{—!ÉM-¼™¤;D~…±.x–grWÄã+kÎrù_×¢([Áža-q4:ŸÀ³‰L)ë뚇zg‰qR‚KïìÈ÷å×9m]úQ¢*ù)Qƒ}Qm˜d¶¸›óyqð9.ÏM)M#B’‰þ,j:õÅŸ£µYm¹ÝùH”ßšëìþÇÕ;8ÕéZŠPpïaÕÁd°©zƒèã—«€†YÞRžºUSÖËgVçJ ~| ï ¹'¬?~„K­Ä@5s·íN©%#‚ŸZ„“è`‚ãhP^Žˆ‘NI™~ñHŽK5Éœ»· 5Î1<­•9»y…t"{"U?"‰-QSM eP±7ºœøÑ—ãg¿Ç —ëëðþóÅ£rŽ»ó¢Å¶¢2”쌓¢ËDéàÎ(´n s_Ð4ÌóƒYìØq‰öÒýR¸'þ@B(HËäÿWG_Ûøšë­ÈöÂ3>ä,!”k‡™U³í6ŒvçÝ1vYŽßLúEÂW%'C"—¯Lä •úD#’²K”€;Èš‹!ÌÑNæµz¯Ì鮬‡­F±» L… !}–¶Ì+S].)‡mH^a´‚FyœB¨5=F¦h{j–À*¥ô½£ä D)µ-l'Îö? ‹“máAWYÃ>Øä¾á™e4 l¨­3þ‚qbg1ùÝ«°ð¢ë^TûÿÏÔ»žG*Ô¼èλ7¥=ˆ†ÑžêØw.·‚Å ¢`uë²äIqŠñ÷ûÂ@À‘œ¤“gD¥Ô^#Åá`ƒSýšÌÀ×#z%UÔÖüŸ#‘¯érÔ2_M$щ¶­±¦¢Ó¡_ ÞQR $f ƒÖÚÖØ;Üœ:†oà1gì9½§7›5Áæ¢ÕÖöž¹Üd·Dä’·¯étœºê0¯ä•GZ,Íð„´öD.Ô!LÞ‘X$áXÝZOô »½þÓ´•ësj£æÜ7–£³W¶×X04« Û7fÌ^±Pn‰ ?lR½`Æ“y 1bK*ËQ\È]5úíGC<¼Gæ‰í³îååþ~¸@.µzâ+TDÔËR,K‰þèmÀ–¸?Ò=ç1¥ô•Pÿi^4žF£ªŸküaÝ'Í.§›Æ€¥ãœŠ§>’Sy“¨ðènÈçk0‚8kÙvæhªôÔ‰Ue¥6öSÍÑ'K`lK›h5G0°ëS¤ú¸%JŠÃÓFY©­L-Þ8°yûžËs/lEãÝfŸÆþ!xe+TßÁUèû’AP*$.Í~Æ(¹¡Ø.™Ü¸¼ÜEI‚t!|ú =,ÊÙjdåKUÈÌšÇð³´Ó´$™Ðï–Åqù‚ž;™|\$³ ¢~LËY+àO àôœ[4€‡úPCâГo•3,ÄiS¶1HÛ xÒΑžq^5Š=Açf”HËø|HÄSá«)ΣœiÁîï/«!ï—2Ê^Ü/eÎ :ª'ƒ 4 Òwõãî«IK7ÂzŠ/,L=*ÍÓ1ÃjN¸Í#à³°¢|²ÆæQBI­!j—àŽTÇX¾9 :곘Ç ¶W`c ™WÑÛþ-pœCÓ£ÑN'Dï*Û j#ÎõvzSáã‘B† v§ÉÚ S_6ã´ãëß“›F/ËL ³8VÆ"^­Qc¾ùƒ–½ Ú‚PÈìÕ¬b=Ús°0+ ¾Qy8˜‹^Üÿby%Œm'XÆâIGŠ™\íxÜP9_Ü 5d MFN8ÞKÜàüßâ Â̺Ö'‚†¿¸j º†ÒÖÓšôÅð]´©ÃÊ ü./Lò(%ßP›,e*zªŽ)¢ÛdOô&éöÞïôU¯Fnþ¤».96ÏÚª¿þ›4„ÀA¶¼e­xºý즃³×ówƒa¯RþI•¼ˆ8’ç}sŸ-Ïà’uÜûÓ XL{LL•ì†b0ä×îJÄä#n¸·« ÚK é ]³óg:)52çN“¾BÛ&Æ&‡3;7b ò†D6;—Ó³*|’ gÇYÑ”¸Ùt[TÃy=¢É¶bzÄiÝ›@ÑJ Ænšg[ç¼7 öÎ}ýÑÇû>šÙËLw[KÙŽ|¸¼j†µ •Ÿ&»Zt®¯³ø¼ž ]2i„Sj™²:rû3ßu©™ŒsÝãaLE¤Pë fæ¸<»a8å’gý6’5á^»:MšæÆ¿GàöÚܬ­øjäê‚Ý"©v@Æ©KjœÂ(Òø–8¹ž\A‡Š¤%à™…y›§æs|Ì"ç:Dâ­(s˜X¾-Í·–=˜}ýPUI‹9qˆ"f}oÐz´Õd›îO þ¸'O,»ë^XLÈÌ€þñKŒ@oÀYÑùÜ A%]Gç2 cúÏ[y•&Ã`(ןž'…2ãýS™mSÊÔ‘nd›Áô"¬ð%UÒÁéÿzÀõ© žäÑNNÞ)®ñ—“8ùdgGkͤ¶G¦ÉÒ¥qÉð—žÄ!úÁ7ùD!µ¾yâ›"h¾RUž »–îC&’¼ ¸~Ð(m&½-…\EmɵºèBT0tžM˜ÀšAb=ÝÂ¥/õút#bxÒN·¬;¼O*¾«Å â/Q¶'}Ô‡¹ˆïˆGˆm_ð©¨ÃPm§:àrgU…[³Ò÷bý^ØÈt¾”ˆå.ªu¤_áAøÀ4kž]ÀÒߨ¿Œ>^j~¹˜˜­®Â}æavX="Z1ûï{~1Ì”Ö1×H:=Ìž¯Nx³‹Äþ×Ëé`d[b¼ã«èþÑ –¢Óx{X:º¯û‚1ÞÇdSâz5·'w6I}GÌÚªª_Òí¬ý~,B¨sYó²ÀnÎðãQL2K›LÅžÿ•=ŒéÑXì˜ .èì —â)s s&€2¡å“ìÒVþ"Hû*ôæ´ÒÁ¢ÕÆ]t³ÿˆHj!M’ê×4îü]o§(AÀHœ2V®®gÛá¶ J²š'^²Åj ëj〯Ȼ÷’í¿+6 T.M¡¨ÌA6{ ºìÖË‘±¤Ÿ vݶÖHjï#ôPþí dºða–Çq®†ËdZÕ0Re˜¼·+fl,î¾Ñ" «q“Š•zu«µYD1cì1Ž/Ì7ñ3Ì6)-«Å+Ê.Zý‡\ùø¨×œîNç+ÀîÅ&Ïh‚¨-È®Ñ[~1¸t( èá=ßÍ×ÂæèþáÓÓ­“Ìâôu°™[}vþ¥2YÖâŸÄz*Ð{Z#ßdx#Žn^ûªÝ %‘ÍŒ0U÷xGˆ,Týdš &hÊ¥–|ð!DZ¿[k»÷ÄÌ+Ñ#d„[؉ÝMm+ìu},ÊÜv0ÓãÃ7`®ëD«ž”È cs—^ Ã[ï§ñ¯Øª¢pÅHÑ+jã+RàHq]>À¨¾·í[$)CqG+èñÃR΂0½2Aq”uo³¢´ÊÊâ.®Qæ§æ^²ûœH»¬Ç3°ýŸÇãõ#²ÎØXç;Fe Ë~ Z˜³8ê3ÑûÍͪ£›£¥ù úµƒ\}Óû¨½b×{eÕ0aDE,JX.¤Æj•ý7èAÀ:Ì~Ýpç_Pk¹¦tK2·9µ­(Æ~[Ç—û)"¢V€TÜçjøË7»•”ƒ¹‡Îs@DìM5D[ƒt8³vXxmYV¦ÂjüÍ}Éh¦€bÀ@my5Íz š?ש‘ºþQU´µõH¿Ž‚S¦ª@§‰Ð$Ûºµi@í±z¯÷Ûΰˆ}¿H7x\JÏ"È£Å÷F0¬“i$øøæñ`ãÄ;̦_?=†Â4-áÑ…)T=zNÕ_ÿ•KÏp™2 xý6±|wnXÆ\O.ø÷U‹. 7^— žGœcb¹ºC$—#'ˉ‚KCâ¶-±.š±ó{  ™\RIµ´iB"ß“Þn®Ä²nz9ˆ°=ìß´=y®qŽ+*mðMlYZßRòzÀŒâFÄjÒý¡7†fý\Q šìWé]s¯¢÷W¤¬6µça‡‡®˜Ä£ M7m7(,_æ6¥-Ãr¡5S¯òl»RŒ‡@Ô+ hÂ@Õ™n`²y¯5#Õ¿þ·î_Ö |2}`Å݆¾… •¾tÝ–º ¶ã¾ÊšDC] å,Ç9+þY;d‚F¬°Ã›=õ°ê6ˆéuä2… ž…饃øi´)‘Ù.hÌ„ºâàœtA°ª5³ÚÝC¹!ŠÇPs†ƒJ,]¤ðm Étæã s‹^ÐóݧQJm§Ò`—ÐMo¼Ü¥h9õéRL Šæn• ¬ ’{UÑq U }æ·p†‡t—>PéPKJ´ýmɲ %JZâ?Æ8\º4Í¥w ùý±ï€É5í@Öa0Ä›‘Š´o¸šÇë_}§ôWGÜÛ‘“ 4ư_c³ÂZ}ü?Qw¤Nö¥«`ßÅw‹mD˜š–UVÑóã•ó‡&º@‘þsª>; ƒª¿+0® Šd¥+ Îüf‡‘´~•u³‚ IȶGöôâ1`UÖN_xíåY÷,%Mg&þ-»{ruçÌ¡f^µ 9É‚mUo¼Þ ¥ñXè—&S¿ºANj øžæþáÑ'%ŠPÐÆ0~ך¥)e ™g’NcŠºÒ¯¯Ü·bÁŠãrñš5sÄ€3Cá%âVmÍ7áMS‚þß´9¸—U/˜c÷Õ<öº@Ò[yUqëÞOg#WðæztP;ƒÈm›TLž¼;0Ø+p±ÂŸeÆ>*Ë#œ&1a7µ%Ͷ7^œèv/ΰÈÒT>øvË'‡3ä)^RVÈ×ê=ǾÁyȆÐwî î2Œ>` òDÑž¾7o< ¥AjÀ­7-_âTÇE•Y ’TtY,©iÿ—#xRìŽúpãIÓ½ªÓFɧ¡¯Æ•ˆšwNLŸÎ<»;H“5R§~î]A(¶,YùýX3"n_çE^J%-ßIë KR%r@®5ƒ¼dÚI­“ùó ð³ÛÖø·³àDo Ro¢ ¶ TP¢ñb°¥³ºªåq ûÕ”¸ºÂÑÏëÛ\Eüc8\¬j$ `ؽ*6»•Ñ¿¼¡øoÛ~èÑá+¥7C˜sOlŒÁ½%Eýä°BáüF¤íQ ÓÒ,¯Mì| “ºq ´4-éüå©ñ0ÆÞ&¬ùÀY«·?òh_”¤³E–i‡þla9º`Åb¼¸ 1¼8\,/R»ó–†¡­[²üUáŸ|]my½Að‰mpÞ_oŸÜ¶ egü'Š¡w€§ÉåÈN "“ a ¼–Ö=î»°c†¯EkK è†kôËÓh-;ÝázR¾êES¥¿*÷Riy‰ r§J€\'“¹q¼£™¡:ô«Ñ¤‹5çëì.Z :Ê9õN!¢Û­*DÖËNA7È›&†¨Ô]ߨž`x›ãš/ñrN§ŸÓëÍÎNÞG`n{XôÛ.{#Æø"IG±Ì–ÆkM%^|Œ~,f "Ù¾²“ž^ñg±ˆ¿rZey‹º[ q>:ÑdzçÐ×{"šÅ&ù¾ó êl9LiÄ\%¿V„ÀO Q늑þ+i½°’5âŒ=¹u<…‹°èž"PPÅù·uIåÞYÙJÏKóq°ž_†ãØE”.bOÙbÍÙµ4ª Y‰q>¾Î€/ Ô ¿4K Þël uÑ’\çoJ= Û‡0\o·óãy߬(g/ŽßaÃä½€Ñ MpˆþAÀ–.ÎñQÕ$‘2áö«€…¢ d†W\×<.jƒŽôßP3º°×Àsã0lšªÜ<÷úqpcæ¿9Í”öuÕ…Ï)¯ï#ƒmG} ªòpйÙ8{ÛÍbCd†¨Ý²ÆÞþaïoí º¼Ú6°A`UìÁÿ^ü¥UŸn¤¨éÑë’K]²H‰ *¢÷øoЀ¬=¿kî~¨vä®ú¡~¶Â!ƒšwT>®Q2 ¿¼íZþm?úå<;QÖB7oÒ ¯æ%í\yÙúyÞ½Cž„Tà×WRµ–ïêXÃ’©Ú—Ëó´¯ïDäjQÅ^Ä òôðå*)€âЭf¥í~ðã~Fnª­âÃÁ´wïŒÚOüžÈèÆ›8bA¯©C¨- )­Au˨Ò[3ÄHK8±-²ù"°éÒ*Ñèi„myéS’UýBæ‡ð‚Ô< m´Šh5Õ<¨V'vp”ÖÆã¯!ótè……•8»&©Þ<ÂBD™îK²”FѬãÚ™3´`*¯džÅ»ò¼ûØ2€è‘ šI¶a}ðâ-}†«K‚¶/0œ“± ç±k;|̃¼1ûœyÙú”ÿ·í «ñ>,Æ@‡9¢éÄ'ZÚ¤…e1 Gâ=?¼ËÕ lW¼µß¶Û;ðŠ ÇêP6RIk°í&[g_q·•ÂÈ‘øR÷oxgöæd–jÝÆ^E8õIð=MŒ ÒƒÝQ¤5Š'i0:ôœí¦Ñ6TùÝïÚŽÍ˼=‡?Ç*þð]—=O²ÆFÆz.²ç§,è×ZNK4(80¼Y=ñT—Ÿ ‰ÖeŒu‰åmF7’zÞ³t„éÚyÁ±9$@“âi@˜§vδ¦¡:·^ä©l  –g”…pk"~SÓ}iuVÛJ» ¼@f·µFó‘ԮƮFÃi»ßX\¬B—J|a¯V 5Á'Œe¾½ˆ ¢ÛL˜Z䮸¼ëüŽÆ%‰§d‹Þ˜£—ÜLÂJÝ=rœ§)í FaKØù¥ï^œÜ…Ÿ¾AX«P5 C´|YÆtdnS.|¶‘v@ýš¦z$!2Š˳MÉX mî6¦ÀÃÄjø C|ƒ¶€„QÇ\°Žò“#i7 btâóg<ÍÍÞöŸÆÍŸ$ËQGNôX©I¸5ëêQëØ¨ë7×¶R¶¦JHõå[بfª;·êê”E¡jNØ怪ûíäútWýT†›ø()È•ÑrêGCMÙ åÊ|U3E«0: ŸäøõÅ-÷zru²&‘¥ÞÊ1KûŒTs @Ö£,2d¾z4 Y[o²$Î{^‹K!ÔÉBcU£®Y麞ë,Õvhñ¬p/-ä¤'m›ÊØä¶×ÜŸ£<¦Íÿ·å@‡s–ö4¢²ƒkí±™$bı1MÙå Tß_YÀ’O *¸8×åñ}æ· £Õ½3`L0_ÄWöÚÆ?<_Æö?©sØbzßÈYÖa0u‡w(Îß:Ðfa†×¦Ð ¡‹ËEŒK±¤ùÜa't‰7ȸ»÷ÍìÀqý®}À> OW‘¯ª×)ƒ¢»Ü˜xø¨é5†P×ê÷TâhU­¬ ˆŽS¡ xÜ—œö.ɾ• ¸¼u‹T|Å`¡LÕêmoCÒ&€]þ¾v™‘p£k[(@Ý%-ýôhÏÔª2XQ/Ls\%õóS¹y0ýªQ g)HÛËŸö(^L“ÚÖ’ FÊ©»¦ÆŒYiôue¡© ¥H•ÁsxóòxºR1%1…¾ñ+%æÙ øÁ»ÐnL®ë¿œ?=žô¾‡>SÆvÜ|®ã½Ç° ^’4AŒÄ ¨š*JËÆ®cà™Rô±!GHȦb˜1ã²yÕQÆk‚•O\P8×¼±ÀrXš‚—É\N]¬9¬T\w&O±ù{ú» äJÙ`´gW0ÀLt¡UG8û‰Ð•k­‚ƒŽ”rv·Èf*÷H6òï›*žÉo [Ìäö_ š/þÇÅâCØÜè·kïk@$·)ä—VÆVTž|I»Ù´Ë…˜OÄ.Bµ…¼fÅ"ÿàõa€i?ñÎI¥_ß–¢•µ?éèÙ€™h"|ó±gÃÄ š‡¤ï¨xì±áÐ8†‰Ÿ§o¯«UÊãZÂ0J÷…µáª¹aª/E¹ í;¦–p€÷5t> stream xÚmºePͲ6ŒÜÝîîî–w×…³°…kÐà!¸»www îw‡7ûÙçìóíª¯î?-×Ìt_Ó÷T×ÔP“Ë8€Àꞎ@vfv6€šŒº<;€…‘šZÒh¶vI™€- 9@ è`çp°±±#R$=­-­À:3úŒM;sk{kg€¦ƒƒ›µ™@ÈÍÍMÌÍÅ•ÅÙU„åï 5 ¶,¬í€I%eyEY¬¢@:›Ø”]Mí¬Í_­Í€  =ÀÂÁ`÷o`æ2·þWL.,ÿr:ƒÿfáì`PV—QRTHK²ªKL@怯r‡ƒÀ.Ñ@3°õ¿²c€ÿ#Ù™üG2ýô¯³Ç¿%Dvv€¹µ` ´´!²þ‹7y…€çßfsWÇÿuý Èåo|º¿ÒÌÑ®vvŠ&ö@¤ƒ½£+è Pp0:ƒò`“¿™ý/ÌÄÞÚÎóÿø?ˆÃÅA–©cfçbaãú·ÝÚEÆÚh®l þK¸…‰Ý_¢þ±kÿ½; @skWûOüËÊß}5wÙyþϺ“ùgUV]qyÉ/_ÿSÿ¸¥AfæÖ K€ø/£&Îæÿ1üãV6±þw ØþoºtöÿÓLÀÎÖ=6– Û¿¾ÿ• þ%!áàáÍÌÏ `æä`°s±sø99|ÿ+Z3Wgg üëSù_ýŸj=€fˆ+‹f‚Á6©¡¥~ÒùÓe°ŒÓ“ÆŒ‹ìKzÖýVæF{g„×ê„9îÈ$SßL…·N7å¯(LbÈcãQäß   )Ë,ýªÖŸUrŸj¿žÃhØ›)Â\„_ÓVW•ƹҳþT}v*Æe2.iíE߈[ž»ÉÒÐbþÔ}Gî0V¢O[…䛊>n¯@…åm!_PYå•~sÜ Ó¹Òù|"éÊÙVw`ɽ~!h›Î!ZÿÓkã0XfÞdùó¶õ¸pça{Wu±EùiÃúöÒkœúAtq*&D;!ˆ\`=•Ø4~Ví\ëÝÓw FnÉ?ÂÎò~»=ZJ‰œ›5Rìñµæóú…‰†@×èyˆTŽ˜+ }hW‰ˆ…ÖÄ òón@m\< ÆÕj¡qJYu#cÿ€Q6²D™Úç)øjò©ŸÚ††/A®µ4h·;ýÐß.BBÏã¼êé‡üizo+27˜©Èû6gäq2[œüú}¨š[ ÌžÁX¼Ô½˜¦·ÜÐÿС“5Χ›/uža!O1Ñšà‘ø‡¦³¢JÓ÷Xå-ô›¦§•%‘éª9Ƶ¡Un˜ÐsÛ#·åáeð‘1ˆºZY²ó‘§Œö­DCa6C˜ؤ9uA±ötçu–yk1±VáBØ’Ë´¡•O¦t¢$ge^¤&¥: ËñÌ,UŸÞ„[î3ŽÞÓÝ=®ÂGæ$k›Ÿè¿Ðõ¸1ÏoW‰çÚp?9ù!>ªVïÒv ôõoC?[}Ã9#×ê ã*y üú=úÖ8Èœ\ȇ99Œ¹á#ŸQÏuXp¯¡@¦2„ÉÉÇ)‹ëÛ–ÄäW¸þ8|2ÏÊk*s²»x}›:GÀYürsgÕõñ&1ÅÌ!pŒpUƒÌĸt¤Dÿ5ù–vpHÍ3-TªXò¶Ýßÿø’ ¬˜×à’Ÿ,ùMùÉm¬>ÿEÛìü¦»^Õ’ó¬#mAÁt ”›å'¸± M¬AÀB·?ýðºÜqeX|vÅ]³„Œ”Љ]Ýù)E<]G¡&-­ª¾Ç°9z6C>¾¿®[qã˜ý¬…nV¼)u(¦kñ®pŽ%ñ¯®¦A¬Š/gF#ž3ÄU~Ú¦¥µW¹{”ÈŸ!Ò¦™u²‘QOÈÄØ%g8^Õ_V³³8 äÉÈ“–&8|~aÉ«Œ86<ˆà l× ~E-¯Ä ]ë–Åe¿Í‘Ԝޔ™¨»Ûa·@’¥*J´×ê è$kx;“ Å2öRÍl™<‹7ÎÍÞvå îÆ³ j\®.hÉf9ì¯cû*4ÙE÷ƒúVÎ’eP žêm[ÞcµØÇ6Íï".ÒÄ)nÆYM!áfópßÇôú1ýŸ9ÄìFˆaÂ0.`P—Í ^mx T¦ß=B—ÎDiÇÑm+vû¿ûGXFˆ³ ÐÖ µ¢ÄPÛæ£_e¸c<*¾kkU8qNŹ<$?öô¢,Ù ñó›·§L>îŸ> ¼F‚lNž]=j,·@¬°QÐØi"h ØXQ:Zá+­7Á©j\Z8„+(Ë +$ÌÔ´,çp¾bµÿûUœf>¼•NbBUŽhÜéþêŽ@å:äq’rª‘kJ_½õx$Nåx…¢K Ó‘ ‡gƒZ›¡0£!Ëq!;ëÀ]ç{%~Å1~ûB*cìOÿù§Ï„žÛ<áîßýô½L”¶Xæ“”)€^ÿø^­Ê ‘á£Ñ_bJ”"i*QÖ¹Óߪ綊a­v%n'vÑp²W³çáYbmv:?× @åÎ@6Ó“ô:¶æ˜à·Ub+H[06Ãè_€|Öƒ6¬Ä:s–K”QWÛ³g7"¿U·Zì_ÖšBd,æ¬Dûa·§ìÀ=ÿêzTÕùXw‘–¶±>˜„ßDÔÌkTÙòýàýS%ÒrQà>b%$3ìžÑ™xˆ|Ó$ø€]ðϸãÐR$ÿ·ž8‚;B.»)?t"Î{¾6KòÅ«>a›3z2$^H‡cÚ“qÙ1ý¡—}Å[,ú,ÏDà µ07ùmÞ­hU ªŠ‡~;fVzNÇ"¡F5|Ôüo}ÍÊR!»­J+²‘FU½¨g½MÖäS+¨l”©øò£‘av«“7ñô®;¤¤DêšÔ|ËòKê1FÔ¯ÛÔ¤ô›«”H%嘔ÜÇÒ´Ó¯á9ÁŠÙ$#^UKéBûÇ Rd /ŽëßR6ÈvÉ¿s÷ß¡YûŸ>þ XRq I8+éS$T˜ÐâÍÿêázÑd¿Œ«ò¦ëv¬Ó×[¥ÿ‹èX›ÌÕ‚¸–¸ð#9,E„J¥w¨h)§5 y‡½0¢P»Ó–@íI~žÍ%ákž»Pô„m ›$õîÜñ/™€ I#ÿNÀ<µ!ß`´ªû†î‰ˆÿú—ùmäÓàÑþéìPŸgýçÈ&65^X½ì)i ,¤/Mf(tzÛ"òq2Oé×á'$Q3ˆðúÐ$“=uéÓ#’J?'_†¯…8Nâ ¢nìŸÀëÃãoÿ´ É^ª(¹£‡b((¶š²8 BQò‡1e¸ủõt£‚O&Ø©ßÿÀgKW%Ú>¬ ’}£«¸–±ÿM¬¸†7÷i%=·‹Üy9ú úTLïmÒÞ¶#µã,^>ïw_Þ›ÕI ÛÓUì£â›ÆÔp‹ ÃêÌf?Úv_f’¥h"/“!þ2Œ˜Õõ·›,¯¬eŸ¢\™ßF¿Âä‹j´:Ñ¥vÙ›÷ÙfeÊ«¿±Ú—*7ÆÜW“L¯ñ7o¯>žp‘õ;ËÃѾ\s ˆ —‡ÝMø`½|t±ƒUŠâw?Ø2´"õ²Ó¶FíÝš¿6y6K—‘®½ÖÜj‚"b¦\ü~X4”‚žï¥Íu·Òû´!‡=ä©ÂŸw~oJa2ÄP„¥Ðg{·ûM>‚V©§±¡Ïø¿#Gì¯ÇAÞz°¸ÚâçK!¬œi†è ¿3P†Ü2PÐÕÆõÒÞ˜ú!Yâä$çƒN5ûoUI&S8h»V÷<~XÎ *eaà.fóÓÒdyñ¬kõ Ç•‹òJµAQú]2Ä~iZu+£Ó‚?Çps-)µ( b»`×zGŸ³?13 öZ2-~›É}J y—•8ì'F°!tà„¾ìO­yCŒA0Ü™ìK Øsn<ùèî}Üû™nhq9ÜkóœrI™LÙwi÷:PÉŽ]ã˦ñqœßeór ‘µ³ž4¹‚¯¸9-ò΂‚zn3°ÿ¶Œêp³S€I±Aº»¶lj ã…x]³R°³vú¦i¿€6\lÌ|gNê‹¢“[Å fÔ¹¯jCÑ<¯à¹Ð~C¿Çb8càùyžµÃ%#üÝ«dÚý©‘OJk Ká™ù‚-¨-jÛ›jšúôßMoŸ j©{×!õº‚¿:ßR³ß#aç—K¶å›¶ÔÝÑia1h'=¶_·H´ÂÑz¶?¡ÄéŠÆ„f\Ñ£U߉Ëy¤Ûˆù•*Y†íØ-©k8ovÁþTÕ⃴Ö\Uøb¯Î’dð#äGm¡”B‡9°Òúf‡}¦ nÝdB;ŸÁNhðw)|°¥lÕ‘ŒéK®$Ó¤róïy1Ü6`ÃÙo†BìóxåkJ걜åiÿ¸zU,ÊX^‘,H'„„I‰Ž2ûJ/½Öj~Ê~ýþ“%mÓviàqÁL ÝʦG¹àkD¶,‚«ì®²nk¥øé/JG¸â¯Çy°#!|Þ°Ÿ^ôá4æ_ý¨î&Ñ[²Èt 5±!Ë™®·â׉O ªF༾¤Æ–ˆ ,šì÷bòpÑágûh ©×n:†²Ç™´#üæ°6ä:qæ³f©+ɹ]½Œñ9wXû†Ü ³ÃðntŒÃÝ4 É S¥qù0Ó–!ßýéÃÁ)vâƒt[Z®OyíŒH öè6ÀG’}¨ŽÄ¡Öìm"ßù¥G3 #÷›ß”¼_“­Ø†ŠNpvI9 òï ;¹òg–|c…bKB:x¸€¶¼»Øû–¶ïRý0…}åØO ­‡ 9ZÞhuq£ŒŽæì9 ž[é±Ý”aÜÒhfôžÍÏ •ºB‘õw$W>šL{9å%Ö÷ëßAnÄJÊgÞ"(Í.⹑#Ôˆ–cA8Bï{í×á6’·’ÖÎÛÅ¿ot7@¨”mÆe€ö]˜ì4x©û.L“.ý`Á¹ 3íŽvRˆ)vxuÃÐ…ùö¨ qñd'–Oç>AŽMU6bsQ*¢*¹UvYAøÑ¤öGPÕ06Ý ›p¡—|<Ž¥™Ì¹£xfë ÷æ6»¹6 ’ßÃ?á&¶ýºrî]Cß‹–·ØÚõõa‡)•æÑeÖ?g“ƒBÌÌ“h­íËTƒœåùj±Ç-UUºGÿƒ9ýËC@]¾DÃÁ‹´ã` öH¸ºyådýroÏ©ÿ}Ûöâ6ÒKo÷šB„ôÄÎïoÖˬ`É•"Þh꯼f7µ,Ÿœ2KÚz–wf©4@6:¤ µ$ïáé%(°>,Äm^©A œÝý„&œ¢˜ÀD ”—¡T•y: Ý'jMkÂ¥V_"²)óë\æväwiadÅÌG"¦+c?ö…sýÀˆÕæ‹Åu,Ü4ïíñ ŠNZˆÊ®ÊÌsG|Xô8<¾3aï MD@tdóÀ«aÀ!ƒ–6û]´€ƒbáÉjÙa¨(±JÑÎ5“ÌQ÷ë£i™RôtéQå×#m#Ùµ!®ïÔŒÝfI¸ëa<¦Ê4˜_Ö+_òêàÇNÛâtöãd0zÞb’VÌ/õxaÄã¿ðvš[°"ÇSèÍü2Ñ…#¾¤ðÆ–¹·zKƒM‹Š½µE¶&Wc˜×ýŸk“öåØOèš©LÜYèÛè8Ú6±ÄA-yòø.Èh}`jµ/‰¢1—‘Ž6 ’ˆ¿ÉÝIÍÙµº|ôk€û´Ìqs”G̳ËÊl, eÜÅ(—|§ðÙÕ|Uq…#j^FEÝM{:òN»$¥YÀ>^(cf™GÙ¤2&Àž!“xÎÉ9똾döŸ uÎ÷^¾ ÈÙ¶µœÅ—ÉTœÜÁ ¨ØQG‘j ¤ÍZÄ ©//+›ÕôÿSRíXèEJì?«&U O•…~³?€eJ ßÕ”ü™®ûŠOÇkð n)eÊ$ôÛhI-+¥®KÎ52ÌžœÂ)ìÍí—Õ ë¶z!ãÒVƒŠ¥åž[Û­àÒ©>——¡b†îÉ]ÅXv¿¸k³ÌƸ2²ŒZŠú&@@Ò7 6oŸ)ˆ²Ûj|âýh&©Cðê"ö½»'΄«‰e Ã2X/@—ºø‡> ±ž¯´%¾º,²ù®Úû͘bœl´º\$Bëšìô¤XžÒÂGjPE“£®“uŒ³§p2rï·1™oPræA#¿wK¼’F‘q°%ÉÞè÷%Üøßùs’ëx­`×9ð†="”ÝŒ-UŒ#a¾÷<ÖÕØ“{²™Wî·­olŸ“®×4ÞynêEµu•‚†—:Õö ñ0íýjqÙÍ,×Ñ]I ^ŽàºVÂŒ³zî‡ ­ î,×½hè×"1*8´8TµW½{À çý¦ظíÂ%˜_p(’ù¹Wü Y§?BoØx¶kþé +bAMBœ5 æ^‹0þqj»•ÛÛé3”œ¬•¡.ßo>Òó½¨ÿWÖ3éIoãò×9ˆ*ç' h_²4y ùuÂâio¦FÔJš>Ãu_U¡/&!'¾é°>h¸Öĺñƒ–“üëðÈa²y±Ï3XÀfBnJ:)W™mF>èî«Gx>¡b}Fb#ïö:!…'=?2³G<éØò†À0 k|¸°h ‚Î%8g^©qÀ6 Ù9E}¡¿6ýçtY6Ø$ðI3¬È©¢ÌÞ¸a6»nŒ Giû¸\)…ÏzýIónSU­èO&¢!+c¿µÐ ¼QH6®bZŽw"²¡dÁÕâ:Ôš àZ‘lÞõn4.KåasLalà ͟?ŠV g/yPÛ›$+Šyjp¼õ*ÀÆ+³,uÇô¬»1M$ÌZLŸ3OC­‚£?cð0¡>DÑšÚ•k}ÌïCÕu—­¡lžÏBÔî+º‰[çþ <õ`±¸f1œè”û‚Bém ¹€Ð®-NYf M¦Á0cwªY&Äó‡ÌÄÊS÷cÉšºÛ.)ƒ ™žTšñÂä†”Ø `ö'‘þ¤Vz»G¿¤ôIáW ôÎ܃ÔÏî£N©ikôŽL[µï’K0áV9—oi4*¥ËÂTÅŸóD*Åè#ì*šwN:ÙqKÁ ùtÒþÑD?éðVNhÔ½ý!Ð캣ß>²âûýÁšÒwî­}ñ›§« Ã…–/=.Á£¯ %‘BÚ‡ýü†hcÖsýeú2ùvÜh¤‘ìÖùÕSr%eœ/½+Ñ;‚HÙúýZ’ÚCËè;‘‡ÅÖ1YöP“£Z‹x´#µœTïÒÞâÿ Ã‹Vfrë ÛP®W†¾¦Ks¨TÉUú€âvjÑ öwLM¬®ÎëbmÒÖ…‚z ]bJbv‘ÉÓ8²Ê⣆ Á¬í'SKéÓ"ìÃýŸu©:â½’0ˆHÇ?ØJ/È~°Î!ºL“ bQ ¨Ÿ€TáæÝäÇNÊžöeÖÅ0‚ÍzÐáYR^_Ö!¼—æƒ{wò3#Sb§öÜ¡’&ÆR’©á t7Îó@×ëøK¿8@ä»@”¾+4Ô{QºN/ÌUé"ø¿k?3Žðà7MÁ-±fü$ÎíÀÖ"]šÅ€ïÀ݃{.é±#†Ÿ¼î¨Ï·¿u4Ñà£÷¦Hã <­Ä%;4ÑîÕhsÐ%tç)»œa~ C¨ tQ»hå A¬©eh…1ÛthÒ@QÅ-¹Š•’r!³š‹C|óÎö¿¾£áp"ö‰^JÅ“Z…zh½Á•ÏƳ'‹×ÂVÎÏA°ê{ÂŽeðÀµL°(U|XàÝ›äR®nî9Âe;bm‘û—j~Iòõ“6†œŽ(tî Uš%¬eÕÇA>ÿ`Óí´ž\/î•”féê1î¡Lžõ8ÑÅ/žÒ/{Ã9fH]bÌÏêÔÓmíS¦¼&}nDx0ˆÂf ÔíÓg°Äï\…ÐÄYð; ¥à×þ›Z°EûêÑE1'K^©$Z‚i§O™îfVRá*îÑMIgå‹ûcS yY P“—Þž‰…ímÌÜW´~È¢´&â|—´>¨f15Ô¡Ì¿©½6UÖå›wãEa-% W·ÒÇCÒPP#Ò(¹ü|Ùµ·tÞ?ô0®øÖÕš€¹ƒ8¦7âW“pTô]ÔVÆ/^ kk#òlFøSx˜ƒ3'!3¼“ý§óÐ6ÛN¿¥ªRO‹*zÏÀÂÐ/Ç!œrÛÆ«‰£äwÉG6¢¬7¥pqE“eÔƒøZmŠ 4VŸÞ1™p»¡Ü…¿0Ý#öK;‚ÒÛÍœ-†»ËjÓªšÞZ«}Mp“M*™D3}íí7§Fjxe˜„û¤ÖytY䃈tzcâ=¹Ÿ :qEeç'êéd†+0] uI‚³˜ äO 5½8ŠÇ¡:Š)dÒò®Ì]Ó²HÀÏ.àQw²!}/"÷ÐL<·Æ¦©\‰'½jT@Пa2ê#(í²s×Ze2c•¬—ÙðJÄëÀÍêˆí\€€d`›xÝyš—wôŒR„ü%B:t²ö*›¼ 6nÓÙ˜æ°è(‚l?¥ïŒÞWÜ•þü5þ&ælįB¾+³’BÖb”f5Y.”†² SKS˜’ã—Óìï?T+öÈÓ˜‡Q¼B½`x» ‘!û\U<í‹10ÓO ØQª‘!â]£ýÜF7tÔÌPZòÚ_‚ø#jQ—RN Þg>f(£ƒ¤n—5˜km½ö‡?ã ‘ ƒ~¸VžõÇlðçÚhp1$ß q´“á© Ž-òÞ½eã2“?þ·Å7Ô1‹Ãzô]Ú»VÊb| µÃª¹Ú¨ ÚÈU«íšûLêæl¡g¤‰õù¥ÊÂ+‚"}oÓÿL:L¦½Xoí ®Á„úì°((Þë^ñ‘™Ù¤M9V:oÚ}­‹Ï¦¨ Ž1¿-OÉAJþa;ÑÜ”8" ïÛ#í%Û’£HUèîÚ%ÔŸtU#¸9¦rõól>4«b±Ó%oG±C;'r‡_mwírmk–]àa¡‚ÉÖ¯u’Qy~Ær~‰õn¾áË/οõЯËÚdV  ÍÑ;Üö$ /Y¢t0Ð@þeÛ…^(cbF´ B™*¦²ÓµäíЪäsó©'HR ™tiüôxÆÜ±úåe‹/o÷ld¶0ëöâKH=ô¨r\·n‘Ú†ñ*¹¼¸‰ í} Ùr¦~¹Ú¾æ6Ètçvö˜*áé?r†Ë9ž¸Ì¼L¸hr…L»î¶Žhþ*¶²¿f™™*ù&ãú…l³ØyÙ÷uçÎ8nMöa¶ÐÒ=Ḡñ$Ï*ù–«¡·{Bt‰rÀ ‚´\$:bètê‡ÔD;[!–¸RGácN{,t²MÒo÷kÏ»¦8i»¥ZßNØÕ•¸“ÿob`-u)hE©°æx ·ðWŠƒè¶d¿†°xG¬#‹ïù›Œk<ý„¥Jæh¦ªÍòëÚ]ʼn~)!¬ºN,÷7¬?»¯VR`*Zw6û+õØ“œ‰k•jñÑŽ‘˜ýKæËq*&Ø–;ãø%•<®oÎÇ©u難PH7Õ% $÷¿Iíh Ä‹cÛo# ¹ ¹ŸˆÌÝÜìV+×üúk30q©l…³`7úùK¦ÿÓªìú¾ÞÐpíR •xf?1~Ó+i·xD²`þÄ "ÖZ×Ñ/ÝŠ ûTW–x 9O{êNýL3ëtHaqiÁ¿O޹ •_(£mT'1Å4h©³JSÓ4¥Â1[Q_ow î“ÓrªàåHb‰Cc­Z‚›öàÎÛÁ÷÷J\’ÔsÞÐ*ZçÙ—%]ÿtÈ>=NVï>ßMûn̘۫Ëá^ïóBü¸<<Êp´¡]Ã`oò$·ŠžâxJ,OÐröÅ_Võ)¾›y ³~kO¹äOB.0An‹07Æ7°Q'é‹§Zahbϰäñ×nÇ‹}ñ+” ¡‹u€.sû[ïÐU“]"ý¿¯!7B¬G!$ÑNÀ™<*gK'š³OÍMÓrãhºøƒÌ4â$Fe¬%»fºk²*OÓx› óoÅÃ×éÁA-¿¢ñh@\kZcúžÕ`Ô×ȼ„„ˆ ß;9Ûç€j!¢ÀÙ':£žD­kºÇÂΧ1¦Aç©úqPàë9„T­áÕç›/M'ROLî®–ŒB,ly~߯ʼnxÁ‰(±8éêÂè¤'ˆ ´(³©Ök¨N±£¤‘:ˆ£©à˜¢8ÂóÖ¤›žÌrî ØåŽú•™ò$1IP…yÏð× ®¨Q¦Å·¢Ã‚ˆ(PÌdzÇ¡ê\Ô¥~®±RY-Z-¾ŽÂ Î.uÓ² –ºýwE ©(#?r±¾7¨úŒÏöLß+ðjûÚ ŸBö :Òbp’¯ÔSó­ÛEúGš…3z—±l }M¦´’ á.ã-·Q($]šaÓH¨³°ö}‚fu†S'*w~³Â·pµ÷O‚åkͱ®êìmV¡ÜÁ +üdHƒìåA¦‰ÍGW5‚þn°ÏŒiz-Jo™Æ%´T;Mx„ßÙcëÒ¯a íê@’6N’s{w/(#Üs§2níǨ›¸eµ/ôk¹ø×…I?^~;ÕŽ‰:|Ä4ܤ L7D4ä3Ð+O›œµ[š4!¥½ƒpÆEõ·ÄãrÔŒkä“è4ÍâÈ1jö'ÞÀVî2ýýa“Ç‚õŒÏ&ûlL!ú‡Ž{–—c‘œË‹z?FË6ÔÀºðÁç-Yª•(åQrerÚ?CÞ^zƒÿÐ…£CD·rÏt¦”.!Eµyÿ̆«ÀRîÏj…¤îgb4îhmëïT€anÉæÍÜFŠ—n¤ÆšÊB×iŒu¨Ë픀T!&O‘zë–æƒ.%ÐáC6 ÖPê8ìü‰ë#ı}•JJk{:^¸ {PßÐÔA»$P’_Ætë â[5¦ó™¡‰5yÝ3§ûªÈ½ÂË_ï§Š7è…?޶÷),Ô¡ÊÓsÜìœØ†g-ëj@Çf?™´M7Bü½t®j/5‰d°%åŠôÞA¦F yXnÓyüQÇ3ãgë”iFÛ-P¯A„ËÖ<.™måªéç^Òsk ©•üÏ’0¥Fõ‹«©#<Ê]!,«“G P‡›þ­ˆËÇVà:ÛÓ|e.óTO¨3=èèFÜh¬‘X°jšÁqçrÏHl ‹p¾úIÔ=ÕÐxG©×åžØ+Ìg›þzW°Ó;ý‰È‚ºÀyÚí+þ]{&Ð-+öH¼BJ ‰wviÃà¨æWP Ouˆ£jPúPl®Åcœñ ™‹p[Òÿ0­d4m8]9*Vh\­fªýÖ9 ª­¢Âµ5§]Ý2M°.3|±X¡s‡¤~þ–´J JÀ6Í"žËðL¥ø÷˜lxݾh’j†Š„ >)„= í!‰p´åÀK2£áN¸\û”r<ŠŠWAv\Ú{ã´“ƒ¦æ T¹žÈ'ò! ð† ×oá=daÏšvk´¡’Ëæ³ì¼:7]j´¤ƒ’>ZFÜqp|ÊnŽ›L¾[ƒ¸]ÈÀ(‚Þ+AíÚÍÞ-ý Óp Çxa7‹ã‘O¿¬,•û¾­W£Ý4.*™€òån®xT°#F¹t}G€ÂÕ×Þ'=R ,¨6õ)!š%fýéœ}e)IîŠÕŒ=ñÉòÄR±÷"œ2šTž”“Þc”ê94êHÁëä, õBñRmh@løÌE•,)ò˜n¢äÝ· £…›Û¯oˆÑ2 Ç?º“ÚõþÁZ¼}>Ęš”0ý¹bÞ“Ñ…Â4&JÙЛ¯ý¸ªž%·åL½ÿz5—¢ZW˜‡áB¥ÇùŠia¿ÆÜ•þQ‚ëð:ðƒ2·âQñy æ¡uB"]6N/_5y$gÖ ¹2£™ðÌ5¢3öBg]‰ íav A1B`ÐÙ—½C}F9ãõ-ÉR?rbÀãMˆtL¨NéÓ-Âñ}ÇOd•Fˆ YŠðQNÅ—Ò¥2‘åò÷`“ÍèÍâ$}>ºXw6ú¸q…}ÀQâk³â-ŸâÝòÎøðctÞ?<6s5ÄТ¥ì^"fRaGÈé³>R®·kduÚ‰Fdbùq±ÂäYLhÀówfïR%ë6{x¿¨¾”J\€’[à?Ò¤}o¡Ôèï}}´Ë©ë„¦EÄÿûªÓ÷†~T`(¾îãžc­ƒ 9íè5 ʸ¿Â¹%ê¡Ù»"ƒË…ÔNs±LàOWW.æ4\=_ç÷á´ýf¯ä€_tnµu€ÒV°s‚þ}Y¬œĘÁTua„Þ*Hd8_Œ%ŠÝÿØÊ°;gÙ©Ð’´¬§f¡ùÆÚFƒÈŒWtü: Q=)_ô cÚZ¿Ù—³Øh%‡ˆ%œvº+†úÔôœ®·è¸”5~_jGèà¯ö»ìÕ1Yaxöͧ±²_5ëÞ™<Ì ÇM<¡^ËvY]–]¢a_+ýŒ#¶¨•wta)q¢òÎÖu ÂéÕ§O¼c ¢¢B›O\¬]HëFr[²‹Ê­=Ï2¥Íb½ »Ó®¿!‹Ügÿõ¾¤ä:<<ÊÓ£Ò'îÒDd£EÀp'éëÔ·¥I“<"¶½Z=ƒóœà&kmåÓ‚a= 3ÛÌWz¿…¦I2jâIˬÃõêqYc Ìhý]Ø4|ÕùÕFÑ@£-â“æêªÔVmŸ˜¢E—º9fÈÛ¨Ïë•jG:'›‡¦þ³Ž&tÈSJà&L#)7~)=ëï•ËwStï‡w¦§$¹ý›©¹õÜí„;‚|`r“|³G¸huÁAE—Ë}ÊjÏð«ÍÝãŽx¾¿û¼ÁIJy BØrýÄ à ¦xlë´5Mᤠ­º—¾£²' Õƒ>´7þ«ÖùÏ;]–æ{Æ•ÊnÁgÁ. !æÉß`Wæ/®(|ð ûW"#ÐG陣ËAð¥æFWÉÚš ³ó· w™Í:#dœN9?ˆÞÂÇ*`¢þÎ̽Ývž‰/ý¤Ò|˜SÜçU t*¤¼‹á1†Ÿ8P~¨=8òجDë[jþjë°›üi9¯¬ÔÓ¡]EUS¯ÁË®ò]oH<ê¸/¢éF¹ÎÕâÑ$ê4Mà{{¤ŒºÄÑÈ!¢õà ¤×eº†@L9éää_šRO•°K#ˆ q³J ñnˆÖ5°g†õwSƒ{ÈßüñÈœ8x0ˆ¡oDra§-ÛA$úSûªÁøJT¨¯NSÏGFõÒ•D«Þ.Ïü,§„HõiZòŸ'oÙ°Š|­lÒ ÛÝ´7x LèÕ›©ÎÏ‚üý¶*êcŒV»ã y†2±°¤‡tª'VQÏ[·ôð+’’ýje a¦TíȾ¾ú³°|gjâJ$K“ ?2p+Ãa‡,‰K°yÒ Äu—¶„¥CiwQ…³ÊÍŠ¤S¨Ü¸$ E‘°ù2ÔÜí >Åñ>gµØÞ󻲓Ýõn5¹±íD‰koܸ¢èïØSF3ÀKºh½‡·}'ñ^±c²†V;„1èT·¾ª¥¹½jü¨¾‰qå}C …Å2ê;¢Ë/m"ÖIê|X,#Ÿ¦t¼®Hã• |0žåuÐFòŽÊ‹´tuŒSæˆQ‚D¶BâÄç,DŸŠê<=G7—fôc‰ˆñ׳]“§l!­c¨˜.Uă¦Ÿ gJy"ŽKžFø}Nü 8Tù$Õ†3€¡ÏÝHcXØJö¡hß^¢K7¹®·#­M×hŽ œ"ÎE|‹%JáâR†uYn¬ÂŸÑÍüA¬'G´rù'J[G¹È֢϶Fóþm!Þœ˜±EÛ>re„ùJðƒdšŸO‹§,É’ùt¹Í§`ÉJ¡Uîȳüø˜íŠö«¸ÙÐ.¶‘ZšŒvÙÌË«=éÅ3^ÎÞX¾ “NÙÂámå`ž–)sÈ‰Ž…i¢Ç"…'aË? ©Å›¹Ä›ô_^ŒÈðÜ<ßONW®å7e0ì ˜~ZÐòâÔpVq1O™ÑÑýlÁ⪩cmìEÖ»N÷-I"pÍ@‚ª070'¹×ônø®8,ì¬Ì±wp°ÅýJxùudðÄ%Dá‚/ã& #ªòÙ~8%m]²ÀByr§XŸÕý«ôÐÃ+Õ®ÿÔ´,”ñz‘…‹V#hføVSB3ìà‹n”©Eïä+3FQ,;;Ü@˜Ƨ¯“u40B˜—¼$ëRRv7=ˆŠc¾y¡š¥]Ô&-<­‡oDÝlŸð§—ÿ-m㛂±G|xжÚö ªû6NáAžRËk=3]“²®Z4ªLzœ=ÛÞ•|cé;UÊ^i„ì ¼ƒãˆ‰Ìl±ƒ¢\w3ƒÛ\©Äa€ØL†i)éÁ*äN-N¡IØ*’[CzA ŠOƒå.­Ë&_S×àâ¯)x“nû^™äOþ¯à¢â×jÆM\×#÷(2ö#†0¿]ï å y˜ìßgQ,KˆÀç‚Û4`ö‘ó•¾ Ü÷žñ,TR·â8¼Î£#ù͘é¢1ucšnêê™?.ð¦7A1+ú%‚W®¾Z91Q2Œ5­º’d$ý@°›ÙÜyl&Õî> stream xÚlºSnݲ-Z¶ga–¿²=˶mÛ¶mÛ5˶mÛ¶m»î¿Ö:kŸØ'nŒ—DËÈ–­gô—ÑIDlmœ”ÜíŒhhé9Š"JJ ôôôzZ&Ac}'s[!}'c€ª±@ÑØÀÀ`¤§g€!ÚÚ¹;˜›š9È )þ¨Xé™[›;Tl­l]Ì Í\...|.ŽÎ´Î<´ÿ)œÌŒ&æVÆAY9uqQ¹¨Œ2@ÔØÆØAß çl`en274¶q4¦˜Ø:¬þã mmŒÌÿÅÉ‘ößl\Œœþ!fâ`k Vâ‘•Q Ò) ômŒRbÿ”Û89rüƒ66trú×tÔ§ÿ±¬ôÿÇ2øë²nÿ±haFæ†NcSsºé&ncb `ùOØÈÙî¿©9þÃ@þ†#c“ÐÎVV2úÖÆrA[k;g'c€´­‘±ƒ à_Ú»:˜ÿù/TßÚÜÊýÿüâNúÿˆÁocú|ôÿ ™;Š˜»É™;ý£·“ƒ³ñªÆÿ9ic#sgëÿ”ÿ£É?§jdkcåþ:þ3Ê¿ûÑ)Ȩ¨«JPýÏü;-lchkdnc PtúGO}£ÿ ü;-§oþŸ ú/—ÿn€áÿúÒúNænMzÚ­ý¿¾ÿZÚÿ% `ëæIÃHÏ ab¡00±þ°1±yÿ/º†ÎÆ6NÿýŸYþëÿ{™ŒÝŒ aÖ–m 9ƒ,R›CÊ|„ fËÁ©f§õ”©–€W¦ºo4‘ÍÍŒt¯°î•°r]ápgü ¸w/wÄï›õcáŽ'&£´—±^‹ˆÊM}ª·ÞåóÞêÂt®ÁT0­ eÀnÂïœÒ××ä('ÿdfŸWKØ—p#‹2Dé•¶÷#mÇ­.<ÚˆRh“¡dh|ÃïSU!Íšç_ð¾î­„æîÂÝ`êšå—ùÛ†jäÕ]YjªËÍ1tŠaäh`b m…n»”Å nðß_1íA¤mºò/j=åÒ ÏCDäƒßpÉnnûñJãÊÞr@f-~JVp)GÄn=qÿ)ïð?Üqyñ™VUÕ"³ðsš&ÓÞ–˜&„ `áƒ=ô±ÞãÈ^—\r’²ßàógß[UE¡Ä-3?ž×ÝD'¬ˆlHœ¿v8ËwÄä¶Ú!PHƒpÚ0’¹`ɵÛ0Êñ·9“< =mm•H€+czzħ5 С‡µ‰5ãGX¸1žvÝÂcïhrdÞO&4gÊhŒðägæåO\aÙ?W2©#¡»ð¦YE»…§*K w;+?®|L຤«¤n©¹c’–ôå–&rò¯*áßæ4ìs©CÇu' ¨BNœÂó똽³G·ß}w½LòCó‚õ.Ï^ÈYÒ[d ß*+”!—€pÌ‚±£ŸicھܸZÔ¤3šzÔpØnpf·T,†¶¡h. ³ä2AJ奿Á݃›!>÷J“bóéfÑ q×<˼à$Möaf8ý>åMž‰³È+ïôhÖU…`ºxñq•åìÌìl0¶WÇâðE ÌD|ÉT(èǽä­p5„~!¤³v)Ъ䀆­Õ’DåXU—uZN¦ÙyÑùgÊ5ܧ‹b` ›šË5IݦÊÔ±¾$˜Ã­ÌcPlUÁG`Ù>üåö 7¨Œî>,2 =|Ñ“•Ú‚É#•nîÛš¼µÚgÝa˺h{ í"…·VPø×p$›nož£ŽØ%ï#(SŽòh Ë­ Ã2í·ØIÙ&9,oÏ8õº2¨µ»@!¿­Ÿð/YmÍoÚPKÄE õô WïÂ]ÀÓÒølâtû<óp€Hd©ñBÿÝÎîÈ€’·µA5ZqÂÅpVÅÔ*zMlš­&)  x“,k:Ie*(Ü@±`(ó°WØ@’þPiç&/š8¿ômP×>v'ÊEÂC0Åfꨒë¦ýìíybÏܱSÀ1Í¿÷êÈÈëNäµÿkv†o¬þ÷U]ࡽ®¤²š߬ǧÛj˜3½feÝmsÒE”3I°C­§Žuáõ.±H:‚Ww“xé§ÞŽËCØŽ=¢ÃØø~:P5ŸPrÑâ=™êör›©E<û²¼øjÙæšÃ±ëe‚Fx?{Ó64šÎ:5ßMâ\^ÄÚç&ÇÂäê“‚ƒ Éè£]0‡'@>~%”Ú ‹eÁÚ+"itá²¹gçcüÈÔ7æ ËÚÔQ' 칬ɳBÁNÿÕ^=}·¾¤*šm{t¶…ê]$Ýb]¶ùèÐÿêÑØbíZË»xs•fi¥a‡Ûƒo×§Ð,P»X‘瓬”þþ—‡3Czªò-ÒÅ'uê² 5¹É,TD"±+ù区å"UúÄõ˜ýB£UMÓ̆HGhº¿g>€; žˆQåy$Š*ïæð°ÎøXrÅnyÄt®lHÔ»–èË^\ÛȃÄ!kOvbZLÒW9Odµ‹ŽkJ[,Ÿâ¥¦Å„dJ1;ižÁ”†‘ÂÖ!ÿšözALЧˆs€ôfÑìoâŸ<þ\ôH' Íûx<[²\}yZ9®äɲ ­£VýQÛbšÚï-¯ƒÏåOM›ô.ÞÔ–ÜȺØV÷E­ƒ›Éºõ b.†{ƇQ$Ç%CL´Â6]Fš¦ží-×å ¦-”À듳lX€X3¥h‹ðÏ×óæûZúA™’'Æ{œºU•"N,én‘§¹úÁ ÐÆnNEÅÇPáÈ/l’«PkII:Y~ó‹vr¢]¨›$¨j¢Ð»-=sBwþ³¯Qѹ’Ï«ò2C ¼×#”·-<ļ¶Jàq÷7÷$“OÆ«SØwjM&í÷*î.EŽzˆh BÇÐ4 ©zðœä:ñÓÊЀ©·›9ÐÊê!61:^Z«Æ¯¤÷†îO’Â"wÑCMÎý±uijÂ䟔²>l—1{µ’1Õ}ؾ!Œ//îÉ¥U “aÅ `J¦¢‰ùþRJÏËâè/÷X'¯Ãye^Û1š<4ýd$^T1Ï™ì'Ì6e‹L*’/•±ƒY^Óú›cfIÃqùª‹¸2í£±‡?–LTT íe<u•±öãÞÖ5rCLaR ĉ—óónÊæ×•g „yôg>Ö|¡(­ønÞz[Å&ÅZ¹ËרLïŸ<Ü$‰ –¼ •GƒÊò.¿g#ænÞ(«nŽû¿|;àò§B½‚Ùm¼´yÙ—¤#‡AIGݶrYÚÚ§'ÊÀ:$p. Nb?1´>.nÖMHÙBs$.^Ó…ŽEb“·Ÿ-Í¿-§ ÈWwèµ¢3ØžîóWÒ[™ÞQ`Áhܪ€#Ù£Õ sÈÎ5=·5…²M½çtãçÎQUV*K¡t‘¶Ÿ8䃊뵺!ï[ÑÚñ@µh(4Êg`ßIñ•,Ë»OÎüêûÅ5 aÈWœ.€‹ô§¾Üå3Ôv LÇhØêÌßÒ³98‡ÈG&Hg?àÿªŠT8Ìw„ ‰ {º€$g$Æá+þæèm^d^d†ý¢ ¬½X(‰Ÿ^.Yp©þõÓ•üG·º¸Ù¼ò„l {®pÜ¥n ªýŒÝ—RžqãNçÉèg±ý™²¤à0ûaêZVŽ«à—¦]÷õÑÝ{ÙUÊ è’ò Ý6µ»ŒŠ£¿ …':d®::@ñðÀîö¶«Æ'‘qµsZÚ:~à°JUŠOÙ6Þ$—˜ð­,Aáé¸zõgZhç×hº£Ì0ùV¨5»¯a ïî“Ï·ðcgm#ÅbU‡ñ™µ õ£OO ¥¡o.ÐHE“h*Ÿf=ÖÆ†0#Ñ3fÇämÚ¾4C‘ˆ- Aû€û¡’+õTFéÔ€UX,7X$®f]Q›}IcR?÷\˜éQcY†7­².‘Ýâú0Ü›äÕû3ß‚åõú—6¯ÓÞ¬„r÷‰?Éòï®É®~~¨OD^G\*rÓß-™m›[þ«­íÓ}º(…¯kÝ| Ìód|fPVø1`0hvo¸=±¦@Ä#¤˜hoBQB«9Œù—s™©Lç|æ†}¼•‹Òýsl¡~!ŒŸ×¹…]ÄNÎúªà¼~ۈݪkžŒ¿?³¤Ÿ.ÁYßY霴ÄmRoËŠ§À•vòz(0Ü9â¾ÎvLÆâÈ‚±/ÕNI $Óò²ÚžPÂÒ¼§D+¿îïO%Ì,ÂûöÐ4Ä»¡I¼_ É ‘rÁr”ŒþËhZgIíš»àv»úŽ9nÙ5“Q¥ÎE™1W³NŽÆ]ýVÄy:ˆöŸ6î)ukn³à@äbdb£Íß+§bo;€X¡_Áû©)ÃÚN£6ôÆ,a޲Ùíõ½Bp¢]ìä'9$=îmkùÛGDd‡ãøæç Dl•ÅÄhXy2Vh:nýÞ“H¶~õS`üÛ6@>!ǬàÊH÷ZùÁ˜—ÌÈïñƒH`~´u²! ¡îiÁVýͲÉ=¢Œàòt>¬ÜÝBjÉæsY”wù¸ÈƒX4h‘ý†‰]²LSÃß}ô‰8)žbƒÏÐÙé8i½Æ0{y"…‰I0tòëV¢$¨9Gþ½ `é°øÄï*ÙS)åIH=*½UL? f”kÖÁ]z$/L¯3Óʱ_c2Óõ€1EÃEAŽÖNÐÿYÿÜÐ7ýó âXÙÄuôv¦ß?Tù2G•ì¿zÓâ2,þW3ÛÒ‡J›U+©È8-ÁÄ_н.ð¹¢ Ðƒþå©¢ RÊ­ï9XûäÊ< ¸ÇQ¿½“dŽ¢¿zÃ/jÄçœ8‡Œ¸cÞ_¸‰¸ &ëiMi„S݆¶w¾’‡úÿœî•ÉÐy<)nødµ»ÿžhóOl uso\b¸=…`Yû“N³• ¢~‡‡øŠè±}Ð:röâIÊÜä ªŸìhë(~‚ø®v£`èæ×&j‹&ŽÛG˜ËÎcÅ–l;LJs@yQQ¢ÂRqÔ(k Š, } °{¶ * ,å„{*ˆiÅÇÁ§–<³¡ÜÙnÒã¯AŽ;ÿu˜dT—Ÿy’ôÄ J~žœ™n‡BkdžÅ½Gƒ%k˜õ¡1Û¨àNL $®3¥‰°Æ‰r`sŸ©È#ç$3Šj½sƒ¥†NFÑ+=\¿QþâÄd/™Q—¨Û^ —1•5á©S~ãEBäÞM(#Cóu´€=£õÿ¨ïÃ!Yý¡ ¦<¼ÝM-Ôöþý+dQŠ#(U1*=ƒJx†÷L–°W8©2ɸ¨~Ô€1Žòt^Ðà\‘(ï˜e¿yMÂärì,Dµâe½‘€®ëÁkÞÍÖ½´‚!Þ¡/´ ”Ã|¶ò×»O"úž¿ÉšÒ¸\ñ 9~ÌŒk7Þ>(3‹YÎÉŽ,˜…ª˜oX_@/Ј¨ÍQìªÜï„¥t–áI·©â£A*0¿ß4x¬AÄgT zSÝfW*‰IµÔ:eÏRCsÄœÔS†ýñ@¹×ÈJ6“%.Ô1 ¼ §­=åY)Šó—*¡&4Nxo¡¸³1„Iþ˜år·ªºL°MX= Q˜„„`r:ˆiög‡Ê@STò{D2ñ3퓩õ¼%¸`ëÛÚôwz A|ä+UL‘Ž5}Ôª®¹ÿÜdA/áû„¨RJѸ?âX]/éu{Ј.=´f—H2&ב²Múèô³GMèì¬# GVHšSUÑ#,Ș}Åô½õY ‡ÇâêOsâ^0*õ; ŸUzjS6Ñ)¬gW@ý7c˜²0ZÛãè'æ˜Âç¹ÁÚguO2_zÑifÿ¿üj ÃµGºÆHç3Sç_ ¦…ˆM¡KLÊjiÃLAj•uL§"þj¡ ‰§ü{LÕk|¡jÿþGå[ŽWKµyèÀÆó0­µdð.òF/’òÃéâ7•­Tø¹¯AßÅÍ?Š ;ðxNÉSHÌFužlm»ÔÞ>ƒu—¢Úœ9vª‚‰/J)ÞžZ€ü¥yŸæÍ·gYNX<0Ý2£ÉC¯š+ÀërÉ%4ì:«?Oú'­I(’F‹ú»?[ÐS¹C!ùBežzèTzdÄHŠ ;ÐTÞíLc›Â­›I&j øÐô`O‡ÜBkáÕáÌðÌ ÈÞŒ~XãÁ©¿Jv~5¥À¯dY\Å;L㺮t“qz‹›uq2›ç¼ã D›=ÀoL3%WC']¾Ãþþ%ݤû‚˦¸R‰~rù6Acß6Ì-ãÞ€¼‹´›†w±ó9E™IÓ};væ¹ YÜÏMNëëêüÂWÑ ~:ŒzPŽÆ.2ï7¯V’šüPm4ʹN0T6Åo'ŽÏ8•íÿBÃÅé›èÇ}‡öUÌúUÛïÑ&H\$—ûò³”¢FÜòu+ ™1ºCÜøp¡÷x-Yž)I«”ß–[:|à4a5Ñ#Þ2ï8}¡ÂXÃù‚J¿JÉÊ#4·æÇþíRÌ'ZGîP1/§Ç!g{Û…l1cŠ»›»…¸¬G1£gL7ÖÒ‘·;–®« )F ûÕ/9ìÝŒ-Ò¥9­î0êqzDy^÷kšm.½‹$‰¡(ÕkÌ?_~“ŒÄÀèÜë3ÑÃ"La©e ýyL·¸µÖí…ëàùˆ*/8Fîfüý6âxŒ¹Çô—V ¹­ !G¾ÓVXqQmiuéö;¥½ …²áV…æó–Kٮьê”Ь«fõ+Ôüw~÷S`e›äÃéáË\Ä{~L ÑÕø6ð[€“Í¢D„™ÆÎư|¥ªÞÎ/Pð—îÉW%)¾ð#ñäoó?;—3m¬HÍ”†èÜ™ÉSNÕóÐ]¶5 Ò\ÇA- GSçX_ìµän?/Ôœµ:z=óEä¯êð ±o[KBLjQUWÉÈ…Là0$žÂdÜí‘c1Æ™Ü0´ƒ)é]"wŠ¿\\°í¸=jbç³D›Ù…NSLV /È!XAÒ´Þ;nÉeäLx‰ï²R–Áx GY“×é³ ü I P†kp3}~ý—Ǽ+E,vg^_èt©Ìùá"ïÍ/Ç9p:ȹ‹ö†éOƒÂÐÃù¬÷§É~™4¦#›Vyò kkŒG˜LL“JFm„œîs¸`cåĆôÍíÆvtþzñ¾õÃôY¿"I`/æ9WXA}Üw¬MššòôgQ‹åü%ð·»“‰³Š9ôB¦ˆd«ÏUaöU¬‚³óyb»€ß¹˜Eó‡Ü‡ÕØVZ,iº7`¢àüœ, ¯H&mØO”ÆîÁ[ˆ(Áx$Q=Ô áo¹×N†ŸºrB;ý«ý^ª\q0BO‘µ–9J—­¯3­õØÂÑØ„}è_fƒþµÁääj^ýjVÀ¶87Št˜µºMfNnòNuâ7â¹…ß$wò\5žÇ]IƒÇƒ/ç˜is¾‚gáÂæ¨@áÞǼNæÓ¹*tÉ@*„VÍýÒžã¢-€¯;¿uEv #*÷ÁãÊï8PÅܬXIøyåQRï8ü†U¥ùä \»@k6î$J@̳Àõ« ÉSó§ãRnòòuóã¸#£Ïr79“m£ÀC- äò1Sïþ%oþ4’^ûÀŠ9üÀ•u¢$ŒâçèÒüͽài»¦wªcü,"}çlhžêLaœcÊuͽRêÝÁâz¦KVbiV{øòå¨:B+](ˆúâ*ãëë®Ù謣â×%»Úê»»Ô¥8F£/H߉/ÁVݹÍ\8M=,œ_LÉ„_ɪ~yv|úI„æJá²’Õ¬R:ö¾2œ—çD±Ëp\ÓºF.E-Mœ€”'û&· éÐÆNŠ$âY79ÿhëÙKg0ÉÁŸp $¢hA®êíäùë &œà÷Æò÷Uç׺•<94 ` žô4cGCIÒ3áeîähuóVÊ6¢¦¶:áÎûg81ÇWVû®•Õ_2±°Øè—™“ˆj §?qÉ< c¶ø›/YÆKS€¾&6u»†½ è!-»Wœ'k;9ó¬ ¨#`¥ƒƒ©Ì:ÑÇIÞÖž­S^ é×3w:Š —Œ‹‹'Yô¯–iti¹1¤Ö¡ ÈüD7–d³Šô뻦?çhŒN¼ñ€ãÎî= ü´!‘ëƒ=HšDȼ Õz<‰DzÝðA;²ˆª &ꥪÄr§îp4¢o|‘ Ñ!³Vûó0èfzÉ¢`\+K\\L6vr땉å¹aqs ëù5þ5{œQ\†F¢|”é1,{¨®@:Ç—7åCåXk+ÔX–Å;–Q±Žíl'åp|g¥§ž‘&óLç}­w^óïÛÕÜÖÂ÷KóØ·ÝcH+ 'ÛƒbgpÒ™,+ÖçÔÂXðFÎ!¶0uÎ+ݬuì4»gò"½Ö:ŠW„\‰€&¥Ó{í¶„’ÏÒ;›FÆ[<­Œ©¼#^_µÙþòƒ±õf¬¡]y¯ {{ÏÁ}Fu¨+‚ðLòÚ.€SSclDƒ‡ÜÔÞzdðkw Ÿ(÷Ge¸£ Þw² ˆ#ÄHˆÜíEe¶ãöù£Ãðœ³ì¨<ޱGÞØá=wÇ+†òYWIµ$TŠÔ4S‡K5CJ^-n “\¤tq›©1õ6'£Oë2ÌÄ8úP½öø<ëÜx·Ïqª ›oâyǹ°¤oÑc…´±jOAÚøù %Ág_·Ì;‹ýdØG0¾ í t×ü´°é'P˜ÍÚ%´5pˆmål5´&?Áþc¢:±4´¦ôÍ[NÈÒû1 1Œ¤p¡úæëd>zx•3µÓÞ,/QŒÃˆ]Nið–þUn¸•¤3<¤ åÑÏèi¨ßÆ ”‚>jˆH͇>Qìø,}<ˆ°™ñüõÄd‚aǨì¨MŸÖ»ÇH3"XšáãŸ`•U(h9ÅF¥õ‘Ío¼<‚>tOò_ršßùëüo}`œ­öWÔ5š)'Éd·#`q½£g›ªal¤HdÚÀ …‰åëß›.¦D,“‡™øã2®+ÚÖ éz—ú_Óø} ü5N(Å+¸Pm¡CC裑ײ=É×IE×ëcJ½Lyç½³4¸î$§]~0ÕÃyS¨þ2¢›¨!J,ñú½%‘øsn(á¨Zšt1nR  ÚP”¨Ë é&”.U¡}ä WÜzÙÇ‚¸ó’¯X-æeéKgÁ¡† UØ$ŽYq!"Þã‡\bÒ@ÀüYýÂ@T;}«!á™Oî7³Wk¯ò&&ɬ%Œ²UÜ»ÏF÷ý—çœÂA‚‰Ym”ûyGí?ú:,wW÷w­Ç§wH/jæ¶áÝpvp¿8ûùeÞhûŽÁÆlT—¦L±ye°°ò…aš\c0*t©dÚKn0‹Kø–6åJAÎ^+Å”÷v­jzÅ`Ùô=% ü|çGäc,y¨ϯ£\ÂI‘—ž<ó—² ¢´/a7ó ñÛöîH¥P*­O`Jn뤙‹ƒÙÐáì0xÒ ì¥8»Rêȃê†éËbwéÐ%Ëñ]ÄZø‹)ÜiOHóâáJ.çR"±•ý./Ù{‰¶bXú„Σ…4c¸ÈSCêžáº"PZ©T9ì[S‘VݲÕÒ]9Ga#ŒAA)W;þVJ)žò_Jçd„®ª)°+¾Ç7J säð£|ùîÁëÕľˆþP/ñH©u Ëod#˜ƒ¸¦\ ×ö¾<´‰„qçØâDJ׉ [tét7ß&Ùýjð~$`¾Z©Šy€ºoü4qcõ¬ƲΔyÆ"XW„`špeÊw Ü¿•MG³&:ǧâ¿ÍmÎóz°æÁ'ƒÜd“bÜk¢Ú/þÉ{&À±¥›ê9Ôi´ö.àiöLßq+x‡€…@Kj¶çQþ8 _\ }KßS­q½üõÙD¹„þ[]£y%µe"A# =ã~´‚„¥P ª€~ŽI?ŸÀ†©ElÜÚ:KÞ@@¢Vjc²Øu¾-ãBÌ §.îV–C-|\ U|l{„ì!Ì»eëz(‡˜—%Z &¸Q´QD–— l\0»Éá@<•LȨ¶[6¶r»Ì¬ïn:túL4¯‚¡t¿C+L-ÿ)Áóüm:]¥ü7Óh…‘ûT´«ò‰Êû™|( lA÷A]cÉÇR|ò€a]™¶k.œ‰rhôOËVq2ɤî„–[‹öc0J…†bqÆy„&hbO/¨Ž“UuCúpÞÎì¬~pº a?¾ùÜ´š|l”ŸïƒôS6`V»OHE¬"~DÆÊjr‰€`›ÀF;•<`ω ,³M×_Zg­±6\ãÐdc‹±§hÀ5ª#)ˆÛЈa×b‹“†_µî샾ñ„Eûñßè7QÀJWkª`‡t`ò¿üУšUøan[ùòÀ¦ôaìTÊ·iq^Å„šs2"´~Çš‰ª¹ùtŽ§Ì§µ¹Ñça|·&ŒHcT¦žÇ¦OùáÈ+L'Ю…¦¹>¸µéQD£“mQfå‚Úk;H¦×hI¡ñ´"B‰o×½÷¶wo.ÛŽYÓÎ$T)þ±ÐŒfˆ«vrÓuo¨è´„ëJyíñ‘Ÿ*›4dÛûKZ"lx9ƒÆÁ“L00!ŸlñÌ–IAøt9l¥;?lZ±’@«2àý鞬á݆,ñæÌXô ¹ærÅ:*éCª2¯ÿ¢)ò‚ÿ§LÑÔü­‰@UÁC¿a¤Ê™eÝЮדm ”ê«Qrr¡šqk3¾aædø°è7Ç*p‹L» cÕº¦ºY¬3hÝôÄØÞÕø2¦ËÉBV³¬üv G¨ðôDva¶„»6JO%^RÜÖ¾qôígXLl÷ÛÜ2G=K¢é£eFµßÆÇµB›r¼¦qu_1?C $Æ•d“˜åj„ûGIƒÄKI?Kk2è€í zdÝë?…7àÆf»GCÊÆ(ÏL¯÷ÒÛ\VÀM3 Îß<™L•ÙŽò꿈æø7£œêôK¾¾¸«Ÿ”“þÔºúãëÃ{&q´)Ð(@"©ë1K!ŒÀüí,Ë¡ûiÅ—¢äŽ_EéD`‡ö}éMÕ5tµüMÛá¶¾<ë™É³Šlm¤Âƒ9šîPÉõH?ŸÙ·0%+9å[õLÞ=ã»\ C^#Âå9ºÍ…pû‹ñf‹4Ä‘Bh;´²„Îß„ïóôc‘³^óŒ› 4cø{hŒå›¥¼ì–þËĶÅApùI#/’8_TUøÔMÁˆ¤ϦUâõ :r-@ÇH! ‡Jøµ@8²ža > -‹+W„uU—šW':Œ ^C¼Ø×ÑÀãs&¨¦6Ѽº’QUp¾%¯;¢F‚¾>‹*ÎØ–ý:à¤ØyÒ¼]Ò ³*ÌŽ )µE¯Þ‡þêE|ç<ʰç&Jÿ8Ê÷‹Œ>¹£F÷¡þ&.ƒoLîJoèôorƒMO™€pÓÓ– Ïwªäï’!ÑSàiz€1§ü…ìZl‹,¸~¯é…¡È뜽´ R+…P˜°$ý¤ÄË«dîgu4¤Ûé¿¶ß»'­´Dví+Ì/¤ýWèÖyî–ðñ1‰Àµ ¦}Ðf1Ûj¡Ÿï®\Ít£OûùHMVèûùx‚ „¯scaãÁê{„jÙ˜§×Ž»Þdî¡Iè¤oYzºÂÉ%ÿÈS¶°¾÷EôþÂeœÐlæL >†ïëèwÈ5¢ª—y:èoKkhe²­3':äƒïGm[šÌ§²Ae (K¿sãÍ{´Eå#õÂÂ[ôé´?ðí … 7½äR¢ætz³ýÝ$Ç£1Ñ~Kѹ¶YûÛïcBÍ5°hbé}=ûa–#æ›ÕN·½ŠDsšb3lËÍ RãËðû?Å+þ­éA|„d²&Cz Æ÷º·nrâÜ ˜äM7SÉÓcËØÜkgiá$\‹ÒŒV£Û­v¥ŸV¤D&°»Ü»û”Ü.qµJ¹Ò‚J{‹DËo®$ÔƒJÕÛ¼ ç{ØC»š¾ ßÙ#äüÝryƒXôÕ6¯O!:QhA‰CϤOŠ¢‚=NWàºi=§m§õ…‰ÑóJ|jÈ´!()‘ì½¶ê„ÐôäÖBÆg˜jíÒn(ºûZç=Q¡ïœtûZo“¦jA ²=¬TÛV+èÚÁ¸_]Z¾*^è¡L³dŽaљ»ÁLF‚‰“q­M<Àü[v"˜$lˆ"Ⱦ’d¿Ì›Ñ:&ëXtGJÊêDç®~~4©P¢{àpÝŸ8ú/D&Q_ùŽrìçÆ—¤äØoÖ‘…oy…GDÈ-‹]Ù_J̆i§cÎóI»‘•Hö´¯¾dGO£$Z%e¥ôü!£[¿Õ'o—Eù>ÂÞ!Í©zZü4)Âßs:¢zÚ‡=¶ÁD²5)ŽD»W1Qºmiq‹ý*Fpþ—ýœõe&[‡XÇù¿­s³ánVŒ éØ|âítgr7pjªÏË^®Ädêso/Ñqæ/Ñô§d:qÛâwXSs‰éͶ õï‡ðµâ-õ¹#*™… °rªä¿†ôë;òƒaÈ%é×­ кi®V_sòc·ê·´÷àq-‘eñÓ¿›YøL?Ÿãe:lĦüšq¼òîBÙšîkèSÂaìûj2¡]âãI3’¼ .ø¤ú¸ùÙ+˜ˆƒO-oC¿2ä &ö™DQ½àvlÍ5M&P·wŽ9»Š+ϼ’M:Q½IÌ•°:К,ÅÔÒõŠ  Ö3?ÜÞW”BH£ ëé¼:J êw=®=8Áé`¿.¤JGºáÓž!’O¢BXvk0_ªœßè©Zo_ŠˆåҔśƢ„Ié>cÿ¦E{Ñ„*"• …VôMß „vZ°¹…„ÑS›.ùÀŽXhk²Õ‚£@ßA2¡ÑѦ苒lôçNž6dÁSp—ÌK= }êøMêMƒárÆétb™Nìì,æžö„:ä’Þ·Wb:8H³™ãâ?¨†ÇùÌr½A iÄÁR(ØAð`έž/sBcÙIaW!‘q4 ¾æ3˜Ë€JËNAo†õ¡Ò ¤v9¸/8•ÙõøA‚{0¢Ø«x!o6¸““czŠ®üëF˜Å×ÇŸ6mÒJ ôU¥ZËàÁ¦}¶ N¯oôþÙ\‰!‘ºáq ›Ñ‘oR Q³«Éÿjœ™ œ•ÚQcËÇ4ÆØLÈ”÷CràçÉ}¶Ýbäâ9Õû±:ú×ï~‡› 7Ñ’ªR%Ý1<[8 §¢0† 'h‡gnÄ–ûéjbâ” ;¸;§{™aVÙ‹Oê86–A!ü*Ï7>É«O·+`ZÜX ­-Õ–h¬‰–ç™Q<­i ·èeQdሺCpEpm¦½Ùžôú¢#pb¦ÉÍ>+Øi¢@?¹6cyÞ]g¬(X lñz¤` ±û`iŸ©²EvÙKzÊú²FêÎ^Zû‘3ç^þˆÄJbeµm’Øs‘ té™ù­˜À‡h­z†æùš‚_§}:Mmv÷k· Ū•‘íYè¬gù­H¹áÚ/ÚV°1œ>Ø6®Yõô¼úã/—|°|ï¤;ú#vÉŽo›†Ò¯Ë>¡à6žÄ'óHU,®á¿£¡N—µ 1î9XáUD•^`ÅJLªp`E¨ôÓÏ´†+þc?o½ž+ª¸m1Ò¹“{ƒJ7ÁÌeĹ“ è ir–˜S,Ÿ]ýGæ=MLéŸÐ\ö t™ÅeF* k]r²<§ýY¤XÍAq8Z‚Wötyj\þ®ÑQvÖ <ŒìãÛCã™ëØ’Ñù'Þ€¬»b‘õǡŒc a"“ØJÓþSµ¹Z»ÁÖ»36G GÓõ½æ€š/â(Ž5¸Æ 7sÐVàn>L3$BÄnC9"æ+fËð|û©‚£+Ý}‚¨ŸäF¬<ùžöAó*RØÂKAni`×îXX5Ï€Š•x˜JyÆ·¾@Dh©ÕÖűåiÒ¨°b7£®Ä_áO]¡6<‡æçbÇŽ®PœK•3îfMŸÆnlƒÊ:Ui§±l»+zha§gýç ŒvÇ[/ðF¯€‰æw€ÆaÖZ¾6 ¾VËqOvϤԊ28–¶;$þH†½o(fô%å½ÀPaäÜ…‰ç«ú” •ëauØõÌ_ô¤^6”ôØ¥îR§Çõçš1œ¤¹>ãõYvVÁk‹EP!ÑæòAÔ`䌖¾Ì»äñ¶+(ˆuÌýTM!xè°™ ORøüÙ¨oü€%ð «G8’ß½ ý'­K{ŒKX¿¦T-WbÄJyØGb¯b|y@üÝ9oÛ”HiSèT¹‰Ñù„ÈÛ4›óÞ0vÜžz‹Ñ^+}7ÃxЊâdÝbX°`G»ÀXÇ}S wNbP)µBø,Ž}]-ÌNŽ·àvvR†|VQEj™aü¬ôL©weC‡?~ã’¯²ÛãÓÞŒî}3ò]FUóF-`mÙW³Aÿó¯}ê•L‘F¡©rǘEÎúTØû÷/ïuAÑ×ß: Ô)2Œß®Þ®HA*ÄDf´&ôƒ°žM5wµ™À´zžÉï#Xøu«Æ`£‡Æ°ðu:l¯YLò“ä,¹ÿŸii.¯Ò´ë»â)¥€’ěɥø˜¤È,‹fØHQó´^5ƒælw6%ŽN˜¨‹Ù|WYx®Œo25U».5˜º?LW̓¦_Ø’~Ñ ½Ð½^‘Qˆáí{}öyŒZMuóßH¬wåÍs‡£¼ÄÛ§Œ1Š‘7ýE'V”˜yY’:–5Â7”Õ›Ì"Ú'j_©O#eÇyMþêÍð®AM*4öz±ìrxñ tG"Î&G†mšï"/"æÇo9NdGœPïôª5©%YÚf•³zñN…·)­î(Z~:ׯu.ÀîZµÜ݇ûpÍ %ó mP›ïhZ„jÏPéËü!ó¾4ÅP¿+˜T÷‡«¿ôkUZèH`U dÀIá©—Ü Õy{;®f~T¸`)FçOçà²9v ’Ïàí|ùSoÛýçPˆ–=I>…˜* Íø4ʼn­ÚH3ò™'ùò»SÖ]æýu˜Å8trís*·]ŽJ ¾i2Á*ÉØ4¶ìâˆPç¹…’«oc3ܸœúÍ`w»hߨ`¤Ó¶­Nr9L¥”^-›œs¿&h€ó}eSðÅŒ9Ü~ŠHrâ«¿¥ZqúCEžX $O1ý@Œ €”q§…±„Ï´BÂPJË£¹§xzL6©5ÛÚsùæ˜yê1,b``ÈL·“â¯PwûZ0 ¸š5Š×D.¨OcEÁÄ–ágšåW£f`Ê›‰Qóí e†¥ ¾ÌšZw“˜.Ç®_8w7¦ÛëhhãX°Ë5q”«’52X|_³zêZ„YOáf®Uó6ˈˆÒF ㉷1m€nýDNmϺå&£6·³i’\âöãÐv ÀrxÐ e.ËìýºÌBHá¤êq&È^  Þ §‡~D?#gr&ýJУû‰Ï¹IÅ-zg]zKwe•² Çá¶ÝÙš¸\È;{÷ò¿i¾èŠÌ´!ó§´ §Z*hnCüB:ò '4Þg’êõ‡K¡^Ç6þ€âNì@CnI$cðé_k¸Ñ<Êfs‡ì ¤?),QIRF3³è8^€#ö¡Ûäó}mº¯y®››ØSiX§˜üÛÚ„$Qj-³j€$è`9AšË}…O²‡é—ú¾ž´,G¡2Y¹r…O¬‡®õz°qÔäÉGܶ(ȽC,&„ú›„A §ÔÅ¢,í.yÀ)”×DêP¿ÒØ·6åüáa¡6ŠBO©ñF!/²]-  Jqcn *i%ήø4¡+R3Øò˜NvRñ n­Ø·du³úv*ä^\ó5H9/´›æØ¶†M€ bÿ~4=˜Q*p¾/3g³%O QŒæXëƒÀbÅ­V:oúŒ@Ë”Ã(a§-ÚéôꯋÎÈX]œ‰^‘Sz¦&s=‰­Ï@Ç^5]ð³©Íwþ@a³å×%ÕB*Ž.É@?|ú ^§ôhErzäo’²Ó+žkg{"ªÄ}“K£R¬o°‹ÝF›"V­¢p*9 ’›Q><ÃN“ V9´–jú"· üY³c&’>Àsy)^o¶K TË¥^Nm{쉨zñ)=B€û‹šJë4ŸzÊŠ&qØ%W\Œ9’˜0”¯òuBí¡G·DÒ½'vÕ|j÷©Ka2~éðæÿöÆÍ9àˆÖc›(¹èlØ×=ø[‹cEy‚DÒUŠ€å…ºÅ7nز ·$v›’Åиh#)*0›ºJÝ?,ª(ý ãvœÁÛ_½:ï€ys2ŒxeøM”v‚P¿Â;>•¿1‹} VEVgªn QÑôŸ„ —&´q7Q¿@{+KˆX,ìY¯TgˆaÜ»Ëm¸8£\²øòuÒ´dƒòÐ[÷n¢h¤™}ʤ½£;ö¡A¡»¿F°hÚäÞÀ•ô {'cåä*¦vö®?&†l@áCÀÕ¶K8?Ø©ŽfC!îê†&{½q Á!²'ùêÆnu(¿;rt{HX~u[ÍLµr­¹NTs(©Í#{ëµ›LxнÝs#n¢$!m`kiÎDm;É,2CDžÈ Jðø\3g@i÷‘&OûÁô‡Ð›F§umña…¹*1õSùËKùÓL8ìM®L©Õ²œ¨D+iæžÜ?\µsïg>ÀM…^2}÷9ã•(?üŒ ž’U↧ÜæüaÆpŸn{a}ñqÏïÁt=k+¼, Øz˜4ò÷ˆæ\‘ GT¦ÎRYmçNIâ >ê­‰cy~Îá Êm­‰}zŽ<¬æ÷XŸØºÑpánB™@JÍË`l:7W=$I,w×’ÿ´Øîbµ ¹/ËEâ4¤|6ë-S,sxÙßgØÖ¥¤6BPŹk°¸>ó Zâ3ˆx‚‘YdØ x¹&`[S"… §eØ˽ҵƒÓO:Üá†\ø>®à%㩤yøVŠÛNÒ[ºÁÈHxà­8n¯"–ýY¹½Ø’[§7[Ä–8•çu'§›kI-6áʜƻ]ä”Ú±K…4¶wð<\æ³ù•õûÙ·ê¼c JbèM¡÷øYå`oÆôšè1ËW]󣨴y¿(7¯.´ëoAr —_@Ôðp)Á“YûÆPL„†yZƒ}áH3”ãîí)Ûp³hø-Œ!‡Š÷×™NÒ½]ÝôªN90Ü|’!‡¿ÿZMä|ãKlhY0Éu ûEÂßüïWÄ".EùžÆ ”¿Ìj†¨4B&+Ê¥“„?ïd¶¶î=á5}¸¦n`:%´`e(½}힕ʴÀ¶î¼Šspmüœ”îÙ›ÀÇÀQ¦Ïr¬Õ@Þ>„ØÜ “æ{ÿ²s 2*¦cÑêC×ùN¯ÒþöÂFÏ:I6ùkÂø˜vóÿqqŽÝ¹(À’ÎÛ¶mÛNvl';¶mÛ¶­Û¶mÛæœ»f͇¹?¢k=UÝ]!ãœå¬&a³Âzèþ%Ô)¹ëm§ “¦°Å¿:•9OW^Ohñò1Z&•p_öülµ7ÑÌ¢aO?&yÍ`q]ªÃ××rHßEµ©g8 ryeYH[h~ví)fPûÂw8–×P+­jâô fã+˜–¬“1ø}äò¾´&h.çÝ<‘JA©ð1vLÔE¦ù¹· (¾G¾¯$A©—x¤^–ŸÊÜßžf 7z—öèr PO&: JPsV*Y-ô£­fýÍH^ró«ñìmVÒÿ}›ù}ùNº¾Ä³€t7ɉ’%f”Áþ½MTSøí«‡€J­U“JÔ¼Û$)&y‡¹mD­)a-ÇtþN‡ÓÞì®üJ˜üÎÊW²á\StV¨wà\†ÐÎ:h¶çÇŸþâ‘èïL€Pðݾ¾©`¯ÿ"3‘õ$svŽ¡òˆ¦Iñ¡Ó —ÊeRÚ¶¤ÍªGi˜Úè¬Âiçr>_)žB¾Ð0¹*õù9Þd˜]ÑÄDDÏà–×.«µ×Ö(`¨“ÆìcèšêYàüÚm+Áºˆ¬Huøy™—&ÕìBɃÈuð”|5:¥Ê¿0É9°ÿÖË"äã"‘ª”Ó~ßö^ÄÿÐUà}’vDh˜!èV¸X–ª+:V›i¶¹VC]^7(z"ŠWñ:‹ÈðmšoÌô¼HT/|ÝÈ`Ê IÙOè¿Kí»o‚¼›ï˜·iÆa€äÎ’­w;H ÍÄD8È÷ÝÛG=ž 2¿«†vжà9ÍïüA½TÙÕ.ö£ñlÿæúšƒN uÂ[@'ÀoqÎŒ¦ÞÏ_qQp¤Ç{æÃySÜ$&r÷î†û«¤ñËN^åt›¸³[œ~ëþ¨yש *Œ³²³]_NXkÃ¥p¯ <‰+ÑÅU³ví;³¦ñýf„RM³Òh½‹Âþ]TªNë°féóDRëï²e<‘H.ù×?ÜéÉzïH€Hq×søhy–á›!@ì8㼋¹þwTÕlâ”0 xI®^z+~ëÓì¾Å@Ø·¼e­~–M ù£OcXph5eD4@mádWRHFVFBh e)Bm›ó@øb–ß;Ýx“>]§1°ñ˜q‰¸,Ç¡)ù˜ÊS¦Ä7V¸ó÷a$u-/—Œ œZnô଎¯HªÈÿbî…ݤS“*ŽáÃĹ—Ʊ"Ö1Þ™?0K}’ÖüKwc¿œËs[>ê¤âѨœ9ÊïV%åD¦¿J¶ ç«Üþ òƒ5£­ ·“û^;_ô¤PîŸwÆ;qYNHV¤Êð$¦¢ä„É!ð¥ùzã#9p”Ù†Å?¸üÐ;௯ßÐ{ ç{Ët¢w[@¬*Îcpä;oá‡oÍa{Û±qwð»w?Å/º£oþmõR Ù@ïÓ?Ö~Y- »XȪù5­dQ]®œÏ§¡Ëõ&‡h[y90*Ñæ¢2íÁ$&¶ñ{#ØÒÓý£4üÊ ñlÜ_$|bÞN"Ïi2Ú$Ø+qûõup‡ÊüÁ&÷²‰Kï}Á¼qþ0c}BÁû2?†0â›?BbÛ[”?v¨P5 þÿ²yëI ‚4ÑÃ4ÿt?ÇÊE¥·àÑ„e•qɼ‘×Ôkî'ó·¹­½Þ&Ç'y¶Á¿lãÛ‡FÊî§s;´…Ôô 'Xב¤ùÁgTkñ‰­02(m˜ÓÅø.³4 ¿ Ùdd±þïeÅcÜ“Jpƒ‘‚¥ s¯{÷‹¸ q¸[_œ0x¾_@ ŽÈjèbc½(MXJrzã{.»C«N®€jºA©âÕ"®èêkÐ óXÁ,:,M€¨?ßɈ¡åDŒq§`“’°»1ïͶêÉ-V`5_3ˆïßßsµ÷?‚$`À¼«n`AµfõÃ.îþþœQ‹÷n“N£Ýõ¢Ñ¹¦9m»u|!™ÖEx%ˆ~´¡ /+'˱¡L >R]ZsÌ %êóDåI1“i ŽÙŠ¢ÿk4R õÞ}YUÆnš+ZK´’ †˜^9cŒà%º5Mø 9"4oðF›ø‡§6Ö> ÑBe8[•Bò©å  ~O“]V—LU¾û´'ÝÒqâUàŸàÚ´™W3+üK*tê<î ”¢â¤ÎüÚ"=É¢Vz¶g¾ê(#¡ó¾×kŸ*Vï+Q¤ ÖzÚVeSm dšäI©ÃH`KC|£'ÓA¿O‡ê!ÃÓÂÛ 7bê‚f¥º_‰•·o‚ÙôXVMÑ…Õ{Í‘[ÙFùÕŽQOSªFë¯s xJ|#n£†~@“,Ø‹+R‘‡É¿Zw§õ·ñ-´>ï:™ê{QCWݺ°¡P¬ÁáRTøéʼuâ>æ¬eåX~(ë³§œ%ç—ø7VÚ>9Ù»‰èwÛ½K[žåÐ6$ή“¸¿ûXZI˜åûþh‡=(Ò6/P´¦Wû Kâm£ìŒÓìÊñúoDõ«ûÖ$ V.¤±6éÃäyN](Jòµ9ÍšÙÔN€Œ†&s€?¤3%u®FNK‚X€ª?€ËjQ_ðjÕi¨ˆ¬‘íRdFþØûM ªEý%zâ?÷Rà{ýÌ‘32‰BúèG€;‰æ“õLÎ!¡˜éöÙnÕ«ŸÖÌ•…PØ"w/‰Œ<Ø–¤PiS§jMåŠ+ÅÒäW$RlØücb,Ããu‡°Ë‰òуR»Œ}³µsã0®8ø-ªÆ¼yˆUeÝà •s½&1©€oÎôB TΗÎéð#IÜ|˧ßNÜ3ÍøG߯·wu®C…;zù€læ „MÌ•V–FIâö“c'3K¡Ø"gCO’:bhÛ³3Oi«EÑùÓÍÚé¯Î9¼–ÉÞ¾F6S¯AŸu‡‡ "(ç°ÕüýâŠS°cJwʨ?ËÇ—¨š¶‡»ÊJˆœ¬ª"¢ý`É3ñþxú½åÉÐUË•Ô2»I»H[pT¡êÖùr ’/$n1ŸM}ÍÛÛôÎQ/òãäÎoÁ¦dKíÉþýž‚›IǾ’Ï‚ù<‹;5º»ðf™ TôBwð!C€úÞ_€K²jûнuÞŠkÑÜàn¡Í}Cˆú”™§÷8)ÑÒI™ŸB•É—=2? S$!ŒÉž¿>!ÚîDç—ZTªÉ²/çÂN층ìÄ›o¶Ëòaôqþ,¤X5â…÷Õ(7šÑTÐêÙ$2÷åååˆÝÖ¢ð÷ù{ç4šøIÌ•2’KSiG¼º4Ác:>ÕhgZÅøyºÈ µÒdÍB»G«-QdáºÓXà¸Ù;èUØtÖ¬RÅ2«¹» ¿/|d²ð™OËöúKar묧oänÛ~ÚÅYÆ.Ò…ÝRž9Å…8c´â®y+ñÜo—ÔfsõaCDvcåhb­¸*_¾ë×&È¢L Z*ˆ[¢“Oó¢ô™Ã˜VE 52ŒŒÃ[ÿ›¾^þ>ëŒHèÁ©åË’QT_ü@评¡íÍ:£g±qcêÿÿ'ST¾k¾ÞY.ë‚Ø"BEˆý*åª2ÂËŸý¨ïÞ§m´ùâ…¶Œ²¨ù¹G­&¸Î)âQ±y¹Wƒ «`¸‡±n†Ä§ÂÓZlSO|çõïÎýëüAîð»_óÜÞú`ÈäGâñ’)2ЭqAsuÒN¿ô‹ã{êeÛÕgeyøæøò[~°å:h÷ÀeÖƒ¶©8ŒÙUt´ÿGË_Þ·ÅøQÕ9‚ÄÜ¿’,`ž¨Hù§J!+KmŸÉG¤Üû„ÜÊûÔ°¤°«b’Kß/=b%K~½Ø¯¶bª4¬¿ŸLET @ êf§J_Ò«Èg•N !€å*2}(Z’„Žnµñ§ÿ²®¸kXJ@§B>÷ L# eÖ•×ç«üÏãµá†9# S‹äŸ=ð_;à Y%¢Ð:×5Ñ¡¢³æ˜À°R<ºl¬/ìM!ë)ó RßM»åô\ ;iÛ§;øþG¹:Yo›œ[ÙfHÏîMd¦WîDX‹ü•¥Ö¶CgéÙ<•]I÷ðrLÕÔ^­ë¥¥3ŽþÅ£¦qFp‚ðˆhKDæïø;Cþv¾³MŽïi7"‰3‡‚¼4C/qB0Æ|ïœá]OÁ ådIÔ` |3ý˜@Í[Ý[ÿœÁ'á´$õÑÅÆ#û„Ãx¯9ó'4‹KâîyàŸS@½ûê©=€oƒülÂM‚û¡¨Ýé!qɦé«Ý4ÍWÄ2Ýýg—x,à´8šÔTê›;ʳפ·Uulyzž£2»«Ìt\e-øPeBûÓ½œÃi'‡„Ê*ïVé!¹rŒØÑ±ptó­õhoá_Ông×€\ËrŠÂß_ú[N±’Az77æÆ%cîíŽ3X %ÆÅÿ°ì†›ñ•’¥û\NžÌxj.ÜÄì8ñì H¨ÓLãrs¥^´–OËø»€lˆWq,]É-±9¦9¶±%X¼0ißÄÔ×I{Û$”.î4RÌœçÄžSÉåp»ç!ý¹=Œæq”ª‰ W³4ž’†®õë“N3~ RÍ’ßl´=íî›IòçJ:½áwåóoÇØú8Œ~x@÷0T¹ÎszÏŽ¼¥H}ÌÑ B4±j FËf7Dà­âÄ‘°å¹$s)¢4``Wê¿M‹¿áë5~¨‘«ØP&{b«)™ëÆé»~ndFI¯¥’ЯOÃÖÂ4&?Êrô1Cçò'Fõ<̺5T¹á´B- Ü-© .p·9ŠÜ õ‡v²O½?»©Tï³vÂù®x”­ß¾êÍ_\}C^ikqJĉóUZ[–h³Aµ'åf‰¿²cå€U ­!®û>0«b]•E¥ðm™ÕGÞéÎ¥4,@…Ÿ}~Dþè[â“'n2\”ô3ºÂKâJ*ËÁÃûfX²uÄ7ðý%òyŽÇ&š°I!íܼ{òè¦/A˨ú%ˆðkµŸD‡æI9yjó0‰ Þîlü/‚.)U’|æ‹­%·:²³©°ßÉgx„Ñø¢Êõã:OU ¤Ì|ç•g¡JâS3”䂞øà-¦5ÿÙ1 [ Ìþ8ŒIÞñ2¯–émŸ*×8 žM; ž¹¦q_¥I:,_ÿ®ˆß×è=$TyÔêþì3evá"홨Ï'ê ³ 'ÂðŽÓ*cÝ.³šÐ„gò6ȼbNr:Ô¼Ç-rÐAõb£ Vxf…÷FEI%ä j§…”»Ð]RbÕsjîÞú\ÕÈ1@:båÉäú“‰©D´cjcÒDE¢ÎiõMÚæB B3áFxqjB‡Œ;µŒãùÏø&“È× ÕáÿÒŽ]ÑàÃû‘a˜/t܈‡]³& kNW"ŠÂiÜFý¹Dnv*±a¨²šÎ Á˶–Õæ!§Yu†#)ïìŠF":p'R­ª9äØf¸ÿ4¡§ê *ã†Æ`‘Ö¢e‘#Bùñd¹¯^in0¤™‡ÿÉ@>ß#3·X]žÄ—¢ =§ÑüwÛ|îƒXa®±`ú§nH~(Ê'´/QK¦ ^Ü-Íésº”Õ¡êSb;¡Ðƒ}›ßɾá+`(aŸ²ÌQ–êŒÿé&üìCi˜LKü¤XKƒ!êÅ¡{)®UàýÅ=ÍP3‹xý4Ş€`kí<Ò¢š›à{ˆ¨KŽŒÎD OÐC$ÍÓTÂߦ­\᫱„0©¥0‚Z4+ziÄss´š2¨.ñÜ`7–jI# UU°ñÞkÌzѼ‡{(ª ™Èöp‡œÖ¾¨NÀ¬˜{0LËðM }°§ ”§ú3”긘±“cN~ªÔŸöfXÀª]Ñn`ñOëŠò±¾¯x¼­ßÁ Pã…”Å9ªl¦˜@ÑOÿ #/Á=…®÷¢z—!›õjUÌÇñWÅŸ~È\ZÈVÝ5›Ÿrªe”] ä;e]vÖ3ßå´\Ïà/¡híÚCi‰D±ŒÄâ;éƒC6R˜^â™:aý0pþ€¡héº2 +·Mug4êY„psézÿTDJ¨f‹¹ìÙŸœ²›òA”§XL©Fs„G[ýè?ùÜ!WWô±ÜÐú©gìùÕaO‡ ³†b¦JÑ`zêŸô8"íQCÿsÍLÒwFÜi’Oã ÎjØ =Šá6|`ŸŽ[¶…“Lz¸¦Àà ®Í$ÇaÅU&®´ ½tá¼R''\Cf $·×¤çñÈa¹´ÂØà0d"ÈŽ<6ep^uc“ÇóÏíp°ÂðÔ>“aÿ Ó½Åp:¸%ÏO[¶¢„_é„S?ÃØAk8¹ƒës"î Cå„cNÄT™]ÝN·“(ló ü‚p Ò0ö½_ç‹¶iö“/Mر¿ÀÀ¦›Gx$ÖØÔ*¥ ÃÓÊäÆ.4kÙvGÍXí?q®Ï``–|’3ͱEqV ÛH#@g,Ь¼.‰LÎî›ö"g)Ó§1Ã)TÌï‡gÙÀ{üÑyIÉGA;þ+BÂóøºY8èªIÕ…^hr¡µ‰z SÈÐÆcT0kzµÆ s„§©íZ}°6°;,‰ Ÿûˆ=FÎZï#“˜¸fÂê[-Ð %MdžÂÖ@¾jËéHKJúdá̉»àpns¬ÁÑÕ”¥-šêÓ´7±MŠÎyô(ôøÖÈ+•ÜÞ½•¬hÞîm­H]ÚHæÉ£I轄Ú|ª¹D°½Û~”¡wç,QÄ©²dDMÏm½Û-%šž•–ÊþÙhÛ×´Œ"if¥ìõÐ¥½0PØþÖæ@Þ ­›•BUðÖŸ1 OÈO1pF¹Š¢Þbg7ÈÀ–ò¦…9‚ÖÀ›*O‡mx¹,`8ئ Ÿç¬²›Ëj¥»CY9ìÒ\—î G»S—¶ >ò&ä”° Wò)¸kùµÆ•]Ø$=ì¨Å,Kè:òæ´7“—½ðÎ,n«µøìp¬9çà9-a­¯«Ÿ™ÿTezÙfwî´Ú DÚ>íú%—¸‹ašÙ˜°Ê?‰nñ„„ Ÿ$…÷)|äÆºÎ§ %Ç­S á¨Ë?Žº÷sö夗7´à…Ò9Û¡×ôš|Fñ³Ó؃ߢ p•Ziªaßm_>IA'ðÒ=|=³YŸ!}}è#éªF ÒgåN¤JÀøYø®DIÞ¹ù0€1W@¹d^AbIÊõ²ÐÊ’6½e®Û¼ÃNÝLcô›« >G{Ô.ðÃnõ*g»Ô¹ÆüIAbÞÁ±ÿZ¾¯ƒ´Ž^öÔn9R†¼¿ ëŸSH'ôw`té:PJƒçh”ú»Í°Íª3tvSÛ32Ⴞ„Ò†7¾æÞ©.ëÀO'JeÕã0Qò›*0ü. -͈NÚåËÔ‰là:ßæ/ÿu6¼JsçkZö)ë¶µQÁ‹Hw8ŠëMä‹(p¹Gï¾€u­˜*Üÿ8@M=žÖº|NÈDEÛO–W"ð"$ |©-QDƒß k&S sÎî3á(´-ø- 3¸£šG’׳…ì¯mƒÛô²Ù\SºNøù|–Ù4è™fdÆÛÚ`u¯Œ&==¼S5„²ÎÁˆ Øî#f|f‡CÁö~tad4¼¨ Ÿ…« Ùÿ-ƒjø?ŒÆ /KœfE[§Ñí`QÜ·Æ×v¡¨u:¹:uŸ¡ñÚ~t¦±{°ÐÝp9M¸å‹}‘º¢)–˜¤Μ ý™ï{É´=–,XeÒHŒ%×É+ž©XÎý_´c¹¾¬l#ž·MdŽu8fi#3´X±˜»Bó]iƼ·/Õ}Åþ ¸\ë¥Èý5®;ŠüK6xO„÷M4¸µûʼÛÉå˜fèmNdH~ÄC2o\¨ë‚åÀ3/G-F½DœÎœñÊù?Ô~^s¬¬”(ÕeªÉ‡°{¨5ôš Àô VˆÀDSÏ‹í þýñH H+bÃ`Ú ŒE`aÆç£%«¢cw0{D9£ÎŽOÛŸ”Q¿õÕx­';-fe1ôKK©6Äšª({×Á3žÕÍÛ ”;3€CTØ7YÌ,ËBxgŠ\ ž‘šòOõ¾Î ˜Æ=±ÑÍ×ä†ú͉mÜô.oX°ˆØŒ.ŸdȰúéÁ¦aºÅô*+arñI: ²LQy0¾)´­õ+~ )Nyçv¢Ôgl⎩ 2;šVשD!`=gÆUVsàö-…à.Ïq„ä¶g@ÐoEVCžà£·|\ew?x„ÎKƒ¤d ã_ ÂÌá‡ÄÚþ|¢ª‘ŸÇâµEwÁRIjäžÑzyÖðuøn`|ža·¾;¶6’Ɔ£÷ý›ŸÕõùºÞ%ÅöKf'qc,žï•/‘=2\LÖØÌ/7’’ SÔA´RïÄœg’Mnï)­Ð Ã-úÿ+vdoo·ëd? ºÛ|O]"ªbTqzÀ‡Qù éÆm¿wçù»CG¡€›áÍúÿãf%ÎÕÏÇé%¨Äy`)ª˜Uß{`´…®ù™4£t"]–@·Ð€Í<áâÊ˯ñÏ-rb¿¬é¦¶®dG¼ÕÌuHyþ.pÏW(‰’¶ýÈ‹šÍ­WMMf²x^)Ð8w÷èÉrC 0‰ÂœÄ³œÛ“L˜H\ s~ÑeÀDÖžÞ\Æc5-3€d]r׳«ïÄcn­PÕ»…ìRµo2VDcá`t|wY=ƒ:/­x‰®)›BÀÕ=Ÿû-ûñól>_ÈË 6>ÎömŽo.$?Æ”\8ßχŒ¤åª~ý ï„Fd ¿½Q8-ÝN`·nC.â~ëëûX9…6J}ƒPÒdtËrñr›SHq¸\ô-ý°Žý·P8|¯’Ï0 ìª L; E²ZéÎǹ÷l׳,ÎÅù甃·Û+›uµ¦üh“8[(oÃOOôáŽ×wȱ6Ž©2ûÛ¶§VR½û12$YÒðQ¾OØÑ¸ËÜÂ-‘%sõ¬‚ÃÊþëè¼ûn>pø˜qÙCÐüÞf,ÕÓæoý$ÛCÞ…“–YL!j›¯f+Ó}KŸ7p06Wöƒ9þ’’±‡mZË{ý=ÇØí•Èì ÃQ¨Kì­à/öNˬ ¦¦ÚÆÓ‡p’)\[Ù™ÊxP^G¾=ÉäYè0—T¡[L‘(‚‡&ï‚qŒ$+4ðèLøÍ¯ötNZ‘9˜ãíÕê;Ή‹Yºì¸„¹y©V“•A7ö”*šHéKG¼ß¿ðÚÇc›Ÿ{#¹/ðâëï×òY)dçnÅÿÙ ;ù²Ì)UôVs¨C:²—Z¿O÷XõæËq8ý6>!è¿ÙZÆÑvv—$ññ[Ȳ„žIÏ™);{ hjòú3ÏóÖ~†ƒJß3sÞYÀ ê«]ÈW ÀÃÔ®a{6`Ȇ÷bÖŒ¶éEÃé;yvkmtìF2qWQ«bb–بޑÁ€µFT,@«S,$ÙpüÅîÐ$d*òB¥§*aºí£3ÌÊEv§2> þéyç«OÐtNµok‘Uk6Ó°Ø’ß%®™Sø¨°R¥ÚBÎlÚRÅ=æe£ '†ˆºÑá• €Þ L“_ˆgt3p·3w+)Ëac{‡/Ìí»ªÞø ®-±Pè¿€ÕÙH±5šv^XÜ«Õç.Ôc‡9E¢k´xÇ»¾²i+çœ)-7Ê•dø‚{çx)Í1¼xÓŸzjÜû{‘8Åäv± ·ç‹çœüÀ_ÿ74ÂáD‹dÕX–ò‚ ’ä¯f³%¤ ðj+q.mhÄ)¡Tý¶×õÇ–ŠVIS)×k©no¬Žqþ ’±Gt6¶J÷ùµÕ‚²ìû5p4O/ð´@»Å× ­¶R TŒ yÜ7aEÝÒXÏO"p|µ]T‡¦æm^žQgs0Ù˜¯ìNB-#ã·mmè–%C±Ì|b0sJÒ“sá’ÚA_VOÿä¯ÊϘq|‹èàâ>§Ÿ¢#-ïQ‹ ¹À¾ï…+ »4_­ es³u:ÛÔóšx«ãýàáåÚ¨º(í–Ù­Ý¥çâØø4a ˆÿÿ¢B,<o¼´OI~½#S«µ¢k£3¸²¯ŽÁ‹à?LË Ã";ÊU%â+¯Ûè÷]'R &ÖôvŸÍ¶±°Á%€ ÷O®z“²0ÄRpžò¯²¸!†îÌ9ä_èpž.a˜H‘¡!bL;Åðsj÷JéöfJ¹ïGÎ×ó6΄ɒVÃJ×g«¸©×IãHö ‘Ð5„ì÷vË[&'¸X ¹=mÓz\õ(Y­TA¼a›Þ§‘2eשK?©Ì¥쎡¦ÑŸëVq ©4°¦›…üha|@0j,hpP.FÕ’C:=œÆ´…†ò“sˆƒ¶ˆ^jô«æ÷¹2‰Ð6騥îT­x ¿|¶$Û½i\äÒl;Àj:6â,Í9™øLé|~µÍñNoâ@BnfÂNÿÌæ$¶=P\zwËY.°²O]Sš;žxxa$o,³W¡ŠN–ò±~ù*øN®:]$;¸ÀÛò2;R69+"I| Ùp›Yá?Ü2b—tlšÌËp*rý0 ?'µ-M àÝS¹Ltd Û/-Oü N&¦@¤DGðƒb œ»i]„‰†Í„OüôZÊr ûÃÞÁÂh?R§5M# ÁûxMêb+”ê_þåÒ}èëÒÒÝÙÀ ¿úS¯C!Ñ7‚£œÃưï ß>8‹ØÄ:+ò9ǧBT)DdyJ åÃìÜÈ:qaBh_çÐÄQ‚'¶R (Lâ|rúÊßdø _Pªl›¶ÙЀP4=¢…×5\µ}þû2&¶ÿÇ–žm¶'ª=^°g…™ãÉ;õš½0›Îã©qêöå‹0±öw©G=Ú9­SQsýGûRø‹%Àà…²·óœdëöË‚Ü1<½yùHàëö4¨” Ð7y‡!E©ËK­ˆán#о„ß1(ÖÁSš2¾Â„Ëdú5;>ÇÌÓCÝÊ¿½&h¿o¼±×ò¹e¾¬ÕVlE¢i¾&•¬7( øÒ¥áq÷­!NPŒxëÙã ›•èÓÈ÷( ΓB.Œàå²{‚ídaÝ_vsÄWI»|ã<H_à²Î~NVâ˜ÆÅmJ¦‰®åëåAÅáåX¹æVÂâpù]+÷9Åžâ ñµOõ4ÞÓ;h¡Ÿ•?´u ˜8á¡FMòv3™Jˆ‰J8XÄB&‘ètšn«7øœd³Ëè v€Ë-ï¿èÄ èþ§iB+þ&ƒ`y¹±¶Z2/,KRÃÀ‚uÒ‹)…úÃp—+8«`zÕK~1[Óµ¯À'œúˆ]÷]›§¡«êșɟ‹¼_žÖÞ‚A;AWòÐÐLÿ¨ñã"]ž)TÜ%Tån(SŒBè+Œ‚‘…6ptxøZŸèRg ½(Vþ›©]fEóC½Þò°Eû¤oØx0v'_ªÊèÓT#‹Ã‡fi»jËë[ª=ST¨ ߬ւ|î4­ûqwpuOÃÔVlÿ­3±;Õ˜ûNó¯­”iTŽï2DmP]ÔÊíÑç>=âW¾TeD7ç%±ð ʰ×-¶KÞâó>e[ ‰øÓ+HAN&)}øûWTK±„|ùW>¥­É¿Kíø#LˆNæÒC*ŸÖK>î eƒ=Y¡…ɽ³ˆÅÍ4v„$ÒØÙ©TÀíëΤ3g‡ @z?öŸ/"±=BÃ7©MJðö¿°x»bŒˆJ|ÆÂ¿~ ‰œE6ÙèôÄ·(ØGÑÔ§šÆìåïÌ0IJ L×Ä Åhg4×¥ü¢N½ÌBòIÎïŠòÄ4ŠþîOØzV,.lAƒà!ö?:ä/"5¤ƒSº\T«Ñˉn™Rµ"ˆÍ(ƒÂð<½ØÿÙå°üÈ«q` ™¢½'ÉÊ•)‚×fRÕ ¬Æ§fK«-Ùóò^.A1Z”V½c¡Ý Íkôò¨ ¥~ÖœÉ[ Èú˜ërPŸçm×H-;æò»ÚÉþò fy“íJO+ePÑ'AN@-3hz@5jŸ‚¯(ïïjp£ßá¯ó’<å ZÂ@œJ4ÀwúªiÈ'DùD­œ$4è/Ü—wíjF‘ÏÃjl;ÞpÐ>BI¬ÜZOj#=€5º'Ú–_µcö†ò6&‹îSÏ2þù"ð ÓØï±Fð‹ûÔîÅAK¬ ¯‡žïeó&ýÕ‚@!‘l÷ åócÚrF 8hÿ¾lS¦¥ÖæU-ȡޅԂ 3Ú§ù!†5a§c7œ³$]Ÿ´}#¼øigòŸ¯¯ÏËB +„ Fè, °ŒUì6¿½$èîššÑ;\þ%IpÈØeM±å¼âÍâòǯZÀVÀ+¡ÈϯB¿ž‰>D‰HkK !¬º&¼÷©¾Ëã“)”Óú½ô¼¼Š ì@dÖ$ržƒØ3B™¤½#ƒƒ¶2©®o1fÎïÕ¶Þ-JŸ®½Â˜$0Ü4‡•Ó KA@ƒ@NkGŸ`#Ó/x{ ¹Ÿ_²¬ œ÷jüžf¤˜ŽL4Þ 2+ ¯&¨@÷_¾#±Ó_Ìu|¹„ošê›/Vƒ’ßöú¿ÂôÍ ënP¾.¾êŒõ¥ž&€óÇMX1Õ¹i–ÃÁ^áGÇw@àkFPè†÷£ÎZä|¬¦.˜íÄÛ©øVhâTá'*ÔNö®û?JeÑk+ü`ëÃy³'uÿ=UoNýÛXRËç°Ð©Ïi0õËß%°{ðÙ÷Œærðö Ñfó¿™ º¨EŽÆ¨Å7-Œ'ö¼¥.>@×Aï\Hwb ö7R¦ŠýDÄaúÉì›[c˜³x-7aRÌÿò¥çŠà ¿Ô‘4-ò(Øâ 6ÔAë•fG¤sš‚¡'ØËœƒ Rï‚|>\» óë^·ÄE¾i®0åI+åzmª¶zël±’µDò¡¨{âÿ68ÑwÅYý'£åàØ^ÐH¬ÂœpTc2³`¼T{²]6 *ŸT¡Ò|hÝPßÍÊ8B‘äŸu‘›ã3=wJ& ^˜/Ì­s‚ ¶…D›C!µï(Ïâdì™:3õÁæ<«nº7mÃ}+ÆkÚ©dy´ÆÌjjân™ ó^£AÔ¡[ZNÇf´IHrfM«Ä¯'¦á¶>Ð0®ü4êղXõ Cþ?ž.Ô±UXÏ·u3¦ù³ Éa¿sÖªvdL §Ý¬nÊ}æ0†¦P˜â‹%žigÑ%ÿwÕ²,§Fèšó¼ñÌ ‚ÿtF$ÒÈõ"Â,” L_ÖAŸÓ‰Lmk¢ÁbÌc'úsÛy;®Q‹R óPÄ1ëh·ÅâÎpœ>öh-Ë£³Ôת1•&‰VhF„LV’@Ñ¿õÒêöm!„‡wo2ÑÆÖ)XTÝyJÛÏÐQ×é-”"ÖøB‰(@ïch~@ƒ³[$¬ðœ^ªq&Ë™géEÀ|þ3=šäƒV™P|Ú¤å›E÷ßÀ6¼hî—KÀµ/Û‡òŸmØJðé>U“Ïš¤W÷ýnvýúáhCäúMI6Ž:Ù'fJºçä¢[[ÉÈÀõ[Ʋö–\ðJNIÏmß÷4×(º[tÓåSµèõÍ„„þqv§èÆgò ”¦§F×¥ìK=ÓbÁ &ö ÆDT䉘ïo8ÿM½ç´Å8nTæSÄ“ßq²œ2Ñ )äštOr6§ž‘fã6Vu°xHZ¢æ‘œþP8µlí5o”Ç2&Um˜'‡HJýõ²<Ït÷´*ÝIR3¤ËØ]÷àãLjò˜…uvd¾ÑÖšÐ3[ðŠwÔ¾—êÐÞ8Í9›Åœô½Ò Àê ®ÏÓò+ƒ†¬Ý·¿b°ÖpO¨B"sßuÒo éÀ Mæc‚G˜xBáU]¶Z5œêNÔÌì¾§$¡†W†Lð“ð?ž2øYkŒM×ìáà¡9ŒÆ^¸¥õ_YqÄ·ÚÁ`ú 1Ç?ÌV$*zôxï,ËÊ[~ºèœè¿ÔdvŠ>ªÕ êÐd|gMÑmQãžÁQuÖÛP èrÌ[•'ÇæK}3qh¤7EÞüYÐòÈÛöâåI"¯DïVèµ™ ³CX×ï±3ÚçÕöÃ+Œôµ·.ˆ­üÉå½Z;'’¯ õÍOÁŒÇ;䙿ZO:}ÞTÛn†[P«N Ù÷O.$‹q¡’žc³UN‡¯›³>®ü˜>=òK5cÏß"ŠìƒÕí4Zê³J˜ZjzIò³N;âñl·?˜p>õLRuÅQ@ê5“=K=ù„ŸÜŒ%U2ÄyÌ`öÔ$¾Îç{ƒê98×‘ŽœÜ™7¦ OÙÜ­³æòsQ+Ô"[½_šðh§”i>¶ÌQìÀ Y\Õ“ªÓ“ñwÀ³L ¿xi§³&=Ð7ûíý,hÜW)¾ª”éþÙ€!iD WéJPó/+›Aïf¦èh@GÞxFLeFJ l(ùŒapÜïZÐ@–z­—û™a’ŠÑ< ÔÇdÂm>½RÑ{~/Nb=³6ǹ”“ádþàý¤WKí`l¢µÜUþp\â¥ò›~ ù¸êü=ý€¿NAMNM\lz6

9"_ërùöîŠîcËSu—ìD†dÇûüø2ñ U0Ç`–VçcGòwøá—h-ö9câä”¶?GÚ$ ¢ðd¯2÷°–Æ„Dîø PŽl6I_mu'²"ˆë—§ýXƒJ º2#߉M}\Üà§D˜ñBïÓ ‡ø©œ„„Â[#ÏB˰|½mL-з¬ëõ÷û5ZÍrœb^\ÜÙ¸¼ T7?ÿ«è3¸ÐCñ˜‚JHü¸-È“1†3µ‘zœáêÿF+ªÓý~˜ˆ…æÚ“ÝF¾Wa§0θé—FÊ HÉ(xú´DU°µ½D¾à¹èZøÛdanÌb3µVb" ÕC©ÈP-Giá葺£­€›÷ /„èä µ¡kÅ”VdݪmVñ)‹Ï£ Ñ.9r8Û,þTûù²×\1kÓ•ø§¨@燈6"¾\z\Ÿñ^Gç‰w~wj9ËÚÁl±&~ª—ö'ª°fêÙª¹mçñxéṵ;_³þ§•!C¢±Moç¨ þR¥\~wélI'Wš¿aùÓ±ócnq–-M¨Ú…ÛÕ\±ô0Û­bUj4ç_-ê/l|sÈÁ(–Å¿‚ýéx;§¥—{5pj3ÛÎøa÷7PGNØ!©3g¸³•œÀeBÖØ9#œÎì•û¢åªÞdÝÖxÁüç}óÏ‘·ÒÜM9è8Œ¤ï¶-ðO*ú¤F¥ÔøÏ™ðv;Úegx\5†àêK]²,6\C¸±õ (lù¯ÉpG¢°–y³?+(BJc¸d > ûQ¶gÛAºUÞ(w_`SMÐÜЬ<{}R«ùf·ò”nQÓ*üín%b~µùÞÀ`Å¡2FT0 hR4ÎÅÚÑÚþx0]tñ ?\= be´ônÁ‹l7q%‰ò½÷¹‰R]䕊xß…Q }~»Êú¿,B“é×þéïÊ'ø&÷CàQœ}¼ÉI—AËÕªx½ZÏ“ÙW’›O½Ë[98·Íêî¹$óÙl ­ìœDR °ð޵-»²é¯ÇZ—šP >Ç0¤sN±3GóËWØÈ1€3Iò能±š:?ç̱x¯‰ËX²î>3ø£‹Û^=›nãY ~7ÑŽ¶ðEJÛØ÷F‹ûÌY!}H@¥ëÌ#œ¢&˜fL¾UÎðЬãv…YËg$k¼Èò”„”Š-W;ŒWníul#žT:[vŒÍÃ¥fb=å+÷Fæ:’Ï›]³>wªûpèˆáªŒ‰ÕÎ hÍ•»Ø¤O¾¯~4l‚rOÂm±Ró‚‰'Sl=Óé>‹¤ÇeãÒJñå‹À,á‚«FÁ£7úñˆ« ”êãI>ÅAy"Mig?¯` à¿0Ö&wã(;64Q‚R Ô]á´'Þ(\ÝÔj±Y˜JÉ•×80š*#õà¥? µ6³9—nÛ:œY‹"ŠâtžMüñY­WF lK¤GH›t)wõÛ½fnIæOê0×È®¶ŒF•hN(AçF ŠïdÕIå´[7R¨ s$'ô§A¾¢fßïvÅãÁ¦_G¡Â~»Cë° R»ö 2øýw„ L^ú ¦ëøëËÍòËÔ×äË·3_]Àèßgtšã z†(È9 ïCÔžU䂱útF@[AL÷ÈõÚÅÑ\´½³«w“8c­ó­•02vqSG¯LÑo 4¹Ž¢~è0Ü€¼–Ï¿TG·ãÞ ÍlGÒ§.Aú’D˜wšØL£ø²Ó,ºÎñ°…˜¥Ò© ºv¦ï¢QёӇÀ”X餔Pf•`S\™aó‹gÉ„it(åj;ªEÓ~„qó\ÑÛÓ‹ 0ÃÛ5U˜¥ØCóŠý 5¥5K’¢V î—ät›WS˜ Ô%WS–Ã[ »|Œ”V‘ÊD£SêÞ ÷+QDnÍzÈÞ–ÚE}$êE` Þ8_å è[¯BPhK}¡[;aø‡·Î2ðv]ù›0=ÿÞ¤rHˆ*BV¼ŠrkÜŸÃðuZ/Π7n)# ª¯Ì¨"&Ã]É¡ÜõÒ2qôCÜÚêÄû õ=«,+\.â´:# ‚é°§ÒççÊxwЇ’矱A€3.×¶¶Ý{ùG–ù€aA7˜.ñò¼ˆbüîh†í—?|Œ£Ú£øœº¦“èÔ6ì’8g”OjCÍWO ož(öM† ·JV<¨¤…ÓROBŠQÊ$Ùv®•&ލ(™[®1Ðü}çê´¯Á“jËŠRÅEÓ‡ÏÍær²®SËP4÷‚Þ¿À+¿§ð¸µ^ â#P5(¦/éÊ=¶²*Jýì+ŒÑ‘ðÄ…J1nu'8æ8íX¦²)TqÍÈèª15€Ál/˜»µÜv“zìZîã¾…î?¼r…Re¿ŸÅlM[÷гÂmDÛÒBÖ L¥[]˜ –r‚Ú°£#1ÇLt7˜’¬2&î5õòú„À3³úsÏH?—»OW8´^ÞºNÏ’9k3è'¢{1¼N³ú`À(¿§y¾RûÎ!Æ……|ÿ®mØåœrm-lè+ï¬V#>NË¿À#+Õ W90szÁ¹·q´ÜSCùäÏ¡s¡ZR•Ñ Ä­¡™÷£‡eÞü‹)…ø –.¶^mÐÁð7” ÷èp-‹I{Ï‹háUI•ÌÁpRåòГâî9«²-­È³d‘Õ8RÂH~Šœóf|!‚kæÀHà$E4ÃópIù&²jvç>½j5À¼+ô6Ò ¸™¸‘,ÍVãÂyݺ~=:Ò$Æj¦a.U x]˜ûi@Fk€Ùª*2çpƒÉt76ï5ž÷ÐG¦¯åžtß–Ö·sz£¯G7áäæ­Ñ4êTñã>˜ð¼ÖxTÎN=šMDÍíºØâ]Fo«ÖÙØˆ Þ®!uhɇ„¥€A²–VâU ߘîrN­0S9"aÙlteÝ‘;T"XÌŒµ„Ò°çÃÁRqRÕ×·™ka–‰ÂN­‚±˜•0îE‚ˆñ˜ˆ<²^­ggá”·U4ñÁÀPw¬)ÏÍQŸí;vÀêWÆÖìs5 òz¥§Ò)¼ÕææWï\ì—xíøæÝÈmrÅšëÛçÕ)¸TÇ©¹@!ôϸÀ!ˆĵˆ¢É`šÕ¢G¦òÜ „ðññ£r¨-|}úŽ%N"I£‡:³ž`?[4¡š–_@IéþN^åDx…xˆF›¤7TðÔƒ¶1ôa[Ù#áG9Ëíõu¢XºÆ5¡Lô{T¼¢ž“Ò=Y9P™#Œb·4Œ³ï8>`&÷I…¼'cx½Ï¨]5  l» »ö4˜ï‡Ÿ>XçÁê@+sRVV¼ÅUd·Âw,V@ót|a黾—ƒÿ¸ÔÀó°y±oæïªäô«Á Üå4ÙÀ˜ìŒ~À=ÝghRjσñEª ³ç½7Ú%ÄÅ*gPMâfTSª¬~W› '8¾+sÆvÈFÿúë ï^>ÑoÂ6Ñ(±´zÓN$ÕñXdàqÐcU0#qhFÕEå´¤—¼Ã›Ð/ƒ¸¿¤Ã’ãDÔ<‰À˜¼r_‚bëTïwêj£×º÷ ¥*öOÞô G9íÿþm¸Ð”h'õ44ïå{=@T¯ÝþàÇ„Tqã6TöŽ`ó­HƒÈÆÐöùžˆ‹8 Ýæ«Õ;x,*S9v;ɱÓ&P£"I®IÍÿÅ͕ɿÝ*Ã\‘MÈʶ(_Î@ù† ‰ÑL.âƒWý @àò²4qÈZ]é(iH:î4í¯ƒÛ2brd]AÖÖLÏùxgíîÿɇ‘jB_,ßßÊŽÝ5«½­àˆÝ£_2-Ñ14NÉùP#_–´ËcÇA"|ac#½¥§}€ b()¡?³ ÒkÞUC`ù㾎qrË…m†p·‰z¡'Á‹t*„Ïy³ŠÌŠ09€Yj4¹N·–U±Ø!fšÀhf‰ ]&êÒ0)wIÙPqÈ"UoäªjƒôAF~ô\#¡þSi×Ò}Mpqr4K>üA·ž¿`Wd4’¾]<ÁA××~ß„P5Ü5¡xÁÐg(–Ó=R0ØQ@éJ™=’KnJ+RÖQ/3ÃÈZôi&.L+3l´‡@ Ù×øÏKÉšW„©[Ç…k,Æ÷8ëº'P¤[{­7ú2íÀ‚\è^sšð-@Å­6bjÒâš as£ßáMRQ23ѧS‚‹6DŸ^/­ÙZ¨'ܤfјJ·Zç•åß›{Hi¦“Öí/1鲫¿-E°Ï l´ÕNÌ—+ÕËæ‚ñ~ µ-*Ù+%‡ ðR`ð:Ý#£‘‡„½½µ6çƒsó¯’5̤¶O=bج=F)€•Ï蕨Åô«ÈÛh±¿¢yL$Yq¿ŸŸ¥L˜è !2ú½’bõÙtåœbðÍ+’õ_(èªlgÇuËÏÙF^N]¦õßZá\·ó™¡UAF„¼—‘²-ÕbН?;'š6“§ÂWnEûäÁTü’ÜŸ¤þÙï.qš¶LÎÊ K5+1„tf—54¨¯\:LÏÁ¯§É‚$>KžEvï½WóÔmm/êyš¦\<4ž£÷¾•©—x³xÂÍïÚþ†Q+ÃMª0ÒÅ €a/ózÈXjjg"ÀøÙMSáóÏê<b×=-ü´–Ý=¬Q4€üzMdЫޭÔP£çh ¥¨ãÑ2ʳª³T6€HESnùÜ}1곪 ‡ý´ã—Ö׎òœËG± €:j¸O9|1 Þ#(è!ùD‰Ò½ægéóꔞy˜á £zn.Sô¶fd`ÇI7æavß\/˜F%ŽßØù2màDçpñC¦fUH'(M± <¦³:Wcf°vGÌñ±f…UWe‡¡Ñ#>Yû ÇÍ…&§%ÞÕÐ_¦3ôÓ0K ÿØÍ‚¸²$ùÌÂ{]u2ÉÁHlÀ RìKN£D¬—d ÿUÆ[r+KD[5Þö.—þhV•ÁÉ\'Lk–ÜÈð_u d–‚…Mý†›Ü…×t¿ÃYFÌˆÇøö÷üÎH½!ÆÿìÉÕ<º·¿$¡&åëIÓ[Üqôjn#{'F`€gÝ¢ÎiAÅ{o 4“4™V3•)‚'D8Œ,xœ ù”ñäqÖVŠLœ1ûYçH˯`íQÞxº‘›õãðqµr÷ÚË2ùÿ€Žõ·/ÊðÅdô£¼Å:»f6}j lBI¼²(Ò˜‘c “ ãÂoÛïZXôÇ"6Dw¥be•ô-ñEA,;VÖç×Õÿƒé÷jxI¼—«3Š#¡¤­È«r¿½Ìƒ§‹ Q•|säÓ"ïÜñâ­¤–è d–Gßá}ˆ5÷:>ý¶!ÙPãï=€èùò»”D“1 ¸()ŒM‚ˆÀ{[êìŽ:ÎÍò•}øºç»"n-Õ« ™´Ìå‰Ü4 “JY¯KëWQÚô 3Ä X'µ2û£à”ÒòVÈ,“‘œs§.lÉ.‘CU¥(üšF0ƒËïë7}ÚècÂEÔƒ"Tk\Æ…SÛ^ {µyHÕtT×Ã^Ðw&0ÎÅRñK€È•D»LWÍ5<Ì`õ ÷»‡G3’0á"½.SÇs°È¦×Oàa@zoIöM§¨Á-r±_éÿÅìã*žbV)†[g%ÓÛgjb¡ñüÑäyc7ׄGà=ßý-ãæµå§ 7a/çúÒ5åí§~ ñmýßl¾ËrÛ .yAYûÇÙ½ TGLíŒz¡kSĶηª}†2£¥Ãù?8² &Z‚ó1¸†ñ„Ë”÷~^ÑK¿7Ɉˆþ˜ïé¯Ïjš)óFP Îa‚åÕêdá þÁu^͵˜9bà[s$ËD"^ï0(L™Ç‡¹©ŽÁ¦O±ÂÚWð7eg»ÖÊïo%Y—þ!Ù;t›ª>®F[\²§> endobj 13 0 obj << /Type /ObjStm /N 75 /First 602 /Length 3210 /Filter /FlateDecode >> stream xÚí[[sÛ¶~ׯÀc3g"wàL¦3±]'Nc'Çv“œfò@K´ÍF–QJÓþú~ P)Z©/ÊéÃIÇ…@`±Øow±»É2&XpL8&µ`"0¥3&3¦-F3:0)™±ž Ë\ÐLZHYz „²La±ž)‰O…µ† mSø´Rƒ-öx#/‰ >ØTfô –ü4vC+&øiÁ2Ë4±Ì 3Ð'Ö¹L3c˜ô$ĺA` Èž!Š¢G"Hln%SøYˆª!$à)M-!Æ&.ƒ¨˜tÍ‚™} gÅ´f‡­2o{޶vx¶Ø›8Çl°Î3«T€ŠÀÄ^€%˜zVxð 1Àã–`s@âe/`JC™A1o±_0Ì{„þpLa#(›ì4d‰,"¢A ý’%,øµÈ¼’=‹Ï@2Â4¶¡V3˜@è 2àÓ"©c‘£ã!½¡N€Ì"šS:fˆ¯t`J#ZYÑ1гÆBi íJFwôœ)ê×{ò¤ÇOÿ¸._=¾;ÏŠñ¬b .wÜãÇE5™OEÿ‹‡Å°Ìw&_Øû &˜¾¯E߇=p™b9mNÔ?þ7ØSöä ãû°Pœ¡.„®»p6»…þ£P}Ý…„E—p,ú‚P÷ QìcSþz:œ3ö¸öö?-¾Ì؇…<7¾ƒØÞòî´Ègåd¼—Ï öÃÞ¿%|!SYJ¨L?ÓÉpãÜi9aæ˜=›æ×—å b¯æ³ëùìQ6œŠ)Íê¾ìËGõ^zÔFHzïñ“ùÙ,>Ò èñ£üŠædïäUmߣÏŬä=þÓx0–ã Š'5 ÷ü`w—ˆ‡8ì4ø¡±É‚>±[®æoËñÓqU®¦÷Êóóª"Õ¾ÇiåWåx^±`ù§ùdVŒŠsR¢æÃ ÐWUÉ/¦ùç‚çƒù¬àƒr:˜_Š/|Vކ¿ÊÓɘŸM Ð`I>À |Xb‹ª¬x<™ ‹s>ÅÞ| ŽFùrðr>¾È§ó«Q>ŸñÉÅd\|䃜øU×ù øpƒã®üòvøîÕÙoÅ ­>¸™yˆsJ·îœÒü_;§ºÉ9ÕwçÜäœK©Ûßc—îÛˆ·]OF:Òñde×=Yémd–&ð¦>š:X€½¯è¡#ºÛŠè 7俦m–@ï CËu:Û6Œ›3z#7Á=éRw¤í?æRºãRÚmEô›] š2Ù ‘â¡0L§Z4bÛ0nïR÷щLFoĆ#ݬ6”·–Êú ²Y‘ß¶Yà¯ö&OkâhÀ[Bz¸½¬^Ggå·D÷7·”¯£xo¤îcóÕ'öÐ&ôCÝ®žUfû¶1šž›£¸Öõqÿ#ÆÊ¾ˆt ŽRmæû¸]«8¯lß`WÜCût©Æmœ.š:€ÎZZ ~Jžæ\–Ñ8ÖëE_è>îk2`Äj‡>.ßD­tß‚¯S|q“Æ­—jGtZxBà3´ÞG.ÎôéZl- E"¯‰±³¾¯ê¾W´ÌJbï<ŠH\¸u¤ }ºðZX±~H-îÔh• "m躟ƽ#Fõ¬¶$yd­CXnc„Â6J+Â9¤ñ´ªЬG‚"ÎõÚ}¢!nc”íY*õÞÀ¾·ßÛ[´ßýå{{G±¦·SFPÜq4›F• 8•Æ-²‹¯G‚ñÈõÊ}¢ÑN¥L‚ N™‚â¾t”´£Lcƒ¦}kM{CæYpªûÚÐÈe«³eÄNœ’¬ûu‹ü&½_ÆîÔ§Qç(ÖRDNFÐ ­£,¾Ê(s¦õi\*â"mÌ®‘cq¡±¶AŸZ¥)Ã*óFÌŸ‘Î :£q4áJ-eVQ·µìIÖØoާ~Š2©îÖ,èU‹ÛCÚÄ'µi—f›ì[ ó.-+ñ¿¥Y[ÑH¢ðšü#Ò% Qu‘V§| 3½à”Æãúz‡è#Iq‡D[‘I·džÚè 5¤~Ç9’!#ÓÚ9ý–sÄñZÉq‡h©œd¦zmƒ>Ѩ#:P2\s–À¤^jãÞp¯2R¦D×z- _,æ,ýaã¨!¼:‹ÇÜ:*†lF@K?5艗Tm9œoQ÷©bTI)6–Zšª>ÚVe".zH­æ®±ëT˜R?ûˆ¨9KlõòHš,ƒsÚÆ\¢cÑÌé99A\±¤LóÅšBEn£åši®>œÔ‡æ¤$´ñ(P_û@–|@›ø¤Ö¡äÔ­V[*âê‘T6UÀNGW¶6;k[QS)CC&WBDZ®žOimÍ[Æ`¦ã\¶¤Š­È2³|H­ )¯Túi<±lÎ&Ʀ­¾„K‹M­Ž8N±ÎÕ#^ õÚ}¢Q0µ–)öãlÌK±ru·‹Õ´Ë¨ÈWQeÚǢȡ r¹>yq¢¡qÊ$Ä¡î(9mÌ/‰.¶ÁâÕ¡œ¤lˆÑŸúi³|TžŽ/FÃäɬ¸z'îñwõ„0°¸Ì§t÷ýù/ùôQ’`¿Ä2Ÿ5ïÚéÝÎÑ› ’Ü IÕPr° Í·„ô?â'<ç^Dp#~ÅÇ|¯ù”W|Æ¿´ÀÊ»€}¾÷bÿõ¯ ¬Ö›À ¿k$‚æ7ûpŸñÀ=àa„|yè9ÿ} ¸¾ ð—o~~÷ëS?>Üì¸Â“ãJÁ„6–.Þ à>´€Óã]«¬ |‡ïñýþ%?䝸kXý”ÿÂßð·µ:“ÑdŒöê*ª‰Œø9?Ç_‰¿Ï?ŸÌ§Qe—\_chî7þ±ÖÞ¸Páí5¿¦/¢è§¥Ô›FV×Å´œ ù§ôÃS#}WÅU™6¯ŠÏàZ•_x5Ê«KXbv9- >û}›|&«ð?øŸüÏb:i™ÇÞÅ<û/ß¼Hæ‘›ÍcÈ<̃&hù-ÍssäѤü %}N[ èÀöw}´ûìÕÞÛÛI¿¶Ót‘„•F8Õá[¦ÃxÌ[‡ñ#œ‰âZì w ´‡oŸQì99ùJîÈÄâz… Ä ,jÙvìÑ=M¨ñä,¢ÍçÌ;…ØŸŽ^%˜C¬@úN®¬ Dï›0…jÛÔÜæª³èN¡óÍ/''t6ON¿:m@–áä{åW€Z£‘/²6’ÇáVAs.JAó9‚æñZÀ<ËS”:›æƒø;zê¥À6XFÒád4ʧP?Íó/¾ FùÅUЍü‚^#(¦Í :âôK|Šªó«³bZ•ã[ÅÖëѼJáux6Jª$Äu ¥ðº!¨®Å–p§úëӃݟ_Âl§›ÍÌâ´ \Ô½#êc¡oa=Rý(†’ŠÏ[Èî5Þü÷-9äéé׉_8$½yw‡¼mßmøä‹˜Ê;Ú¾™Wƒ²L¯klÎëÉÏ[yýWLù}厔”î蓔ÞÊùšg>´€qºfÝðŒt©¨Á¥lq—’5À¥ƒËTh,7!…¡ÒÉKJ®•WÃO0Hܨ+‘E¥GõG´w²MÔòB ÅD$«-ì´Ð+³¦ãüîŵ‡ ÜCíÞtä™UcÁ5Jâó:¯J;*Œ?-Kã• –ÞÇl¿•~¸•A*Nñá6¯S­^¢ê^[‡™^„¿î—ÓjF§‰|¥Ç_æ‹' 'oËáì²¢—l#íò}*»!X|M î%oM µ. Myd¶’GlAžî=lMÓ‘Çl’ÇmAžîõhM·.t-yäJ»yº÷5yº <379219B70DF26E697897A860CA01A60B>] /Length 289 /Filter /FlateDecode >> stream xÚ%λ2qÅñsvEk“ $.‰¸“Äe]ã±HD¥¡Pè̘ñJã4ž@EeôšT £õ^@…óÓ|æ{þÿÙ ü8€G>T±-6Å–Øe±+öÄÝdÊž¨^Æ**"zfÓ-""Z ¿ô÷¡Ü“Ýz¢H¿Ø¬Šv¢“ȿڭ/ºˆâ‘Í„ˆÁ­Ín‘$Ê¡Í^ÑC„›uÑ'RD#bg¡H‹~â¸bg"Cœ6mî‹!1Hœ_ÚÙÈŠaââÓÎÖENŒˆ5‘£bLŒ‹ 1)¦Ä´˜³¢@\=ÛûŠÄýÿO–ˆ·/«9’VóäɇÕy·Z$ëVÙ¼³Z"ß¿­–éÔªV+t®«Uq(t1ÐÍúø×Å%• endstream endobj startxref 204559 %%EOF gridSVG/inst/js/0000755000176200001440000000000012616240500013144 5ustar liggesusersgridSVG/inst/js/utils.js0000654000176200001440000004447512171060447014667 0ustar liggesusers// Note that this code is documented using JSDoc and guided by the following URLs: // http://code.google.com/p/jsdoc-toolkit/wiki/TagReference // https://developers.google.com/closure/compiler/docs/js-for-compiler // NOTE: The following code assumes that a global object, "gridSVGCoords" // is available. In other words, to use this code, load this object first. /** * Returns a unit's x location relative to a viewport. * * @param {string} vpname The name of the viewport that the unit is drawn within * @param {number} x The size of the unit, based on 'from' * @param {string} from The input unit type * @param {string} to The output unit type (optional, defaults to "svg") * @returns {number} A unit in SVG pixels */ var viewportConvertX = function(vpname, x, from, to) { if (gridSVGCoords[vpname].angle != 0) throw new Error("Viewport angle non-zero; consider using viewportConvertPos()"); if (!to) to = "svg"; if (from === "svg") x -= gridSVGCoords[vpname].x; var width = convertx(vpname, x, from, to, true); if (to === "svg") width += gridSVGCoords[vpname].x; return roundNumber(width, 2); }; /** * Returns a unit's y location relative to a viewport. * * @param {string} vpname The name of the viewport that the unit is drawn within * @param {number} x The size of the unit, based on 'from' * @param {string} from The input unit type * @param {string} to The output unit type (optional, defaults to "svg") * @returns {number} A unit in SVG pixels */ var viewportConvertY = function(vpname, x, from, to) { if (gridSVGCoords[vpname].angle != 0) throw new Error("Viewport angle non-zero; consider using viewportConvertPos()"); if (!to) to = "svg"; if (from == "svg") x -= gridSVGCoords[vpname].y; var height = converty(vpname, x, from, to, true); if (to === "svg") height += gridSVGCoords[vpname].y; return roundNumber(height, 2); }; /** * Returns a unit's (x, y) location relative to a viewport. * * @param {string} vpname The name of the viewport that the unit is drawn within * @param {number} x The size of the x unit, based on 'from' * @param {number} y The size of the y unit, based on 'from' * @param {string} from The input unit type * @param {string} to The output unit type (optional, defaults to "svg") * @returns {Array} The converted location in SVG pixels */ var viewportConvertPos = function(vpname, x, y, from, to) { if (!to) to = "svg"; if (from == "svg") { x -= gridSVGCoords[vpname].x; y -= gridSVGCoords[vpname].y; } var width = convertx(vpname, x, from, to, true); var height = converty(vpname, y, from, to, true); if (gridSVGCoords[vpname].angle != 0) { var theta = -gridSVGCoords[vpname].angle/180*Math.PI; w = Math.cos(theta)*width + Math.sin(theta)*height; h = -Math.sin(theta)*width + Math.cos(theta)*height; width = w; height = h; } if (to === "svg") { width += gridSVGCoords[vpname].x; height += gridSVGCoords[vpname].y; } var result = {x: width, y: height}; return result; }; /* * Helper functions */ convertx = function(vpname, x, from, to, loc) { var i = toInches(from, x, gridSVGCoords[vpname].width, gridSVGCoords[vpname].xscale, gridSVGCoords[vpname].inch, loc); var u = toUnit(to, i, gridSVGCoords[vpname].width, gridSVGCoords[vpname].xscale, gridSVGCoords[vpname].inch, loc); return u; } converty = function(vpname, x, from, to, loc) { var i = toInches(from, x, gridSVGCoords[vpname].height, gridSVGCoords[vpname].yscale, gridSVGCoords[vpname].inch, loc); var u = toUnit(to, i, gridSVGCoords[vpname].height, gridSVGCoords[vpname].yscale, gridSVGCoords[vpname].inch, loc); return u; } /** * Converts from any unit to any other unit along the both dimensions, relative to a viewport. * * @param {string} vpname The name of the viewport that the unit is drawn within * @param {number} w The size of the horizontal unit, based on 'from' * @param {number} h The size of the vertical unit, based on 'from' * @param {string} from The input unit type * @param {string} to The output unit type * @returns {Array} A unit in SVG pixels */ var viewportConvertWidth = function(vpname, x, from, to) { return convertx(vpname, x, from, to, false); }; /** * Converts from any unit to any other unit along the vertical dimension, relative to a viewport. * * @param {string} vpname The name of the viewport that the unit is drawn within * @param {number} x The size of the unit, based on 'from' * @param {string} from The input unit type * @param {string} to The output unit type * @returns {number} A unit in SVG pixels */ var viewportConvertHeight = function(vpname, x, from, to) { return converty(vpname, x, from, to, false); }; /** * Converts from any unit to any other unit along the vertical dimension, relative to a viewport. * * @param {string} vpname The name of the viewport that the unit is drawn within * @param {number} x The size of the unit, based on 'from' * @param {string} from The input unit type * @param {string} to The output unit type * @returns {Array} The converted dimensions in SVG pixels */ viewportConvertDim = function(vpname, w, h, from, to) { var wi = toInches(from, w, gridSVGCoords[vpname].width, gridSVGCoords[vpname].xscale, gridSVGCoords[vpname].inch, false); var hi = toInches(from, h, gridSVGCoords[vpname].height, gridSVGCoords[vpname].yscale, gridSVGCoords[vpname].inch, false); if (gridSVGCoords[vpname].angle != 0) { var theta = -gridSVGCoords[vpname].angle/180*Math.PI; var w = Math.cos(theta)*wi + Math.sin(theta)*hi; var h = -Math.sin(theta)*wi + Math.cos(theta)*hi; wi = w; hi = h; } var wu = toUnit(to, wi, gridSVGCoords[vpname].width, gridSVGCoords[vpname].xscale, gridSVGCoords[vpname].inch, false); var hu = toUnit(to, hi, gridSVGCoords[vpname].height, gridSVGCoords[vpname].yscale, gridSVGCoords[vpname].inch, false); var result = {w: wu, h: hu}; return result; } /** * Converts from any unit to what R thought were inches. * * @param {string} from The input unit type * @param {number} unitValue The size of the unit, based on 'from' * @param {number} vpDimSize The size of the viewport that the unit belongs in, in SVG pixels * @param {Array.} nativeScale For the given dimension that we're converting along (x or y) * @param {number} dimInchSize The size of an inch along this dimension * @param {boolean} loc Is the conversion for a location (or a dimension)? * @returns {number} The input unit in inches */ var toInches = function(from, unitValue, vpDimSize, nativeScale, dimInchSize, loc) { var nativeToInches = function(nativeValue, nativeScale, vpDimSize, dimInchSize, loc) { var dist; if (loc) { dist = nativeValue - nativeScale[0]; } else { dist = nativeValue; } var nativeUnitSize = vpDimSize / Math.abs(nativeScale[1] - nativeScale[0]); return dist * nativeUnitSize / dimInchSize; }; var npcToInches = function(npcValue, vpDimSize, dimInchSize) { return (npcValue * vpDimSize) / dimInchSize; }; var result; switch (from) { case "native": result = nativeToInches(unitValue, nativeScale, vpDimSize, dimInchSize, loc); break; case "npc": result = npcToInches(unitValue, vpDimSize, dimInchSize); break; case "inches": result = unitValue; break; case "cm": result = unitValue / 2.54; break; case "mm": result = unitValue / 25.4; break; case "points": result = unitValue / 72.27; break; case "picas": result = (unitValue * 12) / 72.27; break; case "bigpts": result = unitValue / 72; break; case "dida": result = unitValue / 1157 * 1238 / 72.27; break; case "cicero": result = unitValue * 12 / 1157 * 1238 / 72.27; break; case "scaledpts": result = unitValue / 65536 / 72.27; break; case "svg": result = unitValue / dimInchSize; break; default: console.error('Unsupported "from" unit: [%s]', from); } return result; }; /** * Converts from what R thought were inches, to another unit. * * @param {string} to The desired output unit * @param {number} unitValue The source size in inches to be converted to another unit * @param {number} vpDimSize The size of the viewport that the unit belongs in, in SVG pixels * @param {Array.} nativeScale For the given dimension that we're converting along (x or y) * @param {number} dimInchSize The size of an inch along this dimension * @param {boolean} loc Is the conversion for a location (or a dimension)? * @returns {number} The input unit in 'to' units */ var toUnit = function(to, unitValue, vpDimSize, nativeScale, dimInchSize, loc) { var inchesToNative = function(inchesValue, nativeScale, vpDimSize, dimInchSize, loc) { var npc = (inchesValue * dimInchSize) / vpDimSize; var vpRange = nativeScale[1] - nativeScale[0]; if (loc) { return (npc * vpRange) + nativeScale[0]; } else { return (npc * vpRange); } }; var inchesToNpc = function(inchesValue, vpDimSize, dimInchSize) { return (inchesValue * dimInchSize) / vpDimSize; }; var result; switch (to) { case "native": result = inchesToNative(unitValue, nativeScale, vpDimSize, dimInchSize, loc); break; case "npc": result = inchesToNpc(unitValue, vpDimSize, dimInchSize); break; case "inches": result = unitValue; break; case "cm": result = unitValue * 2.54; break; case "mm": result = unitValue * 25.4; break; case "points": result = unitValue * 72.27; break; case "picas": result = (unitValue / 12) * 72.27; break; case "bigpts": result = unitValue * 72; break; case "dida": result = unitValue * 1157 / 1238 * 72.27; break; case "cicero": result = unitValue / 12 * 1157 / 1238 * 72.27; break; case "scaledpts": result = unitValue * 65536 * 72.27; break; case "svg": result = unitValue * dimInchSize; break; default: console.error('Unsupported "to" unit: [%s]', to); } return result; }; /** * Rounds a number to a specified amount of decimal places * * @param {number} number The input number to round * @param {number} digits The number of decimal places to round to * @returns {number} The rounded number */ var roundNumber = function(number, digits) { var multiple = Math.pow(10, digits); var rounded = Math.round(number * multiple) / multiple; return rounded; }; /** * Returns the name of the viewport path that a grob belongs to. * * Note that this is going to find the first matching viewport path from * the list of element IDs up the tree. It may end up incorrectly returning * a grob name instead of a viewport path in the case where a grob has the * same name as a viewport path. * * @param {string} grobName The name of a grob * @returns {string} The unique path of the viewport that the grob belongs to */ var grobViewport = function(grobName) { var grob = document.getElementById(grobName); if (grob) { var foundViewport = false; var viewportPath; var grobParent = grob.parentNode; while (! foundViewport) { var vpPath = grob.getAttribute("id"); var testVP = gridSVGCoords[vpPath]; // If we have found a match in our VP coordinate list we // have a candidate viewport path, but a grob might have // the same name as a viewport path... if (testVP) { viewportPath = vpPath; foundViewport = true; } else { grob = grobParent; grobParent = grob.parentNode; } } return viewportPath; } else { console.error("Unable to find grob [%s]", grobName); } }; /** * Removes any empty text nodes from an XML tree. * * Often when we create XML, we use indentation to make the structure of * the XML document more obvious to someone who reads it. * * This is a good idea in general, but it makes parsing the DOM a bit * more challenging. Consider the following example: * * : * : * : * * We would expect the node to have one child, when it in fact has * *three* child nodes. A text node, a rect node and a text node. This * goes against intuition so we would ideally like it so that only the * nodes that contain elements, such as the rect node, remain. This is * the purpose of this function. * * @param {Object} node An XML tree that we wish to prune */ var pruneTextNodes = function(node) { var blank = /^\s*$/; var child, next; switch (node.nodeType) { case 3: // Text node if (blank.test(node.nodeValue)) { node.parentNode.removeChild(node); } break; case 1: // Element node case 9: // Document node child = node.firstChild; while (child) { next = child.nextSibling; pruneTextNodes(child); child = next; } break; } }; /** * Removes the numeric suffix from a viewport path. * * This function is useful in the case where we have a viewport path * because these paths are required to be unique. The reason for this is * because a viewport path can be used more than once. * * @param {string} vppath The modified and unique viewport path produced by gridSVG * @returns {string} The canonical viewport path, as known to grid */ var baseViewportPath = function(vppath) { var splitPath = vppath.split("."); // If there was actually something to split, get rid of the last value if (splitPath.length > 1) { splitPath.pop(); } return splitPath.join("."); }; /** * Escapes the colons present in a viewport path for use in selectors. * * Because the colon is a special character in CSS selectors, escape the * viewport path using this function first to ensure that the selector * will work as expected. * * @param {string} vppath The viewport path to escape. * @returns {string} An escaped viewport path, safe for use as a selector */ var escapeViewportPath = function(vppath) { return vppath.replace(/:/g, "\\:"); } /** * Creates a URL for a GET/POST request. Automatically inserts separators * such as ?, & and =. * * @param {string} loc The location of the script to query. * @param {Object} params An object with keys representing GET/POST params, * and associated with their values. * @returns {string} The complete URL to request with. */ var queryBuilder = function(loc, params) { if (!params) return loc; var query = []; for (var k in params) query.push(encodeURIComponent(k) + "=" + encodeURIComponent(params[k])); var queryText = query.join("&"); // If params is an object of length 0 we end up with "" if (!queryText) return loc; return loc + "?" + queryText; } // NOTE: The following code assumes that a global object, "gridSVGMappings" // is available. In other words, to use this code, load this object first. /** * Returns the mapping from a known grob/viewport name to an SVG ID. * Assumes the variable 'gridSVGMappings' is in scope. * * @param {string} name The name of the object whose ID we are getting. * @param {string} type One of 'vp', 'grob' or 'ref'. Determines whether the name refers to a viewport or a grob or a reference to a defined object. * @param {string?} result One of 'id', 'selector' or 'xpath'. Determines the type of results we want back, i.e. SVG IDs, CSS selectors or XPath expressions. * @returns {Array} An array of values. * */ var getSVGMappings = function(name, type, result) { if (type !== "vp" && type !== "grob" && type !== "ref") { throw new Error("Invalid type specified. Must be one of 'vp', 'grob' or 'ref'."); } // Assume we want an ID by default, and not a selector/xpath if (! result) { result = "id"; } type = type + "s"; var obj = gridSVGMappings[type][name]; if (! obj) { throw new Error("Name not found in mapping table."); } if (result === "id") { // Force suffix to be an array of suffixes because RJSONIO reduces // vectors to scalars if length(vec) == 1 var suffix = obj.suffix; if (typeof suffix === "number") { suffix = [suffix]; } var ids = []; for (var i = 0; i < suffix.length; i++) { ids.push(gridSVGMappings.prefix + name + gridSVGMappings["id.sep"] + suffix[i]); } return ids; } if (result === "selector" || result === "xpath") { // Force results to be an array of results because RJSONIO reduces // vectors to scalars if length(vec) == 1 var vals = obj[result]; if (typeof vals === "string") { vals = [vals]; } return vals; } }; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/svg/�����������������������������������������������������������������������������������0000755�0001762�0000144�00000000000�12616254462�013343� 5����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/svg/genAttrTable.txt�������������������������������������������������������������������0000654�0001762�0000144�00000063315�12616254456�016474� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������accent-height font-face accumulate animate accumulate animateColor accumulate animateMotion accumulate animateTransform additive animate additive animateColor additive animateMotion additive animateTransform alphabetic font-face amplitude feFuncA amplitude feFuncB amplitude feFuncG amplitude feFuncR arabic-form glyph ascent font-face attributeName animate attributeName animateColor attributeName animateTransform attributeName set attributeType animate attributeType animateColor attributeType animateTransform attributeType set azimuth feDistantLight baseFrequency feTurbulence baseProfile svg bbox font-face begin animate begin animateColor begin animateMotion begin animateTransform begin set bias feConvolveMatrix by animate by animateColor by animateMotion by animateTransform calcMode animate calcMode animateColor calcMode animateMotion calcMode animateTransform cap-height font-face class a class altGlyph class circle class clipPath class defs class desc class ellipse class feBlend class feColorMatrix class feComponentTransfer class feComposite class feConvolveMatrix class feDiffuseLighting class feDisplacementMap class feFlood class feGaussianBlur class feImage class feMerge class feMorphology class feOffset class feSpecularLighting class feTile class feTurbulence class filter class font class foreignObject class g class glyph class glyphRef class image class line class linearGradient class marker class mask class missing-glyph class path class pattern class polygon class polyline class radialGradient class rect class stop class svg class switch class symbol class text class textPath class title class tref class tspan class use clipPathUnits clipPath contentScriptType svg contentStyleType svg cx circle cx ellipse cx radialGradient cy circle cy ellipse cy radialGradient d path d glyph d missing-glyph descent font-face diffuseConstant feDiffuseLighting divisor feConvolveMatrix dur animate dur animateColor dur animateMotion dur animateTransform dur set dx altGlyph dx feOffset dx glyphRef dx text dx tref dx tspan dy altGlyph dy feOffset dy glyphRef dy text dy tref dy tspan edgeMode feConvolveMatrix elevation feDistantLight end animate end animateColor end animateMotion end animateTransform end set exponent feFuncA exponent feFuncB exponent feFuncG exponent feFuncR externalResourcesRequired a externalResourcesRequired altGlyph externalResourcesRequired animate externalResourcesRequired animateColor externalResourcesRequired animateMotion externalResourcesRequired animateTransform externalResourcesRequired circle externalResourcesRequired clipPath externalResourcesRequired cursor externalResourcesRequired defs externalResourcesRequired ellipse externalResourcesRequired feImage externalResourcesRequired filter externalResourcesRequired font externalResourcesRequired foreignObject externalResourcesRequired g externalResourcesRequired image externalResourcesRequired line externalResourcesRequired linearGradient externalResourcesRequired marker externalResourcesRequired mask externalResourcesRequired mpath externalResourcesRequired path externalResourcesRequired pattern externalResourcesRequired polygon externalResourcesRequired polyline externalResourcesRequired radialGradient externalResourcesRequired rect externalResourcesRequired script externalResourcesRequired set externalResourcesRequired svg externalResourcesRequired switch externalResourcesRequired symbol externalResourcesRequired text externalResourcesRequired textPath externalResourcesRequired tref externalResourcesRequired tspan externalResourcesRequired use externalResourcesRequired view fill animate fill animateColor fill animateMotion fill animateTransform fill set filterRes filter filterUnits filter font-family font-face font-size font-face font-stretch font-face font-style font-face font-variant font-face font-weight font-face format altGlyph format glyphRef from animate from animateColor from animateMotion from animateTransform fx radialGradient fy radialGradient g1 hkern g1 vkern g2 hkern g2 vkern glyph-name glyph glyphRef altGlyph glyphRef glyphRef gradientTransform linearGradient gradientTransform radialGradient gradientUnits linearGradient gradientUnits radialGradient hanging font-face height filter height foreignObject height image height pattern height rect height svg height use height feBlend height feColorMatrix height feComponentTransfer height feComposite height feConvolveMatrix height feDiffuseLighting height feDisplacementMap height feFlood height feGaussianBlur height feImage height feMerge height feMorphology height feOffset height feSpecularLighting height feTile height feTurbulence height mask horiz-adv-x font horiz-adv-x glyph horiz-adv-x missing-glyph horiz-origin-x font horiz-origin-y font id a id altGlyph id altGlyphDef id altGlyphItem id animate id animateColor id animateMotion id animateTransform id circle id clipPath id color-profile id cursor id defs id desc id ellipse id feBlend id feColorMatrix id feComponentTransfer id feComposite id feConvolveMatrix id feDiffuseLighting id feDisplacementMap id feDistantLight id feFlood id feFuncA id feFuncB id feFuncG id feFuncR id feGaussianBlur id feImage id feMerge id feMergeNode id feMorphology id feOffset id fePointLight id feSpecularLighting id feSpotLight id feTile id feTurbulence id filter id font id font-face id font-face-format id font-face-name id font-face-src id font-face-uri id foreignObject id g id glyph id glyphRef id hkern id image id line id linearGradient id marker id mask id metadata id missing-glyph id mpath id path id pattern id polygon id polyline id radialGradient id rect id script id set id stop id style id svg id switch id symbol id text id textPath id title id tref id tspan id use id view id vkern ideographic font-face in feBlend in feColorMatrix in feComponentTransfer in feComposite in feConvolveMatrix in feDiffuseLighting in feDisplacementMap in feGaussianBlur in feMorphology in feOffset in feSpecularLighting in feTile in2 feBlend in2 feComposite in2 feDisplacementMap intercept feFuncA intercept feFuncB intercept feFuncG intercept feFuncR k hkern k vkern k1 feComposite k2 feComposite k3 feComposite k4 feComposite kernelMatrix feConvolveMatrix kernelUnitLength feConvolveMatrix kernelUnitLength feDiffuseLighting kernelUnitLength feSpecularLighting keyPoints animateMotion keySplines animate keySplines animateColor keySplines animateMotion keySplines animateTransform keyTimes animate keyTimes animateColor keyTimes animateMotion keyTimes animateTransform lang glyph lengthAdjust text lengthAdjust textPath lengthAdjust tref lengthAdjust tspan limitingConeAngle feSpotLight local color-profile markerHeight marker markerUnits marker markerWidth marker maskContentUnits mask maskUnits mask mathematical font-face max animate max animateColor max animateMotion max animateTransform max set media style method textPath min animate min animateColor min animateMotion min animateTransform min set mode feBlend name color-profile name font-face-name numOctaves feTurbulence offset stop offset feFuncA offset feFuncB offset feFuncG offset feFuncR onabort svg onactivate a onactivate altGlyph onactivate circle onactivate defs onactivate ellipse onactivate foreignObject onactivate g onactivate image onactivate line onactivate path onactivate polygon onactivate polyline onactivate rect onactivate svg onactivate switch onactivate symbol onactivate text onactivate textPath onactivate tref onactivate tspan onactivate use onbegin animate onbegin animateColor onbegin animateMotion onbegin animateTransform onbegin set onclick a onclick altGlyph onclick circle onclick defs onclick ellipse onclick foreignObject onclick g onclick image onclick line onclick path onclick polygon onclick polyline onclick rect onclick svg onclick switch onclick symbol onclick text onclick textPath onclick tref onclick tspan onclick use onend animate onend animateColor onend animateMotion onend animateTransform onend set onerror svg onfocusin a onfocusin altGlyph onfocusin circle onfocusin defs onfocusin ellipse onfocusin foreignObject onfocusin g onfocusin image onfocusin line onfocusin path onfocusin polygon onfocusin polyline onfocusin rect onfocusin svg onfocusin switch onfocusin symbol onfocusin text onfocusin textPath onfocusin tref onfocusin tspan onfocusin use onfocusout a onfocusout altGlyph onfocusout circle onfocusout defs onfocusout ellipse onfocusout foreignObject onfocusout g onfocusout image onfocusout line onfocusout path onfocusout polygon onfocusout polyline onfocusout rect onfocusout svg onfocusout switch onfocusout symbol onfocusout text onfocusout textPath onfocusout tref onfocusout tspan onfocusout use onload a onload altGlyph onload circle onload defs onload ellipse onload foreignObject onload g onload image onload line onload path onload polygon onload polyline onload rect onload svg onload switch onload symbol onload text onload textPath onload tref onload tspan onload use onload animate onload animateColor onload animateMotion onload animateTransform onload set onmousedown a onmousedown altGlyph onmousedown circle onmousedown defs onmousedown ellipse onmousedown foreignObject onmousedown g onmousedown image onmousedown line onmousedown path onmousedown polygon onmousedown polyline onmousedown rect onmousedown svg onmousedown switch onmousedown symbol onmousedown text onmousedown textPath onmousedown tref onmousedown tspan onmousedown use onmousemove a onmousemove altGlyph onmousemove circle onmousemove defs onmousemove ellipse onmousemove foreignObject onmousemove g onmousemove image onmousemove line onmousemove path onmousemove polygon onmousemove polyline onmousemove rect onmousemove svg onmousemove switch onmousemove symbol onmousemove text onmousemove textPath onmousemove tref onmousemove tspan onmousemove use onmouseout a onmouseout altGlyph onmouseout circle onmouseout defs onmouseout ellipse onmouseout foreignObject onmouseout g onmouseout image onmouseout line onmouseout path onmouseout polygon onmouseout polyline onmouseout rect onmouseout svg onmouseout switch onmouseout symbol onmouseout text onmouseout textPath onmouseout tref onmouseout tspan onmouseout use onmouseover a onmouseover altGlyph onmouseover circle onmouseover defs onmouseover ellipse onmouseover foreignObject onmouseover g onmouseover image onmouseover line onmouseover path onmouseover polygon onmouseover polyline onmouseover rect onmouseover svg onmouseover switch onmouseover symbol onmouseover text onmouseover textPath onmouseover tref onmouseover tspan onmouseover use onmouseup a onmouseup altGlyph onmouseup circle onmouseup defs onmouseup ellipse onmouseup foreignObject onmouseup g onmouseup image onmouseup line onmouseup path onmouseup polygon onmouseup polyline onmouseup rect onmouseup svg onmouseup switch onmouseup symbol onmouseup text onmouseup textPath onmouseup tref onmouseup tspan onmouseup use onrepeat animate onrepeat animateColor onrepeat animateMotion onrepeat animateTransform onrepeat set onresize svg onscroll svg onunload svg onzoom svg operator feComposite operator feMorphology order feConvolveMatrix orient marker orientation glyph origin animateMotion overline-position font-face overline-thickness font-face panose-1 font-face path animateMotion pathLength path patternContentUnits pattern patternTransform pattern patternUnits pattern points polygon points polyline pointsAtX feSpotLight pointsAtY feSpotLight pointsAtZ feSpotLight preserveAlpha feConvolveMatrix preserveAspectRatio feImage preserveAspectRatio image preserveAspectRatio marker preserveAspectRatio pattern preserveAspectRatio svg preserveAspectRatio symbol preserveAspectRatio view primitiveUnits filter r circle r radialGradient radius feMorphology refX marker refY marker rendering-intent color-profile repeatCount animate repeatCount animateColor repeatCount animateMotion repeatCount animateTransform repeatCount set repeatDur animate repeatDur animateColor repeatDur animateMotion repeatDur animateTransform repeatDur set requiredExtensions a requiredExtensions altGlyph requiredExtensions animate requiredExtensions animateColor requiredExtensions animateMotion requiredExtensions animateTransform requiredExtensions circle requiredExtensions clipPath requiredExtensions cursor requiredExtensions defs requiredExtensions ellipse requiredExtensions foreignObject requiredExtensions g requiredExtensions image requiredExtensions line requiredExtensions mask requiredExtensions path requiredExtensions pattern requiredExtensions polygon requiredExtensions polyline requiredExtensions rect requiredExtensions set requiredExtensions svg requiredExtensions switch requiredExtensions text requiredExtensions textPath requiredExtensions tref requiredExtensions tspan requiredExtensions use requiredFeatures a requiredFeatures altGlyph requiredFeatures animate requiredFeatures animateColor requiredFeatures animateMotion requiredFeatures animateTransform requiredFeatures circle requiredFeatures clipPath requiredFeatures cursor requiredFeatures defs requiredFeatures ellipse requiredFeatures foreignObject requiredFeatures g requiredFeatures image requiredFeatures line requiredFeatures mask requiredFeatures path requiredFeatures pattern requiredFeatures polygon requiredFeatures polyline requiredFeatures rect requiredFeatures set requiredFeatures svg requiredFeatures switch requiredFeatures text requiredFeatures textPath requiredFeatures tref requiredFeatures tspan requiredFeatures use restart animate restart animateColor restart animateMotion restart animateTransform restart set result feBlend result feColorMatrix result feComponentTransfer result feComposite result feConvolveMatrix result feDiffuseLighting result feDisplacementMap result feFlood result feGaussianBlur result feImage result feMerge result feMorphology result feOffset result feSpecularLighting result feTile result feTurbulence rotate altGlyph rotate animateMotion rotate text rotate tref rotate tspan rx ellipse rx rect ry ellipse ry rect scale feDisplacementMap seed feTurbulence slope font-face slope feFuncA slope feFuncB slope feFuncG slope feFuncR spacing textPath specularConstant feSpecularLighting specularExponent feSpecularLighting specularExponent feSpotLight spreadMethod linearGradient spreadMethod radialGradient startOffset textPath stdDeviation feGaussianBlur stemh font-face stemv font-face stitchTiles feTurbulence strikethrough-position font-face strikethrough-thickness font-face string font-face-format style a style altGlyph style circle style clipPath style defs style desc style ellipse style feBlend style feColorMatrix style feComponentTransfer style feComposite style feConvolveMatrix style feDiffuseLighting style feDisplacementMap style feFlood style feGaussianBlur style feImage style feMerge style feMorphology style feOffset style feSpecularLighting style feTile style feTurbulence style filter style font style foreignObject style g style glyph style glyphRef style image style line style linearGradient style marker style mask style missing-glyph style path style pattern style polygon style polyline style radialGradient style rect style stop style svg style switch style symbol style text style textPath style title style tref style tspan style use surfaceScale feDiffuseLighting surfaceScale feSpecularLighting systemLanguage a systemLanguage altGlyph systemLanguage animate systemLanguage animateColor systemLanguage animateMotion systemLanguage animateTransform systemLanguage circle systemLanguage clipPath systemLanguage cursor systemLanguage defs systemLanguage ellipse systemLanguage foreignObject systemLanguage g systemLanguage image systemLanguage line systemLanguage mask systemLanguage path systemLanguage pattern systemLanguage polygon systemLanguage polyline systemLanguage rect systemLanguage set systemLanguage svg systemLanguage switch systemLanguage text systemLanguage textPath systemLanguage tref systemLanguage tspan systemLanguage use tableValues feFuncA tableValues feFuncB tableValues feFuncG tableValues feFuncR target a targetX feConvolveMatrix targetY feConvolveMatrix textLength text textLength textPath textLength tref textLength tspan title style to set to animate to animateColor to animateMotion to animateTransform transform a transform circle transform clipPath transform defs transform ellipse transform foreignObject transform g transform image transform line transform path transform polygon transform polyline transform rect transform switch transform text transform use type animateTransform type feColorMatrix type feTurbulence type script type style type feFuncA type feFuncB type feFuncG type feFuncR u1 hkern u1 vkern u2 hkern u2 vkern underline-position font-face underline-thickness font-face unicode glyph unicode-range font-face units-per-em font-face v-alphabetic font-face v-hanging font-face v-ideographic font-face v-mathematical font-face values feColorMatrix values animate values animateColor values animateMotion values animateTransform version svg vert-adv-y font vert-adv-y glyph vert-adv-y missing-glyph vert-origin-x font vert-origin-x glyph vert-origin-x missing-glyph vert-origin-y font vert-origin-y glyph vert-origin-y missing-glyph viewBox marker viewBox pattern viewBox svg viewBox symbol viewBox view viewTarget view width filter width foreignObject width image width pattern width rect width svg width use width feBlend width feColorMatrix width feComponentTransfer width feComposite width feConvolveMatrix width feDiffuseLighting width feDisplacementMap width feFlood width feGaussianBlur width feImage width feMerge width feMorphology width feOffset width feSpecularLighting width feTile width feTurbulence width mask widths font-face x altGlyph x cursor x fePointLight x feSpotLight x filter x foreignObject x glyphRef x image x pattern x rect x svg x text x use x feBlend x feColorMatrix x feComponentTransfer x feComposite x feConvolveMatrix x feDiffuseLighting x feDisplacementMap x feFlood x feGaussianBlur x feImage x feMerge x feMorphology x feOffset x feSpecularLighting x feTile x feTurbulence x mask x tref x tspan x-height font-face x1 line x1 linearGradient x2 line x2 linearGradient xChannelSelector feDisplacementMap xlink:actuate a xlink:actuate altGlyph xlink:actuate animate xlink:actuate animateColor xlink:actuate animateMotion xlink:actuate animateTransform xlink:actuate color-profile xlink:actuate cursor xlink:actuate feImage xlink:actuate filter xlink:actuate font-face-uri xlink:actuate glyphRef xlink:actuate image xlink:actuate mpath xlink:actuate pattern xlink:actuate script xlink:actuate set xlink:actuate use xlink:arcrole a xlink:arcrole altGlyph xlink:arcrole animate xlink:arcrole animateColor xlink:arcrole animateMotion xlink:arcrole animateTransform xlink:arcrole color-profile xlink:arcrole cursor xlink:arcrole feImage xlink:arcrole filter xlink:arcrole font-face-uri xlink:arcrole glyphRef xlink:arcrole image xlink:arcrole linearGradient xlink:arcrole mpath xlink:arcrole pattern xlink:arcrole radialGradient xlink:arcrole script xlink:arcrole set xlink:arcrole textPath xlink:arcrole tref xlink:arcrole use xlink:href a xlink:href altGlyph xlink:href color-profile xlink:href cursor xlink:href feImage xlink:href filter xlink:href font-face-uri xlink:href glyphRef xlink:href image xlink:href linearGradient xlink:href mpath xlink:href pattern xlink:href radialGradient xlink:href script xlink:href textPath xlink:href use xlink:href animate xlink:href animateColor xlink:href animateMotion xlink:href animateTransform xlink:href set xlink:href tref xlink:role a xlink:role altGlyph xlink:role animate xlink:role animateColor xlink:role animateMotion xlink:role animateTransform xlink:role color-profile xlink:role cursor xlink:role feImage xlink:role filter xlink:role font-face-uri xlink:role glyphRef xlink:role image xlink:role linearGradient xlink:role mpath xlink:role pattern xlink:role radialGradient xlink:role script xlink:role set xlink:role textPath xlink:role tref xlink:role use xlink:show a xlink:show altGlyph xlink:show animate xlink:show animateColor xlink:show animateMotion xlink:show animateTransform xlink:show color-profile xlink:show cursor xlink:show feImage xlink:show filter xlink:show font-face-uri xlink:show glyphRef xlink:show image xlink:show mpath xlink:show pattern xlink:show script xlink:show set xlink:show use xlink:title a xlink:title altGlyph xlink:title animate xlink:title animateColor xlink:title animateMotion xlink:title animateTransform xlink:title color-profile xlink:title cursor xlink:title feImage xlink:title filter xlink:title font-face-uri xlink:title glyphRef xlink:title image xlink:title linearGradient xlink:title mpath xlink:title pattern xlink:title radialGradient xlink:title script xlink:title set xlink:title textPath xlink:title tref xlink:title use xlink:type a xlink:type altGlyph xlink:type animate xlink:type animateColor xlink:type animateMotion xlink:type animateTransform xlink:type color-profile xlink:type cursor xlink:type feImage xlink:type filter xlink:type font-face-uri xlink:type glyphRef xlink:type image xlink:type linearGradient xlink:type mpath xlink:type pattern xlink:type radialGradient xlink:type script xlink:type set xlink:type textPath xlink:type tref xlink:type use xml:base a xml:base altGlyph xml:base altGlyphDef xml:base altGlyphItem xml:base animate xml:base animateColor xml:base animateMotion xml:base animateTransform xml:base circle xml:base clipPath xml:base color-profile xml:base cursor xml:base defs xml:base desc xml:base ellipse xml:base feBlend xml:base feColorMatrix xml:base feComponentTransfer xml:base feComposite xml:base feConvolveMatrix xml:base feDiffuseLighting xml:base feDisplacementMap xml:base feDistantLight xml:base feFlood xml:base feFuncA xml:base feFuncB xml:base feFuncG xml:base feFuncR xml:base feGaussianBlur xml:base feImage xml:base feMerge xml:base feMergeNode xml:base feMorphology xml:base feOffset xml:base fePointLight xml:base feSpecularLighting xml:base feSpotLight xml:base feTile xml:base feTurbulence xml:base filter xml:base font xml:base font-face xml:base font-face-format xml:base font-face-name xml:base font-face-src xml:base font-face-uri xml:base foreignObject xml:base g xml:base glyph xml:base glyphRef xml:base hkern xml:base image xml:base line xml:base linearGradient xml:base marker xml:base mask xml:base metadata xml:base missing-glyph xml:base mpath xml:base path xml:base pattern xml:base polygon xml:base polyline xml:base radialGradient xml:base rect xml:base script xml:base set xml:base stop xml:base style xml:base svg xml:base switch xml:base symbol xml:base text xml:base textPath xml:base title xml:base tref xml:base tspan xml:base use xml:base view xml:base vkern xml:lang a xml:lang altGlyph xml:lang altGlyphDef xml:lang altGlyphItem xml:lang animate xml:lang animateColor xml:lang animateMotion xml:lang animateTransform xml:lang circle xml:lang clipPath xml:lang color-profile xml:lang cursor xml:lang defs xml:lang desc xml:lang ellipse xml:lang feBlend xml:lang feColorMatrix xml:lang feComponentTransfer xml:lang feComposite xml:lang feConvolveMatrix xml:lang feDiffuseLighting xml:lang feDisplacementMap xml:lang feDistantLight xml:lang feFlood xml:lang feFuncA xml:lang feFuncB xml:lang feFuncG xml:lang feFuncR xml:lang feGaussianBlur xml:lang feImage xml:lang feMerge xml:lang feMergeNode xml:lang feMorphology xml:lang feOffset xml:lang fePointLight xml:lang feSpecularLighting xml:lang feSpotLight xml:lang feTile xml:lang feTurbulence xml:lang filter xml:lang font xml:lang font-face xml:lang font-face-format xml:lang font-face-name xml:lang font-face-src xml:lang font-face-uri xml:lang foreignObject xml:lang g xml:lang glyph xml:lang glyphRef xml:lang hkern xml:lang image xml:lang line xml:lang linearGradient xml:lang marker xml:lang mask xml:lang metadata xml:lang missing-glyph xml:lang mpath xml:lang path xml:lang pattern xml:lang polygon xml:lang polyline xml:lang radialGradient xml:lang rect xml:lang script xml:lang set xml:lang stop xml:lang style xml:lang svg xml:lang switch xml:lang symbol xml:lang text xml:lang textPath xml:lang title xml:lang tref xml:lang tspan xml:lang use xml:lang view xml:lang vkern xml:space a xml:space altGlyph xml:space altGlyphDef xml:space altGlyphItem xml:space animate xml:space animateColor xml:space animateMotion xml:space animateTransform xml:space circle xml:space clipPath xml:space color-profile xml:space cursor xml:space defs xml:space desc xml:space ellipse xml:space feBlend xml:space feColorMatrix xml:space feComponentTransfer xml:space feComposite xml:space feConvolveMatrix xml:space feDiffuseLighting xml:space feDisplacementMap xml:space feDistantLight xml:space feFlood xml:space feFuncA xml:space feFuncB xml:space feFuncG xml:space feFuncR xml:space feGaussianBlur xml:space feImage xml:space feMerge xml:space feMergeNode xml:space feMorphology xml:space feOffset xml:space fePointLight xml:space feSpecularLighting xml:space feSpotLight xml:space feTile xml:space feTurbulence xml:space filter xml:space font xml:space font-face xml:space font-face-format xml:space font-face-name xml:space font-face-src xml:space font-face-uri xml:space foreignObject xml:space g xml:space glyph xml:space glyphRef xml:space hkern xml:space image xml:space line xml:space linearGradient xml:space marker xml:space mask xml:space metadata xml:space missing-glyph xml:space mpath xml:space path xml:space pattern xml:space polygon xml:space polyline xml:space radialGradient xml:space rect xml:space script xml:space set xml:space stop xml:space style xml:space svg xml:space switch xml:space symbol xml:space text xml:space textPath xml:space title xml:space tref xml:space tspan xml:space use xml:space view xml:space vkern y altGlyph y cursor y fePointLight y feSpotLight y filter y foreignObject y glyphRef y image y pattern y rect y svg y text y use y feBlend y feColorMatrix y feComponentTransfer y feComposite y feConvolveMatrix y feDiffuseLighting y feDisplacementMap y feFlood y feGaussianBlur y feImage y feMerge y feMorphology y feOffset y feSpecularLighting y feTile y feTurbulence y mask y tref y tspan y1 line y1 linearGradient y2 line y2 linearGradient yChannelSelector feDisplacementMap z fePointLight z feSpotLight zoomAndPan svg zoomAndPan view �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gridSVG/inst/svg/presAttrTable.txt������������������������������������������������������������������0000654�0001762�0000144�00000201750�12616254462�016666� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������alignment-baseline a baseline-shift a clip-path a clip-rule a clip a color-interpolation-filters a color-interpolation a color-profile a color-rendering a color a cursor a direction a display a dominant-baseline a enable-background a fill-opacity a fill-rule a fill a filter a flood-color a flood-opacity a font-family a font-size-adjust a font-size a font-stretch a font-style a font-variant a font-weight a glyph-orientation-horizontal a glyph-orientation-vertical a image-rendering a kerning a letter-spacing a lighting-color a marker-end a marker-mid a marker-start a mask a opacity a overflow a pointer-events a shape-rendering a stop-color a stop-opacity a stroke-dasharray a stroke-dashoffset a stroke-linecap a stroke-linejoin a stroke-miterlimit a stroke-opacity a stroke-width a stroke a text-anchor a text-decoration a text-rendering a unicode-bidi a visibility a word-spacingandwriting-mode a alignment-baseline altGlyph baseline-shift altGlyph clip-path altGlyph clip-rule altGlyph clip altGlyph color-interpolation-filters altGlyph color-interpolation altGlyph color-profile altGlyph color-rendering altGlyph color altGlyph cursor altGlyph direction altGlyph display altGlyph dominant-baseline altGlyph enable-background altGlyph fill-opacity altGlyph fill-rule altGlyph fill altGlyph filter altGlyph flood-color altGlyph flood-opacity altGlyph font-family altGlyph font-size-adjust altGlyph font-size altGlyph font-stretch altGlyph font-style altGlyph font-variant altGlyph font-weight altGlyph glyph-orientation-horizontal altGlyph glyph-orientation-vertical altGlyph image-rendering altGlyph kerning altGlyph letter-spacing altGlyph lighting-color altGlyph marker-end altGlyph marker-mid altGlyph marker-start altGlyph mask altGlyph opacity altGlyph overflow altGlyph pointer-events altGlyph shape-rendering altGlyph stop-color altGlyph stop-opacity altGlyph stroke-dasharray altGlyph stroke-dashoffset altGlyph stroke-linecap altGlyph stroke-linejoin altGlyph stroke-miterlimit altGlyph stroke-opacity altGlyph stroke-width altGlyph stroke altGlyph text-anchor altGlyph text-decoration altGlyph text-rendering altGlyph unicode-bidi altGlyph visibility altGlyph word-spacingandwriting-mode altGlyph alignment-baseline animate baseline-shift animate clip-path animate clip-rule animate clip animate color-interpolation-filters animate color-interpolation animate color-profile animate color-rendering animate color animate cursor animate direction animate display animate dominant-baseline animate enable-background animate fill-opacity animate fill-rule animate fill animate filter animate flood-color animate flood-opacity animate font-family animate font-size-adjust animate font-size animate font-stretch animate font-style animate font-variant animate font-weight animate glyph-orientation-horizontal animate glyph-orientation-vertical animate image-rendering animate kerning animate letter-spacing animate lighting-color animate marker-end animate marker-mid animate marker-start animate mask animate opacity animate overflow animate pointer-events animate shape-rendering animate stop-color animate stop-opacity animate stroke-dasharray animate stroke-dashoffset animate stroke-linecap animate stroke-linejoin animate stroke-miterlimit animate stroke-opacity animate stroke-width animate stroke animate text-anchor animate text-decoration animate text-rendering animate unicode-bidi animate visibility animate word-spacingandwriting-mode animate alignment-baseline animateColor baseline-shift animateColor clip-path animateColor clip-rule animateColor clip animateColor color-interpolation-filters animateColor color-interpolation animateColor color-profile animateColor color-rendering animateColor color animateColor cursor animateColor direction animateColor display animateColor dominant-baseline animateColor enable-background animateColor fill-opacity animateColor fill-rule animateColor fill animateColor filter animateColor flood-color animateColor flood-opacity animateColor font-family animateColor font-size-adjust animateColor font-size animateColor font-stretch animateColor font-style animateColor font-variant animateColor font-weight animateColor glyph-orientation-horizontal animateColor glyph-orientation-vertical animateColor image-rendering animateColor kerning animateColor letter-spacing animateColor lighting-color animateColor marker-end animateColor marker-mid animateColor marker-start animateColor mask animateColor opacity animateColor overflow animateColor pointer-events animateColor shape-rendering animateColor stop-color animateColor stop-opacity animateColor stroke-dasharray animateColor stroke-dashoffset animateColor stroke-linecap animateColor stroke-linejoin animateColor stroke-miterlimit animateColor stroke-opacity animateColor stroke-width animateColor stroke animateColor text-anchor animateColor text-decoration animateColor text-rendering animateColor unicode-bidi animateColor visibility animateColor word-spacingandwriting-mode animateColor alignment-baseline circle baseline-shift circle clip-path circle clip-rule circle clip circle color-interpolation-filters circle color-interpolation circle color-profile circle color-rendering circle color circle cursor circle direction circle display circle dominant-baseline circle enable-background circle fill-opacity circle fill-rule circle fill circle filter circle flood-color circle flood-opacity circle font-family circle font-size-adjust circle font-size circle font-stretch circle font-style circle font-variant circle font-weight circle glyph-orientation-horizontal circle glyph-orientation-vertical circle image-rendering circle kerning circle letter-spacing circle lighting-color circle marker-end circle marker-mid circle marker-start circle mask circle opacity circle overflow circle pointer-events circle shape-rendering circle stop-color circle stop-opacity circle stroke-dasharray circle stroke-dashoffset circle stroke-linecap circle stroke-linejoin circle stroke-miterlimit circle stroke-opacity circle stroke-width circle stroke circle text-anchor circle text-decoration circle text-rendering circle unicode-bidi circle visibility circle word-spacingandwriting-mode circle alignment-baseline clipPath baseline-shift clipPath clip-path clipPath clip-rule clipPath clip clipPath color-interpolation-filters clipPath color-interpolation clipPath color-profile clipPath color-rendering clipPath color clipPath cursor clipPath direction clipPath display clipPath dominant-baseline clipPath enable-background clipPath fill-opacity clipPath fill-rule clipPath fill clipPath filter clipPath flood-color clipPath flood-opacity clipPath font-family clipPath font-size-adjust clipPath font-size clipPath font-stretch clipPath font-style clipPath font-variant clipPath font-weight clipPath glyph-orientation-horizontal clipPath glyph-orientation-vertical clipPath image-rendering clipPath kerning clipPath letter-spacing clipPath lighting-color clipPath marker-end clipPath marker-mid clipPath marker-start clipPath mask clipPath opacity clipPath overflow clipPath pointer-events clipPath shape-rendering clipPath stop-color clipPath stop-opacity clipPath stroke-dasharray clipPath stroke-dashoffset clipPath stroke-linecap clipPath stroke-linejoin clipPath stroke-miterlimit clipPath stroke-opacity clipPath stroke-width clipPath stroke clipPath text-anchor clipPath text-decoration clipPath text-rendering clipPath unicode-bidi clipPath visibility clipPath word-spacingandwriting-mode clipPath alignment-baseline defs baseline-shift defs clip-path defs clip-rule defs clip defs color-interpolation-filters defs color-interpolation defs color-profile defs color-rendering defs color defs cursor defs direction defs display defs dominant-baseline defs enable-background defs fill-opacity defs fill-rule defs fill defs filter defs flood-color defs flood-opacity defs font-family defs font-size-adjust defs font-size defs font-stretch defs font-style defs font-variant defs font-weight defs glyph-orientation-horizontal defs glyph-orientation-vertical defs image-rendering defs kerning defs letter-spacing defs lighting-color defs marker-end defs marker-mid defs marker-start defs mask defs opacity defs overflow defs pointer-events defs shape-rendering defs stop-color defs stop-opacity defs stroke-dasharray defs stroke-dashoffset defs stroke-linecap defs stroke-linejoin defs stroke-miterlimit defs stroke-opacity defs stroke-width defs stroke defs text-anchor defs text-decoration defs text-rendering defs unicode-bidi defs visibility defs word-spacingandwriting-mode defs alignment-baseline ellipse baseline-shift ellipse clip-path ellipse clip-rule ellipse clip ellipse color-interpolation-filters ellipse color-interpolation ellipse color-profile ellipse color-rendering ellipse color ellipse cursor ellipse direction ellipse display ellipse dominant-baseline ellipse enable-background ellipse fill-opacity ellipse fill-rule ellipse fill ellipse filter ellipse flood-color ellipse flood-opacity ellipse font-family ellipse font-size-adjust ellipse font-size ellipse font-stretch ellipse font-style ellipse font-variant ellipse font-weight ellipse glyph-orientation-horizontal ellipse glyph-orientation-vertical ellipse image-rendering ellipse kerning ellipse letter-spacing ellipse lighting-color ellipse marker-end ellipse marker-mid ellipse marker-start ellipse mask ellipse opacity ellipse overflow ellipse pointer-events ellipse shape-rendering ellipse stop-color ellipse stop-opacity ellipse stroke-dasharray ellipse stroke-dashoffset ellipse stroke-linecap ellipse stroke-linejoin ellipse stroke-miterlimit ellipse stroke-opacity ellipse stroke-width ellipse stroke ellipse text-anchor ellipse text-decoration ellipse text-rendering ellipse unicode-bidi ellipse visibility ellipse word-spacingandwriting-mode ellipse alignment-baseline feBlend baseline-shift feBlend clip-path feBlend clip-rule feBlend clip feBlend color-interpolation-filters feBlend color-interpolation feBlend color-profile feBlend color-rendering feBlend color feBlend cursor feBlend direction feBlend display feBlend dominant-baseline feBlend enable-background feBlend fill-opacity feBlend fill-rule feBlend fill feBlend filter feBlend flood-color feBlend flood-opacity feBlend font-family feBlend font-size-adjust feBlend font-size feBlend font-stretch feBlend font-style feBlend font-variant feBlend font-weight feBlend glyph-orientation-horizontal feBlend glyph-orientation-vertical feBlend image-rendering feBlend kerning feBlend letter-spacing feBlend lighting-color feBlend marker-end feBlend marker-mid feBlend marker-start feBlend mask feBlend opacity feBlend overflow feBlend pointer-events feBlend shape-rendering feBlend stop-color feBlend stop-opacity feBlend stroke-dasharray feBlend stroke-dashoffset feBlend stroke-linecap feBlend stroke-linejoin feBlend stroke-miterlimit feBlend stroke-opacity feBlend stroke-width feBlend stroke feBlend text-anchor feBlend text-decoration feBlend text-rendering feBlend unicode-bidi feBlend visibility feBlend word-spacingandwriting-mode feBlend alignment-baseline feColorMatrix baseline-shift feColorMatrix clip-path feColorMatrix clip-rule feColorMatrix clip feColorMatrix color-interpolation-filters feColorMatrix color-interpolation feColorMatrix color-profile feColorMatrix color-rendering feColorMatrix color feColorMatrix cursor feColorMatrix direction feColorMatrix display feColorMatrix dominant-baseline feColorMatrix enable-background feColorMatrix fill-opacity feColorMatrix fill-rule feColorMatrix fill feColorMatrix filter feColorMatrix flood-color feColorMatrix flood-opacity feColorMatrix font-family feColorMatrix font-size-adjust feColorMatrix font-size feColorMatrix font-stretch feColorMatrix font-style feColorMatrix font-variant feColorMatrix font-weight feColorMatrix glyph-orientation-horizontal feColorMatrix glyph-orientation-vertical feColorMatrix image-rendering feColorMatrix kerning feColorMatrix letter-spacing feColorMatrix lighting-color feColorMatrix marker-end feColorMatrix marker-mid feColorMatrix marker-start feColorMatrix mask feColorMatrix opacity feColorMatrix overflow feColorMatrix pointer-events feColorMatrix shape-rendering feColorMatrix stop-color feColorMatrix stop-opacity feColorMatrix stroke-dasharray feColorMatrix stroke-dashoffset feColorMatrix stroke-linecap feColorMatrix stroke-linejoin feColorMatrix stroke-miterlimit feColorMatrix stroke-opacity feColorMatrix stroke-width feColorMatrix stroke feColorMatrix text-anchor feColorMatrix text-decoration feColorMatrix text-rendering feColorMatrix unicode-bidi feColorMatrix visibility feColorMatrix word-spacingandwriting-mode feColorMatrix alignment-baseline feComponentTransfer baseline-shift feComponentTransfer clip-path feComponentTransfer clip-rule feComponentTransfer clip feComponentTransfer color-interpolation-filters feComponentTransfer color-interpolation feComponentTransfer color-profile feComponentTransfer color-rendering feComponentTransfer color feComponentTransfer cursor feComponentTransfer direction feComponentTransfer display feComponentTransfer dominant-baseline feComponentTransfer enable-background feComponentTransfer fill-opacity feComponentTransfer fill-rule feComponentTransfer fill feComponentTransfer filter feComponentTransfer flood-color feComponentTransfer flood-opacity feComponentTransfer font-family feComponentTransfer font-size-adjust feComponentTransfer font-size feComponentTransfer font-stretch feComponentTransfer font-style feComponentTransfer font-variant feComponentTransfer font-weight feComponentTransfer glyph-orientation-horizontal feComponentTransfer glyph-orientation-vertical feComponentTransfer image-rendering feComponentTransfer kerning feComponentTransfer letter-spacing feComponentTransfer lighting-color feComponentTransfer marker-end feComponentTransfer marker-mid feComponentTransfer marker-start feComponentTransfer mask feComponentTransfer opacity feComponentTransfer overflow feComponentTransfer pointer-events feComponentTransfer shape-rendering feComponentTransfer stop-color feComponentTransfer stop-opacity feComponentTransfer stroke-dasharray feComponentTransfer stroke-dashoffset feComponentTransfer stroke-linecap feComponentTransfer stroke-linejoin feComponentTransfer stroke-miterlimit feComponentTransfer stroke-opacity feComponentTransfer stroke-width feComponentTransfer stroke feComponentTransfer text-anchor feComponentTransfer text-decoration feComponentTransfer text-rendering feComponentTransfer unicode-bidi feComponentTransfer visibility feComponentTransfer word-spacingandwriting-mode feComponentTransfer alignment-baseline feComposite baseline-shift feComposite clip-path feComposite clip-rule feComposite clip feComposite color-interpolation-filters feComposite color-interpolation feComposite color-profile feComposite color-rendering feComposite color feComposite cursor feComposite direction feComposite display feComposite dominant-baseline feComposite enable-background feComposite fill-opacity feComposite fill-rule feComposite fill feComposite filter feComposite flood-color feComposite flood-opacity feComposite font-family feComposite font-size-adjust feComposite font-size feComposite font-stretch feComposite font-style feComposite font-variant feComposite font-weight feComposite glyph-orientation-horizontal feComposite glyph-orientation-vertical feComposite image-rendering feComposite kerning feComposite letter-spacing feComposite lighting-color feComposite marker-end feComposite marker-mid feComposite marker-start feComposite mask feComposite opacity feComposite overflow feComposite pointer-events feComposite shape-rendering feComposite stop-color feComposite stop-opacity feComposite stroke-dasharray feComposite stroke-dashoffset feComposite stroke-linecap feComposite stroke-linejoin feComposite stroke-miterlimit feComposite stroke-opacity feComposite stroke-width feComposite stroke feComposite text-anchor feComposite text-decoration feComposite text-rendering feComposite unicode-bidi feComposite visibility feComposite word-spacingandwriting-mode feComposite alignment-baseline feConvolveMatrix baseline-shift feConvolveMatrix clip-path feConvolveMatrix clip-rule feConvolveMatrix clip feConvolveMatrix color-interpolation-filters feConvolveMatrix color-interpolation feConvolveMatrix color-profile feConvolveMatrix color-rendering feConvolveMatrix color feConvolveMatrix cursor feConvolveMatrix direction feConvolveMatrix display feConvolveMatrix dominant-baseline feConvolveMatrix enable-background feConvolveMatrix fill-opacity feConvolveMatrix fill-rule feConvolveMatrix fill feConvolveMatrix filter feConvolveMatrix flood-color feConvolveMatrix flood-opacity feConvolveMatrix font-family feConvolveMatrix font-size-adjust feConvolveMatrix font-size feConvolveMatrix font-stretch feConvolveMatrix font-style feConvolveMatrix font-variant feConvolveMatrix font-weight feConvolveMatrix glyph-orientation-horizontal feConvolveMatrix glyph-orientation-vertical feConvolveMatrix image-rendering feConvolveMatrix kerning feConvolveMatrix letter-spacing feConvolveMatrix lighting-color feConvolveMatrix marker-end feConvolveMatrix marker-mid feConvolveMatrix marker-start feConvolveMatrix mask feConvolveMatrix opacity feConvolveMatrix overflow feConvolveMatrix pointer-events feConvolveMatrix shape-rendering feConvolveMatrix stop-color feConvolveMatrix stop-opacity feConvolveMatrix stroke-dasharray feConvolveMatrix stroke-dashoffset feConvolveMatrix stroke-linecap feConvolveMatrix stroke-linejoin feConvolveMatrix stroke-miterlimit feConvolveMatrix stroke-opacity feConvolveMatrix stroke-width feConvolveMatrix stroke feConvolveMatrix text-anchor feConvolveMatrix text-decoration feConvolveMatrix text-rendering feConvolveMatrix unicode-bidi feConvolveMatrix visibility feConvolveMatrix word-spacingandwriting-mode feConvolveMatrix alignment-baseline feDiffuseLighting baseline-shift feDiffuseLighting clip-path feDiffuseLighting clip-rule feDiffuseLighting clip feDiffuseLighting color-interpolation-filters feDiffuseLighting color-interpolation feDiffuseLighting color-profile feDiffuseLighting color-rendering feDiffuseLighting color feDiffuseLighting cursor feDiffuseLighting direction feDiffuseLighting display feDiffuseLighting dominant-baseline feDiffuseLighting enable-background feDiffuseLighting fill-opacity feDiffuseLighting fill-rule feDiffuseLighting fill feDiffuseLighting filter feDiffuseLighting flood-color feDiffuseLighting flood-opacity feDiffuseLighting font-family feDiffuseLighting font-size-adjust feDiffuseLighting font-size feDiffuseLighting font-stretch feDiffuseLighting font-style feDiffuseLighting font-variant feDiffuseLighting font-weight feDiffuseLighting glyph-orientation-horizontal feDiffuseLighting glyph-orientation-vertical feDiffuseLighting image-rendering feDiffuseLighting kerning feDiffuseLighting letter-spacing feDiffuseLighting lighting-color feDiffuseLighting marker-end feDiffuseLighting marker-mid feDiffuseLighting marker-start feDiffuseLighting mask feDiffuseLighting opacity feDiffuseLighting overflow feDiffuseLighting pointer-events feDiffuseLighting shape-rendering feDiffuseLighting stop-color feDiffuseLighting stop-opacity feDiffuseLighting stroke-dasharray feDiffuseLighting stroke-dashoffset feDiffuseLighting stroke-linecap feDiffuseLighting stroke-linejoin feDiffuseLighting stroke-miterlimit feDiffuseLighting stroke-opacity feDiffuseLighting stroke-width feDiffuseLighting stroke feDiffuseLighting text-anchor feDiffuseLighting text-decoration feDiffuseLighting text-rendering feDiffuseLighting unicode-bidi feDiffuseLighting visibility feDiffuseLighting word-spacingandwriting-mode feDiffuseLighting alignment-baseline feDisplacementMap baseline-shift feDisplacementMap clip-path feDisplacementMap clip-rule feDisplacementMap clip feDisplacementMap color-interpolation-filters feDisplacementMap color-interpolation feDisplacementMap color-profile feDisplacementMap color-rendering feDisplacementMap color feDisplacementMap cursor feDisplacementMap direction feDisplacementMap display feDisplacementMap dominant-baseline feDisplacementMap enable-background feDisplacementMap fill-opacity feDisplacementMap fill-rule feDisplacementMap fill feDisplacementMap filter feDisplacementMap flood-color feDisplacementMap flood-opacity feDisplacementMap font-family feDisplacementMap font-size-adjust feDisplacementMap font-size feDisplacementMap font-stretch feDisplacementMap font-style feDisplacementMap font-variant feDisplacementMap font-weight feDisplacementMap glyph-orientation-horizontal feDisplacementMap glyph-orientation-vertical feDisplacementMap image-rendering feDisplacementMap kerning feDisplacementMap letter-spacing feDisplacementMap lighting-color feDisplacementMap marker-end feDisplacementMap marker-mid feDisplacementMap marker-start feDisplacementMap mask feDisplacementMap opacity feDisplacementMap overflow feDisplacementMap pointer-events feDisplacementMap shape-rendering feDisplacementMap stop-color feDisplacementMap stop-opacity feDisplacementMap stroke-dasharray feDisplacementMap stroke-dashoffset feDisplacementMap stroke-linecap feDisplacementMap stroke-linejoin feDisplacementMap stroke-miterlimit feDisplacementMap stroke-opacity feDisplacementMap stroke-width feDisplacementMap stroke feDisplacementMap text-anchor feDisplacementMap text-decoration feDisplacementMap text-rendering feDisplacementMap unicode-bidi feDisplacementMap visibility feDisplacementMap word-spacingandwriting-mode feDisplacementMap alignment-baseline feFlood baseline-shift feFlood clip-path feFlood clip-rule feFlood clip feFlood color-interpolation-filters feFlood color-interpolation feFlood color-profile feFlood color-rendering feFlood color feFlood cursor feFlood direction feFlood display feFlood dominant-baseline feFlood enable-background feFlood fill-opacity feFlood fill-rule feFlood fill feFlood filter feFlood flood-color feFlood flood-opacity feFlood font-family feFlood font-size-adjust feFlood font-size feFlood font-stretch feFlood font-style feFlood font-variant feFlood font-weight feFlood glyph-orientation-horizontal feFlood glyph-orientation-vertical feFlood image-rendering feFlood kerning feFlood letter-spacing feFlood lighting-color feFlood marker-end feFlood marker-mid feFlood marker-start feFlood mask feFlood opacity feFlood overflow feFlood pointer-events feFlood shape-rendering feFlood stop-color feFlood stop-opacity feFlood stroke-dasharray feFlood stroke-dashoffset feFlood stroke-linecap feFlood stroke-linejoin feFlood stroke-miterlimit feFlood stroke-opacity feFlood stroke-width feFlood stroke feFlood text-anchor feFlood text-decoration feFlood text-rendering feFlood unicode-bidi feFlood visibility feFlood word-spacingandwriting-mode feFlood alignment-baseline feGaussianBlur baseline-shift feGaussianBlur clip-path feGaussianBlur clip-rule feGaussianBlur clip feGaussianBlur color-interpolation-filters feGaussianBlur color-interpolation feGaussianBlur color-profile feGaussianBlur color-rendering feGaussianBlur color feGaussianBlur cursor feGaussianBlur direction feGaussianBlur display feGaussianBlur dominant-baseline feGaussianBlur enable-background feGaussianBlur fill-opacity feGaussianBlur fill-rule feGaussianBlur fill feGaussianBlur filter feGaussianBlur flood-color feGaussianBlur flood-opacity feGaussianBlur font-family feGaussianBlur font-size-adjust feGaussianBlur font-size feGaussianBlur font-stretch feGaussianBlur font-style feGaussianBlur font-variant feGaussianBlur font-weight feGaussianBlur glyph-orientation-horizontal feGaussianBlur glyph-orientation-vertical feGaussianBlur image-rendering feGaussianBlur kerning feGaussianBlur letter-spacing feGaussianBlur lighting-color feGaussianBlur marker-end feGaussianBlur marker-mid feGaussianBlur marker-start feGaussianBlur mask feGaussianBlur opacity feGaussianBlur overflow feGaussianBlur pointer-events feGaussianBlur shape-rendering feGaussianBlur stop-color feGaussianBlur stop-opacity feGaussianBlur stroke-dasharray feGaussianBlur stroke-dashoffset feGaussianBlur stroke-linecap feGaussianBlur stroke-linejoin feGaussianBlur stroke-miterlimit feGaussianBlur stroke-opacity feGaussianBlur stroke-width feGaussianBlur stroke feGaussianBlur text-anchor feGaussianBlur text-decoration feGaussianBlur text-rendering feGaussianBlur unicode-bidi feGaussianBlur visibility feGaussianBlur word-spacingandwriting-mode feGaussianBlur alignment-baseline feImage baseline-shift feImage clip-path feImage clip-rule feImage clip feImage color-interpolation-filters feImage color-interpolation feImage color-profile feImage color-rendering feImage color feImage cursor feImage direction feImage display feImage dominant-baseline feImage enable-background feImage fill-opacity feImage fill-rule feImage fill feImage filter feImage flood-color feImage flood-opacity feImage font-family feImage font-size-adjust feImage font-size feImage font-stretch feImage font-style feImage font-variant feImage font-weight feImage glyph-orientation-horizontal feImage glyph-orientation-vertical feImage image-rendering feImage kerning feImage letter-spacing feImage lighting-color feImage marker-end feImage marker-mid feImage marker-start feImage mask feImage opacity feImage overflow feImage pointer-events feImage shape-rendering feImage stop-color feImage stop-opacity feImage stroke-dasharray feImage stroke-dashoffset feImage stroke-linecap feImage stroke-linejoin feImage stroke-miterlimit feImage stroke-opacity feImage stroke-width feImage stroke feImage text-anchor feImage text-decoration feImage text-rendering feImage unicode-bidi feImage visibility feImage word-spacingandwriting-mode feImage alignment-baseline feMerge baseline-shift feMerge clip-path feMerge clip-rule feMerge clip feMerge color-interpolation-filters feMerge color-interpolation feMerge color-profile feMerge color-rendering feMerge color feMerge cursor feMerge direction feMerge display feMerge dominant-baseline feMerge enable-background feMerge fill-opacity feMerge fill-rule feMerge fill feMerge filter feMerge flood-color feMerge flood-opacity feMerge font-family feMerge font-size-adjust feMerge font-size feMerge font-stretch feMerge font-style feMerge font-variant feMerge font-weight feMerge glyph-orientation-horizontal feMerge glyph-orientation-vertical feMerge image-rendering feMerge kerning feMerge letter-spacing feMerge lighting-color feMerge marker-end feMerge marker-mid feMerge marker-start feMerge mask feMerge opacity feMerge overflow feMerge pointer-events feMerge shape-rendering feMerge stop-color feMerge stop-opacity feMerge stroke-dasharray feMerge stroke-dashoffset feMerge stroke-linecap feMerge stroke-linejoin feMerge stroke-miterlimit feMerge stroke-opacity feMerge stroke-width feMerge stroke feMerge text-anchor feMerge text-decoration feMerge text-rendering feMerge unicode-bidi feMerge visibility feMerge word-spacingandwriting-mode feMerge alignment-baseline feMorphology baseline-shift feMorphology clip-path feMorphology clip-rule feMorphology clip feMorphology color-interpolation-filters feMorphology color-interpolation feMorphology color-profile feMorphology color-rendering feMorphology color feMorphology cursor feMorphology direction feMorphology display feMorphology dominant-baseline feMorphology enable-background feMorphology fill-opacity feMorphology fill-rule feMorphology fill feMorphology filter feMorphology flood-color feMorphology flood-opacity feMorphology font-family feMorphology font-size-adjust feMorphology font-size feMorphology font-stretch feMorphology font-style feMorphology font-variant feMorphology font-weight feMorphology glyph-orientation-horizontal feMorphology glyph-orientation-vertical feMorphology image-rendering feMorphology kerning feMorphology letter-spacing feMorphology lighting-color feMorphology marker-end feMorphology marker-mid feMorphology marker-start feMorphology mask feMorphology opacity feMorphology overflow feMorphology pointer-events feMorphology shape-rendering feMorphology stop-color feMorphology stop-opacity feMorphology stroke-dasharray feMorphology stroke-dashoffset feMorphology stroke-linecap feMorphology stroke-linejoin feMorphology stroke-miterlimit feMorphology stroke-opacity feMorphology stroke-width feMorphology stroke feMorphology text-anchor feMorphology text-decoration feMorphology text-rendering feMorphology unicode-bidi feMorphology visibility feMorphology word-spacingandwriting-mode feMorphology alignment-baseline feOffset baseline-shift feOffset clip-path feOffset clip-rule feOffset clip feOffset color-interpolation-filters feOffset color-interpolation feOffset color-profile feOffset color-rendering feOffset color feOffset cursor feOffset direction feOffset display feOffset dominant-baseline feOffset enable-background feOffset fill-opacity feOffset fill-rule feOffset fill feOffset filter feOffset flood-color feOffset flood-opacity feOffset font-family feOffset font-size-adjust feOffset font-size feOffset font-stretch feOffset font-style feOffset font-variant feOffset font-weight feOffset glyph-orientation-horizontal feOffset glyph-orientation-vertical feOffset image-rendering feOffset kerning feOffset letter-spacing feOffset lighting-color feOffset marker-end feOffset marker-mid feOffset marker-start feOffset mask feOffset opacity feOffset overflow feOffset pointer-events feOffset shape-rendering feOffset stop-color feOffset stop-opacity feOffset stroke-dasharray feOffset stroke-dashoffset feOffset stroke-linecap feOffset stroke-linejoin feOffset stroke-miterlimit feOffset stroke-opacity feOffset stroke-width feOffset stroke feOffset text-anchor feOffset text-decoration feOffset text-rendering feOffset unicode-bidi feOffset visibility feOffset word-spacingandwriting-mode feOffset alignment-baseline feSpecularLighting baseline-shift feSpecularLighting clip-path feSpecularLighting clip-rule feSpecularLighting clip feSpecularLighting color-interpolation-filters feSpecularLighting color-interpolation feSpecularLighting color-profile feSpecularLighting color-rendering feSpecularLighting color feSpecularLighting cursor feSpecularLighting direction feSpecularLighting display feSpecularLighting dominant-baseline feSpecularLighting enable-background feSpecularLighting fill-opacity feSpecularLighting fill-rule feSpecularLighting fill feSpecularLighting filter feSpecularLighting flood-color feSpecularLighting flood-opacity feSpecularLighting font-family feSpecularLighting font-size-adjust feSpecularLighting font-size feSpecularLighting font-stretch feSpecularLighting font-style feSpecularLighting font-variant feSpecularLighting font-weight feSpecularLighting glyph-orientation-horizontal feSpecularLighting glyph-orientation-vertical feSpecularLighting image-rendering feSpecularLighting kerning feSpecularLighting letter-spacing feSpecularLighting lighting-color feSpecularLighting marker-end feSpecularLighting marker-mid feSpecularLighting marker-start feSpecularLighting mask feSpecularLighting opacity feSpecularLighting overflow feSpecularLighting pointer-events feSpecularLighting shape-rendering feSpecularLighting stop-color feSpecularLighting stop-opacity feSpecularLighting stroke-dasharray feSpecularLighting stroke-dashoffset feSpecularLighting stroke-linecap feSpecularLighting stroke-linejoin feSpecularLighting stroke-miterlimit feSpecularLighting stroke-opacity feSpecularLighting stroke-width feSpecularLighting stroke feSpecularLighting text-anchor feSpecularLighting text-decoration feSpecularLighting text-rendering feSpecularLighting unicode-bidi feSpecularLighting visibility feSpecularLighting word-spacingandwriting-mode feSpecularLighting alignment-baseline feTile baseline-shift feTile clip-path feTile clip-rule feTile clip feTile color-interpolation-filters feTile color-interpolation feTile color-profile feTile color-rendering feTile color feTile cursor feTile direction feTile display feTile dominant-baseline feTile enable-background feTile fill-opacity feTile fill-rule feTile fill feTile filter feTile flood-color feTile flood-opacity feTile font-family feTile font-size-adjust feTile font-size feTile font-stretch feTile font-style feTile font-variant feTile font-weight feTile glyph-orientation-horizontal feTile glyph-orientation-vertical feTile image-rendering feTile kerning feTile letter-spacing feTile lighting-color feTile marker-end feTile marker-mid feTile marker-start feTile mask feTile opacity feTile overflow feTile pointer-events feTile shape-rendering feTile stop-color feTile stop-opacity feTile stroke-dasharray feTile stroke-dashoffset feTile stroke-linecap feTile stroke-linejoin feTile stroke-miterlimit feTile stroke-opacity feTile stroke-width feTile stroke feTile text-anchor feTile text-decoration feTile text-rendering feTile unicode-bidi feTile visibility feTile word-spacingandwriting-mode feTile alignment-baseline feTurbulence baseline-shift feTurbulence clip-path feTurbulence clip-rule feTurbulence clip feTurbulence color-interpolation-filters feTurbulence color-interpolation feTurbulence color-profile feTurbulence color-rendering feTurbulence color feTurbulence cursor feTurbulence direction feTurbulence display feTurbulence dominant-baseline feTurbulence enable-background feTurbulence fill-opacity feTurbulence fill-rule feTurbulence fill feTurbulence filter feTurbulence flood-color feTurbulence flood-opacity feTurbulence font-family feTurbulence font-size-adjust feTurbulence font-size feTurbulence font-stretch feTurbulence font-style feTurbulence font-variant feTurbulence font-weight feTurbulence glyph-orientation-horizontal feTurbulence glyph-orientation-vertical feTurbulence image-rendering feTurbulence kerning feTurbulence letter-spacing feTurbulence lighting-color feTurbulence marker-end feTurbulence marker-mid feTurbulence marker-start feTurbulence mask feTurbulence opacity feTurbulence overflow feTurbulence pointer-events feTurbulence shape-rendering feTurbulence stop-color feTurbulence stop-opacity feTurbulence stroke-dasharray feTurbulence stroke-dashoffset feTurbulence stroke-linecap feTurbulence stroke-linejoin feTurbulence stroke-miterlimit feTurbulence stroke-opacity feTurbulence stroke-width feTurbulence stroke feTurbulence text-anchor feTurbulence text-decoration feTurbulence text-rendering feTurbulence unicode-bidi feTurbulence visibility feTurbulence word-spacingandwriting-mode feTurbulence alignment-baseline filter baseline-shift filter clip-path filter clip-rule filter clip filter color-interpolation-filters filter color-interpolation filter color-profile filter color-rendering filter color filter cursor filter direction filter display filter dominant-baseline filter enable-background filter fill-opacity filter fill-rule filter fill filter filter filter flood-color filter flood-opacity filter font-family filter font-size-adjust filter font-size filter font-stretch filter font-style filter font-variant filter font-weight filter glyph-orientation-horizontal filter glyph-orientation-vertical filter image-rendering filter kerning filter letter-spacing filter lighting-color filter marker-end filter marker-mid filter marker-start filter mask filter opacity filter overflow filter pointer-events filter shape-rendering filter stop-color filter stop-opacity filter stroke-dasharray filter stroke-dashoffset filter stroke-linecap filter stroke-linejoin filter stroke-miterlimit filter stroke-opacity filter stroke-width filter stroke filter text-anchor filter text-decoration filter text-rendering filter unicode-bidi filter visibility filter word-spacingandwriting-mode filter alignment-baseline font baseline-shift font clip-path font clip-rule font clip font color-interpolation-filters font color-interpolation font color-profile font color-rendering font color font cursor font direction font display font dominant-baseline font enable-background font fill-opacity font fill-rule font fill font filter font flood-color font flood-opacity font font-family font font-size-adjust font font-size font font-stretch font font-style font font-variant font font-weight font glyph-orientation-horizontal font glyph-orientation-vertical font image-rendering font kerning font letter-spacing font lighting-color font marker-end font marker-mid font marker-start font mask font opacity font overflow font pointer-events font shape-rendering font stop-color font stop-opacity font stroke-dasharray font stroke-dashoffset font stroke-linecap font stroke-linejoin font stroke-miterlimit font stroke-opacity font stroke-width font stroke font text-anchor font text-decoration font text-rendering font unicode-bidi font visibility font word-spacingandwriting-mode font alignment-baseline foreignObject baseline-shift foreignObject clip-path foreignObject clip-rule foreignObject clip foreignObject color-interpolation-filters foreignObject color-interpolation foreignObject color-profile foreignObject color-rendering foreignObject color foreignObject cursor foreignObject direction foreignObject display foreignObject dominant-baseline foreignObject enable-background foreignObject fill-opacity foreignObject fill-rule foreignObject fill foreignObject filter foreignObject flood-color foreignObject flood-opacity foreignObject font-family foreignObject font-size-adjust foreignObject font-size foreignObject font-stretch foreignObject font-style foreignObject font-variant foreignObject font-weight foreignObject glyph-orientation-horizontal foreignObject glyph-orientation-vertical foreignObject image-rendering foreignObject kerning foreignObject letter-spacing foreignObject lighting-color foreignObject marker-end foreignObject marker-mid foreignObject marker-start foreignObject mask foreignObject opacity foreignObject overflow foreignObject pointer-events foreignObject shape-rendering foreignObject stop-color foreignObject stop-opacity foreignObject stroke-dasharray foreignObject stroke-dashoffset foreignObject stroke-linecap foreignObject stroke-linejoin foreignObject stroke-miterlimit foreignObject stroke-opacity foreignObject stroke-width foreignObject stroke foreignObject text-anchor foreignObject text-decoration foreignObject text-rendering foreignObject unicode-bidi foreignObject visibility foreignObject word-spacingandwriting-mode foreignObject alignment-baseline g baseline-shift g clip-path g clip-rule g clip g color-interpolation-filters g color-interpolation g color-profile g color-rendering g color g cursor g direction g display g dominant-baseline g enable-background g fill-opacity g fill-rule g fill g filter g flood-color g flood-opacity g font-family g font-size-adjust g font-size g font-stretch g font-style g font-variant g font-weight g glyph-orientation-horizontal g glyph-orientation-vertical g image-rendering g kerning g letter-spacing g lighting-color g marker-end g marker-mid g marker-start g mask g opacity g overflow g pointer-events g shape-rendering g stop-color g stop-opacity g stroke-dasharray g stroke-dashoffset g stroke-linecap g stroke-linejoin g stroke-miterlimit g stroke-opacity g stroke-width g stroke g text-anchor g text-decoration g text-rendering g unicode-bidi g visibility g word-spacingandwriting-mode g alignment-baseline glyph baseline-shift glyph clip-path glyph clip-rule glyph clip glyph color-interpolation-filters glyph color-interpolation glyph color-profile glyph color-rendering glyph color glyph cursor glyph direction glyph display glyph dominant-baseline glyph enable-background glyph fill-opacity glyph fill-rule glyph fill glyph filter glyph flood-color glyph flood-opacity glyph font-family glyph font-size-adjust glyph font-size glyph font-stretch glyph font-style glyph font-variant glyph font-weight glyph glyph-orientation-horizontal glyph glyph-orientation-vertical glyph image-rendering glyph kerning glyph letter-spacing glyph lighting-color glyph marker-end glyph marker-mid glyph marker-start glyph mask glyph opacity glyph overflow glyph pointer-events glyph shape-rendering glyph stop-color glyph stop-opacity glyph stroke-dasharray glyph stroke-dashoffset glyph stroke-linecap glyph stroke-linejoin glyph stroke-miterlimit glyph stroke-opacity glyph stroke-width glyph stroke glyph text-anchor glyph text-decoration glyph text-rendering glyph unicode-bidi glyph visibility glyph word-spacingandwriting-mode glyph alignment-baseline glyphRef baseline-shift glyphRef clip-path glyphRef clip-rule glyphRef clip glyphRef color-interpolation-filters glyphRef color-interpolation glyphRef color-profile glyphRef color-rendering glyphRef color glyphRef cursor glyphRef direction glyphRef display glyphRef dominant-baseline glyphRef enable-background glyphRef fill-opacity glyphRef fill-rule glyphRef fill glyphRef filter glyphRef flood-color glyphRef flood-opacity glyphRef font-family glyphRef font-size-adjust glyphRef font-size glyphRef font-stretch glyphRef font-style glyphRef font-variant glyphRef font-weight glyphRef glyph-orientation-horizontal glyphRef glyph-orientation-vertical glyphRef image-rendering glyphRef kerning glyphRef letter-spacing glyphRef lighting-color glyphRef marker-end glyphRef marker-mid glyphRef marker-start glyphRef mask glyphRef opacity glyphRef overflow glyphRef pointer-events glyphRef shape-rendering glyphRef stop-color glyphRef stop-opacity glyphRef stroke-dasharray glyphRef stroke-dashoffset glyphRef stroke-linecap glyphRef stroke-linejoin glyphRef stroke-miterlimit glyphRef stroke-opacity glyphRef stroke-width glyphRef stroke glyphRef text-anchor glyphRef text-decoration glyphRef text-rendering glyphRef unicode-bidi glyphRef visibility glyphRef word-spacingandwriting-mode glyphRef alignment-baseline image baseline-shift image clip-path image clip-rule image clip image color-interpolation-filters image color-interpolation image color-profile image color-rendering image color image cursor image direction image display image dominant-baseline image enable-background image fill-opacity image fill-rule image fill image filter image flood-color image flood-opacity image font-family image font-size-adjust image font-size image font-stretch image font-style image font-variant image font-weight image glyph-orientation-horizontal image glyph-orientation-vertical image image-rendering image kerning image letter-spacing image lighting-color image marker-end image marker-mid image marker-start image mask image opacity image overflow image pointer-events image shape-rendering image stop-color image stop-opacity image stroke-dasharray image stroke-dashoffset image stroke-linecap image stroke-linejoin image stroke-miterlimit image stroke-opacity image stroke-width image stroke image text-anchor image text-decoration image text-rendering image unicode-bidi image visibility image word-spacingandwriting-mode image alignment-baseline line baseline-shift line clip-path line clip-rule line clip line color-interpolation-filters line color-interpolation line color-profile line color-rendering line color line cursor line direction line display line dominant-baseline line enable-background line fill-opacity line fill-rule line fill line filter line flood-color line flood-opacity line font-family line font-size-adjust line font-size line font-stretch line font-style line font-variant line font-weight line glyph-orientation-horizontal line glyph-orientation-vertical line image-rendering line kerning line letter-spacing line lighting-color line marker-end line marker-mid line marker-start line mask line opacity line overflow line pointer-events line shape-rendering line stop-color line stop-opacity line stroke-dasharray line stroke-dashoffset line stroke-linecap line stroke-linejoin line stroke-miterlimit line stroke-opacity line stroke-width line stroke line text-anchor line text-decoration line text-rendering line unicode-bidi line visibility line word-spacingandwriting-mode line alignment-baseline linearGradient baseline-shift linearGradient clip-path linearGradient clip-rule linearGradient clip linearGradient color-interpolation-filters linearGradient color-interpolation linearGradient color-profile linearGradient color-rendering linearGradient color linearGradient cursor linearGradient direction linearGradient display linearGradient dominant-baseline linearGradient enable-background linearGradient fill-opacity linearGradient fill-rule linearGradient fill linearGradient filter linearGradient flood-color linearGradient flood-opacity linearGradient font-family linearGradient font-size-adjust linearGradient font-size linearGradient font-stretch linearGradient font-style linearGradient font-variant linearGradient font-weight linearGradient glyph-orientation-horizontal linearGradient glyph-orientation-vertical linearGradient image-rendering linearGradient kerning linearGradient letter-spacing linearGradient lighting-color linearGradient marker-end linearGradient marker-mid linearGradient marker-start linearGradient mask linearGradient opacity linearGradient overflow linearGradient pointer-events linearGradient shape-rendering linearGradient stop-color linearGradient stop-opacity linearGradient stroke-dasharray linearGradient stroke-dashoffset linearGradient stroke-linecap linearGradient stroke-linejoin linearGradient stroke-miterlimit linearGradient stroke-opacity linearGradient stroke-width linearGradient stroke linearGradient text-anchor linearGradient text-decoration linearGradient text-rendering linearGradient unicode-bidi linearGradient visibility linearGradient word-spacingandwriting-mode linearGradient alignment-baseline marker baseline-shift marker clip-path marker clip-rule marker clip marker color-interpolation-filters marker color-interpolation marker color-profile marker color-rendering marker color marker cursor marker direction marker display marker dominant-baseline marker enable-background marker fill-opacity marker fill-rule marker fill marker filter marker flood-color marker flood-opacity marker font-family marker font-size-adjust marker font-size marker font-stretch marker font-style marker font-variant marker font-weight marker glyph-orientation-horizontal marker glyph-orientation-vertical marker image-rendering marker kerning marker letter-spacing marker lighting-color marker marker-end marker marker-mid marker marker-start marker mask marker opacity marker overflow marker pointer-events marker shape-rendering marker stop-color marker stop-opacity marker stroke-dasharray marker stroke-dashoffset marker stroke-linecap marker stroke-linejoin marker stroke-miterlimit marker stroke-opacity marker stroke-width marker stroke marker text-anchor marker text-decoration marker text-rendering marker unicode-bidi marker visibility marker word-spacingandwriting-mode marker alignment-baseline mask baseline-shift mask clip-path mask clip-rule mask clip mask color-interpolation-filters mask color-interpolation mask color-profile mask color-rendering mask color mask cursor mask direction mask display mask dominant-baseline mask enable-background mask fill-opacity mask fill-rule mask fill mask filter mask flood-color mask flood-opacity mask font-family mask font-size-adjust mask font-size mask font-stretch mask font-style mask font-variant mask font-weight mask glyph-orientation-horizontal mask glyph-orientation-vertical mask image-rendering mask kerning mask letter-spacing mask lighting-color mask marker-end mask marker-mid mask marker-start mask mask mask opacity mask overflow mask pointer-events mask shape-rendering mask stop-color mask stop-opacity mask stroke-dasharray mask stroke-dashoffset mask stroke-linecap mask stroke-linejoin mask stroke-miterlimit mask stroke-opacity mask stroke-width mask stroke mask text-anchor mask text-decoration mask text-rendering mask unicode-bidi mask visibility mask word-spacingandwriting-mode mask alignment-baseline missing-glyph baseline-shift missing-glyph clip-path missing-glyph clip-rule missing-glyph clip missing-glyph color-interpolation-filters missing-glyph color-interpolation missing-glyph color-profile missing-glyph color-rendering missing-glyph color missing-glyph cursor missing-glyph direction missing-glyph display missing-glyph dominant-baseline missing-glyph enable-background missing-glyph fill-opacity missing-glyph fill-rule missing-glyph fill missing-glyph filter missing-glyph flood-color missing-glyph flood-opacity missing-glyph font-family missing-glyph font-size-adjust missing-glyph font-size missing-glyph font-stretch missing-glyph font-style missing-glyph font-variant missing-glyph font-weight missing-glyph glyph-orientation-horizontal missing-glyph glyph-orientation-vertical missing-glyph image-rendering missing-glyph kerning missing-glyph letter-spacing missing-glyph lighting-color missing-glyph marker-end missing-glyph marker-mid missing-glyph marker-start missing-glyph mask missing-glyph opacity missing-glyph overflow missing-glyph pointer-events missing-glyph shape-rendering missing-glyph stop-color missing-glyph stop-opacity missing-glyph stroke-dasharray missing-glyph stroke-dashoffset missing-glyph stroke-linecap missing-glyph stroke-linejoin missing-glyph stroke-miterlimit missing-glyph stroke-opacity missing-glyph stroke-width missing-glyph stroke missing-glyph text-anchor missing-glyph text-decoration missing-glyph text-rendering missing-glyph unicode-bidi missing-glyph visibility missing-glyph word-spacingandwriting-mode missing-glyph alignment-baseline path baseline-shift path clip-path path clip-rule path clip path color-interpolation-filters path color-interpolation path color-profile path color-rendering path color path cursor path direction path display path dominant-baseline path enable-background path fill-opacity path fill-rule path fill path filter path flood-color path flood-opacity path font-family path font-size-adjust path font-size path font-stretch path font-style path font-variant path font-weight path glyph-orientation-horizontal path glyph-orientation-vertical path image-rendering path kerning path letter-spacing path lighting-color path marker-end path marker-mid path marker-start path mask path opacity path overflow path pointer-events path shape-rendering path stop-color path stop-opacity path stroke-dasharray path stroke-dashoffset path stroke-linecap path stroke-linejoin path stroke-miterlimit path stroke-opacity path stroke-width path stroke path text-anchor path text-decoration path text-rendering path unicode-bidi path visibility path word-spacingandwriting-mode path alignment-baseline pattern baseline-shift pattern clip-path pattern clip-rule pattern clip pattern color-interpolation-filters pattern color-interpolation pattern color-profile pattern color-rendering pattern color pattern cursor pattern direction pattern display pattern dominant-baseline pattern enable-background pattern fill-opacity pattern fill-rule pattern fill pattern filter pattern flood-color pattern flood-opacity pattern font-family pattern font-size-adjust pattern font-size pattern font-stretch pattern font-style pattern font-variant pattern font-weight pattern glyph-orientation-horizontal pattern glyph-orientation-vertical pattern image-rendering pattern kerning pattern letter-spacing pattern lighting-color pattern marker-end pattern marker-mid pattern marker-start pattern mask pattern opacity pattern overflow pattern pointer-events pattern shape-rendering pattern stop-color pattern stop-opacity pattern stroke-dasharray pattern stroke-dashoffset pattern stroke-linecap pattern stroke-linejoin pattern stroke-miterlimit pattern stroke-opacity pattern stroke-width pattern stroke pattern text-anchor pattern text-decoration pattern text-rendering pattern unicode-bidi pattern visibility pattern word-spacingandwriting-mode pattern alignment-baseline polygon baseline-shift polygon clip-path polygon clip-rule polygon clip polygon color-interpolation-filters polygon color-interpolation polygon color-profile polygon color-rendering polygon color polygon cursor polygon direction polygon display polygon dominant-baseline polygon enable-background polygon fill-opacity polygon fill-rule polygon fill polygon filter polygon flood-color polygon flood-opacity polygon font-family polygon font-size-adjust polygon font-size polygon font-stretch polygon font-style polygon font-variant polygon font-weight polygon glyph-orientation-horizontal polygon glyph-orientation-vertical polygon image-rendering polygon kerning polygon letter-spacing polygon lighting-color polygon marker-end polygon marker-mid polygon marker-start polygon mask polygon opacity polygon overflow polygon pointer-events polygon shape-rendering polygon stop-color polygon stop-opacity polygon stroke-dasharray polygon stroke-dashoffset polygon stroke-linecap polygon stroke-linejoin polygon stroke-miterlimit polygon stroke-opacity polygon stroke-width polygon stroke polygon text-anchor polygon text-decoration polygon text-rendering polygon unicode-bidi polygon visibility polygon word-spacingandwriting-mode polygon alignment-baseline polyline baseline-shift polyline clip-path polyline clip-rule polyline clip polyline color-interpolation-filters polyline color-interpolation polyline color-profile polyline color-rendering polyline color polyline cursor polyline direction polyline display polyline dominant-baseline polyline enable-background polyline fill-opacity polyline fill-rule polyline fill polyline filter polyline flood-color polyline flood-opacity polyline font-family polyline font-size-adjust polyline font-size polyline font-stretch polyline font-style polyline font-variant polyline font-weight polyline glyph-orientation-horizontal polyline glyph-orientation-vertical polyline image-rendering polyline kerning polyline letter-spacing polyline lighting-color polyline marker-end polyline marker-mid polyline marker-start polyline mask polyline opacity polyline overflow polyline pointer-events polyline shape-rendering polyline stop-color polyline stop-opacity polyline stroke-dasharray polyline stroke-dashoffset polyline stroke-linecap polyline stroke-linejoin polyline stroke-miterlimit polyline stroke-opacity polyline stroke-width polyline stroke polyline text-anchor polyline text-decoration polyline text-rendering polyline unicode-bidi polyline visibility polyline word-spacingandwriting-mode polyline alignment-baseline radialGradient baseline-shift radialGradient clip-path radialGradient clip-rule radialGradient clip radialGradient color-interpolation-filters radialGradient color-interpolation radialGradient color-profile radialGradient color-rendering radialGradient color radialGradient cursor radialGradient direction radialGradient display radialGradient dominant-baseline radialGradient enable-background radialGradient fill-opacity radialGradient fill-rule radialGradient fill radialGradient filter radialGradient flood-color radialGradient flood-opacity radialGradient font-family radialGradient font-size-adjust radialGradient font-size radialGradient font-stretch radialGradient font-style radialGradient font-variant radialGradient font-weight radialGradient glyph-orientation-horizontal radialGradient glyph-orientation-vertical radialGradient image-rendering radialGradient kerning radialGradient letter-spacing radialGradient lighting-color radialGradient marker-end radialGradient marker-mid radialGradient marker-start radialGradient mask radialGradient opacity radialGradient overflow radialGradient pointer-events radialGradient shape-rendering radialGradient stop-color radialGradient stop-opacity radialGradient stroke-dasharray radialGradient stroke-dashoffset radialGradient stroke-linecap radialGradient stroke-linejoin radialGradient stroke-miterlimit radialGradient stroke-opacity radialGradient stroke-width radialGradient stroke radialGradient text-anchor radialGradient text-decoration radialGradient text-rendering radialGradient unicode-bidi radialGradient visibility radialGradient word-spacingandwriting-mode radialGradient alignment-baseline rect baseline-shift rect clip-path rect clip-rule rect clip rect color-interpolation-filters rect color-interpolation rect color-profile rect color-rendering rect color rect cursor rect direction rect display rect dominant-baseline rect enable-background rect fill-opacity rect fill-rule rect fill rect filter rect flood-color rect flood-opacity rect font-family rect font-size-adjust rect font-size rect font-stretch rect font-style rect font-variant rect font-weight rect glyph-orientation-horizontal rect glyph-orientation-vertical rect image-rendering rect kerning rect letter-spacing rect lighting-color rect marker-end rect marker-mid rect marker-start rect mask rect opacity rect overflow rect pointer-events rect shape-rendering rect stop-color rect stop-opacity rect stroke-dasharray rect stroke-dashoffset rect stroke-linecap rect stroke-linejoin rect stroke-miterlimit rect stroke-opacity rect stroke-width rect stroke rect text-anchor rect text-decoration rect text-rendering rect unicode-bidi rect visibility rect word-spacingandwriting-mode rect alignment-baseline stop baseline-shift stop clip-path stop clip-rule stop clip stop color-interpolation-filters stop color-interpolation stop color-profile stop color-rendering stop color stop cursor stop direction stop display stop dominant-baseline stop enable-background stop fill-opacity stop fill-rule stop fill stop filter stop flood-color stop flood-opacity stop font-family stop font-size-adjust stop font-size stop font-stretch stop font-style stop font-variant stop font-weight stop glyph-orientation-horizontal stop glyph-orientation-vertical stop image-rendering stop kerning stop letter-spacing stop lighting-color stop marker-end stop marker-mid stop marker-start stop mask stop opacity stop overflow stop pointer-events stop shape-rendering stop stop-color stop stop-opacity stop stroke-dasharray stop stroke-dashoffset stop stroke-linecap stop stroke-linejoin stop stroke-miterlimit stop stroke-opacity stop stroke-width stop stroke stop text-anchor stop text-decoration stop text-rendering stop unicode-bidi stop visibility stop word-spacingandwriting-mode stop alignment-baseline svg baseline-shift svg clip-path svg clip-rule svg clip svg color-interpolation-filters svg color-interpolation svg color-profile svg color-rendering svg color svg cursor svg direction svg display svg dominant-baseline svg enable-background svg fill-opacity svg fill-rule svg fill svg filter svg flood-color svg flood-opacity svg font-family svg font-size-adjust svg font-size svg font-stretch svg font-style svg font-variant svg font-weight svg glyph-orientation-horizontal svg glyph-orientation-vertical svg image-rendering svg kerning svg letter-spacing svg lighting-color svg marker-end svg marker-mid svg marker-start svg mask svg opacity svg overflow svg pointer-events svg shape-rendering svg stop-color svg stop-opacity svg stroke-dasharray svg stroke-dashoffset svg stroke-linecap svg stroke-linejoin svg stroke-miterlimit svg stroke-opacity svg stroke-width svg stroke svg text-anchor svg text-decoration svg text-rendering svg unicode-bidi svg visibility svg word-spacingandwriting-mode svg alignment-baseline switch baseline-shift switch clip-path switch clip-rule switch clip switch color-interpolation-filters switch color-interpolation switch color-profile switch color-rendering switch color switch cursor switch direction switch display switch dominant-baseline switch enable-background switch fill-opacity switch fill-rule switch fill switch filter switch flood-color switch flood-opacity switch font-family switch font-size-adjust switch font-size switch font-stretch switch font-style switch font-variant switch font-weight switch glyph-orientation-horizontal switch glyph-orientation-vertical switch image-rendering switch kerning switch letter-spacing switch lighting-color switch marker-end switch marker-mid switch marker-start switch mask switch opacity switch overflow switch pointer-events switch shape-rendering switch stop-color switch stop-opacity switch stroke-dasharray switch stroke-dashoffset switch stroke-linecap switch stroke-linejoin switch stroke-miterlimit switch stroke-opacity switch stroke-width switch stroke switch text-anchor switch text-decoration switch text-rendering switch unicode-bidi switch visibility switch word-spacingandwriting-mode switch alignment-baseline symbol baseline-shift symbol clip-path symbol clip-rule symbol clip symbol color-interpolation-filters symbol color-interpolation symbol color-profile symbol color-rendering symbol color symbol cursor symbol direction symbol display symbol dominant-baseline symbol enable-background symbol fill-opacity symbol fill-rule symbol fill symbol filter symbol flood-color symbol flood-opacity symbol font-family symbol font-size-adjust symbol font-size symbol font-stretch symbol font-style symbol font-variant symbol font-weight symbol glyph-orientation-horizontal symbol glyph-orientation-vertical symbol image-rendering symbol kerning symbol letter-spacing symbol lighting-color symbol marker-end symbol marker-mid symbol marker-start symbol mask symbol opacity symbol overflow symbol pointer-events symbol shape-rendering symbol stop-color symbol stop-opacity symbol stroke-dasharray symbol stroke-dashoffset symbol stroke-linecap symbol stroke-linejoin symbol stroke-miterlimit symbol stroke-opacity symbol stroke-width symbol stroke symbol text-anchor symbol text-decoration symbol text-rendering symbol unicode-bidi symbol visibility symbol word-spacingandwriting-mode symbol alignment-baseline text baseline-shift text clip-path text clip-rule text clip text color-interpolation-filters text color-interpolation text color-profile text color-rendering text color text cursor text direction text display text dominant-baseline text enable-background text fill-opacity text fill-rule text fill text filter text flood-color text flood-opacity text font-family text font-size-adjust text font-size text font-stretch text font-style text font-variant text font-weight text glyph-orientation-horizontal text glyph-orientation-vertical text image-rendering text kerning text letter-spacing text lighting-color text marker-end text marker-mid text marker-start text mask text opacity text overflow text pointer-events text shape-rendering text stop-color text stop-opacity text stroke-dasharray text stroke-dashoffset text stroke-linecap text stroke-linejoin text stroke-miterlimit text stroke-opacity text stroke-width text stroke text text-anchor text text-decoration text text-rendering text unicode-bidi text visibility text word-spacingandwriting-mode text alignment-baseline textPath baseline-shift textPath clip-path textPath clip-rule textPath clip textPath color-interpolation-filters textPath color-interpolation textPath color-profile textPath color-rendering textPath color textPath cursor textPath direction textPath display textPath dominant-baseline textPath enable-background textPath fill-opacity textPath fill-rule textPath fill textPath filter textPath flood-color textPath flood-opacity textPath font-family textPath font-size-adjust textPath font-size textPath font-stretch textPath font-style textPath font-variant textPath font-weight textPath glyph-orientation-horizontal textPath glyph-orientation-vertical textPath image-rendering textPath kerning textPath letter-spacing textPath lighting-color textPath marker-end textPath marker-mid textPath marker-start textPath mask textPath opacity textPath overflow textPath pointer-events textPath shape-rendering textPath stop-color textPath stop-opacity textPath stroke-dasharray textPath stroke-dashoffset textPath stroke-linecap textPath stroke-linejoin textPath stroke-miterlimit textPath stroke-opacity textPath stroke-width textPath stroke textPath text-anchor textPath text-decoration textPath text-rendering textPath unicode-bidi textPath visibility textPath word-spacingandwriting-mode textPath alignment-baseline tref baseline-shift tref clip-path tref clip-rule tref clip tref color-interpolation-filters tref color-interpolation tref color-profile tref color-rendering tref color tref cursor tref direction tref display tref dominant-baseline tref enable-background tref fill-opacity tref fill-rule tref fill tref filter tref flood-color tref flood-opacity tref font-family tref font-size-adjust tref font-size tref font-stretch tref font-style tref font-variant tref font-weight tref glyph-orientation-horizontal tref glyph-orientation-vertical tref image-rendering tref kerning tref letter-spacing tref lighting-color tref marker-end tref marker-mid tref marker-start tref mask tref opacity tref overflow tref pointer-events tref shape-rendering tref stop-color tref stop-opacity tref stroke-dasharray tref stroke-dashoffset tref stroke-linecap tref stroke-linejoin tref stroke-miterlimit tref stroke-opacity tref stroke-width tref stroke tref text-anchor tref text-decoration tref text-rendering tref unicode-bidi tref visibility tref word-spacingandwriting-mode tref alignment-baseline tspananduse baseline-shift tspananduse clip-path tspananduse clip-rule tspananduse clip tspananduse color-interpolation-filters tspananduse color-interpolation tspananduse color-profile tspananduse color-rendering tspananduse color tspananduse cursor tspananduse direction tspananduse display tspananduse dominant-baseline tspananduse enable-background tspananduse fill-opacity tspananduse fill-rule tspananduse fill tspananduse filter tspananduse flood-color tspananduse flood-opacity tspananduse font-family tspananduse font-size-adjust tspananduse font-size tspananduse font-stretch tspananduse font-style tspananduse font-variant tspananduse font-weight tspananduse glyph-orientation-horizontal tspananduse glyph-orientation-vertical tspananduse image-rendering tspananduse kerning tspananduse letter-spacing tspananduse lighting-color tspananduse marker-end tspananduse marker-mid tspananduse marker-start tspananduse mask tspananduse opacity tspananduse overflow tspananduse pointer-events tspananduse shape-rendering tspananduse stop-color tspananduse stop-opacity tspananduse stroke-dasharray tspananduse stroke-dashoffset tspananduse stroke-linecap tspananduse stroke-linejoin tspananduse stroke-miterlimit tspananduse stroke-opacity tspananduse stroke-width tspananduse stroke tspananduse text-anchor tspananduse text-decoration tspananduse text-rendering tspananduse unicode-bidi tspananduse visibility tspananduse word-spacingandwriting-mode tspananduse ������������������������gridSVG/inst/NEWS.Rd��������������������������������������������������������������������������������0000654�0001762�0000144�00000067573�14402217615�013624� 0����������������������������������������������������������������������������������������������������ustar �ligges��������������������������users������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\name{NEWS} \title{NEWS file for the gridSVG package} \encoding{UTF-8} \section{Changes in version 1.7-5}{ \itemize{ \item Fix in \code{escapeXPath()} for \dQuote{the condition has length > 1} error. Thanks to Dzimitry Markouski. \item Fixes for problems found by \code{tools::checkS3methods()}. } } \section{Changes in version 1.7-4}{ \itemize{ \item Fix in \code{feColorMatrix()} for \dQuote{length > 1 in coercion to logical} error. Thanks to CRAN testing and Brian Ripley! } } \section{Changes in version 1.7-3}{ \itemize{ \item Internal implementation change to avoid assigning values into baseenv. } } \section{Changes in version 1.7-2}{ \itemize{ \item Simpler and better transformations for exported SVG elements. \item Better protection against \code{NA} values in labels in text grobs. Reported by Daniel Barnett. } } \section{Changes in version 1.7-1}{ \itemize{ \item Fix for evaluation of arguments passed to \code{pdf()} device within \code{gridsvg()}. Patch provided by Philipp Angerer. \item Avoid peeking at internal representation of \pkg{grid} units. } } \section{Changes in version 1.7-0}{ \itemize{ \item Update for addition of \code{pathId} argument in \code{grid.path}. } } \section{Changes in version 1.6-1}{ \itemize{ \item Additional fix for \code{pch=NA} } } \section{Changes in version 1.6-0}{ \itemize{ \item Generation of SVG from \code{grid.export()} is now much faster (when you are drawing many rectangles, points, circles, or lines). } } \section{Changes in version 1.5-1}{ \itemize{ \item Fix to ensure that \code{r} attribute in radial gradients is non-negative. \item Fix for strict attribute checking now includes presentation attributes. \item Fix for \pkg{gtable} support when grob in table cell has viewport with non-centering alignment (e.g., a \pkg{ggplot2} plot with more than one legend). Reported by Tauno Metsalu. \item Switched JSON library from \pkg{RJSONIO} to \pkg{jsonlite}. \pkg{gridSVG} no longer needs to compile C code as it can import a base64 encoding method from \pkg{jsonlite}. \item Bug fix to handle exporting par(lty="blank"), e.g., from boxplot() (converted with \pkg{gridGraphics}). Thanks to Volker Sorge. \item Bug fix to handle pch=NA. Thanks to Volker Sorge. } } \section{Changes in version 1.5-0}{ \itemize{ \item Added \code{strict} argument for \code{grid.export()} and \code{gridsvg()} to allow control over whether SVG attributes are checked for validity. \item Added \code{rootAttrs} argument for \code{grid.export()} and \code{gridsvg()} to allow control over attributes of top-level \code{} element. Suggestion and original patch from Thell Fowler. } } \section{Changes in version 1.4-4}{ \itemize{ \item Fixed bug where \code{gpar(col=c(foo="red"))} would not work (the name \code{foo} is now stripped). Reported by Simon Anders. \item Fixed bug in feColorMatrix(). The color matrix required transposing before export to SVG. \item Fixed bug in feComponentTransfer(). Was generating an feColorMatrix element \emph{and} was inlining transfer functions as attributes (rather than generating feFunc elements as children). \item Added support for NA values in locations and dimensions of graphical primitives. } } \section{Changes in version 1.4-3}{ \itemize{ \item Non-SVG style attributes are now \emph{removed} (with a warning) and this is done \emph{before} checking attributes for length equal to 1. This was in response to a problem reported by Wolfgang Huber. \item Fix evaluation of arguments when using the 'gridsvg' device. These were not being evaluated before being passed to 'grid.export'. Also reported by Wolfgang Huber. } } \section{Changes in version 1.4-2}{ \itemize{ \item Fixed export of clip grob (reported by Matthew Plourde). \item Fixed support for primitiveUnits="bbox" in filterEffect(). \item Fix memory initialisation problem in base64 C code. Reported in valgrind testing by Brian Ripley. } } \section{Changes in version 1.4-1}{ \itemize{ \item Fixed raster export so that original raster is never exported at a resolution LOWER than its native resolution. \item Added forceGrob() methods so that animations, garnishing, hyperlinks, etc are retained if a grob is forced. \item Fix for export of downViewport(path) when the depth of the resulting navigation is greater than depth(path). The visible manifestation of this bug was that elements were generated with an incorrect (too long/wrong depth) 'id' attribute. } } \section{Changes in version 1.4-0}{ \itemize{ \item Bumped R version requirement to R >= 3.1.0 because this version of gridSVG depends on some new exports from 'grid' \item Removed all nasty peeks into grid namespace (hence dependence on R 3.1.0). \item Tweaks to tests/ to make it easier to do QC checks. } } \section{Changes in version 1.3-0}{ \itemize{ \item Added support for rotated viewports (previously, rectangles, text, rasters, and clipping rects did not export properly, if drawn within a rotated viewport) Includes changes to rendering, animation, and coordinate system export and conversion. \item Fixed bug in viewportConvertWidth() and viewportConvertHeight() when converting from "native". \item Bug fix for positioning grobs with dimensions when a viewport's x-scale or y-scale is "flipped". (Simon) \item Reposition so that definitions are always available when used. Allows renderers like librsvg to render gridSVG images correctly. For consistency, pch definitions are also pushed into the same element. (Simon) \item Bug fix for 'lwd'. They are now defined as being 1/96 inches, which matches most graphics devices. (Simon) \item Only one 'gridsvg' device can now be open at once. This is because referenced content (like gradients, masks, etc) can have side effects across multiple 'gridsvg' devices. (Simon) \item New argument for 'grid.export()', 'progress'. When this argument is 'TRUE', messages will be printed to the console that show how far gridSVG is through processing an image. Additionally, progress bars are drawn to aid in estimation of progress. (Simon) \item New argument for 'grid.export()', 'compression'. This can take an integer value between 0 and 9 that describes the level of (gzip) compression applied to the exported image. (Simon) \item Added 'group', 'strict', 'grep', and 'global' arguments to grid.animate() (to bring it into line with grid.hyperlink() and grid.garnish(). \item Now Import rather than Depend on other packages. } } \section{Changes in version 1.2-0}{ \itemize{ \item The main change in this version involves taking advantage of changes in R version 3.0.0, which introduced a \code{grid.force()} function. This reduces the need for special methods in this package to draw custom grobs. \item Renamed 'gridToSVG' to 'grid.export'. 'gridToSVG' is now deprecated and will produce a warning but will still work. 'grid.export' should be used from now on. (Simon) \item Renamed 'grid.export' arguments for consistency. 'export.coords', 'export.mappings', and 'export.js' are now camelCased to 'exportCoords', 'exportMappings', 'exportJS' respectively. (Simon) \item Bumped R version dependency to R >= 3.0.0 because \code{gridToSVG()} now calls \code{grid.force()} before export \item Removed several \code{primToDev()} methods: \itemize{ \item \code{primToDev.xaxis()} \item \code{primToDev.yaxis()} \item \code{grobToDev.roundrect()} \item \code{grobToDev.frame()} \item \code{grobToDev.cellGrob()} } \item Bug fix for multi-line text when cex != 1 \item Initial implementation of pattern fills. Define pattern fills using 'pattern' and 'registerPatternFill' (and also 'registerPatternFillRef' to reuse an existing definition). These can then be applied to grobs using 'grid.patternFill' and 'patternFillGrob'. (Simon) \item Add a graphics device-like interface to gridSVG. Use 'gridsvg' to open a gridSVG device, and 'dev.off' to close it. (Simon) \item Added new 'gridSVG.newpage' function. It will clear all definitions of referenced content as well as calling 'grid.newpage'. (Simon) \item Now allowing for a prefix to be applied to all SVG ID attributes. Particularly useful when including multiple gridSVG images in the same document as it ensures uniqueness of IDs between documents. This can be used by specifying the 'prefix' argument to 'grid.export'. (Simon) \item New optional parameter to 'grid.export', 'addClasses'. If this argument is 'TRUE', then gridSVG will add an SVG class attribute to each grob or viewport it draws. The value of this attribute is what is produced by calling 'class' on the object. This is useful for allowing a convenient way of selecting more than one type of grob (e.g. the '.axis' CSS selector will select all axis grobs). (Simon) \item Added implementation of gradient fills for grobs. See 'linearGradient', 'radialGradient', and 'registerGradientFill' for defining gradients. Use 'grid.gradientFill' and 'gradientFillGrob' to apply gradient fills to grobs. (Simon) \item Bug fix for pointsGrobs. 'size' units were unnecessarily being manipulated. They should now be sized more accurately. (Simon & Paul) \item Added support for non-rectangular clipping paths. Use 'grid.clipPath' and 'clipPathGrob' for applying clipping paths to grobs. Use 'pushClipPath' for applying to the current viewport, which behaves similarly to 'grid.clip'. Uses an object produced by 'clipPath' as the definition for the clipping path and is registered by calling 'registerClipPath'. (Simon) \item Added support for opacity masks. Use 'grid.mask' and 'maskGrob' to apply opacity masks to grobs. Use 'pushMask' for applying to the current viewport, which behaves similarly to 'grid.clip'. Uses a grob as the definition for an opacity mask. Define the mask using 'mask' and 'registerMask'. (Simon) \item New function 'popContext', which stops the effect of 'pushMask' and 'pushClipPath'. (Simon) \item Bug fix for 'clipGrob's. Now unwinds only when a viewport is popped and just not any grouped content. (Simon) \item Added support for SVG filter effects. Create a filter effect by calling 'filterEffect' and adding as its children some of the various filter effect primitives by calling 'fe*' functions. Some of these filter effects are quite complicated so reading the function documentation and the SVG specification is required. Apply filter effects to grobs using 'grid.filter' and 'filterGrob'. (Simon) \item Bugfix for unit conversion functions. "svg" was not being handled correctly. (Simon) \item Bugfix for arrows. Definition now matches 'grid'. Now also handles the case when an arrow's line width is greater than its width/height (Firefox would not show the arrow prior to this fix). (Simon) \item Bugfix for polygons and xsplines. They should now handle the case where an 'id.length' is 0. (Simon) \item Plain SVG text can now be inserted into the image (in a similar manner to 'grid.element') using 'grid.textNode'. (Simon) \item Bugfix 'childrenOrder' is now respected for gTrees. \item Bugfix for colours. 0 is now valid (but transparent). (Simon) \item Fix for garnishing. They should now always be applied over the top of existing SVG attributes. (Simon) \item Bug fix for fill in arrow heads on xsplines (was being forced to transparent) \item Bug fix to trim identical values from start and end of xspline points (otherwise auto calculation of arrow orientation can get confused) } } \section{Changes in version 1.1-0}{ \itemize{ \item Added options for 'vpPath' and 'gPath' separators. This allows for easier manipulation in JavaScript as the separators no longer need to be the troublesome '::' (which require escaping with CSS selectors). (Simon) \item Exporting HTML files is now optional. (Simon) \item Always return a named list with the output of 'gridToSVG()'. This is invisibly returned when an SVG file is saved to disk. (Simon) \item Added 'usePaths' option for determining whether to use vpPaths and gPaths SVG IDs. (Simon) \item Added 'uniqueNames' option for generating unique names for SVG IDs from grob and viewport names. This further distances ourselves from the original grid names. (Simon) \item Added 'export.mappings' option for exporting name mapping information. This allows us to keep track of names and how they have been modified by gridSVG. (Simon) \item Added 'gridSVGMappings' function to import mapping information. (Simon) \item Added 'getSVGMappings' function to retrieve IDs generated for an image from a grob or a viewport name. Also exported are CSS selectors and XPath expressions. These can also be retrieved by 'getSVGMappings'. (Simon) \item Added new generic element interface, 'grid.element'. Allows any arbitrary SVG element (or tree of elements) to be inserted into the resulting SVG image. (Simon) \item When using the 'grep' argument for 'grid.hyperlink' and 'grid.garnish', we can now apply effects to multiple grobs where gPaths are regular expressions. (Simon) \item Added a new optional argument to 'gridToSVG', called 'annotate'. If 'TRUE', adds an SVG 'metadata' element below the root '' element that provides information on how 'gridToSVG' was called, along with metadata about gridSVG itself. Potentially useful for debugging. (Simon) \item Including support for 'clipGrob's. (Simon) \item Add support for 'gpar()'s 'lex' parameter. (Simon) } } \section{Changes in version 1.0-0}{ \itemize{ \item Initial implementation of viewport coordinate information exporting. (Simon) \item Added support for coordinate system importing and unit conversion. (Simon) \item Added support for exporting a JS file with utility functions present. Of note is that these include JS implementations of unit conversion routines. (Simon) \item Using viewport paths instead of viewport names for group elements. This causes us to refer to clipping paths and coordinate information based on the path. Viewport paths still have a numeric suffix. (Simon) \item Script MIME type updated to be more compatible with the SVG spec. (Simon) \item Added call to 'grid.refresh()' when running 'gridToSVG()' in order to avoid seeing a blank page. (Simon) \item Axis sub-grobs now adhere to the common gridSVG naming scheme. (Simon) \item All markup-based output is now written using the 'XML' package. (Simon) \item Added a new option to 'gridToSVG()', 'res'. This sets the device resolution so that we can reproduce plots regardless of the source device that 'gridToSVG()' grabs a grid scene from. (Simon) \item Added a new option to 'gridToSVG()', 'indent'. This either exports SVG with hierarchical indentation, or none at all. All output occurs in one line in the case that the 'indent' option is 'FALSE'. (Simon) \item Making the XML declaration optional. This means that inserting SVG straight into an HTML5 document is more easily done because the declaration is not necessary with inline SVG. (Simon) \item When the filename is set to 'NULL' or '""' return the SVG document as a list containing the root SVG node reference, coordinate data (list) and JS utility functions (character vector). (Simon) \item Use 'person()' in the DESCRIPTION file. (Simon) \item Reimplement 'pointsGrob's as SVG ''s, referenced by '' elements. Many more 'pch's are now animatable and drawable. Furthermore, the definitions of 'pch's now matches R's. (Simon) \item Added 'commentGrob' which writes comments when exported to SVG. (Simon) \item Use data URIs for 'rasterGrob's to embed images inline in SVG. Allows us to truly create standalone SVG files, rather than SVG with a lot of referenced PNGs. Lifted C code from the 'markdown' package (permissive licence) to do the job. Just keeping a very small subset of the C code ('markdown' does a lot of cool stuff that we don't need). (Simon) \item Bug-fix for 'gpar()'s, support 'font' as an alias for 'fontface'. In particular it affected some 'ggplot2' plots. (Simon) \item Adding in support for 'gtable' grobs as 'ggplot2' uses them. Requires borrowing code from 'gtable' to keep the package checker happy. (Simon) \item Small fix to avoid error from text justification outside the 0 to 1 range (by clamping justifications to the 0 to 1 range). \item Added 'viewBox' attribute to top-level element. \item Adding 'show' argument to 'grid.hyperlink()'. Allows links to opened in another window/tab rather than the current window/tab. (Simon). \item Added new functions to support global package options, plus created a global option to control the separator used when appending a number suffix to grob names for SVG element ids. \item Added 'grep' argument to grid.hyperlink() (suggestion by Oscar Perpignan Lamigueiro). } } \section{Changes in version 0.9-4}{ \itemize{ \item Added dependency on R >= 2.15.0 (plotmath location depends on 'grobAscent()') \item 'gridToSVG()' now copes with empty text, e.g., 'grid.text("")'. SVG elements are still produced (so that there is something in the SVG doc that corresponds to the original grid grob), but nothing should be drawn when the SVG doc is viewed. Reported by Gabriel Becker. \item 'gridToSVG()' no longer ignores 'hjust' and 'vjust' in 'grid.rect()'. Reported by Gabriel Becker. \item Conversion of points grobs for 'pch=15:20' now sets colours correctly (used to be wrong if points grob did not have explicit 'gpar(col)' setting). \item Improved animation of x/y/size for points grobs. Now works for pch=0,1,2, 5,6, 15--25 (i.e., does not work yet on symbols that are combinations of shapes) \item Fixed problem with raster aspect ratio. \item Fixed problem with animating raster grobs when width and/or height are not specified. \item Fixed bug in animating segments grobs (used to just not work). \item Added support for 'roundrect' grobs. \item Added support for 'move.to' and 'line.to' grobs. \item Rounding more SVG attributes to 2dp, only a few were missed earlier. (Simon) \item Points grobs for 'pch=15:20' now check whether there is an explicit 'gpar(col)'. If so, the fill is set to that, otherwise this is retrieved from the viewport. (Simon) } } \section{Changes in version 0.9-0}{ \itemize{ \item Added dependency on R >= 2.13.0 ('grid.grab(wrap=true)' only works with bug fix in r54813). \item Replaced partially matching arguments with full argument names. (Simon) \item Added plotmath support (outputs MathML). Note that positioning of MathML output is VERY unlikely to be accurate because there is not only the problem of font differences BUT ALSO the problem of a different math formula layout engine! \item Changed 'x11()' to 'dev.new()' in 'tests/*.R' code. \item Added animation support for polygon grobs and path grobs. \item Changed translation of rasterGrob grobs to SVG elements. They are now an '' wrapped in two ''s. The outer '' provides a translation; the inner '' provides a scaling; and the image is at (0, 0) and size (1, 1). This allows for ... \item Added animation support for 'rasterGrob' grobs. \item Added animation support for 'xsplineGrob' grobs. Note that closed xsplines are unlikely to animate smoothly (because the result is an animated '' with a variable number of operations). \item Added 'group' argument for 'grid.hyperlink()'. } } \section{Changes in version 0.8-0}{ \itemize{ \item Started rounding all numeric values to 2 dp (in SVG output). \item Added 'animValue' and 'animUnit' classes to somewhat formalise the specification of animation values for attributes. \item Removed the 'id' argument from 'grid.animate()'. \item Added 'begin' argument to 'grid.animate()'. \item Added 'animation' vignette, which describes how to specify animation values for 'grid.animate()'. \item Named top-level gTree 'gridSVG' (and therefore ''). \item Added 'inline' argument to 'grid.script()'. \item Added 'group' argument to 'grid.garnish()' so that attributes can be applied EITHER to the parent '' (the default) OR to the individual child elements. \item Changed conversion of graphical parameters. Instead of creating a single 'style' attribute in each element, now create individual SVG presentation attributes, like 'fill' and 'fill-opacity'. Also, ONLY record explicit 'gp' settings, rather than ALWAYS recording ALL current settings for ALL elements. \item Modified 'grid.garnish()' so that we can garnish the same grob multiple times (without overwriting previous garnish). \item Modified 'grid.animate()' so that we can animate the same grob multiple times (without overwriting previous animation). \item Added 'group' argument to 'grid.animate()' so that animation can apply EITHER to the individual child elements (the default) OR to the parent ''. \item Added vignette on extending the 'gridSVG' package. 'vignette("extensibility")' \item Added 'interpolate' argument to 'grid.animate()' (only currently supports 'linear' or 'discrete'). \item Implemented animation for segments grobs. \item Improved recording of viewports and vpPaths, when depth is greater than 1 (e.g., a vpStack). Now all viewports (not just the last one) are recorded as '' elements. } } \section{Changes in version 0.7-0}{ \itemize{ \item Added support for polyline grobs (Simon) \item Polygon grobs now respect the 'id' parameter (Simon) \item Semi-transparent colours can now be applied, making use of SVG's 'fill-opacity', 'stroke-opacity' and 'opacity' attributes. (Simon) \item xsplines can be drawn. Currently uses the '' or '' elements depending on whether the xspline is open or closed. (Simon) \item Lines, segments, polylines and xsplines now support the arrow parameter. (Simon) \item Grobs that produce multiple SVG elements now wrap the multiple elements in a '' with the original grob name on the '' and the multiple elements name-mangled with an integer suffix. (Simon) \item Multiline text support added. (Simon) \item Text with multiple labels no longer draw all labels at each location. (Simon) \item Line properties such as 'linejoin' and 'lineend' are now understood. (Simon) \item The 'gpar()' properties 'font'/'fontface' and 'fontfamily' are now supported. 'fontface' has a direct mapping to CSS, but 'fontfamily' is a little bit more messy. 'fontfamily' has to specify fallback fonts if none are present in the browser. The 'serif', 'sans' and 'mono' families are given a reasonable attempt. (Simon) \item Naming of grobs has been refactored into a function call 'subGrobName()'. To get the base name of the grob again, use 'baseGrobName()'. This allows an easier switch to a different naming scheme if necessary. (Simon) \item Initial support for 'frameGrob's (and 'cellGrob's). (Simon) \item Numerical justification of text is supported. Justification parameters are rounded so they belong to one of {0, 0.5, 1}. (Simon) \item 'gTree' support has been improved, all 'lattice' demos can now be drawn, along with some 'ggplot2' plots (assuming 'pch's are supported). (Simon) \item The HTML file that is produced now rounds the 'height' and 'width' attributes to the nearest integer to avoid scrollbars becoming visible. (Simon) \item Warnings are no longer produced regarding unclosed connections. (Simon) \item 'pch's 0:25 and 32:127 are supported. (Simon) \item Clipping to viewports is now possible. This occurs at the group level so that when a viewport is pushed to, its name is now suffixed with the number of the viewport that has been pushed to. (Simon) } } \section{Changes in version 0.6-0}{ \itemize{ \item Updated for the fact that the R graphics engine now supports complex paths. \itemize{ \item Removed 'grid.path()' and 'pathGrob' from this package (now in 'grid' package). \item Removed 'svgGrobify()' (the normal 'grobify()' in 'grImport' now handles complex paths). \item Tweaked passage of 'grid' pathgrob through generic device to SVG device. } } } \section{Changes in version 0.5-10}{ \itemize{ \item Conversion of 'gpar()' to SVG CSS now recognises 'fillrule' (so that pathgrobs [and polygons] can specify "nonzero" or "evenodd") \item 'svgGrobify()' passes 'object@rule' from PictureFill objects to 'gpar()' so that 'fill' and 'eofill' from imported images will be represented by appropriate paths in SVG. \item The current locale encoding (i.e., the encoding used to write the SVG file) is now recorded in the SVG file. } } \section{Changes in version 0.5-8}{ The following changes occurred between versions 0.5-3 and 0.5-8. \itemize{ \item Added 'redraw' argument to 'grid.garnish()' \item Improved sizing of text (especially when it is controlled via 'cex') \item Correction for rotated text (SVG measures angles clock-wise) \item Improved recording of SVG 'style' attribute so that it handles vectorized settings better. \item Improved recording of 'lty' setting in SVG output. \item Forced ALL gpar settings from grid to SVG output (i.e., no longer have to EXPLICITLY set gpars). \item Added checks for XML specials when producing SVG output. \item Improved sizing of text (and line widths) to be responsive to device resolution. \item Added 'grid.path()' and 'pathGrob()' which can be used to draw polygons with holes (when producing SVG output). \item Added 'svgGrobify()' which uses 'pathGrob()' when converting a Picture from 'grImport' to grobs. } } \section{Changes in version 0.4}{ \itemize{ \item Updated properly for R 2.0.0 Hyperlinks work the same as before, but Animation now works differently: you animate an entire grob rather than an individual unit. \item Integrated changes from Nathan Whitehouse and colleagues to support arbitrary SVG attributes and script chunks. \item SVG shape chunks now use grid grob names for the id attribute. If more than one chunk is produced then a 1:n suffix is attached. For example, 'grid.circle(r=1:4/8, name="circgrob")' produces four '' chunks with id's "circle1" to "circle4", but 'grid.rect(name="rectgrob")' produces a single '' chunk with id "rectgrob". \item Added NAMESPACE. } } \section{Changes in version 0.3}{ \itemize{ \item Minimal update to get version that runs with grid in R 1.9.* } } \section{Changes in version 0.2-1}{ The following changes occurred between version 0.2 and 0.2-1. \itemize{ \item Changed implementation of lpaste from recursive to loop (to avoid "evaluation nested too deeply" problems) \item Fixed up [cx|cy].time.unit for case where only one of x|y is a "time.unit". Used to not replicate the "normal" unit correctly. } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������