diff options
| author | Paul Buetow <paul@buetow.org> | 2008-08-09 01:32:10 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-08-09 01:32:10 +0000 |
| commit | 3cfb74df517d497ef9e0902863da8b19fff8eaa9 (patch) | |
| tree | 6ac9f25f77175edd2cfeaf335ef99809d9d32e2f /LaTeX | |
| parent | bbccf49e3e8d05c73789672be62a3cf9e549b099 (diff) | |
written more
Diffstat (limited to 'LaTeX')
| -rw-r--r-- | LaTeX/chapters/implementierung.tex | 19 | ||||
| -rw-r--r-- | LaTeX/diplomarbeit.pdf | 3805 |
2 files changed, 1850 insertions, 1974 deletions
diff --git a/LaTeX/chapters/implementierung.tex b/LaTeX/chapters/implementierung.tex index 25dd82e..1350f45 100644 --- a/LaTeX/chapters/implementierung.tex +++ b/LaTeX/chapters/implementierung.tex @@ -65,7 +65,7 @@ Auf Abbilung \ref{fig:PackagePrefs} ist der Aufbau des Pakets \textit{prefs} zu Jede Variable besteht aus einen Datentypen, einen Variablenamen und einer optionalen Beschreibung sowie einen Wert. Einige Datentypen unterst\"{u}tzen auch die Angabe von Minimum- und Maximumwerten (zum Beispiel besteht eine Prozentangabe aus einen Integerwert zwischen \textit{0} und \textit{100}), was mithilfe der \textit{VSPrefsRestriction}-Klasse implementiert wird. Da man beispielsweise bei Prozent ein \textit{\%} und bei Millisekunden ein \textit{ms} hinter der Variable sehen m\"{o}chte, kann f\"{u}r jede Variable auch ein optionaler Einheiten-String abgespeichert werden.
-Eine Variablenbeschreibung wird f\"{u}r die Darstellung im GUI verwendet, w\"{a}hrend der Variablenname eher f\"{u}r die interne Verwendung vom Simulator verwendet wird. Zum Beispiel hat die Variable \textit{message.prob.outage} (Verlustwahrscheinlichkeit einer Nachricht) die Variablenbeschreibung ``Nachrichtenverlustw'keit''. Wenn f\"{u}r eine Variable keine Beschreibung existiert so wird, wie auf Abbildung \ref{fig:SimulationseinstellungenExperten} anhand der Farbvariablen schon gesehen wurde, f\"{u}r die Anzeige f\"{u}r eine Variable der Datentyp und der Variablenname verwendet. Variablennamen verwenden die auf Tabelle \ref{tb:VariablenPrefixe} angegebenen Prefixe. Alle verf\"{u}gbaren Typen wurden bereits in Tabelle \ref{tb:VariablenDatentypen} aufgelistet. \textit{VSPrefs} stellt f\"{u}r alle Variablen entsprechende Zugriffsmethoden zur Verf\"{u}gung.
+Eine Variablenbeschreibung wird f\"{u}r die Darstellung im GUI verwendet, w\"{a}hrend der Variablenname eher f\"{u}r die interne Verwendung vom Simulator verwendet wird. Zum Beispiel hat die Variable \textit{message.prob.outage} (Verlustwahrscheinlichkeit einer Nachricht) die Variablenbeschreibung ``Nachrichtenverlustw'keit''. Wenn f\"{u}r eine Variable keine Beschreibung existiert so wird, wie auf Abbildung \ref{fig:SimulationseinstellungenExperten} anhand der Farbvariablen schon gesehen wurde, f\"{u}r die Anzeige f\"{u}r eine Variable der Datentyp und der Variablenname verwendet. Variablennamen verwenden die auf Tabelle \ref{tb:VariablenPrefixe} angegebenen Prefixe. Alle verf\"{u}gbaren Typen wurden bereits in Tabelle \ref{tb:VariablenDatentypen} aufgelistet. \textit{VSPrefs} stellt f\"{u}r alle Variablentypen entsprechende Zugriffsmethoden zur Verf\"{u}gung.
Im Folgenden werden nicht alle exisierenden Methoden aufgelistet, da diese auch in der Quelltext-Dokumentation (Javadoc) eingesehen werden k\"{o}nnen. Die Methoden werden nun nur anhand des Integer-Datentyps verdeutlicht. F\"{u}r alle anderen Typen gilt fast alles analog. F\"{u}r Integer stehen in \textit{VSPrefs} folgende Methoden zur Verf\"{u}gung:
@@ -104,7 +104,7 @@ Im Folgenden werden nicht alle exisierenden Methoden aufgelistet, da diese auch \label{tb:VariablenPrefixe}
\end{table}
-Hierbei stellt \textit{key} den Variablennamen- und \textit{val} den Variablenwert dar. \textit{descr} ist eine optionale Variablenbeschreibung. Es k\"{o}nnen sowohl Java's Integer-Objekte, als auch Java's primitiver Integer-Typ \textit{int} verwendet werden. Ein \textit{int}-Wert wird intern allerdings als Integer-Objekt abgespeichert und macht somit keinen groen Unterschied. Die Methode \textit{getIntegerKeySet} gibt alle vorhandenen Integer-Variablennamen (\textit{key}s) als \textit{Set} zur\"{u}ck.
+Hierbei stellt \textit{key} den Variablennamen- und \textit{val} den Variablenwert dar. \textit{descr} ist eine optionale Variablenbeschreibung. Es k\"{o}nnen sowohl Java's Integer-Objekte, als auch Java's primitiver Integer-Typ \textit{int} verwendet werden. Ein \textit{int}-Wert wird intern allerdings als Integer-Objekt abgespeichert (f\"{u}r eine sp\"{a}tere Serialisierung, mehr dazu aber sp\"{a}ter) und macht somit keinen groen Unterschied. Die Methode \textit{getIntegerKeySet} gibt alle vorhandenen Integer-Variablennamen (\textit{key}s) als \textit{Set} zur\"{u}ck.
\textit{VSPrefs} bietet auch eine Reihe von \textit{initInteger}-Methoden an, welche sich von den \textit{setInteger}-Methoden dadurch unterscheiden, dass sie eine Variable nur einen Wert zuweisen, wenn sie vorher noch nicht initialisiert wurde, was durch \textit{setInteger} oder \textit{initInteger} selbst geschehen sein kann. Eine komplette \"{U}bersicht aller Methoden (auch f\"{u}r andere Datentypen) gibt es in der Quelltext-Dokumentation.
@@ -131,7 +131,6 @@ Die Klasse \textit{VSSimulatorEditor} dient f\"{u}r das Editieren der globalen S F\"{u}r Protokolle gibt es keine separate Editor-Klasse, da sie bereits vom Prozesseditor aus editiert werden k\"{o}nnen. Dabei iteriert der Prozesseditor \"{u}ber alle f\"{u}r den jeweiligen Prozess verf\"{u}gbaren Protokollobjekte und f\"{u}gt deren Variablen zus\"{a}tzlich in den Prozesseditor ein. Somit erscheinen die Prozess- und die dazugeh\"{o}rigen Protokollvariablen im selben Editor, womit dem Benutzer eine bessere \"{U}bersicht geboten wird.
-\newpage
\section{Ereignisse}
\subsection{Funktionsweise von Ereignissen}
@@ -144,9 +143,9 @@ F\"{u}r jedes Ereignis existiert eine dazugeh\"{o}rige Klasse, welche die auszuf \label{fig:PackageEvents}
\end{figure}
-Jedes programmierbare Ereignis mu, bevor es vom Simulator verwendet werden kann, in der statischen Klasse \textit{VSRegisteredEvents} registriert werden. Da sich die Anzahl der verf\"{u}gbaren Ereignisse bei Laufzeit des Simulators nicht \"{a}ndert, gibt es keine Instanzen von \textit{VSRegisteredEvents}. Alle Methoden und Klassenattribute sind hier statisch. Wenn beispielsweise eigene Ereignisse implementiert werden, dann m\"{u}ssen alle neuen Ereignisse per Hand in die Datei \textit{VSRegisteredEvents.java} \"{u}bernommen- und der Simulator erneut kompiliert werden.
+Jedes programmierbare Ereignis mu, bevor es vom Simulator verwendet werden kann, in der statischen Klasse \textit{VSRegisteredEvents} registriert werden. Da sich die Anzahl der verf\"{u}gbaren Ereignisklassen des Simulators bei Laufzeit nicht \"{a}ndert, gibt es keine Instanzen von \textit{VSRegisteredEvents}. Alle Methoden und Klassenattribute sind hier statisch. Wenn beispielsweise eigene Ereignisse implementiert werden, dann m\"{u}ssen alle neuen Ereignisse per Hand in die Datei \textit{VSRegisteredEvents.java} \"{u}bernommen- und der Simulator erneut kompiliert werden.
-In der Implementierung wird zwischen drei Haupttypen von Ereignissen unterschieden, die jeweils in verschiedenen Paketen liegen (siehe auch die leicht vereinfachte Abbildung \ref{fig:PackageEvents}):
+In der Implementierung wird zwischen drei Haupttypen von Ereignissen unterschieden, die jeweils in verschiedenen Paketen liegen (Abbildung \ref{fig:PackageEvents}):
\begin{enumerate}
\item \textit{events.implementations}: In diesem Paket befinden sich alle Ereignisse, die ohne weitere Spezialbehanldung im Simulator eingesetzt werden k\"{o}nnen und vom Benutzer direkt im Ereigniseditor programmierbar sind.
@@ -191,7 +190,7 @@ Jede Ereiginsklasse hat zudem Zugriff auf folgende Attribute, die von \textit{VS \subsection{Beispielimplementierung eines Ereignisses}
-Im Folgenden wird als Beispiel die Implementierung des Prozessabsturzereignisses \textit{VSProcessCrashEvent} behandelt. Da die dazugeh\"{o}rige Klasse keine Attribute besitzt, verleibt hier auch die \textit{initCopy}-Methode mit leerem Rumpf. Jede Ereignisklasse muss in \textit{onInit()} mit \textit{setClassname} den eigenen Klassennamen mitteilen. In \textit{onStart()} wird das eigentliche Ereignis ausgef\"{u}hrt. Hier wird obligatorisch \"{u}berpr\"{u}ft, ob der Prozess bereits abgest\"{u}rzt (hier eigentlich nicht Notwendig, verbessert aber die Lesbarkeit der Logik) ist und gegebenenfalls wird der Prozess dann zum Absturz bewegt. Der Task-Manager \"{u}berpr\"{u}ft bereits, ob der Prozess abgest\"{u}rzt ist oder nicht, d.h. ein Ereignis wird bei einem abgest\"{u}rztem Prozess gar nicht erst ausgef\"{u}hrt. Die einzige Ausnahme bildet ein Wiederbelebungsereignis (\text{VSProcessRecover}), welches vom Task-Manager ausgef\"{u}hrt wird, auch wenn der Prozess abgest\"{u}rzt ist. Mit \textit{logg} wird eine Nachricht in das Loggfenster geschrieben, welche ueber das \textit{VSPrefs}-Objekt \textit{prefs} bezogen wird:
+Im Folgenden wird als Beispiel die Implementierung des Prozessabsturzereignisses \textit{VSProcessCrashEvent} behandelt. Da die dazugeh\"{o}rige Klasse keine Attribute besitzt, verbleibt hier auch die \textit{initCopy}-Methode mit leerem Rumpf. Jede Ereignisklasse muss in \textit{onInit()} mit \textit{setClassname} den eigenen Klassennamen mitteilen TODO. In \textit{onStart()} wird das eigentliche Ereignis ausgef\"{u}hrt. Hier wird obligatorisch \"{u}berpr\"{u}ft, ob der Prozess bereits abgest\"{u}rzt (hier eigentlich nicht Notwendig, verbessert aber die Lesbarkeit der Logik) ist und gegebenenfalls wird der Prozess dann zum Absturz bewegt. Der Task-Manager \"{u}berpr\"{u}ft bereits, ob der Prozess abgest\"{u}rzt ist oder nicht, d.h. ein Ereignis wird bei einem abgest\"{u}rztem Prozess gar nicht erst ausgef\"{u}hrt. Die einzige Ausnahme bildet ein Wiederbelebungsereignis (\text{VSProcessRecover}), welches vom Task-Manager ausgef\"{u}hrt wird, auch wenn der Prozess abgest\"{u}rzt ist. Mit \textit{logg} wird eine Nachricht in das Loggfenster geschrieben, welche ueber das \textit{VSPrefs}-Objekt \textit{prefs} bezogen wird:
\begin{code}
package events.implementations;
@@ -215,7 +214,6 @@ extends VSAbstractEvent implements VSCopyableEvent { }
\end{code}
-\newpage
\section{Zeitformate, Prozesse, Nachrichten sowie Task-Manager}
\subsection{Funktionsweise}
@@ -272,7 +270,6 @@ void createCrashAndRecoverExample(VSTaskManager taskManager, In diesem Beispiel wurden zwei Ereignisse (Absturz- und Wiederbelebung eines gegebenen Prozesses) angelegt. Das Absturzereignis tritt bei der aktuellen lokalen Prozesszeit plus \textit{500ms} ein, w\"{a}hrend das Wiederbelebungsereignis bei einer globalen Zeit von \textit{2000ms} stattfindet. F\"{u}r den Fall, dass das Wiederbelebungsereignis vor dem Absturzereignis eintritt wird es nicht ausgef\"{u}hrt, da der Prozess noch nicht abgest\"{u}rzt ist.
-\newpage
\section{Protokolle}
\subsection{Funktionsweise des Protokoll-APIs}
@@ -503,7 +500,7 @@ Der Server benutzt in diesem Beispiel keinen Wecker. Dementsprechend hat die Met }
\end{code}
-\subsection{Erstellung eigener Protokolle}
+\subsection{Erstellung eigener Protokolle (Schnelldurchlauf)}
Hier werden alle Schritte zusammegefasst, die f\"{u}r die Erstellung eines eigenen Protokolls \textit{VSMyProtocol} durchgef\"{u}rt werden m\"{u}ssen.
@@ -522,7 +519,6 @@ registerEvent("protocols.implementations.VSMyProtocol", \item Mit dem Befehl \textit{ant dist} das Archiv \textit{dist/lib/VS-Sim-Latest.jar} erstellen und verwenden.
\end{enumerate}
-\newpage
\section{GUI sowie Simulationsvisualisierung}
Das Paket \textit{simulator} (vereinfacht auf Abbildung \ref{fig:PackageProtocols} dargestellt) implementiert die eigentliche graphische Benutzeroberf\"{a}che des Simulators. Ausnahmen sind die Editorklassen in \textit{prefs.editors} sowie \textit{utils.VSFrame}.
@@ -544,14 +540,12 @@ Die klasse \textit{VSCreateTask} wird vom Ereigniseditor verwendet. Der Ereignis \textit{VSLogging} kapselt ein \textit{javax.swing.JTextArea}-Objekt, wo alle Nachrichten geloggt werden. Hier werden alle Loggfunktionen (inklusive Loggfilter sowie tempor\"{a}re Deaktivierung des Loggen) implementiert. Die \textit{JTextArea} wird dem \textit{VSSimulator}-Objekt \"{u}bergeben und dort dargestellt.
-\newpage
\section{Serialisierung von Simulationen}
Der Anwender kann eine erstellte Simulation im Datei-Men\"{u} speichern und/oder eine bereits abgespeicherte Simulation laden.
\subsubsection{R\"{u}ckw\"{a}rtskompatibel}
-\newpage
\section{Helferklassen und Klassen f\"{u}r Ausnahmebehandlungen}
Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:PackageUtils}) sowie \textit{exceptions} (Abbildung \ref{fig:PackageExceptions}) vorgestellt. \textit{utils} fasst lediglich einige Helferklassen zusammen, die vom restlichen Quelltext verwendet werden.
@@ -583,7 +577,6 @@ Es wurden noch nicht die Klassen der Pakete \textit{utils} (Abbildung \ref{fig:P Im Paket \textit{exceptions} befinden sich lediglich einige eigene Objekte f\"{u}r Ausnahmebehandlungen. \textit{VSNotCopyableException} wird von einem nicht-kopierbaren Ereignis geworfen, wenn versucht wird es zu kopieren. \textit{VSNegatieNumberException} wird geworfen, wenn intern negative Zahlen dort auftreten, wo sie es nicht sollten. Wenn ein Editorobjekt die Benutzereingabe einer Integer-Vektor-Variable nicht parsen kann, so greifen es auf \textit{VSParseIntegerVectorException} zur\"{u}ck.
-\newpage
\section{Entwicklungsumgebung}
In diesem Teilkapitel soll ein kleiner Einblick in die Umgebung, in der der Simulator entwickelt wurde, gew\"{a}hrt werden. F\"{u}r diese Diplomarbeit wurde ausschlielich Open Source Software verwendet. Die einzige Ausnahme stellt Microsoft Windows XP dar, worauf der Simulator zus\"{a}tzlich getestet wurde. Der Simulator wurde jedoch haupts\"{a}chlich unter dem Betriebssystem FreeBSD 7.0, was ein open source Unix-Derivat ist, programmiert.
diff --git a/LaTeX/diplomarbeit.pdf b/LaTeX/diplomarbeit.pdf index 89967aa..e8c2ee2 100644 --- a/LaTeX/diplomarbeit.pdf +++ b/LaTeX/diplomarbeit.pdf @@ -243,7 +243,7 @@ endobj << /S /GoTo /D (subsection.3.5.3) >> endobj 168 0 obj -(\376\377\0003\000.\0005\000.\0003\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000e\000i\000g\000e\000n\000e\000r\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e) +(\376\377\0003\000.\0005\000.\0003\000\040\000E\000r\000s\000t\000e\000l\000l\000u\000n\000g\000\040\000e\000i\000g\000e\000n\000e\000r\000\040\000P\000r\000o\000t\000o\000k\000o\000l\000l\000e\000\040\000\050\000S\000c\000h\000n\000e\000l\000l\000d\000u\000r\000c\000h\000l\000a\000u\000f\000\051) endobj 169 0 obj << /S /GoTo /D (section.3.6) >> @@ -748,15 +748,15 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 255 0 obj << -/Length 1937 +/Length 1958 /Filter /FlateDecode >> stream -xKs6<J3J3uR5ƽqmf-Q=i?}$Ap43ihʹ "2ӖY{/.x_>!V)]ɘbz7.j{7grVlSS^Un/;?(f6Tw* -76SZ5d*f:rdPJ;+i3X]ڗPjE<}{U"$I!sVaLR{CDǜ-${
8%A Bl5IuIlj|u5l;3d*YChzq
8>z֞=_T)4h-_jb :0E
%vb+X/Cuߔ6F8:Fԩ1F 7#|2N6ml&Ly3()"uPv:]'ֵԚ~_`BţvFlUz0Ð6 -ցEUlGPDJJ*!|^ItP~J,hbk5zfD
]_bt'uvagw\NFt2bY*5Shn0/),X≋ęizJ#4#VPcE
uYy]UIK,'ҫa3ng/Gf -E
bU立ޯWý3îZޭnYݴ/4%GC^Qu>g/<`ylfO3y=9a[MC_T['ַŕwl^a5wq"<(KgK-6&D7U9}sٓ ͐\}'I-
BYlݕW-Ѯ&DYXܫ9
1zi'
şw0p¬xJ;T~[w:ڡ.B#QD(]:3Nn(k<Pa -Mӫ&|} gQoU^;fǾC5'Tƿ҈
c3v2 cvqj>K9C&Mf%B̫k'KS`t.endstream +xYoF)(v1A64KflUH~Β\r%g(@&0`_;~YQ +#N `>-'봫 ^'WZ,^\s¬âW7-wzբd𣺾=(N՚?))b{$NQ?O1ar٧.|,WZWU\qc϶mmYroceF%(b[AqI1ȜSfV
1)!c+A&b dp1h#;M'iS|_<n.z`7U]u?g `3^Рq*}gsiS?C/4+M9
/zf
gЧU}8
~oڋ7qO\
'3"cc?Rgrщ6]!Y3%U`?Q(SDZ=Pvy%^8mj1?c ٚ +}8NJƕu~W)"ZrYNN+n^"#OP+͉2Fͺԩ͞~ ]u٤EQZ:(UƓ~y~y}N"$]SY~J?RAH~}fϟ%#7EN:uw^85vcE~D,Shr$bV/$k_ϑdwGDNfcݩ2 YDYIWY1b=9zЃ+(MdDxcl.uwts_m֧WKp?A̱)A DFzȇ,sX"5̙y0H-XN^7<<yQm}=mMC~]NMuyUX+Tݠx͵ F89՜M܀%tzT#
'N2cD-EYu]:4IxFH"'22nsajhV,h6X緌ՋjR2qXv~[nͺ9}hPn]t%Ac֦]hߝ*Q2>?A#C#OW+P1'3mӴĹpwE}|S]m}sgi{[Ne +VDDSvƎ96rS;o'd1NwC7W dŮڽ-{!ZrI +UƝ!?Ve2f~?>ZS* 9WCJf IMHƄם*JΑ/VΥSXS<PayT4ˤ3|OtPx͜.^جkmhϞkCzc߬M/ȸzN-Ҹ}F(LN&/wv4Ekgendstream endobj 254 0 obj << /Type /Page @@ -867,7 +867,7 @@ endobj 274 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [107.4855 505.8046 252.6067 516.1807] +/Rect [107.4855 505.8046 327.3494 516.3869] /Subtype /Link /A << /S /GoTo /D (subsection.3.5.3) >> >> endobj @@ -1152,14 +1152,15 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 343 0 obj << -/Length 1201 +/Length 1202 /Filter /FlateDecode >> stream xKoF<㘢z)re%!EO!Kܡ8<pH~Xa$ԩ8-_O.2auϚ8eXp%B_\/]ۇEudQoקV}8)ZrBJ
/pp~*E8-:br#nr:ި)C\tQ}:B-ӹ=Ua9Xb*`Ih"%9)jIABZ~{&"9ep{ SoJŢ^e8nCV28&{ky>ׇ}kp}Ӵ*DKK2I
1N8u2+9a^BD@'0a{d2'059 q_>yޗ.֟J -
k!rX}<Sg-Fjg573Pa+&6*ꭅƢi -_{#Oq.SN68MMd/W-cXz_O5E7o{#ަ5-Fvj"1UoFFOx<XYx+N4_#??yR$Ҙ"+<هqoaFTXTN|$߇c!.RjIhn(0ԙ^pfR"XR601#Aendstream +
k!rX}<Sg-Fjg573Pa+&6*ꭅƢi +zkwyⱨ
N|0ě
k-]r uq<اMy 8`5=ܨcong)(EK5:gPJFR;o8]e2lVq^#7Ⱦ_[ǰF`zk?D7o{#ަ5-Fvj"1UoFFO5F[q1tppTOǔr'Q^)><ߎ{}
3r2r%IFBJ w] +vԒ(
Q`S3ͤEj$"_h#Hendstream endobj 342 0 obj << /Type /Page @@ -6263,7 +6264,7 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 768 0 obj << -/Length 2484 +/Length 2486 /Filter /FlateDecode >> stream @@ -6275,7 +6276,8 @@ WfEʌiUYՎYv=ۦ#'b,GuiZ(\j e5ZeQ `]* pfAKD|kE]~vJQSzTބM@ `5fz+Pҍ"R)$} Z|YC_3zt"c$|XFJ
#w7(ҿG,:ĄJ) ~Z_1 iNܼ8<~.ER6(-}>:"@Ng<p{ѩCZ]l.Df6sPc.dUv'IB?l -eʪ0_eeIcV0@Z6sa%ƶ FKôV
h.MsRl+lJ?sH,}/<eS
o0}:ܩwקa`֕_1PXE<i%tk@o2 +eʪ0_eeIcV0@Z6sa%ƶ FKôV
h.MsRl+lJ?sH,}9Gʦk8^ctSlݯOT&g_d|G_hGy +J$2g|e>lendstream endobj 767 0 obj << /Type /Page @@ -6376,26 +6378,23 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 780 0 obj << -/Length 2944 -/Filter /FlateDecode ->> -stream -x[Y~_UxN$U%%*r@r-Xuz\ -oA
=IhX$2f~:l!x]r}-`Lߏ%"EI"%i>rdlx7r)eW62m(F(rf(J8gc1`Ȃi;!֓' -!uCn1Ҙ'B_ٹyY Lb#TjP@:cR{0p TE&3T5N<GnV=U@Bg:DMSrQ1Qe+Mr͚[VZ{&ƟB7C߷e+r@b%k./yj/*?r6ؒ0 8 ^A!>+f3&y 8no -шEՆ;WƆ -,xLa$h=P5a!Azߚ[;wY远=g.xZʣe_1}kaA٪94QDԋ9Op(0/>d;+SZZ*C4_Q汣4<rjUVwƙ'`O(\\ho -\ R0\5`iiCn9 -C] \b$$gUDEz
0q6wr.v(P>°Z:LL9MwTrVe}Tݤtͭ^g6 eJT2&;(ñ]WgRg%sIL'8CAF8֡AL7`H -OD - P.l -2<h;TӶyʬF/eW.ۻna~a:d LtB;s*]'֮Ϫrk-ցR -sq6L`I0tb`k\GgC@6)0T -Չ-uuaEsO,VGbaK -H5i\;>Ph':Z F6|<zİ6*[*4˭RMt1GLDOfRM8yj۽nCE6@RB{PTLڣ$գ239v0okD08xWYsLx߹5-xZFdr1%k>j;VĶzN=ʼ4ԌS4q0?<Xa~CCje)<#
;Z1^냹L)1'r1X<>e(p|\<dHn* -]AU˧I VN]Ei63NDת<yT.,M&C"jS_GdL!ٰe!NŮ e~g/
ؓ'|8Hl9cԩ'`RBNbt76ͳB9 -"#EI"9dS
M`0O6Md~0y賻1W>"=ADp9.!pɀ7F1O-je9Rĝ9H,f- -}N٩Qc6:/43Pʛ3qsaObphupB:Nm0q Ů~T;S-ܒ~z*ϻ4ERzѶK-.Gg|ݔRFPD194OY/`21'zo۸a4yD-g)"$J)D:w*Ϳrendstream +/Length 2877 +/Filter /FlateDecode +>> +stream +x[m۸j1wQ@ݦ.B^e%_^~}o%K(Ē8gfHdY$qE2 d}=%Nvס7W)BTJ]P&Ut~Z&/Wk%Cxo!"?D,O~ͫ7~A1RRҧ˹D\dIPK#*gЫ+=`DҔ.8SLꇰ+RNtgE~gԒ6a- A$RD(DHYI̎EY,j110D)%4ec9Xȅv<Hm:[u^owǼج(FWmn1lhtQ?C(H|]=(Twry0&\At3s{(g)B\Kc?4Jh5M*ЎL#O¥\a`|s(`2˯lV&jڱSm?ww} @m}_8%/3նԘ0%u=J{7Ao8o&=5+ +/V0:' 0v$3{$k(rG{\$8>AKva_&~#p"АM֜[ʭvf`)
;'"WhDP{؛ƹ +,xBTU|jl@ I.>#.1dMX|K>4&/l"_ngC?uWm
Ovv
gD@d4 +^i8a^|:϶wNf{9u7Vb
htHGsBFG1:,dg|J-3M4(\\ A?l}{"d@p$!#y{k +W8>o> KHt41!HJ )a Ћba8:aKaκpc +byYbZ;Z'@ +Et:8Nj d$:5E.TsATC))@8R(+EL8\=,VTŗL ֓:|Nj _<0P9f CBa;:n>PTPL=жG١RLU qf &PK۞+8Qް\*1fij /?e~k/ե!XcT¾MTٜBK1-IC*S(E^uѧRQ6(0amK.E""?nBfe3RTRW +8C$J:YWe +Fʘ#&9Ts,v՚ +2/ғZSzn +a#įi{~V S8 +}>h|9pM>VdW`H|M;GL(bb,Z*"*LbHG9Hl4a6sdYUjw@A颤Bm$N騽~8at:@AvmTo'] +L ~̋;wi
Q endobj 779 0 obj << /Type /Page @@ -6415,18 +6414,18 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 785 0 obj << -/Length 2103 +/Length 2023 /Filter /FlateDecode >> stream -xڝXo8_GYK-⺗`asrl$+nᐲd |pf~3$_b*"%8_<Wbk~]ջ _d,Oxx^?2}(>{ۛjiI\8nz_45ruth6>aE̲$Mف
m9KT8eҚ5xQd#rMK@u{cLI*C7\qR l^8LCt$s"(BBYtk6^g4`9W^{ռ]KP>-yg`$gɣկK0gjr J K)E8e^ԴLk9gHXfc=PyQ -WYT {ڂ N c5˲8lKKAԭmYO\XXCc93Sl}#~I0϶5PДޑ{ w\e"?,ك+awM*h4X1ZAdtiI4gtSЯKsii$&347yڶvvz:L-YIw) ^5M`]a?LjM [ö5EǦBءLψdN4cZ R6T]7w*!F1š/d]ؠ -aCLXHX1 -Jݱoq̩th]wSTӮg$Dhz
&g-I*5TG\NjEMɕ'BTK{'|WֻѺ7(%~ٺp2.ZCQmg8XC\}:j}fbr!thfc{E}#s`%O_zujC~8ztzP#9oFW>.g - -svrb#ЯD>ttt5rmҵ$NOMdI
ܱs][qs,e\J+$OBJhSe -O's cppP@sz -y/8zEHK}r!O*]O!;Zi>< YYx!iCɅ2Y˧[p7>:{ói@Bǐp +xڝXo6e cHeE >1cdϒ_;)[C&ߝ(fY楙奂VpW4ԯ9Yg3?2/<q6mm0ɾ]zao$gE@},<`J.5?5MR*Dޮ@cO9bSyY2qUY"1 +;M8(CG'Ry/*%%KTZ;kg&fB9a +(
HJkխT]]Q?Nh,d&N_|/Qb~+aq$g.d,3+%|?UCN+ʂ>,y4&[3Wϔcp0u^KS%(ce]Q> +*gm{q#clPSfLŐs9HFIlUco +(5@\.ƹ<\EQ3;R㌂n*\Z^<7e"/%>Oݦui˴<Iεk MF +es0'M1PꄂU<eDPh9^ʹ#s#OMr)JXb\ꏜOb:8ѝΤ 6r 8pc@کQPiy)
SɿYjIYDtE%Ф$4|+4xy4*CC藓[H'ߞY@Vn]Cgl)@v֧cq
79+_O- 3P3 +al[ؕ!*|ku,qpq㊣ +(>h őCq?eSPx(*98SbVLDqARrJ@tP,gJT9A3P4Zy5}o|w(9\;I" endobj 784 0 obj << /Type /Page @@ -6434,7 +6433,6 @@ endobj /Resources 783 0 R /MediaBox [0 0 595.2757 841.8898] /Parent 753 0 R -/Annots [ 787 0 R ] >> endobj 782 0 obj << /Type /XObject @@ -6442,67 +6440,60 @@ endobj /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/prefs-editors.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 788 0 R +/PTEX.InfoDict 787 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 392.00000000 248.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 789 0 R ->>/Font << /R8 790 0 R /R9 791 0 R >> +/R7 788 0 R +>>/Font << /R8 789 0 R /R9 790 0 R >> >> -/Length 792 0 R +/Length 791 0 R /Filter /FlateDecode >> stream xMS0:=P}ؖt,O/L!8@';˒LxBx^d捲+Nuד>OS|ϤbQ)a%cGg/o'6~ra8eN({֒={Uzcܶ.+Ӵsy鄺!xP[vzR r* 7!CS86l<Nq;ZMwZ!sEh1<ĬQꘔ4kLqA,<]wc7쑱XA zFs{"~aGD~VyXIpa WsަѥߛJm^?-*٣^.渂 X,Y]APΪHYr['+`q>nNa .,\*^:u1a Ƅh9z)Cbʓ endobj -788 0 obj +787 0 obj << /Producer (GPL Ghostscript 8.61) /CreationDate (D:20080809025806Z00'00') /ModDate (D:20080809025806Z00'00') >> endobj -789 0 obj +788 0 obj << /Type /ExtGState /OPM 1 >> endobj -790 0 obj +789 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -791 0 obj +790 0 obj << /BaseFont /Helvetica-Oblique /Type /Font /Subtype /Type1 >> endobj -792 0 obj +791 0 obj 672 endobj -787 0 obj << -/Type /Annot -/Border[0 0 0]/H/I/C[1 0 0] -/Rect [212.6999 153.5425 227.1554 164.1248] -/Subtype /Link -/A << /S /GoTo /D (figure.3.2) >> ->> endobj 786 0 obj << /D [784 0 R /XYZ 74.4095 793.4011 null] >> endobj 126 0 obj << -/D [784 0 R /XYZ 74.4095 486.1569 null] +/D [784 0 R /XYZ 74.4095 425.3757 null] >> endobj 361 0 obj << -/D [784 0 R /XYZ 282.3592 222.4224 null] +/D [784 0 R /XYZ 282.3592 155.0474 null] >> endobj 783 0 obj << /Font << /F61 259 0 R /F28 209 0 R /F26 206 0 R >> @@ -6510,78 +6501,91 @@ endobj /ProcSet [ /PDF /Text ] >> endobj 795 0 obj << -/Length 1633 +/Length 2637 /Filter /FlateDecode >> stream -xڝX_o6$DRǦI6,YA, -<HjVԂ))UsfD̳v@.GϮ[3"!Ĝb -t4b"=YWe7oD~3$AhAV*1WV`dyQ@$Y1&$pnK:>1D*א=EJNiL2ɠ*g;n,xwvakEZ
<_ B@yAui{eHqoOW!a 3WF>YH_%DhɌ*̔fv]1)3)σam<<AOQ9go0i%T˷18/X#sv~ 5!Hcd_8uO#+2KslO']?LW?+ 6rgɅ#n7l#%2m?,k~K,Jps:"֘v$B -Ȟ6і.Ε4նa6#}NP*y68l/0,vt*=ﻵKz!^WwRhDL!@+>Q:9C -J*Ǟ'9q1-@
,7%xyOi&S5)=Le.d ->7
Cu\GД6!A,*4 +xڝY_o8@ImnAY,,o3%[nE#b'D$q^eW7Us?_ɼKϼs{[#rQ\=^) ++yngK,*#-4%[KFZ㛛p~b^'l>V#iBdY\$їEG%Tƶ8ª4j\Ua$b|^82_4XCO\+T ^gIGlYn5*ﳶg\Ȩ?uK/j)3Q(V_Ӏ2َkdۅ#pzU7))yRd2'ҫFkE;/:B!Bq/GǪBHcɤu)4:f=ʗCe7]LS.}'teL5H;/`auyDTDADЊle (3M1ް^c'y.l̢we_edٺu
K=}3گ+WWt|ًJ_>
:j殙N]i]vd9TxޯNG +l瞝ǫ.N;`=A!Sq
@C<W)1\93F{TΕ ڶ:qJm=l#DT .e;G0zo}I)7-:$ ؎Ts5Pl[;C鸈6|2ιP!z]c*
±+!f>ar-cvLMc(Xa +mxF7pT=]L?8HNc==ogH7ӂio0n"dV)ߎl++Wͺ
\[0
b曳58Uc|
+7͏*7Ѿۍ| +endstream endobj 794 0 obj << /Type /Page /Contents 795 0 R /Resources 793 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 798 0 R -/Annots [ 797 0 R ] +/Parent 799 0 R +/Annots [ 797 0 R 798 0 R ] >> endobj 797 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [73.4132 570.2907 92.854 580.8729] +/Rect [212.6999 738.8587 227.1554 749.441] +/Subtype /Link +/A << /S /GoTo /D (figure.3.2) >> +>> endobj +798 0 obj << +/Type /Annot +/Border[0 0 0]/H/I/C[1 0 0] +/Rect [73.4132 499.4889 92.854 510.0712] /Subtype /Link /A << /S /GoTo /D (figure.2.13) >> >> endobj 796 0 obj << /D [794 0 R /XYZ 74.4095 793.4011 null] >> endobj +130 0 obj << +/D [794 0 R /XYZ 74.4095 397.0616 null] +>> endobj +134 0 obj << +/D [794 0 R /XYZ 74.4095 345.4408 null] +>> endobj 793 0 obj << -/Font << /F61 259 0 R /F28 209 0 R >> +/Font << /F61 259 0 R /F28 209 0 R /F26 206 0 R >> /ProcSet [ /PDF /Text ] >> endobj 802 0 obj << -/Length 1715 +/Length 1656 /Filter /FlateDecode >> stream -xڍXKs6WHu,x$ssIhMIu S%Hɺ.(31bǷ(?eH@pݮϒ_/<s>{N(g*L?ۦ3\dy,l&I|ޮخ1ٜqo^"aUJ3,δγ1ĕ22)p%#.X;
vJepW,4m+ߨYtJ$ey_y^PG^k]`L⍥*ɻqq(H8IT}w#3ޗ\MeZ"B8Jc۴(*;25DUc_ԚBʧUs0IlV˰Dٷ[)3@A̢*kc3V.]iIJPs&0H͌ǖf]uN]0v0noRZ@{55j4:rPvu=e{O n;: x[R;b=\ڲ6fj3wY.(^(<w4pAbB8N5FC]U[aTp%k"Dy^xɒB|~DTqiX1B7rs,2,`"C0C5t -NRQ$6ɔ3N6p/fU!{ЖY_)8$pʉ4e {/әV)zQk'BZLgsQT.%B_-"YMZ2,ՅxCTH -t5H@*rowz
(GDPYHb͎xX\UC[We<8vI0ݗ֞Xb5-_@~6]}55 -@s+wn/2#Z^.K\\\
Av0j"4[=b%),ػ%
9=J1"½in~EjXRv2ki"~LC2<jul妢SN -[vgT!4^7̤) -Zx qu<)?1捵4wƬZ8pLp@07v#Y pNUZchI/pةcxvKK`ke N0/[r<6N"sңVfMܬjX25`yǨf$ M?A܊o#z|lݹ}omX M rflν8 UKX}>sڢz'^uo4iQ-de8L(asvQ; -:4P-"P(_e1왏7ּSs+uq5\/{"ExOJs|sDSI -"<G#z$uxD4\IOS<W{prVkA$"EYZOĢ7N\mcSf!AӃ -Z@HSњAS_r Q0x(EWν[*N 5{X!A|ѓ,KܯC#@A$*œ<s:Iendstream +xڽXOw6S(ŪH[d[uk\dز+[> +S% +dbho^$VK7ay»]|>4 4A4%|()|) D]؈9)bBQlV:e="@2{]CO9WO(}htV"Pap;=}ƥPxߜ +$bFPFT$"%UBe?Da&*
4{s)s)+ѳbQI%N% +;hwjEsQ/~Z邨߲þi6;,FW+=c~yiԵL>cbSv19#hVuaB~eد蓜TBIEUzUYK'+yaZyA/1@H'N:cv
B$ؠ]\vfEl*NMG&dEC}mjaK?k]9p(lżm![-ѽ#B?!/WڈrMTh=]:D֥LS@^f +si#ubKo +%6*E<$]NdHRNGl2;V|v&
sjt|\ZS9bQ _z#36iJN +_I&gsqH6#8ݼHFӓ<B?NЏ"H +Y|6a`xzvo endobj 801 0 obj << /Type /Page /Contents 802 0 R /Resources 800 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 798 0 R +/Parent 799 0 R /Annots [ 804 0 R ] >> endobj -799 0 obj << +792 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (/usr/home/buetow/svn/vs/trunk/LaTeX/images/events.pdf) /PTEX.PageNumber 1 -/PTEX.InfoDict 806 0 R +/PTEX.InfoDict 807 0 R /Matrix [1.00000000 0.00000000 0.00000000 1.00000000 0.00000000 0.00000000] /BBox [0.00000000 0.00000000 544.00000000 374.00000000] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << -/R7 807 0 R ->>/Font << /R8 808 0 R /R9 809 0 R >> +/R7 808 0 R +>>/Font << /R8 809 0 R /R9 810 0 R >> >> -/Length 810 0 R +/Length 811 0 R /Filter /FlateDecode >> stream @@ -6591,202 +6595,174 @@ JPOC4sj8|k(XPFx@E5PMbMA }|9-p?sQ-2_zmD~xwwxpdKCJYN54Z M{TGX2w@
}";)ͦ꾂v'Bi2``BЋ>]`
?ioi03pr 2tUcfxqh}LXjfVV_fC,0*tfWXQ3YP50KxuTX4,8쭠IO a3`tq#S.:ɢ4iU<ҡ),P*8<^TX(qluΚpk(_m=vwKq>c(!zɆYaPwTEaCљ<s0!5D;zc{,+9!86?'OR7 cʘ%j:xU1G >Y:k1^B6SwGyv>c$1iq&*j,$!Yjӱuovl+(7M1h_7k;!>g`eRɯWt_Ͼ7cgCB!$$q,":T/qf~wJ8CkGȪ'WIl4v9ns,t' eTgaA(Bx.P}Xendstream endobj -806 0 obj +807 0 obj << /Producer (GPL Ghostscript 8.61) /CreationDate (D:20080809025807Z00'00') /ModDate (D:20080809025807Z00'00') >> endobj -807 0 obj +808 0 obj << /Type /ExtGState /OPM 1 >> endobj -808 0 obj +809 0 obj << /BaseFont /Helvetica /Type /Font /Subtype /Type1 >> endobj -809 0 obj +810 0 obj << /BaseFont /Helvetica-Oblique /Type /Font /Subtype /Type1 >> endobj -810 0 obj +811 0 obj 1167 endobj 804 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [331.9551 197.918 346.4106 208.5003] +/Rect [197.3896 428.8283 211.8452 439.4105] /Subtype /Link /A << /S /GoTo /D (figure.3.3) >> >> endobj 803 0 obj << /D [801 0 R /XYZ 74.4095 793.4011 null] >> endobj -130 0 obj << -/D [801 0 R /XYZ 74.4095 771.7323 null] ->> endobj -134 0 obj << -/D [801 0 R /XYZ 74.4095 746.1189 null] ->> endobj 362 0 obj << -/D [801 0 R /XYZ 266.5136 365.8579 null] +/D [801 0 R /XYZ 266.5136 498.6761 null] >> endobj 805 0 obj << -/D [801 0 R /XYZ 74.4095 197.6162 null] +/D [801 0 R /XYZ 74.4095 426.2277 null] +>> endobj +806 0 obj << +/D [801 0 R /XYZ 74.4095 308.3105 null] >> endobj 800 0 obj << -/Font << /F61 259 0 R /F26 206 0 R /F28 209 0 R >> -/XObject << /Im33 799 0 R >> +/Font << /F61 259 0 R /F28 209 0 R /F35 221 0 R >> +/XObject << /Im33 792 0 R >> /ProcSet [ /PDF /Text ] >> endobj -813 0 obj << -/Length 2558 +814 0 obj << +/Length 2650 /Filter /FlateDecode >> stream -xڽZݏ8_>lC{N1psNqIG9N -4MHH)V!VD*Q(ZU o8Zcb\,eQKf˒t̓VCrg]7H/e_}%49+$T1/^&B -$a~M\(PR2\Tꤊ(1DU_lfT X"vn_Mx}6y=* -4`8l}j]eaN\iKKd\ySܽg^7'&vL6{bt,36Ftv}t}@b܉JAQ胮ww3r+TG٦a<tĤJ
l MM#Rg`SoxvQhp7lrUfh Ts&ޟaZzÐit$ht^ -ZYrڪ&V,$G5zK\mݪP8YTEKm\]E[)G@s"&>7ĥiS9O!" -Em|zjoHڑ)8$J朝ICk"`Dʴt"m -&]?֡?xů ;+RPǬ<M#=v$C7Upi3GUh-7\3I( wng8͡i0*5q -Tp@x44ܷx 2wArmȼmoN<J<F:d~P1\$pLKniCOȗ @ucE/E50`H`W_l UZ6kbxvCJ.+A=mGnCcHS_P1zOE
LW?CqxϨQoxPX9DйQʚq`"
Kn=$p蒁KCQ'3()hCkz
p"f
4970Trm k="
@SWo3>gN l>&ܴH閸fҙUWD cALc ~yD;oo3.#cw=k/Lh X<y4_~~mgޠ:YҼ;N7t
6]mNi p-9:`;M)|L: WeJ:HThF aa'$!4PK-#HrlMSoOEb++t(B`qԥ2Ib9LP%075̥w<b+g34EA#}{d6k(Hp>g]Q*hԸh@]Gbd&kmI6ao,[eoKFԗ$9f._ -q3\4&a}B(&Dó톞d^ÉrҽaB)+%b_}(sg*<<!$҉$#+(e1_+?gwx=Q&'2
T}2(
#cN X7g4
BWbAæWX`lt`endstream +xڥYs6_GjbHG&IsĞCJ%f~(~Iv≽ + +:%=5;-ߗW>?--ЖZgq7MbaI%SgkbFo6SIT(ؗ$c<)<7|(Z79&ssZmkPOjlgT +W|W^] wkBxw
*=Äg'&Bхm]̊DУUG9 <f>H(dnl2q`bOtP)C29Bkve*xTp#PP !,[F8GL8BA`w"@vZ7EҲd|%(Es؇QL~z$ Lf()p +9!De`Sz6bn`)L3/Pffb:#GM
)'.<f1mͬ2{]*0zks/{41gAw]ۙ5RA'QQ3 +_-ԡ۳olA9a"4F<!FyrDM<0F;PAjD*r9wN7sƾL;oBa3Fg腩GK`K%tT +S\mdu\#!dyg$ )F.uc#O0%2NIX3!wc9a\PɨjhMڰ rL2?dAZRxXgUxm(0^%pma/)&G\
%S8.''L9ˢyKpeB$0=U4PQ>?9dHپ94$4ii@]Cxd5Uú,ߕijp\`T+yC|@݈>=z(ET?_t^׳$E~
詠5;L}X"!bL¡lID/o< +L;=Z5"G5 $kpق9*Z'N*L.yNso* lP;m
r>DФz]3u.u>tFF8.k\Y?C>Ə"W"B"?gf"sKs8EcR|NOs9@=׆o
I +%* ^$[O[ +guXWlC{ƮRllBuT6&U<1Th9mW^G} +0 +1jgr)"8rPy1'a5 +mendstream endobj -812 0 obj << +813 0 obj << /Type /Page -/Contents 813 0 R -/Resources 811 0 R +/Contents 814 0 R +/Resources 812 0 R /MediaBox [0 0 595.2757 841.8898] -/Parent 798 0 R +/Parent 799 0 R /Annots [ 817 0 R ] >> endobj 817 0 obj << /Type /Annot /Border[0 0 0]/H/I/C[1 0 0] -/Rect [451.4247 225.2515 465.8802 235.8337] +/Rect [451.4247 478.4932 465.8802 489.0754] /Subtype /Link /A << /S /GoTo /D (figure.3.3) >> >> endobj -814 0 obj << -/D [812 0 R /XYZ 74.4095 793.4011 null] ->> endobj 815 0 obj << -/D [812 0 R /XYZ 74.4095 725.3863 null] +/D [813 0 R /XYZ 74.4095 793.4011 null] >> endobj 816 0 obj << -/D [812 0 R /XYZ 74.4095 278.4629 null] +/D [813 0 R /XYZ 74.4095 526.3397 null] >> endobj -811 0 obj << -/Font << /F61 259 0 R /F35 221 0 R /F28 209 0 R >> +812 0 obj << +/Font << /F61 259 0 R /F28 209 0 R /F35 221 0 R >> /ProcSet [ /PDF /Text ] >> endobj 820 0 obj << -/Length 2118 +/Length 2487 /Filter /FlateDecode >> stream -xڭYQs~_Gj愒 -$YmO~+qPw^%J'âG_ʗgy$z#8Xitz9ꓮJM"s_{_Jo3K_ZZY,˸1xDVW:cg*;+;T}Z8*
$:\_ÔGyԷ LxWtly~Jյ"Vsu;t/W6<ImT,UOEo}|g|vb"Ƒ"2ݡ}(uw8=,DCs&PY(獺;by~pYu;&3nNx8="LeE#&n>n&jh ƮJ=~e[ʎ\FvoG"a݈̖9gJ3{FK)$PU
y>6*ݓ -2GLx6wv=hul1U#>zi11a(-#ҶhJG<AkKz?t(^?!z!EaL*$N1J-`̋EcZ16:@o1!e1m껾NZDb
CY7ol -֑f컌{; -=J;|#xT)5H N/0PףaCb̥Punv-P^LVG'KPãΝ -`r`WP=m &;g;S?u&fÑoC*U</J-@ɋEJZ4:NEtl{̝Ed*;+Dd8$/Cj% -!g#&TV;7#uT땈ZÈGo EFq5Jg0'.lxcn=U|J!" (3-CeX۫(i0Ɇ9 -/R }=7^?*F58{+qಚqD]c6&
itˎǛlu-,5}Q0fzô,Sg
̐9dkSwL`1p)O{~Ba[ӠX u ->>ҽܠsWܱMVe_|\~jP(IhXsBoymQ6::2y --tFCC)g_>PߡvxzrkuK^h4U鴞ZreLRboazQyLz5!s~yB -9s<w6J>y̙KXt0FDF@`%ҟ:V{b,;EMLD>[ꪃ>ٍs.Gũ@/FP_3%K&TzUP +xڭ]sݿBTB +p+bpH,FZ<<.BY'=0Nɖ+y4q{mi˕.<}됳$¯V)ŋ, +e:ĞNYaw%BT +(,:4'.⩐ij1w#r)Rp<Vj^<r% +\:ؗ9dP%=G3M a2d%9Biy|Kg<!L`uK+Sn=0;qlRY<k/wKcnPǥ䁁 +E\:V"fiд#lΙf:^ + +?nK
r;6uFqhl:/x};g +QS4{۬%H75 +?XG@$3*m4ןSPp1uA5M1hYU^6|DKir¡Jvb]{/r~u#C$9y6t{G +Zg"MTWW(C$ƮyZt-cRУ+cE?~p*я@Tb<Ugy0#h͟P]4~]X03F2yqܿ/J|7Sx!dʠ?u\?,9~Մ* +7!aXHr@loendstream endobj 819 0 obj << |
