rpart/0000755000176000001440000000000012544260435011437 5ustar ripleyusersrpart/po/0000755000176000001440000000000012456141463012056 5ustar ripleyusersrpart/po/R-fr.po0000644000176000001440000002166412312016344013223 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: 2014-03-18 11:16+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.6.4\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 "type 'class' n'est appropri que pour une classification" 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 "" "Arbre \"rpart\" inappropri et feuille de l'arbre diffrente d'un facteur " "2 niveaux" msgid "a 'formula' argument is required" msgstr "un argument 'formula' est ncessaire" msgid "Trees cannot handle interaction terms" msgstr "Les arbres ne peuvent prendre en compte les termes d'interaction" msgid "negative weights not allowed" msgstr "les pondrations ngatives ne sont pas autorises" 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 "" "aucune information disponible pour les paramtres depuis un appel antrieur " " plot()" 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 "n'est probablement pas d'application pour cette mthode" 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" msgid "argument 'label' is no longer used" msgstr "l'argument 'label' n'est plus utilis" 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.po0000644000176000001440000000376612311341646013015 0ustar ripleyusers# Translation of rpart (de.po) to German # Copyright (C) 2005-2014 The R Foundation # This file is distributed under the same license as the rpart package. # Chris Leick , 2009-2012. # Detlef Steuer , 2014 msgid "" msgstr "" "Project-Id-Version: R 3.1.0 / rpart 4.1-6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: 2014-03-16 17:30+0100\n" "Last-Translator: Detlef Steuer \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 "Ungültige Fehlerregel" #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "Ungültiger Wert für 'method'" #: rpart.c:193 msgid "unknown error" msgstr "unbekannter Fehler" #: 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.po0000644000176000001440000000477612314120652013035 0ustar ripleyusersmsgid "" msgstr "" "Project-Id-Version: rpart 4.1-7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-03-18 13:59+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" "X-Generator: Poedit 1.5.4\n" # rpart/src/poisson.c: 35 # _("Invalid time point") #: poisson.c:34 msgid "Invalid time point" msgstr "Niepoprawny punkt czasowy" # rpart/src/poisson.c: 39 # _("Invalid event count") #: poisson.c:38 msgid "Invalid event count" msgstr "błędne zliczenia zdarzenia" # rpart/src/poisson.c: 69 # _("Invalid error rule") #: poisson.c:68 msgid "Invalid error rule" msgstr "Niepoprawna reguła błędu" # rpart/src/rpart.c: 92 # error(_("Invalid value for 'method'")) # rpart/src/xpred.c: 90 # error(_("Invalid value for 'method'")) #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "niepoprawna wartość dla 'method'" # rpart/src/rpart.c: 194 # _("unknown error") #: rpart.c:193 msgid "unknown error" msgstr "nieznany błąd" # rpart/src/rpart_callback.c: 39 # error(_("'yback' not found")) #: rpart_callback.c:46 msgid "'yback' not found" msgstr "nie znaleziono 'yback'" # rpart/src/rpart_callback.c: 43 # error(_("'wback' not found")) #: rpart_callback.c:50 msgid "'wback' not found" msgstr "nie znaleziono 'wback'" # rpart/src/rpart_callback.c: 47 # error(_("'xback' not found")) #: rpart_callback.c:54 msgid "'xback' not found" msgstr "nie znaleziono 'xback'" # rpart/src/rpart_callback.c: 51 # error(_("'nback' not found")) #: rpart_callback.c:58 msgid "'nback' not found" msgstr "nie znaleziono 'nback'" # rpart/src/rpart_callback.c: 97 # error(_("return value not a vector")) #: rpart_callback.c:104 msgid "return value not a vector" msgstr "zwrócona wartość nie jest wektorem" # rpart/src/rpart_callback.c: 99 # 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ść" # rpart/src/rpart_callback.c: 131 # 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!" 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.po0000644000176000001440000002021312311341364013173 0ustar ripleyusers# Translation of R-rpart.pot to German # Copyright (C) 2007-2014 The R Foundation # This file is distributed under the same license as the rpart package. # Chris Leick , 2009. # Detlef Steuer , 2014 msgid "" msgstr "" "Project-Id-Version: R 3.1.0 / rpart 4.1-6\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2014-03-16 17:27+0100\n" "Last-Translator: Detlef Steuer \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 "Typ 'class' ist für Klssifikation nicht angemessen" 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 "Kein regulärer \"rpart\"-Baum und ein Endpunkt kein zeistufiger Faktor" msgid "a 'formula' argument is required" msgstr "ein 'formula' Argument ist nötig" msgid "Trees cannot handle interaction terms" msgstr "Bäume können keine Interaktions-Terme handhaben" msgid "negative weights not allowed" msgstr "negative Gewichte nicht zulässig" 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 "" "keine Information über die Parameter der vorherigen Aufrufs von plot()\n" "verfügbar" 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 "evtl. nicht anwendbar für diese Methode" 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.pot0000644000176000001440000000247012456141615013734 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-8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-16 07:53+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.po0000644000176000001440000000372612312016037013022 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: 2014-03-18 11:12+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.6.4\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 "Rgle d'erreur incorrecte" #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "valeur incorrecte pour 'method'" #: rpart.c:193 msgid "unknown error" msgstr "erreur indtermine" #: 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.po0000644000176000001440000000414212465507577013044 0ustar ripleyusers# Korean translation for R rpart package # Recommended/rpart/po/ko.po # Maintainer: Brian Ripley # # This file is distributed under the same license as the R rpart package. # Chel Hee Lee , 2013-2015. # # Reviewing process is completed (14-JAN-2015) # The original source code review is completed (14-JAN-2015) # QC:PASS # Freezing on 06-FEB-2015 for R-3.1.3 # msgid "" msgstr "" "Project-Id-Version: rpart 4.1-0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-03-27 21:46+0000\n" "PO-Revision-Date: 2015-02-06 21:56-0600\n" "Last-Translator:Chel Hee Lee \n" "Language-Team: Chel Hee Lee \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" #: poisson.c:34 msgid "Invalid time point" msgstr "시점(time point)이 올바르지 않습니다." #: poisson.c:38 msgid "Invalid event count" msgstr "이벤트의 개수(event count)가 올바르지 않습니다." #: 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 "벡터가 아닌 value를 반환합니다." #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "반환된 value의 길이가 올바르지 않습니다." #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "표현식 expr1은 벡터를 반환하지 않았습니다!" rpart/po/R-pl.po0000644000176000001440000004523612314241157013234 0ustar ripleyusersmsgid "" msgstr "" "Project-Id-Version: rpart 4.1-7\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2014-03-18 13:59\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.6.4\n" "X-Poedit-Bookmarks: -1,6,-1,-1,-1,-1,-1,-1,-1,-1\n" # rpart/R/formatg.R: 6 # stop("'x' must be a numeric vector") msgid "'x' must be a numeric vector" msgstr "'x' musi być wektorem liczbowym" # rpart/R/text.rpart.R: 11 # stop("Not a legitimate \"rpart\" object") # rpart/R/rsq.rpart.R: 7 # stop("Not a legitimate \"rpart\" object") msgid "Not a legitimate \"rpart\" object" msgstr "argument nie jest obiektem klasy \"rpart\"" # rpart/R/meanvar.rpart.R: 7 # stop("Plot is 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.R: 5 # stop("fit is not a tree, just a root") # rpart/R/text.rpart.R: 12 # 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.R: 11 # stop("'cptable' component does not contain cross-validation results") msgid "'cptable' does not contain cross-validation results" msgstr "komponent 'cptable' nie zawiera wyników krzyżowej walidacji" # rpart/R/pred.rpart.R: 15 # 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" # rpart/R/predict.rpart.R: 31 # stop("type 'class' is only appropriate for classification") msgid "type 'class' is only appropriate for classification" msgstr "typ 'class' jest odpowiedni jedynie dla klasyfikacji" # rpart/R/predict.rpart.R: 37 # stop("Invalid prediction for \"rpart\" object") msgid "Invalid prediction for \"rpart\" object" msgstr "Niepoprawna predykcja dla obiektu klasy \"rpart\"" msgid "'x' must be an \"rpart\" object" msgstr "argument 'x' musi być obiektem klasy \"rpart\"" # rpart/R/residuals.rpart.R: 12 # stop("Invalid type of residual") msgid "Invalid type of residual" msgstr "Niepoprawny typ reszty" # rpart/R/roc.rpart.R: 5 # stop("'object' argument is not an object of class \"rpart\" or endpoint is not a 2 level-factor") msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" "argument 'object' nie jest obiektem klasy \"rpart\" lub punkt końcowy nie " "jest czynnikiem dwupoziomowym" # rpart/R/rpart.R: 15 # stop("a 'formula' argument is required") msgid "a 'formula' argument is required" msgstr "argument 'formula' jest wymagany" # rpart/R/rpart.R: 24 # stop("Trees cannot handle interaction terms") msgid "Trees cannot handle interaction terms" msgstr "Drzewa nie mogą obsłużyć członów oddziaływania" # rpart/R/rpart.R: 28 # stop("negative weights not allowed") msgid "negative weights not allowed" msgstr "ujemne wagi nie są dozwolone" # rpart/R/rpart.R: 59 # stop("Invalid method") msgid "Invalid method" msgstr "Niepoprawna metoda" # rpart/R/rpart.R: 96 # stop(gettextf("Argument %s not matched", names(extraArgs)[indx == 0L]), domain = "R-rpart") msgid "Argument %s not matched" msgstr "Argument %s nie został dopasowany" # rpart/R/xpred.rpart.R: 81 # stop("Wrong length for 'xval'") # rpart/R/xpred.rpart.R: 82 # stop("Wrong length for 'xval'") # rpart/R/rpart.R: 121 # stop("Wrong length for 'xval'") # rpart/R/rpart.R: 122 # stop("Wrong length for 'xval'") msgid "Wrong length for 'xval'" msgstr "Niepoprawna długość dla 'xval'" # rpart/R/rpart.R: 131 # 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.R: 132 # stop("Cost vector must be positive") msgid "Cost vector must be positive" msgstr "Wektor kosztów musi być dodatni" # rpart/R/rpart.R: 251 # stop("Initialization routine is missing the 'summary' function") msgid "Initialization routine is missing the 'summary' function" msgstr "Brak procedury inicjalizacji w funkcji 'summary'" # rpart/R/snip.rpart.mouse.R: 9 # stop("no information available on parameters from previous call to plot()") # rpart/R/rpartco.R: 7 # stop("no information available on parameters from previous call to plot()") msgid "no information available on parameters from previous call to plot()" msgstr "" "brak dostępnej informacji na temat parametrów z poprzedniego wywołania " "'plot()'" # rpart/R/rpart.class.R: 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.R: 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.exp.R: 116 # stop(gettextf("'parms' component not matched: %s", names(parms)[indx == 0L]), domain = "R-rpart") # rpart/R/rpart.class.R: 17 # stop(gettextf("'parms' component not matched: %s", names(parms)[temp == 0L]), domain = "R-rpart") # rpart/R/rpart.poisson.R: 21 # stop(gettextf("'parms' component not matched: %s", names(parms)[indx == 0L]), domain = "R-rpart") msgid "'parms' component not matched: %s" msgstr "komponent 'parms' nie został dopasowany: %s" # rpart/R/rpart.class.R: 23 # 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.R: 24 # stop("Priors must be >= 0") msgid "Priors must be >= 0" msgstr "Prawdopodobieństwa a priori muszą być >= 0" # rpart/R/rpart.class.R: 25 # stop("Wrong length for priors") msgid "Wrong length for priors" msgstr "Niepoprawna długość dla prawdopodobieństw a priori" # rpart/R/rpart.class.R: 32 # stop("Wrong length for loss matrix") msgid "Wrong length for loss matrix" msgstr "Niepoprawna długość macierzy strat" # rpart/R/rpart.class.R: 35 # 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.R: 37 # 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.R: 39 # 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.R: 45 # stop("Invalid splitting rule") msgid "Invalid splitting rule" msgstr "Niepoprawna reguła rozdzielająca" # rpart/R/rpart.class.R: 49 # stop("Parameter argument must be a list") msgid "Parameter argument must be a list" msgstr "Argument parametru musi być listą" # rpart/R/rpart.control.R: 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.R: 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.R: 15 # stop("Maximum depth is 30") msgid "Maximum depth is 30" msgstr "Maksymalna głębokość wynosi 30" # rpart/R/rpart.control.R: 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.R: 23 # warning("The value of 'surrogatestyle' supplied was out of range, the default value of 0 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.R: 23 # 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, the default value " "of 0 is used instead." msgstr "" "Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej " "domyślnej wartości 0." # rpart/R/rpart.exp.R: 15 # stop("'y' argument must be an object of class \"survival\" - use the 'Surv()' function") msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "argument 'y' musi być obiektem \"survival\"- użyj funkcji 'Surv()'" # rpart/R/rpart.exp.R: 21 # stop("Observation time must be > 0") # rpart/R/rpart.poisson.R: 11 # stop("Observation time must be > 0") msgid "Observation time must be > 0" msgstr "Czas obserwacji musi być > 0" # rpart/R/rpart.exp.R: 22 # stop("No deaths in data set") msgid "No deaths in data set" msgstr "Brak śmierci w zbiorze danych" # rpart/R/rpart.exp.R: 112 # stop("You must input a named list for parms") # rpart/R/rpart.poisson.R: 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.R: 121 # stop("Invalid error method for Poisson") # rpart/R/rpart.poisson.R: 26 # stop("Invalid error method for Poisson") msgid "Invalid error method for Poisson" msgstr "Niepoprawna metoda błędu dla Poissona" # rpart/R/rpart.exp.R: 126 # stop("Invalid shrinkage value") # rpart/R/rpart.poisson.R: 32 # stop("Invalid shrinkage value") msgid "Invalid shrinkage value" msgstr "Niepoprawna wartość zawężenia" # rpart/R/rpart.poisson.R: 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.R: 12 # stop("Number of events must be >= 0") msgid "Number of events must be >= 0" msgstr "Liczba zdarzeń musi być >= 0" # rpart/R/rpartcallback.R: 7 # 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.R: 13 # stop("User written method does not contain an 'eval' function") msgid "User written method does not contain an 'init' function" msgstr "Metoda użytkownika nie zawiera funkcji 'init()'" # rpart/R/rpartcallback.R: 11 # stop("User written method does not contain a 'split' function") msgid "User written method does not contain a 'split' function" msgstr "Metoda użytkownika nie zawiera funkcji 'split()'" # rpart/R/rpartcallback.R: 13 # 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.R: 36 # stop("User 'eval' function returned invalid label") # rpart/R/rpartcallback.R: 65 # 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.R: 38 # stop("User 'eval' function returned invalid deviance") # rpart/R/rpartcallback.R: 67 # 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.R: 49 # stop("Invalid return from categorical 'split' function") # rpart/R/rpartcallback.R: 79 # stop("Invalid return from categorical 'split' function") msgid "Invalid return from categorical 'split' function" msgstr "Niepoprawny wynik z kategorycznej funkcji 'split'" # rpart/R/rpartcallback.R: 54 # stop("User 'split' function returned invalid goodness") # rpart/R/rpartcallback.R: 85 # 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.R: 56 # stop("User 'split' function returned invalid direction") # rpart/R/rpartcallback.R: 87 # stop("User 'split' function returned invalid direction") msgid "User 'split' function returned invalid direction" msgstr "Funkcja użytkownika 'split' zwróciła niepoprawny kierunek" # rpart/R/rsq.rpart.R: 17 # warning("may not be applicable for this method") msgid "may not be applicable for this method" msgstr "może nie mieć zastosowania dla tego modelu" # rpart/R/snip.rpart.R: 6 # stop("Not an \"rpart\" object") msgid "Not an \"rpart\" object" msgstr "argument 'x' nie jest obiektem klasy \"rpart\"" # rpart/R/snip.rpart.R: 20 # warning(gettextf("Nodes %s are not in this tree", toss[toss.idx == 0L]), # domain = "R-rpart") msgid "Nodes %s are not in this tree" msgstr "Węzły %s nie są w tym drzewie" # rpart/R/text.rpart.R: 15 # warning("argument 'label' is no longer used") msgid "argument 'label' is no longer used" msgstr "argument 'label' jest aktualnie nieużyty" # rpart/R/xpred.rpart.R: 7 # stop("Invalid fit object") msgid "Invalid fit object" msgstr "niepoprawny obiekt dopasowania" # rpart/R/zzz.R: 25 # warning(sprintf(gettext("supplied nodes %s are not in this tree", domain = "R-rpart"), 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: 28 # warning(sprintf(gettext("supplied nodes %s are leaves", domain = "R-rpart"), 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.R: 66 # warning("more than 52 levels in a predicting factor, truncated for printout", domain = "R-rpart") #~ 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/man/meanvar.rpart.Rd: 15 # gettext("ave(y)") # rpart/R/meanvar.rpart.R: 1 # gettext("ave(y)") #~ msgid "ave(y)" #~ msgstr "średnie(y)" #~ msgid "ave(deviance)" #~ msgstr "średnie(odchylenie)" # rpart/R/plot.rpart.R: 4 # stop("'x' argument is not an object of class \"rpart\"") # rpart/R/plotcp.R: 7 # stop("'x' argument is not an object of class \"rpart\"") # rpart/R/print.rpart.R: 4 # stop("'x' argument is not an object of class \"rpart\"") #~ msgid "'%s' argument is not an object of class %s" #~ msgstr "argument '%s' nie jest obiektem klasy %s" # rpart/R/path.rpart.R: 18 # gettext("node number: ", domain = "R-rpart") # rpart/R/path.rpart.R: 28 # gettext("node number: ", domain = "R-rpart") #~ msgid "node number:" #~ msgstr "numer węzła:" # rpart/R/plotcp.R: 21 # gettext("X-val Relative Error", domain = "R-rpart") #~ msgid "X-val Relative Error" #~ msgstr "Błąd względny wartości X" # rpart/R/plotcp.R: 29 # gettext("size of tree", domain = "R-rpart") #~ msgid "size of tree" #~ msgstr "rozmiar drzewa" # rpart/R/plotcp.R: 33 # gettext("number of splits", domain = "R-rpart") #~ msgid "number of splits" #~ msgstr "liczba rozgałęzień" # rpart/R/post.rpart.R: 22 # gettextf("Endpoint = %s", paste(temp, collapse = " "), domain = "R-rpart") #~ msgid "Endpoint = %s" #~ msgstr "Koniec = %s" #~ msgid "Regression tree:" #~ msgstr "Drzewo regresyjne:" #~ msgid "Classification tree:" #~ msgstr "Drzewo klasyfikacyjne:" #~ msgid "Rates regression tree:" #~ msgstr "Drzewo regresyjne szybkości:" #~ msgid "Survival regression tree:" #~ msgstr "Drzewo regresyjne przeżycia:" # rpart/R/printcp.R: 21 # gettext("Variables actually used in tree construction:\n", domain = "R-rpart") #~ msgid "Variables actually used in tree construction:" #~ msgstr "Zmienne uzyte w konstrukcji drzewa:" # rpart/R/printcp.R: 27 # gettext("Root node error: ", domain = "R-rpart") #~ msgid "Root node error:" #~ msgstr "Błąd głównego węzła:" # rpart/R/roc.rpart.R: 62 # gettext("Sensitivity", domain = "R-rpart") # rpart/R/roc.rpart.R: 66 # gettext("Sensitivity", domain = "R-rpart") #~ msgid "Sensitivity" #~ msgstr "Czułość" #~ msgid "1-Specificity" #~ msgstr "1-Specyficzność" #~ msgid "Specificity" #~ msgstr "Specyficzność" # rpart/R/rpart.anova.R: 6 # gettextf(" mean=%s, MSE=%s", formatg(yval, digits), formatg(dev/wt, digits), domain = "R-rpart") #~ msgid "mean=%s, MSE=%s" #~ msgstr "średnia=%s, błąd standardowy średniej=%s" # rpart/R/rpart.branch.R: 10 # stop("no information available on parameters from previous call to 'plot()'") #~ msgid "" #~ "no information available on parameters from previous call to 'plot()'" #~ msgstr "" #~ "brak dostępnej informacji na temat parametrów z poprzedniego wywołania " #~ "'plot()'" # rpart/R/rpart.control.R: 19 # warning("The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.") #~ msgid "" #~ "The value of '%s' supplied was out of range, the default value of %d is " #~ "used instead" #~ msgstr "" #~ "Dostarczona wartość '%s' była poza zakesem, użyto zamiast niej domyślnej " #~ "wartości %d" # rpart/R/rpartcallback.R: 9 # stop("User written method does not contain an 'init' function") #~ msgid "User written method does not contain an %s function" #~ msgstr "Metoda użytkownika nie zawiera funkcji '%s'" #~ msgid "Variable importance" #~ msgstr "Istotność zmiennej" # rpart/R/meanvar.rpart.R: 5 # stop("'tree' argument is not an object of class \"rpart\"") # rpart/R/path.rpart.R: 6 # stop("'tree' argument is not an object of class \"rpart\"") #~ msgid "'tree' argument is not an object of class \"rpart\"" #~ msgstr "argument 'tree' nie jest obiektem klasy \"rpart\"" # rpart/R/summary.rpart.R: 4 # stop("'object' argument is not an object of class \"rpart\"") # rpart/R/predict.rpart.R: 5 # stop("'object' argument is not an object of class \"rpart\"") #~ msgid "'object' argument is not an object of class \"rpart\"" #~ msgstr "argument 'object' nie jest obiektem klasy \"rpart\"" # rpart/R/printcp.R: 4 # stop ("'x' argument must be an object of class \"rpart\"") #~ msgid "'x' argument must be an object of class \"rpart\"" #~ msgstr "argument 'x' nie jest obiektem klasy \"rpart\"" # rpart/R/residuals.rpart.R: 5 # stop("'object' argument is not an object of classe \"rpart\"") #~ msgid "'object' argument is not an object of classe \"rpart\"" #~ msgstr "argument 'object' nie jest obiektem klasy \"rpart\"" #, fuzzy #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr "'x' nie wygląda na obiekt 'rpart'" #~ msgid "'x' not converted" #~ msgstr "'x' nie został przekształcony" #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr "'x' musi być obiektem \"rpart\"" rpart/po/R-ko.po0000644000176000001440000002204112465507605013231 0ustar ripleyusers# Korean translation for R rpart package # Recommended/rpart/po/R-ko.po # Maintainer: Brian Ripley # # This file is distributed under the same license as the R rpart package. # Chel Hee Lee , 2013-2015. # # Reviewing process is completed (14-JAN-2015) # The original source code review is completed (14-JAN-2015) # QC:PASS # Freezing on 06-FEB-2015 for R-3.1.3 # msgid "" msgstr "" "Project-Id-Version: rpart 4.1-0\n" "POT-Creation-Date: 2014-03-27 21:46\n" "PO-Revision-Date: 2015-02-06 21:56-0600\n" "Last-Translator:Chel Hee Lee \n" "Language-Team: Chel Hee Lee \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" 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 "분류(classification) 또는 포이송 트리(poisson trees)에 유용하지 않은 플롯입니다." msgid "fit is not a tree, just a root" msgstr "적합(fit)은 트리(tree)가 아니라 뿌리(root)일 뿐입니다." msgid "'cptable' does not contain cross-validation results" msgstr "'cptable'은 교차검증(cross-validation)한 결과를 포함하고 있지 않습니다." msgid "Tree has variables not found in new data" msgstr "트리(tree)는 새데이터에서 찾을 수 없는 변수들을 가지고 있습니다." 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 "올바른 잔차(residual)의 유형이 아닙니다." msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "타당한 \"rpart\" 트리(tree)가 아니며 엔드포인트(endpoint)가 두 개의 수준(levels)을 가진 요인(factor)가 아닙니다." msgid "a 'formula' argument is required" msgstr "'formula'라는 이름의 인자가 필요합니다." msgid "Trees cannot handle interaction terms" msgstr "트리(trees)는 교호작용항(interaction terms)을 다룰 수 없습니다." msgid "negative weights not allowed" msgstr "가중치(weights)는 음의 값을 가질 수 없습니다." 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' 함수가 초기화 루틴(initialization routine)에서 누락되어 있습니다." msgid "no information available on parameters from previous call to plot()" msgstr "이전 호출로부터 plot()에 전달될 인자들에 사용가능한 정보가 없습니다." msgid "No offset allowed in classification models" msgstr "분류모델(classification models)에서는 offset을 사용할 수 없습니다." msgid "The parms list must have names" msgstr "parms의 구성요소들은 반드시 이름을 가지고 있어야 합니다." msgid "'parms' component not matched: %s" msgstr "다음은 'parms'을 구성하는 요소가 아닙니다: %s" msgid "Priors must sum to 1" msgstr "사전확률(priors)의 합은 반드시 1이어야 합니다." msgid "Priors must be >= 0" msgstr "사전확률(priors)은 반드시 0보다 크거나 같아야 합니다." msgid "Wrong length for priors" msgstr "사전확률(priors)의 길이가 잘못되었습니다." msgid "Wrong length for loss matrix" msgstr "손실행렬(loss matrix)의 길이가 잘못되었습니다." 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)는 영으로 이루어진 행을 가지고 있습니다." msgid "Invalid splitting rule" msgstr "올바르지 않은 분리기준(splitting rule)입니다." msgid "Parameter argument must be a list" msgstr "파라미터 인자(parms)는 반드시 리스트(list)이어야 합니다." 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 "최대 깊이(depth)는 30입니다." msgid "Maximum depth must be at least 1" msgstr "최대 깊이(depth)는 반드시 적어도 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 "입력된 'surrogatestyle'의 값은 허용범위 밖에 있기 때문에 기본값 0을 대신 사용합니다." msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "y는 반드시 'survival'이라는 객체가 와야 하므로 'Surv()'함수를 사용하길 바랍니다." msgid "Observation time must be > 0" msgstr "관찰시간(observation time)은 반드시 0 보다 커야 합니다." msgid "No deaths in data set" msgstr "데이터셋으로부터 이벤트(사망, death)를 찾을 수 없습니다." msgid "You must input a named list for parms" msgstr "parm에는 반드시 구성요소에 이름이 부여된 리스트(list)가 입력되어야 합니다." msgid "Invalid error method for Poisson" msgstr "포아송에 사용되는 올바른 에러메소드(error method)가 아닙니다." msgid "Invalid shrinkage value" msgstr "올바른 수축값(shrinkage value)가 아닙니다." msgid "response must be a 2 column matrix or a vector" msgstr "y는 반드시 2개의 열을 가진 행렬 또는 벡터이어야 합니다." msgid "Number of events must be >= 0" msgstr "이벤트(event)의 수는 반드시 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' 함수로부터 반환된 라벨(label)의 길이가 올바르지 않습니다." msgid "User 'eval' function returned invalid deviance" msgstr "사용자의 'eval' 함수로부터 반환된 편차(deviance)의 길이가 올바르지 않습니다." msgid "Invalid return from categorical 'split' function" msgstr "'split' 함수로부터 반환된 범주의 개수가 올바르지 않습니다." msgid "User 'split' function returned invalid goodness" msgstr "사용자의 'split' 함수로부터 반환된 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 "노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다." msgid "argument 'label' is no longer used" msgstr "인자 'label'은 더 이상 사용되지 않습니다." msgid "Invalid fit object" msgstr "올바르게 적합된 객체(fit object)가 아닙니다." msgid "supplied nodes %s are not in this tree" msgstr "제공된 노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다." msgid "supplied nodes %s are leaves" msgstr "제공된 노드(nodes) %s는 끝마디(leaves)입니다." 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.pot0000644000176000001440000000770212456141615014136 0ustar ripleyusersmsgid "" msgstr "" "Project-Id-Version: rpart 4.1-8\n" "POT-Creation-Date: 2015-01-16 07:53\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/0000755000176000001440000000000012544206115012407 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.mo0000644000176000001440000000270012465507673016730 0ustar ripleyusers 01CUgy"-  9Gax"%3+Y*    '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-7 Report-Msgid-Bugs-To: POT-Creation-Date: 2014-03-18 13:59+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 X-Generator: Poedit 1.5.4 nie znaleziono 'nback'nie znaleziono 'wback'nie znaleziono 'xback'nie znaleziono 'yback'Niepoprawna reguła błędubłędne zliczenia zdarzeniaNiepoprawny punkt czasowyniepoprawna wartość dla 'method'zwrócona wartość nie jest wektoremzwrócona wartość ma błędną długośćwyrażenie 'expr1' nie zwróciło wektora!nieznany błądrpart/inst/po/pl/LC_MESSAGES/R-rpart.mo0000644000176000001440000001657112465507672017141 0ustar ripleyusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 WA=, -%"S*v!0';/N1~!"1 >*Z"8: ;(\,f8#VFz-6B&"i>dd0655=8=v<<1.0`0*!%651l ),,CRa>#,4D><'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-7 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2014-03-18 13:59 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.6.4 X-Poedit-Bookmarks: -1,6,-1,-1,-1,-1,-1,-1,-1,-1 komponent 'cptable' nie zawiera wyników krzyżowej walidacjikomponent 'parms' nie został dopasowany: %s'x' musi być wektorem liczbowymargument 'x' musi być obiektem klasy "rpart"Argument %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 predykcja dla obiektu klasy "rpart"Niepoprawny wynik z kategorycznej funkcji 'split'Niepoprawna wartość zawężeniaNiepoprawna reguła rozdzielającaNiepoprawny typ resztyMacierz 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 drzewieargument nie jest obiektem klasy "rpart"argument 'x' nie jest obiektem klasy "rpart"argument 'object' nie jest obiektem klasy "rpart" lub punkt końcowy nie jest czynnikiem dwupoziomowymLiczba 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 1argument 'y' 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 0.Dostarczona 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ćMetoda 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ść dla 'xval'Niepoprawna długość macierzy stratNiepoprawna długość dla prawdopodobieństw a prioriMusisz wprowadzić nazwaną listę do parametrówargument 'formula' jest wymaganyargument 'label' jest aktualnie nieużytydopasowanie nie jest drzewem tylko korzeniemmoże nie mieć zastosowania dla tego modeluujemne wagi nie są dozwolonebrak dostępnej informacji na temat parametrów z poprzedniego wywołania 'plot()'Zmienna zależna musi być 2-kolumnową macierzą lub wektoremdostarczone węzły %s są liśćmidostarczone węzły %s nie są w tym drzewietyp 'class' jest odpowiedni jedynie dla klasyfikacjirpart/inst/po/en@quot/0000755000176000001440000000000012003313337014433 5ustar ripleyusersrpart/inst/po/en@quot/LC_MESSAGES/0000755000176000001440000000000012003313337016220 5ustar ripleyusersrpart/inst/po/en@quot/LC_MESSAGES/rpart.mo0000644000176000001440000000231112465507673017726 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-8 Report-Msgid-Bugs-To: POT-Creation-Date: 2015-01-16 07:53+0000 PO-Revision-Date: 2015-01-16 07:53+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.mo0000644000176000001440000001522412465507673020134 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-8 POT-Creation-Date: 2015-01-16 07:53 PO-Revision-Date: 2015-01-16 07:53 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.mo0000644000176000001440000000274712465507673016741 0ustar ripleyusers 01CUgy"-  9|G### #06T>0-*)7T:    '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: 2014-03-27 21:46+0000 PO-Revision-Date: 2015-02-06 21:56-0600 Last-Translator:Chel Hee Lee Language-Team: Chel Hee Lee Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; 'nback'을 찾을 수 없습니다.'wback'을 찾을 수 없습니다.'xback'을 찾을 수 없습니다.'yback'을 찾을 수 없습니다.에러규칙(error rule)이 올바르지 않습니다.이벤트의 개수(event count)가 올바르지 않습니다.시점(time point)이 올바르지 않습니다.'method'에 올바르지 않은 값입니다.벡터가 아닌 value를 반환합니다.반환된 value의 길이가 올바르지 않습니다.표현식 expr1은 벡터를 반환하지 않았습니다!알 수 없는 에러입니다.rpart/inst/po/ko/LC_MESSAGES/R-rpart.mo0000644000176000001440000002151212465507672017126 0ustar ripleyusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 `AZ<5:<p*3> ]KR:17:iP5:+5fSR]C$HMR]F)!AKFKaeH>\jNYUpj QYO7fc`R_[ZoZh%.=8f4 4 7 F!9O!<!_!M&"9t"P"J"><'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-0 POT-Creation-Date: 2014-03-27 21:46 PO-Revision-Date: 2015-02-06 21:56-0600 Last-Translator:Chel Hee Lee Language-Team: Chel Hee Lee Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; 'cptable'은 교차검증(cross-validation)한 결과를 포함하고 있지 않습니다.다음은 'parms'을 구성하는 요소가 아닙니다: %s'x'는 반드시 수치형 벡터이어야 합니다.'x'는 반드시 "rpart"이라는 객체이어야 합니다.%s와 일치하는 인자가 없습니다.cost 벡터의 길이가 올바르지 않습니다.cost 벡터는 반드시 양의 값만을 가져야 합니다.'summary' 함수가 초기화 루틴(initialization routine)에서 누락되어 있습니다.포아송에 사용되는 올바른 에러메소드(error method)가 아닙니다.올바르게 적합된 객체(fit object)가 아닙니다.입력된 메소드가 올바르지 않습니다."rpart" 객체에 대한 올바른 예측이 아닙니다.'split' 함수로부터 반환된 범주의 개수가 올바르지 않습니다.올바른 수축값(shrinkage value)가 아닙니다.올바르지 않은 분리기준(splitting rule)입니다.올바른 잔차(residual)의 유형이 아닙니다.손실행렬(Loss matrix)은 음의 값을 구성요소로 가질 수 없습니다.손실행렬(loss matrix)는 영으로 이루어진 행을 가지고 있습니다.손실행렬(loss matrix)의 대각요소는 반드시 0을 포함하고 있어야 합니다.최대 깊이(depth)는 30입니다.최대 깊이(depth)는 반드시 적어도 1 이상이어야 합니다.데이터셋으로부터 이벤트(사망, death)를 찾을 수 없습니다.분류모델(classification models)에서는 offset을 사용할 수 없습니다.노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다.올바른 "rpart" 객체가 아닙니다."rpart" 객체가 아닙니다.타당한 "rpart" 트리(tree)가 아니며 엔드포인트(endpoint)가 두 개의 수준(levels)을 가진 요인(factor)가 아닙니다.이벤트(event)의 수는 반드시 0보다 크거나 같아야 합니다.관찰시간(observation time)은 반드시 0 보다 커야 합니다.파라미터 인자(parms)는 반드시 리스트(list)이어야 합니다.분류(classification) 또는 포이송 트리(poisson trees)에 유용하지 않은 플롯입니다.사전확률(priors)은 반드시 0보다 크거나 같아야 합니다.사전확률(priors)의 합은 반드시 1이어야 합니다.y는 반드시 'survival'이라는 객체가 와야 하므로 'Surv()'함수를 사용하길 바랍니다.parms의 구성요소들은 반드시 이름을 가지고 있어야 합니다.입력된 'maxcompete'의 값이 0 보다 작기 때문에 0으로 대체되었습니다.입력된 'surrogatestyle'의 값은 허용범위 밖에 있기 때문에 기본값 0을 대신 사용합니다.입력된 'usesurrogate'의 값은 허용범위 밖에 있으므로 기본값 2를 대신 사용합니다.입력된 'xval'의 값이 0보다 작기때문에 0으로 대체되었습니다.트리(tree)는 새데이터에서 찾을 수 없는 변수들을 가지고 있습니다.트리(trees)는 교호작용항(interaction terms)을 다룰 수 없습니다.사용자의 'eval' 함수로부터 반환된 편차(deviance)의 길이가 올바르지 않습니다.사용자의 'eval' 함수로부터 반환된 라벨(label)의 길이가 올바르지 않습니다.사용자의 'split' 함수로부터 반환된 direction의 길이가 올바르지 않습니다.사용자의 'split' 함수로부터 반환된 goodness의 길이가 올바르지 않습니다.사용자에 의하여 작성된 메소드에서 'split' 함수를 찾을 수 없습니다.사용자에 의하여 작성된 메소드에서 'eval' 함수를 찾을 수 없습니다.사용자에 의하여 작성된 메소드에서 'init' 함수를 찾을 수 없습니다.사용자에 의하여 작성된 메소드는 반드시 3개의 함수를 가지고 있어야 합니다.'xval'의 길이가 올바르지 않습니다.손실행렬(loss matrix)의 길이가 잘못되었습니다.사전확률(priors)의 길이가 잘못되었습니다.parm에는 반드시 구성요소에 이름이 부여된 리스트(list)가 입력되어야 합니다.'formula'라는 이름의 인자가 필요합니다.인자 'label'은 더 이상 사용되지 않습니다.적합(fit)은 트리(tree)가 아니라 뿌리(root)일 뿐입니다.이 메소드에 적용할 수 없을지도 모릅니다.가중치(weights)는 음의 값을 가질 수 없습니다.이전 호출로부터 plot()에 전달될 인자들에 사용가능한 정보가 없습니다.y는 반드시 2개의 열을 가진 행렬 또는 벡터이어야 합니다.제공된 노드(nodes) %s는 끝마디(leaves)입니다.제공된 노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다.타입 'class'는 오로지 클래시피케이션에서만 적절합니다rpart/inst/po/fr/0000755000176000001440000000000012003313337013427 5ustar ripleyusersrpart/inst/po/fr/LC_MESSAGES/0000755000176000001440000000000012003313337015214 5ustar ripleyusersrpart/inst/po/fr/LC_MESSAGES/rpart.mo0000644000176000001440000000251012465507673016723 0ustar ripleyusers 01CUgy"-  9G$7#Qu',04    '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 3.1-24 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2014-03-18 11:12+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.6.4 'nback' non trouv'wback' non trouv'xback' non trouv'yback' non trouvRgle d'erreur incorrecteDnombrement d'vnements incorrectPoint temporel incorrectvaleur incorrecte pour 'method'la valeur renvoye n'est pas un vecteurla valeur renvoye n'a pas la bonne longueurl'expression 'expr1' n'a pas renvoy un vecteur!erreur indterminerpart/inst/po/fr/LC_MESSAGES/R-rpart.mo0000644000176000001440000001654312465507672017134 0ustar ripleyusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 A="0"Sv/$?*Do+'* 54N-7 + !6@X&&S%[/*I&!EHg%Pe'eJC>@=CDEM<;;Q5'! /+$[%171TB;'.8*><'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 3.1-24 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2014-03-18 11:16+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.6.4 '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"Arbre "rpart" inappropri et feuille de l'arbre diffrente d'un facteur 2 niveauxLe 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'un argument 'formula' est ncessairel'argument 'label' n'est plus utilisl'ajustement n'est pas un arbre, juste une racinen'est probablement pas d'application pour cette mthodeles pondrations ngatives ne sont pas autorisesaucune information disponible pour les paramtres depuis un appel antrieur plot()'response' doit tre un vecteur ou une matrice 2 colonnesles noeuds fournis %s sont des feuillesles noeuds fournis %s ne sont pas dans l'arbretype 'class' n'est appropri que pour une classificationrpart/inst/po/de/0000755000176000001440000000000012003313337013410 5ustar ripleyusersrpart/inst/po/de/LC_MESSAGES/0000755000176000001440000000000012003313337015175 5ustar ripleyusersrpart/inst/po/de/LC_MESSAGES/rpart.mo0000644000176000001440000000243412465507673016711 0ustar ripleyusers 01CUgy"-  9G6Mg} -     '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 3.1.0 / rpart 4.1-6 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2014-03-16 17:30+0100 Last-Translator: Detlef Steuer 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 Fehlerregelungültige Ereignisanzahlungültiger ZeitpunktUngültiger Wert für 'method'Rückgabewert ist kein VektorRückgabewert hat falsche LängeDer Ausdruck expr1 gab keinen Vektor zurück!unbekannter Fehlerrpart/inst/po/de/LC_MESSAGES/R-rpart.mo0000644000176000001440000001625112465507672017111 0ustar ripleyusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 A5"$:!_#9%>])p:01?'q/%0$P"uE$'6D^"L ,SMtsM<1:G;9<D5CzCAD!_4!,( (I!rR4%2B3u><'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 3.1.0 / rpart 4.1-6 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2014-03-16 17:27+0100 Last-Translator: Detlef Steuer 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"-ObjektKein regulärer "rpart"-Baum und ein Endpunkt kein zeistufiger FaktorAnzahl 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.ein 'formula' Argument ist nötigArgument 'label' wird derzeit nicht benutzt.Anpassung ist kein Baum, nur eine Wurzelevtl. nicht anwendbar für diese Methodenegative Gewichte nicht zulässigkeine Information über die Parameter der vorherigen Aufrufs von plot() verfügbarAntwort muss eine 2-spaltige Matrix oder Vektor seinmitgelieferte Knoten %s sind Blättermitgelieferte Knoten %s sind nicht in diesem Baum.Typ 'class' ist für Klssifikation nicht angemessenrpart/inst/po/ru/0000755000176000001440000000000012003313337013446 5ustar ripleyusersrpart/inst/po/ru/LC_MESSAGES/0000755000176000001440000000000012003313337015233 5ustar ripleyusersrpart/inst/po/ru/LC_MESSAGES/rpart.mo0000644000176000001440000000252512465507673016750 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.mo0000644000176000001440000001566512465507672017157 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/0000755000176000001440000000000012544206115013154 5ustar ripleyusersrpart/inst/doc/longintro.R0000644000176000001440000002402712544206115015317 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.pdf0000644000176000001440000062505312544206115015473 0ustar ripleyusers%PDF-1.5 % 3 0 obj << /Length 2418 /Filter /FlateDecode >> stream xڵˎ>_! PEw56ٵ085X"Ǣh6SDr쮮~X<dMfgYX$,0l 8hE Ƈ{9<<}뎗60iW!2 ΋2xj^Trnq52CEUGlaʰbn9/:ɂv.x\SqV)f8 dsSFpw̴^E&Q 'aRA3&,yPA9mxΗ"LQODJBTvppxDZ٩UtcNh[+[N/|V$;1]AĔ@-ILpܺߣ86138(O>!28x/ch $I^Un<34C}; }$/ijyuRD&(\tgOH-}k03V`u`G`3Gz8W+r_O$ ޹fʼV<}.ID{^QF 2_#O'GXL]iJoa|P88+a[U$̃5h#e~`PEyĞ? kOQ]ܝQ}s+|Q7xxbS~`s%g5'ǻ޿`_D|oxkO>!A48~-5QD0 u,~RڇAW4)|oA,dӖc(d[!}^pI}zM/΍D]T:qe& Q3X6*|CZZ4rN+)dtDj=4x\G&A!GB:$ض SB=;kwRQ"KCWz/.:;.IPUi:Xfd^ 'jlIۤ.2}Y{; F߮D-弯c ΨWVrbRwMMnGRVuGTgaV&kOri.d"#3* y6O'S&AO+:^i0@\-R$2UwK@2֛Ed#UԻSc2+/elƐʘ䊮HQꉾ[8RG=35jn~Z|A|,{VL\9dwl ¤*g'[^vFR0DVN}iխxtc֊3P~cV}$9%,D7A܏¸8/떘`Wln!qu^g 9җG~}*c/KGLΚC@A "%YYrdHpBz#Qf?kx^\؋ WziD$&6ȅSDˑ5VpZ#2&2&d;d'2ڰ5SY%.АCZcgS"n>0* އ*C^hJ&#uO% o)Rc5T̒n)"-r&RZI&H#,tM3wb O2qd> 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 1623 /Length2 11285 /Length3 0 /Length 12332 /Filter /FlateDecode >> stream xڍPk-K!8oqq\ ̜1HWfe3!QR[m@#Qj-a!d@𛡢@`ccaމ t4(2@HN^T7BbeZ sK;Dodey+Ͽfjog?Y]EK^\wx1rr8Y\ ڙx*mN*o d\?Dcd1yb.,#[͟z ?zoum.1_, v6;Tlb]kh6v e{g?#+ ޶p~*wJI;{?턁NN@C~C/ַu4b3=֜ 0x&Fl `!3hfȶ}l `v|`5?-?[^? joA&H&AVAwncӔZ)^N?]i+?:݈&va,mJ\,>{6iNPiy~2SnA=o15$^9sa1 A=3dxNAŌi Yn&iN6&J*j`"iED~jڐ?;I:N4cXvlIn72|K f+ JMH:G{0}el׃^yXv/=bP7pð7tsžP} ^ 4g@.ee֙HJkBTd0sFq 1H5B& Y:)pbH8=`$~A%_"AG6ՀyX77ˑPgs1?n KE-Mkhm,]IS}*GU牊`XIqC3YT\n7~µI&%bJG9zI $'W\ҟ =T3hxY`{^`+ 5ՁD4fKu I۳]'2?S <)3>$Fw۬Yif^{QҠ?v 'r;kɇ^|6#B_F<|ڱ6AWºnP#&T:FYm+(Φ2 wP&My#0>/F(̫Y[YI4ߞ[au[ak!ovZxT:V?U]h$]_|&v`Tvil!UTVhfm*LkCFuTJeuIwrr?͠%Ȯ_ϨZ_%"(omcߎŘ7Vy@.}d8y_cb#j&u{dHqt ^WN{n1id'܊>_ArȻ5ⱉ~I7IZUȒyh!DYj ڳh?€v<4nr&2Y?`H=lrH|5AkA&F0);'Ti0R*HvA-OhgؘiviYhu[&+'Տ y~*&Kzp Z7M|7)B U2Be= gdS!W>@I}d]#ye3ƕ6]`fN3Ͼ9X{\5zYHHY E[;/ُźPeǽ(`+nd^e A; :g ";8bB[GR3zU)?`0y`HRaNOÔd T\ y9<[^8nmv<4׿Wh>%G4=-zòl"_3kVzV ʜF|maۈol&G?qD*:B5 U&QxLeE_!hXVC g?٣ Fwny_5뭫mJ3@6 ;$é⇅LJMka_d- 8A4?PL5dOS1ař}*QE+Go0XU$j"{gsзzyz&z*(8~t 2۶uݖ] U~4hFMU,YYp!z-%%wkr\7x~?S im "֭KDTu& UeCPM\8yRU%8a-K42l{MsY5U ڵԟt'B MQ(ud;D]?hIF9 htNO-؜  ?kY0؏H:: 0@oȪ'>rl7vLxa|54btZ;mqE4;< i>gg,Ci׊ӠDIUF}vkWMy>^/e)>3 LqZ BAHBaRߑth2Iݩƨ; Roh sx)=I~=#ʻLol!t罒_ICgZƙw0tP0fO0; Q.s¾V b92ݎ"g! vѭVy@;G&zyWV1\5ƒz\#BnC@X4{Uq+f!&UJƦפϰ7]%)Bڥ 4(AM{8 pX[Q>}] 76Sf _]ڊ{xsei*f.JDyVp*d2d$}7\Lf/Ă2<&M:";o^<=fm~Ѿ>UϮs7;5lRO!L}h36w=0nOIz13=/$O7^:ô|ksm?_ 6L)PvX^b44PlAe 1|Jg"z\-tf6*wTcje%,)jmz]ᩇ˓0  ǽr ^夜HUꐋלNa%СUJ?*ObVV3Hdc y^k!hN6Esnf^*&^ >)026NʱJe\WT$CoX+ oxyˠwx+ @\@9 t{59a2]@mHZ⋕H7;?<g:߭ S/M|Sy:D6c;S󬚶2|LV;5 UVP;9BhI5h%Gg!fy[3*8ToJN'FPI U= tF\h׼7hjGiʸkCp<G= ]۱*{F&"|g6I|Yl 2=c#oBey\,s}H>LJh^JIIKZ$)o`HYAv$[EmFwC&ŚfؤRN).G6=%|P ;mR62w )̯uVYZO:I~Q#|<59BMiżZvb4j!/omt)/" M< F)1 'F`k(EUi\~hК#gI !g] i`N a5cpQjF)"snsOtӦ5K1D0ˠvfn`_QzH{γf^;!0I_R:nq踘m[h8_hJS)Q\{`\1gq:Zο(&, TG_0[,m0ϳ]fT>;%*gzhgJzpc/1j^"'t)St?MT7c lȽ/]\%2AaL@7&e\~pC\k}g;^8+6͠xmu~nh_&RN O%3t Z1XBUDIO|6ݱ$W"/dMikLUk?ڻ^c2\B\j۹ RJa=zO)d`Trez]?G~]nz5ϱ).&P>lX\O6զ4$-|Ap"ȈuGEg_sHzpdHk[FeWDZw2ct6?֣~՗raYCWy*PΡpΆI>#kTJx~(MJRٯ%JJPei b`04u^dfF}YI_}dIE÷š.YBYT ˨L_NC&=GC_RYKLiV- tLLgl ?G KWa6NC +*㨭o߯h@Mf;S~JlCs:;ʰb1Q%{'몵KH,8M+2҇%R_!6@ga)S_/-;ĺetˠbu9;ܫ̊ԋOkaט2,E҈yg(߹tb ZӶ$E"8%?sPu},;G!MFoL*{$k_YE|FHP?1V[Wq5CCOsWxޞ"Ϧ/6YCdqeKGtwz)l`+D G*,BXJXJKΆlpmI-L EVL蹋9n]NH-$gN" 5;Vb:dR [>P{w47]j hw+.V9&#M]}S_70΃lG?ٌ<TT1W{tբ6xRF6JlQ=T@1:?R龼8qk=^XטK5^@2tq$߮byIX ʋgΜ*xU9k?>qmy ͮ1c7dFж>;vz,LFY{ 2eTI5iW6L Ҽ# G)$W?O}%0"ڡڤY죺T\og?s<I-{]bA};S4zݯ \yCę/xHZ_%^x|r 8ߋh,<5)f2&A,8f̙_s~!;>E 6xTLR2̟Zawnu-n?hwH̝jIi 44޲I[SmY"DBዥaCbN.8ςNW2_*=8qn 6¨Rjځ~bζs/]OJ {~CM[d6BrDOd򋅵,zEb ?]}fFDm7udku0b]>N\n[^- z@L͡4T),N>jxʋt o{cPy}XSCG[d?ÎݟC~g$LA&Đ=J@y[&yςp,R}QFn=fB{USBW[8l٢`մ'|41Z]H1⍽PL}3Mk>g,72wI˞p"5_S6lSdwG2٩Z'1<^r_^>?`ެaEpʞ+qDM<'u9t[|]g3o\b1I!բ%2!t-  fVMd"y;Ζo'[bN6"J W{s"t1Վi{PM,xRt_y45q=a:)$m>:l"L*X: ̼ %ԥP+i@^ܑ}bp4֥sn*O,KC]_gm9 i:]SB _8#kO$!l^krS9nE$1\ tw>' LWF֏'=5)}ufkvO RƁ:9 Sib̷y-jOZk,^Xx'0I!rWV0JEGxc:BJ¾!$myUM>gو;m34r=&MUH )x+r7!F1H NOӽ\>❒9*B՝8\ۺvEU+^o]:7O#toD>P4 +w+@SuVMfG]j!yUͬj~mhkL5NJK#]ͬG`vkx c0-z Y )+[0 qcMd }tVG} 5>D{g$ȦAMq\9Ea BxHJjxĿdyvxZZcHxT:;@vcg$ŭvC#.(KGa:D Mڶ$g^((<pIidB _oËIOKCM^\ȀElH/rDâF3FsX<1c,rc851X6REӳ&ZBvܤs27)Z3"FE&J 0Egq6YØj+rCS Scvgױwr}ԁqbsDOdeUk*8xZטw.dmT%jՉ?7r\/vӹ#>_$6QQQWj$^oez\/1ܳϜCGÓͦ٪BW27o(h;|0A! y0v'kA^EZeHGhH&+FKIJ%,ؑi7K0& \DgD-ll+'>m&a%s|riUtziN}kC8Sٝ Nr<2;k3>^T9Mu=`,DXC0y-qKE'5_!?) WVHg>0eUޖ3h" yffFmMIniƇAu"B7H jNu77CN FLmFX)o[MTb Fkp4K7w<qK08n]XY0}71,R8ҩ$Ql ᭋԽihY]\CKBw;KfJ9u=::}N>u FMv-.؀I$^ޑTC- % ciQmri⻊(h/zhW˟/[[qGK Jб?x!=LZ}u | 4CfrU>lA$C]u]-)7@ӗObqt#Ɇ lܡD?E@0= ߧ{t :cNb(lu(J&%)>Cα-Ƭp_KAX/W.NEZkġ5GPBL@vD. 6d;$/l:0\^SC\L`㣱YṁT[Rn1ҹ5ۉ"U{o[&֝||2)xͭ];6!~D0>ˀܻ;"n=2?O2`hKh4z c"ޅO{s(>퇮#34YeVxiM Q{+L_p ܰJ *&gNE^}h PyUA=73&J?9Jĝ(?6a{m-\2!1>V }2CKKoT=~Yk݂%F_~yďvgMdӋwlx@rQƼArml)r(n|wac`PF;ZmkvQ+t^t¨r~ҁL\7 ̾uo-l?iL\dkfottjt84߃.e?(kO§;*Մt#4,\n[:\>^SMSe{V䑩(:_b,|;b|XTQ^$p X|&NPߓoIES?:+ykzɊ zXm|4π .y R|ȋLB}]mUSmP,QdWiqk# Xnw Za;fz;K:;s0Y0fx+m/Ϙ?  MRA\""E.fiU+l'U΅p{9!H)j$knSj8uyDfD9jDa:x Ux|{&&! z-`"YooOam endstream endobj 76 0 obj << /Length1 1822 /Length2 11080 /Length3 0 /Length 12220 /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:j@_s+`sܗsniaw-ݐHS*WD2vv `;Ͽ"^ʎ/𿡺?WW}.]w2`Oihv`3``gv۾</zYn)`h{8yx@"%N7:ZS3 a7C GtT:1+KGZ\pvh/ 8 P9cʘ%c j)c.pV޹ird-b:=qJP~fz0uHMוu@S{C-Mfᚮ dΤ6Yv[w#6虝 sWrZu1j{׵#=N߯c+U\! J®E3AR 9]jӑƅD (,_GG~*ڐ+p' R@l]aM7h.&s#\LB#/;ʣc:z[-4>Bpo<@(O^g&~v+[)M.]~9c yC00?ClbvCGK%4,\bkg?贲NLh7!t, u?K%=No5y7dG n<8ҹ@G 0oQRӾ(H equ'<)}iE$ ?-낓YOd~|;-Mv"2 73 osrUZ"ص; ŮST:Ч;Or RhF,)6ʜ(70ОֶKN'jݮm 3jX ܕLNz&\/'{uw|#*D:/nTWfX Օjiq$-9-$CX@bjqJf1>WNTQJjzC^f_'}h -U91Ukc+XjAmgh%MlD~VNL$0vܻVt2Z\nrj*2Wr~Op` _6JQT7\&RR||dyn)3V(55:l^B_s1 2l#L/]I`Kp(}M"Jq?EwrꇎW `*ӱcG.]shAХ.8tRLfe5,ܴ+jVH9+$6u{#"i7\p*Wq^?o^xly\$k=ɹ/ϋTrcӘـQ #|t U-}igej˱k׬v626Y_jQ8Z8ʫtVBY2S-q}xsėU&<ȲA!LALaWWu'@e,w,}X gįYh20:!ϋdDM5 *4` @}Zz{mo&z ogl0]5i\gƖr2$')cj9NQP-;t@JKȢPT6z-zΰ=ڃ]FK"4JhmOc0h̢\8|IԤ@fl5K9k"CS+p;Èh,kh4G\ mrl " y@JMHw56v~dDᤰ,}ְe9M ldWΤ'E3Lq_!,6fʈ>xEp ٜ/:!5$V-=ǮͿ.<arݚԾ_0,-dt"zti|AWzm֕= g ^rȊSO-+o+c"&ܟq̤wuB8'uNn͘+:ʰ[IV,eKmwzFPRVX@ f$C3UYL8wM2kVf3]zN'!OMg2\VXY+s}|ʒ62̂Z78ʘL^MGP8޹0p&Hۤ>D罝~:Fz(Y/7q>%G;B7: +D_3>l^%{`uםIWeSJ,;vXH %9\kt_pA΂vOKҁ6 ԙzP~`~jB9eQm`Y7Jj 2I51r.׮p͚͓=2M"]$.,eːRO,Tϒʋ1 16o}uSN+ H/ XǬ˖jy SLtG&l?tG'Rmvj4}'{N8EoF"]JS~'n1iM)襢Ifc-/:;+IqqE}Xq;5v 5?z?=+n]TH mxvHaU&*XEQnKVn;ܼ5|rW)T.lrUɿ--?o7EAȜyml]>>wW7`ҏP}׈Դ&zaj m)fUCB-FwJ(׼ EARoŽ* ;tsWBjݟEhr7h5jZ)7Rs#(T0]M2R9(^1ƒU_\ކ0=ϲQ BZj"tk_RI }Ɯ0 `ǃxDMX` !B;꣫G1ZYǚm*Nkg{A_Fd^1AG`;5󍼰Nx&6; ?YwbDxGċ>gĻ}E7[&5d/h5褿L^.M]H򋡴 rf/!n!U}KO(g&dŝePghw%g[`r'%]`1}V^amQ֏6T!'LkHд@O2Od;]ZvS\盋QԊz{-%,{:c* MʠJۉ/*YVHPg$zG>Ϋ2^$8|U'GK=-L4DYLH$xewP%_=[]F7IBUntqZLvԋpy_CdjbISaUh VG#{^K}̵`"=M%Z S7VaX(yu5PjmQ4X 6 -rUI[ŬpFO]FB À4K9b0セc >$1ZL7m"懒1Ű- 3FÊFeKۢ ^RO]0݇;'E$Ac2(*7ą7 (m#Dp`/GOtsN<5/nіU4Ǣ 8Y+e~,=*33Ӧː wz/w}kű76uZ Mi+ŷwx!e4*^)}ڋg}Ȃ l$H0CT2hP2W@y"1Z sj"xVۮoړW0,8r,V| DsygA(V<-lH%tC@:[*/oBҕo+O--[,1Hop؈iu&.+N{u l޲v5C7M>a Q2VVv+R^:u`;};x){7PXcEVG&Lb&:~ J_onٻ_KadmY+=y6ϏI)R`QtLHI5-7O#O*t> w'vU[!-}VMN} u:];;&yu K鵾T2QV'aGҴ qퟅ;pV sz+v/ՉI 3`*YhiZKd%ojz! B˷65 ggNSEny+; Cw#1862yL ݴR )pf:+!LijVYC+'ڥLMaǞڲ|&$Zƍ0rQ"Sj[c K5řuh(mYth|-TMqT1bB"JȎ>91ޓe._fr+f!fxP97Yv1S#546eVRq_Z0`7)d$ۄXB2-c [r1ɃVʓON YBŹr L{7Zฐ\ڬďֶQndrÔZ˜x Q~j1f'Tp9l*m{fOG}c_EoN{uu9cƶމ zŤ*hw/@*8x}(1dTk";S ZI1̳rUtr.L8iIʜ%j5׻x>($ܹ%((^kڹAc/ <i!Cl-'\޲Ry[ hֵ%rJ(mr\{Dۋ.m?3Όb9|+tʗ `EyoV(G`x D3h>5:4ު'r#@O'3HBREjriI(IamU,0@4MsTylEsژz)2arg,౗X8\Bt}c`?^8' &A'Ioj,o!/5cջPI> 7+flĄkO^{՞^2 #f n^ e|?.CNc1|\"rBc;fA߱ۅs;Eb.jeHƆ;'U_7wxgt؊W;㢗># bbQ_{U>}ФZsFQsSaqJ.o-wB~E:XpVh6D K]}*MåuXP|,(=c *=yq(.ZPG'DuEmo2s;3GHf `J6Nn;VL4?{s۾q _G??oûhoԧ(oE9!"sk)|d}Y([vȮ~+|УtTi›8`B0\uT`M)A0*HJ"МaC(OZZ؂aQ ):\7iNf}87` "RRoD#IUn/r1^٤cqg!0?-wL@}Qn,hҔe:aWG%3I̳Ǫneܧ=7`+D qvpG{צMSl4O^spd/z82EHT"}B_^.ƽޒfl`EA%Hjc1ۃ20!~M= ߶3}R;?Yc`{K4&F,}^Sc2OuI6B+nk!:lxglIDTYsI\zPaW>|b"c邉7Fձ%S̫=@6 G,қkeMO7 8ZJY;jjxu@`rCrP=%VM78ZH?7U_VlteXE<$n 69;!!.sqUq)y %-)bK3mk-!aMq0IJ–dN^ʽ6/Ҫ`n:cSk8B+z>3gcfYP*SDonSDu5^4+F^۱U }>;4nb-jiToG9ģT0M75;%&̃TՆh z9InɗTDkV|䃒l ª*ir "$SwUzK6epn:1brAϖ_LE2;)+o]À.4#a;Bsc#;lRǷPˉϐ06rK+}`{GɎ>|^.^5n6/b^7U.CI3ҁaUv:3u:ؙ) A+}l^ɫIacOYn׼Ub {R;L5U1k?biTFV,KDs픓6յ=Cv,etęa՛3_wk R䅧1I웯aNy$*IQel$Ď0kzXO35Pœ\&8Q\-)eՠ{yL"? J_yz~Eq>Jrds`tSRuYӔ 9G,|s]GLH~ +͔ v-uǮ$q('8*u/tɺEmT"#"JBvoxhC gfkN{̍X݉p@JJ#֑+Z y~>BhIرtϚD|Zq8c =edQr&jab-Zޞc{3s[.38~I>E1_ACr FI?7%h{YDwJpޗNRg,7N-.#v=O:)$rrIN7-wXcK}ݫ.7M8ݏ*53@w[ԩ6ʴܭͭ:nv6+$.AzzX6\\%ngjnFm{/&_Q`1ORn/x%4kޑ!۰ڽc:Aݢ/N.w98ˣCj݉f^Rrd/*g9FTK # bҏ{ND j5 KR[iZ)}߉Ӊe>𒪮Gy6gOiGۅv;N_\&mO웫с# ])Ya]KzXzM=k-1Dms?PwiGسVgm{$UN dQ,9,,ʬ9X Z0[#H{J-+\aWǴqvfq 9H#H89i©d#XWP'_uq sM "*'xYݐ1$ کJ<WT+[(E~+ͱGDM-PxuXsKA#WLBׂGu0w99ZT tN`~.mպ.P݈qְbϭM_c8,wZ5`utly3zҠ1qzR 8@v`F 9||eXpy O5սPLo&x5T )fuOƳ'ZF[,'ۗȲ[vK˥O>Z>d7$bHE/vTv_5zgys"c)*/M‰VARFhR$5 jίoRa $Va8O7PJ95c^E6(‘>vO^TUca P)1 QxF~‘T=Հ9twK:ٖ}ރT&zbFpʸuEF660KFJU*$LW %/'A/^ӟj'f 먟) cΕtr, ˨@rE$8sbMC>j{KAJB'2joͰEJO^Q@9 k'pŗZ endstream endobj 78 0 obj << /Length1 1387 /Length2 5975 /Length3 0 /Length 6929 /Filter /FlateDecode >> stream xڍtT6]ҡ" 3twJw+C0 *]4J  -(H}{y}Yy}]{_02R"aHZ$ kX PL%6aɸ-`(o8!5 W@}$p$eAR@ @Dp(@_pyq!=PpgU>HFFJw8@C>L8 .h0[rV.7 ~ 0{&L 0s{0E:(W!>( 0zl$ W?ѿ#NpwPSO_@7* [4U A=p_3Js@{OA=@!~+'8k 9Q2 C$2RqU, e!8] ;>do/ F1 @4 G;Qp-~ ?+AS;FSUDe$8@JJDF`F#XFݳQ Wԅxt;r;G_YWwG>?qE] Wb@7vaP{u+9 poM? jGC\b_v_Zs#`FHo w%0 }E.ؕ~YRAB MTBFdW|`@W "@BW(_g*- }Aޞ_TPWr̈́^6 L!!rQϢ:~ԫŽ(|Z>̠:}~RgF,U2Pͯj)ϲc[cݻo2m'ex_J"dtdߊuGҨ_cܻ)zqd$ "ǼI&N"+ ?;4/ I+,L.TzblĊDn6Fu#GLEbG祖Y8'G:l+\F5sG xg$ג /W}ZMK̂s [MA!!զTD.!f_X*I?AAґ ^OqxRwpt(5 El𞸅?z/Uf"|&j=:K奉F]ֵI<n{Tr2.eJuqfr.6moasT&L{[ip"Լ}ѷCqA f^=?9ni%}.9qysCy* 0ǀ(9+!Oytv3~v<o[t)V#vFp!\gL|zFu q/0g#,'~~et~6h(]6l:>Q>_)so5"*@pKru!vWEJ;M÷:ߵ."$o9#,:,-CE|4xcw\_ٯ%|gff%:z-^,*?*~?f L);n?ɶh )ySVƃ\mݬq"ױ&rL62(9$y6TRVsv{9InB*0~ʾJ>Bq}?&]~7.9f@ _X:OlY^%UJg-XcΩPi#k y;b L=)7YX{ڳmkthC>~ȀKgNfioQ-g 6Nx[Bf@uI*Cm ]g~2Bޭ;o{} 0b̩vͷ k(*).oOjel5x'Ns߷=g3U登NmQtע^.8noL?)<>1hN w д۩bP-|kIܺvGzֹ#H14:̘#+ b5_(o. d#yTwSu…y5get/Gb׷8qhnn~>Jq(䀃0gl׃TGY I{ Z妛Qg9k;*2G)ɸ5\=$I}HY)F?JK66;5LW"S]8C= ^҆ٷq 7OX=3 LÒ26 CqAulCѾ~#(QQVx)5U|C ~nЧ26K܏cO`pp- |#osLF;:7nY)6 #WplRVavwBɳ"n;=l,(K@v=E!jr;Lx.Vߨl ]{LeG 9mk ih"̱ȌѠD#2e磴oBk+o 3co1j6M$ȤM24WShE93,G;K hL󆤙-ucCw#gYPD{K~tu>v + 8-بC[ڀ>%yPFN|{ʱxZGdakZIMg L:\h^q9}g~5>0fqÁ9{9dG;Idy}hm~JZ*^5(l+ě׊~u{7Е̃qUK4H}OژBl8/mw;AF O{]ŭ5~{7v^ yqCCwO Vc{k)ܔ)TxCw/3@K%M60*ce+hU ~(\T?*o4fgynӈ`^-tPA2DY~jqmNufۮ O*Z%"sY0z߯'oP,G|$JĩԿEfp Xڈ nsa._8K L!5hdURpLj;(N6(ۼ.g7FaϘ=v5EkY&X9n(ZGg6;jZKkQ\jRoB<zGGLEWkD /"GͯgvϾH(+5s 0LVhy~YGY:=Oi2$HIMvxZmʒV kbEW+I藸/m)(aXKf?~z7Qh}Q7)5\P2Oɨ -O{)(TRܣZU/A>`1\3Ij9V~HtZkuHz>2^9#KD=Na(!}x9ښ>|}N,xI@LŜͬdrwO(9ފ̓M>w1|Oj]O"5X?39T`G+-) Qyc ֟CP2.J[,Q2:kIцITs?!4G^_Jdgٵm `H=r6>^y5،olK8ڄRS6GjDưw˕nϺjp'o( x%9hb"D-J:8z?sW:>rB)GL*wc13[.\"W[-=kxEhj_f'ܘbmcE8l\_H91_559xJuvG۱u"K=i LF<%p]mxg׭xKsUіbJh ׊B};bUH% ,Y62f ;\=WXO39zPzOC^ 9<~O F,sZggLq=\r3~29yP|0a2/R ˢ畞X?1MyZ$bi`JYkߍpM#{w/3(`c3Ea[M"q[ԅ5^Tir"j'WzTwҶWEf m ,,AP7M])fÑȪxWdLY.WW \\t5ndgG QC5riӻOȔTҮܘ+lMT ʳIԐeo(P.U^w]OSODYت8..|4T~,Ԗ}N{T!<ێ)UW›󋖱=ɽS'i/[.qߋo$ljsKSQ y,ugSGظٕ%wCuɒET\!le'ŏFv`P좔xޅef"VD6^.Jy&wsk͛&Hu%iNK3sL(,{vp7Iqyf(e?0/s'8Q?\OV_[q?V |Ux:𡢮<è$/OFgA\ģe9*ҋ]E/vZ{Fgy~y\DUI3e}hU-+Y e<۝QZR [YU-̙䭡ryݖA H&HވڂR᫃ͩm 8nUC q L&DƱHmΕPykjʧV\j(>U^`d/q՛ 4?8p@}tL|Ƚ+Q?/8}qc'ɒь%<)]؊Jϙ(4G we%LRyB 3cqK՗nxtݤt+ĝ:z?)g+tvRѵKSBvO}yk&ڑ3gbh 8{7oCLu vx:Q.hr1 ͋RIrVMEYNk~l0` =\ endstream endobj 80 0 obj << /Length1 1574 /Length2 8781 /Length3 0 /Length 9825 /Filter /FlateDecode >> stream xڍTo7tJJ@@zݩlAR IAiA:^<9{vvs}1?㕳[A.(^0H@ >Mr-g3"0X( ԝL3Ԃݝ`XX,"A q"f]H|67fga s"`euh qaPG\Ł@OOO>3xP](~ І8Cj oCЃۢ~!ax]@>8p׳?}boHT 1(ȿ@H EAB ?(|Q{kݰ ݠ

=6bG_R<)*E;z+r5) E[ oS?*k͢!uYG204@mLGkTIb^Qprl2_+r]eFC]3f{TXw R LDaf|~$FtҰ7 n+zdT/w 50dloVGҴ]Zt~xezWj9 /t[!+w:Xj??aFOA.<w {T^\g]_`|@pNx]ztGNhZWebзcLt51#KlK>OBd0t;9!Sn帽 SagT0.Xc;:ڣ\L&]LVp˗!8-F,L{4-y9V gH$ΰR}vX5TOOp{vxVjWql՞geWni辵 ;!M<ӞF5+Пwrvs1>r=Zf5q'ZF8r#◑ pA yr,K>{ߍ\ṊWUQ]^C3M&LfJouW;LE'ud゜pc|TO>-{IC7qjc$2ЏϒضH8htfqjF%>p9Hp?1¥0*s򜯕N[숯{5Q{zֆ^\h^ &[_eC3Ӫ8~$c}xձ@jXa$jsθ8E$ b{C9Y!8͛L2!MǼs50 #|Wz*XX]W _US|&1T|q }rls=ft|EYו& A,.b8>!Ę`Ѱ޴?>|BwiCWrl,1zȋƠ<'ĩZ%Lo h19,Z,Qpŗڻf0ѭ>("뵇|9[U?/O<ɛivKxG{,{AU_" |Ezt;?C_#°ru,\'`8 t(釴gWէq^do֕yYsXr(9}Z$o;s$Xצ9-xuܴp Ǖci7eC#NjoO \Fe%{Ġ&1ſ//^ȌQ!Т2;;,kqH'mup>UT_ϒɵuB'&+.? n]|jwA|ҔccP#q_fbWy@AFi@+R_~e;=Ԡ2\s!7.4g3Zߤi^ԮeOMUlmK LWIe}d4c+RȀ lbJsLšGWIޛL SfN*|í lnA:GHx ˆmfCYƌע-'NΟ$)n/k[t8My10r#&63<:- ԧJ 9}>zYs#B)C:b J2ICT zZa= )5Ш7OqGt+a>srHt fE ͓tu5֖ާ_)uݶJMlI0xҫRY/K>x^V`ɀdBq 8B4﵏^2a$CS,;EyO!8Ԏ^fc;>6^uu>Dԧ pc!o8<ߐfy=)m4yq7ׂ)u7џV4ij,`yQx5 24zs)/j++s'Ϥ2H|I=akh4]  μgYGSPz(2k 1!>!/Mn> uq1{^!#.sӹ󰅸HθЯ|%z #%J^'B+}ޤo$ jwV&Y_hSf؃T' 3e0~q_vG G`r9|5/ctDz1Kr6gzu|!aՅ9O)`Ĺ D`/]:̞|ŴҖ`Y ƞHr]kqe$bUzƹLT*UZ݀8ؼăĶYw МWhXEyNǺvէsY9չ-_R..YDuk xX!HW%_L@ȑe̠J;V1< nGj%9S7-B>~҅-=W;6T2ǧjrm?+=nn7:u:r.+d"5Z!%#8]H48[GH)6Ƈ&dzo 4Fݾ$K}41}DE~}KAh8|2-oMV,9n*0E|'{D@"Wiv#<Zbz]k7]U5zV>Xjr?MͰ=Hm*%u 8T[sG$ξ ;nlZAZ"cg{m)N zF0bdwUN?bMU,BEK[Y9 ܲ_M)`TztǴ8ܐd\. 1|j@w I׆iq~hMA~[2Ë$#RB~e*lQcv[~Jt~jK'29uN69%`]CQ WGHLz);W2[3>8qf))uQ@/ޣ-aJ̋tRb'8?vYsZN.'̡xLjAF}|6g*7 1<%YzKY>aH[]Uj ɴ7R{fӦ H~772|_4Z.O%|ONCH"z %kO`w9Yzf$5Z, O'rÿHS,3f>swn F/(0NSo8}&v}=j F~f[)f5&XHxsv[+.hiapF ?6q,\)ΫceFhGY 0K+=NUhr?zMuO mg|EP?a(jl~xP^5AJAouvTTcN]D^xB|sq;Uiv fAo)"0)5_(KH>-+ﰪuoX~T/jsպS51(XA[PôepSFO]ɳ4ULJɲz~Ǫt<2Af9ץ?^$W]V8@6 5[uKMt;-[RW@R + ED>&8+–H-hV@QB(Se>0GDDx>*"3]:áFUUW,BfD(c.Fe$i(t)Ʋ>9//,6nSH3&u6"GL V͉y,bV`NY.t[ :-$[1udm'' qM/ #黲 ɲoz˾٣)ޓ&&h ҎNG(DZU-ΟHS=:A? e#/UBm\E6ܼu'%Wys=cR:knpzZ3;}. bL @VW2)P\FϮWT4bE77\%u'#D$͹֐Gu W2OV?旮%㭷$ ;~IZ'`=N6BdFYp|lrtT.HHh@`dɕnwLZ޴٫_x[H_wkE)凊㱞LZ_"% ;<ѪgEL\L 4M>p&j !^/灚|2W,BDܠ٥Ve֥ze W7ҟm4v*?@McF#0lNC _*n]!ˆCvq;kv/K5mc"5prd>-*|db@fs}J׊mj%-L~ 3O'rSh2UaR/Wu0ͧiڻNo?ܸǫ[!]5v7Y}_}~['KΦC8-Vf\ܻ(Dt`4.xZ )Z8':z-G+zpB3R ץx4hLċ{+AcN.z>L!|䰕I|>y^ w4wS֍M- 1fzQ~i.V^xbY֜]2wN|ϥ S^TXYcqg(1È({*J?pǍF^ja>:F Zy?X@_SVTngT"U?.]1 au=~gk6E(Q4V~ps.q9\*Wަ u bO'V!e Η>GˍUHwm6bl-cWfi77R(Ζ288ĩH/i[ ւ5S p|K<~W/ȷCSJKIy]m PsLYfGL>,%DrL_[6߻~^,nVަs7;A2NG.'e*]2W-0?͐*le/^?œR? '.nbZ >+zh0akQQ|PzW%G--OR* j'(Kj AXzAAf0}j{"?m>y՛_} -"9v$rְ'`s]]fn4CU!D[[/ۛx\] yԔqyz?vuC;놾 D* +ž#S7bYŢj waͥ-ǿ;3y KDRN^VY|&2s EwgcYEXRc*}Đ:bFG暒@ᮣ!Rl$J ? < ]q3|x敫2Ra! ܎?^K糜wkTOgqc6P3p2Úc2}=K F"JG՘(vY9M4rn tP,ZQJ1sy(5O҅VjƉ>,nWMwLy&5aRNg\uAU.2eVn{ҩ|P ,si0?T=M1dnݺ1M!!qKŪe[S2T;mZ%%77Xa^?R%i\^p?c,Ҳgݞ2'& D 3u.lk142㼧~靰$VYI; {pՌkh~BiabT+'e&EN2'.%>ӺO#Vߓ l ?*yfo}U$y.}N9}1ٟ{sVH/s'T 3uH- wh92N 1Z&Ru'ݘ >{:35ET5{{CNTXQ ybZ:[[h4o ,C٢SlHէ?dM ,#-E9l8&3: dJ/"&p8΂:$]D>luN`H31Vx:*˔K v,3#*QՂ`n1구?߳De0o{|9ljb 9';< O9⭔,S7 iop/NӻҀL!(}k"Yӷ?mMξt64^JU55u+w ~-Y|UbN3"9=h8oȈְT>U?%/훨ۈ^yrsusQ,} .aL-Z"\ߞy4z 4 endstream endobj 82 0 obj << /Length1 1460 /Length2 7152 /Length3 0 /Length 8146 /Filter /FlateDecode >> stream xڍtT> tC ] ݩ 1C ] )"] 4( R"7{{}ky~>{d㑵AXAp$$P@ ?.C:A2 n0\?nPeS Q<  `qp(@^8 z"p]0JLLXEB !? P7 ~hᷲ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)q"[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$?d6iJ endstream endobj 84 0 obj << /Length1 2589 /Length2 21855 /Length3 0 /Length 23324 /Filter /FlateDecode >> stream xڌP\-`ww .C 4b^/1?G#\b:|T!̭\@Kk`1 '@{lֿ~^ ;ϗERYYR]៊y|8YL\4*&I_Y lm9:@h/>+ߖ'$fgoGmbomҺ@>m hn[+j>QKEhbjf϶#* +&h|ZfG x%Vf N`l2q|h{, W \D,A<߈"7쿈"X#vo`8,r8o `Q(F\~#p.Exj8oiFڿS3M#p&f@ 0 dH89*!+;honb xaq>Y`? _N0 8d=&'xV^V@?,?kbZp3s]G\,w2`gпbdwÿf' t!'vn.%N 47WߊGb  retc\`;bcW;,j c-spgǪ=`z? ]޿3y 3x:?/$@' iqd&jSvUЃiw4ծvϢw4uє7+ے"K>-IOF&w[&p#1i>;jB7CvQ8ayJ{-Us#?M1jPfù2#cy\Lc~%ȀwQ~=~{Bݥ=>15$A޼OIʏfB/V0gT[E;|qYlgII)mLSjZa $>h[m결D7U Aյ: lywZtnvvp0^2'2QNm,%'X0Asl[ya{ GNr|*Δ7f0<0 B^C^M;>XqHgfHv}]Q6̄mT2Kz*$nq-SrJW F{3hUj&p嫒E34 ݘlݔiݟUzD mj~hW 颜.- Ut=ۃhJq!Nf-][hgѓcMbOE"~W@|G Ma}[1Bu< mmJJb&WL:Gjϗhc^,4=D뗈j2f~׏F`(sb  Ji2 _璲mDHU׮a_ ԅ\8ĝeS:Wաsu5\r6$;^^g:0`hmYs5,\P&  Q49jfZq192$ 9Y¤h!4yKr)xsHJ 'dIcF,6R_W֟2rB+"44|!Uq˪PR=|hbJ?FE fL6!Hgt+V{%Dpn/BF-|+Y͗O5?ZI-\7{q=i2\I_)`lIfn\Pݓ׉L|jtæ3 Nᘌ5K7}Oy|?qH[19㱹n*YT= Z ٟH7!,#xqw.PKB/3ySo7ySzsbLt|Yz`Д{c`z;`$bVf]}қ@sQHvc1M|VF*U9prF#P17xyHBz,!B. /uk]+(Ύβ+kt2vl6uvXބS ?oIxbh{b 2H!ۛ 90,]I=ZQRV:Itp 2B1^JBPqPe@9NT=<)`m.zNwwfq B{ib735HBzq 4m8oLH$/ UW6Qʲ,Gqf=|vSd3ki-H*ry:N~'4*dA&Tͳ$(v߰&O،Wxݘ/N.'@9i.slR'3/c<0& (?;_tfLY+av@Ф+^)Zf.Bq[ 1a1-2gZ L]-BeTfKE1db囧u(E)}XXe.E| aZ?6R&ITnMbP%|'hU;zIc]Iz伤}ϯ\x42}ݟT"%ӐX{5yr]c5Ǒ2k.rQz)LU"cd}ՔnB)k C%QqHA:FRs]&A+Ukjf^ O/uS՘CJ O]eFs瀙t#h9\\dTH J>R gkq M 4s!|"1ݷNWZ8(E_O\R\^8_Oo}Wz;r}65@&.Ngdy1E%͜iRzl&ZAб  ŷ?y7b۫=tӨV̻j(KLԯ˶H|2^{|KE2x$;])D]/u/Pv IYdߢQVNJ%M"-T<9erp|k? ,Ka"Z|ڻ۔'.׃cKK?6R+sbk{lpa>j*QeDsҫMvk 'U3Ʀ|n ri}]Ы&fH&fbqYg3_˥X\ w}Z@PbSѷKf|r(AM8P3L '^>*[Pن00˼Kt.Sa%]iUT I!50Qز%vb6xXc%bkgƮMHBvߖLu7f7^ Р6_؈, ekYVu+Oՠi>~#-D谰j Ζ } |TaN7:C'Q [? pJ}\.Uqi(4Ŏ|8b% Y^X3Ix<]׻sU $NM9qO6)0[2@P1∬a:-r mDO5\Li7_˄ +]:;!@KdS: &>I.rVOȷA 7.88+H{BKsչ㶟zS)>&YLHyg&-k!.C* ۖxtw ʒ &֪)4%j?f6#+J⇒>HS{éfirVYgS u] k՝GSo~K\.BD]1PZL [f^ B1z5KMt(w<,C< C`diS_lp)v5ZtR~NhՍe\tw/.`Iiv'gn%%nlGc\̢(걨7S#o`LHQr/LB0l7חPu杬v 0@3:Ydjư־ "G],Dl󞼴e9jV/3.؃TV1@5`y)nНY"y4/caׄTy|r[8#tD2]!!RD b_սnQ-UE~i$#bQq_d=r$AFHG Fq~U{HR0h#$U/18^jr"4zI쬵MiMnKWA]=4~F%,(%. ѫ Na cS}WdxuU V 9R߬◙4 a'H<#+5ILC^U""Ǫgn8ڦ\_^t72eZzJ@\NTLv!sew`a85'QsYqBc ?$&$sT<[ y&UB]*2i^ޕS .jcAZALIŏ>l}Ą08gTm߃2$9r5 bǼc2)9iT{؏[1nЇ @j^qԭ2Y[f[Oo呫VĿ P̅34iw5aPQld(LYH%Ha>MIt^혃$ ſp:l"0YS"6}r YKxo@39"1[n.K ٷ{ t*$Wz#\N{r`(Z&pq O[Ad©%P㻧 K($<ۦtCR![ny=h-̾#L ,VJ_>pJ{|sذ#<6O2IMR~. P=FR'07^9Ɇ|'fQ0\kU!%&&frNlbds9tSeѝY"n KܸNOs `a%K3f^F;܄T qtaƂ-AI"xҀPcHXsB]-lD[. H y6bݯAYB V2ӄyĬ/0öJM+mSY{zUqU z85mϛuJģ~MHT2G4Itϫ+3{|/?ؾ-½y_Es1 2VEl kWo".c kGmTPR6Iu10Cx\ҫgT8`dBm=ȏJ8YoQ2,h0wp6&W<]kHSB<wKHI//8)(U SZv.=Y \$D}Yr]kcX(#(p⟓x)vOVa>Iv^uXhH[41k%ɞiTX]_v~q.&cUa_Ib$kN~  :yPۆR|*/EE% ExmZʤ@ܼ>!"FJmW+CA޺Y.RUvC-:ޏVռ& Muѷ2БxI;6f"HU6~3Jgb %K!Bi]vD7K%@RfWc(jRө:p[z"m3E3Mzh@o--(!=afPd'7|8}h7U\t UZԸ5X.aC|z`?`$ߧrhæS猆ȃ8υ.bP3-?$>ZFVeղDFs.Ϸѻ|9/\[2+B=c=$CNbWgԄ#Dy[ EaZ K1[D2F9=7Ry#$O}>>(q/<p-T7,B K^[9qz%l92m&TU04S 'Qt>Jd1cQN\HᄔDx:V(zŞY\5#A[d^.B2C\\abQe]9#Q.RRDs)A_ \̇{pTOT~AYb/?e4zl"(m: ACxP/eNSm$}>"O~ Sz”95* <Ӑ4*sE#0 ).:: Pa锹۱UK H]BLOBFuesmK2 pf3BzY[m( S)C GU>Zw[녹wA}r?WC30e5gJE™f=8c FJϨ#+߿*'/_V0}Jfof}w"CMFt7VA-ᒟԨCXT mp :F3J>}`N)w ˋ@|SuDMB`C\2TΌD!e!)D\ޢH( &Uڪ )JZC]hY/)\wAL؂['ib P}]h/Ybo..`y=౥jaQw1뗆۞@R5sv6`%]>>*MBlZɊ߾G?&*E hag)^4=6i#c nMT"s ҳ0T%r:d yFd 0 )|5?"hl QQ3f@?OcNfX wM1 9G )f*FHg;6^#8&OpPAd]cx5=^?pUT GjWKf_ FEO? FdQ0[3|~%Rtmd>='fj&A u+4&@<J F:Ήw6]T8#<R)Z//PV#όN('WHqm5A IݦŮwDN~Qԑ3A̛ 1Zu܂7J Xn_e@Hm X>q6}{ӭ6[SYsXLa1@bY>r`r@@{cXԂ/9ӣ *Jz+#ᴳɫrX<\3{>@"5lbEn6L'NJZhaZV3U*Ū4s#n"Ӷ]mCFTR{soa*]T~MK(^6Թ$KT\gJr\ޮ1zCc_fށ~ƀ"n0M`=*>8vmt;T 2 .yvJ~߈(>(_:'t_db#aAq!1;FeXTTP ܳ#W /,,oj3v_%XPY߂5D`!ԟnJZ|Sh>\*_ѩ=CG!#Y%(t*^S78{=FUaqoquVyQ9#dRo0d)v1_͕?3K<#e|!:\(d2YGU2Si_dl$HZ>5S| ('S*~|0h)lĀ[U԰gToKЩ #tO̴'օ_ R<8t /6mO?MV۫^+ r}JOa0I"\Kt"rsP7] x:1\UڱGt"NJRF,Y_=`G gMJ7rܙ;wϏ:6,zJ{E-t%Ç;.R܃xB8(ŻE%s6qS]nI>R2k_3AWqnY/k^qP] vah!ƳѳWe;Eŭi"uc$D!%)]R_0ԘpYo-bܱާЪ]*sPxX[;G% jD?a:&rB[jH3tS_N}S'T% JcPGtX5#˒PO;HMZ}Z]A~Vl(ٶ/\suVz<2c Ix۱%+!80زj#xHŋ[L|4l4vU2ى_=\qy * B`(R}Hx@ V'*6=kp+TkS_8m>ɡ3z*Gc)$2x\nS`0hXOJ|HAa"!4~kZ k![ӝUh6d!Ć/C4dNYy|\zS6UO2$~mc׷Cwf@'w!ynQ, ʹ' f΋[kS.hW0 >|P"8_DMSOHw}{n+m~(N݇[na "bAF|o2qV͸S4%{^b6N$r=\ xkya̐l'5};3jنDH9h2˜Ew;Пclj؆P H7Q:IS.4bJ2X ƂNd f0 >2J{Sf{kp8T{hpX 4L.*5{GC&в-Q, c+|pot$0z)x%ȱ3v /.9w֑nx35y?~P*ƻ ip`xSn?,:½IXX8[u>jx."hH[#Bkq]}^qݨuxcKU,i,_3VN< {5iOu-rQhyw(봮 )az9MMtSĐգŎPC:z[@>g[)/:HK'FEc+2#gk#-\iuB7!tAȫb=&Wof*/JW_^.ێE2.:Q|!nͧ nb՛Hr$Ө6+RKU!wڝL|j(`t>傧pR[@Q7~qt>)O t˃aZLE/Tot;,,D_a:g]C|Vq,^d@-jK$+{U_V?_^"FsJ7La+p=e]-wPbׁHm IIOɁ y]\ ޑj 8 DȔVIGaRÝV̖vYC\=x|WE'S[6G,wXի%#3IkIÎGZz%5AdeЪ-baƦf-Ր w]: t.W,,Sꢃb ^T{>*:8$|i f+kAk6ct+%C*7hע>5үFhol臲\VKggrrg/+^Эmgms=Mv>*Bx)b`SepaaVͽ|v)"IT@5M*Kq>XZ2U^T4ߟ\礘 \S"9OqYp[ * 4B?Յ9kΘB0t(PDeRm߉)JՃ'sMGFgܫ8~b L ?cs8uǯn]N9>ᛓzQVlBciG ӵgr2ޮ+79sӊB:D8K;t!+. ,m S8RzVZDޮɛR40X$Ck# !>K+-j!@8U^o̜AD\a^h=WOܣ|V IuwhXFgN Fxm氟>7,l*ˬyi62m87Y9ۯϢ!)(8\R٪*xOniCK=ڹF5 rSx}1pcщB]|y܂’xX}s #Ĭ8֚ EW̽tG D󋴝X;0k5gpJ#|L,)ϑK E‹. 0^chF( xZF(Ѩ;z vĆ}<'k>S; fD\RsZ@vl'2ɽwPln4 "sF( wUְ\\ Н,;*c9bk88k`"fs+R 9*3 2.=1:3YTč'/P?ѺQĩ N/x& 8V#2ຮ!4H ^OZ >2ܥl;r@-bڮDXsL;TmV68]RbwqHV#/(*>y_  X?ݯNfT`)eãew+Ɛf+/,?Ο<}l,Z{ѯM*Q__[5\`zEZr>?ȹ5ؼiq`TZ@4`1 ;}kiCn.CVX{Ol)XOObHEY+c=XWKjʣF], P.et RJYӉ2$s6C]"5FAR^kw 7}; dofZ~BI!tүǶB;'=/D^=6!]XE4P1E6:>*|bIu %p&s(%{>cF#B1,SCiMjz0ԂrnAXqs}P(7D:P)GJr^huIj E4rnokBc 9ݵY4GFڧ--=?_kThu oWS Rlq`)LYIqGG[W\MvBǼ|mb7ˢ7hRGa`8Pq9~@쁍Jxԑ̔𒺓[Ҩl)@Jy-epaa9^wV2RTf@&aq6rK[T zWÕ%Ps^ 7:=4΁%`/45YȴFjQ§l-n6?|%?ј`ݓy!zG4LCBp'Q1,8Z-8% o,n2B8% o~݄QOiѴ/~^T~Ms$?.0sf\/+ԭͣ;qGi:まxw$$;p5B<*u+"ϻcm{i[ }s^Zsu @GoA:X\Y_-y_wd3?6l\uS>|Cqu֤H)31}HrӺ9/;N'߮=L$7r̮$qpIFҒnH(Z_{L=J1~k λ$uEe5= Pg 2ݼմ~!0ڣЕwoP*؂zȶƇNFߥ_Fٞ*fcWʾbL]/TtYMb-<*ǣG?| CJg+ߩ`iřm2hzat{,')3 Q\vjpU*CREma: ""&F(XRܘ( L7| m5,sL?#:Ҏkt Do}j3l'& !wt{L~o_Ka~"s*,,BHAΨ}o{OQu/ko+3ڬ@f.WGuv,[jmھ-y6K~~ƺeHJ_`4$6K0m0.L~gC$`]Bd9Ot">2<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 1668 /Length2 9225 /Length3 0 /Length 10303 /Filter /FlateDecode >> stream xڍT-wh$; 4HMvA žl@ؓ rsxE=65N  Þ_5 GDDp3 Bj@=Dk@ W fq{Uˋdaxam; nt'@]O'5AOtT^4\A?_n<<+w"0`+lN KN7v:<=`'Փ2ZSn 9N[ 6r. w}`(}# Cll7aʥyTry2acB"mm;+?WWS- 0xx6`k d` ?  p?i?'yٸ@|qc\F lv7'+ p DB܀΢ U?*[ȟ> k s<`GO_u¶NK7v^!뺴ckޣ*s'3ў;Ny.'m3B%6vgcQPy\tQ 'ewibX5}dk3q=mFQX82jRMBքҧ-QQ[щ̑gu&ޞqpsb;j$<-I0i$||͊S#4o0\AVx֋@"Ɓ<{f^0֘iXii 5O~#|@҈hE Т_P3<׏H;Gp7a"JS?XtI#ljTH^R]1PD{1{>TjՁz|J;wYvN*>}08 ŞQ+;Vl0ǴԒ;"gZo۝$F^A?KW{g `_v'TjS=ꨯpNsfHg A?)\^` d f$G2czxF5D ""R cG~Nc]v3۔ͺA& H]%ЧHy|%B8WVٻKtlm(@˔ȞH`ç؁-/mSTNՖf?yrT\i}4r1/+Jpƥ"(!tׄTz1}H.\ӏ;:O G{C296󪛅 2a*2ެe[kv4ڈ:pbp?6h*Ԗ_Oh|]$J#mJ bB,C(Է"2v+P{mޟzD_js?/un:ZգDFW*4\Adt卶OE4ƛzN ,#8݋T@/Uݳ-ƛSs}CKZ ?df% 9\DffjW2`=fK cJ?}gN唀 ,gr}=9a,7'O%jޞV2[N!R'9JX'9sHwOo?K7l{}?B0WCV xw&5ny%eh6qh3V'\+n|8ߨL.dMNv&Y %_ 4,02^rk,U3þPOSLË`xrܜ&X+(cZaܷ^ Eۦc`~~ .zC&K4jOʌJWx&R28:gEm鎲B_Ri#mhhc§E綱8. Z7ꟌD֘2@)գCu*Ld[SxN-4yᏑHW輁p4t 8z;hU:n5k]\^l!7ő&UwPfZE RD&CZ7ͷ~9_߇?tO٬3^$XFʨjZGr@^D4Rc;1͂pfZ Lj( $c7ߒ;yPX̑ӻNmS-}wEN?.UõZβ{x;/q9^X൑ 0Aj4j.& yAkb 4ִG e/Jl$ͭ? V0~cEH@| hд @*(²ó7!oi5%A*材~ Q$uI#fԀVD-X[1j?wvW~oÞ6#}jƶԞ&Vn׷t}W$q>d倂є}]RStmg'T$$DBIU|B/2mUx(`Lc¢\*J%E+(pcGȢJ|%ѭA ="}{*oi*޷C@J}21(zfVbv) /E_q^w%.e|I?ݵLA8aTP@( j~FpM%5#$a9LP湁KP$V!f*$ o7<n2BsUiq‹#SD9=@孖g΄F^³A4/+naYT䭅Vڶ\^cW U6W'P4])<8A27 'Bpڃz!1Z{?LbPkh{*I%0}n4?6;| I'^ju>vpvˆ+];&'O<m'oF˹ Zۉwm#;Jg<Ʈ-*2޽g"6Z CUzpDJYZƣ=qԅZ\*$Ԙvb_ӸlRt!M?Po\m_WI)\&rj?+Ł@ B8bңoNK,G$S@~(c;6 H|X:ƕW_T2޸OˊtSdaf?OwuG_Emu,\s|m Oz=5ܥ蛳LP ,pnimD1Yw* T߮2]+=&s|1p`/[oo&HcuQt1ղ5B-\K,}򣽱brS1>-.o8(S JpǷǑH.^NT&,6U4Jpg^ tv^0B-j,d62,Q۞Ek?vmG{W)C,nv$})ߖӼ54muYe\CDa}xZC9PaWPDAowݗP"ZȒL`̚kpt|wx+2k؇=5 ȫEӉ4gg&g(e #ahI bE ;Sp;MOPY-~EbLJ=?*P3@Q|$JqN)Rcm'&$9`7735xj1}[A+#GI)K#\yWZGB8[p|Ja aif{/x^50&*A)R {.a^WH3о|n?4iE19 BN6w0K`04M#SXeezSej D 3Y|ܷ;kR{\ˈ"`Bf#sf}d$.FSːi)ݶ㛊KjƁX{ 872CnEM5+1?5]s-ry0coe|Q`N•ΰm؜ԋ+em#扙1xdAWxb7QPDo5\bTF>ۦ.%@{ǔ|G^<=F0dھx1,v2iLQV6 ;3쳴%{K)MM\:$E LVnexl?SDWH59-5VWyƞ(̟I8N[Dlal=>UD ?41M@Mayr2B[^_}DsHu%`f<ņaXE~lMp!ӫ `:ȍ.gFHRw^#8pֱ9es"߹ 7򎽚;)<=] ;/ Ea%f}b:4m_`eQB[u8;6)i3 U*zxF7w Il.+xA"uRXb>x}n?辜81hj'ޭ|05=[^jU. Jb_FEx&Mtøarn& \_?C;1Qs&Wt>D`)x`ߘ־Y}A)5|Xqz&wxLLF#V#6ZY{}FAUč2I\.88f7_s:67S^wl3gEX͚dKUfCm$B=kx?4$)]b̜ H7v}3{s ja~8)ͳbGN9Ôm:Ŭmi$ߏXj>2$|^&.갓[?W:YA2d$0_7>]̃0& ysJW_u7*= ^pt9nX4ؒ'1J9~ut6QiCyxw"3IWmDnjNo^O:\x,U<^x)-dW#!Bꂔdp0C?/~QΧyoAsg;TƷ`y+1%SU`zѸI#yAP.++iޙ S/IypP͵ٜH ))Nį`B *Vf*=V؟ͪ@b?áq .tUlDTv 8qRMr+HE܁a&4[d/ 5ućˮ"o;.#pbQx B$<ͩ\湮̠`>"%SUsv])~~7ɊҰ-j;:mO*I ^mg)+;雤 K} %J78%} {A×,[vE]ITὨ, MWB ڤ2d.[@ͮ[\YA,غ;wS|qp@׃%-/s(/bEkFuc A'n(2&j7}km_N2Sjs[bXm|JŁ1I.Y:"k24Ư,~'@ÔF`% wtrN RT_L,[tU5 !Lhl88", gL Բ@I2A}s;)FSIeَ;*uAYZ\ת&=4 4\'2FS= #DsqIJ_L㺳CrBЕ7Tm#l gш1?dYϘ†7=Z_m{gVuS;]R7M y3̞㝚ul'擉깣Хn `~pp'6c˰QtY$& 8P;rR.JYfKz@V>Mxk"A\׍"KyQ'G-BGQHص^K~z.0_.>&/f~er1V$]R2FmcF@Tpic|D) E82rIjzֈVq( m|8d0Ltv)@#.%1ٽZ#iI\к[/V;$)_V*Gb`25Je%ZN^?%ʽcye{7F9cG*+ U)˾4Hnf!MI({:hg@1̕ 7T$`CBi <_,=xf꾆 s=aZV~6kQ(6t H\tƾ efZԄrgh}::̆&:sg3RoTY[{mHj;U%04HhFt7cHұh4ZSO 1zp3LM8ޝQ,(Yq%V`6׆oNZ\TQ &Tb(*Tn>0u|hjfb߬?wJp~}VеϭZ!9f1u\Ie9;%>S1-¬B$^uV6qߺB5(' eAY w N$I/dt؅=!0M1}b/J_vjIbR*4$w!HzEa7Tg %8n ⥙2U]pyi꺳3ϻA8'Lg%qZ^K-zi,!ȠZx& evehu|xKM4_<3ݝO kuVysF@)e-r.`;i2S`is֭,"5`1ak ʰU@.%mx{OgS- v_gct×I^Ed ]y5;N#!Tei6#9y) LlˇgYso!nfWt`:纬W 7cUmGe\6x׀IK@АFԋ&3(]]`{R8٨IV&ŷ\ b 5p*8Ts8M^ߝ"%Re-GօWp8&YƈJF*q4$~1~\+Ŏ74yY7^J˃#h(2.RD\%BKJ H_cԜ-rp!#N@acc[f_!0s֥ @6LZ~OGU;gFG#Yz< ΊoNPEc0,2ќ%PP i۹R+G Rb^(z6i:[ endstream endobj 88 0 obj << /Length1 1627 /Length2 9270 /Length3 0 /Length 10327 /Filter /FlateDecode >> stream xڍPk5L KE'@ Ipw"];)nmqG{?}^[ֽ־&tTjP3 !Tpppqppi@Qt@N`(D_ M  \ׂ|. : ` 2@ 9IBa`+k#) ' nr!e5@;& r/ !kgg ;މ h%p;[4@N GWw=PZ`PKg7#d NO. #My%* +X߳pqD`ȟd9x!VK*B,~휠O@W hr @F\|j0g'6'^v7BX͝f +0'3/t`wǓ8?y2zbOeԕTb$$/Vnn+/@#o5 *8IXB4)g{7ͥ}- 9x9̟8'OYoɸq3@{Ouq~ҿ2i ;T*,.+ |qv,/%C@jP'[|Oents8=) 8Ji9qOBxq>lS =%6Av]`=i 8t|[ >1v@Χ O'fؿSON|v g?uQgom[*IXG'uY[]n0>2:^^ڔf8[kA kWo3nF#&G!cw o|֦@w%^]8:SZdva@]Y453+92;$n#B,3;/5Ӟ˥Z\NĴDC㯼$~$*z}n`ʽW0ڏ@Sb0e3؁$:s|)"Y'!dNMa3}5r0^J6c>*~fw͹Vk%p0wW&E?.fcXTKֱ$beL@-Q"e4[ 'TZoד.}l2p 1bϽޝDB5B;_mN`r߰hY %wKa eJqpMr/Ovr[׮2RVrۤ5:EzҬtm@  c]K0Yft spdA:^^?яlrD ۽\Ln&mk{@7V-= Қ1) g>V,U siODFt.hE]qOe_v-W;V)Z_AF|~E {Q/O۝zE]D^c γc5 Ec ) oFA>sRartϥ-,¢"s2VGYOG1 0uwLͬp}?v@%_F >[K_J@SxWMG(RM<ίӛ_ 9O*nV͚uG=yC[4ř hX^V|dG%O.Ԅ #cE7K)UNj> ^鹛@j -/ES\!F]nK}b("Z{+?mqjfٖJf&ͳ!=|SFm>Ow[8ݻDfC)\#(C,;╍D ?5^d4րN"}_s=MR`J.Yg7yOo]% s;mar+QL,^EfݛӅfai&Fy<+ae^t88;u){# |˙kzpk Q>XMiJfOV;3U0_!Pü/y+=H!22f#PRۜB(ͷkߒr ]mc}LjP> {I.R.CRv5tOh6ؘ5i7f'}1"@߮I?u<* bzA ȑBԷ_>J1_nSW0(u&E%eRqd%茆7MToY:T-$ZnH2縬UiEkM ]kp,M6ָ >qkeks!L Tu8 8_dvs<Վ$= .+E?ZYzCtJ3?1y I2+GY71Fm}KhXI?S]SpYsk3 Z&ԟx0b1|j_XEY,TKu*4o=FN@T%f^2$ M5qIFX^/PO|"#T1:WMsq]^ij2TtJRםa>q2YpDsܭGbb"E07KIhlϱ,ItI8 Qs)tca^0TiZTLݪ1?@ E*ꤶkwCf!5]yf U.'ve\0.L"'蠿,k@1,/>CD.jo]v놳T!0f KvK\UQZ4(^my;r]G%Ԙkx?ms{%D}37TpKX zx.L.gnp}:^}]u^k(#9U5qbNoD\B?+Fh6>].3YBvAw m6l]Ih_ҽno?( |+Ƶ֛aOu`+&Yà? QMখd21J^\pvWSrXs}=v4e4-blOa\qsA4 (5zX`2xߌ`mE5MUҊ lR,r8?z8 w.43|NwΊ{e_P&fGbWKv&^x70,KY֘PIfʦ ?^PO"U汱(k"6T[wLRKSK|eL!<(XtzjvjtbbYq>\rȘ *hf[a_J6eAЧ<BAm3 M @6+ڇ[R/ؽC11"'|U:|iwׁQ_|A0"0- .s ISԗwZkۍDճ֘;WxiUxĦ~gD?, Pg[V"epdU7,?@'8SI/Gm\SE`&Q]q݂Ƨ2`i[iaYYx00uY,+E`bǡv6HA0[{|tH }=H]tŬT# SPRs|mКpIp{ oqZ=g,4gӑJk Pmbٖkof`bW7?kw9(|2m][ M1ҿ+ᰬac +wTt#ܩ℠ (%툿ϪPp=gIWOКL7d٢uN~Wi' ׳wa:{\U im7%j9Q6"] $ Q~Q(2 A@xfG9}"WY"Ú%E#ǩʌTT%Hm 降-R:%Uuzhɋ52+D5Ce<: QT$4O5=k7@3]SH,^@6"((zVch{&oY2'ωBnҠگS/YǾ0KicK{dNl6:zb&Rܿ:l "yԵN`ҙLV-|Q{dOؒ]u9 *+54铕i w9p)g0}SVej^*L l]JU+ߨH>4eKо=U O3X2Jj9h(M!U䒄0bCƼl Y~MCr^ɔHcZo6@+z煭J4#4*֋Ɉ̌9r_IX^uE21fװWo` QvEFS5^~SJ=NoXY7~XWoF-VJ../ShZ8³C cR6[5uwx]inOrһ5 +D&H83'{Y-0f;PR_xl{jX$/e|PRfpU(&Ⱥ %b٣G9=PY3OIj&e7Gߑ\O>Mq+<1&"'g+vCdesɋ )!Yޒ[wU  fE& `r&[q 4bCӑ`rGߟإGC:ue~n iT>_/.z[V&-%I fMnoH/ #y> &!Z]Y]W"dOܔTy|qS2*v1f nEV{+'(-AA=S8&2M7@Qo,'n+oę֞Fl34aFnk;cI1w1AWy&nMzS/C$#\L8-.7X_$T1婠x{UM a3^m l ֝U'M̮?$fzD[vp$'tpM[RTUߴ_uYiofpqrZLXy6iν󛆖b$nYC,wDExCŻ<)q^TA9J\wv :T'R__]9z2ބ , W?%i\2`"䶘lEԷ;ʥ6x^ XzU!aQ`U/KoK0qݿ3'K_}QkUJ-Yr| F6i`)\qd,Ԧޫ8&c&AiaN *ISDU„18r%Kt+AE*#,[͞qOAM]ii7JOp_%KB] wR,#ɹ nstvWUq] 21E؇j#d2eˇ-) U!cuà0 b@=Ŗ\02RD#UX/ _CcO4b6+].(fK›N C] 2 I|j?5m_oP{M]\tDT2O /',eң|4#ucN+vg^sl|tٹ@/t9pV+GT1;:wN4eE:5yCL/\cPb~ g;3{cf0PR_ {%F34ڤz^ }_ )`NwH٘9FKSkTw):hapR-A$p]UDѧ٪(r61PVlzktumz1ƒJy}L2rZ&<\(:ta y(Y2=xcL{_?ALVhp0}0:FQRbx4?:YwMU}e(gpMgr?+VH RV3!6ZutnܛM*՝: EWkQV==NnoUاonwę5QgojGN,7D86rٍ$k498]MZ5߿UrɎ] -h|x:*6bxwJq6lkēS ?|N"K5Up2_՞__tK{GT _6э`0ݼ^(ճHZECɹӌ8c'AqطISQcX9ī+:!Egqlo ˲ q2pe?Z.KSbUlk$!Uf(-GY|)O#Ӡy5N2 l)z|N[AƘv[fuG8Q;cRV8 &2߮GN3wz~sIR*^wµ#2ʸ{I&l&W_N$js 7m@=ENª0BVR' 3>Q|ћڕ^PMy^}``,.D¿}S6'jd.F5{DSOJM=fH`aJfI}3K#ÜcA>!2ibD%#@̹S%̪zѫ{>s9o:Tx`e? >۶)!a6@SVݤcA`zeb1sԛp1S}pbȜMD=v߳ l *ƶ7x脂K pc;=U23u^7!Y%"2S"j}~2:@=䱃ٝiR1Uǃn]wPO0e*:*';*A*1W'L-ωY2T]y{< `(j:VV 8/G/<;|@;_qs#k hkʞu/ҭxethPl.8BWI5onvAݸmN5FaQրqRWs0-, 9#,3m/*ʷϬިRkYOu'l֧a\0MO I:V*Gؾg5 _ _1sJ`FqbCHfk"Z ֻ׌]r<]v_%( ?%)=We%l:s nUx~xۺ#kE&5K!& endstream endobj 90 0 obj << /Length1 1373 /Length2 6101 /Length3 0 /Length 7047 /Filter /FlateDecode >> stream xڍvT.!RCҍtH# 3 tH4ҍt !%J+]sֽܻk֚ywyװ3)!l*8O( x/@!BvvC(솄" BuJ Mh;b@ @#M8IuUupr%$x``7- `-`QH% A\$<==A0$?A EA`$l=. 3?!;E6@أ2MPWUsm_ _멬XtU4[DU ;7NwQbE |)Z+/{0 ן@Oܽ0yݣ4FBA伛8磣QCQ%0u_ "zY<lu&gG:pk5Q?:FQQanTxu+Jb⤑DIFtewhay- kHRCN9?x;9ڏ(g ~%~ׂ+H{.evb?( :zyLWl]@:csUY ?]r o/pp 4O6Ȳ/V|g97"{mF^}}9!D S:X76ODI3FSY)g)UIL<ߙ$ZWSw8˼oTУ?=~7dp|zv6U_o\Kg쮭9"/!xxZ2%:R 4VME=Smi-Kdc`0C̑R5|JONdr}s/)߀4cFqLMB `roҡ[ T k5!wFNxVfy8ZUIpN5b[%|W54 C:λ O\%Fમ0b}'޹]c;+[?=)yjio[/n!]7n=b;I ,wiYޘvzDajrW19Òi=v>P>D{y;z;SY 9.X=zܢ2 _h) ˸H=a$>N3+a e#QX1w_4XZƹFjD?{tyRvnk#Am#+bcu'^gM(iTUHipT* 7^E@]rSrݵ7CYe*0nK;%d?]yS2G彚'4Y>ء2!QGbɼ .HDi쯡>e8K=)sXW2\-70bԾuWMҲY 1OEȊ̘P b i7,[in2Il3(=vaP@`Rܕ4VUz{Ma_V<[IBx]e#h:@f̞y6VI%ݡپ5\:qB>^ބSh<:Me*/hH&75uGd#v|T(lŋIQbiLQrLڟ<՗Գ:{Qx9yn }_=A'i~sHX=#yUľ / Ԧ7ꫝ~E%9,ܻA Ӊ޿`X#I/e#qF\_:y]X)Q$9I|jX/J}0+?3(9k0 "~'+e2-O~cSS4)ג,Md'V ?,*F->W٢~Qt;*0te W.p֟.\V *h<XDEF\PʏrsTZkq#n)޲fI ǻzм3 4e5߁i mm| .UAzƖ{2r>)D{S5Z8&h"G̉էBd3|lIϞO-Ѽ['R ?5AX&4MZ<5tpʺlD4ʂލoq2V?̐.joXZ5mدN(8eu~)C/p BtvsPpEKbf>fb0DU7g ?e1BDywa˟l_ kĦUM+Ip_D!%\PqVOqT{to]S{sQ^,0x=Vezsw= E CMr :a5d8Ě;luΜpRoN]qKjrגt|R%Cul8cڹ~m8i"dQݧRG2xM٤nfx~_ltw{G}t=9\S8m.V597n?59w rvfN̠,w+]][̫*(G cwiM =2۾L\ʢk]:ɋ  InZx~iG rʔd˵?edPjPNWyL1C65q?RY噵"K!"jLd ,6TیPȲ4:Vd?50>dN CXzZD!{횣a䷧|jپf]q1]јE!ZKxLef(Dc's X-|#e f%-4273fka>i|Κ{¼%k(J8Z[#$:g} AK}UKNSKS^UTUc'q.fH~Řcؚ-rS ^RmI5ޭ 0F)~mLW!=8Uom>r+ZI2'i<̅ܙf&iVZHd^.l┼~6Vk})s.$pz/%y[#KIQ6JTo bb| endstream endobj 92 0 obj << /Length1 1390 /Length2 6198 /Length3 0 /Length 7148 /Filter /FlateDecode >> stream xڍvTl7%1eJo#;0b(%H )"HHHIHHK(;~L𲉹+B!` %7 h`(cPA QH7"*@`$,GFG %z($ TG0w@!0"//'; `P$* @s + H@}(0p?k\{0 6G8FH,! @c4B$ +W"w0C  $p81 EP7ԅq(PK%tXa%_~!\&UGⰀ_i 0pփ@D nۯ\ K$AGe`<a_-F/5P<F" q?x(- +H? jy "xL@+ , tEIM ċK%e@DR(G8; Wbun(f ھ_;X8Pۃe0CoGUB}A xo"0߮?t5"|۪8tX-D y/y#pACX"<X&r.IY +&H2@<@CWxoAH$ tCa)-_? PUa0FȿIa -^Vr * XOa(2DcT3:>.k L7^R66:4&/zZC-nrbE@ܪ'wΤ0K;b]Ċ3Y}ӊIc.q<"LcLyCz$b݂ݣ'6;v}w#WjzlesEc~%Rۈ&n!R=W%c)W5xL2 M"v gOT0սk=},~l|eNE鼻;JӼ{Uc@Zt/ú@>D wr.#2J4ETibz8v kllEՊyyx7$"Ͼ8%4Au\pnZ^6A$Մ $;A{Lԙ"O+ԳqηU/\<ÖjSzFia#f#LhW.N^Ξ;㻟۲k5+-Q_jw=ՌϴGY$N7: |fxJ3)uה K-Of=,cqq~ϼD$E 9Q%Apՙa Ltk ֭҆:7U^0zD<]VP|Gʟroc[x ; yi}a&ԂݜnDu/;!T\5‚l0-Uv)e}C)7҄˚AVml-$4Aq$y.)]{oh' y|?/=u\?Z[ϽeJ7P˼J2#d{; F?LvO HE;m*T/of)ըgv0>J䦬//  t1PD z~(/j$q|Vѭ4wU1?U w']:ΗP᥎5O=6HJ뇉D6*$޻x}?e~ |=K2 MB?:qimLH'? aM;l1f5zmÂO]Z<^'twNw<x"Z+j>M  pT}θCGa[g)}bcy$n]C,CQ'*Toi:ȿxX@B(N޶]rGB AnN+m6;J*yPjw+cCd:JS?vWŌfrn.|q.u^ JY;_}4+tn[LOXw'/*1MwќlfuVe%#R/*N5OHb)GEFe1z;j{Nl,qg`iɚeYӦF^eBYw[vEU5[W$y)1ac$5*B-6Gm ංf8Q[JGb|OSֳWm*%2q#5G"ܺ׬TUyYA}m[[l\Ǭ5n㬙_uS!hJ:/awëַȀFru⭈FF ī4ZT|$$b@YhoZRV3~C$@t5>avd¶Wn*jG(3b roRũl ̈*VWXu1[ /H} 9!G<5Xʭ}hie!Qk~%3^`_myx\70wiؘ]!oO{7h8'؜#y"ϴe x~{ygY;omΎ]}YrS~h: xʍ=K=&iAkƇ%3{hJ'!g!vOrUW+=;cEqd^XL#ö%*Z2B*/1ϧzu@._=%:p' ,e6@ַܵT˳1S5.j6U}_y?ӆ<14Ȋww4#ND'y2:Q7 6늧bGh(#H%]X:[yvjYvv:n68y(Dz\bLuQq[eS_k{oY&g ^X4&w^Ӆ({NEs_3(nDa?k9jͦdy47=}?}RiPޙ\rbgָcQ%ECʓ)Kt1ر4!g8%b{̊˂ %_Y5?ݎ.FTD?kJ{1w38'}ꥳ~ ζJCDyef[1Nwg._/eR՝,Y,*5bJc#Lv._S؅K~‹g(En2wr_ s#+ݓ eV:E X%~d(Cz݅O8` IfBn/i KD)l)Xn VcY~i}epB;øT^ r2*aO` s689h `egp2XRN<'`cb[Í5oR^k*ya;r-mj .|@_Ok*7>3(tzQ6j&7h j2e#6w" .yHE3cS 9n!eܾww.)/gw _ oL ? wrҨ8{vE*bt Pñ$֔ګ~ QO$NsiuJlxI[m ,Z%}HZnQԂ ?XOM@6e(<7Rf[8Y>JH5|I{ճEmb!ʊ}AkF,Hꆥ>/\GkcjGb[gbE]FuX\ԇxf"U)ǮN؁(K~#xuWB#Iki1“,u[m- {YYV-݌a Ÿ Eqk):Dlw٢x&O\mznFko\kyTͭ)Ըah|&{߃ ؏)3E Z H Qz nj6+vF)j_j˪)v᎗Y;oeM6딴o[2ti8j̨Bt_Ġ尙 {O =$OdV }7,`8NqPw [J,s6lru w#LFu;9]ZtJӛ%]8QVWue ]*75X+ 5rָG˺d#k訒tD*n^+T!}y->@xĺsp=B( bJ=(x*vK?yУtZvb'lߎU 8nmtE gtHq[;BG߻_CԊaRHh pg*hL.3gɲE&R*Obt](ӉӤpJZ\2q)kx܇ˡ!+vFM=?n\柧5}L^ h[Eq%, C=!9q[)&).@n>#bdS7ytϵq`^vw/ %ִ] Drꭱ JSݘ+`vJhr54lDb>/lR,!OK}ws Ȕz$Þ,I׬-=]+v|-,H4˂BNɰY-X*/gڞ(P7r˛~S(9Z}J%ҟ;}XN(#Ʃ"PaZ)pMhv5|WA2c7_FS eV5ot́QjQrپOJKXWU*64N^ dL 6NR"5ֺ=#?LLGTyωڸߏ)e)&n`UX nEOۿ6?Ԉip|1e[ZEe绷)qpocR3kn4S $ӹƑjVtglDz>=>gB,l^YA(k25.SwUn wc͛fHAd$Ae@>^);#-dϊp?ڱE_ e >"RMn{q*nF t<ή|ݵLeO0K+XL Gx%KSCswZt+)AseXx0~LsuW>a RޕclSI$4/_I|oЕ07|`o CJY~zq9Zma [!RyPC{[V PDIwCu%Q^wBe" ^[k6naP iDx$m DqzFa;WysȫCR4id0 0zwYOS9𪸳q*Z׷zb5Ibt3pj9۩ 4-|V?"WM^advO4gGS|=f魗wH֋lϯ KzRODSxKXG>NnySHٲI5k"2T 3A]G )n1h?njgᦼ+ Z@ ]s~Z,Pz00%yjF9mіS\r3̣BϾ괐5>6n6 4}Zҕ)V!S/I0d:3%Ph9afVw̨t{ ?U9Z)xDkQsa GW,F endstream endobj 94 0 obj << /Length1 1379 /Length2 5902 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xڍxTT6"̀t "90 % H()] JZ߷f=繮=6;1#Re]cK! M(o;> EGm*(4PhyB"!1)!q)  J DxHT콠]F+#}=N(to\ n8p tQ`7tE= `A(qFܥݐ'9n>7 0#^`Gzn? Lȿ @`PDxtu@ gsBBJ'W"(w=psBN|P|{/= @{Cahj{C<( 54mV;*#pW*P0ツ@᎐_c8z ¡<*0hmN`@()&&*?}@΂ ;3#@(G{(Op:8BA( wv k> ;k4p῏XPLr*)!|’~I1 @HHH .. g{>#VA$jO\ g.=`׿( /BgWݑ' ۻAahz*Eo9/nD٣ՠwB3__v(R v4@//p AGC ~ 5Ϻp؄EFDBhU:}~ (G!nP'Ahߚ} 9H:exe"71յ$hQ3glGJv54#O *"y/} Y(@ao(};}frD9M? =J6d$¶L5z @r(='aɠG+wa>da[C [>$I 44|MPꈣa5܁"'Eڽb5~Z,#)ɹZ-H %s$VH,;3EEyT++Ŧb4t-ԝA_X`.5>1_Iӱhb鱸yZe ?n}1u`;dIMn=Gjƣ*מGtr''cR~ 0ɚh&B\hB:owR*B1xR3Vt`[*$w {ݶIr8Ƴ.zlWǩmKV9[)PadK^a${׭ ņ 磌2_Ovroh4]c; K Eە? PƘZ tyBϾY]H qn;r^HI@F̹!)Q!MmBU~)Tx. i߄k/QY=i%mRw?>e@^ 5* Ue [_EDw-kG*m8іWN#[I,gG, Tun7lִU 4}i)v9;ðһN%|qQ)=5 ,Kf+?ۇ) OS{ҘreGlUu=d֜M=etpH9};PhF/j$ӕ*RԼ4l^&/us]|Ob 765lkW!",k; $NX}_`ja/TL%Y1Lz><7lZ+ְ'3.E4O-l P'NU(K9I1 iFs7Vg>OE W'(J1{N~z 񏚴!Uq~&Y䟕>;xz`1) T>]Y|1B$ZFv}W}YU s0'+ԟ]1e=²Zbٿj_؞yxj3ĚTقl#nÝb/؞spqa*ӘP:q;8_Q$KLIt eWX?1uQAn-3=50P0!Jtd?Zh8_IWq̎Vsh_+ Tm9>m_m}-?Gyp*f:%ԏ-1mL2`_yD!vFAv+/iUF4 Յ@(wR(ܺC<+{hC7v}ƘXH66︇:T-l8rV~ok&x+!H`Mm$5]_xib:6GG]|̯yAcJ rn+4pn9r''+PCĎ-(ɹ,".\̛,_-l+6d6,p-N/1o_ač3o+~j /#HM\b&;}T\ԗJxr+Ew`o^朑juΎ\4Pn;bU $('<-ȷn*TNzUǵf6e5V& 7[(=Yy$BPMӛ^yD'yoZAx@[-րͱtZOעޮ.*nD5n 0LB|E1m5GeNôɧG ۳oI~$Zy%H=?3vd܀ĬBK9Ka>K^_z5s`*:GDB. ሳNNIU0%Q\xH轧Q_ ʕrl?9LFCmG z.=s/*^1c=w)j#b0_*aQRP񜯳)GMOHvFE(ܵXLVo03m7A3望ɡVQ~=#tHٺ!NccIբv$Y'<۵Ģ"%jN3 󔲶7s˫:8!f^}2u 7)8iPݝS9 <ˬ?HT=;Bg}x@`aѴr]jcYiPY7[<#8[8}1F\ OA znO?<`y20"2:m}'Εz6e'}nIyg@&J/&UQ:Z8ٸOˌEx]h<NV,G9M`25Hx暣e(@fuEAJ4QMpLc_N}LN;mfaMRƣۙrDc]"rZ~*z:,X%xt \"c/1Oc46zU. :(P>Y]"`4[rCY߫>AZ jI^)cg(~; 3}j9+aRV3G]jSض?fIS{pi'sIvㄸlXAG'r䡺ydlr ~s=ēv]ڨc_')c0dr W} [JUճOTWPSKN ٮ^R} ϕuTqXTe2bj0eK+;>_˼=I['DrSFJG @29/֕fscpȵe&-⮟j)iێNhvByFd2} /^ME铧j_M/ X_iGFVuL[vU\xPGzlFi'W\7d\Iq0_f)>+NiH5xf ڴJcп;lr*Z 3:y\ߩm+jB{p յ 5ZbkF+PLClݑHew*4q.q(R`u=aWH)SK\$/dkm,H{?WwfED~>1B94sRImuJ)wb, 4 XLw[TX֛/Rd,bܽIm|󕭍qPzlC؉W/q6__zxvP0ĠVh!Bc{Ik;_:gnfizo9r|Uq|V+5V1S:{mÙp -LՔ^ABzmeZL@`H(qHEo5iIKukFSdh߭O}&qʢN8}$lQO8cP\KXXi˅U 2Qrc=no9jNLF$đ΋%f$efo;NKjA9żO6,^*th3Ҿp9)x[CJͲFzv }a!V35],|ˋIpý[V9~)l`eYѧFv\ I}序7宒k|>l3]JWCzq, ^cIl?P(߱{ss!Fg̠ NJexގ6/hg[箄I{}n1Gy+9M&w߼a8Igj>Tfd7ݣUEGHz&w8e|񹏝1{[hreu%+p'~*8EoYk-h×tgu0s@--Jcvrmz[T|`3iRY]j97hc4TܐPTVnCga7_}oҪ,9W/,L'Yd5_=SkŦ _fZ#x^7$~5˚0M}dv[0U;zQyAշ̧Cc[޳?|-ӎwg\(\#mbf+i'0C/t7G1mvRa4ud'y3"\V{\,Tnƾ CFo}f0¸"k d#*j{oVUK5M,KR|3);"мYO0> stream xڍtT.(0HHw#C0t7R%R  !Hw7 8޵]7gw}EKG a U@Q< ^>1OMrH.H((4O:@HD_DR vYy*8ԅM䉄آ=y; E `8@:w G q[I tww;"60-@EAh&%b\k;  wAg­Hzs@ CVCx{6/f*NC G'0XM5^! E; `70l& P9\x]`F*>ey, GOB sp;5) UKACDl(#aaAQt~ |NkP_5GvPHWsE`j:ZY/  -/+? 2QTR3c227HH"\e5OcWn@U pG|B|-)77;;0Ͽh]Qh#67ǴP+GQ`6h1y0J /9P- ׷_1 ZCP}<3~!a{/$ id@S}$ѯkapW_(?*C\H~ ֿ z@!Dӓʐ ,X@A/bLu}&,e2 ʭB,UZZ3Kk?`p i~51Wѓ;3 q34;=uq qԱ.Oɘ<|&gl:+LX:[l"xGTB0&% d_gp.d%ݘD*Rj5Ft>$kyy1Dprd}r14+AJ|`݇@+2_`?IH~JrRлUZyqGл9P]D^b^j`7% ƻ|r: (eJ;PC ),?J!~73-gU`绘G8&WD<"2~=*AӠD}pt2ܭG oގm J: Л,qydpfJ_M]'bA[s1M_ M[WL顫~R8`Őw1xe=o 2C]̌קf"gt{,@gGf 8JOCHHC#L;[$ igneT+e'Ȕ_vVvONِAI7uҿ+4&[a1[xDW.g~54!A+/c]|x"Zugyco r >^j{Qv%ga?ݢحy&p5x[8u#vlTP`Q \:[';~u20#+K}=Ϸ;4’5~]P&ƛlRƀ5'_^K AR)3 50ȸåv}fc՘).;EEGgyVPJ޸^suvq8҄IW 4=<8JR>3dF u  .,Rcz*&#fH,0sNhmwtjd'R.vOȦ30Vll0.i i^W5f0p'vJ<^ZmҶ{5* ~HKphK3W/lc+>-2xҰ6q6mQț!H]=1h'(EY~'t[w >|P?[\/Y@8|!Zk7}PBL>SOK_XUIS׶}952#a4{^5S}gWWdʣNB7a2l_gc̲@e1U69Nyj #'.o8[ V$;-_2*<S9,u._8zD/;aߌ+2Ҽ3maW(?ORyfO^[cHgM'PhF iMkɭ=aK {;wG)BC][Dz=vsj~'P,WX[/Oa1k"C#JReGGKI-k}َI73hbއ+V-q ~ 3ëĿSȓvIn(/5'Uܖ۝5Ӳ~Rd?zmUY}5s.1oጁ(JXlP+nvs^سi/BR;@|8 }2VT&;#SdkiOZxz rq7p óFܽ_V7Gsh.bJmedfT6*;sBr(bWQN=HnSGpSSm[2!&f(5T FR 1^2svC8j%KzXSxsy yNu2`cPJ |Mvfig&ik'kQ6E6EpU(B i /;U8Rm+4T`a?bǀt7׬qNޔmğ=ȡYMGyG ৣNpF5}N$XvK @~Txr6 <0Ӱ%Dz^͟?NvǨP:&oer#M@qR#?_˸R;7.p~Y栖bz$J}$^:PE~L2]ZYd~oaG9fcUe98 hߞXTyJn[$I{|r~.E]Rvw>]!d}S!2>ta$K$8-,Kmsf҉9窏}-lKt*V~T<?z/!)9>>h֐}0e_=xji6j?fQ"v`>GO<0lNZh.4(u->;9Y&i{OHO8;E;-s3-J6[mދG?ԛIs]OFP<|wٲܟ&^a:h.260<`}c**m\IWrH߫ËiJ&TGB'2m mL}ʭ<_%zT,fJ{tHVg &P.~bjVSRuQR$μp53e&|*]ȪPm(^RTIYӱ 2]Q'BfKg;/'6y^`E)~՗?a3W~E>L:lߟpYpm{'*@]'Х'L÷[z2n hvZM2mjkFf̶GKv 4.`"oE22kIƳ II׶CՓM߀UUZvk胉[dO-(miONP%r>NQuOͰ#q 4I'qSJ<Ri"Zprt.XPii+hg| zy|kخ S̥ZbP/ap k5)5U ng,&BWX(y)je*=R/_Ոeڦ|%* 9{wF޺P6byy7KJh)${g`x̡D4F0Z|XkGhAq@љyd%Dn|R]]=n۲N/[qQgh7f1G~핳5 VQzKD0fQM^<̘x)=}ל +>z"rVkx b,c X83% pϳHҚ7,NJh1ǻvo }QsiVM|7{U<`#HeqW88*4%hδnpwZI9e[?NAQK9k]q!ƕ8N*ۂ|=V*b&:?3[37 qikh0Jb:'u@^DxcrbX+6Q'F'A7‡$ݪ)Gڶg$E_n L:oC|y]0-Of*JHW\  BOGpNvc^oZi+7^ zξGiNn< ĚssVXjY*{ۉ]z&m:[d9;9ER$諩^HL@Wop; |!+xR6na7j(nT)(MygxE&]N9>e}[uEpn2JNQw亪J%%BM43k!%_{ ~!kF=jYW=u^M0@240d߼W3_\ f\34ik?2I endstream endobj 98 0 obj << /Length1 1722 /Length2 11642 /Length3 0 /Length 12740 /Filter /FlateDecode >> stream xڍP[-!H X4xpOp =wwHp{dޫkTdp48!,lIe-yv6'+ - /9 , "2*; nvN;;_.)Sw 2+@ rEttr``e r17M! MGsB0YC N@+#3b \A%TL@ƊB вq[h 0u^6 닋xДW:+m r@6࿜ML^6`+=* 0L M]_MMmM^ n WTO}.6NWVW5yfi qEOdr^kv Yڀ-,a8yGf8 g;/%oK ~>NN˗2@~6?WSwS`acl("Y_b x2~߿ _&lZ VSg+%$=>,n6;;qLm<7ݗ{efaw,Ǘ3ll/qoG2qKGo`cA^@ek {uA6nl8eYعXٸ۸x,l Orfo9~a^Gdv/h;Z^6nK_7e+-@ 3 v^jX:n,7([M@ ~7W9@r\/_Xl<_7? Q? ?K^?K^% K"?K"5k^/S yQClkCnIQ.6dPcmW!5mrɏt H}yOFdmrRGm8 #^9>(c}s(=kLܕLa5RXJ  gb>Dtɥӗ&(yؓ6ӏ-ۤ!uB0 j~Y.b,\"7 4czįu]czOڂązS0>{rZɗEɢ}dF(JE|?,2$6.]Z *^B@~퉽}IKHuO*sĥuHZSpL'h_Wz 9%YP_]8U6fh*դIsC//N5uN25I:xd. NI*{拆#g޲IYJ|t*$pγ:ۆ/~N*`EΦaeci~ \c0&V$V{T-ԅR elyyJU |>d{\M3ϥ~ȇj rhEƎe:7<96zhIGMdlg3|vNȽ'Hv"htMWVj$ i󌑕9ԕ;;I[$ Dn,\vs{8F(W˼JE˪\ˡ\B!\ܤ773y:iMG~k}jO+_aI[N'~6r "0w)HK!倪;$]yhP_ g;dc~X@ECVE{˳|;1@>U0L} ;Zz4JБ@Czk:]],疽X3ٴ 7AbVv `PdI?E2 _3k m_o`]VH4F#ސ5'F _}P ކ2Xx uJcT~YltN\niL`Ϋ9#Ǻ T:ft D"}Bv%U]{D~tL:DB/zp?G!.@Ø:gRCa[ɥeԠfʷh[̃@p4,"I>ꚢ4,s'ޝX{ZdάEf%4jӓ ^խ.]ӠRKlW֯[J̺ս$gWƘv%stc vEL:B4ZVJG npF^5 s9jV/FXny+ .ߍTө'ϳȜW6h9+iHer-rw.o[#dh2bBVߥ7f.wp\i/ZȖ9K9i8)͉qU/6vCPy|=]3sbo'!E27 *NaKGr.b&q')WĽ#@?852qow 1 *dLPh82deEچEӳA(CHYu 09$qזƅ@I4`(r簎K %fŎ9`eYGw:Vk^U(u iEeS$8dnaק.ɬv̏ GK1Ɏ3ڷ(HQ[~ٻf>T'}i,7B")!8 NX3TT3BM*{6ِsnKƛ3rۀ-r~Ώj|? ժm^q9c |^9~u^>#02#fkWyI%Y#Gna$'aڟp1Ӂ^3-ԇ^wX=gG}|9젬Guhg)潙\_O0 QC=2n1{{GMt#UѲS&@ 4VׅR9?.L5\Kַ]_I3e7C75؊¢F!8>VuTקR7¾Q (:FbǸK+WC"$F<`l E؝}HuLS:ɏm;zf"9VzS1$dvXyx1}J|jħ ٷX-̣4>!>&wߑ8!&MFu׈\o_EERr[ga[u\a|k*&G˺нi׼9gZN*嗀v){ T03n8bEeI\55Ȼ'쐜Zb+1Jyp/yj. "p-6= .k2i z>]}:.6]?~ F]K0yis+g2kBCrՇ}2#(k >>N~{s#~mH5SO7SDie.Lx/{ YǑ83E!dPHLe%QyhyEG"asS]d,&ufq(r~FISGFx1bz;08cU`R9rE8$>+q@[3BH̘[jOMA圵1noiJS#^ܫM";9 l+qUO(`OZq$ˈDc4M9LS8Z}#_w%ƪ }U9}~6eu+.SlCkc c÷(CXTf{2sE {tjL k8Q0q#>@G3$[TO:hGz霱# rۘy,[_뵡<2 Z{y CpUK;kضc2߽-K^y|=iqmKnxS&g0+ҟN-Z ^/'g._L8"@qz/GdHkݭx?~oE#₈$~t#msu /GV4v/{5w؍eNb`fR9Qbo* zw(HnƇ@:ox- ցW72ks/CK9G#A /9x*5#3ᔵt8r<#cO!*oDa*VSk`v2+Ĥg#MSU.q jx$=;,ێFNZ#=/@QA`UO՟[dJL{'xqy)mΎO !j-9E|'qF(KE k 9mkqUal hHd p~*].1NeE=pICPJm6`EF a oh92)ю ?V>ҵֹc;Vu0oUTjt:fwެl(pd9aM!N[@ 3L{|In RגcA\e-PibͬҲꯢk/ꉌ]jаP4BzmȪpDY'ua]qdW]3Q*rk :#ۖ%Ri3ѠZ \hk[ %? b\Rg`#Z8D Nԋ[B$:\ޘ!Vw7J}STnnJe.Bim e;*cͺZ`\A2TEmAIz9k!'o.n+O!Lê!<*- /8H%EQLA,Tz~ˋDCGUL^0{Dr,ǽwed4zUwesUŎѿp `'O$oާ⢘vi2M[ZI2~ f3$a&hzTfip(*jIBHITɐ֏gJRKX=+SĚcPU2 D-a}.FHdQ AU0 q $:Y%H&t'-qqϩcYfZ^.P"֑}v!ԫBe1ׄ }J@r61/ eD>,px* N)9!c~Fʧo$l C%)<ɟks06?C kÌWIJR|lM }-q&j;XxǍ1Dm4Jz L|, 135y~ qݓnZor%M0hnDNuՀgvibD 7`SwK^I:,cȀǤA5=GЏ` ѺA)BֻԸBQ-Gasrmy;m0=F}srLc8%&5ʓJ/q#x@ [=+uC`5c^lLSU~gK,9D8DpKIӭ To@5BZqoƅe i3O]=FT]aO=S3ʉ3/uX篭Rd`VܐB[IxǧW` ( TՀꩺH/8$Bv.A֍(yY9vl"E)'VGm*65/z#pY>4]$zB"T&r[j'=fQBs pC|N`[IuuƮBH|8"4-v>ZPzTڨ+xAo+CLxRe,2UBb<40" kZIf:HUhuq)R۪ubŻk3#ٺuḆܔ[1b4YC28WEnVxޕ/!Y@³8 ,. i&]p:aq^P CP"je 1){䗺*׵xj³"}|pBK/Ǭ# p2Arj(eDu-nHhٵW ̿U-V#Z5h,';'L4.ڽc2B2yD=ZUGPv[ ۻޟ㭜?ZZ{O]dCD=rDE9}"4!?=ZCA5 ÑI~۝g HmX.Qh$99S%p 8s)ݲ]nDGq@EsfqJwt8e/]d(hܒoGi.0l%~~thD NY<=E0KY'"Uq4iB6%  x Hepq>Do&'qF!`wB^D %6jH,igJgcl#XwqDrhf%CX.lmKby0k ?-fQXCQkk 7 qo4*/[ºSF1M l }Fg~l;mW GQΗqhʎʕbPu'Ȅc1z y]Jhc{2԰s}|#rtS' M$(71O~lѣ_ &cc,b\{@!뺔֚<t{1ʻ|7C09Q, z $ nΏn!_U)k_eu?~/?QҀyW@g_ RGs+S#{Jͥ9(W髃RЊ݈,;Y7|L/Nح1PNS1\!SEG="Ƶ{ue, ?Bp&i[lY7i @ԩ@i,N K^cVL}K{> F k|\U䜱UWk's$3^jŸx^mn&qg?] !`=:0Z+RY;RX(ۡB8UIT*z+ O@ޏT|"R~S{i.FbT Q3QQȵ b&8SQy:T tߌ!jVg@/= 3fY?Ꙁw2NyyOD_JvdowN'’ LNN,}(v̹KꙨcQtYX:p e馜O3#};:.Ov =FH#YPJ/M~| DJfrܚ}uJR]m4oK`s-ݛ^#{Gf%xA2N8>%FBq(j}CnH'4NPJwσ8#3M4]Kiro* +:^K۽۳CW dӫJNd/-+}K°]Rs;⓺C\=#]|LP2:[[jlMXFB^dygx4'Mf+< |h{lgxgYH߆ >p U'kX`J D_.92գ ecdzɲv6Rf 1ʟߕ?!|X 7L!P8F_B%TҺ%H% "q}?Xkk !6N!1nM̎gڧ73yW"m50eXQ5i^[ߋy^V'WwbVvS)Iô0n^wH1_Q'M?w0rםF2KҨ~hBJށ~_a6Oh+A"0~ 0\n7'*u A }5%R2W$chWM_I)b.P4;'^I@?}[]Tҩo7#%jՙ =ܕ׬=-Q1&hզ3"#/R$gha+1 }M*Q\2CP<AZ^Rvޓꛋ<)wڢg_P#=$w* E|OK83ہh#=yYBsrt~ޞq!2Q€"*?z56$6fe=\$ S m{OdvUO!L;{ݻ{$8*Eib fD 7^&U};R:Ι,> (R]v '=9x}y*n8]2~G 60^>tvgff7[kr;<˚=QUΞY/e)d=:u$a3 Lb: ā{4&B>L#]+*d2aўa{sO So0b.gej/+'Kߍˆq|e:8 jp{#h(PF9M0N6Zu.!6ٕ`99y/^%h$'gڊ/ICW-Ǫd=ff +r"ujxG!/Nvn[g00O^tgcsfJ`#iNdJ}eZ4q6T¸cB)W; v S>Rq^"?cc2єh ==یBx=+,LtD=|(kƙRΑu.AR|TR5㨈LMٯ`إ=8.-A$ZR= ul蠑FR5kH;LҘ)v́e#4PtsDi@R`⹸-N6ѻX<=kcK'4tvߑ N>*ڝ  OSj@Mз{K4(neizL!6KY[Lft"QVbRI޽MD*9kn&=3Ȼw~Nj$uA*Br6%s>l暖ǣViRqp6MC3{6 ݽ#چRCown If?dNh&Êqe\2~j̕WEuBk+wZoو'#Ϣd~P΅d WvGs{qħV$$YN~SN%zpE]P@@?f$H̱eqNϴh%F:?+u>0ÿbi:k1{Rϳ_ Ӆ +1g(1}4xayB$i툝%y1IL<ǧQ٤Y'e+榺.%JNu2k|gʕXTS\(eLGl:y~wbǫZ=.@8y{sߌHc$9 Dƥ}2x!y 3"IyHP-zm2OAp|n"r}kXs|yE/;T[X9?փ u`/>漁#aO!ICrg!Wdg([%{i]nG>]+## []vRN#mPmhL0q^ P!gk4E,k{9_v"7QHm*N5!> 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|d?"X$#vo`,r8oΧ)x1U~#pL߈}15E||F"<]Iڀ9@& Gl(A֦rWpƎF&@kbْ#:=ǿnɿ jemGX0] ;_j;?M'z~4o e@?,2|V@p;~W mBփ;68-xu1 4bJpL?9^9^N{(qqfo "-sps[aW60;m@;8\]h6'!NFN\llpp=t892:@pV? ݞkG:=M\vZ~_݁&HKv&A5Amw_EݘvPj1y-9<'Ug;IXyLu\ڒd2ۊ8?Qp,RIt3d U /R[{m_h^5,S4S(]Y\spLogo~`eO3 DszioyU;uRj=H_*)Zb}{_GN qOrҧ_; b֮=}1dbSQ`(m#k,̍ḯ簎"jڇPy8=.Ro^-'NgU\А 1 2xoas"VC v .K|\av{<N}ts#N(2j$4?ƭBK`L.*̊iV1nGS̷ 5#`f?65jD(DHqi,o j%BꌌSDK#pBځKA'2k SЩ̢}6WI- TQ hzE(|wS3J=qIOi3ڋQ55?BdRc P+tįw~2d6xY"_݋?wowiӪJ:YEevŮ7b|?Ku$]̏6YֿW5V#HΟm$z~\I<>'!I/=ȪZ@Z\0(D/8{}Z7 .dm\+qmE{hNVH9sT7)_v?8ON ,Ge [\G4gm/C2/4(gcP\Ŕz_zew_c48]EfU/qC%O71k* &!T؈ ĤCIoqlIӍkyQH0}N|SEEfvޕR|K+犑!]x#F{M`W;[9y876觻?liЬnTգݣ3NGA")-Wi\[*0V-xמD\LtK)>L`wvQ6+Mr\eהDZwLAǻ %AaϵLf4Ew[-G%cņ[|v pḑȷRQFۜzզ *?tA k8sZ _ Jahv{ 7,zPbm; yc 1s ~oZXДڇѾ)bkUsDV ʐ+@Y4&˗.DŽ%4nExt˚xx́1E3@1o&v%,iy$nYSh(fxO)X-Ý@z$;t?Yڔ^"DNo (_G|1. Ji:]!5E,aSgj垀HܮBFK>UG*=%`>4ܒW$*/LǛ/lȐ:nwtPUcG[iD_5f9Y!~%:̯_~G>~ ^?>Es.GVfŗE^d4r}m1^58nI A2,YR4ڔAK1a1<^r?0ߪQacmX r

WN׷ B'<OL}Ǿ7C4B6)OEei//YzU_E)MSpc{]FDyY_G-G銠BS1H0~!- |ߨ'Bq(螲Kl,/D1 :,k?P\{)đL0^2EbwxWBEG(^Dr!µ~POU7TIA70C|u2*:LjYSZ4ϴȕէJ"o(H(`/ *z%r~G!0(tԣ,FfR[Xϝ1"5Y!=))q}5,wA[<ϔ߀_jrj.vk.|ԋ׍n2'vVǰC6}ċ |{5, 7&ꧤ>Tьt" ͘D1(9׶hėk?uZPl7L֫4prȅ7p71Sv1ߒ~jM6Pxfd }tNP-zO]o<] "F!L WIPѤOb c 0QTTMa!v(ς z*oz a#:1T&%Ԭ3-͍H%"0#uo,"aJ*w,?tg\O3sⶫj oQ,*<HVt㽧hj sDzgPAI Dz({p6uT4ih(~ 48b|3kZNgI9ȿ;a!RW.I UNT2Q* Dk϶ {r?zi$^ܼbdޅMf|]aCW0bkfا`9GۀȉJZEv=:x ܤSzj$]]ZU|̅H&oI[3[96fp..2fmB כ運zZ ?wy'6>$U+?8^ȺqGCBqf5zm̹Oyug9puĜ*o j&7PKBdRc4;q5i&*~rЈ 1$^OJJO!/8 Gqeɧ m1Τq#GjB#% 5KCxe')sO;n6>B8~27qBVdN]pC7dr h\4\‹Q]q//2 .e?;"pݜ%ݽ5iGvKs3erH>Z:}a3"i?UF@jqdžaa J֣ԼuYՐHEwsrPjaYR _O_4뾡.d+dƹ8޴,;iߵ % Lթ|E3K줍M_ƊxeQ^wjbo7w#owvYߧooK.T#΁gݝ~Zji0pp|rՌ²'p3gͳZg_5 rDѼK~n.|͉//TW)MU]P5'۷V8_5ƶ -Łrkw1+& a]'(4`Wz+FQ&uKx"i88cKCԛIǼRnj$1yGX<5XWT2/ ?h%{zj?U+n%z 0HqהD#lCٜ9cwEŠ ~'ё07HqAF@Sp$|2sۑsC2nƁԙ"E,)n!k6:8E=%68i/H l9CUlӉ(O7[-ty@+_Ʈ\4Y4T&iā{̑3F .%JJ-Ӂ+؛C!cOv:Q"#  !?E;T]g]| i $y4$$c먼QQ0I*쏫WMYdr^k!U( 90W$ U1Vm7m_ġ6& jeQ? l41 ulH6F{ QV+PT0Df]/d*V֔ޕVv$ew)GmtWϋ̾s`ga(6E\~s q Su^xU 4cS渪XԻiaGY}Ar"6ʯ\rI?11^撤 BMfaQKB3Yo0ońd(]а5 PrI7Vn t760Ҷ[!)ɮ 6 ~*#4X<ƘSmn5%΋( hhbhW?u.ypAe}- VgȽ=y&+\$\˰dP@zԢx\`rbSNb~qgR,al &b97 s*o1iJ Uu{W@j惑:'!$U/I\%4 naT QHAM3e?K}7&Pb kmPn/,0v91i^ɱ-f޿hXxGyr]Z[M%obYQ`ƎP!&'1J!7X+"s6(a` A~5ܞ"_BΕlu <`J_qlG >C3&SO^;傂'Mxסc)k|p?)҇(='sOz)=ӳBk۬_0o|ɔ D5h gF(~9RCsȠDQ=6YB שґ!99t.n݆:RNcTyu['_UX|sXW۫ C<~ +~K"4h2z"Nfw^bAGN9Yxmܚ~S~w>ľF)Qީ5mgeǵN+ >={&D>|hzp ap~ĬAY1izWEr%a@dB2$XFMVl8'j9z@Z3+*IBn'K4q] 4s3?;C" S}M1ɗ]LY Oz7zt' J4ȍ$r!/&8xPߋ4hޯ Xzbs"84&3˫Bk+&$Lyt G!R&jk5Te;t`[l}MSwH4A^2gVB5rNobx/%Ûo_6g ,8 ޡ82Lܩ?9VַcWy'_0t8˚]s0:+LsM5x=vX_$rɆ?@vi@ F\ϼ@=6A j(A)#%aKj Ģ@NW($}AU|YfNGWKUᘼ-MB  (snPGLH"RTm/4ѣ h߶k= ܛv {{UMO_0 ˁRo#AQ'bDb+=N+ě΁ɟdZ婣bRlC,_3Jڑ+l/)?,BMuIEu@H퉆4'7եoĖ?ҵDs*ϰܱ6v߽-ˆ Bzy^.p4WډQ((fe]HFTr5o۸ki)~=_`Xs|b`JCC`vc[5@u4\nfw n<5Tzp;,73!$~JiJ@^b\G?=նoAG0%"SLwB/[MAo^ʥ XJ2h}ͯiW8Cqz# Ԯ1@i!yD$)#ꎁJICȇ2]xELA3|y i:e'*-s+='z JoHOK I>r+!b :G]-㫰b{Qg$ *=]vwE$2=0z6=? J^^ןOh5n?pT3:.2hm)2wuԼͿ']}Zfe:@`F!%^ #//3!dO3v-C"cs?3([%v:Sx*>EM9*DG68v$nN7vkUGE~w@[%mkOB&'k2_JjƩW?+R+dŔ6H*PX*D![x9;VzD;P+nGK"%2KE+jQmӿ2P2*`F :ـwBx#fe7z yR1Nw*@K3C =oڪe Ќt;N0"]QPH-ʔdI|v^{iyŀ:FN"'x:/~6ܷNYA*]%w7pȍx'ف>Rј)얔'dCWp9sȉs ^,U"\q"(r^PlЂ@q>¼IPؕ([Z2'FH2Mu5𕡅dW_4L \n6AS@Uy6{&Z- dw8ABjN mέQ)-8I(SߪYE[n߰/2u 7MuplaɇS z8֪ N.o?x~ѲMZ@ktP4?~b\vMa׊6.Z*fѨg~A}x61#Lo"',bfIr2?0C?9"+]4ea`ͳ9ʮVh}nի!BOrq$2dHk#)!UqA9uS25w)3@ խ ~z\y(!0C[r}+gCAB)̈c#Վg]Q#Q{Hb8s\Zz9/LLL?!ZktUCHUyTʎuvUooCzoLl@^k,V (pQ{0W_@)EDn؍g46t?u=dz~'촾fE-}.@CS;3ZEQ<TONabє^^Wm:N!KaH1~:`-Uu*mrϙ8=%=HDˈBlRAXtR鑙6 _Qx]_D2a?#62ydE H0mV_X :A_ju?zk[(32rw0֬jڵ֬{(*15,/0pYV+KrDxmaV+N?cn( ;PXBZ?DwUM#ŜK%3R!FR2g_#(I5](q{>jg % l~87 ټy^V.8Jr]GKMt#u1OJ^&t ."\qq)oeC3 J[l0n[ yasPlRfԛ\?uPy *1վ+A Ɗo~O/3"f@% WܴOXaܯY!h ~@#s|'ԤH)? >#`RԤd7L@)ƭ$0xM}P܊G'GY2{\?z`L5]FZCyO_KOAˆmĖFÕoeDks/nq丘*4Yw7H![SkKЪ8lז=sKNs6ϹscYmA£ B;(}rWnkF&lFgpv<.hkbY3@;j 9i$zք]2FQMam,5x*{T>_+HmVSêz]} _!r& IZ [.J>WWoaw 9Eq&h'Ze8y)F2Uwc3fyusz%zl)(b]a n(tؚ\ŨT@a!9hiOl}vMԇ੊ew4k%<^;||euw6wJ6]W]XơqFg-aMٜIŮf.ߦY,gؚ`:0=_m&tT uYIz`/~]~31AW?`-YVj⭋`UF1[ܑg0ΔJ%Ox[UI}.qDnrȱϛ |dz-ER,5lVjHUG2g4:0dr]hlׅ^z#wu*9XW郐,ϵNlg:+ ؞;9⏇|UGo:3v%9Ӯľ.+sCqKS`U{ nN1SpX;+E{yp$RT jf)tu0 >A `&(DN &K`i LˮLUH"!|9Q̧yf(vc(ҏP~z>oZD2p3N +ll3UR¯g%3/9wwFNF!`h#!K8 rr{gRAHmxEJKۀn>G;5+C sznlͲlgMu°z=UPcvjpڎ1"{ܦa;be 1aiê3O$LNvhGQa}xPqayhG¬]Az8,1|axxY0_I-5k U'vr^ɹ[v3ru=^*K2"㐏Q ϜTsy2l(sӓ}r, Yh݃/xNUSݵrlGYYLF;9fIkE 5@԰l+ݮs*!9B*pe  aqҵ A{):Ff+ ޟ1D,SE- H<-.,e& R?[ FRQ썡rn}P k9kw?.j1hJ^ Z"_`.dZ\VYU'Ff ھK`ӳO#5z ⢭5]Vں'*_oR[2ʜ ܪ꓇gmMW}[PWJaXZZV(U=%F'wC*wԑ  I6ߢ㿺(,|m[F^# x&*9ڣ?@{&ҋˬl:pL:EJfdYf֙ذ&ːd<^9Dx;>^DD2,/gn-{y:OV#8GZ8Y*RQsvlR')+gaœ SMT72+vpID؍2 guN s"%Q3+X-T^XTTQ=)연OV]PR6̡2'}OKUJUt-Lwe?䜾|IdWƶ?1Y[H:";rUv!hHlF P'X>aḠywnjt&`5@\?٦z}%U˟$\pk=xDE]+\F=6hi:D !*G[ai-24a>!2MfŽ27;i<)v]fJ5o2:.t/U r _슨 e<L-'j 3ޓ| {<}{{<y|lh񺝔e٬l/"l-.#s=7Ï/Z yvJL|dwV ^5m[rc98߸}t$+aC7rH%M;+k?oe='ȼB`KzOa@ƣG8$jCpVS]TЍ7\>-;Vl"6)c 0X~qeV!u}М*[&wCc!vvYu5յrh6V%GzVϯi_? f0U(FbVEk9`,ݒƙ'孋,4w;Z\ᦝ[MEƖ]g^*̀ eMh7UH0ia/Q [؉2Y5FT2YXwiG&KgΏ]nL"ѨGRZ9{$ װTJt6lj׺ F?CZ}Ƣ5۰QadUpӯf OEq:MrN2P{ɰ*Ec:t|72=ذPXٿ Xo1 *J'Lv虋~m9$ОsxſѡLv)ti<)tSNO E#x}<ڐj]^zQoqq6ߛ*٫JY2{n~Ձ=%4&ɨ*K#ڟVzjzuA?3VLuZ\)?E4~ $n$}0 z6) .=meח (8&/!)9,* riB=ڭ7J&2zO T3c#ihmZcu[Qci72$16@DK'Un|$[¡cEFK.g7O\1}$+%jX{pM& V{Ӑ d~"x*jx[!"״@AeRxiEH&Fab`kTR &w_A=7g]tKg:-rqx*⫊I yFUmܻ:* i1ƠЧ5f-}; 2!w:ztĵol3hCn[P$0@VW/ƭ l^]k`.=mó{ ih WD*jÈwh"`nR]xx૮ꕗz wk~,#O;FcsxTm)[̔[l`B&Pt$~ gmr{_^9&sصŦ~T0*ى+kEqdKHcr p3)yp!Zj O=2xswxx°'2nbpC Ǡ1 *P?6-7qGиBaN[,n(~}@tl}SUJ~ʻJY&%XUaa9(z2)C6<G mPY7U .;ЏHMc N2hv2yCW7)ᦊg"qH|Akpp#d`r\_#VX(UBA %27Q\9m ν#ï6W0R*/zN[Y7ا5X5oS.'J2c)ُԾtjW! Jp0f+ 6,8  A'(RXZy Tv8 LGyv?sטxG}!o1fѱW{ ۢ*(H vIl6X~m϶|i䡪Sʴu_̺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.16) /Creator (TeX) /CreationDate (D:20150629101349+01'00') /ModDate (D:20150629101349+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015) kpathsea version 6.2.1) >> endobj 9 0 obj << /Type /ObjStm /N 78 /First 634 /Length 3979 /Filter /FlateDecode >> stream x[[s8~ׯ㦶bwV%N'IM偖h[;%_kEe{өAlFA1( YDjT!+,t BTa-,.&./ MK MsUt0FBZ1eA|0DJtgTJ"tQī( k .q}+=weԶp31sd)JqbYMd5K2+Tm$:Ue%yR ._&QCMu({ೄ{ceIwHRp$ynqOpJ%I_t %CC'UO5pN eI|C 6(MH :$A~N0@ &G0L} XLSKHu pKOy]}uQdu)ظaF؎0 844Nj>_TNjQT8D״ Odd8ѓմgb~?a~=Sw'YCOM=q8-eOzϫY͎_ g|_aꉗd@PdP׻ P !7r4?φ/5 |jK\ NjYc1ףV1b0!gVjQZ|ThP?ٴ&RI1p&vƓ>S-ѨZ^.tq5s1EuկvG:"?u?=x}EE{Hڍ ʿsQWMy n~qq_{_BT;W*{;TLsߺc7[!k Tރ{4x1neLOW;TRoØ&٤KM#`Dh],*Js ^Va'~Dsk}ɓQ;NӤ+Hר BtK;iCC")`WF_Jbx>@Q c:8uLb|P*D~'҈ѓ-hu!dN3%yL40Aa.w %11)vb1*vB7IZpejG;k-}t114%-bPYh(S`+ΎcRڍt_s_rX9VE`Q2 RpX3ٴdH,5$ 2e:M`F6'sfBHQFaUH&@S}F4LUIײXfcJSxAs{s͔^ZCeB$PR[k~*_Gv˲\n3cx$XɘJ㬑,iLıT[pwi3Fd5i҈7ϗs7یw0=(H"Ot:0 Clpbi~"@A(bc$ykMi>c-2˱ïEP.Oɥrq&4hETѪ~p-H)!#Yo7¬Kdd5MeP@1)2xZr YSIe %69pvH۴˳Zdm96$ .ZȇDށ"2-yY=%_@H2CHe഑K9-kgo[e7or_a\y36}JI3ԉ 3[Mi*JGn}c7Ak޵Ѧ@*ܬPe9y]$1^ }KfbQ6pySrOḟ߰͜ʸ"r|SZ),RU+v:QhNV:ed@v((̴T|X{h֠O%VK&m(N.yK"Q{.>4m[.b" 6Fu78`Trh4-#'ATD[=Foш6D>b%mzn,0Zg -Ly*~YrY\n<>456H7r$@3Z E7TP\nyff\[ *u˵l U"(yYx.3͡8zM}nQE1S磷_y2V|gJ|nm*oVdi>_&kVmzyx:r)oXƇL;j}AN>7WVw0LLM?InOF1YRtcQo(߷z.b22O ν$:'b&H?l FLus.uif0)=𻘍f;qzd[e飏^;6)I惜䋔pf `|i-бNa U<&MOэt^ۖl*I?| [mG޺YYQ١{ɦ5q4|rn+X8oҰRboU;=5 O6j2,ނ,i~߲͞=];%sP" 1̉[UͫgdIwc1giw$e%{ޯF[[Oǧo`Ig@S´NF5rz.WJ=BhWMuED5O_T3lsQ/k%߹LFj {T]'RӦPPpA*Ƌ3yx1Oq{ qKHJ2PJPMx|x{Gx[ױ%0$7/V1u:زs#=[P5_eL|o-.[T$cMgb v6A⎯tlrwPlyX |М?Ngs_`nn}3|~3~$B%ܷ&\-{%<!}^ ua%[oMndnI[m+[`3{֙%{#pj`W3ºjòd{^Ϸ$oewKF +n-nm^pmIwf{:r]8QKkJ=Yof5snfh#usՒw]2oWl̯ v|Itҝ#n榋NB3~ UqknE%䢗.E 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 [<4402A0B105FA86B5580150B88A9CE847> <4402A0B105FA86B5580150B88A9CE847>] /Length 296 /Filter /FlateDecode >> stream x%λ2Q?$.!AⒸ%5$. !i*( Q0fPy |gϜs! @%JbME^"lۚ#Bov/ /|Df=+DHVl!"$DbSf&r;VBmu)ڈr.:DTĈzݢ8z1!=W~)1 E^ a1""#FŘ'gv8q V{&ӿV3U|,X͒A9'`5O>Z[-ҕ.=ŭV>SV@ҋA/Tv'" endstream endobj startxref 206851 %%EOF rpart/inst/doc/longintro.pdf0000644000176000001440000143312312544206115015671 0ustar ripleyusers%PDF-1.5 % 3 0 obj << /Length 1099 /Filter /FlateDecode >> stream xXKo6WHçD8v`.GAY+C3CRm6MHg>|3d,UV[2nB Ns6wy,/ uG}4l^kĩ-I&W%kk\K2>ˌ۬P{*?8.b+xB/r\9vxWۯ(vLS??Q`9ȶV09\Ks{?@ X}óxܒEɭ 7Qh۟8=WZYgQ! ?$, ɕ;ew7rv{; /j(/<t qҌ6HR]%mT$ (jQyGa1-ɢ6Es0 /q =Fɼ)Pl6 YB.7)JʡAIBTS4zl] Z5L&l]^N}[h(W9"^핀Rih'jJ7H>3RĽf~٦Fg2Bl[w=1Aegi?QEOET^hD4en(|待I/@4e9"!g%/d7x뛉ZM뉵 Լ10:P :C&\4 Q.Pܥv1?a]c,7/@,,.0h6|1%7&_DV$LᾏjȤ)mTo j"VGi])"R=/9y-my}Ce1ERߛ_=Wq) yM?Dʔ +G5L żz)ql +<,&}|l(pu1pZVBɨ~|E23̤"zj!.𤂽͐]qbsEIc!^?̽9N8G)e q_ O/=yyh5A 4]Et9X.r[+(єY4O>< nWE6{P9UV}'̨BqeUVT{=/J endstream endobj 14 0 obj << /Length 2167 /Filter /FlateDecode >> 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 1539 /Filter /FlateDecode >> stream xXK6W9Z)R-,EA%A+ˎ 2hK{Ev/Eh1~p|kRqiݭfEe1ˬ-fwsRDo;ly5_$~?/Ds ~θR 8͑?$6[ G”[eg*ˤT1-t"cx6B[]` 6:6rH*imXpx"ksVϽx]aP7$@3K'Q8CsdWp!U(SFyaVd*cmPTH[ؚ  ;_"El?QFϣsMS@&w*L $dV _Cn7)Dip+Y~& [[ ;"Qg{9_n@#iYQۅy\b4Ow%;QN ,F=G [=m)jt"Jȣ-Ŋ:TI5ī{yl,cAv#4Չ\ײMtO.`!Ft. 1II 6DU'XBGAٻ/HTш3ˡ,`*Rm8W 5HekX{q;?+_Hf'gkb}0Jeii3bwϬI^%ġe}EPdaoR7 |u@z+yACTxq#.ѠH8FGU6 $:]Ɵ7sw{i ԃOzbڅ.oRLߙR)X <[V+?ou:T: TAPIz iNUH?xҜ{#HjW "N+qB"M2蘸LkvV^ Fɘ$7]6 c&eBm%ax=no-k]MګP&RA\~預ݕ͟J$Cw̢EreE`OG 2]ȲR7.=zvv߸r< c>a0CNJyk#{Sw힍"E.rfӣ\ ;^{O]Ν($gnj$,tRZz2tQ>UPGؾFgU#KKlDPJ+**e_ 匍s",\w]$W/ > 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 1667 /Filter /FlateDecode >> stream xZMo6WX_BYish$ZAʎkkM)VuQ8x)Q$%X(xFxL{b&Hf]g.X&=g >Paʡ-]JTFddl`"'K q~ª`Iad0t|gIvy n M&f14Yљ"-PJ{bN0ebdg 8UxYTt L7.DyͼcZ[ J/%l(f: 0LG'`H3FG@F@  op@+4!@M’DsЂŒD"pձ 88,JU`f4zccA,tFϜ"Nc@v1z 5(΅㝃 Hp>׻?]>!4g!@9P- #P!j"#(†@ !,1'Q^G{dD{Dzmt|DO0|7 R,bW+GE.z0 37Ezєfی-WzY+L͋_Y?p/.|21c p)={Sq7ELF} 6Et,]ٰ{姆nDA:!'xH1^$}bd}䨚"Jlu}/ܗ-[,Po.8 .? WAGm[`NjnOG%Sc\w,ySjhe(m[={_5sԼe?-Ubպ9 rk3L܌UW">k6%e2ɌWrl"Ut_ŏgȰikݶU:?/AUi/z릜 Qk>~2XX7%/e@Wbٙs`x|rEgΓ=&Sb 'kﭯzUv_uW RJ/4߼=1Ltt&ݗR>YMV5~jO÷˱M6ɴI3cbA\6;݃fwE^OL5v> 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 1195 /Filter /FlateDecode >> stream xX;o#7+TʗӚ\ $Ui.WIkG- M~{.\1X| W7^Pib}v=b]|^~^IƗk53hp'3< O" L:n׿3~?0{ԣVR=H>:r^ uUGհXQIguB~lhxwP'nGez9!MP) M3GxD,>Dy ߂4;` OƺTꈆ\W\OvYvs!@~еC *nɁ  K,0ǔܘoɈ3xcmޅV9?n}"<847 p;SayLQ~>2A5pDATc> @HaO0v%i80B^Cx@FWiR2ƾ]z0xB: }X6՟APiT Rd1.Y#PuQ !PyC!GQG9TDc6¢8"Gvv]DȲbcoS;څY>JBuӯFI}Eu3K4 {FW=6%`W.m:<>:[MC'}`tl͠sq4],דNP}סJٷqr\Dx2,%@@-]ln{ǃE+jt5ϰkلѝ:! 伒T6!|+DkA(iڡѣh 0\A֨٫*0[dM&) PAxM-}y3gSPEɿS~{139@dA7%|Lo>QZZqQM&ؿܚV >t%Zl8M$ n׏Y()d:'b5SA{9Oc1{<<3̝T-jTNsoںpW[ endstream endobj 198 0 obj << /Length 2399 /Filter /FlateDecode >> stream xڭY[H~_#m.B vHm#\i ڇu;SmL6Yc6IޔΤ7[W&y5I7] ^z~'ĕLF9m alZ2e.3rN2yjre5~*r סYuNQZBKF S<]eӲ6KO qS.MA"S=X)%@ѻ>pz恁q}ڪ9d゙`8v#@I@%7G`Y+LZj%0T'Ȼ8.ʪYYM!W4ٟ9Fzi!06FIdz/;S{vӄODeJIXf %T;F&@%u0XQЋmڍ,5ɤ49No,+`<^(O) N ey67l2 rx0b1:!g{FbO^´S>rFO7q@5i9矷L$+l|Q}|1.vl4(gTB%] J}<Y(tZa00ibu}KFI%ƅI2.JƋ1rLiVW`~fS)t!yLS#M3Ř7!$+>ovB5Qu佇W@jW;prp 5^'^<QZ/ +XPALHBLg+1J9;pF|=.ˏ/&9zRlD4/(ʉIYMp'~nO @S 8SЙ@*Pی\g8\QWԈEU/fhj]OVd8To<o6YC{꫷茧\%Tc @WFCL>h#xq}X 1EVMZHwjkq־ROy6Ʌ-s\QH0(d%"~iA"))ua9mZ- ɟCBˏ ,FGd|?W 'vhw{% 7l"mlՂu6|/ɋ$/饥 KC Od#+>TZҋ.iE$}r& T[=ͤȒǵCxU+OE|˳QֈYZVe8DŽse^V8כ[ m-K?.Y@#O ܀b!+9C -&dέv5Wo-7c7#bY#[6^^?)WߝVheH 'h(JFr=D2V ,ZmF_?2䑴B*wfRW#O"Pd'_U#G[(1Z_9T4hݪf'nʯэ\NZ<3*c3w5> 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 936 /Filter /FlateDecode >> stream xMo7+xa8k$m%( b$6bK-i#Bs fg"Gn;}?޽R>ůѫQ&R7M$/_&55?)g6Wu؋gBW񂫜~\gmW[F$ٟ1 ڱ⨃Qo\X,?J!h]㺜ѥ vjZu9P>kklXbbUl7ڤ4/+6`*q3Qkb#گvy62M8^4QN'ڦ9zg 5U]m{m>]n_6O[zdz,hs\^>w-{ԾS69n~<]PǛ̜2ooO/رjpd]e[GR92*#g )Ovj^fD?/3(v+2tsv [,zNNvvQG]@:ׁ qcTt7ْܳ 0B'QZc&ls1 D *b#R&NHFK !g\5y\yq)=IĉȚJ)ŞŔAZFL:Vc$[u䵵z&3{e?`6hR{fE(e|,QyDRn{6#Œ:ƅga^)Jb{FH90mg\!fi[[3%H t9.iXN "Xǐ ?!Δb 8:B)S *pRj/tϹzR+a֩uՆIE(1%Y<"g;oB2=u,hnS'mL1ljr?8 eFtL> 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 2784 /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¾kpM~n~6Ynv2[̛w-x0e2" K,gf<_k7S f~arw{3_5yf:yˏi{9DÝ(5ʞ-ēCW}OoO淐6=䄂至pwk]p3N O=Hl{fN a/<ˎ0|togSd{xhqoxNldІEl{ܘ y5 my9l.ek@BPcy(iC8v>uQڻ#;Sw8W$yLd3+-!R 2`RTX(>Iw@bg"M Ipv +%'!zN^6gk'd'Ь,U0rOBNcף~ "1UƄ +:Q*~q, >`C%W< nZX*OE j07K4&EklmG@aXiGUw޶Ǽ({Yy aJ+JQ:SJ=Y3ɒE I(L:Q??0߳lV@=Jb/'rgiM@rA&u)E 2D<I1r=f*FRT]d=GV@Qٴn4D'u[իDM@AhR5slroj) Yf褟% JC̒R9Ȱ8z9} =UJqXcP\;&}7\KO]B:Q[L)WƂukYYF_uf hs=wȵ fRre-ZEoj[W` g=hV(kiiz dh]S{tJH%W>$>c2IZr+Gw+$nʩa}ҷH4no7}9[#W#!Gn=~=cA|B_\L3 endstream endobj 332 0 obj << /Length1 2000 /Length2 15021 /Length3 0 /Length 16253 /Filter /FlateDecode >> stream xڍP #!apw{pww'\k.k}Zս5U3tGA b2J]Xyb ,ff6FffVx u+[)4NV {0Ĝ.2qc j `app23XyrY {3<yPXxxe:Y],v'@V@傚ŁݝΙd!HCprNn@3_)Inio Z?L\̀Nj2%&S #/GV26659{Z[̭l%IyFz_Dc[gЇ_$ET'?gS'+gFg+ۿrdG%@vv@{gr~ݓ?͵{273+ 3W& {+GW8"e@333'7zZ2u_J9z;i}́?n@+YXfV.=?@;Yyt?ƏOf3)IH'*EEAoN+3(['؛<Nf? B߾A P=z̦_,_&//#t߄ ]T-WWdku2. boa2Z9KZy͔\L-=.khV@e_W >p󿏔7e6vr2hx|_S `b|>('I/ѿ'Io`/b0IXLR#6No `R?|*XL#vχOчd,Ln ~TFm0r W|P,?Z~oLd/d8Hc@(G4# ݀qm}-H\Q?ܱ~w:MǝAzMW@|_v>֊3L Sh0x:u>#ädm;݋nKP y5„'t&t`M4 0 9h@R9r#+`<Hy4 VO.p!V1hD.P,B0Ң_y,ϣN!M=a+a}ZڬRgu#%C=JY.+X7u qQNOk9@V|yoi";L<;haZ6]WQمFOb./K̯);{?'hJY)ys-5E%I|_ Q"o?% ֐a>%.vz[8S/&ʍGIo=񖣺MwX3<3.lI\_eXqD+sGdӷ1 4 fTʹHfr+U.ρQ13Bف?/y[4>'e07o/6޲$.bQkeTX+9ZdNaZ} wsT%}!{^y11ܢ<o"(~vuie )X$GGz;Z.-ս$$HZ0,uԝv ܖARIT3K D+m>¤~47v|{o[0_e nt+!>MQ2*ś-ުEt6JQa:!,EN'ZԳt0qNQgXعovu؏;DUG?INҟ.5>(\sGUbĦWBbU5_Y-)Y%aay,Od֒*J2j<=z}G{mx&9p(r6vנFOF7wߘ[%'uwߟz0?XAVn .Ï$H{\<`.m$Ԕ12e~5 ߉ŧc7#YȐzbj#n75is/ Kg\j9x"w I# ږ]N7yIAǔq~Ip%փПXIBi]p{K:7| ӟj }y.!WjtR/KW|'$(]\(%K}@FBSثĤw~1G&2uvF[Gek`!9oo|-zQkN_.y&X2^uQ!~ rBeT*zH+s"|,j%xsl-\SrQOҦj514DƧKZ!E*n<^"ؗQ49'&ë`_NjP[ܭҘ'~= ׄP`hm+;(/SSQin*a(h!pbQ|3 $+kGHW:BBE$Qd%\ HqOB<铛ĮT:߬IVGlbT8p"d+_%BMi.PjPHcB܏7^v}qOh睅çMbxE*?UAȋH+#\熈L%xb[ʥ (K]Փ9D3<#kӻ{..| C3Zc!G*sW7 w,5ItqJ wѪD74>. >}yDQQ "_8piUIRɌsm0 KW4J7vM6셒gξo?VJK3nL2{ٚ Xs‚(RyȽ "!+q\`ͥUrB0=<0:.)EcGLp~@-P ƱZ49T)z~ <*q6&4TT9)H\ᵉ# >}RBڕ!~SsH1G#:)D|sD'} mcXR;E&?inԵLk&hQf{|RYBBƲ?4Qv= ֫XdF΄DAx5MSQ},Bt7BYr4Rq#jq;dܮ^ ,1lX^G:[q~^Jas?9'ѵ m!Mܑ>iqEMvze cUEK3Vx+&L!bʫWXr>cMXr>4/Z$)Ua-$bR/\WZs`'KCtS ꛊB8E~mx#M>HBxuisbkfv5*g2L$zTNQ]9}>[9V'`\h+v,u\l0|_R{(mO)*Kp409hDX zwOZdXTNvoRa"ob&I c_oԺkU񟬷#<jϘrP2uL+ɽN=5R iN{xHd(r&\Vk+U~֗@+)6w+N=]H6sQ`p{yFM㖘V( lgPj2Ċ6oGӌ~c1x (m>U ]X,v[nl7'+fYʹgJ-paoEr~c^)sIi x:vM],PWY.X #|n%b8$D,t%O$$V۴fZX? pr*% } b QVr|tVUD >#x@OҩFT|Zi^"֖ 2@ )&Ez9V´433X0=FAt"WCXsxRe}POa$F37{.- bu*uqg㵩(TlcaHe6A >$f{N\0&lJm3Լ[/XmttHK7kϫ_ Gܸ O5c|BuW}_L/ Κ:48`w#i)&~W? O/.<ҳGj(dO{ %oKGu-$,-6W(,fn|jbyjN =&E*x%(;M]\w5cYtr~? V7(]qHc mSa%:J~zX: ZT ʦi>7RB uoP;xyܕ V٢jK/HN꺭8)vv8Rz Όni JE'8^<'p@e ^ q\LϾ M@+խ qAhI7f р#W՝u"3:ks98E!Oԯ-c&Z~dM]~Z\j̐/q4ݧ]&Pn?:[eVCޔA XM^50-4 vlQʐZ#:Q]ٓPX$? LDahg!%"⭑ Ex'l7[i 1_$o RRE̾5utgPS-0R`Ng^9r&GP|k ՌC9=5pjCJJ?ګ,37 :!PzoϢޔH6SCuK$@}ۂ~u"&#+GoT$b۠:wU>Zфl;pe)UUZ!"=JE:K&+Rk^JM %4!wٲ QDzkVթ+މO}Ԑ4ɬPx}nl&JѤkΦ(&^2NČӃjHaaz&JvY8fKd⼽MR5 GKtyQ{+:GkJb#rJbJ1@Ҷce[Ly@I$*GB;ɗX#f_3nkM;$T"J̡`ZH?ZKB~Hx|Ӱy1/4 (^4]4LwOY6x NiUZ9!jn nDnU"뽙ٔ|$qV$K BybU> ? `J7У:~cqF]MP!$i[~mVms0{j-=aMB:ڏ7+ֺABTL].tǙ̗ra#W _0Um֯w?D'CggOw;H3iMuJ" =,4^DxAY .;{ 7Jn;>)l(S,V,8IA Eʾb݈p7sد@M)W b M:_ٸP/Sy򛎸@ۋ0ˎ= A9aDԟ>nf`Ѷ?ב0gD֤`<96?ii\O\Cx;B]j4}ol?;^ܭD(RX:T, ?t1h{QFgW]")/;h,Y2p~f]{ X 2Aqs#lW4a8",? u$l]x6n8 ?0,W1o̹eL6$Mޯ{L#.X m;s]+ZyIg&[ki !A쉐YI>hw :l"8x&WaF9mgl`Wyi>fʪReٵ'o7 4Q-&6lc0NbY)ӧj$ƻ~ 6L^*Oty$ԉ(TT&5PX7Ny 0'N΋b_. ;C2I%RvG;1:XA8xY] *, ;x3rdG1i 2Gst\!VAjBǛ<'~M\d`~'wQK eWZopǻ?|+gya+ ~ĦEWIt^s; wvL)J ϿGgмOp o$cp#"B5TFĒ4i|4~ǪB_Qgs+t}i4bKpu) |YR*?Ø!FFB[ۈ*rTq@onh}i년˜?7϶%kfQ@}Ɖyu&bEYےh/kAJD9ŰE2y5mcnyOxbъ/a3~f)RUq)Z̶sK+.'nC-׵~=> M*T,H`54xmVGtw āϜ=ϧ)aI?zjdĦ[$cfy{Lgozx}2뿃Qlߣmߖ~pfx^)0ho+PK?u~5qŤ CЦ̸;sO{ڇyB ve.o冼_hQ=T8(oVrTϖ1^[bT}Tg&~pJ`Aݬ oڑo ;eiҒ"3bIbr=)3!^@XcA¢hQ-4q UH7WXZ%.;pϑ5t̳e80&mGouг#],Dz E~ W_vB&07u~?ΪA*|i \&ţ40 ZǭA|II/ʅhMNafj\ h%tAfM' ˇݦTQgNȨP1w4{&_"AgӲFH߹̛tz2[; 3by`98'0 #KVAxGhp?W#vthdaB~+s kb+`"O>Pzܾߝ\V,~vѤ6κ:`h%B.$ߒqtU+RA`EI%]Fe rnF)ٍ2}C$n1uekض©5vٴԁ;\M?twnxlnw`~cT._Sys q1~.ah:lYp~k}U9f@>w&:QJ&궃2GMOYk넙a>Dqš=1+s*h0OPQľs؎'|_3fvb+EKf~i|QW G-q!HcG?F& С{yw4A#H [:sOvuף~LϞs"̌uRm $ [X5۽d"Cydz"ʓgu^zFi [ -7afԀ O|OY7\tpk{~dDATA57"9Ω b-~ w«( *9/_q{9vj+͡^DInt_c=CQzBl֏ awV|Q10s*0=sdqv(v\˾LPLM"SHաԚP_gC0}G^x]I'a~C+HLM fټa}yz;l|`i獗:+Ձt2^<ŠArXd,hxt˞fZsE]pM3L/"Kd/h8u<6 Aݎsˁas -Q)C|b-ī軼-$|~6L ]xuPe(K:yVVl)f\LUfPm3EJc $55ڼDZlvtIks|ws$b]ۏs>вQu3n-K?kg yQC,Z8WȄR-$jȪ8EOoiC+5ԉ@Ej:H#y))E竓 ew#Lqv]Db^ f4޸GĢR$ w8Dj.(25bmES!u+sN(A@s i0R̀T@qgQ- \Pc8i"'ߓDOԙ54ai3xʧ3aqO+:i"3^r]38g`8z{!/ N4zeL, " ¼D t$R*BlRTM-.bܼcD(ޫh2 _-W>]Ga_k4YU:~5%6)!lU`ʷ$#s|}iVlyڟppzҗ8;[ah"{i>( 'U]V&$I_#HXLLFbwݞz$I0@ݒ+ Atu=ŷm Г1%"aLW'S\D%﮹̹˂U-Zn)X1@{*a#PܤՔpcvoKǘP[I^xozB ~VlV.uf'*9J[l9>e6үRdd>ceX1mTGx9?^]FŽF1gG5s Ph֦m0,^to'2 !ЗQUrŸj`]ٕ cMY՘˛#bSAyyٜR'a7*ҕD9 2AG[_ɧ 0 EG/7# f.@i@H/oٚ!;֋&&LyQa:uu[<9Dź3tuHli3׿O|>MD-0W-'eO@dj'1OoSMv,94 n xÜ~˝#8!D_Q=?#Z|mJu Z)kh~Vv#t|WQuhJAE?恰UdI9&yE,JVsF _kWQ,xD-No9ìЏjT6kZ ߯cn2\%$9v_ir+%h jYJip׽~1\?I;14a~y @T V׉t;Ao;NEI(O#>FkC{͗\4$Uyj๮4}3'q%ßO'T0^yc"W|1 "Cl̏2`#mn7aH4BYHL˘g\ER9OzvQ(=Yf0~ADo1P-Y4Ɂ90=:c+[se=G3ڭ4 Af-Ħ&`ke9UV݊62)m@ДDBA$#k>bv#9^sCa6ThE; w endstream endobj 334 0 obj << /Length1 2195 /Length2 15009 /Length3 0 /Length 16319 /Filter /FlateDecode >> stream xڍP[ CpwиKpw 4. 5Cpp9sf&g}?kj %Ua;#3 #3/@T^D OAfl Bdag QG]&t~7ȸXX,,\Vff9Ā&yF- B=4.m@@[<dh P39{Oj~sgg{^&&777F =r9LQ(m@OP3p[jgt [w[#=;@UZhXoz`ado{_@cc;{PctvwmM2Z;ٽ]@wH+ ى/Lyo ,A}`ZڹzZؚEŞI$-ow9@L%PK=t]@>^T/gaX;@fAwp0 'IUNTUEߔsx1pX9X,,l<.fQZ?Ҷv}Jv P{AhK}rA?lyo:" k6m,=m>.[ o TY_3}mͬF ' w\E)9YuX}ޯ =ErTL%L-sj~NIwy@ZR 0%< 9^w~l ‘IIt)}/(&@dbb,Y4 G';e9*gSNIq+`e ne4i[vߙ5Хvz܁'T`-֘=W'mifCC6@u.Uj/G0U(ݚ4D5q!y=W8O#ż,f.pzPl|)[i6Rk~tSvl#߻"7 =esC0[cISX-_#89dWfg<_$i?O]2A*֘ x|ԐAdmcV0(kktwxǬj*8 6vQхL=LO۴&酩XkX+^)7xOj]q|Ⱦr DIRk('.+8=OPN0>MCN&{1&R6CUJweڬl}C<_5yœ:$ J. ~O-t#8ll#xVPg֭X¶q;Nދ4I c4Wgy]QJkݺ͊1ƹ p$<JU>ewPɍ0{mDܞt2gPxVhxR|}i ypR$s0 &fà>٤[?g9$ h5.83ƽ nsMfSJ/BS\@G\C* 5~ <{9T+IhtGoMzZy-)+3^igG x?60q%7˵<,jg X>~@o5Ic)e xcD!+]ix:O$+H?{8mDO>wdr[ &RBa6S2 HщU&7]wKm'|fWHr37zd lA)9OVz 'yeTa|1PGoڦʈ4 q 3waHT#zQS^oܘw߿ʿYv .RI|~["=-hʻy+W98͓ ,*wdƊ1'3[AOd OsVDDy)Q9#eJn <% o_H-Z ^ūO^HINiMq2HՅ'? ws\rtI#>}!x~EJr)‰4ofJܐ[%H)m̑9~c*ƿϰQG=>Yd(iQIq5H0v(XKN;Z%J =bhFWIWJ!ZT] ,=^M>􌜇R8 ofBfcΗy-S^!{;9ٰB??;:$[5"L[odV;NF aup} -JxehBuZ#L85xݾ#>iz tE!p6/5Fz,FAav&Fq@SќuSvIV ^ci @2MF#sX59/CNt~O? 2dK=,k.F`{1C-)Z̗Y\)d47qt1ظ价!L`+ N`*V!c60uk5=y%-a q9˷F] [SM"N_P:fg!EX V֢(-i&)l5$20Q<*0g|ʖ-CȋsDG2h݃Rhn-rٵ3R4fl4f+oh,~` 3WǴZMk?8 ;2V 99|>1!!hݖoG 2$\X#oA7(S*BL^'ʢ>L`|wH [_sn[L ;gSq0hz/ 1OZԩL> Dr k܍ؚā+]̐rS6'TP[ KH jIfZmwRVBI*6ZF ۗZghݵ{[6=L9t Pu"j{eU+@.uke";Qi;R^hp<+Ksk7e:|fx[B;6҈6*DU{BpJ ޲dQ#x EHqe"ךּ{ 3Pnٶ@\`brG*e4"S*SH{>ӽ35""Ǚ\T|TwU$_x#:$8eJ4ĝ m!V+0f1{dQ{Hafgs(9D=3 .?rX!+4^0 ewZbx Z$w3a?C*S CӸ1v($'JЯG\3Jguzyfm ]joΊk"s)`յ(Ǿp-*v\?mj/>ā#{JV,rǿz. <3pJ$|4׀yCK&,$djpcm\ maW _6 {m[{]Zmw-(+R"7%2PIڻ(>wn9Tʽ˳ۦ0TksfRP״*Us┲]RwN>?I#9(;TG z5m%`Xg#'r?F_X19U@I7# M&Ο_7Xϱ1Eq\".9'ͳ;HU7ԚqX=a1`g U:oqlx)f6AmpF +3zM_hLbN'?1 2}' lC#S"cbCv9}b[g@?'ɒ )">a׷mlRs.7Yd}Ro{ l;/khj ]Q];ԯr`p! OKKỸ=uV|b};(܌a5Cjj0U㻏1ITL٫ ÖX/Pj0jFkp:lUHwiPj$/'fRɟQǔ>9`gNHf; Ų% +qXGBW=ZZ27J''m=|Pj|xnᔒ^ܱ[9J~1;pdag:<яE zQtp/"u{hÀq,p "߾XOUa4y/dTq EUZbSK #vJ}L,Xd00 PKzlk-GCNNy|3k d, /s0bB*XyyI%4[{ۥ(nw D/k'mnWXs,!w!pV'8nZt8.co+'jxeppRsaB̀J&P0LEP(/WPk}/T\6p.6 T4c$c h:7">Al΋E5Ku\2o,e]!"N㽶=@ ^J_(hee$DIjZ;kFt^CZtp~r|7]ݦTgdD&r;~!u% rtV"!<+!z  2V>zjnkIgN'm2?j2R3zKsؽ%Tq61p:6RjK_mG%dž]CD~:HraF#Ɂ~o dGs He-Ʀr@fp\:̒ޖ?yXYW6&9NH|ЕiES.-ꗥ8}%]VK?@~3s5[ ]3-G7nUv|ܲɎTZ<79@wVI2L=0;ŻU=@!-i/CQ#0Ss[>o15WAFc=(24AIBs`h7\n}Yq\Ct5 uD=u^V"ª0B6gItx,NCt56 T/ e(ǠgWBV Šuؐtwqoj9e8lU`p9GD*0Ktsѩ0ϫm9]]{Wgg r%jN;bX$ DkB38y(3ϑBg~fބcLސwچݵ//{UYq,ݴdwQ\ڒ}Sz ɍoqu\Co R86{'꽾zbP"h|;{JVJu8fkĄ1jZcVxuUe:`3 ?ev´l[5,Vڑ f嬯 $ <-Op9176XTK.#pA6Z$M#J!.InOzP.U? e 2>*vORLuCf Pv]S"ⴻЂ\XFHox ʴA8Y1MuIf&[r>X4r5ʬBF$9ZhG@tRs$ d 圯M-[|m2h $ nj|IBLyw4&7NF Q%gݼ NK /\U@-K֘%9rjJޘ!҄%pၾ:n^xprv]}5o #Up(>Vy%eگe#s p)URx6: g~S<)̊{bIK.a ņ~h |_z< ·F;i%d.O V,j>Ӂ=|Z<+yBcp30)3\{K=}NQfTx(GŔ܋d\fkv-?,߸Ӻh}йoRw i!E9qoҭ'_G$¼߸Ti"-晉@4V4gK4>:c[ 6q*D-;M +ZH[ @9^2yʮ+Jzg {E dV[LE}!.7~ݙ.O,G3JmDvuQ2\q0nyazF]hRrE?!.Of'0c|vR&7_]sȏwYYѬ,M .Iz&^BrǨC ~ SO;YC eVJ(p?;ɟMn\R?wto g"@[3<N g"W xߺeeɐx&^=^yH}llz:?&*_r #&CE!LRJRR ֚fɌUl_?RBX %en I xoHMR{ោC( >=䤢lo, +o´L2Qߚ/䕀;}K~E%9KcX %*5w H? ,)}p9nSenJ8H"7Ur }7D^:G2ɀZQ-TQ5Vos] AڰKK/U.N 5L2G@u~9L9dei.yʚzz;yMWި.zH%b"'cz4 v/K׷':vNu3(%ӣ1T|MHGh/UҌd<6{ ;@dED2_svx!ri. ʂ%)"!;̑R0}%6ooEV0hXJJZzEkTƦ'?gEb mf6dxHSQp U"n5)MNI IWhWS܀ @ [#RJ{@Op M(}b͏/`3?t(3݂aU=1N[.eˮ٧fCCZ8â)=VەGn! 9 re kĽ;T?~`eԑDwzA39C]r3wZfKi0"X~ BhG5Wi%Wz4QiIt1z}޷{H޽WطHTe7V<6d<U7QeyRuT? 3Sx=?˰C' 5vMvhRC(m\ÅDnJN`4ѥ9o}3E$K$Hhrs:j[4:Īt lvQt)(B̭ܗIvGkGԥj2"rZ´pH>=bWq55e|nBR2'LƟ+21}ҷ!`Mi,2QgyF"94:CT?^.:RZ"^5M5+4blQBkggpq\Ql81o 'm8 rfӽ}#f*4iܰ~ف7ev;)y=[3R82זPa ǥj/. ,V&_!}5 (N-al(cxa'$Ah}q\Pq2tJ EG#M *[؊Zmq'߾h%t71MZNP(6] %\w=a0"<zWFk_Q6 )~H&=&T~ts'Y8i`̈́X$>\=rxusoL:@\8R&̄~8VdՇE '}(! YPiPqʉքb;ydt+,;@HL}B2hFJ ܆ |IG#o2i-4+>.heb8–V{ߙӌ@LVtӫ0aVS3|Zwᖡº4Ƅ K=Pga=[eN-jlse#I6޸ĝIf)6k"ȕemTT9I9̞ٖ2 ws޼]bK. *6 m=)A1~hNfQ2LtQɍQ.?Hg|wE2mzW5ѽ`"FLM^OnY3G>U.Ǚ:T+;jnĴKqֻ%mtI~FۏΘ7\ i>WyE5M,ݑ7m1|E؞1T0f ^|" r1SVD ^e47D~᫂I1 Bӷ%XVF*YДrDqݦ4mX<4#68X9<6WZUƲ)`Us`,۶iM7I:xEU$9{B2kH&e,sR/!I p16TƃNj[ :Q[\`RG&'wjH #=YfR~QS-̎źqSďةZ <2S +B%*2 ':'BJxҗ"tBN'u5vd`[!4$BJ Pɤy'g*6E"0Qx)f֝TWe۞(?~`/Y:za<%s?dd-)8Q`R- A07G{!y!i;)Wzy/sOg(>4wҖg\vrrY|m"vjG.Ct}oAvOpTP+1B>(U*]:!D Uw @[&=joAK^Pg+8b8))x~9ls$E\H <'_hU{ȓE5=lViy? HqPbiߥz&MaVԆ,o֥7GS XH`2B~B2D^I]IX8qyh;JEvо%U!kS6ҬU6kl$QŐ+Kȓi\U)t _TeF(SKe©~H=G'(6{DԡK~Ɍ r RjJFm  R`j? ːfM.k$Fr`\Κ PCgO dj`UG%G [P0 G`3|5 jUy$(1-!yƬ5J˔+%>fpI)rk(o0ƫܳ**xdTEЭHI,`vIA1ۡ`O`΋s)n45=Z̊͟-bNw*ȈI\ &&Sk%UUIF[f/:f*{>hϵ3P|%y0̩Xsׯm&kK5Gkɺ`du}!P8LMf~W,Gjyy+hJOb;G^2J9M/3c66KbysF2dt/H6p+*W(xu áAf[ TiVpAG[=Lq-RGF,bELŹA\;&C#Tf; o`HF/9&)vMR`4Yް¨䞑?7r>Mӿ;=ֳ. 8HؑS^\!dp"gI08%q<"鍀}?V[yG\a=,݅4u*CRY BuuRd0),%G[?3f4K=)ldB~\{ʑ.TsyT:J"*OV4,t-Q/]wn#)*k~')Bjf>[7 آ杨97_H~p3L^%޽\!^M -lBըz_?,KduWC[o:ٌ`ҳzl%2[ն=m t%fN()/ 1n!(94a_aBSͪ>N endstream endobj 336 0 obj << /Length1 1623 /Length2 7290 /Length3 0 /Length 8337 /Filter /FlateDecode >> stream xڍtTj5)tP1twww C0twJH JtHK߿Ykfg^GK (aH. 7@^S ef6"] q (&<B@;&Pt@!1//W/"!PyAMne"Ȼ<ڱœh׻v > A+#& r#8P#@AxA_-@?[e8B=Ho3@ 0;Oej ?8'ܟ޿AaAvvpW7 sC] m% nA.;#.P:?; u#ϯ0wcVᮮW} Pn<^3 dt1A=! rL H (9J` zwڀB!w? / vH- ;bP9_SsyLu58l?'|A,Ϊ0{8@zW^ a;NJ䵻'_QWwEJ..q?B]|dIye7jBPOFUu9gP%E9?솿v =^s{A?HW/-^|9Adv,m~jt|"H6箖 #M&h>P};oR^=걅?W%@=EAV堯a}őY }9b= ,Vq xE#7^XIŠ *i`:ɣr}W.\lKP2ux*jCXoDã]ՁI̖b%Tۤ<eꥐݵ j"3^JDž^3dU~|Um`"ش}ӻf#lrOHHo>d wsYb',a|m2OSJb»``zY]F*n.Bסu}l6/eƱ;X'dF+*6 j>7%;T0#Ήg;'U'"5:يk!OֲX7/CupغC%1q;Yd-MD2e2!0ify|EN-KI=X/z5‹k%+ myk~:;$ H~)6-b9h's.ucV*藒]dYS kz6S Xi釥:'A-802a2Q9ts14Ql:Cd|]2:7o)BT/b0hsg#`?z% V_۶Ҏ>\7#bTݫfApS|tj`]¤F/.Q >\Im`Fga/l}\" EUV>u6/5[ϟCOUw}+,|TvavMy52s0so&+2ċ$W_p<ؘy9jLN;'|Ew^ *Hn},|Vb+zl8~v ݥdz7U|_7XBm󝋬éW7ko((ߖ=^fy+C '_o'U-tɢۢ :񩝦WJ]>cǎW ',cظ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?.QRn endstream endobj 338 0 obj << /Length1 1980 /Length2 13709 /Length3 0 /Length 14944 /Filter /FlateDecode >> stream xڍP\ #]K$`{#{Ak;`]9ܛsz{s1WoJ2e5$ SPaa03123"RR[mL#G4utB~ ; `ef!ȑ t4(0dAvNb {wGKs k<i,<<\DlM-v 5124Oj~ 0؞Օhr4Z-N.&-ƈH Pt[2MKcS;Wg;SGkv<@oc  pxdi3dks3Yژ$n`z! tZ^ *Q_;?'cGK{~y>qKGS׹3sv W; 3K;m83iY:8ʈc*B#378ظ9S7c MRiamift1M=_04L-D_ ~,ߟ>2dg#fR*EEAnO6V+3q/_;3w?5C6A5Pa.3g濣2V$lco=W:_@ vTU05tZ0uD_)IDll7mk^8K;Se+Ջ^qz*ʁ:u ;cc8,kjbLv goAsrD~F\&?$_`L2'ITW??xL:E<^W hco/k#SϫozˁOJ?&ñ|_$BגlF&Rpaqy-kN[5jo//jmYٿnOjU.p ˫O);Yk lNrym5%zY_u| ;;:R啾Y#.́nkD]vaNRnY Sqjre },VY_ٯH%Ib^!g=o͡5Cj%;C(w!QyJ]"%ԦUS!Cģy n1q>{6:`+B74Y1bk5зe>pYO;` oDp՚y.iFRX‡&k4Iuzd ]\ f,Gwآ)9a&KY!M7N=ֲ!Ar3r2+(#]̂Z$alKdx Pd._Sh~NhS,Z l`cCqL@ej9Wsw!JPn^V{qjmƵWۆ-лң͖胤R,M`B ykii+qS~DԶ__jY>TvudȖ ;,"|i]uN?R1[%iCpߚ#bX5Qzc?3Ls6{vP^IZM<#4QjQkNl9Fqi-@ vQح,凁{EiH#:!{PCFy(tټtGR=un4oa>LtH8m8Li2͛eFF?>|B^{lrch9>:p՘(5~AÀK}˘:UMFS+Ǩi fUJK[ =T-\k/]2?]Nhl䢧zHl毜JPC]]Cڙ<[CE7 kBX_s~|Mo" 2#u?jF .j;w{waN&sQSNtpj߶ЊNم)8ɔSQ]*f Zaε_5i.*^t*lri}4љ_lGd#o!6}x B|W)gkx)Q4)P@K}޽o "UcXWɡ/Ԥ'틱 ~ 4'»Pp_Ja0%pEx1R>mBPW|6zچ0oƲB"ܚw/:i1Мr58c_#F9|CϭE>< ƭjoJD qslۖdHnMFa-jDݷ*h˴FVĿfeK\_~M74 Q)C.7_A(fo7*w+cO%:11.Hh /"WJ[eUƔVIvMl5S\U5 k:ʌص>0;XJXՑiwt4j$\oBlեM=j <:YyRw =ZW f5Xx'e %=(:4~0AA̛q9##ֹz~f_2J~ԩuM4ZU'ש@7 fi}m'#Fh I֡l/4 uL u:75ލk3grBy< ye؆!\E]5Y˓YEDT;;glVZ{^YdMakC#a|&*I2I:ߨت:a~ċ1CO*5`ϟq }=,%Rb G_s%2C }y|Ѕ_n+&/>)ԯXD< a6*Ni.nq.cr9l|4 w-2`qBc)tS^@G{Nc Eh<SXOfQ+<a3'?beWZkNwaS"Έ슴>: E^yXƤCvd\IZuf|1"Txʼn욨5/>1'z̠v/.ćhg"J{NBC;V~] :˒U˪ٲ@FaӞNkUwnXZd$ Q|cuҴo 9?`ɫ3ٸ&9*3u1΢| (Q3‡g{ : DYt-jLxMu2݆͚I,׏gWokI៿*zP-~XWX"pM ;޺I0ã)}?ޒV_n@.;%|/kgl]{-qbtN/VpKu(>0Ʊ]wUSKF LUu٬[ҹ-k kؼo"9 z h1J6+D%ϟ2[GBY;:!6okzZ"4L 'K ՓTHGh ho4$& vA_Ս6W:9:Y:ˏz ׿+c&&)?3J W&0;fSK V-*U g8kPp2t2ɊXxuj6wjcJڒ'Slsj+ehy $.Hk^=UedB ]Kgx3DPJt.co !4kUP{M:clg›K2S0K&X#'5PXV`Q!%FXÁ&3{ c5CBVİE Fmqirn>d//NojNb{Eŷ9CH{b\RQ-)w yDx((i8cY8] V Mi3H=3Kl!@ l7FYքi9 ǎ4W'T4/Ptu[Xvbu=~bQ(xyu =+'X1d}pdݭ[BB`0s^#@=Xït*r7jg㌝[4Tסc^HB G;ڴgr4=V'l=]ڣz#gi⩵#qH|`UvbFɒT|ە_u"JUNj)ė߱R0؇!ɝԄm] 8K\'$S[ 5ݯ-ܱ:a5=|1UT 3`ylwd ^߫Xq4L:ΰqf[LU4%̔K`'>*gI9CҏL9G~aB* "$q+GNUOwK@q>mΞpSG#!0Pz#T=0wB&C(.6SSˊ eu \h&'CNS=`#"+^u(3kG)>W@j?Xv{6j~ t$E 9|4A7(BB^78,VV yضdN8WSdm\9 ?SI|waM}'s%Dr)ۛ>aECHo8D 8i\ Fw< DS:Ş{8D7;WMS'y!' L,kz2o.1#q+3 J%__nt.5G{:PQ-p$\l:SKMT$d|d-sg%5tD0BR6T[]ak?L"ʏ"~x')%`\] w}4z7r ]kJ!V[BAB?waFB}tOX脳*2 3 $y`UZ^vFLuwlDv݅lNb J1]G' ܐ/FphO nU/X\Z!뗬g9MjLvUI6ܐ.2\>yi90Ng:՜[OK2/|v`EbT;kc]+V$Rhv+H@0j.Cq}+x @ȗ&r eU2 S>ťAHj=h"`#)ŋXM7>002^ f +>t gFԮu4RssĐLt$pm$oo}h*!ʣ|1ڡGO3c34|uludJ%%8Of(]q|+\.7FvWQ ֢2'.Sb~B${{p]T X]K0hꔝQɍ-'Yԭv3~NŰ91s=ңH+tdؒwVM\}[ןN!8xtRc[e &!Prp(ljܹ8klϨQN>,"R8Q}hRK]9F oxYPS0ʖwH!5Ǔ ^ug1+\-')w Ts iJr|h;iap6TQοDcxV2ظOwρX_ [aCPhTUReyv|+lq cͤ%\!GyDf/]?qi#Kmi9ἥQ|sO_9Nl}4óZZ˕]mAW*ا O&[DI JWp6@>^7dUˍJ qӰUTJ0 mܯy&aASFEPt޳~>ڛ?!I]|U.$E5gw= ֒]v< KRn Ii>K8Gݻ`;-RyjZÉ#e("o>lN:mn}j9*x$9p{NB_u2Z: EC`TA[:nY 7$ ~~aꭝ*J\unBǐ9\-!d<(=[Q\};1@Otz.c)^,E>.ǕO}xQp-RV ?N#u>X{ƯC.}fQ) Z~u6Wtth9Mڳt/Y<>_ _"j/rnhG)-9`WxxC3?@ѓ@T)wwͧ c:+adTE(dQ4퇾n݋d% ?d/5:I4|&=J'Hiz T7׎nl,cl# Wݒ"÷k8*AV wߎvHSUZ>$H3I ܝ1r0% Q<*DVi("bUvb: +U÷$z1{^!& ɋ* +"|.'s@:r2'Fɐ%DDyuXԘ}C.U|6%cmXGqbU;$W-?<U+Z=VXwޖOdB _ "Js"k:;t۩LZȮD1s{F%֍$8͒+yAG_])^ Dز#kp"D/(ˮ/'w0W=L0iUo,4͘Zӗ,U" #gǧ꧜";{BQ?q/lK^n!Iav0 -rD"փjEMt~h3,:?r$Z ʇ A$2d רuuJ` ݸBȓ J ~Ui*fU{,"&3KBft@•+Rv^~CPs$ql=‚$ :Μ],(*F9RfvDpaԵӧ)0ʂU3 \M:ئLds2$z2Q# WHZŒɚ$v/ɔf,joF?1m DG@ ?/gfAٖR(|% yow,5i^,ڷH\xw-:_3Rp{LsD%\oGc7#70i#E2Tyk!Dl|B_j%O|r\MqvtW]ՑQUᦖw9;B]6F3QKUc=];` K̻_":{g2οC ^pKCfz˺2*-ϕ^XH >&qGWfi"ńh #fꋋ.pգ<v`攄dOA9*Hgg 0FyqQoZk}[(86@;'Hb9\KjRiM_ i+/Nx58ipz%KETHRL>FA-y.g6Ay^'u\דV=N9Ik#"ĵn~XEklȩX3w1 cP>1~Xb<*/)W?ȨYU a4Yf`}zu:E\5At*٤;'5qeM9IMo`~ZL}v[b^rػA;AhmmmU-4Ho.N%ݓ.QG/.cJ򵨢ۭʟV">jķf(0@y{kUE\Ұ\sw,pWyOĭd'cW!t[|ֺy;0DJnPxlMO)JS -%c yEiA){dr5r`,zDDZ4cf슭` o6TgclIPVFq^9h7yskxglBeYY>=zDJ0 ņ 12ymRNamE[O0Bj-$5*WcG2MaHS]'Je"-2e7?.53aؼȱC}b-u`)6ۓ@<63()@ 4m׬ b XTurT*%T{?] T?)5.Rgg׿3[j='.T{0{xn"nx{$#ǘcEBn)iE]0J|w>J煡-e U*nHr!C=ITo gдA~=yk߫{!Y7kD4?"Rso,e8KG!#~U־tCp8^[eD$qeK0IqLd^5d8BѠOG# `̇L&LoܭlZjhE÷H'&b}!1*DTDqK:W/{hЌds@z5V!ഁ:MxKa tL#+/CA63*21UlUlp^j9M^SqW[S,+[Cy XGdj}t m//:}xBNzUyVEu%y?9'Og1J@j 90"8䌐3VhѢ-*) %y̱<EG*F LSmB ~Z%啹d @oD8|eķqK"qnP37lmcrl1ߔdQhϬ \7:rwtDj*iHŮ~?rq NxRE 9qo/DGxm{M5!R[e_Os~>pU`%LjsTj?̗|mM!KW14QB<CVD1DQ8.O1e?t~ 5[_TVD(5=iP!?!+/hr>&jd4OOMWA]txHy2WXʺn4zh{סҟTgԗ6:B,ݺFps0Pq=r\Z4KmAtIrP\~e$3:5!!S%~jRk_)NeLGr/JV+3%frMr~ !2RvʉR*,FL12S\;5 h˙Xy ťI#0Y]HSTŽ jbGJrd1їKՌ[uN_"KDDD#DB/잿!ei?1Ey¾1b&գ&Q4[=^' g.I$S_r?0.N&X8;$FY_^B&kw'pxy]O Uym <"đA!$Y zFڽS\up|JzGsh?\J*re}fCď\CƠꄒioO[昈y@īӺwRFTy4%#>2ѦIdAyХ1fǬgJ*28>Z^8,,PϬ鴚 "P9߮ L&i أz,׌fM+Aa)Lg󭸅#ywA4?'~)XU"Om8j:eu|-쑆V@63h!kOpv7):D@*R7֩6 ?j<˜(\2ϾI©UNm)u-ϫr' $;p~|Okbg>P?E!y k .,K,3%ѵ6@ r\SJ"6,ʗu٦\ +^nqY fϗ/gQ.E'9옺bODNU>4B28{/ fs g'q PtitE$ RX6Q/uދC0x7̝/1$:񏺕+Wש\~_$߰p662O뇢1נLja 4kq(PCn/M<}qm2Gwx S9k쮗Cϕ|=MQf8I=}T)QkF\sAZ,6_ (svN`GCiVPbcK擦U 0exk/|)?4Rm&~LwYhWˁ2Li% j>g0+]_04 NNiݎrjY:flS۲kߚ(n8KWVnP*UKLW#<si 1L`:X@W㣈 =a)A"$SM "*Zt[AEk-16=P˖q)/f@:*gzkq/>5xQTg3 t4 J9>r 9'Xh ;?_b]4ˏmg}A[F'QwD)ҕʥ#?vC__Fc)­Г.ی,/n~=ovMv+u.*z mmjPلI~lQdhD?4$Bx yOO3:H*fאa{3qXKG/,õ " 20)g[2('ƺt/BT@[!ʅZr?#=%ló)CR-CuV݁IEOݺ⑧d+m/"^e`.g]8# qweE<;>"ޓJ>:F1=yi2 ހ.{v)goQ$13$&RjE ˴m>( 1"ʗ"6ěYv ~Q>Lq(*n'-X`@8RᗉkUrERg\Bj}(+rCT?֫+HaW_WFyB @Ozz*,r=FڎhPxq@1 o6qY਋: v{,JL˱<{al%X>oLlUޘ|QS) ^d\?p&3_xɚי zɳE<0ObS:eJ}b%P==q]JԞͿGc|REjt$t44QT%gU[M-K\b+ykT'U j>˞[{MY_oTOanm^Oò0o4(at CWh `ŋ0DmjC(kCY@P$O 6MgAIl̳-hS9sex56ˠDϏ3!mhciq0&ѹdXhJJ&jZdY(gY!+ZXq&q>6,5kZ>Csci.X|xoUU2G CxA+ig\x DR4wHS6@Yxrnѻ j ,u%\B9 NWlqv|X^9#ԘұDϝ!S ޱ;0I7pFt hX}jJSNA,sxp&M5y[ FW76vhePqaܸrc< K2!re#c2Iu*9dEJ, z*3 1X4o,g4pI։iѓLRxgWtN 0+=J\ivDW5DZ]H9]$k7^`9q9kc-lP滶.wv\6ud/-AA|>\ 5%w⒉Ҭ[Ժ4I@T~]Ka4=1 j;d[Ɂܻh˜EMݡ{D=U 7N 1:yXl%1|!P/}# -5aw kҶ~֒."Lbl~V{U}Gd &O=SC~feog2:k<˄:z+qe  endstream endobj 340 0 obj << /Length1 1400 /Length2 6325 /Length3 0 /Length 7278 /Filter /FlateDecode >> stream xڍt4o߷՚ޢ(j%fڢh$Kk{4F(5k6-EijϢt=}O;>끁2 e aP)E@1 ^^CWMk G"PH堊C0xA!Zn8$% b@̿QhYPH+* dd~h@0vp'P#E1^H/o8ˊzxx@\EPh[!cЇpW]Og"C;Ax# G#ܐ08` Gq ;Ht%B CP3@lp}# a!(|<pX~W|sWWEOY SE99W_!p(~^6Dy } 6$W07gQ#$ HoK.'NWzC/goo5_g3aQB (@ $p?2~h'^0?+PSO<>;$ ?3oj"mPO1bK?r $;_Y_ npOv5!pso&'2faP Fxa# rEz[Q@:W<. xa~ u#(/މIJ h4ċz$G0odDE( >`BSZ3(+D~F| sC)&PP ʠʬ‹CRMń^>&tYdfLÁ:A*.Y?|8rZL\~9b1A]Gk!["x~-"̶ˀ _edM"VpnE l2 z^E}&ɺi7ɷPy_띹s]]MMx&Yvz*N.>Ej^B7}F]<:us^2,D\=vr/l|``g-_1M]Hv?]iS~ep2I|6HyTJz,kdgq㬧GOb7'w-d9 :b%FW{ITл gSyӴ?^oV,E;lG}i;-|fx*J)Ed,FRgRyT}c*Z2"TGp_UszIUI_K{,oR(}Jņ}X8>oj5[U|^$=<[/Q$4 ǦXz mͧzE HQOP'}a=p}ÆYx7Y:q'_6Ră'[~dzh2͡j*K&zJbY5X ww=ڵޯ9 i.&r)2>'4X8] 2jz.)ۧVX1!B'j nq.)--ؔI9CJYb|L-Sفؖڝ餸WC>;IB ӊz0vn8w^.&6b~UD΃FxG/՚xr/c@ƸAMީ#W)݄%t!!}ʙL䚘KbCCnNpz zu7nDXҥp^'l-#JawC;{%yNkgDJ'i7H\Č+GAyL%"Hn7tz-{I s=Y`meGRBâwsҸ44krb,N@;tw( P١3\9YB+>0c!-A4Y.ʴ-ݬ겫eת>Q#}YEgak^;t zY1շ 2Σ>n-:ga\-Z)BɄv~)(Y,TiR8[Muzjqڲm[ZUB#.gX+pQ38$w\#֋"B\IVYvDz5U*褼g/u.<(_]dʘ+Ȉsf|y7[ t6h"S=>Ydfay; 3Q,؁Dm[Ve/ϲƖ%-Pd)Nv|_ߧD?;{p™%yŤz;|2FsѮ{P.u 9/a)XþRlEDDxg'8io} )ƹ{`bѸ]X%u@Pvt\6hsrWdR#2jlVԡ:^ XX{ >H%{|z|})U8Wm)  l ?,Q9YVz1.OJ[[SfBӸc[ynP^-H78fO$9XF =?Ņܴn²bXy󎌜.SYkx/ 0aɗB+%/gE ZfjB~o="6ǐwkĿF8YإF)'8gG3 9PiERɚEؕz 3G'U՜17QI<"bڹ!Ӣ%Dաdb :`_;`tVE5'wJmEHJ\O/\+9YӀQ󲩟?_%xHZV@_"^>#6eN֌˧4(^Y`S5ƌXgiЂ=F,ÕX4w.qIO8Y~QE&;Qk:#NH(.kjSz)-KmnvҐϒcUVX/oU|m?e\YzE dJ[:[%ӧD ==+t:yjo|YԼU$Km"2ÿU.GZ2t _b8XPc˼W(Q{"}xHŲG*1mjXUR/ 0f[HZåC&go݈^yvbh#:(](_A"r/E{GV=a.eg<Oՙª;l3jr+#M)-Y^D7v[جe#9kfo ]~Eٴ=5UF_p g^T}mJL}*'Ƅ21YKdHu?aZr DL~C$nd0AiԶqj 1mN>Xsʂm+tǾ'3p:#>gBՊzN ׮EVdfQ .BKSd)'ngPJnv'nyIRRڟ~ss|$vE?5/~mvd`O=i Ȋ;|Eĭ#>+ߘ\IcZO3Q{gWdhcQSb z#+2ȓ/rMl雧f<=6,}3uo^~wNS+]6qgЅ> a&:PLGD_)4^ k?۾2s6%C<*&wFP*{a:tTԗBvKR&ȏ$?\nWԨ)!L9?Ӧ݈] XHu42cjqos+^<;Xp^Whl^gx+8IoV94Iqtu=v` M ƶǑURBb.Uuc'*ȟtsb;{}מЖ)`QǮ'FDo\?s[?L3S'ش/;,Gn]jm'&rK6c.BS7A'53-ݧ/$HvΟIdꗾom2`N -XHwTQ|l3ށQiThLm~1azR%k}7?}iW@#֠Dw{?s _pQuF#}-GFCS',}w'J",rYdt(gS_&VO )55S Vʘ#1 dDEsp]|/aM7%|sؿiwlvX .nrCf1?od-цLrWjV5\/2rYkwMbZE S*i]j}D!a.UMF֥vnVT$EHL=cj7}˷wϒE۫O*_6LEmd wgӔuH,u͌9O0(Dijo^"ݟZ>Y*;pLgPHQqŸ́/|~IڼM'?,khq>[6~pA}ZYW zyrֳ~Zy2?%Q_O(JFJsIwpl/qQ̠{6%<9w5*ʾd j^LpfcNchY؈l=Hr̤ϧo߽֯qZP9 XD-^ʅ2dֹ5ezBs X]'T- N0[6jOO5&}ެDjlnDTr::+ٜ !Wc5st9 ’%Fe]:H0&d?ANI=~"@Hl(Px#;@ØLyvPkS.U+gU /AՎxoSPΧ65̝Wyy0x/%1#E8p{b f髭dV ~EEw- hj J/>cqQEs)cs't;R:osˉ~wG]zO?N}{(eL#13?o)olB@|G c)q22-7gMׄ=9䴐Ve1Ldۤ\8TmF@WhyJ~w!`RO6PLB,Lb(^b)҉}I% 7+>auF'e0#ލ'Eh`nӘ\,"~Xl~gBbi!)Vn>p+3.Ѿ:%94ȴKЫ (N-n:{cYƉ# }t7hîoc|kR!9}RzOwdm;nMo; ܋BY/(2Vd7vXx8a:b-{\|?=vhӇ! {U3q2gIں܇ƨl 0LX}"mqjM(Ƶ~cgy!ݹ C݉هBss%AE ?{{N68@ 0K2\L^L#=)T޽$ i |Zd{hp[:ee-1DhZZɍMH˄(Jq$((tǤC~r4,jtk,*J'ѡ .gnMVnH kya=*,7D : \3ub)$F|wX9ˍ7Og& endstream endobj 342 0 obj << /Length1 1729 /Length2 10962 /Length3 0 /Length 12067 /Filter /FlateDecode >> stream xڍP.Lqw];Ipww+VܽťVܝBG93Mf-_{}kτ:9$ 8JJr| @;ۂhP gwsyy@/C@lPbC! 'T #9Ϳz3;??/_1;#P2q=g43C g A/dl/jb uf`j '+aXQiV`P g7GY` 6A=\ Gsr"@Xof?w`gewCr613ٛ@<KPVduvwf@:AM\M&UnS<7O{Nf`{g'V'~ye)qvB]$d|lOux,sMسiB. 9LEY@>^N>Nr7b^/{= d 8;|T7Beg͜ K0?џ }3ߟ ezI+J2uPw `ggx> 2X@|O*  }-@f_\⿣XIKQ؁m=1xf(AڠV dv_&A, [v߂ͬr߻f Bg/ t ff8=o95O] j{8y&&ϣF/ 5Em+x`uD=fno߈[F<6#>M߈l&VH}MA~;lnYS[;>Wf˰n |./_2sqt|_[<Md0 5 Zče{T$hsDErvi#veq_.^{p]޵|m?tb5),V3Lv8@c/[(s^u,on/KyC(uTf*kn96$ٰ ڌ6HUNTjAMt^X! w >uƑ BZǼ)q=H2WWʣP#DO|BhpOcak~"+ 'wW_j4eeЊ繰I-[VL*os?!1(Ofz,ڹY\F73 gT!M+5;scr7R8,91לphRRd-(WaDRstb%a|^Uʑ H??F6ۜtC&0#hrܯԌyGlU\HnS8q-E+ lugK^Zj3[{qN<'稜-^Ս)B 2-B+YZ0\{tœ ,?Ù/_Itvof Wέ؏䯶Fʋzs\E H[eS e KPG4OF?-ށʰf%v7f}S˓v%L"Ca}#eW)iU M3cW2 ~#=0]$(e I !wo2LEa`~l^,[G}m`8 drQc'-t KI]=a #CM˭(1bԗuc>8({TM.f@&A.aN5&+/8k>=lpq(5_mh{[nSXLjyOpV<RamCPK`g1XO~(v-&)M-1`.jzh_ҹzO43CFq]Un4DU6'5@7I;7|seɹ'sAYN*2{ bs(^D̫mCLK& RVnwc&i'^_2pYW`eC+;I"5;{wJj/M_$Ov-˫Mm<]0_[FC2; kdJPkQU> V ֆfe|dloN,z9yv!=rv+0l&9/-N,>Izۖ+t[_[~ (1: ̬&HߡNӐe|')`u=|}NE$ƠTjTi?BJ}E /rz7bM`{d<G߫iCJ@)7Jww4l"MQfo&F5}iq nQ=m_4GLiZox8ɘD/08iXNꜳy(plU8ko}C\fr*T/agP Kr\/>aIc?|V'֌ HOsNyWJ;7-%]bNHeup >GSAGG$}No 2:7߶jsX}:ټ gm ?5LPSJMNi}%]:CD3<'[dҽ }gڼTЛ.MP.NJ 5|m<ݷNlқ6q9 @joh:͌܋B5QVRh@`G@3 ÝD-~-Za5y!"ʹCw+.Aډ:VG4fNrjÄMt:y]xר- Qqd'3gvHSeÐkaFʁ&~~D)7ki!_CD)LN]_X=NFQv}|0zkߏ@׼ٻ_(Rư;t Z(H)Mo; Q|mW=c?6g֣ iVlz01|V݆Y۽ck-7xabj0eAeVH,GRkF+^ $кV=!>`ۖi.H˭tnȱ]P~^m, Y$H:+&Bp8f&מqr;~&%PX lI~Bkؔ+~&33yCeP0bl)uB!pE[;)TnԬ߸OWl{$ۣs[gktɵnq7"=BQ7Eh fgyl%B.t-vw/-auIY\(EY *-[;-"V9p8 ~0r=.EmO1@=z;LS!bj=2+`!}KaV4R2,z\vM{akPHSA7voS]D|%l@p4!o$:1ttUhbp..pR-[pʊy-Gճې VIik)YXKrB7O淶B:s(tG#nk[xX\aR5#L0p)#)ڏҵaO#TQ#_$+wgrH< :j 4#/=:TzK#gwj0"ñ>hȃ̎2;S;Ko<. fIdUBy#;We5]B64Nrbr~5,ɲxƕ[> n[͒#@'ä:u :8v .(z N"m%?%M~r-Sp^M>RyvF2(("#!O+*>%3Ak/75xw6dJb0F2/ ]`3j}|C?ėӶDdFRߩH4AWpF7H0^4j7:cƌDrQJ:IRY/(R;_['.2OKoSz\[1eR\9*کLuPs-g_2W&ʙa^5xwJ#p?A8_0>0΋;)'mhoնBe#,x/rkTzxޏ]CC A)4&/Z;Y=ߙmoqlژ|} e4 [f#s2+~= 5k{7瘴\:zi-Ѯi,%d -0 MoJ FT? `2z@}dO\֐pv瞯*T<8o5^P,g4߅/tE'bB"'Nd;&7[-:ggac·)kNbJsA~LIS:GLX|̌H(z<_͟wJwΠ(9߽'KNXt2#3Ey%ʦ6$}+%\da3Їډ)rdvT^Ƴ$Ӝ)8_x(XY$p[a?"yLWns͕%z6M ѿ>H7POy9zx7jQօŃru呔09̟sg2odqo)<,]UyrB7}tj/{'oF_<ϙ:SCqU?h:F|)^{-1c%S8֮ۿ:bp00ǣgH$.8AlQ;IVwu F,!7fp=fW/.tb@ ]W_~95R?pɊCs:RoW@o  .h<nDa ,Ez6ԹjFgctO UV9{8Dʆ}'u%`|ݧcP20뱦:ȽwXV+B]~>5xӾ2G#3q3+!/YK&FeFK =j6:dP72PrK- ,xVS)*VP_ *l2ST\%QGx{rd>g]i,^tkurT˔VK$!sg`wx MF4Jˉ/`>"ROtL~w8ޠNjs [%r]m^kL#f=9 K'lŦCNݠE- R+ 9@wm2g9Ăm'ƤM捸a{)6U;n.I)vWJqzT~qQű_y {a+j lc6H"Ͳ)LMLE/,^%h  Z~ 8THuAJv`;= 3M'[^I]> Tg=7`2/7&8݇ 3U\8VF~[t45b׽ez 5 ͪj/JG)J Sq޲|d( { rLob-uldywɝIug',F㔟N ㍃  sRje-pKVEG6̦OJ/FTƎՃV{`D[6yfcJ/c3#tqCt8D+sF~PnML kdWV`!ЗُIųS'C?&SzОr,MEhEzlu)ax$WXw7T0|ikbNaT{P>miֲrI^+1_$hIZV`Q>#J"^tJ#^o.v"& 1r<䄖Mi2a.6UKf=Ʋ}kp CaאN88*+ nZhkN%&*\r؞(W},A/3`u);bV]nT Cp7Wk<)]yũ[d&yc;pwqZ ltn+0Bo>4xaɫ;O`CTbRr4zl\ ίmgHq|ǭ~!+,qa^2VۭRT,Y\!#0cWz3emz9Y٪[5}gͣ {rXyx963չ/2+Ze$!Rqjhԩ7j:$̴C;b5cEWtsޮ$)21 |/{b2q6+XH);+'.PazePUs#;Z _7BYxS;kbv)w=VA߁a-چ*,-#5ٴ{h<~t5+^(x~VDDŽ#fniFcVY|[D~Đ11 ~8>,t =hJF NIBX:\ZqWo[KRjx"XϒiǤ1=jz3b-=o [~`3{2[rE*fhVZlb at\! nOtTݻ㭧_0Neɢ_bDj%Fqn^8}j˼bԝ M^2Pd,o-! 󕅰'AvӗC_ܫs.$b2Η5ڪ^G-c6XnyH9 ^%v.=9w( @/ BZQ~\ W UI$$_]ARcի-]Oѿ&~K@;Lt-3z]5\Ҏ! 봑k"2vfݭ|¸' O@!~[dx;#9W}tYCYZBsh1>pL\@5ɛo[-erġ%Mz5 mI}8[%s?!xre`@?SY;$rC6hآ8j}@m}$ST)Di7cxh,l:=ݥ<F;zYF6Sڦ'}c2,^^/͕zNxTo#fHU+rs)av.b"6G^Y+~Cތ3Ӿc\NnH:η›P#~/+yMXBFgra؎{e䎾iDwpqydz!`3<<$ɖ94vC,OB1:n&ba%u\&ݾ.M6d2[V>ڤ!:'3aarf?eW4 ѥ`J*93fY<۽,,cA)b@OWȨ5fMNgW%qQYWCeŽ%]GS DH&$]ўZ)KnPZ3js^TzT2 :0Eʗ4¸W})#Ԯ(bpO.z) 腸ۺ2V6 ~f8xW~Mc +lIWSoSqp@r)1)įywض?t s#%DxeX)/s ֠h#QbunY/ V"`^^$efc ) gKV%w٬Y?PUX.%AtRYώU<.$L92R%a\ޤhX.Vd⧕׍N \ESNjm$/}ujRvMqVu]Eu{]ODTxMBwup[pͼr. }_-\k0n~Z=߅4\~ؕ+5 TϤOm5H?S Wަ Iz%'!w1/7D*)3'*#<ر4\W9^ƎNFxŞ8S5<U1;DtechxUl{[P!ՌWMrܾt"QĈݣeH6 q%azʵ/Fhۥ3)+5oƩͬ]U#맚]=\޲t}Y,)S8bI5L_chu0nȝ18f8HLf,'ZX|8zFWE"hnN~QB8k^a=čxc725W iI\4$T5E\9iÒ 89mb*.ՀD[$w~23o4,eUFxvyBBZnMJ-sĖzzA\ ߙ[a"_q/httD/vb2#v)5[ ^-_Dht3BaYSLCa1yI=_. =٤P _ﳟTteã4SRI;P[t+~}8"lIaGG-^HR)εj _TF\6q(oJyB^vo֞cY%I0•% -'h|'{ζ|!M6,ѫEF VźM$s"mm3M E-ʙGd>BIgb-JˡfNu bŅIZ` F$+iK`*X'F!:'0)j_[ahgqĸTK^+|ddh_>Nwɸ4S0V_^ , 0k-pjNҝFSaF,TLa.w}v+n>ăme*uyJU'MfvoA'51\w¢GeKTq#JQ< ØAhh;Dlmq!,fk1TJeb d[b9~y~Q0#pmߢVvSqS3AW<4sQ7MKG\^ C !$86[~5<Y%;jgJ2 ?捁p|jX_~\>PZvzj݈{BVl:0Qha&9wK}(*J Œl*d(7!MTirJb$ u<*-*تUSx-qI3 Q<,~.bל_˛@ɪ|1>*sH*N a< >)nFFR^3 >苊OZ>n9:&6"Xt7+IYWsS26)@JK#QQf.)\TvI&gv J& %VdΕp-/Wf}&eyKM-y/y͞Km|ƉM˩+eH& A}#AB'WuK=jZ$oEq ek=gK(mYURB4}l6 Z UhT"r_q5,XRv/?E{mL8wBLHq5?Rr.<4!TzRk7ے`# k|Sy501Eۆlmy_;/&Shxfbݷ]4n\l9ep ;AQG|&֐E2R-?xUsv-m&^楏~ w)2/ o .VHk44{ endstream endobj 344 0 obj << /Length1 2882 /Length2 24391 /Length3 0 /Length 25998 /Filter /FlateDecode >> stream xڌP]Y-kwABpw܂;I+`cMY{CNJ/ljg ugf`ʫ03XX,5Nv<:A21#g-@ `aab01q#@ :{8Z[8#ʄI;@hibd 7rڀ2YTL, Agl`d`h.@Mpt@Slfa\ -MN [S#*-Pm, @9zXښ,E 9gwg:/C#k';1/F aeىUYTh#Tvƿ;kekf055uS{Fu[K?& o9 :&«yR2Neog0cir2r]>^*&c- 1o j;@ 4{_?>o(,&!DՉع٘,L_C zo%#h+mkf-Lg9`Z 13~1?_.+m7! kT?j#Kk @C Zy;oSMK+4tZig#"ۚ[[FK' Kw\זY[,]+zPkZ&V 4oJq[;_+0rt45^̠]45F[;g t<#ܯrFF߈(qE v608@%#o `2o"'/f +*F v".;G7V@|~#G7e@Eܠ|:7k6Pv#'Y:Y67@3v42Pfο޲& &&.6f֠a1;(5ht&k"M &@'13 (&hnqlҘ ? /hG YAd ~cenG67a6P-<-XdgUe? @P~D^0pߐt!(O7P~ËWA9A?+=Ô/a鏜 B.@Ghjl.lk9מMfU7CvGAA,o"NufiA;Fg G `e`imfG PX? hr\ nyA=z t;"&.~;࿾ڀ@w oЇxn{{^ˎ.Ho?n8' S] ={7׽ mSn}~2Qk[?'xO&` )C…~'^_:_! T:CP4Gc1MLOKv<2@r78Y$/oL#nʓF]<ѥ @[qMz6 Cy;I | =g 9Ek7 ƝI8!T9iݟrES*K/6+J`H$0pLDN-LdgPΧ.'I۝޷Ƥj"6Țj;]OntbG| zq a}ngiWCHGYL Ij>ܨWOU.swqf|xtz˺B iCAzObMMn:mnq24%B C`D _BMu!.ögQt^7k2~.mp 10o8f%smRqv-3XUf)&4 kr 7O1TC]U<8ueJIzFTfLƹ׋ G5iTT<^UcĢ{|02;e$xiC BfoؔW#o߲6*a~M1L<Ƃ7ˆMrWcc'w[AFHinqua>b}LULŪr&\x5!$p8kigSds%M3nz^[9o˴APv)/s/T>űw prN%a῅PіeX>LMNrD(LTGD2c )\2EiV#CZ衼>ݦnp|8nGvl<޸3Vf 'WKlJvMj+M!bb+wD`_l< 5ޅys`ɾ0jnqmd٦ zMi+7 B,D\r3;xvǾC"B?NbswT/~v I/1eFΙDB9`?X=ISvL$uu!m_[<'#%`ޢYޗT4D5E}4@Z|+:WAj*ho,mW`8lw*6НC}7xS9 QM508BkgKP!.-Pv዁;V\ %#iOqLY:ē4QhU!^co*Y54xrf*37-ڸOzCͳ7H$6d%rc:4>[SYWvgTD7'Ώm=)3: (v(h*+:[:~NE}Swϳ/3E#|xAniXG$'7 E9ޖ5xh K>ٷ{JG\CXRi-Q.OiLRt2^p0S-Z.ϸ5*b`vo^wfv(@deS]b1v58)q-jIR }wxi9qд%+0 ֚%o.ѧϘ ׸\\hvIx/. i2KO&m_lb5z0 Z'>9zz"kbaȸf/uBCHaz =x4kjX?7y!j -U*) 'iOC@%|%Pp'W/]R5:B˛y]Ԝ}O8GڔsF= j?(6Rm l erajGR*d%7V/Ҍ~:5{j}.ֲ9F)gVg&v. X+cXT( ,N9>;[Mc`s'dS2i4 9>N(&dktfߴ:ZAOb@-ʑЬ,sm0߯ڮC{pmWCݖqIP}#8 "Nd<-Qb+1acDG #ݰfwJlR٘h>J.`hd_zڿے#-ӅcNH95aW.`iywb< o0Y⎩L,[5'CB"ƣڲ'uCύfq\>u{AvO |Q*yϭx~ŏ7s}ƟQh.(k5Hm 9KWgX!dY昈bv-CiYX^61"IA9Flo&@4o!שbYo5&8CNeܲ\YꮐK(78ý{WK%Vl4VDt,PL&j'|'+‘%?4)j:!|LY~ | mA@U(զaWҖ,%䆊U2N +"X?v}c .=F>7qXLCh.ʎ#GD}I>^*Rԯ/fӻi;&`BR|mgP@W[0. z;եWFm;I9zߒG2C1opD 0%PrG/3038MJG0fd g%eox`[v΅Ÿ́?nhZ^O̠i;]DGQ)\ ;"ӗ~àn1*n؞֝+ryU=斍 BS-1"u3kP ݆ps 󀒦J|m.WT*eRmAE)>ŭU;\go2?o؅7nr' U~BvX:wƘ1hhtV8[5b81& }bDoy)g׃aǼ=~?ws7){NliuJ<"F"N)!e u=gN-zOhb1G͂iW:eڑZ.R9}e|h:^t)6!W6A-=_؊Rs/Sv5WS'W)R_2!Z+9IBTY;?ZqKk5+I~|~E_.?)JDbE5KB#ʉԵMX}abfYPl?m:Q!gõFWM*v\+Dف`$m⦅;S I:,'rɗM}Ʀ^p~{r g![ ZjZ֡j>M ]0W-橆̼wRKtcл!Cx3gx%^p6ٛY҉F$[8H\Hxޔ]Ubz}\8^)3YyI>^~0F=]%ory(0zN-f6v(9S(t Ŕ%z җRs?xN$(¿Q^g+n\ hg3kk^eXUW' uyQhǜYu  왻`mуkXr>}yb7~'kA[?$)! Gtv#3a1,0_M#5[Gⵄ {Ϊ9ceW" rl9?ZixZK'7 sQL9MUkao ۜ雅bd!%9wH*B!K:N}T xJmڊzYϣ.TYqbtkMdj+/LNVaF;>0O 8cVvMWɸy LK:\SrP7>n-|+&7oOZDTٹCkJ3IzkՎwK4aaVjhn0wԘq; Ďڞ|!xME |?9m}H -~y+^nA`߉`սl=G}8T_+b|W)+(*?k*r2lU ,& V;\m%w^[neWmFmB #XMH2JË~.%JRHhkjwwo/.(Ūl7K7d%J? 2 xT>2l*ltA$,]5.@ 1 _yY J/L"^ڎЇ|zCkH%.NAdZBg@nx:/?ɖ5)P>6Eƴ!4^{tڲufdSydZooJwED/I>!&Mft%c$/,bLmᩪB4 %N ƼVbr{3(FeU؍opx̠w)Cz|I'ڬ9j|SWqb /:cU#sA"bU|}e{~P'll8XXxv8#PΝ?C ߜ^p5KL^S6O m-EP oZ)HwuM4[ƳvXh+ ZmE+ym2k8%s*v]L# O9󹭌 tݎaI.͆vҴOOc5Xg ȉ8LJW2[b%?eb?U/O1:((27u-u(eT޵Ħk{[yR6|h2(LvPs#08ZK_DjU]-70bWx߮ximu&){7^z&xC28dzeJ`ʓyIkrv\*ETi=7B gG22 6Eu;t}2!-Y~cOU>^sMDܟ;??\w* Zv@`J.yfbRۺbA*az`d+qm;z1+ 程 గ~@9^OMWΨ{Gw_U[ "g}Ij#nQMUBҌ^bbᑓ VU_>\M/r},Kpt139sO a&?)b5EܸԝNa,#%{3֕W|5蠚dwn!okw%bʇ"b//8+hS'|0!恛.?Mh=vBK<6%ƈ>sMХrX$aeߔ2RΧSQA;g7MҩOרw"h]i] &vn?'m"TB40EIIG/M`|ikfvW(dR%sɔ0.u>{d|oGBϢ0̥onjgꁪzfoz1xt˖zY\Ky6M[Y?[Y!ZcpjgvB!:*tho凹9O>=|>ɷb:J^%T, WI?R'|?[Į{{ug ie^/\LEFt7oCtp+Tib7a 1]}7jY)iHвl?z2 D r^KSOb݇|݈LCܑZAo(gC%beU_4q:]5b!N [ySh+z4KkSc EitR@3*W9 x-p]lv'#\ z.-u=o6SO(%~v$d$~2ZZ? QreNQ:u`(Y!8VadNPVˍLx|tRA 2SZ2R]؂!gdj;ck^?1A;-ԋ^1Aju6ۡ{r !AinH䝟Vn;¨QƼ}WQtaom7N#SrlnStu­~=&4!|nfHGsLMe~x5ZFȖN4;%!?ꤾ/[e{XAyS,H,D=8ÊBhK74v]_Ku_^H]83 F0ÉIظvVN[]prA4OXfcJ=QvkqRoFmb 4P[{auS'-XfCw+> OJ} Ljsօ3Z̐BDq?.3MAv FO,6֭:rpTsAj/|609tqUd$H{鵪ӡcRB/GFj<,5 QO<.ob#j`(/oy;:"w(H'dXO 389 D4˚͊ ߟ-h7_ I>Id~E3ȖԾ=OMF;w2kwr+nz*E!]i"8wn3)g ܖy{x#Ajͬ/t#T n=wOM4XQ/דd=U>4(xsa'2lWț+H1轮}IM_bX\¹e5/kv-S;MCN#f~7˶Ҩv56 V#չX+z,Ux<Cm&t4]j5O6[$[\\g梘ŏָ+E1}x~3w(b&=ՠӚD\H}ӂC1ʩ-(8^Y:1CViU)2Jt1?T0 Bg+w,]Em1T.Y(qc4{iFxQͮk.Pt\好R+2Q'Q,MERMMMm. B170!YPPp("TڴQ~1 g\ݩ1.>)(χā1an-b}{XnsLL,9yњ8^CpD3%M:U!a?6cB綾eZLR!:?\ݒ%ë|[Xs5{AqYH1{pʵ?H8vϼ915y o.Gt7l3ע6 :2 Z 6ي D 94R '8Wת[)|4\= t*Y["IsЇ43N A@`rHo"OZX,!כ*_gQNH"Fd?|1r_A74-BmjQ]Q4%-f7CoUMchWDھƆ $e\%Z']SpPd̀GR{>4S #P&m9mj[aGAAl^(&ߕ$q;i f{/m7h,6E0 􃳃\$Mh}6Y`dp6&O{pXt<:|p9JS}M-L'vP /Va'ٺgh>NA^"lK &sEm9e~K[~ P?ʘHL%X;vņ%Q ̰-nլ|U,߄uzKʆ.ZaB''~e8ݣ"){3S6^5JaDN఻VK/QYn.mK[nTMVz>7c'0Tԑad{+D`C++EXشhiI4sEdIoOzHGk)qxR~d^v,q }huB)5u(1{ | .A4""2j%K7SbƏw!ɝl;oMڵ(^,sdkᏺԵf# Z*cQUe'6&y:2 -V6ؙqM8dJB5Exc.>Q,fYtë2ep UCw"uYmu<ͺ(fNZ (>Ac)F!Z:}{oG-*1jp>eGҳ3$\̰o ;DЗ>rj3)}TEJJ?p)Bp"PVl%.D]Գy+ O ECsTmzɐU0V h՛g/x<=T{S#iv6<J_̻? $u 7/ss SLj%+)I`Ir2.sQf:xա3Ϟ7E}\r.eKQ`d2q~=4Mi&̏A6LA?^۞MVNAoӰKD7JsNc8aϮ 'BlM8*j J%jkS 2/`H( 9EK& ̶R|}MYMNе=6"ݭ%0Q8oTl\d {'])LޱXt m6bK!dE |h>iuAwr>4VQtԐ<{"½R"v+D Rr"(}IeM݄dn{?9%%Kt$=4mV8현Hj)~kZx C6Վs=.@p#q$G,p$rqs-VyuIusa3Ú5<ߌ-k+0̆;=c{sLA'HwW ɋBDm$= S\SX~mwr6ؤP ۄǏ3YF 6!rx`x&|ӤZ@P$"3Nc,`SyFO,)f$gb`|m,VC4gw[}HBt+J⁩R7! Re~*HK#-mnϺ8L:lȗ?1}*^b@d.GuAЪ' tڼ za18kw֖K,3S5QzeIJK*<^_n֪ecfcDžԜ/ ey\d?YE.g.ydCKDRN0B|55h_qW$# vQ3|.gcV=XËQH5ŗ;0١ ۱9 ~ x|)jr 6Qf^Ϗ=nКY>ԠHiݔ4̌P5S./JgG ?W+/ EKra앰qift~nAUJj\K#BsPH/V~tk?I^?kn¼<cPb$ƶl#tؒt;8\ V4Ҹޅ> { <NCp XBLw wɗVIٰA0玊SA>2Cxb.giuHod,CM* lEP9B|2cw\_hCvoL"<p[cӐY`̰^Z͞W>v*k [:&WF ߳'m "Yhf}uw5(eD3"KTH!tlhw.hĢu$2K"b/t2]"69]+G͹>[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-$ܡqݝwiq,8]w ]';3_^uUwT`p4:B\Y9؀)%uNrjڸڃ2j.69HA g4OPtpp8x9@'(GG @ncPb(:B.RN^P+k2 `0gppCmA\dp4zW akWW'Avv6 #Jaj P`  📱4m\k8Zz` qypX 7'0O7::G0 X,m7l,#9=;9 +=x.P'W6#N|2 )G0w6P{yvG_ba{ 7'v-XA/g?6++ p5^N?H |Cl,?>. w07`ac 0[@Pl[/j 0>kѳ,!^q2jrjzN7') arp|<@gQP#@fO? u #s);> `G@,7oCn `cóf\uJ` 7e\A{ m\dm<6O%U]l~*V 2{~9\~^.)1wa< B> `?4 `g8>X:BQ(/ϳl~Dv.+J#gNo$́Av{jvA;o`q`/<Ϳsm@Rr?BO_smz}> ܼvg:[nݸ >GSﹺս9 3$`>?,>xq`O9œPmmHmΘ4N*#9*3x z-4 Õ"/zD&;mGu}d(⻾}[`;is1Tqn=z<ʖFBvvx_=MFkEeR!`>ĜPgF;裿s7REDCOH=2I#Hͧt$ect>-1 !;}|qjT f+ҐDWt:/XQu+wY'bX`ٜ QOv8[qQrZ#nIv"!!"/!+f|8|ѧe=r jX2ЅкO@,HN}(;+~SԻ$rցQ'3\/Yt)!wfzIKnK؃#%XYڽ1*U&\oS{atO,JKCMQN[R s(P츬XUl.1">%&|ZIKcd9gAp3 99Ra2r9yvzT.9Mk4̃/bjtp3)j8 |H zLI* ]`psŊA2KbWDQvS)R~:ہMۨϊUz~{V;UZxޔeFaPbLkqד 2rmX }bd_ʵhbvTDcXjyA/ R[n:VD/DhB+<g9Z7?p%8qɬ8I OL#4V0B0'ZbEJ V8*Kl4{ =Z?JXM63޴.R0BiWQoFLyVhZ>PLF"u:/ ZDN9e}/-@3Y,2llv^bLKj YHmBWLzp~4oo}pdJ, 1rAX`*g :nC1-S87 !7Ci;w(i5Sg_h,9.,i2`؆8&syg<73N\d$fBioY@ur "^X M4XScoCJ*gO,hNQ_'li:inG,(ۨxHŎS[e JO8q;}47pv/nĕ Mnc:bĘjdr\VdBhQF[8'jm\\unJͽ%ӼW q S*ye9KTyl`1737S_"~d\4[-"`WP@t!*WyFna[5Y74Jtc(Im5{.G}D@X ޏX/_1߯_]'Mp-1i72Te`ϳt3|:PrD3I.#? ʸ+OF9ԛO-݉} )FBqg7˚CM6O$fOi𯗾pt`8 *WWHKk5.pϙb"AWppmP>M .fdCC CF@xzy.RPn.Fe|qM@hk258~U^9+I#J2/Gq,: ԐPeCEjO ʰf 6&Jņ&^k(%FUߖſ5D&J1.|r .b'ڷRM| 8L̝e~ԗ::g$}ma/tj );rEH0nooE74 .Ilc3ɤ"FKh޽SĄnhI*#CR lO *NyRJ~ = >pt4Ft*"1 3V~a!=W~,DWce]Y1V\Ã*usx XE$6R }Z=a%qJ|c|Gw~UqljZ؆Ǟf2' (fL"6Vk>7TK]R[!~Av(lEd$ԗojK׀Ly۠"Um;= )X`9N]e'dn$-#3!xXh7{Q7x#N8[w~ n#iw%5"ĘEZJHe5XA來|Hv[Υ7j W׊b1f聵aXIqq)6ywcKx .te7&yRB1j' iCWwS=M6*l{2fp.}qs Vgps%֗F͐͡-?u90$ # m AɺUX%J7DxDNt=GG={eȫ] ^)\)H|HH,OHIG8He( 9n#RQ[n& #EjdhT"-<,X-n`OI1G zÑ8ϓ_GŽ:ݺUU|P#(81*nLs +é2Cه̄gl c.#sp"|w3;0V-|j&V5vHRB@u7p1\8Go*[կU,:{A+_:أFsP. @BmP^Sי#ii= -`6cZDI{Ia^f:*5Zo^-X7&cGUy'1S uF=)u_R5v;^8n |uw5vr4+D%|OY.2'? ѥ6Ȳm`Iu I 5ĝDq-_%-Zd4IJHܯ=ӑ 3cZ79}k7V)N">&iQQn:}34G귴, Bx!U. d󌺳zT2(adž]$skۄm+JZ%:"S/CٖFcxKbߎu.ỎQ\[ ‡]|L$M4O5N3yQ>x _ ~KPN_YW']q9ucVl \r(2E,}cdnu%>`g^"ſ2<򥀦x1ۑ~\>rƤ`7u|N]/-Ս 9Q{Y2-j!Cn1F3rS@vt|%I# [6Y5^@ld>-U*Ҫ1Ƕ˼Im`J5B鷋ϴݡ#}k\O=)bqxke+Hf&j!\x*e'}vaM2I]n ҈.:ƽ'[#MwY^S6̼i}e`i/{քxQgDy޳0޸ǛeF}5+^3!9@JVTRćxʏŬWJP^ ,rJ0qNZ6S/]QM ³c!;LX=k=r簍R JCōIy<2+I`[B35P8y؏f3.߲i#1avDNueQ+~tZ|&XƶǮ@ڦQe띐dX;3jD aq7GtH}曄\I *#ʰl}ո)w w߹gOm?թoUkɽ='1! 8o}'6+"@s'#OG$5aWa:tF]3or4wj:Zo KRXT2n˛g̲HX1#vpd[Mr,@|@;A1uАTHI- ~&[}s 헸ډM qs?"GsbVDOz#!r_6mAE*#n&{}w䚼WB[͉gvu#⫺z =dOt,_K%䋚M2%C9neEE#B?A-*.9N/mʉʮ-$]TAksvak^ltvϖ/E+vHt~us֍%j}:Z<_]aT(vU2z#"g} ?f UBlu?ļ֛P*QS&h71Zcw2KlxN;1`9 ۸%&<~z7f )(܈f~!e}" ]'Q8YaXr4Z6IUmZXk1UdgL;o.TRBZ d8k3Lrmq,qZgyy5bOQw|6GTmDQl|UA?m5_Wy*GjMK]4+ډhdҽKqř:wCWuT$sM7jk0 <-<?3$i1;oe-8Ѵ"ܼHt43U jWbI5k>g-_\3gB^ |(rNb<$pq,,Lp,<)A{V&R(΋9J|kLKG^_>W IIХɪۣhSTW,B _rF  o^Qk 쩈}AWzNe%W tƿr}1 ]QXS'N,2?6ܣM/U!,uϓCRNt}?5z&Y b<ԡ.``0 5 Le\֙x}Hg 5\3-F%1QMa7WoM!O?4$Ps佾`(;f xx ; |kЊ4.qke;۷;|`JdPߓ<85R4½?nPK/G|/Ara #/ ҅231tȜT':]]Xb am{'Đ[B }@<5̮/)R^ j &NE.N'1^:t~1#tb1hp ~!Z/SaR0IPgr~}Dc*1:VJΩGҫ,~t3l*n}EK> eױ/ k 5g8ٿ.5aa1|)k6?*T o2=V/b>˘2@xgFBI]0Y\Us7'|LԀue[(ȁ{̫'l+>oQj^?|%:Jvi߆|.#NpP' a0ħbʟguθ-dH˜'p^ w+yc۪,7՘]yy^fiT YMD3!vmnqd"u&}^x7!0$^x$ؐSg:=nq[qK\y^\"!$HqA f Qy}z%ܸD"vʈoQ&(m%M+bPkзŅE+*RDwQ V Edh}+2cd7%g g{8K݂l!INbO Dcy6pY\7@Ytg~<f +]r;΀$M)F#%EC!)7/PtӢanCYNa58 WB;KvDJ ~]ԪBEjrQ]2+yr}L!טF~>uFH| R ;nK@5sy ?C0@6) @)w U6Xd-WPsiI~pq[YUh9y1FEtUu H:VFzuXVMW#JJSQQT]ވѭj7&1y8ySuphVSZm]a(*}~Y}{pݥOV@Z/u(-KM9ӞI;!U.[DD>ǜc{=-pF!^cBRonSO'ŨVO\R~}_rޖ*h-e]|s%4(* 4 c,Pe.@rIg}-4 Եs'WhDz䆃о#Uܛsn\3jXԘ@|VkT"wDZ0Mx euXFI kt_mq(j>lx8L|$Aj"o bωG_Hf6J$@ an޶d 06Sl1@ҩDNw2杜Kdփ ٖvp#=w-<y"7gK4We>6Yish)|+asa| lїT4Q,e)+KlGחT/pR!8U*/LGJ]JGF^Fk5I[SZtTu@9_AbXsqEfP_3~᱁Q}`ܢ84OjT_T,a*F+qud6ELçٸt!,rrd|=x@Z$E#<v/MJ Xo"w<5ՌxNȵa/'&N\:z~,n|aoKa2;b3bfiSZ&ٵۜʼ7Y T`G7?2C):`sn["ST*/]TV @,G n:p#X&_.>n(rU9+rMVT >* hH~X<逵?@s{ç ycـj!u-TgS& 3Oij܋ 2TD~\ݎEt}qJ&$0 \R\ 7bw]c59ʜfu(F6#Үܯ*&H$:z2xz`yn37hjn<=`1ՌkѤxRUSN_m #0Yp+nxk&&-CE l_&R~s"k!ܲQ6( ܏vuǭ@Mac]|V=bo2tb8LWKCf(& XT&ҟ41[|Θztcxo4GPJ_] _%&{k4Ї 9D&ӵ:8Ҽ^2=KIxI3?BAj/ĹƧޞlc/^yO!^Э=JVL#o~kы>3(^+~v1v28^ 9c$roʝf] ө)(ȀS MM]p@2JѠB4N+;LdM%O!ݜT=s,~ߵl'^lo6&kѥ+mHg'Ɣ +[yFkg%L>OP+ưZ {bIta5sz(/ ;'<;&#=n_wsK]JO Z|}1?@)wsy endstream endobj 348 0 obj << /Length1 1640 /Length2 9407 /Length3 0 /Length 10466 /Filter /FlateDecode >> stream xڍP\.Lp  \{Fqwwww44Gf̽_^>[֮TQg3gfv6~;Vl KJrtC!2p8?ˀ&vP@ ``c!ԑ4qYrP Vjr~NOwlf(8[3ԡf`rvgeussc1sb:Z 30V5d0@gg, +ӟru#, N.s#99@]VliY@`&ffP;{b ۂR ,LoC['賿 MRbjl"0SK@@g' {y6/`[nŞUvp2y#9x ̊wx {J|&@>` pvtx[`6s,?Aw؞`eL/s(?ΗU(+ώ։C^̜fn67QTLU, )`׿Ο`w,%3iA8f?\;[j?/gκ8?_5 sjeM@ biNR`w O)d`H}GYf673#PSJB̠7-H/U4a+ xn`uD}obE N߈ (#>?j7# ;/\s4 s(ȿs(೯೯ӿ[s.V? cO? r./@;ojHܘ&fi\0R>dn8^|^ݑ]xֈ֞q`6ׁ`xX )WGo=r.*x7n C_CT~x+P1P:G[`3ODL̈{5wy57D!0Kw#vsJéX w|K|?Upѫ}v+G\a%|j35SS9v{P*)4,Uͼˑti&c{-2c>*=nnERq_ePoʬHJa>6 niQF?;;qc0o4林Je`w=t΢)5jm]X8b$\zU?y߄h\r_1o[tnp5ɺc& yNu8]3?N<ʒ<<@?k(J 43=l|l:ch0l2aHTVFTbS0iztҵxzP"-ucnupPypfz;˄ !loӧ)ciSJX[fgoڏJͫ\+ /׊W9d+|Dv aRLkdᩴ)NKQɚ+KfMȺYoܛ=Id*Sء.O_+c4#)qL:'wQܚA {BMզ;*&} )p#݋{_/sx.E BV8;/5NI Q荋P뮾O*W$;N>Jc)"a˳M֚ o3) |Jw֚0⸦Ug  onoʠ|Uc[ɚ- *L9wƃFp\jv#9i*;6!0juPg^S0=›ݖvW?P/Մd?sWir]F&K !몚\h􍥗3IHR%*̃ =\D۲sҗ(_H/՞ xNf]'{iBC0Oo6kw%@FԹ.>||V[|鸹wwd:W:S< Hƅޜ8XoEjAQȶxm{a>Rdy0DK'rb"/a*Gi|lL;BX:H]2m#P Ӻk6_@Dk2wͨ׶}/tWJB/ܲ`g/LrQWr(xrozm\t?&I*!G|z!K"iVfC [Yh%v:F8!ۅRv4HSۦ/z$YTbw'˨vYNP@dїC VѹkE= ,/}iWxL.p= " /N܈qDAge00}}IL] joa}nr*!FK֮,Pjgs1f*ʷ s^7 BjMHvy쑋*ӚYdHThW#: 8KȘFN q~"q6i}yKoݯ?\CP=}rw vJ.̷i3s5  L*'j31톿ظ .}!`xӞ;иA͢>KKm5\k8Bg GEOʬPXϠ%v+ͰFY&1=D(թ1[Pu|?eb JQײ`lM*~e,PrclU*Dbb{T\'zߞ/N(*UO=X:Jf-L$:2rU\b(4/萼AbNP{2P#k }gкeikcjLaKmXE=lDn7@{BWLD yze=bv &sD{'Ikc3n^us:v;W?,ooۻ)+ ++]@]x~Z9th)_pf(NDu;톯iTQ{w+Vgكr2"|Fߤ{Y0~pT}yrv)1q!qq8R~61&'p«Co ~ͪ}إ(|9ǓTm8f,Of;IFΕ@emu5|;Q$R0"5ۡReHHG'x`,_l?֫cxt$oM4]P(TRL"fQ/8eXMsM I'?HT:zSs i]-J=K7S_>4ooؠ/ Vwq„;zq̬U No<u~"|!TP͠ԂRFIngBb𪇢˯$[9Ki򥅕POB&+B;Ƃ _fX >780҃$n)z+LX:ӃΒ;"@??["m=y\|n')J/FN)r֗q*i;!JdB<Lx@uժ34t{w{p:gIRȮnQQV"2fF0qmWx2?^IM륭$XhPoڰ|Y{ͯs6}羉xָx|vSqG42e*{lAhQ׀<OI= Ȗxb.O-oh9]R:-͹\Ty->T$" "ʳmI= ꎯ(7ίc{py J{j9 V9b3/J_Vָ+yAR  %ɝ'8)\ L^8J{бm숿-=,4]dh7TO QVݲvKWbyASOShP,yn4HpJl!!{H A]sz-o"+n2jxJuYl cxc`%>?M4Ҁ`؜O#vW#,F=<ƟH9E ynZTaflE9)p3Rۧ Z.2:kH#wb['0W'xG$%$BR %A8A}o\{~ ~g [خRw8U.Ib($ʝ_Dn<)KN`,1}АiPVGwoMBt,FnzvpY'"j@@و1jʅDۑ7ŝD">oX۔z%ώ1%Xs(HZLnmR EJh48ϞL'y\a̝(^/=HAct=O-14蘁K62 s ^:EVrJ tA*ABϹa@1v|(W׺F ױK'w't`{ccL1;%ͶZvk@M/o$k xKO:-r6Ê WEhZ_eU=gr棠g`J-ݒe"Hτ[ES"IhafkIO#`TpVO[DJ׃լᝨ]cC66W΃.mXK0IH~Xi%L!I7&_5ҢdaO% [ ziJ([}e&_>x`CUZX7GD!\xCX2=X";ì NTt&l[z#`!]WU7,rȸGccg vHY?ioi47=ӭ>;SG_tL֣N3< 9n&Yw[,Jl/S 0t7!~ WMI]/x!Mӱφ]Faee ~ Ջ۩j>'^C'%׼:!=77EL[Q5IgX'XC_)<5uTNr2C@o3WZyÁj#?VfAh[]<z*f]4L_}W^h#wHiPiPrU/pih9SŹ̡ᆛGh5(F"mdW2mR3Q4#?1*彌@Fy-_1m>qAn'AĪ$wR.)oƹwmxk^Ԋf7pxD!6[qi'R(in ~'Ož2b ى} 1<Ȝx&8>Nq轫Wz 1fds*Y54DXƤpT֩@'rPdmlA7Q 5΋]VHmžWaU}#8JЖ|1=BqMJCkyJt]vp0 ztj}idٖUv[5upebDD^|miq0+MŽis|/#$5;'xCL5 ߩGz@DmlkJ {zG$P1'8{frm\'Cʽ(H. 8p+qr7ŘIbM}/1j~ݐ3I56z٥{e RjM*ChM 7Nhs]#l>f}3 h4DDȜxi+4#8@aAF]P%-ѹ0"dK),s8'pn*F7u+Y4g9wLuQmRk~6Hbh$ 8 [i^<2σadbSlocyZS >s؂:5Ks=KA9^R)̎%$Uj2~noSd|*q_ Lci*Ŭbpeh]r^?lr.%q6+1mK{: j#`ӡkcLD8.oVdT-/1E/dC3?߱J5aV5YMKXݘrk;96(>~s#(0>ڻ ш}O88 Gh" ^i<ڔhckMm 3eD\'3U2xMJ#c JNLӖx֬RqVdDʒ 9>h,L endstream endobj 350 0 obj << /Length1 1373 /Length2 6096 /Length3 0 /Length 7038 /Filter /FlateDecode >> stream xڍwTl7ҍ #FnPBc6F74 !tJJ7H! !Ny~;;gw3 #E@5}I$&f0/- !ˮQ:qG:n1,d@>0G@z~H S_G "##%'E `8@rc*BnSE# !+,+vB y0 E@ݡ"\`^MN(_0 (`(  w"Sm=_Ww'!;`nP Ꮏn^L< s;`4h y`n'd  GyOB0[sp/<௳ {Goas8FE3@R2'Nnc8aF/BzCA08cPd#ah5<'[ p7\f:VIU @ sg#0.@Ն;!25ҿy&/ B< H|O ݿ?hz6V;o;( ]0ojD& u4 .A/oP#ˆahxaŐ%5ovJHH$؏sI #a!8 ` 8!$S\ y~+Ș:(_ H$f_NCh(dn|TvVrWpmDafW0`0:'|S%=W y֫ǭo^%%-VK|GLy=3"C-MnTHsQ ]]0=f^-KzY6!`oV X;NKG}ts:oU'$h'A8jU4|LԫɊ. 8WFLPi"n+64M,lgA-tejq uY<J |~ΌXz^Pij<@E{H6̒z*֪r6YwW͔%IOǘ=OC SAQ|`jo0(97!7q3TX ~(r'QDREE9/$6Z#Q QiqJ :uܮq=.gmnXN|\2~eZ/ SߴJ*K[ "`AOt>>{{\S*gȷ ^5Z踓݋|lQ_tzO`Qcvԥ{c5.qv]_$[7(4$ZyP,l#l}"kU[/-uinDdH>pG+fܚz`{AEWrkl>^yӏ&IqTt>V48˳mXmǿ`Uޒ|9]\Ti=&Fu^V—LkvCÍD9)'jgVߦYwqHARK=O՜4r$.4me] 91 ts]4)Vyv!9_"~ d|* GM5jH3l=xZʼnĨ; i8=GH=y[B~u:od-t$х>gv-VsOzmvJ/11r QqΎ!enIdRPY)/;<Ig^\]RKlu#5dFTڭ`B"#ֳ{ 9T#t,E/yi-i;Ǘ dZiiɒiRה"& NJA3(oSK˞01/|bCFCE@7{3ZlR}Qj5ʊA,Qx[4GG\8Yg3X^b%MƵ^8ٱڰ,X斞Ѽh,[gp0ߺj)yq_DnPOgYҷXaBs+n;'h=uo ﱵUtxZɷ,#&I0SZR=. Ӌ)Qw([r}FsVoȴ}0jg-@B!˓Tn]/Շ5)ۜZ,$Ģ'V6֪vt}v pgJztCXL Aw'*dw~in0>jBL[=lz+A`FR~>,%fC3f&n)K"ֺEyFM *VQg)&X*pǀ #Ȩa8@Gg_(*1lF V_Г 1ՎdT[E+bE蒋:y`=.Tfvt{ }LTzJg2U2f> <}՗'CoB19BųWFsXKUw'w)v zkjsȃZQBM;,/o#v6>,l "" XV?Ɉϑ7AEY ?0Lj3U5{ȜGͧW #M0z^#{1zD(źMU>)PY [5οДEG>>PۏOj:-%OԾ\И~\8 sXƭrH/} L^e}NO.( į{? qp3;|+q,Y|(G^Cq/&?gIU~Hgn›k-W 2K%#[j^%M#҅HDrin󓙿\K5r} я;9Y4TjP1c2>ܒ_hL[_^:cKMWf}pjgݚ7sD0T=[X鷴9I UK[yV$MyS8gIYܸ=̈́6*w) ]I t)Rut6Wp8W' /FUT\p+s?zm'JUDǮ9WvMhNw/zY -dp ќ{ONU)vf63V{dHDBt~A0u1WcΉ~f,Dǜ4/kn_vM (mF簪ŔK> 7k^?~\& !i"뭆l*Dە@NȚYRGEѮBȻ .Ⲩ+CTZm0W(dI?r>aV1|R43or/}Be$yى9ْ?N >#~H1*3j07}iON!zN$WX?;Av5njsϿS2PpMJ'OS_>k:qt3 NOߏo8|\n%T64*xƓ䫂g@S[28$7]oN1X.6=ߛ/$9 ţjcb!+Gfd$7t/y5:)vTp<^!cq! \8AM4 Xy'Fgؾpkט(=9O\rB['B3N#y &u{YfrHT'By^$."ו3O.`l8aIE@\z1~W<<iq9<ɧ>}X{ǹg'cԀL|}3usnB\"އ_ QI0,p@v珆ϵHkgiάphVoӉYJ9abV:Brc٪=]Ivo-b D'񎰇l,bɧ"صa{^6W*8{m;J&i>e -`G ? {+y^PZpvy*s%gSE| 3IG$^"汞JQ~e!72}{D5>Ju.Cϐ+%Ҭ<MHE_dq uh;߀TF J4U*7-"yXz(!B>u|.;֧H4]!:H;AJOqNJwOWXyRjYiiκriJ#nPQiYA5Vb w7cfwSY~8UQS!6s8:&*,p>G5K:"{ '2x+Ԏ1%_VthE1myZYDbAogogܾ3,楶`U._C@襼֣x VQrw7?φҤTo HW"I]:Xh@wɌ#83E*4<;;A x3Q=a×@ ~Q8 54~lFk+m{lv(V?mxnnNl:"Vtٽ /TnkΖM峣q)mF[6Ē)CFw?YIXȪl](72)-ORT,^| [nZ5Dlqq|M> stream xڍT.[q+.8ݝ $Xnŵxq/R ={ι{+k%{曙= # $9\<"5m!s.^,FF]0SŨruà"e\AG%L (CPP#C@lP(à 7,F+xkVPXXwlm YAN7Z[B:0k0,/pgnnOOO.K'7.8+ h@ rN? bڃTlព Aܡ6 W%U37_޿8[Z[Ü-` 4U^p%淡% oa XZ=%@^J `X_չYn\n` y|d9 aO ~|uo?yB}<ۂ6Kqwփ]AJY<ف~Aa yYs C3`Xl zq ?@ فXGTl; <[60(o?-laGa^N^~G xwMK_YL_gk0X{d,7Mxy4ݿ_ȻC ,jx?}5@%qUـݝU[>΀GɃ@6`TS{ `(HP@qi=84Rj =]KWWKo?Jڀ`0 ?\~SXm[|7cD?F7ؤ]xܶ<""?Qˀ<nE>aNxbB@Kʀ<%Gr]A18wD_\TEGc@^ kYhCMHj)JOέQ)ƭoY9}]ܯqSX^^H ~_ڐc9\xv=9YkKkzqt*y(G=1D>Rnvu#t_V,d+DTSd+Q[s̓j:IH/%f7eʖ94J4_dRuk R#?JWmtӱ'y!hoxpt+Dn8!|f{*#F>̨"*luFkԝҙloc>`lKSX.޸6,˳BDho`%PyB.aTP?n}1Yo1yIy\h!4URxmf+9X<|;7BP )ZwPŒqpE^д^B?Ʈ=Op-Jq9Z%ٺ$!EI$fb: \bYBURhPZ}B<^Abh~ic(j"&ޮ}JQό\"-oTcOˋH@C=6渶s "A:wF42(܎^3~L(~΋.3Coè`˔n8WC-[XUBȕda-SqP!m;TQ!q|DeS. 3Y߉WjfOAw%V=_&D{7%8jf~dBN>w6dR`ҭ$)|mZ#@? aX5Y:uveHSb7 ȍ0 m!]MhsP]s 4}7hɊFwٗ*U7&yIG58fO 6wS Ʉٶe[lo]BFŃK h q%[=zU,;W/B!7 !~nG-FpڵKmuC:^hf؎E,5kmGm$\-.%V,K=:r}4|bbaXxkLr&2 /[8ɐC1,WiA7c{ms釧Eub:CI .\ix)]c9;س !Q͌G SG/lwDZm $V =Tߥlׅ?Zb !,86՜FyLq'P$xU(DxXGT󻪆`{89n[evu_`k|'n$/TNx;]rpr zb*7S[m g|]^o kNAJfO/B:CYr_6϶8h.ت!Jq1¬bF_AP7ѩȞ#>f`u g<ك!]悒ozJ۹ƉJLEէ|О=ݢWlvVu͋s=i犨vCMZzS'YZ,7P}.hIvD8!(s=Z(%6d+7 _Ēb8?{lMw/: ` @%gUc ܌Nmu7 B8tvBL)ځ9\]9KzYvGizRw/q7[?ϷzVmʪK0` Er߂W$,\sDԈ!+ #+B-uAɬ}9uC<:L@Q9z8RH n[WzU\W HBjO^%8e퍨Y&}mqw( k%3(B/lI@TC6sGy\l>QS㯝YD+XM43SX<39v']XTеV-T(&d%St9jDX@V>p! Bgn/:jsWS՛$Vrqsf28ɘx8Q*㯯J7%W!xrRz9\v=#petZ)e3B1  )S%aRi3dmJSCΚːќ'v٢Jm+])tSS5تjXr8zg|(q#pQĮwGHTxoZn̶^^I ~)r#jv\ǭJ"Mg(16?.4+fw:G/ȣBq*3.ܨ I%2;Qg )g '^yams\[*I;A &htL؟UmjZv,VʠmX.Sd"D#b3Z-vkWmPʀ یI#sA%o>,-o.k.oG y@P*>f廴ls(-)&)?%?f2?8Ȑw6̨1Έ*xj.ԦSOx{7lJMלyfi0ѨœšW.67R$]M}q9 [blӯxs?as"+L 2ȂzU,ʪ?ǡ.L/ܯ=-٭zmӄ'kwM1_ò"H38bhKDcԊ`}_+.zY;ɢ<4\7|Ź=:H+Al0觿/dA96JM==H4vuDsTn9Q65T6s:z̫E}5k 5BVh>=)C4dBr0ooS X22>nRzBv,FD8:W,Ox H~Nwkp(G.Y3ll\ \Uر.]Dτz6e,"NF9`.guX4iZ}uVf7p[~(Yb;b{5} +bu2t ITq4 `FɊ b+kuKKx Cϣ %`_0df_$ݱ `J%gٍ֭Q2e|_͸ +Nad$m$ ,v@{#/2\-Eˡ۹-JK觤{{:yRMIȯՃŤ"H .=m/ocW2}8 5 ?+iP?g/{6+cTvn4;= 1ƫ_эnkԺvSOa6ȿ#Z)7ݣ4%y4%mҸ53F*^f*-{x;%3}0Wo]Ṅ#H+7͑1"盖؀Q%օK]'_x24F>kuj kɝT Gy}Mн!XBU%apW.ސ9)np:8O⯉L)i;/[Z1H5 [=VJUDX:y) ?}gCS$C4_vwA+Ϣtv/xcU<=D'C)@ %~s=cLCplͻ,.ʷ./z4;VS,BݎJʶ]1~M/E"Wx~.dU>ȱI9R-y>f1Xmϑ޶ŋfE/7fC#>.Tǭ1.}̡o`mfne+G]PGBjM/[藊i,t|SΙ-Ih/f=T|G˕p &7<ƈ=ѧ.u8whb8Ym۽B1Tgj0n)NfC)p'C~Jp+)|n6VQ|wA}:8[_"-#^-$s$IK*F޽?9H:\48&hsC2̠(^xWڎW8!?3=1.'}aj0 `/0'j.{!?.8=MV\:mν:.@b=`vS/g#)9onKo_;]VF/9vOE%e飩"ȂktRЈ9瓑gȏ4w?@Dף/~XԞy+IfD7(#xh=T f3g0덭Iǜu\Y3 ew P[ŞoCkMnX|K&ìaug6|JPp.Ms#- q ="-yGL!JmAmqq`r"K[ɤ#dmitø5 ` v&h,mr6^:;:&5){7yh2ʔ,{_z}bPZ-ht9흐mϸ"_䯸(~+49`.R> Ly&`طo|!DyJ)S|Ⳙ>PK,"^$k9~WF WK,L1 8Xӻ~L_fcsDpU)`h~ZEp6Бb=Mt3W0WO~ZBKSew~:L,>Yhy~UYZ26(vyev8> yoƝEۧ` V@l+-lZU.iP~~OskO Ӏ,b:1h,  AA-D^}U1-ilSaez kN0yrV Ŝ.Rrax _Նqq!:tςaէKeŠˆ}q23RSB ~iH1ϮxzFHtlDeؔWV $4>&u 9I Td8.A$KMTUWڿNSjްݧ XIO|h8gFGI w1\VJ[6bL79y'Qg6>=r{G5-KL2UIn3u-E S2d`D=95Şg攻k5w Us9HtNĘ GѺᅻ4ۛaf J΂W1RF_,N'KqڶΉq tOӜNt_:N{k&fZvEk h> =$ʥ'it2F_ ++135?Ůtр\P}?-]Nm 8brq>;Ecv-Zp"]͜TŎ=@> Pu˗'&V Zr]T| HzNneBW†^$3rmg}ۅZ_/QSH[hMTb9suх>Oc)7bL`"X%S5cAFX+](> K)[5,#V^BbɹY)z$ְ§F_ 81ВZ?AU褱(AQ|" e:EmQ| ]C.X1O畩\׏=$'09SIcC]讝짯B$SMY!͟9W< ac/8'vhPpFl{" Ȁ39:cyqX(ko%TVjrX7OV.E~JZwYedJJ=v:z<](rGcᘧdOKZ;W$К~bA/ {`+ Xa}Z eWp ݹ٦'{ބ`'5P'@?}A/2W0sn.ȷ,2M6aVO.v+}pg`)So=i}$z(*#7ꮢG9INGӑbā4 9].&:j+QFWڗ1q%J-%ZL1ݱi~3DR6R0M9x|%++mp\15ڧ4xh)ըIQIv%F ~-zg›"xt Ҋc H8j[2.Ŝ-3Nky|fT3Wa#u&mU8K!}}w$!;-@OJC*_"pfIOUҋMRz3gH>MB)zTI%|ӥM*0m+g ܻz]xes^ V <{(#l7mXpJvV,cP(+QORztZ9aye3IrF G ,GS'&&^hUudSg/S ;@彃(=]npsjBՖ5+I.'Sj[haawiQ%$PS3l&8qu`0go_wP ]]aLi b1!`G͓3C}sƥU扔AW_V ނ;ml6oBO siA^ЧDt mb"!X}wu4@ȠxEGeǺL1޴][QoJn B{Ga6SR9!-7ܒ^i ]SFU\PunH*^ - ;(OQWfA//X .jl6(zMR J9ӕ#̾C?Se5H,9JQ1oEt &C9d=y mL_-y7k/6[|/,TZNjvFX@M|!$5KYI5*P)3#M\yXP 2yqrЄ<ċgQv~S endstream endobj 354 0 obj << /Length1 1692 /Length2 8142 /Length3 0 /Length 9268 /Filter /FlateDecode >> stream xڍT[6HI49twwC 3ttw t#!%(H4J|Z߷fyg5Lrp;2J  Pee5"]!㸬CB0EEԂꞮ!&=$ /=@A pw_ߏ0'@@\\;@ `-  rP_!89!| 7Q E:!d6 4>\Vy@( (O=` q"kE9 n /pB:ʚ|H$E"( C~(@ ԇ{@ݑ>W Y fws_)B= `Թi {;*ӝ} QSAA!HP\TTDy m`m jwPe@? = (@WcE ww' (o\#PgE\( yD 0,K:Q__ { B`( ]'',P E?lTdWQݠ0O /u+Px?QQt:h~O0a%`OTygկ׿/C]%#_Dt]6zamt$G ;ibL?] |9c&?t5SԿ%[4#N8!E%EÂ=dXnǒnĮ PvN̔IL+>@3cb@Y'zXd{M\A/⩿nY$ .?KX^6O`$u"%_%M^\2#-mϙΔA!GmPdt~az ꈾ4~:ص2yLՎm&V~FRl4;Zlty-e#؎W^ W3MM>I 'ʈ1iz + oh&|f%|r/BGsSOQ$N+gsr63FX,@:+n6 Z5hS}%#uZvZAz .B1w-/~_؛wYϳd9="y蚑?ysӚ3pm}de+"ɤ+Ok4\9Qy)b/rNmNRD󓩋J2+~1@詁!™L8\(J0h6<>_E]ʼnq}~C2l{xi{|0Tku'3˃~tb,rMv"MՉ)4$l{Ĥ~qM2EE&̽mq|_DT_wIš-@3@ı~U͇<;?fְȇRo1фR}=/%n_z`aԞo ?m?kb`bm}|'W4o5 N>[LLkb4UKwhpf~\= 6,-̻Kf5m+ۄ $5ƺe?˟hqb'1\ ʤ2n4o(*KUN1$(sdߗ0 Mhsu 4t@@OanBh_Ǭ 壎 ))_^w1VX  Hώ,sexL̪덎4|:`]r 4̽ߧ窨EPE./ ~uѤ٫5,%a|Xh<ȃ,%L+*i&;f0cj =+EPh_0-)Bv?Øyo>\Twzeo^_,DotĢ1yCh{uCAO>Ge73Com妃7(>3+wP&;KY{c]*vi~*w(WQM"Ƶ׫S-ر Q%ɓt߫93/=¤{QRnፗ:~WKτg=>*,|Ex/+Lt+夃sS¤j80ݿ5mŸ\?p+>m65ϥM޹e@ˎR2O+]>}l #|mOP:~iū~/HҷѮ/\Ԭ8k]5\Є%`a$ͲUpY'_eш6^* ew;D<1*dӍ^׵mL;Of4!zkgfRةz̢Q;` ۙqH3/>ڋso^BNcTz 7/JB_&S?WJ.]!c0uAX S`ڊ~w*`dʞzzW,McN F靖gtibʑci$I>) u;ٲNP6?Ey4v6GRЍ`dᬽ(ccV--q9SC>? ~+_]3EirjQG.A9R4a2B`Nb+*LYY4V.@U>O 71<_Q7;_*D G* X76$Ŝ?J[:p["x_(ij# u=S(] qܼOk+]2wjGFrWwMuCd8P{Z\fIGl7fju>KR~Qh{aJo'ֲ٩:>om6KMȃE}1 TV;*TgX|yƂSSvEڰ~tα!ý{f2B ٻ7>" ^ !tq(=ń7xmk,kͬ '%TjX}0$'bL~Bi)!Ϙz/ܔ,OwCMRɰ$Ayxj.k+Nnw5+d?Gc+{eY˳!:P"461$SORQxt*A''&+^F)5w*35wϸW4f"3SR_V}VULW: B#"$ƛ#M5$/kj__ы6!r*|wwߦa+\x8na%eIʊg hHj R kKkg><|k @u(jܪ_}ԄB M!_{'ڏ|Ĺa}%PK@Z2VS$QIy0FcFe^Io.l|aM:`t:`^nS12?-0-Cq];/y0wR HY4i$잚L/2}!Hg<@,fQ^#&båi={eD_k/?Ԅ;/# s|͜BfSs+5koc?:wkE7𕸠s>ԞƋ: =,Nv))GS1e8[g]"͓Z7iOu?'I[%T }j uey6@[h}˘z6,WBmV$@ftCCVev=?uW > >DV5XL7FSTȖj~"@,xaGZҴmMh+S Enǹ]vMĥ2+_'/߶ !Zo;"˛?}N-ьu*DO4#h\Pݤ=` VMD8C#|JU )klmG-`9㵛NR=AsYr251'M";NbXb{[{iȵJ"RGdMw;»f2F ˤ*39l38AiCҝYf<ϗ碂8U9݊-0N{jZ}Lk OȱW ޳dR<+>Mi]FDm5 9b[)Mz,2U'%RxK=Y%ˈ9a+73+iBikCО9HzuvQ-Q = :o8eʌsFz-b&75]O*x ǎaryw,|'RgY0 5."YrOd0}M{~m7/>UA#_y;JW&6cLʨ_2px0_yn[d`<@$,؜pl]:lKD>pqμ'S6 ; \$|g-1ߌǸ{Th῔Œ텰~&74>s]ruu3`'n$Ub[] WBs@255jf+6yQl>6XpDJ>7T{WNz]}̺3eɛ3 3:45(wYw-l1L/&jvċx[mrfEy$5>ˤ,)HS6{3n>Q٨l O:ָc{W3ƃo}J˲ P M?U.Z3Ҵ3̫ߘOGԻO݉Y,) dKx7oϳϣW%7_4y,4le,Bpʐt[f g4֬8q9n =Ze>sKiCt(Pd{p<$j\߀H׍hGebb\R]3OZwB%K%<}ͽ8alhҘ0j""tHq=GHRk J>+%ƣݲ줾UcBD3 iWF ]oG# Ʊi2>Z8_C{@q`t%8>+#T1 '˿޳Ȗs{nIˉH ؜2LnW &o!eO Vn&" =2JneZ: N^ 1?D޵JMûɯ0@'M[{vu0xt#nx3/)0#߲IDw֙̾M+0]߭U_ϾǷcR]PY=KzČMTgъ_O]%ȉ|5{SfRfCPg~[e? C$?:\*Oޗ;oe.e >x+ vX4bw$)"~>sK,UyjN5Ug;5G/dnFӭtpHAfmT;\}KG^&n7ڰeE_͵EKg& }?*0Igkb$w)- $Xr+ !5xũ5m1z}=*UOtO'1M'vf{R)D8 ~اfw_"}`,ä9X!:A`"hEjÝsB^XH~~Ty?bmߗ!.V\Ɵh}i b !/_ƶh[w>RZx.|i~s|h\qN)HCI/I#hlm-f 쭊 VȔG:1MW]Bӱ!DzSr٧g4=5kG`)T)zo>Tޞ4^+qhf߾Ѣ,ujQ ǁ ä\ )8k1^Q< (fg,(,M]GjP[rq#W]rq;:&sxs[ S)3T+/"K?eQFp4P=I J0xwSxrcuB:F/b)iYbIrW% yt$~ް+}z> K^*NNyVƵ9]!*0jc$"F?pb {=7 LeSz_ x5 endstream endobj 356 0 obj << /Length1 1418 /Length2 6182 /Length3 0 /Length 7156 /Filter /FlateDecode >> stream xڍuTݶ-AzWHR5$BI * A" iA:"EA"Rwo,xods͵Z{XHA!B" ,PUB`Q  h _U4aj,B=\"b@IY)Y0( B PF!*pp#TvP:]q;B!.@c#&+,b@( u1p'50.g2 hQX/.(ex ap49XKG!! P$rB 'CP@:.p]+ a  \ v8!;ʆ@nah \~( Ց0U+~@ácsH&lD{Rp? HJ@7QWy7/7A h~~'E{w+bvp8ng|4hiO N^0?+lkpG~Bb`PDDZ(%% goj!Q@?_{_sY. Z8?"K/oN)W;..üGpK3 gSL!<\;tYHD#0wp u#?/ p݂+t;#(/JH!h4Iw~"8C޿ !QX\ 7cVԅHGsE~`+7 !F~1.?z8C C3(\je&/Cğ[c,%SufiKV rzvu:$+"h|r{hh7`U$U_&3~U,n5*trdQTpu0QgOC2Uqk q]C {c@/C\[?zBʃbBD䥷+D߽|:P>k:Sm-;~adl,em" +<٨6xYE$~&[2ww"PW6) кX{m?WNj_(IqZ(3|=-ƛ6uHJ3A3H8cra\ce"+lkDoq0cb =H$t[Ep"a|0D}"'z5e؁[iĥ+ ,>.-bţe/ Fjc`t82#"OX큡Ap9 =ɀEV2KgVU]fA- GM'- jJӴ>Z"? a.׉e|h>w ~HOq=f(߳bH3 [m2XBFk5R&I/Ch%.: v@c<'l%nezCx 1+V!Jpu a$Xށ ߞS}6(~:Wg{,CǬ}Ⓔ4Dۓ_/yB l[$'GR6ɬ-\X)>ibJ)M,>iE/;X9n «eȺ_ ͽ>~2wTHN|9vYg:xaPv䓮u+x=u/ԙģl[2n皳| VS蟡w+ӊv#ʪc[Ԁݷ?=}BxNğ+)­BW 2R ]vOĶJʄ[h5L7pI}c2:z<'i{\!2BaaC( -bs*:h=GiNLj%<Ԩ-U;܃ɇ>Q2!0c&1Xq 늰xUDOyƴC>#aɕG2+Q2X+< b"%I:]!~pyK`zF`畵lLGآ{9Ju zh n;K^m(F?dnl8pZjN5 K J$[p>j8\-9 Jp  T6=ms asԡS튃!*^r6so- AbL޴ XŘ< m)bWAqR/=}jT ;_p\ ^Mņ 3Sij^ݙ;R:yrv{>C4|,oGG+cg;SĻ,.:,Cm}Ăpjmg2 hpYgc_qFwҖl"@\pLD"!Yo?n t%d9`l೺ɦm}tq;?r@|Qb\Z]bW[0}.ݧ3Qq{ II0QKVrmY̯5nj8]g,äRcX*g,X +ptTK檯UXV=M֓p©ceyr잽xF&#˟ԮMW\M8Xt>y]JMSmgMK]V˟5-F} ~F aɼ gO&& YR45,L&2$FO=TyJvtIiS85}z酧ʭ{r:zv;F,I+kh?K4Lj0qş,rA;:I]?H1k[vb%ѵC4͒-56ꙺu0 Հ>GH=l)ٶ̫^KOKh G8r'@Sh[Bq⣟yR/32]HFR{&0S"9u#'G)M.^~/ FQ9yaOJ=d1T#M# Z !燘+1iPzOZuseq0(.{cͦ@Er[:v=y^rt𠿌ٛ]ݲ1I'g E. f g`c^0h4cz[Ckm;٩B4A괍\e@rDau(͓P+~r:O['  cޫ pEFN$_;RdҚہ )=zc"vϽՅ)3 ZBo[oƨJH,}+i:Rq2ZB=.]&//!#Xg\{*z0DrI(Oٺϊ!mǪfoucRk/JHRX;]LxS?Hb(nW_f}w]g-Hު,bלq7@r$"#&6eAd6Gq0҅оd1JUC?DEgqm9%_<܎Si@LL\|uY.g] 3[ HkR}BTo=!>e7{mT ݉`PY:n}sCl-5**Fld  #ς06]5eim6Ī1ݓBX&^ ;Y}H[Ζ"N>||E$ڍ4>b?Nו]2T}}1)&#/@'Y6޾f3τ=߀*"՚OR͆/WNݷލ \s>A(a(ßgp_+62MT>u5~?*FQk1KZy\}O&K.;LwR8 ؔC+h{"t;E궵EȮh/+'ߒ-R9Mщ!cP$`L=fH|L$= '|[ue\`޸Z/])mpy@Tv}Q b^QJTU€!f//ˆzGU:|ReyܦA pUy8[kLvsUșuAZc6rӶkush3mXNqZKY]ߍgSBCUin$g#لƥ)xXmNU9 >h heW/gpYLm0`!½YԢӱ=4Q)д [9q:M, OZOGn6vMFdr- &gI[ۿ>|7E h{b^\Spb?"#Y+N"g׸(D̽;%A Fo«7~{a¥jC˹[ri+3jjNiJ5͂â ˓xShM䒜KW8c5ϋ4%߷j^1Ũ-ߠ|QÉ+z'cK+wCF>f$Ǐx  Fk>йa> Vk}dzM43~By Ehޔ|r (?HA endstream endobj 358 0 obj << /Length1 1867 /Length2 14004 /Length3 0 /Length 15167 /Filter /FlateDecode >> stream xڍT\ 4 n @K.A ܃;<Ƚxo{Vͪ5kJ]U $adHh+pr8888P;(t WR. & UnvNn[AN>A.i;PttI9:y!`c3 ar*@5uEs@ xO akIà hb%C W;GU=P`׿Z j\_C,@.Z 5'_d,7tGg0 vX@5Ye6'tsu|v@WŸҁY ¿s5w;A\\vGmqr9@\Q' v߇kd v 7'vHAoΫ  Osk?rZ  t .n ?;pr, OW3/z.`O{pkY8:yCee%.NIIGO+7/{}<@:`K>G=07k 4!/v3_"Y7;? @{ߌuN,8_UYW| ׎fav{,s뿺/fv;a^88um_oz]Wa} P^|8_g3!!.(۷v?L!>ko8rW?] `ص^ ~?Hn_zc-__EX@y_EY f_UݿṈ; r|/˿뺮_8_/p|_x *|U'2wsqyN5/'LX~MXL4"??7LhDF[dLDrԾa.hF*eƁ藽$JinO A f#Zb4B 1 V})R럨Oב%y4b.jZH}S]Z*+";,;yZ [Wjp2X59s:5e8^]'9ptK,E|+@3k O;qHN^k<*f!Mn9p6~{8 PU=Ysz&rs(ݑ_hN@XϬED9V~ qb LHߥWISpKh0Lc%]^r(Rlcse>5oOĢ:Kzkܯhj.5ԴgjQr(.hċB!qAq-q˃.3évϭnڤYWOͨH%-t9ij%\Ro%Bj SީFo&X<^9,<bw c$Lz]cʑuH|S0>*޻W6bi(  ~XI-<] [Lͫ#U/a@%V'5UQt'3:-: ų]ee@5CystFP32b%iǚ˽/'Sp#rCbYI ;!W[VPmVŔ{ LWޠ`aÇHDq=<^75U\>rkdTDl4ULwΒiT CvI9L0_Dݷ^Tk \"S #-s?jBa#)+F^}A`koI.rmTM^Ykh̽Z`wI#Z#~Ԝo2ꗵgzֵPmFX K5{;cR2~;}mNx4x]2;Hw\A kXн)  ۔N+ -;qCZ㻝 DED;'#Uy#qH0.XiةCa]X~{MIǨI7d¿`S1?iXFU}R̋t:ò`MnA{ Q*CjdvYrhnge;=be2+LB\kb@|e6 f^%mלm0mU|ܥ؉qcPY6W[}FXWA. 5roOP1j9#ViD nM9u? Yj|b'IeCr*ñzԏaV志>HŰZ"[0h'Vȅ<dBdIPyS\Jj1/' \ziw'.;nmҿmn~Wtcbcǣװ. IeR7FpE3z\MƗu5/4hkX0 9>Zͽ_C|ˑÛ@\]4T3~22((Ԕ6Uw0ey .aJD,.ȪsO>%{ W"uӄÛ: .;nk ~xL`qNU%Cddm5ȌW;'U'E*5J{:'h|3q’wSѷm˻j]7ũ`9z!|bia8̫ XsTQs"Ҿ j{svS'3 &{yHN?秖Ru. Qm5]n8٦/l|Q[M&] `FΙ,t'BaYpع7 9! N^`-o^gPb 6v#/UKuvvCNoCECP}uṣ຅]ܦQdeD9Y<,ģGu!OvB_)~(#z`dRdޓpȞsLvffFČZjie GⰇӑ=*G.*R1nN(?#"ұ!j#9 {<_97=%ڪ=esGK$gRλ=$L0 /w}1;tTyPY5azNn㏀$K gږc%T8qf:~EӘ ,zT s3ہi%Y@=Vxs"myK&PvK,}Tv;M@Pm:)Q'#(dD4ZIlwkuq/X/k a Src>yȾw0OX{FxR{ ^÷y%?"#~IE$el5ںعBV1l39*&S@ϸлmӺHĜ2@M'K@kzX*b3;bEg˘^74/+'lZb+0dK{gq=0wGppf[h_^Ҏe Q|SLd7N*_+#pfXC"maqИ6[u~K&QҽF6v;: EchSf~RREYe짢 MJF0Q-ӀiĽZ$.,H\2ԑx숅7!])?E RZ<è؟|?)F2:w(f_o4Lfي&+|TT<B-˟ɏ#YF&Q؀, 31å݋8cG4V}X,n-՝Hz 2Oqllq :/^ ³<\]6oV~bٚ:zR]DLvk*}E9wxr. pZ6njOk9z?j|1ӗ ިtwڭ-a,^F&OB^: +4Ԍ/FNtG$br4/4)3vX -BU[|]Iyۙ/JZm_u+zIҕH8K 6ܞtOoPJjx+ N`|5^ +q%dfnƟ 5ph+Y0?K v'.HF6J!wnyA0'ʚ~&Q~fIa_[~oBG!I{p`Ϭa`$\&C=2d*1Q2ch2F!X}(*X[%guT4 X%U2֊=.}BWB mz~<+#ս[x< ʺK/dl{Od ;͒ N:8}l\ެ÷QE25t"뷉 9${|0`1hcRmݷp`HH$Xdǔpv>m'ae+&=sf~>tkŽy;i)s􎲟CsMm8%&56ѝ@"w >lm&:u 7yJO1-AxN܎( -{X O*4KabxٯI-t ,@Ux;ȴx*ߍ&3+ Й(t'yVS Þz"atdY˲,UȻ58&dp.j[1&M-?I&zƝx vo] 'eTtq?v4)L]7lxO|/*¢oMғd/3gP错4$w!g}ktЊ?SeU*Ӈ'CHkP|Durcލ/b"8n))B%`.o\-%U<%N L„CֳfHz)N2oe4'2d+?yd vNi.H|"JÛq&%b&~r5r x Pʐ(FWDSߕ3yl"{!徯Vk0XYuI{~W,֨ܽՑ?!M_USIϳ|8/wޢ{gr Nԟ,:,kM&R=ƽtu:d#BsrV7ݦla EKjuо*@(M=2X!XEbD=)ȳVkYv qmx3(Mҥ݌@4eb05i&*Ez; *W+8 : #{+QU̍Ggm;J*W `KZ2& 1q P Cd"oC>5YQuhs,v]BhuyDu2otOq?Iu<$#NjwE=09wG߅gZs+{7[֨C{1-> gvŵ9/nDSP"~PMBHdYqcQvkZa]CorЇ66Vp&?|6:D6pb&sVdưLQ1G < ()~7|O]Pf~X/DJo|8#.ʁgļ_U_4F- tQةaY}ly߭iE#v.e5!Qm[+H%EQ8%3*{_qf#Yd4:]S>-XK&5Wz]q$p)Gg {2gˎhWh( {l QἋrjw jNitu5lѨ'wLZ1]W<8Zr}gc wH׎9TA~RF2ޢ}Y6@Հ 7ZcXy==' `boG!!0g' CGҷzFHM1!ᔐ1RR_̃V1CS:PVeZ,YW<²eX{gjޠ|˯/+RYcS| (9P곐sqި3]ڕn[8މ]߯F&kȚZ.YdpόS3) o#6?SeFQěw(<ω_ +욶,Zfq #3P|ᢏ}^VqГG]begm͉ޚwዛ|dA=r.}<KRȹp^@ RZFQںbc/.Z8}囱 $ptG tj ~>Ldl.%/X' bMF:Q\nSu8OCԍn^Fv37١ d $[S*]#{:Scr2`ӍUg$MozV^0: Υ9Cܚj2g(NǪ7⏍q*_p+}E<<.o<DWo~4}hcR߃_y9$V?d+ #vI)CdDmI5J+9lgy' 5UŰJt[͗CpG;TL~ttv٪_(u&G=Lpk͑UBGNYlYa޺x1;yYjhӥL>B]%&k3a.M۾'Pw޸ \a*ePڒ0lֳg7IԖ)&1ƶ@<x) 0FLǜ\Ϙ".ua5v){be2zaɑHGz̮Et/4"ưI-FZOS=Lqق}fJ ReUyp>g? gK#[@W8 HrJ0.* u F%;,6t?[t) ňO]ci[kE;t.Y]w a .Z rFRu#=󓋜 `9x* Xȍ S3+?yk:ӵU|eIԉ6*xЄ9}>tWG'ۜmiaw:ǃ%H~b&|lX|vY'5<4eαɽ'aLN,VP,`䁚LQ1/1,ߐ*АqLhw_Jx|O]=-_+ec)㾂yT Vᛛtn?*t/YEr]]̊24"[NY1{z0Fv,wבӘtg$,brK>g=s}y@猀Hd)|2=!+g ('bh2=zӑsZyI"-i찳>};PS7 cP1цe7g7vۘ! &gcFra2‡ƕ:VRK~TT/jx{~au|A%"Vѣ4Bӭ?gD 1(fMIZW{[6,u g2^ΒH<"tfSිvFfGWxjf4\W Q ҴoF:OO(5I88W~g.Tja~ND;cĂ,j&t!H [ʌ2h<9"Б:=_d͞:=xnhE0n-PHqsHZ'&^Ggx/!*Ek2?eMQ},aI=qFg|;FF4_9m>InT=쨞*Ȩ8>{xѻP_?€0Bw"WcrǹI\? R_IQ?zv28g̈́a04_N&kbMc "c c hlu)a|dh|æ?@ϙ9%BNjX;)s"斱q&qdJjȱuŕ|ɍ^h(74w~9tJn sIE. "#5y?M` NO_V0UZR݌8B!] ,jZ7jT?xҴ Ha¢1ߔh!vQ i8T..ֳ;/gM᳣*S$R48l!O{/KZ#DbEM/nˣJ6NHHBd]Z_NۉK㨄0k2K\nYW]zkJ+5ҡU&e[zA‚o_qegvCoHLt7Ed#T .C{2t,Ai9ҹʂ.2gLTh?ه඙A4Ѻ̼/8V5ROЁP0&8o' #|aX:~pqj]]=;wsWxJ hxs TBOoI3h`h{mS?buQ$5 \xOr#OKbD &l=Μ`r~`vA4l[QEG*8rԷvk^߰t$ś&fRP*]Xsf,j<-vt w\سzqo>f)<7Y!I%S#&T2Bx0v: cL7ѩ>@TC;S"͊eEく;W .)8适Z/JύcߋgfqTQ0n'k 1a[F[]OirR~M3.Y{?#b)>B5oâRDi뀨+˥_oul|)\iΌ\mG11׏t5<* :N?{P%mpſB@<0'vxQT?+ <Xm⨛ZχRp,FLnTvt"Q(چs6PmQCd%+3GV RnKnj 3t`7\>ӲݥiV(=\Dogr+/= XΆوZ&\ "F0s$LW:vz{CGXF:_Tc/)uP0KٴȲaB xô)gЏ9~MrQP+ͥ6mO S3Qܡ=a|ZOMv}8 3c_PG 1t&d,H|>~d9 r-ܾrijA#Rߺ`6A$zti"*wdFvnu&1N'Xr d%ױK0 <{ɘ06"G5:{B~_[JUy^ENY$d:)E)y:$5?hnQHJ(,Rm+gZ9?.dSZRfL[_w^cz7 F|ض7&V<z!YN3Tx~Q$KEt_MHb> ρpOv%u'?5#}-z*^,(zI4^v{1c4(,آ{qeXETf{˯1_/IS vo(i"o8@P/KIKCrFVl&3cۥpIGd R ӥnj s6>`y[RQz lNjp9_aٴ2B‹X~00vU,v-O,TN9 nQ"o/ԉ.T݋^4 wKX/ef_y',Q&+t Hv?7 T,*zɲwExg7,mU4g/Z6<2zCx&chη 73'o )5q n2 ׄx}CveBtxS WD٭iRRWאoҀi$*Us"L%:|JL("&e:EopyNlQ:o# |Lud9 V&\Ƃ{dH:N{v%o}lJ:W:g(ex.,0, 7)Y8'9e\֊{AyiwɚHt`x5Mρ,ק (aTëBB=wXxO0z6b\S2\-s?ZߒX_kaL 0|<< ;CWe\F-|}8n7jcv|LS^PX=LXO  +oTNp endstream endobj 360 0 obj << /Length1 2649 /Length2 19026 /Length3 0 /Length 20554 /Filter /FlateDecode >> stream xڌP #%]www HpwA9ܓ+`Vݽ@A b`twe`adɫ0Y)(Ԭ\mSh]ysdƮ Cy{- `ef3/@ qS98z9[YXx@mJ` bt25Z@ƶUS+tuueb`4satpxXZT.@gw௒ vJcYZG`a V@{bJ1=XY _v665us4[rc{ m]@V& S7H(AS _52f {31;; _[9MA}bpm<}̭*͑I (- H[ftp033sN%_j^,A58:8Aé?>.@O"x+hae;:H 4'@4~,~03{[1*?%u0Xl\NNFQ2'?<,m4z=&F{W T#0%0F\&߈$$E\&߈$>F9@첿]7F vĮ/+F >߈ ~#ob@욿O_XXA.VS5+ggK $+߮2L~#PLMm__((-htdKbgGvb2r5s5vASRοNn7 (?LT( s+?vpdbi*wqraYA[AewZQeMeZMQۻٙuZvgr4(^,,BA'Ο>;:G<9>OvPm(w:9L8>dGY@rrYqetH8@A\@O׿bkbG`PiA3Y5P ? Х_7 h `jN߃aR`b_3g#2L*MmN/ԑ^] [UӶ&d'gDiSB85'_ 6.'7ndORj9e+fcJ) MrpH]ai.=C˟z#I;c+b^ҍKCy6>C#z&SV)L9>@;ErΫ+'l#5NՇjHxCg!)IKIp]3{<ʻ[[)]Q]8̵Vu'? yhn"rz>39Oo?ܐaR3ߣepQ$֣tJgt:xe?/} hM*0Ak%6M<@ΌO/Z'nV#!qxcXQdJfAx*z$xn^'78Kk&A-Fm]~ˆdp,|bݱIʂ8i^_H{iq,m[#ts(DGFk%{,T2e&U甂t*'K^ѯ#יYm ҤM;˦Dko_#!S{L1]f4|+X@ܼngpr??2':Gie@&c\l y*܇YۗS08OwjTEH<]/5J͵@!O/vxM] #l X\Xj\"kOJь|b?Yk5$aXhkJ,U1=ATkva*빼Q[;)K73$o}iYy_u]gGFV?6YdF1~]! 7,6&(!eG\|,U,?5dž~Do.rG7K--55Wũ[:0* .LشS$ڴq]BKTl'aO,}$ TrSs{KBa rHb!hY,<Y ٙJ u Wqy7>a!8jeʼ#M>\qw)i `oɺmz(1~-$_Z?"'K=$򵓘2s3.'~+bE"j*1dWU`6 N#dѝduB\\{9:%+oT >3Q}ٚAOS|9EJv"tK룟M#p Ԑ)v{NTT+Ċr݈o  ќ'5RkRCFHU 28'.`i[{*Jo YvH0Y)AvձXnt!:c`DDZ=GmH K^vgJ05GbKIW'ZMUYS/KrK+*m$eFԝ6~mqEBDQuN*^$B6hFjNKNxUJ/1t_*xJȒrIm&s6J&A`̅}%s$Hj!_bT*苉Θ Dv(%2{35-ngW9&'*jn>FFF*wICم櫩Cz2AnD bLhfLq5nZ5v 6;-<84QҎ5T G{=9"yZ E{*n̑l0,@nxhOcA!A\/I@Y4ReIlK-F>۲i&S?{8B( ƓĆpftj>DVu߱>Â'CWXlZ0ezv)̜Ω ][P sӖ ~ɸPQ'QTO.J@:5tTLR̲CǬ0AD1,_P Ŝv*wٔT b/h})yA"'н=/nBj*dR]+5k~.&0;DuI~j޺VpLWaSa]w C]]u*'2C%GO x J;Uz?,B5)syKC:BVEdͲ]Ӑ2o%Zt%}3ZC[sxt둈r on8̛8lņ]v}LGW7n7;௨}Awʤx5@R(64C8itϢ3osO ވk J )FZOch@ٝy\-G0d/)B\DY~mIZc{Gl9T;tja@_[|{ΤEd@*EF.%<+*.aROpĞLoKذ U2aasW$[r[&̲* Ҽc7 R.TE>|Ͷ!jBy| 5Ҝ? R ̢dn\Xcq}EhbZŪAe;q$>&>usᚈgi+r>1PAO_}hjJ,#jǼⶈ'O}7:)1MZƵ-@-:-"-V[;lkky< ŋ$~H3c,Vk  rT{3`i)qɹ^5pJQuDTZ5vamx\H anK[muwx ^laãrdca@%0r=ިlhXnr.TAUkyIK=7T#/&v)&y9 %{RUBwkIwiހC.eCUAk!EKY Lx0zԀSQTpj5IM{py)mL%jCS!C y~u=ƐYpHs^ӉH|] } nV!Ȍe#H&#G;ǬVecpL»|b%`Μ ZH_!D)bR>6*;41",w:FF$a86J)M71q͖>Qu`Ax͖Գ盨D(zYIX\qAzQC滾բpLNu8A2*n0tѣ_*.K<?5!O/.IM\tG ʲzcO%_g*oͯkUPT;2l% Iͼlbb |(XÍ"B<]Is8>c-(rKpٿko1~2 39)#wUr784c:\Wϟ~vek{&a*mx:ϸ3NsiIkKhtb@_3 wqv^.3dmRhR&-`vbމjP )sqq›o.#<Њ1C1=.ʿIvڨ-ɯ%_JAedG8@$pEy_\Y-,Yk" %QTbbxz-thgZG9ZݠjsğRG2=tg$m+T|⚢%ݑ&2;jTO[!{-Nf f.kN4dU+>\VbĘ|>Vgg&Ls$P\,5ij5 vS}hv.yRKV\Y(ȚI ,+~PsBzVTngP@q24ښ6'ubAZ44 8𔅼#s͔׈*|qR g p9zѮ&}*5!R51}VmFJ?%I;Jhw;xPM{6͌4TdI/%3)qZrHk<-3?S֨ %3 *\{kiL5qZ"a5pPiR:uA%7(q/c8| Eʩ2U޾`*79oTq7[j3qe;3w tV^w;0'AO.1}e.O&4rMKͫZZ;]\YqqeqWq2?N r:@8=+*YkGl'2LWͺ+`zva({l }+)/Q) ܷ qW][r<d;7̅lb_&ǎ7P0.Uhyɠ؇&t=lbqJ-JF(%'ol<6 Yr1ҕySc,Sξo~G";li<# Ķ]ϩފ>^hQt:s96R^Tbm/aZhL㜛 ZPLI2 6_iҵ=È#*+7cO|6ӔwA~u]ӹD}vYS9TT$Z`̰s,;AyZndɵ {k:VIZƉ6:/4(2I4JO̍5d4wb'x+.Y3e~BR'B?TNR.7RX&ڌ5;ro2YUڇw$ÝeEv*앶JlSZ޵WK> zޠS$;7S떄&i8 =*Kn7Nv͊lhe *(yD+Ӫ= (N LB )ȑ ,B|XZ},R}y.(_t"!?]ѦXJn+2+,{bJG&YɠmD|/nIX@ #j_D 6I`dB6 u?ClTr ة?ac܋Ah=s*ȋ>V+#ťEo/S`1%xG)륋fѳ b `b&LRU|H΍U#jIϖp=o/LZJk k8(KthD=4wIܞWs}G+oHMQ:L yY=_y RrH;qYѝu_$!d #ߦu"Ǥ9]DGxט8΁e[6# 9`J5uVX8[kzfK=ܕ (2|#Ob 42y<-H)JeD\i0c>d1l6ԝh9 8<@b/XedWF R"%ܣ@:+~'9yY4|[clͩϓDQ׳qeeCG-M{/BϘ^MĬ}k"!8u $(켕1e)RÎFU\/D݋)ht`unpyK˦*K&bspGƴgbFًGJBaGl;׮3$e6LeH@6^+t5 > 53#u4hNyf(R<`DS1bah_rWWQOei.p1O WgSJ),g%Dgk d̖!\;7 =/+A\m& ͒oN駤rW]4 uXrwތ@#1>~2Z + Cq<:;}lxl@?|N?<4 䲋 ޽i]eǦw8|s+_ύ}{`Pz< B5֓#ADD|jyeӀLֻ5Ä8ECj7hC5M5rH^<]8 5}υX!tDW\{SODJDӮemO a;TOZ[GcuQNv4K|ds$'N7'; k⃅ 2G7w*C/kJֺ<ވo_ MQ$nȤ9qJL!hR:tIOh0D?L>D, aKL@8Oɻf@/Eo%gT # ,~tm ?DW;]u~~} ).'G6vag]@Lm2^[$ [Q jz[%#_KAyRi؏8,S8-z}R]yD4fg`-0U.vl Ck48RGձcZ/ի߾h碑Npw 'eyGis>8ݥ|"Ik \ C@sZvV3oF"׍"Abs{F?gVL>xut]pZ t9b5&k5,pM!Wɲ߅[blKA?*''eZ`yE}xƅcF '|-VTvk0mLK 7-YkHy%[ Ot<ÓH$Xҟv^"?3VA‚#!g.\>gƺ^LeStTC6B\ ڏbYΪN)ͯ?aI"X xS0;فbzL|ؐM^w;NGu7nV7k*ŧa"Ņ3}e)R֝)Rx\xdt9B91^Yd#:kuڈvy \嵺s}JͭD6vi}K SP#}S\QJ~<1G }=]ɢaWM[Xnٷ!_A:I̙:&H4ҽaw$)B`&Pv9t@V"$}!nȍ_ X(U#?b292Abי=*I'2T{R()]Q-}wF]ژY |!AnS>f{yvd%\2" EW!m?J `Z<0"c͝s-}T%풺cI 33e5URб4Z-a+q.O ']<4`} y- -Tɣ_qV1dl4~pU"yL';v4>r6Fab|#\"[ҋgB4BۈaZNG7 oCFBrxuA8gcz&-_)of]d{O763K, DW&e\RZݾ+xrʷaXL:Gbc #ks]!#L%C1;a\|!Em&ȭ` ~_H*|Đ>Ⱥqt݊Ӷ'? Cm4"衒`nOIroE ;F)j-B+F'bX$#n)ūй'0y_UvE1ІF(X4GclH07xy\(Bt9>" mi_4=ZztمLl區ű[;:z- lZCYt_}^SKR,91FC)Sf+\k|c(;f4ޙLg7]!5Z@MDzO{)m5 dt4'EICC#'tP5)!*ζwrUiXmXSp>e*RkqJNcPB3}WySAv̺g:+_7&Ed!$CM{?.} ݀*!*;Ѿ^7 7^QBCC2{ a?gotJF!-=_)I-Apk~혏>lhČ=1/1N7'/ۙF_Vk{vLBh Z$o5+YG@C=lPm4]jTw:R#Fxp:ׯ_ _t]Qf_,*HUMIҙ҂BL G$hw{*XqFNJzhO4ުzQmQg5Fٻ #nQUpq"y37<>}roz;^uDu]4c|Y%G[5X*;(d`ks 76>9qႽdۨ}:cM$巫<[#o$_@b~~AI ほCy?sR~\^1q]~,!B%K8"0TV"yގ3,dƕ@@DUrv<Χ~)hB2mL<\t1l/ayCuza|9Qo^jxUWӲjL0)pe_ۚs1u8^#:UeI-[5}V?r!k|zִYaT@2~ _C}FSuCj]]V&.[:T{/I^Y~k3| fvS%Ggs633i*gĶY7:ǧyTO=!qk(U#pVFK/#}axDLW0Mؼd27|:qC`Z Z3~X0<$P] A$)wD%v$b-(jUmWoO[m-QOGP#55+?h*VwEO(jB*bA׃@ԇwئx$JH5A-8=$y!$L5yBJ\9|ڀͬ.RZ ;0zW*^/pȃ-d߯b(1}g]D3Oi*Bb+"(a(:N7gL?n/ՕɣjJҐޣt;ޥp$Qae-jJ;lAXǺy͵ $f~}dRW8EikP6dM{-֤xKU'_L'e9nPTH5sCJ>;xL^`IcdL9[x^@ ~ )?XrbR\X5KG@z'L(cg:`6![ƍԧ)k Gkį"K~UhV|zӎG+p<'5i!# LjV)gPYܵyu <9m(b2&HɳIS#q\H3scՅˣ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" wSB endstream endobj 362 0 obj << /Length1 1457 /Length2 1976 /Length3 0 /Length 2901 /Filter /FlateDecode >> stream xڍT 8kV`)!"yS 0eɚ}TġY7bL8'[Gt*%v$Kq~TrB,)"q]}} hoD@,@4 DS @lF a8h;p"D\84`zhnnMvl ө 6"J` <^(Q<#7F0? B<1ddIeCa_̛ P8Lʅ`t)q:p`~sш|&St;`$0a܍|" q|jfQi(`u*pTtxt.`dF ͎ÁfC BttE G8B$ńS2C߂u<ua>B!> 3ccE(,'fD!.&P̄&G+b |maD|@Ba:ꆘs6z\8PA|eDGP\] GDC"0$2l0'xS.3]&5dž'-iD }6q\Rێ,l;8 D>[6hNP֧yNp4Yn̹HtƂțÃ%7 0$PqۃRr6zEGaHDF"oT.*P&dCDȀgI Ft8p1#57x5gtc1փ_a=9s^lukcrPlۤ|XNEaA% &jffdaMc7t]}W {$rwm[!nܕ҈cl27mQW;N&o$ciO1F xi%s+^_x\qw4I?40hYln.\7UcJuڸ.g{5[5[c׾)p)F&[c'"lsݜ/]6fdld]ݮSŴLsXx~j|Y,+=领53lq}cЎ);=88qRtQ9RՅǫPwK1;x<7k΂0܌O.ٶc4L}(oYt!eU{Gw:poCZ%baN ,Trvݭ榇3ʻ4̜[]>+ 9 Ó7<#O/^κi__ڊ[jSUvur?t\Z*Die딕u2|Crdus93mesM)#NN9j]&_c_Z9ᙚކcA eT}CX>FTUmW/<tkcF3mPp;x_gif)s(>&{K79*X5I2n扶A>"M+*?u6lk)hA{!_>KjbyYQ[ܟ{m$O w͛Y[{~@ 9HRn>mEnjN歩Y>$|\l endstream endobj 364 0 obj << /Length1 1330 /Length2 1096 /Length3 0 /Length 1922 /Filter /FlateDecode >> stream xڍS Tb"U[K  |LX"W&d&L(V}jwVR*&aQ|Μ]yq˽Er*FQ$!c"P ">pF DH !ưaR9j. "A1 E A'@ upJGJ#W=eq" #cTPþcj M Q1V(1Oʿyx\QAZ\44p6>$݈e9`r1V&pHXRi>% V dFP>:n -S-F(5Q>c`F@LXLj,Xr@(`lp2:Pð}$FIF1Ag'oI㢂 s!`Id@q(Uq^蔐~fhU yZh1Zl|- h$qu΁ %93 * ":M@2ǒLNp˔"(U*yF@,Ɖ0b4Ť#Z?Jxb(^=Cp@o[\Q7_M)*Gx`B7 `$8aZM`"Hz}.0@yX]$Nͻ08XRɡD úmc G{JȊi3xM+c$ØlO t_{(rqʟ4.?uӬTڽF}X9S}[cӬdž_N\?lXz7c'@^aSEg7m\wޢ:.=}ܢ*]~Z iM'6.wG|F1 Kd^Var .ѻNUN_akT*x,Db5S}Պ;͕zn$[j^ihX8s mŤ̸so*T*yzYGz]aJ1UvyCݎ*lsגB[5|PW~Oeރpxkikҳ_Z]G0msOY/ls;ߏpZGL:^$4?nԞ D?;`c?D%˝?s .Wh8 [samA?T .Fi®y&~}n["|yId̚}~<n>}RROkVZA/mgeSf{9*ߠ,:YXo#5J1%#qAIvz4Qdgh=}'t.ވ0,~kR8vxoȌY%W9V lpϮ[{ YYsN],q{Q=7C}"k1s{Jն}1u oڕbQ܎nkM'نDZ07ѾW)o~tq ܂3>/Q{ᲘۮEd~1x% s}5Vִb'׫8Cwݠۊi@_+yݺ2m=n#-oN-;C03ˏjjo\ endstream endobj 366 0 obj << /Length1 721 /Length2 6909 /Length3 0 /Length 7498 /Filter /FlateDecode >> 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 3276 /Filter /FlateDecode >> stream xڵZYS~u oUNaI$!Ia 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?sTUrV?/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-qJa5,鈎]1IIuOtz3.K:9wK-ǣFw*UJ7_= œ͓EсDƓ(2[tܥ'G@GCh"AmzCx r/74ep?zwowz/\ܶn9帳 uXfK~>..JD⼺oi=j^U|*&w`i5^V~k>0-Y.&fX66?:Xw`Rpg;a,Z Ff Eѕ,oeAd;#mݴ> [÷{wAbNw74Qle6߿; ʸGNY;G hC ҟM;vPQ?FZolDzݽ?@ "6QMCȂT#@Yw~yߑ'A)}Z_iy&?Lf&cnp^8L1a}w箜`(hZ^öKq0Au':"ԅN`?c [Lbj$:jb{ҏijCPeͳ40,K%[g+(6,-sXXT~KhMMuJg{_>~@uMGEx^VC6KwgNGƐ[EԱSbBzH7K%;hϝE'kf;Ԭz Z:b >B3KPQb0]Ɠ߄wph'zpX/nP<@Sͥ PF׳! e(S1c: RoJRqtp .CK @ kbJmV %3kFav9jyEEhKwKF *T ::9}=;~aV'GREL2DL0K%/ԙ=B <6s͸fe=y,u4 Z6KruكFwM: =/8]p4Ѭ;´Ry.肁K 8I%I =IKX +ߐ'9$-ݝO+߿*&%,~_n~'ѝj<! HL$As<ƾa^㪌=ٷO Yƞ};^_`;˳o}kqW|;kj3[_ o}2js_t&C,ϼI|2b]幷nm ^i3eW0{"bN9v6XF_A~3޺vǘkBm(V+GY9);^:~:o|*6s{c/W1 db4#3yuV_.-b%ؖi!edzs$:* T;}#3ޯ. IHbx#s˱oBGOxa#H,?Wn"6G9V#PoJ4YzOxsx$ĹYE_G׉Nz; &J.tI~xFLW!XS$;d xEj ] /Length 1015 /Filter /FlateDecode >> stream x%KlU:m)}B/J[J鋾(i EJ4e5qqdQ Ĩ1D=b8"1>B01HL483Zwe>Q0a0+`YORvH]Z3e`JTLdYBe5DϸFY@Z׎ʵD"a-*." a/Tl Q ;أlvJeD9vB W;-fUUS%j`}+YOmD7`s^9DNI}\)h!Z6'ֶ/%C]D':P}mD/N$O~$9H +9L 9 Z{=;Q J'ƈ8ib(ϼNbMŧm˴Z$@OZ{}~0'CĻ 0O٧%sLjq/gZ;NK%:; {S)bx=2OǟA@8$ bdD[EGei)IWxp$-I)^|GvZË[J^ 'oKkt??|=A yp7) U_㽏~oY05?j#uk*]wÛª7#^pzJ;vYuQI9n2%8ދЧv[dBu-$>B>9>0#8G8Kr}a13" B8۠ݧ^L#9.TI~\>pYLii#?J>OpwθsƝ3!NDQ"[Qge#1$ޙVL].~h-mEy^(?#ѽ"]󊊑\خɕHQ)_h7o)*C1H !2o׼4 endstream endobj startxref 405852 %%EOF rpart/inst/doc/longintro.Rnw0000644000176000001440000023722312544206115015670 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.Rnw0000644000176000001440000004743512544206115015472 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.R0000644000176000001440000001606212544206115015115 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/0000755000176000001440000000000012271150446012576 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/0000755000176000001440000000000012477010700014350 5ustar ripleyusersrpart/tests/Examples/rpart-Ex.Rout.save0000644000176000001440000010201612477010700017662 0ustar ripleyusers R version 3.1.2 Patched (2015-02-23 r67886) -- "Pumpkin Helmet" Copyright (C) 2015 The R Foundation for Statistical Computing 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. 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 > 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’ > 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 > > > > ### *