rpart/0000755000176000001440000000000012271001166011426 5ustar ripleyusersrpart/po/0000755000176000001440000000000012122302607012043 5ustar ripleyusersrpart/po/R-fr.po0000644000176000001440000002111412053367467013232 0ustar ripleyusers# Translation of R-rpart.pot to French # Copyright (C) 2005 The R Foundation # This file is distributed under the same license as the rpart R package. # Philippe Grosjean , 2005. # msgid "" msgstr "" "Project-Id-Version: rpart 3.1-24\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2012-10-03 14:18+0100\n" "Last-Translator: Philippe Grosjean \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.5.3\n" msgid "'x' must be a numeric vector" msgstr "'x' doit tre un vecteur numrique" msgid "Not a legitimate \"rpart\" object" msgstr "Ceci n'est pas un objet \"rpart\" valide" msgid "Plot not useful for classification or poisson trees" msgstr "" "Le graphe n'est pas utile pour des arbres de classification ou de poisson" msgid "fit is not a tree, just a root" msgstr "l'ajustement n'est pas un arbre, juste une racine" msgid "'cptable' does not contain cross-validation results" msgstr "'cptable' ne contients aucuns rsultats de validation croise" msgid "Tree has variables not found in new data" msgstr "L'arbre a des variables introuvables dans le nouveau jeu de donnes" msgid "type 'class' is only appropriate for classification" msgstr "" msgid "Invalid prediction for \"rpart\" object" msgstr "Prdiction incorrecte pour un objet \"rpart\"" msgid "'x' must be an \"rpart\" object" msgstr "'x' doit tre un objet \"rpart\"" msgid "Invalid type of residual" msgstr "Type de rsidus inconnus" msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" msgid "a 'formula' argument is required" msgstr "" msgid "Trees cannot handle interaction terms" msgstr "Les arbres ne peuvent prendre en compte les termes d'interaction" msgid "negative weights not allowed" msgstr "" msgid "Invalid method" msgstr "Methode incorrecte" msgid "Argument %s not matched" msgstr "L'argument %s est inconnu" msgid "Wrong length for 'xval'" msgstr "Longueur incorrecte de 'xval'" msgid "Cost vector is the wrong length" msgstr "le vecteur de cot n'est pas de la bonne taille" msgid "Cost vector must be positive" msgstr "Le vecteur de cot doit tre positif" msgid "Initialization routine is missing the 'summary' function" msgstr "La routine d'initialisation ne trouve pas la fonction 'summary'" msgid "no information available on parameters from previous call to plot()" msgstr "" msgid "No offset allowed in classification models" msgstr "Aucun dcalage n'est autoris pour les modles de classification" msgid "The parms list must have names" msgstr "La liste des 'parms' doit tre nomme" msgid "'parms' component not matched: %s" msgstr "Composants de 'parms' inconnus: %s" msgid "Priors must sum to 1" msgstr "la somme des 'priors' doit tre 1" msgid "Priors must be >= 0" msgstr "les 'priors' doivent tre >= 0" msgid "Wrong length for priors" msgstr "Longueur incorrecte pour 'priors'" msgid "Wrong length for loss matrix" msgstr "Longueur inconnue pour la 'loss matrix'" msgid "Loss matrix must have zero on diagonals" msgstr "La 'loss matrix' doit avoir des zros dans sa diagonale" msgid "Loss matrix cannot have negative elements" msgstr "La 'loss matrix' ne peut avoir des lments ngatifs" msgid "Loss matrix has a row of zeros" msgstr "La 'loss matrix' a une ligne remplie de zros" msgid "Invalid splitting rule" msgstr "Rgle de sparation des groupes incorrecte" msgid "Parameter argument must be a list" msgstr "L'argument 'parameter' doit tre une liste" msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "" "La valeur de 'maxcompete' fournie est < 0 ; La valeur 0 sera utilise la " "place" msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "" "La valeur de 'xval' fournie est < 0 ; La valeur 0 sera utilise la place" msgid "Maximum depth is 30" msgstr "La profondeur maximale est de 30" msgid "Maximum depth must be at least 1" msgstr "La profondeur maximale doit tre au moins 1" msgid "" "The value of 'usesurrogate' supplied was out of range, the default value of " "2 is used instead." msgstr "" "La valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 2 " "est utilise la place." msgid "" "The value of 'surrogatestyle' supplied was out of range, the default value " "of 0 is used instead." msgstr "" "La valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 0 " "est utilise la place." msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "" "'Response' doit tre un objet 'survival' - utilisez la fonction 'Surv()'" msgid "Observation time must be > 0" msgstr "Le temps associ aux observations doit tre > 0" msgid "No deaths in data set" msgstr "Aucun mort dans le jeu de donnes" msgid "You must input a named list for parms" msgstr "Vous devez entrer une liste nomme pour 'parms'" msgid "Invalid error method for Poisson" msgstr "Mthode d'erreur incorrecte pour 'Poisson'" msgid "Invalid shrinkage value" msgstr "Valeur 'shrinkage' incorrecte" msgid "response must be a 2 column matrix or a vector" msgstr "'response' doit tre un vecteur ou une matrice 2 colonnes" msgid "Number of events must be >= 0" msgstr "Le nombre d'vnements doit tre >= 0" msgid "User written methods must have 3 functions" msgstr "Les mthodes personnalises doivent avoir 3 fonctions" msgid "User written method does not contain an 'init' function" msgstr "La mthode personnalise ne contient pas de fonction 'init'" msgid "User written method does not contain a 'split' function" msgstr "La mthode personnalise ne contient pas de fonction 'split'" msgid "User written method does not contain an 'eval' function" msgstr "La mthode personnalise ne contient pas de fonction 'eval'" msgid "User 'eval' function returned invalid label" msgstr "La fonction 'eval' personnalise a renvoy une tiquette incorrecte" msgid "User 'eval' function returned invalid deviance" msgstr "La fonction 'eval' personnalise a renvoy un cart incorrect" msgid "Invalid return from categorical 'split' function" msgstr "Retour incorrect de la fonction 'split'" msgid "User 'split' function returned invalid goodness" msgstr "" "La fonction 'split' personnalise a renvoy une qualit (goodness) incorrecte" msgid "User 'split' function returned invalid direction" msgstr "La fonction 'split' personnalise a renvoy une direction incorrecte" msgid "may not be applicable for this method" msgstr "" msgid "Not an \"rpart\" object" msgstr "Ceci n'est pas un objet \"rpart\"" msgid "Nodes %s are not in this tree" msgstr "Les noeuds %s ne sont pas dans l'arbre" #, fuzzy msgid "argument 'label' is no longer used" msgstr "l'argument 'label' est actuellement inutilis" msgid "Invalid fit object" msgstr "Objet 'fit' incorrect" msgid "supplied nodes %s are not in this tree" msgstr "les noeuds fournis %s ne sont pas dans l'arbre" msgid "supplied nodes %s are leaves" msgstr "les noeuds fournis %s sont des feuilles" #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr "" #~ "plus de 52 niveaux dans la variable facteur prdictive, sorties tronques" #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr "'x' ne semble pas tre un objet \"rpart\"" #~ msgid "'x' not converted" #~ msgstr "'x' n'a pas converg" #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr "'x' doit tre un objet \"rpart\"" #, fuzzy #~ msgid "'parms' component not matched:" #~ msgstr "Composants de 'parms' inconnus" #, fuzzy #~ msgid "Not a legitimate tree" #~ msgstr "Ceci n'est pas un arbre valide" #, fuzzy #~ msgid "Not a legitimate 'rpart' object" #~ msgstr "Ceci n'est pas un objet rpart valide" #~ msgid "The value of surrogatestyle supplied was out of range," #~ msgstr "La valeur de 'surrogatestyle' fournie est hors plage," #~ msgid "the default value of 0 is used instead." #~ msgstr "la valeur par dfaut de 0 est utilise la place." #~ msgid "Not legitimate rpart" #~ msgstr "Ceci n'est pas un objet 'rpart' correct" #~ msgid "Must be an rpart x" #~ msgstr "x doit tre un objet rpart" #~ msgid "the default value of 2 is used instead." #~ msgstr "la valeur par dfaut de 2 est utilise la place." #~ msgid "Argument" #~ msgstr "L'argument" #~ msgid "Nodes" #~ msgstr "Les noeuds" #~ msgid "are leaves" #~ msgstr "sont des feuilles" #~ msgid "Label must be a column label of the frame component of the tree" #~ msgstr "" #~ "'Label' doit tre une colonne d'tiquettes des composants de l'arbre" rpart/po/de.po0000644000176000001440000000366212122262120012775 0ustar ripleyusers# Translation of rpart (de.po) to German # Copyright (C) 2005-2012 The R Foundation # This file is distributed under the same license as the rpart package. # Chris Leick , 2009-2012. # msgid "" msgstr "" "Project-Id-Version: R-2.15.2 / rpart 3.1-55\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: 2012-10-10 22:21+0200\n" "Last-Translator: Chris Leick \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: poisson.c:34 msgid "Invalid time point" msgstr "ungültiger Zeitpunkt" #: poisson.c:38 msgid "Invalid event count" msgstr "ungültige Ereignisanzahl" #: poisson.c:68 msgid "Invalid error rule" msgstr "" #: rpart.c:91 xpred.c:89 #, fuzzy msgid "Invalid value for 'method'" msgstr "ungültiger Wert für 'method'" #: rpart.c:193 msgid "unknown error" msgstr "" #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback' nicht gefunden" #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback' nicht gefunden" #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback' nicht gefunden" #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback' nicht gefunden" #: rpart_callback.c:104 msgid "return value not a vector" msgstr "Rückgabewert ist kein Vektor" #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "Rückgabewert hat falsche Länge" #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "Der Ausdruck expr1 gab keinen Vektor zurück!" #~ msgid "Out of memory" #~ msgstr "Platz im Hauptspeicher reicht nicht aus" #~ msgid "the expression expr1 returned a list of %d elements, %d required" #~ msgstr "" #~ "Der Ausdruck expr1 gab eine Liste von %d Elementen zurück, %d sind " #~ "erforderlich." rpart/po/pl.po0000644000176000001440000000540212122262120013012 0ustar ripleyusersmsgid "" msgstr "" "Project-Id-Version: rpart 3.1-53\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: \n" "Last-Translator: Łukasz Daniel \n" "Language-Team: Łukasz Daniel \n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "na-Revision-Date: 2012-05-29 07:55+0100\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2)\n" "X-Poedit-SourceCharset: iso-8859-1\n" # Recommended/rpart/src/poisson.c: 41 # _("Invalid time point") #: poisson.c:34 msgid "Invalid time point" msgstr "Niepoprawny punkt czasowy" # Recommended/rpart/src/poisson.c: 45 # _("Invalid event count") #: poisson.c:38 msgid "Invalid event count" msgstr "błędne zliczenia zdarzenia" #: poisson.c:68 msgid "Invalid error rule" msgstr "" # Recommended/rpart/src/s_xpred.c: 38 # _("invalid value for 'method'") #: rpart.c:91 xpred.c:89 #, fuzzy msgid "Invalid value for 'method'" msgstr "niepoprawna wartość dla 'method'" #: rpart.c:193 msgid "unknown error" msgstr "" # Recommended/rpart/src/rpart_callback.c: 47 # error(_("'yback' not found")) #: rpart_callback.c:46 msgid "'yback' not found" msgstr "nie znaleziono 'yback'" # Recommended/rpart/src/rpart_callback.c: 50 # error(_("'wback' not found")) #: rpart_callback.c:50 msgid "'wback' not found" msgstr "nie znaleziono 'wback'" # Recommended/rpart/src/rpart_callback.c: 53 # error(_("'xback' not found")) #: rpart_callback.c:54 msgid "'xback' not found" msgstr "nie znaleziono 'xback'" # Recommended/rpart/src/rpart_callback.c: 56 # error(_("'nback' not found")) #: rpart_callback.c:58 msgid "'nback' not found" msgstr "nie znaleziono 'nback'" # Recommended/rpart/src/rpart_callback.c: 102 # error(_("return value not a vector")) #: rpart_callback.c:104 msgid "return value not a vector" msgstr "zwrócona wartość nie jest wektorem" # Recommended/rpart/src/rpart_callback.c: 105 # error(_("returned value is the wrong length")) #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "zwrócona wartość ma błędną długość" # Recommended/rpart/src/rpart_callback.c: 140 # error(_("the expression expr1 did not return a vector!")) #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "wyrażenie 'expr1' nie zwróciło wektora!" #~ msgid "Out of memory" #~ msgstr "Brak pamięci" # Recommended/rpart/src/rpart_callback.c: 147 # error( # _("the expression expr1 returned a list of %d elements, %d required"), # j, 2*(n-1)) #~ msgid "the expression expr1 returned a list of %d elements, %d required" #~ msgstr "" #~ "wyrażenie 'expr1' zwróciło listę złożoną z %d elementów, wymagano %d" rpart/po/ru.po0000644000176000001440000000373412122140245013036 0ustar ripleyusers# Russian translations for R # R # # Copyright (C) 2008 The R Foundation # This file is distributed under the same license as the R package. # Alexey Shipunov 2008 # # msgid "" msgstr "" "Project-Id-Version: R 2.7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-11-29 14:21+0000\n" "PO-Revision-Date: 2013-03-19 14:46-0600\n" "Last-Translator: Alexey Shipunov \n" "Language-Team: Russian\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=KOI8-R\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Russian\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: poisson.c:34 msgid "Invalid time point" msgstr " " #: poisson.c:38 msgid "Invalid event count" msgstr " " #: poisson.c:68 msgid "Invalid error rule" msgstr " " #: rpart.c:91 #: xpred.c:89 msgid "Invalid value for 'method'" msgstr " 'method'" #: rpart.c:193 msgid "unknown error" msgstr " " #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback' " #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback' " #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback' " #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback' " #: rpart_callback.c:104 msgid "return value not a vector" msgstr " -- " #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr " -- " #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr " expr1 !" #~ msgid "Out of memory" #~ msgstr " " #~ msgid "the expression expr1 returned a list of %d elements, %d required" #~ msgstr " expr1 %d , %d" rpart/po/R-de.po0000644000176000001440000001745112053367467013224 0ustar ripleyusers# Translation of R-rpart.pot to German # Copyright (C) 2007-2009 The R Foundation # This file is distributed under the same license as the rpart package. # Chris Leick , 2009. # msgid "" msgstr "" "Project-Id-Version: R-2.15.2 / rpart 3.1-55\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2012-10-10 22:21+0200\n" "Last-Translator: Chris Leick \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "'x' must be a numeric vector" msgstr "'x' muss ein numerischer Vektor sein" msgid "Not a legitimate \"rpart\" object" msgstr "kein rechtmäßiges \"rpart\"-Objekt" # http://de.wikipedia.org/wiki/Poisson_Verteilung msgid "Plot not useful for classification or poisson trees" msgstr "Darstellung nicht nützlich für Klassifizierung oder Poisson-Bäume" msgid "fit is not a tree, just a root" msgstr "Anpassung ist kein Baum, nur eine Wurzel" msgid "'cptable' does not contain cross-validation results" msgstr "'cptable' enthält keine Kreuzbestätigungsergebnisse" msgid "Tree has variables not found in new data" msgstr "Baum hat Variablen, die in neuen Daten nicht gefunden wurden" msgid "type 'class' is only appropriate for classification" msgstr "" msgid "Invalid prediction for \"rpart\" object" msgstr "ungültige Vorhersage für \"rpart\"-Objekt" msgid "'x' must be an \"rpart\" object" msgstr "'x' muss ein \"rpart\"-Objekt sein." msgid "Invalid type of residual" msgstr "Es ist nichts über diesen Residuen-Typ bekannt." msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" msgid "a 'formula' argument is required" msgstr "" msgid "Trees cannot handle interaction terms" msgstr "Bäume können keine Interaktions-Terme handhaben" msgid "negative weights not allowed" msgstr "" msgid "Invalid method" msgstr "ungültige Methode" msgid "Argument %s not matched" msgstr "Argument %s nicht passend" msgid "Wrong length for 'xval'" msgstr "falsche Länge für 'xval'" msgid "Cost vector is the wrong length" msgstr "Kostenvektor hat die falsche Länge" msgid "Cost vector must be positive" msgstr "Kostenvektor muss positiv sein" msgid "Initialization routine is missing the 'summary' function" msgstr "Der Initialisierungsroutine fehlt die Funktion 'summary'." msgid "no information available on parameters from previous call to plot()" msgstr "" msgid "No offset allowed in classification models" msgstr "kein Versatz in Klassifizierungsmodellen erlaubt" msgid "The parms list must have names" msgstr "Die Parms-Liste muss Namen haben" msgid "'parms' component not matched: %s" msgstr "'parms'-Komponente passt nicht: %s" msgid "Priors must sum to 1" msgstr "Priors müssen sich zu 1 summieren" msgid "Priors must be >= 0" msgstr "Priors müssen >= 0 sein" msgid "Wrong length for priors" msgstr "falsche Länge für priors" msgid "Wrong length for loss matrix" msgstr "falsche Länge für Verlustmatrix" msgid "Loss matrix must have zero on diagonals" msgstr "Verlustmatrix muss auf den Diagonalen Null sein" msgid "Loss matrix cannot have negative elements" msgstr "Verlustmatrix kann keine negativen Elemente haben" msgid "Loss matrix has a row of zeros" msgstr "Verlustmatrix hat eine Zeile mit Nullen" msgid "Invalid splitting rule" msgstr "ungültige Aufteilungsregel" msgid "Parameter argument must be a list" msgstr "Parameterargument muss eine Liste sein." msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "" "Der für 'maxcompete' angegebene Wert ist < 0. Stattdessen wird der Wert 0 " "benutzt." msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "" "Der für 'xval' angegebene Wert ist < 0. Stattdessen wird der Wert 0 benutzt." msgid "Maximum depth is 30" msgstr "maximale Tiefe ist 30" msgid "Maximum depth must be at least 1" msgstr "maximale Tiefe muss mindestens 1 sein" msgid "" "The value of 'usesurrogate' supplied was out of range, the default value of " "2 is used instead." msgstr "" "Der für 'usesurrogate' angegebene Wert liegt außerhalb des Bereichs, " "stattdessen wird der Standardwert 2 benutzt." msgid "" "The value of 'surrogatestyle' supplied was out of range, the default value " "of 0 is used instead." msgstr "" "Der für 'surrogatetyle' angegebene Wert liegt außerhalb des Bereichs, " "stattdessen wird der Standardwert 0 benutzt." msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "" "Antwort muss ein 'survival'-Objekt sein - benutzen Sie die Funktion 'Surv()'" msgid "Observation time must be > 0" msgstr "Beobachtungszeit muss > 0 sein" msgid "No deaths in data set" msgstr "keine deaths im Datensatz" msgid "You must input a named list for parms" msgstr "Sie müssen eine benannte Liste für parms eingeben." msgid "Invalid error method for Poisson" msgstr "ungültige Fehlermethode für Poisson" msgid "Invalid shrinkage value" msgstr "ungültiger Schrumpfungswert" msgid "response must be a 2 column matrix or a vector" msgstr "Antwort muss eine 2-spaltige Matrix oder Vektor sein" msgid "Number of events must be >= 0" msgstr "Anzahl der Ereignisse muss >= 0 sein" msgid "User written methods must have 3 functions" msgstr "Vom Benutzer geschriebene Methoden müssen drei Funktionen haben." msgid "User written method does not contain an 'init' function" msgstr "Vom Benutzer geschriebene Methoden enthalten keine 'init'-Funktion." msgid "User written method does not contain a 'split' function" msgstr "Vom Benutzer geschriebene Methoden enthalten keine 'split'-Funktion." msgid "User written method does not contain an 'eval' function" msgstr "Vom Benutzer geschriebene Methoden enthalten keine 'eval'-Funktion." msgid "User 'eval' function returned invalid label" msgstr "Benutzerfunktion 'eval' gab ungültige Bezeichnung zurück." msgid "User 'eval' function returned invalid deviance" msgstr "Benutzerfunktion 'eval' gab ungültige Abweichung zurück." msgid "Invalid return from categorical 'split' function" msgstr "ungültige Rückgabe von grundsätzlichen 'split'-Funktion" msgid "User 'split' function returned invalid goodness" msgstr "Benutzerfunktion 'split' gab ungültige Integrität zurück." msgid "User 'split' function returned invalid direction" msgstr "Benutzerfunktion 'split' gab ungültige Richtung zurück." msgid "may not be applicable for this method" msgstr "" msgid "Not an \"rpart\" object" msgstr "kein \"rpart\"-Objekt" msgid "Nodes %s are not in this tree" msgstr "Knoten %s sind nicht in diesem Baum." msgid "argument 'label' is no longer used" msgstr "Argument 'label' wird derzeit nicht benutzt." msgid "Invalid fit object" msgstr "ungültiges angepasstes Objekt" msgid "supplied nodes %s are not in this tree" msgstr "mitgelieferte Knoten %s sind nicht in diesem Baum." msgid "supplied nodes %s are leaves" msgstr "mitgelieferte Knoten %s sind Blätter" #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr "" #~ "mehr als 52 Stufen in einem Vorhersagefaktor, für Ausdruck reduziert" #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr "x scheint kein \"rpart\"-Objekt zu sein." #~ msgid "'x' not converted" #~ msgstr "'x' nicht konvertiert" #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr "'x' muss ein \"rpart\"-Objekt sein." #~ msgid "Not legitimate tree" #~ msgstr "kein rechtmäßiger Baum" #~ msgid "The value of surrogatestyle supplied was out of range," #~ msgstr "" #~ "Der für surrogatestyle angegebene Wert liegt außerhalb des Bereichs," #~ msgid "the default value of 0 is used instead." #~ msgstr "der Standardwert von 0 wird an dessen Stelle benutzt." #~ msgid "Not legitimate rpart" #~ msgstr "kein rechtmäßiger rpart" rpart/po/rpart.pot0000644000176000001440000000247012122262120013715 0ustar ripleyusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: rpart 4.1-1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: poisson.c:34 msgid "Invalid time point" msgstr "" #: poisson.c:38 msgid "Invalid event count" msgstr "" #: poisson.c:68 msgid "Invalid error rule" msgstr "" #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "" #: rpart.c:193 msgid "unknown error" msgstr "" #: rpart_callback.c:46 msgid "'yback' not found" msgstr "" #: rpart_callback.c:50 msgid "'wback' not found" msgstr "" #: rpart_callback.c:54 msgid "'xback' not found" msgstr "" #: rpart_callback.c:58 msgid "'nback' not found" msgstr "" #: rpart_callback.c:104 msgid "return value not a vector" msgstr "" #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "" #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "" rpart/po/fr.po0000644000176000001440000000362512122262120013013 0ustar ripleyusers# Translation of rpart.pot to French # Copyright (C) 2005 The R Foundation # This file is distributed under the same license as the rpart R package. # Philippe Grosjean , 2005. # msgid "" msgstr "" "Project-Id-Version: rpart 3.1-24\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: 2005-12-07 02:43+0100\n" "Last-Translator: Philippe Grosjean \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: poisson.c:34 msgid "Invalid time point" msgstr "Point temporel incorrect" #: poisson.c:38 msgid "Invalid event count" msgstr "Dnombrement d'vnements incorrect" #: poisson.c:68 msgid "Invalid error rule" msgstr "" #: rpart.c:91 xpred.c:89 #, fuzzy msgid "Invalid value for 'method'" msgstr "valeur incorrecte pour 'method'" #: rpart.c:193 msgid "unknown error" msgstr "" #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback' non trouv" #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback' non trouv" #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback' non trouv" #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback' non trouv" #: rpart_callback.c:104 msgid "return value not a vector" msgstr "la valeur renvoye n'est pas un vecteur" #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "la valeur renvoye n'a pas la bonne longueur" #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "l'expression 'expr1' n'a pas renvoy un vecteur!" #~ msgid "Out of memory" #~ msgstr "Mmoire sature" #~ msgid "the expression expr1 returned a list of %d elements, %d required" #~ msgstr "" #~ "l'expression 'expr1' a renvoy une liste de %d lments, %d sont requis" rpart/po/ko.po0000644000176000001440000000422612122262120013013 0ustar ripleyusers# Korean translation for R rpart package # Recommended/rpart/po/ko.po # Maintainer: Brian Ripley # Copyright (C) 1995-2013 The R Core Team # This file is distributed under the same license as the R rpart package. # R Development Translation Team - Korean # Chel Hee Lee , 2013. # Chel Hee Lee , 2013. # msgid "" msgstr "" "Project-Id-Version: rpart 4.1-0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: 2013-03-11 13:53-0600\n" "Last-Translator: Chel Hee Lee \n" "Language-Team: R Development Translation Teams (Korean) \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Poedit-Language: Korean\n" "X-Poedit-Country: KOREA, REPUBLIC OF\n" "X-Poedit-SourceCharset: utf-8\n" #: poisson.c:34 msgid "Invalid time point" msgstr "유효하지 않은 타임 포인트입니다" #: poisson.c:38 msgid "Invalid event count" msgstr "유효하지 않은 이벤트 카운트입니다" #: poisson.c:68 msgid "Invalid error rule" msgstr "유효하지 않은 error rule입니다" #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "'method'에 유효하지 않은 값입니다" #: rpart.c:193 msgid "unknown error" msgstr "알 수 없는 에러입니다" #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback'를 찾을 수 없습니다" #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback'을 찾을 수 없습니다" #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback'을 찾을 수 없습니다" #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback'을 찾을 수 없습니다" #: rpart_callback.c:104 msgid "return value not a vector" msgstr "벡터가 아닌 값을 반환합니다" #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "반환된 값의 길이가 올바르지 않습니다" #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "표현식 expr1은 벡터를 돌려주지 않았습니다!" rpart/po/R-pl.po0000644000176000001440000003525512053367467013251 0ustar ripleyusersmsgid "" msgstr "" "Project-Id-Version: rpart 3.1-53\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: \n" "Last-Translator: Łukasz Daniel \n" "Language-Team: Łukasz Daniel \n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "na-Revision-Date: 2012-05-29 07:55+0100\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Generator: Poedit 1.5.3\n" # rpart/R/formatg.s: 12 # stop("'x' must be a numeric vector") msgid "'x' must be a numeric vector" msgstr "'x' musi być wektorem liczbowym" # rpart/R/meanvar.rpart.s: 7 # stop("Not legitimate 'rpart' object") # rpart/R/plotcp.s: 8 # stop("Not legitimate 'rpart' object") # rpart/R/print.rpart.s: 4 # stop("Not legitimate 'rpart' object") # rpart/R/residuals.rpart.s: 5 # stop("Not legitimate 'rpart' object") # rpart/R/summary.rpart.s: 4 # stop("Not legitimate 'rpart' object") #, fuzzy msgid "Not a legitimate \"rpart\" object" msgstr "Niepoprawny obiekt \"rpart\"" # rpart/R/meanvar.rpart.s: 9 # stop("Plot not useful for classification or poisson trees") msgid "Plot not useful for classification or poisson trees" msgstr "Wykres jest nieprzydatny dla drzew klasyfikacyjnych lub poissonowskich" # rpart/R/plot.rpart.s: 7 # stop("fit is not a tree, just a root") # rpart/R/text.rpart.s: 14 # stop("fit is not a tree, just a root") msgid "fit is not a tree, just a root" msgstr "dopasowanie nie jest drzewem tylko korzeniem" # rpart/R/plotcp.s: 12 # stop("'cptable' does not contain cross-validation results") msgid "'cptable' does not contain cross-validation results" msgstr "'cptable' nie zawiera wyników krzyżowej walidacji" # rpart/R/pred.rpart.s: 16 # stop("Tree has variables not found in new data") msgid "Tree has variables not found in new data" msgstr "Drzewo posiada zmienne nie znalezione w nowych danych" msgid "type 'class' is only appropriate for classification" msgstr "" # rpart/R/predict.rpart.s: 43 # stop("Invalid prediction for 'rpart' object") #, fuzzy msgid "Invalid prediction for \"rpart\" object" msgstr "Niepoprawna predykcja dla obiektu \"rpart\"" # rpart/R/printcp.s: 5 # stop ("'x' must be an 'rpart' object") #, fuzzy msgid "'x' must be an \"rpart\" object" msgstr "'x' musi być obiektem \"rpart\"" # rpart/R/residuals.rpart.s: 12 # stop("Do not know about this type of residual") #, fuzzy msgid "Invalid type of residual" msgstr "Niepoprawny typ reszty" msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" msgid "a 'formula' argument is required" msgstr "" # rpart/R/rpart.s: 25 # stop("Trees cannot handle interaction terms") msgid "Trees cannot handle interaction terms" msgstr "Drzewa nie mogą obsłużyć członów oddziaływania" msgid "negative weights not allowed" msgstr "" # rpart/R/rpart.s: 56 # stop("Invalid method") msgid "Invalid method" msgstr "Niepoprawna metoda" # rpart/R/rpart.s: 89 # stop(gettextf("Argument %s not matched", names(extraArgs)[indx==0]), # domain = NA) msgid "Argument %s not matched" msgstr "Argument %s nie został dopasowany" # rpart/R/rpart.s: 119 # stop("Wrong length for xval") # rpart/R/rpart.s: 121 # stop("Wrong length for xval") # rpart/R/xpred.rpart.s: 86 # stop("Wrong length for xval") # rpart/R/xpred.rpart.s: 88 # stop("Wrong length for xval") #, fuzzy msgid "Wrong length for 'xval'" msgstr "Niepoprawna długość dla 'xval'" # rpart/R/rpart.s: 130 # stop("Cost vector is the wrong length") msgid "Cost vector is the wrong length" msgstr "Wektor kosztów ma niepoprawną długość" # rpart/R/rpart.s: 131 # stop("Cost vector must be positive") msgid "Cost vector must be positive" msgstr "Wektor kosztów musi być dodatni" # rpart/R/rpart.s: 267 # stop("Initialization routine is missing the 'summary' function") msgid "Initialization routine is missing the 'summary' function" msgstr "Brak procedury inicjalizacji w funkcji 'summary'" msgid "no information available on parameters from previous call to plot()" msgstr "" # rpart/R/rpart.class.s: 3 # stop("No offset allowed in classification models") msgid "No offset allowed in classification models" msgstr "Brak dozwolonego przesunięcia w modelach klasyfikacyjnych" # rpart/R/rpart.class.s: 14 # stop("The parms list must have names") msgid "The parms list must have names" msgstr "Lista parametrów musi mieć nazwy" # rpart/R/rpart.class.s: 17 # stop(gettextf("'parms' component not matched: %s", # names(parms)[temp == 0L]), domain = NA) # rpart/R/rpart.exp.s: 123 # stop(gettextf("'parms' component not matched: %s", # names(parms)[indx == 0L]), domain = NA) # rpart/R/rpart.poisson.s: 21 # stop(gettextf("'parms' component not matched: %s", # names(parms)[indx == 0L]), domain = NA) msgid "'parms' component not matched: %s" msgstr "komponent 'parms' nie został dopasowany: %s" # rpart/R/rpart.class.s: 24 # stop("Priors must sum to 1") msgid "Priors must sum to 1" msgstr "Prawdopodobieństwa a priori muszą sumować się do 1" # rpart/R/rpart.class.s: 25 # stop("Priors must be >= 0") msgid "Priors must be >= 0" msgstr "Prawdopodobieństwa a priori muszą być >= 0" # rpart/R/rpart.class.s: 26 # stop("Wrong length for priors") msgid "Wrong length for priors" msgstr "Niepoprawna długość dla prawdopodobieństw a priori" # rpart/R/rpart.class.s: 33 # stop("Wrong length for loss matrix") msgid "Wrong length for loss matrix" msgstr "Niepoprawna długość macierzy strat" # rpart/R/rpart.class.s: 36 # stop("Loss matrix must have zero on diagonals") msgid "Loss matrix must have zero on diagonals" msgstr "Macierz strat musi mieć zera na diagonali" # rpart/R/rpart.class.s: 38 # stop("Loss matrix cannot have negative elements") msgid "Loss matrix cannot have negative elements" msgstr "Macierz strat nie może mieć ujemnych elementów" # rpart/R/rpart.class.s: 40 # stop("Loss matrix has a row of zeros") msgid "Loss matrix has a row of zeros" msgstr "Macierz strat ma wiersz zer" # rpart/R/rpart.class.s: 46 # stop("Invalid splitting rule") msgid "Invalid splitting rule" msgstr "Niepoprawna reguła rozdzielająca" # rpart/R/rpart.class.s: 50 # stop("Parameter argument must be a list") msgid "Parameter argument must be a list" msgstr "Argument parametru musi być listą" # rpart/R/rpart.control.s: 8 # warning("The value of 'maxcompete' supplied is < 0; the value 0 was used instead") msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "Wartość dostarczonego 'maxcompete' <0; zamiast niej użyto 0" # rpart/R/rpart.control.s: 12 # warning("The value of 'xval' supplied is < 0; the value 0 was used instead") msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "Dostarczona wartość 'xval' <0; zamiast niej użyto 0" # rpart/R/rpart.control.s: 15 # stop("Maximum depth is 30") msgid "Maximum depth is 30" msgstr "Maksymalna głębokość wynosi 30" # rpart/R/rpart.control.s: 16 # stop("Maximum depth must be at least 1") msgid "Maximum depth must be at least 1" msgstr "Maksymalna głębokość musi być równa przynajmniej 1" # rpart/R/rpart.control.s: 21 # warning("The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.") msgid "" "The value of 'usesurrogate' supplied was out of range, the default value of " "2 is used instead." msgstr "" "Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej " "domyślnej wartości 2." # rpart/R/rpart.control.s: 21 # warning("The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.") #, fuzzy msgid "" "The value of 'surrogatestyle' supplied was out of range, the default value " "of 0 is used instead." msgstr "" "Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej " "domyślnej wartości 2." # rpart/R/rpart.exp.s: 16 # stop("Response must be a 'survival' object - use the 'Surv()' function") msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "Zmienna zależna musi być obiektem 'survival' - użyj funkcji 'Surv()'" # rpart/R/rpart.exp.s: 22 # stop("Observation time must be > 0") # rpart/R/rpart.poisson.s: 11 # stop("Observation time must be > 0") msgid "Observation time must be > 0" msgstr "Czas obserwacji musi być > 0" # rpart/R/rpart.exp.s: 23 # stop("No deaths in data set") msgid "No deaths in data set" msgstr "Brak śmierci w zbiorze danych" # rpart/R/rpart.exp.s: 119 # stop("You must input a named list for parms") # rpart/R/rpart.poisson.s: 17 # stop("You must input a named list for parms") msgid "You must input a named list for parms" msgstr "Musisz wprowadzić nazwaną listę do parametrów" # rpart/R/rpart.exp.s: 129 # stop("Invalid error method for Poisson") # rpart/R/rpart.poisson.s: 27 # stop("Invalid error method for Poisson") msgid "Invalid error method for Poisson" msgstr "Niepoprawna metoda błędu dla Poissona" # rpart/R/rpart.exp.s: 134 # stop("Invalid shrinkage value") # rpart/R/rpart.poisson.s: 33 # stop("Invalid shrinkage value") msgid "Invalid shrinkage value" msgstr "Niepoprawna wartość zawężenia" # rpart/R/rpart.poisson.s: 5 # stop("response must be a 2 column matrix or a vector") msgid "response must be a 2 column matrix or a vector" msgstr "Zmienna zależna musi być 2-kolumnową macierzą lub wektorem" # rpart/R/rpart.poisson.s: 12 # stop("Number of events must be >= 0") msgid "Number of events must be >= 0" msgstr "Liczba zdarzeń musi być >= 0" # rpart/R/rpartcallback.s: 8 # stop("User written methods must have 3 functions") msgid "User written methods must have 3 functions" msgstr "Metody użytkownika muszą mieć 3 funkcje" # rpart/R/rpartcallback.s: 10 # stop("User written method does not contain an 'init' function") msgid "User written method does not contain an 'init' function" msgstr "Metoda użytkownika nie zawiera funkcji 'init'" # rpart/R/rpartcallback.s: 12 # stop("User written method does not contain a 'split' function") msgid "User written method does not contain a 'split' function" msgstr "Metod użytkownika nie zawiera funkcji 'split'" # rpart/R/rpartcallback.s: 14 # stop("User written method does not contain an 'eval' function") msgid "User written method does not contain an 'eval' function" msgstr "Metoda użytkownika nie zawiera funkcji 'eval'" # rpart/R/rpartcallback.s: 37 # stop("User 'eval' function returned invalid label") # rpart/R/rpartcallback.s: 69 # stop("User 'eval' function returned invalid label") msgid "User 'eval' function returned invalid label" msgstr "Funkcja użytkownika 'eval' zwróciła niepoprawną etykietę" # rpart/R/rpartcallback.s: 39 # stop("User 'eval' function returned invalid deviance") # rpart/R/rpartcallback.s: 71 # stop("User 'eval' function returned invalid deviance") msgid "User 'eval' function returned invalid deviance" msgstr "Funkcja użytkownika 'eval' zwróciła niepoprawne odchylenie" # rpart/R/rpartcallback.s: 50 # stop("Invalid return from categorical 'split' fcn") # rpart/R/rpartcallback.s: 83 # stop("Invalid return from categorical 'split' fcn") #, fuzzy msgid "Invalid return from categorical 'split' function" msgstr "Niepoprawny wynik z kategorycznej funkcji 'split'" # rpart/R/rpartcallback.s: 57 # stop("User 'split' function returned invalid goodness") # rpart/R/rpartcallback.s: 90 # stop("User 'split' function returned invalid goodness") msgid "User 'split' function returned invalid goodness" msgstr "Funkcja użytkownika 'split' zwróciła niepoprawną dobroć" # rpart/R/rpartcallback.s: 59 # stop("User 'split' function returned invalid direction") # rpart/R/rpartcallback.s: 92 # stop("User 'split' function returned invalid direction") msgid "User 'split' function returned invalid direction" msgstr "Funkcja użytkownika 'split' zwróciła niepoprawny kierunek" msgid "may not be applicable for this method" msgstr "" # rpart/R/plot.rpart.s: 4 # stop("Not an 'rpart' object") # rpart/R/snip.rpart.s: 6 # stop("Not an 'rpart' object") #, fuzzy msgid "Not an \"rpart\" object" msgstr "To nie jest obiekt 'rpart'" # rpart/R/snip.rpart.s: 20 # warning(gettext("Nodes %s are not in this tree", toss[toss.idx==0L]), # domain = NA) msgid "Nodes %s are not in this tree" msgstr "Węzły %s nie są w tym drzewie" # rpart/R/text.rpart.s: 24 # warning("argument 'label' is currently unused") #, fuzzy msgid "argument 'label' is no longer used" msgstr "argument 'label' jest aktualnie nieużyty" # rpart/R/xpred.rpart.s: 6 # stop("Invalid fit object") msgid "Invalid fit object" msgstr "niepoprawny obiekt dopasowania" # rpart/R/zzz.R: 25 # warning(gettextf("supplied nodes %s are not in this tree", # paste(bad, collapse = ",")), domain = NA) msgid "supplied nodes %s are not in this tree" msgstr "dostarczone węzły %s nie są w tym drzewie" # rpart/R/zzz.R: 29 # warning(gettextf("supplied nodes %s are leaves", # paste(good[leaves], collapse = ",")), domain = NA) msgid "supplied nodes %s are leaves" msgstr "dostarczone węzły %s są liśćmi" # rpart/R/labels.rpart.s: 68 # warning("more than 52 levels in a predicting factor, truncated for printout") #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr "" #~ "więcej niż 52 poziomów w czynniku przewidującym, przycięto na potrzeby " #~ "wyświetlenia" # rpart/R/rpconvert.s: 8 # stop("x does not appear to be an 'rpart' object") #, fuzzy #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr "'x' nie wygląda na obiekt 'rpart'" # rpart/R/rpconvert.s: 12 # warning("'x' not converted") #~ msgid "'x' not converted" #~ msgstr "'x' nie został przekształcony" # rpart/R/printcp.s: 5 # stop ("'x' must be an 'rpart' object") #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr "'x' musi być obiektem \"rpart\"" # rpart/R/path.rpart.s: 6 # stop("Not legitimate tree") # rpart/R/predict.rpart.s: 8 # stop("Not legitimate tree") #~ msgid "Not legitimate tree" #~ msgstr "Niepoprawne drzewo" # rpart/R/rpart.control.s: 25 # warning("The value of surrogatestyle supplied was out of range,", # "the default value of 0 is used instead.") #~ msgid "The value of surrogatestyle supplied was out of range," #~ msgstr "Dostarczona wartość 'surrogatestyle' była poza zakesem," # rpart/R/rpart.control.s: 25 # warning("The value of surrogatestyle supplied was out of range,", # "the default value of 0 is used instead.") #~ msgid "the default value of 0 is used instead." #~ msgstr "użyto zamiast niej domyślnej wartości 0." # rpart/R/rsq.rpart.s: 8 # stop("Not legitimate rpart") # rpart/R/text.rpart.s: 11 # stop("Not legitimate rpart") #~ msgid "Not legitimate rpart" #~ msgstr "Niepoprawny obiekt \"rpart\"" rpart/po/R-ko.po0000644000176000001440000001650612117517037013234 0ustar ripleyusers# Korean translation for R rpart package # Recommended/rpart/po/R-ko.po # Maintainer: Brian Ripley # Copyright (C) 1995-2013 The R Core Team # This file is distributed under the same license as the R rpart package. # R Development Translation Team - Korean # Chel Hee Lee , 2013. # Chel Hee Lee , 2013. # msgid "" msgstr "" "Project-Id-Version: rpart 4.1-0\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2013-03-11 13:54-0600\n" "Last-Translator: Chel Hee Lee \n" "Language-Team: R Development Translation Teams (Korean) \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Poedit-Language: Korean\n" "X-Poedit-Country: KOREA, REPUBLIC OF\n" "X-Poedit-SourceCharset: utf-8\n" msgid "'x' must be a numeric vector" msgstr "'x'는 반드시 수치형 벡터이어야 합니다" msgid "Not a legitimate \"rpart\" object" msgstr "올바른 \"rpart\" 객체가 아닙니다" msgid "Plot not useful for classification or poisson trees" msgstr "클래시피케이션 또는 포이송 트리에 유용하지 않은 플랏입니다" msgid "fit is not a tree, just a root" msgstr "적합은 트리가 아니라 루트일뿐입니다" msgid "'cptable' does not contain cross-validation results" msgstr "'cptable'은 크로스-밸리데이션 결과를 포함하고 있지 않습니다" msgid "Tree has variables not found in new data" msgstr "" msgid "type 'class' is only appropriate for classification" msgstr "타입 'class'는 오로지 클래시피케이션에서만 적절합니다" msgid "Invalid prediction for \"rpart\" object" msgstr "" msgid "'x' must be an \"rpart\" object" msgstr "'x'는 반드시 \"rpart\" 객체이어야 합니다" msgid "Invalid type of residual" msgstr "유용하지 않은 잔차의 타입입니다" msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" msgid "a 'formula' argument is required" msgstr "'formula' 인자를 필요로 합니다" msgid "Trees cannot handle interaction terms" msgstr "" msgid "negative weights not allowed" msgstr "음의 값을 가중치들은 허용되지 않습니다" msgid "Invalid method" msgstr "부적절한 메소드입니다" msgid "Argument %s not matched" msgstr "일치하지 않는 인자 %s입니다" msgid "Wrong length for 'xval'" msgstr "'xval'의 길이가 올바르지 않습니다" msgid "Cost vector is the wrong length" msgstr "" msgid "Cost vector must be positive" msgstr "Cost vector는 반드시 양수이어야 합니다" msgid "Initialization routine is missing the 'summary' function" msgstr "" msgid "no information available on parameters from previous call to plot()" msgstr "" msgid "No offset allowed in classification models" msgstr "클래시피케이션 모델들에 허용된 오프셋이 없습니다" msgid "The parms list must have names" msgstr "" msgid "'parms' component not matched: %s" msgstr "" msgid "Priors must sum to 1" msgstr "Priors의 합은 반드시 1이어야 합니다" msgid "Priors must be >= 0" msgstr "Priors는 반드시 0 보다 크거나 같아야 합니다" msgid "Wrong length for priors" msgstr "" msgid "Wrong length for loss matrix" msgstr "" msgid "Loss matrix must have zero on diagonals" msgstr "Loss matrix의 대각요소들은 반드시 0이어야 합니다" msgid "Loss matrix cannot have negative elements" msgstr "Loss matrix의 구성요소는 음의 값을 가질 수 없습니다" msgid "Loss matrix has a row of zeros" msgstr "Loss matrix는 0으로 이루어진 행을 가지고 있어야 합니다" msgid "Invalid splitting rule" msgstr "유효하지 않은 splitting rule입니다" msgid "Parameter argument must be a list" msgstr "파라미터 인수는 반드시 리스트이어야 합니다" msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "제공된 'maxcompete'의 값은 0 보다 작으므로 0이 대신 사용되었습니다" msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "제공된 'xval'의 값은 0 보다 작으므로 0이 대신 사용되었습니다" msgid "Maximum depth is 30" msgstr "" msgid "Maximum depth must be at least 1" msgstr "" msgid "" "The value of 'usesurrogate' supplied was out of range, the default value of " "2 is used instead." msgstr "" "제공된 'usesurrogate'의 값은 범위 밖에 있었기 때문에, 대신 기본값" "2 가 사용되었습니다." msgid "" "The value of 'surrogatestyle' supplied was out of range, the default value " "of 0 is used instead." msgstr "" "제공된 'surrogatestyle'의 값은 범위 밖에 있었기 때문에, 대신 기본값" "0 이 사용되었습니다." msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "Response는 반드시 'survival' 객체이어야 하므로, 'Surv()'함수를 사용하세요" msgid "Observation time must be > 0" msgstr "관찰시간은 반드시 0 보다 커야 합니다" msgid "No deaths in data set" msgstr "" msgid "You must input a named list for parms" msgstr "" msgid "Invalid error method for Poisson" msgstr "Poisson에 유효하지 않은 에러 메소드입니다" msgid "Invalid shrinkage value" msgstr "" msgid "response must be a 2 column matrix or a vector" msgstr "response는 반드시 2개의 열을 가진 행렬 또는 벡터이어야 합니다" msgid "Number of events must be >= 0" msgstr "이벤트의 개수는 반드시 0보다 크거나 같아야 합니다" msgid "User written methods must have 3 functions" msgstr "사용자 작성 메소드는 반드시 3개의 함수들을 가지고 있어야 합니다" msgid "User written method does not contain an 'init' function" msgstr "사용자 작성 메소드는 'init' 함수를 포함하고 있지 않습니다" msgid "User written method does not contain a 'split' function" msgstr "사용자 작성 메소드는 'split' 함수를 포함하고 있지 않습니다" msgid "User written method does not contain an 'eval' function" msgstr "사용자 작성 메소드는 'eval'함수를 포함하고 있지 않습니다" msgid "User 'eval' function returned invalid label" msgstr "사용자 'eval' 함수는 유효하지 않은 라벨을 반환했습니다" msgid "User 'eval' function returned invalid deviance" msgstr "사용자 'eval' 함수는 유효하지 않은 deviance를 반환했습니다" msgid "Invalid return from categorical 'split' function" msgstr "" msgid "User 'split' function returned invalid goodness" msgstr "사용자 'spilt' 함수는 유효하지 않은 goodness를 반환했습니다" msgid "User 'split' function returned invalid direction" msgstr "사용자 'split' 함수는 유효하지 않은 direction을 반환했습니다" msgid "may not be applicable for this method" msgstr "이 메소드에는 아마도 적용할 수 없습니다" msgid "Not an \"rpart\" object" msgstr "\"rpart\" 객체가 아닙니다" msgid "Nodes %s are not in this tree" msgstr "노드 %s는 이 트리안에 없습니다" msgid "argument 'label' is no longer used" msgstr "인자 'label'은 더 이상 사용되지 않습니다" msgid "Invalid fit object" msgstr "" msgid "supplied nodes %s are not in this tree" msgstr "제공된 노드 %s는 이 트리 안에 없습니다" msgid "supplied nodes %s are leaves" msgstr "" rpart/po/R-ru.po0000644000176000001440000002045212122140200013220 0ustar ripleyusers# Russian translations for R # R # # Copyright (C) 2008 The R Foundation # This file is distributed under the same license as the R package. # Alexey Shipunov 2008 # msgid "" msgstr "" "Project-Id-Version: R 2.7.0\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2013-03-19 14:46-0600\n" "Last-Translator: Alexey Shipunov \n" "Language-Team: Russian\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=KOI8-R\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Russian\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "'x' must be a numeric vector" msgstr "'x' " msgid "Not a legitimate \"rpart\" object" msgstr " \"rpart\" " msgid "Plot not useful for classification or poisson trees" msgstr " " msgid "fit is not a tree, just a root" msgstr " -- , " msgid "'cptable' does not contain cross-validation results" msgstr "'cptable' " msgid "Tree has variables not found in new data" msgstr " , " msgid "type 'class' is only appropriate for classification" msgstr " 'class' " msgid "Invalid prediction for \"rpart\" object" msgstr " \"rpart\" " msgid "'x' must be an \"rpart\" object" msgstr "'x' \"rpart\"" msgid "Invalid type of residual" msgstr " " msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr " \"rpart\" " msgid "a 'formula' argument is required" msgstr " " msgid "Trees cannot handle interaction terms" msgstr " " msgid "negative weights not allowed" msgstr " " msgid "Invalid method" msgstr " " msgid "Argument %s not matched" msgstr " %s " msgid "Wrong length for 'xval'" msgstr " 'xval'" msgid "Cost vector is the wrong length" msgstr "Cost- " msgid "Cost vector must be positive" msgstr "Cost- " msgid "Initialization routine is missing the 'summary' function" msgstr " 'summary' " msgid "no information available on parameters from previous call to plot()" msgstr " plot()" msgid "No offset allowed in classification models" msgstr " " msgid "The parms list must have names" msgstr " " msgid "'parms' component not matched: %s" msgstr "'parms'- : %s" msgid "Priors must sum to 1" msgstr " 1" msgid "Priors must be >= 0" msgstr " >= 0" msgid "Wrong length for priors" msgstr " " msgid "Wrong length for loss matrix" msgstr " " msgid "Loss matrix must have zero on diagonals" msgstr " " msgid "Loss matrix cannot have negative elements" msgstr " " msgid "Loss matrix has a row of zeros" msgstr " " msgid "Invalid splitting rule" msgstr " " msgid "Parameter argument must be a list" msgstr " " msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr " 'maxcompete' < 0; 0" msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr " 'xval' < 0; 0" msgid "Maximum depth is 30" msgstr " -- 30" msgid "Maximum depth must be at least 1" msgstr " 1" msgid "The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead." msgstr " usesurrogate , 2 " msgid "The value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead." msgstr " usesurrogate , 0 " msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr " survival- -- 'Surv()'" msgid "Observation time must be > 0" msgstr " > 0" msgid "No deaths in data set" msgstr " " msgid "You must input a named list for parms" msgstr " parms" msgid "Invalid error method for Poisson" msgstr " Poisson" msgid "Invalid shrinkage value" msgstr " " msgid "response must be a 2 column matrix or a vector" msgstr " 2- " msgid "Number of events must be >= 0" msgstr " >= 0" msgid "User written methods must have 3 functions" msgstr " 3 " msgid "User written method does not contain an 'init' function" msgstr " 'init'" msgid "User written method does not contain a 'split' function" msgstr " 'split'" msgid "User written method does not contain an 'eval' function" msgstr " 'eval'" msgid "User 'eval' function returned invalid label" msgstr " 'eval' " msgid "User 'eval' function returned invalid deviance" msgstr " 'eval' " msgid "Invalid return from categorical 'split' function" msgstr " categorical 'split" msgid "User 'split' function returned invalid goodness" msgstr " 'split' " msgid "User 'split' function returned invalid direction" msgstr " 'split' " msgid "may not be applicable for this method" msgstr " " msgid "Not an \"rpart\" object" msgstr " \"rpart\"" msgid "Nodes %s are not in this tree" msgstr " %s " msgid "argument 'label' is no longer used" msgstr " 'label' " msgid "Invalid fit object" msgstr " " msgid "supplied nodes %s are not in this tree" msgstr " %s " msgid "supplied nodes %s are leaves" msgstr " %s " #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr " 52 , " #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr ", x -- \"rpart\"-" #~ msgid "'x' not converted" #~ msgstr "'x' " #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr " rpart" #, fuzzy #~ msgid "'parms' component not matched:" #~ msgstr "'parms'- :" #, fuzzy #~ msgid "Not a legitimate tree" #~ msgstr " " #, fuzzy #~ msgid "Not a legitimate 'rpart' object" #~ msgstr " rpart-" #~ msgid "The value of surrogatestyle supplied was out of range," #~ msgstr " surrogatestyle ," #~ msgid "the default value of 0 is used instead." #~ msgstr " 0 " #~ msgid "Not legitimate rpart" #~ msgstr " rpart" #~ msgid "Must be an rpart x" #~ msgstr " rpart x" #~ msgid "the default value of 2 is used instead." #~ msgstr " 2 " #~ msgid "Argument" #~ msgstr "" #~ msgid "Nodes" #~ msgstr "" #~ msgid "," #~ msgstr "," #~ msgid "are leaves" #~ msgstr "" #~ msgid "Observation time must be >0" #~ msgstr " > 0" rpart/po/R-rpart.pot0000644000176000001440000000770212122262120014117 0ustar ripleyusersmsgid "" msgstr "" "Project-Id-Version: rpart 4.1-1\n" "POT-Creation-Date: 2013-03-20 07:25\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" msgid "'x' must be a numeric vector" msgstr "" msgid "Not a legitimate \"rpart\" object" msgstr "" msgid "Plot not useful for classification or poisson trees" msgstr "" msgid "fit is not a tree, just a root" msgstr "" msgid "'cptable' does not contain cross-validation results" msgstr "" msgid "Tree has variables not found in new data" msgstr "" msgid "type 'class' is only appropriate for classification" msgstr "" msgid "Invalid prediction for \"rpart\" object" msgstr "" msgid "'x' must be an \"rpart\" object" msgstr "" msgid "Invalid type of residual" msgstr "" msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" msgid "a 'formula' argument is required" msgstr "" msgid "Trees cannot handle interaction terms" msgstr "" msgid "negative weights not allowed" msgstr "" msgid "Invalid method" msgstr "" msgid "Argument %s not matched" msgstr "" msgid "Wrong length for 'xval'" msgstr "" msgid "Cost vector is the wrong length" msgstr "" msgid "Cost vector must be positive" msgstr "" msgid "Initialization routine is missing the 'summary' function" msgstr "" msgid "no information available on parameters from previous call to plot()" msgstr "" msgid "No offset allowed in classification models" msgstr "" msgid "The parms list must have names" msgstr "" msgid "'parms' component not matched: %s" msgstr "" msgid "Priors must sum to 1" msgstr "" msgid "Priors must be >= 0" msgstr "" msgid "Wrong length for priors" msgstr "" msgid "Wrong length for loss matrix" msgstr "" msgid "Loss matrix must have zero on diagonals" msgstr "" msgid "Loss matrix cannot have negative elements" msgstr "" msgid "Loss matrix has a row of zeros" msgstr "" msgid "Invalid splitting rule" msgstr "" msgid "Parameter argument must be a list" msgstr "" msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "" msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "" msgid "Maximum depth is 30" msgstr "" msgid "Maximum depth must be at least 1" msgstr "" msgid "The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead." msgstr "" msgid "The value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead." msgstr "" msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "" msgid "Observation time must be > 0" msgstr "" msgid "No deaths in data set" msgstr "" msgid "You must input a named list for parms" msgstr "" msgid "Invalid error method for Poisson" msgstr "" msgid "Invalid shrinkage value" msgstr "" msgid "response must be a 2 column matrix or a vector" msgstr "" msgid "Number of events must be >= 0" msgstr "" msgid "User written methods must have 3 functions" msgstr "" msgid "User written method does not contain an 'init' function" msgstr "" msgid "User written method does not contain a 'split' function" msgstr "" msgid "User written method does not contain an 'eval' function" msgstr "" msgid "User 'eval' function returned invalid label" msgstr "" msgid "User 'eval' function returned invalid deviance" msgstr "" msgid "Invalid return from categorical 'split' function" msgstr "" msgid "User 'split' function returned invalid goodness" msgstr "" msgid "User 'split' function returned invalid direction" msgstr "" msgid "may not be applicable for this method" msgstr "" msgid "Not an \"rpart\" object" msgstr "" msgid "Nodes %s are not in this tree" msgstr "" msgid "argument 'label' is no longer used" msgstr "" msgid "Invalid fit object" msgstr "" msgid "supplied nodes %s are not in this tree" msgstr "" msgid "supplied nodes %s are leaves" msgstr "" rpart/inst/0000755000176000001440000000000012270777377012432 5ustar ripleyusersrpart/inst/po/0000755000176000001440000000000012121561332013021 5ustar ripleyusersrpart/inst/po/pl/0000755000176000001440000000000012003313337013433 5ustar ripleyusersrpart/inst/po/pl/LC_MESSAGES/0000755000176000001440000000000012003313337015220 5ustar ripleyusersrpart/inst/po/pl/LC_MESSAGES/rpart.mo0000644000176000001440000000233312122262120016701 0ustar ripleyusers l '9M`"z-'D%^+*  'nback' not found'wback' not found'xback' not found'yback' not foundInvalid event countInvalid time pointreturn value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!Project-Id-Version: rpart 3.1-53 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: Last-Translator: Łukasz Daniel Language-Team: Łukasz Daniel Language: pl_PL MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit na-Revision-Date: 2012-05-29 07:55+0100 Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2) X-Poedit-SourceCharset: iso-8859-1 nie znaleziono 'nback'nie znaleziono 'wback'nie znaleziono 'xback'nie znaleziono 'yback'błędne zliczenia zdarzeniaNiepoprawny punkt czasowyzwrócona wartość nie jest wektoremzwrócona wartość ma błędną długośćwyrażenie 'expr1' nie zwróciło wektora!rpart/inst/po/pl/LC_MESSAGES/R-rpart.mo0000644000176000001440000001316212122262120017102 0ustar ripleyusers1C,839!m8 :[n})' 1R*h!3BV@kG^Ar(%. +2 0^ / 7 7 7/ *g   %  . ; &X ' 3 , ")*L!w0'!$"F1i*"8>:] #F-a6G">1dp65 5B=x=<<1.n..*%&6L1,>#!,E '  *()&+.#  !,%-/10 "$'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vectorArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid shrinkage valueInvalid splitting ruleLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for loss matrixWrong length for priorsYou must input a named list for parmsfit is not a tree, just a rootresponse must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treeProject-Id-Version: rpart 3.1-53 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: Last-Translator: Łukasz Daniel Language-Team: Łukasz Daniel Language: pl_PL MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit na-Revision-Date: 2012-05-29 07:55+0100 Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Poedit-SourceCharset: iso-8859-1 X-Generator: Poedit 1.5.3 'cptable' nie zawiera wyników krzyżowej walidacjikomponent 'parms' nie został dopasowany: %s'x' musi być wektorem liczbowymArgument %s nie został dopasowanyWektor kosztów ma niepoprawną długośćWektor kosztów musi być dodatniBrak procedury inicjalizacji w funkcji 'summary'Niepoprawna metoda błędu dla Poissonaniepoprawny obiekt dopasowaniaNiepoprawna metodaNiepoprawna wartość zawężeniaNiepoprawna reguła rozdzielającaMacierz strat nie może mieć ujemnych elementówMacierz strat ma wiersz zerMacierz strat musi mieć zera na diagonaliMaksymalna głębokość wynosi 30Maksymalna głębokość musi być równa przynajmniej 1Brak śmierci w zbiorze danychBrak dozwolonego przesunięcia w modelach klasyfikacyjnychWęzły %s nie są w tym drzewieLiczba zdarzeń musi być >= 0Czas obserwacji musi być > 0Argument parametru musi być listąWykres jest nieprzydatny dla drzew klasyfikacyjnych lub poissonowskichPrawdopodobieństwa a priori muszą być >= 0Prawdopodobieństwa a priori muszą sumować się do 1Zmienna zależna musi być obiektem 'survival' - użyj funkcji 'Surv()'Lista parametrów musi mieć nazwyWartość dostarczonego 'maxcompete' <0; zamiast niej użyto 0Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej domyślnej wartości 2.Dostarczona wartość 'xval' <0; zamiast niej użyto 0Drzewo posiada zmienne nie znalezione w nowych danychDrzewa nie mogą obsłużyć członów oddziaływaniaFunkcja użytkownika 'eval' zwróciła niepoprawne odchylenieFunkcja użytkownika 'eval' zwróciła niepoprawną etykietęFunkcja użytkownika 'split' zwróciła niepoprawny kierunekFunkcja użytkownika 'split' zwróciła niepoprawną dobroćMetod użytkownika nie zawiera funkcji 'split'Metoda użytkownika nie zawiera funkcji 'eval'Metoda użytkownika nie zawiera funkcji 'init'Metody użytkownika muszą mieć 3 funkcjeNiepoprawna długość macierzy stratNiepoprawna długość dla prawdopodobieństw a prioriMusisz wprowadzić nazwaną listę do parametrówdopasowanie nie jest drzewem tylko korzeniemZmienna zależna musi być 2-kolumnową macierzą lub wektoremdostarczone węzły %s są liśćmidostarczone węzły %s nie są w tym drzewierpart/inst/po/en@quot/0000755000176000001440000000000012003313337014433 5ustar ripleyusersrpart/inst/po/en@quot/LC_MESSAGES/0000755000176000001440000000000012003313337016220 5ustar ripleyusersrpart/inst/po/en@quot/LC_MESSAGES/rpart.mo0000644000176000001440000000231112122262120017675 0ustar ripleyusers 01CUgy"-  9WG 1P"j-     'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: rpart 4.1-1 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2013-03-20 07:25+0000 Last-Translator: Automatically generated Language-Team: none Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); ‘nback’ not found‘wback’ not found‘xback’ not found‘yback’ not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for ‘method’return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorrpart/inst/po/en@quot/LC_MESSAGES/R-rpart.mo0000644000176000001440000001522412122262120020103 0ustar ripleyusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 6A7x% !1Q<n %4Iax)' 7*Mx= (!E3gH K,dxbE@(%2/483m;;;*U%$&C%bC.&57\><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: rpart 4.1-1 POT-Creation-Date: 2013-03-20 07:25 PO-Revision-Date: 2013-03-20 07:25 Last-Translator: Automatically generated Language-Team: none MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: en Plural-Forms: nplurals=2; plural=(n != 1); ‘cptable’ does not contain cross-validation results‘parms’ component not matched: %s‘x’ must be a numeric vector‘x’ must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the ‘summary’ functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical ‘split’ functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a ‘survival’ object - use the ‘Surv()’ functionThe parms list must have namesThe value of ‘maxcompete’ supplied is < 0; the value 0 was used insteadThe value of ‘surrogatestyle’ supplied was out of range, the default value of 0 is used instead.The value of ‘usesurrogate’ supplied was out of range, the default value of 2 is used instead.The value of ‘xval’ supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser ‘eval’ function returned invalid devianceUser ‘eval’ function returned invalid labelUser ‘split’ function returned invalid directionUser ‘split’ function returned invalid goodnessUser written method does not contain a ‘split’ functionUser written method does not contain an ‘eval’ functionUser written method does not contain an ‘init’ functionUser written methods must have 3 functionsWrong length for ‘xval’Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa ‘formula’ argument is requiredargument ‘label’ is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype ‘class’ is only appropriate for classificationrpart/inst/po/ko/0000755000176000001440000000000012121561332013432 5ustar ripleyusersrpart/inst/po/ko/LC_MESSAGES/0000755000176000001440000000000012121561333015220 5ustar ripleyusersrpart/inst/po/ko/LC_MESSAGES/rpart.mo0000644000176000001440000000306312122262120016700 0ustar ripleyusers 01CUgy"-  9G"<"_""'0-!,O'|4:    'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: rpart 4.1-0 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2013-03-11 13:53-0600 Last-Translator: Chel Hee Lee Language-Team: R Development Translation Teams (Korean) Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Poedit-Language: Korean X-Poedit-Country: KOREA, REPUBLIC OF X-Poedit-SourceCharset: utf-8 'nback'을 찾을 수 없습니다'wback'을 찾을 수 없습니다'xback'을 찾을 수 없습니다'yback'를 찾을 수 없습니다유효하지 않은 error rule입니다유효하지 않은 이벤트 카운트입니다유효하지 않은 타임 포인트입니다'method'에 유효하지 않은 값입니다벡터가 아닌 값을 반환합니다반환된 값의 길이가 올바르지 않습니다표현식 expr1은 벡터를 돌려주지 않았습니다!알 수 없는 에러입니다rpart/inst/po/ko/LC_MESSAGES/R-rpart.mo0000644000176000001440000001402012122262120017072 0ustar ripleyusers-=32Ph )'.*V!32fz@G`^yA.+I0u/77 7F *~  "  %$ J .g & 3  Q 4 2Q & 2 8 +7-cDH@F`*(F3a=T:(/c]XtJrR2MKONoPNO^Z- '76_387S;5J  (-%),!"* +#  & $''cptable' does not contain cross-validation results'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector must be positiveInvalid error method for PoissonInvalid methodInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'a 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedresponse must be a 2 column matrix or a vectorsupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: rpart 4.1-0 POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2013-03-11 13:54-0600 Last-Translator: Chel Hee Lee Language-Team: R Development Translation Teams (Korean) Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Poedit-Language: Korean X-Poedit-Country: KOREA, REPUBLIC OF X-Poedit-SourceCharset: utf-8 'cptable'은 크로스-밸리데이션 결과를 포함하고 있지 않습니다'x'는 반드시 수치형 벡터이어야 합니다'x'는 반드시 "rpart" 객체이어야 합니다일치하지 않는 인자 %s입니다Cost vector는 반드시 양수이어야 합니다Poisson에 유효하지 않은 에러 메소드입니다부적절한 메소드입니다유효하지 않은 splitting rule입니다유용하지 않은 잔차의 타입입니다Loss matrix의 구성요소는 음의 값을 가질 수 없습니다Loss matrix는 0으로 이루어진 행을 가지고 있어야 합니다Loss matrix의 대각요소들은 반드시 0이어야 합니다클래시피케이션 모델들에 허용된 오프셋이 없습니다노드 %s는 이 트리안에 없습니다올바른 "rpart" 객체가 아닙니다"rpart" 객체가 아닙니다이벤트의 개수는 반드시 0보다 크거나 같아야 합니다관찰시간은 반드시 0 보다 커야 합니다파라미터 인수는 반드시 리스트이어야 합니다클래시피케이션 또는 포이송 트리에 유용하지 않은 플랏입니다Priors는 반드시 0 보다 크거나 같아야 합니다Priors의 합은 반드시 1이어야 합니다Response는 반드시 'survival' 객체이어야 하므로, 'Surv()'함수를 사용하세요제공된 'maxcompete'의 값은 0 보다 작으므로 0이 대신 사용되었습니다제공된 'surrogatestyle'의 값은 범위 밖에 있었기 때문에, 대신 기본값0 이 사용되었습니다.제공된 'usesurrogate'의 값은 범위 밖에 있었기 때문에, 대신 기본값2 가 사용되었습니다.제공된 'xval'의 값은 0 보다 작으므로 0이 대신 사용되었습니다사용자 'eval' 함수는 유효하지 않은 deviance를 반환했습니다사용자 'eval' 함수는 유효하지 않은 라벨을 반환했습니다사용자 'split' 함수는 유효하지 않은 direction을 반환했습니다사용자 'spilt' 함수는 유효하지 않은 goodness를 반환했습니다사용자 작성 메소드는 'split' 함수를 포함하고 있지 않습니다사용자 작성 메소드는 'eval'함수를 포함하고 있지 않습니다사용자 작성 메소드는 'init' 함수를 포함하고 있지 않습니다사용자 작성 메소드는 반드시 3개의 함수들을 가지고 있어야 합니다'xval'의 길이가 올바르지 않습니다'formula' 인자를 필요로 합니다인자 'label'은 더 이상 사용되지 않습니다적합은 트리가 아니라 루트일뿐입니다이 메소드에는 아마도 적용할 수 없습니다음의 값을 가중치들은 허용되지 않습니다response는 반드시 2개의 열을 가진 행렬 또는 벡터이어야 합니다제공된 노드 %s는 이 트리 안에 없습니다타입 'class'는 오로지 클래시피케이션에서만 적절합니다rpart/inst/po/fr/0000755000176000001440000000000012003313337013427 5ustar ripleyusersrpart/inst/po/fr/LC_MESSAGES/0000755000176000001440000000000012003313337015214 5ustar ripleyusersrpart/inst/po/fr/LC_MESSAGES/rpart.mo0000644000176000001440000000214412122262120016675 0ustar ripleyusers l '9M`"z-Uh{#',03  'nback' not found'wback' not found'xback' not found'yback' not foundInvalid event countInvalid time pointreturn value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!Project-Id-Version: rpart 3.1-24 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2005-12-07 02:43+0100 Last-Translator: Philippe Grosjean Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); 'nback' non trouv'wback' non trouv'xback' non trouv'yback' non trouvDnombrement d'vnements incorrectPoint temporel incorrectla valeur renvoye n'est pas un vecteurla valeur renvoye n'a pas la bonne longueurl'expression 'expr1' n'a pas renvoy un vecteur!rpart/inst/po/fr/LC_MESSAGES/R-rpart.mo0000644000176000001440000001476712122262120017112 0ustar ripleyusers9O3!?\z8 )<%K0q)'3[ o*%C!`3@ G? ` ^ AG ( % . + 03 /d 7 7 7 *< g   %  . ( &E l ="["~/$ ?/*o+'*5`4y-7 +5!a@&&%2/X*I!H>%PeedJC@Y=CDMa<;;(5d'!/12;d'.#$9' %! *5"&) 40, 71( -.268/ 3+'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsfit is not a tree, just a rootresponse must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treeProject-Id-Version: rpart 3.1-24 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2012-10-03 14:18+0100 Last-Translator: Philippe Grosjean Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Poedit 1.5.3 'cptable' ne contients aucuns rsultats de validation croiseComposants de 'parms' inconnus: %s'x' doit tre un vecteur numrique'x' doit tre un objet "rpart"L'argument %s est inconnule vecteur de cot n'est pas de la bonne tailleLe vecteur de cot doit tre positifLa routine d'initialisation ne trouve pas la fonction 'summary'Mthode d'erreur incorrecte pour 'Poisson'Objet 'fit' incorrectMethode incorrectePrdiction incorrecte pour un objet "rpart"Retour incorrect de la fonction 'split'Valeur 'shrinkage' incorrecteRgle de sparation des groupes incorrecteType de rsidus inconnusLa 'loss matrix' ne peut avoir des lments ngatifsLa 'loss matrix' a une ligne remplie de zrosLa 'loss matrix' doit avoir des zros dans sa diagonaleLa profondeur maximale est de 30La profondeur maximale doit tre au moins 1Aucun mort dans le jeu de donnesAucun dcalage n'est autoris pour les modles de classificationLes noeuds %s ne sont pas dans l'arbreCeci n'est pas un objet "rpart" valideCeci n'est pas un objet "rpart"Le nombre d'vnements doit tre >= 0Le temps associ aux observations doit tre > 0L'argument 'parameter' doit tre une listeLe graphe n'est pas utile pour des arbres de classification ou de poissonles 'priors' doivent tre >= 0la somme des 'priors' doit tre 1'Response' doit tre un objet 'survival' - utilisez la fonction 'Surv()'La liste des 'parms' doit tre nommeLa valeur de 'maxcompete' fournie est < 0 ; La valeur 0 sera utilise la placeLa valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 0 est utilise la place.La valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 2 est utilise la place.La valeur de 'xval' fournie est < 0 ; La valeur 0 sera utilise la placeL'arbre a des variables introuvables dans le nouveau jeu de donnesLes arbres ne peuvent prendre en compte les termes d'interactionLa fonction 'eval' personnalise a renvoy un cart incorrectLa fonction 'eval' personnalise a renvoy une tiquette incorrecteLa fonction 'split' personnalise a renvoy une direction incorrecteLa fonction 'split' personnalise a renvoy une qualit (goodness) incorrecteLa mthode personnalise ne contient pas de fonction 'split'La mthode personnalise ne contient pas de fonction 'eval'La mthode personnalise ne contient pas de fonction 'init'Les mthodes personnalises doivent avoir 3 fonctionsLongueur incorrecte de 'xval'Longueur inconnue pour la 'loss matrix'Longueur incorrecte pour 'priors'Vous devez entrer une liste nomme pour 'parms'l'ajustement n'est pas un arbre, juste une racine'response' doit tre un vecteur ou une matrice 2 colonnesles noeuds fournis %s sont des feuillesles noeuds fournis %s ne sont pas dans l'arbrerpart/inst/po/de/0000755000176000001440000000000012003313337013410 5ustar ripleyusersrpart/inst/po/de/LC_MESSAGES/0000755000176000001440000000000012003313337015175 5ustar ripleyusersrpart/inst/po/de/LC_MESSAGES/rpart.mo0000644000176000001440000000213112122262120016652 0ustar ripleyusers l '9M`"z-`w -+  'nback' not found'wback' not found'xback' not found'yback' not foundInvalid event countInvalid time pointreturn value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!Project-Id-Version: R-2.15.2 / rpart 3.1-55 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2012-10-10 22:21+0200 Last-Translator: Chris Leick Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); 'nback' nicht gefunden'wback' nicht gefunden'xback' nicht gefunden'yback' nicht gefundenungültige Ereignisanzahlungültiger ZeitpunktRückgabewert ist kein VektorRückgabewert hat falsche LängeDer Ausdruck expr1 gab keinen Vektor zurück!rpart/inst/po/de/LC_MESSAGES/R-rpart.mo0000644000176000001440000001471712122262120017066 0ustar ripleyusers:O3!-Ol8 9L%[0)$'Ck *5S!p3@0 GO ` ^ AW ( % . + 0C /t 7 7 7 *L w   % "  ., [ &x  5A"w$!#9>%x):5R0n1'/)%?e0$"$ 1'PDx"L FSgts0M<1/:a;9<DOCCA^!y4,(4A%v2#$:' %! *56"&) 40, 81( -.279/ 3+'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsargument 'label' is no longer usedfit is not a tree, just a rootresponse must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treeProject-Id-Version: R-2.15.2 / rpart 3.1-55 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2012-10-10 22:21+0200 Last-Translator: Chris Leick Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); 'cptable' enthält keine Kreuzbestätigungsergebnisse'parms'-Komponente passt nicht: %s'x' muss ein numerischer Vektor sein'x' muss ein "rpart"-Objekt sein.Argument %s nicht passendKostenvektor hat die falsche LängeKostenvektor muss positiv seinDer Initialisierungsroutine fehlt die Funktion 'summary'.ungültige Fehlermethode für Poissonungültiges angepasstes Objektungültige Methodeungültige Vorhersage für "rpart"-Objektungültige Rückgabe von grundsätzlichen 'split'-Funktionungültiger Schrumpfungswertungültige AufteilungsregelEs ist nichts über diesen Residuen-Typ bekannt.Verlustmatrix kann keine negativen Elemente habenVerlustmatrix hat eine Zeile mit NullenVerlustmatrix muss auf den Diagonalen Null seinmaximale Tiefe ist 30maximale Tiefe muss mindestens 1 seinkeine deaths im Datensatzkein Versatz in Klassifizierungsmodellen erlaubtKnoten %s sind nicht in diesem Baum.kein rechtmäßiges "rpart"-Objektkein "rpart"-ObjektAnzahl der Ereignisse muss >= 0 seinBeobachtungszeit muss > 0 seinParameterargument muss eine Liste sein.Darstellung nicht nützlich für Klassifizierung oder Poisson-BäumePriors müssen >= 0 seinPriors müssen sich zu 1 summierenAntwort muss ein 'survival'-Objekt sein - benutzen Sie die Funktion 'Surv()'Die Parms-Liste muss Namen habenDer für 'maxcompete' angegebene Wert ist < 0. Stattdessen wird der Wert 0 benutzt.Der für 'surrogatetyle' angegebene Wert liegt außerhalb des Bereichs, stattdessen wird der Standardwert 0 benutzt.Der für 'usesurrogate' angegebene Wert liegt außerhalb des Bereichs, stattdessen wird der Standardwert 2 benutzt.Der für 'xval' angegebene Wert ist < 0. Stattdessen wird der Wert 0 benutzt.Baum hat Variablen, die in neuen Daten nicht gefunden wurdenBäume können keine Interaktions-Terme handhabenBenutzerfunktion 'eval' gab ungültige Abweichung zurück.Benutzerfunktion 'eval' gab ungültige Bezeichnung zurück.Benutzerfunktion 'split' gab ungültige Richtung zurück.Benutzerfunktion 'split' gab ungültige Integrität zurück.Vom Benutzer geschriebene Methoden enthalten keine 'split'-Funktion.Vom Benutzer geschriebene Methoden enthalten keine 'eval'-Funktion.Vom Benutzer geschriebene Methoden enthalten keine 'init'-Funktion.Vom Benutzer geschriebene Methoden müssen drei Funktionen haben.falsche Länge für 'xval'falsche Länge für Verlustmatrixfalsche Länge für priorsSie müssen eine benannte Liste für parms eingeben.Argument 'label' wird derzeit nicht benutzt.Anpassung ist kein Baum, nur eine WurzelAntwort muss eine 2-spaltige Matrix oder Vektor seinmitgelieferte Knoten %s sind Blättermitgelieferte Knoten %s sind nicht in diesem Baum.rpart/inst/po/ru/0000755000176000001440000000000012003313337013446 5ustar ripleyusersrpart/inst/po/ru/LC_MESSAGES/0000755000176000001440000000000012003313337015233 5ustar ripleyusersrpart/inst/po/ru/LC_MESSAGES/rpart.mo0000644000176000001440000000252512122262120016717 0ustar ripleyusers 01CUgy"-  9G%7I[w"+"B    'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: R 2.7.0 Report-Msgid-Bugs-To: POT-Creation-Date: 2012-11-29 14:21+0000 PO-Revision-Date: 2013-03-19 14:46-0600 Last-Translator: Alexey Shipunov Language-Team: Russian Language: MIME-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-Poedit-Language: Russian Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 'nback' 'wback' 'xback' 'yback' 'method' -- -- expr1 ! rpart/inst/po/ru/LC_MESSAGES/R-rpart.mo0000644000176000001440000001566512122262120017127 0ustar ripleyusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 A7&R!y %:%Y-1,L5j%-2B-WD# 5&V>}C9>Vbb8[/,?:1AlI+*$*O-z!-.'H&p%84K"d-><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: R 2.7.0 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2013-03-19 14:46-0600 Last-Translator: Alexey Shipunov Language-Team: Russian Language: MIME-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-Poedit-Language: Russian Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 'cptable' 'parms'- : %s'x' 'x' "rpart" %s Cost- Cost- 'summary' Poisson "rpart" categorical 'split -- 30 1 %s "rpart" "rpart" "rpart" >= 0 > 0 >= 0 1 survival- -- 'Surv()' 'maxcompete' < 0; 0 usesurrogate , 0 usesurrogate , 2 'xval' < 0; 0 , 'eval' 'eval' 'split' 'split' 'split' 'eval' 'init' 3 'xval' parms 'label' -- , plot() 2- %s %s 'class' rpart/inst/NEWS.Rd0000644000176000001440000001074712055421023013455 0ustar ripleyusers\name{NEWS} \title{NEWS file for the rpart package} \section{Changes in version 4.1-0}{ \itemize{ \item The C and R code has been reformatted for legibility. \item The old compatibility function \code{rpconvert()} has been removed. \item The cross-validation functions allow for user interrupt at the end of evaluating each split. \item Variable \code{Reliability} in data set \code{car90} is corrected to be an ordered factor, as documented. \item Surrogate splits are now considered only if they send two or more cases \emph{with non-zero weight} each way. For numeric/ordinal variables the restriction to non-zero weights is new: for categorical variables this is a new restriction. \item Surrogate splits which improve only by rounding error over the default split are no longer returned. Where weights and missing values are present, the \code{splits} component for some of these was not returned correctly. } } \section{Changes in version 4.0-3}{ \itemize{ \item A fit of class \samp{"rpart"} now contains a component for variable \sQuote{importance}, which is reported by the \code{summary()} method. \item The \code{text()} method gains a \code{minlength} argument, like the \code{labels()} method. This adds finer control: the default remains \code{pretty = NULL}, \code{minlength = 1L}. \item The handling of fits with zero and fractional weights has been corrected: the results may be slightly different (or even substantially different when the proportion of zero weights is large). \item Some memory leaks have been plugged. \item There is a second vignette, \file{longintro.Rnw}, a version of the original Mayo Tecnical Report on \pkg{rpart}. } } \section{Changes in version 4.0-2}{ \itemize{ \item Added dataset \code{car90}, a corrected version of the S-PLUS dataset \code{car.all} (used with permission). \item This version does not use \code{paste0{}} and so works with \R 2.14.x. } } \section{Changes in version 4.0-1}{ \itemize{ \item Merged in a set of Splus code changes that had accumulated at Mayo over the course of a decade. The primary one is a change in how indexing is done in the underlying C code, which leads to a major speed increase for large data sets. Essentially, for the lower leaves all our time used to be eaten up by bookkeeping, and this was replaced by a different approach. The primary routine also uses \code{.Call{}} so as to be more memory efficient. \item The other major change was an error for asymmetric loss matrices, prompted by a user query. With L=loss asymmetric, the altered priors were computed incorrectly -- they were using L' instead of L. Upshot -- the tree would not not necessarily choose optimal splits for the given loss matrix. Once chosen, splits were evaluated correctly. The printed \dQuote{improvement} values are of course the wrong ones as well. It is interesting that for my little test case, with L quite asymmetric, the early splits in the tree are unchanged -- a good split still looks good. \item Add the \code{return.all} argument to \code{xpred.rpart()}. \item Added a set of formal tests, i.e., cases with known answers to which we can compare. \item Add a \file{usercode} vignette, explaining how to add user defined splitting functions. \item The class method now also returns the node probability. \item Add the \code{stagec} data set, used in some tests. \item The \code{plot.rpart} routine needs to store a value that will be visible to the \code{rpartco} routine at a later time. This is now done in an environment in the namespace. } } \section{Changes in version 3.1-55}{ \itemize{ \item Force use of registered symbols in R >= 2.16.0 \item Update Polish translations. \item Work on message formats. } } \section{Changes in version 3.1-54}{ \itemize{ \item Add Polish translations } } \section{Changes in version 3.1-53}{ \itemize{ \item \code{rpart}, \code{rpart.matrix}: allow backticks in formulae. \item \file{tests/backtick.R}: regession test } } \section{Changes in version 3.1-52}{ \itemize{ \item \file{src/xval.c}: ensure unused code is not compiled in. } } \section{Changes in version 3.1-51}{ \itemize{ \item Change description of \samp{margin} in \code{?plot.rpart} as suggested by Bill Venables. } } rpart/inst/doc/0000755000176000001440000000000012270777377013177 5ustar ripleyusersrpart/inst/doc/longintro.R0000644000176000001440000002402712270777377015342 0ustar ripleyusers### R code from vignette source 'longintro.Rnw' ################################################### ### code chunk number 1: longintro.Rnw:38-43 ################################################### options(continue = " ", width = 60) options(SweaveHooks=list(fig=function() par(mar = c(4.1, 4.1, 0.1, 1.1)))) pdf.options(pointsize = 10) par(xpd = NA) #stop clipping library(rpart) ################################################### ### code chunk number 2: impurity ################################################### getOption("SweaveHooks")[["fig"]]() ptemp <- seq(0, 1, length = 101)[2:100] gini <- 2* ptemp *(1-ptemp) inform <- -(ptemp*log(ptemp) + (1-ptemp)*log(1-ptemp)) sgini <- gini *max(inform)/max(gini) matplot(ptemp, cbind(gini, inform, sgini), type = 'l', lty = 1:3, xlab = "P", ylab = "Impurity", col = 1) legend(.3, .2, c("Gini", "Information", "rescaled Gini"), lty = 1:3, col = 1, bty = 'n') ################################################### ### code chunk number 3: gini1 ################################################### getOption("SweaveHooks")[["fig"]]() progstat <- factor(stagec$pgstat, levels = 0:1, labels = c("No", "Prog")) cfit <- rpart(progstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, method = 'class') print(cfit) par(mar = rep(0.1, 4)) plot(cfit) text(cfit) ################################################### ### code chunk number 4: summary(cfit3 ################################################### ################################################### ### code chunk number 5: longintro.Rnw:468-472 ################################################### temp <- with(stagec, table(cut(grade, c(0, 2.5, 4)), cut(gleason, c(2, 5.5, 10)), exclude = NULL)) temp ################################################### ### code chunk number 6: dig1 ################################################### getOption("SweaveHooks")[["fig"]]() set.seed(1953) # An auspicious year n <- 200 y <- rep(0:9, length = 200) temp <- c(1,1,1,0,1,1,1, 0,0,1,0,0,1,0, 1,0,1,1,1,0,1, 1,0,1,1,0,1,1, 0,1,1,1,0,1,0, 1,1,0,1,0,1,1, 0,1,0,1,1,1,1, 1,0,1,0,0,1,0, 1,1,1,1,1,1,1, 1,1,1,1,0,1,0) lights <- matrix(temp, 10, 7, byrow = TRUE) # The true light pattern 0-9 temp1 <- matrix(rbinom(n*7, 1, 0.9), n, 7) # Noisy lights temp1 <- ifelse(lights[y+1, ] == 1, temp1, 1-temp1) temp2 <- matrix(rbinom(n*17, 1, 0.5), n, 17) # Random lights x <- cbind(temp1, temp2) dfit <- rpart(y ~ x, method='class', control = rpart.control(xval = 10, minbucket = 2, cp = 0)) printcp(dfit) fit9 <- prune(dfit, cp = 0.02) par(mar = rep(0.1, 4)) plot(fit9, branch = 0.3, compress = TRUE) text(fit9) ################################################### ### code chunk number 7: longintro.Rnw:810-813 ################################################### printcp(cfit) summary(cfit, cp = 0.06) ################################################### ### code chunk number 8: cars ################################################### getOption("SweaveHooks")[["fig"]]() fit1 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'gini')) fit2 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'information')) par(mfrow = c(1,2), mar = rep(0.1, 4)) plot(fit1, margin = 0.05); text(fit1, use.n = TRUE, cex = 0.8) plot(fit2, margin = 0.05); text(fit2, use.n = TRUE, cex = 0.8) ################################################### ### code chunk number 9: longintro.Rnw:999-1000 ################################################### summary(fit1, cp = 0.06) ################################################### ### code chunk number 10: longintro.Rnw:1004-1008 ################################################### fit3 <- rpart(Reliability ~ Price + Country + Mileage + Type, data=cu.summary, parms=list(split='information'), maxdepth=2) summary(fit3) ################################################### ### code chunk number 11: kyphos ################################################### getOption("SweaveHooks")[["fig"]]() lmat <- matrix(c(0,3, 4,0), nrow = 2, ncol = 2, byrow = FALSE) fit1 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(prior = c(0.65, 0.35))) fit3 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(loss = lmat)) par(mfrow = c(1, 3), mar = rep(0.1, 4)) plot(fit1); text(fit1, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit2); text(fit2, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit3); text(fit3, use.n = TRUE, all = TRUE, cex = 0.8) ################################################### ### code chunk number 12: longintro.Rnw:1211-1215 ################################################### cars <- car90[, -match(c("Rim", "Tires", "Model2"), names(car90))] carfit <- rpart(Price/1000 ~ ., data=cars) carfit printcp(carfit) ################################################### ### code chunk number 13: longintro.Rnw:1218-1219 ################################################### temp <- carfit$cptable ################################################### ### code chunk number 14: longintro.Rnw:1243-1244 ################################################### summary(carfit, cp = 0.1) ################################################### ### code chunk number 15: anova2 ################################################### getOption("SweaveHooks")[["fig"]]() par(mfrow=c(1,2)) rsq.rpart(carfit) par(mfrow=c(1,1)) ################################################### ### code chunk number 16: anova3 ################################################### getOption("SweaveHooks")[["fig"]]() plot(predict(carfit), jitter(resid(carfit))) temp <- carfit$frame[carfit$frame$var == '',] axis(3, at = temp$yval, as.character(row.names(temp))) mtext('leaf number', side = 3, line = 3) abline(h = 0, lty = 2) ################################################### ### code chunk number 17: longintro.Rnw:1316-1322 ################################################### cfit2 <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) printcp(cfit2) print(cfit2, cp = 0.03) ################################################### ### code chunk number 18: longintro.Rnw:1492-1496 ################################################### sfit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, data = solder, method = 'poisson', control = rpart.control(cp = 0.05, maxcompete = 2)) sfit ################################################### ### code chunk number 19: longintro.Rnw:1507-1508 ################################################### summary(sfit, cp = 0.1) ################################################### ### code chunk number 20: poisson1 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.1, 4)) plot(sfit) text(sfit, use.n = TRUE, min = 3) fit.prune <- prune(sfit, cp = 0.10) plot(fit.prune) text(fit.prune, use.n = TRUE, min = 2) ################################################### ### code chunk number 21: longintro.Rnw:1555-1558 ################################################### require(survival) temp <- coxph(Surv(pgtime, pgstat) ~ 1, stagec) newtime <- predict(temp, type = 'expected') ################################################### ### code chunk number 22: exp3 ################################################### getOption("SweaveHooks")[["fig"]]() require(survival) pfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) print(pfit) pfit2 <- prune(pfit, cp = 0.016) par(mar = rep(0.2, 4)) plot(pfit2, uniform = TRUE, branch = 0.4, compress = TRUE) text(pfit2, use.n = TRUE) ################################################### ### code chunk number 23: exp4 ################################################### getOption("SweaveHooks")[["fig"]]() temp <- snip.rpart(pfit2, 6) km <- survfit(Surv(pgtime, pgstat) ~ temp$where, stagec) plot(km, lty = 1:4, mark.time = FALSE, xlab = "Years", ylab = "Progression") legend(10, 0.3, paste('node', c(4,5,6,7)), lty = 1:4) ################################################### ### code chunk number 24: plots1 ################################################### getOption("SweaveHooks")[["fig"]]() fit <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, stagec, control = rpart.control(cp = 0.025)) par(mar = rep(0.2, 4)) plot(fit) text(fit) ################################################### ### code chunk number 25: plots2 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE) text(fit, use.n = TRUE, all = TRUE) ################################################### ### code chunk number 26: plots3 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, branch = 0) text(fit, use.n = TRUE) ################################################### ### code chunk number 27: plots4 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, branch = 0.4,uniform = TRUE, compress = TRUE) text(fit, all = TRUE, use.n = TRUE) ################################################### ### code chunk number 28: plots5 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE, branch = 0.2, compress = TRUE, margin = 0.1) text(fit, all = TRUE, use.n = TRUE, fancy = TRUE, cex= 0.9) ################################################### ### code chunk number 29: longintro.Rnw:1780-1788 ################################################### carfit <- rpart(Price/1000 ~ ., cars) carfit$cptable price2 <- cars$Price[!is.na(cars$Price)]/1000 temp <- xpred.rpart(carfit) errmat <- price2 - temp abserr <- colMeans(abs(errmat)) rbind(abserr, relative=abserr/mean(abs(price2-mean(price2)))) rpart/inst/doc/usercode.pdf0000644000176000001440000062514612270777377015521 0ustar ripleyusers%PDF-1.5 % 3 0 obj << /Length 2422 /Filter /FlateDecode >> stream xڵ]۸}>T.bE[!w8ڻd ]/bKˎ;$e˛ >Ȣpf842&f׷3qֳqZj6z3M41ƻ{hx <<}뎗nax[:j+:/ūyYGw??i1q疨KHVqUz^uDͣ\&!2㬎3[&b4s[Fqwt^ޅqep|eƻn6#M@aL0L dWfg&Ӭ b Ef㪪/lqСl,=tK@)v#úMRW2/lV=NXe 9|7/YA7z4( AͰ&jeQ1y+jq[G^@\ h !#uE7 cc!O3fy)8z,l~bhzEEf0 c]"mS A-υRib@JHʾSvHx\);n, mtwp)dÇ$Xk?{b2a30".ȮM^NE;qhL$όqSCݣ<:A‚3)dVnh;m $aՈ5\+24 I_N^āg*l1Jߦɂw༥(h/ g|nWy%x#¯A#g,4 %з0|ÿK N(Tijiy&u> ?q_X/T'D#my*P'7w'T_ ߦS]0~}?a߹G.|pǚY)m޿`_D|5< }.CChqTW[j `x0 :/ו2IfQӨCy$~SH~vLC@A6 "%YYrdH5pBz+Qf?ky^J|K JziD$~z6yOSD˞5pRO2&3&dj;d'2Oڰ5SY>А]3 )7Chd/U]z{7 q*fIw ]9S$AQ7^sZA{&뉻01ߓLIl $*0QU%U{ոf@mOn?0>-d>I?n(ToQ$Er^QDjZXmMJ`^&]Z|آАN ,k?n;G-rGDaT0Hˉ5<& yLTR9 RRPQkfPYL=B{2w2Qc-JNB3Q(ͣوVœI'RJri1̞n۱k}}@=QW&jv#Uf@cSȵjq?ƚr:YYꟚ1(D endstream endobj 13 0 obj << /Length 2090 /Filter /FlateDecode >> stream xڭYK6W92VDQϢ)iѢC-%C)ʢ$r87Cg/MJBdv(0ϊEaf{/WJiRM*x\f:+'FOzmbQeg1ZbQ̾ꗫDu>wAl/-;/ܰcg@@Z7<\5qvvvHz/D9ȹ:wJyc3êUVf탌hDRaW +KY{N1e˳gs:xV2.VɂoY,e{5HF$|M:`{VX?Y`mȑNM8@RQ'펼T!#;|3џG۔N(xUY![}\!0x !~ n(8_/q8=Lx*yO*q<5v "a'Ba\ 7 oҎ| _Ѳyv lВa-+d21R8YpfVȕOʹ!?c9kԽc[|ؑGEa!c5/*ٰvMC֌VɴqFwqZ#VUkY C^8.͵e#Uv/:)dǀ$mӏspȸ>xzI@pj4;OR\A=7Ss[!)vkXub`8)h:نYZ=13¬>%Wt~xvLCiQIF3?'+~l#464Q:LL<yc;'o#:JHz4w%ԼXűun{3`Snݟ(5:S#($O8%Wp6ɹf`De܂#ތx}\<dYnU?2 F+HS-禕$Hyڣs "jw#{nwCM!֏*N*Nv" EX*Hqx;Xxjď!}mύK @)ױA^M'{OtG G%`Ŗޤ0}=ԋ4w!jesMi`Q'y,H=8ƾBl≐ZڙU mzC#) O^` HɆ:LX]sϑDŏ==U(2K9 IBMkRt'R.vjxt Ì`3:菊ke\Z|ڨё*rZ]7^A.KVQd,xfwNJY8RA,ԝ.Oxrc ..~<,"6( s=R:F}>_ N7\Ds 4JG6z|+])S߸Q6onZy2 cK\ i^";:MC]^& !^ɫ\IL47= +,Cr%Ԙ cr|7))|g$wKG8Lg%@r:loo'h$/c=ym |Y&ԳWzl endstream endobj 18 0 obj << /Length 2731 /Filter /FlateDecode >> stream xڽYo}' ]qHb>9S6hIYw a7A\}v݇fn2=ı Xdi$WqPIl>ʦ6i`ugQ-`R9N3њ aB#dܝĸ>xX{'a3ּ)!@ Wkd/wY:hmqI/O4 3lOA@ϒ"_": uWeQHdY9)J#T&:̰J2'y!i:/k|H] 9^h%^*4~cVW8?T;\G̵J__q{V=`0)㿢|lHڣ7>93Ƣ%M{A)9Y2Xw)g rQ4Q" #ʘ?OaY^H?C@xhmI|1`dٽ@Ubn9elS +aj? B@{w L8_?I&~ٻ'/؍ b7J*\Ґ˜Ri'6?a`[~ɹH(儜`* zl^$tOOCD3R᝾ZuڟBn\Rc3yM{]\--T /3=^G_c^bΤ(XǺS(4 !O0B'$uѽq8RjOQňN,& iS]SY/`ClftTT݉bj9Ya|DH3Ti>Y(M)LyNRRAe}r:So)@7_Lo98LIUnA={8y)ƒp ͇c=ꘑLrFy6M6mA7)1ٻ<Џi% oϫq"fS^2(ПhSKo2Q?K1TnAQRanĻAb{#cO_}a}L))?LPߣ -I0Sl=%0`E0F:;X=р_=eVrr8rpң 2b,Svw+ƼKՆY P:ל~f{?1$4lgV|42Y1 Y[JhYÔ`!5jd,6C3ƭ>0CY/6gWlJgzw>W'>̥ :e`O=-鳒}.5f-=?9'=u:qm+:ɗgBraE ](n7_έA;> stream xڥَ}b){e7`v1qPu`%r R;3 禎Mޅ 꺫O1qiPqYTE^6vl2]Y˪HF7OwuZڷn;__.l$kSieuD_Vy5g!u8t\9 N;黭;yE^y[F;W"+G1Dg'^!VqW_y^NEԽ;wX";>t;}4zA /+[E-^tcpfd8[s18}Yza7K}#>ghMhkqo:)1z\1/+ 暛{"&/I ~EVI7:5qjmHYAPh|?Ł2{9w:X\tm÷ YTx B/ T8 j"6hq`~pcRf6.aI\U3N޶MgQO~@!/AUTkCbw~/Z!ohJV s8utE ϲ$d$[IP*QuVM`{Mc|x Hɵ#:MY+{?-ɲ@á]BY+lY]%gԤ(}i*Dw\=biFZ&8Mr& 7Zt=IEψ3E~G~T/&AN&QPKnF رU-|4 ; ZÚ<00gAγ +ߖHECi]'ulA({ļ$۾Oe/Q.I>^YQb3#+^N`Wr k*UG2i4u)= >*"(S[2*3. u\H#Gd$MA|o &mt"+xRO# ~2$W~Xv" ʐγD$9'uu%觸Q9f Fl;Ax92ud(+I3 cq,2Ldn<ʣ۞x7> stream xXKoFWEJ5P[8. KlĒъݙ%wɥ9P\vvfċ*H")9gEB>}5 "fy.5yvғy7_[wظsrP[{=5Ê\\X/t\><#"ZҞivu'1n^:N'U6uI6.~cۑK}[6_j[ Ԛ.eH~Ab;Ly[}i#N2vvptKS_z@Cr/[JӮ-K]U#vULp[.KnTǭ6hGż7MãRVt{Y:{;2dݱ b֑?Vqr󠡕 . N>w]J4ea,ql ͤܰ)NyV3 /]YjIi:ߑM;۝#@SJ6'W!~-K&N|IA{krw?!B+ gdn.3!A`*Db \@r#Hf̵ܥSEb`r`H9B8NU7 f|\Q$s +\FbHUT,u~ iL!+@Ħ8Bn~: qړ^KE&bL~D઺.sj8"my CC ;{ &_h, 29B=*, P(c<(mP\b]K uz0leKBj々w ]lh%ŋ *4rbXbi + endstream endobj 34 0 obj << /Length 2470 /Filter /FlateDecode >> stream xˎ_A u9^k0e1K ,WUaKTUZ1ЎssUzlvMt>sS$qp;_INw?,O3 _s89r>s?g# v|$߼Z|tg63JjFUf߼yְ,Ux~$=87?|2K$(确2!HXYdT^G0 ,0;LŒyX8*W`ZUY,+A07%pv2D^>' ޔ[YqƤbJxL1X~(L523ݪAQh}O p?\trϒ<زoLsb41n@u)`͓;BJA* tdCȧ'#r9I|Kg^S$ ֽ`h7^Ih&fiKBZy V`'_){ k{>a@l. :JZ2v!hj/x``.v*ݟ7Mt4Ŕ&߾7+ Eyǡʮf"gʘn c&W:56mt5_JI#_bJqbʳU+7r;F_~Mw0umˈ? 0vmMaj 5U|mM:0ֵmWI1GXv=K+k?F`FfQ2}T ԪD4O?)H&u f]ʢn8dP&*nTvߟSu-ߟ@ Ԋ6g@pʺo  :R K~7b lJ#x*S8Lzg WlͩZ+>YF˖yEsB܅'LOM\z}%j25hn2sҨS&|mx9uײpWg* Ɍ$-LnPjMv^ IHMiXL7ѽ/.c<^a#w7rsw;.#W1Qyy[:$`fCᏯ&͔3ly*WU,ΪH endstream endobj 39 0 obj << /Length 2668 /Filter /FlateDecode >> stream xZY~_! Dδ9"uov A!dvȲmy$=ul{gEUUT{}Lܮ2WyVY+2nf:g %if8#4W=  fif{5y ;lY Y1َtHL>lnxV[(IY˪^'v+ܳBퟂ(kT jzf H;b͓~Dg& v͑0Aa( 4 :J𝖁8A`O ?6HfuÙ5r:c/#HՌ(,R|| Tr;YMNJ3~7c[vPF\ONmkIo8 ,I"&4'UƔrK1 9gi2#Y^n<79L$^=9QH_usj=Grȱ &;ʳvT/8(BQbߧW>Cxm&%s9L`+<|\Iv $$BE6]w6x*"s WzW%}cY1Dt\K oY!g6Tӹ:K@S'<, G8M9Vn::#7򮾩\MBht"k5<*/h7, %Wl؜UB޵0 s@ upkqͲD(V4jb /oqVptU.|%uW" *yDJL[r-]U2D{`g T> )buYPD$w3O V8D NZ,oN4/6|Bu3tH-H왦=RˆݷUNT$c~J 7eI0jg(ޡwU(G/fPfwr?JibSoov6H?jL`z+zS.uzŕhg'?mV!}KTzC8sOTdF2بBLPžR=r6 "Sac8|9& 5Jkw'L0JSٽѪ ^LrQ<;/k7r4vt5Dݴnȼ-wyq]N#%\ݗnl ?ĥdd4OgK,Wq*)sF99]!;]Zsp$ fXcAĚ"EWqAD*KX5.?42, 3`'D d/y3 ,}b^}B@. <Ӡ]}K8t$B) \} ͱce"mc 9uyUռGu "ebNu'zQ5;)S,T +JFX=YLٽlA\B%Í QH\Qu6tѵ>_s(.(md62xB:S?kGHjU54~7Y dnڠ —G@CFJc}gS֐#B!j?#ƙ\tG/_FO*Ovx+t'w':Hzm6{XnrWKV⾷gq=\5c̗V+RxOJw04rἆ> stream xMn0 y iIgBq:mIܦR)~6 pߟG > /ExtGState << >>/ColorSpace << /sRGB 48 0 R >>>> /Length 1118 /Filter /FlateDecode >> stream xXMoI crآlHlFB& dZyvLEQθݯnrgܕ6s\lˤWgWԺt7/ݫ![__ݒ.O3] kpzsٳ0Gv%ڝO y}Sq5t\0M,ܼn06[/ls7$}',1}- nR}تM`)l̠sGc:8#*>f Qv4'Iѵ!F0%RpLm*0I֨#gx;P7™=!Pq>H\7KtٷPTRIX ^:)ySZq&.Rp, jܥʄ`}{Vs/)ժ.Fٓ<N`^N';#JXI4֠킃rd*c1X1A#k}Bơߦ. hh4{)F/eqO8o2~G͕=evGg8<z<m~Bo[мel=6P>ZJ|FT\QqAGh*gd?G.'s[S ɹ4Ez1柄k:bj^|wrsΞI~&wa{s{pp+F LA*Q+>DE=VszO`UyɌZ:=&>3E٥vM??*bdg6mf'hl$m33?.E0yth88qFoOj7-^9#XmdrQ q|F>vE ႍMܰU> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 53 0 obj << /Length 1719 /Filter /FlateDecode >> stream xn6_E+cZdh Ŧh9݃"Ԓˉ7-^΃H҃C{3ϷLptp(É҃4:Nf8v8 ʬiD_P+[`~EC'fUa`_]+]*Xj 1<e<~TYLA3f<%|}0Rp6Qo#=wC=a4(SWIz2 v+s>bXqk`ٙ n<x(ZS RDId' &8; 5lۆ얱zJ=C M ) 7n(NuT 3f!j}YdR|萱z D[f7VA#;I%a@Iذ4 P*YǍ͝)ߚ1q4CL66pha3>áTs׾˙Cky;XPlErIFӴK6z Uhb}ÄQY Ȅ )t ͅލ+'ld {X0yڲ9jqWͼy7zDؽ~-8u1pW{ 6gqR!%_BBN(Tg[κd#ZmE=GjABD1_50 ޵4=z؈{aw~މqE]k#9@{C 쒭<<@xQDmĹRp5\>K/9K oM)vmd+Lu3&Bscu?ݶשuʚ)o=㶹bؿ>Rj]&u'.63"/ZW*/ YJ}.  8 Wo64Z?}M`Q5f^AEj.CTliZ {j#7g-!N:fۋװ ymlV-m9} Fo TNDsvڑ_pgCgE4m\D1ilUuUDJk&+:ڲnK+Fʐ׶y<)O2?C]mHLؽ#~+5[oY9-Զ4+kZegX[ 5~h=\mM6/O5@)Dݼ`ED:Qc- }vMӬ,rFNreҲW25=6+5Dzñ{r5(U>PT R^dBzJ9΢G&Wm#+bʵCGZ;:qcuJ >֮"m>"1ru9r/\ezS)kj_xCTZ=z|ܞTf~7aM|)v9xi7Hm9(UFzf3{տ> endstream endobj 56 0 obj << /Length 1098 /Filter /FlateDecode >> stream xڽWKoFWH4jCdhM^ ] ʢdRh{vgf_Jr13;oV/o*E0_*"<̓2 _]F9OKbbĸ£ub,qk' ڑ a[tHF-2[; UFn?~>Hʍ,f@, 70at&:jĎW4ZʈtqtKmu9F8]R$OO1,db#?&5)=XQ g2$v :/p-e& +w{Kjm7t&n Š.#Ni~⺍5Iz4V~gW4;]ʯ7Q'2%lX7;=UhG+#u@NcJ(l_J5h)ɑOv`kʖ)0Sdkc탂QntS;tVHEU %upk흋etGںߺ}ohxpbjgkSTS'4*Kl>C|#P|pQdB[uj k"zZqWz6UtHܩRaA[ۥ&NHR4z)ex%Ol<c HčQv*-yL('|OsK"_mq uu;7/z9|IN ,,#,N?GQiQQ&8*nA?IoKogq#lȪ*9JY/e*~9`5'W§~)sУ5Izm[Y A5)1#a݃j ̉zSx$Y8jݲs^1["{$SĠ:e%5 cXE1J`Vq Wp'J->FJM E A J[(ظ붊h|I>+Er % 5f,|W.x^AI$3T#%V]e3|r +2a,o,A endstream endobj 74 0 obj << /Length1 1645 /Length2 11285 /Length3 0 /Length 12338 /Filter /FlateDecode >> stream xڍP\m-K!8oqq\ 嗙gޫij ){;0#+ @\QL†DIn KD rr~Iov9+;/C{'>9#Q;x8Y[@cB `f j r4` [F @4`3֙\f AN SJ@[Ԙ()n@'M`cis~sq39޲d@v+e8V&@v:MLmvv3Kࣔڙaq-moUliG?¼YTdvF|N {0\k;{7;!3K;S?h80kY:d%y!Gf8YXXx GĂ?8x9;h|,@o?H^@W++ 0[!'d~뿓;@mX,|6av61*Z*SRL`ddrq|;ο+/Jex޿=4 -3(ٿ3@cd1yb^?]f(IZxm6.P5b66Dett*[M,u-H ?3~Tz RRc{; 7 b}[RS `f읐(/7/ `67<̦f23l `|l߷vof\f?!nloyz &.NNoΟcV?o7d4?kodUzW)JƸ=&8MB5 >"Ӎh`Ҧ$͵aS-G'8EkzEv5 (]xДszkzKGBfUv*䑟J4" Qg]Lce#Ex鬱Ex.9wSC_cLRy%ɽ**83?#O櫌T(ЎMёfdi2&A ,6KA>XdAdwLN iJD;>5jw̖F{-×8)hBԨZsTmnk[F+h/z+|=<kN c-u*qq'0 xC7'l/ A lЎK3xRVYfpl4&TL>M M?g/`qT#dÙR 'FxN24\%ttmS uK;~u6W3 TZ߂X*ƲuX >wrT%{&t7$?)˜9I JV?~'\dR=,לtDP7D@|r% sAHU8SqЌ &8PSHI4Jk܋Z$=Kur-3P>ʓ2QphH5F*|)n;k^\!X?Ɯ0RT>RQ*RUsb6a&uVa9 9j>ӵU-TF%JDG0(\Y;j> ys5AukA]+೾7O64h*'Ijue7!#[Kv~ɭc$[-]X~]],B%z;֜kk=ˌ֮# lC&.a!US& ώħmQTTii>zO5qS*".poԒv/衟hgaayOV׸e[ {[{i17ꧢkg+ ru|w"4`P%#[ٳ`}f-@vI=qeğtGFu;ב[63a\Yi1[n - f`?U%/<|?-^aM}`r[Yv܋ڍ FF`U\ð.s 󠊣,f)t5qXpz)5'ja]eRv #*8LI@ŵʳ5c6`CK,qj? *p:Ac}~&#[rDs>ޢ1;,&5#fWk❡il6Xjr4Gy0`!]P (]%a5q1^V4au9[1 |c = itX+fE]޺֫8dJ2Q1,~Xx|شVENbpl8pMEYCNTa:C{[ܝާURiSUMF/w6z}aݪ]wE"d Z_դg(MTZ`eUI}i[aPeA޺]+o$w_g`\w]jRvF>isDDUgY5]?ąÙ|!5O^_YB@IAjVPܲD+v4U^[X]KOw"4~PO8Z <,0RGJTn#+M1NdӀ+Jdׂ lٰyZ36q9a[נ+ɡ Iz"/7f~cDŽW`aV·ZC#FGix[DͿs(0 SH|vr =1_v8 zxKT5kw˹AkvՔG؟]~I$09#6ɴbz9EwOyy$ׄfxn289^!lG/İ)(m'΋sM '[{f"z]U Zg`@?¥4&EN B Wcv1BvAu6$?ueZ(~Vﻡo@lEH??P&o>,}H6jI2X=,*Fmfݛ=Aȴ"]Dqb/hi+}\VK}"T NѽG|_vDy=mP'Ҍr(|;xCxx N#b(mU#ŇE^F?xpc"6z$>xμ0 eǻԶ5(G7PČN>]uz2}dR_b|z2x4OBե7(a{^`vP DO$/o'B&AF9w)~dB,/ca2.N޴-"c3Y5`Z>{|3cY~*a-*ه?cs3a_z1H1۾78skOZcH}B@rt1LW6.hɔeE;*v{LCֹTçt&bǥ߲(!JwoƱjc8yA5VV‚~JYV>jަz< Co`ap+,}UNʩl!tO[e~_hm<^NqQI]Uo y Ԉ+fe8Dv:뭀祾ZirdSϪi-gDH^n3 OXp(![nM[ÚN#pnTVIxtb5ŒC4zRiPՓAgąq} }vnv)1G˃0}ԃ@9ܵ/˾gl"w,M1g\OiŶy )m\mX<= &Tvwr1]w$1&4Od/jL%YT܎_f=dRiM*~rdӓ [Kl^m?'  e#C*qqאZg.ޞ[4t&T|ޣ}hV|x=py^À5=#Z\raxui×Y۳⛪#%4I$fZ3@n)_R>qvJiC9Ţ9A}׺L.)Yqk}? O:7T3,)Mf^wKPKT@qo3MF{3U}H+'EYzbl?N%1k IaǾ@/WVO,dm,+I#BhhJ'5" r2(ۀG5уΜiOwفEGjIϳ|"bv9}0wrt:r I{`  yX Cv4O\n}yܥVpqbbu7:W/p iApbn(|f߹A"ǀeé&J.^ e oʤ%_ ʹzuOtzGCEe븶KYZ#*/jܔV xo'FKNfpHћ"߄ͣ`Ca8 y0h{b F{M :RT՚F9.q|jPc1Wfd";Ǝ8D7mZtcH jgu,?gJWHȠUSpQpZ0*!ZeOdgL }(BH6ԙf TC|;/SŘ.ը qȬT(V~MίBfa[F%Wnп˪|XWk[˚bb Άe4zlC:[m:LKH· Zz}Tt5'L G6et]vEug,3xIg: Ic=8?W} *e(<|']AO:yq xl8»MȨǏD$Zd ^Z f*NS7YEjfԗG/[J=|x\rQ9O+_)tiL2ȣ+&5JLK`ma̸v fs5pFVKy~xϗ[ElS ŋ6 C7x&Gټڿ``F#Aj5A$b{.cI Hgw}̫RBk4i g_iHÓgCAn.~w)󹱌n9D1j{4d2s4t\m!EZ{0׽$fI7t{p{f3>b2A&z aX37?&?4 +3_Ur IpZ>Qbs *O(3(}["UbCS8>'9[c#'1'F5 (&} |qY=oSF'h_ytJN܋=B{M o^ E'Y}7̡ 9S5(!>uaFl_*mx sb+ض,uƳv~к Yq@HXCc&NubɉW(\jn w&8Vx92;ޑ[3X(q/Bߞ9좌b[;V⾀&bGB?Xє,ʳ>Å`GFtfO>E,"ѲC[F .\ۚzȽʬXMO+q)R$w;qJ7)u>m NPd / AQI3PZґaC}DkƤ2GfeUg x cexW:4Z1w)lbe >$H+OWT~IwWʟYiBpR"娄e+ Plk7f´P*8ańJBr-RlppZa!CF/й[ o EmwJ}gIޥ6:}wbcAȉ[@1[7ix<v4ȣHJ@?GW-k:7'edßMpJQͶC5 Ds1L/ˋㅅ{iZ$c^LwN"ڌ.8멠i~I~7_%mOcwٖ)`ZS=fl|Cf/nD m#[ ꋰnd7@[Ii/SFTsxi~aô*;r4bIru\b #_OMZ>Kvf=!A+ۻ۲e(Է3EI:x<5g? m=LAUBJ˷-QѮ̀I£Q#iJj,?n"cV.͜5W}h#^T`SGŤ+%EvV8Aw܉@CXN-tսO>1!sf&{Lg[<_zcPYKܦmp bL-yT =*@Ia0; `6c}#꟩)L՜M܍F׵B C.Xj`)8$FJD|Y+,M/)?t%Ssь'i@`#)'l>bpW?4Ef-.ONM&XX/͢W)6ugfAXz>ZgMV3+%$G $ydOpA *LAET᣶X1lN=H [{?X ~!*A݇554qtE3l<wFdN ٣de", "UއUa\*hzSYl&gK]:%t5SK_6-hv_M pAqbG~!}E1nA9%>T#;{AEٟ1j{7>߄輯擻~6Ȃ`p#|t 7(R? 5KnF1E}w~.#<ߡu[/͚f@^g鉿7JԄSRWM'y5~>%v^-Z"bNעp,ː}nfĈO~x/JױlvbM~۫%mc!=rU=!Bw:S6E4` Ȃ'E(q@JY1@-Mop3>Bæ_.¤BSހ PO] 5Va )'Gm]j:BLRZ0$֦ (sؑە+=%˰K8$o^A&<CVtO2#BG{!#y@q|o4 axң Q^RԌ,v }IO>ݪeDLCɹ1"Vq_٩[\.}nvGU24! U YY\D! {*X6SԌw]!sSY,ak\y00(V_W:?)1qU5xd"wE`[t_?c(ԫD-{NqkB6`WC|Cі90Cq+cTDȘ]Iqb W`=}*bcL4i[_+)!TYõ;ɌmWo]Kgݬ55WLûDo7vFRo7D<.غ pDa3QOPJdN?mNKJ|I@A 鞔F&< [[9ԄqjŅ X̖"G4,j=c>53V"7шS>Zj#e^t1=k=.}n% oM:'s5/bTddʠ [|gH%0zῨ 7D.82<&ȹa[lzv;~'GL@+6'@d^DVVe[۝ߡRzJ*1uy碁L֯HUVs#II b7;EiuQQm߭KVkEoiȁ=9t4ZK'VEWfˏ߱Է6P0䩩35Ѭݹ!: T+Y#6E*TVBt܁E8$ "@9_tRR>Q qKOnj^t6!8 :[FPm9&ِgffDđ&h|H _xZ/"qs`0&ZGqs3^!͐m\@qfeb%tM.F`h;mD΁ gM$ [qs  㘉㦱i=u:^#wB)#N@&޺+/+`hJ+P=v%[Ո;MM/$}DkDS׳Cͯg%fwNusꮆjp1c'l w&&_Xg+jcKTQЭCQ,j>ft"<4ؚw6/g=c0̚\OGy9L;lm2$yӮ] .<bRI&na.TZ q%p[oܸl2}d>](Dˋi|aesBDm`D@a"լ>B|61?[[a:Lv:)E}q?d&L]zJ|Spkdl"~ D)j[8L==P?&gp&,bvLU{dĐ1 99ʤwZw BȇI3d!Wuf IB(:\9ؒ| t8}$G>R}/øy40|ǫwk>l`:I4Sz}ZK G{3$h)^?_1nR3$;b G5(rT6M^#p4), O '>ͤ a'!@oCKzCIRR5qO0Eh:4 <>|Hՙ{(%h [(+ƒ,mG!8r.Suw-5mmo9/G-wڵsnA _M *Ͻ;c,#؟(Cx DM`0,˜^]T'9~79CoK<Xj5˺銗$@ bu_| ؼѨb"{T q>5o_%I)x:#_?isD soZ֪W%32| f e}05fvoWH7UYL'*1)'/eJa0[X"V3F0EO ֗ -U{'.˴Jt޲W1"MmދlcVFI'F3kAJ=8ಎ^־T)|CRMX^0Ngy^?M^AS˥;4UjE*C%a-Ƈ MEB pIgi=iT?XՖϧO QgPI.xqz_*ԗEV55 ܦ  1̒%Kv:܀f9X8}F.aԬ#q3cHBisހp$UNn%"R$Bk=.n9Zv\\xB6X}R\kѨa Ny#BDkbF.=͌C\NdxMLv^% *yG˝Ogb2 ,B6fEl endstream endobj 76 0 obj << /Length1 1844 /Length2 11080 /Length3 0 /Length 12227 /Filter /FlateDecode >> stream xڍP-Ƃ-x 4I ;!CNwGf̽WW]EھYj,f GVvA'V bVq;:+Bؤ./ʎW;WO.@G @ (@(NKЛ38Hۃ `s@b hh:A.U^Iݝha`] g dMEe vӡh/;9%th+T@+ p+w!@ssG{'' ` TeX]<\@߁@;gǗ|l4{ ct @F\|a?gsřl#2/,`!horpqF=29wO.?`a+H^ꯘ?6+ Wzy[n `B |x;@+ߎF( dv@d'~`"?߿^f`OW̦)+%忝o. 'K:aU?I ֆT_ #Cvv?KGW'qOgygWPv| vwlv{,.?RRst~p,{9sۗGp^V[J;;Z=N^z ? `cuptyIX:BP~(/MO` ؤF|\6?'MqشF/5ߌ,9l&C/K[/6A/8 7~}y~7 z㿘pI9^fq|pK3k/Ct||_0w@^?E8< eaMMuHM8;֨n21"=hr%8Ѝ!M)HT9^V 8}^rd2-mw>:M \1rqoܿzR߮UD}(dhX8Mc1CDBĈs9}y55L ['grs'1 >9%ko$9_b"X6aqWQv, 2 ,ܘ1W_eN]W8a޾HY6 nr>'U%(Bݤ9y~tqb9r\ 0|7ccHZoEơ֔YoL3u<ۊ@EM( W*txa3uxCw|\(YXyN$BDO\ԇL&Ҡoue;Pǔ^|PK3n*Y@3ixMȅ?-.zfgUp]ium'H+S+JW,uQLdBNstq/QC#|g4&Q/mƑJw6 af[(0fFX&= ܈>Ч EΧ(Nbzmaf-0υ&@/י |}nJ0BKFncN*6p H>L*!%ao*ݐR - 7? iqy0: t 6E.˪`sR}_4b~ iͅ0ّ@tO9NEt.PQ ̧[kĴ %A4HD&Acig\f!AGJ"OdVuS)m 05w~_KLC:2\\C}&v-;Hԭ+>B, q9lͣ20\)\0h&gY'l9eS?q)-LD*|dD緓q[@0HL DĶhB"r~%"~8+~ pIY,x&!Lc>s޴ڧoG38 UE"%G+c#j )ԯxI?% |q4ѣrH/@RCh3+] ƒKs'P)J*p~H/9UmyÂc0[:2Fھy>I>A;%3^JےoT( 7=Q=nv_~  ;SID}xmk6bz>w,?OA>u{r=8nY-X7$:Q|@:7/ @yx{b]kcB$֌YIvW2k[?'YkhV D&򓅩Ab0.p&, m }fy-bN'VG|P9,]qڈq$Z`-r5u15jQ͉=(=/`-1n} Tjˠk-i.$R6%Y4,>R;Ee`YTam~u 6cyf!Va>n(^Xlɨy {u6@W ay髓+찫iK7ત:*l?w`($/*sZ\X{d<PNŗ> {tr >;v3ex*FFƕHH `NM\vɐ"l9_Э^0l^Xy)6SP[S@nD=u&by![h`>zc X-f1YCSJ2=3<> w ˉ.l8c߈ KGBuZ-DZI@{iN $ZҳYO<obЪƗ,0kCZByEKUNzZ Zs?+FIG-[;frSh+A, U(Lxvu̕h) —^D:r6N.-yfomff"U ~ϱ+un.6ODX\(`, C 6E]a9'@դyA^sDu;vOz%S )-_2XAPhY`gXVjM' D҆|mw̯=G+ 1\fdqLSFF2 8k0n2- ճ$8>bsBCr_]Էbo~R1k"壥Zca@1s2 ]oԽaMɧC^a3k6_WjҔ߉BiLZ0D zh*(-{g~K#NaRko\QVN>&AA^O`uO[׺3R0|;C{=RakX |umǒN7o _'}ʧ:.uUnmx f[MQ.92gg5[ #r505o;0(;H[ʣ٣~Ր%І+}QߝzJ59C+B[eq/h~ݜ8mZg-6 Zs5VJ8<<%LWTz4G|ׅ>!LϳEuTб'e%ݼTs'g21=B)1' B=7QS.z.V(XCkFLV~-f%^agW*aWqyNal|#/N"{+e;]>]W׼3+4E!͛/.dZx]RJYoåjQoE6oh ,FFђЀSL$ 9f-00KT_ J}hSvl8m ä́%q|޼]Za)=_̌] K,lOX)A8dd3/ϙ6ng_MֶI Yċ2Z :/K7Bc_*Rb(-Ų<>KDpHUvJG@i31UCklXvo4u}Br@0p v7B_;8 (n&_shEUZH^wP;$| .k~r 6R9WoOyZ Gs\^xm&úr罬EӥY!/e5+S7^)J18ZW{r !q+TS;a`a}r@OR8_!EH\#8=eMy>A0CH.}b`w?[9\ $ ݌P"gNyǮ3{)k5*i5~! bFE,``dVyӶ~QKKu3u|+=*9'׋!)s iFxIG=+2D2t+ěՄ8 ˩z΀ 'ϔkCi_fso5ڷzgASnX_kj~@ZPG DSK]CDEzȦDb,+*Bs"91m7;nhEܜcf'%Px vjjFaQ\| o j*o ]o>tlD6GVJ b뛐t%q "S6Dˠ@"KD 26bqZɣ췋&s^jq]p͐7kvOH b㊱)bNNj'a'^mc̈́$ԥ!XQr jW|g:|13=m|h[JDadM{%;:nd %Xl?7 O#sT|+أ#p:73"ԦjlYdSh9q$|:t!]g')H^7aXLSk';5=*}i3Yԭ=r>/?6i*ԕr*ud{|B՝Jֶ XA%+eLS%JMؾ%^&MTJ9NmjbmR?)%cj=ZN& rd"XFԅoX=vfT ]DBRFM˸ ]| |]d?(nwpU`VHKߴUSA5SB@(uqH4 rDg'8.$6"㣵m*0%0&^o߅Z U(\JQ9eW[E?^oovNw"ÄE1< Z݋" 0yJcLbbs @3#X %ayyޛX)ь03On͠*h'I+ɌTvѲڿDZ`.n1Jcux۩FwsU!9|Px3Mӡ:U1x܃6:^LX <~1xe V#ahGzXO*0n/jIPaIқ48˛bci} {M,X;2Tk#0Ɗ Ej61ړ}^m'ׯ{"0%H#¦Ci+"Oːoxg 2ܤ؎Y9ewv?NѡXnKZk#!~ɦd՗qMƝ=40"m~%;ȆjGpXt^hx'4Äܫ|Txأ`˩C[݆_'0: 5hBR1tlpi#~2{@<|{Xczmz KQ{ 'a]Qn@ۛ-'<R2ێ'3ϞŜ/g2.$!%1l*)ezsvq\t (Y{Vʖ< Ek+(.r`b7بL1WEz1~P=: +/4_Ё+.`S(>g.Dmcء-H iYw* $0HeRշ狜1{{y6hsGxO(4|_[F. Z1w4*j}oؕQ4@-h3Azbρ$M|" Q.H\޵rӔ.ŽEW儳\7;$1A#>{L/HmiC}ЗW+| xqyjAQPI5X`Lh.LhtSȷ vr֘c{:!9I~ e~Ԙ2S]R J[dZN6~A/dQ1E:U.op|\'mT9_eC`Qulɔjϟ$̀ZwYM?FN)-^70hܐ6TvIn>tp8mUtq6ҏM=ף2."#]ry0G> 'mH mΎ0GbpeHni$E7f\U\J^Cl-pb+Gʩ{¢& @~)rys!š`KHXS\1&)L#,e7Ӈr͋*a3?TdZ9Њ^b"YV)Q[Q}M|$׼dƸ-0gʃ%m@)Ze,ygixeQy蚶d1[t pFZ䮺 d=G"hޒMCN`X\гSFjl[}d0 kżP;ǘ)*>H-r3d9$MgRJxQicO6_b2W EM6{MrҌt`XտLvf6ȯuF_kgzRXD|[5ri7SM@ڏn)05\;Mup=+s٥D 5qfXg8Z;ԟn6yiLF5~!mطSI#gpT[ #fZx$SL.2n? aW m`E~l5w¸n;}*>lQad٤%TTj4eC4p&Ҧ$HJ3宂]Euݱ/ F: |s|+5o.oQrg>Ȉ^B.Ӟ)fd)s#Vw/?\$ҢuJ//q^-p'&Zv,]&7Q6߃Vuãhf4Y\I@ZmحqֻҺk_5 dg+od0hwL+;?udh2m_4wksk< < K+,## ׳bHڬ7TxbYm^~\2g ה.F[tpI[噶PWwsp]K>ш3wQ&UQ;KA,:L kK\ڰƫrጚ>kFdr ;#ON1"H}ϠEHN[~V"~y}9~Pz65}k=#qmoMP_053mP0 D,%kdLl/)w"swt6,vNPK]N=ZwWfTl&"+ًY~vNHB#{ްj>тZp?Ò%)VV6EJwt{YQ͙!m`ڑ+vSq72 ySjt ȹ;{CWgVXRVoESϼZ>x Qۜ"au<)]8GlI=&>x@շS.uaeT=?`Dx2k:ki&qe#-7RR+t?1m&bPFH aux]N'-K[e>z Tp7b5sk%&sXN˝V Xn/8'_.4rLܭĻ񸔀s11G/,Q?84=}>_Y'-\8C&v|ު.SMau/ӛ ^M;UCn+Y,x쉖gei)V'r塏*$4?s&WbpY\XsJ+9BuӮpUPfeI %+HkT!U+iM lN}nQhͦ%pSiW> stream xڍuT6 H/J !^ B"E7A:R&Ei7}{WJw晙 7@@Yń@Q2nn3!PCB(Mp_H IQ Po ) P€;8ԇ[ u~B )O(`+[" 0(*)x]Q(/Ya0'\&P(E`&L 0s0E8H(kApl/ `Lu^P_`?AJ'W"w0Axz0 j P0ƃ0#`1e B<~qf  G: `(gp?wrEK`Md@Q $ @\E~0 v~B^/34 }~P A'2Pٱf_g-~ _O sB= =bk;wPSU@ De$8@JJDj[?:pg@/j  ؅xv@ ?woe_o=a؅EašJPK_և:|=۫cEwW#a> qk6 5B~sB |XAܱ~XUp%?Q Ia=I N " G!,3Ik_O߯='8U H$V7{Ͽ@!d\۳ *70 1г.ߟY|y7T ks蝶fgc:fߗ4 )o_x[Dv.4*߯4P5.vcQ/{jB(<.b1%JOsp}M+;BvS6+SA5f>o10ӼV̾]YT:ɑud{br`0$7 שQUE3G(Y H"JzJdДQ~\)=2Zl*X8n%|x)/SSG؏O9sCk>fl?44wIjٹ!c~ԝ njk@D^4hvw䪼兡i%Wc@4<U<:{?iJG4-9Rd v٘4.s&>=:Qvs?ӲDuNk?lps.1 Eۨb؄; uFjP G%e%d0"&[1OoB7ߜi p˥">_U Ru]xWs3Ru~VoORtޒQb}4}9nLAR-lb6Mn! ׇ&[)rOto*q(ʹ"}!?e_|%̸qK.?{3X /dhmNlޞe5Jg}ΙPik,y4;|`t9=9/EXwֻcgtdC>a؀KgNfY_QWڷKv.X.[Bf *m_}2Bݭύo{}0b̹NͷA[袅kH*iѺnoOjeC5lxΘ SZ}3Uٻцte5b^.|nl<*<95hI wJЌN0 =m!ϭg?S貴p~]!6йɳcd}ӘR^v/iV%C!㫧7FVwx^)3WZДNkͺUqG6b iL蝓u3QUIg{̨^7l ؊~a&*j1X*~Q,r|VwZ}rp|ng9XU0g5;KR)(Z$ f.45q))Me]u1;z+L~rgd1i0sʒ̀l._O@ V1_APe *XױWy8X]S}ˉV)Qp/ܛUSĒW4pouLV""V"nX Խn=yG֙ڊZga8"EܿyrІ_pYKgbvmL~I{^i/Jt:,5w{} 3 EΦAK+G^)ls!ylȅ1уW!Vj~X\H#G`%Zy5̧Kzk_-H%ɯoqh}n_Pϟ5D7é0\$<M78>i,Ls;g}1v53e~󏂩Ӓ7{IqӨy6~$l\Nlc{Kǹj*UYaFߛ8[gYGE޺ v6I0Y"QqA {ꋶ#䘇N8Cg%B.ᬠII;ŀ9zehofNf`Y[WHefsn" WHP);:482|$!Mg=fGd=SC 3ڦa0o$bҢ^;nՄ1ٮZqVRG ӷu~m/W?\G`v 3MVzx:s·m ie SD#3&Rԩk^wF= -ʊKΨ<\+>h \Ke )l\p$/+q6afHV7ӷ3׃ ؽfqa-G/ F%hTJآi&2" zr}s p{ؐ΃Vv͎]7*=[ukd>5:FiQ4]DYXsO@(96ýF6&bi#6\#y|,Q22EԌrM%&RBb XWy7Pt:IuE?q>}Y')5qS[RyEHI(نa#= )% 3JgtwoTqM)8+&#^K,~5Ԯ rQɺcȚlbj쮉+yKǴńlI|#ѩК섾 ӫ6Q+Z&lfY.b=yơ&U ϫW݂Wۤ+FD4 w\ƈ'VJѧɟ H|:F2Ʈ= k/o)>$CE6jެ$7myqq3[֡߶jb]SQYнm8ұJ-i»Fc w}_6ִ.SM>$Qlݳz33rˣ x{X;`JSK6T݇ ՔP< mId<%o܋u$1c /ڔ_N*fVU DW*BEQ  q$ 7ꍞ(?$:#a05:M\a\{Qr_3Quye@K}cXUX4d{.cA]mO?>c$0bfNv*~˓AToEO >'wj&7X%<709 TwjZG ֟C2IIJقl2:k1T]?!e4 !_Jd۵m`Hxr>^E5ج_\БkԖ̺čRӴ6j'Dw=+U3.bnϹjEr㊧l( |-9hb"D-Jۺ$zSuyM]]fvQYD[+HXcwl3Bf(.]{p's̃b ^4gS+o.7ȺSk`|~RP2 z^0WBecς%| ͈AT&ĚFٳ[!QHZ̰:s<;{J?>%=wijTúKؐfJBb@tBh)林?1ppμn]0>w>1{e>|4B_{cRDp}#]V:~hM+V>t}׉*9r`*0C@FmRAJnP~Jms;we{1V's ~혉O!Y‚HgXz)h_qr% F>%IK] ; <~9.l82#-13w!lMx4z:Qg;"JsdQ(F*wC_G9d.ΗɉybDaiϳbK+í4:t[:٫F眬{ ^m!/U;ڤd⤜\I^uOW[̃&wDKyG-mDPZdLݠB)=Ub6IGzI˖ru%uHw&JvCBȂ5$C,@.1K@)4XС)/aLnkoFI$Q<[T. ̯ Y6HuX% t;ZTd2rWnZ/lG餼WMS혊Vy%Ed׋_  گ}߳ <} ȃއ{B C>M$іApo,hFOH6B,Q՘ˊ)ϣ`sĥGO&Ba>G- `5:;Pqv `0|T@-XfjCNOf{~pD=-Jxڴg0g=>$ ~#u YBF7tUxb!5&LrRQ\sRaZ0!Oػ~[]F-}G8T\\,]KTuQhbv -Iw]Ya+GkHkSYMyq5Ꮬ޷r7}xkSTg_\(;i}}L8'K²GQQWk6zA]K\Lrw{3ɍ /we0!&K<1皃W?8ZkA2sQq+hgr,Z:59Wݗ53Y!ϑ׺2)d 5TY_Z=2|u80Ă]Oq,Iz.\zz%ՄB)2=Q]~tk-ŧްk PZ0@NqÃzd^àTGR'y'K/ ^ئIq`op@H3m1s;&>wr]Mv3TP5í%w!c2ed7%:1x1~bݎ7wl} t֒;挤P|૸p]SXybIKv{LX=y.ې mS}ObA+!\dJ"4 LMSaIeε rr+aS&+}8K?Sb endstream endobj 80 0 obj << /Length1 1596 /Length2 8781 /Length3 0 /Length 9832 /Filter /FlateDecode >> stream xڍT?tJJ@@zݩlAR IAiA:~ys~sml̏xlVPe (hiAHgcӇ $ " (u'S .uw'X@~HoC8Bp(Mꍀ٣}pXsbb"<䜡5AC2ZCzpk_!8$Q(Wq ӓ#9y0=@"<6%!пJgÐ*(O 8.;w(p qi|;g5 sœeM>qmqB!CrO i|HܵYF uA!OZp].#[2l].07w_6w"evP@$*" *^ ](w5]we@aл|_$ @!ܡol`(o;1O|7 `dv0hoW(^_^~/ D]_j.pkߕxE )w8)Hd}ނ?\;{#ew'?g_wvG-nE\FkAm`UCAD`A>rRy CYIq } G~?x@ힵy7?U"o [5N  wH [^\;][8@ߢ?/Ab ?ZAQwUQܡ0@;?P.&&?rW/fAFxXA^PkiDCcXy'Ƙ$~1?X9.Oib5Y//wN{Cy̑z+oS^&-;&{S)g,mhEF> 1$=x26v}zl~{xST(wjwWjRҋ~j:~T9!t-4*C;EC?ٳde`hp=ۘ`u NB_dV*䲻6}U˜ڇ뇻f="> ’hH&3aoLRWGp ﹩މ_j&aovtGRL,nn K/CqZXh[rޭ@ϔ:Ial6ힱگk>J(%=M߹6Ԯ>v7ت=W%ϲ>*}kvCA1>y=^kx1;V? 9r5mG$c}{`kBKOJ3񵊍pdG/# yc|q!k;Xd Wc}9O57sr0lgT.MN:dF)wٙ$N> ɮ9y̆g 6--A6%eijBJ gUqHh>>/c-5^}HqqhHС*lҿls">BSOq7d.Cyjh [aA^GTRc/rkO)(Mc@{lw +!L@1X]zu8p|B1Rai,/}T)=yۇKҠهجYcAAyBO S J>UZcsX XΣP6AA/w#ͬaS[}QDk:{s ~_Fy7jp5{Y&E>v"p%F(臅a=X`pOpQ>yi%ɯO1<ސ+XQ0s48*>ѵBI4 v(m{HMs*X ["xiA+n2ˆF<$0)ZmJ*AٕM8b_$^CEevvX׆N-}D_(p-%9kN?LV\4K&# Ji)ƠFfĮ$Ӝ5Vӥ*w{A/dBn4<\iό PgI]˞F,CP3+ PiVmӿ!DUv9oRi7cC F7͜.T2[!-4LtBJ̆ [5E[)t-2JOl?+kIR^ֶp`u>caUWG<9Mlfx"tZOmr$N}&ijXFRti3<ej7N??I'?{ASkQoV '|V塑9 @|'j-O9PS:mP'N`W 7}_| ޭ'ȄMM-{;qikG.d7H$} Yv*QB,q^Hǎw.}m,q&}*6# O;'0%C,4crm69CF\ sa q/'*cDq_/KGJ&׭OoVIH@bLɿ$DF'~o<L/ͰO݅AfH`4Jrk^ReW5kce,Jm="6^Hu=iӥ-@=\yFA$8?IzϦ,-׻āThϚno ^q] ә~9j\MKxPӿً U,jK_N1(>@n=s/7}RU`+n^ 0%vƯfXG:KsS*fro}v `I)'~Ū2YY5sjTqby92_+dm}9!mѰ{*/;u90 N?I`yx[&)[M &)+?L,kU mSjPf.tBL&@$ R*;ur,uy}4"뒟=QG6zKc~*Q4W%.ϡ J%k2^)r˃Ɯ^Kۉ&+v(̂ѭ޶SEaR{k,Q|z[1W@aU2)>}n_N@ɫuj6'cP6$-E񱂶iᦌß.gi,; e / 8oUM1)yR'= d%9JsK>Hqm Zk>떚w Z( Pa0m?:V|LqV-iu[~97Q|`(•=5d}Tv Ef D+t*CPcY(HщPsO;]:n7HPx:%R^e}X1sD_^XlIݦ\sgMmDPzHyYľ2zг\$ ?&*.mCuZIbl7 V1t?ONR5^GSwee}GS;'/Vdo?ύh D5T(,~>/BFaF܇Mݿ1=U""Cs;)FOwf%^6kHFEk^ |6-.ZTBs2<5(sK:Zh@g&N2~U倱(ex1J ^RR!h[Ia8yO:?wf{qWCko sέ?5>!OMpZxdeΙ`uZyyRXr9 ̨VJo۹et.~0Mui{Ҟ]2M|67W=-h o3%^*=hWk>Rw33#j+}>ߌډ}~HwQN6h\fE Rp6Nt ZWfƥ ;2Ki>AWǢ\|B a+ɓ&3'}VYi(姄Zb ! ]tŲ9e-KA 48#FQcG]Q|T~꩏ &|u~u|{)KAd/!g!& ~neЭΨ Dԇz#\c6˜zdHT 3m&&QyLHW*_~=lgxd@a+!耴ݗɚ D}IdZu*V;l2`HXihSCV7^#X]Rڑ{0{e\j-^J?{k~$xW!& n"{TJ*(i?,, q}G|`1h]fsUM%꺱1A3;OԭB A/}aۆm`,[nǮ Ͳٓ9nfozP-/dpp|!DS^8Ӵﷷ*KǛ%8 kާP2yOmPB,Z*Re)DUbM- ;3\a& OlŭʟF*~âff;11CjμkI6n9bؑlSkÑЪf:#@|x^!֑oT59$*t}XB#J~mwXjB |bUOW` "cmJZF5Dg[&U@NQ:y1yk3ăR`Tճ+,AE^1|p7[Dks4`b]IaON h8C Fyd ^7<ș) `4 JIw }AUW }7YG.fonAmryыE;=9@àw15K[T}i5v4fN15-@E}НP.t[$Lc7e>>#lBQ( \T!!uΛB05%]GCX;H2\[-Nyps ( g+We8C?CAk Ba0g96xBx$ |>: z d< mfne5)oez֣\WqQ;B)E1Jr1QshB庇*A!順Y?#b2wX'7Q Vk RՌ_}XTkٯ FMj¤zʫ8, \dˬSW%Ρ6Y$`< ~{Tb^:죕uc 9B"C e㖊U˶0 >ev/vgKJo(t9o=ᓱpü~k#Kٹ.1XeϺ=eO*M@‰f\s4{Y]bheyO;aItTw4t?$DυjC2^.WzO@MadO O]J|uF'%DyA .Ud6FH]d G t-sHb?/3le ,D_b-Oн6fm됴[rdCcMj#"`YoO1|tBgj>k !n70RŴFuhVs 4!XEِOՉ 7 @ YG [0[XspMgu:G=j%_D Lq~[uH2v }L)CK< gb/bj:t Uny#Prҁmb";aTV!%uLtnPp 0qsZ3n>c<:Bʛ)vuNzCP~AӜG$FF ʇ'I?2y}2"$Ĵ°{TU>QKư h>1hĞ9bHGWk7h.>S/MNvC@fymv큄f"׭,ltin]#tyC&4µu{Hg??]zdR֐QbFWqՆPX?ѷ0?39 oU's N$iRa2QU@ʍ"“?_B 4# kW_c18ZE)D3ET'$a ^n3 赮"!cV2|_Sτo}  M-c@)Qc SEy"M\IL53N>& H _K ඔ yqLi˸733Ammq2&zX@[YCM#]8sZ̟'Ҩ_XY,Ӣx14HqeV~z@4>0ٯ$5MC< 4Cgs!h;>TXɞ8IyC"PH۟Rp\&*:A1t[-ފ7B 7t@5qĩ7lqk"t!uqЪ: RMhg.f5 ~Zp301}U+rNvxV% s[)YPnz9v3@|/%ߔ^&fwCPrEDo^ۚ}lij"gՓE>rztq|_!29W{K#aAO[Y}K_"7QX7m>""6X6A\WDZKeaE3=_> stream xڍTk6  01C4Hw*5CC HJ*!Hwt" JHz{Z߷fgk׽{_2j J8 kh@ ^ԇ!qP7w._nPeS Qq8@ " ;&PxlU G쑨c~[sbb"ܿP75Ѐ Ψ!N=5 W vI{$Eˋ΋px];jE qaƋ H/28pwT@SQh@pre*NX[#] p` syHnn+@C_/$ A|pQ@!!6PzHT 9`p5faa~~#AB>A(j ᷲP=Po5Z"ԡ:RƋg}Tk?̘g4٣8n1V4 V2whהs=:}VP#xà͎*~}"'-a#[d9z4mI ٪fXI DTZ4>Tfӊ"ׅN(ٲW㞭ƘFhfRl;Mx7ؿ@M~I(O ]aCp]2Ǔq̠A$::_e~ &tɰ]^Suzp;Hy'nK\Lnr ©`BP?y}o׀?tzw}=oHxauϘ./yQ)v;om(k8)#?~扐Иik񂴉OLL+S]ωY2EnO_2w8/~'࿉ lfwLpƎ:D[Q]DVl?Rt^;scƊ"ʈfݛP! Ď9JpKvk['FW<9{u0h抳}&%\L|NduH\*rf 0|B>] ILB4W?",ˊ(m )-6M{V @:9G-!p6\qX2_=>g]OF͊q1I{vgďwI+0hoKCs"^.Dh[Se(b#Lq./yLlwέlbaw_~/t:Sk庬/Rf%RɬڙnGiQnC_dra`RVqF:/'m3N00JdD9l*NQ#z V'0܅U䉘<BUa2f;PvڿvoE)έ%U1A=a".3ޏfތk!w.L ?;~N3ZܘI^^,-9+oW&$}9~_ƖьvfZg+=(&uc}ZʍgW*WX#UiFA `婆sRT^ Ktb>e>LNj=KW^l IgV y GPٚnK[&_Twmdܱ<:`XL3vnN:zyCDo><@iVG-m4k>Dt~=agQJjOTy> .΁^*`8Rq:T SoK+hihq82=#(ziڠod,Dл7'goB1'V1lF;Sʊb˺eOѻVNUX"BQY: R^wV0HnR kp8phy;X7֭AI-?,WpQ-3M0"FwƎlZ&XnaGl 2(N~Jk ^(`@Hcy$Cʕh ,q̓;` 3T[;&ó9eN܄Ev` mF>ΎƢ(g.䦜HwTXoΰ" C(||'~Z\ NN1+YCmdNle (~TSغu9nt~OM^' lk>hNIfhLo,;\q#_[N}ۄs?.|ԯyGEk@2SsXؗj:so}WI=d3F}ܮ\s.}% 3Uydʢ]$y֊hcZY{mIr)h wszͧ7@6ƻ*kjA,/Ȕq@&>샛O$ S*?]Mmp+./M^|W $s}ųcu!XfGoP%8\x2Cח=W R}iYʧT6E<~9.tNֈ!0X_ŨC|C+>qK[vKilַwNN'n͊)wlS(Rɯ=TP~ehCĻ#'eKyO+w&J: 4^'yGֳ>v7_sk ђ9+KJ+vՇ~&Nu)O>E~?Fw,OOcP`>NQa-~r ֦wP6 v.'uU,>QJ}{ڟLٯT|^mk[WL}YPuAZWY*sSO+l Gwu~~+A~ EDä=XZZ=ʯcu dёޠ&ރd&b;*SS~e7d:/љ.sc r {EM(JKՉťs~ 2Ư'MyA ^T<*кЭ-=~ѐR '(~DK@y$N`uP`m!sSBzl TnDVsPbHsZ,)*DCen;Q&ML3' A=A| ;sLIM{a21əH&+avCV)25(TBw}3(p0a{f+{c-/ؿTvưp*U>M$p<)]7z jI&p z0 ;6J([^KDf&)Îy\ Ņc(drh8L?"w;GB/ëM Pv~{^#`,e;م}e- EJ'?\ʬx,bjnHEC"Mπp2ltq>j79"i1Ka S* S$bP^?~߯TD.̴IR0y-Ld"sjhynM9ZnQ4fNm{+iOGO}VfJNXΞ%')dj׀!qi7[dL@??cbm&ؔ[ & I ^eMԙñW 4u.>&U26citO#F;^W: f]2/n_d uVcBRп9ƅzP1>wRv82Ա_mye,w{סٛOpi!G6c,T͍TOzbSSE^\7Mr>]uԐc(j7{L,e8asSx}Ywy-1:R?~AOck\1N^}"%SXқ81'Rl1$*OwTA;OIF?TkV,N@Vx {k鄎BORm kO:v낻w9I|@;Sw)q2[VR4Dh XiI֟_;}yJ-S}RE 5[9xQGy\İeW=?h%XBmlKo]BFl*|jžk)/ 3Uu23gΫb'R :v[G7g75ȏ//K{UrCzY]2} Q:Z%oJ#@`~ڸs Z6ϞcSs4QVF1amw4tt<+ít]_|kbi 1cނM Wު. "ޛxOL'^'i[\Ċy3Fؘ1&~1z0^\2&5ld; c;oV>ԋU64-Jatˉ]ݭ-Z :mvx7lSNVL 3-7q|/vzЛ>Ѥh\H{Z%Y{OFˬH Ţc@HQZ,Լ'v|IYZy B=\`"BI~G.b!՟M1 S,_ej& ۿDҝ*{2lHMn/x[o#ذW h]j4scO_@d3( "J}}o{B %✘}`B5GZm4&e:ة?7D 7E|90zւ4o5}'Bҫ5lN,Ugj'u Y]jE4JYg:̓\Eq\YKR ūP͡adjY_Ĕ\Mn &6EW#X}U;5U~ 5~L~ÀcF,̷cnȑ.]e?$m7+Aze,Y{`>SOf]-0B4<[8+&Η.Ӛ%I|6a1__.U%q?.N?9fj$a+_|\MRJ*p6v|G?3}e2K>w[7L(<|bl/w8},֋+{n}S"MI8tS;<Ϭ4R9z}4+!&.o%ib>j虦!`5U7zgz^J\FEtF[UOpf=1n mVD{T3ul҃ŭk]"@ bI4;v+KN*If!SXq{+^zDs %ɦV;wlo30ܗT 3j<[3,?[L=ᏼ  -ӹT6&NZn7> Z==rM4i-p s$.$.aM|Rs_-r[[&fFTWi# t.uZgOS dJ¯zvyʹ?|K V3~ {!PE,aʮa j?o|&A;;>Z ^F<1H[nIwV@vq$?d6i g endstream endobj 84 0 obj << /Length1 2611 /Length2 21855 /Length3 0 /Length 23331 /Filter /FlateDecode >> stream xڌP\.!X.]Kи%hwww3sIޢ z}>߻"SQg5@Ll̬qE56V++3++;?b$*-5ȁqg+X&a S9l6n~6~VV;++ A wks"3@tA9z9[[Z#֌;@lmfP4qڃ#Af@WQ Z:xxx0ػ0-֮V5 h`=ʘV.A&@X`gmtp{9uY#c  tog33%PR`vte8ehbXۙ  % 0\̜]]]*/p%A@Wvdm@>aȢ` X[f tpqN_^l8"~@$w  `nm 0ZZ; f`=zcO29y6{,ʒ T? `bbd<~_[R$O NJ .W_ ob[jڿ?j{k;W| q8_Sm?4vZYWy:X.R֞@skW3vSY;U@.=lLlVf `l=q|j{, W \D,A<߈""X#vo`8,r8o `Q(F\~#p.Cxj8oiFڿS3M#p&f@{ 0 d%IkX FL77qC0ʸqrojp,~C/h'\A?2KrslbN<+/G+`Ys{g-FQ C.;3_jp1`2G_3dg~~ϐG;7?Kr+oſpGo1_Sclvr[{1.0 sׂpgqr zpss3cޞ@0.Ɂ<׿_ac/k  4CZ Ԇ}%`{7MF >:3xF4eʶ$as=|DKjGV u}ĈDL"{NZA͐rT9Nnh*yXwҞu}e#s{OeSL1A3TYpLg37Ә__I>2 r`^`w$$xO }92I#v*7SRcY *7jzjGvrR4?vjJa9+TEcp-Vn,l>-MսfPu|V~0݆j6],'LdF/i̟A uS(q= $L'\-V+{^8ʆ3y;LnWӎOggVƙᴹ]riTj 3!e,g^ [\ =UQ^6|'Z \d;GL Ab!a|7[7b8?AZgbq<t(KFCn RkGx=YX&+AES'S0w`Akoߕh!P2߬Qe-CS}uVP].{g~jtlxrǮR ml~;;ژ5M%1 BcG2R5B׹l-,wU.kׂa;u!)%#5!N=q|Uu/'Ec]M5M6?Wj0,"L'#b[p{6>\ KC2,ceBMvV\n Bε LJ."HkgpvNf02tMj҃\+9\=ҷ5*8? yؿQ0!Ui̵Aʟ _f _"ꥴ_zr_sXBGNonswcYS3nkeߍ>܋ i~K2;^ѭlKӺ'{foY׉/VĻp'8 ~& xw 1+ϼ"kOzH$Rtw$beZ(yveiOUܲ*v?*6:gwoG٩,M#nF@kn93[PQ'_:Jօ{qo7,VR nǍ^=:iz|Ok1Wo([R)f$=u"S0&i z8&cMySORVvLxlmzUF²Vnb'Rpx lh ^ܷKkb)ԒP|. Rw%| $Ў<>Y)=(cؠfq`:~|Ӟ /_1b]L0|ߛbqݓeJE=DKN]LeO L<[46NgeAA .!" "GmիGc}e* RD6šB;׎+w`yN[lRe\,sF/m3tE ϫz-1RpverBU@-xm1"}-ekӠS5L&ReU+LzhEb_^Tj^#_ކ8X%=4%'3E%XqsYW1q&1er6XxE~SpղĠJU--ܶi4T*ef k6^90/mKm}l Z2]%k:(M|7Te:(r*l*)$繘e8yB/#R&08+sF*+ qWhVᣔU~N]$tCRnG=T-PrO XˣoݝY^ c |fF^rC4~--*S8ɋB/dzykՕMԭ, QtY3_}# ZZp|oE$1RGNFS._I%d%Y5rIh9Uvg -(76^7K7EK!3I*$Pkz'kK06uO-%,r oOŎ]YoJ>P84W=PܖBL*ED̙5d$@ tU)YhRx Xi-JGQnvV(VKg`tŪX qgK\khT^ `ث,F1r0Y_5PlZ

w\4{݇ukY B)]ЍPyBԔ;|9Em|*2.J٩WBKc5搅RCSff٤QF9`f=!ZN!6Uv?gx3ReTmZ/cc|e\>HLS<Τ+4,g{ס[ߕ\2ME|>z!#F!0ko<:%cs@0u tQI3dԿɠVtlBBmϨ=x`Mmd*q!4~.>ӆz>G$`)u9c  gW QWK< TzHlgE"ij;(`Ru`;O@_O$sot9Į/6eɧRҏ͸yZŞ/\XO-iJ=qT\xG]I( #콪thD+uzfr)Wì,cFcŵV7<m-'JPk̩4SɬT! 2/,8;1:rX F@mW~vUeR@uH$ kkhl#^ ֘qX7kcP]ytY ,4(;0r56"=B$iYZpUJm5hϲd &8:,)%F~Br84U$=&IORgE(KU\ M=nD i;*q@j?|zLdR+77OWsju\ak&ɆSuS~Aܓ@"L!:0+n:"yx'8"k@v nBS W*e Ww~2(JNNBFp&OҾE(mPB&"Ͷ 3NJ*s\uu%^j _/ t;R m˚AP ¶% xj8.M*Eɼڶϧ=`SM_>lXqfoKbTX(Lϐhk>=4|km5D'i?VyE#5o8%䞋VdBD_L#n%ĕ.Lz<\$? IE} vhYTO;6d"E<3ķbe ]ec_;(w*Y瀍i#<8wc&A VʶYN2P*yݼV(/RW/Sܐ,̜zɞW f:4+!]se.rڕziA?_&p*6z#7{C2dSk/tBNxoo zQ*il55rï9nǖKe%ޞYIymRc≯~v gƤUhYz"ICѽ`X-e$װV3;u!QBaϢ̒ϊ@TxpYZFfGTB4x]ڭ"{u7K$jЫ$QW CFlq>bW}|>DP^ RF-(hB|/Y67\ ef ~V$%4ǻhvK/S0yI&O卅%TƩy'.e-í? >'=m(Z1,fc5ۼ'/-Y%KL `r g@HkI+12THl4: @ZW߿'(uAb~r "dC'me):7 8֒Ң7Y,5Cc@t*-?1YO6|MfbF74Ϸ3Io;}${Qef_U'hT9L<)H9.IGlL1\>³ *d;kux|mk:`huj;!%Q˺4JFIKBffjSXXdAo_^]kFjC{.;E7e: (:CuI&0gFJM8WշȺȱj3)}M.x<) ϮhlhĆPit͹7ܲ+7BOZFPBE|~ > 8K?v2-G ®UK$"yу4 3<,qf7m( Wp" 3\@L"H<䕾P{e.a~ XQemݢsg>ՙ[Hz_%$5;Z|Gvma!S9YB0"(O xQ6Z&٥O,lpCQxԺ"~U[M3כYgymuдTnWqw@fD\٣](XNI@\VИ%2?lw>)~4H`~UP}W%zJL&wnbjD}aBF XwG{VjSR[_(1! ٩U 7I} X1/r %~E BsNqV7|b}AЦZWu *xV.c6YVlӁ*}yoT+#sa,{ M]zMXC11 iV$R{dI2tOSRm8W;栻{>/Ho2[H#;#hVzԨ}_ \ֻ~+["`H1p)R4+Cd8cm*9 . WSco0@tX**1 \j\cV/)pj )Ò I?)]iF,~pȖo^F,Zl 54q9(~UóO:ܻR>;\<6 ;cw}ywLR-KC+hE_剁13oΟn!,I٨Ak aeZUHI  \GAtd3<[oÒ>57.yjS$#jXLf#7!AC~m` DPH3޳4`)Ԧcx&V,?tWz [0sg.Cﻞ5NM[s##Z# r+\ͭOvZ5;ҔP!]ag=R NE D־KGOւrG@i}!Q|G/>&\h})ZX?: $^]xA)Fj+htW}Gf6Җ;Mb̚i$EIgU"E2Vr_ ˜mU~r*NwuԶ!ߪl DQ60p/B Ąu.^2<;57bHR?UPEnD "Tƴݐ)b tU5oɺo|S]è&t$=g'D~ҟ .Dߌҙ9BC#RvZM+` tk󖞬-HLgQL~.A!>F|^a:.PjeK JHK36ߺ'l9?)he%఩+9CD> s L ϥ!{V?QU(t,=pqdmm'_7{  POX6#ɐSxՙ&5QV1ytCQRxnL0wQipNMTIS߻ l e7OD8; M/KDaש~iN`la v s[I-U?̿dIO-cc b+}Ԥ"E.u8!04;!^cW5EPWx)Ơ̐$>ײ4D؆XTYWb|:ng%\E)! 6w J5 *r2b 4``ܯ_ĕKE9{C!"?yPyIY.[Z9"cWjmt( ݊hg늵 قF&z:e>Xjח'vIXٽB_ l}3UQF>A&TQ tH$.uE)ĘEWx{ Бm%FbQk_ QfbPW3)aix,#a:X{ke%+%6]e8P/Gij*w+dhk*R*@T Bk(O)ʝc)T+gw %/S;fC.Cs)DssD>7 f 'X4!ntl<FR.;ߣ(a݅T]Sٻt&0At#t26IFX6e,>va*< @E&~XC+|qU7]ù ]d?ܷpH8ͬՇ&FX#e h9-BzanUj+fmxP%sZK zа86;ʼn;y@B Tba@_GWZK؛ y˰7X&v38xl)ZXtw]q'f) o,kb/|Ϸ9JdVbxяIaJQZw8jFY ?h$=͜cSçxkdG|sVM "Rf43nNbM$#ne!BZ&S1eYO o+VQhdD!&WqGT?:X3ά(ljvbY]@AEJvG~VZbl6wݭΌ{X=E/lըd Ga!ܳR ?^1{&}{l&L~5U\a=Bj'eLaJ4_}͏HTl$YӘӬY8|C]S~Bz7Qoj@2YM,yu5>xe4coטt^v\b_UpWmEӏ1!GT0#p2tpO mCáCCu{] 1 q9sݼ b0T֋dDK$!?AyH3p0 yC*R9m[z#CRiDk睬 %ӆ|;eu #`P&}B̀VowR[hw`"/R[e4OmhCt+T֠ $xXtLy-~lm\ؤ\{0ڎaCZv?c;Q{~ @|톔?A`?+$K(6_J7 m_my8nV,1|- 7k2Hr+⶘r~g&ɿ@8Z>LG'lnՆJf$HȫĴm.qrW1`"s؃Jb :C"ʠ $u.!%יi8m 5`׺ټw 쥟1L>0~]]4D?&Ua43LjBKl07b5 ;ʗ 65Y嬘H};wryHpmLƧŎ(9A/8,UK 0ڌ]wk Tŷ` b>Qr:c(8 4xWet*mu~}QHCV  40NGp#mUX[\U^Td(T! Y ]WsO H8~`%? m;q?QLT~}1I$0F`A 4feB:TF Z 1#&V l5Yy-՛R*"tB/5+3uᗤK8wAjųʂ\RgS!b>1 x}07m B}iWyN Wv,ȱ'TKW30{BYS w󣠎 ˭xdQ ]52  *޷f*=J.u*)N R{V_;t+BՄʾ} ~U1AXBR-rv`JH R- 8] Ev"e)zW7|cr^>JzP&Tŭ2~$Ȩ k܊ "NardaL^GʑXJz  wF(0E66֓7RPHt9VB>zVt'&qխ;Y?b ){V?vg2ޔM d@yo]5E]HyB3IڔK.ڼ ;;D? $Qn~]ߞ}jJŇg<8JSa|h#8X#a?_>ᛌFU3mŔ?%kɞﵗX!  \wSIhg ')HԬ¡Y4ޔ 7 Χpo &V9N{7wυ/ 0{:;aǣ?zPckEEߣ|j7jgK3˗L,c^` $hi#&!d]f\"zh :B4ABNf1dfFecjr=伞zbK cч GkYH fxZ]?c.v3B`Mt]Xt*rUDJe㗗K#yk̥ihįK`6_qDx[fni=H㣡="}Qqs *9񣐠Lm [!M9&yEmHKP/֝mM\[ ~ףEX=e)gx7kkA0CJMjs XiJxYwzi.aGch5$ZbqOlζQ[쒧vw{z%ZKY>9@6fp񖁐ʇ k 552uܦZB}[AtEhd:&;P*lꝎpZDa;F&tӄ 7 {uU3H>aHr3yJ&TE[`>ɬۍuax1v >{Xew0kpȣ?i>{/vB{Xo_Ez*J^8sbsƿ1q&})R9c~4jJ-n,xq&ĝvg=1_Z5 {OjD)0PTM_Gc~BC. l!.-֯#wz"91ݎ* WY_o ˯?1yZR(^$×ϗ SJ5\OY%br! ??u DۥBsR5Sr |8fpaBӧ8sqa<(1pE](!2d|Zu#D;E^n:;:*y QFqe0wa4{'Di;Aۧe4BInLaTZؼǽpWlL&rڑLjC$˰v?g cξFW}>6>I`^gql1X%&/-X &`z1,VZdj/>2"t 򧳣Rw_C^;Z^)RQ Rļ3J'tLIo-#Y)(2pھ΢afs"I" >XūC}*#2 HbG6](DP_IKBZ1y+ّ_"g:**wšdVFR I5ox%T/ڧEˏBk;B59b*I{ %r$S!F^iJ"5hġpN,]>  0B^"U0p}M9.D"tN<\aS9"W9:'_ 9_2FY 89t"hٛ8'y\9ʻ{ѣp9)fl78ה{@Sܢnz0o;xJwtC>a(kwЏAuzZF3P=LEr2 ;3T7QAww"dRE.uEѷ*~9%1=,'S=`=N][4nW`HrȬhZb"5D0g)d,3C~8&WZ=%"):rRyhD"љSfh9 2kG^ͺLt[)nVk9dz(#*@e!='@HJ :>Tj 4^@s5[`g2svQ<Gnb_LXA@atPkf=_ndz^)%V;dB1+fCrU,s"k7:"mg(|'Z/-+s5ӫ"%K sRnQ ~E!"Cy&VD4_3aj;IZ%a>&o8/\"= 53?@zL@rw=̓¢>9\ .J]5,Wt'NGzΥX4ڱx28܊ĤK@ qU32q#@I .On&q* ^I Ո<+EEad2/}S`#w*:,ǎP|x9VSN2UG&U',N;F e EO^4sw~b+ABA;@%EJhٝ19Y gK=:ˏF<G@|hk_|4^:bEJėh /nsр<rn"6E0}\(1ի9 g||±N9aZ)~ː*S6}5R2~Vu 5/FEQCKKk;Rt? \+PcrMQsWꚠ@aM6?ٺc#n?gm3IA,BzE(O[7WtA/_bH,l|6M-n~LvDxM)& -XR]eyB ~xy?;J fO䘭P ԐC~ڀ7 `[!p2V.ojvq\74+J )Aʑ҇j`6ZCRZrܱͩ[ۚX@%;qNwm|u7MQFiKGϺFՔT:[c?X -/ zVR%Qb5GzS(c1.mͲ{7Q."{(8T\~ED{`8u 3%{.䖱4)[%Gc?RxK\XXݵ"d&h؇7zg;o=UBpe #\WB Ns`'"t; wM֨!2mnkw)[y6_O4&ﰹ;0yi^rx= Sm(,P/I2qT" "}$k:e Nۥc_p\> Lܸ{Y6{?uknwNQZx/j?]<57ɪ(Nzk2<z#L28hȒnvD,+ӏ>C-dz`f"ѽ_bnyRj߽X_!ڢ_3;U4# 25,"Ǥ63 w4N8 y V2J#AZi aAaZ?zQVvj^bYS<$>OMVXxo?[6;TeuT=]`J'%F41kq.gmzBBL\~<9%v Ls@}OL6~<8o=Ih$^0118D:2(5%%*3LBŻҪc>Gװ''UjUy[S%VVru+fg8 !ib{|?BRL,]z]Xo$M|T5~R2Q { էڙ{46.tѠ"{#Ֆd1֛)mV>ed}"f _~ %QL2K둸xkkJٗз6Mn^sQWcD-ٽ?c\xW2`2LnSL.nn/C*-ڧH.LmߴtOiG/Uu6Zm']?`kh9CVSs{}z*,ih3|61_! Ic}OO/&8ҥAHXwrG@zh-! wyPM\9ilFPculS0PW{=$rƃ L_k*9]929v}b5d?#L4je7]=^jU(ƜcPj)kbx JOpv܎ഖ0E)'vV)t]6كOڍ'eߐ&ua2ERa-=}M~+i /8v4WO bơF<9aH_aZ@Cߞ߸icj[`!$l=mnel}mJ*0$v 0``OjD P&<Hh^fȭ0JOtLL'?Y 9]>pGOL]vH/Zb j+ >u7i^S:P ||3%[X O^oD|M٤Xvr$>F A ݙHq2S7'~m@S@2XCQ&W0˱Ag~b51c1naƿtX m26=y2!QU.oS)t;ᏜOc0"<13IGЅeI%'S|L*ʬ>ܵ@e^hz] inJ$^%ܧk::VYe.UqB$IRnhV30*N{@lMlH(V?jDoZVyh,zgRpM.w^3mLp8,or9`T3y>2dICٳg0g.(q(KљGxOIS z.IH,9r7'Ϋ& 3jS`ۘ8i,`2aUB΂aWMU DLK0Z&U1F6?rL 7'vE{N YTqp]W43Z2>gښqQbj{O:i'E;&ke&fE&G7XEYs.@ߨ LQcQ);hM?GKsANVx5 z/ʫ00ɪljVs"Wcz hF-b MI{2 Vj sx\a\ԑ,J+{WEPY'_T{/.+eXF1[~ĹxQ9C TI 7Q*3,\rM>)6Da"tp]a!}jѡ4U<V%xVL۲=ۧ(X&JwAxqY+&́ =6==}A.~36U, Y(vk{rTC=?^#x'Rn<K K*ef+7^#A}+$/@toNĈ' ՛fž>ãݠalϕT\6n `n]PK̽d*E˂srj!9:ahɹjPw'ՙA H╛^q@$\ Zaۭi̓?_e3GO,N%Ҁt5m5p*V%s*iQa=aA%fb{hs: hR4katݨG]?kf%hHz| I2hP\Dug޻]dz 0#7@W{`Ӝ@ҠVZO@r"H_t? c.P# [lx+c q  YYy52{uf.1QO o]XuۦXU#[:)>9𐭳sűvkӦCop)s1bς\[oƊWllH,tCiR51ҕԘ o)I"})89ʶ'?vn:;Y47pjs,WDNDѬT}@%O8؂E(3b"VSL|;ex(jlQWKj=8q9.Z^\˸幊n@S+tJ ,kGeGnꈨUWl+a8[8#w6 =7Q} 9gD՝)?:ZBS)3қIq )Vptc~3Nvۤ;:___i4h>L΋og Mܰ~v&y-f?[WaDRHuZv[4 rδ R챹 g\:5a8Ra(zX]>; 0g g1cNԪyd T˯v4KJfsR>.?hE,՛0hRXŸ;jkI&ʄ*QhCol І0˰+c7DFI%NTv$9T+Fӗ]㩚$1z&HXWU'FރL,)d{Pyj$劷;o _185!}1y"bttо;Y`F` a0#ĔjT8G2&e.r;־A8q(cQ^ x+X[dw%L0Fn,:DYQc M)ǝ MmrzLb3q5r`@xrTq݅M5ˀ*]< qP y>=7fz!39ӌ~^\>7}4ppWȔ!ܯ. u\kSH3`1sBy0+EeHt!31^glX $J(d4XYo`(Y ҳ@\j-q(.᢮5I=d Vo"O[5_QIޣn_Ku;@R=6amb>Ƹ:=K~9Ϻ[nA#`^$\lZSS,.4q.\W6C{XZ~Kͤ_s>}|v#9Lv2jSSZ]'G@ST6\ElG"4;_uz7';>e ExP`$XtY~+OX_\FK V-#_ [.g<ѻ'}K"t #qDG9Cy t:0X/p6Aī%@}4״ArucLn#Suq(«[F} ';.2KH2YWa\LHmjq@ C캽NM9ݯCJ ֽ0M fl6=6挅s3e4A`14W'̦'H;v'쑛)Ɠ ܁4qTyt>u\^3bk9-K|}`zȏDz FB򗽁yXIl8y\BuZ<$1r/BqotAGO Dh5ɦ. N1m*Jwf eku\34;;4PqnEb#g^H"s.TS|]%2 KYaͮNvkT .-æW\!ܛۙ1 |N* ſCnnS^~3]A4ag O\XRɞ⇦! tMKTG)TpqƑy!8w>ܬcQ}c>+I%8 yʥ&XB]| I {V2V;'(ВiO{Ėەx5spʃSɫ@5*ʼn O<(; б6ڟՕ+$XիJz"h ׋+;Ġ97=U8YxQN/r%s%խZ9#ƒ:m-y23 oՐu\Hh[d,oUކ`v$n!A 7:.;Y_A+)TvkW*ZmKƽuWKvf#N/mOAnPp:r&Sn?NyFy #As&wlaF" ,ߣ\EEȜ  Y-%/Seթ/x9d2G֤XӘEa#M`+RwT=ϧ[ђh(eB2ԙvh/L]-Xaƈ9S<͙MPĂ&"V[ȒBy< Y8?FM .frm9-;TʄѣU&Ņf)+ ;uT_d3njQ Drx4h\-w UyK[1i@ͦ7uaDzܤ o ̜ﴩ`>]s#zx%N4TAp*!W{7`q07S3y ʋ endstream endobj 86 0 obj << /Length1 1690 /Length2 9199 /Length3 0 /Length 10290 /Filter /FlateDecode >> stream xڍT6L#]0t)H C 0 0twtHw( 4  s9_̳֬_Xu x6UWWO@/(ee5"!qY!p+L_JpqoS!\aMOg0@PLRP\R@ $ +\ Z|MWUw@ܗO-'@#CmA0qh rB!J!@I{{{\<\<o( `om Oe|CǟvW;7}'  4t ?n|+w"(`>A /dsAU=^_ .g}i!w$9҂;&$n܀8R?u^ yҰИQ3ϰ)kR}(]g|=*ợ ?dc䠡G'׈]TOv)gN8I87w |9(M"(Қ` Ml;7qTφm?}"oiZ0tڴmd<ј?r&~f:Գ;vDMcmi ٫L+P㦋lcä{]!ܢ7leѸsǙS5{9eʨNP"G;! -bc“RmzCRy4bC32GxѩIӉ7,y Su|{/Jg l'%Y *nH؝_`)"jAg&{7kG Az/vQPQ)QsD;V]ό ÒeUS@iBG/E|C 8>::6&xFGYzsJbKڛ]#R[٫568Om֍4$w.'_ALgh[W[9G҂tv<>t ^{oQڬ;.s#/R_~IP[͉dJ`v[p !Ǝb3hUO=~uJx g]1K1|s="_y+F#6`60ϙ񫄛6Eo (QC$î6Tx=~:,p}9ȧBYv[5V92[oFY/W2i)}ľ5/s{\ڥ3E*gj}C=]$0{b[M 8X]ȳen1}QS~o/0h?!c K aO]ϩl KAh) ƋY6WѩՃ P諥Qփ嘝_ٓ-0OnJ @/UzVnlC.n锓_y)ʖW7`1Nd}?'y1Ҩvvhpy>p#El![ Ghqe l,{ӹ[ןx{<RRnWgaV Y>񁋴~!Eqbc TA#BM rVLyq<;/"|2_Lnfi^r1$j $ ! -/ :D>7q7tK'c&%gKKV^w|nGWvaV4<ŖK/$х]'V%>ΟR&N%f.kaǨ*Jhl:٫hӎ[!u93[ &Y" K V4YSN/k<'MYh$μՄ~IuKW\q&h;nS6N={63bXi:΢.2hUJF"B>\\ ŨH{|s&.a"~KSzu @{J TSU)^Gbj8wXٍ7 zF3]f sB T&R)} IgVb4+N\Dby8Tj4=$1!\ E_V1~Ux4kĺ4NW-_G;ɕ`KFw2 {"Ý*MxnCܣ\2ݸ~;:t r’BE6:,foLT+7`6ɵr^dO'53 Ys~&J~yFt1U =s3NC9c&ؙ/mSs? '.!CF1[V}k:uˍ㷩վ;dxkj)MnYrRW\6 }V[FHq9]> >jjN`dv q!Vp6pʠvPL6نx8. IZU׎halL851݅k|^z?0hcli3{c٢Ê֠+ |ѣ()ބ'͢VEw:~F=:]֔$KOz/p^`0sseS'0.K8udQֵMXl8/$)bl4jٞmtRQCn# &QM$h02t좳DgqS:` h׊y߽8&Y0Vɺ}@N@cP諧 ɑxuds2c09 ;IQ/D<~ kij#6D*b6%'| 05Hv2L}*?єud; !,ˇ^*Y˗ENk7&Ro7-y ˽V0ѯœ2+b5u2o9c_@Шq,=}:gC5+EO뫧Hin7|=FE%@1 G4}IJXCPqڙݮ`ܼ#}TB#V#_e6XX0MD&t(Je.2c;.`ώofV8 DMTM!*]F> 1 ~WKnd$Wé'#IXƽil**hrԄ JY⍼Ë,u5Z^k_P7`į3eOExl8LV/S]?uUE61F 5z,q_՘ -_;@u>m :=}7G[쿣,ܐU/O`3:NLh LƏ[PD^3(Rj+TnEeL,恻|@%qvقFXXjrfTOuv)Ssp"(*fCVUޤEC2}4N[0R``n3yx+ ̈́Ϙnkꎠp}?#7`G0hOD?~qV]byGIpH1j-#9|] ^oi];~OM~Eo<`z#13E?B "wIlع WDAzam'Qz;GhSBt=!T7;jSx(uxM>R/z7v]:8Gg 0|“h8֞̍,MWFFY7:cR+I.a#ӯ;`c:ݸzFp4=c`0BAnW1ּ2岺Dz~U4KnJFW) fJhex` o_ Ҡ&!T#2]gL4kr!B)Rq 0 as5Ĉ NiZ 1JkZ'ޙ#lj\D )!\{JڱA3c3/?] ֗._`!g&DJc$޵5D:=/uj)zIkgO1fשnv|Ȫz? oxkP1Kh}L*̀js Pn8¾>89ٕU*˩'.P$D] 290b`i,FD%o?ZoK>~'f}vd&>gE4%0>!\x󖱆VZq[ qϵK^޵\;ZD"NCrE!v/ iа~ꏚE8^>ƕxûˋ97QXxZa5 !#_ZbɍDG}N}G%U!7次P#_~|sG`dU%W܇'Ymq\8yU(I|& ' 'XBڪZBT77Q?s[9-p{t,ޕsm:i[y驭N~=jؤ"Tlmuq3}ı:z-л9u{FcX'Y ҉&J!g0ZV+Vxv3 q7WOIK5;?*v $Sѥf%j`MA&tlQ;u+8ao$](x*i5ָuYyjB䇠؅/XFvVYy^߬--lgb;Ú1BǮZjw:/^~x61 ui4ԥмxq}fmRoa2TVst<5G!bK!olkLb) 6}0d3|1)O>ɲVK:nRJlWISgy k|=m ѡwJ[{BwPlxԙ ќq|g!yA`W.:hézxri_: mߺK LM||sVl=B%F::EoK"RE PWdnO9\8f7=%q)1L6JxI :c66=/xJWq::Hi2kh@ i |2syoO{t%xV6U 59ӒH@[~)2'3@q^"J>bGvneF/@T |/2RjX:ht^TڞiN57EUHB*S19>.,zQyXokǹYG ̀YvL-7/[A`#IEWj$֤T(רfY)pyi93I"f(Joexd[ f0j7KZu2:3[Zs j1b3 B[TD̙gU6g -T]+$td],\}еT3AF .^9ӎӸB'>,ˤh#7osceJ}O\IiQגvH|lo^Ni5S4QY wrtg"=R#­mI{ƋHSu! dđ`AE},E`qg\Il0j';qrDI3P9j}̧w:IγԪ8'ӦAQd2d-7RBT1;a$h46=RWtչ9D(8~!OUKŎ8if~bAZH.@- q~@( I[ _4ϣwf2ݩcAUsxrܢ5 KGj}'שdGE-,u1Dj7U"K]5I߶8pq[PX]G o)/xlEK7OTMᛈ%Gf[rΖBGoDh8$}=HQ,C:h@pT`[xabל%;ʓ1tVB Ug?XWxpQe=^x[ߩ%$ G,_q51iƴF3W] i헿9ؙ增Bz0//:19+'bο[ezp,E@ CsB߶8ME횫o>lndQyX[4D*FאG"=k 5@Xmkl'5Eya"*V M6cǻN6:63=F%}v?[3r>W;ϊВ/Eж؝ZM6{_-bΦBLЋkqciؚ=Bٛ<֥s=iB>(2F<>áyC#qsX)og=B]+ZEFj8`eA/zXhŹKf%h]oǏ;qy"LEM#pCH2j#)v T&MO??HrRX8ԗ/υg'um:L 8$)P&==a_VZuFASw^Τ.Q NתJ1UI+\ 8aҖH#HJR¯0%KDZuG9g~[bU"1[~,\nUVhۦf W+v:]U[S}sz4(xKNR&K?"UhۜݤKٌD:3fv' Ii/Q]E +[Mk\9#.?h鉿^EǬU`܆V h%ӹ4UU8MJKyS(.`u/;bƙH )qPǬA:ow,m8oŏ|3_ I=(}\4dA8gr|}1m`uy9kjZ^p>54}T^]xhrҬtB,ye 옟6OԬ5AX$'^c򖭚iu$)VsPcrK[@e:jSH^ r*iF3 T[H_̤imʐq:{\`fG| w/);qtDdV%7qlJ'`F>{'x􃥰PcGffhvڼ(݌5=fg-x^ú9MO Q-+c9އ(W;T{7 ⋱S.PCɷn {ipKLVBmLnYFnjf%})J`,\Rf<}ڛ4K1؞`>-ɔt~L^g*~.SJcSv#l oMtNrP+чRk띅_!wҍ*k2"Ef(Apա(@Ɛɛ_*Rz v^19:S!ڟޚ<%j/7<$JD ) Ba!uqɄj ڝ Y6(aM y|Ambv!MҊXvٷlxfA!U*tyOȫ9C:הi- .'"DR0񊟿0,j~B[kN~`)~0]i~ > stream xڍP\.LKcww N 4ݸKB.Aww$813sWW|{k4Y-f (ęC fB;ہ2P$A@')N (8998\ : ` 2@ 9IBa`+ke `0gp Nۃ@@l ZhЄAE d dgwssc;ADYn`gk ! e vӮ tv:O;99h+Ta ȟJ o C~'͡0  X@U%6gwgbG tfOwȈOd9;9S!P{{ IAOe`dm!P7_ C ]vpKdBfrrpp @5Z0o''>^0( `$=P ߎF 3 ddY0x=N_FOey|%u44TOBbrrxx|<f[By% 𧄧G_]0{S+ t!/sNk?Xoqf`;:i*OP]П W4+v,N A5VN=͛}tV]q%!P?掋5@xj/.^^ӀZw6 u~J<XBQ8׼v?L?]`صAOy#߈{AO<v'& ?#ȿ3_/E'fvA>˿kt@ w9 MMUpU8$ݶn2#׼c &GU K b ^{5HaMͷw&ͨsc={(dZb;:\1rܺdݫKBgw_+ݕLӎ6 (1˘&Ftf%Gf=vǚ:}TeF]ॿzsT˩XwhďDYOQ l\ Fs T ߼lF;/"_B[w.}=eZ$kvtCd;ɠ 8lϱ/ڼ] S fC_W#߿tLGe,9*W;ڤGمlj)|_:vDLL4{i(t=#q;SP,|fkvC_5$Jzҥ@.>AW=WUF5~bMsL-o b`Eq3;{&QRׄ[HRnXEA ֩ ,޴R" N73 r? ?@.wo3s(Jj|F^<]Қ:JڲB6ŚV2M^{\RC^keWvaHZ< < bu2"nۆjyżTJ( 5w/ףGhk`wGwzp;U h 2hSj)2bzS\b:I-JY9Xc7oph >ZѰ8s 6[C\Y$Cۅ695babf)y}j?)wBW͇!z=k8=wH dEc`ʀ+T!mO EDקN} {7QH:l(CYK|ޝ|ޚ}rt|\(ᇼƋLƷ#)B+_tI LiE<3m#DЂ?xn7;-Lq3ѫh {3y!,XĨ4og%lW4 wz֒Gg;tbqo9Ӕ}MOn [6˾)M a2jg*=+Jp90}{\ػG)DF`j]ʼcBThœ~~[VNvVmY ʇao6EseC}uHn&z P•&Q#>FD(q#5,$*-@ ߷EdX BfU*muM)Qk e2u7PaS7quu.YzA˖LCЮ`ڑ6R%|G=6K<<_r(Q uA9S^0oշ!4 Uf~%QC< &?[bШmϵUt~k6)2gz| .kqwvƖxaC+҄ZlB:&pQVmtcQ v#eJx#NG҈Ipk_$A&4".>KɸOwOdJcQ>FVin77Vk1MMN P]X]`;'Ax# (Vu(0C%Cvn,d =ь%wĮ VR$$Qwve 3%ж!8gU(E ]|n9zpj>$& ߌ <{i.{i*JKū-oGpbyXδC$s o⧢mnϵ䚈~oCWw KV/ve "CA 3Ҷ΋x r7g&NL -h׳X"VKGqHva-Ƨe&K4n䏒 攭RB;+YW7%73vŸ6wz3i36l$K@y$ 1rl[]#_@Ћ Nnj;x_k.LR̗ #+n7HƕA&wR ,Pf^l~(I6>TZdRU-Y ZG/.хfY[3|_u LHltn߫^&%#|)CtiTV9$4QvGNON?NSl< 6.هBKsA30w}ς2k^ɦ,>BH>htr&"Q})(qEKŷw69FoݵP/:=ꋀ/T{EsN?} rQ~T@q}!z3}/ oL'eӷ\_lk֪A nL桟g*E㈒k* Q2BB=ʱ?ν[\,t"-7 " #1.˗e%Y8uP#)qfkoٟo+jdXs_|Z^= .cp#N]'씅l:RIcSaM,rQ [ZgwnX#6EXkk ]"5FW`x%5bta qNʹn;u[t?Yb ,; Zi=[nIJ"1dzrS|7QG}jd0D5'fc^$z$ʯ0jE$W<L>(GO?w*K$#tsXⴄ`8YCʽI>A2=q|8bEJXC"yR[@BfcLGA; A`D7}ƽgh` &_dEQOj C4z-K&$91QtWȠ}~TS=S]Tb%fw)m{li[p‰@GϺ|SDٟ_ǒMA$V L:zɪ/5j [ְN8#gAef_&} 21N;".gJVA5IeՌ|;ggD*bl }8>rN//!M>1[5dfu;yDc,wˍ*i3rl3guKX=#I}VK(<ܿ.eZfYKl)Yl.aPx'F3)|(AAezwx1@j5& "8Y0ipXV܄;x2"@2|c;JGs_SO0:/g3"ML%s0+_jCBGoL׋\IBijpɇl ڷQ|w_Р*i^F]-G4 I#\F<{٘7" x!rHCS+RW0Ib6YhEP`[f ^Rz1111<=P+ ˋNH:,u6qj-הT$th|˯}"qJZ) +kJͨřJɅ> p MKUxvR`th@p^Wfx nN/uԽv8 قINzVۺ&VrߤbdTs e[.F3>⩆/^cTWik::aR?zUf34Hc!^R3F 0*;pRmhSs-=r.?N17R1(`$3Zh3`pg>#Liyq]`F1uˣHy)oG*  VwkPRW2Rshk*pl1ϗ.CQD>+uif* !J.?m̒w*wFۻbNBpm4쏦Ȭ_( }TbJ>A;nMt:zlLEط_L~lj_޼ne"#I7bUuj\yWG,ABb݄vj8A  m\ q+-p8b3vԡv}-AQkWt\]1wzK- 7NDY-3Cy>wݾ϶^Y0aok6i3}I 'ʈcƈ"BJ{pDWAeKP,\9Mg&ԟgmlGs}+OsU C䥌JlU] |QRdYUA2D,{(0`A2q Pj?5(3Hee˿39ȿ!6m1T>P dI( aS%z$09Wm.Ύ:N aRZ&4Pm@P@AU1%>%j"dnb>A,ȒB4rF\f7Pu^ bhWԖfVSf,pIxөbrkAt^UA?]-mʂa4J橝aEBzԐO_ccRnLt qybkMϖ.;20ǐNj㈖*fg}]i&cbHg&t(#kx WOAl}xF|/ca fj]jkARRQ~ϰdhFTϫ`$ TPpb)3HӃ`|j.R-3 S:2n˜<4[eBΦ7]snM/FxpZ)/>]Y&[NZKӄ烫E.~5L!^>%^g#3}oz'I oF(j_J /Gr 뮩 ~Lg ivA*W0*c&D6F΍c#{IEsVG߁a`>_8`תb>bM*>`803JvvM܉冒FOWn1dzm0ggIˠwj[8ٱ z-ғoOG_eӕv5Q N<&xxz*aI^x)*՗#<U6+Nc)vȑJK& EٺzIh(9w1g[|$(5!;ij>j1xue?S~6s,8.MvYv!WFrgu]+“p"~i:Bڢ~?Z"^ %ݷ%:/"idT0&zI-V/Oi+52\6SY@`Nwˬ'jgC_ D#iNo?IYJer~|NV0>Q!TOdɢ?Wh׻8 `$DYß&5L^~ + D?7>}HjdAj.bjzuK[N;OXvm+,B;iJ`b|i8HBtTYJt_۞"̝o]b$.9+VلbBE&?~cŲzEQ2Sqe=.^[= l^P NIG,3AbmmAü&ԫ<\Zl"#enDvL]N\~T9nڡxG{"n*[{27:R8P"F~a':aR4@W t([pWFCBjҶRZ8ᜓؔNr ?tr SRQA:-?)VS"'xLDzG.M8 =\bvl`-1Q%.! "b{+1ʬc٧}It@ 5W), }sziw},h?4'DF?=Ͷ#Yj#fxݭkILE7RVdAE`4(W%*$1i914V+#>oPw  WMj襒ϟgh_xr1nvc=pm!mm]ٳ.%T5ߚ 3Ѕ[#j> ֮8 H;;,0N *z%ŕvu!?z}Qme^EV8<"eę\ZgUۭ }[w~ (ߤs1z, endstream endobj 90 0 obj << /Length1 1395 /Length2 6101 /Length3 0 /Length 7050 /Filter /FlateDecode >> stream xڍVT'CJRp4H  F 6` tH4ҍt !%J+]ws9{3"8O( x'@!Bvv( 슄" Bu M 9b@ @* PCmZu$dprCP*\6A 1yj@(hr#l`׿RpICP(gI~ ɏp =0 x 'd@?; @+6`8еjmg0g?x^ @_tFJ ` n:ʚ(O/rB" w dv8, i uF!P_~A_QH_)B]6[=VG8 Yuq)V"@ PL\v=m x98#vh`?C(W77["BmPk=NOvl+` DOd- jIA Dhg_ku@?{Q nH}wp\ 7#<Phw_Yg?nNN\ AYBot}cP7ZP fD(R Ձl ;A`zlO =&0z]R nsB"+ȋ=x$D/-7p @!\ @XRuP ٸ7]%t0lC8; q i>g[ľ$gֵ/<#hD>laMXnޕv{ݦKߟqzcM3{Fs嫻 }r5 tnlSgrq'ɦF?Srmvp/b40}*%GtQ7z1qVĶ:۶i~by% OREN1w7x31҇ ?nn缒KH;.%v'b) ڛxz忽l^NC:bsTX >X^plm.- msp 4曅O?dgq[(ǰ)rLoHʔH}AS|)'t18Ϭ *QP(gy=?snwy Kr4vP8EZ>l@90׳"f16ݝ#,ivHZ.ඣg-Jo{ 7l7;?ԦkiƎFc2撃-&敏,u2dȱv+W;yxUS#sIWL@`xR:Uq૲pY{)J:(12AH[J٤e0ߧB~iƘc C#cD}m7)xbV"nk,pb<ȿ/:S<3~.f﫟Tgj˗6;^XՙK|3ۃt պإtkįwYO/4h4A:fM?%/xHVu?9n"\þ|&@h >(`aWᖽV]zF3l#yd)Leua0|v7ɠ]z%OQx}k3I[(sI65ý‚a\jLwls?p,~*Vo_%&I޺<7dpIZkr3+3;sq X?M_ݽ&u%scfxٖ;T΋l9E^V@rUN8oD=rkP$+;oB{fgwn,Kl %vX⿎j$fZ(u߈9s'^ 47dߡe|m2gmQ 2w A>H|ٜ#Ł.t/LnjNd:gy 3FDhgC\4rWN, dX>vIw;GcaoMhsC]h?  wyvO^0gQq#WOq^ت4Ƶ-ԜsXx9^ x?X.!RPAMbT7꜓rI_ȾAO$V\DźҝU2"뽵^ܩ~~L#qT"y([NQ IMpi ݽjZ5e*m8}CV 럷U>]<;/yF -9QA$ߔ;'Vg;{ò1:7&Ð9;g9:d!\Эz8i'-r4*bn^({ɧ;/HM-0 ``DZuJ |۔EdH`h\v%Cْ+^R)GY=sIΩ̊Iz$Pq z8{dp'3[[侫-'YN#жX*%۔#ךҏ=1+c<ˇ@k\4N0 ;]ܚ3)LeRVa]w&'oݕ y;؆ϕEŸ9{97hYL?013CN{Sߒ7{wWy n6&L?lG~c!o+!N/ɨ) !4Zq.ِ,mN.[qusC.).*ǟIDwQt"w/g!=&oJf/δ03gܕþ_[֋d{ )?tٻuӊz}di#0+iO:eGcE:KTӍ cK UɠwDT`|Vֳ*pC,!\c6Nojir暦Q X;&SeW\ҽ;OƷsSKԞPz~QFP=]2 9gGm3(Yv/Ncxْ(GFg1R/$PY=XA;̋a[[_:0|YKUQݩ eUzd,߀]n܍`_,4!|b6\|AN"ϲ%`oΉcPHw.1>E}ٞ~ װu7V8tVsO9pBJ8ͤicJFva7gi֋_ߋL>v9hҙcJug9nû;jg5;6p5nyȞ:,(%4 /= zT1&0!njYBj_wu@[HTKz^5yv ѝ8NȊ)S 4h2nm̢)HmY)ZX{8a/( ]er7B3)2BY`?TA>xTh`~KdTG~ĴݣFɉ8<235#ߩpq9kɽ7")֩9?Pt9p3 >zAH''e&K1GpAn9]UgT|cepJ eq+1aJ6- j{\ S!wCulb|{۪oNjR:?rHƄԶ c@3=?(KAۅ.a}[I,IYR5 ^ \5pGGZsCtdȗc,dυK9RH,8 f(\q?̎|)OYVQg;RO}ԉǢ.=Dj+W*jje0@Kmyۢi^>h*-ionL'|;~J,_اSbgC \.IPQ*cd! ݤo>O/oX\{ӄ1pm0޿((,f9-:m'W{Tm{NZ| onKfW0W󖨇C˩)'%[(.7Y=Mlq{6*l$z4*-D~I"M߲nwkߴCD*Ϟ_?+ 3^?J\X/S[ؤ@4e3*7t)3ag/ꛊUu!v%/v.RW1bm3= ~8RߖO}4^Zz-{@S0<\Wj~z>ZR2q4\_4ʙF=[GZoWql^:eYs"sf,JIGBʼĎcgWQy.9SV =̑. ~NGgZ{ekAnyX CAD@Pˊ3oqldɟT*`/A1Qzޞ?&En,6^Z4;-BO5\\~7yٻ 0?hɬ4'}-Ǖt,0j.Q#I.o4q8^n0-$n:ڤ=⃭`օtODA v›&G]S?eRi]} 6I|oa;v{XӾCorncU?hs 7ΟL?\-oSI/y% X}a~T._1A;n$!Bsz%@:UsC[p>| gGOf*X 5X*gn0xggR@ͮ/%ײc՚Aj[X]~jzt#1Q"U,,VD:kЮ6$G7%* ;MiRʂb:kK ر"|JŸ up-af2 EBfӴ:`N MPr\D Cm#Gs!ä7'|m{Y>iܝQg̔{;7yVNS( `qAGf5?>\2J+:J?`hfjnu5EA1-&y(ͣ hM%P &V)/R;UF,:*|jJ)O~{X^Zy=0M"ecasbtL5hQI-׻7sS%5w3^wT*?V n8+ml%1pgZk"%y:st[Y ϸ?"n /&ZEZ+ZQ q7/-ŗ endstream endobj 92 0 obj << /Length1 1412 /Length2 6198 /Length3 0 /Length 7154 /Filter /FlateDecode >> stream xڍvTl7%1eJo#;0b(%H )"HHHIHHK(<;}L𲉹+B!` %7 h`(cPA QH7"*@`$,# Ԁ#\@=AP#P& ˉ1 4<>07CqAJ!tC+@P $, @V _T\/,4Qd?ˉfu0|\W=o4mL3m: 9uJ5YiL_|3xC[Be57*ҋUO0I!a@v`Mw̻gԧœ,#K \y(EvFyREIRxɻGO,$mvˊJ>9hM,QB^{Kzy}f+u}?RL;j:XexDfuΰ`{zXN%=˜Wyw1wyy82.ǀhyMi _u|.q ]F#dhN\+kosq9D98ߋpQ}(%4XoIBuE,mI9}qK|iH僒q4ܴ;m<%TI^ [IvO_w͙h3E3ja!WQ-۩go^#y-զ[}ZGoFXm]LiC#R=ww?9e׶kVZ (ZR{ii6H$o,yuOÕ%fR)A[4znY`BIэyIK6^rl J\롣ɫ3+΅Xt}׈2 [z uvo̽aדy4:]=?\?28؟lwt/L9 ݈\! _f^wB>j`Z24R4$R>*n :5$ل[8}yIh~wgí]I0\+ ='SrGO<(~^{:I%~_5S;Ÿ{sn*Iwy)zǕ;*Z7dFȢv.:~N9b*O"/w|}=TD 2_RQ m`|TMY#^_F x?bJb(1Q0^H6[i(.b~]NûXu>,U/K+jN{VmH= lTIw62 {dQŅ~tΙk ݟ^uy6ӭN4bHyD!WmsD3}ZB. p908q>ΪSNQ ƠHJ4?XN TߤӞu,ꕑ..QmN3vS1:93Nq3nܜN%Wl9w03>UJ_Vۇf=5t~켯&SKKndg-\~D0\,VD1vT#*hV茙ݶ 2[O6_T&c:"9#̲歮ˈKF"_.Uj/>S\hcv0$W9XJ5˲Mq?'s96$*iEI dj~>'XH>[ nSb,Hk~U(9[ lxPAښ7hIQ|>mRqΣ蕎ҟPg+75TJdnFtk6oS;D&uY}O󔳂:AھFVK#Y k.Y37 3n<}M1jC2єu^=Wo)GgZ['tWi.L+HHĀ|+@?=إf:݇I>$24[k"|WmTVP{%g ߈ÑS1 <Ub!7^rByk*nt[{&w'CLmK(f.6,%tm koa0mmӰ1Ż&;CD -=oz4qN9G DiƏ 2 6#@yw~kڜ妈|uG;A|/6;9KIԻ4nAHW d8jUTPuCcVZR̳yYlyK 勱_m^,saD1ZFO=)fI7MK5pIr}FmKlUFoseT8u_beO5$T\&{mK$u'NY\m偬oعkDgch33>k5]8m:οl ybhˑhGvMUNeun2AmO;Ď@Q G JZufXԲ>tlpx)'5v Pe啹& ˷ ʨ45 ?߲~]M )ac3'zA\3h&L QTj "RgQŃ"~&s&3՚M%ɮ9hJqeoz>9!/1~^N3=4DFq`J(&''Sj7+7 ch˱ciBzO?pKA(<)Jz# j~8 ]b:6Pה3@c"۫h-gpN,TKg;mSx܉v4ͷb W]^ˤ;YrEY48Uj ĔG 7"]-0 & .P(d!"?FW'{ruYgt KOP i'pt:_@蕗2>+RSp۱HDz =81f0q$>1vq\%@eUÞNo%@:Z7$mYqrGx%݋exO*ַskޤ%$TvZ\旟gה#Uo|f]R 2_dqElG H#2zIQq#`A[LuUX͗>cmI)9WH~xq9-حk^: )zS]ciYƵJܢZ3%?nW<")STՖUS1/\)!=w*ʢRm&n)i߶dҪq՘QN.%ɿ‰Aa3A2ǟN{,N/I0L ȬR- LozYp, ~5,5Xsmu'"G̙wr0h"T7 KpRJhs'T1*ojVpjq!"4uG 'Q%7c>U5ݼRW'Bo[|*A~Y-F] u:3>z8|Q^<}`%{PT( Gc3 -鴔'eOؾ=qpJKh JW؁Éw)B#wM9Rx2}βUИd]f'ϒe L T#T:]QIFe3+eZgRJ񆛹CSCW쌚,{~ݸ?Ok^:3WA %KXЇ0#{Bs/R|CMRj].鳁}Fʧn2k) $_Ki݉T[c13V=:$ٿn]Yjh(a|^רgh=DžY E \iSYfL[U7 q})<I&=YvYu[{VLZXiדa*i7γ[T^δ=+P$n.7㹙Ps,=5QJ?w̱&zQeGPSEеnS6[kXdƈѕodʬlk:ԑ781Ԣɕ}+Uhmi>Ȥ#!ofmlE)-EjDu{42G~"pq?9SʀS.y=QOM 32gSkyw3"ρ7ίܦ |m2b0ywCzwoCS$ ]ݙgDi*ŧHs#G,زB}/|-zR1e}ϠXټZsS[F5Q:djL]n@0.Ʋ7͐&HˀT|uRv0G[ɞ~cW~. b|DB+O;n5#T܌ $x]k˞`V'9FiDsNK>6$ WZSD7,,pasΑ!/|Hwdc+ǔ"wHhƉ_~0+an8|͇^ikrOۖ=AB 2ۡ0"cfnt4JԛʜE"50}K>[Um fҼI 0~I^9?7 .v2Wi2Pr i&ώ -z[/Α7Z5U_ޟ4Z*=b}T )Χ$e=ɓj׮E6eB7OgRNc&~bMyW.$vm%XYΡa›7aJ Xrۢ-7fG;N}Ui!k}mݢm'i+%7:wS,BB.^2`+ufrKX)rlͬ<89+Q; ;~A~2-sRI7'  Y>Z-;)pԟ endstream endobj 94 0 obj << /Length1 1401 /Length2 5902 /Length3 0 /Length 6856 /Filter /FlateDecode >> stream xڍxTS6"wkEjH $*IG^#Eқt)J/"={ߙgfgv6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`G/={7jg(/1#!pG]`w9п l!Pj:( hC"^P{5EC=~H@Ba8 J>fU2 G!OWOs]o+E]} TAms@I11Q!rUیp@4PP@ts/$pPh3 ;kp[,faajJJ?$_R _'7V{GFM8&G\Ɔ z!PB_C;_YWH`|=ətu}L0.5^jNmW0@cj5`q֊3 i>F du!}3fI{#%1BFn0?6AY W 2BɦP93&DUg5Jy{=֠$TM⻗bo}ѫD[_-;l%-L-0P=ֹްn[VH x <2cf4VM;)=jK<Α cVI0HYZ×Қ@(5d / 2L07^@<+Ѭ56AF՟+"7IAµ+X4ƽy}[ԌtVAO{(2򙻦r6~5 VJ:-Fh+ԬK7,L Tn3C4<]jOiHcN˭y/>QV[sz6m/#\Cg|Z[A\NW2xlKQ!{1QsHϕ t!=)v(dx@=^1 8(<z8aU}U]Pa/K#,2Lfŀ3ArW,[#iYÞZ;\<첁2pC8UX/EX$=S=@kX֦HX  TPv|C$jge|a{!U<[ GܧkR Xzf #<` w6ɧ`{S̵Ɇ5NcBkO |Eѓ,1%Y"/r^MVbDkE PBLl(ѭ ;|hyq%^E(Ƒ3;[q>m~M*tS`X}Eٶ,L"S?ګǶ hgA2`epb~qMEE钆^ L TM)t*CTIcp9~%,cb#%Fl[ڤ~vLP]Y0 }?KB`b7}{jt}E:DA#MEwN3>_Y*)ȹOn;wcǯЀ $3ù<˝<@;& p3o|} ؐڰ܋jt4;a#NTw 7N p C̼ݯOk&7< 5qɋqRqS_j(E݁ysF=Bֵ8;r@qKpU],t ߺIP:u\oVfXjx6ޜoţ@:?gH ]@)W7Moz}Eim1*[7=0j=U\ƋnxFЪ׸)0 A1F4>+K!]ޮKQ4LBxPޣP6 ƪ^3yh7Y@@wO_&3Oh:)&&-nϾ%w'h >eFqO .>.wp.y^~!́> h6#:N:9e&-;WqBDq!q<:F})F$d[+WʱR2ю1s%ĉDbӇx\!rPzgo^_R )XK^Uؾ0l2m>O`E` X%b1LȤQHȵj4CPU=G]qQLK}_ ˶b/̽~{Ōa*T߅תT_:ПqNcA$xj-vm vdK0B0){%S8S\y)_pO.)8iXh`.5s->8Ud\?<0kґFڛ3Jwtc-*=BoaBbuq盨Yd4vAHtϸlQ^md2O#v*qh=\΂[:˰8'봙e;W2zi%G(ƒhKVWEM(njKf?-3Mt88Y<6 ɜ  uk]LStud?w+y@D52}92Y;!,]eK_79Krngavn$Xi/]Ft2?vc]~54Z+rXx>!LT^o.&Os|毚B9\;dv-Tlm˙{f}i-%ymp2r]$;3̰YlrJA[MLRuMI`U$MY䦝'-3۝vaj}E- J~6DOB؍;drV{^t{k֎}ɿÐ)Wȁ\i;l)UVz<9R]=BM-9k3>gb{)KA1t>W~QAMb-RIA;0ΣKS/|-{'mM)Iw4(ɈJ?PXW~΍]}#ז9~*鮮n;~SC8/ O"z: &TȎK'y5O֫}54`}=[1m'VqAu\q%ߐqYj'^|=8!ٚPj+AVA#˩lZ">glj24TOOp}Qɾ P9_-JQk1OQ{#AEf# դ%-5cL/*|> )^{8%F=Kl{ArsA".aa-קU.jTY*DAu!9MB2]@;FV]ԓ={~pnuՐ/d&>xZ'˟GDn?ȺϤ]ѿ]SELkR?ge3XvS%275(#OBRfՖ7HW`H4&yff 7 w:%%߃J[H16 +Y| q5r-) {yXJKL#cZr^oYB貌'!#ȺGO%c iH)ɫ*^'o}֖'E{w IG:/'8?g;Y,Y}yj>b֜7NJyq gJ6"ߺy4y_aj,{Ϝz.4_Pn88_~t]-&}M,R;7;vlwe.2xIQ =uVѴZ?*u5CWvQM ^8a6zOt(?y]5? KA2+Z$}g"檟.e (gtb 0,(⮔?Rj<8C"}J4eԴI76n8m{ 6IƷ2lo,k\bX|ާ{XT ۥfwd*0E{E$fr7G?$.iwVм@:`Vyd/d#/{vdxe)b7XuynU߱04sVtJ}cW)cZJmǬᛪrcv^/jM@s8G`XVt.U8ᾱ(/Y)OGd*/MYS+;nя^|>xLҭͤK& m )5 z'mɆXQī~t-C-/|O&+W#snYN̲a]gE:)qG('5>ޔJUt +^ AƱx'BEԻt<~BN݇=cY3.8=(YE{;̾HoOlӟ&1*i$ym؏w4qc|*?up|'V;PuwrW]0g"陰>vƐmAw˕ו4MK޾:dكN:< _ҝ \It~^$+ȵQƆo]o\Pm̈́Ieu!ZARtSrCBoSY ۟|Jϣ]zJ^}0A+'NfIx~xOQ>.+=FhmhziL9,/k4MumTtG剗=T&3J^Emy϶L;ޝEsytp f|Uyvgp_oðwS0r:߼Wdi|IYZҀ?בψV~rKXqR96@T$Iۚ ?Y6َNnj[U/(n4R.I9ϤD*Cd= ʮ> stream xڍtTk.]  H"!ݍt C0t7RJI!! tw"(9kz}|EKGaU@Q< ^>1OMre&bӇ"]a EB(MBǩ#7GH@0k:/@"0[;߯'i'(` v" 0(_%8P(g1 Ãʋ@Jr>xPv+ ;A %b\u6(0 @a("]e53'XOC_xA)WB0d0prý`p[  TPEyp_`GW:9o(Hkhs a(W^W/_eS["p+ѯPz^?u#<>l`pk_ ݜO07_!h?6[( HXXPu@=!v__f4?g3 |\P ߎ@ 5 XAmapP?g0O { ߯F _ <>< !#!ď~]?o A8_e( A~x}!7Gn v9z - uZ5:^e-i-< A^>?vjCAU{8P-+_> 诊+za]PWAXR0D$2z7 G)4F? Ik| J7$@[P'B43< m^!>,ި;R>N ⸋u)`cS \G?},񫬚&ɊnQ٠Tc+BPLvܻWrbiXڨWB7 ?ZAQBk.N5T3# gGjgOYs xM8" B6dعF~ OMHy' B^s(gEdp'2&j JUKiO~AG/¯zi|ڝJlúCYݤO>~&cl>+%L\:[l&xGTJ 6% d_gh.l1T-KHZ0d`a8N0WqPDJ HNiġ})I+VEġ>&@K@JB{wx/rSf)>S3)05@?/SiwǒW:T!Gi$O?87|-B zNGe80+nUX NL%vw QC&{[6̘X1^nCA>} |y!%WV}WaR6cl/YJAkQM\]+^n1Ǎ+vTg|vI1x302'r\l]0?_"mR[snT菍) \ȠYγoswsa]C{,So3't8sĩzP ,`,^ʪ OoQI^wyԸ3t$]S*aLZhJXD.؊>׳s} zIϓS3c{"JGb 1 zBXܟGdMNP+X3+`d_.ђwN yp Yҩ6 ;/+C"}e#b-"E1[8JT>^֪^~](11}ԭ#@yjRlGv+?0^$l6"K}.)yb ݴ{%' ܑM_[!ief?`=90~o7*<;rc5[yP z*D^ #~ iIU*!|d2D0k}w+De!=_Q).Vn|[aq0NI,$kfNqJ@wJ;C>?9ݐAK7uֿ+MUkǤzo5_\҄WXuE\LfS]k5^nM;OO*Gn8bFjxfM1G3TwNyJnjZ{yB"V,Z7LbN-7=)S8~*Z72YT廇CmsLt$K)X̢R+?a ;.OSnGs[\#ˣ[Hqťv5 Vߘ"u1I]oP7CXO#wk}45^~>3d݈=S:!)58EbÖ"x-Ŏ_$ &-󍶒ZXƯ+&xE&wDWHycgB LL.Rk&i>~l߹FwfԆsś2_v[,>5bê_ޛk)I.@9*r 껖v嵝nQk!/B|uK"KxT>*DbglzcƢ. Ҭc$%*7۷l45wL2WlV} dhzel1iݳ0,U8U4JVʂJۥ陛gOqV|fSeiX}IeMqmϸPs"d$ f ] m!g?50K⊪oE,h(V´z@Y Ibi?bu,V%ܣ]x࣌ƹ׫gkWS⊴Jy*_UP[$\ff;, Tgܯ^gTF i9[c}f+d"tIYqiPzYz8mޢO&!npMԉ搘"?WdK #zAPIj *<:\ZOXZsuNA_便ba_g>$:Z;ՠ<1a_KRemٻ=k޳[S"'1|:& 51?g9c|/3%\FAnDY9ό`3HN{Eysw"Ay~3&;{Jr0bWIN=HaSOpSWm_2!&f.(5͐ǔ F2 1^RsvC8j54?Up*ոu ?ƪGX@oē|F;8do =rw%ffEKȏg9? 13Q8|L…-N5L+F^VqOso\A $A4AzGǚ#P`7oGeeu#:+?5vɼ`\ ș p\g4=}M%:{(V1p]J9»$ʃ|GBHCe|/#>I<e&sN$618G}kl` 犌,Ou*m"Zb@I\#^=mVs.S˲X W{0[^`g s2椁F ߤñ7m"^#3Rܤ #m ghg" Y l+V fRz%g3j,.[WRruI?n.>kd#}cYk J1$uHt#Yn:`B)JYl}UFdWK63Pvrk=r?Kر,o1r|UBoɣ!Tr_زٜԺw]:+7´abd1ϰZꋼ~nbF:zC=$eϰ Uq|l|ʨ`!X;ӭ3~'ݏlԼ4!~D<2ܡC i7/f:?4 s|ٱ?9*+ຆ*6%0{NTd_[O㷌lr v:MRmkFlfGKԷ/_D 1R#eֺĽjj#%'\7Z|,CnɞzXPќ+J@ w?2ö,eGq 94K'bpSI< Vi&Z<[Ƚ'q4B"9u,*S1xbt.XqHkk(h~L'zy|kخ UC&^fR8c%Rܞ+f,&A^ȯ"LQTz$6F:}qW;iϾk|21օr--RZNȏYs<%fU='970(GTvy Ǻx7 " YOVd'555_[#Й܎ ~Br|fѹLfï}rֲD5 ;Jo)sW#l"+ٴTJB_F'~7䒗‡ķzTS ?w߼(`4)l {knbu-,gZ2P:>4PZ=3Klj:مxR{%Tl+FiNn<-ZobdZd],9o>.xk36#RO" Bo$tR"i|*6EHJ%;% /pnO>WWFiD4Z]S9!T@3> 7fTcVkY\5Ã-{e-=?+:lS&Y(P endstream endobj 98 0 obj << /Length1 1744 /Length2 11642 /Length3 0 /Length 12745 /Filter /FlateDecode >> stream xڍP[-!H X4xp';A$23wޫ-&H aageH*kɳ8Y8Phil Qhu@.6`XHL!2)Sȫ#f` 8e"2u( WZIG'/+kk v~~^? sS0@b rxhnjt4A+5$zxx::X02NNW ?K;qqS`acl(*Y_b x:~?~>N#? +7+%$=>,n6;;q}bTQlߓ0;< 6n67DV$fo/oyv놀TB+,lW+1}q뜳sq%qY@̭55 jǻ?3{}[\_[ YWlh rpL]\LP^'q|_w`Gȫ pDhQ+rJ@6N 7zYū|P~-PR\_uxMO_ 3wsqy}ܬn @ syGsۺq\瑗HDABwQݳ{Qw8/vzlvFQK f;̾8ǮJn{]]L8Vg-<.f :k>CoɊ3Hlj!Q%Q+>3)Oz.6~H&sx>0=\ mNrtxu$vCh2 &|tuTSZ0[~w\|7F^êEnhv VrկMdϞfFoJF.%kysrӗVTȾAF_DR[Wvx*H59{&y$M9HTK DNF0TN 킽ZVS31uN!/,M^ 'x U{J4gq8~1د;e,7"]V>0j)r޶%CD\6?sm!컒=ec9ԺC:nR/Kf}/ԗP2QH <#sP/>Gxz6D#4ݯh/mh~שFgP|YR=Z;@:SV]:2nS_PM^SzLYђ |[q@, ZqyT$8*o;~箜"F!b{@3~8NV75X y \l-H\:`J74 ㏨/7ڥ|e[,H@`2d]YU "M!u35bj\%Wڙ?ĊT2N\We;3Y|{&}ט[  E YNT /kiɢ <ωERe~W!^BgZ MO1 8ei>NSl^L[a* s.?q\ ݭ\-W8| ~WB3bc6e~y W/FV*:BPW q)liX?ſ\!pL"6`xX+J(-^w s !Tqs"*>:5?kH[~} 'm S:ٴuE;&Dp_at!-N'pT ޷dvS8!C}}?* -au -O- Xe}}Tqs0d 3@0G[(uBG 0vw}\[[.^`fc4Pފ{AM5g$V/K5yAiwyՆ#DGC>/5/.~Z7C-ux`/uy)RIJxIe tVUq9]r )yt\2%gݻ!P9A^AD|Ju=&& ,F: "H1F8r^S~C\1}2rRVߥ/f>opBi{/Zؖ9K9i8)Iu//6vCPy |3S;{bo/)PE27 *Ia?HGLq.b&s')WĽ#@?:51qoMt 3 *fL}Th<2deCځGӳC(w@H>Xuo 09$qוŅ@I4`(r籎FJ$fŎ9`e[GwWoYS(s iCeS$<biiׯ.ɬv GK9Ɏ3ֿ(HQ[~ŻҮV>>T}Y,w"")!8̫I.XٙsTTsBY-*{6s^k'3r_r~Omjk|??թm]s9c$|^9~uQ12wxg }{S l Y3 T1߈I8|W%ۍ~.8_c5[S73(^tiU.y8sDhiGu]̶ExeX)Y,ܣOe!OfBO5{G8WSR܀c`)o33E&L KKlx8*#02#f[7IuEY#~?Dna$'aڟr16Ё3-6tZ=d~D}z 9꤬j@uh,d)濛{\O2 QC=1n1{ xGMv#WӲS&B 6ԇR9M<.M5\K7v\kވI3e7C^4؊â!8g>s]VTs%7gR¾Q e (;GbǸOPC""FǼdl Eԓ}DuLS6ŏm;vn2% vFs $dnDyd)}Z|zԧ0ٷD̓4! &w߱8&m!FMߔ}>)>S?q A]K0ue{'g2gBCrՏ}2#$k >M}w#~k6H= @7[Lie>Lx?{(YǑ8;M!0TPHLU%QEhEe(G"qkK]d,&uvi8raVISWFx1bz;88kU`R5jU84>+q@[+BH̘{Z/-Aqno3YJsDžZc>-b\;9Jl+quÑ/(`!/Z $ˈDc4-yOLғ8Z-$~Ū{S5s~> eu'.KlCkШ s c÷"mXȫǣVsx瓫 @Ŷb+~a7|S/g=}ڳ),*Iȋ\eyxRWW=>{v.pZ3,ŒO5 N{ e#'U3L`̱A9]L<GCЙ}|ga]f Il{A Q6ޕn< Gq7sU/nrrgJ/GPs&L{ d8i&j3U_ӍƾYuA ?l9ZM VE~ן++;Eie7C&r'10W@/)Cj\fv9ha*AEfSߚ4>|B.R D i9`TZ]>#r$E d j .]M \ tSD]7A*D%,eJ3FWYMOR$)7zHG3u*&lszTqܨyi_%5-#\υ3ItFN/$/ R>˵DvsE0fd:U$P&N iJ&3QO')I5I􍬓^lN`bLׅ^We-IlYAbf(kH1:,/{$<=.7G"+`܈)b5zVlۉn627^܃t.Y%ưI[%Z{МHީhѐD״P^]'j\!Wk6#Zа%Yp>f LC՘'y\1C-_܇wtH6nyYdĔ|HD VzJ1Rr?'>au;b< }qtC_ s9!5GP Lg pI%bt8ɕf<$mЀĞly^ v0)+R]%"dӈ bRP4GrL-E&3;P-nP^V]w|Oͻ ad&B~Z3E8:gUWaOԌr"=&UY/47@oV>Z(ëmy5z.QDHn1(ۺ"ma\)>Ȳv\E&ƟEuRar@1" unlo9IE"g([P+CԊhXmvscf'~2 >%j>-y.C+bjLKA+a=,S 7GJ%92Ą'jl*^ "Q%$CӋ8 c/ mTRw"Y  ^_19q !D(8K#F5$sEPq+h#[z(<ѣ@1yv΢DHPvAl%X1%, <%nF}0C(GA{},<("\ tb=Zz%fCݕȔS@#h$CcpL Nˮaڷ߭hԪ}O]Eh۝ OA}&?i<187}|),9d[`q g9 OɵRcU>/ìk:$(6KC Bwf G-24ԭa'ӨwjkI[x7mr4𼮍ٺY 1m^3)ދ6LH]1q5ӝ R/(QOgzFR٧s[M5!?!p\3!{E_.Ƒ);*WA\"gݧ蝂t6cM=5QF ?}Y O,2[d[;@<ӚӪG\g=#+LAy\ُ" ) uy.sM+oR "X,A~ *Z)>/=I2]95n!߂U)jߌg<(*8UҀP@g_RGs+W#Jͣ9P鯇RЊߊ,>[=4-zJ/Nث5TIS5Z!SE7="&te, ?Cph[mYhj Aԩ@,. +>6L}+> F _#`=V:1Z+?V?VyZ(VءA9UKT*z+ ϐ@>Tz&R~W{e.FbL Q QQȍ b&3Qy:T tߌajVgN@/Ѳ,3f;Y,1~C&k]|5.QT n- ޳Ty\ v?*lD@gdYpQPUuB*YڎUz?i^voyhuz<[rmEmkf?Ў]OI{3d1Rp3N~>?김w2^yey@D_F~lowA'’ LNI}L*λKꙨcQt[X :p e\O3#&|;:NKvGf%A2N8>%!gm3!r nd$ʓ (T%tjdҷuiݙO o49da 앝oإ>ڡI>2zU{%jzW'W}e!EӈŹCKY!y\g삮{c&Q$Uܣ_=r.h Yps: DS,)B;eթ@Ľ3ںyd'R&èOn\l:uҪC 2WˎL hX0&u|&lưe-CYLw'9+R)" '_S8BT6Qڶ?dvuZD"αkm&)C9Fׯ˗t~ (Y(ʝ}> ~/G A a n{|P,~#Sp 1i##wK4 $u۟8G]?F[f>Wz!? OJi68~+@kVJ:5V `Bm7zs9粐`JpͺS Z ef[pT=$*TK®;Oc[ܑ15\ܰcq(]y3dWƅLG;GXI{Otax1f2Lx.\l$ŒByX*[/JH~Yy3+X,{CP]Oqz0L)ӄvcrpgtk䜖Ψm|>hNV:+w6I.i%A[=|GaN`j(IޥvO_V\KfJTfBm)G`g.ZDmBp2,,FܞӈF!4 D2~΋ZٱOEgGZ{,#Ku]16n!Ty9ٚ&?;%|0GDd*OZ~JO\f!OO%L'L .P/h1f'+c*Y"2XFv,Rry7L5`@`=F!U!>3;wiv Hwyy5x+| yT IS~Z:g*`,HUt)V jb:;.䫸;w/ZcPe ӱ;\g_8[8Zl!zMohFsF} T9aE󧐉褏B ԑ)~w\/D2)VLn YHK 7\.Nn,ˆ庚kj"*FW{6/0 #UIsfJmߕfi@F._J,@;\6X:8hXי3OĻׂ\5d 2i&_h+& _Z.U%g'ȮR|ʍ4u&)j'$,:յ-"f4LHΩ'SpSՖ#(f>bQz ,q[*fuyKYɅGt7d =ߊBx;'"LtT=|$gƙRuAR|\Z5먈LC9`ح=8!-Au,ZZ366tH#)ߚ-ACdwAY#Y4x`` A4~G)0JB'oCH[ξQHQr_l~a}Cxd %KD56sLter㴮 v=&[̮0IO⃖6⩈(>&EhUQ Au I3fcsUS }G>C3T5Dg? sl[k3-4wq LJ츑.Jlrxd]-g(Zb>X~;5M43O'}+fObV}!~dx_c f#%F[P07-O)}Du5mz$2IY'Q;:ʻaхQɭ)PbmGYu}Yj Laf/otx-U\Gq_b,k_0ntD@ ctX&7"7.U|סK/X(=Ij{R/jS BxuXX=ޢp+|u^Z6aTk+}ٜt =/'ʛ38\a>"lnbZ쟅{Mt|?Tvn$j;ZpM ;}D1y/C qHq7b,2WgۉO3N"8֌d`D'ц^z13kwC3 QJ3kw8Ycib.a$] FWfz-6+<^jܧ1&I7 X 5gx4܍~ntrɈaoږ M>V*JDKo%+/uk7(*hF endstream endobj 100 0 obj << /Length1 2645 /Length2 18323 /Length3 0 /Length 19857 /Filter /FlateDecode >> stream xڌP\ n%C5-%hpx}=$1לk"WRe13J:31X̬HTTj gkHT@G'-b@#g샑3P b `qYYkh` 23dlNHTbv s gp~КxvA&Fy#g 85@t,,nnnF6NvBt7@tt P0C frB A&@[')P(mc,F?1lv6217ٚ@@3#/C#k';lwF e?LANN 8fq[S1;_}9M}`pll@f0ugh rpJ,B-3:XYYy9@Ăjl|f`@pvtx_08 [b0AVXxLl=~},2 PW)*jb0sp8x|/r[d?IۚCܻpg.hY:fPO3@{uYXMlWoWIX[dx]!ok:MA.6W+l[s rM@&Od TsuXYr&V; |Xߌ&v;7<_\\/6m 3f0sDH,"x,b/o`X$~#6o`8,ҿ7E7~#p>/8oqX~#08濈_؃_p4#'hb󯜍3/1x`@NVC h 4sC?[3V@W2qsY'9רfjgmm,B.\ xh+f [\Kmg$`_OU&-~ShXn調ZzpOY~Dz/o\.6]Y~W io58=ql?|6>.Np] ~=aq]$e.v@Sc?l?f;b' /7@ Y-:.W';?[>7? @?VwH@T?#?Wo1@;iiD Ȳ&]4:&%v4d꬀u_"C=7ɞC[[ Uv['' Ej 0~vVn씡qpESþst+[ UޫE~*f_1BD]m]#Gr]`YJĉj{ |Ar::vAFP7lN]jVcDn:!e+{/inn$IE\Xd&ڸPh<Ce޾Y1z?*q9&mPh֜]q̬P#ߦT ).-mAоDH`%{SF79#Rdk{GwnC336Msx{ZU8B'̎qf^ߗg~;bd+V1Uv&*ƪ~ڀicD/7R;҇8$d?ISYTTB`Yfh~"SpgϲOKF|-k~%NTh37BTcj)>;ys=%g6,a&7P~H`p~ RRS?K˱?8a̚缫je n(8:MĤ# Qct#:)q6-Y|"`q-=T> }ɟ/{nٻr9Yr8:ߗo~\17osƆt7zg-T3j6[z{tQXbf~Bi( S$*As+QSf~x"ުe!+n?և N=.ʆC>^zI ATH n1x7!Ud#2;Ȑ06iGJ`ȡDMvQEޭJfX~53kMc 5Ŵ4{С/}e(L j!sxZ ? QF%.KZ?0 I!h+ghl Ҡn͠ecfo()0xErHf:ӌ[9cvH{E}h`TV6P~ذz+C܎V*hStD.h!~ r=_P[kAA) |nᆅ>\ZtT8z!},2{!گm4_ kRu4w0Zl{s>vNU(>!QRx3d:ݥ]ğf9 HvcsZ"2znYs90Hb(&~=DTPwp#m6/qmx8k ow=k}c7RvVc' qBKhI~0K!7eVr12[k<Ӣe:U׻~LUȈ7~ WH%̷ч[2]/řxE R펖*Q=q Ƚ_|+L?"1;KX8/ҳB8|RO6ǧܠ} }l߿ FA-k԰'q-{!URՓ1@C2(| "}Q~7`#&_c4,AgݫZ[u:*lUt5'1[NFW^_˲g%6]96 :X 6?oĪ{g-Twi^0 I?1i<1v!YY{!?1BZzSMR vAɡrF(P&q"/%K(i .p |<S=/%=][hv=I&/${D:7Sv(q!_ൺeY`/E}|8ұA^ZJ(71虻C.D*T6R!WjT3)r1x~NB4Ctt^F[I<+zC FtX\ImYI06E:AW|Y](B؂zE,WJ"9~ kX3F`_$&+g;:%7%nϣ:.h{k]-`TnuD{I c> *V,ar&?*ꑪ)5Y!]AOT/?lYg2 ޤtyDSfZ~Y$QPTeBxB^ c&z[vU!7?*VŞ'Ɋ[z8Mavr~^̺*(iw}>7ThXeΦNyxb & ŏ\|{GofMI #T&JBhm66aONx=}cGo{@:t܋W,^̻08BɌ5lFLV_|Muӣ;h CV9q#QiUQ\ {١hٙNTP$t*SO+KKހ/R;b~3}+#dž'-_7(Mїi\<܍F̤qr&۱YSx.jىwzǦH 検6oVqX.Z"GI\w|s#0|h8'vWw(J7fNxxz0:綏=`ȬO_-t֩~.ݦ&""l>6/1R2FĚ]ј'L%yZ`SJ c!i@ K΁(Dɖ?xowm<۬^Ƭ PQz3=pQO!Z>.&߇jgkYq2xH(άf\9)Ӏ#B=0S" ^Ad&j]LjF7u'n6}ѤqS{A!Fի_]I)GH<,ua-Йt#wHgqmixq*gCh޼BC}i$%3x)rǍԦߧP('ُ[f&Yh ܔL9 N}Bb# 2XQx:+ @ƙgY~U:.|i.v_GK^V'/cV$(HVC r7 u0y\1,A?z4.)ՠnBJ0,kR=y]f7v8ޛvv'VsBdqq{?04SA:hyɘX;˒TM-fnM]׮~2}mme*7}9଻ATK# nZQxX@XvnyvQ˹fs[.;J҄58va"Rs#9r܈qD`q@e:p{~:~H: RâSJxt搨Zcܬ%> Q՚һt{`ގ1h-Vyx [5,ߦT㒢o!B~ Jap vWڃz3138/HTFK.<&4 \[,,3tX}1 & %!>*Z.JЍ&V\vvk8;$%ٵf9!ПO%{f1r*ҶͭyӲ X ǷA%#,:﷽Ċ!4oP4"# ~+kVoZ:\b 1_N wvV 4L*%L52͔޳dD6g#{.;^0y9C)ün/h^|02Z`]2*%F ]> A5 )b"igfQ;Ja ~`ϟN !^"m7K29zp(OT__V+`idM,8ؑ91])}kEuΆ% z<<ȏF4۳u\KPȹ3gl|TB<툹gh~`dk\P0vios:Ty "ep2 oA?EqsCpd| @O#g~zV(m /RhBm/G~Ǭ~sF-]-pA߸Ɠo|xf񖘺3ŪbCD"ֵjwi%lӰpb@\ƘnkHizPQ!wj,)!4\k=Ǎ\3 IBB1$ûO{qKܛꨥ2_ bAhGRs<t|GB0Szu֮UJKOQ3:Θ-Sn;S&|)Շ('X^>kUpZ:5P:2d:g<ѭPGi*Ϣn$U֚kYo`j{5ag>o!ŗCR}cIdRF^OSӉK,8)9 !<[OwjO'׈3E5;&,Vi#ބԧ1]VSS}aT3^N>(K641MToH76vL_HƔd;(iRڊ $\- @HkrE%I| T Z xIp_.7+XJ9Z\,$?|xS 8LWpV;cG&;Q> 6uyj2;$&ݒgYzw?]gEi)&|.0K도R38s>HU. ȼÿ&x]-w8(2l}IXh҉ %"BⳀdo5*մ~/Ij*WiQ?=eN qIDr|&zׂ۶b`y 'U{N[ao&a9P| -p$(;dZHlix90V(=~G[z" x6rF &{JO4|F9n~0k&S*?՞N~KwKYnWtU똣DZs{ڏga&ߦ}"·U ^ v_FM@c. ? "J:Nh҃M|1Sn_a 8v]^AUh?jت%h2}4p~OEMi}.A%Z'-I҆ -0'G4Xк<(ZonQ_8ԇNMsJn3}&sF5ĕO)ս}Z>84Q+G#Td\]F<|ABSK-j[ŀc] %P殮㤫O zX[+xM_$/%DHXEόak$ ؝ N$$l}&3m`}_$'鄚|UU;7!$s79SޗZ6V?Y@YOv28CMrѣvµ{,LP( ScxD ţu"9wyI~h: H4-}Jp  \g1c'v&@wCeHTV},rGpedݎq@_\~jOp' ]4G1ƒ1p'.dͩn- bਹ(v``ZH$d-۹CF _IM8J3~Ej )[K?d 1gJhJ]uehI[Dƛr)Vh_-"xT^FbHR!Pn ~QoլF!<2_5TS%Hwxb _[ XHډ=a͹5*7C4ӡ2|_> e[;\(tr9%VPƝN#l1бu 6CZ3iszMwϯt:ZOHTxmY̓pNó:6ZEK,Ѹ?tRc,GK퐑; ~rdc]\r8t@m88Sj*j8Gymjޙw}fުݟv$7T=1(O~ݦ:f$P4BļE̬>In=Zy] Gd6zKX: áyv"|Vu"j/Mz>_7YH1C΢8CFlim$ԣ=%D`1.8h7yJf&.E|F<!aV]/W#X\:oGQ< &Û L%sĠ6v?~\gb_'ڣȱkp.Xy0Yv@"Ҭɖc6+c<|(Pp#Ir|:ub .x f}4@#"E4AX;~"?-h4Zw iV.⢃4FGtv= YF1lUU6P`p'ԂcGekmv]7J!dkdAk B7w. IԴ&ve՝=b5s*ߔoSR8>D'*8+m(tJ"5/s5[ o."Cwc5`d )5PlCU5;l=#ufeqN)lυOQQekOj@fnȣ5z"N}L.DvNZMokL(AnE5Kep=vz tX.|l(t:!(V=Sq z̵+J#*cI GpΓ[7KK/#c1I8O)vS;D+|>j*Jݒn4mHͲÕmsŪa<n]"j h= 1l4&ޟΔ7|n5IdYnaE$+..e4-_ whfAWzmk!o7l}YJ̝z+gx,grQIe9)YvFu´R~ftt&O:.8W8R|K). jI!`RrcAsCPah>9_';#AEW~0w{eB0dXeFU 8|ʛ +?2Dhѓ|ni70!קtS~[`}Ly G|S>X=ĔੳͿa!H>vzZs ۬p0ICW.*yb/tusG5R;ad.t9"w?jη"BI7Ĵ$DH?ǟHRj_N&")K0o9$O[΅ŏֱ<|I*YX'Ԟu\|h=׷}Qq󙓣u.gW8T7/GRAOb1a9>sv1꛹WhXQy*E>pk.fkbEs ~oyXQ9`>ps#SmG[ mIҬmjI鷭ru\ލvc*mćY:%ظf￸[1(?Kf+U/Vk8{( O1 k鉕5`{9h0PMuՈwtmNe?b2Q2N|^_&KN =\5skwjCaZMܝڲ8bp bNf`9wNs,-HxvAH`=TŻO.m[xȼĕԨ΁=U'9ZEmML>kfRhtT\!G=A֚K()0_c3 OTYeπg{*~~Xu]Cϵ/7+$Yns!5IKW avzEIЇ-_!](AWİ=Wk},nNQRm?OLk!-E?[S5(,$-s؎3.謶% l I;3404[p^RL+̈́*.+BԯSگ0B~&; z;J|_M_u*(CV=&r;LƙRY/|+*8 @_oVԅ1<6nB9v8y À\Vx^^- 7_ 3 _B,Fw#,^ MKo䎿N6VtQ20*}RVމLgss?P0_?jM^gƮ$wڕeet3ni j/cI!S"f kGV~h/DXVb,e;H d 8!ux9"Hu1HG% 4oo11ⓚ`0 +fm`f}?My}M!xԨ^Uc*UBvsQ8lPWSa%LynwW08x2ˌ.+Dʊxr Ԥ߭| у6F_d*ʝٜ&N{Ͷ&;#A6au>u8..;{yx>{PT_i~T k1DͅLzϗ"_Ĭs =CV%ԉ*cBQ%p)Hb𖧕C !NPYs[I^薽09e[͗ʨUŲ52Y XE͞v(-^cCYxh1|-/ԋ)b:+/HhR͛"i\EPOhO9oύ.lˁ:s 弱* e~lr4xT|Կ-P+SoKкZF>|=_jE> Av;`lH:V:`ݖ61 4'M ɼ7=cpu"W(7/z',{h&mšPuXV<;SȼzYe5#l!Cp5 2N2?p;E,Pw!v4eʶȸE5^7d; uǻřڤsZp@g :|!_HZJ>ʒ1T깡c UT?%9!#s5|;]8ƈJ: kn; d ҍ)VW$H _Q>g4bJY ؆MZw~Q+XzV 1>,x n,I1(NI8YFj9V AbTپ+Wq2qYb-VAE=sѯ-ڳsN<:.>Eq5'pp W<wpﲯGR ի^P/-.{Sr@^>b"{U)KUvͯ:#d;]eڼw@3 UoPm^:gʛN+G(گ6A-o~Wv&eG,CCS#^7lf&''(}lt^vJ F+Mt_q Nu_kIuJ8 RJawNy 9fqX+ۢO%ҕ=5% 'VmgAH|`,Z輨q(8+&7?Тd"cUB8:HP=̳ۘz8Q.gU>897[ea9V.MYGFT)D[Fc zbfl$ MkLع}k8j,F$H>tV|{䑠 dP8tvBȨy &k\82_MIPt+3qfjᬃMSw oߪX3NW:,c HՊGd#D 9k/?NdAq/qu`BODoSE풓o4D6R(Yj/(SLLݘYcJJT=+kWnL'sŞC8\E|U1 $֨о Z௒{UbzUGE>M=T{bq֬]oGu]&$|SYVM1=mmm h?*и?Zᗭ k å P=bxxy/47 JHEMcM@ o‖sx|URnmoexhl7J2ea lXv5ND]ܯWYn]˔};_̺d u?i'+<EuFsA0A̪t>C{Rd0K'S \ǓX"5E˪o93!`%.V D# m/B^{R3s쫒Z$(Q3)E]BqK`. 2 È|ej-6 CG' Yn mt΅t&E}_E g { ȅɲV0/8A,~;:UA_kF1T>+8xje?wksA+{VBQG\jJ$0PK9aNDŽϋA#d|s&<3Պ>ɷ0)bL܌PaBQƣ?0F>BAJ_- 7g3L&݁O Psa= kNA>K0[׽y&`߄ZI>rPJpGkhB"f2q"\y \kfIl٢&qA$1w&-5=7=krg|*UKyrP8.bV&I⏷<.d,nQ̥ЩK ɎqMBWYEO ef ͻR~[9~TmY3NF@1fi+YVo0# f*4H- tiSV򃨻jy hgW2W ^T Èq'\H)ێx^JZ#bgs m;xV`Ud-bPc0bHq}"]0\9ĩ1sǙ] eEG] pGNN49E)(9ÐmpxQ?;7܉֖yAb]R e~;Mu]Uy1hLE)IAC 16YBۨ'hw[V;>E9g12@xuj3[b*7g '%4\)ttK^ [++kߦ>0_ [6dwYtnr]l~Dnw1=_W mUwk'N92[q,鳅R\Mj^jld\ur{i$%RLuFD_'1S8/@G-/YbIN)5:a Z|b, ![MKX`sԄ2jyd2?n! rYIg$K#"/bahvƺݰqҷ{[!> stream xmrg4ju :ѣ D%.E13 3ѣN"D'щ5DF^7]Zz>쳟˥A!0HDT`n `P<V2`pb 2^ `@D!c ȹ*➋`+\7"=`tBTʹ @F`N6NH@ CqA- p'0h8oM8?Ю,Z-A t4x5â>_//u'!p$ A!dM m<?wt-w p f?wrCQ t1p 0YP_z9 $N醀#VB- ]O?ڏcN;z?<50 ⯽bP? \""X7Oa#i|žc4׻9$ #d |r o Y {igKX /(lok} (V{"B-XOΞuZjuӘ'OM{$ަ,}'OίmE3;1|KyzI!TB3`eda0$3;6/3?=KqrytnEGu2rHtn%MbԈpsڧ BJ ;`e`FX(8WD"Q/]*\ұaRƨoV@~CM…bԙe3'3'>]}TJT!{QyŦr؞{ } 2%.Evpz#J, Jc9u}-*;\pf4ѫ&wϯ,3o;!@ LGl** 7$WWpYQ5Ϛ5# o9-ͰEq?sHf =R=]q'b."_{88  8ixxs=e26R>-MԜy$l$Hr*ReK\w:(_``M:ǦBԲmhR@NP >ѝU%' 13atLjgt4O ")<u@VoYA38IG 4_?)o~[u.ᅬpLw$,ttQ[ \6Qb})Ŏ72K@w>T8~5,N乁c-Tlv#$I2<-fJLZ摳lru^Pd<=.m1MMf+km(=[3/71,(m}!\.·ڔe=D{ωM^ E2 !w/3+H6= M4A'Z,Dƞi*s\F. ONޜՍ 6 ۹,W!#%Xfo߷90 )!Us*@>i}ޟ|Gv-z C-d9Du1N,tA po%ǞMݩvIeʾ&Ĵ6flVk;;v^-YlM.#&l^D3 KYOhlu9ZM:IQtf\jwwŶLaG|-;+qm@٧ N4 8$ZTcg3-KVn*?CmY;S^cyס8'"R\R.E(/^,j&Ny[뙧}x0Q;>vdJKo7f>!ʏs5hr\TesnX͈S)lY,W%!%?b:I9;D>b60*/꘤p&8y\/+5D 8ǒܚsϩRXKIHdݢxN m& V}ih6{͎Q z|yń'<3reh;Xy3E ="A`.jbZ_+2f%vI^ف7Ҥz3q|Po_-g畈 eWGߚ&PJ/$/32pDqDwu&:`O#4) =lp7X\~\m+r-]hQ"eG>xTh "#Ud5i\*!' xAE@}oU4gnş5Y,tl:/IZo8io'"v){gdXߟ;ٺE+u7{</&Uiѝ*v|0l (kN1S#k>w?{Y9Ay|'?8*Yf dW(jP ]~:e!=0iټ౱]PEf-|ѝ6%~R)'ryhz`v,z5bphѵ1[$1ʪ{Jb~Կ s;_<9|9t*ʝX|Jy~>M۩^L(ݡ ֣KHڪzԴDjt³ޘy&m=t9+r[lS3΄QDgy+3f^x_hiޠdd357hm Oڻ;=F!}7;\+9n"jqK5T灁?"(l ,A]Dn,,fhaP)Feɻ3o52i@{;H8dg%lo VUÜ{#gZ#K 2f}{UZIݴzEW1M;7I^_w󱛍^1cŐ=!m endstream endobj 104 0 obj << /Length1 725 /Length2 15948 /Length3 0 /Length 16495 /Filter /FlateDecode >> stream xmctn6vضm۶gNVl۶mZ콿~=zUWWWw9&=#7@E\UHCF&lfj`/jj 039̌L0dG/g+ KW տu[#S+;+g%]ōٍN*ffWK3@DAQKJ^@)!07s6(ZdL]̨4&VBofή3wvȉ +ȫDTEFYۻpmfh#d?X=#01LL\fV0 MMrfxٙ(E\͜rfql濮FvV^C2-?*+q+O3SE+vuv3Z?s#gfjffpϬ:z 1(ȫ+i O,fo`jeoPqO#gQ۬hd /f\<:J=73#' d_pMܜ]M?d2343Y_q0 Nm -+1TYa^A458¹Wß 4ۻܕo&63;& [y-&~W׿SǶ3sMXRb9v*C`6,Gډ_[|ң@3;F )6x_ wCm`YPx_e-8%s-J^;$tŲ!r0Y~ë p )SɫZq77K:C# F .{=jϝ!*)=9B_nu2`A\gvLX9 uTl47/i(i[t"\9;#!E>#}@ٌA4Wg A2ĘKFS젷ПUsU02 _5d xϳ${zf6yi^5U^A S!}w)!h %SF;rB90.3=ltf_<9Ka(:y,op#E}r#丂Y |/xISؙAXgbER^9 s-'p'w٫Y5(ӕ|3uVARb$!.D 1@0]I2 g#^pTNYh߽Y~tl2 W*TXQj*zl}t-f:nVMoPX"*Z_n[7*JSkU{uFs'Ldjig&kh֎ wA3tݽJnKn9筼6[o/[x ]V wAeDH~3 }Mg⺈w;k}b21%:woQPK"F\H1^g pHUcf Uovey1-غ aWڠxCL|JRzV>= ;JHA[;`ك;֣'-A!W^ aehīO1]eV O \ =V' }]^Qc(%OOznu<ĜQ؋TIʪ+eA%8d$ d>#gشgAnK}W;2(G5}3.}ysA4Ξ=pdZaQe͆փ$NLjJ)?ɅLo/IKcR!q1hHSEzsu3Mp[HR9"Wq;ED-ˉA0Qkrl(RDRT2;]b׷}7C輀썩$ s4|ɏE]Txp8TQ*}XWױZs۫ozMZǛst!G{~V7N]j[vjxa{L뽱dKc݉Z]`a2&+Wk Mv^a&nhkS/S#7R-nKv՝fŧϴLBCr=m8p cM7=۩ej H 6y'{H@$_MWӦ{_^gf2  B*|Xv-@!G9L5fI";1uCD(T>'p}ua$cc }bu~땺W"tFB@ ]ӶVc+U?0|7$:NW6U 0Oτ: T|w^)3)2ʿLXUܞ~c]'JP2^Yn9g%:N_1P8-vЍ'~{"瘲dzr~a7kTU(jߎyw\t}ƠD񪉸abR3|g$#A^!M{/pU#_§Em? 0i HGam4pqh@!#Eb. .lXp(#\u8"*57ҕ:S):e%eOÆfpgq| gy%CHNmݺm^˭Ƽ]IߕXx0J*_s~.%#]VBoKd-OSmf=mu\> :b( Xs'Jcr-t#wN%TAx @"t-'3<0zCVm*O_> 3Y%rqC{nf \a /E #!8&ѩE(g{`^ay 0"0ۯE&ymC#@;ܝ`(F[.gEq`Sn\^A=.#x腾*/\{9ؾ %:;vv_=}~ZA\7x- ؈#u))I*hof1ZOe43R"=)g*̱$D'Džs3c11զЂ$`LV@L$ 芋R? 9:X<O@WrqAcZդa,̮17yBt1f gtǵ'&"e mڮ 2y ]E&͊bc:xjt:F!3.\:8nty}\y?Z~*gG:{2 HBHU,-0I6v!rQ\WW0qaXx-ؕF(ngm( 9FbGzG YЬ /uV_l!Iar#?Ol\7"2 xϝdwP"/B`pϷ(-jК)j(rgydLlJ^l% ie9,b EU]#'s @{ܜ辧Mv%Rq A>tZ Zjj7?ݨMy+mI\3z'F`rACDiV-!vy}]!h^ UI!Qʉ`Nf?_ E'B_wZzl-ZB _O#R7|pX5J)(P~$hlOq֗߉UI};uA*8qp)/ sna5;]<7@ "{RL+.HlQn5q-&\<2htԹ2z.Ab·uTA??eSC[@0C6T3n&, bTU_!|Jy(9ExףV6e 4'>qR̭n$𨪼S4?ή0LzLQb]{& }qe&U2 ,N2J!F 7؎zotwq1hu{*nղ|Tk Z {hۜխ#4! 42>9N}p$X-o`kkc@&Ds6j,z}tƟ"*BflUbQktw3|$͹GŪ@U#dƀ6oZ9CPQΏG:j% (0knb>f7`*%FXō("یGJ84P~ e9Ϛf*NMW(s &Q ;H膿 *כ>p*,}KUhHJ{寜BZ=p"꫚(0#%)XI|C%[ݖ@45QJR$AU%>"|{e-A; <]brYZpl0C#bѨ cH-'{ -A e%WN" ih5ј*=(VA8;x_jD]|K~= H"ܞqV_Q6O0!ve~Rmܪ}:;3$qJ;*MR*N±):O'ah9 Zsپ|.nЬ#]Y=J{V_DeQ|x\/sr$7]5NFp(mLB7S.4f`=F|D, *l>ELa rC 1",/hR;Mr B4*Y9r)`ߍ!fD@MvHw>X=:rϿKܻ}&Ր;[&~Fiz)v$5BQac!788\.\kV*tXҷp,qX79bVziO('UU Bڎ ,keX*ck4 3ǫE6-3I"#~ϕ&y"`6(eGP{:kiEc [PP,=cVCM=jph6izoOxSvAb7`KidTi[EԛUSx^~Pk*<g>tT͗*υ "`ew9i-(pL~w5JY)l͟-Pe]R,ŝ%FL&F4=' qD?q )3q뽽ob5y%+ Ҳw_ᶟTl/nH9/@JD|#HCp-b3oDǗN3l$̾.yFH:D£Dv"]O@?OSyqd^D?E$d0P?|||Ղނ@7$" WPHԠ=_>qĦ6! _ˋ&s7'VD9!Kf+>U.Ө I.<ՙ@"g}#HkhmA,r3ϛUUUi>ěGgrz鼥 #,dx{kHn*xȧ1zWI=C0{_wmsHs2ء#Β-cwF5K/eI<*~߁_q*.),+w |(-b{2Q%xLaA,;reJ-JusȫxK8RdWS퍙} ^ `ŰFK$s,%ǔ"C%S;5 `AGE"q\UXx=6~^g9o_sd XW Tߴ:gسFlp9ҕyO}4 s~L;Nn Q-zquk#esmFҊ͔?U7drў"kwc)%;Ñw{=LnjҖIxL {޳lیUv`GH$5wtN$ J8f> Tԉ̿sb~^v7V߱Qb}+H1PǤYb1<:,4^4/#o@ъu524Qx13bˉN&%5%=Q$f5d" {^ lBc8I)ni+Hf= ZLtjl֪ĕ;Q P|LȰP~a90y3M8e U>F@?OYxm$G#̲F;i_3@8@HOeC%Pɕv]Y[}`5(qz;^yWmY1`ڨeO9;za0{VS͞V% WkC aBMݼ-VWҋClUZIY$(M IAbrm휹V1l_aAjKC]P \zb=& <&T WōG*nG]("50]QL%W䲋us 8 X #mdǢxgt%WR +t4 0:JV!sjZ,Tv> "[`X 2.6u0V~)ظdp.nRn"X%\A"8]e|X -~O'78vIQkN\G,^wbnQd" ER>-d 8҅AzyXnkfP3AP('NalҮ%Bj_5 F/"I;!(-'U # 懏rΑ8 ?5X:\tL} "o,CVo=Ymc4-r ƕx\oN;.H R@\/ |sN[fv)GF=9G׏~4KMpv]?m?B <SQonW/ʮy. 'Vv"3R0” g/1| ,MK<.j5_(7;=ANʯ`„q2Tu&"RMX1 >rY[P~rnsF'gB]! $i*21Hy .oJyܕ|}vhvax;yY4Ĥ tx #ݟu3籍Z_FgI}] BTllC1 KK߅@HTY>ٴ̺{n#IKɡ(AMդcqɾ)D]Owfen;E~clp 5 G}V7_%%,x%Op}zP+)5`7·9{5Q H2p!Qh߭1N9>^cDL>ezgIrNpՇ;p،V ̬Y}`C|vuES`qc:~X I7Յ79QH:ס\B/i/V&>DuɬLujŒiMwcEJ7=~A=q'QP*G-_ {5Iz]O+N>ӋKN3 %~0qzPieA G>3/3y]M' ˓pEd8щHT5N~ Av7 Z i '6yTt'T f2=4ynS׶61nwGu%m.\SHP K7Zkږ? EpW @x@W#3? d(bAg^r> (6ohpp.@=Sw>h@-Zw* G-:Ƚf3E^@:=ٹCt %A[vr1b wb /Ζj-p |=,aT\.qXĉ.s>mqN;z)k+㊸aT?/۾3tSl3VES46o<`Z*=Acppw=hWciJc8]֨}EM-ȋD詝%فoW-zm"<$7Ԑ @`"Li -3qVnn_DFc )QƲ3$ji@@IP['RފvtBJ.)U1diGRԛIךl[78uw%ϲjK2 pysv@$G™26dpMH*7Ҿ-de QL2;zxTsMv5tVE# KFmAI+hwN/0@M<'-cXH;@҄7J  9ʗG/{*[ӪR@A j(5,!R0H9]c5٪9"$;}O(:a"N)F;.YږKȟ94}NEb錖1 sOվVsУ=4g܆l"`E$1D1}tĔ*MÐr"&vޛq:v{$ ʓт!]c򙬷᭱ݍCs>嫦ByeDli>-eTa;F;far2лcS(ceX~ubO}tr\JE]Æ\KFiK-?R;Jk\fkyWsHFʧrg,3l0B}$(\ޒؿE4 Mg[7aҵ¹/IɁ1iWK fQ7"oF !B)u4f[nۃYK2@(ÿ!+7gn=VZ :kM9쭿bpbiR5Wܓ5-4gʿ"Y $3l ~Ja`m +^%+"G~G=e}QAR&2$Td+3mB&223 ojvς /});;aŧwKaD\mMU|.hըݾ,ߥ4~[_P)+ӻ ed 6.HY sj^?FuC"i?A/;&ăd&L|Nmm3\! J5{ KK6V3Y?sު{hRkG_A V0iC/mCZDA3CČALx"tj\[eJSX мƇӏ$+WU+=׳됰6%;U'R⍜ 4dmj#$i.}ʦz*6̋cA u=ZuNw9?ȣfWW!&NLOlh5FUn9c I'Q W^o!#n@c?%/4}ӈQ6]ݠm&M)Kokq ~#$DfR;ҩ]_ҪۿV]zv@=ǹ19{9fZ"qxlV% 6& dG3@bLzD vÊBmĚL8qՅzΦggh4O͗ [.*(KϢ̃$l~%n"15ܨBKsb_+g-}m\:$m[f݉'Rz&]hDF5T|s<~™`$(ܔ)3ix4 RBPl^ <D uMKEٌ9* U2Ē5KM`0 HlpR((pujh+v9FwGkz%s%}?}A$w^!:3Zj\@{Ed*UKl`vHf4$ PҚ#>a4+ Bd1rqA9_^qZn,њ~\*1oNHg3u <4_0*gL5NpH86]|Aou}Ai2GE"_a?NW֨ dMLxVO'(G5Skz㽷Y3}l8~x1e.v%z:c^|;PZܧdΜF #۵"~VGحnAŌ&9cm 5P&eHxʨ>-%Ps_ɒ5S)p3%A_zꌰ_ UIl7]@5~D p 9$R`7CVDnSC^=ܧ?bk&uY7 3,.cwHCq<`iq,* ['^P @o fx%r˧gmU8 0((˸R\c$ Gp3_p˧ (B`>ч |Ug{Hv$Y j =&M|ˮ5J8]eh1\}hN Zu_v|wغ)4 |8Z0Rʪ 5\B;U7_fi !R܋~=)[Qde]g v$ߨJ-ݖEjiZq2)0;N0z1R*GI{['gM0皈$ 3 Jb_[@XCw]L'Ӂ['qSpL..IS !U]h9 ^^EE<2XRdljog< VE#SQ x{{w5`(,:x,ْ}^᳢/xk 86y00B6ZVb@p$gƅ\x;~(o[_'a,S-w_$Gi)aԟ ~L(O~Jzc}]~ґ»{cE-Yч8~8hmVЋ>5KNs K讁sRnpR4Ò;zkxРjP *L ڇ4\a].܅TW$/ &1ųf GRil4X$0@kN͇ +{咀1j5~ nTmkr!#<`*O#e]IX^\ch ' 7~x$W7>DpHz0զoc@?1NtJMS_\Fd[Ӛ>,䄤=^,]ƹb"F݁_{3ưJf-ceU܄ϯ냚 d\ "ՏT*$ !JAb+%(Jh1 3}L{4P\/D~+I{ubA-FQ >%)q6 0kp(;@PP_;2sb*ˊ_.|.#]<KIVthK+q)OF |?qIFpܖA0:_PCXX\̹4IrOlefB<2YR,cVp9ώn1^|.o>K&Rf}bF]ЛVΜVbֻD$M&)0)l`("̣c H O{'dA&ΊA?W`d gCm)5NƁ r<@Bl4dW+[gBtiּ;LF(TEpl \,jm$ uM/~[6w],}WiB2[#Ni'ȶ[?%FJ`I"Bl,j۝W(cx;V*TRЏ@9[+M10jJ}'fDPP@Y75B6 rbQ1EOQ0N_9h6k,=ƚY^hlCC  7 ?:7$xa] ֺm|O*&ȪľC}_;ɧJZ0D@)m_3Z9F007YA"dZθi| lN0\lsL8= S]s&"AHT\Eq2D 1!菨 fA6& YrOx;AH/=f_GV_00x_C&uò)GgNjyy-{5 2.SPJqݶR8zwu7r|T+Kz6nAYt*QՊU?:>GsO,\1TeyhRSsQf k? nQm%\5lk~U};lSQ69wםqZd>u-vr+ oP$FM]ySA&Ŝ Y؈ ZʭDcb1;KJ2C!࡟p_Lv^)pIN:|hݝ)1z. endstream endobj 108 0 obj << /Producer (pdfTeX-1.40.14) /Creator (TeX) /CreationDate (D:20140125181422Z) /ModDate (D:20140125181422Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013) kpathsea version 6.1.1) >> endobj 9 0 obj << /Type /ObjStm /N 78 /First 634 /Length 3979 /Filter /FlateDecode >> stream x[ms9_1"KW[WXlp&$cg±믟l>]h4~yjU,"5RʇBB{sqPJxz^xKW{ZїSlX]Heal!Ďڲ >P%G3P%[Je K(RU5APXX>ҕPVBKzPIj[8MWRR9̔Dq%PR8,&2Ã%MuE?Ua EꪲliZeZ}|j pIbi>/Xz ז6K䆶%#<(mF6c"S}TRӪo]J56nd3c7 !g-guu5NϪy]?T)iVv#6t>;Gx1nYv1YEEޓ{,kG8Y'TxFլfGU7φj>ہj8G__q2 vw2(}熐%}b-> OƳEMp/bVD'~_LUeLl(.՗ZTżᴿ_|8O'cq>T>yR $b6d>/Ĕd>4VWe5]\\L.'7ѯovSݑ<{{ﺟ=$ha_(﫦R@Q c:87MLb|P*D~'҈ѓ-hu!dNs)a'h 0[{B;q;Li82S55tI>:ZQ^1,r)F gg1na)sFAZ9ׯ8{OOJ"P0Шf )ny+gl5MNRO q0Y. fd#{9k.mkTt\a֮Q4l45g?jD͔Q t-K%l6?4'9L(={1XI^&`+A+u 槒um/,6S01oP(gId;Ɣ.MO۷4Ky6$IF~ԜfAdG2yӁPv8ubsMyDm#ɣM\4mJ#mu^5~ -r4pa~Jif)-mSj%Wv3h 5 I(4'+lrHi2 S ]fZ*>=M|rkP%omhq^`G H%(={xmP-y1CjA:}P A0mk*wS_i 9M4Yk*" -Ky4M#S_r\?埧grFW^Ws$hQK晊 y 5Gp;bv kIM~W&M9]4kRc֔-zÛdtW|y==%=U$uc-AOfx7O=_˫9^.c/h2?׿֞8˓(j7h苁ŅCq-b"nT\,Wǣz|=kO^xszUjX+&ki/XӵbW(c0ׄM=Nմ?s ,yu3!X 8׸ Kŕe(70Ѳlq}?q QY>?><@f2Kۥ #i^u|&%9|] \7r[~<~spĶMU4NKM .V=[ˁ\:1k.vx ^CZ8oۼߋ#sq>spOޟ&cj)y,Q_ٕ!P/:/\qsU 3H!eU,{ItN7L~jy.uif0)=𫘍f;qz?d;egO^|`w$imR!NrrN>Hz?)8<>yt,fSGCwv`ur3Qt#7]Lnl} [mGZp]~(нDraӚS>=zsp4 ]mkxM)5 6j6,ނ,i~Þ˻/_=];%sP" Gw0g\٫OȜ"Ǯb߅oVE{/>?>}uO;k2t2aveRB:8#lkڇgx Y8L~zazUC-Υ`2UST\M_>iƧ6] UU1^\} k[x@RiR ]WGg?98>ۺ(i%qqxѴMƖj-;eo~e*قdltKlaΆ4T񕕎M.9#.?k؀@l F݇`~5÷:[/Z}[qJ o[c[x Y~ PW]݅-zKo&].u$m^e{nZt`[gXÉy\˾7VZF˒=f=ߒhFwHKn-[V6D%{xU  awR%9=݅M_D-ZoHwkvҖ^ aW;;FF[ͅKޅ;Ozgwʼ_1?T4p8?%}ҝJwZ.:}k _!\.Wŭ)X^M4 endstream endobj 109 0 obj << /Type /XRef /Index [0 110] /Size 110 /W [1 3 1] /Root 107 0 R /Info 108 0 R /ID [ ] /Length 298 /Filter /FlateDecode >> stream x%.Qο.KҺԽSJU[T17 GH̍< 106 dN9' Ty+DNЋl{$<Ŧh>"tjC/ZD3+b[_;[dŎ(6 -GNdj6NAPtn=D>KmqecbHİ"#ĸ".ĴHU{yŬf 9*IެRd[ɧƍZ$SVKt{e ]>dJW=Z{Z^z,p( endstream endobj startxref 206908 %%EOF rpart/inst/doc/longintro.pdf0000644000176000001440000143314212270777377015715 0ustar ripleyusers%PDF-1.5 % 3 0 obj << /Length 1103 /Filter /FlateDecode >> stream xXKs6 WHT D8vƞq'l{izPz#əHiuv=( ʼnUTR J%UNlq$7ya9M+1tm^h'.arhtijC} 5u |ڬg2dU14p$"'yb Ԧ'/N4Zd-G p4qEqxGz De|.x.)ސ5wxQJYF>NN> zhH(,`ۚvG @kd]2"8C۱Cl;@#F!! QvA08۸}L^_'p'D'&`C{ᢽTZSgF<6-6F8VҾҊƈe7lFD!al[=0Qe!3q?Q'O eKT_$4 HG(B ^V1hIEF́l)o5o3c|g$J{]k/Bp16&=ʔe:.Ixbbyb,r]bzDvQla4zǞ^9K!PJHĪ8XqMԻj@q5 oXDTW{YB؃Mc?$Kmdr 8lĔ[}G1y1ϿfuҼLe}>g$K cӓp Yq)7Qc;OG+(Ã:KF̳+d7/2t%YGtq\Eof~hk՟<> stream xYKoFW9q ~ݓĀwp@s8#3@ȏO lrАGuwW_U^}+>jw}*u*.~k4.7Suu-6_gylK櫨46*;eFV%Dop1&ji[Y$O(lpI2Z}[$K_763v#IAw[AɟܷVO(N)0۳×(@3glW0{ `+ h[:iBGFZd YW kD}{>I {U͸ly\7VhHw+ZObY@NngŵZ7?*k~[lز c%x0? &6'$N =C`)7hP,T}UR#!t;ÏY4g"\(;62~/JA\; "ml3ȣ@_+EW/0cCHݯdJ-è%wSs;*[ƒ NRD _qG k(/3>5E3E̎"pfL@1dsCB4Y1Ea3BMG,gk.iSoH h1>WV<n6])k)8tc[SxdCIdd z}:8+Ԙ0(nve{n+gjJdɎ8a,7&ɚ\0,#ZA3Nl͒ti!l<!ZnP)K063j1 7y#T!rscR#QՔrL =\FLEdf _NP2]3}^B}V?wq,U*h&F'%DK7AƋш?ˢC[oX>FEl_MsI2$aCV#4s7 )eu!Db{R…wo۩'SOn]cW#-4d)d#[g5yٯ.L? endstream endobj 18 0 obj << /Length 2128 /Filter /FlateDecode >> stream xڽY[o6~02ԍa-ۀ- XmԶ\N%VdK$y>Q|vR3G6jvy=iei:2i.ٟN1&h*og 7s]u5YF l md3{T"v@p/ 0ب(Y%~$>|~zy%)`>0|XQ3c#Ioci_{=5B|O-KQFhA[b*Ց&R%R呫QՀ74 3`:@L:o<]6 KKyŚ̈́Vl$(ٖ4x_cx}s~~܂uwNg; *DSu$˞랂qnLA+%)+H,Uj@&t?.88%J!A1/LX }c,E^Q% lP.Y4**L@)^/:++~wSܳ(Rf] kWnx<}O%nY}+!,T9.$z6!Iyױ}vj,'K;I1vA5O= ԥiؽ≲l"jC(8$Iکӌ'JLEAP9V[\(STwKJg (v{Nr:7w쎸ydeq.%2v58ue Nk 6/IO-CKP (&RԐaW1>ܕCB5Hwt솪Aajǣ*d|L4@mcp ϯyၐ`duœ~C, ւb m[¯~:wD-8@/_Z2GU" }(\TV.:ܥZj|`Q"#7 ávz #Q@׃ED\婓.H*};aGIZdA@p*& O3cXw^K'vj}05Vll=L0u]\5NHqmފCл cܖXѤdRMkhmǰvO2K-!&޺ K`퇞A3llHh glސŨʂGN$f'@\j/ue=dp|MJx/)`tysW nOu'Jr͞$ks+Pyć۱ι;N9n}"pDDmɷ!U+nG8J\aRf5lMJW> stream xZKo6ϯc70͈/ v9!ǿz)$^U,U_}UřܼGi'uQzjQnRZ)uLNlU9}-?vv#]ln^~n>l9rˆT]xO3UM}Km.Yfa]LpyͿ&d.f[кZMH&;СI{{(١!}%C޽R2=`ӆvs3ZE?/=bbJ&FG>3(h4BR!hFެd\Jϴ(l{ێ5 4huSN} 9Ŷ``XE[]KZV^`K/>ԫ`xxf/[zPL6m0 :s&z$L{'jbCTSU uSA,IBh}{mھa禟7tϲ۰$9ïCdžv^*ڏ3-7Uo [`}`ksej|K3Dw٦#[\f kzON  2X &xLG ]k8 ,>h!$9#2Gmn9 [Ӳk*_ËouI_]+F=+0DDx=~oXwe`qQ4{\*S Yp܁kQ׽(b-: w{bͮZo<6/ QYW|6vx4b}h#Ba9|$]G7聏Y(4$G*got~町@`)iE)'%g5g~(dY fK5WDU Cyo勇TB J/ -D}b\- 묭PB|Qs*q S_]|cny@P\7uvuRi D#b@qtNh,;yBm˾H`kPh %,0S#B-}l -7dˏovX'D4ۘq΢8e U@1ʙa=k:iG5kDvrIR%[;P;Ut[SH(EC!$|Ie^8MK\uajZK@TGiv+&qZ8-h%CV&m%O P_)L+3h";y3" Z`nL%f K͵&r'8 ԔBzʼwR_8%%W&Zkf(:jX t1FCShrү@/.NgʞAwY&=2MofvaWAsp?@tU]guNY-*]e"t!d)&5o]-qcq'ѯX,˳%'"1 :O3ߎo[¹ok'jUNޮMU0hκ%z.g~u.")cZںzܩiq.O"h/ˁۿ> stream xZo#B/ЈY~- 4@\\@.{-Z9|KLW$w8ŋv&k֭]\ΤtvrX)}B7nVwyҔ8u*## XVuZU m-V t»M)3suu>k}Ӏi[Weޛ+YڐJ5hhQ?Np2NzS"IxnC#7lL֦DI$IШM@C kZrwJۣE4^FԵ-iY \Εhh-- ֿiS4D\ @l]YQ墬N=F.q Th7].\jC'0O;)Q٘i%nkha|kk>FX>+VXR4dεÈd(.A.\Q|K @2 >611i1q377O[ Ӳ1ٴ^f߬' [s 袦 _Yh3ƟH.Д]%$zSNTVHv_v T'pºQܟ2-r2ԙ'y8Z|^k#0 "zoث*k^8&M~B|a[Y#brt^0쵦"(yYZ"x#!'^/z!X^_seugCb'F#݁\l@ܫzY/ P~\> 5뢢AM1Yc'N%bwO gd :5"iROﮢAiNcŽDzo " N.&+{wc\עQ-ئe{}.S({ >0ͿyƠOJn m)z*' =Wa+B/1FTWOz &plwkm$ mk 0pe]WUm!f,i9^<RC*7:E}{w-W-("\OX6eI>MҾl] tORc]}kI~T ϶ 1=1*Sa[K <_ rm"%r&UڪFk4\"pAiNu1'h~]>5/$"3 6EI;/F6BrL "sb'6:s0rKWm~`GwV^֔6hM{d%Hq?#.waQsߢ{bV?RBuq V *Q9cH xE]F"F:~?FO9s3K3WdQoxW!6b? S=/rClU5YlܚV֑hXHȳ,)p`8-wh/a,ULa=|>c x ߶/yJr?meй 8sm95g6DAW+7f+Vp_."O.F zTُ_fL$1_N&P{X'Ž-G<VYDBGYJH*|JLJqHXO%;E(GوOY%tttQ(&P$]]#7wG;7b }b@_]`^ǵAc8=fU7lы&cJn7ᒏ(!{ ֎ ɔ0tGB@niL~Wo]XP4ҎAk !wxN1t3No#ǷoJXj:T5 Bh gPkT/8q~yJ EQLby=!:'ȿ _'Դdj2; W1lؤ|(}\%4( ˒hHa^ VHuW!VxD pwR.4V~I(4}{JvҴE"519~kij5yaQ[߶x;*ߎcC/z?PN endstream endobj 34 0 obj << /Length 1783 /Filter /FlateDecode >> stream xYKo7WqF̒\>@i. m +YUR΃܇CYv( I\rv8p |ڪlp!24-ז^aFf?5_\~xJL**]-2FgJMvu_Mdz2Zɴ,unDmE7 &%,l闦f8f|}3;Zi>{|:LoE4Q.o%k] _blZjPJBnnP% #8a IT9Q((}M%ؤb & p% -yd,B"J7P6'TtH *t$=6^Vf-)*_$p¹"x8:vFNTLkD }k^uQ 5G SQjvGAJ:u^T1p:)R|JJuM~Fk^wv#;JQx={:H.R}\$eJN-0]bÿ E3BWfG-_}Ls'r;lѩneDp莡%ʼn-)-o!hnR >s[5a_{]rXFU2DxFxfהՀv j)|Y& <Pyj-.@6-=8"HteZܽÕGohU0! z>-Ζ5˄ 8 jpYrp)1@8Hz(-.\|u/)t endstream endobj 31 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-impurity.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 36 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 37 0 R>> /ExtGState << >>/ColorSpace << /sRGB 38 0 R >>>> /Length 2229 /Filter /FlateDecode >> stream xXK_"~? @D2#eX c$[3&D(>uOu#Xp͙UQڛƛ7g LQy˼?|~q9gl~|q懋7/ۋחm.&wynk4tg[XͺjV 6$;VLՆa6ۣ>az-we)iٖއmsƧ`®a79Z7֏Fq2l-_rWd[K.ZlcasmY]8oagY ~ȶk.x|l8 6Ї?„M.~ }eax2LKî6a?|Ûc!3: 󇐬~nai'8?"臝XVOP:Ɓ uO#d[7Ɓxcq_G|"a?pG?S7 ß ğ''J%;"OGE/d|F/dFˎ%?K~2?"?WD__%?ß+hrc`Շ%?Y?/U_ GI\)|ԯqU>#WǬ?g窮)`Y{;YЇ7YJ%={,z}JJ{?.^d\И棹hXQƵp8=>#cƯO?{Pp^}?|xf6?vȴ*\d勇g鳣׫fO*ߨMWe/<^"C( Ҏڣۢ qXc$ɇ5>= oyOZJJ{Ƨ?~{䘤l!Ǣg{Rh=1x+nNvYOG-F\Ȧӣk_:!róҌ!? kO2%/TxE8/o{_|g^bl2A f%(Pj]#VP"`F5%PRG" mhUD2WV)w퇈ja6qQm[D!Q쇈 q[DIQ҄SDͰE3 IRQ!4 `Ѩ hMB"*{.ԥ~(p(jRѥ"Jzx(4OQ B[U!h(zM#ETSDєRD>sMETt^ǧmBodEh0"*J^BQ"EأUǺEعo%v[DCDSDO7E>Q~*UD-|[ZZSD?QEKESD1>(?Q/(E"KV_EQ+TDROEOWZ"j忊UTD"jQPD>QD~QDQDQD>RD|RDZWUԪ*VV* )}RU%&&d2L_&I;6u \~~-jxPC`+uળ4*uqvRBcg)u|wz&6uwmSVMHvB:7DȀRǬ:'(ux Y]IȋJ&u|+|S@(uԬ)u`Inh#7u4mu:ߐ*%tԡ#zQ%4@kTcm~xPG(1ooo#uߢgQⷨC_ԑ9ԡ#uп u0~H/R$u0~IyQŤ?A`:_$u0IoRo|c XHO/RH`$u:X|IJ,JJNPǣ p"SL)i_t&N  8%j" zs|K,| $I!p{7?[Egzë_`}sUn endstream endobj 40 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 43 0 obj << /Length 2866 /Filter /FlateDecode >> stream xZs6_Gz.B tf.:w~LZ& $(ñ3klrXw[R5e׋(߄E2.,.׋BeUE§;;}q ſy/L(: '?k_o._>x|e D[I#rdafuOXֵ+/_mQ.*W5UX2WKS#7|}Kuҭy{Td{NVOoA*WvEU{$x$]Z5$?Eb8Ѿ*P16 o}UODC;=o=-ԾT5X|4lV׽Sb)!Z.IS9NUVG SrP:HVRxu" "'#_DnEEnSwᛖ/{ZI,֍ȋDZP0۾;+( _hnGh]JYڐ۔SCys5N׭EU/BsԦQժDxEG ٰo#:*6ބB#VluX2ߕ$_DTӮt#q,Lֽܻ36zUK"$UJ 6vPEw>+t=_; ;g4;~Vm 8(9)*@BarL\5X/R<[n[*SU骸g>ݾ\Ssུ֌X횙T ͸V [ ʥB$'Lw ׋in,SZ hHxKZ;N4@#Ўl51q5|=[ζS%1 {pat/t;}1eQB?/7F7x$>E ?e?@ P^chW1UUK hbC&4xv벎nrI І&jٳ$[ZXg7O I"*n*e05BѫrȄRoRWu;0f΋[*{1D|!o $Nȋ/і ܭY46h{.QU]`}82TR9$daOifUpNZ_3VC ɥ a),L+SbX΍̴̪i_?5Y}SZeW/f%EB0uJ۔wOܹ汝1V({@ՖymrlJxApP+2}v~2~S},+ΦlsYU7e[D. 0K>jDkN!3OWV'"*`& Xo%Zg!iLB㛺x?V geHWpvL$x#k#=瑕GN?]ɸv'Bw1Voi2dSk,w+ke= AgU.:|aQw >M]؀ઢÆ+8Kۘ$ 6%FX `2 /ת!R$lH0uoBB)6\47)fQj9V::CgLGO6R1|qx\K"e7ױZ7d!u8M/trd[[*]U GH/B6osLPAy L?1=Oc Z:?/o<Ɓnh'R_Ћ 0?ja>%3~ ҹgx&Sɦ$"jlSc+N>96 ٝ44cRӮz;iǒȿM|/Ag1U"Y֐6JS>ncrZ Kb7]ϒUŮm/\CbII"`l+Nʦij>Yd:`; CNn׿/ & 'zZ\<.|Wqv&$f>XW1?@khQ= | -|/yݫ`n`x}@Dg>7[U6WCvDFw!IIVWLt;'u.c OqPPO8/?ẋ@caxDbsʑ3x pRy/ճ^>Pr endstream endobj 49 0 obj << /Length 2614 /Filter /FlateDecode >> stream xnr X=`?L0=a v K g$kk;fR8$dX]W뻫7ﴜ*^UVnb`Rrc`΄(]qm}t,nitӟN!z>Iδ35~J[\Og5}=SJ[o?pQuE{wT*twQ2.B|RF<ȡ'3is*{ UET J(YN,,' $ʌm@f,A&``lHK-sW*pVT0#6vA3UäphMb&LT-^!ℿ,:!0JM^j('yHa89%Si="+;\)L$?QBBG1L@eA_'뱡3Tf~X,+7tItJ (ql]@e6˚90upb:&{tYϵ6H@n=:F݀ ܿ< SQڝIbLǬ{TCu!0"CSs-;};ʬT9SW34B-z)!}dU4!HWoS >R)H^D b p_a!Rp& |ޅƦJp|) A=Vhoх "ePc#vkYV2V@?a/%B6Jc_ʼni?xw;oK)%{BжwmQR.vd@ ١?"*P%:>AZ"Q;a.Y[._hK0P(*#Փ*ESW$ r)eh D-8*Ց_52)GfaJ(V3J/>#,03ツf>j@v3AV^3U1n7'*7Zp@ Bt7Jj1zb<(ЫSTGHi!+rur*e$>?_|&ȂDV E(Ifُ?^~?ᬄOt=)9$+̺?vNn5c9 ml/h$|OlX?Ia=7h!HO o]yaZSX>E{!([ GS3eU!!r 'l~UGByˏ'+}RNc#f?xHs݃ PG\ϻ.$:Y%v ڽ%B 黩+61׃{G=W$AIW(Kfх)ΊC2I3UVşrz*/= $qxt\Eʐyrmb9Ձ^(߇(_́a>!S6pq8CbN¶fs j rd)K ?Q@_4r<#7$%¨xMeT} m76feX (#~ǂ <DGn\P` >Ϧɪ48mKyږic4ڗW"^p$>z#F+1Ҡw]M@.CEX7*|C*EBOMʨ)8I%,޾AgMQ[AP`d Cy? #pK{9T/ٲ ~r{:Ry]Mt8_uDBR-_0`vUߍm"q. KoVڝx i)^~MX!qi=:puz <_^xv`e2Y |zERV1`Rm" R O-dLoɵr`wInQk} DO.&/[YEPg \! ]{+juqp4W}z`rIȣ s.@`{YtB2RҟHh?U~ [z_4Ĕɼ]ϵ"gzj#%z3c ō9R5).xō6VGhpFnC)cUrDK> stream xMNn1 +|b8K7DnaJB6jez1M| B="c/ (6&SKߩ(fIcЁ ^Gh5C> /ExtGState << >>/ColorSpace << /sRGB 56 0 R >>>> /Length 511 /Filter /FlateDecode >> stream xTMoA ϯ.؞O)䐨Ԩizr"Z8TkR=3 `?]{}['Lj _]kxZ;{w]?o@KÔ* R3a4w7{xG0gGGs1ZKfoޱY6x$`Hxo $ċG!ˠps7~IHI m)Ŏ R`}؜-%`X7piP|{Ǐdʤ'"opk}؜m-Fτl"3٪F'Kк0Z&-Fg|iF<"RؤƏ`"X<W ]dw籫Dk "t8+HNc<^ Nc"`\nv p<=' l b%l֟gZV ]D ^ԃVxΈ`":߹#H endstream endobj 58 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 61 0 obj << /Length 2586 /Filter /FlateDecode >> stream xڥY[~_1X"En4@-w}oR,ЇrH+?yw$uۻNʺ+rؼ{X>˒e1~ ;~7_i:$vJ7?c]N8T-,XG_}(mȐu&yY¢{Ħx⑛NHg+8ߙ4-Ĥ4$ ^[<V5gPC w?CGĤGuhj5CZٹ{q0I/ Rg^ @'9mے<;4/Z0YZPm~aj L.ϴ~9Vp(݆ͣ gV0ٞ/F6">wWiU"Y䏓T|UDk-]2i8> :ҙF1`氺^"~oKBxI(h·mTpTmz̫F+5揽ޙL4N t žLG,NDx&kfqFlӮHaY;%P^bWx]z-oB}19\I8ս<`9l"qAF|3!%ه- ̲HMJRg^/*Ɋ.B6+~N4lYwVeIYdL uZ /m"ǖ:)l"/iM|8񳌯h`c08}wy bwi>f_0ePP8WJ^fZ_C{ O4szFfd=| G[^YaD#C@}6S0>Y:p{Tղn8S$ UB vPU-]bm1!xs idvL hXEJg$|?@u{WQF6a2Py[^h21p|T 1낵};hJݜ Ry#Kȕ0WyI\fcm ДrGkBTNO)$N҈o Wی娆8Hy"u X/Ydŕ> stream xڭɎ6_Q%v7-@҇ 0l\JlˑtHQUI>}#yWީ4)R?)'wSv}}߅^[rYlaa|CH`4_Tj v: R9#\Vh 鑁o.[)8[rY9g`9i0Wc$dMCò8 rÖ{Nٻ ^EN/ /, ϚM9$͈6Hʹ0H s)n%g 2]'(LzN(c] T8#!U”pKzqY~;"=_gsAy,g˰&ȉVM،Uʠʍ4) G"2:_lH5Yu^[ YrEjWZlQZRՉ(kDDY!Y,G'Cc9B?LEi{`GE @tx k*r&?S( S2¢V2J$+JV=DO QzI{F5oz>ІZe{<N@{smD[Y?rZ.G@aֶ#De4Yb ;u2?[^y3e6)Uۋ*t1aZiO2HT dr?{[l9,(m ?4da?Cvűk!B 2UH͆xHH_)P[ g=Лsgoʍ$e/v\:Z§0oƩhŪ=ٽuGOG#Axr!!f2VD7І$F1A{w ĤKuՐP,ĕ6:|mMYkaɼ1oM"^ő0sG3nMӡDMDї!B. VLp>}xD2} stKIQ(-aBxql̘rIi2.$ƈB6()ئȁ/3ڽK#Y1?UB-u{Ay΁l޷Q1@(pa)]GkڷkVcHƌr1'pI&5ґ~i/sV4![4: kC1"0/n$U|6wt`:I_z|P:X!YFc2L!\huX" '~OwDa'ޮ*(H ]b'*QG̟ 3q=b}YuwRFq'v9mkJi]M`"jQzΠ܌]}~}tDM2 KG79lPCʪY)JaӪ0FI{:QkD|4 Thl14$WX:{qwg^l N0>奭)RWl}=K@A3%v Lɴ'F(T~1ZTnD"G~;baKЀXp{QFBm"'(B54n4D`s|`,-:O4^ RІ_Р3v˲W:ph%kiV&&$?:HD*>5ќj+Ft-!/_jbMZf:ckEͰ#k ƼߓYm۹ LķwBB=Ġ}-6zp$רcy•qΆ!{`1*^ u";,3jC'yM%f/ crş,R[ׇI/?wh=KySLVr_TZ[weE^p-!r‹94aOM&B=*x9^IHu:-![f rEo" endstream endobj 69 0 obj << /Length 2534 /Filter /FlateDecode >> stream xڵn#}B(PdT$K"] E>taleJG#ٿ﹑uZ4rxx7޼3~ajuk7Uu,*ofw18ot'UY∋M^{ 5ß1| Ggn+[1֦@G8,mC{Dv@Mq>1(>1PO0Fp6A>{8&~ XRyײnwrɁ)1m[7 p:f h+HqB)Qt+tq %q5wV~?'|{$'=-z&b,oi 4a@mp)nq3bzηSSF5YUoA RGy/0\),Ɏ -/ĭ[>Dsr-rb-Ђ.AjaӒ N?IJs08ii_b=s mPvBK}ßaA~Sse2^2Sʗf|S@5rܷs^ե6SƱB-K*{E'98:9\sWδHe:G<Z PS됄B簖V<4b\D_*) C.N#Gr :|ѕ ;Y8IvhHS>[[,p䎒f`xIM&LrƐ3>ZExH͎!Pz$,!lZr#2 IRmYAނ]f j[!|Fz0XAIQ89GWuJGh@xQ&"( (%F}L|Km[E@G AmaJV}{zN4C2 Cp98vm? +LT _8tQ<\=e)e/u;11oNXOur-'LuP[.et$c\ e 㸃 uH8|zRf1YlIY6w\c]V ƉDXhx8bNQ?|H}NNњcbӤ #QBa5DMeeJ Ѕz Yr>Hr%K,_m=zX uc*k".3y`| GPw~m& QzZBuwd`1Z\q#!A4$ C/8?TEu|)NL_@csSJ} ,9Jk9z6y帋?`5œu貇y73'vDΑ* :,xYFmcZqqtź0$P'%j£3-#>Z>26ǘ+eVl˿bߘd]Zy NK) T588n'}gʕ;9>|o^{1°j<&l <>n;$K'c~S@Ge2暣.A <<yud6洁fEx !BcvaD!DM:@,,{z"AsPsHTnvc_Qigo hW!et!TrmF.=F^X:21"@/דɄ-;vrZeUkty`iw ~i6C]cZmAm RJʊL$v1zRwmm+%Q宯k r7lJ<BovsH2%e4t\jTھQI 1}h*M=56/2GUz\j8a{ہ8^JEcE_ E(OoRAsȌN8șUFGoG2j^8e]EbP,M!U_xp 2n,)c\* oیKZ4I.&+@ TZ?R8޴p>5>  Jm~ DэQ̡1;mB](- PpHqd2p||sz )T9̋㋑VD &@lǡr 8af`9Nn^Ds=+9,z,^V<*t;digye V]?/qVkg\B򏢈1CqD#l@(n', u^29`H6)+fl\+<5PG当Wri;nA6Iݻ2WЭ%0?+3)*KR=<U Ӓ,tH vv|[sEOb~<տjY!SusJ{pRCE'i2~W[Aa endstream endobj 72 0 obj << /Length 2493 /Filter /FlateDecode >> stream xZKs6WTmp6{VrI%qNSE8eik $Hh*9"A ~ssG[/#مVpe7eɊr%/~+Qp%LWdRer|A8 Ja& C?­iD f]&w)֖KaM!.hK-WN,14̑Dh\ {)CFbB RR%GG*< I!>+%~)\u&eTq ۻF#3I 0femKVh5Q vس?MYp<5vo ~ Vۃ>l% Jcnm+O1Lyn O>Af:8pnFl]|qFRE|kvmV{_#7"X"fy05㬯?%Rx ɠ7ɲJ!́5IVY``5DVUo0^?9MqoB^ U_oѣKZ+Fɼ ֍5 ƒsGh_߅oᒽ H A0c8W|{SĨc&)/M3¸>mM>oFn  UVFidz`HfĐFd+ iy}<͊ RvxNatc ‚ds8C:צ̛6j5 >TP06)qZC8҃و~:(ԙRU`#]zOT8JȵH.ٮ ȑy,+8g8fnSeܷ $.! q!T?E,wrj-+q]Ekp.Z;RFKe|)prEces*j'}ۤ7]_AAdt w0cF;ReX)H-u.oS^$ӡN_ue}haڌQd 5c`d+T(n"7&JۂkL";V"juR>:e 8̌1ܔĆ?ZQ"69 ~&=D۴r=PNx@A'K3(8[hg؅!J,|Q6Aoeܭc*\?UǡBT:L'+0讇q>0ք`'UeC#ѣj:&%)$r\ <SmibPiL*@o3vS2n(fC`5vSk'm Y\U39 dZҊB1AQ̫bjxu*d)͜IQթ疣SrlRYL8(Ae_c#1XBN㎏SCMU즇EQMN" PŔZ]8wl&`TRbc3 Z'نQ۰FXM؆b+qhi04"\s9{}}~XQD.Yvu/įWgĔq$BCd4M3}0 L胲![Fwʓ=!T/j}|aa68tXp2 endstream endobj 77 0 obj << /Length 2520 /Filter /FlateDecode >> stream xڝYKo9W{1Wfg.`diKm[%yV2_"ۦ$[|bU}`՛w/tںՋKhZݢZQ˕kꗥm_4.t8q}@Kha߼sQm5=0͜V:&#nuCiC땋y2ыPET>Jùti# ߗ+݄*glO-{Qɻ&(w/)* rPzi"(sd  ,\>~ܗNAiml7|%jȇ1 `^WʻV51UYiڹ)mbevbȖ֎M^cLuy wo4 #{@S(`e?8TA5J{ж]ٶEے Q/&T?P Q ;ې:/p(~C3Yx $lX Xt_yn%6WOlE9 W6f nY+Zzfܒ!Tf=`}ɐ4@h[-p[K'n68Gt rlxb{iL!o'A7j M%9B_BYP4-DI/ى'JNW{ T%P-},Gb5m1I1Gwl\1C3FrmʉJ߂\|=8r 0Ѳ;#SIHԟ3p u\yW}[P*EVsCPŃKAS^lYK+05)}~NQVB\~9tгk @12 {"#=E?4ṿ?ԾFE_%[ߋE8g 3_F,4ome+BGkjF~c䱿޿$؂j7xp&̘% tq$I2;D`/8BDv  Ekg,(A6"| r)cVj|3mn'4m ZN7dn-$aXqY݉MlkSgT0UC=W[8 =7*=e%fwy}v;H+:m;~u1`dR\]57LJi;g2VK%q1ȼSTr\۸*jДP~M˴}ăEpϤ\9$Lܦh3|#?K FpLں>=۷^G2frϑ]7ԅ1j֓ )<]U޸fq P 9Тk6uyB|vlzR*g_/WwrFxֱKTKm/czRe$uS(+٪nq'oOxaAq`n-FA O~{Zy!`6><=_=1FI$zyjNXcV!>ećVv1 [2>1$DZ0D/|q˘P^*lQtbICbk`שuV@֣c# Q ~zᣤr`"HhsO ➝5Xub捼ʷMsb6&HKEu2PfۣHT\DZ@b{#8Xi@ډ1M3(u}8 B3PUжH7=|3қw.cMBiH"L\i-1aVC(_O XZ,Hips,l_m" FO[+{Wg|3\CIS[ Aɡ > stream xڵXIo7W ˸.@E@$Yղ븿o, 19۾pt2>xѪֵgA9Z2ϲ9<~{f|44@_lEo^![>:Y剓BJ91V_|E 3̚['Loc˦oeM1ψNH|!(z-A N`^, !Dz;A)wy&XaaՊa+c)(e1s!4[P *_6x/n;[샐}cU]H>pU!a"RT2RyUV܏)&}+2In"qHqb2x4b^cmhmyBOuT\Rl.u!)ˎTXė.cզiMO5gz +7mƍS;~7wE˛!C[05lQu]DoREb%Xv۸=> stream xMPMO +X Px4^IoCӺkm]wk fB7k'P:HtqxCxb4xXkZ($o}vW=΀FZe:pFu1w\Xk(B(OIY9d2d?#e8Ie.9vPa4y,&q_]d:>F*K_[ _& endstream endobj 78 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-dig1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 85 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 86 0 R>> /ExtGState << >>/ColorSpace << /sRGB 87 0 R >>>> /Length 629 /Filter /FlateDecode >> stream xUnT1SB3<" E)d*@J"A R{׋wz wJF`QL sê _ц-N[UPC,ʜLNHywjXX<< c$.o^01J6Ov=wd %TϠ jgxU1DLNtmSӬ S>8;Zbɐb K%L'_ \Gj}rZ?f%/ph$'vܗfףKݝ}USW!<)9`UywW>7 4LW/cMAzY  zKZg VZW /RPiȴҠH`>GVC bJYwj)Fa= [)FZUY_[rI;?[9p6vHgce[GccB$Oekx\ڨ&ۼl!{}tlкF"/Q}N:xE6U;8 |~K endstream endobj 89 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 92 0 obj << /Length 1351 /Filter /FlateDecode >> stream xŘKo6^jkECOEAqƨcݽ!9(%Z@c?G?..d;ce1FS3%VwKnlm9muG[}G5>W>Tmucl9VY|yYil˜_%tv@tb" nlXK"lڼsa.}8.e|vISK̶R-غǓypY|x[e$O@Ec#dZHa`œ8w }gxyʇdmDރ9,?k<{WnMN6ΉQ&ׄ#7P6^?o3`u0dogP{e;<8!EZ[4&ě$|}ћ2ldPw.6kSͯa%PWkT7a{g1"kt' !G] D>! iE0Τ iTS zC+ c> Y ;x1hlV&uh#[\$aKI{ LQ[WPi2@M "*Lƨp8EVVO{zԼN*ұOSJ1P0N |QM UVPUh@=TYH6MA 4TQ +ԱSzХ>z]UV :qb2u Se*bT@]UoFj+Zj[A8Um6mM CኵqJA̧#(1OĬB<$c7{L, 1&75ub>eab6[x$̱tnM  ' ܠgjI)8mBPz{#dZ/"KF{R0nʄ~C_٣+&eCa6SDRL`B%ېkʜcxS<SWy:%*_%_?܇n^܄]hZo 09B~54i/nRBc=3EZ#مKwvGU~TD0 3Z/[5/y藽Te!6?Đ;\ ΂$n݅fy|v㔻h<4n;/쏉cgIr wQpeo;-1É-%h}uiu7 endstream endobj 95 0 obj << /Length 2783 /Filter /FlateDecode >> stream xn_K Yqd7# l`_l99P4ؙXVgws® g9HlvWWUWכ7ޗ͍&kejt&]}sGsn{i]7C?ݚ+&`8Nÿ_om^%/R$Bm3i=G3I6 H$# ^Os\~]f6 .'Q'1=#-@"wHmD~L(^?޹J~[[&baXdN]$};ldb'h19weO"g:)9 H k>]ñ4 "9]-Nt.™ߣy&K^^5ɰ礼Zhr̚hdSm,7&e /ҘY9JM KHGbLէa"]]SO:2gDײÏ?#_̾v&\CNpK*g\x[.=dm0agH ]=۔QlisSD$#gH>{ Gk D deɀ(!.ԁ}Yq#OU}M'"z^`PM 8YIaj{}~w6F!M'x*bYvgGdQvd@pz뉁 \ͪk6 (œLq Iy*nJwPb5_Qxf"[jCyVGd%Zx_b/][ = Փ@/)2>f\n%{b߄kk),ZWڑcݬE3bɄUx/KtD0#nt(x&|φ9|Tq?Wrvn])^t-t 0i傧X59$ a W1.Y!i*0Ҭyx;-h(r giST UB+z;f&wܢfiH ځw?xqf{&ǶScR9qW+,qb0ny]unTq"~M rjH;" 2Omc6f&(i]  ƘlE$ I}"!ǰx\؏(_CE/ypp2 @85@/^l^S1,J_pQ۴ɝ r/pZ"X5Dw  *ы6h.Đw}Wċ|/ C:tn"WܫkS_E}[#kUeyc\ʚbDOQK( Oy,8..qֱCO}ZT+)@)"T f D#'>  iUڣF ̙/$p:Z*3D5!dF5nAu^_qj8%oQ?")XU\Tr(J*PYCda5 Mm#\ƷLl72qr' RWl71)#8,K3"4ENi'6ɇ{6jmT㵼EqZeFNW/jjUk>-aO&ċP6x{ugkqāpZ. $9ꑋ}p/aR+H@{a6TD&*cSåmk 򫪒NuhC^Kpy+7W $luclZ2pP4,d ?p1xGVS"S,l9œ۴iM{ $ {RCDm`+y;gtyNp#߂Y"ETXM6) ˘C&~ܲ抦I~$l 说KY)D+*Hsm\;iM2$]BP(<0wIMFu|C$wz@͝fOtYZ*Vۉ ?Öp(3Y۝u|{Ԋv.e X\PV8ärMZD1jBKd>W8ɬZ(Bc(WY(qp6΃|Iv-\q+|.Nj.:/1wvohl+(EqEw+"K 8;(yїfO/a-ۤ8euZ5q^AR[7 AY !߮b/D| ͇unJgnnE -C]J s{UWE,S׈i 2 +]խ~&/?VOJ%vk|ChjʻϪN}PĪ E -:aUA5bHҜ$ViͰ;.CSi8 7R[kW+B9ɹ=u2kAzxG&K" պ"$̏x/97Qp&Gݸv|3R(]B)be\VfqF9jros`jMhobu!=N?ߵCU-Ivgki,wZTs;93ϞSU@qtnW'*އ_ _<#CH&GɎZ (1,ꏿ@Y~C|"^b wH> 3gmK,lAwV= KZ5VLkoz^ endstream endobj 98 0 obj << /Length 3319 /Filter /FlateDecode >> stream xڕZIϯh`f#U' FC|-[%R % ?>oM:[dW˧~PNy[]uUV6w6wƇ{*N𴃿q/3t>ݯtf-/QdNgn{7ʺ <ř9?29n 8+@Gi݈υ-26 zLFG˨~eJ}"f&uCv}hǃc7p;hohV̭iyy^:}ÕqnD) ln_>ݓٲH}/AQ2{8;GQ,Zb➤OGc>&cL#~턞]%*Fn#Te\̴Fd 2e _=[ws5>rc?lΑ9??o=oˍ#|/ue׌w%uՁ6 DerB)> ϓ+e:(*S03<0MM Øͺ*+NU[%tS$i˦3œQ "Z6\j q%osc3yvg.`o̒Њ2;tɉݞ(a%f_h8 9l,&xJ|دZם Gh4uťџc1Tviz%=$i&:6р߬p[̽ݔ&r:g'ѵ#-"dH cWɦBh_@%ƅ"Gnt#ۙh؋s'\ltؖ1RykFmZܰ9 6?$-U ()bRg\nP䶩x_Q>k^K,Vq >EXMVs{?#pU  4wM9۲7*OO<:,&̆Ǹ\ZQ|Om(qRTJ0@F_$F^?HV44c]ms$$pP$ U'h PW9S "RdB7xE<-ґh ڦsT@&eQ<;)+.Exx\Tv'ۧ~$ =͒"%\A D(52a q|W K54]G7` xR(Lf1lʑL-VPVwv,rdݢ#?R"]RHcqbYؼVw)X1)@Hߺ ^@Qm$vf J`a $ +NVR\].(l7 \$ 6@YEi6`Dfbu]_Aˢ~Z:)s |"'P\Յ+qSr68ᅤ"|rvEHVbu_%8lҧD\7Dׯ{dw8jbKX"fYZKav\UtF/q"3uY=-w鈗ĕ>PW V/Hx%c Ue܄HW!8c](euhzn~ni\ٽsIv6Ҳd?S0hUQ ~Sv0KVnMjG*.ms˪/C_/7Iz|>j'aؼ| g._ݨ}oG)1:г%ЗbUD{^α:$_i~w{QdgxyD ; QtdܻjqoRz9TNFP;]ySw+{|bO5 endstream endobj 102 0 obj << /Length 1523 /Filter /FlateDecode >> stream xXɎF+HxD\ $@<9 E $Qؾ][sY2Hȁb/U^UWqͳoMP**Ջ"/Ufx(TA.&x&%<~WqY7uL2\5-qjީp~m\5& &aIo~zVم".bKG6O9\jk iqhS-.'RI8o'ƂӖodvͯ#1z=UyIUD4h )/QnK5Q4 Fe07A#2%ͩFk2 BTYS0A lN{-h$-kJ=q:"SdIp[>)!Aߙ(GhԜd+޸e-';IyߢRYBF5XP'=ȂU-)s[1P-saaÓ%ft tKkCVQPή$b'@tr#,w\brO8,&2UTc͞T։5G9[)M0;&q>(c,V/MT f-L*6N-k."Cx ᭀi[et; ͭB"uopW7Ⱥ?oCw{iԣ8hzr%ڥoRLߙSx+͕X<[DVaʵ/tFƠh{@ƪGULKg ʜ{+Hj֮ ".kR×E00Q(=V)R1+)n.ۀ 5^ a+gJK4y^*ٜZԝK7%7tHO~"Qhl$zW3-.{T ׵4nY#$j@\[|4χٰtIDž|6VƷڞ}6N,run{WRGj, '9'5=Vtx>BDžuש*|A^515j ;t輪ixR@81"Ў xr{q9kC9c  ׃nM\vw”}G{DA4{ ;D!PAAD"7~:ٞZ}LNT%ɦۊbݍ2[dN8H~tfN9!tݦ3CN~7za&B2ILv)2lzD_%(}â6x"LWD <{t<]WyBpկwG6G6D> stream xYMo1WHdٱ^ BD\!&j=~^{IfZk{3{6O&');ˀ MzB͈\tmG׾6<|ҵ1µO<@B1,Te{+FcR5q+?'F_x jVcs,= Mς(=5T[T0Er4TIg M֏5e#:Q}/aVS}5(u+tU?AyV1?_XTy䔑ӰpVYf3Jʶk6súcş`Wt wGy[ED%36KDϙ+U xS&`.޾beCs_1Gnf$2FA܄sgQ0MJ  yQb|axiAf:Qo˯ʖT5CjgY:wҵ /iJFnHM|*sb׿Z4iw*aEbi<eQWcsp<+2 ARah{,o9c[6s{N_9*tuEUhG983)|+nS$fOYrbդx 5hoKMq\fͲOλ,] Ӎd׃15E66#Cتh%A{EvcG]'MHA1+pǴd.[{,BGu"ҭroe qOŻUެT*x"TJB!l;U&=VD{8%"MuANiXIRN=Cj .jls;nW!5}uYNۧb֭]ޫb;RbjZ> stream xXM60zC@S"@}{p^EK Eʖ7Q5{f8/㛷m=)jY`|?cE fPZʺx68\`ܷoo֣*=."|Bw8 _h޷ͨi*n}e:}LOf7T* H+  Ok#`AP?,Y'V &6QפY7b9@zKz[c0|>wR•Ƃi0 ̬` zY`G?g{iQKnL!d=EqV%yR뀍"u,TW1ǪsV=UNS0Kۮa8 eM|ocM*YD5 j_-MC> stream xڭYKsWT"yp%+ٔsrjUH$ʯOj-$u7w}4)BE*LJˣesYt>*7Y<~=Sq5Ǜ g:tW }Y.w˄aUn#Brec(C*H =?dysY*^"_2癍ǵ,nprf \v;;,8\)*6amrlqaC\TXmKu,d!5cpmXq93XnlN1A+QJ:̟ĵ:p#*"Oȫ`3 FF Z%DV ÿsa6>z)R7|>+3A2%<]G#i<\{:_}2(~-씸 rkTP؈o 7YQqc_K/$H&%0ȱR$Zbz`m wઊ;\UL ,t]ɥPYt`ubLI"C2ce#NQ>#c|p%Afj>ڟ8/΄Y5RV0(d5^82>(`t!t[Au  n0$*=w;8ND8M5}ϩK~g9]&릣.dUytwv*?a  E LKt4Yؕu ~Kz2r}d7n0v, Fb^}P+Ӆ|P%"J"ua/ӄё빴<ОmCD]>'B"/];=;. mL=Ǻgc]Mi#@:D7p".d}7̩'ӝy{o?4!ky@)mBчm?O8=EyOǵlY\ё+Ts}g文ɯTo<DxkT}Plb"IrU)HoqHE*rI% )艦p:ﶍ>L4 `fY ?,|l.y^'E,x1ʂ΁Vd^`u~ L09";bZksa`9$s3plp1.: )kʭOv@Ht* f8s(ڤ Ha=Yn̍E$Mu)̥@N!Q۠m1Bm=`֎ڭ,ݯx]z'UT>val{ U-M9UEp]m›zW?sϨjƍ>n\D4]-A,lɩ•;b +uv9{ͩ4|ZwNK_k#%UO ɔvo+8@I͘[w;H_v5$Rv=(aoXrc?8WFZM ̻ER8p2> ͹*tN@jb'KZHu%Lz(Ax7 w*@UvL 1 g^3e 8 )Z䆕S4aDp,ļGiv(҉r?q=]p 9buqKlN0=uWnȜfPpa0\FJYF)f(Aa9 cI뷼`+8MJ)УTTx}îPVuҷ<(P.IfBhƏv ɂ6>Y)TqdX,/E#>vR$hJ > stream xڭZKsϯp퉮qTIe6$8LDYE!͌7>pA&g_7w>ݍ*^\u榮TnwVcM{SVe.;oߎ*f\w~n7uY, mxѵk0t,4j-4u ,RYjiy6dm]F*=bqاB679F*;fB&o*np/Z"S_xL 9?F:7#{GbOBͫV򭀦n*ђj2Em;[a"ru+3Og8.-H2G~Z{۶̦"-pH`VjX/hҙe+GdDe`+NA`BN]˺7pgCD9'r`>"龿Sݑh \w lݩMc O4NVInb3uYŌ#MAAUS:NB}QuutiմI(x&n # tr-*j8 $Knށ)Vb}ǀq.y ~4>UΩD=Du{$]4&FbÁ\ye_QtQ2bG@>%X$dD3b>LQ^DRc`vrAoC3*^+*=&/Ko ?r!7I 5L[u>t2&kSFyNG5ӘSo.g%] !ekX(ZetÆ$_],CH̞j|f,cˋc Ž{ՔU )"7ct$O~p0e)l\2fES%KR-LrεfZB _Wn6!E6{8q>ɹbTٝ8$7m@dQe, `teaKӾȌ | q2wQt9,\VTYgI\բ0;:RbhK9L~Aq6پl\m>NegmrUo-j IK=3 qR_$ʄ%N@C?a @5.\С8 {͏癔DzA~50.I!:d0-ߟ\j_%F*pE͋@YhH@m,ojb;AdtM-[2L &nYJ[^2k/𷖺j?t!;W g7q/<ܧao7>|o; $mQ^8O.Eܒb!;b|ʝ+ _XRWOfψl4?Ili@sM9.~MWJMN/c4 0]F~upmfG ֩\cu_w=9)?asRu0/r |:䪊7*͈J%IjF.3Jg3W_R8^b҅q@3Sw|+i6u6,RWP$yAYf[r[Ɋh]$bA66:syӀ;KE h`MeY5,9~<{ H |W! )\M/eԒ0Ob0]0cwZhl݄ Oʔ-`e*qxiQFXa$.ח3ϰݹ2'!?KhKuow)Ngsܬ_rn_W~@aπ[ꑰ_<5/)/T3Ӌjڋ50a6Dy1  O].W/q%6lmtU?sHe~BF!OeC2]o83:s{O PUyۊ6{a endstream endobj 118 0 obj << /Length 3085 /Filter /FlateDecode >> stream xڭko{~q_J>/h"g%ZVN"u]Λً6&MmnlfSSګ"˫?ἰbgɇbj<äqla8vo'"| G{7;\S>."i)2i,{٨GcY։&wMn񯛿\i,)bit`5y gXd-\EZDo+DQ ]ȑycpY'<\;xmag*Gf9G7yO#ͦb:0=b@JzlQt\ֻrV6 F_ q}eĈ"q˪р.吩F.-~v, T#Ƒ'wQ>x޾颹`u׆B, YݢE^CqGl,n˥% Qwѫ SlYIsAs릹2w>#?fWI(= *Nvcbߙd8z~<!1E%dz(^9Kߧ\4arxiA 2PaT}u2jQ ,%;UyXO7rbÏ߭fbQkM%uR9I9iTB ;9$WK8QJaN][\Ȥ`LȖVnLjnȔ}Zr2#yq>nsoYUi'YcNi_2'QNgY9z d~<\|2BK R$8oSAӛ&tScU7Ш}VKkjX۠> $*bP3%وqnIOHޏ)>?FDvRLRlГ.p :ڕ5[q0PX@Z.(gug!Q|'k`Pmy1ȉTF}!I)T1ftO;#Qx¾ L IcyL:3XU xxՌJ׸^[#;~Z(;%r\X43XyS 5RwΨ͠5D ԌLM!3x-NHȟ t଄TI]/v2 ǷN`[b :)2-gjFj%FZgr$ /\cGlzlIrOae%yMkRIYQL4ݫS2 .W`02tF,{w$gT\&7atnhgKjyП>]@9Ĺ \oBbZB5Ap2|tZ\pZWUDY .jPRh&nH08@ץbB/dN 'y)IlI9 a 5 G+v?nϢHd(';N?bj9Gù}0|lt Qv+gq/r/?娗_Lzzy19:$B>jEC*U'N4SR $ҥm8gjI}IuJ.6vЙԌѯ@\ThyujM hENGo|׌`<P-֢ojˠC+YRSRA>~jRvW]a,O0I9.j%rМK ;|՟_ 8 m&2bזW!=7#F-BQx![;`YD(9F=V\a7Q3:*9!F[Uy hN>yOENj/8ѹGn9Zl e n'Iw'L=u5+Iq:;>7i;~{˗Dxj/mwtרm璷Qm`0CVm$GJ6ܦc56㏂kMz#*pg'o u>ͱwltGٱMqਹ㿼S?o>UE;G qP~]#ub\ ~3qQ-)5,1;L^Kxw3vH闉Ԣ4jM~S 9LLjZiNgDcNm#c8=ڈ`v!S9("oCiUzFɉ7 / endstream endobj 122 0 obj << /Length 1134 /Filter /FlateDecode >> stream xW[D~ϯ8]k\ATB*vV6--Ӌ,ٸaLszW}7?t#UDW>V<_ǙO /g) }6 c9lrf;LxCHZ6xlxyânx9Ú'Xfn\whK&XYTU6nQ[8JI+n%XI883,'t@YxIs,W2M5)07K>~d (>)t`VG^ }dtL e 4_;\i$aT#|yWӒ\uh\kh mV %bsz0Ή !( y F9V ma kUzG ub!3Wto!PLL::ٚlibbRWFt =<$/yx.ƣPT?z,9Hyʋt 7%sC%(=o6rP9}-$Ari MsAԨ$ZQ7ݸ,x,d~[dWj[(.>v2Xd) MyE W&*JnGջU XY 7^gQB/t[U.S[>+4bC_WQ4|֊Z )#qJ._UP(]?W4SLZXһh՛"ν6z@h4Xn;Gݥtx_{t3\IUmuT.=};NNl?8\ DJ'nkvi3oʄRVEV~.y6^y~}m>ˎz> /ExtGState << >>/ColorSpace << /sRGB 125 0 R >>>> /Length 760 /Filter /FlateDecode >> stream xVMo0 W*"%Y^Zl t;=.ǚ+Ǐ$Z&b EJ&p_|{|qmZmB8/ zkCFE9eƳB2]wo].dM%V a4)>uGo_,$tdঅ.EC Ghp$MJ13U|sfG2Idg=Ei /a\tH0Kr +%:^=oxQ'4iw!쐅˫ t<*L7 T_nݛ'+$zMs6MLH 5쿸Խe.S>I*鬆}2TA@C tf_&ʪp!h{~àN/kOPZ'uqaV&vu\r`jPN/ݤke(5T~ *񱎰oe&ۈIR4~xТz i6 WmVCÎCUɱn ZW2m"pi@MWP7k>WZ7dVQM y[sxF-잓-< %Oh4H p&>>@N"jlP Kq U#x U ÛZV{IX>N$n݀lP;غ̑mƖ+[(X 7ՕMŬC~KlQ~lm?`yP?^_?J<y1 endstream endobj 127 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 130 0 obj << /Length 1218 /Filter /FlateDecode >> stream xYKo7W99@c$HARKۃHbv[_rC%;A{% gRg/ߚv"EъVN'RE٨IedL3Y' +;jFoVɽ7?V^[peW%F৛^IOxs,Cd*eQjm[]܄Ɗ/yĭCЮ{zD?ww '.B+MQk9-~:o}x->*њo 9{waӦ.dU枖~Xqtߺ (~#,X"1EC 6=NCQ|nt 0_@seKZa@ÌI^00ߌ T2)Yja ^k`0l@Y `e4X﬘^C#b=jÆj1?_+(}M&GD,{_Yt_"oc׊85&c.OA ֯%M[%)VMa,ЩĎ44xMq2fŘ~]F'#"J»ko1oz)3\6ܡ`4 l[P}\P])ʚ,~ (Ճ8>w~i$y7[**0-,`hK(ܷd<2:n~NDWC~LY2 ;e뺟Lڰ@n4%#k2G#۠rQGHN0?DeɎmTA zR`XaN/v?a$6iПw LJ@Ǥ)uNyhH^Q$%% 'r#9]g )tj֎_ t.s>XF9q^&gv}- _U܈l endstream endobj 133 0 obj << /Length 1314 /Filter /FlateDecode >> stream xXMo7WTA-\.A\ C!Zr, IiK~{GrWZR\3|fF?Ώ^5DIFMT5V6rjzddbf =ݸG'Ni5W?nh_NNNп5v֓[|AڏΡ^t 'NKolG)c;'<>;H'I1*3%K;=uHKo**,{*qa}'DUTZ<%E緤 gFXe 儛^AWiPJ i%fN}4M(+;B6S0n[E8_`ϰIR?Z"4)+PuHBz>Y2,IA4n͊bsEJ ym<' mY骲. `UEfCYdP¡Uߕ,%:]R*×H$:6WT(T~+8ofc9l@jt{5+2PB$~26Vx-hԝ|h%lϞުT32{uŒ˸fZN9bOx3c0qj_=U?oTt`:ь6)\/R1L12B@%l?-:bLxyݿ|bZ iIQK~ endstream endobj 136 0 obj << /Length 1611 /Filter /FlateDecode >> stream xYK6W=ZCԣh.)ERߚ[]Bn fM{ H97Cz[SHJQH&)e:ʌL)FlP*(KlO㟨RГBITҌnh6Wa ;t5Jx W}EK?,( me}FQϖurT*T(KB7d oY,`1ZPቝLU+p_Ʈ#nx-&ǂ`,z9j/ej=Jw{><|βU¯.9b𜁭7 A)f=#4W0lslGk^u 4ZJD׭xvy8wS d}w+Bا5[Vw!Į" jE$!?0.\9G[)0 ûD5b5qW`RɘICGɥO#b6'=ɥ@yTLrɻD$їB Tn2r <&GBەwQ:*#SY%|OcPo#iѽ_2NjOS8nz,c;> >/7_By[@#eW4gE,ٸZtN-o؃6&yz[PwȚDg6ɵ`lnaڝÚƬ )g7xӣMpt[skwPRG۞a`V77UU$㭋vޅ*4{ ^W쌆D _svEtў] 7۪ q0UXxA#F@Pnl٬D90)$+Kśً endstream endobj 140 0 obj << /Length 2730 /Filter /FlateDecode >> stream xYKܸWLr Q#,l#Y"!Aӭ- %="E5$="KbW/Ο_ݍVi*}s1H"ɝI kn7J~O:y7|{UodS [s<B3wHX2Uq[ڤn}כLib!~/.p{gMp#̃ Eb`A9?-}Uڲ0@סg^^}?2_bQ$HhP7)ҪPJ molZ9ѵcT|nkynDńw/xҎQS( 6kְU|ŽV*G~8=} .[#hYx 2 }'<x8gz kt/6 q#JOބs:Io},+}ɫ-iHͰN;S~"9ּ2W:ϒfnK=N=o|';@{E;^cqc`GiFVPfmQA$D/"%y" M{ސIMӏNtzF;g؂aj&kdG]"[eW#0U'zGIPI$y@J`}]tMg_S52Qzp۹AIQpx,6,UdSӑ$ &:O+[?6gƺd[x@2N$֞ކ\XeۭgyTP#ii54S qlw~ e4EBkLB"zb14Ӗ{|nx -%z 7v*yD"D'&hǢ.nt$i|*p:yH Ǹp+2mhiV#E!5ж Į34 w]*)iՓt  ZTҟy@ #qf+V*-K$OʗĝkbmnT BF}e܊0Zga5^r0dk g @3O޴~7B0b`6g>N(-g[w| tݔ`ͤhQ,uZ\*`\+-TI g^H8|h-.!;y}#\;M2<56p\b{K/=81 M8w [2khH|u[J3͋ ZI}[OcqpRmtYWiJ l :5ܓ:e *N2Ή"X\cK7+B _2" s2Ѿ^#Og#Y6nˆ鳋~Gp4KY3*j,Dmw'`J~$p31C t9JA%=@ʉrZrtZ8P핸E/n:Fsc$6X \~NiD{?s)YƷ' &uFϒKz29_᩶1T>J}DfM/МrʯF^hPK]͑=rU_vT``ђMM>:Tw}Pv|"kM[I|W^#\nDz/qmZW D[5ø+vY*޲ʧ`b|x} J]2] x9NCWGׁjg"QmץȽX^RLً/FϺU vp08}ASOQ}jm6PQɏy,t/L%t!jO4fNsD>{}C+- -E m^ _FVH{FN?K9wP[Q|ZAjۋrO0}@}nf&>i:Ļɏ> stream xڭTM0 +8d!]RmGjK%nvW tkɐrl@.֖[6:}>$dI`87jUjݗC>Lww`O*>5n/Tpfi3\Tq%ӦKd\dopO9C^hɳ,p#,m.My7k-(0ca(~sdzGWdt"L|3 K¿XcZsJl`qȅ~9?B(hLGH1:[@?8unvԨv۞ǐHB{%-g{L) (uyp]/2)b9Ny՜hG*S$LY |FKZ hJ/-}^3{%Q Ī8Ɣԗ0}d«vd$mXhWWw~#glv>:UVj]HSg顶ʛFm")MM":Ni Q?& 3GD endstream endobj 137 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-kyphos.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 145 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 146 0 R>> /ExtGState << >>/ColorSpace << /sRGB 147 0 R >>>> /Length 787 /Filter /FlateDecode >> stream xV[OQ ~_GxssKDhlM_sVt̖iK}%8+|йA1˳>JQX]^i?;mӾeE\|Y  z އUfztD֓Wsz6wP}#c!`z" EB'كusD,JBrˏIЧuwH (R Ư6h@_b39"+ҺPeJc@M h~.KFqSPIF9ȩIk-̵d@yҠÕ ڷRi[bhK4WnWbh_u6L;,{WBKcrřNۃ 5MTo4GϥuZX+HʧE&rMjiS/?m+9V^ILU<91?1>,H=!Ju ~˶d&Z?~P!NJ~EH4 L4 ,L-ɔȜ6L;g#/ܱ%${:v=hedy;٣F>w,06K'H)d~$JB endstream endobj 149 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 152 0 obj << /Length 1843 /Filter /FlateDecode >> stream xYK6W(kE$E=lHE{j{Plڨ%t gni!97Cu9I\&-of2QqLXb\~sU4 *([Ne4̒slQ8l!TӒdֆF ̆FDQߖ)c6`(3o QfP_:ĚE-dj& gfesÍj4tsC4%h,P4d#> $`C+kS@ֆ~YTxKk}Uۮ'>uM"KU,LgReH9*ڢz.YҊpk68~lѺ@14Tgv83;nE5HjHJSH3˩`"@) a蘼bQ ;C KM~T9gD|FZSTѕr;Qgрl Źmm-zޭⷐ)lnUћCo4 (4`6&u)PbؾjJFݍy(1.ʑ;L/59)'31R~umZ0pm^[U݄6сXPy8X 'oܕ5NY1w 5WD?;QWC Ė [=(ưCJL2/"/mJftaS@k9%dNck*l" Āw4rU4ۑ ysp=zee祲 @kYjWPj~cwJsLb(Q4BNPy0/ aOss(kɁ9e0W$ Ǽh콎_ZB PB<D b9[o'xT5K_&N‡=PE05QCa~`"֖@BAm[c0 l[W@aiKl6Z,<3 (=o%8+:|h5-sSx8_=QAkXM.2aѱF*_.;u %"Hy<<7@~suqalZ31oyI8+ @ źeMCzAu㉃,! [ޣ9=>eCKOrx2x4zBǹƎ9PJ]cԎDZr4h%E8=IV)HtN&][(1LꝘPc$T1ڲj&VH|\DeX  \ !kd>d# VN \Ո@)N/7AKAq1Cw(`F6^1DGCrLkn AZǿg_e wAtp2ea'8W< G2Y5CKYzͬ6_F1P=^ť6@p`dO%>)[MnJl*3l"bwu8y7~͎+Tt74m7(E,ko i@Q\SSs˿@*@dۺ?/ZiF\T?A \:ؕe\B}j#D endstream endobj 155 0 obj << /Length 2299 /Filter /FlateDecode >> stream xڵYK۸Wr*M nևM%ΣRZ99%"ZRק_A g2 ht7_C_zV UVzMjuvR%wt,WVd#< a:u]Im^1 <.@~䗁\,/gC<eNV~-3jq|“ "zJ>d6#'U yll•*SS(Բ?av29\إaʛ.4K} PEK&q;REZָw~z/m"547;!J>E^gꬲFOMqȶE>]FҨX(L=yV7"O-2 7yǼ|o^&E*~cԝlyx,2ǭ,ʦ*޸~+ŋxMJ"=i!!j!/%NqcOۋ{IOp5X\Qlӵm67*ڏc ,1>V>$6 Ci8+ˏ'Y{w+VԲ/Rdiը*uro KI[?gAA^.Tt <ՕEKFiI #V#1%̃gN>AYjH }L:0i/5iZMٳwz`i1sGPOa b-7N_ڤzq]u=K2P&ta!=D耺t`z!)azѩL6)N@d}Ä]7h"g!`̭' 7cJ$=IAh1۹29jy9F~D]V!Ej*Ki*AlΝJBH΅P{+yny-E *iTXR2Lc xm w2*u#SN,~qhƍwVQM7qAySd/{?NK.rLs|G_L2c<2,‰kaX TED!L 8gfs) &mnQ=6E"<*̺*LsF3I3k'R&,[X K9=XEt/ȇ ,`Xs/ -=3^j%:kN# # `t95*OZy7cF{ 7P,1y$9N(;[$))+k>-4c•+ o vض=WtD皍)f`Br"8:r`N#;j=LWǚDpߓ7cavk!6+lc);TRf y:W*St_ CgCG9re 1F Ib^C3=G 4G4.Wl)_Bc5S P ܡ1E?HT8)*avpEl\%ao 4J(ۀ-#< {^8#=}a\d6# bQyK%=e8rsM]Qso E Sel5xgt!0ӨǑṇ<^z?EᏃl*_S<(Y0]'^m0>d&H тu*&ghh_q{!)[MHqE{/~.7{iCsi’3D2Y,TRkBu #w*A +:Hl.\3.fr"9)l8t|t umrˡ?юU Tc!1pHx~(0vNʙoQ \=\ lDL=TX ^4.E8nLj!iz!X endstream endobj 158 0 obj << /Length 1944 /Filter /FlateDecode >> stream xڭXKoFW*L˧HҸE$Zb%cޝ.gen(.w|3;ԛɳ4Z&s;,UQDh2}>kLޟ<N$znc뱊)tktv|o{ naL1NrUF+K6x+C&tZuǺf8+uYG;Tk&گ[:6 .4Lv/ԑM8yK'aus̄YUL;uSIi$yV =3S LSt̟p!-]w4h6s7W zV8j{èoya"y#<+GJ%ukpDjV#Ѱ q΢wHpL-_4);fv4=mIvE38$67tĄU[p<`aUz LSi0]/ޝﰼ4)\X+zyfc딖.5Bri+k~3(& (%6a*k\eQ'v;eM{^;#un}Lg f޻[Չ%55[`4uݬ.qTOt)9*) +;jA7Y-QWE5ilAж —ZΥX,V"sYiء#Tos2~3&Hjpy猶J_vWU og *BMm%c5_R9wM2_0` lƚjW1 ViKH:,@iO-}3@>Zt;PtEg.Wؘ}xp4B_ K.}fd¦As K, 5؜RUʼg6AhWHX;$XnvǴ` Y 'AQOXd$^B@th̷/Cw>ێ>8]lLݩC C7k& tΈ5\{Eg3 zh\Ʈ Z2xlnyOu9aPzFyJVI'2IkadPȚöP's& W,-"ϽCΛ༻j7 {m۱J{{8u Wͳ+\lUT^ kAכ2S~a`=0qɬ@V1*1x&Ę߲w*qμqY}FP<?^o [Q\ּ@dJ4L q]D Dvs*p܄a/ʳ3*/)Fr]3R?I.+/g=˞q뇵>ҸAW1  ey{xw\:,y*H9;oSmo]\ʒX[^ V"#G+qc@"U'یXND ~ѧ{\r+WdUFs[ɮX\!ISEFALo S)R@>8$A,{GVÏa3ܟE#B[ۡ OG9Ύ}S碐L.QտK(\{z)m)!N_D|q̙b^% Ğԉ4N8x+krGVpxlH96yU%uUl%?MM _7 endstream endobj 161 0 obj << /Length 1732 /Filter /FlateDecode >> stream xXKs6W(D @|δS&-΁dSKr}HNJ RbvūwYզ6+l1+\]gaaa _  0G70fO4e-A*ﷴWa}נ3m38Q80 42o?aCkShio0u6S'*U2F%QDǯ_Ls'o)*>)PLKgpǘNpVc1LX\>!c< I7hn#a!Twֱ~CH(y=/1q ݈a#Iy/ fO%O>p1SL>qN3\99xhjImLx~D_iMv!P 9 O'.+õNzw1T/e |QRp6&DJURΏ0([)Ņ&!o! & E+`F;vP\OnVP[xw\5ZKkhaɻӔJ]"$] ~ohi<> stream xYs6 ~_G.RQ$nzoy5nNz[G R:vvyHٙggu^lfFD!33f6gٯ/sJn9ZS](^;zCz5}LYQWTunAT>JyZKfu'/*cl 3OKK:_NRp }1ҷ+V]61ԙUew V o ZBg"u-,/j=߂}'"iKo_bѵ3Di cqa--t6} k"E<O\CaZ~L5(Ma{mn&' KH{+Ҍxe0h$nC62q(/ ZѓjG =nGsi6c w)[5ܩp3X%@H{UzJHRgvth$qd4ֺE[~d_ q)"ʽKѶG!ŀ:(;!_zWjK/Qz|aa?6^O]{N }*N{!7E/QO:'Ι)5I9xq+8ny5~_/?~tm_=Kjg'SU> stream xYKs6Wz"xD鸙N[-ђ:zx,ٞ J4X,v?~Xo._:w~ҫHi#)]5g*kBe{;mMCY:?K'CKb]WE5eԲ'Uao#9ʕ.hZuҭuʂlYO(KkQ:>|"8)WҖ$ׅXdJ[fZdaQ^l͋5dE T}'ds7\ dynR%-kgP~Bbm.yTy>*~*:-xv b F,a`zj}՟~̀WAD ePYuBC"tC1NY?-RcmFS&mweDvx/Bu"Տ lťOЂ8|W%A:8.N1,gq c4.eGEaqXDq3E 0Q%XT QLcչr9}-UPl Qn߈ا)_"X#B,!R(ǣLo.u'wU—Y!e8(˒tM#mT7Q2!r㭨۞L+5٠2 (s>.af5 ֎N18l/uG*>gr+iDUGV\%WAjQ!4ap"ދ6stE)5^CjPBFiɡ1es+K+MG2ÚyԽB:LG+ 8vlSdKRf6U@؅Z5y6OIAIV7cf> stream x]SMo0+|4cԽm4!4RSHTMIH<޳QL£XE[[)lmR|JhGyaQ׊Sl^.5ɛUTF=ufSRx W 4ߖe7?*˟ wa>K@kٝFDT{*3G}#,1gܧS˿ݯё(HD8<ӫtI'B`EyDc] my*2TAgVDxV)#]쏑 & Z9n&aӣ\ϋHB=~lg\Т- c\<)(ᚰ)߫wb{`>G21SNу!ox> /ExtGState << >>/ColorSpace << /sRGB 176 0 R >>>> /Length 1207 /Filter /FlateDecode >> stream x_o7 S1y*RNz\v@hl`>t 4N?Rds0!)H݁UcN=*4t0 {˗Bv/6wTf~^^ӽuKA#*j%+^'`)4^= hYNA^ڳ=Z}TNYr޽xt7V=) )8k|j~O{=s:,NATwJI fBvBT0DǝmQnE\َZ$;hK ZF4ՠĪ/M6Et^Ql}sjsj>mf6lԏ"Sy r ~,AWjYW8ޕ5O1מureoJrvԶJU 7>^n]^F]_Īp}}&7MhF%6{72^vaw({zݽǓ-I%xk Ȧ2"e9Tq[g譿>WߢϞ$`zN?k=,#-!}lazzl'=Ѓ:9akӞg=o'5}@0_=| endstream endobj 10 0 obj << /Type /ObjStm /N 100 /First 839 /Length 1674 /Filter /FlateDecode >> stream xZMs6WX_B,d66'3M[Yr%*>Ȗ ŐrN.H`#yH0,O)ǙL zÄcιL0"LZKU Ud9~1ůei 30,Lk<Q1D=1a.a &304:3@$aJ*Gr&,v$0k5ʡWL| ja]F@>(AW(?hc` ᭶ nh؇4 ]hPhdn4*TGpA) Lg|\(p(8\Px㘕ѩ`$R6Dp0 օ~z'R' 0*#.T(J9 !Du`?XBs_H>#"Ĝd3 ܫ``B@ ( &zyhrBe!ofabf͒I̯,?բlUx5N9^qFeh@;l˗_7vx׈jP{m"-b2[.b^v c_CagZQJ`Q8v)īeK7L)B9P'ڗ"a_}/n@チ@\'(\1GI1x:82q⺣EU4|v\4GIqH6S>@oIg݇(?咽]5׫`h*E/?k^lC M=TUQ.|Q4)^'5XlL|NWb&_g?yYEY=. j3-XNY7WXڌ*V_RzPvcGS~r|‚B{.[aI:qg QڶHv߸D2q&X$6l~]Yv Q<0rDQ4mw!CO$}%vJWJWƁx^\וcQ*T=~΋ c"| ^O+uX]<\Kv{~%nLD8uT>nM Y(;֮ Ca%W_$d'n+R7'NǀP9Ј߭<Ⱥ}Ycy C(=nЃ'=h m,[Sws0LOOwOt,ҵ=v1jC@>`}E7;ou8L/EWH12ДpCҤ0u|Sӥۛж_FvKm|ѱUk 6ZTWcwJmqf~͇Nh] 6;݃hf;hg Cx~^yP;>>.CHw6F?O>=c|Qߚ qwȩWGsy$W+)Ε)EkmdHK endstream endobj 178 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 183 0 obj << /Length 2127 /Filter /FlateDecode >> stream xڕˎ60"EMh$=hmrֲɥy4=hpf8otkL6Ycf1&-M9+IsWn7&[w |mrR }l676uEVлet ߖ@ sM B(=@Vp)OWhy2JFSmd|'l]+ܝAB O-yi0,n>AΊFL/RrimgK~1*!U~o~KY]$AeQN|f/xNQ|[\ZV"喰R $6tbBk4b%r0]})FxS .w_c0¥5_ւVp"G07YQ%^^u.Gۡa h Mϭ)fn\i呷mŔPj m ȡcc1Vb F Ũ*Z RTe•4ŘBŴ=2p9a BpV}MQZ(]J~%sX\poD8LKp✹vMphɗ>W iwm"`la65e>o$'!Nqmq`!B%@\""{=[G8%pHL4#7LZ{X*G Hh6#׻qz ~E4J{]\rMG;V5.& 8h]u>셱91GGkt@g*@&"bApX1 1*Yo# !"UJ$[G;VPDB:rEh!]ݝ9Y㒖rVUmbxf([?y/E{]&K[h B|taJ@~ *RmOE mPՔq?)X l 9lSMN|$ͧk: |JI]f-#a~$r!8`%Sb 7ga*V_ Yd'È8.&'~ %ُ{X{*Y@PA % ]&̏,ocgU o`THOK,Mҥ%@40b -ҼqxJ]7-ImUNi~R]QߎS*a}VBƇy^,$DJƋǍ A/T8dN!cBVjZ zn=A A]=)v.ҘR4*e3w*Πhf1\}f@tyַuj|aB|ɛ 6m$k U,U;Jٹ&l*uYh)6K,hcGEOσd9^y) (s-éw<qA%Û5q[WF]{j&E*=b1#Á'LRGB_o>AIY]ZPR.Y>a OPhu;R}GU,XlRp <j/X{ɿ0n endstream endobj 186 0 obj << /Length 428 /Filter /FlateDecode >> stream xmRn0+x)"  Je I.cfVD%('xg;;6t ̭6Q/ y<.4OIV R)qPe t~uN`K׬ endstream endobj 180 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-anova3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 187 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F1 188 0 R/F2 189 0 R>> /ExtGState << >>/ColorSpace << /sRGB 190 0 R >>>> /Length 1153 /Filter /FlateDecode >> stream xZKOI #9]kdHYe=,{H i~\f4"eQ-crd gƬ'@"7ʀxQ ^*\EuIv!tm xm@1b4G:SP-YOt!@QX6GRSꪹS Pttrv;PT&m4k'U7;"\!]]}p;٤*NGKβXv>6+7F?v"kG=/^^nMn^5o/qVt4kLTOkyj ɭY[YMc!{!Ɵv 'h!xV+kIs~M]ǁ+kY/̓fNtz~4V<@^xЏ3M]lshwn׌%1]DZ?]n!)i!!_Hr\|T3|m"l /ftKͼg :mpn Sh#L'8 Ia#΋ WsSSsK[4%a7rg DZ ;#o䆿m5ߨ{B$8?WxY Q.5 [31Z8Sl/}C[|@9 d}ۚqۛ竳/wWoNKg}|:>ݬ_~pBB1FU𾛌Az@6vΨ@uA Zޮ^WpL&+0к}˓o4+M0)7aXOf endstream endobj 192 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 195 0 obj << /Length 1068 /Filter /FlateDecode >> stream xX=o7+ߊKri$.E8q\\p|NR`5ᒏc/*ܸ,߼PusvAge67+^izZ y~uo<9ag7\ lS ӷN1_Bc~>;?t1{'3Gؽn̫w{'BZprŗ+kn՚A60sк-,> stream xڵY[~_J^) HEJEާLh{@=ݳɏϹVnfwGM±p| oo6"+M^ 8x<"VwqbK@ >y*Sw[ҦHmٰ>mAf(@h`bA$M@%#  ˯#m6i&lap^4Yv'ӇpJ6"7..e'ܐ'7h*SfXIu''+;VӞUa<`{!3r+(@eaX7F^H/Yuw ˠ_pA"m _py; 7Aw=3WU؁ǬQ"/^%1[vOE\F-_[,V3p?e۴!s&l˲5jU7,3YnsP|в Ev䌰 0n!rVejTl5Nz3/ucCIw}=:ϵUs0\2{_ NrD>! /GP~Cubh8=ptg4:Ѣ^Zf-L c>[}S;;}ni'2^e:kvxd]&2Knq`%×;ndɬI&Edg71tt~eAC5~aHهi)v?)iq57yd0z7b1:g1g ;FbN N¬K>p'V\$g> ㄰[i97L$*QRxwg uE9} =ܸw2\Ѐ!YSZ"pኀtZa01ib.:KzfI$g%E9&”iVW`26n$ p4o)s $Բ|V^F=4 \"ϼԮRxkNM3Qص^&]1d5~P8IX 1y_ π+1J!ePe@2#V O4Vc3\lm wk"mlՂu6|/ɋ$/hRC%[jyE=JYZü6e[Yn4Ф *Ǚ;evwPr0U~L^QX؊現FY#Vd\8K㹲Io+,uͭNŶ,j7 } SP+Bǡ$aLV 4U,d%iHq?_] L^_vnNol\'ax}àU3^ O>s2Vt--dKw,'GfMZ1gi]j4z!!{ ߚKY'_VX ?@ɢO,LIFvOj2pUVeݸэܣNZ>3c3k?x7\\.vJIr ]}n8Gq)2lNAm .>U֠7Wf;-I=@]O*_ N:!h^^qprbduBR/V&B(mqI\ DM+CRe,֟[{f.+_e#zl1aNGm% U|@rRi UyQI~MQq~gx׮i?-t<nkD/pfvO/qaym‚o ~Wu{Cx $~oEg=]88mȀj#gk>0f.bC6$g=gCX/~ [䇚_ ז[,a+ }{hgK3h Beeh+ endstream endobj 201 0 obj << /Length 2828 /Filter /FlateDecode >> stream xڭkoK&HM @.htDW"?Ң\_r,cvvvvoo^LES6*MUN*)u1Z~:ށ&T~O ð~s?yT9z 7J9/YM%P~p$Գ pbR[A­̹%_4Q`+lN.=wf4s ̭sk3l>uJ9q@~e6)e*d)}[IՔDyL݅"$h[E)UH׏^-1c*'+Adzd>Hb`fٳ; AF4C;hݤ C1X͡zYA[cP#0`b)0jC;a{b$,l 8rJ99 ļc] >Ji5tmd(G 8$c uWQe6*BF`< u9q2.9.}Opfru0G*-RL#>mII)zA+ϥlea("x-6n@Ɋa44q'(4~:VἸ̪!$zqsr6)]R%d] Ó*X]"|SCw-LbJU4M/Xrl6qgzF;Iް5v^g_yih nV?EqrPgqP=+b)( t/z򅺵+^;{[({1P5/_gG=(پi0\ц9M\Emw&cs`]lo9_/^\=D ԟ/Q`#ܥ|Ce U7Jm2y9D L`h`gi0O@'_OCl0CpikR%SxI@'qqyn)j8.5N/ɊBd)/{1DMx!A;^tyΞ%CKyЮ^|3BQc%|1˷!bq+gl%$!( o%'^(f>;5"ٌK"`zfe& b`=0Ό<{풸-WrG$nu AT{qZ!yK_*hR'{^,z,Mc!x$mv [[GASPʱ3EE @H͖7ݳH'Q`jI>շc9:9;BڸYb8{a*ȴ?y{?}V@sµ;*Yb(A͡)@a-[#Ш??.TxJ L RXdMgp endstream endobj 205 0 obj << /Length 3209 /Filter /FlateDecode >> stream xڵZIsWrb O%58eƓ*DE\ ~滫lVͮnfM[N5R8@sE ]ϕ24ܷr}Ov#WV Yvw[ӎ2ద!j?@#B]t>VpN]-yNwM/ߗK̪\ٖvcXH[{d_8ohiݒWRa/.:>j^7#1ʖY \inK[0 lآMR;u]PJ_oYXEP?V/O;(wjˎIh-$,X\{1EЏ]n?+Ԋv(\ABQD*XT]Ɵ(Bv\rGW16˃xX~NΔӥ DYU-xtXUiAi^#567@WYS (4:VmJ8.]e~D;!53=v_|u $W353ZƗNb{l cO4s f]d՛٧]C}t-oqjP#lޔ*0W^ +``tixTfs`IT k(Dz֟fQ{Ƒ&t^jnQw]\94P!UoDiSlx͠滓Q~PypQ)ĉϕj!k(FQpQ*?UU3dDv hw^_OCJ|’71v_?pCO<ꖇo8Gtoanm/{_!{L8\2h&K|Y /b7MX lzQtx :A:i!DN0#>=VC&+i8vُ[J=#!qzI^ ä}N]ԥ_<Z3fPG"Bƀyr$Q$ [~=E,,,z4~o; YE ~}9Wt)+4kyE~̴bCaU!)mUL@UZ5zޚ$]iZ\cpQ&b5?5@fGl1id@r|3E/7ϣY!ִStN NtN*$[9&6Uc&B B$IͪyCҘ`!.$\cSC dd :T6cujޟ^[ NCU2097g e|HspmkxX[5ˆ竀E[nZ@bvm(F`b coM " ϢfX5*\xJ>22Q v%zSFj9#b{̙:Dk)M* c疋C/&R9UO<[Ɗqsa)ԐՒ(n ̪9JTIރEa'jLKJ"G. xXD,mnL4ЭI*ٵS'G翽l$/1 Í(; P QwEr|]|+v=>-.95I7{1H;i_]v+ $0Az;h+j"J GZSf0WplAcҲ7f}bDԧhl,'iԤ-n>4iKWE\3XXXp&*Je)y'uD7d9vywHWk)8ȇ߇"%@9 @jI\O2Fl"W=jbw|d>nyŞ"F Bp>*1t+] vT"(vltVR1,=M ^1:raG#3\t~[ 5&UV k`Y1Oqpݱ11ҥO/vECܔ{l~H+ئDeC~5E Y~͈!" &F0@ F`MЧ c$16!WrRLcIfa#${uHr>izмO^ytflC-`0>,ZyT؄0ܧ>JyyW1"C,pM/E[Z endstream endobj 208 0 obj << /Length 1676 /Filter /FlateDecode >> stream xXKo60zYyfDR$[[tEo[NFV`9ͥ)JVݶhу-|w,d.nQVU))r)wJ* K|oY&o=5E.b*׾,]pNI["'X$3_PAailVa}0ovpTe!St'(5WrJ`#Bo:!ib%Ζ)*B`?2sF@$f7xw (`'dar;H[Ԏ `lK]h", <8Ŏ r 9ѳHb1bc(49Mu%'Д d%1":?:EGGZPxAS5(O*r\3Ǝ3z}sEMH :;3~p1$E_eeH'6Nґsyk\Ԟ%_%Eaո,L a:E pP$)898˹a wç+k,EQQ]orFgLTcmpj,4׸ zۤʎCY"+2<ɹ.ƭK |S!HSNU9uI0׃;B8xh?4܇pq7b,RB&΀tI]ɚ|=ÀR( ۋ!E͒m8Wqx1.+xqj8ҧWOҫFhޙ 2+΃Cc2L3htT&H%87"cx#t߲>in6N +@rD_?mٮoS٧lCLYpu"R]ݶh;\[ꊟR!I85 JomU=˨WF~wJ#yhR8λ\HND~_'1>3k`SvIsCd&_=I$Ӆ ?()AjЅbT^tffL[ddGL)7NH[Lj@e9{AڤeS~ oV&nOF1+9waS(KD_|~!/ endstream endobj 211 0 obj << /Length 1457 /Filter /FlateDecode >> stream xXOS6)rtDO-~3\:;t^[fz)=`H0N]ǁG)=(QWV.hz32ƨe]1^HxlI,+rrX$5Y 4;,9U-y,HEi~ŷfvML\VS0 gt0gnpF=vg`;!"ߥp@aHJg{duMO}s@.5ce&ZMb &^Swx0UZ dXk&2=9Wfp߷եK~f!X'Fg>/ _3om\awQr\McebIm/b. )<F]PNDo"'"oPSg#u|x|u0-%ƵI%;mSp%s+/u1¹){*ryX > .DȒQ㬨gYNw̥@Y2͎f0;elNo3 #V_+&}Λ7!{) )ћbofB]Sm[_I1udP#k2HKC:"B?#^w? |o`'ś!o5\QG|'ӿK?m,8YJ:/d޸7E3y> 9-b9=sυpob}CsG7Լ߼SXTR7o*ş2@ChMfNc_tH ʹKp9$UN{ʥ5sQPfj B%KLywAE[$b-SQY ~^5֌*[2yPMiNw=jj p. ?ZBۈ Wɼl{]u핛Ҁa[t R|]; e2//tT0S,1={oy`-/MxBZAr6'wZ-MoDuMp]Zob-$>){Axa PYFk}4vy2,XzjFe<+WT x2ox~ x@bchN{tjU}p3<.b ?@)WLIa4ݦ >X- *~ay'8ȡD PҥFjhW<.Is.E}(ЌF枱 ei1+K"*N,uTuJO5`W Ph@Ǩ^&E] ʹ-UQp?2 endstream endobj 215 0 obj << /Length 1171 /Filter /FlateDecode >> stream xڭVn#G + K2Hr2CS ^bbGA Hz|dTRe hs^PB;,d4F^usZ-OLtt/NHIQRE}'Spj%*>wI`kRYT⒤ǎY9Jt?5~E%#-.^v"pRYs6]Q9Av] // G Gϻpm`b%pE6GRyT94xPAsVBkgK/9qYF: ZW{W(Hڷ{֟yxhp [CGs:6v Jϒ`*o2 b/WlùBe/hܣ tԦ@.s0Y povΒ,N ^30:C[?i 04c 4sD> /ExtGState << >>/ColorSpace << /sRGB 218 0 R >>>> /Length 434 /Filter /FlateDecode >> stream xSMo1W0{ȡ"8T=4|$@sǎaV=xg{3zc\~뺀} F‡~`fk_`w058Kv 7BgCv/{‹˷r7\vUu0 zJM-lH>=[8jX+:]{kvas҆z#<+G${kzKvaI!Ʌ]oJ%iي~v_wo&˨G @26 \d& oJc EP)m~}Y/bMlلFgI#яೠA}Š> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 223 0 obj << /Length 2582 /Filter /FlateDecode >> stream xˎbj3|aI6;đ )y<{ȷ&)aFwuU{G_ynoo:-Mjn{KR+`?y%?_kWkW=O;7(E68m,W*>%G$L]}M~cjg7kyU0ۑjmˤ9y ~/Bi';< ݉ǎ""V%3(4$y'B@Y-+z8[!;" '`,^47HczCEfE5ȰY薿ܸz BMWk@ 霾 +H-#rtWzbnm6x> 8db.rO̒Za=2U%N\ښPQ2Ehb@-FK>$$׃|o{F#hXNLT j uݩq9.,^c^<lQ<7 Fod,`k5;;A;ay蠸@%%A۳SY"Lǽ ͉NvXG$|aQ`wΜ3ﱹ(S#i$sFa#Q 8[V}(a~ 3(5c*{ l9xElf c^{3z2~p;dfQ!%^ RL%4y4 RļVPR~-ikw]v. YEkҳYóz#)*5TWȅ0sf -N?θBեv1xBU"j%K3V(CB 4w]?ݑq9 -|&l^wr WWGhQ/Gu;&]Q-9V[xG;LC'+&}7(.! #LjBD6$8ox@ɴU4\G,m'xmU@d̒}`vyCj/WX( oC;֋֫EAoUQgٌCNt_ S%S+zd(& gS؊chynTqFokYjX=]a#"h6.GGY%kK+CEӺnsu%OKVӱ-Nv,}D.yCD;n(luD1{su_}>x:g0M_Y){6=[-/Z̅N۞R8Ek=E!LbwkCНu})͕[SV%ip x/XO(omZ_ {O9 S%A1d49|]l҉]i|6E\K5@$nh)hiƒ:jC~%D!p Ʃ-?v@>r6M)gQdv\EF5:v}uTB}T^ʾ[iq:f$P<[YuAeaN TJvEJh#_l&n8zfw*:W^M5%m28J zr3Ub/FeM͊ePZaNNxz6^RxyőG <ΆvdL1^M`G˵Kf&V`)TQ,B*Uо[Jv"{?H5.gZ)dr XF Fr^L\HA ~MdpUT9q 1Eu:/iL2Wڹ0VBW^P endstream endobj 228 0 obj << /Length 2366 /Filter /FlateDecode >> stream xڥY[#~_aC[[Ju 3 @’ly޶]Ɨi9:]w/y.IGG]}ٵ]haKZ]N*qn1Thl?N̜%zh'h9h qIs3EYf~B+U r!LV13oo}LJ-ZQ {F`Ԝ# g O{DjJk #U[s&X JeXZ#Kv1ʀѩZW,EocFP%'hY`#xue82WM̖ZjxJ% k#ЂI"Xkq ՍBb6j( Vxa.vW*r ~uTEuE©f銕9PkT'ʞ L#RHll"Vƨ0c왋D y&&6=X5H ~IQ6 DDP_5SLlk\S\1i[˕U3|Q,&(q{6I5FJ%bVЎ?,R{b[Z1)9E0u':ޚۄ1"ac MU>k[$bao2w07hC\|5\KDs9\_uRxlgҲufjtN<iiG/(<:ƱaK}tuettLp$P7arjt]0q8C Ø-׿``Xa;?kɤNtbMEg~OՑ' QL]b{^P☢R9ԟ<]JV2+uA*eyi<do/@z=J V|a :iOCϑm;U8 zarĈ`PMtuw :y {2ՠCY ]Ol`k)[U5X" iU65N!_$c[{.Sz踒P6}\l (>QXm^JRRBuV,ZJnb$11ԽarI]k-nGf3sPⴆѬ sNI=b v;(UCBV젨5)EW+ \! :v\RXJğ]UzBDȧ7T.d!>G$t'2Eo{ݻݿ endstream endobj 232 0 obj << /Length 212 /Filter /FlateDecode >> stream xMNNC1 !n'!aP 6D6` > /ExtGState << >>/ColorSpace << /sRGB 235 0 R >>>> /Length 451 /Filter /FlateDecode >> stream xSMk1W>tV3}CB[0zI]zțPptX-#{3zoD2bErF{8t_nd,Zk^OOG}f_L8j#Zf̧n7ݍ~Glդ)!8J!j1ޔzQX,1oV- D\&P_ΉZ_>`1N9N.$kqRKr.?̶s=yPeq:[(I/$E0:zň$棪O™ʈ7b OBzbؽWWrԹDG' ZRH]F%5?3eܗmm>- P?]o endstream endobj 237 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 240 0 obj << /Length 392 /Filter /FlateDecode >> stream xmRn0 9&Ғ&@hq*miܦҖN:0`0WeXʋm+1*!=e}ޢZXygJP%hUҰjw5d UڔU5{+a<2rn̽y^7(q#2~:OcGBtIȴB C,B'jl``)4xaa\\GKSb]DsX]=JQɔ0ȾIP槹xsp%qw67ht 4)e!k5>~ {<4a$C qAHt͟J t CÓET-3d@SGJ endstream endobj 225 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-exp4.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 241 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 242 0 R>> /ExtGState << >>/ColorSpace << /sRGB 243 0 R >>>> /Length 939 /Filter /FlateDecode >> stream xMo7+xa8km%( b$6jK/)!Bs fg"G>OF=LFcT<F޽WF}H0~\lڸ_a/.R Y_ rNaS_pXn[}9V>Ν>L?˪߮j]bagvU^W島v͆%!6ZvMJ"b#F̭79+6nw7o#ӄU%tKmөqMUWVGju6n|^mjukyBAF^GY,Y|ˇrewxw"g_ϧx^Sq;VΑ˱,|P] ":ǵWFe,!ɞúba~^xPSXc옳\bsr8z T8£ɖm䄑'> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 252 0 obj << /Length 2356 /Filter /FlateDecode >> stream x˒4_N1ZGpv(p$΃;;;~I@QEqj[ eRYȬ-/7祊KE r\\Gp=Cn;^yET#@/W6Ξƣ.4gX(AY'{Ohjx1prJeqir5MKQf2y!p_0u[e$^#J#<˞[(@lxR3u>qUk T+T'>fBj;d`ϚubtE!֎d%=%! hbH'&ko|ؤFbf0rRJ{7(JC&l\8Q:P@шOtQ|C6 ܭrj]KϛS@VcUZxL VNyW;1f%H379K6lqxsζ.n %?84ܣfW{B;'*mU3Nvar#~MlB$1BF{?݊Y"lŹC{x$ӏGQ}`HE˃P dDq$6vBX1;뷶뼌K8ەD,/yEC@b H]?HPV.~$"8q%DۂEQ8թS89(iT#y2q"I":hzNKՒ҆z"_!3Y &xioXkSGSbc|@K3i5"lE(J4}2ѱV)`Jպdets;U :U?E!#BYh۲؎dew,$ێ2!j70ObNE3=~ Ӭ \5ys/D$sqߩ%Y( &ֈ97](c)-'|'VM@W lj㉯)y4wp4C7R <}td)̧$0s& h]C\7C¥wיQ *NXSo\RaR:sY.P=F@->~+l"JǬWy%6q)s={Q j Y0 B+a\H?䋞0Ѕ#ņJ8G}Hb\5Z(3=dT0Q`uR.͇ĬcsEGARH\Qy|8jx5 ˶$dɤ?>&˨>GGAoM*Q-x 2mVVW;#C׳n)dQ0"X8@09v3ƁWcywǤ2EvBgA j\ M8ͤu4MgJưRx%j#aT\@6YԿq MRr *a]<΃?KҜ@;fO-f8Lo g!]c.+ty~a<JkHoOQUVk!D6' Yyj %qըO5Z8Dw5<{n\HVԢ@< ߥ̈́ޣ|,Ǐ` d\zGhGH'C*#S3b[&t^JYd#jtZU=`^VlF*oIwI乼"N@.!AʭFWo_# endstream endobj 255 0 obj << /Length 205 /Filter /FlateDecode >> stream xڅNn1 .vTVcrAE,zl`i{cЩ}) qXդ^vw/%.]_W]캑0QbQ0TU+xmƖ/﷽֋Ha޾ntml Mo {Ïፔ,maҢ0kߝtE <+atY;NNi endstream endobj 246 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-plots1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 256 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 257 0 R>> /ExtGState << >>/ColorSpace << /sRGB 258 0 R >>>> /Length 369 /Filter /FlateDecode >> stream xjB1yYfr --Xt!.ZAT.wr.T=?dfB05q=zr)![^`g0?Z=;ӻgEo@y~Z(D+PnمrmZpr<>na30#kSSM,0D %b6Fn7fbbɩ9I@u^=חL(n=:>$D!g@+W*> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 263 0 obj << /Length 253 /Filter /FlateDecode >> stream xڅPMO0 WJč:m@\7P8Q2>6db0yKM`C;>aY'F;Y/ Q_MFݤWM2^Q1`A%=4Cf{=T_/O>W9ɝV8`$͝Rl[e+a,g28cݦ, yI8617JV_1Ǥ٩ N EoۼnZn endstream endobj 247 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-plots2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 264 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 265 0 R>> /ExtGState << >>/ColorSpace << /sRGB 266 0 R >>>> /Length 498 /Filter /FlateDecode >> stream xIk[A +tUFl -6r($Ƈ^yM͠O-c%l৻`T/Z n{}ukwvΣޮ;Ć\?wwe %/0=}W#W{r7,ٸť1!GxDSg'rTԟʱ\1;IDyPwzyoP@~C0D Ef⨠YPԫ}-ͿsOY, >ù=oaxb+}Q˧#>PMbMhϸXPBCJ(4% l@.HEPjG@B ZC0ؒB~0 K=}Iv7S58R >~ZӟRP4vI4כKuө266̓19U!~an$-dϱ4D/z endstream endobj 268 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 271 0 obj << /Length 250 /Filter /FlateDecode >> stream x}MO0 >uN.U( 1&qV u^N@m-oa5=%s>fY?zr.v:iGGΣz`@!nE7uPD `at(s>^UcqZWe;Ұ IQJ죦,gePd gYO`/ۃ5J1YQ+7ʭ2F+}@郕,|3Aja endstream endobj 248 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-plots3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 273 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 274 0 R>> /ExtGState << >>/ColorSpace << /sRGB 275 0 R >>>> /Length 398 /Filter /FlateDecode >> stream xSMK1W̱=8ff CEvCAl-*h}']u"݅$2 a6قP|. v WScZ սF_f6 C0ѱ6TpgbDomf 6X/c,#9{$s-\Bj رG_$D!}ND;zW lTpaN  g`6X}'  9?C51UmE#"6X񅦏PO(#"|NĘiq9t"9oA 6}lkVoxdt1> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 280 0 obj << /Length 255 /Filter /FlateDecode >> stream x}OO0 >uN$.U( &Q:6:8׸~/J, kQA}(Bé}(fn]4P_ŨuVHcЁ nc"3C|+ /OZ[8EE'N߄Q5k69pNʊ-w^S,mf16g9dej10l\ _3-(X5:ݤ7`7ͪUT?i endstream endobj 249 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./longintro-plots4.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 281 0 R /BBox [0 0 504 324] /Resources << /ProcSet [ /PDF /Text ] /Font << /F2 282 0 R>> /ExtGState << >>/ColorSpace << /sRGB 283 0 R >>>> /Length 524 /Filter /FlateDecode >> stream xMkA +tUFҌfq mBjC!z鏯^,ZH̀` dAhxy p!bU8̎\jp̌@b(xX,çj x~ߖ -D3aKd`"d@ OU`Kʨ[#V"ƒ+J9|v:ݿnƿwX!N. IBB0wÂB#۷L4,o6O>yIT%eÅ=Ona1kx(aMJ>8lWѷŠ^ptyEqJNXՠA"ZV{z ZVSJz:@+FuLA-CJ>PZߔ!Hw&y6(CZwZ9)vhKcq_!aΣcw!$L2Ng q0w ?W=CqK6Pٟ@8@| |6 _ VWTM?h{ endstream endobj 285 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 289 0 obj << /Length 1370 /Filter /FlateDecode >> stream xڍɎFr (H!ʌԹ%297V08۪ zz{jOm2b ,?%vA(+tF[bz%ǧ2_oPT ]?7XQj?nGq:SQaN'x^#7Pk]ET=`j$jF'0 U$CE[$DIgQ4BA"ȥ.L2p%9oIĴmRD:kX\fVVץCLOJQ~%E0\Q0WT5b:K9udæ9.R܄~6›#jv$s3mΈE׼2nU(jyIAx!Ña j~?[Uǘ#f8 zC`'fϤ%B &xH| ).e|XXaEZX VLܮ2zeTac=7fl&[k:h\( Ƈ5G%,wbJ9[4"q\r@ =1qAӵ{\lŽUpnxi#2x€jbN$Љ:)3cRj֜$y$-Ϫc,e֓g:9&6έH5OE#7A$l&Nq{$3U6~Gk%r%/ bl!n$k5\{nY6Q65"=`Rm˟0vSx\1yw 4+3[(YDnu/GI,ۭX"6Jn%U_íz;9EI[ h 8 Ez-|ˢ%TJERL,O$y XG~6u1)SUu' ŝ<.#2żJb_s-lĤ\՜D`=wxW%_9mџzJ|}W'd"Ө(Hv@cf&/ĤA{#DB(=R )!בZ/?v}{oEIH|'W2e%w> /ExtGState << >>/ColorSpace << /sRGB 292 0 R >>>> /Length 1951 /Filter /FlateDecode >> stream xXͪ7OK{Q$u ,f d|!$v0b6yRI 0_nS%e{n=jcT?~>^>ܾ^n~=???#\> fG[<[ٟϷwo_?o[d{nHܫl1x!%!N%oo1=˴UdJ$^b t]~xS's"A` =98]d?5:דޣLQTҹKgl=?y{xE6߲p4_#.x].U Ww 9 9L#)3DywBJVF:39=2$uSH'6cGKI;S\! -E[6XqPr2_,af {y)-9BJmD R:sLZ`?0\(ew$3P ļHU&>U9&~aF &kЎ:/m{Msg7}sou}>?~џ}&6KƎH[e@X!2 @|ST2FDL!id6v#q B $e/͟x`] QSTlDp=#c|í|)LaWivCL5 ͶpS0 f7òy 3<|{vZfhPfmgi㥟Cc NH8PHWA& VrfCސxLy- È-:$t.DҶ܄0כPҌoBu!PGq]ȣ.Mo\olo{oAh}uOizr0q(kH1\.1-wji j0ѩ_ͥ孙~͡ ܛCQ1G!ko-S1[޺O#Izfė6Klf`9 Gs3t"6Grovs:?]xtCQ=P\o(?w|FGtFt|GGuGu~FGvFv~GGwMsg7}soggk57_vtewC5v8~%n(Ճ۾y@MaavF;d43xom N>3s~χO~.k3Rq`^vu9v]YF]b ={E \R;fީ/8^^ϏsWLpy rhlwSlq~+&l>K;a~{_+8 endstream endobj 294 0 obj << /Alternate /DeviceRGB /N 3 /Length 2596 /Filter /FlateDecode >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~ endstream endobj 297 0 obj << /Length 2277 /Filter /FlateDecode >> stream xڕێ|[yěDIHZۧб{|dl^g(JwHjsz! Q\<>-墴R(oVVA.-q[uxxeCP0 P&EXI-g00ÙO0Eg`z'ϔGn@H !fX#˲8@huKTs#E]jHx#yZb& :`"}H{iS]))tTJC{B nhVBK8_H3BS LXcdhR0=BB " CZn^#p_e2z oi-ꟉrЛxX-_d% es}=g$q YQV82 -\>3R-X^y_?wCzo=nR5뮹G_Ӄ-6NY 5dƎjȕRg[rtI`*/7 ѳ{CwƜ5!MmW^@V_7x@]YIVQ:o}lܑWj]@ wSSޛms\p@ MBtamL{vn}r^>Uh!'cy422r_O* 0Lqe{O3+*Rw\=E]©o'U0W4mYٲN mSc(:[OIwcQxCg1^-64C MBY?9qV$VrKU rR;W%pZ:CQ0I`t1db\rHw15ަbu`ǡA^S3׿yvO _.s8B،35%IC:jf}UR7 SHaK9 MFX@q K,Awع+),0mh)QkxZ=_2[NCi.6X)&A>Y!c u FVpz҆RֵEeaz'u͑=׷D#}h@):}goQN`J>|t Cbo¢,ONPE vf_JDx(j:L ߹>sp-po p4L#9=ݞq)?Syf #9kPeiʿ!x_τrnnm|培w= >|B_|Ud`i4UJqw"F׳/OPe$Pόqj"k &2ۄG`r]M(TF;Ș)I57"8^˹2afe0c8VAW(DfL6'd`"# \f~U\2{M42Wsj2V.h9( +In;@&sìD^$I1 `ը,Tŝ3?^o.ՑEa-3ԇ YvRJKK1//h>=> stream xڭXYoF~D=e<4mS4( Ї$DuE⤿s-v "rgggf~zڄhUdOA9l;?,\|e2 LfMtg*c_ lɴrenuN_f՟W&tN/5e> tÐNOf A-nun~[\P<-T&mBbK.Ba[XB^>-6QϸlQiX6V?~L1bx4-$P>[XP,2!Z>MhB9_$˻ 衣GC%rSP]I7m!-'!"a£SѺ'$*8<{ ൲^DD^9'{=h(>F Kn,kf`Wsnf^޻@Zj>xwܿ}BVM{ `fkQCBGS xQq4Nj_Q7[AAZ( dXsD.-ۇ g! ]v=G{ݿ+enXK)f?%s[ /0!j{ކ_G}F5uU#kHm<)IV㵗50Ex;6H 9{pœ>1ew@6'GIӜ 9vLmNry-GnPުlKdJNn829Q?K&7c_"32[&̻`b]0RJG^I[O⭦f$zN)*(%V"A7k$Аqq@ZhT"}ZPk$Z ZoUUځcr,GӉЅYP ckΒo|&pkbҴc"5#%)*ZSRq.v`!%z10W 7zGD>0q\p'E@霊;rpӎj8xe_{˂DæSg9}T(W2V>m~z'I|ˬD Ifc"YdO8!KGp$F> NQ0w3ɇ7MOR?a !K& 0{ow= YjMq ihs:]+N>P>Id':}1qAJuvH2lT?^9Uc+ьMB\JW"tNʜ-d {gzϡPx'_^6H> stream xZKo#7ϯб=Q|?2{>,ڐߞ*>-[h`wb񫯊=SFM.&D+FUUߝMO3V-| :5#gח0Un2="vJ2vBÐߨ`agC~&,Fa`/IKS2K4R#xwߨl9~|]l+nC F`2 _ 0%@l/4IJ4&Snl%;A|o8Ej^f2J;y;ϜfNϜ̜ը[}DSJU>1W~Ԕ_֯XW,+z8_d~NV0BLx^ʪ@ԢCV1qmX54ԨQu(ida#K\42KZ1.u,g7j z?c@7]-J't]/n;X.4ah[Jڢ[٥O5vsy]߯qފWA#o.>RlcզU 3JT?{nQvS@UnI*EE[D&Mﵩ1朇6 +^8V./ȥrrUJ bi&` 76d퓯YH;om>q)`mn  usZ61<).n2/qZO809+0qWxϏUagZGh\5txũ_YCWJHm(&ЀдI1pD]e:/HW4P,2HQ`'\bTDS.m;|CYH&bF<8):,w* =m!Bߢ^X& ~)Jh4ga6LE^Xz(Ktw:aW?Љ& l ڝu&lCevf>>\B8X߆ k@ `'6󨇭vyy^lQ[3A6iF 8u3m?!z5tӃh[Є xW&'31+;4("P?fkZ}8g ]/|} w U\" QTIݭTj+,4ZoVhsAmXs]m!HvUK9EUײmALӈTe32xPtNĘ_8bXPi7s=ڝ4I?etR=߶ewk|I^w8^~/Q_OZ=F*m}È<}m}w|{Xi}|馐g 12G.c2K?~Zs}z CUq(ialǃ͕`\T&,?'CH7t5Ц4*?)ۑlT3a!CJl{{1|{/.x)v*""W{W5x _d s5j6񐫹S'N"3jt;&_1:wB*z]~ rOq-6µrj~C+/ϲcșHDT|MAG֣_:t\TܥW#'/L:Qw$y1þ}i'|  XʤPR>G,Pgy̓ή&vբG\@Lpp!:ž|qDW> stream xn#>_ᣄ͵!/ |m-^dQK$@=͖(os.'.T]u.6\x*TM;7/WhQSf kB8M(74LVnzw{XG^ ׽ԶRTr?Mlw0ɗ7Sm.-_ic#fΪ t{Kd`K  v gW{ dH^@wCpSXc%!պ͜Ğۻӆ ㌞YLtˬv)Uf2DV.M ?h&)ag,hʎ$"sz $;A5O%U:]n_"6b a%#"(NiM#v X_d`D$`+A4 UMA5g-u/Ue! V6Z kI~E6#$aktގhf%Sp.1?̣nx sC?BDo9_tG@cƁ8&ב{_SKcܮptagCף:Eb'ԋ5/: r2jv)ۈ`i*@xc܆9NF21SxL\G{sL<>`3>d57ڜ Ӵ >ĥjodUZ3Egs+e4 ph! l@(1ЀU #v4%G̕U1rEP '?2Uc ,pLz5N粇]eCxWG'@@Z<#VQIs~ʼnL>-_F` +GTs4E4t0CLe,7T&1?6J2ru;u]B͜D Gkq?VJYCYpoDj:'lƵ^@T z LmLM["h {%8%WN'xuP$]p1sSνe޼skYV8w5vg_٭xvzp#^v^Yo_%GzW9ة7cڑ ~\pާZC|>ݎ\K77I2I6K.ݗ=DЖX Ӂ9d+;{VxvI9G_{9rdTd*;.@w5 !;cwqvg)$5/y~LݱyU8ǴV]8{ THhuʤ/'k)7]/S,T%NӨ `G6.(BxI8h$ZG9κvl5z4 ` b;gj3fں!U.EW)(G#]=d`CFkJHVDjҳ!;3¢+fa<ՔQ6E14?P*ZCGO8@eQy"x\Hc@mR@  ( ]CqEMS6,C4 9R⣱n5y̙ݦʹG΍A UFv^ew^1L \0$cut"m}xSB GG{D'WW< d^ɰ)/9I[s i N,ک@~ΰGzae>dM2gR7iD|mL=ǪJ++wYރ{JVFo9Y1.?bU\!Aj p#;:}b;[9CV3y_;L:ƃU $^N^x__GxLNJJh&uy ,R1Ttl!T^Eʯ(zOE"hueuJ#L¿$~Ov@ۛ~'HgxőI%qe%Hglh/3H|~ AN3E('mRaih` fxj P{w:W$!U1jFL<0eB-xaE*jI`0j`VJ%w~? endstream endobj 310 0 obj << /Length 2282 /Filter /FlateDecode >> stream xYYsF~ׯۂ&g&WTVHJ%^?$$ZBW?>fpX eV"cOoDY2lv \f,"?LD~&SWݧDV"Zj_X2œ,TW]*mv~ZH КxvˆI⟥)YhN`]z?Z1FXpOR[?dٸeݏv9_#3F x,G-J ??@#]TGޡy2 >SEvҰG滃 䰳ÃK!q-ځgG50=q(UѺf`cw1 |e@?ÁBՃM G>b%!kCZs٣BAA.yId\;~lJ  Qbm3x<F3eRR*g-aWܞώfC({S*H xDg|> aD60!lU^}[WOJ\LVJȭB W+xwT ,%<7ebl^mtm fIc#Jl65HdSUBk2 HD]IP?Z\]3~zÒk-ƛQBX͚_uk=[ q7~m%D=WU;]~PIs[_ɀMUZFw~uL,Gt_bqFzzuO_i5ڧicbڴ􄔄Ca:wC"%-JERa芊~S]j%%MGWdH] h.l\?[Xџ˄>^j jJPZ^ŢA[fp9RIh[YrZ? /*ySdoݛvX>\%o IOH Zϵ}N!OjIZdUwu{c(1!Ei@ q)i#KbPS&>k#]ǺsPОg"d2 kt[ &MEi(Hs4DW!Y1t"66v?"Ġ9&l ,9rLUq2@=? endstream endobj 179 0 obj << /Type /ObjStm /N 100 /First 892 /Length 2783 /Filter /FlateDecode >> stream x[MsW_8@h)Ve8C[^W%452HGv}^7PCJ4i'F?1áKX2B8|>PM$a+&5["s).\U+@ H,o `\3YL`'+*#r_ CaC 6-\2<4(ā9zi/̀9[ SD }xqyg<.  X, zk| \E ʈR&Ah@R5MEk"xIE_ ""`=(" V=` !cQ&W%rF3dĞvΎ(:cmh4"9P,NЗ g)g (H$##$" $BĄHS%&;v-CFVf6IMp.pGa %S@`hXBe8R`Nl%5j pPG/_7ʼ|i7X5c+E-QVn!`z쇻ve.L7y2# w~l10ЎWXX^rq7m/ls!Iay*te&wU}w-6¾kpO^vBmmTصQ\|wK[s`sNY2,}r6=k}h %/aN_C+XleZ_ʞ&874LtoyMb͝dٔ[a٤lDv +ܰu*$qyW[-h'[3LwtdO:>pbߦS4S- ҆Oϧ9 ,;]Zq>܅g0E{^^nylt]_{Ot|{$j(w<э׊AN{11 c os`0O30X3`b;4wOSz7R;?S2s<vK>ϲ#9_[>n:sަ23٩68;!`":7flE^B[^K?"4o.2X^>cgj;z7{PgƱ]ٙǡG&QcZw%]i =ZxgJצ#FJ㼦ً8Egf!uɁ%MQ?@4g]w7klf;/!80zy E=UET(N =Yi`"|+,Bb&+ЂL^L'Ch$nv2;b Br@&X$:Ep)II^I|i#׸K9/PjI GaNR;iRH33dugX,=iG[ut>[+= ?fmg }JFp[1h5&YщRQcgM. qC?֒Tx*5lTKA^:G1)Z+fk;[Pz>O;B==~F*/VyLuOWZ9TўuTȚYEl/"JrDݑD^!Hi۩H#P /.XQx2]Vؐ_FN8^Z]I+ǎo=}O+;jTZ{jZIQab&t8Ղ;NI=d%ݲ䏒d#wIJV ];KJH[[W)ΉnFw\Rk{ zsvGknYԉZjyMD~Ik85ߕ@f֝Tf:HUvIT-WHR4Geҹ:Ye WB{ =;M[Ol 5Kg-.Y$OJ,i4[Tl|զ 52͔rX%D<Φt땠i%=;ت^%j EӐRG+`T>{{UKiȊ45@',YPb4ʙ\T8E $ɭRÂ5lv1s\z*27։gN 7]|Κϊ7X5X@˝빣GD'e 7+k*zPۺ^8GjoG_K{Lch'GZ}ړ여(W$Gҍ- I[I=:[$u+TN~kMGbq|ϑ9=> stream xڍP #!X4݃;w'@p .59gfUVWuϲ% QVc1%A ,̼1Qmf33#33+<rx M5ȁ_b@w뻡 f`app23Xykr[  <>h,<<\Df&W+f&v55BP[:21yxx0ػ0-i֮VU h2@ju+kj Wg ]`gmtpywqs0:Oe@Oq,,t613;8xY;X,%IyFWOWz&v.wwk;w?S7HL ^f s1=ĭfubOsm@>E0wsdpvrʈ] `ff@O3+?PrdCxn@?+̭\@Kk;[{Ǐ' 39ycgTĔ$tCo( ```p7/?&_e,@HWD3Yzg g`6{b?HO=_?z{k;Xϳn(7jZhQɸoev+[Y5D{p;k2 t;gf~O}H 3wgg/ֿ#=mN`r&?D!N? $7b0IXLR 6?O `RF1A&;IooGݘs W6`}O&.Vrz?w kEC rsû{^W"߷޻/;ߐ-8~'I=?en~ 󟂽-3_x';U]p {{1y49;7 /o,>4|z`؟ʠaYqv{BI rI@]ߓ^%~9io HV|}1JT_.>i"#`P>}u lwrFV.xl\[W9CxcՈ*NQ`K @K~n=o7l"i,[6kF:K9..!-,a,ΒOyi̖gOI rxʸΟ*{1<̲4ͦTč>R_Fˍr _ՒN5zi}qyYbN `sUeƿ؇R=0Z*?[7y\I}F@R.3"K#<"8yE}xeWA[[CܮST0L Ϻv!Ұ}fKw_˾R@'b}u;cݶI:4Wn.:;`[hМ;v[Fk!J !u~Gk0~@a˃[: J`$V<yNLz~qs"k&S`D~Zbާ 3^\0Ȓo7:Y;FpQ6bށg%!~?B5 l+OW.X! ]O;BOʢւ?fNJ.N#4%ElA-_Qs?CCd~&T^;}>MC({ejm3oI jMbc%b5oS6(=[\u:Z#鋄hp ]8ūPvA^`^J CYn^٭,vk#K9:[lqש.8(zY;A2*s[o=QXyj| AxP1QOe! pa4;h.S\%nNGCm0­ ~q)r! 0| apGoyK &%?5eU$MF Ϋv+Nٸt,G"~u0xt df,. ӝ: Tŀ48m{NZ|"P/EEPD ^^Ҙ>av&o WP`=h.kK(F]S SуQI*6(yoh!rbQ|6 $+ߜ5t L 2YQc5  H"!Zz5y$Ч4É]$'wڐЭT"pDɄTڌH]ӜԢƆ5 6{m?70' ϻ[?DL;5; T}tљ:EWN F)62GܫQ귢/1™8wi G1o`M\c :G~ƴSBXmUDcr/X(ѻF oI&j|\|{򈢢箶~p(́ҪHÓgڨu^n*hVU0XGrZSW)lqh :/ˉ g+~~ Ɍ׉ZUX&s=Bʄ>OBWϛ/Q'=6G#r̘&(DZf?e^^ I|9F,tN3up#ʣ.[VHF4 t^-s_D'|3ߏ$c&=5ͫLN] 1SjGbƎZ!;J6NJfSENEB|כZ4Pe/Sǂ+rgmYł7;9N'V}uba6A|pECYFwX*嚼i%p&qьA.DB8^8Z +u~bē㹖#ˋLkMڅX5BI;RFo/Ʉwv$+i>0P:uaꗐ /჈8uN@v N5yΝ+dLdU'pie7%Aä,5~ՔضCLK_p/[N -I}L YEvl(Q-!s ^T"Q6\/C$G¦}5э&rsߟ:LaĿ3g-cS@hW8Ի`ar˱d<{Z2\ rU1lFR_JFj< d@\q}wh ;ftjD!ԀCG#.k9gjM^Fo6K-{_ LU8ٖ0^{rEX  L5i$2<=Jĥj܃!|<_|Ĩ6lPp {y]Lk{}?Za\#qqI2n\p I 2XEIh=]?a>}@PRېkKӆHT12ٮtWƧɘ0#Φe O$uy҂$h cx=p$,$%d7A1)8;X7*`z$ܐXFyZ$-{5l X3q:@Mb*:xۂCX$ ܀GkVS)Huu^Ƞ9941Ԙƒw!olQTږZNeB=܂ACtXw:Uy*%݋5l!!ٯ(;o^k5[-tYcwf"|f|~Ț>#:9SoxejOWʊXV5Y6OZt99#&8ů<-T ~|OZWh`94]+d'* ٰtgkev%t /o+&bR7躴饉T4r9'9|W3j)x3|̹ bS \&p `X]*,g{d&No\hھa}Pq:4+Ϗ_50'6*L ;Qq ^:EIrϾ~}e-3CEc g=^[s(.Y87V,sTTf)Ymsg#jϼƞ^y6,%\2Vѫ "ind#Q_!`] |X:pt;DD٢/?+!u!yW!Z}T$I{jn`P7ug3V*H=…n.@l )IEGdgܯ*Ty,{2nī VJz {K 5Ϳ<: i@p3u4"(n:flg쟓}l=, I 2 г v ~IF+2 $PCHJ3ȺWBYL 9S~K-u>jj2S~7 &\T͕'J3`}ȑdE7TtmZD#rh [ cGbzjT+m"9'֊2YdU{%Wʜ{0j!kvV>~FQM|vVh V67)k[bU_A{: m&<$|z7 9:Z-1?&E7Iɼߎ'taumϘ-ߩrzA|싰XXX[Fk/N 57`3M@@{ѦT%.4A՘fc֢h+wG% 9+uR5 D𾾪̵C< 8G =zFlSy@:ˉ^YfFDHӿac iF@ȩHcb*y,Eo(Zv#W}+]|\1q"$>ьCEm!MSb4knrӄ.ݝHnԦ& \$$Cc9 IJMDG>ٰh`"iŭ5&~ y(epxr~'J 6Gt79׳6Co%}}*Ψq#"J uT>P!6]_9;)(Fm`KlqfNYh_.S}׍fz9r n p+|iHs["ma ~MT5bWҢ&Xϩ0-ױϴX3zّ[>{Î f;7Ryn/GF+b^N&񐯊HЦ5ւma'e3 0M(elڮGy#K%J=}>7my aJ”鴪L Sxq)ˑJp#خiG膉 &`iT4xsoώ\]T5!)OKDk; 2PW _cfǙ8:?{$ldX0l+: j,|~"o3TD&3 l$i-0rF̬ۦAH Չg96r **( b8rG=zl+6Yʹ,`hs+RlЙҁ 2)A`u"2; F#!)AoCp<2'efX+xBc O F{/Y,箯Z 7:9\TmE$ RCroHszRҶ0} uLJmb{@NQ6>5܂b D?\uW?Gg*#MO? )lZlR9]XqTcV8dU$cXCe*̴Q~XO I 'ζyr M1tڟ}bY)+$*L$#rxfq[W1Z/dZ`nϦY咡8o.pUͽ#o CF27ʰК?QÈxǻG@ >o,aSc)*Dg}7#U5)2)OechZ%jݛDUbN'B1ʈ%â<C?}޺ʏ}礹W@^aX|zūhhdLtGHW4{̍ Urlts|"t?Y˲ʡ4ˀ&?c&YhʧjU<$DltUuU0+M2e3 "ʯUveWlQ1Pq> f?&f}M {ٷf,NFwJuz66lSre~UKq!lV ;ax|Gs4֌I~\z؂-(ózRY(A`{p,mh _J w ?&+K8^Rb:X%RD/2BU`v#)PqaJ`sgw^O6>['k*_~ whwݪsWRPP"w?yuF TNlh("\[J˯{nn- ߃ujOuk0]]}w:]XyTx's]{TcN-*BSESR_rY=d! ʾ8DE%efAqw'lW44" ,?_n}2^YWiW6Î*QvD4Ю[kPDRV׷+f[v'jgTc6txg8v븮DraӠe4fqG٠j:s;}i H~z=~L]GH[+;,6=І_R/W>CӋCr=U 4j{W2yF-ܪaN,~cKUraG;]Zˉsߏ,:%B2H'S/O?;h罋0)ؕ}7G&~iFk T(\]mXQ=YMyoQSzj CJ) Vxsf7Jn4'@ EeK fRP(SPhNܯc$1-nf*'mp$XeIK{+kL͒?Ũ&l;|CfBdAưE,>F@+y$^2R)HHHK\No,ٻ #[\Wʷ,X0-_q!\TA56\a|ݛ9s Raק3xFm눅GUs%<xkky7 M?IzXor~c֨ÀVBwd;[_Iuq?\|M|F5‰&&`G6dVu+/syN_u|&O1;aƦ!rV_7xI,A|:(yiy՘!&15æ,RFv8j '-`-u6Wse4=]4>x?s@<%[Wu(#uV}G r KRkiCdpyaßBB5XQ) jTcs[{猙 a6Lfq܆=);kelyJݕ9O3ؿ'緪ٮ Fjh֜S˦ 5]+dY },f9 28@_F$ 6 v*mhd 1oym9@!UVBTfY~"`!HŠExp9&!P0믔Tb!/Sp?_`jm,lBGQ[UNK}|rZ6~f%{G9^!ojt(K'ʢ_YTsbF3!9&H͂NuJEϊSAUtյE.O,G Ur6X́:{ lm׷ß.kr\Gk=‘5? M[ON1QA/?*E8>5f0xdTi7,*\>C_K'%-Xx:Yb\DnE632¼#R15BRYY?HKDQ`u~IJxS""CJcK$3CjE[],Lo3(#1haS=c.\NPљ31fKNTe*:(nٶ\u{y"$"6&U~qg!uH AZu.$7l--'G*g|Oȿ"OG| Fʌt#-tۺI͆hce"/8 |rVsgIp4 ުLutTܐf\E>rHEF,Yx,bpv %*H{_yCt<%U(~{Q\P+#r(C*mf?VgTevORfm^d dn/c!XITЇcx@9Ae&%}aƱsn9 0hcm0G,^ g.2 !ПQUr٤r`Mٍ0c` Ÿ́ˇ#|CAyełR'q7*ʍ˨DwFwAdeF9l0%aP.ᖊ~p_w]Ձ8As4yTvm̀QM40 mFaZk65S nP&:$(Fw u5Dhena嘮9M kF1 uHb[VѾ'2[/P)Y}x?rvm|}[F}`eQt1vĮ$-R7zqj SnHZNhJ \?'_ϋ&<(vU/bXyc'i< "ff&uǨ{[mn2C0>fQ&^pbZiP)xƣW捍Z4D 5I%8Āi+L!ymYo"NZ 3-a5p/I.<'Qv Dr_b~ %@QTnU,Ȕ,s lՍ? xʸjV2#ΪK5A] Urx۠[ԽHfTX%7]n' 3X1H-`x8¥O&鰞 endstream endobj 334 0 obj << /Length1 2217 /Length2 15009 /Length3 0 /Length 16324 /Filter /FlateDecode >> stream xڍP\ CpwиKpw 4. 5Cp8J=\DIA$ag ba03123SPY8[#9:YBt~ l2.6 '/ /33?v1 @ cg rp03w~G1 ow h :l3v g Aolqbs4Y8T@N GW / )jNRڙ:Aw1xP(ڃle,/z`ado{og= `ja (J1:;&@ kѻߥ;s2vwvbt#_a,nk"jgcuv>1 G{=}Vvn^A&0qgRppI]Gfrp033sq@9_ ?=ǻ #agKbcb2d0Dxc^ctGv.71|O}57]fN/{l߇wzvҽ;\?`/[k[?ao,A坉ӟB Px7wz:8ar6w:ᝰ?{\qVOﶞ 4vq|gA w1Ҽ1_empC0=T%v'dd ;q[eW0a-ʭ/*S{?' OԄ_5 ~wP:p#+cSb KM|K-qvw>O(~(Y tgbB6[F$pŜ$,[sg%8AYYњ NO^ e}G! j{.&:tK^n[2Vj,#tv\U@`aJx>~sMɽxT#*)_!Rn_Q*MYi&t3N^w0bs.T6;R}WNA"hҶ3jKUVvRO;(ZD1{Ŏ 5+,xem]&t_aQ5i6kBdNi{0ZqFyY\R^Kl~nS31TW,.C鸧:Gw;REn8A{ʼ`Z[ʱ \qSkGp.sȮׁ̦yI1t9~P9d-T%1 5#CE!J[;.8&.`(PZ&T,6-x .YT1rq2-@vym,& eqzt'\ a8|hڍMbL$ 1mʴYe*_͍yj.E'u,XI}\APQGӝ0ZF5$p٪GO Π[ma6{ Mw ]Hy%:ic9&Xi򬻆r׼uOcs J71HLy |`% *S1Sa`ۈ=AadpϠ|+ T@H0`M̆Ae}hIbsI.;kt]p"f{[I0$t3^ >鑧xOPTjyu-rV D- j2w1:Pug0q[R>Wf,Y6ώ~&l` KnkyX}jR80#o_CVat$+G[ϟHV64n#qpv4-S'| zo89MJ^m:OheMo+N|̮$fn'f!ؠRdsy@N4#g¤xP 4oH1O,^Q58d42f͋2S O1ұב L(LDV &^ i0 Ӟ4`D4^Vpm{QfW'pVnQCRI\:g.f$4 lYBN~Pw #f&Z`(6ݭ~84tF1^1&Z;M$T'M I@EtIca/YmQv ֣̘EH @`ڞŃV.BR EnSʏꩭL/7wp~GB5"6o׋ ܫh ?eSIay)Wl į֫5nE@U\w!FPBBdYd<̂C6=_mzSoN[xbQRq 7 1]z4U 趹,G]d%W,4XزE?*) H?M]KFwfDX-ެ,Ei ,DSDtaoBRJ{3~GfE),G5i\j<}pFC#(kȊV VWb;D] |fe-BY+u63ȐDRBi]orpYf,& u%d?JP3\!RZ鵩,S Bhp$wi[Y3P'z S#{ Si XƂ9*Fʯ^Ki xBccR0xe\.~ 1TQGΧL 1Ŀ:)A\$8Er{е)ZPwWdsqo'XT{7bN`1g6;惸ɟ:HA笈.MMRbrF*xJn'Z_K߾ZjAj9A;/W՟fɽҚe O @dCqJ$#|\G|C60Ҵ8"CPm__xkr5Y5.Hd$M-xo9߭zxWa~1dGjr^F͇"~48edT:$:zX\N:AQ%bZSI/ﳸR:Ȗ#f5hnb"qwoCW8TխBla kzJZ.9sؗoە꧚Dֿ)ܡtgQB,9}EfVIEk=PZV)LR6jId*2aʣyT a^k;-[H爎eк=[䀃;kghh̀/+>'W޶јYEAFgi,#~qvd:{ssn|cB8CޝѺ-6J71dH FW;#r}9Bo&8PTLOE/} w..8TALݶF*5wSѧ"4`Z2_:b J?H0Z ®48 A.m6Eڶ28ZPdWxEo'Je:HiMwQ2|rFl{ gMC3ai ^ȯiDZU)e9|Ed{9#n=|~F,sQ@wVj(JFO~&tyגC0NNԳŮ=`s:Ȧ%B\Z:0G&T2¥ϒ2L侢D1$>H;uMڼwxHv>y뼑Q؉MJ0ˮ?^ ,.s']H}O rA MW޸n$=e8O{x]jPK#P੓Do1=-RÿwB ϼ97O mضOS 򯎸nx.q'mSt {*Z~t˛(w^7lp][#A;oˠm⌿}֗x4q+GXIRKQv~3>}־Ӱ$ge 7L-v(YɢZ_\Sls ب줶H)2K[X|bs#vœ|nFm'A$/=L6=Ý? o8ccE]s/NܛgwԫIoʩ5>z2bV1A~3tukn#h9Rla6y–@MHĊPzpCsɑ B#gd.c? $.a_r{a" BNjTuuO)?QTU``SĜ?oC7ճ˥|^V4lXåN%n&{hr<5sAL =E|YB ]A.P2(wBqAo5(0\+"E>4T)7N%/Ŵ%[OF#bx .ĺ]$$3\`W &~)5gUj*7;34F` M‚]vT(< -A1hr X5`vAfFZItbϗu%; q\0_6 A}ebwzO*4r'؆6GG!=8CD9#sZ[ŶrԏdO%R8Ef)G}®oSV 0]nﯳ8Zbv~_A5v_ s TyI,R;pkC,p ϗ6'{90vQt3j R` w]cdIS٭>'WG1#G-t_`2/Ռ4u2٪8)^~8rH^NH:?;!xC)'}r;.0  *veKVⰎpz9뵴enNbO%{#0PXVÅ)%crH '6cviJntx&_DКY.EL }KO.h^jɒPzXL3LrG픎)xHYH5w`8`gu,nD|3=@kꒁ%dXʺ@aC=CEV {m%{d!9ܡ &fPf!'ʂ׻F9/I*&d w(>,oڻM ɈLw:B dJADl#cC~y4WZCXv[`gMʫߏW蠋^@Z3eq+}`HZ< ".)qpTl)08RRKi7JJ @Q^TY"ኔL6t04:V}} =^_A^ws!iu!$i&s 'Ӷ!Jp[H3MD@Ecr}6"!4f =5S#rds7p6ٔLr`T`tSaWwsջv7JՆZ9uwH"ׄ(fhq puPf#υʽ ǘ! k_"}_^Xiiɢ%>8+"9븢,uf@<"i?j"=VY#' X1 Y_7Iy,Z>átr [c8nmė0]DGn O(l0I>JG꩕Bq]0ܡ\ yrn⵽;-^YMhr>~N13.R =ft}~d|UB~  3캦E4;iwi9yKB7Ri'ipbw~4;_L||>N?i?ۗkY˅HrxAu|<*GDLFKy=Jkt Οvq:sbdJW\|7a3~XNloy3xrB^>o1!kܖ ٟ%]N-6BZ8'>}<%ю;6/h}KH9_ӛ:c+zU[ҷ0!!:e8=Hr֏V/&iLnǝJ2κy9@^䗁Z1JrN hԔn1C K}uܼr!s#>ͽkdGFOx<Z @h=H&ybրMrܚCLނTzPW2ۖw/Gn, o k8Gl*{]7M[KW3}Q|Ja˴_?p]G@Rzzy^VϥD#_.e3]}V d5m34q1 goN$60run_OJ=9ݰ"+ l28(X( 5?e$X@ &؍f]%5V8GyRYzXn+t[F59o7վ;+,lٛhu#>AZz_Єn:J'Iv [8&|~V?W΃I9;Z$g})Z(EfO8?5wK`㊎%bqIH=.Se`ʙGoE~aѩN!:_#)y4+_9-&~N`?̶%a'%ӈ `!MTtP}*_2mt乙̋~{yRbeGK2\ 8('tyF窦JҦgmƙ( B|:[l U'dxM6|=Wּևr~RX9hZ*3Х5tJc#>A@+U_|'kn$nWZFa#V/VMBIgoegb`BTa]YY66?]8M|S9? 'Qve]v5w| D;ˬPsw ?GE;3JDfx46D,u`4!oL{ԑلtLLU:.G0CM zC 7@5[ ̒˻-~ =}QcJ2ސFѥ? I'P}X{IE;ل}3 *Y66WބiE/,]˞ݔpDn, o>tdx):- C[jf?Aa^x-"hp]@j,eڏ Xbrrv+˒#\5vYQ'&I]JD4p"ES:YE%znԁ+.?CrX&1@r{wʓd{P˨#fs #gN͖B#҆acOEXЎ'kJ hҒf-%c1o]f{o^6@o~EyEQl*s7--x#n ~ %f"z~aN4TKmk.9&0Ф~_Qa b5 hKsfH >їH Bk=ѓrwI u.~;(i.[uU;ɗn튣RP y朊R%(ZR3>=.(fkڮuX څގ~XRDX*lM8CB/{!ʎ?F箎K(C0u_#;^\vQ-44pOdL8C楆: ~B&='A}x#+#qbJDOq28-I˧{5FThn;,Z8acIovR{_%mgX)(p2e~-}š3K1_]XL(Cj2OAd!QڃZQǎt~5 NHڃ >pu㚹ϝd B'5C9GrVU4N/,9N} m5JnbP4l~J^zNO`DvyhR׾l9 RV;LzxlHi0ags}+ߖztO0[d#T!m-@#F~\ w#,N+Aē `k zWdZiqTm)m֦di諰i(i\ ?|Ö}w}M $bOo qu&~ |yI}<6{ө/8.o+ߘ^uչqLr叙 ?/q$ȪNp"QBN4l) ~w)Ym7dmVXv~⑨$Hdr> .4F*eZhW|]h-}X]% 0p-Rj3(+歪Walq.M-4f-CmEui4 l75#{v Y\z:˜ZX}UѧFlq;N Sm'D+G⩨r7<1r=-eyF\TlAz`Sbz4;ҝ8d袒\~hZcdPá/vk{M7E:8{htxO#Y/#&! f 1J|\3uhWv܈iwKo L f1oٹ 0|jrX#)$o'c݋1=caJE:5扻Pbܭ,^hT) 8B!do-Hn1Wb@:6L9+qoK$^$ 7׭w0U)EN)::M5ivyh,Gtm2qFme\?sy4\EԎ]VJv?y!96LVbn}=>Qje])/Ttcۻ4B,=;Lz(:烖H_Vp8pRSits`-HȻ3.!KxNN#ЪR} c'50k[{K٬4R86D9ҾK0DMì YެKo(mep9#+ ed=ZU#^.Gһj 6qFZw}K8HC֦lÃY`m| b/I!VD'Ӹ,S֣ 5/ʼRQ*bS##n!z*O ,Pl6ީC=\2AA}#<,%5ꕆ,V/<ԀI`!͚\Hw޹5Շ,N\(N8&N_eJxs}!@|*ar,:fb 1kԪnH4QPcZCq>U =Y)jv)SWJ} 2RVPa"AW%giUHT0s+a1s"9F[~Yb))>cj5= ZCo[{A9_SēUI>fX̤g `_"BYMX.F:蠭g7 )&l} $$;)RZ@;5[6w0΁0q0QщN(bUӅ;Y0SHnPWDa.ɥ\>#cx4ΗR/@{ɼ? 3/Υز~$ɹmijݙ͡ jYwEl2r30?Eѱ:2OO~VLPz-`(ZV=HF7L2 $ }aHlu8řDUNM'phlYx1([^ GrST N0> stream xڍvTk6)tP1twww C0twJH JtHK5kA!5$){<08.p'/`G)@쑶P_3?1 Q]8_ar""'_1D$rGC=\@y"!>0-xCUq{@pgvN絲4\k#׌q":<bռ8Mh~EDf+ne6ܙ1Ѣmن>Z\2F-]j":޽> }_>FM]J4L-`.͙bf'9?qr$oN nN"_ŤB[j&j3*Z6(K_N'ٻ*K"=_Rh?͹>ȥyS >C_ۦ9c=DzlajUI~OQPU9k>Gy_qdp_cOKU51^ȍ;Vo1hj(Juh]ۢKbٴq,3 ,}-MC"mës' rHͧN"3A3, r &s"sI k%?uA:'Y)B {SC~g*eLLLFYn:al"/{R~R;ir;mF`^o_l}Ni= ;RolKXN>~U, d(LnD AT+)jLb6MG[NP4:twW+=kJK Y:vt1^՗-HFcUYP-D?\DT%`lu@v0XW0Q $ȶ>1~|1xYX [ȪBQjOo K;h6DS|]Gv0*U]د]S^x  f[#Ɋ+":7@=6fAhN/Z"SI*_ѝg 9yK,X6ʭr2;+]Cw)alhzލ=_ m-퇺d|"p<ʷeYPɗ 4RBO/g{A ]趨qüfrEੵ{|jիRaر# ϧSg( nTq ظNC󎬵_vbo}TeآTnS^4ۖrh,VWL ӊ_)2Zx+U!A遽<-yh^uuOTqʏ2Nc]QTy_QRddTA9Z^.ӧ7TɈ.,!AX ]@% QuԼiNGգc[U";c;)+L5w XIJ|z7J9mT재z1C_wXIBu!gvi!` Ka {ES(-̭iT 6R /_C7fz(\<鴆 1ZGS<\+^u}2eaVƱ[G>AQ(8C/>Hrtr2ԋ k1mV[zl;kx@ c<Y?w KH1bBjKy-R{ Ei`wݑ&_5cڸrAUI5A˓nH 29NP4Mfyv]LV`锋)R~9'R)_GPn@E76C60G 7whM xi`ར&I ^ IAٜ?2r}  4hmijV|Z4g䖙=zt̵<HJ8P%2IQ˻$!x~Ŷ(^Z$gP(A@Bк{M##o>@[؋7(༫ '!?T<kDhrmIo=`]o||3Wj'wG SN:IwշPZ2Ì!q}sCk3QQo-CI ?t\1k皆JW ȸJߟ.^ߠORvxyE'c$pM7Ҩ|\(+i'%뮞–*o;k;3Woߌ(1\LO|~LU%ii*L"i {7֝;)?u@]k>zM0 RWMV"Sy$va9_;o~9N"HS*)}$8iiAdnX}E]wqhЦ׮Bq>|*-\K:23#T͑c/B2Se#'M8Vr5>Z/7۬ ԮJeIu|*GGvsdkPyz'%e=Gi;*9,u=PˋDN-6-{$)jc>n.`H}?7ýyx~4F 7?%{­Α2 JD4bبizf>TgCPsvmKϔoWڗ+&|~!Fdw{G H t:Ir ocX8{H:”aV3QoO(Ă+8]UVWG+l8 ؅uuQE,"nDOXX ȊuTu(2)b|2[."E1zqA\Fn{ @"=ވ:K@pfqjpn)fbm KR/i gx}Qvu t@)16'mU$|A)⍅Ý6E-:T0G[>̒V*@ҩ/|ѩøU& k< G?pЃ5l(Vug}2,ۚ}؎>S /r8&1CL i&XV\_ |Wp$#'L]39) 脊G2A#_uIGWd*x]jb)?)@ez59έcSo;52um w ޥX6˞bW7<9Ye\tћS/b !_OyYclBLXm_ꔂ>#-:- umKL;{uf[U (ha#{ K/ɉ|c #=K__(6An:.i)IyH<o vL3=e4*ΖY*={{T޳ԹHfthWp3$6v@Z̓TLP{-/ Fߍg` PI]$+(J7HlDb̘(Km^YL_ і]]0ZupyFI$1XT L@1:b1M=kɚOkqOeNޒ[/K֦g1`9WigIfC0>Czt07mQUnuΚ7PBCMc~)'2 }ZU[pKb.7gLC'jn']6&ޣXLt. .O[jtq:\R;^4D-ͬ#nmNgJbѨ$3.vDcH6CɻjCyMtWφm6=cnivŹVgq %g'BV Yz͵ ( "_2VeaH1VKkGc]h4M|/WDT@ }aGD5|bԣU=8W !̬WIę%k\]7?ٌLm^=!z۫{AzNaHP {V2 5 #X(Bj%- )vT'?9;g8ߤ@}H[~jIIڢ~v)&AHKAG5qiULV J4i Ej?gLs3&ΫzE¦*z&5pԔфsq?GCDOWxFԟ#y?X endstream endobj 338 0 obj << /Length1 2002 /Length2 13709 /Length3 0 /Length 14949 /Filter /FlateDecode >> stream xڍP\ #!hpiwwwwqoqwwww5Nஏsޫck՛TI^dh"330D奙LL LL,j`k)4L-@<u0db@< d `f0s0s01Xcr- #"(?*#j377'a #-@67yh,Ln adtqqa82.`s1/ɿ1 R-P]&7㛋-;@UZhgb/c3@;@6v@[7 [3 @QB m2Z;@ kߥs4r;28ZXő0om5ؘ؂On>\+[_4m-Lm&B#33ؙ8Y&W#sƿٙdKd0}aeajt6L<_ 00 M,lD + 1ImŒAn>bFaQmMUSRD geг3ظo^J@WҶ _)b־0qhP{oB6&?dy v7E[z6nxh'rȃVjkM-lV |[a[Agfc`bQXldai尶5Q9Zuy11Y].og/m_mq[#_;:8F <ߖ02؂o.7^S_`K/ `bEF?(qJ QzSj[>?_Vmve14pޮ80y[s,XZd_V5O >Xu\ʰm"߬zV{25dJay+ xKh t4a`?ey-&mZ?W#yoe}`]0 8i x?AÔ+}՘2@X{=hKQaf}VamoIݶd;!(jEL⏥= >&]x5'z`7r{)<wٯ̣+V3L$_:I^ _AD5 G.4?ƃi^>K8*Q&R\D*|>_ΊNzk]̆2@ONCS/LgZnwfxA0>^v/Ӈz>5徭F~PM gr\C3(uPZHj#DLU.^a|H+<i$M_vcqpvj }Xe)Y*0l DWM2]{7##! =m՚k]k%ޮ*'#KTvϸɗט-@unH6fe}Vd ;Pyfe@h?hȱ%:.F$h29wzhwf)=Cnb}FeCƽMc_OUPbDz ˖X0Tm7 [&7}Dݍ8Ž=\p{Ҹ. 臹U-wЉK&bqI)"BX>a.^!% nD`w*3ZIn8|_Y,7(cԳڂ6<fs+kDm@L^yv8ƿ<̱1\ĊτLC-6-Xy DZL>V#"^ fbR5[)yXgY!(ݰUݧ]7Z dM(#PUFQ' 369Bt{_,8;M:}T^smj4i6.ʊ1t}O:u9mlZ_FF-g}Ib;Sjo2!jRm_2M_߭dXI=uI5i;{~ ՔIsB PCSҐŝ?eL9\7r]h( j@M'):nԶ8m2Mx$ A_WFMS|1RLiVCc`PSU%ؗW7)Rt&#>C&tPm$Rf)Q5bg8ƽWvW|f %#IZWǖSkQS8CYHz>8q{J`Iٗ%vȵA~1yM,><$h,#MԖܧ'.>mxoy4hn -}懂oҷ2BU:Axyفu7k*m9 \SX}n iX5,eV"ME3HZ=@)X:Ͻh3ā0YạjuIrnӗ)gKM`BK jE֥ny//sι/v7 0iU,YsqE!|`FUo{9mGSDY.gM߫Qԍ؏D7"AhCrbc]©M> D*ߙ{,bTK+QSe(}Q[ kė_+w$8TànL#A1i̯-PJdO3;q0:!_%y%Pa嬗P?ӣ[kL*ڼz&K\m*_(iosL7< ͬ誨(;0$Xg.a_;x?yNŗvڭߤ|h,~0Sݿ ;@^20aD^LAAIdo3a)opW)ڲʷ{DkQfQ](S>4 P/9sn˲ GK1"m #xXo#AWtN<{2xՆX1ER`/§Ҟ.~ny#PKPKHE@PTUv-2ə(\HEx|~eD_!UMFLܝΝ+C\0<mp˚m ,I:rir탣iׂŸ:6FV̠:=ѽw=!t}ZG:tzn= 7q'fk2MD?֕ͷj^Z%AZԕ[@GE@úY󫚚SL^t'*sgs'14bn!|e^j#3b:*)n>K/! PQM`-A K誀Qݻj>ܪӋO%nv4w=u$v T˺ڳmUeNzNi.P2 մ%2m84PI T/)6Z X3ב40s7S]|SgŬO:{}}) չ+"J05aeDhyԑSwW:^кk R |!=9'#>P!_pRʳ#:T"(c<30flzK=n`9L҃s/;iy|vSR֒Pir /OKwD9zfgq_VxuMLR 5a'}2NI<"pCG4qPIHL*yGNk0{J0n#@ 14EZԆk#ǍT$V2+Ttq]\qd9yfY$pq}ܝS:iuo#m.?PZPBi;WMR.p Bm \ӳ[tIpAŘ_WpglFՁԡsGt&g< B,n?Il5FuFDQR#Qz|ZX1:iʣݸزGJTzp$S0+VR~'Kx#1>E{G,Gf c CF,Om  ۜsz"XSXUT,]i &YL Dǂ%vɷHzQ>(yˮ ddP6^8萳 Ydtc8Vϫi2u #U%s  bi QċnJ li/GyU"mX&kP ߌNtʞ7@J㗾>+28Ez >Űd^J&&wʨѻ[y;ԯws7կ/|گ9AO}Wj]$5C_w+)ݯҁގĔDduV/Ulo>nZ\ >x Q^I#KvVI>-x.Ya5Ӆ]`:v3d}d.,D&{kƟ6;xGrEJŦl:пSevvTm PlXcO1r|H 0ҴܵwS"tE⿢t}$9Uzn6{U3AOmun1NU)iQ0XE,%{Κ^JAH)U-Z`xRE A@XP αCdr'?)չQP r#h2p3ѧ)ՓH]Ww9'ѡ2_ 9g$i?wD֭wPqVpyĒNo vY'r|h"h1yl.%̧z5ܥGM'0a 0Y7~shsbN#! H/[nGq|/Zh0FIx ;XRx# u~n{I@ŸD-ϰ\߼6] VT4&>ccPt%ww~}Ղ[9b%+@7r/ 8lx"4W}Ze?\%vx{Z`۬QX 2,J.EuNDU+ٻuxu5YC%Pdo@8v7u*bsjm >hn=帣{V!zwX 9IJh{02ŵ\^ϓ[iES,< 'O*S DA ΐwMx>Q_.A'dEӕ긍Z3;Q!utr0)]f!%PL(^5A_a)o<}d%u7} 沧mNsr^-qYs{J`Oa '2#I (>oM9omn>.,1GwA\OfE @lP+?ᘨ-˝e䅣pNw֟8蓪4na~;j <5w.𮧐yMaǔ|(}1^=[Q@HyD Z>+tKTIn"_ K?=v>SBZy+8 |(Uh_f ց%:z4{i nAx֐ɠG8֦G9}@Ka|=ߓ@eH4>lb 3:+" WWM.i/Z9.~¨ɮ- 53h!r]5 3MWD(szB3iEt#eT."Ȩ%eVH!>wY(UY[dv{qO3/{C*T>Hm'!$HbϳKi;jf*-?ˇ/RYH@چ DR³x\~ŮQ /elXp݆p 9Z:]8zspe"IOx Y*Aʔk:n.3F eJa:*Kg>B.& e]FkAd;ule 2K)RGǻ$ IR:R. LˁX_s'(x+^xTl?E]TG! !ËI'EdeTɃ!L 1BE L/ NELvHń7L)ɳ".i-Dt3OwxWw8dSI?m -1`G4%x]FO'|tUi ):1㞛rn 7$K1M!mӢ*#?$v Q,-k/H{/ʝm/@8PJPʚ*f:>{9IA^Qm3NrY6UN@3Iw!*sYsMܓ83Qiv,V^:,ǵѳ*4>C\Ͷ_]6U5m(d)|8CJc$ 'ֿmHq[3];9Fj~Iʰ)C$Ij?Wjͬ] ?}7.zwZns5sM-Љyzo9֎@W̓c,Y!KdJq Lm!wG:i;|4q:֗Bl?:|=`\4BY{zEz5^Df1i*gJHyF5B;2ꨘ}DaٓeA:NK I2%~[=x)_;:yx!^!br=GZn fwqe!IS?PK(b?WR{*h#ܠ#g6 #)삔qXtY4_&Cqk\ )ꇤ'M?(7Uhgf,Wb|C2rPMO6:vHX›R,K}Ʉ}QS#tBFZ>a!*x98 d4sI'-Xɷ[!d$:sX$2tF|ﭛ7~ḃøs袆$f0yDD =lqCQ*SsW~c&$~\r9.4ܶ))ijf?C]o{Oym׺!x\ ]ɨVc q)nʯ:IbXM3b} n?.KI^gٙN&p6&܅$DXnGȲ ϖ3b媳9βq*6*ꌏޞK#lp@B2g>_ Mz;BSr޶u70LB~HhtdUW1Z,c*C -YeYa6[TJ+R`Fdd9j C9Fܪ@*Ot,GS\4YHvfI~XYKKãXL(n ʜ rkG|SA`>%+8c񡙼{g^>q=7r-H3=]g %O­ 塛G{g%LXfC"?!rvu^{NG:\.˳#G pK|=4/&4}r\(Q@Tumi!Vp zygr+'; KXeT?jU\IQU¤.PWQ<߲4_o{b7ۙqfHu$W~&гb$!I&^E+" jt1B E$4_+).{J0Hls]=~Ԝ bԠqؖ7wgJqұ `<('q^;.0^;a?(FXugS۞Ғ(v7GM/%ʰ#9z@ܚ̆&{(Q7ʎ}ނ]˲f5i0B0[*-a¦INr2 #/*TJIl8ڊ1ǁb.-,]s¹49(,IzS|fk[1k\POdz :è7$\\{O^7UB IsH3l{"KsĘWF 9p"ք `H hoΔ,wHSWbu"dQQ+H nitZ;LJ;~Rds>~̢+O/Qy V'l ,|;°^鸲 |'qk1H^ܨ\F?r,&`YYjuskc ~pð<=S!Lku/+*ARw+Ry| Ŗ1[R(pIR;+=tz@D@]- UhŰKQwGRv9~g9aqY[v>ϙ4g%:}  G( 6oP}4M4؋XW'JeY\NifZʫb3bb[ qВ}a`rVoxo(M<8jAP:֩2s:EBIxX' Jvcq$zNmP#byptgM 2y#;@S3ZJZ iGkQ=ޛ_O\07쿿l#!&1<S}b u]2pL+ᷠǤ8_x6YË,=5@1ˬDqQUӀ4([ EA|/;deuF3E-ޯ:"؍m~6Έ4™w kX`/'~ @?+jwKCؽgUj}>@WS8asFU2BqWBGu%0%(ք9d^qٓeC8%/ɚI;\#TPe;Js8fZ=W* bS;h󵉨*)W^b}z?|^%v"A  FUA?qf'z9je) @;Q?dk0*9㸔QҘgKɿg @(|y. `EؐRċ&~k8R |9)DܔO_#;Lױ"k@RmBLR{ +YMkN4ԬCUu0?tp*8l _XdSQx(xD򾕔Ne߽O-`|_O& ݙ:n]8TD%~-ȩl`'g L.e3 G]'Ԫ=,1s1N:4p mSǚI{12˞[Ȗ8uXy36Q]&'_2[6}gLEWӈdtR6 M;#~E9`&&WufY>l,VV >lE^)8>Y>U5G/>QaE}a\d,M${r%R#/s8wѤzJV1e 3-3ǎdZHL>Z` h*P9)@߯)2k<xjRWP2L,Ám_;24By͇g#n؝ս endstream endobj 340 0 obj << /Length1 1422 /Length2 6325 /Length3 0 /Length 7287 /Filter /FlateDecode >> stream xڍt4՚ޢ(j%fڢh$Kk{4F(5k6-EijϢi<=9>@XQH0H( Pє"@/!KMk G"PH堊C0xA!Zn8$% b@ߎ(,@ ⎀tDZ($ܕWFae>pB8 PPvUUx 0v}+~BP ( (銏pCh8@SpA@"+W"w0 E99C^-k`<1BC!G5wXY +pƸ"AH* ĸRO C%gH/ss5B"\jUl$m{BD7r6V86xp_ G q0h76[0"dǫ6dO9=#<`(?+PSTTP|Ma1I $&Hc}A🄚Hyp%tQx.P( ?,/wC`7Gf qB8z倧:(r gu0[51z(#mI%`'!߳pD P_/> /~W??&+~1K}#(دm@hxIA0/5fP jK(u- p'J15W5Vf^rl*&<1K}r> 3c< ?oUq9q[gġ0'xŖ:fCۍ :\$Btkoa]O*;&=nt[޾.f`1X[.J3e/8E~MMqO"Σ\O_Np-mrlj3yWϲ h|5hU tr(zU귘,θIM3B)֙Җvg'큷?xa?koh\7Gʷ#OJv+ۧÄ́ELr4<@ʣz PgVݔ`Y#;>lg=>}eM3nο<%m&OO7=m `ϙq8p+1ʽ*صOe8|dÜz@`qT-UOd3<;LYlQ7CVWJO)H-*%cd(4Ҕ@>sʣS1:8[򞻯sWV40OL]:d1~SBW*6dpJy}S (FvJ[/u"A wE>硟z9=B'<6S0Uh+ll>+J@z҅ D> S1}@6,:|0֙;"<S'{ 6$GiUSq]2S{ȪA2M8-kѮ~yfMHs7M9I q @h}zjř"$/zV:ъ¡+0 ∡rMjlQ1䑕/Xʴ2% 1omݙN{e?䳼o.L.a0 csKml#WA4D>>Ft~ WwlA{+]Wu,樘k7ʫv!eZӬRkKgm5_ov MhKSgnd6{׸g˚vXUim<`.Ew"_Dφ.xr#Hзb_ǭdmKLu+OZˈ&vs%ߟ{%p#UgF+9itO5ﶌ|֕&j+j1/#0|i- Pͳqң޾MքEi EA>tL8U۔Upc48#> \v"q Nj; =Ti&˗w@gΌK^Њٞ,2Ճ0Jicp>ÛIFxeU,khl ] 5**zO6ɛ"ilW}J 'YW[L*+ \'S`4'R>00oislR;<+%OpVtXKDOwvӝܐbG F*V YݥX\[ diMe6W+wE.mPJؿ 5"sf8OCڀŌW⃤]¾GN;hȧOR3AIqUP௯I!0X 3[UEo>p<~e=Żk&4;6khϜQڂtknAUis)(Q\M(,I^O,ֈ7Rj:w(f*>|> -2X"VI[&.:nMubEZ=C`96]zs0ƗEdz.1.|yv6h6'?պSqVdPe!TG#B]`z yJFQj]jm0R}sv<`͞6^$5 Q] axȡ0stBQUns#.֫2-ZBTL : ¬6\o1k 8JOo5|]$PsB}OVѨdUt}BKε=2c1 >/u\JweE,mP!31h^;k͸| O6UYc̸WuƯN-a"0\KIqWbD񤈓'OUgc9qF)<_D}ojkzٍg(6ϩl҅D,".RwdՓ( &!^|ƓyI@n|])6K&9ҔҒEMG2f-;Y7;H\xx+`+ʦ10c8rwmHWB0/emOV)81&0/l X"C®e KzcHE$bz'qˠ u$JhߠKVghssPl[A,8=QkdA8"VdwRNv-2: 3b(-wqp|z/\|r< %K9q;2S*p~-8u OZ6'-g˝#+pF/ϧ+دLf#-ɲD'#Hgvck]rP'Xz;"XGG@%׫hіH^YAT}cleL<5C遴ids^+}򻛗vZyjm;.O5Ёb="J8zWXS,鞞ҧWTY7W3Rաbj [22qHE~ urFM aإ6FlBC8W{]''7pƂBc:ã]QMzʡEOsv?ShmZX6~bf/<-ta =)VDCG5q|lLy:vu=0%zygB?=|`9wRk;6Q ^rs :i>x$AsL"sT%kslnC򦇏ciJ{Bclgjێ ӓ:/Y<HSf p, $SSڧֆÍ3i m}}>"x4n`D8G<:8ayc;Wz|9E`2 cF>۞2zjH񭩟ʈPR}YtL&$*k{z;| C=mA_,il#MucJ`tq0y kA6e=B4T V2|qa z,O%X#vo30*R2dUL[R# srwo2.ݧ4޶pJ?-"AH-Fx/eSUm[{.^|R9a(j$s;ST${G5f@hfY~EA!OT{ȊVɇc =GKDVĔm&|Km=,eYN^Cd r3׺ͺ`лȓk핡/}z2FQ G0R#OOc xgݳ)edyŸVQ&c׵Wbτ3WsjGˊ}FdDc&x>}~ flHx"j(R.!ε<_9.۟*cX8_l͘H,Uhu21/7A8WK}x*(7+df Vs`sK'j5sPЙ\\̀33Q, 7 -c!D4a$c rNӥXBbCzdr+v'$z^Ht&Z9L ݷd{5\~) ,9Vgp5H_m%R+j4-kٽ%U@SsW%Pz .M1nHV;ۑ?ֹg~ß^N;{*qDy-f `~NyfSZ;Ze5-|dNi!<%wWqYʪ9M92; 9ZjeXq[rKAرVS\א};" 9ew#hh̾&It ®(t|g%&iʧo6%LBTl}J\td`a3FK!NK*aX.' {.6:)n<)(Dv՟l^PfIb;swpNsvOtk_qD)ѥA_^UU@ywoqKS2Net[ٗEv}K_ !S{$mq{mz۹d(-^~A" vPmySk9Cs> 9fثѐh'?x?KrUֵ/5>6Fe{\,ffoSnB4 ;s%U'd*N>DҘ p.y6*"LyۛwjiTl]rirdx`jGL^65|P߂mr@̉jUm ]ʈ†`d@F 比C~Qb ('Q;a60qg;0zYOH}Ǯ;#l`SNT>%~3)=n[XАjDbIo ybLc}fC[Dd&}ƮS}a|I$IЌOL&C=ҹ-+ka%@ҒGLnlBuOl^&D V#!F@is]?& 7G3͢FȲ84pB r~Xkj冔p61wأbxC4[5.> stream xڍP.Lq/kqwIpww+Vܽť?{Ͻ?d&L?1CMARP33  ( 9X@vTjju-o1*& @d"0q~SBr.67??`euH,9(J-p[Z9@gF`a jr@&V f&5_!YYXLXBL7@rthdb3Tj/x؂@9&PA2Vˀ Xo?!:AM `%l (K)8;3L :A_M\M&/VnU4w{Nf`{g''-%!P;; $ k`k6o`[ф=E% w3+?«{؃T!~jxiz9Ύ. *fS%/b_e`we?>>9b?*"# W։A^fv. y9w_SwqDX@/QlՈ{A7gB v_4{bf.GoAR.&v`[ ^vv@T A`:Cbl,@ο`');M,^r؂!P'O΋?ڙټ<+N/KeA?됄A#;7e!^텷 ?:^zX@Q37U_ex FV Nߋɿ XMl!y59G`5s@?Kj/E[Tf `|)u2_:u|O_2sqt|,{O)2C] []-JƼ3&p[yٹWrh#Q-+sI\jMк]IwKw,ߙ=_uCB1&O+EıiVekon4oJxB)uTf*im:5P"ٴ ڊ֏HUJlEMtZX! s 9 uƖ D\|)q=L2SS#W%@OzJ@maEVP[ Ԝ0H/sU)UaCS7C۶htV~âjQi_tYrAsy=8 nf@lٽim!V* dn$q]dmvE]s:c\bԢ7FyJI5Hn]EmHΉҕ.zU)E& L{lsR/Mw[8:90#qQ1xBf+[ BJ!Y{N'4ڼ0W˰յ-yiͬ51}Y}ߓfϱ?sRm6'IDɚ"?B4Bf}/eP%io ١+P|W^i@܃2|4&I"ٰv0.W,>Sq_ pS38ܨ~a:%Ĥ.ʞl4[NEQuV lT-m"l}!g&!3 #ՐY,'*+W\5_79vVf[O}*v-&.Ma-9`.jz"Ϧp_tjB`'1A GO O*u؛Ԥk=YU{2\z텀%|Q$97"NOxnv1KޥGvm_+ѸI)ŒFⷸ UX N.)TЁ*>l7<SJtjSrf,z{`]&|!|L# c-K꼩,prlu=Ĭ g#c:g& LoF* mBm绐㪳j+*]8u^fZnK#)mO~훑v8,B&_ۿ+L^#.oz\=RO|"( s#Q ~@{ |&:X-qt5"fn2tPMֿKCQD\Q u)W0fam f$enĨyf>}3óID-ڂjI*^`X*SOоIL>"I}㿼E.|/yKH#2 /P6~F?)}J\4KU>!z?blԵnM{0);'H{m7nk/sX|:Y l 4O`SQJNMk~'Y>CHw; [hҽ }{ƼD6mPÕv$r(3|m^m8v_[4FFtGeHXO)|Q4w~P@ Pzriq a9nR6*ZҪHiҰX!xQ`&exPVLod&/ӀxASd (؄ywʋL! u_-9QIdW6m362S<FQ  Nd"P55 Sp) y> A2΃B2G6w\VEYkoa},)w" >*gOv9Rf%fξl`"㑗-=Bw7S(ܨXe3FLK .Lv@w|j<ǠndǾ|P .H-&J0nX/o5F2c19ze/޼O(@Ў>%)\'B=HGI~gqYOCp* @(|qhZ7iV/ʯ9D?'> 4}dEAQ{=Zb՝e0._1  B*Gq^Y^˅e̮Վ%N= ˾`"+ntQPtoXasM߂,BjhCI 'ЏO*)w;"mQT3ywS&ksVIoFq8 h$~/ϐn"%EcnpO0rM`Li;FoB .4&0푄'>MXN c{NY1FZ"~={ y<`唶!$g/$ST~kD9p$w\;0Nz< _`tYߞ5|+Ǚv0&Y32WY"$UK&<*^՛IE; H"vwv.gĵШ@3tۇ3{G4zrZy|#?@uYڀ1pU:?eizW`IA5ﵓa{#{ݐ܁5tCl_(Od1tlKpFIVXTF9Yv Ըr?y i+:^Vch1dTƙZG._wFMx aY@ėO@NfU*`2#A۩'qϳH&iQdd7ty9rd=4hWՖ_O3p8øt)gc]3h{ YK,yS2fOPK;I&v ΐz SV# B˚U[g֘hY.BlRI4E"Erے!}r} TeY)=]j]/)kXt*+{E; 6~Υ+J"|ZqUs 7~gxS 3p| hnwوLy|yNkNJse!Jn(2GWX o;⢓E0!TSOe:&[-:a6b.FV(jOfLszF|HNS@L_|ΌL(~:[_pJs /{ MI\t2%5A y5ʦ6$c:kmEdEC3ЧIrdvTn^w3)ii)Heͨ-',,َvUhRb?ۇ+G7^¹>Ϙ&φKݜRM+p 姼[ G(ez͍|}푔05—so6!{'ʲ:)}D >vi y5r=ӨruEǶgw] #c`d&neg%U2𜼖Q- i֯Q(!mIKg8/٭QNOj I v_uWvX])# TRQ38Iu`?5wTqņ\9W|)esЧd"QrKy0,'348a-.6){piBΠtsZJջZܱ3_{}yWzʖ<@/xڪrmRj$F?X Ruf?DLz/( qCNmdj}P6/gz$yW|m7՘DNY:s 7DL0~-:#K:{:ݻ޲ܝ/= ]fUc%T؎MxO@zBKYo93gW}bɾdyɕI}w705.JkǶ>õ\)OQ]T\*U'u d#c|&\+JD>.tᦣ0S؇3o9aG xXz5V.H,!ɒh Gϰ7/_ϥp*|_ .?jAϭ3A ,BXnn;o$- ^=,<ȏ*תBYݏ߷щl̠I'r%P%n[WB].dT v*ߤ7WS 4ˌ$ cqhTr gL4ûFlR"݇vx9VCh1 z-9'V p~VDˈ3f~y FSVi(B|D~ĐqQrr~8>=hU  XZ WZJRj#ϓ'hƥ0Ak1-~9V0Dd5^%ȴ6JKPa uJUWkH,)zbZdXh=hFiVT_fFYU):19-Rmm`6.p׼NWq2s5&9ZUo?YfPMtn+?Qiݹ&ZV$7y_=nR:M ZQr_ߤk0CҖч?&w Wa˿@6ה, Ô E2mz%5PFAVBh %x>M#:(K)l[Ac`e.&3..%2H3tV2-8L'ƃtDgK\`J|Gns; ֎ .TѩsǦĆu۹l: k0gu/± )ֆg5wr^l7'6nD_Q!!:.ۍ-Ɣ+,ZX/{0i[_3bĽ)`3 p<ᰅ$94~S4WB!:a&d a#u\!ٹ.l &SKpse+j+^kRp85YoDz8MBt)*L YK/vo+l1?\PJ-զs&2jor p9ŅUw\h}QWGFz_Ilޔh,9)lki'Ǡq @0Rox;4T^z֌c|-6#o;y^s>6 L^&zklBÍ_Ke޸lQCt\m]k~[?2O>aB6*Edyn *`c h;`ClxlJU;=$]x\bHhI᷑4G^ٳVb+izچ55ZHa"`;`+ՂWW9-IYzX͎ DOv2x TYlm(.]+a,izQکem3,'* `n .bF 5 v o=HmݫOSR7|r\U r#u̗23Jg/(4D7W> \5yh)Ŧث:Ʈ:gBJ\Z:m =8f^zU].;Cqh̋CKH]j[.W?ɖegҥ꧟+J(P$ݗ^ٔ\{"gvݖ@sCn/acǦ}#bO_U{+^ vO)n!2ҷ_-`} (nj/>Yq@X^0 bQVJXAO2,`kXͰ C-Ɨr3ʙ]:7Nq*r3SfWbƙGW,]fנb䎯%cmf?γZ9l7eOaߛG]&&ްHq/=?e+Sk ̫77'*DFr3nwQSgMmFzقFn+nF4.zOzr'~:ᅒG^m't+[v_FvÒo/)M ,{ '&Ra ݢ4 dOf{DXpJ.i}ۙi%-ЈGzVzJ(n1PBAP{mWcޱ2IW73S >,,bd[BVBe^Lb9}b+Ὓ"ˈB񀩐 9.XΤ|QrTƴ", gCc?8^ FD&kkk a6[٠T+ 4 #kSݛMٹN]pEMrGd4-qQ(#{& &<ȒleԳnE6{Rx-dP,1̌2]7ay5yZzP!j_u3IKmz;U绰D- \Df-ߺ@kc0k(-J󰩴VS\ug+9rR?*zR,(7p)a֐o 5y&EPp_5v^ْLU%WuE|]ZxL|Ip349rB= MA_Rzen9ovD%hJ0BϻvH ĖV~z X0pJ_JIx69PpMcui1Y, s΄EDhIQ^Zf8m2;&`OY2'b$z̓~k~Rw4*IZ0E:9dqGK3Ưڵ}͝{8Jz D>K^Sq_p0qzO3^}S$u7;+ =lRhɻHex^7hN\2]N%?1*IF7Y_ x0S8L?zڌ> ZJ/_aQ$F= coД=%S`9X@hLoub j(K% p?:M㭿&a\z„sg7^,WxgqoF3˂&JM3\cr[L|d52Av [ _9e$pِ0H^rz <(ȑPH\b0Ͷe3c۪\jیO>AXL(I,@Feކ</|rh=/%n̲’S!Zw|Jr+H2-fICɢ+I-51;FO^ktq6u5q\WKș4BgP/qMS:+ IgK嗌H(tD̿K|}lkD*BbٮôO,EڼN!C٥=h endstream endobj 344 0 obj << /Length1 2904 /Length2 24391 /Length3 0 /Length 26007 /Filter /FlateDecode >> stream xڌP]Y ! -h=;vOfdt~ސ+ %lx*L&&V&&8rr5Kgk?b8r -@#gLd'og q09x9y,LL3sZ2v@'8rQ;{GKs gP=Lܜt-MlF@PD#k%?.,ylnh 0@wf p5 KvfnF@H`miup5:@rE{r _wF&&v6F3Kk @QBݙ`dktds#2?98Z;;18YZJPmMEllNpY:M@e`Vvn^3K[S_I3Z:1~́v&&&NnVt7`^=  d 8;}T13L-M@sK[Ab|GKw.hL~}z/S;[kQBYLB^Չع٘,L_C z *YCҶfvsy3T 5@ P}=&v&/ בs_B.l,=13h-@aM53;G_`0 8"'Q70Ahl[ `q27YKF,F߈(e~#9DN_:&gdcl'o)@~#X7Q@|#]7qF ߬@э@gdD7 zo9+{UFL,M\l̬A?1;(5ht&k"M &@'03 &hnqhҘ3f@_0 2h ? ol[x[mƇ? V@PΔD^0.vߐt!(c* c)_UŰ}gؘwXA쁎,~.NI~r:u;,v@Scpae?3HkkZ53z9m, lt*dYgctp_֦l nvu&"?i? (TW|A<[oU[t-/ؙ} j*F7?KLM&*ppڎ8յ ѳqsݛЖ8G'V)c~jBV2.\HJwn}c! {UO3QzEs9$04hs7hYD21p>'Q^:,=Xppt Ʀ)De-z ,7e!%ѣ0UYD6V-w0f'(wK1 I1Z "НYf"m7fWgj_sM^u#!I-wÍ#;>En4k?Dpt{س|P؜C]vC{ȡjܙtqc*nB&)[42o ~.bAăH.v} YdbpGy g_wO"DoLoD14/*D?oq|PrRL(ݙ}kLz&Jl3UFW*-FNY,/{~I竿֧Fv;*0tÍ?^pETrI=7zgwGwȼ+)1ċ;WT/fM݄V'CcP"oY0&N% h1^2?l{f=E7W:|ø .' Svj#!k]2Gv /5gײ|!>xqN]nf*ϝ?jH`&`;|C5щ?TЕXsyQ)Q7_djDe&dK(z8apTÑhLNu/H]E0 I,HGP #z S8H6m df*Myk=9k_J6lq-;h4aC+c,xlh݄+.w%>6y+~;)dD^&GY#TuQ0hT:)犚Yl…_Br s}6E6Wb4[ܯUO&Le2YLcѮ^ zw,TV[ mY5Yt$GdDuD$3 Oa,Vp8Klugfa {I]<%cxZsI_lf$w^/M{[N]r|0 ?`9QvȟP}p˅ʅlgJsnήj#r)#&a&&]~u:=/vRe7bAHLR1'2L&m Q>RS!b.)+йٯٳy]$`" y7 L_{Oc+P6h svуK! %E 5r-6ۇ1&$ QJL*q/rD9qST"8h( 9^7 "hSX{ͱh׸(r(fkH_g,4(T~6Ѓ'ASf#P_pcj'oJV"]KpX4}ݏ~i^G(]Uz 7!.{ry1+5,IYS/,4,Lޥ[LGm1aPsM9jӠRon#6RF. *Q {t*^KV~cB*[w_SCF9^Oahrk-lq?m_Ϝ0z.mu6 iRZKnG/0b<aEE"ޙ2h4346wRJ6%ֻKBkBFGnM:|`Kl5(v $2 ": z1W ( g>.q5m [m!? R*D%f36KDXx8+0 hv/S$6: O嫧-)=2];ĉSv;R{NVz'Fȳs%tH\qNMhGYwd/jg԰UAm쟭bAZ\W!?x9aٱ&PV3Ft~E[yemBKe(?Olz`;vm# acfb DF~:- vk^#i?T - iȸ/d}C|ͳ %SA;{Ym8D 檲x+5LL/xK.rqZ}q$8>݈)OfQU.<%^_B0*88a:b~t_KgXZʙJ\H";XIz Bm6+f8(#m&*E {tBȐQ]eT!LѶc#ӄ8:§-F3֍ĴɒDԊJ3y7sDZ>O7M}Qs:#^a?7DL\l4 _##[~SJ)j!Lz:P\vT:za?#k;M:yhG"U)[m-~{uO9׳J=#'^0UFKNJVgi;w\.kdW .pf>&3N*;-y.;V* G/S0X.}[50]?R0Q􈵎-[{<asa"h_/V7TIH_f.|Dvfٌ۾dT\af(&cCoVjmAFP^\pIYR &mjW\L6Kne # OtԊ)u@3*1}: Inݹ"WXlnX >5#-]7@m<<(i׶(rE]&>]d1b=_Zh۟ux&&ә;/]x.wBP'D kau+xgӏF9hCU(3cy=n'Fx9rFA|>|=z sG?l~g9ɖ ZP*"a-BȞ^nb(\P`XWLc{9T*::&sYydX,v[Pۨ"mWǍv?qȞNEzXo*-xi2yebyX*u<7m2U{AhW~zp[;)pB="e%BK,DY^XiGZB-D![]S$42H]+ڄUV (feh:[aVr8\kTqմQ?bW%MMRޜI3Ր[=r,|gl*qG.!, +qB`e/ |Ӵ0ܕo x]~nj{'h!L:P:7~H΋W'm%QnD};}՟$My] QeUy*2CuȘם3OcU&g7#9gzpmi>oqnׁ{3%B@QLnYW-})57sKPThI݁+UujrVMv6f FUZ5j}Uiz`[7g:0&q)QUQ*zϞ ֶ=%ӗ-vwiQZAB (zD)Ak7O<4L>Xz$^K+?]v% ǖ󃯕6Gſq!|R/Hp0Gt4@Z\fa Y(NR3z[y*bas'OnN=߬tަGnY5F^r統VF}U&nD&1Մ,=8R¡(6̮vwbKࢍRʶ{pctcHXo,_^GuH#H+ö¶KD eZD #>^ϏM Ϯ$E}hʧ7VT$tlLЩko/dIz^9p 䆚lY ccPdL*LGl-;]gF6Ś@v% >d|w]D)JYbdFXb=K"*ƴK:/D#Ϡ[Pt bj{,l%&7rld?XV%aʎ 79 z1Ηt[͚;7O|5G(^0kX5^1!"v\M87A_(u>}5ۋz`;k3)a3;M.p(hZt;=nN}[$7ֲQ\y R65B4N{g]7ДJQh@ui."s|SRRAe,]KlU'%m·֩/dp?:?EnZg ">n+Mmn!ʹ wɥUS=1H)#Y5%Óިzyw`BT;)zp3~Ją7#X={Ww'(xRb|i0^ڍ&i ËvvG/a}z_e:{oI !;.bX-HWAn).' !Ӗ\/FJme"VB?VZ>M)z OCu(kd Ojb?g&/&{ppI)F-a˞Ffp{ xET!{Ppd{epQ !"}֗O,02>T%$hU,l.9ble\r*;Tq G3??![v}?n/8(VSK݉:2\gaC :lw-C*ac]¹n:p 9Фk]*zOBQVM)/|z<sv|$ zg/"v9ܕ`jb3{"F/!K%TA#a_T~!zXd) Ɨf}o{BH)U2*L CqRwC8HGv,$M, \yoj;{WJglϵ4ޟqH msdUҮ:& v:/aG("ЫsBFV~wW3|+e]@Ip#uOn\w0 F?X2$?_TnDx6D 'B%qf,AZI,q}5-KIv-^Nt  4EW/}׍ Τn=*A5rk?T/[fZI\S/-Qr7FGӑر 695fpQdNZ,4x%Л37zB&lw< \wf8e;B\"w+h HLFg/Uu/WS#kK_LE>n3dॅ h79PoT9X}|=hj!sЦz0i܈g)K!*35.sx{.݅-rF}=s*/B#t!V qYGa p'0^Da#-ekwuLvs|;"@Q;%Ǧ(0EGa^)#nHXWf$1o ~4?Gٴ\NKhkQè klY]}KXcNU>O)7:eȂBs~C?(dtCc{hT3` >(no*j+ԱHt>5l6SkG`!uld&!J3 _)z8uqAˆ}.?m6$H9x19l4 ,Rϔk6o]w?C? *DC >IٛX$d؀i8Rhcݪ#7GLEP<$ϯgsdnzFy M$|\Řh#yb_NJCe/meG"OR7Xovb-f kcJWEFB^::&uߪ.t ydF|>ZÀu8&&Z1A) ֜ S/r"]|Bu$@+0Jc}Qʿ@D٬Ƞނ~sti:MW_d9=lImcdĸӈq(ȸ|'P|^D%Лf.s6y@m1;A0A9H(d$?zL3ekRp=IFXU C38k7l-|"æi+qɍ$n_ ~ ߗT)ޏecUō"[jc"id99y'sM|q22 fyW J-бKEϩFU<5+v<{gC8^#dSYߨ2 dsAΫ>K=o_S51}Ra8z`'_kF+:0m! ڹ\s@|g)+Ep IPǴG<@p&~~5ԕ @"q%>NQMB\b8nJΕhK>"!O,"<8lK^jh H9h> {ʅS'}}dD#L$MPvՆ⚠}1ڧj.|ϺH}|I D;Ά~ (W`<)Kn\~rh{2T‹Xl9r$ͻ]W,3P&6OEpFadф ~s&wvD&p U",{tBs&Lڕ$?-3D~}x \}u489Y%Z8>+l,5/GPЧrEB} }UJYrj 3b"m_L[|G 5qĊ;bvMPk*MQ>TR%aޝ%٨МtzYbZzGBkʌz3^VRPtd/=r8IEGZ'H\ה9s~x% ZGϭvvqVF1Jf,] > ldU=ϖ ]UeQ}aJv=́'IQ=p"z6g%2|%.]bZ!(,nԁ:xlnϴkkD; VyĂfQ8iQVT ['YQЙ̭YK_vRFv1Y.G~h/Fz!Bު$Y&;gk"$GQ! U_:n#M D7I|#kYV~l2s49b}l+jWXh ߺ`1><+_[5R+m04VkBG3XdJ%Ņpva1l.Yh`BP*ӇX9c[z"l\ :ikH?pX$nJ7-8TSzق;㕕Sx>!PhԤ{٦}Qɰ-Sx{3 39} uPamw"(rKMq姘(=`Jz]ٝj|Ocֲ8/!XGw۞K6ĒshAî5N?S_ۤSRc3&^z ZE$-e!8ҡ, -Y\:@ܬ1ɷ5'[皅S\$cjj̛S>pDw6X~-:ncѠ*ih@4/˓G[%uǣzbwZ:ݡ\&rS)l$Yrp!V{/j<;y9o!q#+yᄄZMo,OM*oHk Wl1Bou",J:tՌ4 ڭ+&RyI@.gW5rBCwM utY|vխ[MRӝ4"g¾ĺ%aFvKU#\@9d"6Ӌn5 W^G1FUzZ,gG4]ՆpJn]|4yŋs|G!!(FP`UZnHƤe[9FbFB[:*֋¥5OU4[Ok'=WT~Vv>yY,MOfU=Ic#s!K#p!zi|B'Ne#@\e+48}H3y>F!&򤹭RXq =B{u$btL.GO#<t ]L"& `18x{EP_e) @S+ra ~3Vd =v5JklX)JR\6U@|Γ.(OFlQAaÃ"g)T wXB;Z٢U߳& =_v%o|5l4n+Hm𒳱yT4[:@6g%sOc.DgJ䔈/s0z˪;dP{7TH& Ӆ=QQZ%Jv x(?瑸aK30eޖܦv$"-n]9/oORSb OѾV|&bS) pK?8;x^Έ`}:!5JG4ﰊ&wn9=n &;H(N oCQm򄾇 EǣGPq0tiǍ bev"G[}}J Ui!']X~rEmA;)lWpCMշCzO"iY}I}m-*$P(v-Bswk0CA1?h'>CԺ佹A7*pl.&_*Uac./oƲ}޾l!ǑiYr %7jΈ|H:=P~$LjHT"{V!pऽF>rB:Q_>2B ׁs0kY`[oۊ7qO>F.9RjBHILia$^AkoURY9^b#?;rV "G6TWU$kSy*_@ӈ-%)ŒT%†*:l1 b2g]k[Sa.W iT3l.Qlx _JQb` 2Y͊hJW MX`Сglvh:/t=qP|hQV=*H>3eU\ʊLD{`d%IhAYܶĸHFMmdeI3/q3V-qc_O%mH:@qB V>]5M6PȑD3WD4롇4xW'5Q Je`зV' ]S# ǀ20D#O-" ?[t<%l(2ɶ֤];52g!AKA]l=;ŬH1UUvkcB8͑S.(beiMDCd(Z\Z9@飯*{R lG7ދ>+cXP5Dp')Z7_]GC۬k`P }o-!|E4kE_ӷvٹ2 <YFy$=;H: :@)>I}mN9 6WIKULQY.:"'e^n^a BTxO=P44-@ۦ Yo1zpJ7vQ|V"hOW3H.7 :fgs{ӡż.LR |b;W8נ:ŤV2$^< 'ri=MPjs7|=DǶ,L3rj%s+W1Z,|DA%x5D,:;O҈,A2q{aeX:q[G%7,or^P5~ f)J6!gCđo(dɳ}jقXK RJޅ87{E1Z<tGEx}v!JuF액?Qd&8 Jxd0?& ߬p"tք0^⑬&1ŀK(֎"ܐSd2?_l+״9ͭ]ۓj!"?Zc&KEgp2E7܀ϸh#ܬBVBʇ?#6_7> 7@8(CcEG as'/ܫ/%bO$H",'ǭl L$\MHI&wSҘ]"K>JC3fӎIXXd6NhI9 2d#Q8׳\R 7WOrʻWNr,Wx>גm՟WpdN}~Y=f8=QX{p:/oAۙ lo37xqqx(DyMR)S0J5<-Fp7 *`Mx Mz8eai"]gRg0MhxՌKI M/24M6zm4DBQbFB*Oqߎ/hYf?`1Dyv׸7뀈y!D+2$+z!uS޽)U<8ҖÔÆ|S!mR,D~Q~OL{{[ z>xkmtr0C9UekΫWI,˱jJƒ?>\fZ6vj6}\HYLapۘ 9~=4#< M ˱+7n浚Tm+8Nny݇C6Z*?N,]P[>kHƱ++2+m1ɣԚesQ>.xތ?+UX2 :aGҷF }tfX];Y,ۅA`\F4*"nDE[QMdž}xBL, _GB-C}LtH1+-*BK-u as ݵrS7GנW7c{u z(O7 5ˡUB>j2k #jH#tO/ ڨhv SDS?~Z1W1Ow*IgMQ'2/'.Ĩl~(4 EYOgֿWqb+y,:/>͹>[eʿƔ}#3IR2_q< j_l$%eMziG-ߌ D%y§rJ-n=:HmWgfor<7i.}/3ӊCkiLp>smnJC 7hͼw9(:7d $.3l8P.G=M% io SemQA0pW޼2Sg7L [I\8#.[U&W2ʒ+wjcS=g~&ؙU̟Q"=5$^PwOMB`zLE~"A"0p3QqIUQm7YѪvOj{1p2Fd=i׷!» yS37nm4@i Ŝ{tw6Td4R }#qURf#h"f8.^:Z_/P}Eqͪ}Irђ&O =l'yCKT)੎K-JqYS.+k8lCF)+^ !a{ժT$5u+*%oRCbAO׼5Mնs$ H@-D= {UeUh,R[1(SNbxZFcZxi3_a3tɾ3sdMPnf?,:\* N_* wT]XH]%ܔ"$zn"=Fxͽ6Bx8mQ 0A}f=A*NPpkP0Ԅa^z}9!Dk3GG=V/G:zi62MPJ\4>; {0*_{7]Nj: Bo.΢cm 6@Oj4t䑩`V.'pPBU錳Tp*j VM[OZr~ `U[@j,JFc3skr*5nZʈ >@eZJ[>,s5ީfm݁Mz\_*/vhre!o_Tp=R(+ mb9#kMߝӳ;1"cyp`Š`PZU8,Dv'juPd4i_]]t`=ߊ"Uc4R[A%K:-7e&M@pY)1UT%L] 3k t* .)yH]*&YҌabhgxF'IPa=8 wV-hxs|KK`=p~F3,uTe4;n$99L3 R UPp/  `rSAe)tV| oA5iApۦg#K(=0jpr+E5lj1\5 k5i#F_vf[:6n/k-pY4- w4DcOGpc_̮~^{4=E?f+YH1?sa}^U0ISK Pz}v`kn@|~` |nx$V"{{=SN6sH NWOt)K4p?z;`wfZ<^x ةC\qaBץF iy߉$pGf%((F0}[.E]\!(_ u[PMݦA!f`+#ݹZ 79U 7m;#t4|\o=->^LV(#K‹V!FEY :5cp GU*Sfnm؛Y[XN$|N7{jz,z9FDE6/%hnGUЬDf]]]NOqZ?A,b{XV㟏[uR}+6\7>hFOM"L8tW<(QV3H+_4I@ &e.LP99 N4?`4Qǝ@o?" e|Y++I?q^*z5w)Oi5"MFG ؑSHҮ}XزH#K>Ү^ΐqw]wI?yU^毮!Ox#(V:JګB VO_ %DsGskE#pO Sg n?ga խNQU&~uN@tCݢ:1|v}ęa^u<%s\c-uTܝsY@u$I L̈W8n ߝ 6Z("3Ʉ]_r Ls%{}ױ @Xz۹i9| `SğuWDT뚤\>|^Tn "ᄒx0%cĺ#i` ԁi-I&Im?nXd gW.rΈ;P_R5ݬJ<όJ!mUBYKz|ODjyn5<DYaD/! R(dv Pc ?fxdn0OWPM~`F 7zmI曳?\K`׷ %3o6:o~TçǙH9p}5pա)U atj2 =>-t%oXzzĝd/2U$]:"3.:6u2v=yo[ڔA85 ĖThw/a[xX2豺-阜:F Ol ^V'# !"&~! Iuf,ی;m^SmFe.gAs͌ˡΖ".Q.wW [2aы=nEW~io2:yyd; DjMf&fx06Dt zeEzSMjYoG]DLn6[h5)&*:]i݉ͤʮM͖n2VVBw 4_9f/|*$~WZwU'wt't$+?VbOǪ=zWa3N8("< }{1^(Da% rGUÓ:GGV\hC&mfs|$q?EmnOX! \>f~(/qXOMf[+s%IOۇigpA'(A6YsI. `=VA$o?fp3]:21  }Xb{BJ{-k>nOF[ Xu.6a8ÁډK=J=n5BfEoNٔ?7勊-1. Μ,˪JΪU2B]췇*y:(3:YkZ9 MGFO'Axi\$N@" ߶;@{[suV9" |3&6zmL x곪6Oٟ65Q .~N\.T];HF/ G7V8H%RHDI"ViwYh`~dNe(6K>n=RИY;p:5ζJ9m\ݴ![+5Q(NPx8PCBTݻ!Å6֐fSSi (kYs.\Q aFt)'`,(w ^J`KK :\A&g+8+vHjatP.k{J5E)Fy%pEb(TQ= jN 7jrDw\7v% qj)a4[S l>%}-WJŏaKgB1JsFa=Zv" ?s|YOY @LL%yR"7J*M^)@d )w]q⑉2i>- 0Na|9]k.lbv]ъq+Lx_&am69%oK~0v13I4п&-*y~ =&V DE=VP?HDaƊ(b6T)TGz#n(%nb5-% +/n`)Zsmcu7wv67k:Crw} X=A*"g#i=gU y=9^ 83 c#%ci-߼|ƨ]AGB u;Ė#b5sgx '([]{eU2)d-JMt?̂_kljz[ uA M LL7tOXC;1>{0hWa ]7qr%̷]h'&G@}RfF3?ڐ7vbU:\$3+4@ś L1]iW245H2ӰyKeEPpRR nwULz]n9{'RP)|$v7Ųs£wJg{暏Pb⥹5 0Oh0},t9avB.iF_͙ך^&@@ xi|f!By7LY H[rbKhyY2x * _/p BغaF%=Z0uUM+ `QCq|rFF1v51;o6i5Unj5fhTWR\25Iu z|K)VO>&OX]B) u/H=gǛ羡fsՁLdxK|c H 4^^<AD*Zx씃~6I>zakr:Y]`ʿm$=JE8 }TMs3Zڝ 5KBBW8_{)f -uқYsfGmE|ÉM8'oЉ[+a۲d$7%ihؠw VgMOݪi ph99l9]:D[*vsч* +Q Be><[<ŇPXWZ˦ܵ#͈m?@.ciRm鑦iڔO|S#З/Cq3=l( MؘhA!ae x2_ eyWPer[lI %EXZ#9 Js=V"KC.oOo7I>uA0# uJ*I@otЋZrg"^ip@'y!V($=]nT{;(0J@eXZ兲teۿ`b;t !5] D\転42oX!Q&qaOHSG<U>J ^&g ntCk"Lm'!8/fE"$k;jO_.oV.k%|+XZ5m8n]G{p(e eՔ$A-@[4ƻ oX[mtY'`K,_뭓$Bn ٺDfDn|t:R'dN.O$މ*q13̝5 {=9jU#31qzWt^@]#>̳)}՟ ħj]JT^O/5's׋ 7]E*e܁f͙!ř~ҽ}=n=;~VwWOzy:Bd[%7TrFi D4C=5S+l\I6d l3oV t6mߧ.1Qexxa|p Q@J :s aԢڮL}AxЙZs%.]/6RTl勈[c7_W"cF*z_LN*xL@Et=@[;=T,@}d?J<(jG5a]dwYuL=-kR:zs*4#7h=x]"`/=, :xG"B'~DGr rPH+?I C\E> stream xڍP-nw %H 4@!\[pww ydf{Ut뜵tTjlf6.vN!7;''7 Nu;@ ]m2@8e@ '/ OT t[3 'le??L.AA~? ((]ÁvMs0J0X8 qpVbLw5@ , T?5,]܁P`6A3\! (9@SA g+௳ps]߅?@'bہ]<\X@@s> =19ZR|&=gs(řl"2ϧ, vA\Q~'̟ݓϛ8C`o+HA毐g?6+ _r<̭9~tm~f|&[Pn o#..`CPlY/ r>k /gyY8@< ~9t ^o ( wV5 8)tIC/U01L,e4?RdM;kW;?܌?n=g%o$c;{,.J?\ 9856.N={|W@-e!B(xs=/e8!.)gzK(pH6#~NCP ?Ha7y|~,fa/ y_8,n2p?\Jx.i//<4v@ސ|ϯ?,YM_p=7w|pgf.r?~/σ{f]%}02GYu0 i$ugMcb^b %3UeA$`-o2^J,R>x5#$ܛ$hL촢#p$YGLƦ%h ۩H*V{+QW46[t-F;m`4]Y 5 KfӗWS8O ,(1 ֹcofVʵi /qF&轥S K֠#3vT4?ƅ8E'S%"dXV\Pl̪~R@ͭGbįcװOcDX 0_^kh0%onشʪuSp;bqa߹;laOl L$_ݒ+B.J$&9+#UꀉQ*Sf~k;uD^vdUE@dy؛FQWoB28a_G;O 8EK40T+N = iaF9y X (e]#ιsj#k4N8JU{d9&F&4RtizUG T3GS 7 kxni;/b8}$76 ?Ԋ>(e&TP.: o4+ "P28YB% 'wt[" \y΁*2nsz5!m' 2س5%)_P2- 5F=MYЈp)Ш8|h|ʵg;ٺ bSRb;\{2&ۭ8zn>oSGYkH_XH1Vgeo[U1(ju2J& =&3@'椎oк1RdN3>~`!WeۘWG, 0dMPSq 7eܰ[IM$Z=?J~0n,5E$e?'Gw("xT u.j[ U};p9Ӿ*5b߉3[R]\M0^uwJ aCl3A UzVs$sr {[2ȵ#{D!m=Sn“H!ղ<|& YFwcq*1 VKxZIDǓěዤ_of|T.7GGQz|#GOftE'ʵ}i$I >Cdonvmj>tL:M?ZʲqpDۀ({=i!&# $>A1|9éRq6 H ӸSIxthOi<O0mgHrBn+zqUXSph3EP=qi1WCH/lٵQa.É˰vsj"F +n4>zPav,k&OOY1<<f*O $Woi>yPXj=(9Q&f\#;LĠ`4U)dBsT^itCzoAծ >?",1s[p7POv$ьVl %ך*핯P(bUmDcX/"Ƕ+ D y SQ=$Z jakelRlh4[Cn/2[c{$8[\R= tA~*Wo5ZFPnqؙ7-`~ԗ62_po,scaQP |f~P"ш(Ί~h TZbk;*^e}Kb)Jj{3M%7.?Mueer?ca^I/ײ,оPv[C:$?$ wCӣ굢X&coBC,bS(wYi-E!@ƄPW4Fi0:4źAm\J iµ8I!yof S5dp[0{W4jdMlK…/I+9jm $!Vf#P!*Hh+]ct#i1G֟{EW%bV!Vf8}bZdgYFe'U`<*B/x}] Z܃`_G}TQY:0K&O (;\I󼹞 uh-:-[U =?_P҈6!ޟxN?2͏yv, WAQ1>8HY}P~̍m~F6o:w(v2"äU WP1؎\8jm*VݽNǭ6v(aQr BCHbXT$u/JnU|J0-BI^cܠSZt !i;=D`QyҖh4+iȥ^ /ٯn]MI/p/L>\ájR9-9Z(N3s@T>ܱI C^ ]ćbMYPf|W!&Mֲl{kf$6GSd<Ќۗw,DPH>KeYջr̽Z x?FGV51S!5~3B2e6gՒ/n+L55~Q>鮲N ]`[*Os(1_p\P @OT$O{9)&X]+Srh!8$KU,VN`*fmrzBxd|%)$~t$u}c1TWDpxzʜ)|WVUjwؔ `:zW"/L-*K/H#{"Ynl;ʘq7)\A:ARyG4<֨yV}~m(lsx׌ǙDZYZʩY!j5A^ޏ Yh,(_ END\U2GV{DOA##/?p)~bdlnu)1gokV"-2<.h g<_wl,TV_ BbIèZ|>Qأ0W *R ǰu?b ttKAzמ|"svm;/E"rEܽ ܫv(CxP"LS Zr$鋭N/$;w.+T*)Rj漼¾)@vSd•Q#ì4Su k"lE h,a2X\~ fl.:#z%v({lI*ũ)9~@DtKH=sMC2)gs[دK-:(X  f! }Ŏ1Q<IV_ԘϿ@7xtChPɴ٢?LIErH P#>N[icHzZh79}&5nLI׫> *X p-5ж8hEn'y=xaXg'JW#Laƭ @߉d]5<%Se!8o5ƼMǰ\SJξΞ0{{_린kw>_g<Vf9ZsihB.0Z5 ZeX&J]R8\zvvÏW/V>wGY^зSH†bEL UCc^E,yl8FKĂ }AB@ڄ\)xH%K#jS@vtl9Q3[6I%^Pdh1%]"ڢ9˾˲EczoJ=DMȲۡ' 6]'Ď<"B[P ,}:jr3RHbn{D󉅴'-w2̻8snaCi>k5+FW-sӯְ?l5OEgXo4#r^'.M?82O ϫ&=JnH"ܣ~bj)96r-TVU$1܃w_pc虯;ѣYaⲧQC€q/I6C;G\MNz vW,~v轰׉LV: T[gryK0 HT3*j[RӫLcCزP3b#:ڲAPJ^7Wl;` [^fmNg@Lr_`Zwto;хдv*wY`Frb7a޾043)4^K_1ag*Lj(#+vKJ`Z$ܽ%0mmH]rf˛$0,CD)udzx15$'{LsAJx4Fj%/Ef7-+?|-.d6{W#WxI$6n et(ܣ#?$$^ӵh[/|1r2C]09\,H~ײ5"Ҵ@|8=U j]X/(䚢Ɏ%+,HU26NLWT}T@n+idܬQe4%#)Hx/U,i:iRUGS%^ߪ_ޏ f7}^ ILfT4բob>hR-0Kзv"q3!;Rdw|rw% kpt{h0B~ƎΕHoguDEW:7)np% Idޱ0$@D'-֫(bҐ (9aafL06/J"h9F<׃VX',h-ԜҶD8f¶Jaq`_fІrX*=v:zψ&*͡Iye"n=鋋nMiƶhW״]E9fB`y ئڀE4nĝW}4k>1",a Nld ( 2 úk}(1u(֚[ ,Zg-Է 4It 6,^;P)k̫a+$f1/LBO\yniQ@JJGYa&ƭOS ]5zbEE\#w#5Tܑ GU8bR'<*ܴѼ/0[|kQ֗͠yƅ iB]}~),2d(J훛8% Ǎ(=V o5w}[Why=z(uſ!}yp㻲F٧Hܩ2Wh+EKnӀxyng*[/0n (]-DTGμN ٠TW4nIlHuי}a V5hW3Wex_|E!M+SBF'n%5 im%ځᡑL27#|cBi~yLO(f-vR ɫ&ǜEZeӵvƈA' jo:udxbf߶lHG\kte8f$218b#{:n JܸjXt9^٧7%2 nxp;ƷKTwf:5i,Yk);̧ߗ\L'T%к#4q}Viɣg-QDup9:H@=)4ܩ F=BƂV-.di{]3neSr"A[#9#EQBed*sZ1SgX3Ả7ïiWKl_ t@r\A;!oQ&9X %uiu=Ge>M/*UަvǢ_z~|,-GʕյqMz3.`ܹZ5!x *ב nձ`ϥSp{ %\KDŽ+ )8][/D4VKH3k#Hp @C䅧S#ҚTYk=S91?>Ddћ*];+wZo{h5J< [-n|BC}‰ʕCğv'_#RBj \{Jɽu3( =M2f EebƓ?X$B4ԗGm5>mG=bz{Z3~nP6ױm!F, XcK,f1gRhH x5;)?ggl?"CZM5;PnX0:"y-:DT7ƪ WV#T׍ vL=I# 42^V*mV+/c57o,uU @'_'x]V'|CfTmP~&eT۲3v:r꧂n_o/;^쌻,#% E $2LZ_GiBϤtQŃ0'<4 V<`Uӑl'&+A[`lTBϾwp:"Х}+s;^UD.Hxd@<ȟ(Hwpؗ]:6_.7ZǺcg["Fa͢~)q3W=,njqA˺DVlUH[p&IjY͡,Qd.^E  "P{ g"l拨a%nmn혁jaT+5BH,&\{8yP5z*N]umrd6߃ubESX|PݕY\u;F;wskiHٴfvb{KwGق]u18R3k#EZiSᣖEz%o_zqu8t|'F^ퟘ(~n碽a]s]w=G Z[z8QGQ?3=Mf!V¨|[Y'tly$qtjtc|>][ToDcLKpKj|%]iu^A?\J|ĢW=5;J qZO up͵bt|TMw_i? endstream endobj 348 0 obj << /Length1 1662 /Length2 9407 /Length3 0 /Length 10472 /Filter /FlateDecode >> stream xڍP-Jp  \{Fqwwww44Gf̽WW]EڲYg} ZJuf1s)H qffgaH(8Y8Pii5ζ̨Z G'0 G h\lqq;p|oU!X@|Jxpk*WP>2@q=a?R7m@R.&v`['y+ϻPmП2Wy; _#I 2W;Y9B3-R:5fv6={ܫ?\u3~ 0qt4@e{/nn󂚃l+ x:[no*7e8j .?Eo`5XF5 XA|b/\d >SAssX/ `ue8:>?Bs'x@ wL غ>VčyoRhvO;kٱ)CvXʧ~IKGmHaIF j{K 5 2k~~t k{#G‹Rw6(0TeF.QxYO!6#A]c_}O=:%jH ۩B?ᰘb^x̻MfM1ٺ"c_:kV0/uZJE86`l̊Hc#|QZ&le7F.P&zAJCq~JLQvzwqCW+,RVڵ_ .!A¥W#WMZ-~j?ݎ%WLWX[=h`.wTSp5tͣ,9CZf@3v3&y ӏ,$opHe`D*~1G']7ɳ4\Q;J4mJ%̬mD6&lhm ma$OHf +~!lWo]*tPV߀Bpk h%I ^#ףXBŸ0q?>"EagLȽ jBB?[r.`^fr(\J[EE:ב񰧘< STwH(1%6sP_4u]W@+A Tvb-tԤT 2# l]8^eЖ0Ei*|:.B|W$3yOZ 9مTL)Xn_y!a\/4ک*#ZeN1d"@a`8MafEq(㚋 %R1v._Wa1){` g֙L«6}<cd)I '@:fI2$Rhh ZgRVVзź1J>ujh;Sy4ćʃό*dǚI}6r5]%u[~@U5;Y8{_2 ąvhǕAk=buxP;,̼Ӂy.jp#cVXҨ?yHtl-~)k52}}#(-G= l61`FF%ZJU]DŁ9z~5)[d3iNKXH4`jyo{҄'^w9"FlOmձyг-ov٣xq \Ϩb8bZ>Qqέu$?x;nT%OZ8 >;k_Q:@{|𳱯M!P_M>#&-_~V{hڡu 76V:i[46 DQ<s~*A'>RZ:|J> vy~1@Fpy+(k'=NLq iHgxGhgaQEPn5B8"14f~hK4ώ5=dK3|<7.֧pE 0ZD0j=ۜǨ >)6dgtսhuIpy-# 10_Aū|Yq%*ץݤ|θzNcY0{,8_3{.њoF{LԼʅpr|UΛCv"Gt_a ֡)ŴV@!+J$H1o{XtU˽yݓDf^q;^8V)H3tCqrŭp'ڴ]mc8?jǀ('18ҽW2G "] dcϹjQ\OY޸u;+̍2.zA4<**B<4kz=htXk! #kJXuPx ȧ)[565R[mns7i--iTju"&4 Lff|QTiD+ϷgUΧG3|3`ѿa\X>͉0VT]1_e9lˉ׶ Ev@}⛘-'&r"xJv ̓e{V+MRTe-<p\/6{TyLX~!8r>UʃwyW:"9ec݊Į;+dA%3$Hp-i""Z1zT94~eM3%3͡Sf0>xqk=Vkk\e,(^Ӈ^x/_kEhuϮ43Q{/WtM=(`*|LYoMC`z]x3ؒQ8e>$1ynS(@ўxži*c8+|V8yb5Oqpkq9[CS=2[v$U |*@z8ݘTg7p#i RG ˑ)韆l&Ⱦc,M. K6nFCkOCU{Y;*ޡ[~/xsAN? dZ𕴲&yug9' 鞾s?M9mD'òbZ!U;eItf|2۪]Rzg J{#>3wL(| 43.ū%6 X?kf D(A6.0 #|ь:qmIW|E0J$D?- &} p/AB D}RAm}iuZI@Vƶ{z֤QrPi/H)n:{'Rz'jc)Ǒ Yt&5S'w'PYo|6C?Wڐ̤_"qf9n!ል Lߗ2~ '>T,S*VPň/t,NNippTm {qeX [2kr\ k< ac/JbXs_]?XzJ+f]Tś~- f|WY-7v[eB$&WK%uJW4}QMԃŎxYn֢DB)#WŅ.~ o/>."HB?*TL'3k 5f-~~\vf?Vd&U3_FĽ~# t/'~ńPOPL [#f`r1L7~0a0Vq><]?'aʛs\2]⻾ΡiHЅ秕G'h؉DTnoM(麼N}GObuV=k-/L.7KH* ڐywQXn4.^JEQLb#$NQC'ą6ٵij wi!6aAۈ{718d&-5'ǘ5ï~3?9Mqv\,v.k,2"> zÞG:'F栳@' X[ iP?)f/H X&ȉL|Y$NBsrH΃-+ ͠CsHs݌7@ڹ?S  b7#W1NjNkMrR!>( 6UU}}*z/0`z~a" Xt*Q&w{(Q7+u8"z(FD:m _ah.Q㉟ƀ; PY'FzM7%Soś +AgzYxG@htKģMG=k?Y7[b(t)E.r .P%|'D5ق,]cW6cyX^ 3{ZuF.sonpN[,RU-z 222]Dt6bS(&3n|u`M7 Of8)i M/kbΦ>7n>&"@fLe--J'{{~)PG!ٲO m՗7#ӲK [Ƕ9Wxـ 8OR2¾GʂbZDADZy#m2ܠgaWƗ{l.DiYm<*Gl慼_/;X?Qz%O&_ ]p& 9slNM:t؜iqf/f"|lnLth-P q"wt"=,D孢Q?@-?\qCnI($9~'h0B ā$S^6U$'ڙ xQ 'R 3SZ`}:־ %yۀڜIT!* [1nxZ,04 p|vʟGBm~E<WHϑ}rakv4F.6YCW׭ IXΫa>&`LNw$[);QҔD2#0/br 4IRI4%HꍄI =U+z-0I6D`nhЂa֫3iM>]h| h#) %/mIP×-$ܰIS&[,!;/[!='?3d5Ǵއ)w5t@o!̃x~PS#k|]Ø:D. ҙ -& r{y U2BO۾vĿX732/P~=?)_Ixy C:xYNښ#FAN~1V}6,rʎrNPL_LkU?-&~i5bOu$ܶF}gĸ[zxc&vP7#!;(Pr6Q 6MyMidZhܐ*fQz/`LͰՖwVWvE|CrAn%6Xs6Vt:fPͯr! ROsC/X?~o\,9ACmPe`۠)!a1Iz>{kMǬoƵ(30mf$90(֨ *p7X¼9:WXlI>e>=4ζ0Y CAeֈn1˃p,)ݰ||>MjwO؆Mw keL]wD_@Gڒz>+79:N.9)-HID7B .^ǕA֕pNNjltB.l'?&ח| Q!;K`;KE%YҟHuE*Qh6aI[ Dbgjka-b+Nq>w=qJ~i,t&ml({^au(|Gaz+Q#Mg_Fw9y01Lz {,ϒ[ \Aw*s'b[Pgfigt)2+T*ٱ6JMƯ-mT:` "},"ZU,;l=mQKXNGYΥ$f%miO^m`l:t\]}7DžX͊E#Дq`pc3;ZPZFvR9&[@8~ rմSN\yMy'Ev[unfG3]{S Q !M"+_v~[ml~yah+dJf[izlx[i~ڒ/֚5@*ʙ,@Y8a0LJR endstream endobj 350 0 obj << /Length1 1395 /Length2 6096 /Length3 0 /Length 7041 /Filter /FlateDecode >> stream xڍWT컧SQa] JL`1`t4 !tJJ7H! !q_9O?=9+9 p_H$ P5@" 0hEB O(&*֩h7]8 K IH@aH/G8B :tZpēwE@*\!)) %7jtHg=` BJ%DK <'yn> 0xB/=70" # jy`]`wpÁNgDP`= œPW@_]GB0_`WO8: ԕ `4?y#HOO/Ҡ/Y wsDS" [=V sp]hVs b HBR @P΂C~~h@#C /H7["8@;FOv<X~}>Y{M,Lyۤ GA~a1@HHJ >;[k蟌0G8@ s]GV 1=KM!e?h{r2+ b/$z#t轀9%օ8@Ӫ7C %B=ա(i:+1{B=3~!?l]wA?%I6AЫj0{ï/zhI /^N708@ 8D)*D?VetAB^z~_M@P{iLģ>k#r5s^9a+Jq(3_o4Gpil4hvgh[.~+P-`$A!ՙ T}wPz6eiUhG`]=+.ɏIʼfd^bU) aNv 'CZt3WCSo? np!6?Js1 bSkůKq+aI=XZAi~hOJTLdYGp{e}aKMT)/&z(X81{ѕO5ygwq|%1t< ҈=ոI{׈6F2QYT^k-*$WpO CP&ɸ>J򨞄l`sAYq 7q&%bs+UBA4nB^ atSV; ߨ,mQ7RV97Ou1[Uk9Kvɕtޏ5 %'&4,E߫r/N'+:o= L_ёc6nU%{c5q>^6]_Y65%ZyP,l#l~,m[-.ôioD d>pGgܚzڠ{AAStKl>Ny7OFIqxAx^4޷VM˳ڭ^l?gU>]\Ti=&F4J`;.Ya)_IP2L?`%N֯!)c奅y@/bV~^ώ,v[tFYYY>UNVLkV} 󦳓OάI>`n{~:9΃%]zm8儊][?̀9r iPS,Z/EtEHO*bT@{grW"{|wҰXyU{:JZ^K}[[Hڣ >}$"*\"׭1ƞN3̔^B5BIڣV9;̗%QI&[4K?rNpmcMJ<0DEKJ,ԍ=SZi ϺwgS0%KGC?祵_:/h%I\ eN'p:*sL M/{BEdO=Oosޛj{ā7f櫕(+=V*uo ͡2 ņ6\g%cݴL.C/mu>Ч`֟7V[gKe;X21a^;2_=pRL^ebQ* |m|J6KCWw笌\`f\%]En>xЖS>>Sus'xKVZVR'ԚM]5xK~Dt. VŊH#"NZϺ9*56,C6v= O:պ~zTۏyϴ_DIZj?5g #5+1 Z,Υ;ϓ9B A( !ƨU0I;Ytn6mu aeL #͆~&z٪߽{dʥ݃po&C5ܽ oxfbه"(L(n ]mh"#GE&5&ksMsForIqھ$-t2˾^V%'g]ؤVRr9F7o'x;lK}pgįdW~jɨD`;YZRpLGIS?w8$o{GZ[e41 CG2¤g}o+՛}2됻  nc򌬃l=5$ԉ&bZ,]X4' S=>U?a6~x:>_eM٘ YofxM\:tRUOVͭcȱ|Ch{9}pVx$}ӃzVD0ΉoRZ87.;fO=kJvjcRysJT@0h8,7:NFQ>e^wO<߅GFȴgU4Q?8)jΕm e'dTFv  h0S0ƫzMBմ=wcՌj ^7a,x}6TU4زsbon=== 6>(p%ew  euc\2έ®Boͨf_[v9Щ~${r^c΍npWCG{]zS<]asv^Ԗ&,SXVGIub2$sejV۰]X3 bWqci!Rܚ,_l?pmu5P%%e>fgxr ΥVTau2,Ѵlé<3QQCpE 0puZP+9?i>q"tmRk]U}# aǥ#c{ٛX/J&ǫ|(=KuN%jr=VqTn!D:$2hʕG@Sk2 (߶8ΜR-8|!K)F]l ksgsGUD",BW4/Lg I oh.rt\^ !ar& 0 \8FM4_y+B߾pkӘ(=1KXrL['D5F%i *usQfr@X+\y^$6"ׅ=G&Vol8fŃGXz6~[44aOvfxOy8 ^[Ow? s>K~UG9F98{dj*DR]Uޅ_ IP 0V4ke xgV8_5ei,$g`T8Lrc%٪=]Ivo)d D'p*m$dΣ$6۵b{^&W*8kmH+J*a>e - ΄G ? {p_vyI˿u%eQ΅X|3G}U^"1HQ|i&74}{H9>Ru.C+,MEp;߀$F JD*7I͟ m͹[ tc,;ҥH4]>2H^JO0aNRWwWhyRj쨨I;iֲrB%jPQ i^AF| g7C զ%wQZ~8U^S&6c8Sx2&2,`>G9K2"k G2&x Ԏ1ܟ8ef4(y1mYZwY"YAgof\-楶aU._C @֣x- fQR775͆RTn HV@#8:嘨@fwI #PdX3E.JT\;>ˁ 83rE0Jgj?˝UzFQ[ gm[_. MU ] }&Omղ6fz]zoÓ&e]l쨵~(rzі dˏeRfJ=[xZ#Í{ FS2{ΕE-9!oIW ȑ\[lo/'eNj$&:͛\3&H_( endstream endobj 352 0 obj << /Length1 1709 /Length2 9174 /Length3 0 /Length 10268 /Filter /FlateDecode >> stream xڍT6LtIt!HKKIKw HH -!")9{;L=wfSkhKZC-ArP% Vpqppqqca?z W70"/\d{XT# \\BB]2`k*@ aKC]v,LVowleZ@N,P+0L`0gaNNOOO '73 h@ k/5 'ob;jm xT8@Gw5PwA0VÀ + lCl6`G@]NcX@Z8A-<, Ij, sp;b+%BNN  W}2`W{sn lX`̩ exTa|\\\B@\~ yۀ0|,<@;% ` ,A`? ?λF\p}2y-k(TWQgMoHJ asq\\ǃ/?k'" Eϙ`s]͠}c韱7z?o2[oA-S{U^@%VYݝUY*Aǖf 0O?a } rCY>f^%~#A /,J$ľ&g$'֨֋7>mب)UYV\/$S?.m2K,Oy޲-*~'e챺1A,ΐР)Xp/s)%br]ͼZIJGjHBx?<#tΧhu8mmd5q喚O׽S1a&RNDB蘕f$wI(oVO,ԓ5f=oES>iMk{ձu*z(Ee|.7A9]:/NVaQD]x+QScJ:IHOEF7e94r_Db5+u#?HUmt0%Jx!0imxu1*Dl8}by*#F>L""hy&Bk؝ҙloe >lKY.^6,1; Q=Tlc$"cQzD,W;n}6Yo>yIy#Fİ(ʿl؜,>!K\(`avK3xR aZQx2#7XX(An(5=x! ߻4)ˣ*/7zAXIM=a-ϙU+;Cc6!8 Ŗ &R$T[M G w4mFx)Ffjr8mcG2/;c5Կ{nGDVR7(C׏7l;X%}_o"A5̆C(]H;,)d pG;( aD;"h/hZ/!c՚'syJ0oB lu(QnOU͖I>j.>͌t,.*J0\p(R!߮/هb!B04k~_A6rvoot>%kJ*xyp†;1{E$mס.nwSs\۹}ՠCp#V|hXvGe&o7Az Ç7a er!7B-*AS{iЖ u -mLky8.w"kЩD|VݙìoB 5 |2!V6vK& ?/Y+hh,*%q4E0M-ٱt+I !FVbkW%O]<^ 9;FF@FGC]ԎZ'Ѽ1f^fTtd(zFoP /n\=Zj2L4#l%Li{C>Q%ֺ08y.ZwKz`{3Yf" ȯj_Mv N\60ܖSka&tEGD8Pr8DdHj\J(YJs{t䤿 Ip<8`TUyt?''|_"QBX~Q{w<&O;z_F{w8%_EUR ưs*c&lC̣^KpGƊ*`)/Xn9U^ILSYخwkyW/sh]cOKfTse1m+ C0DzWaѱo>ڈU%M^zvR_6{;GO!xt{'y w钝wmGP رmmcc]CTqzVh}ln^ Ґ2{~=И ld~CIOgB1=R`w1=c*cMڇyfM)+on.]5k"n>Pc g:3^اm_?8{ʄ%>X:{l+)4o[Jt/F~JtJeV0*]<` 4]Q|cBs2fu+SyMYwzOLN4hRO,]] \HMF(m{H r+?kJY÷K42@s`R"YjAG]q΁ҎOS<4y;*ŖA);B!E{m"9a}A xpck4C *FDUkGF;| Y^آA6a֌ś9n*EFb.|"jjDpd^iXj gT \ξߺӄ' lscl)D[n<__)>(+P']dxd|+WVPi;x{}Xy1nlre.DaysYĊǁau^)7iKQ e0R@lW%F&i'dgUSI6YQ!5U4Ыa+W)mxCn&U ՜C=f: HNk?fI8%Ն~}?-r67X&h,x )qY/?P`©aC~#XmBd Ihgc}nԐZƅNhl|E)LU1 ٯlVų]{d~[;Մ#^DGܷGQ7[G/.t%{ihdm8൸ag.cMC$p3}SX4KӰfڀ/HB*3.ȸ I=)M0d@7ko[24:nR|Br,B@ 8:g,xqs6ܜ2_0Ulfԟh*c] lX sxIsPy]각h̀'̳(v#JėLjL٣7eGLx(-ebQi@E hp{.헰@q#E.kSGuuKD`V`sICOr&8[+ le5L5п~Z?ӧ2I/SI6Zۮ?N^lZNxk wCs[X cOl`4r} X_/JD]zڜ^ݬ݇SH.d(*E3K:ى|wl{fmEZlV*p {"z!c"SAU<5uԇ,!UtoKoGq(1&݉KajsۤQ7\k$zEev@Kf>`ۜ1G_|4CFoZbF MW%?hl;hxh3נ; ^i+:zsC:E;:3J T!}Rtl~_ǓSwT_ޟk?;VDDlX*Tew s+9d"%|1,F{”;V3cJRDqyr^> $_7׳<`1:ƀ/<Tݼ@|r:\O_{ lQiT[ٶ+'iCTE 7 w9eJY=R%'_rڴx߳Rxuhƥj5ƅٗѷ vl(U HyUt R } o9Ŭ!C P0H많+_0m?EAqT2\~o[EV(5YdyͦF4# 8A6~A"#oe%*>?E-ԤF\>=ד9-k$ n>"~goQ!eJfik.TN#S1Zu[uNї֔?m_8BTfjl*Lf;2?`O$ 6>~[ * 8/i:V&&tv9;p*([T;DkGnOckM *aI=4]s U{R:5HpLOQ' o]e}AQrݽЗ= /L^e;v |b{bYN}Xa^ZࡿO]Q}.mpzO&-w4Z{]^l;{@#W&^ FRr4ޖ0b޾sJN7<^r{e 1J|GUS$s'! wiԊ\4oѳ~#` T.[+%-Ը\_ISЧ`3E>]`RC7әZl:҇b-A斢)ZQYh0}d){攻+UwǙ$9蜈1mK3cu1 w)ÌxQ/cR%1 x%N#L_amYb{O9X?Ms:^KcK|C`3n@r=>186t`P\3ɸu1$G,:LjgN}z}23Lw[cT4bt QdEٵ(ɋRw4s~;׳O&@=ϟS[Yk)u=h"8?#.;! ^ \&Gg{aȦ u"oj~GRJ!Zl!>7ISUbA ;#~Ћ6-ogL<]v`@_u!-/l1X2z} I",fb$_DX򒤁K `Ѝӓ|N@Fc>r@KShMJW|iT~i>4˰j{$\K>U3:QaD-ꛋ[-cyFc[nq={!dIS &z5q$OH#7j"Gh9INGӑlۈTuYe]j6+QzWZ1q%-%44[X1Q~3 DQ7ɐL{b%)+mu\ymbO.S+QrK}{o.H+rw9wjl5 ?*~ -|P_f &?iW>H/6NeL!ךT7o TR'僗NpM.>7+C-14s"Pw*ZM#Fڌyxgd0DΡꝚ&qلҬQ5L`'kZUӱ=W}IY}8#8i F[y'ҹ#=I&e^Z֫|ΛCN#ppVZ$678|ѓŗݗ/V>Y't'g0M4VґےN:>~/ThHkV *dN|ʠD4H~wۇy[W㫴YOr8PC #G,U$!:g7ŎC:\}RlO0{ :v8 ;3g:Wlo\ZlHT o^}g9:@-##$VPro ̷Ԁ5gۙzXH }MO & ,zKYOdމ UPr Nص؟F'w4'EBBᇃq*$v$^qL;ŗyaS%(p ?DR\Ya ٯ#pmuwHF:atGtGR+R&s{:А;Wi-0nύ]{X VrE*mgM)k&+Q8Q W#s ;f$pBcLy`X M' aVv7 $FsbѾsBT=F8^@#m1Iۺ+MVr NM&"ܩFs3 )wVȞ +c:jb,7MܵW! e%f&lY&~H(v\a3]ҫ<7"E浫Q`"LЛ7 )X%kfd%7PcT 6Ņw+.WEB*6>{a0b[0\-?CjQn1?]V'ȋ$ɒ%V@KW n2=cDRO^3`tբقJl81u|+aOxyn*Z $UV}nv% >z|>x[aHJ7f3 J AɭInJOtqQyOPjT7!{> stream xڍT>HI4- ݝc !!] HH %4" 駿99>}y팕I׀WnQÐ|@  P+/⁀ab(x@@HBZp@ @_D@h0UutBsx@ @ tV\p0O GNH?7 pxCN} AƇ 0t" B5fVit!?Țx@Ot =A0_(ut5>HfrEQA^ +Eu@YNB)SuG"P_A^!Qgq]`po_#( {Ow~#'DMO s "@qQQ1v;w7w8d@? = JVS L}5;(\$եmBnU򢺮 #&KW2d4djw7-?1U$#J][D:> PY 4p}QC]2LU5ݔlbZ2^!P&77e-{u63J7JHD lWw[2WoȽ?饯PKM8#kS0H9Oʅ2uWNR){1^mHυ|!3!v(`HW_cr AY}Wכ m:E9iVu՟,{ 43;kɜ5lsEyߗZ@nɖhX e4=tEpF4f>N>_#U9'IkEG99#s?^, N}W7lfd a4bé?шvёtS-;gHXq W[}KLX?^/X;ìY^X]BSc=>̵:ۓG?:Ce;D{ڔcmO6X=bs&Cdiy^ /I"ej$ ͙H RX?ªC 3kXC7^chHǗsJTzWj^ӷCފN510j6~a>ȓz+Ś'^-&GN[&5y;4VN[ 8a?._fu%mc]ӲO4NW" *Je>4R`q?y{mbHyў|`S'>5# kVb [D'Z8'p̻Jajڈ"ߧdiIK^_K ަ+߿X5p0_{NOy\xrJK.h ~!g"ɯӹv8ۍgŪTԸi8КzITag4qPe4F~_ij]3hQ0 K}tKcnTnp#'BvzWHq" 4PĸV1gHeRCY7RåNE9aK ~&XCJwp?T07!mcQGaӔ/ ;ravF+EugGb鹎<&fFGd>E|x.^|SsUg~W(U?:yhP0P,4KIA}xbB4]{~L\h3αyO&kx9~Hp&# 㛋~:{Јitҍ4N`J~\fYiSJL?a.gtnzGbâ#s{bX80*: 1/@&zX"f_/ !|oaY+B+-ʎ% 2}%_5뻈qāÔQc\^>=Dr4.\znGw7RՂ"$ CabyfSdַd-}Wjg"7:b!N4=! sn'գͲ 6rBzzςXŕ;(pd{O1mD.J?;4 ?;&x)XuT՜mua=()Hvg` Bڈ qW&r )aRToayUŇſ6Fab\l6[VҦL2 _e]) MnT.>|r6e'({U?_tvshWm.rjVQ.[ ?ޚe.Zhrf*SدhDTWl/d]t3L5/Vq kCZ"} wgF/Z^e3[b쵳U3)TTZOfQ(DJɝWv08ruT ]7c/V!1[IޛV%!h)+R y.RoPo: \X\\X)0mE?;0L2eOFN ==rgtի1'nN3:ôS1lnfHR{`dzo4$`lY@F'(e碼~lbxv|D;r#S)FY02p^Y|cޖuɿK!ȆXi?sؕ殙9䨣A )r|}{Y!0'PM&,,+V*]MΧI٘Cȝ Ih{OȌ#MwNZs|\bYy-xZZ-MZ/vZ5Mކ)K݂8nާEFqYߌ.u;5##ͺ!bd2js=-mf R35xWۺo%mg)v?MJ4=0SHkToԷ6ʥ&}Ƣ\>SUqĘFw*\wUY3wp@> |HEcAש)H٢ Cmf?:DؐouG3WwlQJs]Xlaa/[Vlj 8NbBOO6{΂5MfVd*NKPKx1&?!4ݔČgLSnJħ&)SdX {<{nd]*5e{w*:6#D )+Uɵjp;ȚVΣȕ,Bf(AxnI~'(t: ғS^W#Wdz;SEһXg+z3@j)ЯOG>pu*Q+Q|q!ȃ`b͑&җ5baus;oӰ DT<7$Eeų4$e|P^xXOPT嵳|Y :Q zg5nկ>jBDg!&ڍ/yb=}pG>ܰ%[ |-HtR+)xCb(s$r߰&0:gf\/~uCxr8\y<;X[H,U̴]WzxvOMyWBe`3 tTp(]u1RZ\ }Ĵ=g2|"GF/浗j흗BQ9hifN!M3)Ĺpr[Ļ?叢J\9HQjOEgey~ w';ÔV j⭳.I-s4ا$t*ӄp 5{:ﲼ\S ܿ-ؾefyf+NtG R fph]2{ן:mM]epc"z,&Ջn*udKXRV? Z#g-iN)".j;&/ēo[τQշEUe}>'YPh:'R4q.E\(ncZ!>G5H0ǎE'N9𚘓&Wbp1,U⭽ Z%r#g3eXaޙF4!,u3sQA*nt=5ۿmBMBƵ]~n+Y~2L)hQd{[.ܶF&=*iAԏqp۩38ڌjmeaa,p_@4݌*>lXmM96?_j46g kQD'D_V}" ۉdP}ϯ ^V/gP I =C׮쑱fgW99]Bc4F:*ڻBh^[. nޓן/Ѻ"<`kD[i:9oe[vU=X*9:.޴paE wg:تngD< -8.a8/B;YMvn0b "L{O3γYhLݎ[?_7rh,U(skF_Ғo$]j -]ɗMq׷ش'iCqk̽?Θ[zze>ӓ;\YCUY x;&sxˈ=w:'ֺǘ#;גtltf :̫r:mX(wUx' 9˩h^-eS+'>f]2uUW, [VT5;~~ E{-69"%N̯&?:4 "b4Ben%o93 =:;R,ėZ =)pҘ&Ԅ{d@9So'3CRޠO0.Jg1eM~%7#e^n،'޺)f* 7fUT,ttR#c^t4(اbM?ruR봨'cr\~V䴹Eg|= \Jř/Ճ8k/Xz+42Hͨ`oV}+[==&T2莦PeYwzrYOƏĪBriZM݇ok'#E]p,ul%HTY?ѫ_n vej/czp@KG@8eHM­xigqkVb Ҹ- 2wZ%!:(zϽ8`bHoyF4J211Kwl)tȮu'-;EImt^0s4ziHX5FBCyyV$)%J[pnYCvRߪ1r!"Inf E[4+s#BD4 -TUkz!=80؈~ڕƘ_|Yd˹ DxR{STElN&+D7't+a7?VRU?c%72w']S/Hswz_ZX%V~qҦW^ Fr&=;:Y<\7K<fbaWnoY $n;YwoSfߦ]yqV*g1w,ܞ%=dzbFT&hů'.LDDH>ĽS)3)yb3^?! m.'܃zKܝgx2k|Fw;{,1;Ex?*ܼsWbn*3?@򝚂27Au_g~8$M6O{/7mXBu^"`|wZ3r>h b$Oڳ51ӏZK,~ƕRƐW̧Z:'䓘;=D"^d?Sc/{|aIlM 0WL~4Ock"uN9y/,us\|{?Z?x*C\1K}+.O4{P~LPM1eǗA/c[oD߀-HyunmZ)g-< Xk4fa9L>e8lSJᗤ4F6q޶tYvy}VE+ cmdJգY.XH"JM)3О5Y#A0Uws*sZ7edTYl*oO d/Uf4_q o_h :(Za?/ۨOhk`]3HTOMʋk ~ئS^sQVQzMPUd'e󏀊IDo~kXq gq*(|9+^vI?C6tfc#5-K8݁GJPɫ[]QS}`~w\륟ߨt#8~(ٞ]ROQ<ɻ)<1:!Hu Z#ƴ,1$Alup<:ǃjgkLu?oXF]qlmʅ%^/w A'b M'> stream xڍuT[.R ! )4H03303tw 4J AB$|ݻֽ]kwyp )Pv;($VH[H`1, 2A`].38@!eW*lj,.Nj{EĀ""R`0P ;A<0B1.Uŵ H J*( ԃ`᮸P E>*+ź {yy  'B`Fp  ޅ#&o1AÁ8  GbpH 5k(ܟ쟅_(A @{ G !H@ ˇxB.;\!;ʆ@x(ŀ0:ru#h8>¿OBY#0 `n¦H\KOJe$%epw (S ǁ hxv{P,@Sg^Zq>|C!]|| t FOE d$$""@))`e5 OE-= (n$w(@P,~D+U_xrn+OX,P8q ;[zpZXNHŅDA`v3@`Qz peéꌻU0DH( S}@ q$űO'S $ K0Qhcq@)w vE =0$āHï8k/{NýP$ *2ZK֘$h ,3?GݫY*`7 _DM3o{[̧i>w/;Y`(F%GXZ<6<[\)hŬZl]EliL؇ʹqlط Th -ӑ 8D‘Js<ÉϒUB۹t|*ɊHj_m܁^G9 %7S{TzLS  K}24(]y7wWWZ'ܐЇsLi,+J~8غC.a煋Haqy{rZ /C=ַ=眲'4|9O l \O#ݲ/?U2C3A@'BPWwѾUW CgǓ\*Y-|\7}LYСLUūBssxf+XP$ny-a уi>Sh6Ki0]G62ad6_}ꅕyrlQ_F<,"?-;YkT U+x h],=6z+W5Y/ъ@VU -maj힀MSVP$ ?1[Fɱ25K"Ʒ8`P\v1Pj$RD"Bk80|>C"N˓pD2EY5DNӴtOϕQv#}0A:NMS' K d"+#L{.3 OA `#5E%iZ-0qDֲ>}yz;7jx'q@8L_3Y1텭6i,\ @Y#)!qf vS@gqD;1I`UUpRb !A<D+S%A 8ȺqHϰH}c,yoϩI>|t+p=fwN֡c\>lqI]a kY"I/Q<-#mTd-4ei%`\yɔtf&Կ"ė` ڜwU2d]/}WJfR;J*bu$'fVw]E HE3s!<'XZOVt).xb[Fw\G82k*?i/2^8|@Za}d)D3A6yOj^L rtd {?=ʸXC`9#S^zN(e601ѝ}D:O&*9|\S|-1Oɮvk4W[`o:X)k-7:}< YntZUu;"yX^hs ?MUj,?US1: KEkS2+wL]rHWGCsq.g̵[Nx'1_xGu"/ϝbV])=-8"I젙 V6­&Ƶc cɡ^Ŋ7c蔙/(+;V I7f'm^- %uf^\co@u .h-SNs4#x )n:XwxO=}:Gtp܎WP,ur]_yZ2]rYʛ׾wؙg󌙉 }uC f^ ~ eJ]"T4`u)duբs3O8juUwm؎^f1û)]+fA"$Z]EG=Fae5ӿϋg^|yJ6`>Jʄ[h5L7pI}c2:z~<'i{\!2BaaC( -bs*:h=GiNLj%<Ԩ-U;܃ɇ>Q2!0c&1Xq 늰xUDOywƴC>#aɕG2+Q2X+< b"%Q:]!~pyK`zFoa畵lLFآ{9Ju zh n;K^m(F?dnl8pZjN5 K J$[p>j8\-9 Jp  T6=ms|/aSԡS튃!*^r6So- AbL޴3XŘ< m)bWAqR/=}jT ;_p\ ^Mņ 3Sij^ݙ;R:yrv{>C4|,oGG+cg;SĻ,.:,]m}Ăpjmg2 hpYgc_qFwҖl{"@\pLD"!Yo?n t%d9`lɦm}tq;?r@ţ=>C"ו-/'\a4]Og@41`P;ї>Գ_k*p _YI+UXi!W@騖>U_|/({z' S$F^O={.L6G?ҩ]/߹qJ|(!nu<9Y?i[2Z!’yRBL$M@hjuIǙXMCe*Iȍ*[tY{[1ĕHPӦLq#j O [&uv&0Y(Ŀ.Vкl)iX`!?YvtVo=ޡ b FIŵ!EsŀKku iyC%_;^[jl3u`}(p-v-xy)*#{{WS5mWQ:$!Ѥq60ORж*?G?%X󤪭_mg[ev) jUL`EƇ!qk[+sidGN$R\R_P}sz ;/bH)FЛF_h-NbgÏJZĤA=ío5J oy2fu=)Lr'g89k8/jty>4+\8+u8FƆ_ZcmLNHTFvVm,*3&%2CiZ+e-ye$tw>ix^%W-"6r"ڹԏ"QtH;De{nf.LiTzGߐl}5FUFJdiw]I#9Kw97y :s|ߧړpUу Ϥ&ʔKBy~TL!m;V(5{C ^[X~`TB: U:gkMʕuNrCu2B>k@VEDdl挻Aeխ%869h)- "9J㇩.D%Q :1&*:c%m?n)ÑvJbbjO 7 rQ>omXF\:z` )0kXb0]Nau_rn|^]ҬbJF ]p;,j3XXPfK=/eѰ!΁l)DWDݘH/cq]٥,L#^>k="\$IAqenl>L H"zWP$lh2x} Me:h#6N_2qWb~ cID(9msPWsmᷣb4ŹwdB3>t'MI0=үmOй'BSn[L\r-".*AD<9AV@n̔ڳ*.j4+7D'{ܓ@A~ ]7UWƵ 捫ҕ|kMew"卮DUuۜ, Ob6P)yl(g{T?++[m*l`Y WHϓ͗VDqa;% 21f7lZSmëkS_ͬ:o 6NlJ^RwћiǁM%xB5?u!Rn͈ 8x$M(IRks Y&P=Z pPF"0vLP0svÏ/,S'9mO0%ZĎh^-a R+֑WG[xH,&x(G + tWB:e}-zb۞ hKA"2>a;jvyh|H+&/do5ܾ$J! 6^jܼW_Ly])^ ;ʯ図1c39 }Z Ǯݔ!lҖqzG,e][8bzG+ v9тw*|:àPY1J9/qJ2Wgx? Vvkp=sV ?Xn<%NIw_}^#gEH&R ۿ/c7 ]#ډ< K7vZQ_89t`Tj`[nc.oOAdW3U\$R cP]sKΧ"5 ZC+ZxvGx><& 9 3Kp6hHQD"/g#}&Р(ԪS'.d4Ǫlٵ{q=(?bX؛9C[%M\ ٽK ծpj|nmJ[n*ٚUI9^sx!*y'YK'K[}zSn^u QA;͇EVmE{?9zw">*RtN]mL)5`)j"r4ڒԖSp-i5Ty`ҺIbSCTxr,rҸ]_J3NtD)!*[Hִ{i73li҉<,6ۿJdIܿqV#Dt,U0,jCv{hZz{[-8'-#7b&d#29NUQcդ_FMi=c1G |F)OON1  '3k\ "ޝ \KQtJ?_0Ru\F-鴕\[5KWG%CؚfAaсNI)\4ئlrIΥ+Nw MıE[ok\/b|QÉ+z'cK+wCF>f$Ǐx  ?Fk>йa> Vk}dzM43~By Ehޔ|r(?d endstream endobj 358 0 obj << /Length1 1889 /Length2 14004 /Length3 0 /Length 15172 /Filter /FlateDecode >> stream xڍPҀ  n 6.A ܃;WsĕlG,2R +I]@:8z8,aĮvv)Hm*BGfx988 gܚ^N?_kqrtX[^P|\ o ''l(*Yůxm?N>v?1%W)) arr89x|~w?)U_+*8X:*uSߝ07k? !/!_kߌd3eڃxg7l8N55* *@3"`笜oj Bm+׎RG;Sn +Fӌ,gf3o[ ?bCF$F mh+iWu=H.7ŻٿX H%=8@wR8Dt0M-C!54uDKF(Sa{\|;FAӪQ~`/Vj:7O7BLEQ ܼoJKKpEdQ{e'Bپa+*W N&k&gN ֫k]4GqHoh@}Aig<kGŒ:{8 #};~<"'Oy`o}'x>qWo8D.w;k] u(j>r޲!CL\[O`Q%{WC{3ʦ Y,|# eV{y4G߾"^yuz% PؚݓĊ6j=t1\uXE4xk f(4w`njfZY _$͛Xyd*|DtHL"?/a"y'*rJ͊\`)5ju5|=P lI0@F?jgW )5J3o?梼1;/ S7vU\^Gdo*'A]E?B=i}"RLJSnMLC=> ASʜi|YS13>*W\an=b4Y#@ &製݋>qmQJ-NZlcwd{ws'JSS2{foGy̗ZJOr'-ۀKf9#ך`` W0!"q2Wux?p'nHk|SÐ4Zhg}d w*c2I0-;o(L ˀoo)5VlB"&Pڟ9# hJQ~Vjy~^gX,M8o!Je4{(ТQ0̮;kQQ, _qGLpvLp)qUkT aу&=6ֱ̫-㚓-`-6Ѷ*T>w{4;1zb*Z}p9:*h{!FO*F_-gw=(M;:'A9tCO b!lx@Ne8Z00êVS+BrFjpBP ^,4oj@I|\-U儜KO0\ۅvg-^ 99C9Y8-nL_;_lx47 \F7U3(vR낹3N{}m K&Qd"GS0 rȒo{9rx(ݿ1QYꙹ`FO;\&#8ހr>݅2,:QiYu2$qT3A JnʔYsXE}3<пbG2{#Avᅴ 5ީj q( mjJD@FiOoƾ4VVXn*myQK8U!G5dO,-y5!?v>3|*vND7CA 1ro>tn]`Fupd/oRjE?V߸q+09 :"|>~uQ:4dkq b?q?,9e.] D7,k;|a!Gs9S:© %6 JѲp>]^52un䥊:BysZ>whtwy\_4('ߔxN5".[ !5E{D윌5U{s(ӹWK--5cCLQ1:GEE*3fIVgDD:֟=Dmc$'as3҃pCk?ܴ[=G>SU[բshPy7bzb4;z#q*9j &Lmd t,Zry| g@5l@ohsE*ApN|f;0$kg oN-oD|5~n >%2t /Îqu HJ-UG"b?%AüdbEUߕ}@}B[<)m3zn2%w}:;SE5d WzmZ`\~ hWrW{ Ke_~ouGLc높emc@Klfזli,.׳>_Ns /3+Kڱ,!_R7m-t1_yZe@ثףvCx6瓫 @զqb#͊9OYL?[SG@j]??nSh>C?#>44OpZ%NKPF s=GtG<<]b2G=vLYc1{w1 X;ųӑoe ڻT9]Ίp,7ٿK|w7zu۾_tkaz,S&ߟ#?nnKp86\42;s&B_JѾ_U~!J5!oaE+삈,qx+[|*^G ]oX=d3;u z'qn29QB!>OL%} = R,ăqއ[]5sC1 EvRXHK^'}b҈pV<XI5DLp%u&e=N%Uj+׶+1)o;EP˶"P{E5w8iBI_'b)3=s?@I^pE +:a%nĻL2-!cΖ_1bu% geȦ}U7-/愷SYӏ$lb# 3vV3vHp"5<$r/nx= qۄtP^T%&Zi:9O_aZAyy6ΑYntE𕾥}0ͯٵ2EcRBL]q ^'U ,sRPSM8f2rBS3AM2Jϒأ^Bu5Pyr ݬYAލbF"#Y:4,@)d5J bcʗ aq|8^n)]<ƸLKF S6=sik"+4=H+ӻ3C&Tw0As[PjnBm\*f}ʅ1\ ˨D$j/o+UEI( xP. ?'v UeT*uFf~ e=k).•h|]y5:_o 0N|,.qҊrǎO_yW,'z M&;"؈7K/ET a, 5jpU&ZǥOaQRR-_/geNHƠI jf%i" ?&:)!bR5ꖲilߟנͺFd=Il~7N>Q{JqAUč|'cD*<8O%n)!O|gx]""2-!?} n޻*/u:wM< O&x/6)I靊5g{9'3Y[Y&B-$nríLьvgR3#Q_ӗGAY]zřLm,VaYR^IGscmכu6hWfN/p6Q!gz;p2Yf,1 }L[-V"~: ?9G|mDZH$ sMۄp}2jLV44AK S[>*f8W6O@c.m[3/>iEk<̇" }g,/NzM1"c'-eQ:c47>wa.IrTvRYܤFߦ3HΒa'Mӄ^Ǟ<[I)7%Љzc6Cv1) U/u1i2a pvvuo|Wqdf<:%8.#jCWaSO4,]vY yG$lV v ;$%8P۸X`1𤬃ja1.N\gÎ&嘩 OEEXQm;=ICzC"e,ܜ*2s&C=A pSK,IT#[O][ƮֵRP4EgODHEbwiI$Ei8 o>0߆76+# ~>ǽ;# t%֩7"EFH/,9Hiy͞B: 25pӜwFx5a +QVީQZJ: 1ׅ8=չ ^c0CV0b}F}/ujYE|U\jZ.":Qf|MbȍV|cUO*U19H,-o<ą $x6:&B d$zȔl.p[bO`SA1wZ=8=-Xɺѕ}(2s[8eV\x}Oյak%H?;Z8 aM}h()kNb#'w"3Wy?_t:W\93Ev'Bq4qw![MlT9Rȥj%dm8x,J!! M@9t{ פ04 i6JZ!NQcƝ}OlNO&@55$Յns+gS]᠋5sm%G0Xc̻E^?Gvҭ0%U-ҕVQEd٢J2)aITScz I/I̒QƝl ',a.)Փ%CUix3.dr^ ]o>TNF\no=|AA_Jr`=h>RZx&~Rd ] d j-k9.4I\_UBxTϷ㙻:R'Ѱ8j*yOW.[WzOLv әeW'e ɄVޠ\J֢|Ǹw[l_hBj- =:(IB7}BZ29h@ VHO1y{M:$< oP󽾛h,@ &F1̈́:[Ho'#ⵣV}j'BAaDb^ae9{ڢm}GITj6A<l]+bY6;܄!&<vwJ{UmǶ& ; v.ݗbW _qn 8FAᗟH_pֹCcHrKEg:Z8}xN捎u?3G ՛dDxG&6!1NLknex u_3}ho g\7lNpx6u|(~ JI],K~7nL;nVQ 6khMn@QІc 4=?ܤ]}NRܚbΊ/1L֕<*(Xeֻ:O=h e.;s\hV /*QZ˺rRe9ȇzk*ϳBHgdԅbB9𬝘 迻. ;u?~7/]?4>-_|w"PΥ&Vs9:skIĽ> d@CEpV8nrWld>,&S+cJ4k ԤJO=+<7LaoBLWxq*\ 7AqtoQP D1=wQNn}:]AI?-ƕ"$I+<GK\x[}Ln259HOʂb೰U&[Ե3:+CՑh@޽8cfS }7| k<ǑRY :y?S7..|96]2j1YQKj:AC]$vmn5ޱHxL՗sCZItz*\\i)Ԍ(0|8&r@v+GG^oڻ([1t|:3J04 Re wp L!YU+9`TVo⍷ Q~C tRʁkY9]T?%8en4,oS׷Am a"-KW{1r a堞8oto+ߌś_}{"r2YBkׁLr +x80#*xH8~.MQV`[TF2u(n]G]z>s[ ۊM(CE^Xuh8/"QoWF$b 72>a{pWDDIf8:#xTћڏfИu>|L{pp?/uta.I04y-7uFi%| 5/<VI5nkrBR(` io]Λ.[u bǗ y9\J(`SI~>k8+[/f'1/[4! ˔TX=qG贫Ddmb;,ѥQi7qndހ+L j\[ z& 26b?$&Dz=#=E!3وvCSą[<&;eu_L&[/,:9V^_ٵ_] %_Hi).[όRA!TPl*.LGRlzd 3 IN fEW}TWDBuHS亝x"|K4:1~X+wu,m w-_~G% !EkA.Hj"n__9tg~rA,'O R%_ ѳ!zj&c?prb-s\]'yOPl1I:FXpV"go :HPYDXx--4NxDO D6 둢.K\ 9917L)3)[EҪjol>CGX>>dw[ -qC^o:R4p.P+O9SU%v6ҧo;c7jƲa 8&p.t3;d<T,yHN!BfPڸ_Jj/j{E Uo/,B΀/D*z4Fb(U!Q)i#ZVjoˆealAYGVn,u V;ݎRP^(q ( OB 6W տK !J!?_ 0H f70# jUE*\88ϩ]="rgLbUXY-X.)}KqX'G:S,sR ؼ}"߭R?n|[6$)3pח49=>LU] EK1btgǽ5eYѴ26BD#8.ǹjb!JlZW1+[G Uզ0{gٗpO~6,$떍}L<9>{!=CHGgOh tvMtk/lP,GF'F_8S `ݮ(`[:;On^:qI3"h%.Rwc`/â}\[is@LVHSOCT"W.2/_jZ=02vwcVIy4$z|fsI>*h3~wAgx@_bxrdbK\M{~UxyXV꽲i$`'ZA5L*2;y5u=mD*]akhd A<'. &'Ǥ8o:t$"Ҡ9>A˭Ţ2|d2E琓,T8C 9NQR/ 1'6`.B d"7VȅAƃt3 ,bV ơJK`ңG(DkE^B-OV),@X6Rc-.J1 g໽zuw2)|vSeJRDf]-{oeItH̝QmyT7Y @  I̽+@kީ};Qsif}M|˭>J]vuZxڹF:?d#8<,sK/RBXK0,#nhVܘIR(pqなAehOY%('iؖ`9V٦,Uɷ$&ũor7#FJ G)o1 k!vb>']5߁CznZ¤y3; o@^p'G:W\YEl9) -V':6w"(S1Zv73XF[ :0Jd$AY~2 Kπx.NgnOi>os3 4Y -A_P=] 奄CniIhdPQڹ\ؙL1H|m+jASGVcn-#xLJP aLŰUӰÎN{V/ %&K;"d>~Ą>^Fy/"ƮCyPu|#: Vs(za0[YPRQ޳b*#1gAw2PZKsEIQY{ {,j *[|=hNO8jgpGMuSk\ %ވ<؍ʮN?EpN-jde(*61Dm "RMM=z&+?vdzZ ^ -~ê;`^n_e0Q˃|„ DZzνXVVv{/qR v%*fp~}w <Y6lZAPao8,cXU=ǯic=^7? j#ԣ5Sm){j&;G7/B #vIbb5N1gc^2 a {k!΄Li'C,g1QۗY.:M-yD[&$COV.MSTȮQۄ<K]Z:v'_1c/f F$FrOȏk+=Z*˓ȷ~ 5kd7 zOw<b("OBǡ-I ^eY]|tl+ CDGmL+82̡݅c B=}\ixkBQ+NkPUܨ/;YՊwuB/d>)^>Tyf:\Cwo5Ә8x IL'9ۼ䇃fdE[COŋ%e9BT6&6ګNsT2fE[t/ Ȑso=#WkE5iw$׮C|# %M v 1~x{(ZnȊ͂dfl#.i_r_;]Y dM=~fg#O:oK*J1x.+,V_(^x.Ѵ.I8g:""C3*|]M:15%7J {ыaI4+, "U]%$q廛.)XgFjR`EESZ@/Ye&,]CˆGfSo]odl-yQ[w w!|b"Qy 5YS/phNLV~*V7x;5MJJ:Bj"9<?M0DjNT|ٞ?^ǕO Eܤl1C .ϸ\i-JC'~$6a68֖,dXz IǩuCqп6TzC/̓YI]̱a @%ƀ2&%ޕ5 qu" ZqO5h>/m.Y)B_OF)Q\9Qי%l4|x]Rh.֜; FPo72&Q}JFEsG@˗u[}k־=LB 'ag誌ԡߨcO&[u,c<ߎC\`JW S+ DS!q>I4C? &v endstream endobj 360 0 obj << /Length1 2671 /Length2 19026 /Length3 0 /Length 20560 /Filter /FlateDecode >> stream xڌP #%5.ܝ ݂ 7sOrzYݽ{=P(2%\Xybjj,ff6FffVx 5K@'gK{;?,ĜF. P j`app23Xykh 7r43dbN. ~PXxx>:Y\, F#%\P[8213:3; -],*@gW#[?1S,,P7sq7r@K3舫) bJv1=XYuY}`fi(J1xL24q7r312@RD`M,\-mʑ/72Kؙ\O h'?͵w/235+ SWv@il@"2s t=L,"PtdK `Jkiv6r\\*L-M\@sK;Ab0NfhLl<b&yyYqURW)*jf`08ظ<oo?O@on?KC_{4Կ_ }uoD66c74ͮ.͐5g偦W+b;s i,i4Ut1{bwK;_ @+gb SA[m2Jؙ؛z#''#Oxf|rpY@;j {Lv.#Pv3{'Z`K `Lb7I70IL I7b0}Ae#ob@ ]_ bW@|*I7F ]7kF >Hg/ba4r6u/1h,a eddb =Jf.l?*@q8@Lm@/'_[?鿐 (~ "&rwt^@f/t~{YY/럴 $ _*OP:hHfo5$8Ak~A##s524#$Нd;hO?Nuq8f?;?>;(;<';6$;HP]]gaQ}Ps9m-w8gЃo99[oZУbcV@EqqȇG? (2?trwp O^@PϽjO/ 4_Y7 鸯wg؟Ha^q BSK$eemWVx&-I Aef~ykpTaAMG=K"ѕY3{G@}NYY؏1%9 8. ho͡M$Ųyko~zXZTcu%!E=J^.-Xea "9ՑFfqZ'mo` CW5tw8E^¡3sw_`8.‰T-F`{ݭyרZK/<4wOUVywԙÜǁ 0)Q 3(Fnujxڍt{htFpW%?~gt:xe?/N}rw'hI*0Fk!2I8Ƭ@ΈO+\)'nZ-<.y>!~xcP^dJfNWx*r$xn^;'kKA-F-]~£‚$p,|"IXi^_H1{Щq,Z"t)DGFk${U2d"'U甂v,-'KZѫ%Kמ^ ԠI;ˢDko[#!hU}L1]b4x_@ܴnwr?72'2Gau@: c\l i2̛YۇS08OgjDEHYi'bX hiJ,Vw|jw/*Q] z.rPl!c~U ][_jf~khꗘl!ۯ+EQPЬH@Ҡ2Oe>g.Nc̰*ś ]QMzK*9&~v78~KAFScv6-y\wʒ"14۲Yis6 nߗzI}TbGlZsCvl];\^ߍNfXi"[2.FKxiQ ߝpDH Yu|[^48wgA}?b 0Γ ώZi|ll$:iˡXʻ,n~ ٽU@E-v56:5}Kt'Y Pj?ۖp.'vq4UJ|U2dzdvpzv0]Ҩ,,pC6}5d<%7xJݞ;r"w5/Paİf'SzC|؝d' qù?pTm6J8hWÑDr=L ~ᖅ>t/Zt݇H^goן -ZZP9Dl"S bi=UkLJ ;GvQrBsLJtyv~*1uGIGp vwRP0D-Cu7=OL0~RѶ:ߏv1ǚY~ڿ;Nv%4"6]gϮP?tɃk>/Xœl!p2HUpfI3l''M&Z +n#P2xGFk`# lCId*`/ W*# Ï`h] ,^#h!(`}`$zҬ{ apif3E#Q\n['szaSd|$)7/T!+`ܱ[Q#>smz9lݩPmYe> h9 z;a|~([vM`Y2u` *;FIS 6!^ּbt02xft{ Ͱ.m1579A62O+ˍlYɱD_3LU FW,10+oke tl }z  Nbhu^^ĎjoX[pqwkernjGWMcԻčI]5X6hL~JCO(a}ijRzMy>JiO&I k,759]j*wcB"6 kf$4F> 6jk> QE]yHjP+38 ݴI{?Cbx ?S tr-6h4\7tF}H,}vj Ģzj uE#Ԑvg* GW ½ ޴teq$SXFj^lƘi4BǮA,JAc/Uo =NꖰۂJIjkb/SKEiǝ@=r ϯ-rNHf͕T_`hdGSXYb ^&%OAR~˽_shy 4]=cg/a)# Av:bM"ǪܥZ-Xv_ѧw?溼*=%c~.hH^S!͈=jOTrCqիd Ct=u/Ye]YuݩhՕ zsF0\&MS~g \JKj,񬛥ڔLFK]qXt ˸d\ࢳ̤ez.ϩ[ _EZV@ީ)pDa 筠5띶qkuu=䗂(T6)5]қ\YSL<L&p< ?ql,^݇,u5R{y㶞7͙X+ -3OxJU V)'/" *=c?+< Hizsx}ƞOeYeJ \ӢuO(mkZk x 6-% ?O\ml5'lWWQ͸Iu/Հ-Js|F|vc8B馓mdd20O=]>!'F'L8jD%\֬Ua:cSђC{/X(HBrZ,gMzؓ#2졯1Wy.&Ɠ#| eeS4Uz -4PN%UOvwLZdkࣺ-j/v|?E}C!ȍbo4OlgFgSFMdYk椮s,xta^PE9SG{AGVksʁdZ0:Asw"*J0J֖wjIH[.J6qԼiu&(EW녠p_.5V7ēќ:ؗqL;zj80 Nڲ9f*t-&Jo5 _3mm2ITȝeRM꭭ owt\ޏ6v/9D ߕ^r"c=D\ tj^R+P3Jȫ0̚7+n,6sIf)`YD,5 ^O(RU+KS]R7%>Q8^3F /Àpj0PCVde't|ujvJNtG Ost"hC3Nw8)?L',:Aq9գz qzmߠ0olP:٘z K"L!dEښ9gqMC L\M`_'[Z(&Z8OÛh4`@ YF-/fI:|D$i,|M.={à.1BUSql"DP-#"YJ4Hٗ5[YOFs%k Z#Gc"1S7oh`^^" !/7ƮƄR6p+nip[)qyCO_lQ!5o\۲$ܢ>ـ0!BMa5-F˶ M0kv\K@l/^$#kFeZH;mZb=͙yKIXu͈Ψ#j-1 nh+b8vk7r*˻3fGo`3N#2ܼ/+WqC26 u#KL"^ ,vh}1ϑɷ̳NYbO:O$ ,r X ?XMɲdx~PfHA?m6жӕVaIjؙNhf+AUe[shۯc5ϚAaoK ?/7NDW[AHpA-E(0:@?9fe,}tf+3r]мE J!+R,R˰P@fȢdozjKNr0˸+X^7^6KncW|skĞXNGB! Dzએҋ0,̇cu 6 ά&s֔R)pu% :W~Q濝dT7ɰnr{}qQFje(Hߏm7JWv.3\*<5U>BQAX+$6񲉉)c 7t͇% {c<>ʏG5;s))b3E WE< c\s^?MqśpG /`Xrl(Q"!ӣ[i5xOe>P/} Fi 2 =ǤL*SH)vZg)@~,-ȋ7HI~(nFPƭSf4fN2k}o̤'XQ ;'y!GRӹ܉.%%&fӖ2ZNc\yiW+W@K`τfRƈ73@D Zl_A\5VxY鐈$MT0Z=0u?*=_pnOHh!Yu_ ;mpǖۋx7 2wiImffq b,xڴ',ےߚkQHGIob>%!n%^FӤYFQANV'0 ' |t3*4q Hw̋Ywժ-NX3|j35Y s'ҁ2تgN.^MY1nYTVVE}dc&Ls鵭 P\,1n,j9 rSyhv&qRCZTQ ȚI ,3~PKBzհfTNgq24ښϧ6GhEh{+n7+p G^j+;o-Idy%@f sբmuT?CFs j*cy#͚P:?6z- 6Jq!vlꯛX7@ɲ^JDR, [&"JTH{9v)8jc5/DC'R0TJ8oP_>+rLP< VQe}xUn- uܕߨn(-hcRpvnkR!vHn0 LOw`Vυ6Ybr\4D=aJZp[w:T+1*dvΛ}t~azWU M;-0` ֎lOd ׃:+$GUsm`Ly+G-%:tل` K)/wQ) ᄜtqWðh[r<}d/;m7mlbIh{s{zcQh(*T@Ciʫ /:.\B`L,kHձ h*2B- pf9ލ zܠS:$95Q&iy8=*Kn7NΊl禛 *(y懟+Ӫ= (NLB )ȑ/B|XZ},R}~.(_x".?vUYVY3iV/d,V6YAOL֒U y0?^\QG)0?%̿v9&l;M1o<6_׫GO~<Z& ~/SY+"WPk`Fz-b$tmөб/O7{/(~Wq'2&=]0l46 S=yi.pp/\Z֕ `Zߝ=h?0-xs!M T"<hkq@&wݚA|C,x+|Ba!XOo&j$ʾi{G}FP>js}:}a spdsG½q)'"d W"׵6TO aCUOZZGcQNv7Kbm14a_0X*ǸX`t9}TmP> P;e͘nyʼn?3jW(~\kTM3FU%/7<0.폰kMe+#ܐ,R<3kq}?.P7)=ƙk-YBÈj/K9x3N&B*R8[-H1gxCsõ^&ZoD+dL\-v1%h/~v$nx0*{86d$GW]S& M!G 0ffn2u)KN)zV=t< :T!~/\{EڭĎ?<|i.Rts[ܸ:^4Sr*n1>dXr_a)@z}fW*T~W_>kVǮAlOW}hЕhd?ִ%EmGNs dof/> }q80Ԥm6]$Ejk S2AWj'L&ǾY&Wl76ZSYGX)\XÞ* %XlnߨK25j0!p2åX0 ` ߇l/ώ̢ĖI|16Y<A幩#:9ogD[&30- I1S*[]I)K#ż~a\`aI; %/fD#>ixdBЩvpp6g"$?8 WkF`/?{| 1kl=f_JYiYt}t3cبW=,(3Wt wZֺp*M7T~08~$&%>n͢x h#독;Pe>2C;r iKߣ,Bܡݾ3N"hH،}PT<}ws$XHA@5n!тP%dQD=G4u4 U;f"=%O1(夐b;*8= "id8~zekZ١2Ba-y ){T[b'YU S؋0SpP8hHy|QC+uj$Ϭj'9l-A=ֵ+nۑ(s DZ0K$źcVIF55&/ JܬU~ n@7KN3kaHͥUP<~7DN7(QOLQWqm:ͣ]J#UЁLĬ KJge0$ON6ttI[H,DCD5w34$bx"cbf'sҒ$%x/+)X/cz'71[ccZ֖1Tcqvzzdg?#|B$#=T i1X-/>UHq>5h5:fΡ(\h5&;o3E0{^['-碳Sv4ꭳXvszsMK"Ḙ>˕/k*{ *`4o?9e:%^yE1d= {J[Nm]1!89(ڍ0=[앮I V9ZI+O[jm")Sս$d7_!s! q.Fs6I6<#b-бwwlL 5BIo*3)&|0YV..%UCTzDu$5 nfl;$e*ɗꗳ~޼i4#6ύfCR-'{DR:[D1x5}qO|p!}48;){BްoBN:ʝxoovoj3=jC\3^;j\@I&*<R{b H- ;+x!l1ۼ:YU{`94\F ᴯ_T9犣";sWܑyđ.å1?,A*IQ`ጎ5b / aQUڠΪo-"$bw$UFde]#+ xb2(UEryufoyޠuw,|x'oO/bJT1~2]dI2U2珿:Β[fZfRjT[i뼡`*I}s,i4PB-H˹+P<4&0>F撿䠋Yfi]~  P]]Mz曬ȎG|UëbeX3i9LQ/ڔ͹ީ(Kl!<ŭ-': Y3ƵrZc7h4$P0?ʊĦvqR=p%+atorOn HoN;jj21 WIQ%(*F+d(ȟA"gHJΕ١,iӿ@1ԖAQ5=})Q-M턬zoi,)w@U)\6D'fؘQ2l4-]f{| D3Nib]lR!%XwVP׍S=vwKgb`a1۟HWG^~ė;} Rcw3ԍ 'NetQOHl].;y*5fSJH0f~̏=[{?%Q=> :Bv;EɈjvR^z.1 FJf҇~إOaAiKl8m,%RwpQrPNndJ(^Fa?s+F݈CD97f Mz0R(5 G )qc].̍_!sldO*]uU +Xw(MZ&' GAs敶腭UJ3:BDl{CW8u`S:`| ,stW#]4F:R<|?ch~2=bB=[kC[R23E]ps v7阹Y>7D$$[wm Kǔx"Z͌ )Z:Ƴ◑ȭQY;Frr<{}=l75!؅#c Ƥul O:E9a@TlDv^׻YOd7nylSo_C:A5RQqR #՝qJ+($eQBV(6D_v=BPg%^ Cv-`R盽pB-]eBR3pԛz?]XOc, /Ok]sRn&b a\xNB(_]Wݰ`SM{үc<4^2QA$,aaL! AOu/cՅˣK`z?❠e( EpP: hF>uj' K{H::Wup-q%#f5sː `!7N0V͉,׈]'4jۂ18H3RYK *Ah"S7{ ƄeSKtڰ QGa0$Q@>~%!:(kCۊ#تՍNYPay6wkvO̭QÑtY M@BPD^T>ђNtP\f$* ^IQ~n R!oӃhhg'&R(¤H#оH"sN'A!5V,SP4;8n&ȆѠv֘S qj5T9|\N+ KOfCLր})ل -ABg>tV"O7J8J8㺉z-5xJр.qj$r9hFB>+ F SyRD(pgk[TQ䐆nGd6/1@7+fWD:ƃׯpK2{(Zǿ?7GLvx{:;j0zJX}׊q]x!xv>7N%\Iii T 350 ߀{q7[sjz]綝-`5%7d1)4n&cE)}Z%i M]XNb2)%iXFd ŹF<o/ vs1Hc:xȔq3hgHVwDe6+ŗ^w=*d_ɜ>!8A:C։$zub̶_sxߜ=|=fI6U=qOi_*eԯ8g4}:`aO3ŃF@4`z{8IYZQ~rMRc.3gމVz,O%}ߞ&q\d՟B.LE+yJ;zǿvd0 Aw2 X02ӭ\ԑ+5q 2%k<"@;T+3Z4T,d J;Rwh)Tc)nbZZ Î`'TWxzlV6饐>+Ogղ4+Ehz4Gs/vƎe<ꐈN9wT8ަTKifI 0j o+IL?1d;-VI eeM'Xӱcf€pwPxN "C. q9Jʠ9: B&gI5D\4hB ]6N70*oN8_w)o<\TTW匷Ǖ-XVau:}< `^ޫ0u)?Q<=YRj]u) ׭>(+UHACc^uhvO76'%p03D5x0$\)zŎxf!Za 9%Yzzw?Kv+S}YVLFsꫛ&̩齙¶6OլV D~Ƌtc/F־T|-'uZ:63y@C6tbP"vV6 1i]!l GzcGP8KnE^x=/C.HZV|Ӑ=SHLf|wFC0_ ZHy wݮ~BHB 6fQHP&ÈT ×]ZR1m/td:EHYǒ~19tCś\PjKlx,iPd E`"h8&TN}G1sM^7ulTw*!SCۥk0p (;c `*ygpdcߧc&dUe| 'YxCwK!i8W+](4-o`y̜ZsvВ0s9ĕ%X>Q(a# t2k>y'LPƒ.o) :0ro@HL1 ˈ@7DUgL|Zމ* z:I%ϣ(aFoOHD-!c rט)!΀V\WVcjqy f39+ 4\WHB4O '$t(ށ?^5bC=zH*'|)K zsC0(2x3o,6"Lr4T*D-*fN3P"B[۶>U34D- -wub bޱi۲uDr:#jVv<ڧjtK9!S%\ : JnM]B/km4eފ8cVjhl2J!3 ƈ~}Hx#3rP>4p轮ȲZzXЫR{Iy4ve@K`T;<ݶH f.%vJir vG\jӬ;W9 -28s WS+Kqޮ7Zv31߂"܍ɕq%/{ زU{eNy/B5*g2vTa@t؈S>IBHE%1vsbΫ\۬:§J]|]rDdpǹJWy$Uml] 85M\[̴IN 8R{d' ` jy|eL-\xӳ4AR􇳬r<{wAUm%sA@s{ɖyM~3?)4H=ZeSEj*eMfMOÌؔkJuxUv)Q'JdoPiWdžF>l( A#eݝN?n鯆 H-"zH8d1CK⿙݃EO Caڈm%OI h0" w@H endstream endobj 362 0 obj << /Length1 1479 /Length2 1976 /Length3 0 /Length 2907 /Filter /FlateDecode >> stream xڍT 8{Wb-!Oa0d%kq4;ygbL7[Wt+ݔ%v%Ku?VrC,)"P|ywsZ(  r !ػI@02$H--_Xs/<*@}AFќhbN `6fj@|=+!+u7lSNBl#J`-C9/ l!b"X | >ċ`2𠲡9j- gS :X0Bha@3b?GSΎ dd $cь b<;s=fл19肯;xpm: Io?].'rX3q,?T6!m PesP} BArvmE@Eb>]$w#!,l,8|x{ 71Tr0G5PE}s#7*Gc~dED5ʀ"gV M(0#53xk2x'H0xgHx /L20܈҅<*噕B3 ǍE 7۪ V%Kd=wX;rl(/ٶ)c+Hg$=H1_ҍLZ.vxMHz֭;F2;"M .mcNeCetJ ,|kђ 7m,+me8eT#;[q WrHNܨeG-hz^:q'{XݯHn KY L.Q"K.-{CS pR|Ž"ַbIx *h*;'iEwSzYUTm]'eE+EJdz;y*ˑ]wR<x^Xг.koRu`3&`. ,֤٤88Yg]vipb33!\~w=)fֳ|;g?S{Y>Gə'BF5f~ޕnb%",>v,"X_ F*n@{&K&uds[,"ë)x`FsRK±$ϣjnU@ݶUi?U;t<:SdIՋeR]/<0kݻԊcBu^NUDxfhXQhR|.C)m3Ujŭ]^mBU2R9tpѸ˔72_Lï474]>&%;?9[YN)mj9j,Tx,L(y䞬j;M'%c/Pn$n;fuDJ\_ ѥ+D  v5~3j# H!=Hsw(\5~ZmtA]ڴ)\Rه>QNwhΔඝ,^֦5Ay<6?/x|6x$Ǿ-e(cռǭN踶z5< J[;ȂI|,%Ɇ-a:^r >%`hԭ7B6gk]c7L*]5L5Y[y,ܬ[E+fUmp6.踶 endstream endobj 364 0 obj << /Length1 1352 /Length2 1096 /Length3 0 /Length 1930 /Filter /FlateDecode >> stream xڍS Tb[K [2 KD0CF0BXR(*ڢZA (Z-GmqJOQ+ŭoy?sw9/Y!Q0"8"*,E,#'9`p2qHKb )HRQ_!ORbZB$|IPq4``pҁHiH TqL VQ8)%x Q ,>):o. `@ 5B0Q NpsAЌEVQr& !`J$el{*B Ր`|:壓ƳҔ8Rcd6A9 :\gt;H)5i1B1.Kq 5kXs) T*H2~ qvقM',2gҔLn$"T VDF&. _d7^(p".[ MAeQSj g@=!'Gi!`Ly90(8RaAr^TgP>f+@:z]2E*_M,IEI Γ`Jr<<=`:PkO-5911~jFr `8E;q񸀩(v!A R07ozL#e8k^$19SJ٫c!"Ӕ#4bWYaL #qJfThZ e&:~63=S4$@4~g3i%;L&B8l8\ݣ}Go9_xX{ņ?(w,LiƗ Tpdc]Я6go>-.5MA\!둴T,^ n:D=xp'3JIҫkmjw;;9->ѽ9wXGU%V5u.ČJ)W^nZb{Oe%х[۲:k~3kmzwX?n@_K?oعS TAlb'a4=U$.;M?H[GC~-r;&8׎LgBnMNo=R`ܣ Bso 2+_:^1wnE9L4oI͔}-|Q#%yRϰ-~Zbɔ]0J3@3hC?D冫m?p W"'m͵qk-?x(#T _wͼ?p8;.XʥUVqt;铼CfW=ӓO-#/~,B+Vܔ>7 359YT27e_nK\j9wa9z I8ԛoeg=ǿh+.؆I08~cBJ59qj9ׄƻ\mϵYn ܼ^iq3]g.8,ZsAɱ_1.A=_t{CoT_@m?ӃBMD~lAHҶUt򙅋s\__/HZv5!Ҩגuҕ[bV~}Wi٢/ňOq}?Б> stream xmwuTk5R5t 30 2tJ ]t4 HJIy}}׻ַ~>g?g=k8X5'TD@DPX`a/",##PCAAh,  " !!=Q0W4ۉo`A`0 G>9>}G( ]g P3Zih5 P>`8 s"<g$ '8!_x EsF!=*u5!S5iiGeN("U? sBPH/ߴH?0Ax@}pACQ}$B Ŀ, C s@0o X oϽC!0s$?G􍍁f|-euCL  ? >lZ῾#e"Dbqq hBA 3˿ߋAfNrn!E|㣎f|"s#G6^WS|_0I(Jy85nᲘ%jڨ6Ϝ(ݭ*Us,k'_y5?u̴M{G>tFrAZX5TIfuYx*h6h'gg~ʧd(MK~ 2@4KZ*,bfIvjA:7"I쮿eW3}ݔ0`o~ϔiRm.*2ua-ɗ!FYicD'jz>+dDBKx|'V6_x_w'ȽiB&Jw'M* {b#"߼p7)T)M¹hkXw6=Y,* ׷]ٌq or>+'~\"&3P"><_{3z `<,G/oM >+f4h,h3Ʈ V=6dEMo1dnhe>/ȍrf SN`f]ȃ)%IFڪڕEi,n]t!T>sffVx]ͭ](pxu8^\Efa }0iOO nMl: 9]%iL #ǥdOxԓ4Vu|K* eOtn>ʿ1ډ6fWqiڄ︯OBٛn0?tZUc7$GdXP*=kDɠyBe/r-r8wlt9*[ /{#NI53~rݡ0&xͮ >،}*6qDg%ҿG@j3KC 'eԩ 6짹3 '0wτ-}0|KH)'QAɸ nGCK=vrȐ޷?6j `#i9Iݝ“0u ^iV)g=qAp-`j*ǔAoS5ѝۆ>F:!jkTOTwq7OS7KD]a =Hh"xS#%o~+#+R:иa T<.l3_|V{{4.9jV Q^C)}RWG͖ P$a6]mM_42TUjj͆m~KNT]16RR q->hlsFcs~ ~OAɳ<z*}oLsGKa[@h;U1o9Uxqeb~gf/^$@:W=CZ J";K 8 EAgzE.M/1!ݑmН=<2+gեrPɛQh4c|& Ͼ'|aׇeޤ/ZEԌYk>!wn?Zʡ9l e/2@g;?z2$铵ЦO4~C.iJؔrIkRDP4*PWw+TO8!CՓ$S&O,o]ULUh2v͐N9Ռs&вĭMhc&WwڌRlu'~p晻 1g2p˒>(+4v$ pie`"!\3okWɥUT|NS?j K&?Rf ߠIeS[b[}{\w_SG'!Q31~XWΪwqjV cOtg[}i*`Aw9nd!.b :pr3oX!S1Qyez1H1;ۗ3>NN+ᭆld 6Ufi YB3VMZⷀga%ڵwL^O88 xP̷w-7;kKj},cv&ub:qD{qӦ95"  \YH${#)s`AXKn6Kݝ;c804rdYA74MAѡQ]$AJ'ݸ!􄕝M[KXeI͉tE"Tr}~is :u<1x=CmVyn25:A7|%55@x=dǍH>`ϱvBA}csoTur>KmY0s0G\ K-o9evVb*>䢻pKrZAf,LF ݄IՖ4;S)!Q޼񣮍@X=ah>c`"](umX^A"1Y2%L@ z߯wMK'ԎP&+b QLK /pb1Kk^1aaO145gZS瞍Q:Lc7slT6 Ҁ,1k3;KY6PvŷJY,L] D^\}K*̍bWQp [GCYgm9U2sd% FO;P/w wo"6{^Bgʨ$e%XP<֦mx4;5 ɱJռHg?:S0k.O=Œ7&I} +1{]o}yHwwK: wlyzMtg؏jx6[݆)Qƾ5-JzVansf8Gfϥaos/Q=e}ւc1T1˨ ߏ1`hWg@FLuyn %T]|,J9? -fZY0$atӫMG7<MNX2 +t0jАUU@5%)r`%6.tY29=E/wlaE ӤY&(Zuj>Y"l_я 1b}Tϓ)Ks,И nUoDnJTl~H 7z2UaӬm'a^kn~Yz?#4n.E/zMGR^Od,JJZΊ؉C-ا H5wk?\sutVrlm ;gפj 8߅}@9 (]jG2Ucًq|*1YݾfdE5läkFZ{1mDɝWjs3Ud4f5rv_JJi ď/<7ewt$|x >n{Ł#٥ 2?Z_iy\q^(P'6Х{+a8sY|:0Lx@ p}l^4)dh>`6A<3]oVŊ}%+ӟ=y[0 ." 3M-IY)^߫G{|+q"IbYLpp @Z-^: %4d L߉mcדm*}r<KwZ*_{f=uF\e&G'WfE ;R(nkK=$J0}]BuU~ ἅuֵiU;r .COvIM=*GE+ xOW-n"~_{z ?7 :Oԍ>~ZMMف9H~+yo* ƒ0n;)o.B춬u^# 8P˶8':wDO*3~6U'gs)>hN.{4|~Nc0FVhՎh&NB MٻȚl.cg+U1C,44#'`Lk)u*T/MFeIu:i8HQV$ 'ށOI@eBEwK2G?Z}N!V5W{ٟrf(Cm%ɧ Q v o%5akeO(kR![{Ma`s4s~L鲲>YQmyq3F6˒>v?eoJ]kfdU5  `7&b]rBYOm_Kv_Y}~7fŖ'‘Y S69v2~hu"^nRSm]7ٔ|޵ *Օ?ڱyg&mb|u_&> ӣfDt6rW\{t9Iܐt̺u_Uo nbVsnG թ9 C0]_ !<=ۼ a:q1aa7 T{Ү(kF3 2J,B*Kn> 3䑆Z-ZSGFJS endstream endobj 368 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 327 0 obj << /Type /ObjStm /N 59 /First 517 /Length 3278 /Filter /FlateDecode >> stream xڵZYS~u oUNa9aK$/6 9vKX3f;ܪhVwkb) aD Gs.p+ÉZ@G&1$-x"5F DO*IS04Q.xQO4wwђh#aD{#ap'Fye814Xɀj% xb. 7'HJ3KIg΁85  % ^l#޵`ނ:{zFΘLx39S8A},r ,ps9ppǐ`K)Y 0` ,h#-0 p8&н/:e:WcA0 .bZuH+",̂˴R/e3=@A4,D6^J:bsx 'TEcACZ0Fb֩1x:LO~kı7Qw}ßHzhA%kdzaaS1L 9"g%dɓB?sTErV?/H-ZI/q\H; (D!a3zFEN8"^x n.}g2Dp$p"6dVd Sdӎ8:!HL=1 v֫ eQwC, Fb?Q B?,-`6@:屏ַ a ;Chp@+h t.Hhc\U*lEF=.sD1,h 9:}h=jǣݘ\GK@@ D Vc0h3.<:Lu>`+vckV'G#H`yAn_mXcGU¾zmWP%+"BZ5̀R (FTf"4-qJhk8{AtfA#ψF59 Rg_ }G(!T\~+ӆ)UL L4(.@?q>b&;~WN0Bg4-/a% o8SՠΓVbZ'1-&1TNpAX;x^Ʒ#s׷Pj% ͳ40,K%[g+(6,-sXXTKh9DSݥQ]bg{"^dU uR)ccӑ1V,{uT7<lƍuR>ZSgZY5HNv<̒T7ϫ؋x/~rxQΊH^Uj+T]qhP !DPƸ:.. T`7]*n;<8 v$3aK|5Tszh<,bBE.fTrujNTěl}+lT;<»ig@&C*Z"XRhB{4좪bQ]xn^eov?Z(iRQbkꩺ,NNv_GO(E~տ t*IL0K%χؙ=B <6s͸fe=y,u4 Z6KruكFwM: =/8]p4Ѭ;´Ry]O.A'pEK8y 7z n/FVWW!Os* I}]$;WULJY܀/N%;x2EB&=( >VӛIɃx}lnU{˳ol ڳ=_Aw6{wj/gwgٷZǕ9Ldx MYyBdŜdsof˸`E\/8s򼛷6XF_A~3޺vǘkBm(V+GY9);^:~:o|*6s{c/W1 db4#3yuV_.-b%ؖi!edzs$:* T;}#3ޯ. IHbx#s˱BGOxa#H,?Wn"6G9V#PoJ4YzOxsx$ĹYE_G׉Nz; &J.tI~xFLW!XS$;d xEj <992AFD4D6D3EEEADE035B7A135634DE4>] /Length 1021 /Filter /FlateDecode >> stream x%YhU:$ӤIӛI35s37I:k$4mjc " }hEAb) ZUP܊CA|pB/Ji,TEZc>l%%A-vDQNT JZ#FX}S&8,֚Jl" VZl&1ȁoGte>5(W)"ȃmiQq!QHV̒D@͔D *YCeZرem$6qm=Q {PuUDv⊶'ڸ7u׻%zU D#D4ʹJ>,N>*It=LtP%=D7_}D/l%m- ]ri>bvWgtP$ *Fl'v%FaRr1 Tf^ֳ@c1`}$AS! 01I>LLӒSi౩vNfHGn(%lj9Cy @8^^$'-"#^WY“9IS{1IZXt_W EC?G5:K$_KB^,gz!u.ڻVt|]5< ܽ6)9^ wF%NxB= N/x3BE5F*w&U1-im4sb]~Ws4# 'F׵TGAkV=礼;$A.>0u=jdRY"J+|/Jp} YICxAGx$..]݈6qKϩd =- Sm3ߏq;g9>ǯt@Ĉ8)%re!7(IE9ڭhbWk%[ZjG+J!~괢\߸(OPo' ]̓!1]Q1WJgEk_TTF1辝' endstream endobj startxref 405861 %%EOF rpart/inst/doc/longintro.Rnw0000644000176000001440000023722312270777377015713 0ustar ripleyusers\documentclass[11pt]{article} \usepackage[pdftex]{graphicx} \usepackage{Sweave} \usepackage{amsmath} \addtolength{\textwidth}{1in} \addtolength{\oddsidemargin}{-.5in} \setlength{\evensidemargin}{\oddsidemargin} \SweaveOpts{keep.source=TRUE, fig=FALSE} %\VignetteIndexEntry{Introduction to Rpart} %\VignetteDepends{rpart} %\VignetteDepends{survival} % Ross Ihaka suggestions \DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em} \DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em} \DefineVerbatimEnvironment{Scode}{Verbatim}{xleftmargin=2em} \fvset{listparameters={\setlength{\topsep}{0pt}}} \renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}} \SweaveOpts{engine=R,eps=FALSE,pdf=TRUE, width=7, height=4.5} \newcommand{\myfig}[1]{\resizebox{\textwidth}{!} {\includegraphics{#1.pdf}}} \def\tree{\texttt{tree}} \def\rpart{\texttt{rpart}} \def\splus{S-Plus} \newcommand{\Co}[1]{\texttt{#1}} \title {An Introduction to Recursive Partitioning\\ Using the RPART Routines} \author{Terry M. Therneau \\ Elizabeth J. Atkinson\\ Mayo Foundation } \date{\today} \begin{document} \maketitle \tableofcontents <>= options(continue = " ", width = 60) options(SweaveHooks=list(fig=function() par(mar = c(4.1, 4.1, 0.1, 1.1)))) pdf.options(pointsize = 10) par(xpd = NA) #stop clipping library(rpart) @ \section{Introduction} This document is a modification of a technical report from the Mayo Clinic Division of Biostatistics \cite{Therneau97}, which was itself an expansion of an earlier Stanford report \cite{Therneau83}. It is intended to give a short overview of the methods found in the {\rpart} routines, which implement many of the ideas found in the CART (Classification and Regression Trees) book and programs of Breiman, Friedman, Olshen and Stone \cite{Breiman83}. Because CART is the trademarked name of a particular software implementation of these ideas, and \emph{tree} has been used for the {\splus} routines of Clark and Pregibon~\cite{Clark92} a different acronym --- Recursive PARTitioning or rpart --- was chosen. It is somewhat humorous that this label ``rpart'' has now become more common than the original and more descriptive ``cart'', a testament to the influence of freely available software. The {\rpart} programs build classification or regression models of a very general structure using a two stage procedure; the resulting models can be represented as binary trees. An example is some preliminary data gathered at Stanford on revival of cardiac arrest patients by paramedics. The goal is to predict which patients can be successfully revived in the field on the basis of fourteen variables known at or near the time of paramedic arrival, e.g., sex, age, time from attack to first care, etc. Since some patients who are not revived on site are later successfully resuscitated at the hospital, early identification of these ``recalcitrant'' cases is of considerable clinical interest. \begin{figure} \begin{picture}(350, 160)(-40,0) \thicklines \put(120,160){\phantom{2}24 revived} \put(120,150){144 not revived} \put(150,130){\line( 2,-1){89}} \put(150,130){\line(-2,-1){89}} \put(50, 70){$X_1=1$} \put(50, 60){22 / 13} \put(210, 70){$X_1=$2, 3 or 4} \put(220, 60){2 / 131} \put(60, 54) {\line(-2,-1){45}} \put(60, 54) {\line( 2,-1){45}} \put(240, 54){\line( 2,-1){45}} \put(240, 54){\line(-2,-1){45}} \put( 5,10){$X_2=1$} \put( 5, 0){20 / 5} \put( 90,10){$X_2=$2 or 3} \put( 95, 0){2 / 8} \put(185,10){$X_3=$1} \put(185, 0){2 / 31} \put(270,10){$X_3=$2 or 3} \put(275, 0){0 / 100} \end{picture} \caption{Revival data} \label{revival} \end{figure} The resultant model separated the patients into four groups as shown in figure \ref{revival}, where \begin{tabbing} \qquad \qquad \= $X1 $ = \= initial heart rhythm \\ \> \> 1= VF/VT 2=EMD 3=Asystole 4=Other \\ \\ \> $X_2 $ = initial response to defibrillation \\ \> \>1=Improved 2=No change 3=Worse \\ \\ \> $X_3 $ = initial response to drugs \\ \> \> 1=Improved 2=No change 3=Worse \end{tabbing} The other 11 variables did not appear in the final model. This procedure seems to work especially well for variables such as $X_1 $ , where there is a definite ordering, but spacings are not necessarily equal. The tree is built by the following process: first the single variable is found which best splits the data into two groups (`best' will be defined later). The data is separated, and then this process is applied {\em separately} to each sub-group, and so on recursively until the subgroups either reach a minimum size (5 for this data) or until no improvement can be made. The resultant model is, with a certainty, too complex, and the question arises as it does with all stepwise procedures of when to stop. The second stage of the procedure consists of using cross-validation to trim back the full tree. In the medical example above the full tree had ten terminal regions. A cross validated estimate of risk was computed for a nested set of sub trees; this final model was that sub tree with the lowest estimate of risk. \section{Notation} The partitioning method can be applied to many different kinds of data. We will start by looking at the classification problem, which is one of the more instructive cases (but also has the most complex equations). The sample population consists of $n$ observations from $C$ classes. A given model will break these observations into $k$ terminal groups; to each of these groups is assigned a predicted class. In an actual application, most parameters will be estimated from the data, such estimates are given by $\approx$ formulae. \begin{quote} \begin{tabbing} $\pi_i $\qquad\qquad \=$i=1,2,...,C$ \qquad prior probabilities of each class \\ \\ $L(i,j)$ \> $i=1,2,...,C$ \quad Loss matrix for incorrectly classifying \\ \> an $i$ as a $j$. $L(i,i)\equiv 0 $ \\ \\ $A$ \>some node of the tree \\ \> Note that A represents both a set of individuals in \\ \> the sample data, and, via the tree that produced it, \\ \> a classification rule for future data. \\ \\ $\tau(x)$ \> true class of an observation $ x$, where $x$ is the \\ \> vector of predictor variables \\ \\ $\tau( A ) $ \> the class assigned to A, if A were to be taken as a \\ \> final node \\ \\ $n_i, \,n_A$ \> number of observations in the sample that are class $i$, \\ \> number of obs in node $A$ \\ \\ $P(A) $ \>probability of $A$ (for future observations) \\ \>$=\sum_{i=1}^C \pi_i \,P\{ x \in A \mid \tau( x) =i \}$ \\ \>$ \approx \sum_{i=1}^C \pi_i n_{iA} / n_i $ \\ \\ $p(i|A)$ \> $P\{ \tau( x) =i \mid x \in A \} $ (for future observations) \\ \>$= \pi_i P \{ x \in A\mid\tau( x)=i\} /P \{ x \in A\} $ \\ \>$ \approx \pi_i (n_{iA} / n_i) /\sum \pi_i (n_{iA} / n_i$ )\\ \\ $R(A) $ \>risk of $A$ \\ \> $= \sum_{i=1}^C p(i|A) L(i, \tau(A)) $ \\ \> where $\tau(A) $ is chosen to minimize this risk \\ \\ $R(T)$ \>risk of a model (or tree) T \\ \>$ =\sum_{j=1}^k P(A_j) R(A_j) $ \\ \> where $A_j $ are the terminal nodes of the tree \\ \end{tabbing} \end{quote} If $L(i,j)=1$ for all $i \ne j$, and we set the prior probabilities $\pi$ equal to the observed class frequencies in the sample then $p(i|A)= n_{iA}/n_A$ and $R(T)$ is the proportion misclassified. \section{Building the tree} \subsection{Splitting criteria} If we split a node $A$ into two sons $A_L $ and $A_R $ (left and right sons), we will have $$ P(A_L ) r(A_L )+ P(A_R ) r(A_R ) \le P(A) r(A) $$ (this is proven in \cite{Breiman83}). Using this, one obvious way to build a tree is to choose that split which maximizes $\Delta r$, the decrease in risk. There are defects with this, however, as the following example shows: \begin{quote} Suppose losses are equal and that the data is 80\% class 1's, and that some trial split results in $A_L $ being 54\% class 1's and $A_R $ being 100\% class 1's. Since the minimum risk prediction for both the left and right son is $\tau (A_L ) = \tau (A_R ) =1$, this split will have $ \Delta r=0$, yet scientifically this is a very informative division of the sample. In real data with such a majority, the first few splits very often can do no better than this. \end{quote} A more serious defect is that the risk reduction is essentially linear. If there were two competing splits, one separating the data into groups of 85\% and 50\% purity respectively, and the other into 70\%-70\%, we would usually prefer the former, if for no other reason than because it better sets things up for the next splits. One way around both of these problems is to use look-ahead rules; but these are computationally very expensive. Instead {\rpart} uses one of several measures of impurity, or diversity, of a node. Let $f$ be some impurity function and define the impurity of a node A as $$ I(A)= \sum_{i=1}^C f(p_{iA} ) $$ where $p_{iA} $ is the proportion of those in $A$ that belong to class $i$ for future samples. Since we would like $I(A)$ =0 when $A$ is pure, $f$ must be concave with $f(0)=f(1)=0$. Two candidates for $f$ are the information index $f(p)=-p\log(p)$ and the Gini index $f(p)=p(1-p)$. We then use that split with maximal impurity reduction $$ \Delta I =p(A)I(A)-p(A_L )I(A_L )-p(A_R )I(A_R ) $$ The two impurity functions are plotted in figure (\ref{ginip}), along with a rescaled version of the Gini measure. For the two class problem the measures differ only slightly, and will nearly always choose the same split point. \begin{figure} \myfig{longintro-impurity} \caption{Comparison of Gini and Information impurity for two groups.} \label{ginip} \end{figure} <>= ptemp <- seq(0, 1, length = 101)[2:100] gini <- 2* ptemp *(1-ptemp) inform <- -(ptemp*log(ptemp) + (1-ptemp)*log(1-ptemp)) sgini <- gini *max(inform)/max(gini) matplot(ptemp, cbind(gini, inform, sgini), type = 'l', lty = 1:3, xlab = "P", ylab = "Impurity", col = 1) legend(.3, .2, c("Gini", "Information", "rescaled Gini"), lty = 1:3, col = 1, bty = 'n') @ Another convex criteria not quite of the above class is twoing for which $$ I(A)=\min_{C_1C_2} [f(p_{C_1} )+f(p_{C_2} )] $$ where $C_1 $,$C_2 $ is some partition of the $C$ classes into two disjoint sets. If $C=2$ twoing is equivalent to the usual impurity index for $f$. Surprisingly, twoing can be calculated almost as efficiently as the usual impurity index. One potential advantage of twoing is that the output may give the user additional insight concerning the structure of the data. It can be viewed as the partition of $C$ into two superclasses which are in some sense the most dissimilar for those observations in $A$. For certain problems there may be a natural ordering of the response categories (e.g. level of education), in which case ordered twoing can be naturally defined, by restricting $C_1$ to be an interval $[1,2,\ldots,k]$ of classes. Twoing is not part of {\rpart}. \subsection{Incorporating losses} One salutatory aspect of the risk reduction criteria not found in the impurity measures is inclusion of the loss function. Two different ways of extending the impurity criteria to also include losses are implemented in CART, the generalized Gini index and altered priors. The {\rpart} software implements only the altered priors method. \subsubsection{Generalized Gini index} The Gini index has the following interesting interpretation. Suppose an object is selected at random from one of C classes according to the probabilities $(p_1 ,p_2 ,...,p_C ) $ and is randomly assigned to a class using the same distribution. The probability of misclassification is $$ \sum_ i \sum_ {j \ne i} p_i p_j = \sum_ i \sum_ j p_i p_j - \sum_ i p_i^2 = \sum_ i 1- p_i^2 = \hbox{Gini index for $p$} $$ Let $L(i,j)$ be the loss of assigning class $j$ to an object which actually belongs to class $i$. The expected cost of misclassification is $\sum \sum L(i,j)p_i p_j $. This suggests defining a {\em generalized Gini} index of impurity by $$ G( p) = \sum_ i \sum_ j L(i,j)p_i p_j $$ The corresponding splitting criterion appears to be promising for applications involving variable misclassification costs. But there are several reasonable objections to it. First, $G( p) $ is not necessarily a concave function of $ p$, which was the motivating factor behind impurity measures. More seriously, $G$ symmetrizes the loss matrix before using it. To see this note that $$ G( p) = (1/2) \sum \sum [L(i,j)+L(j,i)] \, p_i p_j $$ In particular, for two-class problems, $G$ in effect ignores the loss matrix. \subsubsection{Altered priors} Remember the definition of $R(A)$ \begin{eqnarray*} R(A) &\equiv& \sum_{i=1}^C p_{iA}L(i, \tau (A)) \\ &=& \sum_{i=1}^C \pi_i L(i, \tau (A)) (n_{iA} / n_i )( n / n_A ) \end{eqnarray*} Assume there exists $\tilde \pi $ and $\tilde L $ be such that $$ \tilde \pi_i \tilde L (i,j) = \pi_i L(i,j)\qquad \forall i,j \in C $$ Then $R(A)$ is unchanged under the new losses and priors. If $\tilde L$ is proportional to the zero-one loss matrix then the priors $\tilde \pi$ should be used in the splitting criteria. This is possible only if $L$ is of the form $$ L(i,j) = \left\{ \begin{array}{ll} L_i & i \ne j \\ 0 & i=j \end{array} \right . $$ in which case $$ \tilde \pi_i = \frac{\pi_i L_i } { \sum_j \pi_j L_j } $$ This is always possible when $C=2$, and hence altered priors are exact for the two class problem. For arbitrary loss matrix of dimension $C> 2$, {\rpart} uses the above formula with $L_i = \sum_ j L(i,j)$. A second justification for altered priors is this. An impurity index $I(A) = \sum f(p_i )$ has its maximum at $p_1= p_2 =\ldots = p_C = 1/C$. If a problem had, for instance, a misclassification loss for class 1 which was twice the loss for a class 2 or 3 observation, one would wish I(A) to have its maximum at $p_1 =$1/5, $p_2 = p_3 =$2/5, since this is the worst possible set of proportions on which to decide a node's class. The altered priors technique does exactly this, by shifting the $p_i $. Two final notes \begin{itemize} \item When altered priors are used, they affect only the choice of split. The ordinary losses and priors are used to compute the risk of the node. The altered priors simply help the impurity rule choose splits that are likely to be ``good'' in terms of the risk. \item The argument for altered priors is valid for both the Gini and information splitting rules. \end{itemize} \subsection{Example: Stage C prostate cancer (\Co{class} method)} \begin{figure} \myfig{longintro-gini1} \caption{Classification tree for the Stage C data} \label{fgini1} \end{figure} This first example is based on a data set of 146 stage C prostate cancer patients \cite{Nativ88}. The main clinical endpoint of interest is whether the disease recurs after initial surgical removal of the prostate, and the time interval to that progression (if any). The endpoint in this example is \Co{status}, which takes on the value 1 if the disease has progressed and 0 if not. Later we'll analyze the data using the \Co{exp} method, which will take into account time to progression. A short description of each of the variables is listed below. The main predictor variable of interest in this study was DNA ploidy, as determined by flow cytometry. For diploid and tetraploid tumors, the flow cytometry method was also able to estimate the percent of tumor cells in a $G_2$ (growth) stage of their cell cycle; $G_2$\% is systematically missing for most aneuploid tumors. The variables in the data set are \begin{center} \begin{tabular}{ll} pgtime & time to progression, or last follow-up free of progression \\ pgstat & status at last follow-up (1=progressed, 0=censored)\\ age & age at diagnosis \\ eet & early endocrine therapy (1=no, 0=yes) \\ ploidy & diploid/tetraploid/aneuploid DNA pattern \\ g2 & \% of cells in $G_2$ phase \\ grade & tumor grade (1-4) \\ gleason & Gleason grade (3-10) \\ \end{tabular} \end{center} The model is fit by using the {\rpart} function. The first argument of the function is a model formula, with the $\sim$ symbol standing for ``is modeled as''. The \Co{print} function gives an abbreviated output, as for other S models. The \Co{plot} and \Co{text} command plot the tree and then label the plot, the result is shown in figure \ref{fgini1}. <>= progstat <- factor(stagec$pgstat, levels = 0:1, labels = c("No", "Prog")) cfit <- rpart(progstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, method = 'class') print(cfit) par(mar = rep(0.1, 4)) plot(cfit) text(cfit) @ \begin{itemize} \item The creation of a labeled factor variable as the response improves the labeling of the printout. \item We have explicitly directed the routine to treat \Co{progstat} as a categorical variable by asking for \Co{method='class'}. (Since \Co{progstat} is a factor this would have been the default choice). Since no optional classification parameters are specified the routine will use the Gini rule for splitting, prior probabilities that are proportional to the observed data frequencies, and 0/1 losses. \item The child nodes of node $x$ are always $2x$ and $2x+1$, to help in navigating the printout (compare the printout to figure \ref{fgini1}). \item Other items in the list are the definition of the split used to create a node, the number of subjects at the node, the loss or error at the node (for this example, with proportional priors and unit losses this will be the number misclassified), and the predicted class for the node. \item * indicates that the node is terminal. \item Grades 1 and 2 go to the left, grades 3 and 4 go to the right. The tree is arranged so that the branches with the largest ``average class'' go to the right. \end{itemize} \subsection{Variable importance} The long form of the printout for the stage C data, obtained with the summary function, contains further information on the surrogates. The \texttt{cp} option of the summary function instructs it to prune the printout, but it does not prune the tree. <>= @ For each node up to 5 surrogate splits (default) will be printed, but only those whose utility is greater than the baseline ``go with the majority'' surrogate. The first surrogate for the first split is based on the following table: <<>>= temp <- with(stagec, table(cut(grade, c(0, 2.5, 4)), cut(gleason, c(2, 5.5, 10)), exclude = NULL)) temp @ The surrogate sends \Sexpr{sum(diag(temp))} of the \Sexpr{sum(temp)} observations the correct direction for an agreement of \Sexpr{round(sum(diag(temp))/sum(temp), 3)}. The majority rule gets \Sexpr{zz <-max(cfit$frame$n[2:3]); zz} correct, and the adjusted agreement is (\Sexpr{sum(diag(temp))} - \Sexpr{zz})/ (\Sexpr{sum(temp)} - \Sexpr{zz}). A variable may appear in the tree many times, either as a primary or a surrogate variable. An overall measure of variable importance is the sum of the goodness of split measures for each split for which it was the primary variable, plus goodness * (adjusted agreement) for all splits in which it was a surrogate. In the printout these are scaled to sum to 100 and the rounded values are shown, omitting any variable whose proportion is less than 1\%. Imagine two variables which were essentially duplicates of each other; if we did not count surrogates they would split the importance with neither showing up as strongly as it should. \section{Pruning the tree} \subsection{Definitions} We have built a complete tree, possibly quite large and/or complex, and must now decide how much of that model to retain. In stepwise regression, for instance, this issue is addressed sequentially and the fit is stopped when the F test fails to achieve some level $\alpha $. Let $T_1$, $T_2$,....,$T_k$ be the terminal nodes of a tree T. Define \begin{quote} $|T|$ = number of terminal nodes \\ risk of $T$ = $R(T)$ = $\sum_{i=1}^k P(T_i )R(T_i )$ \end{quote} In comparison to regression, $|T|$ is analogous to the degrees of freedom and $R(T)$ to the residual sum of squares. Now let $\alpha$ be some number between 0 and $\infty$ which measures the 'cost' of adding another variable to the model; $\alpha$ will be called a complexity parameter. Let $R(T_0)$ be the risk for the zero split tree. Define $$ R_\alpha (T) =R(T) + \alpha |T| \label{cp1} $$ to be the cost for the tree, and define $T_\alpha $ to be that sub tree of the full model which has minimal cost. Obviously $T_0 $ = the full model and $T_\infty $ = the model with no splits at all. The following results are shown in \cite{Breiman83}. \begin{enumerate} \item If $T_1 $ and $T_2 $ are sub trees of $T$ with $R_\alpha (T_1 )= R_\alpha (T_2 ) $, then either $T_1 $ is a sub tree of $T_2 $ or $T_2 $ is a sub tree of $T_1 $; hence either $|T_1| < |T_2|$ or $|T_2| < |T_1|$. \item If $\alpha > \beta$ then either $T_\alpha = T_\beta $ or $T_\alpha $ is a strict sub tree of $T_\beta $. \item Given some set of numbers $\alpha_1 ,\alpha_2 ,\ldots,\alpha_m $; both $T_{\alpha_1} ,\ldots,T_{\alpha_m} $ and $R(T_{\alpha_1} )$, $\ldots$, $R(T_{\alpha_m} )$ can be computed efficiently. \end{enumerate} Using the first result, we can uniquely define $T_\alpha$ as the smallest tree $T$ for which $R_\alpha (T) $ is minimized. Since any sequence of nested trees based on $T$ has at most $|T|$ members, result 2 implies that all possible values of $\alpha$ can be grouped into $m$ intervals, $m \le |T| $ \begin{eqnarray*} I_1 &=& [0, \alpha_1 ] \\ I_2 &=& ( \alpha_1 , \alpha_2 ] \\ \vdots \\ I_m &=& ( \alpha_{m-1} , \infty] \end{eqnarray*} where all $\alpha \in I_i $ share the same minimizing sub tree. \subsection{Cross-validation} Cross-validation is used to choose a best value for $\alpha$ by the following steps: \begin{enumerate} \item \begin{tabbing} \= Fit the full model on the data set \\ \> compute $I_1 ,I_2,...,I_m$ \\ \> set \= $\beta_1=0 $ \\ \> \> $\beta_2=\sqrt {\alpha_1 \alpha_2 } $ \\ \> \> $\beta_3=\sqrt {\alpha_2 \alpha_3 } $ \\ \> \> $\vdots $ \\ \> \> $\beta_{m-1} = \sqrt {\alpha_{m-2} \alpha_{m-1} } $ \\ \> \> $\beta_m=\infty$ \\ \> each $\beta_i $ is a `typical value' for its $I_i $ \\ \end{tabbing} \item Divide the data set into $s$ groups $G_1 ,G_2 ,...,G_s $ each of size $s/n$, and for each group separately: \begin{itemize} \item fit a full model on the data set `everyone except $G_i $' and determine $T_{\beta_1} , T_{\beta_2} ,...,T_{\beta_m} $ for this reduced data set, \item compute the predicted class for each observation in $G_i$, under each of the models $T_{\beta_j}$ for $1 \le j \le m$, \item from this compute the risk for each subject. \end{itemize} \item Sum over the $G_i $ to get an estimate of risk for each $\beta_j $. For that $\beta$ (complexity parameter) with smallest risk compute $T_\beta $ for the full data set, this is chosen as the best trimmed tree. \end{enumerate} In actual practice, we may use instead the 1-SE rule. A plot of $\beta$ versus risk often has an initial sharp drop followed by a relatively flat plateau and then a slow rise. The choice of $\beta$ among those models on the plateau can be essentially random. To avoid this, both an estimate of the risk and its standard error are computed during the cross-validation. Any risk within one standard error of the achieved minimum is marked as being equivalent to the minimum (i.e. considered to be part of the flat plateau). Then the simplest model, among all those ``tied'' on the plateau, is chosen. In the usual definition of cross-validation we would have taken $s=n$ above, i.e., each of the $G_i $ would contain exactly one observation, but for moderate $n$ this is computationally prohibitive. A value of $s = 10$ has been found to be sufficient, but users can vary this if they wish. In Monte-Carlo trials, this method of pruning has proven very reliable for screening out `pure noise' variables in the data set. \subsection{Example: The Stochastic Digit Recognition Problem} This example is found in section 2.6 of \cite{Breiman83}, and used as a running example throughout much of their book. Consider the segments of an unreliable digital readout \begin{center} \begin{picture}(350,160)(-100,0) \put(27,120){1} \put(10,115){\line(1,0){40}} \put(10, 75){\line(1,0){40}} \put(10, 35){\line(1,0){40}} \put(10, 35){\line(0,1){80}} \put(50, 35){\line(0,1){80}} \put(27, 23){7} \put(27, 80){4} \put(0 , 50){5} \put(0, 90){2} \put(60, 90){3} \put(60, 50){6} \end{picture} \end{center} where each light is correct with probability 0.9, e.g., if the true digit is a 2, the lights 1, 3, 4, 5, and 7 are on with probability 0.9 and lights 2 and 6 are on with probability 0.1. Construct test data where $Y\in \{0,1,...,9\}$, each with proportion 1/10 and the $X_i$, $i=1,\ldots,7$ are i.i.d. Bernoulli variables with parameter depending on Y. $X_8 - X_{24} $ are generated as i.i.d Bernoulli $P\{X_i =1\} =.5 $, and are independent of Y. They correspond to embedding the readout in a larger rectangle of random lights. \begin{figure} \myfig{longintro-dig1} \caption{Optimally pruned tree for the stochastic digit recognition data} \label{figdig} \end{figure} A sample of size 200 was generated accordingly and the procedure applied using the Gini index (see 3.2.1) to build the tree. The S code to compute the simulated data and the fit are shown below. <>= set.seed(1953) # An auspicious year n <- 200 y <- rep(0:9, length = 200) temp <- c(1,1,1,0,1,1,1, 0,0,1,0,0,1,0, 1,0,1,1,1,0,1, 1,0,1,1,0,1,1, 0,1,1,1,0,1,0, 1,1,0,1,0,1,1, 0,1,0,1,1,1,1, 1,0,1,0,0,1,0, 1,1,1,1,1,1,1, 1,1,1,1,0,1,0) lights <- matrix(temp, 10, 7, byrow = TRUE) # The true light pattern 0-9 temp1 <- matrix(rbinom(n*7, 1, 0.9), n, 7) # Noisy lights temp1 <- ifelse(lights[y+1, ] == 1, temp1, 1-temp1) temp2 <- matrix(rbinom(n*17, 1, 0.5), n, 17) # Random lights x <- cbind(temp1, temp2) dfit <- rpart(y ~ x, method='class', control = rpart.control(xval = 10, minbucket = 2, cp = 0)) printcp(dfit) fit9 <- prune(dfit, cp = 0.02) par(mar = rep(0.1, 4)) plot(fit9, branch = 0.3, compress = TRUE) text(fit9) @ This table differs from that in section 3.5 of \cite{Breiman83} in several ways, the last two of which are substantive. \begin{itemize} \item The actual values are different, of course, because of different random number generators in the two runs. \item The complexity table is printed from the smallest tree (no splits) to the largest one (28 splits). We find it easier to compare one tree to another when they start at the same place. \item The number of splits is listed, rather than the number of nodes. The number of nodes is always 1 + the number of splits. \item For easier reading, the error columns have been scaled so that the first node has an error of 1. Since in this example the model with no splits must make 180/200 misclassifications, multiply columns 3-5 by 180 to get a result in terms of absolute error. (Computations are done on the absolute error scale, and printed on relative scale). \item The complexity parameter column has been similarly scaled. \end{itemize} Looking at the table, we see that the best tree has 10 terminal nodes (9 splits), based on cross-validation. This sub tree is extracted with a call to \Co{prune} and saved in \Co{fit9}. The pruned tree is shown in figure \ref{figdig}. Two options have been used in the plot. The \Co{compress} option tries to narrow the printout by vertically overlapping portions of the plot. The \Co{branch} option controls the shape of the branches that connect a node to its children. The largest tree, with 35 terminal nodes, correctly classifies 170/200 = 85\% of the observations, but uses several of the random predictors in doing so and seriously over fits the data. If the number of observations per terminal node (minbucket) had been set to 1 instead of 2, then every observation would be classified correctly in the final model, many in terminal nodes of size 1. \section{Missing data} \subsection{Choosing the split} Missing values are one of the curses of statistical models and analysis. Most procedures deal with them by refusing to deal with them -- incomplete observations are tossed out. \texttt{Rpart} is somewhat more ambitious. Any observation with values for the dependent variable and at least one independent variable will participate in the modeling. The quantity to be maximized is still $$ \Delta I = p(A)I(A)-p(A_L )I(A_L ) - p(A_R ) I(A_R) $$ The leading term is the same for all variables and splits irrespective of missing data, but the right two terms are somewhat modified. Firstly, the impurity indices $I(A_R )$ and $I (A_L )$ are calculated only over the observations which are not missing a particular predictor. Secondly, the two probabilities $p(A_L )$ and $p(A_R )$ are also calculated only over the relevant observations, but they are then adjusted so that they sum to $p(A)$. This entails some extra bookkeeping as the tree is built, but ensures that the terminal node probabilities sum to 1. In the extreme case of a variable for which only 2 observations are non-missing, the impurity of the two sons will both be zero when splitting on that variable. Hence $\Delta I $ will be maximal, and this `almost all missing' coordinate is guaranteed to be chosen as best; the method is certainly flawed in this extreme case. It is difficult to say whether this bias toward missing coordinates carries through to the non-extreme cases, however, since a more complete variable also affords for itself more possible values at which to split. \subsection{Surrogate variables} Once a splitting variable and a split point for it have been decided, what {\em is} to be done with observations missing that variable? One approach is to estimate the missing datum using the other independent variables; {\rpart} uses a variation of this to define {\em surrogate} variables. As an example, assume that the split (age $<$40, age $\ge $40) has been chosen. The surrogate variables are found by re-applying the partitioning algorithm (without recursion) to predict the two categories `age $<$40' vs. `age $\ge $40' using the other independent variables. %$$ %\begin{tabular}{l|r|r|} % & & \multicolumn{2}{c}{Age $<$ 40} \\ % & & True & False \\ \hline % Other X $<$ cutpoint & True & True Positive & False Positive \\ \cline{3-4} % & False & False Negative & True Negative \\ \hline %\end{tabular} %$$ For each predictor an optimal split point and a misclassification error are computed. (Losses and priors do not enter in --- none are defined for the age groups --- so the risk is simply \#misclassified / n.) Also evaluated is the blind rule `go with the majority' which has misclassification error $\min(p, 1-p)$ where \begin{center} $p$ = (\# in A with age $<$ 40) / $n_A $. \end{center} The surrogates are ranked, and any variables which do no better than the blind rule are discarded from the list. Assume that the majority of subjects have age $\le$ 40 and that there is another variable $x$ which is uncorrelated to age; however, the subject with the largest value of $x$ is also over 40 years of age. Then the surrogate variable $x < \max$ versus $x \ge \max$ will have one less error that the blind rule, sending 1 subject to the right and $n-1$ to the left. A continuous variable that is completely unrelated to age has probability $1-p^2$ of generating such a trim-one-end surrogate by chance alone. For this reason the {\rpart} routines impose one more constraint during the construction of the surrogates: a candidate split must send at least 2 observations to the left and at least 2 to the right. Any observation which is missing the split variable is then classified using the first surrogate variable, or if missing that, the second surrogate is used, and etc. If an observation is missing all the surrogates the blind rule is used. Other strategies for these `missing everything' observations can be convincingly argued, but there should be few or no observations of this type (we hope). \subsection{Example: Stage C prostate cancer (cont.)} Let us return to the stage C prostate cancer data of the earlier example. For a more detailed listing of the rpart object, we use the \Co{summary} function. It includes the information from the CP table (not repeated below), plus information about each node. It is easy to print a sub tree based on a different cp value using the \Co{cp} option. Any value between 0.0555 and 0.1049 would produce the same result as is listed below, that is, the tree with 3 splits. Because the printout is long, the \Co{file} option of \Co{summary.rpart} is often useful. <<>>= printcp(cfit) summary(cfit, cp = 0.06) @ \begin{itemize} \item There are 54 progressions (class 1) and 94 non-progressions, so the first node has an expected loss of $54/146 \approx 0.37$. (The computation is this simple only for the default priors and losses). \item Grades 1 and 2 go to the left, grades 3 and 4 to the right. The tree is arranged so that the ``more severe'' nodes go to the right. \item The improvement is $n$ times the change in impurity index. In this instance, the largest improvement is for the variable \Co{grade}, with an improvement of 10.36. The next best choice is Gleason score, with an improvement of 8.4. The actual values of the improvement are not so important, but their relative size gives an indication of the comparative utility of the variables. \item Ploidy is a categorical variable, with values of diploid, tetraploid, and aneuploid, in that order. (To check the order, type \Co{table(stagec\$ploidy)}). All three possible splits were attempted: aneuploid+diploid vs. tetraploid, aneuploid+tetraploid vs. diploid, and aneuploid vs. diploid + tetraploid. The best split sends diploid to the right and the others to the left. \item The 2 by 2 table of diploid/non-diploid vs grade= 1-2/3-4 has 64\% of the observations on the diagonal. \\ $$ \begin{tabular}{r|rr} & 1-2 & 3-4 \\ \hline diploid & 38 & 29 \\ tetraploid & 22 & 46 \\ aneuploid & 1 & 10 \end{tabular} $$ \item For node 3, the primary split variable is missing on 6 subjects. All 6 are split based on the first surrogate, ploidy. Diploid and aneuploid tumors are sent to the left, tetraploid to the right. As a surrogate, eet was no better than 45/85 (go with the majority), and was not retained. $$ \begin{tabular}{l|c|c|} & g2 $<$ 13.2 & g2 $>$ 13.2 \\ \hline Diploid/aneuploid & 71 & 1 \\ Tetraploid & 3 & 64 \\ \end{tabular} $$ \end{itemize} \section{Further options} \subsection{Program options} The central fitting function is {\rpart}, whose main arguments are \begin{itemize} \item \Co{formula}: the model formula, as in \Co{lm} and other S model fitting functions. The right hand side may contain both continuous and categorical (factor) terms. If the outcome $y$ has more than two levels, then categorical predictors must be fit by exhaustive enumeration, which can take a very long time. \item \Co{data, weights, subset}: as for other S models. Weights are not yet supported, and will be ignored if present. \item \Co{method}: the type of splitting rule to use. Options at this point are classification, anova, Poisson, and exponential. \item \Co{parms}: a list of method specific optional parameters. For classification, the list can contain any of: the vector of prior probabilities (component \Co{prior}), the loss matrix (component \Co{loss}) or the splitting index (component \Co{split}). The priors must be positive and sum to 1. The loss matrix must have zeros on the diagonal and positive off-diagonal elements. The splitting index can be \Co{"gini"} or \Co{"information"}. \item \Co{na.action}: the action for missing values. The default action for rpart is \Co{na.rpart}, this default is not overridden by the \Co{options(na.action)} global option. The default action removes only those rows for which either the response $y$ or \emph{all} of the predictors are missing. This ability to retain partially missing observations is perhaps the single most useful feature of {\rpart} models. \item \Co{control}: a list of control parameters, usually the result of the \Co{rpart.control} function. The list must contain \begin{itemize} \item \Co{minsplit}: The minimum number of observations in a node for which the routine will even try to compute a split. The default is 20. This parameter can save computation time, since smaller nodes are almost always pruned away by cross-validation. \item \Co{minbucket}: The minimum number of observations in a terminal node. This defaults to \Co{minsplit/3}. \item \Co{maxcompete}: It is often useful in the printout to see not only the variable that gave the best split at a node, but also the second, third, etc best. This parameter controls the number that will be printed. It has no effect on computational time, and a small effect on the amount of memory used. The default is 4. \item \Co{xval}: The number of cross-validations to be done. Usually set to zero during exploratory phases of the analysis. A value of 10, for instance, increases the compute time to 11-fold over a value of 0. \item \Co{maxsurrogate}: The maximum number of surrogate variables to retain at each node. (No surrogate that does worse than ``go with the majority'' is printed or used). Setting this to zero will cut the computation time in half, and set \Co{usesurrogate} to zero. The default is 5. Surrogates give different information than competitor splits. The competitor list asks ``which other splits would have as many correct classifications'', surrogates ask ``which other splits would classify the same subjects in the same way'', which is a harsher criteria. \item \Co{usesurrogate}: A value of usesurrogate=2, the default, splits subjects in the way described previously. This is similar to CART. If the value is 0, then a subject who is missing the primary split variable does not progress further down the tree. A value of 1 is intermediate: all surrogate variables except ``go with the majority'' are used to send a case further down the tree. \item \Co{cp}: The threshold complexity parameter. \end{itemize} \end{itemize} The complexity parameter \Co{cp} is, like \Co{minsplit}, an advisory parameter, but is considerably more useful. It is specified according to the formula $$ R_{cp}(T) \equiv R(T) + cp* |T| * R(T_1) $$ where $T_1$ is the tree with no splits, $|T|$ is the number of splits for a tree, and $R$ is the risk. This scaled version is much more user friendly than the original CART formula (\ref{cp1}) since it is unit less. A value of \Co{cp = 1} will always result in a tree with no splits. For regression models (see next section) the scaled cp has a very direct interpretation: if any split does not increase the overall ${\rm R}^2$ of the model by at least $cp$ (where ${\rm R}^2$ is the usual linear-models definition) then that split is decreed to be, a priori, not worth pursuing. The program does not split said branch any further, and saves considerable computational effort. The default value of .01 has been reasonably successful at `pre-pruning' trees so that the cross-validation step need only remove 1 or 2 layers, but it sometimes over prunes, particularly for large data sets. \subsection{Example: Consumer Report Auto Data} A second example using the \Co{class} method demonstrates the outcome for a response with multiple ($>2$) categories. We also explore the difference between Gini and information splitting rules. The dataset cu.summary contains a collection of variables from the April, 1990 Consumer Reports summary on 117 cars. For our purposes, car Reliability will be treated as the response. The variables are: $$ \begin{tabular}{ll} Reliability & an ordered factor (contains NAs): \\ & Much worse $<$ worse $<$ average $<$ better $<$ Much Better \\ Price & numeric: list price in dollars, with standard equipment\\ Country & factor: country where car manufactured \\ Mileage & numeric: gas mileage in miles/gallon, contains NAs \\ Type & factor: Small, Sporty, Compact, Medium, Large, Van \\ \end{tabular} $$ In the analysis we are treating reliability as an unordered outcome. Nodes potentially can be classified as Much worse, worse, average, better, or Much better, though there are none that are labeled as just ``better''. The 32 cars with missing response (listed as NA) were not used in the analysis. Two fits are made, one using the Gini index and the other the information index. \begin{figure}[tb] \myfig{longintro-cars} \caption{Displays the rpart-based model relating automobile Reliability to car type, price, and country of origin. The figure on the left uses the \texttt{gini} splitting index and the figure on the right uses the \texttt{information} splitting index.} \label{ginifig5} \end{figure} <>= fit1 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'gini')) fit2 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'information')) par(mfrow = c(1,2), mar = rep(0.1, 4)) plot(fit1, margin = 0.05); text(fit1, use.n = TRUE, cex = 0.8) plot(fit2, margin = 0.05); text(fit2, use.n = TRUE, cex = 0.8) @ Due to the wide labels at the bottom, we had to increase the figure space slightly and decrease the character size in order to avoid truncation at the left and right edges. Details for the first two splits in the Gini tree are <<>>= summary(fit1, cp = 0.06) @ And for the information splitting the first split is <<>>= fit3 <- rpart(Reliability ~ Price + Country + Mileage + Type, data=cu.summary, parms=list(split='information'), maxdepth=2) summary(fit3) @ The first 3 countries (Brazil, England, France) had only one or two cars in the listing, all of which were missing the reliability variable. There are no entries for these countries in the first node, leading to the $-$ symbol for the rule. The information measure has larger ``improvements'', consistent with the difference in scaling between the information and Gini criteria shown in figure 2, but the relative merits of different splits are fairly stable. The two rules do not choose the same primary split at node 2. The data at this point are \begin{center} \begin{tabular}{rcccccc} &Compact & Large & Medium &Small & Sporty & Van \\ Much worse & 2 & 2 & 4 & 2 & 7 & 1 \\ worse & 5 & 0 & 4 & 3 & 0 & 0 \\ average & 3 & 5 & 8 & 2 & 2 & 3 \\ better & 2 & 0 & 0 & 3 & 0 & 0 \\ Much better & 0 & 0 & 0 & 0 & 0 & 0 \end{tabular} \end{center} Since there are 6 different categories, all $2^5 = 32$ different combinations were explored, and as it turns out there are several with a nearly identical improvement. The Gini and information criteria make different ``random'' choices from this set of near ties. For the Gini index, \emph{Sporty vs others} and \emph{Compact/Small vs others} have improvements of 3.19 and 3.12, respectively. For the information index, the improvements are 6.21 versus 9.28. Thus the Gini index picks the first rule and information the second. Interestingly, the two splitting criteria arrive at exactly the same final nodes, for the full tree, although by different paths. (Compare the class counts of the terminal nodes). We have said that for a categorical predictor with $m$ levels, all $2^{m-1}$ different possible splits are tested.. When there are a large number of categories for the predictor, the computational burden of evaluating all of these subsets can become large. For instance, the call \Co{rpart(Reliability ~ ., data=car90)} does not return for a \emph{long,} long time: one of the predictors in that data set is an unordered factor with 30 levels! Luckily, for any ordered outcome there is a computational shortcut that allows the program to find the best split using only $m-1$ comparisons. This includes the classification method when there are only two categories, along with the anova and Poisson methods to be introduced later. \subsection{Example: Kyphosis data} A third \Co{class} method example explores the parameters \Co{prior} and \Co{loss}. The dataset kyphosis has 81 rows representing data on 81 children who have had corrective spinal surgery. The variables are: $$ \begin{tabular}{ll} Kyphosis & factor: postoperative deformity is present/absent \\ Age & numeric: age of child in months \\ Number & numeric: number of vertebrae involved in operation \\ Start & numeric: beginning of the range of vertebrae involved \\ \end{tabular} $$ \begin{figure} \myfig{longintro-kyphos} \caption{Displays the rpart-based models for the presence/absence of kyphosis. The figure on the left uses the default {prior} (0.79,0.21) and {loss}; the middle figure uses the user-defined {prior} (0.65,0.35) and default {loss}; and the third figure uses the default {prior} and the user-defined {loss} $L(1,2)=3,\, L(2,1)=2$).} \label{kyphfig} \end{figure} <>= lmat <- matrix(c(0,3, 4,0), nrow = 2, ncol = 2, byrow = FALSE) fit1 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(prior = c(0.65, 0.35))) fit3 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(loss = lmat)) par(mfrow = c(1, 3), mar = rep(0.1, 4)) plot(fit1); text(fit1, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit2); text(fit2, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit3); text(fit3, use.n = TRUE, all = TRUE, cex = 0.8) @ This example shows how even the initial split changes depending on the prior and loss that are specified. The first and third fits have the same initial split (Start $< 8.5$), but the improvement differs. The second fit splits Start at 12.5 which moves 46 people to the left instead of 62. Looking at the leftmost tree, we see that the sequence of splits on the left hand branch yields only a single node classified as {\em present}. For any loss greater than 4 to 3, the routine will instead classify this node as {\em absent}, and the entire left side of the tree collapses, as seen in the right hand figure. This is not unusual --- the most common effect of alternate loss matrices is to change the amount of pruning in the tree, more pruning in some branches and less in others, rather than to change the choice of splits. The first node from the default tree is \begin{verbatim} Node number 1: 81 observations, complexity param=0.1765 predicted class= absent expected loss= 0.2099 class counts: 64 17 probabilities: 0.7901 0.2099 left son=2 (62 obs) right son=3 (19 obs) Primary splits: Start < 8.5 to the right, improve=6.762, (0 missing) Number < 5.5 to the left, improve=2.867, (0 missing) Age < 39.5 to the left, improve=2.250, (0 missing) Surrogate splits: Number < 6.5 to the left, agree=0.8025, (0 split) \end{verbatim} The fit using the prior (0.65,0.35) is \begin{Verbatim} Node number 1: 81 observations, complexity param=0.302 predicted class= absent expected loss= 0.35 class counts: 64 17 probabilities: 0.65 0.35 left son=2 (46 obs) right son=3 (35 obs) Primary splits: Start < 12.5 to the right, improve=10.900, (0 missing) Number < 4.5 to the left, improve= 5.087, (0 missing) Age < 39.5 to the left, improve= 4.635, (0 missing) Surrogate splits: Number < 3.5 to the left, agree=0.6667, (0 split) \end{Verbatim} And first split under 4/3 losses is \begin{Verbatim} Node number 1: 81 observations, complexity param=0.01961 predicted class= absent expected loss= 0.6296 class counts: 64 17 probabilities: 0.7901 0.2099 left son=2 (62 obs) right son=3 (19 obs) Primary splits: Start < 8.5 to the right, improve=5.077, (0 missing) Number < 5.5 to the left, improve=2.165, (0 missing) Age < 39.5 to the left, improve=1.535, (0 missing) Surrogate splits: Number < 6.5 to the left, agree=0.8025, (0 split) \end{Verbatim} \section{Regression} \label{method} \subsection{Definition} Up to this point the classification problem has been used to define and motivate our formulae. However, the partitioning procedure is quite general and can be extended by specifying 5 ``ingredients'': \begin{itemize} \item A splitting criterion, which is used to decide which variable gives the best split. For classification this was either the Gini or log-likelihood function. In the \Co{anova} method the splitting criteria is $SS_T - (SS_L + SS_R)$, where $SS_T = \sum(y_i - \bar y)^2$ is the sum of squares for the node, and $SS_R$, $SS_L$ are the sums of squares for the right and left son, respectively. This is equivalent to choosing the split to maximize the between-groups sum-of-squares in a simple analysis of variance. This rule is identical to the regression option for {\tree}. \item A summary statistic or vector, which is used to describe a node. The first element of the vector is considered to be the fitted value. For the anova method this is the mean of the node; for classification the response is the predicted class followed by the vector of class probabilities. \item The error of a node. This will be the variance of $y$ for anova, and the predicted loss for classification. \item The prediction error for a new observation, assigned to the node. For anova this is $(y_{new} - \bar y)$. \item Any necessary initialization. \end{itemize} The \Co{anova} method leads to regression trees; it is the default method if $y$ a simple numeric vector, i.e., not a factor, matrix, or survival object. \subsection{Example: Consumer Report car data} The dataset \Co{car90} contains a collection of variables from the April, 1990 Consumer Reports; it has 34 variables on 111 cars. We've excluded 3 variables: tire size and model name because they are factors with a very large number of levels whose printout does not fit well in this report's page size, and rim size because it is too good a predictor of price and leads to a less interesting illustration. (Tiny cars are cheaper and have small rims.) <<>>= cars <- car90[, -match(c("Rim", "Tires", "Model2"), names(car90))] carfit <- rpart(Price/1000 ~ ., data=cars) carfit printcp(carfit) @ <>= temp <- carfit$cptable @ \begin{itemize} \item The relative error is $1-{\rm R}^2$, similar to linear regression. The xerror is related to the PRESS statistic. The first split appears to improve the fit the most. The last split adds little improvement to the apparent error, and increases the cross-validated error. \item The 1-SE rule would choose a tree with 3 splits. \item This is a case where the default cp value of .01 may have over pruned the tree, since the cross-validated error is barely at a minimum. A rerun with the cp threshold at .001 gave little change, however. \item For any CP value between Sexpr{round(temp[3,1],2)} and \Sexpr{round(temp[2,1],2)} the best model has one split; for any CP value between \Sexpr{round(temp[4,1],2)} and \Sexpr{round(temp[3,1],2)} the best model is with 2 splits; and so on. \end{itemize} The \Co{print} and \Co{summary} commands also recognizes the \Co{cp} option, which allows the user to look at only the top few splits. <<>>= summary(carfit, cp = 0.1) @ The first split on displacement partitions the \Sexpr{carfit$frame$n[1]} observations into groups of \Sexpr{carfit$frame$n[2]} and \Sexpr{carfit$frame$n[3]} (nodes 2 and 3) with mean prices of \Sexpr{round(carfit$frame$yval[2])} and \Sexpr{round(carfit$frame$yval[3])} \begin{itemize} \item The improvement listed is the percent change in SS for this split, i.e., $1 - (SS_{right} + SS_{left})/SS_{parent}$, which is the gain in $R^2$ for the fit. \item The data set has displacement of the engine in both cubic inches (Disp) and liters (Disp2). The second is a perfect surrogate split for the first, obviously. \item The weight and displacement are very closely related, as shown by the surrogate split agreement of 91\%. \item Not all the countries are represented in node 3, e.g., there are no larger cars from Brazil. This is indicated by a \Co{-} in the list of split directions. \end{itemize} \begin{figure} \myfig{longintro-anova2} \caption{Both plots were obtained using the function \Co{rsq.rpart(fit3)}. The figure on the left shows that the first split offers the most information. The figure on the right suggests that the tree should be pruned to include only 1 or 2 splits.} \label{anovafig2} \end{figure} <>= par(mfrow=c(1,2)) rsq.rpart(carfit) par(mfrow=c(1,1)) @ Other plots can be used to help determine the best cp value for this model. The function \Co{rsq.rpart} plots the jackknifed error versus the number of splits. Of interest is the smallest error, but any number of splits within the ``error bars'' (1-SE rule) are considered a reasonable number of splits (in this case, 1 or 2 splits seem to be sufficient). As is often true with modeling, simpler is often better. Another useful plot is the ${\rm R}^2$ versus number of splits. The (1 - apparent error) and (1 - relative error) show how much is gained with additional splits. This plot highlights the differences between the ${\rm R}^2$ values. \begin{figure} \myfig{longintro-anova3} \caption{This plot shows the (observed-expected) cost of cars versus the predicted cost of cars based on the nodes/leaves in which the cars landed. There appears to be more variability in node 7 than in some of the other leaves.} \label{anovafig3} \end{figure} Finally, it is possible to look at the residuals from this model, just as with a regular linear regression fit, as shown in figure \ref{anovafig3} produced by the following. <>= plot(predict(carfit), jitter(resid(carfit))) temp <- carfit$frame[carfit$frame$var == '',] axis(3, at = temp$yval, as.character(row.names(temp))) mtext('leaf number', side = 3, line = 3) abline(h = 0, lty = 2) @ \subsection{Example: Stage C data (\Co{anova} method)} The stage C prostate cancer data of the earlier section can also be fit using the anova method, by treating the status variable as though it were continuous. <<>>= cfit2 <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) printcp(cfit2) print(cfit2, cp = 0.03) @ If this tree is compared to the earlier results, we see that it has chosen exactly the same variables and split points as before. The only addition is further splitting of node 2, the upper left ``No'' of figure \ref{fgini1}. This is no accident, for the two class case the Gini splitting rule reduces to $2p(1-p)$, which is the variance of a node. The two methods differ in their evaluation and pruning, however. Note that nodes 4 and 5, the two children of node 2, contain 2/40 and 7/21 progressions, respectively. For classification purposes both nodes have the same predicted value (No) and the split will be discarded since the error (\# of misclassifications) with and without the split is identical. In the regression context the two predicted values of .05 and .33 {\em are} different --- the split has identified a nearly pure subgroup of significant size. This setup is known as \emph{odds regression}, and may be a more sensible way to evaluate a split when the emphasis of the model is on understanding/explanation rather than on prediction error per se. Extension of this rule to the multiple class problem is appealing, but has not yet been implemented in {\rpart}. \section{Poisson regression} \subsection{Definition} The Poisson splitting method attempts to extend {{\rpart}} models to event rate data. The model in this case is $$ \lambda = f(x) $$ where $\lambda$ is an event rate and $x$ is some set of predictors. As an example consider hip fracture rates. For each county in the United States we can obtain \begin{itemize} \item number of fractures in patients age 65 or greater (from Medicare files) \item population of the county (US census data) \item potential predictors such as \begin{itemize} \item socio-economic indicators \item number of days below freezing \item ethnic mix \item physicians/1000 population \item etc. \end{itemize} \end{itemize} Such data would usually be approached by using Poisson regression; can we find a tree based analogue? In adding criteria for rates regression to this ensemble, the guiding principle was the following: the between groups sum-of-squares is not a very robust measure, yet tree based regression works fairly well for this data. So do the simplest (statistically valid) thing possible. Let $c_i$ be the observed event count for observation $i$, $t_i$ be the observation time, and $x_{ij}, j=1,\ldots,p$ be the predictors. The $y$ variable for the program will be a 2 column matrix. Splitting criterion: The likelihood ratio test for two Poisson groups $$ D_{\hbox{parent}} - \left( D_{\hbox{left son}} + D_{\hbox{right son}} \right ) $$ Summary statistics: The observed event rate and the number of events. \begin{eqnarray*} \hat\lambda &=& \frac{\hbox{\# events}}{\hbox{total time}} = \frac{\sum c_i}{\sum t_i} \\ \end{eqnarray*} Error of a node: The within node deviance. $$ D = \sum \left[ c_i \log \left(\frac{c_i}{\hat\lambda t_i} \right) - (c_i - \hat\lambda t_i) \right] $$ Prediction error: The deviance contribution for a new observation, using $\hat \lambda$ of the node as the predicted rate. \subsection{Improving the method} There is a problem with the criterion just proposed, however: cross-validation of a model often produces an infinite value for the deviance. The simplest case where this occurs is easy to understand. Assume that some terminal node of the tree has 20 subjects, but only 1 of the 20 has experienced any events. The cross-validated error (deviance) estimate for that node will have one subset --- the one where the subject with an event is left out --- which has $\hat\lambda=0$. When we use the prediction for the 10\% of subjects who were set aside, the deviance contribution of the subject with an event is $$ \ldots + c_i \log(c_i / 0) + \ldots $$ which is infinite since $c_i >0$. The problem is that when $\hat\lambda=0$ the occurrence of an event is infinitely improbable, and, using the deviance measure, the corresponding model is then infinitely bad. One might expect this phenomenon to be fairly rare, but unfortunately it is not so. One given of tree-based modeling is that a right-sized model is arrived at by purposely over-fitting the data and then pruning back the branches. A program that aborts due to a numeric exception during the first stage is uninformative to say the least. Of more concern is that this edge effect does not seem to be limited to the pathological case detailed above. Any near approach to the boundary value $\lambda=0$ leads to large values of the deviance, and the procedure tends to discourage any final node with a small number of events. An ad hoc solution is to use the revised estimate $$ \hat{\hat \lambda} = \max \left(\hat\lambda, \frac{k}{\sum t_i} \right) $$ where $k$ is 1/2 or 1/6. That is, pure nodes are given a partial event. (This is similar to the starting estimates used in the GLM program for a Poisson regression.) This is unsatisfying, however, and we propose instead using a shrinkage estimate. Assume that the true rates $\lambda_j$ for the leaves of the tree are random values from a Gamma$(\mu, \sigma)$ distribution. Set $\mu$ to the observed overall event rate $\sum c_i / \sum t_i$, and let the user choose as a prior the coefficient of variation $k =\sigma / \mu$. A value of $k=0$ represents extreme pessimism (``the leaf nodes will all give the same result''), whereas $k=\infty$ represents extreme optimism. The Bayes estimate of the event rate for a node works out to be $$ \hat \lambda_k = \frac{\alpha + \sum c_i}{\beta + \sum t_i}, $$ where $\alpha= 1/k^2$ and $\beta = \alpha/ \hat\lambda$. This estimate is scale invariant, has a simple interpretation, and shrinks least those nodes with a large amount of information. In practice, a value of $k=10$ does essentially no shrinkage. For \Co{method='poisson'}, the optional parameters list is the single number $k$, with a default value of 1. \subsection{Example: solder data} The solder data frame, as explained in the S help file, is a dataset with 900 observations which are the results of an experiment varying 5 factors relevant to the wave-soldering procedure for mounting components on printed circuit boards. The response variable, skips, is a count of how many solder skips appeared to a visual inspection. The other variables are listed below: $$ \begin{tabular}{ll} Opening & factor: amount of clearance around the mounting pad (S $<$ M $<$ L) \\ Solder & factor: amount of solder used (Thin $<$ Thick) \\ Mask & factor: Type of solder mask used (5 possible) \\ PadType & factor: Mounting pad used (10 possible) \\ Panel & factor: panel (1, 2 or 3) on board being counted \\ \end{tabular} $$ In this call, the \Co{rpart.control} options are modified: \Co{maxcompete = 2} means that only 2 other competing splits are listed (default is 4); \Co{cp = .05} means that a smaller tree will be built initially (default is .01). The $y$ variable for Poisson partitioning may be a two column matrix containing the observation time in column 1 and the number of events in column 2, or it may be a vector of event counts alone. <<>>= sfit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, data = solder, method = 'poisson', control = rpart.control(cp = 0.05, maxcompete = 2)) sfit @ \begin{itemize} \item The response value is the expected event rate (with a time variable), or in this case the expected number of skips. The values are shrunk towards the global estimate of 5.53 skips/observation. \item The deviance is the same as the null deviance (sometimes called the residual deviance) that you'd get when calculating a Poisson glm model for the given subset of data. \end{itemize} <<>>= summary(sfit, cp = 0.1) @ \begin{itemize} \item The improvement is ${\rm Deviance_{parent} - (Deviance_{left} + Deviance_{right})}$, which is the likelihood ratio test for comparing two Poisson samples. \item The cross-validated error has been found to be overly pessimistic when describing how much the error is improved by each split. This is likely an effect of the boundary effect mentioned earlier, but more research is needed. \item The variation xstd is not as useful, given the bias of xerror. \end{itemize} \begin{figure} \myfig{longintro-poisson1} \caption{The first figure shows the solder data, fit with the \Co{poisson} method, using a \Co{cp} value of 0.05. The second figure shows the same fit, but with a \Co{cp} value of 0.10. The function \Co{prune.rpart} was used to produce the smaller tree.} \label{poissonfig1} \end{figure} <>= par(mar = rep(0.1, 4)) plot(sfit) text(sfit, use.n = TRUE, min = 3) fit.prune <- prune(sfit, cp = 0.10) plot(fit.prune) text(fit.prune, use.n = TRUE, min = 2) @ The \Co{use.n = TRUE} option specifies that number of events / total N should be listed along with the predicted rate (number of events/person-years). The function \Co{prune} trims the tree \Co{fit} to the \Co{cp} value $0.10$. The same tree could have been created by specifying \Co{cp = 0.10} in the original call to {\rpart}. \subsection{Example: Stage C Prostate cancer, survival method} One special case of the Poisson model is of particular interest for medical consulting (such as the authors do). Assume that we have survival data, i.e., each subject has either 0 or 1 event. Further, assume that the time values have been pre-scaled so as to fit an exponential model. That is, stretch the time axis so that a Kaplan-Meier plot of the data will be a straight line when plotted on the logarithmic scale. An approximate way to do this is <<>>= require(survival) temp <- coxph(Surv(pgtime, pgstat) ~ 1, stagec) newtime <- predict(temp, type = 'expected') @ and then do the analysis using the \Co{newtime} variable. (This replaces each time value by $\Lambda(t)$, where $\Lambda$ is the cumulative hazard function). A slightly more sophisticated version of this which we will call \emph{exponential scaling} gives a straight line curve for log(survival) under a parametric exponential model. The only difference from the approximate scaling above is that a subject who is censored between observed death times will receive ``credit'' for the intervening interval, i.e., we assume the baseline hazard to be linear between observed deaths. If the data is pre-scaled in this way, then the Poisson model above is equivalent to the \emph{local full likelihood} tree model of LeBlanc and Crowley \cite{Leblanc92}. They show that this model is more efficient than the earlier suggestion of Therneau et al. \cite{Therneau90} to use the martingale residuals from a Cox model as input to a regression tree (anova method). Exponential scaling or method='exp' is the default if $y$ is a \Co{Surv} object. Let us again return to the stage C cancer example. Besides the variables explained previously, we will use pgtime, which is time to tumor progression. <>= require(survival) pfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) print(pfit) pfit2 <- prune(pfit, cp = 0.016) par(mar = rep(0.2, 4)) plot(pfit2, uniform = TRUE, branch = 0.4, compress = TRUE) text(pfit2, use.n = TRUE) @ Note that the primary split on grade is the same as when status was used as a dichotomous endpoint, but that the splits thereafter differ. Suppose that we wish to simplify this tree, so that only four splits remain. Looking at the table of complexity parameters, we see that \Co{prune(fit, cp = 0.016)} would give the desired result, which is shown in figure \ref{expfig3}. From the figure node 4 (leftmost terminal) has only 1 event for 33 subjects, a relative death rate of .133 times the overall rate, and is defined by grade = 1--2 and g2 $<$ 11.36. \begin{figure} \myfig{longintro-exp3} \caption{Survival fit to the stage C prostate data.} \label{expfig3} \end{figure} For a final summary of the model, it can be helpful to plot the probability of survival based on the final bins in which the subjects landed. To create new variables based on the rpart groupings, using the \Co{where} component of the fit, as shown in figure \ref{expfig4}. We'll further prune the tree down to four nodes by removing the split at node 6. \begin{figure} \myfig{longintro-exp4} \caption{Survival plot based on snipped rpart object. The probability of tumor progression is greatest in node 8, which has patients who are older and have a higher initial tumor grade. } \label{expfig4} \end{figure} <>= temp <- snip.rpart(pfit2, 6) km <- survfit(Surv(pgtime, pgstat) ~ temp$where, stagec) plot(km, lty = 1:4, mark.time = FALSE, xlab = "Years", ylab = "Progression") legend(10, 0.3, paste('node', c(4,5,6,7)), lty = 1:4) @ \subsection{Open issues} The default value of the shrinkage parameter $k$ is 1. This corresponds to prior coefficient of variation of 1 for the estimated $\lambda_j$. We have not nearly enough experience to decide if this is a good value. (It does stop the $\log(0)$ message though). Cross-validation does not work very well. The procedure gives very conservative results, and quite often declares the no-split tree to be the best. This may be another artifact of the edge effect. \section{Plotting options} \label{plotsect} This section examines the various options that are available when plotting an rpart object. For simplicity, the same model (data from Example 1) will be used throughout. You have doubtless already noticed the use of \texttt{par(mar =)} in the examples. The plot function for rpart uses the general \texttt{plot} function to set up the plot region. By default, this leaves space for axes, legends or titles on the bottom, left, and top. Room for axes is not needed in general for rpart plots, and for this report we also do not have top titles. For the small plots in this report it was important to use all of the page, so we reset these for each plot. (Due to the way that Sweave works each plot is a separate environment, so the par() parameters do not endure from plot to plot.) The simplest labeled plot is called by using \Co{plot} and \Co{text} without changing any of the defaults. This is useful for a first look, but sometimes you'll want more information about each of the nodes. \begin{figure} \myfig{longintro-plots1} \caption{\Co {plot(fit); text(fit)}} \label{plotfig1} \end{figure} <>= fit <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, stagec, control = rpart.control(cp = 0.025)) par(mar = rep(0.2, 4)) plot(fit) text(fit) @ \begin{figure} \myfig{longintro-plots2} \caption{\Co {plot(fit, uniform = TRUE); text(fit,use.n = TRUE,all = TRUE)}} \label{plotfig2} \end{figure} The next plot has uniform stem lengths (\Co{uniform = TRUE}), has extra information (\Co{use.n = TRUE}) specifying number of subjects at each node, and has labels on all the nodes, not just the terminal nodes (\Co{all = TRUE}). <>= par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE) text(fit, use.n = TRUE, all = TRUE) @ \begin{figure} \myfig{longintro-plots3} \caption{\Co{plot(fit, branch=0); text(fit,use.n = TRUE)}} \label{plotfig3} \end{figure} Fancier plots can be created by modifying the \Co{branch} option, which controls the shape of branches that connect a node to its children. The default for the plots is to have square shouldered trees (\Co{branch = 1.0}). This can be taken to the other extreme with no shoulders at all (\Co{branch=0}). <>= par(mar = rep(0.2, 4)) plot(fit, branch = 0) text(fit, use.n = TRUE) @ \begin{figure} \myfig{longintro-plots4} \caption{\Co{plot(fit, branch = 0.4, uniform = TRUE, compress = TRUE)}} \label{plotfig4} \end{figure} These options can be combined with others to create the plot that fits your particular needs. The default plot may be inefficient in it's use of space: the terminal nodes will always lie at x-coordinates of 1,2,\ldots. The \Co{compress} option attempts to improve this by overlapping some nodes. It has little effect on figure \ref{plotfig4}, but in figure \ref{figdig} it allows the lowest branch to ``tuck under'' those above. If you want to play around with the spacing with compress, try using \Co{nspace} which regulates the space between a terminal node and a split. <>= par(mar = rep(0.2, 4)) plot(fit, branch = 0.4,uniform = TRUE, compress = TRUE) text(fit, all = TRUE, use.n = TRUE) @ \begin{figure} \myfig{longintro-plots5} \caption{Fancier plot} \label{plotfig5} \end{figure} Several of these options were combined into a function called \Co{post.rpart}, whose default action of creating a .ps file in the current directory is now rather dated. Identical results to the function can be obtained by the collection of options shown below, the result is displayed in figure \ref{plotfig5}. The code is essentially <>= par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE, branch = 0.2, compress = TRUE, margin = 0.1) text(fit, all = TRUE, use.n = TRUE, fancy = TRUE, cex= 0.9) @ The \Co{fancy} option of \Co{text} creates the ellipses and rectangles, and moves the splitting rule to the midpoints of the branches. \Co{Margin} shrinks the plotting region slightly so that the \Co{text} boxes don't run over the edge of the plot. The \Co{branch} option makes the lines exit the ellipse at a ``good'' angle. A separate package \texttt{rpart.plot} carries these ideas much further. \section{Other functions} A more general approach to cross-validation can be gained using the \Co{xpred.rpart} function. Given an rpart fit, a vector of $k$ complexity parameters, and the desired number of cross-validation groups, this function returns an $n$ by $k$ matrix containing the predicted value $\hat y_{(-i)}$ for each subject, from the model that was fit without that subject. The $cp$ vector defaults to the geometric mean of the $cp$ sequence for the pruned tree on the full data set. Here is an example that uses the mean absolute deviation for continuous data rather than the usual mean square error. <<>>= carfit <- rpart(Price/1000 ~ ., cars) carfit$cptable price2 <- cars$Price[!is.na(cars$Price)]/1000 temp <- xpred.rpart(carfit) errmat <- price2 - temp abserr <- colMeans(abs(errmat)) rbind(abserr, relative=abserr/mean(abs(price2-mean(price2)))) @ We see that on the absolute error scale the relative error improvement is not quite so large, though this could be expected given that the optimal split was not chosen to minimize absolute error. \section{Test Cases} \subsection{Classification} The definitions for classification trees can get the most complex, especially with respect to priors and loss matrices. In this section we lay out a simple example, in great detail. (This was done to debug the S functions.) \begin{table} \centering \begin{tabular} {r|rrrrrrrr} y & 1& 2 & 3 & 1 & 2 &3 & 1 & 2 \\ x1& 1 &2 & 3 & 4 & 5& 6 & 7 & 8 \\ x2& 1 &2 & 3 & 4 & 5& 6 & 1 & 2 \\ x3&NA &22& 38& 12&NA& 48& 14& 32 \\ \multicolumn{2}{c}{} \\ % tricky way to get a blank line with no vertical bar y& 3 & 1 & 2 & 3 & 1 & 2 & 1 \\ x1& 9 & 10 & 11 & 12 & 13 & 14 & 15 \\ x2& 3 & 4 & 5 & 6 & 1 & 2 & 3 \\ x3& 40& NA & 30& 46 & 28 & 34 & 48 \\ \end{tabular} \caption{Data set for the classification test case} \label{datatab} \end{table} Let $n=15$, and the data be as given in table \ref{datatab}. The loss matrix is defined as $$ L = \begin{array}{ccc} 0 & 2 & 2 \\ 2 & 0 & 6 \\ 1 & 1 & 0 \\ \end{array} $$ where rows represent the true class and columns the assigned class. Thus the error in mistakenly calling a class 2 observation a 3 is quite large in this data set. The prior probabilities for the study are assumed to be $\pi = .2, .3, .5$, so class 1 is most prevalent in the input data ($n_i$=6, 5, and 4 observations, respectively), but class 3 the most prevalent in the external population. Splits are chosen using the Gini index with altered priors, as defined in equation (4.15) of Breiman et al \cite{Breiman83}. \begin{eqnarray*} \tilde\pi_1 &=& \pi_1(0+2+2) / \sum \tilde \pi_i = 4/21 \\ \tilde\pi_2 &=& \pi_2(2+0+6) / \sum \tilde \pi_i = 12/21 \\ \tilde\pi_3 &=& \pi_3(1+1+0) / \sum \tilde \pi_i = 5/21\\ \end{eqnarray*} For a given node $T$, the Gini impurity will be $\sum_j p(j|T)[1-p(j|T)] = 1- \sum p(j|T)^2$, where $p(j|T)$ is the expected proportion of class $j$ in the node: $$ p(j|T) = \tilde\pi_j [n_i(T)/n_i ]/ \sum p(i|T) $$. Starting with the top node, for each possible predicted class we have the following loss $$ \begin{tabular}{cc} predicted class & E(loss)\\ 1 & .2*0 + .3*2 + .5*1 = 1.1 \\ 2 & .2*2 + .3*0 + .5*1 = 0.9 \\ 3 & .2*2 + .3*6 + .5*0 = 2.2 \\ \end{tabular} $$ The best choice is class 2, with an expected loss of 0.9. The Gini impurity for the node, using altered priors, is $G = 1 - (16+144+25)/21^2 = 256/441 \approx .5805$. Assume that variable $x1$ is split at 12.5, which is, as it turns out, the optimal split point for that variable under the constraint that at least 2 observations are in each terminal node. Then the right node will have class counts of (4,4,4) and the left node of (2,1,0). For the right node (node 3 in the tree) \\ \begin{tabular}{rcl} $P(R)$ &=&.2(4/6) + .3(4/5) + .5(4/4)= 131/150 \\ &=& \mbox{probability of the node (in the population)} \\ $p(i|R)$ &=& (.2(4/6), .3(4/5), .5(4/4))/$P(R)$ \\ $\widetilde P(R)$ &=& (4/21)(4/6) + (12/21)(4/5) + (5/21)(4/4) = 259/315=37/45 \\ $\tilde p(i|R)$&=& [(4/21)(4/6), (12/21)(4/5), (5/21)(4/4)] (45/37) \\ $G(R)$&=& $1 - \sum \tilde p(i|R)^2 \approx .5832$ \end{tabular} For the left node (node 2) \\ \begin{tabular}{rcl} $P(L)$ &=&.2(2/6) + .3(1/5) + .5(0/4)= 19/150 \\ $p(i|L)$ &=& (.4/3, .3/5, 0)/ $P(L)$ = (10/19, 9/19, 0) \\ $\widetilde P(L)$ &=& $1- \widetilde P(R) =8/45$ \\ $\tilde p(i|L)$ &=& [(4/21)(2/6), (12/21)(1/5), (5/21)(0/4)]/ $\widetilde P(L)$\\ $G(L)$ &=&$ 1 - \sum \tilde p(i|L)^2 \approx .459$ \\ \end{tabular} The total improvement for the split involves the change in impurity between the parent and the two child nodes $$ n(G - [\widetilde P(L)* G(L) + \widetilde P(R)* G(R)] ) \approx .2905 $$ where $n=15$ is the total sample size. For variable $x2$ the best split occurs at 5.5, splitting the data into left and right nodes with class counts of (2,2,1) and (4,3,3), respectively. Computations just exactly like the above give an improvement of 1.912. For variable $x3$ there are 3 missing values, and the computations are similar to what would be found for a node further down the tree with only 12/15 observations. The best split point is at 3.6, giving class counts of (3,4,0) and (1,0,4) in the left and right nodes, respectively. For the right node (node 3 in the tree)\\ \begin{tabular}{rcl} $\widetilde P(R)$ &=& (4/21)(3/6) + (12/21)(4/5) + (5/21)(0/4) = 174/315\\ $\tilde p(i|R)$&=& [(4/21)(3/6), (12/21)(4/5), (5/21)(0/4)] (315/174) \\ &=& (5/29, 24/29, 0) \\ $G(R)$&=& $1 - (25+576)/29^2 = 240/841 approx .2854$ \end{tabular} For the left node (node 2) \\ \begin{tabular}{rcl} $\widetilde P(L)$ &=& (4/21)(1/6) +(12/21)(0/5) + (5/21)(4/4)= 85/315\\ $\tilde p(i|L)$ &=& [(4/21)(1/6), (12/21)(0/5), (5/21)(4/4)] (315/85) \\ &=& (2/17, 0, 15/17)\\ $G(L)$ &=&$ 1 - (4 + 225)/17^2 = 60/289 \approx .2076$ \\ \end{tabular} The overall impurity for the node involves only 12 of the 15 observations, giving the following values for the top node:\\ \begin{tabular}{rcl} $\widetilde P(T)$ &=& 174/315 + 85/315 = 259/315\\ $\tilde p(i|T)$ &=& [(4/21)(4/6), (12/21)(4/5), (5/21)(4/4)] (315/259) \\ &=& (40/259, 144/259, 75/259) \\ $G(T)$& =& $1- (40^2 + 144^2 + 75^2)/259^2 = 39120/67081$ \end{tabular} The total improvement for the split involves the impurity $G$ of all three nodes, weighted by the probabilities of the nodes under the alternate priors. $$ 15* \{(259/315)(39120/67081) - [(174/315)(240/841) + (85/315)(60/289)]\} \approx 3.9876 $$ As is true in general with the rpart routines, variables with missing values are penalized with respect to choosing a split -- a factor of 259/315 or about 12/15 in the case of $x3$ at the top node. Table \ref{tab:cutpoint} shows the statistics for all of the cutpoints of $x3$. \begin{table} \centering \begin{tabular}{c | rrrrr} Cutpoint& $P(L)$ & $P(R)$ & $G(L)$ & $G(R)$ & $\Delta I$\\ \hline 1.3 & 0.03 & 0.97 & 0.00 & 0.56 & 0.55\\ 1.8 & 0.06 & 0.94 & 0.00 & 0.53 & 1.14\\ 2.5 & 0.18 & 0.82 & 0.46 & 0.57 & 0.45\\ 2.9 & 0.21 & 0.79 & 0.50 & 0.53 & 0.73\\ 3.1 & 0.32 & 0.68 & 0.42 & 0.56 & 1.01\\ 3.3 & 0.44 & 0.56 & 0.34 & 0.52 & 1.96\\ 3.6 & 0.55 & 0.45 & 0.29 & 0.21 & 3.99\\ 3.9 & 0.61 & 0.39 & 0.41 & 0.26 & 2.64\\ 4.3 & 0.67 & 0.33 & 0.48 & 0.33 & 1.56\\ 4.7 & 0.73 & 0.27 & 0.53 & 0.45 & 0.74\\ 4.8 & 0.79 & 0.21 & 0.56 & 0.00 & 0.55\\ \end{tabular} \caption{Cut points and statistics for variable $x3$, top node} \label{tab:cutpoint} \end{table} Because $x3$ has missing values, the next step is choice of a surrogate split. Priors and losses currently play no role in the computations for selecting surrogates. For all the prior computations, the effect of priors is identical to that of adding case weights to the observations such that the apparent frequencies are equal to the chosen priors; since surrogate computations do account for case weights, one could argue that they should also then make use of priors. The argument has not yet been found compelling enough to add this to the code. Note to me: the cp is not correct for usesurrogate=0. The error after a split is not (left error + right error) -- it also needs to have a term (parent error for those obs that weren't split). \bibliographystyle{plain} \bibliography{refer} \end{document} rpart/inst/doc/usercode.Rnw0000644000176000001440000004743512270777377015515 0ustar ripleyusers\documentclass{article} \usepackage[pdftex]{graphicx} \usepackage{Sweave} \usepackage{amsmath} \addtolength{\textwidth}{1in} \addtolength{\oddsidemargin}{-.5in} \setlength{\evensidemargin}{\oddsidemargin} \SweaveOpts{keep.source=TRUE, fig=FALSE} %\VignetteIndexEntry{User Written Split Functions} %\VignetteDepends{rpart} % Ross Ihaka suggestions \DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em} \DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em} \DefineVerbatimEnvironment{Scode}{Verbatim}{xleftmargin=2em} \fvset{listparameters={\setlength{\topsep}{0pt}}} \renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}} \newcommand{\myfig}[1]{\resizebox{\textwidth}{!} {\includegraphics{#1.pdf}}} \title{User written splitting functions for RPART} \author{Terry Therneau \\Mayo Clinic} \begin{document} \maketitle <>= options(continue=" ", width=60) options(SweaveHooks=list(fig=function() par(mar=c(5.1, 4.1, .3, 1.1)))) @ \section{Splitting functions} The rpart code was written in a modular fashion with the idea that the C code would be extended to include more splitting functions. As a consequence all of the splitting functions are coordinated through a single structure in the file \texttt{func\_table.h}, shown below: \begin{verbatim} static struct { int (*init_split)(); void (*choose_split)(); void (*eval)(); double (*error)(); } func_table [] = { {anovainit, anova, anovass, anovapred}, {poissoninit, poisson, poissondev, poissonpred}, {giniinit, gini, ginidev, ginipred}, {usersplit_init, usersplit, usersplit_eval, usersplit_pred} }; #define NUM_METHODS 4 /*size of the above structure */ \end{verbatim} Adding a new splitting method requires the definition of four functions which initialize, choose a split, compute the predicted value or values for a node, and compute a prediction error for a new observation assigned to the node. The last of these is used only in cross-validation. To add new splitting rules to the main routine four new C functions need to be defined, the \texttt{func\_table.h} file expanded, the R function \texttt{rpart} updated to recognize the new option (it calls the C routine with the row number of func\_table), and finally an initialization function written. See the \texttt{rpart.class}, \texttt{rpart.anova}, and \texttt{rpart.exp} functions for examples of the latter. The lion's share of the code, which deals with all the necessary bookkeeping, remains unchanged. An easier route is to add a user defined splitting rules as a set of R functions. The resulting code will be considerably slower than the built-in functions; nevertheless this allows an easy way to extend \texttt{rpart}, and to test out new ideas with less effort than additions to the C base. For user defined splits only the first three functions are defined, and cross-validation does not happen automatically. (User defined methods are many times slower than the built in ones, so it may be preferable to skip cross-validation during the initial evaluation of a model.) \section{Anova function} As the first illustration we show how to add anova splitting as a user-written addition. This method is also one of those built into the C code, so we can also check the correctness of the results. \subsection{Initialization function} <<>>= itemp <- function(y, offset, parms, wt) { if (is.matrix(y) && ncol(y) > 1) stop("Matrix response not allowed") if (!missing(parms) && length(parms) > 0) warning("parameter argument ignored") if (length(offset)) y <- y - offset sfun <- function(yval, dev, wt, ylevel, digits ) { paste(" mean=", format(signif(yval, digits)), ", MSE=" , format(signif(dev/wt, digits)), sep = '') } environment(sfun) <- .GlobalEnv list(y = c(y), parms = NULL, numresp = 1, numy = 1, summary = sfun) } @ On input the function will be called with \begin{description} \item[y] the response value as found in the formula. Note that rpart will normally have removed any observations with a missing response. \item[offset] the offset term, if any, found on the right hand side of the formula \item[parms] the vector or list (if any) supplied by the user as a \texttt{parms} argument to the call. \item[wt] the weight vector from the call, if any \end{description} The last two arguments are optional. The initialization function needs to perform any data checks, deal with the offset vector if present, and return a list containing \begin{description} \item[y] the value of the response, possibly updated \item[numy] the number of columns of y \item[numresp] the length of the prediction vector for each node \item[summary] optional: a function which will produce a 1--3 line summary for the node, to be used by \texttt{summary.rpart}. \item[print] optional: a function which will produce a one line summary for the \texttt{print} function. \item[text] optional: a function which will produce a short label for the node, used by the \texttt{plot} function. \end{description} The parameters vector can contain whatever might be appropriate for the method, e.g. the variance of a prior distribution. The vector of parameters passed forward need not be he same as the set passed into the routine. In anova splitting there are no extra parameters. The summary function will be called with arguments which are \begin{itemize} \item yval= the response value for the node \item dev = the deviance for the node \item wt = the sum of weights at the node (number of observations) \item ylevel = the levels of y, if y is categorical \item digits = the current setting for digits \end{itemize} It should return a character vector. The text function will be called with these arguments plus two more \begin{itemize} \item n= the number of observations in the node \item use.n = TRUE/FALSE, see the help page for \texttt{text.rpart} \end{itemize} The print function is called only with yval, ylevels, and digits. The only puzzling line may be \texttt{environment(sfun) <- .GlobalEnv}. R ensures that any function can access variables that are \emph{not} passed in as arguments via a mechanism called environments. As a trivial example <<>>= temp <- 4 fun1 <- function(x) { q <- 15 z <- 10 fun2 <- function(y) y + z + temp fun2(x^2) } fun1(5) @ The definition of fun2 essentially contains a copy of \texttt{z} (and \texttt{q} as well) to ensure that this works. The exception to this is objects at the top level such as \texttt{temp} above; the user is responsible for the retention of those via their answer to the ``save'' question at the end of an R session. The consequence of this is that the summary function created by a call to itemp will by default have copies of all of the external variables that it \emph{might} make use of, in this case all of the input arguments. The summary function is in fact self-contained and makes reference only to its input arguments (doing otherwise is bad programming, in my opinion) and so needs none of these. Setting the environment of the function to \texttt{.GlobalEnv} in essence tells R to treat the function as though it had been defined at top level, i.e., the input prompt, and thus not attach these extraneous copies. I first became aware of this issue when using a huge data set, and found that the saved output of the fit took up an inordinate amount of disk space due to data copies attached to the summary function. Do not take this as a critique of R environments in general. The rules governing them need to be responsive to a large ensemble of conditions; in this particular case the results are not ideal but in the main they are the best compromise possible. \subsection{Evaluation function} The evaluation function is called once per node. It needs to produce a deviance for the node along with a vector to be used as a label for the node. <<>>= etemp <- function(y, wt, parms) { wmean <- sum(y*wt)/sum(wt) rss <- sum(wt*(y-wmean)^2) list(label = wmean, deviance = rss) } @ As an example of a longer label, the gini splitting method for categorical outcomes returns both the chosen group and the full vector of estimated group probabilities. The deviance value that is returned does not need to be an actual deviance associated with a log-likelihood, any impurity measure for the node will work. However, the pruning algorithm used during tree construction will be most efficient if the value 0 corresponds to a perfectly pure node. (The pruning code decides when a branch would be futile and further computations on it can thus be avoided.) \subsection{Splitting function} The splitting function is where the work lies. It will be called once for every covariate at each potential split. The input arguments are \begin{description} \item[y] vector or matrix of response values \item[wt] vector of weights \item[x] vector of x values \item[parms] vector of user parameters, passed forward \item[continuous] if TRUE the x variable should be treated as continuous \end{description} The data will have been subset to include only the non-missing subset of x and y at the node, and if x is continuous all values will be in the sorted order of the x variable. If x is continuous the routine should return two vectors each of length $n-1$, where $n$ is the length of x: \begin{description} \item[goodness] the utility of the split, where larger numbers are better. A value of 0 signifies that no worthwhile split could be found (for instance if y were a constant). The $i$th value of goodness compares a split of observations 1 to $i$ versus $i+1$ to $n$. \item[direction] A vector of the same length with values of -1 and +1, where -1 suggests that values with y $<$ cutpoint be sent to the left side of the tree, and a value of +1 that values with y $<$ cutpoint be sent to the right. This is not critical, but sending larger values of y to the right, as is done in the code below, seems to make the final tree easier to read. \end{description} The reason for returning an entire vector of goodness values is that the parent code is responsible for handling the minimum node size constraint, and also for dealing with ties. When x is continuous the split routine actually has no reason to look at x. <<>>= stemp <- function(y, wt, x, parms, continuous) { # Center y n <- length(y) y <- y- sum(y*wt)/sum(wt) if (continuous) { # continuous x variable temp <- cumsum(y*wt)[-n] left.wt <- cumsum(wt)[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt goodness <- (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2) list(goodness = goodness, direction = sign(lmean)) } else { # Categorical X variable ux <- sort(unique(x)) wtsum <- tapply(wt, x, sum) ysum <- tapply(y*wt, x, sum) means <- ysum/wtsum # For anova splits, we can order the categories by their means # then use the same code as for a non-categorical ord <- order(means) n <- length(ord) temp <- cumsum(ysum[ord])[-n] left.wt <- cumsum(wtsum[ord])[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt list(goodness= (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2), direction = ux[ord]) } } @ The code above does the computations for all the split points at once by making use of two tricks. The first is to center the y values at zero (so the grand mean is zero), and the second takes advantage of the many ways to write the ``effect'' sum of squares for a simple two group anova. The key identity is \begin{equation} \sum (y_i - c)^2 = \sum (y_i - \overline y)^2 + n(c - \overline y)^2 \end{equation} If you have an old enough statistics book, this is used to show that for a 1-way anova the between groups sum of squares $SS_B$ is \begin{equation} SS_B = n_l(\overline y_l - \overline y)^2 + n_r(\overline y_r - \overline y)^2 \label{ssb} \end{equation} where $n_l$ is the number of observations in the left group, $\overline y_l$ the mean of $y$ in the left group, $\overline y$ the overall mean, and $n_r$ $\overline y_r$ the corresponding terms for the right hand group. Centering at zero makes $\overline y$ zero in \eqref{ssb}, and the terms then can be computed for all splits at once using the cumsum function. Extension of the formulas to case weights is left as an exercise for the reader. If the predictor variable x is categorical with $k$ classes then there are potentially $2^{k-1} -1$ different ways to split the node. However, for most splitting rules the optimal rule can be found by first ordering the groups by their average y value and then using the usual splitting rule on this ordered variable. For user mode rules this is assumed to be the case. The variable x is supplied as integer values 1, 2, \ldots, k. On return the direction vector should have $k$ values giving the ordering of the groups, and the goodness vector $k-1$ values giving the utility of the splits. \subsection{Test} We can test the above code to make sure that it gives the same answer as the built-in anova splitting method. <<>>= library(rpart) mystate <- data.frame(state.x77, region=state.region) names(mystate) <- casefold(names(mystate)) #remove mixed case ulist <- list(eval = etemp, split = stemp, init = itemp) fit1 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = ulist, minsplit = 10) fit2 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = 0) all.equal(fit1$frame, fit2$frame) all.equal(fit1$splits, fit2$splits) all.equal(fit1$csplit, fit2$csplit) all.equal(fit1$where, fit2$where) all.equal(fit1$cptable, fit2$cptable) @ The all.equal test can't be done on fit1 vs fit2 as a whole since their \texttt{call} component will differ. \section{Cross validation} To do cross-validation on user written rules one needs to use the \texttt{xpred.rpart} routine. This routine returns the predicted value(s) for each observation, predicted from a fit that did not include that observation. The result is a matrix with one row per subject and one column for each complexity parameter value. As an example we will replicate the cross-validation results for the anova model above. In order to get the same groupings we fix the xval group membership in advance. <<>>= xgroup <- rep(1:10, length = nrow(mystate)) xfit <- xpred.rpart(fit1, xgroup) xerror <- colMeans((xfit - mystate$murder)^2) fit2b <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = xgroup) topnode.error <- (fit2b$frame$dev/fit2b$frame$wt)[1] xerror.relative <- xerror/topnode.error all.equal(xerror.relative, fit2b$cptable[, 4], check.attributes = FALSE) @ \begin{figure} \myfig{usercode-fig1} \caption{Goodness of split for predicting income from illiteracy, using the state data.} \label{fig:state} \end{figure} <>= tdata <- mystate[order(mystate$illiteracy), ] n <- nrow(tdata) temp <- stemp(tdata$income, wt = rep(1, n), tdata$illiteracy, parms = NULL, continuous = TRUE) xx <- (tdata$illiteracy[-1] + tdata$illiteracy[-n])/2 plot(xx, temp$goodness, xlab = "Illiteracy cutpoint", ylab = "Goodness of split") lines(smooth.spline(xx, temp$goodness, df = 4), lwd = 2, lty = 2) @ \subsection{Smoothed anova} For any particular covariate consider a plot of x= split point vs y= goodness of split; figure \ref{fig:state} shows an example for the state data set, along with a smoothed curve. The plot points are very erratic. At one time we entertained the idea that a more stable split point would be found by finding the maximum value for a smoothed version of the plot. Exactly how to smooth is of course a major issue in such an endeavor. Modification of the anova splitting routine to test this is quite easy --- simply add a few lines to the stemp routine: \begin{verbatim} ... goodness= (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2) rx <- rank(x[-1]) #use only the ranks of x, to preserve invariance fit <- smooth.spline(rx, goodness, df=4) list(goodness= predict(fit, rx)$y, direction=sign(lmean)) } else { ... \end{verbatim} \section{Alternating logistic regression} Chen \cite{Chen07} used a mixed logistic regression model to fit clinical and genetic marker data. \begin{equation} E(y) = \frac{e^{\eta_1 + \eta_2}}{1+e^{\eta_1 + \eta_2}} \end{equation} where $\eta_1 = X\beta$ is a standard linear predictor based on clinical variables $X$ and $\eta_2$ is based on a tree model using a set of genetic markers $Z$. The solution was computed using alternate steps of an ordinary logistic regression on $X$ treating $\eta_2$ as an offset, and an rpart fit for $Z$ treating $\eta_1$ as an offset. For many splitting rules the initialization function can take care of offset terms once and for all by modifying the y vector, but this is not the case for logistic regression. In order to make the offset visible to the splitting function we create a 2 column ``response'' consisting of the original y vector in the first column and the offset in the second. <<>>= loginit <- function(y, offset, parms, wt) { if (is.null(offset)) offset <- 0 if (any(y != 0 & y != 1)) stop ('response must be 0/1') sfun <- function(yval, dev, wt, ylevel, digits ) { paste("events=", round(yval[,1]), ", coef= ", format(signif(yval[,2], digits)), ", deviance=" , format(signif(dev, digits)), sep = '')} environment(sfun) <- .GlobalEnv list(y = cbind(y, offset), parms = 0, numresp = 2, numy = 2, summary = sfun) } logeval <- function(y, wt, parms) { tfit <- glm(y[,1] ~ offset(y[,2]), binomial, weight = wt) list(label= c(sum(y[,1]), tfit$coef), deviance = tfit$deviance) } @ The evaluation function returns the number of positive responses along with the fitted coefficient. The splitting function attempts every possible logistic regression. A much faster version could almost certainly be written based on a score test, however. <<>>= logsplit <- function(y, wt, x, parms, continuous) { if (continuous) { # continuous x variable: do all the logistic regressions n <- nrow(y) goodness <- double(n-1) direction <- goodness temp <- rep(0, n) for (i in 1:(n-1)) { temp[i] <- 1 if (x[i] != x[i+1]) { tfit <- glm(y[,1] ~ temp + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance direction[i] <- sign(tfit$coef[2]) } } } else { # Categorical X variable # First, find out what order to put the categories in, which # will be the order of the coefficients in this model tfit <- glm(y[,1] ~ factor(x) + offset(y[,2]) - 1, binomial, weight = wt) ngrp <- length(tfit$coef) direction <- rank(rank(tfit$coef) + runif(ngrp, 0, 0.1)) #break ties # breaking ties -- if 2 groups have exactly the same p-hat, it # does not matter which order I consider them in. And the calling # routine wants an ordering vector. # xx <- direction[match(x, sort(unique(x)))] #relabel from small to large goodness <- double(length(direction) - 1) for (i in 1:length(goodness)) { tfit <- glm(y[,1] ~ I(xx > i) + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance } } list(goodness=goodness, direction=direction) } @ \begin{thebibliography}{9} \bibitem{Chen07} Chen J, Yu K, Hsing A and Therneau TM. \emph{A partially linear tree-based regression model for assessing complex joint gene-gene and gene-environment effects}, Genet Epidemiol, 2007(3), 238-51. \end{thebibliography} \end{document} rpart/inst/doc/usercode.R0000644000176000001440000001606212270777377015140 0ustar ripleyusers### R code from vignette source 'usercode.Rnw' ################################################### ### code chunk number 1: usercode.Rnw:26-28 ################################################### options(continue=" ", width=60) options(SweaveHooks=list(fig=function() par(mar=c(5.1, 4.1, .3, 1.1)))) ################################################### ### code chunk number 2: usercode.Rnw:85-99 ################################################### itemp <- function(y, offset, parms, wt) { if (is.matrix(y) && ncol(y) > 1) stop("Matrix response not allowed") if (!missing(parms) && length(parms) > 0) warning("parameter argument ignored") if (length(offset)) y <- y - offset sfun <- function(yval, dev, wt, ylevel, digits ) { paste(" mean=", format(signif(yval, digits)), ", MSE=" , format(signif(dev/wt, digits)), sep = '') } environment(sfun) <- .GlobalEnv list(y = c(y), parms = NULL, numresp = 1, numy = 1, summary = sfun) } ################################################### ### code chunk number 3: usercode.Rnw:155-163 ################################################### temp <- 4 fun1 <- function(x) { q <- 15 z <- 10 fun2 <- function(y) y + z + temp fun2(x^2) } fun1(5) ################################################### ### code chunk number 4: usercode.Rnw:194-199 ################################################### etemp <- function(y, wt, parms) { wmean <- sum(y*wt)/sum(wt) rss <- sum(wt*(y-wmean)^2) list(label = wmean, deviance = rss) } ################################################### ### code chunk number 5: usercode.Rnw:249-284 ################################################### stemp <- function(y, wt, x, parms, continuous) { # Center y n <- length(y) y <- y- sum(y*wt)/sum(wt) if (continuous) { # continuous x variable temp <- cumsum(y*wt)[-n] left.wt <- cumsum(wt)[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt goodness <- (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2) list(goodness = goodness, direction = sign(lmean)) } else { # Categorical X variable ux <- sort(unique(x)) wtsum <- tapply(wt, x, sum) ysum <- tapply(y*wt, x, sum) means <- ysum/wtsum # For anova splits, we can order the categories by their means # then use the same code as for a non-categorical ord <- order(means) n <- length(ord) temp <- cumsum(ysum[ord])[-n] left.wt <- cumsum(wtsum[ord])[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt list(goodness= (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2), direction = ux[ord]) } } ################################################### ### code chunk number 6: usercode.Rnw:327-342 ################################################### library(rpart) mystate <- data.frame(state.x77, region=state.region) names(mystate) <- casefold(names(mystate)) #remove mixed case ulist <- list(eval = etemp, split = stemp, init = itemp) fit1 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = ulist, minsplit = 10) fit2 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = 0) all.equal(fit1$frame, fit2$frame) all.equal(fit1$splits, fit2$splits) all.equal(fit1$csplit, fit2$csplit) all.equal(fit1$where, fit2$where) all.equal(fit1$cptable, fit2$cptable) ################################################### ### code chunk number 7: usercode.Rnw:358-369 ################################################### xgroup <- rep(1:10, length = nrow(mystate)) xfit <- xpred.rpart(fit1, xgroup) xerror <- colMeans((xfit - mystate$murder)^2) fit2b <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = xgroup) topnode.error <- (fit2b$frame$dev/fit2b$frame$wt)[1] xerror.relative <- xerror/topnode.error all.equal(xerror.relative, fit2b$cptable[, 4], check.attributes = FALSE) ################################################### ### code chunk number 8: fig1 ################################################### getOption("SweaveHooks")[["fig"]]() tdata <- mystate[order(mystate$illiteracy), ] n <- nrow(tdata) temp <- stemp(tdata$income, wt = rep(1, n), tdata$illiteracy, parms = NULL, continuous = TRUE) xx <- (tdata$illiteracy[-1] + tdata$illiteracy[-n])/2 plot(xx, temp$goodness, xlab = "Illiteracy cutpoint", ylab = "Goodness of split") lines(smooth.spline(xx, temp$goodness, df = 4), lwd = 2, lty = 2) ################################################### ### code chunk number 9: usercode.Rnw:438-458 ################################################### loginit <- function(y, offset, parms, wt) { if (is.null(offset)) offset <- 0 if (any(y != 0 & y != 1)) stop ('response must be 0/1') sfun <- function(yval, dev, wt, ylevel, digits ) { paste("events=", round(yval[,1]), ", coef= ", format(signif(yval[,2], digits)), ", deviance=" , format(signif(dev, digits)), sep = '')} environment(sfun) <- .GlobalEnv list(y = cbind(y, offset), parms = 0, numresp = 2, numy = 2, summary = sfun) } logeval <- function(y, wt, parms) { tfit <- glm(y[,1] ~ offset(y[,2]), binomial, weight = wt) list(label= c(sum(y[,1]), tfit$coef), deviance = tfit$deviance) } ################################################### ### code chunk number 10: usercode.Rnw:466-502 ################################################### logsplit <- function(y, wt, x, parms, continuous) { if (continuous) { # continuous x variable: do all the logistic regressions n <- nrow(y) goodness <- double(n-1) direction <- goodness temp <- rep(0, n) for (i in 1:(n-1)) { temp[i] <- 1 if (x[i] != x[i+1]) { tfit <- glm(y[,1] ~ temp + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance direction[i] <- sign(tfit$coef[2]) } } } else { # Categorical X variable # First, find out what order to put the categories in, which # will be the order of the coefficients in this model tfit <- glm(y[,1] ~ factor(x) + offset(y[,2]) - 1, binomial, weight = wt) ngrp <- length(tfit$coef) direction <- rank(rank(tfit$coef) + runif(ngrp, 0, 0.1)) #break ties # breaking ties -- if 2 groups have exactly the same p-hat, it # does not matter which order I consider them in. And the calling # routine wants an ordering vector. # xx <- direction[match(x, sort(unique(x)))] #relabel from small to large goodness <- double(length(direction) - 1) for (i in 1:length(goodness)) { tfit <- glm(y[,1] ~ I(xx > i) + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance } } list(goodness=goodness, direction=direction) } rpart/tests/0000755000176000001440000000000012270777377012617 5ustar ripleyusersrpart/tests/data.stagec0000644000176000001440000001665012021264246014704 0ustar ripleyusers 6.130047 0 64 2 10.26 2 4 1 9.374401 0 62 1 NA 3 8 3 5.240246 1 59 2 9.99 3 7 1 3.162217 1 62 2 3.57 2 4 1 1.908282 1 64 2 22.56 4 8 2 4.848733 0 69 1 6.14 3 7 1 5.790554 0 75 2 13.69 2 NA 2 7.304585 0 71 2 NA 3 7 3 3.655030 1 73 2 11.77 3 6 1 15.87132 0 64 2 27.27 3 7 2 6.299794 0 65 2 19.34 3 7 2 2.910335 1 58 2 14.82 4 8 2 1.527720 1 70 2 10.22 3 8 1 14.46132 0 67 2 15.66 2 6 2 4.238193 1 66 2 17.79 3 7 2 1.738535 1 74 2 11.11 3 8 1 5.004791 0 70 2 11.44 2 5 1 13.17727 0 57 2 14.78 2 4 2 10.87200 0 63 2 54.93 3 8 2 12.98015 0 65 2 24.58 3 7 2 11.37303 0 62 2 27.79 2 5 2 2.647501 1 72 2 14.86 3 6 2 9.812457 0 64 1 10.51 2 5 1 3.411362 1 67 NA 14.22 2 6 2 7.638603 1 64 2 15.28 2 5 2 4.799452 1 70 2 16.91 3 6 2 3.674195 1 58 1 17.87 3 7 2 13.89185 0 57 2 12.13 3 6 1 4.881587 1 54 1 17.25 2 5 2 15.92060 0 61 1 16.53 3 7 2 2.850102 1 68 2 17.49 2 4 2 9.273100 0 64 1 3.85 3 6 3 6.510609 0 70 1 7.88 2 6 1 1.686516 0 64 2 16.64 2 5 2 6.932238 0 66 2 13.19 3 7 2 5.492128 0 61 2 9.42 2 5 1 5.719370 0 70 2 22.79 2 5 2 4.076659 1 63 2 11.37 2 6 1 0.3066393 1 59 2 3.77 3 6 3 1.095140 1 66 1 13.76 3 6 2 7.783710 0 53 2 14.52 2 5 2 2.023271 1 62 2 7.55 3 7 1 7.301847 0 69 2 8.46 2 5 1 13.54688 0 63 2 7.66 3 7 1 11.71800 0 61 2 8.40 2 5 1 8.657084 0 70 1 4.43 1 3 1 3.356605 0 61 2 10.37 3 7 1 6.275154 0 62 2 10.82 2 6 1 10.61738 0 55 2 7.81 2 5 1 9.253935 0 61 2 11.23 2 5 1 7.906913 0 63 2 13.99 3 6 2 4.936345 0 67 2 6.41 2 5 1 13.40725 0 59 2 16.05 2 5 2 17.69199 0 58 2 22.97 3 6 2 1.026694 1 61 1 2.40 4 10 1 0.2546201 1 47 2 11.92 4 10 1 13.07049 0 65 2 NA 3 6 2 16.70088 0 56 2 5.29 1 3 1 4.479124 0 63 2 5.75 2 5 1 3.438740 1 69 1 7.64 3 8 3 2.376454 1 50 1 16.81 3 7 2 6.784394 0 70 2 29.56 2 5 2 2.997946 1 55 1 13.35 3 6 3 10.36276 0 55 2 8.10 2 5 1 11.77002 0 62 1 12.62 2 5 1 8.049281 1 66 2 14.14 2 5 2 5.664613 0 71 1 10.16 2 6 1 6.053388 0 63 2 17.21 2 5 2 5.201916 0 54 2 11.35 2 6 1 6.228610 0 65 2 11.35 2 5 1 11.36481 0 59 2 7.61 2 5 1 6.986995 1 61 2 20.82 3 6 2 6.464065 0 65 1 12.93 3 7 1 0.5366188 1 57 1 21.75 3 7 2 6.067077 0 69 2 8.58 2 6 1 5.111567 1 53 1 14.94 3 7 2 3.660506 1 48 2 17.16 3 7 2 12.16974 0 57 2 23.62 3 8 2 7.707049 1 63 2 16.06 3 9 2 7.028062 0 52 2 7.15 2 7 1 7.230663 1 57 2 13.21 3 8 2 4.350444 1 62 2 11.35 3 6 1 6.694045 0 54 2 8.11 2 4 1 6.765229 1 67 2 11.18 3 7 1 5.185489 1 65 2 24.84 3 7 2 8.662559 0 67 2 7.67 3 6 1 10.79808 0 72 1 6.68 2 NA 1 2.614647 1 66 2 15.23 3 8 2 10.87474 0 72 2 6.80 2 5 1 5.637234 1 60 2 14.58 3 7 2 10.09993 0 70 2 13.17 2 6 2 7.208761 0 63 1 9.76 2 5 1 10.17659 0 64 1 7.61 2 NA 1 7.718001 1 62 2 38.05 3 7 2 2.696783 1 61 1 13.87 3 6 2 1.949349 1 64 2 21.20 3 7 2 3.630390 0 64 1 17.96 3 7 2 8.229979 0 68 2 27.14 3 9 2 9.174537 0 62 1 6.74 2 5 1 6.121834 0 69 2 11.21 3 8 1 8.698151 0 59 2 20.22 3 6 2 7.411362 1 66 1 15.35 3 8 2 1.645448 1 53 1 16.79 3 9 2 8.353182 0 59 2 8.76 2 6 1 4.717317 1 58 2 13.23 2 6 2 5.746748 0 61 2 34.01 2 7 2 3.156741 1 65 NA 14.68 3 8 2 4.944558 0 67 1 17.95 3 8 2 3.449692 1 57 1 23.34 3 8 2 0.9883642 1 55 2 10.25 3 7 3 5.445585 1 57 2 NA 3 8 3 4.654346 0 57 1 15.10 3 7 2 6.264202 0 68 1 26.55 2 6 2 6.967830 0 67 2 7.78 2 6 1 1.522245 1 60 1 NA 4 9 3 7.055441 0 63 2 21.20 3 7 2 6.045174 0 69 2 7.93 3 6 1 3.843942 0 54 2 10.58 3 8 1 6.516084 0 66 2 5.92 2 5 1 3.112936 0 59 2 5.08 3 7 1 6.795345 0 62 2 13.10 3 8 2 6.669404 0 73 1 41.31 3 8 2 5.749486 1 65 2 11.29 3 7 1 1.516769 1 67 2 14.02 3 7 2 5.169062 0 75 2 12.46 3 7 1 1.253935 1 70 2 13.69 3 8 2 6.160164 0 59 2 12.06 2 5 1 6.480492 0 73 2 13.01 3 6 1 1.163586 1 66 2 13.21 2 6 2 5.697467 0 66 2 10.43 3 5 1 3.397672 1 65 2 NA 3 7 3 5.629021 0 66 1 13.33 2 5 2 5.971252 0 66 2 37.49 3 7 2 5.119781 0 59 2 11.69 3 7 1 6.004106 0 52 2 9.90 2 4 1 5.368925 0 68 2 13.01 2 5 1 2.431211 0 63 2 4.81 3 8 1 4.235455 0 67 2 14.71 2 5 2 5.541409 0 59 1 9.01 2 5 1 5.363449 0 57 1 10.90 3 6 1 8.180698 0 62 2 10.72 3 7 1 10.20123 0 63 2 5.14 2 5 1 2.450376 1 73 2 46.92 4 9 2 7.898699 0 68 2 NA 2 5 3 5.634496 0 51 2 9.59 3 6 1 2.058863 1 56 2 9.01 3 7 1 rpart/tests/treble4.R0000644000176000001440000000455412050721510014261 0ustar ripleyusers# # Treble test for class trees with 2 outcomes # # fit1 and fit1b failed equality because .7 and .3 are not easily represented # in binary. Thus a complelxity param was 4e-17 (basically 0, but enough # to cause a split where it shouldn't be). Eric Lunde 2005-08-03 library(rpart) control <- rpart.control(maxsurrogate=0, cp=1e-15, xval=0) fit1 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=control, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) wts <- rep(3, nrow(kyphosis)) fit1b <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=control, weights=wts, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) fit1b$frame$wt <- fit1b$frame$wt/3 fit1b$frame$dev <- fit1b$frame$dev/3 fit1b$frame$yval2[,2:3] <- fit1b$frame$yval2[,2:3]/3 fit1b$splits[,3] <- fit1b$splits[,3]/3 fit1b$variable.importance <- fit1b$variable.importance/3 all.equal(fit1[-3], fit1b[-3]) #all but the "call" # Now for a set of non-equal weights nn <- nrow(kyphosis) pseudo <- double(nn) pseudo[1] <- pi/6 for (i in 2:nn) pseudo[i] <- 4*pseudo[i-1]*(1-pseudo[i-1]) wts <- rep(1:7, length=nn) temp <- rep(1:nn, wts) #row replicates xgrp <- rep(1:10, length=nn)[order(pseudo)] xgrp2<- rep(xgrp, wts) # The cp value stops one last split where the two predictors are # completely equal in importance (perfect surrogates), but the # weighted and unweighted pick a different one due to round off error tempc <- rpart.control(minsplit=2, xval=xgrp2, maxsurrogate=0, cp=.039) # Direct: replicate rows in the data set, and use unweighted fit2 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis[temp,], control=tempc, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) # Weighted tempc <- rpart.control(minsplit=2, xval=xgrp, maxsurrogate=0, cp=.039) fit2b <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=tempc, weights=wts, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) all.equal(fit2$frame[,-2], fit2b$frame[,-2]) # the "n" component won't match all.equal(fit2$cptable, fit2b$cptable) all.equal(fit2$splits[,-1],fit2b$splits[,-1]) all.equal(fit2$csplit, fit2b$csplit) rpart/tests/testall.R0000644000176000001440000000636212027073300014370 0ustar ripleyusers# # This is a set of tests, with printout, that tries # to exercise all of the splitting rules # It's less formal than the others in this directory, but covers # more. # For all of the cross-validations I set xgroups explicitly, so as # to avoid any changes in random number allocation of the groups. library(rpart) require(survival) options(digits=4) #avoid trivial rounding changes across R versions # # # Survival, using the stagec data # # Time to progression in years # status 1=progressed, 0= censored # age # early endocrine therapy 1=no 2=yes # % of cells in g2 phase, from flow cytometry # tumor grade (Farrow) 1,2,3,4 # Gleason score (competing grading system) # ploidy xgroup <- rep(1:10, length=nrow(stagec)) fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, method="poisson", control=rpart.control(usesurrogate=0, cp=0, xval=xgroup)) fit1 summary(fit1) fit2 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, xval=xgroup) fit2 summary(fit2) # # Continuous y variable # Use deterministic xgroups: the first group is the 1st, 11th, 21st, etc # smallest obs, the second is 2, 12, 22, ... mystate <- data.frame(state.x77, region=factor(state.region)) names(mystate) <- c("population","income" , "illiteracy","life" , "murder", "hs.grad", "frost", "area", "region") xvals <- 1:nrow(mystate) xvals[order(mystate$income)] <- rep(1:10, length=nrow(mystate)) fit4 <- rpart(income ~ population + region + illiteracy +life + murder + hs.grad + frost , mystate, control=rpart.control(minsplit=10, xval=xvals)) summary(fit4) # # Check out xpred.rpart # meany <- mean(mystate$income) xpr <- xpred.rpart(fit4, xval=xvals) xpr2 <- (xpr - mystate$income)^2 risk0 <- mean((mystate$income - meany)^2) xpmean <- as.vector(apply(xpr2, 2, mean)) #kill the names all.equal(xpmean/risk0, as.vector(fit4$cptable[,'xerror'])) xpstd <- as.vector(apply((sweep(xpr2, 2, xpmean))^2, 2, sum)) xpstd <- sqrt(xpstd)/(50*risk0) all.equal(xpstd, as.vector(fit4$cptable[,'xstd'])) # # recreate subset #3 of the xval # tfit4 <- rpart(income ~ population + region + illiteracy +life + murder + hs.grad + frost , mystate, subset=(xvals!=3), control=rpart.control(minsplit=10, xval=0)) tpred <- predict(tfit4, mystate[xvals==3,]) all.equal(tpred, xpr[xvals==3,ncol(xpr)]) # How much does this differ from the "real" formula, more complex, # found on page 309 of Breiman et al. ? #xtemp <- (xpr2/outer(rep(1,50),xpmean)) - ((mystate$income - meany)^2)/risk0 #real.se<- xpmean* sqrt(apply(xtemp^2,2,sum))/(risk0*50) # Simple yes/no classification model fit5 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, xval=xgroup) fit5 fit6 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, parm=list(prior=c(.5,.5)), xval=xgroup) summary(fit6) # # Fit a classification model to the car data. # Now, since Reliability is an ordered category, this model doesn't # make a lot of statistical sense, but it does test out some # areas of the code that nothing else does # xcar <- rep(1:8, length=nrow(cu.summary)) carfit <- rpart(Reliability ~ Price + Country + Mileage + Type, method='class', data=cu.summary, xval=xcar) summary(carfit) rpart/tests/cost.Rout.save0000644000176000001440000000320212026412130015340 0ustar ripleyusers R version 2.15.0 (2012-03-30) Copyright (C) 2012 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(rpart) > require(survival) Loading required package: survival Loading required package: splines > aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) > > # > # Check out using costs > # > fit1 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + + meal.cal + wt.loss, data=lung, + maxdepth=1, maxcompete=6, xval=0) > > fit2 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + + meal.cal + wt.loss, data=lung, + maxdepth=1, maxcompete=6, xval=0, cost=(1+ 1:7/10)) > > temp1 <- fit1$splits[1:7,] > temp2 <- fit2$splits[1:7,] > temp3 <- c('age', 'sex', 'ph.ecog', 'ph.karno', 'pat.karno', 'meal.cal', + 'wt.loss') > indx1 <- match(temp3, dimnames(temp1)[[1]]) > indx2 <- match(temp3, dimnames(temp2)[[1]]) > aeq(temp1[indx1,1], temp2[indx2,1]) #same n's ? [1] TRUE > aeq(temp1[indx1,3], temp2[indx2,3]*(1+ 1:7/10)) #scaled importance [1] TRUE > > > > proc.time() user system elapsed 0.288 0.067 0.407 rpart/tests/priors.Rout.save0000644000176000001440000000636112026412147015727 0ustar ripleyusers R version 2.15.0 (2012-03-30) Copyright (C) 2012 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # > # A hard-core test of losses and priors > # Simple data set where I know what the answers must be > # > library(rpart) > aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) > > dummy <- c(3,1,4,1,5,9,2,6,5,3,5,8,9,7,9)/5 > pdata <- data.frame(y=factor(rep(1:3, 5)), + x1 = 1:15, + x2 = c(1:6, 1:6, 1:3), + x3 = (rep(1:3, 5) + dummy)*10) > > pdata$x3[c(1,5,10)] <- NA > pdata$y[15] <- 1 # make things unbalanced > > pfit <- rpart(y ~ x1 + x2 + x3, pdata, + cp=0, xval=0, minsplit=5, maxdepth=1, + parms=list(prior=c(.2, .3, .5), + loss =matrix(c(0,2,2,2,0,6,1,1,0), 3,3,byrow=T))) > > # > # See section 12.1 of the report for these numbers > # > > ntot <- c(6,5,4) > phat <- c(6,5,4)/15 # observed class probabilities > prior <- c(.2, .3, .5) # priors > aprior <- c(4,12,5)/21 # altered priors > lmat <- matrix(c(0,1,2, 2,0,1, 2,6,0), ncol=3) #loss matrix > > gini <- function(p) 1-sum(p^2) > loss <- function(n, class) sum(n * lmat[,class]) > > phat <- function(n, ntot=c(6,5,4), prior=c(.2, .3, .5)) { + n*prior/ntot + } > > # Are the losses correct? > # Class counts for the two children are (4,4,0) and (2,1,4), when > # using surrogates > aeq(pfit$frame$dev/15, c(loss(prior,2), loss(phat(c(4,4,0)),2), + loss(phat(c(2,1,4)),3))) [1] TRUE > # Node probabilities? > aeq(pfit$frame$yval2[,8] , + c(1, sum(phat(c(4,4,0))), sum(phat(c(2,1,4))))) [1] TRUE > > aeq(pfit$frame$yval2[,5:7] , rbind(prior, + phat(c(4,4,0))/ sum(phat(c(4,4,0))), + phat(c(2,1,4))/ sum(phat(c(2,1,4))))) [1] TRUE > > # Now the node and class probs, under altered priors > phat2 <- function(n, ntot=c(6,5,4), prior=aprior) { + n*prior/ntot + } > > # Use these to create the gini losses, base data, and for the best > # splits on variables 1, 2, 3 > gfun <- function(n) { #The gini loss for a node, given the counts + temp <- phat2(n) + sum(temp) * gini(temp/sum(temp)) + } > > # These are in order x3, x2, x1 (best split to worst) > # Note that for x3, missing values cause the "parent" to be viewed as > # having 12 obs instead of 15. > # Each line is gini(parent) - gini(children) > aeq(pfit$splits[1:3, 3], + 15* c(gfun(c(4,4,4)) - (gfun(c(3,4,0)) + gfun(c(1,0,4))), + gfun(c(6,5,4)) - (gfun(c(6,5,2)) + gfun(c(0,0,2))), + gfun(c(6,5,4)) - (gfun(c(4,4,4)) + gfun(c(2,1,0))))) [1] TRUE > > proc.time() user system elapsed 0.211 0.059 0.315 rpart/tests/backticks.Rout.save0000644000176000001440000000256412027066414016353 0ustar ripleyusers R version 2.15.0 (2012-03-30) Copyright (C) 2012 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## allow backticks in rpart.matrix: see > ## https://stat.ethz.ch/pipermail/r-help/2012-May/314081.html > > library(rpart) > Iris <- iris > names(Iris) <- sub(".", " ", names(iris), fixed=TRUE) > rpart(Species ~ `Sepal Length`, data = Iris) n= 150 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333) 2) Sepal Length< 5.45 52 7 setosa (0.86538462 0.11538462 0.01923077) * 3) Sepal Length>=5.45 98 49 virginica (0.05102041 0.44897959 0.50000000) 6) Sepal Length< 6.15 43 15 versicolor (0.11627907 0.65116279 0.23255814) * 7) Sepal Length>=6.15 55 16 virginica (0.00000000 0.29090909 0.70909091) * > > proc.time() user system elapsed 0.234 0.064 0.328 rpart/tests/xpred2.R0000644000176000001440000000231012026624161014117 0ustar ripleyusers# # Test out the "return.all" argument of xpred # The data set has the virtue of continuous, categorical, and missings # library(rpart) require(survival) fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, method='poisson') xgrp <- rep(1:3, length=nrow(stagec)) # explicitly set the xval groups xfit1 <- xpred.rpart(fit1, xval=xgrp, return.all=T) xfit2 <- array(0, dim=dim(xfit1)) cplist <- as.numeric(dimnames(xfit1)[[2]]) for (i in 1:3) { tfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, method='poisson', subset=(xgrp !=i)) # xvals are actually done on the absolute risk (node's risk /n), not on # the rescaled risk ((node risk)/ (top node risk)) which is the basis # for the printed CP. To get the right answer we need to rescale. cp2 <- cplist * (fit1$frame$dev[1] / fit1$frame$n[1]) / (tfit$frame$dev[1] / tfit$frame$n[1]) for (j in 1:length(cp2)) { tfit2 <- prune(tfit, cp=cp2[j]) temp <- predict(tfit2, newdata=stagec[xgrp==i,], type='matrix') xfit2[xgrp==i, j,] <- temp } } all.equal(xfit1, xfit2, check.attributes=FALSE) rpart/tests/xpred1.R0000644000176000001440000000204412026410242014113 0ustar ripleyusers# # Test out the "return.all" argument of xpred # this is a very small test case for debugging # library(rpart) tdata <- data.frame(y=1:12, x1= 12:1, x2=c(1,1,5,5,4,4,9,9,7,7,3,3)) xgrp <- rep(1:3, length=12) fit1 <- rpart(y ~ x1 + x2, tdata, minsplit=6) xfit1 <- xpred.rpart(fit1, xval=xgrp, return.all=T) xfit2 <- array(0, dim=dim(xfit1)) cplist <- as.numeric(dimnames(xfit1)[[2]]) for (i in 1:3) { tfit <- rpart(y ~ x1+x2, tdata, subset=(xgrp !=i), minsplit=6) # xvals are actually done on the absolute risk (node's risk /n), not on # the rescaled risk ((node risk)/ (top node risk)) which is the basis # for the printed CP. To get the right answer we need to rescale. cp2 <- cplist * (fit1$frame$dev[1] / fit1$frame$n[1]) / (tfit$frame$dev[1] / tfit$frame$n[1]) for (j in 1:length(cp2)) { tfit2 <- prune(tfit, cp=cp2[j]) temp <- predict(tfit2, newdata=tdata[xgrp==i,], type='matrix') xfit2[xgrp==i, j] <- temp } } all.equal(xfit1, xfit2, check.attributes=FALSE) rpart/tests/xpred2.Rout.save0000644000176000001440000000402512027066511015611 0ustar ripleyusers R version 2.15.0 (2012-03-30) Copyright (C) 2012 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-unknown-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # > # Test out the "return.all" argument of xpred > # The data set has the virtue of continuous, categorical, and missings > # > library(rpart) > require(survival) Loading required package: survival Loading required package: splines > > fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, method='poisson') > > xgrp <- rep(1:3, length=nrow(stagec)) # explicitly set the xval groups > > xfit1 <- xpred.rpart(fit1, xval=xgrp, return.all=T) > xfit2 <- array(0, dim=dim(xfit1)) > cplist <- as.numeric(dimnames(xfit1)[[2]]) > > for (i in 1:3) { + tfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, method='poisson', subset=(xgrp !=i)) + # xvals are actually done on the absolute risk (node's risk /n), not on + # the rescaled risk ((node risk)/ (top node risk)) which is the basis + # for the printed CP. To get the right answer we need to rescale. + cp2 <- cplist * (fit1$frame$dev[1] / fit1$frame$n[1]) / + (tfit$frame$dev[1] / tfit$frame$n[1]) + + for (j in 1:length(cp2)) { + tfit2 <- prune(tfit, cp=cp2[j]) + temp <- predict(tfit2, newdata=stagec[xgrp==i,], type='matrix') + xfit2[xgrp==i, j,] <- temp + } + } > > all.equal(xfit1, xfit2, check.attributes=FALSE) [1] TRUE > > proc.time() user system elapsed 0.449 0.072 0.558 rpart/tests/cost.R0000644000176000001440000000147412026164011013666 0ustar ripleyuserslibrary(rpart) require(survival) aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) # # Check out using costs # fit1 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + meal.cal + wt.loss, data=lung, maxdepth=1, maxcompete=6, xval=0) fit2 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + meal.cal + wt.loss, data=lung, maxdepth=1, maxcompete=6, xval=0, cost=(1+ 1:7/10)) temp1 <- fit1$splits[1:7,] temp2 <- fit2$splits[1:7,] temp3 <- c('age', 'sex', 'ph.ecog', 'ph.karno', 'pat.karno', 'meal.cal', 'wt.loss') indx1 <- match(temp3, dimnames(temp1)[[1]]) indx2 <- match(temp3, dimnames(temp2)[[1]]) aeq(temp1[indx1,1], temp2[indx2,1]) #same n's ? aeq(temp1[indx1,3], temp2[indx2,3]*(1+ 1:7/10)) #scaled importance rpart/tests/testall.Rout.save0000644000176000001440000011477512055412177016077 0ustar ripleyusers R Under development (unstable) (2012-11-27 r61172) -- "Unsuffered Consequences" Copyright (C) 2012 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-apple-darwin11.4.2/x86_64 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # > # This is a set of tests, with printout, that tries > # to exercise all of the splitting rules > # It's less formal than the others in this directory, but covers > # more. > # For all of the cross-validations I set xgroups explicitly, so as > # to avoid any changes in random number allocation of the groups. > > library(rpart) > require(survival) Loading required package: survival Loading required package: splines > options(digits=4) #avoid trivial rounding changes across R versions > > # > # > # Survival, using the stagec data > # > # Time to progression in years > # status 1=progressed, 0= censored > # age > # early endocrine therapy 1=no 2=yes > # % of cells in g2 phase, from flow cytometry > # tumor grade (Farrow) 1,2,3,4 > # Gleason score (competing grading system) > # ploidy > xgroup <- rep(1:10, length=nrow(stagec)) > fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, method="poisson", + control=rpart.control(usesurrogate=0, cp=0, xval=xgroup)) > fit1 n= 146 node), split, n, deviance, yval * denotes terminal node 1) root 146 193.400 0.058490 2) grade< 2.5 61 46.000 0.021270 4) g2< 11.36 33 9.303 0.007174 8) g2>=6.545 26 1.847 0.004462 * 9) g2< 6.545 7 5.883 0.027860 * 5) g2>=11.36 27 27.880 0.044870 10) g2>=14.37 15 12.430 0.030940 * 11) g2< 14.37 12 13.690 0.067870 * 3) grade>=2.5 85 122.600 0.094400 6) age>=56.5 75 104.700 0.082840 12) g2>=22.77 12 14.830 0.039530 * 13) g2< 22.77 57 76.110 0.100300 26) gleason< 7.5 41 55.810 0.076860 52) g2< 13.47 23 26.800 0.050830 104) g2>=11.52 7 5.289 0.030820 * 105) g2< 11.52 16 20.270 0.063870 * 53) g2>=13.47 18 25.520 0.112300 * 27) gleason>=7.5 16 15.190 0.164400 * 7) age< 56.5 10 11.420 0.196900 * > summary(fit1) Call: rpart(formula = Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, method = "poisson", control = rpart.control(usesurrogate = 0, cp = 0, xval = xgroup)) n= 146 CP nsplit rel error xerror xstd 1 0.128372 0 1.0000 1.0120 0.06329 2 0.052298 1 0.8716 0.9220 0.07170 3 0.045608 3 0.7670 0.9728 0.07846 4 0.026442 4 0.7214 0.9732 0.08052 5 0.018049 5 0.6950 0.9725 0.08388 6 0.009068 6 0.6769 0.9698 0.08532 7 0.008132 7 0.6679 0.9920 0.08795 8 0.006412 8 0.6597 0.9853 0.08800 9 0.000000 9 0.6533 1.0077 0.08952 Variable importance grade g2 gleason ploidy age eet 27 27 23 12 10 1 Node number 1: 146 observations, complexity param=0.1284 events=54, estimated rate=0.05849 , mean deviance=1.325 left son=2 (61 obs) right son=3 (85 obs) Primary splits: grade < 2.5 to the left, improve=24.880, (0 missing) gleason < 5.5 to the left, improve=21.630, (3 missing) ploidy splits as LRR, improve=13.020, (0 missing) g2 < 13.2 to the left, improve=11.450, (7 missing) age < 53.5 to the right, improve= 2.484, (0 missing) Surrogate splits: gleason < 5.5 to the left, agree=0.863, adj=0.672, (0 split) ploidy splits as LRR, agree=0.644, adj=0.148, (0 split) g2 < 9.945 to the left, agree=0.630, adj=0.115, (0 split) age < 66.5 to the right, agree=0.589, adj=0.016, (0 split) Node number 2: 61 observations, complexity param=0.04561 events=9, estimated rate=0.02127 , mean deviance=0.7542 left son=4 (33 obs) right son=5 (27 obs), 1 observation remains Primary splits: g2 < 11.36 to the left, improve=8.9650, (1 missing) ploidy splits as LRL, improve=7.4700, (0 missing) age < 68.5 to the right, improve=3.9560, (0 missing) gleason < 5.5 to the left, improve=1.8010, (3 missing) eet < 1.5 to the left, improve=0.5444, (1 missing) Surrogate splits: ploidy splits as LR-, agree=0.917, adj=0.815, (0 split) age < 65.5 to the left, agree=0.617, adj=0.148, (0 split) Node number 3: 85 observations, complexity param=0.0523 events=45, estimated rate=0.0944 , mean deviance=1.442 left son=6 (75 obs) right son=7 (10 obs) Primary splits: age < 56.5 to the right, improve=7.3190, (0 missing) g2 < 22.76 to the right, improve=6.8420, (6 missing) gleason < 8.5 to the left, improve=4.8530, (0 missing) ploidy splits as LLR, improve=1.7320, (0 missing) eet < 1.5 to the right, improve=0.9628, (1 missing) Node number 4: 33 observations, complexity param=0.008132 events=1, estimated rate=0.007174 , mean deviance=0.2819 left son=8 (26 obs) right son=9 (7 obs) Primary splits: g2 < 6.545 to the right, improve=3.1310, (0 missing) age < 62.5 to the right, improve=1.3520, (0 missing) eet < 1.5 to the left, improve=0.6605, (0 missing) gleason < 5.5 to the right, improve=0.4889, (2 missing) Surrogate splits: grade < 1.5 to the right, agree=0.848, adj=0.286, (0 split) Node number 5: 27 observations, complexity param=0.009068 events=8, estimated rate=0.04487 , mean deviance=1.033 left son=10 (15 obs) right son=11 (12 obs) Primary splits: g2 < 14.37 to the right, improve=1.820, (0 missing) gleason < 5.5 to the left, improve=1.698, (1 missing) age < 62.5 to the left, improve=1.136, (0 missing) Surrogate splits: ploidy splits as RL-, agree=0.741, adj=0.417, (0 split) age < 65 to the left, agree=0.630, adj=0.167, (0 split) gleason < 5.5 to the left, agree=0.630, adj=0.167, (0 split) Node number 6: 75 observations, complexity param=0.0523 events=37, estimated rate=0.08284 , mean deviance=1.397 left son=12 (12 obs) right son=13 (57 obs), 6 observations remain Primary splits: g2 < 22.76 to the right, improve=4.8580, (6 missing) gleason < 7.5 to the left, improve=4.1030, (0 missing) age < 69.5 to the left, improve=2.7250, (0 missing) ploidy splits as LRR, improve=0.7858, (0 missing) eet < 1.5 to the right, improve=0.1992, (1 missing) Node number 7: 10 observations events=8, estimated rate=0.1969 , mean deviance=1.142 Node number 8: 26 observations events=0, estimated rate=0.004462 , mean deviance=0.07105 Node number 9: 7 observations events=1, estimated rate=0.02786 , mean deviance=0.8404 Node number 10: 15 observations events=3, estimated rate=0.03094 , mean deviance=0.8289 Node number 11: 12 observations events=5, estimated rate=0.06787 , mean deviance=1.141 Node number 12: 12 observations events=4, estimated rate=0.03953 , mean deviance=1.236 Node number 13: 57 observations, complexity param=0.02644 events=30, estimated rate=0.1003 , mean deviance=1.335 left son=26 (41 obs) right son=27 (16 obs) Primary splits: gleason < 7.5 to the left, improve=5.40700, (0 missing) g2 < 13.2 to the left, improve=4.46300, (0 missing) ploidy splits as LRR, improve=3.49400, (0 missing) age < 69.5 to the left, improve=3.12800, (0 missing) eet < 1.5 to the left, improve=0.04903, (1 missing) Surrogate splits: grade < 3.5 to the left, agree=0.772, adj=0.187, (0 split) Node number 26: 41 observations, complexity param=0.01805 events=18, estimated rate=0.07686 , mean deviance=1.361 left son=52 (23 obs) right son=53 (18 obs) Primary splits: g2 < 13.48 to the left, improve=3.57000, (0 missing) ploidy splits as LRR, improve=3.05800, (0 missing) age < 65.5 to the left, improve=0.68120, (0 missing) eet < 1.5 to the left, improve=0.09244, (0 missing) gleason < 6.5 to the right, improve=0.01761, (0 missing) Surrogate splits: eet < 1.5 to the right, agree=0.634, adj=0.167, (0 split) age < 58.5 to the right, agree=0.585, adj=0.056, (0 split) Node number 27: 16 observations events=12, estimated rate=0.1644 , mean deviance=0.9493 Node number 52: 23 observations, complexity param=0.006412 events=7, estimated rate=0.05083 , mean deviance=1.165 left son=104 (7 obs) right son=105 (16 obs) Primary splits: g2 < 11.52 to the right, improve=1.41100, (0 missing) age < 62.5 to the right, improve=1.24600, (0 missing) gleason < 6.5 to the left, improve=0.02047, (0 missing) Surrogate splits: age < 71 to the right, agree=0.826, adj=0.429, (0 split) ploidy splits as RLR, agree=0.739, adj=0.143, (0 split) Node number 53: 18 observations events=11, estimated rate=0.1123 , mean deviance=1.418 Node number 104: 7 observations events=1, estimated rate=0.03082 , mean deviance=0.7555 Node number 105: 16 observations events=6, estimated rate=0.06387 , mean deviance=1.267 > > fit2 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, xval=xgroup) > fit2 n= 146 node), split, n, deviance, yval * denotes terminal node 1) root 146 192.100 1.0000 2) grade< 2.5 61 44.800 0.3634 4) g2< 11.36 33 9.117 0.1230 * 5) g2>=11.36 28 27.600 0.7346 10) gleason< 5.5 20 14.300 0.5304 * 11) gleason>=5.5 8 11.090 1.3070 * 3) grade>=2.5 85 122.400 1.6150 6) age>=56.5 75 103.100 1.4260 12) gleason< 7.5 50 66.120 1.1410 24) g2< 13.47 24 27.200 0.8007 * 25) g2>=13.47 26 36.790 1.4570 50) g2>=17.91 15 20.330 0.9790 * 51) g2< 17.91 11 13.460 2.1710 * 13) gleason>=7.5 25 33.490 2.0310 26) g2>=15.29 10 11.590 1.2160 * 27) g2< 15.29 15 18.940 2.7050 * 7) age< 56.5 10 13.770 3.1820 * > summary(fit2) Call: rpart(formula = Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, xval = xgroup) n= 146 CP nsplit rel error xerror xstd 1 0.12946 0 1.0000 1.0100 0.07108 2 0.04206 1 0.8705 0.8919 0.07420 3 0.02920 2 0.8285 0.9239 0.08004 4 0.01799 3 0.7993 0.9293 0.08292 5 0.01541 4 0.7813 0.9866 0.09214 6 0.01335 5 0.7659 1.0007 0.09161 7 0.01151 7 0.7392 0.9983 0.09065 8 0.01000 8 0.7277 1.0130 0.09176 Variable importance grade gleason g2 ploidy age eet 27 25 22 13 11 2 Node number 1: 146 observations, complexity param=0.1295 events=54, estimated rate=1 , mean deviance=1.316 left son=2 (61 obs) right son=3 (85 obs) Primary splits: grade < 2.5 to the left, improve=24.920, (0 missing) gleason < 5.5 to the left, improve=21.350, (3 missing) ploidy splits as LRR, improve=13.790, (0 missing) g2 < 13.2 to the left, improve=12.310, (7 missing) age < 58.5 to the right, improve= 2.684, (0 missing) Surrogate splits: gleason < 5.5 to the left, agree=0.863, adj=0.672, (0 split) ploidy splits as LRR, agree=0.644, adj=0.148, (0 split) g2 < 9.945 to the left, agree=0.630, adj=0.115, (0 split) age < 66.5 to the right, agree=0.589, adj=0.016, (0 split) Node number 2: 61 observations, complexity param=0.04206 events=9, estimated rate=0.3634 , mean deviance=0.7344 left son=4 (33 obs) right son=5 (28 obs) Primary splits: g2 < 11.36 to the left, improve=8.9620, (1 missing) ploidy splits as LRL, improve=7.5850, (0 missing) age < 68.5 to the right, improve=4.1380, (0 missing) gleason < 5.5 to the left, improve=1.6410, (3 missing) eet < 1.5 to the left, improve=0.5961, (1 missing) Surrogate splits: ploidy splits as LR-, agree=0.917, adj=0.815, (0 split) age < 65.5 to the left, agree=0.617, adj=0.148, (1 split) Node number 3: 85 observations, complexity param=0.0292 events=45, estimated rate=1.615 , mean deviance=1.44 left son=6 (75 obs) right son=7 (10 obs) Primary splits: age < 56.5 to the right, improve=6.3380, (0 missing) g2 < 22.76 to the right, improve=4.7180, (6 missing) gleason < 8.5 to the left, improve=4.2190, (0 missing) ploidy splits as LRR, improve=1.5590, (0 missing) eet < 1.5 to the right, improve=0.8558, (1 missing) Node number 4: 33 observations events=1, estimated rate=0.123 , mean deviance=0.2763 Node number 5: 28 observations, complexity param=0.01151 events=8, estimated rate=0.7346 , mean deviance=0.9858 left son=10 (20 obs) right son=11 (8 obs) Primary splits: gleason < 5.5 to the left, improve=2.090, (1 missing) age < 67.5 to the right, improve=1.639, (0 missing) g2 < 14.37 to the right, improve=1.437, (1 missing) Node number 6: 75 observations, complexity param=0.01799 events=37, estimated rate=1.426 , mean deviance=1.374 left son=12 (50 obs) right son=13 (25 obs) Primary splits: gleason < 7.5 to the left, improve=3.5210, (0 missing) g2 < 23.48 to the right, improve=3.3340, (6 missing) age < 69.5 to the left, improve=2.2120, (0 missing) ploidy splits as LRR, improve=1.1190, (0 missing) eet < 1.5 to the right, improve=0.1528, (1 missing) Surrogate splits: grade < 3.5 to the left, agree=0.733, adj=0.2, (0 split) Node number 7: 10 observations events=8, estimated rate=3.182 , mean deviance=1.377 Node number 10: 20 observations events=4, estimated rate=0.5304 , mean deviance=0.7149 Node number 11: 8 observations events=4, estimated rate=1.307 , mean deviance=1.387 Node number 12: 50 observations, complexity param=0.01335 events=21, estimated rate=1.141 , mean deviance=1.322 left son=24 (24 obs) right son=25 (26 obs) Primary splits: g2 < 13.48 to the left, improve=1.87000, (3 missing) ploidy splits as LRR, improve=1.45100, (0 missing) age < 62.5 to the right, improve=0.79680, (0 missing) gleason < 6.5 to the left, improve=0.02209, (0 missing) eet < 1.5 to the right, improve=0.01274, (0 missing) Surrogate splits: age < 66.5 to the right, agree=0.596, adj=0.174, (3 split) eet < 1.5 to the right, agree=0.553, adj=0.087, (0 split) gleason < 6.5 to the left, agree=0.553, adj=0.087, (0 split) Node number 13: 25 observations, complexity param=0.01541 events=16, estimated rate=2.031 , mean deviance=1.339 left son=26 (10 obs) right son=27 (15 obs) Primary splits: g2 < 15.29 to the right, improve=3.893000, (3 missing) age < 68.5 to the left, improve=1.327000, (0 missing) ploidy splits as RLR, improve=0.858700, (0 missing) eet < 1.5 to the right, improve=0.001483, (1 missing) Surrogate splits: ploidy splits as RLR, agree=0.727, adj=0.4, (3 split) gleason < 8.5 to the right, agree=0.636, adj=0.2, (0 split) age < 57.5 to the left, agree=0.591, adj=0.1, (0 split) eet < 1.5 to the left, agree=0.591, adj=0.1, (0 split) Node number 24: 24 observations events=7, estimated rate=0.8007 , mean deviance=1.133 Node number 25: 26 observations, complexity param=0.01335 events=14, estimated rate=1.457 , mean deviance=1.415 left son=50 (15 obs) right son=51 (11 obs) Primary splits: g2 < 17.92 to the right, improve=3.170000, (2 missing) age < 64.5 to the left, improve=0.971200, (0 missing) eet < 1.5 to the right, improve=0.961700, (0 missing) gleason < 6.5 to the left, improve=0.005796, (0 missing) Surrogate splits: age < 65.5 to the left, agree=0.708, adj=0.364, (2 split) eet < 1.5 to the right, agree=0.667, adj=0.273, (0 split) gleason < 6.5 to the right, agree=0.625, adj=0.182, (0 split) Node number 26: 10 observations events=5, estimated rate=1.216 , mean deviance=1.159 Node number 27: 15 observations events=11, estimated rate=2.705 , mean deviance=1.263 Node number 50: 15 observations events=6, estimated rate=0.979 , mean deviance=1.356 Node number 51: 11 observations events=8, estimated rate=2.171 , mean deviance=1.224 > > > # > # Continuous y variable > # Use deterministic xgroups: the first group is the 1st, 11th, 21st, etc > # smallest obs, the second is 2, 12, 22, ... > > mystate <- data.frame(state.x77, region=factor(state.region)) > names(mystate) <- c("population","income" , "illiteracy","life" , + "murder", "hs.grad", "frost", "area", "region") > > xvals <- 1:nrow(mystate) > xvals[order(mystate$income)] <- rep(1:10, length=nrow(mystate)) > > fit4 <- rpart(income ~ population + region + illiteracy +life + murder + + hs.grad + frost , mystate, + control=rpart.control(minsplit=10, xval=xvals)) > > summary(fit4) Call: rpart(formula = income ~ population + region + illiteracy + life + murder + hs.grad + frost, data = mystate, control = rpart.control(minsplit = 10, xval = xvals)) n= 50 CP nsplit rel error xerror xstd 1 0.42831 0 1.0000 1.0157 0.2265 2 0.13514 1 0.5717 0.5948 0.1747 3 0.06458 2 0.4365 0.7005 0.1802 4 0.05485 3 0.3720 0.8606 0.2299 5 0.05346 4 0.3171 0.8494 0.2297 6 0.02479 5 0.2637 0.8289 0.2644 7 0.01940 6 0.2389 0.8196 0.2641 8 0.01394 7 0.2195 0.8196 0.2641 9 0.01000 8 0.2055 0.8117 0.2640 Variable importance hs.grad life illiteracy murder region population frost 28 22 13 12 12 9 5 Node number 1: 50 observations, complexity param=0.4283 mean=4436, MSE=3.7e+05 left son=2 (10 obs) right son=3 (40 obs) Primary splits: hs.grad < 44.3 to the left, improve=0.4283, (0 missing) illiteracy < 1.55 to the right, improve=0.3249, (0 missing) region splits as RLRR, improve=0.2285, (0 missing) murder < 11.55 to the right, improve=0.2012, (0 missing) life < 68.9 to the left, improve=0.1672, (0 missing) Surrogate splits: illiteracy < 1.55 to the right, agree=0.90, adj=0.5, (0 split) life < 69.26 to the left, agree=0.90, adj=0.5, (0 split) region splits as RLRR, agree=0.88, adj=0.4, (0 split) murder < 11.55 to the right, agree=0.88, adj=0.4, (0 split) frost < 81 to the left, agree=0.82, adj=0.1, (0 split) Node number 2: 10 observations, complexity param=0.0194 mean=3640, MSE=6.688e+04 left son=4 (7 obs) right son=5 (3 obs) Primary splits: population < 3990 to the left, improve=0.53670, (0 missing) frost < 55 to the left, improve=0.30250, (0 missing) illiteracy < 2.2 to the right, improve=0.29240, (0 missing) hs.grad < 40.8 to the right, improve=0.14540, (0 missing) murder < 12.85 to the left, improve=0.08289, (0 missing) Node number 3: 40 observations, complexity param=0.1351 mean=4635, MSE=2.477e+05 left son=6 (34 obs) right son=7 (6 obs) Primary splits: life < 70.26 to the right, improve=0.25230, (0 missing) murder < 10 to the left, improve=0.16790, (0 missing) hs.grad < 60.95 to the left, improve=0.12350, (0 missing) illiteracy < 0.75 to the left, improve=0.11520, (0 missing) population < 659 to the right, improve=0.08106, (0 missing) Surrogate splits: population < 613.5 to the right, agree=0.875, adj=0.167, (0 split) murder < 11.2 to the left, agree=0.875, adj=0.167, (0 split) hs.grad < 64.55 to the left, agree=0.875, adj=0.167, (0 split) Node number 4: 7 observations mean=3516, MSE=3.844e+04 Node number 5: 3 observations mean=3929, MSE=1.361e+04 Node number 6: 34 observations, complexity param=0.06458 mean=4530, MSE=1.69e+05 left son=12 (12 obs) right son=13 (22 obs) Primary splits: population < 1374 to the left, improve=0.20790, (0 missing) life < 70.41 to the left, improve=0.19010, (0 missing) frost < 33.5 to the right, improve=0.10930, (0 missing) illiteracy < 0.75 to the left, improve=0.08942, (0 missing) hs.grad < 59.7 to the left, improve=0.06429, (0 missing) Surrogate splits: frost < 152 to the right, agree=0.794, adj=0.417, (0 split) life < 70.41 to the left, agree=0.735, adj=0.250, (0 split) murder < 2 to the left, agree=0.706, adj=0.167, (0 split) region splits as RRRL, agree=0.676, adj=0.083, (0 split) illiteracy < 1.85 to the right, agree=0.676, adj=0.083, (0 split) Node number 7: 6 observations mean=5230, MSE=2.768e+05 Node number 12: 12 observations, complexity param=0.05485 mean=4276, MSE=1.942e+05 left son=24 (3 obs) right son=25 (9 obs) Primary splits: population < 994.5 to the right, improve=0.4355, (0 missing) life < 71.89 to the left, improve=0.2955, (0 missing) frost < 172.5 to the left, improve=0.2333, (0 missing) illiteracy < 0.75 to the left, improve=0.1965, (0 missing) murder < 2.55 to the right, improve=0.1847, (0 missing) Surrogate splits: life < 70.47 to the left, agree=0.833, adj=0.333, (0 split) Node number 13: 22 observations, complexity param=0.05346 mean=4668, MSE=1.01e+05 left son=26 (4 obs) right son=27 (18 obs) Primary splits: hs.grad < 52.05 to the left, improve=0.44500, (0 missing) region splits as RLLR, improve=0.35050, (0 missing) life < 71.56 to the left, improve=0.12220, (0 missing) murder < 5.65 to the right, improve=0.10520, (0 missing) population < 2980 to the left, improve=0.06276, (0 missing) Surrogate splits: region splits as RLRR, agree=0.864, adj=0.25, (0 split) Node number 24: 3 observations mean=3772, MSE=3.261e+04 Node number 25: 9 observations mean=4444, MSE=1.353e+05 Node number 26: 4 observations mean=4218, MSE=2.77e+04 Node number 27: 18 observations, complexity param=0.02479 mean=4768, MSE=6.236e+04 left son=54 (8 obs) right son=55 (10 obs) Primary splits: region splits as RRLR, improve=0.4086, (0 missing) illiteracy < 1 to the left, improve=0.3653, (0 missing) murder < 3.05 to the left, improve=0.1805, (0 missing) hs.grad < 52.75 to the right, improve=0.1507, (0 missing) population < 2412 to the left, improve=0.1427, (0 missing) Surrogate splits: illiteracy < 1 to the left, agree=0.833, adj=0.625, (0 split) frost < 108.5 to the right, agree=0.833, adj=0.625, (0 split) life < 72.31 to the right, agree=0.778, adj=0.500, (0 split) murder < 3.05 to the left, agree=0.778, adj=0.500, (0 split) hs.grad < 59.95 to the left, agree=0.667, adj=0.250, (0 split) Node number 54: 8 observations mean=4590, MSE=1.009e+04 Node number 55: 10 observations, complexity param=0.01394 mean=4911, MSE=5.832e+04 left son=110 (7 obs) right son=111 (3 obs) Primary splits: frost < 109 to the left, improve=0.4423, (0 missing) population < 2820 to the left, improve=0.3546, (0 missing) hs.grad < 57.05 to the right, improve=0.3103, (0 missing) region splits as RL-L, improve=0.2564, (0 missing) illiteracy < 1.2 to the right, improve=0.1921, (0 missing) Surrogate splits: life < 71.94 to the left, agree=0.8, adj=0.333, (0 split) Node number 110: 7 observations mean=4806, MSE=2.969e+04 Node number 111: 3 observations mean=5156, MSE=3.914e+04 > > > # > # Check out xpred.rpart > # > meany <- mean(mystate$income) > xpr <- xpred.rpart(fit4, xval=xvals) > xpr2 <- (xpr - mystate$income)^2 > risk0 <- mean((mystate$income - meany)^2) > xpmean <- as.vector(apply(xpr2, 2, mean)) #kill the names > all.equal(xpmean/risk0, as.vector(fit4$cptable[,'xerror'])) [1] TRUE > > xpstd <- as.vector(apply((sweep(xpr2, 2, xpmean))^2, 2, sum)) > xpstd <- sqrt(xpstd)/(50*risk0) > all.equal(xpstd, as.vector(fit4$cptable[,'xstd'])) [1] TRUE > > # > # recreate subset #3 of the xval > # > tfit4 <- rpart(income ~ population + region + illiteracy +life + murder + + hs.grad + frost , mystate, subset=(xvals!=3), + control=rpart.control(minsplit=10, xval=0)) > tpred <- predict(tfit4, mystate[xvals==3,]) > all.equal(tpred, xpr[xvals==3,ncol(xpr)]) [1] TRUE > > # How much does this differ from the "real" formula, more complex, > # found on page 309 of Breiman et al. ? > #xtemp <- (xpr2/outer(rep(1,50),xpmean)) - ((mystate$income - meany)^2)/risk0 > #real.se<- xpmean* sqrt(apply(xtemp^2,2,sum))/(risk0*50) > > > # Simple yes/no classification model > fit5 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, xval=xgroup) > > fit5 n= 146 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 146 54 0 (0.6301 0.3699) 2) grade< 2.5 61 9 0 (0.8525 0.1475) * 3) grade>=2.5 85 40 1 (0.4706 0.5294) 6) g2< 13.2 40 17 0 (0.5750 0.4250) 12) ploidy=diploid,tetraploid 31 11 0 (0.6452 0.3548) 24) g2>=11.84 7 1 0 (0.8571 0.1429) * 25) g2< 11.84 24 10 0 (0.5833 0.4167) 50) g2< 11 17 5 0 (0.7059 0.2941) * 51) g2>=11 7 2 1 (0.2857 0.7143) * 13) ploidy=aneuploid 9 3 1 (0.3333 0.6667) * 7) g2>=13.2 45 17 1 (0.3778 0.6222) 14) g2>=17.91 22 8 0 (0.6364 0.3636) 28) age>=62.5 15 4 0 (0.7333 0.2667) * 29) age< 62.5 7 3 1 (0.4286 0.5714) * 15) g2< 17.91 23 3 1 (0.1304 0.8696) * > > fit6 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, parm=list(prior=c(.5,.5)), xval=xgroup) > summary(fit6) Call: rpart(formula = factor(pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, parms = list(prior = c(0.5, 0.5)), xval = xgroup) n= 146 CP nsplit rel error xerror xstd 1 0.39855 0 1.0000 1.2081 0.09381 2 0.02335 1 0.6014 0.6679 0.07684 3 0.02275 3 0.5548 0.8378 0.08445 4 0.01892 5 0.5093 0.8857 0.08585 5 0.01530 7 0.4714 0.8857 0.08585 6 0.01000 9 0.4408 0.8639 0.08599 Variable importance g2 grade gleason ploidy age eet 28 26 20 18 6 2 Node number 1: 146 observations, complexity param=0.3986 predicted class=0 expected loss=0.5 P(node) =1 class counts: 92 54 probabilities: 0.500 0.500 left son=2 (61 obs) right son=3 (85 obs) Primary splits: grade < 2.5 to the left, improve=12.490, (0 missing) gleason < 5.5 to the left, improve=10.510, (3 missing) ploidy splits as LRR, improve= 9.018, (0 missing) g2 < 13.2 to the left, improve= 8.281, (7 missing) age < 58.5 to the right, improve= 1.520, (0 missing) Surrogate splits: gleason < 5.5 to the left, agree=0.863, adj=0.672, (0 split) ploidy splits as LRR, agree=0.644, adj=0.148, (0 split) g2 < 9.945 to the left, agree=0.630, adj=0.115, (0 split) age < 66.5 to the right, agree=0.589, adj=0.016, (0 split) Node number 2: 61 observations, complexity param=0.0153 predicted class=0 expected loss=0.2277 P(node) =0.3659 class counts: 52 9 probabilities: 0.772 0.228 left son=4 (33 obs) right son=5 (28 obs) Primary splits: g2 < 11.36 to the left, improve=3.5470, (1 missing) ploidy splits as LRL, improve=3.2970, (0 missing) age < 68.5 to the right, improve=1.2020, (0 missing) gleason < 5.5 to the left, improve=0.6474, (3 missing) eet < 1.5 to the left, improve=0.1910, (1 missing) Surrogate splits: ploidy splits as LR-, agree=0.917, adj=0.815, (0 split) age < 65.5 to the left, agree=0.617, adj=0.148, (1 split) Node number 3: 85 observations, complexity param=0.02335 predicted class=1 expected loss=0.3429 P(node) =0.6341 class counts: 40 45 probabilities: 0.343 0.657 left son=6 (40 obs) right son=7 (45 obs) Primary splits: g2 < 13.2 to the left, improve=1.96800, (6 missing) ploidy splits as LRR, improve=1.84100, (0 missing) age < 56.5 to the right, improve=1.32300, (0 missing) gleason < 8.5 to the left, improve=1.26900, (0 missing) eet < 1.5 to the right, improve=0.09632, (1 missing) Surrogate splits: ploidy splits as LRL, agree=0.962, adj=0.914, (6 split) age < 68.5 to the right, agree=0.608, adj=0.114, (0 split) gleason < 6.5 to the left, agree=0.582, adj=0.057, (0 split) Node number 4: 33 observations predicted class=0 expected loss=0.05055 P(node) =0.1832 class counts: 32 1 probabilities: 0.949 0.051 Node number 5: 28 observations, complexity param=0.0153 predicted class=0 expected loss=0.4053 P(node) =0.1828 class counts: 20 8 probabilities: 0.595 0.405 left son=10 (20 obs) right son=11 (8 obs) Primary splits: gleason < 5.5 to the left, improve=1.1580, (1 missing) age < 67.5 to the right, improve=1.1420, (0 missing) g2 < 14.37 to the right, improve=0.8086, (1 missing) Node number 6: 40 observations, complexity param=0.02335 predicted class=1 expected loss=0.4426 P(node) =0.2824 class counts: 23 17 probabilities: 0.443 0.557 left son=12 (7 obs) right son=13 (33 obs) Primary splits: g2 < 11.84 to the right, improve=1.42400, (5 missing) ploidy splits as LLR, improve=1.31000, (0 missing) gleason < 7.5 to the left, improve=0.86340, (0 missing) age < 61.5 to the right, improve=0.57940, (0 missing) eet < 1.5 to the left, improve=0.05363, (0 missing) Surrogate splits: ploidy splits as RLR, agree=0.857, adj=0.286, (5 split) Node number 7: 45 observations, complexity param=0.02275 predicted class=1 expected loss=0.2627 P(node) =0.3517 class counts: 17 28 probabilities: 0.263 0.737 left son=14 (22 obs) right son=15 (23 obs) Primary splits: g2 < 17.91 to the right, improve=4.07900, (1 missing) age < 62.5 to the right, improve=0.66100, (0 missing) gleason < 7.5 to the left, improve=0.16170, (0 missing) eet < 1.5 to the right, improve=0.09922, (1 missing) Surrogate splits: age < 61.5 to the right, agree=0.614, adj=0.190, (1 split) eet < 1.5 to the right, agree=0.591, adj=0.143, (0 split) grade < 3.5 to the right, agree=0.545, adj=0.048, (0 split) gleason < 6.5 to the right, agree=0.545, adj=0.048, (0 split) Node number 10: 20 observations predicted class=0 expected loss=0.2987 P(node) =0.124 class counts: 16 4 probabilities: 0.701 0.299 Node number 11: 8 observations predicted class=1 expected loss=0.3699 P(node) =0.05878 class counts: 4 4 probabilities: 0.370 0.630 Node number 12: 7 observations predicted class=0 expected loss=0.2212 P(node) =0.04187 class counts: 6 1 probabilities: 0.779 0.221 Node number 13: 33 observations, complexity param=0.01892 predicted class=1 expected loss=0.3841 P(node) =0.2405 class counts: 17 16 probabilities: 0.384 0.616 left son=26 (25 obs) right son=27 (8 obs) Primary splits: g2 < 11 to the left, improve=1.06300, (5 missing) ploidy splits as L-R, improve=0.73950, (0 missing) gleason < 6.5 to the left, improve=0.57220, (0 missing) age < 62.5 to the right, improve=0.13320, (0 missing) eet < 1.5 to the left, improve=0.05492, (0 missing) Surrogate splits: age < 70.5 to the left, agree=0.821, adj=0.286, (5 split) Node number 14: 22 observations, complexity param=0.02275 predicted class=0 expected loss=0.4933 P(node) =0.1502 class counts: 14 8 probabilities: 0.507 0.493 left son=28 (15 obs) right son=29 (7 obs) Primary splits: age < 62.5 to the right, improve=0.976400, (0 missing) g2 < 23.48 to the right, improve=0.284300, (1 missing) gleason < 7.5 to the left, improve=0.003765, (0 missing) Surrogate splits: gleason < 6.5 to the right, agree=0.773, adj=0.286, (0 split) Node number 15: 23 observations predicted class=1 expected loss=0.08092 P(node) =0.2015 class counts: 3 20 probabilities: 0.081 0.919 Node number 26: 25 observations, complexity param=0.01892 predicted class=1 expected loss=0.4276 P(node) =0.1779 class counts: 14 11 probabilities: 0.428 0.572 left son=52 (17 obs) right son=53 (8 obs) Primary splits: ploidy splits as L-R, improve=2.157000, (0 missing) gleason < 6.5 to the left, improve=1.972000, (0 missing) age < 61.5 to the right, improve=0.971800, (0 missing) g2 < 7.65 to the right, improve=0.404500, (4 missing) eet < 1.5 to the left, improve=0.002614, (0 missing) Surrogate splits: eet < 1.5 to the right, agree=0.72, adj=0.125, (0 split) g2 < 4.33 to the right, agree=0.72, adj=0.125, (0 split) Node number 27: 8 observations predicted class=1 expected loss=0.2605 P(node) =0.0626 class counts: 3 5 probabilities: 0.260 0.740 Node number 28: 15 observations predicted class=0 expected loss=0.3825 P(node) =0.09682 class counts: 11 4 probabilities: 0.617 0.383 Node number 29: 7 observations predicted class=1 expected loss=0.3057 P(node) =0.05334 class counts: 3 4 probabilities: 0.306 0.694 Node number 52: 17 observations predicted class=0 expected loss=0.4152 P(node) =0.1115 class counts: 12 5 probabilities: 0.585 0.415 Node number 53: 8 observations predicted class=1 expected loss=0.1636 P(node) =0.06643 class counts: 2 6 probabilities: 0.164 0.836 > # > # Fit a classification model to the car data. > # Now, since Reliability is an ordered category, this model doesn't > # make a lot of statistical sense, but it does test out some > # areas of the code that nothing else does > # > xcar <- rep(1:8, length=nrow(cu.summary)) > carfit <- rpart(Reliability ~ Price + Country + Mileage + Type, + method='class', data=cu.summary, xval=xcar) > > summary(carfit) Call: rpart(formula = Reliability ~ Price + Country + Mileage + Type, data = cu.summary, method = "class", xval = xcar) n=85 (32 observations deleted due to missingness) CP nsplit rel error xerror xstd 1 0.30508 0 1.0000 1.0000 0.07200 2 0.08475 1 0.6949 0.6949 0.07808 3 0.05085 2 0.6102 0.7119 0.07813 4 0.03390 3 0.5593 0.6780 0.07800 5 0.01000 4 0.5254 0.6780 0.07800 Variable importance Country Type Price 66 22 12 Node number 1: 85 observations, complexity param=0.3051 predicted class=average expected loss=0.6941 P(node) =1 class counts: 18 12 26 8 21 probabilities: 0.212 0.141 0.306 0.094 0.247 left son=2 (58 obs) right son=3 (27 obs) Primary splits: Country splits as ---LRRLLLL, improve=15.220, (0 missing) Type splits as RLLRLL, improve= 4.288, (0 missing) Price < 11970 to the right, improve= 3.200, (0 missing) Mileage < 24.5 to the left, improve= 2.476, (36 missing) Node number 2: 58 observations, complexity param=0.08475 predicted class=average expected loss=0.6034 P(node) =0.6824 class counts: 18 12 23 5 0 probabilities: 0.310 0.207 0.397 0.086 0.000 left son=4 (9 obs) right son=5 (49 obs) Primary splits: Type splits as RRRRLR, improve=3.187, (0 missing) Price < 11230 to the left, improve=2.564, (0 missing) Mileage < 24.5 to the left, improve=1.802, (30 missing) Country splits as ---L--RLRL, improve=1.329, (0 missing) Node number 3: 27 observations predicted class=Much better expected loss=0.2222 P(node) =0.3176 class counts: 0 0 3 3 21 probabilities: 0.000 0.000 0.111 0.111 0.778 Node number 4: 9 observations predicted class=Much worse expected loss=0.2222 P(node) =0.1059 class counts: 7 0 2 0 0 probabilities: 0.778 0.000 0.222 0.000 0.000 Node number 5: 49 observations, complexity param=0.05085 predicted class=average expected loss=0.5714 P(node) =0.5765 class counts: 11 12 21 5 0 probabilities: 0.224 0.245 0.429 0.102 0.000 left son=10 (27 obs) right son=11 (22 obs) Primary splits: Type splits as RLLR-L, improve=2.880, (0 missing) Mileage < 24.5 to the left, improve=2.500, (25 missing) Price < 11470 to the right, improve=2.424, (0 missing) Country splits as ---R--LRLR, improve=1.027, (0 missing) Surrogate splits: Price < 11470 to the right, agree=0.898, adj=0.773, (0 split) Country splits as ---R--RRRL, agree=0.755, adj=0.455, (0 split) Node number 10: 27 observations predicted class=average expected loss=0.4074 P(node) =0.3176 class counts: 7 4 16 0 0 probabilities: 0.259 0.148 0.593 0.000 0.000 Node number 11: 22 observations, complexity param=0.0339 predicted class=worse expected loss=0.6364 P(node) =0.2588 class counts: 4 8 5 5 0 probabilities: 0.182 0.364 0.227 0.227 0.000 left son=22 (14 obs) right son=23 (8 obs) Primary splits: Country splits as ---R--LRRL, improve=1.5190, (0 missing) Price < 8646 to the left, improve=1.2720, (0 missing) Type splits as L--R--, improve=0.1909, (0 missing) Surrogate splits: Price < 13970 to the left, agree=0.864, adj=0.625, (0 split) Node number 22: 14 observations predicted class=worse expected loss=0.5714 P(node) =0.1647 class counts: 4 6 1 3 0 probabilities: 0.286 0.429 0.071 0.214 0.000 Node number 23: 8 observations predicted class=average expected loss=0.5 P(node) =0.09412 class counts: 0 2 4 2 0 probabilities: 0.000 0.250 0.500 0.250 0.000 > > > proc.time() user system elapsed 0.480 0.039 0.504 rpart/tests/priors.R0000644000176000001440000000460212026164014014233 0ustar ripleyusers# # A hard-core test of losses and priors # Simple data set where I know what the answers must be # library(rpart) aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) dummy <- c(3,1,4,1,5,9,2,6,5,3,5,8,9,7,9)/5 pdata <- data.frame(y=factor(rep(1:3, 5)), x1 = 1:15, x2 = c(1:6, 1:6, 1:3), x3 = (rep(1:3, 5) + dummy)*10) pdata$x3[c(1,5,10)] <- NA pdata$y[15] <- 1 # make things unbalanced pfit <- rpart(y ~ x1 + x2 + x3, pdata, cp=0, xval=0, minsplit=5, maxdepth=1, parms=list(prior=c(.2, .3, .5), loss =matrix(c(0,2,2,2,0,6,1,1,0), 3,3,byrow=T))) # # See section 12.1 of the report for these numbers # ntot <- c(6,5,4) phat <- c(6,5,4)/15 # observed class probabilities prior <- c(.2, .3, .5) # priors aprior <- c(4,12,5)/21 # altered priors lmat <- matrix(c(0,1,2, 2,0,1, 2,6,0), ncol=3) #loss matrix gini <- function(p) 1-sum(p^2) loss <- function(n, class) sum(n * lmat[,class]) phat <- function(n, ntot=c(6,5,4), prior=c(.2, .3, .5)) { n*prior/ntot } # Are the losses correct? # Class counts for the two children are (4,4,0) and (2,1,4), when # using surrogates aeq(pfit$frame$dev/15, c(loss(prior,2), loss(phat(c(4,4,0)),2), loss(phat(c(2,1,4)),3))) # Node probabilities? aeq(pfit$frame$yval2[,8] , c(1, sum(phat(c(4,4,0))), sum(phat(c(2,1,4))))) aeq(pfit$frame$yval2[,5:7] , rbind(prior, phat(c(4,4,0))/ sum(phat(c(4,4,0))), phat(c(2,1,4))/ sum(phat(c(2,1,4))))) # Now the node and class probs, under altered priors phat2 <- function(n, ntot=c(6,5,4), prior=aprior) { n*prior/ntot } # Use these to create the gini losses, base data, and for the best # splits on variables 1, 2, 3 gfun <- function(n) { #The gini loss for a node, given the counts temp <- phat2(n) sum(temp) * gini(temp/sum(temp)) } # These are in order x3, x2, x1 (best split to worst) # Note that for x3, missing values cause the "parent" to be viewed as # having 12 obs instead of 15. # Each line is gini(parent) - gini(children) aeq(pfit$splits[1:3, 3], 15* c(gfun(c(4,4,4)) - (gfun(c(3,4,0)) + gfun(c(1,0,4))), gfun(c(6,5,4)) - (gfun(c(6,5,2)) + gfun(c(0,0,2))), gfun(c(6,5,4)) - (gfun(c(4,4,4)) + gfun(c(2,1,0))))) rpart/tests/Examples/0000755000176000001440000000000012122302607014345 5ustar ripleyusersrpart/tests/Examples/rpart-Ex.Rout.save0000644000176000001440000010211312122057315017660 0ustar ripleyusers R version 3.0.0 alpha (2013-03-18 r62313) -- "Unsuffered Consequences" Copyright (C) 2013 The R Foundation for Statistical Computing ISBN 3-900051-07-0 Platform: x86_64-apple-darwin12.3.0 (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "rpart" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > library('rpart') > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > cleanEx() > nameEx("car.test.frame") > ### * car.test.frame > > flush(stderr()); flush(stdout()) > > ### Name: car.test.frame > ### Title: Automobile Data from 'Consumer Reports' 1990 > ### Aliases: car.test.frame > ### Keywords: datasets > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > summary(z.auto) Call: rpart(formula = Mileage ~ Weight, data = car.test.frame) n= 60 CP nsplit rel error xerror xstd 1 0.59534912 0 1.0000000 1.0319924 0.17931937 2 0.13452819 1 0.4046509 0.4875114 0.07613003 3 0.01282843 2 0.2701227 0.3802248 0.06685452 4 0.01000000 3 0.2572943 0.3945980 0.06605572 Variable importance Weight 100 Node number 1: 60 observations, complexity param=0.5953491 mean=24.58333, MSE=22.57639 left son=2 (45 obs) right son=3 (15 obs) Primary splits: Weight < 2567.5 to the right, improve=0.5953491, (0 missing) Node number 2: 45 observations, complexity param=0.1345282 mean=22.46667, MSE=8.026667 left son=4 (22 obs) right son=5 (23 obs) Primary splits: Weight < 3087.5 to the right, improve=0.5045118, (0 missing) Node number 3: 15 observations mean=30.93333, MSE=12.46222 Node number 4: 22 observations mean=20.40909, MSE=2.78719 Node number 5: 23 observations, complexity param=0.01282843 mean=24.43478, MSE=5.115312 left son=10 (15 obs) right son=11 (8 obs) Primary splits: Weight < 2747.5 to the right, improve=0.1476996, (0 missing) Node number 10: 15 observations mean=23.8, MSE=4.026667 Node number 11: 8 observations mean=25.625, MSE=4.984375 > > > > cleanEx() > nameEx("car90") > ### * car90 > > flush(stderr()); flush(stdout()) > > ### Name: car90 > ### Title: Automobile Data from 'Consumer Reports' 1990 > ### Aliases: car90 > ### Keywords: datasets > > ### ** Examples > > data(car90) > plot(car90$Price/1000, car90$Weight, + xlab = "Price (thousands)", ylab = "Weight (lbs)") > mlowess <- function(x, y, ...) { + keep <- !(is.na(x) | is.na(y)) + lowess(x[keep], y[keep], ...) + } > with(car90, lines(mlowess(Price/1000, Weight, f = 0.5))) > > > > cleanEx() > nameEx("cu.summary") > ### * cu.summary > > flush(stderr()); flush(stdout()) > > ### Name: cu.summary > ### Title: Automobile Data from 'Consumer Reports' 1990 > ### Aliases: cu.summary > ### Keywords: datasets > > ### ** Examples > > fit <- rpart(Price ~ Mileage + Type + Country, cu.summary) > par(xpd = TRUE) > plot(fit, compress = TRUE) > text(fit, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("kyphosis") > ### * kyphosis > > flush(stderr()); flush(stdout()) > > ### Name: kyphosis > ### Title: Data on Children who have had Corrective Spinal Surgery > ### Aliases: kyphosis > ### Keywords: datasets > > ### ** Examples > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, + parms = list(prior = c(0.65, 0.35), split = "information")) > fit3 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, + control = rpart.control(cp = 0.05)) > par(mfrow = c(1,2), xpd = TRUE) > plot(fit) > text(fit, use.n = TRUE) > plot(fit2) > text(fit2, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("meanvar.rpart") > ### * meanvar.rpart > > flush(stderr()); flush(stdout()) > > ### Name: meanvar.rpart > ### Title: Mean-Variance Plot for an Rpart Object > ### Aliases: meanvar meanvar.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > meanvar(z.auto, log = 'xy') > > > > cleanEx() > nameEx("path.rpart") > ### * path.rpart > > flush(stderr()); flush(stdout()) > > ### Name: path.rpart > ### Title: Follow Paths to Selected Nodes of an Rpart Object > ### Aliases: path.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > print(fit) n= 81 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 81 17 absent (0.79012346 0.20987654) 2) Start>=8.5 62 6 absent (0.90322581 0.09677419) 4) Start>=14.5 29 0 absent (1.00000000 0.00000000) * 5) Start< 14.5 33 6 absent (0.81818182 0.18181818) 10) Age< 55 12 0 absent (1.00000000 0.00000000) * 11) Age>=55 21 6 absent (0.71428571 0.28571429) 22) Age>=111 14 2 absent (0.85714286 0.14285714) * 23) Age< 111 7 3 present (0.42857143 0.57142857) * 3) Start< 8.5 19 8 present (0.42105263 0.57894737) * > path.rpart(fit, node = c(11, 22)) node number: 11 root Start>=8.5 Start< 14.5 Age>=55 node number: 22 root Start>=8.5 Start< 14.5 Age>=55 Age>=111 > > > > cleanEx() > nameEx("plot.rpart") > ### * plot.rpart > > flush(stderr()); flush(stdout()) > > ### Name: plot.rpart > ### Title: Plot an Rpart Object > ### Aliases: plot.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Price ~ Mileage + Type + Country, cu.summary) > par(xpd = TRUE) > plot(fit, compress = TRUE) > text(fit, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("post.rpart") > ### * post.rpart > > flush(stderr()); flush(stdout()) > > ### Name: post.rpart > ### Title: PostScript Presentation Plot of an Rpart Object > ### Aliases: post.rpart post > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > post(z.auto, file = "") # display tree on active device > # now construct postscript version on file "pretty.ps" > # with no title > post(z.auto, file = "pretty.ps", title = " ") > z.hp <- rpart(Mileage ~ Weight + HP, car.test.frame) > post(z.hp) > > > > cleanEx() > nameEx("predict.rpart") > ### * predict.rpart > > flush(stderr()); flush(stdout()) > > ### Name: predict.rpart > ### Title: Predictions from a Fitted Rpart Object > ### Aliases: predict.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > predict(z.auto) Eagle Summit 4 Ford Escort 4 30.93333 30.93333 Ford Festiva 4 Honda Civic 4 30.93333 30.93333 Mazda Protege 4 Mercury Tracer 4 30.93333 30.93333 Nissan Sentra 4 Pontiac LeMans 4 30.93333 30.93333 Subaru Loyale 4 Subaru Justy 3 30.93333 30.93333 Toyota Corolla 4 Toyota Tercel 4 30.93333 30.93333 Volkswagen Jetta 4 Chevrolet Camaro V8 30.93333 20.40909 Dodge Daytona Ford Mustang V8 23.80000 20.40909 Ford Probe Honda Civic CRX Si 4 25.62500 30.93333 Honda Prelude Si 4WS 4 Nissan 240SX 4 25.62500 23.80000 Plymouth Laser Subaru XT 4 23.80000 30.93333 Audi 80 4 Buick Skylark 4 25.62500 25.62500 Chevrolet Beretta 4 Chrysler Le Baron V6 25.62500 23.80000 Ford Tempo 4 Honda Accord 4 23.80000 23.80000 Mazda 626 4 Mitsubishi Galant 4 23.80000 25.62500 Mitsubishi Sigma V6 Nissan Stanza 4 20.40909 23.80000 Oldsmobile Calais 4 Peugeot 405 4 25.62500 25.62500 Subaru Legacy 4 Toyota Camry 4 23.80000 23.80000 Volvo 240 4 Acura Legend V6 23.80000 20.40909 Buick Century 4 Chrysler Le Baron Coupe 23.80000 23.80000 Chrysler New Yorker V6 Eagle Premier V6 20.40909 20.40909 Ford Taurus V6 Ford Thunderbird V6 20.40909 20.40909 Hyundai Sonata 4 Mazda 929 V6 23.80000 20.40909 Nissan Maxima V6 Oldsmobile Cutlass Ciera 4 20.40909 23.80000 Oldsmobile Cutlass Supreme V6 Toyota Cressida 6 20.40909 20.40909 Buick Le Sabre V6 Chevrolet Caprice V8 20.40909 20.40909 Ford LTD Crown Victoria V8 Chevrolet Lumina APV V6 20.40909 20.40909 Dodge Grand Caravan V6 Ford Aerostar V6 20.40909 20.40909 Mazda MPV V6 Mitsubishi Wagon 4 20.40909 20.40909 Nissan Axxess 4 Nissan Van 4 20.40909 20.40909 > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > predict(fit, type = "prob") # class probabilities (default) absent present 1 0.4210526 0.5789474 2 0.8571429 0.1428571 3 0.4210526 0.5789474 4 0.4210526 0.5789474 5 1.0000000 0.0000000 6 1.0000000 0.0000000 7 1.0000000 0.0000000 8 1.0000000 0.0000000 9 1.0000000 0.0000000 10 0.4285714 0.5714286 11 0.4285714 0.5714286 12 1.0000000 0.0000000 13 0.4210526 0.5789474 14 1.0000000 0.0000000 15 1.0000000 0.0000000 16 1.0000000 0.0000000 17 1.0000000 0.0000000 18 0.8571429 0.1428571 19 1.0000000 0.0000000 20 1.0000000 0.0000000 21 1.0000000 0.0000000 22 0.4210526 0.5789474 23 0.4285714 0.5714286 24 0.4210526 0.5789474 25 0.4210526 0.5789474 26 1.0000000 0.0000000 27 0.4210526 0.5789474 28 0.4285714 0.5714286 29 1.0000000 0.0000000 30 1.0000000 0.0000000 31 1.0000000 0.0000000 32 0.8571429 0.1428571 33 0.8571429 0.1428571 34 1.0000000 0.0000000 35 0.8571429 0.1428571 36 1.0000000 0.0000000 37 1.0000000 0.0000000 38 0.4210526 0.5789474 39 1.0000000 0.0000000 40 0.4285714 0.5714286 41 0.4210526 0.5789474 42 1.0000000 0.0000000 43 0.4210526 0.5789474 44 0.4210526 0.5789474 45 1.0000000 0.0000000 46 0.8571429 0.1428571 47 1.0000000 0.0000000 48 0.8571429 0.1428571 49 0.4210526 0.5789474 50 0.8571429 0.1428571 51 0.4285714 0.5714286 52 1.0000000 0.0000000 53 0.4210526 0.5789474 54 1.0000000 0.0000000 55 1.0000000 0.0000000 56 1.0000000 0.0000000 57 1.0000000 0.0000000 58 0.4210526 0.5789474 59 1.0000000 0.0000000 60 0.4285714 0.5714286 61 0.4210526 0.5789474 62 0.4210526 0.5789474 63 0.4210526 0.5789474 64 1.0000000 0.0000000 65 1.0000000 0.0000000 66 1.0000000 0.0000000 67 1.0000000 0.0000000 68 0.8571429 0.1428571 69 1.0000000 0.0000000 70 1.0000000 0.0000000 71 0.8571429 0.1428571 72 0.8571429 0.1428571 73 1.0000000 0.0000000 74 0.8571429 0.1428571 75 1.0000000 0.0000000 76 1.0000000 0.0000000 77 0.8571429 0.1428571 78 1.0000000 0.0000000 79 0.8571429 0.1428571 80 0.4210526 0.5789474 81 1.0000000 0.0000000 > predict(fit, type = "vector") # level numbers 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 1 2 2 1 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 2 2 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 1 1 1 1 2 1 2 1 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 2 1 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 79 80 81 1 2 1 > predict(fit, type = "class") # factor 1 2 3 4 5 6 7 8 9 10 present absent present present absent absent absent absent absent present 11 12 13 14 15 16 17 18 19 20 present absent present absent absent absent absent absent absent absent 21 22 23 24 25 26 27 28 29 30 absent present present present present absent present present absent absent 31 32 33 34 35 36 37 38 39 40 absent absent absent absent absent absent absent present absent present 41 42 43 44 45 46 47 48 49 50 present absent present present absent absent absent absent present absent 51 52 53 54 55 56 57 58 59 60 present absent present absent absent absent absent present absent present 61 62 63 64 65 66 67 68 69 70 present present present absent absent absent absent absent absent absent 71 72 73 74 75 76 77 78 79 80 absent absent absent absent absent absent absent absent absent present 81 absent Levels: absent present > predict(fit, type = "matrix") # level number, class frequencies, probabilities [,1] [,2] [,3] [,4] [,5] [,6] 1 2 8 11 0.4210526 0.5789474 0.23456790 2 1 12 2 0.8571429 0.1428571 0.17283951 3 2 8 11 0.4210526 0.5789474 0.23456790 4 2 8 11 0.4210526 0.5789474 0.23456790 5 1 29 0 1.0000000 0.0000000 0.35802469 6 1 29 0 1.0000000 0.0000000 0.35802469 7 1 29 0 1.0000000 0.0000000 0.35802469 8 1 29 0 1.0000000 0.0000000 0.35802469 9 1 29 0 1.0000000 0.0000000 0.35802469 10 2 3 4 0.4285714 0.5714286 0.08641975 11 2 3 4 0.4285714 0.5714286 0.08641975 12 1 29 0 1.0000000 0.0000000 0.35802469 13 2 8 11 0.4210526 0.5789474 0.23456790 14 1 12 0 1.0000000 0.0000000 0.14814815 15 1 29 0 1.0000000 0.0000000 0.35802469 16 1 29 0 1.0000000 0.0000000 0.35802469 17 1 29 0 1.0000000 0.0000000 0.35802469 18 1 12 2 0.8571429 0.1428571 0.17283951 19 1 29 0 1.0000000 0.0000000 0.35802469 20 1 12 0 1.0000000 0.0000000 0.14814815 21 1 29 0 1.0000000 0.0000000 0.35802469 22 2 8 11 0.4210526 0.5789474 0.23456790 23 2 3 4 0.4285714 0.5714286 0.08641975 24 2 8 11 0.4210526 0.5789474 0.23456790 25 2 8 11 0.4210526 0.5789474 0.23456790 26 1 12 0 1.0000000 0.0000000 0.14814815 27 2 8 11 0.4210526 0.5789474 0.23456790 28 2 3 4 0.4285714 0.5714286 0.08641975 29 1 29 0 1.0000000 0.0000000 0.35802469 30 1 29 0 1.0000000 0.0000000 0.35802469 31 1 29 0 1.0000000 0.0000000 0.35802469 32 1 12 2 0.8571429 0.1428571 0.17283951 33 1 12 2 0.8571429 0.1428571 0.17283951 34 1 29 0 1.0000000 0.0000000 0.35802469 35 1 12 2 0.8571429 0.1428571 0.17283951 36 1 29 0 1.0000000 0.0000000 0.35802469 37 1 12 0 1.0000000 0.0000000 0.14814815 38 2 8 11 0.4210526 0.5789474 0.23456790 39 1 12 0 1.0000000 0.0000000 0.14814815 40 2 3 4 0.4285714 0.5714286 0.08641975 41 2 8 11 0.4210526 0.5789474 0.23456790 42 1 12 0 1.0000000 0.0000000 0.14814815 43 2 8 11 0.4210526 0.5789474 0.23456790 44 2 8 11 0.4210526 0.5789474 0.23456790 45 1 29 0 1.0000000 0.0000000 0.35802469 46 1 12 2 0.8571429 0.1428571 0.17283951 47 1 29 0 1.0000000 0.0000000 0.35802469 48 1 12 2 0.8571429 0.1428571 0.17283951 49 2 8 11 0.4210526 0.5789474 0.23456790 50 1 12 2 0.8571429 0.1428571 0.17283951 51 2 3 4 0.4285714 0.5714286 0.08641975 52 1 29 0 1.0000000 0.0000000 0.35802469 53 2 8 11 0.4210526 0.5789474 0.23456790 54 1 29 0 1.0000000 0.0000000 0.35802469 55 1 29 0 1.0000000 0.0000000 0.35802469 56 1 29 0 1.0000000 0.0000000 0.35802469 57 1 12 0 1.0000000 0.0000000 0.14814815 58 2 8 11 0.4210526 0.5789474 0.23456790 59 1 12 0 1.0000000 0.0000000 0.14814815 60 2 3 4 0.4285714 0.5714286 0.08641975 61 2 8 11 0.4210526 0.5789474 0.23456790 62 2 8 11 0.4210526 0.5789474 0.23456790 63 2 8 11 0.4210526 0.5789474 0.23456790 64 1 29 0 1.0000000 0.0000000 0.35802469 65 1 29 0 1.0000000 0.0000000 0.35802469 66 1 12 0 1.0000000 0.0000000 0.14814815 67 1 29 0 1.0000000 0.0000000 0.35802469 68 1 12 2 0.8571429 0.1428571 0.17283951 69 1 12 0 1.0000000 0.0000000 0.14814815 70 1 29 0 1.0000000 0.0000000 0.35802469 71 1 12 2 0.8571429 0.1428571 0.17283951 72 1 12 2 0.8571429 0.1428571 0.17283951 73 1 29 0 1.0000000 0.0000000 0.35802469 74 1 12 2 0.8571429 0.1428571 0.17283951 75 1 29 0 1.0000000 0.0000000 0.35802469 76 1 29 0 1.0000000 0.0000000 0.35802469 77 1 12 2 0.8571429 0.1428571 0.17283951 78 1 12 0 1.0000000 0.0000000 0.14814815 79 1 12 2 0.8571429 0.1428571 0.17283951 80 2 8 11 0.4210526 0.5789474 0.23456790 81 1 12 0 1.0000000 0.0000000 0.14814815 > > sub <- c(sample(1:50, 25), sample(51:100, 25), sample(101:150, 25)) > fit <- rpart(Species ~ ., data = iris, subset = sub) > fit n= 75 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 75 50 setosa (0.33333333 0.33333333 0.33333333) 2) Petal.Length< 2.35 25 0 setosa (1.00000000 0.00000000 0.00000000) * 3) Petal.Length>=2.35 50 25 versicolor (0.00000000 0.50000000 0.50000000) 6) Petal.Width< 1.65 27 2 versicolor (0.00000000 0.92592593 0.07407407) * 7) Petal.Width>=1.65 23 0 virginica (0.00000000 0.00000000 1.00000000) * > table(predict(fit, iris[-sub,], type = "class"), iris[-sub, "Species"]) setosa versicolor virginica setosa 25 0 0 versicolor 0 23 2 virginica 0 2 23 > > > > cleanEx() > nameEx("print.rpart") > ### * print.rpart > > flush(stderr()); flush(stdout()) > > ### Name: print.rpart > ### Title: Print an Rpart Object > ### Aliases: print.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > z.auto n= 60 node), split, n, deviance, yval * denotes terminal node 1) root 60 1354.58300 24.58333 2) Weight>=2567.5 45 361.20000 22.46667 4) Weight>=3087.5 22 61.31818 20.40909 * 5) Weight< 3087.5 23 117.65220 24.43478 10) Weight>=2747.5 15 60.40000 23.80000 * 11) Weight< 2747.5 8 39.87500 25.62500 * 3) Weight< 2567.5 15 186.93330 30.93333 * > ## Not run: > ##D node), split, n, deviance, yval > ##D * denotes terminal node > ##D > ##D 1) root 60 1354.58300 24.58333 > ##D 2) Weight>=2567.5 45 361.20000 22.46667 > ##D 4) Weight>=3087.5 22 61.31818 20.40909 * > ##D 5) Weight<3087.5 23 117.65220 24.43478 > ##D 10) Weight>=2747.5 15 60.40000 23.80000 * > ##D 11) Weight<2747.5 8 39.87500 25.62500 * > ##D 3) Weight<2567.5 15 186.93330 30.93333 * > ## End(Not run) > > > cleanEx() > nameEx("printcp") > ### * printcp > > flush(stderr()); flush(stdout()) > > ### Name: printcp > ### Title: Displays CP table for Fitted Rpart Object > ### Aliases: printcp > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > printcp(z.auto) Regression tree: rpart(formula = Mileage ~ Weight, data = car.test.frame) Variables actually used in tree construction: [1] Weight Root node error: 1354.6/60 = 22.576 n= 60 CP nsplit rel error xerror xstd 1 0.595349 0 1.00000 1.03199 0.179319 2 0.134528 1 0.40465 0.48751 0.076130 3 0.012828 2 0.27012 0.38022 0.066855 4 0.010000 3 0.25729 0.39460 0.066056 > ## Not run: > ##D Regression tree: > ##D rpart(formula = Mileage ~ Weight, data = car.test.frame) > ##D > ##D Variables actually used in tree construction: > ##D [1] Weight > ##D > ##D Root node error: 1354.6/60 = 22.576 > ##D > ##D CP nsplit rel error xerror xstd > ##D 1 0.595349 0 1.00000 1.03436 0.178526 > ##D 2 0.134528 1 0.40465 0.60508 0.105217 > ##D 3 0.012828 2 0.27012 0.45153 0.083330 > ##D 4 0.010000 3 0.25729 0.44826 0.076998 > ## End(Not run) > > > cleanEx() > nameEx("prune.rpart") > ### * prune.rpart > > flush(stderr()); flush(stdout()) > > ### Name: prune.rpart > ### Title: Cost-complexity Pruning of an Rpart Object > ### Aliases: prune.rpart prune > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > zp <- prune(z.auto, cp = 0.1) > plot(zp) #plot smaller rpart object > > > > cleanEx() > nameEx("residuals.rpart") > ### * residuals.rpart > > flush(stderr()); flush(stdout()) > > ### Name: residuals.rpart > ### Title: Residuals From a Fitted Rpart Object > ### Aliases: residuals.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, + data = solder, method = "anova") > summary(residuals(fit)) Min. 1st Qu. Median Mean 3rd Qu. Max. -13.8000 -1.0360 -0.6833 0.0000 0.9639 16.2000 > plot(predict(fit),residuals(fit)) > > > > cleanEx() > nameEx("rpart") > ### * rpart > > flush(stderr()); flush(stdout()) > > ### Name: rpart > ### Title: Recursive Partitioning and Regression Trees > ### Aliases: rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, + parms = list(prior = c(.65,.35), split = "information")) > fit3 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, + control = rpart.control(cp = 0.05)) > par(mfrow = c(1,2), xpd = NA) # otherwise on some devices the text is clipped > plot(fit) > text(fit, use.n = TRUE) > plot(fit2) > text(fit2, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("rsq.rpart") > ### * rsq.rpart > > flush(stderr()); flush(stdout()) > > ### Name: rsq.rpart > ### Title: Plots the Approximate R-Square for the Different Splits > ### Aliases: rsq.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > rsq.rpart(z.auto) Regression tree: rpart(formula = Mileage ~ Weight, data = car.test.frame) Variables actually used in tree construction: [1] Weight Root node error: 1354.6/60 = 22.576 n= 60 CP nsplit rel error xerror xstd 1 0.595349 0 1.00000 1.03199 0.179319 2 0.134528 1 0.40465 0.48751 0.076130 3 0.012828 2 0.27012 0.38022 0.066855 4 0.010000 3 0.25729 0.39460 0.066056 > > > > cleanEx() > nameEx("snip.rpart") > ### * snip.rpart > > flush(stderr()); flush(stdout()) > > ### Name: snip.rpart > ### Title: Snip Subtrees of an Rpart Object > ### Aliases: snip.rpart > ### Keywords: tree > > ### ** Examples > > ## dataset not in R > ## Not run: > ##D z.survey <- rpart(market.survey) # grow the rpart object > ##D plot(z.survey) # plot the tree > ##D z.survey2 <- snip.rpart(z.survey, toss = 2) # trim subtree at node 2 > ##D plot(z.survey2) # plot new tree > ##D > ##D # can also interactively select the node using the mouse in the > ##D # graphics window > ## End(Not run) > > > cleanEx() > nameEx("solder") > ### * solder > > flush(stderr()); flush(stdout()) > > ### Name: solder > ### Title: Soldering of Components on Printed-Circuit Boards > ### Aliases: solder > ### Keywords: datasets > > ### ** Examples > > fit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, + data = solder, method = "anova") > summary(residuals(fit)) Min. 1st Qu. Median Mean 3rd Qu. Max. -13.8000 -1.0360 -0.6833 0.0000 0.9639 16.2000 > plot(predict(fit), residuals(fit)) > > > > cleanEx() > nameEx("stagec") > ### * stagec > > flush(stderr()); flush(stdout()) > > ### Name: stagec > ### Title: Stage C Prostate Cancer > ### Aliases: stagec > ### Keywords: datasets > > ### ** Examples > > require(survival) Loading required package: survival Loading required package: splines > rpart(Surv(pgtime, pgstat) ~ ., stagec) n= 146 node), split, n, deviance, yval * denotes terminal node 1) root 146 192.111100 1.0000000 2) grade< 2.5 61 44.799010 0.3634439 4) g2< 11.36 33 9.117405 0.1229835 * 5) g2>=11.36 28 27.602190 0.7345610 10) gleason< 5.5 20 14.297110 0.5304115 * 11) gleason>=5.5 8 11.094650 1.3069940 * 3) grade>=2.5 85 122.441500 1.6148600 6) age>=56.5 75 103.062900 1.4255040 12) gleason< 7.5 50 66.119800 1.1407320 24) g2< 13.475 24 27.197170 0.8007306 * 25) g2>=13.475 26 36.790960 1.4570210 50) g2>=17.915 15 20.332740 0.9789825 * 51) g2< 17.915 11 13.459010 2.1714480 * 13) gleason>=7.5 25 33.487250 2.0307290 26) g2>=15.29 10 11.588480 1.2156230 * 27) g2< 15.29 15 18.939150 2.7053610 * 7) age< 56.5 10 13.769010 3.1822320 * > > > > cleanEx() detaching ‘package:survival’, ‘package:splines’ > nameEx("summary.rpart") > ### * summary.rpart > > flush(stderr()); flush(stdout()) > > ### Name: summary.rpart > ### Title: Summarize a Fitted Rpart Object > ### Aliases: summary.rpart > ### Keywords: tree > > ### ** Examples > > ## a regression tree > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > summary(z.auto) Call: rpart(formula = Mileage ~ Weight, data = car.test.frame) n= 60 CP nsplit rel error xerror xstd 1 0.59534912 0 1.0000000 1.0319924 0.17931937 2 0.13452819 1 0.4046509 0.4875114 0.07613003 3 0.01282843 2 0.2701227 0.3802248 0.06685452 4 0.01000000 3 0.2572943 0.3945980 0.06605572 Variable importance Weight 100 Node number 1: 60 observations, complexity param=0.5953491 mean=24.58333, MSE=22.57639 left son=2 (45 obs) right son=3 (15 obs) Primary splits: Weight < 2567.5 to the right, improve=0.5953491, (0 missing) Node number 2: 45 observations, complexity param=0.1345282 mean=22.46667, MSE=8.026667 left son=4 (22 obs) right son=5 (23 obs) Primary splits: Weight < 3087.5 to the right, improve=0.5045118, (0 missing) Node number 3: 15 observations mean=30.93333, MSE=12.46222 Node number 4: 22 observations mean=20.40909, MSE=2.78719 Node number 5: 23 observations, complexity param=0.01282843 mean=24.43478, MSE=5.115312 left son=10 (15 obs) right son=11 (8 obs) Primary splits: Weight < 2747.5 to the right, improve=0.1476996, (0 missing) Node number 10: 15 observations mean=23.8, MSE=4.026667 Node number 11: 8 observations mean=25.625, MSE=4.984375 > > ## a classification tree with multiple variables and surrogate splits. > summary(rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)) Call: rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis) n= 81 CP nsplit rel error xerror xstd 1 0.17647059 0 1.0000000 1.000000 0.2155872 2 0.01960784 1 0.8235294 1.352941 0.2387187 3 0.01000000 4 0.7647059 1.294118 0.2354756 Variable importance Start Age Number 64 24 12 Node number 1: 81 observations, complexity param=0.1764706 predicted class=absent expected loss=0.2098765 P(node) =1 class counts: 64 17 probabilities: 0.790 0.210 left son=2 (62 obs) right son=3 (19 obs) Primary splits: Start < 8.5 to the right, improve=6.762330, (0 missing) Number < 5.5 to the left, improve=2.866795, (0 missing) Age < 39.5 to the left, improve=2.250212, (0 missing) Surrogate splits: Number < 6.5 to the left, agree=0.802, adj=0.158, (0 split) Node number 2: 62 observations, complexity param=0.01960784 predicted class=absent expected loss=0.09677419 P(node) =0.7654321 class counts: 56 6 probabilities: 0.903 0.097 left son=4 (29 obs) right son=5 (33 obs) Primary splits: Start < 14.5 to the right, improve=1.0205280, (0 missing) Age < 55 to the left, improve=0.6848635, (0 missing) Number < 4.5 to the left, improve=0.2975332, (0 missing) Surrogate splits: Number < 3.5 to the left, agree=0.645, adj=0.241, (0 split) Age < 16 to the left, agree=0.597, adj=0.138, (0 split) Node number 3: 19 observations predicted class=present expected loss=0.4210526 P(node) =0.2345679 class counts: 8 11 probabilities: 0.421 0.579 Node number 4: 29 observations predicted class=absent expected loss=0 P(node) =0.3580247 class counts: 29 0 probabilities: 1.000 0.000 Node number 5: 33 observations, complexity param=0.01960784 predicted class=absent expected loss=0.1818182 P(node) =0.4074074 class counts: 27 6 probabilities: 0.818 0.182 left son=10 (12 obs) right son=11 (21 obs) Primary splits: Age < 55 to the left, improve=1.2467530, (0 missing) Start < 12.5 to the right, improve=0.2887701, (0 missing) Number < 3.5 to the right, improve=0.1753247, (0 missing) Surrogate splits: Start < 9.5 to the left, agree=0.758, adj=0.333, (0 split) Number < 5.5 to the right, agree=0.697, adj=0.167, (0 split) Node number 10: 12 observations predicted class=absent expected loss=0 P(node) =0.1481481 class counts: 12 0 probabilities: 1.000 0.000 Node number 11: 21 observations, complexity param=0.01960784 predicted class=absent expected loss=0.2857143 P(node) =0.2592593 class counts: 15 6 probabilities: 0.714 0.286 left son=22 (14 obs) right son=23 (7 obs) Primary splits: Age < 111 to the right, improve=1.71428600, (0 missing) Start < 12.5 to the right, improve=0.79365080, (0 missing) Number < 3.5 to the right, improve=0.07142857, (0 missing) Node number 22: 14 observations predicted class=absent expected loss=0.1428571 P(node) =0.1728395 class counts: 12 2 probabilities: 0.857 0.143 Node number 23: 7 observations predicted class=present expected loss=0.4285714 P(node) =0.08641975 class counts: 3 4 probabilities: 0.429 0.571 > > > > cleanEx() > nameEx("text.rpart") > ### * text.rpart > > flush(stderr()); flush(stdout()) > > ### Name: text.rpart > ### Title: Place Text on a Dendrogram Plot > ### Aliases: text.rpart > ### Keywords: tree > > ### ** Examples > > freen.tr <- rpart(y ~ ., freeny) > par(xpd = TRUE) > plot(freen.tr) > text(freen.tr, use.n = TRUE, all = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("xpred.rpart") > ### * xpred.rpart > > flush(stderr()); flush(stdout()) > > ### Name: xpred.rpart > ### Title: Return Cross-Validated Predictions > ### Aliases: xpred.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Mileage ~ Weight, car.test.frame) > xmat <- xpred.rpart(fit) > xerr <- (xmat - car.test.frame$Mileage)^2 > apply(xerr, 2, sum) # cross-validated error estimate 0.79767456 0.28300396 0.04154257 0.01132626 1423.9568 740.4845 544.3925 536.6344 > > # approx same result as rel. error from printcp(fit) > apply(xerr, 2, sum)/var(car.test.frame$Mileage) 0.79767456 0.28300396 0.04154257 0.01132626 62.02162 32.25242 23.71147 23.37355 > printcp(fit) Regression tree: rpart(formula = Mileage ~ Weight, data = car.test.frame) Variables actually used in tree construction: [1] Weight Root node error: 1354.6/60 = 22.576 n= 60 CP nsplit rel error xerror xstd 1 0.595349 0 1.00000 1.03199 0.179319 2 0.134528 1 0.40465 0.48751 0.076130 3 0.012828 2 0.27012 0.38022 0.066855 4 0.010000 3 0.25729 0.39460 0.066056 > > > > ### *