proto/0000755000176200001440000000000013004747713011423 5ustar liggesusersproto/COPYING0000644000176200001440000004363412540276036012467 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. proto/inst/0000755000176200001440000000000013004746110012366 5ustar liggesusersproto/inst/WISHLIST0000644000176200001440000000037712540276036013577 0ustar liggesusers WISHLIST o have str.proto check for cyclically defined proto objects ? o str.proto should give hash (in addition to name) when there is a name. Currently it gives name only or hash only (if there is no name). o eliminate .that and .super proto/inst/THANKS0000644000176200001440000000055712540276036013321 0ustar liggesusers Thanks to Tom Short (tshort@eprisolutions.com) for contributing code for print.instantiatedProtoMethod and str.proto. Thanks to John Verzani for helpful conversations regarding lazy evaluation. Thanks to Luke Tierney for helpful conversations regarding lazy evaluation and promises in R. Thanks to Matthias Burger for providing full argument patch. proto/inst/ReleaseNotes.txt0000644000176200001440000001362412540276036015537 0ustar liggesusers Guide to version 0.4-0 of proto 1. Lazy Evaluation The proto function now evaluates its ... argument lazily. This together with a lazy cloning routine, clone, allows the user to use a proto object as a template for other objects. For example, in the code below - gwindow is the gWidgets function to create a new window and - gbutton is the function to create a button in indicated container. We create a proto object p which defines - a container, container, embodying a new window and - a method, go, which places a button in it. We clone p to create q before we run p$go() so that q gets its own promise and that will result in p$go() and q$go() creating different windows. library(proto) library(gWidgets) p <- proto(go = function(.) gbutton(.$msg, cont = .$container), msg = "Hello", container = gwindow()) # now its lazy q <- p$clone() # promises copied, not forced p$go() q$go() Had the statements been run in the following order, i.e. q is defined after p$go is run, then clone would have copied the actual container and not a promise to it so q would try to place its button in the same container as p giving an error. p <- proto(go = function(.) gbutton(.$msg, cont = .$container), msg = "Hello", container = gwindow()) # now its lazy p$go() q <- p$clone() # promises copied, not forced q$go() # ERROR !!! Here is an example that does not make use of any additional R packages. It also appears in example(proto) . Note the difference between the following two code snippets which differ only in the order of the statements: # q is cloned before promises in p are forced p <- proto(append = function(., x) .$L[[x]] <- x, L = proto()) q <- p$clone() p$append("A") as.list(p$L) q$append("B") as.list(q$L) # promises in p are forced before q is cloned p <- proto(append = function(., x) .$L[[x]] <- x, L = proto()) p$append("C") as.list(p$L) q <- p$clone() q$append("D") as.list(q$L) 2. as.list.environment This is a workaround to handle the a bug in R's version of this command. R will not evaluate promises when converting an environment to a list and this can cause subsequent problems. The implementation in proto works around this problem in R. 3. $.proto If p is a proto object and meth is a method in it then p$meth(myArg) first runs p$meth creating an instantiated proto object. Previously this was a call to meth with p inserted as its first argument. This has been changed so that the keyword receiver is inserted as its first argument and reciever is given a default value of p so that by default it works the same as before; however, it is possible to specify a different value for receiver like this: p$meth(receiver = q, myArg) in which case the meth found in p (or an ancestor) is run using q as the receiver object and myArg as an argument. Note that p$meth(myArg) p$meth(receiver = p, myArg) are the same. 4. super() and that() Previously .that and .super were built in variables that could be used in methods to refer to the object the method is defined in and its parent respectively. These variables were stored in every proto object and if a method had that object as its environment then it could access them to find out what object it belongs to and to easily refer to its object's parent. Unfortunately this polluted every proto object with .that and .super variables. To clean this up we have defined that() and super() functions which simply return the environment of the method they are defined in and its parent respectively so that .that and .super are no longer needed. Also there were special rules in $.proto so .that$meth would not automatically insert .that into the resulting function and similarly for .super. For compatibility .that and .super continue to exist and the special rule continues to be supported; however, for that() and super() no special processing is done. Given the existence of receiver its not needed. Thus: .that$meth(p, myArgs) that()$meth(receiver = p, myArgs) are the same. Both .that/.super and that()/super() currently exist but in an upcoming version of proto .that/.super will be eliminated so users should take the time to switch over. Note that .that and .super would continue to work within a function within a method but that() and super() do not. On the other hand its quite easy to work around it: p <- function(.) { f <- function() .that x <- f() } is the same as (we just added the first line and changed .that to that): p <- function(.) { that <- that() f <- function() that x <- f() } Looking over a large amount of proto code we found very little of it uses .that or .super so the elimination of these variables in every proto object seems like a worthwhile benefit compared to the minor change in syntax required in a small number of routines. 5. There are several new demos. To see them try this: demo(package = proto) One of these demos is from John Verzani who developed the gWidgets package. For more proto examples with gWidgets see the links on the proto home page to his other examples. 6. instantiatedProtoMethod This feature has been in proto for a while. It was developed based on the original by Tom Short. p$meth creates an object of class "instantiatedProtoMethod" which has its own print method. 7. Examples There are some gWidget examples from John Verzani that specifically take advantage of proto 0.4-0 features here: http://wiener.math.csi.cuny.edu/pmg/gWidgets/Examples/ProtoExample-II-ex.pdf 8. DESCRIPTION Packages that have proto objects at the top level should use "LazyLoad: false" in their DESCRIPTION file. (Alternately "SaveImage: true" works although it has been deprecated in R. Also note that omitting the LazyLoad: line means that R will choose a default action and so is NOT equivalent to "LazyLoad: false".) proto/inst/FAQ0000644000176200001440000000342712540276036012737 0ustar liggesusers proto Package FAQ 1. What scope do unqualified object references within methods use? A proto object is an environment and the defined methods in a proto object have that environment as their parent. Thus unqualified object references within a proto method look first in the method itself and secondly in the proto object in which they are defined. This is referred to as object scope as opposed to lexical scope or dynamic scope. It allows simple situations where delegation is not used to use unqualified names. Thus simple situations remain simple. Also read http://hhbio.wasser.tu-dresden.de/projects/proto/prototype_approaches.pdf about the fragile base class problem for additional information that relates to this question. 2. Why does obj$meth not return the method, meth? obj$meth(x, y) needs to call meth(obj, x, y) so obj$meth needs to return meth with its first argument, obj, already inserted. Since calling a method is the most common operation that operation was made the simplest. To get the method itself use with(obj, meth) 3. How does one debug a method? proto will not dynamically redefine methods. This has the advantage that debug can be used. Be sure you are referring to the method itself and not a call to the method: with(obj, debug(meth)) and not debug(obj$meth) # wrong! 4. Is multiple inheritance supported? No. proto is just a thin layer on top of R environments and R environments provide single inheritance only. Note that: http://hhbio.wasser.tu-dresden.de/projects/proto/prototype_approaches.pdf discusses some ways of handling situations which would otherwise require multiple inheritance. 5. How does one document proto methods. One can use an R .Rd file together with \alias entries. proto/inst/doc/0000755000176200001440000000000013004746107013141 5ustar liggesusersproto/inst/doc/proto.Rnw0000644000176200001440000014340413004746107015002 0ustar liggesusers%\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass[nojss]{jss} \usepackage{Sweave} \DeclareGraphicsExtensions{.pdf, .eps, .png} \newlength{\half} \setlength{\half}{70mm} \author{Louis Kates\\GKX Associates Inc. \And Thomas Petzoldt\\Technische Universit\"at Dresden} \Plainauthor{Louis Kates, Thomas Petzoldt} \title{\pkg{proto}: An \proglang{R} Package for Prototype Programming} %% \Shorttitle{\pkg{proto}: An \proglang{R} Package for Prototype Programming} \Plaintitle{proto: An R Package for Prototype Programming} \Keywords{prototype programming, delegation, inheritance, clone, object orientated, \proglang{S3}, \proglang{R}} \Plainkeywords{object oriented, prototype programming, S3, R} \Abstract{ \pkg{proto} is an \proglang{R} package which facilitates a style of programming known as prototype programming. Prototype programming is a type of object oriented programming in which there are no classes. \pkg{proto} is simple yet retains the object oriented features of delegation (the prototype counterpart to inheritance) and object oriented dispatch. \code{proto} can be used to organize the concrete data and procedures in statistical studies and other applications without the necessity of defining classes while still providing convenient access to an object oriented style of programming. Furthermore, it can be used in a class-based style as well so that incremental design can begin with defining the concrete objects and later transition to abstract classes, once the general case is understood, without having to change to object-oriented frameworks. The key goals of the package are to integrate into \proglang{R} while providing nothing more than a thin layer on top of it. } \hyphenation{ma-ni-pu-lating} \begin{document} \SweaveOpts{concordance=TRUE} \section{Introduction} \label{sec:intro} \subsection[Object Oriented Programming in R]{Object Oriented Programming in \proglang{R}} \label{sec:oo} The \proglang{R} system for statistical computing \citep[\url{http://www.R-project.org/}]{Rcore2005} ships with two systems for object oriented programming referred to as \proglang{S3} and \proglang{S4}. With the increased interest in object oriented programming within \proglang{R} over the last years additional object oriented programming packages emerged. These include the \pkg{R.oo} package \citep{Bengtsson2003} and the \pkg{OOP} package \citep[\url{http://www.omegahat.net/OOP/}]{Rnews:Chambers+Lang:2001a}. All these packages have the common thread that they use classes as the basis of inheritance. When a message is sent to an object the class of the object is examined and that class determines the specific function to be executed. In prototype programming there are no classes making it simple yet it retains much of the power of class-based programming. In the fact, \pkg{proto} is so simple that there is only one significant new routine name, \code{proto}. The other routines are just the expected support routines such as \code{as.proto} to coerce objects to proto objects, \code{\$} to access and set proto object components and \code{is.proto} to check whether an object is a proto object. In addition, \code{graph.proto} will generate a graphical ancestor tree showing the parent-child relationships among generated \code{proto} objects. The aim of the package is to provide a lightweight layer for prototype programming in \proglang{R} written only in \proglang{R} leveraging the existing facilities of the language rather than adding its own. \subsection{History} \label{sec:history} The concept of prototype programming \citep{Lieberman1986, Taivalsaari1996a, Noble1999} has developed over a number of years with the \proglang{Self} language \citep{Agesen1992} being the key evolved programming language to demonstrate the concept. In statistics, the \proglang{Lisp}-based \proglang{LispStat} programming language \citep{Tierney1990} was the first and possibly only statistical system to feature prototype programming. Despite having been developed over 20 years ago, and some attempts to enter the mainstream (e.g. \proglang{Newtonscript} on the Newton computer, which is no longer available, and \proglang{Javascript} where it is available but whose domain of application largely precluses use of prototype programming) prototype programming is not well known due to lack of language support in popular programming languages such as \proglang{C} and \proglang{Java}. It tends to be the domain of research languages or \proglang{Lisp}. Thus the the availability of a popular language, \proglang{R} \footnote{Some indications of the popularity of R are the high volume mailing lists, international development team, the existence of over 500 addon packages, conferences and numerous books and papers devoted to R.}, that finally does provide the key infrastructure is an important development. This work grew out of the need to organize multiple scenarios of model simulations in ecological modelling \citep{Rnews:Petzoldt:2003} and was subsequently generalized to the present package. A number of iterations of the code, some motivated by the ever increasing feature set in \proglang{R}, resulted in a series of utilities and ultimately successive versions of an \proglang{R} package developed over the last year. An initial version used \proglang{R} lists as the basis of the package. Subsequently the package was changed to use \proglang{R} environments. The first version to use environments stored the receiver object variable in a proxy parent environment which was created on-the-fly at each method call. The present version of the \pkg{proto} package passes the receiver object through the argument list, while hiding this from the caller. It defines the \code{proto} class as a subclass of the \code{environment} class so that functionality built into \proglang{R} for the environment class is automatically inherited by the \code{proto} class. \subsection{Overview} \label{sec:overview} It is assumed that the reader has some general familiarity with object oriented programming concepts and with \proglang{R}. The paper will proceed primarily by example focusing on illustrating the package \code{proto} through such demonstration. The remainder of the paper is organized as follows: Section~\ref{sec:proto-class} explains how \code{"proto"} objects are created and illustrates the corresponding methods for setting and getting components. It further discusses how object oriented delegation (the prototype programming analogue of inheritance) is handled and finally discusses the internals of the package. This section uses small examples chosen for their simplicity in illustrating the concepts. In Section~\ref{sec:examples} we provide additional examples of prototype programming in action. Four examples are shown. The first involves smoothing of data. Secondly we demonstrate the calculation of correlation confidence intervals using classical (Fisher Transform) and modern (bootstrapping) methods. Thirdly we demonstrate the development of a binary tree as would be required for a dendrogram. Fourthly, we use the solution of linear equations to illustrate program evolution from object-based to class-based, all within the \pkg{proto} framework. Section~\ref{sec:summary} gives a few summarizing remarks. Finally, an appendix provides a reference card that summarizes the functionality contained in \pkg{proto} in terms of its constituent commands. %% \pagebreak[4] \section[The class "proto" and its methods]{The class \code{"proto"} and its methods} \label{sec:proto-class} \subsection[Creation of "proto" objects]{Creation of \code{"proto"} objects} \label{sec:proto} In this section we shall show, by example, the creation of two prototype objects and related operations. The simple idea is that each \code{"proto"} object is a set of components: functions (methods) and variables, which are tightly related in some way. A prototype object is an environment holding the variables and methods of the object. \footnote{In particular this implies that \code{"proto"} objects have single inheritance, follow ordinary environment scoping rules and have mutable state as environments do.} A prototype object is created using the constructor function \code{proto} (see Appendix~\ref{sec:ref} at the end of this paper or \pkg{proto} package help for complete syntax of commands). \begin{Scode} addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) \end{Scode} In this simple example, the \code{proto} function defines two components: a variable \code{x} and a method \code{add}. The variable \code{x} is a vector of 5 numbers and the method sums those numbers. The \code{proto} object \code{addProto} contains the variable and the method. Thus the \code{addProto} \code{proto} object can be used to compute the sum of the values stored in it. As shown with the \code{add} method in this example, formal argument lists of methods must always have a first argument of dot (i.e. \code{.}) which signifies the object on which the method is operating. The dot refers to the current object in the same way that a dot refers to the current directory in UNIX. Within the method one must refer to other variables and methods in the object by prefacing each with \code{.\$}. For example, in the above we write \code{sum(.\$x)}. Finally, note that the data and the method are very closely related. Such close coupling is important in order to create an easily maintained system. To illustrate the usage of \code{proto}, we first load the package and set the random seed to make the examples in this paper exactly reproducible. \begin{Schunk} \begin{Sinput} > library(proto) > set.seed(123) \end{Sinput} \end{Schunk} Then, we create the \code{proto} object from above and call its \code{add} method. \begin{Schunk} \begin{Sinput} > addProto <- proto(x = rnorm(5), add = function(.) sum(.$x)) > addProto$add() \end{Sinput} \begin{Soutput} [1] 0.9678513 \end{Soutput} \end{Schunk} We also create another object, \code{addProto2} with a different \code{x} vector and invoke its \code{add} method too. \begin{Schunk} \begin{Sinput} > addProto2 <- addProto$proto(x = 1:5) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} In the examples above, we created a prototype object \code{addProto} and then called its \code{add} method as just explained. The notation \code{addProto\$add} tells the system to look for the \code{add} method in the \code{addProto} object. In the expression \code{addProto\$add}, the \code{proto} object to the left of the dollar sign, \code{addProto} here, is referred to as the \emph{receiver} object. This expression also has a second purpose which is to pass the receiver object implicitly as the first argument of \code{add}. Note that we called \code{add} as if it had zero arguments but, in fact, it has one argument because the receiver is automatically and implicitly supplied as the first argument. In general, the notation \code{object\$method(arguments)} is used to invoke the indicated method of the receiver object using the object as the implicit first argument along with the indicated arguments as the subsequent arguments. As with the \code{addProto} example, the receiver object not only determines where to find the method but also is implicitly passed to the method through the first argument. The motivation for this notation is to relieve the user of specifying the receiver object twice: once to locate the method in the object and a second time to pass the object itself to the method. The \code{\$} is overloaded by the \code{proto} class to automatically do both with one reference to the receiver object. Even though, as with the \code{addProto} example, the first argument is not listed in the call it still must be listed among the formal arguments in the definition of the method. It is conventional to use a dot \code{.} as the first formal argument in the method/function definition. That is, we call \code{add} using \code{addProto\$add()} displaying zero arguments but we define \code{add} in \code{addProto} displaying one argument \code{add <- function(.)}, the dot. In this example, we also created a second object, \code{addProto2}, which has the first object, \code{addProto} as its parent. Any reference to a component in the second object that is unsuccessful will cause search to continue in the parent. Thus the call \code{addProto2\$add()} looks for \code{add} in \code{addProto2} and not finding it there searches its parent, \code{addProto}, where it is, indeed, found. \code{add} is invoked with the receiver object, \code{addProto2}, as the value of dot. The call \code{addProto2\$add()} actually causes the \code{add} in \code{addProto} to run but it still uses the \code{x} from \code{addProto2} since dot (\code{.}) is \code{addProto2} here and \code{add} references \code{.\$x}. Note that the reference to \code{.\$x} in the \code{add} found in \code{addProto} does not refer to the \code{x} in \code{addProto} itself. The \code{x} in \code{addProto2} has overridden the \code{x} in its parent. This point is important so the reader should take care to absorb this point. This simple example already shows the key elements of the system and how \emph{delegation} (the prototype programming term for inheritance) works without classes. We can add new components or replace components in an object and invoke various methods like this: \begin{Schunk} \begin{Sinput} > addProto2$y <- seq(2, 10, 2) > addProto2$x <- 1:10 > addProto2$add3 <- function(., z) sum(.$x) + sum(.$y) + sum(z) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \begin{Sinput} > addProto2$add3(c(2, 3, 5)) \end{Sinput} \begin{Soutput} [1] 95 \end{Soutput} \begin{Sinput} > addProto2$y \end{Sinput} \begin{Soutput} [1] 2 4 6 8 10 \end{Soutput} \end{Schunk} In this example, we insert variable \code{y} into the object \code{addProto2} with a value of \code{seq(2,10,2)}, reset variable \code{x} to a new value and insert a new method, \code{add3}. Then we invoke our two methods and display \code{y}. Again, note that in the case of \code{protoAdd2\$add} the \code{add} method is not present in \code{protoAdd2} and so search continues to the parent \code{addProto} where it is found. \subsection{Internals} \label{sec:internals} So far, we have used simple examples to illustrate the basic manipulation of objects: construction, getting and setting components and method invocation. We now discuss the internals of the package and how it relates to \proglang{R} constructs. \code{proto} is actually an \proglang{S3} class which is a subclass of the \code{environment} class. Every \code{proto} object is an environment and its class is \code{c("proto", "environment")}. The \code{\$} accessor is similar to the same accessor in environments except it will use the \proglang{R} \code{get} function to search up parent links if it cannot otherwise find the object (unlike environments). When accessing a method, \code{\$} automatically supplies the first argument to the method unless the object is \code{.that} or \code{.super}. \code{.that} is a special variable which \code{proto} adds to every \code{proto} object denoting the object itself. \code{.super} is also added to every proto object and is the parent of \code{.that}. \code{.that} and \code{.super} are normally used within methods of an object to refer to other components of the same or parent object, respectively, as opposed to the receiver (\code{.}). For example, suppose we want \code{add} in \code{addProto2} to add the elements of \code{x} together and the elements of \code{y} together and then add these two sums. We could redefine add like this: \begin{Schunk} \begin{Sinput} > addProto2$add <- function(.) .super$add(.) + sum(.$y) \end{Sinput} \end{Schunk} making use of the \code{add} already defined in the parent. One exception should be noted here. When one uses \code{.super}, as above, or \code{.that} to specify a method then the receiver object must be explicitly specified in argument one (since in those cases the receiver is possibly different than \code{.super} or \code{.that} so the system cannot automatically supply it to the call.) Setting a value is similar to the corresponding operation for environments except that any function, i.e method, which is inserted has its environment set to the environment of the object into which it is being inserted. This is necessary so that such methods can reference \code{.that} and \code{.super} using lexical scoping. In closing this section a few points should be re-emphasized and expanded upon. A \code{proto} object is an environment whose parent object is the parent environment of the \code{proto} object. The methods in the \code{proto} objects are ordinary functions that have the containing object as their environment. The \proglang{R} \code{with} function can be used with environments and therefore can be used with \code{proto} objects since \code{proto} objects are environments too. Thus \code{with(addProto, x)} refers to the variable \code{x} in \code{proto} object \code{addProto} and \code{with(addProto, add)} refers to the method \code{add} in the same way. \code{with(addProto, add)(addProto)} can be used to call \code{add}. These constructs all follow from their corresponding use in environments from which they are inherited. Because the \code{with} expressions are somewhat verbose, two common cases can be shortened using the \code{\$} operator. \code{addProto\$x} can be used to refer to variable \code{x} in \code{proto} object \code{addProto} and has the same meaning as \code{with(addProto, x)}. In particular like \code{with} but unlike the the behavior of the \code{\$} operator on environments, when used with \code{proto} objects, \code{\$} will search not only the object itself but also its ancestors. Similarly \code{addProto\$add()} can be used to call method \code{add} in \code{addProto} also searching through ancestors if not found in \code{addProto}. Note that \code{addProto\$add} returns an object of class \code{c("instantiatedProtoMethod", "function")} which is derived from \code{add} such that the first argument, the \code{proto} object, is already inserted. Note that there is a \code{print} method for class \code{"instantiatedProtoMethod"} so printing such objects will display the underlying function but returning such objects is not the same as returning the function without slot one inserted. Thus, if one wants exactly the original \code{add} as a value one should use \code{with(addProto, add)} or \code{addProto\$with(add)}. Within a method, if a variable is referred to without qualification simply as \code{x}, say, then its meaning is unchanged from how it is otherwise used in \proglang{R} and follows the same scope rules as any variable to resolve its name. If it is desired that the variable have object scope, i.e. looked up in the receiver object and its ancestors, then \code{.\$x} or similar \code{with} notation, i.e. \code{with(., x)}, should be used. Similarly \code{.\$f(x)} calls method \code{f} automatically inserting the receiver object into argument one and using \code{x} for argument two. It looks for \code{f} first in the receiver object and then its ancestors. \subsection{Traits} \label{sec:traits} Let us look at the definition of a child object once again. In the code below, \code{addProto} is the previously defined parent object and the expression \code{addProto\$proto(x = 1:5)} defines a child object of \code{addProto} and assigns it to variable \code{addProto2a}. \begin{Schunk} \begin{Sinput} > addProto2a <- addProto$proto(x = 1:5) > addProto2a$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} That is, \code{proto} can be used to create a new child of an existing object by writing the parent object on the left of the \code{\$} and \code{proto} on its right. Any contents to be added to the new child are listed in arguments of \code{proto} as shown. For example, first let us create a class-like structure. In the following \code{Add} is an object that behaves very much like a class with an \code{add} method and a method \code{new} which constructs new objects. In the line creating object \code{add1} the expression \code{Add\$new(x = 1:5)} invokes the \code{new} constructor of the receiver object \code{Add}. The method \code{new} has an argument of \code{x = 1:5} which defines an \code{x} variable in the \code{add1} object being instantiated. We similarly create another object \code{add2}. \begin{Schunk} \begin{Sinput} > Add <- proto(add = function(.) sum(.$x), new = function(., x) .$proto(x = x)) > add1 <- Add$new(x = 1:5) > add1$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \begin{Sinput} > add2 <- Add$new(x = 1:10) > add2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \end{Schunk} An object which contains only methods and variables that are intended to be shared by all its children (as opposed to an object whose purpose is to have its own methods and variables) is known as a \emph{trait} \citep{Agesen1992}. It is similar to a class in class-based object oriented programming. Note that the objects \code{add1} and \code{add2} have the trait \code{Add} as their parent. We could implement subclass-like and superclass-like objects by simply defining similar trait objects to be the parent or child of \code{Add}. For example, suppose we want a class which calculates the sum of the logarithms of the data. We could define: \begin{Schunk} \begin{Sinput} > Logadd <- Add$proto(logadd = function(.) log(.$add())) > logadd1 <- Logadd$new(1:5) > logadd1$logadd() \end{Sinput} \begin{Soutput} [1] 2.70805 \end{Soutput} \end{Schunk} Here the capitalized objects are traits. \code{Logadd} is a trait. It is a child of \code{Add} which is also a trait. \code{logadd1} is an ordinary object, not a trait. One possible design is to create a tree of traits and other objects in which the leaves are ordinary objects and the remaining nodes are traits. This would closely correspond to class-based object oriented programming. Note that the delegation of methods from one trait to another as in \code{new} which is inherited by \code{Logadd} from \code{Add} is nothing more than the same mechanism by which traits delegate methods to objects since, of course, traits are just objects no different from any other object other than by the conventions we impose on them. This unification of subclassing and instantiation beautifully shows the simplification that prototype programming represents. \subsection{Utilities} \label{sec:utilities} The fact that method calls automatically insert the first argument can be used to good effect in leveraging existing \proglang{R} functions while allowing an object-oriented syntax. For example, \code{ls()} can be used to list the components of \code{proto} objects: \begin{Schunk} \begin{Sinput} > addProto$ls() \end{Sinput} \begin{Soutput} [1] "add" "x" \end{Soutput} \end{Schunk} Functions like: \begin{Schunk} \begin{Sinput} > addProto$str() > addProto$print() > addProto$as.list() > addProto2a$parent.env() \end{Sinput} \end{Schunk} show additional information about the elements. \code{eapply} can be used to explore more properties such as the the length of each component of an object: \begin{Schunk} \begin{Sinput} > addProto$eapply(length) \end{Sinput} \end{Schunk} Another example of some interest in any object oriented system which allows multiple references to one single object is that object identity can be tested using the respective base function: \begin{Schunk} \begin{Sinput} > addProto$identical(addProto2) \end{Sinput} \begin{Soutput} [1] FALSE \end{Soutput} \end{Schunk} \code{proto} does contain a special purpose \code{str.proto} function but in the main it is important to notice here, that \code{proto} has no code that is specific to \code{ls} or any of the other ordinary \proglang{R} functions listed. We are simply making use of the fact that \code{obj\$fun(...)} is transformed into \code{get("fun", obj)(obj, ...)} by the proto \code{\$} operator. For example, in the case of \code{addProto\$ls()} the system looks for \code{ls} in object \code{addProto}. It cannot find it there so it looks to its parent, which is the global environment. It does not find it there so it searches the remainder of the search path, i.e. the path shown by running the \proglang{R} command \code{search()}, and finally finds it in the base package, invoking it with an argument of \code{addProto}. Since all \code{proto} objects are also environments \code{ls(addProto)} interprets \code{addProto} as an environment and runs the \code{ls} command with it. In the \code{ls} example there were no arguments other than \code{addProto}, and even that one was implicit, but if there were additional arguments then they would be passed as shown in the \code{eapply} and \code{identical} examples above. \subsection{Plotting} \label{sec:plot} The \code{graph.proto} function can be used to create graphs that can be rendered by the \code{Rgraphviz} package creating visual representations of ancestor trees (figure \ref{fig:proto-dot}). That package provides an interface to the \proglang{GraphViz} \code{dot} program \citep{Ganser+North:1999}. \code{graph.proto} takes three arguments, all of which are usually omitted. The first argument is a \code{proto} object (or an environment) out of which all contained \code{proto} objects and their parents (but not higher order ancestors) are graphed. If it is omitted, the current environment is assumed. The second argument is a graph (in the sense of the \code{graph} package) to which the nodes and edges are added. If it is omitted an empty graph is assumed. The last argument is a logical variable that specifies the orientation of arrows. If omitted arrows are drawn from children to their parents. \input{proto-dot} \begin{figure}[htbp] \begin{center} \includegraphics{proto-dot} \caption{\label{fig:proto-dot} Ancestor tree generated using graph.proto. Edges point from child to parent.} \end{center} \end{figure} \pagebreak[4] \section{Examples} \label{sec:examples} \subsection{Smoothing} \label{sec:smooth} In the following we create a \code{proto} object named \code{oo} containing a vector of data \code{x} (generated from a simulated autoregressive model) and time points \code{tt}, an intermediate result \code{x.smooth}, some plotting parameters \code{xlab}, \code{ylab}, \code{pch}, \code{col} and three methods \code{smooth}, \code{plot} and \code{residuals} which smooth the data, plot the data and calculate residuals, respectively. We also define \code{..x.smooth} which holds intermediate results. Names beginning with two dots prevent them from being delegated to children. If we override \code{x} in a child we would not want an out-of-sync \code{x.smooth}. Note that the components of an object can be specified using a code block in place of the argument notation we used previously in the \code{proto} command. \begin{Schunk} \begin{Sinput} > oo <- proto(expr = { + x <- rnorm(251, 0, 0.15) + x <- filter(x, c(1.2, -0.05, -0.18), method = "recursive") + x <- unclass(x[-seq(100)]) * 2 + 20 + tt <- seq(12200, length = length(x)) + ..x.smooth <- NA + xlab <- "Time (days)" + ylab <- "Temp (deg C)" + pch <- "." + col <- rep("black", 2) + smooth <- function(., ...) { + .$..x.smooth <- supsmu(.$tt, .$x, ...)$y + } + plot <- function(.) with(., { + graphics::plot(tt, x, pch = pch, xlab = xlab, ylab = ylab, + col = col[1]) + if (!is.na(..x.smooth[1])) + lines(tt, ..x.smooth, col = col[2]) + }) + residuals <- function(.) with(., { + data.frame(t = tt, y = x - ..x.smooth) + }) + }) \end{Sinput} \end{Schunk} Having defined our \code{proto} object we can inspect it, as shown below, using \code{print} which is automatically invoked if the name of the object, \code{oo}, is entered on a line by itself. In this case, there is no proto print method so we inherit the environment print method which displays the environment hash code. Although it produces too much output to show here, we could have displayed a list of the entire contents of the object \code{oo} via \code{oo\$as.list(all.names = TRUE)}. We can get a list of the names of the components of the object using \code{oo\$ls(all.names = TRUE)} and will look at the contents of one component, \code{oo\$pch}. \begin{Schunk} \begin{Sinput} > oo \end{Sinput} \begin{Soutput} attr(,"class") [1] "proto" "environment" \end{Soutput} \begin{Sinput} > oo$ls(all.names = TRUE) \end{Sinput} \begin{Soutput} [1] "..x.smooth" ".super" ".that" "col" "pch" [6] "plot" "residuals" "smooth" "tt" "x" [11] "xlab" "ylab" \end{Soutput} \begin{Sinput} > oo$pch \end{Sinput} \begin{Soutput} [1] "." \end{Soutput} \end{Schunk} Let us illustrate a variety of manipulations. We will set up the output to plot 2 plots per screen using \code{mfrow}. We change the plotting symbol, smooth the data, invoke the \code{plot} method to display a plot of the data and the smooth and then plot the residuals in the second plot (figure \ref{fig:proto-smooting03}). \input{proto-smoothing03} \begin{figure}[h!] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing03} \end{center} \caption{Data and smooth from \code{oo\$plot()} (left) and plot of \code{oo\$residuals()} (right).} \label{fig:proto-smooting03} \end{figure} Now let us illustrate the creation of a child object and delegation. We create a new child object of \code{oo} called \code{oo.res}. We will override the \code{x} value in its parent by setting \code{x} in the child to the value of the residuals in the parent. We will also override the \code{pch} and \code{ylab} plotting parameters. We will return to 1 plot per screen and run \code{plot} using the \code{oo.res} object as the receiver invoking the \code{smooth} and \code{plot} methods (which are delegated from the parent \code{oo}) with the data in the child (figure \ref{fig:smoothing04}). \input{proto-smoothing04} % \begin{figure}[tp] \begin{figure}[h!] \begin{center} \includegraphics[width=\half]{proto-smoothing04} \end{center} \caption{Output of \code{oo.res\$plot()}. \code{oo.res\$x} contains the residuals from \code{oo}.} \label{fig:smoothing04} \end{figure} Now we make use of delegation to change the parent and child in a consistent way with respect to certain plot characteristics. We have been using a numeric time axis. Let us interpret these numbers as the number of days since the Epoch, January 1, 1970, and let us also change the plot colors. \begin{Schunk} \begin{Sinput} > oo$tt <- oo$tt + as.Date("1970-01-01") > oo$xlab <- format(oo.res$tt[1], "%Y") > oo$col <- c("blue", "red") \end{Sinput} \end{Schunk} We can introduce a new method, \code{splot}, into the parent \code{oo} and have it automatically inherited by its children. In this example it smooths and then plots and we use it with both \code{oo} and \code{oo.res} (figure \ref{fig:smoothing06}). \input{proto-smoothing06} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing06} \caption{Plotting options and \code{splot} function applied to both parent (left) and child (right) object} \label{fig:smoothing06} \end{center} \end{figure} Numerous possibilities exist to make use of the mechanisms shown, so one may create different child objects, apply different smoothing parameters, overwrite the smoothing function with a lowess smoother and finally compare fits and residuals. Now lets change the data and repeat the analysis. Rather than overwrite the data we will preserve it in \code{oo} and create a child \code{oos} to hold an analysis with sinusoidal data. \begin{Schunk} \begin{Sinput} > oos <- oo$proto(expr = { + tt <- seq(0, 4 * pi, length = 1000) + x <- sin(tt) + rnorm(tt, 0, 0.2) + }) > oos$splot() \end{Sinput} \end{Schunk} Lets perform the residual analysis with \code{oos}. We will make a deep copy of \code{oo.res}, i.e. duplicate its contents and not merely delegate it, by copying \code{oo.res} to a list from which we create the duplicate, or cloned, \code{proto} object (figure \ref{fig:smoothing10} and \ref{fig:cloning}): \begin{Schunk} \begin{Sinput} > oos.res <- as.proto(oo.res$as.list(), parent = oos) > oos.res$x <- oos$residuals()$y > oos.res$splot() \end{Sinput} \end{Schunk} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing10} \caption{Smoothing of sinusoidal data (left) and of their residuals (right)}\label{fig:smoothing10} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \includegraphics[width=50mm]{cloning3.pdf} \caption{Cloning (dashed line) and delegation (solid line). Edges point from child to parent.}\label{fig:cloning} \end{center} \end{figure} We have delegated variables and methods and overridden both. Thus, even with such a simple analysis, object orientation and delegation came into play. The reader can plainly see that smoothing and residual analysis were not crucial to the example and this example could be replaced with any statistical analysis including likelihood or other estimation techniques, time series, survival analysis, stochastic processes and so on. The key aspect is just that we are performing one-of analyses and do not want to set up an elaborate class infrastructure but just want to directly create objects to organize our calculations while relying on delegation and dispatch to eliminate redundancy. \subsection{Correlation, Fisher's Transform and Bootstrapping} \label{sec:corr} The common approach to confidence intervals for the correlation coefficient is to assume normality of the underlying data and then use Fisher's transform to transform the correlation coefficient to an approximately normal random variable. Fisher showed that with the above normality assumption, transforming the correlation coefficient using the hyperbolic arc tangent function yields a random variable approximately distributed with an $\frac{N(p, 1)}{\sqrt(n-3)}$ distribution. The transformed random variable can be used to create normal distribution confidence intervals and the procedure can be back transformed to get confidence intervals for the original correlation coefficient. A more recent approach to confidence intervals for the correlation coefficient is to use bootstrapping. This does not require the assumption of normality of the underlying distribution and requires no special purpose theory devoted solely to the correlation coefficient, Let us calculate the 95\% confidence intervals using Fisher's transform first. We use \code{GNP} and \code{Unemployed} from the Longley data set. First we retrieve the data set and extract the required columns into \code{x}. Then we set \code{n} to the number of cases and \code{pp} to the percentiles of interest. Finally we calculate the sample correlation and create a function to calculate the confidence interval using Fisher's Transform. This function not only returns the confidence interval but also stores it in \code{CI} in the receiver object. \begin{Schunk} \begin{Sinput} > longley.ci <- proto(expr = { + data(longley) + x <- longley[, c("GNP", "Unemployed")] + n <- nrow(x) + pp <- c(0.025, 0.975) + corx <- cor(x)[1, 2] + ci <- function(.) (.$CI <- tanh(atanh(.$corx) + qnorm(.$pp)/sqrt(.$n - + 3))) + }) \end{Sinput} \end{Schunk} Now let us repeat this analysis using the bootstrapping approach. We derive a new object \code{longley.ci.boot} as child of \code{longley.ci}, setting the number of replications, \code{N}, and defining the procedure, \code{ci} which does the actual bootstrap calculation. \begin{Schunk} \begin{Sinput} > longley.ci.boot <- longley.ci$proto({ + N <- 1000 + ci <- function(.) { + corx <- function(idx) cor(.$x[idx, ])[1, 2] + samp <- replicate(.$N, corx(sample(.$n, replace = TRUE))) + (.$CI <- quantile(samp, .$pp)) + } + }) \end{Sinput} \end{Schunk} In the example code below the first line runs the Fisher Transform procedure and the second runs the bootstrap procedure. Just to check that we have performed sufficient bootstrap iterations we rerun it in the third line, creating a delegated object on-the-fly running its \code{ci} method and then immediately throwing the object away. The fact that 4,000 replications give roughly the same result as 1,000 replications satisfies us that we have used a sufficient number of replications. \begin{Schunk} \begin{Sinput} > longley.ci$ci() \end{Sinput} \begin{Soutput} [1] 0.1549766 0.8464304 \end{Soutput} \begin{Sinput} > longley.ci.boot$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2299395 0.8211854 \end{Soutput} \begin{Sinput} > longley.ci.boot$proto(N = 4000)$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2480999 0.8259276 \end{Soutput} \end{Schunk} We now have the results stored in two objects nicely organized for the future. Note, again, that despite the simplicity of the example we have used the features of object oriented programming, coupling the data and methods that go together, while relying on delegation and dispatch to avoid duplication. \subsection{Dendrograms} \label{sec:tree} In \cite{Gentleman2002} there is an \proglang{S4} example of creating a binary tree for use as a dendrogram. Here we directly define a binary tree with no setup at all. To keep it short we will create a binary tree of only two nodes having a root whose left branch points to a leaf. The leaf inherits the \code{value} and \code{incr} components from the root. The attractive feature is that the leaf be defined as a child of the parent using \code{proto} before the parent is even finished being defined. Compared to the cited \proglang{S4} example where it was necessary to create an extra class to introduce the required level of indirection there is no need to take any similar action. \code{tree} is the root node of the tree. It has four components. A method \code{incr} which increments the \code{value} component, a \code{..Name}, the \code{value} component itself and the left branch \code{..left}. \code{..left} is itself a proto object which is a child of \code{tree}. The leaf inherits the \code{value} component from its parent, the root. As mentioned, at the time we define \code{..left} we have not even finished defining \code{tree} yet we are able to implicitly reference the yet to be defined parent. \begin{Schunk} \begin{Sinput} > tree <- proto(expr = { + incr <- function(., val) .$value <- .$value + val + ..Name <- "root" + value <- 3 + ..left <- proto(expr = { + ..Name = "leaf" + }) + }) \end{Sinput} \end{Schunk} Although this is a simple structure we could have embedded additional children into \code{root} and \code{leaf} and so on recursively making the tree or dendrogram arbitrarily complex. Let us do some computation with this structure. We display the \code{value} fields in the two nodes, increment the value field in the root and then display the two nodes again to show .that the leaf changed too. \begin{Schunk} \begin{Sinput} > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 3 leaf: 3 \end{Soutput} \begin{Sinput} > tree$incr(1) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 4 \end{Soutput} \end{Schunk} If we increment \code{value} in \code{leaf} directly (see the example below where we increment it by 10) then it receives its own copy of \code{value} so from that point on \code{leaf} no longer inherits \code{value} from \code{root}. Thus incrementing the root by 5 no longer increments the \code{value} field in the leaf. \begin{Schunk} \begin{Sinput} > tree$..left$incr(10) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 14 \end{Soutput} \begin{Sinput} > tree$incr(5) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 9 leaf: 14 \end{Soutput} \end{Schunk} \subsection{From Prototypes to Classes} \label{sec:increment} In many cases we will use \pkg{proto} for a design that uses prototypes during the full development cycle. In other cases we may use it in an incremental way starting with prototypes but ultimately transitioning to classes. As shown in Section~\ref{sec:traits} the \pkg{proto} package is powerful enough to handle class-based as well as class-free programming. Here we illustrate this process of incremental design starting with concrete objects and then over time classifing them into classes, evolving a class-based program. \pkg{proto} provides a smooth transition path since it can handle both the class-free and the class-based phases -- there is no need to switch object systems part way through. In this example, we define an object which holds a linear equation, \code{eq}, represented as a character string in terms of the unknown variable \code{x} and a \code{print} and a \code{solve} method. We execute the \code{print} method to solve it. We also create child object \code{lineq2} which overrides \code{eq} and execute its \code{print} method. \begin{Schunk} \begin{Sinput} > lineq <- proto(eq = "6*x + 12 - 10*x/4 = 2*x", solve = function(.) { + e <- eval(parse(text = paste(sub("=", "-(", .$eq), ")")), + list(x = 0+1i)) + -Re(e)/Im(e) + }, print = function(.) cat("Equation:", .$eq, "Solution:", .$solve(), + "\n")) > lineq$print() \end{Sinput} \begin{Soutput} Equation: 6*x + 12 - 10*x/4 = 2*x Solution: -8 \end{Soutput} \begin{Sinput} > lineq2 <- lineq$proto(eq = "2*x = 7*x-12+x") > lineq2$print() \end{Sinput} \begin{Soutput} Equation: 2*x = 7*x-12+x Solution: 2 \end{Soutput} \end{Schunk} We could continue with enhancements but at this point we decide that we have a general case and so wish to abstract \code{lineq} into a class. Thus we define a trait, \code{Lineq}, which is just \code{lineq} minus \code{eq} plus a constructor \code{new}. The key difference between \code{new} and the usual \code{proto} function is that with \code{new} the initialization of \code{eq} is mandatory. Having completed this definition we instantiate an object of class/trait \code{Lineq} and execute it. \begin{Schunk} \begin{Sinput} > Lineq <- lineq > rm(eq, envir = Lineq) > Lineq$new <- function(., eq) proto(., eq = eq) > lineq3 <- Lineq$new("3*x=6") > lineq3$print() \end{Sinput} \begin{Soutput} Equation: 3*x=6 Solution: 2 \end{Soutput} \end{Schunk} Note how we have transitioned from a prototype style of programming to a class-based style of programming all the while staying within the \pkg{proto} framework. \section{Summary} \label{sec:summary} \subsection{Benefits} \label{sec:benefits} The key benefit of the \pkg{proto} package is to provide access to a style of programming that has not been conveniently accessible within \proglang{R} or any other mainstream language today. \pkg{proto} can be used in two key ways: class-free object oriented programming and class-based object oriented programming. A key application for \pkg{proto} in class-free programming is to wrap the code and data for each run of a particular statistical study into an object for purposes of organization and reproducibility. It provides such organization directly and without the need and overhead of class definitions yet still provides the inheritance and dispatch advantages of object oriented programming. We provide examples of this style of programming in Section~\ref{sec:smooth} and Section~\ref{sec:corr}. A third example in Section~\ref{sec:tree} illustrates a beneficial use of \pkg{proto} with recursive data structures. Another situation where prototype programming is of interest is in the initial development stages of a program. In this case, the design may not be fully clear so it is more convenient to create concrete objects individually rather than premature abstractions through classes. The \code{graph.proto} function can be used to generate visual representations of the object tree suggesting classifications of objects so that as the program evolves the general case becomes clearer and in a bottom up fashion the objects are incrementally abstracted into classes. In this case, \pkg{proto} provides a smooth transition path since it not only supports class-free programming but, as explained in the Section~\ref{sec:traits}, is sufficiently powerful to support class-based programming, as well. \subsection{Conclusion} \label{sec:conclusion} The package \pkg{proto} provides an \proglang{S3} subclass of the \code{environment} class for constructing and manipulating object oriented systems without classes. It can also emulate classes even though classes are not a primitive structure. Its key design goals are to provide as simple and as thin a layer as practically possible while giving the user convenient access to this alternate object oriented paradigm. This paper describes, by example, how prototype programming can be carried out in \proglang{R} using \pkg{proto} and illustrates such usage. Delegation, cloning traits and general manipulation and incremental development are all reviewed by example. \section*{Computational details} \label{sec:compute} The results in this paper were obtained using \proglang{R} 2.1.0 with the package \pkg{proto} 0.3--2. \proglang{R} itself and the \pkg{proto} package are available from CRAN at \url{http://CRAN.R-project.org/}. The GraphViz software is available from \url{http://www.graphviz.org}. \phantomsection \addcontentsline{toc}{section}{References} \bibliography{proto} %\input{proto.bbl} \newpage\mbox{} \begin{appendix} \section{Frequently Asked Questions} \label{sec:faq} \begin{enumerate} \item{What scope do unqualified object references within methods use? A \pkg{proto} object is an environment and that environment is the environment of the methods in it (by default). That is, unqualified object references within a \pkg{proto} method look first in the method itself and secondly in the \pkg{proto} object containing the method. This is referred to as object scope as opposed to lexical scope or dynamic scope. It allows simple situations, where delegation is not used, to use unqualified names. Thus simple situations remain simple. \citep{Kates2004} discusses the fragile base class problem which relates to this question. Also note that if a \pkg{proto} object is created via the \code{proto} function using an argument of \code{funEnvir = FALSE} then the environment of the function/method will not be set as just described (but rather it will retain its original environment) so the above does not apply. This can be used for instances when non-default processing is desirable.} \item{Why does \code{obj\$meth} not return the method, \code{meth}? Conceptually \code{obj\$meth} returns \code{meth} but with \code{obj} already inserted into its first argument. This is termed an instantiated \pkg{proto} method and is of \proglang{S3} class \code{"instantiatedProtoMethod"}. In contrast, the method itself (i.e. the uninstantited method) would not have the first argument already inserted. To return the method itself use \code{with(obj, meth}. The main advantage of a design that makes the distinction between instantiated and uninstantiated methods is that uninstantiated methods are never changed so debugging can be more readily carried out (as discussed in the next question and answer). } \item{How does one debug a method? \pkg{proto} does not dynamically redefine methods. This has the advantage that the ordinary \proglang{R} \code{debug} and \code{undebug} commands can be used. When using these be sure that to use them with the uninstantiated method itself and not the instantiated method derived from it. That is, use: \begin{verbatim} with(obj, debug(meth)) \end{verbatim} and not \begin{verbatim} debug(obj$meth) # wrong \end{verbatim} } \item{Is multiple inheritance supported? No. \pkg{proto} is just a thin layer on top of \proglang{R} environments and \proglang{R} environments provide single inheritance only. \citep{Kates2004} discusses some ways of handling situations which would otherwise require multiple inheritance.} \item{Does \pkg{proto} support lazy evaluation? Since \code{proto} methods are just \proglang{R} functions they do support lazy evaluation; however, the \code{proto} function itself does evaluate its arguments. To get the effect of lazy evaluation when using the \code{proto} function replace any properties with a function. If the caller is the parent of the \code{proto} object then its particularly simple. Note how we got the equivalent of lazy evaluation in the second example where f is a function: \begin{verbatim} # eager evaluation x <- 0 p <- proto(f = x, g = function(.) $x) x <- 1 p$f # 0 # versus making f a function # simulates lazy evaluation x <- 0 p <- proto(f = function(.) x, g = function(.) .$x) x <- 1 p$f() # 1 \end{verbatim} If we cannot guarantee that the proto object has the caller as its parent then ensure that the environment of the function has not been reset. If no method needs to reference \code{.that} or \code{.super} then we can arrange for that using \code{funEnvir=FALSE} as seen here in the second example: \begin{verbatim} # does not work as intended x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x) x <- 1 q$f() # 99 # does work x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x, funEnvir = FALSE) x <- 1 q$f() # 1 \end{verbatim} If we wish only to not reset the function used to simulate lazy evaluation then we can do it using either of the two equivalent alternatives below. \code{g} is an ordinary method whose environment is reset to \code{q} whereas \code{f} is a function whose environment is not reset and serves to provide lazy evaluation for \code{x} found in the caller. \begin{verbatim} x <- 0 p <- proto(x = 99) # g will use q's y in children of q even if those children # override y q <- p$proto(y = 25, g = function(.) .that$y + .$x) q[["f"]] <- function(.) x x <- 1 q$f() # 1 # equivalent alternative x <- 0 p <- proto(x = 99) q <- proto(f = function(.) x, funEnvir = FALSE, envir = p$proto(y = 25, g = function(.) .that$y + .$x)) x <- 1 q$f() # 1 \end{verbatim} } \end{enumerate} \newpage{} \section{Reference Card} \label{sec:ref} \input{protoref-raw} \end{appendix} \end{document} proto/inst/doc/protoref.pdf0000644000176200001440000016262413004746107015507 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Length 44 >> stream concordance:protoref.tex:protoref.Rnw:1 26 1 endstream endobj 4 0 obj << /Length 3361 /Filter /FlateDecode >> stream xڥ[I#W4 Ԁ)d`p$@<>9>nŚDl>[ert-,-8?bRqNH,w f{p=_wGwwۿzDL n0l| Ge=/Ջ*'1o /Viqq< Whu_},׾">D//=0}B.’FW_~ X)9Wrc16i|w/>@ž: #wD>}r}q=@qu\Yf5?SMbZEa b3us.8 ՠȚ{*e]30?4/#?E@Q3b~B1oe-V:K( ]e? )^tk7۵v9kqo{iio2[u8.iU4)g-YDdP2fh4UG"8aQ{,.s@ZHVn* V $P 癇UϐZJK41,~[’|I=]ࠅF͐$~[NvkʾP'MvV-v[A(lk&i .9 X9 5+& /d!0a;p04QhaK3Äl ᙶbbO2f2I*LCQB׆"4EX;7COa-]l/A j^%ؑfV`PE޾=,~6h=lr,&T88qA!Ǝ)]b'(] c xF vOAh-|+9<|$-J6ôH̗{>7ᥑ̀`\]m5Y\ '\X, 8XʾYdgܙC)kр櫞{ -&rLs1QX`Yku[,.cHݥIߏDŽ/h-H,8+#[ i2;1 'xiHûl[{<T3= ƫq^ DRQK{ܧ@1l%nQ90ׇUNM ]jeT>f"aa\EX]WTo «U>E녙>Pi]EryAѹk  3/y˞-F>6 .q'}cFh*̸͞',Oq1s2;Ǣ[ r ~(YnĤwd ^gs}JW^>ԋ+tC i #=e Pzdtд{b%&DGCly4i\ 'BµcAwtnTI77sL]B$QJϻjpeU*=cJ ^o௤]u b B@G0@xuz'(,x:)+j9oh)C>?L~ZKxy.Xr)5x?k陸{Hu? w%!=>oV5=GhgH̼? S4։I6y 뜐@Y% }z@2FM_*>q|  *y*.y9%_Z,h,c*o:ř0;̏Hr oz7אuVxݯ9(߄pQ1(5-< Uv ijt 41>C|,wUN7 9pS#r̈́]ۡ._Ys3n- ſ~O^L?3<+T pST9Q|Z=9-φA ށ>uR/?cCh*HI 2̃5\{;FBNLpZƿs%o3n死NjENߣrl x҄1֥ ۆ-%(uaY?'q+r9:&:wJ+`&,F*tJR:\hCymR(-i_ͅ%D#1%i5p6M!ǀ^ׄ,83js', =` =K4m3e8b KsQ'j s>ҿW4q[bLn?;Cd^z&ʃ;ȳxw}m<]T9mq3K0áO4**p)bl٤Gd*T t #WAe XZ?a8܏JL[A 'G ]0h^` J^qG꒢-lJ.w>ؼ1$;c# ~0.VFCU?ߘhb23*b>\勫0=٩H9-MP V=VUϳF%z*kxC@Ӥ%YДS?`g &Y nKi^T֦nڧ $` Ꮤ<1J"OeC箪˓EдZNcekyE(`WVGd[G|NW=.Zj)a` p$2+~\ri-5ե6,TXnN&8Df-g辰g;}S-S^RcibiO B-绾9;ۑu+_&,;BM>:$9p֟gLmIfY]t8>fL<9=\/q趔[:>4Riaqr/ 4fIao^*W endstream endobj 17 0 obj << /Length1 1407 /Length2 6390 /Length3 0 /Length 7345 /Filter /FlateDecode >> stream xڍ4]6D #FΌ2zo!Du0f%Jt "ADNQ'-k}ߺך콯\׽EG_e SE!1 $@IK@1uspRJhsS`qZ($@ @`I$%D%O@KB܉9P>h#z-\PnHBBw:@C!Hs AQP8 \Ҏ]vx1=; 31ǯxA0H;p9@_] Ck $wٿ !P(#p ) H_@uk!U]zCpW;kD_eOYirq!1ĿSacsHaGU w+\sa@ P 0o> \Q!`p{ `"vp(` s#S c__> 0^sz  jkj1EE7,@Ů,mrՑ(ğn_{%_qpY!ꚵ0HnB@T_Uo$߆T=aOG\s--Ե 5" a1u Z HĿ 1P?\71 A}T b‚:_8ܯ ;?TABQv&$ @h_[?е`޿) @0)(4]sA)D b~hF_7I;[07 J<5J:Մ6T+0z ʌqsM[<R_f/Rz;(fT姙/6k "&6_X'荬4*PxQ3N#VG8NՉ{5O设?y|?0"t#6+>rכ|h2wY#8`3VP'߹ !6zvz3:&C{~~e%1 29bQO{C'~z`DHZ/JޖD#C8_q'UYg߁?>dcO4mi۶m+H~0@EʸA`rtNùT?F2J[Ɇ^KyUw g,M !,5⭝b0' b m{Ĥ'G $NʍSA`XbWÞ}]7al`^> 3&:fo{˵w9 a߸HL~y KA>%e=E im63^s  U 8\bGe$^'7AfHB^ք !R 6|3qx?6Si7I:Rgƅ/ qswR'+i?>u(s4^5V (=ݱU8RX\v.>GȞNimVϭh!R׈}wА%?bGy]&"{=o\%m.Ǽb ."WH5ʧ=^ prѷĒ xL*^`G紈ֱ N ZcĈB@];=l1:U"? wO[-7 `rl*j#22JKQ7OwuO41c*+S R?iO}c%!%5 Ql'glcwtbJgHr,h 7?ht,~2IcƳU8QO-2sxC93v|ndz`)K DK %l{֝eͳM|ZParg:"Sw3ԇ%GPb hJFiB'G!cG7z'n_U>=`ɮW?5*a(zŹtU !i}(WkNeAj:s` TMeWu!~;Ȋݕ^7T[Vj!kDUUƷNlAۚ${`eR"Wn={ss<9n%3TQub867%!#{N[N{bx~ H ުCGxQb\tɎ+"dql֊}aw\ʾU^Hdzc_ nmy`K!m_r8@IiDW8x+ѵ c@94Q5P4#N1ANi4wvu7,]He60K#grk?%qblϴUHcV(Ձe~,E"qFyr'Ԧز_93YRzz 9pN?Oop2>R|WQS`9v0! ޮ.3?5,1|z~,z-$M#&k%РlҸ )v*ֻR=DJ= =pY<*zEߞH"QjLpɠGni{d nZJ@^i2ʈi04qjjIV  Vbdu!<\{~9 ZSug'$RT4Zu?;p.C&YΡB6#o~70W1q2HP^PMB8[N%⽺"/myZ;(jc <؟,K˨CԹK| t ˀw_;yPsbvŠmR 6XU,| kpO[' E kx8W~]8!n _[^Aj}?:L|iPgfIc߁: ep:"he>C^$wcTgl͇)sʙ!] ONј1̶n=GC-}&AϺi&ͽ^\TXxּiYl̪(Mŵ7G*#Q9Sjz6'Β"CNnoc#Rl]F厵;@}4ة:Iq < #blz6i7yMZF|_,0L3;'xxs=ˍ]4'$sꖲ^i jޣZ ŵt<=rhܩts!㞯\\lτc]IQov˨_ѝ3|0bW,ϘCZE4,k%T" ̌eyhwW q Mbp?RE[JI@Tl!mק^j ͸mKIDa4zjegF 1!'%%cSؔgQ yIQ3#GGTPWgjEy7Qs%nBտ|x!_f ԜlS'ecV<6CRWvΔ~N[ >HNavl PZ-C>*ΓC˧|DoŨKisݿx ~,'QCHኼqF)`Wq!;BR/xǏ )T{ZXTOQj#̫(ZuBz zv&HR|Za-ucDLE2+Ѱ25ĜqCJ8=枮%p(C`(u!hUMHDj%]v_Lڕ:p2B}Oi7ok{a%JkiXۖɉ7BNϋ֤)?@n܈SIWc\+0]NF?tXYbXYk*TˆJB:'z^DZ27C7F nY6x@Pf1Ǿ 9ˤ QJ &Q_ .79"' P#2|PN>bZOѦ 8AS2/ܝe*`WO6=#|8F06/qcs}Dы¦Lĩ&wB$iY{GB>}RBOb[S*v#׼Z6%͗dpbN>0Td KU95|Z\jF6?SpSq]/c 褦n+O?w&:;F6~F+l?Al`('[=\^2"֘[bhK$qJSI>~>n[NPw6G)b_=[= gr$,e8z.(]O<YIqh@iYiLO#&[BOXdg{3¶,Y-*F%#. [ZS!LGkwu"+/"FM7z2eh57F JL FyVr40މԄREh*>f8" e8 +QUibIg Q3\.!mV+U"m絛·rJdwZ6>%\Y:xvd/.OßiX;,ЏZC)EEO:ņ)H~[R6WR2LI^w~+j|2'v'm؟ 6q[WJ跘.KM+h-5~VZ~h' ྫྷ0:W,g˕+gHke^R<:Di΃y'ɄnDƄ}t-!N> ?ce >a4ԦA'YkS$)s9.:Tr wXJ~%T(t"F4EB|W~8 'fgWqcʤ9  >8Ք \8ASEHy&ZYn<`_<ؙ̤cl:§;SHk2}WN~kvyScNGD8VweOB . hbA!$jQ rnC:IPg򹽓G!*ѽN[mdq[]ݢSZ 1C>`Å *x|iy\XPla{nZW6XP2nCZ/Eоϖ0~;)P7"~ 2wiJY.-&v>=}i?|u\2JL* j x:y{oOm?'˦ygcʒ\,~vvٙ]mn+16csߟwZAo:s3Շub 8m{@ȳsFz*Dq-߈U۲Uf6!df]8xB&<6*tˡS(JMfFդk2[cdN2úQ ae<de}gGF*3;~uaL7ZOGsO-Xlhw Cã*q&خ> )쎃;߅ܜCFIF|e14b+sh}}."D>Gr nIoqKL /^nky>1 FfLoݎa73kUòs7]o{{BJ  ;ㄊEpXv vL̆ ʩy}:>uNڼuO/ך؍UtIq`a+ܦEWwD?i|; 4*9(l9A~/0;ܗՇ)_13l+2*o[tؔ&ZՎ}mFѰ$-miK-YZ=Ok',Y]ZZ>!\<cn#| [Mlaž:Ovd` w!)3nWGdžnew֦h&u~HP('PcqrrA)zҗnW|G4E8 Ѐ6倫@\W :x3QMmWlRy2:QIGb&,R`'bqT̴ ~qh >b5՜fڛ flm-"[I ](3oM*mh~P*dcTOP 1LC^T9E;][ˣFNv[)j_^ZD/׬12 endstream endobj 19 0 obj << /Length1 1458 /Length2 6900 /Length3 0 /Length 7880 /Filter /FlateDecode >> stream xڍTk6 "!-2t3tKw7H:L30t "("-)t4")Hȇ{Z߷{_{{u=T (*Y EM.пfP/2 `z W&pH8\`(& 75unP_`|?O?ٿ A`0 #0 #! M>w~)@7yzx]~UfUe+?8 w?uF }[085 h{A5U`n\1AAA q);-`徙!( ݌ à77w{p?oP_+ =apF4Ux/& H$AcC\M ݛ}e?#nk!o pCtkA1AKSXۑ8_O wa t7Z@/t.iznpp6=P] 5@z]-~!Aݨ |s}xpwz#/#!T&,&P ?|* nf1(@zޤn (_'*%~@_!e 2@? _(m_ uߌoBsHLۈo}G`_7OCz M|:UL"]XS:Qg nnJ2l{j4ތ?;F;ZXxDa#=,]=K ;uҏCQOLC&shXp<x}I&ON?e^3i=D0rY8|SG-% # 8GVL@W0FzVhsl PR*6j+!||ö+*ד/PΞ;\EpmEöH'8k]+< ݒ~4:{iul`Gd a^ȑ9[K kg9L'㷴^nme7o-ϸ{EBJNZۃYX=R'* CF, Rb8 GjK&|T*AkFj<%( e'w k PTL2ʦ|c@pіQL!\ g͔tN m*I-#},>!q2]\AL`ԃ3Iov;8.͔%PzmX^Gd~nU:p6Dz NwRpH Up$O󹺠aOpٌ;10);9Axj%g7ȓpDZ%Lxhvii+l1M*wܷSԳ)"xG'qR$f7G0PU%ߎ{,vG%W ,1]qX]*ŏě>?z}Q΂/1J{.]&5DlZ6oBY9aB9=zRI\ {5s.< Cj$Nt.jf-_)\NO5C҅ ?|} AOr GxqDmɆO\+jV$0enalMh$+nc>sƦ_[2rMY=DR,ds}Z.D ɟ8ڷkU"jH ]%Q~gcpe#@h~Nsh1N{61 ;liٴrϬ/ȚVb0;cQOq? h5bDcA} 6՘JvZG,! %)oc-%x`jT /t;|ra;8c^Kf_AB}3-yk !DU>`Q'@,{;(sCp oqL7v/k!O=kh'vwyl_Z)ϵ/޻j֜G~iݹRӔ;(&0!( y;R"RfO~؀ĂTDr6ْi)DfL|Rn^`tTeBT2-4=OZ殱ᓖ,XZL,:umΛ*h 7&gB[41.$G3S2'М,to=MQhvaHs\3u2m.%Q0xsmX~"ޮXbpߞUex,:tZgV/L"tu7YcX_nEgz5ř8P5q.@(5« Ë¥rYK X#:껉4veFyX]J&7z]LmX$O1I:2dfY ZUisfJ]-ڦQB59ܿ㌷9 0֏?3S U)o IǢS-]8Q*4̘M@tJșlGW$RC+mАGgxVŶc 3ڧzK$mJqfV7鎐_SY4F+'Ir e#JŦZU\u{͌}㇯BW\r '1؝ jv*Cuy]#{`|, @tJRE'lzyW׏X,-~W[]{QЙXlAM 9k/J溔mHn͵7M=5km]h.Ĕ}ظ/{b#MdvHx$s$L P]#|1]&b 򨜟|&vh*٥jrfMP݄=_8K6RMbkF{=U*w~=,^sцU?kO<ʾr8% ~׮#e[-F>g`|PMҁ0p1#O7hcqHs'(/ҁQޮm7f7v>˜΄x{r[8#cl;D?.6W+ռOL3b[9LD: ɔ &)X=uvQ~GҴ{Qg>BAK:xbr}d޺S2̋ e{fyTw|锷/XJ1fz gڡF^cgy + {k%']*LЕHĕ]"󯳴IKۼ+Pb.֓Ѣ|9(p kߕ*[cՄF ZofJQPH>fZ#3!TGı˃ -г( <9ཞ,e!&LP.09gQf?ܾ-˔C2n+Hqw 2 I"@ `g坚a;hm>Ymuy^/+*O0݅ټ"WwzՁ tQGS`Goa0$77ȿDPwAB0d^{2uSJv| nxR*J=\%Tb$Sφ($V%LtKZ'}w`|ShBL|J J@yDlSf3PX9uR2i`̃է.j|/6 9]-$ ARqUf`a2~6zj>]w-$w6>F8ׯ5=Rc/-Kn촡Γettf¬4(K]D>Z%p\5mAƣőOv*'g;T$1ԧH'ȉa5E~ !V9_ dZ'Z=62cQ1V͝möܱZOX9ltd2yş\vM]COtę߲^t[~ʗp뤺6W x1Wx'k_Fk!^ݮ?( hD1Eh'yRF=9 |5&c{ԲM|etMzK"GELm/;k+~6;z8XsYǤua0~GH9δ JKI­ckkB2,6N G js5 RLE6:coύ[3E-:{ŞMe#?^d?^]"CNUyFK8̎[Oa紟b}Rݟ:NFo,h7OʖO̺<$ nFf;˧0vc9/ʓD|n;> .7LF:1RN=8Odo:!ȟݗP&'ǖ%ÛX7&bH/j0$nߩ#Xͣgw=HoN0QDp hi=/>e|Er/Jbɋ }._& G!(:qѥ3%x1G\&UW0+WCe V-aJ3fgܚM-&Fym}9x;VujDZg.]>U2qeyԢ8[P;6aU,9Iq) ar/~GST;ǩsy-53zV{]#ʣ<Ω.;>ƣ <ݧur\éMGǝHWߦ`7֔?A"N;Q4楤ɇ9T6;9N ;N3U e[J50)TVbQPyus,|6ORmaҁenт.v|_O*7h&k3g?\KDՀb բwP߁߻iEmR6\ Y-is "Ej @x#$"! ƒf=wJ53Œ@R'!jD٩|ZgYn#-ͦ,aٰ&Oe_9S7}>&ikm:4Vqƀ_ 5$ /47}jW“! e+.f4,[v?VDZ=JT`B9%[ȸ~H<,(KEZ~ $= +[j`a`ŪO1 t>oO6uc~0Lo Zd*e,'O(wz/R%+,S9`Q7hK]5ͧu%2:܉aeFQ[<9R{QѪ ȂCЗyJ[^ͫDM-?Ny ߝSk>6&FKzdo 5] 6S#SѧRbҘ$@fklߖ{HFy-Uz(^gIc+?LbT$}VB壪6.nDȘ TDo6 endstream endobj 21 0 obj << /Length1 1582 /Length2 8459 /Length3 0 /Length 9493 /Filter /FlateDecode >> stream xڍP-mi܃wkѦHpNp] XydfUUWuk:{յ%``9ԕS */Ơ׶s2c.v0`M  .00''S?00@ngP(` ziq<,\BBl$p;K r;>h `v`W`uuu=<<8@.03 vV @?;hڹiׂYz`bg dY<Q9 '=6W{.p;'W;iwYj% stC]]0~'c[>nϓu<k;&ܜ:P;g7_!&l6`W'' {Zk{9pr6?vsX?6?`xWߎF\\+;KWl'~<|'Q{\ߟLeB |2 :zvOJ fsqM r0П>n*vKL 3࿹`1'HSo 977h+Qn {Z)}1@D;9;OZӮ{ vP:``Y:<^.~^Rj =`|xj(A|H1-F+Z rA^__P >2;̰Gf#˿ ?=t/?4P`'cif)l!F̃oz)Kkl$7 ɤOq7e%>Syԣ&hܚiN}kX$(ؗ@'gזs t@nARqvV#/2nv52m4{Nq`,}E Wv,Ǟ83TJqQ<ކkWsW*]_н0$@>bMV"^.)QzQdMa:$ցr步Z-X!n(]9.Rc^wVv' ~N@Y>F#>Bq/x'"1r#m52}ؕC|we0VoI̭tY8Ieᢥ}"x6f ՠϧ/e[y큞2@n$5Nc ]@phEm7ʸ$RQ*!lB<(V?IA16L#SYGԢBlv(BWOmW|QIQ- oTL;f T{lx*C5_QV_ \ s"^q|C|/&lbhcohZD{msR?u cB=QL(TK9U2G|\_iSL,̝p7R% *R%j3/D26~vl,^b8|adF }OPnGON|{h9~)7BW3O+!OFe"q-9K]w|%^I2kKV#+U㑃 tR.Q9\|.1v ' X6DJ4n"gp3Fel1=Jim1B5#ÉVmc4L{yy;]TG;̫LGtdoQ /r^f BjupYۜ7ψl#+M\2dh웄 G2CZ5IC߻^w?zQU=Qb  &6Myu@6{Ӧ:iݼJj^:t^Ns?+_`N{$5g6gdmH(ytT< 7|$&&{Bd%DS0t(*JUM-}@͉9-}pId4KT70KeNippJX,sv޶U>a`Hӈ5hGӴ2aըZ9F[`9?{\j=ׅUesT1iIt߳=LVw۫/͔.|k~~b+LI:^ŴKd.͏N#Elz!~&L^Kۿ+Zc =2J_>YiA_lÇ K?4O1o2iEd*ͽiSZESPw{x<dJ{]U0Vhp;H.06+BGYe"X<},}0&p8B+æuB r36֒q%GĨ҉~q,*wZhS>}z ᧏޵ {J|Ŏod^3T2U(U&Z"O#z]F/Pup5o#Z+aΙ ;sϳQqYDfR<(3NddD`O{@pup%apsg0!8]"=Bi_€=ȆI]B{krƪ|"qE~@M'z|rEN-;p6 u:ePq!i:v7;e$o &?KqghGN$˻*jgN NmK'wOΛV|߰8{Sv6 cQ76Clm˙ Usvz'CX1zIo8YK\{c;]eeOl5`8:/sA9sjSt-hi]"lp&xN7*Nx̼u<^vD'xͺglrwɼ,["^9ݚ3:3(TO}J8[#Sp" / ͵t)@Uz\>nEpţ\|ڱ,d#LyWb"x~~-S/HQ:kY=L 1 UkҕiUi2ox6mEY?hYS-wf Js83Q+P0VMuuV IPim\ź:n ,vl/z5@†L[-8KےЉsubLw+<-f^O_n4GK\G:`%vu{bh~6L1~z2>/A{wO[t Nedqsݔèy֚Q7N utA 0^I ~%+,O ɛy|-5y5vUI DZ WRPL'|[SeãՃ>d[S"G{P qt3b[?țpyGⵈ bRmx (J˦_~#9=x-ѣYJ; 6 ?Q;7R\FcuCYzVz|,mc#&(γd`* Ҡkb_sF/#᝸nfnٽzb1'tTND,V2fjE"j/-ZJgɿ4sx|,:Ue788jQX4VTDM\1_Ƅ흩/xnS=QhN%2Q%~p}BAqxz/%ÝKCBS 7 }{&!G<"Bclߡ|s^~N*iBg4H9Ő4Q\CD^/(."ie쓰4ʀ'>ʵ…F1of<:SDŃan!76n%IY14ةˈg֩hC&ܴG9N.ճw6;) Ao}7c|zTf6N|wP4\kf%Snj-ײ6ONy32^OOe#hEwQUL󅬡ֺXEPo+j}`6? ;=ĨŤy7)ΔÃ؋aa>g\b}ׁCcˆ hMWE_ڝomdJפ7Խv] ]뭴rN*݂S E4{U]NKm"DLv8ry|Q1Kd*dm$tC;$*yyYlz9UP!﯎ K!2f5pB=-q3J\hT%AtJZ#RӦHF*4UCEt}O*IJ Y IdtFyH@#&pԄ}@_(Ų? \ z~4I>%1fCM榢DfusՇZ'\mƜx&CbC.UJH~ͧ[$fAl(?N=-Nl`?>j"B7̩fDadYm>PVOP3^3%7;p~i9:%"aqlOihN.]tg0u0knJN;;\^b榷1zڞOt!-ƾ:ǚԟ֟zZCض]((}',L}BYxҗbtQx;bFjĕ' ^qfHT7l=M6o`w\htym,qd2K,YDP}ÜYxMV hY[eUcj1hb"7&ܲJ.d~%,~J,' u?@K^BR Φ8B G=jK6IY$u eo},J4/ QPѤ?s*3IʯoubӰ[ ͲHɿ)y֛_L-8M>bk\7 ?:(Z -`Jx!MkJ1$=l>&"w"sJ:yäb uMSm*KoS_.(@ɻ˓bK +y\[]ns>6?qԋ;p7fgt-48qO"YK ,|<<+Y>^+ݪFУX |Q$o?R5PMaB{Or'[.]ŷ^HzG>7BBUQ0_USQk: ҉>Ҷdx'gƃ}UaGqN31w]bL0> 2{xWȥy^%ab%UG힃E)aCVSE1J6-D]f3[<@ݏAij +#@Ed~Tsne\:s߀b+B`Nyb&5"q^df fy̓>7eҨ '^@!VsT`tuo>R*N$bWw<9U:wb(Ng.i N[(=Ctjy.te`hshD|9}DƆmq5zPt#q#̗1ę+n6T>RFw &xM]/۷4M2ܨHiА}-B+HPo3Zn' ,o}wɔތdt%*WY?uucr? xjLlĽ(\a'@$DQQvbҩU5ygLȏ,2"G liׇ()1 Ւa1JDF= "LS2m(*iDi P3Q;hclνe 'X/o'"9q]=, -Wێ),A a .dĻ#rv*#6tv_t0g?qQr)izñbq8~n?ź˂IfƄ5ߧA8Vs1&TnJ7n!Or\! L4.Lq˅I<5r Tlw*c endstream endobj 23 0 obj << /Length1 1964 /Length2 14034 /Length3 0 /Length 15245 /Filter /FlateDecode >> stream xڍP][ ݂;ww -<wwsUU5Fѳ{-rbEzaS;c3=3@TNON r“@v<EF󻛜-@ `aab01q#@d cHE=A#ʄIw8@219[mO41ؙ+=#5 lP:]l c'ZU̜݌wduzp5:H쁶8@Ok Ml6217ٚ@@,3/G#k'x#W#߅$FdK!_iޛ,nk*jgcuv>1#_?f [S$3ق\Rbx́v&&&Nnt7`+=o#_{>^vw @+<33d 0lN7r03鯿>ϖǿ_.߂ksxѳrYؙLE*5pS{`>s۽O,@230CM_Y_#bm/d8Ͼ_W ?*4_ۚ[ ' ;TlbϨë` [ ޷>K53kX9FFW^kh t{ v!wy>3;G(0EFѻMῈ _ `4qEq&E6;wðWWMFh/|72p~`|?ߣ[aao3?wVw5w6T.Uj|R}_ɶ@3Yl&B煮Wdmd{J?໇]]-^ͭ+C?O4_3 츯w&FM D]x+4܋%Nu#DuҖl<0cH~^Uh[ C4y bƽ[{@h܎n5 s/(H]\Y\hgzBXswi7"8Zx(B/,,N>jBܠNQx'K{Xpo+$FKYGegI)G6պ.~gIRN-m4p$Qn7pe7YU1L!XU$NE sd.v;+8&%mdQE UtdT`6|YC&EVˊ PBؔ˱Laуt&CD~2%8xJhOLHV]$~+ο}tЗHRtwv P `N.0`N1o[&Ɖ\C2rDYhqQh V3kYE'%wb@<$0%MWsB$]#~ p1%cF9$p48Xx:zjӘ'b:#gD\M'P[¿Pڃpm gQB*Q7`JEߊ$]׆o BrOe#Taiِx2 |48ZspaQ9"I9 ;V\fUN5.i@tR4 $̼dCoHܹ'{\ ELҸʘrL@'(5a?DFmG84/89]G00Նw%ݱkVVQ#օ9 WF0Z.yJպ+JcƆj@s২@ K~ZD)Gb'm\\4, ; P|>"d6]b7p o#W/^-,})'"L\Ht m)F>$C&T=~ 2j-{YXu1W]MS][w!:i=5#f7+܄m՗3Bnhʡ1ngml#>7" &ZaSf22M' / |N{=Hl Hݍٳ({8$3 Ro ~n&h4@[IFHo4Q~~x~8s3yhH]0`^<5}/W}c7-PP/l/(٧yJ׽d(lǭ?׈ 5 ӡE)j}R\MV #1cO7޼дG} uuĠ;QN:ou~LS rqtsC*r>ƘwEre7ӣFO2{(~EWJBMo變L:l2dc-mV.д+LÛ`Sf\<?1}v쓏,ge1\9@ N'k|TWĠ:6 R켾 Ms|OB/꣏Lo<"Y3>fۉ7<*/sްw  Ov,p]zr$R ߎyi(@J;c!B]::Q'9pRy'QX@*ݼ)7A;@APf!7"GU'[+mx<27{}J+z _' E%y+:|cVl~K0ap`+ke |6 xXd}֨N8P?TĂܛt1onXVn k+xR0(@볗jU yTs)QzmtD(M?y6Λ餛їUv }3Pfw,)a?e(88WI]oY$p-%ʆF@^{DŽSj1ܧ{%%xI1_de w8Cc[FКzfI#;lPdN,xÙuC;DAb =(+n4xY檻J;*%\82=JCp:"./$g} uvT'l>(vL?(}""ZfEW^eE١^$rk_0D{kŘl50,lΧ08jqsO/gE> fUoz9΍U6FhzwTSJn:N\#$]_7R~37A.NU󾔬'q#YʻT($eȈ?P хS"܍đ+PIG\9H&ZӃ>5pO4Q 6wBU߃q-cZёf}Hn٨?_4I$ GH`t؎ >LU@ Ku(^+тu,9 `7>dk:zH)ص?tL~{/BhHkF()HA~|T[遵cpCռqdIJK3PbFG{if7]דY^;av#`;5c\,hR.ݛPz~Y'P"/<뮰Su2V)_ uIc!,`&xlR{(ٛhI$}vBƣ'>OHylhluN***ɴi`B%}&als7SC Ԕ'p${% bS~3zi;p;]io"u\$ $%οUp lmVGQR!q޼'RO0?uBlTqpCxK\ F=]u"+NkL}*f-*SMnuGan@9P[؁Ǎ< kB@\.֙ NXw76d񍍬j6pS>NHP>T03  bzZq) l(&St-)gpS&!KǕ ɽԶGFos|^0yT%6/U _ ?P|LۇZCqg)Mqd2wj'CL;C]*7B# 6}}GGla1Au,Mxgi2,}rX.6~0,E*m^镝w>bB rW?jBCpY3θH^YxemPSDu(_l+ǂYQ9o(-1 В4~H "tYRDŽ:tꀀ덍ZTC}@>E 1^vvc>G4"GcDhb /t"؍Ŭu4ZP3,w\.bWJ~O =fIL7.s8S]u|ꮇV9𡶱kh8h51;^`NDu]?ȍ1 w-V+[Ƶ]NnfOj򉩒nU(q mGć s"BLVzO JѠؓP8cbRfZS_^pNҢYloL"W٫I[nm`Fv~I_mhsB8!D/xUdR"Y[i;Fڂ™^q8"/XGn8#(JGOowI–P cLvs+sD9:KoYXZO6!7F6:[TOX[I=><5|'R$ei6V 5`wV$2 YBb:)V31E0RXyGhprq%r쁫T)i9j2@ʴzCɵdLN&^%w|Z[^_ pw+2ߛ\fOW;#ִ-Lp-[ǬP Tf쩎QKG \!3ZdRXbXqa1w鍲#)e][/2ꄊɹ;b74k!Ɩyb9 TfsMu1׭MF~ $<3M=sW pElu^J4Jgxn^wz.qZ"Q)SYLu̪m4Xb=̾#E!̱*$6X>hF#>6ק8Qff%WLp2t4i ZJlDC|XSG1? #drs^VTJBjE M†a\P~}T`p_qw~Am f9H!B,4$J4,;th^W3J+[Mfzv&os91Ϲ^{jk8YU zD,b8S迿n$jڔV~Mqbcp&Pw^1KnjX5VMg/8͎ [@m/gȓuu(.CxlΈƹ,P&*G9B/I?U% vI4cw`)+p9KQ#jlEB Sg5z/ X-0YkW`M"_VSØ>gBɛuQ7U]}bq]h6՝E7R_ B([]'!eOpt-v<}w'Ö֠(vwKPxnhb,v-2C{h24g5^`5@koa2ϙq5<1⫰]@P.˜w3B|8b9;x"2z.W=AIl|mq@*CTD"m[<80=ň f=ֆmWT/6H_7V mORcMS_=~I9BRe#er\]]vfypV//smꋧgzɳTAzHxcMصN7XdS?!ݛEW>tcw %gq[Lp@f{iA=KNc^퀊^E`_~B u?gMO'C%96F_=D-"nF1A4!]p9t*5&<k iz%RkOm<49ɲ)Ixy*n#uj29EhxV5LtS#^2hm|%u+rps׃~pD= I?ƥ{rA:8XxqbI6RRg89ʃGITQwE0Ŝ7^DԴC.? W9Ԧ~%rIJ=`UGvUs Ǭ-k[,?e1bfX-[z*??2@?Wg#0ĸ3c$E-ò1P&&c{M:c;s%W4'$"K3ĂS;-P̑\G,T ,Wk~@7ζG`n[#fh[RcRlEInWnnESߛ.ti(ޅDlW(!qO\7Pvdzlĕ@sR=[1:df> %}+&S'PR>T0l0ؼS$`M{rO#FL*_=OTU1!U+M( [+@OK}ޙ)`Y8ZOb^٥.j .mp˜$#̋Dt"#q8NtE#EjcU~|Yrnԇ]t(v50QH(0^)8%~ȱ_ u)iW:ʋ- :qLة믵 QE$̭dJ$6)^H^GW ! N~p߇{l yO=Sۓ>Ukubgiܫ2YM۳[:録)??#}"dcӳ7 2ool=pyܵ 8N^ *\ t^AN?ۄȦ{ #稡?mkܮ1\)jr.f!o1:svig\xOpܓԤZu7mDSe"/" v[piӫӾ'M&<KyOfs%l2>P :Ncji]{W8W8M^`Ke뒫Z{1Ǭ%%E-56[ҍ ULe`|2ChP1LR!oۘ'Q4% UoO]:O]'VlM)^#5TjJ$)-Hlg6ֆja ykQFeKP~\`)(,b2z2mktf[+= tF81Cl4Yxya|M:r,XRր?EeQVN%/[f B;ofn?՝ > 54m춅RD@Rn?a h9:~K goa*P&آeqˎ厪قo幥 _a<,@fKi[WtH$E!Gd6Ecd"A|6o:c&&=4MD-\EDlH%Ut-#-*exw支,Nݾ)bٴYʫ ǀ&Rr𘆹D8Гp`քypkJ9@ Vm"wE$]G('-|j$tBԂH7Οrm}XcK-s;)px X5ݫ>PV,pWPuYJLw،HN` y4W{*/C鷏k 4pS+gkxrp!z͎qU!鈤}_]uKC 2JsUvw?O/RvĈO\4(so.\<35# (RJ`$i&E:)h<$Z!K826WN.fؚ׫RW3(vP6xJi)}S:A{:[TimfR ҹUpVXM[. `D/`%4)mOmw:Sj]2UQ84C ߃+JQ?HA.yb>0r_`uyv;#:|l1havH`[6߾|˂7*z\m 4D'3.NTݝ>2|Izx#Y"=*\A`$Z f:y襄wb䘄&32'X(aQX5Sc!j]&lPH8KX2QpٛKq+$'%v{Q _ijϗɲLN$2W1 .$L# H4 $af|f/Z'??‘RHWP53uϔ5,>gΔBߞ,aZ#͇MH2![ߐ=>xV0!P GX*qb収̷99Po3V!D L ̠og0#Tupk2QoycrKGx._ڊzY_}տh|p;x;OF2xXg$`ouD߈d |,fs+Gas=3!͐1}#nqO5QK/)!kΎHl3mm_+p Ttv; KO-3M^Q(D6@1~Hq%^rp*v.&(Fjv@}X8 3yZ{UnPeg)DoK6r{ed7I c߲{> ɒk9Q1a xN.:BfHTڠ&dOcB $<-+9!nX!*E4!E~} >!v4VH8?ؾOuGo_Re3q&N${91VEZ+G;؞Sm1v筛 QUf(&~= #% ' [@:7)3-?i gعcJ&+ѐrӭ6f1q!xhpߏcG*pįq5Nɶr d!h-!cqabF>>>ⶼU+C .eo!E ST~ѕ| 42pV5çuO2K7dILVQ߉~f{HCя}"f=T q_ϴd=j2bzߤ1`wyXpD3Q(!T( Og2K ַdVvb'19\=B2Z峗u-4UF\vk1 ,ːWMO!M!))bʉE>o?IE37^X|Ϸ?}8#=DDwh$.bAsI 7(_'WyZGxg?UTvE~Ć/)7Rk-j;x ;Fl0Ø_IANk٢BrDT" t2U MVULkS/2.yh5,+p/sPC9qAy;-9{h#6y};rKW-jz%y=W|v _ QN .KggM>[4b V&ՑlC&Yו{*>{>?/?4nw /T! 7]Aexd́:mv.dD Gr]g 1dؽwkȈ>" .2"n(Q+6TߜfbC[<8'd&ZBE1|[Gs~?Uﺰabtv™Bmc`+`acmB); N&Ɉp}LtU ʳQAI3FsykJ~cJ dLx5cPz,p5Sx!G|ZD׵u*WmGoѽs 2v8v Rի *hKD;AzoMtib(D ׁ5f?T1M|ѮJF6~-ߤ^iD:F'9'nO9HDc #bjŢMDVQ3>{pE:RoA.qc%v[{CeWb\m@=96`|Od%$(6ȔF_@YVۍ+=OT=tp?NQ??|d\цo& T b*z lxs+.u0mi^NGn[ bՔ2=Eg*ftB"u <>.Q>4!xcKnM?֗49T/I\ #A%4 xA0 Ы~F)PD:|ǘ? 5[ā.@9_bT0 s9.USv{8~Z8cU_dOL@$Y+Fg{vˎց|^6=s 7z}ŠZ_SOws|5L#8XBʻ˜ ~S-'0 hx\+7Ci?{tʡ@'|4vAu:bps]'L6_GZú/%ώcPI*# iOYpK#^&b fϷ_NtJ갍I9q8@ !KcGUfYRN@䱞"8US*eGFsU. ]bSO-}o?x舌}BnH,vybv盵˪wOdD̆ځ#wRʃϾ/ 0sU] ]|Nev PiL;^O}W6;ݩ8';^[gk{E1'Eó^uJDɼJW#ɤ^jz T3 ,Y=}Џ[%/^K*eZF|_5-4-DZKʟ򨆞>5aKWr|ydWF=l\Z?8sx:TYJk'bR+%FO<%Ht9X@8_JsSE32emCFEy g%@7:5ɔdɄoΚQǟpSdwQEfw*R_Fݕ-"MUl4Jeat@Lb@5) Vm;Mpb"!072vm3+XilFb_HE'َ+)1Mĕ ,^3bNcR0)M0*3'L|jٳ{@(V⻩Wb>GK73+R7ʒrf̲V!݈9ohrtYi0%]7#Y$d:;^}cȸ=BlN7A-:W֚ X42<1dU?l4 endstream endobj 25 0 obj << /Length1 1994 /Length2 11495 /Length3 0 /Length 12719 /Filter /FlateDecode >> stream xڍP- % 6݂q䞜{zݻW Ez!cC LSU01201 QP(ԁ6  6Qk  h`f0s0s01Xhc5p271m@@$ {sS3kPQ9<ڛr`3kE#+9_)`[FFgggk{ӏtgs@w 7Ōjf]l`̍  c=8@EJ` ,WI?6VVx =?$7|-b+73W[wī_ſ+9^_)Y̯0 ^f^cm_u o-]x^9ڀƆj׼_]4u|%6'/A9ڿyU=@ҏ6FwB;3;I?+o⇺,oQ.?57UjyxҋQiAZ;#B|G*lk !Meȅu+RW4}GiCd>B-o,Ea>)}v3st -qk:K7UNr-|")Jwiy5 &jPWι-c> _qzΏbADh[DގڧSQ\7:?k:&<X_(NIZ)gޘ[Z b>Y. j'AbaKn-4:dy޴3;m#_II,C(O%M]! 9Fͨ˙ʒ*B%-`OpmAcOMaC:!dD,/J AQEɘ!W=x6j!cUIk]W+^19>! 9I?F;H:kUh`d]? Ҵ c>p:34tSj,MMhO=X\!/_VћY4&t"|>54q!4}o䝢3^TKj~{l3V8Ĺ͔$Csд) /w.cͪ o,d"x{["+κ(!DP8F+#M;YU+f5Wvu" z%\\t1r):0lM͕ZmkV\᭕fp-Gġ>uc C8 8% rmF+Qmm t7Oc<7<s3qui\ǧדy6[8~k)h@č iE˱u BkTGMl(`7 9`@6 YhGb¯vO"`Qj'E(p~X^"2gS {ihd%7e( =x]ocCB(P\+E`N0~}Eɿʹ5l BhGu惉YM8y|gD?:"K@-`y*0+2tyy/ZO-)~y O6͂[8 \*br{6 /ovOܔGA)ujMTuT.0G#<ƞ4gC)fywҁ(L'W ·lo3aW+Xau) .> 1zgH#rXg<@:- w,"q &=M,c/?`d6 XIֶ&S_&qE)XхռOYKDULj37YD"6h;vQBwnЈkp^@q-<e.v g)v N!%}$*?2>k c#]!Y%5ws?XKʺܾ>U'o< ln$=:`{xG #Ώ: e8L^nRPݎFCg;i$˓ߖWQR CoS$JٞʵYE37{ZdM, ihŠ#sm8IGsW6A.0|`tLV)-.P=d:߰ 1OO?I>M\ږXEg5V\skӞMA}R`cLӱI:K'9) )ދϠdB>[Sb;1h~̪2T{WqOb\俀.>GN XTf"g(ѳ*?hNLJ95d&ӣRHiMBDCXAĔKӭ;MGXGIH禵8^`P98BQ]^Zd~JVW^if_L) $M#ˡ꼼IX"ěOBEHY>SVRbn:+`h$Z'Y+BpgELO.<o.<įINIIΠWDx U0wXACp7 *i*%sV"[!9*v5ϊ?RW>X ;`Y>GE%ZnXF *@a9MyβZ/\2U|$C8098.G_吿"{Ig[,]24_]C,#&'CZD[a@tEp0N ~7}u6OjR>x Ǻު6;~E@R+K | U*Q¼!xޔC»rtEQ8٪-GuQTnYXb~ƝN.77eyׇM􆥐6q`Av- zTI 2ֽF2=y}B7<Nf3cth.Z\еSs֦' Fg,^-vՒU}"6>m^%ce1.|zqM֛3J%U)ĵz>lkWn`*x) Jo`qv>slSPяʣ16!mkJq>iJZbC}3>a@|ޏ! }q¿y[S[<8IPe=WV]nX;O\0ZS.&/S`;tT.cNZ4BYZnUYؤƜL\qNxXT;J9ƧNa@֮ݡzO}'Y?g~!!n/OD`|9vk$X04}S Y:%ݾ5[>JV?l)ˬ9=nU?7YZ^xhw%}N5[%lBDaI=7ŹH~Cui<\bS]);bAI0) ^F@(0௠vz^J5M\# k̝Ӡk};Z3^-q5.vM#/b.ąiH~ì1 vtDdj9ں Q>M}^Ĩİrv`YDffۢ1MoU.v ^p=$ O":M㽫ֆn v'&$0vn?Рд maXU r'r>t3EJ2#PiAYk+P89Z J7xᘇ2_%.t}ixPROf`EV&VtSc:d,i ^t1Qx@)rS~b'X5M;ٰPlwQZ_/4_GhuNueއՆZ1 9ÊDMr7O>TnKǘ9Ǭ o_,+ ˃ "@Et 6[1HOش}y{-;[hq!* ڗT4"gF ^;KD]-&r S lCkNF# wcR|;EOsJxKalKi4!(9TO,S:ٱwW erf.?3)Ϩ&3 w/Ls&u >#ƎxT5S[8f_nM4\FXaPf4{s ccFVjn[>&mᘆ2J1:o&:䀆>vVXYQ濦;11ng`vDmSZ~"jA O1ߣy|:`xu K~2B ڑ"vŸPdƐr$D_) ML}*W(z"@&VjrH2婐/ksk$;}߁FAb %/]vSjǚv J<[;ne[[Y J+nxVn^n|qkvVwT~ǝ@:SDfhkN?%jK. ~_st)i}!5ϤGX{G' e5ՕE`4aٳe@+-9o1TT!T8|$:SBW/xskan6=h3‘T()t= &e [~nRJcS__~/L%u d>:l_[iA&Jx)SM4ۇOYizviѠ0vHK/` d9FIBsNˢ#vCs0Æx+|@ ή WJp* TH jgc(AwFFn'j Fx\8˺E,"v=s>>, s%(b4$_n{eh=HrJ!*>Aoh|4o$ޥwAi㎜.ndSfHE$J j骴~ʼn+j '\)gb3#GJ%jĻ#JjV- 6#3#m.t˗|Ӱ}Hq~t5[Pyo8 `:ϘȻVtʼ'Nn,PP /?\#1z89W"gk~Ͳr8KmwUa{'7Pw?{0FG_r(:&Do{IZ+xM)XYgmx%M.B E Z1E`Yvl.u~577* 4y +0#[ORKh">YЗ )A h TrJEhM4S3+>GT+"-e]FmRǕS8=Iє1 ן9N }{V59gU59R}zzEcrrNkP]o91HJZmmã)v'",`˓m6Y;򫉎^j# އ3>unQj?IGMTnlQ%+%%U>%jGRx.X~);M Jѵ'>ތϋtO tsQ/WHd%жr< u$g8/g(qcjr -@T5@d*ϰU-l .Rl"u"]"0L~C rUwQM^;2n%f42d<\.UβȝOMx4eLMZved(ҚMħEЖ]lc~jE|f~_,(p8ugfو3 lP;1 e H Û,&Ġe$aHT{7{|ע>m;* Cq> 8WF{9hw(}).!K( uaķ^Xޗ|دFn447ݡF\9r SJ,6yY#⚹djebY" L(ˬ|<~fWҸ@],gntη}~A?f9d+PO欕.>4V@Ft̯`΍B(RӋSh@1+nd KPWϤ;ctYҟyc 6 (YOogD_ᒛLT%ՁVOv^ݦt5kJΊ?|~LNZ}M*B8zrL>/$v\Ú4=U;LjvkYeh,A_/9vHmU#.")1}qV(š(P.² U`gUZz By3Z||m#t+ZA5ڱ闩G+me¨)6Vg3ңd[>%{ڨŻ:1X)Oc :%6C`:upt=6ʐ\LR}te ?hcnO{9:#oMD@KQ<,tNL yr_~q3ꭏEH|k@kbeCD:q^:\ 8g)U@I"cHDPދUX) C؝ie<~=CmK$%sΞoRK '$qg qwn">pĉrb9 OosP<Fzq Q;b]^ {Q(~{ȋ]a-Q[>(D)_ғS1WOJ|P9t,;kt2A)_O֧Yι]ob)xֵi[|CB'{%k-V1'K@ Ig}׃<O}*j܁hq=Jk.9iMbg ; S+z/t9UP{N|fSzMgflc%\POQ!jtih Lxra§:w$W"vRضZDզB,8ҪTsZa<'=#+:{,a0qdة:6;w .5@}:9'ӣʄ1{"rπe /Gde%-qv~qYϗO͗a:g8z>fd([1 Ek̔::Y |I‰u96ltQa&O8E; iߞMqt=Xý!F2Ľb,{sM#\&!ȥia$C3r;'设UO#sZYIg/0$pS6ϕ'hfCS^ %a}کЪ%T#۴;!t M4N_%a\n 1594/0w#x6^ⴟi4 |:_'?̒=&nt72{XTcS3Z(ſ7xp8 .BohQidEwg͏^RȢia$ҞR+f}?kf]>%'^Z k2!Eyk;pr7j}(7/yxs*؏#tN6:vE\DQ$m49fzhn#KV 0!p6~):`R[*Ok߬ "8EӅ2F >O21i )JLf28?uRt#ubVL^u5DYIŠݤ NTy|/3ħ19L@fcuG\ܮ}Z)Ltt*SyJ3~jؠ8o7o ZCWO6 6Ыnظd7"zpne(\\(*m i*:Ug3iKò3P%CT6{95p$)RR\2+>-Rn >Bh&r\h]ZLf;C*3~bTaPb5]Cm ;\jqnNjK zX5>| YE~k[rT|YkZp} f1j.fZ;&ft˹aeOoH3O!nw`;Wmm VF.͡4S[~]z/ŧ(:eIH$ZÙ!xBKՂ0Ȟ,j,nyli &ېg7HbG`2fb J/҃:2 iE$EwCW8;Ҍ g#Ϭ! MyG">ynqTfMFጂfR$%/ZUG bl ~:,Bnzl݄زGJGsD@4nXfo@ +P\/ G3fDȻwhm9* TLm4=8TvOf1Hvφ! q;{gOUbYliyxFhD !pӳ]XqIC%VݐٝIDZq{, E<+ν`G1ɇ\ >b! zcuK 2L|E-Sh5eBg0Pl#->EwE-h/,Q3z#saw-~N6{=}x08/y˩_/z/Ct\%5Fa GpPA;Ȃt{D> endobj 10 0 obj << /Type /ObjStm /N 19 /First 138 /Length 1226 /Filter /FlateDecode >> stream xW]S8}ϯY H.,S۴Hrivv&Qѕ N\B'\& c   #Eƃ&\YF`qMD$1D0#B$OcD(*{=:~ZfwYE-HLGϲx('YI6#J`!D޼ GFvw  Qr0Yih&Ede19jrGǚ\Wʹ" J)*|*&nhL7D"Ʈ4 *q+K$o1yK,ږ۞iƦHۊߌ1֒E3FMnn *MfM'o&25*}DjR'};<.I/:5cJsy`<7A5N7ڥ+ R#g p2앤/[׈?Y5)˺(6݇G NY}ᖉBUq9׈Q j9HnG{WGu'{<#H^g!M>,-u -蒖5`4G3[xN?{_ R:S[e{ i嶠21~*fsz6s{ ,xUw8{ 8϶Ē5(7`id `m{t#h'E^,0ߧͪ3w`e P7cI/XQ*}!y1]UV3Z~Cx }O7oO>Mf[1a?{tD[zn~7e:ՁFLִNu6cS~;ܪ:gxuí['՝QofpcaviΞKחRfm!;/ldvW׻̧֣ ]AWbꅎ^'E9M\+*8Tk endstream endobj 29 0 obj << /Type /XRef /Index [0 30] /Size 30 /W [1 2 1] /Root 27 0 R /Info 28 0 R /ID [<4C89510A810745DBCD3B7FBDC5781342> <4C89510A810745DBCD3B7FBDC5781342>] /Length 89 /Filter /FlateDecode >> stream x@@ZHCJ.N .AGD8TݍiދDR$gxWp Vy\k2Jg( endstream endobj startxref 58433 %%EOF proto/inst/doc/protoref.Rnw0000644000176200001440000000105313004746107015470 0ustar liggesusers\SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{protoref: proto Reference Card} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass[a4]{article} \usepackage{Rd} \usepackage{Sweave} %\newlength{\refcardwidth} %\setlength{\refcardwidth}{20cm} \begin{document} \SweaveOpts{concordance=TRUE} \pagestyle{empty} %\begin{landscape} \centerline{\Large \bf \pkg{proto} reference card} \vspace{0.8cm} \begin{small} \input{protoref-raw} \end{small} %\end{landscape} \end{document} proto/inst/doc/proto.pdf0000644000176200001440000132142413004746107015006 0ustar liggesusers%PDF-1.5 % 88 0 obj << /Length 40 >> stream concordance:proto.tex:proto.Rnw:1 1357 1 endstream endobj 98 0 obj << /Length 3386 /Filter /FlateDecode >> stream xڭ˒>_CTE$U'T}JiҎחz)jf]aht7 v)y~y7&_2ta:O^NUIߝVre:yudB@ OstƃYYҬN/m4@*/I$ozq qE!̦e]-V&KLႋ=b ہbUZZ]dӢ`@a薫L0hs+<t: gu]58\{,vD$cv(!~VɮeIcpiK`XUV*5cEiΌx$ 'wx7 שb}{Zl`OuXҗf4uZ"YYE].3V5ꝰqF51sl%`iZ:k솭+Qu҈Xi^aCt<&ͶeOx|<@*PX& v8"Q{|pQѲ^4~TU n@ǢB٦2CdV04 " L8kY(Q(k"PhXNb $ vzF@xd|h@\Iug {)8qiU ƍ O# -x̆8Ir5"WYxC8:3\^t{ۜIwd%`UJܑg6Jl 9yH όIĹ?G'#has+_f ܐбX'et9x$m:J*n;I6/ W Ytlu@`e?[uّ ̆l{`bl``:#n䁔l>(t2-Ssr%['LwA<9ؑ^ 8#h聁I-5W loJs4 WDn3;4)qDe^A9GǺU@}*\ *hU[f7ʰvk?hS]p Ur"jD\\J`^[R!\R|>9A; 9=s"荋#/!pǾ4gX4- kD.&%_⍝㔰'=#Y*6GL %{gb D'C!4l2ĞĈ($iGx`6=x7[,"qolfK A<~sܶ<:Y խ NJT@1Z I8;!("]w85BZp> T$3ws5DNKcR>7P;Ǭw0zUGg0i%gb=vǀ;;_> PA-}/E'\@1[BG~č(\xl<6 29dLR`dndEeS ykD:t6~ɕ0vʅ6in,52oE^BҧrL H9 GS沎rFP UW8EI=Wŷ<~V7}cCh -yV+ԚuQ;`f?A GP@*ث*VBBU|Gp~Q%u8<TE]ןE1&\:U:ؕi9q#:Q)U'>IQsL[R!<.WQ\W;,e=E'ej˙ 3tQ 8ƵwT ET>!C} 6^ɗ$Yeo 4zmTO֥I3=ofyҺ2^kc8?4\| AOA uPaˁhit5֔`ñY(jq7/#g{MJZ6vU X\a)}zԜşgO6h[ˏqDZp -;*pG=^BP2-(ͅ{gHn_YU1T<|=-yjc]i1^(BgcH2:@f;#Ƕa@ּ954:r 3Ӫ*_"|GAfRNvGw00C3K4"FǦpu'EJe/ē _4!_A| sOOUگ<ڸU95HBV"oslTie1m^>ȈdPH@*&CMkF8㨌~10AVvl匀;Gۭ$1@nm% |hǁ$0,’O՛MtZs*MkvEjT^'{:$iKnZKm߸'F+\?Z_[QMCڼ84鄇;\G'X0l'z J5Tw^&Ts%7]_Ͳ*ep-&k_:-r]\#t+i(6z25d%n:L-<0ɂ6TOf$bNnv9LK[4 Ogػ; Y]a ٸ̡ϷW}B 5XeDǨ'?g?r_ Ŕޕ5 *5G& Ouݝ|%ҫ྾/~ endstream endobj 135 0 obj << /Length 4246 /Filter /FlateDecode >> stream xڝMwB'4}ifS-ҲRҿAv@` {Hڭᄐ}W&M|~UUwY7ˇ@&͓"a 9ߘu:wxB 'Uḽ82OJ)KAƖ7yw9Gzl 6x pwǬ\HlLiV'UQ02%l4]4zL)6$ Y H uwϣzrp ̮˧5`а'&H& /e8(34nɦcL҂H^</\'$lQ⏸buVGW^lلZbg\A浓xa`uw)N;Ի_U[ ݱV}lςfKm1?)OVMCp {'漠SM R4/w#L~*zv$LJ`_ $+v֧RzhśwʰtHO5^jB  [uэ) Rm0݉i~qOD[Ep'^ڏ!;`Yc s"~}F#c/:gcM䎆xdHGJ&Y/PpvWOK34<' ԔAO=Hq,1]:sCM=9Ɋx]u+If-b*G>@$,h (T_nB趱F3~ɹP'nł2PN, !;/KJ@0Pq %n}d5)' ?/Qrp&ʄ"OJh- hMS(E>bEVNWNED<դ@O [J:5".ϋܸsa1OstZ&yM?*+O VaW*RR S"h! _L׉b7J8qAtR,p t2O-~fʓ̹qgBL; A"$1ќKҽN4Y M$p2'N:|gs&"- X&@3nf? qn5! *xL֘c}) Y7 Bbcg6A7\GDVQRGZnV1}NQK71 󘑄P v bj>|D,I \-v, $HIܐAhĉ!)!QLIvcL+˩ CfZ&* X/ju8ح6耢G4BEƔSһVn%vAX`f}5}%P-ExR HA'؉ckxA㓄:\̓,#5t{є+yx6D:N88g[CA}l/ݢ/|Rt;DCUӯ%4VApf}p/ܫD9,SZcV31ew?ۤ&vЉ*u?&˨|]o$\l+)7SȔ!6X, wM*f,L{ Iz?CwTWA0q ʁac7 yq 5d<N9!DHTt~70)FȂFxjF%DWL\Z-(,~ފ{Fe+)ZC,b*7۟~׼G+=O&,4ѭ4܅sTY rA2TI6:isRQen2L0Pcg㻔:8B*ynpM8 I]4xKl(tn+Ih45 %'.N)ʫ /$׷E 15Fxޘe^-7:Xmtw#Tl#^,_xBАl&O~|gȍ-NW #AW,␮Oۆ> stream xZo_a}P5WHI,kQ\{)>hm'mI|d9-R,!93ͧ/n^_*B^/oxzQJ-׋_ۇKmeQ/pMG7Bå !ѯ_/?\Jf( BHs sz,˒ p-nuJܢ |/ƃϗ&ވW5xq C= ߣ+zn}M…%pZeWHd {mF69Ț˥) _b->i6(+a1T]C:Pzt٠iaɂ(GT3_BYρJÿ ]{$=BEb!AaEȷrEBG ry9hj*li[S6keY2@Hpy Lv 1,S^W2y 1X Ffw prx&zOwSs,)*U k9C'Y4m+@IkDJslz@dc?8S00@zlAfo"L4^hcWݧ/]{pž-wbYsI-f]N6@B؀< ⑁|ʌ8n|ܱS֙ǻ-y{#.ۻNhJt&FvA$6 r^*t#}eQox͎hE\Q00gV(;~OqIى{tP?.*ML ŤMb(J= aFudɰ*ƆP2Q&H _+$Y~" d37t\ |8^̾&g yOڳK"&vѿGe +[)EY'Gt~K t/K'f+sVg.q%{l:Yd9ILڏ ~K f2 ٔ@$a, l3<8yRp>mj:Ӑ0eΉ*S~ε=e1i VÆƕ¬(zۼ=?Rφ:׹sI:rb[b7*wKܲ(!m`ovG$+=c)<Yh}4uM KҺY1PލXÝ0Tі4< ˜u^iKֹ$\SCrģø' iccLgW:aIIQ'iC D*~I#q|+| ੓_9BT*'~ GA9y 1Z}q{i1ǐJĢq:n4R1EӺkKhָK)K;ՃnVqT.`o'!'n@#FiB8б0v&9‹uun$y>_o&΋>IrP)qr&T'etx |‡[r=S!oYK)YW,.7 "@5Xj4XSjyܪ%ń}.{T?W ӉRzZ:Mu=2=xl8jGSG 3{&5N_S%*H1pkR ػDu>hddZT|w;C>5c&ts ԥ{QbՉeK]ۇ XFMRµ~䶆H\`հ\J0: M'241׶[2pakF9fqLa ^>ɳMY,Z~?һ n@Yl'P֍;%qoP*goBc,93]=oReg7wY;8QxM)mRK|N5_ۻ4ڝ6=9jC= Iۍi arL'fKCUhMHQ8Y'ڐF6JXD>fE%UW4Y #gzJ6uΦ3 VDq84Kdfwu͟NN-ְ&֘u*i1rJKm4ٸVsFPMD'Cy3sU$df)+侾1Z5._h|5aLX/k⑨ ]/%?^Z>θJr8 9{+ʱYVZJGȷ,T I)<# K.$H(rQ}+ː XڃP+O(r(~X`xp֧l3a<@lmf[T7n(&RΞ ^}j<%~%'8ߩҵ<}5Yw2 e~nf> stream xMs‡!@$3mgҙ:gzHr%VbI^>Aڵ=Hཇ <9+3SmٚƜվ.ʟ]~Y.폭ML}{f-|npw T6)6E&VƯs Wh^6|Z~x񏁞 %@Ņ /ĔNdMN9 ٦k o#nM%O񨟶 %uKxh wnEwECۿLX<-D؜ n;α$d趵+6 ˜0CfMb-LYvwʃe!Xxepp*oepF^t"[p{|ON `"_)ͷeQ}Mu 9v`uvSk'dqN 5p/@[/^yw 5#cO`ljhUU4W'$EB~/f S.ɔ$Fyti0so2G]'/-jؚ T?3!Vzq g5 nF 9vő N5ȑ <*rM5B0)N I̱zqϯbzUrG6FuE~-!`p^a^ V~܌(:Pƶ'BSEЂ*YfgAr!"wԟ/Zsv@w]xq5,mƧ>*w{Yr[k'ثٓnyN"wۑ-O.dp($mLɞ9Bl0^ꔎݦWyT4(*Ai 4Tv`>ъRj`͚'8*bW]ln+:))iPމ$HL Lha7Zf!@hy? ![4SU{UUgLF7>EBy%93uid v$> HAEv&KW̅jrK*>Ͱ̅LB[N8 "Oh}ƺ)`u97jDE",LCh=45tyBW,3;#DM{F|"V(iUwJ9q7+؍Ȳ 2ZV\58ݝ"G,Mb2X\zhP8nns23_Ҏ# ݨic1#5eIِBRGq́PʒdwZkI'TcήDpXZFOŶEv+Xo$KDhp}٩!zpX/!n+4N`d>3oӬVyuW&2NnFÏmD)oV;fj{Ajj2- xnY͇!fO$-7O Ei5!XDž'vWiQ =LME(sn 쿅uBy ^Q}zO rG6:Y2 ZKeTt._n|aj)%dsvaΊyz+37 لT lU|=lU{&VK\\ܭQkTg-$"-lnoS4Uuu8bBYH$p b%G0A֌Y]&l'9{NS;Rz`\l:9$^= \D72(%&5x)/mь\z{gfRe5\'a5>g/_(2f'!Ft m\^fg9ӴS9sr9aQ2/"ZZ]Ct #Y zڢ ͼ\URQGl$V>]kהŽ!lv6RަJϨ|bp{|ŒbAJeԸ;RFa.XN(6c-r&Ŧb:' Bu8nksIL40<:j¶K;,drѽ5PT~yq i_/ijwp8|=Ve "RODY:^۳$_ߏ"$5Řd({ K.e;% IWE69j Sv^vUלW.:b=ѓ x5XSz5m <X i=HK%pYc%k ÈTmEykƚk4 i8(́6i5lU~h! hOe VLrKH퍉LΔ`;ҾKؐ7/Ȅcm/G:VϱnݼPTLjl VSb?K \0m;art/uv./hkMO4M29\BX"kA/ Glj"{Y+a1h>$ex/JV~ᛢla)/pnq1]MAբj|gA;bGE/,>ҍΕyEA)!^aͳԺj ?Jy]0iQ-xK9-oX"ݝ^M*"Wnx?E¿64Ӓ!Bw~Zf>;?O[}: UH|o%8(r GWw2qQa`9XL5QIJVԩNx5T4rU#88g2-@Ṿ֓{Y'wGgE:L-,U?QUIx>(RQsQ,WhO_0xͷEBI|b ,'?oĿ2gg# endstream endobj 2 0 obj << /Type /ObjStm /N 100 /First 804 /Length 2224 /Filter /FlateDecode >> stream xYYsܸ~_ѵ/sjd;]I[-A3¡|rxYA>|M*:%%RVB eHk,i&T$iE& ~ғ Q䠫9`bX6<FQUt`ɀ!$(BIxt,IL tHz^2~SylƑGbcB;Ӂ x`S֪IC)b>PE` ISR%KAHBOaؚ QRQqt=tٔ Z :5I(~Cp 8$iÚc Ìb80X Vr C(`~bC!1hdo#*7Tz+ѠA' x/Z >ks9vӛp>d| e!ۺ.'[lQ-Eo?wմꪼ[lQʹ:Dɨ9vXήy阱b?5Mwr`Ϛ#foTX7l-byזWWk˭OB TiCq ,-ljKۯ mQ7mfCrwM*C}Ru wʈ٬DZp\8[Mzhqa>mOlwSn?eq>:Y`+9h)qb wAٞFʧGz+%'t:Jt2`گE'~}A6&4#1W`~{7|Q^sW~f i@BC$α]W׿ ez8]R( Xa9ԾFnb8A^\\MJ=t!Aթ7 nkO0^KG;=p)nTͫ%P\>pɿ.Xv vhZ3};nhҠ07FTpqy2$Gɫ* J`~wwN9.J˲]CX"8biD4[Լf`I2>m+xK7oDk.2T=A?[_yF>%{Б!Qo`>X %,|ßL_ɐwN*u,rT$^FoFՍB_t7Fs8gpSKm>ytX./vFcQQ;lPSX!ATxypuxx 7W탊"(3ൻ!$"h9" _"U[N&u08 7 ׂ@ʫ\UӛenwrLq7r_9w tfݒ,/F:[ $5;7 u: endstream endobj 175 0 obj << /Length 3468 /Filter /FlateDecode >> stream xڵYo#}AFW̐C@H[AcIƲlkίw%vk8$]<7{׻7߽]h1*lsSZ{eVO,g޿垻mםLԓ9t߷+}x߽nYkT B8`rѤiTSU_nΔ7o4-+&|ˋx:IU7S(`T/B g}w^ρr.l ʳg;"G?nnm?!CϑA ;ya) g'otx%~}?yhr mT[;?ތc!8kmT]jedrP,e"Ih;xO:oZhm3!pQMnnTζ<'-)G4\JW)4 S`I{m/ܕvy" Mf# ԙYh͇a&F'os0E<YfHMtu;˖|`L4t?".8T8Je*ZqL%QkyrDazƃPߡjYuAYQ+c&:O}3`GhfIڹ峼@g)iH廄^ sQu)7.Nn1gB+=TE/mKUP ljwQ$tlNq^FSNE,KC[iI#w!A|` 縀t@Z.FC<9mUY~ jF>jx] p,VJW`Ui  OQL~$T |DS6PnxEeU!DEFJmUGɁXgB5lDdcc{LoK\ HYa=x:Pv=+مMML5B=v̦$APt4fEFp'5;J4ڌ- `R^`g8[\ <y_eMwk,> l.0GDozmV"ի0FS8#Qd\gFr>Etv=(wv' XCz?pK\ \Q>Ttc0IȘϧ~2Km|Y+Oz_Եw ZQQ3#ð6\b`_ m `FqK x%q q$KxIP҂%$(A­|\$C$a@;x_`y =Z <rR!d1XTK :!_2bG^|FYv\(u̐$>DݴZYQ;ÐcЀ%wQ~G6}`V֬D(8/h1'!2^A2 3-- \9@0 $8MQ?@(a3J*:E05'paS.Z7WhYjTS]Ez\E*XgstlX%I Sz =S9egEc#k0ņll Yg=`[[RR^>y+ˁ?/FMΖ"Ӈ`=SYŽv1̘KitY+mVkhl.>8wu=U@Ȍj+?Bb,8oByGnKѺ58>34|=0/DM'3}7~=Qm,|IpPpI=le9%A'6׌9 8*-lRi ;gT-'~B: <&ڊP:oC܁ȧuP·82Dɵ9}7_&ٿXO[Qa (ĉ4GG.[u+Vg0;9Ox<4GE5zc'0' fµ Dm86z_ s&I9ې~j/ |ikrBg5)k HƫDRuMvwP lcڣDpK;q2R2j &^*U~BMdA)w0͛@H۸AMFfN6%3_mE /ed8Wkεf6A^=Ga@|:$ZS \wC9R0@ڞ4viANQNViq!]ZUIAp/y-{nʥU}tF\?r{/a:]n[w{WSuiĜőgC1Q}_\/PBg Lsd!'V->y\W{.k0Ӌw(S#MWqHqz%3\   ~ "!gEL)Et;"Wk!nZ)Q1qC$Ej.G ΞUrCY݉!X{iG9Kǂ#0"'x&TYW魩M&4pwfy+kuV#l[fy[ {-eL!66AY}ʨ m'^ g`>Kɺ8e9ɓdS/&_^O~S+hE -vb)fE*&]8|Q˽k@ȉ47i ^USz %+|jNoVH\J4}OW: =!ɞ];MJ endstream endobj 181 0 obj << /Length 3711 /Filter /FlateDecode >> stream xڽ[Yo~ ?,p<}δ8PCF!SU]}.RjgznWW_oJkUg)su{w^zow2$ZXm`t-f[~X12tFk5{u4ҡ돵B wZa~-oΆF)5G,g?y{t}#l̿>j5=_̪)nD'ceZO'Z %.ۦ}Gߥ\5 ط44z4Yʿ??r>Nا1HHfa=_#3>roD+*\/ӨzƏ6qί:ly݆Bn}=qAj;5 qVe?v^r~#xOlĝ"8]Rr57qz][W4EˢuE=Y4a3]iٷ,2Vޟ@$ 9cѹl˹46ʽ*6BIpIRp#ATWj/|Iϻa^V#C\yMîΞmED2 i'҉}n]KhoKl )olk/wDD]{a͑`yP_\}tJHH>,B _sƭv!gH=*b {:bQ FO S'ickTLT,]<86,XK Z к)N[/S.gKnl" Јl ;F+| ͆a 1_,K*%E`mDI>ٞ1^7Je@;)K10TxkbMZ|}9f>ߡR:nqVk`JsЮ[?-z#1j.؇* kj@!hQkH?#| $6=t|?MKz].":P%n$'m(z=uvnsg$$oNDWa~ǐqg 쬩碝kphƳ2LtUϴ.GWE'% s]+^ 7S'Q {A>l)[)>X.j}=X4WQniO~,[E%,I8a;?eҿaRz .;Jzw0t/1U "䨠t w94Ui'g8/ÂP[SUJwPˤ@߅frn :[Fg# : Ѫm>H4?m@vZd0eS,xנY>bЦAQR Ԃ #u G؊s"w+ms̀0P_:lə'q 4+<j84i_}")aN5j(IYq#DiudX= w#tAxo<CN.SpE`: N9:X\_;J$.^o_8N//&8H)Om/ܤ Hm@^t*f+BὪ5 ~hd35f>;.MNP`Y)躨|-Ȉz{(>}H8ńտ:jO@zǦCFu"q<$þ(\xZWkmӛ( m'咽HL]T|$ 3 ;28"5^0t7ˬS &~ ^B3 t>ױ"*Uč}6zqya\fVMTp!#[ K{"9H!=u%6q ڷ2VAyit8gq"K'}VS!lΊ)hE".PՁx}K!OG?hW2Z[gf~C, W  (SfLF6 |C9UGHNnxЪuHGP=Yg;ym?7j/_/ endstream endobj 188 0 obj << /Length 2341 /Filter /FlateDecode >> stream xڭY[~_ayX(R-iE.Ƀxؒay3=7^$ӳ4XxLn-ŷw]}ly6Y/ 42Uf.>&e(TӍ_~ V~X*` ~w{Y֨1 dc*D8 zuX&˒7e2HZ<@>9O + VO|~L_Lga&Q*h+'3pN[.*0uL3ӏg/M5a¨?N >U?Z&PyEz |x:>tG&ܠ8E1G?lzKץ)gh7Gl/&u%N<;>s@y<^D^.RX}yU p:LQIP%HOO0r/2=d^ /T:umMj+w}.zfHjQ-nl^<LJ-q9@ƃ N4qx:1 +HVr?;Ct 5<,$l lYwgKo:'dDW4%E~VG~R qka-gkQC5wB~H4kOFoOhDv"% 0{ľD55 gGzChXz cDMvx&h%*=5|gb,eiULG#A J3k^-%1ͤ(ߖ׳TYT}a=ʈz$ k J#Pv6%YQϣtXCsPWtпGSV'mhq/F)W I%A5Fvs\up/";ueD`7p"àq<]mm{LUso:8,*sR};뤬 s:b5NJ^TǦu0^XP^ ߜWP#<\2w<ٜQw]d a\%Pu6K=~qp$UZ')[a6R8y% ,%(zfɿQBvԍ<*Yr 괲7l P&-ӡ'z] rD+Me^A;j+P}>̬. hwܤQb1XQ8Yzo;@={> stream xڭZ[۸~ϯ0`VD]E)"ڇ>hlg64<ɦJ<6hLRw.vt߮^ָI:fQEʤjV_ ;%E`s2c:`YjM'SQOY]?MZˇfe+ͮ],[ Ewjmep*V*bmJZ3TEuv6[60~+χ;#^aj;kG֫&ͼfd t^% joxU ~`e; X}u 1|οƚX=O >۝ }ԈݶD:O-MgsclъM@1lU#WTldaH_ټ({Cޱ(af/ aM=,puh]B#6"q*X;ʣ{jyN;uSݲxjĖW Q|NHWhՖ[n$͝D t.luX(e{l=zq֗#6O;o<2$skݲEa|ƽ׍Fu 43q `;0Ni`itG$xt H{Y1 PvPm Xl=މ:qj:ȶJǕZx&U:2]v[h}V3]qku&|&oyAKh(.6[j4=J=6CqI^fڍ`/LtbyBް6B]3LmDT <1A.g#<"[{U ;e0~-츛*c (o5!89V┕gʐ!'FN Z<} MQn: i΁-)M1Hml3`3ɝ?P8bhF-~t~3Ie<5,]2LsٵҤL}^rPd p̷*#-!$е*9T:[iƉbBdIs^'"l]FE[V 1ΟYԹi'2`w9~Y$ϓ@q,c*/+LFJ,۽9Ʀ-Wōa10 5w+Ԫ4I[y>I!kFtNHM͎@Tt_,CSֆcN0 (pJ)90Y9Ep[ @gDpi.pؚ|Q.#]bԙ'"(xA>wѳ48:R4D׆vNS5 r')|jYsLK'L耘&YjYFd^Uq1 j>B(CW|j݃:)gP]Y^&,)*WlWx81B bzryqU648-z>Dd &g+׿`fl^H6%B%cGoINdY[0}50}S]s%͐d^6xfXCea.!0N)L%ۥ)IęHv2iے縺 ; [Ƿ/IMa˦D|jZwXwXyP mkrC9 #Ʃ;fxzIbW/Xzb V Ĺ4rp2uMduGi9`j6Cq_` R7_4 z)LH @nk4vUWl; M+%n1+?{DcLt ;B)P+bzנ\ݶN+ƚT4 ;= ~~N^kfDTԦf3yxl2qc;[3osA\<3i:wlk#PE[$.!\b0 |&9rN5JI/='66>QPAz#~P:1Aqu;E8U3{XFɾY 7" d>c򩣿@7r 7FM@{; <{i?48Nőgijt9m96ϥr_S A4yH ̉ބeT#R8T8b'Q]sѵ_qr+0Bt^ wf%Xr)o}I,eaԘ Zn;"Wmo Oq݉EL^ƾׁ 5O'M_S'iy.[{Kt߶ z_ endstream endobj 205 0 obj << /Length 1787 /Filter /FlateDecode >> stream xڥX[o6~>kňuݖ ݆b "vWJ-;ܨɆ@Ew? z?;_.ӡ\{gLByi<{΃(2/.S/g.D෹I Pf F_L2P{}ihUS+٧R4i͓׵~lfßD;('!̳UQh9  q(!(YvW":-3l^|k0-GMkWyP@ WZ|Zq5L7u`?Vnrb%m$mvwQ>Lf¦lb;$*"  C5SsϩPIIDed,JfE_P멢 @R3Ir6D햴B7|4o&s%Udz CPH-.)_HQ7`<)ȫT+2g+Ɔ.IxM=6+~/L#*-N:)waRq#CQif@"ۜ}G^K\j =RwMm+ُ$cIقF/vKn>HWlgP vȧ)Q&0MR0'S|bf9ZQ80OcFїf]CI끻QmS#/1-#@[`AC%fTJ"\NT-齚P \ =J_E}zCi$ΕcZ&uNQK*h-JOK mtB!PB4B% E[~/[aG񶯳8VYp6RU&0 pDzkppswڥN,R. #EzqXR߽sJEU[FQQpa9Fb$#<:@u3 '+P1y:;L hO\bh`D)pWlt':+ ;)r#el2ܕ '4nwU| X>˦ǎ!Ɗ]XGMeU}W]Y;v!8z#;R@y-e/KUGθ5x crWM#-np,5;75w$ ɒ$:$Y+[?f`qhyP"f\aS,cpwf yNp32SN0^KhakKM%1OO3ِmo{5(.{M(L 9Ib?gQu }LG#> /ExtGState << >>>> /Length 4531 >> stream q Q q 0.72 0.72 430.56 286.56 re W n 0.000 0.000 0.000 RG 0.75 w [] 0 d 1 J 1 j 10.00 M 25.71 254.56 m 25.71 266.76 35.70 276.75 47.90 276.75 c 60.11 276.75 70.10 266.76 70.10 254.56 c 70.10 242.35 60.11 232.36 47.90 232.36 c 35.70 232.36 25.71 242.35 25.71 254.56 c S BT 0.000 0.000 0.000 rg /F2 1 Tf 7.00 0.00 -0.00 7.00 35.45 252.81 Tm (logadd1) Tj ET 25.71 180.85 m 25.71 193.06 35.70 203.05 47.90 203.05 c 60.11 203.05 70.10 193.06 70.10 180.85 c 70.10 168.65 60.11 158.66 47.90 158.66 c 35.70 158.66 25.71 168.65 25.71 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 36.23 179.11 Tm (Logadd) Tj ET 151.47 107.15 m 151.47 119.35 161.46 129.34 173.67 129.34 c 185.87 129.34 195.86 119.35 195.86 107.15 c 195.86 94.94 185.87 84.95 173.67 84.95 c 161.46 84.95 151.47 94.94 151.47 107.15 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 167.44 104.69 Tm (Add) Tj ET 109.55 180.85 m 109.55 193.06 119.54 203.05 131.75 203.05 c 143.95 203.05 153.94 193.06 153.94 180.85 c 153.94 168.65 143.95 158.66 131.75 158.66 c 119.54 158.66 109.55 168.65 109.55 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 123.96 178.39 Tm (add2) Tj ET 193.40 180.85 m 193.40 193.06 203.38 203.05 215.59 203.05 c 227.80 203.05 237.78 193.06 237.78 180.85 c 237.78 168.65 227.80 158.66 215.59 158.66 c 203.38 158.66 193.40 168.65 193.40 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 207.81 178.39 Tm (add1) Tj ET 235.32 33.44 m 235.32 45.65 245.30 55.64 257.51 55.64 c 269.72 55.64 279.70 45.65 279.70 33.44 c 279.70 21.24 269.72 11.25 257.51 11.25 c 245.30 11.25 235.32 21.24 235.32 33.44 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 236.96 31.30 Tm (R_GlobalEnv) Tj ET 277.24 180.85 m 277.24 193.06 287.23 203.05 299.43 203.05 c 311.64 203.05 321.63 193.06 321.63 180.85 c 321.63 168.65 311.64 158.66 299.43 158.66 c 287.23 158.66 277.24 168.65 277.24 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 281.34 178.39 Tm (addProto2a) Tj ET 277.24 107.15 m 277.24 119.35 287.23 129.34 299.43 129.34 c 311.64 129.34 321.63 119.35 321.63 107.15 c 321.63 94.94 311.64 84.95 299.43 84.95 c 287.23 84.95 277.24 94.94 277.24 107.15 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 285.23 104.69 Tm (addProto) Tj ET 361.08 180.85 m 361.08 193.06 371.07 203.05 383.28 203.05 c 395.48 203.05 405.47 193.06 405.47 180.85 c 405.47 168.65 395.48 158.66 383.28 158.66 c 371.07 158.66 361.08 168.65 361.08 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 367.13 178.39 Tm (addProto2) Tj ET 47.90 232.44 m 47.90 230.46 l 47.90 228.42 l 47.90 226.35 l 47.90 224.24 l 47.90 222.11 l 47.90 219.94 l 47.90 217.76 l 47.90 215.57 l 47.90 213.36 l 47.90 211.15 l S 47.90 213.36 m 47.90 211.15 l S 40.84 223.39 m 47.90 211.15 l 54.97 223.39 l S 67.63 169.39 m 74.21 165.47 l 81.53 161.15 l 89.41 156.52 l 97.71 151.66 l 106.26 146.66 l 114.92 141.62 l 123.51 136.61 l 131.89 131.73 l 139.89 127.07 l 147.36 122.71 l S 139.89 127.07 m 147.36 122.71 l S 133.23 122.77 m 147.36 122.71 l 140.35 134.98 l S 190.93 92.41 m 194.77 88.85 l 198.85 85.10 l 203.14 81.20 l 207.57 77.21 l 212.10 73.16 l 216.67 69.12 l 221.25 65.12 l 225.78 61.22 l 230.21 57.47 l 234.49 53.92 l S 230.21 57.47 m 234.49 53.92 l S 220.57 56.30 m 234.49 53.92 l 229.59 67.17 l S 142.43 161.20 m 143.94 158.69 l 145.48 156.11 l 147.07 153.45 l 148.69 150.74 l 150.34 147.99 l 152.02 145.22 l 153.72 142.44 l 155.43 139.66 l 157.15 136.90 l 158.87 134.17 l S 157.15 136.90 m 158.87 134.17 l S 146.36 140.73 m 158.87 134.17 l 158.29 148.29 l S 204.90 161.20 m 203.40 158.69 l 201.85 156.11 l 200.26 153.45 l 198.64 150.74 l 196.99 147.99 l 195.32 145.22 l 193.62 142.44 l 191.91 139.66 l 190.19 136.90 l 188.46 134.17 l S 190.19 136.90 m 188.46 134.17 l S 189.04 148.29 m 188.46 134.17 l 200.98 140.73 l S 299.43 158.74 m 299.43 156.75 l 299.43 154.72 l 299.43 152.65 l 299.43 150.54 l 299.43 148.40 l 299.43 146.24 l 299.43 144.06 l 299.43 141.86 l 299.43 139.66 l 299.43 137.45 l S 299.43 139.66 m 299.43 137.45 l S 292.37 149.68 m 299.43 137.45 l 306.50 149.68 l S 288.75 87.49 m 287.24 84.99 l 285.70 82.40 l 284.11 79.75 l 282.49 77.04 l 280.83 74.29 l 279.16 71.51 l 277.46 68.73 l 275.75 65.95 l 274.03 63.19 l 272.31 60.47 l S 274.03 63.19 m 272.31 60.47 l S 272.88 74.59 m 272.31 60.47 l 284.82 67.03 l S 366.01 166.11 m 362.18 162.56 l 358.09 158.81 l 353.81 154.91 l 349.38 150.91 l 344.85 146.87 l 340.27 142.82 l 335.69 138.82 l 331.16 134.93 l 326.73 131.18 l 322.45 127.62 l S 326.73 131.18 m 322.45 127.62 l S 327.35 140.87 m 322.45 127.62 l 336.38 130.00 l S Q endstream endobj 217 0 obj << /Length 1918 /Filter /FlateDecode >> stream xXK6pdt )`ֻe͢/A] &goT<[?]]<{#ҙ2.fVYQ} ǫߞ)K%Bh?~ZbJAQ* ETڲhQQ(CnJfBA\%Q}B#T@cwmz~x/pBnYg\{ex8p0}F aV#HK}|@vl-/nsp`vYUrcc4{pGHuZF=#t!>5 $Wm:;$Z9de"_*ϭ5&2FHP0Wp=9R'4 svJ$DfYZH* Zj>=(VӾjKwr$̠6[G-oiX7v0I+"sʤ*5<vPCs*QUAL@, v9Yƀ.(rVUãH`|p:>D7 E<uĐ]EpV5{Ԙ2XvKƞs@eo0Bh7NU]mkM(ᷨ2pқ)rx|OLP"RA`<:1NoؒAdp$VD5B#o۸Z_&ec'ɕAng^|X%rT_v-ZmQ$%W$ԧfCf2xַƘwt !K*=lV%F0e>:&.<(S0D'B݀d_K8zMnc-xmfG&Y'kRQ!@ԦOՔH3/PsE6MiҜִQv-Wz~G bEh^xErł+W뺧^ay_?}u"c‹.&Jp 2RMu }?e!mCAZx*Mgܮk*xg;_{(VrWff,Nwƫޏ>/8cs<⛪W!L!jDl&͕oJ7sy|[bwip $ rhxe!BJô8L랰q+Jg3`_`n`wU`YfF?s!Eޘ"֤q%~ǖIz_IX>?8I:qx?v2>ɧ?>]1%v@Iy#`|[ u&?q\sʨRF}k?Z endstream endobj 224 0 obj << /Length 1950 /Filter /FlateDecode >> stream xڥXm4":R8 :CͶYҔŸg'MJx晱`Dw^]~T: TQRyҤ2g:fschWՇKZWY5t!?tX2AZFk$Do.44@RTgbwׅVQ%<(]i.~emIx>L^u$y*Ywh%xV̓0al$&|cVqGp]3$Ys 4[2-[/ˇ,RqX5HKxn7=J#~i> Ghqz}kj- XƥO>6&7d4qyfŅ[Vܔ Ԡ`t6}$)9]ۇS җpnn+•B]bg6׳y O6&QW%PyV&᯳"HRvPbs i=J?p 8A<6c'lFԒ-*kzcj"xYjYELwt0OAf̓*[72l[BK{\{3ze>D{F; s\h͘;V}}C =0hJg ųs)rFc:ڤɊat M ڻN |Mdx=o2qpd/ 4q׍]IC#8/@FzGQ31 }P+!ye"Im̓Ȩ$7gPՎQP*y>@ȅ ~(Hh`SRϼH׌X:RRE ("–&aV[7nuӺT&] Q^6 q?# mdM"s͵ӒaDش@<ʞHBD=&uVNFқN#P; m`c!⬞G8?T3qfO U_ z"iLP_ntrF-w+g*8DqD4Tb$DrN: zbl6*ZZPYqw‰ JmOeVB$"%7u^t5-W +~51(#P];aX}A?]ϛ($[rHJZcu֢n4kW`Bh@=x--޷&.OINr;/.H|䇱G =PN` FNAEM{x4$^x)=CUI !da^LDW,|/q(1F([j|?\̣_]H{{&blk{?"b/o]NDx{H+ĸG AHR:'+/%ptLS PmX >;z SSrZ~"Cͭ-7nh)4[lQIx_9M-=9O,GuLq3kjg0V$8UWWmo6qauJUǛ!irprULoH}]xJG_OnTX0~d`Y'֔!Q4+FD`Hɧﷱ_- %g۫E_ endstream endobj 213 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./proto-smoothing03.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 226 0 R /BBox [0 0 432 216] /Resources << /ExtGState << >>/Font << /F1 227 0 R/F2 228 0 R>> /ProcSet [ /PDF /Text ] >> /Length 3691 /Filter /FlateDecode >> stream x[MGݿ_1dIwWn ȓXH1" S眞{M0 鮮*ǣ3cYK?G9?Δ旿rO㑎kS񛧯:xQwG='9_~~<>NWcrdM]=z>9lkgN!~tNBt,vBtLy>.G:a3;?g9s6>9]kK>[H#NY\2ϢtcQ^VȚ́ 5!9iz\.N r/4̽_|+ T S Ф94X;\)xM36Cd1!AYr҃5+i)'OEb!I,uN썦%T 8\)TrpIZ\Wu={[4)D8lg$paC.r֣"nӃl !Œ2 (5%vF5srM+C/ b<ŠpBwaC΂9|\yk 3gZ0B`C^s|6Cu9NF!AŒOAb,õĬ\)J6 \ 4^@ͨH[^GC! [;F s2#j+e!*nPAb7.3 Pn:c-W nՐ4Sȃ[4.@+&"5b]qXG3Ϙx̀[a{3#G|{|PgUTgS >{r[|X~˯dx/~fw)[_Im:/{Y˙!Z0Zz-onLnm7?>T`TBId4Nf?¥qc "saz{;{zN;GvzĢ,_^~ݟ~Џy ߼ ox +>QqlФ)sTQuʀ]O]~aQdu*bSY ovYM"|7Fw-n} zNzUe5i^ag.1p!m QeKppC1}u. W^5飱 =<].;+BpNɺ"@A,DظkmcL]?׶CT\t? /ưh<8x#N}c HK9ct?n$F4gk1rӴR[$1Cz'犬oEj}/-pX9j*W8 8l_~/I]PʦSX}?jf5oAO3WCSXFyzZaCj&6?c_[y9y={gzjE~;y+]/~66߰;6d-G~IφS'[U/(AEEwsc}c#T䶾-q xߝc|{=5`H =Fal63.mNAI?;plD=ry瘛:/yI^ÁrDFZt?ŋ\ݍ3׍ȿxpƁ>Sm13x1埫dVMs\{LY0zEVRFsT0տ`31?zm^4YW0>b3ţ`,RE=.q ; %2ԳK} pc%:$.]qAXߐkHh ?͍]\Vu-K״$pvu]i84mg\Rys}K9$!т1"K:qQLWd XN^-*1a J iFCS,FvnDoxNOm0LMu3J@Uu%;@>\EcprWǠP`{mA˰ܮv~;{eG606T޼S#d. kdJ,--q?Ej6Ez 8H004|w%) z‹?SRZ3$x)Z7Fz|?crOR5Ϻޭx/4ܛ򳽟Hnt}4*蚮=Zaihf(}5ڣNkQBR" Mx*1t+ի?P8JmA ZE/ >4$n 9ZdȄK<똛f`gh28t)Pz)yX[54Xd1?@-?h(cNKG|ṵ@?E5LvtӔPg~duxT^7 :U΂=Y4 hɔvRJx7cQo>FQ~0ü0POWG *̻ h ;v]xIĴPk6jZIg-e+c\.1Iٷ~*}:p ,ۗxT>+̓q?0/m~Nm]~(2y;Uz~ё36Iq }YR3[_kdU endstream endobj 239 0 obj << /Length 1880 /Filter /FlateDecode >> stream xڭَ6_'^PVpqL:'}zF7VG{Fcʆn–`{δmP:GbO H ;-e00piFQ=XqC3$cxMN!KXvz5")Mg%B $ Hl@M91abVT xj$)9[:ݺ)YXEwWoeTC>lGٳA!-Sm2t2G4TPC#3J.s7:B (4}==*֑p܎0uۓ9(J[X8e N1_2Ozɰ7 Sޓ13#0!ooaDG16yOI CU%ǁ,<!gǔ4-4ܑ%VGNTک\= <`ulF=!UjхmTE"[P{ 0ǔre*TFLm?I"]r dhzpLHTiE,j,GQ/qXGSYh܈!kZ˼YMѺ uAt*} %Zkb.oB> [䄹$-9̍¸8!\q;z0W攪ȦQXF#IN.8dut48qFQ[Njl5==)0QfNar+ꁔP䣐ަ.~|u~/ }`ہ O=O=H֩ujZinD?G߳i]cj֮-F`gAWRf\cCtxvçbx\/T ǭR ;Q0L? %""㎤Ƚ({ %ABUboQ8sW]lP $C.heIE%-F1@ B& Z5VLOHOunheK;H'+F]VVP9]>vaK2׺V7vJZegvIק yUG@Z..X/ڱ>V.T8c)7$ M}oVW"l\l>"&[/^|{ endstream endobj 220 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./proto-smoothing04.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 241 0 R /BBox [0 0 432 360] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 242 0 R/F2 243 0 R>> /ExtGState << >>>> /Length 12107 >> stream q Q q 59.04 73.44 342.72 227.52 re W n BT 0.000 0.000 0.000 rg /F2 1 Tf 12.00 0.00 -0.00 12.00 68.23 252.15 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 70.34 225.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 72.46 169.25 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 74.58 149.58 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 76.69 180.33 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 78.81 173.72 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 80.92 209.41 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 83.04 167.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 85.15 172.78 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 87.27 194.37 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 89.38 219.80 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 91.50 241.46 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 93.62 236.94 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 95.73 219.13 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 97.85 187.39 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 99.96 190.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 102.08 161.17 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 104.19 145.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 106.31 134.11 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 108.42 198.33 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 110.54 189.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 112.66 207.52 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 114.77 212.32 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 116.89 182.22 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 119.00 173.82 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 121.12 216.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 123.23 240.25 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 125.35 254.28 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 127.46 247.26 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 129.58 177.04 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 131.70 204.06 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 133.81 150.91 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 135.93 177.40 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 138.04 251.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 140.16 232.19 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 142.27 278.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 144.39 289.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 146.50 258.62 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 148.62 214.60 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 150.74 157.56 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 152.85 132.80 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 154.97 78.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 157.08 98.62 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 159.20 175.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 161.31 155.54 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 163.43 194.43 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 165.54 225.40 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 167.66 247.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 169.78 218.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 171.89 208.06 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 174.01 187.17 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 176.12 197.72 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 178.24 179.86 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 180.35 208.01 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 182.47 192.72 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 184.58 226.03 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 186.70 186.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 188.82 131.19 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 190.93 218.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 193.05 204.32 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 195.16 217.65 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 197.28 230.59 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 199.39 209.35 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 201.51 216.65 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 203.62 219.64 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 205.74 206.33 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 207.86 199.78 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 209.97 190.47 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 212.09 258.88 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 214.20 242.75 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 216.32 210.87 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 218.43 202.02 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 220.55 206.47 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 222.66 222.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 224.78 213.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 226.90 178.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 229.01 215.60 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 231.13 207.26 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 233.24 182.58 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 235.36 167.71 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 237.47 153.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 239.59 187.97 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 241.70 196.11 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 243.82 229.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 245.94 220.16 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 248.05 231.66 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 250.17 221.90 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 252.28 226.43 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 254.40 195.15 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 256.51 143.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 258.63 199.03 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 260.74 223.37 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 262.86 193.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 264.98 168.56 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 267.09 114.58 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 269.21 174.30 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 271.32 221.14 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 273.44 228.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 275.55 253.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 277.67 241.63 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 279.78 222.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 281.90 184.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 284.02 147.92 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 286.13 187.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 288.25 184.86 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 290.36 192.71 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 292.48 200.28 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 294.59 246.02 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 296.71 238.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 298.82 210.80 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 300.94 264.45 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 303.06 258.51 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 305.17 245.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 307.29 203.68 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 309.40 153.46 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 311.52 121.53 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 313.63 134.17 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 315.75 175.09 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 317.86 213.88 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 319.98 217.85 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 322.10 227.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 324.21 204.28 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 326.33 174.67 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 328.44 195.41 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 330.56 159.41 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 332.67 226.38 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 334.79 234.13 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 336.90 259.21 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 339.02 244.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 341.14 231.67 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 343.25 186.35 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 345.37 175.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 347.48 187.78 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 349.60 207.20 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 351.71 193.15 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 353.83 172.26 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 355.94 153.09 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 358.06 202.87 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 360.18 173.73 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 362.29 173.23 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 364.41 238.97 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 366.52 252.75 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 368.64 221.98 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 370.75 196.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 372.87 206.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 374.98 194.55 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 377.10 178.03 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 379.22 164.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 381.33 166.67 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 383.45 226.62 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 385.56 240.95 Tm (-) Tj ET Q q 0.000 0.000 0.000 RG 0.75 w [] 0 d 1 J 1 j 10.00 M 71.73 73.44 m 389.07 73.44 l S 71.73 73.44 m 71.73 66.24 l S 177.51 73.44 m 177.51 66.24 l S 283.29 73.44 m 283.29 66.24 l S 389.07 73.44 m 389.07 66.24 l S BT 0.000 0.000 0.000 rg /F2 1 Tf 12.00 0.00 -0.00 12.00 55.05 47.52 Tm (12200) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 160.83 47.52 Tm (12250) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 266.61 47.52 Tm (12300) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 372.39 47.52 Tm (12350) Tj ET 59.04 86.28 m 59.04 264.06 l S 59.04 86.28 m 51.84 86.28 l S 59.04 145.54 m 51.84 145.54 l S 59.04 204.80 m 51.84 204.80 l S 59.04 264.06 m 51.84 264.06 l S BT /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 74.44 Tm (-1.0) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 133.70 Tm (-0.5) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 196.46 Tm (0.0) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 255.72 Tm (0.5) Tj ET 59.04 73.44 m 401.76 73.44 l 401.76 300.96 l 59.04 300.96 l 59.04 73.44 l S Q q BT 0.000 0.000 0.000 rg /F2 1 Tf 12.00 0.00 -0.00 12.00 198.91 18.72 Tm (Time \(days\)) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 12.96 143.51 Tm (Residuals deg K) Tj ET Q q 59.04 73.44 342.72 227.52 re W n 0.000 0.000 0.000 RG 0.75 w [] 0 d 1 J 1 j 10.00 M 71.73 193.28 m 73.85 193.78 l 75.96 194.28 l 78.08 194.78 l 80.20 195.27 l 82.31 195.77 l 84.43 196.28 l 86.54 196.78 l 88.66 197.29 l 90.77 197.80 l 92.89 198.32 l 95.00 198.84 l 97.12 198.94 l 99.24 198.81 l 101.35 198.91 l 103.47 199.26 l 105.58 199.90 l 107.70 200.89 l 109.81 202.00 l 111.93 203.23 l 114.04 204.34 l 116.16 205.66 l 118.28 206.80 l 120.39 207.19 l 122.51 207.22 l 124.62 207.34 l 126.74 207.39 l 128.85 207.85 l 130.97 208.83 l 133.08 210.12 l 135.20 212.08 l 137.32 213.98 l 139.43 216.23 l 141.55 217.47 l 143.66 216.48 l 145.78 214.42 l 147.89 210.25 l 150.01 204.37 l 152.12 197.96 l 154.24 191.52 l 156.36 186.24 l 158.47 181.97 l 160.59 179.95 l 162.70 180.73 l 164.82 182.29 l 166.93 185.80 l 169.05 190.28 l 171.16 194.90 l 173.28 198.39 l 175.40 200.48 l 177.51 201.80 l 179.63 202.17 l 181.74 201.77 l 183.86 201.84 l 185.97 201.76 l 188.09 201.95 l 190.20 202.31 l 192.32 203.45 l 194.44 205.45 l 196.55 207.04 l 198.67 208.42 l 200.78 209.40 l 202.90 209.74 l 205.01 209.75 l 207.13 209.65 l 209.24 209.52 l 211.36 209.34 l 213.48 208.90 l 215.59 208.88 l 217.71 209.10 l 219.82 209.19 l 221.94 209.36 l 224.05 209.62 l 226.17 209.64 l 228.28 209.52 l 230.40 208.92 l 232.52 208.22 l 234.63 207.43 l 236.75 206.51 l 238.86 206.09 l 240.98 205.62 l 243.09 205.06 l 245.21 204.54 l 247.32 203.97 l 249.44 203.71 l 251.56 203.46 l 253.67 203.09 l 255.79 202.70 l 257.90 202.19 l 260.02 201.86 l 262.13 201.70 l 264.25 201.98 l 266.36 202.83 l 268.48 203.95 l 270.60 205.24 l 272.71 206.33 l 274.83 207.02 l 276.94 207.21 l 279.06 207.14 l 281.17 206.91 l 283.29 206.43 l 285.40 205.86 l 287.52 205.10 l 289.64 204.14 l 291.75 203.55 l 293.87 203.15 l 295.98 203.52 l 298.10 204.24 l 300.21 205.11 l 302.33 205.91 l 304.44 206.34 l 306.56 206.59 l 308.68 206.86 l 310.79 207.04 l 312.91 207.50 l 315.02 207.58 l 317.14 207.43 l 319.25 207.06 l 321.37 206.67 l 323.48 206.21 l 325.60 205.81 l 327.72 205.60 l 329.83 205.38 l 331.95 204.96 l 334.06 204.47 l 336.18 204.06 l 338.29 203.82 l 340.41 203.65 l 342.52 203.68 l 344.64 203.82 l 346.76 203.92 l 348.87 204.06 l 350.99 204.24 l 353.10 204.48 l 355.22 204.69 l 357.33 204.84 l 359.45 204.92 l 361.56 204.97 l 363.68 205.03 l 365.80 205.08 l 367.91 205.12 l 370.03 205.16 l 372.14 205.21 l 374.26 205.27 l 376.37 205.32 l 378.49 205.38 l 380.60 205.43 l 382.72 205.47 l 384.84 205.52 l 386.95 205.56 l 389.07 205.61 l S Q endstream endobj 249 0 obj << /Length 488 /Filter /FlateDecode >> stream xڝTn0+xpACZv"6K;h 2=˛IvWպv pvL)'iYceORZxg|lhT ߢ~G|sy}X^sJ8P42umW$3m+9OdwqΔ  ~BjJ]lzMr&JeySVF;d8xOJ)eY0N6 N<N Hb]Z4 O-ߔ1ϙ=E!Gc xШN"cg8jk{lޞ }E gN t#Lm^Z%U2E/Xl]|ӘE;;171pu0V12vK\h}.Tʤ@>/(o endstream endobj 232 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./proto-smoothing06.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 252 0 R /BBox [0 0 432 216] /Resources << /ExtGState << >>/Font << /F1 253 0 R/F2 254 0 R>> /ProcSet [ /PDF /Text ] >> /Length 4893 /Filter /FlateDecode >> stream x\M-IqKXL߹4m d!%^#`Os4T4^𚘺Q'N֟_~}#(G767Mn/v/_/?WoVI1^n?GW3Cz(f]Cz0c\4p)!vz~#׏\SHo1[HoiyL|ފsa|9Q|e< ;i=`ςic4od_gG}kG~#z*6oDcYQk*K9aF-Xs%fjLG+ԋyi Wgh3jlk-<"NY<5yAwڱmg}%7 y90f5=|q, N\S .1Kɮ2. pڑck ieH+!GtAZF( )6,(cŕ?Vk8(j YH Ӕb(j@qv5VOgȱ%ܩpQX\#Ǽ\ΰ iQZ  J )v ++*Zr#*%BV'ݡB|ß R4$8\@'{ԏ%P\UA'8Ԃ<8J h֪1gPP ƀltdzω*ć'"':`K98T.p_NGTEvŠrŹcG̪uFDDv ﱍGeNg pE`un )NGq|D.V1d_1@cьt1j4N+1ZELt3\liMa2؏j!RlAdS`pE@,hIlsm<zR-)QwtE>`9߳l3>A׳N9Cqt%kkѠm=,8m+Wl/VI GR4vP(#+ۍM` %rFe XIPu&jzQi F Sͷ9c|=_^xGH2ۦ h//"P,W%=kw^Z~]u ~1~ ֭eE1}?/Pm6L~l9{fἽlOd9މKVO?4z٤5Өzz+ft=9r`~~o|{?4y< <_YJ(ΫW<-:@?>΄< wz?w+bCb >_}. ^c2zURNFP`^yLңD$z_cޤ?9b0y}FRP aΰ<yP(#|QJ)!yE(}̞K_fCZhrUng^S_OU.,-߫zC\f΄u<[ KLCLk1hB%>)[geԐ{!ҏ\bى eFψvdAw]t>~Rt]0r`.$lRRudh /%۷u,y1b5@z3h@Qt^oأE'C:v_7I_0]lU\!4{=כfWY\իHF`TivkM-1k4Tt6myz-5f()@#Lj2F4IHh;FypIV,IFIX-ݫ+G]h:T \W$ m>+5hJ)txȚh ƞzsb9$̡6t>nlJQE^wZAh66ֱUs,, MG'ںJK v)X ֝pp"SgmWlKo-6&H>]뢗XLGӛv!]a !,|<㪞 Һ_NJ b1ax]}|-H$|;<\kd!e?//c(>{Kw_ Úlk!~Py{ɞ[sB~O\x=c k;T替秿@?C[|I{"o:rK~O[}foYyمMIpA_L7FٞnRڹif6>ESɦO ƖֹIK'c|TXH_'–SE!d`Vm}gs20Q$`z>&>)hE;C>7(cfT=K灖Єa A^A#H+Ytȇ,E|Ȋ]'=&5c+;& +(aMeSҟMFjȟE y!5~|)?7u= [BH*=Zj}!/}~KXɇGևp);E 4 >DRzV)O15_(s9I ͯүBM|qz[i V|ݏDz rA>S0]2U LJohq3tU? `1 wɳ>i0tQ>.7x~?|b15y~S Pq~?k"iz ~)OC3xGCG '=?m7]N_'-Eq_yI ,DLvXEǯLnoٞ/C8Xx?|g67_U_u8xg[16*z[f7'!G/2t2;uS0>~:yO~=- 1il'7EeɶE~sDqNR>k' 4( ;iůiRWyoﵹ.ݯgޝ67a"^,| endstream endobj 235 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./proto-smoothing10.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 256 0 R /BBox [0 0 432 216] /Resources << /ExtGState << >>/Font << /F1 257 0 R/F2 258 0 R>> /ProcSet [ /PDF /Text ] >> /Length 24399 /Filter /FlateDecode >> stream x͎tIn%"݋͸U[ZHj-Y¨!oRXTf1=xݍHQ?g?_~ӿ~?}?s?_~~ԏ__>Og՟{}j??Ow:g_Ye\Ck~e7O# Uy/o߽E.9g.j,WNmt`.+V>;?7 t^E5}M۟z{P]QD>˷UNyrvfvw7WGھ?h_v`& W4yNlw;06\o/_Qz{l[?ەg>[ۥ߷~ k\Ei|vnnw/MkhT;qQi {Ewqu{Ao\DyO9oUCyw婝jկ|Cd/m7WC/K-/~߹Mܟ)!b|Ih?z{KRyN_հ_*vz qS\>譪|CXW=Ao﹩ىF~Lh| ~Ʒ(ϡʇvQ|_Ou=sAo{y{35=[=ߗ\oggрގz{Y by`tz{ھۻ>S\oub}S.j|w-Mz[qU})"z;^N]Ƹ|7oѿo7סr|tMG|jWrv@oz|8oG|3o!z烶GZL"=~\o(gRoz>L7r ?qqy4M[\8:߂6A5>[ismbɿz;8szF/ߡr$|_.vzۚ'oOgoW-. \zېqZ~Ao~ѾPoٳC譌|!{.ߦ+.a-Ɖ.U[ u~P|F~BoM.]lOwV|\o{jV\O۟nI tKzSG^·˷hs*>x]kRzޫQw&V/|ۮJ]}}_ޖ-/mQGX7*ރ758f筡\>z4x>-e`>uZ`*:z[Ts-Gg]>,]gz{O˧ڠ61~vô7κ|P!.i֎ہ͢elPmM|(ߩնL1}V !JrLjDmWO*PPY֗j$[TڡH l^Yx3𽩥lQgP:jྵ a~v%=}̰XN˦1wA;6!/i*lwjMzT;x߽Mŏ몛[mWWU3{8g9C27v-l&@'u"ܭՓ^6T]ule]Z27D)*AO(؟ 5u|x{+H/\YsG-MrCD;W9!Z|/~CTHH:97!Ou_W)Ԅ]ud+VmN-u| ;;wpNη:"-)|Wo=&vקu[ϸJ +-2"c7&xiǟH|~v+s>kQ)& [":DG-ɆÏ}AEȸ1+/q2ȲcBO"#&rٵޞ"5ZrZ#9yk$bW+* zvʌwbGPwuwq=:ӹ}jVFEGWuS#.'dL=ʍk<#f&|fȵ catMqO=P0unWajF͢q;[‹tv'mT5w:f'AYͥ u5祊|!N#9Y[,^k/komUN> ]jKq(Rr1ǚS4Ps 3 'M؎keƠS~[,6-K*Zqc+9jʈic5w~i߷Ѕd#Roaҧ7vy捈w%y\"}UG\r*cB !\ybvL0ytY*כD_!NFGV?R'Zx/&BW oo J|s աK|WqVs2 ).}&*ȽH\gmWsԲWU+BnO|#E3L 3{|b(O܊\ օ戾_L uDLU.<|;Αsgabk|}~c2V_ z>lmWԨd'+.@iH0J9’];(.{7R,4`7BgU 3}Wo,(Ҵ&0ݎ|$gaYV;#>D9 BoE.ۮ!GIlx&w"`xLA\8y#o#E6T3}sw /ϋHKU7˞2/+nWލt&oyjEzUdF-ꑻ-M4^loLMhlـ(f_>/$h, =lwCqs]Laߝ;e'?.`XmR1S}呕0$xCj=P^(ܹ2zhj`#G66d}P`4;Y D"bkrO X*ʾMنjQ?k/?o?GQoxl\&S^cH|Lja@zOI}~)$_>|NsH|>aڞI|gm/B?,y7?hhվeh5ąr¶1|OʵM9nP~1ʽH}~zOI}~ uy>s~>'9d<|mI|<Gp/݋Z{Κr]9%2N x IG]72nG'?_}^s4{xpb|?b4DvQT_ġ=}I꩘5Յ{q%QwΨ\җsj{lXO$=7}!%=>sSx2Q>/w2޹Flơ'xݛE1dvMQX>|N^%g/UGP $?749;I/M#̜ON 1.Qp1M$@;>|ŧ^mŖ\+G.l\D?98l o.S7K2;p {4#$'H,zXE6PǕ㒬7dVA6>w>rf%_ڬjrDy]m'VH%ehrH%T-;{ς17ZB\-%QӲ$X~_d<vg!L 2*QX~yUF7Wd;X>c%$c| ˟rtJ./Oi,=V'ckK?\=?TKg,H,КT.?Kn>>UT._uP`F҆?qh rҪ c ˏ#4.2t.S%='#h qxxN'9xOX@V#pX$O;G3i'\6;'ONMr f/^k$/ GsV$c2G ]=I!L.^\~/zQ}[h}{q5b[\>Ғ |Q1W)$]x/tGO=n`0 4fde6dCN02xq07!9|mZR!\k}&=$]KLu6.<Z~3~wh |HAl篺onPrX~l+\~`΍1a: bR8{FbXޏ3XeU fӈШqX_VVkъ?g?1gdZlGP :LX~a=8ˌIWDk =ۂ',@`Gt6Ă\hgV җr#fQ#kBkyz-%ݱ[V)'}Qk+8aRmܼK bz4Ԡ=RZ efЋPG>ʞʌ;>07X A7B!q\tCLMy-r|\xtOЍ@lm\Q7̾\o!{_V=k -tu7ˣ8iGAżFiLƫ2|Yu'LtMYC㓞l]^܌7;iGMqNw'5߮3֥?9yl'5</S4kځƱu>"WKyrq{`"62hAqp oCZ, O \|?>؟37=?G|'76ҶN".m2B[1pkqBxl3jUFgV,~1B1_|vL٤mAgbwG,s?[-msx שm#QH 3 353\q K3jdPs= y*᝴át%͡}oĊ ? t۟r`z2L-ba'ET9HI|@_hz-;7=B(_];zY (jLU&=TydV9\ 6rIS|.h&Vjҭ~fG xog z0V6c(ډ'\oC~LttTNFj=#jA/Zff[$>o2G{НGi~:3ۉ%. QB9h*vy(qJgL$]c8#22syp#5PA&y?xD|_uF|zu23cqȎy5caOFv,N#p;#;iFMНpvGw>@5+o#;;ӨGZ|Dc@XZҁa)Iw"mN#6+Ix`L5{#Ts}g>@HTW70퉌u';6>3ZǤ.?#=/#=2@`"o4 {2i' v0i l4i;ίAO{v>m1i~#ڧif~>mf~?~-A#cS/ ~Hל4x?ODg?Ӟt(r?4Q<@-AP+i/jybZA@Dմ0$ZI P=M"; oMb8>cX$Mjc0 fޏ&A5$"$$: 3w:C> z'^0 hxzr"$6fsh}$>25IPq=1'ABDJi%T|()OjǓ@X6z`|O *y>N=ۡxߘ #b*%NzxܜI#^7#1 *3IܐM!MPD|fѳFIPD\Or?/(X>y9 bt㌀$TғKZg :[$j:#Dau,7verˆɭ 8ea{;?5񽸏YzMP"f "ӢMDf;-z*^,@lǰ<[pYD6C5| :# gįZ%d0 pVw`iDAr -sw"׽2u[~jlzlMaV3xMy}ޜ73?~}~>+>c;$L?CyTCynCypN#JIBw~nq]}7vy/]Gzt]5 ~ T .LOx Oӝz~>8Byْo{~~8t2T#C,n{%_XׯX  BlR/up>S6ߠD]|Vv:Ɲglu>E;mlu(>4/k-z~m_狸97' ~/p1|?ե8)VhlXv]: .|5Cez}ޛ;&ORQf䬌JՖJ[MF'EDf4ukƚ^t>cIJf˯5i!=7m{?%SuCԣfы}dՈEU94V:߈$ 73QA_gcӣëRUkG g9.:'-DZ|Q*`F 3|KWSve:1?2G4zeU\XE}}"MCxkє}(lD;W{}1lc =4"6PG_ak}䂘=uhF,5qE Ֆ ƶkn' ]uf/M+KYTG:_t .ҲdV1rrP},dž|-)& z#d@c2Q TL:Zu>t v!лb4# CSn-~*)Ŕe(C^aˢ>h|c2_ "4, Ƴ<5@2vTۡɓCcZ&xc4>c#}+Q'cTY8[oi&њ\#Ѭ[ >EP}_s'UvlZX֊1Ը#.kdul)Cs=S<5jʌ}fo+ ! ^+HCePЉ811%=:Fk| %,XHjo?$Go_Ң^Ӫa xc}Xy)XDt7Q[q֔eeC;}TONV#tI8oaig{爫umXS^&^S34P[ڪ|bP*\ ӚζXD$aU' uQE M7m%CT1eS$4#Mڀnw*1% !㿿77ǾٰHZG#vR>Da`Џ*_ |vMB5}}j!ƅXMjTiKdާsSRs6x|7 2tEk8,[lUF%|XgЬu˰ts>ܝ)(y@YZI)l˩ M.qR_9=;y*֬'zk|Qg=vQTyŘ>~GݟSM;8_Ɛ Do]7EKC;oh +|荲TACZVe#"KgQ+^œ <РV[1Bۜl(i;'%|cSt 46~G#sFrl{Mt_vZNf:zSD,6]>Zd {:Jnb31|7xDuζ٣Y8_mEDcs-b,[f쭥/Z˿s НηqOVIK ;qVUY-e-谕SU/X*OR+M uTrƶ)NCvvzSսDG8hK>ئ՝uDewnUqvҊ݀o#ni5&۔L ȴ9geڞ2ŔuА&F>pLʖ*b p#'IMkQ#& &6`tYbl@uu}ƝpvjXK9ja vmN/쫯oj5gJpTvۜצ1DS|WeR`5]t0jζ atO㇪z?9Yw$n࣭ڌGX|U elu VD: }@<]QnV+|.4RJ^Ctz%wrʃ J+SmDRm5"KPNlw gv;OCEE 9.ČGɪ.1bLlK}}1rb9Z*O̔<[s \9)Qw "ަ C!s|Kg3'$ρYerڌfFbtvu|^7=6\ʺiaM#FjコnqR t fJ{TjCC?X;dM]qvKcٴº|RQ1#/*Dsm*m-2`IgN`&;@E 51Жܖl>gU~* /^?u@@ A JLUNj;@Qq-hW1xΪ] /W`Vv MWypΪ5cRgel]RV,$Z-{Ѯ6W#-DÅ7mE00U.NqE-ip6ԉբ.Y,lbmZ cٟ Dtqmjd{77ۓ{uv%]]e3Κ2 PeОѳ]| ~\eM\6:h"6עspZӻ$ &g9.^TYc#.`wֽq͏0N/|cRYԺIb=X q45q٢pZLܜsʆfSO9Kl4gnk4qVCLO\mIX㶴0ޫ-^ݴƬ9/^KK]&'t^Ctoe|MmM8A5i6NWrNLe<8knB:ă}vOq̼]\⬢)Q(~vNٟ%|\gmQj5@QUC{E %K|+@~Y)EJ[D|DzWvq1+gNbn1j9'[wֆj$&OZrsvD790^6fj[ԨЄ[\Z}S^E5sVP=ڥzf ԞQ۔1y,Zíj+M6[ g(087ThzYl˛x=,V! ͛j׻D ٴh;GF}.N%8kS!P9d2S3ÙƦCg9vu֪z Uq%[:;D8B'3E0ͺ \hkGL_6ضd879eC-fB\C4)tՒYk1GFJt٢KfV}zh[c]J3v}ëAe@{ -*0B.ѻDj@ˇ*yσ%zԗm",K% 3F ՟B,fdjou6=i:v˷5 }L.a|~Zs {_7P?8=/h畘5X?}To`ZqШD8_>/*nMLW>%C,1|+-&Nf& `\p6Mt٢Qݹ|^U3S,XԚ)[Zz-v=;ڣ%ʦҲaƷw>T|ͮ[/yTA{ h SRmp|e3m@WEQlT":{Ti;UhyÖal֤uV|WgX,2jVٰ]:Wٮ|chmj8=Xii\i 56ci.y*j ٭Nkbz_9Qx\gPz LAS:}]͆7+vkkeλu1c] l#4@6"|PNSٕסy˷XMK,mt/æj87&/TVx[ڛz?lPbbM5eg1~;dմx:TYyF΢H]Gɪi~؟D^Vrlqb ڦmcVtMˑIMVXF./Nc9, UPv\X.]NcVs.N)[\iv5ֶl4Cvh:B}RQzEt9PdžB2 E//չ<4ϕ}@wBi: .ϗ*meC:44_ ._9ЊlNcK9ډr S{ө]dL}}r^6sЎ8:; UV%yiw1ցvrvhtDs`"ꠎLw5T,TY-yAQ𝙽I4`**5%,VÜ 1BZˇ#yf^+ΘlF괺?4iۢAV~E6bk5zbB|Mmw?ؚdN΁n٬V ϦVQvPl\6k03ie_'DŗjM9N2w'HH˅\>/,Ca/n3ImWÆB;wP2ݪ|v<>*D {Nh;fj`=,G 'ˎZz}ie|cx97CZ`0ffޭ;{^W-r\_x?qæ m'_?~σ\Յϙtz>'y)$_>h|N󉂷s/;|~N=~w?/mg3o|5C}W?:lkl<^؎Hd-7gu=q|ef6{|ܯs/E?/W LA/|L ү}J{"߽M45f;Y?t"7,qgj~s%1I h쯟2x>ۊ4䭔5p^~:ׯbi?;~'ZmS^ux ̤mD4<-nW5VI㝞& zwz╎b{)#;ma :ڽ<ϠCxhЍt_A<zwz[)S5h+tg9 (A<;!y<t#xAN<:!'I<),&;H:tc;H:Az=H;;H:o y$]o#yl}w{x}Vu)!o/y;}Jy/VRGVRgVRtC+)O)_vW/jʃ=Pփy: :sj{Z,t'vcpAGNAެ*,}1gXSp']Zn|~mAC/&y=ɖtThWzp5Cu'ϷgCh5H 4x6>CB%GgNh;GA/W>o=k!bA<:ZtdqJ :QJ1N1Kl|^ : !N{t>=lzfАGO{s:o|~ɈͶ+oVמY{(zس~GIy>Zc#fg)yyYc?y! yPjIyPgSjIyPjIytcO!}>?AUkʣנC/>AO>Cmhh!yP.|ۥ'_[!_m)w|㥍/~'PVН/3SQ@Cg*BH<߮,#0 M}Fܓ^^Yz[jƹt}c= ha/G])ڏKН>&7tȃ!g|>Glz}ti.qx_:A{1Wc?~KyG/c2c^j)oC wxr>Q3`O"^Wy'_+hx}RGx1OP~?C>=~SI<)?ЁyG)}S(A)h烟j>)x?bOO_S~'TrOT:S-OՠOF?UNT!O=tx~|SW?}>)O^~zS'փ華?Ee=)3OY~zSփ}a=)'փb}wO3>:S=Ok>{G y~K>tF{>t/iv2~?ݲnO"؂t=-v2? ?Oew~*;S/ށx }^ٻ#AbTLyП3A{gʃ 3AbϔTJyY;S/tȃ^)yОO=Ny_;A{?:A{wʃx~ꅶx>{RSR?Q!SC{{jʃԔ)SCzjʃ~}=QI_þOոOհ'S5'jk~=aoOԂװ'S5 T z?UþOհ'S5 T z?UÞOӾ}=#m!y%S<XIy߰oXjVR/<_XjVrR! +)VS]|VS/<zwzw:S{SO২6rx;Y_-OWf͌?߱co[>o36w{[O> stream xڕi @hEQ^@)`ۺ~cg}')(]|''$OvzθY7&>$I*WeutOM90Cci &&o[\ܖMrʖ 1d0>7)괝M*8q>mZ> 3{=_v§ǵ_ \uvzc`'&),2LЕwU 1/[&߶7o{ycY;w J8h(oR'P4w+z# ^稊#B2ݭ`vzAa>ۃj}@b' ̃G9e$:b"!ّ] _P$1(O7 ̕+\oϗh+qݢ*ST6Mϙȹ O(he-<蝌'sd-"K䔌ճ۟Xq)(z/S1f m䟝hIgBtGh-Dmi#aÁ1_՝ E %X]7zBcX 3hG\ x0`yP ?ni` *%k~{22&e ,kd$ {fŢ3Q.8iYLG _*N'M \ĎxM1`Od3$#m V G朑p(1%`dwh!19:mRb3PJ=6䀠S:0P6Zeޣ<4P3=hc=_b{ܟ7lCA ZD2֧)dM]%.b02Wi+BEhl4 v`I BYT5UbCa(M<:ZU/!M(|?{Dd)v$j}VylqN#QO/cDgXpˌ|T cUy*YQH?׈M6Dܠ,J Swzj{T% 6ӌp^Iye\3+6M/0u_[}^wL(ς\$h$%e0Ly3VKY0-_{!ˡiCAc܁Z[Rg;df÷L4&q~p ERVT}7TU&=N-QKqQ:3ژ +\ hvrs+[gHڶqBiclm1LF:E;?MCc{Op^#р_|߅`Hw> ,m6 aI endstream endobj 236 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./cloning3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 268 0 R /BBox [36 36 169 217] /Resources << /ProcSet [ /PDF /Text ] /Font << /R7 269 0 R>> >> /Length 586 /Filter /FlateDecode >> stream xTn1,B gx [A)H!q+"9 ;o쓏|g{rD/ >Dhegr_ :o>^Ha*=d%TrʁCjt8S54X܌/~Oq*}x-GwnΈ@%mvdy޶Tl; r-?]ݚoǽv"GT `Z)Q D͖<k)CjG E[3؁1\NE MoeI/h^wkѓU,1hhIѲ'Ky z( /TqH^A endstream endobj 274 0 obj << /Length 1822 /Filter /FlateDecode >> stream xYY6~_:6-"i( }HARHr7"sRG-gs|f~:ayE|ͼ̟-fA^YhfKuNa8?C?ohydj q B~r 673B<O"1x2_95Jx]7M~(2 6W4휩t*CD̚WgJkh~=Js^WFJ꾴7 <ጜr8ĔZ~J?q-MZhOW#-64քQ'FGfz$p)90tn 2qQHS.?%rhŌhc﶑>mxLW-hl:Z̓nj֝/b?v\b/$ќ9 B`w9~%y#NFVys )Dڊl;q"),ԔD)K֪kjJ8A+6!_?r`z _bЇ"ϡSە"eB'HA]L &~җ"G\kG(}"Lb aH\[;."\*ϝAEwrI[W6e$Yj%BђB \bEbw_9iF&!zIc`Ilm9S2]} vʏܯ$B_TIFJ~rr6#^ũugZFc1rߠxTYkxz# w@0৯^N]9~CH sZ @I&>'б56Sa^0BYr.PGȼȫXUL0a^=2 xxƂ!?I:M 8EB7@Qh#B}(fKpZKYHnǚ.m;rʝP)<8bV2N4VHWFǥHεL$`,bPlHŠ:p;*q TD'yJuVRmz 5S#p4q X(%zkJlicY ʱ+*|:=rmDD9 nϣs_ f05j\ޣsǤR383$)f+LnyNJy[Q4 쓄=LV>Kj#oX䱣[wqsA@퍺,'@Gh. O OQy0QR:bvr#[E9O+|VzYbjTHby.ASPYzk`(A lQo$8]ty LZ(Osj@l˻yXW5=wW ?Ă^ٴL֑yJ8$E_I`!6]*ЦAࠖjb ){U<0Afa33㾛\GNp ZӗnVzV0ebp)Rs|Spw(hVv>}#(oI(M`8!3aJ#3A1G`.6:Mc)1d~o1}O}Pk,~nxQb2dTtS6Bf[l ۑՁ `\~`kZ(SdUv`>˳= endstream endobj 278 0 obj << /Length 2621 /Filter /FlateDecode >> stream xn aA&qD@ZdSTEaK lQ ^Vnf_zN36oj=k.krvjϫyךJk$t7?6`ZU|Q6{EY)d0*O4Y:<7M lx=gUZŔPEot suLvX3%|t t x펯;>։kALCs늕Ul ïjU,Ue2E9E^g_&eu,,Or]ӴAp5gbYʭ |p ,=h-hU5ռ)ܦhL= OPU1L|%`#F1ԓT]$ή9vGrt ,M`Dm`Kpnx[ <,lf_0mµ;'"Y)o !G(AQeWw,in=5"@GQT%w/Cؒz5md^M6kTL&0ځ/;67<}DлzGN15Z-IuK9xe==¬p1Q""G䯊/lU,8ت:ucBBySMQ\YZi '-&Y5PǽU9}H!6"PK23RXR$% A bp醤RL3αtb 5әTelHwflPd#K 08>H,+1oipŅi`3d$J+S:/﵇='z=?u?HG~9^'Udsaf¯0VW bQdx5*&(?2E' fj%8!}aSWXu`@&x/ ƄCgoЌ{G14CM˓Cr("ӔKlFUZ'lrZhmi{P)uGE“ eZ%!RIoTnQؖ#U҈r͓/ \Z(6kyRKMMS(NGEgu4\w&xSBƎT6ŠqnNi!E/r%FA';D17 *|>0F_ io@MQj ˌ0%QR)Iu$& Wc8gb9Ef] mOۃTu $r'am0 ՋUxe!ϴV)ZjZĒ@¹i aKՖZ^d('eYRƍk48{qBNHL3M'%\oC6,#sF,WM*d[  uvL-7Iy@\+ ;$ƎFSႇžoF.EBȏL]ECyt;czkqh(ڊwġ;P8K8P)>ݘJ$ZJ6^GuZ}}Naϋ`mv_ (iǠ ߾j'QS-S4n]3Jh]浉ؑі5wIIqDĝ>x˜D8 _\/`WH[9ZHL /ZFIuB !>V{jlAKAqy6Mp4D}b]NgQk(ݗU۹0+l|nIjH\`ʆ|ˢV~]ϣoP䤩$?U<=T2tv'm]9:I[']X'RK @S BpLk6 z";{.>jA:zUĘjJ/'ZYSk.lکUE>0B2bʙ2N(2ύ6c*.ZmMZI jĚ/|-H`i{X9c)oB Ӈe "GZ;Fd.-^zڵ2` C8i3ɛ*}CchٖJԞ6M"`A J36}KUGy>AڠI< "[ @[zM& O8#z8[R6Z^,o\c1G,dT w|)bJ5E}q<.$$'IGr?]M endstream endobj 285 0 obj << /Length 2490 /Filter /FlateDecode >> stream xڵ]ݿB8Ak?@[I{aOڻS-i/}N^DY:A\r8oI>?n^~[gu^D:u5)MLn_~&a6WJNmkW4s`ߺM?d9mޭnͿ^&:Ym%ș: W!\k1+UEA;6W@mokrۇ)s2hzuH:<4 H` ~-]1z\p;4*525*1׈18-Prm deBU&& VtZR?ˎYdGv l v=f2-3en}+K:̲f;m4iLW>XkZI̦ ZU]?"dyA]O'6XG֦d`}A 10ü!5g$`ma6-=:YQVg->'[vU.%iU@„7 |T +P?d͖ W ;yA==gO>XZ)@܂w[6V̀Q0ll b8 Z$i"I AՏ[qßEpEeI?~b nTaŒ2SO(2# D6!lL1mۑflt7eN֪t6F:iAx[ Ke+M4ۥ8|n 6õOOIWpM$ o6`" X4ڞxEE0xڍл/S3tR ̕F[S+itL5]"+G30{BOs4F,D(b#zcEƐwi\IEάsR. ]bT9ѭ?qW ' Ipd) U*&iy|L!+\40v[& `cq=R*@ŕJ8-ZG 068ђGp0Fk[/Uw0`(́',n4#lJ\ _ &~ tQ-`'Gw[֨})j2=h tN|:6`eS0?U  X;i)$8Dmqk/lª qL3qc'If mN;=9mAPF@:+#S{]1|hnIs X#p>Db+B81)yVuX,̴.>~:n5Cm UgW>PP[RzmҔ=i Τϓ쩕OG,Cv BH` >=װ玄J[uQbxZ}N\`TMeQw9=z'ڲyKq*iAKDuV*E{52u9 Ǝ6BS/z_p>VL_cG &ՠq;h]c|c3M̗p}dR#O|ն+ڞ u7 mez x%㮏s.7nL00ǙK,z!n=ElK c)n01>^M#R;|htNqIG tS`1{/CEjmWczϋ |=F/U2`OirΉ| 춒]|>Ɵ}, sѭ<3eSP*-xxؙD9!3(ϤGBO1u>'UG|> stream xڕZK۸WIY4*v9-=69pޕD=;?~ E5F϶x޼7QWfvfVdET%~5mnʻʆ1Q\U@&̼m> W 2[i2{`fIS?Of?r^/l1.v}HdAfZl.?6O?m}<-.*qEE[;[$YT9 ?HJd'0M}fyͿO>9wpmr] fWkP@m+ Ezź}WHOoV ,x ?`%5ub1IŭyipةN;B' R|R=GN{>Mڟ(aV5XoXb%lJBO"'URrq FVeI#ZRp^}ફ'`B6 d{zgr0Ґ6vLC9'mے]i/Fʇ$UK?+Cgi@-<HۀM]s+q(}\ޏ<]n|+jސ'''e #vD䁱4ν}7b<G#)z}Z)d؊ K~C+NuȂoQEK:-0 TߨLİѴ+ 5t7' s̥.cv<ͱg۱9 a07'I/f-fP7Z!`X4b( uz,ZQFD_sx]MY:3AcI4u"VI>_0N- fo# i޾[|HWR +I<7DVnF0H~08!t%'R3U x%}hcMi'$$F~j~C eeg(K^SZĝGxp2Y9z#\NPӮ]l !NI4KN.LHѱ Yv-Ncd{\vΪ>كT?x$X<%lNvo:Ir$zQ^VwvD0H!pyTT6L`AA#PRr?h -#_V/ӿɔ<* u^jb3<W) Ā%uE%rdvS)M^BQ 6ˆ f; 4/.j 7M֊́[%GiPل$t }qQ  09A/2E4)H]Kғ)Q^ԅ'qgŨR?eњcŏВ镳NH8C@I^k#)93aEI6uz1:ԈT9}ﹲPUxwk,ŷU\X<,U Dhئ (rVKdBN)TpV*$RDScA;R%G>~a8z\piC*rCƕIC*gBu',tI\UNq֝Aux=ϋH? T_AJ.t !9#Y_A[.Faݨd|]FU֧H N)\8Aۺ@t:mW^ p6Nia?Wuw 39|6\l (U^eR5 _`^-v.\*mԑ&!%d5W˭=0 44;Rf' CZ֔߻Բi;Y{VMDWTp֠e h ES` H(7O_)tFE\N)& 0~YQfU;RK9ɻyFJXֵpQ[w G&QeW,qE$z! 'F#g bj tϏ'Z_e>,Փ_5AR9&n b5?s"tr$hjsIYeEaf#=ͫC*}˪ I"q}ʛN'̢'X,"St'RH|3 Z>J-3%=4T~\ӈ(~y#j_-B,!U7<8Q0Q m45?D}x?ŭXa-*>Hd4*8~糲1-r/p~r" endstream endobj 178 0 obj << /Type /ObjStm /N 100 /First 876 /Length 2027 /Filter /FlateDecode >> stream xZmo7_1%g赁"oْ]Ϭx%ٲ8Lr9yᐴNecP֐hLR"BbG(I9[ʘ<)h-9^$eVxx6'`^b̖㈩2Fh88pNfkV,eLςMx &9gF^h-*`T,,3 dEftA9 D r ^ ~B"!\l>0| 9+Ulf VK@&:ubM %VS0٘IT A[Q 0XfrP8Z.eT62(cz5({_s9(L'u9+^˲gj\f<|=]]|k s? iw5k8*~/JV FÓd vXK's,HzsfS3XV x&zق[`σ.{$"Żt5;;WU{N8s dBu±=J^ALΏ!uZ:㝶N RcDDD A~n?'rd>o7hmT5HC)NI^ ;mTAU/Fԧ˪ ЉtY5,UF!k.d=A_zMFe^')ʢt6Ap"M,@o+#>š">?gG4K< j0Q?:]^ 'U9ˏY%3O&dMfK&1u_`&; у$ ɂ;xr7rXa]g/Gײ\7O][\xT>iv33%9Y5O'[(qx'}Vea]_Z8PQ+ Vi"CԗPNw\GcG5W/-gWEɋ_SeZFe}d8:Y0†o JuSrl endstream endobj 312 0 obj << /Length 3147 /Filter /FlateDecode >> stream xZ[s~^Rĉdk$9th"Kz_- ʴo}=]w2W{g޼ @+=8Sܕ~pv1{vXuXG֚ghO63]枳9<!8"B}b3OojY2B ^岻7o]1NY R/`d*CN,qugv#]UKy\gϦki8r>@57&q(Д٧H>w9W806 F|ϔ(S_/q{)nfм^<|'o\Blbiّ1^UZk"s*M MŒ eM R(3\qt몗#tŃCy7) U=^ ꡇ}# HGU b4bcy-)[fcrjTU4ߤUʌ~&92y/>{;eaXh12%Jd'u/ ${-bpVWNѶlVY1ȿ1naiȆ)b<*`bZG̚mpLN{P[&m#\|CUeރmԽ_(trfC2ىr1ᕪl#qZR"9=DEMЅ6\| ZgOؕX2XKa(:0.a\\wɥO3a&(Qا*s̥}%c ݻ`KB<>,Aר1 #tӭ3EE>oAX:qV?k@Pt9mh'k [u "uvl#;\t$Ax5am\ pexЕ7PT);2 0AР]/Z:h5>$=Q@CuAIj )'^vۃɁ[exQhi'\s49Pkn'_ h %} Eh,?ߴ-aY|JE0}kfi|#ZKyzuaBAX_neܡRlA'z%ֵe:x|Ok;ó=)Bj>Qތ^?}(!XeF@19h ۲L[yim8XTF>̈́3wDzd;cVƥy2 +gm)!"Tj rɽgH[f : E ?񇶌HHث'Ȟvv:i=D=^$ଓ'O,&)wlzۑݳaW}ExL?/M+ͩ=12襥Tdi"y6i\غI?Yeě%Ƣh m,K" %\AZo~%u#\톤vXIןi\<'J_LNb,GmVۃjA2rMn3BU̫bY4O`;%D_]"\5_IȜN&QX*V~ruMq]p !mO2qdJ 2T|2@Ķ؈w҄o,*^urUDTԮMhHqpb=k-%DϞUH lʵţB8//Vg1)=d?'׶onmvU3=n|Gw ֬~t~p5bhMw=V ՗mNTcGg*x3bhdB}-cA1L)]GH@t& GbrxT0l*Udoۘ7;Uv6KvO|;kB,`i䀵9>'*Уx/3Z[u쏭ˁj;xg,y'+׳9FΒ - BXJ#ͣPSz*$d,`p QzթDL|6=1fȽEa O|BI煁"{41#'ڛ8NE_Bҵ7/)IzQUs>Gxq35D4qٖo_YZ9^:Č]$U2N||حo<}[B=) Ҙ!v{@jdp wE)!7::cVct$g}V㵪tAS)oWMwXKc*0ƐħO>c)j*VMP=YuS e8|hm/䩔kX =T/$xoJqp?/ endstream endobj 326 0 obj << /Length 2853 /Filter /FlateDecode >> stream xڵZY~6yMv\ X8:q.8DidK,)2lgF 0Fl6jNj"^޼d$VU\%LEVdH݇JOG%I⪂Eh2~N񄼚NЕʴr&zҩ72SIϡŠnOK]Fz2ˣz,WƘhѧ_N+G2ҏv[{x"wbʤF:Vy\Ldj,YaYZ~M4,H|]y͆"=f4絪 䋕)Uf4Ӑ(oUZUC}by†Ύg䝈H'i , wk"[O?-~h tz%[s縑g$Y$2Y Xav9K_|&QtdBRZeDMЬ/ N{t2nY`82X^^nQCed{D wEEOGqEqT&{뢊{Ϊp'[z'YOvՉ#X+$p ZYSo-_I!FXD s[5>Nr3\ŷ#N.:Md* 5yᑛL%R=$>CCer!uLy^T\i?ʦg.5ʹ5RIٳ 9O,#%g\:qͥYʻ Q [4ֵhjzOKvI~&!s=A\<[gAڲɷS2b&GDf謹SwC!XnGrGɏ^9!^\QyiRsE'[/iֱ_MҞ(v= 1R'Vn>SMDsĞZs -e 8ym~iݑj4*gK=-N, :"ʌZJ9-~zdpfL/`K'mN|҅^ xync2{zqkA.@7e YoU-Yq,qS!3vV3.T^0Ӎ>`Sz4xёx\zw,@y- eC73L#& Ƌ"K܎09%[qQs<];83*/ѐ٪O :p7,hAֵh>X ,)fb\%T{^%XǴg{cUfXweI92aT :򖻡ՐTr`fwN.PNp~Gd= {Ddx>6^Ļ2^*2 =Mb v;g?*̱}~e] endstream endobj 335 0 obj << /Length 1741 /Filter /FlateDecode >> stream xXK60l f$ԣmPhR -AeS嵼΋%˛mKg VhُobGx4[.TdQf3U$v4[ޏWxn&$ߠ]j^zE)Lt6`>]&~}& AFHtt45:SGĪe#O ;' IcTtǝzbqcWo{d4JM\E!H3X4H0qGl1>UY@̥sYU7b,@:kshKhDH%׃ ,(b< XNe( 3D(y|zq²ƪHDYS<w<iƱC5<epHժǁdlQ[S͒l'/*t:&+j.n c6'6#ljAsU#++H7FfUfZ~ ّ_W$yg# q8s^*)X#/zPwNpN #cB$Ŷ&N%cLaRf+F'}"R ʽW Tڈ 2TEMMbǿׇVmwܩ#AfEWDn0p_@ d%}*zAzl99ĂGpwoD.>:vn/t`^[?%5Tb`$L8&Q[^O Ȏ8r"+UgFHVMq3E$4 }:d=J[I4/s".\%W>D{'7qV7,InaW<+)qNa%jy,!dcX m f+Z`đa.% k91v{C39Ǜ_6)#\K݃m! PeW+NnC(m}v k,Ӱ`UTjૌJ(IƕtDvm,H = W/QL(`X/}r9}a&t`Y{_P@*u;X61, UelgMn'^Z*\;\rT:[ѝRkp; |?wD7UnhZe:")tH; G aNXH gHwOK'vˮx>OH@_HqOd\<+LL c~e ^9paөBGIp'ѝ9 ;HD-a0YODWGh/Y`=o6H+0k_sbim77< J Խͧow3:8yreK%0ljN0XmH`ޫ(̹:4UnθVOϹ VڊsndTN zݠtv EMpWyXBO7M%K 1FWCJJkp"G$mYsaem@9Tj vc> stream xUQo0~ϯ@kI(% mM]w`Riwg`^1}6qqFS˖^ʽD&T"})8)$9ihvC BQ):?\: %M¨~#a}|ዄ|eL0 RiXy_Zn"&kz+u tzЕ)D BI8~ EH]`LCC*9F}fau?ØzXa_kt5OebXA$äC> stream xUN0ol)kKu0q j.~r˽pkRx)Noqsr t׽%J!݆4bd5\ݣ{6OwX7i),!wC_ ("bjڂ\ :pexeSyȵbfynF~YE*ʓ/9b= endstream endobj 349 0 obj << /Length 3500 /Filter /FlateDecode >> stream xڭ[Ks#P|Lq%;r*d0KRmTHjx14_݀oy=Wc}+ǯfyL_o}/Vs=tBl?l /_="6z} ]fVVgpiLkfZ̆\J9Eavx-f?@Osaf(?v5|msÿ邺޾׮c-ATL3oj[O wЃdZJ$E=ys>|1|s=BL|b1N#JSB Q^"7v6{r=7֒hYf[`GAƭW}, /W4XuSځ$_|,32Yπ-nwULdYa^5SŦ~ “Vad\ʙn '%WZ~ù/~8|^EQ ̽0LwX,\qjYxrjmjkli1 5w8W/~T+z& N{bVRۦxyuz B',9j΂6o .+uN/ⷙSѳ:XUxVp5E!;B)DL$l≄fT=<)2#|؀rA\Ô3T q~x~*F]'Ǔ%2mC(Ik sIkv)y7z\|8*.x1ӐŋsՋi&x) Uz)<֐"Ї10+Xy`lh26=2Xa`'GFL˓)-G k <ÍȾ^aIs @_lS S"R]b'i+؇=me%Hd U>y.jԵt~ -EW6F) /DޯOa^1vpRL AlodeHv>b$ke(U ] 'uYNNnie x{@z`\2&8f ghf٨ϣHVMQ$4a3~ !l\bl{J ėv Rt غI=e/.K1`T/#u㣉p M˰dxiIZMd6VUe =6R#6wI3C+>BW: =|{&ǦW`t*ދMRC!A0I5"y 8#~+k ӿ{.] gHhtsDmSД:+/ ް f HQ5:x6UE[")Pa!(Hܷe_X:4 "L֚xҐO8(nS,#m:byt[0Ov78jz: L!LK;[+. /88Lu&-\%}yvsBg->4.º gSG "eY?4\=?k0LjV0GT\ R9Y4gYη-^ŷn35hJPW;>.ʴ{T, pz_ S(BV 3^R _cG1  V+t !SdDt$+>ڜ]2U!Lv2;Y!D3HSeN\ sݨ!ln=+PYt1]7(*;խ -6jzP(^K IDK5)Җq#k{~`r5eG͵XIʄ-d_:'&41O3y8qdPm ^Wzln7$E6ϝocX󀍼$T~?[O%qW{$FGd ԔS $Z.}A۸!/)9@8Yv8;HB13/-d/YtpGTfD'@[,_ui#bdR7,:.A<{e(羒ech$׽UL7%;߮)u{q?g9@KमWǫ:ZjǔUmw1z_ jgT4:'ʼnI@]C0rA*'5.zdRu߹S0XΪZB2:AMۇTMTį8{ΡCUt+ [<<7E&!QM`Y pg ڸ*NPts2JU yo8U!l;^bBk&nI$Roq'Ubr-'Rm*\Qh}tY _ه̃?{{ş2W-;"|MN2/?]`N!TQXU;R:~qRr{屡x1YP(œZE4Pe<6 j4 mwͶ}}a9љ6+sW|A ԗK0yvuE$wzYbʧ23ٳ.?7=_96*+1Jʔ:qLCj&#||fc\\PԬʌҧ7AsbĶiKoƹ ҙz2d^]AN9?ki(4}UE45U B!(w~d̢" Q|9v< vemmLQF?Qмqa A]8iom6}4HA%4hfъFtгC!t;}4>OGe3"Bk]6SAh aECLpKH<% l'Taq/V|2e8[씧pR}+&$mᳲ{m 3$oFkY)5~wz!hQ¯aKl8>줙}Qlo ?M} s%oi恱UeeJ؞ǕO7ݼ? endstream endobj 355 0 obj << /Length 355 /Filter /FlateDecode >> stream xڕRKO@+$]؞|hzPF)jzgئ,7=XL貊y+V0Yr o,Gvc4}e5jo][.9_A A>~nR2mIRYΔ@dbpnrȰpBvSd%*Nel3P@BwuЂz=ڮ0o> stream xڍTZ6Lw C 34t 2  3tHHJHHHwtHJ7"% Yk<{?{yYʨ-m* . @VM<@ +ˌǪur!b :A.w69O  ~HH $,@Nb9PA"xHO'6Y! QQai{ F.6P!`8@ A]<]Aݝl̃txpP'7%WÀg`{xX:60?vm; 3a(.a umVV;@Ȫ\_``iFx+ PWPqp`3.wߕ Қ] q988ZH{{(W}r0'(=yܬ XVtuE]rQLxYC]@ PX:_u<wx9 VwM@}`Vл7 m/|w 02BDT{wL/5 yZ("7 !w_gS,7oA po7o ="܉nԐwc_> Svߍ4!œ`PK Vuj a7`A;AvA[# H_'(;9= @wh -a/rk`tu¢^_H/j@wEyBw2`x(.::9ݍoݵB=I$qme`y4;ГqUG^NͮD>,:J-˳H0xm7Tc|l~5ڈuk8w[3=.Ԛzj kF6ٹ{GفU͵BOǸ#u#L &X,ҾP1appxOf 2pDy}㋺bTϹڈt`F Wa~ⓩt7=3_Q3Ԡr ,~BҚIqA1Tx*Zŕ1>O^0kZr6=hm%P>&}H?a&7'nu9Os%r3xcE,L]֜[QmG9@TU׽mR>TsuGK~6zU sƋyM_ O"^̛%t#yFu{B~}wzE6\b@硭%B-@Hp>?2rU6$lIʙ;癜X)41j\QԳ" o>LvQ<(\a[,o }JɉƠE"h]Y6B!4W}*V>hMV )r$oB 6ه f}E r2#(inS6^; rH xoEE {Vl|qh^= L0c=NP#;7qDOX\׻Q̆<%*x96#cE qX̥:JuaDR`4˰͇k`L$6kFEujϽp<BSؔ/7$$m+Ch@PX]KؗuOxD^[U"גΞY[{RbaTnfL%_TbwpyL! drΛ;y.GqQ֮-3]g sZ= ڋTEw+Pv{͹N9&g_93l(nLz1b%z}=u[hK5vA-d>sc pAˍI~K,spצHh*Şkay1hC4ml?]t4͛\`v[rEg8^iy?6U ݆7וȢYAvV%`QZzp4:6)Rg4{L@O$Y#@JMuR(I>NQG RI؋\{)aŎ< OhWyWyRvi8OUGD1frKymNn Clọb29U/k!ƀX*`r\W65]Jq"c d;f[Oj48ދ!##cj)0||pUAƯf_˴IpX"p,ࠏqd*IT[Vz>;!tnf1s8<BFUP 1Z:+'SZtHst.|SW; C&}[cE)(d:d|޽W?װof tnKT%tX/7moܨ' i7vﰖj}!ȋn(p"Vt+z°H哉aE;?0Mi$GX ʔҽ=aOD߅~ 2MtPFK³-瘝-:R^,!t:g6E?c4q7eK9:ݦӰk7,I$RdOIX6&@+<%g3"Xc>[xgKEpU ,Pj 4ќl!=3Y=-WeOQJbGEyf{J7.g0)ߵ̨Et2l|WPwm 'x9Jtt,SYP&W+ӂϣ&,4g$Cr)~0k2{& bf_BA|L>H|hxZrK2Sje_wx˔ikTD:/*EOGO5[bg/ʩmsu5:sϺ=@63!]w-ysy瞟 u3۲Ne^O@&,E,\Qu'"G~ nf{\zX|#G9`T,8'؞W6pO HQQɫ{.4( {B \oA:?ӭXb.NB{P+[.+=ɰ#hc186pG$ E?fAМ(YE<Q9C`c,Y%ڌ™A?FΝm[Er%d'jT?R,?B@ؒR_bwTO dXw Y~2x;mem\]8ۚlRDQbqk?"#WhW)%汹UbA.f! >!%h#l0LG1Y*̯ )8sŇ7+=[E(?WfWKWӎ~I#$'ZhNrIvwP[sݳx]%K8DL+d>DV) 8߳O1VHfX҃uQ=d &GdžӼ2l ӳMU"k%|4u=q^=sL`WͅzR}5F;NFmbFX+rg0ex܏Gm]l]ҩ"~8uf|L-?tɚzwxqUBm}K}?/uе?8\yKyq9iWNr$|z&sGeԤRᚪ I7 g'Ftٮp6q8<x(Q7 2er唊V.b,@?joI;6%%ARL1V}?soI&uPnӸp΍֩a3Y@A~>S8|WtZ/b(#̃⾬C~*j|=DUe#pI ial/*!GZO$\)K㉐L6k'{oP(>}MO`\,C':Cmr ^i˂G y p;pDjRaa^y~eHʱGg z>(I^ [Vo3M:S3cǶǝ#(j`͎A[nw%L2ej:=A:gK:݉d,&d5nV ϵ@bE 7ԅqE53)!vulXHUwUj9}2Ԟy7T،'$]IַItȓfyؗ-iR4'?d?jU9eOɟ6X)!,ZyJbv+1^D.ٚ~s|uNҡdjl ot5^a>Vw_܄iL? GHd w=ԣ}S9b)Ν)G V})bv4kjI+rnπɔ^~WBRfv\vHčb9r5.ϣ:k+w~J*BVdYZ*츄Brt 9e@L4v{O'«5(q;L8B̪=Ǯ=( +ꘞWY`;-X4ϊ/lTeQ6YiJ8 ćj1+(TBh zjEw =mPoZ:>y1*WS}ڨ# ykg] T 8mQ.U-7[ 6U Ɏ Z' {~9q$oY;`©m]+c؃vwj)V#1&S*p:8@za׀s!?;=K PHtI3St,,ʙ㢹я'Zʊ5diXo7*`' ،:\,{2AvcWjJ%y4*+^SiZoNr 8) -) LǯXZw@)t-O{eI͘ zMܓLDGk}Kz<>^53A3c(-c&d5ِ12-!E]}$qڏ/20^ Dx.vZGN!4k0ZЁO!aJo3J1vGXNIm&D+,/T+y<:&2ݏVUg2jBt|Bb.tXm(1>|.`< }c5 me8;dT6 2^& Q"b7"u6nHV qxq;2Aq$UVb4QtS8gpl) p" )zxyڪ6E)ӵI%`CdFO(/>oeJ$[_rϨ|P|g۷*ʣA#;C) 2>SN3fZ9(3Pi4z`zq黪LOKX澦3$a|b嗼ҩc,O c%cYOJwzE<w'hU0_>J"38 vVN|ߎApd1J6+¢mu1ueAY)A¶هq1n C +xԿnU5&ɯ(xPW\55CWYSUNcA0n)0W*v>G'8|YFR}FµzLL޺;(zC Z#a7.=K(Q%;;'F~_<,Dsucm|zތOB&aLI2UX(Q,nIE6=]8wHDյ?eػ5˂gL ڨ^It,!CNGWw7Ƀ[HLgI!焼GJY~u&-=ǯKi9ݓnJRb5aݷh>Cm%_VT_Q:/4s]Z4" <7|[U ޮ-@j I.zhv}zeޒ~k樵NkAG FjrI"[yV'kPGoS=C3fDȃJlmD Q-m7Zյd_]Ƌ ;mZ 2SVO92=#f ܩ)NqaSsQ| ̙Q2[w`( PbpuJ/=9Q:b]T:u NF[rm0ډ-I'"jI%UJŚ:O'H:^S;'~bhvbn+cmZ[}ӄVZtO$x_:*.^uUc|ϵ5%1Դ8 endstream endobj 382 0 obj << /Length1 1669 /Length2 11355 /Length3 0 /Length 12437 /Filter /FlateDecode >> stream xڍT-@ Cp@54Mp ܂%HNp ydfkXvծSvF:-]Hip8y10' ;"/=䁰'rsxEC@EW`'@r`zCv:0[xDD8`k @9?U:t!`R0`\\@gwNN t@ + wM381z`?[' < Tx r'x8yNWD`?gW7` v^(s¼`o"|;P:?wk(v#4O׬b#qv1~O Y?ݻ7_utxق]llaʥvy2acBem+'oSWS -;z}o[V ; ?ٟ ?`/ xܿ2{R #2zivB^n ?@h_*.ȟ}_`kAXK\r p[???H? v\h@v?WWd>id\F" dY)? ҂?-n=m?\ .[4a  x< 8] Ss[D\2M"!HzbD0$_p >U >%v||9˿SfߐT /T_P> ft5k(!cIǫy1!bu23,KO8),ٯס?dRzVi|ZQ[-tv0'I'dѩ8 [;U@ Z!I+: d`= `zNۀXdT0TfCy`M4aMu|O&uܙVGN W%pJI9 ò 1!b__%?9J`Φ_D{1IהּN=|k?dTGtE2g!= }Kj:eW%V#<=GN`8}kctLG5'3BjEH'Z9l&35brJ*;xG$Wr A£X>9Ük48ϟt?8G S`5 Thuojet9b ;5sC0Y;ptE!X-PK,%SA.SrcS3<` M]b aq R!'Z[A|sCE"J mn_9F >r*PTvr5cP%?C+WYꘗ-!yNF8 `vb**b=!6S̎YRm _I1TRijbke)Ty^Ǘ:,webIs{ӓz6"ha&qgv 67ờ/f}< _#4I#24[SawHP@?ҏ Y;jq;bSb/lؒ;>u8ʡiπXa"쿹D?1dp3{ jA#.G?MtT~TX[oR0p%65D\mIVޛ(kU >8gЫ.ȪţGA{ƩA{OW5v` VaSyD3eH9.ZSUIA'YOf/Y摠KWO[%7,{P6C1Zk"d}MÈDVkCn)&Tݛxyոȹ141[9.׆ \])5܂^_vb UIşb$knNW]DFy2n9%"W} קSǾ)e|AzVHK,y3yxU✩{Hzs ^0- B)+Jg?u R~_ ?q.,9VfKOvo0[Mny(&[C 3mEP>}mn"tN<tFHJvJJ&92s{O+'ˋcRE3pEP ޅjVb%h>/"dnV% ȁ~³v4 Wֳ%]A1`ڸ\Kdi g&ب^ToÌMї4 `8X#lq z&s*!1q `ub.a?\GwY9J8he{>CScL5b5n#=ezZsٳ*.h^k>#n6]uƱ]GUF0 mќ.n'ϱ5U ®8OݾO( jg}VGS]\<0)4yK#%FqhH mHBk K[|YŦc֧ j|W޶<oYk|RXld2"qT*6">%DCUSR(K!:hȃ=3I~7I=";uf!l|3* Pps[J7휒kދam*"4k.;-ų"ݡZj]*a!McXGܪS$@: Vh4~o|Rx9QG?c6JA1z[܍&k*V Svlv_TLSEiK6LT{F?DܩsqN⾲вk1{7>'8ݛ*Q;|7!&G1:x -fZȋ=dlDtdBs.O P8`GLOvp=)$]]bNe;;}`c,idJHȽ›s+=Z|7 Mk6r&JϸK`#&\L"827o^U ԪQ#RxGszM/1/K_2U٥ QbtmKQQSwsS `Yr~*E ƍ]V$gR=g19T x&&8(%+kys,GWm 2PW8fW=qo_u8@ͰuVnއ,35vn-:*y嚄rpr'XR"`0@Z+S[>Yh\ (:@~cxHz&ŁE2 6x?ĚWN3E^}d,*pJG\ytrA_xݟZCiƅY`@xt"]ޜ׌)"Bg|ޚtG!H:VyM \`Aտgiϩ[q7e2@kCf<ⶹ %sg{Ux_~/ Em-q>g,wv2:`6K-"*y:㕎95yʡi̻Fdo8si'ZI"UzSFhu>ZoVRm36+۬06vԍTcr Sz _̺}a9Yб<-k&p#-un>Bҋ )*@4#T;ê F~3N].t8(u)ZLLzs8> !B5Pq{wbBsa5;oV;޲eC]8a0ٺ;tj/#~HP4f\׏UM2U-!6]ΐ6f@ھ+tx݌)ve,[nGtfmі94(ׇn,;Uo/jEo{ D jy&LX Ud{}XijlZh>ׯo,=?`=?M0yu>XZV{DO&D7,I@I]8xmw\=>mm]SkىeHDp[AjHTŷђ 87U_P])H1*t̖.DhsvY %p -s)e׃0 ^7^z5\ZYn˄#Ѫ.Zxpa@Wa<:z˖^@Z&pʍތGwXT!ҰܵO>_"ZE"LA)ae趒g}άIåW+:zeuJ%j,))g=Go_슜62-yc7'#'}wdTӴu\ld{g|"?fW*z\ֺ(ZH[8ϖn{Ip7垐*{ !^Ƴ:^M"""M"uWᘿ?X_Dgݾ$<<^:gVEЪPV^3g0&ZU+&vM2l& Z>{5d\7S \g$LF0Ofhq:׃۹{ 9 #;&>7f.%"낗AtF\4KWFsl.|d\.nq("g660YPE|ȉihn>pMƗwcO`^5tGsNTtzx׌+'Fl&/ރ{ kXD'qV[c>\r6Wǖ:Ll owJT:4u*ش:/J Vf"O3٤4.IcWNm^-M~حRu俞?hڈ0NnWj2 ObdX)tj)8{lR|'WA.,2o #6{) &wA+۶VTz0:{YbbC\ƭ&GА&Erܒ\ f\QQK/ogy w(HkQv_W^[)kTMӜCֲ0qpV.v%V^!\qVxf9o?$ק>SjJǃ1P% gY~xNiMP8W#]k6e cdظ꘦ $'xATjU敷V(&myK(PRܡJ}G^mj+h|cSZ_,9m{BKÉWYˤ!}ց&]zzhInP>raKu3J"w;_1j1zAq%-E>!dO'qr@J(aq]ٷ8jMQ@/M >oBB7XDDʩ@nQӗΈc}`V7 ;GUܢ 㘜9㾩v~7n9$>YTh8KκXath}ȘP'$>ͯ:Tne*F}ŷ6aY6~ qB~rX8jwP8TIqCёʻRQ~ž ˧ZOIh2}TzWY j [12Cw bfUڤe L[Hg۰} z>_9e˱zŇ zbaq+&˕J۷<'PʩMF6j~zY:Pb'5}{f%˳$BxJڴ1蘩[WQ2|u3X~͉ZbP+Ue|EGPu_* v!1'QwFΜ(JD~G]^Bg/N'9*SSMl}kcԆ,PTQp~+4>a HdcOWS5k^d۵7/ Hor^zFf,LDKl,)9 lsimQN~zu룅پ5F28r R"1o5"Jy,-f4GH1S"oW3K u0:>?cZVXBG"GRD=qQ5K\T|I(RҪ5zwpe 2Jݷt2M`Z`3u@|نt\!i[f^>"aiFiC&W?FnL'τqC.{ڽKXzJ$hJ;VW{`}8HysҚ ZeK6 I#L}͍TVUPŘ5+jԂCqޮ0*g|D*箜!9Iue9bb-[po_ޣ|Ng[AyJ) tKR%p1 &2Fyow͘7އXe,1RBkx/s4<*9P#Bre9f`\-.ezn/~ͭ^R,jo`UduΦ~F0N ?jNr%GzG53LZG:X=gc&l6bB،P] m;=uבnʺ{*6lvFbZY!щH FgT5x}EnK{zxJBzAkeU}SV#a]~t0vE$g5^J@έnü0ƨ#e(l>=t/nMak"Sr>"档f2%լL+w> R=SVUpK=RCg?(J"@t/VXҧ#;ip(.hrBx[9gOC6#U‡vϻSE7;.vM hۇBxz^SھԏbkAXg8Djw|8cM 2)7yw>f!X`3c$I~H%s|^*Yr%E/~(Ўm[Tzܻ=1}],QX+1 ^\ /s"T~ʜRn,©q8"@;Zr* UQ+nWF*NVSёdg$)4e"t1?l8%뢘9N1nF|$({Lj޼PqVuY䯟)6eGx3ދ9:ϺjұS yu墔ز}w_#ǣEYTuvw[دh %Ahbh;9sņ=ˑ4{p5_(1Nן&AYΜCPqk$&,{+,˗+h_V /֩Eɖ T񇦴Py$u-p[B8r0g\>VAzˈ ٸ՞4(+L #XBW5_<$V5N* "#t"zh_[ [R ј ̬2P0gDPQ3"NQFP;|=<~:hu+tᖀS))buɰ&(ϕ"@ Xw]P}fkKІ ò8reYWߤ[S.{ޘ{ξpst>2c?;`6Ȥ%[sˠ@r- -H!58D -f5L* llG>`1uQV430o&%f(s4̃$;5)qBCR^a4.fiw{fYf|lwʯxmy`BK~F[ C6jef D~uO!|PȯDLvBuJ&ݩ.6Wϴ <&΃o愜KZz)'g14zJӞSBGPG4N› ͟;a'խ0_IK)(eZ ף87 r'pRˢ>7>6x<4rKR6ݭ2+:]D=kS;7y6d}Oz! w.=5 >*D#feL)δQ2jW]0 4ݩ;X3W_v8<`ͰX!['h1b@ݜsR |"ևd4?a=(Ǣr?3w?51+ /xfELXN2t~TKo"F.ZlFAX^~5^Cīo2qTzc00a'[&^D&cVj(b2?'YwĨٽx?~d &ut-sፄf8~~N̙.TQt^aUaZBd͛t!B Q Ȥ![YڂJoX ̪i}x/sAfˎ7ݙ䫙ٿ1T7D\6G-rr\ p>P(~vʌ|A5ɽɟQmY) ߱7NN6Ewu pBwlž+ut]AQObYj?߬W hpM NjCQ#/?6J c$mܒr'lsJ!l~pŤk` cA2~ to{^ Ŗj3('5n4QIuT^dq LeoaP(Z3P3Y0 {9y,0r~Id^*yS"m< (J4M̪e݂At. F0\2:-޻o_Ey #|4}qU RK*Tk뭼Fַ Jjjpa.joRJh]=©^^.˗RmI,Fۏl{g[M{<[B\>i\ ^oi|M.B[Krm&dt VM vNnѭc߈L1!RL `L>U4W7\&a=L! Vr]@H84䖜x uZ:~^e]pS~,+-G?G{ŕn(V_DK4;} ˣI9Sh,ˮԉBcsW jǔ).َۖ6٥և!|Y -z:t˙!9 endstream endobj 384 0 obj << /Length1 2173 /Length2 15518 /Length3 0 /Length 16814 /Filter /FlateDecode >> stream xڌP\ֆ #58i݂ӸCp]58dgcEJL+hlkqec i02`IIU̝Y%U:8pCh&b(kkr02ٸٹL qudR6@GXRa[;wsS3: 00rr:d ̀ ʶF@'IAcdEOJg`Hg`GIp5w2(.@c_rK%;ˠlkj|,Xm?BmeI_2rptMl`ddkmg`nnc 01dܜh69X9~[~8u"C99999[4,jc,lkm qrk"@swZغxLmMalGjcn 5S݌*noO;[;ɇ prpz{067rMm`dX? ~>aƶ6Vbza MA MKQH I ebe022sYG`+icb v??[vwP{@(Ks?swGbVV)c76rG:;}L,_WuFW$ >fAh(f4V0w22Wk]A2*:h220tY~<>?zocx_S0pp0peh%&VV'8b=GC7ec /b !Cz? /3^1%G=?QO}/q|TCz?QA}TPC,z?QO}(2CՍK6#[k _+/zMp?~ gn|.fquVC?CcxQ?揺vcmsxM??ζzy8\詵^؍M~2>C)t,YR#Ydׁd`RKصS66=u/\;cC*4rd݉S^<ʨyY9?htotGyzĶ783K+dip p=5%n}yƧ2 ;Bl0hF >sŁD+fǞ"T;] [[F 2-4Vis/;r@)}4+"F@1Js%_!r[ӕt38!񬽌0mBkcG$Zȁؤ&`3|~5Ow)釿|Ytze7(87h(>@B#")C%OJ_J&Q>v]&NpG)xٵK3buO*ο /O*q} Y  fhxۨ0kư8,N mc7 庇滸.sSI&͍S-^e~鏳:Tpc/~ڪz3AYՇ) G%4S8+(XOAMjJڃfIS:xĶ G#S[> WeÇ'fx6-^|(wi I|ZS; Zև@ۙ0/qE.fz!r)P8Ƭ|>Se5~5$D0KHL:rܩA\ A1IB\x=,0+٧bq1k;s.* zUXp,,WIĞ%9~W:< :+EN$9we?I$ -&ٷ.-yvݱ/S}kN=ՏU }SҢ(I;.ØxncD DPy7' b(C1aXb4SfYD ig @!7ߠ[M|p͎vW*ouRk#ߪ8 M|zvvFj0xQj$"Q2ů.)NՆP#a~q.crc"6O_2h<9g0A#ts3b#Q>ՁC$c$}IwJs۠խ0o7 TP?k44)@N evsYofqBPna]>ٜEO~~kb*"R)c_z=`;T6:o԰7g|;IW͢.leI_%ȜFG3M !NKR4] \W1*HnQ#.Qhe3TاX&&F|.}QKME`6`֝8w"qt'+81aN"bkڀum38goW<{1 Zk0תi`pSmV-¤VܵΓqIPhZ;nڛ Hqoe|/۶KMȯAĎS6Z%60F@!~|GyI5=Q blU|4 $ c065i;~0a `)DG_#׵pGj[#}#&iR_ːAENuA?Ѳ8+]%0 ')SIr ,y.;H%0ubJOVױ W[NAi b {MJ &:mR>OOl)l1.!'xś]m41_|u1l8򐲄)V%zOE+rn{]#jpػ(|3.9j]rs6=f##3i޳ogRp3! M"-0aJ6}Ͼu[bچfBFDDIZSe&b5Goڃ\0fI{4r!²L9~?)%A{nO{$yFJ !6??Q^rqD!9d16SA tɊ%J@c1.+{٪T]D}/Oxbx rf@>¥iyz| ‚?"o҂i3 55Fi5=V/?Qϋ ɻLa^*vC!魄rf|=uAd;LcF~%.pUQ&E9mv i f{4(jLbSl1!- Lno0'qe@TqGxݏt-ϒI2ܐg\( k[s'˪[s>c/7_^F# M8 {ZNie|oV7⣹2hwSܥVf5H18QV"\-߰'AF[ؤɺidy t=\nb1ryM`]bx)t .Js 6Ns+ F hNrl&"`/dѠOT"%!a@C fM@J͗r͙:&қlShaU 20e΃yIZUXPD\d뫻I; 3=P˰yl#]t7HmYp>P]0Jܶ$?^>y>E m}GcCRuk=03L2+ϒ~* WYҫ0 6ga5Dҭscc~Z>Uʧ-muh=qL^ _}*ޫ(֣C؄nF9J7і@/Z a?18@,|-nO94 zf-z~GD|AyѤ]]C;9E]JYNG/a;at=`}vgB\7xbWrFB2Kkjy=(G9EK HTiJ<=;MD\t'>d!+*0 2_8}x &; r韖B)`aG8Zvm:fI}xRv 䈯09mIz+\CU{dN;S6L¡]׉te۸ө^vte{gݟō[dpH7hvmz0e|EG٪ Ѡ4X gh0Xl&nVP@&msƈH/hMs8$| UN]t0,s%.fY ʾ[2*-EOLfШPett \;YokwF'~oP#VDBUpM.NIje{U:խ:rhMv}:29d g 3~v>|Ƕ.ɔ{f т*Ig=DcOHoW޵t" r H4rHe#MBҧaWR+E:cHbEi]xd06QJ/)!ɢY̤8}uS'ȓY;ٮn62lt|}F>3Jgc[ɡTe.h)ᷚuC?.2b1]]&( ( u.mUsPqF /RX&m|m"L,pb;%OD k!Db^1J4%Ghʞrn :(u[ 3 {)QenhEHG FwC\xQL+_߽nkIFC˓^@cѿV/1?~OZ$]A旍Sڗ8::orNT0bmzs)2r<1/5VE̔˟6/;xl2%5o"&(|̞ h)r}*Gp0&̑:E|R&jFÂ^VdR/T.a>ahyžڤeWWGxGr^x~dc׽,+~e~w3C5ct7mfW F-Q]Zeg? yLj32Uk9M œ[gq p1=47ӿNڵQl|%).wČuLnEJ-df4 v!̎[j9XJ9Zf;C-$s5TN\1u߷cbYM,&1l/YQTI֞_CD;mMoBYMFy+\}asjx>/Zțё.H @:Ez Vd܁$k޾h4ѡ[8G韔k9#E?"ظUj xw-p5C4Rnh&6O^oy2B㿘w-;@)bb$G8v&GA fVjߌ@(ecW/5iT{WN.p&t61/bE8j$j WE4^J:z2 =8~qaa\Fl_J;>2poX#n1 -,߰ZN{n25C?j7-rx79k役깉_}n N\M1Ct@ucI6깦.09Uhüc?x3iOg8'}!a*|@pVj"VDwr)`nnaDyj>ߟ<~ȴM93jlV=iR53S p'OkD5nxl>yW/ ,Y Tu? ?eWi%pF5儳&)К"5Gh~9qrz~;q?]CSf2i>L+D7%O 9۪ 8 ="7hw`:MޓLPo0Eո;n5`rJ7)78F?C%ݜ๭*dJϛ/?Z.m,nP~˗3C&O"uMҨgVi>7)t`JPlB4VoYe|1+'XylDBe|J:픶h;q04 ߩ42Ɂd"oVK;6k&'^C4aG - ny>`曬yoRū,_(JLqyqez )oۀR(8H&XJAj)T`+IYY{ȸ%i~8~`MObUհ ])r:':,=HKKb:kaA]Jڠ"*<Ԣq5'FAi joR^ 59W'X,D:)q3 0&Iʦ(=6O~곢SxÛSQ`p&l=Q2He/!2aG^MiW3C2ud&^cG_:r,3JAA~U>]-~1!DB#LoUV5A 9p4kwQcj`˕V`ʦorUwR[x}05s̱&&1S* /HœOPPXj{P{7/k}y"׬&,bgmv22oP (Z븤~$_C }Bflz*m} +ɴTIYdQK/흐T[-ߪ =B乑!fYQW O1l9/*Wrܮ} w /.aF}> l3?Hi# ևUm=~)p ӤkӃ nS{m \Gb5DNX7bAϪ"`])|)KOy:mwM;8WN]{@Ŀqc+ Gч@(kx(+C6yz)K-pzs њ,ߴt6` _<:{nPȐZ AIS~~fbKPaY7eDB.,xd|S)*|{vm\TpXhtt궭'6_T> s 9 SRZkF\!lhI  )svY5VwHz6[{]Xq q̹㩌̋r9ήdn1r+e_̈́@wۃTs5?!E}V^ ؜T]hr%-ФejѕmMgfhvkF7nEt*ίv&Ey.ubluįud{K4Rh}zۍv\[և3XZVp#kj V*4Pdc.#: T YVg1q#Ϣ"YvD{z40|2IBSFubw`JWM Q<Ο?<;:zv6wR:V42ͪ,H9O"|rZÑEfL6L8:ftr9xxFɞuOC_g_x-C{v) EEPpxoX&&$ wkG"ZR"sL^ @!z bq@xIn;stQ:Cu=Q?NbzJ֜`6+&3x-44P)"Ft7)A4RX (mnߩ ڤ%b R!W22s@KFr˃_avWDW*mOG:-F,j~!DJl u\3%m24'DN5 G!xZi LW@V!G yWH3sjo9 @MX]co6,m#ƾyv[׭p%~ vFa~Ҿ )u:iiۀ^hAvuK ` zf6nBJ*+nR:WA7E<ktľե*o9ލ$Z0^FxQOV]Y˃"zt}DPPn#J gS3V3u!LTac }i9$DofxeY|j!$F4fP6~.َ;:UHk@s5`ԣD-\@T#_G-kk9SyBqɴDdPVWsvVJFTOfJdl9]Jy4o|6N7)9ꙟo kO7~F2&w6+OKAkY yxj5{d;us:-Rș$HV\dϝj$EC/eq/8;YM(9gQ[ ؿbݩ2׉)}ƾ+:w"{ _Ά=r觉O18QωaTaj0ÉCHI8Q$fHGјl.(.9%Fh;cPger:/]#+J:U >^dҵBTg%9c34ٙ]L֪fL8=!)]勭 'L@>*IKn6w)'-mOЈw?!*ZTlk:zz̿)(&cb#nϙ*ǹB#W潌c|i4R3j<0 m( R^=@9ug n1YHvWEZ Ɉ\퍁RXj$R4uޯW476;r'8ыP4Xcdž( P nY?_`߻-RFu`Pn['$a[}2'9F 9J̠#*mN3glya$-~ZPui%MGϊ6IB{fhQϟm.V82[Dgm/Be 3_a%_ߏ腻τI2c#*[rye3iu1VQԭ Jׄa?, +ûbD˘=XbƥUo U"8pRCF5.[ЇmħG Wڨ C=YJ>f!ցӞH6(5׿B骰tu4w.y{lkHc wHzZlaR`o)9Artsh<}^c.nW( B-~!+G>Ҟ$g\YitjԘyS*>P#]jZ U7*>#p6)bUIk:>WYl_$j%ť@~y6sjzSC!%2Ef/Rbs("x1nI9s$Ѫ:|!N.ʉٹ w#M_YH0TܽDZvȭK"0Fӗ=hdʰXQ8r=vAߕ͑^%JAC$ߕCeA:wήk&PjH p sw.#~Om)ZL",BaV[u7?ـ,UȏIp}Ě{u?r=_XMJ̵Y,?6ٌB Ws}v/݌nMۡ8ovnsi% wPARӗvt#AZ+.M8e̠scTUwS;!O]AWOSCZwQ>} 5MS oLN裁yHUj|N{VqbDjF#Sp#V;ehonO -޲_!{mPQ9gn14sq̍xJ ߙԒh!MG tҏHcύHph,ݡx5$49309@`d;ܛz\ ;F)KwL}znpq6Gd۱؉BŲrjpZ?ƒ<^<Z"%Cu[7ZSAO,NbQH$DTOp0.MbsZwޫ" -;B9:Zi ؕb:A __TE#BjV+ZO;p2]tff19,TiB`^%ouw*7ɹy3س4=CSё &W@vqQyǯ\ÕC F=cƦ2_yt긐 $#b3=c;RՐ2h#047$ډ)hRmD+..pĺ~FIܻa#zȺ<1Ҷ`K"jʋ6$2Ⱓ ,g¬e6dC\/@.iNlXT*bg1k7`u(4 AUK?)w[!3 Ԣ"yEi3ZFdA I dDcu"Nt^X> 턢v^ xV5,(c2,|u~2i 4jNrJLZd:[|2 Feh8N(ҡ#Mf̺ K]\0w^* X!l&b',qL~a%=Rԃr%b0SJ0I7!Pi<%v[Qd2 Y)gd6 rە1Nz)(7M~O>Tٽp2ts U>;T'wN֒\#qLU_0,"(d/hn:5y4yĸŶ fhT"ðN:xl1q&N ,k J+jk!oԑ"x]_=W8q. /^8]O`DsA0`*ZHBgm[|kYU$&^ÍvM xY&ZGȃ@ڢWgABSPT/J mшjei0"҅C񦘪Ap2gloX{Xv"65 ?+MC׋?%-}Z;tՅ uNS@;У@L_<0&JzD3 NNGY"GC%5?:oiK~il4WĶ{y_4"x} L! ,5k ^f2׺xzmG)I?Nj0^<Ҵ(-J|JHBSܺI׃醥sѡ l#@WUTdA3C}/|pd"Jb7tlwga/f8'MDmtP>t{5貍9 F3F N;DMBw#RcP 7G3p$mIhKj' pX])+җZq"[H s{"CeCq6mƬd&@`/ PoXTiL1_L7jYYX\V{xގh;aiv-r pf\agDuۯsreB3!Qt2AŐD %$?Ta~ˎo py+%P BZj_svGo]Dݞ>DwtJX+f)eϥ%=˟A-4rr O,8틙|G=$.GS$_מϴ3w:d:,81p]V endstream endobj 386 0 obj << /Length1 1435 /Length2 6406 /Length3 0 /Length 7370 /Filter /FlateDecode >> stream xڍTgT](@ޥf "@j@tM" {K}~+k=93g9{N6cE{C ʺJ: 99."ĜP$ KF >0 EZ.$. @_@RtZ8E̩pA؝Zx t+ ]0 v# 0(_%xdh7i!!///A+JtxN#( ~ BNp #dp@{P@(l`kݠ?:$ܟٿ ࿓ 0(@_MG`\̓j0v?'DA074Js5Я2؃V+#\]p4W*0$=yc`p{_{ aPM?QX?>G( %$; q}7 ;? p9@ @#= "0S:acYyX_W6X#.>_*CVRBx0ba1 $,! .] Մ; R4= < Zz,o BS/ !0?1X{zE`Uo+!\;cUw2[@JPT7 ?\`p@@ŰZ8cCP*9a1qc/k0 8޿ #v@IfAX^ !~4Bnaaп5@"Mlٿ_( !C@dB Q%',JyueUz5 e Ŧy-᢫@g9HizK~Trg[(UF"p{GZNCa^:~ uY2]"o$x}ёD%%EHB>)f~*WRiмWN`V8Mk[ܔO]og~0\nQ}tXk0Z_ʤѭ2yty֍;~ 'l_͖1^YsyKN'N tZ:[*[0&R<>H~y8Әk0>$+>Y##2B|-mUxRTrǪ(15("B^Pߞ#wrl !d*O:Z9Պm9EؐXN{۹ԸAL" ՜gj6M*'+wf(qBk|o.uccpV8-5* 3sdqڄ;3zMgqJĿٟ%Q~B,q}j7eweTKأ&\5=2IDƒ:e`JXJ|3Ϟ-ABѵyddH_9|re:DVQW$7)(RC7DrQ tS5.=]gFc{BGTC:tX~-툑}5Ȇ Nj=_X}Ga&ـ'T( `6)!c98LE7@*g*+ _ݗ6H%d  &JuJ>ưUnαF^ԗdMoyX+UCXxjI0 R&D8}}.u;\cyhp? '\e7s#9A'Uo(ӹR8om=JK?O[-+sz@…Z1h*˵w2^T8L w.WGԘVUp͍fm%CdF;U/`*j]wĸԦ͗zd|#=dfGY(@Aj9TUDM6b,j":-xRE@&):W ~lbV{(] :Fmnfm|C=h Vƀ$ym __){M H<áVk@yO}9Ӕ:7U}O+N'T\oc}CԑwϝȐ%N?IULp3~c.IOSՋ_Ԩ> }NΖ9.EQ܎##^K*VvU$8$ڀU:KkI/|3ZnPR'ْH=16^׋\c&o#_hJcL|hh>QեBȁS5c`nx\r\Imat%wcJ[rbYhVDC:7-m֮Wk,0p)Ż5ױ!lKwSڟ.&Zq} =42>})Օ(X_zeTu0/.z􂩸''zaPH>]OJ y5ܖ.7c{?iftv':X-YD41m!cfM9vH r%z>i4gp,Ug*n.o(&~\hZ !KD$鞓U*9λl-Ii?nN$-=gn=0ƫ"h@+1+^U RtWŖYȶqƤ~rn3fj{BC^fJ5fRSm5u0岩m| оTHK)g|+s'eCGsW\4n%f˚e1uM *L ߇!g&YĖwB>7uۿ1A*3XvmT5VEn$JQ.$Cr-a6E""~gejH@G?7/͎CeF|G6|E mpL uݗ:u4lGh{9 'ێ;2jHJw)spV5AmSPKĶ6ΗO UU#yHX9C \MZ*eylh۔$[2?О-!`tW/lY̍ 5/<8$ؕQqҝ@_Dڷ,NCi5femJ'$R ݥd]eZNU+cvV1쓵-QcF<ɞNJ9R a$F.[mPBߨ) i!;cBנRAd{0bz[f/sm;Pޤ[̟ih[ 1RH нK{d-{EIwSڦ}D,n컥՜xQÓZ5O8dxናg*!a|i䫤*b#B ,M בֿz'H ݪ8vA;\$_oQ7q8 [Q)wCbg1j#Sl%YpcwS^ Y7 OԐk ߛj)T~ S(j"Hƃ*nIw j"7=3D'F;ڥ%+":ی}fGruȬBhәXCdȹ,YnSgkY~;2G1B/g˗G+2IxXE:խ5~1W¹N^".A~4tm5Ě9p&0qjJ^j>䵊 ;w9%9yqg-UVC'W8j ͋?3)y+N-n6JF&+AcQScimwYVM^/Pekɗzv?|/qμ`#5nRu9r4H:![siwlĀҺGawk?;;C f/j#r& oVp>|EiAK Ut$nPI$5 @LP$ Id&\leR~0vHlar |t/vԢ벶aS^&;b yb5*Oܫ*[eHW.4D/ŝD@-QIG ~BaOhl=+CxV~q>@_ޜÚWnK; q{ą]5q1Gˎ^S}ؘ*)%55SE`beuG5+s/ϝ8|z <CI!E-mQ@0V52 NM:xF򌄞v>I<ԏEʑn]ol,k;|iYrj![R=rC/WU MCoLdqmo݈C4P3Ip2|^ dp)1-=3uH!5/<b<d] 55*4ҕ{Vk&ykqt#>GT$|;ɏgT\mϴuh2 DMvՔYSZە3 :3M)SQc=3KkDvs!oӰ$n7|]^ζT&b.y.YChvtb0GopԦUYaNm[.ԨqNJu&EiP_4{1]i:V+ KgLH Aji7w?5ˬ"w^X!'2s*Z6/I߱S`T1U.ZDƸbr!-&%7eŋ( Yth΢dGlthًMHe瓴AsoG]LҤxb|FN.zЎro!mi;C-?d|rm )Xsf;zs+ۻqo?/6xA_xFZvMM—bqVHeAwZa?NJO6¿]xt{tVWR^!RCofhT4*jUctk*o͗t5“+B=oϽi#o+ݨ'RByl (h~En57UX0jv9*SmqQ tS΄Ds.#Oe־I uyu|;\J~E/103u|4Z}}σ^[\ưk { /[ #$g;]YKQh&{YGOzen{5%%~UA踹ZP*宻1ڋ;GJ{~ n곾5|*|JwhASݨxiǵf~Z,g.oiuJMvL r\ɟ*nLDnz.Y;ܟ[MJ-ޠ)1Y౿RW\1qia5r J@[;:qÃ\O #2qTEIpR5ӴҾۈ|WSUMl=5PQ?C8_\A_o k&(>Y4$V9Ve% 8}+:{o-ɖϳlkWKwJC ̕k&wEE$'xTK}}s"1 G ń6O((v{jDKez^ێǷy7j7R8O7Q /ǃKgzqY7} !8s*/A^)Na5!I \ϾHvv5DʝlG7YfM )2B'쉮Z[!]^۫bWM8z2~67չn)b6w&*ǷmnJKVRY=*&6eM i1O}inbPym-B炧nG%ieu%nkkтr\u,N #kQqrӪ9Ij8ByͩĎ#1xwVm%=w׈qζo.vQwrpRI;i- iwDGj/f!990#67v"\)|VV O!Ӻ |&z~+i6'eQ_7B3}#~Fwj3-v4j}A7ĭ/ | GDݽPX[qf o]kZ V78} endstream endobj 300 0 obj << /Type /ObjStm /N 100 /First 892 /Length 3620 /Filter /FlateDecode >> stream x[o7[B.d$M>sNzH.ZWfHI+;NdK}X\.w8]E#LnvtČN QDE"$t"5I% X0 Ho݁zy+t-тO{츝lAWz|3Ph!^Ȉ=|> #,F&ow P_v:OGsLwSiT|ӂ%Ve%cK.?L) aAJ%i Cű!^/8GfG6iqC:0;]^A1>9],?Swe7;Qޚ8l$i! AOQ@6%E{c޾}+Of7߈aXP/x!"YeӋյ`.׵78mazopC` .n`})2!*TC ܕ'4ZoW/oYɬ=ma$B=yPg/ jО OځbƸȺl9зxxE=zXLNC(0'P<p69X[Ԡ\(1(^C9e|y}u-=uB810j'6Bg\NrުvrwZGG0f<(IFဎ:o;#\V3a7xPfnHIjl@ebȜ2(5VQ7=-Y`nR'v2sD=uRF)$##"t א^, YpT; J1}ňlzɓ;LO wxptH>RZN wJWfe\1񢝷L y>񅚌ۣvv6p1lX4Hvg$yi$&qPJ_QV Q8H]6;+ =rCm(Ƒn[)s&hb)4ˬoE)/ΎFll˨y;v6^ v/X4&ӱAJ#3-r 0Đ6:hnXZm܎Za֙ݤpJܮVⶳl wDWwVmlm௚x95ofPQǝ/z6l8,Ϧóc1N,CBLT"T >t# A-:=:sK5w7mmG_ ^&+v+z QdZڍYLHUD7u"EM1%:̊2cZC㨼#*p  e h4j Y/SFk$I"Mܧ*1DDzGdn>F0yGXr7Dl  kwɲTl$r269I~l: CooQMK?yx1d+}ky1gږ ōƄ  $|pG[?1GܧYk!;":3zR(}naw/}c8keFiMچ@wo$CX46iEKŐˀBtBDHW;JN'd=Wګ%]W -)Adci evK:uV_'81;65{=02Xh QXFf ] l&UYVMӪxWxx SHo˫\CpGP3ϑOe2wUޫ5٤YLW_.ƬeJΛűb\sR/YǥjMtggU7,r!vCjWcvn65@>drJk͒[]v]\>av&$I<u|BOP]a{?۴c2W}ʿ3pM*OaJTn% G @~2dq(SK|"ea0[ ~7Gt )鉯%YF7-;ȵVx <) ~mvx\-iI\x&Ab %a(G9L|[Ջ2.ބMqf|[r;{W2 k;k z'𠝏fE7+_~u?{O7 O{+V5 3U3P)nS(Zb8'VE{ozaIpgzUy;wjrĦC= uP?^`Ok;P镏#5RǪUj&LMt7m\-tֶvm2on/U5[bW=6{`B=7i_oXƟg+I7E{v6dV_]w1S',O[n>ؐm.V~Um D~_p~sm!21";y%_\+_5WKX2?v endstream endobj 388 0 obj << /Length1 1433 /Length2 6682 /Length3 0 /Length 7666 /Filter /FlateDecode >> stream xڍtT"!H)!50t-  0 0CKtH7 (*HwHH7{{}k{?{y¨k#g)#h/X& x`~C8扂#PA"i!@u/W D@~0X_@8P jՑE wtBcnpNʹ>^( 􁣝0f50P3/ 7@:}0 !P /=h q!5  w#~'CnPt€:ʚh_47|7 ~w*e wGxQp_#*9e% @~aݏͺ > 8^|FLM/E EED0 ΉWyC?w 3A`;waPPo ?-hCmap1nsp_9=%^H˧@^#}<@~!0"E?B;W bŜӿZbH ma@Yna>3(nHww C~0Bc?Ղý;b pİ" ㇣0{]8g~i"Q_ & F`v.!Q5a=%POO10Q=7|$t@zfQ /oKH ȇѲߞ_Csm ;/OOLك_|AID8h9Y/uf ݣ4ab;Qlܦ-q4{V'xà`4s}rc*5i5AvFha!9lXNEq_]bi銳9{~=>6fx%&Jjq̎uŀ=Xq&,\?V\QmϾ;C>&YxvU0.rp RCւm،$qX!hS4keeK$?ņ%M >}|2[beb: $p|fKНЕUUl])?^MdX?CW󁵗' |-Kf\j)+H(&&.vb} b;2"R~ZֲZnx%%5zz^-)iN͗Il$:j 7‚ċL˾/Y/\?XbS&r#XOnUmj_rt9w;a~QwHiBuX.cᢗBx߃'՞g,vA~sl5a؆A95lVqX'^Ƴ\i?39˷}*؋KIʥWrz=:!"`3h,,`e1cZ*SM\Ƙג.G% g/eqQGnlcgܢҸYPK*uk ܝ]& F0' -ZҵVTݔ8a<j! DiC\\ɧ}È@SiF[Mbi}h'9|ȇφө3⑹,AXfZCW@qÄͽ_wEw7[u[G] 6vi~r n%-YщuP @Ym"cpk1QzVԠ`g* ,Cˆ㓃:3rԤ&ߍoGFZ:w 껐]z$Zl]r͆д\(cA|Su .zi?/"mRTFG] ;8cw:DwuѻA+D&i.ܽ$C}Bȭ. 8qO*D U"o>>ܗoh{- *`nCp)ZXD]r\/EG"#>_X: G=np}T݉dl躲q$`&b(^[}KyPa ԉ]^feÖ9J8/2_X/XXRUo]Bw{I>GV\UKzdt m=%@RꍹSiu݄xY(+L`|.ei颡5kD 8mOM ꯢeka 3po)-CȰxSmk=ݯQvx3.u:ΪL~ɰ`dDCGFyђ w57{0H1* 6>e8H.m?}^'ȮxrZخJ=+K?#08iVV w zs;YpIksk*oDS*W !_N{_?CͦyǬu5 hjeØ:oQg\n?M ,SA\q[uG,Z-tf_Y/#TX[ 2A%y,Zo'zcޭ}qS) D, 2OΓ<3+XANiO!#MC%_B>NѭcQĚ.,;G&[{'sJ+^!?4CA|Xo?¼8%$%( WE"pֶAih[Dqs)¸eFpDs߀LղkąꂅJ/F5ܯ#b3T~p=" _0ė  MNʯ%w0g&mz{ 5=rpwSeƛDBbky,vf RҶDOP~;mlGf$r>f34*uzDb˹֑'O?蔜p-gAYȩPIWLNkkle2~! &k-;`&=g+ eVo WOC!ѫMwH+V]}wXWŚ崉'`A}fpv罉QXn*M<<EV3cl97B/6  |M29*R) Lr{uM;+e31\MhkOdK!3Ƣ(*Sy%!osιQ,"1hIq>cCMЪz+mt[qu98y_|YCGe],VJ7u*dBeOp>"ؙ@t~bv팡)i>D\ؔ 1)eb侭H?kT5H݁BuO o+X(xӓ/|ؚ:=s[%Q xB !cnmYjзƿN1%<%"Eeo.H1K@h )%k)f=ј mmizi]ḱ(zd\kn75|adB q|Z!q3b=F nNG4HTHɇ×1 |V؉w̠ b=Վ40fO5{JӋ=wg\Y2dSH4kS>]4[!$\1ٗkg_RU#?0HeeRwա)XɌ*&{bDAO_u|W%;Uh!XqItBgpdLk {8M iq" HA6{I[bqXG"|oǘiV7p{m 8WS'-gF:foW#2"P6I'e"LZēZ?ιMSOu]YMSMgLͩ(t9E)=/ز $}03t=h$q48ĢoY}*+wV}G3VkSMM6fc/|+'M<㖯FBgZX ޥENdš)u"+]b!VVO&;=bEmm\ZAY]DB=Q䑖^jhE9˭ٓ*7Š 4BOSA5F +1ςoxqC{3obCqܾtIa%:>XuS'n{Y]#ՖMd9=^/7MƳτ.1.6 Yѩ_yTڀ+'X=w3q~1'e@$nɥZf#Dy3^qŠcp^U`Kt AWR˅u-55@A߭8w%p!)0u%~7̀[v؂Ĥpi[|kT,&qR ?S^FjsD8W׫T|(sB]l6R@oNF{bkL@[q|@2֠W3}T3N-Z/_*)9Lj(vdlT,x$5-yţyRlRɎF:76JBRxy7w4I>9OŒdr86oBrK ef8,^=QP9ai^OjsŬoQ)p endstream endobj 391 0 obj << /Length1 2633 /Length2 23287 /Length3 0 /Length 24773 /Filter /FlateDecode >> stream xڌP\-;w܂6=!@p{ߓ}UUM2ZMM,f` v1$ޱ8Y85AHZ@gk{H8M@` l`wsyyll|c4q6(.H֖V p 32:[L@V@;pF3[5_!@ G~VVwww;gKaz&5 tv~7 P6 5@o l̀.`W{s3.PqmY߁r613ss4XX*Ҋ, lW&i15 s1svXnw% IZ;cd{0wudմvrIc!YAn666^>N 0b^܁#b]V7Bbg[@Kk{?b|gk>{f*-%'.wщ;xl$0&/_9{ Ղ?C߱܀ L\; iW[ۿt?j;k[ u@|T*ͭ]Vd>1{KEhj 2-5_=Pc ^ҁO_* r;8;x" Fov-="1vX88#(7Uo`x[`ebAV?*qX p- ?\Eע\gW5 pv?]gu pv >pv?gL 7Xg` H~Knn t oq#9dCX r 7o''oosWeX +OG+,g7e/ÇA(msWk vڿvv/5?jp0Ghg\Hk\@g{_<ɬssh+G[WjN?/_aON.@;f&oۿ ~_-p.0vp҂_ +g࿈ %_୺ +s#qy) wz:ux=fH f!6!mw_ňܙwFwS陽>OZsKB_ޒ]${>jkITk}y27ӊ4?7Vp$YCtG+t3d/3sW[oq^hgIam'֔6b9STEbj8?I-Wn~X|&^ Fյ: hX2疻Ɵ[?|EzE-#I>ÖF:rLno`MB.7 vCr\V֟+Ocٺc(v|>?/ 2H.Sj,@-~:|EԓL1a{KN{gj0 /TR5;_|8yd>p@<8|\=΁y{`̆oHwٝ.*i2bPE[3݈'nvhB[#EOLerԴ J a> _Dq?]7p~W@@_]4>بuB(NqG=79E>4Em[iPJ! r&DbѴ.VH\>\;Ɇ-7WV?=yEN>F$Ė -@ml;,UN\f Zq7h, =2no^8$@ΣYīHҟo,)b/é|_GF?##O5f ؝5gZ愬U .2H`,rśrl4~CU}J4v' *~ES n,vbtό`,eKˍ\?V%ٷ']HB5K%{l]X7o5Yns N[LI]eALx2?M%e#x.ѽP͡6GNࡢ9o]h82yO@0VT-R-2<9M\KdδN*őO%F.Ⱥ+X{ʍU&%vi+P=ԉLG2k/ @ ݼCƏ *9EDyK {[O0yXiKAĝ#Ց11nW'mhtwhF!wi:/8_X&]M$xdsB"y\x4o\+2QX9Lݓ҂Se !p r/E9v#A nDLlۍ:R1FSv差,W[ WL^uHk9l.Ac/vZ^~.f|O-aqDcߤ+Q)*3-y 1A9l:R+dΔ@~tm|UDFKE dB%C[`_QnV/VVKg`L,qAjQB=Teq)&89nU] i*IQ \D,Q2ޓhppcz!RMshaպPecf4\a-2,RA L2PK"f([ 17W2.NME7]챾saӀu/։зf0v^7LҨ4TKBp lmm0(::5%S)j>@vzɤAVz->Z^1.Ev/gh Re2t馫]~'ƊK&ͽOngk-y\S^O].֠ZJo\;cz{"#KHEz!h5#:ZS1OTN( :v`6b4׽`Ii`,q &0tU\XI>[;0|Krx$;iD]QOuCl{[كDDL7r R5 ;UCx:%Ylt], N_ WOwSpw)i'fw|eW.Ч tJ=pԘހ6ߎ$ʸ6򓽣3 󬢷'p<.Ty'䝸mǑ79LZnj%xJz"GVޅ\rU#Im Y5f*8ٵ=a\Ae ˂.=Ns ѯc.v-2,"}JgXUFK ~Y}Ƥ_OJVy= ?ɪ㛐m;?Ow~lȼ/dW'Ey|Ϳ =(,E&S`gI *?my@`k VQ=Q=B)~i0Pd;r܋]B8_ۏ81Y.3$ٖb 8j̭ ^_5M\krU JM>>'C)&P7+n:&}L_3$ PcP^M`XWhU˼i PRՕ) 僉&6)Ӆ HXY#DˈFn Crq XNAe^jѶG&RpoK`ĶWqcHޖ,M+l[) -V`tVMgIg#vy9lJ V _ε- =Z % i2mgߧ&ݞs6#g*#1dF aMnoj )Жh%DCIZOMDbRQ&oAN2rxn^fɘʍʸV6|)zJwRTuШ{y#ƙ[w(o]=/SV],|͜x?d>udlZ^洫,UUH_p+\{e7.zBe c5O;!HQǽG{R(kl65p Wa'2OqܒXoɊ.Z?hzr~FoǂI;%:`Dϛ{=+}C+L:]{#5je=zxiS {}ѣ#E%CI/ҽfrVm9g3N 5] k׊gǓ$7ы Wb #8&l1>bW=|> Rmw`M(H"|O96tn2Nz_+Nx/M,ͱ8Vhzg{=c N~Hc;Q(Bc2/}yNY<'Ms1P#G#Ѝ'ۇ zZ_*a7({ cfM^UdOHᦽ'd̊4g .㔼ӕA2־Opf~n(Z2.d9P F/k"yM\YZlĹIL vc. R[;AVгRo{|r:,K3&7_ǞtSX7;ǻ)yt.V#Þ,L.ˣ0w4"`.b ](Pժjb|\¯R5Z|'1F{s|}/g%8ĸS!Rԩf*^+D$y 4/*lC/me.:7\?ђҢ;Q,1ק1 6l +A1զp3E9F`t"4 !4@b;AO4ϫZx*m瀩eS 0)uH>Ugij`f6aͳ{L4%X֥5j?.eG~uhK)"ëXaoZמ e,-h2M:3i3rrθ[d]wzsζIyˋq,QǏ`h,HZQ4Yt9d'A-GA">96_ܩz y3NEAm ᅂkյRqoт4 3-"pm( q­ 3\PEexc(*}àvvz^.>A=3uXe3vm]bg=B3 V_/<ݣ m'_"p:'^ݺ| /BǒV2RBW5-.1P (.s} 2,{'A{R^%Z*@;\>=NDTV{lern]B4xΟ$Y}m<^Ch \ # s+څ;#Ube2==x'8eUyUnk2JbJ)~M axA-ּ m~t`~?byD !s∦א/ᕐ nz @Z;[gm2JBQb %AóM?PrG(Fe)MؐdbH`?OJt6wꕜhTAf~c+AЛ ar<b ,6:͐oM 'I"9;?AZK!i*`6UR}A'՘ a"_O$t|0Dz/i1Eۖ 7^{*s3ud,{M[QooKGW]Q|BMN1pM0!RjwI(FGo{Ujv{ӯEu$]W~.8oYKܨ{-[nl^/֢9zl`t%f(6{S+gV*rMjcl3} N7={OC=;w}h>T!|qw|\KW&3h]2_04:sڴD~xExTZ9jWs"wu@񤶟c3z!$#$2wˏ:4E~qoI-ej ?%}ĮB&v'mpD`,=E0 XI]vpn95Qcv$5Z4:6cciDA۫[K;u4 Ya [:1 w K2 ÞKlQw+L}paGeO"l/O"/=-БDu;\ {.E" 䐝I0a lTV5g\B`3k*P[sn;RJBĘ)Ҫ ,t"ˬVG-h$+hӔFjMPc¦!z5^jyXNi8\T ?}iÒʺ*Z"TR&^ް\2=0ĭx,2}2;sXOUbv`HI΄s`uxy9K_Q#SsPJtfy|sb5)3zm܀`fPTH+v)jΈ n3hGkH 7<=כ0IdhX:ĨGr,<Y/8cSvbdj"QT\QB&z;vû͟=[ ?@y 0v,N3]56t=El*2}8r{ 4)a_@kc3Mt-А{->uж*3S!@^6FB`jeCM>$:<Ԡ߹Mt8҆zAHͦ #nTu͞?JjO߉q1$hD\3!\׌J)^"&6Qf$4Mc?;{dVSPLZ6:fxVUSfx/7텊F!:MlJKb!NQYc(]ma*ĽJʹgIr)8}qLҶL;A57a,"ѭC^ea*EĸCy)dd@# 8*<#OŗE;t'fsk&Z=ڜ-؎>h8bL{p|iV@$-Ҡ"χN>S/Ĭ\5C*K&ܸ]5ԙNR,wWƍn(*QB}ՂO,dTTRg^v`OvT'sJƻ*[KkaL#;jz=է\wQns~%c$ϭsF"=zU*#ZSZ-ezr<7>R ߡ(:i̋oʴpGqpL٧[lֆ!L9Q" x'odI|A~h')u#fU6Jz,-ƥZ 8tDvY dyyi^'1~)Ǜ|Tʨ ͢.t5K@"7%D^(Ebw*[ Ci0nKJ84,\mR>Wq` vS}BTogД.Y)Ղ_fL[5^kiy(v;#rbm(;5\.ǧe7Oidakwcp$pwA.2Ht}ߐbu8TfEЭ1EyՍG69Ãeq |:ߛ,@>$C+8wxڥ1/pHozV#WQa9:o61$<;Z(;=ԔKƨmbW=n.f }w}46asLj}.WZiV!D+Eh g"'`4#)$.,MչMReI|,Z8:λĆXmvF#5uEk#9ح[Ƈt(&}5_#}tWy݈nE2$gEp8 J !zcq x˶ ɊWIףWg,R>׮Wb jeY_eq: w8̻TB lDLVʦuݻz:Fū snx!O޽6"qp ZgMOQye=tV!4(0nOͦk#+[ז} lDKf,Q(u>-(m|aI@Hԋv,88I]rvrwDE"*x3j~k\6V./JM~\(.AV뵧r8إP(L~Mf2YehMFuBˬEn.E}goD4~=zU4O <9h<ʆӘ'3d{SV=5%)Ѵ]<4|FC|9GxҀN?}U7|d 78_Q\j4p]l(h)Au/¨euCa?PZƣ jV9Uy1 }N#Þne}0h4W*ha׼1@mPElWĕTNjf<ۭzZ)mDRXMÐLPZ]#v P؃mMЧ/{VT#6-yy>|A~$O1Gߗ@;Guz)\@,P5fUIG=}Bq4^4uZ*8>%C7 NZD>kOO];]3/ӭxb9ZJ vr ǨLYvϏjlɗ8Ȭs{e,rX`5N=4,\&8QR_oվ^`[$Ф{\ %ip:B 5 )k0ᰞ?JÔ 3$Y~;3q0%wM=eazeźU2ruN٘yJbYjGr>qʼ#h{Vs(*m7P =眾sNoPgu>CҸ:P{N31󤚇8qYX; qZS9r- ~*^kL[WHMvgB|/6]A,X=*t.aw*o47 M УK;Rkt9J\7|M'ijmTeYC܉IVIAԊP&kb[/nW-e2ς-$}_ne"PVmެO1ty8 mEIO<# )ˆ_S{3 aOT0J{ggk Nl- kơ k{S/"# CáP 3Q׫ N>8H A ҊSK9SP5g Bњ,)I^OL,B2hub@&MgگQwq%ʡ;6eq _%usS[6 +2 R<^5wʖ̓WC W]a{vwXr9"TmR0])hwkY bif0-5VK^# C*4:&T0TlYܴogQ gswnx.tP[yxǫJ·WJyL}Ix Odߪm<5cs6i8>}_' NEs0չEKXuR2k >r b|HC#y;(SMzb\.(E{j\JhJ`K#HGÓoψ]LlQ$ٱ<6%l?zKj޹?N-4f7v.Zul/}y)b'nJZjf:Tvu6@1Owu}bxc XNo+R窦'Cq#R ҷ?^(!ȁiݾ&H{~)TuڡX6s%~oj=]q'!Uhe қL1)5OZK4"]4?rrC9q0u! r@$=_+ /sJ %i$&:$~(U=琅a &SЪSkY}|8@H 4]'L5‘y6 sPP])SH9IL)ȍ 0%OIM *,asO/5)f!n wU9f>TA{Ù2`Z8a~<1I˲3f%WPXieeQW}|#g`4`Ͼ&S :|"i &~hsAcJG$*s aǩ5H0Q2LHR5b;Lp'`@lFzxl!'}lQSt4`_DQӭ:`ж؇7ا,s|X88TsW;^RďӘ0jS&piU,K˅W7B..7"#P!GF+& 9o1i6y٣ 5{ږW:x1Jr)-YGrDjQu4eQ(ArFUO6oQt> %- q̕ KȗCTVP6RKRJċtbZd(8gX<۱AF ,Kn0&q2.B# jKm`q ''%uB%UGI܂.nr܌: J;j@#TzdΩz2|mPlAHC' MȽsWQCBqQA@4'FuVFWvf^KZ:\H%Da!ҍ_I| bfYDao:";I[vcZxRG$Pǽ"^]ٗcg:gD[& Qn⌯"z+pbitk vG]p7 viHP;=4=àE<ۮ@"PW.c/1 ¾Hh] _*ŕOԏ 5Yԯ>q5^{% 4"klcL7Q30l14>KC:qe>"@J@zQy++O4ܨ!ʭ@kȺ!1ahpT4NY<ܱ 領*ef&'̐O++sn]`J9}s; Sj8a]Ϋ1| մU)Zz&1"++tͰIu>1e{hAsH1poY+.QlbY/\+D+9(Sg. iYFp,44AQu)@Ƀq^ʗB"&i :ϋ7a>mRr4rY4~fjnyqc Ⱦ? ,/驦 ]zЀrʄO[Hnڞi )1˕㹊mI-}c_ܿ-˥坙AI3k&~[~zᧂ4Y(e Sg&) $WpJXGN`T.W'0+ _zs [ !qNI8GT s|2(lwJ#/֖1O07%tU}(F2L3[3gõY9 dt@c6X,tA%?p-+qe쥦^qbEcJ鵢s@/kܲ(k1#=봡OJ-N/S- ɱTNMuӭ깵xcY\خt]zAV}YajYʹI:%Ċ0{o!U7ݵ5#p$!;c}/8Ekuys$lOVgbP~Ӑn 0Ńxe3v˳h`=_ G$# E1vKs?(F<03ws2IƽCkOgw9j9Aܯ $KA>;Na͞*%`/&J0>tʅޥyN1oS+\I. ,@S`;ݠKFI,Ԏy&}&g-~M@oic6|8#=;6pA, 1kgïA2F=nWFN(Qrg,0'| 6վzcF-|AX-N1u!I[tZY].]*E|P|Wg'v:7$éjiʆwϹCmQ)!+r5͍xhۜ%! g>RN'7C_"]#P/Qwc}bHkcNjHؒVE\*3gF=:B(>!TkkF}fC)2MGX@.gTwE"L,Ohpe˭ऊI>C#ˠ00>0 rkƱ7DYN!Sanm!W~r|Gy~x8pm.p$<@^q<U&EzfI~pG7,BhR9 @?l*$ճB%36u{:UtM[Y !'fcvXPu-۬OύueroTܴq#-Gy?8Dsݩ_^Nd16yGNykz`uf->k,8-e sm\t[.Xj~m'AGRސ3$8*mωh-=Ml־@I="`,2pjކd\|~b%xO5,K ?fr䬁yݍNcB!{r"a>%;M[;])IӥsTߣF"ðw݂H|]Q..;DTzÕ^²8=u`աfǨC7ϻ+ǶHHLcZ0~憍 %ڬ&b ]H+WwqWf~]9!(ccEDD?VE ^*Ix^DATh7y %{S:1Ѡ!O"G#0zpyZ(qkĐBoCMY~)qOHj)5[_Tddy6-  \/N$dB&tE?TrGHi!lafΌ/U(EMbf]jp`6@qK/֑N/T b`̱IA+H^- 8 cL釺뿤<))M{S%.))A%Oκhqc^ċqW,  >lUӃRnj2`30a=ˍP0/ż1bH'qLEX p.4^?^M0fDލ]{ty乖jwt8Upz7 $ӉC[Cj+Tf< }@`$*a7qZ)|?ٗ{)1,6ʕx_b>UKƠ!n#s?M芐 NAٽv% {oJ%! ˁ[EfkD9Ӧ} E80vhl4+p9K.#bXL4tNgBӱg> T55pXVcf' R'nc,~ZC*KYqi+8`8Y`fVk#l/Qd[ m|D"dҧX9CdCZm=WGyE"GͭIpӳqj2 L3,VSَXY|l:3wBc}wq%U1y}zY0c|ZV > `RpWeFJ!#I횋H|%9e]-w{ 73u͌¶߉N"•Na(cf%Ӿ$;Z[U5iJUI%:24>{xz7w UE4>Hwk`7DSM#Q~@U!ڰ{afƼ|{!Lm#f G_cP25R4M7e\!Hxd$Eq} 5s^>n},eaCpM 4ܠHP% E ޿fE#Q5[]zT"PW> P@z,AuyjFW䥚6ғSYḜloT-lڛHwrJ GN)3A":8_$}Km0“ZB "`%iOYmK?R8 $|9>'v]S7!@\Ʋ. }s;H ۫FZƷ>|Vgǥ/k~K!C^7,4ب)DTQ57xhXhfkWm8+7]SO^ J>7gʍL'`wLDmy9ЈK˩gC=f`?؉z5e8{q~5/.Έ4D};-b*-^m)Q܃'f]"n.86hM,lɏxºuJt(ԮN]k>gC* 2GTG2;)pMc|5~}bI#/%AOe8/no_2FK 5\ VJpⳭt0TqJB]qCn kC[b6 WQ .Dx޺G& E׫PG/7= y;m+Uh B} +\딼~v4mN$Ikb=% }\ { ^Q;FtO 4ۨuѼ#%Y'9nKfpend6bU؝huR^g !ct2.5A2?[G mf%~?tt]* >A 5o ߮ڊc 8t;|YӲtD{cg=Mg.O ĒϨHRY0U#X㮾}C^Ds n9V'^CCϝɢ1}!9=Ē/w:W."<|͢ Ȥ7=cX##ESDwTMbCVW 3l_$(>`t] 9`5r.t=2B;Wo`i0w0UPu%3ډxWxvqM :"PՅ8S%iY1דR{>Aُ>S" 5 E~2o,%!Y~sD(ʰW\0L ׈yn5YsSD0&O5f&jo`mjLoWy$0l# Xug! k>,s ZC!]ߣ%SlvJ+r\*ٓb.u<ߕ50)3*A5n`T6f FN4Kլ\wR->dg?`mRQWfww0g;,eFg.G^DF]6npJZ* Q3;j뎩ܮPMIJ F⯶rM 7&fgI]a~3 ʗ\RjvQ6qK\C`0a~Bh` gzAΩ8[Eelk H7ƹʱ;* `{!⢬&%1LWV* J)HiȖPj/Ku;)lfQ*)P0jO,\7h䭚UXZY5S`˷/Mmhܹz ~,%j:M8[U9T)͌UxOۊ։.bi4+{12J.6-aO{R3Dah>^d{hw@>cݎÝ+%4q[ˊt'PX)cBlؔrpf6Vʙ͗Z$2*!ݘ TW=!Wf ;>A$TBZҩkZ*:Ye`uO. b> F* 7 aqBPd8۝mlL/·E= !:I SQ;Ȳ3~qb44Pg3p(7K$CVoa +K݁J>ݔ直h{%Qƕ6uSY?`f,I ]u}k̐`^(nS32'9.`R)|I:}]qOz?Q^ ίlw~rE2TAqDY lNLvY%H05w}AWp7*1{|mU+x8H%G7%1ϻn*bm@354XV ݑV*$AV ۡyeA܋Y /cKY^fE [~pƞB$Zk57mUh%`8 ! Z׾Vt01茜Q:m*.]O~7}j5dɗqXN[p)Ѹ"Aڽ N -ؒ&"m>[Γ ! @{yJP $Xf7S^w ZX9u̖Fe'Y-;4F3a36IG@H%5j)96{™fC7%z$^ƌkpF7+k`VieC:P69*;ע.i?B7Ӷ|GDGX%:5yawpVyChgK4m:0OGV/|\bݩŔډI"4 WO`SP3YO6؋ !))NUdޟU\UXeV1zR"gpi6"["CRwhx {y>6;s(rh1Zut$Femi[vnJo(e>:Y{%֪ߟJ#' B@wv-+0t{.n-#y7,X2VW%@43fqe7u舺2Cx'py^檖dՔ^v;p_ǎa);m_'l[Q6Af4үmktgJ՘yGa 69\EG;e Do(l?OHPaߠU]F+9Zb.JeǕE =wJշ߾Y=8m. vֵj?q d m(=3|b+9TN5# -#i~[jKsաV4CjT=\Bt9NHk]ooZ" hT0ο܂/Iƶ*7N#tz"*T_g_! eMb֭rbAu7"W/^h!"-G!5&o۴ ;1/o[A8MdjSJL>=8ִtot)xISc(hbO_F"uǸ~<0ºbohVɉ;FQOo܎Յt}&?ERw8< XAHNs=^ d>&I:utwĿL&zj/g=fべO!l%N>ɧ|}&<퉎~>e GkUn3aŶX|:қimrUr'0dٔUޝLKk'2(NyS_ZߍUW m؛pt){/#W3#s͕cqpMeu l&w冧pǽI+fBz JnPdigpAş5[<CY#e,4S A`Z8Dr 'kz|gtUuD<-t!eg(t.EW]X`4ڛz_P㧚 ;xn/)x}^ IT͟8CDѸ&@ؿ`4+k$k~XZmCEӢJVL_Nҫ)Wv '@H0i!}B}_`]p56IhtbDQ,ƌSPj܅9v;= -$є0Qi\쐲.Xu+e w h#!.N"o}N6-Ć3Vt? xk j\7ZՐ4zˀA@/RB_4H|~86J(X|Lͺ^@_'8rnm1 <);4nU8A=$jΦ8+}.:n)EtRKZ\zZNG 1G ([uNыS3l kH#7=%*S 'M*cj.˿,քD"E4# 나:mp?eu*0:+K7tX<ӿLFJOdC(_+uK%/Np?3# L0d}ttnb۬O8AMP3r83n a/ӄ'5BM),lqLan]K p}Ct0#ǟ Ȑ/xB\)F]93p7[ڬsIOs2Dq[["Q6Vdm")3ͤUxL]x˰<_+Kd Vʷ*.:hyVkFf3שBBQkA=˪z9Bzf(|mzS&0~kvk;L|fQ5 1eT_ H3ׄbCXKd0ġkHBヾFjz:TL{P{Ks#D5M`ƨ-yi2='LX= nVfmR},wyi6T bP ُV te B=x4G0B%G$aYL~^A`PB$hdtjFǬ5vTy1 GTWyV= x# L;C>Ϗ\Mwk*B8/9M'~nl@o m,[>ɞ endstream endobj 393 0 obj << /Length1 1373 /Length2 6096 /Length3 0 /Length 7038 /Filter /FlateDecode >> stream xڍwTl7ҍ #FnPBc6F74 !tJJ7H! !Ny~;;gw3 #E@5}I$&f0/- !ˮQ:qG:n1,d@>0G@z~H S_G "##%'E `8@rc*BnSE# !+,+vB y0 E@ݡ"\`^MN(_0 (`(  w"Sm=_Ww'!;`nP Ꮏn^L< s;`4h y`n'd  GyOB0[sp/<௳ {Goas8FE3@R2'Nnc8aF/BzCA08cPd#ah5<'[ p7\f:VIU @ sg#0.@Ն;!25ҿy&/ B< H|O ݿ?hz6V;o;( ]0ojD& u4 .A/oP#ˆahxaŐ%5ovJHH$؏sI #a!8 ` 8!$S\ y~+Ș:(_ H$f_NCh(dn|TvVrWpmDafW0`0:'|S%=W y֫ǭo^%%-VK|GLy=3"C-MnTHsQ ]]0=f^-KzY6!`oV X;NKG}ts:oU'$h'A8jU4|LԫɊ. 8WFLPi"n+64M,lgA-tejq uY<J |~ΌXz^Pij<@E{H6̒z*֪r6YwW͔%IOǘ=OC SAQ|`jo0(97!7q3TX ~(r'QDREE9/$6Z#Q QiqJ :uܮq=.gmnXN|\2~eZ/ SߴJ*K[ "`AOt>>{{\S*gȷ ^5Z踓݋|lQ_tzO`Qcvԥ{c5.qv]_$[7(4$ZyP,l#l}"kU[/-uinDdH>pG+fܚz`{AEWrkl>^yӏ&IqTt>V48˳mXmǿ`Uޒ|9]\Ti=&Fu^V—LkvCÍD9)'jgVߦYwqHARK=O՜4r$.4me] 91 ts]4)Vyv!9_"~ d|* GM5jH3l=xZʼnĨ; i8=GH=y[B~u:od-t$х>gv-VsOzmvJ/11r QqΎ!enIdRPY)/;<Ig^\]RKlu#5dFTڭ`B"#ֳ{ 9T#t,E/yi-i;Ǘ dZiiɒiRה"& NJA3(oSK˞01/|bCFCE@7{3ZlR}Qj5ʊA,Qx[4GG\8Yg3X^b%MƵ^8ٱڰ,X斞Ѽh,[gp0ߺj)yq_DnPOgYҷXaBs+n;'h=uo ﱵUtxZɷ,#&I0SZR=. Ӌ)Qw([r}FsVoȴ}0jg-@B!˓Tn]/Շ5)ۜZ,$Ģ'V6֪vt}v pgJztCXL Aw'*dw~in0>jBL[=lz+A`FR~>,%fC3f&n)K"ֺEyFM *VQg)&X*pǀ #Ȩa8@Gg_(*1lF V_Г 1ՎdT[E+bE蒋:y`=.Tfvt{ }LTzJg2U2f> <}՗'CoB19BųWFsXKUw'w)v zkjsȃZQBM;,/o#v6>,l "" XV?Ɉϑ7AEY ?0Lj3U5{ȜGͧW #M0z^#{1zD(źMU>)PY [5οДEG>>PۏOj:-%OԾ\И~\8 sXƭrH/} L^e}NO.( į{? qp3;|+q,Y|(G^Cq/&?gIU~Hgn›k-W 2K%#[j^%M#҅HDrin󓙿\K5r} я;9Y4TjP1c2>ܒ_hL[_^:cKMWf}pjgݚ7sD0T=[X鷴9I UK[yV$MyS8gIYܸ=̈́6*w) ]I t)Rut6Wp8W' /FUT\p+s?zm'JUDǮ9WvMhNw/zY -dp ќ{ONU)vf63V{dHDBt~A0u1WcΉ~f,Dǜ4/kn_vM (mF簪ŔK> 7k^?~\& !i"뭆l*Dە@NȚYRGEѮBȻ .Ⲩ+CTZm0W(dI?r>aV1|R43or/}Be$yى9ْ?N >#~H1*3j07}iON!zN$WX?;Av5njsϿS2PpMJ'OS_>k:qt3 NOߏo8|\n%T64*xƓ䫂g@S[28$7]oN1X.6=ߛ/$9 ţjcb!+Gfd$7t/y5:)vTp<^!cq! \8AM4 Xy'Fgؾpkט(=9O\rB['B3N#y &u{YfrHT'By^$."ו3O.`l8aIE@\z1~W<<iq9<ɧ>}X{ǹg'cԀL|}3usnB\"އ_ QI0,p@v珆ϵHkgiάphVoӉYJ9abV:Brc٪=]Ivo-b D'񎰇l,bɧ"صa{^6W*8{m;J&i>e -`G ? {+y^PZpvy*s%gSE| 3IG$^"汞JQ~e!72}{D5>Ju.Cϐ+%Ҭ<MHE_dq uh;߀TF J4U*7-"yXz(!B>u|.;֧H4]!:H;AJOqNJwOWXyRjYiiκriJ#nPQiYA5Vb w7cfwSY~8UQS!6s8:&*,p>G5K:"{ '2x+Ԏ1%_VthE1myZYDbAogogܾ3,楶`U._C@襼֣x VQrw7?φҤTo HW"I]:Xh@wɌ#83E*4<;;A x3Q=a×@ ~Q8 54~lFk+m{lv(V?mxnnNl:"Vtٽ /TnkΖM峣q)mF[6Ē)CFw?YIXȪl](72)-ORT,^| [nZ5Dlqq|M> stream xڍtTk/]2 C tw 000ttH#H !-t# J 79{ZY?x~oov=C~y; XCBB"BBF$%`7#!p+" $ S!Qfp@ R@ )!!߆p@ h 40;"qpDn%%%~]-!.mAP!F+G$UJPK.G8<xA; *r.L`q^ [0#Z]W0쏱>_O /_ [[+9!P0@WEK`v APw8 @A6(߉*sE@\ A=2N! ~AmQ#0U1 VW91!!! I {: n sQ% `; @"<~[oAlFOt #:x̅P~sDqc UUy/"$C e!:,Ns5܀ҁ pCp !1![M.7v rRZ W$pϸj .UGP3 s!*oi*p_zpwȯ 5UΨo54Rf 5]b!@%1{f0@PG\p~JQkG GBoLA#;*MAҲ x(IOϦ(n5x DV/?.V wұљ2aR Op)<׸3WZNH6 pn\ v[qIq bR.7%$}XV.dΧ ՅJԒX;LԽhsJ{^XTԈy; 5TZ _j;IOPo*V+{H:CKl`P:^k.u*7 5&}ݬFIcVi }:ݹyՖc]ܑ~1̮"}xO2ά;3Ŧn Vx|R,pCVl$a3i{^`,n |2uΚM+,r>TW}jf/1\<]xv>i0@s[Ûf#39?PVpG/@,ݦ-Z[ 7{IoT|P=- M9 htg_Il~:vUgXl< eRIɤUv@K3Q.z#5L/wk@5LK&h5<0'fh>.8Q 4¬1ml (U}%w, l>m젘qRׄ,h~3NK¦RJ1^9 \;jc~Z4X@֝틓=Q*:\kinfYV9mJv%FDzΰ~CdvW1c+:٤эC$Ϣ{t4Ƿ>q*tgj1( (o7||9J`uᣀc7/K __u'5oTwjSZULgL]Wg3|7p\ZC8poбDjvJǃ/T+Β3T`zRI^>~&G9{ /W ~LD^5G}N-O&GlӰLf Cfcٖ,V]l^bC0+W;ás6 `{phwE]6zW8)jf7W ӗAֵ*V͘2hI;Ti9m/gu!Omƪ"LO߰ 7u=sʠޠk8ӵj)2rS JOe\ >f{z᝜DrKZfh(AC! ,dyK^8bX4r _.VC2؍bi 6QM+˩9}e{v;\.x \6nt薣jLs=h\%S Sۡ8[W}g.ACA)&yOVcxg&G1}ل[i/KȃV -9>UƇyxM3y Ј:~nf՜r+vX0(S fImo&(rq[QG>ZB.܌Ѹ]H޶gLBIZgʯY5iFVuל a{N]sa&\`A u@ ?!]MJ̷x&igK]dX9r<>`)5ݽtk3IBԃ%?K1WEdBSQ'2\Ysk?,n%0[Goȩv8}1S{ bA+-t s%~= 7a1lY!=j9_dm rJ~J[$85r7OƀNR0Sl14M Oŧ*Fj+ jaO2=ӾmʰO |5|.a,m>bo| fJ>3p/=')mzl@k+1:O$2J|lVv&VJbҥc]dQ\auZ8|G6I8Y!B>W3%hC϶4֌)%Z"}ʋ|3]I$$؛2?kFm41Z6c˛HS;TC7.!rZ'aNgsP7U`N)W!`ޙ4sՃYgĕ͙J Alw4K" }3krz L%xH~x߈Xt^\e6A7@F{@(Evn/,3NqTd6^4BcD`Rz'܌&\^,V>(SLދJyzbPSmb?LF )M}0ѻ YSA9զ>*|;TҷbĤIZ}ݓ{ߚ͌1`ɨ̄5^w^7jx.aV=gZ]-;b@HB8Y+Mhc pƗ'7fSavƒS/OLڌ)h9٬*idW;DQ *pҺ|ݛ} >+ HtR\ -8=l{R^3>{~)x m܃<=N \mBsIS6p'HU*爣]Ti[@:vIEH}3豖)^L)z$Wl8G3ș8:k 6-=ְ`u<fK};{;RZp.H9pnoS$_~_umc~Ԥu$H-xt4"훟aqhY^w9wh4g6 m3EgwY.!r!yG&gB'!C :٤af)p4쬠EH[.a?$퐕g)/WhU9fƓL.rIӁ<9xT6+Dm#sd:Tc3P^'œ0^&),qkfw^+t媴 ovA` &'"aX g]oxobN+ 'UEjn1ў ߓGC׳͛ ;4ȟ*4zS%bꄴ/(EiӐ{ٟ?Z+δ\$?Ù/esrJo9mHD̴?CRza5(nMD@{bHޱIb^ ՠ.tqrtPRl 1‡Ia(X9/x ![A-Y0rGNVT2֘xQsMy"keɣ>o-l1!z}fz 'նCv 1mN_'MXX-k (^W^(rr"I+~-5.22r敺@5"'g=+3qƴ\Xg3]ЂVÝ3+8MKyi9g`Ҁٞй}Ф1 ٤!~$MNՋ@ޟ`-cU-;kʼmGFŇ7 Q¢_UZ̮ҺUQu)cEXh7Xȗ}7O޻Zbi>Whxqӏ xqOVgfwny59!OkHB6H>m➫y?D"a~6c,)*8RͩzqVx I$>fHp0%JW/3([O`DQ BxmGBNGF- _@5*?}:t|nt\UߜE>s)-DSD]ץdk;|T!鄄=1-stvsWV41];<Â>[WIPV̲r2ܒL>KjZut3j]ܸ \{tZ.ὦpTε.Ul&z;7x*$K#@bg~OO9CNbrw\s'{vZH!7Ry!9ZCx0 \o!+$!Z#98җ/-)򞣞**窇҂eD'oeEIqNB3e.X\7[KY ;wK ݀Q|ۻ@Hsէ#iAy/ŔK9}U\dXVE}v1{ 1Nzw3IWx-]hK6pbMTz-|npI݉\ft<;eY^!E:&ZF겏<ř+͠|%ٶLOۢ '2/ᯆ ?f/gMFу.C'x6hjUX}X>sFP_:QS?OGV(MU_VJrfr;2[3=iB`]u%LGNr;lVN`uL9S}+V9umn4)]ݬIE ǐi M2k2ލP iZ UZZRc"zlݹX`4TL'2j:#_dVnBYZh@K`n虃TWw*xy̘uׯ3ўY[fg3Rb4  9P|<Q~(E8?[ofgh2bvw8cs+hON ҐYPco2r7T)a5(^ 6H\x!>ho1 #MYdV! yER ᄼV+CLWgCn+"mfVtk[o>=suFgc++ksaC!?Wj"No׫k)E/#L"V,G5ǝ,#?dz0 ?qbb<}--4\*?e3O(a n_m+(BNa-Yh};E@,,Dy‡Y5kB"#w"tZ3obW/(| %L46*^YtQ`Xe ۉ{~f[_ 򞮦h>c\i>0cZ^㗥?g@ƀjk>F >|I\[V]&emA+~\ @MmiQiA;@fp#M#G8+hǿ́⩇c1把A8-o^b\8ZF*C3> stream xڍP-݃ ww`pw  =\<ι'^z %U3{  #3/@L^ OAr Otrsč]266 '/ /33xn 3<#@ O!ftyjS [ ob }jo xW j~K^&&wwwFc[gF{' Az;t: P0#<@/n\̀NrEݿ@XYSlljjo`l lEI9Fz_6n c$E;gS'33*~vfb@;gZٻykm333W&u;+PZ&l@333+zZ2U\/;_o{{ @_9 pqrzo0L ;72 V2'eRDE= l<Vf 3'}UAfO=_dO=4`X 1s0??uU"Go/_do^]]޵/o>v;Tq\mW}D,ls gIL bj/ˮ׀ـJΠ 3Oǿ]-%L.VN'#7=V0=ޞ/ b0IeqTA> .?d0'Θ,&}[@mAn-@ `ӶӴӴt}kG_,̜̜.wfwfnwf@wfwfPyO:q{|ߵ?/ۛ[w׊3 Pj0x/9u>"$dn8݊$HP/x6|iKTny6Wm_>Qx,0HG&` -Cʍ}G`h^ ,s4Cz^@,EI.) !,- zL<I4[&kÜZs9.! A ΂wiEV"\$UTJ]KR˯d@0w_ue-NX5톑.ul@ƒ.sѵ[^sTe7IbRNؚo"[~n4iYl'sroH'|Q ˟۟a(49ˮmE&Cn) ^ì\._&CEΰ)-=d`8O +6}`-/(զ5$0fW߄"`|'ԄL39a>eJ~\i߽HF|qƦNU$krb=q_peŏbPS:LlIV[Zw^- fB XmyIt(ѰTGh?? ^2xO/ fS8j* y!f9Qq!-V)wjuu5aؒR?>FNu{]"u=лZ7Zpણ,"|zQ`y_ӊoZH4[ jbK'>Z.dGljYVp!K[SȩW,&i#=#vxGE] nBb/7!?,ZR[ͻ>j)DwɌV&bj ])an({-|z#f{Il[CbH\a2}J霚D~kt N)m^U=C|%E[F6<cIItF ZYMxIUhvdS&jr'i|mvɃ1x[߁q^[%%Eн"aX}X$q 2䙠'b,ԭ4&# m Ȓ{+$z>*>He'AqA R s/]`KDXJ7^[c5E?"+Dj6U5xLUW}\Hst#o&j+qV6#9W #75j3J>QjmF&n H:.@_rO+l4;>ö 2MVy &^V`qֹ|ώ + ; *GNG-91YM\tD1ԮW g8ktR| .EN/l8;0tw=M'9_ ݱrC$0?L10G-fϓHU5.Vx/5|ZFx(Rނh~z@wSb֓ X?cgڛ^C. RҾ3L׬9 s{PBP#ȬIT 8ž!qz_Ds}] 3K26,z 49Qd$f>avc݃eh`/ҋTju),2ّ cбo)&mX#Kįؗ-$33yڨǧΪO~1dZV=)>3[f.>J? #ݡ}['PAR텿H 성+QQeGFIFZqtɧ f^Nl,C)J`K, a͚~i ?YCϵJ92~l/(hRzubQj. !;:,M!ΣFxP/+=\ZHIa? } %{t/q;nMa7E@ i+Q!hVa0l;hl܂1 5U0i5 UZS);> eDdѕbn2YΑ @%^0#碬VyQyRǴCof{2. ̏eam{/%)  W !;e8o"%X$2_Sn-aV01YG6!G|vEc ".8Lmt5gY ^PǪnN~: Rj*ެ f`غv M]95SvF#< 1T K-^?'/”ed   ; 7!!(C2ז{q ڟa>]a4ψa1Xq& vsl[̱3;m/s0 u!bpJ^=¥TCJrni`~|bl菼hJºxO0X Z+-'^iBFX;F }&}t@,'KL \b]JM2t'z FBVyznN3i\:jh8hTj7Ʌ\Mrյ$LF? u)fr3/q.G| ɝrOxN3D m"(v=i,ѧ$,L+8{U|5H.%AAה9Za ͽZ"Q%3"|]E:Z:&z}`4bDrI7½spkDzk @Zdo~&{X J0tl4";M`Rϑup\ h8”(zS=&$_֋Ϙc;lbg%ģ`Ĝx/jvgOQ! ~}?l‡&S_lkQvy֭(GG NcOK8xckQ<@0$4JC Y]q>ݠ(Hs{!1gC|@61(3Fg1ïGkd?' hydKW9U)Y +;]G77}H۵͵_%qg ڃW֭ܯBp!,1+Y8]'%` _rzOj #V TOv$;$;m8`>u-;czCVxԸ~Ԫ)EYbz:ru𑒃5ML#A61C,U!$ډʛT/SRL! P4b, -ERVR]-݌TXR9ŸqbgF>CiIhk:Bl\mT e7$O¸rVē*çdeTaÕr5z%,h|#!YpYY}` &*t^c}-qSdB=V`c7|r?}jKԻ&͙q:74Rĩ_[M1+झϷ(Q#rs﵋_.#%* 9BlA@bXxcE{u% -UꋔmHݪʛywjƷ U ҏj}\ '2@D7~^ŢVp6{Jq?5l 7.p|P~}8^ǜo>ÀAśBrOwO^(l3Mϖy RS=OEHHStp4gAӇN_L{=ƣ dcES%\&ySCq̒C)T^[p6uɚ<;~KI_ܭQ1a4kxND1c~| E@9u[ߪh̒{6V&7$ע9}zxP:@K/+gT})EG.MCܞB90|gWh;Bk.Pv횇o]H[t۟x |dUHvg(lNeUEMj &s̩ǎ>źzo7W}>]B{T?M8}!NcVRhPїUqK1 _eG^tq;GᚸW3 -|ŖU>ĵ}YFN~6vqg˯)4ޜ)c.5aʬǗ8l[Ъ>٤ikoNLAB~-B\+KRSkfLs4PF#x&5+#TNR$E:9yǎtcX<]@a* oZ=/es$^fYBM|qǑ~%,ɉQB1Py}Tnl[hr5<Z64p9چdkp1P`h;rcn ,6TcO^^c9tZDex|lqkuܓٛ-UP߱J$y7ݛ.ӄq45Odm#S ES?;&z4vCShKmv=)'t`zHP:yAMEl'5+AV3K6Z4ƈ{ {턟F!E`!%i xr A`@$M39}D)GCS.:vVa. lI"(ZL`MQ_(zr`tD^4?V-{'^": b@\=%g@lXj͍ )۹rsAN>EŬ @TFԓ^lgl+a+6 9bO-p;VBd6܆hF>~\C"T[s} ܱӔͧ̒sntջ0N#ABδXV^pA##qq702pU.6iLfP(U)S~cYJuJTnumS-u{믟h䭹 اܿH!q3IJAi FHδUOŤytMbVocwaeagaׯ }KZDIJ1 %sh1k W+ɡ(h97qi W {gM~mc2'w5=G~:( "U RQz9Wi&t !FܐtjK46FtSox/Ef^x[7}>FzۙSW}n)H d2Bz )'WvJrby[Yj3W(do%dztei1=˘h \uO?Z|YA̚ʩl|7N)ݹ2Gdx/:z6ˬ#ՈnOpM%y{|>'/}_VR"W-XnaآP`0LD~ț7.{tA0ji]-cdVl[Ͻ6ZFz˻\єRGa(bn-5_Wa;h_WG's>Q}aQPʴ  UPl~E}A}~(=hg^~.pk,-*kK=䠽P< j-7=vTtMiBUN%Zrb+OT6ԍdk%ЪK3 tw9K@|9S%<BxLq/w2'߄*Q Q6FNq9ʪ/S*oȼ\kas-\4;#5#=>ZŸpGLkC ǁRh:Վ_"Z Zictf Wn fw;>L41WZwPH('6rQ2\t 89yKS=T#ETleTe! gY=n<7G40:4ٔ0jD$D67Y|\÷[{:\7T9+א&[TsGC3!zO8)b>!aPͬjyX7ޮfx/dϨ6LO \c(=\/y @(N:xɦSQ0_]&yA^ F ë/ѣC%IOc3tm=e4hW͝鋊]7|W_$^H7Tpac=y"RĝsMtQ/"rmseK}+sØk@uu6 ~"7Tvrرi̲рҀMO\∄<)Ty]&$(ui eOJwSa[AdQ$&r 6MwQBIY2Sԗ,'/fˆh-dgȎ6,a&GZzKbeGS%&&r ֣XԸxSV/E~<( ^pb"hoRy _sNQbLHӳIcTE00%}~Yz?n5̢q1*L/.Q "?(ʮѿekT (Sg4Yd$=#XyUð- QZmwMPI19sr[V4d0H|HUP~=UJ3h _XtqGNV6+в, 2 G6^mg6⤭62~NE֨MuZ3F Vq#ӹ6A'~t#R%>2V=7'Χb[GP6ˬCj(FHhX }Oe o\*kxm5c왏'ī_`>,A Dy󟘎^Pw"7h~  #0lCz.x;_+Q.<̀9 r[q[xMuWFÚqUL5G`\U96cvZTT>uM*JlAg5F/9 -n9I|.cNt=<`E"MK'qlWʓJ."ܺ3|!:D ci-q|!lF3%FNz%Hklť+o1Cll(k;,Fk.=V3!͖OQ9-p 3ϽVumvA'ݩzn""0 U2Ѓ,JJI5|TO-wSm0n،\Sa%q]:uґLc]-;6Y+XctuDG4U~+4´=O,I7niɐ1ŲSY~ 2a&=xW!Ę51k#J|WőM<;I?@8<`XI(~AR>N>̻&\Ly (ДYMQ%pep0ZCDd0kj4 !~u2``&H!S+ic-7~M+ws"CL #nDm!VLOB8$ګ[zHbOv;/(ci tRq(RtF=pElI$Sl{7Af~EēDzW7P$82 _s36·|(?uBd=IE_O̮&L+otGRt60O\>x#L0mI>,nCW$$;2;lt =$"#f*ukpՐS+A%q5:>ȫg'Pi82|(~t=b7&xD;- PvPޘ<m(@RQT_[Uޮ]_y f)UތM5nba40Q^\]d|,#~{!Sh$Gn]Ҏ15)7'8Рqx-:Ⳓ,aePbD/W CSOѶ].ۧxstb~v֗ EN ൴'}uSè3vU[ N}PH:H=7w3H+t`+R]ՄbK7/g.[MtV|!틅Qz^{=d~#bˑ{[j:(`=.s} bI죨 ZZE[R2&ʚm+9VÉ$YTWBNH-)TvU|Z3Jk{򾄱.kɊ%[HoR JJU$H\SEqj=FEsY2el{/kі_]x\сm0;V[2xը^o(7lTqB L:pD) caY^ &EUS`m!8Ap@Y5u*_3S!7?IIU1 139֞zbsݜMv!=r_bj!0Gǧb|SL.+J.+9#<0ɦd™*Hݧ B9;ǬZ^ -Xkf"[{/뷤|XlnJ١;r,LVdBN5jϩ &(?7MsHK  4 !(ryëiiY/~D.$ax;ܵψ * a*1V} S7Ig&bgGp)<蓣ͳ;oq^m6K F#ڛ 9Oq|N0V)#gK'֕{`"Ϗ"kmtZ olرIpj}?!i endstream endobj 399 0 obj << /Length1 1765 /Length2 11466 /Length3 0 /Length 12584 /Filter /FlateDecode >> stream xڍPҀ =0@Npw 6` n]w nᒽ9;{kfާmuսj^j u&1s)PlabcfH(+XY9YYّ5@[Z@'g؞ ' E&iy1T\ll6n~6~VV;++ NIW9@ :#SK<@Vu50:L&+ˊf&uV? 33RXԀ@'W9w%;?1#S4@+7' E` 2;؛/e@6`96fw _&ff`;{%d (K+0C!{߆&W_T&/S ]#0/,eo.C' r?kcvY-~airtJc"BWf XYYyx@G̊l/5x9/e}@d/gW S0A@K=_@@}֗cu,bJr _8`bbsx^|7 <𕵷Ne?=@π7s݀sGm_zڿ &v [,^:2YGWhrZY4[t43'b4hY45-v`LlG2cf6/Kg.+eo6=k\''䗣~!.Pe =x)`vB}\ߢ%n/qX4K|<b_}!Kprr? , | g_R__R_|Il|I_dD p\^.ݪ@; yal&d]vW#Fƴ3Ήq-E产 !xQ9/uz7~Fh;= t{[瑳 |g1%gA+):F;3Y~:Ci:fFD @ jj}|!:vZ>okNrx u(M,o<"| j 5u.B%-=~!sqӀ<zGcd?EGY+Ƕb_M-ހ g ,nk A%İ7Ykf`5v@R䘘be (5eZp1|`PQ8^{]X~h&OҋCа8`ޘEI_YSt8ig< ;Q>Zb' JZ)Ѱ{}opMr;ڲLkZח՞1K  n.7Dj͖1.wt#[#ZӖ'@<@ <۲^= 5BV[HrS?NV4.Bs~NuF?~''3b:YزW6u!90׌?ߙG JYѸީߧ@^^ZEӐ`fzU#\\9|&{2ßz4p̺_p_fΌEdJݏyR:(Uц&ŸEƝHBۤ!m4İÝ?/=Ė҂T#!qȒB۰:svԞ| =qPD2'-G*1m ?rzp("kq?GjD# ;;D!i1%^b9G̉ DJƺ)=Y;7K<#oW0Op,*FSߟ URc5 O!ҝf4gҥOU^}: +^:o!4L2Q9hV0,sk:*ќT@ = ؍G-(!TH?9}3z|fzqLRD-1<{ӓAv w8 >ϦQ6Jx@tsJǎ3a(wcq5 զ ӻWkR=SJ5L?;:~M!2IM\nEw1u3h2d1Si S!BD La )_(ZmX;E[98DI= =+sß!ضi϶U6}њgyN̄u_GP3eɎ-V7X{w'& DOqΌ "rq4WBO=0Q}\yWz'+bj;n YV?&N=OW،5/ >Ň)&7H+p me/VҘ'͝I0N+Ju DU `(P+*?Rz$>AnFTu#H~F//,t{Q*2垥|4f !qTaTUDOJN4npb>cap[0PmA *78|ӌF7*?p† ,{n1.gםl4'YNdᨚ<* ]Lnxqw77Jhm;^BoAVO 3E;,*(hĢ_D5HCa17e7gSoU~6i7жgKn2A*ɺe k_fd57u6msB0Z2i[D &¨Wbt:$&gqvZڐt{鍏Ww~N}s78·Z`55BBJZ/r|s`V7O1'Y:2z÷Nlb4Fo'N%`Omm[[΅V uo~@@rV '{޶`ϼAs4Q͞ \rs#n|s^n%ϼWi%1#@ɓkfADMA$eIBU]/?ucU.G#TB %Xۡ. es{\%H ou }M' ?u\PqQ=#]tPM t6Ζhԯ-&PDcaT!.ر5SZ =Op34(ϝu ySa Q&ævBvl z|לմt3zVTtO$NKg)[ _W#.bF.nA0X'\P;ZAG2gNt)nlOBwNcD Mt+wRy\DLA9*koTe">;#K>Ԩ f"eLG0 Uh&J!ML'qZ^}> _jk]N Qq`F7u)lc M3MĂTJh]\H\ {ek]Dc ]Mi5GkS(֩=j}Xdc(F*ey%m"Y s[pI~opȥ\0MҴvz1Sj⧳sM%J]TFȬ5'ٸ)kIpObT$h̃Ve #:&^f٨z%~K2MgӋQỳ){U`e+nzj7MɳLقγx/|ɨx8z@ǘIgaԊ'<̈ͫv.-R@2fzUɔ)=9h2Ϟ,L].{Fݯ}i~:ҙmJ)O\` E}G鑰q"h5Г~=b":Pd=*/ '& GVux+<ќe‚k=|*/b局.LArJ,HC!dчUDY )5* K~}g\87c2,[://4e[,a="U ֦u6Pns-Ǹ|Ԅ$!?É3e;QY,6\F l' q[''TBWQB /?%f.<{Ƈӊ9~7"l|OͶfЛȇ+e =^%qk RmV݃=ƻАMVĊ Ô#d5Mt&׍řʀQBե7={J c :* U/CQ$3nm ڶ"Z™y6>W0F~V S6̉NDѵvzI;{897T,TӅ0;8Q$O7aM&`2`#Z{H}\>b 0qݔƽv-a$<Qg;RWǫl5N褠!Ň;_ r= bQZtJT *& ?,*,8QkxutQI&AoЮl䏥\e`(]+њVk0,)8'f-4&\@~{IWEqy%d}\gND׎f]$Mlަ3 o^0L}A #+->)\z d97jzYlDo{rus{\jVG<=ݣaRA_ou_mc @:1P3Ĺ6}Iř?Y.%Ʃp|ڽA# &sljas>MxiiK]bi)@_i߈,w~չOMLXm$4V؅2tB:f50ijXJ/bWD]F5%P^xkA}?Тr(c0=kr lk /ՕFJe ٕhCAfIļ@ۓ֡|NI䛾쇝ŪŏS?EBJv5G]) 2ֻ=`~䲾; hgZBlt*B9(<NmՓh|N{U#xU r}k${&ѐo7Đ* h~ːhzI֨>]Hf>jX1xЈ薨*;BBJ<ЌXŲ>h $H6Ɂ7iUY)ϱ,>q>.u2l7ʴ) T#!ks[ iݶ{}c8ԍqH_ 8 *fԍR$d4$fϖtf+b+L j4;dۙ$D|iQ0E6rAܹ&w^uxL6 qT)s({= ~vPU,&#݋u[`aXԴ$@o;^~nD .N3lqӶU#)=E Ĩ(Ν=t#5߼7Y 2c@w[ݔ5 /9H96Im5/O\:"*SߎAV"_hh-iHUGi޳LϮKɳL,W`!tC*F(=T܎aeYIB*쌥US)e<֍xl]a^՛ k$ߝ*@dzƁ{"Es2/iwYHvCf6?A)n-m=o1j/o-P*L\ v^K}{!`)Vm% u~ykxܚݽmgU@(jMW[1?QdH8 )ek[??&,4g+Vhew`D~(LM{cxͤib zZcc\oU$G1x %F A$.mծu哟DХ+LCѦg+׳vc^dӅ),TP>n q #&lEӈ%u[u\Q( 0B:rKض1 L>V *W|3M_> @8ԼQ; .dД$]sAu uҩC{2{k$m6vhψV+Yi4m! :ܡzDa*wq#[l"@'Ww%ŌnR|Kuk}5-cKWJI&1=׽5sȴf$wHZ_^nՁC3FQE2*.y2_`I~ﵔ~{#-!(\#K}lLaWSXm%3ufo) >=&ևMrNo8*|>2e.uim/_%*ѕ!}D`*ASU7Mnu"y&yL)ߊkK 289c3hT EljϚҫs*1s񨼯ʭHՠA` h^$n57YCdU2w=?& DP9P ; 7(a_Ȗ^mdd"<`I:!xPYV|D>I?]ȝ|6ЇHKI5|cx]Ptpuݵxsf:.*w]N )ʌr|/*=&WL&ZfPt^fVxJtRi"e#/8:_Nkq ޖ@ s3x/ko~y|39}>".Z|4\a+Q/[?[`~j-p-xWFq[uBopƺ+2X @vjLCpQݎ¼l@l}iB.WﰷRVkFFCh яv0=.WIXigg-4 77 GȆr+F/euf^}d{vh#17K!:#њ>}{4ϠmbE},>yQ3Gu. ,Z4?[ftizx_"ɇy"dC奰lަQ5֮a6lі[Ě>L.E>3c );_-֎pZ1N\͔23v.>iTފ{ !MjOFo @RVB8)>?D@B6ɎJu{c@N}Ek)CW11UGqŮF'B ^^vz# 1ps7I ~m&]+uW׶r)o+-Kaf)Vv/6\ȅWNqpA7>bI<܈94Kܼ ?vtB]MJ%.w~(,x C ]NfAPw-w3[0GNCʱL4MGt30{ iVɰR;obrgȎx־878>1#NaY‚*t^xk;XjgP2/[DcLH=}bxܭm¦JVմUwAc|1iӶeSE"d [ I@q~OWq:=϶0)9=H宜m8+]dVƲ>19Ϯʚo|H;^=RlPCjwINϜ0R=v|{Š7O#S (`c}ՑtKoHQg))=sF 6 uG՝GFYހ~əPpgD78FٺSlQ5Ɛ 'ڔޒ/b 47+`K Au6S٥w@a7 Gvo860,C 1ށR nL0 7uci־Yya^-<9\f6|~U NUƿ+Ps:8{d*V5=n;=QL[& wjUe!)ckz$IeGl hby!=d,#gW@\x ϲbfi 8e+.*w+UwSɑe/-z\Mg28j#̣&类YٹQ*i%"6ux? :, !lޕQ$587Zk Dvd8cc]qw[aKme(:ݦU:*@B‡:@<[G˃uZc?YQu/F 3O L1;(Z@V}(i]U?tV>> u4ȄfFd}D߄USOO^ MV%\>7߹4k;XA&F\ րMb w-. ĉM#cbgmZ#Z-)Gh7\*_l s<ٗ,Ѱյ*~6Sg=&|#}Jp(7Yggt> stream xڌeT\C.;n{pw ^sw{c@Ϫfɪڻ QTa67J۹002DTdUUYl̬.6x uQ' &f]m,lN^.^ff+33xbFn9FB>Mh,<<\,MrF.@[PD#%$?X8213:3; -],@gWy#[1ST-,q؛9 tHve! #˿r9߇LLm<-f6@, =/=輑1wF a%TldliWLɀ-ng*jok sq+?1K' L^olfigjW)Ljv@)@&6s t@GĂ ,Auz;;@}-̀?Fn@+O#x hni[dASda ! ?7fRUPU""oVf+ o!E#$Q);3{?9g'4֒ 0@{u9M@XOG/9I͠?adkih]]@ gZ jb9z\@k!lgmFv̖@SEK_kgciTwQ``afhLAgtV鿣ۙ؛s#''#OxfPrpY@i {Lv.#P3{'$`LbI_`~#o `@"nfo `R@*;h#PֿTѿi RKgPƿbldblcl񯕅h4s??fkyP&"PF&6)7q,Kk1}H֦R'*NJ Z%2/yƺEFY^YKjã ^/iN^mOXGĹ?G_3uG]|K*fI@2g_%-`ӋQ8x>^Դ<:\íPD^~WPӡoyi:s5eZT3LTPgel BJ~Y׷koMe=pşҜu:l,"tgM~=~]WߠCO{J/hpLIcvprr5}^gxy` Ú~w&2u[ >9T}a67=tu6ʡD #)rA5QO=MPWI<&eY4nHKpa`XȎu `G;;O5py^7VK*L2t_EoJ)_nPD+ .nYHK5C9"*ݢfɋ4~A4MԸr#'﨏&;h;GYuoT-3u﹏C'O /71Q+ bZѺt8g *CG8j4 qcQR7!% a4)f{C}KFXeT%O = R&2U#vxU(0/|)!)(NRF<ڏ+xOJ*M {ys";zL۱r ۑ-f9?m3;[6 <>C `9FPڥ+}:`hS4Ĺ!)>yĸR VUrk8r+h"p5L^4zֶpq 7*p6%bGGIJ^ӠH0ˣd'\&WTu6E>cj<]3{'8%ϷV+dƣF?>L5#~OI:.I8Ϻ@>uj?/@Yc\8i3HNUȆTMmҼk'TyNUæG)C޲gmުq̢ 2-:;UY&f#o*s#3_,2!sbT&7Bu3p/^rmRýPUO_ ^g~E\P/"_ W*fm3'ylBx 쩌Ƭ.ɿ g._nwTl_TI#̊ Mڐb:4Q_$V(Q'Y=L@on."qnüLə6|X|}&ji(Q~Zx=Dfb`Y3~ }W(hdz=RÄ2.IF*kuB>.P 7F EfMtn&/TÊ|_tcO_:Ai$Z !I*4R=7?q ֧Wlͯ2|CY;g:]Sq7\[uB:&mn>ra雭#}DXȧ2פK `;[+23Ў{w*Շiv+䲀5nvFmrCKbAFL ol,deGQS)[x[cdIȡ:zEQq#H }]G*®oI7kq'Pa? -;}-WL7zwUӒE8{)/b~M}{_3J&r.\l\li{#%HWᦳ"I&0'|- %kĚp50r$jӚ=Qc؀dJiB-P8QE~EGhą[b]Q:]o*A.UbH (ƍOI=xٞND2l(7W)(qO`6p&35z#1cG$sCbmDa'x;!|.CL^Βnd9MiM۹.7i슅y`l@M ;}\q6maF(zխ;Q)b)wOf>zov>(K!B1~bqȤgT~;EH55*'^ڰE^K@T@}?R7xZ ů=؎p6\6}dzB-GSLr> l\lN,f ڪ"jze1yITf-Y(5`-P;l2)>qeR~xW i7˯ *N{&_7K%߮1?ǀ=Z@iYşD r]%RQLGjz? ta.Hׄ7>E[ksD_n.Hlo}p\u$DT@iS4se=iBvB1Atrv=m5~9WG൉ c!@5){2G߃o!aC>Q g0s  \ ѯ̴23Tz"u,Z{[0ғ%ԛef?6-6GE1]7cRZ)^sn_^pǦN \*KyxH7~L(P7ssӶvT/GI*aE+#VM.˅րV_g8p) ɩܙp4sn"IA-2_M&VZ5l#1ɑZNl˟ 2]-TV)|B5TE!ٚP߷jZi b Ƞ'>~3rFhҊ:­Jyq:D, U2̑=EBbB82Ш\RtzoSRPVEi|BME³ Su$-ټ{]z8n6֯^lb7]% =Dtܞ޻a~ga!нOf5 r`鷠sN^e9CVO\^$@yrQY-3<.) vQmnjN~mǧ'7Zkt裄M)Vc>I2\ UmWYž^uFP7,%Sy o a)|>9ɟ:< 6҄n95EL`PC:̰>Fh/M5ܬTE%2.G8Sa=oW}h:' 5HRvqgW3=S|oN_({ْ W-iq%5 Ejg˓ MuVu:WN*SASQ{|YPc H2e-W9ld>bܞ J08A\h|GN5w*Oڛh/(Q;O;0^F5Y}. Gnk};%%<"(LJ$ըP%fڙ^l;:p.y=}2=Y]~(KjgjJ` A9wNfr2NziuS!Myb5~n VLkC8JDyx\քpS)D,FQ)cNC#TÐi&h2v'/WxsKX]@d 6-k6 vY?ΟES <` 'Őσ򔌃9 HA9!;0=daTͲ.34$!yP%9=Aw|z+Y]-!YR\Yk$P-ћ`T%.U֊ӵU#t ͗|@E`PpRhbkq$Ntz8*8n0sYt,8|]xDZWp"|1a>j$8M;9NM?cIETVg2 V~ :\YX<s=ma5qf3B sW'q.pe%L }2&˚{,5+}VN)3/TjM@~S(٪s/,3gG(E8+S$˰ ZYSYj$J$KMw#^GĠ +-x+3B wC^ߋ=_CVمNcWJ`57-WYw}$>ﰑн*rճñ-gUҗq_z-Q_Ou%Ͼ5f]%Zȉ^q@-}E0~Xsy"OQ4aCR^Aԉ Ì(}FY)R|mջsD[$s>őEb4Vu_d$wT-s>?W#bo íoӊ#5j529%OU0ݮ+v8Gh|.:&/݌+0[+I RD1֖ VB(Bjwhӓm0 F7C?ƬQd*[j#ں`;S(Jf!6P&>|6$;僪+MVgM۞L(LU[V}kԪ|seOBK.#X9O17̪Y!r \"k92'a edd7/J6ҕm2b +J51$5.͓B%K,k TVP_Mt8 gmBrrYQU#? wbl1"mI_~̀!?G}*o^ nO6{ok!Dx~W>iaTQJ.Z7MK_<\mZY0OhPMSMc e.\YT}{bN'I>Ǐ/,W& 8R\bOkdFk?a(9 {ZGʄvaV{[%#c'3TE}K AS*LbYghyl^.u~\Ps=:j<FC6w;ItPq-qbս gYYHe"uy.R_B0(58X+%nU[8rGWT݇!lYVrbl3_v:#]:sz~r@v+ 8$#JE}^hG$omݪvcp6.vFjQzɵNA޺ĭ0,NDDy5u fuy$Hȶظ.AuKcf?ta%{=AYL4̸E5:⡙+.W vm{*HcSS~*2Z#lgx]G A!^b bo2WյpDм[tS$;pZIWҔl) %P'CR}EvZhjM@%V/&K\WPO3u}x(Owf<װTWt+_VТ{~B[% q. O-f7{&2E0sOܾeodBdkagP$8C1}᪝]LZ gD[9Tѷ;2Jk.ŷ0 ab:~c^ c♖'@ͪp~k7Dk] +=<^pc{`0I,ͫxKXBU,NRYWgɣALGLrH> 獛OU '],r=e|F|WIfKNH; mPUXܻ3`ouPy_TnkMg\4gw˘qMrWA/b]l/jFήo~b0sCp a n6q5.ݴ6C A{~nkQc銏ۑZU!m9ןDJy~dT8 -S(95ǟ ep-Cy2&~:= D.*^sg42*I;ey?Z$O-;\) e-8*MI>HH["(qc:4Kh,%ʝAvFjBj2H==NnOДz&k7ur2'1<=FE |,}ݍ8إ?{+HӦ` Y gc#"r$~%u#h㴞!'Gv.̙=sHB½'un^a\Mh5!{h>JMtİϘUPca@qM D _Ј wXgyqŻ  yET9,^F߻'Vh&&f)#C}o_5BHt +'?e䛴&yuX` c$8vk\x'n r^t?z;hf ݚs \KsЌ-˪m(y>kIY45Af !2Y)[{ٳz$e@Ca5ύ1:Bob  &).Vrl5Yat9淐!ޥ?mmt(gz[iBR$TgRxv3r 8K:;36-¯wZ@_n˳ӵ p_U:4]16_YrbwS2Z\ub{S72do>9/l Mߕ$FG Zmf WI@Ŏu% ^3Pg{z{8[F%I2Rnj=(>xʎ}4? {l5i,OPTg)=gJBi{gˆȶۀ^GG(}\ z0=őOҙ(ۭ^ UhKf]G!(Z+j}ywQ{Be%aSosg"{"4Jϯ2m hMXY&cё?lbGDtlr/>T,NO{O"u|wof]]LV) oH>O < s!ЋgHQdzߪ2$6M`W\f:ta< ҺjW3jJa5 8=*3C)= 6r][5`/d}yUOG j|Of]jW=ck@>Qja8 oqOWErPq\ơ,m4}ku]шb(8 sZ} wI2UGԾ$UxSЮh{~GM޼#ʞ_.J$_)^3>JtB+4XZoǼ =߾6helHyUc; WU % alrᩖ!oz }nXa6pmM0, C%?,L ^g'kH;˩aىoojqJ_IӉ),f!o9p("2V8V㮹#8S/E~̙zPNT=|i؅X(lG9%g.b] gK^Ɇy9$)-V]ޮB<՚\.UPd :~^JۙĨY'0$Eu+R(砟qTn?5ݘ ~dԨFJp87di3QgTVCyɾɛ>&٪Hߪh` mK6i+Y Vb}<\0GH{enj>}{Fz@iTʭO-B? B #[ZΝ)OXBkL7kȊeKY8(¦ﳈ(|P'5HMIa FM昹c`$C5D!8%8Yjr୵,^,oEQ0uMw`F`# Ȗ5Dae^;5OCw}%=[-Y7ӟ}0Ί(&jD$#;u odDݢo7RN +4?+Z}+eI,[YP| Įڞa߄UP+Zouxv[@m)Q2XuF5k9ctJGC[S;|BiDP9bA$<`E?7 MFr RSK5U6rfaļ|ȣEH`޽#چ%ngwCO!|VmsaZ+b3DYV!*"W k >v<+h,B>]5/*nF:x)50>yS*Snأ{[ZEyYʐ'Lp~!qoO&k)G)H#k+j~Y| >˝|Pya8ϻ TihQhVE [˛f _RhB)Iچ@SvS0ҪL%1 lRp;-@ ^}/caCN֔7X'-oJLfP>5eץmI1 C WL&2IoB=f+cU3N<ϴoxF!vXe5eGL5zXp잀2|0uE+Gkc8sZ YX~<njE,F[YYdFHmR!C6"@7>:\*wb1Y] zH&3 ;iL.*d7qW"豮Ύ>Rs¼qB+|{(Y6 nGX̢D3H7m#;ܾBkZdŰ7"BAUF>2逆xڮmrդ 6C c|e-4d~_ sy1B۩_>9?~_yن@I*=l\2tpBV Ý?9sPwbf KK=srݮaϼ ̴ X~{8/*0r}_KܲNP:{IUG bf@ ..t"zճ@- e ^F% FX/+x3mMCv Dic 7>-`Sˍ'ARdF/'C4P˲9 _Aj/1$.øj8a䇸OdyM3.m!܆i~O/JƸn`r1 *-J*dN @ dMh˨vp4*u @t'f3 alƸ'%t僯@$KIN9*95'HuQ ˱pfAB- "}tvXH^ ^W8MJz Rh}Gi[\y?~\me`Tpr۵` 7b׹NjMoyn)Љ-I]VXKCEtRCMNq,y_'Gzu\R{1a(m_SUsGT ^d}/; eX֏xΏ零<>J2d]!Rar X\ProK)|PTd(愞~ 65+c%]K uzbu@aIZ>BBj3ɦ ULɾTx@Rı2TfY*0=SL>_?$K4_6c3ɪḽ]X.B@C໮oY+CK'>rB 7fI~z:F%aLIp9"i æDXR;s(XemQ .:磁 ; #>P&qIzK * f%}>ԕ"bdVbfi$9TJ(7Nh[bhqlotYCե#ŴaĀ/e95WQfT4EF{{H@< R& ~aAC-~퍀VVp-1ը"ԣ<) V7_I\ak>M+*/W抹zu03^F_mKTW-Usa4ݒ9y`5 .zc@o5JdTw${uګYpk/7t?n!jJNq'((_P6[ U~ɼ2f 4MŞ:w?F4u P냯-\bys@%nXeAkH#x5 s-9K\:/,g[t;vt> $uaM-Xi3irsޚ3=|][HV~v=M{P]P6h&Ds^!n`.ִZ)s׼%;D[ScC96/c%@|v{6g1$3<ҦJF&:}2G88J~8X7u|<6kQٷGQ;VJqs+ߢ%! Ьe9OV@4 ʠV|cٳ)Dd,?` ){l G~:磳uʵw_6<.B;B5Bh'Z}nQhw@M)pCH!HaV6xc,X{͗Fػz:x)'Jvݢ_$%Uw;R8Ϭt7aq(%N!7",ǻTRSV#Ry|Ph'ʍ.Do-I+JX^o'l7|J L)b?Q "wDž LMK3nc|qu4P,3,Y^d8}m!:y~i95.'̒9-^ZuQA ͼ*eӡP3'iIR&>hhsu%') OTKrbee4! AlB~H3W ~b<lx hrK)ACrqlӚYߝfB^!5 6uGrYT&p9fO5r:фR#2-`>Q TߨƒBn%?hâcn9R1t2J5m L챉z^zRg#_r>%&!7y.P?)E?& zR}c8~B(=.f"^R# EhZ,gbeWB%r0#UL.lʃkF3P#&L/8_'-a:9 JZ:Kw్uʘ=%L׳ ܹoVJ%Xlq!6P-T7.m)Y/|8'xQ$Zdͤ po1 'x,I{AST&soml{aQ58Uc^WybI/S/n;,((pk?Lx5}RP46})I[eR&@5l'HkbS%Ny"`^&*!޹0~byGrqA?xy]_hA G)*Ѧm$׵e Hz UnX#3?PGPgoa(`?N#LRxVv9=pi`.?/LGF?/׀D!:/YFO& 6IoW)e1YۀU͛U_ID)b/9Yxl Qʡa晤Q9j4i (`/[\;F]-jQaw_NFO:`SxzorڹCaJfoo2;6S0"ir}1xRe mT0A4C閿Kٚ)#kUSȈD㑎VDe 4aBT$& NHt7T-At[fF+Os ~`|(=1a$/F4^zHtKt*Ë6& N29/D ل $*Lo̙PF- dBroZέvrŀUk} Ծ@tҕ877|JwܘV endstream endobj 403 0 obj << /Length1 1741 /Length2 8680 /Length3 0 /Length 9780 /Filter /FlateDecode >> stream xڍP-L`]wh!{pmi܂C@p =H@pydfUUWuk{WVP  Hjks@ ȍFO sǎF vu@! l2 S* p s n P?PWa bP(AnhPgoW-L.!!?`W% ق*ZPK_L00''эj#lZ`7 {dhhW?Pk' x28@,NnO)NV`WSu @gʟl7_ٿ N$,- 'o ˩p`l@)8,h&k>7KW3̍ {F4O,d% ut;~'q[>7_kt8YYݙS V+Ʉ @A {Yr.i_g3i ?``;qq 0l'~W$?.''YA 9%45Xo `|BAj_NPП>:KL3࿹ԠOѹ1h?RDH?ӟ?WēpaOK }Z `+zaetq !nr/fi^4Xns{Z/Kۓ(pK:YB~7? F>iV`?d pžROh_)pxJ ~?H7pjx<ݿS=?Hi7z8'_oA]_ |NOOO*/4쟾`5T_iJ S-?ݤ m{?ޞ`m~j)jWv[-Iɾ5o90k6a&H@6 g۴*dVAmohX;Jk x~ꌣ?`Υ.ODT3= ѭgnG5@.s=ޝiYءUxuZ龞Dw>Lb7g pyb48X'Z~WR9RD\ 1#+E<w8ۦRK کc~̚撿, ܮm:7c7.&yDw夶ۼ];LOЀp( v]ZVFANg?݅DZC>4F)}`) նwwE-C%s LeQaO ]:VU}IOKzQwWA"ܚzʡ.uv$ 2YY}.3CQD+Ӷ UM+zpMKS5K/մCN覱]Qv~GS!(BF&FEmȃq}Jٖ{mQOrqdzGms*}(\~.]yVEBvy\ϛZ:;Zs%=_}@OEQ}eh/PرQVva|m9;I8/<>Ti W m^zT5Ͻ:ח1kQ* +Ǎ0GZ>yZUn}sŦ]@_(4x 5$^RnL,w. TWO(g90։Lm ƫoIKAM*~')[J4XA]"')q i p{pcj3{jɡԐw醚;i4ĺ=QL;BNE|`1X^D2n%$FcY5INjX>cga$U[mGo*dgڿn9iASg3[$&9娫%"?n`8U:yfN3r%~Kg3$:asjx'&?G/ _%PtUS+^mm <'[~bO [ćzQDUя!9Ш`3l3 Ms&FcIG$.vM6ώux)//n&h[>ÓN3SLDVp,uQb=&yW}9$3{@<<&+)]BP(xѕ A_c#y7AtqF|n/u YWwCW)H"Fƻ|xQMzos͗]ˍ1ލ[̉fjvXjY<#ES%*=Cͭ_•V~3bdaɼYbNEbKӻklin(7 پ["Q6ǫ*{BnQ 7,fvmCip+cv6"ۘ-^xתaH@W5[ajӈF`MU%9O4&9#izfVV~KtLv+&-+][2 z!] Ƶ X4}e0[K4ˆt=Z$o^ yH(v4.]h֙BE ͷAOM3/ndδOk_fXX)Ovb˱xGa;w}M.V*`3tuu~MNI ۶Bq(2"IizSA"'UT0YKxTuNqs-B!/ S{?O;jRcUR-qıkҳt;H394x Artk}ө1bԞZc,C3->/+ʝ^%vM8=m/KHC:Ώp lIO芞ȃ{` VB|W7fBjjbKs{lK#Q WE_,g|.pŝpr)N0-z lRT 3!MTF0%Z+lUluOQ$ Xhՙ{Io<[\i`DW}Xk"74J6: ^VM5{4$H{$N(qlKS|(!<+PBLƷש^DH47'^/YYomy\ʺ-^!L?r# u] T(%z'\i=fzc6$=Di\Tq>cb&Q>Ntps:Ttews%-Iu`\%խR&P Ba!Gg#rfmhgU <&[-9FE7{H%bg2%I%z(<񈢚Tl_G58[]šAC,Yf:76wU 2rh:rI7s/M+B\82c9țߒAN<'LRIhe&el=g تS6$]֪їWD?c@fd_\]+.&˸r%l:*E^?0M|fJ<<վޙ~^rZQEID̀0;fg d5)5iuSYp[1wCƦrHR*ƁX1+OX Wњ\C\ \̖E<ޯB;*ĭ7 mA<|F|XJڍxK&5{x\[q9t)AE̻jV+O3='(fziZ+21)&㹏72X+PoL 8Opcx&P$}]vL"Z.ܨ^ TWX7rTl:5D\뮻ё zO'moь 則_} zTYf ˲F3t-{kVezV"]{ҘuW_;X9|)YiTf#t91'AGޣir_AIZ3w m.M`NTbМ'~e;:DEJda49]s4|_ց&v9Ǟz^Uᎁ}Α,_^a.˧&6^>15kecPwUdt8Ӭe|Q#'zsfgϞZKsQSgy-˄`Hĉ~=&^g M=M[vKp}iui [i̔x{ƋZ n1D\["B0DD9n}RۻnI% 4*؆iWDsM;q?i.Oux~ҋJ`\C 7 zebl*u6C ~tN$JenC业$D^~H(6b6#x^rŷ59]Pg{¿+giIa"^}ś5: ZJXʂ֎~LJ,6`3qگ0.]ΦC>@OO 8_\5c,l'%(w$!4ԅUF<2Ϙcu`{LeL%Pg-@hRwx\Lvq$"AmwG6EZccؕ~j#B"1SS-ƶPѭZ37`c0">Gp4߽Wnp# e]x FeV7wc~/U[ᆨ/QS=%X8)<;U8^)ɟ< $ H}q&,U6riyqn&]X_SeIƨO+E@ebgmqS`Qrԗ 쥻RR%o]z[FƬQGGƗy8wpZA}MSPWIWߩ@m47被]a:e{,.)Em7cdD "Id-K0WWB:e@{=l_U:3(e v~Pzf5.JeIl~d9þE8@sAS6XdRCIda(iyHjg7gVB7${8x!i+ax]dsj 7yZX5bp 71Ԙ[ Q2(r(rNGz\ոfk{ LKo sTEߒ>cs6+ֈ(cb!B'\/SV0i7xO,71s9Cc\v:Q3: CFYHVO\+h15Y7I ش9lΈ̩aSD4(}C|J74enj$O%|̚O? &p/BuɐŒ jKg|Rlq&};31,)*xNIk!%Rez 'a-t}{M#HEZ0Ֆ}љt~nri40;?W tb-hM%O*Qy0Ǣm8Uo7FeAA0i<@$O';]n!<+^`iEQ[6{4QlՁK3B!5! ֆbZ.jQLR!qYKRF%=J(h|fiӜV3L4t@wf<pC4F柳qw(YtNUXa5:'.Ǫ3=3Ylt]˚*t'kEh,Q1m؍gJ>Wm&ˬ rnSq˼׺b}>HC%tsrՃ^ik.՛E~F$޾7/g *69o=>n9gKCYf]ϩqUہW>jC&2 ,'URcg86_ԌNV4?e1V 0݁!&ALL洬.sQtO(:81TWDdY(>5'D{#_p9%uOpJ''aȱ| 㐸o6F'nn7#CCZx-'Yc&*8YT7iY/rGه.mt${{B1:7h֗h$nqe*oWb}ΐt`K-6b jhClm/Nh<&:.vυBw/ixtJkh(iWʻVK8=0yɆ;WG|>#GFJ/ qu Ut> stream xڍTuXIHO$6fñ9BZA;iDDAIIAJnз~dz纮>χ!=Bbx| 0 @66#8'`3(`0ʧ\AQHE$ P BK p{6PQ>h_@N(,..;(Cá$Pq\uB@C*qqCex^pC{쁿@\`/`90^4 x@0U^ku]a?Zxܟٿ !P(#p Ň!H_@u+!@y} j?7tw>w8ז\2^CbSaЫ"Q^H?ik{W~c$'A Hs¼N~W{c]Q@U`p1h??`0`p$Wn po芄` 7+٣/_GP[S+(X^Q0W@Łb +ANHPNꯡ=dB0 ? WS/ Ϥ@Fp_ '+=hTo)+S@T!tD}pw7^:A?ƿ$#az(w  WJgЇW+fdH(E4+K_ @~>$ sZB~ݪ P4Jf/_oM`0(`r u m<]"N=~ ;Ph}өjCp iE#4R;gQ(h]g0~6B '@&kn;~ў7\/CyM3U֨2oLn ]_:e8R5LG`9c%1?¿ѵ '8S9u}6YwWqׄi쁵RT?mO?c5~;3Y ,Ÿ/+t<-yT(ÇibK xWŚe-lx٢ mequpu}  t};dZ[0Nm۵RзqNO^2PJmJԧޯק{3];l{-<$aO@g6jz.YA Pbە!]hWW.D`Se "&B-Y7 ˬ:|,?~[bqA'ld yi;BnV<1bmp XDg_4X\?)xTM@!&>S U2TKx.'n*.jDHUT1=yzm][־_c=.4$y 'RUHjNܙJY&-P@!i4AA'=paVhzJ˔xWTtF6wrl|#qLhnRٜ躰Iyq -Y[\ ! u%dz˽] "b̧^MӸ K!Htqgw3%K3L@zSYPMB^DsGpLYC:4#DeJE%KOTq 7:wx^2]|$މLrqzn YqB έ7Rig.\cP]Hb(נW45{>Ln!;N yl9'˺5řL &1XgWqc3,xgO !3[NE bDOiaƤ)~r~+v{zkLNfJ%vBSu%u0chd \`vPr}')~֑e6L袂 WF#eu|`'"xtzPp"3lTd^v }tb{b_cۖ/gэ!~hT@zo>TWQ8uC2%TlEI^R<6咎–?.] L,ܓ,~deGS2Ikg Na׈u"oHỌ83ZX9Ckn'~ `,g0#&Y9st{ŪDQBvLekxn>V3]8樃iZ}s 9mK3hSSӍ'n܏RoP<>4۽gE=kQb+cCv >IOJZje Сsqo Y4=H_.`[FkE|י8\\1@tay`۹{!hR-8oZa|ǣ:Qw܊:XL+&yG͵R3l ^[+7ޝKMV,# *ួqv: س-o&:;߯s UW6ͦ\hfH/]D&-zmώ(r$qiKC$.tX+_M^ɅvE}⭜V3kvb̺.6d$9f;wFo}EGfJ,?$xVZH./Մ."N$6h$܅68cM* ҁ.gmULZ -r8%M)=zk`cϾ=PLe]nMtVY-Uɭc6\V/V֝.fg9:y6F<_@CN)&CCiumr$~ lSA~ "b6[2N4#kMO~'eE:ӵlınu];bl( ^IJ\KgH^*;u菉Xxws/YG [a'3=Ƨ'_^y&u gH;1} "EaC/79m[23ueaxBZϨ/ܧnԕX[ :B-3 3h΍o)SOiE_^|(-\n3b_'>wMtĩpl\kLeS*z>!!"K5Mޢ2xDc̰y慯&'yOTW,/0uic^/W 4FA3+ft$o=Qj OҰ&\S;]Z w`ePYcWU {46CVUå.?T lLͨsrx;< I>z]Bw;41)l_sx($XmD aM1.g|asn'D|Ne›_S»0>Q{W&Oū԰x?GmI4w.8xP>?%. ?R&"(|SEFQkFejōGppk&2[Ѱq "Tjح 5rdҠ|> stream xڍwX>CI 0EjHc6bt#"RH*tHtKt;}]Ϲ9y<ؘ rV(K8D $  @66]wvAAQpC"a@UW{P@TR@L @QΒ@E TE!.63)# s;#`P$P;`* @ =Cvwww:mph[ju kpAYݡp `.W)<j:‘A;@>+; HOh5h iwAanP=Cv(, bZA3炰$4}VBZ)H pf=:ߧH;oh@ZYjՑ_pr(I˜lhDp-N_fLގ(G5/x@@+?FZmH?1f#g @ 'SȬPH{OlbW{Q@o^ 1 (H}H s!F%X/fZ۟2sH8Υ¨G&  &eK&pP|]јQPGaTB:W Ō#k^?0n@lPv_g@µP._ &/f`O1 F]p5n"@39j z ` [@~>$ bZUT/+@m* Q 㿑80q0_o$nhn~3i/V=0 &lWTΝw_w;PCi|!:Vl5i;^.g>ea>>g#2Hgwb i%kea#a/ks,FcsiAcJz Ete5{ƢCԳ&),jҍX=]3 -nA+;BФJR]%3Dn)dޖ7:M(oxQ6GŧP_Yg j9Wgi8F0)ai dR?4b#wo b#Gf⍖`(>\Lu3Ʒ)<Xdt!R-sZK#[%q{؋pnº q$}ET5Ɋ`3)Lk,f'Eih,EEa'$ɫ[i8.o. 3|gyAQNإֲAڛFٯ ==@:$/p%n%|;͚G>+D8N1딾#zUy֙f7B/a$hjӳtJI+t;^Db-]!-2}|;ڏGOB, ,!twVE"ZrT38^O9XD9 RF|i.M1 b<8"MYIEVo[4g1ߧkoEP`5nk6Qߍ h_TV@x8ɓo|u#ݑ RBl˂ྫ݂lw|k֤ۊC4T*_9CYJ꽥aI5~fgn2opA5U%>5|=o(hP!f4osBL5 CMs\TNɬ __sY=[o~IP6A6*CØ+X<.r8I׃[׺]w 7͟| 7VX[P}`X>235n>%~[+ٻ7y' /c#SS]&ʣ,X Am R2_vܗWT >62 1'%58Z$*f`t>^!4. K2G"it39}*E7DUfzf[(z堤m\oL`U1FepʵP@ n+g:,Y.g99g%K$+gWZ_|M5h.{\!0XDOӣ-PJɾY2Uĝų2E,t:":fDZN.YWwЉD3?77nT8TV6rߵ#U/- S {ΏD[bsԊ#?l ٷ/Q]U+ɽx-  oLUyyh~,D|OZHP,)\{^ǮNJt_{v-$GMa2B{_=Rix.9΀-*%,E(z|JǫægU+S48  A.΢.5tLKA3)ܫMGG}?@? h~=H09>zmOQ̥5ER+R,8MzpK-Y5 6725:4-?KEFS}E_:&UQ^87v6͝g q!pP eKuѸ,}>&eA]y.=vHa +[k"d x))u4e(וw']A1 m~,I͗ uY {Ҽes(pVȻ:\P,+h,a= VZM'郚ڶS} ZGe%\j?ȄD!*(H99ƝjeQ[jFde2?[t8} \4 |Ԧ2cAq[MSbB0=N(4\<Ά{VʜLSgGb0gVi%͞%o7҅_pid۰9HC6j XҔ^ 'f6EYfS?sa-j?B(h()DQ1(@Cnx*Iqy;6RuOT/ްvu-2ߠMCGO!3hچh[SEv y I*NN]፯4rLЫ#W+tr_97 ȈD,M o]YTǨXO#Wn'#bZ3%%2-Dc[xLʭ&F?qלt"~9uâWUxwVs8t?+b=H ԤXRv>{]&Y!v; > d" 5tl$eWHu2ias=>1XVCLB,wnz"Rv-nǣtXBXuF(ûuE@)ing*Sm=lWD/rIbt8@Jo l9]!8Ͽr%clVNs7B:tNW$ƥ"rX5b5؀|@'q6*;?E2ŪxѶu-JGG91S!꓉$&:[3RVvu ϷVRjl}?G%,5[+5Z>;b4\A4#se"%IOY>L~wC@駧=i㋸r-\Stkgv7-ܑIKBq|.Mΐs=F\Ǻ s!D1+z}ռc2kK1HFSkc3Ci\/.)͆lo,ȦxN> ?C5tOdOEMiz*g&.6'yx/4|Lndݏ)0XŇ}%rF5]i'xSZBUGwk]t-{AݳӈD,6M1>^AS6V:)|VV/W4~Cgg߄̥ ~ Jy:^ca6XF?8pXm6.YiR9H6#k3]_Y%]q`*_7)Ի*=;TNKԧޮqEސW˼Rg np"_~b*sY%ɳ{mKd>no'QTrh޽Ea]iЕORBXpfQaOðxnCg;閥'ĺ&[xddqrjD>om3--,GݙL[/|ŘTG;0?UYL<֬ɡdkdp\Ik]FDƲZ-Dg) 2N\?f4叩ͭhѮ㣝wW_^Ja )?P \z?8ʇw29 . JBsJLUj)Ufa;ԢAY)KjYϢ1P_["% P~_-ޓϹ&1BoUɕpk&%:N;h>9zA,F].dw[E )-oȵɝN;1OeuPF~z92+ZƚD7\#,i@7sBWJHKS@݋{GbO Abiq+TKtj\&o61DNh'ç_mD1.oW[@MP%Qm/ qKYZvý߸L\$@-Q ź6'_ߔK:';ZpG܇>l1'4L_'=ݿ"ȩRDpO((d k2=>0"mT!$%Yb/cBB9Hqpd|=y6 5BLKΤy!T[n|]wad.0:S pƊI9\ >&R!tWKi_+`cr*pwwc' BkZmVlbVQc=pqG֧P /zݲ\!F59/fŇq9&^ZQ%> stream xڍxTSۺ5"wk{kI U&MHQt қ"Ͻ㽑1v\FBP#L2U}Sk \\fp 扆2P1X꣐/$IȀ$e@((7)P{á}a Cs<<.lo>HZZRw8@ }0掭#(G ^9 CFDGFy:+ | AFaF&9LQN' 5  BBalu @gs aп @P` p#`C =a/FFB4 `G,w`1|h'FfH*ĠA'pݐ(d+'8k 9~ 5 ā > qUی!(pŽ ;_h7 +bC0G3IX35= ~ _wXAQH߿῏XDCWCP[r|B!i I$%Ac?bN(_bp@e27Łe_ix!?2 U> C-aIW{WƪAe0_v8Z 1Xp$z`aEq>EXjvg]u$%6Qq G=kJª Mf03PĿxO!Gv'Vji-a0_x~p}~^#1Bd-}G9y_Z0h{,vTS#QIHÞ72HӌV?U-OO`,v^s\>U2y@̫@5ჷM^(#o" -)1.9Uj8C5b|:6A}O)TiٙBSp1qsdmZ~+AB鷅VFzWk7[QZ zIF]v/( K[&iG%YS'߹24~ ֣5q=gsRR=$ U=/vEx;Mro!Y KM6m+#)K#t+ 'صoƽz} {̔lV/^J+0oKn? \8,QK<ůb&,ĤhY*uWֳ/X, Um @?^n]vK6-N~`DZie=oM&׽MTs\ɦs;ܨ[FvY>%PA-7^șX$OCFN#h$Gk E>yN)h>֢eXJ%dēlx1;yZżT_~Oq%Ճ&Bқl^~Z$OU*2H;K1ۨrj0DE4V%6'ވ$)H1F}|5nGDn0 +kU%}xw&U|ZԉGoi~s%[TjI>O85;n?*f)ePꏖ7peIdzY`'tv<:=u2n;nȖR ތn厈x-jǗn&=]W{KQD{8jͧ;m~OSoQU\@V-zXͲ*d%gwM;ÑV.FMz=w#[cԮ"Thekzr<UE]fqEy=uY7uU`c/d}h+O,q*q[b`;I%9{8s?B*{,]TT1[R}] П~f=WuVbL>N>{Ֆ}M hե`^̃(Vqcڏ P5Ծm7 FA3/h ≅5 !Q'Gc(cflf`LrWbq9X|`$.L]dF!Oa3GuP Ju?w'JWiwT,NpJ%?UTn? ^cO..vVyOeT+_Z~4q0-(i3蹑ûUǂ3}'kYz$x𑤽{>5Ǽ2?sj9{@qZ7ijmQIsiz Pq#yƕ,JaNZ-&L흽ZCSKE KU| bON{Bcܷ  璙Ʉ%T0Dȹ$#{%t='^9Xb5Ywt˷ȩrͪbR5z"bu5"^=y휪$nos‰qayط.~b^ȗxd? `?|$$Mk,[_ S{=0;Yx:mla׍r#0,6cuь:? ÖvH1%sZE&z-4h?Gܴ7D-2ʛM'bʟm%= 'fmhb]qhPn?Rosj XWOU lu'#u~kf2C`{Í|l\I{'yyaHx(0vQGhM*E.!!(^g%[n{q o;lvbU7V s'kXDy_l,] ?8>͹f72͉U-M?(r{$R0z]"fOigW =ZC9?Gr;obuwDB{8#g<^iž{ڟM?Oc h6Ll50)n }Gt+ڸGyT69KwΛJ'=nu'H?}]%SB&x~O~d^R]gm'eah۬:zr:%&_&$jv?ktp0j\geR lB Ȩ|7sym#;%Oƅ/"°J2nQ 82_bqQ"tSnŸá$qjyxީDaO]'s?% O)li)I[h RiKY7͌]O; ^vie?`NqbH3[lo&~E?dkR endstream endobj 411 0 obj << /Length1 1371 /Length2 5903 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xڍuTݶ-AzBUz/A1 JIW* "M:H/RD)"Wo,xods͵Z{DH~@pB" ,PUR`Q7) ,_U cjPFuܝ"b@IY)Y0( ՠH8PAX*w#TvA`0( 9 \; @4 y*+, `Ah s#50g2hMv8O(Hg 9D[h@!! P$rB~'Ca0+DBQ_D3χz@xΡ@ e# ?0 aοFU(*aSCb0{ Y'waD~ ww6C!j)xJe$%e7 +wP G!?_,a;@DGp{$ xag| '//86WUSѿgTT^@_!10PHFB(""-! rQvh̟n= 9uW-[%0Kݐ0 u T #Hwjx#(bH 7D`$7e5g$ a"[Y`9X.xs_u 3Q I zx9WoH8뷒 Ogڡ1_  Q_(a a_vF 0&*RS/щQ8gz35GTˮNc8nKz#P\P=mG܄퇤Ң7ݠ!>8 j[._*8o.[ɬ]T,9k\_p-i0twSmsXdJcӱ$>lOvWgNn{dY-{N_R7l:,āꋔD.{5:7)ã8Kd_}ϊfQn?'U40ȣaiL+nqg"-oU:u\ HM`jjUjd5Ԅy̡mN1j6JcLh('A*q/ɌRC M&z(i`S/T1_\_9Kyi{S⣷D *b6Ө3j)ryVuٟ19a? oJfl,AÜ-PU`<䀹-AvV zCO <y2X%#Ɔm%QXX ikcB]SnrB%Qd4O؋]_.闐J (D#/A͔% y#c"cIUO1g}k>]'{ 6*SNwo6qY5fk )"@ؚv9ȶIrbȢo%feXwC&&PΝDCwfϢW"-BAMYaPK ASսXΝڸe arȡbJM75 %T =ȹ@Ij 4 R kV?WvG&P6ԏ=k5?F]3 m3)uő(;Z۟>!>#ZXHZt+,%{&_Ř\;4 m)=n/3|aO\nCD T+QE;j^L r`}75̼XE`=P^xN e7>ޙuH2K&*9zX]x#>G͡ul%hȰP0Z{cyn ;[*k.2;~:^8f|VQe'ի.BEhnXs k?'M F,puMΔ1(xNwYEB}Xh5q~:|xL g]flƩin.psY7=5 9{f_vVhzRpqd=һ?y<)Qkl]| #` ?xI޸R}J $ A%Sʊ eËfGuyri\/^ {,zh0XcOA@Lɧ@`VKRfBȢx,? P4;iwp%{#UZWLbJ[4PĈYWƑƶyf?>nqm{ߴ(UȰ~V6"?|k`|ٖl=O'/fʹd+Et} .jz[*vzq,GJ4J K?CEqQI]'mW µ%u-l$=J_'S_װ{:)m|%a CLG'PQrEp4I_@ԝV7]85)F,ʓr6ۻoH`ӷR MyK7G/|,c0Uq Fc$ԨGu Oʹtͭ4~l̬;B\ewxM-ƖO[j}qKs) ߞA-mZY (LJ[tW2 &Ȍ)=Gqxt.~Ѻ\4\fԸ~Bl0!ڧN7E5<:!ESF-} FuI|u)!OǡRtUw;|,T*2Zw{ʄ«IC8!-=FNɹʍr?8xt:ˆ.^#kd7C,T?yɏ"b^'*oA]J8g_O>o^]vɕT{!o,뛹v1 U>K俺=nUymZjV·$̥&qJ4腡8-`M!J1OI?U=htQSBYVg'>5S2YԸUCG2G Ξ)/ h-е>ٹDO@psjK󓘰km{k BtʁԵ/9IwHL0'!Ry[Āζ'u#^˔ eZvo+BD %է|mʟ%[3s3V:MKwdMD:{RIubdj:L_]@qN{Tܻ.*p锓RIoϲc!$m*ʐ7!bQkJ(xsŎ3qYmDhە?\6{$_J1NytNn~[: ÄXz|THOMp/slR&7\Ə\o>Zmƪ4X"'wE ^L;o^gΒ-~;WFkˏ6+U4ϙT*޳'n˵6wGzVJ11 <֗{xf<㱖@ ŦT5s"O(ƃםKٓ9HVǓ.DŝE?5羴Cp<|@tq%k{$')Q`xgԿ,.S#>d?f,RIE21 A-l㑞O@ZT:(m5)Bn~jaRۀ砎܃EP%,k%%zA;Dr{\VJW>1G0eo,SW^hCͦ΁( %E;4*קH4۱$LjDl`IgZTkw$wy&d@zV*.j 措u3gh Nfն#G/EV Ma>yP1N_u(}V\#W &*]WV z7'QϕTMvn3) k65a;hVU{eӳc[(z{MOL%/[Fwg<ĥZ}̋9yvJZtxw'{lK\!Jv Pof\8Q0O{>]: ͼI~NF'bKmlTB[C 0&Bkҭ* EYzy0J$sܕV;ˡ$Vo*Ξ6UBmWij( *}A dK|p!ۖ WLSѨu,f3"U*:aIFA&D9ɠP|E,PQ#k"U]8ϡC6:q g-Yu1A 1Oqޖ#宇[$+X=4o ~j5өmnňYDz'o"DPmDE|Y  # 7g$_H2|+سc$h{i\޻|]YMY^j:pm. S;ܶs5dj`5Zgp 5YJ=_UCTfL~;BC endstream endobj 413 0 obj << /Length1 2137 /Length2 16931 /Length3 0 /Length 18225 /Filter /FlateDecode >> stream xڌP\ր xpwww ;['{pw 4e#9t1檦 QR67JہxjL&&V&&x 5K ?rx ?4DFw]Q b`f0s0s01Xh3r43dN8y|20sssm:Y@@&F6U{K \|xln  4U2@)jZP79K󻉋) *-PtKY_ tom#KLLm<,f6@D03K]ԍ ]șrv@;3_Y:M݃߇kmgf235 SFu;KGؿuEd@ tM, {/{ >^2>fx/g#W <330[.~>}0S{;?1K;@`ffap?%#[i;3{}ߧ/>it=&v&/.kߌ$\ll^/u#[Kkw } gj5@SK* 2za;gfc`bYhd 2WK׼X-aޭX"}7_0rr2?wbx1O)f02كM5:Xv_'Qq7Q `CF?`CdQǓC{<QU{t?]G/qzgLmޏ?6$:/F {Zel*7hw?}7Ykh߯ x~:I]ag42[Q=)5]g4 vW|wG aY8uuq|w7<8{?o2 h4oolUv_-Fk i2NsWu_9P5/jQkv/aZ `;5{ x{ Y΅eOS39Yʐ۵ 5ůCI>ʻ 3X QX!ۅ+Ejgf;ɝ/&N %RGYطK-R񏎐dӏRz8d?Of(v{?>~ n d<*Hƛ!;u)u-b,5 ٟ )KzA8ݘjۀSGRZ'+;UiOY$ӿkdj Ԝ3fR F0TM>F9}i'S ˌZ1\ ըH!PD^<jxsLIr[`%=1Q1 1՜>f3_ iFJDd!ʑ:A>&}5o ]n yR&Lid|^uF4yi!  \--&\3-Pf[$Bdc ]PyWx(Gن`jgmi_ yBݵe)EYKX.Y9J]G'>׺նmU%qt!/5c0F*kE$Al:.3K*KU 0NS88W^9dÃADeD>q8G9X uɮ֫:/^C1Ov/_XT}N-DA'­0srO lTB4&e>R=o>?j; ߗ _H ab6iþ:^,!~cj.NcZmz֣GJK}ٛ!AEI2,EyngAΏp4 /Y(pqy2B_o^4e(4 d,{؈"As4OCfuL?A㈕$ZaZ_񦤲2ˡŦ0i>ʷdiVdىdj9 D(9Qp"**/+>&>{.JT1ZL9ϻqgXX|'C@5-үl,.8)61j_{,Ha3i\|-}C/P̭/A,vx1]hG7{X#;WAUT'20h_iO:G\Ckl/uj##pMnEcV.Hy ;[xwd^i[3HK= 0এf l4x.V?c>O[3>|]yo괋֥Ú0.g@Ji#Djѹ ,Y,#V~Ѥ H g}OieTUEb A?iekG)8HNeaI`2@U>Y# n+w.b\`?@OF~<>K܌Kf'0ZK6fyދ^m0PDjFW.*_%G3"pFh2uR L1.X5SM+_?RScUZdi'8I$xkz-M2=K+7q'Sȅr˳Tů/4-=%Ps:=W&IEū|D +*Y)\Cؔy\eSگiDg}];oA`u߇-{x>EMĭ/T3΁!XQb ړxx-r2rAa.A}S.{ S C#- Ęd05 oM p;`T/TL`zG 󮍁 Z#yLHKER8z8p_d 1%[Ԍ>kn1HJSp+, N\}j^tJX.'Pi}?Ю eѤW<[vj:JR%,$)YF pbPn&:!]gg/B/?Rn];Y/sZzb֛:qD,~-RV>/eJ,kF\ }GǬkn PlBÊpZ6-*lxce^]p{o;8<j$V3*9 rdi.We5K6ܡRUp̓_jx|CRΐ*`zfd8nkќ$WQl;p+merjx4K -+uU #j m$-jpl⇑|Io1c)1,-VZzr`Pvr( Tnp4 FO[ȉ (6,@G ׼pZz$*^A:Blz" z[;33j3v$1l0.Te`{m\\!$ ԸbT5. B?D1{"(;3'+Q^yA7׷X-ٕ/u$޺L `c?ȣ]#Cly>y hO7Q2 ?66Jơrɶ:yf8_C6vutDsxTc_jz:;\NH-(׭ d7봺smh{8wfg9x~c y39N-[# d&ԒA:#NMezy…Ƹ#0dt=lrY *!vk%.3ܲ1/50YƆNN=$ h٥ȅœ9U$ u.pxyM"B2D3*^NqFtzsWhS>!Cs-`^ vO+YRkLbmAhQI|t@tșH1sUBj,"^4d |=[|':ZXОhWк9ʙ{˟`a|Bu,rlsEv\!]e)۷|MǦ՚r>8;MS,x͡he.:%v6I9U^ |7_aO۞rgK"oqR)7u jnUNɞ>V? zzF|`Yب 0S'ɅvZޥږs[꽿;u+:9^qc rF5bUEj WLn` zgqzt3}G0IVOoQ5<> Bk : ߋx6[&xA+~˖̰.<}_Q @k9[)u!`w.wWHk9 2b!{ rH Ǩ+8XFhXŸX72|1U@Rf\##&{5Ü1tLYEg&z!z^!{GMu|@@mjMIİOx=VelOٕ1n\rM4ӒzDO3]Ɉfu_{u`*=V٪`I;Xb) L i&Mpl7/43 AYs !?GT #V!;& įBG)]vxP<[H &1MW2ڬڬQcGh]=pJiKbֶ_m~Qؽ rv:Fw肋[#ƞVb|IZ:S\UL]-Q%!ikyj+S8}LG.6FM._%T}rVn tNi6pd+0/u3=-xQ!SOMХFΧ5fA%Aj 9[Nf:[ ',:nΑ8: Bpˌ``tyb=L]m~SdO u+`GTSGB-Ou"2Nm:GUxg}%M LLq̧v 3 $vE}_Y8U ”)J"H,xRmMlhta۹WvP *;o¡`CTMBoxYؒi@%{lVAD$qYުHdV\FpgjjU[ےtf,ɏI1ߚوklT i͌r,&sكtҼDpD5Ii tfi> >f(F"f^^Q͉-a$(q Xx;ޒIIϙKeZz~5H#ۏW@o ÂVn3fR[KFA +}[st&j+*Zc< zV̫o74n̑DI߲<%sNpcp*t.aYy $[;I۝lCV]BF!e'B[mN`rv@[ǴWR7|c}odž%%Ŗg3v=byqM Fn7`Y) |6v | `Rz~F61C֣ڠf޿w*6$s2$u*Xw4(/ٺ1 S>h : b«ߜ(ͬ?m8仅KQ_9.7K+-zuxGbPPEBH -u"E x'+94P:8N92A-⬵3vF}i1o8F~'o*8G2.+lqC*hsb$Y^(k&Ty?uauF*>EIy5 ;L\Ni NEG $Pa]3/H+{ȿkiR~W.svRVR.*BHIR7{lwN%@V9;؞Cw,`,JVyMHP I^8) Afg\FX:f&:4nvf#MVZܟj:O\n g/f}S 28Ep}a\{F}C8: >Yktȿښs*NWX4%W6e4j"CVppHB \t4Pj0qWL<h0p!X\HkoTm?*ͬ2Z4l3Jb'crojITM\#jn7tGBkRttWw%7Q;5Md!lPM!xz]Bl9YotT`m2:Imcc01 mW?Y5' V?'D@ѐ DzN{Hy.5}s!`PdUF~} sབྷt aZvrrhԂehSşE(102@޽j>ٕOv-N2uCx/XLv6exwT7O׊ PBI'~| PZ,=abE Ƿ-TQnXi䅿Vxed5H)z'=T A ʏ~.H>ӌ۽=u>H&/}(`UQ:LrVA1gDv#MQVfWey"ӊL& k~2 #d.`>#$Y2;wJmvxj$Q+tfąRdnUX`0#+ȲˊҜ$JˆC>+ fON.}P0)L :չ 7laDM!4sԗw% (z'1E5b<&wM9]$p`Uj*dNc[PѾJ~Hn:p1n c7SՈe?Ǚ.uJUQdmM,.> Ya O|%cMj e WmP8Z/QD#CU "΄bɜ kX4L(k" ݧ-%3߶[ Iƿj]hBƅht0ns썤X jډÎ/g̓ixXW0SЎO8'AM))S3ơ^lV0IoH-pvs9Q4f+KyOEX%u߭j1!,S7=dk=A9U^nA3}H7͜6@͏F;u/rs%=Cv~4Dȶe.Ozrn u}[`\,^p&z#Z>=(&q%jNGqSrS96I\(fn޵d*8l'D.hӆT=$G)u!x|bJ8ʼsOc`I5\&\|ٴgODG"kc=1X^'" -Y!% Do֢V.xem6a'0K~ yMgvv[ɗ{AY9W/pfb8ccV.F/{ƌe;9['5뤵$1)ARЕ/A^RQF~|LZeI*8ݙ|a+ a~q;b]Ͳ̑%:hO cW),Ks޶2rr<=j#)gDHf-AD>mĦvD9́/DL>|U`?IwJC"L 0Dxnq^<̊E5ɩS Uh5zT)^ڻvKPT>A9 ; uUCDG=Y9_G?UƱŸx;x: Ʌ"j9p.+ lY܌qIrgeWp͊=W&$@OD ={m4hc׽JKiFoOd;$%xnޣUDޜcaVHkBZ;d*0\&W/*U1@V$ĝ՛.a (2];?4+scu8YA+*V_9`Fq!-}Y+-aљ1/RbqHGO~Jdf_b^Num5R$q /SPW Q:ܗJ`@_(=y=F8>)qGxܮ?p1pD -ho{EkSCp]n/_tҋqV%(gl\oBB^m8\Cr$b21v(p]QŅH}8n4yO&Qu~>xk1SDMgEg-b\aT ͅ/eJm-w.vTQi4srIeʶ԰_#\ !qPI^.Hƿ,&-,EHMT~>)k6/YLSO;bYS8d ^MA7ZqӰVߑT=OSɱ!iZmߢKa^^eoқ &}!QHCucH*-e}Ň slkPAEm}`a;lə3zΘ'%rp~/:QdWC+(P-PHik w!|kWBKIKj"Jc`m zgF,j`04&Wc=L~{me`3Ym)apK¦@Z5$-q~&T[]9ǓmY `Ȭ83t>X^I&U|\;Z%Ar?Uz|58 ~ME=yKBWSE3t4 9+jBH~/t\5ͷ5D`%((7{Kϳ#*$,h+OA1NXQG8Oi1fόԋ)Uwh71b2pR\Dغ޷U"~C5z8,j<-mZ$ك7hty ./Ճ j}uѕ>ltSv6תΔ7đwZgLG~"ss n_ȁFd…y4ssW9s ˳NeF9#t͒t5L4d`WM~H1)DŽ35}s<@]=d ]Q@@O&1laIe{]k RkM")mY/$\|IWrI;lJjRǕG]ƷfUgWPztiNƭ+.kA@~O Bki)ܪCtlÉE]xMIv-$D$lER󟽝ψ454|{2,:,]r2'97萄+عR)?mwzlIb4WB-5Tr&#{=T3Bw}IJ#g:= Z(Ž3N ]a>'iusx5ec>ϸ ʍxiFdžlMUg1G @v9k@RO-Bv+$1|[q$>ҥ#.qjٸATBw<+Ad#}]SՆ.LpI ``~ʶܭ(؞v 8Gp"C>=K*{UrGwoR.  aƍŢ)ܖ rPbMj+&XI)w۸Rߐ0& ؖQ*C4-wE3e,MsgY5'},HjX9bL;v(~v_+t|ȌCH،1E!èFGgeh4ظ(Eu[fNt2=6817iȋUc1e %H)<w/f/rNJ/[n'z֤=g^jOt`k֓7jP jjtpI9b}hHjqӕű,1TVwTu ?|w}g|9ϦN{j桎1y)zhmTU&-]?&h)6=yjOi!ҽffȡ0[IG"YXtPm@.kvL7#Ǣ9!R\%SQ#5ƕ#mI;uAxCQ%t"a]vgc/"p7ȷHJv΅t 0E7"Tgyt"A(>Ja]j+;-1-}{n n#&ak'dY9+X'5_ *#v(VJ@!IvOT裧=CR}<$<q;v:xӒƛ^?nX,?" -94DxSK Oxj6"jLf:i(!Mf;^ (tR1}&RS$ WV]4I{9y49f齉e^ZG|FmYlhۺ5I9&Ofqw67G #rgBbEv- R5?>(>ő`LYm\dUqG#?M QMOfa!Uv $GߗJ$*r^oB "rS>>f\z$@#3¶,ޮd. Fv 5Qz j&B zr}60n݀#O'qTSE)c*q1ս>1j& l9ݚ l%oUmqҙ&a0f )+g:#\8M1{L˖O\C(*l(';֧#U/kN 3-(>m]f%?~ B ˓ftEE#\9 ' 6u O.o ~Ȇ| /K2vsFM,r(Y]6ti6 % )r"t~}x b!nfW8?fhȠ޴z3G*'H+w21I=v;5d%pbIK &OOXDa}޶ Vgz(A` ɔS7G15y;G7mq"`%pp&eY3wRPG`i,R#E)B 95 EY t$%Qz FMwՈ{ hXG~6d"#! 46+jaf{!5"fIT^1.eپr> H[0l)֧ICv#Y5T^k;9:Sk8GD ^7m{|& :兿w"Ia0+SzU)ֹcFeԥCWSjj񣚃tL3}J փ9|~ r77zONn W蓬Ř[){](>gb( ; =2xd >ױ=p  Ox4襦bdntfwTC G S%&_rf>,cK;n4Sk UM `{"TB2Uɶ"Z!NZG%/DcQ]P&)nΛhz\).UcEjԵ.8\ed %iYܹ݂/ KiX,XSn*ݖ}`8dFX|05؋?2kZHhj ~az=bz $.m&}/F9%2h[čEFM9;.FǭRoo1o2̰[$}=|a?$`Gr"D<1TUаZre EgGY ,{v&">gm@3fP_ƼU31 =I{!ZP=n+',CdkIJC`~eX44*'h5[4c(J˘Ȗt c_[ 86X9ocqCck5"NFAj/n 9‚~GHŸ땒Мq/ue5,fU-sŹA/Ϭ)Dw F8'~*+TG0!ۺF휾+Jo`ӄLU@-%\/0aqY{힕̢dp<ˏ!r;աzc?G-w29QkPD(T]-BgQ u,eN/ߞ/m4/ ̕y}IHKuQ\z*)Gq6./a^GDi$Gm5#90Ѫǩrr $G$(ȫFv'b4FƝTK@'3Qe[{;Ψp=bn^Ɩ+c9 JPҤ\nc%Ci4n"O4,ABޝ#k/)&WW2ywq5u}M "$I\pBe%^k˻pMi9<'z`2:# ڙ]iav%4sRPZt Z =^n6k rx%}cqM0lhQ\{XPgGS>k>(M 0i S$GWoÌl7jR :*[is:n[wdXi6-~=2T'zBJ9~Ixa<>]Wӂ6w)" ՄB$MR+fuO$9 6RǰR> stream xڌt Ƕhƶm[ Icn4V䝽>=k֚ UTa67J۹002DTUYl̬.6(ԁNΖvH:\@41#@`eef23Wމ ffi c(D<,-\@~6p:Y\, &F6{Kpqqebrwwg4ufw2[X@'7)௔FRcDZX:bon6&@;g) P(8#,z?0k Yldbbo`diig0$d]<\Fv 8ۃ܌,mAnV2'?g'KgFgKrd v@;gtOs,LJՁI(- ftp033s_T=3Y"rvwZA?Fn@+O" hni: 4 ?_@fjog[3*iL{7; E#CS`AUonL?A_[.3 o:7" WZx#[Wك6jr@SKW˕v1킰Ϳt*ZX=!g6v@E{g˿N 3ၖtz8Fo;Q%c99y"0&FSC `bw@j)'I/I70L I7b0IF&dS7o/yPXLʿȃo`R@9x@E +FΠvZ:[N n[obJ_2fbo!E_f2ejocc( o 8 Z*T~5t_l{?}D[b @?$@4? (R? @Pq~G _*o:Ř~ٲ-ﺁ\۹u|e4ȦZ,,D~A>@4tv29@,7TX?(096 o !;bs1r(߁N_& '# ߃ 뀳ӟu*o 2y;f%/"s T}С_4AX7 鸯&pg0CF6:3hpP82ɋqklx[RϳAn;$Dp}?8nҜA))šŴï]7PpPޟC >V32N#~0w 9'L *YsNe&UDrzOcq*3A-]on˶uF {jjtk/z{ VGׅԠӉ9ˠhm#!lU};et;oh2<"EҸft?;4# kϪ_KV|#GJtGVn 4A[ ; T ַޔ/Y_Y;t\&S2-n#[3^i L #HxȂr.Ki>MG4ݼ'<˂ߛ_',5UO#N~&S4->kW.;SQNv [Pn ׊ !ͧf(q -# vVY̛`Ĺ <ߏgKgFv{~l6[z{tYTbf~BoyI@LM];W7^̠{"خg% +i?ԇ N=.ʆA<^zJ CWHk1t?DZYh+<;H06aCgȦ@f"^NY9LPJc4GB uT{`"eH N as8ZP!"_!K)2\/ۗ6K Ч +g`l?R~ܞAFT;TadUFdь X9atH녾"Ⱦz 2*+q]Rs+6"S K|؝t;iù/pXu: R 8hWÑTr ׽= 6jpBIU5VNgSw9kw~-J"6P?@k*9UQt@aHyBBQr#O^T?۶,qnlRs>bm*5G_Ě-xyy;>+hXG1rIo͟gM !aOh`l}Gb9܏4"ڣ|;N9~7,Cd(@GjG(џ^.~Zft˖|^#Up4@{bI~6[5M:J#Ush(-@U57_;_8Ő.uh( 9 pտ҈jt_ 1 E1~52,6Z`?D|?`&j_KO3u"7FFlޫuXI> !Ȓ2o^L͙RTߵC>-/ʍpl~F ^ϵ]-밎{NCu`=rj_,j.Ь4Xۭ#^=?+Yγ,ih})`c;%V%'ӌdBKuPLX])4ݞ PDc7,3=͡O9eA4ܠm,ODnWNNLz`!ZQ'Yi–,"ɻ-sGyJROnl "tEUz o+$Thz 5k}2z c' jue~:T-2i\Q{8$qA\v^J( SK_.&XK11WbT3)|1xaAB8258*);if̔!\ 5$b%\fU23h2(A]f1e>Ljz%Ga}`PH4ܔL"FhfRIqۘ#/\К 5lsc7>joXZnsqg4KewsU][y׮>\57P 13&vVfYA4}‰ ~=, 3mG5 M>lP0kbcnɉs]6)$-ֈjqRAM-֔]4Ľ8Sw!*@/1P_M c(\H߉BۭkAq0|T?G S>!2 F,~r:\ 2ʑ) ޮY!MAOT/t$Yg22ޤtEqT)#5/Byy&!c$D*Ecgٍ~˜S6}UsXcmzT Yoq;P˳Y$^ 9YWS9@ߗ66 9'C\ˤKSߘbOKpE4kZNgE9Ȼ;a!P.GQAX2Q*DkǮsr!.mW$ɥ;Xƣ>{apFpeW{uM;Ⱅ;"9Gw.(L^5j*%GҺ껂UgwU{t wsΥrsQ4ei)ݛe2Z# '],/0edYp113GQϿ4Od;5|F79OЪ8!PeRA( cNy3v{j-jZpuKn/MdҮCuF+~w>'AQG .;T[ gLsk{zƼvg*ICU[g JNrD N)`P@NX?fdYqP AøUv✅&]=m$t~#*c7db h\4Φ\̛ؒI]a'/ < &e?;"xÜ)ݣ=F~t`FU\ K)4G3wiʊ$֖w້qțdž.  _lFcz2"S , B3':࿝^4$i6"/?% b8u/$ ?~/KNw8jb)5|Pxs._ь&z2;ikeOZO/SʧR%6v~xw}f嶎!}0xWr‰w,8$eR5GKYQU5J.0Θ5.j},2sIbeG(?1 ^ɉ//RU)MUYP5%ٷ?]5ƴ /łpj_ GȼVhi`_f;J^*}[pѪ2a:\aSDNyRI\NuגW2NM=} ~0gq7BF[ȱ͚Sl&h?g{ΤڦS pe{H|ON$c"%YY!Ȼ%Z9 pG0iƂ&ԙ"\^#N݁=m~{#%KvQPj8Mf8 "X]A;[=|x%G YƮO\4Y D&iLJg_h|o%aw2G.-\1 T39}Y}Cj*p?1QAL^~hl/!nǾ6'O~3<*1IX^NƵ[dg!U$[ 97!*ceDWrY[IF~?6IQoJx37V+TчDUfݮ0$n6>w'̎U%2O9}!pWڃ3934OPB^!.. 3$}n>C2]:2}-`F m:8]I%ik"dsPۗ}As9km>5%f9a~=ϋch9i;Czܘ͂iًFL0Ũۇ%.#L:}B;>|E`zFN;s!-Q`` 8>)|2,71$(u*!wUr;4cdg9?jΨM8#edϨ:^c YqKSpd| @O#g~zV m2 ֟D@$YH[th #R!H%00`(-h| fW%cDR>2UB۹܉.KM͆-eƨ,,W"Me&2ƈ73@x 6j ^.[wiHeTEPXlX}:NPgrӝۆxS{y!FDv\5k8%M L|h~es쏠a; >^7)I7f&w(( %0$ٍwhc`< VK>S!]SH "Nvө.QIw}YЦQ__M&h&lZ> o-1T:_* tt;q`yEzf?Y$.yDBaT`/43gj}`J? oivA9nt׬~b[ rG>uMTxXZ#[&"N-mԁH-;. 5=yoh+qppviZc΂V$d~E-M=eQaRf= ]qG >aFf],p.<+qEVU[&(dwGUmlHbdr\:c. ?K6[=ΒƻC|]Kը"mf ",Nf%"t̑Km|2&Q߻XIdYdX(qNYPEiT `M$;s~ ڎbp*tu]簮_PԞT1}I/Q/$( PuRkP:,c_E*y"L.|KR`rO)gg_y^~pDR!YtI1`* 68kYsL`wY=ZUCKQM\;7N/]rω&R$ }Xϖt@SŮC*Xf΍u#Wvxvrv}JlFshƄwL60Yɤ ?lI3>3QW/O>~*T;G-?I Ӕx\reL!?jwIٟ[8jϔ9 { 1}O4' S1GlGF|'V<{̬ מ ۔0z$G*ϊO|?be} (Y ӫ>n3AtMDxwt\I#Y?%DEm?H_Qʔ\Xz7 n`5y+r;)b̯H2vI,#o8Sy%VSU @AÔk>*I>@fwpt%:7RaW;(ҊN'1jJDs|dYP6k^fDyjɣNrsLrꦟ%,#t,|߯K܏ t3fm0G6Bmr</E E4M 8y%4j'c\,qRw.Y1E8Tމ q'NNܭ,KRmQ[6ۏcȈ||)`fy삦q":5&fxdEm %k^qԐH.따)ŮR:Qz(l lX'ۺnV%4j_i:8 NV7WiJ JfѼn꧈d" ߎj%t'6ؽ{FOziZ Dkam6} PTJ sQ9V?8#ԃz@d_zxmuU+`:-ݯ]8]Iy {4m=q")1)\3/Q?n;Ya*6}j2tK`l'" ۋQ?ػIyk𮨶'S% M+FĔHeV3R~acj1@侟p~$,sx[$y!XXueSq1v|rg"`5T}(3@U+vs}CM0_8PA½THdSF;Z>BKŞ7'!ǧ&X(tUPadEd_KtIjhʷD+W]Q7gq٣w, }E4j$jWW(6U%R6h/Ѻⴏ&B-|{$1m")Ze[CDxs_p#."k*όGrCue#l 4pOuDU%3su?O+TRŴm{v;]e]Fwcy`'ł] f1@(ʞ:H9CU2Dc%J-߈9XRX2*c:M6|Y B9YC޵j>EZXsrv^.R(_VI\_{a mmr5:%`d:D~ y 2b89}f4dNmlJ$&g_B#r{ƭ&PbP\9mݢ4-$ iI<))S3ϰ gvb!ۑR+FK0 "y3N7&k[uѱ1OɔѸFwէLSs6if"  ,tĈ|\x eA,h1jɏQY9 OQ2W!r˘}p# h&{"_("3yq/#4F̊.% Jf_(Mjf]}#8E+ZIpz;,K/:]aͽ,d{篊R}[Z|'E,Yb2Y|ؼ.fl1NLGh}㩗YmwQyzݠ52ƄvdLޓD75qYL9*B˼1WLoΉ 醀ٖ_w&3௓E4tH̋\OMbT9?Wf&+&6U &nRsŻY܌Ԡ,lP\^j')iq- 9v5:/0b]R8 LP`m5z Gy!aEp:Cq-IfLΰʋm(.vn%^Hҡ!#l0|)FЪҥ> pj4W{Y0oI. hOM!55͚}=ch i .b:"pMCc\Okomz* YhR)Ģ ѺQP HSQP"G̃j<_Vu!DDb/wQ<b?/, 30*vG#4 (bA2 iZ~#0 v\lju[~3"PiXU/CTYlbE'+\Ibmէ6uo+JKqZK dVŒ㊰W]v3VQe/~d3nB7h/0b-;ȖYG a^fh&(wgl Q% mo˥p\nI%=;ޱ?V̍j#] +Cٷ"F8KDM>Sp! mc*쪄p@ױ#.qe'ܱie!pyw{n:&'QP:znD&lNKyrS_,wS[R{+n f5B\ANQ@`4Kt98ix h(i%ipGb{F0IƉg:])yI.N5#~t>ːm~IDc!)o 4 xXF,aN$9~ ib&(1z]Ә)m?p²| -d Abї+o~6yg^ u>1oCY})QI_?SEL*Fse>f?*UZJUW@ cTRS1E 6"La#2Y>')"rrN e$0HX|kl J j;\m] Q#h7#U*/,2G7*C vRporȽ>ïfm9{;80aJ$[/8ԝ(S01lǤY]3E./"bEx11]SZ(62?YiQVKР>yx]:5 (D4J ̘R5T\Hu#eNEp0@9$]KL:t$_b+ +9EZ:|%؈tɻޡhPl\PEmkVX'[$XبLGlpaJ+ㆽwE_i 7[鋺u~ka&E8K8?[qraIwYGV[Ȩ?O9q$_]+˲P-ت^JUqGӮupkeZ DQɲiv gfx(@MJT4-.z?= ~).SYYB9'V: &ntj!_2#ownWZ0׈yJPdd NVy0T>hUa* x<oXMU* I 7!NF-ܴ ,rl*v66-Sv*UxCwW(*MwP=NRgW{fG(={*Y@ވú-O5?F༮~ X۸i5^d} 3M-aGe <#ϕiiTt! ě;!!:o w`JCsƟHmx`4{߳ JvcN?Ȑ@,dwl]7?iqC8a3׬ژTb!SF@Fg:Xc(A2Q.g[>#VuR}}҄LYODKiva{ȁE=RcN/Vj(7:3Rj!' >_^|9Ԇ&Fgx{6ۙ^ua^IK4S0,2THE}@_#(IeD1CF8U?bܳ)V CEu $n7Ms?spoUE 11ҏ8

#˓BwEL6S&Shۨ~=e>}p?CeRj[jZ<L~ 1Q&8B6L8vu4Mdd!*!^`bՄF2[ٛdy`Se`ːĹlBdLYd <:k&]KB$8Om[mLJBP,+a0vSZ| њ>=--> ##'kP"}W52,jB"q;<"ŠveXW:1psmNt_ǐx\"iY9fi+u4t/Ao<4&$mcL `}dO\"N2_sZ}.!mV퐸Da ׈slc_Yb4Jf /Zx@^*ThW M"oNrǿשrӗTYz[NPK)9Z/6i|4Oا7ɘT\tz pՍs`reI:Ǹ#|Q0֞.Nyt/ +61.6)(=kyq񖇠 D/|rU h'h]8"N0\z9˵M )/? !B9>M7 {956YXi`q+Ka]#^oyh3H3x{c<[J|y8Eyk#>*ŭ/u=b!'Li@ KK`M5:q]$I̜C.;;Ao\>rhY|3>3? OܝC`bBAO9 ű1=/E.^@^ymgKڑp雀\6_M}{ob-΢N Lj6e􎖣lѿH,ܓ(7I鈿y4XM E#}+o])?.$_ߠeYzT̝\4ѷzH)ٺq' H ;bةVbOdhg#o,ʫ14IBQNZE <}۽eVQ\"(i?b֦%ljݏ&`Y L1ZYpi*^/]H&e$hD6/5{؝+O2ŘtV!ni$P gLڀZ,2H4y9/0vrגMQ{OFR2`:lS\ujFc5+J.?JCpmz5]s^;ayL dyP& .Ӫ dQ䋥%'oH16I=2XVBRE/"+xZDboC$?u@ <_ʢ+fr6ZsU`P; k caThk%Y%dW`A(I PfDC}9d$=q,^yw2Tn/r/%UKS3ƿ4/P:eE& DuV2o*_1<.DAj(rs]6nF|ُi=^} Theuˋz_.*ЊJ0zqXwwN"El4gN{$3hwB}7`/A"h6܊PiQujԼ| 1>@k(P !ya?9; >jV*@&t5|9Vz}R)&^I` E3 {NGaYHV.yD _)~BFtA'$y.] itJuN}--(d"p fjo0砪inwrS5^XBY\ Y2>u8ڲnz?c-h{_g}7>4NUI]D ~HZA |n9Ϡ0Dmp s K va@gxV fCrxҩUd9BpWdwi4N97]H.屑E-1kaDMkVP IUYui2vʊ7rq~ohVˢ? "Y^`2ra3&W?#ᜑ96 2>tN*P_iEe#/lIԼ=6Ch#fֈp) =|\H(q,{ Y+r-J ;mXk*f]iT˜ I}) 'F_:{diIAA"X. xTS&Y"IRKhOexU-TI^vDM[}A'W!Dwho~ [*YPEv6^ʟ2d/1ݢ=tQ4Ć)L-Q{E1# ὃ=ҒƍBKi5WR`t}1Q?iMٸn&zF dyH$8uA]VP| 'y˴Qw4w2vv" endstream endobj 417 0 obj << /Length1 1435 /Length2 1882 /Length3 0 /Length 2806 /Filter /FlateDecode >> stream xڍT 8TkNer sht F.$J=c=fBS[!kE*EI%rw&߃<{޵}?m ut ١fH6"Yg772HF$c<苟aa#Xea8EƀljA6 D~ ` 98$$h۠P|l=@R =lY?f: CX%tiƷ b+Ph V1WH ! VьN֡\L@w`6_s`5|3'`rsوd'l4BBapa1 Q<̂y,_0: >|BcB#!̓Hpl@ibJ<#a_,.p18">D$w H$scc(O.ʇƃd!"! Y"("L_Fߪn;a/C ׿M88( ?bjlrAkk4!x90,Tc<[EuY|4<IykFqB@ͽI&$6"dOoV4#;7םGB'8oEgW3t4!\g:`,\ tďu#aq\`?΍ Tg<\P!,Y!D)B!Ώ+26ʑbb X+@™D11ad\(dĀh"GJHDI&b /; |g"6n[$'{.Mxe=??ybÎr=]kІ?nrsa\RWG,>tEfWˑ>!SDt*+1F8~s\%Vuz vrobA[;\5˫Z6> iݘL'x||y詟wp MiO|K9IiO '[Bۓ:|kfZEGwu ).+MφO"${[vnή.:PeD"V^= ZbHڅb^ɿj0 FZR*Zpǰ<~|/{{>LwRcC\Cv,56C3T`h&DžV -VZoD ~|pv7eJ8gvP.3vΨux3v]\ȹ꾮4BCO@k/Z曒kĆ[kmo3B)85Oǻۇ;-1"ZSH59=Xjyw7u̒=o^O}Vfuh>޳Z>>kvYFm*y6d۞6M}X1T4짳yu?_ea햩oݹ鋺`ff21csʘ~`(%F2*ƹNv`}ԟɲN,<jZ8Ƨ0n]zjTS&!7F:9dki܇2\c< 8uV{6@#Յ-6YQid_7WVA,eS mGgZ$/~Q<}jn3|̫4n67gsEtͷ̗XCUkyN&e83USu ,ZĜ>Rlr>rv)-j־.~0ox_/_mNXjRɪrkӥDn'TM*5*Ur:vFk;_.GSm9Z.!?;o+Tۛ襓^Tܴ:]+cvl~-!>Iy=bXK={;#LCKm endstream endobj 419 0 obj << /Length1 1427 /Length2 6626 /Length3 0 /Length 7599 /Filter /FlateDecode >> stream xڍtTS6U tPz9 (% UJ!DC!"Ei{Uzw)D&Z߷Zy3{?y ж054 +("d0XL !Hk ø ( (c`^(@DIY)Y0eEDcd+4( WADdd~0  AbE( );`NnnnBG!4~_pC` ~5 @au&.h{.$ C\DPv0 p8`:P";ݟ_(Ay PpjZBXwA"B.x+^~WEsbNX!W¿\*NCa]@SA``Ћmdn(?=eg ;}PC@0, D3s:Jo _tv/ a `18:iDD; /`_cB{"兼(ǿW\HH_SRB^ !. HH>LA)H =֋MWK}YpC/^"gWM]!…dq k/T_# C۫\" {.jw u-F @._w (b. =v.+h_%*! @0|!#Q Kb`  ؋;:P % aLQ@oSLvơ0;[p.P0ʠ8 b2Kٿ? n:*Wdu\R]5IziS.`{;hUܙOEPl$lNx@70&WA~T:_o՞dgu(%*>uw7vO 9C$.%jwtNG*2̾TkUWUlK;o}B-~͓My:Hz5:(JPqqÙk\ > E=cҪ򔷒tRY^ϭ6[rq>~2`tܖq2q޽GJы{^0n9#G8uyG#DjeV4ԵTs*7^BJ?بοH;o5|8U:#\x㛠0]8,6Y"G==\+_TWU X1h溪$fwXUMdΟqx} ~bl~ (heQú Rwl?|G~V9/, ">9~'j{1OL.\F`ń0|cTsDtH,4Y;!]t5>n3d`5/Nlj[>/f\Ԏ>\ 4œ犬Z<{ [RP@-]sh#.ҢekgMN$)j) d]6CKzH}Y&iJ3jL2B0 nFx<ߐ0 Z;uM\sKnA'xƿxbu4?9i|۸joƱ[ѩ>>ޝFK`q33@kދ9&e@=pTEM7CA1-^aß< + yè%GX8n:i֣LSY'-F1 ,VZXcy c{NS~e仨vT(<>;5zc;*_;siS^sJ5x8R=A]uL e0)ƃYFԇũCo76 /Db6?̵\)#W:3G5nnBx+پ+ޭ8!:=T7[Q[Gv!];=;NDCؽĽOV6@`#, " /2ɇ Yndy3ᤍRzO[. nw:ο !6nuSnºtn}n)J #!R/84壊R:qbI`[lϦ6_ڢŠ]\|'R R7V#ÈP d:Mdq;U ~Wn;RS@)p1Y>;erE~j@Swwx'->F!V%n/yѢS9@`ƍeޫ`9NPcx.39Aq=&WFTpu劕CW#1IWOkj?Y[hxU0D$,zV20ϯ3M{wԹ5gT:Tؒ&kKi*`ea"UquDLߺk\v߳׳?4կAdKO/3Jw6S ';O ">TY=wyQ7'zrt6G*4 Ypy;QPQ'ҷ}+1]ovWQAVl~ӕl%kd~3#"E|$`f˦]Auyچ'ą;BUedx$ ^u=M|̶ej^^Tl_Vh5AhRF8FYh=,HdXaIgDi> l7Ayuk1<R Ӆ2-4M,W3}JHik{Mݾ8`PC0]mDDv*JIbqI?b}pm0A6nw)ZA| ) "7ykA#(F_!h4xtG? #τt𛃂 jk=֍uH$vݠ*u=xTͺ=; ! o3XhvX;Yw}}}u[N>S]EXV798[D¾ )DZ38IE|ENUB0?(^HfQvH|z};e4z-R{£6xdaV|u%#0Q1Ȃ/kSj/G-^\XV9]T!KT("T ^Mn:hM*ZOuiqɷ*$F$ Ps213ƴs0_dܛ }?V%*u0hdX3R\y. Ag0aŒ7s0㽳 ALgd/aEѴ%zGqU^|6ySk1+b7HL)A&#[Hٓ7,5}Q J !S+muy'm+2$vdSM_ C-ymNisR꤬؏:Y-gouC#'( \m"~ڌ:RL3 Nna*Zed`":ʛ<е#^p<FYڗD#u?4΂e(5$Z[GSyRl^5E"S=(;_[y럤gk A[GbHɆ ~x;:>P|J8j'~o2syBG׉K,ٙ; mz2.n1]֢kz:6 8%{Z+{ nԎU`GVcRUȀ$0#]9GrJ۴?h0iU=E6{WzurԚ#ͲbXr3\I,$k OQg";S!9Zȹf]ٹ=g6U=+!v?>V6SZ Dx_a4)ym׶$IOi>[UhI0 =~2~fM:H7YTBDW=ac$G̡Êk$&zݍ'덷vW's O8# ȃ\u*-^n%ZL;ΎϘH6Lx͐- ՁJ `j^:W3ƶ|nKyĂ!6X|n \!&4ki$<0wjpPk_]k| n<`%ᒍFb yb5-:Wg.bɂٝ#^~ 7H 0c錰<"_戨`auXaQ eR5}qh@Js&lP=PIm.$."R\#͚mOفn@i_DrOtHL67wDr5ؽzQ&ٹGȽOn?둿1* ކIJ+SQHeV^ȀcYm ~ =G2Xv'#Vr{Nɺr'b*o=Yeikxz"yX[vB_:\nEftb>A{‰'4uIM2`}{ ~+і6cym3kNw>{#3q>𚳍v3N 8Z3cCL;R;55ES7 Ku=>.*^%RxYIO5gCIV2V6FBX 9ǚ(o%;mU GدCK-, sZ7KH&et |q>9R:/3X3f^n(̉XZiI>"\]b$߆tZ/98;1<$9J)عR{jМ5|̳n׈LwVR>Web@OeurIrt pL!ISC6KiwQ>9q& 'jqf-yZuN=?"ty Ϙѫ\Kil 'Mmt^ &wp' F_s`i,B&l|)1~+漲EDLL0Fkh7֒}4v(+P[1Pi=8U C? endstream endobj 421 0 obj << /Length1 725 /Length2 16161 /Length3 0 /Length 16663 /Filter /FlateDecode >> stream xlc.]-\ze۶m۶mۮe۶˶97g2XcȘ3V&)#-#@YLE@ CF&djbio'bbP75(:L 0da{O'Ks 1տ5CK[K'Mٕɕ$eSS) ,))'Sڙ:\l,2ƦvΦT3{'09?̜m*br*Qaza @Ft;gM]\_l W2_N`&.#SsK;&igf`\r&fDښ(m\]L&NvqdB m-m<O?dڙCLb& .jF?pϩxʿףQ"[N&k[??XW5tqh3D=iXlFfVF35vur2s71ƪ1wUzkXh|8**#L6尅5΃ N;\ɇbxSUR*s; z7`jضr`.A ,yyc *:v֗ĩt)P~Lhj-Bn7@ nɰ-*µ 5%0Evwݪㆷ!2Wt G!oywe syTwyY|#^fu(\f)twEa`l6W\d'9&Q+-O1ۣo΋>ym )e@l]ځmڝAK%U2=1['",ݚκpv8R [2g5 y &\5_Ү#K\TEzW<2ҷJ5< UxKʠzS!O,>8c;Oz^W/MrBFN*A81u_oݭ2̽췸ڪDP0 !e 3-GK^eGqsGx^䀍^R\D K$}u󾃬?FDsuVw(BVŏbqz6+?1w~*eM^n@wתJ.ޖD:cqtzgz -U<8#)-{íAi\y-!wY}ɖX7nkK Fvg(KI N94ġBFhvvyRC8EWW2?c}aagQxb]c~E990RFD4>:+=(s qwtUm[<8"\cX`FyCrPܪsmgSiTB'vk?q';-4^ܑ&l dr1CwDwPڋ.hutJ9Ro,eE Em\9͕Z%W OIo=2=Qg9'>cn G `1L7~&96zv3CCHl ȊFg-N"}РQDU*eԢB~Jmp!%+NIiAnWO%iwI0[9^<91N/ʏ,[<,gScjEj=Z9]= Ͳcsg呇Vz 9ۋoضUK(j0p0%$9uyV |ė֙2P)M:bswmc=N̩@^t{#2FF,8$Y;(>.A>I#ūN9_L}T(qGMhѧYu۷k^م|:u,RNoXXgQdt8|cAt${ A]c -(*n&@rwaP[O+o2\7:^uaBߘR2ͭt ܪ 5ߚ#S?j7L$IK3;SAsaɃ!fES%p3iid6aKu0U˙Yg*.MR?g&O'2sʻ!A]icԸ!Ʊ${r:\i_@torڏ&cf"쑫~5']>oF(G #C+_o&װ-9n ]LͫJ^]:$4{+]^$ +ug!guCK6I3(hցAzk~jp{G*TvJ@olR'תyN&x41q@L8 4\ڠ}C$`agY$ p{lr>֫-ҩbPL;&,^Up$cu K0JMȓig4ÚoR W?hY/[Ь&UOxOkh!=P7GeûQt.>ԕgd!P\ -@?' OP_v@HH:eY,P+{P?aM|}P+jo e[ BW3f!83Ecs^ʊ,RMr?%ˠiQw'X7zwMStBufNH6G[.(fVAng*~afɦ !ƨ;EuKoUH BCp,eZoy DODeAcCCf&T= @L>`';ͩ^7n45߹&.gt@[O ق&(DSDIP*:LB}eJܕdƯ*Hehq՚[pPe(=hejP'/ [XR@0'd}>,-BΉ{p3_tc.L[=ڣx!q :U >mx&܂EC)tk2U[-zaZ(k2nT 4^w%3K3̉{4!kjJ"nۦp2qo`k/?zH.T"*=2c4q&x2SOCb^Bq$t&ʃAZ̻N_,V/ty4~>2L+/{sRJ&/MK%/۳GBfKq)*XϪkGK8][LY/W~M>T^1gޟ!ø s$Ï22g"v|˔H 瘡܂YB$\ZXAs× pec(D g"Rmg۵J3 8+{KԒ~ O^FǓ::%*{bJw܂!.)O2~k{14f܋qy\'Zj*N:jnNelZ&VdC)tRޚh{fNLjܷ/B&a68={UXY q@F\ys\qa]sޞWihvP?9r@8K#=s?U3a3uA4<+dډB>'c8XTOPŀ14"c캱o kG@,K/t[*, W b͏KkvL-%DHqRe[]&sQr> thO&)U޸Fnsm4#GT.Ljkܑ/w%&"]#:F~$ o1 Uٓ_'`- AJl}~V|x.8슴vh/@Lq{E\V|HA[tsMf%0e65VxW P ^]g3!3źt r;NNjNFV[`Q Z,o1n0b>a?PtRձ%H坫}] ϫH.(9&o@K Sj<_$q_g!sI8nⅣRcf2+DT @*O"ѿFo!p6ST^”J:Ϙ4M88 ~M9|<1A F'h&r\S#K #޸jz^cY9ҝ,|=OB^0T!eq_"S4]ίSNdk8 !EBth㯎 ۪?0Gד-1t`,x្d;<$?65l\k<ۂ.c,L¿_?˱eӼSk/Rzs@Ҥ*H{u^2Е=m\Noµ--$R}ǒYxNHdRrlЃ]uaе!8&MQ,[ߜ3/}3)M65H"RvE$71IΟ6;7u][H} z!Mփ;H]_WQ@+OrjPU 1Re\Èe]qTдϟ*8WkaoM|DsDE8,{SPq=+:ÅmĚ~ö'ttMh,@_~ud[p *Ga3wP887;S޿FR`> LF헣正e!=.e_ yVRdxoqV}7P4P^vmt!ƥsMQL.6rYb[9^=xǪmeAqJP@CcXI`VqMv1΁;KZ52a$U[9G׆qN`F^䎥Th?:;n<9Ļ a& j$!d2jԇaZ,G)EL c kpIb(&{2":$<Ņ/ `r&_Q-l|tu{hf۪=.|pԶ*|U.# 0u臜bI>9G@'2;xˢd2z|*QabSUgM^Ò{Tp]1@AުiuXpٟ'?M-lwK!+gB1?LcJ,hƙ+B#^^.Iv]LO֟|Wa]}_H 7㖲5܏XV^P^ C{xt'ܳYb] m-Zrn7c]{Dj`O/X/~[-m'.s Gl]z(SriЮA̚Ź21\,fg~ⶤxb~6N*PY0'uU%|O QpϘ`=3h'Gj9ރ#6&H^Rݘ]t> æb`6  'nYL^55ӈQ:]ҍ֢L=r2,mf\ҷOړ,Ncyb"CHnpԛpqnaoUrsK+,-R Z-gohG=Bv!-ߔ/FZ>yo:ird,mO]Q&ri?1I bRI\Iłx5Ʒ)n.6j}%&4s6Bf'~UoCyLtR9lՠQ 12^˸,߈g SbJcv/)w 7pmA÷f&A.Ye#.'0&MBа,ƑkIne_Bˠy%W^q7 |L%*{meu RERxIfLsû块e[VxޗTOtk RtuY ATBj18O^S"9L__[)jYbM}V˹`W}X-f{aϺ\jͶbْnjϬTӚ|6o|cO%x!|ǹR$[tH*_~@e*"`;I KT>B`5IwlRz7dRDM8ږ17]fA!AĄ#NEH C#F/f`t ^>?ɓ\N"v x."r]U6vG;ԘmbaMY0(Nks9iE;^I(y)[ % q줦 e\yT]{xҊz]ن=_yB~܄e%Wj#$;"ߋs-jӽ@lLbl挵8h e?{_I |s^x/4rf;vEO_|_P]MH'3ZT@0K3';KyBNWtwC<;HXih/A)yc: gBT_&/#jxJMEw/F(h Rf#yYIrZvV^*+PivLǣIx y= ,r[Co3M#&F-}T*KM^45QjRЌE<;O'r[FpO{؄qfIHPDV&ErwQ<s#3cBuz9=s-7D~Q!V%m%s=N]4h52zxOĔ)S jK_8rFqZ_t[-%F݉dy˝>1 лUƷav$zjoĺn$"1h}95 #R]<32"%c#׵P~>4+k^-WY(gjNB%^oZ+?'鳯AB@t`cz.4;,>TT=x|;nl g$lY/1e{=xr_İ%9<}&%{lre1<7i4ʎUďs]Y.6\zD8̄ yn:'!͖EGѻX5:El.'KJ1j"Kc.a[uMk,G Yb^b7Gm8Ub f 9Ԏ|; w<~$ [V%ȑ~hnQ.A $yݱjeMkM?/xۻH~8кH,V808~>:A]R)78WNWBh4r7X }AM?:Ug-3vb@zv5XDPT'|K{kZIlGr&v1K⅞%!pVq3(xT[gu~G! <̨ys6uF2$ ȗk!3fpjUE_vTPԊ>~AW> ā;돉c[ǹr>1%lc:k dN@B8NpT@eq'x%sfw-G#P'q!ZfA  :d9w)K_s!-++,2{s3 Ԇ8lm=+}B>{ZoV`DKA#L9&%[V/5muC@-&]%%bgc1Yfc?ي+,)3(e7}.ʳqQN{kr}j.6GլҏGݟuDŽr!'S ٯqx,q͂=)ioyA<اxۂC]aU+˖}HJ&Ø\4u_w߿\v0uiwZ0zm85u\l2mَiđ58ȩ9R{ySTm+Z^9Ow򴥉2f+һb]obͦ>%] 2R5X3%z󙮴0)^\M]@S3=,Cro3tá٘ߐA3t<ȁh")gxB0~Or:,R*bD{srF͵ڍ&[I ,P\HWե֝]x/G} Zm|j r"'rQbⲄTA̜hq1OeYr^5Vط#Gd.tk׸tw">,Z,9'#d, cddGVOYJ˅Ey٣ptK 5m3}C-#Mi)EK³{ L,PӶI =D- ``Xx6>!LF]YQ23<`l ga:e`}3+o"}/FtR6vZ 8WGY:S6-07,%Ke2au?,V؞:i\K{Np&awN}sG$][8*8#yif\ji>WN/_g?ҁ3<aio?XMİDrc)@ zl}Ob؎ [؂SцͷN)=%h$]m=a,M]DK*E:! [yMKԸFd$F\ 1 0aYu6߁"W+zs &ۃUᴍ&5zٯKcuq+AuͩdDJ#A<:6'ZW 8705gnHN>4x[ yN-_d Gk&Q.|[K$l${"*5!qSNKOeKk׭1>cll!2 d398)-e-9x[Yz5(@_ɜL} 7Q`syl-wJw 6"/hGA/@Òάo=4Wt c?~;}ت뤍=3EAlq%~ ˡ2hA:S=$9d\`>\IUf}X(ŵA13eA0%Kcu5]Q}\{ث6ș1 WkXKjm__ޡ$fkD?m 7e. >`.}U8Fai!apww8h’ާK sRyXlu%fr~!.U-qIr] ro񻮊 #MX,1^  ʺg45WcFQ-JXܐ7z Fᚢ ƁzlV=x҄X/[!Skrw~N]8UDCcg\kr"z)[Ml{M]%iTxFL@r괛j5 W֫{y c[=g#m %;ۥWsF-T(t\Ae/A<s$QO IGQQ'H+Ri8aM]>):wvVE#GKڎ&&dH@V{"qù@Cw ;N"1= Dm֮{kavzY ~JDlCiK* ?ـ" }%Yto=$ ^o]7U9|2oZƒ >˚_X))ˠ h0$P}:/7w-!i/IbTV!)?@DLlrنb@G<CSU v(FbQ tmPGE^'?/fރy+?^+Q*zw]4h-~t+9ݮ[ zpn3j"5Y(S,kvmu9#X ä9À \#HYd5HDbԿԣhL`y"*iH34e)<Δ Zn(}?E;7_U{w]>[-Μ~c~)Lz>3> 6?/P}pMv\ hu,'%Be_$nJ' 'mer 5:FH@fOIhYHy)lM\-$LCi0:=s`+4ӈCz%v΀oJLMn:rpkP,}~͸eeWPv5c{D&[7硼fs刀~q~c}}*y-7-jv8⢜LyOvUKF+h>wyShQPeP}m?ҟ\AIAv[B$=#Cfׅ\gH{=:&Fӄ?X[_L8RU."`kF#'Da&[|U 4ץkdM}AM 4+"%[j;c;5 jQXlS(nfwZցgw aYL6ZU̢Upܱ/Ęc}b&Dqy{ 粖?m7?ඹe^ҿ9D(.j竼T9o6-,}H2SL((eMU+qQ6TGp4CPEp MA!YAEW#:PMg ] :OCnV:W=L ~9DnSt4hVU/& pE?˝i4#[K j=4> endobj 390 0 obj << /Type /ObjStm /N 89 /First 792 /Length 3701 /Filter /FlateDecode >> stream xڵ[is8_/l6qHMM8>c;@K͉$:$o7ॉlU*$^@%<=1p^H9\/fyJ >011[ M #A}EhCǩ/0ǃi`a C=.U> 8DF# (=8xHOm'E h dȱ#G!0^@02(@ĚLM`yAR?BzP^`2z\@  %G(%܄pi@08Fx"RP$^8 +Hꁒ>0բ .vv ) vq(=0E0'b Spf%fB pXP̍Vä2(>BLH2 ^ e!@&u)ɧ v Brα  cT co#{ټQ8O,dow_lD>M OKP%5"XKRhD*Lj໗_4o ZT8#rm{0C_{FN82'ύ{)t0w>bA:~?+ذgX I6!d䀼!SrF${rE @rKƠ4[=&d\iA(D'I@IY)9'ペM>)tHF2<&O]ir=ʑ-^lB>O U)ijr;=I?ۜP_A~%-I+E/Y JʳƔCYaʯ/|x<jiɌIB}3PIl/KFJ=Mr'i<4_T 2=XI<) fR drCtù*\mnM. 6O˸eYzuU*%(R R4uW[:a `Y ҆X bi)7|"%9q X@xy2V:uIʺ͋NϦ$ɔi2Ӗ\%}**tQo -sT7ޞ]cUj2 q,!i߆ ']Px i#"+-'[LJZ!BZGT!Zu@F M6+7(՚̔^I]Li\n ɛjY4f|E|ULq2mRZolkJC;1F($0,/Ra9;>aǵjiD? zOi?ϖyonثUƫU;7-̚-O.usrU\Y٭ʋ~^ \-[Je`hL5j\$$S˟j9|N=&*=kX hE?Mkɡd9=Xm!;y$cS"wYiFE BL0ScUx寮ԏn%7y| fxKרdd/͋kQb`tR>`s,vk׆h^}}³xنG'x>Z'ܶạ{68>BY|C{Oempщ<:&t<\]t}:kD]KS;`.?4nw _@@߆׀tb/rK^o~҅k,7i ݊ ulwbM{_xQw&~R> ;aLJޟ2hm[_} nt—vKPmEOΒ{U.7[I`9nq0nWZs5c{vH?03c&{Q0j]/qr%M[p1N&+;vO٪Φg-_L>-ɕ?f,V .[X2)kXғ9^= Za#"g>oD-z1={bU7DvNm9VrX-7o] xA^ŒܢGn^a+w7Kq=ڳZ{z=YOzZHPƤ1&Hwh=ZMԴG:7փ]+K1ʺ jgIVg;EsHzy.yV &VyJ5C3n"6ʼnlWf3g< fv66riLfQMDN̳<"ݸ|P8xge&sl2SC606v&ǩoo+Q,ɿA͍seWwI>A2[5GoxB<vgyv'l:59}B7^ln=l?6loX]KLY`w֑W5C1nT>Oƕ ۸̓ixWӴLClM &qDŽ惵a \M5 ӽxPt䂟.gNPoE'v\eje~G'&X5="p(uM㗙NLp3+\ 9O:үX)Vh=i)TM8B9chhܗE͙sLT܇P,/^AgVX5K7F~}XVЋQJo龎TO۩2R;##p_՗ϟ/+ 3U~ϦULr2I?C'I!b} Y;^n~V~ۄ3R->cMA"&d)]G8Il]1>:-m ۂF tY xL& ؁Aa[bq`-6wX\:pmh`5bY~!jm{b Ӏ>`GE n^ڦ!],[;h0?nZ(m:[}cdqhlعh@?D tF vx8|CE,iӺ~&}M {^`{7}.!kYFHh&{mm;ak0k{5WFB d$ad֑n},?ܺnBi\[Ʉ>wECE|;)iv?2S>V_DS Q}CBlȻBUJ>+e$Sgc9ئv͋ endstream endobj 448 0 obj << /Type /XRef /Index [0 449] /Size 449 /W [1 3 1] /Root 446 0 R /Info 447 0 R /ID [<7F22524354B87634C08AD0A597F8F0A9> <7F22524354B87634C08AD0A597F8F0A9>] /Length 1102 /Filter /FlateDecode >> stream x%MlE|ߖB)J-;j ZKvqePYu5qC]qcdA49ѕ?\ƨDyr{盙o{!oB,.r& dڋD9W& \G;MT -SDՠՂ2PJ8vv o<Ր6;]]~G54RKyJØwc[W>mw5Q  f/'K,|6wLtg_9qevEOtcQǢE9u<+1[uՂ_:mnzvfwa3RQ5lv 0o0:92úY[C Z4F@G>L:ԛ=Vu{J ^p=f?,}`pD.qf G88iՠ~cI97N`ۧ΀ip̀sfϾ֯',.ˀ&Rx i\-[%΃_͋ˀ/]ʈf߿Lњe?)ZlmX,{2,W|GQf{rR[ |KQSTi֟UY~qՖ_DQ_/)憢:PTTBGz+ DOSO#B IN)'8ĉ'N 0) { tbl <- glayout(cont = container) ctr = 1; for (i in names(.$widgetList)) { tmp = .$widgetList[[i]] FUN = tmp[[1]] tmp[[1]] <- NULL tbl[ctr,1] = i tbl[ctr,2] <- (.$widgets[[i]] <- do.call(FUN, c(tmp, container = tbl))) ctr = ctr + 1 } visible(tbl) <- TRUE } }, makeButtons = function(., container) { gseparator(cont = container) bg = ggroup(cont = container) addSpring(bg) ## for these we take advantage of the fact that when we call ## the handlers this way the "." gets passed in via the first argument cancelButton = gbutton( "cancel", cont = bg, action = list(self = ., super = super()), handler = .$cancelButtonHandler ) okButton = gbutton( "ok", cont = bg, action = list(self = ., super = super()), handler = .$okButtonHandler ) }, ## Notice, the signature includes the initial "." okButtonHandler = function(.,h,...) { for (i in names(.$widgetList)) { ## store vals in props of super # .$.super$props[[i]] <- svalue(.$widgets[[i]]) # pre 0.4-0 h$action$super$props[[i]] <- svalue(.$widgets[[i]]) } dispose(.$window) }, cancelButtonHandler = function(.,h,...) { dispose(.$window) ## others? }, window = NULL, # top-level gwindow message = "Basic widget", props = list(), # for storing properties of widgets widgetList = list(), widgets = list() ) BGTest = BasicGUI$new( message = "Basic Widget Test", widgetList = list( edit = list(type = "gedit",text = "starting text"), droplist = list(type = "gdroplist", items = letters), slider = list(type = "gslider", value = 10), radio = list( type = "gradio", items = 1:3, horizontal = FALSE ) ) ) ## override handler so we don't set values in parent BGTest$okButtonHandler = function(.,handler,...) { print(sapply(.$widgets,svalue)) ## or whatever else dispose(.$window) } BGTest$Show() ## show the widget Parent = BasicGUI$new(message = "Just a parent, not shown") MainChild = Parent$new( message = "Plot a histogram", makeBody = function(., container) { glabel("Plot a histogram of a variable", cont = container) g1 = ggroup(cont = container) tbl = glayout(cont = g1) tbl[1,1] = "numeric vector:" tbl[1,2] <- (.$widgets[[1]] = gedit("", cont = tbl)) ## others visible(tbl) <- TRUE # RGtk2 ## more button to create child moreButton = gbutton( "Labels",cont = g1, # action = .$.super, # pass in super action = list(self = .,super = parent.env(.)), # pass in super handler = function(h,...) { ## make a child of the Parent. This uses ## the plain BasicGUI style where we specify a ## widget list to produce the GUI. child <- h$action$super$proto( window = gwindow("Adjust plot labels"), message = "Plot labels", widgetList = list( "main" = list(type = "gedit", text = "main title"), "xlab" = list(type = "gedit", text = "xlab") ) ) child$Show() ## Could add other buttons here for other variables. } ) }, ## Override the default ok button handler. In this case to ## gather arguments and then plot the histogram. okButtonHandler = function(.,h,...) { lst = list(x = svalue(svalue(.$widgets[[1]]))) ## get values from var name # lst = c(lst, .$.super$props) lst = c(lst, h$action$super$props) do.call("hist",lst) dispose(.$window) } ) ## add defaults Parent$props$main = "Main title" Parent$props$xlab = "xlab" ## Now show the parent MainChild$Show() proto/demo/proto-vignette.R0000644000176200001440000001114412540307460015454 0ustar liggesusers # code from proto vignette library(proto) addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) addProto$add() addProto2 <- addProto$proto( x = 1:5 ) addProto2$add() addProto2$y <- seq(2,10,2) addProto2$x <- 1:10 addProto2$add3 <- function(., z) sum(.$x) + sum(.$y) + sum(z) addProto2$add() addProto2$add3(c(2,3,5)) addProto2$y # addProto2$add <- function(.) .super$add(.) + sum(.$y) addProto2$add <- function(.) parent.env(addProto2)$add(.) + sum(.$y) addProto2a <- addProto$proto(x = 1:5) addProto2a$add() Add <- proto( add = function(.) sum(.$x), new = function(., x) .$proto(x=x) ) add1 <- Add$new(x = 1:5) add1$add() add2 <- Add$new(x = 1:10) add2$add() Logadd <- Add$proto( logadd = function(.) log( .$add() ) ) logadd1 <- Logadd$new(1:5) logadd1$logadd() addProto$ls() addProto$str() addProto$print() addProto$as.list() addProto2a$parent.env() addProto$eapply(length) # show length of each component addProto$identical(addProto2) oo <- proto(expr = { x <- rnorm(251, 0, 0.15) x <- filter(x, c(1.2, -0.05, -0.18), method = "recursive") x <- unclass(x[-seq(100)]) * 2 + 20 tt <- seq(12200, length = length(x)) ..x.smooth <- NA xlab <- "Time (days)" ylab <- "Temp (deg C)" pch <- "." col <- rep("black",2) smooth <- function(., ...) { .$..x.smooth <- supsmu(.$tt, .$x, ...)$y } plot <- function(.) with(., { graphics::plot(tt, x, pch = pch, xlab = xlab, ylab = ylab, col = col[1]) if (!is.na(..x.smooth[1])) lines(tt, ..x.smooth, col=col[2]) }) residuals <- function(.) with(., { data.frame(t = tt, y = x - ..x.smooth) }) }) ## inspect the object oo oo$ls(all.names = TRUE) oo$pch par(mfrow=c(1,2)) # oo$plot() ## set a slot oo$pch <- 20 ## smooth curve and plot oo$smooth() oo$plot() ## plot and analyse residuals, stored in the object plot(oo$residuals(), type="l") # hist(oo$residuals()$y) # acf(oo$residuals()$y) oo.res <- oo$proto( pch = "-", x = oo$residuals()$y, ylab = "Residuals deg K" ) par(mfrow=c(1,1)) oo.res$smooth() oo.res$plot() ## change date format of the parent oo$tt <- oo$tt + as.Date("1970-01-01") oo$xlab <- format(oo.res$tt[1], "%Y") ## change colors oo$col <- c("blue", "red") oo$splot <- function(., ...) { .$smooth(...) .$plot() } ## the new function is now available to all children of oo par(mfrow=c(1,2)) oo$splot(bass=2) oo.res$splot() ## and at last we change the data and repeat the analysis oos <- oo$proto( expr = { tt <- seq(0,4*pi, length=1000) x <- sin(tt) + rnorm(tt, 0, .2) }) oos$splot() #plot(oos$residuals()) oos.res <- as.proto( oo.res$as.list(), parent = oos ) oos.res$x <- oos$residuals()$y oos.res$splot() par(mfrow=c(1,2)) oos$splot() oos.res$splot() longley.ci <- proto( expr = { data(longley) x <- longley[,c("GNP", "Unemployed")] n <- nrow(x) pp <- c(.025, .975) corx <- cor(x)[1,2] ci <- function(.) (.$CI <- tanh( atanh(.$corx) + qnorm(.$pp)/sqrt(.$n-3) )) }) longley.ci.boot <- longley.ci$proto({ N <- 1000 ci <- function(.) { corx <- function(idx) cor(.$x[idx,])[1,2] samp <- replicate(.$N, corx(sample(.$n, replace = TRUE))) (.$CI <- quantile(samp, .$pp)) } }) longley.ci$ci() longley.ci.boot$ci() longley.ci.boot$proto(N=4000)$ci() # do not need left <- right <- NULL anymore in leaf # also eliminated right <- NULL in parent tree <- proto(expr = { incr <- function(., val) .$value <- .$value + val ..Name <- "root" value <- 3 ..left <- proto( expr = { ..Name = "leaf" }) }) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") # incrementing root increments leaf too tree$incr(1) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") # incrementing leaf gives it its own value field # so now incrementing root does not increment leaf tree$..left$incr(10) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") tree$incr(5) cat("root:", tree$value, "leaf:", tree$..left$value, "\n") lineq <- proto(eq = "6*x + 12 - 10*x/4 = 2*x", solve = function(.) { e <- eval(parse(text=paste(sub("=", "-(", .$eq), ")")), list(x = 1i)) -Re(e)/Im(e) }, print = function(.) cat("Equation:", .$eq, "Solution:", .$solve(), "\n") ) lineq$print() lineq2 <- lineq$proto(eq = "2*x = 7*x-12+x") lineq2$print() Lineq <- lineq rm(eq, envir = Lineq) Lineq$new <- function(., eq) proto(., eq = eq) lineq3 <- Lineq$new("3*x=6") lineq3$print() proto/demo/00Index0000644000176200001440000000012612540307553013476 0ustar liggesusersproto-gWidgets gWidget example - John Verzani proto-vignette code from proto vignette proto/NEWS.md0000644000176200001440000000640012540341354012514 0ustar liggesusers# VERSION 1.0.0 * You can override the default printing method by providing a `proto_print` method in your object. * `graph.proto()` has been removed since it relies on packages that are no longer on CRAN. `name.proto()` is no longer exported since it was used primarily by `graph.proto()`. * Hadley Wickham has taken over maintenance. * All outstanding R CMD check problems have been fixed. * New NAMESPACE file that ensures that proto works when not attached. # VERSION 0.3-9 * minor changes to satisfy subtitute/eval changes in R 2.13.0 (thanks to Luke Tierney) * x could previously not be the name of a proto object. Now fixed. * proto print methods could break str.proto. Now fixed. # VERSION 0.3-8 * minor changes to satisfy R 2.6.0 # VERSION 0.3-7 * FAQ added as Appendix A of vignette * str.proto added (modified code of Tom Short) * the class of p$fun is now "instantiatedProtoMethod" and print.instantiatedProtoMethod provided (modified code of Tom Short) * "$.proto" now has a third argument which, if present, is a list of arguments at which to evaluate the instantiated method. Intended for use within sapply/lapply/etc. See examples in ?proto . * modified DESCRIPTION to point to new home page # VERSION 0.3-6 * order of arguments in proto and as.proto.list changed to address a bug # VERSION 0.3-5 * new arg funEnvir= on proto and as.proto.list [experimental] * new arg SELECT= on as.proto [experimental] # VERSION 0.3-4 * new function graph.proto using Rgraphviz replaces dot.proto * updated vignettes * added proto-package.Rd (viewable via package?proto) # VERSION 0.3-3 * updated NEWS, README, WISHLIST and moved to to inst directory # VERSION 0.3-2 * bug fix (recursion bug) * documentation improvements (vignette, .Rd files, README) # VERSION 0.3-1 * .Rd file improvements # VERSION 0.3-0 * that/super changed to .that/.super. * .Name changed to ..Name in dot.proto * improvements to .Rd files and vignette # VERSION 0.2-6 * demo index file fixed and demo renamed and enhanced * proto.bib updated * consistent use of obj$with(meth) in examples and demo where method not used in the context of a call # VERSION 0.2-5 * vignette and reference card now pass R CMD check/build/install * CHANGES renamed to NEWS # VERSION 0.2-4 * added control argument to dot.proto # VERSION 0.2-3 * added reference card * modified demo, .Rd files and vignette to correspond to new interface * changed argument list for proto and eliminated delegate * created as.proto.list and eliminated copy.proto * fixed bug in proto. Parent was not always set correctly. * added ... argument to copy.proto * added the isnot.function support function for use with copy.proto * cleaned up $.proto code for handling .. names. * the on-the-fly wrapper function generated by obj$meth now has the current environment as its environment. * proto no longer coerces its parent to a proto object. See note at end of proto.Rd. * added .. name processing and updated .Rd file * dot.proto now accepts names with dots in them * added delegate and copy.proto commands and updated .Rd file # VERSION 0.2-2 * added .. name processing and updated .Rd file * dot.proto now accepts names with dots in them * added delegate and copy.proto commands and updated .Rd file proto/R/0000755000176200001440000000000012540311067011615 5ustar liggesusersproto/R/graph.proto.R0000644000176200001440000000103513004710636014203 0ustar liggesusersname.proto <- function(., envir = parent.frame()) { stopifnot(is.environment(.) || (is.character(.) && is.environment(get(., envir)))) if (is.environment(.)) { if (exists("..Name", ., inherits = FALSE)) .$..Name else { L <- unlist(eapply(envir, identical, .)) if (any(L)) names(L[L])[1] else gsub("^.* |>$", "", utils::capture.output(print.default(.))[[1]]) } } else { e <- get(., envir) if (exists("..Name", e, inherits = FALSE)) e$..Name else . } } proto/R/proto.R0000644000176200001440000003652613004710673013121 0ustar liggesusers#' Object-Oriented Programming with the Prototype Model #' #' Object-oriented programming with the prototype model. \code{"proto"} #' facilitates object-oriented programming using an approach that emphasizes #' objects rather than classes (although it is powerful enough to readily #' represent classes too). #' #' @name proto-package #' @docType package #' @keywords programming #' @examples #' #' cat("parent\n") #' oop <- proto(x = 10, view = function(.) paste("this is a:", .$x)) #' oop$ls() #' oop$view() #' #' cat("override view in parent\n") #' ooc1 <- oop$proto(view = function(.) paste("this is a: ***", .$x, "***")) #' ooc1$view() #' #' cat("override x in parent\n") #' ooc2 <- oop$proto(x = 20) #' ooc2$view() NULL #' Prototype object-based programming #' #' \code{proto} creates or modifies objects of the proto object oriented #' system. #' #' The \code{proto} class is an \code{S3} subclass of the R \code{environment} #' class. In particular this implies that \code{proto} objects have single #' inheritance and mutable state as all environments do. The \code{proto} #' function creates and modifies objects of the \code{proto} class. It (1) #' sets the parent of codeenvir to \code{parent}, (2) evaluates \code{expr} in #' the \code{envir} environment and (3) lazily evaluates the arguments in #' \code{\dots{}} in the parent environment resetting the environment of any #' functions (where the resetting is also done lazily). All such functions are #' known as methods and should have the receiver object as their first #' argument. Conventionally this is \code{.} (i.e. a dot). Also \code{.that} #' and \code{.super} variables are added to the environment \code{envir}. #' These point to the object itself and its parent, respectively. Note that #' \code{proto} can be used as a method and overridden like any other method. #' This allows objects to have object-specific versions of \code{proto}. There #' also exist \code{that()} and \code{super()} functions which have the same #' purpose as \code{.that} and \code{.super} but do not rely on the #' \code{.that} and \code{.super}. \code{.that}, \code{.super}, \code{that()} #' and \code{super()} can only be used within methods that have their object as #' their environment. In addition \code{that()} and \code{super()} may only be #' used within the top level of such methods ( and not within functions within #' such methods). #' #' \code{as.proto} is a generic with methods for environments, proto objects #' and lists. #' #' \code{as.proto.list} copies each component, \code{el}, of the list \code{x} #' into the the environment or proto object \code{envir} for which #' \code{FUN(el)} is \code{TRUE}. Components whose name begins with a dot, #' \code{.}, are not copied unless \code{all.names} is \code{TRUE} (and #' \code{FUN(el)} is \code{TRUE}). The result is a proto object whose parent is #' \code{parent}. If \code{envir} is omitted a new object is created through a #' call to \code{proto} with \code{parent} and \code{\dots{}} as arguments. If #' \code{parent} is also omitted then the current environment is the parent. #' Note that if \code{parent} is a proto object with its own \code{proto} #' method then the \code{proto} method of the parent will override the one #' described here in which case the functionality may differ. #' #' \code{$} can be used to access or set variables and methods in an object. #' #' When \code{$} is used for getting variables and methods, calls of the form #' \code{obj$v} search for v in \code{obj} and if not found search upwards #' through the ancestors of \code{obj} until found unless the name \code{v} #' begins with two dots \code{..}. In that case no upward search is done. #' #' If \code{meth} is a function then \code{obj$meth} is an object of class #' \code{c("instantiatedProtoMethod", "function")} which is a \code{proto} #' method with the first, i.e. proto slot, already filled in. It is normally #' used in the context of a call to a method, e.g. \code{obj$meth(x,y)}. There #' also exists \code{print.instantiatedProtoMethod} for printing such objects. #' Be aware that an instantiated proto method is not the same as a proto #' method. An instantiated proto method has its first argument filled (with #' the receiver object) whereas the first argument of a proto method does not. #' If it is desired to actually return the method as a value not in the context #' of a call then use the form \code{obj$with(meth)} or \code{obj[[meth]]} #' which are similar to \code{with(obj, meth)} except that the variation using #' \code{with} will search through ancestors while \code{[[} will not search #' through ancestors). The difference between \code{obj$meth} and #' \code{obj$with(meth)} is that in the first case \code{obj} implicitly #' provides the first argument to the call so that \code{obj$meth(x,y)} and #' \code{obj$with(meth)(obj,x,y)} are equivalent while in the case of #' \code{obj$with(meth)} the first argument is not automatically inserted. #' #' \code{$.proto} also has a multiple argument form. If three or more #' arguments are present then they specify the arguments at which the #' instantiated method is to be evaluated. In this form the receiver object #' must be specified explicitly. This form can be used in situations where the #' highest speed is required such as in the inner loops of computations. #' #' The forms \code{.that$meth} and \code{.super$meth} are special and should #' only be used within methods. \code{.that} refers to the object in which the #' current method is located and \code{.super} refers to the parent of #' \code{.that}. In both cases the receiver object must be specified as the #' first argument -- the receiver is not automatically inserted as with other #' usages of \code{$}. #' #' \code{$} can be used to set variables and methods in an object. No ancestors #' are searched for the set form of \code{$}. If the variable is the special #' variable \code{.super} then not only is the variable set but the object's #' parent is set to \code{.super}. #' #' A \code{with} method is available for \code{proto} objects. #' #' \code{is.proto(p)} returns TRUE if p is a prototype object. #' #' \code{str.proto} is provided for inspecting \code{proto} objects. #' #' @aliases proto as.proto as.proto.environment as.proto.list #' as.proto.data.frame as.proto.proto isnot.function is.proto $.proto $<-.proto #' with.proto str.proto . this .that that .super super #' print.instantiatedProtoMethod #' @param . the parent object of the new object. May be a proto object or an #' environment. #' @param expr a series of statements enclosed in braces that define the #' variables and methods of the object. Empty braces, the default, may be used #' if there are no variables or methods to add at this time. #' @param envir an existing prototype object or environment into which the #' variables and methods defined in \code{expr} are placed. If omitted a new #' object is created. #' @param funEnvir the environment of methods passed via \dots{} are #' automatically set to this environment. Normally this argument is omitted, #' defaulting to \code{envir}; however, one can specify \code{FALSE} to cause #' their environment to not be set or one can specify some other environment or #' proto object to which their environment is to be set. #' @param x a list. #' @param parent a prototype object or environment which is to be used as the #' parent of the object. If \code{envir} is specified then its parent is #' coerced to \code{parent}. #' @param \dots for \code{proto} these are components to be embedded in the new #' object. For \code{as.proto.list} these are arguments to pass to #' \code{proto} in the case that a new object is created. for \code{$.proto} #' the method is evaluated at these arguments. #' @return \code{proto} and \code{as.proto} all return proto objects. #' @note proto methods can be used with environments but some care must be #' taken. Problems can be avoided by always using proto objects in these #' cases. This note discusses the pitfalls of using environments for those #' cases where such interfacing is needed. #' #' If \code{e} is an environment then \code{e$x} will only search for \code{x} #' in \code{e} and no further whereas if \code{e} were a proto object its #' ancestors will be searched as well. For example, if the parent of a #' \code{proto} object is an \code{environment} but not itself a \code{proto} #' object then \code{.super$x} references in the methods of that object will #' only look as far as the parent. #' #' Also note that the form \code{e$meth(...)} when used with an environment #' will not automatically insert \code{e} as the first argument and so #' environments can only be used with methods by using the more verbose #' \code{e$meth(e, ...)}. Even then it is not exactly equivalent since #' \code{meth} will only be looked up in \code{e} but not its ancestors. To get #' precise equivalence write the even more verbose \code{with(e, meth)(e, #' ...)}. #' #' If the user has a proto object \code{obj} which is a child of the global #' environment and whose methods use \code{.super} then \code{.super} will #' refer to an environment, not a proto object (unless the global environment #' is coerced to a proto object) and therefore be faced with the search #' situation discussed above. One solution is to create an empty root object #' between the global environment and \code{obj} as in this diagram \code{Root #' <- obj$.super <- proto(.GlobalEnv)} where \code{Root} is the root object. #' Now \code{.super} references will reference \code{Root}, which is a proto #' object so search will occur as expected. \code{proto} does not provide such #' a root object automatically but the user can create one easily, if desired. #' #' Although not recommended, it possible to coerce the global environment to a #' proto object by issuing the command \code{as.proto(.GlobalEnv)}. This will #' effectively make the global environment a proto root object but has the #' potential to break other software, although the authors have not actually #' found any software that it breaks. #' @seealso \code{\link{as.list}}, \code{\link{names}}, #' \code{\link{environment}} #' @keywords programming #' @examples #' oo <- proto(expr = { #' x = c(10, 20, 15, 19, 17) #' location = function(.) mean(.$x) # 1st arg is object #' rms = function(.) sqrt(mean((.$x - .$location())^2)) #' bias = function(., b) .$x <- .$x + b #' }) #' #' debug(oo$with(rms)) # cannot use oo$rms to pass method as a value #' undebug(oo$with(rms)) # cannot use oo$rms to pass method as a value #' #' oo2 <- oo$proto( location = function(.) median(.$x) ) #' oo2$rms() # note that first argument is omitted. #' oo2$ls() # list components of oo2 #' oo2$as.list() # contents of oo2 as a list #' oo2 # oo2 itself #' oo2$parent.env() # same #' oo2$parent.env()$as.list() # contents of parent of oo2 #' oo2$print() #' oo2$ls() #' oo2$str() #' oo3 <- oo2 #' oo2$identical(oo3) #' oo2$identical(oo) #' #' # start off with Root to avoid problem cited in Note #' Root <- proto() #' oop <- Root$proto(a = 1, incr = function(.) .$a <- .$a+1) #' ooc <- oop$proto(a = 3) # ooc is child of oop but with a=3 #' ooc$incr() #' ooc$a # 4 #' #' # same but proto overridden to force a to be specified #' oop$proto <- function(., a) { .super$proto(., a=a) } #' \dontrun{ #' ooc2 <- oop$proto() # Error. Argument "a" is missing, with no default. #' } #' ooc2 <- oop$proto(a = 10) #' ooc2$incr() #' ooc2$a # 11 #' #' # use of with to eliminate having to write .$a #' o2 <- proto(a = 1, incr = function(.) with(., a <- a+1)) #' o2c <- as.proto(o2$as.list()) # o2c is a clone of o2 #' o2d <- o2$proto() # o2d is a child of o2 #' o2$a <- 2 #' o2c$a # a not changed by assignment in line above #' o2d$a # a is changed since a not found in o2d so found in o2 #' #' p <- proto(a = 0, incr = function(., x) .$a <- .$a + x) #' pc <- p$proto(a = 100) #' #' p$incr(7) #' p$incr(x=7) #' p$a #' #' @export proto <- function(. = parent.env(envir), expr = {}, envir = new.env(parent = parent.frame()), ..., funEnvir = envir) { parent.env(envir) <- . envir <- as.proto.environment(envir) # must do this before eval(...) # moved eval after for so that ... always done first # eval(substitute(eval(quote({ expr }))), envir) dots <- list(...); names <- names(dots) for (i in seq_along(dots)) { assign(names[i], dots[[i]], envir = envir) if (!identical(funEnvir, FALSE) && is.function(dots[[i]])) environment(envir[[names[i]]]) <- funEnvir } eval(substitute(eval(quote({ expr }))), envir) if (length(dots)) as.proto.environment(envir) else envir } #' @export #' @rdname proto as.proto <- function(x, ...) { UseMethod("as.proto") } #' @export #' @rdname proto as.proto.environment <- function(x, ...) { assign(".that", x, envir = x) assign(".super", parent.env(x), envir = x) structure(x, class = c("proto", "environment")) } #' @export #' @rdname proto as.proto.proto <- function(x, ...) { x } #' @param all.names only names not starting with a dot are copied unless #' all.names is TRUE. #' @param list list whose components are an alternate way to specifying #' arguments in place of \code{\dots{}} #' @param SELECT a function which given an object returns \code{TRUE} or #' \code{FALSE} such that only those for which \code{SELECT} returns #' \code{TRUE} are kept in the returned \code{proto} object. #' @rdname proto #' @export as.proto.list <- function(x, envir, parent, all.names = FALSE, ..., funEnvir = envir, SELECT = function(x) TRUE) { if (missing(envir)) { if (missing(parent)) parent <- parent.frame() envir <- if (is.proto(parent)) parent$proto(...) else proto(parent, ...) } for (s in names(x)) if (SELECT(x[[s]])) { assign(s, x[[s]], envir = envir) if (is.function(x[[s]]) && !identical(funEnvir, FALSE)) environment(envir[[s]]) <- funEnvir } if (!missing(parent)) parent.env(envir) <- parent as.proto.environment(envir) # force refresh of .that and .super } #' @export "$<-.proto" <- function(this,s,value) { if (s == ".super") parent.env(this) <- value if (is.function(value)) environment(value) <- this this[[as.character(substitute(s))]] <- value this } #' @export #' @rdname proto is.proto <- function(x) inherits(x, "proto") #' @export "$.proto" <- function(x, name) { inherits <- substr(name, 1, 2) != ".." res <- get(name, envir = x, inherits = inherits) if (!is.function(res)) return(res) if (deparse(substitute(x)) %in% c(".that", ".super")) return(res) structure( function(...) res(x, ...), class = "protoMethod", method = res ) } #' @export print.protoMethod <- function(x, ...) { cat("\n") print(attr(x, "method"), ...) } # modified from Tom Short's original #' @export str.proto <- function(object, max.level = 1, nest.lev = 0, indent.str = paste(rep.int(" ", max(0, nest.lev + 1)), collapse = ".."), ...) { cat("proto", name.proto(object), "\n") Lines <- utils::capture.output(utils::str( as.list(object), max.level = max.level, nest.lev = nest.lev, ... ))[-1] for (s in Lines) cat(s, "\n") if (is.proto(parent.env(object))) { cat(indent.str, "parent: ", sep = "") utils::str(parent.env(object), nest.lev = nest.lev + 1, ...) } } #' @export print.proto <- function(x, ...) { if (!exists("proto_print", envir = x, inherits = TRUE)) return(NextMethod()) x$proto_print(...) } proto/vignettes/0000755000176200001440000000000013004746110013421 5ustar liggesusersproto/vignettes/proto-smoothing10.pdf0000644000176200001440000006125212540305535017441 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 365 /Filter /FlateDecode /N 8 /First 46 >> stream x[K@X_Z)4D X|&ۺd#;=9ÁG =!xB^4c3URXet"Ar)OрS`œ)f)\:%a8{Uv/]cQS54l-q;>;YY KT +fwRL-0 a1B9b{8 M=e~uֱc AI~)ǽ?wi'Y"S-{TԲ%wQnwak [$Y5pfSL[LTXi#q]un M{]K#QۭDcnˆ_KZ+ѨGE_xendstream endobj 10 0 obj << /Length 24399 /Filter /FlateDecode >> stream x͎tIn%"݋͸U[ZHj-Y¨!oRXTf1=xݍHQ?g?_~ӿ~?}?s?_~~ԏ__>Og՟{}j??Ow:g_Ye\Ck~e7O# Uy/o߽E.9g.j,WNmt`.+V>;?7 t^E5}M۟z{P]QD>˷UNyrvfvw7WGھ?h_v`& W4yNlw;06\o/_Qz{l[?ەg>[ۥ߷~ k\Ei|vnnw/MkhT;qQi {Ewqu{Ao\DyO9oUCyw婝jկ|Cd/m7WC/K-/~߹Mܟ)!b|Ih?z{KRyN_հ_*vz qS\>譪|CXW=Ao﹩ىF~Lh| ~Ʒ(ϡʇvQ|_Ou=sAo{y{35=[=ߗ\oggрގz{Y by`tz{ھۻ>S\oub}S.j|w-Mz[qU})"z;^N]Ƹ|7oѿo7סr|tMG|jWrv@oz|8oG|3o!z烶GZL"=~\o(gRoz>L7r ?qqy4M[\8:߂6A5>[ismbɿz;8szF/ߡr$|_.vzۚ'oOgoW-. \zېqZ~Ao~ѾPoٳC譌|!{.ߦ+.a-Ɖ.U[ u~P|F~BoM.]lOwV|\o{jV\O۟nI tKzSG^·˷hs*>x]kRzޫQw&V/|ۮJ]}}_ޖ-/mQGX7*ރ758f筡\>z4x>-e`>uZ`*:z[Ts-Gg]>,]gz{O˧ڠ61~vô7κ|P!.i֎ہ͢elPmM|(ߩնL1}V !JrLjDmWO*PPY֗j$[TڡH l^Yx3𽩥lQgP:jྵ a~v%=}̰XN˦1wA;6!/i*lwjMzT;x߽Mŏ몛[mWWU3{8g9C27v-l&@'u"ܭՓ^6T]ule]Z27D)*AO(؟ 5u|x{+H/\YsG-MrCD;W9!Z|/~CTHH:97!Ou_W)Ԅ]ud+VmN-u| ;;wpNη:"-)|Wo=&vקu[ϸJ +-2"c7&xiǟH|~v+s>kQ)& [":DG-ɆÏ}AEȸ1+/q2ȲcBO"#&rٵޞ"5ZrZ#9yk$bW+* zvʌwbGPwuwq=:ӹ}jVFEGWuS#.'dL=ʍk<#f&|fȵ catMqO=P0unWajF͢q;[‹tv'mT5w:f'AYͥ u5祊|!N#9Y[,^k/komUN> ]jKq(Rr1ǚS4Ps 3 'M؎keƠS~[,6-K*Zqc+9jʈic5w~i߷Ѕd#Roaҧ7vy捈w%y\"}UG\r*cB !\ybvL0ytY*כD_!NFGV?R'Zx/&BW oo J|s աK|WqVs2 ).}&*ȽH\gmWsԲWU+BnO|#E3L 3{|b(O܊\ օ戾_L uDLU.<|;Αsgabk|}~c2V_ z>lmWԨd'+.@iH0J9’];(.{7R,4`7BgU 3}Wo,(Ҵ&0ݎ|$gaYV;#>D9 BoE.ۮ!GIlx&w"`xLA\8y#o#E6T3}sw /ϋHKU7˞2/+nWލt&oyjEzUdF-ꑻ-M4^loLMhlـ(f_>/$h, =lwCqs]Laߝ;e'?.`XmR1S}呕0$xCj=P^(ܹ2zhj`#G66d}P`4;Y D"bkrO X*ʾMنjQ?k/?o?GQoxl\&S^cH|Lja@zOI}~)$_>|NsH|>aڞI|gm/B?,y7?hhվeh5ąr¶1|OʵM9nP~1ʽH}~zOI}~ uy>s~>'9d<|mI|<Gp/݋Z{Κr]9%2N x IG]72nG'?_}^s4{xpb|?b4DvQT_ġ=}I꩘5Յ{q%QwΨ\җsj{lXO$=7}!%=>sSx2Q>/w2޹Flơ'xݛE1dvMQX>|N^%g/UGP $?749;I/M#̜ON 1.Qp1M$@;>|ŧ^mŖ\+G.l\D?98l o.S7K2;p {4#$'H,zXE6PǕ㒬7dVA6>w>rf%_ڬjrDy]m'VH%ehrH%T-;{ς17ZB\-%QӲ$X~_d<vg!L 2*QX~yUF7Wd;X>c%$c| ˟rtJ./Oi,=V'ckK?\=?TKg,H,КT.?Kn>>UT._uP`F҆?qh rҪ c ˏ#4.2t.S%='#h qxxN'9xOX@V#pX$O;G3i'\6;'ONMr f/^k$/ GsV$c2G ]=I!L.^\~/zQ}[h}{q5b[\>Ғ |Q1W)$]x/tGO=n`0 4fde6dCN02xq07!9|mZR!\k}&=$]KLu6.<Z~3~wh |HAl篺onPrX~l+\~`΍1a: bR8{FbXޏ3XeU fӈШqX_VVkъ?g?1gdZlGP :LX~a=8ˌIWDk =ۂ',@`Gt6Ă\hgV җr#fQ#kBkyz-%ݱ[V)'}Qk+8aRmܼK bz4Ԡ=RZ efЋPG>ʞʌ;>07X A7B!q\tCLMy-r|\xtOЍ@lm\Q7̾\o!{_V=k -tu7ˣ8iGAżFiLƫ2|Yu'LtMYC㓞l]^܌7;iGMqNw'5߮3֥?9yl'5</S4kځƱu>"WKyrq{`"62hAqp oCZ, O \|?>؟37=?G|'76ҶN".m2B[1pkqBxl3jUFgV,~1B1_|vL٤mAgbwG,s?[-msx שm#QH 3 353\q K3jdPs= y*᝴át%͡}oĊ ? t۟r`z2L-ba'ET9HI|@_hz-;7=B(_];zY (jLU&=TydV9\ 6rIS|.h&Vjҭ~fG xog z0V6c(ډ'\oC~LttTNFj=#jA/Zff[$>o2G{НGi~:3ۉ%. QB9h*vy(qJgL$]c8#22syp#5PA&y?xD|_uF|zu23cqȎy5caOFv,N#p;#;iFMНpvGw>@5+o#;;ӨGZ|Dc@XZҁa)Iw"mN#6+Ix`L5{#Ts}g>@HTW70퉌u';6>3ZǤ.?#=/#=2@`"o4 {2i' v0i l4i;ίAO{v>m1i~#ڧif~>mf~?~-A#cS/ ~Hל4x?ODg?Ӟt(r?4Q<@-AP+i/jybZA@Dմ0$ZI P=M"; oMb8>cX$Mjc0 fޏ&A5$"$$: 3w:C> z'^0 hxzr"$6fsh}$>25IPq=1'ABDJi%T|()OjǓ@X6z`|O *y>N=ۡxߘ #b*%NzxܜI#^7#1 *3IܐM!MPD|fѳFIPD\Or?/(X>y9 bt㌀$TғKZg :[$j:#Dau,7verˆɭ 8ea{;?5񽸏YzMP"f "ӢMDf;-z*^,@lǰ<[pYD6C5| :# gįZ%d0 pVw`iDAr -sw"׽2u[~jlzlMaV3xMy}ޜ73?~}~>+>c;$L?CyTCynCypN#JIBw~nq]}7vy/]Gzt]5 ~ T .LOx Oӝz~>8Byْo{~~8t2T#C,n{%_XׯX  BlR/up>S6ߠD]|Vv:Ɲglu>E;mlu(>4/k-z~m_狸97' ~/p1|?ե8)VhlXv]: .|5Cez}ޛ;&ORQf䬌JՖJ[MF'EDf4ukƚ^t>cIJf˯5i!=7m{?%SuCԣfы}dՈEU94V:߈$ 73QA_gcӣëRUkG g9.:'-DZ|Q*`F 3|KWSve:1?2G4zeU\XE}}"MCxkє}(lD;W{}1lc =4"6PG_ak}䂘=uhF,5qE Ֆ ƶkn' ]uf/M+KYTG:_t .ҲdV1rrP},dž|-)& z#d@c2Q TL:Zu>t v!лb4# CSn-~*)Ŕe(C^aˢ>h|c2_ "4, Ƴ<5@2vTۡɓCcZ&xc4>c#}+Q'cTY8[oi&њ\#Ѭ[ >EP}_s'UvlZX֊1Ը#.kdul)Cs=S<5jʌ}fo+ ! ^+HCePЉ811%=:Fk| %,XHjo?$Go_Ң^Ӫa xc}Xy)XDt7Q[q֔eeC;}TONV#tI8oaig{爫umXS^&^S34P[ڪ|bP*\ ӚζXD$aU' uQE M7m%CT1eS$4#Mڀnw*1% !㿿77ǾٰHZG#vR>Da`Џ*_ |vMB5}}j!ƅXMjTiKdާsSRs6x|7 2tEk8,[lUF%|XgЬu˰ts>ܝ)(y@YZI)l˩ M.qR_9=;y*֬'zk|Qg=vQTyŘ>~GݟSM;8_Ɛ Do]7EKC;oh +|荲TACZVe#"KgQ+^œ <РV[1Bۜl(i;'%|cSt 46~G#sFrl{Mt_vZNf:zSD,6]>Zd {:Jnb31|7xDuζ٣Y8_mEDcs-b,[f쭥/Z˿s НηqOVIK ;qVUY-e-谕SU/X*OR+M uTrƶ)NCvvzSսDG8hK>ئ՝uDewnUqvҊ݀o#ni5&۔L ȴ9geڞ2ŔuА&F>pLʖ*b p#'IMkQ#& &6`tYbl@uu}ƝpvjXK9ja vmN/쫯oj5gJpTvۜצ1DS|WeR`5]t0jζ atO㇪z?9Yw$n࣭ڌGX|U elu VD: }@<]QnV+|.4RJ^Ctz%wrʃ J+SmDRm5"KPNlw gv;OCEE 9.ČGɪ.1bLlK}}1rb9Z*O̔<[s \9)Qw "ަ C!s|Kg3'$ρYerڌfFbtvu|^7=6\ʺiaM#FjコnqR t fJ{TjCC?X;dM]qvKcٴº|RQ1#/*Dsm*m-2`IgN`&;@E 51Жܖl>gU~* /^?u@@ A JLUNj;@Qq-hW1xΪ] /W`Vv MWypΪ5cRgel]RV,$Z-{Ѯ6W#-DÅ7mE00U.NqE-ip6ԉբ.Y,lbmZ cٟ Dtqmjd{77ۓ{uv%]]e3Κ2 PeОѳ]| ~\eM\6:h"6עspZӻ$ &g9.^TYc#.`wֽq͏0N/|cRYԺIb=X q45q٢pZLܜsʆfSO9Kl4gnk4qVCLO\mIX㶴0ޫ-^ݴƬ9/^KK]&'t^Ctoe|MmM8A5i6NWrNLe<8knB:ă}vOq̼]\⬢)Q(~vNٟ%|\gmQj5@QUC{E %K|+@~Y)EJ[D|DzWvq1+gNbn1j9'[wֆj$&OZrsvD790^6fj[ԨЄ[\Z}S^E5sVP=ڥzf ԞQ۔1y,Zíj+M6[ g(087ThzYl˛x=,V! ͛j׻D ٴh;GF}.N%8kS!P9d2S3ÙƦCg9vu֪z Uq%[:;D8B'3E0ͺ \hkGL_6ضd879eC-fB\C4)tՒYk1GFJt٢KfV}zh[c]J3v}ëAe@{ -*0B.ѻDj@ˇ*yσ%zԗm",K% 3F ՟B,fdjou6=i:v˷5 }L.a|~Zs {_7P?8=/h畘5X?}To`ZqШD8_>/*nMLW>%C,1|+-&Nf& `\p6Mt٢Qݹ|^U3S,XԚ)[Zz-v=;ڣ%ʦҲaƷw>T|ͮ[/yTA{ h SRmp|e3m@WEQlT":{Ti;UhyÖal֤uV|WgX,2jVٰ]:Wٮ|chmj8=Xii\i 56ci.y*j ٭Nkbz_9Qx\gPz LAS:}]͆7+vkkeλu1c] l#4@6"|PNSٕסy˷XMK,mt/æj87&/TVx[ڛz?lPbbM5eg1~;dմx:TYyF΢H]Gɪi~؟D^Vrlqb ڦmcVtMˑIMVXF./Nc9, UPv\X.]NcVs.N)[\iv5ֶl4Cvh:B}RQzEt9PdžB2 E//չ<4ϕ}@wBi: .ϗ*meC:44_ ._9ЊlNcK9ډr S{ө]dL}}r^6sЎ8:; UV%yiw1ցvrvhtDs`"ꠎLw5T,TY-yAQ𝙽I4`**5%,VÜ 1BZˇ#yf^+ΘlF괺?4iۢAV~E6bk5zbB|Mmw?ؚdN΁n٬V ϦVQvPl\6k03ie_'DŗjM9N2w'HH˅\>/,Ca/n3ImWÆB;wP2ݪ|v<>*D {Nh;fj`=,G 'ˎZz}ie|cx97CZ`0ffޭ;{^W-r\_x?qæ m'_?~σ\Յϙtz>'y)$_>h|N󉂷s/;|~N=~w?/mg3o|5C}W?:lkl<^؎Hd-7gu=q|ef6{|ܯs/E?/W LA/|L ү}J{"߽M45f;Y?t"7,qgj~s%1I h쯟2x>ۊ4䭔5p^~:ׯbi?;~'ZmS^ux ̤mD4<-nW5VI㝞& zwz╎b{)#;ma :ڽ<ϠCxhЍt_A<zwz[)S5h+tg9 (A<;!y<t#xAN<:!'I<),&;H:tc;H:Az=H;;H:o y$]o#yl}w{x}Vu)!o/y;}Jy/VRGVRgVRtC+)O)_vW/jʃ=Pփy: :sj{Z,t'vcpAGNAެ*,}1gXSp']Zn|~mAC/&y=ɖtThWzp5Cu'ϷgCh5H 4x6>CB%GgNh;GA/W>o=k!bA<:ZtdqJ :QJ1N1Kl|^ : !N{t>=lzfАGO{s:o|~ɈͶ+oVמY{(zس~GIy>Zc#fg)yyYc?y! yPjIyPgSjIyPjIytcO!}>?AUkʣנC/>AO>Cmhh!yP.|ۥ'_[!_m)w|㥍/~'PVН/3SQ@Cg*BH<߮,#0 M}Fܓ^^Yz[jƹt}c= ha/G])ڏKН>&7tȃ!g|>Glz}ti.qx_:A{1Wc?~KyG/c2c^j)oC wxr>Q3`O"^Wy'_+hx}RGx1OP~?C>=~SI<)?ЁyG)}S(A)h烟j>)x?bOO_S~'TrOT:S-OՠOF?UNT!O=tx~|SW?}>)O^~zS'փ華?Ee=)3OY~zSփ}a=)'փb}wO3>:S=Ok>{G y~K>tF{>t/iv2~?ݲnO"؂t=-v2? ?Oew~*;S/ށx }^ٻ#AbTLyП3A{gʃ 3AbϔTJyY;S/tȃ^)yОO=Ny_;A{?:A{wʃx~ꅶx>{RSR?Q!SC{{jʃԔ)SCzjʃ~}=QI_þOոOհ'S5'jk~=aoOԂװ'S5 T z?UþOհ'S5 T z?UÞOӾ}=#m!y%S<XIy߰oXjVR/<_XjVrR! +)VS]|VS/<zwzw:S{SO২6rx;Y_-OWf͌?߱co[>o36w{[O> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 12 /ID [<4191b56e66c2791d4502644d0cf9450b><4191b56e66c2791d4502644d0cf9450b>] >> stream xcb&F~ c$@g!a&K endstream endobj startxref 24953 %%EOF proto/vignettes/proto-smoothing06.pdf0000644000176200001440000001316612540305535017447 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 365 /Filter /FlateDecode /N 8 /First 46 >> stream x[K@X_Z)4D X|&ۺd#;=9ÁG =!xB^4c3URXet"Ar)OрS`œ)f)\:%a8{Uv/]cQS54l-q;>;YY KT +fwRL-0 a1B9b{8 M=e~uֱc AI~)ǽ?wi'Y"S-{TԲ%wQnwak [$Y5pfSL[LTXi#q]un M{]K#QۭDcnˆ_KZ+ѨGE_xendstream endobj 10 0 obj << /Length 4893 /Filter /FlateDecode >> stream x\M-IqKXL߹4m d!%^#`Os4T4^𚘺Q'N֟_~}#(G767Mn/v/_/?WoVI1^n?GW3Cz(f]Cz0c\4p)!vz~#׏\SHo1[HoiyL|ފsa|9Q|e< ;i=`ςic4od_gG}kG~#z*6oDcYQk*K9aF-Xs%fjLG+ԋyi Wgh3jlk-<"NY<5yAwڱmg}%7 y90f5=|q, N\S .1Kɮ2. pڑck ieH+!GtAZF( )6,(cŕ?Vk8(j YH Ӕb(j@qv5VOgȱ%ܩpQX\#Ǽ\ΰ iQZ  J )v ++*Zr#*%BV'ݡB|ß R4$8\@'{ԏ%P\UA'8Ԃ<8J h֪1gPP ƀltdzω*ć'"':`K98T.p_NGTEvŠrŹcG̪uFDDv ﱍGeNg pE`un )NGq|D.V1d_1@cьt1j4N+1ZELt3\liMa2؏j!RlAdS`pE@,hIlsm<zR-)QwtE>`9߳l3>A׳N9Cqt%kkѠm=,8m+Wl/VI GR4vP(#+ۍM` %rFe XIPu&jzQi F Sͷ9c|=_^xGH2ۦ h//"P,W%=kw^Z~]u ~1~ ֭eE1}?/Pm6L~l9{fἽlOd9މKVO?4z٤5Өzz+ft=9r`~~o|{?4y< <_YJ(ΫW<-:@?>΄< wz?w+bCb >_}. ^c2zURNFP`^yLңD$z_cޤ?9b0y}FRP aΰ<yP(#|QJ)!yE(}̞K_fCZhrUng^S_OU.,-߫zC\f΄u<[ KLCLk1hB%>)[geԐ{!ҏ\bى eFψvdAw]t>~Rt]0r`.$lRRudh /%۷u,y1b5@z3h@Qt^oأE'C:v_7I_0]lU\!4{=כfWY\իHF`TivkM-1k4Tt6myz-5f()@#Lj2F4IHh;FypIV,IFIX-ݫ+G]h:T \W$ m>+5hJ)txȚh ƞzsb9$̡6t>nlJQE^wZAh66ֱUs,, MG'ںJK v)X ֝pp"SgmWlKo-6&H>]뢗XLGӛv!]a !,|<㪞 Һ_NJ b1ax]}|-H$|;<\kd!e?//c(>{Kw_ Úlk!~Py{ɞ[sB~O\x=c k;T替秿@?C[|I{"o:rK~O[}foYyمMIpA_L7FٞnRڹif6>ESɦO ƖֹIK'c|TXH_'–SE!d`Vm}gs20Q$`z>&>)hE;C>7(cfT=K灖Єa A^A#H+Ytȇ,E|Ȋ]'=&5c+;& +(aMeSҟMFjȟE y!5~|)?7u= [BH*=Zj}!/}~KXɇGևp);E 4 >DRzV)O15_(s9I ͯүBM|qz[i V|ݏDz rA>S0]2U LJohq3tU? `1 wɳ>i0tQ>.7x~?|b15y~S Pq~?k"iz ~)OC3xGCG '=?m7]N_'-Eq_yI ,DLvXEǯLnoٞ/C8Xx?|g67_U_u8xg[16*z[f7'!G/2t2;uS0>~:yO~=- 1il'7EeɶE~sDqNR>k' 4( ;iůiRWyoﵹ.ݯgޝ67a"^,| endstream endobj 11 0 obj << /Type /XRef /Length 34 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 12 /ID [<4191b56e66c2791d4502644d0cf9450b><4191b56e66c2791d4502644d0cf9450b>] >> stream xcb&F~ c$@gA$Iu endstream endobj startxref 5446 %%EOF proto/vignettes/proto.Rnw0000644000176200001440000014340413004710743015265 0ustar liggesusers%\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass[nojss]{jss} \usepackage{Sweave} \DeclareGraphicsExtensions{.pdf, .eps, .png} \newlength{\half} \setlength{\half}{70mm} \author{Louis Kates\\GKX Associates Inc. \And Thomas Petzoldt\\Technische Universit\"at Dresden} \Plainauthor{Louis Kates, Thomas Petzoldt} \title{\pkg{proto}: An \proglang{R} Package for Prototype Programming} %% \Shorttitle{\pkg{proto}: An \proglang{R} Package for Prototype Programming} \Plaintitle{proto: An R Package for Prototype Programming} \Keywords{prototype programming, delegation, inheritance, clone, object orientated, \proglang{S3}, \proglang{R}} \Plainkeywords{object oriented, prototype programming, S3, R} \Abstract{ \pkg{proto} is an \proglang{R} package which facilitates a style of programming known as prototype programming. Prototype programming is a type of object oriented programming in which there are no classes. \pkg{proto} is simple yet retains the object oriented features of delegation (the prototype counterpart to inheritance) and object oriented dispatch. \code{proto} can be used to organize the concrete data and procedures in statistical studies and other applications without the necessity of defining classes while still providing convenient access to an object oriented style of programming. Furthermore, it can be used in a class-based style as well so that incremental design can begin with defining the concrete objects and later transition to abstract classes, once the general case is understood, without having to change to object-oriented frameworks. The key goals of the package are to integrate into \proglang{R} while providing nothing more than a thin layer on top of it. } \hyphenation{ma-ni-pu-lating} \begin{document} \SweaveOpts{concordance=TRUE} \section{Introduction} \label{sec:intro} \subsection[Object Oriented Programming in R]{Object Oriented Programming in \proglang{R}} \label{sec:oo} The \proglang{R} system for statistical computing \citep[\url{http://www.R-project.org/}]{Rcore2005} ships with two systems for object oriented programming referred to as \proglang{S3} and \proglang{S4}. With the increased interest in object oriented programming within \proglang{R} over the last years additional object oriented programming packages emerged. These include the \pkg{R.oo} package \citep{Bengtsson2003} and the \pkg{OOP} package \citep[\url{http://www.omegahat.net/OOP/}]{Rnews:Chambers+Lang:2001a}. All these packages have the common thread that they use classes as the basis of inheritance. When a message is sent to an object the class of the object is examined and that class determines the specific function to be executed. In prototype programming there are no classes making it simple yet it retains much of the power of class-based programming. In the fact, \pkg{proto} is so simple that there is only one significant new routine name, \code{proto}. The other routines are just the expected support routines such as \code{as.proto} to coerce objects to proto objects, \code{\$} to access and set proto object components and \code{is.proto} to check whether an object is a proto object. In addition, \code{graph.proto} will generate a graphical ancestor tree showing the parent-child relationships among generated \code{proto} objects. The aim of the package is to provide a lightweight layer for prototype programming in \proglang{R} written only in \proglang{R} leveraging the existing facilities of the language rather than adding its own. \subsection{History} \label{sec:history} The concept of prototype programming \citep{Lieberman1986, Taivalsaari1996a, Noble1999} has developed over a number of years with the \proglang{Self} language \citep{Agesen1992} being the key evolved programming language to demonstrate the concept. In statistics, the \proglang{Lisp}-based \proglang{LispStat} programming language \citep{Tierney1990} was the first and possibly only statistical system to feature prototype programming. Despite having been developed over 20 years ago, and some attempts to enter the mainstream (e.g. \proglang{Newtonscript} on the Newton computer, which is no longer available, and \proglang{Javascript} where it is available but whose domain of application largely precluses use of prototype programming) prototype programming is not well known due to lack of language support in popular programming languages such as \proglang{C} and \proglang{Java}. It tends to be the domain of research languages or \proglang{Lisp}. Thus the the availability of a popular language, \proglang{R} \footnote{Some indications of the popularity of R are the high volume mailing lists, international development team, the existence of over 500 addon packages, conferences and numerous books and papers devoted to R.}, that finally does provide the key infrastructure is an important development. This work grew out of the need to organize multiple scenarios of model simulations in ecological modelling \citep{Rnews:Petzoldt:2003} and was subsequently generalized to the present package. A number of iterations of the code, some motivated by the ever increasing feature set in \proglang{R}, resulted in a series of utilities and ultimately successive versions of an \proglang{R} package developed over the last year. An initial version used \proglang{R} lists as the basis of the package. Subsequently the package was changed to use \proglang{R} environments. The first version to use environments stored the receiver object variable in a proxy parent environment which was created on-the-fly at each method call. The present version of the \pkg{proto} package passes the receiver object through the argument list, while hiding this from the caller. It defines the \code{proto} class as a subclass of the \code{environment} class so that functionality built into \proglang{R} for the environment class is automatically inherited by the \code{proto} class. \subsection{Overview} \label{sec:overview} It is assumed that the reader has some general familiarity with object oriented programming concepts and with \proglang{R}. The paper will proceed primarily by example focusing on illustrating the package \code{proto} through such demonstration. The remainder of the paper is organized as follows: Section~\ref{sec:proto-class} explains how \code{"proto"} objects are created and illustrates the corresponding methods for setting and getting components. It further discusses how object oriented delegation (the prototype programming analogue of inheritance) is handled and finally discusses the internals of the package. This section uses small examples chosen for their simplicity in illustrating the concepts. In Section~\ref{sec:examples} we provide additional examples of prototype programming in action. Four examples are shown. The first involves smoothing of data. Secondly we demonstrate the calculation of correlation confidence intervals using classical (Fisher Transform) and modern (bootstrapping) methods. Thirdly we demonstrate the development of a binary tree as would be required for a dendrogram. Fourthly, we use the solution of linear equations to illustrate program evolution from object-based to class-based, all within the \pkg{proto} framework. Section~\ref{sec:summary} gives a few summarizing remarks. Finally, an appendix provides a reference card that summarizes the functionality contained in \pkg{proto} in terms of its constituent commands. %% \pagebreak[4] \section[The class "proto" and its methods]{The class \code{"proto"} and its methods} \label{sec:proto-class} \subsection[Creation of "proto" objects]{Creation of \code{"proto"} objects} \label{sec:proto} In this section we shall show, by example, the creation of two prototype objects and related operations. The simple idea is that each \code{"proto"} object is a set of components: functions (methods) and variables, which are tightly related in some way. A prototype object is an environment holding the variables and methods of the object. \footnote{In particular this implies that \code{"proto"} objects have single inheritance, follow ordinary environment scoping rules and have mutable state as environments do.} A prototype object is created using the constructor function \code{proto} (see Appendix~\ref{sec:ref} at the end of this paper or \pkg{proto} package help for complete syntax of commands). \begin{Scode} addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) \end{Scode} In this simple example, the \code{proto} function defines two components: a variable \code{x} and a method \code{add}. The variable \code{x} is a vector of 5 numbers and the method sums those numbers. The \code{proto} object \code{addProto} contains the variable and the method. Thus the \code{addProto} \code{proto} object can be used to compute the sum of the values stored in it. As shown with the \code{add} method in this example, formal argument lists of methods must always have a first argument of dot (i.e. \code{.}) which signifies the object on which the method is operating. The dot refers to the current object in the same way that a dot refers to the current directory in UNIX. Within the method one must refer to other variables and methods in the object by prefacing each with \code{.\$}. For example, in the above we write \code{sum(.\$x)}. Finally, note that the data and the method are very closely related. Such close coupling is important in order to create an easily maintained system. To illustrate the usage of \code{proto}, we first load the package and set the random seed to make the examples in this paper exactly reproducible. \begin{Schunk} \begin{Sinput} > library(proto) > set.seed(123) \end{Sinput} \end{Schunk} Then, we create the \code{proto} object from above and call its \code{add} method. \begin{Schunk} \begin{Sinput} > addProto <- proto(x = rnorm(5), add = function(.) sum(.$x)) > addProto$add() \end{Sinput} \begin{Soutput} [1] 0.9678513 \end{Soutput} \end{Schunk} We also create another object, \code{addProto2} with a different \code{x} vector and invoke its \code{add} method too. \begin{Schunk} \begin{Sinput} > addProto2 <- addProto$proto(x = 1:5) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} In the examples above, we created a prototype object \code{addProto} and then called its \code{add} method as just explained. The notation \code{addProto\$add} tells the system to look for the \code{add} method in the \code{addProto} object. In the expression \code{addProto\$add}, the \code{proto} object to the left of the dollar sign, \code{addProto} here, is referred to as the \emph{receiver} object. This expression also has a second purpose which is to pass the receiver object implicitly as the first argument of \code{add}. Note that we called \code{add} as if it had zero arguments but, in fact, it has one argument because the receiver is automatically and implicitly supplied as the first argument. In general, the notation \code{object\$method(arguments)} is used to invoke the indicated method of the receiver object using the object as the implicit first argument along with the indicated arguments as the subsequent arguments. As with the \code{addProto} example, the receiver object not only determines where to find the method but also is implicitly passed to the method through the first argument. The motivation for this notation is to relieve the user of specifying the receiver object twice: once to locate the method in the object and a second time to pass the object itself to the method. The \code{\$} is overloaded by the \code{proto} class to automatically do both with one reference to the receiver object. Even though, as with the \code{addProto} example, the first argument is not listed in the call it still must be listed among the formal arguments in the definition of the method. It is conventional to use a dot \code{.} as the first formal argument in the method/function definition. That is, we call \code{add} using \code{addProto\$add()} displaying zero arguments but we define \code{add} in \code{addProto} displaying one argument \code{add <- function(.)}, the dot. In this example, we also created a second object, \code{addProto2}, which has the first object, \code{addProto} as its parent. Any reference to a component in the second object that is unsuccessful will cause search to continue in the parent. Thus the call \code{addProto2\$add()} looks for \code{add} in \code{addProto2} and not finding it there searches its parent, \code{addProto}, where it is, indeed, found. \code{add} is invoked with the receiver object, \code{addProto2}, as the value of dot. The call \code{addProto2\$add()} actually causes the \code{add} in \code{addProto} to run but it still uses the \code{x} from \code{addProto2} since dot (\code{.}) is \code{addProto2} here and \code{add} references \code{.\$x}. Note that the reference to \code{.\$x} in the \code{add} found in \code{addProto} does not refer to the \code{x} in \code{addProto} itself. The \code{x} in \code{addProto2} has overridden the \code{x} in its parent. This point is important so the reader should take care to absorb this point. This simple example already shows the key elements of the system and how \emph{delegation} (the prototype programming term for inheritance) works without classes. We can add new components or replace components in an object and invoke various methods like this: \begin{Schunk} \begin{Sinput} > addProto2$y <- seq(2, 10, 2) > addProto2$x <- 1:10 > addProto2$add3 <- function(., z) sum(.$x) + sum(.$y) + sum(z) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \begin{Sinput} > addProto2$add3(c(2, 3, 5)) \end{Sinput} \begin{Soutput} [1] 95 \end{Soutput} \begin{Sinput} > addProto2$y \end{Sinput} \begin{Soutput} [1] 2 4 6 8 10 \end{Soutput} \end{Schunk} In this example, we insert variable \code{y} into the object \code{addProto2} with a value of \code{seq(2,10,2)}, reset variable \code{x} to a new value and insert a new method, \code{add3}. Then we invoke our two methods and display \code{y}. Again, note that in the case of \code{protoAdd2\$add} the \code{add} method is not present in \code{protoAdd2} and so search continues to the parent \code{addProto} where it is found. \subsection{Internals} \label{sec:internals} So far, we have used simple examples to illustrate the basic manipulation of objects: construction, getting and setting components and method invocation. We now discuss the internals of the package and how it relates to \proglang{R} constructs. \code{proto} is actually an \proglang{S3} class which is a subclass of the \code{environment} class. Every \code{proto} object is an environment and its class is \code{c("proto", "environment")}. The \code{\$} accessor is similar to the same accessor in environments except it will use the \proglang{R} \code{get} function to search up parent links if it cannot otherwise find the object (unlike environments). When accessing a method, \code{\$} automatically supplies the first argument to the method unless the object is \code{.that} or \code{.super}. \code{.that} is a special variable which \code{proto} adds to every \code{proto} object denoting the object itself. \code{.super} is also added to every proto object and is the parent of \code{.that}. \code{.that} and \code{.super} are normally used within methods of an object to refer to other components of the same or parent object, respectively, as opposed to the receiver (\code{.}). For example, suppose we want \code{add} in \code{addProto2} to add the elements of \code{x} together and the elements of \code{y} together and then add these two sums. We could redefine add like this: \begin{Schunk} \begin{Sinput} > addProto2$add <- function(.) .super$add(.) + sum(.$y) \end{Sinput} \end{Schunk} making use of the \code{add} already defined in the parent. One exception should be noted here. When one uses \code{.super}, as above, or \code{.that} to specify a method then the receiver object must be explicitly specified in argument one (since in those cases the receiver is possibly different than \code{.super} or \code{.that} so the system cannot automatically supply it to the call.) Setting a value is similar to the corresponding operation for environments except that any function, i.e method, which is inserted has its environment set to the environment of the object into which it is being inserted. This is necessary so that such methods can reference \code{.that} and \code{.super} using lexical scoping. In closing this section a few points should be re-emphasized and expanded upon. A \code{proto} object is an environment whose parent object is the parent environment of the \code{proto} object. The methods in the \code{proto} objects are ordinary functions that have the containing object as their environment. The \proglang{R} \code{with} function can be used with environments and therefore can be used with \code{proto} objects since \code{proto} objects are environments too. Thus \code{with(addProto, x)} refers to the variable \code{x} in \code{proto} object \code{addProto} and \code{with(addProto, add)} refers to the method \code{add} in the same way. \code{with(addProto, add)(addProto)} can be used to call \code{add}. These constructs all follow from their corresponding use in environments from which they are inherited. Because the \code{with} expressions are somewhat verbose, two common cases can be shortened using the \code{\$} operator. \code{addProto\$x} can be used to refer to variable \code{x} in \code{proto} object \code{addProto} and has the same meaning as \code{with(addProto, x)}. In particular like \code{with} but unlike the the behavior of the \code{\$} operator on environments, when used with \code{proto} objects, \code{\$} will search not only the object itself but also its ancestors. Similarly \code{addProto\$add()} can be used to call method \code{add} in \code{addProto} also searching through ancestors if not found in \code{addProto}. Note that \code{addProto\$add} returns an object of class \code{c("instantiatedProtoMethod", "function")} which is derived from \code{add} such that the first argument, the \code{proto} object, is already inserted. Note that there is a \code{print} method for class \code{"instantiatedProtoMethod"} so printing such objects will display the underlying function but returning such objects is not the same as returning the function without slot one inserted. Thus, if one wants exactly the original \code{add} as a value one should use \code{with(addProto, add)} or \code{addProto\$with(add)}. Within a method, if a variable is referred to without qualification simply as \code{x}, say, then its meaning is unchanged from how it is otherwise used in \proglang{R} and follows the same scope rules as any variable to resolve its name. If it is desired that the variable have object scope, i.e. looked up in the receiver object and its ancestors, then \code{.\$x} or similar \code{with} notation, i.e. \code{with(., x)}, should be used. Similarly \code{.\$f(x)} calls method \code{f} automatically inserting the receiver object into argument one and using \code{x} for argument two. It looks for \code{f} first in the receiver object and then its ancestors. \subsection{Traits} \label{sec:traits} Let us look at the definition of a child object once again. In the code below, \code{addProto} is the previously defined parent object and the expression \code{addProto\$proto(x = 1:5)} defines a child object of \code{addProto} and assigns it to variable \code{addProto2a}. \begin{Schunk} \begin{Sinput} > addProto2a <- addProto$proto(x = 1:5) > addProto2a$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} That is, \code{proto} can be used to create a new child of an existing object by writing the parent object on the left of the \code{\$} and \code{proto} on its right. Any contents to be added to the new child are listed in arguments of \code{proto} as shown. For example, first let us create a class-like structure. In the following \code{Add} is an object that behaves very much like a class with an \code{add} method and a method \code{new} which constructs new objects. In the line creating object \code{add1} the expression \code{Add\$new(x = 1:5)} invokes the \code{new} constructor of the receiver object \code{Add}. The method \code{new} has an argument of \code{x = 1:5} which defines an \code{x} variable in the \code{add1} object being instantiated. We similarly create another object \code{add2}. \begin{Schunk} \begin{Sinput} > Add <- proto(add = function(.) sum(.$x), new = function(., x) .$proto(x = x)) > add1 <- Add$new(x = 1:5) > add1$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \begin{Sinput} > add2 <- Add$new(x = 1:10) > add2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \end{Schunk} An object which contains only methods and variables that are intended to be shared by all its children (as opposed to an object whose purpose is to have its own methods and variables) is known as a \emph{trait} \citep{Agesen1992}. It is similar to a class in class-based object oriented programming. Note that the objects \code{add1} and \code{add2} have the trait \code{Add} as their parent. We could implement subclass-like and superclass-like objects by simply defining similar trait objects to be the parent or child of \code{Add}. For example, suppose we want a class which calculates the sum of the logarithms of the data. We could define: \begin{Schunk} \begin{Sinput} > Logadd <- Add$proto(logadd = function(.) log(.$add())) > logadd1 <- Logadd$new(1:5) > logadd1$logadd() \end{Sinput} \begin{Soutput} [1] 2.70805 \end{Soutput} \end{Schunk} Here the capitalized objects are traits. \code{Logadd} is a trait. It is a child of \code{Add} which is also a trait. \code{logadd1} is an ordinary object, not a trait. One possible design is to create a tree of traits and other objects in which the leaves are ordinary objects and the remaining nodes are traits. This would closely correspond to class-based object oriented programming. Note that the delegation of methods from one trait to another as in \code{new} which is inherited by \code{Logadd} from \code{Add} is nothing more than the same mechanism by which traits delegate methods to objects since, of course, traits are just objects no different from any other object other than by the conventions we impose on them. This unification of subclassing and instantiation beautifully shows the simplification that prototype programming represents. \subsection{Utilities} \label{sec:utilities} The fact that method calls automatically insert the first argument can be used to good effect in leveraging existing \proglang{R} functions while allowing an object-oriented syntax. For example, \code{ls()} can be used to list the components of \code{proto} objects: \begin{Schunk} \begin{Sinput} > addProto$ls() \end{Sinput} \begin{Soutput} [1] "add" "x" \end{Soutput} \end{Schunk} Functions like: \begin{Schunk} \begin{Sinput} > addProto$str() > addProto$print() > addProto$as.list() > addProto2a$parent.env() \end{Sinput} \end{Schunk} show additional information about the elements. \code{eapply} can be used to explore more properties such as the the length of each component of an object: \begin{Schunk} \begin{Sinput} > addProto$eapply(length) \end{Sinput} \end{Schunk} Another example of some interest in any object oriented system which allows multiple references to one single object is that object identity can be tested using the respective base function: \begin{Schunk} \begin{Sinput} > addProto$identical(addProto2) \end{Sinput} \begin{Soutput} [1] FALSE \end{Soutput} \end{Schunk} \code{proto} does contain a special purpose \code{str.proto} function but in the main it is important to notice here, that \code{proto} has no code that is specific to \code{ls} or any of the other ordinary \proglang{R} functions listed. We are simply making use of the fact that \code{obj\$fun(...)} is transformed into \code{get("fun", obj)(obj, ...)} by the proto \code{\$} operator. For example, in the case of \code{addProto\$ls()} the system looks for \code{ls} in object \code{addProto}. It cannot find it there so it looks to its parent, which is the global environment. It does not find it there so it searches the remainder of the search path, i.e. the path shown by running the \proglang{R} command \code{search()}, and finally finds it in the base package, invoking it with an argument of \code{addProto}. Since all \code{proto} objects are also environments \code{ls(addProto)} interprets \code{addProto} as an environment and runs the \code{ls} command with it. In the \code{ls} example there were no arguments other than \code{addProto}, and even that one was implicit, but if there were additional arguments then they would be passed as shown in the \code{eapply} and \code{identical} examples above. \subsection{Plotting} \label{sec:plot} The \code{graph.proto} function can be used to create graphs that can be rendered by the \code{Rgraphviz} package creating visual representations of ancestor trees (figure \ref{fig:proto-dot}). That package provides an interface to the \proglang{GraphViz} \code{dot} program \citep{Ganser+North:1999}. \code{graph.proto} takes three arguments, all of which are usually omitted. The first argument is a \code{proto} object (or an environment) out of which all contained \code{proto} objects and their parents (but not higher order ancestors) are graphed. If it is omitted, the current environment is assumed. The second argument is a graph (in the sense of the \code{graph} package) to which the nodes and edges are added. If it is omitted an empty graph is assumed. The last argument is a logical variable that specifies the orientation of arrows. If omitted arrows are drawn from children to their parents. \input{proto-dot} \begin{figure}[htbp] \begin{center} \includegraphics{proto-dot} \caption{\label{fig:proto-dot} Ancestor tree generated using graph.proto. Edges point from child to parent.} \end{center} \end{figure} \pagebreak[4] \section{Examples} \label{sec:examples} \subsection{Smoothing} \label{sec:smooth} In the following we create a \code{proto} object named \code{oo} containing a vector of data \code{x} (generated from a simulated autoregressive model) and time points \code{tt}, an intermediate result \code{x.smooth}, some plotting parameters \code{xlab}, \code{ylab}, \code{pch}, \code{col} and three methods \code{smooth}, \code{plot} and \code{residuals} which smooth the data, plot the data and calculate residuals, respectively. We also define \code{..x.smooth} which holds intermediate results. Names beginning with two dots prevent them from being delegated to children. If we override \code{x} in a child we would not want an out-of-sync \code{x.smooth}. Note that the components of an object can be specified using a code block in place of the argument notation we used previously in the \code{proto} command. \begin{Schunk} \begin{Sinput} > oo <- proto(expr = { + x <- rnorm(251, 0, 0.15) + x <- filter(x, c(1.2, -0.05, -0.18), method = "recursive") + x <- unclass(x[-seq(100)]) * 2 + 20 + tt <- seq(12200, length = length(x)) + ..x.smooth <- NA + xlab <- "Time (days)" + ylab <- "Temp (deg C)" + pch <- "." + col <- rep("black", 2) + smooth <- function(., ...) { + .$..x.smooth <- supsmu(.$tt, .$x, ...)$y + } + plot <- function(.) with(., { + graphics::plot(tt, x, pch = pch, xlab = xlab, ylab = ylab, + col = col[1]) + if (!is.na(..x.smooth[1])) + lines(tt, ..x.smooth, col = col[2]) + }) + residuals <- function(.) with(., { + data.frame(t = tt, y = x - ..x.smooth) + }) + }) \end{Sinput} \end{Schunk} Having defined our \code{proto} object we can inspect it, as shown below, using \code{print} which is automatically invoked if the name of the object, \code{oo}, is entered on a line by itself. In this case, there is no proto print method so we inherit the environment print method which displays the environment hash code. Although it produces too much output to show here, we could have displayed a list of the entire contents of the object \code{oo} via \code{oo\$as.list(all.names = TRUE)}. We can get a list of the names of the components of the object using \code{oo\$ls(all.names = TRUE)} and will look at the contents of one component, \code{oo\$pch}. \begin{Schunk} \begin{Sinput} > oo \end{Sinput} \begin{Soutput} attr(,"class") [1] "proto" "environment" \end{Soutput} \begin{Sinput} > oo$ls(all.names = TRUE) \end{Sinput} \begin{Soutput} [1] "..x.smooth" ".super" ".that" "col" "pch" [6] "plot" "residuals" "smooth" "tt" "x" [11] "xlab" "ylab" \end{Soutput} \begin{Sinput} > oo$pch \end{Sinput} \begin{Soutput} [1] "." \end{Soutput} \end{Schunk} Let us illustrate a variety of manipulations. We will set up the output to plot 2 plots per screen using \code{mfrow}. We change the plotting symbol, smooth the data, invoke the \code{plot} method to display a plot of the data and the smooth and then plot the residuals in the second plot (figure \ref{fig:proto-smooting03}). \input{proto-smoothing03} \begin{figure}[h!] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing03} \end{center} \caption{Data and smooth from \code{oo\$plot()} (left) and plot of \code{oo\$residuals()} (right).} \label{fig:proto-smooting03} \end{figure} Now let us illustrate the creation of a child object and delegation. We create a new child object of \code{oo} called \code{oo.res}. We will override the \code{x} value in its parent by setting \code{x} in the child to the value of the residuals in the parent. We will also override the \code{pch} and \code{ylab} plotting parameters. We will return to 1 plot per screen and run \code{plot} using the \code{oo.res} object as the receiver invoking the \code{smooth} and \code{plot} methods (which are delegated from the parent \code{oo}) with the data in the child (figure \ref{fig:smoothing04}). \input{proto-smoothing04} % \begin{figure}[tp] \begin{figure}[h!] \begin{center} \includegraphics[width=\half]{proto-smoothing04} \end{center} \caption{Output of \code{oo.res\$plot()}. \code{oo.res\$x} contains the residuals from \code{oo}.} \label{fig:smoothing04} \end{figure} Now we make use of delegation to change the parent and child in a consistent way with respect to certain plot characteristics. We have been using a numeric time axis. Let us interpret these numbers as the number of days since the Epoch, January 1, 1970, and let us also change the plot colors. \begin{Schunk} \begin{Sinput} > oo$tt <- oo$tt + as.Date("1970-01-01") > oo$xlab <- format(oo.res$tt[1], "%Y") > oo$col <- c("blue", "red") \end{Sinput} \end{Schunk} We can introduce a new method, \code{splot}, into the parent \code{oo} and have it automatically inherited by its children. In this example it smooths and then plots and we use it with both \code{oo} and \code{oo.res} (figure \ref{fig:smoothing06}). \input{proto-smoothing06} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing06} \caption{Plotting options and \code{splot} function applied to both parent (left) and child (right) object} \label{fig:smoothing06} \end{center} \end{figure} Numerous possibilities exist to make use of the mechanisms shown, so one may create different child objects, apply different smoothing parameters, overwrite the smoothing function with a lowess smoother and finally compare fits and residuals. Now lets change the data and repeat the analysis. Rather than overwrite the data we will preserve it in \code{oo} and create a child \code{oos} to hold an analysis with sinusoidal data. \begin{Schunk} \begin{Sinput} > oos <- oo$proto(expr = { + tt <- seq(0, 4 * pi, length = 1000) + x <- sin(tt) + rnorm(tt, 0, 0.2) + }) > oos$splot() \end{Sinput} \end{Schunk} Lets perform the residual analysis with \code{oos}. We will make a deep copy of \code{oo.res}, i.e. duplicate its contents and not merely delegate it, by copying \code{oo.res} to a list from which we create the duplicate, or cloned, \code{proto} object (figure \ref{fig:smoothing10} and \ref{fig:cloning}): \begin{Schunk} \begin{Sinput} > oos.res <- as.proto(oo.res$as.list(), parent = oos) > oos.res$x <- oos$residuals()$y > oos.res$splot() \end{Sinput} \end{Schunk} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing10} \caption{Smoothing of sinusoidal data (left) and of their residuals (right)}\label{fig:smoothing10} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \includegraphics[width=50mm]{cloning3.pdf} \caption{Cloning (dashed line) and delegation (solid line). Edges point from child to parent.}\label{fig:cloning} \end{center} \end{figure} We have delegated variables and methods and overridden both. Thus, even with such a simple analysis, object orientation and delegation came into play. The reader can plainly see that smoothing and residual analysis were not crucial to the example and this example could be replaced with any statistical analysis including likelihood or other estimation techniques, time series, survival analysis, stochastic processes and so on. The key aspect is just that we are performing one-of analyses and do not want to set up an elaborate class infrastructure but just want to directly create objects to organize our calculations while relying on delegation and dispatch to eliminate redundancy. \subsection{Correlation, Fisher's Transform and Bootstrapping} \label{sec:corr} The common approach to confidence intervals for the correlation coefficient is to assume normality of the underlying data and then use Fisher's transform to transform the correlation coefficient to an approximately normal random variable. Fisher showed that with the above normality assumption, transforming the correlation coefficient using the hyperbolic arc tangent function yields a random variable approximately distributed with an $\frac{N(p, 1)}{\sqrt(n-3)}$ distribution. The transformed random variable can be used to create normal distribution confidence intervals and the procedure can be back transformed to get confidence intervals for the original correlation coefficient. A more recent approach to confidence intervals for the correlation coefficient is to use bootstrapping. This does not require the assumption of normality of the underlying distribution and requires no special purpose theory devoted solely to the correlation coefficient, Let us calculate the 95\% confidence intervals using Fisher's transform first. We use \code{GNP} and \code{Unemployed} from the Longley data set. First we retrieve the data set and extract the required columns into \code{x}. Then we set \code{n} to the number of cases and \code{pp} to the percentiles of interest. Finally we calculate the sample correlation and create a function to calculate the confidence interval using Fisher's Transform. This function not only returns the confidence interval but also stores it in \code{CI} in the receiver object. \begin{Schunk} \begin{Sinput} > longley.ci <- proto(expr = { + data(longley) + x <- longley[, c("GNP", "Unemployed")] + n <- nrow(x) + pp <- c(0.025, 0.975) + corx <- cor(x)[1, 2] + ci <- function(.) (.$CI <- tanh(atanh(.$corx) + qnorm(.$pp)/sqrt(.$n - + 3))) + }) \end{Sinput} \end{Schunk} Now let us repeat this analysis using the bootstrapping approach. We derive a new object \code{longley.ci.boot} as child of \code{longley.ci}, setting the number of replications, \code{N}, and defining the procedure, \code{ci} which does the actual bootstrap calculation. \begin{Schunk} \begin{Sinput} > longley.ci.boot <- longley.ci$proto({ + N <- 1000 + ci <- function(.) { + corx <- function(idx) cor(.$x[idx, ])[1, 2] + samp <- replicate(.$N, corx(sample(.$n, replace = TRUE))) + (.$CI <- quantile(samp, .$pp)) + } + }) \end{Sinput} \end{Schunk} In the example code below the first line runs the Fisher Transform procedure and the second runs the bootstrap procedure. Just to check that we have performed sufficient bootstrap iterations we rerun it in the third line, creating a delegated object on-the-fly running its \code{ci} method and then immediately throwing the object away. The fact that 4,000 replications give roughly the same result as 1,000 replications satisfies us that we have used a sufficient number of replications. \begin{Schunk} \begin{Sinput} > longley.ci$ci() \end{Sinput} \begin{Soutput} [1] 0.1549766 0.8464304 \end{Soutput} \begin{Sinput} > longley.ci.boot$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2299395 0.8211854 \end{Soutput} \begin{Sinput} > longley.ci.boot$proto(N = 4000)$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2480999 0.8259276 \end{Soutput} \end{Schunk} We now have the results stored in two objects nicely organized for the future. Note, again, that despite the simplicity of the example we have used the features of object oriented programming, coupling the data and methods that go together, while relying on delegation and dispatch to avoid duplication. \subsection{Dendrograms} \label{sec:tree} In \cite{Gentleman2002} there is an \proglang{S4} example of creating a binary tree for use as a dendrogram. Here we directly define a binary tree with no setup at all. To keep it short we will create a binary tree of only two nodes having a root whose left branch points to a leaf. The leaf inherits the \code{value} and \code{incr} components from the root. The attractive feature is that the leaf be defined as a child of the parent using \code{proto} before the parent is even finished being defined. Compared to the cited \proglang{S4} example where it was necessary to create an extra class to introduce the required level of indirection there is no need to take any similar action. \code{tree} is the root node of the tree. It has four components. A method \code{incr} which increments the \code{value} component, a \code{..Name}, the \code{value} component itself and the left branch \code{..left}. \code{..left} is itself a proto object which is a child of \code{tree}. The leaf inherits the \code{value} component from its parent, the root. As mentioned, at the time we define \code{..left} we have not even finished defining \code{tree} yet we are able to implicitly reference the yet to be defined parent. \begin{Schunk} \begin{Sinput} > tree <- proto(expr = { + incr <- function(., val) .$value <- .$value + val + ..Name <- "root" + value <- 3 + ..left <- proto(expr = { + ..Name = "leaf" + }) + }) \end{Sinput} \end{Schunk} Although this is a simple structure we could have embedded additional children into \code{root} and \code{leaf} and so on recursively making the tree or dendrogram arbitrarily complex. Let us do some computation with this structure. We display the \code{value} fields in the two nodes, increment the value field in the root and then display the two nodes again to show .that the leaf changed too. \begin{Schunk} \begin{Sinput} > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 3 leaf: 3 \end{Soutput} \begin{Sinput} > tree$incr(1) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 4 \end{Soutput} \end{Schunk} If we increment \code{value} in \code{leaf} directly (see the example below where we increment it by 10) then it receives its own copy of \code{value} so from that point on \code{leaf} no longer inherits \code{value} from \code{root}. Thus incrementing the root by 5 no longer increments the \code{value} field in the leaf. \begin{Schunk} \begin{Sinput} > tree$..left$incr(10) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 14 \end{Soutput} \begin{Sinput} > tree$incr(5) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 9 leaf: 14 \end{Soutput} \end{Schunk} \subsection{From Prototypes to Classes} \label{sec:increment} In many cases we will use \pkg{proto} for a design that uses prototypes during the full development cycle. In other cases we may use it in an incremental way starting with prototypes but ultimately transitioning to classes. As shown in Section~\ref{sec:traits} the \pkg{proto} package is powerful enough to handle class-based as well as class-free programming. Here we illustrate this process of incremental design starting with concrete objects and then over time classifing them into classes, evolving a class-based program. \pkg{proto} provides a smooth transition path since it can handle both the class-free and the class-based phases -- there is no need to switch object systems part way through. In this example, we define an object which holds a linear equation, \code{eq}, represented as a character string in terms of the unknown variable \code{x} and a \code{print} and a \code{solve} method. We execute the \code{print} method to solve it. We also create child object \code{lineq2} which overrides \code{eq} and execute its \code{print} method. \begin{Schunk} \begin{Sinput} > lineq <- proto(eq = "6*x + 12 - 10*x/4 = 2*x", solve = function(.) { + e <- eval(parse(text = paste(sub("=", "-(", .$eq), ")")), + list(x = 0+1i)) + -Re(e)/Im(e) + }, print = function(.) cat("Equation:", .$eq, "Solution:", .$solve(), + "\n")) > lineq$print() \end{Sinput} \begin{Soutput} Equation: 6*x + 12 - 10*x/4 = 2*x Solution: -8 \end{Soutput} \begin{Sinput} > lineq2 <- lineq$proto(eq = "2*x = 7*x-12+x") > lineq2$print() \end{Sinput} \begin{Soutput} Equation: 2*x = 7*x-12+x Solution: 2 \end{Soutput} \end{Schunk} We could continue with enhancements but at this point we decide that we have a general case and so wish to abstract \code{lineq} into a class. Thus we define a trait, \code{Lineq}, which is just \code{lineq} minus \code{eq} plus a constructor \code{new}. The key difference between \code{new} and the usual \code{proto} function is that with \code{new} the initialization of \code{eq} is mandatory. Having completed this definition we instantiate an object of class/trait \code{Lineq} and execute it. \begin{Schunk} \begin{Sinput} > Lineq <- lineq > rm(eq, envir = Lineq) > Lineq$new <- function(., eq) proto(., eq = eq) > lineq3 <- Lineq$new("3*x=6") > lineq3$print() \end{Sinput} \begin{Soutput} Equation: 3*x=6 Solution: 2 \end{Soutput} \end{Schunk} Note how we have transitioned from a prototype style of programming to a class-based style of programming all the while staying within the \pkg{proto} framework. \section{Summary} \label{sec:summary} \subsection{Benefits} \label{sec:benefits} The key benefit of the \pkg{proto} package is to provide access to a style of programming that has not been conveniently accessible within \proglang{R} or any other mainstream language today. \pkg{proto} can be used in two key ways: class-free object oriented programming and class-based object oriented programming. A key application for \pkg{proto} in class-free programming is to wrap the code and data for each run of a particular statistical study into an object for purposes of organization and reproducibility. It provides such organization directly and without the need and overhead of class definitions yet still provides the inheritance and dispatch advantages of object oriented programming. We provide examples of this style of programming in Section~\ref{sec:smooth} and Section~\ref{sec:corr}. A third example in Section~\ref{sec:tree} illustrates a beneficial use of \pkg{proto} with recursive data structures. Another situation where prototype programming is of interest is in the initial development stages of a program. In this case, the design may not be fully clear so it is more convenient to create concrete objects individually rather than premature abstractions through classes. The \code{graph.proto} function can be used to generate visual representations of the object tree suggesting classifications of objects so that as the program evolves the general case becomes clearer and in a bottom up fashion the objects are incrementally abstracted into classes. In this case, \pkg{proto} provides a smooth transition path since it not only supports class-free programming but, as explained in the Section~\ref{sec:traits}, is sufficiently powerful to support class-based programming, as well. \subsection{Conclusion} \label{sec:conclusion} The package \pkg{proto} provides an \proglang{S3} subclass of the \code{environment} class for constructing and manipulating object oriented systems without classes. It can also emulate classes even though classes are not a primitive structure. Its key design goals are to provide as simple and as thin a layer as practically possible while giving the user convenient access to this alternate object oriented paradigm. This paper describes, by example, how prototype programming can be carried out in \proglang{R} using \pkg{proto} and illustrates such usage. Delegation, cloning traits and general manipulation and incremental development are all reviewed by example. \section*{Computational details} \label{sec:compute} The results in this paper were obtained using \proglang{R} 2.1.0 with the package \pkg{proto} 0.3--2. \proglang{R} itself and the \pkg{proto} package are available from CRAN at \url{http://CRAN.R-project.org/}. The GraphViz software is available from \url{http://www.graphviz.org}. \phantomsection \addcontentsline{toc}{section}{References} \bibliography{proto} %\input{proto.bbl} \newpage\mbox{} \begin{appendix} \section{Frequently Asked Questions} \label{sec:faq} \begin{enumerate} \item{What scope do unqualified object references within methods use? A \pkg{proto} object is an environment and that environment is the environment of the methods in it (by default). That is, unqualified object references within a \pkg{proto} method look first in the method itself and secondly in the \pkg{proto} object containing the method. This is referred to as object scope as opposed to lexical scope or dynamic scope. It allows simple situations, where delegation is not used, to use unqualified names. Thus simple situations remain simple. \citep{Kates2004} discusses the fragile base class problem which relates to this question. Also note that if a \pkg{proto} object is created via the \code{proto} function using an argument of \code{funEnvir = FALSE} then the environment of the function/method will not be set as just described (but rather it will retain its original environment) so the above does not apply. This can be used for instances when non-default processing is desirable.} \item{Why does \code{obj\$meth} not return the method, \code{meth}? Conceptually \code{obj\$meth} returns \code{meth} but with \code{obj} already inserted into its first argument. This is termed an instantiated \pkg{proto} method and is of \proglang{S3} class \code{"instantiatedProtoMethod"}. In contrast, the method itself (i.e. the uninstantited method) would not have the first argument already inserted. To return the method itself use \code{with(obj, meth}. The main advantage of a design that makes the distinction between instantiated and uninstantiated methods is that uninstantiated methods are never changed so debugging can be more readily carried out (as discussed in the next question and answer). } \item{How does one debug a method? \pkg{proto} does not dynamically redefine methods. This has the advantage that the ordinary \proglang{R} \code{debug} and \code{undebug} commands can be used. When using these be sure that to use them with the uninstantiated method itself and not the instantiated method derived from it. That is, use: \begin{verbatim} with(obj, debug(meth)) \end{verbatim} and not \begin{verbatim} debug(obj$meth) # wrong \end{verbatim} } \item{Is multiple inheritance supported? No. \pkg{proto} is just a thin layer on top of \proglang{R} environments and \proglang{R} environments provide single inheritance only. \citep{Kates2004} discusses some ways of handling situations which would otherwise require multiple inheritance.} \item{Does \pkg{proto} support lazy evaluation? Since \code{proto} methods are just \proglang{R} functions they do support lazy evaluation; however, the \code{proto} function itself does evaluate its arguments. To get the effect of lazy evaluation when using the \code{proto} function replace any properties with a function. If the caller is the parent of the \code{proto} object then its particularly simple. Note how we got the equivalent of lazy evaluation in the second example where f is a function: \begin{verbatim} # eager evaluation x <- 0 p <- proto(f = x, g = function(.) $x) x <- 1 p$f # 0 # versus making f a function # simulates lazy evaluation x <- 0 p <- proto(f = function(.) x, g = function(.) .$x) x <- 1 p$f() # 1 \end{verbatim} If we cannot guarantee that the proto object has the caller as its parent then ensure that the environment of the function has not been reset. If no method needs to reference \code{.that} or \code{.super} then we can arrange for that using \code{funEnvir=FALSE} as seen here in the second example: \begin{verbatim} # does not work as intended x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x) x <- 1 q$f() # 99 # does work x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x, funEnvir = FALSE) x <- 1 q$f() # 1 \end{verbatim} If we wish only to not reset the function used to simulate lazy evaluation then we can do it using either of the two equivalent alternatives below. \code{g} is an ordinary method whose environment is reset to \code{q} whereas \code{f} is a function whose environment is not reset and serves to provide lazy evaluation for \code{x} found in the caller. \begin{verbatim} x <- 0 p <- proto(x = 99) # g will use q's y in children of q even if those children # override y q <- p$proto(y = 25, g = function(.) .that$y + .$x) q[["f"]] <- function(.) x x <- 1 q$f() # 1 # equivalent alternative x <- 0 p <- proto(x = 99) q <- proto(f = function(.) x, funEnvir = FALSE, envir = p$proto(y = 25, g = function(.) .that$y + .$x)) x <- 1 q$f() # 1 \end{verbatim} } \end{enumerate} \newpage{} \section{Reference Card} \label{sec:ref} \input{protoref-raw} \end{appendix} \end{document} proto/vignettes/proto.tex0000644000176200001440000014340013004746104015313 0ustar liggesusers%\VignetteIndexEntry{proto: An R Package for Prototype Programming} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass[nojss]{jss} \usepackage{Sweave} \DeclareGraphicsExtensions{.pdf, .eps, .png} \newlength{\half} \setlength{\half}{70mm} \author{Louis Kates\\GKX Associates Inc. \And Thomas Petzoldt\\Technische Universit\"at Dresden} \Plainauthor{Louis Kates, Thomas Petzoldt} \title{\pkg{proto}: An \proglang{R} Package for Prototype Programming} %% \Shorttitle{\pkg{proto}: An \proglang{R} Package for Prototype Programming} \Plaintitle{proto: An R Package for Prototype Programming} \Keywords{prototype programming, delegation, inheritance, clone, object orientated, \proglang{S3}, \proglang{R}} \Plainkeywords{object oriented, prototype programming, S3, R} \Abstract{ \pkg{proto} is an \proglang{R} package which facilitates a style of programming known as prototype programming. Prototype programming is a type of object oriented programming in which there are no classes. \pkg{proto} is simple yet retains the object oriented features of delegation (the prototype counterpart to inheritance) and object oriented dispatch. \code{proto} can be used to organize the concrete data and procedures in statistical studies and other applications without the necessity of defining classes while still providing convenient access to an object oriented style of programming. Furthermore, it can be used in a class-based style as well so that incremental design can begin with defining the concrete objects and later transition to abstract classes, once the general case is understood, without having to change to object-oriented frameworks. The key goals of the package are to integrate into \proglang{R} while providing nothing more than a thin layer on top of it. } \hyphenation{ma-ni-pu-lating} \begin{document} \input{proto-concordance} \section{Introduction} \label{sec:intro} \subsection[Object Oriented Programming in R]{Object Oriented Programming in \proglang{R}} \label{sec:oo} The \proglang{R} system for statistical computing \citep[\url{http://www.R-project.org/}]{Rcore2005} ships with two systems for object oriented programming referred to as \proglang{S3} and \proglang{S4}. With the increased interest in object oriented programming within \proglang{R} over the last years additional object oriented programming packages emerged. These include the \pkg{R.oo} package \citep{Bengtsson2003} and the \pkg{OOP} package \citep[\url{http://www.omegahat.net/OOP/}]{Rnews:Chambers+Lang:2001a}. All these packages have the common thread that they use classes as the basis of inheritance. When a message is sent to an object the class of the object is examined and that class determines the specific function to be executed. In prototype programming there are no classes making it simple yet it retains much of the power of class-based programming. In the fact, \pkg{proto} is so simple that there is only one significant new routine name, \code{proto}. The other routines are just the expected support routines such as \code{as.proto} to coerce objects to proto objects, \code{\$} to access and set proto object components and \code{is.proto} to check whether an object is a proto object. In addition, \code{graph.proto} will generate a graphical ancestor tree showing the parent-child relationships among generated \code{proto} objects. The aim of the package is to provide a lightweight layer for prototype programming in \proglang{R} written only in \proglang{R} leveraging the existing facilities of the language rather than adding its own. \subsection{History} \label{sec:history} The concept of prototype programming \citep{Lieberman1986, Taivalsaari1996a, Noble1999} has developed over a number of years with the \proglang{Self} language \citep{Agesen1992} being the key evolved programming language to demonstrate the concept. In statistics, the \proglang{Lisp}-based \proglang{LispStat} programming language \citep{Tierney1990} was the first and possibly only statistical system to feature prototype programming. Despite having been developed over 20 years ago, and some attempts to enter the mainstream (e.g. \proglang{Newtonscript} on the Newton computer, which is no longer available, and \proglang{Javascript} where it is available but whose domain of application largely precluses use of prototype programming) prototype programming is not well known due to lack of language support in popular programming languages such as \proglang{C} and \proglang{Java}. It tends to be the domain of research languages or \proglang{Lisp}. Thus the the availability of a popular language, \proglang{R} \footnote{Some indications of the popularity of R are the high volume mailing lists, international development team, the existence of over 500 addon packages, conferences and numerous books and papers devoted to R.}, that finally does provide the key infrastructure is an important development. This work grew out of the need to organize multiple scenarios of model simulations in ecological modelling \citep{Rnews:Petzoldt:2003} and was subsequently generalized to the present package. A number of iterations of the code, some motivated by the ever increasing feature set in \proglang{R}, resulted in a series of utilities and ultimately successive versions of an \proglang{R} package developed over the last year. An initial version used \proglang{R} lists as the basis of the package. Subsequently the package was changed to use \proglang{R} environments. The first version to use environments stored the receiver object variable in a proxy parent environment which was created on-the-fly at each method call. The present version of the \pkg{proto} package passes the receiver object through the argument list, while hiding this from the caller. It defines the \code{proto} class as a subclass of the \code{environment} class so that functionality built into \proglang{R} for the environment class is automatically inherited by the \code{proto} class. \subsection{Overview} \label{sec:overview} It is assumed that the reader has some general familiarity with object oriented programming concepts and with \proglang{R}. The paper will proceed primarily by example focusing on illustrating the package \code{proto} through such demonstration. The remainder of the paper is organized as follows: Section~\ref{sec:proto-class} explains how \code{"proto"} objects are created and illustrates the corresponding methods for setting and getting components. It further discusses how object oriented delegation (the prototype programming analogue of inheritance) is handled and finally discusses the internals of the package. This section uses small examples chosen for their simplicity in illustrating the concepts. In Section~\ref{sec:examples} we provide additional examples of prototype programming in action. Four examples are shown. The first involves smoothing of data. Secondly we demonstrate the calculation of correlation confidence intervals using classical (Fisher Transform) and modern (bootstrapping) methods. Thirdly we demonstrate the development of a binary tree as would be required for a dendrogram. Fourthly, we use the solution of linear equations to illustrate program evolution from object-based to class-based, all within the \pkg{proto} framework. Section~\ref{sec:summary} gives a few summarizing remarks. Finally, an appendix provides a reference card that summarizes the functionality contained in \pkg{proto} in terms of its constituent commands. %% \pagebreak[4] \section[The class "proto" and its methods]{The class \code{"proto"} and its methods} \label{sec:proto-class} \subsection[Creation of "proto" objects]{Creation of \code{"proto"} objects} \label{sec:proto} In this section we shall show, by example, the creation of two prototype objects and related operations. The simple idea is that each \code{"proto"} object is a set of components: functions (methods) and variables, which are tightly related in some way. A prototype object is an environment holding the variables and methods of the object. \footnote{In particular this implies that \code{"proto"} objects have single inheritance, follow ordinary environment scoping rules and have mutable state as environments do.} A prototype object is created using the constructor function \code{proto} (see Appendix~\ref{sec:ref} at the end of this paper or \pkg{proto} package help for complete syntax of commands). \begin{Scode} addProto <- proto( x = rnorm(5), add = function(.) sum(.$x) ) \end{Scode} In this simple example, the \code{proto} function defines two components: a variable \code{x} and a method \code{add}. The variable \code{x} is a vector of 5 numbers and the method sums those numbers. The \code{proto} object \code{addProto} contains the variable and the method. Thus the \code{addProto} \code{proto} object can be used to compute the sum of the values stored in it. As shown with the \code{add} method in this example, formal argument lists of methods must always have a first argument of dot (i.e. \code{.}) which signifies the object on which the method is operating. The dot refers to the current object in the same way that a dot refers to the current directory in UNIX. Within the method one must refer to other variables and methods in the object by prefacing each with \code{.\$}. For example, in the above we write \code{sum(.\$x)}. Finally, note that the data and the method are very closely related. Such close coupling is important in order to create an easily maintained system. To illustrate the usage of \code{proto}, we first load the package and set the random seed to make the examples in this paper exactly reproducible. \begin{Schunk} \begin{Sinput} > library(proto) > set.seed(123) \end{Sinput} \end{Schunk} Then, we create the \code{proto} object from above and call its \code{add} method. \begin{Schunk} \begin{Sinput} > addProto <- proto(x = rnorm(5), add = function(.) sum(.$x)) > addProto$add() \end{Sinput} \begin{Soutput} [1] 0.9678513 \end{Soutput} \end{Schunk} We also create another object, \code{addProto2} with a different \code{x} vector and invoke its \code{add} method too. \begin{Schunk} \begin{Sinput} > addProto2 <- addProto$proto(x = 1:5) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} In the examples above, we created a prototype object \code{addProto} and then called its \code{add} method as just explained. The notation \code{addProto\$add} tells the system to look for the \code{add} method in the \code{addProto} object. In the expression \code{addProto\$add}, the \code{proto} object to the left of the dollar sign, \code{addProto} here, is referred to as the \emph{receiver} object. This expression also has a second purpose which is to pass the receiver object implicitly as the first argument of \code{add}. Note that we called \code{add} as if it had zero arguments but, in fact, it has one argument because the receiver is automatically and implicitly supplied as the first argument. In general, the notation \code{object\$method(arguments)} is used to invoke the indicated method of the receiver object using the object as the implicit first argument along with the indicated arguments as the subsequent arguments. As with the \code{addProto} example, the receiver object not only determines where to find the method but also is implicitly passed to the method through the first argument. The motivation for this notation is to relieve the user of specifying the receiver object twice: once to locate the method in the object and a second time to pass the object itself to the method. The \code{\$} is overloaded by the \code{proto} class to automatically do both with one reference to the receiver object. Even though, as with the \code{addProto} example, the first argument is not listed in the call it still must be listed among the formal arguments in the definition of the method. It is conventional to use a dot \code{.} as the first formal argument in the method/function definition. That is, we call \code{add} using \code{addProto\$add()} displaying zero arguments but we define \code{add} in \code{addProto} displaying one argument \code{add <- function(.)}, the dot. In this example, we also created a second object, \code{addProto2}, which has the first object, \code{addProto} as its parent. Any reference to a component in the second object that is unsuccessful will cause search to continue in the parent. Thus the call \code{addProto2\$add()} looks for \code{add} in \code{addProto2} and not finding it there searches its parent, \code{addProto}, where it is, indeed, found. \code{add} is invoked with the receiver object, \code{addProto2}, as the value of dot. The call \code{addProto2\$add()} actually causes the \code{add} in \code{addProto} to run but it still uses the \code{x} from \code{addProto2} since dot (\code{.}) is \code{addProto2} here and \code{add} references \code{.\$x}. Note that the reference to \code{.\$x} in the \code{add} found in \code{addProto} does not refer to the \code{x} in \code{addProto} itself. The \code{x} in \code{addProto2} has overridden the \code{x} in its parent. This point is important so the reader should take care to absorb this point. This simple example already shows the key elements of the system and how \emph{delegation} (the prototype programming term for inheritance) works without classes. We can add new components or replace components in an object and invoke various methods like this: \begin{Schunk} \begin{Sinput} > addProto2$y <- seq(2, 10, 2) > addProto2$x <- 1:10 > addProto2$add3 <- function(., z) sum(.$x) + sum(.$y) + sum(z) > addProto2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \begin{Sinput} > addProto2$add3(c(2, 3, 5)) \end{Sinput} \begin{Soutput} [1] 95 \end{Soutput} \begin{Sinput} > addProto2$y \end{Sinput} \begin{Soutput} [1] 2 4 6 8 10 \end{Soutput} \end{Schunk} In this example, we insert variable \code{y} into the object \code{addProto2} with a value of \code{seq(2,10,2)}, reset variable \code{x} to a new value and insert a new method, \code{add3}. Then we invoke our two methods and display \code{y}. Again, note that in the case of \code{protoAdd2\$add} the \code{add} method is not present in \code{protoAdd2} and so search continues to the parent \code{addProto} where it is found. \subsection{Internals} \label{sec:internals} So far, we have used simple examples to illustrate the basic manipulation of objects: construction, getting and setting components and method invocation. We now discuss the internals of the package and how it relates to \proglang{R} constructs. \code{proto} is actually an \proglang{S3} class which is a subclass of the \code{environment} class. Every \code{proto} object is an environment and its class is \code{c("proto", "environment")}. The \code{\$} accessor is similar to the same accessor in environments except it will use the \proglang{R} \code{get} function to search up parent links if it cannot otherwise find the object (unlike environments). When accessing a method, \code{\$} automatically supplies the first argument to the method unless the object is \code{.that} or \code{.super}. \code{.that} is a special variable which \code{proto} adds to every \code{proto} object denoting the object itself. \code{.super} is also added to every proto object and is the parent of \code{.that}. \code{.that} and \code{.super} are normally used within methods of an object to refer to other components of the same or parent object, respectively, as opposed to the receiver (\code{.}). For example, suppose we want \code{add} in \code{addProto2} to add the elements of \code{x} together and the elements of \code{y} together and then add these two sums. We could redefine add like this: \begin{Schunk} \begin{Sinput} > addProto2$add <- function(.) .super$add(.) + sum(.$y) \end{Sinput} \end{Schunk} making use of the \code{add} already defined in the parent. One exception should be noted here. When one uses \code{.super}, as above, or \code{.that} to specify a method then the receiver object must be explicitly specified in argument one (since in those cases the receiver is possibly different than \code{.super} or \code{.that} so the system cannot automatically supply it to the call.) Setting a value is similar to the corresponding operation for environments except that any function, i.e method, which is inserted has its environment set to the environment of the object into which it is being inserted. This is necessary so that such methods can reference \code{.that} and \code{.super} using lexical scoping. In closing this section a few points should be re-emphasized and expanded upon. A \code{proto} object is an environment whose parent object is the parent environment of the \code{proto} object. The methods in the \code{proto} objects are ordinary functions that have the containing object as their environment. The \proglang{R} \code{with} function can be used with environments and therefore can be used with \code{proto} objects since \code{proto} objects are environments too. Thus \code{with(addProto, x)} refers to the variable \code{x} in \code{proto} object \code{addProto} and \code{with(addProto, add)} refers to the method \code{add} in the same way. \code{with(addProto, add)(addProto)} can be used to call \code{add}. These constructs all follow from their corresponding use in environments from which they are inherited. Because the \code{with} expressions are somewhat verbose, two common cases can be shortened using the \code{\$} operator. \code{addProto\$x} can be used to refer to variable \code{x} in \code{proto} object \code{addProto} and has the same meaning as \code{with(addProto, x)}. In particular like \code{with} but unlike the the behavior of the \code{\$} operator on environments, when used with \code{proto} objects, \code{\$} will search not only the object itself but also its ancestors. Similarly \code{addProto\$add()} can be used to call method \code{add} in \code{addProto} also searching through ancestors if not found in \code{addProto}. Note that \code{addProto\$add} returns an object of class \code{c("instantiatedProtoMethod", "function")} which is derived from \code{add} such that the first argument, the \code{proto} object, is already inserted. Note that there is a \code{print} method for class \code{"instantiatedProtoMethod"} so printing such objects will display the underlying function but returning such objects is not the same as returning the function without slot one inserted. Thus, if one wants exactly the original \code{add} as a value one should use \code{with(addProto, add)} or \code{addProto\$with(add)}. Within a method, if a variable is referred to without qualification simply as \code{x}, say, then its meaning is unchanged from how it is otherwise used in \proglang{R} and follows the same scope rules as any variable to resolve its name. If it is desired that the variable have object scope, i.e. looked up in the receiver object and its ancestors, then \code{.\$x} or similar \code{with} notation, i.e. \code{with(., x)}, should be used. Similarly \code{.\$f(x)} calls method \code{f} automatically inserting the receiver object into argument one and using \code{x} for argument two. It looks for \code{f} first in the receiver object and then its ancestors. \subsection{Traits} \label{sec:traits} Let us look at the definition of a child object once again. In the code below, \code{addProto} is the previously defined parent object and the expression \code{addProto\$proto(x = 1:5)} defines a child object of \code{addProto} and assigns it to variable \code{addProto2a}. \begin{Schunk} \begin{Sinput} > addProto2a <- addProto$proto(x = 1:5) > addProto2a$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \end{Schunk} That is, \code{proto} can be used to create a new child of an existing object by writing the parent object on the left of the \code{\$} and \code{proto} on its right. Any contents to be added to the new child are listed in arguments of \code{proto} as shown. For example, first let us create a class-like structure. In the following \code{Add} is an object that behaves very much like a class with an \code{add} method and a method \code{new} which constructs new objects. In the line creating object \code{add1} the expression \code{Add\$new(x = 1:5)} invokes the \code{new} constructor of the receiver object \code{Add}. The method \code{new} has an argument of \code{x = 1:5} which defines an \code{x} variable in the \code{add1} object being instantiated. We similarly create another object \code{add2}. \begin{Schunk} \begin{Sinput} > Add <- proto(add = function(.) sum(.$x), new = function(., x) .$proto(x = x)) > add1 <- Add$new(x = 1:5) > add1$add() \end{Sinput} \begin{Soutput} [1] 15 \end{Soutput} \begin{Sinput} > add2 <- Add$new(x = 1:10) > add2$add() \end{Sinput} \begin{Soutput} [1] 55 \end{Soutput} \end{Schunk} An object which contains only methods and variables that are intended to be shared by all its children (as opposed to an object whose purpose is to have its own methods and variables) is known as a \emph{trait} \citep{Agesen1992}. It is similar to a class in class-based object oriented programming. Note that the objects \code{add1} and \code{add2} have the trait \code{Add} as their parent. We could implement subclass-like and superclass-like objects by simply defining similar trait objects to be the parent or child of \code{Add}. For example, suppose we want a class which calculates the sum of the logarithms of the data. We could define: \begin{Schunk} \begin{Sinput} > Logadd <- Add$proto(logadd = function(.) log(.$add())) > logadd1 <- Logadd$new(1:5) > logadd1$logadd() \end{Sinput} \begin{Soutput} [1] 2.70805 \end{Soutput} \end{Schunk} Here the capitalized objects are traits. \code{Logadd} is a trait. It is a child of \code{Add} which is also a trait. \code{logadd1} is an ordinary object, not a trait. One possible design is to create a tree of traits and other objects in which the leaves are ordinary objects and the remaining nodes are traits. This would closely correspond to class-based object oriented programming. Note that the delegation of methods from one trait to another as in \code{new} which is inherited by \code{Logadd} from \code{Add} is nothing more than the same mechanism by which traits delegate methods to objects since, of course, traits are just objects no different from any other object other than by the conventions we impose on them. This unification of subclassing and instantiation beautifully shows the simplification that prototype programming represents. \subsection{Utilities} \label{sec:utilities} The fact that method calls automatically insert the first argument can be used to good effect in leveraging existing \proglang{R} functions while allowing an object-oriented syntax. For example, \code{ls()} can be used to list the components of \code{proto} objects: \begin{Schunk} \begin{Sinput} > addProto$ls() \end{Sinput} \begin{Soutput} [1] "add" "x" \end{Soutput} \end{Schunk} Functions like: \begin{Schunk} \begin{Sinput} > addProto$str() > addProto$print() > addProto$as.list() > addProto2a$parent.env() \end{Sinput} \end{Schunk} show additional information about the elements. \code{eapply} can be used to explore more properties such as the the length of each component of an object: \begin{Schunk} \begin{Sinput} > addProto$eapply(length) \end{Sinput} \end{Schunk} Another example of some interest in any object oriented system which allows multiple references to one single object is that object identity can be tested using the respective base function: \begin{Schunk} \begin{Sinput} > addProto$identical(addProto2) \end{Sinput} \begin{Soutput} [1] FALSE \end{Soutput} \end{Schunk} \code{proto} does contain a special purpose \code{str.proto} function but in the main it is important to notice here, that \code{proto} has no code that is specific to \code{ls} or any of the other ordinary \proglang{R} functions listed. We are simply making use of the fact that \code{obj\$fun(...)} is transformed into \code{get("fun", obj)(obj, ...)} by the proto \code{\$} operator. For example, in the case of \code{addProto\$ls()} the system looks for \code{ls} in object \code{addProto}. It cannot find it there so it looks to its parent, which is the global environment. It does not find it there so it searches the remainder of the search path, i.e. the path shown by running the \proglang{R} command \code{search()}, and finally finds it in the base package, invoking it with an argument of \code{addProto}. Since all \code{proto} objects are also environments \code{ls(addProto)} interprets \code{addProto} as an environment and runs the \code{ls} command with it. In the \code{ls} example there were no arguments other than \code{addProto}, and even that one was implicit, but if there were additional arguments then they would be passed as shown in the \code{eapply} and \code{identical} examples above. \subsection{Plotting} \label{sec:plot} The \code{graph.proto} function can be used to create graphs that can be rendered by the \code{Rgraphviz} package creating visual representations of ancestor trees (figure \ref{fig:proto-dot}). That package provides an interface to the \proglang{GraphViz} \code{dot} program \citep{Ganser+North:1999}. \code{graph.proto} takes three arguments, all of which are usually omitted. The first argument is a \code{proto} object (or an environment) out of which all contained \code{proto} objects and their parents (but not higher order ancestors) are graphed. If it is omitted, the current environment is assumed. The second argument is a graph (in the sense of the \code{graph} package) to which the nodes and edges are added. If it is omitted an empty graph is assumed. The last argument is a logical variable that specifies the orientation of arrows. If omitted arrows are drawn from children to their parents. \input{proto-dot} \begin{figure}[htbp] \begin{center} \includegraphics{proto-dot} \caption{\label{fig:proto-dot} Ancestor tree generated using graph.proto. Edges point from child to parent.} \end{center} \end{figure} \pagebreak[4] \section{Examples} \label{sec:examples} \subsection{Smoothing} \label{sec:smooth} In the following we create a \code{proto} object named \code{oo} containing a vector of data \code{x} (generated from a simulated autoregressive model) and time points \code{tt}, an intermediate result \code{x.smooth}, some plotting parameters \code{xlab}, \code{ylab}, \code{pch}, \code{col} and three methods \code{smooth}, \code{plot} and \code{residuals} which smooth the data, plot the data and calculate residuals, respectively. We also define \code{..x.smooth} which holds intermediate results. Names beginning with two dots prevent them from being delegated to children. If we override \code{x} in a child we would not want an out-of-sync \code{x.smooth}. Note that the components of an object can be specified using a code block in place of the argument notation we used previously in the \code{proto} command. \begin{Schunk} \begin{Sinput} > oo <- proto(expr = { + x <- rnorm(251, 0, 0.15) + x <- filter(x, c(1.2, -0.05, -0.18), method = "recursive") + x <- unclass(x[-seq(100)]) * 2 + 20 + tt <- seq(12200, length = length(x)) + ..x.smooth <- NA + xlab <- "Time (days)" + ylab <- "Temp (deg C)" + pch <- "." + col <- rep("black", 2) + smooth <- function(., ...) { + .$..x.smooth <- supsmu(.$tt, .$x, ...)$y + } + plot <- function(.) with(., { + graphics::plot(tt, x, pch = pch, xlab = xlab, ylab = ylab, + col = col[1]) + if (!is.na(..x.smooth[1])) + lines(tt, ..x.smooth, col = col[2]) + }) + residuals <- function(.) with(., { + data.frame(t = tt, y = x - ..x.smooth) + }) + }) \end{Sinput} \end{Schunk} Having defined our \code{proto} object we can inspect it, as shown below, using \code{print} which is automatically invoked if the name of the object, \code{oo}, is entered on a line by itself. In this case, there is no proto print method so we inherit the environment print method which displays the environment hash code. Although it produces too much output to show here, we could have displayed a list of the entire contents of the object \code{oo} via \code{oo\$as.list(all.names = TRUE)}. We can get a list of the names of the components of the object using \code{oo\$ls(all.names = TRUE)} and will look at the contents of one component, \code{oo\$pch}. \begin{Schunk} \begin{Sinput} > oo \end{Sinput} \begin{Soutput} attr(,"class") [1] "proto" "environment" \end{Soutput} \begin{Sinput} > oo$ls(all.names = TRUE) \end{Sinput} \begin{Soutput} [1] "..x.smooth" ".super" ".that" "col" "pch" [6] "plot" "residuals" "smooth" "tt" "x" [11] "xlab" "ylab" \end{Soutput} \begin{Sinput} > oo$pch \end{Sinput} \begin{Soutput} [1] "." \end{Soutput} \end{Schunk} Let us illustrate a variety of manipulations. We will set up the output to plot 2 plots per screen using \code{mfrow}. We change the plotting symbol, smooth the data, invoke the \code{plot} method to display a plot of the data and the smooth and then plot the residuals in the second plot (figure \ref{fig:proto-smooting03}). \input{proto-smoothing03} \begin{figure}[h!] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing03} \end{center} \caption{Data and smooth from \code{oo\$plot()} (left) and plot of \code{oo\$residuals()} (right).} \label{fig:proto-smooting03} \end{figure} Now let us illustrate the creation of a child object and delegation. We create a new child object of \code{oo} called \code{oo.res}. We will override the \code{x} value in its parent by setting \code{x} in the child to the value of the residuals in the parent. We will also override the \code{pch} and \code{ylab} plotting parameters. We will return to 1 plot per screen and run \code{plot} using the \code{oo.res} object as the receiver invoking the \code{smooth} and \code{plot} methods (which are delegated from the parent \code{oo}) with the data in the child (figure \ref{fig:smoothing04}). \input{proto-smoothing04} % \begin{figure}[tp] \begin{figure}[h!] \begin{center} \includegraphics[width=\half]{proto-smoothing04} \end{center} \caption{Output of \code{oo.res\$plot()}. \code{oo.res\$x} contains the residuals from \code{oo}.} \label{fig:smoothing04} \end{figure} Now we make use of delegation to change the parent and child in a consistent way with respect to certain plot characteristics. We have been using a numeric time axis. Let us interpret these numbers as the number of days since the Epoch, January 1, 1970, and let us also change the plot colors. \begin{Schunk} \begin{Sinput} > oo$tt <- oo$tt + as.Date("1970-01-01") > oo$xlab <- format(oo.res$tt[1], "%Y") > oo$col <- c("blue", "red") \end{Sinput} \end{Schunk} We can introduce a new method, \code{splot}, into the parent \code{oo} and have it automatically inherited by its children. In this example it smooths and then plots and we use it with both \code{oo} and \code{oo.res} (figure \ref{fig:smoothing06}). \input{proto-smoothing06} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing06} \caption{Plotting options and \code{splot} function applied to both parent (left) and child (right) object} \label{fig:smoothing06} \end{center} \end{figure} Numerous possibilities exist to make use of the mechanisms shown, so one may create different child objects, apply different smoothing parameters, overwrite the smoothing function with a lowess smoother and finally compare fits and residuals. Now lets change the data and repeat the analysis. Rather than overwrite the data we will preserve it in \code{oo} and create a child \code{oos} to hold an analysis with sinusoidal data. \begin{Schunk} \begin{Sinput} > oos <- oo$proto(expr = { + tt <- seq(0, 4 * pi, length = 1000) + x <- sin(tt) + rnorm(tt, 0, 0.2) + }) > oos$splot() \end{Sinput} \end{Schunk} Lets perform the residual analysis with \code{oos}. We will make a deep copy of \code{oo.res}, i.e. duplicate its contents and not merely delegate it, by copying \code{oo.res} to a list from which we create the duplicate, or cloned, \code{proto} object (figure \ref{fig:smoothing10} and \ref{fig:cloning}): \begin{Schunk} \begin{Sinput} > oos.res <- as.proto(oo.res$as.list(), parent = oos) > oos.res$x <- oos$residuals()$y > oos.res$splot() \end{Sinput} \end{Schunk} \begin{figure}[tbp] \begin{center} \includegraphics[width=\textwidth]{proto-smoothing10} \caption{Smoothing of sinusoidal data (left) and of their residuals (right)}\label{fig:smoothing10} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \includegraphics[width=50mm]{cloning3.pdf} \caption{Cloning (dashed line) and delegation (solid line). Edges point from child to parent.}\label{fig:cloning} \end{center} \end{figure} We have delegated variables and methods and overridden both. Thus, even with such a simple analysis, object orientation and delegation came into play. The reader can plainly see that smoothing and residual analysis were not crucial to the example and this example could be replaced with any statistical analysis including likelihood or other estimation techniques, time series, survival analysis, stochastic processes and so on. The key aspect is just that we are performing one-of analyses and do not want to set up an elaborate class infrastructure but just want to directly create objects to organize our calculations while relying on delegation and dispatch to eliminate redundancy. \subsection{Correlation, Fisher's Transform and Bootstrapping} \label{sec:corr} The common approach to confidence intervals for the correlation coefficient is to assume normality of the underlying data and then use Fisher's transform to transform the correlation coefficient to an approximately normal random variable. Fisher showed that with the above normality assumption, transforming the correlation coefficient using the hyperbolic arc tangent function yields a random variable approximately distributed with an $\frac{N(p, 1)}{\sqrt(n-3)}$ distribution. The transformed random variable can be used to create normal distribution confidence intervals and the procedure can be back transformed to get confidence intervals for the original correlation coefficient. A more recent approach to confidence intervals for the correlation coefficient is to use bootstrapping. This does not require the assumption of normality of the underlying distribution and requires no special purpose theory devoted solely to the correlation coefficient, Let us calculate the 95\% confidence intervals using Fisher's transform first. We use \code{GNP} and \code{Unemployed} from the Longley data set. First we retrieve the data set and extract the required columns into \code{x}. Then we set \code{n} to the number of cases and \code{pp} to the percentiles of interest. Finally we calculate the sample correlation and create a function to calculate the confidence interval using Fisher's Transform. This function not only returns the confidence interval but also stores it in \code{CI} in the receiver object. \begin{Schunk} \begin{Sinput} > longley.ci <- proto(expr = { + data(longley) + x <- longley[, c("GNP", "Unemployed")] + n <- nrow(x) + pp <- c(0.025, 0.975) + corx <- cor(x)[1, 2] + ci <- function(.) (.$CI <- tanh(atanh(.$corx) + qnorm(.$pp)/sqrt(.$n - + 3))) + }) \end{Sinput} \end{Schunk} Now let us repeat this analysis using the bootstrapping approach. We derive a new object \code{longley.ci.boot} as child of \code{longley.ci}, setting the number of replications, \code{N}, and defining the procedure, \code{ci} which does the actual bootstrap calculation. \begin{Schunk} \begin{Sinput} > longley.ci.boot <- longley.ci$proto({ + N <- 1000 + ci <- function(.) { + corx <- function(idx) cor(.$x[idx, ])[1, 2] + samp <- replicate(.$N, corx(sample(.$n, replace = TRUE))) + (.$CI <- quantile(samp, .$pp)) + } + }) \end{Sinput} \end{Schunk} In the example code below the first line runs the Fisher Transform procedure and the second runs the bootstrap procedure. Just to check that we have performed sufficient bootstrap iterations we rerun it in the third line, creating a delegated object on-the-fly running its \code{ci} method and then immediately throwing the object away. The fact that 4,000 replications give roughly the same result as 1,000 replications satisfies us that we have used a sufficient number of replications. \begin{Schunk} \begin{Sinput} > longley.ci$ci() \end{Sinput} \begin{Soutput} [1] 0.1549766 0.8464304 \end{Soutput} \begin{Sinput} > longley.ci.boot$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2299395 0.8211854 \end{Soutput} \begin{Sinput} > longley.ci.boot$proto(N = 4000)$ci() \end{Sinput} \begin{Soutput} 2.5% 97.5% 0.2480999 0.8259276 \end{Soutput} \end{Schunk} We now have the results stored in two objects nicely organized for the future. Note, again, that despite the simplicity of the example we have used the features of object oriented programming, coupling the data and methods that go together, while relying on delegation and dispatch to avoid duplication. \subsection{Dendrograms} \label{sec:tree} In \cite{Gentleman2002} there is an \proglang{S4} example of creating a binary tree for use as a dendrogram. Here we directly define a binary tree with no setup at all. To keep it short we will create a binary tree of only two nodes having a root whose left branch points to a leaf. The leaf inherits the \code{value} and \code{incr} components from the root. The attractive feature is that the leaf be defined as a child of the parent using \code{proto} before the parent is even finished being defined. Compared to the cited \proglang{S4} example where it was necessary to create an extra class to introduce the required level of indirection there is no need to take any similar action. \code{tree} is the root node of the tree. It has four components. A method \code{incr} which increments the \code{value} component, a \code{..Name}, the \code{value} component itself and the left branch \code{..left}. \code{..left} is itself a proto object which is a child of \code{tree}. The leaf inherits the \code{value} component from its parent, the root. As mentioned, at the time we define \code{..left} we have not even finished defining \code{tree} yet we are able to implicitly reference the yet to be defined parent. \begin{Schunk} \begin{Sinput} > tree <- proto(expr = { + incr <- function(., val) .$value <- .$value + val + ..Name <- "root" + value <- 3 + ..left <- proto(expr = { + ..Name = "leaf" + }) + }) \end{Sinput} \end{Schunk} Although this is a simple structure we could have embedded additional children into \code{root} and \code{leaf} and so on recursively making the tree or dendrogram arbitrarily complex. Let us do some computation with this structure. We display the \code{value} fields in the two nodes, increment the value field in the root and then display the two nodes again to show .that the leaf changed too. \begin{Schunk} \begin{Sinput} > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 3 leaf: 3 \end{Soutput} \begin{Sinput} > tree$incr(1) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 4 \end{Soutput} \end{Schunk} If we increment \code{value} in \code{leaf} directly (see the example below where we increment it by 10) then it receives its own copy of \code{value} so from that point on \code{leaf} no longer inherits \code{value} from \code{root}. Thus incrementing the root by 5 no longer increments the \code{value} field in the leaf. \begin{Schunk} \begin{Sinput} > tree$..left$incr(10) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 4 leaf: 14 \end{Soutput} \begin{Sinput} > tree$incr(5) > cat("root:", tree$value, "leaf:", tree$..left$value, "\n") \end{Sinput} \begin{Soutput} root: 9 leaf: 14 \end{Soutput} \end{Schunk} \subsection{From Prototypes to Classes} \label{sec:increment} In many cases we will use \pkg{proto} for a design that uses prototypes during the full development cycle. In other cases we may use it in an incremental way starting with prototypes but ultimately transitioning to classes. As shown in Section~\ref{sec:traits} the \pkg{proto} package is powerful enough to handle class-based as well as class-free programming. Here we illustrate this process of incremental design starting with concrete objects and then over time classifing them into classes, evolving a class-based program. \pkg{proto} provides a smooth transition path since it can handle both the class-free and the class-based phases -- there is no need to switch object systems part way through. In this example, we define an object which holds a linear equation, \code{eq}, represented as a character string in terms of the unknown variable \code{x} and a \code{print} and a \code{solve} method. We execute the \code{print} method to solve it. We also create child object \code{lineq2} which overrides \code{eq} and execute its \code{print} method. \begin{Schunk} \begin{Sinput} > lineq <- proto(eq = "6*x + 12 - 10*x/4 = 2*x", solve = function(.) { + e <- eval(parse(text = paste(sub("=", "-(", .$eq), ")")), + list(x = 0+1i)) + -Re(e)/Im(e) + }, print = function(.) cat("Equation:", .$eq, "Solution:", .$solve(), + "\n")) > lineq$print() \end{Sinput} \begin{Soutput} Equation: 6*x + 12 - 10*x/4 = 2*x Solution: -8 \end{Soutput} \begin{Sinput} > lineq2 <- lineq$proto(eq = "2*x = 7*x-12+x") > lineq2$print() \end{Sinput} \begin{Soutput} Equation: 2*x = 7*x-12+x Solution: 2 \end{Soutput} \end{Schunk} We could continue with enhancements but at this point we decide that we have a general case and so wish to abstract \code{lineq} into a class. Thus we define a trait, \code{Lineq}, which is just \code{lineq} minus \code{eq} plus a constructor \code{new}. The key difference between \code{new} and the usual \code{proto} function is that with \code{new} the initialization of \code{eq} is mandatory. Having completed this definition we instantiate an object of class/trait \code{Lineq} and execute it. \begin{Schunk} \begin{Sinput} > Lineq <- lineq > rm(eq, envir = Lineq) > Lineq$new <- function(., eq) proto(., eq = eq) > lineq3 <- Lineq$new("3*x=6") > lineq3$print() \end{Sinput} \begin{Soutput} Equation: 3*x=6 Solution: 2 \end{Soutput} \end{Schunk} Note how we have transitioned from a prototype style of programming to a class-based style of programming all the while staying within the \pkg{proto} framework. \section{Summary} \label{sec:summary} \subsection{Benefits} \label{sec:benefits} The key benefit of the \pkg{proto} package is to provide access to a style of programming that has not been conveniently accessible within \proglang{R} or any other mainstream language today. \pkg{proto} can be used in two key ways: class-free object oriented programming and class-based object oriented programming. A key application for \pkg{proto} in class-free programming is to wrap the code and data for each run of a particular statistical study into an object for purposes of organization and reproducibility. It provides such organization directly and without the need and overhead of class definitions yet still provides the inheritance and dispatch advantages of object oriented programming. We provide examples of this style of programming in Section~\ref{sec:smooth} and Section~\ref{sec:corr}. A third example in Section~\ref{sec:tree} illustrates a beneficial use of \pkg{proto} with recursive data structures. Another situation where prototype programming is of interest is in the initial development stages of a program. In this case, the design may not be fully clear so it is more convenient to create concrete objects individually rather than premature abstractions through classes. The \code{graph.proto} function can be used to generate visual representations of the object tree suggesting classifications of objects so that as the program evolves the general case becomes clearer and in a bottom up fashion the objects are incrementally abstracted into classes. In this case, \pkg{proto} provides a smooth transition path since it not only supports class-free programming but, as explained in the Section~\ref{sec:traits}, is sufficiently powerful to support class-based programming, as well. \subsection{Conclusion} \label{sec:conclusion} The package \pkg{proto} provides an \proglang{S3} subclass of the \code{environment} class for constructing and manipulating object oriented systems without classes. It can also emulate classes even though classes are not a primitive structure. Its key design goals are to provide as simple and as thin a layer as practically possible while giving the user convenient access to this alternate object oriented paradigm. This paper describes, by example, how prototype programming can be carried out in \proglang{R} using \pkg{proto} and illustrates such usage. Delegation, cloning traits and general manipulation and incremental development are all reviewed by example. \section*{Computational details} \label{sec:compute} The results in this paper were obtained using \proglang{R} 2.1.0 with the package \pkg{proto} 0.3--2. \proglang{R} itself and the \pkg{proto} package are available from CRAN at \url{http://CRAN.R-project.org/}. The GraphViz software is available from \url{http://www.graphviz.org}. \phantomsection \addcontentsline{toc}{section}{References} \bibliography{proto} %\input{proto.bbl} \newpage\mbox{} \begin{appendix} \section{Frequently Asked Questions} \label{sec:faq} \begin{enumerate} \item{What scope do unqualified object references within methods use? A \pkg{proto} object is an environment and that environment is the environment of the methods in it (by default). That is, unqualified object references within a \pkg{proto} method look first in the method itself and secondly in the \pkg{proto} object containing the method. This is referred to as object scope as opposed to lexical scope or dynamic scope. It allows simple situations, where delegation is not used, to use unqualified names. Thus simple situations remain simple. \citep{Kates2004} discusses the fragile base class problem which relates to this question. Also note that if a \pkg{proto} object is created via the \code{proto} function using an argument of \code{funEnvir = FALSE} then the environment of the function/method will not be set as just described (but rather it will retain its original environment) so the above does not apply. This can be used for instances when non-default processing is desirable.} \item{Why does \code{obj\$meth} not return the method, \code{meth}? Conceptually \code{obj\$meth} returns \code{meth} but with \code{obj} already inserted into its first argument. This is termed an instantiated \pkg{proto} method and is of \proglang{S3} class \code{"instantiatedProtoMethod"}. In contrast, the method itself (i.e. the uninstantited method) would not have the first argument already inserted. To return the method itself use \code{with(obj, meth}. The main advantage of a design that makes the distinction between instantiated and uninstantiated methods is that uninstantiated methods are never changed so debugging can be more readily carried out (as discussed in the next question and answer). } \item{How does one debug a method? \pkg{proto} does not dynamically redefine methods. This has the advantage that the ordinary \proglang{R} \code{debug} and \code{undebug} commands can be used. When using these be sure that to use them with the uninstantiated method itself and not the instantiated method derived from it. That is, use: \begin{verbatim} with(obj, debug(meth)) \end{verbatim} and not \begin{verbatim} debug(obj$meth) # wrong \end{verbatim} } \item{Is multiple inheritance supported? No. \pkg{proto} is just a thin layer on top of \proglang{R} environments and \proglang{R} environments provide single inheritance only. \citep{Kates2004} discusses some ways of handling situations which would otherwise require multiple inheritance.} \item{Does \pkg{proto} support lazy evaluation? Since \code{proto} methods are just \proglang{R} functions they do support lazy evaluation; however, the \code{proto} function itself does evaluate its arguments. To get the effect of lazy evaluation when using the \code{proto} function replace any properties with a function. If the caller is the parent of the \code{proto} object then its particularly simple. Note how we got the equivalent of lazy evaluation in the second example where f is a function: \begin{verbatim} # eager evaluation x <- 0 p <- proto(f = x, g = function(.) $x) x <- 1 p$f # 0 # versus making f a function # simulates lazy evaluation x <- 0 p <- proto(f = function(.) x, g = function(.) .$x) x <- 1 p$f() # 1 \end{verbatim} If we cannot guarantee that the proto object has the caller as its parent then ensure that the environment of the function has not been reset. If no method needs to reference \code{.that} or \code{.super} then we can arrange for that using \code{funEnvir=FALSE} as seen here in the second example: \begin{verbatim} # does not work as intended x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x) x <- 1 q$f() # 99 # does work x <- 0 p <- proto(x = 99) q <- p$proto(f = function(.) x, g = function(.) .$x, funEnvir = FALSE) x <- 1 q$f() # 1 \end{verbatim} If we wish only to not reset the function used to simulate lazy evaluation then we can do it using either of the two equivalent alternatives below. \code{g} is an ordinary method whose environment is reset to \code{q} whereas \code{f} is a function whose environment is not reset and serves to provide lazy evaluation for \code{x} found in the caller. \begin{verbatim} x <- 0 p <- proto(x = 99) # g will use q's y in children of q even if those children # override y q <- p$proto(y = 25, g = function(.) .that$y + .$x) q[["f"]] <- function(.) x x <- 1 q$f() # 1 # equivalent alternative x <- 0 p <- proto(x = 99) q <- proto(f = function(.) x, funEnvir = FALSE, envir = p$proto(y = 25, g = function(.) .that$y + .$x)) x <- 1 q$f() # 1 \end{verbatim} } \end{enumerate} \newpage{} \section{Reference Card} \label{sec:ref} \input{protoref-raw} \end{appendix} \end{document} proto/vignettes/proto-concordance.tex0000644000176200001440000000007213004746104017564 0ustar liggesusers\Sconcordance{concordance:proto.tex:proto.Rnw:% 1 1357 1} proto/vignettes/proto-smoothing06.tex0000644000176200001440000000031012540305004017450 0ustar liggesusers\begin{Schunk} \begin{Sinput} > oo$splot <- function(., ...) { + .$smooth(...) + .$plot() + } > par(mfrow = c(1, 2)) > oo$splot(bass = 2) > oo.res$splot() \end{Sinput} \end{Schunk} proto/vignettes/proto-smoothing04.tex0000644000176200001440000000031112540305004017447 0ustar liggesusers\begin{Schunk} \begin{Sinput} > oo.res <- oo$proto(pch = "-", x = oo$residuals()$y, ylab = "Residuals deg K") > par(mfrow = c(1, 1)) > oo.res$smooth() > oo.res$plot() \end{Sinput} \end{Schunk} proto/vignettes/proto-smoothing04.pdf0000644000176200001440000003164612540305003017436 0ustar liggesusers%PDF-1.1 %ρ\r 1 0 obj << /CreationDate (D:20070920013051) /ModDate (D:20070920013051) /Title (R Graphics Output) /Producer (R 2.6.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /ZapfDingbats >> endobj 6 0 obj << /Type /Page /Parent 3 0 R /Contents 7 0 R /Resources 4 0 R >> endobj 7 0 obj << /Length 8 0 R >> stream q Q q 59.04 73.44 342.72 227.52 re W n BT 0.000 0.000 0.000 rg /F2 1 Tf 12.00 0.00 -0.00 12.00 68.23 252.15 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 70.34 225.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 72.46 169.25 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 74.58 149.58 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 76.69 180.33 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 78.81 173.72 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 80.92 209.41 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 83.04 167.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 85.15 172.78 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 87.27 194.37 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 89.38 219.80 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 91.50 241.46 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 93.62 236.94 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 95.73 219.13 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 97.85 187.39 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 99.96 190.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 102.08 161.17 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 104.19 145.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 106.31 134.11 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 108.42 198.33 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 110.54 189.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 112.66 207.52 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 114.77 212.32 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 116.89 182.22 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 119.00 173.82 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 121.12 216.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 123.23 240.25 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 125.35 254.28 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 127.46 247.26 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 129.58 177.04 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 131.70 204.06 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 133.81 150.91 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 135.93 177.40 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 138.04 251.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 140.16 232.19 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 142.27 278.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 144.39 289.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 146.50 258.62 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 148.62 214.60 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 150.74 157.56 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 152.85 132.80 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 154.97 78.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 157.08 98.62 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 159.20 175.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 161.31 155.54 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 163.43 194.43 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 165.54 225.40 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 167.66 247.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 169.78 218.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 171.89 208.06 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 174.01 187.17 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 176.12 197.72 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 178.24 179.86 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 180.35 208.01 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 182.47 192.72 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 184.58 226.03 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 186.70 186.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 188.82 131.19 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 190.93 218.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 193.05 204.32 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 195.16 217.65 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 197.28 230.59 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 199.39 209.35 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 201.51 216.65 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 203.62 219.64 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 205.74 206.33 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 207.86 199.78 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 209.97 190.47 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 212.09 258.88 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 214.20 242.75 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 216.32 210.87 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 218.43 202.02 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 220.55 206.47 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 222.66 222.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 224.78 213.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 226.90 178.00 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 229.01 215.60 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 231.13 207.26 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 233.24 182.58 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 235.36 167.71 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 237.47 153.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 239.59 187.97 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 241.70 196.11 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 243.82 229.96 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 245.94 220.16 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 248.05 231.66 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 250.17 221.90 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 252.28 226.43 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 254.40 195.15 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 256.51 143.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 258.63 199.03 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 260.74 223.37 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 262.86 193.50 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 264.98 168.56 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 267.09 114.58 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 269.21 174.30 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 271.32 221.14 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 273.44 228.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 275.55 253.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 277.67 241.63 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 279.78 222.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 281.90 184.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 284.02 147.92 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 286.13 187.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 288.25 184.86 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 290.36 192.71 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 292.48 200.28 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 294.59 246.02 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 296.71 238.84 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 298.82 210.80 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 300.94 264.45 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 303.06 258.51 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 305.17 245.70 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 307.29 203.68 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 309.40 153.46 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 311.52 121.53 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 313.63 134.17 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 315.75 175.09 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 317.86 213.88 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 319.98 217.85 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 322.10 227.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 324.21 204.28 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 326.33 174.67 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 328.44 195.41 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 330.56 159.41 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 332.67 226.38 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 334.79 234.13 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 336.90 259.21 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 339.02 244.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 341.14 231.67 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 343.25 186.35 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 345.37 175.48 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 347.48 187.78 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 349.60 207.20 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 351.71 193.15 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 353.83 172.26 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 355.94 153.09 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 358.06 202.87 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 360.18 173.73 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 362.29 173.23 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 364.41 238.97 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 366.52 252.75 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 368.64 221.98 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 370.75 196.89 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 372.87 206.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 374.98 194.55 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 377.10 178.03 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 379.22 164.49 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 381.33 166.67 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 383.45 226.62 Tm (-) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 385.56 240.95 Tm (-) Tj ET Q q 0.000 0.000 0.000 RG 0.75 w [] 0 d 1 J 1 j 10.00 M 71.73 73.44 m 389.07 73.44 l S 71.73 73.44 m 71.73 66.24 l S 177.51 73.44 m 177.51 66.24 l S 283.29 73.44 m 283.29 66.24 l S 389.07 73.44 m 389.07 66.24 l S BT 0.000 0.000 0.000 rg /F2 1 Tf 12.00 0.00 -0.00 12.00 55.05 47.52 Tm (12200) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 160.83 47.52 Tm (12250) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 266.61 47.52 Tm (12300) Tj /F2 1 Tf 12.00 0.00 -0.00 12.00 372.39 47.52 Tm (12350) Tj ET 59.04 86.28 m 59.04 264.06 l S 59.04 86.28 m 51.84 86.28 l S 59.04 145.54 m 51.84 145.54 l S 59.04 204.80 m 51.84 204.80 l S 59.04 264.06 m 51.84 264.06 l S BT /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 74.44 Tm (-1.0) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 133.70 Tm (-0.5) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 196.46 Tm (0.0) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 41.76 255.72 Tm (0.5) Tj ET 59.04 73.44 m 401.76 73.44 l 401.76 300.96 l 59.04 300.96 l 59.04 73.44 l S Q q BT 0.000 0.000 0.000 rg /F2 1 Tf 12.00 0.00 -0.00 12.00 198.91 18.72 Tm (Time \(days\)) Tj /F2 1 Tf 0.00 12.00 -12.00 0.00 12.96 143.51 Tm (Residuals deg K) Tj ET Q q 59.04 73.44 342.72 227.52 re W n 0.000 0.000 0.000 RG 0.75 w [] 0 d 1 J 1 j 10.00 M 71.73 193.28 m 73.85 193.78 l 75.96 194.28 l 78.08 194.78 l 80.20 195.27 l 82.31 195.77 l 84.43 196.28 l 86.54 196.78 l 88.66 197.29 l 90.77 197.80 l 92.89 198.32 l 95.00 198.84 l 97.12 198.94 l 99.24 198.81 l 101.35 198.91 l 103.47 199.26 l 105.58 199.90 l 107.70 200.89 l 109.81 202.00 l 111.93 203.23 l 114.04 204.34 l 116.16 205.66 l 118.28 206.80 l 120.39 207.19 l 122.51 207.22 l 124.62 207.34 l 126.74 207.39 l 128.85 207.85 l 130.97 208.83 l 133.08 210.12 l 135.20 212.08 l 137.32 213.98 l 139.43 216.23 l 141.55 217.47 l 143.66 216.48 l 145.78 214.42 l 147.89 210.25 l 150.01 204.37 l 152.12 197.96 l 154.24 191.52 l 156.36 186.24 l 158.47 181.97 l 160.59 179.95 l 162.70 180.73 l 164.82 182.29 l 166.93 185.80 l 169.05 190.28 l 171.16 194.90 l 173.28 198.39 l 175.40 200.48 l 177.51 201.80 l 179.63 202.17 l 181.74 201.77 l 183.86 201.84 l 185.97 201.76 l 188.09 201.95 l 190.20 202.31 l 192.32 203.45 l 194.44 205.45 l 196.55 207.04 l 198.67 208.42 l 200.78 209.40 l 202.90 209.74 l 205.01 209.75 l 207.13 209.65 l 209.24 209.52 l 211.36 209.34 l 213.48 208.90 l 215.59 208.88 l 217.71 209.10 l 219.82 209.19 l 221.94 209.36 l 224.05 209.62 l 226.17 209.64 l 228.28 209.52 l 230.40 208.92 l 232.52 208.22 l 234.63 207.43 l 236.75 206.51 l 238.86 206.09 l 240.98 205.62 l 243.09 205.06 l 245.21 204.54 l 247.32 203.97 l 249.44 203.71 l 251.56 203.46 l 253.67 203.09 l 255.79 202.70 l 257.90 202.19 l 260.02 201.86 l 262.13 201.70 l 264.25 201.98 l 266.36 202.83 l 268.48 203.95 l 270.60 205.24 l 272.71 206.33 l 274.83 207.02 l 276.94 207.21 l 279.06 207.14 l 281.17 206.91 l 283.29 206.43 l 285.40 205.86 l 287.52 205.10 l 289.64 204.14 l 291.75 203.55 l 293.87 203.15 l 295.98 203.52 l 298.10 204.24 l 300.21 205.11 l 302.33 205.91 l 304.44 206.34 l 306.56 206.59 l 308.68 206.86 l 310.79 207.04 l 312.91 207.50 l 315.02 207.58 l 317.14 207.43 l 319.25 207.06 l 321.37 206.67 l 323.48 206.21 l 325.60 205.81 l 327.72 205.60 l 329.83 205.38 l 331.95 204.96 l 334.06 204.47 l 336.18 204.06 l 338.29 203.82 l 340.41 203.65 l 342.52 203.68 l 344.64 203.82 l 346.76 203.92 l 348.87 204.06 l 350.99 204.24 l 353.10 204.48 l 355.22 204.69 l 357.33 204.84 l 359.45 204.92 l 361.56 204.97 l 363.68 205.03 l 365.80 205.08 l 367.91 205.12 l 370.03 205.16 l 372.14 205.21 l 374.26 205.27 l 376.37 205.32 l 378.49 205.38 l 380.60 205.43 l 382.72 205.47 l 384.84 205.52 l 386.95 205.56 l 389.07 205.61 l S Q endstream endobj 8 0 obj 12107 endobj 3 0 obj << /Type /Pages /Kids [ 6 0 R ] /Count 1 /MediaBox [0 0 432 360] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font << /F1 5 0 R /F2 10 0 R >> /ExtGState << >> >> endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus ] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj xref 0 11 0000000000 65535 f 0000000021 00000 n 0000000163 00000 n 0000012556 00000 n 0000012639 00000 n 0000000212 00000 n 0000000295 00000 n 0000000375 00000 n 0000012535 00000 n 0000012732 00000 n 0000012826 00000 n trailer << /Size 11 /Info 1 0 R /Root 2 0 R >> startxref 12923 %%EOF proto/vignettes/proto-dot.tex0000644000176200001440000000016312540305003016066 0ustar liggesusers\begin{Schunk} \begin{Sinput} > library(Rgraphviz) > g <- graph.proto() > plot(g) \end{Sinput} \end{Schunk} proto/vignettes/protoref-raw.tex0000644000176200001440000000660312540276036016610 0ustar liggesusers\begin{tabular}{rp{10.5cm}} \multicolumn{2}{l}{\textbf{Creation}} \\ \code{proto} & \code{proto(., expr, envir, ... )} embeds the components specified in \code{expr} and/or \code{...} into the \code{proto} object or environment specified by \code{envir}. A new object is created if \code{envir} is omitted. The parent of the object is set to \code{.} . The parent object, \code{.}, defaults to the parent of \code{envir} or the current environment if \code{envir} is missing. \code{expr} and \code{\dots} default to empty specifications. The returned object will contain \code{.that} and \code{.super} variables referring to the object itself and the parent of the object, respectively. \\[0.5cm] \multicolumn{2}{l}{\textbf{Coercion}} \\ \code{as.proto} & If \code{x} is a \code{proto} object or environment then \code{x} is returned as a \code{proto} object with the values of \code{.that} and \code{.super} inserted in the case of an environment or refreshed in the case of a proto object. If \code{x} is a list then additional arguments are available: \code{as.proto(x, envir, parent, FUN, all.names, ...)}. Each component of \code{x} is copied into \code{envir}. \code{envir} may be an \code{environment} or \code{proto} object. If it is missing a new \code{proto} object is created. If \code{all.names = FALSE} then only list components whose names do not begin with a dot are copied. If \code{FUN} is specified then, in addition, only list components \code{v} for which \code{FUN(v)} is \code{TRUE} are copied. If \code{parent} is specified then the resulting \code{proto} object will have that parent. Otherwise, it will have the parent of \code{envir} if \code{envir} was specified. If neither are specified the parent defaults to the current environment. \\[0.5cm] \multicolumn{2}{l}{\textbf{Standard methods}} \\ \code{\$} & \code{obj\$x} searches \code{proto} object \code{obj} for \code{x}. If the name \code{x} does not begin with two dots then ancestors are searched if the name is not found in \code{obj}. If \code{x} is a variable or if \code{obj} is \code{.super} or \code{.that} then \code{x} is returned. Otherwise, the call \code{obj\$x(...)} is equivalent to the call \code{get("x", obj)(obj, ...)}. If it is desired to return a method as a value rather than in the context of a call then use \code{get("x", obj)} (or \code{obj[["x"]]} \code{x} is known to be directly in \code{obj}) rather than \code{\$} syntax.\\ \code{\$<-} & \code{obj\$x <- value} sets \code{x} in \code{proto} object \code{obj} to \code{value} creating \code{x} if not present. If \code{obj} is \code{.super} then a side effect is to set the parent of \code{obj} to \code{value}.\\ \code{is.proto(x)} & returns \code{TRUE} if \code{x} is a \code{proto} object and othewise returns \code{FALSE}.\\[0.5cm] \multicolumn{2}{l}{\textbf{Utilities}} \\ \code{graph.proto} & \code{graph.proto(e, g, child.to.parent)} adds a graph in the sense of the \code{graph} package representing an ancestor tree among all \code{proto} objects in \code{environment} or \code{proto} object \code{e} to graph \code{g}. \code{e} defaults to the current environment and \code{g} defaults to an empty graph. \code{child.to.parent} is a logical variable specifying the direction of arrows. By default they are displayed from children to parents. \\[0.5cm] \end{tabular} proto/vignettes/proto-smoothing03.tex0000644000176200001440000000024412540305003017452 0ustar liggesusers\begin{Schunk} \begin{Sinput} > par(mfrow = c(1, 2)) > oo$pch <- 20 > oo$smooth() > oo$plot() > plot(oo$residuals(), type = "l") \end{Sinput} \end{Schunk} proto/vignettes/proto.bib0000644000176200001440000002513412540305004015244 0ustar liggesusers\Sort{ Mode{on} Collation{mixed} SortTypeOrder{name} NameOrder{ascending} } @MANUAL{Agesen1992, author = {Ole Agesen and Lars Bak and Craig Chambers and Bay-Wei Chang and Urs H{\"o}lzle and John Maloney and Randall B. Smith and David Ungar}, year = 1992, title = {The \proglang{SELF} Programmer's Reference Manual}, note = {Version 2.0}, publisher = {Technical report, Sun Microsystems, Inc.}, address = {2550 Garcia Avenue, Mountain View, CA 94043, USA} } @UNPUBLISHED{Aldrich2004, author = {Jonathan Aldrich}, title = {Selective Open Recursion: A Solution to the Fragile Base Class Problem}, year = {2004}, pages = {1--12}, note = {submitted, \mbox{http://www-2.cs.cmu.edu/\~{}aldrich/papers/selective-open-recursion.pdf}} } @BOOK{Becker1988, AUTHOR = {Richard A. Becker and John M. Chambers and Allan R. Wilks}, TITLE = {The New \proglang{S} Language}, PUBLISHER = {Chapman \& Hall}, YEAR = 1988, ADDRESS = {London}, ABSTRACT = {This book is often called the ``\emph{Blue Book}'', and introduced what is now known as \proglang{S} version 2.} } @INPROCEEDINGS{Bengtsson2003, author = {Henrik Bengtsson}, editor = {Kurt Hornik and Friedrich Leisch and Achim Zeileis}, month = {March}, year = 2003, title = {The \pkg{R.oo} Package -- Object-Oriented Programming with References Using Standard \proglang{R} Code}, booktitle = {Proceedings of the 3rd International Workshop on Distributed Statistical Computing}, address = {Vienna, Austria}, language = {english}, day = {20-22}, url = {http://www.maths.lth.se/help/R/} } @ARTICLE{Chambers+Lang:2001a, author = {John M. Chambers and Duncan Temple Lang}, month = {September}, year = 2001, title = {Object-Oriented Programming in \proglang{R}}, journal = {R News}, volume = 1, number = 3, pages = {17--19}, note = {http://cran.R-project.org/doc/Rnews/} } @BOOK{Chambers1998, author = {John M. Chambers}, year = 1998, title = {Programming with Data: A Guide to the \proglang{S} Language}, publisher = {Springer-Verlag}, address = {New York}, isbn = 0387985034 } @INPROCEEDINGS{dony-malenfant-cointe1992, author = {Christophe Dony and Jacques Malenfant and Pierre Cointe}, month = oct, year = 1992, title = {Prototype-Based Languages: From a New Taxonomy to Constructive Proposals and Their Validation}, booktitle = {Proceedings of {OOPSLA'92}}, volume = {27(17)}, pages = {201--215}, publisher = {{ACM} Sigplan Notices}, address = {Vancouver, Canada}, kind = {MISA}, lang = {english}, visibility = {private} } @INCOLLECTION{Dony1999, author = {Dony, Christophe and Malenfant, Jacques and Bardou, Daniel}, editor = {Noble, James and Taivalsaari, Antero and Moore, Ivan}, year = 1999, title = {Classifying Prototype-Based Programming Languages}, booktitle = {Prototype-Based Programming: Concepts, Languages and Applications}, chapter = 2, pages = {17--45}, publisher = {Springer-Verlag}, address = {Singapore}, language = {english} } @UNPUBLISHED{Ducasse2004, author = {St{\'e}phane Ducasse}, year = 2003, title = {A closer look at prototype-based languages}, note = {\mbox{http://www.iam.unibe.ch/\~{}scg/Teaching/IOOM/PPT/PrototypesAdvanced.pdf}} } @ARTICLE{Ganser+North:1999, author = {Edmend R. Ganser and Stephen C. North}, month = {September}, year = {2000}, title = {An Open Graph Visualization System with Applications to Software Engineering}, journal = {Software--Practice and Experience}, volume = 30, number = 11, pages = {1203-1233}, url = {http://www.graphviz.org} } @MISC{Gentleman2002, author = {Robert Gentleman}, year = 2002, title = {\proglang{S4} Classes in 15 Pages More or Less}, url = {http://www.bioconductor.org/develPage/guidelines/programming/S4Objects.pdf} } @ARTICLE{Gentleman+Ihaka2000, author = {Robert Gentleman and Ross Ihaka}, year = 2000, title = {Lexical Scope and Statistical Computing}, journal = {Journal of Computational and Graphical Statistics}, volume = 9, number = 3, pages = {491--508}, url = {"http://www.amstat.org/publications/jcgs/index.cfm/?fuseaction=Ihaka2000"} } @ARTICLE{Ihaka1996, author = {Ross Ihaka and Robert Gentleman}, year = 1996, title = {\proglang{R}: A Language for Data Analysis and Graphics}, journal = {Journal of Computational and Graphical Statistics}, volume = 5, number = 3, pages = {299--314}, language = {english} } @UNPUBLISHED{Kates2004, author = {Louis Kates and Thomas Petzoldt}, year = 2004, title = {Prototype-Based Programming in Statistical Computation}, url = {http://r-proto.googlecode.com/files/prototype_approaches.pdf} } @INPROCEEDINGS{Lieberman1986, author = {H. Lieberman}, editor = {Norman Meyrowitz}, year = 1986, title = {Using Prototypical Objects to Implement Shared Behavior in Object-Oriented Systems}, booktitle = {Proceedings of the Conference on Object-Oriented Programming Systems, Languages, and Applications ({OOPSLA})}, journal = {SIGPLAN Notices}, volume = {21(11)}, pages = {214--223}, publisher = {ACM Press}, address = {New York, NY}, url = {http://citeseer.ist.psu.edu/lieberman86using.html} } @BOOK{Noble1999, author = {James Noble and Antero Taivalsaari and Ivan Moore}, year = 1999, title = {Prototype-Programming}, publisher = {Springer-Verlag Singapore Pte. Ltd.} } @TECHREPORT{Oehlert+Bingham1998, author = {Gary W. Oehlert and Christopher Bingham}, year = 1998, title = {MacAnova User's Guide}, address = {Minnesota, St. Paul}, institution = {School of Statistics, University of Minnesota}, number = {617}, url = {http://www.stat.umn.edu/macanova} } @ARTICLE{Parnas1972, author = {D. L. Parnas}, title = {On the Criteria to be Used in Decomposing Systems into Modules}, journal = {Communications of the ACM}, volume = 15, number = 12, pages = {1053--1058}, month = {December}, year = {1972}, abstract = {classic article on modularity}, note = {http://www.acm.org/classics/may96/} } @MANUAL{Rcore2004, author = {{\proglang{R} Development Core Team}}, year = 2004, title = {R: A Language and Environment for Statistical Computing}, address = {Vienna, Austria}, organization = {\proglang{R} Foundation for Statistical Computing}, note = {{ISBN} 3-900051-00-3, http://www.R-project.org} } @MANUAL{Scheme1975, author = {Gerald Jay Sussman and Guy Lewis Steele Jr.}, year = 1975, title = {\proglang{Scheme}: an interpreter for extended lambda calculus}, note = {{MIT} Artificial Intelligence Memo 349, December 1975} } @MANUAL{Scheme1978, author = {Guy Lewis {Steele Jr.} and Gerald Jay Sussman}, year = 1978, title = {The Revised Report on Scheme, a Dialect of Lisp}, note = {{MIT} Artificial Intelligence Memo 452, January 1978} } @MANUAL{Scheme1988, author = {Richard Kelsey and William Clinger and Jonathan Rees}, year = 1988, title = {Revised(5) Report on the Algorithmic Language Scheme}, journal = {Higher-Order and Symbolic Computation}, volume = 11, note = {http://swissnet.ai.mit.edu/\~{}jaffer/Scheme}, issue = 1 } @BOOK{Shalit1996, author = {Andrew Shalit}, year = 1996, title = {The \proglang{Dylan} Reference Manual: The Definitive Guide to the New Object-Oriented Dynamic Language}, pages = {1--469}, url = {http://www.gwydiondylan.org/drm/drm\_1.htm}, publisher = {Addison Wesley}, abstract = {published 1996 or 1997??} } @PHDTHESIS{Taivalsaari1993, author = {Taivalsaari, A.}, month = {November}, year = 1993, title = {A Critical Review of Inheritance and Reusability in Object-Oriented in Object-Oriented Programming.}, note = {{ISBN} 951-34-0161-8}, school = {University if Jyv\"askyl\"a, Finland}, language = {english} } @ARTICLE{Taivalsaari1996, author = {Antero Taivalsaari}, month = {September}, year = 1996, title = {On the notion of inheritance}, journal = {ACM Computing Surveys}, volume = 28, number = 3, url = {http://www.csee.umbc.edu/331/resources/papers/Inheritance.pdf} } @ARTICLE{Taivalsaari1996a, author = {Antero Taivalsaari}, month = {September}, year = 1996, title = {Classes vs. Prototypes Some Philosophical and Historical Observations}, journal = {Journal of Object-Oriented Programming}, volume = 10, number = 7, pages = {44--50}, url = {http://www.csee.umbc.edu/331/resources/papers/Inheritance.pdf} } @BOOK{Tierney1990, author = {Luke Tierney}, year = 1990, title = {\proglang{LISP-STAT}: An Object-Oriented Environment for Statistical Computing and Dynamic Graphics}, publisher = {Wiley, New York, NY} } @TECHREPORT{Tierney1995, author = {Luke Tierney}, year = 1995, title = {Recent Developments and Future Directions in \proglang{Lisp-Stat}}, number = 608, address = {Minnesota, St. Paul}, institution = {School of Statistics, University of Minnesota}, url = {http://www.stat.umn.edu/PAPERS/tr608.html} } @MANUAL{Venables2004, author = {Venables, W. N. and Smith, D. M. and {the R Development Core Team}}, year = 2004, title = {An Introduction to \proglang{R}: A Programming Environment for Data Analysis and Graphics}, abstract = {2004-04-12}, note = {{ISBN} 3-900051-05-4, {http://www.R-project.org}}, language = {english} } @Article{Rnews:Petzoldt:2003, author = {Thomas Petzoldt}, title = {\proglang{R} as a Simulation Platform in Ecological Modelling}, journal = {\proglang{R} News}, year = 2003, volume = 3, number = 3, pages = {8--16}, month = {December}, url = {http://CRAN.R-project.org/doc/Rnews/} } @Manual{Rcore2005, title = {\proglang{R}: A language and environment for statistical computing}, author = {{\proglang{R} Development Core Team}}, organization = {\proglang{R} Foundation for Statistical Computing}, address = {Vienna, Austria}, year = {2005}, note = {{ISBN} 3-900051-07-0}, url = {http://www.R-project.org}, } @Article{Rnews:Chambers+Lang:2001a, author = {John M. Chambers and Duncan Temple Lang}, title = {Object-Oriented Programming in \proglang{R}}, journal = {\proglang{R} News}, year = 2001, volume = 1, number = 3, pages = {17--19}, month = {September}, url = {http://CRAN.R-project.org/doc/Rnews/} } proto/vignettes/protoref.Rnw0000644000176200001440000000105312540302372015752 0ustar liggesusers\SweaveOpts{engine=R,eps=FALSE} %\VignetteIndexEntry{protoref: proto Reference Card} %\VignetteDepends{} %\VignetteKeywords{object oriented, prototype programming, S3, R} %\VignettePackage{proto} \documentclass[a4]{article} \usepackage{Rd} \usepackage{Sweave} %\newlength{\refcardwidth} %\setlength{\refcardwidth}{20cm} \begin{document} \SweaveOpts{concordance=TRUE} \pagestyle{empty} %\begin{landscape} \centerline{\Large \bf \pkg{proto} reference card} \vspace{0.8cm} \begin{small} \input{protoref-raw} \end{small} %\end{landscape} \end{document} proto/vignettes/proto-smoothing03.pdf0000644000176200001440000001070412540305535017437 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 365 /Filter /FlateDecode /N 8 /First 46 >> stream x[K@X_Z)4D X|&ۺd#;=9ÁG =!xB^4c3URXet"Ar)OрS`œ)f)\:%a8{Uv/]cQS54l-q;>;YY KT +fwRL-0 a1B9b{8 M=e~uֱc AI~)ǽ?wi'Y"S-{TԲ%wQnwak [$Y5pfSL[LTXi#q]un M{]K#QۭDcnˆ_KZ+ѨGE_xendstream endobj 10 0 obj << /Length 3691 /Filter /FlateDecode >> stream x[MGݿ_1dIwWn ȓXH1" S眞{M0 鮮*ǣ3cYK?G9?Δ旿rO㑎kS񛧯:xQwG='9_~~<>NWcrdM]=z>9lkgN!~tNBt,vBtLy>.G:a3;?g9s6>9]kK>[H#NY\2ϢtcQ^VȚ́ 5!9iz\.N r/4̽_|+ T S Ф94X;\)xM36Cd1!AYr҃5+i)'OEb!I,uN썦%T 8\)TrpIZ\Wu={[4)D8lg$paC.r֣"nӃl !Œ2 (5%vF5srM+C/ b<ŠpBwaC΂9|\yk 3gZ0B`C^s|6Cu9NF!AŒOAb,õĬ\)J6 \ 4^@ͨH[^GC! [;F s2#j+e!*nPAb7.3 Pn:c-W nՐ4Sȃ[4.@+&"5b]qXG3Ϙx̀[a{3#G|{|PgUTgS >{r[|X~˯dx/~fw)[_Im:/{Y˙!Z0Zz-onLnm7?>T`TBId4Nf?¥qc "saz{;{zN;GvzĢ,_^~ݟ~Џy ߼ ox +>QqlФ)sTQuʀ]O]~aQdu*bSY ovYM"|7Fw-n} zNzUe5i^ag.1p!m QeKppC1}u. W^5飱 =<].;+BpNɺ"@A,DظkmcL]?׶CT\t? /ưh<8x#N}c HK9ct?n$F4gk1rӴR[$1Cz'犬oEj}/-pX9j*W8 8l_~/I]PʦSX}?jf5oAO3WCSXFyzZaCj&6?c_[y9y={gzjE~;y+]/~66߰;6d-G~IφS'[U/(AEEwsc}c#T䶾-q xߝc|{=5`H =Fal63.mNAI?;plD=ry瘛:/yI^ÁrDFZt?ŋ\ݍ3׍ȿxpƁ>Sm13x1埫dVMs\{LY0zEVRFsT0տ`31?zm^4YW0>b3ţ`,RE=.q ; %2ԳK} pc%:$.]qAXߐkHh ?͍]\Vu-K״$pvu]i84mg\Rys}K9$!т1"K:qQLWd XN^-*1a J iFCS,FvnDoxNOm0LMu3J@Uu%;@>\EcprWǠP`{mA˰ܮv~;{eG606T޼S#d. kdJ,--q?Ej6Ez 8H004|w%) z‹?SRZ3$x)Z7Fz|?crOR5Ϻޭx/4ܛ򳽟Hnt}4*蚮=Zaihf(}5ڣNkQBR" Mx*1t+ի?P8JmA ZE/ >4$n 9ZdȄK<똛f`gh28t)Pz)yX[54Xd1?@-?h(cNKG|ṵ@?E5LvtӔPg~duxT^7 :U΂=Y4 hɔvRJx7cQo>FQ~0ü0POWG *̻ h ;v]xIĴPk6jZIg-e+c\.1Iٷ~*}:p ,ۗxT>+̓q?0/m~Nm]~(2y;Uz~ё36Iq }YR3[_kdUendstream endobj 11 0 obj << /Type /XRef /Length 34 /Filter /FlateDecode /DecodeParms << /Columns 4 /Predictor 12 >> /W [ 1 2 1 ] /Info 2 0 R /Root 3 0 R /Size 12 /ID [<4191b56e66c2791d4502644d0cf9450b><4191b56e66c2791d4502644d0cf9450b>] >> stream xcb&F~ c$@g Jb endstream endobj startxref 4244 %%EOF proto/vignettes/cloning3.pdf0000644000176200001440000000275212540305003015632 0ustar liggesusers%PDF-1.2 %쏢 5 0 obj <> stream xTn1,B gx [A)H!q+"9 ;o쓏|g{rD/ >Dhegr_ :o>^Ha*=d%TrʁCjt8S54X܌/~Oq*}x-GwnΈ@%mvdy޶Tl; r-?]ݚoǽv"GT `Z)Q D͖<k)CjG E[3؁1\NE MoeI/h^wkѓU,1hhIѲ'Ky z( /TqH^Aendstream endobj 6 0 obj 586 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 /CropBox [36 36 169 217] >> endobj 1 0 obj <> endobj 8 0 obj <> endobj 7 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000915 00000 n 0000001058 00000 n 0000000831 00000 n 0000000690 00000 n 0000000015 00000 n 0000000671 00000 n 0000000992 00000 n 0000000963 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 1258 %%EOF proto/vignettes/proto-smoothing10.tex0000644000176200001440000000016612540305004017454 0ustar liggesusers\begin{Schunk} \begin{Sinput} > par(mfrow = c(1, 2)) > oos$splot() > oos.res$splot() \end{Sinput} \end{Schunk} proto/vignettes/proto-dot.pdf0000644000176200001440000001301412540305003016036 0ustar liggesusers%PDF-1.1 %ρ\r 1 0 obj << /CreationDate (D:20070920013051) /ModDate (D:20070920013051) /Title (R Graphics Output) /Producer (R 2.6.0) /Creator (R) >> endobj 2 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 5 0 obj << /Type /Font /Subtype /Type1 /Name /F1 /BaseFont /ZapfDingbats >> endobj 6 0 obj << /Type /Page /Parent 3 0 R /Contents 7 0 R /Resources 4 0 R >> endobj 7 0 obj << /Length 8 0 R >> stream q Q q 0.72 0.72 430.56 286.56 re W n 0.000 0.000 0.000 RG 0.75 w [] 0 d 1 J 1 j 10.00 M 25.71 254.56 m 25.71 266.76 35.70 276.75 47.90 276.75 c 60.11 276.75 70.10 266.76 70.10 254.56 c 70.10 242.35 60.11 232.36 47.90 232.36 c 35.70 232.36 25.71 242.35 25.71 254.56 c S BT 0.000 0.000 0.000 rg /F2 1 Tf 7.00 0.00 -0.00 7.00 35.45 252.81 Tm (logadd1) Tj ET 25.71 180.85 m 25.71 193.06 35.70 203.05 47.90 203.05 c 60.11 203.05 70.10 193.06 70.10 180.85 c 70.10 168.65 60.11 158.66 47.90 158.66 c 35.70 158.66 25.71 168.65 25.71 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 36.23 179.11 Tm (Logadd) Tj ET 151.47 107.15 m 151.47 119.35 161.46 129.34 173.67 129.34 c 185.87 129.34 195.86 119.35 195.86 107.15 c 195.86 94.94 185.87 84.95 173.67 84.95 c 161.46 84.95 151.47 94.94 151.47 107.15 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 167.44 104.69 Tm (Add) Tj ET 109.55 180.85 m 109.55 193.06 119.54 203.05 131.75 203.05 c 143.95 203.05 153.94 193.06 153.94 180.85 c 153.94 168.65 143.95 158.66 131.75 158.66 c 119.54 158.66 109.55 168.65 109.55 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 123.96 178.39 Tm (add2) Tj ET 193.40 180.85 m 193.40 193.06 203.38 203.05 215.59 203.05 c 227.80 203.05 237.78 193.06 237.78 180.85 c 237.78 168.65 227.80 158.66 215.59 158.66 c 203.38 158.66 193.40 168.65 193.40 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 207.81 178.39 Tm (add1) Tj ET 235.32 33.44 m 235.32 45.65 245.30 55.64 257.51 55.64 c 269.72 55.64 279.70 45.65 279.70 33.44 c 279.70 21.24 269.72 11.25 257.51 11.25 c 245.30 11.25 235.32 21.24 235.32 33.44 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 236.96 31.30 Tm (R_GlobalEnv) Tj ET 277.24 180.85 m 277.24 193.06 287.23 203.05 299.43 203.05 c 311.64 203.05 321.63 193.06 321.63 180.85 c 321.63 168.65 311.64 158.66 299.43 158.66 c 287.23 158.66 277.24 168.65 277.24 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 281.34 178.39 Tm (addProto2a) Tj ET 277.24 107.15 m 277.24 119.35 287.23 129.34 299.43 129.34 c 311.64 129.34 321.63 119.35 321.63 107.15 c 321.63 94.94 311.64 84.95 299.43 84.95 c 287.23 84.95 277.24 94.94 277.24 107.15 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 285.23 104.69 Tm (addProto) Tj ET 361.08 180.85 m 361.08 193.06 371.07 203.05 383.28 203.05 c 395.48 203.05 405.47 193.06 405.47 180.85 c 405.47 168.65 395.48 158.66 383.28 158.66 c 371.07 158.66 361.08 168.65 361.08 180.85 c S BT /F2 1 Tf 7.00 0.00 -0.00 7.00 367.13 178.39 Tm (addProto2) Tj ET 47.90 232.44 m 47.90 230.46 l 47.90 228.42 l 47.90 226.35 l 47.90 224.24 l 47.90 222.11 l 47.90 219.94 l 47.90 217.76 l 47.90 215.57 l 47.90 213.36 l 47.90 211.15 l S 47.90 213.36 m 47.90 211.15 l S 40.84 223.39 m 47.90 211.15 l 54.97 223.39 l S 67.63 169.39 m 74.21 165.47 l 81.53 161.15 l 89.41 156.52 l 97.71 151.66 l 106.26 146.66 l 114.92 141.62 l 123.51 136.61 l 131.89 131.73 l 139.89 127.07 l 147.36 122.71 l S 139.89 127.07 m 147.36 122.71 l S 133.23 122.77 m 147.36 122.71 l 140.35 134.98 l S 190.93 92.41 m 194.77 88.85 l 198.85 85.10 l 203.14 81.20 l 207.57 77.21 l 212.10 73.16 l 216.67 69.12 l 221.25 65.12 l 225.78 61.22 l 230.21 57.47 l 234.49 53.92 l S 230.21 57.47 m 234.49 53.92 l S 220.57 56.30 m 234.49 53.92 l 229.59 67.17 l S 142.43 161.20 m 143.94 158.69 l 145.48 156.11 l 147.07 153.45 l 148.69 150.74 l 150.34 147.99 l 152.02 145.22 l 153.72 142.44 l 155.43 139.66 l 157.15 136.90 l 158.87 134.17 l S 157.15 136.90 m 158.87 134.17 l S 146.36 140.73 m 158.87 134.17 l 158.29 148.29 l S 204.90 161.20 m 203.40 158.69 l 201.85 156.11 l 200.26 153.45 l 198.64 150.74 l 196.99 147.99 l 195.32 145.22 l 193.62 142.44 l 191.91 139.66 l 190.19 136.90 l 188.46 134.17 l S 190.19 136.90 m 188.46 134.17 l S 189.04 148.29 m 188.46 134.17 l 200.98 140.73 l S 299.43 158.74 m 299.43 156.75 l 299.43 154.72 l 299.43 152.65 l 299.43 150.54 l 299.43 148.40 l 299.43 146.24 l 299.43 144.06 l 299.43 141.86 l 299.43 139.66 l 299.43 137.45 l S 299.43 139.66 m 299.43 137.45 l S 292.37 149.68 m 299.43 137.45 l 306.50 149.68 l S 288.75 87.49 m 287.24 84.99 l 285.70 82.40 l 284.11 79.75 l 282.49 77.04 l 280.83 74.29 l 279.16 71.51 l 277.46 68.73 l 275.75 65.95 l 274.03 63.19 l 272.31 60.47 l S 274.03 63.19 m 272.31 60.47 l S 272.88 74.59 m 272.31 60.47 l 284.82 67.03 l S 366.01 166.11 m 362.18 162.56 l 358.09 158.81 l 353.81 154.91 l 349.38 150.91 l 344.85 146.87 l 340.27 142.82 l 335.69 138.82 l 331.16 134.93 l 326.73 131.18 l 322.45 127.62 l S 326.73 131.18 m 322.45 127.62 l S 327.35 140.87 m 322.45 127.62 l 336.38 130.00 l S Q endstream endobj 8 0 obj 4531 endobj 3 0 obj << /Type /Pages /Kids [ 6 0 R ] /Count 1 /MediaBox [0 0 432 288] >> endobj 4 0 obj << /ProcSet [/PDF /Text] /Font << /F1 5 0 R /F2 10 0 R >> /ExtGState << >> >> endobj 9 0 obj << /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [ 45/minus ] >> endobj 10 0 obj << /Type /Font /Subtype /Type1 /Name /F2 /BaseFont /Helvetica /Encoding 9 0 R >> endobj xref 0 11 0000000000 65535 f 0000000021 00000 n 0000000163 00000 n 0000004979 00000 n 0000005062 00000 n 0000000212 00000 n 0000000295 00000 n 0000000375 00000 n 0000004959 00000 n 0000005155 00000 n 0000005249 00000 n trailer << /Size 11 /Info 1 0 R /Root 2 0 R >> startxref 5346 %%EOF proto/README.md0000644000176200001440000000525513004743472012707 0ustar liggesusers# Proto [![Travis-CI Build Status](https://travis-ci.org/hadley/proto.svg?branch=master)](https://travis-ci.org/hadley/proto) [![CRAN_Status_Badge](http://www.r-pkg.org/badges/version/proto)](https://CRAN.R-project.org/package=proto) [![Coverage Status](https://img.shields.io/codecov/c/github/hadley/proto/master.svg)](https://codecov.io/github/hadley/proto?branch=master) Proto is an R package that facilitates prototype programming, a type of object-oriented programming that does not use classes as an atomic concept (but is powerful enough to encompass them). The package is lightweight providing a thin layer on top of R environments. Unlike other packages which grow over time proto has become smaller over time as it was successively polished to reduce it to its essentials. Despite its small size prototype-based systems can be more powerful than more complex class-based systems. ## Ease of use The proto package is easy to use because: 1. few names. There is only one new function name to learn among the core functions. The 'proto' function constructs new proto objects. Remaining core functions include various as.proto methods, assignment and retrieval via $ and is.proto. 2. documentation. A 15 page report, a reference card, a demo and help files are provided. 3. consistency. Proto objects form an subclass of the environment class. They are and work like environments. One can leverage everything one knows about environments to use proto. The package is highly consistent with R and works the way R works. 4. concise implementation. The source code, excluding dot.proto, is about one page of code making it possible to rapidly understand it in its entirety not only from the documentation but also by reading its source. (This should not be necessary but its there for those who wish.) 5. tested. The package has been independently tested by multiple people and has no known bugs. (If you find any please let the developers know!) ## Example The proto package is used like this: ```R library(proto) # new object with variable a and method addtwice oo <- proto(a = 1, addtwice = function(., x) .$a <- .$a + 2*x) oo$addtwice(3) # add twice 3 to 1 oo$ls() # "a" "addtwice" oo$a # 7 # create child object overriding a ooc <- oo$proto(a = 10) ooc$addtwice(1) # inherit addtwice from parent oo ooc$ls() # "a" ooc$a # 12 - addtwice from oo used "a" in ooc! ``` ### Documentation More information is available via: ```R demo(proto) # a self running demo vignette("proto") # 15 page report vignette("protoref") # reference card ?proto # constructs proto objects ?dot.proto # visualize a proto project ``` proto/MD50000644000176200001440000000433013004747713011733 0ustar liggesusers46aaf69a91703493b666f212a04f2d8d *COPYING d13d6e897e600782decc062154405515 *DESCRIPTION 79185c6178ca17f2333a13e1c04364f5 *NAMESPACE b82d79a3b0808d0727b3ed1dd1dca232 *NEWS.md 5fdb9a168d79e51eb75682fb80d7ab38 *R/graph.proto.R 32feac1144591dc1544ba145143e171f *R/proto.R 172a2f42e29eff6d5d4b8b0f4ea22d8c *README.md 07d42b7a2aef34560965f9cc44e2f6d4 *build/vignette.rds e7d0d22a9bf06821743815ed52398ec9 *demo/00Index f7c8dfe577867e2bb17740e6d1e90d0c *demo/proto-gWidgets.R 483dcf4797b0e433519c54852273b2d4 *demo/proto-vignette.R 389be8e7c57d3814674707a35c692459 *inst/FAQ 10ae2772e93fc9e20d6c04cac4c28b0a *inst/ReleaseNotes.txt d9d380a3002a53780a3f2e295f72d964 *inst/THANKS 7ecc08fce7089dad44f647b8bfb1434a *inst/WISHLIST 4c02116aa0d3f18588e6eac75245d477 *inst/doc/proto.Rnw 5c03a6e10e561838a2dc6e78b8d82dc4 *inst/doc/proto.pdf 7fa93ee9be6446b7a58ca3f03f83a920 *inst/doc/protoref.Rnw 94c06ffe4baa25c966cf8d1f87c95433 *inst/doc/protoref.pdf 6d0a2ee1cef9d7e3e35e57ec5f783e56 *man/proto-package.Rd 107f52b7c76137a872c40b16d1b62d3b *man/proto.Rd 13edf6e57a045e63a721fd0465f719d4 *tests/testthat.R cbda723db33f74ef3d17ca4db97f5b01 *tests/testthat/test-getting.R 224a9f6df86f731c79dfae8a6c0f6cf8 *tests/testthat/test-printing.R d64eff73ca94aa8d8e23eb2bfa69fd86 *vignettes/cloning3.pdf 014b4c7791b70438f0073a264aa18f4b *vignettes/proto-concordance.tex cfa8f120382d437ef100e932c11a4c32 *vignettes/proto-dot.pdf bfce81e7eaa5cf3d01dae6f9964aeab5 *vignettes/proto-dot.tex 5acb4a84c924cf82234ead21f9885a62 *vignettes/proto-smoothing03.pdf 1320f930222ba5b29e84f9321891b280 *vignettes/proto-smoothing03.tex 3428268a6c07e7dc06413ee7a9ac3a86 *vignettes/proto-smoothing04.pdf fdc0cf82a3583a4debfebcf2f66531c3 *vignettes/proto-smoothing04.tex a7328df62707e20a7ab4e00e00ba9050 *vignettes/proto-smoothing06.pdf 3b65082f7e4b40eda30d384124125fde *vignettes/proto-smoothing06.tex 691c6188ecfadf96684e1ec8349f6181 *vignettes/proto-smoothing10.pdf 383ef6322b693e859795cecaa29390c4 *vignettes/proto-smoothing10.tex 4c02116aa0d3f18588e6eac75245d477 *vignettes/proto.Rnw 7ad5d41f758d4792ef9c3a4bcfbe32da *vignettes/proto.bib a05a09f2df0c4e8743011ae343ccf8d4 *vignettes/proto.tex a3ca93bf6e5afe69e729381c44c14a4c *vignettes/protoref-raw.tex 7fa93ee9be6446b7a58ca3f03f83a920 *vignettes/protoref.Rnw proto/build/0000755000176200001440000000000013004746107012516 5ustar liggesusersproto/build/vignette.rds0000644000176200001440000000043013004746107015052 0ustar liggesusersN08TuE~uCT]Xjshl˱u eda[sxRSY!:߻5y 9-?iKM򁛽AU6M-*.4\H4o?3?1"tN)O||k+5ֈ_o #.m3f&z6cQ7@֧ϰ虜tPea׃/{}68 pkߧ~nproto/DESCRIPTION0000644000176200001440000000155313004747713013135 0ustar liggesusersPackage: proto Version: 1.0.0 Title: Prototype Object-Based Programming Description: An object oriented system using object-based, also called prototype-based, rather than class-based object oriented ideas. Authors@R: c( person("Hadley", "Wickham", , "hadley@rstudio.com", "cre"), person("Gabor", "Grothendieck", , "ggrothendieck@gmail.com", "aut"), person("Louis", "Kates", role = "aut"), person("Thomas", "Petzoldt", role = "aut") ) License: GPL-2 URL: https://github.com/hadley/proto BugReports: https://github.com/hadley/proto/issues Suggests: testthat, covr RoxygenNote: 5.0.1.9000 NeedsCompilation: no Packaged: 2016-10-28 22:08:08 UTC; hadley Author: Hadley Wickham [cre], Gabor Grothendieck [aut], Louis Kates [aut], Thomas Petzoldt [aut] Maintainer: Hadley Wickham Repository: CRAN Date/Publication: 2016-10-29 00:23:07 proto/man/0000755000176200001440000000000012540300046012162 5ustar liggesusersproto/man/proto.Rd0000644000176200001440000002711013004710544013621 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/proto.R \name{proto} \alias{proto} \alias{as.proto} \alias{as.proto.environment} \alias{as.proto.list} \alias{as.proto.data.frame} \alias{as.proto.proto} \alias{isnot.function} \alias{is.proto} \alias{$.proto} \alias{$<-.proto} \alias{with.proto} \alias{str.proto} \alias{.} \alias{this} \alias{.that} \alias{that} \alias{.super} \alias{super} \alias{print.instantiatedProtoMethod} \alias{as.proto} \alias{as.proto.environment} \alias{as.proto.proto} \alias{as.proto.list} \alias{is.proto} \title{Prototype object-based programming} \usage{ proto(. = parent.env(envir), expr = { }, envir = new.env(parent = parent.frame()), ..., funEnvir = envir) as.proto(x, ...) \method{as.proto}{environment}(x, ...) \method{as.proto}{proto}(x, ...) \method{as.proto}{list}(x, envir, parent, all.names = FALSE, ..., funEnvir = envir, SELECT = function(x) TRUE) is.proto(x) } \arguments{ \item{.}{the parent object of the new object. May be a proto object or an environment.} \item{expr}{a series of statements enclosed in braces that define the variables and methods of the object. Empty braces, the default, may be used if there are no variables or methods to add at this time.} \item{envir}{an existing prototype object or environment into which the variables and methods defined in \code{expr} are placed. If omitted a new object is created.} \item{\dots}{for \code{proto} these are components to be embedded in the new object. For \code{as.proto.list} these are arguments to pass to \code{proto} in the case that a new object is created. for \code{$.proto} the method is evaluated at these arguments.} \item{funEnvir}{the environment of methods passed via \dots{} are automatically set to this environment. Normally this argument is omitted, defaulting to \code{envir}; however, one can specify \code{FALSE} to cause their environment to not be set or one can specify some other environment or proto object to which their environment is to be set.} \item{x}{a list.} \item{parent}{a prototype object or environment which is to be used as the parent of the object. If \code{envir} is specified then its parent is coerced to \code{parent}.} \item{all.names}{only names not starting with a dot are copied unless all.names is TRUE.} \item{SELECT}{a function which given an object returns \code{TRUE} or \code{FALSE} such that only those for which \code{SELECT} returns \code{TRUE} are kept in the returned \code{proto} object.} \item{list}{list whose components are an alternate way to specifying arguments in place of \code{\dots{}}} } \value{ \code{proto} and \code{as.proto} all return proto objects. } \description{ \code{proto} creates or modifies objects of the proto object oriented system. } \details{ The \code{proto} class is an \code{S3} subclass of the R \code{environment} class. In particular this implies that \code{proto} objects have single inheritance and mutable state as all environments do. The \code{proto} function creates and modifies objects of the \code{proto} class. It (1) sets the parent of codeenvir to \code{parent}, (2) evaluates \code{expr} in the \code{envir} environment and (3) lazily evaluates the arguments in \code{\dots{}} in the parent environment resetting the environment of any functions (where the resetting is also done lazily). All such functions are known as methods and should have the receiver object as their first argument. Conventionally this is \code{.} (i.e. a dot). Also \code{.that} and \code{.super} variables are added to the environment \code{envir}. These point to the object itself and its parent, respectively. Note that \code{proto} can be used as a method and overridden like any other method. This allows objects to have object-specific versions of \code{proto}. There also exist \code{that()} and \code{super()} functions which have the same purpose as \code{.that} and \code{.super} but do not rely on the \code{.that} and \code{.super}. \code{.that}, \code{.super}, \code{that()} and \code{super()} can only be used within methods that have their object as their environment. In addition \code{that()} and \code{super()} may only be used within the top level of such methods ( and not within functions within such methods). \code{as.proto} is a generic with methods for environments, proto objects and lists. \code{as.proto.list} copies each component, \code{el}, of the list \code{x} into the the environment or proto object \code{envir} for which \code{FUN(el)} is \code{TRUE}. Components whose name begins with a dot, \code{.}, are not copied unless \code{all.names} is \code{TRUE} (and \code{FUN(el)} is \code{TRUE}). The result is a proto object whose parent is \code{parent}. If \code{envir} is omitted a new object is created through a call to \code{proto} with \code{parent} and \code{\dots{}} as arguments. If \code{parent} is also omitted then the current environment is the parent. Note that if \code{parent} is a proto object with its own \code{proto} method then the \code{proto} method of the parent will override the one described here in which case the functionality may differ. \code{$} can be used to access or set variables and methods in an object. When \code{$} is used for getting variables and methods, calls of the form \code{obj$v} search for v in \code{obj} and if not found search upwards through the ancestors of \code{obj} until found unless the name \code{v} begins with two dots \code{..}. In that case no upward search is done. If \code{meth} is a function then \code{obj$meth} is an object of class \code{c("instantiatedProtoMethod", "function")} which is a \code{proto} method with the first, i.e. proto slot, already filled in. It is normally used in the context of a call to a method, e.g. \code{obj$meth(x,y)}. There also exists \code{print.instantiatedProtoMethod} for printing such objects. Be aware that an instantiated proto method is not the same as a proto method. An instantiated proto method has its first argument filled (with the receiver object) whereas the first argument of a proto method does not. If it is desired to actually return the method as a value not in the context of a call then use the form \code{obj$with(meth)} or \code{obj[[meth]]} which are similar to \code{with(obj, meth)} except that the variation using \code{with} will search through ancestors while \code{[[} will not search through ancestors). The difference between \code{obj$meth} and \code{obj$with(meth)} is that in the first case \code{obj} implicitly provides the first argument to the call so that \code{obj$meth(x,y)} and \code{obj$with(meth)(obj,x,y)} are equivalent while in the case of \code{obj$with(meth)} the first argument is not automatically inserted. \code{$.proto} also has a multiple argument form. If three or more arguments are present then they specify the arguments at which the instantiated method is to be evaluated. In this form the receiver object must be specified explicitly. This form can be used in situations where the highest speed is required such as in the inner loops of computations. The forms \code{.that$meth} and \code{.super$meth} are special and should only be used within methods. \code{.that} refers to the object in which the current method is located and \code{.super} refers to the parent of \code{.that}. In both cases the receiver object must be specified as the first argument -- the receiver is not automatically inserted as with other usages of \code{$}. \code{$} can be used to set variables and methods in an object. No ancestors are searched for the set form of \code{$}. If the variable is the special variable \code{.super} then not only is the variable set but the object's parent is set to \code{.super}. A \code{with} method is available for \code{proto} objects. \code{is.proto(p)} returns TRUE if p is a prototype object. \code{str.proto} is provided for inspecting \code{proto} objects. } \note{ proto methods can be used with environments but some care must be taken. Problems can be avoided by always using proto objects in these cases. This note discusses the pitfalls of using environments for those cases where such interfacing is needed. If \code{e} is an environment then \code{e$x} will only search for \code{x} in \code{e} and no further whereas if \code{e} were a proto object its ancestors will be searched as well. For example, if the parent of a \code{proto} object is an \code{environment} but not itself a \code{proto} object then \code{.super$x} references in the methods of that object will only look as far as the parent. Also note that the form \code{e$meth(...)} when used with an environment will not automatically insert \code{e} as the first argument and so environments can only be used with methods by using the more verbose \code{e$meth(e, ...)}. Even then it is not exactly equivalent since \code{meth} will only be looked up in \code{e} but not its ancestors. To get precise equivalence write the even more verbose \code{with(e, meth)(e, ...)}. If the user has a proto object \code{obj} which is a child of the global environment and whose methods use \code{.super} then \code{.super} will refer to an environment, not a proto object (unless the global environment is coerced to a proto object) and therefore be faced with the search situation discussed above. One solution is to create an empty root object between the global environment and \code{obj} as in this diagram \code{Root <- obj$.super <- proto(.GlobalEnv)} where \code{Root} is the root object. Now \code{.super} references will reference \code{Root}, which is a proto object so search will occur as expected. \code{proto} does not provide such a root object automatically but the user can create one easily, if desired. Although not recommended, it possible to coerce the global environment to a proto object by issuing the command \code{as.proto(.GlobalEnv)}. This will effectively make the global environment a proto root object but has the potential to break other software, although the authors have not actually found any software that it breaks. } \examples{ oo <- proto(expr = { x = c(10, 20, 15, 19, 17) location = function(.) mean(.$x) # 1st arg is object rms = function(.) sqrt(mean((.$x - .$location())^2)) bias = function(., b) .$x <- .$x + b }) debug(oo$with(rms)) # cannot use oo$rms to pass method as a value undebug(oo$with(rms)) # cannot use oo$rms to pass method as a value oo2 <- oo$proto( location = function(.) median(.$x) ) oo2$rms() # note that first argument is omitted. oo2$ls() # list components of oo2 oo2$as.list() # contents of oo2 as a list oo2 # oo2 itself oo2$parent.env() # same oo2$parent.env()$as.list() # contents of parent of oo2 oo2$print() oo2$ls() oo2$str() oo3 <- oo2 oo2$identical(oo3) oo2$identical(oo) # start off with Root to avoid problem cited in Note Root <- proto() oop <- Root$proto(a = 1, incr = function(.) .$a <- .$a+1) ooc <- oop$proto(a = 3) # ooc is child of oop but with a=3 ooc$incr() ooc$a # 4 # same but proto overridden to force a to be specified oop$proto <- function(., a) { .super$proto(., a=a) } \dontrun{ ooc2 <- oop$proto() # Error. Argument "a" is missing, with no default. } ooc2 <- oop$proto(a = 10) ooc2$incr() ooc2$a # 11 # use of with to eliminate having to write .$a o2 <- proto(a = 1, incr = function(.) with(., a <- a+1)) o2c <- as.proto(o2$as.list()) # o2c is a clone of o2 o2d <- o2$proto() # o2d is a child of o2 o2$a <- 2 o2c$a # a not changed by assignment in line above o2d$a # a is changed since a not found in o2d so found in o2 p <- proto(a = 0, incr = function(., x) .$a <- .$a + x) pc <- p$proto(a = 100) p$incr(7) p$incr(x=7) p$a } \seealso{ \code{\link{as.list}}, \code{\link{names}}, \code{\link{environment}} } \keyword{programming} proto/man/proto-package.Rd0000644000176200001440000000143213004710544015211 0ustar liggesusers% Generated by roxygen2: do not edit by hand % Please edit documentation in R/proto.R \docType{package} \name{proto-package} \alias{proto-package} \title{Object-Oriented Programming with the Prototype Model} \description{ Object-oriented programming with the prototype model. \code{"proto"} facilitates object-oriented programming using an approach that emphasizes objects rather than classes (although it is powerful enough to readily represent classes too). } \examples{ cat("parent\\n") oop <- proto(x = 10, view = function(.) paste("this is a:", .$x)) oop$ls() oop$view() cat("override view in parent\\n") ooc1 <- oop$proto(view = function(.) paste("this is a: ***", .$x, "***")) ooc1$view() cat("override x in parent\\n") ooc2 <- oop$proto(x = 20) ooc2$view() } \keyword{programming}