gsubfn/0000755000176200001440000000000013252703433011540 5ustar liggesusersgsubfn/COPYING0000644000176200001440000004363413252555677012624 0ustar liggesusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. gsubfn/inst/0000755000176200001440000000000013252577442012526 5ustar liggesusersgsubfn/inst/ANNOUNCE0000644000176200001440000000234213252555677013666 0ustar liggesusers gsubfn is a package with one function, gsubfn, that is like gsub except instead of taking a replacement string it takes a replacement function. For each match, that match is passed to the replacement function along with the backreferences, if any, and replaced with the output of the function. If the first two arguments are omitted the defaults are set to do perl-style (sort of) string interpolation as in last example. # adds 1 to each number in third arg # output: "(11 21)(101 31)" gsubfn("[[:digit:]]+", function(x) as.numeric(x)+1, "(10 20)(100 30)") # replaces pairs m:n with their sum # output: "abc 30 def 70 50" f <- function(x,y,z) as.numeric(y)+as.numeric(z) gsubfn("([0-9]+):([0-9]+)", f, "abc 10:20 def 30:40 50") # extracts numbers from string and places them into vector v # v becomes: 12 34 56 89 12 v <- c(); f <- function(x) v <<- append(v,as.numeric(x)) junk <- gsubfn("[0-9]+", f, "12;34:56,89,,12") v # makes all letters except first in word lower case # output: "I Like A Banana Split" gsubfn("\\B.", tolower, "I LIKE A BANANA SPLIT") # string interpolation (perl-style, somewhat) # output: pi = 3.14159265358979, 2pi = 6.28318530717959 cat(gsubfn( , , "pi = $pi, 2pi = `2*pi`\n")) gsubfn/inst/WISHLIST0000644000176200001440000000074313252555677013731 0ustar liggesusers WISHLIST o xml features o better simplification o extend fn$ to proto objects o can current rules of determining which formulas to convert to functions and which strings to perform interpolation on be improved? o check number of function args in addition to the number of ( to improve backref heuristic o add named character vectors as replacement argument objects o performance. See: https://stat.ethz.ch/pipermail/r-help/2008-November/179261.html gsubfn/inst/NEWS0000644000176200001440000002166213252570524013226 0ustar liggesusersChanges in 0.7-0 o transform2 added Changes in 0.6-7 o list[...] <- added for enabling multiple return values Changes in 0.6-6 o bug fix. strapplyc failed with "R" engine. o new read.pattern function o vignettes have been moved to vignette directory to satisfy R 3.1,0 Changes in 0.6-5 o the Vignettes menu has been removed removing any dependence on Zelig. Changes in 0.6-4 o in interactive Windows sessions under Rgui a Vignettes menu is created (or added to if present) provided the Zelig package is available o a scoping bug in fn$ was fixed o gsubfn was attempting to access the tcltk package even if the gsubfn.engine = "R" option was set. Fixed. o changes to accommodate R-2.16: (i) a non-ascii character in the gsubfn-si demo was removed (ii) rep on a pairlist is no longer supported by R but used by fn$ so a workaround was implemented o modified demos: (i) gsubfn-chron demo simplified based on latest read.zoo, (ii) modified gsubfn-gries to use lipsum.txt (which was added), (iii) mu in gsubfn-si changed to u so its all ASCII. Changes in 0.6-3 o strapplyc could not find tcltk. Fixed. o paste0 has been implemented in the base of R as of R 2.15.0 so it has been removed from this version of sqldf. Changes in 0.6-2 o package is now byte compiled hence depends on 2.14.0 or higher o if tcltk can be loaded it is loaded at startup. If not, the gsubfn.engine option is set to "R", a message is given and subsequent calls will use slower R code instead of tcltk. Previously this check was done at run time in the individual functions. o strapplyc now calls strapply if gsubfn.engine = "R" o now uses withVisible instead of internal function eval.with.vis. This internal change was made to satisfy R 2.15.0 and should not affect users. o added more unit tests Changes in 0.6 o strapplyc added, a fast tcl-only version of strapply specialized to FUN=c. o bug fix. perl was ignored when engine = "tcl". o unit test suite added. demo("gsubfn-unitTests") will run it. o added NAMESPACE Changes in 0.5-6 o bug fix. backref argument was being interpreted incorrectly in "R" engine. Changes in 0.5-5 o bug fix - engine option was not being interpreted correctly. Changes in 0.5-4 o strapply with engine = "tcl" (the default) now runs much faster on long strings Changes in 0.5-3 o new argument, empty, on strapply o gsubfn now has an engine argument. This was already the case with strapply. o new global option "gsubfn.engine" whose value can be "tcl" or "R". It is used as the default value for the gsubfn and strappy engine argument. If the option is not set then gsubfn and strapply default to the "tcl" regular expression engine if the current R installation has tcltk capability and "R" otherwise. o gsubfn pattern is no longer parenthesized internally if (1) engine = "tcl" or if (2) engine = "R" and backref > 0. See the example of replacing double characters in ?gsubfn . o if the function in gsubfn or strapply has an `&` argument then backref will be taken to be negative and the entire match passed through that arg. o in as.function.formula if any of ..1 through ..9 are found as free variables then ... is used as a trailng argument instead. If `&` is a free variable then it is placed at the beginning of the argument list. Changes in 0.5-2 o bug fixes Changes in 0.5-1 o fixes to pass R CMD CHECK o package no longer depends on tcltk but it is still suggested. If R installation does not have tcltk capability then strapply falls back to R engine. Changes in 0.5-0 o faster strapply based on tcl interface. engine argument can choose between it and older version of strapply. Changes in 0.3-9 o removed some dead code. Thanks to Wacek Kusnierczyk. Changes in 0.3-8 o minor improvements in gsubfn-package.Rd o fixed bug in match.funfn o heuristic to detect the number of back references (used when backref is not specified) now uses -k where k is the number of non-escaped left parens (whereas previously it used -k where k was the number of left parens whether escaped or not). Changes in 0.3-7 o R CMD CHECK fixes o if replacement object is a list and match not found in that list then no replacement is done Changes in 0.3-6 o bug fixes: fn$force("$x") failed if variable name was x as shown here o bug fixes: f <- function() { aaa <- "X"; fn$cat("abc$aaa def\n") }; f() failed. o internals: eval.with.vis() replaced in $.fn. Now using withVisible(). This change requires R 2.5 or later. o the replacement object in gsubfn can be a list as well o the replacement object in strapply can be a character string or list as well o if backref= is omitted on gsubfn or strapply it passes the backreferences if any (but not the entire match) or if there are no back references it passes the entire match. Thus the default has changed in the case that (1) there are one or more backreferences in the regular expression and (2) backref was not specified. This should eliminate the need to specify backref in most circumstances. Note that if there are no backreferences in your regular expression or if backref= had been specified there is no change thus in most cases there will be no change. Changes in 0.3-5 o fixed bug in demo index o eliminated dependence on methods package (previously only dependence was use of 'is') Changes in 0.3-4 o fixed typo Changes in 0.3-3 o changed quantreg example to reflect change in engel data set Changes in 0.3-2 o revised gsubfn-packages.Rd o fn$ now performs quasi-perl style interpolation o cati, cati0 removed since fn$cat and fn$cat0 can be used. o rules for which formulas are translated and which character strings are interpolated have been changed and simplified: 1. formulas specified with ~~ (double ~) are translated to functions 2. character strings beginning with \1 are translated to functions 3. if the above rules result in no translation/interpolation then all formulas are translated if there are any formulas or, if not, then all character strings are interpolated In most cases rule #3 is used. o fn$f now returns invisibly if f does (thanks to Duncan Murdoch for eval.with.vis) Changes in 0.3-1 o fixed initialization bug in strapply o added proto examples to ?gsubfn and ?strapply Changes in 0.3-0 o gsubfn and strapply now can take proto arguments in addition to character strings, functions and formulas o vignette added o home page abbreviated since most info already in vignette Changes in 0.2-3 o increased string lengths accepted by gsubfn by eliminating use of the R parse() command. [Thanks to Stefan Th. Gries for reporting problem.] o fixed bug in one of the examples in example(gsubfn) o strapply fixes Changes in 0.2-2 o added combine= argument to strapply o fixed bug associated with using double quotes in gsub (which also could affect strapply and cati). [Thanks to Stefan Th. Gries for reporting problem.] Changes in 0.2-1 o added "note difference" example in strapply o letters, LETTERS and pi excluded from args so x ~ sin(x*pi/180) can be shortened to ~ sin(x*pi/180) and x ~ LETTERS[x] can be reduced to ~ LETTERS[x] (previously it would have added pi and LETTERS to arg lists in these two examples) o improved as.function.formula.Rd o fixes to eliminate R CMD CHECK warnings under R 2.5.0 o bug fix in $.fn. If args and match.call order was different it could fail previously. o new demos: gsubfn-gries.R, gsubfn-chron.R, gsubfn-si.R o THANKS file Changes in 0.2-0 o match.funfn o as.function.formula improvements o $.fn o added numerous examples of $.fn to home page Changes in 0.1-5 o reference to cat0 missing from gsubfn-package.Rd o added digit separation example to strapply.Rd o added config file example to strapply.Rd o in strapply simplify= can be a function o replacement= in gsubfn and strapply can be a formula o new internal function as.function.formula o new home page and svn repository (URL in DESCRIPTION file) Changes in 0.1-4 o added cati, cati0, cat0 and paste0 o added USE.NAMES argument to gsubfn o added gsubfn-cut demo o added repx example to gsubfn.Rd o added SI scale example to gsubfn.Rd o perl=, etc. args were not being passed to gsub o added moving window example to strapply.Rd Changes in 0.1-3 o enhanced gsubfn backref= argument o fixed bug in strapply Changes in 0.1-2 o cati added o updated DESCRIPTION and gsubfn-package.Rd Changes in 0.1-1 o strapply added o gsubfn-package.Rd added Changes in 0.1-0 o initial release gsubfn/inst/THANKS0000644000176200001440000000051213252555677013445 0ustar liggesusers Thanks to the following for code, examples or demos: Duncan Murdoch, murdoch at stats dot uwo dot ca Hans-Joerg Bibiko, bibiko at eva dot mpg dot de Stefan Th. Gries, stgries at linguistics dot ucsb dot edu Wacek Kusnierczyk, Waclaw.Marcin.Kusnierczyk at idi dot ntnu dot no Taras Zakharko, zakharko at uni-leipzig.de gsubfn/inst/lipsum.txt0000644000176200001440000000070013252555677014603 0ustar liggesusersLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. gsubfn/inst/doc/0000755000176200001440000000000013252577441013272 5ustar liggesusersgsubfn/inst/doc/gsubfn.Rnw0000644000176200001440000007700513252575432015255 0ustar liggesusers\documentclass[nojss]{jss} \DeclareGraphicsExtensions{.pdf,.eps} %% need no \usepackage{Sweave} \author{Gabor Grothendieck\\GKX Associates Inc.} \Plainauthor{Gabor Grothendieck} \title{\pkg{gsubfn}: Utilities for Strings and for Function Arguments.} \Plaintitle{gsubfn: Utilities for Strings and for Function Arguments.} \Keywords{gsub, strings, \proglang{R}} \Plainkeywords{gsub, strings, R} \Abstract{ \pkg{gsubfn} is an \proglang{R} package used for string matching, substitution and parsing. A seemingly small generalization of \code{gsub}, namely allow the replacement string to be a replacement function, formula or \pkg{proto} object, can result in significantly increased power and applicability. The resulting function, \code{gsubfn} is the namesake of this package. Built on top of \code{gsubfn} is \code{strapply} which is similar to \code{gsubfn} except that it returns the output of the function rather than substituting it back into the source string. In the case of a replacement formula the formula is interpreted as a function as explained in the text. In the case of a replacement \pkg{proto} object the object space is used to store persistant data to be communicated from one function invocation to the next as well as to store the replacement function/method itself. The ability to have formula arguments that represent functions can be used not only in the functions of the \pkg{gsubfn} package but can also be used with any \proglang{R} function without modifying its source. Just preface any \proglang{R} function with \code{fn\$} and subject to certain rules which are intended to distinguish which formulas are intended to be functions and which are not, the formula arguments will be translated to functions, e.g. \code{fn\$integrate(\~{} x\^{}2/, 0, 1)}. This facility has widespread applicability right across \proglang{R} and its packages. \code{match.funfn}, is provided to allow developers to readily build this functionality into their own functions so that even the \code{fn\$} prefix need not be used. } \Address{ Gabor Grothendieck\\ GKX Associates Inc.\\ E-mail: \email{ggrothendieck@gmail.com} } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{gsubfn: Utilities for Strings and for Function Arguments.} %\VignetteDepends{proto} %\VignetteKeywords{gsub, strings, R} %\VignettePackage{gsubfn} <>= library("gsubfn") library("proto") @ \section{Introduction} \label{sec:intro} The \proglang{R} system for statistical computing %% \citep[\url{http://www.R-project.org/}]{zoo:R:2005} contains a powerful function for string substitution called \code{gsub} which takes a regular expression, replacement string and source string and replaces all matches of the regular expression in the source string with the replacement string. Parenthesized items in the regular expression, called back references, can be referred to in the replacement string further increasing the range of applications that \code{gsub} can address. The key function and namesake of the \pkg{gsubfn} package is a function which is similar to \code{gsub} but the replacement string can optionally be a replacement function, formula (representing a function) or replacement \code{proto} object. Associated functions built on top of \code{gsubfn} are \code{strapply} which is an \code{apply} style function that is like \code{gsubfn} except that it returns the output of the replacement function rather than substituting it back into the string and \code{strapplyc} which is a faster version specialized to use \code{c} rather than a general function. In the case that a function is passed to \code{gsubfn}, for each match of the regular expression in the source string, the replacement function is called with one argument per backreference or if no backreferences with the match (unless instructed otherwise by the \code{backref} argument). The output of the replacement function is substituted back into the string replacing the match. In those cases where persistance is needed between invocations of the function a \code{proto} object containing a replacement method (a method is another name for function in this context) can be used and the object itself can be used by the replacement method as a repository for data that is to persist between calls to the replacement method. Such persistant data might be counts, prior matches and so on. Also \code{gsubfn} automatically places the argument values that \code{gsubfn} was called with as well as a \code{count} representing the number of matches so far into the object for use by the function. \code{pre} and \code{post} functions can also be entered into the object and are triggerred at the beginning and end, respectively, of each string. The idea of using a replacement function is also found in the \proglang{Lua} language \url{http://www.lua.org/manual/5.1/manual.html#pdf-string.gsub}. %% need to figure out how to to bibtex stuff %% \citep{gsubfn:Ierusalimschy:2003} . \pkg{gsubfn} follows that idea and builds on it with \pkg{proto} objects, formulas and associated function \code{strapply}. The remainder of this article is organized as follows: Section~\ref{sec:gsubfn with functions} explains the use \code{gsubfn} with replacement functions. Section~\ref{sec:gsubfn with proto objects} explains the use \code{gsubfn} with \pkg{proto} objects for applications requiring persistance between calls. Section~\ref{sec:strapply} explains the use \code{strapply} and Section~\ref{sec:Misc} explains the use of \code{cat0} and \code{paste0}. The functions specified in \code{gsubfn} can be specified as functions or using a formula notation. Facilities are included for using that notation with any \proglang{R} function, not just the ones in the \pkg{gsubfn} package. Section~\ref{sec:fn} explains this facility even if the function in question, e.g. \code{apply}, \code{integrate} was not so written and Section~\ref{sec:match.funfn} explains how developers can embed this into their own functions. \textit{Prerequisites}. The reader should be familiar with \proglang{R} and, in particular the \proglang{R} \code{gsub} function. Within \proglang{R}, help on \code{gsub} is found via the \code{?gsub} command and on the net it can be found at \begin{itemize} \item{\url{http://stat.ethz.ch/R-manual/R-patched/library/base/html/grep.html}} \end{itemize} The reader should also be familiar with regular expressions. Within \proglang{R}, help on regular expressions is found via the command \code{?regex} and on the net it can be found at \begin{itemize} \item{\url{http://stat.ethz.ch/R-manual/R-patched/library/base/html/regex.html}} \end{itemize} Other Internet sources of information on regular expressions not specifically concerned with \proglang{R} are \begin{itemize} \item{Perl compatible regular expressions. \url{http://www.pcre.org/}} \item{Regular expressions. \url{http://www.regular-expressions.info/}} \item{Wikipedia. \url{http://en.wikipedia.org/wiki/Regular_expression}} \end{itemize} The discussions of passing \pkg{proto} objects to \code{gsubfn} and \code{strapply} require a minimal understanding of \proglang{R} environments using the \proglang{R} help command \code{?environment} and the \proglang{R} Language Manual found online at \begin{itemize} \item{\url{http://stat.ethz.ch/R-manual/R-patched/library/base/html/environment.html}} \item{\url{http://finzi.psych.upenn.edu/R/doc/manual/R-lang.html#Environment-objects}} \end{itemize} Since the use of the \pkg{proto} package itself is relatively restricted we will include sufficient information so that outside reference to the \pkg{proto} package will be unnecessary for the restricted purpose of using it here.\footnote{ More about \pkg{proto} is available in on the \pkg{proto} home page: \url{http://r-proto.googlecode.com} .} \section[The gsubfn Function]{The \code{gsubfn} Function} \label{sec:gsubfn with functions} \textit{Introduction}. The \code{gsubfn} function has a similar calling sequence to the \proglang{R} \code{gsub} function. The first argument is a regular expression, the second argument is a replacement string, replacement function, replacement formula representing a function or a replacement \pkg{proto} object. The third argument is the source string or a vector of such strings. In this section we are mainly concerned with replacement functions and replacement formulas representing replacement functions. In this case the replacement function is called for each match. The match and back references are passed as arguments. The input string is then copied to the output with the match being replaced with the output of the replacement function. \textit{Replacement function}. The replacement function can be specified by a formula in which the left hand side of the formula are the arguments separated by \code{"+"} (or any other valid formula symbol) while the right hand side represents the body. The environment of the formula will be used as the environment of the generated funciton. If the arguments on the left hand side are omitted then the free variables on the right hand side are used as arguments in the order encountered. \textit{Back References}. If the \code{backref} argument is not specified then all backreferences are passed to the function as separate arguments. If \code{backref} is \code{0} then no back references are passed and the entire match is passed. If \code{backref} is a postive integer, $n$, then the match and the first $n$ back references are passed. If \code{backref} is a negative integer then the match is not passed and the absolute value of \code{backref} is used as the number of back references to pass. Since \code{gsubfn} uses a potentially time consuming trial and error algorithm to automatically determine the number of back references the performance can be sped up somewhat by specifying \code{backref} even if all back references are to be passed. \textit{Example}. This example below replaces \code{x:y} pairs in \code{s} with their sum. The formula in this example is equivalent to specifying the function \code{function(x, y) as.numeric(x) + as.numeric(y)} : <>= s <- 'abc 10:20 def 30:40 50' gsubfn('([0-9]+):([0-9]+)', ~ as.numeric(x) + as.numeric(y), s) @ \section[gsubfn with lists]{\code{gsubfn} with \code{list} objects} \label{sec:gsubfn with list objects} \textit{Example}. If the replacement object is a list then the match is matched against the names of the list and the corresponding value is returned. If no name matches then the first unnamed list component is returned. If there is still no match then the string to be matched is returned so that effectively the lookup is ignored. For example: <>= dat <- c('3.5G', '88P', '19') # test data gsubfn('[MGP]$', list(M = 'e6', G = 'e9', P = 'e12'), dat) @ \section[gsubfn with proto objects]{\code{gsubfn} with \pkg{proto} objects} \label{sec:gsubfn with proto objects} \textit{Introduction}. In some applications one may need information from prior matches on current matches. This may be as simple as a count or as comprehensive as all prior matches. This is accomplished by passing a \pkg{proto} object whose object space can contain variables to be shared among the invocations of the matching function. The matching function itself is also be stored in the object as are the arguments to \code{gsubfn} and a special variable \code{count} which is automatically set to the match number. \textit{Proto}. A \pkg{proto} object is an \proglang{R} environment with an \proglang{S3} class of \code{c("proto", "environment")}. A \pkg{proto} object is created by calling the \code{"proto"} function with the components to be inserted given as arguments. This is very similar to the way lists are constructed in \proglang{R} except that unlike a list a \pkg{proto} object represents an \proglang{R} environment. \textit{Example}. The use of \pkg{proto} objects is best introduced via example. In the following example \code{p} is a \pkg{proto} object which contains one function \code{fun}. A function component of a \pkg{proto} object is called a method and we will use this terminology henceforth. In this example after the \code{proto} command to create \code{p} we examine the class of \code{p} and check the components of \code{p} using \code{ls}. Also we display the \code{fun} component itself. These are some of the basic operations on \pkg{proto} objects. Finally we run \code{gsubfn} using the regular expression \code{\textbackslash\textbackslash{}w+} and the \pkg{proto} object \code{p}. \code{gsubfn} looks for a component called \code{fun} in \code{p} and uses that as the replacement method/function. The arguments to \code{fun} are always the object itself, often represented by the formal argument \code{this}, \code{self} or just \code{.}, followed by the match and back references. In this example there are no back references. Here \code{fun} simply returns the match suffixed by the count of the match. The \code{count} variable is automatically placed into \code{p} by \code{gsubfn}. This has the effect of suffixing the first word with with \code{{1}}, the second with \code{{2}} and so on. After running \code{gsubfn} we examine \code{p} again noticing all the components that were added by \code{gsubfn} and we also examine the \code{count} component which shows how many matches were found. Note that use of \code{paste0} which is like \code{paste} but has a default \code{sep} of \code{""}. <>= p <- proto(fun = function(this, x) paste0(x, "{", count, "}")) class(p) ls(p) with(p, fun) s <- c("the dog and the cat are in the house", "x y x") gsubfn("\\w+", p, s) ls(p) p$count @ \textit{\code{pre} and \code{post}}. \code{gsubfn} knows about three methods: \code{fun} which we have already seen as well as \code{pre} and \code{post}. The latter two are optional and are run before each string and after each string respectively. Suppose we wish to suffix each word not by the count of all words but just by the count of that word. Thus the third occurrence of \code{"the"} will be suffixed with \code{{3}} rather than \code{{8}}. In that case we will set up a \code{words} list in the \code{pre} method. This method will be invoked at the start of each of the two strings in \code{s}. The \code{words} list itself is stored in the \code{pwords} \pkg{proto} object. Since all the methods of a \code{proto} object can share its contents \code{fun} can also make use of it. In the example below, each time we match a word, \code{pwords\$fun} adds it to the list \code{words}, if not already there, and increments it so that words[["the"]] will be \code{1} after \code{"the"} is encountered for the first time, \code{2} after the second time and so on. At the end of the example we look at what variables are in \code{pwords} and also check the contents of the \code{words} list. <>= pwords <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 paste0(x, "{", words[[x]], "}") } ) gsubfn("\\w+", pwords, "the dog and the cat are in the house") ls(pwords) dput(pwords$words) @ Additional examples of the use of \pkg{proto} objects with \code{gsubfn} are available via the command \code{demo("gsubfn-proto")}. \section[strapply]{\code{strapply}} \label{sec:strapply} \textit{Introduction}. The strapply function is similar to the \code{gsubfn} function but instead of replacing the matched strings it returns the output of the function in a list or simplified structure. A typical use would be to split a string based on content rather than on delimiters. The arguments are analogous to the arguments in \code{apply}. In both the object to be applied over is the first argument. A modifier, which is an index for \code{apply} and a regular expression for \code{strapply} is the second argument. The third argument is a function in both cases although in strapply, in analogy to \code{gsubfn} it can also be a \pkg{proto} object. By default \code{strapply} uses the \code{tcl} regular expression engine but if the argument \code{engine="R"} is used or if the function is a proto object then the \code{R} regular expression engine is used instead. The \code{tcl} engine is much faster. (\code{tcl} regular expressions are largely identical to regular expressions in R. See this link \url{https://www.tcl.tk/man/tcl8.5/TclCmd/re_syntax.htm} for details.) The \code{simplify} argument is similar to the \code{simplify} argument in \code{sapply} and, in fact, is passed to \code{sapply} if it is \code{logical}. If \code{simplify} is a function or a formula representing a function then the output of \code{strapply} is passed as \code{output} to it via \code{do.call(simplify, output)}. \textit{Example}. To separate out the initial digits from the rest returning the the initial digits and the rest as two separate fields we can write this: <>= s <- c('123abc', '12cd34', '1e23') strapply(s, '^([[:digit:]]+)(.*)', c, simplify = rbind) @ In this example we calculate the midpoint of each interval. (Note to myself. The following code works if we enter it into R but not in the vignette. Figure out what is wrong. In the meantime we only show the source and but don't run it.) <>= as.num <- function(x) if (x == "NA") NA else as.numeric(x) rn <- c("[-11.9,-10.6]", "(NA,9.3]", "(9.3,8e01]", "(8.01,Inf]") colMeans(strapply(rn, "[^][(),]+", as.num, simplify = TRUE)) @ \code{combine}. The \code{combine} argument can be specified as a function which is to be applied to the output of the replacement function after each call. It defaults to \code{c}. Another popular choice is \code{list}. The following example illustrates the difference: <>= s <- c('a:b c:d', 'e:f') dput(strapply(s, '(.):(.)', c)) dput(strapply(s, '(.):(.)', c, combine = list)) @ \code{strapply} and \code{proto}. \code{strapply} can be used with \pkg{proto} in the same way as as \code{gsubfn}. For example, suppose we wish to extract the words from a string together with their ordinal occurrence number. Previously we did this with \code{gsubfn} and inserted the number back into the string. This time we want to extract it. (Note to myself. The following code works if we enter it into R and even works as part of the vignette if we use R CMD Sweave but if we use R CMD build then it does not work. Figure out what is wrong. In the meantime we only show the source and but don't run it.) <>= pwords2 <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 list(x, words[[x]]) } ) strapply("the dog and the cat are in the house", "\\w+", pwords2, combine = list, simplify = x ~ do.call(rbind, x) ) ls(pwords2) dput(pwords2$words) @ \section[Miscellaneous]{Miscellaneous} \label{sec:Misc} The \code{cat0} and \code{paste0} function are like \code{cat} and \code{paste} they have a default \code{sep} of \code{""}. Here is an example of using paste0. This example retrieves overlapping segments consisting of a space, letter, space, letter and space. Only the final space, letter, space is returned. Because we did not specify \code{backref} it will think there are two back references (since it will interpret the lookahead expression as an extra back reference); however, the second is empty so it does no harm in passing it to \code{paste0}. It uses the zero-lookahead perl style pattern matching expression. <>= strapply(' a b c d e f ', ' [a-z](?=( [a-z] ))', paste0)[[1]] @ \section[fn]{\code{fn}} \label{sec:fn} Wherever a function can be specified in \code{gsubfn} and \code{strapply} one can specify a formula instead as discussed previously. This facility has been extended to work with any \proglang{R} function. Just preface the function with \code{fn\$} and \begin{enumerate} \item{formula arguments will be intercepted and translated to functions allowing a compact representation of the call. Which formulas are actually translated to functions is dependent on rules to be discussed. The right hand side of the formula represents the body of the function. The left hand side of the formula represents the arguments and defaults to the free variables in the order encountered. The environment of the function is set to the environment of the formula. \code{letters}, \code{LETTERS} and \code{pi} are not considered free variables and will not appear in arguments. } \item{character arguments will be intercepted and quasi-perl style string interpolation will be performed. Which character strings to operate on are dependent on rules to be discussed.} \item{the \code{simplify} argument if its value is a function is intercepted. In that case if \code{result} is the result of running the function without the \code{simplify} argument then it returns \code{do.call(simplify, result)}.} \end{enumerate} The rules for determining which formulas to translate and which character strings to apply quasi-perl style string interpolation are as follows: \begin{enumerate} \item{any formula argument that has been specified with a double \code{\~{}}, i.e. \code{\~{}\~{}}, is converted to a function after removing the double \code{\~{}} and replacing it with a single \code{\~{}}.} \item{any character string argument that has been specified with a first character of \code{\textbackslash{}1} has string interpolation applied to it after the \code{\textbackslash{}1} is removed.} \item{if there are no formulas with double \code{\~{}} and no character strings beginning with \code{\textbackslash{}1} then all formulas are converted to functions and if there are no formulas then all character strings have string interpolation done.} \end{enumerate} The last possibility is the actually the most commonly used and almost all our examples will illustrate that case. For example, <>= fn$integrate(~ sin(x) + sin(x), 0, pi/2) fn$lapply(list(1:4, 1:5), ~ LETTERS[x]) fn$mapply(~ seq_len(x) + y * z, 1:3, 4:6, 2) # list(9, 11:12, 13:15) fn$by(CO2[4:5], CO2[2], x ~ coef(lm(uptake ~ ., x)), simplify = rbind) @ Here is an example where we have two formulas, one of which should be translated and another should not. In this case we place a double \code{\~{}} in the second formula to signify that one it represents a function. The first formula is then correctly left untranslated. This example places a panel number in the body of each panel. <>= library(lattice) library(grid) print(fn$xyplot(uptake ~ conc | Plant, CO2, panel = ~~ { panel.xyplot(...); grid.text(panel.number(), .1, .85) })) @ \begin{figure}[hpb] \begin{center} <>= <> @ \caption{ \code{ fn\$xyplot }} \label{fig:gsubfn-fn-lattice-caption} \end{center} \end{figure} As mentioned briefly above, the \code{fn\$} prefix will also intercept any \code{simplify} argument if that argument is a function (but will not intercept it if it is \code{TRUE} or \code{FALSE}). In the case of inteception it runs the command then applies \code{do.call(simplify, result)} to the result of the command. A typical use would be with \code{by} as in the following example to calculate the regression coefficients of \code{uptake} on \code{conc} for each \code{Treatment}. This replaces the sligtly uglier \code{do.call} construct which would otherwise have been required. <>= fn$by(CO2, CO2$Treatment, d ~ coef(lm(uptake ~ conc, d)), simplify = rbind) @ Here are some additional examples to illustrate the wide range of application. The first replaces codes with upper case letters. Note that \code{LETTERS} is never interpreted as a free variable so the default argument is \code{x} here: <>= fn$lapply(list(1:4, 1:3), ~ LETTERS[x]) @ Here is a common use of \code{aggregate} or \code{by}. This calculates a weighted mean of the first column using weights in the second column all grouped by columns \code{A} and \code{B}. The \code{aggregate} example aggregates over indexes to circumvent the restriction of a single input to the aggregation function. \code{X} is a free variable and we only want \code{i} to be an argument so we must specify it explicitly (otherwise it will assume all free variables in the right hand side are to be arguments). <>= set.seed(1) X <- data.frame(X = rnorm(24), W = runif(24), A = gl(2, 1, 24), B = gl(2, 2, 24)) fn$aggregate(1:nrow(X), X[3:4], i ~ weighted.mean(X[i,1], X[i,2])) @ A number of mathematical functions take functions as arguments. Here we show the use of \code{fn\$} with \code{integrate} and \code{optimize}. <>= fn$integrate(~1/((x+1)*sqrt(x)), lower = 0, upper = Inf) fn$optimize(~ x^2, c(-1,1)) @ \proglang{S4} \code{setGeneric} and \code{setMethod} calls have function arguments that \code{fn\$} can be used with. In the following example we create an \proglang{S4} class \code{ooc} whose representation contains a single variable \code{a}. We then define a generic function \code{incr}. In this case the function arguments cannot be deduced from the body so we specify them explicitly. Then we define an \code{incr} method for class \code{ooc}. Since \code{a} is a free variable again we must define the arguments explicitly to ensure that it is not automatically included. Finally we illustrate the use of the \code{incr} method we just defined. <>= setClass('ooc', representation(a = 'numeric')) fn$setGeneric('incr', x + value ~ standardGeneric('incr')) fn$setMethod('incr', 'ooc', x + value ~ {x@a <- x@a+value; x}) oo <- new('ooc', a = 1) oo <- incr(oo,1) oo @ One commonly used calculation in quantile regression is the creation of a regression plot for each of a variety of values of \code{tau}. Here we plot \code{x} vs. \code{y} and then superimpose quantile regression lines for various \code{tau} values using \code{lapply} to avoid a loop. The \code{lapply} function of \code{tau} is specified using a formula. <>= library(quantreg) data(engel) plot(engel$income, engel$foodexp, xlab = 'income', ylab = 'food expenditure') junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(foodexp ~ income, tau, engel)))) @ <>= plot(engel$income, engel$foodexp, xlab = 'income', ylab = 'food expenditure') junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(foodexp ~ income, tau, engel)))) @ \begin{figure}[hpb] \begin{center} <>= <> @ \caption{ \code{ Plot \code{engel} data with quantile lines } } \label{fig:gsubfn-fn-quantreg-caption} \end{center} \end{figure} In time series we may wish to calculate a rolling summary of the data. In this case we calculate a rolling midrange of the data using the \pkg{zoo} function \code{rollapply}: <>= library(zoo) fn$rollapply(LakeHuron, 12, ~ mean(range(x))) @ A common statistical technique for assessing statistics is the bootstrap technique provided in package \pkg{boot}. Here we compactly the bias and standard error of the median statistic using the \code{rivers} data set and 2000 samples. <>= library(boot) set.seed(1) fn$boot(rivers, ~ median(x[d]), R = 2000) @ Here is a plotting application that illustrates that \code{pi} is automatically excluded from default arguments. <>= x <- 0:50/50 matplot(x, fn$outer(x, 1:8, ~ sin(x * k*pi)), type = 'blobcsSh') @ \begin{figure}[hpb] \begin{center} <>= <> @ \caption{ \code{matplot(x, fn\$outer(x, 1:8, \~{} sin(x * k*pi)), type = 'blobcsSh')} } \label{fig:gsubfn-fn-pi-caption} \end{center} \end{figure} Here we define matrix multiplication in terms of two calls to \code{apply} and the inner product definition. The advantage of this is that it can easily be modified to use different inner products. This illustrates a nested use of \code{fn\$}: <>= a <- matrix(4:1, 2); b <- matrix(1:4, 2) # test matrices fn$apply(b, 2, x ~ fn$apply(a, 1, y ~ sum(x*y))) a %*% b @ Another example of nesting is the following which generates all subsequences of \code{1:4}. <>= L <- fn$apply(fn$sapply(1:4, ~ rbind(i,i:4), simplify = cbind), 2, ~ x[1]:x[2]) dput(L) @ In the \proglang{Python} language there exists a convenient notation for expressing lists with side conditions. For example, \code{[ x*x for x in range(1,11) if x\%2 == 0]}. To express this in \proglang{R} using \code{fn\$} we can write it like this which gets fairly close to the \proglang{Python} formulation: <>= fn$sapply( 1:10, ~ if (x%%2==0) x^2, simplify = c) @ Here is an example of string interpolation: <>= fn$cat("pi = $pi, exp = `exp(1)`\n") @ \section[match.funfn and as.function.formula]{\code{match.funfn} and \code{as.function.formula}} \label{sec:match.funfn} Developers who wish to add the \code{fn\$} capability to their own functions (so that the user does not have to prepend them with \code{fn\$)} can use the supplied \code{match.funfn} function which in turn uses the \code{as.function.formula} function to convert formulas to functions. \code{match.funfn} is like the \code{match.fun} in \proglang{R} function except that it also converts formulas, not just character strings. For example with the definition of \code{sq} shown below the formal argument $f$ can be a formula, character string or function as shown in the statements following: <>= sq <- function(f, x) { f <- match.funfn(f); f(x^2) } sq(~ exp(x)/x, pi) f <- function(x) exp(x)/x sq('f', pi) # character string f <- function(x) exp(x)/x sq(f, pi) sq(function(x) exp(x)/x, pi) @ \section{Summary} \label{sec:summary} By simply extending the replacement string in \code{gsub} to functions, formulas and \pkg{proto} objects we obtain a function which on the surface appears nearly identical to \code{gsub} but, in fact, has powerful ramifications for processing. \section*{Computational details} The results in this paper were obtained using \proglang{R} \Sexpr{paste(R.Version()[6:7], collapse = ".")} with the packages \pkg{boot} \Sexpr{gsub("-", "--", packageDescription("boot")$Version)}, \pkg{grid} \Sexpr{gsub("-", "--", packageDescription("grid")$Version)}, \pkg{gsubfn} \Sexpr{gsub("-", "--", packageDescription("gsubfn")$Version)}, \pkg{lattice} \Sexpr{gsub("-", "--", packageDescription("lattice")$Version)}, \pkg{proto} \Sexpr{gsub("-", "--", packageDescription("proto")$Version)}, \pkg{quantreg} \Sexpr{gsub("-", "--", packageDescription("quantreg")$Version)} and \proglang{R} itself and all packages used are available from CRAN at \url{http://CRAN.R-project.org/}. %% \bibliography{gsubfn} %% \newpage %% \begin{appendix} %% \section{Reference card} %% \input{gsubfn-refcard-raw} %% \end{appendix} \end{document} gsubfn/inst/doc/gsubfn.R0000644000176200001440000002115613252577441014706 0ustar liggesusers### R code from vignette source 'gsubfn.Rnw' ################################################### ### code chunk number 1: preliminaries ################################################### library("gsubfn") library("proto") ################################################### ### code chunk number 2: gsubfn-xypair ################################################### s <- 'abc 10:20 def 30:40 50' gsubfn('([0-9]+):([0-9]+)', ~ as.numeric(x) + as.numeric(y), s) ################################################### ### code chunk number 3: gsubfn-si ################################################### dat <- c('3.5G', '88P', '19') # test data gsubfn('[MGP]$', list(M = 'e6', G = 'e9', P = 'e12'), dat) ################################################### ### code chunk number 4: gsubfn-proto-intro ################################################### p <- proto(fun = function(this, x) paste0(x, "{", count, "}")) class(p) ls(p) with(p, fun) s <- c("the dog and the cat are in the house", "x y x") gsubfn("\\w+", p, s) ls(p) p$count ################################################### ### code chunk number 5: gsubfn-words ################################################### pwords <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 paste0(x, "{", words[[x]], "}") } ) gsubfn("\\w+", pwords, "the dog and the cat are in the house") ls(pwords) dput(pwords$words) ################################################### ### code chunk number 6: gsubfn-strapply-initdigits ################################################### s <- c('123abc', '12cd34', '1e23') strapply(s, '^([[:digit:]]+)(.*)', c, simplify = rbind) ################################################### ### code chunk number 7: gsubfn-strapply-midpoint ################################################### as.num <- function(x) if (x == "NA") NA else as.numeric(x) rn <- c("[-11.9,-10.6]", "(NA,9.3]", "(9.3,8e01]", "(8.01,Inf]") colMeans(strapply(rn, "[^][(),]+", as.num, simplify = TRUE)) ################################################### ### code chunk number 8: gsubfn-strapply-combine ################################################### s <- c('a:b c:d', 'e:f') dput(strapply(s, '(.):(.)', c)) dput(strapply(s, '(.):(.)', c, combine = list)) ################################################### ### code chunk number 9: gsubfn-strapply-words ################################################### pwords2 <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 list(x, words[[x]]) } ) strapply("the dog and the cat are in the house", "\\w+", pwords2, combine = list, simplify = x ~ do.call(rbind, x) ) ls(pwords2) dput(pwords2$words) ################################################### ### code chunk number 10: gsubfn-paste0 ################################################### strapply(' a b c d e f ', ' [a-z](?=( [a-z] ))', paste0)[[1]] ################################################### ### code chunk number 11: gsubfn-fn ################################################### fn$integrate(~ sin(x) + sin(x), 0, pi/2) fn$lapply(list(1:4, 1:5), ~ LETTERS[x]) fn$mapply(~ seq_len(x) + y * z, 1:3, 4:6, 2) # list(9, 11:12, 13:15) fn$by(CO2[4:5], CO2[2], x ~ coef(lm(uptake ~ ., x)), simplify = rbind) ################################################### ### code chunk number 12: gsubfn-fn-lattice (eval = FALSE) ################################################### ## library(lattice) ## library(grid) ## print(fn$xyplot(uptake ~ conc | Plant, CO2, ## panel = ~~ { panel.xyplot(...); grid.text(panel.number(), .1, .85) })) ################################################### ### code chunk number 13: gsubfn-fn-lattice-repeat ################################################### library(lattice) library(grid) print(fn$xyplot(uptake ~ conc | Plant, CO2, panel = ~~ { panel.xyplot(...); grid.text(panel.number(), .1, .85) })) ################################################### ### code chunk number 14: gsubfn-fn-simplify ################################################### fn$by(CO2, CO2$Treatment, d ~ coef(lm(uptake ~ conc, d)), simplify = rbind) ################################################### ### code chunk number 15: gsubfn-fn-letters ################################################### fn$lapply(list(1:4, 1:3), ~ LETTERS[x]) ################################################### ### code chunk number 16: gsubfn-fn-aggregate2 ################################################### set.seed(1) X <- data.frame(X = rnorm(24), W = runif(24), A = gl(2, 1, 24), B = gl(2, 2, 24)) fn$aggregate(1:nrow(X), X[3:4], i ~ weighted.mean(X[i,1], X[i,2])) ################################################### ### code chunk number 17: gsubfn-fn-math ################################################### fn$integrate(~1/((x+1)*sqrt(x)), lower = 0, upper = Inf) fn$optimize(~ x^2, c(-1,1)) ################################################### ### code chunk number 18: gsubfn-fn-S4 ################################################### setClass('ooc', representation(a = 'numeric')) fn$setGeneric('incr', x + value ~ standardGeneric('incr')) fn$setMethod('incr', 'ooc', x + value ~ {x@a <- x@a+value; x}) oo <- new('ooc', a = 1) oo <- incr(oo,1) oo ################################################### ### code chunk number 19: gsubfn-fn-quantreg-load ################################################### library(quantreg) data(engel) plot(engel$income, engel$foodexp, xlab = 'income', ylab = 'food expenditure') junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(foodexp ~ income, tau, engel)))) ################################################### ### code chunk number 20: gsubfn-fn-quantreg (eval = FALSE) ################################################### ## plot(engel$income, engel$foodexp, xlab = 'income', ylab = 'food expenditure') ## junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(foodexp ~ income, tau, engel)))) ################################################### ### code chunk number 21: gsubfn-fn-quantreg-repeat ################################################### plot(engel$income, engel$foodexp, xlab = 'income', ylab = 'food expenditure') junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(foodexp ~ income, tau, engel)))) ################################################### ### code chunk number 22: gsubfn-fn-zoo ################################################### library(zoo) fn$rollapply(LakeHuron, 12, ~ mean(range(x))) ################################################### ### code chunk number 23: gsubfn-fn-zoo ################################################### library(boot) set.seed(1) fn$boot(rivers, ~ median(x[d]), R = 2000) ################################################### ### code chunk number 24: gsubfn-fn-pi (eval = FALSE) ################################################### ## x <- 0:50/50 ## matplot(x, fn$outer(x, 1:8, ~ sin(x * k*pi)), type = 'blobcsSh') ################################################### ### code chunk number 25: gsubfn-fn-pi-repeat ################################################### x <- 0:50/50 matplot(x, fn$outer(x, 1:8, ~ sin(x * k*pi)), type = 'blobcsSh') ################################################### ### code chunk number 26: gsubfn-fn-matmult ################################################### a <- matrix(4:1, 2); b <- matrix(1:4, 2) # test matrices fn$apply(b, 2, x ~ fn$apply(a, 1, y ~ sum(x*y))) a %*% b ################################################### ### code chunk number 27: gsubfn-fn-subseq ################################################### L <- fn$apply(fn$sapply(1:4, ~ rbind(i,i:4), simplify = cbind), 2, ~ x[1]:x[2]) dput(L) ################################################### ### code chunk number 28: gsubfn-fn-python ################################################### fn$sapply( 1:10, ~ if (x%%2==0) x^2, simplify = c) ################################################### ### code chunk number 29: gsubfn-fn-cat ################################################### fn$cat("pi = $pi, exp = `exp(1)`\n") ################################################### ### code chunk number 30: gsubfn-fn-sq ################################################### sq <- function(f, x) { f <- match.funfn(f); f(x^2) } sq(~ exp(x)/x, pi) f <- function(x) exp(x)/x sq('f', pi) # character string f <- function(x) exp(x)/x sq(f, pi) sq(function(x) exp(x)/x, pi) gsubfn/inst/doc/gsubfn.pdf0000644000176200001440000104423113252577440015255 0ustar liggesusers%PDF-1.5 % 1 0 obj << /S /GoTo /D (Section.0.Introduction.1) >> endobj 4 0 obj (Introduction) endobj 5 0 obj << /S /GoTo /D (Section.1.The\040gsubfn\040Function.1) >> endobj 8 0 obj (The gsubfn Function) endobj 9 0 obj << /S /GoTo /D (Section.2.gsubfn\040with\040lists.1) >> endobj 12 0 obj (gsubfn with lists) endobj 13 0 obj << /S /GoTo /D (Section.3.gsubfn\040with\040proto\040objects.1) >> endobj 16 0 obj (gsubfn with proto objects) endobj 17 0 obj << /S /GoTo /D (Section.4.strapply.1) >> endobj 20 0 obj (strapply) endobj 21 0 obj << /S /GoTo /D (Section.5.Miscellaneous.1) >> endobj 24 0 obj (Miscellaneous) endobj 25 0 obj << /S /GoTo /D (Section.6.fn.1) >> endobj 28 0 obj (fn) endobj 29 0 obj << /S /GoTo /D (Section.7.match.funfn\040and\040as.function.formula.1) >> endobj 32 0 obj (match.funfn and as.function.formula) endobj 33 0 obj << /S /GoTo /D (Section.8.Summary.1) >> endobj 36 0 obj (Summary) endobj 37 0 obj << /S /GoTo /D [38 0 R /Fit] >> endobj 40 0 obj << /Length 3204 /Filter /FlateDecode >> stream xڥɎ>_C`c7lҷg 6l_xOh-%'|{jMj'Id/յ/fY5殒߯>|mL;etcg3L;sF+mz|3z >&d{UW@/˦'<==bY;;8qjoqf#?[p?a2:?wގEXLQwX4q_=[ZZ2o&~zwka\!_^+UP=|zqq^>i;x^wםV3=kgfݏ?W57TwZYg?50;c: իF5U'!gXKX$=R7;-Qu{yt|m:ox@x@/̿.v>lF(MH5I 6<p= v/`wL$; +&p> tAtQ.I—Q * mn [ڞ@mx͈GiIR\5?mJBT}kJu]8uݰ 9T) <QhX`0;W#=?ƚv.@TQhS}Dݎp?EVnp?[W^`L(&e3jMg uʙ{Vc翌` BA$w:.OkydУX6L S[U' ~9RL=aə5*2 ^ʾ4XBCt`xi<3AB/e1)҂!X{m_Uݘʷ:ny\;іqX#)3Z7E8>V]zG^WI'^12@F[y''m3J1|RcAJ̴A,G9 #0Iu@}$O/Q$PW&>e4<ֺ\$x~2zM`B\nBcsi9 ٦Wl.w73Kˁ->PƀY2=mּ ͣ:{NCdmJ{庰H+:ŻQ$Ҟ})1iq A%I)߉$MwCX>!+Rgg B6!X kS OzU`m؉#X\~{^I<(b^IBj1~\! wFF{6u(2G,EQ$@_嘎#Ŵ@h!o"V0Cp֛N?65+oQH@6+3^|;1MbtuV/-Qy-u] kTQπMDG`>> p邂4?Ev@7(ʺ`-sLj)a놃I Y 6޹V짩Xͫ涏 !OtQ&l[Ez,W{ZRm@5z-B x Fd@rH~X? cɏ>[*22S5IqݖD]9. 'b^)5Qh*Bv]STVC"W0 > /,GhRw=Qb&㿀l ŘJ* _Z}!TKO_K@9Z.QUFR2@: ; Jj0PհHҜT[g$j9\r\fy@V{ t^n̲-6z};- Ntq6Tb$4~&xU#eН`ej*q41!Dζow R8Uu?&r* 089W6Bz=MB] n[%Ʃ˶ wѹlhzu6iIQмjҒFtֆ{G!4ؘڤ f/kxuIj{p >S Bܙ/~8f㣿5N,p/hp"9B%M%Z*g"sm%ǵ!x ݦ3rO`˞ ϟB0 Dd}^-9”Q8%}8 ZFߪC/@}:Vk,l%7 mc*噫nm  u`~QެX؈ܤ\.K9]OJ` ^0{k)]7%u!K;(L_CP#W{pMMu7ZƵv_XHvWAf2D?S7|J+Y3E/ҭG#P޹^bh{-w"~$.4UQfeƸ^%.mubJazR2)Ti *jScV;atʹNN:cI! OJF-k rR>)I񋜅iή8c3|T nLz!im-3-^~MC&?'yXp{BW=Jȯ҅P"׺T>U@v >T9+,#\p8fqŒ 1l_~WS)dFE_RhHV9Kv>f.{V /U endstream endobj 38 0 obj << /Type /Page /Contents 40 0 R /Resources 39 0 R /MediaBox [0 0 595.276 841.89] /Parent 51 0 R >> endobj 41 0 obj << /D [38 0 R /XYZ 80 770.89 null] >> endobj 42 0 obj << /D [38 0 R /XYZ 81 733.028 null] >> endobj 2 0 obj << /D [38 0 R /XYZ 81 294.296 null] >> endobj 50 0 obj << /D [38 0 R /XYZ 81 294.296 null] >> endobj 39 0 obj << /Font << /F41 43 0 R /F45 44 0 R /F15 45 0 R /F55 46 0 R /F63 47 0 R /F64 48 0 R /F65 49 0 R >> /ProcSet [ /PDF /Text ] >> endobj 70 0 obj << /Length 3636 /Filter /FlateDecode >> stream x[Ko# X%plA #ȑ9_zkؤ5r󁫙WuuW_U͢\ݟn޽BEWvjqshբMY/~XK*5*J-'w{I]M-:],շ{0]]w!-a=Gv >\wson@ߕZ6EY5L4uQq'.ɶul`"A"A4aTg}<,qK\{x=WPh@4Z|? o{O$'2ГA>qlV1ҭ_C4Qd\>etˏ-Zr?8:mbǣ [Q,e貰7X"$I5[Lњ5b3P85U,Zo"#4uUTMK6ڴiȊun|1P4vb@Nٶ*T^v)L ȋtLP;޲+!*.gDxb+ 658G/2m_m *ԮK9Ye Z5s֡fC{ &>T&Nrh@dqYNFæ-PLA1 Α+ R,>0ŷYxh $QQ5"=~0l^l(s$VsK!3҂:TsY$Mbe]I1p>kP\={~3p@Q.{t Tge~OBN{=GBQB)k mє,FI}Aʬ^[ ~ȼGq .]LFAC^.t* m=*TS㲰] *#Bo2xOFpVTƽD[qM33Y&< ptWز=]$ 1#ٰ$4y:*\瀾, S{cl=%`&>;h!#Tv;[KJB`ڳЗC"0ݞB_RFa#–%aw 8:ɶ1^M|Ddrs ~jv!C+]Ѫ\ VV硝m Nưj14Fh畦m 6ؾ]i]CruTnʢ t"%ﳭdkKU]]}t 2 Z̟ey^T/'9>(RX |یۦ i#.lXV Ө+&Xs6 X[C vڑu)Z\fO]T!"Б>|tE]SqfO*dõnˢV:W\ct ̀To.?wLN:I.cw|E2P4px79}6x/JN Sx |si ITӞ6[y:duQV$Viaŗr~Li{B:CPVy\i2/T kx|pD[tuYzξr.L$+9=??0+F3Bd_˹D%_sKfs/4E,_ŲRWO8.HɁT0s(n'']_ʂZXο"w3VuK"ȿYףdu@H\-S6AΔy2ls*K$hBYo%tN8]'BS=QQ;ae2nY 8qBHku=xl5=wnʷc>v)jU[?E ½G6r>ru\~qAs#XOsox Eog+v5 ஌@+ J}P|s[d+jU xim".41. .|KnyI}l W)eg;c=AƝLFx1&gM&0ϠAd <.pS :F/KР:[ئNWߝ:\o\m嚣-g\`0T-wi\\ov?9q~$鲕 O.ptW+C/[zU, pqآ [ 3Hd??c>g-&q\W6M3Z=E/9{{D(:%pQڦeEHo)m|ΰQ) F5r.Wy\O[ٰ5_$G}B`^R -D[W9?,\DyHO֋=97%+$ \7쓦@WGm-;0qG SW_=0v;M7w( PWvÐiԚ+h?vQySA`}‚BΤGI~Gnry,j\d[أ }/kU0$;e߹m%=weĚ endstream endobj 69 0 obj << /Type /Page /Contents 70 0 R /Resources 68 0 R /MediaBox [0 0 595.276 841.89] /Parent 51 0 R /Annots [ 52 0 R 74 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R ] >> endobj 52 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [435.259 552.896 522.996 564.881] /Subtype/Link/A<> >> endobj 74 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [80.004 539.347 322.581 551.332] /Subtype/Link/A<> >> endobj 53 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [372.892 509.084 380.339 521.069] /A << /S /GoTo /D (section.2) >> >> endobj 54 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [236.731 495.535 244.178 507.52] /A << /S /GoTo /D (section.4) >> >> endobj 55 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [317.989 481.985 325.436 493.971] /A << /S /GoTo /D (section.5) >> >> endobj 56 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [515.549 481.985 522.996 493.971] /A << /S /GoTo /D (section.6) >> >> endobj 57 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [199.646 424.624 207.093 436.609] /A << /S /GoTo /D (section.7) >> >> endobj 58 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [293.048 411.075 300.495 423.06] /A << /S /GoTo /D (section.8) >> >> endobj 59 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [107.277 342.845 487.544 354.831] /Subtype/Link/A<> >> endobj 60 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [107.277 280.462 493.26 292.447] /Subtype/Link/A<> >> endobj 61 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [283.903 218.078 400.222 230.063] /Subtype/Link/A<> >> endobj 62 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [209.079 196.068 417.358 208.053] /Subtype/Link/A<> >> endobj 63 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [163.861 174.057 434.521 186.042] /Subtype/Link/A<> >> endobj 64 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [107.277 95.388 527.558 107.373] /Subtype/Link/A<> >> endobj 71 0 obj << /D [69 0 R /XYZ 80 770.89 null] >> endobj 68 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F64 48 0 R /F63 47 0 R /F41 43 0 R /F65 49 0 R /F78 75 0 R >> /ProcSet [ /PDF /Text ] >> endobj 84 0 obj << /Length 3449 /Filter /FlateDecode >> stream xڭr`9PaO/h,T򤜪2(HrȷmAf$o[/ շ7W?h,n[vFu/n?.qm6xrRq8<z?0^wt'\i&дUe+UkX9Z@d.+zqOy*-;@Y[}>r8Dw:!1(zffeSƶ_(*gkr7 <=#a%fYB6'QĽ;&1`wt|eБADtFǖ;Xʨ!U2iQhL f7 ]p󂃙b4jK4KN4ђXy7oЗ{_;8&ˌ.:UȺ@ iN=5H[Z8ȃL^{s0;"3[etpZSuikw)&*w+}v )]E!HPyj?{T{r?c7 BQ߰G-\D`s:9t74Kh{G"5q]K!B&7fUS-i D:nq}fڨ}7H;gtGn–?P#6@M.iA1>=,ۃ7l_zbJa7wD ]Ru \;)sqfI1lV+ K22tĥrَyT`{_-@kFsmB;lkfy(f$,\^.CQ/ORr8)<1C"Bgefp*`:~e` qx`GB߹m*.+be/﯊>q2tD ŷ99k}2H_MkpÐT_vaci&U`\Բ0Ux mpSyzc0 W"okpvӏc@!S ԭuWt1S IY]3kS S|V+Eq ^)$&y`}Eg1 Q)M%=dcO2L  6yxb.}&LMyiU$x9;y+ӥV½u!%6o8{q2UpcY(6DSѨCc)b&=| cjHE/wB #ڣuyc }G7>KVK(3?AW0kx u ӓ>G*IQ,$z:U RLV2ᑘ KXᆜhUm!hR?ȈɌFL52,vG޹uoqQcՆJ>R!&H |BxĤFvI\^@9@j<}O4~eHŝ1P"QRk5!}\ݽdLJLASjϬ֦L%^[JS_YyR >UԲ}ŒlɐE 0],25/V1"픪 9 9m5;*zXT/C۬r,: smU\?*o.VVv9ciQ9}1?b|hKaRM,czU˚ũ7O98Seӳr/};@4}=c0]>Ft*V5ɔjafڂR?]u_UmK61i%N3J3 sAt<{o 2MP12BhFا؇~Hs)Tp)I;M ߙX\8cQs&5h\H0ZZ`( ebc/riۂXlTՐ2D2DxLEkb=-mVr7s+N5k(1ܦ'fȖă,cmA#qjKU4Ֆ79窖J+sR׾8Z4|X u(dصYN3,=Xfۇ 6.m@t N0#R\М.ٙb?|8&+'pjWJha`8n c'E],!:ԥnܻw7W]3f-^蔭zzq((D qտʯ5 ٚ StbW]4{hUWEA'TC O@6! ݐkex3XӂbiAh) Ep b!JɅVfB JNF7Xj#_\ {OdAm$ !?ж0,l\T,U3Yu endstream endobj 83 0 obj << /Type /Page /Contents 84 0 R /Resources 82 0 R /MediaBox [0 0 595.276 841.89] /Parent 51 0 R /Annots [ 65 0 R 66 0 R 67 0 R ] >> endobj 65 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [107.277 718.651 527.558 730.636] /Subtype/Link/A<> >> endobj 66 0 obj << /Type /Annot /Subtype /Link /Border[0 0 0]/H/I/C[1 0 0] /Rect [195.802 664.571 202.524 677.708] /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 67 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [334.487 94.522 473.229 107.474] /Subtype/Link/A<> >> endobj 85 0 obj << /D [83 0 R /XYZ 80 770.89 null] >> endobj 6 0 obj << /D [83 0 R /XYZ 81 641.179 null] >> endobj 76 0 obj << /D [83 0 R /XYZ 81 641.179 null] >> endobj 10 0 obj << /D [83 0 R /XYZ 81 167.674 null] >> endobj 91 0 obj << /D [83 0 R /XYZ 81 167.674 null] >> endobj 93 0 obj << /D [83 0 R /XYZ 97.575 109.765 null] >> endobj 82 0 obj << /Font << /F66 73 0 R /F15 45 0 R /F78 75 0 R /F64 48 0 R /F41 43 0 R /F20 86 0 R /F45 44 0 R /F97 87 0 R /F65 49 0 R /F63 47 0 R /F22 88 0 R /F98 89 0 R /F94 90 0 R /F21 92 0 R /F81 94 0 R /F107 95 0 R >> /ProcSet [ /PDF /Text ] >> endobj 98 0 obj << /Length 3477 /Filter /FlateDecode >> stream xڭ[[o#~_al te. )ݦ@qy#ۉ14rvE{υ}Eq8|/޽իBV^\m.zy52?]uުyfq#㴋ԴSc'fɶ}*0jn m*\a ?As54M&3fբV֫J5՝ij4R g'7IF'|_ yE_b"88;ړI@QVs$ߋJfAq*xLH^4=?\ #O}ibmK̠3эK?bWBu ߝl9ھmhCW_BI'3rz^?[aWD(&z Ԏ1?%ޠdexh0ຍ5L`^L/n]6Ҋ.b%ɧ6VJ>2?=nbZWp0UG3cuPe 44N~wiK"rӀtu'Fn Of "OG hېo~27 Њp9i## q{a72@ƞmgf&7[IF- 3w8hpA*cD|@J:DIš7S3ZLM{P K63t۲]51{gt <`~H0n{?jEb iՋ\2u-h&{cR"wT?d3ѸvܞBL0?~)z|>{uB[N+_}e6ɫ^T! 8q* q$t F'?e@ILcP; څSƗI/$-e>/FqTi ]Yoo%I+ [&Dy?\cR KaD QHu(aej%nagwSkg\?>lo䟩q'Qr0{vyTN7EdEm39fTwh>K3ۉ *Д62: ߑ?$^N-k !Be% xޒw5ڣtײM )azD7:1;uh{5% }<{l v}.eBD";jM&n ^~r#[,)F&ؗ $uzlqҞY6ic"n(@(o>fJ2( -}>[N<َvy6z{OujpܨG8 u#?\֒5qӁV`.>:?>9,T4FL=x3m ?/{bT("ڃŴ|i`"Fdg!jϙٶYLR'}<;>+׿??a%JJYB25|J&@k.QSo9Cy>} lh)`uz*$#)>9к[< UYnI YK+(jDtu  #膍yzps&&')@bNϧYev="%a_[yܡȧ6B{Fi\]HFDLQ6s r ",GKm0x/4,M4^ccs6?rx%lcD]']Lr y1DhQǐGpGè,v<8cmG؀):F4R`2/>0la4Ц}Q̖SK&POq8]UB%:!vsaްKVޒ^8[R6WBV >@ûF )d(X`;MD*P[~Z`W qj9:+*hLQN9^Nnh#s/G&1&uj9^'rIrۚC$젳܄[P>Ar-dQJ-(beAUVܥ*u@(kagz͹6K5fqUåO %M-lcrlKyaϪ6,;.X-vDb^ѵeT,R?!PpUM1">,b'g>+EE@'r%F490hP] Y ^&ӆo1y9Acj)ASE.ĺdAbd։:]yK00{o3=PF1'+B+Is|cC[* 1FA;)C2mu+xYq!ge@zSX*)nMJVM[k0 s!bS9 X9HIB|=w8`u O|;(@t iTSs;aM~Ej}j4v}$mbΩȀ,(E 7$Ya+a9ie{gW 2lZe0\>A]K,VVo|}4m3x+^fTʚѕVI_DQ?L[$їRW6ߴ;33kG:rHӉ{; Jm '/zMe=W4\ޛ endstream endobj 97 0 obj << /Type /Page /Contents 98 0 R /Resources 96 0 R /MediaBox [0 0 595.276 841.89] /Parent 51 0 R >> endobj 99 0 obj << /D [97 0 R /XYZ 80 770.89 null] >> endobj 14 0 obj << /D [97 0 R /XYZ 81 588.702 null] >> endobj 77 0 obj << /D [97 0 R /XYZ 81 588.702 null] >> endobj 96 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F98 89 0 R /F94 90 0 R /F64 48 0 R /F45 44 0 R /F97 87 0 R /F41 43 0 R /F65 49 0 R /F63 47 0 R >> /ProcSet [ /PDF /Text ] >> endobj 102 0 obj << /Length 2159 /Filter /FlateDecode >> stream xYK6Wld(QA[KSna] }A{MԼPGF?^zS#gu^z$LnFZl9z7y"a2UJС9j?Kh,&j7Bwu&j ̑k^,ͫ7OBJgD߃yǷ4\v9j=AѬ a"dBӶ<@%Xک6s| 2k<и ]@30`Ncw^j&=e~O,!&_i'WHJh4 =j ]Ov-g+46l%kĒ{,1,> zoYeS]t=pGOln\! ge{{*htW=#Ӕ S4T`#hJw 0a^vcTqvIL9Xëػg6?]Liae#ǎ[h?Aˠh[m*tEqvu״Nu) yUE%4 1*]nX{cVha";Um*y]w?似-ozOd!j) wj;e%,Rr,e$%d(LڭHX2Y^5kƖH` CE9nNG\}X57+W {)1EgFzAC$nᅻu5 sk, ?j<:Q{jWT ]SXbSw)NxM`"\(*9eSFL# @]s⸁>m8_eUq1EJ;[wzc|Gø:dRI0lqP&>T"۸ h|DLr{5)P}M1@v&zp-IF*Si;rTTgԩ <;HtQRRX kRfZz=9I8URA=׭|K[Ufj ƆE* -n Vt1 9!YaQTl{oVnCq jrEVA ^3Qё/woRsG"opҫt`X5Y[ P,EV}6mъ>.jIsEhJ۰tb +B7o3lѮ쾴U\7hq0-Nc\k{bǿ[ .0:&yT9A˖Ȅ}#BVᠡz+7̗֩gBgtKa+ Nt^[S1 ?/WaB3nVp6m{*y[J+I=>>^]wN~_RV o5RܣU\&3Uo<;ZUI<xV[ P>BBю}70IDp P2 +|ꆺ:l\ݣ&a55$Bvxc47O Pz5]DxTwC;P/lG%QB[ xhy@)?~+ƹ ?\OΌB2)"L#"sOY\&/K+g\[o(<6z_܆*J^}`or9ŮcVƬN٦;I eEySRy[/O<$ؿ{՟p1e@f (;R];~L ߏ{+9|?&D~>1, TP8}߆[ endstream endobj 101 0 obj << /Type /Page /Contents 102 0 R /Resources 100 0 R /MediaBox [0 0 595.276 841.89] /Parent 51 0 R >> endobj 103 0 obj << /D [101 0 R /XYZ 80 770.89 null] >> endobj 100 0 obj << /Font << /F66 73 0 R /F15 45 0 R /F98 89 0 R /F64 48 0 R /F65 49 0 R /F41 43 0 R >> /ProcSet [ /PDF /Text ] >> endobj 107 0 obj << /Length 3164 /Filter /FlateDecode >> stream xڥn_AJtedvx99\Y"~rϺ$/^UDYjr4jRurr|VmF f @p/B=ƀ]=#ih!ttBũs3+l`D 4 ȀbSUڍXysRٕ`.riR,7&1#; X9sϲm}3˳khb6ڋ/ kexc!ؽk}a݃1մGUHW0tX IpnmmTge=aGh$-ڬns3DyX9%d*2ڤ˼Im,oj;z$ˢ _nem獥cE,$vx5YXYbM㣦B!JLLc z݂YeMQbt,[:ZʮGFX(4(c9hɿC`vY%PYf *M£33:^!B>b1{V#ظvV&3-.|OY,dQ}HY;m8 I#g͡]`;XU5CǺj > t%WȈ-7<z[gZQX(q.( ,TLQ@G\a5& !hQ{ Akϣw7!p;n| "km/Lt9Ө](s m.Br0?ڢq u| `*[\|Gt:e4B]3G,Ø%nM'jc7A֥҄ ;ҁ/;W}JEଲ%DVf2>RC4'h4RSY[4k8ϭ0"oK4ؔJvG١o1t698xS0xg=6, >IyM2a3ñ=VC , : k$[<* ERg9yV׹UVD MHXg`.U֝:${}a;X:"l+opCGv1L^PhP/nKHZ58/ ƞT(\ӑ: gl\Eg'2U}>ݽK)5q`1RCDX; ~P{]ɈwF'i ipy.PDeeNǽcۏ  mC+`lapȂN/Ba$NWN'#T1.[;{y~ $|2l\Gweh$|_Φl}c7 Ut^Bx_#nOr@@YF MU N8ib+  h XV?b6AS$i\($;juE}S~=DLK _79!vb_碁ɵϗ/"Wy)CdAR>,cARFƗwC. I68~a8 @4ì \*jihXyyA? Z=!QIR6Y[;q/@[B+vJ(l(Iᴻ}pok Y$HA3 `A ;EEU֟Pm„ 5Ve͇[bԶ ++Rn3~NZPZxk{F^|I!Z qN2Tf+;*'/a{a,%Y1؊OCqiT%gdwPj=/5?n3[ EޖwDĵ6^$vhMVCj=2ֶ xh iJbaȝ\؍J-3\(Pе_{kBzGĂR|6T֘ EMs<2lI4:Su|~k~coQ4+fGZ=GĜ:yc֫"뫠|RL54*Ϗr8.ٶڤCU*Gq}F RՊӫ]lGztN^#hϔƅ^oQ}NK_м7R5+.T4`90O[Q%$ n%M"WF K;I㆛=y Υ,#r ϖlWխw@Yb  _]` cL` ;͆}#[Yw\-K>4ֿv:A&$niR@mP>W&vQ=U%}#_ VcL ~3N,Ѻ?W;z;r:3Uzgb(gz䤴R_̢"wVzmzJoC!` t}+nnߊTj+Y!vzF8JrJδ٧z񅹔$|lzpe endstream endobj 106 0 obj << /Type /Page /Contents 107 0 R /Resources 105 0 R /MediaBox [0 0 595.276 841.89] /Parent 51 0 R /Annots [ 104 0 R ] >> endobj 104 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [101.802 375.869 389.611 388.667] /Subtype/Link/A<> >> endobj 108 0 obj << /D [106 0 R /XYZ 80 770.89 null] >> endobj 18 0 obj << /D [106 0 R /XYZ 81 549.418 null] >> endobj 78 0 obj << /D [106 0 R /XYZ 81 549.418 null] >> endobj 105 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F64 48 0 R /F98 89 0 R /F112 109 0 R /F41 43 0 R /F45 44 0 R /F97 87 0 R /F65 49 0 R /F94 90 0 R >> /ProcSet [ /PDF /Text ] >> endobj 112 0 obj << /Length 1881 /Filter /FlateDecode >> stream xَ6}XQ"um mY[E IQ7v>17g3r2 닟n.^\@$qTbp3*ˤL n&PDpQ,ťM9< ~&,o/U,#B\$, "#)` xG*͢OÓ£@\T[D"HX2L0I70ւO (-"/6Zxi %8ҨG2+5\ uR/}9ri[*fg߸c;pÛ3=['ؽBݽI@Wΰ F^w)7k̹> MOɱ\p6kqo)1k)QHg/̕ _q*Dt[{sCc r4c!soN5_qo(nyUu g޿\ ie endstream endobj 111 0 obj << /Type /Page /Contents 112 0 R /Resources 110 0 R /MediaBox [0 0 595.276 841.89] /Parent 114 0 R >> endobj 113 0 obj << /D [111 0 R /XYZ 80 770.89 null] >> endobj 110 0 obj << /Font << /F66 73 0 R /F15 45 0 R /F64 48 0 R /F98 89 0 R /F94 90 0 R /F41 43 0 R >> /ProcSet [ /PDF /Text ] >> endobj 117 0 obj << /Length 2536 /Filter /FlateDecode >> stream xڥn}B0T,.ZEdMRY4IنiIMg}MΜ9s7Eo޼},M7E-JS,n^ N qʖS>DX9k o{uw|Ok#9LuZ Er;rg- nPb!_'8زvpʨ (cTEQ-7Y~/k|Eq`v;Ma=૓8ekz l|;2 VTP6FvG~[=Q6&k)wx [չ\ˣXڤ'\+UpҪG0"s w-Xz/ܨɶ%]N:S0YIs|^ͥ5M^831 i~Z-q;*xr ڀ_a#[^ tH/P,ɩ@Z2o#\~嗀t"Siw+;ޠ@]7U&`ޚFlM- U[^R|hˇ+z$1[$j|N_Lx;/|{Bߴe٭/7r %>&%bf=hRoA1 m@)X0ʐ\(qfycyWzzZғ9̀*"ʖiϨ{Gn)ҤQ **8أQK }v46H)$,gєJӚeڸgVROD򬶞P5EX %GobrD2_U ʦjv]HP9?3'80K[UAo&o .oT?Dk4 ɷڟrcU2'^0#m(LJhUbLz+.ufٹiy+0Qؤ0beTvqM7=R <_E{",eKK> D^g07p.pm""|PmrEOp;BYjЧBREJm=G1|%Tp'u*V(ٗQiZA/vC߫\FUt뭺4u&/<%Rf4\gp7j5GB3~CHYH۠h%m=C 5&c}q+K:pJUNULFN~?$@Ѽ lߎ]S\c(nqW9!=O:mypJ/p7ŬGM;%EPwjV"!e`dݎc.ފeض?Ƚ}JbLHGiЉ%eIA`gA\I]|ӟCc&u =3WM~U_bɚVe7 w0Ĵ݉ gɒ)г 4%7B}P$Q{ v!|3\<%eL9*MW] fD;zjO ˿oZQ@tPE? 1Ut,wi> (t|rsXR1BxDv"lL! x!&̙PeH=?ܩl_h`ݽn:ܼ6+ endstream endobj 116 0 obj << /Type /Page /Contents 117 0 R /Resources 115 0 R /MediaBox [0 0 595.276 841.89] /Parent 114 0 R >> endobj 118 0 obj << /D [116 0 R /XYZ 80 770.89 null] >> endobj 22 0 obj << /D [116 0 R /XYZ 81 548.281 null] >> endobj 79 0 obj << /D [116 0 R /XYZ 81 548.281 null] >> endobj 26 0 obj << /D [116 0 R /XYZ 81 325.891 null] >> endobj 80 0 obj << /D [116 0 R /XYZ 81 325.891 null] >> endobj 119 0 obj << /D [116 0 R /XYZ 81 248.341 null] >> endobj 120 0 obj << /D [116 0 R /XYZ 81 142.724 null] >> endobj 115 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F98 89 0 R /F64 48 0 R /F112 109 0 R /F45 44 0 R /F94 90 0 R /F97 87 0 R /F63 47 0 R >> /ProcSet [ /PDF /Text ] >> endobj 123 0 obj << /Length 1817 /Filter /FlateDecode >> stream xڵYKs6Wh6B"viL:tx:DٚUۻX<(Si4pX~a!'Q2z}٫Drr%ʤ\ bz"l2Uzk&4U4:{ O? xV5O@gd^!IAq4SZy9(>NEOzt1͌]R%Lj8x6Ys 퐩nzՀacJX+Xovm 8+imޱ-Ylnѝ(m\Lox6ybPj!WA[mgU7iȔMe*l~&˱v!Ñb[Zn+;/Ib{w7w$aʔl|PD2tLs^\l!;(ee^MwzGr`&-rhf x㔔`N,%X-T[;f@{Q;<5 z\HA^9r= PMZ4Uvak m5ҷ1Xm"^;e\{z`RH:õ-/LLep޲߰#r&a O`{)q&r{\ě݂G" PFжGPmi[gEYMIܬ8r׶kSf! -=o>EZԔCS"rX"Kͭn }샯 a8KXQKRF M],h\ u)~Z`-ә n8 ː `ȋE ʆ D P+H&vLЍ1}ϛ:˝-'Iit|86iBK튑.8L!@[&?m , TʢOF(=ヒ.(\rʜ3PjRN%ԛpS,]P4*0˖2hxk?ӿ,鯂'|IlÍG0`3gW.q:"!6!6H [,xͧ>d)OknhwI(Be^ݼۺjEj!(C* ky\z+.ٙazj4 $uλGC5Z6X¥,V:9+˺jT2cU(Hʥ,9 mZ N.Zol#aTкn]z}4uhl~@#6{l)a i{X_$puiW2!#2e\I,9vPpfâ1"}hn@$r>zW>=)̊Cߚ.GE;})2*Ô8Lsݺ9 mÕ2ӢSn(Nѯ0s~'<sq|/xiCdhϓ}L]V 'WW_~u}(orD)U'խ}}c_D2*ʾN$"F/ +!n7UOoכ~44?O>~^/\=3{WDH=0;@G xj3᧶Yt,AVQ}xoؔHB{_-ߖ8NytuQwieNN$Opd߉1~Rh;YAg``NkEFܷ endstream endobj 122 0 obj << /Type /Page /Contents 123 0 R /Resources 121 0 R /MediaBox [0 0 595.276 841.89] /Parent 114 0 R >> endobj 124 0 obj << /D [122 0 R /XYZ 80 770.89 null] >> endobj 125 0 obj << /D [122 0 R /XYZ 81 733.028 null] >> endobj 126 0 obj << /D [122 0 R /XYZ 81 645.291 null] >> endobj 127 0 obj << /D [122 0 R /XYZ 81 609.691 null] >> endobj 128 0 obj << /D [122 0 R /XYZ 81 574.09 null] >> endobj 121 0 obj << /Font << /F66 73 0 R /F15 45 0 R /F64 48 0 R /F98 89 0 R >> /ProcSet [ /PDF /Text ] >> endobj 132 0 obj << /Length 1751 /Filter /FlateDecode >> stream xڝXKo6WЃVHii(zOYvږ7 oHQ6)@E g>$ZGI׋kG:QuRh*y4跙N/~j6H2A4빞 YϞyIsUkcy^,Kgo|G745Uǃ7x!z&tǒǸeW)뭕EMEZ_$u]T*E!FfdK&@h:0I;0Hpۡv=xM9ӛL.h8n1tؕ3잣~~jur4|4=2|dtnlZy6@%:!5:>4h!-*dx %6!͸;=ArϷT}XFs;TUo[fsp~+M녠#Ɓ6Lۇ\9<\p=vptc^&%P ys5]yMߥejCăGDJ>lbr?%=ҽ#Za"橿 ^?ch3B%mm;G_Y )=V*!XKx NzB{/0xm6OA ?#u[O߯I#mruB: Ud oHKO&._tm Y$cOx¨_*2XT)>JJ[_F6%EJ:SuiWx*JmT:*j5^+x~͓RJQ:X6C4=8pg393k0"ԁٝm5^r~Jeߓh-I aN7aءC.b] mӅB]թɞT) "$'UfsP ^9CmҐC7g)ly̛Ρ%th4˶%`UuqH^@FT(8DZ\ĆdaVMeA\rgwWL bRUc!_E\(&*e&wׁ}2+|m>K/U3=mAf~nFma<؋v}"k"146UrsʞT ܯ:rKH hp܌2 cDiN1@^vabQ?EʹcVg?r<ul;: ^ 틷ٴv ~wr'X֨x˻hkWjgn.rlu'F[ۺMINʈ'ҝ.$\ [&KjU?7Y{p+TP;T9o endstream endobj 131 0 obj << /Type /Page /Contents 132 0 R /Resources 130 0 R /MediaBox [0 0 595.276 841.89] /Parent 114 0 R >> endobj 129 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpCsbhaH/Rbuild33e46ae5628a/gsubfn/vignettes/gsubfn-gsubfn-fn-lattice-repeat.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 135 0 R /BBox [0 0 432 288] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 136 0 R/F2 137 0 R>> /ExtGState << >>/ColorSpace << /sRGB 138 0 R >>>> /Length 2240 /Filter /FlateDecode >> stream x[ϯ6_cr*ꗥk@.==,޶4Iۤ(Kxl~sx0$G%}>r@Vު/?߫ן~zt1O._gwV|ٚAG{/˷[Gn4:uZV/~{zx]Oz*JAY}ܜ'͛I_CP2?P pᱢ+Xzް6&¤-R&L"5m-i,lO*׎vk|C}f!웒ao2ڶoޫ"o| HM#}Gi7utNoW;xr_Y =As 4|ٞ:_jM +Wu"G3)]RPPqz礍SCwڻ΃!Q䌯;L+0΀Gw~ ]A ,gzF8 雙^mh|HSNYNKIΏްb\ kWxӾ~n}|?dz !t;E xE_N=/b[3ۂM  @1 0I1OI1)^E€o۩G q\oB₷%{ '*CT{_ڮ>8T!bQV53ê{,vg;}th3M_Ħw5 Y<06f[b 36NO0.c@#J q +J kLXw&kEëKrj,ЫFI)H rtPp&#+#83)tvu::✯Dz+&x C[,"8GI_NOj(,vz֯Ǡs Tbz ;G)Έ JnL7tIr8)!H #H#S pV+@G D臓H T/Ahb=i"Y-MZdwj.բ&EN.yR*&˫v [;77z5FwӛXqOHBK҆LyIʕ}$&L\Й,15I /ZIr 'NaVjz8>zu96],r@'zV`>uŦ/ŦɠʝEin,7#)4?ZĎ?-b[ag#mÙ>v^.5;:-L_@IC+`vAԨP(iiJU(iJBI[2Y(i:`˔EU~%ma*3X:ݯKz~ly@cb.imJna.NfrgQz˝En,7 ,,vGG57߻oC̶wiYVKe2:Kѯ\jY%td-+:Z )?WK] cqg>adqݍ} 9&TH­ Y047 ;,X,Jx`Yp dQ//^'wZ>|u'.ԝ'Rw.̢ uT_Y>Ĭ`{lRqg>`8ΦlOʄ 6@Kt`(͂΢4O7 ;>,X>0m'nx v7zi!5T#EeEbآ#EeEV(`xϒr {2&oB{{0 yACU-ஈz.=AKK݅s+!'.3t]8<}E8,] endstream endobj 135 0 obj << /CreationDate (D:20180315191733) /ModDate (D:20180315191733) /Title (R Graphics Output) /Producer (R 3.4.3) /Creator (R) >> endobj 136 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /ZapfDingbats >> endobj 137 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 139 0 R >> endobj 138 0 obj [/ICCBased 140 0 R] endobj 139 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus] >> endobj 140 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 133 0 obj << /D [131 0 R /XYZ 80 770.89 null] >> endobj 134 0 obj << /D [131 0 R /XYZ 288.632 306.232 null] >> endobj 130 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F98 89 0 R /F64 48 0 R >> /XObject << /Im1 129 0 R >> /ProcSet [ /PDF /Text ] >> endobj 143 0 obj << /Length 1802 /Filter /FlateDecode >> stream xڝXK606fDR#h Iڢ5-Gc[[^'=w^(Y@"3Ù'E \|$<`2gTeԥ*n0 oGzX܎&VZCSj%r U ?n&|]{+N|FHX֩ "46ŒdCK_m5#*wԼ +"j\@9žO,g@xLTsݭEi5gY44\H"4A*l:?D1c`Z^fI_T!DƢLJ.^[2bϾMȉm}6?S5[WI;oqu;]gfLY3,ud%&O㮥G.P[AK`a~ ~^xb&y#1G[creAOXzo6BڱN3:8Jk˛~d >(H'h#++! +h/Lەܝ =wo1Q$g1|k٦eMxs\K3^B{־^u_Dפ*#w>>Rz磮hj N =Ԟ2yکD7ca!m'j!1T?+c3Dn-Y+!4dbq̀S8]wp{K@2cMYy0ec<}:gy/-g[yTC(A-`_*j(F-'6NuS T7,*-!bA-MM+LG{O +QwKyWX .!< Vf=9Q\lhN`Yv*{hՓఎ':!qb)^zo~(?6x0ai+Ƨd_1/ 1|_Jc'S5Q[63"0`DuPS m-"hN2R)LF3ӔJRTh#;hH'x'Y3ȑ`u溺=p"d u&O!$}wVoKfECR\ j<{ڦR 6F<ɬޘ%#"Uak]p׃ac헝 k%@2gtDF,S;,z\C ݭaON M`[@-ײEO&DA6/Eڗ X(a7i5HeМi稣8myV" DelY{Nii68l&,3ȗ@ .Lր ?&1MjxL5 j^F%yÚ| 71HT?Kf0q qLUlNd{HE*͚q Bc_mpWA~>B'goޠJJ7FI\[݂ޟ VK=ylgtB k~#_R9Ih  F #͟^$6CSh[9g%؍HJ9)؂$w8ry_>Hi'n坶Dc‹[hm '/H^8դ L;pVJ\lo> W& lo%,N'77G endstream endobj 142 0 obj << /Type /Page /Contents 143 0 R /Resources 141 0 R /MediaBox [0 0 595.276 841.89] /Parent 114 0 R >> endobj 144 0 obj << /D [142 0 R /XYZ 80 770.89 null] >> endobj 141 0 obj << /Font << /F66 73 0 R /F15 45 0 R /F64 48 0 R /F98 89 0 R >> /ProcSet [ /PDF /Text ] >> endobj 148 0 obj << /Length 2359 /Filter /FlateDecode >> stream xYsݿLȉb8cvĝv`uHm~8~eQ6ş^v3d]GURcO~˺w5*`ОۉwLYgUݙד0a~K^fɅ1x,n]oircԆYίW$ N!/2 ob/t^+RiD"VE][+O-rg&4|#<ܔtQfKFM\kU꺿G;AѽAK Xfw$Y3{iPIOrI9&Ӵ]3E^:ĉ~TNY=~Cz -r9([4 fr< En}x ^սlC]8mPB8"r@JoSSRm^фFUf'hg]GmyvB6d'׷gg<7J7=IVF/M3nR&Md:T$Ll,jǡo )j^Λn$u<'W`IX/Į)ɿO  JTq6{ލU<@YvpM5 ݿݬ[#07>T2{AR~7Eu$(&!/&Q+;dŎ`כ3{Gt2ZIwwfCx E:JS fS ^2[A^$:]R|@y" Ae%ρTtۅ^p]O/ o-q _V@CJʇhU|.$Կ ½}?K~|.3OPh'y&xs+`D3G1Pݱ+=^N }^˯a^ YY>ERgO ?G{^8HnE8ǿ [}JbQ,fegOŠ:N7B{BQ]7T*˓N:Ms/(3Mw+w)niQv+wP/e>kiNQӱ8keƩm>BbC2A;Kק 1QYSgaunθ | elՙ -O2U#>6Q,AUV%!Wzܧs<^;=xm &SJsPLڷQ\$9 :B6g;!Z+15[fn,urZ4)(ɛPq"`5p7 4Ƞ`a;ZIO$ɋ i~!j-))mDP5fƮ19TS$zH,^qeo +"{d)y!7'} 6㥤qDסc(Țkh Z//34l 73Kgm`rmă/_vkrp:kR I8M7{%YP`Xq^J*Ts`:DeY>+g|#;i qaSa}RH3%yxEn']!񺩕oߚBc'%ox;&%oѧC[i\rypʴ18t!"qaEgfgUY\i+z4ԇOz&0YTpp횴ȸXH8g zLc}r?k->j#.߲ae"J">o lz.Xnr&:B͞|!tֿ=<;V'.N[6By6i endstream endobj 147 0 obj << /Type /Page /Contents 148 0 R /Resources 146 0 R /MediaBox [0 0 595.276 841.89] /Parent 114 0 R >> endobj 149 0 obj << /D [147 0 R /XYZ 80 770.89 null] >> endobj 146 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F63 47 0 R /F64 48 0 R /F98 89 0 R /F94 90 0 R /F41 43 0 R >> /ProcSet [ /PDF /Text ] >> endobj 153 0 obj << /Length 1726 /Filter /FlateDecode >> stream xY_4Ofu.dIf20%%9\i_쬤vŶvJZmzFf/N<|^U3J4tv~5+EYԤI!jfۋE)邱Rww} ںS`|ww~&HI}9> 4y`> 2`X(ҍƈYNjv\O$2lHę̔cZH5m60b5_ZۗK{cXT_ M=Eo:CRSӊzC֝>QOLAQͳoopJ=Lۨ dTMqGNkN6jX]wg<96&tj07RH//Ϳh$<KDo}R:~j{3f~{бB}xt++yKD)﬍ 0u!+>)S:VVe "`Rv t$+N  L\TEp\S8o̲A3/JAt\ȡ'|n;dTz\./F45Eό?c_$ yir2^Q4;8%-1b$H#ОA;>%DkZ8A(W8r`pd.I".{r 'GIvqw.F]*ϣg9,5!8ꔋʆu5"!&jR H0ٖ) 'SG,lR@"yVLW#QQFLMb*uHhYdR#Kdʕ5K#,%Jn4TOS]] L%\{+bokgcŷ'UWP(b~X.ܺ[Ԃ.BXF8E+}J=uA=`d<>FBwGSVqKV w8^l9pݛFp>UE]ɲm!֗Ȣ+u@eRΖavLMސ䴨ad(vsSc:vWlo"٩v ۘoNuw7Z+XwkY͖l"`Ay|p"=teӢ;aiEBq-6I)㝎uuDY> endobj 154 0 obj << /D [152 0 R /XYZ 80 770.89 null] >> endobj 151 0 obj << /Font << /F66 73 0 R /F15 45 0 R /F64 48 0 R /F41 43 0 R /F98 89 0 R /F94 90 0 R >> /ProcSet [ /PDF /Text ] >> endobj 158 0 obj << /Length 466 /Filter /FlateDecode >> stream xڝTMo0 WP`v1+>,)+ iCӶCk5n^QZ Hb0hg[}uW {KYcWs|/GK:pD̪zvmnue2܃=Z՟n|oa14R^)~١^E0O1&Sq?Xe6!˛Ŷ.rw] S]_Ap=r'm;lBa,>J.6摒f ?"t[܂\b g;xE:((PSwk 4Ȅ嘞pJLS)uC/ŔHNB5?Hgq+-FA~D /vRyF uT #.k)&/]".4%PBHG; `1'/VN2u#2\7H7ɽDq"g /DL{'y endstream endobj 157 0 obj << /Type /Page /Contents 158 0 R /Resources 156 0 R /MediaBox [0 0 595.276 841.89] /Parent 155 0 R >> endobj 145 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpCsbhaH/Rbuild33e46ae5628a/gsubfn/vignettes/gsubfn-gsubfn-fn-quantreg-repeat.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 162 0 R /BBox [0 0 432 288] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 163 0 R/F2 164 0 R>> /ExtGState << >>/ColorSpace << /sRGB 165 0 R >>>> /Length 2276 /Filter /FlateDecode >> stream x[M\ϯQ:fW h 5`+E秪fg,L A3E]]gE6|8 B[10J5Z-OS)p-O!7' /ۓ/;}grw?0biaX= wٯ[ }%8_* =p<gyte+W$NDIQH`֭VG*7Z%'g ,ntbWf#S9$)(eBu$ˋ`q N筠JN'd;R2礋Ǖ̉i@T%gW޶<ͣ,(6VKL\bSBp6bLEORyZQN-7G]N(G6hB'帨=g8\( bfyz.J2#k! ˈad*LDZZ;ծD>J:'E)Xw1&b8l#\Y4"- Ϯ.c J+ n3$&礲8L |R.ڶHXDe&p0}H)j\IO[U)(,H2BJb7ZVPQaԨ73GI,TƋ<=f"N騚) _aZQ8 LYw8: nei(3if86t2U",0*hdofËSL4"UGch%7mUIpdsF.>C/i9Ib ymXFH1 -m_#(ux jLM+=s 1f ӷbNL#cf1K"^t4zz ̤ F"X.H*r&'tjg6#Loe]X\47)Ѡ/]dA$uP(j;$ mOjZB µ[mߘA){Yֳ2ݻ]CUo.|]=)_eL-nZ~\뾥`O5B;?^qx|y/2ǏxA<Ư78;7?3XHmx:_>| L/7M/lWmӇJ\^-E/i? ;=OQ&x?;_~nW/{V"?Sl_~LY?x~uyéc0)?{nfhw8 8zjq'WRo|jɍjj7/s endstream endobj 162 0 obj << /CreationDate (D:20180315191744) /ModDate (D:20180315191744) /Title (R Graphics Output) /Producer (R 3.4.3) /Creator (R) >> endobj 163 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /ZapfDingbats >> endobj 164 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 166 0 R >> endobj 165 0 obj [/ICCBased 167 0 R] endobj 166 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus] >> endobj 167 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 150 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (C:/Users/Louis/AppData/Local/Temp/RtmpCsbhaH/Rbuild33e46ae5628a/gsubfn/vignettes/gsubfn-gsubfn-fn-pi-repeat.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 168 0 R /BBox [0 0 432 288] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 169 0 R>> /ExtGState << >>/ColorSpace << /sRGB 170 0 R >>>> /Length 3958 /Filter /FlateDecode >> stream x[K%7_Q  J*~,R$ŒĂa)az Y9ot\>>/n_?W;]:J>}~;s>9^{pqgS>[=^?~nؒΒ`BO`l>_[p=|vg*c[,îu{F6vtfĈ;Z،U13Ff|1-of1y^N6x%w;,Bfs>sL=#K9o,;fawlUT_zx:s_w/7O ܚK'xT,Et,b>pvYpUܙva2F._~q6~W~qK+wyVR#8:=(gWaA6+6}_5'CQae1Q5^8\ס3e:z}~:,8UHr9#{O;`>>x/lؗڇ?cx[r$*~Fa`)+rzش1ƣIO o c}_棟>9o'߽ǃ!E~,Wد T*@ȴ QL|"=@p90bJPrz>;P2aqYp{ТXrß>+B"&.<&c > 674`x [<$9ke/1 Sbzb%Սf\}Ct!ΨDV)ҡTim?2_t*J0 zC؅i/8Jf#@xZX8"'O`4&4avAυM#N2MQ1 Kkc_X2V涆gak,)'M"386S´ YS^lN(]9vs 9s?î9;PsaZusD9ɶf|?6'[z1'`N]ٜwk+r%bbJ%U6$vdwf3~tbE*ٌŎ!ٲ%ٲ)ٲ-ZĘLmbMV1'Sؓm 1(6bQĢlۉEٶT]Z-JE=u-45 axM ˋcQwu,75@˹FX".wy055*j\LM :\675pdnjUSSm,k}ӺapSûh RO2쿤!/+Y:(RC\^{vr7co_eln,emie2Xz{Dz{Kz{Nz;Zz{Bz{!Jz{Qz{aYz{ 2Re%AKi/c+^VzxŇ^Wze5y"9,33Uxl >T{.35x~^p<@J"ՃppdQX % ̏4k@]DW $$LgQ( W3'**UY"c u>D=TRf H<ȑiy.VwxpfO4!Xā߅ O!~\)&x0~Dx0yJ_C;<y :IkX}WZ󧶞i 4&7Qo۟8 W5M[5Qs񮪹e9FKI5!z7j.:YO'Ij.r"bƮ9tؑCCX\FR鮪9YF')\ySqE|JQ{+c\Zw`)2Xz#, /+ԑLťTdT쬀RCh,E}SRԃ3O梾_5=-%=a}\crAs}7Xў-B z,֒~KIꥦR9{(nyG`(x{(x{(x{(x{-뷼[^-o-o-o-o/e~KQRoy{跼[^-o&@xOX U|$ִXUXT€ ].$ /E*_QDjM:$B"n"HyVO:i= J C% $ rl 8_> (\d'|ހr 7\'(,PD\BLtzΛ*cX쟨B-5׮l)6R0!kkV0 2j%CZFH1VϣVL+EݨPƺkV;t!V]+‘-ZA%<J ]+vD0Z$]tk%شǣV :VFIBn]+s $\kOkJD1D6VΗ^(@R& C#60gJrk#\F;6Lcܹ6yƵa6 sZ 4c5hJЇ On$ yh1pfl( ?$=`գp!-=`FY?`݄Bkq ep3pFJግ"( )RTڟG5A##ND!YQHV36flK!aXJʚQCjc&q{$#l4G&=`M rI c42(&hOnO=\6cw lƏt-=-C^$P{ؙ33םM_/.3U2aeDJp[BA~X&r%Ybe3cUƸB=eA|0>ccJtp'OrJTz*cyܷphaNZ&, {؟qe3}BmQ;a[i.2Ǘ-.s|ěNWR$ejd\&hyb3T2_%X=ƕȲ;x&# )f._fl.]ˌ5<ƗH ŗc=thC h|a5.]+rȢ'>$!$KM+mT> xÛrv D*\<^{lcqIt$KE 8&!_ [ A]$b`pcd9]Ðlb:2$K@;zLB8m qypQ x 0ԏ8 uLj( h cŃD $%w+hd;x%$1$cI%]q%LBp%LB2[;/%M&pdqpRݖ4\u ݖ$Du ݖ$L \"u[Ң$.W&Ƙ-Y2 Zے0mII_uPB[3 ̖+HCW m>vnK̾lw endstream endobj 168 0 obj << /CreationDate (D:20180315191745) /ModDate (D:20180315191745) /Title (R Graphics Output) /Producer (R 3.4.3) /Creator (R) >> endobj 169 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 171 0 R >> endobj 170 0 obj [/ICCBased 172 0 R] endobj 171 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus] >> endobj 172 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 159 0 obj << /D [157 0 R /XYZ 80 770.89 null] >> endobj 160 0 obj << /D [157 0 R /XYZ 212.504 467.841 null] >> endobj 161 0 obj << /D [157 0 R /XYZ 138.191 146.745 null] >> endobj 156 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F64 48 0 R >> /XObject << /Im2 145 0 R /Im3 150 0 R >> /ProcSet [ /PDF /Text ] >> endobj 175 0 obj << /Length 2229 /Filter /FlateDecode >> stream xڵɎ#>_!8@2ZUHccAз-ŭ*ioB)Q >HdƷä|o}D֢;9(D[6vrMiaVf;*.vG-oyoJawfv&1rRi+ZBcyj -vY?n`/iTkt@>#2e\)@ #ZZ8c&špgZvĬj=Erqf0d/QQ~ (ZZ+p|3)!ڠQ>a֗PC0cDաHb Vu@eչZ"{5;8 fz-h1pu[+ٵsM0{=FH/ Hצ NHYer ß

jU<72!gO4Eqmp3n-}3bgC~T+lCD+,)\@vrwvVIֺVw7dy %C׬~7/wgrli? >`Gʑ@H<<=RLVPo߮r(($"  rr)$>n}kXQĘqOUMѪ]Dzq 6<Zj,!/Mku###ȟibL56M=sn3vb{d=\1& d,I-˥.<ۤ.7|0B\?H.KR> vO8JRuuKS(2Z\)h{枎/?R΅dZbiNb90 =gh T~,p)Ԭ+z m` E:a:5Ț YjOCjntoEbQNCL.dVwGzep:dFMy+QVSӐC< z^%`rU2MYrJlJJEE~44Ё!NrRyL蕼x!~Ͷv/3yb.hVY'Ɩ\ps- HѶVř/ K,XtR澎-ٲi <Y:|a3 nƏip\'s ^7Jx%8HySBjXL_xRA}$(kZT4H@:s_x$udg<_jlF0G۴gci2-%oVEт'<6;<A7u ,n}#Yy;#fn[) rjW}YJ_8-e"ݖ|p$$|wʎ#ÝY9d՘IWi}O(TN^N^s/BQ$\Ӽ> endobj 176 0 obj << /D [174 0 R /XYZ 80 770.89 null] >> endobj 30 0 obj << /D [174 0 R /XYZ 81 201.028 null] >> endobj 81 0 obj << /D [174 0 R /XYZ 81 201.028 null] >> endobj 173 0 obj << /Font << /F66 73 0 R /F15 45 0 R /F64 48 0 R /F98 89 0 R /F63 47 0 R /F94 90 0 R /F45 44 0 R /F97 87 0 R /F22 88 0 R >> /ProcSet [ /PDF /Text ] >> endobj 181 0 obj << /Length 1392 /Filter /FlateDecode >> stream xXnF)P 0ǜ[uH @4hK*JM} IiC=8&I68zzutrDg*=MJ=)|*'W׉Χo?9/ʨGmhHe2M1rΫl īcFp+Ϡ֢h;9cwکiAO{=9 "W9$U,Vt3Yc]w`aL#P Fx f4+kI&iއՅ:ڸW ncp4ZI K"_\0c\2/DG `ǸS^ lbRO kkuroLsJpb9m*}Ka@s*^d֬3Z 9`ݝ, .qoDxmfMZo6ISo[ZDZ 94)D^2z`K ]䱺N;KdXa9m-kT+}Ȓ[4+yt}nDlC=h|;,Dej|&τ՝֤t8f'l il|IHWbv ݖEe!~)nwS_l=Mpwи-C\C"XZÑ3J`xe9 _JQ\7\JwTGЬi}eM }4REyh9nGVГz$,jSc4Se[ aq T33en!i76GG]]g@}^!1w`ð1:U.snǜ\K0YJkʗ3(k—e,gPR2&t2:|fpCPߦsX)?Ե`~yRPvũd 2σ]dѽD4XR "0`n蒻]w{+& ]:}@> endobj 177 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [361.149 283.962 512.265 295.947] /Subtype/Link/A<> >> endobj 178 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[0 1 1] /Rect [119.505 188.544 252.973 200.529] /Subtype/Link/A<> >> endobj 182 0 obj << /D [180 0 R /XYZ 80 770.89 null] >> endobj 34 0 obj << /D [180 0 R /XYZ 81 442.657 null] >> endobj 183 0 obj << /D [180 0 R /XYZ 81 442.657 null] >> endobj 179 0 obj << /Font << /F15 45 0 R /F89 72 0 R /F66 73 0 R /F98 89 0 R /F64 48 0 R /F94 90 0 R /F45 44 0 R /F41 43 0 R /F63 47 0 R >> /ProcSet [ /PDF /Text ] >> endobj 184 0 obj << /Length 131 /Filter /FlateDecode >> stream x31ӳP0P04P01V06P05SH1*2ōRɹ\N\ \@q.}O_T.}gC.}hCX.O   3?C \=>" endstream endobj 109 0 obj << /Type /Font /Subtype /Type3 /Name /F112 /FontMatrix [0.011 0 0 0.011 0 0] /FontBBox [ 10 43 30 56 ] /Resources << /ProcSet [ /PDF /ImageB ] >> /FirstChar 96 /LastChar 96 /Widths 185 0 R /Encoding 186 0 R /CharProcs 187 0 R >> endobj 185 0 obj [46.98 ] endobj 186 0 obj << /Type /Encoding /Differences [96/a96] >> endobj 187 0 obj << /a96 184 0 R >> endobj 188 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 189 0 obj [285.5 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 513.9 285.5 285.5 285.5 799.4 485.3 485.3 799.4 770.7 727.9 742.3 785 699.4 670.8 806.5 770.7 371 528.1 799.2 642.3 942 770.7 799.4 699.4 799.4 756.5 571 742.3 770.7 770.7 1056.2 770.7 770.7 628.1 285.5 513.9 285.5 513.9 285.5 285.5 513.9 571 456.8 571 457.2 314 513.9 571 285.5 314 542.4 285.5 856.5 571 513.9 571 542.4 402 405.4 399.7 571 542.4] endobj 190 0 obj [611.1] endobj 191 0 obj << /Length 117 /Filter /FlateDecode >> stream x31ӳP0P02U06P06W05WH1*24͡Rɹ\N\ \@q.}O_T.}gB4PS,{h 0T0pzrr۵& endstream endobj 192 0 obj << /Length 128 /Filter /FlateDecode >> stream x31ӳP0P0T01V0P05SH1*2ōRɹ\N\ \@q.}O_T.}gC.}hCX.O ?  ?1o`0`o``gr n! endstream endobj 90 0 obj << /Type /Font /Subtype /Type3 /Name /F94 /FontMatrix [0.011 0 0 0.011 0 0] /FontBBox [ 19 30 38 57 ] /Resources << /ProcSet [ /PDF /ImageB ] >> /FirstChar 39 /LastChar 96 /Widths 193 0 R /Encoding 194 0 R /CharProcs 195 0 R >> endobj 193 0 obj [46.98 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 46.98 ] endobj 194 0 obj << /Type /Encoding /Differences [39/a39 40/.notdef 96/a96] >> endobj 195 0 obj << /a39 191 0 R /a96 192 0 R >> endobj 196 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 197 0 obj [489.6 477 576.2 344.5 411.8 520.6 298.4 878 600.2] endobj 198 0 obj [514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6 514.6] endobj 199 0 obj [531.3] endobj 200 0 obj << /Length 155 /Filter /FlateDecode >> stream x313R0P0U0S01CB.cI$r9yr\`W4K)YKE!P E ?0? J!DH" @ l%r38 H.WO@.E endstream endobj 75 0 obj << /Type /Font /Subtype /Type3 /Name /F78 /FontMatrix [0.011 0 0 0.011 0 0] /FontBBox [ 5 6 40 40 ] /Resources << /ProcSet [ /PDF /ImageB ] >> /FirstChar 136 /LastChar 136 /Widths 201 0 R /Encoding 202 0 R /CharProcs 203 0 R >> endobj 201 0 obj [45.2 ] endobj 202 0 obj << /Type /Encoding /Differences [136/a136] >> endobj 203 0 obj << /a136 200 0 R >> endobj 204 0 obj [277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6] endobj 205 0 obj [638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2 638.9] endobj 206 0 obj [703.9 715.6 755 678.3 652.8 773.6 743.3 385.6 525 768.9 627.2 896.7 743.3 766.7 678.3 766.7 729.4 562.2 715.6 743.3 743.3 998.9 743.3 743.3 613.3 306.7 514.4 306.7 511.1 306.7 306.7 511.1 460 460 511.1 460 306.7 460 511.1 306.7 306.7 460 255.6 817.8 562.2 511.1 511.1 460 421.7 408.9 332.2 536.7 460 664.4 463.9 485.6] endobj 207 0 obj [525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525] endobj 208 0 obj [500 500 500 500 500 500 500 277.8 277.8 319.4 777.8 472.2 472.2 666.7 666.7 666.7 638.9 722.2 597.2 569.4 666.7 708.3 277.8 472.2 694.4 541.7 875 708.3 736.1 638.9 736.1 645.8 555.6 680.6 687.5 666.7 944.5 666.7 666.7 611.1 288.9 500 288.9 500 277.8 277.8 480.6 516.7 444.4 516.7 444.4 305.6 500 516.7 238.9 266.7 488.9 238.9 794.4 516.7 500 516.7 516.7 341.7 383.3 361.1 516.7 461.1 683.3 461.1 461.1] endobj 209 0 obj [869.4 818.1 830.6 881.9 755.6 723.6 904.2 900 436.1 594.4 901.4 691.7 1091.7 900 863.9 786.1 863.9 862.5 638.9 800 884.7 869.4 1188.9 869.4 869.4 702.8 319.4 602.8 319.4 575 319.4 319.4 559 638.9 511.1 638.9 527.1 351.4 575 638.9 319.4 351.4 606.9 319.4 958.3 638.9 575 638.9 606.9 473.6 453.6 447.2] endobj 210 0 obj [583.3 555.6 555.6 833.3 833.3 277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8 277.8 277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8 500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8 750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8 680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8 277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500] endobj 211 0 obj [937.5 937.5 312.5 343.7 562.5 562.5 562.5 562.5 562.5 849.5 500 574.1 812.5 875 562.5 1018.5 1143.5 875 312.5 342.6 581 937.5 562.5 937.5 875 312.5 437.5 437.5 562.5 875 312.5 375 312.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 562.5 312.5 312.5 342.6 875 531.3 531.3 875 849.5 799.8 812.5 862.3 738.4 707.2 884.3 879.6 419 581 880.8 675.9 1067.1 879.6 844.9 768.5 844.9 839.1 625 782.4 864.6 849.5 1162 849.5 849.5 687.5 312.5 581 312.5 562.5 312.5 312.5 546.9 625 500 625 513.3 343.7 562.5 625 312.5 343.7 593.8 312.5 937.5 625 562.5 625 593.8 459.5 443.8 437.5 625 593.8 812.5 593.8 593.8] endobj 212 0 obj [486.1 555.6 444.4 555.6 466.7 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6 500 555.6 527.8 427.8 394.4 390.3 555.6 527.8 722.2 527.8 527.8 444.4] endobj 213 0 obj << /Length1 1636 /Length2 8519 /Length3 0 /Length 9566 /Filter /FlateDecode >> stream xڍTj.  ҈ 1 2  3t# "-R*H -tE9{׬5>;z0hhsHY",  [ * psrrs`10@]`X z'g(.r/۩"eW "h#PQ0ڸ8sqs9N,w @ qrX~% PCʌcuKrq9A ;{-!Nm%_쀿krC/"(3 F;P5 U8]<\ /CqrAa {74Nupqt~rpK=~P'\up{ pK_IX:p¡%ٿMEXʬ!.>nnn~ xm~x:@~+3v@8B ?X 7]k(_{1/||'~_Lyk\rFjle4 |?'R BxX02,e7b^HfAPr>UF,W_)5?E:C= P_OaP8D 8_7s|ߩ*6wH98akx '''}x߃ #\]NX)$\"!?,@|.>_x?\?=3xgv>p99\.l]<^tk5;]TKQsM0맲px:w{63әTr_ªNKðwI>7/[fFI>H}|¡#s`҂ܮ̐*GݧЩu͍ϱo9btM'Xd}!Ew`%<<= VN`ݍ-6Z扽XANOnDFrJ88-Ztڻ(t@D\\/i_j9re?qg8#jF&: *YO~tTډȖl;v붳q_Kjid$H4-\ζZEfDsy.kkNc\ȣhi&(Su'4yR ue%Ĝk?k#ӗcGBfz:U1\0oa'ȂN#v-Z_38DYsG-Bp[S/8&WuJL̦O|2m)d V/%J%\F5.tr^ ]QG|Z3 ]Z*w$g >9p |CgïۧFqtݯ,Wn@h._7R-]H6"ܓ巐hy6\ /4McY (D5?2ʶQlj8ǽhft `*qyN$^WCW}:0ɎzKI^>f$ʅO qFljrcNhW+ qD̥>,r1uadbpˈmF͉ \*-6C#7`pM==#NI~G;f ;lm?~ 0 4Fz8b'<ݾ|s17g-/$1,Vro֏8Γ}tGv&#'ɅU0tWSnto'iPpqQ'}ONAڳ)n1% Ag_ysZ(6EdӉUB81kD\BXۢ%H|%{|5V r}S̃,+ޓ5']tR"`/Flw,CeI: Tn}Ih+A~w ۵ X^25WC;o BUM,ҋ]@Z &O/dp9W6* ;(S)k` b>W9<="0S Gq9d1TWLuD/])U]ӷp8>IPDղ";'>&/h@o# ;}n&'-n{=~$e 1mL/jq!W(q}iaC`3u}o[$yis܂3^CS I7 FH2ъpe?LJ~ EV8GMĎ]5daٌ_nFgI):͞)Ľqz5LJq!HΞO_q+=\,Svаl򒼢͵4F8l6*U%"g[`J tLE=f@8'9w9s'/ pkLDeŭ9*n.X $)UOCw`s8Z(M(L[9"X٘|YJ"8Yw s}SaDZl:Gb2KZ}y1]^?5 %D0,hé;kdY_:>[sզQe"E`[QXiS9/GW.4`[.KyUBĄ+NZ *L]:nt#JQ\瘮A*¿ 9S۸O<;E+L3+>J|҄ЅrE//TbBύt8'^.Op+sսd]s0@daדl]d~uN )-HqA, g0wx1:L)DzEd&\S?%YnBifCj'9nsOࢅN rHƪqR<]97Ɓf.UXB'za}<:?9= xkgEp8N~8 ktowR7^mLgMea(>%}D̻Z{v2NPygs7_G[ ??pX?wfkÎ~Zs73LN-EhgсJ({yۓ_zG8^ƟI^ H(WE+Yg.t`ٓ$Bv'K赏FG)45Qvi7T_Y]3&ӂr7Q4 nYۍ/- G/hězՠ!{&wNJfVo)c(2~Ii-! R?;䵉|^yCxK9y#n"_AÍ+simBwxj`&i3]ڥP|oNΪ'/*_N'1xR՝pS~{ q*<<~EFe<q=)9JPDdU hJ|v;%YKv "u"RݒW$&>t\W\Z b;䭋~a<~&74Oo9ȸJ2ڒܙ4᱾fSyE_R 9NNVT5dIng/wd{(ujn^B^`B5b-RlK1rsw"ӯXd%Q*ut.$QI[#}5{PY_aZ{`}g;SVQ|+#t&afu͞7!mM+$Ć5M/ꓗl XXU2` Zo"V?GE橪syqy" )`nPK5sqΙ  .bPzg֠2 q굠"c˷al).98-L-NZ2ʏ ʎoc*Zq(ߩm .)_mL<>k/,9[Ϭ֛ڤDCVZL!TQ$q?e[.%հZd%K.Q4 r_YA5͔p^u][J1XDd[kV u}+L~Ͻ!<AZ҅>'y#wD|`Ϯu86Lτ_$-kWhu iRz0C0SB$,oo|?_)-}%*il9ydM;fuiane͞jYImд2 L5;9/8Y7m5gYGk-ʒ 3Fm뒎>aQy&U ==zvG|ػSs-%G2mǛjDvLTM!.yL}@UO+YoGfW5]^]%FFK;M jگ?"RxGRy򑭻9|$!z >Vf Ghp0nҐg4++KNWrE|'7yk02G5~9HsiBؼ <2:XJ=̧4sE?fV׏'yGqbǼܣ;ÛIf* +~ Q`*'wZj;uT5qcTs{4XD*ԡ:FrZȖκC^kGMy϶F'.ACymc0>0AM9qS놝XEco3F9%b"/v}RKM3yUgz !0@dRDdUUNU=(- +(1IqH)[/y10|"2GsUJ1r~,N; FDg8~)4_D MB3K^{m%Y7:m-5v4, +F4cXw !aZ}*";㖝Щ7Zh-wuìSbU&IKhښMz+#V\jOOV97s 1Joq.XXūXe.c)K)Չ1W{Φc|#Jcva7lMz1FlG^)?@ e>r#/(5_E(zy#iM]fЄy8ʪ[+k?OUEujS%+-̓D&y_%5O5kvN6 % T Z=֟ u9{iq7b޲CE, &3ߚ;Ebi{ IOsϒA6[Tӻ8c_iST.K7d`MϘ ZSwӫ.māuOz?O~Ef(NRE+64,8IK3⥙Ct O+KCLs܁m7Kk7*Y&}"/bM}9^xYX}f1-fqcfPlS@!;E\۩m_={Ӗ! 'p{RU5oUOڪ=E>fJ&eeS+m"Bǔ@˗@ՍGK8I ^6xr;.R$Ho!m0Q5=t!ǍP,Vg$R9^v/.Xml |ق{ G:r>M!aaUPs \r"u2w: }fI,Ϝsx?+z U%Sb| ll{nZyŒP,#3]D !YAw$wtMk46Ą(+]v'bdG| =ʾ:D{jEٳAqH/,jR܃B@2!&Oɇ^'l< #Cz`My哤zoc@{>/c`p}1F_IВx Э+'$VKڅ2{3sbx"qWD 569y!y\cdW B"C4xcr%j|bg,I Z1hq;X9c+s5CHxg#> aq#?C+(YPCڱ{Lh 71٘-DRP3"޲D, sfXذ({LXwW9)AԠ\aʖ1\5e~&q,Kd6T?.^ھ&1 $R]5v]hyƹp[dbˢ?>COr5+eUGYb 醢+hUѴd̷ĭane$mHNişkLStFP|uێK?n22ۏfk 7SMԩpl 'yKaH$K7Tb endstream endobj 214 0 obj << /Type /FontDescriptor /FontName /JBEQZN+CMB10 /Flags 4 /FontBBox [-62 -250 1011 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 108 /XHeight 444 /CharSet (/a/b/c/d/e/f/g/i/l/n/o/p/q/r/s/t/u/z) /FontFile 213 0 R >> endobj 215 0 obj << /Length1 1478 /Length2 8518 /Length3 0 /Length 9504 /Filter /FlateDecode >> stream xڍPZ6@qww+{-.ŭXwmqG{}go2}v<+g@&eC`l\5i.N'';''7G!N',T8\<.~a.aNN7'?@T t['+ =`dp qH9`K@ 9>e:!`B0`@GWvF@ ; 2@;@Ab BA'dTANU._hi qt:yl`*; :Y\!O@w hsu @^J|b7?WK( v͑w29Y@AN0WCAOuN'$koVnN`7ߘ'ƿu6 S_r<-m9~'r1rV?qq8h֠ W;| l XlNY%? q>_' 89x*Zj//4`pq~_#5 C`{mA4 ӿߘy (ɻ983؁`O{ 5ӆ8/TBKCצ>mÿv{40Kۿ.<w;4 lO;gi> RRb{B^O>\OKj3v'D` b(?C$$[pX[pXKp@C|"?GZAOg#y6@ O%,R$Į6FƒmgLlaG?g5:R*uoyKBr稥55Y,Qkr c~H MGrW/S!MGڣWli$lvGs_l-V78+CE )- ٙ'׋g㿨_b1\玻^v"'3$Bx62#VdΧC̚;Őޤ=2Z RhH)XVj'}WeAr\'D:n,p@GdoSNߤxRaؽ1b97(IUTkUEWS~rZCE>F}?\!څ~9 bz hYh'~{xߙ`;dPCxAɮT7]ウln~]e -CL%NT/IIj6F؎jP^IHN}]׻Ӱ%N#+j[23IREEY qw9$C",;|۷\iY)PS $p-'GmQ*80(G Dg43/&,XrRH{A⺻=5c%U^&t(nH֦x?]sָ)>S*>GU66/ z_:Ͼ$LcWH h^ո>Yia%_3HN$J.%q9U n>ɷ4ILVmmmw/J*ɌkM4Cq6WZzȜ8-MϾq,7~MOn2HW.9F-1x-jfˆ7ϋBθӖQ:_2gגʮ=r"3=JOsƁ_H 'ݜhKR#%C?!"+_ˬĺVس1ױd| kFMo^D2Fe1 ࿅!C|RՊhްtTvR/ČԱ{x< QP'gϕ-bl0ƐR :+sdϝقFT~d/ڡU8;HsnB&!5uq,SA8ֲl5c{~ {}pN{1!gM̑E[ŇɏI֌S)K6lXϽe?Ɩ#uQ#,L :|Eddy p,U|m]@177=Eo#3>uq*.Wah}^F.;\LO.߬-moAbM̽ȨgS ]|?,b8.o߁Xgb-nEdѧY%G'[𫝼;R#$o}؟`vh<}j+^BvY7$ Ϛ$wo5?'ޟ/GK7V!e "Q d tSE+k "x䝻r 8 2SY ,C%z:ds1Td;-塈tۂs ^O{5iBiQAz`s;-7F{(`6E\S [̣mm%B.쌯j'6E:X;|+I nϬVGq Xh'm͖*p%kAN h(*$ KUWZv:Ow93JuNW nޚze-Íq~JP#LTLlz6 dq`]UP3y,B0pe{6CS}Lg` hi)V L̞LTQ+ji;9]c%gUZ (AΐJɶg9F _u) A,5N EO=tk]2wd(v-?nCPl©m 4 T]Kۖ/[r:?63>"5H33Ӈ} ijբt\b,%̒3sauOO&AROymF.0KDwH.Č+K8\\RByMg'7q;'es)BX[E]>CY i٠ ,m.oHmS.GðTem0,#nU[{]S{v|BeZzuʸ{  N 5Sao/!E7GoäEJM ^PXyxy*:tվS!cu⟸.͵̯Mލ͈ˏEE'i>#$V1 D+oHLj0͕ctv5Ӓz{$4˜OO2ogx ~0XbG=\f^.컅 n5nmlXx]݆/= ;a2䴫:bޢo+#UyPe0Jv[%Ax·7^2S o:uKRv#9÷$6X9]»KÀ$Tob 9n? W Go.?eT}3k6>T<\IeARŒ6?6G(jag~3 ]?uķ-tC.ʃ':x:#$% |"7&t*?̙dr"`TGpe9H!"oToTSdg?"ے#OqiǃF6 ,wڙܧa,R .E:#f9vZJTfO M:X?J#Sj 5F'˵ډf㤞\܌5GGth(IS&xy]QpZ?F)NӁ1c_vSl]`۸ńu;`$T Z~!vq޼󣳶C3K BB@M&{Juh©^d7*\hʼns oq>Ê#zpn*ՂHe;,y>M>yC-xE`!'EiږVht.GoY̿hkKg*[]+"8K4?=ua2QWK!7y`w ^:?DN7\"e n_m[1br FDt !Ou6;rJ|f.|gVBVFb]12N tQ枻I4Cx_ 租ZɌ\=W) ,3O"/;ȵ"tjy T]կ̈>PC1HaT:}XobFR>PnaS.- ;Nmml9o75wgZH2Gj? Pxf}?t ի@"@/kW>(Dy7PP)*Y"f/2h'YKiI[(xby^]qOKg A.ɭtB7 Bcg =Q⎪Uշ"Ž9fqj{fYvYYjk^KӸIl4fZh#n.>[K 4-㵬= u|$OfA^dٴMѯhY,1OMʽ4K3*CSWL; 9-<p=It_kl(ـgzLx/bjPEQ;],W%cFl>^z~ RXzZL2hqm$#^]`_Y@άJ7()99#1W7ID~BL RkFAӟǁKDI fygTێhrޞj}igӚű=oxy^P{ch&tqPh'.n* e5ennhUZO)`MbT/%*ټ%V)QMp`C3Pz,?SUbn Q[[<-.\uss 1O0T5v\u@)lhRR/xp|WjV@E]LUXl8RN{K*X`B#}wdKtJPh̸e eMᡗ;Pi5$AWƴMlzUOWk5n~̠A9ʻIlPVU Yz |ڊt*$FXs}Xyd?DDZ>׮mK-8xI)(奩}62n`s<B[=d] %h ӡ=8uD/@keO7nr~hSV{Ee;9ymydjCņEͣO9#@q+V-|AzbUbDqҫQ2tԚ&Xpc zQ%p )u)a׃v W+~JIv˸=oOem~ "Ҹ}(K;ϖl{IVs5(y ǿ -2*/EH{ƾ,E;$sHp'B"56 06_yt=\0~v }[l ٛ6j!aK(pYmb1E0̷VVUx+'LÙ2C6.Y,E]+`~VgQ}|)ew$O;Q͎]E{|ٷ+o%tپյR.àp{o5Odžz(x'qH?M"+`[}ERfDMavC=Y{U˳Fy Ÿzist_L \ħ¨=MtyՋcj8,bqk~|r]+d>=ongƍA16gVV{KC @[&w]<ֲ-&&kDM&ϥ|`BEPg\a,>S^! `L=>VىsJ~vC< ?h\=p .*v/sx[P3j-P u~&MKKE?}EߛAx-9G{Pޡ5k x*CDjsyq蛧0RpUE> y nG& t-i\=Uo†$]m+G̴[É+d{σ {s™SahDu pY 0gXZ#wWXiW%jL㗸]ئ&v 7qikxil!8 -4 P, `3_JcI,&ϺS%!9pN͏*Kp+ݗ8vc:M{be1h=(}4{gs+;Mv.mz}}g[8Zc?oZxP#`J @6+3H~W^7A^x_/|-e> H/HEQ'1\ͅ߸HQd;L^›' dN2PL;`Pv+;ٮK,^S>UI򏑼aϓ*tn Ӟg1}Muq(I:o(qDrsmΎ)}XK__O6x\XF]/{f|C4hZ)Piyh_/1LDt燋֙Gk5^CB1 މ;u'SQ FT՛(JoQ$lDݨCwٮ˴޲~}q FJr 0'r~ty/,1+DEGbG]CE變`"B)qGk-Tm'!§PiA &[,zUm՗8x8kUB[aAQ gӄR{]rBvͰFsFA!]/΃MHC"VHi6?Ӫ!1i}hY0+Si}d%&Yв129woĺ]D%##WՐ=q/uͻ*7`p\)HnG#߬` jZo}Ͼze? ǹSzϨZZI7.x!KFjʹfuafL>."R;N#f_teFi`&CJtfjADڌw 5$se%˄uz["B42x\pB Ɔ]@1"h' endstream endobj 216 0 obj << /Type /FontDescriptor /FontName /QZKRDM+CMBX10 /Flags 4 /FontBBox [-56 -250 1164 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 114 /XHeight 444 /CharSet (/A/a/b/c/r/s/t) /FontFile 215 0 R >> endobj 217 0 obj << /Length1 2036 /Length2 13563 /Length3 0 /Length 14800 /Filter /FlateDecode >> stream xڍP 3HCpgpg4 `]KK Xpw.sޫbfuݫwJIM*ikfɋj9\ttj0'+tPG?bPӳML8[\@0OP3ʳelmtbv03ssh:!6@y9DcPurNNv +;ڑL s2@.P_ k迥arښ:Bgjlcu>T*AmEw_`6Cm 603) TcwrsbBlL"Bm!.w2`vN04Jf 1[kk#_}wr-ml]m^~ u36uo'/oO;[; 7qޞt/B&0c' f'j/|07}KyLlmb˿%)*jdq`0?yہ۪:?mLmܽqd0{m{?*w R{_ 88@Q9 ~^R߳ :=yMmPQ^ H/ӿ$_IA` H8>?RS/A ?2/yZ=?2|?N |.'hS?2EuvGg?sge,Z>˱|jj< ?K/~svυ=/?z?缿 ϯԟ: 's?z,Kv9 g_ 5F5~dQz])Bʶ5"4I9e"SEzåHb'ҦŻσڗ͟[ TƷZP~zDhe;Tvr)^ RޮE/`R/6ʘ&~F̌s5uq99D)ǂ++S{3fcT;1-698n g3 ߰ UTŃD{bX!1t{VmD8Y5|`\TG嶝t?,8CS(.߾h M#3P.n(Iqw}=:*eE\áY? dlN;8OҢqxYUv̧./Ɓooޡïګm9͙@ǣS-d:lei8Us*uz2Dpl* !P+%r񢉏h{&&^cG]?cBi3J4?~c;ka'-"LV#E]'@H\Ћ% }#&MAۢ<%Yѵd6g؆X>Ƅomo\0DޞZ`;vɇ(5\Eϴ2w&q[0$'l^=0'>2ܡ4_MHOuE [/[(1gևݚ r]>0j Υ.N&Y<_I}0}uP)\`8@ Q'14ԔQߍFneLhZ kcu~E̡K`*87䃼<|V 8Mô*o9P<5 pV.VaPnbD{=1'1j3HwQRˁ4HN :6k_h4ĵ*:S4d*Џr}ԜgjqT7d>4z>ȽB,\=\Ľ-{ jA]n4\*|Řj8.I4ϤX%}u W8+>LIRlxA,S/>s^Z¶oF2pUE{KVގFPXƾ+~m&K"d.@{luKF~B-b\ct-2%m غsSzZxDIiV̍SC؄.j{紿Z]\㴘@@3*V^oKQ٘#,/4{ms\d[-pXb5IJo^1\,s6| 0;܂̛c]kJ2;^NKbk~ @Co]s^WO,cAr!,%8U p/GϿLeˢ >lDb#R ;¿&[ek߲>30/`R:uu 2¾}%"3_b눐ѽ ʃX[A|$45tǂCog9$96j/mhGW;-?C_+#G{n+Sܲ0J7DxIԠ( V`8bhSKVbտݱ)l5%Apx)exS;>g(a9_3Ҙ{w)avZܔV$\܂'V&38c),J5-);Iq(A?:G+s߯sGPcARR&i/ 2aN!ࡠ*#Nf;7iBmgLVAV)&}WKdž5r RӷP-R!s\u]icx7o 8dz: EnoxmFO[yMQlS횭ߞg:,29,M~oZ۰ZHJ[HW#~xݙzLX!.@ם'JUCO?ìwOAohAF9t*!6T́xx) 2SGH<}gi :j44@ 㲒Nru Ej;_!ɘ.YX:nxp6R.==W(ك_2kv @L0|Z|c6we5JԳuRVaکVއ!]Caw[JA|>-6"Nz+&mT(3~ΫHF? ++IJ>~V̬;'6C;#Qע7;ضsv69Y@t 8&FJM>Q ߱^J>&Rh]D7iIxUoC5qZ v3py^l %kbIR7V_軎-FtyKE X HORD Q3}*Le`n#F $|%J.[oæCǤ{킭bvD=Az|s!`W{bEP= ߁ ZXwMCuym+6Ht4-pǧxg"#Rx'u!F#FMUᝅ(/[&Ҡ-pEցg7T."IA\%KCz.hw-U±PWk@g`TӍz>#)ew!uj( pr 5R>B,ollH c-j;yh6Fͷ :4YA gw͉11$e͏!a:&;m)+a/\i1vߤ17]owNI4]ȑRUQȮحűnuPhx9hJW_Fʯ>fs Ǝ㦶I9!}N#.; \ :& >Sd9Z+7*W1>6ZU_59Ưlȸ/*k?8v^Kڼ3u+ӞE<2(e M.#)'$gd*c7IІH"EjD-VƘPⴝxڣ!b] ٢+WƦ܇7>CάKZ..o0W?O!C,.Tܗ ?>yLIik/v8~RD~@6%V]|i.((F%7ٴٟ@<7H_Y]kS׮"SP.A> jjyvQQK#?dZo(iI~|M\ฯ}Oh t bl9,1L #R3 u LV/Xj.DQӴ"2V`\< /1tքAV>x'G=}vh$ZhވdHwZ?ᾉ1gnU'%6Ѷ~ AJLŷx7Οe M"DU_eU'p]y'{>0cRLI` [t(6tVT:[bA$eCFa[]@tc[)wMM9&O7/>!t;6u1):歍^P^,IGLqqE2Ec줹R(?;R3%kS 2k?<8- WBs8-K 8qҙ8m(R0w+vť4s>o;,*@T#n0qwF&JQ'3SLVf1îfdMQ" HUOyx(Džr^ɩ%)/,Ďw։(P`lsLh!=ǟb.ܜ_ &tHs6˘k-V:m_y/D/v% E2ቿu ]T&,px0pS㉝^n-V$ Ÿ!kz* 5y<zwgƪ]]m̙B_PXXtU,-`e|yoTضݥލmLu\8E)}#$7fQcɏwމPQe>3g*XErRT:in}\Z#k L:S{lr0iG,O<ߖ*\|#Hbc{12N8A1:IkFDqALL[?wsX^$g}VUek/3 _ vtblj3EѸ{ϼL,%ha%2,9#:3,_rHJ}Hp\f|SfKasanQLB4; []{j >gk aBDM߁٨nv DORmBr~>B`V(T眅ɤ͚pM=>s~^㫚$1"0r,P-$ ԭ`^s%V|:/fWȏLN)y;!DW,?cVo w\=ϻ$],i2ԷԷ_B-fE1۴DQ@ !@PUil7x DǧzrʹnR+Od3ַʋOME;%!ao.ZyLļeR$-o0u0Mss DHk#%=&|[|&XD ^PASkKI;) cJб5,5]n5RŀNeI3 "d>=;}w7R1 i3L<0^xYհ)X|>_M9iXӫncNZ fp0Fn˷|2Y9]J~0WN<ܥ/kr{d,YԈGmy iެM rI rVZo÷SrY4IƁ< ϡEK.P$+/bHෘr҂ Z1t~F0/%Dze s]_D€lHZ |B#]/DP'öXu<Ϳi;jx\/ Qnl[e1*ߊ>ˍ)ލS*=㤌iEyWUjP>cs~Z b\@Go[X F;G~9Іx' ^Pa1_&oL38zLH*t}"U)bg^Iwж}It|/-85Q*9HuO˔0l&bM1Hzk3l:Ҙ=zQ0B}w>U k; x3 NQ #xx Y$+l_ _ӕrߛȱcBbs \9bPakY,/:JЧ_f δPs 2?-R0F|3}kFtḛ)Hk(ʈjrHwF׳\~JaoɁJ^C"S*wto7菾kfLǰBSOBt<|]L9x.X7gT˴0C?y S:1YJ\Y \iE"înJt5Bx4Ҵ!/@T!.*CHf8DĎ\nbCH >)>W_}]+F &gp_YF*U-nLmߩj!Gbg:P@2N{)l\>Lp>ه_]-1A\H<Um^{Da${@;UE3I,4NF3OQ@0ؿ[+<5r=N,5IJacV&/)+^}cdS$yN:AEA8NL+4mdU!W;^0>KG\`g,䈟-}=݋%dẠO\LTA(wN"]:^{$"RUUqAXzs7qCl~Ԗ8X^sy uhc)r"ˋbv:+177BÙFf9 K[W΍c͞_ ?M? HX ? 63llŜz%Lt8ȉ.r6JeA'ez+ߙ9h V}y'욋Cs,Δ;kJ#O劒&4,iA 55Y0C~~, ّ Q~Q.+ ql~,Xt1h4]<)ƛtTE?Uߘ~fF.eg!jSXo"/!D*"EUYK)?Ǚ,g%U`tʞ2#K[9*)70!*f1)*P?Smȍ'C0EӡlI҉>|2Sapu| vpjTTvY2er$R!eCRS] LF A.bC^>n?>CBTKƗAhPz/CzuFGycn/qU ke^X9.\ ӻg~eer۰2/;7$ʹ CNaM!I#6qڨK Gw&]:YyEN)UnwwT,ytԫwJd2q $iL[SςN5[{F_g,0+'DՐޖgh*t<5{Cu,Vi3KuY< ULs2dɗK5e'(X_uBbUb(VJnɉ#=Lt|iHIu LF6L˹? egΣ^YwcT/Ky8Z;~K-2&J'ms^Gcrd 5.!nuX:.9KY\N3{WWqT*U^?t0p#J(X2cZ@>#1 [S^NQ[TSyk@=7:nJƃv^JO[9M}X&v. 8V¼, [PŅC1U7 4Q!@PDaXh#~I}*eu[ aPX%1 !w/SזT-fSp)dUrYSL]F(o˜n@ʁ%FYZN9;tj4]*Zx^*W[*ҞS%%.zzLO0Oȧ)uМ|{?o턄cPt|†Kf%WQQ%%۫z ;Hh,ʛԛh\*FBoN]v+3g)f::N#I"$+x\.d*iKw1$ʼnDg$(SXFGz95ms(=u٣50ReﺯV-~3A,] /zQ~B9a2DjuxXxEFh]4/bN25UY@(7U<ÞI[A9!$leJ>AKѐg̋Q FgLw*2_6d/SM5ɝ X-lrJ:n=QF5\>~Wt .Xm%8%'ZpIVu& jqQ$Nv/Y,s j!id /Z쬠5eݯOݜEhc`ፓ|hڐ,^e61#"Baۢ (d#0i rA")W>Tsz~Z0q(n}W13h,M^]~.Ǯ;7 8^%4玭]˓li:x^xu~IƆ82 /uwòl)%?Ju#(\Qc$ Q<չŨ (w8Ml)[?;F-. {miST[`j$I&k!|HH(B`^4hਸ਼L4Wjk;,)J lcl% VJVWٙܕ{1GYjj V WT[G[7_l0ޕ_M #o;pb#^=xH6WI(93*:?0iG?H4CIBlTsC 0>\W1o!iF'!lጽB+6Y ᥑa Iv3(."?-9O_(W]FU~O*E"ΨkO Q '4D]u0gDhlL̫'CND +kdJ҉Żr[T_YG-(0 xuҊ⭞ov{Pl} V.⹶Rtْ2ajZD<"_)n:8rfMZ8+& .wcȔ" ZOܶqXn3 :跠=\)NRqC-#~99{/T^j}I b 6osIsߎpÖH_²o+ V` }/|Y 9rxӕd1HZ[mY7$|y[*k-ΌwkngY";9ߥӗZd<ҒBXй񣚻ݵŜ|aN% t`VDiy`үm^U6#&YN(WW\&d͠z`.+]U5;1"['ml|hr~ޓ!2HU7;7 Yg|__7UYʛ^Qy3&G2DZܒM-&`&@`,TOYDq0|Y/RPqHhQw Aյ[p޷wJk*t:7à wyx+W(4z d ؽsS؜&$!aD7 d)Qj3p4̛pM>CRҫg~]~Gʿeb-ܝ:_._Vyyo##uR*;)NùKdx]3Kg-''-AJé*|qҟհ&].EU{mXڄ!NI\U עf> endstream endobj 218 0 obj << /Type /FontDescriptor /FontName /KJXFBX+CMBX12 /Flags 4 /FontBBox [-53 -251 1139 750] /Ascent 694 /CapHeight 686 /Descent -194 /ItalicAngle 0 /StemV 109 /XHeight 444 /CharSet (/A/C/F/G/I/M/S/T/U/a/b/c/colon/d/e/eight/f/ffi/five/four/g/h/i/j/k/l/m/n/nine/o/one/p/period/r/s/seven/six/t/three/two/u/w/y) /FontFile 217 0 R >> endobj 219 0 obj << /Length1 1486 /Length2 6961 /Length3 0 /Length 7946 /Filter /FlateDecode >> stream xڍtuX.! )tK4H K#"-݂ "tIw4H E|;3=g΢'g| SF"\ c} 0 @."0DH A\n|&x "`Q  D$7@ N(M.(7,..; C@b s8P8?%l]\$@www~#]lz04  Ђ8&Oxd GGZCP0!7I+ pv!ky<0?rf*GN@HG'X`me ~^a q@#o!n !e9] P͏;b U栕V HGGMkp zstGxc[VֿX: pgW⟨?> @0gj 䑧w} [n7 w C]Oa6p?o0?)@=!@~o pZ: <;,/x A@fJ_{u ?jk$@7?OpA y30?20 7~4 wOʮ\A/'f]]nT F?-tߘ F+ry G+=`V:pm4p#`:H4@Q AF`m"~)Q@XA 7#pc 7yrtIX#QnV\ |@?2@LQB]Q-e~8`0`z ^.Gη: D-%Zu]#)汵Emw5AOIPOWZ?]}6D!}pXSoj2DXPuˎr:oHqԖsV'ÿ+&&H P*_!7:֨Ɔ>؉cTЏ)O'nH;(/'/AGl(hw/s"ǹt40n%u2_֫$buGZ'F?lV<_$r7!\41LOznzO13{Nϕs0硺"\t״Iis^lW2ٜ<`ρ jy;,̹$;/c{A; ])ѶyT-"U7ťWGS`{Tc'+eQpwR֫˵[>{-#s)1VA^{j1̞/%*9$f6F8jvtl/j0gDY]$@pDs[35tQ; XNRHS'J^gJ(Ń';Xi)696Mh]؇LNšx9|!]5X7Y ږ>MDHFf=AV?؝̡}9խ8h޾bUaʌQi]bmz٣P9NFK!UW*10Bw>%׺K,Mdx!dDI7n?ŋZU :16=+T Rȑ;xM ҉rrZ_/#;z57]f:/6o"3"1jgJr-BhZFK_Qz Rj#MK^TEIOc*^KJ0OF脲;ek'V_ʿС,#2b/u3+rӬk܇4Y{ as͹`ыUȬ|!׬d\ӭv׻Y9>Y6t݂MGBBqm4i֬Oy=ků_+S &zE%kR"7^YaFI[Z5LטCשLmE}2- l2$h=9/ṥ;!DŽA-JDԁ'5(3IUq]iH,E̾e=IZ*>uw>#fYlwqkV|)Ӓ5'P`׈EqM͉ΰ<9Ijq;<9C{:ŇSKTRPAG:Ĥ~mxMlz-זX',p D0_d( ]8K${xĕ1gDwbF& $ ! ~KisCt*>Oҍ"{zr mVﮘ<xP|sbJ$e:fla;UڮdOک͕HqKƬ@ɝ1H{[tO&Ҙc0M|`kbf>'KkqmBr DhLXƘ[fCyOdGrX_vq ĨM# &'$.M.wӦp[+vFDpMt?Fk'0yq\ɹz989&O42:K*f>ގ`>jLxXljiúCU; ^RF'댭8%!yZ|9Jӓ#E2ਹi&='F='V.{r9>ڑfm$UϚa[NwqPtW+Y9+TSٝpXҐ,J.| mI^+ɺ|J*IY_٤,6{S头EA1gَXpZ5=l55p| 'ޕwC;úJPܣCDt,Aہ%&O3| QՏjN,?> U/R7+wuH|Awrfw{PPjO<wZYORΑ 84x`Uj[S Ouؒ;zqqŔs(gq)fms]t$ _ϰ(1?"߂=RcM=\b>Q &dKWJG}K;*.H3LT6Zǃy$5w җi G] ˕o/nD;E"amcaĝpǐ3Fj[d}s]5߮%Dt.~'y?4G@Rpnb:nhUS"=nLN!#ǐcܤjcm{3AGقP  zx2x< R^tT5+Y28vhwܹ Wenah_㵡wg$yH4LKS;UF?i0cbVE>Kz;r67k#`! >^U<`c rK~/)Kbz~( 2ގwK3|j_ /`SV+ Vr(->c`Nl9xĞs6P4/ %Q;79 /6[rU+p2*rO2qɧO<5mVIZ"1r l~J+p]Qhߕ[dQNaל-PPMLgN]Zh:{]1#f eq_C mM{'n܉VZ8l@ZK HnuZHĞʔ\~?oj}BZnj-:AΝfUu=˜ۘ=1 :J wp]̧+e P182Y1MZETtzEG@AS=HOXr_h>Xgs"ދkxK[ok >ڮgt܅ൠU:৪#" . j*,J4MNN58LnDpKaTxDwבނiNnI:<5![juWm,L7vShtkޥ`Vxޤ7yiD+W'Y[nd +h˕` X׈^yt04OV{Qؖ$wyʩpyob fjH~]j[*ֽFk&rș;M&]}~Idج}F)ƁK;{ , D#)2xm ;-ظQƍܯjd$c<2MbЁ>¹zߞY*nK5\I_ ]ؒ[yíaӘvW4x/n[S: ݪ*gD\E~hjFSD)VԤ]n$uQIg6|œ{-n(m;fkivh=q*Բwuu[KZh`HXlsHrWk9euݔOmEy(cWM=1qy"[i@ڡK,F4-Egvs!RTSwMWu6OP,{%-T|ܴǺ/2,GwnGZ |"S@!:>I,9Ϳ{rK%4oIQ?~\XwZm!F9};Ч'bD<>ä5e;2s]AXBw34fkAtܮ4OַID_L[mha2{!u{qW BUqЭ?T:v:&uM J˝Y^"Kn_ m.#-&Ż#eZR|rU)ʒ"kZ৐e v  |V#xָ;>y\̧zMr_vO)L$̒[kSTwMƒsE 7e肴,/"orws:K`⌄C78 fwq0%!"2JܹTa杗:O`g&W"nX)6T[?t/\SMį]3&1LU{Hn)śp{IvFܩ X ø+cRJ{4-E͙s,mpx/mdm~rzp$ ^FLͬ/l7KSsυztNĽ ϣ/䆧4"t l]<<jØ@*饨xa;~]K_u3]6; 1>U糔Յn I bLIlaK=[rZ0Xg}wP]£^I1QZӓF򰱼u{J6L|iq^̢DSLW*  "p,P6j &W"U1jm]Ru?|^ YM:qsL"LS+Œn|-.xsx{w`6jUPG1`+Zs6)z9#۽r)9w)3[g*YLo]8cOs~s/큰kdriyͩvEn[u\cWA}LZ]ޙwB4$!ILr1$r"(~^!$& E}^jp4[>t}&81o^;0)~U9Q-nINWÉ,n_6Unse^U`m/Bnjw~}I+ǹ.;l䩂ßX{H{vקa|gPt *MWB%[l~~Ay_Ԉlr)o|̴{kNK]BDY N½ֶ `2>ιkgtk|! odt iNTw[tףػ3}"uxp*?v)ph&6ZyN;m}1.51q}18\,I/vo`#2?;`\\`PU*0Y3-Է 2:Y:ˊlF1t %!nYAT? ^E^e$"^c}RaS<\M<`M19!a($fp*6}aar)*ZB8,cKb E6꾙ű[/ M3  Xٴj?.rIŮG UN!CFHJhI}Ə'DÛJ _7J t!2Ј˸wGrM/jo3Z"hlQ_rR?ش.~^Xp&s>KxnLGiX[>o[qPZ[ gZna}BE T5Z[bm,>^m_۫vyAj8ׯH[ӴvGݝ2[6wx E 7#%yCOF-XTo{ˣr8yynE2/55dhؠE^VVVO"6 %M,51 G"C&d)τcA83]7Ja!ׯ 'zdԶ[8Loxb:{9Y:GIIۘ<8OSs>d8ʮO-1Jbiv>ȷLؽ`M NjV،y 3Bdk>`+cv흩Q,|  ?j˜eh?4-˱sf,9߽C'n99FBk)"ևӀFv|T{QDMUttxZhV;wdB6bOr)J|rq  S/Lɩmm* 8&xX# c7foSO8-یyGD=|IqrPuVOEzQ1Z}r%7cu3+߃> endobj 221 0 obj << /Length1 1431 /Length2 6258 /Length3 0 /Length 7221 /Filter /FlateDecode >> stream xڍwT}?!1i6SZDb#MV.%DIABBExg>s}o\*; 8F$k PT!2aܠI̡(4 U>y@2 I  J@0@ITH# IKK (CQ0c؊A1>H# eh!IW8h( `v&D0uL/0 *`( ywm=! Ap !п @H0w8ܠC =!7F;tx':j P6CCP0$-(3 ww(&ٟ `Gp]/ߒ# " $EP,bC"G, h!C= 4? HA  C`pgǪeQ0oK?'k,p7:2 ~"Aq Hb_'7_;`؟#6Y' 5x /% XBC<}8W?4v`w,`ˡ]-7Z{Vm $p',AbB@zZ u@i`k;4Ńˆ=+rAcgFck?e(vه:p"0 !R+@uz<@X`CXGA@/oKa/e P(lo=zC!3lK]hI2n]bbLJInά3^KI}z#AvM'v髣k~,-8O,TdP}8wXc(IL(M[!a]SG"m1~t]CVcGdqu&yUS. S |3C.;Ȣ&FTm>_xG~N&ҎC%޴:=絽[<)ݒv)ϾTyZ TAF\^;^B1ڼ'j#NDdVoCy/+>4rt m&jM.w;1-w'lBJ*ùTt^:-.(',p#?_NYxurV]Hfmʑހ;$ҷ]{X =vWthP[Gjo![nNA`7QRسߋ,)ٝ]N}d 3W tܕ#ƢMӭ|~tmkT+aoS (ix l%=P^>h͏ᝨer\>XH駜Q'fVWWۛTX̋ 5Ypa]k~ B@&s:zWNh)~#MLr*ĩaȾ5G߮9!K/ː]7%[]I'R gFBnKmi|ږM|knjUOKL 5Kdf/E>~Z `kwL6&fBMC@=?zF٢NdQ;y0^̊TK`t096 +rMj| ?;W|Cӭ Y"q3O|Ӳooݍ%wM,y)=%AqgawSljێMr\tOp-rsZSfJ ӻ2͟f{LD /Ә7}1HKA_wdw7\ա㯍K 4k _&VdH#ز{$Qm,/|ο-l- i .;tSoքKOMA7tQru_l0'\PQTxwL'MMdVM jtpo sYVjT$F^ʲ*BqTB6lII~a/ciy=|S4sICși6. 7'*Ð<(g9:k3Iآ9N0aAA! vE!0ʑ.Tf\ K-ݙZ,hwD{=HsH;n@-$ښЍ͍ItG\U"/ݾ*x%-ݖeWӏI& hMC3#۞O=F~ƖKqKo+ٚXiR2_xѳ:O5Ff졪H7J'=8-n +a q(/mUaDT㎆pW\/?m@\+gi~gyV##.t ꓮuAuu%t6<H4K9^Gj /}{fW?a9ш0QQkv@uokAw*SH1\HXWv`L[  ºxn%= XI|Hjii q٧&WAxkr]Tg"O#/^-|N#)!? +8w~16:6߂#<>5/WUϪ y ޻ȖC˂2:Jhd5?*zh` 0*JXȫRNGmfftzw T6L`S 7G__.EOڶf ބ^ޭf襡KYdYۇFi:ڜMmi=<܍=6it)ҞKMzw(+O+O-SZ9V C'ٴ闱5Z[ `-B6('B] rAQTsqq ]ߠoMb0s*ni )Q ςK$bv]Y'KAffVMeoR9 ѭw>k#' G{nՖ7^-R "R#D8倷ڛ.覇}z1_r7Dx fs`qގ=Etą|<B-[=īh|xc3T%e^%\F,IC+w~Xdvry޺P͔ d;*7K+aM^y][a$R'Jho+pb{1_]W5hM;ޑ pwCjЎ) EA\AZ#KA/շ#wcT<{/heOf^ܟkzsc(3i @Tv:qJu&aV #d+aar;%ό{* Jڣʱ)Z|Ym|c}9/ C,]M_(u.C^DIthTwT(YbK]U 6M6Ɛ}屙lzX2BZus׏") ?z{,ŔVfo%x ,POTnKYF՗j)T@7g,OVx$4"gK{/m;sуnQMFwjDvR&z5f#0TqV3'ޠ(MGV*+ϮCK*8Ōae։ qrLHU؋:E:-%Ν[P⢹mA (0@\xjX "{&~%R\TQю;e&R8!&A;ⷞ%S?*Jk \S#-%{ᓽ}4>kvĆ͝Dq@_?(aM էNe(NU90pf5K$ :(oC+d7o[ ;k^3VFIp@kM%qްhgGZTRN#?9\^3pz'DHдUexwe˄;˽/B"KQӤڏοd,0V&/ϼ"I'J-űmw?=YJ$2[Y`v+WYYFn&/uL yѯkxϑjsZ"h2([R҉yvd]jzϖfOEдMK No L!"?ޣV%TmTU Vb6khP cvi{9n<" ]P\`=gŲq$(;M\ ڛTvwMuO7tP9EH8 {O#E;qv>Z=!hõ+@+U&I!,%GneJp#YXx^RjЙMݭ!K1"e:r!d==ڇ[Qe:v^5]LJ&u.MܦŸ?ą4l)޲\"O?죻p!+gy.G`%I*SaTE){rv@Q[0 vG@L~ކT IJ&g:dWZ iR=xv/Kne2Ns)禶ъO N>Ms|y; ~\D 9ͨpP45'j>C$?j)3]DcWi^Tv=00܏~!(kTVQz#aB04c7Y!dӮ[#'05Zx]YV|mRrx\nmśL@03[ڀ֯Ƀ귂0K<zYiN1O]Fk)A;D,ppY؟({-"=~`L!)RXcu@E]2YFfYzhC.x%K %~A)>UWA**ܜ+f3pɒJM{*K]-|#ϥF$_rK}%~EysB+u>:yL,d<Htkޭix3o©?ac.X3WJ!2X2ޡRawe'Z S&vqIz@MKȐHL]x .e7w''w[ *t5imoO#|K-B d-:u;~L{}z0t~$K斱L:=+nsP%&W:@FI_N[Kfk\c糈栌Mh ށ@ $Oz^w,2r 3,<$kYNf8|?DvFnq_4.Q(=#/<("ܱ-$ढ़ѝGvߟ 4m :KgH) Y }DTd%S|c_Nt95v]…]t(*[P[x4t7q(9$ubgt4LfSvĉKΈQ왈״Ґ֍+ss5W[oɔPqтV/8lY^9PDLwE%y>!ɪHu{桇|'M_R7+)@g&o^2V1R=rhӳV9D||] fI9-r> 9 .ژ!T3tڵ$wdg-[4#.={_&B{߉9L” x`(=yMU&pe6XO"?YA< Vj!\*T=wM)~G8XQ%歺Ҩ B~-Ml=-#g~*w[mdR:׫+y g4^EkLm\;y>*cF*Wx?}Oa39ڍ ɮ]αKi̡ٕO.8fp0h8mOU-y"l/%9q[1YfAܪVjּO>7 yQZŧ͂ћ⃧ERy$!ߝbg^Nfjk?#_g&> c.lo-~I-1Z'Ø|Yt6`o}pÚx!p&P੒^>z 8 ܰ`S\[/.ah0|}{sofܭ£S'5dDf۽M_Jb.X/YR#DzcM-<:LdEQ IO?=8U 1ñȞ]r6ȱRѮOLKII !# endstream endobj 222 0 obj << /Type /FontDescriptor /FontName /QSCWUE+CMMI10 /Flags 4 /FontBBox [-32 -250 1048 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -14 /StemV 72 /XHeight 431 /CharSet (/f/n) /FontFile 221 0 R >> endobj 223 0 obj << /Length1 2560 /Length2 21974 /Length3 0 /Length 23426 /Filter /FlateDecode >> stream xڌTUk .nhViI IFA$rnq` ם3'bN@i'G7fv6~:;ZfGD tq99a 4s$vJNyw{;' ?C'~wr"QK89{ma2s,Jfn6@pD 3{ :A77g~VVOOO3W'kaz&'tx- (9ir[di +h)T+m7vErh *Ҋ,n^nL3G_fN`339bj3pjrvseq* RN@G7W_I\{=Y;G'OGWάZ7@9L"2k|zYذvd%W Y|]<7w"$vv% `9"fVc]@^6~d^/K'G{͗UFRF]NՉ;y|l_K ~/Ϳ _IU@$_?GN]~!77!iw{tf { >JNMue%%jC6\A^@KU;)A@U'WЯ сBq/|Ry#GF_v zVG'7 \?DybD#o `^X%#>Կ *77FV߈ *sQ(F\~#p.ʿ8kp.8okF:83:\Vr-WWN_ &p._-("scW'p'~C0ƿ!7/;&/o/s'w? `߹pmlt,#>(? xv@p:Q[\dNQq9_.? 3RscXZ_ nw'7}9Wk44'Ł\n/_3& nǚNt;n; wpzo h0d!j[rW%Fɼ3&4MBD_9xF,i }yKZt~&q;H}Gb_{I5EwiA7ASgqu#din%csVaP uyw| 87fsW37ӘY/dqHќ1}V49\;I1G&i||,{5 e2}ZfFgHG:6tW{,og'BiM\(Tp*M"ܪ9$mV+-7ڝVfPl;}־Yc}`VNH';A:'Q6:ӢGGX0Alla!GO~ם+`{b(:?'2.']3v&DlѸ)VH\>\;od;~^U,`~Mȴ} mp5Yž +2ЃZu8ȓ5%_JA M$DR6Lø*' FLjDN=PCKS*<cyB MU% BO[ M//Gj$ ﳲ߉.#YФ=)c=h|| rR㾮5Z^Ÿ FV۫k̐7%7P1vM9o+J'G ?!y3U$9.A81Y*8dOc pPmY[R G߽4j!\4]۳}[ 0I>t|qO>)0e:@zߢ@gˆQ-r ڈ;E=.f%U=|0F0œxza܁+ktHwㄑ3C%emo{-'#t /NVV}XI[L~ܖI7moݒՐI|m?z8B ʐ&6Ү.4+#n1͈iAul><jϹ~4\ؿE!SQGk: ?CxSШSm83Gm;O.v"08Cfr_)f" nS#&hjHw`IpUфr 4@fTwN:Jtp. EKszK~P$h쳟֫wjsU}s*S΄ƜmTM3NӷP_{/S\$\&#Y[f~Kb=M-~/{ݦֳDWaT : n{~3+\澿,aGOHfX!u։|)ϖ1x7ufc=~ѺH|.4g- hkNVtcxȓ]:Qm` &VdȂ#>on.^:JwntŸXfףG6ϑֹ«?wcܵ*泡"y i$zto:o<$p#]  -L XȽ,keux SD?6zђ^z 憁r\ ~YI7q>"=|>xPMb3]mOzM(H7!y0rt/-܊E%ru~6Tq>XZ]=[z{?_,;!MD`ʎpf?צ/fzO45;,@0@7j$=6#%B](aU ̋ z{S 5&͑^D22i3Rq 3$@O3Sai.ӕAo}Ɔ 8OjC_ͭZVC3([|&/GͶc>JgO vc>x4M@=0@ X߼pru}"6>wf9FT9E-mA|1}_eLo_x)|%ߩ r=)_ݻӽ+< 2kPW(}pcA~IcQxv fjAl_tC{S3"urGF8~=tqڛiTJ^|lt4XfvӭL4 !4@*bߡ:@Ұ'U}Ei"6Cs\1LcdM>Ux(G3jPQU\0YVgQ}=4S^΄:2Z,PqaZ܅Y&ޞ 2n [`}ͺ,\P+UdMWM(zc If0GO'&ʍR8Wz:sΖ)Cyg nX<&^!Z~uCeD_i͢!-?j^ ;]gH;pƩc}[B~صڗ!z^ ~*I_qn1fҖr ~-NMH 2[~jvKv>~ay=k5" J;uqΞk s|lOxlx?ܰ[-d_؞sNEd3G$EmxǏRBk W:uaD,o׫O5݅t~.ɤz_eeؼXn  WvOfLRޭS X哀) $f[$ū \ A s+:;b%2!==x_'F8'dUy;*IOuk170!~pP 5n݅1 :9 \,t %=ɜ\F|}y4.TMNp4-jjE*NO:*<%,}儢{sŌ ++%ݖGfÚYaw5u:Q rG(vclHdoebJHRa?MIt\m[:J{CJ4r9n n3JР"fA/nk!\̑6H+?l̊G~oN'I"==?>2yjz.(RsKԶ1^-JN; XGTC WֺBOUX}{z@>C +:O Ѩ%4k6Q\Gnleȷ,ۛqqsh&c>Jp$:C9 I " -H~"tԴ8#Cbۛ~E.KpG_yJMPز&.CR*W ONj ,=copjAEnyHYzٞyǣ g4[Z{hfꀭ\N&1an"[Ay< 9/;)4_S>m+» xV|qt/]` Olw7>9tX?$?2v HU }NGO$3V2veڱ%%]Iqq PJ>8CnPƿVĻ~f:SC?f[_IT%Ju̬ 5l1E؈>F @qN~5 .V{'^|L(}9RЃ9' ;AN~j'oO~)x噓;2Kg؍ߚ86d+LBy@Q2@Sztw579zUoJh $xOFqu*oEu4~dNNW.z$ =&g:LWˣ0}MZyqU QRGBt!Z.&WEBs rȎDX) lT6g\BᰟQs nۓ+ĘiU=hC;eVhQI+`ž${*X|aE' P#՞3ȧ<=DŽMCU5k-qfXJm4TX 7saÒº*ELxҵk@;<SPFJ:-oz/PmblP$P O?NqCMxe G֩l&ѝ㽝;:ȿjH`4Sį:<[\WQN-ꁬk4P "e_3nwVvT,%K5_"ˏQ|.!JαGP}(4TqmSTSfޣ\GzX/$?))Yev![R"eSlA6?BI\xs 6.h{4ZV"d 4}Fp1d;b~|2K:;v*I*FZNwʏj~έkbxhoKdjų Â\r^Q. s3[+d>gtM=ߖJ4?65_kljSq!<}=J]=)(PGO1r}Y%L֛ yOsM5Ƃ"jBEh6/ L0ѥzǮL$.<-,R;L._ֳKޜ]ʱ0MoIpV0kD:*sv>"5l"B*"1Pp,S Um[dRcF(9;䳲>kf|xvYFz4l*e=Jhz„2)MKzjQREcӷIC-/˽kWϕ?H؋ԏܕċa ䷊8LX-%E^p|{:PZ]8uImD%=mH/}9^#2[&|&Y;?X 'q Pcu'(FwB8P{wDvSR$a3%3MM @0IbĉM}YAB\8eHJ6K!jc( bXnI>ĺaɃFz0㉓d١Niiu?$[gym"ylV{J'՝7GYZ"7S;9yFx%BEkA4ɐ|=ۓ؆?I5FJ!'Y^KCΩja:]L8t*-L[C.eaJߜl=W|1Hr/;hY)~ ydY3;RD\^1q$9ZÈbQk8ʑ:({9kАT75~Aq*muV484y(l/G T\z1=^ul& l׆<\xJ_x*#K Lcl`:[!KJ^RyR?:f$`1͉̗i,Me_19KƔW ~8xRv|JWVZjOb@Hr#JaU<61zx//v YPHiU &9Mģ5%L4/DՆzوc.,.|0i-JKnhIϱFYzM ԔÚK8,{e҅Ϙ}Yf/3#M*Zά%aҾdsX!r_Kǎ14g4f贈%)d8=LROo`JҔO^͇P2l@l i5t0I= AN)Dޞ,D~Vb EYنn)-F#81ꞎjtP٩~$?S!#*q0@Qu5h.J-YM-?"jHaC-Q?PHp!W@G.-v&kle+trZ Ц !gEOi5*\ J)tԟ[ƫ1:|ym$)L-z\ѪTO>h'aìyӖHU8{Jy F%!tgkaѵ:~q}z"%OμFwp?G5f{6Ks cTpaeV^F3+MɞZxT9(RY=YF0NDJ␪!BBM5eDPu_!au)Zq?汕t >f;WsET}E)@ܜ }Jx>ƈ Y#.d3۟FQo_qDs8|l?kh vMrWe[b&̓k͕མdx@D|@uZڪ<} _1auXQ4J$[9ä~F%tp:AxˬWsL#4s%X6(Z3y<BA/ `^(&#KnCWzQay'8x|>D:^ϙ"pgΎ)ʖJb+Yfo=K#(+RgǘP?/qXbħO޸Uc~gZ 1%Q1 h>a ^Lk$e᎐|eGߐWK bG)I !ymނ^0L#2+!Qڌ}1fTE,5y|&1BW[A|v0}G㟏b xabZ_; $y]EU[ʊC?4#Q{Ղ9u64L"_p1e58>>=~ ~1Lbu&3HաjYJN29sVԺ"u;oC30ߟ0D+)x*X('Qvށ yԎL*ry ;R<[9zb\.^&~j#<3$؍X0ٶFke Yh>Q3V=?#h߷SW]/gW$ G$X?Lh~m")M b[,JY환G< D?*m׉A#%n>ףu!$vo:2焦!Kzx;KGu+R k5R1G"5Aw#Edv+N7:LX,XkKyy6'77&lC>}˩bcDv>π`0h^S 4INur;oR`S7r<772#55Dٍrn1;Csl1\_:ZڇKîb.axדWFd. BxrL6׾і/R?P5>Ы$'s.'.Ztq 'EhȗJ p2N;Ok,1$&F7Nr4ȥ+|aYyeC.?ƺṿ/ _1^.p\k!5`/<jbU7e󊩮05lT)|2x$۰Y Oغ.S-->Vc -]q"ęYm\촇n k`BQ!o\/;[/`S|GNx^txiY߆}kJ?2ĞzOZMWPcw-2ڢ::t`>k"Ш0ς ]6K;W=:*QTQvmy'{SC8`F޴j>Tk0,T5iK3& GJ`}sz[@0īU୑@=qd&ˋ[),˴ :gH։F7_'Teqx4zDӕĢ=`pl(Dy]}M?1DtR8sVJ,&rFk\M*~r!:&]4RΨѧLTh*xmB HWA4? Gp;,n[^wog01JF8}f 棼YśybFivD>8{:|Mu{ Mw-ʎa!Ge'^?S<RO=v*dKeX(B܄!"`C:e:= /}08r4ߋNf}Όó՟2l:Хɽ`@R8?,Ĭz*y)(f1Ȭ05ӂ]n\٨+BѬxY.>q@iFIG2+ݚ5nSr;K}u;v657e5NQB4D(0\CG %ng,?!.9$U\qBYLcM>bĺ,2Ox>?ȞacwErkMDHʠ\iw̻iҁq!cܫ*̉ uFmi1H9yp $+.V /C$fv DAj'971ab!IY)$Ĥt:dliqۿo/)ζKhu)D(H4pW_.Q]dE!}޷ijES6]O[W4!?s]icƧmqt_US'/8ݘC2[^SC;qƐ_͂?럃T0~bGmD%5S %,ޭ @h,_՟sJƸ=&/|22VEMG19țD9ta4'X(ժbg5\TY:20^0HWFNZ9'hLqF.F\o{@նZj_)-.m@Si`A}`CdLXn[ }b7tI7~.G㱑l~}YC:}|D.ȚpR1B|W><-GS0ԁj2\gF:VՇrjv Yme$wh>.riBTFhCg^\meϳ1dаF-\QR=LUlzLښ d:v9%賥](I;'ęY gk? 7 E}Q섞7#!lЮ-P6^|Ҳ@6ZyRlhbߙ\ (l$z|?sQYtІ$fp!}Fu9iǙұvʪ&wPdskQ5e(٤|pAԍc"C1)Tzn&R-%ߕ/["T_I!TDǏgDY=a &@!_IXbKnK6 Sd Բ j`lP؈]]4p/9Y53j4qZ{i|3نu}>h^lݬ&op)<#+>Û+4\霍@ `3I28]V ShhbFMZ!A[W[Q#ҰLVįlu~Ө~ObNuEA]k L =,/0GkEЏyEH#E 3K#Gh^ * ȥ8l^؀J048 cw$@JD(ypb;l샽up cxA ca;pk˙D9I:e&finZyຠ)I㡟9qaλlyh]EuKeq#ݐɗȑ#JE,W@7syEG8+\P;("40NLܲH/ FLbN^ ~i)˩wgM._R/►'&*P-=%5Rǔ^+ږc__E[}/բ󎒍|Q%Rl f`-v0F/Ц[2joLmArae"7'J^“۠MjH|/d .$#.,I PMvQGzkQJ[mB-keU֣q̗i4y^ kds+ަb4.5z/IZ0UTҘ[)(oS#R gثUX?4_v [ylgkCW6| 1NJc ;|/6/65z*7 oou׌JdLvOo@ G-hH. ? G֓QmZhR1N? Nsofd8s %Od1R}riˤFe2XY-;i$iFv7|i r+B`^7wduMHNyAr˒1EUe_.V\{9qi!6DNa?5;]T+k~pYǒnAMǞ3P^N%.r~?#n!fɫ pc&OBAOI'r%=bn(.ٖVwOK kNDԳ)Zd&[?W``V/.'$Y4(Rc~ٸa Xz7u .K<3Ϣ4 IL;P/$u;Ǝ8;zoȖqeW AKQ16.EB$̶ŭwk!=ܣ:/w0#yq1uۭpEVًoݽ]uS'Vh.nHC*ѧ$ ڤI>URZD=-0فB`w<}yu鬰6%yjͨ^ 'LpQ/vE1U/ PF_)<6s]H)J3 <DҎ`b j[;6`40ɷyؤ7H,J et'A!Tb@>1R5;ZT@&J{ME=P;JcKlv,|{q0YO]cq!LC{ຕW'O\҇kycϞmrAS!gd\Z}>jf$0 uFQrg r>z`#Y1\|1]_]{{%wᤌ]<@S@Z:} QGY sj,;sT(\(I.jPN.abNv$}U˛lUQ*65]w E"tgxXְQ6FdyCL]r8f&GvX?&[vV;RWǺ\t6r6ϸ.=AT5,ė&xz(&6"RCc]'ٿ(BBLۏڣ(q6$cJwP)Q-q7Ct bB |~wb'OVCOxڻ d3l\A}p'b¹ޠW bRW}|7fX EOu5Hر~Ha;nQ@ЧɘhS:*KeY,:$ uy^MqT9Yu=ZFHzB2oQ /Pr[ktB}B]rr=RTt V05#"֕pᑾ6bZ!AqC%]\ZHEo*Ss5ɩUm$hΔ*4agN5v\{>?f:ɀ~t4dfÍB Y‰F껧/Ҧ?eej=sb,qylcpXm BsM/\Hv%3hOe`ʼs~ygΈ>Wl [Mz h%:3>f DlP[ 'سW4HWZ΢/W9odh oYb!=FLVz!K^ZjD$rU7|n;t):ta&< vWKUŏ?$sk`y|#5H܃$6<~\t^ɫ:˨ysT_⧭/JFnnL_y/<;AY-/c58,VC+6(fIL* C "Znf7uwEhv&lfy(bUt#*es|F3S h`V[{ |­uƩ9xJda y&D*f{' ڭb uU.{5+3^~e.P<;p#8dZZ:jH(h!]gy;vXrN 4_V~~DGqj,3sPӥԣ`P|ć1e |rb=׻*">a1VEEDӹvE,^T$]֤I ğ4P/aaνui%sӃA* x#WXNoMYب*$A]W{=cPEw<buY!893*-.n6s1vuF%`ln55aY }ZǓ)5 ҙX~{eX|.uo1ėUB,?NYf'ؙ-%MT33̺U)>rk8U[ȤZLzv\Ֆ3ad23ۘ 2B'Uq-/ش(H` m76ք߳y ډ7%vkA(RzM]9՗3#¾4z=M_FϿpƱ#oc(J#7񡩔ޓ{wW'UF^h3᧏8!g[Cn0FUĒ[JY݂:.YۀN4IIn>,ҿ*f~ゥ?XlxЕuqeVVmn bž@3-e ׀mmLVA 17UӁ\]T!0*<4`<&Sqk\]-V*-pq\Rrƅv.֭ȳbzOmFP*m@;PCsAh=rjՄސy:SOfmtv2Ān*^r߆Ѥ(5d*W*ti-"bb[]h j(d0a12kCLk {7^nˏUEo`3!J7Aܘ?d wY%gkw!|U?@-JKM/! ;b6$<>ԋ2s5gQX_:r tXy{ٌ">FɠHk_/Ɍu_T5A^!)S)nduG#]`jE=CN]!T^A> ,l@\ >uoVcϞ:1zs!cViSSӖ~C0f` j@NcK?f>Ln_v˴',4" sv` J.;h|i2&bH:(_8 K:{*9M'Ƹ[Gs滌ئa5PJoM7-N KQr*uZV IB@Z`v}߭1ѕL{BW Sww=}|A&)_r { df;-O9efMȩ e Q4ȡZ,r/‚IMWpPHql5֯b<ŧ"_?cir$䯬jsՋ@'ߐPAYT b֎F3K~3w(_̰uDޒݛ}m†0;s˳xƄ<7.4@1Wff v$Kp`7KX:kh ٽ٘B?%d) Yg-^30k| $̏iCs|20][KKZrX> f{cR%vaѾAxmLho9%h N[ j <;+ UJ!ʷݰ&v^TʑZ߬AV9U1;s_s<Nbz﹕b)=ګ4loLqSIkS€lEYpUBћ3ឈpk8+.PWi\ M^rk P[ GB}aw8Tf諣"BU!}n+)O]Pg~^řm1 KT&,%$)tOu9ऐΕ_lx?t6=TPz֡|퇂Gʲ[(w|]L7=B endstream endobj 224 0 obj << /Type /FontDescriptor /FontName /GDGRIS+CMR10 /Flags 4 /FontBBox [-40 -250 1009 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/R/S/T/W/X/a/b/bracketleft/bracketright/c/colon/comma/d/e/eight/endash/f/ff/ffi/fi/five/fl/four/g/h/hyphen/i/j/k/l/m/n/nine/o/one/p/parenleft/parenright/period/q/quotedblright/quoteright/r/s/semicolon/seven/six/slash/t/three/two/u/v/w/x/y/z/zero) /FontFile 223 0 R >> endobj 225 0 obj << /Length1 1379 /Length2 5945 /Length3 0 /Length 6881 /Filter /FlateDecode >> stream xڍWT컧S@QaF0 ƀnAB@B 4P@Ns=;g{ߧ{s06VqB:40X$P30@" hGR-a(o8!j(C83$Rr`i9 eD!p'@ySՐXee~T<`(8@Ю0\F(`ahB)ўr~~~"o$E_GLa0/ . L0w{!6C: ('pCao rtF0l ,;ܟ޿!P(.g; `/Ơ/C7!8߅C*&ߟ輡('[ 0&k Ԑ0ڛW}p :VXH?Dgg8'OQ NDH@ iY @]E7z~+ĸ<gXh,(+}Np(s#(Ü&c6 Я';w?濇+jc/*UU$ ,I`8@ww6?uHp s]` I_Qg=>|C cXm40'juf \n"[9P? p1Av {JqV)5Pӯ@P(7xM- Qs(__BPe=x\ֿ73H|ȶZ~˃ce3W>Ԥi5የ*i}};<`~#?MG_RL3vm<ws@07]` q!ݱ[-w'MVj(G,mJǁ9̜$hd04GǮ ]& Rm%X/%LWywpX3$eCcfQBzVR9E7Go!t=QX NJ#ƻ+# Jhy-xey}7FfiW ? )mZqX{-8}}e$~ dF*v'H>u2Ś샖ThzJZku;-FnZjZGYI2.OLH]] 4K/h&z$^d.{GX1{hW\5w~oͽvW59,=EkM4Dnǭۧa=[]<W*~eqy>/2{6Sr_6GJf )zu3` V"af~qnmYLgIBѫi{k}:}́k a$yy!!y^i1$xm4\zBSJ2 27ْ[Һ1лL FVne twS m+`'*& NL3>oh9+ )Min kfKD]ͧUczOG 0 ~eÇ(Њ/+Cr`) Ɏan]d|k ֙ΛGZN(V[g~Ay6ukFɎ j䬴C-ԥJD8yo0ί*Sbb"cQק~r{+MUYُ\k7.Α~L,d{!>܅*ak#e_΅ęk<2,#S; i1x}#&$by6W?>q ؠ#mVCڜ?VWl[D*#iXy;o Uzo#F}v{!IrFB -e: 6y$J!IxQaQAZީ0ѽ9AҗM#lsͭ3/ނKX,kilߞRTqu$Bs=I5PQ<4~ 6pqXy{-FM+~^T[bPRڐT]~E0qgb*Oa')7ɤ3z_C< LZw`VaFzmquzms8?+/RmS)-{nܩhSQT gSܙ .',uķlEOl}%ì(_x`sJPvKt>QI/OIq$$> ۾W5-*2m^Xo粎ꁪH,.]K2vS~7}jS >ן⥨ cJo4UG|Ч6 W\u;W4$ϖY^-A]ݑqɃU]u2ߨ2XQAwbd~э?y`ձàZ)[9|?CWKw-{-­̦Fv䩦݃8l:5'2&RaQ`NbUjxY @O?dHiƶޠWM:!$ՐJ)|rW#UZ}Bvuy#i!D=QwntHvu\Z3- /d AmrJǒ7~0͹>ʷ%-x b6/#=Q?XLNiavD^ V-4,2f?Ӿ;@ʥ8,s]ڒuxRoOm®-]R 0@XԡBf-7N!lcx\T𓗸 };toUP~*[<G. = )L)< ihˮߪ ݍ>$X"ՒȾP!NF[g7될[fbk׊_ċ#tJ]nXJEBzT^&tVQB ssX %=N$*(sPa[e)}lIAt/>%i,| /1ӱ)61фpL%g{3c^شbxOTҍ\weϙu*73|2h/4(FWnw8f|82;xckd|5}Y< ws K,fsTzUy^y:"5^4}ysvȌN8#92^ I`GwN%.iN7S֘Mm*2)6{;om?DwUEڡM fE6ff~B2#m }nb:m޳wuj$.㒉ğvM *GgŔggcP 4>$|Z! %V#}F'R2*;+K't<[B^cѥAXW]{!;]6_|":'%&_6XNOÚd1nzn׀cXKivWܸTloh'97G g'/dڏ)|ƅXӍ 4 ',rJ`m+|j}Tj_{ C}l)M*>"ٟc;V4T2 :LvZG E廒>&z+$c7SQP+p}w'4} S4\%=I%S| _j@{pЋI.rQ+p_ݼ!5{"` r v{BRL>J$b.G١>5^}l gc.}Cj69=Ssi* KT_@OJ1TlT!BkG(qcgws6#ԷK/\Xcއ)|ZliՎ r5(VTT!+sܸszv<pYiRг|P":eu?ʿ?L Y^IubKYvv1[s: m R:tLdNqMsr5zSM!Zw_!^ø\}jgu)MSzn[sMD<%ף.9WCԜ9HD*a{VTMQ#C韃* FYJM m^*Pj}}y;WۻU֞&Мj rt;_U,'J4$U>|:LjxZT C X-?zc@h^M;"p7N*)!A7`[ѢT*v>9}]aE^l$ T͋))) qYg3 #M9 0杦@[33s!V #P[/-LҞuU\Ajiq_!`zTbjpB\/at80n>BAyID A˗|1&&h.II]HB^BKrXșMLhg0/L|X1nam0.XSVz5* uG+[w{fo? endstream endobj 226 0 obj << /Type /FontDescriptor /FontName /WIRDCL+CMR6 /Flags 4 /FontBBox [-20 -250 1193 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 83 /XHeight 431 /CharSet (/one) /FontFile 225 0 R >> endobj 227 0 obj << /Length1 1379 /Length2 5943 /Length3 0 /Length 6879 /Filter /FlateDecode >> stream xڍTTݛAJ鐔sf`f.i锖nIQw97y>ea瑵[0_ ' `a1?,F`I7< Bm :LA@APD(*+(!M^F]{_K (..; F@l@0&vFwApP( >>^3 z`$ 9%`8@v( @0 Npقto@ #XnW.gBd v(Dq@0_ ( P5:A%Y]OtHEB*dE< C! ~O۠o݋X`pk;[7>C gD`WƁWq/oo3~>.pbF A` @-C`TGvѓG@<fh~,ܲà^.6oA0?/E/]oamA<?Uavpw ?9\8G `6M)U?hQrB{ zG V& >!bM-?(Z0{ߗA*A<:kP GB~=3 ?ZqB?%H~h)"nKs""@{5GShx~;8<|ꗑ_m~oe`isǪͧtfԗZ$_R˘F5KeTdLHH;ʆ^kʛHirIҲѦ[.;TxtNҨK'3CB<)z_Rۑ\*KQ_1>pޓX%9lE+IR`O<ƴ3=ɺv~0B "'#sW8~o*׌ n2hb(kt/h:qœv$^[@Pl.PU~fb'6X0S`f6a.@tSՓjĹ9嬏=F~I#wʃ[JPTgݶ{; sJg%Wک|{4a.K W-B&ÚqhD~ywy ;HrDr?m[0:vCB /4#2t 7F@Ut.Fu~?}j R CԴMJM cG>9^ '~\o4ƸE_<2[@c1,}Kpf9Mxk^j,]K=zwO@2 *Gօq2.z-M-{v}U@$Nd&`ޮRrQxNKvVm3oqf{̎w4 "~G<5lqnm9zƦߩ桛D=^ lH$Da#IaWvWkx-MX߽/҉# t6&4T9zӨNoɧ&.Kcӵabt?Th~1@=J"gt5ƴ1l%8+J:ҌM 2hlwod566B|Df~:]T/'[!YgnH7ݪsgr|˹l,~{MMwgH[AsRQd򱼢Z9ssSaQb Qs[/|vFqK חz1Fe׾'ä2]cȻ"i1'pKl3gUs7X1Y3ra:vL\=ֶl{cbOՅ>Ox].;gb ю Uc}&]7@hy05o8-D`q3#vMF+䍰B9%+G+&nQZ&fuXl(TS +wc#2ŞU=B yG} J֏%Aξm~t8H 4짾V2y)=~L-) PsŬޥpyӝ?-70#'~c'ֽ I&57*n{#k9JQ,a. 5S(t[l]cVHNkS}傁54,N6sl@~_M,URԏXINWM1;r"Inه;gۻtvӬL' S ,S4QGۙCbj> -l睛NٱBeRufNvrzURY T} H^HK|s5cn 錣 7n!dU&9l9XLb'J KX1X[FnM tlj'#@T1m\u(Zyᙒꍁr }Dt֔oR, /Lиr/M3S;yotlB'Ku} Y'mX'grr 9}j7Ks`$^[$Wiw45=A_N45+zJVlmVaq}ʋh \E³Jx@QMz`{ހ|F\䣶Z nU~I7`v7wwYa8-HQ%$u!NJr[zSI7+.וʃEG˜n}Q,ܮ2qY$J+:E;,26'Fhb@+E i:ꎝ}uRGt.sڼh] B6[~ DDץοVRyRZ \j\߳|rm(k$SL`OQmЎOSOcb/Q$Ld*+oc A o*b9o|x4C<,1P:w*qQPz&'ݿ 49y>22+N?(S+ }Ol-lis6Ww<R?z3k-l^|cv/c 6Y:QE|5wva*2Ux([-%0nl_[˾<ܸr14T~g~dq{>Z}oq"|0ȣEz{w]+PC."n}[CsW[s أW,کyG ~'- ~F`(.78wτh:Դ)}Ę}m'ׇF#-VdT 2ʨBi3+wnE0WT(oU?Lx5Q~:.zӒX|Ǚn ETLv3)A|靕OaTl`=uE18o=l*G=!ԑw)ϴVS>7;‹*lXoFh6;\ 9p"ִ/V_dffG|]}.&uNj{쭹Vyz@P?-G2E Kk }QNfV&2և?| ⤟B[H^upGKjQ7➶wfg)i6y»ƴbXebGj^ JMXd=llmcf<.`b(J{NT2|d*S?hI,+useĵ(m a|j2gwL^S%Sԯ`Հ3A8ulDr_`*B5v+Yq>=z, 4խkd:=at8J vfN}?i\'DݣڲC]3+Q}H j璒 Ф"=;=y,|r-°T ;# z An}aF[[~Z7Aiy# I_`\qJA1֨WLږ["K=] i<=2&?!0#g_ʃl4erGH^Eݏs6S$'+m ^/GW$=zonmoi1mW Zj?|opE3`o>zV#}Mςz?Qcsr8:ڶʓf|JmhYxzuv_''(-;;)I:;;Qǖ1agR;iofgw@/FXɤxPw5׮2yq_:vi+r08,ngaoUlJ ?^3]h\ }ĒP?w7r[=.pW:pzɓPNV^̃}d}l(c KKOf'uZeVP[|ճJ⎠5'4'*;o~!M9bQ2Oʹ U)&߃,-ɉ 'fTF7%GTz+t9X&t"yA\~AGC/2eYt2O-)GE6fPo4x2KS:>-fKf?ziT/ +WmEv)oқZ['P_X T/Jq*P6 +?ǻ]|1,t_)k}PȺfN^.Ji$z.Uoz-VRxM澄K8ekS!e42C5Z(S);qsGom&\%=AqJݨ.:o=3 olh֚;wK)bn.X ^ոso7~s8R}C>8-)u\xì۾U ,7S~j8BeeKX%4>#Ҁ] /{W]giKvͥ wO-| *uPp={Z}*d_zX(7C(xkGfN:U.cPavUiL7'IJ}Q#(9 *uFUSZ(QsEh@TZ啵'_ѭ΀m+.LٟevbY'`mO/(FmBr+D{4$U />Z&bVF(X8-U)ȊQaK ű*Lh\24Hr݆`sfȚYNgYgӶQ; wyXRw*.EGRQ"BWw֩t n7f~ǮNsߩ('( hX)+nSzxz1xW[%Uy >/S3@D .w=oZn-yk>mAAYI/nt:O%rr`k8XTe-%Qe{Cup ވNavnIĶ!Zݫq)z59΂3_,DlHdƩK@g96l+%vWpDV&Ŗ^Pe>!`XRݵ(ӶrS)gݔ,ؼLnvgBZ-ug> endobj 229 0 obj << /Length1 1652 /Length2 10250 /Length3 0 /Length 11323 /Filter /FlateDecode >> stream xڍP[-[MwwwhFw Kp [ Grܙz볶>bs4&PRqqjh W0Qz Y&i}6S8vv^66 !.I3w%@ qJ@\6,:v~~^?1 d9v|>v|psqy~}lsVăyw;zfeȩ5.?RGzvע+|Z~JVk}0ITmC[*:k C%ed %OƇ֣_Ƴabu<^ ‹YXàyB*$(3 Ι'9' DF4ﱜ>[qw UD4Dd83t>i>ekKBy/טX9jю-}u˝_SIq&ו2qRi3ƅqځ;hX٦6<x)^FzL ts{N'Sݾ"y %G]bl\d.zUG:]ʃpR䌋w;Hasq+B_H5> y mu|T@e{F3YK7pK54y||W@xʑ{iI 7E>%OgOBLkv9-?sJFDiu"Izݝ$&D%U»hp<]O}GSݵϙ a9l*>thz/~O*;LJ T_:Tʋtc`D$-^<(Dym}{eOr@UMrf=w*J"YcH@W_2QiM+f>||ߟO(Jţ|Ek־춠Vq+zgz[fPaJ~тe}9+|D] oq%`]}q~1XS[Zd`N=a jWU]K9R:d^켽~|v`h>:"G++ŵ56<|$(mz`ii5/$84JCglxQYuzJ4c祉ih [!ʮuEqt7*؄ qXv;o!;MXm#U֍!إPД¹07¤u)r?)M 4 zŮ}t6a,,{e4[$ʊ7'E $<9k8tj;rMB:"4}!_U`'%߄\Nb? Q}߳Z7^ą羚,v|^hs[D2j+{dqe5MVa0JW(Z6[qt*[/PScX6&~3#=ad@CuJG.?`' "V R[E`cb; iKjX1 KG؜,E\++㓥_q,~'^T+ݔ&+7N ^)4G Q>Ve˛x(nPP{ʁK脯P#yZeħ%#?.<PU mȉW*?(S| ~L#EugYRuֲG-q;=2SQxvoX敋)kl H'VӹccX37ѻ)?g~$Ct7̩b=1gڙYï@=.o%Z3iE)֬/ԡjgw'͡KO&K)-}iobmt캈@@zE_z],nbJ}\8ci?D Q':LiFr *>eg?E\!9H(bH^GG(`|%$Bc慲cp߯KFZqc?l.ƄJס+KpŶj̜~kh4ܘpL}m)6KVB)(?\t߂{ikBRJ.Hzr*!Eq/=]G}X}Y8거\wiFG3qU 7oozr/p/Qh9e84?d"j)oS''2:0\Aޛz'5l [.Twg Q{^/."|AQ)a |prfK>#8$^Ճȓ-{ ]Fʛ[ rSO]=qH XvK 8h;H%dX¶[Od-hz4#,Aunm.io-@X~V5>O$[0DKvx|#n@Rs8wAmm<nfwZuLV= ^jn<`M9l,J|تË⊳޾reۍ$Y=TsEk f T[v.DrF!YJ~DXqS9%i9،/o ؎WY28- L5.#:԰qo B䯜ec%[ n>/pU? 4_<:/03[)19IJp2q\kb%kd4E"%W=of3tP)yCrV\bj$Qui'eמeD?XDq,$ha-NǤwaHK/Ԥ&] 85ˑ%!)czB!,i?5N.#ɹ}"u |=r:^Hڲ3lٕ2uOGEׯ>zFDMVz+.GqQǡN±Kz'|g`x~~ODO"^*4>1niR>343UL, `go1â5oGx7"(!Swz5I4 ~R@#)kO)XTȩRg'TZ7, S V9$UtԈ6d8Z7"gmbX.iq>+ȃ4[k[מoU-jvg(1 v^S&1Uױj ½Q%3XU)byDFU:`rN_Y9Xl !^L/Ι7ahnO9aFF62 Ĝi=)רUd̦1)ť̾J.<4ض7 Ob,,?.^BL χ"r4;0gVA9[Ԏw__m=.zz1(bxZDd~ݱmMJ2 y_E {w›¯04':Hh-AIvr 7+pm3}ո($ASK'?%<0*Yx| ՁjZ%ͺboԅ[B%tZiJDf_8 N3ӹnM.=gwkk=ځ0|Ƅc~;Ʀ4 S4喻@ˌ$RCm^ TIj 톑 0JZ-z[\Sy^9<)\\r[(8$  FfTq:CS$t #S݀\I۞?m{!,.6*Yq{+&h"&ẹ1Q_K8 ۉܲ⾗^,*; TWBhK$zpћFo"YHH@~ȬieTQ"CY.{1]f?O/زygdҒ"$;/#N@)Jk>}4L_'oҌ^WwæЄmǠIj2O}:h}IsJ[;=MBԤFj3GBttG:*C+Nj^y#p)8B=W=>+TiFX~1`>ħߟ!7_f PK&? )8kuCʓI$Ixg2 D8Bx r AtIUh:<ϡ  Xೠ6mb2*>Ä9ѕ}[?Sho L5 If fR'2W%BG  KZ|(BnX_w JBǣB< 0"N='}ƕ?+{S mFEvM:=Hn)%ٍM&q.a5кs+Y-d-JF+96vW(VFPۏgtÎX."/"J8Up6u@cp.}7;<zp|fPu$ ^Q M*M <]Ш۟$/ &"8l ]e3F~p_/4X; ^ Hi.}F!jCtk#|ӯSS'g1L 2Fm}Y㆘4OzwɃ.~2U4~h[]UQ[dޕPJ4 :^M8HQ{fB1Q gx>$p2eu!zX\{sj^2oW>Q wn2yYU{`W&%都?t*#"Ia-vͬdCwx 4/JETޕ,l% R\+!cYd;'^ƩYG6~ss0շw Jf|ݼ#Y_ru0OF{p= 3vk߮hYB#ݘJ1)d4ԩ1aƉ>DY$r{x+4SaK+1(mj/ ]" {=!\k^Cu/䒺2IoƑq+D]1%E\|kчmpESv{j)O\ _/@go>.i}Vq,,I.5 pu|./ؼbK6LH ʘ2鱊" Z²3?wυ6WypQ,Ms[cSs}ޅ`I\٩mokVj {_3Yluha%ZwIV)Sh:ARqcF xm׃Eľ0-a͊?-d(o޲Ʊe<[{x(]'c;| FL1mNO&I;PrUȿ*9i::`⋮ƪHvns}K8h/bDa&. FDOZ՟Ul \;3sj6f*/0{H3G e%1 Iü2]J 0¢;G}2FN") wZ85cR?'ic\VySc:YE:궉Ž)ol o/|+}n!F؃p\r'7LTN<LqlmP+M5sߵ%د2Z4@wX##6]*ڳq3Oz!lkΧc8|A4M[Rý_khra}.M Fy1 1Ha /B%%V P/Y a=Jdƿĸ؅|{\H~(xvʘľ! htρoyԠRk>)ZiE: h'RqUs'r(5OaDTC7K_tza@76&j_].K轒ꜘ ;8K1&\9h2 N$ŸBۑ%GYoRٿ0{Q}GWTp N05L,y;RVU@E{oHXE[:}GOuf^e,b:8 Į3hUj| ;~$qZ\"[vONX%3D*p i5K[yȟ6u ,$rL@5a kVwgQ{;j+T$[4!,$C';-E &U_R¤Eٺƪm C)o CTP zʑgIzD8Ryuk޲N5Rzx endstream endobj 230 0 obj << /Type /FontDescriptor /FontName /VCBUMI+CMR9 /Flags 4 /FontBBox [-39 -250 1036 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet (/M/a/b/colon/e/g/h/i/l/m/n/o/p/period/r/s/t/u/v) /FontFile 229 0 R >> endobj 231 0 obj << /Length1 1757 /Length2 11050 /Length3 0 /Length 12162 /Filter /FlateDecode >> stream xڍP.^$@)ŋ[BRw)];=rϹgޛ$[֞ :9( sbfgaH(+8Y8Phh4@N(4Z@G(b'/ GӳLPbssyyllB&. s" @bH@AVNy>L@G@ ~hfb PNN^Օ e8Z3\ANV5 4 P2ƂBаATC,\Mg- h}vq3:e@?4`u9vw &ff;`Xܜ&v MlgT& 5s;AY Yyf);s  sO4{wwֿkcqY-~0wgմ98e%y#:x@̊w w{Jgޞ{3 7 5qޞV7Bag̜@K?џ@?sAn}cdwy;rpLMQq<ٟWDŽXY N.g #pX~@lV;'U `5XMAV gߒ߬Y9UX rX >e/_0?yXUBj<_97__?c͞{75݀f( 3몀__^2rp]|Bޖ"vU zsQToCfc*@Poa5#|{Up.ޮgignIpڠ6z%:EOp3NMC2SDں#4PD">>N4VrJ6 X2!;bWWi"I{]<$).)(:_:S[jt t&,~Z#feymhEӟ2\`58$kMݦ0K'zX/oM=o 4+i&JUF'G AYgYI` tʾ6Cʯ=u~RFAՑ䒡'(cs¼6  rU1}N4Q P}h{_?8 qeU~mzdԅyPf4quuMVod~`kRk(e)ޕOqWs o-ajd=:/}m-t2G@Ql^rWd1hMUJ ?Jje}Fwa&HR5~TQ"q ./j];z2 ^% X9.{"0p%7p|~2sCfD_&55u*q/A`H G4$.5,8ĞqwK]䍚 Wwtt %P(I[ؠ6mߌ'ti ssf(h%c׾XKB1&;hϛ'KJ/eJLwl#r?IQ$StշoMךsu!'RGfÐ+s09=NBE@{O>Z,4Uxb圸1wwszr3K{ ׶u4FIC'>P<}۩ 7#qȥ51*-r_ۥELkRݩyS$Jl_Q| 1noQrݺ ܔ>QG)0W/SU0r?Cj"KEL_P 3M#gy5߂pVIg53v=ON 0r//j7[SKCK3`C.F[[&٩qh1+2Y80F4NU㞛vޗyIxB p+;jJXMoJO7ixִTkOqֺ mUjVņȻVG'AM$P߅ANm4g[a>j3< ASTMYpz<] vo&Ǵi'|b=mR& &9uKP)`1dGK Q-FT7V"go`W&&wN\Ҭ˙'N<ߗ / =~$) 0 ZJB% 9eX,55y7w*sv4u)0W<1i'MkGS+eQ+.9Te- y$0#6,/tkD%4e]KpRaqD[rٛUb`#"c.']9~Z\H^ 7 _5>LKWBM5cQ3)L nsK 숂^(g,QXeø^bNմܾT[$jOmp^]lnèr5^b NXA*46܅  TCtfQ 78MmQ]7yUBz &2І_?EÁxaJ4VO$oC^%T8kڑ6:>\(h;b^ Jn{%-e1P rգtQu|)ys͙F֍$:P%6AΧxSҒqUر|60Qmw#k[6k]Tz{Ϸ*)-Glͅ8~~Ȣ`_b"p?at>`9UN{WAZ* >.%|=*o]*®1%CnU[v %ݶ9cxv/ \Q$ ?~^='sFCsp' vlE<\sV'9ZWАYq<&P_J32)ȐG)- dǸ]g:Pa GfSř%國88ԅtu`4VrŢX6<9}T8܈K_/;RF_@.!wh(|@+z~[2ɐz};P Lۯ-4Ieq1KPdh'+OEy5wD:%!❽ "Lf(kԪ);6m3mm8|1:#K_4tRڍ#SEe #iGibV"u+^I$,U/{t^D7 P8WWe- Sx~>\Y/U$!MW}>6|||Yx r 2iS#ɂԓW{ b zԞ3wʞ&+kfʫ@cˮQaRo3$ރP8"8DHm$#(lŃtwvAfȷ+l+7VחF)q1 Ey_y|N}uQVA:-㉴[jY8&Bn2jG-DZV9P؈OpCit Fp7Gx02$(c8q{,*{?ƮՙAyX (`pvkx1 Pu|,KM %<6nOKgs[hcCiWvF/C +'c,xn f8yu"_-Yhd)]}8#D)]-3^yp&V SWH.h$b)DF&zmVK$5֦$FRU?=eÌ21%”MZ8郟>"RtzQRGu aB{sz/OQ.#"uǁZ"[Ads&&Xƍv-ASy N+O=T2ܯ?F& )?OY!c-'6utEDb|pݢ[΂#f!m0 9=\=Ayvyl\(-g]MqM'n#Bqw3/49̋ 0" RNAXr\cNxE/VAC¦_ Z_վo.܀O;-^Žb>sK6l9+M6 Qx{4ObRj+mGهY;lNoG4XVxS4qjZ3wy 2eD_D9(0Yq-+ʌd+6WxdEOiX!Qocؾes7M@{vcL~?Ww*ދ,?Gpc?)]VC(a=MTuY/[m<`KW`x-G9|B2_ '4=60zyЕ?_ㅰNJmHGu8,kTF&j{=TܯErU F H Btŧ yyhh~^ö>sVMd ̛i[)ϱ.s =.lʴ( P*!k𚠡 ʄxȴnˍ>stXƸJlf-uF{$̟oƛ(c˰es_}ƢgmMWnQ:ġFJn}`;1/FRL>T#C. ׍paИ}mLiA"}CLlJfqiGt 6b!Fؑ5x#x3dؒvݲURzI9?ʍ#hvUWDjCƧisR#@ӿ􃻨3`II9_l:.j^;)K`)X., (E4k͡ ""GP $rL7R6ez֞eNȩg5·rT{ӄbE3rmI.c,;<1[f6_(n-mߓl3i/xo-P=.~TERߞ`bmLJS[Ez6OJ°, .U(mzq˿ߪ: B^ `s\z¨f# ,Z35uI8pH*쇗/Ȯo 'RƗmh_%SW=}a-UG_B& aaG-Wj^χ^!B E]W|ވnpMLQr Qj=$2WxO+nEZlx)l]#c1䥒y"g{gʉh䑕Y43L $D7.pT`}?f8PZgy>hKʔӤz!h2BYlm2iCcM81KrIe`*`Rζ\I&x$`x'C$JPh#\d>ݹa}dLlҬlڑKPφk1{.\/u@;e iŇ(}`s#&% [`~g(Y7T|Ŝu6 KKvoqu?ÿ.WxCjk7>r|,m8j7kY /<( l7AOLu.l;;PE}`6sw̥J J r}J&0tjY^錟@+xҵuEzN!uZwk[_;sKVZ/ ۦ.Rpeb90A둜ݥ唂O$n^Tư VlDc_۔;]{e+9sp1Œ9;xQ vK\Ue6B5vйeۯ!o^8FyCyq ~:0=4AkrP[-n9=h/*5țI3b%i ˾9WC]o ފ=j>+zR^;3qLjU 8J\yCJ ‘-j)6#3~ٓVK ,W#:D ;\ uoa PѼ\-lVR%ZuTwam4Ȓ?UMU%K/:ɀV'JD!Ѩd3 ӈI/DLVew y/+Sݹb,wV" i3RsjKY*~R; n[ѶTR|N~;up^:>h{N<Lr)4uBjLN :$_,؋U1|F?(4uUršG xm^f$NV] AGӶ%Z_b0Ǩ82o;.:&!*R#6E}cгț$Ϟ!ɕ4+9럔ZgnrN 3*cWh?5oN)\S3]Q)+]<^C1Dp#a#pSWx\mjFe욎KX5R3_&33vEcgB:&/x_'K= MgWcڎkscB5}:"xBd'w &f\%:U2KrzHBz:ɧce^/Atbh@S< EIBFH,DE ?Y?5RmT̔֝t tZY&d!Lw_ &,h]ŅYM\A%g#a pInc 3u~͜sMrMۙj) ?Ұ+-I!:A|İBff|Omy[2Ncymwr*:ͼ}w% 1?V CS/WqRMӥIfx\}hm[x'@$j!j.!t$v~~}x Iʜ8 o;xd?[8i̳o](ꑷ秅7 GU[:6wx[%:NNls6&w5O;iU0fUCSW ||\9%b-GPp= 2URҧ3ni^\h03MD̄| tF{ NⶠԻF|OmD>Տv5x,U}-3!46}pcHAzE~BKT,xM\~LGK ߯VjwJťr4g1֘C39uؑ"$[]R*ѼPuŐ_\`nh%PS'g74N^Y. uhA꒯zc~#\+ HlrBU͓AK6X?SoWfIP {T:lf"ܖH̦IYcU妍{V ď"/p|.PyuVW>>2DI+K~*w婣ůpT,a4f4FI gTVÍk^tZABKsZ}nGvBshf!)_]? [aKxBT*y!k٧f Pٕ$4r|TSQ$ i@}':sXDmw{=7E{@R^x7bnH9F2:z BA+R%0m JZͲz”=^pH3uYe3jpE c4zYxF(TUQQ5EVwLLh/hQͦC@O2ݨb(>"@yh/r0?U/'VK9/CM@=#1$S&c@BާWY^"z uϡ=O,MFʱ)*M>pY.?iI ?򧏋1ooC_\>Y o^>]CIɛ#R7Odxe! JX } M8d^>&>YYyh>)W[4'2L_A@U=s5- *㔱0qTMZHί I%b]$N_dBH1<8zvnNѭsb{ 1WtM.%CSC,$$dO9aHvR>b:ݎFJC9l:2f DP\sbz5^a:#2u(A0]T|OԈt6[`y7OW&gy4n/8NZe 2i@3G8AJ|!ם@/,*<+*,WOR=̵!+f3BRdCB{Y(#ؽs(Q-7II wCrIo}q-^GH*Z5 ب6W (,pnEv nJ"ᨦG*zi9h(U߯bD>UDogy^G'hT=rI}1.S mK\+u<S#Qa2 n&~'/enjiTtjvX$n~M̀1aO@}#w?}3^mm.0]҅Q) u4pVY[&) `ĘN]g`i,m jn+k_JC8ؙlq(ta^s`׼}_:Xf;a~a~(\5.yAT^8T%^XdxMG=!1`c_\Ӏh?K#D=VjRi? էÎ\e coCCL#N4đNCehY@V_s endstream endobj 232 0 obj << /Type /FontDescriptor /FontName /DAPVTA+CMSL10 /Flags 4 /FontBBox [-62 -250 1123 750] /Ascent 694 /CapHeight 683 /Descent -194 /ItalicAngle -9 /StemV 79 /XHeight 431 /CharSet (/A/F/G/S/U/a/b/c/colon/d/e/f/g/h/i/k/l/m/n/o/period/r/s/t/u) /FontFile 231 0 R >> endobj 233 0 obj << /Length1 2765 /Length2 18092 /Length3 0 /Length 19663 /Filter /FlateDecode >> stream xڌeTZJww t7C7Cw7Hwt -HI tw7={?5k1{:kAM(bh tt12YY,,L,,lH ;o&с1 L7EnvVv++7 .|qwks@D-bmi{O-/u=`ڃ=ͬ yk913{xx0ػ29X 2NN p*@?k |d!̭@So`2o kO xY,>2ϙo,!%HoEE=>l,F6vv+7 _CEU6'? 8X8x\ex=zPt5@{ Y8YX_*_+-1I%A??2vD*WT n+ͭ/Wd^K32qpMv+[̬j0)hf >d\M/J89D6N. x89>5z5f&GX`\f_Y70Fq~#6o`6#M߈=(xXʿ؃oq#pF؟o/L~#W3kk3k37l\0@vlav]_F@mF` S3[W;W?s"AggbbZ sC{7S3D{b^_O+uưqHnuwvI+vhyU wG#vLݽEn92E .j85%)fa(.xsP<| OI%­)֗R".9w4~%d!8.o%#J8;`8kF$kz1Lb[By =0C-IDC&BDٔA*PfZIwXDՑ/$MOkgƛY>iwު )VrméR v`jOTI";ޓޟ0pw#? HCBT|A6KBھ1ټ>SvH:6q",u\悇%ģŒ'xUhLب^uU_:Cɛ߼۴ы6̇D41#@5ӚJt#4Rzȹu-Sذ8#?>d8ڵ4 yvW#c(a֣ql0m@]7*b lh>p90J9Nօ*\Ghl?*06μY1H{(vYDOԵ?V憡bz$P:nA`*`k{7Hlty=d\A{ a8PL Yy]XTd}+WAYҼ_VL+4r:Qe+:9S-d樴BUPsE/'BId+es!EW4_#/YByȈeMN#@Rk3Y%\O]C9w3خ{'e\n6D7)0cV=_˰ZzB-( d j[teV&SJrǕP iy D릠Iɳj]R/%fGt9:<_ }^Ҵ)ԓ03hatJ[h*ݗyw3݄;e,M &Rwu퓊Ug+4EqʖdBOeV M0~(*W|OY'kDkW4GuOojO5iDZ  K/G,r\R:/akF$k|Ky$q1:[ԃ([7*bs˙vwN!$A]XWNn Eʊ@ [)üDZR%+ޥ$֎Yڡsrv_=G4pW}B m̲QQP9{yBZ\3eqG @r845 ݤ n A&7P?O}N0WF[ZEg2ϙ.'N#JoGdcYh *Yw(/_3gAmuˇ?6 @ ]7eS ZZ\Xim|W`ܢOh7S/4a؁gs<͗T갗vOzQг|GWJؚLȎ yv;Wz;Ud61 >>}s>IڈczjxS%FHi6ɔew0eQ]7+3MUٮr+{?#r-F.a3T*;Oϫh) -ٸٹ2X,FvJQoϣg$*3E9Rfƹt.:V  [R-Zߙ8Jҙ`\bNkT+R:SǾyƎ4xd6lz] "iFFo1 IOrpU&Mr[,Z敒𩔜T^"Ջ X?!^!O~G _LMzPS4iDQ NC(hye8UڝQũIǃ3l'ݶy*{#="Q녵cS<sh-f2ش ahY" !H:O~ҽj7Nog<Ngʼn]ՙG iWXE* 2(0LN9 BU፣/ñ>$W5.r}!Tϧ#d=D^r)A9ٓ^1XmYM(#(|ϠG^N-Dd5L}2K2+>3?Nry%%AqQOîPȎ9c>4#e,肋?'`ˬm??v'[jky|n>Vd;մ|9DlEՇҁ솁|>T1{{~@OW[+||kr 0WH>a~ʦRPc9=<Ç["Xd;AjT3dig)UcO!Evh]mن4;W\WK_.p"GC?`l<$m}hI[դ1Gaԯ1\Z #!=[vӲ < Fr5|Ztձzqb={r+Zr+ 32ժ^.g6?SΠtb.+fK=2Vi9C T[q=.v/ցpsK23I+LZFE)A3Tr4鑷ߚwzXգGbyFU-c-E'th+ 4e(WkVRu{n[i!Tώ_tsuħIZZz]bcGN"B~cY;~μ} AA&(,=]ěNNJ奱yVi W>kWˆ$1Fz<]dzbk(w[{ ;̊J8g.=@:h;bLNRR-LU1綗Z:WC2Vf djP̏Da~lLxXڭGذ̝vb((lL4:Ky:_ɕ3o3Ȍ:n$tY>,o~Z\{-z mL79<,\UnIlٮۯmj\Τ;YoH}GD^,:zyuxfe}5S%q&>(IIߊtcgY*EKd'%Mp&W,DPpH&brYRYQ]19wzO[LUIPutM%;\91k-M /_Q1Web` O! c!Z2qHPfzcA>C-$^HkxǴKIK&:3kP{&GBɰG<2z+  J(ڪ]H1@݆-3h2GhP5bd!z̑F(,Q"F\暈pɗ&5|>INj }I/6UaL4}K~ )G qC$&d!͟Qvbz䱦EAFW?'Ovq3)3~O8J}KgB?J8Rƿg8Na>:3Xu a~|0y N/ yH5~veity#9\/fUd eq~uOjbQ+M"7v798P> W`DhqJտL'Bkz W‘kOfJ^,XJXFa 4r.o5 Q}qRøӍM2n}z}HɅoG*FaTIBၻ*i\+Sv ^2V*LEAٱbK5bI$T@5WT{s[ď7 &pj1_)/TKEF-xS@Fi3G|TFeW(hW#f FΜSdXgݬj ɋQY1juXi+7Ծ* ^Fa{T_pGVq 2{7eeUjz5Z;KER%M1"Ǫ6ӲG< 5Cn·,|0v[[(I!Z-6KOxwlPzbw"$:ghyj?_aİl9CtH3U?![ |DD.A|D]FPDI:goTI#4JT;cAr2yP.vSx> xC|oDcFrbͣӾ=WMJqڎw^)|Tn!('XT;5-B'dT¥͌+^{U0K5e ̜3Y__ ZJ5~ _ i1ʡ79͜=䏨u3t4)%M#Q)q ҷvɍ?W)䵲2렼U3%+qXWf8]Mt SzξSٔ_+̣Hg:qa./ ӇwԎx&V2 %Kԥ6f?WRŘK{9+WAUbvQ|DR{[@e1;# Ej?]o9E畧u88Ew,b[N myx`^8ȣϋchw1,0/o}r~LFU'}dۓU}lhK3[01 Mz-O?uQ*/TSkJz'K١}my/p6Iճ!NJU(\qoq0)7La[H!7(CeA`Χnl9usP]OB;'"gͻ,Էvo⎴cMAOl^c/G~qwm)!yg]um˴5C=agj`,%Jc 3ìMro44bᖻG2y@X =K/o(iko;0G}ra9H&F=" Atÿ(Gc ~QWC^(i]`3H<ǹpUg6{~(1=lTB-~I:fgm 5cϼ( F )K$#i(-fw@M?\`lmq09_H؁nt%c= )_UWͤ澎o=zR2&Í W]16B r) n8yP[a-hAԈ7aQQo9Wo(!軵=d[$*!:z=،'}0zfERBORJc΍aln" KQsH-k1^/?hyBr]@UA|%pñ I.B"+f#>G<ۗM[reᡶ9}М` 5`F7ܾ/+o6]bʪ^<$Eߕ>tN.޽fŪ n 6*,W|%FsZ [bbaCI-wI _}x |]Ô㋎_;^?<Cv+hq~!Jm F}oڼ_t{ 'zsa:Qӭ.iY>/cI緳6C4ehBetԡ2 &(sx`rQx˓*afTibϤ+Eycˀ)2'"FN5jok:S C8G]|Ak(>wÑY8u6,#}{}<$IT=rdUHN+/LDWc' ea. 5I1HTMrz o%Ckt6lKh< *EMy  }Hڅ+q_c66U'cJ{k8x6q!v@ANP~}':"de^*ɦ+Ϟ? 1$2]lW r~/._qUO(@8&T#Kg Ky-׷x'__x`P%6wUX ip ~hgF,1$3a AE0sۨubx٬;Et?et?VWҭT%:ϩQekMS_V>u SG!t6l4Tw٧>y_-:03*Ͽ`dTyP(ƥt8(8gn]/R}r>݂_yQ8f;N* G3NKlJ*X# \xvĩɑS`0zn#IQxRӱ-GoFwB}-dW)]7:M+TM`> N8]s$Ca)/P)|].h?h ߾Q?x}\" y$Fp:!\H ø]Urlc]v,sJf˭2zcM9qǷb6R9|Y$H `hlAwω:Ior#ϪU̙"mF_݋=C$vH9D(Zz1kcIh;A2NbߣiqP'2Q3Gz'(+w5Y)iɪORYQ&wUCFD<ا6L@Z5VP!kK8xY'^k\vwxFO # Z1Z*<٩/|*[ǂ51q Pqq[A_ϴ|VFOL4\~/uKRٚ )3B2u4oUR++]L3!'@S]4'WZ&+Ъ{p)vLyt^Ria5d w}kߒ]!ssa=?TtNN_|eA+tշƢSM! f摁PFsv1e ljX^; wp n7<,of%VR8+ s~~Lz U +fB놙V:(  U ,q`()8jOܰLnXeN6|Eb1_ !ʴVTG(OV6g=9'-Tb-/Qg0Cl5t?x~Za4e2ߕgA}(VlT;0uV2KB*p"`ݕEzgaܛ܊k! +̒њ["Fr#+r?wP7Vzt[-|r^p2(وJ6F\&z)h6p} FH+\yM MhJyS~yu=)hnwtK] CdPsYK ue*`SkL;ʿj\aX#ތ4 УU鴛n:`xZt÷U(),cˇQdޟ@I 3 @6k2sbR2 boi{ƧNcc {vZMk{h]k.@YUKt9g<.+|NXVQbQdsXL8fLs$Yb cklIVhFt1*K>GEvJ[-3+WX+o_7C!%bWիϭƐKle`%ՏڥXCjȥhFWi;P* ׀x5:H@9HMuk NR D*ώ$d*)`k;\&7 9T5/bb#otf+M`z5 Tcx?͢φ0|W(G=[Yߞ>c(/<^B>MAwołn˟(;8)c"(+]X 4ėI1wزxGD-U&X2FcwY=> =Ȓ>rzŊz^>_Lqrx=}}>w*jSN6?n2R¬L6JvY41l1ׯpS +X燰^ NwHcu zY:`9Z}aZ0.@,Uɇ)=7*VD{o \%jQPoeV:Lk ي'W#pN[|>ysL<~xXV@+~FOQ9 9RYh\^vk͝!74ZB6=c0]twf#%7 bPSvyEIDDKmIDVdRٖRs9=P{*ʠ *X\ӓ-,|(>ܳ޹7@dB7!bqhA2Mk \De Xt>JQyi*Ѫ#|&;U?U˃Wr7?fEҖ1J`FX4hji'd6%h6ht'D7T\Ƀ`~[t_/?MӘ(2 *|.E3(-v%' إہ 8-͆D6Q}.o+.FN#YoSg )WqGKd9ޏ䳫dTO.EvTN֔AbS@DojNܭwg6VWq)Ul^\rgRqcKl$sl%.6;Xh懾N.7xhPPgZP'Qd1!<.CX"]c,B|tZjS~\s/8i;=n0ޡ gG#>FK+g.UrB brh;mDz`P ?VIIq7~It-R 3}||3s.nbZÀ|ET'6:+sؾ 9uWMZ撽Y%E۠Z{br)']f89VY\ܯy -$VzyHi242^+ā1-h~fph }ӓM |Ӆ՗pJj@i`E`prWpД<)cc{ų GC˙ nȞn ejt3_]`v^Mi>_VW1•Z&{o?$gQVS9&]JtMV.MŶwsw\ F#|?JLV|D0?wQ_#`Kum'e4*0ϽT|`K7򛚡3Xy$ܮZS:|fƍUS^!#\zN\G<KwDِe^xFq\f+x%=n K[$ض:>`?V'ɭ6,%)R ?=-Px M T6% :{" -݌jr;E]~ fdy6=xsuYs r˛ @/zϳR +UWk[c xԀ.c@ Cci ;lc s ¥[O*8:iTDEm-;Wc*̘ף/74akgȡXaa4P?R~rʝYaus!к)Bvg&W64~ˑդ:fJyg2E8dЏ::~3(C"msO>*EdLb B,hA[FQlUP:Mh4/8 hsw* [Ptr}\z+SewEciM5'ܵ"*" SK__[([IY7\o`&oԇ>,ް=ج'rC\37A9֝G.SkRLfQB`TMϾE~8w,QfshlnC$yqzUec)/'%mL8IgsRH7̮%JLZY!1E*PPۜhקõLlI&CUW`+sq[DdIp/x3^Spq6/j qjXDvMNRkڨxY/Ԗ)MC,PwP_y=ȝQB]]:P?$x|콋NkhѐD5}a2ޮy3;hXIJuoڝ~BcPkv淵.aB -}n68]Gx6f{(b\vCU11C87P "&>ջZC"k͆9-%Avڏq|^1zekvp^b}` Ȇh:Z dݒ/~&&jԢfC\ɔLNTS(Tޫ%&OLD-ɹww_gB1}d#]-ƁZyY7e-|)$sg} 毫1r!C,4\ )nNgϪDB!!WCILlrBX`Z4CTkvm'LXPĚ<0ޡ˯jvMd6"aQXM/f| &ٶh%ݦf>S8a1\1Gb>/o[KR_4~xÑ):,$쫱)gwo/9Vn+tDG,2cb!uxT}ĩE8eO ŧCW{m$f+nٟbdTnV?IR<LY^LI5U1wZ =3)>t0/EXja7V P 'jT; RԾB2' !ym737 7\.LȗD$6'aC ߐhaFV{ O$BP'E֙=ٌraaSZL`v$ }`/Mqls~ivu9 IūśOj{[vdL_${ FT̥$ggMpe]Krg5;ӗ42?jo7a%u@\*ual) [jii$QNF{m/κRaG]+<VGdI1 Pc*1kb;5ve)u։Vc;@Kg<1m?H{%1HȄ>\~"=UbI> nl @d3E&jwscxRP?8SEȍd Wp:UO^;01!<[tO\M~5!c:Z*u2ܑ䃍eDǵ@E@?V,c&s8u.<}4gge- B>~d_=wѮ[ ֝,z~eaaC!=O gV) F،GGvCL5yGuCoWMd;<C~!;mEO@K^$V>nIdd#.4N;/>fesej~8hj 3 \<\ }IcP\IC '4<>PRNja~g!N~dcoSіS[[%/zX 霺L+ _!|(?=5Z@$E$z&PG*[^2$jON\{>9fm»{zF 1"6rL>6J^qLl#kt2J%KmViߊ ^AbWV'i[zG"DJhB3 E" zK,dVXekML,@稹R=bgSip,tXcn/‡_Mk,&a'&g<[}< R^&4.4p>. 0ᇡ|\Q,?qALo/K65F.LBl94Ùz[Dk(}! ՗C^LnΡ/jT$U%4< ƜLNmܘ5k`ZSkHcPBD=~I'Ä6P@ẅ0uorO}'TU`#B@ŋYM{V}sQSeYP,HXx1 R{7#KQȠaoWLYT/n6W AqnofCF98kي'_\1F]i:Ġp!|BƞIs4I߲T3D9>1݉5ϧg/Յ"1gچl'$ԽH\uYC^It,yMI}1mRg8ʃ6CctTxԩ2$.<3z{R@ʓwc:QYBicCQaG֕;\ "/OYUďu5)VauYAnSS} Ꟃ+P AzlUk endstream endobj 234 0 obj << /Type /FontDescriptor /FontName /EUGCVN+CMSLTT10 /Flags 4 /FontBBox [-20 -233 617 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle -9 /StemV 69 /XHeight 431 /CharSet (/A/B/C/E/G/H/I/L/M/N/O/P/R/S/T/U/W/X/a/asciicircum/asciitilde/asterisk/at/b/backslash/bar/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/r/s/semicolon/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 233 0 R >> endobj 235 0 obj << /Length1 1573 /Length2 7175 /Length3 0 /Length 8205 /Filter /FlateDecode >> stream xڍT6LK( "H JwI. .t7H R4JIww9{皹f枹yYf-]nYD @qyu]]> @z0 C"ŐwQ760ꆨD*npO~H/"EPlu@3#\`vPM6kvOLLw8 qY:8T]5 O 6I( $vtAIs0ЁB\!6 #x=(.v78p qC@\ꀮAAV9tFJC[[#/!6`+&V7GJ?sv9\y\a_=Js3fE<@:b}3w/?/@la_mظ9#`ne?97&lv DAxZCyrv2tloڀl!7?>`wrq_Q'b'`Fa6H+UQ|g;䐞0/!1i_ja_ H@nW ϭa[Ay#gMAB /'_Y)l?~# 'FnPG,?Ybss_2 |";߃*XaRm$ЫR#=x@- XŝqRJѱ6[>>Vzd;ű,XNHvA3CЭx87;M#bo*.|A|cK:򶆫,kbBELtKmtWY СQ "#ܺUm)5n1mMB b\mH4uT^su;JK0gGi0•JoS{ֿU Mk0Ʊ[bI7LWz˘lcNEnF56& ~sAII[ nb%ЊB^Fګ_s~Qh$.v +j>ǣF^STbY72O'9r0uČ"OK bΐHuז5T u9&}ocK9!Gw|+1c'TW"<٣z1Ī0[@wva~N@ %ߓߒ䎚)~)R>JIjy1nn%䴡h˗|kn!C;MU!5-G qr8tL&A-ό/m>?EկE0_iDC!91_l]Eg1ѮpRXEJA@_z)I1)ui1nq"s5fCXsʖiUڤ¨jT!'e96M# jy#z@ Sv)I6E:]@ w^IO*\Y"D6fA{Úxddd-^f08'v׺k+9ofŷW f{l;9ěWڟ&s`OfS:X$JΑUuKJ;۹*ǕiJ GLw#b]xgR{䊗cff)IBd t( ش&JK/AP~5l H˶i|^G!cgɃy Yҳ99qV<` yEc{}!<]PӲ4%NN5] /?Yc#{f'M@(nD7S%}DZ& /c]աqhdG@x!`A/Zy4Ndy)-I;F\l9)ғ5`cݱ3QØ 79-N j=%(l0F ;*9:<D<(~Ad@=^ah2k$n:!Ü0Ļ^_3) M[#݂ammĻ>:w,KwA䩣t(noࡨ͛~?L-\<3< [yLq;&^ BZ 6;M9tvBgmL[ebwWc#\(~HrݗwgjE)37Ik4Yl4^l/$ v jkI,:t{VRa:d)}ΐa4`5&}NLbq[WFv8U[CQ?9|URgq!׀Ҵ͕HNX]7ejhEw/9U;d4zHjs 3JC,^I'nF B Z֬) Q3 >eTZBuaFp[ q~E!a:姷 [{qU[|Gw % U>h<}BgѨ:qpIWwi-S~rV~T"*JǧB?ܝEǖ4 ǭAK>> p Z/1z ArySZ_^1U(DhD~ug~2? |ˊ9R__ Q"R_>_Y5Ix?> qxaM&-=Aj!7zMyD r*ﻇ%ӕukgk;ZII]Δ%Ȇ3ZORG˷;WMnIKyp~VU@¾k_"nkCSt6e4C{`9jzvtЏ`HG;K|U #kIP Y!z2?,%͠8˷dx ozb<6{x.E%Ŵi0" m9WPD&ppu;U#ۧ-rY,K?8о8}ݽ;Tr2) U}*qBhK.Q^=~3^ uw>Nz`0;H!Ceu6E i$ef]f/@'zP,V+jyC՝e21/,?v5\T/(mVeuĪrq؍yUlg ٖn?6e Rbm?*C#ރLm2yec͑ey)B/ଉi^jP/]ژ8@ iY^7c Mw=-Jw~>vu& #Ӟo`)O8&jee[f*խ|QZF?ZN,]w?'w)}Æ@pHGw_ۇta!XH}Hu61C KǢ@F:, ǐi.%b@י^HL I̵Û1UD^)c" d|3eB8 x RM3($$2dЙdXKD܏|%t;ρ7 v@yVPJ!N|h[WF 뷜}0gif3Myw%rW5"+ɽencAmlXt|'48Xހ(UsEO!P1:>JI">~%l{3g;PȐ:mM.+3V^j$&a-fO/'Ǹ@w{xγ=H3h.{)fb+"vr1-'9N12"̂ę猋o mZzF|> 1v1I9Rm, \ V>LDG)eݣH#Rgʚ0:QTIGxrI ڔRTJ̀gEV=[QV {o<1^NVS1 QJ#wg-Ji-M(c (Ѿ)ݝ"xKVJ Q-! yP}l+ //4M^Rؗaڙ̽'D-e.+T'Hc|68͏;.]ACct$1ɗdcf%Zl씪+]NZI]Qʎ$N]:%^%=iDjQTRiIi rW x71Y -D5oh'פ OHfj ,e1JA+z 'h#K̞'cW)1@sCV3@Hf͝-}TˣH\,v4Nc1~գDžAf :*$GtŃ΢R+5~ԿsŒ>K뭄mjBed6)MﭓS1isP')"^W pG~"\4q4NLmtH^}lGZ6fJA!yP4-6gA ;=uDhbQ6hJ8L$o[}brnv\<^Z/qQ%B!mp B7rPfȭkǬj*dYwG*6Mr=Kߖge8^k#k}n1m1q`fq%,J'tDgf+Rėݍި<#* 6]K?U_w5@+E/"if[ [*L\t׾W7& S+hGw\t3e?\˲kczmn{蝃{O߄'jw-) $Kk5A÷g/L%`ͷ?jW;~I'`_j 0^kb80(LTYӎ*&Ȯm>s7v? {5+&m6yu7dlWaspkx&bK'.lGcR,LL6// ^4> z7,NdORacгa|blqq: n2MƓ˶dWP6\`/aL?Cb@|ϹqX.s[qjhէ9f.acb k'qO*YMlόv7 SHoM?.Xnaۼ1R\"tEXQw{,vcɧQG<=k_ѻ؃5L^Ώ ш> ?~"9qDc8čO^HXizZ/MsB:iFf(B |b'qRb+BnopBtI4!Ǻ-IB<7" d0K䮒HH}XP g,"XwoȻEo煣dsVP̫V|NS& .-WR;"`@KbkL6{:._ej/5F:㹗=L&h[rj幹NAoZ3.ڎתAJ:a(2<|'e#tEFZLmK3~?/ϔ)mc__Kp}V9ﴯ5\v<_`0eHiQ"=+^$^NѢ`$2k-B>T< F^@,.Xpޗzˆo>=+huchRAVzRGc{{Z|*3F;<"o$mߝ:xh`aZJ%JQٚS6ud:^CygL~}{I*.|^stMH v26iUgt2\l{Kp و5]kn  :n{zӾuVD^+Hݔ+9U&{AI;=,^!-Ue7cGV?|ŗ;Jڮ!ШN^ eŲ.uؽP/!C0ZLI.m: |ptTz֪Ǜ Cd%Mei;(sjS26KɈB[hlpy6ATco ,Rɐh.ylr+ҷ Ah\t.oP]ΈrDk`z|C>ᰡjd2#U?zyLjҟrW0yNNEd}=^c[T/փq}Tj8V#Zܰœ]ǝÄScmZ5Tq9 endstream endobj 236 0 obj << /Type /FontDescriptor /FontName /JJUOZE+CMSS10 /Flags 4 /FontBBox [-61 -250 999 759] /Ascent 694 /CapHeight 694 /Descent -194 /ItalicAngle 0 /StemV 78 /XHeight 444 /CharSet (/L/P/R/S/a/four/h/n/o/t/three/u/y) /FontFile 235 0 R >> endobj 237 0 obj << /Length1 1766 /Length2 12510 /Length3 0 /Length 13620 /Filter /FlateDecode >> stream xڍP\[Ӹ@ ]C +3sg-_{ui(T5XMv`Vv;FKD tr B h~I .6.;vv';; & s+@D#a#ތOw- dfbP2[m24@@XMlY,En @ trhlb 5V$/ x؀̀vo..v@'[v"@h_̀p{d`TY`f&6o&& 7?K7HL:?g3'ؙdGly;f);s {[[$AN@s`rE ;s?0wq`Ӳ9$y!Gf x8@G̊?zrwXY~M\ 럊&$9 0ZM 6~?>~2x0s{;ylrJLo/. ';RU#=&N_= 3(ۿ3@ga7{^?]f(ߊ]lleћ؂l?-mAooo:lN2ogU|+?V? ?M羽*4CZ7 T~W-Nku" AgGuW-PB[Ԃx C&k]=)G|!6~H*60ɳ5T L#>8@uP<K`< "xLx@o7ɨ ?(7u;V!D PC`HLxRoWEJh"<0Eۦ!mrɤuqRr3bed$5N*buBU3j\3ch"V^7{.)U[_zMTw>UFK'^T=XC(+-uɇ,7uVEV-W_ ՘p1)m"6TiÒJoXK٥i4}:ν3cFh~n"8 ,BD:10/vV/ZD&t~@y+y"win'_*L$L3DU,|`qh;wUկώ=Jۓ{jfBщKV4Ka6bOΗPotr3 Z!P>WN{~S2Q̢y&ߞ/|,uX QwmzGH(f `;֟gWE¶| B}EniG6A댡A,}>'j"?̝v0r={$ )WK=JDK B% d<$ $ww3OfyE_}ֆUG^ԥVZH!(NںmeD"8RjU&l9UTp(ۈGҝP!Z%&; ~>lJmp6Xǽ}zdq Pdj6>~6is(M1=e\vpk&5,xp~ WZg%9tP$xkf ͲM,=K+ 'P!g6J]^՟XC,uxHc-vy.Vvy;s`5[MeH[Čkk]@I3G ><I"WmD/H7vP{|CQ8Isan)E\epD,|#Ԝl8~Eټ4 4?LW?'۞f48"HH9(4ͼJT\4 s>P-)'iϚmVB"2]­! ;? \!v.¶bl)1Va_WcjYp[2Yi QiZ).4<\yO{< r֬\,0;p(UKgؙ1%dbVhY.i@ ͏gnMx 1VTEzQIhȚlE-D 0>|*fbLc>0CE '^Ty'Ǚ4>jRFϩ/z.74Rq{/J)1SI5 ݉qU/7&f!pÀaMǾ _| ^ܓf #as]fM;vy+Ar7 QOG`b+ %&b~ڭ=Vxv*YxuH1Y,ԭOg3\􊹮 BKߧ4&Jf}9~ly'$禦d~ Lkej=ư0Hv{8ltn1册:yI&珑hI6' @ N˗oϯt}unmLkZ)f!*g-/̞_<&b`VpP$C 4VׅP:L<lLԝ8׷$ P셡Qc `S.tuEwQ %jHO]#|e0c]>H.SE$f;#CldAؓy@yL]2ŏidzU+6VzS8xvDqx1W~wz=Գ"$ :=Oߡ8:]>Zu\*Q]EERrf[⵭m\M&AB {~0:Y\'BKI"y]ݡ9ƴ 1@]'Zi/ (l>`:fذLj22i*m_sM!>ywo^ܖ+|>[xԳK@DAmnV5vf`5wY3YL3(DЭ d0{tā'pz:Lsd^x֘?冻i"jKvQ0 ²ѲˊQ/MN..}TuԙE eT^i5A y>HXeM2rT3QnqVlfⲾSW,3M`AqO iJhC>|~ d۳ק8R{iV4c- +W.r&11z<;`Y=@H43B ل/5S~oXuؕw?!,Ä68 ;g c6pBʾl y4zl ˥wvv(j7ߌ[5E:ߞ6vTLޠXxRaTSS|wxv k0Y0y'w'N 6Օ ܬv?Ja9Tߋ 㻏zs.׆LGJ$hR8T-0Ƕ=&,½Ř~7Qqm~JjEEv0OTqpv ّ`o=pk5fڷ`K!I7U.Jf8]V/ܒZd #P}F$`%5:VKCh-T9mUf#r_/ ޘsw匆, ]N$Xh} ]vmhHR(ݥѳ2V,*%+dĿb"5CjE;j-Mf;uObRN֫¡EǗyUno#IհXY :Whl~ *EU8r< \_IK1ed&^D:k>1ajf4(È}n.`IOEI) SU3l+6+mVi3wq"}tS|J}3cq3u^ԢB~LHгr}:ʸ -!H7ΞIflU𕶭u8ŧѹ:YmZJTS$nA뫨ӡi8L|1PJbK+^`2BǂmV\y_qjìޔya|Z"I*$4'P Y5$!Z kGPw|dKlvdeHVyO ?/GOʕ'pۣ]mԽ8LKBGYph0?"ʵ<׽ڇuj`ZEcPpQ;]aY*a\ZP)`HfTZ !L)t"ᶗFLɜƛ7F'eziGê.:& - L!FRL/T@͋BAEVN]A3}Bc\ wf`0.^ݔEer,\'R+H-ɧjmztա&,LrQr x>1gxUI0㷿dT,044jTh\/>@54RY"%⬔FS" q{"ib~:0գnFpDa4~M q :i5hT;')S\6=kXg+ŽPL%-ЇE(nԬ^R\TV6K<6mvFҫ0p btY$|9ql;16j8oR%+[[ݯ3979FmD;.l`#.JԜ,NR7bSo'ai]Fɥ,v!Yb3?){3C"򕨛O(Ʀ[0"ιt~w<\H堙X 3x5hZB|:z{"Zw0Pnug*"e!gs3ZР9Y`&7B1QԿrc]y΁r,.b޸Ui_DM{RCsN ^8r`t;`< {FNkSzݣ.:m))"1ƛJ'~#ŰO]9+y3E B_M| aj@t2{- /(u)i<~'D(D6'Ät2\\>?YƩ Ѽ-^苊ÏP̟xT β"K=69er֌aY46|؈+ |h5M6dwEt|DQ>ƼC\oDt& -ضvuN= YHufQo`'I&jF.Q-fEUn]CO?L(lfhg4QBb{A3_">&0r8/G;hb":f +iiKt]³ $R&$C҉; =, 3p Хևٌk<&ً½Ox?/ ENql kQg.Qc׻d[Qd0{X/ ݶWJhe4D.wHOdO_u‰ ]&wLˡy 3Sc*?iL8n}y}t Th}X8K/&AZ4_cg*y1n+,Qf3vWd* fJ.zn_֕Kt{gMu GQ IMHFh9]hfr.&By SObݽp너MHۻb5yYh>.o97ms `Fpe/qCz^.qfYjJ#݌n6UU4i_קR7 d)C5iR%"vpu]G 60f\%y-ٰ WUoCDJJ%]]YQ ]]rtQ$]/m9&ASqޚ䗋kü(- hKR"셬\z+R蕷pє1 JΈ+?k'PE0_~wgd/8#\mlWRhorVpk@)!+V9LO eUp} y(WP:(mPZ-%dPlhF8abrM.Jɔ ar^rOtf1o>bU EͿTx<01ω8y3-霒;L8r/{1Cg?/s jԔZP%!nZ$!=ryT2SG Hvw¥ }tWU b`JS8 1|P +0ߝ|9 Y'B*i0lqy9s ?*^~W i?Os̉/J5L;2cѼhn47?d6Vi#4?e͠_I?t͟KIJPWp1Νk=2M EaQ%kTECrhG14_5# [DBȒ2&203yI ;E0V}ܶ2ݭMNNGnG,qn.:GPzI Ht隍DžQ}F2xR+h0QpUC*MV>"F3:{@%4Np#CB!J:o@UWzdy8 .)_y ^kC*u=ώTWvH$M-M(ao8Wդ4P`g|v;'''$C*@Wq>2@J uDKhB*xJI>JJ1Tv .hp&#i AjDl#FIf}GxAdL uӸ^ vi"OԺGx%bI/6 ]U:`T"hf7k}57Egs@\29*t(~B}~ v{Q̂w0脌b!KUH/A۸ yx61։ g&L޵4ve/lXol5ߞ8QճŤh;|l*^Mȑ*}3BՑznBeb/ΥBvV@4s1s/T0g2,&Ҷ1z6qQ]!lN("QPe6Jcυv׹$lnbˆ3@F_Dɒ> 2D3'{tXQ6\%JzbJR+5[.5bxe`+g|3J6#D 'ԸMbQg1K3d +oX6l5:: m\2v@CG6g\b+ۂS4o8jHe/PXf|)'q0Hrk(r:U:s6cL}BocPK1Vr]D`m!1di̳ 杌skɝn6|^L"[0uStc twG,tS۶At*U~ Jj_\1LY+Q97AP۫qa8=i0U|OŒ`tluOOM0hCZ|HnBvա(Oڰ+,.чi>ÞpV^ux*xf9e0-}v~o>N|H$UdrXhK_Q2[lѦe -_U^Mp+b&'Ġw}]%ug#Y>/7h'nԱVüny!CAf|G _Dkyu{zD\y귧Ui0rqMHhxsWt.4MJ`{fUxǮ9K3D&FTebsځsrb?/m^3M?'w/CA,`=1hO۷ڈVS])8ݤ':mLm*SNQ,FjJJ ZodI)ESiD"^ xw2_fc)?-Z"͛ܙ[$Wf`hh0[lآ 0$xB3_K¦#|D JO=H@h{$%DcC̎?WCIfĥkc ޺y _7o.F%Cr35(pH͚oK0bLZkk7S%;,O-\>t&~;EsJ+{ De[u?snmUDu`^CVQL \w@Ḣ:ђ|jT-W:FE9_7Hbp]{ A jy_uwIFMzdZ΁W&I%#!2]pȟll|nXrFGZ1L="eE#CFp8O{މAq°^. Cv1|1{pb2|U5 bk:O*%d%f{'Ҧ IJ-lR7Fj]S,:P6x4p3*kc/@بyj]LUגFWP03#$!i?=io.R#3q-a늕Ξqp|x, SVyZ]6.;l6*ޫLԹ6oNnJOG0קZkxع!9 |TݒlKqSތyeA/=X!EFg֔\CUyNՒhKNz6$) qN~8-WkiJ5 sOg.Rrhłt7@/e1qܒ0=!_ӏ8)t`*L;,-<"3qhzP }V?zj^Stn{zj0(!īNrW2%е_6u\?+$%%O*WڣsY ƋxahjBd3d$OdiZA3] &be&#qy 5ׂ(MT=XOTVXhx6 $α:^ [ۅ sݤK>p/Ǔ%fF0_XNaѡ̨ipo?KNv~Vp)˕Jr]sDeU p1e2UԻ+4%l37qj\8c> endobj 239 0 obj << /Length1 2774 /Length2 19620 /Length3 0 /Length 21202 /Filter /FlateDecode >> stream xڌP-[p'@pwgpw'8-Hp!Xporι'*ݻW5PM `cdac@#G]@XH+P f` 8cH,J,yG de :sz;??/_b@0dj D47h8^NIÃޅl%LZԁ.@;2@5j5o)@@7 АS86Vۀ Oq,/G ;;:x ; @EZӕ ``rdgj1+uS~.` G_n erp:OCOsm=|,AhX9j9݀r@D(eV@W7' z[ KK ,?(>.@+  ;;d 0ZP~{cH Odl~d0 G;URMLEA*=>\fNN7'/^IUMA?9KG  weG4t 79 uoyf$fgodd\!5J@ j\M!"`eo!A. O*O @@UGЯ?:ʙBHR!-~7 6Ba77@ϿF 9X:Q~*K7FV߈2w?U_`2'U7DP ~#HA_A"FVO7jFZ$o/dfA@ rv ; r._b\l>!~# 3Ss[;S?CȘḾv@K?^-=?9l/ddhypįerB[8ٙddWP_zg7Ȯ>ao$]K>~14\Y{9Y@@H6@!1 vR?r- uvp7uZ`u4ħ!D~!1 5:Sd bo>οBn@n}s:-~1MJ 7@ , ;G c| urpć%뻐#bC:c!N=^@H ]n`H\za!w__@O9҂`M}b̻gwu}nw舩5b#Rt7>GmjƉ3(_HI5E|}la[Ul(__U۫QxPV웠sf9̤H s7gQror^p&"'$N`ѧ$vb.= Xʼn6x_fʯ5H9{Wĉ}CZǒ~H0{<%)Q-d-5g?\%=n"2:>cY=O S7tĢ Lf^ě:75fPoz FVX/N =Pؿ1./zeXwQ4ܜ~Niǖ4hhYn=m!oERc4o^r}ֲ%R٠*_adFWJ=C0j"AHcV5c3F|e-q%W=_F=kb#ꆂth$ ghv)IT~u&nt͘,ذ?N_%oZs{ktc#~dVe<^u* x2҇MۗGb? G𐵦wju1Z9XlF4:1kC>d-_U4u/gp&H+k*ݫGƭ%ʎ2ur~ H-U*jwZIT ZPZ6cnC]fn'# cE3?e}bX" D,6eE aR_Ǖj͜ Z l*r9g!ueV6էFS#s0=L&+ԴsKi郺ۄVW-kEfKcI͹-qE4ʦa`.b-%Z{p>e3*(F3Xm;R<ൃM'V<‚9vԷ?ƿqFdGx}A\(([=I=(/:r*]׏{T:6?kFmp11_>XXZŋ%A7VMY=k[iD-^"ڢ(FsSԴnL$a_r/yQ;4{ @Jg-֣|%aeQI/=IZ0|S띊" w0d 17w:)7pT_"F,2'y 5N(xA*5=B9U©P{5hIiIK 'M{@/5t°C10BĚfU2d 6ȦsW%X]6h **  v]/#U'W_>YͱU`iTX)ݶKrWM: {WWr큪#M]OR`R(EroMM?,L宯lEEq`QI;N!".&+M|֙Th.wfp*0aMv'y k|~V j3 l4\3`ӀI[55,௡wNLznf OR _P6ִ<ϲ2˕M@b@:&aI.rr*6:dZ1J07gm8V7 W&kJCu}pڏgC*:W7>&nkxMZ9{"x{̃Õɛb.3l+_4_vtuXclDv)SN/g\BOb,񸛽╼";R@هqtVKz~ MrE29+Z>j RsᴂOaZ+SA>IlwޟfEQx8Md%[6ޔN78cMѝ]pta'N &7FHcФ!UV߇#A'X" .ٰbl/U98U }'`s sV,L]uQ$t \yd::i7]Ӈ 2a||zx4'':)¦AO\D?-:zRkq`۲x-UA0.+|Os1+RU5ٲUɽu-W7]]6~ݯn(G' - Aw,:DӴLCXF,4M ̫˚+i{:-1ftMa/[@(qmXXQʠ6Vk@o|B% f$ ƣx,! !gq}kXoj n[Q.h吕޷o8۔_dУe36a͐NoNH/؃}xW2?".OBtV2F 5F [sD=zwzacɔ?>PX-gna&8~|Ȧb yLZ@M⺡P]H@{.;(=T3dEyȋϔP/9}q}AA";.C3.u3.,A5w՘XJwg+Mu#Ôю8;UT)yHwP 6}rOJFR0_RЄt#-L hFC-蝛B2o?4RNV5j`iϹ_b/5#ۺQVnٜ;PPS!$~|q{:BŻ5(q0:aSeYksh:tB1Pa9µm6\r"R}hC@#yxɅ6]:[f?ި`A%,r>íb ;D`D:/ұyq?ſmsoaI>*֓z(A2aP@7x)MYg$aEi$clvҏG\F03(c,-@ Nxnư`_νKz"vր 6{cGpʼ]́.1ON"|^<-K9-151b>~Þ&FQg\mm[7{`KPUDb3%KdgK@$T# F-`^Y鰨M%p]B`NiT>ёCšQKۈ@QOT@ 8̚вΫd$^̠=)e{n癙qNHY6຋%VӮ4QK~kEZ ?J?B0SəS&uqDjd B,Qeɣa:h]J,/T@`[48jY;kΜd)jhVMdϞ8pc,;l+>WEkqԱ& W ,5M5i}6wu qKbE<Ф- $Ws$ A ݿz 4(Qؿ;vV5 p#3eu7'ҷ-bAl%럠wRK)߼"N47R[p"*_i D43mӦR3+a5 Ş`|ӭi_Sdҳh -_W A-q~H.[2Aua'drKdߴ3j,WE%$R0Ce [=1ǟ_ª'ʬx >ó~KPv}M[ v/\YFIi,y[iZyǐW3å޼B3uut{š e9P2!aBT2tCx"/g&[ӂ>sӭ Qmon 1{{]vUUț7NAh[!_ɔ2yP8%l)zᲳR7E '_MH] 8͆O^<Þ=Q8bHbm:(}N 1~4^J.jzb eдu[jy9(%xO,~V%C,uB"ѩk՞0elQq>CkIpҢnf!}+_s*I)UBܫYkOoתη 9pZW}VśfB\5ԙy զ'Ȑ pw[Jvm HTJbUyc&de ORbk&KG}_DYקnj&e>CvTlOBeTYehO+oneꯋׯ 7[?* h+h ~@uUl=YԂG"#}I#*ސ[̡ۜ &Fa62"`$ʚSWLPYɊ}4-Z0>^XD|ʱ8ͤF';5y`Ǻw"G@e*:{vWu SjQQ: pUlCC 1%V2DD)x0r0iʵ[c2 2V;z+2Y?wwe\} :R]o?IG=5e)[PAM;(-r`T0vMYriAի]\7fI-QKD9tMQۂ^ 6- # BĨ@>*%cCRgtL.Lz y)wMr~M(qۃ)D U__8s%sf m j}Ǡ.xB/0JHV:GfB+yI`1 wD3#a%4Mw~ ѩm3Sc裤TAGg8x#JkC`y8O=I RB5e;tǎηR$U\/o;Dn mlY|Z ϝZ:+ QO3cy z7gBKbmp-Edl\"e쓓LB1QT Z:tabwԢI˒4o>M$ޗ&-mKcԴr9R&&FBaKr6^/13Pcb!N,Paxs bk vz\L#X"Bw{?YdfZrG2Iֵʒ]~X3R5 EkD8-9wI[sOa]NulYTK@]M]h&sT 3&8i!cj#xt}^ŏaqý@~=ӄΘʼt;:R/>R4bLr[_#ې~08F+ fs~Z rfA$[M ,R. ~mV ٱ&li.bUzW[q,^\%H}FbS{3˸7njzSm2>>~DO6IH(C)"eZrYo ĊiOClङ@|a^5BxiwYQpNƱ5N7^nnƼނeM~59hgT_m&9`EI֊hfqa 2( ~^c9nE䌿=ݓ,G|> A{u.SMbd3ƱmsjV BԸGkU9c;{Ӭa5}[]}7qlޱ_W* ehzc}4[ ,+\%$䂳17` OĠ iHr A~XMzA;*s|^1~!kigزP.dl\r_'7#_+'+W˸6k.ڙAZ˭|% rns]qxGEIA~|A19E9eh-?5M(wɫT 6BKsdZZo$S^^Qc[Sp[+Oxpayq?芅sD?-Gbau`QI9G/n}S'|6Y}?sXJ&i*_Sk65v!&J)rkUfJUCkĖگB!W3K*|<gN9u9QجԺUȍe5ܚ.ehFjӑMqƢ-‡fT5H<&nu.j4WQt<j_V [i 9 M"* K͊wX*"gyGо)/ HRp)َض*q3J{^k׽8Ae+UJY⑐9&godTfaGd5-uhMzNu0ʬI4| ZήFcfo@msZT['G}}d( -#B〞$B,QuS\QnUQ2s%|$x~0}b8O (UDYcas?lM{v"7~שB*SyZ(&Z1Or3p11`fz$cpj,)m;4DAD]C{q-koU?RXΦϺj1)J^~W܁~QoXӟx+OIݚ>>_:Zf'3BG1^XE [(L^gڎDcEvm#.sS5 /0r-+L<*?vɨmbB8J\'爫WPqg ٚ^ PO=02"C_y[v0PF Hs<)w*0yaE̗>!CaBP[S!:Ɣ=\} q0ù}YE ŚR_bLItiPR1!KFIT'<7bp:.Ǐ";hǯ~HOC-Gs LL<5h۽0Om Lp(j*w[>< %Ʈ%[:èkHݯj#1tt5g><&tc\E,ZЁ;ݼ0ێS2jpk+-qX![h|oSy4H+ok1?.JEh]z$J𔹓mFZQ"-^Lݺ޽J{+ Ue8'6w'`P( M#r>\'!|U%rҏ#jݝiL+_ꏉazHbG69?]R:VU| lz'̓Ff kqVyۣ߻aܜι9[s?<&^LAӕWP؈ϱH iyI84|>X-PiCNj-˔|2Y+PuW Cl4*_~L :ZJZ=x ^dJjX_C:RND`-; M|1t^nP>hR;w"ajTZk W]ƽt 4uqX"'T{辍x#/d cd;E?GaBy ~neSȼ0>/V.ؔs&g*y~XfEz F[ q͙HlWQ"$VY:X|>ޕ@76 kSϭ#{1JTIƁ_' k)i$EY6U,3>EPzX('̠7\gIf>-/H^Grz,Ton\ScP(H(`u[*UcE*3t/TcTT31kgPKċe]GιuWS;;TJkێ9}V[3O,LJw^(d+153Ff̆?bo+6 GfPK'ɜ´ y`v,*QVzw(7D%4l>혊 S̓WSg qvT-0n6 q~`Sף9gWy4 ܵWJfDz (KC rxͿ 7O9$Խ9SJ"u->Ўe$o?), ZaE߹4zt:zu؋.4`G0̽|_mgFr&S|p+f/bk0b)K%3I0k#N^t?=6^Q#˴B=nҽ&I1s{ v-c=B7su?U[Fthtse2IYfaz쓸twazy\T͞Y&-wVg;c1.[bдYlأ.y!Q[tW9>M$"?*~,C]!:»H%,S UCߣwe3'a7wD$(5#Ԛ/~׭pr4<`?GSI^j'43|1)'o9j DOx~Os.A[*oS7yFW.:|XD[LwJ @?B_+~)ՊŗN{+quJr+/YSz-ߊ,{ӹwxJ /4[+ߞe#t"; *Z,pw~ gFR|c8zrwUgZ$G68=4md% 1Ds:z=@%ؒŲpvs&=!Z~tGMsmȄkyl?=lzje9!Eq6 [r֊%kRs!-S` MmRgf)p+k^u{0M &6F‰t:Uoo/j]؂pո2ǐ( ߜn+-242rշjWj=b ^96`߯ E@L[r0 Jh.%q'GBKLҙ9HO, !eCj简Z(tK<4=J8zəc2:"Eɋe"ň@tKo:sq2K4%u !N(mtdwjX/7ƤJ\ϻդfbLj9_(ǤM-ץ#c^RB C*Ǭԏ VvO6\6Z NLޒHMab0H̋st$ƝZS%dJ.v(†q&.K VIp jx; pYd,8I㻛=tk%fPnu#9HB5w(3*ρM,|1'!T93VÉ恥lr?SݨK%(Gm"U %-CLj:!w{A623tw?:J; gqJM8ye`spYs>l#PnNFw>usӒKX}גO#2G*Hlu#|QK|a&CyH[5-THz |%>c:I񗰮1 5W9R6(,üCsJAٰq$QFXc*]I_ڵU7iV&E'JZY :Z&(0U{2 #|'zX=Y)҇{][ɒV})$ ONJ^/߼i 3xU]ٰE`,ip5Ou{^|-x,`ɥ>fb[ۮIH6oRRY)GFo bõ>2J$ͥ)ka?MPtݎb1?<[pHH 9v"Xkh`*Dbsm5W'Qnÿ?T*ˏaGNͽ!K9;mWi{YZ$,ڏ3BXǘ#U kiIbzRq mr0_\ ?8i0ڢm@d C\'>ms즉JՓ/GƩsE:B L0 Ic8֕3 &F, xmrgQ#3&{.8>IdTF+ʖ'y#jS'V;l=KDo-k "};oP>kG`*o`&mu0T@h(ܫ -]ĜlH 쯱\dX{E)ޢѨ8; I*m_,Ylj5UHp:1I{?fJ=qKX yh, 2F-5S.k퐳}B[葎9^+lGlC%v K19b>0}/Td#X DB)+Edvuw,XXkI9e&Qce=~l )l^C:NHf5d2;N} eաcV~ Btf d$]nDnpv p/}t'dN "9Vbӌ7!) [/X%?HH^WFWۡ5Y+iH拶La7"~ cr1hdGJMt|pm~CP!^( ]zyѓ|NѰ娊,+$oJI(9N1fg0d\`ģ>WQ@lS" >ndD 8 U{F(,1DoEӘ ˣ0 3݂ imFw16r8MA'fѴƙkID/`eb3i+l4+9$=` y.Y%NB> `Vjs,W|tv_%9<^K{V[%OkA|PɈws!-9q.$i*.uwV9DZ5~L!%~ 8 e¶A<}22@VoP _w5%/txCd):A e5{#HK$"+jɘ~(3K{( <{ qut-%) 2j&fJ,{5Jdy\O4/SC4>s%]#>xhFOsxv˝|=ȇx+ECyߺb!9'^oieG K^ƌL(%>Mc(h P6L\xAp@R!Yj&H_59~O$fQ2`u5ؘk5\l@̾ļa+VmWdSJ5k^!ʘʼn+סW*󇽶R镵F_lܚN7hTE :-x |(E<<7I !-َ#ex!]Mq9g4ZZqAofN-@hhz9^!VLݽ=Lkp 7j[' ת /U0i2}0R)6U-b*&7I{D XR-~\}, f].ތ5~v\0(G$&nPKȌ!޳S&B"#̲lBҟWtIF FE"}a:P5#OF1d}0wӏ y(.BYMh Ҭ췥cDsttQ$^k RJU64I7ƷqSԓ촍`sOV $uēooS{dSų­ C݀w8XXGR Uh#}=ǣQ[ִ}.t-$'ak hmt2*#a9gͷ`~X26SPq U*v0!2Q#LYKy0cDA%n/6Kn4q2pTӥX}`@a+VYq-BӾ cï]tCbtirBz.ʖ&TM;76 5E@xY/p*YpGFs h=aeuz?>(Yc&ƮzK,rk(Xʅ1"lui -֝C\q>ᜍ.U^z=Ȃi'/ӂ~>"8n3¡7sZa"ّ5%B6'EGK#_vHG`\fҰN^QdNRg2|֌x4@9'c,Qs9V č^h#%7+K[1j .}ױ?EL֭<` ]KЄ9Eez\/7K`D!BX zFj ܀ߏ=YĪGtu 7ۂx4^@d~cJQ8eK{w<5)x;! `Ou{KZ UO2Ul7zY"uD}xJM9" Ct@WBDQ\_ endstream endobj 240 0 obj << /Type /FontDescriptor /FontName /DQAOKE+CMTT10 /Flags 4 /FontBBox [-4 -233 537 696] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 69 /XHeight 431 /CharSet (/A/B/C/D/E/F/G/I/L/M/N/O/P/Q/R/S/T/U/X/Y/a/asciicircum/asciitilde/asterisk/at/b/backslash/braceleft/braceright/bracketleft/bracketright/c/colon/comma/d/dollar/e/eight/equal/f/five/four/g/greater/h/hyphen/i/j/k/l/less/m/n/nine/numbersign/o/one/p/parenleft/parenright/percent/period/plus/q/question/quotedbl/quoteright/r/s/seven/six/slash/t/three/two/u/underscore/v/w/x/y/z/zero) /FontFile 239 0 R >> endobj 241 0 obj << /Length1 1647 /Length2 3786 /Length3 0 /Length 4802 /Filter /FlateDecode >> stream xڍt 8k>BL9ɚ_eNeɾ/%13fƖhK֐tD}RvY" m~^&h=Ǒ0y@U`0I  0Ő/;DH$a8}DIԐdJha$`'jHw Г8PG'2ϯ0JɈ. B=$ ttD! ^*!D&P IOt<'"x`N1H إ #]$ aw { @1`1(G tLt#@ 9.]gn! n/B]H8` `+A$Hz7%)Hw$ +H ßH("@&I0]21_ġU.. LO CQ{A^308. jøZj?c(&#H`0$' ԋ9f _o8Ph&!ALt}; p8ƠȀ=ATArD'`v?P^ki'N'-g)Y@ZN wq߳"1?SO ~P 4";)j?ⷆIP/yR߭'Rwb??AQzx~jXg=qsWl2{:Db(=Ju,I`QVLySHswNj8z)iI$" 0RR7hsOT'SR ;_O^ E~ YjPo!>( @i}RR*pp)} Yi AM)I %RJ3=܈Dʓ'} =A=t$"enY敛k 9?*nJfD)?9vt{;ʨOb<{3: 1ΣJ[s$]7GzK;Iڑ}څnbSg4+ 6 K鈊8!++y&V9@XNrc.fbS+Bjy5C",Ag-y\ i.N[`EဵgA6Ø̳\+sn %oroϯ:Zݞ`Ua('"b )^Xоye҅ZB':u HYߡ0wӋ"?ll.hkOf^,ʗ_x="sra/b#=}( j)Z4eQfݽrӓCg^>UxJ4C)Vf1gc* Fân&'x=7wj;\r%[2PځRӌ[F~bJϛ.\8-S,o))l!qڲ5ض<-j&mnEgky1u+jWL 4_}l~q@zB*ق,s%'u\y']8LCL 0To/)QV+m7;fT.݈nrWkN멲n/>WIÚ/Uɱێ b^UelsjyiΝ' Ußt?s崏+u{385tT*ff\oa26cC HhS nc+homd/O>|YMB"4\Sy%鴴#Zn4ƻ<7*,VǾ)0Hc3 7cp+ ,*Q2<DQΧ"6Z> O3c3m6YS񯒣woD](7*n;%P*bחw6#eόi.9[_[RMci/a!d#j U0VSh6дE!bܸWkk/&2Zl;GVO RKf7u0cL ]xvًNxfammE:_&\Ϫki3}٫8]jʍ:F%=<}6Lw1FLyU`\J&:霄DiB?-5#ڂe4רU.ޒY#dިx#9|nV|`C\u\l3onm=_GL\x'}&iYL! t5[m%\Ҙgfsq~\mS(ix!TL}{IH 2,~f QO&E)n/a;dhUVg?MT|&ϩrqٚ_VaW+lF(w?c@Y,|yذbAfQgުOPvm`[+-|vwnF]^} 6fd\ghZqF:ZkE v]CXb X{~] Uc9cGKոc :g/=$ݏuA %$ޒv{q*ii=ykD<ϒ.ckjFrJ}C>mĄ/ʮmĽijH)' < 8/,IPz R8l\V0qo;Ggg#ߥ@PKVn=Lq4 ibTIf?`tSB2 =[\믪C!a ʾSEQFB(طAT(b"S8bʢ!S},/QDm;Rlv Ԕ/XPTf˾/~`vganqwPuggF,?q2JQ0U_'U2hY"Rߞ5蘜lr\u~|x_ "_"%`pYzEϓ cO`~e9,E-YgK=$fo;=u]tXni Z(7uӱ'DM(ئ!uTZIesv̯&R=緾,;otdMJmcv700^e ßg4SB7#6zb6&X[#v1\fVܿz!~iQG YQktb\̌ڈ0i~T}<4:rI'zty$j\D-b;bJ]VPlSoNWsH|)JcZW'Oz5 \=g2ZW.X4 6\ D:y"Nh<;St̛4]tF򙅮uiRҨKxN@! eE,]Ы Q'GaxmZ^"6wGLYXyWBk:FdԊhw_>f,tԗ̩K  eUw/ #r?D:氎ט PfxШhm; ӢbAo{mm#W'mu*S~>#Z ?IDU{jr> bA< ˒'[?@^LiwƜ9g|c}G}uܨ퐐Ho~zH!aC 4 yk faU6rB1ʡx:H9h endstream endobj 242 0 obj << /Type /FontDescriptor /FontName /LRMHSN+CMTT12 /Flags 4 /FontBBox [-1 -234 524 695] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 65 /XHeight 431 /CharSet (/a/b/c/f/g/h/i/l/m/n/o/p/period/r/s/t/u/y) /FontFile 241 0 R >> endobj 243 0 obj << /Length1 1606 /Length2 7864 /Length3 0 /Length 8909 /Filter /FlateDecode >> stream xڍT6LJH J ݈t#5$DnnPJA)Q@CEsm\΢+AB4$@A@//HnCáٍ(W!)qZH@ J I% D$ #PWbv' fn_0'@@BBw:@ AuH0 Oh$rrCrah@!_ '0?H;;\00zᆀ@Q}5Mcg(`?x @Orf*CNH'gPceM>B@~|l~O(@ FѮ|0/_eOY Q@:9AhW_)PP{YG'! vH@ܜTMϐk?6{( /.$`kHg5 /zC @hߎ"bFl0?կP?`sk }gy-/'u4`O^ D_[u@?G (0vF^+ x-E__Uo߁7 3ZnB^C,ss_tr{sUy@!:04\ptzi6kz}U]eoG% u" $[z=!PߺHu /"u 7FH0Y~ A!_Pt \#Og]w ^w^/ /(:SN] q] W\' ~L~L¿_.( & yRrZ)λ>,3nvNFY:K_Uzphkc-AXSnXf;oG25xscۈݮΞ&NCuޣQ[<7úF , 'ٳmӧhYoy nyOOɬM\(lY0lk@еΌDui% ~N>DgΞ<"ȫ2_`;%V>_A\qWؑ"{B GtklXzc4Sc$nEFZۓlB:8s;=DJyڑb7n(HUa*7/~o+fܱFXJ?G.vYK஫Y%L~  ωNq/eKbugnG>ɀ=W+=y)e)Fɣx>fdsa>Vv䰌8x;iAÓI8B_l9 g~LxVfEQBBQ߅6; uD;G EHŸ*-oEI/Xb)Ɍp򕙹? R~g6'@DCTc^OsͰդ'0gsxb:ɛwtn1{ģtxNו9CO;%&2F.y;%R®~\ջ8I;ybPw}!-y,b"I׭Mưwb_rZbD4zQi=H/;!ϣŷ~;DZ eAyܻ,,,amu*g^bzcsG`Ɲ|S P{Nς6)(+'4ǼVOs>#xF!TF2Fu'}Yxa&eγB]A;4h&%AFBEN)?%h:e ¹Wb:aBYEJv>v{4QȂUuԕqzyi}$}&O١+[gjo^f'lICɷ,h4Ӟ_ڕ zֿ`6 0VD%%\S{(lձ9]i>,VKاݍӘ6}DEBz(Ieɋ~FL/~M~& WmIOy\ndaJ\J"Iif-M8v/h9U:hW BU(vZ`.nJlTJInkt݊-&G61Lj8ږl?op39GߛRQ"RN?f2@>%lK.X)$siwz Ij<8Vxr[3/D}< Zk|[j#ɍxy" y('E} ˣ A?M/(*p*ױ\\&IVILA2'' o^zJ:D1]yFܾm%$uhs\ʽK:`+asDaB죲MO[ѠVG=oHK6}Va^K͋˟["{)'vqOMVJCFS]-v-Ac\}26&B01r2\qBnfK$#^Ve:TV{STBYS"ɜ⩰$Sɹ\}ҟ$L!*'OV_bۯz>}%qz ΟK"7і~Tn5=OUݰrzv ^>_Y!O4?6%_AʻuT5 :jA]ToZy;_lѧ+SIBMh'\[b֡a%7s ;E}F͵g kS/+|KqDŽLg8cl(,}{?ULZs*0Q+Gu,e岀J"}۬FIvLPuh&С’oѾ1z4n ҩ*m2ȣ[t@$$0EҪ*>S:2q!s1lD7K3m>TҁM~Hc˵,_g)b7)ZMZ6Uem.*6,EDep7͞L^r#m~Ci0rs i}4>a#bKrzQ[}4:t(U+ ;㻷x%r?>ҩ{ S3]b.!{U%% i~e47dNN*B>ՄIl2+Azkyg7VVwJجw$ClpX{Й;ix.#7>֛7OJ_wP:]RQPHZ܏l= ^lQ?'A Q|2&>*䀑Ɯq}nsi07'E2G`U5E+ M_Vtf̎GM򇥕 ֶ_hcqȒ|~~$8,n`, fwRKiy&u4֚<}kTnFe86^eO~ٳ/2"ٳkJ骑vgogj7WCOFZ C^T1U|Ci?wN8IJ,*/1:T>9r}?Tn蘖`z,U*v5tKeՆtOPWI ͋?\Q.92쎮D B ":-6O5w@hVH~=^T/-$'%I*mq˒1Mru0N's2rrQjD8)M>2c#ki}DN]=?zdL“ i|:y~lۢ{[tnq%m>}< !g+SQĘvv̕߻VaɛQ8Ȓ0'rp,ˤ;UPCme6);IsWA  ?2 qVrcBȼ=Hfٶ%Ši7=IX^ddWj9FUqD#Eg}>PndNF s%Oqs~],{e9a&_Ylf)3t/#UKoU,.ѶiwƓm*aBxr^ܝܩ߉br(r31M+:j2z8Хe]1ڎUB'#:5f j**7M4DGa,-'s;Đ\JTBƫFP.5ٳъ^qĦce14rSp\Jn`j)j%+pu$>g \笐QB]5PxS^%6tXYgT 'w]!^*phpLקPNPJMۖ80}j%54hWuM*RxFX٭_f|9*olx}jhbѩfdf);ٰ6An).Js)61sI^ kta*?=2[ ʼn Qd;5@3rj@A1 u :ṭ?iDpL32; tȩ @d-SۃQL Q4}D=yq>;UM!}/q]Fﻗ[ 3/<_O6Ɠ[ipS^R7ؿ0;Ǭ2k$Z$(G:y˴V>. =V#Cp,/c2o;nQn&NXt( ! n5x] 4t2m1\Yrm C3?b?$H:xRV2'-@{_C] :h$@> 976Dcȿ ~yH#7RB.eci2# 8䞖 {52"=xUWb{R5{Wsj]zrf$k3򀨚GNgwᲈw+hCS#\l\c17#&x걌纳DGm_Ļel.sk>TV0IyM졦T˼*jPS!}v\tL6Gp"2wg';t4o0&&Sw^{4Mb׼:tBj{rs|B jWBwKsC1Rev' %)фw ,m3w 'U.qSe l m|nz%QO+K!LMKe- }/ 56 傗إbƐQ2"* =|H97E}/-/榎xT T 3f#Y[CDuVw BW OHi!+4YrH8T:Es)K M #{&y(H/ha< !hc&[ٷ]g6x끢h!2>/U- Ye'yًJ=FcLAc}}ַv@OkMUKeepQ5&˧#aCϏSiOJzgW:־,VAL[qvQɊgW"xHx }&&5>ͬ ,h"wX2|n@GM|WQY8;4`qEvvIvkn.q_zX<=데k}-wҶ$}HGl0_6V2p۹E~lF<wޗ؞sn{+l]Y '[+[f'5(`6Sc3d.aWHf>Sو;>5 Y KG+-(6څvvav_l"vDMa1p> Ќj\M~Y%sˆ%C[\Qq-ħFYϴ'e;I3& eLR_DOB/mY}5jȜX0<U(K^] 7F y$G'Z @JB>Lh$ٯd}W@Jכ]\^D&|w9,0F",Du] endstream endobj 244 0 obj << /Type /FontDescriptor /FontName /AJQEAL+CMTT9 /Flags 4 /FontBBox [-6 -233 542 698] /Ascent 611 /CapHeight 611 /Descent -222 /ItalicAngle 0 /StemV 74 /XHeight 431 /CharSet (/c/colon/d/e/g/h/hyphen/l/m/o/p/period/r/slash/t) /FontFile 243 0 R >> endobj 43 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JBEQZN+CMB10 /FontDescriptor 214 0 R /FirstChar 97 /LastChar 122 /Widths 212 0 R >> endobj 46 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QZKRDM+CMBX10 /FontDescriptor 216 0 R /FirstChar 65 /LastChar 116 /Widths 209 0 R >> endobj 44 0 obj << /Type /Font /Subtype /Type1 /BaseFont /KJXFBX+CMBX12 /FontDescriptor 218 0 R /FirstChar 14 /LastChar 121 /Widths 211 0 R >> endobj 72 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MBNPQC+CMBXSL10 /FontDescriptor 220 0 R /FirstChar 98 /LastChar 117 /Widths 205 0 R >> endobj 88 0 obj << /Type /Font /Subtype /Type1 /BaseFont /QSCWUE+CMMI10 /FontDescriptor 222 0 R /FirstChar 102 /LastChar 110 /Widths 197 0 R >> endobj 45 0 obj << /Type /Font /Subtype /Type1 /BaseFont /GDGRIS+CMR10 /FontDescriptor 224 0 R /FirstChar 11 /LastChar 123 /Widths 210 0 R >> endobj 92 0 obj << /Type /Font /Subtype /Type1 /BaseFont /WIRDCL+CMR6 /FontDescriptor 226 0 R /FirstChar 49 /LastChar 49 /Widths 190 0 R >> endobj 86 0 obj << /Type /Font /Subtype /Type1 /BaseFont /TNKJCO+CMR8 /FontDescriptor 228 0 R /FirstChar 49 /LastChar 49 /Widths 199 0 R >> endobj 94 0 obj << /Type /Font /Subtype /Type1 /BaseFont /VCBUMI+CMR9 /FontDescriptor 230 0 R /FirstChar 46 /LastChar 118 /Widths 189 0 R >> endobj 73 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DAPVTA+CMSL10 /FontDescriptor 232 0 R /FirstChar 46 /LastChar 117 /Widths 204 0 R >> endobj 89 0 obj << /Type /Font /Subtype /Type1 /BaseFont /EUGCVN+CMSLTT10 /FontDescriptor 234 0 R /FirstChar 34 /LastChar 126 /Widths 196 0 R >> endobj 47 0 obj << /Type /Font /Subtype /Type1 /BaseFont /JJUOZE+CMSS10 /FontDescriptor 236 0 R /FirstChar 51 /LastChar 121 /Widths 208 0 R >> endobj 49 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LNIRRM+CMTI10 /FontDescriptor 238 0 R /FirstChar 66 /LastChar 121 /Widths 206 0 R >> endobj 48 0 obj << /Type /Font /Subtype /Type1 /BaseFont /DQAOKE+CMTT10 /FontDescriptor 240 0 R /FirstChar 34 /LastChar 126 /Widths 207 0 R >> endobj 87 0 obj << /Type /Font /Subtype /Type1 /BaseFont /LRMHSN+CMTT12 /FontDescriptor 242 0 R /FirstChar 46 /LastChar 121 /Widths 198 0 R >> endobj 95 0 obj << /Type /Font /Subtype /Type1 /BaseFont /AJQEAL+CMTT9 /FontDescriptor 244 0 R /FirstChar 45 /LastChar 116 /Widths 188 0 R >> endobj 51 0 obj << /Type /Pages /Count 6 /Parent 245 0 R /Kids [38 0 R 69 0 R 83 0 R 97 0 R 101 0 R 106 0 R] >> endobj 114 0 obj << /Type /Pages /Count 6 /Parent 245 0 R /Kids [111 0 R 116 0 R 122 0 R 131 0 R 142 0 R 147 0 R] >> endobj 155 0 obj << /Type /Pages /Count 4 /Parent 245 0 R /Kids [152 0 R 157 0 R 174 0 R 180 0 R] >> endobj 245 0 obj << /Type /Pages /Count 16 /Kids [51 0 R 114 0 R 155 0 R] >> endobj 246 0 obj << /Type /Outlines /First 3 0 R /Last 35 0 R /Count 9 >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 246 0 R /Prev 31 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 246 0 R /Prev 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 246 0 R /Prev 23 0 R /Next 31 0 R >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 246 0 R /Prev 19 0 R /Next 27 0 R >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 246 0 R /Prev 15 0 R /Next 23 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 246 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 246 0 R /Prev 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 246 0 R /Prev 3 0 R /Next 11 0 R >> endobj 3 0 obj << /Title 4 0 R /A 1 0 R /Parent 246 0 R /Next 7 0 R >> endobj 247 0 obj << /Names [(Doc-Start) 42 0 R (Hfootnote.1) 93 0 R (Item.1) 119 0 R (Item.2) 120 0 R (Item.3) 125 0 R (Item.4) 126 0 R] /Limits [(Doc-Start) (Item.4)] >> endobj 248 0 obj << /Names [(Item.5) 127 0 R (Item.6) 128 0 R (Section.0.Introduction.1) 2 0 R (Section.1.The\040gsubfn\040Function.1) 6 0 R (Section.2.gsubfn\040with\040lists.1) 10 0 R (Section.3.gsubfn\040with\040proto\040objects.1) 14 0 R] /Limits [(Item.5) (Section.3.gsubfn\040with\040proto\040objects.1)] >> endobj 249 0 obj << /Names [(Section.4.strapply.1) 18 0 R (Section.5.Miscellaneous.1) 22 0 R (Section.6.fn.1) 26 0 R (Section.7.match.funfn\040and\040as.function.formula.1) 30 0 R (Section.8.Summary.1) 34 0 R (figure.1) 134 0 R] /Limits [(Section.4.strapply.1) (figure.1)] >> endobj 250 0 obj << /Names [(figure.2) 160 0 R (figure.3) 161 0 R (page.1) 41 0 R (page.10) 133 0 R (page.11) 144 0 R (page.12) 149 0 R] /Limits [(figure.2) (page.12)] >> endobj 251 0 obj << /Names [(page.13) 154 0 R (page.14) 159 0 R (page.15) 176 0 R (page.16) 182 0 R (page.2) 71 0 R (page.3) 85 0 R] /Limits [(page.13) (page.3)] >> endobj 252 0 obj << /Names [(page.4) 99 0 R (page.5) 103 0 R (page.6) 108 0 R (page.7) 113 0 R (page.8) 118 0 R (page.9) 124 0 R] /Limits [(page.4) (page.9)] >> endobj 253 0 obj << /Names [(section.1) 50 0 R (section.2) 76 0 R (section.3) 91 0 R (section.4) 77 0 R (section.5) 78 0 R (section.6) 79 0 R] /Limits [(section.1) (section.6)] >> endobj 254 0 obj << /Names [(section.7) 80 0 R (section.8) 81 0 R (section.9) 183 0 R] /Limits [(section.7) (section.9)] >> endobj 255 0 obj << /Kids [247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R] /Limits [(Doc-Start) (page.9)] >> endobj 256 0 obj << /Kids [253 0 R 254 0 R] /Limits [(section.1) (section.9)] >> endobj 257 0 obj << /Kids [255 0 R 256 0 R] /Limits [(Doc-Start) (section.9)] >> endobj 258 0 obj << /Dests 257 0 R >> endobj 259 0 obj << /Type /Catalog /Pages 245 0 R /Outlines 246 0 R /Names 258 0 R /PageMode/UseOutlines /OpenAction 37 0 R >> endobj 260 0 obj << /Author(Gabor Grothendieck)/Title(gsubfn: Utilities for Strings and for Function Arguments.)/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.14)/Keywords(gsub, strings, R) /CreationDate (D:20180315191750-04'00') /ModDate (D:20180315191750-04'00') /Trapped /False /PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.9.4902 (1.40.14)) >> endobj xref 0 261 0000000000 65535 f 0000000015 00000 n 0000004481 00000 n 0000272911 00000 n 0000000075 00000 n 0000000105 00000 n 0000015660 00000 n 0000272827 00000 n 0000000178 00000 n 0000000215 00000 n 0000015769 00000 n 0000272741 00000 n 0000000286 00000 n 0000000322 00000 n 0000019915 00000 n 0000272653 00000 n 0000000405 00000 n 0000000449 00000 n 0000026397 00000 n 0000272565 00000 n 0000000506 00000 n 0000000533 00000 n 0000031762 00000 n 0000272477 00000 n 0000000595 00000 n 0000000627 00000 n 0000031874 00000 n 0000272389 00000 n 0000000678 00000 n 0000000699 00000 n 0000066587 00000 n 0000272301 00000 n 0000000789 00000 n 0000000843 00000 n 0000068894 00000 n 0000272226 00000 n 0000000899 00000 n 0000000925 00000 n 0000004257 00000 n 0000004590 00000 n 0000000973 00000 n 0000004372 00000 n 0000004426 00000 n 0000269463 00000 n 0000269748 00000 n 0000270180 00000 n 0000269605 00000 n 0000271031 00000 n 0000271317 00000 n 0000271174 00000 n 0000004535 00000 n 0000271745 00000 n 0000008673 00000 n 0000009080 00000 n 0000009231 00000 n 0000009381 00000 n 0000009532 00000 n 0000009683 00000 n 0000009834 00000 n 0000009984 00000 n 0000010197 00000 n 0000010410 00000 n 0000010577 00000 n 0000010760 00000 n 0000010954 00000 n 0000015058 00000 n 0000015278 00000 n 0000015431 00000 n 0000011227 00000 n 0000008448 00000 n 0000004732 00000 n 0000011173 00000 n 0000269891 00000 n 0000270743 00000 n 0000008877 00000 n 0000072638 00000 n 0000015714 00000 n 0000019970 00000 n 0000026453 00000 n 0000031818 00000 n 0000031930 00000 n 0000066643 00000 n 0000015938 00000 n 0000014910 00000 n 0000011381 00000 n 0000015606 00000 n 0000270462 00000 n 0000271460 00000 n 0000270036 00000 n 0000270886 00000 n 0000070926 00000 n 0000015824 00000 n 0000270322 00000 n 0000015879 00000 n 0000270602 00000 n 0000271603 00000 n 0000020025 00000 n 0000019746 00000 n 0000016189 00000 n 0000019861 00000 n 0000022629 00000 n 0000022455 00000 n 0000020215 00000 n 0000022573 00000 n 0000026143 00000 n 0000026509 00000 n 0000026005 00000 n 0000022760 00000 n 0000026341 00000 n 0000069386 00000 n 0000028839 00000 n 0000028664 00000 n 0000026702 00000 n 0000028783 00000 n 0000271857 00000 n 0000032100 00000 n 0000031587 00000 n 0000028970 00000 n 0000031706 00000 n 0000031986 00000 n 0000032043 00000 n 0000034581 00000 n 0000034179 00000 n 0000032281 00000 n 0000034298 00000 n 0000034354 00000 n 0000034411 00000 n 0000034468 00000 n 0000034525 00000 n 0000036639 00000 n 0000042591 00000 n 0000036520 00000 n 0000034688 00000 n 0000042473 00000 n 0000042529 00000 n 0000039314 00000 n 0000039458 00000 n 0000039543 00000 n 0000039643 00000 n 0000039680 00000 n 0000039775 00000 n 0000044796 00000 n 0000044621 00000 n 0000042738 00000 n 0000044740 00000 n 0000050452 00000 n 0000047518 00000 n 0000047343 00000 n 0000044903 00000 n 0000047462 00000 n 0000056323 00000 n 0000049655 00000 n 0000049480 00000 n 0000047673 00000 n 0000049599 00000 n 0000271974 00000 n 0000063954 00000 n 0000050333 00000 n 0000049786 00000 n 0000063774 00000 n 0000063830 00000 n 0000063892 00000 n 0000053164 00000 n 0000053308 00000 n 0000053393 00000 n 0000053493 00000 n 0000053530 00000 n 0000053625 00000 n 0000060700 00000 n 0000060844 00000 n 0000060944 00000 n 0000060981 00000 n 0000061076 00000 n 0000066699 00000 n 0000066412 00000 n 0000064102 00000 n 0000066531 00000 n 0000068486 00000 n 0000068660 00000 n 0000069007 00000 n 0000068339 00000 n 0000066866 00000 n 0000068838 00000 n 0000068950 00000 n 0000069174 00000 n 0000069632 00000 n 0000069658 00000 n 0000069719 00000 n 0000069755 00000 n 0000070062 00000 n 0000070494 00000 n 0000070519 00000 n 0000070717 00000 n 0000071170 00000 n 0000071314 00000 n 0000071393 00000 n 0000071442 00000 n 0000071833 00000 n 0000071902 00000 n 0000072377 00000 n 0000072402 00000 n 0000072882 00000 n 0000072907 00000 n 0000072970 00000 n 0000073007 00000 n 0000073411 00000 n 0000073546 00000 n 0000073883 00000 n 0000074274 00000 n 0000074695 00000 n 0000075014 00000 n 0000075641 00000 n 0000076270 00000 n 0000076441 00000 n 0000086127 00000 n 0000086381 00000 n 0000096005 00000 n 0000096238 00000 n 0000111159 00000 n 0000111502 00000 n 0000119568 00000 n 0000119802 00000 n 0000127143 00000 n 0000127367 00000 n 0000150914 00000 n 0000151408 00000 n 0000158409 00000 n 0000158629 00000 n 0000165628 00000 n 0000165848 00000 n 0000177292 00000 n 0000177555 00000 n 0000189838 00000 n 0000190116 00000 n 0000209900 00000 n 0000210489 00000 n 0000218814 00000 n 0000219064 00000 n 0000232805 00000 n 0000233077 00000 n 0000254400 00000 n 0000254992 00000 n 0000259914 00000 n 0000260171 00000 n 0000269200 00000 n 0000272075 00000 n 0000272152 00000 n 0000272982 00000 n 0000273153 00000 n 0000273467 00000 n 0000273743 00000 n 0000273914 00000 n 0000274079 00000 n 0000274240 00000 n 0000274420 00000 n 0000274544 00000 n 0000274654 00000 n 0000274735 00000 n 0000274816 00000 n 0000274854 00000 n 0000274981 00000 n trailer << /Size 261 /Root 259 0 R /Info 260 0 R /ID [<0FBA306E02949DAF9C89A1B144AC5164> <0FBA306E02949DAF9C89A1B144AC5164>] >> startxref 275347 %%EOF gsubfn/inst/sample.txt0000644000176200001440000006552413252555677014572 0ustar liggesusersRight It is virtually impossible for a hearing person to imagine what it is like to be born into silence. The brief contains schedules and an organisational chart. Joyce &bquo;He's just a few minutes early for the unveiling of the new me. She had turned as he entered, as if some mystical outside force had willed it. Oh sorry apologize to the last guy he didn't. Also, the project is proving to be even larger than originally thought. One more child had died in 1768, shortly to be followed by the births of daughters Elizabeth and Mary. As for NT, Microsoft is back describing it as primarily a server operating system, and acknowledging that vendors are unlikely to bundle it with more than about 10% of the desktop machines they ship. It now also has multiple SCSI-2 channel support so that the system can link to a wider variety of disk, tape and other input-output devices. The signals fluctuate in cycles: if radio energy fluctuates at one cycle every second, then it has a frequency of one Hertz. In implementing our strategy, we aim to: To say I've had it, yeah. Those are my only remaining memories of the first five years. Tickled pinkAmid the celebrations of Sunderland becoming the United Kingdom's newest city, there was much talk of new investment and jobs following in the wake of the announcement. YOU CAN'T CATCH HIV IN ANY OF THESE WAYS: DOUBLE TAKE Aye. Amand v. Home Secretary and Minister of Defence of Royal Netherlands Government [1943] A.C. 147, H.L. (E.); Carr v. Atkins [1987] Q.B. If one plots the sites of all the recently-active volcanoes in the world on a map, one finds that several distinct, narrow chains exist, some of these running along the edges of continental land masses, some along island arcs and some of them through the sea [see Fig. 1]. Just off dry, infact. Now by that he meant that the ends sought should be closely defined and should not change and the means adopted should be effective and they should not change and the consequence is that adversaries then move into er er conflict but the conflict itself is self-limiting in the sense that one side will accept defeat er and, and the consequences of victory and clearly these consequences are not so severe to the state as to jeopardise its existence. The BBC staff union Bectu called the recommendations a &bquo;secret agenda&equo; by which the BBC hoped to pre-empt public debate about its size and role by &bquo;drastic job cuts&equo; and reducing essential resources. Dumper trucks will normally not be classified as motor vehicles as they are not intended or adapted for use on roads. Erm . The Franks, over whom Charlemagne came to reign in the year 768, were originally a loose confederation of Germanic tribes. The blaze at Bunchrew Park started when Simon Kent, 25, from Fareham, and Joanne Womar, 23, from Portsmouth, were changing the refill of a gas lamp. Right simply because we can rewrite this top expression as AQ to the minus beta. Is it the will of the assembly to accept that addendum? Are there any major problems with Susan and John at all Tracey? the organisation of Information Services, with good integration of various elements provided for students and a conscious attempt to offset the continued pressure on library resource. The pair joined 18 other members of the Royal Auxiliary Air Force Regiment from RAF Honington in Suffolk, to achieve a total descent of 14,400ft the approximate equivalent in height to the Matterhorn mountain in the Alps. The aim is to reduce the pattern level ambiguity until only allowable words remain. If you measure a web built outdoors, you will know how large the cage must be. On March 14 the Lithuanian Supreme Council passed a resolution saying that Lithuanians would no longer be required to serve in the Red Army and that conscripts who deserted would not be held criminally responsible. WELLA! Richfield International Land and Investment Co. We now in manufacturing where there's been a decline in employment since the nineteen sixties, we now have four million workers in manufacturing producing more than seven million produced fifteen years ago. GONE WEST Okay? Was workers control a prominent part of people's thinking on this like? " Postcript: and so to bed", an unmistakable token of its author's skill and wit, is presented in the form of a short story narrated from two viewpoints, His and Hers, which allude to the style of actionbooks and romances respectively. Three years later he switched to the Daily Mirror; he was still based in Yorkshire, covering the local beat. The paper was also highly commended in the UK Press Gazette Regional Newspaper Awards. The largest previous Semtex bomb on the mainland 70lb did not explode. TUNISIA: Islam student leader Faisal Barakat, who died in custody in October 1991, was tortured to death, according to an expert analysis of the official autopsy report commissioned by AI from a professor of forensic medicine. When he started at the NHS in Scotland in 1989 he took the same approach. They did, do then, put a pencil to there, mm you've already done it haven't it An orientation now among many of these displaced militants no longer on the working class but on the peasantry and on developing the struggle of the peasantry as a way of creating a base, a new base, er for the Communist Party in the countryside. But" Jolly Jack" was evidently one thing and" Poor Jack" another. Arsonists destroy Greek forests A smaller majority of Labour partisans asserted that their papers had a pro-Labour bias (22 per cent rising to 32 per cent). The growth has come from privatisation of services provided in the public sectors, particularly healthcare and education and from catering for the public. For example, the government could create a flow from the private sector by selling government stock. In so doing he may come as near as he can ever hope to an understanding of war as people of the late Middle Ages knew it, no easy task even in the most favourable conditions, but one which cannot be attempted with any hope of success without a proper appreciation of the many threads which make up history. Photovoltaics is still five times as expensive as conventional power generation. In particular, the Anadarko/LASMO/Maersk joint venture is excited about a recent adjacent discovery in the northern Ghadames basin. For some departments in the University visits can normally only be arranged on certain weekdays (typically Wednesday afternoons), and some faculties have preferred days for visits: Law (Friday afternoons); Medicine (Wednesday afternoons only); Music (Thursday afternoons). His descendants were to have good reason for echoing such sentiments in relation to the behaviour of Henry VIII's troops in Scotland. It is an abstract art, which we none the less consume as readers rather than as connoisseurs of pure form. As an alternative, the investor might consider investing in the CD just considered. From what I can gather he was as mad as a hatter, and really no good at all. Thickets of fawn papery stems, tender green as they unfurl in the spring, have a specialized ecology all of their own. It is applicable to a wide range of patients and their complaints, and its main limitations are in all likelihood the limitations of the practitioner himself. Ah ah! Aha. As Johnson puts it (1975), trust is not a &bquo;one shot agreement&equo; but is continually negotiated during field-work (also see Emerson 1983: 176; van Maanen 1982). The latter was essentially isolated within the Conservative parliamentary party. But does that stop the problem if if we report someone for depositing litter I E a settee, I mean they don't want to really deposit it there, is it quality of life that's forced them to do it. cos our, our have even put him at two, you know, so that's brilliant! We usually are. Inside The Brotherhood (Granada), produced by Claudia Milne and Martin Short, dug into the most notorious area of Masonic influence, local government. (Boys have been engaged in flower arranging, &bquo;care&equo; activities and theatrical make–up). One example of how science clearly falls within the remit of another department is in environmental policy. If you've ever wanted to get your hands on a Leica then a series of three Day Leica School Courses may give you your chance. In this judgment I shall use the expression &bquo;unregistered company&equo; to mean any company which is liable to be wound up under Part V of the Act of 1986. Alright chief. South Shore Again, according to self reports from people who've actually been abused in this way. During the party leadership contest much emphasis had been placed in the media on the fact that Major had not had the advantage of a privileged home background or education, that his father had once been a trapeze artist, that his family had lived in a flat in Brixton in South London, and that he had left school at 16 and been unemployed for some time. Even the Association headquarters was worth less than its mortgage. knowledge of abortive techniques was widespread in factory districts and spreading due to the interchange of information in the mills, to increase in therapeutic abortions carried out by surgeons, and to the publicity of quacks for their abortifacients. Crustose lichens . He accused Labour and the Liberal Democrats of flirting with PR for party political gain. By the year 2000 it will overtake the USA in terms of production and account for one-fifth of the energy produced in the world. All appeared to us to be warm, positive, enthusiastic people always praising, rarely criticising. Having opened up the process of selecting technologies that surround the core System V.4 operating system beyond Unix System Laboratories Inc, Unix International plans to go to the industry at large for three technologies this year, according to president Peter Cunningham. DRAMATIC STYLING FROM MO AT M & M Hang on let me show, let me find a bit of bloody paper here, silly bloody arse But, in both cases, the need for and expense of the stores arises from the nuclear industry's failure to plan ahead for getting rid of its waste. On this sheet, on page two, we've er, we've performed equation two, right, on the sheet and the second page and it says that there's, there are two alternative ways of testing for structural change using dummy variables. For from below there sounds the cracking of twigs. A a a and that i i if that's sort of what you're saying. The delay was highlighted in New Scientist (16 December 1982, p 707) and later on the television programme Panorama . The University will award honourary degrees at the graduation ceremonies on 1 and 2 July. Treasurer Current account £484.53, Investment account £4820.27. Thus some affected beams which are riddled with holes and appear to be useless, may be found, on investigation, to contain solid heartwood quite adequate to perform their structural roles. gsubfn/inst/unitTests/0000755000176200001440000000000013252555677014536 5ustar liggesusersgsubfn/inst/unitTests/runit.all.R0000644000176200001440000000620213252555677016571 0ustar liggesusers # To run these tests: # library(gsubfn) # library(svUnit) # runit.all <- system.file("unitTests", "runit.all.R", package = "sqldf") # source(runit.all); clearLog(); test.all() # Log() test.all <- function() { checkIdentical( gsubfn('([0-9]+):([0-9]+)', ~ as.numeric(x) + as.numeric(y), 'abc 10:20 def 30:40 50'), "abc 30 def 70 50" ) checkIdentical( gsubfn('[MGP]$', ~ c(M = 'e6', G = 'e9', P = 'e12')[[x]], c('3.5G', '88P', '19')), c("3.5e9", "88e12", "19") ) checkIdentical( gsubfn('[MGP]$', ~ list(M = 'e6', G = 'e9', P = 'e12')[[x]], c('3.5G', '88P', '19')), c("3.5e9", "88e12", "19") ) checkIdentical( gsubfn("\\B.", tolower, "I LIKE A BANANA SPLIT", perl = TRUE), "I Like A Banana Split" ) p <- proto(fun = function(this, x) paste0(x, "{", count, "}")) checkIdentical( gsubfn("\\w+", p, c("the dog and the cat are in the house", "x y x")), c("the{1} dog{2} and{3} the{4} cat{5} are{6} in{7} the{8} house{9}", "x{1} y{2} x{3}") ) pwords <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 paste0(x, "{", words[[x]], "}") } ) checkIdentical( gsubfn("\\w+", pwords, "the dog and the cat are in the house"), "the{1} dog{1} and{1} the{2} cat{1} are{1} in{1} the{3} house{1}" ) s2 <- c('123abc', '12cd34', '1e23') target <- matrix(c("123", "12", "1", "abc", "cd34", "e23"), 3) checkIdentical( strapply(s2, '^([[:digit:]]+)(.*)', c, simplify = rbind), target ) if (require(tcltk)) { checkIdentical( strapplyc(s2, '^([[:digit:]]+)(.*)', simplify = rbind), target ) } ss <- c('a:b c:d', 'e:f') target <- list(c("a", "b", "c", "d"), c("e", "f")) checkIdentical(strapply(ss, '(.):(.)', c), target) checkIdentical(strapplyc(ss, '(.):(.)'), target) checkIdentical( strapply(ss, '(.):(.)', c, combine = list), list(list(c("a", "b"), c("c", "d")), list(c("e", "f"))) ) checkIdentical( strapply(' a b c d e f ', ' [a-z](?=( [a-z] ))', paste0)[[1]], c(" a", " b", " c", " d", " e") ) checkIdentical( round(fn$integrate(~ sin(x) + sin(x), 0, pi/2)$value), 2 ) checkIdentical( fn$lapply(list(1:4, 1:5), ~ LETTERS[x]), list(LETTERS[1:4], LETTERS[1:5]) ) checkIdentical( fn$mapply(~ seq_len(x) + y * z, 1:3, 4:6, 2), list(9, c(11, 12), c(13, 14, 15)) ) checkIdentical( gsubfn("\\B.", tolower, "I LIKE A BANANA SPLIT", perl = TRUE), "I Like A Banana Split" ) pwords2 <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 list(x, words[[x]]) } ) checkIdentical( strapply("the dog and the cat are in the house", "\\w+", pwords2, combine = list, simplify = x ~ do.call(rbind, x) ), structure(list("the", "dog", "and", "the", "cat", "are", "in", "the", "house", 1, 1, 1, 2, 1, 1, 1, 3, 1), .Dim = c(9L, 2L)) ) checkIdentical( strapplyc("a:b c:d", "(.):(.)")[[1]], letters[1:4] ) } gsubfn/NAMESPACE0000644000176200001440000000030613252556136012764 0ustar liggesusers# Export all names exportPattern(".") export("list") S3method("[<-", "result") S3method("as.function", "formula") S3method("$", "fn") import(proto) importFrom("utils", "read.table") gsubfn/demo/0000755000176200001440000000000013252555677012503 5ustar liggesusersgsubfn/demo/gsubfn-gries.R0000644000176200001440000000207513252555677015225 0ustar liggesusers # linguistic applications by Stefan Th. Gries # create word frequency list from the gsubfn COPYING file fn1 <- system.file("lipsum.txt", package = "gsubfn") Lines1 <- tolower(scan(fn1, what = "char", sep = "\n")) tail(sort(table(unlist(strapply(Lines1, "\\w+", perl = TRUE))))) # frequency list of words from an SGML-annotated text file # sampled from the British National Corpus" fn2 <- system.file("sample.txt", package = "gsubfn") Lines2 <- scan(fn2, what = "char", sep = "\n") tagged.corpus.sentences <- grep("^([^<]*)")) words <- gsub(" $", "", words) tail(words, 25) # frequency list of words AND tags from same file word.tag.pairs <- unlist(strapply(tagged.corpus.sentences, "<[^<]*")) cleaned.word.tag.pairs <- grep(" 0) values.replacement[[idx]] else ..1 } } # if (inherits(replacement, "formula")) replacement <- as.function(replacement) if (missing(pattern)) pattern <- "[$]([[:alpha:]][[:alnum:].]*)|`([^`]+)`" pattern <- as.character(pattern) # proto object as replacement e <- NULL if (!inherits(replacement, "formula") && !is.function(replacement)) { e <- replacement e$pattern <- pattern e$x <- x e$backref <- if (!missing(backref)) backref e$USE.NAMES <- USE.NAMES e$env <- env dots <- list(...) if (!is.null(names(dots))) { nam <- names(dots) for(n in nam[nam != ""]) assign(n, dots[[n]], e) } e$replacement <- function(this, ...) { this$count <- this$count + 1 this$match <- c(...) this$fun(...) } here$replacement <- e$replacement } here$replacement <- match.funfn(replacement) if (missing(backref) || is.null(backref)) { noparen <- base::gsub("\\\\.", "", pattern) noparen <- base::gsub("\\[[^\\]]*\\]", "", noparen) backref <- - nchar(base::gsub("[^(]","", noparen)) } # if `&` is an argument then force backref to be 0 or positive if (names(formals(here$replacement))[[1]] == "&") { backref <- abs(backref) if (!is.null(e)) e$backref <- backref } # cat("backref:", backref, "\n") # Note. an extra set of parens are inserted if engine is R and backref <= 0 # no of parens is the number of parentheses excluding escaped parentheses # if engine=="R" then i=1 and j=no of backrefs + 1 for match if backref>=0 # if engine!="R" then i=0 if backref<0 and i=1 otherwise. j=abs(backref) j <- (identical(engine, "R") && !is.null(backref) && backref >= 0) + abs(backref) i <- if (!R.engine && backref >= 0) 0 else 1 # check if this next line is actually needed j <- max(i, j) # cat("i:", i, "j:", j, "\n") stopifnot(is.character(pattern), is.character(x), is.function(replacement)) force(env) gsub.function <- function(x) { # x <- base::gsub('"', '\\\\"', x) # x <- chartr('"', '\b', x) # pattern <- chartr('"', '\b', pattern) if (R.engine && !is.null(backref) && backref >=0) { pattern <- paste("(", pattern, ")", sep = "") } if (!is.null(e)) { e$count <- 0 if ("pre" %in% ls(e)) e$pre() } # replace each substring of x that matches pattern with # \1\2 followed by backrefs separated by \2 all followed by \1. # Note \\1 refers to entire match, \\2 to 1st backref, \\3 to 2nd etc. # Using that create a string \1\2 first backref \2 second ... \1 # and perform replacement. # For example, z <- gsub("((.)/(.))", "\001\002\\2\002\\3\001", "5/6 8/9") # gives z = "\001\0025\0026\001 \001\0028\0029\001" # and then split z on \1 repl <- function(i,j) { rs <- paste('\\', seq(i,j), collapse = "\2", sep = "") rs <- paste('\1\2', rs, '\1', sep = "") # if backref= is too large, reduce by 1 and try again if (R.engine) tryCatch(base::gsub(pattern, rs, x, ignore.case = ignore.case, ...), error = function(x) if (j > i) repl(i,j-1) else stop(x)) else { tcl("set", "pattern", pattern) tcl("set", "replacement", rs) tcl("set", "x", x) s <- if (ignore.case) { 'set r [regsub -all -nocase -- $pattern $x $replacement]' } else 'set r [regsub -all -- $pattern $x $replacement]' tryCatch(tclvalue(.Tcl(s)), error = function(x) if (j > i) repl(i,j-1) else stop(x)) } } z <- repl(i,j) z <- strsplit(z, "\1")[[1]] # f splits string s into back references passing them to replacement fn f <- function(s) { if (nchar(s) > 0 && substring(s,1,1) == "\2") { s <- sub("\2$", "\2\2", s) L <- as.list(strsplit(s, "\2")[[1]][-1]) # if (!is.null(e)) L <- c(list(e), L) do.call(replacement, L) } else s } z <- paste(sapply(z, f), collapse = "") if (!is.null(e) && "post" %in% ls(e)) e$post() z # gsub('\b', '\\\\"', z) } # debug(gsub.function) sapply(x, gsub.function, USE.NAMES = USE.NAMES) } ostrapply <- function (X, pattern, FUN = function(x, ...) x, ignore.case = FALSE, ..., empty = NULL, simplify = FALSE, USE.NAMES = FALSE, combine = c) { here <- environment() combine <- match.funfn(combine) if (is.character(FUN)) { FUN.orig <- FUN FUN <- function(...) FUN.orig } else if (is.list(FUN)) { values.replacement <- FUN names.replacement <- names(FUN) here$FUN <- function(...) { idx <- match(..1, names.replacement, nomatch = match("", names.replacement, nomatch = 0)) if (idx > 0) values.replacement[[idx]] else ..1 } } p <- if (is.proto(FUN)) { FUN$X <- X FUN$pattern <- pattern FUN$simplify <- simplify FUN$USE.NAMES <- USE.NAMES FUN$combine <- combine proto( pre = function(this) { this$first <- TRUE this$v <- NULL if (!is.null(FUN[["pre"]])) FUN$pre() }, fun = function(this, ...) { FUN$count <- this$count this$v <- if (this$first) combine(FUN$fun(...)) else c(this$v, combine(FUN$fun(...))) this$first <- FALSE }, post = function(this) { # cat("A:", first, "\n") if (this$first) this$v <- NULL if (!is.null(FUN[["post"]])) FUN$post() }, ) } else { FUN <- match.funfn(FUN) proto( pre = function(this) { this$first <- TRUE this$v <- NULL }, fun = function(this, ...) { this$v <- if (this$first) combine(FUN(...)) else c(this$v, combine(FUN(...))) this$first <- FALSE }, post = function(this) { # cat("B:", first, "\n") if (this$first) this$v <- NULL } ) } ff <- function(x, ...) { gsubfn(pattern, p, x, engine = "R", ignore.case = ignore.case, ...); p$v } result <- sapply(X, ff, ..., simplify = isTRUE(simplify), USE.NAMES = USE.NAMES) if (is.logical(simplify)) result else { do.call(match.funfn(simplify), result) } } strapply <- function (X, pattern, FUN = function(x, ...) x, backref, ..., empty, ignore.case = FALSE, perl = FALSE, engine, simplify = FALSE, USE.NAMES, combine = c) { if (missing(backref)) backref <- NULL if (missing(empty)) empty <- NULL if (missing(USE.NAMES)) USE.NAMES <- FALSE if (missing(engine)) engine <- getOption("gsubfn.engine") combine <- match.funfn(combine) stopifnot(!missing(pattern)) pattern <- as.character(pattern) if (is.proto(FUN) || perl) engine <- "R" if (identical(engine, "R")) return(ostrapply(X = X, ignore.case = ignore.case, pattern = pattern, FUN = FUN, backref = backref, ..., empty = empty, perl = perl, simplify = simplify, USE.NAMES = USE.NAMES, combine = combine)) if (is.proto(FUN)) { # TODO } else if (is.character(FUN)) { FUN.orig <- FUN FUN <- function(...) FUN.orig } else if (is.list(FUN)) { values.replacement <- FUN names.replacement <- names(FUN) FUN <- function(...) { idx <- match(..1, names.replacement, nomatch = match("", names.replacement, nomatch = 0)) if (idx > 0) values.replacement[[idx]] else ..1 } } else { FUN <- match.funfn(FUN) } # ff is called for each component of the vector of strings ff <- function(x) { s <- strapply1(x, pattern, backref, ignore.case) if (length(s) == 0 && !is.null(empty)) s <- matrix(empty, 1) L <- lapply(seq_len(ncol(s)), function(j) { combine(do.call(FUN, as.list(s[, j]))) }) # combine(do.call(FUN, list(s[, j]))) }) do.call("c", L) } result <- sapply(X, ff, simplify = is.logical(simplify) && simplify, USE.NAMES = USE.NAMES) if (is.logical(simplify)) result else do.call(match.funfn(simplify), result) } strapply1 <- function(x, e, backref, ignore.case = FALSE) { .Tcl <- tcltk::.Tcl tcl <- tcltk::tcl tclvalue <- tcltk::tclvalue tcl("set", "e", e) tcl("set", "x", x) .Tcl('set about [regexp -about -- $e]') about <- as.numeric(tclvalue(.Tcl("lindex $about 0"))) + 1 s <- if (ignore.case) 'set r [regexp -all -inline -nocase -- $e $x]' else 'set r [regexp -all -inline -- $e $x]' # .Tcl('set r [regexp -all -inline -- $e $x]') .Tcl(s) n <- as.numeric(tclvalue(.Tcl("llength $r"))) out <- sapply(seq(0, length = n), function(i) tclvalue(.Tcl(paste("lindex $r", i)))) out <- matrix(out, about) if (is.null(backref)) { if (about > 1) out[-1,, drop = FALSE] else out } else { mn <- 1 + (backref < 0) mx <- min(abs(backref) + 1, about) out[seq(mn, mx),, drop = FALSE] } } gsubfn/R/read.pattern.R0000644000176200001440000000142613252555677014475 0ustar liggesusers read.pattern <- function(file, pattern = "[^[:space:]]+", perl = FALSE, text, sep = "\01", fileEncoding = "", ...) { if (missing(file) && !missing(text)) { file <- textConnection(text) on.exit(close(file)) } if (is.character(file)) { file <- if (nzchar(fileEncoding)) file(file, "rt", encoding = fileEncoding) else file(file, "rt") on.exit(close(file)) } if (!inherits(file, "connection")) stop("'file' must be a character string or connection") if (!isOpen(file, "rt")) { open(file, "rt") on.exit(close(file)) } text <- readLines(file) tmp <- sapply(strapplyc(text, pattern), paste, collapse = "\01") read.table(text = tmp, sep = sep, ...) } gsubfn/R/fn.R0000644000176200001440000001122213252555677012504 0ustar liggesusersas.function.formula <- function(x, ...) { vars <- setdiff(all.vars(x[[2]]), c("letters", "LETTERS", "pi")) dotdot <- grepl("^[.][.][1-9.]$", vars) if (any(dotdot)) vars <- c(setdiff(vars[!dotdot], "..."), "...") if ("&" %in% vars) vars <- c("&", setdiff(vars, c("...", "&")), "...") if (length(vars) == 0) { f0 <- function() {} body(f0) <- x[[length(x)]] environment(f0) <- environment(x) f0 } else { f <- function(x) {} formals(f) <- rep(as.list(formals(f)), length(vars)) names(formals(f)) <- vars body(f) <- x[[length(x)]] environment(f) <- environment(x) f } } match.funfn <- function(FUN, descend = TRUE) { if (is.function(FUN)) return(FUN) if (inherits(FUN, "formula")) return(as.function.formula(FUN)) if (!(is.character(FUN) && length(FUN) == 1 || is.symbol(FUN))) { FUN <- eval.parent(substitute(substitute(FUN))) if (!is.symbol(FUN)) stop(gettextf("'%s' is not a function, character or symbol", deparse(FUN)), domain = NA) } envir <- parent.frame(2) if (descend) FUN <- get(as.character(FUN), mode = "function", envir = envir) else { FUN <- get(as.character(FUN), mode = "any", envir = envir) if (!is.function(FUN)) stop(gettextf("found non-function '%s'", FUN), domain = NA) } return(FUN) } fn <- structure(NA, class = "fn") "$.fn" <- function(x, FUN) { env <- parent.frame() mf <- match.fun(FUN) function(...) { args <- list(...) mc <- if (is.primitive(mf)) match.call() else match.call(mf) mc1 <- mc[-1] nm <- names(mc1) if (is.null(nm)) nm <- rep("", length(args)) mcList <- as.list(mc1) p <- parent.frame() mcListE <- lapply(mcList, eval, p) # if simplify found set it and remove it from lists simplify <- NULL idx <- match("simplify", tolower(nm), nomatch = 0) if (idx > 0) { if (!is.logical(mcListE[[idx]])) { simplify <- mcListE[[idx]] mcListE <- mcListE[-idx] mcList <- mcList[-idx] nm <- nm[-idx] } } # is.fo is a logical vector indicating whether # each list element is or is not a formula # is.fo2 is a logical vector indicating whether each # list element has or does not have a ~~ (double ~) is.fo <- sapply(mcListE, function(x) inherits(x, "formula")) any.fo <- any(is.fo) is.fo2 <- sapply(mcListE, function(x) inherits(x, "formula") && length(x[[length(x)]]) > 1 && identical(x[[length(x)]][[1]], as.name("~"))) # change ~~ to ~ any.fo2 <- any(is.fo2) if (any.fo2) for(i in seq(along = mcListE)) if (is.fo2[i]) { len <- length(mcListE[[i]]) mcListE[[i]][[len]] <- mcListE[[i]][[len]][[2]] mcListE[[i]] <- as.function(mcListE[[i]]) } is.char <- sapply(mcListE, is.character) any.char <- any(is.char) is.chara <- sapply(mcListE, function(x) is.character(x) && substring(x, 1, 1) == "\1") # remove leading \1 on character strings any.chara <- any(is.chara) if (any.chara) for(i in seq(along = mcListE)) if (is.chara[i]) mcListE[[i]] <- gsubfn(x = substring(mcListE[[i]], 2), env = p) # if no ~~ formulas and no \1 strings use default strategy # of converting all formulas to functions and if no formulas # performing perl-style interpolation on all strings if (!any.fo2 && !any.chara) { if (any.fo) { for(i in seq(along = mcListE)) if (is.fo[i]) mcListE[[i]] <- as.function(mcListE[[i]]) } else { if (any.char) for(i in seq(along = mcListE)) if (is.char[i]) mcListE[[i]] <- gsubfn(x = mcListE[[i]], env = p) } } # out <- do.call(FUN, args) # out <- withVisible(FUN, mcListE, env=p)) out <- withVisible(do.call(FUN, mcListE, envir=p)) vis <- out$visible out <- out $value if (!is.null(simplify)) { if(!is.list(out)) out <- list(out) out <- withVisible(do.call(simplify, out)) vis <- out$visible out <- out$value } if (vis) out else invisible(out) } } matrixfn <- function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL) { if (!is.function(data) & !inherits(data, "formula")) return(matrix(data = data, nrow = nrow, ncol = ncol, byrow = byrow, dimnames = dimnames)) data. <- match.funfn(data) out <- matrix(nrow = nrow, ncol = ncol, dimnames = dimnames) for(i in seq_len(nrow)) for(j in seq_len(ncol)) out[i, j] <- data.(i, j) out } # test # fn$list(x ~ 2*x) # fn$mapply(~ x + y, 1:10, 21:30) cat0 <- function(..., sep = "") cat(..., sep = sep) # paste0 <- function(..., sep = "") paste(..., sep = sep) gsubfn/R/list.R0000644000176200001440000000051513252555677013057 0ustar liggesuserslist <- structure(NA,class="result") "[<-.result" <- function(x,...,value) { args <- as.list(match.call()) args <- args[-c(1:2,length(args))] length(value) <- length(args) for(i in seq(along=args)) { a <- args[[i]] if(!missing(a)) eval.parent(substitute(a <- v,list(a=a,v=value[[i]]))) } x } gsubfn/R/zzz.R0000644000176200001440000000072513252555677012744 0ustar liggesusers .onAttach <- function(libname, pkgname) { gsubfn.engine <- getOption("gsubfn.engine") # if gsubfn.engine was not set to "R" then check if tcltk can be used if ( ! identical(gsubfn.engine, "R") ) { tcltk.ok <- isTRUE(capabilities()[["tcltk"]]) && requireNamespace("tcltk", quietly = TRUE) if ( ! tcltk.ok ) { options(gsubfn.engine = "R") packageStartupMessage('Could not load tcltk. Will use slower R code instead.') } } } gsubfn/vignettes/0000755000176200001440000000000013252577442013561 5ustar liggesusersgsubfn/vignettes/gsubfn.Rnw0000644000176200001440000007700513252575432015543 0ustar liggesusers\documentclass[nojss]{jss} \DeclareGraphicsExtensions{.pdf,.eps} %% need no \usepackage{Sweave} \author{Gabor Grothendieck\\GKX Associates Inc.} \Plainauthor{Gabor Grothendieck} \title{\pkg{gsubfn}: Utilities for Strings and for Function Arguments.} \Plaintitle{gsubfn: Utilities for Strings and for Function Arguments.} \Keywords{gsub, strings, \proglang{R}} \Plainkeywords{gsub, strings, R} \Abstract{ \pkg{gsubfn} is an \proglang{R} package used for string matching, substitution and parsing. A seemingly small generalization of \code{gsub}, namely allow the replacement string to be a replacement function, formula or \pkg{proto} object, can result in significantly increased power and applicability. The resulting function, \code{gsubfn} is the namesake of this package. Built on top of \code{gsubfn} is \code{strapply} which is similar to \code{gsubfn} except that it returns the output of the function rather than substituting it back into the source string. In the case of a replacement formula the formula is interpreted as a function as explained in the text. In the case of a replacement \pkg{proto} object the object space is used to store persistant data to be communicated from one function invocation to the next as well as to store the replacement function/method itself. The ability to have formula arguments that represent functions can be used not only in the functions of the \pkg{gsubfn} package but can also be used with any \proglang{R} function without modifying its source. Just preface any \proglang{R} function with \code{fn\$} and subject to certain rules which are intended to distinguish which formulas are intended to be functions and which are not, the formula arguments will be translated to functions, e.g. \code{fn\$integrate(\~{} x\^{}2/, 0, 1)}. This facility has widespread applicability right across \proglang{R} and its packages. \code{match.funfn}, is provided to allow developers to readily build this functionality into their own functions so that even the \code{fn\$} prefix need not be used. } \Address{ Gabor Grothendieck\\ GKX Associates Inc.\\ E-mail: \email{ggrothendieck@gmail.com} } \begin{document} \SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{gsubfn: Utilities for Strings and for Function Arguments.} %\VignetteDepends{proto} %\VignetteKeywords{gsub, strings, R} %\VignettePackage{gsubfn} <>= library("gsubfn") library("proto") @ \section{Introduction} \label{sec:intro} The \proglang{R} system for statistical computing %% \citep[\url{http://www.R-project.org/}]{zoo:R:2005} contains a powerful function for string substitution called \code{gsub} which takes a regular expression, replacement string and source string and replaces all matches of the regular expression in the source string with the replacement string. Parenthesized items in the regular expression, called back references, can be referred to in the replacement string further increasing the range of applications that \code{gsub} can address. The key function and namesake of the \pkg{gsubfn} package is a function which is similar to \code{gsub} but the replacement string can optionally be a replacement function, formula (representing a function) or replacement \code{proto} object. Associated functions built on top of \code{gsubfn} are \code{strapply} which is an \code{apply} style function that is like \code{gsubfn} except that it returns the output of the replacement function rather than substituting it back into the string and \code{strapplyc} which is a faster version specialized to use \code{c} rather than a general function. In the case that a function is passed to \code{gsubfn}, for each match of the regular expression in the source string, the replacement function is called with one argument per backreference or if no backreferences with the match (unless instructed otherwise by the \code{backref} argument). The output of the replacement function is substituted back into the string replacing the match. In those cases where persistance is needed between invocations of the function a \code{proto} object containing a replacement method (a method is another name for function in this context) can be used and the object itself can be used by the replacement method as a repository for data that is to persist between calls to the replacement method. Such persistant data might be counts, prior matches and so on. Also \code{gsubfn} automatically places the argument values that \code{gsubfn} was called with as well as a \code{count} representing the number of matches so far into the object for use by the function. \code{pre} and \code{post} functions can also be entered into the object and are triggerred at the beginning and end, respectively, of each string. The idea of using a replacement function is also found in the \proglang{Lua} language \url{http://www.lua.org/manual/5.1/manual.html#pdf-string.gsub}. %% need to figure out how to to bibtex stuff %% \citep{gsubfn:Ierusalimschy:2003} . \pkg{gsubfn} follows that idea and builds on it with \pkg{proto} objects, formulas and associated function \code{strapply}. The remainder of this article is organized as follows: Section~\ref{sec:gsubfn with functions} explains the use \code{gsubfn} with replacement functions. Section~\ref{sec:gsubfn with proto objects} explains the use \code{gsubfn} with \pkg{proto} objects for applications requiring persistance between calls. Section~\ref{sec:strapply} explains the use \code{strapply} and Section~\ref{sec:Misc} explains the use of \code{cat0} and \code{paste0}. The functions specified in \code{gsubfn} can be specified as functions or using a formula notation. Facilities are included for using that notation with any \proglang{R} function, not just the ones in the \pkg{gsubfn} package. Section~\ref{sec:fn} explains this facility even if the function in question, e.g. \code{apply}, \code{integrate} was not so written and Section~\ref{sec:match.funfn} explains how developers can embed this into their own functions. \textit{Prerequisites}. The reader should be familiar with \proglang{R} and, in particular the \proglang{R} \code{gsub} function. Within \proglang{R}, help on \code{gsub} is found via the \code{?gsub} command and on the net it can be found at \begin{itemize} \item{\url{http://stat.ethz.ch/R-manual/R-patched/library/base/html/grep.html}} \end{itemize} The reader should also be familiar with regular expressions. Within \proglang{R}, help on regular expressions is found via the command \code{?regex} and on the net it can be found at \begin{itemize} \item{\url{http://stat.ethz.ch/R-manual/R-patched/library/base/html/regex.html}} \end{itemize} Other Internet sources of information on regular expressions not specifically concerned with \proglang{R} are \begin{itemize} \item{Perl compatible regular expressions. \url{http://www.pcre.org/}} \item{Regular expressions. \url{http://www.regular-expressions.info/}} \item{Wikipedia. \url{http://en.wikipedia.org/wiki/Regular_expression}} \end{itemize} The discussions of passing \pkg{proto} objects to \code{gsubfn} and \code{strapply} require a minimal understanding of \proglang{R} environments using the \proglang{R} help command \code{?environment} and the \proglang{R} Language Manual found online at \begin{itemize} \item{\url{http://stat.ethz.ch/R-manual/R-patched/library/base/html/environment.html}} \item{\url{http://finzi.psych.upenn.edu/R/doc/manual/R-lang.html#Environment-objects}} \end{itemize} Since the use of the \pkg{proto} package itself is relatively restricted we will include sufficient information so that outside reference to the \pkg{proto} package will be unnecessary for the restricted purpose of using it here.\footnote{ More about \pkg{proto} is available in on the \pkg{proto} home page: \url{http://r-proto.googlecode.com} .} \section[The gsubfn Function]{The \code{gsubfn} Function} \label{sec:gsubfn with functions} \textit{Introduction}. The \code{gsubfn} function has a similar calling sequence to the \proglang{R} \code{gsub} function. The first argument is a regular expression, the second argument is a replacement string, replacement function, replacement formula representing a function or a replacement \pkg{proto} object. The third argument is the source string or a vector of such strings. In this section we are mainly concerned with replacement functions and replacement formulas representing replacement functions. In this case the replacement function is called for each match. The match and back references are passed as arguments. The input string is then copied to the output with the match being replaced with the output of the replacement function. \textit{Replacement function}. The replacement function can be specified by a formula in which the left hand side of the formula are the arguments separated by \code{"+"} (or any other valid formula symbol) while the right hand side represents the body. The environment of the formula will be used as the environment of the generated funciton. If the arguments on the left hand side are omitted then the free variables on the right hand side are used as arguments in the order encountered. \textit{Back References}. If the \code{backref} argument is not specified then all backreferences are passed to the function as separate arguments. If \code{backref} is \code{0} then no back references are passed and the entire match is passed. If \code{backref} is a postive integer, $n$, then the match and the first $n$ back references are passed. If \code{backref} is a negative integer then the match is not passed and the absolute value of \code{backref} is used as the number of back references to pass. Since \code{gsubfn} uses a potentially time consuming trial and error algorithm to automatically determine the number of back references the performance can be sped up somewhat by specifying \code{backref} even if all back references are to be passed. \textit{Example}. This example below replaces \code{x:y} pairs in \code{s} with their sum. The formula in this example is equivalent to specifying the function \code{function(x, y) as.numeric(x) + as.numeric(y)} : <>= s <- 'abc 10:20 def 30:40 50' gsubfn('([0-9]+):([0-9]+)', ~ as.numeric(x) + as.numeric(y), s) @ \section[gsubfn with lists]{\code{gsubfn} with \code{list} objects} \label{sec:gsubfn with list objects} \textit{Example}. If the replacement object is a list then the match is matched against the names of the list and the corresponding value is returned. If no name matches then the first unnamed list component is returned. If there is still no match then the string to be matched is returned so that effectively the lookup is ignored. For example: <>= dat <- c('3.5G', '88P', '19') # test data gsubfn('[MGP]$', list(M = 'e6', G = 'e9', P = 'e12'), dat) @ \section[gsubfn with proto objects]{\code{gsubfn} with \pkg{proto} objects} \label{sec:gsubfn with proto objects} \textit{Introduction}. In some applications one may need information from prior matches on current matches. This may be as simple as a count or as comprehensive as all prior matches. This is accomplished by passing a \pkg{proto} object whose object space can contain variables to be shared among the invocations of the matching function. The matching function itself is also be stored in the object as are the arguments to \code{gsubfn} and a special variable \code{count} which is automatically set to the match number. \textit{Proto}. A \pkg{proto} object is an \proglang{R} environment with an \proglang{S3} class of \code{c("proto", "environment")}. A \pkg{proto} object is created by calling the \code{"proto"} function with the components to be inserted given as arguments. This is very similar to the way lists are constructed in \proglang{R} except that unlike a list a \pkg{proto} object represents an \proglang{R} environment. \textit{Example}. The use of \pkg{proto} objects is best introduced via example. In the following example \code{p} is a \pkg{proto} object which contains one function \code{fun}. A function component of a \pkg{proto} object is called a method and we will use this terminology henceforth. In this example after the \code{proto} command to create \code{p} we examine the class of \code{p} and check the components of \code{p} using \code{ls}. Also we display the \code{fun} component itself. These are some of the basic operations on \pkg{proto} objects. Finally we run \code{gsubfn} using the regular expression \code{\textbackslash\textbackslash{}w+} and the \pkg{proto} object \code{p}. \code{gsubfn} looks for a component called \code{fun} in \code{p} and uses that as the replacement method/function. The arguments to \code{fun} are always the object itself, often represented by the formal argument \code{this}, \code{self} or just \code{.}, followed by the match and back references. In this example there are no back references. Here \code{fun} simply returns the match suffixed by the count of the match. The \code{count} variable is automatically placed into \code{p} by \code{gsubfn}. This has the effect of suffixing the first word with with \code{{1}}, the second with \code{{2}} and so on. After running \code{gsubfn} we examine \code{p} again noticing all the components that were added by \code{gsubfn} and we also examine the \code{count} component which shows how many matches were found. Note that use of \code{paste0} which is like \code{paste} but has a default \code{sep} of \code{""}. <>= p <- proto(fun = function(this, x) paste0(x, "{", count, "}")) class(p) ls(p) with(p, fun) s <- c("the dog and the cat are in the house", "x y x") gsubfn("\\w+", p, s) ls(p) p$count @ \textit{\code{pre} and \code{post}}. \code{gsubfn} knows about three methods: \code{fun} which we have already seen as well as \code{pre} and \code{post}. The latter two are optional and are run before each string and after each string respectively. Suppose we wish to suffix each word not by the count of all words but just by the count of that word. Thus the third occurrence of \code{"the"} will be suffixed with \code{{3}} rather than \code{{8}}. In that case we will set up a \code{words} list in the \code{pre} method. This method will be invoked at the start of each of the two strings in \code{s}. The \code{words} list itself is stored in the \code{pwords} \pkg{proto} object. Since all the methods of a \code{proto} object can share its contents \code{fun} can also make use of it. In the example below, each time we match a word, \code{pwords\$fun} adds it to the list \code{words}, if not already there, and increments it so that words[["the"]] will be \code{1} after \code{"the"} is encountered for the first time, \code{2} after the second time and so on. At the end of the example we look at what variables are in \code{pwords} and also check the contents of the \code{words} list. <>= pwords <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 paste0(x, "{", words[[x]], "}") } ) gsubfn("\\w+", pwords, "the dog and the cat are in the house") ls(pwords) dput(pwords$words) @ Additional examples of the use of \pkg{proto} objects with \code{gsubfn} are available via the command \code{demo("gsubfn-proto")}. \section[strapply]{\code{strapply}} \label{sec:strapply} \textit{Introduction}. The strapply function is similar to the \code{gsubfn} function but instead of replacing the matched strings it returns the output of the function in a list or simplified structure. A typical use would be to split a string based on content rather than on delimiters. The arguments are analogous to the arguments in \code{apply}. In both the object to be applied over is the first argument. A modifier, which is an index for \code{apply} and a regular expression for \code{strapply} is the second argument. The third argument is a function in both cases although in strapply, in analogy to \code{gsubfn} it can also be a \pkg{proto} object. By default \code{strapply} uses the \code{tcl} regular expression engine but if the argument \code{engine="R"} is used or if the function is a proto object then the \code{R} regular expression engine is used instead. The \code{tcl} engine is much faster. (\code{tcl} regular expressions are largely identical to regular expressions in R. See this link \url{https://www.tcl.tk/man/tcl8.5/TclCmd/re_syntax.htm} for details.) The \code{simplify} argument is similar to the \code{simplify} argument in \code{sapply} and, in fact, is passed to \code{sapply} if it is \code{logical}. If \code{simplify} is a function or a formula representing a function then the output of \code{strapply} is passed as \code{output} to it via \code{do.call(simplify, output)}. \textit{Example}. To separate out the initial digits from the rest returning the the initial digits and the rest as two separate fields we can write this: <>= s <- c('123abc', '12cd34', '1e23') strapply(s, '^([[:digit:]]+)(.*)', c, simplify = rbind) @ In this example we calculate the midpoint of each interval. (Note to myself. The following code works if we enter it into R but not in the vignette. Figure out what is wrong. In the meantime we only show the source and but don't run it.) <>= as.num <- function(x) if (x == "NA") NA else as.numeric(x) rn <- c("[-11.9,-10.6]", "(NA,9.3]", "(9.3,8e01]", "(8.01,Inf]") colMeans(strapply(rn, "[^][(),]+", as.num, simplify = TRUE)) @ \code{combine}. The \code{combine} argument can be specified as a function which is to be applied to the output of the replacement function after each call. It defaults to \code{c}. Another popular choice is \code{list}. The following example illustrates the difference: <>= s <- c('a:b c:d', 'e:f') dput(strapply(s, '(.):(.)', c)) dput(strapply(s, '(.):(.)', c, combine = list)) @ \code{strapply} and \code{proto}. \code{strapply} can be used with \pkg{proto} in the same way as as \code{gsubfn}. For example, suppose we wish to extract the words from a string together with their ordinal occurrence number. Previously we did this with \code{gsubfn} and inserted the number back into the string. This time we want to extract it. (Note to myself. The following code works if we enter it into R and even works as part of the vignette if we use R CMD Sweave but if we use R CMD build then it does not work. Figure out what is wrong. In the meantime we only show the source and but don't run it.) <>= pwords2 <- proto( pre = function(this) { this$words <- list() }, fun = function(this, x) { if (is.null(words[[x]])) this$words[[x]] <- 0 this$words[[x]] <- words[[x]] + 1 list(x, words[[x]]) } ) strapply("the dog and the cat are in the house", "\\w+", pwords2, combine = list, simplify = x ~ do.call(rbind, x) ) ls(pwords2) dput(pwords2$words) @ \section[Miscellaneous]{Miscellaneous} \label{sec:Misc} The \code{cat0} and \code{paste0} function are like \code{cat} and \code{paste} they have a default \code{sep} of \code{""}. Here is an example of using paste0. This example retrieves overlapping segments consisting of a space, letter, space, letter and space. Only the final space, letter, space is returned. Because we did not specify \code{backref} it will think there are two back references (since it will interpret the lookahead expression as an extra back reference); however, the second is empty so it does no harm in passing it to \code{paste0}. It uses the zero-lookahead perl style pattern matching expression. <>= strapply(' a b c d e f ', ' [a-z](?=( [a-z] ))', paste0)[[1]] @ \section[fn]{\code{fn}} \label{sec:fn} Wherever a function can be specified in \code{gsubfn} and \code{strapply} one can specify a formula instead as discussed previously. This facility has been extended to work with any \proglang{R} function. Just preface the function with \code{fn\$} and \begin{enumerate} \item{formula arguments will be intercepted and translated to functions allowing a compact representation of the call. Which formulas are actually translated to functions is dependent on rules to be discussed. The right hand side of the formula represents the body of the function. The left hand side of the formula represents the arguments and defaults to the free variables in the order encountered. The environment of the function is set to the environment of the formula. \code{letters}, \code{LETTERS} and \code{pi} are not considered free variables and will not appear in arguments. } \item{character arguments will be intercepted and quasi-perl style string interpolation will be performed. Which character strings to operate on are dependent on rules to be discussed.} \item{the \code{simplify} argument if its value is a function is intercepted. In that case if \code{result} is the result of running the function without the \code{simplify} argument then it returns \code{do.call(simplify, result)}.} \end{enumerate} The rules for determining which formulas to translate and which character strings to apply quasi-perl style string interpolation are as follows: \begin{enumerate} \item{any formula argument that has been specified with a double \code{\~{}}, i.e. \code{\~{}\~{}}, is converted to a function after removing the double \code{\~{}} and replacing it with a single \code{\~{}}.} \item{any character string argument that has been specified with a first character of \code{\textbackslash{}1} has string interpolation applied to it after the \code{\textbackslash{}1} is removed.} \item{if there are no formulas with double \code{\~{}} and no character strings beginning with \code{\textbackslash{}1} then all formulas are converted to functions and if there are no formulas then all character strings have string interpolation done.} \end{enumerate} The last possibility is the actually the most commonly used and almost all our examples will illustrate that case. For example, <>= fn$integrate(~ sin(x) + sin(x), 0, pi/2) fn$lapply(list(1:4, 1:5), ~ LETTERS[x]) fn$mapply(~ seq_len(x) + y * z, 1:3, 4:6, 2) # list(9, 11:12, 13:15) fn$by(CO2[4:5], CO2[2], x ~ coef(lm(uptake ~ ., x)), simplify = rbind) @ Here is an example where we have two formulas, one of which should be translated and another should not. In this case we place a double \code{\~{}} in the second formula to signify that one it represents a function. The first formula is then correctly left untranslated. This example places a panel number in the body of each panel. <>= library(lattice) library(grid) print(fn$xyplot(uptake ~ conc | Plant, CO2, panel = ~~ { panel.xyplot(...); grid.text(panel.number(), .1, .85) })) @ \begin{figure}[hpb] \begin{center} <>= <> @ \caption{ \code{ fn\$xyplot }} \label{fig:gsubfn-fn-lattice-caption} \end{center} \end{figure} As mentioned briefly above, the \code{fn\$} prefix will also intercept any \code{simplify} argument if that argument is a function (but will not intercept it if it is \code{TRUE} or \code{FALSE}). In the case of inteception it runs the command then applies \code{do.call(simplify, result)} to the result of the command. A typical use would be with \code{by} as in the following example to calculate the regression coefficients of \code{uptake} on \code{conc} for each \code{Treatment}. This replaces the sligtly uglier \code{do.call} construct which would otherwise have been required. <>= fn$by(CO2, CO2$Treatment, d ~ coef(lm(uptake ~ conc, d)), simplify = rbind) @ Here are some additional examples to illustrate the wide range of application. The first replaces codes with upper case letters. Note that \code{LETTERS} is never interpreted as a free variable so the default argument is \code{x} here: <>= fn$lapply(list(1:4, 1:3), ~ LETTERS[x]) @ Here is a common use of \code{aggregate} or \code{by}. This calculates a weighted mean of the first column using weights in the second column all grouped by columns \code{A} and \code{B}. The \code{aggregate} example aggregates over indexes to circumvent the restriction of a single input to the aggregation function. \code{X} is a free variable and we only want \code{i} to be an argument so we must specify it explicitly (otherwise it will assume all free variables in the right hand side are to be arguments). <>= set.seed(1) X <- data.frame(X = rnorm(24), W = runif(24), A = gl(2, 1, 24), B = gl(2, 2, 24)) fn$aggregate(1:nrow(X), X[3:4], i ~ weighted.mean(X[i,1], X[i,2])) @ A number of mathematical functions take functions as arguments. Here we show the use of \code{fn\$} with \code{integrate} and \code{optimize}. <>= fn$integrate(~1/((x+1)*sqrt(x)), lower = 0, upper = Inf) fn$optimize(~ x^2, c(-1,1)) @ \proglang{S4} \code{setGeneric} and \code{setMethod} calls have function arguments that \code{fn\$} can be used with. In the following example we create an \proglang{S4} class \code{ooc} whose representation contains a single variable \code{a}. We then define a generic function \code{incr}. In this case the function arguments cannot be deduced from the body so we specify them explicitly. Then we define an \code{incr} method for class \code{ooc}. Since \code{a} is a free variable again we must define the arguments explicitly to ensure that it is not automatically included. Finally we illustrate the use of the \code{incr} method we just defined. <>= setClass('ooc', representation(a = 'numeric')) fn$setGeneric('incr', x + value ~ standardGeneric('incr')) fn$setMethod('incr', 'ooc', x + value ~ {x@a <- x@a+value; x}) oo <- new('ooc', a = 1) oo <- incr(oo,1) oo @ One commonly used calculation in quantile regression is the creation of a regression plot for each of a variety of values of \code{tau}. Here we plot \code{x} vs. \code{y} and then superimpose quantile regression lines for various \code{tau} values using \code{lapply} to avoid a loop. The \code{lapply} function of \code{tau} is specified using a formula. <>= library(quantreg) data(engel) plot(engel$income, engel$foodexp, xlab = 'income', ylab = 'food expenditure') junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(foodexp ~ income, tau, engel)))) @ <>= plot(engel$income, engel$foodexp, xlab = 'income', ylab = 'food expenditure') junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(foodexp ~ income, tau, engel)))) @ \begin{figure}[hpb] \begin{center} <>= <> @ \caption{ \code{ Plot \code{engel} data with quantile lines } } \label{fig:gsubfn-fn-quantreg-caption} \end{center} \end{figure} In time series we may wish to calculate a rolling summary of the data. In this case we calculate a rolling midrange of the data using the \pkg{zoo} function \code{rollapply}: <>= library(zoo) fn$rollapply(LakeHuron, 12, ~ mean(range(x))) @ A common statistical technique for assessing statistics is the bootstrap technique provided in package \pkg{boot}. Here we compactly the bias and standard error of the median statistic using the \code{rivers} data set and 2000 samples. <>= library(boot) set.seed(1) fn$boot(rivers, ~ median(x[d]), R = 2000) @ Here is a plotting application that illustrates that \code{pi} is automatically excluded from default arguments. <>= x <- 0:50/50 matplot(x, fn$outer(x, 1:8, ~ sin(x * k*pi)), type = 'blobcsSh') @ \begin{figure}[hpb] \begin{center} <>= <> @ \caption{ \code{matplot(x, fn\$outer(x, 1:8, \~{} sin(x * k*pi)), type = 'blobcsSh')} } \label{fig:gsubfn-fn-pi-caption} \end{center} \end{figure} Here we define matrix multiplication in terms of two calls to \code{apply} and the inner product definition. The advantage of this is that it can easily be modified to use different inner products. This illustrates a nested use of \code{fn\$}: <>= a <- matrix(4:1, 2); b <- matrix(1:4, 2) # test matrices fn$apply(b, 2, x ~ fn$apply(a, 1, y ~ sum(x*y))) a %*% b @ Another example of nesting is the following which generates all subsequences of \code{1:4}. <>= L <- fn$apply(fn$sapply(1:4, ~ rbind(i,i:4), simplify = cbind), 2, ~ x[1]:x[2]) dput(L) @ In the \proglang{Python} language there exists a convenient notation for expressing lists with side conditions. For example, \code{[ x*x for x in range(1,11) if x\%2 == 0]}. To express this in \proglang{R} using \code{fn\$} we can write it like this which gets fairly close to the \proglang{Python} formulation: <>= fn$sapply( 1:10, ~ if (x%%2==0) x^2, simplify = c) @ Here is an example of string interpolation: <>= fn$cat("pi = $pi, exp = `exp(1)`\n") @ \section[match.funfn and as.function.formula]{\code{match.funfn} and \code{as.function.formula}} \label{sec:match.funfn} Developers who wish to add the \code{fn\$} capability to their own functions (so that the user does not have to prepend them with \code{fn\$)} can use the supplied \code{match.funfn} function which in turn uses the \code{as.function.formula} function to convert formulas to functions. \code{match.funfn} is like the \code{match.fun} in \proglang{R} function except that it also converts formulas, not just character strings. For example with the definition of \code{sq} shown below the formal argument $f$ can be a formula, character string or function as shown in the statements following: <>= sq <- function(f, x) { f <- match.funfn(f); f(x^2) } sq(~ exp(x)/x, pi) f <- function(x) exp(x)/x sq('f', pi) # character string f <- function(x) exp(x)/x sq(f, pi) sq(function(x) exp(x)/x, pi) @ \section{Summary} \label{sec:summary} By simply extending the replacement string in \code{gsub} to functions, formulas and \pkg{proto} objects we obtain a function which on the surface appears nearly identical to \code{gsub} but, in fact, has powerful ramifications for processing. \section*{Computational details} The results in this paper were obtained using \proglang{R} \Sexpr{paste(R.Version()[6:7], collapse = ".")} with the packages \pkg{boot} \Sexpr{gsub("-", "--", packageDescription("boot")$Version)}, \pkg{grid} \Sexpr{gsub("-", "--", packageDescription("grid")$Version)}, \pkg{gsubfn} \Sexpr{gsub("-", "--", packageDescription("gsubfn")$Version)}, \pkg{lattice} \Sexpr{gsub("-", "--", packageDescription("lattice")$Version)}, \pkg{proto} \Sexpr{gsub("-", "--", packageDescription("proto")$Version)}, \pkg{quantreg} \Sexpr{gsub("-", "--", packageDescription("quantreg")$Version)} and \proglang{R} itself and all packages used are available from CRAN at \url{http://CRAN.R-project.org/}. %% \bibliography{gsubfn} %% \newpage %% \begin{appendix} %% \section{Reference card} %% \input{gsubfn-refcard-raw} %% \end{appendix} \end{document} gsubfn/MD50000644000176200001440000000355413252703433012057 0ustar liggesusers46aaf69a91703493b666f212a04f2d8d *COPYING f5e1a6400c3a36ba690b8de009d1f001 *DESCRIPTION a35b7b85a772fddf472d0a33202e36b6 *NAMESPACE 9080af897da275c7261481e98a8ff5d4 *R/fn.R 5ae51c26c225d561c7d10ef461a39232 *R/gsubfn.R e211804326fafb20d618b23d485890c9 *R/list.R a70ff11427cec20c559ecc813ed2edc9 *R/read.pattern.R f18365c478f5e9a42454fbf9dfbbf2f3 *R/strapplyc.R 0a3f4f8e2c26d2aafc2e301b25b2bcb1 *R/transform2.R ed4e7cca327743fdd6ae871d4f9e11d6 *R/zzz.R e473cf190f04eb9b1623375710345daa *build/vignette.rds fd368f5b6ac08f97596a66a7041109b4 *demo/00Index 6055e62e03c832133456d658b3b07d89 *demo/gsubfn-chron.R d6ec8f0d982e6ac6e6d50cc164d28f7f *demo/gsubfn-cut.R ea449b1c9a471f375a27470ff741756f *demo/gsubfn-gries.R 97109cd369ca5a2fc15b2be55177aa61 *demo/gsubfn-lower.R 6c1154cb6fc406138874d72a89df60ce *demo/gsubfn-si.R 10af9aa7492b9c6beb4b939a3bc4da5d *demo/gsubfn-unitTests.R 04f8a6fcfee3a5640e02cd9a324255ed *inst/ANNOUNCE 3ff00a9813774d75c578b20c4fd00eae *inst/NEWS cd4675587428f7b6c4a52c1ff1303ee6 *inst/THANKS 5e676f40f47703f3849c9c54c13d7fc4 *inst/WISHLIST 9d7b369e652a49602d143082b05fc184 *inst/doc/gsubfn.R afe93556314b8464e43c7b8c09c143ba *inst/doc/gsubfn.Rnw 66bfa61dc15336c1fcee304d0722cb2c *inst/doc/gsubfn.pdf 8f197698cdb25d56eb64187b46f345c8 *inst/lipsum.txt c9e1d04a2d77929861d6c4944abff5c3 *inst/sample.txt f204cb6980d1189508ecd64aec6eda7f *inst/unitTests/runit.all.R 1863bf11ffc8bf378f37688240f46e18 *man/as.function.formula.Rd 7a9a388b5afa4a69bd43f326616eb7dd *man/fn.Rd 2aff224610142ce21b1bf5446cf6fcd6 *man/gsubfn-package.Rd 600f6a60c93d504653a8939e1681113c *man/gsubfn.Rd 7e5c8426be23ebf6a6622ace9cb9bbc2 *man/list.Rd b53a82b0503f4e35bf5c3858fc4c76a1 *man/match.funfn.Rd 2b9c0620a627429a3d25ca0ee4d6fa8e *man/read.pattern.Rd d0cf3f084f4260310a6024d0d947f00a *man/strapply.Rd 997d8e08a766c663595155c223e7cb0d *man/transform2.Rd afe93556314b8464e43c7b8c09c143ba *vignettes/gsubfn.Rnw gsubfn/build/0000755000176200001440000000000013252577441012647 5ustar liggesusersgsubfn/build/vignette.rds0000644000176200001440000000037413252577441015212 0ustar liggesusersuQn0 uAI|A b hZE*NvAIl=;?)1+6!{' ie] 1d>֩Z9%-/(,X\ŽSTA?MQ''k|iv (ץl$}c7HғyzΡ/i0_7W69lΧgFw#mgZ00B8/)gsubfn/DESCRIPTION0000644000176200001440000000271413252703433013252 0ustar liggesusersPackage: gsubfn Version: 0.7 Date: 2018-03-15 Title: Utilities for Strings and Function Arguments Author: G. Grothendieck Maintainer: G. Grothendieck Description: The gsubfn function is like gsub but can take a replacement function or certain other objects instead of the replacement string. Matches and back references are input to the replacement function and replaced by the function output. gsubfn can be used to split strings based on content rather than delimiters and for quasi-perl-style string interpolation. The package also has facilities for translating formulas to functions and allowing such formulas in function calls instead of functions. This can be used with R functions such as apply, sapply, lapply, optim, integrate, xyplot, Filter and any other function that expects another function as an input argument or functions like cat or sql calls that may involve strings where substitution is desirable. There is also a facility for returning multiple objects from functions and a version of transform that allows the RHS to refer to LHS used in the same transform. BugReports: https://github.com/ggrothendieck/gsubfn/issues Depends: proto Suggests: boot, chron, grid, lattice, quantreg, svUnit, tcltk, zoo License: GPL (>= 2) URL: https://github.com/ggrothendieck/gsubfn NeedsCompilation: no Packaged: 2018-03-15 23:17:54 UTC; Louis Repository: CRAN Date/Publication: 2018-03-16 08:58:03 UTC gsubfn/man/0000755000176200001440000000000013252577442012324 5ustar liggesusersgsubfn/man/list.Rd0000644000176200001440000000154113252555677013575 0ustar liggesusers\name{list} \alias{list} \alias{[<-.result} \title{Multiple value assignment.} \description{ Multiple value assignment. } \details{ Enables \code{list} to be used on the left hand side of assignment statements as shown in the examples. } \examples{ # swap a and b without explicitly creating a temporary a <- 1; b <- 2 list[a,b] <- list(b,a) # get eigenvectors and eigenvalues list[eval, evec] <- eigen(cbind(1,1:3,3:1)) # get today's month, day, year require(chron) list[Month, Day, Year] <- month.day.year(unclass(Sys.Date())) # get first two components of linear model ignoring rest list[Coef, Resid] <- lm(rnorm(10) ~ seq(10)) # assign Green and Blue (but not Red) components list[,Green,Blue] <- col2rgb("aquamarine") # Assign QR and QRaux but not other components list[QR,,QRaux] <- qr(c(1,1:3,3:1)) } \keyword{misc} gsubfn/man/gsubfn.Rd0000644000176200001440000001456513252555677014120 0ustar liggesusers\name{gsubfn} \alias{gsubfn} \alias{cat0} \title{ Pattern Matching and Replacement } \description{ Like \code{gsub} except instead of a replacement string one uses a function which accepts the matched text as input and emits replacement text for it. } \usage{ gsubfn(pattern, replacement, x, backref, USE.NAMES = FALSE, ignore.case = FALSE, engine = getOption("gsubfn.engine"), env = parent.frame(), ...) } \arguments{ \item{pattern}{ Same as \code{pattern} in \code{gsub} } \item{replacement}{ A character string, function, list, formula or proto object. See Details. } \item{x}{ Same as \code{x} in \code{gsub} } \item{backref}{ Number of backreferences to be passed to function. If zero or positive the match is passed as the first argument to the replacement function followed by the indicated number of backreferences as subsequent arguments. If negative then only the that number of backreferences are passed but the match itself is not. If omitted it will be determined automatically, i.e. it will be 0 if there are no backreferences and otherwise it will equal negative the number of back references. It determines this by counting the number of non-escaped left parentheses in the pattern. Also if the function contains an ampersand as an argument then \code{backref} will be taken as non-negative and the ampersand argument will get the full match.} \item{USE.NAMES}{ See \code{USE.NAMES} in \code{sapply}. } \item{ignore.case}{If \code{TRUE} then case is ignored in the \code{pattern} argument.} \item{engine}{Specifies which engine to use. If the R installation has \code{tcltk} capability then the \code{tcl} engine is used unless \code{FUN} is a proto object or \code{perl=TRUE} in which case the \code{"R"} engine is used (regardless of the setting of this argument).} \item{env}{ Environment in which to evaluate the replacement function. Normally this is left at its default value.} \item{\dots}{ Other \code{gsub} arguments. } } \details{ If \code{replacement} is a string then it acts like \code{gsub}. If \code{replacement} is a function then each matched string is passed to the replacement function and the output of that function replaces the matched string in the result. The first argument to the replacement function is the matched string and subsequent arguments are the backreferences, if any. If \code{replacement} is a list then the result of the regular expression match is, in turn, matched against the names of that list and the value corresponding to the first name in the list that is match is returned. If there are no names matching then the first unnamed component is returned and if there are no matches then the string to be matched is returned. If \code{backref} is not specified or is specified and is positive then the entire match is used to lookup the value in the list whereas if \code{backref} is negative then the identified backreference is used. If \code{replacement} is a formula instead of a function then a one line function is created whose body is the right hand side of the formula and whose arguments are the left hand side separated by \code{+} signs (or any other valid operator). The environment of the function is the environment of the formula. If the arguments are omitted then the free variables found on the right hand side are used in the order encountered. \code{0} can be used to indicate no arguments. \code{letters}, \code{LETTERS} and \code{pi} are never automatically used as arguments. If \code{replacement} is a proto object then it should have a \code{fun} method which is like the replacement function except its first argument is the object and the remaining arguments are as in the replacement function and are affected by backref in the same way. \code{gsubfn} automatically inserts the named arguments in the call to \code{gsubfn} into the proto object and also maintains a \code{count} variable which counts matches within strings. The user may optionally specify \code{pre} and \code{post} methods in the proto object which are fired at the beginning and end of each string (not each match). They each take one argument, the object. Note that if the \code{"R"} engine is used and if backref is non-negative then internally the pattern will be parenthesized. A utility function \code{cat0} is available. They are like \code{\link[base]{cat}} and \code{\link[base]{paste}} except that their default \code{sep} value is \code{""}. } \value{ As in \code{gsub}. } \seealso{ \code{\link{strapply}} } \examples{ # adds 1 to each number in third arg gsubfn("[[:digit:]]+", function(x) as.numeric(x)+1, "(10 20)(100 30)") # same but using formula notation for function gsubfn("[[:digit:]]+", ~ as.numeric(x)+1, "(10 20)(100 30)") # replaces pairs m:n with their sum s <- "abc 10:20 def 30:40 50" gsubfn("([0-9]+):([0-9]+)", ~ as.numeric(x) + as.numeric(y), s) # default pattern for gsubfn does quasi-perl-style string interpolation gsubfn( , , "pi = $pi, 2pi = `2*pi`") # Extracts numbers from string and places them into numeric vector v. # Normally this would be done in strapply instead. v <- c(); f <- function(x) v <<- append(v,as.numeric(x)) junk <- gsubfn("[0-9]+", f, "12;34:56,89,,12") v # same strapply("12;34:56,89,,12", "[0-9]+", simplify = c) # replaces numbers with that many Xs separated by - gsubfn("[[:digit:]]+", ~ paste(rep("X", n), collapse = "-"), "5.2") # replaces units with scale factor gsubfn(".m", list(cm = "e1", km = "e6"), "33cm 45km") # place <...> around first two occurrences p <- proto(fun = function(this, x) if (count <= 2) paste0("<", x, ">") else x) gsubfn("\\\\w+", p, "the cat in the hat is back") # replace each number by cumulative sum to that point p2 <- proto(pre = function(this) this$value <- 0, fun = function(this, x) this$value <- value + as.numeric(x)) gsubfn("[0-9]+", p2, "12 3 11, 25 9") # this only works if your R installation has tcltk capabilities # See following example for corresponding code with R engine if (isTRUE(capabilities()[["tcltk"]])) { gsubfn("(.)\\\\1", ~ paste0(`&`, "!"), "abbcddd") } # with R and backref >=0 (implied) the pattern is internally parenthesized # so must use \\2 rather than \\1 gsubfn("(.)\\\\2", ~ paste0(`&`, "!"), "abbcddd", engine = "R") } \keyword{character} gsubfn/man/strapply.Rd0000644000176200001440000001345113252555677014503 0ustar liggesusers\name{strapply} \alias{strapply} \alias{strapply1} \alias{ostrapply} \alias{strapplyc} \alias{tclList2R} \title{ Apply a function over a string or strings. } \description{ Similar to \code{"'gsubfn'"} except instead of performing substitutions it returns the output of \code{"'FUN'"}.} \usage{ strapply(X, pattern, FUN = function(x, ...) x, backref, ..., empty, ignore.case = FALSE, perl = FALSE, engine, simplify = FALSE, USE.NAMES, combine = c) strapplyc(X, pattern, backref, ignore.case = FALSE, simplify = FALSE, USE.NAMES, engine) } \arguments{ \item{X}{ list or (atomic) vector of character strings to be used. } \item{pattern}{ character string containing a regular expression (or character string for \code{"'fixed = TRUE')"} to be matched in the given character vector.} \item{FUN}{ a function, formula, character string, list or proto object to be applied to each element of \code{"'X'"}. See discussion in \code{\link{gsubfn}}. } \item{backref}{See \code{\link{gsubfn}}.} \item{empty}{If there is no match to a string return this value.} \item{ignore.case}{If \code{TRUE} then case is ignored in the \code{pattern} argument.} \item{perl}{If \code{TRUE} then \code{engine="R"} is used with perl regular expressions.} \item{engine}{This argument defaults to \code{getOption("gsubfn.engine")}. If that option has not been set \code{engine} defaults to the \code{"R"} engine if (1) \code{FUN} is a proto object or if (2) the R installation does not have \code{tcltk} capability. If the \code{"R"} default does not apply then it defaults to the \code{"tcl"} engine.} \item{\dots}{ optional arguments to \code{"'gsubfn'"}. } \item{simplify}{ logical or function. If logical, should the result be simplified to a vector or matrix, as in \code{"sapply"} if possible? If function, that function is applied to the result with each component of the result passed as a separate argument. Typically if the form is used it will typically be specified as rbind.} \item{USE.NAMES}{ logical; if \code{"'TRUE'"} and if \code{"'X'"} is character, use \code{"'X'"} as 'names' for the result unless it had names already. Default is \code{FALSE}.} \item{combine}{combine is a function applied to the components of the result of \code{FUN}. The default is \code{"c"}. \code{"list"} is another common choice. The default may change to be \code{"list"} in the future.} } \details{ If \code{FUN} is a function then for each character string in \code{"X"} the pattern is repeatedly matched, each such match along with back references, if any, are passed to the function \code{"FUN"} and the output of \code{FUN} is returned as a list. If \code{FUN} is a formula or proto object then it is interpreted to the way discussed in \code{\link{gsubfn}}. If \code{FUN} is a proto object or if \code{perl=TRUE} is specified then \code{engine="R"} is used and the \code{engine} argument is ignored. If \code{backref} is not specified and \code{engine="R"} is specified or implied then a heuristic is used to calculate the number of backreferences. The primary situation that can fool it is if there are parentheses in the string that are not back references. In those cases the user will have to specify backref. If \code{engine="tcl"} then an exact algorithm is used and the problem sentence never occurs. \code{strapplyc} is like \code{strapply} but specialized to \code{FUN=c} for speed. If the \code{"tcl"} engine is not available then it calls \code{strapply} and there will be no speed advantage. } \value{ A list of character strings. } \seealso{ See \code{\link{gsubfn}}. For regular expression syntax used in tcl see \url{http://www.tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm} and for regular expression syntax used in R see the help page for \code{regex}. } \examples{ strapply("12;34:56,89,,12", "[0-9]+") # separate leading digits from rest of string # creating a 2 column matrix: digits, rest s <- c("123abc", "12cd34", "1e23") t(strapply(s, "^([[:digit:]]+)(.*)", c, simplify = TRUE)) # same but create matrix strapply(s, "^([[:digit:]]+)(.*)", c, simplify = rbind) # running window of 5 characters using 0-lookahead perl regexp # Note that the three ( in the regexp will fool it into thinking there # are three backreferences so specify backref explicitly. x <- "abcdefghijkl" strapply(x, "(.)(?=(....))", paste0, backref = -2, perl = TRUE)[[1]] # Note difference. First gives character vector. Second is the same. # Third has same elements but is a list. # Fourth gives list of two character vectors. Fifth is the same. strapply("a:b c:d", "(.):(.)", c)[[1]] strapply("a:b c:d", "(.):(.)", list, simplify = unlist) # same strapply("a:b c:d", "(.):(.)", list)[[1]] strapply("a:b c:d", "(.):(.)", c, combine = list)[[1]] strapply("a:b c:d", "(.):(.)", c, combine = list, simplify = c) # same # find second CPU_SPEED value given lines of config file Lines <- c("DEVICE = 'PC'", "CPU_SPEED = '1999', '233'") parms <- strapply(Lines, "[^ ',=]+", c, USE.NAMES = TRUE, simplify = ~ lapply(list(...), "[", -1)) parms$CPU_SPEED[2] # return first two words in each string p <- proto(fun = function(this, x) if (count <=2) x) strapply(c("the brown fox", "the eager beaver"), "\\\\w+", p) \dontrun{ # convert to chron library(chron) x <- c("01/15/2005 23:32:45", "02/27/2005 01:22:30") x.chron <- strapply(x, "(../../....) (..:..:..)", chron, simplify = c) # time parsing of all 275,546 words from James Joyce's Ulysses joyce <- readLines("http://www.gutenberg.org/files/4300/4300-8.txt") joycec <- paste(joyce, collapse = " ") system.time(s <- strapplyc(joycec, "\\\\w+")[[1]]) length(s) # 275546 } } \keyword{character} gsubfn/man/gsubfn-package.Rd0000644000176200001440000000772713252555677015513 0ustar liggesusers\name{gsubfn-package} \alias{gsubfn-package} \docType{package} \title{ gsubfn } \description{ Generalized \code{"'gsub'"} and associated functions. } \details{ gsubfn is an R package used for string matching, substitution and parsing. A seemingly small generalization of gsub, namely allow the replacement string to be a replacement function, list, formula or proto object, can result in significantly increased power and applicability. The resulting function, gsubfn is the namesake of this package. In the case of a replacement formula the formula is interpreted as a function with the body of the function represented by the right hand side of the formula. In the case of a replacement proto object the object space is used to store persistant data to be communicated from one function invocation to the next as well as to store the replacement function/method itself. Built on top of gsubfn is strapply which is similar to gsubfn except that it returns the output of the function rather than substituting it back into the source string. A fast version of strapply specialized to the function \code{c} is provided. The ability to have formula arguments that represent functions can be used not only in the functions of the gsubfn package but can also be used with any R function that itself passes functions without modifying its source. Such functions might include apply, lapply, mapply, sapply, tapply, by, integrate, optim, outer and other functions in the core of R and in addon packages. Just preface any R function with \code{fn\$} and subject to certain rules which are intended to distinguish which formulas are intended to be functions and which are not, the formula arguments will be translated to functions, e.g. \code{fn$integrate(~ x^2, 0, 1)} \code{fn\$} also performs quasi-perl style string interpolation on any character arguments beginning with \code{\\1}. \code{match.funfn}, is provided to allow developers to readily build this functionality into their own functions so that even the \code{fn\$} prefix need not be used. The home page plus the following are sources of information on \code{"gsubfn"}: \tabular{ll}{ Home Page (see URL: line)\tab RShowDoc("DESCRIPTION", package = "gsubfn")\cr News\tab RShowDoc("NEWS", package = "gsubfn")\cr Wish List\tab RShowDoc("WISHLIST", package = "gsubfn")\cr Thanks file\tab RShowDoc("THANKS", package = "gsubfn")\cr License\tab RShowDoc("COPYING", package = "gsubfn")\cr Citation\tab citation(package = "gsubfn")\cr Demo\tab demo("gsubfn-chron")\cr Demo\tab demo("gsubfn-cut")\cr Demo\tab demo("gsubfn-gries")\cr Demo\tab demo("gsubfn-si")\cr Unit tests\tab demo("gsubfn-unitTests")\cr This File\tab package?gsubfn\cr Help files\tab ?\link{gsubfn}, ?\link{strapply}, ?\link{cat0}\cr More Help files\tab ?\link{as.function.formula}, ?\link{match.funfn}, ?\link{fn}\cr Home page\tab \url{http://code.google.com/p/gsubfn/}\cr Vignette\tab vignette("gsubfn")\cr } } \examples{ # replace each number with that number plus 1 gsubfn("[[:digit:]]+", function(x) as.numeric(x)+1, "(10 20)(100 30)") # same gsubfn("[[:digit:]]+", ~ as.numeric(x)+1, "(10 20)(100 30)") # replace each number with its cumulative sum pcumsum <- proto(pre = function(this) this$sum <- 0, fun = function(this, x) { sum <<- sum + as.numeric(x) } ) gsubfn("[0-9]+", pcumsum, "10 abc 5 1") # split out numbers strapply("12abc34 55", "[0-9]+") fn$optim(1, ~ x^2, method = "CG") fn$integrate(~ sin(x) + cos(x), 0, pi/2) fn$lapply(list(1:4, 1:5), ~ LETTERS[x]) # list(LETTERS[1:4], LETTERS[1:5]) fn$mapply(~ seq_len(x) + y * z, 1:3, 4:6, 2) # list(9, 11:12, 13:15) # must specify x since . is a free variable fn$by(CO2[4:5], CO2[1], x ~ coef(lm(uptake ~ ., x)), simplify = rbind) # evaluate f at x^2 where f may be function or formula square <- function(f, x, ...) { f <- match.funfn(f); f(x^2, ...) } square(~ exp(x)/x, pi) square(function(x) exp(x)/x, pi) # same } \keyword{ package } gsubfn/man/read.pattern.Rd0000644000176200001440000000302513252555677015210 0ustar liggesusers\name{read.pattern} \alias{read.pattern} \title{ Read file or text string using a regular expression to separate fields. } \description{ Read file or text string using a regular expression to separate fields. } \usage{ read.pattern(file, pattern, perl = FALSE, text, sep = "\01", fileEncoding = "", ...) } \arguments{ \item{file}{ See \code{\link[utils]{read.table}}. } \item{pattern}{ A regular expression. } \item{perl}{ logical. If \code{TRUE} then a perl style regular expression is expected. } \item{text}{ See \code{\link[utils]{read.table}}. } \item{sep}{ This should be a character that does not appear in any field. It is used for holding an intermediate form of the text. } \item{fileEncoding}{ See \code{\link[utils]{read.table}}. } \item{\dots}{ Further arguments passed to \code{\link[utils]{read.table}}. } } \details{ The parenthesized portions of the regular expression are extracted as fields. } \value{ A data.frame. } \seealso{ See \code{\link{strapplyc}}, \code{\link[utils]{read.table}}. } \examples{ # 3 space-separated fields. The first field may have embedded spaces. Lines <- "this is the first field 1 2 more text 3 4 " pat <- "^(.*) +(\\\\S+) +(\\\\S+)$" read.pattern(text = Lines, pattern = pat, as.is = TRUE) # 3 space-separated fields. The last field may have embedded spaces. Lines2 <- "1 2 this is the first field 3 4 more text " pat2 <- "^(\\\\S+) +(\\\\S+) +(.*)$" read.pattern(text = Lines2, pattern = pat2, as.is = TRUE) } \keyword{misc} gsubfn/man/transform2.Rd0000644000176200001440000000173213252571700014702 0ustar liggesusers\name{transform2} \alias{transform2} \title{ Like transform but allows right hand sides to refer to left hand sides. } \description{ In \code{transform} the right hand sides of the arguments may not refer to the left hand sides. \code{transform2} works like \code{transform} with the exception that a right hand side may refer to any of the variables on the left hand side of another argument. The argument defining the left hand side may come before or after the reference. } \usage{ transform2(`_data`, ...) } \arguments{ \item{_data}{ A data frame. } \item{\dots}{ Further arguments of the form \code{tag=value}. } } \value{ The modified value of \code{_data}. } \seealso{ \code{\link[base]{transform}}, \code{\link[base]{within}} } \examples{ \dontrun{ # bad transform(BOD, b = a, a = demand) } # OK. a is set to demand and b is set to a so both wind up equal to demand transform2(BOD, b = a, a = demand) } \keyword{misc} gsubfn/man/fn.Rd0000644000176200001440000000741413252555677013232 0ustar liggesusers\name{fn} \alias{fn} \alias{$.fn} \alias{eval.with.vis} \alias{matrixfn} \title{ Transform formula arguments to functions. } \description{ When used in the form \code{fn\$somefunction(...arguments...)} it converts formulas among the arguments of somefunction to functions using \code{\link{as.function.formula}}. It uses a heuristic to decide which formulas to convert. If any of the following are true then that argument is converted from a formula to a function: (1) there is only one formula among the arguments, (2) the name of the formula argument is \code{FUN} or (3) the formula argument is not the first argument in the argument list. It also removes any \code{simplify} argument whose value is not logical and after processing it in the same way just discussed in order to interpret it as a function it passes the output of the command through \code{do.call(simplify, output)}. It also performs quasi-perl style string interpolation on any character string arguments that begin with \code{\\1} removing the \code{\\1} character. A dollar sign followed by a variable name or \code{R} code within backticks are both evaluated. } \usage{ \method{$}{fn}(x, FUN) } \arguments{ \item{x}{ \code{fn}.} \item{FUN}{Name of a function.} } \value{ Returns a function. } \seealso{\link{as.function.formula}} \examples{ # use of formula to specify a function. # Note that LETTERS, letters and pi are automatically excluded from args fn$lapply(list(1:4, 1:3), ~ LETTERS[x]) fn$sapply(1:3, ~ sin((n-1) * pi/180)) # use of simplify = rbind instead of do.call(rbind, by(...)). # args to anonymous function are automatically determined. fn$by(BOD, 1:nrow(BOD), ~ c(mn = min(x), mx = max(x)), simplify = rbind) # calculate lm coefs of uptake vs conc for each Plant fn$by(CO2, CO2$Plant, d ~ coef(lm(uptake ~ conc, d)), simplify = rbind) # mid range of conc and uptake by Plant fn$aggregate(CO2[,4:5], CO2[1], ~ mean(range(x))) # string interpolation j <- fn$cat("pi = $pi, exp = `exp(1)`\n") \dontrun{ # same but use cast/melt from reshape package library(reshape) fn$cast(Plant ~ variable, data = melt(CO2, id = 1:3), ~~ mean(range(x))) # same # uncomment when new version of doBy comes out (expected shortly) # library(doBy) # fn$summaryBy(.~Plant,CO2[-(2:3)],FUN= ~~mean(range(x)), pref='midrange') } # generalized matrix product # can replace sum(x*y) with any other inner product of interest # this example just performs matrix multiplication of a times b a <- matrix(4:1, 2) b <- matrix(1:4, 2) fn$apply(b, 2, x ~ fn$apply(a, 1, y ~ sum(x*y))) # integration fn$integrate(~1/((x+1)*sqrt(x)), lower = 0, upper = Inf) # optimization fn$optimize(~ x^2, c(-1,1)) # using fn with S4 definitions setClass('ooc', representation(a = 'numeric')) fn$setGeneric('incr', x + value ~ standardGeneric('incr')) fn$setMethod('incr', 'ooc', x + value ~ {x@a <- x@a+value; x}) oo <- new('ooc',a=1) oo <- incr(oo,1) oo \dontrun{ # plot quantile regression fits for various values of tau library(quantreg) data(engel) plot(engel$x, engel$y, xlab = 'income', ylab = 'food expenditure') junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(y ~ x, tau, engel)))) # rolling mid-range library(zoo) fn$rollapply(LakeHuron, 12, ~ mean(range(x))) library(lattice) fn$xyplot(uptake ~ conc | Plant, CO2, panel = ... ~ { panel.xyplot(...); panel.text(200, 40, lab = 'X') }) library(boot) set.seed(1) fn$boot(rivers, ~ median(x, d), R = 2000) } x <- 0:50/50 matplot(x, fn$outer(x, 1:8, ~ sin(x * k*pi)), type = 'blobcsSh') } \keyword{ programming } gsubfn/man/match.funfn.Rd0000644000176200001440000000216313252555677015032 0ustar liggesusers\name{match.funfn} \alias{match.funfn} \title{ Generic extended version of R match.fun } \description{ A generic \code{match.fun}. } \usage{ match.funfn(FUN, descend = TRUE) } \arguments{ \item{FUN}{ Function, character name of function or formula describing function. } \item{descend}{logical; control whether to search past non-function objects.} } \details{ The default method is the same as \code{match.fun} and the \code{formula} method is the same as \code{as.function.formula}. This function can be used within the body of a function to convert a function specification whether its a function, character string or formula into an actual function. } \value{ Returns a function. } \seealso{ See Also \code{\link{match.fun}}, \code{\link{as.function.formula}}.} \examples{ # return first argument evaluated at second argument squared. sq <- function(f, x) { f <- match.funfn(f) f(x^2) } # call sq using different forms for function sq(function(x) exp(x)/x, pi) f <- function(x) exp(x)/x sq("f", pi) sq(~ exp(x)/x, pi) sq(x ~ exp(x)/x, pi) } \keyword{ programming } gsubfn/man/as.function.formula.Rd0000644000176200001440000000421013252555677016511 0ustar liggesusers\name{as.function.formula} \alias{as.function.formula} \title{ Make a one-line function from a formula. } \description{ Create a function from a formula. } \usage{ \method{as.function}{formula}(x, ...) } \arguments{ \item{x}{ Formula with no left side. } \item{\dots}{ Currently not used. } } \value{ A function is returned whose formal arguments are the variables in the left hand side, whose body is the expression on the right side of the formula and whose environment is the environment of the formula. If there is no left hand side the free variables on the right, in the order encountered are used as the arguments. \code{letters}, \code{LETTERS} and \code{pi} are ignored and not used as arguments. If there is no left hand side and any of \code{..1}, \code{..2}, ..., \code{..9} are found as free variables then they are not used as arguments but \code{...} is used as a trailing argument instead. If there is no left hand side and \code{`&`} is found as a free variable then that variable is used as the first argument and \code{...} is added as the last argument. If the left hand side is \code{0} then the function is created as a zero argument function. } \note{\code{->}, \code{->>}, \code{=}, \code{<-}, \code{<<-} and \code{?} all have lower operator precdence than \code{~} so function bodies that contain them typically must be surrounded with \code{{...}}.} \seealso{ \code{\link[base]{Syntax}}.} \examples{ old.options <- options(keep.source = FALSE) as.function(~ as.numeric(x) + as.numeric(y)) as.function(x + y ~ as.numeric(x) + as.numeric(y)) # same as.function(~ ..1 + ..2) # the replacement function in gsubfn uses as.function.formula to # interpret formulas as functions. Here we insert ! after each digit. gsubfn("[0-9]", ~ paste0(`&`, "!"), "ab4cd5") \dontrun{ # example where function body must be surrounded with {...} # due to use of <<-. See warning section above. assign("mywarn", NULL, .GlobalEnv) fn$tryCatch( warning("a warning"), warning = w ~ { mywarn <<- conditionMessage(w)}) print(mywarn) } options(old.options) } \keyword{ character }