diff --git a/thesis/.gitignore b/thesis/.gitignore new file mode 100644 index 0000000..e910ceb --- /dev/null +++ b/thesis/.gitignore @@ -0,0 +1,33 @@ +*.acn +*.acr +*.alg +*.aux +*.bbl +*.blg +*.dvi +*.fdb_latexmk +*.glg +*.glo +*.gls +*.idx +*.ilg +*.ind +*.ist +*.lof +*.log +*.lot +*.maf +*.mtc +*.mtc0 +*.nav +*.nlo +*.out +*.pdfsync +*.ps +*.snm +*.synctex.gz +*.toc +*.vrb +*.xdy +*.tdo +*.texpadtmp diff --git a/thesis/BScThesisUnibas_main-4.pdf b/thesis/BScThesisUnibas_main-4.pdf new file mode 100644 index 0000000..34106d8 Binary files /dev/null and b/thesis/BScThesisUnibas_main-4.pdf differ diff --git a/thesis/Back/AppendixA.tex b/thesis/Back/AppendixA.tex new file mode 100644 index 0000000..5b62dab --- /dev/null +++ b/thesis/Back/AppendixA.tex @@ -0,0 +1,162 @@ +% !TEX root = ../Thesis.tex +\chapter{Appendix A} + +\section{Command Line Examples}\label{example:pre-post} +\subsection{Pre and post scripts} +In this example, the \verb|--unsafe| option allows not to specify a IP or MAC address. +\verb|default| is the device name used and \verb|-c 10| tells \iottb that we only want to capture 10 packets. +\begin{minted}{bash} +# Command: +$ iottb sniff --pre='/usr/bin/echo "pre"' --post='/usr/bin/echo "post"' \ + default --unsafe -c 10 +# Stdout: +Testbed [Info] + Running pre command /usr/bin/echo "pre" +pre + Using canonical device name default + Found device at path /home/seb/iottb.db/default + Using filter None + Files will be placed in /home/seb/iottb.db/default/sniffs/2024-06-30/cap0002-2101 + Capture has id dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe + Capture setup complete! + Capture complete. Saved to default_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.pcap + tcpdump took 2.12 seconds. + Ensuring correct ownership of created files. + Saving metadata. + END SNIFF SUBCOMMAND + Running post script /usr/bin/echo "post" +post +\end{minted} + +The contents of the 'sniff' directory for the default device after this capture has completed: +\begin{minted}{bash} +sniffs/2024-06-30/cap0002-2101 +$ tree +. +|-- capture_metadata.json +|-- default_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.pcap +|-- stderr_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.log +L__ stdout_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.log +\end{minted} +and the metadata file contains (\verb|\| only used for fitting into this document):\\ +\verb|# capture_metadata.json|\\ +\begin{minted}{json} +{ +"device": "default", +"device_id": "default", +"capture_id": "dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe", +"capture_date_iso": "2024-06-30T21:01:31.496870", +"invoked_command": "sudo tcpdump -# -n -c 10 -w \ + /home/seb/iottb.db \ + /default/sniffs/2024-06-30 \ + /cap0002-2101/default_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.pcap", +"capture_duration": 2.117154359817505, +"generic_parameters": { + "flags": "-# -n", + "kwargs": "-c 10", + "filter": null +}, +"non_generic_parameters": { + "kwargs": "-w \ + /home/seb/iottb.db/default/sniffs/2024-06-30 \ + /cap0002-2101 \ + /default_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.pcap", + "filter": null +}, +"features": { + "interface": null, + "address": null +}, +"resources": { + "pcap_file": "default_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.pcap", + "stdout_log": "stdout_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.log", + "stderr_log": "stderr_dcdf1e0b-6c4d-4f01-ba16-f42a04131fbe.log", + "pre": "/usr/bin/echo \"pre\"", + "post": "/usr/bin/echo \"post\"" +}, +"environment": { + "capture_dir": "cap0002-2101", + "database": "iottb.db", + "capture_base_dir": "/home/seb/iottb.db/default/sniffs/2024-06-30", + "capture_dir_abs_path": \ + "/home/seb/iottb.db/default/sniffs/2024-06-30/cap0002-2101" +} +} + +\end{minted} + +\section{Canonical Name} +\begin{listing}[!ht] + \inputminted[firstline=12, lastline=40]{python}{string_processing.py} + \caption{Shows how the canonical name is created.} + \label{lst:dev-canonical} +\end{listing} + +\section{Add Device Example} +\subsection{Configuration File}\label{appendixA:add-dev-cfg} +\begin{listing}[!ht] +\inputminted[linenos, breaklines]{python}{appendixa-after-add-device-dir.txt} +\caption{Directory and file contents after adding two devices.} +\label{lst:appendix:appendixa:config-file} +\end{listing} + +\section{Debug Flag Standard Output} + +\begin{figure} + \centering + \begin{minted}{bash} +❯ iottb -vvv --debug sniff roomba --unsafe -c 10 +<_io.TextIOWrapper name='' mode='w' encoding='utf-8'> +INFO - main - cli - 48 - Starting execution. +INFO - iottb_config - __init__ - 24 - Initializing Config object +WARNING - iottb_config - warn - 21 - DatabaseLocations are DatabaseLocationMap in the class iottb.models.iottb_config +INFO - iottb_config - load_config - 57 - Loading configuration file +INFO - iottb_config - load_config - 62 - Config file exists, opening. +DEBUG - main - cli - 52 - Verbosity: 3 +DEBUG - main - cli - 54 - Debug: True +INFO - sniff - validate_sniff - 37 - Validating sniff... +INFO - sniff - sniff - 91 - sniff command invoked +DEBUG - sniff - sniff - 98 - Config loaded: +DEBUG - sniff - sniff - 104 - Full db path is /home/seb/showcase +INFO - string_processing - make_canonical_name - 20 - Normalizing name roomba +DEBUG - string_processing - make_canonical_name - 38 - Canonical name: roomba +DEBUG - string_processing - make_canonical_name - 39 - Aliases: ['roomba'] +Testbed [I] + Using canonical device name roomba + Found device at path /home/seb/showcase/roomba +INFO - sniff - sniff - 152 - Generic filter None + Using filter None +DEBUG - sniff - sniff - 160 - Previous captures +DEBUG - sniff - sniff - 162 - Capture count is 4 +DEBUG - sniff - sniff - 165 - capture_dir: cap0004-0310 + Files will be placed in /home/seb/showcase/roomba/sniffs/2024-07-01/cap0004-0310 +DEBUG - sniff - sniff - 172 - successfully created capture directory + Capture has id 59153b53-c49d-44de-99d2-b5a3490df29a +DEBUG - sniff - sniff - 185 - Full pcap file path is /home/seb/showcase/roomba/sniffs/2024-07-01/cap0004-0310/roomba_59153b53-c49d-44de-99d2-b5a3490df29a.pcap +INFO - sniff - sniff - 186 - pcap file name is roomba_59153b53-c49d-44de-99d2-b5a3490df29a.pcap +INFO - sniff - sniff - 187 - stdout log file is stdout_59153b53-c49d-44de-99d2-b5a3490df29a.log +INFO - sniff - sniff - 188 - stderr log file is stderr_59153b53-c49d-44de-99d2-b5a3490df29a.log +DEBUG - sniff - sniff - 191 - pgid 260696 +DEBUG - sniff - sniff - 192 - ppid 12862 +DEBUG - sniff - sniff - 193 - (real, effective, saved) user id: (1000, 1000, 1000) +DEBUG - sniff - sniff - 194 - (real, effective, saved) group id: (1000, 1000, 1000) +DEBUG - sniff - sniff - 209 - Flags: -# -n +DEBUG - sniff - sniff - 217 - verbosity string to pass to tcpdump: -vvv +DEBUG - sniff - sniff - 228 - KW args: -c 10 +DEBUG - sniff - sniff - 237 - Non transferable (special) kw args: -w /home/seb/showcase/roomba/sniffs/2024-07-01/cap0004-0310/roomba_59153b53-c49d-44de-99d2-b5a3490df29a.pcap +INFO - sniff - sniff - 246 - tcpdump command: sudo tcpdump -# -n -vvv -c 10 -w /home/seb/showcase/roomba/sniffs/2024-07-01/cap0004-0310/roomba_59153b53-c49d-44de-99d2-b5a3490df29a.pcap + Capture setup complete! +DEBUG - sniff - sniff - 259 - +stdout: <_io.TextIOWrapper name='/home/seb/showcase/roomba/sniffs/2024-07-01/cap0004-0310/stdout_59153b53-c49d-44de-99d2-b5a3490df29a.log' mode='w' encoding='UTF-8'>. +stderr: <_io.TextIOWrapper name='/home/seb/showcase/roomba/sniffs/2024-07-01/cap0004-0310/stderr_59153b53-c49d-44de-99d2-b5a3490df29a.log' mode='w' encoding='UTF-8'>. + + Capture complete. Saved to roomba_59153b53-c49d-44de-99d2-b5a3490df29a.pcap + tcpdump took 1.11 seconds. + Ensuring correct ownership of created files. + Saving metadata. + END SNIFF SUBCOMMAND + + \end{minted} + \caption{Output with max verbosity and debug flag set.} + \label{fig:example-debug-output} +\end{figure} diff --git a/thesis/Back/AppendixB.tex b/thesis/Back/AppendixB.tex new file mode 100644 index 0000000..e356611 --- /dev/null +++ b/thesis/Back/AppendixB.tex @@ -0,0 +1,16 @@ +\chapter{Appendix B} +\section{Software Requirements}\label{sec:software-req} +\iottbsc was developed on the \textit{Linux}\footnote{\url{kernel.org}} operating system \textit{Fedora 40}\footnote{\url{https://fedoraproject.org/workstation/}}. It has not been tested on any other platform. +\iottbsc is implemented in a Python\footnote{\url{python.org}} package \iottb, which has been developed with Python version 3.12. + +\subsection{Runtime Dependencies} +\begin{itemize} + \item Poetry\footnote{\url{https://python-poetry.org/}}, version 1.8.3. Used for packaging and dependency management. + \item Click\footnote{\url{https://click.palletsprojects.com/en/8.1.x/}}, version 8.1, is a library which enables parameter handling through decorated functions. +\end{itemize} + +\subsection{Testing Dependencies} +\begin{itemize} + \item Pytest\footnote{\url{https://docs.pytest.org/en/8.2.x/}}, versions 8.2. Although not many exist. + +\end{itemize} diff --git a/thesis/Back/CommandRef.tex b/thesis/Back/CommandRef.tex new file mode 100644 index 0000000..c6e977b --- /dev/null +++ b/thesis/Back/CommandRef.tex @@ -0,0 +1,145 @@ +\chapter{Appendix D}\label{appendix:cmdref} + +\section{\iottb}\label{cmdref:iottb} +\begin{verbatim} +Usage: iottb [OPTIONS] COMMAND [ARGS]... + +Options: + -v, --verbosity Set verbosity [default: 0; 0<=x<=3] + -d, --debug Enable debug mode + --dry-run [default: True] + --cfg-file PATH Path to iottb config file [default: + $HOME/.config/iottb/iottb.cfg] + --help Show this message and exit. + +Commands: + add-device Add a device to a database + init-db + rm-cfg Removes the cfg file from the filesystem. + rm-dbs Removes ALL(!) databases from the filesystem if... + set-key-in-table-to Edit config or metadata files. + show-all Show everything: configuration, databases, and... + show-cfg Show the current configuration context + sniff Sniff packets with tcpdump +\end{verbatim} + +\subsection{Initialize Database}\label{cmdref:init-db} +\begin{verbatim} +Usage: iottb init-db [OPTIONS] + +Options: + -d, --dest PATH Location to put (new) iottb database + -n, --name TEXT Name of new database. [default: iottb.db] + --update-default / --no-update-default + If new db should be set as the new default + [default: update-default] + --help Show this message and exit. +\end{verbatim} + +\subsection{Add device}\label{cmdref:add-device} +\begin{verbatim} +Usage: iottb add-device [OPTIONS] + + Add a device to a database + +Options: + --dev, --device-name TEXT The name of the device to be added. If this + string contains spaces or other special + characters normalization is + performed to derive a canonical name [required] + --db, --database DIRECTORY Database in which to add this device. If not + specified use default from config. [env var: + IOTTB_DB] + --guided Add device interactively [env var: + IOTTB_GUIDED_ADD] + --help Show this message and exit. +\end{verbatim} + +\subsection{Capture traffic with \textit{tcpdump}}\label{cmdref:sniff} +\begin{verbatim} +Usage: iottb sniff [OPTIONS] [TCPDUMP-ARGS] [DEVICE] + + Sniff packets with tcpdump + +Options: + Testbed sources: + --db, --database TEXT Database of device. Only needed if not current + default. [env var: IOTTB_DB] + --app TEXT Companion app being used during capture + Runtime behaviour: + --unsafe Disable checks for otherwise required options. + [env var: IOTTB_UNSAFE] + --guided [env var: IOTTB_GUIDED] + --pre TEXT Script to be executed before main command is + started. + --post TEXT Script to be executed upon completion of main + command. + Tcpdump options: + -i, --interface TEXT Network interface to capture on.If not specified + tcpdump tries to find and appropriate one. + [env var: IOTTB_CAPTURE_INTERFACE] + -a, --address TEXT IP or MAC address to filter packets by. + [env var: IOTTB_CAPTURE_ADDRESS] + -I, --monitor-mode Put interface into monitor mode. + --ff TEXT tcpdump filter as string or file path. + [env var: IOTTB_CAPTURE_FILTER] + -#, --print-pacno Print packet number at beginning of line. True by + default. [default: True] + -e, --print-ll Print link layer headers. True by default. + -c, --count INTEGER Number of packets to capture. [default: 1000] + --help Show this message and exit. +\end{verbatim} + +\section{Utility commands}\label{cmdref:sec:utils} +Utility Commands mostly for development and have not yet been integrated into the standard workflow. +\subsection{Remove Configuration}\label{cmdref:rm-cfg} +\begin{verbatim} +Usage: iottb rm-cfg [OPTIONS] + + Removes the cfg file from the filesystem. + + This is mostly a utility during development. Once non-standard database + locations are implemented, deleting this would lead to iottb not being able + to find them anymore. + +Options: + --yes Confirm the action without prompting. + --help Show this message and exit. +\end{verbatim} + +\subsection{Remove Database}\label{cmdref:rm-dbs} +\begin{verbatim} +Usage: iottb rm-dbs [OPTIONS] + + Removes ALL(!) databases from the filesystem if they're empty. + + Development utility currently unfit for use. + +Options: + --yes Confirm the action without prompting. + --help Show this message and exit. +\end{verbatim} + +\subsection{Display Configuration File}\label{cmdref:show-cfg} +\begin{verbatim} +Usage: iottb show-cfg [OPTIONS] + + Show the current configuration context + +Options: + --cfg-file PATH Path to the config file [default: + /home/seb/.config/iottb/iottb.cfg] + -pp Pretty Print + --help Show this message and exit +\end{verbatim} + +\subsection{"Show All"}\label{cmdref:show-all} +\begin{verbatim} +Usage: iottb show-all [OPTIONS] + + Show everything: configuration, databases, and device metadata + +Options: + --help Show this message and exit. +\end{verbatim} + diff --git a/thesis/Back/wissensch_Redlichkeit_D_09-2023.pdf b/thesis/Back/wissensch_Redlichkeit_D_09-2023.pdf new file mode 100644 index 0000000..ee5d6d1 Binary files /dev/null and b/thesis/Back/wissensch_Redlichkeit_D_09-2023.pdf differ diff --git a/thesis/Back/wissensch_Redlichkeit_E_09-2023.pdf b/thesis/Back/wissensch_Redlichkeit_E_09-2023.pdf new file mode 100644 index 0000000..5d55772 Binary files /dev/null and b/thesis/Back/wissensch_Redlichkeit_E_09-2023.pdf differ diff --git a/thesis/Chapters/ch1-introduction.tex b/thesis/Chapters/ch1-introduction.tex new file mode 100644 index 0000000..d6c47f8 --- /dev/null +++ b/thesis/Chapters/ch1-introduction.tex @@ -0,0 +1,44 @@ +% !TEX root = ../Thesis.tex +\chapter{Introduction}\label{introduction} +\iot devices are becoming increasingly prevalent in modern homes, offering a range of benefits such as controlling home lighting, remote video monitoring, and automated cleaning \citep{iothome2019}. +These conveniences are made possible by the sensors and networked communication capabilities embedded within these devices. +However, these features also pose significant privacy and security risks \citep{islamiot2023}. +IoT devices are often integrated into home networks and communicate over the internet with external servers, potentially enabling surveillance or unauthorized data sharing without the user's knowledge or consent \citep{infoexpiot}. Moreover, even in the absence of malicious intent by the manufacturer, these devices are still vulnerable to programming bugs and other security failures \citep{peekaboo2020}. +\medskip + +Security researchers focused on the security and privacy of such \iot devices rely on various utilities and tools for conducting research. +These tools are often glued together in scripts with arbitrary decisions about file naming and data structuring. +Such impromptu scripts typically have a narrow range of application, making them difficult to reuse across different projects. Consequently, useful parts are manually extracted and incorporated into new scripts for each project, exacerbating the problem. +\medskip + +This approach leads to scattered data, highly tailored scripts, and a lack of standardized methods for sharing or reproducing experiments. The absence of standardized tools and practices results in inconsistencies in data collection and storage, making it difficult to maintain compatibility across projects. +Furthermore, the lack of conventions about file naming and data structuring leads to issues in finding and accessing the data. +For research groups, these issues are further compounded during the onboarding of new members, who must navigate this fragmented landscape and often create their own ad-hoc solutions, perpetuating the cycle of inefficiency and inconsistency. +\medskip + +To systematically and reproducibly study the privacy and security of IoT devices, an easy-to-use testbed that automates and standardizes various aspects of experimenting with IoT devices is needed. + +\section{Motivation}\label{sec:motivation} +The primary motivation behind this project is to address the challenges faced by security researchers in the field of IoT device security and privacy. +The scattered nature of data, the lack of standardized tools, and the ad-hoc methods used for data collection or processing, are an obstacle for researchers who want to produce valid and reproducible results \citep{fursinckorg2021}. +A standardized testbed, enabling a more systematic approach to collecting and analyzing network data from \iot devices, can help make tedious and error-prone aspects of conducting experiments on \iot devices more bearable, while at the same time enhancing the quality of the data, by adhering to interoperability standards by establishing data collection and storage standards. +This bachelor project is specifically informed by the needs of the PET research group at the University of Basel, who will utilize it to run IoT device experiments, and as a foundation to build more extensive tooling. + +\section{Goal}\label{sec:goal} +The goal of this project is to design and implement a testbed for IoT device experiments. To aid reproducibility, there are two main objectives: + +First, the testbed should automate key aspects of running experiments with IoT devices, particularly the setup and initialization of data collection processes as well as some basic post-collection data processing. + +Secondly, the testbed should standardize how data from experiments is stored. This includes standardizing data and metadata organization, establishing a naming scheme, and defining necessary data formats. +A more detailed description to how this is adapted for this project follows in \cref{ch:adaptation}. + + +\section{Outline} +This report documents the design and implementation of an \iot testbed. +In the remainder of the text, the typographically formatted string "\iottbsc" refers to this projects' conception of testbed, whereas "\iottb" specifically denotes the Python package which is the implementation artifact from this project. + +This report outlines the general goals of a testbed, details the specific functionalities of \iottbsc, and explains how the principles of automation and standardization are implemented. +We begin by giving some background on the most immediately useful concepts. +\cref{ch:adaptation} derives requirements for \iottbsc starting from first principles and concludes by delineating the scope considered for implementation, which is described in \cref{ch4}. +In \cref{ch:5-eval} we evaluate \iottbsc, and more specifically, the \iottb software package against the requirements stated in \cref{ch:adaptation}. +We conclude in \cref{ch:conclusion} with an outlook on further development for \iottbsc. diff --git a/thesis/Chapters/ch2-background.tex b/thesis/Chapters/ch2-background.tex new file mode 100644 index 0000000..09a180d --- /dev/null +++ b/thesis/Chapters/ch2-background.tex @@ -0,0 +1,48 @@ +% !TEX root = ../Thesis.tex +\chapter{Background} +This section provides the necessary background to understand the foundational concepts related to IoT devices, testbeds, and data principles that inform the design and implementation of \iottbsc. + +\section{Internet of Things} +The \iot refers to the connection of “things” other than traditional computers to the internet. The decreasing size of microprocessors has enabled their integration into smaller and smaller objects. Today, objects like security cameras, home lighting, or children's toys may contain a processor and embedded software that enables them to interact with the internet. The Internet of Things encompasses objects whose purpose has a physical dimension, such as using sensors to measure the physical world or functioning as simple controllers. When these devices can connect to the internet, they are considered part of the Internet of Things and are referred to as \textbf{IoT devices} (see \citet{whatissmartdevice2018} and \citet{iotfundamentals}). + +\section{Testbed} +A testbed is a controlled environment set up to perform experiments and tests on new technologies. The concept is used across various fields such as aviation, science, and industry. Despite the varying contexts, all testbeds share the common goal of providing a stable, controlled environment to evaluate the performance and characteristics of the object of interest. + +Examples of testbeds include: +\begin{enumerate} + \item \textbf{Industry and Engineering}: In industry and engineering, the term \emph{platform} is often used to describe a starting point for product development. A platform in this context can be considered a testbed where various components and technologies are integrated and tested together before final deployment. + \item \textbf{Natural Sciences}: In the natural sciences, laboratories serve as testbeds by providing controlled environments for scientific experiments. For example, climate chambers are used to study the effects of different environmental conditions on biological samples (e.g., in \citet{vaughan2005use}). Another example is the use of wind tunnels in aerodynamics research to simulate and study the effects of airflow over models of aircraft or other structures. + \item \textbf{Computing}: In computing, specifically within software testing, a suite of unit tests, integrated development environments (IDEs), and other tools could be considered as a testbed. This setup helps in identifying and resolving potential issues before deployment. By controlling parameters of the environment, a testbed can ensure that the software behaves as expected under specified conditions, which is essential for reliable and consistent testing. + \item \textbf{Interdisciplinary}: Testbeds can take on considerable scales. For instance, in \citet{tbsmartgrid2013} provides insight into the aspects of a testbed for a smart electric grid. + This testbed is composed out of multiple systems, — an electrical grid, internet, and communication provision — which in their own right are already complex environments. + The testbed must, via simulation or prototyping, provide control mechanisms, communication, and physical system components. + +\end{enumerate} + + +\section{FAIR Data Principles} +\label{concept:fair} +The \emph{FAIR Data Principles} were first introduced by \citet{wilkinson_fair_2016} with the intention to improve the reusability of scientific data. The principles address \textbf{F}indability, \textbf{A}ccessibility, \textbf{I}nteroperability, and \textbf{R}eusability. Data storage designers may use these principles as a guide when designing data storage systems intended to hold data for easy reuse. +For a more detailed description, see \citep{go-fair}. + +\section{Network Traffic}\label{sec:network-traffic} +Studying \iot devices fundamentally involves understanding their network traffic behavior. +This is because network traffic contains (either explicitly or implicitly embedded in it) essential information of interest. +Here are key reasons why network traffic is essential in the context of \iot device security: +\begin{enumerate} + \item \textbf{Communication Patterns}: Network traffic captures the communication patterns between IoT devices and external servers or other devices within the network. By analyzing these patterns, researchers can understand how data flows in and out of the device, which is critical for evaluating performance and identifying any unauthorized communications or unintended leaking of sensitive information. + \item \textbf{Protocol Analysis:} Examining the protocols used by IoT devices helps in understanding how they operate. Different devices might use various communication protocols, and analyzing these can reveal insights into their compatibility, efficiency, and security. Protocol analysis can also uncover potential misconfigurations or deviations from expected behavior. + \item \textbf{Flow Monitoring:} Network traffic analysis is a cornerstone of security research. It allows researchers to identify potential security threats such as data breaches, unauthorized access, and malware infections. By monitoring traffic, one can detect anomalies that may indicate security incidents or vulnerabilities within the device. + \item \textbf{Information Leakage}: \iot devices are often deployed in a home environment and connect to the network through wireless technologies \citep{iothome2019}. This allows an adversary to passively observe traffic. While often this traffic is encrypted, the network flow can leak sensitive information, which is extracted through more complex analysis of communication traffic and Wi-Fi packets \citep{friesssniffing2018}, \citep{infoexpiot}. In some cases, the adversary can determine the state of the smart environment and their users \citep{peekaboo2020}. +\end{enumerate} + + +\section{(Network) Packet Capture} +Network \textit{packet capture} \footnote{also known as \emph{packet sniffing}, \emph{network traffic capture}, or just \emph{sniffing}. The latter is often used when referring to nefarious practices.} fundamentally describes the act or process of intercepting and storing data packets traversing a network. It is the principal technique used for studying the behavior and communication patterns of devices on a network. For the reasons mentioned in \cref{sec:network-traffic}, packet capturing is the main data collection mechanism used in \iot device security research, and also the one considered for this project. + +\section{Automation Recipes} +\todoRevise() +Automation recipes can be understood as a way of defining a sequence of steps needed for a process. +In the field of machine learning, \textit{Collective Mind}\footnote{\url{https://github.com/mlcommons/ck}} provides a small framework to define reusable recipes for building, running, benchmarking and optimizing machine learning applications. +A key aspect of these recipes some platform-independent, which has enabled wider testing and benchmarking of machine learning models. Even if a given recipe is not yet platform independent, it can be supplemented with user-specific scripts which handle the platform specifics. Furthermore, it is possible to create a new recipe from the old recipe and the new script, which, when made accessible, essentially has extended the applicability of the recipe \citet{friesssniffing2018}. +Automation recipes express the fact that some workflow is automated irrespective of the underlying tooling. A simple script or application can be considered an recipe (or part of) diff --git a/thesis/Chapters/ch3-adaptation.tex b/thesis/Chapters/ch3-adaptation.tex new file mode 100644 index 0000000..8d4770b --- /dev/null +++ b/thesis/Chapters/ch3-adaptation.tex @@ -0,0 +1,141 @@ +\chapter{Adaptation}\label{ch:adaptation} + +In this chapter, we outline the considerations made during the development of the IoT testbed, \iottbsc. +Starting from first principles, we derive the requirements for our testbed and finally establish the scope for \iottbsc. +The implemented testbed which results from this analysis, the software package \iottb, is discussed in \cref{ch4}.\\ + +\section{Principal Objectives}\label{sec:principles-and-objectives} +The stated goal for this bachelor project (see \cref{sec:goal}), is to create a testbed for \iot devices, which automates aspects of the involved workflow, with the aim of increasing reproducibility, standardization, and compatibility of tools and data across project boundaries. +We specify two key objectives supporting this goal: +\begin{enumerate}[label=\textit{Objective \arabic*}] + \item \textbf{Automation Recipes:}\label{obj:recipies} The testbed should support specification and repeated execution of important aspects of experiments with IoT devices, such as data collection and analysis (see \citep{fursinckorg2021}) + \item \textbf{FAIR Data Storage:}\label{obj:fair} The testbed should store data in accordance with the FAIR \citep{go-fair} principles. +\end{enumerate} + +\section{Requirements Analysis}\label{sec:requirements} +In this section, we present the results of the requirements analysis based on the principal objectives. +The requirements derived for \ref{obj:recipies} are presented in \cref{table:auto_recipe_requirements}. +\cref{table:fair_data_storage_requirements} we present requirements based on \ref{obj:fair}. + +\begin{table}[H] +\centering +\caption{Automation Recipes Requirements} +\label{table:auto_recipe_requirements} +\begin{minipage}{\textwidth} +\begin{enumerate}[label=\textit{R1.\arabic*}] + \item \label{req:auto_install_tools} \textbf{Installation of Tools}: Support installation of necessary tools like \textit{mitmproxy} \cite{mitmproxy}, \textit{Wireshark} \cite{wiresharkorg} or \textit{tcpdump} \cite{tcpdump}). + + \textit{Reasoning:} + There are various tools used for data collection and specifically packet capture. + Automating the installation of necessary tools ensures that all required software is available and configured correctly without manual intervention. This reduces the risk of human error during setup and guarantees that the testbed environment is consistently prepared for use. Many platforms, notably most common Linux distributions, come with package managers which provide a simple command-line interface for installing software while automatically handling dependencies. This allows tools to be quickly installed, making it a \textit{lower priority} requirement for \iottbsc. + + \item \label{req:auto_config_start} \textbf{Configuration and Start of Data Collection}: Automate the configuration and start of data collection processes. Specific subtasks include: + \begin{enumerate} + \item Automate wireless hotspot management on capture device. + \item Automatic handling of network capture, including the collection of relevant metadata. + \end{enumerate} + + \textit{Reasoning:} + Data collection is a central step in the experimentation workflow. Configuration is time-consuming and prone to error, suggesting automating this process is useful.As mentioned in \cref{sec:motivation}, current practices lead to incompatible data and difficult to reuse scripts. + Automating the configuration and start of data collection processes ensures a standardized approach, reducing the potential for user error + and thereby increasing data compatibility and efficient use of tools. Automating this process must be a central aspect of \iottbsc. + + \item \label{req:auto_data_processing} \textbf{Data Processing}: Automate data processing tasks. + + \textit{Reasoning:} Some network capture tools produce output in a binary format. To make the data available to other processes, often the data must be transformed in some way. + Data processing automation ensures that the collected data is processed uniformly and efficiently, enhancing it reusability and interoperability. Processing steps may include cleaning, transforming, and analyzing the data, which are essential steps to derive meaningful insights. Automated data processing saves time and reduces the potential for human error. It ensures that data handling procedures are consistent, which is crucial for comparing results across different experiments and ensuring the validity of findings. + + + \item \label{req:auto_reproducibility} \textbf{Reproducibility}: Ensure that experiments can be repeated with the same setup and configuration. + + \textit{Reasoning:} A precondition to reproducible scientific results is the ability to run experiments repeatedly with all relevant aspects are set up and configured identically. + \item \label{req:auto_execution_control} \textbf{Execution Control}: Provide mechanisms for controlling the execution of automation recipes (e.g., start, stop, status checks). + + \textit{Reasoning:} Control mechanisms are essential for managing the execution of automated tasks. This includes starting, stopping, and monitoring the status of these tasks to ensure they are completed successfully. + + \item \label{req:auto_error_logging} \textbf{Error Handling and Logging}: Include robust error handling and logging to facilitate debugging to enhance reusability. + + \textit{Reasoning:} Effective error handling and logging improve the robustness and reliability of the testbed.Automation recipes may contain software with incompatible logging mechanisms. + To facilitate development and troubleshooting, a unified and principled logging important for \iottbsc. + \item \label{req:auto_documentation} \textbf{Documentation}: Provide clear documentation and examples for creating and running automation recipes. +\end{enumerate} +\end{minipage} +\end{table} + +\begin{table}[H] +\centering +\caption{FAIR Data Storage Requirements} +\label{table:fair_data_storage_requirements} +\begin{minipage}{\textwidth} +\begin{enumerate}[label=\textit{R2.\arabic*}] + \item \label{req:fair_data_meta_inventory} \textbf{Data and Metadata Inventory}: \iottbsc should provide an inventory of data and metadata that typically need to be recorded (e.g., raw traffic, timestamps, device identifiers). + + \textit{Reasoning:} Providing a comprehensive inventory of data and metadata ensures that data remains findable after collection. Including metadata increases interpretability and gives context necessary for extracting reproducible results. + + \item \label{req:fair_data_formats} \textbf{Data Formats and Schemas}: Define standardized data formats and schemas. + + \textit{Reasoning:} Standardized data formats and schemas ensure consistency and interoperability. + + \item \label{req:fair_file_naming} \textbf{File Naming and Directory Hierarchy}: Establish clear file naming conventions and directory hierarchies. for organized data storage. + + \textit{Reasoning:} This enhances findability and accessibility. + \item \label{req:fair_preservation} \textbf{Data Preservation Practices}: Implement best practices for data preservation, including recommendations from authoritative sources like the Library of Congress \citep{recommendedformatrsLOC}. + + \textit{Reasoning:} Implementing best practices for data preservation can mitigate data degradation and ensures integrity of data over time. This ensures long-term accessibility and reusability. + \item \label{req:fair_accessibility} \textbf{Accessibility Controls}: Ensure data accessibility with appropriate permissions and access controls. + \item \label{req:fair_interoperability} \textbf{Interoperability Standards}: Use widely supported formats and protocols to facilitate data exchange and interoperability. + \item \label{req:fair_reusability} \textbf{Reusability Documentation}: Provide detailed metadata to support data reuse by other researchers. +\end{enumerate} +\end{minipage} +\end{table} + +We return to these when we evaluate \iottbsc in \cref{ch:5-eval}. + +\section{Scope}\label{sec:scope} +This section defines the scope of the testbed \iottbsc. +To guide the implementation of the software component of this bachelor project, \iottb, +we focus on a specific set of requirements that align with the scope of a bachelor project. +While the identified requirements encompass a broad range of considerations, we have prioritized those that are most critical to achieving the primary objectives of the project. + +For this project, we delineate our scope regarding the principal objectives as follows: +\begin{itemize} + \item \ref{obj:recipies}: \iottb focuses on complying with \ref{req:auto_config_start}, \ref{req:auto_reproducibility}. + \item \ref{obj:fair}: \iottb ensures FAIR data storage implicitly, with the main focus lying on \ref{req:fair_data_formats}, \ref{req:fair_data_meta_inventory}, \ref{req:fair_file_naming}. +\end{itemize} + + +\subsection{Model Environment}\label{sec:assumed-setup} +In this section, we describe the environment model assumed as the basis for conduction \iot device experiments. +This mainly involves delineating the network topology. Considerations are taken to make this environment, over which the \iottb testbed software has no control, easy reproducible \citep{vacuumpie2023}.\\ + +We assume that the \iot device generally requires a Wi-Fi connection. +This implies that the environment is configured to reliably capture network traffic without disrupting the \iot device's connectivity. This involves setting up a machine with internet access (wired or wireless) and possibly one Wi-Fi card supporting AP mode to act as the \ap for the \iot device under test \citep{surveytestingmethods2022}. +Additionally, the setup must enable bridging the IoT-AP network to the internet to ensure \iot device.\\ + +Specifically, the assumed setup for network traffic capture includes the following components: +\begin{enumerate} + \item \textbf{IoT Device:} The device under investigation, connected to a network. + \item \textbf{Capture Device:} A computer or dedicated hardware device configured to intercept and record network traffic. This is where \iottb runs. + \item \textbf{Wi-Fi \ap:} The \ap through which the \iot device gets network access. + \item \textbf{Router/ Internet gateway:} The network must provide internet access. + \item \textbf{Switch or software bridge:} At least either a switch or an \os with software bridge support must be available to be able to implement one of the setups described in \cref{fig:cap-setup1} and \cref{fig:cap-setup2}. + \item \textbf{Software:} tcpdump is needed for network capture. +\end{enumerate} +\newpage +\begin{figure}[!ht] + \centering + \includegraphics[width=0.75\linewidth]{Figures/network-setup1.png} + \caption{Capture setup with separate Capture Device and AP} + \label{fig:cap-setup1} +\end{figure} + +\begin{figure}[!ht] + \centering + \includegraphics[width=0.75\linewidth]{Figures/setup2.png} + \caption{Capture setup where the capture device doubles as the \ap for the \iot device.} + \label{fig:cap-setup2} +\end{figure} +\newpage + + + diff --git a/thesis/Chapters/ch4-iottb.tex b/thesis/Chapters/ch4-iottb.tex new file mode 100644 index 0000000..9281d47 --- /dev/null +++ b/thesis/Chapters/ch4-iottb.tex @@ -0,0 +1,153 @@ +\chapter{Implementation}\label{ch4} +This chapter discusses the implementation of the IoT device testbed, \iottbsc which is developed using the Python programming language. This choice is motivated by Python's wide availability and the familiarity many users have with it, thus lowering the barrier for extending and modifying the testbed in the future. The testbed is delivered as a Python package and provides the \iottb command with various subcommands. A full command reference can be found at \cref{appendix:cmdref}.\\ +Conceptually, the software implements two separate aspects: data collection and data storage. +The \iottbsc database schema is implicitly implemented by \iottb. Users use \iottb mainly to operate on the database or initiate data collection. Since the database schema is transparent to the user during operation, we begin with a brief description of the database layout as a directory hierarchy, before we get into \iottb \cli. + +\section{Database Schema} +The storage for \iottbsc is implemented on top of the file system of the user. +Since user folder structures provide little standardization, we require a configuration file, while gives \iottb some basic information about the execution environment. +The testbed is configured in a configuration file in JSON format, following the scheme in \cref{lst:cfg-shema}. +\verb|DefaultDatabase| is a string which represents the name of the database, which is a directory in \\ +\verb|DefaultDatabasePath| once initialized. +\iottb assumes these values during execution, unless the user specified otherwise. +If the user specifies a different database location as in option in a subcommand, \verb|DatabaseLocations| is consulted. +\verb|DatabaseLocations| is a mapping from every known database name to the full path of its parent directory in the file system. +The configuration file is loaded for every invocation of \iottb. +It provides the minimal operating information. +Now that we understand +\begin{listing}[!ht] + \inputminted[]{json}{cfg-shema.json} + \caption{Schema of the testbed configuration file.} + \label{lst:cfg-shema} +\end{listing} +\newpage +\section{High Level Description} +\iottb is invoked following the schema below. In all cases, a subcommand be specified for anything to happen. +\iottb is used from the command line and follows the following schema: +\begin{minted}[fontsize=\small]{bash} +iottb [] [] [] +\end{minted} +\todoRevise{Better listing} +When \iottb is invoked, it first checks to see if it can find the database directory in the \os users home directory\footnote{Default can be changed}. + +\section{Database Initialization}\label{sec:db-init} +The IoT testbed database is defined to be a directory named \db. Currently, \iottb creates this directory in the user's home directory (commonly located at the path \texttt{/home/} on Linux systems) the first time any subcommand is used. All data and metadata are placed under this directory. Invoking \verb|iottb init-db| without arguments causes defaults to be loaded from the configuration file. If the file does not exist, it is created with default values following \cref{lst:cfg-shema}. Else, the database is created with the default name or the user-suplied name as a directory in the file system, unless a database under that name is already registered in the \verb|DatabaseLocaions| map. The commands described in the later sections all depend on the existence of a \iottbsc database. +It is neither possible to add a device nor initiate data collection without an existing database. +The full command line specification can be found in \cref{cmdref:init-db}. +Once a database is initialized, devices may be added to that database. + +\section{Adding Devices}\label{sec:add-dev} +Before we capture the traffic of a \iot device, \iottb demands that there exists a dedicated +directory for it. +We add a device to the database by passing a string representing the name of the device to the \addev subcommand. +This does two things: +\begin{enumerate} + \item A python object is initialized from the class as in \cref{lst:dev-meta-python} + \item A directory for the device is created as \verb|/| + \item A metadata file \verb|device_metadata.json| is created and placed in the newly created directory. This file is in the JSON format, and follows the schema seen in \cref{lst:dev-meta-python}. +\end{enumerate} + +\begin{listing}[!ht] + \inputminted[firstline=12, lastline=29, linenos]{python}{device_metadata.py} + \caption{Device Metadata} + \label{lst:dev-meta-python} +\end{listing} + +The Device ID is automatically generated using a UUID to be FAIR compliant. \verb|canonical_name| is generated by the \verb|make_canonical_name()| function provided in \cref{lst:dev-canonical}. +Fields not supplied to \verb|__init__| in \cref{lst:dev-meta-python} are kept empty. The other fields in are currently not used by \iottb itself, but provide metadata +which can be used during a processing step. Optionally, one can manually create such a file with pre-set values and pass it to the setup. +For example, say the testbed contains a configuration as can be seen in \cref{lst:appendix:appendixa:config-file} + +\begin{listing}[!ht] + \inputminted[firstline=1, lastline=8, linenos]{json}{appendixa-after-add-device-dir.txt} + \caption{Directory layout after adding device 'default' and 'Roomba'} + \label{lst:cfg-file-post-add} +\end{listing} + +If we then add two devices \verb|'iPhone 13 (year 2043)'| and \verb|roomba|, the layout of the database resembles \cref{lst:cfg-db-layout-post-add} and, for instance, the \verb|roomba| devices' will contain the metadata listed in \cref{lst:meta-roomba-post-add}. See \cref{appendixA:add-dev-cfg} for a complete overview. + +\begin{listing}[!ht] + \lstinputlisting[firstline=11, lastline=16]{appendixa-after-add-device-dir.txt} + \caption{Directory layout after adding device 'default' and 'Roomba'} + \label{lst:cfg-db-layout-post-add} +\end{listing} + +\begin{listing}[!ht] + \lstinputlisting[firstline=39, lastline=55]{appendixa-after-add-device-dir.txt} + \caption{Directory layout after adding device 'default' and 'Roomba'} + \label{lst:meta-roomba-post-add} +\end{listing} + +\newpage +\section{Traffic Sniffing}\label{sec:sniff} +Automated network capture is a key component of \iottb. The standard network capture is provided by the \texttt{sniff} subcommand, which wraps the common traffic capture utility \emph{tcpdump}\citep{tcpdump}. \cref{cmdref:sniff} shows usage of the command. + +Unless explicitly allowed by specifying that the command should run in \texttt{unsafe} mode, an IPv4, or MAC address \emph{must} be provided. An IP addresses are only accepted in dot-decimal notation \footnote{e.g., 172.168.1.1} and MAC addresses must specify as six groups of two hexadecimal digits\footnote{e.g., 12:34:56:78:AA:BB}. Failing to provide either results in the capture being aborted. The rationale behind this is simple: they are the only way to identify the traffic of interest. Of course, it is possible to retrieve the IP or MAC after a capture. Still, the merits outweigh the annoyance. The hope is that this makes \iottb easier to use \emph{correctly}. For example, consider the situation, where a student is tasked with performing multiple captures across multiple devices. If the student is not aware of the need of an address for the captured data to be usable, then this policy avoids the headache and frustration of wasted time and unusable data. + +To comply with \ref{req:auto_config_start} and \ref{req:fair_data_meta_inventory}, each capture also stores some metadata in \texttt{capture\_metadata.json}. \cref{lst:cap-meta} shows the metadata files schema. + + +\begin{listing}[!ht] +\inputminted[firstline=288, lastline=319]{python}{sniff.py} +\caption{Metadata Stored for sniff command} +\label{lst:cap-meta} +\end{listing} + +The \texttt{device\_id} is the \uuid \ of the device for which the capture was performed. This ensures the capture metadata remains associated even if files are moved. Furthermore, each capture also gets a \uuid. This \uuid \ is used as the suffix for the PCAP file, and the log files. The exact naming scheme is given in \cref{lst:cap-naming}. + +\begin{listing} +\inputminted[firstline=179, lastline=181]{python}{sniff.py} +\caption{Naming scheme for files created during capture.} +\label{lst:cap-naming} +\end{listing} + + + +\section{Working with Metadata} +The \texttt{meta} subcommand provides a facility for manipulating metadata files. It allows users to get the value of any key in a metadata file as well as introduce new key-value pairs. However, it is not possible to change the value of any key already present in the metadata. This restriction is in place to prevent metadata corruption. + +The most crucial value in any metadata file is the \texttt{uuid} of the device or capture the metadata belongs to. Changing the \texttt{uuid} would cause \iottb to mishandle the data, as all references to data associated with that \texttt{uuid} would become invalid. Changeing the any other value might not cause mishandling by \iottb, but they nonetheless represent essential information about the data. Therefore, \iottb does not allow changes to existing keys once they are set. + +Future improvements might relax this restriction by implementing stricter checks on which keys can be modified. This would involve defining a strict set of keys that are write-once and then read-only. + +\section{Raw Captures} +The \texttt{raw} subcommand offers a flexible way to run virtually any command wrapped in \iottb. Of course, the intended use is with other capture tools, like \textit{mitmproxy}\citet{mitmproxy}, and not arbitrary shell commands. +While some benefits, particularly those related to standardized capture, are diminished, users still retain the advantages of the database. + + +The syntax of the \texttt{raw} subcommand is as follows: +\begin{minted}{bash} +iottb raw "" # or +iottb raw "" # +\end{minted} + +\iottb does not provide error checking for user-supplied arguments or strings. +Users benefit from the fact that captures will be registered in the database, assigned a \texttt{uuid}, and associated with the device. +The metadata file of the capture can then be edited manually if needed. + + +\iottb does not provide error checking for user-supplied arguments or strings. +Users benefit from the fact that captures will be registered in the database, assigned a \texttt{uuid}, and associated with the device. +The metadata file of the capture can then be edited manually if needed. + +However, each incorrect or unintended invocation that adheres to the database syntax (i.e., the specified device exists) will create a new capture directory with a metadata file and \texttt{uuid}. Therefore, users are advised to thoroughly test commands beforehand to avoid creating unnecessary clutter. + +\section{Integrating user scripts}\label{sec:integrating-user-scripts} +The \texttt{--pre} and \texttt{--post} options allow users to run any executable before and after any subcommand, respectively. +Both options take a string as their argument, which is passed as input to a shell and launched as a subprocess. +The rationale for running the process in a shell is that Python's Standard Library process management module, \texttt{subprocess}\footnote{\url{https://docs.python.org/3/library/subprocess.html}}, does not accepts argument to the target subprocess when a single string is passed for execution. + +Execution is synchronous: the subcommand does not begin execution until the \texttt{--pre} script finishes, and the \texttt{--post} script only starts executing after the subcommand has completed its execution. \iottb always runs in that order. + +There may be cases where a script provides some type of relevant interaction intended to run in parallel with the capture. Currently, the recommended way to achieve this is to wrap the target executable in a script that forks a process to execute the target script, detaches from it, and returns. + +These options are a gateway for more complex environment setups and, in particular, allow users to reuse their scripts, thus lowering the barrier to adopting \iottb. + +\section{Extending and Modifying the Testbed} +One of the key design goals of \iottb is easy extensibility. \iottb uses the Click Library \citep{click} to handle parsing arguments. Adding a new command amounts to no more than writing a function and decorating it according to Click specification. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%% Figures +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + diff --git a/thesis/Chapters/ch5-evaluation.tex b/thesis/Chapters/ch5-evaluation.tex new file mode 100644 index 0000000..2c2607d --- /dev/null +++ b/thesis/Chapters/ch5-evaluation.tex @@ -0,0 +1,202 @@ +\chapter{Evaluation}\label{ch:5-eval} +In this sectioned we evaluate \iottb, paying particular attention to the requirements defined in \cref{sec:requirements}. + +\begin{table}[h!] +\centering +\begin{tabular}{|c|l|c|} +\hline +\textbf{Requirement ID} & \textbf{Description} & \textbf{Status} \\ \hline +\ref{req:auto_install_tools} & Installation of Tools & Not Met \\ \hline +\ref{req:auto_config_start} & Configuration and Start of Data Collection & $\downarrow$ \\ \hline +\ref{req:auto_config_start}a) & Automate Wi-Fi Setup & Not Met \\ \hline +\ref{req:auto_config_start}b) & Automate Data Capture & Met \\ \hline +\ref{req:auto_data_processing} & Data Processing & Partially Met \\ \hline +\ref{req:auto_reproducibility} & Reproducibility & Partially Met \\ \hline +\ref{req:auto_execution_control} & Execution Control & Not Met \\ \hline +\ref{req:auto_error_logging} & Error Handling and Logging & Partially Met \\ \hline +\ref{req:auto_documentation} & Documentation & $\downarrow$ \\ \hline +\ref{req:auto_documentation}a) & User Manual & Met \\ \hline +\ref{req:auto_documentation}b) & Developer Docs & Not Met \\ \hline +\ref{req:fair_data_meta_inventory} & Data and Metadata Inventory & Met \\ \hline +\ref{req:fair_data_formats} & Data Formats and Schemas & Met \\ \hline +\ref{req:fair_file_naming} & File Naming and Directory Hierarchy & Met \\ \hline +\ref{req:fair_preservation} & Data Preservation Practices & Partially Met \\ \hline +\ref{req:fair_accessibility} & Accessibility Controls & Not Met \\ \hline +\ref{req:fair_interoperability} & Interoperability Standards & Fully Met \\ \hline +\ref{req:fair_reusability} & Reusability Documentation & Met \\ \hline +\end{tabular} +\caption{Summary of Requirements Evaluation} +\label{tab:requirements-evaluation} +\end{table} + +\cref{tab:requirements-evaluation} gives an overview of the requirements introduced in \cref{sec:requirements} and our assessment of their status. +It is important to note that the status “Met” does not imply that the requirement is implemented to the highest possible standard. +Furthermore, this set of requirements itself can (and should) be made more specific and expanded in both detail and scope as the project evolves. + +Additionally, \ref{tab:requirements-evaluation} does not provide granularity regarding the status of individual components, which might meet the requirements to varying degrees. +For example, while the requirement for data collection automation may be fully met in terms of basic functionality, advanced features such as handling edge cases or optimizing performance might still need improvement. +Similarly, the requirement for data storage might be met in terms of basic file organization but could benefit from enhanced data preservation practices. + +Thus, the statuses presented in \cref{tab:requirements-evaluation} should be viewed as a general assessment rather ground truth. +Future work should aim to refine these requirements and their implementation to ensure that \iottbsc continues to evolve and improve. + +To provide a more comprehensive understanding, the following sections offer a detailed evaluation of each requirement. This detailed analysis will discuss how each requirement was addressed, the degree to which it was met, and any specific aspects that may still need improvement. By examining each requirement individually, we can better understand the strengths and limitations of the current implementation and identify areas for future enhancement. + +\section{\ref{req:auto_install_tools}: Installation of Tools} +\textbf{Status: Not Met} \\ +\iottbsc does not install any software or tools by itself. Dependency management for Python packages is handled by installers like PIP, since the Python package declares its dependencies. +Tcpdump is the only external dependency, and \iottbsc checks if Tcpdump is available on the capture device. If it is not, the user is asked to install it. +Our position is that generally it is a good idea to not force installation of software and allow users the freedom to choose. The added benefit to the user of a built-in installer seems low. Adding some installer to \iottbsc does not promise great enough improvement in ease-of-use vis-à-vis the higher maintenance cost introduced to maintain such a module. +For future work, this requirement could be removed. + +\section{\ref{req:auto_config_start}: Configuration and Start of Data Collection} +\textbf{Status: Partially Met} \\ +The testbed automates the configuration and initiation of data collection processes, including wireless hotspot management and network capture. This automation reduces setup time and minimizes errors. +The testbed automates some aspects of configuring and initializing the data collection process. This project focused on package capture and adjacent tasks. \ref{req:auto_config_start}b can be considered \textit{complete} in that packet capture is fully supported thorough Tcpdump and important metadata is saved. Depending on the setup (see \cref{fig:cap-setup1} and \cref{fig:cap-setup2}) a Wi-Fi hotspot needs to be set up before packet capture is initiated. \iottbsc does not currently implement automated setup and takedown of a hotspot on any platform, so \ref{req:auto_config_start} a is not currently met. There are scripts for Linux systems bundled with the Python package which can be used with the \texttt{--pre} and \texttt{--post} options mentioned in \cref{sec:integrating-user-scripts}. But to consider this task fully automated and supported, this should be built in to \iottbsc itself. +Furthermore, there are other data collection tools like \textit{mitmproxy}\citep{mitmproxy} or more complicated setup tasks like setting up a routing table to allow for more capture scenarios, which are tedious tasks and lend themselves to automation. Future work should include extending the set of available automation recipes continuously. +New task groups/recipe domains should be added as sub-requirements of \ref{req:auto_config_start}. +We propose the following new sub-requirement +\begin{itemize} + \item \ref{req:auto_config_start}c: Testbed should implement automatic setup of NAT routing for situations where \ap is connection to the capture device and a bridged setup is not supported. + \item \ref{req:auto_config_start}d: Testbed should dynamically determine which type of hotspot setup is possible and choose the appropriate automation recipe. +\end{itemize} +Extending \ref{req:auto_config_start} means stating which data collection and adjacent recipes are wanted. + +\section{\ref{req:auto_data_processing}: Data Processing} +\textbf{Status: Partially Met} \\ +While the testbed includes some basic data processing capabilities, there is room for improvement. +Currently, the only one recipe exists for processing raw data. \iottbsc can extract a CSV file from a PCAP file. The possibilities for automation recipes which support data processing are many. +Having the data in a more standardized format allows for the creation of more sophisticated feature extraction recipes with application for machine learning. +Before they are available, users can still use the \texttt{--post} option with their feature extraction scripts. + +\section{\ref{req:auto_reproducibility}: Reproducibility} +\textbf{Status: Met} \\ +Supported automation can be run with repeatedly, and used options are documented in the capture metadata. This allows others to repeat the process with the same options. +So in this respect, this requirement is met. But, the current state can be significantly improved by automating the process of repeating a capture task with the same configuration as previous captures. +To support this, we propose the following new subrequirement which aids the automated reproduction of past capture workflows +\begin{itemize} + \item \ref{req:auto_reproducibility}a: The testbed should be able to read command options from a file + \item \cref{req:auto_reproducibility}b: The testbed should be able to perform a capture based on metadata files of completed captures. +\end{itemize} +Taking these requirements promises to seriously increase reproducibility. + +\section{\ref{req:auto_execution_control}: Execution Control} +\textbf{Status: Not Met} \\ +The testbed currently provides no controlled method to interfere with a running recipe. In most cases, \iottb will gracefully end if the user sends the process a SIGINT, but there are no explicit protections against data corruption in this case. Furthermore, during execution, \iottb writes to log files and prints basic information to the users' terminal. Extending this with a type of monitoring mechanism would be good steps toward complying with this requirement in the future. + +\section{R1.6: Error Handling and Logging} +\textbf{Status: Met} \\ +Robust error handling and logging are implemented, ensuring that issues can be diagnosed and resolved effectively. Detailed logs help maintain the integrity of experiments. It is also possible for the user to control how much output is given in the terminal. Here are four examples of the same command, with just increasing degrees of verbosity specified by the user: + +\subsection{Logging Example} +\textbf{Command: } \verb|iottb sniff roomba --unsafe -c 10 | +Verbosity can be unspecified, \verb|-v|, \verb|-vv| or \verb|-vvv| + +\begin{figure} + \centering +\begin{minted}[breaklines]{bash} +$ iottb sniff roomba --unsafe -c 10 +Testbed [I] + Using canonical device name roomba + Found device at path /home/seb/showcase/roomba + Using filter None + Files will be placed in /home/seb/showcase/roomba/sniffs/2024-07-01/cap0000-0214 + Capture has id 62de82ad-3aa2-460e-acd0-546e46377987 + Capture setup complete! + Capture complete. Saved to roomba_62de82ad-3aa2-460e-acd0-546e46377987.pcap + tcpdump took 2.16 seconds. + Ensuring correct ownership of created files. + Saving metadata. + END SNIFF SUBCOMMAND +\end{minted} + \caption{No verbosity.} + \label{fig:example-no-verb} +\end{figure} + +On the first verbosity level, only logger warnings are now printed to the standard output. During normal execution we do not expect significantly more output. This is also true for the second verbosity level. +\begin{figure} + \centering + \begin{minted}{bash} +$ iottb -v|-vv sniff roomba --unsafe -c 10 +<_io.TextIOWrapper name='' mode='w' encoding='utf-8'> +WARNING - iottb_config - DatabaseLocations are DatabaseLocationMap in the class iottb.models.iottb_config +\end{minted} + \caption{Only \textit{additional} output for \-v or \-vv.} + \label{fig:example-one-verb} +\end{figure} + +This changes once we reach the third verbosity level, because now additonally the logger level is set to "INFO". +Clearly, \cref{fig:example-lvl-three} contains far more output than \cref{fig:example-one-verb}. +It is possible to get even more output printed to standard output by also passing the \verb|--debug| flag. +This produces significantly more output as can be seen in \cref{fig:example-debug-output}. +\begin{figure} + \centering + \begin{minted}{bash} +$ iottb -vvv sniff roomba --unsafe -c 10 +<_io.TextIOWrapper name='' mode='w' encoding='utf-8'> +INFO - main - cli - 48 - Starting execution. +INFO - iottb_config - __init__ - 24 - Initializing Config object +WARNING - iottb_config - warn - 21 - DatabaseLocations are DatabaseLocationMap in the class iottb.models.iottb_config +INFO - iottb_config - load_config - 57 - Loading configuration file +INFO - iottb_config - load_config - 62 - Config file exists, opening. +INFO - sniff - validate_sniff - 37 - Validating sniff... +INFO - sniff - sniff - 91 - sniff command invoked +INFO - string_processing - make_canonical_name - 20 - Normalizing name roomba +Testbed [I] + Using canonical device name roomba + Found device at path /home/seb/showcase/roomba +INFO - sniff - sniff - 152 - Generic filter None + Using filter None + Files will be placed in /home/seb/showcase/roomba/sniffs/2024-07-01/cap0003-0309 + Capture has id f1e92062-4a82-4429-996c-97bd7fa57bec +INFO - sniff - sniff - 186 - pcap file name is roomba_f1e92062-4a82-4429-996c-97bd7fa57bec.pcap +INFO - sniff - sniff - 187 - stdout log file is stdout_f1e92062-4a82-4429-996c-97bd7fa57bec.log +INFO - sniff - sniff - 188 - stderr log file is stderr_f1e92062-4a82-4429-996c-97bd7fa57bec.log +INFO - sniff - sniff - 246 - tcpdump command: sudo tcpdump -# -n -vvv -c 10 -w /home/seb/showcase/roomba/sniffs/2024-07-01/cap0003-0309/roomba_f1e92062-4a82-4429-996c-97bd7fa57bec.pcap + Capture setup complete! + Capture complete. Saved to roomba_f1e92062-4a82-4429-996c-97bd7fa57bec.pcap + tcpdump took 2.12 seconds. + Ensuring correct ownership of created files. + Saving metadata. + END SNIFF SUBCOMMAND + \end{minted} + \caption{Caption} + \label{fig:example-lvl-three} +\end{figure} + +\section{\ref{req:auto_documentation}: Documentation} +\textbf{Status: Partially Met} \\ +For users, there is a 'Command Line Reference' (see \cref{appendix:cmdref}) which details all important aspects of operating the \iottb \cli. Furthermore, helpful messages are displayed regarding the correct syntax of the commands if an input is malformed. So user documentation does exist and, while certainly can be improved upon, is already helpful. +Unfortunately, documentation for developers is currently poor. The codebase is not systematically documented and there is currently no developer's manual. +Thoroughly documenting the existing codebase should be considered the most pressing issue and tackled first to improve developer documentation. + +\section{\ref{req:fair_data_meta_inventory}: Data and Metadata Inventory} +\textbf{Status: Fully Met} \\ +The testbed organizes data and metadata in a standardized and principled way. The database is complete with respects to the currently primary and secondary artifact which stem from operating \iottb itself. +While complete now, extending \iottb carries the risk of breaking this requirement if not careful attention is given. +Since the database is a central part of the system as a whole, extensions must ensure that they comply with this requirement before they get built in. + +\section{\ref{req:fair_data_formats}: Data Formats and Schemas} +\textbf{Status: Met} \\ +The testbed standardizes directory and file naming. All metadata is in plain test and in the JSON format. This makes them very accessible to both humans and machines. Currently, the only binary format which \iottbsc creates are PCAP files. Luckily, the PCAP format is widely known and not proprietary, and widely available tools (e.g., Wireshark\citep{wiresharkorg}) exist to inspect them. Furthermore, the data in the PCAP files can be extracted in to the plaintext CSV format, this further improves interoperability. Consistence is currently implicitly handles, that is, there are no strict schemas \footnote{Strict schemas for metadata file briefly were introduced, but then abandoned due to the lack of knowledge surrounding the PYdantic library \citep{pydantic}.} \iottb should generally not corrupt data during operation. But plaintext files are manually editable and can inadvertently be corrupted or made invalid (e.g. accidentally deleting a few digits from a UUID). +It is important to keep this in mind when extending \iottbsc and the types of files residing in the database become more heterogeneous. + + +\subsection{\ref{req:fair_file_naming}: File Naming and Directory Hierarchy} +\textbf{Status: Met} \\ +\iottb currently names all files which it creates according to a well-defined schema. In all cases, the file name is easily legible (e.g., metadata files like \cref{lst:cap-meta}) or the context of where the file resides provides easy orientation to a human reviewer. For instance, raw data files, which currently only are PCAP files, are all named with a \uuid. This is not helpful to the human, but the metadata file, which resides in the same directory, provides all the needed information to be able to understand what is contained within it. Furthermore, these files reside in a directory hierarchy which identifies what devices the traffic belongs to, the date the capture file was created. Finally, capture files reside in a directory which identifies where in the sequence of capture of a given day it was created. +Automation recipes expanding the range of data types collected can just follow this convention. This ensures interoperability and findability between various capture methods. + +\cref{ch4} \ref{sec:add-dev} already showed examples of the naming convention when adding devices. + + +\section{\cref{req:fair_preservation}: Data Preservation Practices} +\textbf{Status: Partially Met} \\ +Specific data preservation practices are not taken. \iottb already follows the Library of Congress recommendations on data formats (see \citet{recommendedformatrsLOC}). Most data is stored in plain text, and the binary formats used are widely known within the field and there is no access barrier. +To enhance the testbeds' compliance with this requirement, automation recipes which back-up the data to secure locations periodically can be developed. The need for built-in preservation should be balanced with the goal of not introducing dependencies not related to the core aim of automated collection and FAIR storage. One way is just to have a repository of scripts which are not built in to the \iottb executable, but which users can use and adapt to their needs\footnote{For instance rsync scripts with predefined filters appropriate for the database.}. + +\section{\cref{req:fair_accessibility}: Accessibility Controls} +\textbf{Status: x} \\ +While the \iottb executable is ware what data it can and cannot access or change, there are currently no wider access controls implemented. + + diff --git a/thesis/Chapters/ch6-conclusion.tex b/thesis/Chapters/ch6-conclusion.tex new file mode 100644 index 0000000..336322d --- /dev/null +++ b/thesis/Chapters/ch6-conclusion.tex @@ -0,0 +1,7 @@ +\chapter{Conclusion}\label{ch:conclusion} +\iottbsc is an attempt for at an automation testbed for \iot devices. +The \iottb package can be considered somewhat feature limited and incomplete for a proper testbed, but it provides a foundation on which to build a more fully fledged system. +\iottb currently automates the setup and configuration of network packet capture and saves relevant database. +The testbed uses the file system as a database such that it is also navigable by humans, not just machines. +Data is stored in a predictably named hierarchy, and files which are produced as a result of operating \iottb are both uniquely identifiable and interpretable for humans. This is achieved by using the file system paths to provide some context, such that file names must only contain minimal information to make it meaningful to humans. Additionally, all created resources are identified by a \uuid which ensures that even if data is accidentally moved, their data is linked at least in principle. +In summary, \iottbsc is a testbed which takes the first step toward a future where data is FAIR and experiments are reproducible. diff --git a/thesis/Figures/network-setup1.png b/thesis/Figures/network-setup1.png new file mode 100644 index 0000000..2520151 Binary files /dev/null and b/thesis/Figures/network-setup1.png differ diff --git a/thesis/Figures/setup1.jpeg b/thesis/Figures/setup1.jpeg new file mode 100644 index 0000000..20a0687 Binary files /dev/null and b/thesis/Figures/setup1.jpeg differ diff --git a/thesis/Figures/setup2.png b/thesis/Figures/setup2.png new file mode 100644 index 0000000..b8fa1b9 Binary files /dev/null and b/thesis/Figures/setup2.png differ diff --git a/thesis/Front/Abstract.tex b/thesis/Front/Abstract.tex new file mode 100644 index 0000000..22b7127 --- /dev/null +++ b/thesis/Front/Abstract.tex @@ -0,0 +1,5 @@ +% !TEX root = ../Thesis.tex +\chapter{Abstract} +To systematically study and assess the privacy and security implications of IoTdevices, it is crucial to have a reliable method for conducting experiments and extracting meaningful data in a reproducible manner. This necessitates the development of a system —referred to as a "testbed"— that includes all the necessary tools, definitions, and automated environment setup required for conduction reproducible experiments on IoT devices. + +In this project, I aim to design and implement a testbed that automates and standardizes the collection and processing of network data from IoT devices. The outcome of this project is a Python package that facilitates these tasks, providing a foundation for reproducible IoT device experiments. \ No newline at end of file diff --git a/thesis/Front/Acknowledgment.tex b/thesis/Front/Acknowledgment.tex new file mode 100644 index 0000000..8c82778 --- /dev/null +++ b/thesis/Front/Acknowledgment.tex @@ -0,0 +1,3 @@ +% !TEX root = ../Thesis.tex +\chapter{Acknowledgments} +So Long, and Thanks for All the Fish. And the template. \ No newline at end of file diff --git a/thesis/LICENSE.md b/thesis/LICENSE.md new file mode 100644 index 0000000..44939e6 --- /dev/null +++ b/thesis/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Ivan Giangreco + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/thesis/Makefile b/thesis/Makefile new file mode 100644 index 0000000..7d64608 --- /dev/null +++ b/thesis/Makefile @@ -0,0 +1,27 @@ +# +# Thanks to Kevin Urban for providing this makefile. +# Jul 2012 +# + +# choose which latex compiler you want to use (xelatex or pdflatex) +TEX = pdflatex + + +################ +# stop editing # +################ +latexfile = Thesis + +# rerun pdf generation until it doesn't say rerun anymore +$(latexfile).pdf: $(latexfile).bbl + while ($(TEX) $(latexfile); grep -q "Rerun to get cross" $(latexfile).log); do true; done + +$(latexfile).bbl: $(latexfile).aux + bibtex $(latexfile) + +$(latexfile).aux: $(latexfile).tex + $(TEX) $(latexfile) + +clean: + rm *.aux + rm *.bbl diff --git a/thesis/README.md b/thesis/README.md new file mode 100644 index 0000000..ada5977 --- /dev/null +++ b/thesis/README.md @@ -0,0 +1 @@ +Latex Template for Bachelor and Master thesis (University of Basel, Department of Mathematics and Computer Science, DBIS) diff --git a/thesis/Template/logo-de.pdf b/thesis/Template/logo-de.pdf new file mode 100644 index 0000000..348ad7b --- /dev/null +++ b/thesis/Template/logo-de.pdf @@ -0,0 +1,1061 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + UniBas_Logo_DE_Schwarz_RGB_65 + + + + + 2015-02-04T13:25:31+01:00 + 2015-02-04T13:25:31+01:00 + 2015-02-04T13:25:31+01:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 84 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAVAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9Oa1rWl6HpV1q2q3C2mn WUZlubh68UQd6AEn5AYqr2N9Z39nDe2U8dzZ3KLLb3ETB43RhVWVlqCCMVVsVea6V/60Nr//AIDl h/1FTYqzi18yaDda7e6Db30Ums6dHHNe2Ab97HHMKxsVPYjw6VFeoxVW1jWNL0bS7nVdVuY7PTrO My3NzKaIiDuf1ADcnYYqwT877+z1D8jPMl/ZTLcWd3pgntp0NVeOQoyMp8CprirPdJ/45Vl/xgi/ 4gMVRWKpZb+ZtAudfuvL0F/DLrVjClzd2KtWSOKU0RmHavh13B7iqqZ4q7FXYq7FXYq7FXYq7FXY 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 2Q== + + + + + + uuid:b8fa659b-7b9f-164b-8113-a465628b5a04 + xmp.did:0580117407206811822A939C2E4A0273 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:F77F117407206811822AC8ABD29F4166 + xmp.did:F77F117407206811822AC8ABD29F4166 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:F77F117407206811822AD2CBFF951B6A + 2014-06-03T11:59:46+02:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:F77F117407206811822A8A3C50C222B5 + 2014-11-13T14:24:58+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:F87F117407206811822A8A3C50C222B5 + 2014-11-13T14:41:38+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:F97F117407206811822A8A3C50C222B5 + 2014-11-13T14:41:50+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FB7F117407206811822A8A3C50C222B5 + 2014-11-13T16:12:48+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FC7F117407206811822A8A3C50C222B5 + 2014-11-13T16:19:14+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FD7F117407206811822A8A3C50C222B5 + 2014-11-13T16:29:34+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FE7F117407206811822A8A3C50C222B5 + 2014-11-13T16:48:14+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FF7F117407206811822A8A3C50C222B5 + 2014-11-13T17:01:25+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:122721EE1E206811822A8A3C50C222B5 + 2014-11-13T17:13+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:01801174072068118083E308287F39D0 + 2014-11-20T11:40:19+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:02801174072068118083E308287F39D0 + 2014-11-20T11:49:33+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:06801174072068118083E308287F39D0 + 2014-11-20T13:13:26+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:6AA1D33811206811822AF12F7F68C14A + 2014-12-04T12:32:46+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:0EE4EE1F0C2068118083B335C6C805E7 + 2014-12-04T14:46:25+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:04801174072068118083944DF2B8E452 + 2014-12-08T16:28:30+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:05801174072068118083944DF2B8E452 + 2014-12-08T16:29:12+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:06801174072068118083944DF2B8E452 + 2014-12-08T16:30:12+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:07801174072068118083944DF2B8E452 + 2014-12-08T16:30:48+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:F77F117407206811822AC8ABD29F4166 + 2015-02-03T17:17:48+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:0580117407206811822A939C2E4A0273 + 2015-02-04T13:25:30+01:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + True + False + 1 + + 41.000081 + 13.000068 + Millimeters + + + + Cyan + Magenta + Yellow + Black + + + + + + Standard-Farbfeldgruppe + 0 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/Properties<>>>/Thumb 11 0 R/TrimBox[0.0 0.0 116.221 36.8506]/Type/Page>> endobj 8 0 obj <>stream +HdWKd )DJu0 /|=^TG T+R|O׏?,z({z:nz=7_>ǟV_^ktm%ᯇuVX]j}bGǺv}<=;mk쪷:|b=!3eIfuг[Y;pKR5h,Niܙe*^>eZ{gU-q-mk/Zw*f㪸|qM{@j>6 dpYnor=0{ +<\8iAzY󜀿GmjrE`]A +hQswN8{Qơapwy鴆5u0.&Cˀ g]zKIpPJ-<ΐW^ܶ{y %Pn.V`Zfa"q3*Uq -,,dx\;xd@Mp]C"X0y2L|T9wQ/FxeVDnJ'g}<N?MX}r B 4X"s(YV~YUm҇^&b@g;ZOvAXp* m@mTΓdDqޢn)]\c ֝ WrgrMϝ5iH!@n#-+AT4I)eMtI >tu `I(Hq%qɥXk:=U"^J +"/@Ly"Fdy"rŦtRJQ"^ΘD>z +&.A~q fa"H!pF<&s 8$~P\iIkE8e?Ŧh^ë fe -䢻:h/ .uBjfrh0;ivxؔqm0nG0UGalPs5P[>}wFB!`J2NMBv:P^ s1qT26{ux e** +M=ț@ҹgNuf]='$T&)EB_3"`(fƲ# L.klmS +PX3d%@THΩ(:6'֕F{+)G@XVw'Jp%PԈ/C ;#Ebh:vkpO΅L5>锜"*0'a8 gf$SfU;,2:F(C]O{XM g$FMM +N1% ȈL͗rtE_b&#(oR+hͩEf۔^O, i̼z*PGz:y tPG%t?P ߞO'>OP/-1{):`qq,zbSC 7jlᨒ\J'"̶ ,BB6sN=h +@M+x=8BQ ׁ +pӓOX8"|SS@mCC>BkZ>R +1#7vX 5Ouz3UfŒ}\U+޿_<t72^& rJmp*ٍpTzReǸ^F~g/CP 'ǒ$T4S!pa>jkoG~r\",уc%}!bKe8ZړjJ+`,)0J"fwUw`-d 9*9M߂'AYvtݪF ^)M0Ҥjc\{&陰 s7yqhƔ^5rDqb'w=?ᰯ1rNs~9W=%Z|(Z▲¨`&Y%iiC,E+zKs*\M8yj&U5RcHN  ,ҋXŔr+SIt* Ӳ & 䠿](i*4"rg洅IgsBS3Ni%[1JcMR1ɼqޤp Yw[.[v9;crCxɚTRvj2_;/Mb3!5,(#,p }Qzvq ߨPN +ZLYKWsͼ*xryֿɭqe6Nv2 +0"9O-^sϘ x}e<K9${#IfA;sJ K>D +yOy1 *c +5!}0E,z?$ߨ-qmPPHQE ()#;pڝG^_]G}H% ,6)"`:RI͠&yS39TgY,]Dx\ >oo'2VQ3p?e5L_MYhF +`YGZ>hjձuL-} l*h3˗4p^^ݗzʜ)8),$.tjn#VgoWzRŬH +f &wV3j$6W )"zFDdmخUhFmd~e[RVԊ0)TZ-4N~ȵs_ۅ6$1S(ϸh̄tEs\ z6-*re*z@p=.snvaۼN9/SdżsyH}G n8ҼpT~❤?3.z /=23 _ ܼ3'3g@niy Hƥge< H)9.A 3xGvnk wx?p#M9? ;_D#|5.ܦlX!z? 0vӶc6s- ?>쯘ce4/!E8gSۄRBOǟhAޜ16֞_?6ƀc=QJ [ 9OlOMMpG wG>E*1u}+0, +LZ5U$|t2NPfZ;xE^bxͪF9-ZSs* +;H8}43ъ_L\L55\e }= &. #tj]#MH>N\iR:nK"mid19&t罩f.Uo}DTBM /(]cS,*7l0ٔpww5^?jqz]8]qGU0AceeF{9Th7 Ci7 $XDi<ܮlՎxaqϺwm^QVo5@v.}N14+4#%Ԇ|FwsjaaK7]Xɸ.UDiyVvDrʼnXo +n(ɨs.E^4/(OQ()*++͛8[o:tٻ>lgALt=IRB.Sv)<)@+Q-PTE$ +^HB=B|pS=!ZȨ]+ʥ(ˮTc ~KT뙫9'OVfi+JR$OTf?9UeYm^LxRˤ9;tl2Z4)|f19ek/fe' =k-k.;#L,z00l 6,%C _ + +L](."DpᵂTMYOg037w]XT {[v}[mrԦPC]NrƙBu4?.9Fv5oeu9 纬0qRU w_dކKWF6|w-j,QDfK5(8Ko3㏲Yfn[Qx˸&a]MHM %S+H.Q0]ԗFڲj&`lYNM' iS&D"k)Ac[1|UHk0UokQGF 5zDXFpk{^S&fM,_KFWzC8i2edx4gĔpE q]H\0(cU4Sss/; endstream endobj 11 0 obj <>stream +8;Ue`!.sMj^d&S6W< endstream endobj 12 0 obj [/Indexed/DeviceRGB 255 13 0 R] endobj 13 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 14 0 obj [/View/Design] endobj 15 0 obj <>>> endobj 10 0 obj <> endobj 9 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.4 %%For: (Matthias Geering) () %%Title: (UniBas_Logo_DE_Schwarz_RGB_65.eps) %%CreationDate: 04.02.15 13:25 %%Canvassize: 16383 %%BoundingBox: 25 -365 141 -327 %%HiResBoundingBox: 25.2783 -364.582 140.7891 -327.7314 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 691 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Passermarken]) %AI3_Cropmarks: 25.2788 -364.5815 141.4995 -327.731 %AI3_TemplateBox: 298.5 -421.5 298.5 -421.5 %AI3_TileBox: -319.6108 -625.6563 463.3887 -66.6563 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: 20.8276 -318.8276 19.33 2467 1118 2 1 0 50 134 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 3 %%PageOrigin:-8 -817 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 18 0 obj <>stream +%%BoundingBox: 25 -365 141 -327 %%HiResBoundingBox: 25.2783 -364.582 140.7891 -327.7314 %AI7_Thumbnail: 128 44 8 %%BeginData: 6596 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD0DFF52A8FD0CFF27A8FD70FF527DFD0CFF527DFD70FF52A8FD0C %FF27A8FD66FF527DFD08FF527DFFFF52A8FD04FF7D7DFFFF527DFD08FF52 %7DFD5CFF7DF8A8FD07FF52A8FFFF5227A8FFFF7DF8A8FFFF27A8FD07FF52 %27FD5EFF7DF8A8FD06FF527DFFFFFF5227FF7DF8FD04FF52A8FD06FF52F8 %FD60FF7DF8A8FD05FF527DFD04FF7DFF7DFD05FF27A8FD05FF52F8FD62FF %52F8A8FD04FF527DFD04FFFD04A8FD04FF277DFD04FF52F8FD64FF5227A8 %FFFFFF52A8FFFFFF7DF8FF5227FD04FF27A8FFFFFF7DF8FD66FF5227A8FF %FF527DFFFF7DF8A8FFFF5227FFFFFF527DFFFF7DF8FD68FF5227A8FF52A8 %FFA8F8A8FD04FF5227FFFF27A8FF7D27FD6AFF5227A8527DA8F8A8FD06FF %2727A852A87DF8FD6CFF5252527D27A8FD08FFFD045227FD62FFFD0C7D52 %FFA852FD0A7D52FF7D52FD0B7DA8FD08FFA8A8A8FD05FFA87DA8FD0AFFA8 %7DFD21FF7DA8FD04FFA8FFFFFF5252FFA8F87DFD04FF7DFF522752275227 %5227522752277DFFFF52522752275227522752277DFFFF52522752275227 %52275227527DFD08FFA8F852FD05FF52F87DFD0AFF27F852FD1FFFA8F8F8 %FFFFFF7D52FFFF7DF8F8FF52F852FFFFFF7D52FD0CFFA8277D5227FD09FF %A8277D5252FD14FF7DF827FD05FF27F87DFD0AFF52F8A8FD06FFA8FFFFFF %A8FD14FFA8F827A8FFFF2752FFFFFF527DFFA827A8FFFFFF5227FD0BFFA8 %F8A8527D5227FD07FFA8F8A827A82752FD13FFA8F852FD05FF52F8A8FFFF %A8FFA8FD05FFA8A8FFFFA8FD06FFA8A8FFFFA87DA8FD04FFA8A8A8FD05FF %A87DA8FFFFA8A8FFA87DF852FD04FFA8A8A8FD04FF7DF852A8FFFFFF7DA8 %FD04FFA8F87DFF527DFF2727FD05FF7DF8A8FF27A8FF2727FD05FF7DA8FD %0BFF7DF827FD05FF52F87DFF27FD04F8277DFFFF52F8A852F827FD04FF52 %F8A8FF52F8F8F827A8FFA8FD04F827FFA8FD04F8A8FFF827FF27FD04F8FF %FF27FD04F8277D52FD04F8FFFFFF5227A8FFFFA8F8A8FFFF52A8FFFF2727 %FFFFFFA8F8A8FFFF27A8FFFF2752FFFFFF7DF8FD0CFFA8F852FD05FF52F8 %7DFF52F87DA8A8F8F87DFF52F87DFFF8F8A8FFFFFFF827FF52F87DFFA8F8 %27FFFFF827A8F8F8A852F87DFF7DFFA8F827FFA852F852A8FF27F87DFFA8 %F8F8A8FF52F8527DFD04FF5227A8A8F87DFFFFFF527DFFFFFF2727FF7DF8 %A8FFFFFF527DFFFFFFF852FF7DF8A8FD0CFF7DF827FD05FF27F87DFF27F8 %A8FFFF7DF852FF52F87DFF27F87DFFFF7DF852FFF827A8FFFF27F8A8A8F8 %F8FF7D52A827F8A8FFFFFFA8F827FFFF52F852FF52F827FFFFFF27F87DFF %7DF852FD06FF52A87D7DFD04FF52A8FD04FF7DFF7DA8FD04FF27A8FD04FF %52FF7DA8FD0DFFA8F852FD05FF52F87DFF52F8A8FFFF7DF852FF52F87DFF %7DF827FFFF52F8FF7DF8F8272727F8F87DFFF827FD04FF27F8F852A8FFA8 %F827FFFF7DF87DFF52F87DFFFFFF52F8A8FF7DF852FD07FFA8FD06FF527D %FD06FFA8FD05FF52A8FD15FF7DF827FD05FF52F87DFF27F87DFFFF7DF852 %FF52F87DFFA8F8F8A8FFF827FF7DF827FD057DFFA8F8F8FD05FF27F8F8F8 %A8FFF827FFFF52F852FF27F87DFFFFFF52F87DFF7DF827FD06FFF8A87D27 %FD04FF527DFFFFFFA8F8FF5227FD04FF27A8FFFFFF7D27FF2752FD0DFFA8 %F827FD05FF27F8A8FF52F8A8FFFF7DF852FF52F87DFFFF52F8A87DF852FF %7DF827FD07FFF827FD06FFA852F87DFFF8F8FFFF7DF87DFF52F87DFFFFFF %52F87DFF7DF852FD04FFA8F87DFFFF2727FFFFFF527DFFFFA8F87DFFFF27 %27FFFFFF277DFFFF7DF8A8FFFFF852FD0DFF27F87DFFFFFF7DF8F8A8FF27 %F87DFFFF7DF852FF52F87DFFFF52F82727F8A8FFFFF8F87DFFFFFF7DA8A8 %F8F8FFFFFFA8A8FFFF7DF852FFF827A8FF52F852FF7DF8F8A8FFFF27F87D %FF7DF852FD04FF277DFD04FF5227FFFF52A8FFA8F87DFD04FF2752FFFF27 %A8FFA8F8A8FD04FF27A8FD0CFFA827F8272727F8F87DFFFF27F8A8FFFF7D %F852FF27F87DFFFFFFF8F8F852FFFFFFA8F8F8527D27F8A8FFF827FD04FF %F8275227F8FFA8F8F8FFFF7DF87DFFFF52F8F82727F8F87DFF7DF852FD0B %FF2727FF527DFFF87DFD06FF2752FF52A8A8F8A8FD06FFA8FD0DFFA87D27 %27F852A8FFFFFF5227A8FFFFA8277DFF7D27A8FFFFFF7D277DA8FD04FFA8 %2727F8277DFFA85252FD04FF7DF82727A8FFFF2752FFFF7D277DFFFFFF7D %52272727527DFF7D277DFD0CFF5252527D277DFD08FF2752527D27A8FD61 %FF7DA87DA87DA87DA87DA8A8A852A87D52A8A87DA87DA87DA8A87D52FF7D %52A8A87DA87DA87DA87DA87DA8FD56FF5227522752275227522752277DFF %FF5252275227522752275227A8FFFF2752275227522752275227277DFD62 %FF277D5252FD09FFA827A85252FD37FF7D52FD34FFF87D527D2752FD07FF %A8F87D277D277DFD14FFFD057DFD1DFFF8F8A8FD32FFF852FF527DFF2727 %FD05FFA8F87DFF27A8FFF852FD12FFA8F8F827F8F8F8A8FD1AFFA8F8F8FD %32FF2752FFFF52A8FFFF2752FFFFFFA8F87DFFFF27A8FFFFF87DFD12FFF8 %27A8FF7DF8F8FD1BFFF8F8FD31FFF87DFFFFFF527DFFFFFFF852FFA8F87D %FFFFFF527DFFFFFFF87DFD10FFA8F8F8FFFFFF52F87DFFFFFFA87D52A8FF %FFA8FFFFA852A8A8FFFFFFA87D7DFFFFFFA8F8F8FD30FFF852FD04FF52A8 %FD04FF27FF527DFD04FF27A8FD04FFF87DFD10FFF8F8A8FFFF52F8FFFFFF %52F8F827F82727FFFF27F8F8F87DFFFF52FD04F8A8FFFFF827FD2FFFF852 %FD05FF527DFD0CFF527DFD04FFA8F87DFD0EFFA8F8F8FFFF7DF852FFFF52 %F827FFFF52F827FF52F87DFF7D7DFF52F827FFA8F8F8A8FFF8F8FD2EFF27 %52FD06FF52A8FD04FF27FF5252FD04FF27A8FD05FFA8F87DFD0EFFF827FF %FFF8F87DFFFF27F8FFFFFFA8F827FF52F87DFD04FF27F8FFFFFF52F87DFF %F827FD2DFF2752FD07FF527DFFFFFFF87DFFFFF852FFFFFF52A8FD06FFA8 %F87DFD0CFFA8F8F8FFFF52F8F8A8A8F827FFFFFFA8F827FF7DF8F827A8FF %A8F8F8F827F8F8F852FFF8F8FD2CFF5252FD08FF527DFFFF277DFD04FFF8 %7DFFFF27A8FD07FFA8F8A8FD0BFFA8F827FFFFFF52F852A8F827FFFFFFA8 %F8F8FFFF7DF8F8F8A8A8F8F8FD057DA8FFF8F8FD2CFFA8A8FD08FF527DFF %A8A8FD05FFA8A8FFFF277DFD08FFA8A8FD0BFFA8F8F8FFFFFF7DF827FFF8 %F8A8FFFFA8F827A8FFFFFF52F827A8F8F8FD06FFA8F8F8FD36FF52A8FD0C %FF27A8FD16FFF827FFFFFF52F87DFF52F87DFFFFA8F827FFA8FFFFFFF827 %FF27F87DFFFFFFA87DFFF8F8FD36FF527DFD0CFF277DFD15FFA8F8F82727 %27F852FFFFA827F8272727F827FF52F852F8F87DFFA8F8F8275252F87DFF %F8F8FD36FF7DA8FD0CFF7DFD17FF527D525252A8FD04FFA87D5252527D7D %FF7D5227277DFFFFFFA87D2727277DFFFF527DFDA8FFFF %%EndData endstream endobj 19 0 obj <>stream +HOޕV +RIf~'aL!y^g^g>{4c;^ZzZްnq9Vw/$5 (Px@.ZDyt_[8. +A Yz%0T#4 s84 enPfZ{x=!}Bj"yZ^2$' +q:Ɇ^j@ t(VdjyZ PlQ/{2Q'&C3QnW''TXE* +h,'A2,oOx"o›nDf)-]2$.{ s=\v3ghy]X8^Xw}j'ը~^]._0 -)n?0?yT]usL5mk}܎_V'953}ڽ@;58C6Ti [E¿z2B68㮃ӄpk/886"9|@N9m 8p`k68R:էaX9^'(&^C9 !&hlVA Z-Ak[e /Q]:pr^!ǫLۀ$㴢~+ r.lcw`s`a`cB%]H! E1(4C +_hqqq85a "lq55Qk|Y5ǵ'5֔kS75]qrzrb]SMM 8 *GVd89m ׸Z3&2M,5^5sas渶5\kMM6 +!jsB@ R+`.u` l>anlLh!W+e2qqmks +mk`n>^B".A]AbWs\-oUUOUȱP`6!|tmE(k1 ۖฎkkOkai(0F XXEFn68w\s\ǵmI-m l@߷F#r #:(JN>.N9~)UľÚ? ke|.sw9 +l:zaz. ,&{xKr;wh`O.D h8JrvFE#h><Ԛ) ^)&T4!L}p ?#OMs_7iUZu`WmdH]g-QP+ۜ Q;tn2vTT?erIy#9r23S`Ǫ8@_7"7,$/HN0G"%HP6#RSrG׺bWkypaA[s^3O)a;[C> %8 +dS9H^?tٍn6nWT\zY:GA~cٯDZGqpGAQy{$uT72+@6>shzhsUA82]aP2픎ˈҰZRB""o9}+RRﻜ|*Ifovgfٗ'%a~?,vGx?.oj :Q1w  0;-pzbf>yYfRE7^>䥌]L꘴<GfA_QdmaX)SN1>A(KL0o͇A,9.Y{ȓADN&{zծYZ<;RY|m巙42AyeL eRTtrk0,߬ߗ,vw'n^?t1/q* {Ya纆蚳?dݲ//*3Olp>fXg;Q_k +G:)n~̮Ƒɇ/py*^f?l֍p_ N;eQJd;N:kn͙ DBjby3ź/( s#b-zq&O2\RK}8_ ++"Mk51ѝú^ a % 1`^PaMO`F^咰xvDӡhCWUpD%l ]0Ɵ/('Z'QBGsF}0}Ե7! Tş>g/\w)dUJ%I晸/fzDN\}b^AÂaYn12jp`K5Q_?wअcx&C~v-(@Qmsb#(_ VS M7F ݏU?ܶ6@ۧ× +f*Xtu@?TZ~32O3vGZgպMqeav^wdGuRZu :Iɪ6==5a7yl+mL ֙Kגjƪ;?@Yo."ٻ?VaC4`Z=_G[16_Y!0B[avf$KN'CKP7rm9!RJtKH|a,8 ǖ1背7j/0QcS*꧹:wѰm|0l~3!=T!x -}0{ i!V6u(΃9ƁշbW}ۈ9*st.Ir[Σs ^ۅ%-k3]JR3I,?g4ԛ$yҝ;zMΨ +~zCJK"_dv;>RFRW91y17 !Johs'n5 E!iϞ4& k/L28#K1}"my;A{/ycγ*zM{~9>i'6HɜghinDOdG! ADB'*E:phžܞ- ݏ|Ri)-;kx*ﮖwZؐŸjz),: Xz>Uzp,x]|7¼z1~6UcM¯̱/d@|BWB⽄tgy#6VJ qkF3C3Cev,M#qb8lCs-b_Rk1u ;YA:]x1e@tFO`1n`60?Ϋ,-ue 9č4z!(t-B`=;t@@V~@9VT.1"}Hԑ1!Z-`R v4KD)~[IF[w᷑5Q/`w mؘȍ1ߨ'lDnJUqOde-Z15!BS|Y* PNSHaZ/*pF2!*}EQpۄpPr  O OF.S!qủsqtԔ MuMդ8+SSn|a1N?BCSdYo]*p?ʢ.&ÿ! N{qTѺ&ɯDY ` 0:nLTe'u$92Y7RuLKvtyaWΫɪ-.(~Q[oCg@NAWFo;v)l" pLzQ# yFH&HW 8v#kA0M-ԍ]!u*ڠ (U8_c`pYu!f߰`ckc]͈7'BD{-9"1X:x5)62!ij خ,30 ns %]+ЃvD:n|CZچ(jE"wBb{pvszhF۞'Tyr@//o޵њT, +Vtd1&˳kY@B7l6)j_8`?No4[ \cunp\Njw%lj7MfȽ1qՋgV[ F_E/v-lLȖ~k"6kH6MXoS}r H3~#WP/˛"X£Vs!|wnǚY0;ٵtGk#a*ٰŽmhMn')4FSxg+@Ly$#}-ތޱ anbpjdqʮh͢V{!ڀU!,TX'2DisiG8P|<ߓ^>oBUlU  p1rfR<uZ_Hiɤ73~~΅m\$Pdf%QDOj[_&}W2G6y13f09! w!z?U[FnpFrG:7|ȷ㳒%*}U +|=Mr:5F'.U4_jх(; 32z>!VI7fv5Ur^1t2.{[HsZuh->@{qITq + +fwXu>*yc+>[Z,/6UIZdA}|z [ meDZ&F +P??oUr0bSV@.x\9[X%R,d,1/˄27PYQր( @ 1`Z-d590msAsDw+ډc??b``Rӏڦq>%ZҊ,6{07d!OXL;D,78,/.a!WLY8jw괏Uj>"Iwt\okɅaZ;^_uNーǷ~aq:*]KWE<" 9AN9O7k|ZZͳ ~,Cb?/Sl PD?;r ulh vk2_Nu_<Iw}EAw].:323Nn ӝDn*[dR-湩JqX3A h,9HvM=Xp27CC_M_8gۖ5VZ%kBL':aYwXƚa6kbSg ٙK>-(fzE 5ЂQ48Je,Ɖ)L3llqX>c3B_ JVr-_Y1k` |&vVPoF<تxug?#81-aXP6Hƾd@ME$auZ^:V֣|i>M"*̅1Ni~Ƿujp5xW\<,L(Lx}L[DNĚ{._&dRldzۆΉ`_=*P^`яKZd>=Tzt(̾KKᐚcҩE;ǭE}ӍᲫN+x)GQ&e7;6f6Wb30DXTyWaWJ_a0%G̕$JׅJƺUUT[_{sE';֟6,as$~L YOTQhs 1agt{G-ef],,W +frYW i:/ +Z v-;rɱh%akڄ<"8 S~U˨zzy*-LnYڝg$Ao38CtI/j/m] y|ɢ4vyތժCXp +' Ȑ2ŷ+dK)l,5@#UA{ +TUx42R.AXvh> HӬ&i E7Sv'u]LTu)[RW|IC|1]oDȧ 2gsWP1ka;B7^rG87okMXW/h~I䪃w= #!d'%bI#Vf- 4 ;l+ԦoxVb svG#J]ui:- CF\5L'(w-FH<[ӽMMAWxDTQB3hn.a%kBJߧ8Tt9|d_2*\(Q@L-eܕ[Z)䵋;+gu$^wp ˾=H(>=s"aamHƀctk{LkW.|ƥr9?~3 1z蕋+J5.l2L ߹l1ctC:O6PrR~<cU|?}qYx +sX/ +&;4{_E)$`Ŀ]0$XOD>@RLWŵ{Lg"7Qj 7#rbɼu2#OݞK/@I _)ћ~ T„EMo)"?=>bHIa2+K +k:9.]]AJ. ,Wи{ ]sSJмwq(<5he⋌XC#=ۣiXUoMaEҖl:72;M!绹 +v74 A26ϯ/i%=hsUD!`d㖿#q-ͧL\5I Y 鎻_˅#ZO <;KR{5>k>A$~Whs_ rSD[Y][ނ1,nF@, +I+R|%4^&O "0g[>DܓiB{9Q@܆-[fE/z9hI)=UŽ/2i^cTʶSł""$dDb" +TW?whSũa]|Nk`Y+FRO_(2T^wBlY2v@[hYUTߙj6v;s[$l<唹c,APiϜM}BYPvf[|6c:7*Y2R h3~ՁvR)n|DpL҈s11z{0g +6۸] 220"pܢ"?ȓT- c|V+s; ҵƜa! s]aNtk^6 xؘt4>ˎ`2+]%vv.A҉ss~wYKW@+/z9]ewIMBCɄ8*ǵe/s0Wn!1W0 NuĬ\:( @z{7<7D0IrCԆ첥|_V2ql`GM +ʿ!4obk&Is)%Ddp,af}~|? ;@~|ڷ }n6L)&2Wq R: 9];Y=%jO=kveOY]NZȎPPb$+83t7ISE:-،R4x9T/hٓ8m[\C +pԿ\ة+^ P(O I!Z vJ8^rENǠߐj1{HjUe:U]yH?ড়BfcTעDS}ZB#]k>0 "E9& QDC'Im*5}mSc}Irr/=_$*V\Mn.r#B"QtE縆EXU46}[zk8V`U*TF8", F9GYk?#"it5plw-WX&skǿ dFӍ`k endstream endobj 20 0 obj <>stream +HvNƯ{PpW(}fK@y/me[ ǤUOUWWo#Ȕ18m~%~2\ #=\x_:<1(bCf"x14/S09fq~#ZYq+I"+R/ha$6IUq0M?h{5zNsfHbp. S.c~dO}-H/t+-L9E.5xs%.q1!/ׂ8~)2Ɲ4J|U#pՀjz*ojgRx|e E/(F!7e-%ڱqJ \K~H1>~Z?/u/oQm؄C8(P^bC#*< &q(10&:#u|hx9z84zoxDqH[UJg4bDW +gCA,,')<@v}3UsN@%O\Uƺ_ @CRY pXvrСz%؉8Z:,-(tPP#AkIղ6s.۾ CA^̥NphףqQ{k6`PQkFnv +:yc(FZ>ڼi 9-롔&oa)$]@1R">ҚX[gh,c4Oܣkk;-("e;Hàr |t{"`JDEX} +}u~#Us:Wy뀧_+$Z s2 +z}!A+y8&hϗX׽𢈀cHaۈǂ((IɷC +,mt϶ >@ķuӜ&щ]MWgn:8`JO݉ P@`D+TS) zL{,B=dn^Qr8+|J;^B4SY'MОULѰvQw2@E1ܟ뷌[RxNtK$bvJR}i5+ʺ)yҭW<~Q5c&*mbW2[0_J!cݭ)ںŮ U.͢n(5:&PB+Owm<~2DJj{6"F8:'Rg )9ڑ W6ԭWm7En| +#e6Ľ#?vv5Si-dj%ZfV,vWa t!>ǜp>YNSJk֜?iݕBgʻ3=$- ,G/l=h$^L}=f=p\w__[9.7GhY+{|":R/>{ilAU|1@-s{ Vg I];4LV$0R*74b984#Y3yrAB#]# X=6@eӡ-%Ru۫k8"􏀂 :bu*OH(F +k߂VH2SPyL1eu?_Z"\b{vg7#qqJ;[dAÌ-Թi]IԚ ~[«?sԞ$<\Vt*KpqV ׬ zk\^(#p-? A}{i{j'/qb6.x9/SxcrZJhO:ܮcC/YF.IRyf%K.MNP5/H%YOe^*[N=|hρ#H=B9m~lZ" ^OfX7cuHz2je+ 7}Yy6ۏo뎡2ṷ'l=ؽ- KQ&)F᏷Uv]χ#6jW8zC3bJpkvOjB~=!募ҲF Q@j\ ^Χ. +8G{`fvb{ah){R1Tc7p5]D<)YG[&&a$`z`f_<0'eMOO}"Vm7\:ȳyd.s0 {3);`/[})a|h1SYw S?+6C~)*Qz䤿u_#.z@~lr/ +\ZX=vX>Vd +zz| +* Yr3}vvP?5. g$1?@U^hRdZn*=ܞ' W[z*GǺbQC5 ugWk޼:(DNӸ=QJ靭H>:fzw06baOP~V=lj{݃ +t;ۆ'gzf[ AZuG8t~wղv-̩+M'cT Mn| +oܧڈѹyJމWt +'XaVavLM} 8 A',(MzQ\N'J +ָu<Q8HuKoOMrnP㖄p0aqnpJAOZDiF/+&25Oo05g4ǽ +|_eh{ `f0dAF >d(NpFs/ h8 +e4Vng +%H9/L pGh& +;ߧkrr;Q@{QГ=&9Χ\4̚W20Yl D , +6!}45t GOڃQp-8(|UOX`qK9 +INՅ o!/ _a=3+]5es8Xx} W OMF3Q-8}/B+Go!aEkRװЩ*[vi쏟,#a[iW7YHjlNF¢Km\wLKį@Ͳs 5CFm<r*n^ajgY(jJTiאz^⿱z|Eo*z׃\1`b+rnx˂?N70X5SLbGW`b`70JJs#6\d=: g?b_O'FZ;5gu 0k5PYӁ&MQ|vlyi%{b$YPD+bkToz}/Ff'^ +yv_G*OG 'gwcWGwƗVpV->:+Sn,QN}d93~8g}L$bVyɄEV{4=Eݫp?Z+ݍ^*QlvrwC4YdßIѥ5؏F=; 9H7/_v=ӳwl_l. L,Kco`'QR$~(>UWS׭IP+R]ݔl$P=,[3MrUJŴ~¶C@RԯjZ6:IOѧn]CIQ@i:}dU0k~> +ݱ/M/OɾI5 W[4kqm\#:\/w42 !J-Ij#WfaRL9KxhJ iKs(rſ]d& jVI]R`$ƘZ?l- [LZφgB<(;[]N* -90%lC53q$8>/99'3 ʢҸu"5P9#vz yGwRBp AD]h`$+.BӝYW|nJrzȚEZeŽ_MSRKi΋9I=Ǡi͏=EM +W=g\R20: 17kY4f$ao~GuPEzUs.Z1K|v~\`~jxBG, qW-ϝGf:>HA ӗ B 3irrB}q%}7id6ndiP)T\Ă {БuKԑJI ٱF4%VVJXGU@BVnoǎuccmī,%J~ߧz J+ )'Uѥx0_1EvtS*fj>9CXٯgn.$۱Pc]|;܎ҹO'K) )qn,)\Ds&HqT(-%+}NOpk9y*aWEW ++%fmSPwͳxWdwȧK-v3°%ߘҿ11Yp7pq'ȼXYxIJczbz040u +~FCBZFϥ~ԙ%VOJc.tӅxY}A@*OTp0>)mr.'6ohmr)aS_ifDsFq*BfHi.iFJ:X{]5WyV}D/? }K9h;Sr>FIءn֍dƿ~ž5M_3!qr~׌H‡TUT[v"FCaXak/zWiC7A da>~'OaT! +P@uaPt->(JQ)idchH{Oyv]:G~(>A?DJ)a)cO 0L2PGGk + `h %$tPXXrds|0΁:ǚ_ׂ r +XËǩ.l~a#z%'!$@@ * +8@dQDp@q@2 IGLTS5^x;2RBKCGVIEB42q(+[ Ȁ@4 (AgWIʤ(.x96=[>U?lyl2yWldgpDٟ0!0=AIC/aXMj OJ;t(Y(܍ @$X5q"T^2֑ewiLexoM;<\ZwQc~N׬v{u#*.Ni˟UKu*qMmU,tK:ej#ɯ'ڃ6zרVJ: +!_JRV5ޓi]/Q `Z]<&?5tTP]:x{WA0:Gb7?ic;=//[in8; jiZUn)F] y)|s:qqaNgօb7$ s۩;FqrN$6]Ӽ$}#!. 2״N#rjNo|΅7=SU@X+kYAP_F-!XZ~=ݲč5-E V>9,U\(_) H{~Լ')DLXtO%Ȯ3- +q-Ͱ^`u<1σE<.߅0D̔yve*lk*u0ŝŬQɬ`<0+`^I+rTmcJX\!n_=:oD={<@^&/{:ɾfسB~`ړl0pQCp`@c,8r ; +:bU #J@;y%!ciAv܂.%'x60_]&DԅN 's%86B +ɜcAQ!K5"N)D E^[{D^Ӷ52#/XSQ6t$ɒsWv+_:o&7phJ2$oews 4S+n߂$1H %)JoFa5|Cᒜ;c ʈ9-ye90$g9q;(l,  Cs'%r Cp{I(ׇMrxf /d;W܋()#%MhҢlM$`Z1&ڟC *Vi]9 S+@exS>xeW%rdU} :Vz;Jړߨh#) [2e)%DބX՘}{%Y3\~1t%vfagזN "oF" ]\({,(uI;4>)C/}8T*`cX&.Q$ +1ƃ;Hso 5ڊhK@u~)x2_NV֯?]/h9 +YvWb:| =9ƥ:V=hh7piPJ_KC׫a7 Y[ ٟ + KڛƪG1)󮴌n_<=8s.N8ĮW~B~{8D2wBMc2' "t cy#v>ʜveY}N[Jbv"+/E [){d*g lbOTM'd4l  QBhHИ0 q1(AVKbdx,D3^IڦH2Ցe+ QV-zWJw3+MO]9Et0L2% a5p lӵ Jb5I4嚂^jsl_h,Ə4[,S5t-^[U Jکe g9d*d=ABr@X`=ֹD.Dϖ~^^j%Y^wpx;\#mKxI³I1p|u; Qt?` l7APR8Dj~Tq]rA2srN + +9 i-}8Knt8:ekZ\4TÝ^ĐS hp89E"rO"+ipzl5{rX!`1^XlT&A-:_ jw ً{>'#85ajnR l3Ld<]SIW1ku v2?֫s-y&^A.TP t RWnzMG)'3gfΜe )`%~C& 6tAH1$XlcTc '<-U߾A<&3IncH +K~t_P_6xX~VߍϤ[5%$v +j>j+4A(n\Ϲ+=&V;T "zWA~gS͊^ CH'fR%9bj~Rf >%%iL7ZB1L ̪zRCHŒ2 +]:贈6Zj`cET4"BeN}Ma\n9`c K+Pqٮ0B?|8]O?8bd) 4mEG\ZN +>t}=i U(hC%Lu+ȷɑx{:fF ύ,mBY2uRsu㖐FH1sPF<8J<輴Q@y`>{:~j.,q:v״kGm;m؇cY)ڑ5;ܡXǬ7,@~i cw<<(1wFW Ǻ += +7Q|Q0~Di E- px[Yu0^udlx>)I|:}/t ~ٕ-!%dÚܷVc i6Mxli\5f HU\:ij"rAK^.\/Ȍ܀$N<EOFHP Gf( +ɩ lH0Ut=_i;f"\B:&R/+߿rU:˝Krrr ?y$tK|, j@/wXq5m֐XԔiF);E\igRw%uzcj&TY~砗J#ޕӖfVÉ٧E]Pa 3ˑٱ,|noh5 a?@͍,{"G6òa1QEMWwD!VR/ƋԲ$g5.JlY{šw%̾Z97fo}8TQ S%1iVRKL67xKvރEWD[?syF0 \Q=k f;uq=a=6F=ݰsđ"1RP(GF@ +MVvPC`00d@DYLx Tqk@ybFYv%3_ӈ'* B蝬M%ka^)9f͗S&u=B8>]4Sty7dY(wz^A9F!H(@\z8cHd'y Vo <U&TvSz/#Qc!|JBM;YV$al[̲Tז`L&Hs9j ccIuqyVn824 |`R>%݇_ܕ+AP]0B=v@a/4}Qc{ưȻ,c*+3 a# ,R^ܨ, 7?VH`)/fJ0*XaH`i`2V>npD]z r5^d|`LgrKaca*jWH NUC]j5($'N[׾T}+8{^V]v| +'K_<WٟdE/׾<L41»Y`\{?W]<\B ?b%[Gv9}m&5Eᢷ[B=fƏ(eKXogr} 9\.SK+iqItYǑnC.+|ʌ3v r(s_~\Rղ/mRkFc]iJ \.(TJ\|zp>Xtaz,CNʙ +tW,0V˳o^Nj<>9۫¿@``-W!]Neyp(/se#'?ߓ`Ԗߋ(R` (BYNlUJQzWfef|I +{"EXqxAGŘQk5ϋk30\4c=2EKWM(f©,"|OPQ}Kt3 Iq|}# ^9 +YHz4*x +uyk' +\iw$D0B~}\<?oQ7 ZFSFS$CS>_Uһ5[[JqxK84p6?պ8DH + DQ&l$#JIYe?|>um͛%Ctz踦x/F\ CXNEi6V^Fx=P{P =Gӽ΍#W'tWP-ojY ]qDOxtTeATH6IJ3Ěnx~pd/s|z,crnB@+nm倕 8N&'!v^a4̈d,QBjLOvkK9蜨%GFu)+#:<\3JA0gk)mF2猴vE=aďH5*ɇJ7 @D/ |ZQp5 kr2zuV5+DQ^K&r\d-譑oc֙&P  ePx$TSymԧZZ`J/&7cCQ+aF -U TO9:!@(”O>D =KEsG !WRar%8&[[ŔcW,E0BC0iWR#UmE:Ќ-+~˲͸Us\䳖!9S 8wWQ_R;_!B9uW#S)i28 9s67^V{!/q,8OZb(LUgVf̳ތsL8c(~:DŽS9&~ʱ|! endstream endobj 21 0 obj <>stream +HWZZ܃ )B((4ywgNBG=dggY3)lRwgƸ O+A^ҍ.cJo`NpWRg&Y8=TAO;LJU^>)?3h+`@PG?(}I%0cȿy @PBA@A&-U3X bG'I +&@Pz!aF(VJٌ}P5ӢibnB|,/} t.-5=fN#)ζvfq_}h-'3|}Ue+=\;ԛ$jW.!IL*.o܌Bg17xZRq[iQ F{2BQrd\h$e4 BCyJ7׊bbxSbu(f,sbD=Æ|aLD )cc0xנn;il#W1uS\&{Px8xaYoz_A4y^=v"Ilf.{ESX.sn~!1mTc@ek6DU dnp#w@}ˁ*֮H9I?.Ke dyq &N1Y^tw*"Z'/Z?^>BL _#*!ݗwX++3uj..Cx>/6ro1 hVTxxfaA>k& v쇐rIp=>Rm8U7}fhՊG1ͩ.*]֬TB<BO)f`#P +CP˅O_|͠U +-l@py"ȠeD;JEo +ln)#Dp "2!_30h< Cf9i9v43gHs+ (Ѯi:ihUIL+iբੁD6诰e κgtl=z%ܛoYMt݋mHaZ h_'zF3}xoۗG\b,˝lU|?K+\El~f Q.xY;գu† 5}㥅o&G{!>&C =Bڑ@h6 9xEC˾V$NeQ??VWc/_RUqm%[^eĽMixTN=QeHuen}duP\,|L$9&Aw/I嫣Ց!MYuFrI7~"M+AKmImWk{zB:},;/dDW0 J KM^&h4!<^>V5ⱓ;5\ܞ<ʢkPOYp{h+T)wg(+l@҆LQcb߽xov'/9gopO=x3 >H+7_m-"D5uśoi[7&T4}M2/o:/[wHK/ATߒ:(, 5\&hcIN3'UKPaGjiPC,5pp L.-?!ݭW>D:KtJcv |U<9"hšat~f$wzM9G  ʍ +]2 dR{*=i`-@F_&W4$K<=](8.mɀnqd1p}q"#W^'}g?i8azY]{z<]rOM %A3ҌZ*}?$s47$_)UuWs&s?Iy!k0@N^Iv&(TxT_N(tνƹߊ/%1NXr'c>:5v!:{ $2o.:uw)OTp&7+K78s,QWr (q+rIR|e7{n,A|?sP'3J_}gW|=ax*Kg;)jN?_ +S]o/TWFga=mF3'rG'΀r9= Ib0bĠ:SQgN |ÿr}l,f_7{ Y 5IM߶ˇntkazǴױdKk |=*:Ymce/V\쬮\m /ۃ7WYsZ!㛪F:_}nu4_3YOR+ұxיeS[7x]OwÊiat+.YGqFh@8مd%X/H&rf2r0fgjc#:N: њ#ۛ0Y] &@baI:+PlEf ?$s\[ZnGYI͌]Hiv]hWlpq|Io OƨF?b{"X?ʽ[UtZdg7U~whL/Vz8! kun`7k@`CƧO&kIg@'ϻ$?lEGYƛoQnXN2i;lvΓƇnm$BnOlO /<M?BObك >::̏ OƛΧAck篩IuqԜSy' Zn5q[puf|m2hVl˸pc885=^|Dmq+q.r7ՊV4XzPHWSE/V֜5]؋]y_Ow+Xa!BsrUM!R 8řF1E('Ɗ+DMn`0VUt̵T8&c aAgj^u< +HLlel x@j6v_=B6V)/Owܷ\d{xp&e6G4O_6O3)"='a)߽}ֺV~&Μ c.J +f>kH~5r@ZȑR&ȓDHkQ$%ʻZ}7wb2܇Ӻ +S1m5["@Bo{{#ie%ॅHo%b}#{bM7\]?܄iA2I +[ilt Nl9M Y<{4 517M,`.=ĕHOɭzdb3.v>) ]<0 +)c[:tge9ccM>j8T'ۯ8tO*?u `_o"f>(r!dУv j<?ԼSSJ# +Mr@R7 Ȃdέ0Q^|rd. >pD4\6 E~@mto'`5‚ǔ'ΑdT= KszcafVk@p7aΖd ;WaDBFXem>,2]]X_oWQ3+FtJ_V~*K3o?X(@ _1;a@.wz M4m(E*i|HkfՀc5Io,'\y>"9<|0`Ԅe%9zw@#pc" UI xѳƛ;u5}#f2_oul ĨDq~!Vl WEp_oZ>jl i3 ~(eT=ӷx֕͞3H84lr@\T QieqViB>9Np]K 9x;A(^vp<Ln c$P/yc!_M! <]:E9Uq2:VE:U1܇Br\! +jGߟ,RRG,jP#/\dX +ϷBbfԚiLh$O0X(4-5kn"|B0s^߶fDm]+GEgӬxCzϕдaI>""3&k%,B E3]Sz:9]GÁ"tdH&m +K2߹3AOl[ 7z8̤Qg0e>%KEZǪhF'k%'G|:=@O{?ԥL.qg:=hv> GA2*+[_5h j !(r:X[3P*_f}2? ioLƙ!INv}79%5Nu%}#Do2ЈV(b4qD6yRG<@CsV$ݾC吕j)`F]0om4XԖ阑?~<]ƦV%O<t_JQRDǸ1 U:䨮eX7Gjtp5ޫFQKEPM0d0et=na֊D)D6,1#3K5GȲj#A59jv.&,xz=V;8i@(q e\IWa3\ lY&* nk5j.Ovl#BIDO'yk 7cg|!$Z4U>LEp8: S'4ޠ?({<plYE7I-Dn(K:8"׬y a&kQmbso,=+zqm/*>0tׅfIԼB܊h, iI$Ԏ"|*"}>[3HXI"t"_ѡ< 'N63TEH; _P(L7*blcum07onSoY{J8V{O8$Qשׂ t}-ml VF4+k +YM FOia+$ PtXIK:>Ҁ9G>\yVYI˯Q[y.~_f(Sw#3DBQņ䖱 Gwؑ/MKA~, !] xP6j#='"#2>23'NPvI}mVZk"CSr )Ic(ZP}ܖkwcLlv5Hmԏ^FX$FIhTYc HS3u^C{bz/`lGM?zՐJd\bK<Z܁DģH FҢ!&f֧0%@uf#ɰ 0 C`¿nDFGfCzU4JetvC\/ +pè9.[yGWQt|ca󾆉E707rHP:zHK^"h4Z1ukP +)w *]J F$aZ@2}2P]Mx/ v"&īǔ& $'Px1J.#̈́ts(m& %;eU[WhchmԖ:=UUERWG_iтVrЉH" d.8Z쵌|epEɯL=Z1KD$Hr)P,=!5cwF$P~'$4 YIcӔX>n 31'>a8ѿ1VGc +- I@hCcrJLP@4?/C7 b)Ε9U+PQ |:Rle‹'; )9H9T8'*!J&|7띎>y~{ߍr[F}aDВR`4'A5t,2ʔR$:ޡtmqۘ0~pQOG1RJ̇|%AF?Bπ- Av[N"HVdg7/ZL Ʉ-2TBZK{ S$[En4e@$S BXɪDN8 + >w>~w&Q&p#H}^{^ DB,D5~Ǚ-R~MU/J+#QEY(nHZXapY^FitXf2@34}?0 )Wpa\yMLݸ@-uZf ÅcPt$q6`HuiP@,2) kZpx&2qykm8Zp93(k%ytncF ] +e-8Q sEj2u?Zu{HGb#.]M9L, ԂҪ<"Gn*g#9x3ur""gsQ/Hb+`Amq*fVvCiSҫQyDTȵe }Ff1bͲ8fO mDM""5" VG2iC(5jHrl維 #y9hc5l#9~B-0)he:>k +dL~Հގ 5>.B=+5 +=Hb9  N +RD@,ÙJ`zAB_m]ߵ2G*l2TREw։Śu6Jpt. =Ƶ OPƤA" DAsHB=8E"9r۶,+ "LK Vȹ忬 Gy'tL7 jtͼ +@hNF 7S~ͤf6b'I#bAIg5SHe AX *>j?Qj RZ߆J|gT#6R\ڎ"-zkly|%j=2c2cDMWVx4O+iJrIt|NT.9(w`zշ< Cs`dub/77kz-MZ|v|R;fa6.NO-HBD1"XN,A4RЄ)z<]cd~mpM "J)pzC<-kW I+O$O$OfOSx.昋a=Y "fXO6eYհkYOCXC֣a=Y٪횪ՍTz\w>i}*T@ZKXDÒ,G\%~C$rOvnZ1d8Od8Od8opi:3 hP4]IZ.iΖk^M] (`Ȓu˻Xb 3f re'G *1ش.`ٌDn357ɚcl&4m62iz~iƂ˵i_M4FCnsj6 њXyܰv!-ؓ͹] ܺRH! +M4  -螙@5GTI Y+v1*.1Gߺ.wޜak`br>5$buD]y n^,FZDȹGc]-h0Qƺ30]ؤD&/GAo|qJϺH۝g_4M| )cͺH۝QZK8+g`2pء n9v=[D{_]=?<}|ӿoϯ/OߞO>}|}_G?p* endstream endobj 22 0 obj <>stream +HWێܸ`0 Hjud4iGZjz>EZk{mF-kx+aɟn.M^F+O䃭~ +5na\W!+Aٵ^OubtVnӛz>vhEkL}X?(wqYde^xQ+<뮻xE䍽R akmsBR}7!N̤?O~va߁H.q<[{&[=oතzrPᮆI z|n>{xАրE6y۶.vn!}wup<!NxXnhc>P&?](5;6-8[ckv|Q:PфyddyU\^~Qφzvrw>SS/5fX$SLVUqQKx3nx ^J0E"PBTdˆ\@)@Tx1QQHH 0@@ T1^,bLݓĒb:N Yl(*ag)=2QN$L*)^"SR(LRFUXk"eHTYZd,YLg&+pXFcrS<$WM^eP0>.d +-,LJY2-BYeYUpt=TWaxxz1h +z{Tgߟ,yzyn=(F 7S1 @Fom-N~1.HMoӷa n$bv h8H@)! + / .G +TQNyJB^aȐr[ ]8ܓ#R# +L.ܓaH@"*yNW'જ( ]dY1Ҝa{$_hX4SURLix$ZTj@X d\2K*QnP +ņw"9, P$"DT 1P |H;=|MpN$)@͠htC1$щBxD^դ9^/!U#5bN28zR̤Y iF%m"H ,|%ܥӤo4ZFa^ rQr ¦p9ќ8Z/DnB9Ut,1ndĸ4Hє[RjGW+p@; \PFUVe I/:4 ;$AS:*Ti IЩ"^HCr? +#.  3cJJ tѸdJH@=@*b̝7qK'$; Ws`b$D&Wf`bFI$_ +"<{!C,g(CO(gu;f3jq`'!f p )'1jT3rF8ye㓎ySIvyky# &%#-<_yM=mo8NTsɗ- +{R OuUy &Ys'Tk TI0<OSpfꅂ.ɿs N6SRQٕ59 rsֻ: wᓵPZa\vƍ0|H6EQbY`b&u!}Ob~n%򯪿)O7PRIvH '!$i:%{4O݇7n#N\\\{3_@D#>{{oOS+{55Ԯ?'{9LtSvgmǟd/'\ȵ۝;\Dz7wt<4t`暭@K1+U~BBnOٙSG῏n9oz*/}p;EQN`:8q\ +pC k yz5U Tup뵐!Ck"FByRhy] +ht˵bu#K1/{a' ++ҍ,V2kYu~dH 3/2n?b}zK|7?&?PWַ9HEQûu[-`%WP +RSj@Xt(R=46Pcp%L Ȉ'kЫ̮(JsYY3 ԉ€`Nr~B*vSof1~; wlH4K{`3 4?)Dbq;Z),e.DtXԃ +od{g8jQ*`8xϰ d"NH ?ۧƖܿC`P@,w< o6bp $zx1BTѩO 208tC4n _?<b^~2!TO>ߌUi{ ,B %NLB8C:8ѹy &%B'N)6yg-w`:pb{Lη&CoO-ʧ_~.|>}0^\{&Ziз"[,nų-4* ^/KpN. +;~,J& 2+ہ8Wi]w-=̽IqR Vuͷ$ES@lMa-4WPBYB1F/lv|37d8Vk3V +) 5%Dh1^b{5%A4Ǥ &QyDrʔXLd 1YUCHqԌ@ +ba$iO*՚r&Uzf lAF6ۼc5˻ҬlW媖򢒔2%+dWVmxw*g ˸R. 7y6*Eٔ +2gCAѼZ}̕)~w}KзDжxoO¹h.u=-qBפ.\F++ڌ4+>wX;Eٔh_=Gm;I 'V =4)%)vjd'dمi6YLav\Y=<>,ݮ̷y$C2."ܕrܒS{opF~;D&܍vg\$v%U m04“X-a6,(" ٰ~7_;q SӝFqbq !ٰVv.7͠iBn>h2̆_p4$"6KӻjkMI4Pww Ȇ͠'"RhQA2āu<0P̧#@Q;?y@`:s-Flff78Y4h Sly #~4b{cusơ+͡6 i YsOcz>F?\Щ3'gʃ :t*t19 V:#nS"蠰9Sbp>\̅̉ }2 bΐ:!"}\ S!"7jpMn0!YN}sUUM0ETUuVhxpЂY_Q+9 3BE+Qׄ.v(!s7`P07JYzwO4bcc /D&< v(:,_Y×*۬m;l @eOX(k1yIYwй*eAUőbUЕO%ΕŬ ӝ=-.|Z=n* ?@o{9 w5vZvAMǺ|T)1}|\IR0jYI˽'5Rc`b?u֦/r={Y^WoƳ?>;_17vC_4|lРFYA9@:L6՛۾jC'd #[ߡ ?&;TZ?qExPEBL6J@" ݾZ?}k 2٥M=Y7P$fRJ; +-J PkQHJ6d3,QOjwés^=lpf)1$)6C1C7ˬ6D"?Wõ%o5DUf(\P^N0`k}ĻlK\}x^cǎ+x8r9"?+P~#̳fz;)C1(t8܇rsw#/Az/xp}: ~+}:G1@h#]Cb(Lpf@}tc30VF4PF]j.s*EK[ɪ5Xm/wnc;݆KSfh"Xf 18?PT:\=pW8d5@G%Ɣ!DdB*UBw@kt|x33A:gFP>&,/Gr#~ARW Y8,*qD5XϚF6mr>mCp`ԯ{t/Ec`݅q$O?6'㌀F+]A6MƬD|OsPp%#z-esws%,~NDAq>2y`!ѷyV\I>RMGu`#bR4K8)Ϝcק?*k#ܭOAtXDI/꼛lGޞ 1`cئX +#!/͏z%~nZ<5P05 8B$RX ]]+RBsPŔ"H`̤}=d{8>v t\+&/Ԃ G81|(X`4Vjf~>=6[iꚣB$D}(+,DE"$!krk5Td]ц?#pd<3rY1{UVA^y-ÑhjXʉY)ΔM2ƳlLg2Y/6r3L(X07cu4V$zWP2x\o4L?\) $@/0'iko-XiJMb6U8UF6kx`oģDWFwt)`VlWRkbz֫e:$Eb`6(Z(b,4C3_2MYVj) xJqs +XEH)ƓJ4}X5dm6"B%F&*&,M8XP@Ѩ(TUL/tJ%(TIsGg|OWh(,<7mL6Pf[J`킴Y×j:gmA\,toD&L7; |goO0Y*TBb`1130WBԒD6s凫V(DN2YXkFĬқP NBAQʗ"\3YJ)WJĆTƂZyC{\WVwvA]ÁxB:e8d0azEm_nXރZsu#R&t4vB/HRj6J!imf8=/ rSHaR#Krynk={H=*,y:Zx1;ц0CKt> |MkqDg D&EZſ t +5JZ@R!zWj[Ų]UeRէGmͩjJU+6=Hm tZ״8Kq=d:-N]vNpnQA ?Mh`,5=Ng#BnhO[r;jgʎ0jzn˂wlHފS;ݲg;*Bɜ*rE^$sqegyFܢmQbai}*=N s+f${!Mdɸ G j#m{KZuO74{Wf~LuVP}eOoW]21xˮ3~Q>9cSu/F.  &&ֽ`t]=}h$_֯|ꤸqVY3Y𥤒gv0, !3koIpl>G%U& 3gJU8:?{i{ϧ?{//p_ן>to r΂{?З~8݋jo!Ӈ іX`Hķa|pn Tn,b,llKӫwN?, 얜6u߀Ň m3u%׭nY}FvQt 8<ϙ262~޳`H]v#7eĝ֭uKv_8M{;}/FnWNѻ=S.Nwn|4T>7;|a}7rrVvpJF|pw#7+r־uw#7K0ؿNۆmLNw7v#7K.%_;̒3}w#73tk; e>_A0RU_,.n뇃=S1"7o"E^n?fR\}Z)~po2Z;[1ps&' R_@<j'=߼5b捹ߵÀEJli[".:g!lHu,#`Haحm/ TzO€ ̮b)S<y}d|2_LjDPRH߬bBGW'gn=dmɅ~zz\=Xgq‹v颡{~܅d b#"F?o0rQd&͒uJJ0{;$,#+ś6$(֨xʔL߆L F +=77's| +8}g`0Y<\dv0raW#ۇZ 3Bsx5T +8hk(K20K(SLurlN*^nq<[s(Hvq|L@uY2؄p)n]Ck`ѣ3kR38eDeCHHrKJ0 Xޟ<#/Gq3i!/s`M}^%/ֹ 8:ڙQh-\&y.8(:XR19L8I <H7^c@£zy0RHY16WR0jnr,ϖ87kr>%܂6N2s2,R]K(2utLW ++`0cabM8+ x H".g]0a/!,V(h6r Vy(락VJ0Ԋ`uLd׎T UZMhN6*N%R3qȹ"` VcôF+)4ASHΣMVݬx4 v)M#nM]F`$+@[ra08vJASA5ecB +ƾs˨b +p[xP,ݚ4l2MU@A#糋R?VA,I"uXłլ;[ҙ]R# F@>v\}ZYʊKZr&Y-T:38;J4H;W "4H^k96{IYWdu-#5*m.x3'BF VL=k.#)-ޱ eȢ1cW?wf2AWh Kt32P1F1}F$1@:c(uSpήTH5\F/QYP5  +K-~ONX™Ŏ7(Gz`7M!&n*\%wUllĎ4d'G!rI: v(v_$j|qJiS 46 3Ad?;S9%29V %|z_WcSqk֫?YMݍd^Iw/kU& $ RiE]9]Dh@ x UXMd2Fc5(A f$ҺGu,铋E1Hلm^LE3k{CX x.ڡQy(g_ L-adMUM9j&"hZ(8NS Õba9]Hv0B; H'u-T +44*)l,jX,NPQ>78徱x]AEfyTI'I֖TVk.t4NGh6Hev55+x#J /h \ڕA0\~ Zn$H]r߯D?,-˥N0%{E>>`d^mnR>B@1݂dd3VhoƂu2"3<\1ck}<#f(Z~h Cɢ+\|r`c KŝPvUƾsS[*U7 h?r1ØґOh z+4x2߽0V_NS;˰y;U[" g{TOP][דO+]Ϊ'~ +c{>rs}ZV(`WK>j~DyZ65U{ I;ƸSdsM{}0aېܠX\;{B"$V/&< )=~;`7dqT`(f:{r{Cp-38k1e=xzyPifPbxw)sleT+u !fy+3Oڤ,VOv%sB:/I4톥Z n:ՉwW7<µ޲صC؅ WoO9O44zWB94;M;Y>[[ \rk,Nn֋#aĮxoS/)]^IG%Gwx}~7kP,wwQ.kӏE&nXQ=''}Ԇ/C9X em|pj= P.*i Wh3baޔ)]> +CNFGyYO~~h0jjTܟ魎̔ۏMzh"~ؼ't??K9EqsPcrzL6ڡe>(}qrm [s.OU΅kS. vG+\P[zSX5>-;3kGSI҅Hg},nVkﮣ=5a``R`  m.?¹)-tQeY%buE=(ˮXϵdq S ZmDGo +(-D[,_ړJ(KxLo$ R&l8dY:brS/NYb(YljWE$][-%-pGR"7;G* + ; x;"ފ>_-؟[qlQׄ I6kfzs27}6?avPV9ɳ>B8)yqrNKOVYI(EZҮ\!E7+N@pk-eþmjfS5 qjK 8vu MNݘ%bG3d_֮ؓ 0n j.Wz7{1k`c/M\U}V &<}Zx[)|-(OdT* 4ojW:S 54H7-1D2sicNxϓ8nfd}>}Ŷ(3[4\ +>j(lN6B 8~PM=ghohۘf) 4_nM8 )'OiUxyFUa|(+{hxh;^v6\,-}5ZsZ5BV8v.mou꽟J*2ޑ~|Oj,[vEQM"}yuV&Sxa~liovp VV*cq)>͑0( +1}2lKxÉ+ϩ28 +衔X ", ̃ey&RNKQD&ZYkw6 ]୛O{ R)5sleFvE{{Hn+zuPCݣlKtKI|WI7 |#ɳt_ XU][OF `.Tق)mMa@vt$tUNjfG -OA^- ɤ Z,smMֲC$Aoq)m.7yhE &VZ@T'[{gt!)춆\BY5sx-(qJ !f+d#qJ4crSMS?Q&c&#,.81bTp<ߖE撚 h4r>Gqx0_; 洬*9̫˄*`ݛ\Kw6fr +V&*V'ǽѿy\l$ja\Η?{p w{ iA̸rTp|* "pdGIaDbGT"zE5w9cڅDY׀z,9) c*x6;#G?Uew< \;J/X}3xUui 6x7{!v/n-!Dֈ&+X2'QipWe1JW«FGsMf0RdZ8["H֍tdA^c }vWQq4<ϟZM4WMPc ԋV䲦+m½kƟ<ΖhK3kp:@Pt{QtJ86 y%\w$ vc׻"f2L|OH.: 0mJXs5#8mZf>{i)CBn +#;LQL8p*+V 6 +* nusQc 4mu`;vcFⷷ_ĖJca*@XuC bLwcF [LJ{S*JvoߎXk2JJkiGQnodvS{|1O^v$ݑ=|Y:n{ +tO IF%5Xj5F~ԐBnVqtxKȭeQG"I>H#\faT-R*dvpHY{ #pug;?ˀ9'+@~9nmy}}PkT:70<0fLCDwwX\YvnmRqoVmĨAǺ`"<NA}\cT9y2>>"Tz +{vmrvq *'E^0Oe_pC1C%_$&& `vϒK*y\ nW82wig#o0X\̢{ +o8$s[@4s]Nκ0Mn(ƀk cuMDiNtR˾< +q-Z88쁥\gϴ蚄ڒ`QU9|7xGu'& din7H2 +-:bo|ki,BPܯ1=Xe++Nm㳆 ֘78H[8 B\QE\n+XٍLd_0G||mX3r`ā[Rڝ*zKwf')p +2QX#omL?c]f[ 0"h67aa0&.K +^ϽQA"pJT\F0"陮^`HOI NXہ̨tBK 72!% 'K(Z{]0rN vHf!¡ݨحmwSD?v endstream endobj 23 0 obj <>stream +H|W;r:\ =70z: Αmhvn~tf>a]4A# pMU?@/>F~;<9]0$G:Ԏ)Ak,#)'9W3I#Rv +F>2"zСVYAL}nF?e` ַsfA1{:  B-{ij+h(mçDLo;+9v0^ KȍOyjkT6o)hﰨY)3Kr;=-\K68 z4אڧ90K 9ׄKC0@KZ !i@wnˉo9 6F]ʙR\ wQ#* r5@&S{*knDG&ѳ@]%OIXg`&fo̶3 ]Ė0H W¯b*-A5Rquq&@[}TI0:%0dT}3}lxdffb +wq)6{m`͸N +}P3/A|='@l.:֧qsHAdH#$|븊͕1@>KOc 9ZS?0 Dj!"m;4KyPW#,O*,}N0׷ݙKpoE TKN,V17uu֐x$* +8:-mk>1]YJPm4rN#"dH\&,ngpuáTz/8c/b&ralSoN_Wi>:}N:Ea{;ŭ6N/:soNӈgfwƟ瘵ϱTŋ;wbƊgX^Ziw%m4^'H-KY< {{}s3{N78]2Fm8xN!U̯2rxwIp\[.#w'|wπإaܝinx%ܝ6;S9iV7egOpm76cV<>ԯRv~vy@\5|džxߴ2 |Idpͧ*_0^Jh'Kf4ij{+ qpS6%!AsPUvoKd/'$-)'fl՘^9Ye LGQƓ$@+bx-tCT7L_5tWs; g&_xHe veuiu ?~݇m +>[~SCFݩj[,)_Pp^̌>>(Ga㌃4՜Z'22.+V`Om_*tmq)Ol:MD=e^FS# ^{.+nSu8 }f] }d~_.cG):((_4u']7u߻w\*ǘcQj˖OiyEh{7߻7rrlMjUQyʚyJ}PV-Oh˅#@[v7W! ߜlNGYW F5]yvg(hWNkg` +},Q N&w NکOI02`9]' $:Uʇu2rT=$EYvڧXjbI`t/<֖`+23#0:Uxxn5w q= gWX_"ٽA{X +2ThBB 4irylD7/.i#}g8t#+-40=G/nlfFy{40e\0ѓKR8>.F/[N|[z"~"ܫ,4T9Xj#GHN[vO;^"c)XhPq5H?ztptIlǯ}T8؜:,ګ&޹Lt!ZK"q>z$Z3L=(ӋR 3ںђ7`uG!_Ƈ+2-^1L=Ddm.TzP'WJ5< +8 +LwQQFa!ib-uoQÍ,YS[)Gϣ6[#w5+~k\u-UMqN!ΑزTb:aM8yS 9$/mFr@)ٚe6)Ň $@pi mAMO-Z1J0(`.1{cT .ek\jt :٥#.3*j1\YSiu\gxiF99JA3evzbW!PsE5<{ܖ=AWZOɄ;Nəȹ1~ʹܥK>/$he1)=\9X6O=vI.OnolNwڮO^R.5BuTwX\l]nh޳ϝS7/o~???o_~O?\W/~K$/@?_受._^~SSrh_p}MGVl騳ض WiՌR}%\iCh 9cpk: /gEcXnjtn%g[ LȫJPS0lUē: }BCh5Kcu4>! Xı]֖ߕ1fWmPʾ2\Ux2&yp]TaLJ֐ڌ:w '=e t$ Oxe1pE,fWs[u DzA+VlN˧bXf[fa2aPq}Kewrd10D.!hHͰU'QF[gZ֚4C4H#F$t[g̱ã%PGMPs :orGLmЫ#h«z>j.yQ lJ؍VH{- BuhCnMMۣښ&1uMQfpڮܪOyD&׌r&_VQwAp%Ӷ"k|~dhalHv$aPat12b >σ³BOή6agDz~m(aޚ+Ϯͻ~a/ӿ~Vݕϕ.' +s)yO¨7 cU ,sIRbb K1;--d؉a.m }nI'x\#ՀqϪr^X6lËa<;2* nTAR@׾ugeE!+'Ho,w0vy WϞ Z./Z |z)WF`6o^VlM2n ,`}du >e$~OFIg&h2qKau]ͤ怒ɀ2*A#gv$[&.Ô; L]!tMFH<]zj-8U%CۀJ<$DI{WzjM΂3V ҥlc)j6>כx?Ggs0 aT8&T_(z.,?XåSG Zo.hKs2`>4V? 92bMbѯ2g⚧ћ!.F ڥF%uc>6B)e=<# t{W Mp|4mXلkP'[Mu::rX^@oWi5ㅕbgZ"`VnTy6JM3Խ>Z4PK}Fs`tv!V˔B4f3O^ YuĸA3M9Eo%[+Arween>x$X˔՚>2$f+p^YGęNFkV VN l&2ڰ[6 ]I*8%UZTLknaeUc[&QDÍ[\\Uc͂X-tsaCXY`+[`OȺݦK,ɴaP,[9ufvy^2?5}01e_T{mVDv4em]d.xg12kwEV9yvUOm7R]ͳ.8 oi[[7ART.D=#s+ XpIMA**ØbV*Q:̰m +tk Ď7(Pi"Qs jW١QEnE6Š؈;W<{bCpɋz[{~^uHO׋qImMX`L7qv!^VvvtUY ji>on|klb$'K%v7]n_Me\r9%h@"Asjx޵8K֮}l1& +w?(a +g~'t7` +1G kҋ0T 09*-iVL5Х!yomLޛ` Pz+tnV~EԖB) !ܺm5wFVY?-&f5[!ǖTIϣI&r՟FIB:vX9PؼkQ9`>@f~/ RxtlWB`ό{*]1h7Cd{j2XR |Tҥ=Ή"$\KpV 6A8ݦ"FI[>,?]淎xq鹗y6 |w f?׿ЂB\ZΊ" a5dڑКb{#Aw +it,8Sߛ* ep*n.!66qs6gR&%*WYRDӱ$8ۺ>{<(91L$-+#"02pڄkOؕu2Zm=tf%c~8vu'6Tj+ksCFGtz:S[.yE?P*t]YIt-"drmRAO=~30 \\.ffkOڸlwG,4<;dru`mu@󲒶bʫurN7됖 @ϲ䫹:܋3c Aݹы۴IvwEVN,̡oӬNn+E ]u75bNnEd% I,i`eD $cnSV[{^ۜ9^8m&Os= +j!u|AuU caǿJ/!6K0D +ᑅc'`;j6WǑɀ]y@;{v;~y\`”ES\R~|qi-Īb`\p;5i>.;́1 um0xu6ڇO_BSsd #ڒrӔ9~?'a3˗-a)[.?GʼnXg%Rf{8M<ǣ ٖ^ w}zF:wb[at`s{ L-fi2!1LHꛝhbF`a eu~<4D֧^|`V4è ~ iWb;Koa(dIur_2в^rۘ#ac,kLڂ? Kl#ػ -gWT0B(^L:_!XH 94Kr$7g&}}zA\z/s&p<)L%8l¿d`E:.s +9ǧkYkZBmHϣB Ga';lJM.s"y&($4[:lbdk?Nv|υJ>gs ;{ObsU # 4'lIra \CA_鷽O-ܵxȇh?HNF(}JvMJ}pVT-h<*k +3%c'XLAv?dLa +m@;l(.*^r59iՈ6Rt֤}JIV7oQe1Ix'!?r' 0 K +_4,!03>:E-9KlgLE^@ 6nCJ;}0VX7d$C~n]gq~<\o֕qϯ[XJ3x(b- +ڼqy9"3zkM[qfhU-kZseL-E==qE_9{PqǕ?Ǿv3<F |4Dhs*]M-jYtIUP`m`jXO`[Hw H8Z/R~jմ̊2ۭvbLv ƔjV Tӭl9r-_7(g~S^SP^ƥ4'۩oΘ0 ΩЊGprirqX/ /6j +[x.N#|^XԱH-Ohkr{ڿ7]tux"1v4 +I;]4` }v5a:flTor/`٤">IE&r0wo3%9YUX%20%[e^!$1k{7H0%ТArfzHG-ޘB\F4؁),FC@ ZUN1ړ_LlgmБölJ W9sX#%ZF+v6:: +# +94RNL*:ϗ]AXW.*uq0$J +{yS*QXއ+l[H+VPKj90qoU%:WUKTH,7ɖeٌ,3bпYxKU'$@hKW}Mp###עe_C.>jiq/`-/rJS{n-}=mC7a\&2tDlőWs ?#Ƹuݠ͛ꫧXpڊ\|D&yC_]yvċJJX+^k\qϩ"`UK&ԍQ"NNO_!x-],k\+UUIvq^F߷=iُ_ Xtt yAa9eix$`&e?ts$LAN/j6PX4M\KV*#YԢp/z + (.:+D݂XG)(XskLpVYp`ma&xgGӣZ2IGQ(cRafń 5Qe/N3O@}Ʌ=4pDi*^wAɠ#_&]`nK|MwQZё +TBX FJutk[g)_ MiAHg9Ѓ*]~`ql(%Ysl v5pިdu~+[tjɯ=%jEhuz߃͖֎r8iA30`NT^Vgźp<;{Uš2&hSϫ16g_4[OJAS#_}˞p%彠 X`}#.~~0k8Z=BB#K|RꝔXGwQYL&y[wx" a֒yˑV{5|˸^Y.GܤK叭r<q>>k|l2ɐё|Ř5*@7_<` USG}_k[C^bBw@iL|cGy0=xASĆN6xO[~9蛼ކ_VF+"XR؇XĦ.%XBLIK'-A<@#g;xf'om5'WqyuĎOC<6I2 +{>s 0s:j!S)`k[UCSӵN;un_XF~Q +=/3A]kQhO?pRDZ3-Nan2[x ])xq0iu(zj)!zhZ[g4z(v#%"QB8We,6]zcTf?Tl M҆! F,dXjD˸}^CF +1 j|`o.ysGρZG4KGoEߏ)n O%fH\cuAOsfM=;P+>Zʹ[JUHU ~B%y0M9GF[ՋVvSStv +Tm~`Qtvq@a3Ef2_=B\jPvxIV}|SLˊ鬘*H4'\̀{ BhSАR5f^]M JkHjcd4znP$62A0fhoh/HT=Mm  +?ςaO4*1\7}_%/,1j,^[xm(-|$?bV<ٯTo{fd[aK=e-DȀjK;025&łE{ qd#xf?DGNgItpS?ڰ׽bgsvI֥qO ~ivr\X G(F)"$@ .gwKI##AI1=)mv+ً2&˯M)kʱ ZqMC#ѕC&K@wlFFPֽ]~dž@ƺ) `Fc OkQniQb}.*RbnKKg@E *+Lќ[YiJTI>;f+ԇ;V8ݏ~}mSSfTw4G%ߡTF?k@z bylԘmIu~~]EZJx^K^*]3K9ÀozT8M|y_I&pCdCI"P?8(F0 ߌKy̝gz_G/w{ phbI$l&A#&\;On +"(1ENDM$(I9`w-BIp77{-A9y +pA%m&BXhrh +Vk(g,ڜw`A7Sܳe0`f pFJQrtu@}ή8WnyS"1CqQ=4^lg]MQxDa-Ӿ?Wv%F/E]}F{b(.oAg;$J?_Iլr#&tՙ!}ƯT[trU^m9:Y>;84"@s't{ී />- o봆2q'F:zeao;NO͈pNJd3XԴ U)%~ፚ3êW/_uhx+s1>Z\=5`wK']@oV".q[?B":zV|{˚ aYu7Y(ڤpfMCQt]inKJxgl(M AuXT30 nVUۙsL\IʭI,۠b{Uqmq+^2zޟ(Mˀtu7 cj"q_|Cw}vp}P0|ǽ&**ϱpLyIhKR|;"%dA4KIC&*`ħ) F+ mTO=s)4'';𞝚8̃Yg4Z OM_@`ͳp!z[ f$v?)`a&piErqS2cGndşĆd=簶$x,;iKVZ~F< 2y6⦫B:"GԒ0wWn?K{S;[ g≒ͦcA&AOu +xKmq49èrHͤC(m늮.d{q)Voe\0V^l|.v9aufu/S]'sǧfW`{pIpVLf.ˤ25geh,&'@Kk~EJԍsMs2˻5i}S"U[ dys0"9c}Fʖ[//e)}Rp6 (yYSV'i =LCf K<|e3a8.JҢ$ҘW'?+Uv&eKBf3: } '5_0Ⱦ[-܊1ƼBs&3pL?S؟kBSASQX}%KziFa j'suƴZ{6S?dW-ܭu(R81x \,7 ӫ[MZ4~t,/{ezKn])y|ih0jku$ + Pk"/`!Q2.Zȼ6y9/FN]˲AHrI3jHW +FafOj|c2C#WoԋQ61 +ĕ5?KM5}s1qP*Wq'0u\߯ {v çՏ,pI Pkm7>%QAO{hYussC{YP,+e! +?;Ja}cƫhȴUZ&اh-^7FӔ{U)PHej/@DqN >g֞g/Lq>l`m Ќ|L8عP5M`լfdёڶÒxMzg +h̚\VUEcf=qȜ~XL]óeFa/|eTus7fq=S0خq7<sMT4{RTaM~` vx +YwG*=ɺ#}d{t.oڻ.XWZKdȲ*}nLŭo3r:sB +Эi$L~v͞ch" : ɒf=f'2Vu_J@hZz\[YM%DUjO͕h[TjjG$S -f%-^)j/(ZajݴXš%7jؖs}ridϷ&G썯]ظ" JZTK˛jy4H@wuI=x%J޹u"VL7,r/D,s Md $A`5򌕐tp W 7ym'M tcJp@/OI o&8rY **y5 ȱvw4}ǖ^Q@mע46^g ۩u;c1!lTagDYD?8Cޓ_\A-˙E~Aǘ +pRlhdYEmˠG}xgĽv  [Y͵r@G5 E;EJVfv' +$z6{ԉuu^z nxJ ]wEPp: A&F \x`HǝP&{okܰI}Q>fh`c^Aig3=mEV,CFVw2/߼$N>>Nf¸_@^x6*gl\Gʴ#7ƧzlYCV= +k)Gmzv*O[/RupCTsutҲ~8SYgP5?Zva-nh o.9kLʵE4$Eg?9 d&ϧXowB;UIB˺FE\ {Yp\QsY2ްaju֭*&mqFaguvX]\]թi>}ͭv;*=K?џ-LSzm,-#cSO/&`UЬMZ!%97S955KUW>?{-50l(0ɧ;c K +`vin@vi}|K h2| s9Bު[hZ4_z,T6gky<}5->cb0O3~L͖9f[;?I\ן)ީ\nx}yoe녫Ɍ6Xn7X}f`+i pp+u+CxeCoW]p3 or1oOPp(1v +|މP Baɿ:8U 웾37XlF([-φ<܆8KtdTM?AX5*U槦Se@bBճVlQ Uc:Qō7CǷfPU9ʩWgn!Qqr$0Ǒ+Ξz,uVL`LMܪ}4Z[ml5J~݉ JjM:hB)*H+: XRۃqUUÑV^bu`KC8KچON֨ e9<+7يGFHpu*0e4]]#hk)}K*2󢓝a~ӳBk4ВGx1,rw[-KF8ǰ@هtQi1gq{#ΐ?!gx\p}Renr- +_;tBAaQ 4sQ\LΔTc{gWueʴuVyqfBy0|,HL; Ng16;p,g @sWz;\,4DL6'`m\zK hh)gN'PwZKBL"$T Q~7X17/ WyVfƄ +4M,mƱ.93TvB<-h &Փ Kxf 9 w7=_̘Zp-HhѲe8 +uzbKj=/@Qr֠` | Њ-3Je0-ETՉP橚GB!/%1DqĪhZ~:K'(}c_RƯVP0Շni#VQؼWb ڸ \! WLjo(FL[kX٣QDZyQ,>#2O3nVʎ3fWVfoԑYЏ9e;: 8*g}Ԡ:A('04K}bEl$!^>] ֺ +Cnrm%in} 6ß_ਛyBȭbNwXZmJ֪ƢEjvXZUScq eX<{u͕ +IN]r GNFc|j|"; %RpL`+UA;~MB].spU5-ya;aҖ0Dz,-ۼ˕y-8D9 .6C$/#i%YJc}7khS:ѫPh2*k0s_F7l`Oo챼٬= /o0s_ZfIu{vҴ1>WXߒb#˲ +9?,G-_lCխKvNCvǪH6;-Ug k~KM#%gN29߂IL7fdsNLldzM] SAĻ'5 ePeiW +6hNr[aܠv +1zދv5Fdڐ>㹸+-U[z[bʸR n7a5/K%n3bgƳ'/_l\SWV?&MnZRˆ͐)cζu Ipm__cĻ7 +1V[*^t "ާ}OwnDcw}4kp@d?n_T^X<n$ I3d1lKΘ[haG;Ʋ-WUFVke?v@]` snA΀ZC +Uwt&{幃E5117sNfEуxmѭSڥ AMw# @:`2+-zf̋qhKj{K|ɿ;W(R7Gr\X7Quܸd\;gJU6)4 =cPQy])r&N}Hખ 3y(nu>)!n `wy~x~jki +xм~z +;n(o%j=ߜ +& EX p oCb.\XIg#>UY8JCxv ToPDeV[B$yPɨ2|bKjNijii*ZPD R9w*n4giIfk>"OekI $+W7"XpIugz8XEniƴ͕9Ejҫ<\HeYnX,rc~hwR\C H7c{s5ĥDk oM݃BP!' 2)\X6c "p}`V ihEUGd`JYsy+I7 endstream endobj 24 0 obj <>stream +HW9D <07$xvSŢzeAEq)G{Mڏ9tbַ]zۓ 6F惠 kWڌK[閻5[[g[[4~@tuͽi/Ynb&j|wS{v"|> b.Γ:Zul\ƷU-S!(XHMu2pL%,b52`FêG} 1q&aYNPㆺIPe@ToCOS'W[Ne׀kف7P?yu◑;f4'L:zmEeW$Zi'z}AD9E?e>o ?g9ʤJ?`ԻFPj1~C9;k|8pEX2wzVo)}M+AKk]L0:l$x2]~xU\˳][bzXeʫ"^) .Тq_\lޤ2z`I(c.E|^Vw(nc]j:>p F/9p$|y?_5@|/*n] DBs1 k,Y/LlxW26"(QGmB(Z-jvUs'⬹ѥevqQ8DwS@8EP,$"xvzAg.!aZY|7)Ύ40?0i$s݅<%e8Mª[n +`@DE+:zY50[x~AgG73Ū^(y4Akȷb;쵿ʣwNGogMVMuc#Ec~?^O>t xlĪj;GF?h@bsjJ +pW`J0_974B. d& 0WVLc.L4NYfY#uT)tz[B^9%RP4-]Pa/ҹAG>9ˊz賈ix'ɿX?P*;AYjSKy JS-͐ gЖu,8V W_oC-]{qR 83we p&/r&٤6 'wǞKK%Ӥ09}^l|Ɉj\c]ڮIvAܚcX:@!iفvurP(4yh=ҏYb"rnTs&g|q Nvl!A!g +Q=jnJhڤ+mXMZViVmŌ)?{N ~+Im2vri|Q!np%Zi&DG_+ S+_ %N̵w`V<;8Y.'$,}}|8lZZQjJe͢gp4&lk} e$G ݩqnYȰ̈́yҸ,c`Z :rWcKe_9¶mUIp[͝{wSxȔ3 ^ߧlj Lm~: Np%y:mW9|6-$T5ݨYإҶϵ0SZ]o39Ap]\mf$lI#`gI d f}ՃG6T8A{ɰP.p eqwhkzյ~OdՙwEXa MF2ZڠsВw:+jEWJI=<Ã51T\aQlqW;"وERiRkݰsSil?Bz/ ^8JƕTɂ{1*DI`+Hұ4آk6##<Kagdɋ ;=儗0ڤ[s*?O^6Fpk3?.ߧAwو%h_V ؤ^2A2uqF˅xތdmn]*3[=JleuOcc 2򑌏K+4o(޸]ʶ Pfo^%۫€r%5w.-}3pHvA6=U'#e-jo\tGRfXK.,GKºfg rqQ +geaUhy:ECO7f}bz}3\k K86p߭FdcE*Ŋ齊ò szCS$%\27ն"Wr`v u<~iccX,0 =WalLyIn{y|}Je[ֆY#D4`Z(8Lڲ#NM:tܬ;cю0ЂIXpqx_<[k +;3DZUfvYcHܺ%<6ceckNYc; γFܜ[&Gڐ+AZ(,o6˗MuV >2/;eoEH47\$ gb~V%)$L[f nC!Y1Ob@ڬL8;p?; `o. eR#im1+$A;@MfprT]ᱪѯ6~_cSnM7"?1tuZ+$6,q:͸$mI0&miBhuGY{βG;e输4>NdXeAcBĬ&cin/ (^EE{67]҆tI(kE/Ƕi3Qe(ymoӍjUoPj. m\@eF-N+yجVwрi%?ԉe*/TGՌÙsۨI}85=,-ֈ&@,ۛ],6ԧWŠҵY^F'Y3m{|9K~thkՒ Y*LBٳzDžcdkiǍc ێ +qF ` ŭM<.495E55C5Z4-DLCMLgK|eNɅy*BΓ ,".CBdQ[ s xΘ !Xx:'z$qScNfVQ9К +PkCiֶJU6zrܠalp[ +b <+r,KEq6U[bnoL1m\i9rf,"{ D5VӸn*xLI̎*c53sM ]r+X3 cҔ.VPrLbp݇b#h<:(l)fE꺄ݶּ+ILWK Ե2Uq1,EɎ 0"+bP&En0.fp/Rd`wL yH`XL@Ůrpiw!G. |19(_ZeE}g[@h Q[18+|ؚ~Ex}-q5c_@,]l9k$Z;ţڰoo +NnIדwM{0QcXمMtg|4+k +qjܬc*gǔt}:m,6Q2eAz_7~`mƴI[ W l3c± (=8F Y]w6B޼Y)R2-B0)Bt0o*0eϢ(3OF%-T%RX]L?,[w8,u5a&<[Xv;V5j5,A߮LH]!BAB˪Y۔OnJo7@}^93_/N}tBp$i>~. e Y S&)${Efb~_ +92 pDtSCyw"qe)ѳЭmm/$(!IQSU3ɔk%qVzYƽ +PFdEl1fnjj=7LSp \,_L)8U +]6 oJ@r[ v_.Eeے_^x Ukg5"e6Fuz Z!Sλ }D\81!QMd[i|py'{ Ykxu)m0F\2}@0{vj_k^vEoz[fa_W7Y s%ׁфU3T {`6nWQL--͕ZWry EJ_< $>6n~| y4^ +b݇h߭&*$||~5 \Wl9 +Ke-ۀJ.@DM0aBĊ sC|,-E~!t6jŪѧ [ 6<,xƸu Y/([|#,C=9@Q/P'+Pgn!=}Aݙ͆G#wHG 52nmqqو&3Xӵ5~~y=0pnq\K7{ȧUa(oOm؍q9@f|r0-9QAg/~g/?J CnY$D-lv8TeeP`Da27!`ӌukwAؙ-)./+fX No鈰0)`zǛ0-|l $%W w{KJAڑ=<7拖 !'(lAYTٸOҠm H[})(4 e;ξug_EQ:&1b3gO Uт#c mOh[ni j1kO?k)jcE} Kc~c 5B 1Z X4KA.H^v{} ?#ߞ&CM35 rNoa.(V|4 A@z}9?oɺm:,~n bXt 5NgaǛg{GmseRgUy۠uJipj%}ގ^@Os,,MR{5j"&}mXO\4žhhtp%c4WyHp =Ƣn|ulgjKRf{퉊AO"8duXz¤o- >f2jo[#92L}5SbyZtھW09kԤYZVzWFҥ4gv=IA.#יMahbeoA@liBuAȰYۀl DXhe5 2T3S8?n&}cb -(T#'7#[YJqr,J\^հLzn7QZ6p| +سlUק;qXamP])S L̥SBަOsfoH!S$-lE0cUŀ[t݈{],,]lVV,WqHB:yaHfx)*jў"B/o|H> z1R G=R1D_6GG-r{5OM!y[nu,Pu+:`| G5J=K-m57]mvN1%AN\zF&vi\[̇S^3Sd*һI(GCT_g`*` u#BhЫ ?FPVf~TN/FO)zvO ~Rlz9ۖvK2'Fl =㝴gF_@./$:\b_ p>/Ɠa(aoqC +!P&LgwEPrU66[j{Y'YjhVjSI.8{O᷻(a -'.G_c6ޭl2SBZRzXܑm|w.oޱĭj5nQ\پѩ&0E2{ItFm:_,Kg'\2Bjh鵊ĔK U*'xV%+W`%u2s֞_kC S&*9$zke5gG'Gz9-w'FAWr6^\WEsqtj쾩 3D! hI|6.^2b3˖vg{]qpQNK̝@ ʁiLؠ\p}U0p;e7p¹׭m:7G~*4ך cAu&3 3Lu8p&Un6םÖSjǙ\h}0|W5TVP`\Ub3QpjW``6sa,&\Գ$iH|54^چ֭zUo@+}ٰΧOj a( g:;u 유 +FGˣߏ^]sQ'"% +*xg$V''&|NW,C~q⏫7,mNz}1Udd<#{?z:8`7㟏Nτ O2;>}oSO^<>=coML&쌬u2JϘX,4$:g7+LIHOIEͮ],ZCf F:dz9{4?p_X&--*Uz`2QB]:/ED7@3'N84! 2<>xūDI+B +[>ИDQOQ8z.#Y5slEBb~w~jRn +"o,9 F\u &2 6KEDEl, xǬ$sWZxԖfVO]f5uhk4w-ԡhE,\- [2A_c~o٭R' M8h@[+:ZL+;hxh{gq~OY"Qi9Jn_k$!dM%QwE$O+O$j2I%to1Jh^dN$fQFѦwœ3Tz}_\T4>K@;zT9spd^Y,$I?pVЗ`Mz} endstream endobj 25 0 obj <>stream +Ho8z9GHP:YԹb +RJn۾?vlRҍ EyDpf3#1̵bbK? 7:zsJo2 ii:voNz~E:ML +6hFC^z+EXQ|>zxWF- ANzR\{sdo#,҂p૱A=(\3MWXʼex7p.pγB2fcAK"LzC5Y;D'ӧN(s?ISwuAQ`'|Bͽc_Yל~t]ͽ_;+bKq!T3D(nةUu%F<5#Ł&Q-1yΈ(r{uc1$I-1ZKS$ωRW`S fE\*!-5ŁEf.Uq<e&s+m +Pݓ[$9ޕ^D%ShJQY^țؿ30q +Oŏ9Ӛ\A?vOT.޾#ݮ~[6m/ V9{_ ̥QqےI.[1 7li< VX]V%o-M@?ԭ-uii61~ӈX524QbW厔MNp=Qj¯%ѽe댌M ?uasArTՀx~pBW7!i-j>!w"WL2‚X\;ĨZg5jaifӝޡ+I;kUJSrl`Za :Ă]jXCc!7υ|Z;lw¿MdWk(^?tw!Z.&5hxgLQX:J8ߠF,MTJ[,X-$w'_Mq4[;ҽCK ,u(7/qsFĄS;'tni!)z^ʢ' +}[ +H$I +E&ZN{R[ѓȂpA*+.oB5tK[ơan|BnE +dǒX\;Zo5ja-j8Fsټ; ڢàz:yX!ρR;zy7leIJ ?3–Hž l,~×omTK r9kcM@ÃkrP9N(W)h|Ry܁U +HZi3B(]YRٕhj eCrh k@keo +I4>?]]%ڳXz/x1Zv x P=Fly6k](N( u] wBܙ!aVg 4W·TK$/Ҏh;nܽ#t§rZGs4;$RNc|;gH(t&l;ǭHm7P|1ӬWsޡe:oJॹlsa*O+K{,H))F;yK(lEmm+r1yΈ4b0BgQmx;ʒp!E^yGJO?Jr!9̈́6W8ZGB,BZs՝gDBI(TBk䴫2&𬫟,Iޑ䉽(f.:1Mijx|XsVK`1:3mx , `(1B΅6ͯ!2)GӠ,{l[, +CYׇp +z +\R>Tt83*ygV>stream +HWnK}H0WrYؽՆEHؓdx&w<{It7HrWw:/.rp']5<ëY᧗8bW\Y1lPw*vox}Uoy=aGe8WLtV"y6+j U-?ÇfR[yjj|Ⱦحzl#ZOD&vy,_xp[uܻJZ!eZ5,fZW*\q8jMcC7;X9lVq(J4`$flMjuȹᚈf1٢}D rg;ä>j.'׽˹ʵ-KU;]~>=gW| i:[ް=jn..o77`LlHGtz gu.>첞>s-tWl<2W\48oG"~M?B,\W%-k}]sos*Pm Y'ΪyfXnv،5Wh:Plaȅ-f'cV]vݿwؿd|w`gw<*\ۓ_;4&p?CxrVB2Y|>`|Eӭppr{oYsQ;l8O?x+ >] L +)wſ#)9@JUJ#\aʠ@j>/}uΖNEX-5Qђ!:x_z,qdJR VR'SE7+RqK7`q"-)(akᠢ6W:(n]z"^BYQci/Q2`q)33N1<)vt2D#)x (A Ȣ"!q *F&$ +:L>NPQyHb} -0#-Ѷ)txJ0Xl`['K$g+-C<;"{x4H1mr"5_M&NLFkԭc܊L6mF šdT7N1PW,̈(FTh} *^Z&Ԭ&NJFq⍗d%RhK&#Ua2p>QO%0kPzm %j ){ Png93JdlTi ƐU͘8Թ!o:C50b &Q.0%bjKRA $%tN# q@t#:BA#61 w#ÄNLS!niLCPΥL,N4>i*Ss>G4j$`d7GLޘԑ:, ;]<#ݸpIIs j+~`b( g$@ +KFh-ё020Ĩۓ3^*@J+(bz5|^//}^)xA"+磻JӚ)+i/U+>};ȃSu8@Hf($b YsLcSn&, +"O(Yio/V\72; +[[Tg6{ +/(k?KڠPgsZ .#[{kP+ \{HDw&Y^rwA 1j~ ]OcNNYW-49q:5P[U|VdU HD4)T,l ,^ 1x" BM|x_^}>×[c{TZw~~{%/7+ϺN+> +"4~R (`fĆxbƫb=mD·v  +w}Z4N|dȼ!Lfߖu[#84qj{}s"^Y`F=gTɨsEdVvg@{B)eG9x(ٻmOe(CQ]w K|Aq"iaղTLwt`)*jNOLq o];jk2R ,:>CeH?_ϯ覴ϗNu:I +ғK/J:v4 8o05bV[1@E *b~;Nnbŋ=VY)&CN)#*x^dDW#өk66R]J347NG10=4R:̐XU0R2PY+2KRW℉dqP'x`QQw'p/&m,_"m Y2XM +H7&91E0+ա+\^'9 #PI?Pά\(zo%v2q_i"׹1"~)O݇@jΝ^>M1%s=ҊX +"bP8`*pg_jW(F.ݫ-CΑo2&;>sEDHV) +퇊P(6CH{L= ݧ贮iӧUn` P`]4Om9|G_Pg]]M |NZl0PZe(5 +ߥd>4ehȾqϤMfv?ڷ7dj4Ɏ՟0]HԚn)~{AyOW]`MԹi"h,M+`!j]S)%^aL-rFDBxYkG5]q8X; ̛!D'ϭX043vegQSz0s +xeTo^v8[AA>SzOS7sdihV{$d[~bA dV744jx&R]q427y*ťX@u?Hȕ贝Onx~\ȞgW/!B/oo{fph4&\{Z!le x@7A 3b'-SrZ%U%1!.\lc}k8>U&_OURЩʻbڡ:Chl%OG +uyfɝV+hu^21:OE#c$-EkG9~P,AQxv2&#?D*7R"ELΎz4gddDy^&^Z7tuT?Grz{PK1QP[Pz9U_O*ne[\AMU2 uz[t计JIJkOuY"Y,z>GĕCRCe~oi +73[1O8;w!LK/a2l&lm9:HLơ\`_Vwf_=|jEzj4xOVa%A3R3å 4|xYD.i*zŌ @#I +LtyJ&-QK^U0Gp=ߒSEQ,J;b%N>}*Ue8jeh0wӱcPP + |ff6;z2eܩƠܗ>G/Eeq]aՕў5~s>9L I|M\Lx/|nT:76jn ;U m>.ы!R"ivm@=z) Q>/;qzK` ˣ{¨]QCyC8WfF\gĐUb.k8Edcܟr/!"'es4tDnЄLM:0loʛVMlǙm>*figG3m dׯPފ1&kIx[bl5Uz "DV2] \ѽu>0Щ6#cǘDpyX 9`Mo*'l*s_MS"·\~Ar#/vMcziwo|<59N җ@zk>Z=岺WRE';]Wq( +3i"6N!=ϗ'p·n.m/29\? dxW[364rkf-@%I{/vŲ\lݤ22C]AuR[Q8ZJ0γhf7(.eCZAܺ0U8P^*u5EgɎ}VJ~c@hSU|f#ȑIA(z7nV0~ˁr@re,n +"/T6ơ +ycC~To܇\D1uBP˾RE.TY g%;n^TS,ͯj 7(h:-"tLky7_Kv,oIE2cVY}̺uR/YtB6gy!m(!bhz7:<[ N&B**4pOíX˰@zFS%B<:@'IgFJe6ƒ5D.R#6Kcj`A!ـG,"$^ u-gdMp⋕Gnpw7 n|j]#\~В̪s>($T R{W/:i.nsQ%oD5m5ɇ,ϧLj|̾͆\pi~J`L$6#6")-M&9>Lc>e.:&),tSmqMֺդB>ދqєrהKcHȠivꞔKjL/T:-P(ϩc<(둘RXn4w);kgH՜aU-GIu8?Z/44%{Z.1Fy9 +YK1(E"5n5HTM/!X [蹳(<)G>)"1^1]}U-Eμ󤦌I8V؆uP]: ?wɡ@˸QAҗB2*4(͔l\X&0&TəXOv-FT /~eE.1xE5u-Uk-LP}/aY/#~su\^R`\ eP#j$aWTا3!'%y@mI[6;1$Ǜ_o|?z{JĻ뇿/|o{#ޔ\?ͼ޾~'}.h +"g iR' +k؄4iGiZ'rY#W5EܒtQ$VUkIL r} UCKan +5n&ݗBK3Oð"fdN'e$$߶Yf^ +1Pd ыoҒt2x@?Ί73E×g1RJ2Y`aO^klc +1In+Ā S:Rl)^?Y?m`2b>^e!hulbk__֫I9 ¤#zt//)Wc ʿ_gTBoD3(5#ϛ,l8!) :-n@i@ Đ(N2\-c̺Ģ.dDvlH=Hh`n 9?qf?#/H} 5?4Ʈ=I<,L(A|٥:"Ҧ*B +*RM-5 C!DEELϊIS4+W{m]_IȅM4b@lHRўFF:ZG ;ۯ;[8%%yKbNs3:bt?fbfLeĝ:xA>Nu@S.ׁjdrbt@-Np{ԗwSws)xrUaLJ7 g?M Oępqn +:~&< ܉ n#yPpP'6@hI X/wۊ+~AIܰwD'Nl3tu 2 AN`$Gb?jZk12+ccpԢfd)-t=2wrG(<7+=SKS>_.'oC;փB~{fm<]Ghs]ڜmȈT Ev2}sKŇs̈W&{>]Z| _ +QGTQټ-f#df,Qo~q N79tɠAry"$2 +#ӦJ +&fGI0OQA\K!b2U +ڸ(sJdґ̺ &Po=vķ!thBAB I~4zZ̍_4I޹g>]II-{Oi$uH7A)tK)OUuHˎP-)diH0݈zfHeF][D=ZET\x|~ A}EhX{@8U,嫗,z=2&~kR]s,R15^&[$~m6=! + >g˼ "8aJ}0 i2#{٭ѮK.gd]D~q"$N_ :pw: wN7YjEbC Dt<4ߩOYSKݡxURH,[D,*lZ)]W~Zƪg]w@ +3Ρ԰c='M +Cxq17e"WιLkgaszVJB0' ="nlj8P>?Sіwt\8*3s"M<yC~=DTOc<[0JY9svp6=_7,/ [c<O %UABg3k{+&IL)[ QE EWzn}3c'PI8 P}"eұ#"RT\u3hPKF x +mUN]GW9KܾP"N|?bH5"e)e./L>"]i_zΓQU&/01ϷzeXcD9C1AF,xJ|6\o@1GAR9sطgZ=%1ZB&Ƴ34:2Ouhh_VδI5 +*Jo3pJ5ayfET{DEqz. aujSke!ȨBticjr5z"Zµf '@+=5+2vh55fEGѨT 1W XEbWSjt{振o[3:(tz7w{3Oel{Gᗫ#`ڹ \)s=Ʀhqf[Ik2>>zv~axK,ip u2w'u˄A׌W'U)q/e$}Vi:_g0z]6+Be '6D g<թBe>fHUjNJjbX&ؔWHˡIGя﫺O=fn:ƣ+)<^3tL+Fڃk,N_y˰ )im)A]djar} +n=ϕHWp{3빡&-2>l4sWԟHW &:DBkX&RAGSL1NvB-{v阧֓) 5qUľGBފ+uvvVuoJ謬$nΞMک>zgI&^z/>w?û_w<~o|gW_\}'nv{'廟~/K+~AC[#Ga MKeIXZ'nBF lAQd܌Ȉs^ӟ×{oƂL!|t}߿z駟<<|xιs_?o7?yLOǟ>=o7? +B)K ~sS[! +-Kю\FLwg3 w ˙ŧ{mrmZ|;;6hاlt +@6yRE `ksڎTK9vD!$9_g/(6)MA.AY37[ ʶ(VD5:ɩqnԍ! OD +5ԒzuCam6Mhj 84# y_G2=i_j [2[@ءVY@17eJaL-hl +R|Unu&/$1C(Q)vA?@i& +?GLB +I$Wan)T e[õа)mTYX\-/#+>zL R(<( ރ)GK+^DиqbCBtI3#RjWJ9~ UT~9NO(v#ŪbP@*a5b5.P͌0[* +d 4Иw)z0\dD~J.;@U4>0 +܁*YCRr+7204)b"PthlY힙"1ZPjTrWėb;g|!QUÊxu1lV:5N#WfKė( պ()/2Rjc5|X]R\8rMJ8/g^^લ{>Euxf.F(:>iII=>Z'g^٪BqJJ:~"g)U=N+k1@wajug̋_uW<o=LMemrЈn~*sԒyK]{'1}zG,̔@)t2zn/v?M}c^ݎ\EiP +a!E J|rT+,It(C ҆!#GJ_?AH)3$b`a+(db֔kK+T~_+}!nQiv{5!ۉUU"xRgk.ZRmOWv޴}'0?xGB5'gjPr)@MPʑlQsK'P}TlD#Y]bz4>`o5ЋKlٺ-zݱm1[)JZ*YU(n̢t@jUƚJ5_h/q+ ؓ\JMKE x$kn^w G)BGǬD V/mm&["5ote`) =ָ͙yhowۣH_="լq{y9ޮ9}} M=*5v)aa+I{z"` +;zCqМ $D4\؝c/qCGU3!ps}lk{V+؋^,Cmo;*:'<gG{(h+~~vTgSzԆ EkbMI4aStvVsK +sYƔ]_q3Լ!AϖTq/g|MյGm_PI fβ珺t25Oů4#su$%+KN][qdfJ !8m`Q{yNu |_ -僡WN?.[}G[#k>߅#%!;;1Ӑ52$k֫L͍Mؒ`y;d]S&gjO77%^zQTvjҺ;"7Lg3W[BRRĸ"*#>a}nT"k|- 9eBd Ʌ@=Q| +? æ Cc쫸u`}$)\cБ>TNjEƐ"ww-Bݩu< +jiast-<Ҿ$+.)<ȿEޒ.kl;j>$H(sKy-O@iT*" 1M-ksZ#@J- c/%yp&ƭx*9r+aP_V~5NE\5u+,/ +{ՇX ѯGboi#Eyi>>Dvy#Mty7o,-Utb_* +5肮B^CIIߕH艫U{yi}e"ݙ< WQaN"jm^D^"|HSf̞{B7^]+ A @T,OA]+<ʚEdw[]nͻj ȝAx晡9.Nx(7.Z.{<޿%}$>X^8wv~_Q|{RT,H;ַD)E +Dnsh{|-G^~; gN <*\*28(*ah^B& qeUqOkY$S9[\V{D6af25wÒx*A ' ۲䌝K:?lex+֫ p3t3>!Qm%h"ԽC zXDF] ~yuY[9ƈ\YO9C[L|oBMMr^ZlۭM9ߢgMu)\EABgQL!g)fVyu\n?#lcw05+ܫ_ +|G265H27jՆw ðSո?댥O6$s{R}~Q@ lE]WPǮEM^TWB9Gzʏ 7n'̶΄7R+jk~Ւ)i=$SR~$ƺPS0eDw1{bCՎT'ϻ#8 `# m~#J:7r<ROp˶ !h҈I$םa86oȭQQPr=R!oY*~D2ָJap]_[rf+֫.ԍZaQ#r7duԔ4Gp͔J͵6( ϼZ1"[&wyG+HH94^8uB^cALRxc sKE|v`.OEb5AO?iN ~.Iſf'O 8([#w"ռS3TnA6/dTigHmBH!ؒiU]RЧ {ZEkX>fʮ:[_w!.C";O?ˮEwC{pb/qLHkCAIߪIzjUZw 8EByo=st:R|]$BfrL|x*Z !/}X! i8nQm6xX^|uta@a*ʞ{C +n_!++yB ShGj +☹cؾx/'Tt0&$5P-J#&GVO>7[[9^#62 asVlLw{{pPq3}rO@A5T>F +=a"͐" F X~g]^8\kĜаOH EWRp2!ωPm$կ qY^٩ċ]ˢ8W$8'Lw)tK1`+Ejb?EOjt?|]Ho_x}Mb1rJ&.C3""j_(ˠMke;LU=*qH~:Ʀ^Կ!nkEiv􉷠UÏ9ݲ.wgڋ(`d/% + 8 +&G/|78,w}B 8o!=0غ`E9tmG \`)(=_FQxPӤ+yL iJX1\z0eA>s8=>PE>l#YК=OVCÈ +.kpp.5מGbhY,$5h> jsE.7)9ã7R!Gr(]ecE~<,|wx+U-25|&%9/@`UNΡ*zw/pw?߾ϟ}뻧_7Iy=y?ۗ}}价޽z{˗_ݽK}ݛwoe{%]~|ro\DSOa^^kP9Xǝu[,j(9rn"v ЌZ/Wa.j sijlZ]_:ŴP]-mi8M/c1IkC$y^H[eGz\0es5El'mq[\C؈+ev*ܸې%D.*7o<_e?ݣ Fi@QnG0g~*XZtʧ,`v QoThcUU +HL +xlLd΀METHb0jx {!'NbאΛY 4x?5wpm(Y6c/S}ڝ~_yPYul2I'GHi[(c& 4HO2?;/ZB;Sm{WZ0b@Q`N~CQs | &,{i[.ZB+7E*3YkL 2"BY[&dP*uM Z;jCopUר%aO+2Y"=Uۊ! KO62uX¹#Ck+eIjGܔN=\P`Ǽ6e峀D^>HذJVSciq'қ3%&V0+$xha_`^SWUfdDH|ieP=C Z&J,DcO ݽy8"9UZZƈT8xrjz\s=W@qT{ !,RԖ+"urp/I)FC_#WVR*}φ@m%-$c!{6#€)eW'ExG5Z@XmfuȐ.LM9j[Yh>BPrlGtє~׵2'ޞHknua 7_s3w%9u'>~B.߼sІtp((>]F"j}KSDV~J"}y|Up(z٘$T*wx2ML@ŴތkM3C=%^D GJИҬ`kbVeNp1QN&,( VV~͛6jЌ:\S5ڹ~]5&j]!hZTKd` jb MnsueQ璁1}5Q=xmis Z[RpSL%{.k p;)\JA8&PWٚ؄@Ma{0e +Q2_>N9.aDZUCA" _;uJ*䚐萀a-?M@v:0! [ wziyR=xQUPY,oR7hIr=4];0ݔ>Mmw)Ȥq払mBVHZ-TeRrࡋU K q +ES)jlc `Riިn+H?+LvF ߅ #xB)dAQ*E +v0( T)~Ӭ9'^4|; HMsgD! CrYS:^co]OPQv;p^,xP Ȍ*`:_+39=tkat2,` Pm_/#'/ +a"t/kg4꺞Pk˪9!q0%7GW~ 1dth\2O5(Ă \6)^C\& fIaWqiݿC]gzJJ Y<$Lj9 xB1,n^PaI|5L;n9U/9In;[$kdK_OB|g}ÛG$Zv_~~᷿~z|׷?>-~_/x_?}}n/Ͽzzzyǧ>{3v%f} Ss|450܎xͬg) r?fָ?gE"!ytۿy MU$̺J=Ept,6Zj| "'9# OawJ?*:V*M$ZW+k\sJkeΠ8bdDYHź O )R+IY쭶So'2b|qux|W,D :Dy5o,z%wѶSZsFͯ{bI8 I\ԅR75 *&L'K^2pD"EBU=:?so4z6hFC칤3Et|334NHZыxx1Z,cGGjJ#7Ѽ5˰[h0UhAѼjZIcگ}{^Dܲ0˼}J5/\,L z֠b63M,1]ә%f  OL%Qwa@wcbhCJ<^*X$x#vF>Rg1<$$GO0 aoڴV˵! DSڇO#A%fcVLJ+qoS {m/s-$UD8hu_:Âb~1gag$+YtGysxL:~4Qc#AHp$CC" X.x(XTKK,BʼnQZQawʞĨEp+^]7>"-MLͫ]R&gڱ n -d!1ƅD- #\A'%'&)^2 byUPGiG| zxcE[R/PqfDO5amHӋ&mRxsK_ux?wՁ|v?I|[OҜ!P^op5#Dƻj^iJE.R5FE I_o/&-4w* ͩu6ʄ.NRM}Uڃ:IoHC0SH˺>-POB[Ωn2֑޶gISwܴK9u^VϾ6 Ul$rq*7#0<%mQ$/EC!gKəd lTDj.ď\)*E:}4N1ѤN +j(d.j+w:UX R(k/!Vx*a̻` +@?uMcӳ!ŵXRjM2Spj K65HRWz;bnnjY"an̞' ϠZ!]pMV;.Tn2QJm`wG endstream endobj 27 0 obj <>stream +Hn^@p7l&lV ",Bd E߾^7:q wՅG̙3ôѶem-@<Va[{l [ N^w?<{~wǫۛoX/~N1>:_<zp۟.ի7ݾ|~s6n~ܞxs9v7o/շg7'(ݷi_4!R9v7oQlgJE-BO)*&2IIS"75'i( P  ԳLj{Ə'8F$0CJR0JKD^Z7N5PpGb~4;zvWGPW`+kHAD9+'#5(YpA+#j? +{d I>%*WIvIO 0koQBd Aƨ#JZܺR\φ*\F U  [@=Oe ZP40~\IR4 +\[JA3k#z0F`P&&Q"C)*mgYY[lHb7:HUL}L"&/%AEh ˋUEuD:JMɂ>XTa +cdܒ7E^Q]Re*[>mRrFyMA< bS 2fu^񋓏!QgEC|o|A|_qOJ7 %1.$v|Z_@$gz$S!].tIӮN1!BݕLoJ;xrI:5Dш44ҜRgԥԈ=Bܰ).kRP 6zcz`ެ݀kHE""BZNvo4j(U44:\B-D%Sӌť-Z731#z0P\7Ǟ $nc >@ )Lj=ZsP&2jGJ#jb\ +X'`%&qYlD\kfEcʖZ#Y 7K{hYV1hE!A)M%ȎjAoC#ЛԶ(F,Df +<7ƱT+;Yl4%" +}]I'2 +cj$gYr qi®DOZz|IL=v!.7 , D 0"9$8#W-d @m +Bxc3>*Oɟ~%M$_{ɡ~YV/WE"z?xDKM_/;٘ֈF@hT1|1Ms_I."eԸViųzsJף,/4."12 m [譅E0&o 053kΜC-XS,8:߼djLQaRpGTR|"'zZAޮ)Z oxD vBy*S&ӴI= ~N?x/w8sw'HJJ_ckx&PClh KHUv!j5WIߡq/9Dx-P"K{^?,!j0~ꯈ4Ƀa3T)Y +Q$"0]5ina/XT~%u*xݧ5jU[iG|Nr05r+.īzdakvgs sw )";ls` Dħ..ZW'qA*Ȱܽ9/ {5T!s#{"h)!?4Cy ?~@`m [C n<ㆧ pq6*tc[5R'K߸xo^W<ҘL3#6lP]JT'7ƌf[)%4!E)DŽv#i[a\x2Vճ{Jy)-ð5u 9frJﶆ|? qAD%[=MEW4 _8dbt|݆ k}8_W#4du%h =U@*3kdWi +B'*e'c]_B^"YVv v[!Y +W_w #Y(a_rl.IX4!x A R-yU_= %}Q,GqU1w|nkpa33"[xcշ_AjYY\bE;3jWPZl=]m`E%2R3JP#/ SjdQ5=F;q=#&gZ3ЏqZ*o R%'`_jY5yQwUµ:MDj3J@عN:f +DX\*b9@ ~'zjaeK簁k~|05_ߎj~L_NEP>CZ9{U] RKCA mVW'F L5_>aG=cɆE)ԨhT8GQT ^N_uvѡW}=s +얟W],ȩQdK%.Ƌtm|(5ps`:IB=ۻ93#xԘߖwV7+ ڊƻ* Fea8!U?Dfk~K`5׉z+Yן֫I:龧hM D5-ݗN+WI)}G~w3ӌe5,#t1T=}ܵ&:CT{ن1Q/!4.ALA:zs7Z`qi/ )zCgҹȺַ9m31:;ލ$R{MEV@RcvOq:/wY 6_Dx\qF`;SWQl0XbDn $܌խ }?E/AIn 3Q,+TIg. 0^8g"QRxγJԋYN=Ax}y C910HZ\(%1DqM.EM_TB#ٶLբAc}y]M57t]O.Gq{ӫ nO?fb+h)rMvjSLĦT#B6p17yi6ao緞[)#A [w**2 MYz{^Z/lmカC<ߪ"qXmǍ^m#CZ3 |?ڤt ˚VolֺPFr>2G$Gu.=(t0zU':%'1>:IeAi{ycݥ畍4!u޷((HPL>fLV_%LrXq/@v60U #u nq0dmbp|{(-Q7O5r~`~7SK`Sy~v ),4_ՕSO9]Rk,6);w\57{VBvm;_7闹f맰M!bn)ikZe%BהYBHɋPQ#OJQxprPMčK aGPJ"q vrn5|Q^2vG?џL>9~7.[excJOӿ&iCID{wrG7/Q8T-(3i#d'X ɺ7.U]W/B$>h;ь6﷞Rov]iwtmڇki "q'u1;>l@};^R @1[cU$}]kt5{[Qҗf;[BflgĀ8K&b/䟶<B*:Tu g6r7jX +^Hy>cB +2@r6qp&0EAN &(5UK⾐K2KHZC*Zvp+7I9@ `):{V&4ԀqWA,m1!ҟ$b g'pܳ |I`bʀ. Hi9CN5bylI7rӚ?3!B;à `r7 NA >E aV1QHU4݃{yPzPk̼QL9ҏ!V5sf2e+Mi!" +Zdqׄhxׇ|&ou׵W=ŴԸtRjr%{:QLif; `!ϡn@֋+GA +!xlH:* i[XTF2. >(bBi46.gE :1-3mӑhZ'dMMKbf^+MaE~ZsJ9eNN>v~#O㋬l滸Y~ +C +`{+K zysƗh슻T#>jT"5ҨHj|RO!n@*,@J=K1N%/9uM{ܴC,#/(R fkF/ʉ%AtH94Re@E;\sD'~tMh YhUuZ@J֪AQTO4puzS-٠٣+u=>SۚLZ MƭRU|((`_6AJ "E1Aw +nqV`p0O;xlk[]:{1Wn_;@L[-VBcj9$߻k+jr9|H?͑ݠk(sV5Oo3k!qCSAoloHr#I>>}N70s)_^OA#A]YPI82rlJ*76 @L]f)ڡڱ|qW0_;ژ꧿#;X?sgf[KNʳT`_[xĥXf4ZQKDoZUTPΤ oZ91#E0O-( ̩)B1\p #3 ?{r]PJ\7!zNbBp%oͅjd%lEppXkFylC/==hxTgyfa?勬HNhdra-{ +rצuUBA1ĈZބ*Mz ~%nzz50CVl}HFp`:NdF `amIj̊54ilXΨ:Ecexӕi2tyM*D#[g$$&nb lf)gᣣA+Y4n3X5j6@MXEh0T +[%Gl"+g"S&s-c;V[gY+L]%L$GI]3'B0-3QnEZ5) OC꫕%/8Bek_e~l\].%Bd [=x|ߪmfdr K꿬 ibW?[$cd%S"O|la3l:hJMRFgz?YrQ-$1H܇HZТ%3 ZBW"{ @zkюɛu5$ +m9R<,)Ҏ]2 +1uTt1 Ê2#&Ú|a,/"7>]u~B^uAq*PCD#ˏ{|oBoow_~~z߽o^퟿zBO}}7z}߾?'{_lM"vЊNƌȌi=ԋY:xk8Tg| Y.粟(R"!^moKAMOY3USvE_pu($KӋ1(;4%4x40R^rĵЌiuIUl3#v)_#ĉ` SAdArCdKaIWGnAi$杈IZwK4a[B+7>cZcy%,Ѧ]ZB+CorL/sm(8 UTUԂ3a9P?OG2Ut+}}!j2d--,ojr-{)ְ\QS^ih<;f(ByFm=pFd~f58oI̜Y sk}leR +Yꔇp|¹f Ooy]r^}9:mDPv3](I_>s3,XX*R_`$( H< NQGN|K íCyU[\GZ'W{!5"NEFѤ*Yw~<ͮЧ<9͏181Wh>*jf5Ѯi51?N>C+՘tXm;R8uX@m%Ufs'"{<`-U؝0/vf@KI<{\"HO C 5#KUg l{cl~[@#5ҥۇ+N|]m蠏#;G(ӳ>d8ۇnC)|U +gqIYE p`kiI?ĄMӪ1!1慡DJXE0TmJ7×t%٠͝1Bm6ޞ~ٱl%;}8-w,]ځPƥ2n82JysuU7A+ `ڙ:.'qXo=/F`-~HB"TJ)b-`-qĠ"+q5/e_ +2-˩ +IU"g6;@jVq ܐȠq`DF~1 +l 6z+@^"\-K!^KRBdcŀY)k;Crcڪ]܆fP.Ȅ|'5Y{k7#4'2U* eוHSjT(HiIS`^SrAD[t@vXHc@>+gI(Fӥq<砜9m3L^:- ?T\e +Q!1&}&9k;+01oҳqQ %Pځ 4ٱ%+)N:ͩ_m#0j2S34> E{^ r&3,DdV}·dQBAz w64"Uϩj׮MMQtZyG0eLȫfFM=: ۑ Ka\Z-kwS˺)?#P"pwhpzB?7.i>xC HR.L$3')/Bݲ4zo) }k [V5=2 }wKs}U+dcuFzmDzZ>!Jj#Y¬nj<\^h+o) +XnIqu{c + 16ʎUy `+g>[֍Szbn춞4q #hBPGuW ie(7a zd.GA@& t!ؚ<#2 #+ H3ƧkcA74V5m}:98!#PW,bKOXJm=II/Yk>slC'3G{FK^mh;E\YZ}2;M +`Yt(DS0&hu)n-t0{E!7EPl^( +Zͱ#5Yú$IֶZ]_]#?Be.D]73^QDu,}$^ocFnH)&5T;"OxK9qg9U+8WCwvK4gȢS] 6O$p<1^#sa8fh7N܂;#MzaEm7>ڻШXPwĜ:;M[,ntHP"3}gToc0/?5bȍ'=I =L_Kh`5Yq[,>7l#dЉ?  7D]\xX}oX +."@*RD)$f1pQ^B#y;fճtM̺)aNpφ5 ?:gRG+żkQq#JxzfeYk;48fE3qG˛.}-޾?o~՗?~|~g+r} =@l +v PWմL=TB/>$NRv{aؾp/# ŁA%_>DKqK}uw`S_7~Ed/o'`rVNW9f!_ߒ4 hRG ]җAM.0c +I /4Rw<4ދ#Ε%#j: +xԊ_czZ mS"8= `#FW$s|h/6p :]Ϟ_G{:cѵJu8/='1W\vw)A98:4m_̮BPi[U0@YQ{8ƾOr9"Srra %B󦩊fqC *M{-34w/tRCV #FJP&Q3PJ]AqMhsxmky힏 +I$R&b$"pyryPFSsLDQەWQ!9C[.ڇgy@aX̂Q!bS^1b3aMUu +Oh\vB@z2r&'{{2Gw0紌p땦uCȯz?]ǒ_0ptG%H=$( -NDV%wi,"22 5,Ldh*KS_ȫ.To\A B2=mᅡF\K'+[zsd)}i'Wo:|nDV8uۯ l%x}r ++X{}O΍\>fʻ\f5޼_R { +Y,uXJ#]6"23iq 1,#-qJ +ݷ[mKiuw"L74Eќ j ;<8{ iGB`؈ԕt7ǺSv#l]_tߚMхmU|ZHkS;2_OI8;(- TsSn œH~F_?M?ozd*=+]ɡk nXvPt~^'wp9QeseKz&)C`9j~s#_Ԓ$6fR2QÚ֑'+Sĵݢfv#x4oԋ߽f7fFY8p[4]G22di`R 4m)`T fsh;MQ\+s7+ʐAA̓DTi{?Zx!v+`IJlQ;u%YZ'}y]SEŽ4Hk{;>3zQr3#U4מI;oZ`jU[&5o0F #/^ S,G/$Z8ͩ0Nj`ln2:G/W7e!T +$}(T g.&SŶx@[Ͳm掦aVY0wS&##|os:'Hu me97؊ERAy-y^*l>Ř&x_ҷyi/i>ӄ|r(;吻i)t"HʺRKմ’zHTB20Of%ގ+|I:H5*Ћ\ach@jꚖ®+CP_lo]Ré֍'C5^7Νut|)5WN[S@ʼg"xjA{O9H7>yk[ M +C9R!#5#բu~,-WuB9/؞~btIWDg Nؚ|,=`zVj-.rU-?LfH7UӅ%eLa?3f?M[4aYem:U6kMb~_z +ߛȕN USa K^2Ke'g[Tې:"~`{7tSڷWY2{^śu?]!zO>Ve +ʚ6=?S8z L]|evRauD)>i~zm&d*|]_LǮؾhPysX{wzk+Է03,aƿ24, i"-I+-U)ՐaiV$MrUYjm^ x8mI;!%5fxq?=k¬F^JʞI+TeV*$X,B!QY'F: G|DUR7n|Y*rhW™LCݟrC ,1M]v'1@h2|ۺ/2H*Yy'z[]4YC^ʒwٲ׺hZ8EN2dy4aN;Ցȝ}鹋QF\ ɖu;ũ+ij$HvsL*DSWmI[gNlۿɓ#K.dڥo04xȋ1glŕXI_^g@koSʫ~csL!69"p̮U (DsM#";>ˤ;z9?[79"4c*f$QBMdLk]*ݒb;R >t)9a.\} Fz|9ӶR uԿ%k͚͎kiɤyƻ 5 +}j+3Н0 JH +JKDh˩wpg CQF/岪qD'8' r_Dς8B`I A>Z d v]j]FW6Ӻ^rԪBM sRJb% ,ǯ09R>7 +tE*xU!&(-V&xK}zOlw`DxVYqi{ٗ0ri .2E ޾][NTS[O%S +;q,XJۦUf(Rv?]ߨ|z8QIPxI@7e9ג|]}D,4|HrS֠>gT1'oiNEV,t_I +},3vӾ-a! `]ps Yɬ)O*wEEC^Pn&E>%԰@DHo?ZsCnYXci+^D-~s@VzmJUBk'NaZ&'{ɫ\P%5S?NJvɘ@=(D个0Jz2jmYzz\fGEJ=V'*Ƌ6nX}8ƥ[^;;isޫZiO0pabDzySV7x-2o%nP6V`wr9钽8!ml'A x/U"X!=.׽F/@ r=Fqcv( &ꦟLۄY;/ 6hbGXNcmXLEB[[CMWy8Ml!aZbVJd* uǼOXĸ +On'c%YW淈v+J5#D+TS/+T׉Z7mQ}N`t5XI5j+ GN}NT; MHP- [ b={f 4@8Y q!Clh13L:DJ%dxfXb_MZlG7]6Ͼr@us\ق@(7JY!J"-p(] +}u-5](H&QlC3͓f:<`: m`iuP<>E!Ijn9 ή^w68< -HՙB@ +S{x`Ii K۲Շu`%RY! Ÿ"WFKȴ\;[u:^Y.r([14˲q |́yMxޚ'Q]ݫV J0.=TXZJWKVӅ% ~%#O`2YvG&ϕBm KA>KOZe ~S b0M8A‹}oE*k6tLk6j 9S'4ʁb̘(ǁ LFfoyw;s[3=)˫W1>R ++:n=r>ؔFNIrrpfa m^Y/8>Zp5l+lIE) ㈵rN/Wvz'ɗU{wzEq6,{gGw߃[Vɵ%}Aꨡ Mig$WS_T>H_LXl,|;f#}&]epNThc=/W3ɑR,6YS+ ,dz:הWaصdZhtLl@kiyE%"\s]|Nrr +T d=aFjdimwmFBc^Ɏ-i vR{X\K<_o}O/?}otۧ/W߿{y?ןyJW~Ӹ^~'+.YMY,q])NçTC pY!/ږg +[oFTŊ{/yJ's4uEML5/~ZGjDŲm9;hDȜTs,b/uz[?|a!Ǡs9Վ>%!Zv :'cnqq +'JA4@az9N M>L wSU+_]_&Q^^&I%fjuF ʐɁɥ[@l&?Zi줋#|.\W4̢zCNZ5w[HYDc 8Z-,^F&I,@+8C}tZ;~w]P.ʳƛhʼnU*"T x%Uc@qT!9I>f#y߬dZ}R~V?^6^EsgOg]::E41Yۂc>US^nVzo}t;U"5ryJ̶ bye$G7ǔM$I0gr; =3n9,7#V MDQ8|RPdtXu?0+uE9/vjPt8)&}Lr +!_=k+F(dcؚIMиd=y6ݔĬKJkRWX)wk9eD)3zŏA:(>۳x.)D֭[qL%d!G 01;')w@r \:fb-{b]o9%J{Nlϧ4'ws==QXTv;Tx)j_pKcck3'5TܭqRŢL_s#ӧ@VL)GeThsS^gujlOiq2rTpttvhH FN{ƬtG%_}ujbQ R^ Òe֔?hO|8P=V/$œ˶.AЮP9'SNwJ;= 2T)`Węo"gO<#=-Ӄg&-^¤ +/X̝[Qwţ"ka4Q#_ӵy"v%-Ϫdź쐭B_dA0ąBYlmuGecH&Dm +NGJH Odt4aḷMoҌ2SFt Dppf/"<=Lojmݐ5^R!ؠԫ8zBTU 3 .VNTdVm7+l)ܒ2Cʄb͜B:?g{kl]q 1 yUIK\$Rvyխ!'ScqM.ԫѯuŰ.W;,"phL-K(^JmOg2q5wica=f&kEҸ+熊=UDQSC0+0/Y:LAV[&b#:pnczĘeG S[Mn4CBQWZqK|TspQ}yM>,54E;۽Ov&#6Ը2=$uJ*[r7d !8T @3l7_Y7+T=u'mFYE?d¾OxDnfaIv_⾒H3SBe!E5ǫZHKKL JojI2_>^ nm]@t*k{.a Oz +-Eew=]L?]ķG9,%V`#Ӥwh0)vQaYD Tly8ݍtL=,bl/ځFwp˿^ά7|w>Hx_~Ͽ7ן?~~;{)_~":,#b^U$q[@oײgol&\|:y~YCX"bibΑ/]t d S r.imw +gmq[cIGг4fy~A*T~QG{\nVJ&v*-iJUUEP6$׫/\6wRJr(D]$3Hn$MRBK8ц9%Rb50Y>Cuu\z(#&BB2|Gӟ/Z_?|O{T_0Ycx1%)i|P W\*lZ\-~D݊\DsjnpAuI/foרrHŘtk,im{ @+TI$ȅx^2PYpּ1,dڭ␅RU:"=u:LqoWVWn9dQV=unI9ɮ%g5췆UFIHħY3{]k. :IZKE]zk;ȧwn]4efSʺgvg1y_1Q5̍TӬ +@"KQͰ'f"4@ejuRB]\&@0.zny\ +Dapl݈p$T#U*ym/QT̈́ +m ҰFXPěƋm7(U6S8أ$!+U9-aZZQiD*5N%[f|ޑs< TU*lĈ\SMnp_0w=/wɖ-':fb.7Z F[dbhrU0CW&dm'n6̫+ 46d=k~p1*֧K(AQ1 IhKu\j&:֜AF4lAH_e݇hfG +>Y"w$HsfȊ=OWHf׼t-}J3EEiD T"R.e;Qps8fe`K,,n3&TQ'5.sHzĤ1B@Yo[t֢&3,ZRCuXa +JlJH3:P'7Gyr8i@)#NQ.eXJ'8?+EJeuxi"TG2Mm}M'}?zbZ:GFhI_[*XF{IIlԏA5XU |>*&rzgs0KZ!KRng-_~wx͋?k>?~-Wb?x3 ן<\t]O?<f8xoo?<{ˏ޿ēx?z}w/n?t<~v{_n?|w.z 2AB;uUrT:|vWbYUҢ(N[rTU،]Uy@x.^CxbֱQȈ[W1ꊱܸ8pr۸ KS]$ʌsUcSY#rU6ZOD :ҝc.ps,x^5_*_l83zc{ X0E80m9J9TI" +aq Ѡ^KdqLc5SYmQ!BqCs }j2\$J 7y@ReN.˘ftRD1+quK%Igr} +|`:rJ"+e#%/O>*م7nw-H˙(yjCI.EI_*%@ȣǻ+=Yium*H JU-f,ʗ%^Ԁq~zYE[9>w_vV7eB;8.^jIHm>cBfUZ6-è#A5G̪"i~S[%QVqύE UdIX`!-y+w9S1~=;kMTڇ6r0_ .q1UAf.X8'xR%( +L 3Ꭳ 9-~ׅۥp/fFJ{Z+#*kW%.dPPyӤ5YM`TTA].#w(2~0")nq{U4t(aw=JA`$ c5 3|ik`4yR=N"GVtSȣCfc=mZӁ.U8m^jL_0O^zkZ߬/6Yp!7]ybyyyx +me65b-RG9GZ">d% +gbʹ# L[Aʪ #j]WdvDgcDkNymAt+)X)j˞D6͆oAfAP)d1s?#M7,L@i{VmQt% \`Q`Ox|(G9i.լ1o+n3d[R[MJ۶7C,c: DwMǥXPY8ij + ,) %w]x)!ŖVO|7R8c6G*&s&XxF3OѦ16oHH3,*v@g0m޲WR_+wK\Y'v|r#Ə5.Up@ +m_iH: [Q11x⦬uYvø_?/~K?LHεkוNm/d0t9N`#⚅T 2S_)q5@V0浙|$oRTD\e|x׋"JIϸ86c^FC[3Nܶ*n(L˨Q z IO%WB~v0VRϜ_&NMg<\6I:6}0E +TF.bٌwMW ZsN[d֧ul@[00 endstream endobj 28 0 obj <>stream +HWe g㖺%8YB 慘{"*|A mu:$W;/6nf{.Z]`{nX['Y:ǭYbr˲ἹncKץwz6tՇNˍ?c9o¦><~N޶S(yW6-l\ ~.mRnʻonN\f3JYi}2mXȊ\VB> D"e"l*hj)LKq׈[{Y}{:.*JضiԢc'}r%evK/cYnTe\~ ^lk"A'K@7(7_ۆ 'Q!Ye8guftf +0PޫӋ4.1_x\MYX2N? V<0wSQnAݞ {ia#leኒRp4,,SXZbl6~colRKF/a3*o_u!q zD3MXIrw&ʹęy æ:4p ЙԐ@Qx4H.g-(ѬFp܄A+1;P ?:jzʅ}spk>"MVe'pXS"2Yԃm.ݫ2J$ xB_ƛ}\Uc&ӚO۾ʰ1.ETE,Zj|0ok +k&42hayLCa&]0P5 +Ú S'22g$o#4ciop !F1 q? ҰP`H +)$J7:A:c-iO8AKd(0zxU-~\Lϑ@?/xݿ>}O_{};@O2_뗏~Ç~?qX{׸~__?F\+hEd ~R *hOplbdM:1ݼP@eZLv#PE eE,vbbAwk%HՃ Ria*ӏ"juٺ\cʚ=RfO,Ͽ_ ׻>"vU7sK,p0jOL&%@~p`!;cT +|QˬRuge{eZbEx82s$t7mOÂVj)^7Oh/`f%ΐvˤX݇ p4c,eأܣ_ّ.oTBbQ*.@:G3y>YQ +QN6sv*70KM5QP(ɌDih2>x%Xұ(@"m M8iӬ}FJ4)nC'"2/WP[RD3ek⌊L;z + %@tu-+MS[:9/Ίw+&yq2bu)jg&$,+f^jKꯖt#o)phmCFkU"ڞ1%hت sJB@i(/$=p {`pPaX {[)G(%HPl%T޽Tӈ9„&: PsS]Gɼڕ,{4HنUP5N@Q|*ѻ?"o< C:ۗV;VNҎ/cK FG8iS:5hBm嚝}0v=0U Ĵ7*(=֏7{x%L'>A"h#Dq@Am{H775ߐR-"d# 5k B  uQmxc3Ϊog¯IhLz%onX]&#Dxt~NG)>IQ{@NǪmxEK7.c=>aq@/j.Th,)Y(oC re.P&Bz='56Z./m1 EO5ώ7K vnYN}PFO~t/f_*1wq>ۂ9V˚p] +?|jǓgwwr:5z~߯WdPjɢ +#z41#8}K"^ED3psKυSHoӭQ Մ!b`<+JĄT0`QwHA[:zuqg!?Iax^hh0B@ϓlg(M=:?]K26Jc$x(;jҠE88N)<]@5,XorGew(܈~<\iO6gdOO@FNMM("Oc8)W(@;K-4YSA); ! ",ZXӘWv#4H-p-& *c4-"œ{K g+ph@!UێdpS7Eh 㢘<݉@qnrGô]nzIW!gsosׄ1G64MzAJ +3Wmz(jMXLpd4MOE/`rm꿢Wu.Ek3!;IUQZVZid֤t9PҪ*,PS5gpW:EvЩd'}%A@@V>9kьCByɿCQԿ\۵pzWjWXY{1VoE[r-Tk3iK`"Yk +S[ږJW,!;ڸC4S$>G/tjCNNrBBۗʧf9@q<:pN\"EElǭ#]uhV/G3 }1#BxC`GN'i\7`Ƿ?߼J?x~˛T۶b_x}vv=㓷~z<ݼz|xz۟>ܿyw{aBw9{?pw<~w7Owt|}5';^pG =s7;4ФB[UF}(}ѻ>~fz^ՈK7JE痝D~ic >ڵfI?s . +%lj$qdhzBqZ(+:y̓Ez~g\v< ~̆/ʀ7Y +MC)Ws$ALvY"3tWWW Ê? ɻ*8TlZfn򤩟рd++ͷr}56s Z P,9S̼~psGK]JFT訋YScE{jԞs/3毉3I^E%D[g[Ʀ$u>fy~Yƻd>++ +tA +ƫvCCw9nƊYc;A5 !$f܉۴Įar^1*2[y GQ!Ba\@W,IgS6^ǚg0"CSb +)~q[Gu.r,B3SŴgOF5 +d-n8pcyK=6_bH5Q(KU5cؤRg/Hpƞ ,W3}2Oy\SIہr :jM]ɍ:-pHLS52:o-Euʧ;6!5Ux1KUҐEnRBU޾\ˌI`KRWMgzOɪ/KJ&RI+ + K# w_tm&-|ij=tў_CޡZO:5{2 +r7O0Tb4b8r28tW-DŽ=&qCy({9}ʃ0\\F`n \P*]0cọ cbv*{6¸X%voS؊n\㲏+Qen[Lt)e^:  3.S +=dɺ&ÌĬf +|2҄LH(0`n FkFOa"|ܢFő(6Fµ(-C7MtY$[=OE_-HPLlI8fW `xOH$Z4ZtDx(-U0`Szyxm"F8!d|AC_ДV>:?eqT-O"{eHWD;ӻ"j(SdyߌXϢ*זru`Oo8m^ {65fQ &_}֨t~b3ZmUe ڲa7)Pw +*9|-QN<榍&n김'D^BN:kۑ}F0(q˪IsmKAPOPBb}RߡI"tRنQS,Z>hwR)#MXП7ZjMtR Tţ9ZrPr,#i+R$y5VWaRNC2#k.G I"{冖FFbTĮ&&9mzUß3dT*,g q;Sj1Lm(xߌ mej|i@nC VDR>`-Ws*I*D(_xc}zk}/ĦdE7 ~ψ582OEL'?ˋ_^ݻ{5?~ǻW?׿n_?٢^^ۻ{//>{LJ>{Wq]}/[gf}J,;[q$9f)"XPg_Tσ=0ECEV1~L2{Pk52 Wm.{a \k:p{.7j^R4Ұ@CYZ6eo=ӧfID̡!&q(|SJPB!k4!&C-]wzib6ܠFQDvw(7y$oh(wɡn<.*,1dʯs9vhgBwx4p:? ']*zH>N}>IM{W< qy%RW0ꭟW$ΆFt9%)I)axFhzR %PcޣQ8[;<ـ +LU#?;1*. Ж +̏{EyTz*lʾʰCK+`!]CZ)[ea{Nб/O;w}L\^,ӱ3zOE9O:E2(<|\71tQ|Gb!HkODfFS$6 * XK`J*XMMt%Vb8Z+YSVȱmC$d܋h>4ڞئ'_65ԈN)jzli{U],9b4ϊcةiP';Tw1&-^1to쾜Mj*o%VSS)@IB&TgwP0eneBx_5g|6ހ=RGN&mNQ~yALC/He2p2PhLE<3{^K`.إ?-s۝u0#`X +\} G.ǯ24 <'H,ňJQvqig~\A@+j2e $% V{ {MM%лe3rAPe(jb̚FІ3-f*%p^'Dl)q$qKG3בvsA,*M-3Q|RX.8cNk>.$kiq,YX5&J^8tt+KS  +Tݰye22Ed9@r>Œrh#>[ <إУIq U>n28}*OUUg]\޶{![w8dW#u~,OML͂GN׀Y-zE0ZXIG 1a[T3V8m]ʽ"dIVe{W! ddܗet]f +1GF ^?AEojIAWYz@"g,F /Mfkh9Q I;c=%M>]aWmT>KkpIt\z6Vaֺˇ\Ki~f/COVj>="cD-/q(P"'8uE9v؝H_uZW)9$4ǻJr$hy  x) Ly1,aMiنV%nn*t9e4e"Kt5ǟh53 qrì[|cGBI̐'gg^<+ iW/nx.0=Џ 5.23q]o%*]rfg%WV0CKfcż!8_ GQ6oUW3v;[! B]&]K$͸X[E\#`~>Up;sR-@nsHl戉a?ΥuS\iRU9mێ@8$0%gyށ=Z  I$PƓ$I}Bw?y!%R_8.đ%討*Yjp#LN!`޵$s}\hu?dvUMH.a H +UÉqT?| +:s@סG8cqOxj!J l^ڎ( )4tR>DUKJ(f9OW??߽7ś?y߾7|?=>o?su^Ϸ=><k??|xM1f.MMx9C6w# +*<Ͱq.t'rhJO* &gijuaʦ=}C_?g^ϥ{mBni?b.΄XdFyeMRgH0*9qVUɭg{f)Na+z +nDA8JR7c,N*-7iQbLL !OVBjCWlxƱYsZF> 3l#e4 +`T,+vJ MuS%p+ UV,m';Ѣc)9BV=Vv2+Tz:P"B6^*&]*:@Y#X SBt:Px=Wz$M +dp]J"Cd=p" h]"cjE)أka3OѰB,johe)e<13ؒr)b_V:\ơ?β3c&K7"#o7K?q% Ɩ=炦CjUd^biK<,ޱ[݄ihqeAkjsd?mAZGG(؝2o@<3Sm @ImSWNM3/79zQNưuW#5 ì7sJ|HV^Z8k 6"qub&"Y A,G&<]֦j„콰skz" c%nZ6vGCkY\вU~b;֍vfʝJ=V۩->vji([6;_Uҕ5)JbRI>L7fVܮ)H~\f V+6}dT%SN!VEJP&6u$#?{?]ohUoD5DX:o[+'wƐ!nՆ5הM_A_J!gxJIyн҈x/n#{>(={SgfR!x@}ڊI9cbfO6. >5A-Ե=8 Fr(GHLg;dC)+5K' jP/c2["[WxdΡb6u@h hc- +#JwE.,L?=BV#s#12FO+ +*=9ϼ{"$]v,Za9~7]R"?BȺ:Ɗ`x1G~U߫KT21*9=IPSSί+q+1ʞh$tЫ~a1θi35;ݺXZQ7%?h=I$ +,A=O^:XyFIい B5vf(u)f*] nd^z5yoֽu ӉFoq-=b4ޠ1F5=֓@5 -ggco+J8:ܩ}'s08p,hgY|S.uS.)CSI,&3@}JEjܦ&:hGjrP:>.!qh3!e"j0fZ=ϳiXoBG:zc瀴BUV:X`mD,7l5LR0mxyqC>,1' Ƶih by ՠ> 6c|0T KGTdzQ忄+AǕ64#e!n+5Sꗜ{X{l%7j/ p̊gh#5&ڇi=$ubgqTJ$"$-콷9Zm}٤>Brc_V\7\ztv(@ԁm&<d<>E,?7 :|IviG{yg&>/ xevWz(c o!=dQ#pWw%bSC&C,7 +7M]ʬh֫b|d'i٦ Gݻs:+䘻οቋc0M8l”7TȼA $O\bX$c dc?%Ix q=fwf/wx&j!afs<%㝭|j?c:V7P +rߔ{ %{`ncݛ2@ \3UGuҔIyj@)']bJ i;|Ȧ"95"XTD,(Dj2> b?uXF2<$A(-h'd`S1 "A,NZ<dƄj59Y^]4'gW̭K;3[JXyE=q! PXQm/a\VP#@21/qzĽ#,8E;L V˜HX}KY紋RS/?T~m,wƾם@-ovװVZk׾Ad[F~+,q1f5'I(=ETxvФ,7U"ٍ7f {޻i?/:jZ$k5)_l,;q Cn>z?툐Ȳ]=͜\@z-9E-/q9ųC;hI?^X\7BAR)&,L_AX)WR`^R.ɀCRޭ1S e1Ld(ցB{(Aa(B9Te:B7T>?b+vNSi@ʠ h+MKFy0_JL g/6>+ ׭CO(I]mW4yڵӵ1PptV @Y +šxM֦ +& SǏf6sn cxV~ KB!R#%  GnmԺ"$.M *)0D̊E(룿4RqfIk/CF ]cǾSF)9ǯahug1=O;onUp^H2+3\A x+)r= is{+~ +IIk#MOWbhjPIx}ߦ֬`Đ씲(9~~rb}<aE/*tg0V~ry~ &,zmŴfiSlO{:+sSm/H-d)S̶^ݯYTuo׬~ϒΓX^tny:rfG}Il!5~_L͢#r5i`((?RT +2ക!>ov6ѭHAmjbt̸6 RK%n~`5b(V3L-q# +p"?8 +$r#6H4)S )wuӅk=O[WW~ AQ־sU``F-p?#4 \m9uOgc%dz4Zc /q )cj5 fXCAG&]Gv\Yd{x?cU6^$zDJ?A.&xqϓ\}MB5&_^?ͣ~e`-VG8ξ7-oK-?}0ӎd6=e_ 7baFsԌ?nV 5wxdۘwcJOR,&k6}VuMҴ""Iv(B Fm_ƻI^q9٢&1PӒZd/CU.˯Revyz&SWghR^33 ^[znikY9+6v#Y)6hu׾; [N޴.#f\"ѹŠF"p V*3@GDTW)/x템k[Y[(f"{+sotFjF}F:zB) nL먵c2ͯaT +jS"ezJm^@ Cu geߝ&ۮZȌR4F:紋Ui8Mv;+2QL*$񏈳\"彝e]al"^Fmf2RI$ImiC7~3)w I@JY]b u@nnv.^š!@w&̿"`JagϐQȬ5jܡ\9c73C $YDOkW}GΤoSrjKTM$1Ir@J!P3 n0F`q⌱qxoH]K\N:Gd41fRc=XkŌP` ;0-ӑ4u%p߮&EYDhhjU4I_s[d 1;P®>-l"*2*.㐅NfQ/Ǧ4y/V7TSC\&i.и&28i ^誑Axzߓ`HFOlS| bG'2SFJm ܓz ^L}.3x͜. zq|vDG>Lڑa3hvҋ.1:`Mc`$\"!=EEB0VhrY:*\"T]|ي9b$ج2ݾG?%Rv$TTc8Ix,(r!hAN8e >,1uw?Q}$ZaeZuHkhQ"j*nw ].@zP{F}kX.EIuK5[͘ m5<~\ysnFϐE㪮K6TыPF$H!eHM`5B|Ȓ$>W+fp!XCd QH5D#@L&y&a +8.CdrxоT߇<debɪ᷸ԎtM^:'2ׯcߨ۫")9Sz|ُW%%v:~ꛯ^}xz{᧻|޽~>^^~?o统uxwO=tyӛ~_+]b327YajuŶmhڝֺ%c ;KgD2%:cpv.o$]>Z"&*= m`;ݏ Mb5D);R`d+#V$e +)eIC!ozCC+\jH=ppRP]F׺ ˱8"D3Y =͢i;`$2i]/\Wx tjf%gհb>.c=n)NLm]'l q#%MxX$P!b-9rr8pHmeD܎Me~t!mnZɵ)5oz.P{]%;%DBEDP1FWH2'}Fڭ7 +3jcrD;"TRP-+GBLeRv296CuNxdin$ٲm^zv"V(:prȝH,݌y$!I0{ =&W3R!%HcyXVTms2һn'W6'Y,CrT)rH$T-I=:O(>u*7`\o O\C-ͪ5ױ6 ЩqAzSFBTQ_?JJVKőv̩u,;z"h-YPN3CTbh ߟR-]N`LԖqŒ٨kY'_$R('i`,n(M+agl` +Ht;Ρ{d$ 0?U)"4pb3[*jgLid0"@;'AAk.R ^O7#40g@>ū*1E AnhY3ALBb[_ 4hpTcxae^`x8hO]VÛ!!/h:Td/6YեJ*}KԑD6ҋ.\G=tgzP,!p#="hfJr4 +;4 ^ub[j<"->hҜ5.`S=[Okb#åpeE28W0 &9L*V`E ÑVPw?װv JqR)qU,+?KYY\ž(OJ_Iiĩܥ;9"yIM7 +=A)Rin9%i1bP1P4V~^l$F=] QaR1U^ eqhT~*+s)w ԳeJ:]Y-=VzphCB5u{m)Jϡ4+ +_¸]:aF}?4!x/a(d;*OR+v|A"W샡V\O"Hwi筗|BsJ9dBe2E -?3aF2?GQIKuɋZB!h"5m)v俳HES{kJ[a8|5W o _Ơ +P?.r}Aw!#{FֶBty++Ew03$Ɠst;w^ #enz1̷ #v[=;r = ۃMf6Ln=BS-WrΉ˅Դ):@W ko0Fl7nFY 4g .tg XgÇ~a.;0i9"Pq7Pc"-pkРHwܦ:qq/J$0:9e%'/Mo `Hm#k;^fAj+=vuH ƳΎcYQ`͂bWy!j*&fSִY%y~`]yRV`KmW0>g֐mloX[L;-l4Rp8o;Uп~Oȶs{sѢ܅ AT?6JP}yfpP*yB{ + 9$Tt-DH 4 $1υojVm!DJd2ҡN؃u,]'3 +X +%ǿ޿*};DҶ<ȱw7dZ+Uچ0 &hhQA/oì(g gl4u\'DVB =Đ4ܦP qAlQ*/)f5(q&>jF|jƤ]es\bJFߴ9#9y/p:b[B:۩}v_#VkVѦӶr-goDժz?H}l`|Diߥr[^Wh~4jgftѯý')+:!}sqg썂J|:{LTbҫNժTLOrKPzN;(/']d}腳RlnbOuJeq8Zh=|`\;+TA*u.VV4ԹyCh Zc\}f uq'• thO':5iCIU5S_8_x˟) ≊s5 i6vot4SEHH\((Cqnyl @ĞmeI-5=qOͰmGW+1,Fj.[{mGOdiԖfR{`bUk .C4}qaK:[ +."KvD6uuڛbD߂2v2 1 m{cbM{x"G'Zʺ6[bqPݭI*k2#e5|LEJ^;5HVp)o>ʧh +rY6U0IԴ+uH +.&֝yOad[[8y[s9WaΪ?^Z!sHZAtcD1}(t'ݳ2SD_à~)o) 8 +w$$d9*V=E+fYUUbs:i2Aػ'3Ccon!\mӣ5lF[v/6pN¨Zcqe2!߄> {/t)SZqK{AmuVj´R?)²("ۻItXj﹊U>|<,{ӵE羡Cgqd޸>60,{oj+wజkML؄׭pP5p)-m&k>5URLj;,7+00)\],OGO[lک2ۃ8U{%-4:} P#pΎm^HD_wYcγ3|/Q4*[yC +P{uT12&h)5#"y@F3_1P yY)FG|%sb͕VߕPa ~Cϯ +"G5khFU荕P/GJlĽ:PoaKvTO\a.Cjp%vpHF箯&džNW^1r!J ugF2Ƨ?hVّuc`(3|JCUgAv+@ݶRA] h(ތ]/J̞ +p޻x"0 t2xF03g~UO9qZ,zbr +99 Lu~59|!)?&@ޢ&IR#G'%C EI//1Moh+5C{F\/?K$< +h4 H235v:nv#`'ڷ:4H$uj׾]Œab,:C10z[i ڿ@ņJ#8,.9+Y&"/`&>ޗ9=b ىJ+iq69#l.=Gy)c MHDM&QB/'_(4@|^Ѓ գvvՇ5=_;66zty{|~=:|vd~,7գGabv{w<ؿ~~ˍO>=-sczsU"!@>4ǡãC;jj=lb,;q?=_~v{E\ϻw91~^D>!?XǕwgtk:{!Bm]$o?} `v}F{3|Gaj_lWo~ GANBAQ~_=xEd>.*8)2 d6 δzvDz˫wx>ٯ~x/88~8_xԯ +:aqh𛾞zzv{>TI/ZWʆZV}̃6Qs_. y>Nђ7̖q1 3}zΌYKas%Q%g * +yl9 J O"

h /Cm&.VC2V|:=!9RE*XBm +*YW0GpUZ`/P?!6DX Hb,Z`f$". $&r|9Ϛ|/KZ&Ų~>㫨L+q-wva^_( W7ܝ})ޞeeRNPYhn b'HAr/Z]EvU.)roeYdb$e=h\rge<, +PȷA}2f.$2}˲W ln +Z'|k8Wz"'Uz>0LH 1TcLYTTjEC1ZxJ)] t[7g'񄑱 L洍= \}T%%\`.dG񯷹PTؐdANTƿ FV!=BN}fa*!!q[6R4Q {DpPKn;J. +6\ZK-ͳȅOtm=tSÁlU)/z0C*3 MfRPs}QcrIDMrԏ'=<6վeʢd*P! +ˠ j<^u&Ȣs(e=b;|jzX o+UܐYjUjRZeQ`hݛdsSb cZVFFĴKemHkTnD~Eq-eT-&o&z+hQwtIsi'#2Q-P@KtejoͩIUfJDj +8]sK%t!>6|&(5,POAV>MQKA~JOMOC5M!a&F+ @& B 1 >stream +H͊e7ǟ.@d;MBMӳIu݄@~dK}]M2C-e} X_ѫ0 Rj˄6| H nVvT#=׫ÀbfX"G%g1_[/를"a>TQmDhRGQ$(;i :?y~ǧ ۖO/cEڊM ۇ@WjC?|_~m~wmfԌ^`d` cMl#H#,Z|*h'Akf¢!mja9uWH e Jna) s\2azgHVaK11±dEml"rsOWA|0bۥV(=/a8/-V3$Q?Cvٚ^;~gz;AQq؁^\rJԭE\mFʩ׋=No-OPE`e۶#2BhF +%Ntd\l;xy^IJ-[cVh:~FSP.w5P 0 `T6Z' e(hK4aGkV>>mE46Eu6f֢lmdц͖j˞FF+և%X\7G@q%m(_Ytti.lrW.Xy'r]!۲[ .Է6>-VuRjT. qLŽVvu/I8E$fL3;eah5&8vbkK+} KjΤ޳c|.Z4qd-MT څpǠu >(uMM8!Wv=+b+ mܥA \ TppRaF*yvqD#7kʇ6E4N*~K %@Syi :kE0٭:< +|8zJڒqÐVeZ!DOQa=sӻ= (H=ƕYvPG۔B&޲pXL]#e .%mt,R _32eT6Zh0p;+[BjR%7+TxֻM[V)bz!t08CS +lc%^ˬP?Z #Dg}vx,땩ym0 +6Y+4,\S׮p9_c| "Srcq:)R2NWTRchQOMӃf&MGW$ 2'h׺#,;q5 +zZ "wne,G=JC˲okj&MJs7@^tZJ9P+Q9#9nBGu#7s,~4Ή{ͬ|Go*zͮ9rusq}D=0X,=[esbzi^kҥ79{ATL5cM{&:b.cwSLxfb¤\} fx{с0HSw!rEz4~ibiƶkYS+Il&U~2f7O_>ۧ!wTvw@@-4=Ok?w`9r+>Ϊb}PNh "GpѸ21{Z0|ZLIsB9N*CTbB<'C@1dUc5z ymf$@ń&,A**1;\ƙ"3&j#*>K"a꧵j=(';@A7שp8\A-Jc%Ǻ$&]Wd L4dI:u;= gʥx\l+ zFpPW1'jXg )} *T礍S^kU$^m$I=hvJ`&TkA Mlc!jXTJ,+'Xz3OdE>LRqE6_JG8e+y*{\XO夊^9jxŨUtBF;w"^ ͫO g:?S4^^n>o<_@Z ٰ¶l3|'MhnnK +W[ Y x' 0ʬ}9z͠iֆ:]A]1aZ/?Df^Z e\ֺuw5lE$vj +nMDn +J)3;U4UuHk+,w$f1dxqCT>y$ŝ]v[V<u,}AAQ_ FݽOҝed x" +$,xR>i2vhiRS6.ᾛ8~S;3AIuzN+惡T7Nz}!]A^#1dӁ7j(Nsat2AW'-@<(^!+ AVڒ!eg*$9@=.ɍ8\^|\ɍ6b +xm-;;i?L <ʡ6" gʥx\l+8#8 Í=1MC*) ,)#8bt:'aVAӥtK^<̡ N(5 W$=,, N:JoWѪ锭XNA=jmoN9ט5y;)Z V; bsP~ Mp;`{!jXe%u~"9ByJy 5U$ kkw.}wtr>a53N9&[|Ž;`r%OH Nw@F(RQ#wWĨ;G>PaöCuߝNϔ`Qec_ 1~Ǻi2Re"8T7ѮeΊM? |~R sg^~U41`f1Ûտ˷?0T^>2j?5AM5 *F+ THH1>#\d6EYW0tR:qJ :鱎j~XwĎu35㰦*jvi[ͼ4Aj xJHAXeĺbP{k@khhRS$u9y:?@١kY'[VJCbki|3yin7î@%|u;M4E@+m0dLX]{TesWo'Ncݐ8 mOϦ^cc|D>hqzgN:Gm([(|RػyWYjCލ2RT}2@X80GF `rڨiDL c|WVF:@a"}f<; +GBk18c]Q*~q*GoP.&#sԼU%wFdu؄~u/8_f[Kdi6FA`LwڹqKEpNі(r\dUfʩO>q]+T^Nqć w}up )]*?e-Tn{9UD̰vC;wH"V^^)!}ag_̘SZ`[R`t؜,gAR +2QRpP/Yv hS~!|"KZdf݅EJ)"U Ɗ9Zw!kk)Ox?:@)"j$Ze4.86\/p2em]E>ZEi[Bfnx2[hHmgT)E٣{4Ɣc`YY X#)gXQ4RhjW1V:nd aF׉ (\Qjwzp ib +pf T#r?50zO8=#q~fO쁑f.@GS,%N&T{q)H+v!! aQĆTDZ!w(4>qp(ǠL Fe}Ĭ% Ι!b PC Jz^%.9dpU ATX8hQݡ& g1]^΍&:-bI.#) PQ cȢOVQn a?ՃPl eG)nٰw49Dd!d$q=4$ {nl6+g0tFH ZB%us 'ԕljn (X0w3yMPo .A 7 H& 0v{q +;{}[s; ÐEdyuhٞ l)#У T'N͛۫_ lw?ɐ7(ǟj˿Y#I+9:6X*j(A (M{+dLXlgзUA>.m#C7U`d-R9J*kp +f]:w=Ta09X+ +P@sd#PL*݆[KӁvSOƺڈ!~ȤIHFj|n MCaJ1 &+Y(r1-H+ځqsYKer_zS!m;C]7buRc1 &F%H%5x&iZCm<%0Kd\kXm1t+^v ++<|6A.`5ާ"(pTF&o5FyMCکLwڮC H.9G b +ԜnK )A[,nT&]x@6d>iup$I&[廴ҁ5}! +X` )F3rVaVc"TVr5ˀQi-֭[_ubkk#ze pK5XXꌥ +[Z[i !> :@ԦGv,/:z`>--Vt[hSBqT) @ɐr803 l(4{yuDf[gƶ|rȤ[ 5@yN"sbH=" +aX"T۽&{j9zi%Iw ̜+b Z]h]Cߏۻ-lO$B^gۗ6\|_jmo+,jSMM-gG'M’/,qp5?I32&@h?R==G9 a5e]XЎut]P7mq )M9 +6Xi9MX.O}Q{j{.߇=KΙa~G*Œ~ڕ>[O%Ws8f<2͉0J3fm# &)񛝮>bf8aU0DlUPTKtN~{Ճ-B Vm,cAޝۋfʨEn+giwi42ȫ®ZavF!a:̕-Sȵ3 ^]a LθW,yPC08?iī#ʹkᓗkuzww~{śS\ߟ?~ ~nZr^s}o/^U5@9f!-S>;?|zzw{,v//Ο^^\ӎ<^ |b^~voo.{xt__|wxwx+NcLFdcI)!Q#R55$e_ma{}^uw?MښQ=T = +{ T[x()/' {D1Do1-m| ~z[t(6r݀!BmPe,nwMs"ؔ0m4g}¸GrqhCn=FKew(yd3{!yOY{8qb~Al*ۑ<8Mb6Ǐ^=kɠfvȴ'sXj#C5nb!иzI" ѭ?VHx':}8JY==aܨ=k{s꫟Ȉ1أ~ +7sM`9j8u80ֆ湒%!T#)W"Y$Rqf'2S !$4΀@V)ŒNB۱GpŽFe:J<-UPfPƶI~`RMtuŸ(L q/OLu4sVE whwnAoV:9@b('Au%Qӫ|5m2%.?.OH+yIV3Ojcre'QʾQK+-'9ݰ +ULtMӆ$҂kUR-Mgj!Cl4ax%X@2l=Q;X4ppYM<=?,S.Oޓr9d5j &EcfLaOE5GkY(p2)@l`[PLr5Xt'@k@mj~{VKpMn3VkPVQ,N{ Iq(i4y;l\H$[tyC^IHnG{˹HD!G"8$Rlfd[mpC g;ЉNj) ޛbd94ωf>*5Eq12?B!TL"4H'0]X*5Mދ3ȨJ1o]p&X.x>1OzbddYD68FΫYԘj=P@\VDR7σ0>"P9W N/su +#pAagyVew -ICX34F@d8}u>]J9VQp:w՜ͫV,IS-_ְ#qM)  ,EekMTIЎ4"b<>! +dV3JŞ"|  2?]ޯ{*sPoHrFP+IP!St6WrvVdW'+!be7wZ\ fex3Y7aeskysॸf2eHS $&Z?d%S #ҢZx & ]60|O΄#9ycM-4uȠ;q=c"SDfZkYR+[/5,@0wI`َ~~bd*~0LLztx878Ҁ(.QAyCs33D (܄lQNQW58сⷁw?*Q ‚j 5_o@.̪O𡱱j9)1(%Q=QWK O5كR1&ݪj5epai|+iE 8%kUakj#۪G%e7U+#"dob8V#RߊUWѲzKUV`rƵl'ZɎSݸ5}E_zW_ @>n`4t4ĺ8ULpm#xETOr/4_GLMDf j3+\qu-*Q`J=CReg29hWy{ק}. U88 +rcOM׃:F֐xBhDZ-"):Y-ar$Q0 +t|u9?(w6g؂Sc%(D. ySSIDi8Mo|jpƫ]g@-хBs{tr>hiSSr$c0 )jshAҼO<_OۯA 'Va;n5zw>Ж"u;Z+qv $ 4Ůϴ=LE^d 23&1zEw͘Dcf4ÙWUFwkt*+*K{m4C'MJ@V(NַVT+d_~gWD>)vU3FLE$u\@T*N%z&-$EJ%T_m,6F՚uKn|dyYRZ-7;;=|6.jbg7hS@Nކgy-أ. 0I?K)Mu](*[Uo1(QT:Q{֘DRv~ CdS:$jL:}+;Z[ke,>RZ,/kK]7:bdv|H*%7ohFUǣ:ԨN^ K.K'W>e;`+,bzbiC_Y˰SkbݭqYYµQ82 (wU>|o PV=e-VWAfOYŽ{{YX?WGn3-S37ZS9xkR_Kz`8dGmc5\}0?ɨ3q"'9̅[rw^)պY)# O4VfrXQgo|%wWR\l0m?Adwd]pa=MAb_/Z~aCyc%ͦ!:^}ԝL7r }eplm(Mœ3 @JԀl?V8W96LPGtQ9brb#զdmg 'I?D[LӢ҂z"Ͻ-;gۄmgVNR &wq"# L6]eީ8<)H}6`<*7閾GȺZ<D^a2(0KTA$8 W7F  + N¨v]ʞ&2N5a"<6qѐ ήϬ6z=# MR<9Ed=Z>W|j`(:ϳ嚸ȳ1#`_^n eYY̴ V-~CɕhrܷQ/8nĐt %R[ҕ%Q;겛֕F6LP +&02gy@BYg^! xl,r#l1)Vo܉j3!pelXOѱ '#MUT"ƌyG9{TzP6\TK^wk +64KK{xP<C|Y* JYcGK1Bu;%kCeθisצc y{ -t][Kmm"ɢOw?HjgW/ b (ifu&ۑǘ؞s;LzUusPxtF=C:rԝHCt|^>ܖ5Rr`On'αd*pKMoA1rS`׍\U iׇ$vT 7aM4>+L9Y/~mFk 31'/TkGq65!ac#3Rɸtz)@r1;OzzAQe@(H_-K3!A$Fi43pG4OZلPei6I hND7X}a+b\l!=Xq4B}sA<ֹ5MO+hM#S&b#|T*E+I,v@tFPL.B3 +6aN62IzJ]}w1IJb3ŕd0[ +=YWM|5SP`:Ωqf4,bB<,#9'Ek^g*ǯl+VƓ:(ǣl4|Y.m3f;#ٳzxr;9;`ku3˟wx=Ի?O{Ҕ +pg.,G^A2C~qϧ%] &焜4ZtjK@h4S P->?| ^eGeC}ܣrZ8Yyœ6R";X Bnߥ;'w漃qY/@[ݻjtM}=_ {є([j49lM:(-+]SQ/#g~ZRM[hB2ś}n~yNc%cL)@>ȺԼ @Z ] RPt& Kb9y*ѧ4 Z!X@+{1ZTG@LSa?"vDEԂ`Kwd#+RK;!02EGneaZ 9 ò„ݻe[f'Kn"P!Ue+d3q8¸zΊVp=`")гInUscmj֝J!u +fLD쬇0o*P)h|1M}Ѵp 3]%2 +n6FI}Pu•80Z 6r 3Z^KO*h hɩ/_0^n35\ZΊ͖!D[ҨTLuăd6Cvx'3vM->o@^ӂOQFP!oh +9x+Ai4/=h<"D^ƖU,kLAW|Z Gh'6!51d6"vW<"b ޢ$r,#x%i!ˢr#XweJ镳J}C޳k}{9>܍ -:Ri|DMQf1H-m|H*~No{*H<&,q|M QΛ.'0QՖpك+J#86GBFO.)A+m|5SP`:Ωqf4ӬS>3SeQɆ^3V'EurQG%]fvvӷGXΞÓtϞ~GQ=~? z/WHożx8=}jΆlr<WG8#h1y7vWMy,!ʋyM=d,!"<^Bl+5J + d r6^Ë߬U}=Oq'B 7LVHP~S_VըtnSf{ N +~0(76m*sX~<]?~q6+ s0:G8{rr~$]c=xFPBV*i }KH]%^ݯsܟo)g^y:!6{$iS/t8%r?-lksk0t/ԉoóV7X9?D~&pw +>xӅ_vmPށ\Ll XJnꪵRe]PpU +;I$ Er??tLmGK/A3]l`ykk@m]ׅn+!uh"$S*;]H,xYIԎ=7p{0)Q!chV 5-nXB[Rw }Y}gbZ&EH Ye.CNV>~C+L=ML 7{G~rl&a⅋#r|| KÐK<F!-Qw +ь?,(y b@خQ&Q׵%UN4}EkUz^*띣5")`?xeHq`hEC!;viW K I,saj7:?ng~pv%[KEEN .;y0_1C˙9i)MMmg!`1^9ĢsPsaڟsf"GP+IA=job i!Pnb 6[/ؐKfcJ6stEE^kꙪv:\#k0t6DMnv0>lDɀQ`6kµp9fi=DM5U) +00Q endstream endobj 6 0 obj [5 0 R] endobj 30 0 obj <> endobj xref 0 31 0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000028646 00000 n +0000000000 00000 f +0000034932 00000 n +0000225445 00000 n +0000028697 00000 n +0000029034 00000 n +0000035227 00000 n +0000035116 00000 n +0000034203 00000 n +0000034371 00000 n +0000034419 00000 n +0000035000 00000 n +0000035031 00000 n +0000035300 00000 n +0000035712 00000 n +0000036796 00000 n +0000043594 00000 n +0000054990 00000 n +0000067928 00000 n +0000078383 00000 n +0000096654 00000 n +0000118136 00000 n +0000129064 00000 n +0000132985 00000 n +0000156598 00000 n +0000183155 00000 n +0000207643 00000 n +0000225468 00000 n +trailer <<90826A2155A14D9C91D95A9C9B97E12A>]>> startxref 225676 %%EOF \ No newline at end of file diff --git a/thesis/Template/logo-en.pdf b/thesis/Template/logo-en.pdf new file mode 100644 index 0000000..8b5efb9 --- /dev/null +++ b/thesis/Template/logo-en.pdf @@ -0,0 +1,1056 @@ +%PDF-1.5 % +1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + UniBas_Logo_EN_Schwarz_RGB_65 + + + + + 2015-02-04T13:25:52+01:00 + 2015-02-04T13:25:52+01:00 + 2015-02-04T13:25:52+01:00 + Adobe Illustrator CS6 (Macintosh) + + + + 256 + 84 + JPEG + /9j/4AAQSkZJRgABAgEBLAEsAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABABLAAAAAEA AQEsAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAVAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9P6rqunaTptzqepXCWth ZxtNc3EhoqRoKsxxVfY31lf2UF9Yzpc2dyiy29xEwdHRxVWVhsQRiqvirzXVf/WhtA/8By//AOoq HFWct5j0JdfXy81/CNbe3+uLpxcesbfkU9QL4chiqYMyqpZiFVRVmOwAHc4qgNB8w6Jr+nLqWi3s OoWDu8a3MDB0LRMUcAjwZf8AMYqwX/nG7/ySXlb/AIwTf9RMuKvSsVS7UvMehaXfafYahfw2t7q0 pg023lcK88iryKoO+34kDqRiqY4q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX 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 + + + + + + uuid:7a58aa3a-89f1-8c44-9d0b-693e80846faf + xmp.did:0780117407206811822A939C2E4A0273 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + xmp.iid:F87F117407206811822AC8ABD29F4166 + xmp.did:F87F117407206811822AC8ABD29F4166 + uuid:5D20892493BFDB11914A8590D31508C8 + proof:pdf + + + + + saved + xmp.iid:F77F117407206811822AD2CBFF951B6A + 2014-06-03T11:59:46+02:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:F77F117407206811822A8A3C50C222B5 + 2014-11-13T14:24:58+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:F87F117407206811822A8A3C50C222B5 + 2014-11-13T14:41:38+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:F97F117407206811822A8A3C50C222B5 + 2014-11-13T14:41:50+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FB7F117407206811822A8A3C50C222B5 + 2014-11-13T16:12:48+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FC7F117407206811822A8A3C50C222B5 + 2014-11-13T16:19:14+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FD7F117407206811822A8A3C50C222B5 + 2014-11-13T16:29:34+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FE7F117407206811822A8A3C50C222B5 + 2014-11-13T16:48:14+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:FF7F117407206811822A8A3C50C222B5 + 2014-11-13T17:01:25+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:122721EE1E206811822A8A3C50C222B5 + 2014-11-13T17:13+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:01801174072068118083E308287F39D0 + 2014-11-20T11:40:19+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:02801174072068118083E308287F39D0 + 2014-11-20T11:49:33+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:06801174072068118083E308287F39D0 + 2014-11-20T13:13:26+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:B6D9C03821206811822AF12F7F68C14A + 2014-12-04T12:43:40+01:00 + Adobe Illustrator CS5.1 + / + + + saved + xmp.iid:0FE4EE1F0C2068118083B335C6C805E7 + 2014-12-04T14:48:06+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:09801174072068118083944DF2B8E452 + 2014-12-08T16:33:09+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:0A801174072068118083944DF2B8E452 + 2014-12-08T16:41:18+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:F87F117407206811822AC8ABD29F4166 + 2015-02-03T17:18:20+01:00 + Adobe Illustrator CS5.1 + / + + + converted + from application/postscript to application/vnd.adobe.illustrator + + + saved + xmp.iid:0780117407206811822A939C2E4A0273 + 2015-02-04T13:25:50+01:00 + Adobe Illustrator CS6 (Macintosh) + / + + + + + + Print + + + True + False + 1 + + 39.999970 + 13.000068 + Millimeters + + + + Cyan + Magenta + Yellow + Black + + + + + + Standard-Farbfeldgruppe + 0 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + + + + + + + Adobe PDF library 10.01 + + + + + + + + + + + + + + + + + + + + + + + + + endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/Properties<>>>/Thumb 11 0 R/TrimBox[0.0 0.0 113.386 36.8506]/Type/Page>> endobj 8 0 obj <>stream +H\WK% ܿS$ xe>@C$pD0G`%+O\W߳ew~m/_9맿\eɮwq^a~JV߭ܐacVl]~/9xK]zuϳ6hu7m _@+mޯΣ&@5SE]myIvixqlXiU$ 7if @O)Υ -CcMx ^FrB h.hceO5jRW{el)J'J9AzPBޯ&)~{Vp8UW$P~Yΐ%]ԁgqݽ0+d @b?J`{؏`_.6DJ{4Pr"c (ܯ +8SBs>]jcE $bqVOFB \9.[H=_< &F +4qa]Ds;gڼ(Mgo1>>dpR-{xz +>|@$H Qu'QZ|AT`'h0β1%xg( rz!v3ߔԵegf㑂 =JㄙHܾ:{(#n|'ehBVQКF<*ӰtF:C9 kQ"5,Y\("k[qc1I)IJdKLjq)D >Z]"٦Y>Vx9?0$p9p&:-Yl/NtV¬2d"ئ 6ܒMZU V{9]F!G.5+~xBROkqt&3 * 94%ղ9{?>|otLjQ[Ѓ#Ž@#Τ3; +Ptɶ:Ӝho ǖ}x7/Dooesfb>bWMЁxӃg$ۈH`{;gh>viA~gj`>f梽3}Ng(y v85v-gĄp gStz鬪IjnlKzSX.g]tԪ/ݢ&!vԾM\4sh&C85".Va WwQ6!M^Dht @0t&A<11  1'RݬLTjX'#6x<<&zj-SF[A2_@\rClUC;|s6p EtF&}hL.& UVj3Cz/iK2IY_h}aR n͐8dFufLO$? 471U[X}IyvzrІ@>]k6H 2xM4gBӠ +(QT2pY<ۘw_Bk_19$+VUd@ͽ%f[`=|e~X)1lIAl,;ɵ;s8ɽV.[# IF)ֺ̤)D(LFlU $Ȕf%휧_3I%RE?HNI2 f|:hZWO݆PaIkVdžJnf%М4!ihJ+?*z^|~Ajk{c!Y#w?!sm<t#+;'!P޲AE'Y@$S +rf)hOߐJxjNH$b:37j DmsQ&?j+F*<h0=pķGHU|,1/LކOM}DWXZC* ѓO:B.L-l(rP?;$C5ܸ. z*1LDIYn(tW6sc=316ɬBkHyH!ǹe/4d7]]pj-t/})n]1ѣ"NiA܎[Y"7Gx* <9ٳ&af[}/e_TʃELUB=maX}>L-qF0Kփ hc?onjۘo:;R=(~PSd-!0/c%CQ*Pd#DǢ@0ΎiH]!}a}*.l#h~)ϳh@RT5MGe\\%TVRٮNҊ6\শ"_<"v f’]SA44ޒbD]);c& z7rmJȕ5wh"bH5GY,ݞ㬖$=헿%KfM+R&A/[f8 sBuIZ7!njߙhZ%`+4cpCȴud\֬TF2>r 6Snt>vJ@NQA/ً5ט340N$E*2 2PS?iGEQ`L}N#%)\025Te;d*ͤ0@\CfuhQ Kh 2|F%Zuv5g $qp*Y+gن'&yǪ4uW NvV~nmtruh&N}Q}\zw +dq~.Qq6묰Nnil +A5RWnF.ǛqXjUr;0P.*< n" &s?嚕?T /^jQ(GR;$/]bWΉ| +AԚ: W$zd>dJ Tyĺh)L1ۊմqt87jP연оS`I:8paU∰yE˭¶}iqM҇< .zk1hƩw^wպl,/4'-?RY\,*3t!{HKW<5H+\02`DqڴkWȑeE0S#bMyko!w6*RdvMteHSac.=yaB~׼Zݼ/l6s5_: +"w0i 3%~ot%ÅQM#{^(U] ++ԙ(޲sm\]0pDRۃtxvZh0QzcQq]LGၾPуR@=tA6*+[{ +~{ppVFqc͊Ή0mK|䜧#ȲɝQs=&Dy1 w{_2mK*IcK)ۄ8tl@[;ƃ_>Ѕqځl [n\VdǪQ^J [x~ۇ~uS> >'< A;dsOg 8h6K{tFOE^f+4Y.UqEC):Peoav4Å$Vv1rqJ\fW @?/'qmo4q*bOv4]x?T9 +%RNJ)%pЁZq̍ÎtAZ*IIR-E%8B"GnDm$0HGc.GqC#m#*fZ0yQYr+薰"[~QZvP#VO_)GwLXvwKHwq)qWv+5!y':UL)S\)Kw,,}l}GwS DfViyM ˝%_^ PSR\2ui^:n~tGYanOyi6:oβto=tꢽDLC^MJbNK uy曩^ }c= Q^`T$tNיɻ>n)aĵWG6(.9?15O$6S:(Y((MsL1Gfg5NNks&UKM+4^22dnJNXw2ʦ4sϨr%24N^-Z֬.r$Xj@DV˖}7yk-Nh"x{'VwS;ןûuݮMP7NzI- ˰Li07IضldQB%ʢR+ qͷĎnCEMr'&7*7*,wbJe%LEID>o$5$:: =GY .cNSLKV BGD_˅}i-B1A04& ʡጩ.{/Qjƿ[ !Â+*\zIi[ >n[G-Um%y(+M (w޸ O/XnQbFA$򑓺6[SA.rd41$ÒI pb +qO#.ϛ7äd \rRdN:&Gu$dz7!Z'6 endstream endobj 11 0 obj <>stream +8;Ue`!.sMj^d'0Tc2\D`!+e%oB)~> endstream endobj 12 0 obj [/Indexed/DeviceRGB 255 13 0 R] endobj 13 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <> endobj 14 0 obj [/View/Design] endobj 15 0 obj <>>> endobj 10 0 obj <> endobj 9 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <>stream +%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 16.0 %%AI8_CreatorVersion: 16.0.4 %%For: (Matthias Geering) () %%Title: (UniBas_Logo_EN_Schwarz_RGB_65.eps) %%CreationDate: 04.02.15 13:25 %%Canvassize: 16383 %%BoundingBox: 24 -364 138 -326 %%HiResBoundingBox: 24.7783 -363.5811 137.3154 -326.731 %%DocumentProcessColors: Cyan Magenta Yellow Black %AI5_FileFormat 12.0 %AI12_BuildNumber: 691 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%RGBProcessColor: 0 0 0 ([Passermarken]) %AI3_Cropmarks: 24.7788 -363.5815 138.1646 -326.731 %AI3_TemplateBox: 298.5 -421.5 298.5 -421.5 %AI3_TileBox: -321.5283 -624.6563 461.4717 -65.6563 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 1 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: 19.8091 -318.8091 19.78 2465 1096 2 1 0 50 134 0 0 0 1 1 0 1 1 0 1 %AI5_OpenViewLayers: 3 %%PageOrigin:-8 -817 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 18 0 obj <>stream +%%BoundingBox: 24 -364 138 -326 %%HiResBoundingBox: 24.7783 -363.5811 137.3154 -326.731 %AI7_Thumbnail: 128 44 8 %%BeginData: 6986 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD0DFF7D52FD0CFFA852FD70FF7D52FD0DFF27FD70FF7D52FD0CFF %A827FD66FF7D7DFD08FF7D27FFFF7D7DFD05FF52A8FFFF27FD09FF52A8FD %5BFF7DF8A8FD07FF7D52FFFFA8277DFFFFFF2727FFFFA827FD08FF5227A8 %FD5CFF7DF8A8FD06FF7D27FFFFFFA8F87DFF2727FD04FF27FD07FF52F8A8 %FD5EFF7DF8A8FD05FF7D52FD04FFA87DFF7DFD04FFA827FD06FF5227A8FD %60FF52F8A8FD04FF7D27FD05FFA8FFA8FD05FF27FD05FF52F8A8FD62FF52 %27A8FFFFFF7D52FD04FF2752FF277DFFFFFFA852FD04FF7D27A8FD64FF52 %F8A8FFFF7D52FFFFFF5227A8FF7DF87DFFFFFF27FFFFFF52F8A8FD66FF52 %27A8FF7D52FFFF5227FD04FF7DF87DFFA827FFFF7DF8A8FD68FF5227A8A8 %27FF2727A8FD05FF7DF87DFF27FF7DF8A8FD6AFF522752525227FD08FF7D %277D527D27A8FD62FFA8FFFFFFA8FD05FF527D7D52A8FFA8FFFFFFA8FFFF %FF527DA8527DFFFFFFA8FFFFFFA8FFFFFFA8FD09FFA8FD07FFA8FD0DFFA8 %FD23FFA8FD05FFA8FD0BFF52272727522727275227272752FFFF7D522727 %2752FD052752A8FFA852275227272752272727522752FD09FF27F8FD05FF %A82727FD0BFF7DF852FD21FFA827F8FFFFFFA852FD0BFFFD0BA8FF527DA8 %527DFFFD07A8FF527DA8527DFFFD0BA8FD09FFF8F8A8FD04FFA8F8F8A8FD %0AFF52F827FD21FFA8F8F87DFFFF7D27FD16FF7D2752525227FD08FFA827 %7D527D27A8FD14FF27F8FD05FFA8F8F8FD0CFF7DA8FD22FFA87DFFFFFFF8 %52FD15FF52F8A8A852FF2727FD06FF7DF87DFF27FF7DF8A8FD05FFA8FD0D %FFF8F8A8FD04FFA8F8F8FFFF5252275252A8FFFFFFA8527DFF7D27A8FD04 %FF7D52A8FFA852F82752FFFFFF5252275252A8FFA82727F87DFFFF527DFF %7DF8F8F8527D5252FD05FF5252FFFFFF5252FD04FF5227A8FF7D52FFFF27 %27FD04FFA8F87DFFA827FFFF7D27A8FFFFFFA827A8FD0CFFF8F8FD05FFA8 %F8F8FFA8F8F8275227F852FFFF7DF852FF52F827FD04FF27F8FFA8F8F87D %27F827FFFF27F852F8F827FFF8F8525227FFFFF8F8FF52FD04F8A8F8F87D %FFFFFFA8F827FD04FFF852FFFF7DF8A8FFFF7D27FFFFFF2727FFFF7DF87D %FFFFFF27FFFFFF52F8A8FFA8F852FD0DFFF8F8A8FD04FFA8F8F8A8A8F8F8 %A8FFA827F8A8FF7DF852FFA8F8F8A8FFFFA8F827FF27F8A8FFFF27F87DFF %F8F8A87DF8527DF852FD05FFF8F8A8FF7DF827FFFF52F827FFFFFF52F87D %FD05FFF87DA827A8FFFFFF7D52FD04FF2752A8277DFFFFFFA827FD04FF52 %52FF2752FD0EFFF8F8FD05FFA8F8F8FFA8F8F8FFFFFF52F87DFF7DF852FF %FF27F87DFFFF52F87DFFF8277DA87D52F852FF27F8A8FFA8FF7DF8277DFD %04FF27F8FFFFA8F852FFFFA8F8F8FFFFFFF827FD07FFA8FFA8FD04FF7D27 %FD05FFA8FFA8FD05FF27FD05FFA8FFA8FD0FFFF8F8A8FD04FFA8F8F8FFFF %F8F8A8FFFF52F87DFF7DF852FFFF52F827FFFF27F8FF7DFD07F827FF27F8 %7DFFFFFFA827F8F8F8A8FFFFF8F8A8FF7DF827FFFFFF27F87DFF7DF852FD %06FF7DA8A87DFD04FF7D52FD04FFA87DFF7DFD04FFA827FD05FF7DFF7DA8 %FD0EFF27F8A8FD04FFA8F8F8FFA8F8F8FFFFFF52F852FF7DF852FFFFFFF8 %F8FFA8F852FF7DF827FFFFA8FD04FF27F8A8FD04FFA87D27F8F8FFFFF8F8 %FFFF7DF852FFFFFF7DF852FF52F8A8FD05FF7DF8A8A8F87DFFFFFF7D27FF %FFFFA8F852FF2727FD04FF27FD04FF2727FF5227A8FD0DFF27F852FD04FF %7DF827FFA8F8F8A8FFFF52F87DFF7DF852FFFFFF27F87D52F87DFFA8F8F8 %FD07FFF8F87DFD07FF27F87DFFF8F8A8FF7DF827FFFFFFA8F8F8A8F827FD %05FF7D27A8FFFFFFF87DFFFF7D52FFFFA82752FFFFFF2752FFFFA852FFFF %FF2752FFFFFF5227A8FD0CFFA8F8F87DFFFFA8F8F87DFFA8F8F8FFFFFF52 %F852FF7DF852FFFFFF7DF82727F8FFFFFF27F827FFFFFF527DFF27F8A8FF %FFFFA852FFFF27F8FFFFF8F8FFFF7DF852FD04FF27F827F852FD05FF527D %FD05FFF87DFF7D27FFA82752FD05FFF852FFFF27FFFF2727FD05FF52A8FD %0DFF7DFD06F87DFFFFA8F8F8A8FFFF52F852FF7DF852FD04FFF8F8F87DFD %04FF27F8F827F8F87DFFF8F87DFFFFFF7DFD04F87DFFFFF8F8A8FF7DF827 %FD04FF7DF8F8F8A8FD0DFFF87D7D52A82752FD07FF2752A827A82727FD17 %FF7D52527DFD05FFA87DFFFFFFA8A8A8FFA8A8A8FD04FFA87DFD07FF7D7D %527DA8FFFFA87DFD05FF7D5252A8FFFFFFA87DFFFFFF7DA8FD05FF52F827 %FD0FFF2752522752FD09FF2752525227FD5BFF52F87DFFFFFFFD0D7DA8FF %FD0D7DFFFD0D7DA8FD4DFFA8F8F827FD04FFFD0A52275252FFFF7DFD0A52 %27A8FF7D27FD0C52FD4DFF7DF827FD11FF52527D277DFD09FF52527D277D %FD20FF7D527DFD29FF5252A8FD1CFFA827527D27A8F87DFD07FF2727A827 %A8F852FD1EFF52F8F87DFD06FF52522752527DFD1CFFA8F8F8A8FD1CFF27 %52FF7D52FFA8F8A8FD05FF5227FFFF27FFFFF87DFD1DFF27F8A8FD07FFF8 %F8272727F852FD1CFFF8F8A8FD1BFF2727FFFF7D52FFFFA8F8A8FFFFFF52 %F8FFFFFF27FFFFFFF87DFD1CFFF8F8A8FD07FFF8F8A8FFA852F87DFD1AFF %A8F8F8A8FD1AFF2727FFFFFF7D52FFFFFFA8F8A8FF52F8FFFFFFA827FD04 %FFF87DFD13FFA87D7D7DFFFFFF7D27F87DA8FD06FFF8F8FFFFFFA8F852FD %04FF7D527DA8FFA8FFFFA8527D7DFD04FFA8527DA8FFFFFFF8F8A8FD19FF %2727FD04FF7D27FD04FF7D52FF27FD05FF27FD04FFA8F87DFD10FFA852FD %04F827FF7DFD04F852FD06FFF8F8A8FFFF7DF87DFFFF7DF8F827F8F8F87D %FF7DFD04F8A8FFA827FD04F87DFFA8F8F8A8FD18FF5227FD05FF7D52FD0C %FFA827FD05FFA8F87DFD0FFF52F852FFFF52F852FF7D27F87DA8FD06FF27 %F8FFFFA8F852FFFFA8F8F8A8FFFFF8F87DFFF8F8A8FF7DFFFF52F87DFFFF %F8F8A8FFF8F8A8FD17FF2727FD06FF7D27FD04FF5252FFF8A8FD04FF27FD %06FFA8F87DFD0EFFF8F8A8FFFFFFF8F8A8FFF8F8A8FD07FFF8F8A8FF27F8 %52FFFF52F87DFFFFFF52F87DA8F8F8A8FFFFFFA8F827FFFFFF52F87DFFF8 %F8A8FD16FF5227FD07FF7D52FFFFFF7DF8FFFF7DF8A8FFFFA827FD07FFA8 %F87DFD0CFF7DF827FD04FF27F8A8FF27F8FD08FF27F8A8FF7DF8F852FF27 %F87DFFFFFF52F87DFF27F8F852A8FF7DF8F827F827F8F852FFF8F8A8FD15 %FF5227FD08FF7D27FFFF7DF8A8FFFFFF7DF8FFFFFF27FD08FFA8F8A8FD0B %FF7DF827FD04FF27F87DFFF8F8A8FD07FFF8F8A8FFFF7DF8F8A827F8A8FF %FFFF52F87DFFA827F8F8F8A87DF827527D527D52A8FFF8F8A8FD15FFA8FD %09FF7D52FFFFA8FD06FFA8FFFFA852FD0AFFA8FD0BFFA8F8F8FD04FF27F8 %A8FF27F8FD08FF27F8FD04FFF8F8FF27F87DFFFFFF52F87DFFFFFFA852F8 %7D7DF827FD07FFF8F8A8FD1FFF7D52FD0DFF27FD17FFF8F87DFFFFA8F827 %FFFFF8F8A8FD07FFF8F8A8FFFF7DF827FF7DF827A8FFFF52F87DFFA8FFFF %7DF852FFF8F87DFFFFFF7DA8FFF8F8A8FD1FFF7D52FD0CFFA827FD17FFA8 %F8F87D7DF8F87DFFFF27F8A8FD07FFF8F8525252F827A8FFFF52F8275252 %F8F87DFFF8527D27F8A8FF7DF8F8527D52F87DFFF8F8A8FD1FFFA852FD0D %FF52FD18FFA827F8F8277DFFFFFF2727A8FD07FF2727F8272752A8FD04FF %7D2727F82727A8FF52F8F8F8A8FFFFFFA827F8F82752FFA85227A8FD11FF %FF %%EndData endstream endobj 19 0 obj <>stream +HOޕV +RIf~'aL!y^g^g>{ڽ$M<؎3޳V7,y\|K$ Bf7 ++;;P˳'Q`x~GC{x^!>̦H2M\m=-0BƲ٣^h&geovay=Pu<=j龧H^x/׶|kjIbtNa9eU#Ītb^V[E{ =LԉLՉIV>B Z3IE 3ۓ ۹|<9YvJKW &Et1˞ Ȃ\x#?z/Z^W55&$*{hZp5~W729 Cs z[?OyUw]oneܳ~,pMc+ovn}I'z mu$dzAPPGEJ*CYEIw&^S|Fa=()9Wtj΁mkƁ[3đQ6 >ʨ7pU:A4ʹM90A` +.uhZ-[xAy +9^5U` ԯO&d[dsa ;5*@ +I/yEdbXlBkkOkq)# mlala*\ :9=9Qǵ\Ø" - :H&ЎCCדCsjjm"dNPl= $qqmkךq7ibAlqZE  kD5ǵp\kׄTlBVh QsZlZwրM` t`c@ 9ć60e\)Yfkk[5֘kXm\s;eZ9t9tm |` ZjxsrzrBUX:3 sXth/BYsٶutXsX{XkMGO651*2psAYlp8mKji#L@`SM4(]ѐK@ѶhGQjviwq"!ퟄ4 MI5"aX{-s{pTdu'w sq]fx ~6G[;nXjLoݹDcuxr%j^FE$QKe6*AGÑoPtvod05^jgS^wGkK.c/9䫖#ګަwI4LCsY\z(粸cDyLaZL1Y: Ĩ a8V@Qu_|n"/?N{ת;Zl#Gꢍ=k7^gV^@uڡsÕKďp/K!3ĐF1Chkh!io(7S2 *q$/ebVǤMG86 "ͮ"n ȼJtBYb2yk> b{YuF &r2Kգv"(ّȂk+ͬq R+E,_f:07`V,l(#NV_af_f]d 8pd)C}~WI +3<5Dל&L]l\}|yPyybst1:ZkP(8QG0Lt3 ev4L>}~iݭo U}x%0&fk?Uܶnytڱ/"wr%q։]u;md PC;s\./I$Ȝ$7owK]SؓT>\,S@%_&UꚘ\a]{v9Q$J[!3B#c y|c*q=̈ó|\vhgu?MtI_׉LU ~J jF ?8~>c4$A]z20YCaQr~qbJgbhT~yBaL[k߽.@H*U?p7~2Pf8ɣu&n֙"tjS\iY8zahGU2Z?wѬ6&=>9Agy0' 8AF?qJ{]߸)q.|6>K6?ΙsV>sX9-D&ہ`q`-/v0"S:y8R:KB9茄GWGvaJr?.۵F-\ҩT<f9>i{tGq?U1Ïox_+@O4FY]Lts=ɾ'`4|:@܊TmBQc=-;BM ,3 =GXfn(*~Y ŒfMŴ~d_BdA 4M@7Xi"'#rz7tEx/R$J"_A8(1HubNT%* GxFTDÙ{&2ㆽAoRA=ЬhVMХ$y;nJo4Q(Ј-F}3Jgȳ,2o~tw-"rC-yUD5Ni4堋7 :|:@<Z-4T—W}>W͈Nbt^<`ȡaAq oZIl HL~wUcdA]bLkPjU b 'は.Gc%"nli~䫐JKqؑ\Săvjy[\-HkjIb: vH-mj<#en%2\[IZ 8rJn.]=uGp!>iRT~KK<簂E -P,(#-pX|՚±o5S~D(8t#b=dŅE{hu`on%pJOYנl3xM j[Rfe56~U,&ʗĀє3^}'f?d8on>ҏ]ðhsR^S]RW +ffm.L(sRA¬0z+"] +&K`Q6`Ԅu:MiTPQ\w"槼˅>30zWHYa6BWYZsi4BP:A[4"!$l{$ȘvMs`tRӥuKqhؔ}kC;\̉;6_lL ƘoTc}6"Fb7%۪8'2ʲQ\-КKl!IӇ)_uNHXz'T)0]-AE8SCzMYt羢( KhzmBE}gS(rr9F'#:Ĺ8:jΆ׎jDfTC)OW s0Za)ì.seQ ߐM'=b*h]Wkf0Nbav7[] &:fe~)B:b%;NOeh+fdrM{ak{uWx;uII7cTZ:nj鑰pEl64Цh7uߓyNHN?_ܳuL_\/Ȋ7*zi6ɌՃp +8YuHy3uPOgj:/PLO}d ?l?rLBs6.QtGjrF璨G"'S-K/+# V3Jۜʻa}Q=ŪgtytHkn# +tƈH>[pYc/*rkxRJ=[lpq_/+_V!{Uۇq^TR 7I>esOgDžn;J8_2Y&x,*u9#CV:`jm+V''>Ҍ*fdgy9F*qr/5J|BĆPx= 3;ۚ*9o:KP=-9OLb}TT$Tj8OvzD?Z;:s~ြӱ +--$o >r-΅϶m{# b(zz\vrٷ*t]+ V<-,oR {/$?^E1pRf?D2ơTg:>~]|Lݵkmڟ*VG'Ȃ7۳+5{|ŧ8e7Uu2S[:M:;vLz;y Uy|Y2 +gcTb@ 4:11ʍJF?u^#2E AP ;摮b.ӱLF[Q4 n8sK JB{+ݔY߱7^+4!0a92=r|&/72ڈ ho$*,g0ɭ#^u2_:Fc'p̧i?W +QL16(O7_CeBS(M_k@f}0-e~ke@2ݚG۶ 9;iW{VƱ1h +0WE0RGtmӸn-iPGC=CNSUNC尐+SX;u*X~5khhQ75sBK\-//:H| A[S8ciҵ-|]#*(#jNiXXzd0t{wy5xW,G`XS#uGX9D󱎭-an"`z(PSVrn$r޾8t Z* +"/iz9ѳA6zn~Ju +<`M9lvgWWu3}]Fޫ^'bM~X k-?/Iq\upV6CPGad15$`dUC,i,:A4duؚzYa.[sD)Խ+>b.oa\IOAO +rЎ:}qN !/)TIJpD=.?3jy2awl*Uy 2 Uinf'-RdpȈC%)V{K})0 +4"RhtS?͍"LUѻD|MhRWʐ7>>oKFvrkE4 +y^+%vqbe\˽RQaٷiGaWdr=,l1 )6ṕw~/iʅݸ].ra1FrqEi"ƅMƝ;m6rcHY[/GP4Vwl/.+Tz.^d"rh7d< G%*]'GhU>vO!RB&J]FwD@Ls<:<8nYF#^Qqy+spC )!6gpIJ|1'}BW}'į + qpÃt _Un{+KT[#`ߜ~[71>p4E!rEҸD&v]> d{Tl{#cTh/! +hPUwˬEt>(gu'(^ɍ/n1qN K Aо7g[|${.7epd(,We:Y¬ݴ//ٙ1!d\ȏA-@݆ DC*DJ'0vws 6+>q_ɷc}ͮi2 [ˉB  +Z$xg&iܢH'QvYs/_^-{gyK@#6 sHٛ;5~C+yߐп]>)$uZ`A_N6^ G6Knȩrb^rZm6fyI [+< i'>SlLZvOKhd6yϠ_(c½sBd!՞Hc褔5)q\͐J5\~J7\0 "ȶM[^VZ,s)\jJ\bB_CqاbSLeR;i-FPո(vRU' 0tϤXʎ^PBnˊ#ZJc'b|(_^ ڰ q8Qб^H VFTxMNQbH}a!Mu(FX9s +ph5$H8 +.f+hf߉z[X XORLyҁBy e\g@A- 朾Ju]g WT@CJVquY$Z3P8=mFڃΧ!<$>le m\ܷ}[A=O_ NKɝ?7PGt +%֖mIG""ֈj9tF+)P +|ysZNC)MpS4AI12mbD}5=X:Ј-Y(hGq*ט%wy-[PhDB+vAEb.'FB۫t@1:OVI8$d += d:#BA~KWph+L +56%*/ױ{ECö-P@QoX$uŸm +}<>o9M :,կ +upNiա"csOVRX"ŇKf{Lp@XuW*X4wjQi4B!TWO=(Pa8d(mbf?o@:4Do/LIХk2WuE S[:?hy +5ɝZ/k$L:UĮved"av)C5ƺ[Su5;.]3,@Z]E['jQ,bksuLdWRۮy8dĕby.lDpuOΊASr#A@Z7l[n5pFZl{G+F~*k +JC7ZK̦ XgB}9|X=֬9Һ+Δwgt{H +y[X^89L/zЮIXm=ٽTW{7+{"ͷrM]nojxVDu^|Z?<قay cZlhx @w" +iڭH`Un:h&sphGB!f,1V妃G +0BCm;Fzm.(ʦC Z䕧K )W#$pEBA0u( K!4TP<$:PeС7a噢c2~+DrƧθoFl{{VwZȂ[^mݩs+ӺT?hœ5l?Wp4\GmԮ|q8f<ŔN|n!{,QO1CT?eu`νlCcO]p=HASzΕcyЅZyt1R򜬅wgx?̥vקCtFgK'P̘P*\ th4/.Rb9P8~.|nj +N~ySMaMLH̨ y,aO˚?`{4D^?xotLgeH\Btacof~Sw_Rj%b~]b~X%'AVl";RULI9 +G]Q-f+N3 ]yLٮ̾:)3$'T67eIc%M)`i +r?MtgqDkWt̖ɝmopDV, Hr' ֓O1 ;zmC/G0y&M m!$P @&ܐl˒Бert/1vvޤCJ00Rr$ؖ%Te]8@a5=rCVPoL;;*#*o KI2)빪u!PBk8E5^ywq-j%`9)lžK4.{t՞Ļ5 hw  OͶ©,peZSWOU +Mg@1D4Osٵ߽!]N%ì *qx#,J7NXQ$N𻇕qYnyDp~$"'ߞ4bܠ/- P͕aP`(MgӌV+Y_pWLd4k`4k h{Gh\D`8Mh0FQ}-0QL_ph6h6Jrg_4LMGwwO)e'wfҁ +<'{L޷ysO)iHS5d`F L(0d Yl K3CD)(hj 4?Zp4Qѱ, +Sr ! C?}/BT_ {fIgVh7{-4LkxHn,pz!AZ]1'g[#q$^W 5TB0׋אp +aS}=U!ڹ?-0Y*F¶ҮoP? ȑ.&E7}u'_eA $kP?`yn#&UH \?,7RP=!4] cxӋ,,TZb|`W0XfAs`;o`jk>);9ĸ:$'&Qoa:;Fl˹6t{*u ~ZeɿN"m;Q仵vlk=a$:kEM);,'*KŪIKh}9ډV5<}d7Z/ߢ 7^ 75N\pfU +N&b/G >Z:|uλWXܝ=>sgqڻWT~V<TnG7£5ځiop?Kk|azvZs rn^>pUP-m{7gg1@5_ ]Y0IN$.4HQ|鱫`+[LmW.PU%)9xHzX[f49ڡ>7 +}]i+Fm9$_1% CS^klts?O_3ܺ 瓢 ^t6u/`"t}+ n[c%^^ }+7j5i +qF"u_xi=d:AC.ǹZ +Ԋ5 G L =sfЖf--SzI!9PɋU *ɞMF3լN/H1`Y[č, i慲y,PwȻ'"=TB[ra KP އjTgpI2 p}_srNf@^EqY +ER=k>siG혣\2H饄~;hʉ(~IrM1JcWv ];F$n5 CT- +ҜszAI}Ӛe{ʍ&ίz0W05'se`tchoֲiI(xɣϵm]Jc4EC6C " 0Yr[Ɵ;%4u|>fك/A(M'A0LgrY5&%J9,V/om=܌05ۡR. ^J#떨#RF ɳc3iJ<ҷX+5B";fڈWYJROE +W@4ARb NK>)`b>d;>URՖ}rX^_;/]^I<cdǺwsNŗRRq)$05lC5^/$XLS 6LW)FQZJV㝞us_U®VJR ۦg*`OOy5^[g.aK1cbPo07Nvy\=*ber`i,a +㍆K43KQ3(*\d rw4`?R1ˁ6Tx7 a *=%@.Ƀn4;Um« 1`iі~wrgLD̑x%H9u_!^o>@00t}N¨ C0PqE颵["yr >RJ||PSА$oZ .tQ|F~؉R:R8(aS9*e` >:&@2iKH`;>auC/5 A2 +_ڡSO]>,7F*]K\ OCH @Tp$Ȣ edy۝?X˩:Ukv)eeOJ$ 4MChe2m1bsPW.#h0P$_Ϯ\ISQ~]rTmz|@@c1~\ef%7b}w%e $*?aCBaz{^°<$0Q4v& Q&P9Sx;aAIj,1Du&Ce#-t`2tn~?}wz9 +vV/ ߝ|̍ZBs:[y},R\qwT3.>W;*ka埆 [wdNS $N.TG FQп2OJ + օSnI>U:H,y'WPYO Ԝ&p=j|+"8e*goĩ%^Jg?SF[ssY gh,b\rlĆw>s/$kvc2S++W'[yv$ N2$0UPG̬ Ԝ1FkTԧ9ƣ7#FWB{c2Rم,ɞ륦%#e ̧Wmg^5a>?*+٠H!c#̚> +e +T|/FVd7DJR +#.\z!Gк^IiHhqsEѺNrAk}zekZW遏|sYP4b!%RxyOSWvtƔ>C܆=z6tl{xぼ^=M_}J[u&ԓ}%YrgiD"6-6'` 5 `-Xp<wB ,3#t"]@8FΕtEwJBȻӃG]K\uORe}%10_V_s+xWxxhl:r(vnnJxO S˦b-Y-3hxϢ!E@X}2hwut&{9sKCu4 {n !jg~WÎo? r:$3ٗ7U,c\S]i3%0xz&?Vq(AO)]Fq]T{pdz%ƼeN@DƲfG(d }&9ˊŇ/MԷd<(D4Wd%5_ċvR*M1jT +D囀Oh p#`ѐ"1a72m1rscP~ї(L!`xAYfM9u"ө`Zbdtr&nZqB'pu +r j,7״.=Ni?۩;8! !qs:D$t-DV,xXNa+4='NZq¹pj1ోS=;o@h3ܰwzzݼ;Uվf872pp~_Y}wj}CbبhM9Ztڿd8YE@|"OFq kLL_b..qogJxPGchd~PWZL\%$H)@(D('RNf̜9c R"'Kk6MAl^邐;bH)r5<6ҩԽOxZ+]}xLfǐ(oT.*$l*3/IjKHd7}eWhRaQds$Wz M w\ϵ-BE:+;Ϧ0ZOLͤ0Jr<9J#Vt}J(%KV6"|yozcj?U +e7*t8\im$"6(Ɓ̫iDŅ;3ܛ”w0V9#>ӟ1fS#k& `7w6ŹCx׏YaoYvx1yP\ bv|9uzVn8oaB>Y@"[:,P..Z|a*>ٽCj-6|Rt 8^+[B)J !5otk ldݛ(geuOٍ=ֹjt(D625R]_e 3w/P;H2`x"<b P4Ssؐ`.{A1!zߕ)!$w +DuL *M Jh_W.~ѕt;tp傡A~,B=R#hIR3fY1D_'jR3! .Ω)/6ZSvcv*dJPs0rM.A/Fu%+-̬Oȡ8g#cYB'ݲ$[jvn& +'YDleäc$ʋ-C_geS=fIj]:-ٲ5.JH}{fsnNqKbd ٙl!Lo2zgP#WݱX-+ٻrLXIEaԣz,[mwz z mޯ{ ޻a=d=#E +_cPAK>83vk$6,:,'a`Vɀhn1(kzAր29Č.Kf*OT;YJ@ES6s,/M< x0]z`'^vWM.`Yyn >֨AEQ(8ch8? +;>-v@rg B!/ 4 1 -vh <x} {.pC}hU1/=y61 ~i`Ǐ!`~-+ (cG޶+HC'{Matp}%ԩ~X3E̢яXձ;zlݯ /6@M}oȖNQJsAC8㑺 Pp(ã%ɲO!ͭ@yȑ L6즧_mG d0fC1&v H1ضew- R ݅Lva6?h I{^hawYƆ1TW5;gf)0Fz3iXQYn~l R^̔aT6Ðk f1a Ti{e*Q̄SYfE5fa2G8%riXiU) p׾ NPH7`{ $<~qy~ʁߢoXI?L|.'L4vwkՕ8")(q&/imҫt=m>a+ I҄4 HmM|lљewY!:=5\S;=/'q¢4l} +.#ܞN+쮭jn皇c+u;5,C.8'< +QX qu*$̠NcbNx?vߓd/s|zc|n|E~Ja/3+XָPհ q jm>NbP7 +Sz!ǸʂExjTdSݷB47j<..l TPFq|!!A]*?rب6ؗ+dRٵI[L9q;4}ӟJ|IIZj+'W] в,[Z,jn6@[(G[4auf?eG$LG5h=e#Ut4P*WrW;nN:EpS)_8 +MXĢvM`&Ծ Sߙuߔeyꌠ#OٌLb:-ŕ_=ed9aТ6$2V:9J/h¢ eL $(5Bkn<Ȣ$! B7rAkG@ m3kAɞwOx ccYbɃYȧn#Mqj9|z*S9-QPƒ"!؆Qq8+j/BdB)~8 BlY݈Tpfbeo>stream +HWZZ܃ )B Jy_ߵ;z|$k^3f"8IȬqyfZ9%c\ ?ԙl +Lp +!z $9 :w"1<| S!~J%fkh @PğFC1< ( ~AaYbG'I +&@Pz!aF(fJY}P5Ӧi bnB|,/} t.M =^#)β.sqq[ *ޘOfV|a7IԮh]FC25r]޸^@WVo \ vҢ%%@@e`S!d_4IthA/\e^_+R] -pԱD̅ߋm\(8z/Ee*`H4Oن<m7 P^1w@&zj5Թz.{ Ҁ|Ӌ +Ҧ|9at]q+YfMh%/ɳZl%lMUjaXزy =e_^%j$;̔P[,0"qi ʤ,ϭ^bjb1bf-!-N*o<4̛rIn,}J2Y.}5W'P;j&rŒ~ziR(958G2XݟcՁXU_jVH|^X%Z[,,~Jaj ⋯4KAoZDcP1PLxՑq=$ n22A$ "C@uL1S-2TiV?[V[CaSp<5sqֽ4 +2;Gg5 &IY5Z۞C<55utr3:] ^ *[d/>bR6B!m׉h,EQLeurw5_vXgb*_"z83Iԑ rk1+lPׇ\1^^NjZxRg2ޒ+>ɍCSJW$m9j-N +I_m5 + ]Xd뵛BB^u9EPśܢOIV UFI7]dy%"V͵4۩ZMj#sOORz[K'Q١RZLǴu0ڢ`eF%cM ]^ O"5p MWGBSn yw$m Ja(;,+̯ >x@P?m2A}6 >xgd@で^<\4s5.SA|2"Us?|_'ިx'-m1BjIM'UiiĎXK LҸZzh)v?4Bx2@jZj ^ZxH e{vy[rLVėA0.IбcҽFC Dw:vo]œH*1-͹E0# lj`PnQpy0&οcpA)c}cϺ8^Ao8ث]˕ u`x̱ce7p|)~p._nק7.Wk1GO^p|㟋VYm7̭R4 mB wgN.{ǹrr"?31ߓ|xNVĈqu)2/DYd6xnd? X@1{$w[Z.A,59Y=,W}hS|^k{,*ipyǭF*v*(V3_gfG#]#sYՖr\gl?-|Tb40:rc7('@);̝Qv|Kfkd`h35Eӳ6q{VwI렇[M] 5=<66I8_9DvxJt>)l; hNξ5fr9{4o GwW/RKn +a9Mh>3榽IQ\Ma* CgX3zk0\  -  +XAtCXp` +5 P1a(J +DkE%В iɣ >~Cgfp" HEci&TgAA#*53lz^<| L"FRĥf\By;JAP T`OXB@*ō7a=""jJbPXhJ8"jgH$DX3p!NE\*/ɛ2[{IB́RQKEa#@3A6ei;A[j.3YYIsag–SB} L %.z,$~G*P6jRZ$ <Ύ_r~2ai7\HX#!B*ek Ґuf :-]eD9(~3Ȃsai-$R<.#E,#-<`SWn`?#B{DR~Yq'JGfPm U 3 -Z@…00'Y F…tW;rm9[ฃ)~YS;@RH;#A0~5Ab\!}2L/ҜHA8dPE`!mCHUD,DsDnq!7к}US/Ym" +H$W͹mb[l\ֵdґ Ϯ5KAqq& ]{?!w 2o}ɂ6gZYaڙPP]mTEڷ% +x =ۍZjCSaC - y==|C>J%Ot!#XmQ?MZ1KJ4~Egm֞tbtkHbcM{!Boϙc]s 5 +C@Jy KWݫw}bܕΜ0PZU6mBƍd90$QϛѵX`e :va-#xxچ op8೅S!qOkrti `D f|\ՍDfaC!v2>7ON-IJ"qi|Rہ|$um~xrRoUVOmqގ_dfTp\ݓZUwik22= =TMׄ'Gƶq1( JDZlJ ; GC b5], SA*2VZƺ#lac 3̟رYq\ᕥq3D4zr㥺ek=d{-b=N5Bd}lYzͦ4M/#Ğ}` =SwuM?D)ňxtHlR6-+ Vy\q0p)xHﳼBzWw |ݟ/~ ^GQCr_&1{ѡ4Tȅ$-f7ˁiKgA:|QBJ6@JXA_ Z**ʢ)>$X۹ +u; o%#:]3,+Z )}uP "Z6<#BtcgnNg`T|f,#;]@y~gޠT[fnί_COy?o{س<^ucbp7@tCl:<]tB5$~1{ʠcgֱu+/n'Og!m4^qXBs |4Z݁˃.0 r:Vn +C'\.eeCo: +ګp7G)"mv6}Uf34I/,Hz4$nc *l0-wJsvh `qi=iա*HBKQM jF[.ju L%<)X"p ) #V!#l@{5ŒB5| aaJ8 +')\;^J;5%NiQOгcCu7ꢐbo$xj(\`oB0 Xx6[KAYqn[BէM +@&á(AރvHj +w0ݠ5T(˧@7b+.Tutߞ2Be; 9@7pF _a@cvApmq3l(j]PL`M3#ѧ$X_ %~r +]&#-Ux=&=6z}ITH #R F ۄ"'bxƃKTߝ[] uOe +bf˛"9hےx6fG5 hn}@/&KTHll裾LZʋ`FVekP}lfAw$hqG^S#J>FΩ P Ehdz{yf} D6z8Au lD*Q>mPJ:vL7Y` VOGGnCU.Cl\l(܇G=[e{;' м.*}`ģ]-;E ?H`ҩwZFBj 5Ac'"+*OfaN|FF._*c=T2qתe9\ C8}zP +ɓeR.uu9Bi*:`D`><}C@yBHi9\TUm@.uVe!NPM: +;l3>yBn굷~,Z -0jFQɕV9g@QH>h:He$f^joEMns~!0 \&W#]a&Dm  S<ݶU9obo +_ vZٵ!^6E>U+o1/-` bQ>h(qb6aY_(`&fKg"l :M%{}!fF N$hZ{GdSPI0S$hN\x.rָceƂ xW=:+DB &]}UhA"z9e6?D +5H-tpC9|ݪYį6zhS*w +~uP<{cWܻbn@J.Ks<]!j&%SZx>6n5,sH_kQ ofҦi}?ĭl#d́j(ubZܑ&C] +RE$Qh_bPb?9NDJ٦+`jTs:yj-D {dFNSUn2Q Ulx%&Q8\dZAڝy g~vRxrcub"BQLf"M񅂼XQZǣTKpU+85Z*8t%͕&5Xq޻Pot g[2a;$IƘ/0 ESK]k.nZ]ō0O74q&ǯFHVvD%x0$&G1`oUQ?*!Iऱ$)e +YrA B8ԎfHevMd ֊P1 {1Bcޗ@^g4D E$F3YD 96BĚA1uFHVH탼fy1;MC$v'dhb1aа!V5 jU9VZͱ Rޖ\g̊8H@mtqI B*$!(vHM:?sTJetoǝP0t&^*7di#<Bx2ԁ1$!J dÖ5)NHvoC6wnYs}֜c#Sl8)4 +(ʝR٦8L-Svr^N-SZT)G,RF69EH9r#G!z;x˂w(wl娥z}jj#"OP,` ;aoe꣗3vpܷȹw\[ N(m!e)"e{ +CO׮A!O^&b sعgY6Z|κ bޱa 3&"nwΛi_4͇%wyH-h%hߣkP,';4 b)Y\;]oW/>oO<ۇ|_?|㏟_??>|'oB endstream endobj 22 0 obj <>stream +HW]۸C$EԠ(젙dɦhY2d9̯,kl}̯K{!Owk/ 'Oc?\T^0髋CڬophVLJ>Ϭn{>@fl->~]X?|gZ+?\ւɋz&WLxJĮ>ԇChDc*2S>Dg W%Yc\woy*?]xSoRm GjZ w1y.bv{k(pWiʟ ӺwW;qzayNZ.ֆ4]S3yҬjS7['18kc-R?LJ<`I* ++FUL5~ٙCc?^/zx*%c-6#vBLnm*_5yϥvDq5' ^mCkʰc7h*8%*d'HVܜnƓ)ˡ6%c64s/h?+$_8|06o9V7wZv߹@s,#~wj~[mhz6uzyc&|1xQ?lm:;Cfi# <?SDmmwwآ>ض۰6a}mCHh|w5Lp̏[4ַ:,~P=>@l9sݶu;v/|6{C C>6uom?31 Qn- ^vm_jZz!-[q?mlz_w5?ɺO}vd[ܷဇ妁Fc=?N`?' gȭD:  Dt9!wLD|!KQ^?K9_S 4eOk`^SxMj:_pD'>e~FvI?AJr2 \/u\ݹo{{OޡwsGnN# Lfي!ry_j.+j>ugr~^ʏ !iX:F)*PP7jwZ[0IZ^ r=&hi$.ygؕPa6? ^hpH\,`^:b![ vΡph;,b%VYU'K0"S˱Jꩊ:se$,XFic`  E'O"ECcP1&[Wq2zK 슌4'E;`pHx + V0('ԯb7efs~dždh=AޱjNPx+ 6@##͑HK$ӯRJDE=KKw#N٭" \3 `ɘL\1*d\`ɠ/3\>}jl;t rdzfs?/ј@b gc -DUZм~,H7Dc̳{)|/BCX1zƾ '/P$k='jRIX,{4=oӬ?wxq' /o|=|oo"۾[>r|_N?/zl]Ĵ|ĒvB8eڂ*VfӻKŭUw;}'hsK? .B ڧe\/SBᚵ*HhFFl1D P<i#Ƃz&<KZQTF36WMt6s+"MH:mC;)/ %$p] y.8ˀUf$QVV$ *(kp@M(QfROeR]mu)ް H\DXʏ _P@5xP:"2ED21sMR"P!:xTď֨z%0Zj)/*Ii*cQB658hцwWrZpฌ{.Bpm#+RMٙP+s6d 5g\YkNo+ڛxw}KmN{$[[P'tMe͸IJs@[SMٍVՓZFxܰػzboseSPXBz鎝V[/m +6eEs|ͽ>OwC栐 HQcr>"LG'acYy6m' Hl7zt_[΅&Ns+'33T`S(p*A158EHCH,7}, + cc@m5\C3Lm=P41tάLfP ޥ0 s"׋]}cX <4 qG} ~@׸AumYxl}gk^om;[~Gc}N8]Q&Q zqE=D;CVd%ԑGUPGnw2Y("RU͉Dw<ўOT/J̆(r|j5EJ|I햡nculZ%MX`Q{{+ 4VViS%-,~c/ ͸mN z37Άv/6M,Q7 '&tz=5\sx'zIbD'=NݽLܰd=.+6EZ­Jգ,>&)mf7,eԮDnVH"GvBz>-5"r߀+1z_98Ka;;?R^,[`L:e"sa7텪rՉ9ϓo/[iTJtRgf +J6-9L)I;fV$;!.Llem̴K͒ave#qᮔ-I3N#&xzzyH^Oɷrsq+YO"Jg)p/;|L913';dؠ5 `Xcg&sOL m'i ~GܗS}3hߡ$$2n̵;j'+ٗjm+DL*mA a TDdȆډ =04"4X ȆwgumMrAa6,膣!ٰ^JߝW3^lPN +LBݼhHD6l=917/PD@ +!=b>*>̓8P6 ;k5f53% :Akbk{63k0])hulH͚|0R$AN >d48 lTeDЙSdx2d>ȄqA `.dNIsI?TZ_:7 I|0L/VK n"pӀ5 Ȁ%ϒvꛫo(""3,DÃ%ȺHZO2-XQό&TwA'PC>OLaV҃x#S_x!r51Cay + ȂTfma>H@2.}BY#NVBH΅WQ_. .À|*v.q$.fm(-x lu!u3Wy=`zۻ^aXԲ ^l:֍;t|Hq JUU QL]-?C;Y6~݋`辂~31$Č}='r+tg%4 +XuaB_U?a'~h-q5նO`m 5ߡ + +0(bQ"%` Oz]Y.mɺ>"I5RڱThQp`(*]C?X0FzT!Wdٌ~UNŘAf7k H!IYf\%j8U.y!6C102gp*q;-\7b"cBo,l 6sfABjbUlxi}r?ϣůw!#{jK0Mn#Y1cŤr밶nu/'ո,h7g_C.'e[Hx +3$;y ׫ǃ닼t! }da!/H&01Du41_ ;]Z((sb&AZ6.B)Q J?;}fgk&,\"#h*` @BxhOg&b!'PYB`aؿ` +[d=npp?rox>;?Yno09.>vEzCQom?; om?;eӇ]Z`!yE)*TٴQXXɮ|M}NdpawbU$xxGed1VfcftvRI +UU [وI^F3 g-Jb~9C^ig5Ir+wRӝq=2,tl ΌqB.! f:PX@Ӑb#1I[9}0J FA4CaZu- 3 Τŝ24"6j6RsKU)\RNV}^wjK}svK6|]/_nx+C G+ּgo/ШG3-Ff=nyx,o.p|yj??M6%˨h%]$My`Һ84'rhj0YI^9,W>!W3igː>-';,E+ȽO;ַK<#}IY^}0@ z89y=!N__0YxgsTۈ[dFʻ#1[ +|3txa[l%S5?!}0p7! ^^yAUb7ӫVOq'L'H +"cN̈́p "rJtGHms =!.Q73.r,m =󺬲ּnk kXe,Ocb5[2`ʧIKZSLrR t-upSc%㦸^ʲ\r|-w7uÝÖ6|w۶m]7> +VPOPpm|]V-;pt D4|"E_SeQ #1g;JnRc;!&7e@d0c`(J<[!:*a|440Χ%"R6߸j^ӥ[ƛ Hq=6| 6eH~8Q 4dex/ f=j1koLC*uy %eQ$ 0Ě~|Ԧ6rl!o)6U+CnAhӧr XtיuLFagz ^Bޢi+FrbaQ*PVDV3T^Wl&Uti Pb7 |TS?6_y>C7S5.{YqSUtڼpK[ɛ:T=Nzr WT!+<-v󬊩7C%5 +b2A74hC7tӚZ;U1Q6 aZSqy=pn:40 :d]\Fuf :D[]Ly~SKب{d/CCD.D v.'.8&U}Iƿp>pg42]Z 8 ,l2f'uX9+3sI1Z&Jwй:y|ケ})c>.}x]0T[Wi}^^/~}w~cǟ孿_y 'u.7 +ҌIRwjk-\nSu^S5 +=ܐ8];d&:+k>5)4G(;!{|iC *h/Ƥ7!_wxS6 kfw{{VJD+7Ks)[77ܒ|CڛQnSrMo4M$,X#ABEof+JޖY|Vlq:i} 6F穳f[q!zC'E?HQg4!wՁ̊*Kь/<>sҏ _ +_oprn?ycM$U;8Kny{&lƀcjhc+p4?F]ڗPAi)j@@mx,܂k< qK`-3tuHݚ' APS 22b} 񄤚͐6OboFO 7WM,+gNWZ1, wtgbSB=iv `6r "M[ `#l{`L`bgwB9s9' aM< FI94P9`>Ru~_߷>HE\yq+ďfuVU[y彷pCGN6 fay6+'f";S6!\ϲ1g>fK̿0?_`0-vNpZy]Aq0per,dqsX*zbE!(4T1O,Tec٬ፂI^^Ys!MrדZbX^IYjLi՚۠jTgZ: ͔4#JKdYE'cA*͵+t`}"OJ(xa9r +jr蛨`h4` CMEPUEJ2(*(RtP%=U> R^(X(%2ڰV?BZny+ f _YSqѲU/_~U"WnD~L|QIU%1;y +%`f퍃= )UI $*>Nwo>-o/wO=߿^/ӧ7~͗Sr"W_>Y=R=0>}8pD~p*I-Z\k1-F3Q;z}G2\2M*:`oۅ:Rֺʵ[p|p8 ,澠|j W;7(:\F}pZ +r۵ӂpyx)TNӆ)L70rt Q x#]ӶvZ7H0qro|G߯Z#Abut6 D߀^pp?/xލnYFnoAH#`oEξk 5ֿ2u xyh`?YQPu$w.2NVҺA;/_T8&w#7+^7_9-8U͛_9vvpJt/FnWN1\;}R=/FnNa&c;8m1>8 ؍܀/v:kv +8sNݍ܀Ϝ~O./Z`®nõ=S1"Pu7f)~s 'A,ꚤh%jha&֩يiV3=<@X`AU, gOwޚI1˖s%ÀJ㬶-Q.z.C цPwXFBo[WinfrC) h !uX,eY7x|<ߗYɄ =N=eogcWrz]NR F!wi،̸j/ fn'Ia"Q'xr:$-hmF'\饹<.8A x +6S'hWT 6&6}.:a؝!\خU'2yA4G9%y,-4h4}Uqrp'*BF%r9@;u|^V@Ŧ*uYeBV490тfkf0+5itCFa!\LjiM"+:}9GjԉJ#-IyFAo%ZࡇE OuR.Ѷ\t*E# V@{!+yUoI2 Msl^D8ӂf`Bj<BȒfdpjˌ, +5 +$ +[kΌCup|kLӘKxU4oNJ9E}̑QCu eLBy9k/ ɾ2ܟ=o,&:0|J/t{^-9EtW v`*,wYsDJnDyqHu/CשE5ZuߓKȧ"RFV0ݬx4 v)NnNG`ʾ28ڼnE/F#q`-UhtcScA5D[`1g Nt7R\{&q۽EH4^9JxwK +w)a a8g2u_$hj>LID*hDČm$7@ D]%)h2;2CVVa蔹,(:A頠&dr"ZW &@࣒i"{ؐA2ά&|ݰo'j:)Wh .6Ys- +3ٜao%r|?`x!>kJlGhU)MR MAJ1հ 砀r$nxAE$AƓ:O*|_K/G6^¸\7+(Ҳ,*$ڒjme yNƠ}eqb$RieM""!<˯Pk EF6X-XJo+nP,;W(7?Vop`,7b[Oq^ +E&'}1._.`R:ݴ 3)aATe\+߉8XjgV?&j pPD! { Jkzu1YvOahϧ^2nZZ + +P1S-{/d(OˎF߀ԯ[xGru#qMrb~j4\>>i;m#4牦ԗ@_4J(ǘfBTqS3:6۾̇vkK̞) 3ztdm89^%k9ypo7f zv55|mQ |dmS^+s3j~xpe`oNM'E%R< +mӰuڛ2A)7?g\#Ј"/ܯwadMoux,nTԌϳH3>[bq,‰ CR'sC '^E-aO>B8\8U̷wrjZw"]pe #ZajDbjՙ\ڲ/v'yNj :n?m/w3Mx^ `}Ŷ&( +bx 7ת(k_,M|ݢ^ ++YL;r-4Ș S7OZF}u|0*<\ y~%\t=iM^K}g/3JmxQЖ>h}9TttQM{I+6r ;Iup}MTHLOϿ|O7|PC +dn}eղ(.F16,Mns.뾔xIO??m`]t78N /SCi}L1sPӸ HCǾR鵥IJFĻΕTtAyxZF^ITql2 Xqv'^ԐV I>SxFgsFJ{*)Cc/34Z*z㱱j$£mVWj:y]{Tf kq1~0zfxK5C2tmM)<5E<| +9fnU'@j@aJZ&/x0΄aah{iN1I-eZQzOs^$U3KII}I '^{PX[&W=Ls@awNV!I; NR"0_Wx^njq. ђV)3ܥl\8ܖ ]#wE)9`Y@\ 7U.KlgNhjD׫[;>ȝd2pmG`ǗSf c%wY1wa=O!x8x&CD{qVyg.&G5=g3 6i r=^h"s80z8RvR{dcRϖpZ!ճ[p`u/ t,y(Zt EQud9a |ǎpnR]JtOf@~,dFKlgfayշ $3ԒQʣp5P\{G|9evs3QϷ8LS'\)IC+/.@[k&#Ci}LvztlƞI&<rdUFl*Wf2Rdr9WS(zl#N[3SuN @I1"| (s'qcw0]5YCwXi!U8ȫˁ*`; Gl#*$B]LqcƤtYt5"!$*-o4~ϒ{1Xw_/ b+'s(:GE$ނ`$bY"{0߂`Ż9ce \xq-s<^_4eq;)Ӹ60#&ojێ3=GRh$4Tܼ?5,mEsQa i+^Z7uSoO*3Enwz y*~n.>㣽S%i!woW:dD566\[¯M#>(M\v; wg?fad, >^ svV90"FX^`)Le48L്hkl sԛ:)eG/،q, pWZ"\BV7# 8|-;ؽ+Rχ0 Gp4"莇ɀ>stream +H|WKv%; +\ tIc;j>ʼ7Ӯi0CTs c0:% &y4r?؜d+oZJ;i/'PS L밹"A:ژmMLlw]l1TpԝfZ"Kr̡n5ɂej~;3}IkNm]҈A6a1%Lpn'3C kfc$t~CEIȀmm6?e`"G}VAk(AԊMZ-B,X虚7xsG N胫*kYD6nEDU1Y4!/Q xeCY/#ɀ{×ߢœ(3޴̸(@;RZM +KWx͞QgI`us g$1Tų"8SVٺ (z&F2v#5*`vz-l6e+@9 p%be 5YY$4zs%fko+`ywIX.0[_R }$L# KYHY!ze1VXr4ze€K@*oG /W9JyH Bъv!!h;5hj վrVM-m@gmt?wZ[׼1 ޠUJP/lFP1:['"pJ|cQѮ5v#`] <8`'"t KxM-^k_apdK3?jc׭ވlîw,WD 6ޠتGiaWhtvfV6NEF\dRU+7b(vr'Go Nqt+\ZU- +M̶wlyB0{G$F+gF+Ae,H8sDz*j;fab0Yŏ|+Pm4-7J\n+:u6d+.80Aah5D_R6lqr(xJDZj3TU9#wd<|W/?>HR?:W=QY+gۦ?f@:V"[йZ!jqP .?S,}8S/;i ИRh^sOwWXfd+`u0+* z [Xzq0*aVUldA3EkO;LpS\:!I)mhiqh# /0R:p.&˘-?wb罱6Så$>wHz_0_ Qj`ưb0b]|΃,Y;23 Tgeih\o +Y'M)ruʘhH_É{b%>TVHކ:XOĘA/#{uau*'ˎ(_s4u']-{uaK0`lDd-AV} We[`.l-kOpX敚*AM@?Q W'FT<8)JHY +Jث +j57!yI2QEٮZLE@bjm${ @ +ZadsvE-N$iV (I$"3Seyaͪ)mdJcZbkkgvPڊ̈Nb>ޠ[ͽ4ȞCxpѳ`F/[?tЃseHxoUB rmJ:LtQ!_ZEA_<ʍ3 9nG/.lfƈy$wa& yHO>RXbDތ>|K琗^?2sID,#D';w _ b{-MBBc3XtxVqP4@n!"pv &ؽ}c:dFX47Q͍",YTwGr/7!? H]DǪ)+9˖*-*]2` J̲(%[LXPr.҆c [̢SoٹZ# lU ЅQ3غ#briZ$d<Ԩ2KbdjU(G +ȑE0Qm +L3 +yW +)f٫ + %2zVVQ4![, x_j?Jz:-gD 1\^%H0]%滀/4h:f1)=8 ,;uӮ /vG=ח߶T*d0bTWp騳^nщ^gKs:Pof`T|)?2*sRO½FNEt_ή+]&x .]} Ax?+ W @Wh N/`PfMO2pu(J +㮓E +4ຠ2Y/KhZt8hu_/q5v[|?m1 m:¯ +aM9Am*#eXxșYЪg1+=G!H9 JJ.UlN؝֔⵽7%.C@%U(P .;*ix{4>@ IζJvpdUb'?{ehalHgӣ0* nZF̵ +' `8yPxv6BaW-7]3 L0mI`?זh3"X}Fls`g]Xkռ4-9 "FRX5, +h>[7*5{Qu %mJ%)K1x^X8sǘZhW1Ҝ(YN,>EqhqφvS?8Bk_37H;(<텩gO~ RB+V4/Jt[T8r,{B5ih/?vkݺ׭a40>&˃g[-A vMs6j[Ca_ |u@`pT@nԌ Hw33:R-a4]>i^R_'?v*^Q# +PYCӺۡ;@l<-AcȇfӤ[esh΄O$+U|]*fJ JDWE*>ϦXIspz@jTnC $j2r1,595| Zm(YG.lJ79nl]Wİ`W%(OW 6xD~~٦"7/~b &.=ƺKb{on㚓*CD*|R*_׻ڙԒ{6r e/HOGJnTs'kxUtXqʰ]_)?хi7v#e2 ;\,߄(a + Ւ#Ti1-3nWL5Хyژ,2)Wܬ;a[%P­&XqOusgVRpgMI$9k94C- `9=r + @vW8Lyc%`Ȫk:ٕM ظDn1d@ZtsHVam VīӃ# c@]/eۇXR'@⣖.s졀wN,/T#NwG/ZROXq&|S]*u +'0"xvoqgflOmHyyIo9jnWp~1A __aiA-.Hg[$ ˅$ڑ +ғ4W-yޥWNfYٞ)ߌ$j\1v 9#=3B G<'}TyPEMгʒ_h=%Q&Fb)<{<9=L8[VE\d ~_+xe@R +xYr=׻g\oMv4Ըe䚛HBP,5CTtKz7ZxMJr?N;nv.]mD */|"ew9gݦEmܬV =I嶊:Q'15/tl= uufmuA>/+ p쨼iYSqcq-K88($aPTGM5-,1hIpCݱ_Y:VA|GnbĝK +BI`# !)MZ9Khy/c:x {kIxUN Ѩ7;Vz89>CY8vY/!no~ Л صٳWx8Vž7%LC'vyآ +z/K)f^. Invtw9hOCp̀Z '[?_Gych} )| +NS`l+ɐ#ڒsӖ5~?2هo? Lab~ +. xz L(8vPv6۟RcDI)x1cVx8x[ɍScs{ L}Ӵ9AV\p@+a[Wr;ԍ%k$ ^`,R8 [ZV,.^uLHcnb(jmA$gȅX.lP~(f +y + CSb0Otlc fՆ@.~l%rGj!\U4PJg=Os&˂u=N%8lĿe`m:.s9qǻk,5@"K^HգBjGla+=Lt60?\$CQLɱltmǪ\6ޖ霨=zS0-77 a΍%`4y Lc Y}T'*be Eq]IcvN\v~EV\p..lj.>ɓxg4xXr'@/r,ݥK4SWR\W F?ؕzTݢ`,m''eKodkC g_ +5qrKx)/-sτ`j3i?g*[)nҳY?*6Dn>t\Nۇ6Rm(I@vJI71ɣ*A/$DJn:. 7fnNJ)YpvTauL> ;9Ahz j<a4NuCK1D\K\K[mO#A޳g]aYg?dЭo%W,20r(\!V-W405 w)4Vѝ &6* |TD^`E65\(6[QniP3%@W:MNU'uG\(ζ+%`X`QE׫ 粥TJ`LiUpvm}_zo +3Fw/O3׬r:yn9oڪ vwUjFe}r2p_k4Edp@ g n \~fN;fE9P .qv:}}.+D^Tcr/`o!O$Iߏ[c~;;RQ^:*QzJ:*Z>|@Ύ' 1AWtXWT|Dd10xUp$LB1_X^/mjyM ˗qHt7"B1OQMlSbcpGE=__5r*c57Ɩ 9 ~ d&nuaJ∫INMg HF qE%Z*U^-BVds2L)^:{HXR伲14SM\bS3F6Gjdw5ئ[x2ϔJgQ*ʼn]z}x ~?ǎS$YGt˩HJGnzk?ˣ(k8(R) Ϋb +WI +a4I%4dZF 0%јoٯ"Wj7CT9{FW.Z6m" ro(ΡqSv10,/<˚8tR,D]Ls]u`+!hCǭR~/5;:IA|{qE{@I^R p`P&6]xmm&Kݙ+/+)LF)55PH4i VWw)2PP}9W#́ z@ !tj]M} l:XP.j),#g0UXPA N>8A#a*XKŷ.(| n5_&1Ы#4 $MJ,]Kzu}N|\2X㨳t< ku-cg?{6B0#oFaN[q}40*—LB'gbBS(߈Al՟O>(@[Ԥ*P۔A$h~fq^=?yv !B<3h&Fy +x&c~CЯ/oBߨou]1Kyu]h6ٻE!2 Ba ()0Y~?)78cmH2m,7|7d,|ևёDe>[a_ъ {%-;fEEc 3bh90gȓ촕Q;dБo>0%z&~tEE 3hJx*!Wmd#E|kjU叵Tï %YYS^ gQ&GbO_{-qts4 q +`X3:fX1q[DD9iYC4 n!*?F0[z\;JD$f,E+gaБ O5X'Pwފ99xͳw#qbׄ,?}k+ਉ8$j EV +O cgx0dKlro̟{*ZwbA Qܥ>)NJ_al#;(,:c&Ż MnHIz0qScI<@"}x^a.ӥ.p&e  W!YMqAQ%0\D;:e{U9%F)!t7v-)3dw<` >%.tRN=mطkAdݾf6.W * YUZ?e:g"65Q Sř EbN]>i >*A'o-姒Fyqyv)['<=Ǣ>IF {>f62(rMFn#ƈ]=%ntm*#juγ{(boH߯ysO4LcyZo SL.U/v hbpJσ!?-r[dƫS@֮ 쩬< +5lgnȹirΝ`qWIo 2׵;lM! FXjD˸}^C6 +5 j|~`!_*7yL~ nn\:*̐j bs‘*%S2ԇVu1V4]`%wLqأͭw\h`28뇽(k f2_=]B\jv:BO2icYO8i)0{pq4Ym5qطA {- 6YqJgG QF[&-t]^Ίl͒]o@dC Fj`,xؓb  *@߇@) K+_uFVM7r6D{Kp~폆}بO,[=M-G1ԥIU PaI4}'f~UޤYcxvo7nsd?a%XQ +q (k7ӵ{ЮUۜ X +F&ڔB2A>z[$Z{G+P.4\<=yǭ;ܮNC|<+uqg/hc+ +Q֔uB3wQy.Q==w/*yG3:%b̉,{H]9~rbgpӔQ2]-zM] f;#s'-|W(3p7X [KHu +׎⓵4jLQG JR~tN]u\g;(tA͞oK1?(".YLL +.{څͅ!zѸ P< N?ΖY:-7V4"FOgf.&Te+wVIsŋbtz1^ŀL=`?"G3\Y#h<+a +q|bQ0&:Tmn҈loaG6vyF/'{ b']%ٖ8lK1Os)9,yjvF6oY[]0fik/pH  P:&C4U0\WU2υa&W`R8bxH>Mю"o[܂:28wo*,s=V tfo;@%?¯f=YZͳ?w_URfRfQe w{je)-83cLO;k~ٵtˊjIS u/jQ̓H:@~^U<>N8L5ɚ"!k1 h3r ^f:S\'JZpK@ۏ˴_5q,NW~o + _ C:e Z6$*)=}8f%HitY3 UJ-V2D\Ϊ]ytq_axY4yI7(٬DV-+M'܌x4v3 >oiWdٮeYBw8vN +~}H̜_3z +ƟJt}iQ&)<U~,p2nGwk!8 ے1]}%_M$eg瑿2)|֧~̾FXZ;v]K9w}TVtwؚ9 A$[k拝6#ћe_υn#%oRbx7I2/x/W'Meq"K:XEhe$he}W!ZKo5QOb|Ta* )A|Q^?aq3Rj:GhvJ[f?t67PE յlo $X(b'X ׊CXV V((uբ޺L j&$5lԹО%fա]7^NF1alq|綗|pGdLV/mXoNXpRy'+#!HK- +MW{~ @Ӟ[(ۆKNẶnnM p^L+geto6|ٽqQYc 쌯|)@XntLCH/STci:rɰ\UC4EjΕՓc-oތ [ME QF iJcwt 6.fU]'a +)*c9tS\.QTӪ7Ŋ hW* ~.`NYZIUp"S[],@Y +nr;[ۧ4;,UIKPcmoXDzBu\Cήc'7%WL&k@@m)gD+o6y7ҭ/yQ{%1Zօp^xؽ qq~kXYKAٵ_Rt4]|.CHt纚D%gY:`I匆e(hhd``U}3+mg`eW |1a8MAll=Gf$~զaѱ\LfOh f^|Ӂbxj0qW]<6i~ѕ[$w 8~X4̀YRV1OdW˹n + +~34{0^ٙ㟅1H"*EilYϖASקwv +cC֩ {q餗ޱ2|a{pvU'ݸ4Z@ӊ~1uAA( dͯEƁvZ^KoPԵ zԆ'm[~n~k0Lt|vrQTxa yԉ"qub jxJ ]jpCziWu(v} `Z# .<-xt ]g! +`Z>V .uȳ^sl/(>Y&wZW~B6eki8Z~;p)[n\Z읷g?5kӝV Vg$0dKJI4W)O:aN;L4gtץ?X0_|E*q ׌9OiU @9OD9[b!Esm?KK`üүgGQ[%ż8\(akes̶v/?RnS͹J +|V YmTaKk1#n&/P3&^8&vޝzgV('}or) kl} Yc!y:K>DJ*\}xM< l6?np, +b*' +?5?_Nym&cpU26Df"ԧW ݌@W;j 9oE#߽2 ť[sveS;ʧn j!Qqr$0ő+Ξz*uV[5=fk + -MqΜ7afꀓZ NheГg/Gb]~B܍ݧ*OP# +w0ZQq6pݤ]6|vF ҝ*(U;al>i]Nnҿ kr3]!J̼ds0 3ަf|ZuMX&qŧ1Ӡ `;CTU)&O*KsPK!W36cπT(A1,]{.ٙbn6ck,p)\ P5/Ih$̲!S S4S@ݢxl!|`͝mYs3ٝi8}- 3g# +m_rŮ`od;fIl/T xQ SgxKI|ߗ +Ņ1<+Rc V>6_*w;! EO[@GtׄѨS2:_$ssֺv ә_c-13*Ym XV=Џk!V.x8ckx0Ut#c8)dn3,V3F]t ƉoI= +pipugo,T'.Hs;ek?)FmXg=U"%_ xLfu1W|&g~rnQ*\T -\zB̚č`J 52@2t{4]E a>bY)|'OR2ץz3rjt3\PeYNUKk}gΫn= i@`ݬ.P+ pՌތ5L U f}yx?\F[dє=h&;rhl 0^dOXqtq̑<9wRG{Rm}))=Ufѳs_r*\Ί7}t\eL}k\OЀ-1 +|˰.6hK5-*-n|~o9`Lu]]Xx@O kwoBBI%G&w}¶ߠP*=zl٭epK2#?Z@`p!$]خv$nv^UQxojPzf͠|E+V(S\OC.Ѹ/]^F_5 a .AVrme1@wFhywhBsln)4Q7S[Ŭ t>Xڣ~>YcCM4 9K6sZ&˳]\ٹd%`P{d_/8 Y(=" + %7J`uur:_ŷpfzֽsSzlkENⲴ% Ş)m^'Kh<6?r1uvn} Qx- :`AUt#ϲEt{KRyћBu]@zM2^ +pQPDzݳV,xVYϮޖ'y|% LmHjFbxcK4V~6%)s;37`2vNk۞_ +. 1ᛦpq$Xw..ׂd*[. L4,~}|.* X;Ug }KM#%gΠ27߂ILesebG&k^r j V>G߯J,oNI:xK6 $N0Fy֮%B:{A;v|*@|KM|KL7 ؍&m1ŭ?rRm&I,x䅧tJCO\]/ wlmK&G3*qۜ8L #3w6ZF.`䆺"0)"t7zY6lKcpd(LgݽTڊvxVquMfB9|+OwyhݥR!4}IxSykRc=VP 3Bΐ-cnc*b2ȶudAҷ6Z_+g Mp 5M%}W GlW;h.WT2ormƟOfty'ۢOPs K@>VFpS6O>0 vO j26@?CpKOXf(Bۋ!کib H,4]0_8 _ԚZ! <^T֣[-Nד-eP1#l#Kwͺ1NJ̭h?>VBQ37st gk ]4@T ^L0gKi5Q/X"xLKl ~r$##TU~DYՍo21RzR[bn,Q'2--ZfZ̋qhKh{G~;(T7'rZX7Qsܸd\;=6rc8m-pRY{1wxNeZWbmwbW D2s&% nX(%d׭Qnpr0o-jka +x~z:.t'ݕol$j=&y} EX p|oC:c.\XIg#>UY6JCxyǎ~,˵?ߚ ΋ІM k[oV35Ɲ=rO,wTieJ BpJUqk9=KK-XG)pq-cf\ -ngzXEniĴ͕{9Ej<cYm*rbK +꧞x'ŵ|* g`nCqS%jx/wHbX?`:!*֐AՋ]2 \XvcqHu~?`+veGV Ih=U ,V)+<֜ endstream endobj 24 0 obj <>stream +HW9D <ܐb<;u؀jR,g^FEq)xo,uz+&8sLx?(B}e)YV+{ 4V'M'2c̹8;Ɔ0oG`7 gY$vh"y}6qt.x+"#zl!E 'L1ξX[j%LIP֗D +̆c`$cWKўR鎓 vfwi +ϟ0X#^Y5a_ނn~p(¨ّ9v'Y XiOaGI> PA}댷m!6A /ʅRQ&" Y$|Kػ)u9 +5 DN1zl/l|gv"ъ:֦V.{}tY1=2F5"c%n0I=5@g,@0WQ>lN0&j{U`䚣:*jX +x([ X0@}al5F uȊ%rVrtv/&.-i J*ИUI J\(oY,G.ty?W{6j9R;iN!O`iQTZG +k'TR&j + `]531 +Wz2 F'}-jߵ/ pBJ$\Vc%Tub-:&^~}KnLfCs/w :ؙw%#*V(6ֺ͚O*u'4Jѭpmn!ab5yӰDE GXr{ݷo-͘\ܟa$\S[V.h~-j;0NR>-KWH)YZt] Puy ^Clq֪at٧'_ע\E΢CMEk- + 20,uG=o.?V t[VwҰaq6!ڃR]ljVjQ`l5&)l5khН$g^[ ^IRp+MҨ) OtaFN#FFXΕpiVZ/Ip>сd\{d/aʏUi 26\|$:#f{13 Vb݊ AeP\ of}옃9?k8>K )吠5 Dq*CYh1ß=ǺJ-զz,%2FT)p@$I7LEVp-;G򦟚`&ε>&/6 _IQsOfNߍ`:uq?ZSW`dRځh삏j-3# F曑W4'dBwL&ȋ MfoE#H ]=k6g$9൝zL#u[^WĘ |Fgv[. Ά# gэ,-~7 2W:3,"߽K# J֛R?ͻ/~l' j8ұۀ6c6cڼ*]h< ֞t+AjMzhP#wfp:wlm0 v,@w+=_*YFV/ȳK/z;5\2[C-`瀷M/U?Cdr߈_17 1Lw Ib:pmzJ?KitV6w8@ow:]M? ^\2 +TF\ y_ʻf(aUAA1Ac'`b%OfySEcLkpA"g~OX5A`od +s&sX?jw'D`"Y K`q斸Θ#Ϭ\b+c l>7qw\MFX7t\UOâgwB9̛J&H CnE{o;l2%m-OM4Dg~[h-hVtB򲪴V$;?`Sˣ4Ax# 3;2Nt,ʪʌ MU0$;WIى ML} zBe\ݹ8!*6X?uӅOA'VqMހ'c\aI[v5R^[`h{8oltcSsleDgjĆDanv9Aג/oXlu0qK$UՆolC:ô-K28b!xzԤDͺrKS(JJ-Hُ e7 [M=\`^;n"Gp֛!Ì~l,]: +nB~^ױKYT0v%)Ƕ@'9L~µ!WPWޣ&]c43 p"XJ |g3mAkkIPsL[f XnC#Y1 +18>ڬIm(Z4MTD08.Py(\ ti5B *\ ˵pkqр x)L-c^οFYZ%]|a?>,l6X?0{i=t]``)*" =^~9qgljUb-Jp?O\>g{L3Ug㱥'Yt'&&bcO6Y,=9ث-Gsbd +. fk\i29B$}=hKb0cJ5{ ]s[@8r-R8低@) ]l2<d +)E C) L6:V6ᴱtcpY]BX; ܚT_$x!x5Y4kkX@DVÌLEkw wa EV gPgDfm& <}OnvڕZȑs@K{-eW;_xu +F=Q:`vo%wǵk~T6N5ׯWvmՕ/5KDZglC9X-^\mط7Z'7$]S!}/z6OiV-IҔT3K& nS15yW<-N`5bԳV<@Y/+S!͘UzAFWȝwLj: U[,fҀ[;lD#!@=ᷱ0tfR`& }M#1XѰ=o(cpm'bY S]H ~!<N*,0'P%P5%ϻ+xĕ%&J6@DB 5 A )@H}l `Jro8籕e_(# J +Pra巡"ZGE5A&?/6C \*- cZT+hRtٕ}7T.˦j[K0 /%u jYۄQ}z[=MJdƩk a ݍ\DpYLjk옰 󐮦fםݍ(k 3hd}/:՝v{bay F l_k^}UMn6Ȝ`cJf7pW^L-ΕZW +s YJ_s9{X uGKn4>\` e.v'Ѩ;Y{\N鸗Vf0Vv}xkg851hRX҆Eb9pbmw{W_o_?~//^~}/> =%|oïOx?zOO޼H6q킺Eɜ c3*+vS>"4.܄ { L?ļz{|R`Hq˃4?*k*C '&T`ÄzaBPr a34 G1Gٓs<_l>>2]pa;g2 Tgaɞ |Ln ^0#G؈[p a9\ON!#8k}AR/67i;; !(Џb?8^Ckql`&94'# ZHHnO_8 cTS$7f`3 {8oZ3bc-pbWgW_@'[>dXNO匼[uD=>bX +0u 5>_@X̹s$vND*sJo9 ڦvYrK9? 89$E{obbӆzkv0E&z.?RcC_ɭEBHh +t mYbjWPXvX冤*zw4ؖWs#p:A,kbaP _- e:f4i=w 6#Af2L}6S`hYtXں[e0"9r +YXf Z1nˏRGeH1*W&M!ߵ5K;v2_l@"YҺȮA]b6T$Ecc^ PTn&V(6qTpSfv-uC1/tj1s9M|槐Zs]e`ku^K +]w,KƂr0TE~ͅ+~7.cx7:[5/0 (g[f0vJףz?̅e~>q{ +|36+p) ܋.vTynmIBH`$+rB['T0 σ% =em=3cأ9dY.$^0MQR2KM;ʅmf=UXnswE Nj#pV +)R f^ԸY}xm^!}|(mDt}8},$l20hSRZ|OerC,^Fyzn) JnEc.ݣ/e dV*dh]=gtv2kv@/6;Xƫ9jܡJTy6N +Z1*[&pS^ZO ʲt{OBS.V`24̂ VUX{I INNLXC Kaǿ<:wxL_/Y$ψxއW?ݯ >)%-~>L$#JX Ln?CNշ-E^j73IKPJ3p*>ccLАlv^ݬ2%Q"?I&{&Q +4vhY 5UNO<=HH}aK(SH)9,Ҥ/[6]œЊ|,^с낗"giz dT`9Dho(_缨}wm $þ@NU:O<K\=voI܅@?YzOs^f1ל)B,w`t/4)KqS4jtgs=f)^EɿJo/uB,R7ų͓U#B2ըec)7ΚzXhYI%9ߐt i)wFR6XxNjK+AE6^u &p#7#8oL?pVC`@w=enpF5΀ dIFk/Y*uYJd{.|v#!m ~䷑F~;‹#4RpGD͖)IS.^ޤ$}ulB<'/_CJ(n4CcF]G=FZ d׀Ͻ ^eHuAs*Cg7q9/Dhh/DۄR,IDiv^l.{,B _k]R[v)[% p e}GjtgMlhZ|CX>Z..eV[NN,?qЀVtf.VwnkOGΪx߳0FEN2%cY s{ܾ="_/l$ZyþyFfF4GYV{:`]RD,jG@ՙ SAdY0-uV|:r.$ z ;1\auyx,jz}HzCɚJp%H6V'44Idn;J~bо(Hv)MK +'g"|,>stream +Ho8z9GHP:YԹb +RJn۾?vlrҍ IyDpf32VL̓Ww9K Nޜҫ$LI_'1IA4ܻmh(+s `!wޱkI ?ޯ1n\H.Q1 +Lj ujUmI3a@F(G@uELY2"ֹپ:EO)~dOC7YV>f8EKD;s=aB:.*D!ؚb" PDKt9ĿYEe&K+m +P퓈[$9ޖj̯KbזAc&3=l7{g~E?,Tu`ri>Q9d{>&tnӭw>^n "sP0FQ8nCf'b(~kX~Is" PDKtbyD[ּJ)J#9/ Y'm* ]s=;cȒIgr(c{g`tl{LXhw?Fx]I_?낒9uH:8$4.}G҈m$NP +/>mキ @m!)3+ٙ{<9 T#r +)i/hBy-3TBr9Gx#Tٱ臺Ra74Ī1b3*ot +S"T~-Y-gdTvo`ɬ%3R¥ŋC 9Lops'rp$,0ʥC.:ӭQ3mM5;]Ap|OZ4O[f!GG,ł| + +;9r\ǎј'rzB?uwLR7}%{X ?' 5d4QM ߎ]X 黐\ B>bzQjMb/Wt KFoKN1+_T_~o$jR8G_{Xuu|$x3S2LJ2C7jZ&ʩlhfkGH B 'ڡj.8@N'7hw: Sp5? EK4;4e-j!fBK!+bʒ1Ԏg=: ]+|;E+mYD/zЋMNx=Sj¯%+эat7.m=H +"Y&T3MXe؁O̭U=Xa+K ][fۢvcOi.+mͻckK-Lutbo@# w ")pZ*4cGXs!;kGcVPA )דrb1mKdG,uv2(&oǮM,]H.!1]b/Wt KFoKN1+ZKtdDAp׵OC 9o}>xA~ k@|g Y2d ^ g Ӕi9xhq"E;Ms ;)xe=\Md!x)u:%#MQy x66dpELY2"F*Pȍi&)Ӯw $EaD.v>]ac\~ Q-]4,ĚyyrP9N(9h|mSy܁U +EHZi3B,]YRٖhjć k@keg Y2 SOHm7P|)Ӭs!вDx̌7%ρlsaO%=F:t7FQ8łㅇ4 r1eɈ5b0@gQmx>tY}e)B +; +=7,'g󅶟R%~xo 7-I|mS:#ViW,BA.Zodbc=L1&z@ayxsQڒ;uE\X貹.䠇 +ҡTDѱJ̽yC4QNMdcfAwy#pҤLP0vڢ49@a 6#nW2t)Ӭs3 A pbry".:*>(;{O4p8hG\`loO:JrZXlFeVĦ)WMo@CФQ$NZ))zEw]^磿b-*6D3>7 ^Ks1ۼCSFj^HhYq0A\h@,i6WߞSw@mDt)tBٌ]E_DfU}Br )lJ?)1=pp핎 ׅYTt832ygV*hTG {Fŵe;ą g%Ìs9ƸǸ'tOcWMw\1 i]Qf2bIN"{\Wx> ~]09T{t_嵯ДXA)lbےo.Q@zl V;;H>stream +HWnK}H0WrYؽՆEHؓdx&w<{It7HrWw:0T_?u3xU<>k;ǡ9[=WVL.v:÷x3^_۳|^bQ{uY=/5,:)}ǯUHMʮBDt(wpQSFs}3aR6TWdƱv_ūӏa&Go?'r>t|x"{.D'JSPMƪ="KPrI5Qhzhl<77H6Y5 \g#k)㞓9"ztl:8|6ϕ|̆H[ޣW~}I.?TY5{`hni}`>g꫺_//v ]C?W&/8V]i)n+c5<꺒oavٵVM&٢U +W\6mZMvllwGf8}Dgn'g?iM(-m5ɯu|nr)|Aq&⮙=_GruX}}U]f+p8:ٿ}ٿwχ +oο!s? ?Cp9_탐L,Ob./_&q}t?\&tz=;ۃgb\ہ(ӷ(BO7|ӷB]bJhS#i,JNF2I$ +ԞLlQ@pF0V+AjɑE"r +>C LHf@m0( cJ< 蠡`V! +{ ώ s:cL"HA'"AsSQ6u+b7&$M#@;Gb`gq(Սp T 3" +E68!9eֲ 5d즹Q&x%@*&|ڒH@9n40mE2'OiǓf cc'^C eZcoԨYΌ719UZC1pG3&0unCAP LXvO-o=\&jd$3 2`XadNKJm iӅTcx[s5%ˀ'O@AQG X:Y)72uNnbH7nܯhkRJJI2RZpbt$LD< 1i䌅 +R| +F;_KWʧ+^{)ҴiJJwE_dU +OpN Tj2N 0 + X`\98 T B;4JVڛ 쫕!B*Y͞' +ozO6h/ٜB)ʢ'v3>o<ݡIֵ~]PiCLn}{rب1SUE Mhz\NA /VU)t2cbUB+Ms +# [$;C hBPvS<^w1?O?ؾ'V*~ݷ>㟿}}|x}Jij< O_Ta/?j*a^źX*F*XOa-7Cǻg]M#+2oٷe]@*v4M\ڞj_ȯG2EQYx"U2*\QYՅP^)P`&gQ?unS@PT׬h]t_|GwHZ}Xu4,Xœ}(pqWZǚDeFPRn,+)3'SN…+Kή&8y2EXՖb |tC[gB"nU.GJiЃSH3 +3Q4t* ) 9} c nhͬy?3de$Vq T +L⒔զ8a"C_'I`0dv59%E@ ܋IHd{B V>AqSҪ xIEgʼGyzlrud{=êINg?(%+ҥCAf -HBv]+C Pd!'*HJFizN2{@Eܥv3.ۇCK7+CE8T  edGS*q<7uGgZVQM|6VЦ + @w^SMvBdIA)R9UQvrk3+^uoGwunH_c!zs׼OiL\"p;B+4;*&iJ=ٗ3Bjs B> /p(a/.wQ:kmp% + 8^w>(wO H):keհ[(3X-8XS[)A$YWW;V DJw)YM"o3g9gtOj9Y #%Z$M#pA.Li=[ߞlDUeuy,f#|ӊw;XFmWx)}+hJIi6=;"8r &.|'3^Ga#FtF ~W"c59%<&as0V+  nj]rjYԻ̜o`^uw9[q,c|bPпS`%YڻI+Xi +2 mu}͇L osfyq2V,P:m[;#3^@#YsoHˢ5B%42M 3:*r8gsi[YE<ePÌIKV yUIL0i5s.)cICStjؽvZ,n/[}vQuBo!Gfr +pϨZ_\$s~ 9o1z˜hLLSX#b2IKQ!0"KP#0~ ʍԟmQ0-;GY=@^z Տ:^~))RLsDד|iV#1WPsLBt^zV#0s3kǿFsF]ȱuKw*+niaqP_[c9M VxS'Ngi!Sob 4[[)Ӂa湫q(=YF_EZ*xޣi6 ӹbX CPŌp- 1#|g=KJ ^c1#'mA] fG˄tW+%6p>>nO귤(Q:D:Ҏb-O+$;JUsY8ZLt#a{+/%έ%`ٸ=w1(y,sͦaR.ɟ)72)r7+rhH{Rs(Qer!]LWPוJgqvǞR/!?;lQY\WXu.hg %{G~2o4_AA7S$&%ՇMy?Mv#NU%dF@ۤqEbȸu%`аvπ^J$CAKmgXm裦<^0jWP^P{48>!F1d1z 'Ao&pd|d:vKHEIxٜd7 ;/4!Sc@N0ƛww6q&@;kّA"Gy#(Բ"d|A̢ZE[DMU ^3*:$ՄydWWtoO"1tH1&\en =J!ܗr)pӔ>Ha4-)_P( o19*pݛ.iDMN,Sç%z^Ϣ VO0-zTQ g"$࡫jUGi"LM@H|{k ۾dd EOC9̼ ͥ\YPjaދc9gD,[7)LPFuԖyN:3,M# + 2Az(x?V|&.;k"&EvTE- +BezhYdUuƀH+rdqhF`7r/6e\!§ qh$8j(_j?!W"Q)9 naԲn jVΤۆ *fZ 1v=ڶ@=@@%Mג/[R̘lV~9nԋ@ ]9 Yd^=n+jJy4MV}Sꨉ +M;p+V2,2TbϻN23IR톒wY3` gDԈ͒XyH6Dy1ieuwY1bܝ ZH#W;°${\{ + UkçԞ bNھOO/a\r09el9j| ~ +zxrTQ m7FM!)ӱ!z;9o!1\ڭ.7F*HHJKfӴAoy:tXO~Ŀ$Ikʸ! T[\n5o{4\5Ҙ1R22h'S ;N s6Jtg`kpz$]ʻRa5gXiyKѭ~dR]7F M#3uɞKLe^lRF2JH&uzvM)[M"(,Dn":z OGʑOkJr6xC!E}_@FQ3<)c6!u>a?Tux+]r(P2nDjoлo +, J3er*%D?% L%>zr&֓]Q0a _bK 9+^Q }G{Z eK؟iȡ\׭$$s31DC]J$iUb,t瓅 im&|a +YSeR9[ /yA[%IkAʩQ3@zʈoj/nf1TNѸU&l%0 [59۽ wݛL-=c$)C{14!^Tl!RtȁyEd?DE Ah 0I*8"o6-L'v6=}Dmo.Ÿ̤qJ}Z5o=dP_IIay.;P[R),(_M3} w?owo/ޤ.:߾~ۧ}}w/ȿ7*O~3ﮟIjl_|"`șH&BdZk*e>6!Dj $?\UMFv#$]TUZoS"H\fB*DRXﮮBoIdL09&ƒS (w 걄(~CA'pYlH7R&*H}O.FmkORA,5( S,JP_vHm-;ʱºʭTGKMuB,O'br-m)(0-%"TߪRӻ"- E=;!E򝴟@STd#lvH&ŸeoPٯ)cۣMQ1J9ԽL i&=Lyo,'٥! AX,@;֭J>#Ј Zm,U_"0-j-(n.\}o{Ru" Gl$ +)VhXu^&]M8rN"n xIe")+SͲu9D}^Qxy-7ݴuբԠ9-NV@|dAS Jc|Z{*% 8J(2t(uvf2/Q5%6vFՑhp`8:1LŞzF%qD%Sm5{7x>(n+:c^/Gu*ّS%[82[{MEu$h }XUe7iCuW +Et缧鼸X[cu +T3Rs!7yI1ug/SiHRr^1} &^]곗}2؟K6C3|jg$k&:!wwם|#P1%ws(5XOI4³D\L(' f-ȕs.SY¼9 CO<`OOzeNm\ȸ)b=5ix_k?{*d4=9 tgΜ> Em K-=fIUб5Zފt+SJ+VCTehѕi؉#TNB$:=fhtlÈl&$W] #Ԓ^B-xmT)dZG8AԕvGxC5|H=FcHp-)5qO-]9Vh> +Gݞ Sy ^9Ÿwc*o8XƹvngCB;Wʁ*\O<VZbO_vK3n%m)HLI2aP5cUIUJ\)xKIUm{blY<^͊Pm QCOuuugx:@ڢz-փ 6%cr}Qc8~Sv6J +C &-;dŹqx"68˼}2lF3bJZFdau3gGy}ۅ"wOs-=znIKGᮌ\:):'RC1VųrPww3S̹$??~ǯ~,W?7[%?_$W|I/^}?|oeŒ㊢_x?HABifRYVwA։[{P7#32✽~~<?}'{zGq뛱 S]sᄑ^'~sǿ}Ƿ||o>{>OO?[~O?~xx^+]_}j\?(7P1J9'ŏx@Ev>՗"'lF'5QPl)xR n7h P#F2ʱ{QYt쁔x@.(při+{'w݂Drf)^|[66ch:mN %):]+1~T8:O903e*#ᚻDtqS^X´(^jmyjKx0ej,apne;R FvϦ$X>n8qAi4<# A]g' eHd>-gΗ<#nJF:cФ gCVdnD!̍>1&Jhqr*d*v,ucHbBxB 1{c@kA}=j)N":;q{䑌"|-lė~– a7h,$vfU)ofcD,3PMR{j(59kq ="_AvF[];+| ~K3ɪ"ei@ +]OPڤI/hЧB=IƕnmXu +r9.bbiCp'4lJ)UV9Wot*Ȋa +0J` +k.Q%4.B@sؐ5]jR̸ڕR,Cn9_7H01 PJXM@X)x/B(T(d3c8 5V 4c +n+#m W%QOf6!)u0ЪD凸#>Ifp/@UXHzOZAM3^Z$CHXq8A|OŐlё֦58j;twm=wlo'6`NI$5as6k(1w'pؖ(-tFB({ߺlG0 QaX&;WR׳Z_M).u헓H Est͇/*$-;G$Rf@Q2#YLJG}XoآX+dBNlQ? .>-j M޼Scp%B.Z:?3PU`' m5H +w`Jqǐʍ MT-6< @sg=U(%=DX<ǎlYpD*_im.=^x5սNy ӈ:գ!e}"xu#p _8Vkף8ׅG- \33٨Wr'?{Qr]; (NO,sZRzϠbI"q*lzk;6NYJUJ$al ]GuR(?"ۨ긃tAQJ9A&#:9OYH)6?\zUpb9Qoa1k-z-@9CnK|ɖH9#]u}}+bC5nsf39h25F'v#Ⱦg@5tE~y+b'"v_BSu J0:]rFX +D޹-F;4';|d5*I4 |/vgKQeՌw/ܩt#lh(gF:ڥ&W%PAN$`}+"z!]1e^3a=bdXj.5!UK3:\Ō#>_ǚy5>}OE}:Ɯ.2|`w1%,t(a!W܌45,~rHF%U &_m6dugsDfGsq.faLES/l ͦrvlzf qIʒipRsCh*NX^A^t|"r!m]B /CK`h㕢OV~~Țf?eyw-c.*{H~8ExN~ 4d ɚ*`vsy8d%XeN2zהIS"MÍvI=o{*ȍ#Ӧ- EPaԨ(1Or䭼j_>p+;m0_`CNЩ)Cr!EO_O;Թ2V{EI +ʪg]1<`Ȯ##p59T@p` "b8Ǩ~. 4°)"*n,@kpj;I +5WX !t?+nlѶ1d38|]pw*#u(ŠZڇr=] j4/ 9K +:7o˚87 )/Re"zv{PHBmLS;m쨬f j.˜KI>\#q8^JJi;W_M(SrBW9E + FK^!=)"VC+bFZHyluڻ>+]s]MK} atXʫ=B:+0PDl"WmRwxzjzcmա^uZ_yw&H.UTZ@W7lg0㍗| +zBb(8<(@nPe9f8}֡sA۸qyErgC{/^yfpK^#}M^f&o e2Vk,F:8ߞ%U5K#Nb-Qwo +[_ˑ쎺e™kE +; 9JW!p{8CsYzUZ)T>:Mk͝>J% 3ȶ39c[yʤ*=\L'݌OyyHg`D Zk#/u/t}傱yoŷmm/~_tDVnu`Ϋa19W#EqNP!;Ss)7E»n5u}ӫGV2vk9ol{ηh(YfnSmvd;rQcAizHYYjUy^];}rG&l":]+9dM{ +jn퀰>_b@ D>E!}&k]0T5:c)ÓM8eߡ2sT+1[{cd!TkEQ&ՕPΑ#Íۉ_;3 +@_AJ|O7&T<0 ⮢.L`]L!䶘Plc>i {B:*Cs|ͮ9O>n:ܲd'DZ64b~' )}ug)e3[+rkTCT5M B%}Wk(,ӕvl@UkClBߵ!Xs/4-F*34?[k:Na&r^~oZ󎻻gV5ٍLxi y#5ղv\ƭs HJ5-7o6]N gm; + +. (3Һf8K2g03o/_2AH7˱J]o[6bAlpEBrݍ}8ds@ܥ[C֓OC['GC#o5Rr*9햮\ ugrVnjltȨ%}%\% >C5% Ƒ w3Rs- J0cd3Vɽ]" 7G +qEkz0Rr= ¶hWecbz9ӯT<:7e]-˓jQXC vqOSaE< iq/# v,JvpFVd&]tH5Ԍ4gz- f'$~RdZvUi^V?oDk7םuȻP;ku'XK!#':p"p.߷j#-j=sZ_U]{QP[{d4OţiR9ez-4HHY +M6}g\9+Xkȁ J`V]68UVstXuZ?voi_u-~wSa.2BktM5*1X 8Elk5>C!Fi\$ƣNAK5WwZ5i_vQs8О0WKuRC԰ܔmvXbD ,|S;=A*M [@>J'!+eOGܬ j TՍbW8MKx48HDsyǡ z^" ,=Pb)O74AOE7T$r4;YCܲD»7+ +yl! e)l_g"g{B1[iM592kDݟhX6P'㐂ۧW +j޻Ăy(ڑ8fX./KI'a!+ I!TQSM}if~m 背oGXOPFii֋yu,tˎS+JqjDniȟNaRU(q( <޲g\=+аeENJ,U [-i%e榵wJܛd={[xS }}eE5q,t6*(-,jlB"iʠ|XKC+!e4e5ZD ˪!@z]!\&kxLi-G'y%DP UϢpOF3$HC|3ٳv0;Z18,1g4SyU̇gbsh(T3G;tW/~׷޽} \Ϸo'o}_=~vqsro^o_>탻wޞww/Go=xq_tI/q"QS؃`+D=lfoڨ<z48ilqg]DGi 1 b$J\:H.48nUZ\ڇ>,EVחN1-TuKA2NpG9Xz2I#V^g:l3AeaM[$I[6b +dYç +7.6d &7 ϗ/{u+EO(ñQZ/a8Pt +V!)q4Xfm<Ճ=Xdv/3:F`vS&Lt^Hci 5&y OlM\JV͘ hDnDh:~Z J cjǻˈH1N3n), 3nr)fI帾U& 1sl3vVwOSSdP'P8'򨅹#NA-dJaLa*UCX]n!'GՈd;)%߯c( z9(jx1^QѽУS8U}Ӣ9Q\@dUn=1at5zhTCCS#x+"tZ+p:\{MNs"2ufO7Tvp;{V&[mEg$RʘIM9ӮLo΋mTk^V>Pغ(1PjԳk\>Gr101^ږJ!xQ2ʌ@-?sB:|PV ky>J]ӂ֎\U5j { +LFxնbHÒMLpȩJY~R7eS1jY,i.2F(6G}#~XZA x uɺ +b5hhiy732TU&nڷrY _Pn²=xR> |ASCADwhEH?{N"+VkV1"j0jW:+\O)>P^,8Hu HC!K"XCڰCFhBCDݰomԹd`L_MmT*^[ڜ&֖T&Sɞ5z +ת*qλ }U6!PSXi|GT̗Ā{ΫˬiѤVpPbHaN +&4=:$``X-tݮLpl5ǝ^ZT^Ts96TV=%+˛}*D`\Mri7kSo +2imܼybe2Ƅ9Ҵ!}pjUGAxD:@:RCF +o&b%m+4kΉlEW" ߎA&R%*nm6Gi:ȐƣC)BXg ,0TԠ]k)>!t> ކ-T'5H'2cJ>ΗJ uhNϬ#q&#'>%@˰w/lBKZ(FMDE'3ڲj<~~o?~釟O~)>==|O~}󯞞o]IٵfT(+M;p9B> #)xr3hx +n\5iOwCEwѨ<:3cHE%ٗќxB=@q=2zs"fJ3lx|f:Y0M78JۘY*|$y-r1Ji/S~W1 +RQ" +.t$^mAP;s-peۼWg6Q'b@Ȕ)" qDt4+.jEojZKav$VY'vFO zYTEvZw"K!-\rՎx60UqJgR&{mi=&ۉX3_{'_ l$*#q#hM&bŝ)csT "b래vR%=%kjt6u!4ōl}=ŧ2):ɒWG 35m`jP`nk{ۭ 1 p5ک{.L )?o䤻9'd?X8ѡoȍ%zn4oz2L)ZBd4VD#j>o3kߞ*QD*,2oRK0~~3 S5LK wtvID+/FSq,/1 ވbgQYu  i-5`C؛6mr-GT&Hp9nӠRJ*4_j\ Is/pzݗΰ_k!v1 +v&@!&Nx@sMTkꈶCD|2ҠE(";8%#HCK)J+&69AqFGTq'1A܊W HK'a*E=}W- vgkB $YAD`~e%ocz q!Q DIuIx + {X^ե(QZ0-_#iQV.TSMm#I[^jRnE>o]urO$4Eq?@>\nEWڶDhgTzj~HR??[ƋI J~Csjͪ2STS醫r%Aҭ T5n{OЖsj쟾ۯyuYxz*7/zNWճ?MBU?I\ẇ O@`|khy.PHd9YEkmr6Y%[>>LJ~.=r +)E~xfkSL$g4isk9J>_ˬZNUAv0Vq,\jpVl>z>({} +mB~=߇_~gѧKpzJ,+#O]q;>olHq:D+d̔."<$ܣZҠM 2Ұ:1ގA|in$gI+3mHjW4DS} 94l &gTRjw endstream endobj 27 0 obj <>stream +Hn^@p7l&lV ",Bd E߾^7:q wՅG̙3SO{m^NQvq"v`yOBZ>y!>z Y듿gxuqu{s~ ;ϼ={yy~i1WWrwzuۻWחo.޽{=fy=c͏ۓ/_\<}y{.β=?ۿ]]~ًϲ?sv}r}+-m߿:;g\%{1k&?S*Tb9>w2VG߭t7q׷ث2?3y{fcD6Hɠf~2k#&yw'FUmssSkg'3Q]{&?lnRN +'lwQ햓rNo^^Z))ӆ + 䬓0ݓ;l*Iy$O<6Cȴ3 AF֤;eP&d̙y\I>Š+8m3ucWH(iM{͉冗b3HT}ϩOJb}nNRpvHRDťTƒڟJ6)Yט V5y;2IJ:9oHCY2XueRۍ3~< 5 qut2PR%Q]b$gqRAʯ>{ >!?г8j [\{p4@ +"ʩ^=AP @兛ZHGQQ@p/o#c^H/)pUJKzJEY{"K= 2FTz8֕*&@:x6TB7 el.cmׂZ~AFHUZV +Y (){A5s,ڔ61JQic<bCID"bb4f1y)*REhX^t,#СPoJǢS#㖼)*>ꒊ-P߂hMè0kWIӘbQ/4c_| ԏj=+zV{ *$xRʸٴh8Mm(p%CS"9# rOvudzS +'1UēKҩ!FL<|=6.F憵HtYj_hSfU$XC-:rSu|`Ts@ҤMGo1 *f-.FoѺ) qу9L&'pk\丄6al(LRT{sPT: +5ho;b$Z0+ xPqȚMx)\KD|βtD+=4 bMi--Fv4W xY}F1Rd&Rt6S1']ٔ̒`\)QJ:QS#9˒[lgKv$zH4f걃ḁpI pqTe `YxŰ&bhط9!i)gMm!k|`HjW3EKTAQ}J+AoO'ZKbG]oSw-ci,~VH*CIR.O B'XPkP +ާTۚZ[mk:C&֭ub@tY#k@%3 +F%Z3hb~jtd 㙩('?[{Rvx8`5ZJet-@MThd:kz9 +!z*ғbmͬ10,4q]ߔi5¢U#ڱ,*\.Vɭ683 +]AGq/U֛U}f|Yu^y=hh[ޚuEo-,x5y[oiFY{ujyŚ:e5ǩu Pc +;Z IbRsAk 8* ڐCz>NI`bya% HիJSy]$(HLKNȴڧ=@lE $K.}WOWད{_9"Jc2mΌ^~ذA}w)QH3NoІ@˯ڍmq†sUZybjRʓVY`TbR+ cԁꋓj#V`HG+uR4"*n$yТdu[1m8BJg)j_}uo +dBDHdixɱi$Ųc!pXI2'XV^,HU}$ş/D&D݋] qό ľLHj9ǽVgl5Lψlq%tqَر ++:)~?ogD + *W+F<⭍D%:}bPE5n(Y.\Bߪ>s0;XYWR|ɪ3ffq<]Ci dW vrfhW_K7(@d,LYu;ZFUAcfƦƑbT,kyh~ϔ @?jd%H0ef7FW ֒w?w4MUn['l*ma6:q)v|brsx?P&P@e떙.U{~v r|͆~;1i~9U+]w0җi  d`\Rivs,c&#@(*S.g}=0iC ( b0p\2 +B0aS(*rX-.D + : E/`ig1Sg#:y4McEF%Ĩ?A{f*󩺝 =éTX`[!(zC3n \^b5jot1XZL ++ZV Sٱ !@ҧ<.8kj49_V%uWu(iPPUu@%ƘN[Cr[PHH%$ ?_2t`iC>Ee I4nӔJ{ /^P>dٶnmzÑ"+)W\lOƗ÷iʀtb1YvqKi; G`QP[RM-wd 8ك9@uq#bDJL b9"@ hG Tu2CH- ?կZ]jҞ3|ABd e%#gP>Qe$⌇EiSFv4z9Ax8|ՕbGj\=)`[~^uQr FH-Ƈ/ӵc)r $ Tfo&tf$Qc~[A Zݬ$h+*$@[5f@T-\'y[dM\ZV'7/'մt_vn:\%ݙL3>.mb ˫)7 |"ims/Es{7i3_:7}Qu!dJ2Vu}Z 7v*>U  V~M6!t?n5f#UGOs 4=eL3R kH{d|ܘrgqxEzn4t-Xf +Boݭ~ tH77eO_zzMh퓾 ||EbͶ7z񶵎 )2jZ$3djޏ%.kZYBD\uOxҕ<V\lf>w'Q|=69u +d?W6҄΢?l {ߢX#MCI 2r\1Y}Q˖0WbŽ8)=rT1!9RUGFf?ȩw<(N-M5\mVW&JBʞ{N=av-Jcݳ ۤS kI r5[N#|ݤ_5†7-;K1j^|_Sg !%/BYHG#<>R8+NG-¹A5}Wh7.YC^oC9+%P S#w}ʹXGaVolLƾ.{y0|OFb242<ºo)=];O\m9;lk$aNܼ\FAP\$R`5$tTuAC{_Ͼtë )^D3bwۼzJ}t@ٝvs]0Ʒ&fX@j+]sA3FLđN2]{EHzI7l}~W WwͲ +_nEI_FnJoi 11hxb/<t"dhP=v=ި^c+z"v|hK )bXYZ>6h;x+|CW-lЊBf/,!iAhI:JVNnBT$F7_@Of3J&G1H?*p[׸Ιɔ48[ۛo+ky+^1^]^vPn]K)~4ʕCS&Nz71gyV1Fיh9+ZEQ=yUfMdfԙL-okjZ3i.x6zKWUp~9{|I+5T1%4Ya:?I*"'ow\)}E^1VlMnJ[ﶷX2 |) +<׫ɹ"4GvYb>IЋ1WMO}߿!ɍC&H695 cWu{={|ueC'e?HPȱM?+| + 063uqhjǪ]|i>Nzhctz{hcd'&Z#;qm-:)bNSU}meckzi=D8W*5aJydE{ s#iAv3,hq ]=ڊ=O/DyG;&oalԐt+HWK;w(,Qŀ(+ږˌΚ k]@nsv 2 yYyũhC{gXл/?_ }y߽~^>_y O>^7_>,//7/7o +bgr>6 A+:3"3fmcP/fI\CS8P:V0d얢~jHix $IQ~.=`z7=eqTAOEReWCx +Jԡ/M/Ƙ¢ДмEKz֛ +w@3Ց&UΌL~'%Lm#1 ^.;, oN%] hԚw"&i-_PЄqns ]P`yJj-j?86DNwiy YE"j01pεݢTWQWQ bnB<u~HTѵ@]Yɐe83~z2" +*˫%u쥼[^K׎0rDgLxEp-{Rv옡T +m+9e<+]B.M-rWṎWV5:=zԳ }וnFMd$W)Xma&)m$~] /Ec('?: >iou^g*rf驲.֞b:׫ŀl+Ȭ7[eX<"V!` JY$1sgRp +6Dϕu 5UEK)`BfSz$}4G#> Euyx24)B;g#Tvpt'}@:ֲ`aH5#g2yYc>K{6g{t\LjJ4,56{/Ni3{P֤EaX!B)Ӑ. ]~$e,m&%C]W.s4ӄ(wm0RcRbJU틶pFC^|ZY7 U. _gl3A_J(NYzy0Mq5s.7Cݓs7 7:E9m.-pTYh7­Ȥˈ^pp_fUq "3B* ++<¡*3 xVhQޢ?+Ҥ*;|HNoqvE^\~@+R\b8k*Ipszm y㪷ZYMj@ 9풮IL<#7\%6vg j'g5% <޷J=FTs.Hi|~Q3P1-kfٸFw0d`OHX,d zGcwT}G6rVY1l[˅r.=x_#-o׺Yl-VaLdVb\:1%wl7p < t"Zi?n?[pil^ր78EdiUCh6v\C4( +4?V8^h[ +EvFZ +ϋ<; : TcҹbHaTuFdVMDdF^(ZPmTcwNHM3/%E0ªq n?9, MԌD>R0 LϦғln]lFyV)s.v'IGpfu +4Ԓ'HbCr7mLpĘJ)aRgy*W _R7Bg:4wl,z{^vff +oZ.btiBm@#3+mUU'FL~jgTǭ~cEw! m#P*`k\HDƝc":X|~yԼ})L,*Z'U9gM1gzZy/TsC":Yy>DŽBV7+ Kz\s.Yx-1gK mvGk3g !YOibvRWpךC;#dy2wnߜҜؿ޻VZҒ76Z]W"JZNS{ #%⫢LyyL=5=l9ۭc!pP@& 8COr样=0y괜6r?P^JsnN~(D``lWļUJϞ"D%3"@WjTfǖh D(;4G~iȏf̪b˴NϘ$C.#'3U8mz1-j;YY%ӽSki0%d31%%df v(mD4SѐDȎ7r_t~ݑ؊}Η}IwӚ& I)%Ϯ(EDۺ~&PmPt=A$eaDu'sZC2d(! =vZUoQTkE!mktܗ1qR"M7e,lG6P,ri٧O-TxB|ݡ} d߸;+E4D"IG⻔2t pshN tv2%dT0%lYebW,Lu/U鯐=K;t]>=h(ԫf 3pybz:+:`%?*<3\v (;V%?l}X7N庱z";Hp@]D"/=?)'sbIp+ $7' dedih~ /y} +Zqej-\4+[7): vefѡMPjեuC]mC+y0F+k5ǎ#f3p$Yju9'WĉPq4-5)UJ|ӝhDANQ~J'vQ)v@2_CxGR<6x?b&9>p#  Pz?. ljmKlW3\ }c-!CNaԆ v5<F<hRyĜz̅ohPE}8q 4c5 ?hBbAsvX4od !APnΐ5R |Ԉ!7x&f0} ,}dŝFo(To\&<@'Zاs4/2uqUcQ ]a)ncfK !nmjf)Fy 협W.51.g/&Od;=:"44MHIEyǑ(}]:Y $fljQ2q,o»,!ˍpԻSpa5cW˅6knGamVzomԂ E\o0rۺz]a$ۣO^ -k]6Pmqߔ$SH $IZ0zvoaԂJ}Du$o]e"Cs%2RY5&tIypf(=3A;:g8L[4R\Ի-"ŗ?߷?{}W_{7~۟}2s_h:K&b*<ؑ6TCj_U2P TCwW8JmaR½$+~.-ݹZ_Nɖ~Z۫^܃jړڟ4uY:q\ ~~K3T<3BJ-Lr(w!J_#5]+atJL2e&1< +͛*6:a14BE>X#T:8QtJ9X1)=CDQB+Bt!5%jY1={>.$\fBKœ!'#@)*:BMI1EoW^FQ nhjZ>=1Jb1 #GmVLy!tnLjp6U;3+?!q! kHhʙ<ݽH2W;)Oh9##cq/:#e +E C_'"4{]U.ZNְh2[闣..M}!z޻SIq-\\Bsml.잮lqiG\O!-;YqңHpRl6ŗfʽ'+`{b艹=97rs^/9"+nrm x~-Ju,6O,*dxa) wDT"ʜϬ̡(kG*sכbCr-sa]ŀZg8ֈ%U氶2293C,8#7 G>VykpH3{&db Hel #Fi0tg}*5B +B;BSEKŷN,%Ph\'*(vnɶ-Ѳ6թrŋ3Ih(Es2@ b5 F&c#RW>Nu}k9~k6kFTmhmTS m;Lmd8|=%b6dl\3TSZN7XBO#m&2ő8yD"ַ({iPO6'ʉ4=Kge6]`Ep̈L٬r4Qz_Ndيߩ.U7@ױvYDEoKL^HGNB~S k zf؝acq%%/q'/h`2e8~._-RFc{U +ژF~P /HEz[ڣh/}*7%_}t&*Va 3DNcfAіUrczܡ# +wZ\G-Ε .֛ ?vl~yRKؘAKTPFzHGMkZGʾOv + ڍѼS/~*ݘi35h +/RϕKۘ-ʪdm=glt)ːvkJENZ"/PӴQ͡i4Eqݬ(C1OQB!}?|w?^kU?Gs8gc' +mRGA&disuMUD"MXG5)tTAv@\{k&igR xWYnԼI` ?x-6TkLhJTj4;M PeЊzhO_C +[;܀'=PQ"(lS1؛|I{s楽ԖLQ0kˡCJZomƷˊ#B.J*K-U +K!zR +}€C?ݚ9z;DD\%Y܋ ըB/"su#RqkZ + A}ki3CSpWw]H Z7b'k{L;w +҅󱦜\;}oM*v>i"=V獯)o-4) aYV&J,Mj^ugʨ{ot`tT<}.Z)8+k7V O&63u c16I m\%Њ>Ylܓu~1UbCMaU֚~WUٿ 6V7WSdF*nH'.TW2hζ$xW\VCFCbզ Z4YWqfz6R<%Ԇ@4ݷYպ0 +y)-+{&^ PY` )`De'8P6!U"J-ߌw~/>eYkE\A g:0uj,2+7ĸ"6uY =Pjm<N|^ ⫬gP` pn!wdn~6{=+KeJ^ibi;ɐoӄ;nWG#wN.FsT'[m 1 Lo_% n8&.[(2@w6D:*")|(-U(D-Ea1FmrY8wؓ9R/H"`MgA`!$ oo2ZZ.]ɊrL{Q +56K)q{P.H()hOUyXX-=݁ YQdǥAe_ed2&-8FXzvYn;QMv.G؋n=!LCS*ԻXƱb)RoVMH-t}MG &2*'@%4 l(ߔi_KF%v!+ʅDNY+QŜHӾA:"FfZ:$*|yL5Z`L"⮆P\6\`YwR55 g%<#ܱWO y%CQ{8P!hI eEcxK͵eXM)Vi ^$8i"$Zru&BL+%cm@(]ɨeqi*IF[/۸aexk:ny-tin{>jE>Åo}އ6lN=[Ml:̻:kʛҿ)tAXuԧKXL\JnK3ozs|\ ^Tc2cY3<= +ꞌlCjtcg)_nV."֊g/&0kǕJ* {WKYcƭcȜs=w4JrK R'@S<]k^Yz ;_Zr2 j+nȜQAo'-R8G`yCT 9jyB:K‘)k 0RjSdvgJ +ܺ1C3uW M[UF4[W֠-H%W^ .MЊ\ϋf5Q mÇ uoJ; .ٲ,0X8u5TF|!m( (&PM`S]'>jQ޴G16:Yҙ`#&x,7;;Q4V4"%C%0l>&51,:Df7ĉY?l0efi+|DA'C1Ncu(~5jų{ߘvq<UUquf d$*e[L*U:á78zjMh 8XC' Ug6VV +u *+NAy$%hw,!nVR#[Xq. HJ9d^^2;5/7_R/!rlՁxeo-,ZM1*5yknJDuwJXO&(jP6b"k*>+_-ZqOFP$){lRo?d[|ˇoҫgDѽzo|^_~o__˿)]Ozퟬlb +[hwNns4QOz;x^*8L68‰iD+[RRUgy'$?#CJ勤6|zZX=?(~~e F3/M6V{w}D]za +Cx$e Z\d6(C&&lEuhY&.2kxgP1p]0e9iN nAj"g9 T5hĖT{YX^&m i@]~wC*o'6BOVrK*P' DVVHoyQ%}庎D}NkAIEwP[_{z٬jzQ +=afٱ(=QO@ڷO粠)7Smu o[zΡ,Q+Pubo  _|>E9Q=n$-u aƢkܡK!VK[ruEd7N9R5(BC=; US`#RLkY\l(FCBpdH7b.p3f ?*((EXWᔊ8N$w..kA~j(Áe}& ]uv59rSw߭YE_k?VoӏO +<1 RT:vR‡5{HTQ'oIT߬zQXsOL"X.7[Sq G>-s҄ @.3bV=;banfd\<YBj= 5 `"/-W["zp'<=5q#pBdW'bgF#RɣMoS~:hh&,%TH7h[H7’%4^l (׼I@䶹ϝoĉ6u$Y*\Im kʮЊJ+$%nVA=Yt.2$6+!eRaN&Fj͕pCCvy Ll>`1saĿ9tJ0ښ%Cx2!k;!w{`^]I$m!Kݗ阄\FgTᤜ?\>]2@ NBkw]#5Rsh6A Z4ηa G.>D3;RɊo<#A35GVyF2敦[oS):.JG$Z]إͦ)r/) J"׭9gsSe^%/gM4ڒ?dh5c:4l.$?`fbWHq] +o9^L_ӑԲy`F1vVj?VlEA?ftGVϊ=#lʝ6vb GQfUrwt%_b"3>~Mvi㉹IܓL']<\!nF5?d<9z2@SѓgjU+}LO&W4[BMW1k)5fz_?/-+ +?ACM"¹_%+"{fh 2tKM3[kOl,9,E6Nչַ1ckYUIBy ƹj9b!1q +1G{@ v*{7mfX; Zmn$Hg t/n(XoQ4_J\:LO0#cdJp-2P? /}<ùBdfCt=;RFUVwI.>.ϓX7^&Z@m|fK +˷|}{GqJ{XeW(Z#><-uU =m+PCl-Ga\Q]!{*4 +0K@`_/IC5ٖۤA˴M)֋g28PjO~\{q%C;bFAfDK q"4O'nǛOCJAe-N[뼘>.#NMFy+ᗡC%JC0lgRaae̸iHt0c)sFi؟ET ~[X# ]]kl*@awzr"3=`%)gmfb +oXHV %hH=&^FJ =F-|$e'!>D"5)P>%:9cF_= kwkӛۛ.t~ğl25hU-Q*2LڵhMrC4.\(|p c?Q^n#;L҄*H͐*b__=spN<HT +?]fwRD6?d& TID*MEZv['Wgݷҫ1 "8}{{ycb]dIV`aW@CY|'.[{hI:<:a66*hk@-F58"[?Ɣ5CܪWvza\ 'rӅg,@W ܦQlisP#V[ @"uęs%CVҩSh J0F0!v8VY߷4I&Ev!&60,EEIfGx6Kf}r˕Vf7S$S8ɗ=}ElVldIc07^Z0B$+x1ƣ=gt/έvȨ̥ ~^4볧k%E7Ppqu 6[|{pl=ɇrvRzo6C%~ٌѤ4mkoq32X0@tt\ S/npFBh]R`|oEw[+:Rliy-3-ks`='hg<*moDi=2R8-ziyрkDL`;:t_w(DՕ_Vc|̈́FOh- ˄!ie2/Xa!." Lj1 oV5jf=AZ#HOFn;}#XrF8C&^/?=˗{8u1e]+է rψ&`(Ա~yO}#eͶ!H;O>b` ~8}z zi[! UސJУOr \KIW X(2j]nPw Q½zm&v7Nq]eykz< -{%Urg(+% +xz[`.7bmQR^g +$FC3n.nJXe34g1D1іGifsIaacf:嚙3z  +Wo[lpfkHn>Q-ǤIy\a7 ]b[J6%mXWOl(;/Z 4i_E;tȝ'c8gr̫[o??D=ۛt1f[J(,!.oBĦ#q=cV;cA~W6|mLx +z9#TqcoZU2C1>Gp;yM]`M%yZ/5u͹:WSYyU>h#<`~0JzI?̄T\Fa]I8ٖorJ9A7.ɜ6kJ/Y;AU 3UEX iWic^G /0AUIiUƇw(2ԡ-#qh3&Aqo:1EH !:mkژqȡ\d +Š' bYr(hj:#+_a/er,ttQ~@jScSJEnB-\x}'Dxa5J:'鴕kAf} +\([60 endstream endobj 28 0 obj <>stream +HWe g㖺%8YB 慘{"*|A mu^!qܹg^|yq6mcu#t"ؚl,V/?ү9nZLל^ uV_z.ӣw>4wZn)o;y6y ETwBqŽ\nIeet=orV};p0w2`HT +J{Hi DVt*Xx.&!LO J) a0VaESO`Z Fܺ2FcsqVQ¶euL>yG#o//1-[z-p*,bm=Vd[1 :YF64_^x=Ɍ +!f*ı<4\6U8^^yuY􎩕_bDl"ݰqa/dimBuls4gL;g ak,NWߨנY``tcE{sd"~^ h6z~˘V}BD 먔L'˜ @oƊHSeܾ3T%̛6Ŧԉtaǀ`-@l: xE"v=/m9wEfu6x{&2-X݁Z QU..Hs^qh*;sǚa̺l t^YP"_r,|4ެ઒H#W7|vU p)_L*cVi/x^SجX3TDc3y삁IX,lL&؜z>>#|qM|1M{c87YY"DmC +VL f'Q)7 il.0ح kI | ']'DFXē8ob}Z/y݇/_ϟ~{z_|>>k_?˸_z0$_aD.'shbPF{cS$ n `qb/ +7` .Ge(+g [(AdM U~Vc$@GUuS֤@pr|5{fyR} +,ſ[JeQWd}T gr6) ZTZf| D.~8-ܫ5(S֚gcv/đ!ȧ#ӏ]i{RH" x"C{ K5+QD-u[&*.>Ȥ)+`)%MZ̎T vyFRIuҹ =j ("rTpr϶SQIYj"BIf $J@+v"EL%mch2 NfX5ZUIvb-=|MM$,=(~5 ] +R&ٌ M-[gTd 3TH(hYo +ҙ׬͡~wV[1͋! OI\U>3y%[ _7d)t^]I]`]?qdk$*X84"~*ʪ D,^R@Nr8j!a!]1;ZVPK^RT#OWyK̈́S7GnSD5ZDh)9FSV},qޘUJ  +EXN@!Vi=$[;m:(AJ9@/D*ng/F&0}ti0lh86Lծ,eqߣA6ɟtKVYߌAL~{m=gپڱvr(vxy^^rlx7:r]LyEVjO/ls큁3P~M +F`:t+(x5pZ03!{8Ss:J'vHzoޛr:Vm{/Zq9 S瑂& lQ`T~[&| GXX#cX=ղ^n"Y0zhkwqO2$ҮmMp^stZ?b2YR3١&DkP;kyf<:cSG*~\USY'nLVz r3 +,sHzi9NQMjT8sM2خ^[ bګ KTl'i7{3ۯJ{MGp,9eS723ImDִ>Z/͍M5e,%E=.RLCQ Eu&`?f7㈢Ow?Jʀ`k(e H@"ޚ,DI-)N]]uܩ VA>{ :,N7J}q( S5ۡp&m5ᵎJ6h]Ss+E"EsӤA umw)wsBS ~^\WqbHWxb#&kȎ3AjD؞5N.֦()}]խ\lU5%JlmU;V2PJތƒ:J/6 Pbe!ʩsrQChӬr XQHzӱH`5 %jGwbs瓺-locyѥ0k^W|Ex?c? šmmr2:FOsyJ"r1(ɸ'ppFK' ]eH1uSԍ0.ӝ&wT=L+֪qrf=6yM3\nLӤ'0<ԩ@;si<ﮇքGFDJ=!PYr*צ+J ]Rk6n SHJ&5܆O6zsغjܿ~h@UE":]UYn+_ő_x}^76oQR:m&y~ q$ZPRۼ,1(Rg7'HQ2"{Ej{x?q]$y=m( bT;\} +UdqުRo5 + VgTC CTUeU[0&IA)jMJ.jHz5]s wU#Zd7 JHkxW"d +Z +m;yh0$KQK=E]K Qw߭vUMAgsalOANlV Z%B6ֹ+1 1%jm9P:{BCkϡ >qI95(@y$BwDҼzu`Mm68q0)23]$).R~tKSMwqU&vzLRj--oTکKb%Jisv1H(H4hjV|/hL +pmLrFpP ߞm[n>1yy +9 }{'1Uj0Z- ]jn ku+۬Zu66xeaz\!-v9$YN /!$Ļ}I|k +dzQ#ULlIQH'6bHG}îu9/XO)ݽ_anХz+QW|`FD +Й4mXve N^?/k8'a-Tmk}>%R[DPv:BQLjhz||ͫ[$^.Iޮm+'o7KoOس/=>y{hǓߞ}ͫLJwoo1|/^?w7&?߼y7zx~xwWo|pWHWx/=}ө0w1#MC M.U5ZkԇK3g%Yt|Tt~K:F>sȫ]k3`{XC"&w 1#YTU*4=D"jUe]2Rsޅv)pj&^[.Ggd (y3XehH.9;6f)F?o|C9\{h-AwSaq=-Pd5!.묥t6J31KՐNpi7ײFa-{G [0%k|&Y= OɪʗA_$(wMs ?i5G]?0K AgP ՒN~fB~45 B$4ՒΒُK>~QrLPDŽ8 :\ԁs'>t.d#qn}1JwJ3F5Yy"_"h`\Nef6'GUbm [1>%u\۟~R.tgY'E k\Fą#[װ:[31LR[ZE@&A"3MS4vehHHy(#x:9JwC. &"uܿ8[&@<+]DA{[l7=QX (Ly։.h{1PZ.6ʫwd pw/uXwtVhD/yJGO 1QtEʘ A$^U ׫WW3Ddy ٞ:5@ZO֮]e6t .u) u}e[]h +JEM܊[ 7yW9m)EQb `3ǴXn+H՝&_}t=,L:wkh:.~k˶h +ԯ@^jatYE`bS">'$vՉ1hjUFH[DSL^tQԦn45ϊRVH -[$ j BR٦QP-R)3[ri=?Ī%a麭ē{FGsH =\G( {Ty +2"DZ@E_ڲڜ0ӐLEzQal"%YhE1(PSʕ8ĄM?6*OUFQ8՝BjDWlq}k0?& վ9`qȗz"DCr{&TOd!ى",/&@ye!"3azg,d`3XWO~̗޽w2?~ǻW^݇oyݾ~x!4ϫEwoo<|1ˋW_?|Y9_~'n=k-8SJVZ,G"YK,ƈB95={NAEM{x +c#\v'wO++390jaKRm) hzRM%Ǽfl +}'W2q^l0qʞNEOE,jPW6{h^Ȁ^߀|S^nՑ+Ŏ}yόݾ1۵ԧg8OF!㜧sEC68DexUU]n"2_>KiLZ#>_Yd(:iPU &+qa5E1 UI8.sϪA{EAq)y TۦPw܋|򤴽 ˟ ykG.m4ԈNv+d~qo0M]ρyV[Q +A.M6Tw +&Ɩ 57@Imhdxhp`om5 +([ @Yzՙ#~ q [mLA2c3)dHK~yALC/He2p2PhLE<3{^K`.إ?-s۝śS*>`շШzr*L3s$^8eH+mv+¯)3!\`K2^`@\ +IQ ][=* U&j.ƬI]i41 +m8bNO['5yKĖ2GNp4czi742 +1Wm,3#bI:I"VjUcҡ$CG$+9Uݾq[ r˼}@ } _(-#C*QdlM6jd[]!# X, +/?ZCc] + +=W1^ӏq[ Cl oSw?_u_u5mw±UX}7Aq5Q'T܄<,xX}4( +H~ RW ~*N5cqo5CY6m+BkHiUk Ǚ|@J6}9X(AevX[PHsJndUCo/Tv<Hy$NO zx:xbԐd8 r ,($=QҙquPІI% o9HΥ7ocm|ȵf8g6K2T]lF +3i-2VN`Nr ++R,|ّs]G]}c݉UGuCBs GVPр隠͔vz hmhQ/A9]fNC[/ˆDXsV[3,7̚e`lj?6~x)Th yxv!γŸv.膍I^c R3 ϮҞ1/3eAF^2%OhvX}k;dc(e2ڵNҌ;=51]5X1S^gc>'F8YdXfM3[\_7Um>aڞ&5ظ^^vX JsAbSb`|Xso`^Je~yzïpc0_|߽/?=S,O^pֿyzOwlnԔ3Dls7 ǭ2MWIx)2jnrfYlZ܃75Ú~\f,$Z`&L^,v/(ILEf$W6}D+e]l pd WjUzgQB਷F$u=҂xӈVn%F$ΔXLЬ :M5JbT7u]I HM:Zev-q;FJ#dce'sO8ϙ%Bɏ!d2o҅*ko@ +y18%2Y8%(DWsjGҤO6 L@@寤(:Dփ)m-ۀڅ!`X˼F`1 +!b&91V +^"M^OQ3#-)b(ecYhjs,;3:6jy#b9"f=yY-nMWRi 1hl}.h8d*ۮ VaI%&Dk2*eM8[:G&u4ܜ1yļ-& κ=S=FJ6u4=ݤL=rSxSDa [7z;bYc0z(={SgfR!x@}XmŤٜ1 IPYsw GDUO@JASngZNs9#cbE&3u2c +{c}5Lq1-W^ȭEޫh:!3 DJ}=ZO/3aF-: .`'߾Zm"+<+z"1p SDJ^]]"[\ M9`q{nO ' ʕiy zޜg=HYYlk~΀.^ۃԂ]Jod]@cT0<՘#*RU%*a}Vhƀ$)qxX)וo TƕeOC:U°gܴRԝn]{,A`Шӛb$pg/NEq}<$@B{FWF!ߍk?t 3._RG_/=ۚ <ҷwY^c~ԺBXDʷG1 noPښCMFI Қ۳k1MW[G]>9z[j݁j,)芺)k$C\ZR `n>Dr +5nSQ +4#H5vt9(QMF 82Њ[b3i-47#qz C1tq s@ ٪+I0Vw "_&)6׸! `44U1[jPZ҅L1NIU*v*c=KNGè_ ߂ JAM7ƕ|)KL=P,=jڛLUHvI NfE34ʑbEԴ:[3n7+u*Ø 'x|b4 ~d 7J=`׺yˣ}kk%2DUQ3y^!Y8@6s&`[NӖ0O^4թ@yn>γ"+ؓe(Tu9*m'c9c:kZSPCJʏE^zBxQ {!1>Gpt6PJS )#e:! 9ԍH,>T^=@ZI!9'u( =J ?ŬYk`ɍ>{/;"ʽ׼7z;@nmk"P 6[xn@Dw"zdC4}Kg\hu/7 +~yMmVA=Ie6I6oWH:sIT=p`n:,<,d(Jvv<))|[9#P@l8- +T=(pTG# <t$,j`hm5lIѭ q<;6J^82 Ok,p6^,ȿtT cӿ޾x܏V{AƉkЕ5-^+ڢbRڒq+j_lH&/ObŊԱHdrwyv g8* +^% bVپlRO!9RVf+R| }D.=x :;wki 6CDjQMFAg" @웃Tg>$;4#߳b\lG2;+PJ~=ڱ 72ҨOX+d1bͩ!FtAF!HnbaȦT.be4bUP>ArljlSۣtykm>W5$^}]'#o^.+DF>"ۥ Or]ű`&6aÁ *dFѠ'y1D,SFΒ$츞};I`ll"yw t5}VCl39~_ziw>ña{\+OwC~Coʽ=0AM@| ̅t Y:i$˼k5X.C1%ôZapvdSAMNImfbf"MT"k5cU1 +{,#H`S2y) Q'X]jh hc,G.a3xq+KW晭PA%EvԼu[Ӣ +8I,ϊ󍶗0.+ kV8=I N&KRf+aL$پRsEɩ*pqYG}D;c_NO ͖7k{+Dk X2Q}If# ?jp8dy^$"*t?b+vNSi@ʠ h+MKFy0_JL g/6>+ ׭CO(I]mW4yڵӵ1PptV @Y +šxM֦ +& SǏf6sn cxV~ KB!R#%  GnmԺ"$.M *)0D̊E(룿4RqfIk/CF ]cǾSF)9ǯahug1=O;onUp^H2+3\A x+)r= is{+~ +IIk#MOWbhjPIx}ߦ֬`Đ씲(9~~rb}<aE/*tg0V~ry~ &,zmŴfiSlO{:+sSm/H-d)S̶^ݯYTuo׬~ϒΓX^tny:rfG}Il!5~_L͢#r5i`((?RT +2ക!>ov6ѭHAmjbt̸6 RK%n~`5b(V3L-q# +p"?8 +$r#6H4)S )wuӅk=O[WW~ AQ־sU``F-p?#4 \m9uOgc%dz4Zc /q )cj5 fXCAG&]Gv\Yd{x?cU6^$zDJ?A.&xqϓ\}MB5&_^?ͣ~e`-VG8ξ7-oK-?}0ӎd6=e_ 7baFsԌ?nV 5wxdۘwcJOR,&k6}VuMҴ""Iv(B Fm_ƻI^q9٢&1PӒZd/CU.˯Revyz&SWghR^33 ^[znikY9+6v#Y)6hu׾; [N޴.#f\"ѹŠF"p V*3@GDTW)/x템k[Y[(f"{+sotFjF}F:zB) nL먵c2ͯaT +jS"ezJm^@ Cu geߝ&ۮZȌR4F:紋Ui8Mv;+2QL*$񏈳\"彝e]al"^Fmf2RI$ImiC7~3)w I@JBΞ!'YkԸC"0rnfjAHYrJIߦCA4F`U +TI.cF䀖HCv} f`:c ' BR(GĎPeO*e@L#')!@]{Ug9Y%\@<9ԉ|5!"r,*v3"S+ )Mh!U]lYSHz9B)ʐģ!#0kF62%1aAI|*VyḄ$xkF" ƙGMpMq$e(])Ρ}YKy + +(Uoq>.u"ZOd_ǾQWER ⅵs +%wKJu߿7_߽POw?<Ƿw_{}[w?n>{뇇j7?<0Wfdo|m1$д;uK @"vκdK#&cѳ1uL\H}ASDM0U{RvJ1#iA"j<3SvȀV`GHP.AS4S#v)CV Ր{r!~P5uc!pDfֳz Eg6Pw2HIe6,_$6ADo>bJϪa|z]ƚ{Rl7睮ۺN @FJ %uHC"1dZrʓp *k+Iˈ7HC`8kSjȽ?\IRJvK.)^',s(+ eSګc !vdNܧ(1T[o!g$ wD`ᩈ=>ZVjM̅"<'FO)We|Ms,kmT)\1B~V ?R>U;~7"=SCIx8lS16\C3j0ٮy^!iQXCi]Ow=UlHG0昶jieFrv\# M^~@Гtz.HƘeV<3 mA|LWeN"+r-DPt:;HYIB` {A?MIgDC"K$Xz~dw7N+l.@OT91+JVKYRJII4"\[%Y{tP|}Un.=H.512I[UQMk6cmS3,槌R&.B#J z4SYvEn[:b$zf싩55:?:³[J?[ \--%QײNX-HbJQbO$VX6Q4VV5-oٸCvC56(I` R7EiލV vgVUЙ(7`Ӟ< ` E@wN:֐]#nFǙi,a΀|WUcA Cвf*؋ ˷8GiȻ0i t&6;pK107C^CH_|uH_WmKNULo#l\6?TՏ4@{" YBFzVE>͔& #hGvhoꦝ Ķ4,yDZ|΍Ѥ9k\z,)FKzˊep`-ERMrJT$w* + #'"d~a)+<>㤶S㊫YV +~H2#2q ѱ*< }#Qȿ(%mϓt"Tvʬa TX+=m_!N:ѿMsrPna|.om0`#NJʗ0fqHcLLnC}});>Ϳ MQ+PR+u'[;մKSlx>9@2!2UY҄UV™nih#~ߣ%aE^-s{JvF;YMݢ5%]-0nK+7/cSt(⟿A;rȐnAXkb!L ׼MYy3Sx8slqzKlZ|x\H"ځE$xOwZ`_BW75+z"d%_bd2vWP'AX:lkSws,p_|"i[EyػUg2Yl*mCG44˨aVn3?R6W[:? "+rBbHrhdnY(@8 k(3USCR{@8L|5YcRY}.yX9y._1X%E#oڜ +8v-w\!>y\MZ+hLpi[97jՏl[C>un>\R- +dYA?53 Wޓy||s>wUrHW׳iFAG%e>y=J`}rQU['jUukgTHzyKM=qPP.2T>WY)6 HDzV8->G zfsrn ftWw]+3YNI΄:¸Jʏf _:oާsg^OqԤÌƚ\)L/m/OOȄgDŹ4p`;T]v׷:"{kx.@\8<6jh} Yb϶񤖚QuamfXă|֌kU5Q6 +'4jK3=cn0G5_DA!F>8zٰJ%|%A;"o: 1y"oE;фzN^Ik11{ŦMv#ieUyeV- bV_ݤKt莑IJU"c%/͝m$+U7|S ,*$jځk$P{\μ0u +2í-u90guJFzn$ybdh 1"> fYW`)_ /aP7mue~R;\} w3*Ъ^taG94`U + Z]r@7PW .6C#B- u8'Wai- 82{]oBF:n)R L{L=KR+5aZG ДM]a]mmq]d:,\*psEt١38[2ol HT=_75YpXε&wplb{HV88r rAi KÊcw[JY`e^ƽ>q7[CK關/H8sot-YD.lδRD^0獀^^j]B;-#(me$,ϷGqZ-5d>BkH,z*T$0hj^ciDS4='!Ow}t=}qx30SR}4*%rT*eG. i'v#o PYzT֍AcAYĽr8g6]z\"/ŻME,Iu1m`C R¨LMKﭼ!l:T4{NEsCD֒|Jd(xB?!W PhD5H#*W +A#h~6`^sZv7ǰ%;*LٰG!5;a +bi#sW\cnd+qZH|~3#4+Ⱥ1MtU@{t0 ݈>yˈ @n[ Έ.[iIdu}ZioF.v%fU`A8]v |cn:Kla@y<#љ3?*J'Ҝ8 +Fz|W19z:Fː oQF$ʑ#sߡʘ74 +M[h?WnTCD£~IF H(3Qcw36j7{'}sND2y]gv.VvdPr=D V0@l+PR GmN+(a ?hEeNXGp~vJZG 0-pF0H9 {Q^s +9fCR$QIT#ˉAe + P* D``,@iSAo U顄Up;X]MD%2U;\O)0m$$YvKZ3TU[#u|UpŹ=ɎF;7 ̨ˍy7qsؿؼ,odrOoi\EH.sjĆrڼZ`o뿘6 GOOע8.^f|ez~3q8qDwP[`{*'"mo Bذ.G_&jўquv/Q7zQpa~ ePԶߗo|#^ +N F? A2C%3f=^{>n-9n~{<ެ?o ¡έzaſ,ǞUKEUG8_U뻻AT bB^eet o\L!p'Fa%#D ADbv^3cvR"o-p\ITl>Evƒ +'D0[Nƒ“:-\"9 £ +LKa¡gч(}r&G"6z}“ +~_.In/Jdpq +DߗIwF2}g w-=8E}‹Ex Ր 90NOd~8_Q)֦P|1äJ,<\ m"uG Q.VC*d1I⺈ ó~(9 }2\3Bd$,&/>ߋ璖B@_**SJE˝.an-W/ת7 wg|mGi*p,C2jVD=[`r@`efɠ@l;@zVrWQsztUAeʦ[Y|cIY$")zOD0!pp2Tm:iP2%?;L(Hi<410sA½ 2_Nų*rIU> A"RBŠ&v SU=ZQP5RC%!I#6$w;k/両UgHb_ED +dHEgjV 㧺M;4sTB.E?%e"ԒbB uKFbl$7rD\d ňLԤA -ݸlY|~sjE 潙;Rnf;Fj ']z0AO+*J. C4SgШO>%|z8rS(}SbcsӓPMj?AH};hXJ!(92pIDq ey&Zs bz@ӝK1BIKȹ4FbBBh5X;ӕA֛&d +r+B]5_qw $QcYؼyAb3N9NW F`yUEN +VUP걝@s'd#jG )[YEsm, ӝkHTJ~Yep]7k䚭(s*鲆dLTBNJs =k'?+ +$3!RM +ˊZɵ.I~X jT, .f?ŅS(諁vt+$ޟİYCALd"g4IV$j!o\gSx!sV'YMiJ\$q͓ SNk0@N浣YUR]~zvѩEl;0nJsP]m: ֔g$1<: R endstream endobj 29 0 obj <>stream +H͊e7ǟ.@d;MBMӳIu݄@~dK}]M2C-e}xX_ѫ0Im/rS- 5MRZQU\r c@q TT|m|jF}PE>{G6>IE?آT=>'|O96`l[?j+6ml]in֪ -_~/?|~kߵw?S3zi]WDtk5ut#銎 j񩠝cXL$O .Ve\!%*9RQ2HFt[RYR_>,6#Ush3saZlkQL7{2iZy,#!6~$IZԁepܫ^0I]8Wİrq{ +*7eKĘ)sI՘iD6xsɄqzE!~[ +-b_T0o +z{;:rŶ<]ˆAnZj< HX͐XG% ekzXaZ%GajzqɉN*Qrپ)^/8A^!kX>{@YOpԛ낕 nVbx˼ + )Lp: ry˶o%ŽYߢ8MW@a;uB5C6S؀>>jΟL2(j%/`ˆy|VZ]_? ֙蚵[>D6[&-{q,[8l`=kгs({ǕM|[fd5곡o]厪Һ`5P vXz@lˢn-蚺P.pԷh~X=IQ@7h,1ZYʛۉֽ~'\h1G藅՘sPJJ؋-Ef-,5p8znէWD~fz:ka>Мf|Ǒ98PtTk4Qj:jׁ55̆\m5T,öqQ06p7P!ȓI_{̓)- ;p^U,3LJM ᦁx묩Mg|D+Eoe:V*6jK5CZ͗iu=ҖDM23,Cԣ WRdAnS4 +if{bR3u_P!7kHJ$ʔQ8{cj͏ϣl wJ܋ސ8jR}bYb7mYJxqzҩުD+g. M3*ڲB_Khx-jkCjڶ &i١QWw(dU?_ҰpsWO CX; _T|m- &gKL˭GyO3H=8}NL^R-K=䎍E>D>Q4MAa(f6a])",ԟ=\놎sR B(%O[k%ɺ)( -/k¿54*-JϙexiE+E\\CGx 丩 +iIo@P"α@{8'\*7m +u{t.WZhm7TQT"?LTJM`LI$Ɓ&r!6nr|e1D1]Sl$`Qc: Z..$@(oeTTzNQg w#ܑEvǢxM(;ŠR5.2'#Ub CrJJB/i9v*Q,/ e \PJcx|x+uB|)Hۥ ˽WN-e|tbcluY-ruk{qK޼RQ2Br$6EENXp֛hv5N1YE< r1UAE M-ÆXybTDCǧM~ǧ ۖOfM$}TU㇯_?}o~[Cx-? _+4t+̮NrhPikPު!1Бb\SȁV ,hD0ds u1="fUX њ(փIp)'XgrYHkzBXq+QA(f 6+2t|B[ Vw5=.l϶Rb:Ͽn>U hH[&;׍bow?yVDff6rDa2^}Tb|- BBm"VcSauF O!L4na-EDCYc*ԛW r-JEŦ#S'ѮgPz)O|cH ѱ+-u@7_ÎW%>R-BwOٲ7P4UPR< %1n'+{2M%ƹHrMk%CQU D4DLH<^ʵ3;!C93HG{ˠS|i`i3% :Adrw Q =ó ǐWׄ9'4浙Z{ɻz`Ā^Lrg̘FzaFT`,֪J,H@cxH_s\s\ +^ipѻ+ɗ|^gt]5t2lޛ#$OԽ<,)sGl0A^ŌT>yc9k`V33 _T7P)6:Lzi*kVztNzV$mpQpԂI/[*<+\U"{g*|;Ԃ}RֹudU>U`ϪGعn(rP w34;lu2G`qS)`U<;P`q8lx14>QtL xYo<{ciiM?i;G L-eLiϯ|&WtPj 3Yܛ/8>.hȽcrѽ,&;jcп˷?0T^> 2j?5"l܁AiWD;@4\ulJrb`a|(֛|gÂ:bpТ4/5*\m~CLHskrg14*"65Y"vէvŰi1"E*:Ty kK'qYZݹְnrع+'5:*4ڷ+ +LTE#T(1 .Z:H8׭pbh퀜)׸uCv_1]yB#B**rm;: 6uʭj5iP{RW֖<󆂵t(Di9 wrc#xHz͐J1S8ӪТ,S ]s#K vEjo7c ˆ2q ݗʯm8TzŐyYfQmD`wwF؝nYhHשuTE~5HiT[wG? (JwiڏA3 (Im(Jf}JLڸnNO_a^O|'ы֭9}J\:;Rݸ:tufzycϏlsozLވ8 #ρۛʨٻ_0h)x]lwg6mXQjK7ct$7Nsyq%7Pqsz7+yb()Sk03*&`h<,)sGl0R7b74mM$8 [M#ly:/yZ268'8{\D,8*_a\FVho菧Sb=;mC9\chO/[/\7t fBq342G`1o;ԕg,~ MzI*}78ָ.v6rW3x(^ݹɆm)H8 slNwd ;J1ʕyHzx81ہ#=2%"NNÚ CB8omٻ evÙԢڼd#wZu!'Q<:+7w+}ج+q4c7[a6?x?E1D?aٲL/Lq'$ʀE~{4!+ +A uFCi%OɾA PfV6bEHa?նcmC~ 0m/A ^1Oiuܯ/)R™>8)^G[Er]WES+"?%vPu{ .::U&޹n-Ct T +Z9cPFT1:!X {K{}1c">$N1jmJѵbs]H*DkWHQJAdɃODN1I,iw*mT'D+BjQW 4.EL,DB W4(W"czPV8|T&ŊSaTDuf0`vy97\̷7&l\K\7@G1D!C00#ٚ~0t)in4x +C֡f{&W.hC6TP;7ooNoy~oA$Cޠ0->f $lW,>`![%̣7M2bi2jbiCN0WEDFĶ CWK *z0+窫<=º~+=v=:=P=`(VBΥ2@2!:wn-M/5Nt^ffT6P"4'f(*$(!:hh7T$8\2ov +L-T\#7U|>6V >J|@PeN6R.599IT*\[Ѷ/-xwn/=B(vcݥ"R +jh}Կa"js0WO!0Lzcwcw9^i09^5RAU+G_.h75k)- yD؉irLŕc&&PP[b&i{[R9p%‹ץχO^>|t{ۋۯ/ﶓG_XonOqٟ`, ?ۻi㛛y鷗矿xuWռ<Κ=PLtک>8;~vzyqۋW8O;v`{'yﯾlc5#'~y~#;1C%D5HԐ\X}qz@zR,_?z7f{>; 4AhkF\PR6T34R]n.患Ч࿜,P%{q<X\Rue7MnuU/(.&A}] +6m{s`S´Ӝ݋u{% a Nš.Ga 8-yݡmPvbW>ft'_SlG^~r6l_o'?:;{{%b!"`Gϩb- @ ոlbBbHau$M;FLXa @Z$H+ OODdLׇqͩ~2##"`+598Z{J,f4 \vG`NfUCAmrB̦pU6\'I0Te4jo2x 2y>s$o*uPվX@R\\dݒKřL'H,4"@;f޲XeK: m ;(V/CUB& H5ս + Ll0MS3YO<1Օd*Zc#C'G/oǧm`Az-[  3 e{GO#ɔd <#c,ZY$Ye0]>VvfɤdE;uo o@1Ş)`I<Ӎ@A#TYX-o*;5tXAZE:u4$ ơѸq##l1y%#yq-bn"mb%|Ju BHDW oi +T`h#"@'n8'd{oA Ь>'Dԫ$G  +@`P1Ґ" Hw5.bS7{/:n|# *YwśxcMgy#ԟS>ɋEȒeP9fQcMBs=[UbJ<CM\%$;)X[凝EOYF߁ V+'U< *6b͐:Ӽ GGJTw)XEIWs6[$O-[Žٛ/7AF.HDzMR{y4Q%A;r"gЈ@:(5J_ʒgZePn*{-CW$ ,tދ{9?Aj!aGBI$A-LIOqبf^YM^}0&kIzh s2tE{1d ḙ%[́#ɔ=c#IO16XjR@daVXbN-2KfjE .4tMLC s̲q>g;^r#E4:L\!<{PXNƛi?4W[dIcLn6܍'cNrÝaY«` P0$d)4/CN(<'Ơ~S'ꗺFeϪаU!gՇ_APVvu{B<q+0tSArz"i^7ܨtcGka:cLIAxUXAl" 4Fb *֓_4QMSn0lRH43p OM%![4ݾ~Uw]G +Q }7A=~^ˣ .KsM!L ʑ$pϡ5^ZX*iJD_EyPG< +iN*e@eq'l.C׽V%QAq Ʃsz356Z`[XlU26VtI%$p|yIy&΢vjS=pkECaNyvyn>uxF8WCN?r˿ӊ/|?eŲ㈢_Ppdž+og7C/#R4,w~p՜ߟ!Nü󭟩*Fey2sBm0HO/7͝#0ޑ#wB|ڧ0YEPm/'7yzb.^3IXf,cbXA: +v<##]<؛pX7$YjF}Fhi}xxKU(}tp?%IH6tGp[O-f#Iz~DZqj9rYe㎠+"7|Ҩ?n`dv^_ХAIc?[ybs6Nȟ~{<=_#XyNy0Krժ)|My>7=).$Bl#dS34Lޢ07_Q}nb÷,n!D ]5&BHGE>?X|9ѻQH>sMH29CD* q.BhZ_Ej8D/ݵJh憚FHv7D ,ά +iQkqb㥪~tpbn$`[)VQ/{ؚvyI {Z@I g#qIoaA0y=oX>l65cF g^q:V=ܭѩ,#Gٟ4e+;t6+6Z YY#8[ZQ-˒}!b +؎^dzҲ1W>Njc:v1m>P7ݚrޒ8NsR8虼+)P9|y۶{Uk։.n{1gIQkXPLٸgݨC̢ opL2=8͆{ٶbvz>RX$UN.4IuEldlUŠDEP@DSYcI%ۍE$ M="8H3hedpoY|wJHu oKZ +?I #הvN2]{|/LBW[ke4Nc4i>p2bb( 4\fόm{p,qM;T +e`Z GIIc$>?8xP,7v]u9Qqb"4!4Nf}5`\ P0A`EeYVT^@p1rc-&m}T3MJ \>OL:~#=o:lm&39Z :aoHE/"~j!(00Nt]w{ +#tg#sq] ["j%KorU{ɠ,CDSU7_qih&p(,8 ڥv){؆8edya؄GC2'8<&JH@44I7lhh^[K󩁡<϶Bk#ƌ8}y1f-g1Fj33X 'WqF8KC1\ĖJmIW4F]nZWYhx2A)dȴCr!aey|s7ɳȍ۳ŤXs'J̈́3c ?E.34U wPMt31R=IpXCr0S-y%iScw*X>,-Q:ƆsA|~: faF#xߡ %uR]];00%LDUԉ`nGdgcb{έ3aU&C\Vթ{BXFW[Pw"]{,r[HK=K<;ǒƫ$í.5CbS`qǀu*NJ62V_7*gsi@T"'i +\Qބ5Ҹ@<2d I5\Ĝ`PqԄ.z 5LQI$B22P* 7XtHj^9&$*v> 6F׊¾*Wdo)d] +6#䚢!Nnn- +B'ܤG؈B7VpِHЇ @%I?a&ž.\4xCu<9X??͟.i]naHe/yVtr5&a~o~y5|Vr۫&ޜt6_LA5t:.ѰN Т&HhMz*gX Oƣeu͘fo{x$g|:l/UݞSidOڰ"H`1n a0&~FW7e/owﮫ5A;hx|L?N#FSHoc d4tMGD +N5jI6mC +? oOқka|;9Q`BЎh1!"tSeh-XweHE@љx/-ɋDJKr342k=V`@ƠkQHe$Gs0MZ "VuW7‚Ђq@6q~  vVwpJr1-;DJ-E>!ΎH-abI{+*LIh +KuՆi +sXwwn=b, ZjBT;:+ZkF?Ol_@F$6AVn-:XwsO*=8 2+1-r3^;pA +@ڢP4EE#"7KBt=P(aDk%k N@ R9 +Wvh5TwrpT1hy,=-<.%Xh%N8MāI:F(4J`T2[֬=-$k,R + ka:t![^/RCymM J 4 : ++UZ!< Z/x<ђUPttE 6r`JMFI4SDi7lqjG{,#. 2y ݳʭ.R|x&?NB̴BHprpjbsk;+^6[olJR1U +։K' + CZ(5IJXhXUyN >!G9dA%G~[E*Ck DҼBy["vW=u0 =\Qk},oĈو]@&̊ExEU",ʍ`ݕMt*WΦ* x67Gdr7vX<6 KJ16F V!H\9>~ھ'B.# ׊㚰iPf[758G;o꺜TrVGvcnST[^eNg* =P&!bPҞA@YF}pt`/ q%;`S}@AuѶ[JWو9P.4$ E)) h~}UFZy~KCqήԏ[lƶ׵=WWʠ5x8< tv}ӛ_zWUomy5|Vr۫&ޜt6_LA!t:.ѰN;dOhO)*G%zUgX0GE9՗vi1Na:{VOn'1?{~z%8+`` e`w`?$ &g?ٓtk_ AA @_^:H +[y5As-!uxuZqyJSX컛_EMUp[ȷ͡˟Q'ZݔbU~)E);O~ Cq x.s11`*JMUvAUY(T|&Ґ6$S 8'l|3/iJ̸t~"as!\ Rv^Vetԡi򊐸O d`Xi\3Γ% ;ox%D,!d8YXX)Q Ƀ% {eaoTS@o̢<";<(R\q$AiuWgq\ +7͆,F +} wBaSBЬAjZ\ */,S%H&HxiY:gGb *wtrZw +o^m!t^ibJٽ>5}ӕe4 ˨ ^-)gMNYr\ ZzH'1spZGm)D3N1a2 ?roZkjsD`RY͍@gI<4-@Z G+ +iKMLzt}NXIb m kPѤԱp;ȇ 3?.YZ*2ufpɃoXaO978g +l +lR` 6kl5C,959G9g|!BQz)) ^_ԣ:Vp9 a l:*)}N +l}\5SkčC,(\STŵQ\5 A{!jc /pE`#d%؎l[?YCp8Y5H!ژ5l8-zMac1w endstream endobj 6 0 obj [5 0 R] endobj 30 0 obj <> endobj xref 0 31 0000000000 65535 f +0000000016 00000 n +0000000144 00000 n +0000027923 00000 n +0000000000 00000 f +0000034249 00000 n +0000225254 00000 n +0000027974 00000 n +0000028320 00000 n +0000034544 00000 n +0000034433 00000 n +0000033520 00000 n +0000033688 00000 n +0000033736 00000 n +0000034317 00000 n +0000034348 00000 n +0000034617 00000 n +0000035029 00000 n +0000036113 00000 n +0000043301 00000 n +0000054695 00000 n +0000067632 00000 n +0000078141 00000 n +0000096415 00000 n +0000117941 00000 n +0000128873 00000 n +0000132792 00000 n +0000156405 00000 n +0000182962 00000 n +0000207451 00000 n +0000225277 00000 n +trailer <<82798E1B64F7480094F720CACA1C92FD>]>> startxref 225485 %%EOF \ No newline at end of file diff --git a/thesis/Thesis.tex b/thesis/Thesis.tex new file mode 100644 index 0000000..d122a9d --- /dev/null +++ b/thesis/Thesis.tex @@ -0,0 +1,107 @@ +%% ---------------------------------------------------------------- +%% Thesis.tex -- main +%% ---------------------------------------------------------------- + +\documentclass[a4paper, 10pt, oneside]{memoir} +%% Use the option citeauthor to be able to use citet. The default cite will still work. +\usepackage[citeauthor]{basilea} +\usepackage{minted} +\usepackage{enumitem} +\usepackage{caption} +\usepackage{float} +\usepackage{listings} + +\usepackage[toc, acronym]{glossaries} +\makeglossaries + +%% ---------------------------------------------------------------- + +\title {IOTTB: An Automation Testbed for IOT Devices} +\thesistype {Bachelor Project} + +\department {Department of Mathematics and Computer Science} +\faculty {Natural Science Faculty of the University of Basel} +\research {Privacy Enhancing Technologies \\ https://pet.dmi.unibas.ch} + +\examiner {Prof. Dr. Isabel Wagner} +\supervisor {Valentyna Pavliv} + +\authors {Sebastian Lenzlinger} +\email {sebastian.lenzlinger@unibas.ch} +\immatriculnr {2018-775-494} + +\date {30. June 2024} + +% switch here for the german logo to logo-de +\ulogo {Template/logo-en} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%% Glossary and Acronyms +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\setacronymstyle{long-short} +\newacronym{iot}{IoT}{Internet of Things} +\newacronym{os}{OS}{Operating System} +\newacronym{cli}{CLI}{Command Line Interface} +\newacronym{ap}{AP}{Access Point} +\newacronym{uuid}{UUID}{Universally Unique Identifier} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Personal commands specific to my report +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\iot}{\gls{iot} } +\newcommand{\iottbsc}{\textsc{iottb} } +\newcommand{\iottb}{\texttt{iottb} } +\newcommand{\os}{\gls{os} } +\newcommand{\ap}{\gls{ap} } +\newcommand{\db}{\texttt{iottb.db} } +\newcommand{\sniff}{\texttt{sniff} } +\newcommand{\addev}{\texttt{add-device} } +\newcommand{\dsn}{\texttt{device\_short\_name} } +\newcommand{\dname}{\texttt{device\_name} } +\newcommand{\did}{\texttt{device\_id} } +\newcommand{\cid}{\texttt{capture\_id} } +\newcommand{\uuid}{\gls{uuid}} +\newcommand{\cli}{\gls{cli} } +\newcommand{\mytodo}[1][0]{{\color{red}\textsc{TODO}: #1 \label{todo:#1}}} +%% ---------------------------------------------------------------- +\begin{document} + +% for english use \selectlanguage{english}, for german use \selectlanguage{ngerman} +\selectlanguage{english} + +\thesisfront +\maketitle +\pagestyle{thesis} +%% ---------------------------------------------------------------- +% \input{./Front/Acknowledgment} +%% ---------------------------------------------------------------- +\input{./Front/Abstract} +%% ---------------------------------------------------------------- +\thesistoc +%% ---------------------------------------------------------------- +%\thesisnomencl +%% ---------------------------------------------------------------- +\thesismain + +\input{./Chapters/ch1-introduction} +\input{Chapters/ch2-background} +\input{Chapters/ch3-adaptation} +\input{Chapters/ch4-iottb} +\input{Chapters/ch5-evaluation} +\input{Chapters/ch6-conclusion} + +%% ---------------------------------------------------------------- +\thesisappendix +\printglossary[type=\acronymtype] +\thesisbib +\begin{appendices} + \input{./Back/AppendixA} + \input{./Back/AppendixB} + \input{Back/CommandRef} +\end{appendices} +%% ---------------------------------------------------------------- +\thesisback +\iflanguage{english} + {\includepdf{./Back/wissensch_Redlichkeit_E_09-2023.pdf}} + {\includepdf{./Back/wissensch_Redlichkeit_D_09-2023.pdf}} +%% ---------------------------------------------------------------- +\end{document} +%% ---------------------------------------------------------------- diff --git a/thesis/appendixa-after-add-device-dir.txt b/thesis/appendixa-after-add-device-dir.txt new file mode 100644 index 0000000..784d2b1 --- /dev/null +++ b/thesis/appendixa-after-add-device-dir.txt @@ -0,0 +1,55 @@ + { + "DefaultDatabase": "showcase", + "DefaultDatabasePath": "/home/seb", + "DatabaseLocations": { + "iottb.db": "/home/seb", + "showcase": "/home/seb" + } +} + +Database: showcase +Database Location: /home/seb/showcase +$ tree +iphone-13/ + |--device_metadata.json +roomba/ + |-- device_metadata.json + +{ + "device_id": "a2158407-2b73-428d-9f94-cc8f3a497478", + "device_name": "iPhone 13 (year 2043)", + "aliases": [ + "iphone-13--year-2043-", + "iPhone-13--year-2043-", + "iPhone 13 (year 2043)", + "iphone-13" + ], + "canonical_name": "iphone-13", + "date_added": "2024-07-01T00:54:56.655710", + "description": "", + "model": "", + "manufacturer": "", + "current_firmware_version": "", + "device_type": "", + "supported_interfaces": "", + "companion_applications": "", + "last_metadata_update": "2024-07-01T00:54:56.655719" +} + +{ + "device_id": "339de2af-c3ef-4c5d-a9c8-a03f7a65cc0a", + "device_name": "roomba", + "aliases": [ + "roomba" + ], + "canonical_name": "roomba", + "date_added": "2024-07-01T00:54:34.715850", + "description": "", + "model": "", + "manufacturer": "", + "current_firmware_version": "", + "device_type": "", + "supported_interfaces": "", + "companion_applications": "", + "last_metadata_update": "2024-07-01T00:54:34.715859" +} diff --git a/thesis/basilea.sty b/thesis/basilea.sty new file mode 100644 index 0000000..4ba792c --- /dev/null +++ b/thesis/basilea.sty @@ -0,0 +1,252 @@ +%% +%% This file is originally based on 'ECSthesis.cls' by Steve R. Gunn +%% and 'phdthesis.sty' by Jamie Stevens. In this new version many parts +%% have been replaced by calls to the memoir package. Many existing +%% templates using the memoir served as model. +%% +%% v.2.0 +%% +%% 2014, Ivan Giangreco +%% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{basilea}[2014] + +\newcommand*{\basileaBibStyle}{thesis} + +%% +%% Provides the option to use \citet to get the authors name +%% Internally, this changes the bibliographystyle from thesis to plainnat +%% +\DeclareOption{citeauthor}{ + \renewcommand*{\basileaBibStyle}{plainnat} +} +%% +%% Provides the default option to not use \citet to get the authors name +%% Internally, this sets the bibliographystyle to thesis +%% +\DeclareOption{citenumber}{ + \renewcommand*{\basileaBibStyle}{thesis} +} + +\ExecuteOptions{citenumber} + +\ProcessOptions\relax + +\usepackage[ngerman, english]{babel} +\usepackage[utf8]{inputenc} + +% text to be set for frontpage +\newcommand*{\supervisor}[1]{\def\supervisorint{#1}} +\newcommand*{\examiner}[1]{\def\examinerint{#1}} +\newcommand*{\authors}[1]{\def\authorsint{#1}} +\newcommand*{\email}[1]{\def\emailint{#1}} +\newcommand*{\ulogo}[1]{\def\universitylogoint{#1}} +\newcommand*{\department}[1]{\def\departmentint{#1}} +\newcommand*{\faculty}[1]{\def\facultyint{#1}} +\newcommand*{\research}[1]{\def\researchgroupint{#1}} +\newcommand*{\thesistype}[1]{\def\thesistypeint{#1}} +\newcommand*{\immatriculnr}[1]{\def\immatriculnrint{#1}} + +\def\titleint{\@title} +\def\dateint{\@date} + +% settings for nomenclature (i.e. the abbreviations) +% - for using in text use e.g. \nomenclature{LED}{Light-Emitting Diode} +% this will print the text directly as Light-Emitting Diode (LED) +% - the abbreviations for the whole document can be printed with the command \thesisnomencl +% - invoke MakeIndex to create a *.nlo file (see also documentation of nomenclature package) +\usepackage{nomencl} +\newcommand*{\nomenclint}{} +\let\nomenclint\nomenclature +\renewcommand*{\nomenclature}[2]{\textit{#2} (#1) \nomenclint{#1}{#2}} +\makenomenclature +\newcommand*{\thesisnomencl}{\renewcommand{\nomname}{\iflanguage{english}{Abbreviations}{Abkürzungsverzeichnis}}\printnomenclature\addcontentsline{toc}{chapter}{\iflanguage{english}{Abbreviations}{Abkürzungsverzeichnis}}} + +% graphics +% (see also floats section in this document for more options) +\usepackage{eso-pic} +\usepackage{everyshi} +\usepackage{ifthen} +\usepackage{calc} +\usepackage{pdfpages} +\graphicspath{{Figures/}} +\newsubfloat{figure} + +% definition of fonts (phv is Helvetica, pcr is Courrier) +\renewcommand{\sfdefault}{phv} +\renewcommand{\ttdefault}{pcr} + +% definition of colors +\usepackage{color,graphicx} +\definecolor{chaptercolor}{rgb}{.7,.7,.7} +\definecolor{emphasizecolor}{rgb}{.7,.7,.7} + +% margins +\setlrmarginsandblock{3.5cm}{3.5cm}{*} +\setulmarginsandblock{3.5cm}{3.5cm}{*} +\checkandfixthelayout + +% document organization +\setsecnumdepth{subsubsection} +\setcounter{tocdepth}{3} +\newcounter{dummy} +\newcommand\addtotoc[1]{ +\refstepcounter{dummy} +\addcontentsline{toc}{chapter}{#1}} + +% definition of chapter style (i.e. large number and text) +\setlength{\beforechapskip}{50pt} +\setlength{\afterchapskip}{1pt} +\newcommand*{\colorchapnumber}{\color{chaptercolor}} +\newcommand*{\fontchapnumber}{\usefont{T1}{phv}{b}{n}\fontsize{100}{130}\selectfont} +\newcommand*{\fontchaptitle}{\sffamily\bfseries\huge} +\renewcommand*{\afterchapternum}{} +\renewcommand*{\printchaptername}{} +\setlength{\midchapskip}{20mm} +\renewcommand*{\chapternamenum}{} +\renewcommand*{\printchapternum}{\raggedleft{\colorchapnumber\fontchapnumber\thechapter}\par} +\renewcommand*{\printchaptertitle}[1]{\raggedleft\fontchaptitle{#1}\par \vspace{30pt} \nobreak} + +% definition of (subsub)section styles +\setsecheadstyle{\sffamily\Large} +\setbeforesecskip{25pt} +\setaftersecskip{1pt} + +\setsubsecheadstyle{\sffamily\large} +\setbeforesubsecskip{20pt} +\setaftersubsecskip{1pt} + +\setsubsubsecheadstyle{\sffamily\normalsize} +\setbeforesubsubsecskip{20pt} +\setaftersubsubsecskip{1pt} + +% definition of line spacing, indent of paragraph, etc. +\OnehalfSpacing +\setlength{\parindent}{0pt} +\setlength{\parskip}{0pt} +\raggedbottom + +% header, footer +\nouppercaseheads +\renewcommand{\chaptermark}[1]{\markboth{#1}{}} +\renewcommand{\sectionmark}[1]{\markright{#1}{}} + +\makepagestyle{thesis} +\makeevenhead{thesis}{\leftmark}{}{\thepage} +\makeoddhead{thesis}{\leftmark}{}{\thepage} +\makeheadrule{thesis}{\textwidth}{0.2pt} +\makeevenfoot{thesis}{}{}{} +\makeoddfoot{thesis}{}{}{} +\copypagestyle{chapter}{empty} + +% footnotes +\setlength{\skip\footins}{20pt} +\usepackage[hang]{footmisc} +\setlength{\footnotemargin}{10pt} +\usepackage{chngcntr} +\counterwithout{footnote}{chapter} + +% add highlighting possibilities +% use \hlt to highlight parts of text, e.g. \hlt{this is important} +\usepackage{soul} +\newcommand{\hlt}[1]{\hl{#1}} + +% various imports +\usepackage{amsmath,amsfonts,amssymb,amscd,amsthm} + +% clearing pages +\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else\hbox{}\thispagestyle{empty}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi} +\newcommand*{\tmpcleardoublepage}{} +\let\tmpcleardoublepage\cleardoublepage + +% floats +\captionstyle{\raggedright} +\setfloatlocations{figure}{ht!} +\setlength{\intextsep}{10pt} +\setlength{\textfloatsep}{10pt} + +% definition of table of contents (i.e. title, header text, appearance in pdf-TOC, etc.) +\newcommand*{\thesistoc}{\cleardoublepage\renewcommand*{\contentsname}{\iflanguage{english}{Table of Contents}{Inhaltsverzeichnis}} \createplainmark{toc}{both}{\iflanguage{english}{Table of Contents}{Inhaltsverzeichnis}} \currentpdfbookmark{\iflanguage{english}{Table of Contents}{Inhaltsverzeichnis}}{toc} \tableofcontents*} +% adds the word "Appendix" in front of chapters in the appendix section +\renewcommand*{\cftappendixname}{\iflanguage{english}{Appendix}{Anhang}\space} + +% definition of bibliography +\newcommand*{\thesisbib}{\cleardoublepage\renewcommand*{\contentsname}{\iflanguage{english}{Bibliography}{Literaturverzeichnis}} \createplainmark{bib}{both}{\iflanguage{english}{Bibliography}{Literaturverzeichnis}}\bibliographystyle{\basileaBibStyle}\bibliography{references}} +\usepackage[square, numbers, comma, sort&compress]{natbib} + +% document structure +\newcommand*{\thesisfront}{\frontmatter \let\cleardoublepage\clearpage } +\newcommand*{\thesismain}{ \addtocontents{toc}{\vspace{2em}} \mainmatter \let\cleardoublepage\tmpcleardoublepage } +\newcommand*{\thesisappendix}{ \addtocontents{toc}{\vspace{2em}} \appendix \let\cleardoublepage\clearpage} + +\newcommand*{\thesisback}{ \addtocontents{toc}{\vspace{2em}} \backmatter \let\cleardoublepage\clearpage} + +% title page +\renewcommand\maketitle{ + \hypersetup{pdftitle={\@title}} + \hypersetup{pdfauthor=\authorsint} + \thispagestyle{empty} + {\raggedright\includegraphics{\universitylogoint}}\par + \begin{center} + \vspace{3cm} + {\Huge \sffamily \bfseries \@title \par} + \vspace{0.5cm} + {\thesistypeint \par} + \vspace{3cm} + {\facultyint \par} + {\departmentint \par} + {\researchgroupint \par} + \vspace{1.5cm} + {\iflanguage{english}{Examiner}{Beurteiler}: \examinerint \par} + {\iflanguage{english}{Supervisor}{Zweitbeurteiler}: \supervisorint \par} + \vspace{1.5cm} + {\authorsint \par} + {\emailint \par} + {\immatriculnrint \par} + \vfill + {\@date \par} + \end{center} +} + +% declaration +\newcommand{\formlabel}[2]{\vspace{0.25cm}\textbf{\sffamily \footnotesize #1 --- #2}\\} + +% urls +\usepackage{url} +\urlstyle{same} + +% footnotes +\usepackage{chngcntr} +\counterwithout{footnote}{chapter} + +% math +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{amsfonts} + +% reference settings +\usepackage[pdfpagemode={UseOutlines},bookmarks=true,bookmarksopen=true, + bookmarksopenlevel=0,bookmarksnumbered=true,hypertexnames=false, + colorlinks,linkcolor={black},citecolor={black},urlcolor={black}, filecolor={black}, + pdfstartview={FitV}, breaklinks=true, unicode]{hyperref} +\usepackage[capitalize]{cleveref} +% rename here, e.g. \crefname{listing}{Algorithm}{Algorithm} + + + +% todos +\usepackage[colorinlistoftodos, textwidth=2cm, disable]{todonotes} % add ",disable" in [] to remove all todos, missing figures and the todo list +\newcommand{\todoEmpty}[2][]{\todo[fancyline, #1]{#2}} +\newcommand{\todoMissing}[2][]{\todoEmpty[color=magenta!80, linecolor=magenta!80, #1]{Missing: #2}} +\newcommand{\todoCheck}[2][]{\todoEmpty[color=red!80, linecolor=red!80, #1]{Check: #2}} +\newcommand{\todoRevise}[2][]{\todoEmpty[color=orange!80, linecolor=orange!80, #1]{Revise: #2}} +\newcommand{\todoCitation}[2][]{\todoEmpty[color=yellow!80, linecolor=yellow!80, #1]{Citation: #2}} +\newcommand{\todoLanguage}[2][]{\todoEmpty[color=blue!40!white, linecolor=blue!40!white, #1]{Language: #2}} +\newcommand{\todoQuestion}[2][]{\todoEmpty[color=green!80!white, linecolor=green!80!white, #1]{Question: #2}} +\newcommand{\todoNote}[2][]{\todoEmpty[color=black!20!white, linecolor=black!20!white, #1]{Note: #2}} +\newcommand{\todoFigure}[5]{\begin{figure}[#1]\centering\missingfigure[figwidth=#2]{#3}\caption{#4}\label{#5}\end{figure}} + +\endinput + +%% End of file 'basilea.sty' diff --git a/thesis/capture_metadata_template.json b/thesis/capture_metadata_template.json new file mode 100644 index 0000000..ec49e81 --- /dev/null +++ b/thesis/capture_metadata_template.json @@ -0,0 +1,15 @@ +{ + "device_id": "", + "capture_id": "", + "capture_date": "", + "capture_file": "", + "start_time": "", + "stop_time": "", + "capture_duration": "", + "interfaces": "", + "device_ip_address": "", + "device_mac_address": "", + "contacted_ip_address": [], + "device_firmware_version": "", + "campanion_app": "" +} \ No newline at end of file diff --git a/thesis/cfg-shema.json b/thesis/cfg-shema.json new file mode 100644 index 0000000..dc2b2e5 --- /dev/null +++ b/thesis/cfg-shema.json @@ -0,0 +1,7 @@ + { + "DefaultDatabase": "iottb.db", + "DefaultDatabasePath": $HOME, + "DatabaseLocations": { + : + } +} diff --git a/thesis/command_reference.txt b/thesis/command_reference.txt new file mode 100644 index 0000000..8bc3ae3 --- /dev/null +++ b/thesis/command_reference.txt @@ -0,0 +1,110 @@ +Usage: iottb [OPTIONS] COMMAND [ARGS]... + +Options: + -v, --verbosity Set verbosity [default: 0; 0<=x<=3] + -d, --debug Enable debug mode + --dry-run [default: True] + --cfg-file PATH Path to iottb config file [default: + /home/seb/.config/iottb/iottb.cfg] + --help Show this message and exit. + +Commands: + add-device Add a device to a database + init-db + rm-cfg Removes the cfg file from the filesystem. + rm-dbs Removes ALL(!) databases from the filesystem if... + set-key-in-table-to Edit config or metadata files. + show-all Show everything: configuration, databases, and... + show-cfg Show the current configuration context + sniff Sniff packets with tcpdump +Usage: iottb init-db [OPTIONS] + +Options: + -d, --dest PATH Location to put (new) iottb database + -n, --name TEXT Name of new database. [default: iottb.db] + --update-default / --no-update-default + If new db should be set as the new default + [default: update-default] + --help Show this message and exit. +Usage: iottb add-device [OPTIONS] + + Add a device to a database + +Options: + --dev, --device-name TEXT The name of the device to be added. If this + string contains spaces or other special + characters normalization is + performed to derive a canonical name [required] + --db, --database DIRECTORY Database in which to add this device. If not + specified use default from config. [env var: + IOTTB_DB] + --guided Add device interactively [env var: + IOTTB_GUIDED_ADD] + --help Show this message and exit. +Usage: iottb sniff [OPTIONS] [TCPDUMP-ARGS] [DEVICE] + + Sniff packets with tcpdump + +Options: + Testbed sources: + --db, --database TEXT Database of device. Only needed if not current + default. [env var: IOTTB_DB] + --app TEXT Companion app being used during capture + Runtime behaviour: + --unsafe Disable checks for otherwise required options. + [env var: IOTTB_UNSAFE] + --guided [env var: IOTTB_GUIDED] + --pre TEXT Script to be executed before main command is + started. + --post TEXT Script to be executed upon completion of main + command. + Tcpdump options: + -i, --interface TEXT Network interface to capture on.If not specified + tcpdump tries to find and appropriate one. [env + var: IOTTB_CAPTURE_INTERFACE] + -a, --address TEXT IP or MAC address to filter packets by. [env var: + IOTTB_CAPTURE_ADDRESS] + -I, --monitor-mode Put interface into monitor mode. + --ff TEXT tcpdump filter as string or file path. [env var: + IOTTB_CAPTURE_FILTER] + -#, --print-pacno Print packet number at beginning of line. True by + default. [default: True] + -e, --print-ll Print link layer headers. True by default. + -c, --count INTEGER Number of packets to capture. [default: 1000] + --help Show this message and exit. +Utility Commands mostly for development +Usage: iottb rm-cfg [OPTIONS] + + Removes the cfg file from the filesystem. + + This is mostly a utility during development. Once non-standard database + locations are implemented, deleting this would lead to iottb not being able + to find them anymore. + +Options: + --yes Confirm the action without prompting. + --help Show this message and exit. +Usage: iottb rm-dbs [OPTIONS] + + Removes ALL(!) databases from the filesystem if they're empty. + + Development utility currently unfit for use. + +Options: + --yes Confirm the action without prompting. + --help Show this message and exit. +Usage: iottb show-cfg [OPTIONS] + + Show the current configuration context + +Options: + --cfg-file PATH Path to the config file [default: + /home/seb/.config/iottb/iottb.cfg] + -pp Pretty Print + --help Show this message and exit. +Usage: iottb show-all [OPTIONS] + + Show everything: configuration, databases, and device metadata + +Options: + --help Show this message and exit. diff --git a/thesis/config_template.json b/thesis/config_template.json new file mode 100644 index 0000000..89338dc --- /dev/null +++ b/thesis/config_template.json @@ -0,0 +1,4 @@ +{ + "database_path": "~/.iottb.db", + "log_level": "INFO" +} \ No newline at end of file diff --git a/thesis/device_metadata.py b/thesis/device_metadata.py new file mode 100644 index 0000000..19ceef2 --- /dev/null +++ b/thesis/device_metadata.py @@ -0,0 +1,45 @@ +import logging +import uuid +from datetime import datetime +import logging +import click + +from iottb.utils.string_processing import make_canonical_name + +logger = logging.getLogger(__name__) + + +class DeviceMetadata: + def __init__(self, device_name, description="", model="", + manufacturer="", firmware_version="", device_type="", + supported_interfaces="", companion_applications="", + save_to_file=None): + self.device_id = str(uuid.uuid4()) + self.device_name = device_name + cn, aliases = make_canonical_name(device_name) + self.aliases = aliases + self.canonical_name = cn + self.date_added = datetime.now().isoformat() + self.description = description + self.model = model + self.manufacturer = manufacturer + self.current_firmware_version = firmware_version + self.device_type = device_type + self.supported_interfaces = supported_interfaces + self.companion_applications = companion_applications + self.last_metadata_update = datetime.now().isoformat() + if save_to_file is not None: + click.echo('TODO: Implement saving config to file after creation!') + + def add_alias(self, alias: str = ""): + if alias == "": + return + self.aliases.append(alias) + + def get_canonical_name(self): + return self.canonical_name + + def print_attributes(self): + print(f'Printing attribute value pairs in {__name__}') + for attr, value in self.__dict__.items(): + print(f'{attr}: {value}') diff --git a/thesis/device_metadata_template.json b/thesis/device_metadata_template.json new file mode 100644 index 0000000..79a17f1 --- /dev/null +++ b/thesis/device_metadata_template.json @@ -0,0 +1,14 @@ +{ + "device_id": "", + "device_name": "", + "device_short_name": "", + "date_created": "", + "description": "", + "model": "", + "manufacturer": "", + "firmware_version": "", + "device_type": "", + "supported_interfaces": "", + "companion_applications": "", + "last_metadata_update": "" +} \ No newline at end of file diff --git a/thesis/lstpatch.sty b/thesis/lstpatch.sty new file mode 100644 index 0000000..5ab92dd --- /dev/null +++ b/thesis/lstpatch.sty @@ -0,0 +1,393 @@ +%% +%% This is file `lstpatch.sty', generated manually. +%% +%% (w)(c) 2004 Carsten Heinz +%% +%% This file may be distributed under the terms of the LaTeX Project Public +%% License from CTAN archives in directory macros/latex/base/lppl.txt. +%% Either version 1.0 or, at your option, any later version. +%% +%% Send comments and ideas on the package, error reports and additional +%% programming languages to . +%% +%% This patch file will remove the following bugs from the listings package. +%% Each item contains the bug finder with date of report and first bug fix +%% version, a short description of the problem, and the reason for the bug +%% in parenthesis. +%% +%% 1) Frank Atanassow, 2004/10/07, 1.3b +%% +%% space after mathescape is not preserved +%% (\lst@newlines>0) +%% +%% 2) Benjamin Lings, 2004/10/15, 1.3b (2004/10/17) +%% +%% \usepackage{xy,listings} yields: +%% "Forbidden control sequence found while scanning use of \lst@lExtend" +%% (xy-pic correctly resets catcode of ^^L (to active), which is \outer) +%% +%% +%% The following features are added to the base package. +%% +%% 1.3a (2004/09/07) +%% +%% a) H I G H L Y E X P E R I M E N T A L +%% +%% Use the options +%% rangeprefix= +%% rangesuffix= +%% +%% rangebeginprefix= +%% rangebeginsuffix= +%% +%% rangeendprefix= +%% rangeendsuffix= +%% +%% includerangemarker=true|false +%% together with +%% firstline= +%% lastline= +%% or +%% linerange={-, +%% -, ...} +%% The according markers in the source code are +%% +%% for begin respectively end of range. Moreover, one can use +%% includerangemarker=true|false +%% to show or hide the range markers in the output. +%% +%% 1.3b (2004/10/17) +%% +%% b) multicols= (requires loaded multicol package) +%% +%% +\lst@CheckVersion{1.3} +{\typeout{^^J% + ***^^J% + *** This is a patch for listings 1.3, but you're using^^J% + *** version \lst@version.^^J% + ***^^J + *** Patch file not loaded.^^J% + ***^^J}% + \endinput +} +\def\fileversion{1.3b} +\def\filedate{2004/10/17} +\ProvidesFile{lstpatch.sty}[\filedate\space\fileversion\space (Carsten Heinz)] +% +% 0) Insert % after #1. +\def\@@xbitor #1{\@tempcntb \count#1% + \ifnum \@tempcnta =\z@ + \else + \divide\@tempcntb\@tempcnta + \ifodd\@tempcntb \@testtrue\fi + \fi} +% +% 1) Reset \lst@newlines at end of escape. +\def\lstpatch@escape{% +\gdef\lst@Escape##1##2##3##4{% + \lst@CArgX ##1\relax\lst@CDefX + {}% + {\lst@ifdropinput\else + \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken + \lst@InterruptModes + \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}% + \ifx\^^M##2% + \lst@CArg ##2\relax\lst@ActiveCDefX + {}% + {\lst@escapeend ##4\lst@LeaveAllModes\lst@ReenterModes}% + {\lst@MProcessListing}% + \else + \lst@CArg ##2\relax\lst@ActiveCDefX + {}% + {\lst@escapeend ##4\lst@LeaveAllModes\lst@ReenterModes + \lst@newlines\z@ \lst@whitespacefalse}% + {}% + \fi + ##3\lst@escapebegin + \fi}% + {}}% +} +% +% 2) Deactivate \outer definition of ^^L temporarily (inside and outside +% of \lst@ScanChars) and restore \catcode at end of package. +\begingroup \catcode12=\active\let^^L\@empty +\gdef\lst@ScanChars{% + \let\lsts@ssL^^L% + \def^^L{\par}% + \lst@GetChars\lst@RestoreOrigCatcodes\@ne {128}% + \let^^L\lsts@ssL + \lst@GetChars\lst@RestoreOrigExtendedCatcodes{128}{256}} +\endgroup +\lst@lAddTo\lst@RestoreCatcodes{\catcode12\active} +% +% a) Let's start with the options: +\lst@Key{rangeprefix}\relax{\def\lst@rangebeginprefix{#1}% + \def\lst@rangeendprefix{#1}} +\lst@Key{rangesuffix}\relax{\def\lst@rangebeginsuffix{#1}% + \def\lst@rangeendsuffix{#1}} +\lst@Key{rangebeginprefix}{}{\def\lst@rangebeginprefix{#1}} +\lst@Key{rangebeginsuffix}{}{\def\lst@rangebeginsuffix{#1}} +\lst@Key{rangeendprefix}{}{\def\lst@rangeendprefix{#1}} +\lst@Key{rangeendsuffix}{}{\def\lst@rangeendsuffix{#1}} +\lst@Key{includerangemarker}{true}[t]{\lstKV@SetIf{#1}\lst@ifincluderangemarker} +% +% The key is a redefinition of \lst@GLI@ checking for numbers. +\def\lst@GLI@#1-#2-#3\@nil{% + \lst@IfNumber{#1}% + {\ifx\@empty#1\@empty + \let\lst@firstline\@ne + \else + \def\lst@firstline{#1\relax}% + \fi + \ifx\@empty#3\@empty + \def\lst@lastline{9999999\relax}% + \else + \ifx\@empty#2\@empty + \let\lst@lastline\lst@firstline + \else + \def\lst@lastline{#2\relax}% + \fi + \fi}% +% +% If we've found a general marker, we set firstline and lastline to 9999999. +% This prevents (almost) anything to be printed for now. + {\def\lst@firstline{9999999\relax}% + \let\lst@lastline\lst@firstline +% +% We add the prefixes and suffixes to the markers. + \let\lst@rangebegin\lst@rangebeginprefix + \lst@AddTo\lst@rangebegin{#1}\lst@Extend\lst@rangebegin\lst@rangebeginsuffix + \ifx\@empty#3\@empty + \let\lst@rangeend\lst@rangeendprefix + \lst@AddTo\lst@rangeend{#1}\lst@Extend\lst@rangeend\lst@rangeendsuffix + \else + \ifx\@empty#2\@empty + \let\lst@rangeend\@empty + \else + \let\lst@rangeend\lst@rangeendprefix + \lst@AddTo\lst@rangeend{#2}\lst@Extend\lst@rangeend\lst@rangeendsuffix + \fi + \fi +% The following definition will be executed in the SelectCharTable hook +% and here right now if we are already processing a listing. + \global\def\lst@DefRange{\expandafter\lst@CArgX\lst@rangebegin\relax\lst@DefRangeB}% + \ifnum\lst@mode=\lst@Pmode \expandafter\lst@DefRange \fi}} +% \lst@DefRange is not inserted via a hook anymore. Instead it is now called +% directly from \lst@SelectCharTable. This was necessary to get rid of an +% interference with the escape-to-LaTeX-feature. The bug was reported by +% \lsthelper{Michael~Bachmann}{2004/07/21}{Keine label-Referenzierung +% m\"oglich...}. Another chance is due to the same bug: \lst@DefRange is +% redefined globally when the begin of code is found, see below. The bug was +% reported by \lsthelper{Tobias~Rapp}{2004/04/06}{undetected end of range if +% listing crosses page break} \lsthelper{Markus~Luisser}{2004/08/13}{Bug mit +% 'linerangemarker' in umgebrochenen listings} +%\lst@AddToHook{SelectCharTable}{\lst@DefRange} +\lst@AddToHookExe{DeInit}{\global\let\lst@DefRange\@empty} +% +% Actually defining the marker (via \lst@GLI@, \lst@DefRange, \lst@CArgX as +% seen above) is similar to \lst@DefDelimB---except that we unfold the first +% parameter and use different ,

, and  statements.
+\def\lst@DefRangeB#1#2{\lst@DefRangeB@#1#2}
+\def\lst@DefRangeB@#1#2#3#4{%
+    \lst@CDef{#1{#2}{#3}}#4{}%
+    {\lst@ifincluderangemarker
+         \lst@LeaveMode
+         \let#1#4%
+         \lst@DefRangeEnd
+         \lst@InitLstNumber
+     \else
+         \@tempcnta\lst@lineno \advance\@tempcnta\@ne
+         \edef\lst@firstline{\the\@tempcnta\relax}%
+         \gdef\lst@OnceAtEOL{\let#1#4\lst@DefRangeEnd}%
+         \lst@InitLstNumber
+     \fi
+	 \global\let\lst@DefRange\lst@DefRangeEnd
+     \lst@CArgEmpty}%
+    \@empty}
+%
+% Modify labels and define |\lst@InitLstNumber| used above.
+% \lsthelper{Omair-Inam~Abdul-Matin}{2004/05/10}{experimental linerange
+% feature does not work with firstnumber}
+\def\lstpatch@labels{%
+\gdef\lst@SetFirstNumber{%
+    \ifx\lst@firstnumber\@undefined
+        \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax
+        \ifnum\@tempcnta=\z@ \else
+            \lst@nololtrue
+            \advance\@tempcnta\lst@advancenumber
+            \edef\lst@firstnumber{\the\@tempcnta\relax}%
+        \fi
+    \fi}%
+}
+\lst@AddToAtTop\lsthk@PreInit
+    {\ifx\lst@firstnumber\@undefined
+         \def\lst@firstnumber{\lst@lineno}%
+     \fi}
+\def\lst@InitLstNumber{%
+     \global\c@lstnumber\lst@firstnumber
+     \global\advance\c@lstnumber\lst@advancenumber
+     \global\advance\c@lstnumber-\lst@advancelstnum
+     \ifx \lst@firstnumber\c@lstnumber
+         \global\advance\c@lstnumber-\lst@advancelstnum
+     \fi}
+%
+%    The end-marker is defined if and only if it's not empty. The definition is
+%    similar to \lst@DefDelimE---with the above exceptions and except that we
+%    define the re-entry point \lst@DefRangeE@@ as it is defined in the new
+%    version of \lst@MProcessListing above.
+\def\lst@DefRangeEnd{%
+    \ifx\lst@rangeend\@empty\else
+        \expandafter\lst@CArgX\lst@rangeend\relax\lst@DefRangeE
+    \fi}
+\def\lst@DefRangeE#1#2{\lst@DefRangeE@#1#2}
+\def\lst@DefRangeE@#1#2#3#4{%
+    \lst@CDef{#1#2{#3}}#4{}%
+    {\let#1#4%
+     \edef\lst@lastline{\the\lst@lineno\relax}%
+     \lst@DefRangeE@@}%
+    \@empty}
+\def\lst@DefRangeE@@#1\@empty{%
+    \lst@ifincluderangemarker
+        #1\lst@XPrintToken
+    \fi
+    \lst@LeaveModeToPmode
+    \lst@BeginDropInput{\lst@Pmode}}
+%
+\def\lst@LeaveModeToPmode{%
+    \ifnum\lst@mode=\lst@Pmode
+        \expandafter\lsthk@EndGroup
+    \else
+        \expandafter\egroup\expandafter\lst@LeaveModeToPmode
+    \fi}
+%
+%    Eventually we shouldn't forget to install \lst@OnceAtEOL, which must
+%    also be called in \lst@MSkipToFirst.
+\lst@AddToHook{EOL}{\lst@OnceAtEOL\global\let\lst@OnceAtEOL\@empty}
+\gdef\lst@OnceAtEOL{}% Init
+\def\lst@MSkipToFirst{%
+    \global\advance\lst@lineno\@ne
+    \ifnum \lst@lineno=\lst@firstline
+        \def\lst@next{\lst@LeaveMode \global\lst@newlines\z@
+        \lst@OnceAtEOL \global\let\lst@OnceAtEOL\@empty
+        \lst@InitLstNumber % Added to work with modified \lsthk@PreInit.
+        \lsthk@InitVarsBOL
+        \lst@BOLGobble}%
+        \expandafter\lst@next
+    \fi}
+\def\lst@SkipToFirst{%
+    \ifnum \lst@lineno<\lst@firstline
+        \def\lst@next{\lst@BeginDropInput\lst@Pmode
+        \lst@Let{13}\lst@MSkipToFirst
+        \lst@Let{10}\lst@MSkipToFirst}%
+        \expandafter\lst@next
+    \else
+        \expandafter\lst@BOLGobble
+    \fi}
+%
+%    Finally the service macro \lst@IfNumber:
+\def\lst@IfNumber#1{%
+    \ifx\@empty#1\@empty
+        \let\lst@next\@firstoftwo
+    \else
+        \lst@IfNumber@#1\@nil
+    \fi
+    \lst@next}
+\def\lst@IfNumber@#1#2\@nil{%
+    \let\lst@next\@secondoftwo
+    \ifnum`#1>47\relax \ifnum`#1>57\relax\else
+        \let\lst@next\@firstoftwo
+    \fi\fi}
+%
+% b) The following is known to fail with some keys.
+\lst@Key{multicols}{}{\@tempcnta=0#1\relax\def\lst@multicols{#1}}
+\def\lst@Init#1{%
+    \begingroup
+    \ifx\lst@float\relax\else
+        \edef\@tempa{\noexpand\lst@beginfloat{lstlisting}[\lst@float]}%
+        \expandafter\@tempa
+    \fi
+% chmod begin
+    \ifx\lst@multicols\@empty\else
+        \edef\lst@next{\noexpand\multicols{\lst@multicols}}
+        \expandafter\lst@next
+    \fi
+% chmod end
+    \ifhmode\ifinner \lst@boxtrue \fi\fi
+    \lst@ifbox
+        \lsthk@BoxUnsafe
+        \hbox to\z@\bgroup
+             $\if t\lst@boxpos \vtop
+        \else \if b\lst@boxpos \vbox
+        \else \vcenter \fi\fi
+        \bgroup \par\noindent
+    \else
+        \lst@ifdisplaystyle
+            \lst@EveryDisplay
+            \par\penalty-50\relax
+            \vspace\lst@aboveskip
+        \fi
+    \fi
+    \normalbaselines
+    \abovecaptionskip\lst@abovecaption\relax
+    \belowcaptionskip\lst@belowcaption\relax
+    \lst@MakeCaption t%
+    \lsthk@PreInit \lsthk@Init
+    \lst@ifdisplaystyle
+        \global\let\lst@ltxlabel\@empty
+        \if@inlabel
+            \lst@ifresetmargins
+                \leavevmode
+            \else
+                \xdef\lst@ltxlabel{\the\everypar}%
+                \lst@AddTo\lst@ltxlabel{%
+                    \global\let\lst@ltxlabel\@empty
+                    \everypar{\lsthk@EveryLine\lsthk@EveryPar}}%
+            \fi
+        \fi
+        \everypar\expandafter{\lst@ltxlabel
+                              \lsthk@EveryLine\lsthk@EveryPar}%
+    \else
+        \everypar{}\let\lst@NewLine\@empty
+    \fi
+    \lsthk@InitVars \lsthk@InitVarsBOL
+    \lst@Let{13}\lst@MProcessListing
+    \let\lst@Backslash#1%
+    \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}%
+    \lst@InitFinalize}
+\def\lst@DeInit{%
+    \lst@XPrintToken \lst@EOLUpdate
+    \global\advance\lst@newlines\m@ne
+    \lst@ifshowlines
+        \lst@DoNewLines
+    \else
+        \setbox\@tempboxa\vbox{\lst@DoNewLines}%
+    \fi
+    \lst@ifdisplaystyle \par\removelastskip \fi
+    \lsthk@ExitVars\everypar{}\lsthk@DeInit\normalbaselines\normalcolor
+    \lst@MakeCaption b%
+    \lst@ifbox
+        \egroup $\hss \egroup
+        \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
+    \else
+        \lst@ifdisplaystyle
+            \par\penalty-50\vspace\lst@belowskip
+        \fi
+    \fi
+% chmod begin
+    \ifx\lst@multicols\@empty\else
+        \def\lst@next{\global\let\@checkend\@gobble
+                      \endmulticols
+                      \global\let\@checkend\lst@@checkend}
+        \expandafter\lst@next
+    \fi
+% chmod end
+    \ifx\lst@float\relax\else
+        \expandafter\lst@endfloat
+    \fi
+    \endgroup}
+\let\lst@@checkend\@checkend
+%%
+\endinput
+%%
+%% End of file `lstpatch.sty'.
diff --git a/thesis/references.bib b/thesis/references.bib
new file mode 100644
index 0000000..4c3a873
--- /dev/null
+++ b/thesis/references.bib
@@ -0,0 +1,594 @@
+
+@article{wilkinson_fair_2016,
+	title = {The {FAIR} Guiding Principles for scientific data management and stewardship},
+	volume = {3},
+	rights = {2016 The Author(s)},
+	issn = {2052-4463},
+	url = {https://www.nature.com/articles/sdata201618},
+	doi = {10.1038/sdata.2016.18},
+	abstract = {There is an urgent need to improve the infrastructure supporting the reuse of scholarly data. A diverse set of stakeholders—representing academia, industry, funding agencies, and scholarly publishers—have come together to design and jointly endorse a concise and measureable set of principles that we refer to as the {FAIR} Data Principles. The intent is that these may act as a guideline for those wishing to enhance the reusability of their data holdings. Distinct from peer initiatives that focus on the human scholar, the {FAIR} Principles put specific emphasis on enhancing the ability of machines to automatically find and use the data, in addition to supporting its reuse by individuals. This Comment is the first formal publication of the {FAIR} Principles, and includes the rationale behind them, and some exemplar implementations in the community.},
+	pages = {160018},
+	number = {1},
+	journaltitle = {Scientific Data},
+	shortjournal = {Sci Data},
+	author = {Wilkinson, Mark D. and Swertz, Morris A. and et al.},
+	urldate = {2024-06-22},
+	date = {2016-03-15},
+	langid = {english},
+	note = {Publisher: Nature Publishing Group},
+	keywords = {Publication characteristics, Research data},
+}
+
+@online{pydantic,
+	title = {Welcome to Pydantic - Pydantic},
+	url = {https://docs.pydantic.dev/latest/},
+	urldate = {2024-07-01},
+}
+
+@article{surveytestingmethods2022,
+	title = {Survey of Testing Methods and Testbed Development Concerning Internet of Things},
+	volume = {123},
+	issn = {1572-834X},
+	url = {https://doi.org/10.1007/s11277-021-09124-5},
+	doi = {10.1007/s11277-021-09124-5},
+	abstract = {The concept of Internet of Things ({IoT}) was designed to change everyday lives of people via multiple forms of computing and easy deployment of applications. In recent years, the increasing complexity of {IoT}-ready devices and processes has led to potential risks related to system reliability. Therefore, the comprehensive testing of {IoT} technology has attracted the attention of many researchers, which promotes the extensive development of {IoT} testing methods and infrastructure. However, the current research on {IoT} testing methods and testbeds mainly focuses on specific application scenarios, lacking systematic review and analysis of many applications from different points of view. This paper systematically summarizes the latest testing methods covering different {IoT} fields and discusses the development status of the existing Internet of things testbed. Findings of this review demonstrate that {IoT} testing is moving toward larger scale and intelligent testing, and that in near future, {IoT} test architecture is set to become more standardized and universally applicable with multi-technology convergence—i.e., a combination of big data, cloud computing, and artificial intelligence—being the prime focus of {IoT} testing.},
+	pages = {165--194},
+	number = {1},
+	journaltitle = {Wireless Personal Communications},
+	shortjournal = {Wireless Pers Commun},
+	author = {Zhu, Shicheng and Yang, Shunkun and Gou, Xiaodong and Xu, Yang and Zhang, Tao and Wan, Yueliang},
+	urldate = {2024-06-30},
+	date = {2022-03-01},
+	langid = {english},
+	keywords = {Internet of Things, {IoT} testing, Testbed, Testing method},
+}
+
+@online{recommendedformatrsLOC,
+	title = {Recommended Formats Statement – Datasets {\textbar} Resources (Preservation, Library of Congress)},
+	url = {https://www.loc.gov/preservation/resources/rfs/data.html},
+	abstract = {Lists technical characteristics of and metadata for datasets that best support the preservation of and long-term access to these creative works. Identifies the formats the Library of Congress prefers or finds acceptable.},
+	type = {web page},
+	urldate = {2024-06-23},
+}
+
+@online{poetry,
+	title = {Poetry - Python dependency management and packaging made easy},
+	url = {https://python-poetry.org/},
+	urldate = {2024-06-30},
+}
+
+@online{click,
+	title = {Welcome to Click — Click Documentation (8.1.x)},
+	url = {https://click.palletsprojects.com/en/8.1.x/},
+	urldate = {2024-06-30},
+}
+
+@article{pmsSpinellis2012,
+	title = {Package Management Systems},
+	volume = {29},
+	issn = {1937-4194},
+	url = {https://ieeexplore.ieee.org/abstract/document/6155145},
+	doi = {10.1109/MS.2012.38},
+	abstract = {A package management system organizes and simplifies the installation and maintenance of software by standardizing and organizing the production and consumption of software collections. As a software developer, you can benefit from package managers in two ways: through a rich and stable development environment and through friction-free reuse. Promisingly, the structure that package managers bring both to the tools we use in our development process and the libraries we reuse in our products ties nicely with the recent move emphasizing {DevOps} (development operations) as an integration between software development and {IT} operations.},
+	pages = {84--86},
+	number = {2},
+	journaltitle = {{IEEE} Software},
+	author = {Spinellis, Diomidis},
+	urldate = {2024-06-30},
+	date = {2012-03},
+	note = {Conference Name: {IEEE} Software},
+	keywords = {{DevOps}, Maintenance engineering, Product management, Software libraries, Software reusability, module dependencies, package management system, shared library, software reuse},
+}
+
+@misc{rrrr2023,
+	title = {Repeatability, Reproducibility, Replicability, Reusability (4R) in Journals' Policies and Software/Data Management in Scientific Publications: A Survey, Discussion, and Perspectives},
+	url = {http://arxiv.org/abs/2312.11028},
+	doi = {10.48550/arXiv.2312.11028},
+	shorttitle = {Repeatability, Reproducibility, Replicability, Reusability (4R) in Journals' Policies and Software/Data Management in Scientific Publications},
+	abstract = {With the recognized crisis of credibility in scientific research, there is a growth of reproducibility studies in computer science, and although existing surveys have reviewed reproducibility from various perspectives, especially very specific technological issues, they do not address the author-publisher relationship in the publication of reproducible computational scientific articles. This aspect requires significant attention because it is the basis for reliable research. We have found a large gap between the reproducibility-oriented practices, journal policies, recommendations, publisher artifact Description/Evaluation guidelines, submission guides, technological reproducibility evolution, and its effective adoption to contribute to tackling the crisis. We conducted a narrative survey, a comprehensive overview and discussion identifying the mutual efforts required from Authors, Journals, and Technological actors to achieve reproducibility research. The relationship between authors and scientific journals in their mutual efforts to jointly improve the reproducibility of scientific results is analyzed. Eventually, we propose recommendations for the journal policies, as well as a unified and standardized Reproducibility Guide for the submission of scientific articles for authors. The main objective of this work is to analyze the implementation and experiences of reproducibility policies, techniques and technologies, standards, methodologies, software, and data management tools required for scientific reproducible publications. Also, the benefits and drawbacks of such an adoption, as well as open challenges and promising trends, to propose possible strategies and efforts to mitigate the identified gaps. To this purpose, we analyzed 200 scientific articles, surveyed 16 Computer Science journals, and systematically classified them according to reproducibility strategies, technologies, policies, code citation, and editorial business. We conclude there is still a reproducibility gap in scientific publications, although at the same time also the opportunity to reduce this gap with the joint effort of authors, publishers, and technological providers.},
+	number = {{arXiv}:2312.11028},
+	publisher = {{arXiv}},
+	author = {Hernández, José Armando and Colom, Miguel},
+	urldate = {2024-06-30},
+	date = {2023-12-18},
+	eprinttype = {arxiv},
+	eprint = {2312.11028 [cs]},
+	keywords = {Computer Science - Software Engineering, repeatability, replicability, reproducibility, reusability},
+}
+
+@thesis{vacuumpie2023,
+	location = {Gjøvik},
+	title = {Private Information Exposed by the Use of Robot Vacuum Cleaner in Smart Environments},
+	abstract = {Robot vacuum cleaners are popular {IoT} devices and are deployed in all kinds of
+smart environments. Integration with {IoT} systems introduce more security and
+privacy issues related to the operation of these devices. Vendors have developed
+smart phone applications where users can personalize cleaning or view informa-
+tion about the vacuum cleaner. This increase the integration between user’s life
+and the robot vacuum cleaner, which potentially exposes private information. In-
+dustry standards include end-to-end encryption between the application, cloud
+service and robot vacuum cleaner to secure the private information exchanged.
+Regardless of encryption, network header metadata is still available through net-
+work eavesdropping attacks. In this project we investigated the potential private
+information exposed by this metadata. An Irobot Roomba i7 was deployed in two
+different smart environments where passive network eavesdropping was conduc-
+ted during smart feature triggering. Analysis revealed that it was possible to attrib-
+ute different events triggered on the Irobot Roomba i7, only based on metadata
+in the Internet traffic capture. Different signature-based detection algorithms are
+proposed, with a high detection rate. Wi-Fi and Internet capturing metadata were
+compared and similar patterns were identified, making the detection method ap-
+plicable for Wi-Fi eavesdropping as well. This thesis covers the implementation,
+capturing and analysis of network traffic and proposes event detection algorithms.},
+	institution = {Norwegian University of Science and Technology},
+	type = {Master Thgesis},
+	author = {Ulsmåg, Benjamin Andreas},
+	date = {2023-01-06},
+}
+
+@inproceedings{alyamiwifi2022,
+	location = {Las Vegas, {NV}, {USA}},
+	title = {{WiFi}-based {IoT} Devices Profiling Attack based on Eavesdropping of Encrypted {WiFi} Traffic},
+	isbn = {978-1-66543-161-3},
+	url = {https://ieeexplore.ieee.org/document/9700674/},
+	doi = {10.1109/CCNC49033.2022.9700674},
+	abstract = {Recent research has shown that in-network observers of {WiFi} communication (i.e., observers who have joined the {WiFi} network) can obtain much information regarding the types, user identities, and activities of Internet-of-Things ({IoT}) devices in the network. What has not been explored is the question of how much information can be inferred by an out-ofnetwork observer who does not have access to the {WiFi} network. This attack scenario is more realistic and much harder to defend against, thus imposes a real threat to user privacy. In this paper, we investigate privacy leakage derived from an out-of-network traffic eavesdropper on the encrypted {WiFi} traffic of popular {IoT} devices. We instrumented a testbed of 12 popular {IoT} devices and evaluated multiple machine learning methods for fingerprinting and inferring what {IoT} devices exist in a {WiFi} network. By only exploiting the {WiFi} frame header information, we have achieved 95\% accuracy in identifying the devices and often their working status. This study demonstrates that information leakage and privacy attack is a real threat for {WiFi} networks and {IoT} applications.},
+	eventtitle = {2022 {IEEE} 19th Annual Consumer Communications \& Networking Conference ({CCNC})},
+	pages = {385--392},
+	booktitle = {2022 {IEEE} 19th Annual Consumer Communications \& Networking Conference ({CCNC})},
+	publisher = {{IEEE}},
+	author = {Alyami, Mnassar and Alharbi, Ibrahim and Zou, Cliff and Solihin, Yan and Ackerman, Karl},
+	urldate = {2024-03-22},
+	date = {2022-01-08},
+	langid = {english},
+}
+
+@article{tbsmartgrid2013,
+	title = {Cyber-Physical Security Testbeds: Architecture, Application, and Evaluation for Smart Grid},
+	volume = {4},
+	issn = {1949-3061},
+	url = {https://ieeexplore.ieee.org/abstract/document/6473865},
+	doi = {10.1109/TSG.2012.2226919},
+	shorttitle = {Cyber-Physical Security Testbeds},
+	abstract = {The development of a smarter electric grid will depend on increased deployments of information and communication technology ({ICT}) to support novel communication and control functions. Unfortunately, this additional dependency also expands the risk from cyber attacks. Designing systems with adequate cyber security depends heavily on the availability of representative environments, such as testbeds, where current issues and future ideas can be evaluated. This paper provides an overview of a smart grid security testbed, including the set of control, communication, and physical system components required to provide an accurate cyber-physical environment. It then identifies various testbed research applications and also identifies how various components support these applications. The {PowerCyber} testbed at Iowa State University is then introduced, including the architecture, applications, and novel capabilities, such as virtualization, Real Time Digital Simulators ({RTDS}), and {ISEAGE} {WAN} emulation. Finally, several attack scenarios are evaluated using the testbed to explore cyber-physical impacts. In particular, availability and integrity attacks are demonstrated with both isolated and coordinated approaches, these attacks are then evaluated based on the physical system's voltage and rotor angle stability.},
+	pages = {847--855},
+	number = {2},
+	journaltitle = {{IEEE} Transactions on Smart Grid},
+	author = {Hahn, Adam and Ashok, Aditya and Sridhar, Siddharth and Govindarasu, Manimaran},
+	urldate = {2024-06-30},
+	date = {2013-06},
+	note = {Conference Name: {IEEE} Transactions on Smart Grid},
+	keywords = {Computer architecture, Cyber-physical systems, Protocols, Real-time systems, Security, Smart grids, Software, Substations, cyber security, ieee, iot, smart grid, testbed, testbeds},
+}
+
+@incollection{iotfundamentals,
+	location = {Cham},
+	title = {{IoT} Fundamentals: Definitions, Architectures, Challenges, and Promises},
+	isbn = {978-3-030-30367-9},
+	url = {https://doi.org/10.1007/978-3-030-30367-9_1},
+	abstract = {The Internet is everywhere and touched almost every corner of the globe affecting our lives in previously unimagined ways. As a living entity, the Internet is constantly evolving, and now, an era of widespread connectivity through various smart devices (i.e., things) that connect with the Internet has begun. This paradigm change is generally referred to as the Internet of Things ({IoT}). Welcoming {IoT} will bring significant benefits to economies and businesses as it enables greater innovation and productivity. On the other hand, the rapid adoption of {IoT} presents new challenges regarding connectivity, security, data processing, and scalability. Because the {IoT} world is vast and versatile, it cannot be viewed as a single technology. {IoT} looks more like an umbrella covering many protocols, technologies, and concepts that depend on specific industries. In this chapter, we will seek to look at the history of {IoT}, more clearly define it, and review its terms and concepts. We will also review vertical {IoT} markets and higher-level use cases that have successfully adopted {IoT} solutions. We will also discuss the details of the business implications, business models, and opportunities of {IoT}. Finally, the complete {IoT} stack and reference architectures from smart objects, to the networks, to the cloud, and finally the applications where information is leveraged are explained.},
+	pages = {3--50},
+	booktitle = {Intelligent Internet of Things: From Device to Fog and Cloud},
+	publisher = {Springer International Publishing},
+	author = {Firouzi, Farshad and Farahani, Bahar and Weinberger, Markus and {DePace}, Gabriel and Aliee, Fereidoon Shams},
+	editor = {Firouzi, Farshad and Chakrabarty, Krishnendu and Nassif, Sani},
+	date = {2020},
+	doi = {10.1007/978-3-030-30367-9_1},
+}
+
+@article{whatissmartdevice2018,
+	title = {What is a smart device? - a conceptualisation within the paradigm of the internet of things},
+	volume = {6},
+	issn = {2213-7459},
+	url = {https://doi.org/10.1186/s40327-018-0063-8},
+	doi = {10.1186/s40327-018-0063-8},
+	abstract = {The Internet of Things ({IoT}) is an interconnected network of objects which range from simple sensors to smartphones and tablets; it is a relatively novel paradigm that has been rapidly gaining ground in the scenario of modern wireless telecommunications with an expected growth of 25 to 50 billion of connected devices for 2020 Due to the recent rise of this paradigm, authors across the literature use inconsistent terms to address the devices present in the {IoT}, such as mobile device, smart device, mobile technologies or mobile smart device. Based on the existing literature, this paper chooses the term smart device as a starting point towards the development of an appropriate definition for the devices present in the {IoT}. This investigation aims at exploring the concept and main features of smart devices as well as their role in the {IoT}. This paper follows a systematic approach for reviewing compendium of literature to explore the current research in this field. It has been identified smart devices as the primary objects interconnected in the network of {IoT}, having an essential role in this paradigm. The developed concept for defining smart device is based on three main features, namely context-awareness, autonomy and device connectivity. Other features such as mobility and user-interaction were highly mentioned in the literature, but were not considered because of the nature of the {IoT} as a network mainly oriented to device-to-device connectivity whether they are mobile or not and whether they interact with people or not. What emerges from this paper is a concept which can be used to homogenise the terminology used on further research in the Field of digitalisation and smart technologies.},
+	pages = {3},
+	number = {1},
+	journaltitle = {Visualization in Engineering},
+	shortjournal = {Visualization in Engineering},
+	author = {Silverio-Fernández, Manuel and Renukappa, Suresh and Suresh, Subashini},
+	date = {2018-05-09},
+}
+
+@report{dasilvaworkflow2021,
+	title = {Workflows Community Summit: Bringing the Scientific Workflows Community Together},
+	url = {http://arxiv.org/abs/2103.09181},
+	shorttitle = {Workflows Community Summit},
+	abstract = {Scientific workflows have been used almost universally across scientific domains, and have underpinned some of the most significant discoveries of the past several decades. Many of these workflows have high computational, storage, and/or communication demands, and thus must execute on a wide range of large-scale platforms, from large clouds to upcoming exascale high-performance computing ({HPC}) platforms. These executions must be managed using some software infrastructure. Due to the popularity of workflows, workflow management systems ({WMSs}) have been developed to provide abstractions for creating and executing workflows conveniently, efficiently, and portably. While these efforts are all worthwhile, there are now hundreds of independent {WMSs}, many of which are moribund. As a result, the {WMS} landscape is segmented and presents significant barriers to entry due to the hundreds of seemingly comparable, yet incompatible, systems that exist. As a result, many teams, small and large, still elect to build their own custom workflow solution rather than adopt, or build upon, existing {WMSs}. This current state of the {WMS} landscape negatively impacts workflow users, developers, and researchers. The "Workflows Community Summit" was held online on January 13, 2021. The overarching goal of the summit was to develop a view of the state of the art and identify crucial research challenges in the workflow community. Prior to the summit, a survey sent to stakeholders in the workflow community (including both developers of {WMSs} and users of workflows) helped to identify key challenges in this community that were translated into 6 broad themes for the summit, each of them being the object of a focused discussion led by a volunteer member of the community. This report documents and organizes the wealth of information provided by the participants before, during, and after the summit.},
+	author = {da Silva, Rafael Ferreira and Casanova, Henri and Chard, Kyle and Laney, Dan and Ahn, Dong and Jha, Shantenu and Goble, Carole and Ramakrishnan, Lavanya and Peterson, Luc and Enders, Bjoern and Thain, Douglas and Altintas, Ilkay and Babuji, Yadu and Badia, Rosa M. and Bonazzi, Vivien and Coleman, Taina and Crusoe, Michael and Deelman, Ewa and Di Natale, Frank and Di Tommaso, Paolo and Fahringer, Thomas and Filgueira, Rosa and Fursin, Grigori and Ganose, Alex and Gruning, Bjorn and Katz, Daniel S. and Kuchar, Olga and Kupresanin, Ana and Ludascher, Bertram and Maheshwari, Ketan and Mattoso, Marta and Mehta, Kshitij and Munson, Todd and Ozik, Jonathan and Peterka, Tom and Pottier, Loic and Randles, Tim and Soiland-Reyes, Stian and Tovar, Benjamin and Turilli, Matteo and Uram, Thomas and Vahi, Karan and Wilde, Michael and Wolf, Matthew and Wozniak, Justin},
+	urldate = {2024-02-25},
+	date = {2021-03-16},
+	doi = {10.5281/zenodo.4606958},
+	eprinttype = {arxiv},
+	eprint = {2103.09181 [cs]},
+	keywords = {Computer Science - Distributed, Parallel, and Cluster Computing},
+}
+
+@inproceedings{faircsartefacts2022,
+	location = {New York, {NY}, {USA}},
+	title = {Toward findable, accessible, interoperable, and reusable cybersecurity artifacts},
+	isbn = {978-1-4503-9684-4},
+	url = {https://doi.org/10.1145/3546096.3546104},
+	doi = {10.1145/3546096.3546104},
+	series = {Cset '22},
+	abstract = {Researchers in experimental cybersecurity are increasingly sharing the code, data, and other artifacts associated with their studies. This trend is encouraged and rewarded by conferences and journals through practices such as artifact evaluation and badging. While these trends in sharing artifacts are promising, the cybersecurity community is still far from an ecosystem in which artifacts are {FAIR}: findable, accessible, interoperable, and reusable. The lack of established standards and best practices for sharing and reuse results in artifacts that are often difficult to find and reuse; in addition, the lack of community standards results in artifacts that may be incomplete and low-quality. In this paper we describe our experience in creating an online community hub, called {SEARCCH}, to promote the sharing and reuse of artifacts for cybersecurity research. Based on our experience, we offer lessons learned: issues that must be addressed to further promote {FAIR} principles in experimental cybersecurity.},
+	pages = {65--70},
+	booktitle = {Proceedings of the 15th workshop on cyber security experimentation and test},
+	publisher = {Association for Computing Machinery},
+	author = {Balenson, David and Benzel, Terry and Eide, Eric and Emmerich, David and Johnson, David and Mirkovic, Jelena and Tinnel, Laura},
+	date = {2022},
+	note = {Number of pages: 6
+Place: Virtual, {CA}, {USA}},
+	keywords = {{FAIR} principles, {SEARCCH}, artifact catalog, cybersecurity artifacts, reproducibility},
+}
+
+@article{islamiot2023,
+	title = {Internet of Things: Device Capabilities, Architectures, Protocols, and Smart Applications in Healthcare Domain},
+	volume = {10},
+	issn = {2327-4662},
+	url = {https://ieeexplore.ieee.org/abstract/document/9983826/references#references},
+	doi = {10.1109/JIOT.2022.3228795},
+	shorttitle = {Internet of Things},
+	abstract = {Nowadays, the Internet has spread to practically every country around the world and is having unprecedented effects on people’s lives. The Internet of Things ({IoT}) is getting more popular and has a high level of interest in both practitioners and academicians in the age of wireless communication due to its diverse applications. The {IoT} is a technology that enables everyday things to become savvier, everyday computation toward becoming intellectual, and everyday communication to become a little more insightful. In this article, the most common and popular {IoT} device capabilities, architectures, and protocols are demonstrated in brief to provide a clear overview of the {IoT} technology to the researchers in this area. The common {IoT} device capabilities, including hardware (Raspberry Pi, Arduino, and {ESP}8266) and software (operating systems ({OSs}), and built-in tools) platforms are described in detail. The widely used architectures that have recently evolved and used are the three-layer architecture, service-oriented architecture, and middleware-based architecture. The popular protocols for {IoT} are demonstrated which include constrained application protocol, message queue telemetry transport, extensible messaging and presence protocol, advanced message queuing protocol, data distribution service, low power wireless personal area network, Bluetooth low energy, and {ZigBee} that are frequently utilized to develop smart {IoT} applications. Additionally, this research provides an in-depth overview of the potential healthcare applications based on {IoT} technologies in the context of addressing various healthcare concerns. Finally, this article summarizes state-of-the-art knowledge, highlights open issues and shortcomings, and provides recommendations for further studies which would be quite beneficial to anyone with a desire to work in this field and make breakthroughs to get expertise in this area.},
+	pages = {3611--3641},
+	number = {4},
+	journaltitle = {{IEEE} Internet of Things Journal},
+	author = {Islam, Md. Milon and Nooruddin, Sheikh and Karray, Fakhri and Muhammad, Ghulam},
+	urldate = {2024-06-30},
+	date = {2023-02},
+	note = {Conference Name: {IEEE} Internet of Things Journal},
+	keywords = {Communication protocol, Computer architecture, Hardware, Internet of Things, Internet of Things ({IoT}), {IoT} architecture, Medical services, Protocols, Security, Software, device capabilities, healthcare applications},
+}
+
+@article{romanfeatures2013,
+	title = {On the features and challenges of security and privacy in distributed internet of things},
+	volume = {57},
+	issn = {1389-1286},
+	url = {https://www.sciencedirect.com/science/article/pii/S1389128613000054},
+	doi = {10.1016/j.comnet.2012.12.018},
+	series = {Towards a Science of Cyber Security},
+	abstract = {In the Internet of Things, services can be provisioned using centralized architectures, where central entities acquire, process, and provide information. Alternatively, distributed architectures, where entities at the edge of the network exchange information and collaborate with each other in a dynamic way, can also be used. In order to understand the applicability and viability of this distributed approach, it is necessary to know its advantages and disadvantages – not only in terms of features but also in terms of security and privacy challenges. The purpose of this paper is to show that the distributed approach has various challenges that need to be solved, but also various interesting properties and strengths.},
+	pages = {2266--2279},
+	number = {10},
+	journaltitle = {Computer Networks},
+	shortjournal = {Computer Networks},
+	author = {Roman, Rodrigo and Zhou, Jianying and Lopez, Javier},
+	urldate = {2024-06-30},
+	date = {2013-07-05},
+	keywords = {Distributed Architectures, Internet of Things, Security, connectivity, iot, network},
+}
+
+@inproceedings{iothome2019,
+	location = {Santa Clara, {CA}},
+	title = {All things considered: An analysis of {IoT} devices on home networks},
+	isbn = {978-1-939133-06-9},
+	url = {https://www.usenix.org/conference/usenixsecurity19/presentation/kumar-deepak},
+	pages = {1169--1185},
+	booktitle = {28th {USENIX} security symposium ({USENIX} security 19)},
+	publisher = {{USENIX} Association},
+	author = {Kumar, Deepak and Shen, Kelly and Case, Benton and Garg, Deepali and Alperovich, Galina and Kuznetsov, Dmitry and Gupta, Rajarshi and Durumeric, Zakir},
+	date = {2019-08},
+}
+
+@inproceedings{iotInHomes2019,
+	title = {All Things Considered: An Analysis of \{{IoT}\} Devices on Home Networks},
+	isbn = {978-1-939133-06-9},
+	url = {https://www.usenix.org/conference/usenixsecurity19/presentation/kumar-deepak},
+	shorttitle = {All Things Considered},
+	eventtitle = {28th {USENIX} Security Symposium ({USENIX} Security 19)},
+	pages = {1169--1185},
+	author = {Kumar, Deepak and Shen, Kelly and Case, Benton and Garg, Deepali and Alperovich, Galina and Kuznetsov, Dmitry and Gupta, Rajarshi and Durumeric, Zakir},
+	urldate = {2024-06-30},
+	date = {2019},
+	langid = {english},
+	keywords = {adoption, home, iot},
+}
+
+@inproceedings{ukil_embedded_2011,
+	title = {Embedded security for Internet of Things},
+	url = {https://ieeexplore.ieee.org/abstract/document/5751382},
+	doi = {10.1109/NCETACS.2011.5751382},
+	abstract = {Internet of Things ({IoT}) consists of several tiny devices connected together to form a collaborative computing environment. {IoT} imposes peculiar constraints in terms of connectivity, computational power and energy budget, which make it significantly different from those contemplated by the canonical doctrine of security in distributed systems. In order to circumvent the problem of security in {IoT} domain, networks and devices need to be secured. In this paper, we consider the embedded device security only, assuming that network security is properly in place. It can be noticed that the existence of tiny computing devices that form ubiquity in {IoT} domain are very much vulnerable to different security attacks. In this work, we provide the requirements of embedded security, the solutions to resists different attacks and the technology for resisting temper proofing of the embedded devices by the concept of trusted computing. Our paper attempts to address the issue of security for data at rest. Addressing this issue is equivalent to addressing the security issue of the hardware platform. Our work also partially helps in addressing securing data in transit.},
+	eventtitle = {2011 2nd National Conference on Emerging Trends and Applications in Computer Science},
+	pages = {1--6},
+	booktitle = {2011 2nd National Conference on Emerging Trends and Applications in Computer Science},
+	author = {Ukil, Arijit and Sen, Jaydip and Koilakonda, Sripad},
+	urldate = {2024-06-30},
+	date = {2011-03},
+	keywords = {{ARM}, Computer architecture, Embedded systems, Hardware, Internet of things ({IoT}), Protocols, Security, Smart phones, Trustzone, confidentiality, embedded device, security, ubiquitous computing},
+}
+
+@online{tcpdump,
+	title = {Home {\textbar} {TCPDUMP} \& {LIBPCAP}},
+	url = {https://www.tcpdump.org/},
+	urldate = {2024-06-30},
+}
+
+@online{wiresharkorg,
+	title = {Wireshark · Go Deep},
+	url = {https://www.wireshark.org/},
+	urldate = {2024-06-30},
+}
+
+@online{pythonorg,
+	title = {Welcome to Python.org},
+	url = {https://www.python.org/},
+	abstract = {The official home of the Python Programming Language},
+	titleaddon = {Python.org},
+	urldate = {2024-06-30},
+	date = {2024-06-27},
+	langid = {english},
+	keywords = {tool},
+}
+
+@online{mitmproxy,
+	title = {mitmproxy - an interactive {HTTPS} proxy},
+	url = {https://mitmproxy.org/},
+	urldate = {2024-06-30},
+	keywords = {proxy, sniffing, tools},
+}
+
+@inproceedings{dasilvaComRoad2021,
+	title = {A Community Roadmap for Scientific Workflows Research and Development},
+	url = {https://ieeexplore.ieee.org/abstract/document/9652570/authors#authors},
+	doi = {10.1109/WORKS54523.2021.00016},
+	abstract = {The landscape of workflow systems for scientific applications is notoriously convoluted with hundreds of seemingly equivalent workflow systems, many isolated research claims, and a steep learning curve. To address some of these challenges and lay the groundwork for transforming workflows research and development, the {WorkflowsRI} and {ExaWorks} projects partnered to bring the international workflows community together. This paper reports on discussions and findings from two virtual “Workflows Community Summits” (January and April, 2021). The overarching goals of these workshops were to develop a view of the state of the art, identify crucial research challenges in the workflows community, articulate a vision for potential community efforts, and discuss technical approaches for realizing this vision. To this end, participants identified six broad themes: {FAIR} computational workflows; {AI} workflows; exascale challenges; {APIs}, interoperability, reuse, and standards; training and education; and building a workflows community. We summarize discussions and recommendations for each of these themes.},
+	eventtitle = {2021 {IEEE} Workshop on Workflows in Support of Large-Scale Science ({WORKS})},
+	pages = {81--90},
+	booktitle = {2021 {IEEE} Workshop on Workflows in Support of Large-Scale Science ({WORKS})},
+	author = {da Silva, Rafael Ferreira and Casanova, Henri and Chard, Kyle and Altintas, Ilkay and Badia, Rosa M and Balis, Bartosz and Coleman, Tainã and Coppens, Frederik and Di Natale, Frank and Enders, Bjoern and Fahringer, Thomas and Filgueira, Rosa and Fursin, Grigori and Garijo, Daniel and Goble, Carole and Howell, Dorran and Jha, Shantenu and Katz, Daniel S. and Laney, Daniel and Leser, Ulf and Malawski, Maciej and Mehta, Kshitij and Pottier, Loïc and Ozik, Jonathan and Peterson, J. Luc and Ramakrishnan, Lavanya and Soiland-Reyes, Stian and Thain, Douglas and Wolf, Matthew},
+	urldate = {2024-06-30},
+	date = {2021-11},
+	keywords = {{AI} workflows, Artificial intelligence, Buildings, Conferences, Research and development, Scientific workflows, Stakeholders, Standards, Training, community roadmap, data management, exascale computing, interoperability},
+}
+
+@article{zander2014survey,
+	title = {A survey of testbeds and experimental research infrastructures for wireless networks},
+	volume = {15},
+	pages = {1231--1246},
+	number = {4},
+	journaltitle = {{IEEE} Communications Surveys \& Tutorials},
+	author = {Zander, Justus and Zinner, Thomas and Bifulco, Roberto and Carle, Georg},
+	date = {2014},
+	note = {Publisher: {IEEE}},
+	keywords = {iot, springer, survey, testbed},
+}
+
+@article{al-hawawreh_developing_2021,
+	title = {Developing a Security Testbed for Industrial Internet of Things},
+	volume = {8},
+	issn = {2327-4662},
+	url = {https://ieeexplore.ieee.org/abstract/document/9233425},
+	doi = {10.1109/JIOT.2020.3032093},
+	abstract = {While achieving security for Industrial Internet of Things ({IIoT}) is a critical and nontrivial task, more attention is required for brownfield {IIoT} systems. This is a consequence of long life cycles of their legacy devices which were initially designed without considering security and {IoT} connectivity, but they are now becoming more connected and integrated with emerging {IoT} technologies and messaging communication protocols. Deploying today's methodologies and solutions in brownfield {IIoT} systems is not viable, as security solutions must co-exist and fit these systems' requirements. This necessitates a realistic standardized {IIoT} testbed that can be used as an optimal format to measure the credibility of security solutions of {IIoT} networks, analyze {IIoT} attack landscapes and extract threat intelligence. Developing a testbed for brownfield {IIoT} systems is considered a significant challenge as these systems are comprised of legacy, heterogeneous devices, communication layers and applications that need to be implemented holistically to achieve high fidelity. In this article, we propose a new generic end-to-end {IIoT} security testbed, with a particular focus on the brownfield system and provide details of the testbed's architectural design and the implementation process. The proposed testbed can be easily reproduced and reconfigured to support the testing activities of new processes and various security scenarios. The proposed testbed operation is demonstrated on different connected devices, communication protocols and applications. The experiments demonstrate that this testbed is effective in terms of its operation and security testing. A comparison with existing testbeds, including a table of features is provided.},
+	pages = {5558--5573},
+	number = {7},
+	journaltitle = {{IEEE} Internet of Things Journal},
+	author = {Al-Hawawreh, Muna and Sitnikova, Elena},
+	urldate = {2024-06-30},
+	date = {2021-04},
+	note = {Conference Name: {IEEE} Internet of Things Journal},
+	keywords = {Brownfield, Industrial Internet of Things ({IIoT}), Protocols, Resilience, Security, Sensors, Testing, ieee, iot, security testing, testbed},
+}
+
+@article{sibonitestbed2019,
+	title = {Security Testbed for Internet-of-Things Devices},
+	volume = {68},
+	issn = {1558-1721},
+	url = {https://ieeexplore.ieee.org/abstract/document/8565917},
+	doi = {10.1109/TR.2018.2864536},
+	abstract = {The Internet of Things ({IoT}) is a global ecosystem of information and communication technologies aimed at connecting any type of object (thing), at any time, and in any place, to each other and to the Internet. One of the major problems associated with the {IoT} is the heterogeneous nature of such deployments; this heterogeneity poses many challenges, particularly, in the areas of security and privacy. Specifically, security testing and analysis of {IoT} devices is considered a very complex task, as different security testing methodologies, including software and hardware security testing approaches, are needed. In this paper, we propose an innovative security testbed framework targeted at {IoT} devices. The security testbed is aimed at testing all types of {IoT} devices, with different software/hardware configurations, by performing standard and advanced security testing. Advanced analysis processes based on machine learning algorithms are employed in the testbed in order to monitor the overall operation of the {IoT} device under test. The architectural design of the proposed security testbed along with a detailed description of the testbed implementation is discussed. The testbed operation is demonstrated on different {IoT} devices using several specific {IoT} testing scenarios. The results obtained demonstrate that the testbed is effective at detecting vulnerabilities and compromised {IoT} devices.},
+	pages = {23--44},
+	number = {1},
+	journaltitle = {{IEEE} Transactions on Reliability},
+	author = {Siboni, Shachar and Sachidananda, Vinay and Meidan, Yair and Bohadana, Michael and Mathov, Yael and Bhairav, Suhas and Shabtai, Asaf and Elovici, Yuval},
+	urldate = {2024-06-30},
+	date = {2019-03},
+	note = {Conference Name: {IEEE} Transactions on Reliability},
+	keywords = {Hardware, Internet of Things, Internet of Things ({IoT}), {IoT} devices, Security, Software, Standards, Testing, privacy, security, testbed framework},
+}
+
+@article{fursinckorg2021,
+	title = {Collective knowledge: organizing research projects as a database of reusable components and portable workflows with common interfaces},
+	volume = {379},
+	url = {https://royalsocietypublishing.org/doi/full/10.1098/rsta.2020.0211},
+	doi = {10.1098/rsta.2020.0211},
+	shorttitle = {Collective knowledge},
+	abstract = {This article provides the motivation and overview of the Collective Knowledge Framework ({CK} or {cKnowledge}). The {CK} concept is to decompose research projects into reusable components that encapsulate research artifacts and provide unified application programming interfaces ({APIs}), command-line interfaces ({CLIs}), meta descriptions and common automation actions for related artifacts. The {CK} framework is used to organize and manage research projects as a database of such components. Inspired by the {USB} ‘plug and play’ approach for hardware, {CK} also helps to assemble portable workflows that can automatically plug in compatible components from different users and vendors (models, datasets, frameworks, compilers, tools). Such workflows can build and run algorithms on different platforms and environments in a unified way using the customizable {CK} program pipeline with software detection plugins and the automatic installation of missing packages. This article presents a number of industrial projects in which the modular {CK} approach was successfully validated in order to automate benchmarking, auto-tuning and co-design of efficient software and hardware for machine learning and artificial intelligence in terms of speed, accuracy, energy, size and various costs. The {CK} framework also helped to automate the artifact evaluation process at several computer science conferences as well as to make it easier to reproduce, compare and reuse research techniques from published papers, deploy them in production, and automatically adapt them to continuously changing datasets, models and systems. The long-term goal is to accelerate innovation by connecting researchers and practitioners to share and reuse all their knowledge, best practices, artifacts, workflows and experimental results in a common, portable and reproducible format at {cKnowledge}.io.
+
+This article is part of the theme issue ‘Reliability and reproducibility in computational science: implementing verification, validation and uncertainty quantification in silico’.},
+	pages = {20200211},
+	number = {2197},
+	journaltitle = {Philosophical Transactions of the Royal Society A: Mathematical, Physical and Engineering Sciences},
+	author = {Fursin, Grigori},
+	urldate = {2024-06-30},
+	date = {2021-03-29},
+	note = {Publisher: Royal Society},
+	keywords = {{DevOps}, {FAIR} principles, portability, reproducibility, research automation, reusability},
+}
+
+@inproceedings{friesssniffing2018,
+	title = {Multichannel-Sniffing-System for Real-World Analysing of Wi-Fi-Packets},
+	url = {https://ieeexplore.ieee.org/abstract/document/8436715},
+	doi = {10.1109/ICUFN.2018.8436715},
+	abstract = {Wireless technologies like Wi-Fi send their data using multiple channels. To analyze an environment and all Wi-Fi packets inside, a sniffing system is needed, which can sniff on all used channels of the wireless technology at the same time. This allows catching most packets on each channel. In this paper, a way to build up a multi-channel-sniffing-system ({MCSS}) is described. The test system uses several single board computers ({SBC}) with an external Wi-Fi adapter ({USB}), 19 {SBCs} are sniffing nodes ({SFN}) and one {SBC} as sending node ({SN}). The sniffing {SBCs} are placed in a cycle around the sender so that every node has the same chance to receive the simulated packets from the {SN}. For the control of all 20 {SBCs}, a self-developed software is used, which connects from the host to the clients and is used for configuring the experiments. The configuration is sent to each client and will initiate their start, so that their times are also synchronized, for this all clients are synchronised using a time server.},
+	eventtitle = {2018 Tenth International Conference on Ubiquitous and Future Networks ({ICUFN})},
+	pages = {358--364},
+	booktitle = {2018 Tenth International Conference on Ubiquitous and Future Networks ({ICUFN})},
+	author = {Friess, Kristof},
+	urldate = {2024-04-06},
+	date = {2018-07},
+	note = {{ISSN}: 2165-8536},
+	keywords = {Bluetooth, Europe, Hardware, Monitoring, Universal Serial Bus, Wireless communication, Wireless fidelity, multichannel, node.js, sbc, sniffing, wifi},
+}
+
+@inproceedings{peekaboo2020,
+	title = {Peek-a-Boo: I see your smart home activities, even encrypted!},
+	url = {http://arxiv.org/abs/1808.02741},
+	doi = {10.1145/3395351.3399421},
+	shorttitle = {Peek-a-Boo},
+	abstract = {A myriad of {IoT} devices such as bulbs, switches, speakers in a smart home environment allow users to easily control the physical world around them and facilitate their living styles through the sensors already embedded in these devices. Sensor data contains a lot of sensitive information about the user and devices. However, an attacker inside or near a smart home environment can potentially exploit the innate wireless medium used by these devices to exfiltrate sensitive information from the encrypted payload (i.e., sensor data) about the users and their activities, invading user privacy. With this in mind,in this work, we introduce a novel multi-stage privacy attack against user privacy in a smart environment. It is realized utilizing state-of-the-art machine-learning approaches for detecting and identifying the types of {IoT} devices, their states, and ongoing user activities in a cascading style by only passively sniffing the network traffic from smart home devices and sensors. The attack effectively works on both encrypted and unencrypted communications. We evaluate the efficiency of the attack with real measurements from an extensive set of popular off-the-shelf smart home {IoT} devices utilizing a set of diverse network protocols like {WiFi}, {ZigBee}, and {BLE}. Our results show that an adversary passively sniffing the traffic can achieve very high accuracy (above 90\%) in identifying the state and actions of targeted smart home devices and their users. To protect against this privacy leakage, we also propose a countermeasure based on generating spoofed traffic to hide the device states and demonstrate that it provides better protection than existing solutions.},
+	pages = {207--218},
+	booktitle = {Proceedings of the 13th {ACM} Conference on Security and Privacy in Wireless and Mobile Networks},
+	author = {Acar, Abbas and Fereidooni, Hossein and Abera, Tigist and Sikder, Amit Kumar and Miettinen, Markus and Aksu, Hidayet and Conti, Mauro and Sadeghi, Ahmad-Reza and Uluagac, Selcuk},
+	urldate = {2024-02-25},
+	date = {2020-07-08},
+	eprinttype = {arxiv},
+	eprint = {1808.02741 [cs]},
+	keywords = {{BLE}, Computer Science - Cryptography and Security, {ZigBee}, network traffic, privacy, smart-home, wifi},
+}
+
+@article{abuwaragaTestbed2020,
+	title = {Design and implementation of automated {IoT} security testbed},
+	volume = {88},
+	issn = {0167-4048},
+	url = {https://www.sciencedirect.com/science/article/pii/S0167404819301920},
+	doi = {10.1016/j.cose.2019.101648},
+	abstract = {The emergence of technology associated with the Internet of Things ({IoT}) is reshaping our lives, while simultaneously raising many issues due to their low level of security, which attackers can exploit for malicious purposes. This research paper conducts a comprehensive analysis of previous studies on {IoT} device security with a focus on the various tools used to test {IoT} devices and the vulnerabilities that were found. Additionally, the paper contains a survey of {IoT}-based security testbeds in the research literature. In this research study, we introduce an open source platform for identifying weaknesses in {IoT} networks and communications. The platform is easily modifiable and extendible to enable the addition of new security assessment tests and functionalities. It automates security evaluation, allowing for testing without human intervention. The testbed reports the security problems of the tested devices and can detect all attacks made against the devices. It is also designed to monitor communications within the testbed and with connected devices, enabling the system to abort if malicious activity is detected. To demonstrate the capabilities of the proposed {IoT} security testbed, it is used to examine the vulnerabilities of two {IoT} devices: a wireless camera and a smart bulb.},
+	pages = {101648},
+	journaltitle = {Computers \& Security},
+	shortjournal = {Computers \& Security},
+	author = {Abu Waraga, Omnia and Bettayeb, Meriem and Nasir, Qassim and Abu Talib, Manar},
+	urldate = {2024-06-30},
+	date = {2020-01-01},
+	keywords = {Automated testbed architecture, Internet of Things, {IoT} testbed, Vulnerability assessment},
+}
+
+@article{vasserman_vampire_2013,
+	title = {Vampire Attacks: Draining Life from Wireless Ad Hoc Sensor Networks},
+	volume = {12},
+	issn = {1558-0660},
+	url = {https://ieeexplore.ieee.org/document/6112758},
+	doi = {10.1109/TMC.2011.274},
+	shorttitle = {Vampire Attacks},
+	abstract = {Ad hoc low-power wireless networks are an exciting research direction in sensing and pervasive computing. Prior security work in this area has focused primarily on denial of communication at the routing or medium access control levels. This paper explores resource depletion attacks at the routing protocol layer, which permanently disable networks by quickly draining nodes' battery power. These "Vampire” attacks are not specific to any specific protocol, but rather rely on the properties of many popular classes of routing protocols. We find that all examined protocols are susceptible to Vampire attacks, which are devastating, difficult to detect, and are easy to carry out using as few as one malicious insider sending only protocol-compliant messages. In the worst case, a single Vampire can increase network-wide energy usage by a factor of O(N), where N in the number of network nodes. We discuss methods to mitigate these types of attacks, including a new proof-of-concept protocol that provably bounds the damage caused by Vampires during the packet forwarding phase.},
+	pages = {318--332},
+	number = {2},
+	journaltitle = {{IEEE} Transactions on Mobile Computing},
+	author = {Vasserman, Eugene Y. and Hopper, Nicholas},
+	urldate = {2024-06-22},
+	date = {2013-02},
+	note = {Conference Name: {IEEE} Transactions on Mobile Computing},
+	keywords = {Ad hoc networks, Denial of service, Energy consumption, Network topology, Routing, Routing protocols, Topology, ad hoc networks, routing, security, sensor networks, wireless networks},
+}
+
+@article{bashir2017internet,
+	title = {The Internet of Things testbed: a survey and evaluation},
+	volume = {78},
+	pages = {409--421},
+	journaltitle = {Future Generation Computer Systems},
+	author = {Bashir, Abid H and Gill, Khurram},
+	date = {2017},
+	note = {Publisher: Elsevier},
+}
+
+@article{vaughan2005use,
+	title = {The use of climate chambers in biological research},
+	volume = {39},
+	pages = {5121--5127},
+	number = {14},
+	journaltitle = {Environmental Science \& Technology},
+	author = {Vaughan, {TL} and Battle, {SC} and Walker, {KL}},
+	date = {2005},
+	note = {Publisher: {ACS} Publications},
+}
+
+@article{huang2011testbed,
+	title = {Testbed for evaluating performance of health monitoring systems},
+	volume = {60},
+	pages = {114--123},
+	number = {1},
+	journaltitle = {{IEEE} Transactions on Instrumentation and Measurement},
+	author = {Huang, Qinfen and Liu, Min and Garcia, Alfredo and Reynolds, Matthew},
+	date = {2011},
+	note = {Publisher: {IEEE}},
+}
+
+@online{noauthor_fhs_nodate,
+	title = {{FHS} Referenced Specifications},
+	url = {https://refspecs.linuxfoundation.org/fhs.shtml},
+	urldate = {2024-06-22},
+}
+
+@misc{fsh-home,
+	title = {3.8. /home : User home directories (optional)},
+	url = {https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s08.html},
+	urldate = {2024-06-22},
+}
+
+@online{go-fair,
+	title = {{FAIR} Principles},
+	url = {https://www.go-fair.org/fair-principles/},
+	abstract = {In 2016, the ‘{FAIR} Guiding Principles for scientific data management and stewardship’ were published in Scientific Data. The authors intended to provide guidelines to improve the Findability, Accessibility, Interoperability, and Reuse of digital assets. The principles emphasise machine-actionability (i.e., the capacity of… Continue reading →},
+	titleaddon = {{GO} {FAIR}},
+	urldate = {2024-06-22},
+	langid = {american},
+}
+
+@online{coryefelle_correcting_2016,
+	title = {Correcting the {IoT} History},
+	url = {http://www.chetansharma.com/correcting-the-iot-history/},
+	abstract = {In the last 5 years, {IoT} has entered the industry consciousness. There are varying forecasts calling for tremendous growth and … Continued},
+	titleaddon = {Chetan Sharma},
+	author = {{CoryEfelle}},
+	urldate = {2024-06-20},
+	date = {2016-03-14},
+	langid = {american},
+}
+
+@misc{noauthor_overview_2012,
+	title = {Overview of the Internet of things},
+	url = {https://handle.itu.int/11.1002/1000/11559},
+	shorttitle = {Y.{IoT}-overview},
+	abstract = {Recommendation {ITU}-T Y.2060 provides an overview of the Internet of things ({IoT}). It clarifies the concept and scope of the {IoT}, identifies the fundamental characteristics and high-level requirements of the {IoT} and describes the {IoT} reference model. The ecosystem and business models are also provided in an informative appendix.
+
+Former {ITU}-T Y.2060 renumbered as {ITU}-T Y.4000 on 2016-02-05 without further modification and without being republished.},
+	number = {{ITU}-T Y.4000},
+	date = {2012-06-15},
+}
+
+@online{testbedOxford,
+	title = {test bed noun - Definition, pictures, pronunciation and usage notes {\textbar} Oxford Advanced Learner's Dictionary at {OxfordLearnersDictionaries}.com},
+	url = {https://www.oxfordlearnersdictionaries.com/definition/english/test-bed},
+	urldate = {2024-06-20},
+}
+
+@inproceedings{infoexpiot,
+	location = {New York, {NY}, {USA}},
+	title = {Information Exposure From Consumer {IoT} Devices: A Multidimensional, Network-Informed Measurement Approach},
+	isbn = {978-1-4503-6948-0},
+	url = {https://dl.acm.org/doi/10.1145/3355369.3355577},
+	doi = {10.1145/3355369.3355577},
+	series = {{IMC} '19},
+	shorttitle = {Information Exposure From Consumer {IoT} Devices},
+	abstract = {Internet of Things ({IoT}) devices are increasingly found in everyday homes, providing useful functionality for devices such as {TVs}, smart speakers, and video doorbells. Along with their benefits come potential privacy risks, since these devices can communicate information about their users to other parties over the Internet. However, understanding these risks in depth and at scale is difficult due to heterogeneity in devices' user interfaces, protocols, and functionality. In this work, we conduct a multidimensional analysis of information exposure from 81 devices located in labs in the {US} and {UK}. Through a total of 34,586 rigorous automated and manual controlled experiments, we characterize information exposure in terms of destinations of Internet traffic, whether the contents of communication are protected by encryption, what are the {IoT}-device interactions that can be inferred from such content, and whether there are unexpected exposures of private and/or sensitive information (e.g., video surreptitiously transmitted by a recording device). We highlight regional differences between these results, potentially due to different privacy regulations in the {US} and {UK}. Last, we compare our controlled experiments with data gathered from an in situ user study comprising 36 participants.},
+	pages = {267--279},
+	booktitle = {Proceedings of the Internet Measurement Conference},
+	publisher = {Association for Computing Machinery},
+	author = {Ren, Jingjing and Dubois, Daniel J. and Choffnes, David and Mandalari, Anna Maria and Kolcun, Roman and Haddadi, Hamed},
+	urldate = {2024-02-25},
+	date = {2019-10-21},
+}
+
+@inproceedings{aysom23,
+	title = {Are You Spying on Me? \{Large-Scale\} Analysis on \{{IoT}\} Data Exposure through Companion Apps},
+	isbn = {978-1-939133-37-3},
+	url = {https://www.usenix.org/conference/usenixsecurity23/presentation/nan},
+	shorttitle = {Are You Spying on Me?},
+	eventtitle = {32nd {USENIX} Security Symposium ({USENIX} Security 23)},
+	pages = {6665--6682},
+	author = {Nan, Yuhong and Wang, Xueqiang and Xing, Luyi and Liao, Xiaojing and Wu, Ruoyu and Wu, Jianliang and Zhang, Yifan and Wang, {XiaoFeng}},
+	urldate = {2024-02-25},
+	date = {2023},
+	langid = {english},
+}
+
+@unpublished{noauthor_toward_2023,
+	title = {Toward a common language to facilitate reproducible research and technology transfer: challenges and solutions},
+	url = {https://zenodo.org/records/8105339},
+	shorttitle = {Toward a common language to facilitate reproducible research and technology transfer},
+	abstract = {The keynote presentation from the 1st {ACM} conference on reproducibility and replicability ({ACM} {REP}'23).The video of this presentation is available at the {ACM} {YouTube} channel.Please don't hesitate to provide your feedback via the public Discord server from the {MLCommons} Task Force on Automation and Reproducibility and {GitHub} issues.[ {GitHub} project ] [ Public Collective Knowledge repository ][ Related reproducibility initiatives ] [ {cTuning}.org ] [ {cKnowledge}.org ]During the past 10 years, we have considerably improved the reproducibility of experimental results from published papers by introducing the artifact evaluation process with a unified artifact appendix and reproducibility checklists, Jupyter notebooks, containers, and Git repositories. On the other hand, our experience reproducing more than 200 papers shows that it can take weeks and months of painful and repetitive interactions between teams to reproduce artifacts. This effort includes decrypting numerous {README} files, examining ad-hoc artifacts and containers, and figuring out how to reproduce computational results. Furthermore, snapshot containers pose a challenge to optimize algorithms' performance, accuracy, power consumption and operational costs across diverse and rapidly evolving software, hardware, and data used in the real world.In this talk, I explain how our practical artifact evaluation experience and the feedback from researchers and evaluators motivated us to develop a simple, intuitive, technology agnostic, and English-like scripting language called Collective Mind ({CM}). It helps to automatically adapt any given experiment to any software, hardware, and data while automatically generating unified {README} files and synthesizing modular containers with a unified {API}. It is being developed by {MLCommons} to facilitate reproducible {AI}/{ML} Systems research and minimizing manual and repetitive benchmarking and optimization efforts, reduce time and costs for reproducible research, and simplify technology transfer to production. I also present several recent use cases of how {CM} helps {MLCommons}, the Student Cluster Competition, and artifact evaluation at {ACM}/{IEEE} conferences. I conclude with our development plans, new challenges, possible solutions, and upcoming reproducibility and optimization challenges powered by the {MLCommons} Collective Knowledge platform and {CM}: access.{cKnowledge}.org.},
+	urldate = {2024-02-25},
+	date = {2023-06-28},
+	doi = {10.5281/zenodo.8105339},
+	keywords = {artifact evaluation, artificial intelligence, automation, {cTuning}, chatgpt, cknowledge, collective knowledge, collective mind, competitions, llm, llm automation, machine learning, mlcommons, mlperf, optimization challenges, performance, replicability, reproducibility, reusability, systems},
+}
diff --git a/thesis/setup_argparse.py b/thesis/setup_argparse.py
new file mode 100644
index 0000000..27e89b3
--- /dev/null
+++ b/thesis/setup_argparse.py
@@ -0,0 +1,24 @@
+def setup_argparse():
+    # create top level parser
+    root_parser = argparse.ArgumentParser(prog='iottb')
+    # shared options
+    root_parser.add_argument('--verbose', '-v', action='count', default=0)
+    root_parser.add_argument('--script-mode', action='store_true', help='Run in script mode (non-interactive)')
+    # Group of args w.r.t iottb.db creation
+    group = root_parser.add_argument_group('database options')
+    group.add_argument('--db-home', default=Path.home() / 'IoTtb.db')
+    group.add_argument('--config-home', default=Path.home() / '.config' / 'iottb.conf', type=Path, )
+    group.add_argument('--user', default=Path.home().stem, type=Path, )
+
+    # configure subcommands
+    subparsers = root_parser.add_subparsers(title='subcommands', required=True, dest='command')
+    # setup_capture_parser(subparsers)
+    setup_init_device_root_parser(subparsers)
+    setup_sniff_parser(subparsers)
+    # Utility to list interfaces directly with iottb instead of relying on external tooling
+
+    interfaces_parser = subparsers.add_parser('list-interfaces', aliases=['li', 'if'],
+                                              help='List available network interfaces.')
+    interfaces_parser.set_defaults(func=list_interfaces)
+
+    return root_parser
\ No newline at end of file
diff --git a/thesis/sniff.py b/thesis/sniff.py
new file mode 100644
index 0000000..c5330c9
--- /dev/null
+++ b/thesis/sniff.py
@@ -0,0 +1,339 @@
+import json
+import logging
+import os
+import re
+import subprocess
+import uuid
+from datetime import datetime
+from pathlib import Path
+from time import time
+
+import click
+from click_option_group import optgroup
+
+from iottb.utils.string_processing import make_canonical_name
+
+# Setup logger
+logger = logging.getLogger('iottb.sniff')
+
+
+def is_ip_address(address):
+    ip_pattern = re.compile(r"^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$")
+    return ip_pattern.match(address) is not None
+
+
+def is_mac_address(address):
+    mac_pattern = re.compile(r"^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$")
+    return mac_pattern.match(address) is not None
+
+
+def load_config(cfg_file):
+    """Loads configuration from the given file path."""
+    with open(cfg_file, 'r') as config_file:
+        return json.load(config_file)
+
+
+def validate_sniff(ctx, param, value):
+    logger.info('Validating sniff...')
+    if ctx.params.get('unsafe') and not value:
+        return None
+    if not ctx.params.get('unsafe') and not value:
+        raise click.BadParameter('Address is required unless --unsafe is set.')
+    if not is_ip_address(value) and not is_mac_address(value):
+        raise click.BadParameter('Address must be a valid IP address or MAC address.')
+    return value
+
+
+def run_pre(pre):
+    pass
+
+
+def run_post(post):
+    pass
+
+
+@click.command('sniff', help='Sniff packets with tcpdump')
+@optgroup.group('Testbed sources')
+@optgroup.option('--db', '--database', type=str, envvar='IOTTB_DB', show_envvar=True,
+                 help='Database of device. Only needed if not current default.')
+@optgroup.option('--app', type=str, help='Companion app being used during capture', required=False)
+@optgroup.group('Runtime behaviour')
+@optgroup.option('--unsafe', is_flag=True, default=False, envvar='IOTTB_UNSAFE', is_eager=True,
+                 help='Disable checks for otherwise required options.\n', show_envvar=True)
+@optgroup.option('--guided', is_flag=True, default=False, envvar='IOTTB_GUIDED', show_envvar=True)
+@optgroup.option('--pre', type=click.Path(exists=True, executable=True), help='Script to be executed before main '
+                                                                              'command'
+                                                                              'is started.')
+@optgroup.group('Tcpdump options')
+@optgroup.option('-i', '--interface',
+                 help='Network interface to capture on.' +
+                      'If not specified tcpdump tries to find and appropriate one.\n', show_envvar=True,
+                 envvar='IOTTB_CAPTURE_INTERFACE')
+@optgroup.option('-a', '--address', callback=validate_sniff,
+                 help='IP or MAC address to filter packets by.\n', show_envvar=True,
+                 envvar='IOTTB_CAPTURE_ADDRESS')
+@optgroup.option('-I', '--monitor-mode', help='Put interface into monitor mode.', is_flag=True)
+@optgroup.option('--ff', type=str, envvar='IOTTB_CAPTURE_FILTER', show_envvar=True,
+                 help='tcpdump filter as string or file path.')
+@optgroup.option('-#', '--print-pacno', is_flag=True, default=True,
+                 help='Print packet number at beginning of line. True by default.')
+@optgroup.option('-e', '--print-ll', is_flag=True, default=False,
+                 help='Print link layer headers. True by default.')
+@optgroup.option('-c', '--count', type=int, help='Number of packets to capture.', default=1000)
+# @optgroup.option('--mins', type=int, help='Time in minutes to capture.', default=1)
+@click.argument('tcpdump-args', nargs=-1, required=False, metavar='[TCPDUMP-ARGS]')
+@click.argument('device', required=False)
+@click.pass_context
+def sniff(ctx, device, interface, print_pacno, ff, count, monitor_mode, print_ll, address, db, unsafe, guided,
+          app, tcpdump_args, pre, post, **params):
+    """ Sniff packets from a device """
+    logger.info('sniff command invoked')
+    # Step 0: run pre script:
+    if pre:
+        click.echo(f'Running pre command {pre}')
+        run_pre(pre)
+    # Step1: Load Config
+    config = ctx.obj['CONFIG']
+    logger.debug(f'Config loaded: {config}')
+
+    # Step2: determine relevant database
+    database = db if db else config.default_database
+    path = config.db_path_dict[database]
+    full_db_path = Path(path) / database
+    logger.debug(f'Full db path is {str(full_db_path)}')
+
+    # 2.2: Check if it exists
+    if not full_db_path.is_dir():
+        logger.error('DB unexpectedly missing')
+        click.echo('DB unexpectedly missing')
+        return
+
+    canonical_name, aliases = make_canonical_name(device)
+    click.echo(f'Using canonical device name {canonical_name}')
+    device_path = full_db_path / canonical_name
+
+    # Step 3: now the device
+    if not device_path.exists():
+        if not unsafe:
+            logger.error(f'Device path {device_path} does not exist')
+            click.echo(f'Device path {device_path} does not exist')
+            return
+        else:
+            device_path.mkdir(parents=True, exist_ok=True)
+            logger.info(f'Device path {device_path} created')
+
+    click.echo(f'Found device at path {device_path}')
+    # Step 4: Generate filter
+    generic_filter = None
+    cap_filter = None
+    if ff:
+        logger.debug(f'ff: {ff}')
+        if Path(ff).is_file():
+            logger.info('Given filter option is a file')
+            with open(ff, 'r') as f:
+                cap_filter = f.read().strip()
+        else:
+            logger.info('Given filter option is an expression')
+            cap_filter = ff
+    else:
+        if address is not None:
+            if is_ip_address(address):
+                generic_filter = 'net'
+                cap_filter = f'{generic_filter} {address}'
+            elif is_mac_address(address):
+                generic_filter = 'ether net'
+                cap_filter = f'{generic_filter} {address}'
+            elif not unsafe:
+                logger.error('Invalid address format')
+                click.echo('Invalid address format')
+                return
+
+    logger.info(f'Generic filter {generic_filter}')
+    click.echo(f'Using filter {cap_filter}')
+
+    # Step 5: prep capture directory
+    capture_date = datetime.now().strftime('%Y-%m-%d')
+    capture_base_dir = device_path / f'sniffs/{capture_date}'
+    capture_base_dir.mkdir(parents=True, exist_ok=True)
+
+    logger.debug(f'Previous captures {capture_base_dir.glob('cap*')}')
+    capture_count = sum(1 for _ in capture_base_dir.glob('cap*'))
+    logger.debug(f'Capture count is {capture_count}')
+
+    capture_dir = f'cap{capture_count:04d}-{datetime.now().strftime('%H%M')}'
+    logger.debug(f'capture_dir: {capture_dir}')
+
+    # Full path
+    capture_dir_full_path = capture_base_dir / capture_dir
+    capture_dir_full_path.mkdir(parents=True, exist_ok=True)
+
+    click.echo(f'Files will be placed in {str(capture_dir_full_path)}')
+    logger.debug(f'successfully created capture directory')
+
+    # Step 6: Prepare capture file names
+    # Generate UUID for filenames
+    capture_uuid = str(uuid.uuid4())
+    click.echo(f'Capture has id {capture_uuid}')
+
+    pcap_file = f"{canonical_name}_{capture_uuid}.pcap"
+    pcap_file_full_path = capture_dir_full_path / pcap_file
+    stdout_log_file = f'stdout_{capture_uuid}.log'
+    stderr_log_file = f'stderr_{capture_uuid}.log'
+
+    logger.debug(f'Full pcap file path is {pcap_file_full_path}')
+    logger.info(f'pcap file name is {pcap_file}')
+    logger.info(f'stdout log file is {stdout_log_file}')
+    logger.info(f'stderr log file is {stderr_log_file}')
+
+    # Step 7: Build tcpdump command
+    logger.debug(f'pgid {os.getpgrp()}')
+    logger.debug(f'ppid {os.getppid()}')
+    logger.debug(f'(real, effective, saved) user id: {os.getresuid()}')
+    logger.debug(f'(real, effective, saved) group id: {os.getresgid()}')
+
+    cmd = ['sudo', 'tcpdump']
+
+    # 7.1 process flags
+    flags = []
+    if print_pacno:
+        flags.append('-#')
+    if print_ll:
+        flags.append('-e')
+    if monitor_mode:
+        flags.append('-I')
+    flags.append('-n')  # TODO: Integrate, in case name resolution is wanted!
+    cmd.extend(flags)
+    flags_string = " ".join(flags)
+    logger.debug(f'Flags: {flags_string}')
+
+    # debug interlude
+    verbosity = ctx.obj['VERBOSITY']
+    if verbosity > 0:
+        verbosity_flag = '-'
+        for i in range(0, verbosity):
+            verbosity_flag = verbosity_flag + 'v'
+        logger.debug(f'verbosity string to pass to tcpdump: {verbosity_flag}')
+        cmd.append(verbosity_flag)
+
+    # 7.2 generic (i.e. reusable) kw args
+    generic_kw_args = []
+    if count:
+        generic_kw_args.extend(['-c', str(count)])
+    # if mins:
+    #     generic_kw_args.extend(['-G', str(mins * 60)]) TODO: this currently loads to errors with sudo
+    cmd.extend(generic_kw_args)
+    generic_kw_args_string = " ".join(generic_kw_args)
+    logger.debug(f'KW args: {generic_kw_args_string}')
+
+    # 7.3 special kw args (not a priori reusable)
+    non_generic_kw_args = []
+    if interface:
+        non_generic_kw_args.extend(['-i', interface])
+    non_generic_kw_args.extend(['-w', str(pcap_file_full_path)])
+    cmd.extend(non_generic_kw_args)
+    non_generic_kw_args_string = " ".join(non_generic_kw_args)
+    logger.debug(f'Non transferable (special) kw args: {non_generic_kw_args_string}')
+
+    # 7.4 add filter expression
+    if cap_filter:
+        logger.debug(f'cap_filter (not generic): {cap_filter}')
+        cmd.append(cap_filter)
+
+    full_cmd_string = " ".join(cmd)
+
+    logger.info(f'tcpdump command: {"".join(full_cmd_string)}')
+    click.echo('Capture setup complete!')
+    # Step 8: Execute tcpdump command
+    start_time = datetime.now().strftime("%H:%M:%S")
+    start = time()
+    try:
+        if guided:
+            click.confirm(f'Execute following command: {full_cmd_string}')
+        stdout_log_file_abs_path = capture_dir_full_path / stdout_log_file
+        stderr_log_file_abs_path = capture_dir_full_path / stderr_log_file
+        stdout_log_file_abs_path.touch(mode=0o777)
+        stderr_log_file_abs_path.touch(mode=0o777)
+        with open(stdout_log_file_abs_path, 'w') as out, open(stderr_log_file_abs_path, 'w') as err:
+            logger.debug(f'\nstdout: {out}.\nstderr: {err}.\n')
+
+            tcp_complete = subprocess.run(cmd, check=True, capture_output=True, text=True)
+
+            out.write(tcp_complete.stdout)
+            err.write(tcp_complete.stderr)
+
+            # click.echo(f'Mock sniff execution')
+        click.echo(f"Capture complete. Saved to {pcap_file}")
+    except subprocess.CalledProcessError as e:
+        logger.error(f'Failed to capture packets: {e}')
+        click.echo(f'Failed to capture packets: {e}')
+        click.echo(f'Check {stderr_log_file} for more info.')
+        if ctx.obj['DEBUG']:
+            msg = [f'STDERR log {stderr_log_file} contents:\n']
+            with open(capture_dir_full_path / stderr_log_file) as log:
+                for line in log:
+                    msg.append(line)
+
+            click.echo("\t".join(msg), lvl='e')
+            # print('DEBUG ACTIVE')
+        if guided:
+            click.prompt('Create metadata anyway?')
+        else:
+            click.echo('Aborting capture...')
+            exit()
+    end_time = datetime.now().strftime("%H:%M:%S")
+    end = time()
+    delta = end - start
+    click.echo(f'tcpdump took {delta:.2f} seconds.')
+    # Step 9: Register metadata
+    metadata = {
+        'device': canonical_name,
+        'device_id': device,
+        'capture_id': capture_uuid,
+        'capture_date_iso': datetime.now().isoformat(),
+        'invoked_command': " ".join(map(str, cmd)),
+        'capture_duration': delta,
+        'generic_parameters': {
+            'flags': flags_string,
+            'kwargs': generic_kw_args_string,
+            'filter': generic_filter
+        },
+        'non_generic_parameters': {
+            'kwargs': non_generic_kw_args_string,
+            'filter': cap_filter
+        },
+        'features': {
+            'interface': interface,
+            'address': address
+        },
+        'resources': {
+            'pcap_file': str(pcap_file),
+            'stdout_log': str(stdout_log_file),
+            'stderr_log': str(stderr_log_file)
+        },
+        'environment': {
+            'capture_dir': capture_dir,
+            'database': database,
+            'capture_base_dir': str(capture_base_dir),
+            'capture_dir_abs_path': str(capture_dir_full_path)
+        }
+    }
+
+    click.echo('Ensuring correct ownership of created files.')
+    username = os.getlogin()
+    gid = os.getgid()
+
+    # Else there are issues when running with sudo:
+    try:
+        subprocess.run(f'sudo chown -R {username}:{username} {device_path}', shell=True)
+    except OSError as e:
+        click.echo(f'Some error {e}')
+
+    click.echo(f'Saving metadata.')
+    metadata_abs_path = capture_dir_full_path / 'capture_metadata.json'
+    with open(metadata_abs_path, 'w') as f:
+        json.dump(metadata, f, indent=4)
+
+    click.echo(f'END  SNIFF SUBCOMMAND')
+    if post:
+        click.echo(f'Running post command {post}')
+        run_post(post)
diff --git a/thesis/string_processing.py b/thesis/string_processing.py
new file mode 100644
index 0000000..2295318
--- /dev/null
+++ b/thesis/string_processing.py
@@ -0,0 +1,37 @@
+import re
+from iottb import definitions
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+def normalize_string(s, chars_to_replace=None, replacement=None, allow_unicode=False):
+    pass
+
+
+def make_canonical_name(name):
+    """
+    Normalize the device name to a canonical form:
+    - Replace the first two occurrences of spaces
+    - transform characters with dashes.
+    - Remove remaining spaces.
+    - Convert to lowercase.
+    """
+    aliases = [name]
+    # We first normalize
+    chars_to_replace = definitions.REPLACEMENT_SET_CANONICAL_DEVICE_NAMES
+    pattern = re.compile('|'.join(re.escape(char) for char in chars_to_replace))
+    norm_name = pattern.sub('-', name)
+    # Remove non ascii chars
+    norm_name = re.sub(r'[^\x00-\x7F]+', '', norm_name) 
+
+    aliases.append(norm_name)
+    # Lower case
+    norm_name = norm_name.lower()
+    aliases.append(norm_name)
+    # canoncial name is only first two tokens
+    parts = norm_name.split('-')
+    canonical_name = canonical_name = '-'.join(parts[:2])
+    aliases.append(canonical_name)
+    aliases = list(set(aliases))
+    return canonical_name, aliases
diff --git a/thesis/thesis.bst b/thesis/thesis.bst
new file mode 100644
index 0000000..75845b0
--- /dev/null
+++ b/thesis/thesis.bst
@@ -0,0 +1,1241 @@
+%%
+%% This is file `bthesis.bst',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% merlin.mbs  (with options: `seq-no,vonx,nm-rev,ed-rev,jnrlst,yr-par,xmth,atit-u,num-xser,xedn,url,url-blk,plntx,')
+%% ----------------------------------------
+%% ***  ***
+%% 
+%% Copyright 1994-2007 Patrick W Daly
+ % ===============================================================
+ % IMPORTANT NOTICE:
+ % This bibliographic style (bst) file has been generated from one or
+ % more master bibliographic style (mbs) files, listed above.
+ %
+ % This generated file can be redistributed and/or modified under the terms
+ % of the LaTeX Project Public License Distributed from CTAN
+ % archives in directory macros/latex/base/lppl.txt; either
+ % version 1 of the License, or any later version.
+ % ===============================================================
+ % Name and version information of the main mbs file:
+ % \ProvidesFile{merlin.mbs}[2007/04/24 4.20 (PWD, AO, DPC)]
+ %   For use with BibTeX version 0.99a or later
+ %-------------------------------------------------------------------
+ % This bibliography style file is intended for texts in ENGLISH
+ % This is a numerical citation style, and as such is standard LaTeX.
+ % It requires no extra package to interface to the main text.
+ % The form of the \bibitem entries is
+ %   \bibitem{key}...
+ % Usage of \cite is as follows:
+ %   \cite{key} ==>>          [#]
+ %   \cite[chap. 2]{key} ==>> [#, chap. 2]
+ % where # is a number determined by the ordering in the reference list.
+ % The order in the reference list is that by which the works were originally
+ %   cited in the text, or that in the database.
+ %---------------------------------------------------------------------
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    eid
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    url
+    volume
+    year
+  }
+  {}
+  { label }
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+STRINGS { s t}
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { ", " * write$ }
+    { output.state after.block =
+        { add.period$ write$
+          newline$
+          "\newblock " write$
+        }
+        { output.state before.all =
+            'write$
+            { add.period$ " " * write$ }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+FUNCTION {output.check}
+{ 't :=
+  duplicate$ empty$
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+FUNCTION {add.blank}
+{  " " * before.all 'output.state :=
+}
+
+FUNCTION {date.block}
+{
+  new.block
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { "{\em " swap$ * "\/}" * }
+  if$
+}
+FUNCTION {tie.or.space.prefix}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$
+}
+
+FUNCTION {capitalize}
+{ "u" change.case$ "t" change.case$ }
+
+FUNCTION {space.word}
+{ " " swap$ * " " * }
+ % Here are the language-specific definitions for explicit words.
+ % Each function has a name bbl.xxx where xxx is the English word.
+ % The language selected here is ENGLISH
+FUNCTION {bbl.and}
+{ "and"}
+
+FUNCTION {bbl.etal}
+{ "et~al." }
+
+FUNCTION {bbl.editors}
+{ "editors" }
+
+FUNCTION {bbl.editor}
+{ "editor" }
+
+FUNCTION {bbl.edby}
+{ "edited by" }
+
+FUNCTION {bbl.edition}
+{ "edition" }
+
+FUNCTION {bbl.volume}
+{ "volume" }
+
+FUNCTION {bbl.of}
+{ "of" }
+
+FUNCTION {bbl.number}
+{ "number" }
+
+FUNCTION {bbl.nr}
+{ "no." }
+
+FUNCTION {bbl.in}
+{ "in" }
+
+FUNCTION {bbl.pages}
+{ "pages" }
+
+FUNCTION {bbl.page}
+{ "page" }
+
+FUNCTION {bbl.chapter}
+{ "chapter" }
+
+FUNCTION {bbl.techrep}
+{ "Technical Report" }
+
+FUNCTION {bbl.mthesis}
+{ "Master's thesis" }
+
+FUNCTION {bbl.phdthesis}
+{ "Ph.D. thesis" }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+FUNCTION {bibinfo.check}
+{ swap$
+  duplicate$ missing$
+    {
+      pop$ pop$
+      ""
+    }
+    { duplicate$ empty$
+        {
+          swap$ pop$
+        }
+        { swap$
+          pop$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {bibinfo.warn}
+{ swap$
+  duplicate$ missing$
+    {
+      swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
+      ""
+    }
+    { duplicate$ empty$
+        {
+          swap$ "empty " swap$ * " in " * cite$ * warning$
+        }
+        { swap$
+          pop$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.url}
+{ url empty$
+    { "" }
+    { "\urlprefix\url{" url * "}" * }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+
+STRINGS  { bibinfo}
+
+FUNCTION {format.names}
+{ 'bibinfo :=
+  duplicate$ empty$ 'skip$ {
+  's :=
+  "" 't :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr
+      "{vv~}{ll}{, f.}{, jj}"
+      format.name$
+      bibinfo bibinfo.check
+      't :=
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              s nameptr "{ll}" format.name$ duplicate$ "others" =
+                { 't := }
+                { pop$ }
+              if$
+              numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "others" =
+                {
+                  " " * bbl.etal *
+                }
+                {
+                  bbl.and
+                  space.word * t *
+                }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+  } if$
+}
+FUNCTION {format.names.ed}
+{
+  format.names
+}
+FUNCTION {format.authors}
+{ author "author" format.names
+}
+FUNCTION {get.bbl.editor}
+{ editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ }
+
+FUNCTION {format.editors}
+{ editor "editor" format.names duplicate$ empty$ 'skip$
+    {
+      "," *
+      " " *
+      get.bbl.editor
+      *
+    }
+  if$
+}
+FUNCTION {format.note}
+{
+ note empty$
+    { "" }
+    { note #1 #1 substring$
+      duplicate$ "{" =
+        'skip$
+        { output.state mid.sentence =
+          { "l" }
+          { "u" }
+        if$
+        change.case$
+        }
+      if$
+      note #2 global.max$ substring$ * "note" bibinfo.check
+    }
+  if$
+}
+
+FUNCTION {format.title}
+{ title
+  "title" bibinfo.check
+}
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  ""
+  before.all 'output.state :=
+}
+
+FUNCTION {n.dashify}
+{
+  't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+        { t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {   { t #1 #1 substring$ "-" = }
+                { "-" *
+                  t #2 global.max$ substring$ 't :=
+                }
+              while$
+            }
+          if$
+        }
+        { t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION {word.in}
+{ bbl.in capitalize
+  " " * }
+
+FUNCTION {format.date}
+{
+  ""
+  duplicate$ empty$
+  year  "year"  bibinfo.check duplicate$ empty$
+    { swap$ 'skip$
+        { "there's a month but no year in " cite$ * warning$ }
+      if$
+      *
+    }
+    { swap$ 'skip$
+        {
+          swap$
+          " " * swap$
+        }
+      if$
+      *
+    }
+  if$
+  duplicate$ empty$
+    'skip$
+    {
+      before.all 'output.state :=
+    " (" swap$ * ")" *
+    }
+  if$
+}
+FUNCTION {format.btitle}
+{ title "title" bibinfo.check
+  duplicate$ empty$ 'skip$
+    {
+      emphasize
+    }
+  if$
+}
+FUNCTION {either.or.check}
+{ empty$
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+FUNCTION {format.bvolume}
+{ volume empty$
+    { "" }
+    { bbl.volume volume tie.or.space.prefix
+      "volume" bibinfo.check * *
+      series "series" bibinfo.check
+      duplicate$ empty$ 'pop$
+        { swap$ bbl.of space.word * swap$
+          emphasize * }
+      if$
+      "volume and number" number either.or.check
+    }
+  if$
+}
+FUNCTION {format.number.series}
+{ volume empty$
+    { number empty$
+        { series field.or.null }
+        { series empty$
+            { number "number" bibinfo.check }
+            { output.state mid.sentence =
+                { bbl.number }
+                { bbl.number capitalize }
+              if$
+              number tie.or.space.prefix "number" bibinfo.check * *
+              bbl.in space.word *
+              series "series" bibinfo.check *
+            }
+          if$
+        }
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION {format.edition}
+{ edition duplicate$ empty$ 'skip$
+    {
+      output.state mid.sentence =
+        { "l" }
+        { "t" }
+      if$ change.case$
+      "edition" bibinfo.check
+      " " * bbl.edition *
+    }
+  if$
+}
+INTEGERS { multiresult }
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+        { #1 'multiresult := }
+        { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+FUNCTION {format.pages}
+{ pages duplicate$ empty$ 'skip$
+    { duplicate$ multi.page.check
+        {
+          bbl.pages swap$
+          n.dashify
+        }
+        {
+          bbl.page swap$
+        }
+      if$
+      tie.or.space.prefix
+      "pages" bibinfo.check
+      * *
+    }
+  if$
+}
+FUNCTION {format.journal.pages}
+{ pages duplicate$ empty$ 'pop$
+    { swap$ duplicate$ empty$
+        { pop$ pop$ format.pages }
+        {
+          ":" *
+          swap$
+          n.dashify
+          "pages" bibinfo.check
+          *
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.journal.eid}
+{ eid "eid" bibinfo.check
+  duplicate$ empty$ 'pop$
+    { swap$ duplicate$ empty$ 'skip$
+      {
+          ":" *
+      }
+      if$
+      swap$ *
+    }
+  if$
+}
+FUNCTION {format.vol.num.pages}
+{ volume field.or.null
+  duplicate$ empty$ 'skip$
+    {
+      "volume" bibinfo.check
+    }
+  if$
+  number "number" bibinfo.check duplicate$ empty$ 'skip$
+    {
+      swap$ duplicate$ empty$
+        { "there's a number but no volume in " cite$ * warning$ }
+        'skip$
+      if$
+      swap$
+      "(" swap$ * ")" *
+    }
+  if$ *
+  eid empty$
+    { format.journal.pages }
+    { format.journal.eid }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+        { bbl.chapter }
+        { type "l" change.case$
+          "type" bibinfo.check
+        }
+      if$
+      chapter tie.or.space.prefix
+      "chapter" bibinfo.check
+      * *
+      pages empty$
+        'skip$
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.booktitle}
+{
+  booktitle "booktitle" bibinfo.check
+  emphasize
+}
+FUNCTION {format.in.ed.booktitle}
+{ format.booktitle duplicate$ empty$ 'skip$
+    {
+      editor "editor" format.names.ed duplicate$ empty$ 'pop$
+        {
+          "," *
+          " " *
+          get.bbl.editor
+          ", " *
+          * swap$
+          * }
+      if$
+      word.in swap$ *
+    }
+  if$
+}
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+FUNCTION {format.thesis.type}
+{ type duplicate$ empty$
+    'pop$
+    { swap$ pop$
+      "t" change.case$ "type" bibinfo.check
+    }
+  if$
+}
+FUNCTION {format.tr.number}
+{ number "number" bibinfo.check
+  type duplicate$ empty$
+    { pop$ bbl.techrep }
+    'skip$
+  if$
+  "type" bibinfo.check
+  swap$ duplicate$ empty$
+    { pop$ "t" change.case$ }
+    { tie.or.space.prefix * * }
+  if$
+}
+FUNCTION {format.article.crossref}
+{
+  key duplicate$ empty$
+    { pop$
+      journal duplicate$ empty$
+        { "need key or journal for " cite$ * " to crossref " * crossref * warning$ }
+        { "journal" bibinfo.check emphasize word.in swap$ * }
+      if$
+    }
+    { word.in swap$ * " " *}
+  if$
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.crossref.editor}
+{ editor #1 "{vv~}{ll}" format.name$
+  "editor" bibinfo.check
+  editor num.names$ duplicate$
+  #2 >
+    { pop$
+      "editor" bibinfo.check
+      " " * bbl.etal
+      *
+    }
+    { #2 <
+        'skip$
+        { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+            {
+              "editor" bibinfo.check
+              " " * bbl.etal
+              *
+            }
+            {
+             bbl.and space.word
+              * editor #2 "{vv~}{ll}" format.name$
+              "editor" bibinfo.check
+              *
+            }
+          if$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.book.crossref}
+{ volume duplicate$ empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      pop$ word.in
+    }
+    { bbl.volume
+      capitalize
+      swap$ tie.or.space.prefix "volume" bibinfo.check * * bbl.of space.word *
+    }
+  if$
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { series empty$
+            { "need editor, key, or series for " cite$ * " to crossref " *
+              crossref * warning$
+              "" *
+            }
+            { series emphasize * }
+          if$
+        }
+        { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.incoll.inproc.crossref}
+{
+  editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+        { format.booktitle duplicate$ empty$
+            { "need editor, key, or booktitle for " cite$ * " to crossref " *
+              crossref * warning$
+            }
+            { word.in swap$ * }
+          if$
+        }
+        { word.in key * " " *}
+      if$
+    }
+    { word.in format.crossref.editor * " " *}
+  if$
+  " \cite{" * crossref * "}" *
+}
+FUNCTION {format.org.or.pub}
+{ 't :=
+  ""
+  address empty$ t empty$ and
+    'skip$
+    {
+      t empty$
+        { address "address" bibinfo.check *
+        }
+        { t *
+          address empty$
+            'skip$
+            { ", " * address "address" bibinfo.check * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+FUNCTION {format.publisher.address}
+{ publisher "publisher" bibinfo.warn format.org.or.pub
+}
+
+FUNCTION {format.organization.address}
+{ organization "organization" bibinfo.check format.org.or.pub
+}
+
+FUNCTION {article}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    {
+      journal
+      "journal" bibinfo.check
+      emphasize
+      "journal" output.check
+      format.vol.num.pages output
+      format.date "year" output.check
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {book}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check
+    }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      format.publisher.address output
+    }
+    {
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {booklet}
+{ output.bibitem
+  format.authors output
+  new.block
+  format.title "title" output.check
+  new.block
+  howpublished "howpublished" bibinfo.check output
+  address "address" bibinfo.check output
+  format.date output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ output.bibitem
+  author empty$
+    { format.editors "author and editor" output.check
+    }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    {
+      format.bvolume output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.number.series output
+      new.sentence
+      format.publisher.address output
+    }
+    {
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date "year" output.check
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.chapter.pages output
+      new.sentence
+      format.publisher.address output
+      format.edition output
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {inproceedings}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      format.bvolume output
+      format.number.series output
+      format.pages output
+      new.sentence
+      publisher empty$
+        { format.organization.address output }
+        { organization "organization" bibinfo.check output
+          format.publisher.address output
+        }
+      if$
+      format.date "year" output.check
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+FUNCTION {conference} { inproceedings }
+FUNCTION {manual}
+{ output.bibitem
+  author empty$
+    { organization "organization" bibinfo.check
+      duplicate$ empty$ 'pop$
+        { output
+          address "address" bibinfo.check output
+        }
+      if$
+    }
+    { format.authors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  author empty$
+    { organization empty$
+        {
+          address new.block.checka
+          address "address" bibinfo.check output
+        }
+        'skip$
+      if$
+    }
+    {
+      organization address new.block.checkb
+      organization "organization" bibinfo.check output
+      address "address" bibinfo.check output
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle
+  "title" output.check
+  new.block
+  bbl.mthesis format.thesis.type output.nonnull
+  school "school" bibinfo.warn output
+  address "address" bibinfo.check output
+  format.date "year" output.check
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{ output.bibitem
+  format.authors output
+  title howpublished new.block.checkb
+  format.title output
+  howpublished new.block.checka
+  howpublished "howpublished" bibinfo.check output
+  format.date output
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+  empty.misc.check
+}
+FUNCTION {phdthesis}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.btitle
+  "title" output.check
+  new.block
+  bbl.phdthesis format.thesis.type output.nonnull
+  school "school" bibinfo.warn output
+  address "address" bibinfo.check output
+  format.date "year" output.check
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{ output.bibitem
+  editor empty$
+    { organization "organization" bibinfo.check output
+    }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  format.btitle "title" output.check
+  format.bvolume output
+  format.number.series output
+  editor empty$
+    { publisher empty$
+        {
+          new.sentence
+          format.publisher.address output
+        }
+      if$
+    }
+    { publisher empty$
+        {
+          new.sentence
+          format.organization.address output }
+        {
+          new.sentence
+          organization "organization" bibinfo.check output
+          format.publisher.address output
+        }
+      if$
+     }
+  if$
+      format.date "year" output.check
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title
+  "title" output.check
+  new.block
+  format.tr.number output.nonnull
+  institution "institution" bibinfo.warn output
+  address "address" bibinfo.check output
+  format.date "year" output.check
+  new.block
+  format.url output
+  new.block
+  format.note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{ output.bibitem
+  format.authors "author" output.check
+  new.block
+  format.title "title" output.check
+  format.date output
+  new.block
+  format.url output
+  new.block
+  format.note "note" output.check
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+READ
+STRINGS { longest.label }
+INTEGERS { number.label longest.label.width }
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+EXECUTE {initialize.longest.label}
+ITERATE {longest.label.pass}
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" *
+  write$ newline$
+  "\expandafter\ifx\csname url\endcsname\relax"
+  write$ newline$
+  "  \def\url#1{{\tt #1}}\fi"
+  write$ newline$
+  "\expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi"
+  write$ newline$
+}
+EXECUTE {begin.bib}
+EXECUTE {init.state.consts}
+ITERATE {call.type$}
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+EXECUTE {end.bib}
+%% End of customized bst file
+%%
+%% End of file `bthesis.bst'.