iep-3.7/0000775000175000017500000000000012573320440012354 5ustar almaralmar00000000000000iep-3.7/PKG-INFO0000664000175000017500000000502312573320440013451 0ustar almaralmar00000000000000Metadata-Version: 1.1 Name: iep Version: 3.7 Summary: the interactive editor for Python Home-page: http://www.iep-project.org Author: Almar Klein Author-email: almar.klein@gmail.com License: (new) BSD Download-URL: http://www.iep-project.org/downloads.html Description: Package iep IEP (pronounced as 'eep') is a cross-platform Python IDE focused on interactivity and introspection, which makes it very suitable for scientific computing. Its practical design is aimed at simplicity and efficiency. IEP is written in Python 3 and Qt. Binaries are available for Windows, Linux, and Mac. For questions, there is a discussion group. Two components + tools ---------------------- IEP consists of two main components, the editor and the shell, and uses a set of pluggable tools to help the programmer in various ways. Some example tools are source structure, project manager, interactive help, and workspace. Some key features ----------------- * Powerful *introspection* (autocompletion, calltips, interactive help) * Allows various ways to *run code interactively* or to run a file as a script. * The shells runs in a *subprocess* and can therefore be interrupted or killed. * *Multiple shells* can be used at the same time, and can be of different Python versions (from v2.4 to 3.x, including pypy) * Support for using several *GUI toolkits* interactively: PySide, PyQt4, wx, fltk, GTK, Tk. * Run IPython shell or native shell. * *Full Unicode support* in both editor and shell. * Various handy *tools*, plus the ability to make your own. * Matlab-style *cell notation* to mark code sections (by starting a line with '##'). * Highly customizable. Keywords: Python interactive IDE Qt science Platform: any Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Science/Research Classifier: Intended Audience :: Education Classifier: Intended Audience :: Developers Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Software Development Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 3 Provides: iep iep-3.7/setup.cfg0000664000175000017500000000007312573320440014175 0ustar almaralmar00000000000000[egg_info] tag_date = 0 tag_build = tag_svn_revision = 0 iep-3.7/ieplauncher.py0000775000175000017500000000163112550703221015226 0ustar almaralmar00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ ieplauncher.py script This is a script used to startup IEP. Added for convenience. IEP can be installed as a package, but it does not have to. You can start IEP in a few different ways: * execute this script (ieplauncher.py) * execute the iep directory (Python will seek out iep/__main__.py) * execute the iep package ("python -m iep") Only in the latter must IEP be installed. """ import sys # faulthandler helps debugging hard crashes, it is included in py3.3 try: if sys.executable.lower().endswith('pythonw.exe'): raise ImportError('Dont use faulthandler in pythonw.exe') import faulthandler faulthandler.enable() except ImportError: pass import iep iep.startIep() iep-3.7/setup.py0000664000175000017500000000626312412261154014073 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- """ Setup script for the IEP package. """ import os import sys try: from setuptools import setup except ImportError: from distutils.core import setup name = 'iep' description = 'the interactive editor for Python' # Get version and docstring __version__ = None __doc__ = '' docStatus = 0 # Not started, in progress, done initFile = os.path.join(os.path.dirname(__file__), 'iep', '__init__.py') for line in open(initFile).readlines(): if (line.startswith('__version__')): exec(line.strip()) elif line.startswith('"""'): if docStatus == 0: docStatus = 1 line = line.lstrip('"') elif docStatus == 1: docStatus = 2 if docStatus == 1: __doc__ += line setup( name = name, version = __version__, author = 'Almar Klein', author_email = 'almar.klein@gmail.com', license = '(new) BSD', url = 'http://www.iep-project.org', download_url = 'http://www.iep-project.org/downloads.html', keywords = "Python interactive IDE Qt science", description = description, long_description = __doc__, platforms = 'any', provides = ['iep'], install_requires = ['pyzolib'], # and 'PySide' or 'PyQt4' packages = ['iep', 'iep.iepcore', 'iep.iepkernel', 'iep.util', 'iep.tools', 'iep.tools.iepFileBrowser', 'iep.codeeditor', 'iep.codeeditor.parsers', 'iep.codeeditor.extensions', 'iep.yoton', 'iep.yoton.channels', ], package_dir = {'iep': 'iep'}, package_data = {'iep': ['license.txt', 'contributors.txt', 'resources/*.*', 'resources/icons/*.*', 'resources/appicons/*.*', 'resources/images/*.*', 'resources/fonts/*.*', 'resources/translations/*.*']}, zip_safe = False, classifiers = [ 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Science/Research', 'Intended Audience :: Education', 'Intended Audience :: Developers', 'Topic :: Scientific/Engineering', 'Topic :: Software Development', 'License :: OSI Approved :: BSD License', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX', 'Programming Language :: Python :: 3', ], entry_points = {'console_scripts': ['iep = iep.__main__',], }, ) # Install appdata.xml on Linux if we are installing in the system Python if sys.platform.startswith('linux') and sys.prefix.startswith('/usr'): if len(sys.argv) >= 2 and sys.argv[1] == 'install': fname = 'iep.appdata.xml' filename1 = os.path.join(os.path.dirname(__file__), fname) filename2 = os.path.join('/usr/share/appdata', fname) try: bb = open(filename1, 'rb').read() open(filename2, 'wb').write(bb) except PermissionError: pass # No sudo, no need to warn except Exception as err: print('Could not install %s: %s' % (fname, str(err))) else: print('Installed %s' % fname) iep-3.7/iep/0000775000175000017500000000000012573320440013131 5ustar almaralmar00000000000000iep-3.7/iep/__main__.py0000775000175000017500000000273412550703215015234 0ustar almaralmar00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ IEP __main__ module This module takes enables staring IEP via either "python3 -m iep" or "python3 path/to/iep". In the first case it simply imports iep. In the latter case, that import will generally fail, in which case the parent directory is added to sys.path and the import is tried again. Then "iep.startIep()" is called. """ import os import sys # Imports that are maybe not used in IEP, but are/can be in the tools. # Import them now, so they are available in the frozen app. import shutil if hasattr(sys, 'frozen') and sys.frozen: # Enable loading from source from pyzolib import paths sys.path.insert(0, os.path.join(paths.application_dir(), 'source')) sys.path.insert(0, os.path.join(paths.application_dir(), 'source/more')) # Import import iep else: # Try importing try: import iep except ImportError: # Very probably run as a script, either the package or the __main__ # directly. Add parent directory to sys.path and try again. thisDir = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, os.path.split(thisDir)[0]) try: import iep except ImportError: raise ImportError('Could not import IEP in either way.') # Start IEP iep.startIep() iep-3.7/iep/iepcore/0000775000175000017500000000000012573320440014557 5ustar almaralmar00000000000000iep-3.7/iep/iepcore/kernelbroker.py0000664000175000017500000006665712477544206017655 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module kernelBroker This module implements the interface between IEP and the kernel. """ import os, sys, time import subprocess import signal import threading import ctypes from pyzolib import ssdf import yoton import iep # local IEP (can be on a different box than where the user is) # Important: the yoton event loop should run somehow! class KernelInfo(ssdf.Struct): """ KernelInfo Describes all information for a kernel. This class can be used at the IDE as well as the kernelbroker. This information goes a long way from the iep config file to the kernel. The list iep.config.shellConfigs2 contains the configs for all kernels. These objects are edited in-place by the shell config. The shell keeps a reference of the shell config used to start the kernel. On each restart all information is resend. In this way, if a user changes a setting in the shell config, it is updated when the shell restarts. The broker also keeps a copy of the shell config. In this way, the shell might send no config information (or only partially update the config information) on a restart. This is not so relevant now, but it can be when we are running multiple people on a single kernel, and there is only one user who has the original config. """ def __init__(self, info=None): # ----- Fixed parameters that define a shell ----- # scriptFile is used to define the mode. If given, we run in # script-mode. Otherwise we run in interactive mode. # The name of this shell config. Can be used to name the kernel self.name = 'Python' # The executable. This can be '/usr/bin/python3.1' or # 'c:/program files/python2.6/python.exe', etc. # The "[default]" is a placeholder text that is replaced at the last # moment with iep.defaultInterpreterExe() self.exe = '[default]' # The GUI toolkit to embed the event loop of. # Instantiate with a value that is settable self.gui = iep.defaultInterpreterGui() or 'none' # The Python path. Paths should be separated by newlines. # '$PYTHONPATH' is replaced by environment variable by broker self.pythonPath = '' # The path of the current project, the kernel will prepend this # to the sys.path. The broker could prepend to PYTHONPATH, but # in this way it is more explicit (kernel can tell the user that # the project path was prepended). self.projectPath = '' # The full filename of the script to run. # If given, the kernel should run in script-mode. # The kernel will check whether this file exists, and will # revert to interactive mode if it doesn't. self.scriptFile = '' # Interactive-mode only: # The initial directory. Only used for interactive-mode; in # script-mode the initial directory is the dir of the script. self.startDir = '' # The Startup script (only used for interactive-mode). # - Empty string means run nothing, # - Single line means file name # - multiple lines means source code. # - '$PYTHONSTARTUP' uses the code in that file. Broker replaces this. self.startupScript = '' # Additional command line arguments, set by the kernel self.argv = '' # Additional environment variables self.environ = '' # Load info from ssdf struct. Make sure they are all strings if info: # Get struct if isinstance(info, dict): s = info elif ssdf.isstruct(info): s = info elif isinstance(info, str): s = ssdf.loads(info) else: raise ValueError('Kernel info should be a string or ssdf struct, not %s' % str(type(info))) # Inject values for key in s: val = s[key] if not val: val = '' self[key] = val def tostring(self): return ssdf.saves(self) def getCommandFromKernelInfo(info, port): info = KernelInfo(info) # Apply default exe exe = info.exe if exe in ('[default]', ''): exe = iep.defaultInterpreterExe() # Correct path when it contains spaces if exe.count(' ') and exe[0] != '"': exe = '"{}"'.format(exe) # Get start script startScript = os.path.join( iep.iepDir, 'iepkernel', 'start.py') startScript = '"{}"'.format(startScript) # Build command command = exe + ' ' + startScript + ' ' + str(port) # Done return command def getEnvFromKernelInfo(info): info = KernelInfo(info) pythonPath = info.pythonPath # Set default pythonPath (replace only first occurrence of $PYTHONPATH ENV_PP = os.environ.get('PYTHONPATH','') pythonPath = pythonPath.replace('$PYTHONPATH', '\n'+ENV_PP+'\n', 1) pythonPath = pythonPath.replace('$PYTHONPATH', '') # Split paths, allow newlines and os.pathsep for splitChar in '\n\r' + os.pathsep: pythonPath = pythonPath.replace(splitChar, '\n') pythonPaths = [p.strip() for p in pythonPath.split('\n') if p] # Recombine using the OS's path separator pythonPath = os.pathsep.join(pythonPaths) # Add entry to Pythopath, so that we can import yoton # Note: an empty entry might cause trouble if the start-directory is # somehow overriden (see issue 128). pythonPath = iep.iepDir + os.pathsep + pythonPath # Prepare environment, remove references to tk libraries, # since they're wrong when frozen. Python will insert the # correct ones if required. env = os.environ.copy() # env.pop('TK_LIBRARY','') env.pop('TCL_LIBRARY','') env['PYTHONPATH'] = pythonPath # Jython does not use PYTHONPATH but JYTHONPATH env['JYTHONPATH'] = iep.iepDir + os.pathsep + os.environ.get('JYTHONPATH', '') # Add environment variables specified in shell config for line in info.environ.splitlines(): line = line.strip() if '=' in line: key, val = line.split('=', 1) if key: env[key] = val # Done return env class KernelBroker: """ KernelBroker(info) This class functions as a broker between a kernel process and zero or more IDE's (clients). This class has a single context assosiated with it, that lives as long as this object. It is used to connect to a kernel process and to 0 or more IDE's (clients). The kernel process can be "restarted", meaning that it is terminated and a new process started. The broker is cleaned up if there is no kernel process AND no connections. """ def __init__(self, manager, info, name=''): self._manager = manager # Store info that defines the kernel self._originalInfo = KernelInfo(info) # Make a copy for the current version. This copy is re-created on # each restart self._info = ssdf.copy(self._originalInfo) # Store name (or should the name be defined in the info struct) self._name = name # Create context for the connection to the kernel and IDE's # This context is persistent (it stays as long as this KernelBroker # instance is alive). self._context = yoton.Context() self._kernelCon = None self._ctrl_broker = None # Create yoton-based timer self._timer = yoton.Timer(0.2, oneshot=False) self._timer.bind(self.mainLoopIter) # Kernel process and connection (these are replaced on restarting) self._reset() # For restarting after terminating self._pending_restart = None ## Startup and teardown def _create_channels(self): ct = self._context # Close any existing channels first self._context.close_channels() # Create stream channels. # Stdout is for the C-level stdout/stderr streams. self._strm_broker = yoton.PubChannel(ct, 'strm-broker') self._strm_raw = yoton.PubChannel(ct, 'strm-raw') self._strm_prompt = yoton.PubChannel(ct, 'strm-prompt') # Create control channel so that the IDE can control restarting etc. self._ctrl_broker = yoton.SubChannel(ct, 'ctrl-broker') # Status channel to pass startup parameters to the kernel self._stat_startup = yoton.StateChannel(ct, 'stat-startup', yoton.OBJECT) # We use the stat-interpreter to set the status to dead when kernel dies self._stat_interpreter = yoton.StateChannel(ct, 'stat-interpreter') # Create introspect channel so we can interrupt and terminate self._reqp_introspect = yoton.ReqChannel(ct, 'reqp-introspect') def _reset(self, destroy=False): """ _reset(destroy=False) Reset state. if destroy, does a full clean up, closing the context and removing itself from the KernelManager's list. """ # Close connection (it might be in a wait state if the process # failed to start) if self._kernelCon is not None: self._kernelCon.close() # Set process and kernel connection to None self._process = None self._kernelCon = None self._terminator = None self._streamReader = None if destroy==True: # Stop timer self._timer.unbind(self.mainLoopIter) self._timer.stop() self._timer = None # Clean up this kernelbroker instance L = self._manager._kernels while self in L: L.remove(self) # Remove references # if self._context is not None: self._context.close() self._context = None # self._strm_broker = None self._strm_raw = None self._stat_startup = None self._stat_interpreter = None self._strm_prompt = None # self._ctrl_broker = None self._reqp_introspect = None def startKernelIfConnected(self, timeout=10.0): """ startKernelIfConnected(timout=10.0) Start the kernel as soon as there is a connection. """ self._process = time.time() + timeout self._timer.start() def startKernel(self): """ startKernel() Launch the kernel in a subprocess, and connect to it via the context and two Pypes. """ # Create channels self._create_channels() # Create info dict info = {} for key in self._info: info[key] = self._info[key] # Send info stuff so that the kernel has access to the information self._stat_startup.send(info) # Get directory to start process in cwd = iep.iepDir # Host connection for the kernel to connect # (tries several port numbers, staring from 'IEP') self._kernelCon = self._context.bind('localhost:IEP2', max_tries=256, name='kernel') # Get command to execute, and environment to use command = getCommandFromKernelInfo(self._info, self._kernelCon.port1) env = getEnvFromKernelInfo(self._info) # Wrap command in call to 'cmd'? if sys.platform.startswith('win'): # as the author from Pype writes: #if we don't run via a command shell, then either sometimes we #don't get wx GUIs, or sometimes we can't kill the subprocesses. # And I also see problems with Tk. # But we only use it if we are sure that cmd is available. # See IEP issue #240 try: subprocess.check_output('cmd /c "cd"', shell=True) except (IOError, subprocess.SubprocessError): pass # Do not use cmd else: command = 'cmd /c "{}"'.format(command) # Start process self._process = subprocess.Popen( command, shell=True, env=env, cwd=cwd, stdin=subprocess.PIPE, # Fixes issue 165 stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) # Set timeout for connection, i.e. after how much time of # unresponsive ness is the kernel found to be running extension code # Better set this before connecting self._kernelCon.timeout = 0.5 # Bind to events self._kernelCon.closed.bind(self._onKernelConnectionClose) self._kernelCon.timedout.bind(self._onKernelTimedOut) # Create reader for stream self._streamReader = StreamReader(self._process, self._strm_raw, self._strm_broker) # Start streamreader and timer self._streamReader.start() self._timer.start() # Reset some variables self._pending_restart = None def hostConnectionForIDE(self, address='localhost'): """ hostConnectionForIDE() Host a connection for an IDE to connect to. Returns the port to which the ide can connect. """ c = self._context.bind(address+':IEP+256', max_tries=32) return c.port1 ## Callbacks def _onKernelTimedOut(self, c, timedout): """ _onKernelTimedOut(c, timeout) The kernel timed out (i.e. did not send heartbeat messages for a while. It is probably running extension code. """ if timedout: self._stat_interpreter.send('Very busy') else: self._stat_interpreter.send('Busy') def _onKernelConnectionClose(self, c, why): """ _onKernelConnectionClose(c, why) Connection with kernel lost. Tell clients why. """ # If we receive this event while the current kernel connection # is not the one that generated the event, ignore it. if self._kernelCon is not c: return # The only reasonable way that the connection # can be lost without the kernel closing, is if the yoton context # crashed or was stopped somehow. In both cases, we lost control, # and should put it down! if not self._terminator: self.terminate('because connecton was lost', 'KILL', 0.5) def _onKernelDied(self, returncode=0): """ _onKernelDied() Kernel process died. Clean up! """ # If the kernel did not start yet, probably the command is invalid if self._kernelCon and self._kernelCon.is_waiting: msg = 'The process failed to start (invalid command?).' elif not self.isTerminating(): msg = 'Kernel process exited.' elif not self._terminator._prev_action: # We did not actually take any terminating action # This happens, because if the kernel is killed from outside, # _onKernelConnectionClose() triggers a terminate sequence # (but with a delay). # Note the "The" to be able to distinguish this case msg = 'The kernel process exited.' else: msg = self._terminator.getMessage('Kernel process') if self._context.connection_count: # Notify returncodeMsg = '\n%s (%s)\n\n' % (msg, str(returncode)) self._strm_broker.send(returncodeMsg) # Empty prompt and signal dead self._strm_prompt.send('\b') self._stat_interpreter.send('Dead') self._context.flush() # Cleanup (get rid of kernel process references) self._reset() # Handle any pending action if self._pending_restart: self.startKernel() ## Main loop and termination def terminate(self, reason='by user', action='TERM', timeout=0.0): """ terminate(reason='by user', action='TERM', timeout=0.0) Initiate termination procedure for the current kernel. """ # The terminatation procedure is started by creating # a KernelTerminator instance. This instance's iteration method # iscalled from _mailLoopIter(). self._terminator = KernelTerminator(self, reason, action, timeout) def isTerminating(self): """ isTerminating() Get whether the termination procedure has been initiated. This simply checks whether there is a self._terminator instance. """ return bool(self._terminator) def mainLoopIter(self): """ mainLoopIter() Periodically called. Kind of the main loop iteration for this kernel. """ # Get some important status info hasProcess = self._process is not None hasKernelConnection = bool(self._kernelCon and self._kernelCon.is_connected) hasClients = False if self._context: hasClients = self._context.connection_count > int(hasKernelConnection) # Should we clean the whole thing up? if not (hasProcess or hasClients): self._reset(True) # Also unregisters this timer callback return # Waiting to get started; waiting for client to connect if isinstance(self._process, float): if self._context.connection_count: self.startKernel() elif self._process > time.time(): self._process = None return # If we have a process ... if self._process: # Test if process is dead process_returncode = self._process.poll() if process_returncode is not None: self._onKernelDied(process_returncode) return # Are we in the process of terminating? elif self.isTerminating(): self._terminator.next() elif self.isTerminating(): # We cannot have a terminator if we have no process self._terminator = None # handle control messages if self._ctrl_broker: for msg in self._ctrl_broker.recv_all(): if msg == 'INT': self._commandInterrupt() elif msg == 'TERM': self._commandTerminate() elif msg.startswith('RESTART'): self._commandRestart(msg) else: pass # Message is not for us def _commandInterrupt(self): if self._process is None: self._strm_broker.send('Cannot interrupt: process is dead.\n') # Kernel receives and acts elif sys.platform.startswith('win'): self._reqp_introspect.interrupt() else: # Use POSIX to interrupt, which is more reliable # (the introspect thread might not get a chance) # but also does not work if running extension code pid = self._kernelCon.pid2 os.kill(pid, signal.SIGINT) def _commandTerminate(self): # Start termination procedure # Kernel will receive term and act (if it can). # If it wont, we will act in a second or so. if self._process is None: self._strm_broker.send('Cannot terminate: process is dead.\n') elif self.isTerminating(): # The user gave kill command while the kill process # is running. We could do an immediate kill now, # or we let the terminate process run its course. pass else: self.terminate('by user') def _commandRestart(self, msg): # Almost the same as terminate, but now we have a pending action self._pending_restart = True # Recreate the info struct self._info = ssdf.copy(self._originalInfo) # Update the info struct new_info = ssdf.loads(msg.split('RESTART',1)[1]) for key in new_info: self._info[key] = new_info[key] # Restart now, wait, or initiate termination procedure? if self._process is None: self.startKernel() elif self.isTerminating(): pass # Already terminating else: self.terminate('for restart') class KernelTerminator: """ KernelTerminator(broker, reason='user terminated', action='TERM', timeout=0.0) Simple class to help terminating the kernel. It has a next() method that should be periodically called. It keeps track whether the timeout has passed and will undertake increaslingly ruder actions to terminate the kernel. """ def __init__(self, broker, reason='by user', action='TERM', timeout=0.0): # Init/store self._broker = broker self._reason = reason self._next_action = '' # Go self._do(action, timeout) def _do(self, action, timeout): self._prev_action = self._next_action self._next_action = action self._timeout = time.time() + timeout if not timeout: self.next() def next(self): # Get action action = self._next_action if time.time() < self._timeout: # Time did not pass yet pass elif action == 'TERM': self._broker._reqp_introspect.terminate() self._do('INT', 0.5) elif action == 'INT': # Count if not hasattr(self, '_count'): self._count = 0 self._count +=1 # Handle if self._count < 5: self._broker._reqp_introspect.interrupt() self._do('INT', 0.1) else: self._do('KILL', 0) elif action == 'KILL': # Get pid and signal pid = self._broker._kernelCon.pid2 sigkill = signal.SIGTERM if hasattr(signal,'SIGKILL'): sigkill = signal.SIGKILL # Kill if hasattr(os,'kill'): os.kill(pid, sigkill) elif sys.platform.startswith('win'): kernel32 = ctypes.windll.kernel32 handle = kernel32.OpenProcess(1, 0, pid) kernel32.TerminateProcess(handle, 0) #os.system("TASKKILL /PID " + str(pid) + " /F") # Set what we did self._do('NOTHING', 9999999999999999) def getMessage(self, what): # Get last performed action action = self._prev_action # Get nice string of that D = { '': 'exited', 'TERM': 'terminated', 'INT': 'terminated (after interrupting)', 'KILL': 'killed'} actionMsg = D.get(self._prev_action, 'stopped for unknown reason') # Compile stop-string return '{} {} {}.'.format( what, actionMsg, self._reason) class StreamReader(threading.Thread): """ StreamReader(process, channel) Reads stdout of process and send to a yoton channel. This needs to be done in a separate thread because reading from a PYPE blocks. """ def __init__(self, process, strm_raw, strm_broker): threading.Thread.__init__(self) self._process = process self._strm_raw = strm_raw self._strm_broker = strm_broker self.deamon = True self._exit = False def stop(self, timeout=1.0): self._exit = True self.join(timeout) def run(self): while not self._exit: time.sleep(0.001) # Read any stdout/stderr messages and route them via yoton. msg = self._process.stdout.readline() # <-- Blocks here if not isinstance(msg, str): msg = msg.decode('utf-8', 'ignore') try: self._strm_raw.send(msg) except IOError: pass # Channel is closed # Process dead? if not msg:# or self._process.poll() is not None: break #self._strm_broker.send('streamreader exit\n') class Kernelmanager: """ Kernelmanager This class manages a set of kernels. These kernels run on the same machine as this broker. IDE's can ask which kernels are available and can connect to them via this broker. The IEP process runs an instance of this class that connects at localhost. At a later stage, we may make it possible to create a kernel-server at a remote machine. """ def __init__(self, public=False): # Set whether other machines in this network may connect to our kernels self._public = public # Init list of kernels self._kernels = [] def createKernel(self, info, name=None): """ create_kernel(info, name=None) Create a new kernel. Returns the port number to connect to the broker's context. """ # Set name if not given if not name: i = len(self._kernels) + 1 name = 'kernel %i' % i # Create kernel kernel = KernelBroker(self, info, name) self._kernels.append(kernel) # Host a connection for the ide port = kernel.hostConnectionForIDE() # Tell broker to start as soon as the IDE connects with the broker kernel.startKernelIfConnected() # Done return port def getKernelList(self): # Get info of each kernel as an ssdf struct infos = [] for kernel in self._kernels: info = kernel._info info = ssdf.loads(info.tostring()) info.name = kernel._name infos.append(info) # Done return infos def terminateAll(self): """ terminateAll() Terminates all kernels. Required when shutting down IEP. When this function returns, all kernels will be terminated. """ for kernel in [kernel for kernel in self._kernels]: # Try closing the process gently: by closing stdin terminator = KernelTerminator(kernel, 'for closing down') # Terminate while (kernel._kernelCon and kernel._kernelCon.is_connected and kernel._process and (kernel._process.poll() is None) ): time.sleep(0.02) terminator.next() # Clean up kernel._reset(True) iep-3.7/iep/iepcore/main.py0000664000175000017500000005111712573244522016070 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module main This module contains the main frame. Implements the main window. Also adds some variables to the iep namespace, such as the callLater function which is also defined here. """ import os, sys, time import base64 from queue import Queue, Empty from pyzolib import ssdf, paths import iep from iep.iepcore.icons import IconArtist from iep.iepcore import commandline from pyzolib.qt import QtCore, QtGui from iep.iepcore.splash import SplashWidget class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None, locale=None): QtGui.QMainWindow.__init__(self, parent) self._closeflag = 0 # Used during closing/restarting # Init window title and application icon # Set title to something nice. On Ubuntu 12.10 this text is what # is being shown at the fancy title bar (since it's not properly # updated) self.setMainTitle() loadAppIcons() self.setWindowIcon(iep.icon) # Restore window geometry before drawing for the first time, # such that the window is in the right place self.resize(800, 600) # default size self.restoreGeometry() # Show splash screen (we need to set our color too) w = SplashWidget(self, distro=iep.distro_name) self.setCentralWidget(w) self.setStyleSheet("QMainWindow { background-color: #268bd2;}") # Show empty window and disable updates for a while self.show() self.paintNow() self.setUpdatesEnabled(False) # Determine timeout for showing splash screen splash_timeout = time.time() + 1.0 # Set locale of main widget, so that qt strings are translated # in the right way if locale: self.setLocale(locale) # Store myself iep.main = self # Init dockwidget settings self.setTabPosition(QtCore.Qt.AllDockWidgetAreas,QtGui.QTabWidget.South) self.setDockOptions( QtGui.QMainWindow.AllowNestedDocks | QtGui.QMainWindow.AllowTabbedDocks #| QtGui.QMainWindow.AnimatedDocks ) # Set window atrributes self.setAttribute(QtCore.Qt.WA_AlwaysShowToolTips, True) # Load icons and fonts loadIcons() loadFonts() # Set qt style and test success self.setQtStyle(None) # None means init! # Hold the splash screen if needed while time.time() < splash_timeout: QtGui.qApp.flush() QtGui.qApp.processEvents() time.sleep(0.05) # Populate the window (imports more code) self._populate() # Revert to normal background, and enable updates self.setStyleSheet('') self.setUpdatesEnabled(True) # Restore window state, force updating, and restore again self.restoreState() self.paintNow() self.restoreState() # Present user with wizard if he/she is new. if iep.config.state.newUser: from iep.util.iepwizard import IEPWizard w = IEPWizard(self) w.show() # Use show() instead of exec_() so the user can interact with IEP # Create new shell config if there is None if not iep.config.shellConfigs2: from iep.iepcore.kernelbroker import KernelInfo iep.config.shellConfigs2.append( KernelInfo() ) # Focus on editor e = iep.editors.getCurrentEditor() if e is not None: e.setFocus() # Handle any actions commandline.handle_cmd_args() # To force drawing ourselves def paintEvent(self, event): QtGui.QMainWindow.paintEvent(self, event) self._ispainted = True def paintNow(self): """ Enforce a repaint and keep calling processEvents until we are repainted. """ self._ispainted = False self.update() while not self._ispainted: QtGui.qApp.flush() QtGui.qApp.processEvents() time.sleep(0.01) def _populate(self): # Delayed imports from iep.iepcore.editorTabs import EditorTabs from iep.iepcore.shellStack import ShellStackWidget from iep.iepcore import codeparser from iep.tools import ToolManager # Instantiate tool manager iep.toolManager = ToolManager() # Check to install conda now ... from iep.util.bootstrapconda import check_for_conda_env check_for_conda_env() # Instantiate and start source-code parser if iep.parser is None: iep.parser = codeparser.Parser() iep.parser.start() # Create editor stack and make the central widget iep.editors = EditorTabs(self) self.setCentralWidget(iep.editors) # Create floater for shell self._shellDock = dock = QtGui.QDockWidget(self) dock.setFeatures(dock.DockWidgetMovable | dock.DockWidgetFloatable) dock.setObjectName('shells') dock.setWindowTitle('Shells') self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) # Create shell stack iep.shells = ShellStackWidget(self) dock.setWidget(iep.shells) # Create the default shell when returning to the event queue callLater(iep.shells.addShell) # Create statusbar if iep.config.view.showStatusbar: iep.status = self.statusBar() else: iep.status = None self.setStatusBar(None) # Create menu from iep.iepcore import menu iep.keyMapper = menu.KeyMapper() menu.buildMenus(self.menuBar()) # Add the context menu to the editor iep.editors.addContextMenu() iep.shells.addContextMenu() # Load tools if iep.config.state.newUser and not iep.config.state.loadedTools: iep.toolManager.loadTool('iepsourcestructure') iep.toolManager.loadTool('iepfilebrowser', 'iepsourcestructure') elif iep.config.state.loadedTools: for toolId in iep.config.state.loadedTools: iep.toolManager.loadTool(toolId) def setMainTitle(self, path=None): """ Set the title of the main window, by giving a file path. """ if not path: # Plain title title = "Interactive Editor for Python" else: # Title with a filename name = os.path.basename(path) if os.path.isfile(path): pass elif name == path: path = 'unsaved' else: pass # We hope the given path is informative # Set title tmp = { 'fileName':name, 'filename':name, 'name':name, 'fullPath':path, 'fullpath':path, 'path':path } title = iep.config.advanced.titleText.format(**tmp) # Add license info if iep.license: title += ' - licensed to {name}'.format(**iep.license) # Set self.setWindowTitle(title) def saveWindowState(self): """ Save: * which tools are loaded * geometry of the top level windows * layout of dockwidgets and toolbars """ # Save tool list tools = iep.toolManager.getLoadedTools() iep.config.state.loadedTools = tools # Store window geometry geometry = self.saveGeometry() try: geometry = bytes(geometry) # PyQt4 except: geometry = bytes().join(geometry) # PySide geometry = base64.encodebytes(geometry).decode('ascii') iep.config.state.windowGeometry = geometry # Store window state state = self.saveState() try: state = bytes(state) # PyQt4 except: state = bytes().join(state) # PySide state = base64.encodebytes(state).decode('ascii') iep.config.state.windowState = state def restoreGeometry(self, value=None): # Restore window position and whether it is maximized if value is not None: return super().restoreGeometry(value) # No value give, try to get it from the config if iep.config.state.windowGeometry: try: geometry = iep.config.state.windowGeometry geometry = base64.decodebytes(geometry.encode('ascii')) self.restoreGeometry(geometry) except Exception as err: print('Could not restore window geomerty: ' + str(err)) def restoreState(self, value=None): # Restore layout of dock widgets and toolbars if value is not None: return super().restoreState(value) # No value give, try to get it from the config if iep.config.state.windowState: try: state = iep.config.state.windowState state = base64.decodebytes(state.encode('ascii')) self.restoreState(state) except Exception as err: print('Could not restore window state: ' + str(err)) def setQtStyle(self, stylename=None): """ Set the style and the palette, based on the given style name. If stylename is None or not given will do some initialization. If bool(stylename) evaluates to False will use the default style for this system. Returns the QStyle instance. """ if stylename is None: # Initialize # Get native pallette (used below) QtGui.qApp.nativePalette = QtGui.qApp.palette() # Obtain default style name iep.defaultQtStyleName = str(QtGui.qApp.style().objectName()) # Other than gtk+ and mac, cleanlooks looks best (in my opinion) if 'gtk' in iep.defaultQtStyleName.lower(): pass # Use default style elif 'macintosh' in iep.defaultQtStyleName.lower(): pass # Use default style else: iep.defaultQtStyleName = 'Cleanlooks' # Set style if there is no style yet if not iep.config.view.qtstyle: iep.config.view.qtstyle = iep.defaultQtStyleName # Init if not stylename: stylename = iep.config.view.qtstyle useStandardStyle = False stylename2 = stylename # Handle special cleanlooks style if stylename.lower().startswith('cleanlooks'): stylename2 = stylename.rstrip('+') if stylename2 != stylename: useStandardStyle = True # Check if this style exist, set to default otherwise styleNames = [name.lower() for name in QtGui.QStyleFactory.keys()] if stylename2.lower() not in styleNames: stylename2 = iep.defaultQtStyleName # Try changing the style qstyle = QtGui.qApp.setStyle(stylename2) # Set palette if qstyle: if useStandardStyle: QtGui.qApp.setPalette(QtGui.QStyle.standardPalette(qstyle)) else: QtGui.qApp.setPalette(QtGui.qApp.nativePalette) # Done return qstyle def closeEvent(self, event): """ Override close event handler. """ # Are we restaring? restarting = time.time() - self._closeflag < 1.0 # Save settings iep.saveConfig() # Stop command server commandline.stop_our_server() # Proceed with closing... result = iep.editors.closeAll() if not result: self._closeflag = False event.ignore() return else: self._closeflag = True #event.accept() # Had to comment on Windows+py3.3 to prevent error # Proceed with closing shells iep.localKernelManager.terminateAll() for shell in iep.shells: shell._context.close() # Close tools for toolname in iep.toolManager.getLoadedTools(): tool = iep.toolManager.getTool(toolname) tool.close() # Stop all threads (this should really only be daemon threads) import threading for thread in threading.enumerate(): if hasattr(thread, 'stop'): try: thread.stop(0.1) except Exception: pass # # Wait for threads to die ... # # This should not be necessary, but I used it in the hope that it # # would prevent the segfault on Python3.3. It didn't. # timeout = time.time() + 0.5 # while threading.activeCount() > 1 and time.time() < timeout: # time.sleep(0.1) # print('Number of threads alive:', threading.activeCount()) # Proceed as normal QtGui.QMainWindow.closeEvent(self, event) # Harder exit to prevent segfault. Not really a solution, # but it does the job until Pyside gets fixed. if sys.version_info >= (3,3,0) and not restarting: if hasattr(os, '_exit'): os._exit(0) def restart(self): """ Restart IEP. """ self._closeflag = time.time() # Close self.close() if self._closeflag: # Get args args = [arg for arg in sys.argv] if not paths.is_frozen(): # Prepend the executable name (required on Linux) lastBit = os.path.basename(sys.executable) args.insert(0, lastBit) # Replace the process! os.execv(sys.executable, args) def createPopupMenu(self): # Init menu menu = QtGui.QMenu() # Insert two items for item in ['Editors', 'Shells']: action = menu.addAction(item) action.setCheckable(True) action.setChecked(True) action.setEnabled(False) # Insert tools for tool in iep.toolManager.loadToolInfo(): action = menu.addAction(tool.name) action.setCheckable(True) action.setChecked(bool(tool.instance)) action.menuLauncher = tool.menuLauncher # Show menu and process result a = menu.popup(QtGui.QCursor.pos()) if a: a.menuLauncher(not a.menuLauncher(None)) def loadAppIcons(): """ loadAppIcons() Load the application iconsr. """ # Get directory containing the icons appiconDir = os.path.join(iep.iepDir, 'resources', 'appicons') # Determine template for filename of the application icon-files. # Use the Pyzo logo if in pyzo_mode. if False: #iep.pyzo_mode: fnameT = 'pyzologo{}.png' else: fnameT = 'ieplogo{}.png' # Construct application icon. Include a range of resolutions. Note that # Qt somehow does not use the highest possible res on Linux/Gnome(?), even # the logo of qt-designer when alt-tabbing looks a bit ugly. iep.icon = QtGui.QIcon() for sze in [16, 32, 48, 64, 128, 256]: fname = os.path.join(appiconDir, fnameT.format(sze)) if os.path.isfile(fname): iep.icon.addFile(fname, QtCore.QSize(sze, sze)) # Set as application icon. This one is used as the default for all # windows of the application. QtGui.qApp.setWindowIcon(iep.icon) # Construct another icon to show when the current shell is busy artist = IconArtist(iep.icon) # extracts the 16x16 version artist.setPenColor('#0B0') for x in range(11, 16): d = x-11 # runs from 0 to 4 artist.addLine(x,6+d,x,15-d) pm = artist.finish().pixmap(16,16) # iep.iconRunning = QtGui.QIcon(iep.icon) iep.iconRunning.addPixmap(pm) # Change only 16x16 icon def loadIcons(): """ loadIcons() Load all icons in the icon dir. """ # Get directory containing the icons iconDir = os.path.join(iep.iepDir, 'resources', 'icons') # Construct other icons dummyIcon = IconArtist().finish() iep.icons = ssdf.new() for fname in os.listdir(iconDir): if fname.startswith('iep'): continue if fname.endswith('.png'): try: # Short and full name name = fname.split('.')[0] ffname = os.path.join(iconDir,fname) # Create icon icon = QtGui.QIcon() icon.addFile(ffname, QtCore.QSize(16,16)) # Store iep.icons[name] = icon except Exception as err: iep.icons[name] = dummyIcon print('Could not load icon %s: %s' % (fname, str(err))) def loadFonts(): """ loadFonts() Load all fonts that come with IEP. """ import iep.codeeditor # we need iep and codeeditor namespace here # Get directory containing the icons fontDir = os.path.join(iep.iepDir, 'resources', 'fonts') # Get database object db = QtGui.QFontDatabase() # Set default font iep.codeeditor.Manager.setDefaultFontFamily('DejaVu Sans Mono') # Load fonts that are in the fonts directory if os.path.isdir(fontDir): for fname in os.listdir(fontDir): if os.path.splitext(fname)[1].lower() in ['.otf', '.ttf']: try: db.addApplicationFont( os.path.join(fontDir, fname) ) except Exception as err: print('Could not load font %s: %s' % (fname, str(err))) class _CallbackEventHandler(QtCore.QObject): """ Helper class to provide the callLater function. """ def __init__(self): QtCore.QObject.__init__(self) self.queue = Queue() def customEvent(self, event): while True: try: callback, args = self.queue.get_nowait() except Empty: break try: callback(*args) except Exception as why: print('callback failed: {}:\n{}'.format(callback, why)) def postEventWithCallback(self, callback, *args): self.queue.put((callback, args)) QtGui.qApp.postEvent(self, QtCore.QEvent(QtCore.QEvent.User)) def callLater(callback, *args): """ callLater(callback, *args) Post a callback to be called in the main thread. """ _callbackEventHandler.postEventWithCallback(callback, *args) # Create callback event handler instance and insert function in IEP namespace _callbackEventHandler = _CallbackEventHandler() iep.callLater = callLater _SCREENSHOT_CODE = """ import random numerator = 4 def get_number(): # todo: something appears to be broken here val = random.choice(range(10)) return numerator / val class Groceries(list): \"\"\" Overloaded list class. \"\"\" def append_defaults(self): spam = 'yum' pie = 3.14159 self.extend([spam, pie]) class GroceriesPlus(Groceries): \"\"\" Groceries with surprises! \"\"\" def append_random(self): value = get_number() self.append(value) # Create some groceries g = GroceriesPlus() g.append_defaults() g.append_random() """ def screenshotExample(width=1244, height=700): e = iep.editors.newFile() e.editor.setPlainText(_SCREENSHOT_CODE) iep.main.resize(width, height) def screenshot(countdown=5): QtCore.QTimer.singleShot(countdown*1000, _screenshot) def _screenshot(): # Grab print('SNAP!') pix = QtGui.QPixmap.grabWindow(iep.main.winId()) #pix = QtGui.QPixmap.grabWidget(iep.main) # Get name i = 1 while i > 0: name = 'iep_screen_%s_%02i.png' % (sys.platform, i) fname = os.path.join(os.path.expanduser('~'), name) if os.path.isfile(fname): i += 1 else: i = -1 # Save screenshot and a thumb pix.save(fname) thumb = pix.scaledToWidth(500, QtCore.Qt.SmoothTransformation) thumb.save(fname.replace('screen', 'thumb')) print('Screenshot and thumb saved in', os.path.expanduser('~')) iep.screenshot = screenshot iep.screenshotExample = screenshotExample iep-3.7/iep/iepcore/shellInfoDialog.py0000664000175000017500000005452412470127343020211 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module shellInfoDialog Implements shell configuration dialog. """ import os, sys, time, re from pyzolib.qt import QtCore, QtGui import iep from iep.iepcore.compactTabWidget import CompactTabWidget from iep.iepcore.iepLogging import print from iep.iepcore.kernelbroker import KernelInfo from iep import translate ## Implement widgets that have a common interface class ShellInfoLineEdit(QtGui.QLineEdit): def setTheText(self, value): self.setText(value) def getTheText(self): return self.text() class ShellInfo_name(ShellInfoLineEdit): def __init__(self, *args, **kwargs): ShellInfoLineEdit.__init__(self, *args, **kwargs) self.editingFinished.connect(self.onValueChanged) t = translate('shell', 'name ::: The name of this configuration.') self.setPlaceholderText(t.tt) def setTheText(self, value): ShellInfoLineEdit.setTheText(self, value) self.onValueChanged() def onValueChanged(self): self.parent().parent().parent().setTabTitle(self.getTheText()) class ShellInfo_exe(QtGui.QComboBox): def __init__(self, *args): QtGui.QComboBox.__init__(self, *args) # Uncomment this to also select the matching GUI toolkit if [default] # is selected. Note that adding a new config will always init with # the matching GUI toolkit. #self.activated.connect(self.onActivated) def _interpreterName(self, p): if p.is_pyzo: return '%s [v%s at Pyzo]' % (p.path, p.version) else: return '%s [v%s]' % (p.path, p.version) def setTheText(self, value): # Init self.clear() self.setEditable(True) self.setInsertPolicy(self.InsertAtTop) # Get known interpreters from shellDialog (which are sorted by version) shellDialog = self while not isinstance(shellDialog, ShellInfoDialog): shellDialog = shellDialog.parent() interpreters = shellDialog.interpreters exes = [p.path for p in interpreters] # Get name for default interpreter # note: the filled in name will not be correct if working remotely defaultName = '%s [default]' % iep.defaultInterpreterExe() # Hande current value if value == '[default]': value = defaultName elif value in exes: value = self._interpreterName( interpreters[exes.index(value)] ) else: self.addItem(value) # Add default value self.addItem(defaultName) # Add all found interpreters for p in interpreters: self.addItem(self._interpreterName(p)) # Set current text self.setEditText(value) def getTheText(self): #return self.currentText().split('(')[0].rstrip() value = self.currentText() if value.endswith('[default]'): value = '[default]' elif value.endswith(']') and '[' in value: value = value.rsplit('[', 1)[0] return value.strip() def onActivated(self, index=None): # Select GUI corresponding to default interpreter if it was selected. defaultGui = iep.defaultInterpreterGui() if defaultGui and self.currentText().startswith('[default]'): guicombobox = self.parent()._shellInfoWidgets['gui'] guicombobox.setTheText(defaultGui) class ShellInfo_ipython(QtGui.QCheckBox): def __init__(self, parent): QtGui.QCheckBox.__init__(self, parent) t = translate('shell', 'ipython ::: Use IPython shell if available.') self.setText(t.tt) # Default is True self.setChecked(True) def setTheText(self, value): if value.lower() in ['no', 'false']: self.setChecked(False) else: self.setChecked(True) # Also for empty string; default is True def getTheText(self): if self.isChecked(): return 'yes' else: return 'no' class ShellInfo_gui(QtGui.QComboBox): # For (backward) compatibility COMPAT = {'QT4':'PYQT4'} # GUI names GUIS = [ ('None', 'no GUI support'), ('PySide', 'LGPL licensed wrapper to Qt (recommended)'), ('PyQt4', 'GPL/commercial licensed wrapper to Qt (recommended)'), ('Tornado', 'Tornado asynchronous networking library'), ('Tk', 'Tk widget toolkit'), ('WX', 'wxPython'), ('FLTK', 'The fast light toolkit'), ('GTK', 'GIMP Toolkit'), ] # GUI descriptions def setTheText(self, value): # Process value value = value.upper() value = self.COMPAT.get(value, value) # Set options ii = 0 self.clear() for i in range(len(self.GUIS)): gui, des = self.GUIS[i] if value == gui.upper(): ii = i self.addItem('%s - %s' % (gui, des)) # Set current text self.setCurrentIndex(ii) def getTheText(self): text = self.currentText().lower() return text.partition('-')[0].strip() class ShellinfoWithSystemDefault(QtGui.QVBoxLayout): DISABLE_SYSTEM_DEFAULT = sys.platform == 'darwin' SYSTEM_VALUE = '' def __init__(self, parent, widget): # Do not pass parent, because is a sublayout QtGui.QVBoxLayout.__init__(self) # Layout self.setSpacing(1) self.addWidget(widget) # Create checkbox widget if not self.DISABLE_SYSTEM_DEFAULT: t = translate('shell', 'Use system default') self._check = QtGui.QCheckBox(t, parent) self._check.stateChanged.connect(self.onCheckChanged) self.addWidget(self._check) # The actual value of this shell config attribute self._value = '' # A buffered version, so that clicking the text box does not # remove the value at once self._bufferedValue = '' def onEditChanged(self): if self.DISABLE_SYSTEM_DEFAULT or not self._check.isChecked(): self._value = self.getWidgetText() def onCheckChanged(self, state): if state: self._bufferedValue = self._value self.setTheText(self.SYSTEM_VALUE) else: self.setTheText(self._bufferedValue) def setTheText(self, value): if self.DISABLE_SYSTEM_DEFAULT: # Just set the value self._edit.setReadOnly(False) self.setWidgetText(value) elif value != self.SYSTEM_VALUE: # Value given, enable edit self._check.setChecked(False) self._edit.setReadOnly(False) # Set the text self.setWidgetText(value) else: # Use system default, disable edit widget self._check.setChecked(True) self._edit.setReadOnly(True) # Set text using system environment self.setWidgetText(None) # Store value self._value = value def getTheText(self): return self._value class ShellInfo_pythonPath(ShellinfoWithSystemDefault): SYSTEM_VALUE = '$PYTHONPATH' def __init__(self, parent): # Create sub-widget self._edit = QtGui.QTextEdit(parent) self._edit.zoomOut(1) self._edit.setMaximumHeight(80) self._edit.setMinimumWidth(200) self._edit.textChanged.connect(self.onEditChanged) # Instantiate ShellinfoWithSystemDefault.__init__(self, parent, self._edit) def getWidgetText(self): return self._edit.toPlainText() def setWidgetText(self, value=None): if value is None: pp = os.environ.get('PYTHONPATH','') pp = pp.replace(os.pathsep, '\n').strip() value = '$PYTHONPATH:\n%s\n' % pp self._edit.setText(value) # class ShellInfo_startupScript(ShellinfoWithSystemDefault): # # SYSTEM_VALUE = '$PYTHONSTARTUP' # # def __init__(self, parent): # # # Create sub-widget # self._edit = QtGui.QLineEdit(parent) # self._edit.textEdited.connect(self.onEditChanged) # # # Instantiate # ShellinfoWithSystemDefault.__init__(self, parent, self._edit) # # # def getWidgetText(self): # return self._edit.text() # # # def setWidgetText(self, value=None): # if value is None: # pp = os.environ.get('PYTHONSTARTUP','').strip() # if pp: # value = '$PYTHONSTARTUP: "%s"' % pp # else: # value = '$PYTHONSTARTUP: None' # # self._edit.setText(value) class ShellInfo_startupScript(QtGui.QVBoxLayout): DISABLE_SYSTEM_DEFAULT = sys.platform == 'darwin' SYSTEM_VALUE = '$PYTHONSTARTUP' RUN_AFTER_GUI_TEXT = '# AFTER_GUI - remove to run the code BEFORE integrating the GUI\n' def __init__(self, parent): # Do not pass parent, because is a sublayout QtGui.QVBoxLayout.__init__(self) # Create sub-widget self._edit1 = QtGui.QLineEdit(parent) self._edit1.textEdited.connect(self.onEditChanged) if sys.platform.startswith('win'): self._edit1.setPlaceholderText('C:\\path\\to\\script.py') else: self._edit1.setPlaceholderText('/path/to/script.py') # self._edit2 = QtGui.QTextEdit(parent) self._edit2.zoomOut(1) self._edit2.setMaximumHeight(80) self._edit2.setMinimumWidth(200) self._edit2.textChanged.connect(self.onEditChanged) # Layout self.setSpacing(1) self.addWidget(self._edit1) self.addWidget(self._edit2) # Create radio widget for system default t = translate('shell', 'Use system default') self._radio_system = QtGui.QRadioButton(t, parent) self._radio_system.toggled.connect(self.onCheckChanged) self.addWidget(self._radio_system) if self.DISABLE_SYSTEM_DEFAULT: self._radio_system.hide() # Create radio widget for file t = translate('shell', 'File to run at startup') self._radio_file = QtGui.QRadioButton(t, parent) self._radio_file.toggled.connect(self.onCheckChanged) self.addWidget(self._radio_file) # Create radio widget for code t = translate('shell', 'Code to run at startup') self._radio_code = QtGui.QRadioButton(t, parent) self._radio_code.toggled.connect(self.onCheckChanged) self.addWidget(self._radio_code) # The actual value of this shell config attribute self._value = '' # A buffered version, so that clicking the text box does not # remove the value at once self._valueFile = '' self._valueCode = '\n' def onEditChanged(self): if self._radio_file.isChecked(): self._value = self._valueFile = self._edit1.text().strip() elif self._radio_code.isChecked(): # ensure newline! self._value = self._valueCode = self._edit2.toPlainText().strip() + '\n' def onCheckChanged(self, state): if self._radio_system.isChecked(): self.setWidgetText(self.SYSTEM_VALUE) elif self._radio_file.isChecked(): self.setWidgetText(self._valueFile) elif self._radio_code.isChecked(): self.setWidgetText(self._valueCode) def setTheText(self, value): self.setWidgetText(value, True) self._value = value def setWidgetText(self, value, init=False): self._value = value if value == self.SYSTEM_VALUE and not self.DISABLE_SYSTEM_DEFAULT: # System default if init: self._radio_system.setChecked(True) pp = os.environ.get('PYTHONSTARTUP','').strip() if pp: value = '$PYTHONSTARTUP: "%s"' % pp else: value = '$PYTHONSTARTUP: None' # self._edit1.setReadOnly(True) self._edit1.show() self._edit2.hide() self._edit1.setText(value) elif not '\n' in value: # File if init: self._radio_file.setChecked(True) self._edit1.setReadOnly(False) self._edit1.show() self._edit2.hide() self._edit1.setText(value) else: # Code if init: self._radio_code.setChecked(True) self._edit1.hide() self._edit2.show() if not value.strip(): value = self.RUN_AFTER_GUI_TEXT self._edit2.setText(value) def getTheText(self): return self._value class ShellInfo_startDir(ShellInfoLineEdit): def __init__(self, parent): ShellInfoLineEdit.__init__(self, parent) if sys.platform.startswith('win'): self.setPlaceholderText('C:\\path\\to\\your\\python\\modules') else: self.setPlaceholderText('/path/to/your/python/modules') class ShellInfo_argv(ShellInfoLineEdit): def __init__(self, parent): ShellInfoLineEdit.__init__(self, parent) self.setPlaceholderText('arg1 arg2 "arg with spaces"') class ShellInfo_environ(QtGui.QTextEdit): EXAMPLE = 'EXAMPLE_VAR1=value1\nIEP_PROCESS_EVENTS_WHILE_DEBUGGING=1' def __init__(self, parent): QtGui.QTextEdit.__init__(self, parent) self.zoomOut(1) self.setText(self.EXAMPLE) def _cleanText(self, txt): return '\n'.join([line.strip() for line in txt.splitlines()]) def setTheText(self, value): value = self._cleanText(value) if value: self.setText(value) else: self.setText(self.EXAMPLE) def getTheText(self): value = self.toPlainText() value = self._cleanText(value) if value == self.EXAMPLE: return '' else: return value ## The dialog class and container with tabs class ShellInfoTab(QtGui.QScrollArea): INFO_KEYS = [ translate('shell', 'name ::: The name of this configuration.'), translate('shell', 'exe ::: The Python executable.'), translate('shell', 'ipython ::: Use IPython shell if available.'), translate('shell', 'gui ::: The GUI toolkit to integrate (for interactive plotting, etc.).'), translate('shell', 'pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS.'), translate('shell', 'startupScript ::: The script to run at startup (not in script mode).'), translate('shell', 'startDir ::: The start directory (not in script mode).'), translate('shell', 'argv ::: The command line arguments (sys.argv).'), translate('shell', 'environ ::: Extra environment variables (os.environ).'), ] def __init__(self, parent): QtGui.QScrollArea.__init__(self, parent) # Init the scroll area self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.setWidgetResizable(True) self.setFrameShape(QtGui.QFrame.NoFrame); # Create widget and a layout self._content = QtGui.QWidget(parent) self._formLayout = QtGui.QFormLayout(self._content) # Collect classes of widgets to instantiate classes = [] for t in self.INFO_KEYS: className = 'ShellInfo_' + t.key cls = globals()[className] classes.append((t, cls)) # Instantiate all classes self._shellInfoWidgets = {} for t, cls in classes: # Instantiate and store instance = cls(self._content) self._shellInfoWidgets[t.key] = instance # Create label label = QtGui.QLabel(t, self._content) label.setToolTip(t.tt) # Add to layout self._formLayout.addRow(label, instance) # Add delete button t = translate('shell', 'Delete ::: Delete this shell configuration') label = QtGui.QLabel('', self._content) instance = QtGui.QPushButton(iep.icons.cancel, t, self._content) instance.setToolTip(t.tt) instance.setAutoDefault(False) instance.clicked.connect(self.parent().parent().onTabClose) deleteLayout = QtGui.QHBoxLayout() deleteLayout.addWidget(instance, 0) deleteLayout.addStretch(1) # Add to layout self._formLayout.addRow(label, deleteLayout) # Apply layout self._formLayout.setSpacing(15) self._content.setLayout(self._formLayout) self.setWidget(self._content) def setTabTitle(self, name): tabWidget = self.parent().parent() tabWidget.setTabText(tabWidget.indexOf(self), name) def setInfo(self, info=None): """ Set the shell info struct, and use it to update the widgets. Not via init, because this function also sets the tab name. """ # If info not given, use default as specified by the KernelInfo struct if info is None: info = KernelInfo() # Name n = self.parent().parent().count() if n > 1: info.name = "Shell config %i" % n # Store info self._info = info # Set widget values according to info try: for key in info: widget = self._shellInfoWidgets.get(key, None) if widget is not None: widget.setTheText(info[key]) except Exception as why: print("Error setting info in shell config:", why) print(info) def getInfo(self): info = self._info # Set struct values according to widgets try: for key, widget in self._shellInfoWidgets.items(): info[key] = widget.getTheText() except Exception as why: print("Error getting info in shell config:", why) print(info) # Return the original (but modified) ssdf struct object return info class ShellInfoDialog(QtGui.QDialog): """ Dialog to edit the shell configurations. """ def __init__(self, *args): QtGui.QDialog.__init__(self, *args) self.setModal(True) # Set title self.setWindowTitle(iep.translate('shell', 'Shell configurations')) # Create tab widget self._tabs = QtGui.QTabWidget(self) #self._tabs = CompactTabWidget(self, padding=(4,4,5,5)) #self._tabs.setDocumentMode(False) self._tabs.setMovable(True) # Get known interpreters (sorted them by version) # Do this here so we only need to do it once ... from pyzolib.interpreters import get_interpreters self.interpreters = list(reversed(get_interpreters('2.4'))) # Introduce an entry if there's none if not iep.config.shellConfigs2: w = ShellInfoTab(self._tabs) self._tabs.addTab(w, '---') w.setInfo() # Fill tabs for item in iep.config.shellConfigs2: w = ShellInfoTab(self._tabs) self._tabs.addTab(w, '---') w.setInfo(item) # Enable making new tabs and closing tabs self._add = QtGui.QToolButton(self) self._tabs.setCornerWidget(self._add) self._add.clicked.connect(self.onAdd) self._add.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self._add.setIcon(iep.icons.add) self._add.setText(translate('shell', 'Add config')) # #self._tabs.setTabsClosable(True) self._tabs.tabCloseRequested.connect(self.onTabClose) # Create buttons cancelBut = QtGui.QPushButton("Cancel", self) okBut = QtGui.QPushButton("Done", self) cancelBut.clicked.connect(self.close) okBut.clicked.connect(self.applyAndClose) # Layout for buttons buttonLayout = QtGui.QHBoxLayout() buttonLayout.addStretch(1) buttonLayout.addWidget(cancelBut) buttonLayout.addSpacing(10) buttonLayout.addWidget(okBut) # Layout the widgets mainLayout = QtGui.QVBoxLayout(self) mainLayout.addSpacing(8) mainLayout.addWidget(self._tabs,0) mainLayout.addLayout(buttonLayout,0) self.setLayout(mainLayout) # Prevent resizing self.show() self.setMinimumSize(500, 400) self.resize(640, 500) #self.setMaximumHeight(500) def onAdd(self): # Create widget and add to tabs w = ShellInfoTab(self._tabs) self._tabs.addTab(w, '---') w.setInfo() # Select self._tabs.setCurrentWidget(w) w.setFocus() def onTabClose(self): index = self._tabs.currentIndex() self._tabs.removeTab( index ) def applyAndClose(self, event=None): self.apply() self.close() def apply(self): """ Apply changes for all tabs. """ # Clear iep.config.shellConfigs2 = [] # Set new versions. Note that although we recreate the list, # the list is filled with the orignal structs, so having a # reference to such a struct (as the shell has) will enable # you to keep track of any made changes. for i in range(self._tabs.count()): w = self._tabs.widget(i) iep.config.shellConfigs2.append( w.getInfo() ) iep-3.7/iep/iepcore/menu.py0000664000175000017500000026005712573266077016126 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module menu Implements a menu that can be edited very easily. Every menu item is represented by a class. Also implements a dialog to change keyboard shortcuts. """ import os, sys, re, time import unicodedata import datetime from pyzolib import paths from pyzolib.qt import QtCore, QtGui import iep from iep.iepcore.compactTabWidget import CompactTabWidget from iep.iepcore.iepLogging import print from iep.iepcore.assistant import IepAssistant import webbrowser from iep import translate def buildMenus(menuBar): """ Build all the menus """ menus = [ FileMenu(menuBar, translate("menu", "File")), EditMenu(menuBar, translate("menu", "Edit")), ViewMenu(menuBar, translate("menu", "View")), SettingsMenu(menuBar, translate("menu", "Settings")), ShellMenu(menuBar, translate("menu", "Shell")), RunMenu(menuBar, translate("menu", "Run")), ToolsMenu(menuBar, translate("menu", "Tools")), HelpMenu(menuBar, translate("menu", "Help")), ] menuBar._menumap = {} menuBar._menus = menus for menu in menuBar._menus: menuBar.addMenu(menu) menuName = menu.__class__.__name__.lower().split('menu')[0] menuBar._menumap[menuName] = menu # Enable tooltips def onHover(action): # This ugly bit of code makes sure that the tooltip is refreshed # (thus raised above the submenu). This happens only once and after # ths submenu has become visible. if action.menu(): if not hasattr(menuBar, '_lastAction'): menuBar._lastAction = None menuBar._haveRaisedTooltip = False if action is menuBar._lastAction: if ((not menuBar._haveRaisedTooltip) and action.menu().isVisible()): QtGui.QToolTip.hideText() menuBar._haveRaisedTooltip = True else: menuBar._lastAction = action menuBar._haveRaisedTooltip = False # Set tooltip tt = action.statusTip() if hasattr(action, '_shortcutsText'): tt = tt + ' ({})'.format(action._shortcutsText) # Add shortcuts text in it QtGui.QToolTip.showText(QtGui.QCursor.pos(), tt) menuBar.hovered.connect(onHover) # todo: syntax styles now uses a new system. Make dialog for it! # todo: put many settings in an advanced settings dialog: # - autocomp use keywords # - autocomp case sensitive # - autocomp select chars # - Default parser / indentation (width and tabsOrSpaces) / line endings # - Shell wrapping to 80 columns? # - number of lines in shell # - more stuff from iep.config.advanced? def getShortcut(fullName): """ Given the full name or an action, get the shortcut from the iep.config.shortcuts2 dict. A tuple is returned representing the two shortcuts. """ if isinstance(fullName, QtGui.QAction): fullName = fullName.menuPath # the menuPath property is set in Menu._addAction shortcut = '', '' if fullName in iep.config.shortcuts2: shortcut = iep.config.shortcuts2[fullName] if shortcut.count(','): shortcut = tuple(shortcut.split(',')) else: shortcut = shortcut, '' return shortcut def translateShortcutToOSNames(shortcut): """ Translate Qt names to OS names (e.g. Ctrl -> cmd symbol for Mac, Meta -> Windows for windows """ if sys.platform == 'darwin': replace = (('Ctrl+','\u2318'),('Shift+','\u21E7'), ('Alt+','\u2325'),('Meta+','^')) else: replace = () for old, new in replace: shortcut = shortcut.replace(old, new) return shortcut class KeyMapper(QtCore.QObject): """ This class is accessable via iep.keyMapper iep.keyMapper.keyMappingChanged is emitted when keybindings are changed """ keyMappingChanged = QtCore.Signal() def setShortcut(self, action): """ When an action is created or when keymappings are changed, this method is called to set the shortcut of an action based on its menuPath (which is the key in iep.config.shortcuts2, e.g. shell__clear_screen) """ if action.menuPath in iep.config.shortcuts2: # Set shortcut so Qt can do its magic shortcuts = iep.config.shortcuts2[action.menuPath] action.setShortcuts(shortcuts.split(',')) # Also store shortcut text (used in display of tooltip shortcuts = shortcuts.replace(',',', ').replace(' ', ' ') action._shortcutsText = shortcuts.rstrip(', ') def unwrapText(text): """ Unwrap text to display in message boxes. This just removes all newlines. If you want to insert newlines, use \\r.""" # Removes newlines text = text.replace('\n', '') # Remove double/triple/etc spaces text = text.lstrip() for i in range(10): text = text.replace(' ', ' ') # Convert \\r newlines text = text.replace('\r', '\n') # Remove spaces after newlines text = text.replace('\n ', '\n') return text class Menu(QtGui.QMenu): """ Menu(parent=None, name=None) Base class for all menus. Has methods to add actions of all sorts. The add* methods all have the name and icon as first two arguments. This is not so consistent with the Qt API for addAction, but it allows for cleaner code to add items; the first item can be quite long because it is a translation. In the current API, the second and subsequent arguments usually fit nicely on the second line. """ def __init__(self, parent=None, name=None): QtGui.QMenu.__init__(self, parent) # Make sure that the menu has a title if name: self.setTitle(name) else: raise ValueError # Set tooltip too? if hasattr(name, 'tt'): self.setStatusTip(name.tt) # Action groups within the menu keep track of the selected value self._groups = {} # menuPath is used to bind shortcuts, it is ,e.g. shell__clear_screen if hasattr(parent,'menuPath'): self.menuPath = parent.menuPath + '__' else: self.menuPath = '' #This is a top-level menu # Get key for this menu key = name if hasattr(name, 'key'): key = name.key self.menuPath += self._createMenuPathName(key) # Build the menu. Happens only once self.build() def _createMenuPathName(self, name): """ Convert a menu title into a menuPath component name e.g. Interrupt current shell -> interrupt_current_shell """ # hide anything between brackets name = re.sub('\(.*\)', '', name) # replace invalid chars name = name.replace(' ', '_') if name and name[0] in '0123456789_': name = "_" + name name = re.sub('[^a-zA-z_0-9]','',name) return name.lower() def _addAction(self, text, icon, selected=None): """ Convenience function that makes the right call to addAction(). """ # Add the action if icon is None: a = self.addAction(text) else: a = self.addAction(icon, text) # Checkable? if selected is not None: a.setCheckable(True) a.setChecked(selected) # Set tooltip if we can find it if hasattr(text, 'tt'): a.setStatusTip(text.tt) # Find the key (untranslated name) for this menu item key = a.text() if hasattr(text, 'key'): key = text.key a.menuPath = self.menuPath + '__' + self._createMenuPathName(key) # Register the action so its keymap is kept up to date iep.keyMapper.keyMappingChanged.connect(lambda: iep.keyMapper.setShortcut(a)) iep.keyMapper.setShortcut(a) return a def build(self): """ Add all actions to the menu. To be overridden. """ pass def addMenu(self, menu, icon=None): """ Add a (sub)menu to this menu. """ # Add menu in the conventional way a = QtGui.QMenu.addMenu(self, menu) a.menuPath = menu.menuPath # Set icon if icon is not None: a.setIcon(icon) return menu def addItem(self, text, icon=None, callback=None, value=None): """ Add an item to the menu. If callback is given and not None, connect triggered signal to the callback. If value is None or not given, callback is called without parameteres, otherwise it is called with value as parameter """ # Add action a = self._addAction(text, icon) # Connect the menu item to its callback if callback: if value is not None: a.triggered.connect(lambda b=None, v=value: callback(v)) else: a.triggered.connect(lambda b=None: callback()) return a def addGroupItem(self, text, icon=None, callback=None, value=None, group=None): """ Add a 'select-one' option to the menu. Items with equal group value form a group. If callback is specified and not None, the callback is called for the new active item, with the value for that item as parameter whenever the selection is changed """ # Init action a = self._addAction(text, icon) a.setCheckable(True) # Connect the menu item to its callback (toggled is a signal only # emitted by checkable actions, and can also be called programmatically, # e.g. in QActionGroup) if callback: def doCallback(b, v): if b: callback(v) a.toggled.connect(lambda b=None, v=value: doCallback(a.isChecked(), v)) # Add the menu item to a action group if group is None: group = 'default' if group not in self._groups: #self._groups contains tuples (actiongroup, dict-of-actions) self._groups[group] = (QtGui.QActionGroup(self), {}) actionGroup,actions = self._groups[group] actionGroup.addAction(a) actions[value]=a return a def addCheckItem(self, text, icon=None, callback=None, value=None, selected=False): """ Add a true/false item to the menu. If callback is specified and not None, the callback is called when the item is changed. If value is not specified or None, callback is called with the new state as parameter. Otherwise, it is called with the new state and value as parameters """ # Add action a = self._addAction(text, icon, selected) # Connect the menu item to its callback if callback: if value is not None: a.triggered.connect(lambda b=None, v=value: callback(a.isChecked(),v)) else: a.triggered.connect(lambda b=None: callback(a.isChecked())) return a def setCheckedOption(self, group, value): """ Set the selected value of a group. This will also activate the callback function of the item that gets selected. if group is None the default group is used. """ if group is None: group = 'default' actionGroup, actions = self._groups[group] if value in actions: actions[value].setChecked(True) class GeneralOptionsMenu(Menu): """ GeneralOptionsMenu(parent, name, callback, options=None) Menu to present the user with a list from which to select one item. We need this a lot. """ def __init__(self, parent=None, name=None, callback=None, options=None): Menu.__init__(self, parent, name) self._options_callback = callback if options: self.setOptions(options) def build(self): pass # We build when the options are given def setOptions(self, options, values=None): """ Set the list of options, clearing any existing options. The options are added ad group items and registered to the callback given at initialization. """ # Init self.clear() cb = self._options_callback # Get values if values is None: values = options for option, value in zip(options, values): self.addGroupItem(option, None, cb, value) class IndentationMenu(Menu): """ Menu for the user to control the type of indentation for a document: tabs vs spaces and the amount of spaces. Part of the File menu. """ def build(self): self._items = [ self.addGroupItem(translate("menu", "Use tabs"), None, self._setStyle, False, group="style"), self.addGroupItem(translate("menu", "Use spaces"), None, self._setStyle, True, group="style") ] self.addSeparator() spaces = translate("menu", "spaces", "plural of spacebar character") self._items += [ self.addGroupItem("%d %s" % (i, spaces), None, self._setWidth, i, group="width") for i in range(2,9) ] def _setWidth(self, width): editor = iep.editors.getCurrentEditor() if editor is not None: editor.setIndentWidth(width) def _setStyle(self, style): editor = iep.editors.getCurrentEditor() if editor is not None: editor.setIndentUsingSpaces(style) class FileMenu(Menu): def build(self): icons = iep.icons self._items = [] # Create indent menu t = translate("menu", "Indentation ::: The indentation used of the current file.") self._indentMenu = IndentationMenu(self, t) # Create parser menu from iep import codeeditor t = translate("menu", "Syntax parser ::: The syntax parser of the current file.") self._parserMenu = GeneralOptionsMenu(self, t, self._setParser) self._parserMenu.setOptions(['None'] + codeeditor.Manager.getParserNames()) # Create line ending menu t = translate("menu", "Line endings ::: The line ending character of the current file.") self._lineEndingMenu = GeneralOptionsMenu(self, t, self._setLineEndings) self._lineEndingMenu.setOptions(['LF', 'CR', 'CRLF']) # Create encoding menu t = translate("menu", "Encoding ::: The character encoding of the current file.") self._encodingMenu = GeneralOptionsMenu(self, t, self._setEncoding) # Bind to signal iep.editors.currentChanged.connect(self.onEditorsCurrentChanged) # Build menu file management stuff self.addItem(translate('menu', 'New ::: Create a new (or temporary) file.'), icons.page_add, iep.editors.newFile) self.addItem(translate("menu", "Open... ::: Open an existing file from disk."), icons.folder_page, iep.editors.openFile) # self._items += [ self.addItem(translate("menu", "Save ::: Save the current file to disk."), icons.disk, iep.editors.saveFile), self.addItem(translate("menu", "Save as... ::: Save the current file under another name."), icons.disk_as, iep.editors.saveFileAs), self.addItem(translate("menu", "Save all ::: Save all open files."), icons.disk_multiple, iep.editors.saveAllFiles), self.addItem(translate("menu", "Close ::: Close the current file."), icons.page_delete, iep.editors.closeFile), self.addItem(translate("menu", "Close all ::: Close all files."), icons.page_delete_all, iep.editors.closeAllFiles), self.addItem(translate("menu", "Export to PDF ::: Export current file to PDF (e.g. for printing)."), None, self._print), ] # Build file properties stuff self.addSeparator() self._items += [ self.addMenu(self._indentMenu, icons.page_white_gear), self.addMenu(self._parserMenu, icons.page_white_gear), self.addMenu(self._lineEndingMenu, icons.page_white_gear), self.addMenu(self._encodingMenu, icons.page_white_gear), ] # Closing of app self.addSeparator() self.addItem(translate("menu", "Restart IEP ::: Restart the application."), icons.arrow_rotate_clockwise, iep.main.restart) self.addItem(translate("menu","Quit IEP ::: Close the application."), icons.cancel, iep.main.close) # Start disabled self.setEnabled(False) def setEnabled(self, enabled): """ Enable or disable all items. If disabling, also uncheck all items """ for child in self._items: child.setEnabled(enabled) def onEditorsCurrentChanged(self): editor = iep.editors.getCurrentEditor() if editor is None: self.setEnabled(False) #Disable / uncheck all editor-related options else: self.setEnabled(True) # Update indentation self._indentMenu.setCheckedOption("style", editor.indentUsingSpaces()) self._indentMenu.setCheckedOption("width", editor.indentWidth()) # Update parser parserName = 'None' if editor.parser(): parserName = editor.parser().name() or 'None' self._parserMenu.setCheckedOption(None, parserName ) # Update line ending self._lineEndingMenu.setCheckedOption(None, editor.lineEndingsHumanReadable) # Update encoding self._updateEncoding(editor) def _setParser(self, value): editor = iep.editors.getCurrentEditor() if value.lower() == 'none': value = None if editor is not None: editor.setParser(value) def _setLineEndings(self, value): editor = iep.editors.getCurrentEditor() editor.lineEndings = value def _updateEncoding(self, editor): # Dict with encoding aliases (official to aliases) D = { 'cp1250': ('windows-1252', ), 'cp1251': ('windows-1251', ), 'latin_1': ('iso-8859-1', 'iso8859-1', 'cp819', 'latin', 'latin1', 'L1')} # Dict with aliases mapping to "official value" Da = {} for key in D: for key2 in D[key]: Da[key2] = key # Encodings to list encodings = [ 'utf-8','ascii', 'latin_1', 'cp1250', 'cp1251'] # Get current encoding (add if not present) editorEncoding = editor.encoding if editorEncoding in Da: editorEncoding = Da[editorEncoding] if editorEncoding not in encodings: encodings.append(editorEncoding) # Handle aliases encodingNames, encodingValues = [], [] for encoding in encodings: encodingValues.append(encoding) if encoding in D: name = '%s (%s)' % (encoding, ', '.join(D[encoding])) encodingNames.append(name) else: encodingNames.append(encoding) # Update self._encodingMenu.setOptions(encodingNames, encodingValues) self._encodingMenu.setCheckedOption(None, editorEncoding) def _setEncoding(self, value): editor = iep.editors.getCurrentEditor() if editor is not None: editor.encoding = value def _print(self): editor = iep.editors.getCurrentEditor() if editor is not None: printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution) if True: filename = QtGui.QFileDialog.getSaveFileName(None, 'Export PDF', os.path.expanduser("~"), "*.pdf *.ps") if isinstance(filename, tuple): # PySide filename = filename[0] if not filename: return printer.setOutputFileName(filename) else: d = QtGui.QPrintDialog(printer) d.setWindowTitle('Print code') d.setOption(d.PrintSelection, editor.textCursor().hasSelection()) d.setOption(d.PrintToFile, True) ok = d.exec_() if ok != d.Accepted: return # Print editor.print_(printer) # todo: move to matching brace class EditMenu(Menu): def build(self): icons = iep.icons self.addItem(translate("menu", "Undo ::: Undo the latest editing action."), icons.arrow_undo, self._editItemCallback, "undo") self.addItem(translate("menu", "Redo ::: Redo the last undone editong action."), icons.arrow_redo, self._editItemCallback, "redo") self.addSeparator() self.addItem(translate("menu", "Cut ::: Cut the selected text."), icons.cut, self._editItemCallback, "cut") self.addItem(translate("menu", "Copy ::: Copy the selected text to the clipboard."), icons.page_white_copy, self._editItemCallback, "copy") self.addItem(translate("menu", "Paste ::: Paste the text that is now on the clipboard."), icons.paste_plain, self._editItemCallback, "paste") self.addItem(translate("menu", "Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation."), icons.paste_plain, self._editItemCallback, "pasteAndSelect") self.addItem(translate("menu", "Select all ::: Select all text."), icons.sum, self._editItemCallback, "selectAll") self.addSeparator() self.addItem(translate("menu", "Indent ::: Indent the selected line."), icons.text_indent, self._editItemCallback, "indentSelection") self.addItem(translate("menu", "Dedent ::: Unindent the selected line."), icons.text_indent_remove, self._editItemCallback, "dedentSelection") self.addItem(translate("menu", "Comment ::: Comment the selected line."), icons.comment_add, self._editItemCallback, "commentCode") self.addItem(translate("menu", "Uncomment ::: Uncomment the selected line."), icons.comment_delete, self._editItemCallback, "uncommentCode") self.addItem(translate("menu", "Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters."), icons.text_align_justify, self._editItemCallback, "justifyText") self.addItem(translate("menu", "Go to line ::: Go to a specific line number."), None, self._editItemCallback, "gotoLinePopup") self.addItem(translate("menu", "Delete line ::: Delete the selected line."), None, self._editItemCallback, "deleteLines") self.addSeparator() self.addItem(translate("menu", "Find or replace ::: Show find/replace widget. Initialize with selected text."), icons.find, iep.editors._findReplace.startFind) self.addItem(translate("menu", "Find selection ::: Find the next occurrence of the selected text."), None, iep.editors._findReplace.findSelection) self.addItem(translate("menu", "Find selection backward ::: Find the previous occurrence of the selected text."), None, iep.editors._findReplace.findSelectionBw) self.addItem(translate("menu", "Find next ::: Find the next occurrence of the search string."), None, iep.editors._findReplace.findNext) self.addItem(translate("menu", "Find previous ::: Find the previous occurrence of the search string."), None, iep.editors._findReplace.findPrevious) def _editItemCallback(self, action): widget = QtGui.qApp.focusWidget() #If the widget has a 'name' attribute, call it if hasattr(widget, action): getattr(widget, action)() class ZoomMenu(Menu): """ Small menu for the zooming. Part of the view menu. """ def build(self): self.addItem(translate("menu", 'Zoom in'), None, self._setZoom, +1) self.addItem(translate("menu", 'Zoom out'), None, self._setZoom, -1) self.addItem(translate("menu", 'Zoom reset'), None, self._setZoom, 0) def _setZoom(self, value): if not value: iep.config.view.zoom = 0 else: iep.config.view.zoom += value # Apply for editor in iep.editors: iep.config.view.zoom = editor.setZoom(iep.config.view.zoom) for shell in iep.shells: iep.config.view.zoom = shell.setZoom(iep.config.view.zoom) logger = iep.toolManager.getTool('ieplogger') if logger: logger.setZoom(iep.config.view.zoom) class FontMenu(Menu): def __init__(self, parent=None, name="Font", *args, **kwds): Menu.__init__(self, parent, name, *args, **kwds) self.aboutToShow.connect(self._updateFonts) def _updateFonts(self): self.clear() # Build list with known available monospace fonts names = iep.codeeditor.Manager.fontNames() defaultName = 'DejaVu Sans Mono' for name in sorted(names): txt = name+' (default)' if name == defaultName else name self.addGroupItem(txt, None, self._selectFont, value=name) # Select the current one self.setCheckedOption(None, iep.config.view.fontname) def _selectFont(self, name): iep.config.view.fontname = name # Apply for editor in iep.editors: editor.setFont(iep.config.view.fontname) for shell in iep.shells: shell.setFont(iep.config.view.fontname) logger = iep.toolManager.getTool('ieplogger') if logger: logger.setFont(iep.config.view.fontname) # todo: brace matching # todo: code folding? # todo: maybe move qt theme to settings class ViewMenu(Menu): def build(self): icons = iep.icons # Create edge column menu t = translate("menu", "Location of long line indicator ::: The location of the long-line-indicator.") self._edgeColumMenu = GeneralOptionsMenu(self, t, self._setEdgeColumn) values = [0] + [i for i in range(60,130,10)] names = ["None"] + [str(i) for i in values[1:]] self._edgeColumMenu.setOptions(names, values) self._edgeColumMenu.setCheckedOption(None, iep.config.view.edgeColumn) # Create qt theme menu t = translate("menu", "Qt theme ::: The styling of the user interface widgets.") self._qtThemeMenu = GeneralOptionsMenu(self, t, self._setQtTheme) styleNames = list(QtGui.QStyleFactory.keys()) + ['Cleanlooks+'] styleNames.sort() titles = [name for name in styleNames] styleNames = [name.lower() for name in styleNames] for i in range(len(titles)): if titles[i].lower() == iep.defaultQtStyleName.lower(): titles[i] += " (default)" self._qtThemeMenu.setOptions(titles, styleNames) self._qtThemeMenu.setCheckedOption(None, iep.config.view.qtstyle.lower()) # Build menu self.addItem(translate("menu", "Select shell ::: Focus the cursor on the current shell."), icons.application_shell, self._selectShell) self.addItem(translate("menu", "Select editor ::: Focus the cursor on the current editor."), icons.application_edit, self._selectEditor) self.addItem(translate("menu", "Select previous file ::: Select the previously selected file."), icons.application_double, iep.editors._tabs.selectPreviousItem) self.addSeparator() self.addEditorItem(translate("menu", "Show whitespace ::: Show spaces and tabs."), None, "showWhitespace") self.addEditorItem(translate("menu", "Show line endings ::: Show the end of each line."), None, "showLineEndings") self.addEditorItem(translate("menu", "Show indentation guides ::: Show vertical lines to indicate indentation."), None, "showIndentationGuides") self.addSeparator() self.addEditorItem(translate("menu", "Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling)."), None, "wrap") self.addEditorItem(translate("menu", "Highlight current line ::: Highlight the line where the cursor is."), None, "highlightCurrentLine") self.addSeparator() self.addItem(translate("menu", "Previous cell ::: Go back to the previous cell."), None, self._previousCell ) self.addItem(translate("menu", "Next cell ::: Advance to the next cell."), None, self._nextCell ) self.addItem(translate("menu", "Previous object ::: Go back to the previous top-level structure."), None, self._previousTopLevelObject ) self.addItem(translate("menu", "Next object ::: Advance to the next top-level structure."), None, self._nextTopLevelObject ) self.addSeparator() self.addMenu(self._edgeColumMenu, icons.text_padding_right) self.addMenu(FontMenu(self, translate("menu", "Font")), icons.style) self.addMenu(ZoomMenu(self, translate("menu", "Zooming")), icons.magnifier) self.addMenu(self._qtThemeMenu, icons.application_view_tile) def addEditorItem(self, name, icon, param): """ Create a boolean item that reperesents a property of the editors, whose value is stored in iep.config.view.param """ if hasattr(iep.config.view, param): default = getattr(iep.config.view, param) else: default = True self.addCheckItem(name, icon, self._configEditor, param, default) def _configEditor(self, state, param): """ Callback for addEditorItem items """ # Store this parameter in the config setattr(iep.config.view, param, state) # Apply to all editors, translate e.g. showWhitespace to setShowWhitespace setter = 'set' + param[0].upper() + param[1:] for editor in iep.editors: getattr(editor,setter)(state) def _selectShell(self): shell = iep.shells.getCurrentShell() if shell: shell.setFocus() def _selectEditor(self): editor = iep.editors.getCurrentEditor() if editor: editor.setFocus() def _setEdgeColumn(self, value): iep.config.view.edgeColumn = value for editor in iep.editors: editor.setLongLineIndicatorPosition(value) def _setQtTheme(self, value): iep.config.view.qtstyle = value iep.main.setQtStyle(value) def _previousCell(self): """ Rewind the curser to the previous cell (starting with '##'). """ self._previousTopLevelObject(type='cell') def _nextCell(self): """ Advance the curser to the next cell (starting with '##'). """ self._nextTopLevelObject(type='cell') def _previousTopLevelObject(self, type=None): # Get parser result result = iep.parser._getResult() if not result: return # Get editor editor = iep.editors.getCurrentEditor() if not editor: return # Get current line number ln = editor.textCursor().blockNumber() ln += 1 # is ln as in line number area runCursor = editor.textCursor() #The part that should be run runCursor.movePosition(runCursor.StartOfBlock) # Find the object which starts above current curser # position if there is any and move there for object in reversed(result.rootItem.children): # If type given, only consider objects of that type if type and type!=object.type: continue if ln and object.linenr < ln: startLineNr = object.linenr # Rewind cursor until the start of this object while True: if not runCursor.block().previous().isValid(): return runCursor.movePosition(runCursor.PreviousBlock) if runCursor.blockNumber() == startLineNr-1: break cursor = editor.textCursor() cursor.setPosition(runCursor.position()) editor.setTextCursor(cursor) return def _nextTopLevelObject(self, type=None): # Get parser result result = iep.parser._getResult() if not result: return # Get editor editor = iep.editors.getCurrentEditor() if not editor: return # Get current line number ln = editor.textCursor().blockNumber() ln += 1 # is ln as in line number area runCursor = editor.textCursor() #The part that should be run runCursor.movePosition(runCursor.StartOfBlock) # Find the object which starts below current curser # position if there is any and move there for object in result.rootItem.children: # If type given, only consider objects of that type if type and type!=object.type: continue if ln and object.linenr > ln: startLineNr = object.linenr endLineNr = object.linenr2 # Advance cursor until the start of this object while True: if not runCursor.block().next().isValid(): return runCursor.movePosition(runCursor.NextBlock) if runCursor.blockNumber() == startLineNr-1: break realCursorPosition = runCursor.position() # Advance cursor until the end of this object (to know # how far it extends and make sure it is most visible) while True: if not runCursor.block().next().isValid(): break runCursor.movePosition(runCursor.NextBlock) if runCursor.blockNumber() == endLineNr-1: break cursor = editor.textCursor() cursor.setPosition(runCursor.position()) editor.setTextCursor(cursor) cursor.setPosition(realCursorPosition) editor.setTextCursor(cursor) return class ShellMenu(Menu): def __init__(self, parent=None, name="Shell", *args, **kwds): self._shellCreateActions = [] self._shellActions = [] Menu.__init__(self, parent, name, *args, **kwds) iep.shells.currentShellChanged.connect(self.onCurrentShellChanged) self.aboutToShow.connect(self._updateShells) def onCurrentShellChanged(self): """ Enable/disable shell actions based on wether a shell is available """ for shellAction in self._shellActions: shellAction.setEnabled(bool(iep.shells.getCurrentShell())) def buildShellActions(self): """ Create the menu items which are also avaliable in the ShellTabContextMenu Returns a list of all items added""" icons = iep.icons return [ self.addItem(translate("menu", 'Clear screen ::: Clear the screen.'), icons.application_eraser, self._shellAction, "clearScreen"), self.addItem(translate("menu", 'Interrupt ::: Interrupt the current running code (does not work for extension code).'), icons.application_lightning, self._shellAction, "interrupt"), self.addItem(translate("menu", 'Restart ::: Terminate and restart the interpreter.'), icons.application_refresh, self._shellAction, "restart"), self.addItem(translate("menu", 'Terminate ::: Terminate the interpreter, leaving the shell open.'), icons.application_delete, self._shellAction, "terminate"), self.addItem(translate("menu", 'Close ::: Terminate the interpreter and close the shell.'), icons.cancel, self._shellAction, "closeShell"), ] def buildShellDebugActions(self): """ Create the menu items for debug shell actions. Returns a list of all items added""" icons = iep.icons return [ self.addItem(translate("menu", 'Debug next: proceed until next line'), icons.debug_next, self._debugAction, "NEXT"), self.addItem(translate("menu", 'Debug step into: proceed one step'), icons.debug_step, self._debugAction, "STEP"), self.addItem(translate("menu", 'Debug return: proceed until returns'), icons.debug_return, self._debugAction, "RETURN"), self.addItem(translate("menu", 'Debug continue: proceed to next breakpoint'), icons.debug_continue, self._debugAction, "CONTINUE"), self.addItem(translate("menu", 'Stop debugging'), icons.debug_quit, self._debugAction, "STOP"), ] def getShell(self): """ Returns the shell on which to apply the menu actions. Default is the current shell, this is overridden in the shell/shell tab context menus""" return iep.shells.getCurrentShell() def build(self): """ Create the items for the shells menu """ # Normal shell actions self._shellActions = self.buildShellActions() self.addSeparator() # Debug stuff self._debug_clear_text = translate('menu', 'Clear all {} breakpoints') self._debug_clear = self.addItem('', iep.icons.bug_delete, self._clearBreakPoints) self._debug_pm = self.addItem( translate('menu', 'Postmortem: debug from last traceback'), iep.icons.bug_delete, self._debugAction, "START") self._shellDebugActions = self.buildShellDebugActions() # self.aboutToShow.connect(self._updateDebugButtons) self.addSeparator() # Shell config self.addItem(translate("menu", 'Edit shell configurations... ::: Add new shell configs and edit interpreter properties.'), iep.icons.application_wrench, self._editConfig2) self.addItem(translate("menu", 'Create new Python environment... ::: Install miniconda.'), iep.icons.application_cascade, self._newPythonEnv) self.addSeparator() # Add shell configs self._updateShells() def _updateShells(self): """ Remove, then add the items for the creation of each shell """ for action in self._shellCreateActions: self.removeAction(action) self._shellCreateActions = [] for i, config in enumerate(iep.config.shellConfigs2): name = 'Create shell %s: (%s)' % (i+1, config.name) action = self.addItem(name, iep.icons.application_add, iep.shells.addShell, config) self._shellCreateActions.append(action) def _updateDebugButtons(self): # Count breakpoints bpcount = 0 for e in iep.editors: bpcount += len(e.breakPoints()) self._debug_clear.setText(self._debug_clear_text.format(bpcount)) # Determine state of PM and clear button debugmode = iep.shells._debugmode self._debug_pm.setEnabled(debugmode==0) self._debug_clear.setEnabled(debugmode==0) # The _shellDebugActions are enabled/disabled by the shellStack def _shellAction(self, action): """ Call the method specified by 'action' on the current shell. """ shell = self.getShell() if shell: # Call the specified action getattr(shell,action)() def _debugAction(self, action): shell = self.getShell() if shell: # Call the specified action command = action.upper() shell.executeCommand('DB %s\n' % command) def _clearBreakPoints(self, action=None): for e in iep.editors: e.clearBreakPoints() def _editConfig2(self): """ Edit, add and remove configurations for the shells. """ from iep.iepcore.shellInfoDialog import ShellInfoDialog d = ShellInfoDialog() d.exec_() def _newPythonEnv(self): from iep.util.bootstrapconda import Installer d = Installer(iep.main) d.exec_() class ShellButtonMenu(ShellMenu): def build(self): self._shellActions = [] self.addItem(translate("menu", 'Edit shell configurations... ::: Add new shell configs and edit interpreter properties.'), iep.icons.application_wrench, self._editConfig2) submenu = Menu(self, translate("menu", 'New shell ... ::: Create new shell to run code in.')) self._newShellMenu = self.addMenu(submenu, iep.icons.application_add) self.addSeparator() def _updateShells(self): """ Remove, then add the items for the creation of each shell """ for action in self._shellCreateActions: self._newShellMenu.removeAction(action) self._shellCreateActions = [] for i, config in enumerate(iep.config.shellConfigs2): name = 'Create shell %s: (%s)' % (i+1, config.name) action = self._newShellMenu.addItem(name, iep.icons.application_add, iep.shells.addShell, config) self._shellCreateActions.append(action) class ShellContextMenu(ShellMenu): """ This is the context menu for the shell """ def __init__(self, shell, *args, **kwds): ShellMenu.__init__(self, *args, **kwds) self._shell = shell def build(self): """ Build menu """ self.buildShellActions() icons = iep.icons # This is a subset of the edit menu. Copied manually. self.addSeparator() self.addItem(translate("menu", "Cut ::: Cut the selected text."), icons.cut, self._editItemCallback, "cut") self.addItem(translate("menu", "Copy ::: Copy the selected text to the clipboard."), icons.page_white_copy, self._editItemCallback, "copy") self.addItem(translate("menu", "Paste ::: Paste the text that is now on the clipboard."), icons.paste_plain, self._editItemCallback, "paste") self.addItem(translate("menu", "Select all ::: Select all text."), icons.sum, self._editItemCallback, "selectAll") def getShell(self): """ Shell actions of this menu operate on the shell specified in the constructor """ return self._shell def _editItemCallback(self, action): #If the widget has a 'name' attribute, call it getattr(self._shell, action)() def _updateShells(self): pass class ShellTabContextMenu(ShellContextMenu): """ The context menu for the shell tab is similar to the shell context menu, but only has the shell actions defined in ShellMenu.buildShellActions()""" def build(self): """ Build menu """ self.buildShellActions() def _updateShells(self): pass class EditorContextMenu(Menu): """ This is the context menu for the editor """ def __init__(self, editor, name='EditorContextMenu' ): self._editor = editor Menu.__init__(self, editor, name) def build(self): """ Build menu """ icons = iep.icons # This is a subset of the edit menu. Copied manually. self.addItem(translate("menu", "Cut ::: Cut the selected text."), icons.cut, self._editItemCallback, "cut") self.addItem(translate("menu", "Copy ::: Copy the selected text to the clipboard."), icons.page_white_copy, self._editItemCallback, "copy") self.addItem(translate("menu", "Paste ::: Paste the text that is now on the clipboard."), icons.paste_plain, self._editItemCallback, "paste") self.addItem(translate("menu", "Select all ::: Select all text."), icons.sum, self._editItemCallback, "selectAll") self.addSeparator() self.addItem(translate("menu", "Indent ::: Indent the selected line."), icons.text_indent, self._editItemCallback, "indentSelection") self.addItem(translate("menu", "Dedent ::: Unindent the selected line."), icons.text_indent_remove, self._editItemCallback, "dedentSelection") self.addItem(translate("menu", "Comment ::: Comment the selected line."), icons.comment_add, self._editItemCallback, "commentCode") self.addItem(translate("menu", "Uncomment ::: Uncomment the selected line."), icons.comment_delete, self._editItemCallback, "uncommentCode") self.addItem(translate("menu", "Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters."), icons.text_align_justify, self._editItemCallback, "justifyText") self.addSeparator() self.addItem(translate("menu", "Goto Definition ::: Go to definition of word under cursor."), icons.debug_return, self._editItemCallback, "gotoDef") # This is a subset of the run menu. Copied manually. self.addSeparator() self.addItem(translate("menu", 'Run selection ::: Run the current editor\'s selected lines, selected words on the current line, or current line if there is no selection.'), icons.run_lines, self._runSelected) def _editItemCallback(self, action): #If the widget has a 'name' attribute, call it getattr(self._editor, action)() def _runSelected(self): runMenu = iep.main.menuBar()._menumap['run'] runMenu._runSelected() class EditorTabContextMenu(Menu): def __init__(self, *args, **kwds): Menu.__init__(self, *args, **kwds) self._index = -1 def setIndex(self, index): self._index = index def build(self): """ Build menu """ icons = iep.icons # Copied (and edited) manually from the File memu self.addItem(translate("menu", "Save ::: Save the current file to disk."), icons.disk, self._fileAction, "saveFile") self.addItem(translate("menu", "Save as... ::: Save the current file under another name."), icons.disk_as, self._fileAction, "saveFileAs") self.addItem(translate("menu", "Close ::: Close the current file."), icons.page_delete, self._fileAction, "closeFile") self.addItem(translate("menu", "Close others::: Close all files but this one."), None, self._fileAction, "close_others") self.addItem(translate("menu", "Close all ::: Close all files."), icons.page_delete_all, self._fileAction, "close_all") self.addItem(translate("menu", "Rename ::: Rename this file."), None, self._fileAction, "rename") self.addSeparator() # todo: remove feature to pin files? self.addItem(translate("menu", "Pin/Unpin ::: Pinned files get closed less easily."), None, self._fileAction, "pin") self.addItem(translate("menu", "Set/Unset as MAIN file ::: The main file can be run while another file is selected."), icons.star, self._fileAction, "main") self.addSeparator() self.addItem(translate("menu", "Run file ::: Run the code in this file."), icons.run_file, self._fileAction, "run") self.addItem(translate("menu", "Run file as script ::: Run this file as a script (restarts the interpreter)."), icons.run_file_script, self._fileAction, "run_script") def _fileAction(self, action): """ Call the method specified by 'action' on the selected shell """ item = iep.editors._tabs.getItemAt(self._index) if action in ["saveFile", "saveFileAs", "closeFile"]: getattr(iep.editors, action)(item.editor) elif action == "close_others" or action == "close_all": if action == "close_all": item = None #The item not to be closed is not there items = iep.editors._tabs.items() for i in reversed(range(iep.editors._tabs.count())): if items[i] is item or items[i].pinned: continue iep.editors._tabs.tabCloseRequested.emit(i) elif action == "rename": filename = item.filename iep.editors.saveFileAs(item.editor) if item.filename != filename: try: os.remove(filename) except Exception: pass elif action == "pin": item._pinned = not item._pinned elif action == "main": if iep.editors._tabs._mainFile == item.id: iep.editors._tabs._mainFile = None else: iep.editors._tabs._mainFile = item.id elif action == "run": menu = iep.main.menuBar().findChild(RunMenu) if menu: menu._runFile((False, False), item.editor) elif action == "run_script": menu = iep.main.menuBar().findChild(RunMenu) if menu: menu._runFile((True, False), item.editor) iep.editors._tabs.updateItems() class RunMenu(Menu): def build(self): icons = iep.icons self.addItem(translate("menu", 'Run file as script ::: Restart and run the current file as a script.'), icons.run_file_script, self._runFile, (True, False)) self.addItem(translate("menu", 'Run main file as script ::: Restart and run the main file as a script.'), icons.run_mainfile_script, self._runFile, (True, True)) self.addSeparator() self.addItem(translate("menu", 'Execute selection ::: Execute the current editor\'s selected lines, selected words on the current line, or current line if there is no selection.'), icons.run_lines, self._runSelected) self.addItem(translate("menu", 'Execute cell ::: Execute the current editors\'s cell in the current shell.'), icons.run_cell, self._runCell) self.addItem(translate("menu", 'Execute cell and advance ::: Execute the current editors\'s cell and advance to the next cell.'), icons.run_cell, self._runCellAdvance) #In the _runFile calls, the parameter specifies (asScript, mainFile) self.addItem(translate("menu", 'Execute file ::: Execute the current file in the current shell.'), icons.run_file, self._runFile,(False, False)) self.addItem(translate("menu", 'Execute main file ::: Execute the main file in the current shell.'), icons.run_mainfile, self._runFile,(False, True)) self.addSeparator() self.addItem(translate("menu", 'Help on running code ::: Open the IEP wizard at the page about running code.'), icons.information, self._showHelp) def _showHelp(self): """ Show more information about ways to run code. """ from iep.util.iepwizard import IEPWizard w = IEPWizard(self) w.show('RuncodeWizardPage1') # Start wizard at page about running code def _getShellAndEditor(self, what, mainEditor=False): """ Get the shell and editor. Shows a warning dialog when one of these is not available. """ # Init empty error message msg = '' # Get shell shell = iep.shells.getCurrentShell() if shell is None: msg += "No shell to run code in. " #shell = iep.shells.addShell() # issue #335, does not work, somehow # Get editor if mainEditor: editor = iep.editors.getMainEditor() if editor is None: msg += "The is no main file selected." else: editor = iep.editors.getCurrentEditor() if editor is None: msg += "No editor selected." # Show error dialog if msg: m = QtGui.QMessageBox(self) m.setWindowTitle(translate("menu dialog", "Could not run")) m.setText("Could not run " + what + ":\n\n" + msg) m.setIcon(m.Warning) m.exec_() # Return return shell, editor def _runSelected(self): """ Run the selected whole lines in the current shell. """ # Get editor and shell shell, editor = self._getShellAndEditor('selection') if not shell or not editor: return # Get position to sample between (only sample whole lines) screenCursor = editor.textCursor() #Current selection in the editor runCursor = editor.textCursor() #The part that should be run runCursor.setPosition(screenCursor.selectionStart()) runCursor.movePosition(runCursor.StartOfBlock) #This also moves the anchor lineNumber1 = runCursor.blockNumber() runCursor.setPosition(screenCursor.selectionEnd(),runCursor.KeepAnchor) if not (screenCursor.hasSelection() and runCursor.atBlockStart()): #If the end of the selection is at the beginning of a block, don't extend it runCursor.movePosition(runCursor.EndOfBlock,runCursor.KeepAnchor) lineNumber2 = runCursor.blockNumber() # Does this look like a statement? isStatement = lineNumber1 == lineNumber2 and screenCursor.hasSelection() if isStatement: # Get source code of statement code = screenCursor.selectedText().replace('\u2029', '\n').strip() # Execute statement shell.executeCommand(code+'\n') else: # Get source code code = runCursor.selectedText().replace('\u2029', '\n') # Notify user of what we execute self._showWhatToExecute(editor, runCursor) # Get filename and run code fname = editor.id() # editor._name or editor._filename shell.executeCode(code, fname, lineNumber1) def _runCellAdvance(self): self._runCell(True) def _runCell(self, advance=False): """ Run the code between two cell separaters ('##'). """ #TODO: ignore ## in multi-line strings # Maybe using source-structure information? # Get editor and shell shell, editor = self._getShellAndEditor('cell') if not shell or not editor: return cellName = '' # Get current cell # Move up until the start of document # or right after a line starting with '##' runCursor = editor.textCursor() #The part that should be run runCursor.movePosition(runCursor.StartOfBlock) while True: line = runCursor.block().text().lstrip() if line.startswith('##'): # ## line, move to the line following this one if not runCursor.block().next().isValid(): #The user tried to execute the last line of a file which #started with ##. Do nothing return runCursor.movePosition(runCursor.NextBlock) cellName = line.lstrip('#').strip() break if not runCursor.block().previous().isValid(): break #Start of document runCursor.movePosition(runCursor.PreviousBlock) # This is the line number of the start lineNumber = runCursor.blockNumber() if len(cellName) > 20: cellName = cellName[:17]+'...' # Move down until a line before one starting with'##' # or to end of document while True: if runCursor.block().text().lstrip().startswith('##'): #This line starts with ##, move to the end of the previous one runCursor.movePosition(runCursor.Left,runCursor.KeepAnchor) break if not runCursor.block().next().isValid(): #Last block of the document, move to the end of the line runCursor.movePosition(runCursor.EndOfBlock,runCursor.KeepAnchor) break runCursor.movePosition(runCursor.NextBlock,runCursor.KeepAnchor) # Get source code code = runCursor.selectedText().replace('\u2029', '\n') # Notify user of what we execute self._showWhatToExecute(editor, runCursor) # Get filename and run code fname = editor.id() # editor._name or editor._filename shell.executeCode(code, fname, lineNumber, cellName) # Advance if advance: cursor = editor.textCursor() cursor.setPosition(runCursor.position()) cursor.movePosition(cursor.NextBlock) editor.setTextCursor(cursor) def _showWhatToExecute(self, editor, runCursor=None): # Get runCursor for whole document if not given if runCursor is None: runCursor = editor.textCursor() runCursor.movePosition(runCursor.Start) runCursor.movePosition(runCursor.End, runCursor.KeepAnchor) editor.showRunCursor(runCursor) def _getCodeOfFile(self, editor): # Obtain source code text = editor.toPlainText() # Show what we execute self._showWhatToExecute(editor) # Get filename and return fname = editor.id() # editor._name or editor._filename return fname, text def _runFile(self, runMode, givenEditor=None): """ Run a file runMode is a tuple (asScript, mainFile) """ asScript, mainFile = runMode # Get editor and shell description = 'main file' if mainFile else 'file' if asScript: description += ' (as script)' shell, editor = self._getShellAndEditor(description, mainFile) if givenEditor: editor = givenEditor if not shell or not editor: return if asScript: # Go self._runScript(editor, shell) else: # Obtain source code and fname fname, text = self._getCodeOfFile(editor) shell.executeCode(text, fname) def _runScript(self, editor, shell): # Obtain fname and try running err = "" if editor._filename: saveOk = iep.editors.saveFile(editor) # Always try to save if saveOk or not editor.document().isModified(): self._showWhatToExecute(editor) shell.restart(editor._filename) else: err = "Could not save the file." else: err = "Can only run scripts that are in the file system." # If not success, notify if err: m = QtGui.QMessageBox(self) m.setWindowTitle(translate("menu dialog", "Could not run script.")) m.setText(err) m.setIcon(m.Warning) m.exec_() class ToolsMenu(Menu): def __init__(self, *args, **kwds): self._toolActions = [] Menu.__init__(self, *args, **kwds) def build(self): self.addItem(translate("menu", 'Reload tools ::: For people who develop tools.'), iep.icons.plugin_refresh, iep.toolManager.reloadTools) self.addSeparator() self.onToolInstanceChange() # Build initial menu iep.toolManager.toolInstanceChange.connect(self.onToolInstanceChange) def onToolInstanceChange(self): # Remove all exisiting tools from the menu for toolAction in self._toolActions: self.removeAction(toolAction) # Add all tools, with checkmarks for those that are active self._toolActions = [] for tool in iep.toolManager.getToolInfo(): action = self.addCheckItem(tool.name, iep.icons.plugin, tool.menuLauncher, selected=bool(tool.instance)) self._toolActions.append(action) class HelpMenu(Menu): def build(self): icons = iep.icons issues_url = "https://bitbucket.org/iep-project/iep/issues/" if iep.pyzo_mode: issues_url = "http://pyzo.org/issues.html" self.addItem(translate("menu", "Documentation ::: Documentation on Python and the Scipy Stack."), icons.help, self._showPyzoDocs) if iep.pyzo_mode: self.addUrlItem(translate("menu", "Pyzo Website ::: Open the Pyzo website in your browser."), icons.help, "http://www.pyzo.org") self.addUrlItem(translate("menu", "IEP Website ::: Open the IEP website in your browser."), icons.help, "http://iep.pyzo.org") self.addUrlItem(translate("menu", "Ask a question ::: Need help?"), icons.comments, "http://pyzo.org/community.html#discussion-fora-and-email-lists") self.addUrlItem(translate("menu", "Report an issue ::: Did you found a bug in IEP, or do you have a feature request?"), icons.error_add, issues_url) self.addSeparator() self.addItem(translate("menu", "IEP wizard ::: Get started quickly."), icons.wand, self._showIepWizard) #self.addItem(translate("menu", "View code license ::: Legal stuff."), # icons.script, lambda: iep.editors.loadFile(os.path.join(iep.iepDir,"license.txt"))) self.addItem(translate("menu", "Check for updates ::: Are you using the latest version?"), icons.application_go, self._checkUpdates) #self.addItem(translate("menu", "Manage your IEP license ::: View/add licenses."), # icons.script, self._manageLicenses) self.addItem(translate("menu", "About IEP ::: More information about IEP."), icons.information, self._aboutIep) def addUrlItem(self, name, icon, url): self.addItem(name, icon, lambda: webbrowser.open(url)) def _showIepWizard(self): from iep.util.iepwizard import IEPWizard w = IEPWizard(self) w.show() # Use show() instead of exec_() so the user can interact with IEP def _checkUpdates(self): """ Check whether a newer version of IEP is available. """ # Get versions available import urllib.request, re url = "http://www.iep-project.org/downloads.html" text = str( urllib.request.urlopen(url).read() ) results = [] for pattern in ['iep-(.{1,9}?)\.source\.zip' ]: results.extend( re.findall(pattern, text) ) # Produce single string with all versions ... def sorter(x): # Tilde is high ASCII, make 3.2.1 > 3.2 and 3.2 > 3.2beta return x.replace('.','~')+'~' versions = list(sorted(set(results), key=sorter, reverse=True)) if not versions: versions = '?' # Define message text = "Your version of IEP is: {}\n" text += "Latest available version is: {}\n\n" text = text.format(iep.__version__, versions[0]) # Show message box m = QtGui.QMessageBox(self) m.setWindowTitle(translate("menu dialog", "Check for the latest version.")) if versions == '?': text += "Oops, could not determine available versions.\n\n" if True: text += "Do you want to open the download page?\n" m.setStandardButtons(m.Yes | m.Cancel) m.setDefaultButton(m.Cancel) m.setText(text) m.setIcon(m.Information) result = m.exec_() # Goto webpage if user chose to if result == m.Yes: import webbrowser webbrowser.open("http://www.iep-project.org/downloads.html") def _manageLicenses(self): from iep.iepcore.license import LicenseManager w = LicenseManager(None) w.exec_() def _aboutIep(self): from iep.iepcore.about import AboutDialog m = AboutDialog(self) m.exec_() def _showPyzoDocs(self): # Show widget with docs: d = IepAssistant() d.show() class SettingsMenu(Menu): def build(self): icons = iep.icons # Create language menu from iep.util._locale import LANGUAGES, LANGUAGE_SYNONYMS # Update language setting if necessary cur = iep.config.settings.language iep.config.settings.language = LANGUAGE_SYNONYMS.get(cur, cur) # Create menu t = translate("menu", "Select language ::: The language used by IEP.") self._languageMenu = GeneralOptionsMenu(self, t, self._selectLanguage) values = [key for key in sorted(LANGUAGES)] self._languageMenu.setOptions(values, values) self._languageMenu.setCheckedOption(None, iep.config.settings.language) self.addBoolSetting(translate("menu", 'Automatically indent ::: Indent when pressing enter after a colon.'), 'autoIndent', lambda state, key: [e.setAutoIndent(state) for e in iep.editors]) self.addBoolSetting(translate("menu", 'Enable calltips ::: Show calltips with function signatures.'), 'autoCallTip') self.addBoolSetting(translate("menu", 'Enable autocompletion ::: Show autocompletion with known names.'), 'autoComplete') self.addBoolSetting(translate("menu", 'Autocomplete keywords ::: The autocompletion list includes keywords.'), 'autoComplete_keywords') self.addSeparator() self.addItem(translate("menu", 'Edit key mappings... ::: Edit the shortcuts for menu items.'), icons.keyboard, lambda: KeymappingDialog().exec_()) self.addItem(translate("menu", 'Edit syntax styles... ::: Change the coloring of your code.'), icons.style, self._editStyles) self.addMenu(self._languageMenu, icons.flag_green) self.addItem(translate("menu", 'Advanced settings... ::: Configure IEP even further.'), icons.cog, self._advancedSettings) def _editStyles(self): """ Edit the style file. """ text = """ In this 3.0 release, chosing or editing the syntax style is not yet available. We selected a style which we like a lot. It's based on the solarized theme (http://ethanschoonover.com/solarized) isn't it pretty? \r\r In case you really want to change the style, you can change the source code at:\r {} """.format(os.path.join(iep.iepDir, 'codeeditor', 'base.py')) m = QtGui.QMessageBox(self) m.setWindowTitle(translate("menu dialog", "Edit syntax styling")) m.setText(unwrapText(text)) m.setIcon(m.Information) m.setStandardButtons(m.Ok | m.Cancel) m.setDefaultButton(m.Ok) result = m.exec_() def _advancedSettings(self): """ How to edit the advanced settings. """ text = """ More settings are available via the logger-tool: \r\r - Advanced settings are stored in the struct "iep.config.advanced". Type "print(iep.config.advanced)" to view all advanced settings.\r - Call "iep.resetConfig()" to reset all settings.\r - Call "iep.resetConfig(True)" to reset all settings and state.\r \r\r Note that most settings require a restart for the change to take effect. """ m = QtGui.QMessageBox(self) m.setWindowTitle(translate("menu dialog", "Advanced settings")) m.setText(unwrapText(text)) m.setIcon(m.Information) m.exec_() def addBoolSetting(self, name, key, callback = None): def _callback(state, key): setattr(iep.config.settings, key, state) if callback is not None: callback(state, key) self.addCheckItem(name, None, _callback, key, getattr(iep.config.settings,key)) #Default value def _selectLanguage(self, languageName): # Skip if the same if iep.config.settings.language == languageName: return # Save new language iep.config.settings.language = languageName # Notify user text = translate('menu dialog', """ The language has been changed. IEP needs to restart for the change to take effect. """) m = QtGui.QMessageBox(self) m.setWindowTitle(translate("menu dialog", "Language changed")) m.setText(unwrapText(text)) m.setIcon(m.Information) m.exec_() # Remains of old settings menu. Leave here because some settings should some day be # accessible via a dialog (advanced settings). BaseMenu=object class xSettingsMenu(BaseMenu): def fill(self): BaseMenu.fill(self) addItem = self.addItem addItem( MI('Autocomplete case sensitive', self.fun_autoComplete_case, []) ) addItem( MI('Autocomplete select chars', self.fun_autoComplete_fillups, []) ) addItem( None ) addItem( MI('Default style', self.fun_defaultStyle, []) ) addItem( MI('Default indentation width', self.fun_defaultIndentWidth, []) ) addItem( MI('Default indentation style', self.fun_defaultIndentStyle, []) ) addItem( MI('Default line endings', self.fun_defaultLineEndings, []) ) def fun_defaultStyle(self, value): """ The style used for new files. """ if value is None: current = iep.config.settings.defaultStyle options = iep.styleManager.getStyleNames() options.append(current) return options else: # store iep.config.settings.defaultStyle = value def fun_defaultIndentWidth(self, value): """ The indentation used for new files and in the shells. """ if value is None: current = iep.config.settings.defaultIndentWidth options = [2,3,4,5,6,7,8, current] return ['%d' % i for i in options] # parse value try: val = int(value[:2]) except ValueError: val = 4 # store iep.config.settings.defaultIndentWidth = val # Apply to shells for shell in iep.shells: shell.setIndentWidth(val) def fun_defaultIndentStyle(self,value): """Whether to use tabs or spaces for indentation in the shells and in new files""" # get editor if value is None: options = ['Spaces', 'Tabs'] return options + [options[0 if iep.config.settings.defaultIndentUsingSpaces else 1]] else: # parse value val = None try: val = {'Spaces': True, 'Tabs': False}[value] except KeyError: val = True # apply iep.config.settings.defaultIndentUsingSpaces = val def fun_defaultLineEndings(self, value): """ The line endings used for new files. """ if value is None: current = iep.config.settings.defaultLineEndings return ['LF', 'CR', 'CRLF', current] else: # store iep.config.settings.defaultLineEndings = value def fun_autoComplete_case(self, value): """ Whether the autocompletion is case sensitive or not. """ if value is None: return bool(iep.config.settings.autoComplete_caseSensitive) else: value = not bool(iep.config.settings.autoComplete_caseSensitive) iep.config.settings.autoComplete_caseSensitive = value # Apply for e in iep.getAllScintillas(): e.SendScintilla(e.SCI_AUTOCSETIGNORECASE, not value) def fun_autoComplete_fillups(self, value): """ Selected autocomp item is inserted when typing these chars. """ if value is None: # Show options options = ['Tab', 'Tab and Enter', 'Tab, Enter and " .(["'] if '.' in iep.config.settings.autoComplete_fillups: options.append( options[2] ) elif '\n' in iep.config.settings.autoComplete_fillups: options.append( options[1] ) else: options.append( options[0] ) return options else: # Process selection if '.' in value: iep.config.settings.autoComplete_fillups = '\n .([' elif 'enter' in value.lower(): iep.config.settings.autoComplete_fillups = '\n' else: iep.config.settings.autoComplete_fillups = '' # Apply tmp = iep.config.settings.autoComplete_fillups for e in iep.getAllScintillas(): e.SendScintilla(e.SCI_AUTOCSETFILLUPS, tmp) ## Classes to enable editing the key mappings class KeyMapModel(QtCore.QAbstractItemModel): """ The model to view the structure of the menu and the shortcuts currently mapped. """ def __init__(self, *args): QtCore.QAbstractItemModel.__init__(self, *args) self._root = None def setRootMenu(self, menu): """ Call this after starting. """ self._root = menu def data(self, index, role): if not index.isValid() or role not in [0, 8]: return None # get menu or action item item = index.internalPointer() # get text and shortcuts key1, key2 = '', '' if isinstance(item, QtGui.QMenu): value = item.title() else: value = item.text() if not value: value = '-'*10 elif index.column()>0: key1, key2 = ' ', ' ' shortcuts = getShortcut(item) if shortcuts[0]: key1 = shortcuts[0] if shortcuts[1]: key2 = shortcuts[1] # translate to text for the user key1 = translateShortcutToOSNames(key1) key2 = translateShortcutToOSNames(key2) # obtain value value = [value,key1,key2, ''][index.column()] # return if role == 0: # display role return value elif role == 8: # 8: BackgroundRole if not value: return None elif index.column() == 1: return QtGui.QBrush(QtGui.QColor(200,220,240)) elif index.column() == 2: return QtGui.QBrush(QtGui.QColor(210,230,250)) else: return None else: return None def rowCount(self, parent): if parent.isValid(): menu = parent.internalPointer() return len(menu.actions()) else: return len(self._root.actions()) def columnCount(self, parent): return 4 def headerData(self, section, orientation, role): if role == 0:# and orientation==1: tmp = ['Menu action','Shortcut 1','Shortcut 2', ''] return tmp[section] def parent(self, index): if not index.isValid(): return QtCore.QModelIndex() item = index.internalPointer() pitem = item.parent() if pitem is self._root: return QtCore.QModelIndex() else: L = pitem.parent().actions() row = 0 if pitem in L: row = L.index(pitem) return self.createIndex(row, 0, pitem) def hasChildren(self, index): # no items have parents (except the root item) if index.row()<0: return True else: return isinstance(index.internalPointer(), QtGui.QMenu) def index(self, row, column, parent): # if not self.hasIndex(row, column, parent): # return QtCore.QModelIndex() # establish parent if not parent.isValid(): parentMenu = self._root else: parentMenu = parent.internalPointer() # produce index and make menu if the action represents a menu childAction = parentMenu.actions()[row] if childAction.menu(): childAction = childAction.menu() return self.createIndex(row, column, childAction) # This is the trick. The internal pointer is the way to establish # correspondence between ModelIndex and underlying data. # Key to string mappings k = QtCore.Qt keymap = {k.Key_Enter:'Enter', k.Key_Return:'Return', k.Key_Escape:'Escape', k.Key_Tab:'Tab', k.Key_Backspace:'Backspace', k.Key_Pause:'Pause', k.Key_Backtab: 'Tab', #Backtab is actually shift+tab k.Key_F1:'F1', k.Key_F2:'F2', k.Key_F3:'F3', k.Key_F4:'F4', k.Key_F5:'F5', k.Key_F6:'F6', k.Key_F7:'F7', k.Key_F8:'F8', k.Key_F9:'F9', k.Key_F10:'F10', k.Key_F11:'F11', k.Key_F12:'F12', k.Key_Space:'Space', k.Key_Delete:'Delete', k.Key_Insert:'Insert', k.Key_Home:'Home', k.Key_End:'End', k.Key_PageUp:'PageUp', k.Key_PageDown:'PageDown', k.Key_Left:'Left', k.Key_Up:'Up', k.Key_Right:'Right', k.Key_Down:'Down' } class KeyMapLineEdit(QtGui.QLineEdit): """ A modified version of a lineEdit object that catches the key event and displays "Ctrl" when control was pressed, and similarly for alt and shift, function keys and other keys. """ textUpdate = QtCore.Signal() def __init__(self, *args, **kwargs): QtGui.QLineEdit.__init__(self, *args, **kwargs) self.clear() # keep a list of native keys, so that we can capture for example # "shift+]". If we would use text(), we can only capture "shift+}" # which is not a valid shortcut. self._nativeKeys = {} # Override setText, text and clear, so as to be able to set shortcuts like # Ctrl+A, while the actually displayed value is an OS shortcut (e.g. on Mac # Cmd-symbol + A) def setText(self, text): QtGui.QLineEdit.setText(self, translateShortcutToOSNames(text)) self._shortcut = text def text(self): return self._shortcut def clear(self): QtGui.QLineEdit.setText(self, '') self._shortcut = '' def focusInEvent(self, event): #self.clear() QtGui.QLineEdit.focusInEvent(self, event) def event(self,event): # Override event handler to enable catching the Tab key # If the event is a KeyPress or KeyRelease, handle it with # self.keyPressEvent or keyReleaseEvent if event.type()==event.KeyPress: self.keyPressEvent(event) return True #Mark as handled if event.type()==event.KeyRelease: self.keyReleaseEvent(event) return True #Mark as handled #Default: handle events as usual return QtGui.QLineEdit.event(self,event) def keyPressEvent(self, event): # get key codes key = event.key() nativekey = event.nativeVirtualKey() # try to get text if nativekey < 128 and sys.platform != 'darwin': text = chr(nativekey).upper() elif key<128: text = chr(key).upper() else: text = '' # do we know this specic key or this native key? if key in keymap: text = keymap[key] elif nativekey in self._nativeKeys: text = self._nativeKeys[nativekey] # apply! if text: storeNativeKey, text0 = True, text if QtGui.qApp.keyboardModifiers() & k.AltModifier: text = 'Alt+' + text if QtGui.qApp.keyboardModifiers() & k.ShiftModifier: text = 'Shift+' + text storeNativeKey = False if QtGui.qApp.keyboardModifiers() & k.ControlModifier: text = 'Ctrl+' + text if QtGui.qApp.keyboardModifiers() & k.MetaModifier: text = 'Meta+' + text self.setText(text) if storeNativeKey and nativekey: # store native key if shift was not pressed. self._nativeKeys[nativekey] = text0 # notify listeners self.textUpdate.emit() class KeyMapEditDialog(QtGui.QDialog): """ The prompt that is shown when double clicking a keymap in the tree. It notifies the user when the entered shortcut is already used elsewhere and applies the shortcut (removing it elsewhere if required) when the apply button is pressed. """ def __init__(self, *args): QtGui.QDialog.__init__(self, *args) # set title self.setWindowTitle(translate("menu dialog", 'Edit shortcut mapping')) # set size size = 400,140 offset = 5 size2 = size[0], size[1]+offset self.resize(*size2) self.setMaximumSize(*size2) self.setMinimumSize(*size2) self._label = QtGui.QLabel("", self) self._label.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft) self._label.resize(size[0]-20, 100) self._label.move(10,2) self._line = KeyMapLineEdit('', self) self._line.resize(size[0]-80, 20) self._line.move(10,90) self._clear = QtGui.QPushButton("Clear", self) self._clear.resize(50, 20) self._clear.move(size[0]-60,90) self._apply = QtGui.QPushButton("Apply", self) self._apply.resize(50, 20) self._apply.move(size[0]-120,120) self._cancel = QtGui.QPushButton("Cancel", self) self._cancel.resize(50, 20) self._cancel.move(size[0]-60,120) # callbacks self._line.textUpdate.connect(self.onEdit) self._clear.clicked.connect(self.onClear) self._apply.clicked.connect(self.onAccept) self._cancel.clicked.connect(self.close) # stuff to fill in later self._fullname = '' self._intro = '' self._isprimary = True def setFullName(self, fullname, isprimary): """ To be called right after initialization to let the user know what he's updating, and show the current shortcut for that in the line edit. """ # store self._isprimary = isprimary self._fullname = fullname # create intro to show, and store + show it tmp = fullname.replace('__',' -> ').replace('_', ' ') primSec = ['secondary', 'primary'][int(isprimary)] self._intro = "Set the {} shortcut for:\n{}".format(primSec,tmp) self._label.setText(self._intro) # set initial value if fullname in iep.config.shortcuts2: current = iep.config.shortcuts2[fullname] if ',' not in current: current += ',' current = current.split(',') self._line.setText( current[0] if isprimary else current[1] ) def onClear(self): self._line.clear() self._line.setFocus() def onEdit(self): """ Test if already in use. """ # init shortcut = self._line.text() if not shortcut: self._label.setText(self._intro) return for key in iep.config.shortcuts2: # get shortcut and test whether it corresponds with what's pressed shortcuts = getShortcut(key) primSec = '' if shortcuts[0].lower() == shortcut.lower(): primSec = 'primary' elif shortcuts[1].lower() == shortcut.lower(): primSec = 'secondary' # if a correspondence, let the user know if primSec and key != self._fullname: tmp = "Warning: shortcut already in use for:\n" tmp += key.replace('__',' -> ').replace('_', ' ') self._label.setText(self._intro + '\n\n' + tmp + '\n') break else: self._label.setText(self._intro) def onAccept(self): shortcut = self._line.text() # remove shortcut if present elsewhere keys = [key for key in iep.config.shortcuts2] # copy for key in keys: # get shortcut, test whether it corresponds with what's pressed shortcuts = getShortcut(key) tmp = list(shortcuts) needUpdate = False if shortcuts[0].lower() == shortcut.lower(): tmp[0] = '' needUpdate = True if shortcuts[1].lower() == shortcut.lower(): tmp[1] = '' needUpdate = True if needUpdate: tmp = ','.join(tmp) tmp = tmp.replace(' ','') if len(tmp)==1: del iep.config.shortcuts2[key] else: iep.config.shortcuts2[key] = tmp # insert shortcut if self._fullname: # get current and make list of size two if self._fullname in iep.config.shortcuts2: current = list(getShortcut(self._fullname)) else: current = ['', ''] # update the list current[int(not self._isprimary)] = shortcut iep.config.shortcuts2[self._fullname] = ','.join(current) # close self.close() class KeymappingDialog(QtGui.QDialog): """ The main keymap dialog, it has tabs corresponding with the different menus and each tab has a tree representing the structure of these menus. The current shortcuts are displayed. On double clicking on an item, the shortcut can be edited. """ def __init__(self, *args): QtGui.QDialog.__init__(self, *args) # set title self.setWindowTitle(translate("menu dialog", 'Shortcut mappings')) # set size size = 600,400 offset = 0 size2 = size[0], size[1]+offset self.resize(*size2) self.setMaximumSize(*size2) self.setMinimumSize(* size2) self.tab = CompactTabWidget(self, padding=(4,4,6,6)) self.tab.resize(*size) self.tab.move(0,offset) self.tab.setMovable(False) # fill tab self._models = [] self._trees = [] for menu in iep.main.menuBar()._menus: # create treeview and model model = KeyMapModel() model.setRootMenu(menu) tree = QtGui.QTreeView(self.tab) tree.setModel(model) # configure treeview tree.clicked.connect(self.onClickSelect) tree.doubleClicked.connect(self.onDoubleClick) tree.setColumnWidth(0,150) # append to lists self._models.append(model) self._trees.append(tree) self.tab.addTab(tree, menu.title()) self.tab.currentChanged.connect(self.onTabSelect) def closeEvent(self, event): # update key setting iep.keyMapper.keyMappingChanged.emit() event.accept() def onTabSelect(self): pass def onClickSelect(self, index): # should we show a prompt? if index.column(): self.popupItem(index.internalPointer(), index.column()) def onDoubleClick(self, index): if not index.column(): self.popupItem(index.internalPointer()) def popupItem(self, item, shortCutId=1): """ Popup the dialog to change the shortcut. """ if isinstance(item, QtGui.QAction) and item.text(): # create prompt dialog dlg = KeyMapEditDialog(self) dlg.setFullName( item.menuPath, shortCutId==1 ) # show it dlg.exec_() iep-3.7/iep/iepcore/assistant.py0000664000175000017500000002134312573265542017160 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # Author: Windel Bouwman # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Tool that can view qt help files via the qthelp engine. Run make_docs.sh from: https://bitbucket.org/windel/qthelpdocs Copy the "docs" directory to the iep root! """ from pyzolib.qt import QtCore, QtGui from iep import getResourceDirs import os help_help = """

Documentation

Welcome to the IEP assistant. IEP uses the Qt Help system for documentation. This is also used by the Qt Assistant. You can use this viewer to view documentation provided by other projects.

Add documentation

To add documentation to IEP, go to the settings tab and select add. Then select a Qt Compressed Help file (*.qch). qch-files can be found in the Qt installation directory (for example in /usr/share/doc/qt under linux). For other projects you can download pre-build qch files from here: https://github.com/windelbouwman/qthelpdocs/releases.

Note When a documentation file is added, it is not copied into the iep settings dir, so you have to leave this file in place.

""" tool_name = "Assistant" tool_summary = "Browse qt help documents" class Settings(QtGui.QWidget): def __init__(self, engine): super().__init__() self._engine = engine layout = QtGui.QVBoxLayout(self) add_button = QtGui.QPushButton("Add") del_button = QtGui.QPushButton("Delete") self._view = QtGui.QListView() layout.addWidget(self._view) layout2 = QtGui.QHBoxLayout() layout2.addWidget(add_button) layout2.addWidget(del_button) layout.addLayout(layout2) self._model = QtGui.QStringListModel() self._view.setModel(self._model) self._model.setStringList(self._engine.registeredDocumentations()) add_button.clicked.connect(self.add_doc) del_button.clicked.connect(self.del_doc) def add_doc(self): doc_file = QtGui.QFileDialog.getOpenFileName( self, "Select a compressed help file", filter="Qt compressed help files (*.qch)") if isinstance(doc_file, tuple): doc = doc[0] self.add_doc_do(doc_file) def add_doc_do(self, doc_file): ok = self._engine.registerDocumentation(doc_file) if ok: self._model.setStringList(self._engine.registeredDocumentations()) else: QtGui.QMessageBox.critical(self, "Error", "Error loading doc") def del_doc(self): idx = self._view.currentIndex() if idx.isValid(): doc_file = self._model.data(idx, QtCore.Qt.DisplayRole) self.del_doc_do(doc_file) def del_doc_do(self, doc_file): self._engine.unregisterDocumentation(doc_file) self._model.setStringList(self._engine.registeredDocumentations()) class HelpBrowser(QtGui.QTextBrowser): """ Override textbrowser to implement load resource """ def __init__(self, engine): super().__init__() self._engine = engine # Override default navigation behavior: self.anchorClicked.connect(self.handle_url) self.setOpenLinks(False) def handle_url(self, url): """ Open external urls not in this viewer """ if url.scheme() in ['http', 'https']: QtGui.QDesktopServices.openUrl(url) else: self.setSource(url) def loadResource(self, typ, url): if url.scheme() == "qthelp": return self._engine.fileData(url) else: return super().loadResource(typ, url) class IepAssistant(QtGui.QWidget): """ Show help contents and browse qt help files. """ def __init__(self, parent=None, collection_filename=None): """ Initializes an assistance instance. When collection_file is none, it is determined from the appDataDir. """ from pyzolib.qt import QtHelp super().__init__(parent) self.setWindowTitle('Help') iepDir, appDataDir = getResourceDirs() if collection_filename is None: # Collection file is stored in iep data dir: collection_filename = os.path.join(appDataDir, 'tools', 'docs.qhc') self._engine = QtHelp.QHelpEngine(collection_filename) # Important, call setup data to load the files: self._engine.setupData() # If no files are loaded, register at least the iep docs: if len(self._engine.registeredDocumentations()) == 0: doc_file = os.path.join(iepDir, 'resources', 'iep.qch') ok = self._engine.registerDocumentation(doc_file) # The main players: self._content = self._engine.contentWidget() self._index = self._engine.indexWidget() self._indexTab = QtGui.QWidget() il = QtGui.QVBoxLayout(self._indexTab) filter_text = QtGui.QLineEdit() il.addWidget(filter_text) il.addWidget(self._index) self._helpBrowser = HelpBrowser(self._engine) self._searchEngine = self._engine.searchEngine() self._settings = Settings(self._engine) self._progress = QtGui.QWidget() pl = QtGui.QHBoxLayout(self._progress) bar = QtGui.QProgressBar() bar.setMaximum(0) pl.addWidget(QtGui.QLabel('Indexing')) pl.addWidget(bar) self._searchResultWidget = self._searchEngine.resultWidget() self._searchQueryWidget = self._searchEngine.queryWidget() self._searchTab = QtGui.QWidget() search_layout = QtGui.QVBoxLayout(self._searchTab) search_layout.addWidget(self._searchQueryWidget) search_layout.addWidget(self._searchResultWidget) tab = QtGui.QTabWidget() tab.addTab(self._content, "Contents") tab.addTab(self._indexTab, "Index") tab.addTab(self._searchTab, "Search") tab.addTab(self._settings, "Settings") splitter = QtGui.QSplitter(self) splitter.addWidget(tab) splitter.addWidget(self._helpBrowser) layout = QtGui.QVBoxLayout(self) layout.addWidget(splitter) layout.addWidget(self._progress) # Connect clicks: self._content.linkActivated.connect(self._helpBrowser.setSource) self._index.linkActivated.connect(self._helpBrowser.setSource) self._searchEngine.searchingFinished.connect(self.onSearchFinish) self._searchEngine.indexingStarted.connect(self.onIndexingStarted) self._searchEngine.indexingFinished.connect(self.onIndexingFinished) filter_text.textChanged.connect(self._index.filterIndices) self._searchResultWidget.requestShowLink.connect(self._helpBrowser.setSource) self._searchQueryWidget.search.connect(self.goSearch) # Always re-index on startup: self._searchEngine.reindexDocumentation() self._search_term = None # Show initial page: # self.showHelpForTerm('welcome to iep') self._helpBrowser.setHtml(help_help) def goSearch(self): query = self._searchQueryWidget.query() self._searchEngine.search(query) def onIndexingStarted(self): self._progress.show() def onIndexingFinished(self): self._progress.hide() def find_best_page(self, hits): if self._search_term is None: url, _ = hits[0] return url try: # Try to find max with fuzzy wuzzy: from fuzzywuzzy import fuzz url, title = max(hits, key=lambda hit: fuzz.ratio(hit[1], self._search_term)) return url except ImportError: pass # Find exact page title: for url2, page_title in hits: if page_title == self._search_term: url = url2 return url for url2, page_title in hits: if self._search_term in page_title: url = url2 return url # Pick first hit: url, _ = hits[0] return url def onSearchFinish(self, hits): if hits == 0: return hits = self._searchEngine.hits(0, hits) if not hits: return url = self.find_best_page(hits) self._helpBrowser.setSource(QtCore.QUrl(url)) def showHelpForTerm(self, name): from pyzolib.qt import QtHelp # Cache for later use: self._search_term = name # Create a query: query = QtHelp.QHelpSearchQuery(QtHelp.QHelpSearchQuery.DEFAULT, [name]) self._searchEngine.search([query]) if __name__ == '__main__': app = QtGui.QApplication([]) view = IepAssistant() view.show() app.exec() iep-3.7/iep/iepcore/compactTabWidget.py0000664000175000017500000003550712271043444020365 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ compact tab widget class See docs of the tab widget. """ from pyzolib.qt import QtCore, QtGui import sys if sys.version_info[0] < 3: str = unicode ELLIPSIS = unichr(8230) else: ELLIPSIS = chr(8230) # Constants for the alignments of tabs MIN_NAME_WIDTH = 4 MAX_NAME_WIDTH = 64 ## Define style sheet for the tabs STYLESHEET = """ QTabWidget::pane { /* The tab widget frame */ border-top: 0px solid #A09B90; } QTabWidget::tab-bar { left: 0px; /* move to the right by x px */ } /* Style the tab using the tab sub-control. Note that it reads QTabBar _not_ QTabWidget */ QTabBar::tab { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 rgba(220,220,220,128), stop: 0.4 rgba(200,200,200,128), stop: 1.0 rgba(100,100,100,128) ); border: 1px solid #A09B90; border-bottom-color: #DAD5CC; /* same as the pane color */ border-top-left-radius: 4px; border-top-right-radius: 4px; min-width: 5ex; padding-bottom: PADDING_BOTTOMpx; padding-top: PADDING_TOPpx; padding-left: PADDING_LEFTpx; padding-right: PADDING_RIGHTpx; margin-right: -1px; /* "combine" borders */ } QTabBar::tab:last { margin-right: 0px; } /* Style the selected tab, hoovered tab, and other tabs. */ QTabBar::tab:hover { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 rgba(245,250,255,128), stop: 0.4 rgba(210,210,210,128), stop: 1.0 rgba(200,200,200,128) ); } QTabBar::tab:selected { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0.0 rgba(0,0,128,128), stop: 0.12 rgba(0,0,128,128), stop: 0.120001 rgba(245,250,255,128), stop: 0.4 rgba(210,210,210,128), stop: 1.0 rgba(200,200,200,128) ); } QTabBar::tab:selected { border-width: 1px; border-bottom-width: 0px; border-top-left-radius: 5px; border-top-right-radius: 5px; border-color: #333; } QTabBar::tab:!selected { margin-top: 3px; /* make non-selected tabs look smaller */ } """ ## Define tab widget class class TabData: """ To keep track of real names of the tabs, but also keep supporting tabData. """ def __init__(self, name): self.name = name self.data = None class CompactTabBar(QtGui.QTabBar): """ CompactTabBar(parent, *args, padding=(4,4,6,6), preventEqualTexts=True) Tab bar corresponcing to the CompactTabWidget. With the "padding" argument the padding of the tabs can be chosen. It should be an integer, or a 4 element tuple specifying the padding for top, bottom, left, right. When a tab has a button, the padding is the space between button and text. With preventEqualTexts to True, will reduce the amount of eliding if two tabs have (partly) the same name, so that they can always be distinguished. """ # Add signal to be notified of double clicks on tabs tabDoubleClicked = QtCore.Signal(int) barDoubleClicked = QtCore.Signal() def __init__(self, *args, padding=(4,4,6,6), preventEqualTexts=True): QtGui.QTabBar.__init__(self, *args) # Put tab widget in document mode self.setDocumentMode(True) # Widget needs to draw its background (otherwise Mac has a dark bg) self.setDrawBase(False) if sys.platform == 'darwin': self.setAutoFillBackground(True) # Set whether we want to prevent eliding for names that start the same. self._preventEqualTexts = preventEqualTexts # Allow moving tabs around self.setMovable(True) # Get padding if isinstance(padding, (int, float)): padding = padding, padding, padding, padding elif isinstance(padding, (tuple, list)): pass else: raise ValueError('Invalid value for padding.') # Set style sheet stylesheet = STYLESHEET stylesheet = stylesheet.replace('PADDING_TOP', str(padding[0])) stylesheet = stylesheet.replace('PADDING_BOTTOM', str(padding[1])) stylesheet = stylesheet.replace('PADDING_LEFT', str(padding[2])) stylesheet = stylesheet.replace('PADDING_RIGHT', str(padding[3])) self.setStyleSheet(stylesheet) # We do our own eliding self.setElideMode(QtCore.Qt.ElideNone) # Make tabs wider if there's plenty space? self.setExpanding(False) # If there's not enough space, use scroll buttons self.setUsesScrollButtons(True) # When a tab is removed, select previous self.setSelectionBehaviorOnRemove(self.SelectPreviousTab) # Init alignment parameters self._alignWidth = MIN_NAME_WIDTH # Width in characters self._alignWidthIsReducing = False # Whether in process of reducing # Create timer for aligning self._alignTimer = QtCore.QTimer(self) self._alignTimer.setInterval(10) self._alignTimer.setSingleShot(True) self._alignTimer.timeout.connect(self._alignRecursive) def _compactTabBarData(self, i): """ _compactTabBarData(i) Get the underlying tab data for tab i. Only for internal use. """ # Get current TabData instance tabData = QtGui.QTabBar.tabData(self, i) if (tabData is not None) and hasattr(tabData, 'toPyObject'): tabData = tabData.toPyObject() # Older version of Qt # If none, make it as good as we can if not tabData: name = str(QtGui.QTabBar.tabText(self, i)) tabData = TabData( name ) QtGui.QTabBar.setTabData(self, i, tabData) # Done return tabData ## Overload a few methods def mouseDoubleClickEvent(self, event): i = self.tabAt(event.pos()) if i == -1: # There was no tab under the cursor self.barDoubleClicked.emit() else: # Tab was double clicked self.tabDoubleClicked.emit(i) def setTabData(self, i, data): """ setTabData(i, data) Set the given object at the tab with index 1. """ # Get underlying python instance tabData = self._compactTabBarData(i) # Attach given data tabData.data = data def tabData(self, i): """ tabData(i) Get the tab data at item i. Always returns a Python object. """ # Get underlying python instance tabData = self._compactTabBarData(i) # Return stored data return tabData.data def setTabText(self, i, text): """ setTabText(i, text) Set the text for tab i. """ tabData = self._compactTabBarData(i) if text != tabData.name: tabData.name = text self.alignTabs() def tabText(self, i): """ tabText(i) Get the title of the tab at index i. """ tabData = self._compactTabBarData(i) return tabData.name ## Overload events and protected functions def tabInserted(self, i): QtGui.QTabBar.tabInserted(self, i) # Is called when a tab is inserted # Get given name and store name = str(QtGui.QTabBar.tabText(self, i)) tabData = TabData(name) QtGui.QTabBar.setTabData(self, i, tabData) # Update self.alignTabs() def tabRemoved(self, i): QtGui.QTabBar.tabRemoved(self, i) # Update self.alignTabs() def resizeEvent(self, event): QtGui.QTabBar.resizeEvent(self, event) self.alignTabs() def showEvent(self, event): QtGui.QTabBar.showEvent(self, event) self.alignTabs() ## For aligning def alignTabs(self): """ alignTabs() Align the tab items. Their names are ellided if required so that all tabs fit on the tab bar if possible. When there is too little space, the QTabBar will kick in and draw scroll arrows. """ # Set name widths correct (in case new names were added) self._setMaxWidthOfAllItems() # Start alignment process self._alignWidthIsReducing = False self._alignTimer.start() def _alignRecursive(self): """ _alignRecursive() Recursive alignment of the items. The alignment process should be initiated from alignTabs(). """ # Only if visible if not self.isVisible(): return # Get tab bar and number of items N = self.count() # Get right edge of last tab and left edge of corner widget pos1 = self.tabRect(0).topLeft() pos2 = self.tabRect(N-1).topRight() cornerWidget = self.parent().cornerWidget() if cornerWidget: pos3 = cornerWidget.pos() else: pos3 = QtCore.QPoint(self.width(), 0) x1 = pos1.x() x2 = pos2.x() x3 = pos3.x() alignMargin = x3 - (x2-x1) -3 # Must be positive (has margin) # Are the tabs too wide? if alignMargin < 0: # Tabs extend beyond corner widget # Reduce width then self._alignWidth -= 1 self._alignWidth = max(self._alignWidth, MIN_NAME_WIDTH) # Apply self._setMaxWidthOfAllItems() self._alignWidthIsReducing = True # Try again if there's still room for reduction if self._alignWidth > MIN_NAME_WIDTH: self._alignTimer.start() elif alignMargin > 10 and not self._alignWidthIsReducing: # Gap between tabs and corner widget is a bit large # Increase width then self._alignWidth += 1 self._alignWidth = min(self._alignWidth, MAX_NAME_WIDTH) # Apply itemsElided = self._setMaxWidthOfAllItems() # Try again if there's still room for increment if itemsElided and self._alignWidth < MAX_NAME_WIDTH: self._alignTimer.start() #self._alignTimer.timeout.emit() else: pass # margin is good def _getAllNames(self): """ _getAllNames() Get a list of all (full) tab names. """ return [self._compactTabBarData(i).name for i in range(self.count())] def _setMaxWidthOfAllItems(self): """ _setMaxWidthOfAllItems() Sets the maximum width of all items now, by eliding the names. Returns whether any items were elided. """ # Prepare for measuring font sizes font = self.font() metrics = QtGui.QFontMetrics(font) # Get whether an item was reduced in size itemReduced = False for i in range(self.count()): # Get width w = self._alignWidth # Get name name = name0 = self._compactTabBarData(i).name # Check if we can reduce the name size, correct w if necessary if ( (w+1) < len(name0) ) and self._preventEqualTexts: # Increase w untill there are no names that start the same allNames = self._getAllNames() hasSimilarNames = True diff = 2 w -= 1 while hasSimilarNames and w < len(name0): w += 1 w2 = w - (diff-1) shortName = name[:w2] similarnames = [n for n in allNames if n[:w2]==shortName] hasSimilarNames = len(similarnames)>1 # Check again, with corrected w if (w+1) < len(name0): name = name[:w] + ELLIPSIS itemReduced = True # Set text now QtGui.QTabBar.setTabText(self, i, name) # Done return itemReduced class CompactTabWidget(QtGui.QTabWidget): """ CompactTabWidget(parent, *args, **kwargs) Implements a tab widget with a tabbar that is in document mode and has more compact tabs that conventional tab widgets, so more items fit on the same space. Further much care is taken to ellide the names in a smart way: * All items are allowed the same amount of characters instead of that the same amount of characters is removed from all names. * If there are two item with the same beginning, it is made sure that enough characters are shown such that the names can be distinguished. The kwargs are passed to the tab bar constructor. There are a few keywords arguments to influence the appearance of the tabs. See the CompactTabBar class. """ def __init__(self, *args, **kwargs): QtGui.QTabWidget.__init__(self, *args) # Set tab bar self.setTabBar(CompactTabBar(self, **kwargs)) # Draw tabs at the top by default self.setTabPosition(QtGui.QTabWidget.North) def setTabData(self, i, data): """ setTabData(i, data) Set the given object at the tab with index 1. """ self.tabBar().setTabData(i, data) def tabData(self, i): """ tabData(i) Get the tab data at item i. Always returns a Python object. """ return self.tabBar().tabData(i) def setTabText(self, i, text): """ setTabText(i, text) Set the text for tab i. """ self.tabBar().setTabText(i, text) def tabText(self, i): """ tabText(i) Get the title of the tab at index i. """ return self.tabBar().tabText(i) if __name__ == '__main__': w = CompactTabWidget() w.show() w.addTab(QtGui.QWidget(w), 'aapenootjedopje') w.addTab(QtGui.QWidget(w), 'aapenootjedropje') w.addTab( QtGui.QWidget(w), 'noot en mies') w.addTab( QtGui.QWidget(w), 'boom bijv een iep') w.addTab( QtGui.QWidget(w), 'roosemarijnus') w.addTab( QtGui.QWidget(w), 'vis') w.addTab( QtGui.QWidget(w), 'vuurvuurvuur') iep-3.7/iep/iepcore/editor.py0000664000175000017500000006016112467107401016425 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module editor Defines the IepEditor class which is used to edit documents. This module/class also implements all the relatively low level file loading/saving /reloading stuff. """ import os, sys import re, codecs from pyzolib.qt import QtCore, QtGui qt = QtGui from iep.codeeditor import Manager from iep.iepcore.menu import EditorContextMenu from iep.iepcore.baseTextCtrl import BaseTextCtrl, normalizePath from iep.iepcore.iepLogging import print import iep # Set default line ending (if not set) if not iep.config.settings.defaultLineEndings: if sys.platform.startswith('win'): iep.config.settings.defaultLineEndings = 'CRLF' else: iep.config.settings.defaultLineEndings = 'LF' def determineEncoding(bb): """ Get the encoding used to encode a file. Accepts the bytes of the file. Returns the codec name. If the codec could not be determined, uses UTF-8. """ # Init firstTwoLines = bb.split(b'\n', 2)[:2] encoding = 'UTF-8' for line in firstTwoLines: # Try to make line a string try: line = line.decode('ASCII').strip() except Exception: continue # Has comment? if line and line[0] == '#': # Matches regular expression given in PEP 0263? expression = "coding[:=]\s*([-\w.]+)" result = re.search(expression, line) if result: # Is it a known encoding? Correct name if it is candidate_encoding = result.group(1) try: c = codecs.lookup(candidate_encoding) candidate_encoding = c.name except Exception: pass else: encoding = candidate_encoding # Done return encoding def determineLineEnding(text): """ Get the line ending style used in the text. \n, \r, \r\n, The EOLmode is determined by counting the occurrences of each line ending... """ # test line ending by counting the occurrence of each c_win = text.count("\r\n") c_mac = text.count("\r") - c_win c_lin = text.count("\n") - c_win # set the appropriate style if c_win > c_mac and c_win > c_lin: mode = '\r\n' elif c_mac > c_win and c_mac > c_lin: mode = '\r' else: mode = '\n' # return return mode def determineIndentation(text): """ Get the indentation used in this document. The text is analyzed to find the most used indentations. The result is -1 if tab indents are most common. A positive result means spaces are used; the amount signifies the amount of spaces per indentation. 0 is returned if the indentation could not be determined. """ # create dictionary of indents, -1 means a tab indents = {} indents[-1] = 0 lines = text.splitlines() lines.insert(0,"") # so the lines start at 1 for i in range( len(lines) ): line = lines[i] linelen = len(line) # remove indentation tmp = line.lstrip() indent = len(line) - len(tmp) line = tmp.rstrip() if line.startswith('#'): continue else: # remove everything after the # line = line.split("#",1)[0].rstrip() if not line: # continue of no line left continue # a colon means there will be an indent # check the next line (or the one thereafter) # and calculate the indentation difference with THIS line. if line.endswith(":"): if len(lines) > i+2: line2 = lines[i+1] tmp = line2.lstrip() if not tmp: line2 = lines[i+2] tmp = line2.lstrip() if tmp: ind2 = len(line2)-len(tmp) ind3 = ind2 - indent if line2.startswith("\t"): indents[-1] += 1 elif ind3>0: if not ind3 in indents: indents[ind3] = 1 indents[ind3] += 1 # find which was the most common tab width. indent, maxvotes = 0,0 for nspaces in indents: if indents[nspaces] > maxvotes: indent, maxvotes = nspaces, indents[nspaces] #print "found tabwidth %i" % indent return indent # To give each new file a unique name newFileCounter = 0 def createEditor(parent, filename=None): """ Tries to load the file given by the filename and if succesful, creates an editor instance to put it in, which is returned. If filename is None, an new/unsaved/temp file is created. """ if filename is None: # Increase counter global newFileCounter newFileCounter += 1 # Create editor editor = IepEditor(parent) editor.document().setModified(True) # Set name editor._name = "".format(newFileCounter) else: # check and normalize if not os.path.isfile(filename): raise IOError("File does not exist '%s'." % filename) # load file (as bytes) with open(filename, 'rb') as f: bb = f.read() f.close() # convert to text, be gentle with files not encoded with utf-8 encoding = determineEncoding(bb) text = bb.decode(encoding,'replace') # process line endings lineEndings = determineLineEnding(text) # if we got here safely ... # create editor and set text editor = IepEditor(parent) editor.setPlainText(text) editor.lineEndings = lineEndings editor.encoding = encoding editor.document().setModified(False) # store name and filename editor._filename = filename editor._name = os.path.split(filename)[1] # process indentation indentWidth = determineIndentation(text) if indentWidth == -1: #Tabs editor.setIndentWidth(iep.config.settings.defaultIndentWidth) editor.setIndentUsingSpaces(False) elif indentWidth: editor.setIndentWidth(indentWidth) editor.setIndentUsingSpaces(True) if editor._filename: editor._modifyTime = os.path.getmtime(editor._filename) # Set parser if editor._filename: ext = os.path.splitext(editor._filename)[1] parser = Manager.suggestParserfromFilenameExtension(ext) editor.setParser(parser) else: # todo: rename style -> parser editor.setParser(iep.config.settings.defaultStyle) # return return editor class IepEditor(BaseTextCtrl): # called when dirty changed or filename changed, etc somethingChanged = QtCore.Signal() def __init__(self, parent, **kwds): super().__init__(parent, showLineNumbers = True, **kwds) # Init filename and name self._filename = '' self._name = '' # View settings self.setShowWhitespace(iep.config.view.showWhitespace) #TODO: self.setViewWrapSymbols(view.showWrapSymbols) self.setShowLineEndings(iep.config.view.showLineEndings) self.setShowIndentationGuides(iep.config.view.showIndentationGuides) # self.setWrap(bool(iep.config.view.wrap)) self.setHighlightCurrentLine(iep.config.view.highlightCurrentLine) self.setLongLineIndicatorPosition(iep.config.view.edgeColumn) #TODO: self.setFolding( int(view.codeFolding)*5 ) # bracematch is set in baseTextCtrl, since it also applies to shells # dito for zoom and tabWidth # Set line endings to default self.lineEndings = iep.config.settings.defaultLineEndings # Set encoding to default self.encoding = 'UTF-8' # Modification time to test file change self._modifyTime = 0 self.modificationChanged.connect(self._onModificationChanged) # To see whether the doc has changed to update the parser. self.textChanged.connect(self._onModified) # This timer is used to hide the marker that shows which code is executed self._showRunCursorTimer = QtCore.QTimer() # Add context menu (the offset is to prevent accidental auto-clicking) self._menu = EditorContextMenu(self) self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect(lambda p: self._menu.popup(self.mapToGlobal(p)+QtCore.QPoint(0,3))) ## Properties @property def name(self): return self._name @property def filename(self): return self._filename @property def lineEndings(self): """ Line-endings style of this file. Setter accepts machine-readable (e.g. '\r') and human-readable (e.g. 'CR') input """ return self._lineEndings @lineEndings.setter def lineEndings(self,value): if value in ('\r','\n','\r\n'): self._lineEndings = value return try: self._lineEndings = {'CR': '\r', 'LF': '\n', 'CRLF': '\r\n'}[value] except KeyError: raise ValueError('Invalid line endings style %r' % value) @property def lineEndingsHumanReadable(self): """ Current line-endings style, human readable (e.g. 'CR') """ return {'\r': 'CR', '\n': 'LF', '\r\n': 'CRLF'}[self.lineEndings] @property def encoding(self): """ Encoding used to convert the text of this file to bytes. """ return self._encoding @encoding.setter def encoding(self, value): # Test given value, correct name if it exists try: c = codecs.lookup(value) value = c.name except Exception: value = codecs.lookup('UTF-8').name # Store self._encoding = value ## def justifyText(self): """ Overloaded version of justifyText to make it use our configurable justificationwidth. """ super().justifyText(iep.config.settings.justificationWidth) def showRunCursor(self, cursor): """ Momentarily highlight a piece of code to show that this is being executed """ extraSelection = QtGui.QTextEdit.ExtraSelection() extraSelection.cursor = cursor extraSelection.format.setBackground(QtCore.Qt.gray) self.setExtraSelections([extraSelection]) self._showRunCursorTimer.singleShot(200, lambda: self.setExtraSelections([])) def id(self): """ Get an id of this editor. This is the filename, or for tmp files, the name. """ if self._filename: return self._filename else: return self._name def focusInEvent(self, event): """ Test whether the file has been changed 'behind our back' """ # Act normally to the focus event BaseTextCtrl.focusInEvent(self, event) # Test file change self.testWhetherFileWasChanged() def testWhetherFileWasChanged(self): """ testWhetherFileWasChanged() Test to see whether the file was changed outside our backs, and let the user decide what to do. Returns True if it was changed. """ # get the path path = self._filename if not os.path.isfile(path): # file is deleted from the outside return # test the modification time... mtime = os.path.getmtime(path) if mtime != self._modifyTime: # ask user dlg = QtGui.QMessageBox(self) dlg.setWindowTitle('File was changed') dlg.setText("File has been modified outside of the editor:\n"+ self._filename) dlg.setInformativeText("Do you want to reload?") t=dlg.addButton("Reload", QtGui.QMessageBox.AcceptRole) #0 dlg.addButton("Keep this version", QtGui.QMessageBox.RejectRole) #1 dlg.setDefaultButton(t) # whatever the result, we will reset the modified time self._modifyTime = os.path.getmtime(path) # get result and act result = dlg.exec_() if result == QtGui.QMessageBox.AcceptRole: self.reload() else: pass # when cancelled or explicitly said, do nothing # Return that indeed the file was changes return True def _onModificationChanged(self,changed): """Handler for the modificationChanged signal. Emit somethingChanged for the editorStack to update the modification notice.""" self.somethingChanged.emit() def _onModified(self): iep.parser.parseThis(self) def dragMoveEvent(self, event): """ Otherwise cursor can get stuck. https://bitbucket.org/iep-project/iep/issue/252 https://qt-project.org/forums/viewthread/3180 """ if event.mimeData().hasUrls(): event.acceptProposedAction() else: BaseTextCtrl.dropEvent(self, event) def dropEvent(self, event): """ Drop files in the list. """ if event.mimeData().hasUrls(): # file: let the editorstack do the work. iep.editors.dropEvent(event) else: # text: act normal BaseTextCtrl.dropEvent(self, event) def showEvent(self, event=None): """ Capture show event to change title. """ # Act normally if event: BaseTextCtrl.showEvent(self, event) # Make parser update iep.parser.parseThis(self) def setTitleInMainWindow(self): """ set the title text in the main window to show filename. """ # compose title name, path = self._name, self._filename if path: iep.main.setMainTitle(path) else: iep.main.setMainTitle(name) def save(self, filename=None): """ Save the file. No checking is done. """ # get filename if filename is None: filename = self._filename if not filename: raise ValueError("No filename specified, and no filename known.") # Test whether it was changed without us knowing. If so, dont save now. if self.testWhetherFileWasChanged(): return # Get text and remember where we are text = self.toPlainText() cursor = self.textCursor() linenr = cursor.blockNumber() + 1 index = cursor.positionInBlock() scroll = self.verticalScrollBar().value() # Convert line endings (optionally remove trailing whitespace if iep.config.settings.removeTrailingWhitespaceWhenSaving: lines = [line.rstrip() for line in text.split('\n')] if lines[-1]: lines.append('') # Ensure the file ends in an empty line text = self.lineEndings.join(lines) self.setPlainText(text) # Go back to where we were cursor = self.textCursor() cursor.movePosition(cursor.Start) # move to begin of the document cursor.movePosition(cursor.NextBlock,n=linenr-1) # n blocks down index = min(index, cursor.block().length()-1) cursor.movePosition(cursor.Right,n=index) # n chars right self.setTextCursor(cursor) self.verticalScrollBar().setValue(scroll) else: text = text.replace('\n', self.lineEndings) # Make bytes bb = text.encode(self.encoding) # Store f = open(filename, 'wb') try: f.write(bb) finally: f.close() # Update stats self._filename = normalizePath( filename ) self._name = os.path.split(self._filename)[1] self.document().setModified(False) self._modifyTime = os.path.getmtime(self._filename) # update title (in case of a rename) self.setTitleInMainWindow() # allow item to update its texts (no need: onModifiedChanged does this) #self.somethingChanged.emit() def reload(self): """ Reload text using the self._filename. We do not have a load method; we first try to load the file and only when we succeed create an editor to show it in... This method is only for reloading in case the file was changed outside of the editor. """ # We can only load if the filename is known if not self._filename: return filename = self._filename # Remember where we are cursor = self.textCursor() linenr = cursor.blockNumber() + 1 index = cursor.positionInBlock() # Load file (as bytes) with open(filename, 'rb') as f: bb = f.read() # Convert to text text = bb.decode('UTF-8') # Process line endings (before setting the text) self.lineEndings= determineLineEnding(text) # Set text self.setPlainText(text) self.document().setModified(False) # Go where we were (approximately) self.gotoLine(linenr) def deleteLines(self): cursor = self.textCursor() # Find start and end of selection start = cursor.selectionStart() end = cursor.selectionEnd() # Expand selection: from start of first block to start of next block cursor.setPosition(start) cursor.movePosition(cursor.StartOfBlock) cursor.setPosition(end, cursor.KeepAnchor) cursor.movePosition(cursor.NextBlock, cursor.KeepAnchor) cursor.removeSelectedText() def commentCode(self): """ Comment the lines that are currently selected """ indents = [] def getIndent(cursor): text = cursor.block().text().rstrip() if text: indents.append(len(text) - len(text.lstrip())) def commentBlock(cursor): cursor.setPosition(cursor.block().position() + minindent) cursor.insertText('# ') self.doForSelectedBlocks(getIndent) minindent = min(indents) if indents else 0 self.doForSelectedBlocks(commentBlock) def uncommentCode(self): """ Uncomment the lines that are currently selected """ #TODO: this should not be applied to lines that are part of a multi-line string #Define the uncomment function to be applied to all blocks def uncommentBlock(cursor): """ Find the first # on the line; if there is just whitespace before it, remove the # and if it is followed by a space remove the space, too """ text = cursor.block().text() commentStart = text.find('#') if commentStart == -1: return #No comment on this line if text[:commentStart].strip() != '': return #Text before the # #Move the cursor to the beginning of the comment cursor.setPosition(cursor.block().position() + commentStart) cursor.deleteChar() if text[commentStart:].startswith('# '): cursor.deleteChar() #Apply this function to all blocks self.doForSelectedBlocks(uncommentBlock) # def gotoDef(self): """ Goto the definition for the word under the cursor """ # Get name of object to go to cursor = self.textCursor() if not cursor.hasSelection(): cursor.select(cursor.WordUnderCursor) word = cursor.selection().toPlainText() # Send the open command to the shell s = iep.shells.getCurrentShell() if s is not None: if word and word.isidentifier(): s.executeCommand('open %s\n'%word) else: s.write('Invalid identifier %r\n' % word) ## Introspection processing methods def processCallTip(self, cto): """ Processes a calltip request using a CallTipObject instance. """ # Try using buffer first if cto.tryUsingBuffer(): return # Try obtaining calltip from the source sig = iep.parser.getFictiveSignature(cto.name, self, True) if sig: # Done cto.finish(sig) else: # Try the shell shell = iep.shells.getCurrentShell() if shell: shell.processCallTip(cto) def processAutoComp(self, aco): """ Processes an autocomp request using an AutoCompObject instance. """ # Try using buffer first if aco.tryUsingBuffer(): return # Init name to poll by remote process (can be changed!) nameForShell = aco.name # Get normal fictive namespace fictiveNS = iep.parser.getFictiveNameSpace(self) fictiveNS = set(fictiveNS) # Add names if not aco.name: # "root" names aco.addNames(fictiveNS) # imports importNames, importLines = iep.parser.getFictiveImports(self) aco.addNames(importNames) else: # Prepare list of class names to check out classNames = [aco.name] handleSelf = True # Unroll supers while classNames: className = classNames.pop(0) if not className: continue if handleSelf or (className in fictiveNS): # Only the self list (only first iter) fictiveClass = iep.parser.getFictiveClass( className, self, handleSelf) handleSelf = False if fictiveClass: aco.addNames( fictiveClass.members ) classNames.extend(fictiveClass.supers) else: nameForShell = className break # If there's a shell, let it finish the autocompletion shell = iep.shells.getCurrentShell() if shell: aco.name = nameForShell # might be the same or a base class shell.processAutoComp(aco) else: # Otherwise we finish it ourselves aco.finish() if __name__=="__main__": # Do some stubbing to run this module as a unit separate from iep # TODO: untangle iep from this module where possible class DummyParser: def parseThis(self, x): pass iep.parser = DummyParser() EditorContextMenu = QtGui.QMenu app = QtGui.QApplication([]) win = IepEditor(None) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), win).activated.connect(win.copy) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+X"), win).activated.connect(win.cut) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+V"), win).activated.connect(win.paste) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Shift+V"), win).activated.connect(win.pasteAndSelect) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Z"), win).activated.connect(win.undo) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Y"), win).activated.connect(win.redo) tmp = "foo(bar)\nfor bar in range(5):\n print bar\n" tmp += "\nclass aap:\n def monkey(self):\n pass\n\n" win.setPlainText(tmp) win.show() app.exec_() iep-3.7/iep/iepcore/about.py0000664000175000017500000001241712312661231016245 0ustar almaralmar00000000000000 import os import sys import pyzolib from pyzolib import paths from pyzolib.qt import QtCore, QtGui import iep class AboutDialog(QtGui.QDialog): def __init__(self, parent): QtGui.QDialog.__init__(self, parent) self.setWindowTitle(iep.translate("menu dialog", "About IEP")) self.resize(600,500) # Layout layout = QtGui.QVBoxLayout(self) self.setLayout(layout) # Create image and title im = QtGui.QPixmap( os.path.join(iep.iepDir, 'resources', 'appicons', 'ieplogo64.png') ) imlabel = QtGui.QLabel(self) imlabel.setPixmap(im) textlabel = QtGui.QLabel(self) textlabel.setText('

IEP: the Interactive Editor for Python

') # titleLayout = QtGui.QHBoxLayout() titleLayout.addWidget(imlabel, 0) titleLayout.addWidget(textlabel, 1) # layout.addLayout(titleLayout, 0) # Create tab bar self._tabs = QtGui.QTabWidget(self) self._tabs.setDocumentMode(True) layout.addWidget(self._tabs, 1) # Create button box self._butBox = QtGui.QDialogButtonBox(self) self._butBox.setOrientation(QtCore.Qt.Horizontal) self._butBox.setStandardButtons(self._butBox.Close) layout.addWidget(self._butBox, 0) # Signals self._butBox.rejected.connect(self.close) # Create tabs self.createGeneralTab() self.createContributorsTab() self.createLicenseTab() # #from iep.iepcore.license import LicenseManager #self._tabs.addTab(LicenseManager(self._tabs), 'Your licenses') def addTab(self, title, text, rich=True): # Create label to show info label = QtGui.QTextEdit(self) label.setLineWrapMode(label.WidgetWidth) label.setReadOnly(True) # Set text if rich: label.setHtml(text) else: label.setText(text) # Add to tab bar self._tabs.addTab(label, title) # Done return label def createGeneralTab(self): aboutText = """ {}

Version info
IEP version: {}
Platform: {}
Python version: {}
pyzolib version: {}
Qt version: {}
{} version: {}

IEP directories
IEP source directory: {}
IEP userdata directory: {}

Acknowledgements
IEP is written in Python 3 and uses the Qt widget toolkit. IEP uses code and concepts that are inspired by IPython, Pype, and Spyder. IEP uses a (modified) subset of the silk icon set, by Mark James (http://www.famfamfam.com/lab/icons/silk/). """ # Determine license text licenseText = '' # 'This copy of IEP is not registered (using the free license).' if iep.license: if iep.license['company']: licenseText = 'This copy of IEP is registered to {name} of {company}.' else: licenseText = 'This copy of IEP is registered to {name}.' licenseText = licenseText.format(**iep.license) # Determine if this is PyQt4 or Pyside if hasattr(QtCore, 'PYQT_VERSION_STR'): qtWrapper = 'PyQt4' qtVersion = QtCore.QT_VERSION_STR qtWrapperVersion = QtCore.PYQT_VERSION_STR else: import PySide qtWrapper = 'PySide' qtVersion = QtCore.__version__ qtWrapperVersion = PySide.__version__ # Insert information texts if paths.is_frozen(): versionText = iep.__version__ + ' (binary)' else: versionText = iep.__version__ + ' (source)' aboutText = aboutText.format(licenseText, versionText, sys.platform, sys.version.split(' ')[0], pyzolib.__version__, qtVersion, qtWrapper, qtWrapperVersion, iep.iepDir, iep.appDataDir) self.addTab("General", aboutText) def createContributorsTab(self): fname = os.path.join(iep.iepDir, 'contributors.txt') try: with open(fname, 'rb') as f: text = f.read().decode('utf-8', 'ignore').strip() except Exception as err: text = str(err) label = self.addTab('Contributors', text, False) # Decrease font font = label.font() font.setPointSize(int(font.pointSize()*0.9)) label.setFont(font) def createLicenseTab(self): fname = os.path.join(iep.iepDir, 'license.txt') try: with open(fname, 'rb') as f: text = f.read().decode('utf-8', 'ignore').strip() except Exception as err: text = str(err) label = self.addTab('BSD license', text, False) # Decrease font font = label.font() font.setPointSize(int(font.pointSize()*0.9)) label.setFont(font) if __name__ == '__main__': #iep.license = {'name': 'AK', 'company': ''} m = AboutDialog(None) m.show() iep-3.7/iep/iepcore/codeparser.py0000664000175000017500000006373212271043444017274 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module codeparser Analyses the source code to get the structure of a module/script. This can be used for fictive introspection, and to display the structure of a source file in for example a tree widget. """ #TODO: replace this module, get data from the syntax highlighter in the code editor import time, threading, re from pyzolib.qt import QtCore, QtGui import iep # Define regular expression patterns classPattern = r'^\s*' # Optional whitespace classPattern += r'(cp?def\s+)?' # Cython preamble + whitespace classPattern += r'class\s+' # The class keyword + whitespace classPattern += r'([a-zA-Z_][a-zA-Z_0-9]*)\s*' # The NAME + optional whitespace classPattern += r'(\(.*?\))?' # The superclass(es) classPattern += r'\s*:' # Optional whitespace and the colon # defPattern = r'^\s*' # Optional whitespace defPattern += r'(cp?)?def\s+' # The Cython preamble, def keyword and whitespace defPattern += r'([a-zA-Z_][\*a-zA-Z_0-9]*\s+)?' # Optional Cython return type defPattern += r'([a-zA-Z_][a-zA-Z_0-9]*)\s*' # The NAME + optional whitespace defPattern += r'\((.*?)\)' # The SIGNATURE #defPattern += r'\s*:' # Optional whitespace and the colon # Leave the colon, easier for cython class Job: """ Simple class to represent a job. """ def __init__(self, text, editorId): self.text = text self.editorId = editorId class Result: """ Simple class to represent a parser result. """ def __init__(self, rootItem, importList, editorId): self.rootItem = rootItem self.importList = importList self.editorId = editorId def isMatch(self, editorId): """ isMatch(editorId): Returns whether the result matches with the given editorId. The editorId can also be an editor instance. """ if isinstance(editorId, int): return self.editorId == editorId else: return self.editorId == id(editorId) class Parser(threading.Thread): """ Parser Parsing sourcecode in a separate thread, this class obtains introspection informarion. This class is also the interface to the parsed information; it has methods that can be used to extract information from the result. """ def __init__(self): threading.Thread.__init__(self) # Reference current job self._job = None # Reference to last result self._result = None # Lock to enable save threading self._lock = threading.RLock() # Set deamon self.daemon = True self._exit = False def stop(self, timeout=1.0): self._exit = True self.join(timeout) def parseThis(self, editor): """ parseThis(editor) Give the parser new text to parse. If the parser is busy parsing text, it will stop doing that and start anew with the most recent version of the text. """ # Get text text = editor.toPlainText() # Make job self._lock.acquire() self._job = Job(text, id(editor)) self._lock.release() def getFictiveNameSpace(self, editor): """ getFictiveNameSpace(editor) Produce the fictive namespace, based on the current position. A list of names is returned. """ # Obtain result result = self._getResult() if result is None or not result.isMatch(editor): return [] # Get linenr and indent. These are used to establish the namespace # based on indentation. cursor = editor.textCursor() linenr = cursor.blockNumber() index = cursor.positionInBlock() # init empty namespace and item list namespace = []; items = result.rootItem.children curIsClass = False # to not add methods (of classes) while items: curitem = None for item in items: # append name if not curIsClass and item.type in ['class', 'def']: namespace.append( item.name ) # check if this is the one only last one remains if (item.type in ['class', 'def'] and item.linenr <= linenr and item.linenr2 > linenr): curitem = item # prepare for next round if curitem and curitem.indent < index: items = curitem.children if curitem.type=='class': curIsClass = True else: curIsClass = False else: items = [] return namespace def getFictiveClass(self, name, editor, handleSelf=False): """ getFictiveClass(name, editor, handleSelf=False) Return the fictive class object of the given name, or None if it does not exist. If handleSelf is True, automatically handles "self." names. """ return self._getFictiveItem(name, 'class', editor, handleSelf) def getFictiveSignature(self, name, editor, handleSelf=False): """ getFictiveSignature(name, editor, handleSelf=False) Get the signature of the fictive function or method of the given name. Returns None if the given name is not a known function or method. If handleSelf is True, automatically handles "self." names. """ # Get item being a function item = self._getFictiveItem(name, 'def', editor, handleSelf) # Get item being a class if not item: item = self._getFictiveItem(name, 'class', editor, handleSelf) if item: for subItem in item.children: if subItem.name == '__init__' and subItem.type == 'def': item = subItem break else: item = None # Process or return None if there was no item if item: nameParts = name.split('.') return '{}({})'.format(nameParts[-1], item.sig) else: return None def getFictiveImports(self, editor): """ getFictiveImports(editor) Get the fictive imports of this source file. tuple: - list of names that are imported, - a dict with the line to import each name """ # Obtain result result = self._getResult() if result is None or not result.isMatch(editor): return [], [] # Extract list of names and dict of lines imports = [] importlines = {} for item in result.importList: imports.append(item.name) importlines[item.name] = item.text return imports, importlines def _getResult(self): """ getResult() Savely Obtain result. """ self._lock.acquire() result = self._result self._lock.release() return result def _getFictiveItem(self, name, type, editor, handleSelf=False): """ _getFictiveItem(name, type, editor, handleSelf=False) Obtain the fictive item of the given name and type. If handleSelf is True, will handle "self." correctly. Intended for internal use. """ # Obtain result result = self._getResult() if result is None or not result.isMatch(editor): return None # Split name in parts nameParts = name.split('.') # Try if the first part represents a class instance if handleSelf: item = self._getFictiveCurrentClass(editor, nameParts[0]) if item: nameParts[0] = item.name # Init name = nameParts.pop(0) items = result.rootItem.children theItem = None # Search for name while items: for item in items: if item.name == name: # Found it if nameParts: # Go down one level name = nameParts.pop(0) items = item.children break else: # This is it, is it what we wanted? if item.type == type: theItem = item items = [] break else: # Did not find it items = [] return theItem def _getFictiveCurrentClass(self, editor, selfname): """ _getFictiveCurrentClass(editor, selfname) Get the fictive object for the class referenced using selfname (usually 'self'). Intendef for internal use. """ # Obtain result result = self._getResult() if result is None: return None # Get linenr and indent cursor = editor.textCursor() linenr = cursor.blockNumber() index = cursor.positionInBlock() # Init items = result.rootItem.children theclass = None while items: curitem = None for item in items: # check if this is the one only last one remains if item.linenr <= linenr: if not item.linenr2 > linenr: continue curitem = item if item.type == 'def' and item.selfname==selfname: theclass = item.parent else: break # prepare for next round if curitem and curitem.indent < index: items = curitem.children else: items = [] # return return theclass def run(self): """ run() This is the main loop. """ time.sleep(0.5) try: while True: time.sleep(0.1) if self._exit: return if self._job: # Savely obtain job self._lock.acquire() job = self._job self._job = None self._lock.release() # Analyse job result = self._analyze(job) # Savely store result self._lock.acquire() self._result = result self._lock.release() # Notify if iep.editors is not None: iep.editors.parserDone.emit() except AttributeError: pass # when python exits, time can be None... def _analyze(self, job): """ The core function. Analyses the source code. Produces: - a tree of FictiveObject objects. - a (flat) list of the same object - a list of imports """ # Remove multiline strings text = washMultilineStrings(job.text) # Split text in lines lines = text.splitlines() lines.insert(0,"") # so the lines start at 1 # The structure object. It will first only consist of class and defs # the rest will be inserted afterwards. root = FictiveObject("root", 0, -1, 'root') # Also keep a flat list (while running this function) flatList = [] # Cells and imports are inserted in the structure afterwards leafs = [] # Keep a list of imports importList = [] # To know when to make something new when for instance a class is defined # in an if statement, we keep track of the last valid node/object: # Put inside a list, so we can set it from inside a subfuncion lastObject = [root] # Define funcion to put an item in the structure in the right parent def appendToStructure(object): # find position in structure to insert node = lastObject[0] while ( (object.indent <= node.indent) and (node is not root) ): node = node.parent # insert object flatList.append(object) node.children.append(object) object.parent = node lastObject[0] = object # Find objects! # type can be: cell, class, def, import, var for i in range( len(lines) ): # Obtain line line = lines[i] linelen = len(line) # Should we stop? if self._job or self._exit: break # Remove indentation tmp = line.lstrip() indent = len(line) - len(tmp) line = tmp.rstrip() # Detect cells if line.startswith('##'): name = line[2:].lstrip() item = FictiveObject('cell', i, indent, name) leafs.append(item) # Next! (we have to put this before the elif stuff below # because it looks like a comment!) continue # Split in line and comment line, tmp, cmnt = line.partition('#') line, cmnt = line.rstrip(), cmnt.lower().strip() # Detect todos if cmnt and (cmnt.startswith('todo:') or cmnt.startswith('2do:') ): item = FictiveObject('todo', i, indent, cmnt) item.linenr2 = i+1 # a todo is active at one line only leafs.append(item) # Continue of no line left if not line: continue # Find last valid node. As the indent of the root is set to -1, # this will always stop at the root while indent <= lastObject[0].indent: lastObject[0].linenr2 = i # close object lastObject[0] = lastObject[0].parent # Make a lowercase version of the line foundSomething = False linel = line.lower() # Detect classes if not foundSomething: classResult = re.search(classPattern, line) if classResult: foundSomething = True # Get name name = classResult.group(2) item = FictiveObject('class', i, indent, name) appendToStructure(item) item.supers = [] item.members = [] # Get inheritance supers = classResult.group(3) if supers: supers = supers[1:-1].split(',') supers = [tmp.strip() for tmp in supers] item.supers = [tmp for tmp in supers if tmp] # Detect functions and methods (also multiline) if (not foundSomething) and line.count('def '): # Get a multiline version (for long defs) multiLine = line for ii in range(1,5): if i+ii add method to attr and find selfname if item.parent.type == 'class': item.parent.members.append(name) # Find what is used as "self" i2 = line.find('(') i4 = line.find(",",i2) if i4 < 0: i4 = line.find(")",i2) if i4 < 0: i4 = i2 selfname = line[i2+1:i4].strip() if selfname: item.selfname = selfname elif line.count('import '): if line.startswith("import "): for name in ParseImport(line[7:]): item = FictiveObject('import', i, indent, name) item.text = line item.linenr2 = i+1 # an import is active at one line only leafs.append(item) importList.append(item) elif line.startswith("from "): i1 = line.find(" import ") for name in ParseImport(line[i1+8:]): if not IsValidName(name): continue # we cannot do that! item = FictiveObject('import', i, indent, name) item.text = line item.linenr2 = i+1 # an import is active at one line only leafs.append(item) importList.append(item) elif line.count('='): if lastObject[0].type=='def' and lastObject[0].selfname: selfname = lastObject[0].selfname + "." line = line.partition("=")[0] if line.count(selfname): # A lot of ifs here. If we got here, the line is part of # a valid method and contains the selfname before the =. # Now we need to establish whether there is a valid # assignment done here... parts = line.split(",") # handle tuples for part in parts: part = part.strip() part2 = part[len(selfname):] if part.startswith(selfname) and IsValidName(part2): # add to the list if not already present defItem = lastObject[0] classItem = lastObject[0].parent # item = FictiveObject('attribute', i, indent, part2) item.parent = defItem defItem.children.append(item) if part2 not in classItem.members: classItem.members.append(part2) ## Post processing def getTwoItems(series, linenr): """ Return the two items just above and below the given linenr. The object always is a class or def. """ # find object after linenr object1, object2 = None, None # if no items at all i = -1 for i in range(len(series)): object = series[i] if object.type not in ['class','def']: continue if object.linenr > linenr: object2 = object break # find object just before linenr for ii in range(i,-1,-1): object = series[ii] if object.type not in ['class','def']: continue if object.linenr < linenr: object1 = object break # return result return object1, object2 # insert the leafs (backwards as the last inserted is at the top) for leaf in reversed(leafs): ob1, ob2 = getTwoItems(flatList, leaf.linenr) if ob1 is None: # also if ob2 is None # insert in root root.children.insert(0,leaf) leaf.parent = root continue if ob2 is None: ob2parent = root else: ob2parent = ob2.parent # get the object IN which to insert it: ob1 sibling = None while 1: canGoDeeper = ob1 is not ob2parent canGoDeeper = canGoDeeper and ob1 is not root shouldGoDeeper = ob1.indent >= leaf.indent shouldGoDeeper = shouldGoDeeper or ob1.linenr2 < leaf.linenr if canGoDeeper and shouldGoDeeper: sibling = ob1 ob1 = ob1.parent else: break # insert into ob1, after sibling (if available) L = ob1.children if sibling: i = L.index(sibling) L.insert(i+1,leaf) else: L.insert(0,leaf) # Return result return Result(root, importList, job.editorId) ## Helper classes and functions class FictiveObject: """ An un-instantiated object. type can be class, def, import, cell, todo extra stuff: class - supers, members def - selfname imports - text cell - todo - attribute - """ def __init__(self, type, linenr, indent, name): self.children = [] self.type = type self.linenr = linenr # at which line this object starts self.linenr2 = 9999999 # at which line it ends self.indent = indent self.name = name self.sig = '' # for functions and methods namechars = 'abcdefghijklmnopqrstuvwxyz_0123456789' def IsValidName(name): """ Given a string, checks whether it is a valid name (dots are not valid!) """ if not name: return False name = name.lower() if name[0] not in namechars[0:-10]: return False tmp = map(lambda x: x not in namechars, name[2:]) return sum(tmp)==0 def ParseImport(names): for part in names.split(","): i1 = part.find(' as ') if i1>0: name = part[i1+3:].strip() else: name = part.strip() yield name def findString(text, s, i): """ findString(text, s) Find s in text, but only if s is not in a string or commented Helper function for washMultilineStrings """ while True: i = _findString(text, s, i) if i<-1: i = -i+1 else: break return i def _findString(text, s, i): """ Helper function of findString, which is called recursively until a match is found, or it is clear there is no match. """ # Find occurrence i2 = text.find(s, i) if i2<0: return -1 # Find newline (if none, we're done) i1 = text.rfind('\n', 0, i2) if i1<0: return i2 # Extract the part on the line up to the match line = text[i1:i2] # Count quotes, we're done if we found none if not line.count('"') and not line.count("'") and not line.count('#'): return i2 # So we found quotes, now really count them ... prev = '' inString = '' # this is a boolean combined with a flag which quote was used isComment = False for c in line: if c == '#': if not inString: isComment = True break elif c in "\"\'": if not inString: inString = c elif prev != '\\': if inString == c: inString = '' # exit string else: pass # the other quote can savely be used inside this string prev = c # If we are in a string, this match is false ... if inString or isComment: return -i2 # indicate failure and where to continue else: return i2 # all's right def washMultilineStrings(text): """ washMultilineStrings(text) Replace all text within multiline strings with dummy chars so that it is not parsed. """ i=0 s1 = "'''" s2 = '"""' while i take all text, unclosed string! if i4==-1: i4 = 2**32 # Leave only the first two quotes of the start of the comment i3 -= 1 i4 += 3 # Replace all non-newline chars tmp = re.sub(r'\S', ' ', text[i3:i4]) text = text[:i3] + tmp + text[i3+len(tmp):] # Prepare for next round i = i4+1 return text """ ## testing skipping of multiline strings def ThisShouldNotBeVisible(): pass class ThisShouldNotBeVisibleEither(): pass """ iep-3.7/iep/iepcore/iepLogging.py0000664000175000017500000000717612573241614017235 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module logging Functionality for logging in IEP. """ import sys, os, time import code import iep iep.status = None # todo: enable logging to a file? # Define prompts try: sys.ps1 except AttributeError: sys.ps1 = ">>> " try: sys.ps2 except AttributeError: sys.ps2 = "... " class DummyStd: """ For when std is not available. """ def __init__(self): self._closed = False def write(self, text): pass def encoding(self): return 'utf-8' @property def closed(self): return self._closed def close(self): self._closed = False def flush(self): pass original_print = print def print(*args, **kwargs): # Obtain time string t = time.localtime() preamble = "{:02g}-{:02g}-{:04g} {:02g}:{:02g}:{:02g}: " preamble = preamble.format( t.tm_mday, t.tm_mon, t.tm_year, t.tm_hour, t.tm_min, t.tm_sec) # Prepend to args and print args = [preamble] + list(args) original_print(*tuple(args),**kwargs) def splitConsole(stdoutFun=None, stderrFun=None): """ splitConsole(stdoutFun=None, stderrFun=None) Splits the stdout and stderr streams. On each call to their write methods, in addition to the original write method being called, will call the given functions. Returns the history of the console (combined stdout and stderr). Used by the logger shell. """ # Split stdout and stderr sys.stdout = OutputStreamSplitter(sys.stdout) sys.stderr = OutputStreamSplitter(sys.stderr) # Make them share their history sys.stderr._history = sys.stdout._history # Set defer functions if stdoutFun: sys.stdout._deferFunction = stdoutFun if stderrFun: sys.stderr._deferFunction = stderrFun # Return history return ''.join(sys.stdout._history) class OutputStreamSplitter: """ This class is used to replace stdout and stderr output streams. It defers the stream to the original and to a function that can be registered. Used by the logger shell. """ def __init__(self, fileObject): # Init, copy properties if it was already a splitter if isinstance(fileObject, OutputStreamSplitter): self._original = fileObject._original self._history = fileObject._history self._deferFunction = fileObject._deferFunction else: self._original = fileObject self._history = [] self._deferFunction = self.dummyDeferFunction # Replace original with a dummy if None if self._original is None: self._original = DummyStd() def dummyDeferFunction(self, text): pass def write(self, text): """ Write method. """ self._original.write(text) self._history.append(text) try: self._deferFunction(text) except Exception: pass # self._original.write('error writing to deferred stream') # Show in statusbar if iep.status and len(text)>1: iep.status.showMessage(text, 5000) def flush(self): return self._original.flush() @property def closed(self): return self._original.closed def close(self): return self._original.close() def encoding(self): return self._original.encoding() # Split now, with no defering splitConsole() iep-3.7/iep/iepcore/shellStack.py0000664000175000017500000005132712467075642017253 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module shellStack Implements the stack of shells. Also implements the nifty debug button and a dialog to edit the shell configurations. """ import os, sys, time, re from pyzolib.qt import QtCore, QtGui import iep from iep import translate from iep.iepcore.compactTabWidget import CompactTabWidget from iep.iepcore.shell import PythonShell from iep.iepcore.iepLogging import print from iep.iepcore.menu import ShellTabContextMenu, ShellButtonMenu from iep.iepcore.icons import ShellIconMaker # Load the history viewer tool if available try: from iep.tools.iepHistoryViewer import PythonHistory except ImportError: PythonHistory = None def shellTitle(shell, moreinfo=False): """ Given a shell instance, build the text title to represent it. """ # Get name nameText = shell._info.name # Build version text if shell._version: versionText = 'v{}'.format(shell._version) else: versionText = 'v?' # Build gui text guiText = shell._startup_info.get('gui') guiText = guiText or '' if guiText.lower() in ['none', '']: guiText = 'without gui' else: guiText = 'with ' + guiText # Build state text stateText = shell._state or '' # Build text for elapsed time elapsed = time.time() - shell._start_time hh = elapsed//3600 mm = (elapsed - hh*3600)//60 ss = elapsed - hh*3600 - mm*60 runtimeText = 'runtime: %i:%02i:%02i' % (hh, mm, ss) # Build text if not moreinfo: text = nameText else: text = "'%s' (%s %s) - %s, %s" % (nameText, versionText, guiText, stateText, runtimeText) # Done return text class ShellStackWidget(QtGui.QWidget): """ The shell stack widget provides a stack of shells. It wrapps a QStackedWidget that contains the shell objects. This stack is used as a reference to synchronize the shell selection with. We keep track of what is the current selected shell and apply updates if necessary. Therefore, changing the current shell in the stack should be enough to invoke a full update. """ # When the current shell changes. currentShellChanged = QtCore.Signal() # When the current shells state (or debug state) changes, # or when a new prompt is received. # Also fired when the current shell changes. currentShellStateChanged = QtCore.Signal() def __init__(self, parent): QtGui.QWidget.__init__(self, parent) # create toolbar self._toolbar = QtGui.QToolBar(self) self._toolbar.setMaximumHeight(25) self._toolbar.setIconSize(QtCore.QSize(16,16)) # create stack self._stack = QtGui.QStackedWidget(self) # Populate toolbar self._shellButton = ShellControl(self._toolbar, self._stack) self._debugmode = 0 self._dbs = DebugStack(self._toolbar) # self._toolbar.addWidget(self._shellButton) self._toolbar.addSeparator() # self._toolbar.addWidget(self._dbc) -> delayed, see addContextMenu() # widget layout layout = QtGui.QVBoxLayout() layout.setSpacing(0) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._toolbar) layout.addWidget(self._stack) self.setLayout(layout) # make callbacks self._stack.currentChanged.connect(self.onCurrentChanged) # Make shared history (shared among shells) if PythonHistory is None: self.sharedHistory = None else: self.sharedHistory = PythonHistory('shellhistory.py') def __iter__(self): i = 0 while i < self._stack.count(): w = self._stack.widget(i) i += 1 yield w def addShell(self, shellInfo=None): """ addShell() Add a shell to the widget. """ # Create shell and add to stack shell = PythonShell(self, shellInfo, self.sharedHistory) index = self._stack.addWidget(shell) # Bind to signals shell.stateChanged.connect(self.onShellStateChange) shell.debugStateChanged.connect(self.onShellDebugStateChange) # Select it and focus on it (invokes onCurrentChanged) self._stack.setCurrentWidget(shell) shell.setFocus() return shell def removeShell(self, shell): """ removeShell() Remove an existing shell from the widget """ self._stack.removeWidget(shell) def onCurrentChanged(self, index): """ When another shell is selected, update some things. """ # Get current shell = self.getCurrentShell() # Call functions self.onShellStateChange(shell) self.onShellDebugStateChange(shell) # Emit Signal self.currentShellChanged.emit() def onShellStateChange(self, shell): """ Called when the shell state changes, and is called by onCurrentChanged. Sets the mainwindow's icon if busy. """ # Keep shell button and its menu up-to-date self._shellButton.updateShellMenu(shell) if shell is self.getCurrentShell(): # can be None # Update application icon if shell and shell._state in ['Busy']: iep.main.setWindowIcon(iep.iconRunning) else: iep.main.setWindowIcon(iep.icon) # Send signal self.currentShellStateChanged.emit() def onShellDebugStateChange(self, shell): """ Called when the shell debug state changes, and is called by onCurrentChanged. Sets the debug button. """ if shell is self.getCurrentShell(): # Update debug info if shell and shell._debugState: info = shell._debugState self._debugmode = info['debugmode'] for action in self._debugActions: action.setEnabled(self._debugmode==2) self._debugActions[-1].setEnabled(self._debugmode>0) # Stop self._dbs.setTrace(shell._debugState) else: for action in self._debugActions: action.setEnabled(False) self._debugmode = 0 self._dbs.setTrace(None) # Send signal self.currentShellStateChanged.emit() def getCurrentShell(self): """ getCurrentShell() Get the currently active shell. """ w = None if self._stack.count(): w = self._stack.currentWidget() if not w: return None else: return w def getShells(self): """ Get all shell in stack as list """ shells = [] for i in range(self._stack.count()): shell = self.getShellAt(i) if shell is not None: shells.append(shell) return shells def getShellAt(self, i): return """ Get shell at current tab index """ return self._stack.widget(i) def addContextMenu(self): # A bit awkward... but the ShellMenu needs the ShellStack, so it # can only be initialized *after* the shellstack is created ... # Give shell tool button a menu self._shellButton.setMenu(ShellButtonMenu(self, 'Shell button menu')) self._shellButton.menu().aboutToShow.connect(self._shellButton._elapsedTimesTimer.start) # Also give it a context menu self._shellButton.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self._shellButton.customContextMenuRequested.connect(self.contextMenuTriggered) # Add actions for action in iep.main.menuBar()._menumap['shell']._shellActions: action = self._toolbar.addAction(action) self._toolbar.addSeparator() # Add debug actions self._debugActions = [] for action in iep.main.menuBar()._menumap['shell']._shellDebugActions: self._debugActions.append(action) action = self._toolbar.addAction(action) # Delayed-add debug control buttons self._toolbar.addWidget(self._dbs) def contextMenuTriggered(self, p): """ Called when context menu is clicked """ # Get index of shell belonging to the tab shell = self.getCurrentShell() if shell: p = self._shellButton.mapToGlobal(self._shellButton.rect().bottomLeft()) ShellTabContextMenu(shell=shell, parent=self).popup(p) def onShellAction(self, action): shell = self.getCurrentShell() if shell: getattr(shell, action)() class ShellControl(QtGui.QToolButton): """ A button that can be used to select a shell and start a new shell. """ def __init__(self, parent, shellStack): QtGui.QToolButton.__init__(self, parent) # Store reference of shell stack self._shellStack = shellStack # Keep reference of actions corresponding to shells self._shellActions = [] # Set text and tooltip self.setText('Warming up ...') self.setToolTip("Click to select shell.") self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.setPopupMode(self.InstantPopup) # Set icon self._iconMaker = ShellIconMaker(self) self._iconMaker.updateIcon('busy') # Busy initializing # Create timer self._elapsedTimesTimer = QtCore.QTimer(self) self._elapsedTimesTimer.setInterval(200) self._elapsedTimesTimer.setSingleShot(False) self._elapsedTimesTimer.timeout.connect(self.onElapsedTimesTimer) def updateShellMenu(self, shellToUpdate=None): """ Update the shell menu. Ensure that there is a menu item for each shell. If shellToUpdate is given, updates the corresponding menu item. """ menu = self.menu() # Get shells now active currentShell = self._shellStack.currentWidget() shells = [self._shellStack.widget(i) for i in range(self._shellStack.count())] # Synchronize actions. Remove invalid actions for action in self._shellActions: # Check match with shells if action._shell in shells: shells.remove(action._shell) else: menu.removeAction(action) # Update checked state if action._shell is currentShell and currentShell: action.setChecked(True) else: action.setChecked(False) # Update text if necessary if action._shell is shellToUpdate: action.setText(shellTitle(shellToUpdate, True)) # Any items left in shells need a menu item # Dont give them an icon, or the icon is used as checkbox thingy for shell in shells: text = shellTitle(shell) action = menu.addItem(text, None, self._shellStack.setCurrentWidget, shell) action._shell = shell action.setCheckable(True) self._shellActions.append(action) # Is the shell being updated the current? if currentShell is shellToUpdate and currentShell is not None: self._iconMaker.updateIcon(currentShell._state) self.setText(shellTitle(currentShell)) elif currentShell is None: self._iconMaker.updateIcon('') self.setText('No shell selected') def onElapsedTimesTimer(self): # Automatically turn timer off is menu is hidden if not self.menu().isVisible(): self._elapsedTimesTimer.stop() return # Update text for each shell action for action in self._shellActions: action.setText(shellTitle(action._shell, True)) # todo: remove this? # class DebugControl(QtGui.QToolButton): # """ A button to control debugging. # """ # # def __init__(self, parent): # QtGui.QToolButton.__init__(self, parent) # # # Flag # self._debugmode = False # # # Set text # self.setText(translate('debug', 'Debug')) # self.setIcon(iep.icons.bug) # self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) # #self.setPopupMode(self.InstantPopup) # # # Bind to triggers # self.triggered.connect(self.onTriggered) # self.pressed.connect(self.onPressed) # self.buildMenu() # # # def buildMenu(self): # # # Count breakpoints # bpcount = 0 # for e in iep.editors: # bpcount += len(e.breakPoints()) # # # Prepare a text # clearallbps = translate('debug', 'Clear all {} breakpoints') # clearallbps = clearallbps.format(bpcount) # # # Set menu # menu = QtGui.QMenu(self) # self.setMenu(menu) # # for cmd, enabled, icon, text in [ # ('CLEAR', self._debugmode==0, iep.icons.bug_delete, clearallbps), # ('PM', self._debugmode==0, iep.icons.bug_error, # translate('debug', 'Postmortem: debug from last traceback')), # ('STOP', self._debugmode>0, iep.icons.debug_quit, # translate('debug', 'Stop debugging')), # # ('NEXT', self._debugmode==2, iep.icons.debug_next, # # translate('debug', 'Next: proceed until next line')), # # ('STEP', self._debugmode==2, iep.icons.debug_step, # # translate('debug', 'Step: proceed one step')), # # ('RETURN', self._debugmode==2, iep.icons.debug_return, # # translate('debug', 'Return: proceed until returns')), # # ('CONTINUE', self._debugmode==2, iep.icons.debug_continue, # # translate('debug', 'Continue: proceed to next breakpoint')), # ]: # if cmd is None: # menu.addSeparator() # else: # if icon is not None: # a = menu.addAction(icon, text) # else: # a = menu.addAction(text) # if hasattr(text, 'tt'): # a.setToolTip(text.tt) # a.cmd = cmd # a.setEnabled(enabled) # # # def onPressed(self, show=True): # self.buildMenu() # self.showMenu() # # # def onTriggered(self, action): # if action.cmd == 'PM': # # Initiate postmortem debugging # shell = iep.shells.getCurrentShell() # if shell: # shell.executeCommand('DB START\n') # # elif action.cmd == 'CLEAR': # # Clear all breakpoints # for e in iep.editors: # e.clearBreakPoints() # # else: # command = action.cmd.upper() # shell = iep.shells.getCurrentShell() # if shell: # shell.executeCommand('DB %s\n' % command) # # # def setTrace(self, info): # """ Determine whether we are in debug mode. # """ # if info is None: # self._debugmode = 0 # else: # self._debugmode = info['debugmode'] class DebugStack(QtGui.QToolButton): """ A button that shows the stack trace. """ def __init__(self, parent): QtGui.QToolButton.__init__(self, parent) # Set text and tooltip self._baseText = translate('debug', 'Stack') self.setText('%s:' % self._baseText) self.setIcon(iep.icons.text_align_justify) self.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self.setPopupMode(self.InstantPopup) # Bind to triggers self.triggered.connect(self.onTriggered) def onTriggered(self, action): # Get shell shell = iep.shells.getCurrentShell() if not shell: return # Change stack index if not action._isCurrent: shell.executeCommand('DB FRAME {}\n'.format(action._index)) # Open file and select line if True: line = action.text().split(': ',1)[1] self.debugFocus(line) def setTrace(self, info): """ Set the stack trace. This method is called from the shell that receives the trace via its status channel directly from the interpreter. If trace is None, removes the trace """ # Get info if info: index, frames, debugmode = info['index'], info['frames'], info['debugmode'] else: index, frames = -1, [] if (not frames) or (debugmode==0): # Remove trace self.setMenu(None) self.setText('') #(self._baseText) self.setEnabled(False) iep.editors.setDebugLineIndicators(None) else: # Get the current frame theAction = None # Create menu and add __main__ menu = QtGui.QMenu(self) self.setMenu(menu) # Fill trace for i in range(len(frames)): thisIndex = i + 1 # Set text for action text = '{}: File "{}", line {}, in {}' text = text.format(thisIndex, *frames[i]) action = menu.addAction(text) action._index = thisIndex action._isCurrent = False if thisIndex == index: action._isCurrent = True theAction = action self.debugFocus(text.split(': ',1)[1]) # Load editor # Get debug indicators debugIndicators = [] for i in range(len(frames)): thisIndex = i + 1 filename, linenr, func = frames[i] debugIndicators.append((filename, linenr)) if thisIndex == index: break # Set debug indicators iep.editors.setDebugLineIndicators(*debugIndicators) # Highlight current item and set the button text if theAction: menu.setDefaultAction(theAction) #self.setText(theAction.text().ljust(20)) i = theAction._index text = "{} ({}/{}): ".format(self._baseText, i, len(frames)) self.setText(text) self.setEnabled(True) def debugFocus(self, lineFromDebugState): """ debugFocus(lineFromDebugState) Open the file and show the linenr of the given lineFromDebugState. """ # Get filenr and item try: tmp = lineFromDebugState.split(', in ')[0].split(', line ') filename = tmp[0][len('File '):].strip('"') linenr = int(tmp[1].strip()) except Exception: return 'Could not focus!' # Cannot open if filename == '': return 'Stack frame is .' elif filename.startswith('= cursor1.block().position(): atCurrentPrompt = True if not atLastPrompt and not atCurrentPrompt: # Do not highlight anything but current and last prompts return if parser: if atCurrentPrompt: pos1, pos2 = cursor1.positionInBlock(), cursor2.positionInBlock() else: pos1, pos2 = 0, commandCursor.positionInBlock() # Check if we should *not* format this line. # This is the case for special "executing" text # A bit of a hack though ... is there a better way to signal this? specialinput = (not atCurrentPrompt) and line[pos2:].startswith('(executing ') self.setCurrentBlockState(0) if specialinput: pass # Let the kernel decide formatting else: for token in parser.parseLine(line, previousState): # Handle block state if isinstance(token, parsers.BlockState): self.setCurrentBlockState(token.state) else: # Get format try: format = nameToFormat(token.name).textCharFormat except KeyError: #print(repr(nameToFormat(token.name))) continue # Set format #format.setFontWeight(75) if token.start >= pos2: self.setFormat(token.start,token.end-token.start,format) # Set prompt to bold if atCurrentPrompt: format = QtGui.QTextCharFormat() format.setFontWeight(75) self.setFormat(pos1, pos2-pos1, format) #Get the indentation setting of the editors indentUsingSpaces = self._codeEditor.indentUsingSpaces() # Get user data bd = self.getCurrentBlockUserData() leadingWhitespace=line[:len(line)-len(line.lstrip())] if '\t' in leadingWhitespace and ' ' in leadingWhitespace: #Mixed whitespace bd.indentation = 0 format=QtGui.QTextCharFormat() format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline) format.setUnderlineColor(QtCore.Qt.red) format.setToolTip('Mixed tabs and spaces') self.setFormat(0,len(leadingWhitespace),format) elif ('\t' in leadingWhitespace and indentUsingSpaces) or \ (' ' in leadingWhitespace and not indentUsingSpaces): #Whitespace differs from document setting bd.indentation = 0 format=QtGui.QTextCharFormat() format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline) format.setUnderlineColor(QtCore.Qt.blue) format.setToolTip('Whitespace differs from document setting') self.setFormat(0,len(leadingWhitespace),format) else: # Store info for indentation guides # amount of tabs or spaces bd.indentation = len(leadingWhitespace) class BaseShell(BaseTextCtrl): """ The BaseShell implements functionality to make a generic shell. sharedHistory: an object providing the append() method, which will be called when the user enters a command, or None to disable this functionality """ def __init__(self, parent, sharedHistory = None, **kwds): super().__init__(parent, wrap=True, showLineNumbers=False, showBreakPoints=False, highlightCurrentLine=False, parser='python', **kwds) # Use a special highlighter that only highlights the input. self._setHighlighter(ShellHighlighter) # No undo in shells self.setUndoRedoEnabled(False) # variables we need self._more = False # We use two cursors to keep track of where the prompt is # cursor1 is in front, and cursor2 is at the end of the prompt. # They can be in the same position. # Further, we store a cursor that selects the last given command, # so it can be styled. self._cursor1 = self.textCursor() self._cursor2 = self.textCursor() self._lastCommandCursor = self.textCursor() # When inserting/removing text at the edit line (thus also while typing) # keep cursor2 at its place. Only when text is written before # the prompt (i.e. in write), this flag is temporarily set to False. # Same for cursor1, because sometimes (when there is no prompt) it # is at the same position. self._cursor1.setKeepPositionOnInsert(True) self._cursor2.setKeepPositionOnInsert(True) # Similarly, we use the _lastCommandCursor cursor really for pointing. self._lastCommandCursor.setKeepPositionOnInsert(True) # Create the command history. Commands are added into the # front of the list (ie. at index 0) as they are entered. self._history = [] self._historyNeedle = None # None means none, "" means look in all self._historyStep = 0 # link to the shared history self._sharedHistory = sharedHistory # Set minimum width so 80 lines do fit in smallest font size self.setMinimumWidth(200) # Hard wrapping. QTextEdit allows hard wrapping at a specific column. # Unfortunately, QPlainTextEdit does not. self.setWordWrapMode(QtGui.QTextOption.WrapAnywhere) # Limit number of lines self.setMaximumBlockCount(MAXBLOCKCOUNT) # Keep track of position, so we can disable editing if the cursor # is before the prompt self.cursorPositionChanged.connect(self.onCursorPositionChanged) self.setFocusPolicy(Qt.TabFocus) # See remark at mousePressEvent ## Cursor stuff def onCursorPositionChanged(self): #If the end of the selection (or just the cursor if there is no selection) #is before the beginning of the line. make the document read-only cursor = self.textCursor() promptpos = self._cursor2.position() if cursor.position() < promptpos or cursor.anchor() < promptpos: self.setReadOnly(True) else: self.setReadOnly(False) def ensureCursorAtEditLine(self): """ If the text cursor is before the beginning of the edit line, move it to the end of the edit line """ cursor = self.textCursor() promptpos = self._cursor2.position() if cursor.position() < promptpos or cursor.anchor() < promptpos: cursor.movePosition(cursor.End, A_MOVE) # Move to end of document self.setTextCursor(cursor) self.onCursorPositionChanged() def mousePressEvent(self, event): """ - Disable right MB and middle MB (which pastes by default). - Focus policy If a user clicks this shell, while it has no focus, we do not want the cursor position to change (since generally the user clicks the shell to give it the focus). We do this by setting the focus-policy to Qt::TabFocus, and we give the widget its focus manually from the mousePressedEvent event handler """ if not self.hasFocus(): self.setFocus() return if event.button() != QtCore.Qt.MidButton: super().mousePressEvent(event) def contextMenuEvent(self, event): """ Do not show context menu. """ pass def mouseDoubleClickEvent(self, event): BaseTextCtrl.mouseDoubleClickEvent(self, event) self._handleClickOnFilename(event.pos()) def _handleClickOnFilename(self, mousepos): """ Check whether the text that is clicked is a filename and open the file in the editor. If a line number can also be detected, open the file at that line number. """ # Get cursor and its current pos cursor = self.cursorForPosition(mousepos) ocursor = QtGui.QTextCursor(cursor) # Make a copy to use below pos = cursor.positionInBlock() # Get line of text for the cursor cursor.movePosition(cursor.EndOfBlock, cursor.MoveAnchor) cursor.movePosition(cursor.StartOfBlock, cursor.KeepAnchor) line = cursor.selectedText() if len(line) > 1024: return # safety # Get the word that is clicked. Qt's cursor.StartOfWord does not # work for filenames. line = line.replace('"', ' ') # IEP uses " around filenames before = line[:pos].split(' ')[-1] after = line[pos:].split(' ')[0] word = before + after # Check if it looks like a filename, quit if it does not if len(word) < 4: return elif not ('/' in word or '\\' in word): return # if sys.platform.startswith('win'): if word[1] != ':': return else: if not word.startswith('/'): return # filename = word # Split in parts for getting line number line = line[pos+len(after):] line = line.replace(',', ' ') parts = [p for p in line.split(' ') if p] # Iterate over parts linenr = None for i, part in enumerate(parts): if part in ('line', 'linenr', 'lineno'): try: linenr = int(parts[i+1]) except IndexError: pass # no more parts except ValueError: pass # not an integer else: break # Try again IPython style # IPython shows a few lines with the active line indicated by an arrow if linenr is None: for i in range(4): cursor.movePosition(cursor.NextBlock, cursor.MoveAnchor) cursor.movePosition(cursor.EndOfBlock, cursor.KeepAnchor) line = cursor.selectedText() if len(line) > 1024: continue # safety if not line.startswith('-'): continue parts = line.split(' ', 2) if parts[0] in ('->', '-->', '--->', '---->', '----->'): try: linenr = int(parts[1].strip()) except IndexError: pass # too few parts except ValueError: pass # not an integer else: break # Select word here (in shell) cursor = ocursor cursor.movePosition(cursor.Left, cursor.MoveAnchor, len(before)) cursor.movePosition(cursor.Right, cursor.KeepAnchor, len(word)) self.setTextCursor(cursor) # Try opening the file (at the line number if we have one) result = iep.editors.loadFile(filename) if result and linenr is not None: editor = result._editor editor.gotoLine(linenr) cursor = editor.textCursor() cursor.movePosition(cursor.StartOfBlock) cursor.movePosition(cursor.EndOfBlock, cursor.KeepAnchor) editor.setTextCursor(cursor) ##Indentation: override code editor behaviour def indentSelection(self): pass def dedentSelection(self): pass ## Key handlers def keyPressEvent(self,event): if event.key() in [Qt.Key_Return, Qt.Key_Enter]: # First check if autocompletion triggered if self.potentiallyAutoComplete(event): return else: # Enter: execute line # Remove calltip and autocomp if shown self.autocompleteCancel() self.calltipCancel() # reset history needle self._historyNeedle = None # process self.processLine() return if event.key() == Qt.Key_Escape: # Escape clears command if not ( self.autocompleteActive() or self.calltipActive() ): self.clearCommand() if event.key() == Qt.Key_Home: # Home goes to the prompt. cursor = self.textCursor() if event.modifiers() & Qt.ShiftModifier: cursor.setPosition(self._cursor2.position(), A_KEEP) else: cursor.setPosition(self._cursor2.position(), A_MOVE) # self.setTextCursor(cursor) self.autocompleteCancel() return if event.key() == Qt.Key_Insert: # Don't toggle between insert mode and overwrite mode. return True #Ensure to not backspace / go left beyond the prompt if event.key() in [Qt.Key_Backspace, Qt.Key_Left]: self._historyNeedle = None if self.textCursor().position() == self._cursor2.position(): if event.key() == Qt.Key_Backspace: self.textCursor().removeSelectedText() return #Ignore the key, don't go beyond the prompt if event.key() in [Qt.Key_Up, Qt.Key_Down] and not \ self.autocompleteActive(): # needle if self._historyNeedle is None: # get partly-written-command # # Select text cursor = self.textCursor() cursor.setPosition(self._cursor2.position(), A_MOVE) cursor.movePosition(cursor.End, A_KEEP) # Update needle text self._historyNeedle = cursor.selectedText() self._historyStep = 0 #Browse through history if event.key() == Qt.Key_Up: self._historyStep +=1 else: # Key_Down self._historyStep -=1 if self._historyStep < 1: self._historyStep = 1 # find the command count = 0 for c in self._history: if c.startswith(self._historyNeedle): count+=1 if count >= self._historyStep: break else: # found nothing-> reset self._historyStep = 0 c = self._historyNeedle # Replace text cursor = self.textCursor() cursor.setPosition(self._cursor2.position(), A_MOVE) cursor.movePosition(cursor.End, A_KEEP) cursor.insertText(c) self.ensureCursorAtEditLine() return else: # Reset needle self._historyNeedle = None #if a 'normal' key is pressed, ensure the cursor is at the edit line if event.text(): self.ensureCursorAtEditLine() #Default behaviour: BaseTextCtrl BaseTextCtrl.keyPressEvent(self,event) ## Cut / Copy / Paste / Drag & Drop def cut(self): """ Reimplement cut to only copy if part of the selected text is not at the prompt. """ if self.isReadOnly(): return self.copy() else: return BaseTextCtrl.cut(self) #def copy(self): # no overload needed def paste(self): """ Reimplement paste to paste at the end of the edit line when the position is at the prompt. """ self.ensureCursorAtEditLine() # Paste normally return BaseTextCtrl.paste(self) def dragEnterEvent(self, event): """ We only support copying of the text """ if event.mimeData().hasText(): event.setDropAction(QtCore.Qt.CopyAction) event.accept() def dragMoveEvent(self, event): self.dragEnterEvent(event) def dropEvent(self, event): """ The shell supports only a single line but the text may contain multiple lines. We insert at the editLine only the first non-empty line of the text """ if event.mimeData().hasText(): text = event.mimeData().text() insertText = '' for line in text.splitlines(): if line.strip(): insertText = line break # Move the cursor to the position indicated by the drop location, but # ensure it is at the edit line self.setTextCursor(self.cursorForPosition(event.pos())) self.ensureCursorAtEditLine() # Now insert the text cursor = self.textCursor() cursor.insertText(insertText) self.setFocus() ## Basic commands to control the shell def clearScreen(self): """ Clear all the previous output from the screen. """ # Select from beginning of prompt to start of document self._cursor1.clearSelection() self._cursor1.movePosition(self._cursor1.Start, A_KEEP) # Keep anchor self._cursor1.removeSelectedText() # Wrap up self.ensureCursorAtEditLine() self.ensureCursorVisible() def deleteLines(self): """ Called from the menu option "delete lines", just execute self.clearCommand() """ self.clearCommand() def clearCommand(self): """ Clear the current command, move the cursor right behind the prompt, and ensure it's visible. """ # Select from prompt end to length and delete selected text. cursor = self.textCursor() cursor.setPosition(self._cursor2.position(), A_MOVE) cursor.movePosition(cursor.End, A_KEEP) cursor.removeSelectedText() # Wrap up self.ensureCursorAtEditLine() self.ensureCursorVisible() def _handleBackspaces_split(self, text): # while NOT a backspace at first position, or none found i = 9999999999999 while i>0: i = text.rfind('\b',0,i) if i>0 and text[i-1]!='\b': text = text[0:i-1] + text[i+1:] # Strip the backspaces at the start text2 = text.lstrip('\b') n = len(text) - len(text2) # Done return n, text2 def _handleBackspacesOnList(self, texts): """ _handleBackspacesOnList(texts) Handle backspaces on a list of messages. When printing progress, many messages will simply replace each-other, which means we can process them much more effectively than when they're combined in a list. """ # Init number of backspaces at the start N = 0 for i in range(len(texts)): # Remove backspaces in text and how many are left n, text = self._handleBackspaces_split(texts[i]) texts[i] = text # Use remaining backspaces to remove backspaces in earlier texts while n and i > 0: i -= 1 text = texts[i] if len(text) > n: texts[i] = text[:-n] n = 0 else: texts[i] = '' n -= len(text) N += n # Insert tabs for start if N: texts[0] = '\b'*N + texts[0] # Return with empy elements popped return [t for t in texts if t] def _handleBackspaces(self, text): """ Apply backspaces in the string itself and if there are backspaces left at the start of the text, remove the appropriate amount of characters from the text. Returns the new text. """ # take care of backspaces if '\b' in text: # Remove backspaces and get how many were at the beginning nb, text = self._handleBackspaces_split(text) if nb: # Select what we remove and delete that self._cursor1.clearSelection() self._cursor1.movePosition(self._cursor1.Left, A_KEEP, nb) self._cursor1.removeSelectedText() # Return result return text def _splitLinesForPrinting(self, text): """ Given a text, split the text in lines. Lines that are extremely long are split in pieces of 80 characters to increase performance for wrapping. This is kind of a failsafe for when the user accidentally prints a bitmap or huge list. See issue 98. """ for line in text.splitlines(True): if len(line) > 1024: # about 12 lines of 80 chars parts = [line[i:i+80] for i in range(0, len(line), 80)] yield '\n'.join(parts) else: yield line def write(self, text, prompt=0, color=None): """ write(text, prompt=0, color=None) Write to the shell. Fauto-ind If prompt is 0 (default) the text is printed before the prompt. If prompt is 1, the text is printed after the prompt, the new prompt becomes null. If prompt is 2, the given text becomes the new prompt. The color of the text can also be specified (as a hex-string). """ # From The Qt docs: Note that a cursor always moves when text is # inserted before the current position of the cursor, and it always # keeps its position when text is inserted after the current position # of the cursor. # Make sure there's text and make sure its a string if not text: return if isinstance(text, bytes): text = text.decode('utf-8') # Prepare format format = QtGui.QTextCharFormat() if color: format.setForeground(QtGui.QColor(color)) #pos1, pos2 = self._cursor1.position(), self._cursor2.position() # Just in case, clear any selection of the cursors self._cursor1.clearSelection() self._cursor2.clearSelection() if prompt == 0: # Insert text behind prompt (normal streams) self._cursor1.setKeepPositionOnInsert(False) self._cursor2.setKeepPositionOnInsert(False) text = self._handleBackspaces(text) self._insertText(self._cursor1, text, format) elif prompt == 1: # Insert command text after prompt, prompt becomes null (input) self._lastCommandCursor.setPosition(self._cursor2.position()) self._cursor1.setKeepPositionOnInsert(False) self._cursor2.setKeepPositionOnInsert(False) self._insertText(self._cursor2, text, format) self._cursor1.setPosition(self._cursor2.position(), A_MOVE) elif prompt == 2 and text == '\b': # Remove prompt (used when closing the kernel) self._cursor1.setPosition(self._cursor2.position(), A_KEEP) self._cursor1.removeSelectedText() self._cursor2.setPosition(self._cursor1.position(), A_MOVE) elif prompt == 2: # Insert text after prompt, inserted text becomes new prompt self._cursor1.setPosition(self._cursor2.position(), A_MOVE) self._cursor1.setKeepPositionOnInsert(True) self._cursor2.setKeepPositionOnInsert(False) self._insertText(self._cursor1, text, format) # Reset cursor states for the user to type his/her commands self._cursor1.setKeepPositionOnInsert(True) self._cursor2.setKeepPositionOnInsert(True) # Make sure that cursor is visible (only when cursor is at edit line) if not self.isReadOnly(): self.ensureCursorVisible() # Scroll along with the text if lines are popped from the top elif self.blockCount() == MAXBLOCKCOUNT: n = text.count('\n') sb = self.verticalScrollBar() sb.setValue(sb.value()-n) def _insertText(self, cursor, text, format): """ Insert text at the given cursor, and with the given format. This function processes ANSI escape code for formatting and colorization: http://en.wikipedia.org/wiki/ANSI_escape_code """ # If necessary, make a new cursor that moves along. We insert # the text in pieces, so we need to move along with the text! if cursor.keepPositionOnInsert(): cursor = QtGui.QTextCursor(cursor) cursor.setKeepPositionOnInsert(False) # Init. We use the solarised color theme pattern = r'\x1b\[(.*?)m' #CLRS = ['#000', '#F00', '#0F0', '#FF0', '#00F', '#F0F', '#0FF', '#FFF'] CLRS = ['#657b83', '#dc322f', '#859900', '#b58900', '#268bd2', '#d33682', '#2aa198', '#eee8d5'] pendingtext = '' i0 = 0 for match in re.finditer(pattern, text): # Insert pending text with the current format # Also update indices i1, i2 = match.span() cursor.insertText(text[i0:i1], format) i0 = i2 # The formay that we are now going to parse should apply to # the text that follow it ... # Get parameters try: params = [int(i) for i in match.group(1).split(';')] except ValueError: params = [] if not params: params = [0] # Process for param in params: if param == 0: format = QtGui.QTextCharFormat() elif param == 1: format.setFontWeight(75) # Bold elif param == 2: format.setFontWeight(25) # Faint elif param == 3: format.setFontItalic(True) # Italic elif param == 4: format.setFontUnderline(True) # Underline # elif param == 22: format.setFontWeight(50) # Not bold or faint elif param == 23: format.setFontItalic(False) # Not italic elif param == 24: format.setFontUnderline(False) # Not underline # elif 30 <= param <= 37: # Set foreground color clr = CLRS[param-30] format.setForeground(QtGui.QColor(clr)) elif 40 <= param <= 47: pass # Cannot set background text in QPlainTextEdit # else: pass # Not supported else: # At the end, process the remaining text text = text[i0:] # Process very long text more efficiently. # Insert per line (very long lines are split in smaller ones) if len(text) > 1024: for line in self._splitLinesForPrinting(text): cursor.insertText(line, format) else: cursor.insertText(text, format) ## Executing stuff def processLine(self, line=None, execute=True): """ processLine(self, line=None, execute=True) Process the given line or the current line at the prompt if not given. Called when the user presses enter. If execute is False will not execute the command. This way a message can be written while other ways are used to process the command. """ # Can we do this? if self.isReadOnly() and not line: return if line: # remove trailing newline(s) command = line.rstrip('\n') else: # Select command cursor = self.textCursor() cursor.setPosition(self._cursor2.position(), A_MOVE) cursor.movePosition(cursor.End, A_KEEP) # Sample the text from the prompt and remove it command = cursor.selectedText().replace('\u2029', '\n') .rstrip('\n') cursor.removeSelectedText() # Auto-indent. Note: this is rather Python-specific command_s = command.lstrip() indent = ' ' * (len(command) - len(command_s)) if command.strip().endswith(':'): indent += ' ' elif not command_s: indent = '' if indent: cursor.insertText(indent) if command: # Remember the command in this shells' history # (but first remove to prevent duplicates) if command in self._history: self._history.remove(command) self._history.insert(0,command) # Add the command to the global history if self._sharedHistory is not None: self._sharedHistory.append(command) if execute: command = command.replace('\r\n', '\n') self.executeCommand(command+'\n') def executeCommand(self, command): """ Execute the given command. Should be overridden. """ # this is a stupid simulation version self.write("you executed: "+command+'\n') self.write(">>> ", prompt=2) class PythonShell(BaseShell): """ The PythonShell class implements the python part of the shell by connecting to a remote process that runs a Python interpreter. """ # Emits when the status string has changed or when receiving a new prompt stateChanged = QtCore.Signal(BaseShell) # Emits when the debug status is changed debugStateChanged = QtCore.Signal(BaseShell) def __init__(self, parent, info, sharedHistory = None): BaseShell.__init__(self, parent, sharedHistory) # Get standard info if not given. if info is None and iep.config.shellConfigs2: info = iep.config.shellConfigs2[0] if not info: info = KernelInfo(None) # Store info so we can reuse it on a restart self._info = info # For the editor to keep track of attempted imports self._importAttempts = [] # To keep track of the response for introspection self._currentCTO = None self._currentACO = None # Write buffer to store messages in for writing self._write_buffer = None # Create timer to keep polling any results # todo: Maybe use yoton events to process messages as they arrive. # I tried this briefly, but it seemd to be less efficient because # messages are not so much bach-processed anymore. We should decide # on either method. self._timer = QtCore.QTimer(self) self._timer.setInterval(POLL_TIMER_INTERVAL) # ms self._timer.setSingleShot(False) self._timer.timeout.connect(self.poll) self._timer.start() # Add context menu self._menu = ShellContextMenu(shell=self, parent=self) self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect(lambda p: self._menu.popup(self.mapToGlobal(p+QtCore.QPoint(0,3)))) # Keep track of breakpoints iep.editors.breakPointsChanged.connect(self.sendBreakPoints) # Start! self.resetVariables() self.connectToKernel(info) def resetVariables(self): """ Resets some variables. """ # Reset read state self.setReadOnly(False) # Variables to store state, python version, builtins and keywords self._state = '' self._debugState = {} self._version = "" self._builtins = [] self._keywords = [] self._startup_info = {} self._start_time = 0 # (re)set import attempts self._importAttempts[:] = [] # Update self.stateChanged.emit(self) def connectToKernel(self, info): """ connectToKernel() Create kernel and connect to it. """ # Create yoton context self._context = ct = yoton.Context() # Create stream channels self._strm_out = yoton.SubChannel(ct, 'strm-out') self._strm_err = yoton.SubChannel(ct, 'strm-err') self._strm_raw = yoton.SubChannel(ct, 'strm-raw') self._strm_echo = yoton.SubChannel(ct, 'strm-echo') self._strm_prompt = yoton.SubChannel(ct, 'strm-prompt') self._strm_broker = yoton.SubChannel(ct, 'strm-broker') self._strm_action = yoton.SubChannel(ct, 'strm-action', yoton.OBJECT) # Set channels to sync mode. This means that if the IEP cannot process # the messages fast enough, the sending side is blocked for a short # while. We don't want our users to miss any messages. for c in [self._strm_out, self._strm_err]: c.set_sync_mode(True) # Create control channels self._ctrl_command = yoton.PubChannel(ct, 'ctrl-command') self._ctrl_code = yoton.PubChannel(ct, 'ctrl-code', yoton.OBJECT) self._ctrl_broker = yoton.PubChannel(ct, 'ctrl-broker') # Create status channels self._stat_interpreter = yoton.StateChannel(ct, 'stat-interpreter') self._stat_debug = yoton.StateChannel(ct, 'stat-debug', yoton.OBJECT) self._stat_startup = yoton.StateChannel(ct, 'stat-startup', yoton.OBJECT) self._stat_startup.received.bind(self._onReceivedStartupInfo) self._stat_breakpoints = yoton.StateChannel(ct, 'stat-breakpoints', yoton.OBJECT) # Create introspection request channel self._request = yoton.ReqChannel(ct, 'reqp-introspect') # Connect! The broker will only start the kernel AFTER # we connect, so we do not miss out on anything. slot = iep.localKernelManager.createKernel(finishKernelInfo(info)) self._brokerConnection = ct.connect('localhost:%i'%slot) self._brokerConnection.closed.bind(self._onConnectionClose) # Force updating of breakpoints iep.editors.updateBreakPoints() # todo: see polling vs events # # Detect incoming messages # for c in [self._strm_out, self._strm_err, self._strm_raw, # self._strm_echo, self._strm_prompt, self._strm_broker, # self._strm_action, # self._stat_interpreter, self._stat_debug]: # c.received.bind(self.poll) def _onReceivedStartupInfo(self, channel): startup_info = channel.recv() # Store the whole dict self._startup_info = startup_info # Store when we received this self._start_time = time.time() # Set version version = startup_info.get('version', None) if isinstance(version, tuple): version = [str(v) for v in version] self._version = '.'.join(version[:2]) # Set keywords L = startup_info.get('keywords', None) if isinstance(L, list): self._keywords = L # Set builtins L = startup_info.get('builtins', None) if isinstance(L, list): self._builtins = L # Notify self.stateChanged.emit(self) ## Introspection processing methods def processCallTip(self, cto): """ Processes a calltip request using a CallTipObject instance. """ # Try using buffer first (not if we're not the requester) if self is cto.textCtrl: if cto.tryUsingBuffer(): return # Clear buffer to prevent doing a second request # and store cto to see whether the response is still wanted. cto.setBuffer('') self._currentCTO = cto # Post request future = self._request.signature(cto.name) future.add_done_callback(self._processCallTip_response) future.cto = cto def _processCallTip_response(self, future): """ Process response of shell to show signature. """ # Process future if future.cancelled(): #print('Introspect cancelled') # No kernel return elif future.exception(): print('Introspect-exception: ', future.exception()) return else: response = future.result() cto = future.cto # First see if this is still the right editor (can also be a shell) editor1 = iep.editors.getCurrentEditor() editor2 = iep.shells.getCurrentShell() if cto.textCtrl not in [editor1, editor2]: # The editor or shell starting the autocomp is no longer active aco.textCtrl.autocompleteCancel() return # Invalid response if response is None: cto.textCtrl.autocompleteCancel() return # If still required, show tip, otherwise only store result if cto is self._currentCTO: cto.finish(response) else: cto.setBuffer(response) def processAutoComp(self, aco): """ Processes an autocomp request using an AutoCompObject instance. """ # Try using buffer first (not if we're not the requester) if self is aco.textCtrl: if aco.tryUsingBuffer(): return # Include builtins and keywords? if not aco.name: aco.addNames(self._builtins) if iep.config.settings.autoComplete_keywords: aco.addNames(self._keywords) # Set buffer to prevent doing a second request # and store aco to see whether the response is still wanted. aco.setBuffer() self._currentACO = aco # Post request future = self._request.dir(aco.name) future.add_done_callback(self._processAutoComp_response) future.aco = aco def _processAutoComp_response(self, future): """ Process the response of the shell for the auto completion. """ # Process future if future.cancelled(): #print('Introspect cancelled') # No living kernel return elif future.exception(): print('Introspect-exception: ', future.exception()) return else: response = future.result() aco = future.aco # First see if this is still the right editor (can also be a shell) editor1 = iep.editors.getCurrentEditor() editor2 = iep.shells.getCurrentShell() if aco.textCtrl not in [editor1, editor2]: # The editor or shell starting the autocomp is no longer active aco.textCtrl.autocompleteCancel() return # Add result to the list foundNames = [] if response is not None: foundNames = response aco.addNames(foundNames) # Process list if aco.name and not foundNames: # No names found for the requested name. This means # it does not exist, let's try to import it importNames, importLines = iep.parser.getFictiveImports(editor1) baseName = aco.nameInImportNames(importNames) if baseName: line = importLines[baseName].strip() if line not in self._importAttempts: # Do import self.processLine(line + ' # auto-import') self._importAttempts.append(line) # Wait a barely noticable time to increase the chances # That the import is complete when we repost the request. time.sleep(0.2) # To be sure, decrease the experiration date on the buffer aco.setBuffer(timeout=1) # Repost request future = self._request.signature(aco.name) future.add_done_callback(self._processAutoComp_response) future.aco = aco else: # If still required, show list, otherwise only store result if self._currentACO is aco: aco.finish() else: aco.setBuffer() ## Methods for executing code def executeCommand(self, text): """ executeCommand(text) Execute one-line command in the remote Python session. """ # Ensure edit line is selected (to reset scrolling to end) self.ensureCursorAtEditLine() self._ctrl_command.send(text) def executeCode(self, text, fname, lineno=0, cellName=None): """ executeCode(text, fname, lineno, cellName=None) Execute (run) a large piece of code in the remote shell. text: the source code to execute filename: the file from which the source comes lineno: the first lineno of the text in the file, where 0 would be the first line of the file... The text (source code) is first pre-processed: - convert all line-endings to \n - remove all empty lines at the end - remove commented lines at the end - convert tabs to spaces - dedent so minimal indentation is zero """ # Convert tabs to spaces text = text.replace("\t"," "*4) # Make sure there is always *some* text if not text: text = ' ' # Examine the text line by line... # - check for empty/commented lined at the end # - calculate minimal indentation lines = text.splitlines() lastLineOfCode = 0 minIndent = 99 for linenr in range(len(lines)): # Get line line = lines[linenr] # Check if empty (can be commented, but nothing more) tmp = line.split("#",1)[0] # get part before first # if tmp.count(" ") == len(tmp): continue # empty line, proceed else: lastLineOfCode = linenr # Calculate indentation tmp = line.lstrip(" ") indent = len(line) - len(tmp) if indent < minIndent: minIndent = indent # Copy all proper lines to a new list, # remove minimal indentation, but only if we then would only remove # spaces (in the case of commented lines) lines2 = [] for linenr in range(lastLineOfCode+1): line = lines[linenr] # Remove indentation, if line[:minIndent].count(" ") == minIndent: line = line[minIndent:] else: line = line.lstrip(" ") lines2.append( line ) # Ensure edit line is selected (to reset scrolling to end) self.ensureCursorAtEditLine() # Send message text = "\n".join(lines2) msg = {'source':text, 'fname':fname, 'lineno':lineno, 'cellName': cellName} self._ctrl_code.send(msg) def sendBreakPoints(self, breaks): """ Send all breakpoints. """ # breaks is a dict of filenames to integers self._stat_breakpoints.send(breaks) ## The polling methods and terminating methods def poll(self, channel=None): """ poll() To keep the shell up-to-date. Call this periodically. """ if self._write_buffer: # There is still data in the buffer sub, M = self._write_buffer else: # Check what subchannel has the latest message pending sub = yoton.select_sub_channel(self._strm_out, self._strm_err, self._strm_echo, self._strm_raw, self._strm_broker, self._strm_prompt ) # Read messages from it if sub: M = sub.recv_selected() #M = [sub.recv()] # Slow version (for testing) # Optimization: handle backspaces on stack of messages if sub is self._strm_out: M = self._handleBackspacesOnList(M) # New prompt? if sub is self._strm_prompt: self.stateChanged.emit(self) # Write all pending messages that are later than any other message if sub: # Select messages to process N = 256 M, buffer = M[:N], M[N:] # Buffer the rest if buffer: self._write_buffer = sub, buffer else: self._write_buffer = None # Get how to deal with prompt prompt = 0 if sub is self._strm_echo: prompt = 1 elif sub is self._strm_prompt: prompt = 2 # Get color color = None if sub is self._strm_broker: color = '#000' elif sub is self._strm_raw: color = '#888888' # Halfway elif sub is self._strm_err: color = '#F00' # Write self.write(''.join(M), prompt, color) # Do any actions? action = self._strm_action.recv(False) if action: if action.startswith('open '): parts = action.split(' ') parts.pop(0) try: linenr = int(parts[0]) parts.pop(0) except ValueError: linenr = None fname = ' '.join(parts) editor = iep.editors.loadFile(fname) if editor and linenr: editor._editor.gotoLine(linenr) else: print('Unkown action: %s' % action) # ----- status # Do not update status when the kernel is not really up and running # self._version is set when the startup info is received if not self._version: return # Update status state = self._stat_interpreter.recv() if state != self._state: self._state = state self.stateChanged.emit(self) # Update debug status state = self._stat_debug.recv() if state != self._debugState: self._debugState = state self.debugStateChanged.emit(self) def interrupt(self): """ interrupt() Send a Keyboard interrupt signal to the main thread of the remote process. """ # Ensure edit line is selected (to reset scrolling to end) self.ensureCursorAtEditLine() self._ctrl_broker.send('INT') def restart(self, scriptFile=None): """ restart(scriptFile=None) Terminate the shell, after which it is restarted. Args can be a filename, to execute as a script as soon as the shell is back up. """ # Ensure edit line is selected (to reset scrolling to end) self.ensureCursorAtEditLine() # Get info info = finishKernelInfo(self._info, scriptFile) # Create message and send msg = 'RESTART\n' + ssdf.saves(info) self._ctrl_broker.send(msg) # Reset self.resetVariables() def terminate(self): """ terminate() Terminates the python process. It will first try gently, but if that does not work, the process shall be killed. To be notified of the termination, connect to the "terminated" signal of the shell. """ # Ensure edit line is selected (to reset scrolling to end) self.ensureCursorAtEditLine() self._ctrl_broker.send('TERM') def closeShell(self): # do not call it close(); that is a reserved method. """ closeShell() Very simple. This closes the shell. If possible, we will first tell the broker to terminate the kernel. The broker will be cleaned up if there are no clients connected and if there is no active kernel. In a multi-user environment, we should thus be able to close the shell without killing the kernel. But in a closed 1-to-1 environment we really want to prevent loose brokers and kernels dangling around. In both cases however, it is the responsibility of the broker to terminate the kernel, and the shell will simply assume that this will work :) """ # If we can, try to tell the broker to terminate the kernel if self._context and self._context.connection_count: self.terminate() self._context.flush() # Important, make sure the message is send! self._context.close() # Adios iep.shells.removeShell(self) def _onConnectionClose(self, c, why): """ To be called after disconnecting. In general, the broker will not close the connection, so it can be considered an error-state if this function is called. """ # Stop context if self._context: self._context.close() # New (empty prompt) self._cursor1.movePosition(self._cursor1.End, A_MOVE) self._cursor2.movePosition(self._cursor2.End, A_MOVE) self.write('\n\n'); self.write('Lost connection with broker:\n') self.write(why) self.write('\n\n') # Set style to indicate dead-ness self.setReadOnly(True) # Goto end such that the closing message is visible cursor = self.textCursor() cursor.movePosition(cursor.End, A_MOVE) self.setTextCursor(cursor) self.ensureCursorVisible() if __name__ == '__main__': b = BaseShell(None) b.show() iep-3.7/iep/iepcore/license.py0000664000175000017500000002353012271043444016557 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Code related to the license. """ import os import sys import datetime import iep from pyzolib.qt import QtCore, QtGui LICENSEKEY_FILE = os.path.join(iep.appDataDir, "licensekey.txt") UNMANGLE_CODE =""" eJytU8Fu2zAMvecr2OQgGXOMJU23wVgOOfQwdLcAK4piGFSJToS5UiDJ6Yph/z5KVpxm7YYe5ost 8r1HPoqewDW2LShr8AxubAf3wogNKggWFEqrEMIWodUSjUfoDOU3LULTGRm0NWejCUzB4UY45UtY S41GIqx2u1ajGilsBg73RT0CesbjMXzuBaff8TGW8sFps0lFtQzVAZbeO4eN/lHCtxL8Apbgq4je 8aLaCRd07IKzKSuegAl1Jzy+W1S9h7vHgJ73uYoapBBnwkutWVFkDGddaKYfso5uwNgAmQPCKCqe +4+PE5rG8UW0HV46Zx1nV+QkUrSB9Qoa6+5FqE7VcgM+UN/+QYctZ+vV1eUN+z/CsFxCL7ifsX8p fjJ70WoFe3Sepge2ea7sz18eol+8boB+TnzG0re0nQl0fJ9OVAdkdOPPj032kDcHTPJGDOsUlwVt WMoPqYetph3UH98eBXoGCcwvLoYgNUERuXVc565mf3E1f50rRfSfvwYbcQGTk1nlaeEDZ3VdP73N BFimV95aVmepfH10jgoRcWKGfowS6JoGdtZn5ezIx9bj6Qj+oJWHK8jVKH2KV7cU+kpo4vQObxlF WAx5gAkIpSIr5RyGzhlQvwFvTS4N """ import types, base64, zlib def parse_license(key): """ Unmangle the license key and return a dict with license info. The dict at least has these fields: name, company, email, expires, product, reference. The actual code of this function is obfuscated. We realize that anyone with a bit of free time can find out the license parsing. The obfuscating is to make this a bit harder and to avoid having the code verbatim in the repository. You are free to reverse-engineer our license key format and then produce your own license. However, who would you be fooling? """ # Define function codeb = zlib.decompress(base64.decodebytes(UNMANGLE_CODE.encode('ascii'))) exec(codeb.decode('utf-8'), globals()) # Call it return unmangle(key) def get_keys(): """ Get a list of all license keys, in the order that thet were added. """ # Get text of license file if os.path.isfile(LICENSEKEY_FILE): text = open(LICENSEKEY_FILE, 'rt').read() else: text = '' # Remove comments lines = [] for line in text.splitlines(): if line.startswith('#'): line = '' lines.append(line.rstrip()) # Split in licenses licenses = ('\n'.join(lines)).split('\n\n') licenses = [key.strip() for key in licenses] licenses = [key for key in licenses if key] # Remove duplicates (avoid set() to maintain order) licenses, licenses2 = [], licenses for key in licenses2: if key not in licenses: licenses.append(key) # Sort and return return licenses def is_invalid(info): """ Get whether a license is invalid. Returns a string with the reason. """ # IEP license? if not ('IEP' in info['product'].upper() or 'PYZO' in info['product'].upper() ): return 'This is not an IEP license.' # Expired today = datetime.datetime.now().strftime('%Y%m%d') if today > info['expires']: return 'The license has expired' def get_license_info(): """ Get the license info of the most recently added valid license. Returns a dict which at least has these fields: name, company, email, expires, product, reference. Returns None if there is no valid license. """ # Get all keys keys = get_keys() # Get valid licenses valid_licenses = [] for key in keys: info = parse_license(key) if not is_invalid(info): valid_licenses.append(info) # Done if valid_licenses: return valid_licenses[-1] else: return None def add_license(key): """ Add a license key to IEP. """ # Normalize and check license key = key.strip().replace('\n', '').replace('\r', '') info = parse_license(key) invalid = is_invalid(info) if invalid: raise ValueError('Given license is not valid: %s' % invalid) # Get licenses and add our key licenses = get_keys() licenses.append(key) # Remove duplicates (avoid set() to maintain order) licenses, licenses2 = [], licenses for key in licenses2: if key not in licenses: licenses.append(key) # Write back lines = ['# List of license keys for IEP', ''] for key in licenses: info = parse_license(key) comment = '# Licensed to {name} expires {expires}'.format(**info) lines.append(comment) lines.append(key) lines.append('') with open(LICENSEKEY_FILE, 'wt') as f: f.write('\n'.join(lines)) class LicenseManager(QtGui.QDialog): """ Dialog to view current licenses and to add license keys. """ def __init__(self, parent): QtGui.QDialog.__init__(self, parent) self.setWindowTitle(iep.translate("menu dialog", "Manage IEP license keys")) self.resize(500,500) # Create button to add license key self._addbut = QtGui.QPushButton( iep.translate("menu dialog", "Add license key") ) self._addbut.clicked.connect(self.addLicenseKey) # Create label with link to website self._linkLabel = QtGui.QLabel(self) self._linkLabel.setTextFormat(QtCore.Qt.RichText) self._linkLabel.setOpenExternalLinks(True) self._linkLabel.setText("You can purchase a license at " + "http://iep-project.org") self._linkLabel.setVisible(False) # Create label to show license info self._label = QtGui.QTextEdit(self) self._label.setLineWrapMode(self._label.WidgetWidth) self._label.setReadOnly(True) # Layout layout = QtGui.QVBoxLayout(self) self.setLayout(layout) layout.addWidget(self._addbut) layout.addWidget(self._linkLabel) layout.addWidget(self._label) # Init self.showLicenses() def addLicenseKey(self): """ Show dialog to insert new key. """ # Ask for key title = iep.translate("menu dialog", "Add license key") label = '' s = PlainTextInputDialog.getText(self, title, label) if isinstance(s, tuple): s = s[0] if s[1] else '' # Add it if s: try: add_license(s) except Exception as err: label = 'Could not add label:\n%s' % str(err) QtGui.QMessageBox.warning(self, title, label) # Update self.showLicenses() iep.license = get_license_info() def showLicenses(self): """ Show all licenses. """ # Get active license activeLicense = get_license_info() # Get all keys, transform to license dicts license_keys = get_keys() license_dicts = [parse_license(key) for key in license_keys] license_dicts.sort(key=lambda x:x['expires']) lines = ['

Listing licenses from %s

' % LICENSEKEY_FILE] for info in reversed(license_dicts): # Get info activeText = '' key = info['key'] if activeLicense and activeLicense['key'] == key: activeText = ' (active)' e = datetime.datetime.strptime(info['expires'], '%Y%m%d') expires = e.strftime('%d-%m-%Y') # Create summary lines.append('

') lines.append('%s%s
' % (info['product'], activeText)) lines.append('Name: %s
' % info['name']) lines.append('Email: %s
' % info['email']) lines.append('Company: %s
' % info['company']) lines.append('Expires: %s
' % expires) lines.append('key: %s
' % key) lines.append('

') # No licenses? if not license_dicts: lines.insert(1, '

No license keys found.

') self._linkLabel.setVisible(True) elif not activeLicense: lines.insert(1, '

All your keys seem to have expired.

') self._linkLabel.setVisible(True) else: self._linkLabel.setVisible(False) # Set label text self._label.setHtml('\n'.join(lines)) class PlainTextInputDialog(QtGui.QDialog): def __init__(self, parent, title='', label=''): QtGui.QDialog.__init__(self, parent) self.setWindowTitle(title) self._result = None # Default (when closed with cross) # Layout gridLayout = QtGui.QGridLayout(self) self.setLayout(gridLayout) # Create label self._label = QtGui.QLabel(label, self) gridLayout.addWidget(self._label, 0,0,1,1) # Create text edit self._txtEdit = QtGui.QPlainTextEdit(self) gridLayout.addWidget(self._txtEdit, 1,0,1,1) # Create button box self._butBox = QtGui.QDialogButtonBox(self) self._butBox.setOrientation(QtCore.Qt.Horizontal) self._butBox.setStandardButtons(self._butBox.Cancel | self._butBox.Ok) gridLayout.addWidget(self._butBox, 2,0,1,1) # Signals self._butBox.accepted.connect(self.on_accept) self._butBox.rejected.connect(self.on_reject) def on_accept(self): self.setResult(1) self._result = self._txtEdit.toPlainText() self.close() def on_reject(self): self.setResult(0) self._result = None self.close() @classmethod def getText(cls, parent, title='', label=''): d = PlainTextInputDialog(parent, title, label) d.exec_() return d._result if __name__ == '__main__': w = LicenseManager(None) w.show() #print(PlainTextInputDialog.getText(None, 'foo', 'bar')) iep-3.7/iep/iepcore/editorTabs.py0000664000175000017500000014276012467107741017254 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ EditorTabs class Replaces the earlier EditorStack class. The editor tabs class represents the different open files. They can be selected using a tab widget (with tabs placed north of the editor). It also has a find/replace widget that is at the bottom of the editor. """ import os, sys, time, gc from pyzolib.qt import QtCore, QtGui import iep from iep.iepcore.compactTabWidget import CompactTabWidget from iep.iepcore.editor import createEditor from iep.iepcore.baseTextCtrl import normalizePath from iep.iepcore.iepLogging import print from iep.iepcore.icons import EditorTabToolButton from iep import translate # Constants for the alignments of tabs MIN_NAME_WIDTH = 50 MAX_NAME_WIDTH = 200 def simpleDialog(item, action, question, options, defaultOption): """ simpleDialog(editor, action, question, options, defaultOption) Options with special buttons ---------------------------- ok, open, save, cancel, close, discard, apply, reset, restoredefaults, help, saveall, yes, yestoall, no, notoall, abort, retry, ignore. Returns the selected option as a string, or None if canceled. """ # Get filename if isinstance(item, FileItem): filename = item.id else: filename = item.id() # create button map mb = QtGui.QMessageBox M = { 'ok':mb.Ok, 'open':mb.Open, 'save':mb.Save, 'cancel':mb.Cancel, 'close':mb.Close, 'discard':mb.Discard, 'apply':mb.Apply, 'reset':mb.Reset, 'restoredefaults':mb.RestoreDefaults, 'help':mb.Help, 'saveall':mb.SaveAll, 'yes':mb.Yes, 'yestoall':mb.YesToAll, 'no':mb.No, 'notoall':mb.NoToAll, 'abort':mb.Abort, 'retry':mb.Retry, 'ignore':mb.Ignore} # setup dialog dlg = QtGui.QMessageBox(iep.main) dlg.setWindowTitle('IEP') dlg.setText(action + " file:\n{}".format(filename)) dlg.setInformativeText(question) # process options buttons = {} for option in options: option_lower = option.lower() # Use standard button? if option_lower in M: button = dlg.addButton(M[option_lower]) else: button = dlg.addButton(option, dlg.AcceptRole) buttons[button] = option # Set as default? if option_lower == defaultOption.lower(): dlg.setDefaultButton(button) # get result result = dlg.exec_() button = dlg.clickedButton() if button in buttons: return buttons[button] else: return None # todo: some management stuff could (should?) go here class FileItem: """ FileItem(editor) A file item represents an open file. It is associated with an editing component and has a filename. """ def __init__(self, editor): # Store editor self._editor = editor # Init pinned state self._pinned = False @property def editor(self): """ Get the editor component corresponding to this item. """ return self._editor @property def id(self): """ Get an id of this editor. This is the filename, or for tmp files, the name. """ if self.filename: return self.filename else: return self.name @property def filename(self): """ Get the full filename corresponding to this item. """ return self._editor.filename @property def name(self): """ Get the name corresponding to this item. """ return self._editor.name @property def dirty(self): """ Get whether the file has been changed since it is changed. """ return self._editor.document().isModified() @property def pinned(self): """ Get whether this item is pinned (i.e. will not be closed when closing all files. """ return self._pinned # todo: when this works with the new editor, put in own module. class FindReplaceWidget(QtGui.QFrame): """ A widget to find and replace text. """ def __init__(self, *args): QtGui.QFrame.__init__(self, *args) self.setFocusPolicy(QtCore.Qt.ClickFocus) # init layout layout = QtGui.QHBoxLayout(self) layout.setSpacing(0) self.setLayout(layout) # Create some widgets first to realize a correct tab order self._hidebut = QtGui.QToolButton(self) self._findText = QtGui.QLineEdit(self) self._replaceText = QtGui.QLineEdit(self) if True: # Create sub layouts vsubLayout = QtGui.QVBoxLayout() vsubLayout.setSpacing(0) layout.addLayout(vsubLayout, 0) # Add button self._hidebut.setFont( QtGui.QFont('helvetica',7) ) self._hidebut.setToolTip(translate('search', 'Hide search widget (Escape)')) self._hidebut.setIcon( iep.icons.cancel ) self._hidebut.setIconSize(QtCore.QSize(16,16)) vsubLayout.addWidget(self._hidebut, 0) vsubLayout.addStretch(1) layout.addSpacing(10) if True: # Create sub layouts vsubLayout = QtGui.QVBoxLayout() hsubLayout = QtGui.QHBoxLayout() vsubLayout.setSpacing(0) hsubLayout.setSpacing(0) layout.addLayout(vsubLayout, 0) # Add find text self._findText.setToolTip(translate('search', 'Find pattern')) vsubLayout.addWidget(self._findText, 0) vsubLayout.addLayout(hsubLayout) # Add previous button self._findPrev = QtGui.QToolButton(self) t = translate('search', 'Previous ::: Find previous occurrence of the pattern.') self._findPrev.setText(t); self._findPrev.setToolTip(t.tt) hsubLayout.addWidget(self._findPrev, 0) hsubLayout.addStretch(1) # Add next button self._findNext = QtGui.QToolButton(self) t = translate('search', 'Next ::: Find next occurrence of the pattern.') self._findNext.setText(t); self._findNext.setToolTip(t.tt) #self._findNext.setDefault(True) # Not possible with tool buttons hsubLayout.addWidget(self._findNext, 0) layout.addSpacing(10) if True: # Create sub layouts vsubLayout = QtGui.QVBoxLayout() hsubLayout = QtGui.QHBoxLayout() vsubLayout.setSpacing(0) hsubLayout.setSpacing(0) layout.addLayout(vsubLayout, 0) # Add replace text self._replaceText.setToolTip(translate('search', 'Replace pattern')) vsubLayout.addWidget(self._replaceText, 0) vsubLayout.addLayout(hsubLayout) # Add replace-all button self._replaceAll = QtGui.QToolButton(self) t = translate('search', 'Repl. all ::: Replace all matches in current document.') self._replaceAll.setText(t); self._replaceAll.setToolTip(t.tt) hsubLayout.addWidget(self._replaceAll, 0) hsubLayout.addStretch(1) # Add replace button self._replace = QtGui.QToolButton(self) t = translate('search', 'Replace ::: Replace this match.') self._replace.setText(t); self._replace.setToolTip(t.tt) hsubLayout.addWidget(self._replace, 0) layout.addSpacing(10) if True: # Create sub layouts vsubLayout = QtGui.QVBoxLayout() vsubLayout.setSpacing(0) layout.addLayout(vsubLayout, 0) # Add match-case checkbox t = translate('search', 'Match case ::: Find words that match case.') self._caseCheck = QtGui.QCheckBox(t, self) self._caseCheck.setToolTip(t.tt) vsubLayout.addWidget(self._caseCheck, 0) # Add regexp checkbox t = translate('search', 'RegExp ::: Find using regular expressions.') self._regExp = QtGui.QCheckBox(t, self) self._regExp.setToolTip(t.tt) vsubLayout.addWidget(self._regExp, 0) if True: # Create sub layouts vsubLayout = QtGui.QVBoxLayout() vsubLayout.setSpacing(0) layout.addLayout(vsubLayout, 0) # Add whole-word checkbox t = translate('search', 'Whole words ::: Find only whole words.') self._wholeWord = QtGui.QCheckBox(t, self) self._wholeWord.setToolTip(t.tt) self._wholeWord.resize(60, 16) vsubLayout.addWidget(self._wholeWord, 0) # Add autohide dropbox t = translate('search', 'Auto hide ::: Hide search/replace when unused for 10 s.') self._autoHide = QtGui.QCheckBox(t, self) self._autoHide.setToolTip(t.tt) self._autoHide.resize(60, 16) vsubLayout.addWidget(self._autoHide, 0) layout.addStretch(1) # Set placeholder texts for lineEdit in [self._findText, self._replaceText]: if hasattr(lineEdit, 'setPlaceholderText'): lineEdit.setPlaceholderText(lineEdit.toolTip()) lineEdit.textChanged.connect(self.autoHideTimerReset) # Set focus policy for but in [self._findPrev, self._findNext, self._replaceAll, self._replace, self._caseCheck, self._wholeWord, self._regExp]: #but.setFocusPolicy(QtCore.Qt.ClickFocus) but.clicked.connect(self.autoHideTimerReset) # create timer objects self._timerBeginEnd = QtCore.QTimer(self) self._timerBeginEnd.setSingleShot(True) self._timerBeginEnd.timeout.connect( self.resetAppearance ) # self._timerAutoHide = QtCore.QTimer(self) self._timerAutoHide.setSingleShot(False) self._timerAutoHide.setInterval(500) # ms self._timerAutoHide.timeout.connect( self.autoHideTimerCallback ) self._timerAutoHide_t0 = time.time() self._timerAutoHide.start() # create callbacks self._findText.returnPressed.connect(self.findNext) self._hidebut.clicked.connect(self.hideMe) self._findNext.clicked.connect(self.findNext) self._findPrev.clicked.connect(self.findPrevious) self._replace.clicked.connect(self.replaceOne) self._replaceAll.clicked.connect(self.replaceAll) # self._regExp.stateChanged.connect(self.handleReplacePossible) # init case and regexp self._caseCheck.setChecked( bool(iep.config.state.find_matchCase) ) self._regExp.setChecked( bool(iep.config.state.find_regExp) ) self._wholeWord.setChecked( bool(iep.config.state.find_wholeWord) ) self._autoHide.setChecked( bool(iep.config.state.find_autoHide) ) # show or hide? if bool(iep.config.state.find_show): self.show() else: self.hide() def autoHideTimerReset(self): self._timerAutoHide_t0 = time.time() def autoHideTimerCallback(self): """ Check whether we should hide the tool. """ timeout = iep.config.advanced.find_autoHide_timeout if self._autoHide.isChecked(): if (time.time() - self._timerAutoHide_t0) > timeout: # seconds # Hide if editor has focus es = self.parent() # editor stack editor = es.getCurrentEditor() if editor and editor.hasFocus(): self.hide() def hideMe(self): """ Hide the find/replace widget. """ self.hide() es = self.parent() # editor stack #es._boxLayout.activate() editor = es.getCurrentEditor() if editor: editor.setFocus() def event(self, event): """ Handle tab key and escape key. For the tab key we need to overload event instead of KeyPressEvent. """ if isinstance(event, QtGui.QKeyEvent): if event.key() in (QtCore.Qt.Key_Tab, QtCore.Qt.Key_Backtab): event.accept() # focusNextPrevChild is called by Qt return True elif event.key() == QtCore.Qt.Key_Escape: self.hideMe() event.accept() return True # Otherwise ... handle in default manner return QtGui.QFrame.event(self, event) def handleReplacePossible(self, state): """ Disable replacing when using regular expressions. """ for w in [self._replaceText, self._replaceAll, self._replace]: w.setEnabled(not state) def startFind(self,event=None): """ Use this rather than show(). It will check if anything is selected in the current editor, and if so, will set that as the initial search string """ # show self.show() self.autoHideTimerReset() es = self.parent() # get needle editor = self.parent().getCurrentEditor() if editor: needle = editor.textCursor().selectedText().replace('\u2029', '\n') if needle: self._findText.setText( needle ) # select the find-text self.selectFindText() def notifyPassBeginEnd(self): self.setStyleSheet("QFrame { background:#f00; }") self._timerBeginEnd.start(300) def resetAppearance(self): self.setStyleSheet("QFrame {}") def selectFindText(self): """ Select the textcontrol for the find needle, and the text in it """ # select text self._findText.selectAll() # focus self._findText.setFocus() def findNext(self, event=None): self.find() #self._findText.setFocus() def findPrevious(self, event=None): self.find(False) # self._findText.setFocus() def findSelection(self, event=None): self.startFind() self.findNext() def findSelectionBw(self, event=None): self.startFind() self.findPrevious() def find(self, forward=True, wrapAround=True): """ The main find method. Returns True if a match was found. """ # Reset timer self.autoHideTimerReset() # get editor editor = self.parent().getCurrentEditor() if not editor: return # find flags flags = QtGui.QTextDocument.FindFlags() if self._caseCheck.isChecked(): flags |= QtGui.QTextDocument.FindCaseSensitively if not forward: flags |= QtGui.QTextDocument.FindBackward #if self._wholeWord.isChecked(): # flags |= QtGui.QTextDocument.FindWholeWords # focus self.selectFindText() # get text to find needle = self._findText.text() if self._regExp.isChecked(): #Make needle a QRegExp; speciffy case-sensitivity here since the #FindCaseSensitively flag is ignored when finding using a QRegExp needle = QtCore.QRegExp(needle, QtCore.Qt.CaseSensitive if self._caseCheck.isChecked() else QtCore.Qt.CaseInsensitive) elif self._wholeWord.isChecked(): # Use regexp, because the default begaviour does not find # whole words correctly, see issue #276 # it should *not* find this in this_word needle = QtCore.QRegExp(r'\b' + needle + r'\b', QtCore.Qt.CaseSensitive if self._caseCheck.isChecked() else QtCore.Qt.CaseInsensitive) # estblish start position cursor = editor.textCursor() result = editor.document().find(needle, cursor, flags) if not result.isNull(): editor.setTextCursor(result) elif wrapAround: self.notifyPassBeginEnd() #Move cursor to start or end of document if forward: cursor.movePosition(cursor.Start) else: cursor.movePosition(cursor.End) #Try again result = editor.document().find(needle, cursor, flags) if not result.isNull(): editor.setTextCursor(result) # done editor.setFocus() return not result.isNull() def replaceOne(self,event=None, wrapAround=True): """ If the currently selected text matches the find string, replaces that text. Then it finds and selects the next match. Returns True if a next match was found. """ # get editor editor = self.parent().getCurrentEditor() if not editor: return #Create a cursor to do the editing cursor = editor.textCursor() # matchCase matchCase = self._caseCheck.isChecked() # get text to find needle = self._findText.text() if not matchCase: needle = needle.lower() # get replacement replacement = self._replaceText.text() # get original text original = cursor.selectedText().replace('\u2029', '\n') if not original: original = '' if not matchCase: original = original.lower() # replace #TODO: < line does not work for regexp-search! if original and original == needle: cursor.insertText( replacement ) # next! return self.find(wrapAround=wrapAround) def replaceAll(self,event=None): #TODO: share a cursor between all replaces, in order to #make this one undo/redo-step # get editor editor = self.parent().getCurrentEditor() if not editor: return # get current position originalPosition = editor.textCursor() # Move to beginning of text and replace all # Make this a single undo operation cursor = editor.textCursor() cursor.beginEditBlock() try: cursor.movePosition(cursor.Start) editor.setTextCursor(cursor) while self.replaceOne(wrapAround=False): pass finally: cursor.endEditBlock() # reset position editor.setTextCursor(originalPosition) class FileTabWidget(CompactTabWidget): """ FileTabWidget(parent) The tab widget that contains the editors and lists all open files. """ def __init__(self, parent): CompactTabWidget.__init__(self, parent, padding=(2,1,0,4)) # Init main file self._mainFile = '' # Init item history self._itemHistory = [] # # Create a corner widget # but = QtGui.QToolButton() # but.setIcon( iep.icons.cross ) # but.setIconSize(QtCore.QSize(16,16)) # but.clicked.connect(self.onClose) # self.setCornerWidget(but) # Bind signal to update items and keep track of history self.currentChanged.connect(self.updateItems) self.currentChanged.connect(self.trackHistory) self.currentChanged.connect(self.setTitleInMainWindowWhenTabChanged) self.setTitleInMainWindowWhenTabChanged(-1) def setTitleInMainWindowWhenTabChanged(self, index): # Valid index? if index<0 or index>=self.count(): iep.main.setMainTitle() # No open file # Remove current item from history currentItem = self.currentItem() if currentItem: currentItem.editor.setTitleInMainWindow() ## Item management def items(self): """ Get the items in the tab widget. These are Item instances, and are in the order in which they are at the tab bar. """ tabBar = self.tabBar() items = [] for i in range(tabBar.count()): item = tabBar.tabData(i) if item is None: continue items.append(item) return items def currentItem(self): """ Get the item corresponding to the currently active tab. """ i = self.currentIndex() if i>=0: return self.tabBar().tabData(i) def getItemAt(self, i): return self.tabBar().tabData(i) def mainItem(self): """ Get the item corresponding to the "main" file. Returns None if there is no main file. """ for item in self.items(): if item.id == self._mainFile: return item else: return None def trackHistory(self, index): """ trackHistory(index) Called when a tab is changed. Puts the current item on top of the history. """ # Valid index? if index<0 or index>=self.count(): return # Remove current item from history currentItem = self.currentItem() while currentItem in self._itemHistory: self._itemHistory.remove(currentItem) # Add current item to history self._itemHistory.insert(0, currentItem) # Limit history size self._itemHistory[10:] = [] def setCurrentItem(self, item): """ _setCurrentItem(self, item) Set a FileItem instance to be the current. If the given item is not in the list, no action is taken. item can be an int, FileItem, or file name. """ if isinstance(item, int): self.setCurrentIndex(item) elif isinstance(item, FileItem): items = self.items() for i in range(self.count()): if item is items[i]: self.setCurrentIndex(i) break elif isinstance(item, str): items = self.items() for i in range(self.count()): if item == items[i].filename: self.setCurrentIndex(i) break else: raise ValueError('item should be int, FileItem or file name.') def selectPreviousItem(self): """ Select the previously selected item. """ # make an old item history if len(self._itemHistory)>1 and self._itemHistory[1] is not None: item = self._itemHistory[1] self.setCurrentItem(item) # just select first one then ... elif self.count(): item = 0 self.setCurrentItem(item) ## Closing, adding and updating def onClose(self): """ onClose() Request to close the current tab. """ self.tabCloseRequested.emit(self.currentIndex()) def removeTab(self, which): """ removeTab(which) Removes the specified tab. which can be an integer, an item, or an editor. """ # Init items = self.items() theIndex = -1 # Find index if isinstance(which, int) and which>=0 and which= 0: # Close tab CompactTabWidget.removeTab(self, theIndex) # Delete editor items[theIndex].editor.destroy() gc.collect() def addItem(self, item, update=True): """ addItem(item, update=True) Add item to the tab widget. Set update to false if you are calling this method many times in a row. Then use updateItemsFull() to update the tab widget. """ # Add tab and widget i = self.addTab(item.editor, item.name) tabBut = EditorTabToolButton(self.tabBar()) self.tabBar().setTabButton(i, QtGui.QTabBar.LeftSide, tabBut) # Keep informed about changes item.editor.somethingChanged.connect(self.updateItems) item.editor.blockCountChanged.connect(self.updateItems) item.editor.breakPointsChanged.connect(self.parent().updateBreakPoints) # Store the item at the tab self.tabBar().setTabData(i, item) # Emit the currentChanged again (already emitted on addTab), because # now the itemdata is actually set self.currentChanged.emit(self.currentIndex()) # Update if update: self.updateItems() def updateItemsFull(self): """ updateItemsFull() Update the appearance of the items and also updates names and re-aligns the items. """ self.updateItems() self.tabBar().alignTabs() def updateItems(self): """ updateItems() Update the appearance of the items. """ # Get items and tab bar items = self.items() tabBar = self.tabBar() for i in range(len(items)): # Get item item = items[i] if item is None: continue # Update name and tooltip if item.dirty: #tabBar.setTabText(i, '*'+item.name) tabBar.setTabToolTip(i, item.filename + ' [modified]') else: tabBar.setTabText(i, item.name) tabBar.setTabToolTip(i, item.filename) # Determine text color. Is main file? Is current? if self._mainFile == item.id: tabBar.setTabTextColor(i, QtGui.QColor('#008')) elif i == self.currentIndex(): tabBar.setTabTextColor(i, QtGui.QColor('#000')) else: tabBar.setTabTextColor(i, QtGui.QColor('#444')) # Get number of blocks nBlocks = item.editor.blockCount() if nBlocks == 1 and not item.editor.toPlainText(): nBlocks = 0 # Update appearance of icon but = tabBar.tabButton(i, QtGui.QTabBar.LeftSide) but.updateIcon(item.dirty, self._mainFile==item.id, item.pinned, nBlocks) class EditorTabs(QtGui.QWidget): """ The EditorTabs instance manages the open files and corresponding editors. It does the saving loading etc. """ # Signal to indicate that a breakpoint has changed, emits dict breakPointsChanged = QtCore.Signal(object) # Signal to notify that a different file was selected currentChanged = QtCore.Signal() # Signal to notify that the parser has parsed the text (emit by parser) parserDone = QtCore.Signal() def __init__(self, parent): QtGui.QWidget.__init__(self,parent) # keep a booking of opened directories self._lastpath = '' # keep track of all breakpoints self._breakPoints = {} # create tab widget self._tabs = FileTabWidget(self) self._tabs.tabCloseRequested.connect(self.closeFile) self._tabs.currentChanged.connect(self.onCurrentChanged) # Double clicking a tab saves the file, clicking on the bar opens a new file self._tabs.tabBar().tabDoubleClicked.connect(self.saveFile) self._tabs.tabBar().barDoubleClicked.connect(self.newFile) # Create find/replace widget self._findReplace = FindReplaceWidget(self) # create box layout control and add widgets self._boxLayout = QtGui.QVBoxLayout(self) self._boxLayout.addWidget(self._tabs, 1) self._boxLayout.addWidget(self._findReplace, 0) # spacing of widgets self._boxLayout.setSpacing(0) # apply self.setLayout(self._boxLayout) #self.setAttribute(QtCore.Qt.WA_AlwaysShowToolTips,True) # accept drops self.setAcceptDrops(True) # restore state (call later so that the menu module can bind to the # currentChanged signal first, in order to set tab/indentation # checkmarks appropriately) # todo: Resetting the scrolling would work better if set after # the widgets are properly sized. iep.callLater(self.restoreEditorState) def addContextMenu(self): """ Adds a context menu to the tab bar """ from iep.iepcore.menu import EditorTabContextMenu self._menu = EditorTabContextMenu(self, "EditorTabMenu") self._tabs.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self._tabs.customContextMenuRequested.connect(self.contextMenuTriggered) def contextMenuTriggered(self, p): """ Called when context menu is clicked """ # Get index of current tab index = self._tabs.tabBar().tabAt(p) self._menu.setIndex(index) # Show menu if item is available if index >= 0: p = self._tabs.tabBar().tabRect(index).bottomLeft() self._menu.popup(self._tabs.tabBar().mapToGlobal(p)) def onCurrentChanged(self): self.currentChanged.emit() def getCurrentEditor(self): """ Get the currently active editor. """ item = self._tabs.currentItem() if item: return item.editor else: return None def getMainEditor(self): """ Get the editor that represents the main file, or None if there is no main file. """ item = self._tabs.mainItem() if item: return item.editor else: return None def __iter__(self): tmp = [item.editor for item in self._tabs.items()] return tmp.__iter__() def updateBreakPoints(self, editor=None): # Get list of editors to update keypoints for if editor is None: editors = self self._breakPoints = {} # Full reset else: editors = [editor] # Update our keypoints dict for editor in editors: fname = editor._filename or editor._name if not fname: continue linenumbers = editor.breakPoints() if linenumbers: self._breakPoints[fname] = linenumbers else: self._breakPoints.pop(fname, None) # Emit signal so shells can update the kernel self.breakPointsChanged.emit(self._breakPoints) def setDebugLineIndicators(self, *filename_linenr): """ Set the debug line indicator. There is one indicator global to IEP, corresponding to the last shell for which we received the indicator. """ if len(filename_linenr) and filename_linenr[0] is None: filename_linenr = [] # Normalize case filename_linenr = [(os.path.normcase(i[0]), int(i[1])) for i in filename_linenr] for item in self._tabs.items(): # Prepare editor = item._editor fname = editor._filename or editor._name fname = os.path.normcase(fname) # Reset editor.setDebugLineIndicator(None) # Set for filename, linenr in filename_linenr: if fname == filename: active = (filename, linenr) == filename_linenr[-1] editor.setDebugLineIndicator(linenr, active) ## Loading ad saving files def dragEnterEvent(self, event): if event.mimeData().hasUrls(): event.acceptProposedAction() def dropEvent(self, event): """ Drop files in the list. """ for qurl in event.mimeData().urls(): path = str( qurl.toLocalFile() ) if os.path.isfile(path): self.loadFile(path) elif os.path.isdir(path): self.loadDir(path) else: pass def newFile(self): """ Create a new (unsaved) file. """ # create editor editor = createEditor(self, None) editor.document().setModified(False) # Start out as OK # add to list item = FileItem(editor) self._tabs.addItem(item) self._tabs.setCurrentItem(item) # set focus to new file editor.setFocus() return item def openFile(self): """ Create a dialog for the user to select a file. """ # determine start dir # todo: better selection of dir, using project manager editor = self.getCurrentEditor() if editor and editor._filename: startdir = os.path.split(editor._filename)[0] else: startdir = self._lastpath if (not startdir) or (not os.path.isdir(startdir)): startdir = '' # show dialog msg = "Select one or more files to open" filter = "Python (*.py *.pyw);;" filter += "Pyrex (*.pyi *.pyx *.pxd);;" filter += "C (*.c *.h *.cpp *.c++);;" #filter += "Py+Cy+C (*.py *.pyw *.pyi *.pyx *.pxd *.c *.h *.cpp);;" filter += "All (*)" if True: filenames = QtGui.QFileDialog.getOpenFileNames(self, msg, startdir, filter) if isinstance(filenames, tuple): # PySide filenames = filenames[0] else: # Example how to preselect files, can be used when the users # opens a file in a project to select all files currently not # loaded. d = QtGui.QFileDialog(self, msg, startdir, filter) d.setFileMode(d.ExistingFiles) d.selectFile('"codeparser.py" "editorStack.py"') d.exec_() if d.result(): filenames = d.selectedFiles() else: filenames = [] # were some selected? if not filenames: return # load for filename in filenames: self.loadFile(filename) def openDir(self): """ Create a dialog for the user to select a directory. """ # determine start dir editor = self.getCurrentEditor() if editor and editor._filename: startdir = os.path.split(editor._filename)[0] else: startdir = self._lastpath if not os.path.isdir(startdir): startdir = '' # show dialog msg = "Select a directory to open" dirname = QtGui.QFileDialog.getExistingDirectory(self, msg, startdir) # was a dir selected? if not dirname: return # load self.loadDir(dirname) def loadFile(self, filename, updateTabs=True): """ Load the specified file. On success returns the item of the file, also if it was already open.""" # Note that by giving the name of a tempfile, we can select that # temp file. # normalize path if filename[0] != '<': filename = normalizePath(filename) if not filename: return None # if the file is already open... for item in self._tabs.items(): if item.id == filename: # id gets _filename or _name for temp files break else: item = None if item: self._tabs.setCurrentItem(item) print("File already open: '{}'".format(filename)) return item # create editor try: editor = createEditor(self, filename) except Exception as err: # Notify in logger print("Error loading file: ", err) # Make sure the user knows m = QtGui.QMessageBox(self) m.setWindowTitle("Error loading file") m.setText(str(err)) m.setIcon(m.Warning) m.exec_() return None # create list item item = FileItem(editor) self._tabs.addItem(item, updateTabs) if updateTabs: self._tabs.setCurrentItem(item) # store the path self._lastpath = os.path.dirname(item.filename) return item def loadDir(self, path): """ Create a project with the dir's name and add all files contained in the directory to it. extensions is a komma separated list of extenstions of files to accept... """ # if the path does not exist, stop path = os.path.abspath(path) if not os.path.isdir(path): print("ERROR loading dir: the specified directory does not exist!") return # get extensions extensions = iep.config.advanced.fileExtensionsToLoadFromDir extensions = extensions.replace(',',' ').replace(';',' ') extensions = ["."+a.lstrip(".").strip() for a in extensions.split(" ")] # init item item = None # open all qualified files... self._tabs.setUpdatesEnabled(False) try: filelist = os.listdir(path) for filename in filelist: filename = os.path.join(path, filename) ext = os.path.splitext(filename)[1] if str(ext) in extensions: item = self.loadFile(filename, False) finally: self._tabs.setUpdatesEnabled(True) self._tabs.updateItems() # return lastopened item return item def saveFileAs(self, editor=None): """ Create a dialog for the user to select a file. returns: True if succesfull, False if fails """ # get editor if editor is None: editor = self.getCurrentEditor() if editor is None: return False # get startdir if editor._filename: startdir = os.path.dirname(editor._filename) else: startdir = self._lastpath # Try the file browser or project manager to suggest a path fileBrowser = iep.toolManager.getTool('iepfilebrowser') projectManager = iep.toolManager.getTool('iepprojectmanager') if fileBrowser: startdir = fileBrowser.getDefaultSavePath() if projectManager and not startdir: startdir = projectManager.getDefaultSavePath() if not os.path.isdir(startdir): startdir = '' # show dialog msg = "Select the file to save to" filter = "Python (*.py *.pyw);;" filter += "Pyrex (*.pyi *.pyx *.pxd);;" filter += "C (*.c *.h *.cpp);;" #filter += "Py+Cy+C (*.py *.pyw *.pyi *.pyx *.pxd *.c *.h *.cpp);;" filter += "All (*.*)" filename = QtGui.QFileDialog.getSaveFileName(self, msg, startdir, filter) if isinstance(filename, tuple): # PySide filename = filename[0] # give python extension if it has no extension head, tail = os.path.split(filename) if tail and '.' not in tail: filename += '.py' # proceed or cancel if filename: return self.saveFile(editor, filename) else: return False # Cancel was pressed def saveFile(self, editor=None, filename=None): """ Save the file. returns: True if succesfull, False if fails """ # get editor if editor is None: editor = self.getCurrentEditor() elif isinstance(editor, int): index = editor editor = None if index>=0: item = self._tabs.items()[index] editor = item.editor if editor is None: return False # get filename if filename is None: filename = editor._filename if not filename: return self.saveFileAs(editor) # let the editor do the low level stuff... try: editor.save(filename) except Exception as err: # Notify in logger print("Error saving file:",err) # Make sure the user knows m = QtGui.QMessageBox(self) m.setWindowTitle("Error saving file") m.setText(str(err)) m.setIcon(m.Warning) m.exec_() # Return now return False # get actual normalized filename filename = editor._filename # notify # TODO: message concerining line endings print("saved file: {} ({})".format(filename, editor.lineEndingsHumanReadable)) self._tabs.updateItems() # todo: this is where we once detected whether the file being saved was a style file. # Notify done return True def saveAllFiles(self): """ Save all files""" for editor in self: self.saveFile(editor) ## Closing files / closing down def askToSaveFileIfDirty(self, editor): """ askToSaveFileIfDirty(editor) If the given file is not saved, pop up a dialog where the user can save the file . Returns 1 if file need not be saved. Returns 2 if file was saved. Returns 3 if user discarded changes. Returns 0 if cancelled. """ # should we ask to save the file? if editor.document().isModified(): # Ask user what to do result = simpleDialog(editor, "Closing", "Save modified file?", ['Discard', 'Cancel', 'Save'], 'Save') result = result.lower() # Get result and act if result == 'save': return 2 if self.saveFile(editor) else 0 elif result == 'discard': return 3 else: # cancel return 0 return 1 def closeFile(self, editor=None): """ Close the selected (or current) editor. Returns same result as askToSaveFileIfDirty() """ # get editor if editor is None: editor = self.getCurrentEditor() item = self._tabs.currentItem() elif isinstance(editor, int): index = editor editor, item = None, None if index>=0: item = self._tabs.items()[index] editor = item.editor else: item = None for i in self._tabs.items(): if i.editor is editor: item = i if editor is None or item is None: return # Ask if dirty result = self.askToSaveFileIfDirty(editor) # Ask if closing pinned file if result and item.pinned: result = simpleDialog(editor, "Closing pinned", "Are you sure you want to close this pinned file?", ['Close', 'Cancel'], 'Cancel') result = result == 'Close' # ok, close... if result: if editor._name.startswith("= dragDist: self._menuPressed = False def mouseReleaseEvent(self, event): event.ignore() if self._menuPressed: tabs = self.parent().parent() pos = self.mapTo(tabs, event.pos()) tabs.customContextMenuRequested.emit(pos) def enterEvent(self, event): QtGui.QToolButton.enterEvent(self, event) self._menuarrow = self._menuarrow2 self.setIcon() self._menuPressed = False def leaveEvent(self, event): QtGui.QToolButton.leaveEvent(self, event) self._menuarrow = self._menuarrow1 self.setIcon() self._menuPressed = False def setIcon(self, icon=None): # Store icon if given, otherwise use buffered version if icon is not None: self._icon = icon # Compose icon by superimposing the menuarrow pixmap artist = IconArtist(self.SIZE) if self._icon: artist.addLayer(self._icon, 5, 0) artist.addLayer(self._menuarrow, 0,0) icon = artist.finish() # Set icon QtGui.QToolButton.setIcon(self, icon) def _createMenuArrowPixmap(self, strength): artist = IconArtist() artist.addMenuArrow(strength) return artist.finish().pixmap(16,16) class TabToolButton(QtGui.QToolButton): """ TabToolButton Base menu for editor and shell tabs. """ SIZE = 16, 16 def __init__(self, *args): QtGui.QToolButton.__init__(self, *args) # Init self.setIconSize(QtCore.QSize(*self.SIZE)) self.setStyleSheet("QToolButton{ border: none; }") def mousePressEvent(self, event): # Ignore event so that the tabbar will change to that tab event.ignore() class TabToolButtonWithCloseButton(TabToolButton): """ TabToolButtonWithCloseButton Tool button that wraps the icon in a slightly larger icon that contains a small cross that can be used to invoke a close request. """ SIZE = 22, 16 CROSS_OFFSET = 0, 2 def __init__(self, *args): TabToolButton.__init__(self, *args) # Variable to keep icon self._icon = None self._cross = self.getCrossPixmap1() # For mouse tracking inside icon self.setMouseTracking(True) self._overCross = False def _isOverCross(self, pos): x1, x2 = self.CROSS_OFFSET[0], self.CROSS_OFFSET[0]+5+1 y1, y2 = self.CROSS_OFFSET[1], self.CROSS_OFFSET[1]+5+1 if pos.x()>=x1 and pos.x()<=x2 and pos.y()>=y1 and pos.y()<=y2: return True else: return False def mousePressEvent(self, event): if self._isOverCross(event.pos()): # Accept event so that the tabbar will NOT change to that tab event.accept() else: event.ignore() def mouseReleaseEvent(self, event): if self._isOverCross(event.pos()): event.accept() # Get tabs tabs = self.parent().parent() # Get index from position pos = self.mapTo(tabs, event.pos()) index = tabs.tabBar().tabAt(pos) # Close it tabs.tabCloseRequested.emit(index) else: event.ignore() def mouseMoveEvent(self, event): QtGui.QToolButton.mouseMoveEvent(self, event) new_overCross = self._isOverCross(event.pos()) if new_overCross != self._overCross: self._overCross = new_overCross if new_overCross: self._cross = self.getCrossPixmap2() else: self._cross = self.getCrossPixmap1() self.setIcon() def leaveEvent(self, event): if self._overCross: self._overCross = False self._cross = self.getCrossPixmap1() self.setIcon() def setIcon(self, icon=None): # Store icon if given, otherwise use buffered version if icon is not None: self._icon = icon # Compose icon by superimposing the menuarrow pixmap artist = IconArtist(self.SIZE) if self._icon: if self.CROSS_OFFSET[0] > 8: artist.addLayer(self._icon, 0,0) else: artist.addLayer(self._icon, 6,0) artist.addLayer(self._cross, *self.CROSS_OFFSET) icon = artist.finish() # Set icon QtGui.QToolButton.setIcon(self, icon) def _createMenuArrowPixmap(self, strength): artist = IconArtist() artist.addMenuArrow(strength) return artist.finish().pixmap(16,16) def _createCrossPixmap(self, alpha): artist = IconArtist((5,5)) # artist.setPenColor((0,0,0,alpha)) # artist.addPoint(0,0); artist.addPoint(1,1) artist.addPoint(2,2); artist.addPoint(3,3) artist.addPoint(4,4); artist.addPoint(0,4); artist.addPoint(1,3) artist.addPoint(3,1); artist.addPoint(4,0) # artist.setPenColor((0,0,0,int(0.5*alpha))) # artist.addPoint(1,0); artist.addPoint(0,1) artist.addPoint(2,1); artist.addPoint(1,2) artist.addPoint(3,2); artist.addPoint(2,3) artist.addPoint(4,3); artist.addPoint(3,4) # artist.addPoint(0,3); artist.addPoint(1,4) artist.addPoint(3,0); artist.addPoint(4,1) # return artist.finish().pixmap(5,5) def getCrossPixmap1(self): if hasattr(self, '_cross1'): pm = self._cross1 else: pm = self._createCrossPixmap(50) return pm def getCrossPixmap2(self): if hasattr(self, '_cross2'): pm = self._cross2 else: pm = self._createCrossPixmap(240) # Set return pm class EditorTabToolButton(TabToolButtonWithCloseButton): """ Button for the tabs of the editors. This is just a tight wrapper for the icon. """ def updateIcon(self, isDirty, isMain, isPinned, nBlocks=10001): # Init drawing artist = IconArtist() # Create base if isDirty: artist.addLayer('page_white_dirty') artist.setPenColor('#f00') else: artist.addLayer('page_white') artist.setPenColor('#444') # Paint lines if not nBlocks: nLines = 0 elif nBlocks <= 10: nLines = 1 elif nBlocks <= 100: nLines = 2 elif nBlocks <= 1000: nLines = 3 elif nBlocks <= 10000: nLines = 4 else: nLines = 5 # fraction = float(nBlocks) / 10**nLines fraction = min(fraction, 1.0) # for i in range(nLines): y = 4 + 2 * i n = 5 if y>6: n = 8 #if i == nLines-1: # n = int(fraction * n) artist.addLine(4,y,4+n,y) # Overlays if isMain: artist.addLayer('overlay_star') if isPinned: artist.addLayer('overlay_thumbnail') if isDirty: artist.addLayer('overlay_disk') # Apply self.setIcon(artist.finish()) class ShellIconMaker: """ Object that can make an icon for the shells """ POSITION = (6,7) # absolute position of center of wheel. # Relative position for the wheel at two levels. Center is at (3,,3) POSITIONS1 = [(2,2), (3,2), (4,2), (4,3), (4,4), (3,4), (2,4), (2,3)] POSITIONS2 = [ (2,1), (3,1), (4,1), (5,2), (5,3), (5,4), (4,5), (3,5), (2,5), (1,4), (1,3), (1,2) ] # Maps to make transitions between levels more natural MAP1to2 = [1,2, 4,5, 7,8, 10,11] MAP2to1 = [1,2,3, 3,4,5, 5,6,7, 7,0,1] MAX_ITERS_IN_LEVEL_1 = 2 def __init__(self, objectWithIcon): self._objectWithIcon = objectWithIcon # Motion properties self._index = 0 self._level = 0 self._count = 0 # to count number of iters in level 1 # Prepare blob pixmap self._blob = self._createBlobPixmap() self._legs = self._createLegsPixmap() # Create timer self._timer = QtCore.QTimer(None) self._timer.setInterval(150) self._timer.setSingleShot(False) self._timer.timeout.connect(self.onTimer) def setIcon(self, icon): self._objectWithIcon.setIcon(icon) def _createBlobPixmap(self): artist = IconArtist() artist.setPenColor((0,150,0,255)) artist.addPoint(1,1) artist.setPenColor((0,150,0, 200)) artist.addPoint(1,0); artist.addPoint(1,2) artist.addPoint(0,1); artist.addPoint(2,1) artist.setPenColor((0,150,0, 100)) artist.addPoint(0,0); artist.addPoint(2,0) artist.addPoint(0,2); artist.addPoint(2,2) return artist.finish().pixmap(16,16) def _createLegsPixmap(self): artist = IconArtist() x,y = self.POSITION artist.setPenColor((0,50,0,150)) artist.addPoint(x+1,y-1); artist.addPoint(x+1,y-2); artist.addPoint(x+0,y-2) artist.addPoint(x+3,y+1); artist.addPoint(x+4,y+1); artist.addPoint(x+4,y+2) artist.addPoint(x+2,y+3); artist.addPoint(x+2,y+4) artist.addPoint(x+0,y+3); artist.addPoint(x+0,y+4) artist.addPoint(x-1,y+2); artist.addPoint(x-2,y+2) artist.addPoint(x-1,y+0); artist.addPoint(x-2,y+0) return artist.finish().pixmap(16,16) def updateIcon(self, status='Ready'): """ updateIcon(status) Public method to set what state the icon must show. """ # Normalize and store if isinstance(status, str): status = status.lower() self._status = status # Handle if status == 'busy': self._index = 0 if self._level == 2: self._index = self.MAP2to1[self._index] self._level = 1 elif status == 'very busy': self._index = 0 if self._level == 1: self._index = self.MAP1to2[self._index] self._level = 2 else: self._level = 0 # At least one timer iteration self._timer.start() def _nextIndex(self): self._index += 1 if self._level == 1 and self._index >= 8: self._index = 0 elif self._level == 2 and self._index >= 12: self._index = 0 def _index1(self): return self._index def _index2(self): n = [0, 8, 12][self._level] index = self._index + n/2 if index >= n: index -= n return int(index) def onTimer(self): """ onTimer() Invoked on each timer iteration. Will call the static drawing methods if in level 0. Otherwise will invoke drawInMotion(). This method also checks if we should change levels and calculates how this is best achieved. """ if self._level == 0: # Turn of timer self._timer.stop() # Draw if self._status in ['ready', 'more']: self.drawReady() elif self._status == 'debug': self.drawDebug() elif self._status == 'dead': self.drawDead() else: self.drawDead() elif self._level == 1: # Draw self.drawInMotion() # Next, this is always intermediate self._nextIndex() self._count += 1 elif self._level == 2: # Draw self.drawInMotion() # Next self._nextIndex() def drawReady(self): """ drawReady() Draw static icon for when in ready mode. """ artist = IconArtist("application") artist.addLayer(self._blob, *self.POSITION) self.setIcon(artist.finish()) def drawDebug(self): """ drawDebug() Draw static icon for when in debug mode. """ artist = IconArtist("application") artist.addLayer(self._blob, *self.POSITION) artist.addLayer(self._legs) self.setIcon(artist.finish()) def drawDead(self): """ drawDead() Draw static empty icon for when the kernel is dead. """ artist = IconArtist("application") self.setIcon(artist.finish()) def drawInMotion(self): """ drawInMotion() Draw one frame of the icon in motion. Position of the blobs is determined from the index and the list of locations. """ # Init drawing artist = IconArtist("application") # Define params dx, dy = self.POSITION[0]-3, self.POSITION[1]-3 blob = self._blob # if self._level == 1: positions = self.POSITIONS1 elif self._level == 2: positions = self.POSITIONS2 # Draw pos1 = positions[self._index1()] pos2 = positions[self._index2()] artist.addLayer(blob, pos1[0]+dx, pos1[1]+dy) artist.addLayer(blob, pos2[0]+dx, pos2[1]+dy) # Done self.setIcon(artist.finish()) iep-3.7/iep/iepcore/commandline.py0000664000175000017500000001235512352001043017413 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2014, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module to deal with command line arguments. In specific, this allows doing "iep some_file.py" and the file will be opened in an existing IEP window (if available) or a new IEP process is started to open the file. This module is used at the very early stages of starting IEP, and also in main.py to apply any command line args for the current process, and to closse down the server when IEP is closed. """ import sys import os from yoton.clientserver import RequestServer, do_request import iep # Local address to host on. we use yoton's port hash to have an arbitrary port ADDRESS = 'localhost:iepserver' class Server(RequestServer): """ Server that listens on a port for commands. The commands can be send by executing the IEP executable with command line arguments. """ def handle_request(self, request): """ This is where the requests enter. """ # Get command request = request.strip() command, _, arg = request.partition(' ') # Handle command try: reply = handle_command(command, arg) except Exception as err: msg = 'Error handling request %r:\n%s' % (request, str(err)) iep.callLater(print, msg) return msg else: iep.callLater(print, 'Request:', request) iep.callLater(print, 'Reply:', reply) return reply def handle_command(command, arg): """ Function that handles all IEP commands. This gets called either from the server, or from the code that processed command line args. """ if not command: return 'empty command?' elif command == 'testerr': return 1/0 elif command == 'stopserver': # For efficiently stopping the server if server: server.stop() return 'Stopped the server' elif command == 'echo': # For testing return 'echo %r' % arg elif command == 'open': # Open a file in the editor if not arg: return 'The open command requires a filename.' iep.callLater(iep.editors.loadFile, arg) return 'Opened file %r' % arg elif command == 'new': # Open a new (temp) file in the editor iep.callLater(iep.editors.newFile) return 'Created new file' elif command == 'close': # Close IEP iep.callLater(iep.main.close) return 'Closing IEP' else: # Assume the user wanted to open a file fname = (command + ' ' + arg).rstrip() if not iep.editors: return 'Still warming up ...' else: iep.callLater(iep.editors.loadFile, fname) return 'Try opening file %r' % fname # We should always return. So if we get here, it is a bug. # Return something so that we can be aware. return 'error ' + command def handle_cmd_args(): """ Handle command line arguments by sending them to the server. Returns a result string if any commands were processed, and None otherwise. """ args = sys.argv[1:] request = ' '.join(args) if 'psn_' in request and not os.path.isfile(request): request = ' '.join(args[1:]) # An OSX thing when clicking app icon request = request.strip() # if not request: return None else: # Always send to server, even if we are the ones that run the server try: return do_request(ADDRESS, request, 0.4).rstrip() except Exception as err: print('Could not process command line args:\n%s' % str(err)) return None def stop_our_server(): """ Stop our server, for shutting down nicely. This is faster than calling server.stop(), because in the latter case the server will need to timeout (0.25 s) before it sees that it needs to stop. """ if is_our_server_running(): try: server.stop() # Post a stop message do_request(ADDRESS, 'stopserver', 0.1) # trigger print('Stopped our command server.') except Exception as err: print('Failed to stop command server:') print(err) def is_our_server_running(): """ Return True if our server is running. If it is, this process is the main IEP; the first IEP that was started. If the server is not running, this is probably not the first IEP, but there might also be problem with starting the server. """ return server and server.isAlive() def is_iep_server_running(): """ Test whether the IEP server is running *somewhere* (not necesarily in this process). """ try: res = do_request(ADDRESS, 'echo', 0.2) return res.startswith('echo') except Exception: return False # Shold we start the server? _try_start_server = True if sys.platform.startswith('win'): _try_start_server = not is_iep_server_running() # Create server server_err = None server = None try: if _try_start_server: server = Server(ADDRESS) server.start() except OSError as err: server_err = err server = None iep-3.7/iep/iepcore/splash.py0000664000175000017500000000612212304072570016424 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module splash Defines splash window shown during startup. """ import os, sys, time import iep from pyzolib.qt import QtCore, QtGui STYLESHEET = """ QWidget { background-color: #268bd2; } QFrame { background-image: url("%s"); background-repeat: no-repeat; background-position: center; } QLabel { color: #222; background: #46abf2; border-radius:20px; } """ splash_text = """

This is the Interactive Editor for Python {distro}

Version {version}

IEP is open source software and freely available for everyone. Read more at http://iep-project.org

""" class LogoWidget(QtGui.QFrame): def __init__(self, parent): QtGui.QFrame.__init__(self, parent) self.setMinimumSize(256, 256) self.setMaximumSize(256, 256) class LabelWidget(QtGui.QWidget): def __init__(self, parent, distro=None): QtGui.QWidget.__init__(self, parent) self.setMinimumSize(360, 256) # Ensure title fits nicely # Create label widget and costumize self._label = QtGui.QLabel(self) self._label.setTextFormat(QtCore.Qt.RichText) self._label.setOpenExternalLinks(True) self._label.setWordWrap(True) self._label.setMargin(20) # Set font size (absolute value) font = self._label.font() font.setPointSize(11) #(font.pointSize()+1) self._label.setFont(font) # Build distrotext = '' if distro: distrotext = '
brought to you by %s.' % distro text = splash_text.format(distro=distrotext, version=iep.__version__) # Set text self._label.setText(text) layout = QtGui.QVBoxLayout(self) self.setLayout(layout) layout.addStretch(1) layout.addWidget(self._label, 0) layout.addStretch(1) class SplashWidget(QtGui.QWidget): """ A splash widget. """ def __init__(self, parent, **kwargs): QtGui.QWidget.__init__(self, parent) self._left = LogoWidget(self) self._right = LabelWidget(self, **kwargs) # Layout layout = QtGui.QHBoxLayout(self) self.setLayout(layout) #layout.setContentsMargins(0,0,0,0) layout.setSpacing(25) layout.addStretch(1) layout.addWidget(self._left, 0) layout.addWidget(self._right, 0) layout.addStretch(1) # Change background of main window to create a splash-screen-efefct iconImage = 'ieplogo256.png' iconImage = os.path.join(iep.iepDir, 'resources','appicons', iconImage) iconImage = iconImage.replace(os.path.sep, '/') # Fix for Windows self.setStyleSheet(STYLESHEET % iconImage) if __name__ == '__main__': w = SplashWidget(None, distro='some arbitrary distro') w.resize(800,600) w.show() iep-3.7/iep/iepcore/baseTextCtrl.py0000664000175000017500000005317612550703310017545 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module baseTextCtrl Defines the base text control to be inherited by the shell and editor classes. Implements styling, introspection and a bit of other stuff that is common for both shells and editors. """ import iep import os, sys, time import weakref from pyzolib import ssdf from iep.iepcore.iepLogging import print import iep.codeeditor.parsers.tokens as Tokens from pyzolib.qt import QtCore, QtGui qt = QtGui # Define style stuff subStyleStuff = {} #subStyleStuff = { 'face': Qsci.QsciScintillaBase.SCI_STYLESETFONT , # 'fore': Qsci.QsciScintillaBase.SCI_STYLESETFORE, # 'back': Qsci.QsciScintillaBase.SCI_STYLESETBACK, # 'size': Qsci.QsciScintillaBase.SCI_STYLESETSIZE, # 'bold': Qsci.QsciScintillaBase.SCI_STYLESETBOLD, # 'italic': Qsci.QsciScintillaBase.SCI_STYLESETITALIC, # 'underline': Qsci.QsciScintillaBase.SCI_STYLESETUNDERLINE} def normalizePath(path): """ Normalize the path given. All slashes will be made the same (and doubles removed) The real case as stored on the file system is recovered. Returns None on error. """ # normalize path = os.path.abspath(path) # make sure it is defined from the drive up path = os.path.normpath(path) # If does not exist, return as is. # This also happens if the path's case is incorrect and the # file system is case sensitive. That's ok, because the stuff we # do below is intended to get the path right on case insensitive # file systems. if not os.path.isfile(path): return path # split drive name from the rest drive, rest = os.path.splitdrive(path) fullpath = drive.upper() + os.sep # make lowercase and split in parts parts = rest.lower().split(os.sep) parts = [part for part in parts if part] for part in parts: options = [x for x in os.listdir(fullpath) if x.lower()==part] if len(options) > 1: print("Error normalizing path: Ambiguous path names!") return path elif not options: print("Invalid path (part %s) in %s" % (part, fullpath)) return path fullpath = os.path.join(fullpath, options[0]) # remove last sep return fullpath def parseLine_autocomplete(tokens): """ Given a list of tokens (from start to cursor position) returns a tuple (base, name). autocomp_parse("eat = banan") -> "", "banan" ...("eat = food.fruit.ban") -> "food.fruit", "ban" When no match found, both elements are an empty string. """ if not len(tokens): return "","" if isinstance(tokens[-1],Tokens.NonIdentifierToken) and str(tokens[-1])=='.': name = '' elif isinstance(tokens[-1],(Tokens.IdentifierToken,Tokens.KeywordToken)): name = str(tokens[-1]) else: return '','' needle = '' #Now go through the remaining tokens in reverse order for token in tokens[-2::-1]: if isinstance(token,Tokens.NonIdentifierToken) and str(token)=='.': needle = str(token) + needle elif isinstance(token,(Tokens.IdentifierToken,Tokens.KeywordToken)): needle = str(token) + needle else: break if needle.endswith('.'): needle = needle[:-1] return needle, name def parseLine_signature(tokens): """ Given a list of tokens (from start to cursor position) returns a tuple (name, needle, stats). stats is another tuple: - location of end bracket - amount of kommas till cursor (taking nested brackets into account) """ openBraces = [] #Positions at which braces are opened for token in tokens: if not isinstance(token,Tokens.NonIdentifierToken): continue for i,c in enumerate(str(token)): if c=='(': openBraces.append(token.start + i) elif c==')': if len(openBraces): openBraces.pop() if len(openBraces): i = openBraces[-1] # Now trim the token list up to (but not inculding) position of openBraces tokens = list(filter(lambda token: token.start < i, tokens)) # Trim the last token if len(tokens): tokens[-1].end = i name, needle = parseLine_autocomplete(tokens) return name, needle, (i,0) #TODO: implement stats return "","",(0,0) class KeyEvent: """ A simple class for easier key events. """ def __init__(self, key): self.key = key try: self.char = chr(key) except ValueError: self.char = "" def makeBytes(text): """ Make sure the argument is bytes, converting with UTF-8 encoding if it is a string. """ if isinstance(text, bytes): return text elif isinstance(text, str): return text.encode('utf-8') else: raise ValueError("Expected str or bytes!") _allScintillas = [] def getAllScintillas(): """ Get a list of all the scintialla editing components that derive from BaseTextCtrl. Used mainly by the menu. """ for i in reversed(range(len(_allScintillas))): e = _allScintillas[i]() if e is None: _allScintillas.pop(i) else: yield e iep.getAllScintillas = getAllScintillas from iep import codeeditor class BaseTextCtrl(codeeditor.CodeEditor): """ The base text control class. Inherited by the shell class and the IEP editor. The class implements autocompletion, calltips, and auto-help Inherits from QsciScintilla. I tried to clean up the rather dirty api by using more sensible names. Hereby I apply the following rules: - if you set something, the method starts with "set" - if you get something, the method starts with "get" - a position is the integer position fron the start of the document - a linenr is the number of a line, an index the position on that line - all the above indices apply to the bytes (encoded utf-8) in which the text is stored. If you have unicode text, they do not apply! - the method name mentions explicityly what you get. getBytes() returns the bytes of the document, getString() gets the unicode string that it represents. This applies to the get-methods. the set-methods use the term text, and automatically convert to bytes using UTF-8 encoding when a string is given. """ def __init__(self, *args, **kwds): super().__init__(*args, **kwds) # Set font and zooming self.setFont(iep.config.view.fontname) self.setZoom(iep.config.view.zoom) # Create timer for autocompletion delay self._delayTimer = QtCore.QTimer(self) self._delayTimer.setSingleShot(True) self._delayTimer.timeout.connect(self._introspectNow) # For buffering autocompletion and calltip info self._callTipBuffer_name = '' self._callTipBuffer_time = 0 self._callTipBuffer_result = '' self._autoCompBuffer_name = '' self._autoCompBuffer_time = 0 self._autoCompBuffer_result = [] # The string with names given to SCI_AUTOCSHOW self._autoCompNameString = '' # Set autocomp accept key to default if necessary. # We force it to be string (see issue 134) if not isinstance(iep.config.settings.autoComplete_acceptKeys, str): iep.config.settings.autoComplete_acceptKeys = 'Tab' # Set autocomp accept keys qtKeys = [] for key in iep.config.settings.autoComplete_acceptKeys.split(' '): if len(key) > 1: key = 'Key_' + key[0].upper() + key[1:].lower() qtkey = getattr(QtCore.Qt, key, None) else: qtkey = ord(key) if qtkey: qtKeys.append(qtkey) self.setAutoCompletionAcceptKeys(*qtKeys) self.completer().highlighted.connect(self.updateHelp) self.setIndentUsingSpaces(iep.config.settings.defaultIndentUsingSpaces) self.setIndentWidth(iep.config.settings.defaultIndentWidth) self.setAutocompletPopupSize(*iep.config.view.autoComplete_popupSize) def _isValidPython(self): """ _isValidPython() Check if the code at the cursor is valid python: - the active lexer is the python lexer - the style at the cursor is "default" """ #TODO: return True def introspect(self, tryAutoComp=False): """ introspect(tryAutoComp=False) The starting point for introspection (autocompletion and calltip). It will always try to produce a calltip. If tryAutoComp is True, will also try to produce an autocompletion list (which, on success, will hide the calltip). This method will obtain the line and (re)start a timer that will call _introspectNow() after a short while. This way, if the user types a lot of characters, there is not a stream of useless introspection attempts; the introspection is only really started after he stops typing for, say 0.1 or 0.5 seconds (depending on iep.config.autoCompDelay). The method _introspectNow() will parse the line to obtain information required to obtain the autocompletion and signature information. Then it calls processCallTip and processAutoComp which are implemented in the editor and shell classes. """ # Find the tokens up to the cursor cursor = self.textCursor() # In order to find the tokens, we need the userState from the highlighter if cursor.block().previous().isValid(): previousState = cursor.block().previous().userState() else: previousState = 0 text = cursor.block().text()[:cursor.positionInBlock()] tokensUptoCursor = list( filter(lambda token:token.isToken, #filter to remove BlockStates self.parser().parseLine(text, previousState))) # TODO: Only proceed if valid python (no need to check for comments/ # strings, this is done by the processing of the tokens). Check for python style # Is the char valid for auto completion? if tryAutoComp: if not text or not ( text[-1] in (Tokens.ALPHANUM + "._") ): self.autocompleteCancel() tryAutoComp = False # Store line and (re)start timer cursor.setKeepPositionOnInsert(True) self._delayTimer._tokensUptoCursor = tokensUptoCursor self._delayTimer._cursor = cursor self._delayTimer._tryAutoComp = tryAutoComp self._delayTimer.start(iep.config.advanced.autoCompDelay) def _introspectNow(self): """ This methos is called a short while after introspect() by the timer. It parses the line and calls the specific methods to process the callTip and autoComp. """ tokens = self._delayTimer._tokensUptoCursor if iep.config.settings.autoCallTip: # Parse the line, to get the name of the function we should calltip # if the name is empty/None, we should not show a signature name, needle, stats = parseLine_signature(tokens) if needle: # Compose actual name fullName = needle if name: fullName = name + '.' + needle # Process offset = self._delayTimer._cursor.positionInBlock() - stats[0] + len(needle) cto = CallTipObject(self, fullName, offset) self.processCallTip(cto) else: self.calltipCancel() if self._delayTimer._tryAutoComp and iep.config.settings.autoComplete: # Parse the line, to see what (partial) name we need to complete name, needle = parseLine_autocomplete(tokens) if name or needle: # Try to do auto completion aco = AutoCompObject(self, name, needle) self.processAutoComp(aco) def processCallTip(self, cto): """ Overridden in derive class """ pass def processAutoComp(self, aco): """ Overridden in derive class """ pass def _onDoubleClick(self): """ When double clicking on a name, autocomplete it. """ self.processHelp() def processHelp(self, name=None, showError=False): """ Show help on the given full object name. - called when going up/down in the autocompletion list. - called when double clicking a name """ # uses parse_autocomplete() to find baseName and objectName # Get help tool hw = iep.toolManager.getTool('iepinteractivehelp') ass = iep.toolManager.getTool('iepassistant') # Get the shell shell = iep.shells.getCurrentShell() # Both should exist if not hw or not shell: return if not name: # Obtain name from current cursor position # Is this valid python? if self._isValidPython(): # Obtain line from text cursor = self.textCursor() line = cursor.block().text() text = line[:cursor.positionInBlock()] # Obtain nameBefore, name = parseLine_autocomplete(text) if nameBefore: name = "%s.%s" % (nameBefore, name) if name: hw.setObjectName(name) if ass: ass.showHelpForTerm(name) ## Callbacks def updateHelp(self,name): """A name has been highlighted, show help on that name""" if self._autoCompBuffer_name: name = self._autoCompBuffer_name + '.' + name elif not self.completer().completionPrefix(): # Dont update help if there is no dot or prefix; # the choice would be arbitrary return # Apply self.processHelp(name,True) def event(self,event): """ event(event) Overload main event handler so we can pass Ctrl-C Ctr-v etc, to the main window. """ if isinstance(event, QtGui.QKeyEvent): # Ignore CTRL+{A-Z} since those keys are handled through the menu if (event.modifiers() & QtCore.Qt.ControlModifier) and \ (event.key()>=QtCore.Qt.Key_A) and (event.key()<=QtCore.Qt.Key_Z): event.ignore() return False # Default behavior codeeditor.CodeEditor.event(self, event) return True def keyPressEvent(self, event): """ Receive qt key event. From here we'l dispatch the event to perform autocompletion or other stuff... """ # Get ordinal key ordKey = -1 if event.text(): ordKey = ord(event.text()[0]) # Cancel any introspection in progress self._delayTimer._line = '' # Also invalidate introspection for when a response gets back # These are set again when the timer runs out. If the response # is received before the timer runs out, the results are buffered # but not shown. When the timer runs out shortly after, the buffered # results are shown. If the timer runs out before the response is # received, a new request is done, although the response of the old # request will show the info if it's still up to date. self._autoComp_bufBase = None self._callTip_bufName = None codeeditor.CodeEditor.keyPressEvent(self, event) # Analyse character/key to determine what introspection to fire if ordKey: if ordKey >= 48 or ordKey in [8, 46]: # If a char that allows completion or backspace or dot was pressed self.introspect(True) elif ordKey >= 32: # Printable chars, only calltip self.introspect() elif event.key() in [QtCore.Qt.Key_Left, QtCore.Qt.Key_Right]: self.introspect() class CallTipObject: """ Object to help the process of call tips. An instance of this class is created for each call tip action. """ def __init__(self, textCtrl, name, offset): self.textCtrl = textCtrl self.name = name self.bufferName = name self.offset = offset def tryUsingBuffer(self): """ tryUsingBuffer() Try performing this callTip using the buffer. Returns True on success. """ bufferName = self.textCtrl._callTipBuffer_name t = time.time() - self.textCtrl._callTipBuffer_time if ( self.bufferName == bufferName and t < 0 ): self._finish(self.textCtrl._callTipBuffer_result) return True else: return False def finish(self, callTipText): """ finish(callTipText) Finish the introspection using the given calltipText. Will also automatically call setBuffer. """ self.setBuffer(callTipText) self._finish(callTipText) def setBuffer(self, callTipText, timeout=4): """ setBuffer(callTipText) Sets the buffer with the provided text. """ self.textCtrl._callTipBuffer_name = self.bufferName self.textCtrl._callTipBuffer_time = time.time() + timeout self.textCtrl._callTipBuffer_result = callTipText def _finish(self, callTipText): self.textCtrl.calltipShow(self.offset, callTipText, True) class AutoCompObject: """ Object to help the process of auto completion. An instance of this class is created for each auto completion action. """ def __init__(self, textCtrl, name, needle): self.textCtrl = textCtrl self.bufferName = name # name to identify with self.name = name # object to find attributes of self.needle = needle # partial name to look for self.names = set() # the names (use a set to prevent duplicates) self.importNames = [] self.importLines = {} def addNames(self, names): """ addNames(names) Add a list of names to the collection. Duplicates are removed.""" self.names.update(names) def tryUsingBuffer(self): """ tryUsingBuffer() Try performing this auto-completion using the buffer. Returns True on success. """ bufferName = self.textCtrl._autoCompBuffer_name t = time.time() - self.textCtrl._autoCompBuffer_time if ( self.bufferName == bufferName and t < 0 ): self._finish(self.textCtrl._autoCompBuffer_result) return True else: return False def finish(self): """ finish() Finish the introspection using the collected names. Will automatically call setBuffer. """ # Remember at the object that started this introspection # and get sorted names names = self.setBuffer(self.names) # really finish self._finish(names) def setBuffer(self, names=None, timeout=None): """ setBuffer(names=None) Sets the buffer with the provided names (or the collected names). Also returns a list with the sorted names. """ # Determine timeout # Global namespaces change more often than local one, plus when # typing a xxx.yyy, the autocompletion buffer changes and is thus # automatically refreshed. # I've once encountered a wrong autocomp list on an object, but # haven' been able to reproduce it. It was probably some odity. if timeout is None: if self.bufferName: timeout = 5 else: timeout = 1 # Get names if names is None: names = self.names # Make list and sort names = list(names) names.sort(key=str.upper) # Store self.textCtrl._autoCompBuffer_name = self.bufferName self.textCtrl._autoCompBuffer_time = time.time() + timeout self.textCtrl._autoCompBuffer_result = names # Return sorted list return names def _finish(self, names): # Show completion list if required. self.textCtrl.autocompleteShow(len(self.needle), names) def nameInImportNames(self, importNames): """ nameInImportNames(importNames) Test whether the name, or a base part of it is present in the given list of names. Returns the (part of) the name that's in the list, or None otherwise. """ baseName = self.name while baseName not in importNames: if '.' in baseName: baseName = baseName.rsplit('.',1)[0] else: baseName = None break return baseName if __name__=="__main__": app = QtGui.QApplication([]) win = BaseTextCtrl(None) # win.setStyle('.py') tmp = "foo(bar)\nfor bar in range(5):\n print bar\n" tmp += "\nclass aap:\n def monkey(self):\n pass\n\n" tmp += "a\u20acb\n" win.setPlainText(tmp) win.show() app.exec_() iep-3.7/iep/yotonloader.py0000664000175000017500000000054312312413721016040 0ustar almaralmar00000000000000""" This is a bit awkward, but yoton is a package that is designed to work from Python 2.4 to Python 3.x. As such, it does not have relative imports and must be imported as an absolute package. That is what this module does... """ import os import sys # Import yoton sys.path.insert(0, os.path.dirname(__file__)) import yoton # Reset sys.path.pop(0) iep-3.7/iep/codeeditor/0000775000175000017500000000000012573320440015252 5ustar almaralmar00000000000000iep-3.7/iep/codeeditor/highlighter.py0000664000175000017500000001110512271043444020121 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module highlighter Defines the highlighter class for the base code editor class. It will do the styling when syntax highlighting is enabled. If it is not, will only check out indentation. """ import time from .qt import QtGui, QtCore Qt = QtCore.Qt from . import parsers from .misc import ustr class BlockData(QtGui.QTextBlockUserData): """ Class to represent the data for a block. """ def __init__(self): QtGui.QTextBlockUserData.__init__(self) self.indentation = None self.fullUnderlineFormat = None # The highlighter should be part of the base class, because # some extensions rely on them (e.g. the indent guuides). class Highlighter(QtGui.QSyntaxHighlighter): def __init__(self,codeEditor,*args): QtGui.QSyntaxHighlighter.__init__(self,*args) # Store reference to editor self._codeEditor = codeEditor def getCurrentBlockUserData(self): """ getCurrentBlockUserData() Gets the BlockData object. Creates one if necesary. """ bd = self.currentBlockUserData() if not isinstance(bd, BlockData): bd = BlockData() self.setCurrentBlockUserData(bd) return bd def highlightBlock(self, line): """ highlightBlock(line) This method is automatically called when a line must be re-highlighted. If the code editor has an active parser. This method will use it to perform syntax highlighting. If not, it will only check out the indentation. """ # Make sure this is a Unicode Python string line = ustr(line) # Get previous state previousState = self.previousBlockState() # Get parser parser = None if hasattr(self._codeEditor, 'parser'): parser = self._codeEditor.parser() # Get function to get format nameToFormat = self._codeEditor.getStyleElementFormat fullLineFormat = None if parser: self.setCurrentBlockState(0) for token in parser.parseLine(line, previousState): # Handle block state if isinstance(token, parsers.BlockState): self.setCurrentBlockState(token.state) else: # Get format try: styleFormat = nameToFormat(token.name) charFormat = styleFormat.textCharFormat except KeyError: #print(repr(nameToFormat(token.name))) continue # Set format self.setFormat(token.start,token.end-token.start,charFormat) # Is this a cell? if (fullLineFormat is None) and styleFormat._parts.get('underline','') == 'full': fullLineFormat = styleFormat # Get user data bd = self.getCurrentBlockUserData() # Handle underlines bd.fullUnderlineFormat = fullLineFormat # Get the indentation setting of the editors indentUsingSpaces = self._codeEditor.indentUsingSpaces() leadingWhitespace=line[:len(line)-len(line.lstrip())] if '\t' in leadingWhitespace and ' ' in leadingWhitespace: #Mixed whitespace bd.indentation = 0 format=QtGui.QTextCharFormat() format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline) format.setUnderlineColor(QtCore.Qt.red) format.setToolTip('Mixed tabs and spaces') self.setFormat(0,len(leadingWhitespace),format) elif ('\t' in leadingWhitespace and indentUsingSpaces) or \ (' ' in leadingWhitespace and not indentUsingSpaces): #Whitespace differs from document setting bd.indentation = 0 format=QtGui.QTextCharFormat() format.setUnderlineStyle(QtGui.QTextCharFormat.SpellCheckUnderline) format.setUnderlineColor(QtCore.Qt.blue) format.setToolTip('Whitespace differs from document setting') self.setFormat(0,len(leadingWhitespace),format) else: # Store info for indentation guides # amount of tabs or spaces bd.indentation = len(leadingWhitespace) iep-3.7/iep/codeeditor/_test.py0000664000175000017500000000366512401305376016755 0ustar almaralmar00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- """ This script runs a test for the code editor component. """ import os, sys from qt import QtGui, QtCore Qt = QtCore.Qt ## Go up one directory and then import the codeeditor package os.chdir('..') sys.path.insert(0,'.') from codeeditor import * if __name__=='__main__': app = QtGui.QApplication([]) # Create editor instance e = CodeEditor(highlightCurrentLine = True, longLineIndicatorPosition = 20, showIndentationGuides = True, showWhitespace = True, showLineEndings = True, wrap = True, showLineNumbers = True) QtGui.QShortcut(QtGui.QKeySequence("F1"), e).activated.connect(e.autocompleteShow) QtGui.QShortcut(QtGui.QKeySequence("F2"), e).activated.connect(e.autocompleteCancel) QtGui.QShortcut(QtGui.QKeySequence("F3"), e).activated.connect(lambda: e.calltipShow(0, 'test(foo, bar)')) QtGui.QShortcut(QtGui.QKeySequence("Shift+Tab"), e).activated.connect(e.dedentSelection) # Shift + Tab #TODO: somehow these shortcuts don't work in this test-app, but they do in # iep. May have something to do with overriding slots of Qt-native objects? QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), e).activated.connect(e.copy) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+X"), e).activated.connect(e.cut) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+V"), e).activated.connect(e.paste) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Shift+V"), e).activated.connect(e.pasteAndSelect) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Z"), e).activated.connect(e.undo) QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Y"), e).activated.connect(e.redo) e.setPlainText("foo(bar)\nfor bar in range(5):\n print bar\n" + "\nclass aap:\n def monkey(self):\n pass\n\n") # Run application e.show() s=QtGui.QSplitter() s.addWidget(e) s.addWidget(QtGui.QLabel('test')) s.show() app.exec_() iep-3.7/iep/codeeditor/textutils.py0000664000175000017500000001356612271043444017705 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. class TextReshaper: """ Object to reshape a piece of text, taking indentation, paragraphs, comments and bulletpoints into account. """ def __init__(self, lw, margin=3): self.lw = lw self.margin = margin self._lines1 = [] self._lines2 = [] self._wordBuffer = [] self._charsInBuffer = -1 # First word ads one extra self._pendingPrefix = None # A one-shot prefix self._currentPrefix = None # The prefix used until a new prefix is set @classmethod def reshapeText(cls, text, lw): tr = cls(lw) tr.pushText(text) return tr.popText() def pushLine(self, line): """ Push a single line to the input. """ self._lines1.append(line.rstrip()) def pushText(self, text): """ Push a (multiline) text to the input. """ for line in text.splitlines(): self.pushLine(line) def popLines(self): """ Get all available lines from the output. """ try: while True: self._popLine() except StopIteration: self._flush() return [line for line in self._lines2] def popText(self): """ Get all text from the output (i.e. lines joined with newline). """ return '\n'.join(self.popLines()) def _prefixString(self): if self._pendingPrefix is not None: prefix = self._pendingPrefix self._pendingPrefix = None return prefix else: return self._currentPrefix or '' def _addWordToBuffer(self, word): self._wordBuffer.append(word) self._charsInBuffer += len(word) + 1 # add one for space def _flush(self): if self._wordBuffer: self._lines2.append(self._prefixString() + ' '.join(self._wordBuffer)) self._wordBuffer, self._charsInBuffer = [], -1 def _addNewParagraph(self): # Flush remaining words self._flush() # Create empty line prefix = self._currentPrefix or '' prefix = ' ' * len(prefix) self._lines2.append(prefix) # Allow new prefix self._currentPrefix = None def _popLine(self): """ Pop a line from the input. Examine how it starts and convert it to words. """ # Pop line try: line = self._lines1.pop(0) except IndexError: raise StopIteration() # Strip the line strippedline1 = line.lstrip() strippedline2 = line.lstrip(' \t#*') # Analyze this line (how does it start?) if not strippedline1: self._addNewParagraph() return elif strippedline1.startswith('* '): self._flush() indent = len(line) - len(strippedline1) linePrefix = line[:indent] self._pendingPrefix = linePrefix + '* ' self._currentPrefix = linePrefix + ' ' else: # Hey, an actual line! Determine prefix indent = len(line) - len(strippedline1) linePrefix = line[:indent] # Check comments if strippedline1.startswith('#'): linePrefix += '# ' # What to do now? if linePrefix != self._currentPrefix: self._flush() self._currentPrefix = linePrefix # Process words one by one... for word in strippedline2.split(' '): self._addWordToBuffer(word) currentLineWidth = self._charsInBuffer + len(self._currentPrefix) if currentLineWidth < self.lw: # Not enough words in buffer yet pass elif len(self._wordBuffer) > 1: # Enough words to compose a line marginWith = currentLineWidth - self.lw marginWithout = self.lw - (currentLineWidth - len(word)) if marginWith < marginWithout and marginWith < self.margin: # add all buffered words self._flush() else: # add all buffered words (except last) self._wordBuffer.pop(-1) self._flush() self._addWordToBuffer(word) else: # This single word covers more than one line self._flush() testText = """ # This is a piece # of comment Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. # Indented comments # should work # as well skdb-a-very-long-word-ksdbfksasdvbassdfhjsdfbjdfbvhjdbvhjbdfhjvbdfjbvjdfbvjdfbvjdbfvj A change in indentation makes it a separate line sdckj bsdkjcb sdc sdckj foo bar aap noot mies * Bullet points are preserved * Even if they are very long the should be preserved. I know that brevity is a great virtue but you know, sometimes you just need those extra words to make a point. """ if __name__ == '__main__': print(TextReshaper.reshapeText(testText, 70)) iep-3.7/iep/codeeditor/qt.py0000664000175000017500000000111412271043444016246 0ustar almaralmar00000000000000import sys # Simple module to allow using both PySide and PyQt4 try: # This is a proper proxy from pyzolib.qt import QtCore, QtGui except ImportError: try: #if sys.platform == 'darwin': # raise ImportError # PySide causes crashes on Mac OS X from PySide import QtCore, QtGui except ImportError: try: from PyQt4 import QtCore, QtGui QtCore.Signal = QtCore.pyqtSignal # Define signal as pyqtSignal except ImportError: raise ImportError("Both PySide and PyQt4 could not be imported.") iep-3.7/iep/codeeditor/extensions/0000775000175000017500000000000012573320440017451 5ustar almaralmar00000000000000iep-3.7/iep/codeeditor/extensions/autocompletion.py0000664000175000017500000002610412271043444023071 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Code editor extensions that provides autocompleter functionality """ from ..qt import QtGui,QtCore Qt = QtCore.Qt import keyword #TODO: use this CompletionListModel to style the completion suggestions (class names, method names, keywords etc) class CompletionListModel(QtGui.QStringListModel): def data(self, index, role): if role == Qt.ForegroundRole: # data = str(QtGui.QStringListModel.data(self, index, QtCore.Qt.DisplayRole)) # return QtGui.QBrush(Qt.red) return None else: return QtGui.QStringListModel.data(self, index, role) # todo: use keywords from the parser class AutoCompletion(object): def __init__(self,*args, **kwds): super(AutoCompletion, self).__init__(*args, **kwds) # Autocompleter self.__completerModel = QtGui.QStringListModel(keyword.kwlist) self.__completer = QtGui.QCompleter(self) self.__completer.setModel(self.__completerModel) self.__completer.setCaseSensitivity(Qt.CaseInsensitive) self.__completer.setWidget(self) self.__completerNames = [] self.__recentCompletions = [] #List of recently selected completions # geometry self.__popupSize = 300, 100 # Text position corresponding to first charcter of the word being completed self.__autocompleteStart = None self.__autocompleteDebug = False self.__autocompletionAcceptKeys = (Qt.Key_Tab,) #Connect signals self.__highlightedCompletion = None self.__completer.activated.connect(self.onAutoComplete) self.__completer.highlighted.connect(self._setHighlightedCompletion) def _setHighlightedCompletion(self, value): """ Keeping track of the highlighted item allows us to 'manually' perform an autocompletion. """ self.__highlightedCompletion = value ## Properties def recentCompletionsList(self): """ The list of recent auto-completions. This property may be set to a list that is shared among several editors, in order to share the notion of recent auto-completions """ return self.__recentCompletions def setRecentCompletionsList(self,value): self.__recentCompletions = value def completer(self): return self.__completer def setAutoCompletionAcceptKeys(self, *keys): """ Set the keys that can accept an autocompletion. Like Tab, or Enter. Defaut Tab. """ self.__autocompletionAcceptKeys = keys ## Autocompletion def setAutocompletPopupSize(self, width, height): """ Set the size (width, heigth) of the automcompletion popup window. """ self.__popupSize = width, height def autocompleteShow(self,offset = 0,names = None): """ Pop-up the autocompleter (if not already visible) and position it at current cursor position minus offset. If names is given and not None, it is set as the list of possible completions. """ #Pop-up the autocompleteList startcursor=self.textCursor() startcursor.movePosition(startcursor.Left, n=offset) if self.__autocompleteDebug: print('autocompleteShow called') if not self.autocompleteActive() or \ startcursor.position() != self.__autocompleteStart.position(): self.__autocompleteStart=startcursor self.__autocompleteStart.setKeepPositionOnInsert(True) #Popup the autocompleter. Don't use .complete() since we want to #position the popup manually self.__positionAutocompleter() self.__updateAutocompleterPrefix() self.__completer.popup().show() if self.__autocompleteDebug: print('self.__completer.popup().show() called') if names is not None: #TODO: a more intelligent implementation that adds new items and removes #old ones if names != self.__completerNames: self.__completerModel.setStringList(names) self.__completerNames = names self.__updateAutocompleterPrefix() def autocompleteAccept(self): pass def autocompleteCancel(self): self.__completer.popup().hide() self.__autocompleteStart = None def onAutoComplete(self, text=None): if text is None: text = self.__highlightedCompletion #Select the text from autocompleteStart until the current cursor cursor=self.textCursor() cursor.setPosition(self.__autocompleteStart.position(),cursor.KeepAnchor) #Replace it with the selected text cursor.insertText(text) self.autocompleteCancel() #Reset the completer #Update the recent completions list if text in self.__recentCompletions: self.__recentCompletions.remove(text) self.__recentCompletions.append(text) def autocompleteActive(self): """ Returns whether an autocompletion list is currently shown. """ return self.__autocompleteStart is not None def __positionAutocompleter(self): """Move the autocompleter list to a proper position""" #Find the start of the autocompletion and move the completer popup there cur=QtGui.QTextCursor(self.__autocompleteStart) #Copy __autocompleteStart # Set size geometry = self.__completer.popup().geometry() geometry.setWidth(self.__popupSize[0]) geometry.setHeight(self.__popupSize[1]) self.__completer.popup().setGeometry(geometry) # Initial choice for position of the completer position = self.cursorRect(cur).bottomLeft() + self.viewport().pos() # Check if the completer is going to go off the screen desktop_geometry = QtGui.qApp.desktop().geometry() global_position = self.mapToGlobal(position) if global_position.y() + geometry.height() > desktop_geometry.height(): # Move the completer to above the current line position = self.cursorRect(cur).topLeft() + self.viewport().pos() global_position = self.mapToGlobal(position) global_position -= QtCore.QPoint(0, geometry.height()) self.__completer.popup().move(global_position) def __updateAutocompleterPrefix(self): """ Find the autocompletion prefix (the part of the word that has been entered) and send it to the completer. Update the selected completion (out of several possiblilties) which is best suited """ if not self.autocompleteActive(): self.__completer.popup().hide() #TODO: why is this required? return #Select the text from autocompleteStart until the current cursor cursor=self.textCursor() cursor.setPosition(self.__autocompleteStart.position(),cursor.KeepAnchor) prefix=cursor.selectedText() self.__completer.setCompletionPrefix(prefix) model = self.__completer.completionModel() if model.rowCount(): # Create a list of all possible completions, and select the one # which is best suited. Use the one which is highest in the # __recentCompletions list, but prefer completions with matching # case if they exists # Create a list of (row, value) tuples of all possible completions completions = [ (row, model.data(model.index(row,0),self.__completer.completionRole())) for row in range(model.rowCount()) ] # Define a function to get the position in the __recentCompletions def completionIndex(data): try: return self.__recentCompletions.index(data) except ValueError: return -1 # Sort twice; the last sort has priority over the first # Sort on most recent completions completions.sort(key = lambda c: completionIndex(c[1]), reverse = True) # Sort on matching case (prefer matching case) completions.sort(key = lambda c: c[1].startswith(prefix), reverse = True) # apply the best match bestMatchRow = completions[0][0] self.__completer.popup().setCurrentIndex(model.index(bestMatchRow,0)); else: #No match, just hide self.autocompleteCancel() def potentiallyAutoComplete(self, event): """ potentiallyAutoComplete(event) Given a keyEvent, check if we should perform an autocompletion. Returns 0 if no autocompletion was performed. Return 1 if autocompletion was performed, but the key event should be processed as normal. Return 2 if the autocompletion was performed, and the key should be consumed. """ if self.autocompleteActive(): if event.key() in self.__autocompletionAcceptKeys: if event.key() <= 128: self.onAutoComplete() # No arg: select last highlighted self.autocompleteCancel() event.ignore() return 1 # Let key have effect as normal elif event.modifiers() == Qt.NoModifier: # The key self.onAutoComplete() # No arg: select last highlighted self.autocompleteCancel() return 2 # Key should be consumed return 0 def keyPressEvent(self, event): key = event.key() modifiers = event.modifiers() if key == Qt.Key_Escape and modifiers == Qt.NoModifier and \ self.autocompleteActive(): self.autocompleteCancel() return #Consume the key if self.potentiallyAutoComplete(event) > 1: return #Consume #Allowed keys that do not close the autocompleteList: # alphanumeric and _ ans shift # Backspace (until start of autocomplete word) if self.autocompleteActive() and \ not event.text().isalnum() and event.text() != '_' and \ key != Qt.Key_Shift and not ( (key==Qt.Key_Backspace) and self.textCursor().position()>self.__autocompleteStart.position()): self.autocompleteCancel() # Apply the key that was pressed super(AutoCompletion, self).keyPressEvent(event) if self.autocompleteActive(): #While we type, the start of the autocompletion may move due to line #wrapping, so reposition after every key stroke self.__positionAutocompleter() self.__updateAutocompleterPrefix() iep-3.7/iep/codeeditor/extensions/behaviour.py0000664000175000017500000003500712401305376022015 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Code editor extensions that change its behaviour (i.e. how it reacts to keys) """ from ..qt import QtGui,QtCore Qt = QtCore.Qt from ..misc import ustr, ce_option from ..parsers.tokens import (CommentToken,UnterminatedStringToken) from ..parsers import BlockState class HomeKey(object): def keyPressEvent(self,event): # Home or shift + home if event.key() == Qt.Key_Home and \ event.modifiers() in (Qt.NoModifier, Qt.ShiftModifier): # Prepare cursor = self.textCursor() shiftDown = event.modifiers() == Qt.ShiftModifier moveMode = [cursor.MoveAnchor, cursor.KeepAnchor][shiftDown] # Get leading whitespace text = ustr(cursor.block().text()) leadingWhitespace = text[:len(text)-len(text.lstrip())] # Get current position and move to start of whitespace i = cursor.positionInBlock() cursor.movePosition(cursor.StartOfBlock, moveMode) cursor.movePosition(cursor.Right, moveMode, len(leadingWhitespace)) # If we were alread there, move to start of block if cursor.positionInBlock() == i: cursor.movePosition(cursor.StartOfBlock, moveMode) # Done self.setTextCursor(cursor) else: super(HomeKey, self).keyPressEvent(event) class EndKey(object): def keyPressEvent(self,event): if event.key() == Qt.Key_End and \ event.modifiers() in (Qt.NoModifier, Qt.ShiftModifier): # Prepare cursor = self.textCursor() shiftDown = event.modifiers() == Qt.ShiftModifier moveMode = [cursor.MoveAnchor, cursor.KeepAnchor][shiftDown] # Get current position and move to end of line i = cursor.positionInBlock() cursor.movePosition(cursor.EndOfLine, moveMode) # If alread at end of line, move to end of block if cursor.positionInBlock() == i: cursor.movePosition(cursor.EndOfBlock, moveMode) # Done self.setTextCursor(cursor) else: super(EndKey, self).keyPressEvent(event) class NumpadPeriodKey(object): """ If the numpad decimal separator key is pressed, always insert a period (.) even if due to localization that key is mapped to a comma (,). When editing code, period is the decimal separator independent of localization """ def keyPressEvent(self,event): # Check for numpad comma if event.key() == QtCore.Qt.Key_Comma and \ event.modifiers() & QtCore.Qt.KeypadModifier: # Create a new QKeyEvent to substitute the original one event = QtGui.QKeyEvent(event.type(), QtCore.Qt.Key_Period, event.modifiers(), '.', event.isAutoRepeat(), event.count()) super(NumpadPeriodKey, self).keyPressEvent(event) class Indentation(object): def __cursorIsInLeadingWhitespace(self,cursor = None): """ Checks wether the given cursor is in the leading whitespace of a block, i.e. before the first non-whitespace character. The cursor is not modified. If the cursor is not given or is None, the current textCursor is used """ if cursor is None: cursor = self.textCursor() # Get the text of the current block up to the cursor textBeforeCursor = ustr(cursor.block().text())[:cursor.positionInBlock()] return textBeforeCursor.lstrip() == '' #If we trim it and it is empty, it's all whitespace def keyPressEvent(self,event): key = event.key() modifiers = event.modifiers() #Tab key if key == Qt.Key_Tab: if modifiers == Qt.NoModifier: if self.textCursor().hasSelection(): #Tab pressed while some area was selected self.indentSelection() return elif self.__cursorIsInLeadingWhitespace(): #If the cursor is in the leading whitespace, indent and move cursor to end of whitespace cursor = self.textCursor() self.indentBlock(cursor) self.setTextCursor(cursor) return elif self.indentUsingSpaces(): #Insert space-tabs cursor=self.textCursor() w = self.indentWidth() cursor.insertText(' '*(w-((cursor.positionInBlock() + w ) % w))) return #else: default behaviour, insert tab character else: #Some other modifiers + Tab: ignore return # If backspace is pressed in the leading whitespace, (except for at the first # position of the line), and there is no selection # dedent that line and move cursor to end of whitespace if key == Qt.Key_Backspace and modifiers == Qt.NoModifier and \ self.__cursorIsInLeadingWhitespace() and not self.textCursor().atBlockStart() \ and not self.textCursor().hasSelection(): # Create a cursor, dedent the block and move screen cursor to the end of the whitespace cursor = self.textCursor() self.dedentBlock(cursor) self.setTextCursor(cursor) return # todo: Same for delete, I think not (what to do with the cursor?) # Auto-unindent if event.key() == Qt.Key_Delete: cursor = self.textCursor() if not cursor.hasSelection(): cursor.movePosition(cursor.EndOfBlock, cursor.KeepAnchor) if not cursor.hasSelection() and cursor.block().next().isValid(): cursor.beginEditBlock() cursor.movePosition(cursor.NextBlock) self.indentBlock(cursor, -99) # dedent as much as we can cursor.deletePreviousChar() cursor.endEditBlock() return super(Indentation, self).keyPressEvent(event) class AutoIndent(object): """ Auto indentation. This extension only adds the autoIndent property, for the actual indentation, the editor should derive from some AutoIndenter object """ def autoIndent(self): """ autoIndent() Get whether auto indentation is enabled. """ return self.__autoIndent @ce_option(True) def setAutoIndent(self,value): """ setAutoIndent(value) Set whether to enable auto indentation. """ self.__autoIndent = bool(value) class PythonAutoIndent(object): def keyPressEvent(self,event): super(PythonAutoIndent, self).keyPressEvent(event) if not self.autoIndent(): return #This extension code is run *after* key is processed by QPlainTextEdit if event.key() in (Qt.Key_Enter,Qt.Key_Return): cursor=self.textCursor() previousBlock=cursor.block().previous() if previousBlock.isValid(): line = ustr(previousBlock.text()) indent=line[:len(line)-len(line.lstrip())] if line.endswith(':'): # We only need to add indent if the : is not in a (multiline) # string or comment. Therefore, find out what the syntax # highlighter thinks of the previous line. ppreviousBlock = previousBlock.previous() # the block before previous ppreviousState = ppreviousBlock.userState() if previousBlock.isValid() else 0 lastElementToken = list(self.parser().parseLine(previousBlock.text(),ppreviousState))[-1] # Because there's at least a : on that line, the list is never empty if (not isinstance(lastElementToken, (CommentToken, UnterminatedStringToken, BlockState))): #TODO: check correct identation (no mixed space/tabs) if self.indentUsingSpaces(): indent+=' '*self.indentWidth() else: indent+='\t' cursor.insertText(indent) #This prevents jump to start of line when up key is pressed self.setTextCursor(cursor) class SmartCopyAndPaste(object): """ Smart copy and paste allows copying and pasting blocks """ @staticmethod def __setCursorPositionAndAnchor(cursor, position, anchor): cursor.setPosition(anchor) cursor.setPosition(position, cursor.KeepAnchor) @classmethod def __ensureCursorBeforeAnchor(cls, cursor): """ Given a cursor, modify it such that the cursor.position() is before or at cursor.anchor() and not the other way around. Returns: anchorBeforeCursor, i.e. whether originally the anchor was before the cursor """ start = cursor.selectionStart() end = cursor.selectionEnd() # Remember whether the cursor is before or after the anchor anchorBeforeCursor = cursor.anchor() < cursor.position() cls.__setCursorPositionAndAnchor(cursor, start, end) # Return wheter originally the cursor was before the anchor return anchorBeforeCursor def copy(self): """ Smart copy: if selection is multi-line and in front of the start of the selection there is only whitespace, extend the selection to include only whitespace """ cursor = self.textCursor() start = cursor.selectionStart() end = cursor.selectionEnd() # For our convenience, ensure that position is at start and # anchor is at the end, but remember whether originally the # anchor was before the cursor or the other way around anchorBeforeCursor = self.__ensureCursorBeforeAnchor(cursor) # Check if we have multi-line selection. block = cursor.block() # Use > not >= to ensure we don't count it as multi-line if the cursor # is just at the beginning of the next block (consistent with 'CodeEditor.doForSelectedLines') if end > (block.position() + block.length()): # Now check if there is only whitespace before the start of selection # If so, include this whitespace in the selection and update the # selection of the editor textBeforeSelection = block.text()[:cursor.positionInBlock()] if len(textBeforeSelection.strip()) == 0: start = block.position() # Move start to include leading whitespace # Update the textcursor of our editor. If originally the # anchor was before the cursor, restore that situation if anchorBeforeCursor: self.__setCursorPositionAndAnchor(cursor, end, start) else: self.__setCursorPositionAndAnchor(cursor, start, end) self.setTextCursor(cursor) # Call our supers copy slot to do the actual copying super().copy() def cut(self): """ Cutting with smart-copy: the part that is copies is the same as self.copy(), but the part that is removed is only the original selection see: Qt qtextcontrol.cpp, cut() """ if (self.textInteractionFlags() & QtCore.Qt.TextEditable) and \ self.textCursor().hasSelection(): cursor = self.textCursor() self.copy() # Restore original cursor self.setTextCursor(cursor) cursor.removeSelectedText() def paste(self): """ Smart paste If you paste on a position that has only whitespace in front of it, remove the whitespace before pasting. Combined with smart copy, this ensure indentation of the """ self._paste(keepSelection = False) def pasteAndSelect(self): """ Smart paste Like paste(), but keep the part that was pasted selected. This allows you to change the indentation after pasting using tab / shift-tab """ self._paste(keepSelection = True) def _paste(self, keepSelection): # Create a cursor of the current selection cursor = self.textCursor() # Ensure that position is at start and anchor is at the end. # This is required to ensure that with keepPositiobOnInsert # set, the cursor will equal the pasted text after the pasting self.__ensureCursorBeforeAnchor(cursor) # Change this cursor to let the position() stay at its place upon # inserting the new code; the anchor will move to the end of the insertion cursor.setKeepPositionOnInsert(True) super().paste() block = cursor.block() # Check if the thing to be pasted is multi-line. Use > not >= # to ensure we don't count it as multi-line if the cursor # is just at the beginning of the next block (consistent with # 'CodeEditor.doForSelectedLines') if cursor.selectionEnd() > block.position() + block.length(): # Now, check if in front of the current selection there is only whitespace if len(block.text()[:cursor.positionInBlock()].strip())==0: # Note that this 'smart pasting' will be a separate item on the # undo stack. This is intentional: the user can undo the 'smart paste' # without undoing the paste cursor2 = QtGui.QTextCursor(cursor) cursor2.setPosition(cursor2.position()) # put the anchor where the cursor is # Move cursor2 to beginning of the line (selecting the whitespace) # and remove the selection cursor2.movePosition(cursor2.StartOfBlock, cursor2.KeepAnchor) cursor2.removeSelectedText() # Set the textcursor of this editor to the just-pasted selection if keepSelection: cursor.setKeepPositionOnInsert(False) self.setTextCursor(cursor) iep-3.7/iep/codeeditor/extensions/calltip.py0000664000175000017500000001050012271043444021450 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. from ..qt import QtCore, QtGui Qt = QtCore.Qt class Calltip(object): _styleElements = [('Editor.calltip', 'The style of the calltip. ', 'fore:#555, back:#ff9, border:1')] class __CalltipLabel(QtGui.QLabel): def __init__(self): QtGui.QLabel.__init__(self) # Start hidden self.hide() # Accept rich text self.setTextFormat(QtCore.Qt.RichText) # Show as tooltip self.setIndent(2) self.setWindowFlags(QtCore.Qt.ToolTip) def enterEvent(self, event): # Act a bit like a tooltip self.hide() def __init__(self, *args, **kwds): super(Calltip, self).__init__(*args, **kwds) # Create label for call tips self.__calltipLabel = self.__CalltipLabel() # Be notified of style updates self.styleChanged.connect(self.__afterSetStyle) # Prevents calltips from being shown immediately after pressing # the escape key. self.__noshow = False def __afterSetStyle(self): format = self.getStyleElementFormat('editor.calltip') ss = "QLabel { color:%s; background:%s; border:%ipx solid %s; }" % ( format['fore'], format['back'], int(format['border']), format['fore'] ) self.__calltipLabel.setStyleSheet(ss) def calltipShow(self, offset=0, richText='', highlightFunctionName=False): """ calltipShow(offset=0, richText='', highlightFunctionName=False) Shows the given calltip. Parameters ---------- offset : int The character offset to show the tooltip. richText : str The text to show (may contain basic html for markup). highlightFunctionName : bool If True the text before the first opening brace is made bold. default False. """ # Do not show the calltip if it was deliberately hidden by the # user. if self.__noshow: return # Process calltip text? if highlightFunctionName: i = richText.find('(') if i>0: richText = '{}{}'.format(richText[:i], richText[i:]) # Get a cursor to establish the position to show the calltip startcursor = self.textCursor() startcursor.movePosition(startcursor.Left, n=offset) # Get position in pixel coordinates rect = self.cursorRect(startcursor) pos = rect.topLeft() pos.setY( pos.y() - rect.height() - 1 ) # Move one above line pos.setX( pos.x() - 3) # Correct for border and indent pos = self.viewport().mapToGlobal(pos) # Set text and update font self.__calltipLabel.setText(richText) self.__calltipLabel.setFont(self.font()) # Use a qt tooltip to show the calltip if richText: self.__calltipLabel.move(pos) self.__calltipLabel.show() else: self.__calltipLabel.hide() def calltipCancel(self): """ calltipCancel() Hides the calltip. """ self.__calltipLabel.hide() def calltipActive(self): """ calltipActive() Get whether the calltip is currently active. """ return self.__calltipLabel.isVisible() def focusOutEvent(self, event): super(Calltip, self).focusOutEvent(event) self.__calltipLabel.hide() def keyPressEvent(self,event): # If the user presses Escape and the calltip is active, hide it if event.key() == Qt.Key_Escape and event.modifiers() == Qt.NoModifier \ and self.calltipActive(): self.calltipCancel() self.__noshow = True return if event.key() in [Qt.Key_ParenLeft, Qt.Key_ParenRight]: self.__noshow = False # Proceed processing the keystrike super(Calltip, self).keyPressEvent(event) iep-3.7/iep/codeeditor/extensions/__init__.py0000664000175000017500000000000012271043444021551 0ustar almaralmar00000000000000iep-3.7/iep/codeeditor/extensions/appearance.py0000664000175000017500000011727312572264214022142 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Code editor extensions that change its appearance """ from ..qt import QtGui,QtCore Qt = QtCore.Qt from ..misc import ce_option from ..manager import Manager # todo: what about calling all extensions. CE_HighlightCurrentLine, # or EXT_HighlightcurrentLine? class HighlightMatchingOccurrences(object): # Register style element _styleElements = [ ( 'Editor.Highlight matching occurrences', 'The background color to highlight matching occurrences of the currently selected word.', 'back:#fdfda3', ) ] def highlightMatchingOccurrences(self): """ highlightMatchingOccurrences() Get whether to highlight matching occurrences. """ return self.__highlightMatchingOccurrences @ce_option(True) def setHighlightMatchingOccurrences(self,value): """ setHighlightMatchingOccurrences(value) Set whether to highlight matching occurrences. """ self.__highlightMatchingOccurrences = bool(value) self.viewport().update() def _doHighlight(self, text): # make cursor at the beginning of the first visible block cursor = self.cursorForPosition(QtCore.QPoint(0,0)) doc = self.document() color = self.getStyleElementFormat('editor.highlightMatchingOccurrences').back painter = QtGui.QPainter() painter.begin(self.viewport()) painter.setBrush(color) painter.setPen(color.darker(110)) # find occurrences while True: cursor = doc.find(text, cursor, doc.FindCaseSensitively | doc.FindWholeWords) if cursor is None or cursor.isNull(): # no more matches break # don't highlight the actual selection if cursor == self.textCursor(): continue endRect = self.cursorRect(cursor) if endRect.bottom() > self.height(): # rest of document is not visible, don't bother highlighting break cursor.movePosition(cursor.Left, n=len(text)) startRect = self.cursorRect(cursor) width = endRect.left() - startRect.left() painter.drawRect(startRect.left(), startRect.top(), width, startRect.height()) # move to end of word again, otherwise we never advance in the doc cursor.movePosition(cursor.EndOfWord) painter.end() def paintEvent(self, event): """ paintEvent(event) If there is a current selection, and the selected text is a valid Python identifier (no whitespace, starts with a letter), then highlight all the matching occurrences of the selected text in the current view. Paints behinds its super(). """ cursor = self.textCursor() if self.__highlightMatchingOccurrences and cursor.hasSelection(): text = cursor.selectedText() if text.isidentifier(): self._doHighlight(text) super(HighlightMatchingOccurrences, self).paintEvent(event) class HighlightMatchingBracket(object): # Register style element _styleElements = [ ( 'Editor.Highlight matching bracket', 'The background color to highlight matching brackets.', 'back:#ccc', ) ] def highlightMatchingBracket(self): """ highlightMatchingBracket() Get whether to highlight matching brackets. """ return self.__highlightMatchingBracket @ce_option(True) def setHighlightMatchingBracket(self,value): """ setHighlightMatchingBracket(value) Set whether to highlight matching brackets. """ self.__highlightMatchingBracket = bool(value) self.viewport().update() def _highlightSingleChar(self, painter, cursor, width): """ _highlightSingleChar(painter, cursor, width) Draws a highlighting rectangle around the single character to the left of the specified cursor. """ cursor_rect = self.cursorRect(cursor) top = cursor_rect.top() left = cursor_rect.left() - width height = cursor_rect.bottom() - top + 1 color = self.getStyleElementFormat('editor.highlightMatchingBracket').back painter.setBrush(color) painter.setPen(color.darker(110)) painter.drawRect(QtCore.QRect(left, top, width, height)) _matchingBrackets = {'(':')', '[':']', '{':'}', ')':'(', ']':'[', '}':'{'} def _findMatchingBracket(self, char, cursor, doc): """ _findMatchingBracket(char, cursor, doc) Find a bracket that matches the specified char in the specified document. Bracket index is returned as a QtCursor instance, pointing to the right of the found character. If no match is found, returns None. """ if char in ')]}': direction = -1 elif char in '([{': direction = 1 else: raise ValueError('invalid bracket character: ' + char) other_char = self._matchingBrackets[char] fulltext = doc.toPlainText() pos = cursor.position() - 1 num_match = 0 while True: if pos > len(fulltext)-1 or pos < 0: return None if fulltext[pos] == char: num_match += 1 elif fulltext[pos] == other_char: num_match -= 1 pos += direction if num_match == 0: # we've found our match # note that we want to return a cursor positioned *after* our # match. In case of forward searching, that's where we are now. # for backward searching, compensate by adding two. new_cursor = QtGui.QTextCursor(doc) if direction == -1: pos += 2 new_cursor.setPosition(pos) return new_cursor def paintEvent(self, event): """ paintEvent(event) If the current cursor is positioned to the right of a bracket ()[]{}, look for a matching one, and, if found, draw a highlighting rectangle around both brackets of the pair. Paints behinds its super(). """ if not self.__highlightMatchingBracket: super(HighlightMatchingBracket, self).paintEvent(event) return cursor = self.textCursor() text = cursor.block().text() pos = cursor.positionInBlock() - 1 if not cursor.atBlockStart() and len(text) > pos and len(text) > 0: # get the character to the left of the cursor char = text[pos] if (char not in '()[]{}' and len(text) > pos+1 and text[pos+1] in '()[]{}'): # no brace to the left of cursor; but one to the right cursor = QtGui.QTextCursor(cursor) cursor.movePosition(cursor.Right) char = text[pos+1] doc = cursor.document() if char in '()[]{}': other_bracket = self._findMatchingBracket(char, cursor, doc) if other_bracket is not None: fm = QtGui.QFontMetrics(doc.defaultFont()) width = fm.width(char) painter = QtGui.QPainter() painter.begin(self.viewport()) self._highlightSingleChar(painter, cursor, width) self._highlightSingleChar(painter, other_bracket, width) painter.end() super(HighlightMatchingBracket, self).paintEvent(event) class HighlightCurrentLine(object): """ Highlight the current line """ # Register style element _styleElements = [ ( 'Editor.Highlight current line', 'The background color of the current line highlight.', 'back:#ffff99', ) ] def highlightCurrentLine(self): """ highlightCurrentLine() Get whether to highlight the current line. """ return self.__highlightCurrentLine @ce_option(True) def setHighlightCurrentLine(self,value): """ setHighlightCurrentLine(value) Set whether to highlight the current line. """ self.__highlightCurrentLine = bool(value) self.viewport().update() def paintEvent(self,event): """ paintEvent(event) Paints a rectangle spanning the current block (in case of line wrapping, this means multiple lines) Paints behind its super() """ if not self.highlightCurrentLine(): super(HighlightCurrentLine, self).paintEvent(event) return # Get color color = self.getStyleElementFormat('editor.highlightCurrentLine').back #Find the top of the current block, and the height cursor = self.textCursor() cursor.movePosition(cursor.StartOfBlock) top = self.cursorRect(cursor).top() cursor.movePosition(cursor.EndOfBlock) height = self.cursorRect(cursor).bottom() - top + 1 margin = self.document().documentMargin() painter = QtGui.QPainter() painter.begin(self.viewport()) painter.fillRect(QtCore.QRect(margin, top, self.viewport().width() - 2*margin, height), color) painter.end() super(HighlightCurrentLine, self).paintEvent(event) # for debugging paint events #if 'log' not in self.__class__.__name__.lower(): # print(height, event.rect().width()) class IndentationGuides(object): # Register style element _styleElements = [ ( 'Editor.Indentation guides', 'The color and style of the indentation guides.', 'fore:#DDF,linestyle:solid', ) ] def showIndentationGuides(self): """ showIndentationGuides() Get whether to show indentation guides. """ return self.__showIndentationGuides @ce_option(True) def setShowIndentationGuides(self, value): """ setShowIndentationGuides(value) Set whether to show indentation guides. """ self.__showIndentationGuides = bool(value) self.viewport().update() def paintEvent(self,event): """ paintEvent(event) Paint the indentation guides, using the indentation info calculated by the highlighter. """ super(IndentationGuides, self).paintEvent(event) if not self.showIndentationGuides(): return # Get doc and viewport doc = self.document() viewport = self.viewport() # Get multiplication factor and indent width indentWidth = self.indentWidth() if self.indentUsingSpaces(): factor = 1 else: factor = indentWidth # Init painter painter = QtGui.QPainter() painter.begin(viewport) # Prepare pen format = self.getStyleElementFormat('editor.IndentationGuides') pen = QtGui.QPen(format.fore) pen.setStyle(format.linestyle) painter.setPen(pen) offset = doc.documentMargin() + self.contentOffset().x() def paintIndentationGuides(cursor): y3=self.cursorRect(cursor).top() y4=self.cursorRect(cursor).bottom() bd = cursor.block().userData() if bd and hasattr(bd, 'indentation') and bd.indentation: for x in range(indentWidth, bd.indentation * factor, indentWidth): w = self.fontMetrics().width('i'*x) + offset w += 1 # Put it more under the block if w > 0: # if scrolled horizontally it can become < 0 painter.drawLine(QtCore.QLine(w, y3, w, y4)) self.doForVisibleBlocks(paintIndentationGuides) # Done painter.end() class FullUnderlines(object): def paintEvent(self,event): """ paintEvent(event) Paint a horizontal line for the blocks for which there is a syntax format that has underline:full. Whether this is the case is stored at the blocks user data. """ super(FullUnderlines, self).paintEvent(event) painter = QtGui.QPainter() painter.begin(self.viewport()) margin = self.document().documentMargin() w = self.viewport().width() def paintUnderline(cursor): y = self.cursorRect(cursor).bottom() bd = cursor.block().userData() try: fullUnderlineFormat = bd.fullUnderlineFormat except AttributeError: pass # fullUnderlineFormat may not be an attribute else: if fullUnderlineFormat is not None: # Apply pen pen = QtGui.QPen(fullUnderlineFormat.fore) pen.setStyle(fullUnderlineFormat.linestyle) painter.setPen(pen) # Paint painter.drawLine(QtCore.QLine(margin, y, w - 2*margin, y)) self.doForVisibleBlocks(paintUnderline) painter.end() class CodeFolding(object): def paintEvent(self,event): """ paintEvent(event) """ super(CodeFolding, self).paintEvent(event) return # Code folding code is not yet complete painter = QtGui.QPainter() painter.begin(self.viewport()) margin = self.document().documentMargin() w = self.viewport().width() def paintCodeFolders(cursor): y = self.cursorRect(cursor).top() h = self.cursorRect(cursor).height() rect = QtCore.QRect(margin, y, h, h) text = cursor.block().text() if text.rstrip().endswith(':'): painter.drawRect(rect) painter.drawText(rect, QtCore.Qt.AlignVCenter | QtCore.Qt.AlignHCenter, "-") # Apply pen # Paint #painter.drawLine(QtCore.QLine(margin, y, w - 2*margin, y)) self.doForVisibleBlocks(paintCodeFolders) painter.end() class LongLineIndicator(object): # Register style element _styleElements = [ ( 'Editor.Long line indicator', 'The color and style of the long line indicator.', 'fore:#BBB,linestyle:solid', ) ] def longLineIndicatorPosition(self): """ longLineIndicatorPosition() Get the position of the long line indicator (aka edge column). A value of 0 or smaller means that no indicator is shown. """ return self.__longLineIndicatorPosition @ce_option(80) def setLongLineIndicatorPosition(self, value): """ setLongLineIndicatorPosition(value) Set the position of the long line indicator (aka edge column). A value of 0 or smaller means that no indicator is shown. """ self.__longLineIndicatorPosition = int(value) self.viewport().update() def paintEvent(self, event): """ paintEvent(event) Paint the long line indicator. Paints behind its super() """ if self.longLineIndicatorPosition()<=0: super(LongLineIndicator, self).paintEvent(event) return # Get doc and viewport doc = self.document() viewport = self.viewport() # Get position of long line fm = self.fontMetrics() # width of ('i'*length) not length * (width of 'i') b/c of # font kerning and rounding x = fm.width('i' * self.longLineIndicatorPosition()) x += doc.documentMargin() + self.contentOffset().x() x += 1 # Move it a little next to the cursor # Prepate painter painter = QtGui.QPainter() painter.begin(viewport) # Prepare pen format = self.getStyleElementFormat('editor.LongLineIndicator') pen = QtGui.QPen(format.fore) pen.setStyle(format.linestyle) painter.setPen(pen) # Draw line and end painter painter.drawLine(QtCore.QLine(x, 0, x, viewport.height()) ) painter.end() # Propagate event super(LongLineIndicator, self).paintEvent(event) class ShowWhitespace(object): def showWhitespace(self): """Show or hide whitespace markers""" option=self.document().defaultTextOption() return bool(option.flags() & option.ShowTabsAndSpaces) @ce_option(False) def setShowWhitespace(self,value): option=self.document().defaultTextOption() if value: option.setFlags(option.flags() | option.ShowTabsAndSpaces) else: option.setFlags(option.flags() & ~option.ShowTabsAndSpaces) self.document().setDefaultTextOption(option) class ShowLineEndings(object): @ce_option(False) def showLineEndings(self): """ Get whether line ending markers are shown. """ option=self.document().defaultTextOption() return bool(option.flags() & option.ShowLineAndParagraphSeparators) def setShowLineEndings(self,value): option=self.document().defaultTextOption() if value: option.setFlags(option.flags() | option.ShowLineAndParagraphSeparators) else: option.setFlags(option.flags() & ~option.ShowLineAndParagraphSeparators) self.document().setDefaultTextOption(option) class LineNumbers(object): # Margin on both side of the line numbers _LineNumberAreaMargin = 3 # Register style element _styleElements = [ ( 'Editor.Line numbers', 'The text- and background-color of the line numbers.', 'fore:#222,back:#DDD', ) ] class __LineNumberArea(QtGui.QWidget): """ This is the widget reponsible for drawing the line numbers. """ def __init__(self, codeEditor): QtGui.QWidget.__init__(self, codeEditor) self.setCursor(QtCore.Qt.PointingHandCursor) self._pressedY = None self._lineNrChoser = None def _getY(self, pos): tmp = self.mapToGlobal(pos) return self.parent().viewport().mapFromGlobal(tmp).y() def mousePressEvent(self, event): self._pressedY = self._getY(event.pos()) def mouseReleaseEvent(self, event): self._handleWholeBlockSelection( self._getY(event.pos()) ) def mouseMoveEvent(self, event): self._handleWholeBlockSelection( self._getY(event.pos()) ) def _handleWholeBlockSelection(self, y2): # Get y1 and sort (y1, y2) y1 = self._pressedY if y1 is None: y1 = y2 y1, y2 = min(y1, y2), max(y1, y2) # Get cursor and two cursors corresponding to selected blocks editor = self.parent() cursor = editor.textCursor() c1 = editor.cursorForPosition(QtCore.QPoint(0,y1)) c2 = editor.cursorForPosition(QtCore.QPoint(0,y2)) # Make these two cursors select the whole block c1.movePosition(c1.StartOfBlock, c1.MoveAnchor) c2.movePosition(c2.EndOfBlock, c2.MoveAnchor) # Apply selection cursor.setPosition(c1.position(), cursor.MoveAnchor) cursor.setPosition(c2.position(), cursor.KeepAnchor) editor.setTextCursor(cursor) def mouseDoubleClickEvent(self, event): self.showLineNumberChoser() def showLineNumberChoser(self): # Create line number choser if needed if self._lineNrChoser is None: self._lineNrChoser = LineNumbers.LineNumberChoser(self.parent()) # Get editor and cursor editor = self.parent() cursor = editor.textCursor() # Get (x,y) pos and apply x, y = self.width()+4, editor.cursorRect(cursor).y() self._lineNrChoser.move(QtCore.QPoint(x,y)) # Show/reset line number choser self._lineNrChoser.reset(cursor.blockNumber()+1) def paintEvent(self, event): editor = self.parent() if not editor.showLineNumbers(): return # Get doc and viewport doc = editor.document() viewport = editor.viewport() # Get format and margin format = editor.getStyleElementFormat('editor.LineNumbers') margin = editor._LineNumberAreaMargin # Init painter painter = QtGui.QPainter() painter.begin(self) # Get which part to paint. Just do all to avoid glitches w = editor.getLineNumberAreaWidth() y1, y2 = 0, editor.height() #y1, y2 = event.rect().top()-10, event.rect().bottom()+10 # Get offset tmp = self.mapToGlobal(QtCore.QPoint(0,0)) offset = viewport.mapFromGlobal(tmp).y() #Draw the background painter.fillRect(QtCore.QRect(0, y1, w, y2), format.back) # Get cursor cursor = editor.cursorForPosition(QtCore.QPoint(0,y1)) # Prepare fonts font1 = editor.font() font2 = editor.font() font2.setBold(True) currentBlockNumber = editor.textCursor().block().blockNumber() # Init painter with font and color painter.setFont(font1) painter.setPen(format.fore) #Repainting always starts at the first block in the viewport, #regardless of the event.rect().y(). Just to keep it simple while True: blockNumber = cursor.block().blockNumber() y = editor.cursorRect(cursor).y() # Set font to bold if line number is the current if blockNumber == currentBlockNumber: painter.setFont(font2) painter.drawText(0, y-offset, w-margin, 50, Qt.AlignRight, str(blockNumber+1)) # Set font back if blockNumber == currentBlockNumber: painter.setFont(font1) if y>y2: break #Reached end of the repaint area if not cursor.block().next().isValid(): break #Reached end of the text cursor.movePosition(cursor.NextBlock) # Done painter.end() class LineNumberChoser(QtGui.QSpinBox): def __init__(self, parent): QtGui.QSpinBox.__init__(self, parent) self._editor = parent ss = "QSpinBox { border: 2px solid #789; border-radius: 3px; padding: 4px; }" self.setStyleSheet(ss) self.setPrefix('Go to line: ') self.setAccelerated (True) self.setButtonSymbols(self.NoButtons) self.setCorrectionMode(self.CorrectToNearestValue) # Signal for when value changes, and flag to disbale it once self._ignoreSignalOnceFlag = False self.valueChanged.connect(self.onValueChanged) def reset(self, currentLineNumber): # Set value to (given) current line number self._ignoreSignalOnceFlag = True self.setRange(1, self._editor.blockCount()) self.setValue(currentLineNumber) # Select text and focus so that the user can simply start typing self.selectAll() self.setFocus() # Make visible self.show() self.raise_() def focusOutEvent(self, event): self.hide() def keyPressEvent(self, event): if event.key() in [QtCore.Qt.Key_Escape, QtCore.Qt.Key_Enter, QtCore.Qt.Key_Return]: self._editor.setFocus() # Moves focus away, thus hiding self else: QtGui.QSpinBox.keyPressEvent(self, event) def onValueChanged(self, nr): if self._ignoreSignalOnceFlag: self._ignoreSignalOnceFlag = False else: self._editor.gotoLine(nr) def __init__(self, *args, **kwds): self.__lineNumberArea = None super(LineNumbers, self).__init__(*args, **kwds) # Create widget that draws the line numbers self.__lineNumberArea = self.__LineNumberArea(self) # Issue an update when the font or amount of line numbers changes self.blockCountChanged.connect(self.__onBlockCountChanged) self.fontChanged.connect(self.__onBlockCountChanged) self.__onBlockCountChanged() self.addLeftMargin(LineNumbers, self.getLineNumberAreaWidth) def gotoLinePopup(self): """ Popup the little widget to quickly goto a certain line. Can also be achieved by double-clicking the line number area. """ self.__lineNumberArea.showLineNumberChoser() def showLineNumbers(self): return self.__showLineNumbers @ce_option(True) def setShowLineNumbers(self, value): self.__showLineNumbers = bool(value) # Note that this method is called before the __init__ is finished, # so that the __lineNumberArea is not yet created. if self.__lineNumberArea: if self.__showLineNumbers: self.__onBlockCountChanged() self.__lineNumberArea.show() else: self.__lineNumberArea.hide() self.updateMargins() def getLineNumberAreaWidth(self): """ Count the number of lines, compute the length of the longest line number (in pixels) """ if not self.__showLineNumbers: return 0 lastLineNumber = self.blockCount() margin = self._LineNumberAreaMargin return self.fontMetrics().width(str(lastLineNumber)) + 2*margin def __onBlockCountChanged(self,count = None): """ Update the line number area width. This requires to set the viewport margins, so there is space to draw the linenumber area """ if self.__showLineNumbers: self.updateMargins() def resizeEvent(self,event): super(LineNumbers, self).resizeEvent(event) #On resize, resize the lineNumberArea, too rect=self.contentsRect() m = self.getLeftMargin(LineNumbers) w = self.getLineNumberAreaWidth() self.__lineNumberArea.setGeometry( rect.x()+m, rect.y(), w, rect.height()) def paintEvent(self,event): super(LineNumbers, self).paintEvent(event) #On repaint, update the complete line number area w = self.getLineNumberAreaWidth() self.__lineNumberArea.update(0, 0, w, self.height() ) class BreakPoints(object): _breakPointWidth = 11 # With of total bar, actual points are smaller # Register style element _styleElements = [ ( 'Editor.BreakPoints', 'The fore- and background-color of the breakpoints.', 'fore:#F66,back:#dfdfe1', ) ] class __BreakPointArea(QtGui.QWidget): """ This is the widget reponsible for drawing the break points. """ def __init__(self, codeEditor): QtGui.QWidget.__init__(self, codeEditor) self.setCursor(QtCore.Qt.PointingHandCursor) self.setMouseTracking(True) self._virtualBreakpoint = 0 def _getY(self, pos): tmp = self.mapToGlobal(pos) return self.parent().viewport().mapFromGlobal(tmp).y() def mousePressEvent(self, event): self._toggleBreakPoint( self._getY(event.pos())) def mouseMoveEvent(self, event): y = self._getY(event.pos()) editor = self.parent() cursor = editor.textCursor() c1 = editor.cursorForPosition(QtCore.QPoint(0,y)) self._virtualBreakpoint = c1.blockNumber() + 1 self.update() def leaveEvent(self, event): self._virtualBreakpoint = 0 self.update() def _toggleBreakPoint(self, y): # Get breakpoint corresponding to pressed pos editor = self.parent() cursor = editor.textCursor() c1 = editor.cursorForPosition(QtCore.QPoint(0,y)) linenr = c1.blockNumber() + 1 # Toggle bps = self.parent()._breakPoints if linenr in bps: bps.discard(linenr) else: bps.add(linenr) # Emit signal editor.breakPointsChanged.emit(editor) self.update() def paintEvent(self, event): editor = self.parent() if not editor.showBreakPoints(): return # Get doc and viewport doc = editor.document() viewport = editor.viewport() # Get format and margin format = editor.getStyleElementFormat('editor.breakpoints') margin = 1 w = editor._breakPointWidth bulletWidth = w - 2*margin # Init painter painter = QtGui.QPainter() painter.begin(self) # Get which part to paint. Just do all to avoid glitches y1, y2 = 0, editor.height() # Get offset tmp = self.mapToGlobal(QtCore.QPoint(0,0)) offset = viewport.mapFromGlobal(tmp).y() #Draw the background painter.fillRect(QtCore.QRect(0, y1, w, y2), format.back) # Get debug indicator and list of sorted breakpoints debugBlockIndicator = editor._debugLineIndicator-1 virtualBreakpoint = self._virtualBreakpoint-1 blocknumbers = [i-1 for i in sorted(self.parent()._breakPoints)] if not (blocknumbers or editor._debugLineIndicator or editor._debugLineIndicators or virtualBreakpoint > 0): return # Get cursor cursor = editor.cursorForPosition(QtCore.QPoint(0,y1)) # Get start block number and bullet offset in pixels startBlockNumber = cursor.block().blockNumber() bulletOffset = editor.contentOffset().y() + bulletWidth * 0.25 # Prepare painter painter.setPen(QtGui.QColor('#777')) painter.setBrush(format.fore) painter.setRenderHint(painter.Antialiasing) # Draw breakpoints for blockNumber in blocknumbers: if blockNumber < startBlockNumber: continue # Get block block = editor.document().findBlockByNumber(blockNumber) if block.isValid(): y = editor.blockBoundingGeometry(block).y() + bulletOffset painter.drawEllipse(margin, y, bulletWidth, bulletWidth) # Draw *the* debug marker if debugBlockIndicator > 0: painter.setBrush(QtGui.QColor('#6F6')) # Get block block = editor.document().findBlockByNumber(debugBlockIndicator) if block.isValid(): y = editor.blockBoundingGeometry(block).y() + bulletOffset y += 0.25 * bulletWidth painter.drawEllipse(margin, y, bulletWidth, 0.5*bulletWidth) # Draw other debug markers for debugLineIndicator in editor._debugLineIndicators: debugBlockIndicator = debugLineIndicator - 1 painter.setBrush(QtGui.QColor('#DDD')) # Get block block = editor.document().findBlockByNumber(debugBlockIndicator) if block.isValid(): y = editor.blockBoundingGeometry(block).y() + bulletOffset y += 0.25 * bulletWidth painter.drawEllipse(margin, y, bulletWidth, 0.5*bulletWidth) # Draw virtual break point if virtualBreakpoint > 0: painter.setBrush(QtGui.QColor(0,0,0,0)) # Get block block = editor.document().findBlockByNumber(virtualBreakpoint) if block.isValid(): y = editor.blockBoundingGeometry(block).y() + bulletOffset painter.drawEllipse(margin, y, bulletWidth, bulletWidth) # Done painter.end() def __init__(self, *args, **kwds): self.__breakPointArea = None super(BreakPoints, self).__init__(*args, **kwds) # Create widget that draws the breakpoints self.__breakPointArea = self.__BreakPointArea(self) self.addLeftMargin(BreakPoints, self.getBreakPointAreaWidth) self._breakPoints = set() self._debugLineIndicator = 0 self._debugLineIndicators = set() def breakPoints(self): """ A list of breakpoints for this editor. """ return list(sorted(self._breakPoints)) def clearBreakPoints(self): """ Remove all breakpoints for this editor. """ self._breakPoints = set() self.breakPointsChanged.emit(self) def setDebugLineIndicator(self, linenr, active=True): """ Set the debug line indicator to the given line number. If None or 0, the indicator is hidden. """ linenr = int(linenr or 0) if not linenr: # Remove all indicators if self._debugLineIndicator or self._debugLineIndicators: self._debugLineIndicator = 0 self._debugLineIndicators = set() self.__breakPointArea.update() elif active: # Set *the* indicator if linenr != self._debugLineIndicator: self._debugLineIndicators.discard(linenr) self._debugLineIndicator = linenr self.__breakPointArea.update() else: # Add to set of indicators if linenr not in self._debugLineIndicators: self._debugLineIndicators.add(linenr) self.__breakPointArea.update() def getBreakPointAreaWidth(self): if not self.__showBreakPoints: return 0 else: return self._breakPointWidth def showBreakPoints(self): return self.__showBreakPoints @ce_option(True) def setShowBreakPoints(self, value): self.__showBreakPoints = bool(value) # Note that this method is called before the __init__ is finished, # so that the area is not yet created. if self.__breakPointArea: if self.__showBreakPoints: self.__breakPointArea.show() else: self.__breakPointArea.hide() self.clearBreakPoints() self.updateMargins() def resizeEvent(self,event): super(BreakPoints, self).resizeEvent(event) #On resize, resize the breakpointArea, too rect=self.contentsRect() m = self.getLeftMargin(BreakPoints) w = self.getBreakPointAreaWidth() self.__breakPointArea.setGeometry( rect.x()+m, rect.y(), w, rect.height()) def paintEvent(self,event): super(BreakPoints, self).paintEvent(event) #On repaint, update the complete breakPointArea w = self.getBreakPointAreaWidth() self.__breakPointArea.update(0, 0, w, self.height() ) class Wrap(object): def wrap(self): """Enable or disable wrapping""" option=self.document().defaultTextOption() return not bool(option.wrapMode() == option.NoWrap) @ce_option(True) def setWrap(self,value): option=self.document().defaultTextOption() if value: option.setWrapMode(option.WrapAtWordBoundaryOrAnywhere) else: option.setWrapMode(option.NoWrap) self.document().setDefaultTextOption(option) # todo: move this bit to base class? # This functionality embedded in the highlighter and even has a designated # subpackage. I feel that it should be a part of the base editor. # Note: if we do this, remove the hasattr call in the highlighter. class SyntaxHighlighting(object): """ Notes on syntax highlighting. The syntax highlighting/parsing is performed using three "components". The base component are the token instances. Each token simply represents a row of characters in the text the belong to each-other and should be styled in the same way. There is a token class for each particular "thing" in the code, such as comments, strings, keywords, etc. Some tokens are specific to a particular language. There is a function that produces a set of tokens, when given a line of text and a state parameter. There is such a function for each language. These "parsers" are defined in the parsers subpackage. And lastly, there is the Highlighter class, that applies the parser function to obtain the set of tokens and using the names of these tokens applies styling. The styling can be defined by giving a dict that maps token names to style representations. """ # Register all syntax style elements _styleElements = Manager.getStyleElementDescriptionsForAllParsers() def parser(self): """ parser() Get the parser instance currently in use to parse the code for syntax highlighting and source structure. Can be None. """ try: return self.__parser except AttributeError: return None @ce_option(None) def setParser(self, parserName=''): """ setParser(parserName='') Set the current parser by giving the parser name. """ # Set parser self.__parser = Manager.getParserByName(parserName) # Restyle, use setStyle for lazy updating self.setStyle() iep-3.7/iep/codeeditor/style.py0000664000175000017500000002022412271043444016765 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Modyule style Provides basic functionaliy for styling. Styling is done using a dictionary of StyleFormat instances. Each such instance reprsents a certain element being styled (e.g. keywords, line numbers, indentation guides). All possible style elements are represented using StyleElementDescription instances. These have a name, description and default format, which makes it easy to build a UI to allow the user to change the syle. """ from .qt import QtGui, QtCore Qt = QtCore.Qt class StyleElementDescription: """ StyleElementDescription(name, defaultFormat, description) Describes a style element by its name, default format, and description. A style description is a simple placeholder for something that can be styled. """ def __init__(self, name, description, defaultFormat): self._name = name self._description = description self._defaultFormat = StyleFormat(defaultFormat) def __repr__(self): return '<"%s": "%s">' % (self.name, self.defaultFormat) @property def name(self): return self._name @property def key(self): return self._name.replace(' ', '').lower() @property def description(self): return self._description @property def defaultFormat(self): return self._defaultFormat class StyleFormat: """ StyleFormat(format='') Represents the style format for a specific style element. A "style" is a dictionary that maps names (of style elements) to StyleFormat instances. The given format can be a string or another StyleFormat instance. Style formats can be combined using their update() method. A style format consists of multiple parts, where each "part" consists of a key and a value. The keys can be anything, depending on what kind of thing is being styled. The value can be obtained using the index operator (e.g. styleFomat['fore']) For a few special keys, properties are defined that return the Qt object corresponding to the value. These values are also buffered to enable fast access. These keys are: * fore: (QColor) the foreground color * back: (QColor) the background color * bold: (bool) whether the text should be bold * italic: (bool) whether the text should be in italic * underline: (int) whether an underline should be used (and which one) * linestyle: (int) what line style to use (e.g. for indent guides) * textCharFOrmat: (QTextCharFormat) for the syntax styles The format neglects spaces and case. Parts are separated by commas or semicolons. If only a key is given it's value is interpreted as 'yes'. If only a color is given, its key is interpreted as 'fore' and back. Colors should be given using the '#' hex formatting. An example format string: 'fore:#334, bold, underline:dotLine' By calling str(styleFormatInstance) the string representing of the format can be obtained. By iterating over the instance, a series of key-value pairs is obtained. """ def __init__(self, format=''): self._parts = {} self.update(format) def _resetProperties(self): self._fore = None self._back = None self._bold = None self._italic = None self._underline = None self._linestyle = None self._textCharFormat = None def __str__(self): """ Get a (cleaned up) string representation of this style format. """ parts = [] for key in self._parts: parts.append('%s:%s' % (key, self._parts[key])) return ', '.join(parts) def __repr__(self): return '' % str(self) def __getitem__(self, key): try: return self._parts[key] except KeyError: raise KeyError('Invalid part key for style format.') def __iter__(self): """ Yields a series of tuples (key, val). """ parts = [] for key in self._parts: parts.append( (key, self._parts[key]) ) return parts.__iter__() def update(self, format): """ update(format) Update this style format with the given format. """ # Reset buffered values self._resetProperties() # Make a string, so we update the format with the given one if isinstance(format, StyleFormat): format = str(format) # Split on ',' and ',', ignore spaces styleParts = [p for p in format.replace('=',':').replace(';',',').split(',')] for stylePart in styleParts: # Make sure it consists of identifier and value pair # e.g. fore:#xxx, bold:yes, underline:no if not ':' in stylePart: if stylePart.startswith('#'): stylePart = 'foreandback:' + stylePart else: stylePart += ':yes' # Get key value and strip and make lowecase key, _, val = [i.strip().lower() for i in stylePart.partition(':')] # Store in parts if key == 'foreandback': self._parts['fore'] = val self._parts['back'] = val elif key: self._parts[key] = val ## Properties def _getValueSafe(self, key): try: return self._parts[key] except KeyError: return 'no' @property def fore(self): if self._fore is None: self._fore = QtGui.QColor(self._parts['fore']) return self._fore @property def back(self): if self._back is None: self._back = QtGui.QColor(self._parts['back']) return self._back @property def bold(self): if self._bold is None: if self._getValueSafe('bold') in ['yes', 'true']: self._bold = True else: self._bold = False return self._bold @property def italic(self): if self._italic is None: if self._getValueSafe('italic') in ['yes', 'true']: self._italic = True else: self._italic = False return self._italic @property def underline(self): if self._underline is None: val = self._getValueSafe('underline') if val in ['yes', 'true']: self._underline = QtGui.QTextCharFormat.SingleUnderline elif val in ['dotted', 'dots', 'dotline']: self._underline = QtGui.QTextCharFormat.DotLine elif val in ['wave']: self._underline = QtGui.QTextCharFormat.WaveUnderline else: self._underline = QtGui.QTextCharFormat.NoUnderline return self._underline @property def linestyle(self): if self._linestyle is None: val = self._getValueSafe('linestyle') if val in ['yes', 'true']: self._linestyle = Qt.SolidLine elif val in ['dotted', 'dot', 'dots', 'dotline']: self._linestyle = Qt.DotLine elif val in ['dashed', 'dash', 'dashes', 'dashline']: self._linestyle = Qt.DashLine else: self._linestyle = Qt.SolidLine # default to solid return self._linestyle @property def textCharFormat(self): if self._textCharFormat is None: self._textCharFormat = tcf = QtGui.QTextCharFormat() self._textCharFormat.setForeground(self.fore) self._textCharFormat.setUnderlineStyle(self.underline) if self.bold: self._textCharFormat.setFontWeight(QtGui.QFont.Bold) if self.italic: self._textCharFormat.setFontItalic(True) return self._textCharFormat iep-3.7/iep/codeeditor/manager.py0000664000175000017500000002133612363434472017253 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # Codeeditor is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module manager This module contains a static class that can be used for some management tasks. """ import os, sys from .qt import QtGui, QtCore Qt = QtCore.Qt from . import parsers class Manager: """ Manager Static class to do some management tasks: * It manages the parsers * Getting style element descriptions of all parsers * Linking file extensions to parsers * Font information """ _defaultFontFamily = 'dummy_font_family_name' # Static dict of all parsers _parserInstances = {} _fileExtensions = {} ## Parsers # @classmethod # def collectParsersDynamically(cls): # """ insert the function is this module's namespace. # """ # # # Get the path of this subpackage # path = __file__ # path = os.path.dirname( os.path.abspath(path) ) # # # Determine if we're in a zipfile # i = path.find('.zip') # if i>0: # # get list of files from zipfile # path = path[:i+4] # z = zipfile.ZipFile(path) # files = [os.path.split(i)[-1] for i in z.namelist() # if 'codeeditor' in i and 'parsers' in i] # else: # # get list of files from file system # files = os.listdir(path) # # # Extract all parsers # parserModules = [] # for file in files: # # # Only python files # if file.endswith('.pyc'): # if file[:-1] in files: # continue # Only try import once # elif not file.endswith('.py'): # continue # # Only syntax files # if '_parser.' not in file: # continue # # # Import module # fullfile = os.path.join(path, file) # modname = os.path.splitext(file)[0] # print('modname', modname) # mod = __import__("codeeditor.parsers."+modname, fromlist=[modname]) # parserModules.append(mod) # # print(parserModules) @classmethod def _collectParsers(cls): """ _collectParsers() Collect all parser classes. This function is called on startup. """ # Prepare (use a set to prevent duplicates) foundParsers = set() G = parsers.__dict__ ModuleClass = os.__class__ # Collect parser classes for module_name in G: # Check if it is indeed a module, and if it has the right name if not isinstance(G[module_name], ModuleClass): continue if not module_name.endswith('_parser'): continue # Collect all valid classes from the module moduleDict = G[module_name].__dict__ for name_in_module in moduleDict: ob = moduleDict[name_in_module] if isinstance(ob, type) and issubclass(ob, parsers.Parser): foundParsers.add(ob) # Put in list with the parser names as keys parserInstances = {} for parserClass in foundParsers: name = parserClass.__name__ if name.endswith('Parser') and len(name)>6: # Get parser identifier name name = name[:-6].lower() # Try instantiating the parser try: parserInstances[name] = parserInstance = parserClass() except Exception: # We cannot get the exception object in a Python2/Python3 # compatible way print('Could not instantiate parser "%s".'%name) continue # Register extensions for this parser for ext in parserInstance.filenameExtensions(): cls._fileExtensions[ext] = name # Store cls._parserInstances = parserInstances @classmethod def getParserNames(cls): """ getParserNames() Get a list of all available parsers. """ return list(cls._parserInstances.keys()) @classmethod def getParserByName(cls, parserName): """ getParserByName(parserName) Get the parser object corresponding to the given name. If no parser is known by the given name, a warning message is printed and None is returned. """ if not parserName: return parsers.Parser() #Default dummy parser # Case insensitive parserName = parserName.lower() # Return instantiated parser object. if parserName in cls._parserInstances: return cls._parserInstances[parserName] else: print('Warning: no parser known by the name "%s".'%parserName) print('I know these: ', cls._parserInstances.keys()) return parsers.Parser() #Default dummy parser @classmethod def getStyleElementDescriptionsForAllParsers(cls): """ getStyleElementDescriptionsForAllParsers() Get all style element descriptions corresponding to the tokens of all parsers. This function is used by the code editor to register all syntax element styles to the code editor class. """ descriptions = {} for parser in cls._parserInstances.values(): for token in parser.getUsedTokens(): description = token.description descriptions[description.key] = description return list(descriptions.values()) ## File extensions @classmethod def suggestParserfromFilenameExtension(cls, ext): """ suggestParserfromFilenameExtension(ext) Given a filename extension, rerurns the name of the suggested parser corresponding to the language of the file. See also registerFilenameExtension() """ # Normalize ext ext = '.' + ext.lstrip('.').lower() # Get parser if ext in cls._fileExtensions: return cls._fileExtensions[ext] else: return '' @classmethod def registerFilenameExtension(cls, ext, parser): """ registerFilenameExtension(ext, parser) Registers the given filename extension to the given parser. The parser can be a Parser instance or its name. This function can be used to register extensions to parsers that are not registered by default. """ # Normalize ext ext = '.' + ext.lstrip('.').lower() # Check parser if isinstance(parser, parsers.Parser): parser = parser.name() # Register cls._fileExtensions[ext] = parser ## Fonts @classmethod def fontNames(cls): """ fontNames() Get a list of all monospace fonts available on this system. """ db = QtGui.QFontDatabase() QFont, QFontInfo = QtGui.QFont, QtGui.QFontInfo # fn = font_name (str) return [fn for fn in db.families() if QFontInfo(QFont(fn)).fixedPitch()] @classmethod def setDefaultFontFamily(cls, name): """ setDefaultFontFamily(name) Set the default (monospace) font family name for this system. This should be set only once during startup. """ cls._defaultFontFamily = name @classmethod def defaultFont(cls): """ defaultFont() Get the default (monospace) font for this system. Returns a QFont object. """ # Get font family f = QtGui.QFont(cls._defaultFontFamily) f.setStyleHint(f.TypeWriter, f.PreferDefault) fi = QtGui.QFontInfo(f) family = fi.family() # Get the font size size = 9 if sys.platform.startswith('darwin'): # Account for Qt font size difference # http://qt-project.org/forums/viewthread/27201 # Win/linux use 96 ppi, OS X uses 72 -> 133% ratio size = int(size*1.33333+0.4999) # Done return QtGui.QFont(family, size) # Init try: Manager._collectParsers() except Exception as why: print('Error collecting parsers') print(why) iep-3.7/iep/codeeditor/__init__.py0000664000175000017500000000477412570417671017411 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ CodeEditor A full featured code editor component based on QPlainTextEdit. """ from .manager import Manager from .base import CodeEditorBase from .extensions.appearance import ( HighlightMatchingBracket, HighlightMatchingOccurrences, HighlightCurrentLine, FullUnderlines, IndentationGuides, CodeFolding, LongLineIndicator, ShowWhitespace, ShowLineEndings, Wrap, LineNumbers, SyntaxHighlighting, BreakPoints, ) from .extensions.behaviour import ( Indentation, HomeKey, EndKey, NumpadPeriodKey, AutoIndent, PythonAutoIndent, SmartCopyAndPaste ) from .extensions.autocompletion import AutoCompletion from .extensions.calltip import Calltip # Order of superclasses: first the extensions, then CodeEditorBase # The first superclass is the first extension that gets to handle each key and # the first to receive paint events. class CodeEditor( HighlightCurrentLine, HighlightMatchingOccurrences, HighlightMatchingBracket, FullUnderlines, IndentationGuides, CodeFolding, LongLineIndicator, ShowWhitespace, ShowLineEndings, Wrap, BreakPoints, LineNumbers, AutoCompletion, #Escape: first remove autocompletion, Calltip, #then calltip Indentation, HomeKey, EndKey, NumpadPeriodKey, AutoIndent, PythonAutoIndent, SyntaxHighlighting, SmartCopyAndPaste, # overrides cut(), copy(), paste() CodeEditorBase, #CodeEditorBase must be the last one in the list ): """ CodeEditor with all the extensions """ pass iep-3.7/iep/codeeditor/misc.py0000664000175000017500000000543612271043444016570 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module misc Defined ustr (Unicode string) class and the option property decorator. """ import sys from .qt import QtGui, QtCore # Set Python version and get some names PYTHON_VERSION = sys.version_info[0] if PYTHON_VERSION < 3: ustr = unicode bstr = str from Queue import Queue, Empty else: ustr = str bstr = bytes from queue import Queue, Empty DEFAULT_OPTION_NAME = '_ce_default_value' DEFAULT_OPTION_NONE = '_+_just some absurd value_+_' def ce_option(arg1): """ Decorator for properties of the code editor. It should be used on the setter function, with its default value as an argument. The default value is then stored on the function object. At the end of the initialization, the base codeeditor class will check all members and (by using the default-value-attribute as a flag) select the ones that are options. These are then set to their default values. Similarly this information is used by the setOptions method to know which members are "options". """ # If the decorator is used without arguments, arg1 is the function # being decorated. If arguments are used, arg1 is the argument, and # we should return a callable that is then used as a decorator. # Create decorator function. def decorator_fun(f): f.__dict__[DEFAULT_OPTION_NAME] = default return f # Handle default = DEFAULT_OPTION_NONE if hasattr(arg1, '__call__'): return decorator_fun(arg1) else: default = arg1 return decorator_fun class _CallbackEventHandler(QtCore.QObject): """ Helper class to provide the callLater function. """ def __init__(self): QtCore.QObject.__init__(self) self.queue = Queue() def customEvent(self, event): while True: try: callback, args = self.queue.get_nowait() except Empty: break try: callback(*args) except Exception as why: print('callback failed: {}:\n{}'.format(callback, why)) def postEventWithCallback(self, callback, *args): self.queue.put((callback, args)) QtGui.qApp.postEvent(self, QtCore.QEvent(QtCore.QEvent.User)) def callLater(callback, *args): """ callLater(callback, *args) Post a callback to be called in the main thread. """ _callbackEventHandler.postEventWithCallback(callback, *args) # Create callback event handler instance and insert function in IEP namespace _callbackEventHandler = _CallbackEventHandler() iep-3.7/iep/codeeditor/parsers/0000775000175000017500000000000012573320440016731 5ustar almaralmar00000000000000iep-3.7/iep/codeeditor/parsers/tokens.py0000664000175000017500000001076712271052643020623 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module tokens Defines the base Token class and a few generic tokens. Tokens are used by parsers to identify for groups of characters what they represent. This is in turn used by the highlighter to determine how these characters should be styled. """ # Many parsers need this ALPHANUM = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' from ..style import StyleFormat, StyleElementDescription from ..misc import ustr, bstr class Token(object): """ Token(line, start, end) Base token class. A token is a group of characters representing "something". What is represented, is specified by the subclass. Each token class should have a docstring describing the meaning of the characters it is applied to. """ defaultStyle = 'fore:#000, bold:no, underline:no, italic:no' isToken = True # For the BlockState object, which is also returned by the parsers, this is False def __init__(self, line='', start=0, end=0): self.line = ustr(line) self.start = start self.end = end self._name = self._getName() def __str__(self): # on 2.x we use __unicode__ return self.line[self.start:self.end] def __unicode__(self): # for py 2.x return self.line[self.start:self.end] def __repr__(self): return repr('%s:%s' % (self.name, self)) def __len__(self): # Defining a length also gives a Token a boolean value: True if there # are any characters (len!=0) and False if there are none return self.end - self.start def _getName(self): """ Get the name of this token. """ nameParts = ['Syntax'] if '_parser' in self.__module__: language = self.__module__.split('_')[0] language = language.split('.')[-1] nameParts.append( language[0].upper() + language[1:] ) nameParts.append( self.__class__.__name__[:-5].lower() ) return '.'.join(nameParts) def getDefaultStyleFormat(self): elements = [] def collect(cls): if hasattr(cls, 'defaultStyle'): elements.append(cls.defaultStyle) for c in cls.__bases__: collect(c) collect(self.__class__) se = StyleFormat() for e in reversed(elements): se.update(e) return se @property def name(self): """ The name of this token. Used to identify it and attach a style. """ return self._name @property def description(self): """ description() Returns a StyleElementDescription instance that describes the style element that this token represents. """ format = self.getDefaultStyleFormat() des = 'syntax: ' + self.__doc__ return StyleElementDescription(self.name, des, str(format)) class CommentToken(Token): """ Characters representing a comment in the code. """ defaultStyle = 'fore:#007F00' class TodoCommentToken(CommentToken): """ Characters representing a comment in the code. """ defaultStyle = 'fore:#E00,italic' class StringToken(Token): """ Characters representing a textual string in the code. """ defaultStyle = 'fore:#7F007F' class UnterminatedStringToken(StringToken): """ Characters belonging to an unterminated string. """ defaultStyle = 'underline:dotted' # todo: request from user: whitespace token class TextToken(Token): """ Anything that is not a string or comment. """ defaultStyle = 'fore:#000' class IdentifierToken(TextToken): """ Characters representing normal text (i.e. words). """ defaultStyle = '' class NonIdentifierToken(TextToken): """ Not a word (operators, whitespace, etc.). """ defaultStyle = '' class KeywordToken(IdentifierToken): """ A keyword is a word with a special meaning to the language. """ defaultStyle = 'fore:#00007F, bold:yes' class NumberToken(IdentifierToken): """ Characters represening a number. """ defaultStyle = 'fore:#007F7F' class FunctionNameToken(IdentifierToken): """ Characters represening the name of a function. """ defaultStyle = 'fore:#007F7F, bold:yes' class ClassNameToken(IdentifierToken): """ Characters represening the name of a class. """ defaultStyle = 'fore:#0000FF, bold:yes' iep-3.7/iep/codeeditor/parsers/python_parser.py0000664000175000017500000003064712271052564022216 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import re from . import tokens, Parser, BlockState, text_type from .tokens import ALPHANUM from ..misc import ustr, bstr # Import tokens in module namespace from .tokens import (CommentToken, StringToken, UnterminatedStringToken, IdentifierToken, NonIdentifierToken, KeywordToken, NumberToken, FunctionNameToken, ClassNameToken, TodoCommentToken) # Keywords sets # Source: import keyword; keyword.kwlist (Python 2.6.6) python2Keywords = set(['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']) # Source: import keyword; keyword.kwlist (Python 3.1.2) python3Keywords = set(['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']) # Merge the two sets to get a general Python keyword list pythonKeywords = python2Keywords | python3Keywords class MultilineStringToken(StringToken): """ Characters representing a multi-line string. """ defaultStyle = 'fore:#7F0000' class CellCommentToken(CommentToken): """ Characters representing a cell separator comment: "##". """ defaultStyle = 'bold:yes, underline:yes' # This regexp is used to find special stuff, such as comments, numbers and # strings. tokenProg = re.compile( '#|' + # Comment or '([' + ALPHANUM + '_]+)|' + # Identifiers/numbers (group 1) or '(' + # Begin of string group (group 2) '([bB]|[uU])?' + # Possibly bytes or unicode (py2.x) '[rR]?' + # Possibly a raw string '("""|\'\'\'|"|\')' + # String start (triple qoutes first, group 4) ')' # End of string group ) #For a given type of string ( ', " , ''' , """ ),get the RegExp #program that matches the end. (^|[^\\]) means: start of the line #or something that is not \ (since \ is supposed to escape the following #quote) (\\\\)* means: any number of two slashes \\ since each slash will #escape the next one endProgs = { "'": re.compile(r"(^|[^\\])(\\\\)*'"), '"': re.compile(r'(^|[^\\])(\\\\)*"'), "'''": re.compile(r"(^|[^\\])(\\\\)*'''"), '"""': re.compile(r'(^|[^\\])(\\\\)*"""') } class PythonParser(Parser): """ Parser for Python in general (2.x or 3.x). """ _extensions = ['.py' , '.pyw'] #The list of keywords is overridden by the Python2/3 specific parsers _keywords = pythonKeywords def _identifierState(self, identifier=None): """ Given an identifier returs the identifier state: 3 means the current identifier can be a function. 4 means the current identifier can be a class. 0 otherwise. This method enables storing the state during the line, and helps the Cython parser to reuse the Python parser's code. """ if identifier is None: # Explicit get/reset try: state = self._idsState except Exception: state = 0 self._idsState = 0 return state elif identifier == 'def': # Set function state self._idsState = 3 return 3 elif identifier == 'class': # Set class state self._idsState = 4 return 4 else: # This one can be func or class, next one can't state = self._idsState self._idsState = 0 return state def parseLine(self, line, previousState=0): """ parseLine(line, previousState=0) Parse a line of Python code, yielding tokens. previousstate is the state of the previous block, and is used to handle line continuation and multiline strings. """ line = text_type(line) # Init pos = 0 # Position following the previous match # identifierState and previousstate values: # 0: nothing special # 1: multiline comment single qoutes # 2: multiline comment double quotes # 3: a def keyword # 4: a class keyword #Handle line continuation after def or class #identifierState is 3 or 4 if the previous identifier was 3 or 4 if previousState == 3 or previousState == 4: self._identifierState({3:'def',4:'class'}[previousState]) else: self._identifierState(None) if previousState in [1,2]: token = MultilineStringToken(line, 0, 0) token._style = ['', "'''", '"""'][previousState] tokens = self._findEndOfString(line, token) # Process tokens for token in tokens: yield token if isinstance(token, BlockState): return pos = token.end # Enter the main loop that iterates over the tokens and skips strings while True: # Get next tokens tokens = self._findNextToken(line, pos) if not tokens: return elif isinstance(tokens[-1], StringToken): moreTokens = self._findEndOfString(line, tokens[-1]) tokens = tokens[:-1] + moreTokens # Process tokens for token in tokens: yield token if isinstance(token, BlockState): return pos = token.end def _findEndOfString(self, line, token): """ _findEndOfString(line, token) Find the end of a string. Returns (token, endToken). The first is the given token or a replacement (UnterminatedStringToken). The latter is None, or the BlockState. If given, the line is finished. """ # Set state self._identifierState(None) # Find the matching end in the rest of the line # Do not use the start parameter of search, since ^ does not work then style = token._style endMatch = endProgs[style].search(line[token.end:]) if endMatch: # The string does end on this line tokenArgs = line, token.start, token.end + endMatch.end() if style in ['"""', "'''"]: token = MultilineStringToken(*tokenArgs) else: token.end = token.end + endMatch.end() return [token] else: # The string does not end on this line tokenArgs = line, token.start, token.end + len(line) if style == "'''": return [MultilineStringToken(*tokenArgs), BlockState(1)] elif style == '"""': return [MultilineStringToken(*tokenArgs), BlockState(2)] else: return [UnterminatedStringToken(*tokenArgs)] def _findNextToken(self, line, pos): """ _findNextToken(line, pos): Returns a token or None if no new tokens can be found. """ # Init tokens, if pos too large, were done if pos > len(line): return None tokens = [] # Find the start of the next string or comment match = tokenProg.search(line, pos) # Process the Non-Identifier between pos and match.start() # or end of line nonIdentifierEnd = match.start() if match else len(line) # Return the Non-Identifier token if non-null # todo: here it goes wrong (allow returning more than one token?) token = NonIdentifierToken(line,pos,nonIdentifierEnd) strippedNonIdentifier = ustr(token).strip() if token: tokens.append(token) # Do checks for line continuation and identifierState # Is the last non-whitespace a line-continuation character? if strippedNonIdentifier.endswith('\\'): lineContinuation = True # If there are non-whitespace characters after def or class, # cancel the identifierState if strippedNonIdentifier != '\\': self._identifierState(None) else: lineContinuation = False # If there are non-whitespace characters after def or class, # cancel the identifierState if strippedNonIdentifier != '': self._identifierState(None) # If no match, we are done processing the line if not match: if lineContinuation: tokens.append( BlockState(self._identifierState()) ) return tokens # The rest is to establish what identifier we are dealing with # Comment if match.group() == '#': matchStart = match.start() if ( line[matchStart:].startswith('##') and not line[:matchStart].strip() ): tokens.append( CellCommentToken(line,matchStart,len(line)) ) elif self._isTodoItem(line[matchStart+1:]): tokens.append( TodoCommentToken(line,matchStart,len(line)) ) else: tokens.append( CommentToken(line,matchStart,len(line)) ) if lineContinuation: tokens.append( BlockState(self._identifierState()) ) return tokens # If there are non-whitespace characters after def or class, # cancel the identifierState (this time, also if there is just a \ # since apparently it was not on the end of a line) if strippedNonIdentifier != '': self._identifierState(None) # Identifier ("a word or number") Find out whether it is a key word if match.group(1) is not None: identifier = match.group(1) tokenArgs = line, match.start(), match.end() # Set identifier state identifierState = self._identifierState(identifier) if identifier in self._keywords: tokens.append( KeywordToken(*tokenArgs) ) elif identifier[0] in '0123456789': self._identifierState(None) tokens.append( NumberToken(*tokenArgs) ) else: if (identifierState==3 and line[match.end():].lstrip().startswith('(') ): tokens.append( FunctionNameToken(*tokenArgs) ) elif identifierState==4: tokens.append( ClassNameToken(*tokenArgs) ) else: tokens.append( IdentifierToken(*tokenArgs) ) else: # We have matched a string-start # Find the string style ( ' or " or ''' or """) token = StringToken(line, match.start(), match.end()) token._style = match.group(4) # The style is in match group 4 tokens.append( token ) # Done return tokens class Python2Parser(PythonParser): """ Parser for Python 2.x code. """ # The application should choose whether to set the Py 2 specific parser _extensions = [] _keywords = python2Keywords class Python3Parser(PythonParser): """ Parser for Python 3.x code. """ # The application should choose whether to set the Py 3 specific parser _extensions = [] _keywords = python3Keywords if __name__=='__main__': print(list(tokenizeLine('this is "String" #Comment'))) print(list(tokenizeLine('this is "String\' #Comment'))) print(list(tokenizeLine('this is "String\' #Commen"t'))) print(list(tokenizeLine(r'this "test\""'))) import random stimulus='' expect=[] for i in range(10): #Create a string with lots of ' and " s=''.join("'\"\\ab#"[random.randint(0,5)] for i in range(10) ) stimulus+=repr(s) expect.append('S:'+repr(s)) stimulus+='test' expect.append('I:test') result=list(tokenizeLine(stimulus)) print (stimulus) print (expect) print (result) assert repr(result) == repr(expect) iep-3.7/iep/codeeditor/parsers/cython_parser.py0000664000175000017500000000461612271043444022173 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import re from . import tokens, Parser, BlockState from .tokens import ALPHANUM # Import tokens in module namespace from .tokens import (CommentToken, StringToken, UnterminatedStringToken, IdentifierToken, NonIdentifierToken, KeywordToken, NumberToken, FunctionNameToken, ClassNameToken, TodoCommentToken) from .python_parser import ( PythonParser, MultilineStringToken, CellCommentToken, pythonKeywords) # Set keywords cythonExtraKeywords = set(['cdef', 'cpdef', 'ctypedef', 'cimport', 'float', 'double', 'int', 'long']) class CythonParser(PythonParser): """ Parser for Cython/Pyrex. """ _extensions = ['pyi', '.pyx' , '.pxd'] _keywords = pythonKeywords | cythonExtraKeywords def _identifierState(self, identifier=None): """ Given an identifier returs the identifier state: 3 means the current identifier can be a function. 4 means the current identifier can be a class. 0 otherwise. This method enables storing the state during the line, and helps the Cython parser to reuse the Python parser's code. This implementation keeps a counter. If the counter is 0, the state is zero. """ if identifier is None: # Explicit get and reset state = 0 try: if self._idsCounter>0: state = self._idsState except Exception: pass self._idsState = 0 self._idsCounter = 0 return state elif identifier in ['def', 'cdef', 'cpdef']: # Set function state self._idsState = 3 self._idsCounter = 2 return 3 elif identifier == 'class': # Set class state self._idsState = 4 self._idsCounter = 1 return 4 elif self._idsCounter>0: self._idsCounter -= 1 return self._idsState else: # This one can be func or class, next one can't return 0 iep-3.7/iep/codeeditor/parsers/c_parser.py0000664000175000017500000001641312271043444021107 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import re from . import tokens, Parser, BlockState, text_type from .tokens import ALPHANUM from .tokens import (Token, CommentToken, StringToken, UnterminatedStringToken, IdentifierToken, NonIdentifierToken, KeywordToken, NumberToken) # todo: compiler directives (or how do you call these things starting with #) class MultilineCommentToken(CommentToken): """ Characters representing a multi-line comment. """ defaultStyle = 'fore:#007F00' class CharToken(Token): """ Single-quoted char """ defaultStyle = 'fore:#7F007F' # This regexp is used to find special stuff, such as comments, numbers and # strings. tokenProg = re.compile( '([' + ALPHANUM + '_]+)|' + # Identifiers/numbers (group 1) or '(\/\/)|' + # Single line comment (group 2) '(\/\*)|' + # Comment (group 3) or '(\'\\\\?.\')|' + # char (group 4) '(\")' # string (group 5) ) #For a string, get the RegExp #program that matches the end. (^|[^\\]) means: start of the line #or something that is not \ (since \ is supposed to escape the following #quote) (\\\\)* means: any number of two slashes \\ since each slash will #escape the next one stringEndProg = re.compile(r'(^|[^\\])(\\\\)*"') commentEndProg = re.compile(r'\*/') class CParser(Parser): """ A C parser. """ _extensions = ['.c', '.h', '.cpp', 'cxx', 'hxx'] _keywords = ['int', 'const', 'char', 'void', 'short', 'long', 'case'] def parseLine(self, line, previousState=0): """ parseLine(line, previousState=0) Parses a line of C code, yielding tokens. """ line = text_type(line) pos = 0 # Position following the previous match # identifierState and previousstate values: # 0: nothing special # 1: string # 2: multiline comment /* */ # First determine whether we should look for the end of a string, # or if we should process a token. if previousState == 1: token = StringToken(line, 0, 0) tokens = self._findEndOfString(line, token) # Process tokens for token in tokens: yield token if isinstance(token, BlockState): return pos = token.end elif previousState == 2: token = MultilineCommentToken(line, 0, 0) tokens = self._findEndOfComment(line, token) # Process tokens for token in tokens: yield token if isinstance(token, BlockState): return pos = token.end # Enter the main loop that iterates over the tokens and skips strings while True: # Get next tokens tokens = self._findNextToken(line, pos) if not tokens: return elif isinstance(tokens[-1], StringToken): moreTokens = self._findEndOfString(line, tokens[-1]) tokens = tokens[:-1] + moreTokens elif isinstance(tokens[-1], MultilineCommentToken): moreTokens = self._findEndOfComment(line, tokens[-1]) tokens = tokens[:-1] + moreTokens # Process tokens for token in tokens: yield token if isinstance(token, BlockState): return pos = token.end def _findEndOfComment(self, line, token): """ Find the matching comment end in the rest of the line """ # Do not use the start parameter of search, since ^ does not work then endMatch = commentEndProg.search(line, token.end) if endMatch: # The comment does end on this line token.end = endMatch.end() return [token] else: # The comment does not end on this line token.end = len(line) return [token, BlockState(2)] def _findEndOfString(self, line, token): """ Find the matching string end in the rest of the line """ # todo: distinguish between single and double quote strings # Find the matching end in the rest of the line # Do not use the start parameter of search, since ^ does not work then endMatch = stringEndProg.search(line[token.end:]) if endMatch: # The string does end on this line token.end = token.end + endMatch.end() return [token] else: # The string does not end on this line if line.strip().endswith("\\"): #Multi line string token = StringToken(line, token.start, len(line)) return [token, BlockState(1)] else: return [UnterminatedStringToken(line, token.start, len(line))] def _findNextToken(self, line, pos): """ _findNextToken(line, pos): Returns a token or None if no new tokens can be found. """ # Init tokens, if positing too large, stop now if pos > len(line): return None tokens = [] # Find the start of the next string or comment match = tokenProg.search(line, pos) # Process the Non-Identifier between pos and match.start() # or end of line nonIdentifierEnd = match.start() if match else len(line) # Return the Non-Identifier token if non-null token = NonIdentifierToken(line,pos,nonIdentifierEnd) if token: tokens.append(token) # If no match, we are done processing the line if not match: return tokens # The rest is to establish what identifier we are dealing with # Identifier ("a word or number") Find out whether it is a key word if match.group(1) is not None: identifier = match.group(1) tokenArgs = line, match.start(), match.end() if identifier in self._keywords: tokens.append( KeywordToken(*tokenArgs) ) elif identifier[0] in '0123456789': identifierState = 0 tokens.append( NumberToken(*tokenArgs) ) else: tokens.append( IdentifierToken(*tokenArgs) ) # Single line comment elif match.group(2) is not None: tokens.append( CommentToken(line,match.start(),len(line)) ) elif match.group(3) is not None: tokens.append( MultilineCommentToken(line,match.start(),match.end()) ) elif match.group(4) is not None: # Char tokens.append( CharToken(line,match.start(),match.end()) ) else: # We have matched a string-start tokens.append( StringToken(line,match.start(),match.end()) ) # Done return tokens if __name__=='__main__': parser = CParser() for token in parser.parseLine('void test(int i=2) /* test '): print ("%s %s" % (token.name, token)) iep-3.7/iep/codeeditor/parsers/__init__.py0000664000175000017500000001331312271043444021044 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # Codeeditor is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Subpackage parsers This subpackage contains all the syntax parsers for the different languages. """ """ CREATING PARSERS Making a parser requires these things: * Place a module in the parsers directory, which has a name ending in "_parser.py" * In the module implement one or more classes that inherit from ..parsers.Parser (or a derived class), and implement the parseLine method. * The module should import all the tokens in whiches to use from ..parsers.tokens. New tokens can also be defined by subclassing one of the token classes. * In codeeditor/parsers/__init__.py, add the new module to the list of imported parsers. """ # Normal imports import os, sys #import zipfile from . import tokens if sys.version_info[0] >= 3: text_type = str else: text_type = unicode class BlockState(object): """ BlockState(state=0, info=None) The blockstate object should be used by parsers to return the block state of the processed line. This would typically be the last item to be yielded, but this it may also be yielded befor the last yielded token. One can even yield multiple of these items, in which case the last one considered valid. """ isToken = False def __init__(self, state=0, info=None): self._state = int(state) self._info = info @property def state(self): """ The integer value representing the block state. """ return self._state @property def info(self): """ Get the information corresponding to the block. """ return self._info # Base parser class (needs to be defined before importing parser modules) class Parser(object): """ Base parser class. All parsers should inherit from this class. This base class generates a 'TextToken' for each line """ _extensions = [] _keywords = [] def parseLine(self, line, previousState=0): """ parseLine(line, previousState=0) The method that should be implemented by the parser. The previousState argument can be used to determine how the previous block ended (e.g. for multiline comments). It is an integer, the meaning of which is only known to the specific parser. This method should yield token instances. The last token can be a BlockState to specify the previousState for the next block. """ yield tokens.TextToken(line,0,len(line)) def name(self): """ name() Get the name of the parser. """ name = self.__class__.__name__.lower() if name.endswith('parser'): name = name[:-6] return name def __repr__(self): """ String representation of the parser. """ return '' % self.name() def keywords(self): """ keywords() Get a list of keywords valid for this parser. """ return [k for k in self._keywords] def filenameExtensions(self): """ filenameExtensions() Get a list of filename extensions for which this parser is appropriate. """ return ['.'+e.lstrip('.').lower() for e in self._extensions] def getStyleElementDescriptions(cls): """ getStyleElementDescriptions() This method returns a list of the StyleElementDescription instances used by this parser. """ descriptions = {} for token in self.getUsedTokens(): descriptions[token.description.key] = token.description return list(descriptions.values()) def getUsedTokens(self): """ getUsedTokens() Get a a list of token instances used by this parser. """ # Get module object of the parser try: mod = sys.modules[self.__module__] except KeyError: return [] # Get token classes from module tokenClasses = [] for name in mod.__dict__: member = mod.__dict__[name] if isinstance(member, type) and \ issubclass(member, tokens.Token): if member is not tokens.Token: tokenClasses.append(member) # Return as instances return [t() for t in tokenClasses] def _isTodoItem(self, text): """ _isTodoItem(text) Get whether the given text (which should be a comment) represents a todo item. Todo items start with "todo", "2do" or "fixme", optionally with a colon at the end. """ # Get first word word = text.lstrip().split(' ',1)[0].rstrip(':') # Test if word.lower() in ['todo', '2do', 'fixme']: return True else: return False ## Import parsers statically # We could load the parser dynamically from the source files in the # directory, but this takes quite some effort to get righ when apps # are frozen. This is doable (I do it in Visvis) but it requires the # user to specify the parser modules by hand when freezing an app. # # In summary: it takes a lot of trouble, which can be avoided by just # listing all parsers here. from . import ( python_parser, cython_parser, c_parser, ) iep-3.7/iep/codeeditor/base.py0000664000175000017500000007657012467107265016567 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the codeeditor development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ The base code editor class. """ """ WRITING EXTENSIONS FOR THE CODE EDITOR The Code Editor extension mechanism works solely based on inheritance. Extensions can override event handlers (e.g. paintEvent, keyPressEvent). Their default behaviour should be to call their super() event handler. This way, events propagate through the extensions following Python's method resolution order (http://www.python.org/download/releases/2.3/mro/). A 'fancy' code editor with extensions is created like: class FancyEditor( Extension1, Extension2, ... CodeEditorBase): pass The order of the extensions does usually matter! If multiple Extensions process the same key press, the first one has the first chance to consume it. OVERRIDING __init__ An extensions' __init__ method (if required) should look like this: class Extension: def __init__(self, *args, extensionParam1 = 1, extensionParam2 = 3, **kwds): super().__init__(*args, **kwds) some_extension_init_stuff() Note the following points: - All parameters have default values - The use of *args passes all non-named arguments to its super(), which will therefore end up at the QPlainTextEdit constructor. As a consequence, the parameters of the exentsion can only be specified as named arguments - The use of **kwds ensures that parametes that are not defined by this extension, are passed to the next extension(s) in line. - The call to super().__init__ is the first thing to do, this ensures that at least the CodeEditorBase and QPlainTextEdit, of which the CodeEditorBase is derived, are initialized when the initialization of the extension is done OVERRIDING keyPressEvent When overriding keyPressEvent, the extension has several options when an event arrives: - Ignore the event In this case, call super().keyPressEvent(event) for other extensions or the CodeEditorBase to process the event - Consume the event In order to prevent other next extensions or the CodeEditorBase to react on the event, return without calling the super().keyPressEvent - Do something based on the event, and do not let the event propagate In this case, do whatever action is defined by the extension, and do not call the super().keyPressEvent - Do something based on the event, and let the event propagate In this case, do whatever action is defined by the extension, and do call the super().keyEvent In any case, the keyPressEvent should not return a value (i.e., return None). Furthermore, an extension may also want to perform some action *after* the event has been processed by the next extensions and the CodeEditorBase. In this case, perform that action after calling super().keyPressEvent OVERRIDING paintEvent Then overriding the paintEvent, the extension may want to paint either behind or in front of the CodeEditorBase text. In order to paint behind the text, first perform the painting, and then call super().paintEvent. In order to paint in front of the text, first call super().paintEvent, then perform the painting. As a result, the total paint order is as follows for the example of the FancyEditor defined above: - First the extensions that draw behind the text (i.e. paint before calling super().paintEvent, in the order Extension1, Extension2, ... - then the CodeEditorBase, with the text - then the extensions that draw in front of the text (i.e. call super().paintEvent before painting), in the order ..., Extension2, Extension1 OVERRIDING OTHER EVENT HANDLERS When overriding other event handlers, be sure to call the super()'s event handler; either before or after your own actions, as appropriate OTHER ISSUES In order to avoid namespace clashes among the extensions, take the following into account: - Private members should start with __ to make ensure no clashes will occur - Public members / methods should have names that clearly indicate which extension they belong to (e.g. not cancel but autocompleteCancel) - Arguments of the __init__ method should also have clearly destictive names """ import sys from .qt import QtGui,QtCore Qt = QtCore.Qt from .misc import DEFAULT_OPTION_NAME, DEFAULT_OPTION_NONE, ce_option from .misc import callLater, ustr from .manager import Manager from .highlighter import Highlighter from .style import StyleFormat, StyleElementDescription class CodeEditorBase(QtGui.QPlainTextEdit): """ The base code editor class. Implements some basic features required by the extensions. """ # Style element for default text and editor background _styleElements = [('Editor.text', 'The style of the default text. ' + 'One can set the background color here.', 'fore:#000,back:#fff',)] # Signal emitted after style has changed styleChanged = QtCore.Signal() # Signal emitted after font (or font size) has changed fontChanged = QtCore.Signal() # Signal to indicate a change in breakpoints. Only emitted if the # appropriate extension is in use breakPointsChanged = QtCore.Signal(object) def __init__(self,*args, **kwds): super(CodeEditorBase, self).__init__(*args) # Set font (always monospace) self.__zoom = 0 self.setFont() # Create highlighter class self.__highlighter = Highlighter(self, self.document()) # Set some document options option = self.document().defaultTextOption() option.setFlags( option.flags() | option.IncludeTrailingSpaces | option.AddSpaceForLineAndParagraphSeparators ) self.document().setDefaultTextOption(option) # When the cursor position changes, invoke an update, so that # the hihghlighting etc will work self.cursorPositionChanged.connect(self.viewport().update) # Init styles to default values self.__style = {} for element in self.getStyleElementDescriptions(): self.__style[element.key] = element.defaultFormat # Connext style update self.styleChanged.connect(self.__afterSetStyle) self.__styleChangedPending = False # Init margins self._leftmargins = [] # Init options now. # NOTE TO PEOPLE DEVELOPING EXTENSIONS: # If an extension has an __init__ in which it first calls the # super().__init__, this __initOptions() function will be called, # while the extension's init is not yet finished. self.__initOptions(kwds) # Define colors from Solarized theme # NOTE TO PEOPLE WANTING CUSTOM COLORS: ignore this and check the # commented lines near the bottom of this method. base03 = "#002b36" base02 = "#073642" base01 = "#586e75" base00 = "#657b83" base0 = "#839496" base1 = "#93a1a1" base2 = "#eee8d5" base3 = "#fdf6e3" yellow = "#b58900" orange = "#cb4b16" red = "#dc322f" magenta = "#d33682" violet = "#6c71c4" blue = "#268bd2" cyan = "#2aa198" green = "#859900" if True: # Light vs dark #back1, back2, back3 = base3, base2, base1 # real solarised back1, back2, back3 = "#fff", base2, base1 # crispier fore1, fore2, fore3, fore4 = base00, base01, base02, base03 else: back1, back2, back3 = base03, base02, base01 fore1, fore2, fore3, fore4 = base0, base1, base2, base3 test_numbers = 90 + 0000 + 1 # todo: proper testing of syntax style # Define style using "Solarized" colors S = {} S["Editor.text"] = "back:%s, fore:%s" % (back1, fore1) S['Syntax.identifier'] = "fore:%s, bold:no, italic:no, underline:no" % fore1 S["Syntax.nonidentifier"] = "fore:%s, bold:no, italic:no, underline:no" % fore2 S["Syntax.keyword"] = "fore:%s, bold:yes, italic:no, underline:no" % fore2 # S["Syntax.functionname"] = "fore:%s, bold:yes, italic:no, underline:no" % fore3 S["Syntax.classname"] = "fore:%s, bold:yes, italic:no, underline:no" % orange # S["Syntax.string"] = "fore:%s, bold:no, italic:no, underline:no" % violet S["Syntax.unterminatedstring"] = "fore:%s, bold:no, italic:no, underline:dotted" % violet S["Syntax.python.multilinestring"] = "fore:%s, bold:no, italic:no, underline:no" % blue # S["Syntax.number"] = "fore:%s, bold:no, italic:no, underline:no" % cyan S["Syntax.comment"] ="fore:%s, bold:no, italic:no, underline:no" % yellow S["Syntax.todocomment"] = "fore:%s, bold:no, italic:yes, underline:no" % magenta S["Syntax.python.cellcomment"] = "fore:%s, bold:yes, italic:no, underline:full" % yellow # S["Editor.Long line indicator"] = "linestyle:solid, fore:%s" % back2 S["Editor.Highlight current line"] = "back:%s" % back2 S["Editor.Indentation guides"] = "linestyle:solid, fore:%s" % back2 S["Editor.Line numbers"] = "back:%s, fore:%s" % (back2, back3) # Define style using html color names. All 140 legal HTML colour # names can be used (in addition to HEX codes). A full list of # recognized colour names is available e.g. here # http://www.html-color-names.com/color-chart.php # S = {} # S["Editor.text"] = "back: white, fore: black" # S['Syntax.identifier'] = "fore: black, bold:no, italic:no, underline:no" # S["Syntax.nonidentifier"] = "fore: blue, bold:no, italic:no, underline:no" # S["Syntax.keyword"] = "fore: blue, bold:yes, italic:no, underline:no" # S["Syntax.functionname"] = "fore: black, bold:yes, italic:no, underline:no" # S["Syntax.classname"] = "fore: magenta, bold:yes, italic:no, underline:no" # S["Syntax.string"] = "fore: red, bold:no, italic:no, underline:no" # S["Syntax.unterminatedstring"] = "fore: red, bold:no, italic:no, underline:dotted" # S["Syntax.python.multilinestring"] = "fore: red, bold:no, italic:no, underline:no" # S["Syntax.number"] = "fore: dark orange, bold:no, italic:no, underline:no" # S["Syntax.comment"] ="fore: green, bold:no, italic:yes, underline:no" # S["Syntax.todocomment"] = "fore: magenta, bold:no, italic:yes, underline:no" # S["Syntax.python.cellcomment"] = "fore: green, bold:yes, italic:no, underline:full" # S["Editor.Long line indicator"] = "linestyle:solid, fore: dark grey" # S["Editor.Highlight current line"] = "back: light grey" # S["Editor.Indentation guides"] = "linestyle:solid, fore: light grey" # S["Editor.Line numbers"] = "back: light grey, fore: black" # Apply style self.setStyle(S) def _setHighlighter(self, highlighterClass): self.__highlighter = highlighterClass(self, self.document()) ## Options def __getOptionSetters(self): """ Get a dict that maps (lowercase) option names to the setter methods. """ # Get all names that can be options allNames = set(dir(self)) nativeNames = set(dir(QtGui.QPlainTextEdit)) names = allNames.difference(nativeNames) # Init dict of setter members setters = {} for name in names: # Get name without set if name.lower().startswith('set'): name = name[3:] # Get setter and getter name name_set = 'set' + name[0].upper() + name[1:] name_get = name[0].lower() + name[1:] # Check if both present if not (name_set in names and name_get in names): continue # Get members member_set = getattr(self, name_set) member_get = getattr(self, name_get) # Check if option decorator was used and get default value for member in [member_set, member_get]: if hasattr(member, DEFAULT_OPTION_NAME): defaultValue = member.__dict__[DEFAULT_OPTION_NAME] break else: continue # Set default on both member_set.__dict__[DEFAULT_OPTION_NAME] = defaultValue member_get.__dict__[DEFAULT_OPTION_NAME] = defaultValue # Add to list setters[name.lower()] = member_set # Done return setters def __setOptions(self, setters, options): """ Sets the options, given the list-of-tuples methods and an options dict. """ # List of invalid keys invalidKeys = [] # Set options for key1 in options: key2 = key1.lower() # Allow using the setter name if key2.startswith('set'): key2 = key2[3:] # Check if exists. If so, call! if key2 in setters: fun = setters[key2] val = options[key1] fun(val) else: invalidKeys.append(key1) # Check if invalid keys were given if invalidKeys: print("Warning, invalid options given: " + ', '.join(invalidKeys)) def __initOptions(self, options=None): """ Init the options with their default values. Also applies the docstrings of one to the other. """ # Make options an empty dict if not given if not options: options = {} # Get setters setters = self.__getOptionSetters() # Set default value for member_set in setters.values(): defaultVal = member_set.__dict__[DEFAULT_OPTION_NAME] if defaultVal != DEFAULT_OPTION_NONE: try: member_set(defaultVal) except Exception as why: print('Error initing option ', member_set.__name__) # Also set using given opions? if options: self.__setOptions(setters, options) def setOptions(self, options=None, **kwargs): """ setOptions(options=None, **kwargs) Set the code editor options (e.g. highlightCurrentLine) using a dict-like object, or using keyword arguments (options given in the latter overrule opions in the first). The keys in the dict are case insensitive and one can use the option's setter or getter name. """ # Process options if options: D = {} for key in options: D[key] = options[key] D.update(kwargs) else: D = kwargs # Get setters setters = self.__getOptionSetters() # Go self.__setOptions(setters, D) ## Font def setFont(self, font=None): """ setFont(font=None) Set the font for the editor. Should be a monospace font. If not, Qt will select the best matching monospace font. """ defaultFont = Manager.defaultFont() # Get font object if font is None: font = defaultFont elif isinstance(font, QtGui.QFont): pass elif isinstance(font, str): font = QtGui.QFont(font) else: raise ValueError("setFont accepts None, QFont or string.") # Hint Qt that it should be monospace font.setStyleHint(font.TypeWriter, font.PreferDefault) # Get family, fall back to default if qt could not produce monospace fontInfo = QtGui.QFontInfo(font) if fontInfo.fixedPitch(): family = fontInfo.family() else: family = defaultFont.family() # Get size: default size + zoom size = defaultFont.pointSize() + self.__zoom # Create font instance font = QtGui.QFont(family, size) # Set, emit and return QtGui.QPlainTextEdit.setFont(self, font) self.fontChanged.emit() return font def setZoom(self, zoom): """ setZoom(zoom) Set the zooming of the document. The font size is always the default font size + the zoom factor. The final zoom is returned, this may not be the same as the given zoom factor if the given factor is too small. """ # Set zoom (limit such that final pointSize >= 1) size = Manager.defaultFont().pointSize() self.__zoom = int(max(1-size,zoom)) # Set font self.setFont(self.fontInfo().family()) # Return zoom return self.__zoom ## Syntax / styling @classmethod def getStyleElementDescriptions(cls): """ getStyleElementDescriptions() This classmethod returns a list of the StyleElementDescription instances used by this class. This includes the descriptions for the syntax highlighting of all parsers. """ # Collect members by walking the class bases elements = [] def collectElements(cls, iter=1): # Valid class? if cls is object or cls is QtGui.QPlainTextEdit: return # Check members if hasattr(cls, '_styleElements'): for element in cls._styleElements: elements.append(element) # Recurse for c in cls.__bases__: collectElements(c, iter+1) collectElements(cls) # Make style element descriptions # (Use a dict to ensure there are no duplicate keys) elements2 = {} for element in elements: # Check if isinstance(element, StyleElementDescription): pass elif isinstance(element, tuple): element = StyleElementDescription(*element) else: print('Warning: invalid element: ' + repr(element)) # Store using the name as a key to prevent duplicates elements2[element.key] = element # Done return list(elements2.values()) def getStyleElementFormat(self, name): """ getStyleElementFormat(name) Get the style format for the style element corresponding with the given name. The name is case insensitive and invariant to the use of spaces. """ key = name.replace(' ','').lower() try: return self.__style[key] except KeyError: raise KeyError('Not a known style element name: "%s".' % name) def setStyle(self, style=None, **kwargs): """ setStyle(style=None, **kwargs) Updates the formatting per style element. The style consists of a dictionary that maps style names to style formats. The style names are case insensitive and invariant to the use of spaces. For convenience, keyword arguments may also be used. In this case, underscores are interpreted as dots. This function can also be called without arguments to force the editor to restyle (and rehighlight) itself. Use getStyleElementDescriptions() to get information about the available styles and their default values. Examples -------- # To make the classname in underline, but keep the color and boldness: setStyle(syntax_classname='underline') # To set all values for function names: setStyle(syntax_functionname='#883,bold:no,italic:no') # To set line number and indent guides colors setStyle({ 'editor.LineNumbers':'fore:#000,back:#777', 'editor.indentationGuides':'#f88' }) """ # Combine user input D = {} if style: for key in style: D[key] = style[key] if True: for key in kwargs: key2 = key.replace('_', '.') D[key2] = kwargs[key] # List of given invalid style element names invalidKeys = [] # Set style elements for key in D: normKey = key.replace(' ', '').lower() if normKey in self.__style: #self.__style[normKey] = StyleFormat(D[key]) self.__style[normKey].update(D[key]) else: invalidKeys.append(key) # Give warning for invalid keys if invalidKeys: print("Warning, invalid style names given: " + ','.join(invalidKeys)) # Notify that style changed, adopt a lazy approach to make loading # quicker. if self.isVisible(): callLater(self.styleChanged.emit) self.__styleChangedPending = False else: self.__styleChangedPending = True def showEvent(self, event): super(CodeEditorBase, self).showEvent(event) # Does the style need updating? if self.__styleChangedPending: callLater(self.styleChanged.emit) self.__styleChangedPending = False def __afterSetStyle(self): """ _afterSetStyle() Method to call after the style has been set. """ # Set text style using editor style sheet format = self.getStyleElementFormat('editor.text') ss = 'QPlainTextEdit{ color:%s; background-color:%s; }' % ( format['fore'], format['back']) self.setStyleSheet(ss) # Make sure the style is applied self.viewport().update() # Re-highlight callLater(self.__highlighter.rehighlight) ## Some basic options @ce_option(4) def indentWidth(self): """ Get the width of a tab character, and also the amount of spaces to use for indentation when indentUsingSpaces() is True. """ return self.__indentWidth def setIndentWidth(self, value): value = int(value) if value<=0: raise ValueError("indentWidth must be >0") self.__indentWidth = value self.setTabStopWidth(self.fontMetrics().width('i'*self.__indentWidth)) @ce_option(False) def indentUsingSpaces(self): """Get whether to use spaces (if True) or tabs (if False) to indent when the tab key is pressed """ return self.__indentUsingSpaces def setIndentUsingSpaces(self, value): self.__indentUsingSpaces = bool(value) self.__highlighter.rehighlight() ## Misc def gotoLine(self, lineNumber): """ gotoLine(lineNumber) Move the cursor to the block given by the line number (first line is number 1) and show that line. """ return self.gotoBlock(lineNumber-1) def gotoBlock(self, blockNumber): """ gotoBlock(blockNumber) Move the cursor to the block given by the block number (first block is number 0) and show that line. """ # Two implementatios. I know that the latter works, so lets # just use that. cursor = self.textCursor() #block = self.document().findBlockByNumber( blockNumber ) #cursor.setPosition(block.position()) cursor.movePosition(cursor.Start) # move to begin of the document cursor.movePosition(cursor.NextBlock,n=blockNumber) # n blocks down try: self.setTextCursor(cursor) except Exception: pass # File is smaller then the caller thought self.centerCursor() def doForSelectedBlocks(self, function): """ doForSelectedBlocks(function) Call the given function(cursor) for all blocks in the current selection A block is considered to be in the current selection if a part of it is in the current selection The supplied cursor will be located at the beginning of each block. This cursor may be modified by the function as required """ #Note: a 'TextCursor' does not represent the actual on-screen cursor, so #movements do not move the on-screen cursor #Note 2: when the text is changed, the cursor and selection start/end #positions of all cursors are updated accordingly, so the screenCursor #stays in place even if characters are inserted at the editCursor screenCursor = self.textCursor() #For maintaining which region is selected editCursor = self.textCursor() #For inserting the comment marks #Use beginEditBlock / endEditBlock to make this one undo/redo operation editCursor.beginEditBlock() try: editCursor.setPosition(screenCursor.selectionStart()) editCursor.movePosition(editCursor.StartOfBlock) # < :if selection end is at beginning of the block, don't include that #one, except when the selectionStart is same as selectionEnd while editCursor.position() self.height(): break #Reached end of the repaint area if not cursor.block().next().isValid(): break #Reached end of the text cursor.movePosition(cursor.NextBlock) def indentBlock(self, cursor, amount=1): """ indentBlock(cursor, amount=1) Indent the block given by cursor. The cursor specified is used to do the indentation; it is positioned at the beginning of the first non-whitespace position after completion May be overridden to customize indentation. """ text = ustr(cursor.block().text()) leadingWhitespace = text[:len(text)-len(text.lstrip())] #Select the leading whitespace cursor.movePosition(cursor.StartOfBlock) cursor.movePosition(cursor.Right,cursor.KeepAnchor,len(leadingWhitespace)) #Compute the new indentation length, expanding any existing tabs indent = len(leadingWhitespace.expandtabs(self.indentWidth())) if self.indentUsingSpaces(): # Determine correction, so we can round to multiples of indentation correction = indent % self.indentWidth() if correction and amount<0: correction = - (self.indentWidth() - correction) # Flip # Add the indentation tabs indent += (self.indentWidth() * amount) - correction cursor.insertText(' '*max(indent,0)) else: # Convert indentation to number of tabs, and add one indent = (indent // self.indentWidth()) + amount cursor.insertText('\t' * max(indent,0)) def dedentBlock(self, cursor): """ dedentBlock(cursor) Dedent the block given by cursor. Calls indentBlock with amount = -1. May be overridden to customize indentation. """ self.indentBlock(cursor, amount = -1) def indentSelection(self): """ indentSelection() Called when the current line/selection is to be indented. Calls indentLine(cursor) for each line in the selection. May be overridden to customize indentation. See also doForSelectedBlocks and indentBlock. """ self.doForSelectedBlocks(self.indentBlock) def dedentSelection(self): """ dedentSelection() Called when the current line/selection is to be dedented. Calls dedentLine(cursor) for each line in the selection. May be overridden to customize indentation. See also doForSelectedBlocks and dedentBlock. """ self.doForSelectedBlocks(self.dedentBlock) def justifyText(self, linewidth=70): """ justifyText(linewidth=70) """ from .textutils import TextReshaper # Get cursor cursor = self.textCursor() # Make selection include whole lines pos1, pos2 = cursor.position(), cursor.anchor() pos1, pos2 = min(pos1, pos2), max(pos1, pos2) cursor.setPosition(pos1, cursor.MoveAnchor) cursor.movePosition(cursor.StartOfBlock, cursor.MoveAnchor) cursor.setPosition(pos2, cursor.KeepAnchor) cursor.movePosition(cursor.EndOfBlock, cursor.KeepAnchor) # Use reshaper to create replacement text reshaper = TextReshaper(linewidth) reshaper.pushText(cursor.selectedText()) newText = reshaper.popText() # Update the selection #self.setTextCursor(cursor) for testing cursor.insertText(newText) def addLeftMargin(self, des, func): """ Add a margin to the left. Specify a description for the margin, and a function to get that margin. For internal use. """ assert des is not None self._leftmargins.append((des, func)) def getLeftMargin(self, des=None): """ Get the left margin, relative to the given description (which should be the same as given to addLeftMargin). If des is omitted or None, the full left margin is returned. """ margin = 0 for d, func in self._leftmargins: if d == des: break margin += func() return margin def updateMargins(self): """ Force the margins to be recalculated and set the viewport accordingly. """ leftmargin = self.getLeftMargin() self.setViewportMargins(leftmargin , 0, 0, 0) iep-3.7/iep/tools/0000775000175000017500000000000012573320440014271 5ustar almaralmar00000000000000iep-3.7/iep/tools/iepLogger.py0000664000175000017500000000664512572264214016600 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import sys, os, code from pyzolib.qt import QtCore, QtGui import iep from iep.iepcore.shell import BaseShell from iep.iepcore.iepLogging import splitConsole tool_name = "Logger" tool_summary = "Logs messages, warnings and errors within IEP." class IepLogger(BaseShell): """ Shell that logs all messages produced by IEP. It also allows to look inside IEP, which can be handy for debugging and developing. """ def __init__(self, parent): BaseShell.__init__(self, parent) # Set style to Python, or autocompletion does not work self.setParser('python') # Change background color to make the logger look different from shell # Use color as if all lines are highlighted f1 = self.getStyleElementFormat('Editor.text') f2 = self.getStyleElementFormat('Editor.Highlight current line') newStyle = 'back:%s, fore:%s' % (f2.back.name(), f1.fore.name()) self.setStyle(editor_text=newStyle) # Create namespace for logger interpreter locals = {'iep':iep, 'sys':sys, 'os':os} # Include linguist tools for name in ['linguist', 'lrelease', 'lupdate', 'lhelp']: locals[name] = getattr(iep.util._locale, name) # Create interpreter to run code self._interpreter = code.InteractiveConsole(locals, "") # Show welcome text moreBanner = "This is the IEP logger shell." self.write("Python %s on %s - %s\n\n" % (sys.version[:5], sys.platform, moreBanner)) self.write(sys.ps1, 2) # Split console history = splitConsole(self.write, self.writeErr) self.write(history) def executeCommand(self, command): """ Execute the command here! """ # Use writeErr rather than sys.stdout.write. This prevents # the prompts to be logged by the history. Because if they # are, the text does not look good due to missing newlines # when loading the history. # "Echo" stdin self.write(command, 1) more = self._interpreter.push(command.rstrip('\n')) if more: self.write(sys.ps2, 2) else: self.write(sys.ps1, 2) def writeErr(self, msg): """ This is what the logger uses to write errors. """ self.write(msg, 0, '#C00') # Note that I did not (yet) implement calltips def processAutoComp(self, aco): """ Processes an autocomp request using an AutoCompObject instance. """ # Try using buffer first if aco.tryUsingBuffer(): return # Include buildins? if not aco.name: command = "__builtins__.keys()" try: names = eval(command, {}, self._interpreter.locals) aco.addNames(names) except Exception: pass # Query list of names command = "dir({})".format(aco.name) try: names = eval(command, {}, self._interpreter.locals) aco.addNames(names) except Exception: pass # Done aco.finish() iep-3.7/iep/tools/iepHistoryViewer.py0000664000175000017500000001533712573250457020207 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ This file provides the IEP history viewer. It contains two main components: the History class, which is a Qt model, and the IepHistoryViewer, which is a Qt view """ import sys, os, time, re from pyzolib.qt import QtCore, QtGui import iep from iep import translate from iep.iepcore.menu import Menu tool_name = "History viewer" tool_summary = "Shows the last used commands." class HistoryViewer(QtGui.QListView): """ The history viewer has several ways of using the data stored in the history: - double click a single item to execute in the current shell - drag and drop one or multiple selected lines into the editor or any other widget or application accepting plain text - copy selected items using the copy item in the IEP edit menu - copy selected items using the context menu - execute selected items in the current shell using the context menu """ def __init__(self, parent = None): super().__init__(parent) # Drag/drop self.setSelectionMode(self.ExtendedSelection) self.setDragEnabled(True) # Double click self.doubleClicked.connect(self._onDoubleClicked) # Context menu self._menu = Menu(self, translate("menu", "History")) self._menu.addItem(translate("menu", "Copy ::: Copy selected lines"), iep.icons.page_white_copy, self.copy, "copy") self._menu.addItem(translate("menu", "Run ::: Run selected lines in current shell"), iep.icons.run_lines, self.runSelection, "run") self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect(self._onCustomContextMenuRequested) def runSelection(self, event = None): text = self.model().plainText(self.selectedIndexes()) shell = iep.shells.getCurrentShell() if shell is not None: shell.executeCommand(text) def copy(self, event = None): text = self.model().plainText(self.selectedIndexes()) QtGui.qApp.clipboard().setText(text) def _onCustomContextMenuRequested(self, pos): self._menu.popup(self.viewport().mapToGlobal(pos)) def _onDoubleClicked(self, index): text = self.model().data(index, QtCore.Qt.DisplayRole) shell = iep.shells.getCurrentShell() if shell is not None: shell.executeCommand(text + '\n') def setModel(self, model): """ As QtGui.QListView.setModel, but connects appropriate signals """ if self.model() is not None: self.model().rowsInserted.disconnect(self.scrollToBottom) super().setModel(model) self.model().rowsInserted.connect(self.scrollToBottom) self.scrollToBottom() class IepHistoryViewer(HistoryViewer): """ IepHistoryViewer is a thin HistoryViewer that connects itself to the shared history of the IEP shell stack """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setModel(iep.shells.sharedHistory) class History(QtGui.QStringListModel): markerPrefix = None # Text to prepend to the marker, or None for no marker maxLines = 100 # Only enforced upon loading def __init__(self, fname): super().__init__() self._file = None try: filename = os.path.join(iep.appDataDir, fname) if not os.path.isfile(filename): open(filename, 'wt').close() file = self._file = open(filename, 'r+', encoding = 'utf-8') # Truncate the file to my max number of lines lines = file.readlines() if len(lines) > self.maxLines: lines = lines[-self.maxLines:] # move to start of file, write the last lines and truncate file.seek(0) file.writelines(lines) file.truncate() # Move to the end of the file for appending file.seek(0, 2) # 2 = relative to end self.setStringList([line.rstrip() for line in lines]) except Exception as e: print ('An error occurred while loading the history: ' + str(e)) self._file = None # When data is appended for the first time, a marker will be appended first self._firstTime = True def plainText(self, indexes): """ Get the \n separated text for the selected indices (includes \n at the end) """ text = "" for index in indexes: if index.isValid(): text += self.data(index, QtCore.Qt.DisplayRole) + "\n" return text def mimeTypes(self): return ["text/plain"] def mimeData(self, indexes): mimeData = QtCore.QMimeData() mimeData.setData("text/plain", self.plainText(indexes)) return mimeData def flags(self, item): return QtCore.Qt.ItemIsSelectable | \ QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsEnabled def append(self, value): # When data is appended for the first time, a marker will be appended first if self._firstTime: if self.markerPrefix is not None: self._append(self.markerPrefix + time.strftime("%c")) self._firstTime = False self._append(value) def _append(self, value): value = value.rstrip() length = self.rowCount() self.insertRows(length, 1) self.setData(self.index(length), value) if self._file is not None: self._file.write(value +'\n') self._file.flush() class PythonHistory(History): """ A history-list that is aware of Python syntax. It inserts a Python-formatted date / time upon first append after creation, and it shows Python comments in green """ markerPrefix = "# " def data(self, index, role): if role == QtCore.Qt.ForegroundRole: text = super().data(index, QtCore.Qt.DisplayRole) if text.lstrip().startswith('#'): return QtGui.QBrush(QtGui.QColor('#007F00')) return super().data(index, role) if __name__ == '__main__': import iep.iepcore.main iep.iepcore.main.loadIcons() history = PythonHistory('shellhistorytest.py') view = IepHistoryViewer() view.setModel(history) view.show() history.append('test')iep-3.7/iep/tools/iepWorkspace.py0000664000175000017500000002531012467074710017310 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import sys, os, time from pyzolib.qt import QtCore, QtGui import iep tool_name = "Workspace" tool_summary = "Lists the variables in the current shell's namespace." def splitName(name): """ splitName(name) Split an object name in parts, taking dots and indexing into account. """ name = name.replace('[', '.[') parts = name.split('.') return [p for p in parts if p] def joinName(parts): """ joinName(parts) Join the parts of an object name, taking dots and indexing into account. """ name = '.'.join(parts) return name.replace('.[', '[') class WorkspaceProxy(QtCore.QObject): """ WorkspaceProxy A proxy class to handle the asynchonous behaviour of getting information from the shell. The workspace tool asks for a certain name, and this class notifies when new data is available using a qt signal. """ haveNewData = QtCore.Signal() def __init__(self): QtCore.QObject.__init__(self) # Variables self._variables = [] # Element to get more info of self._name = '' # Bind to events iep.shells.currentShellChanged.connect(self.onCurrentShellChanged) iep.shells.currentShellStateChanged.connect(self.onCurrentShellStateChanged) # Initialize self.onCurrentShellStateChanged() def addNamePart(self, part): """ addNamePart(part) Add a part to the name. """ parts = splitName(self._name) parts.append(part) self.setName(joinName(parts)) def setName(self, name): """ setName(name) Set the name that we want to know more of. """ self._name = name shell = iep.shells.getCurrentShell() if shell: future = shell._request.dir2(self._name) future.add_done_callback(self.processResponse) def goUp(self): """ goUp() Cut the last part off the name. """ parts = splitName(self._name) if parts: parts.pop() self.setName(joinName(parts)) def onCurrentShellChanged(self): """ onCurrentShellChanged() When no shell is selected now, update this. In all other cases, the onCurrentShellStateChange will be fired too. """ shell = iep.shells.getCurrentShell() if not shell: self._variables = [] self.haveNewData.emit() def onCurrentShellStateChanged(self): """ onCurrentShellStateChanged() Do a request for information! """ shell = iep.shells.getCurrentShell() if not shell: # Should never happen I think, but just to be sure self._variables = [] elif shell._state.lower() != 'busy': future = shell._request.dir2(self._name) future.add_done_callback(self.processResponse) def processResponse(self, future): """ processResponse(response) We got a response, update our list and notify the tree. """ response = [] # Process future if future.cancelled(): pass #print('Introspect cancelled') # No living kernel elif future.exception(): print('Introspect-queryDoc-exception: ', future.exception()) else: response = future.result() self._variables = response self.haveNewData.emit() class WorkspaceTree(QtGui.QTreeWidget): """ WorkspaceTree The tree that displays the items in the current namespace. I first thought about implementing this using the mode/view framework, but it is so much work and I can't seem to fully understand how it works :( The QTreeWidget is so very simple and enables sorting very easily, so I'll stick with that ... """ def __init__(self, parent): QtGui.QTreeWidget.__init__(self, parent) self._config = parent._config # Set header stuff self.setHeaderHidden(False) self.setColumnCount(3) self.setHeaderLabels(['Name', 'Type', 'Repr']) #self.setColumnWidth(0, 100) self.setSortingEnabled(True) # Nice rows self.setAlternatingRowColors(True) self.setRootIsDecorated(False) # Create proxy self._proxy = WorkspaceProxy() self._proxy.haveNewData.connect(self.fillWorkspace) # For menu self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu) self._menu = QtGui.QMenu() self._menu.triggered.connect(self.contextMenuTriggered) # Bind to events self.itemActivated.connect(self.onItemExpand) def contextMenuEvent(self, event): """ contextMenuEvent(event) Show the context menu. """ QtGui.QTreeView.contextMenuEvent(self, event) # Get if an item is selected item = self.currentItem() if not item: return # Create menu self._menu.clear() for a in ['Show namespace', 'Show help', 'Delete']: action = self._menu.addAction(a) parts = splitName(self._proxy._name) parts.append(item.text(0)) action._objectName = joinName(parts) action._item = item # Show self._menu.popup(QtGui.QCursor.pos()+QtCore.QPoint(3,3)) def contextMenuTriggered(self, action): """ contextMenuTriggered(action) Process a request from the context menu. """ # Get text req = action.text().lower() if 'namespace' in req: # Go deeper self.onItemExpand(action._item) elif 'help' in req: # Show help in help tool (if loaded) hw = iep.toolManager.getTool('iepinteractivehelp') if hw: hw.setObjectName(action._objectName) elif 'delete' in req: # Delete the variable shell = iep.shells.getCurrentShell() if shell: shell.processLine('del ' + action._objectName) def onItemExpand(self, item): """ onItemExpand(item) Inspect the attributes of that item. """ self._proxy.addNamePart(item.text(0)) def fillWorkspace(self): """ fillWorkspace() Update the workspace tree. """ # Clear first self.clear() # Set name line = self.parent()._line line.setText(self._proxy._name) # Add elements for des in self._proxy._variables: # Get parts parts = des.split(',',4) if len(parts) < 4: continue # Pop the 'kind' element kind = parts.pop(2) if kind in self._config.hideTypes: continue # Create item item = QtGui.QTreeWidgetItem(parts, 0) self.addTopLevelItem(item) # Set tooltip tt = '%s: %s' % (parts[0], parts[-1]) item.setToolTip(0,tt) item.setToolTip(1,tt) item.setToolTip(2,tt) class IepWorkspace(QtGui.QWidget): """ IepWorkspace The main widget for this tool. """ def __init__(self, parent): QtGui.QWidget.__init__(self, parent) # Make sure there is a configuration entry for this tool # The IEP tool manager makes sure that there is an entry in # config.tools before the tool is instantiated. toolId = self.__class__.__name__.lower() self._config = iep.config.tools[toolId] if not hasattr(self._config, 'hideTypes'): self._config.hideTypes = [] # Create tool button self._up = QtGui.QToolButton(self) style = QtGui.qApp.style() self._up.setIcon( style.standardIcon(style.SP_ArrowLeft) ) self._up.setIconSize(QtCore.QSize(16,16)) # Create "path" line edit self._line = QtGui.QLineEdit(self) self._line.setReadOnly(True) self._line.setStyleSheet("QLineEdit { background:#ddd; }") self._line.setFocusPolicy(QtCore.Qt.NoFocus) # Create options menu self._options = QtGui.QToolButton(self) self._options.setIcon(iep.icons.filter) self._options.setIconSize(QtCore.QSize(16,16)) self._options.setPopupMode(self._options.InstantPopup) self._options.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) # self._options._menu = QtGui.QMenu() self._options.setMenu(self._options._menu) self.onOptionsPress() # create menu now # Create tree self._tree = WorkspaceTree(self) # Set layout layout = QtGui.QHBoxLayout() layout.addWidget(self._up, 0) layout.addWidget(self._line, 1) layout.addWidget(self._options, 0) # mainLayout = QtGui.QVBoxLayout(self) mainLayout.addLayout(layout, 0) mainLayout.addWidget(self._tree, 1) mainLayout.setSpacing(2) mainLayout.setContentsMargins(4,4,4,4) self.setLayout(mainLayout) # Bind events self._up.pressed.connect(self._tree._proxy.goUp) self._options.pressed.connect(self.onOptionsPress) self._options._menu.triggered.connect(self.onOptionMenuTiggered) def onOptionsPress(self): """ Create the menu for the button, Do each time to make sure the checks are right. """ # Get menu menu = self._options._menu menu.clear() for type in ['type', 'function', 'module']: checked = type in self._config.hideTypes action = menu.addAction('Hide %s'%type) action.setCheckable(True) action.setChecked(checked) def onOptionMenuTiggered(self, action): """ The user decides what to hide in the workspace. """ # What to show type = action.text().split(' ',1)[1] # Swap if type in self._config.hideTypes: while type in self._config.hideTypes: self._config.hideTypes.remove(type) else: self._config.hideTypes.append(type) # Update self._tree.fillWorkspace() iep-3.7/iep/tools/iepSourceStructure.py0000664000175000017500000002161612312411770020526 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import time from pyzolib.qt import QtCore, QtGui import iep tool_name = "Source structure" tool_summary = "Shows the structure of your source code." class IepSourceStructure(QtGui.QWidget): def __init__(self, parent): QtGui.QWidget.__init__(self, parent) # Make sure there is a configuration entry for this tool # The IEP tool manager makes sure that there is an entry in # config.tools before the tool is instantiated. toolId = self.__class__.__name__.lower() self._config = iep.config.tools[toolId] if not hasattr(self._config, 'showTypes'): self._config.showTypes = ['class', 'def', 'cell', 'todo'] if not hasattr(self._config, 'level'): self._config.level = 2 # Create icon for slider self._sliderIcon = QtGui.QToolButton(self) self._sliderIcon.setIcon(iep.icons.text_align_right) self._sliderIcon.setIconSize(QtCore.QSize(16,16)) self._sliderIcon.setStyleSheet("QToolButton { border: none; padding: 0px; }") # Create slider self._slider = QtGui.QSlider(QtCore.Qt.Horizontal, self) self._slider.setTickPosition(QtGui.QSlider.TicksBelow) self._slider.setSingleStep(1) self._slider.setPageStep(1) self._slider.setRange(1,9) self._slider.setValue(self._config.level) self._slider.valueChanged.connect(self.updateStructure) # Create options button #self._options = QtGui.QPushButton(self) #self._options.setText('Options')) #self._options.setToolTip("What elements to show.") self._options = QtGui.QToolButton(self) self._options.setIcon(iep.icons.filter) self._options.setIconSize(QtCore.QSize(16,16)) self._options.setPopupMode(self._options.InstantPopup) self._options.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) # Create options menu self._options._menu = QtGui.QMenu() self._options.setMenu(self._options._menu) # Create tree widget self._tree = QtGui.QTreeWidget(self) self._tree.setHeaderHidden(True) self._tree.itemCollapsed.connect(self.updateStructure) # keep expanded self._tree.itemClicked.connect(self.onItemClick) # Create two sizers self._sizer1 = QtGui.QVBoxLayout(self) self._sizer2 = QtGui.QHBoxLayout() self._sizer1.setSpacing(2) self._sizer1.setContentsMargins(4,4,4,4) # Set layout self._sizer1.addLayout(self._sizer2, 0) self._sizer1.addWidget(self._tree, 1) self._sizer2.addWidget(self._sliderIcon, 0) self._sizer2.addWidget(self._slider, 4) self._sizer2.addStretch(1) self._sizer2.addWidget(self._options, 2) # self.setLayout(self._sizer1) # Init current-file name self._currentEditorId = 0 # Bind to events iep.editors.currentChanged.connect(self.onEditorsCurrentChanged) iep.editors.parserDone.connect(self.updateStructure) self._options.pressed.connect(self.onOptionsPress) self._options._menu.triggered.connect(self.onOptionMenuTiggered) # Start # When the tool is loaded, the editorStack is already done loading # all previous files and selected the appropriate file. self.onOptionsPress() # Create menu now self.onEditorsCurrentChanged() def onOptionsPress(self): """ Create the menu for the button, Do each time to make sure the checks are right. """ # Get menu menu = self._options._menu menu.clear() for type in ['class', 'def', 'cell', 'todo', 'import', 'attribute']: checked = type in self._config.showTypes action = menu.addAction('Show %s'%type) action.setCheckable(True) action.setChecked(checked) def onOptionMenuTiggered(self, action): """ The user decides what to show in the structure. """ # What to show type = action.text().split(' ',1)[1] # Swap if type in self._config.showTypes: while type in self._config.showTypes: self._config.showTypes.remove(type) else: self._config.showTypes.append(type) # Update self.updateStructure() def onEditorsCurrentChanged(self): """ Notify that the file is being parsed and make sure that not the structure of a previously selected file is shown. """ # Get editor and clear list editor = iep.editors.getCurrentEditor() self._tree.clear() if editor is None: # Set editor id self._currentEditorId = 0 if editor is not None: # Set editor id self._currentEditorId = id(editor) # Notify text = 'Parsing ' + editor._name + ' ...' thisItem = QtGui.QTreeWidgetItem(self._tree, [text]) # Try getting the structure right now self.updateStructure() def onItemClick(self, item): """ Go to the right line in the editor and give focus. """ # Get editor editor = iep.editors.getCurrentEditor() if not editor: return # If item is attribute, get parent if not item.linenr: item = item.parent() # Move to line editor.gotoLine(item.linenr) # Give focus iep.callLater(editor.setFocus) def updateStructure(self): """ Updates the tree. """ # Get editor editor = iep.editors.getCurrentEditor() if not editor: return # Something to show result = iep.parser._getResult() if result is None: return # Do the ids match? id0, id1, id2 = self._currentEditorId, id(editor), result.editorId if id0 != id1 or id0 != id2: return # Get current line number and the structure ln = editor.textCursor().blockNumber() ln += 1 # is ln as in line number area # Define colours colours = {'cell':'#007F00', 'class':'#0000FF', 'def':'#007F7F', 'attribute':'#444444', 'import':'#8800BB', 'todo':'#FF3333'} # Define what to show showTypes = self._config.showTypes # Define to what level to show (now is also a good time to save) showLevel = int( self._slider.value() ) self._config.level = showLevel # Define function to set items selectedItem = [None] def SetItems(parentItem, fictiveObjects, level): level += 1 for object in fictiveObjects: type = object.type if not type in showTypes: continue # Construct text if type=='cell': type = '##' elif type=='attribute': type = 'attr' # if type == 'import': text = "%s (%s)" % (object.name, object.text) elif type=='todo': text = object.name else: text = "%s %s" % (type, object.name) # Create item thisItem = QtGui.QTreeWidgetItem(parentItem, [text]) color = QtGui.QColor(colours[object.type]) thisItem.setForeground(0, QtGui.QBrush(color)) font = thisItem.font(0) font.setBold(True) thisItem.setFont(0, font) thisItem.linenr = object.linenr # Is this the current item? if ln and object.linenr <= ln and object.linenr2 > ln: selectedItem[0] = thisItem # Any children that we should display? if object.children: SetItems(thisItem, object.children, level) # Set visibility thisItem.setExpanded( bool(level < showLevel) ) # Go self._tree.setUpdatesEnabled(False) self._tree.clear() SetItems(self._tree, result.rootItem.children, 0) self._tree.setUpdatesEnabled(True) # Handle selected item selectedItem = selectedItem[0] if selectedItem: selectedItem.setBackground(0, QtGui.QBrush(QtGui.QColor('#CCC'))) self._tree.scrollToItem(selectedItem) # ensure visible iep-3.7/iep/tools/iepWebBrowser.py0000664000175000017500000002012712314766017017433 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import time import urllib.request, urllib.parse from pyzolib.qt import QtCore, QtGui imported_qtwebkit = True try: from pyzolib.qt import QtWebKit except ImportError: imported_qtwebkit = False import iep tool_name = "Web browser" tool_summary = "A very simple web browser." default_bookmarks = [ 'docs.python.org', 'scipy.org', 'doc.qt.nokia.com/4.5/', 'iep-project.org', 'pyzo.org', ] class WebView(QtGui.QTextBrowser): """ Inherit the webview class to implement zooming using the mouse wheel. """ loadStarted = QtCore.Signal() loadFinished = QtCore.Signal(bool) def __init__(self, parent): QtGui.QTextBrowser.__init__(self, parent) # Current url self._url = '' self._history = [] self._history2 = [] # Connect self.anchorClicked.connect(self.load) def wheelEvent(self, event): # Zooming does not work for this widget if QtCore.Qt.ControlModifier & QtGui.qApp.keyboardModifiers(): self.parent().wheelEvent(event) else: QtGui.QTextBrowser.wheelEvent(self, event) def url(self): return self._url def _getUrlParts(self): r = urllib.parse.urlparse(self._url) base = r.scheme + '://' + r.netloc return base, r.path, r.fragment # # def loadCss(self, urls=[]): # urls.append('http://docs.python.org/_static/default.css') # urls.append('http://docs.python.org/_static/pygments.css') # text = '' # for url in urls: # tmp = urllib.request.urlopen(url).read().decode('utf-8') # text += '\n' + tmp # self.document().setDefaultStyleSheet(text) def back(self): # Get url and update forward history url = self._history.pop() self._history2.append(self._url) # Go there url = self._load(url) def forward(self): if not self._history2: return # Get url and update forward history url = self._history2.pop() self._history.append(self._url) # Go there url = self._load(url) def load(self, url): # Clear forward history self._history2 = [] # Store current url in history while self._url in self._history: self._history.remove(self._url) self._history.append(self._url) # Load url = self._load(url) def _load(self, url): """ _load(url) Convert url and load page, returns new url. """ # Make url a string if isinstance(url, QtCore.QUrl): url = str(url.toString()) # Compose relative url to absolute if url.startswith('#'): base, path, frag = self._getUrlParts() url = base + path + url elif not '//' in url: base, path, frag = self._getUrlParts() url = base + '/' + url.lstrip('/') # Try loading self.loadStarted.emit() self._url = url try: #print('URL:', url) text = urllib.request.urlopen(url).read().decode('utf-8') self.setHtml(text) self.loadFinished.emit(True) except Exception as err: self.setHtml(str(err)) self.loadFinished.emit(False) # Set return url class IepWebBrowser(QtGui.QFrame): """ The main window, containing buttons, address bar and browser widget. """ def __init__(self, parent): QtGui.QFrame.__init__(self, parent) # Init config toolId = self.__class__.__name__.lower() self._config = iep.config.tools[toolId] if not hasattr(self._config, 'zoomFactor'): self._config.zoomFactor = 1.0 if not hasattr(self._config, 'bookMarks'): self._config.bookMarks = [] for item in default_bookmarks: if item not in self._config.bookMarks: self._config.bookMarks.append(item) # Get style object (for icons) style = QtGui.QApplication.style() # Create some buttons self._back = QtGui.QToolButton(self) self._back.setIcon(style.standardIcon(style.SP_ArrowBack)) self._back.setIconSize(QtCore.QSize(16,16)) # self._forward = QtGui.QToolButton(self) self._forward.setIcon(style.standardIcon(style.SP_ArrowForward)) self._forward.setIconSize(QtCore.QSize(16,16)) # Create address bar #self._address = QtGui.QLineEdit(self) self._address = QtGui.QComboBox(self) self._address.setEditable(True) self._address.setInsertPolicy(self._address.NoInsert) # for a in self._config.bookMarks: self._address.addItem(a) self._address.setEditText('') # Create web view if imported_qtwebkit: self._view = QtWebKit.QWebView(self) else: self._view = WebView(self) # # self._view.setZoomFactor(self._config.zoomFactor) # settings = self._view.settings() # settings.setAttribute(settings.JavascriptEnabled, True) # settings.setAttribute(settings.PluginsEnabled, True) # Layout self._sizer1 = QtGui.QVBoxLayout(self) self._sizer2 = QtGui.QHBoxLayout() # self._sizer2.addWidget(self._back, 0) self._sizer2.addWidget(self._forward, 0) self._sizer2.addWidget(self._address, 1) # self._sizer1.addLayout(self._sizer2, 0) self._sizer1.addWidget(self._view, 1) # self._sizer1.setSpacing(2) self.setLayout(self._sizer1) # Bind signals self._back.clicked .connect(self.onBack) self._forward.clicked .connect(self.onForward) self._address.lineEdit().returnPressed.connect(self.go) self._address.activated.connect(self.go) self._view.loadFinished.connect(self.onLoadEnd) self._view.loadStarted.connect(self.onLoadStart) # Start self._view.show() self.go('http://docs.python.org') def parseAddress(self, address): if not address.startswith('http'): address = 'http://' + address return address#QtCore.QUrl(address, QtCore.QUrl.TolerantMode) def go(self, address=None): if not isinstance(address, str): address = self._address.currentText() self._view.load( self.parseAddress(address) ) def onLoadStart(self): self._address.setEditText('') def onLoadEnd(self, ok): if ok: #url = self._view.url() #address = str(url.toString()) if imported_qtwebkit: address = self._view.url().toString() else: address = self._view.url() else: address = '' self._address.setEditText(str(address)) def onBack(self): self._view.back() def onForward(self): self._view.forward() def wheelEvent(self, event): if QtCore.Qt.ControlModifier & QtGui.qApp.keyboardModifiers(): # Get amount of scrolling degrees = event.delta() / 8.0 steps = degrees / 15.0 # Set factor # factor = self._view.zoomFactor() + steps/10.0 if factor < 0.25: factor = 0.25 if factor > 4.0: factor = 4.0 # Store and apply self._config.zoomFactor = factor # self._view.setZoomFactor(factor) else: QtGui.QFrame.wheelEvent(self, event) iep-3.7/iep/tools/iepInteractiveHelp.py0000664000175000017500000003003312312413721020422 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import sys, os, time, re from pyzolib.qt import QtCore, QtGui import iep tool_name = "Interactive help" tool_summary = "Shows help on an object when using up/down in autocomplete." # htmlWrap = """ {} """ # Define title text (font-size percentage does not seem to work sadly.) def get_title_text(objectName, h_class='', h_repr=''): title_text = "

" title_text += "Object: {}".format(objectName) if h_class: title_text += ", class: {}".format(h_class) if h_repr: if len(h_repr) > 40: h_repr = h_repr[:37] + '...' title_text += ", repr: {}".format(h_repr) # Finish title_text += '

\n' return title_text initText = """ Help information is queried from the current shell when moving up/down in the autocompletion list and when double clicking on a name. """ class IepInteractiveHelp(QtGui.QWidget): def __init__(self, parent): QtGui.QWidget.__init__(self, parent) # Create text field, checkbox, and button self._text = QtGui.QLineEdit(self) self._printBut = QtGui.QPushButton("Print", self) # Create options button self._options = QtGui.QToolButton(self) self._options.setIcon(iep.icons.wrench) self._options.setIconSize(QtCore.QSize(16,16)) self._options.setPopupMode(self._options.InstantPopup) self._options.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) # Create options menu self._options._menu = QtGui.QMenu() self._options.setMenu(self._options._menu) # Create browser self._browser = QtGui.QTextBrowser(self) self._browser_text = initText # Create two sizers self._sizer1 = QtGui.QVBoxLayout(self) self._sizer2 = QtGui.QHBoxLayout() # Put the elements together self._sizer2.addWidget(self._text, 4) self._sizer2.addWidget(self._printBut, 0) self._sizer2.addWidget(self._options, 2) # self._sizer1.addLayout(self._sizer2, 0) self._sizer1.addWidget(self._browser, 1) # self._sizer1.setSpacing(2) self._sizer1.setContentsMargins(4,4,4,4) self.setLayout(self._sizer1) # Set config toolId = self.__class__.__name__.lower() self._config = config = iep.config.tools[toolId] # if not hasattr(config, 'smartNewlines'): config.smartNewlines = True if not hasattr(config, 'fontSize'): if sys.platform == 'darwin': config.fontSize = 12 else: config.fontSize = 10 # Create callbacks self._text.returnPressed.connect(self.queryDoc) self._printBut.clicked.connect(self.printDoc) # self._options.pressed.connect(self.onOptionsPress) self._options._menu.triggered.connect(self.onOptionMenuTiggered) # Start self.setText() # Set default text self.onOptionsPress() # Fill menu def onOptionsPress(self): """ Create the menu for the button, Do each time to make sure the checks are right. """ # Get menu menu = self._options._menu menu.clear() # Add smart format option action = menu.addAction('Smart format') action.setCheckable(True) action.setChecked(bool(self._config.smartNewlines)) # Add delimiter menu.addSeparator() # Add font size options currentSize = self._config.fontSize for i in range(8,15): action = menu.addAction('font-size: %ipx' % i) action.setCheckable(True) action.setChecked(i==currentSize) def onOptionMenuTiggered(self, action): """ The user decides what to show in the structure. """ # Get text text = action.text().lower() if 'smart' in text: # Swap value current = bool(self._config.smartNewlines) self._config.smartNewlines = not current # Update self.queryDoc() elif 'size' in text: # Get font size size = int( text.split(':',1)[1][:-2] ) # Update self._config.fontSize = size # Update self.setText() def setText(self, text=None): # (Re)store text if text is None: text = self._browser_text else: self._browser_text = text # Set text with html header size = self._config.fontSize self._browser.setHtml(htmlWrap.format(size,text)) def setObjectName(self, name): """ Set the object name programatically and query documentation for it. """ self._text.setText(name) self.queryDoc() def printDoc(self): """ Print the doc for the text in the line edit. """ # Get name name = self._text.text() # Tell shell to print doc shell = iep.shells.getCurrentShell() if shell and name: shell.processLine('print({}.__doc__)'.format(name)) def queryDoc(self): """ Query the doc for the text in the line edit. """ # Get name name = self._text.text() # Get shell and ask for the documentation shell = iep.shells.getCurrentShell() if shell and name: future = shell._request.doc(name) future.add_done_callback(self.queryDoc_response) elif not name: self.setText(initText) def queryDoc_response(self, future): """ Process the response from the shell. """ # Process future if future.cancelled(): #print('Introspect cancelled') # No living kernel return elif future.exception(): print('Introspect-queryDoc-exception: ', future.exception()) return else: response = future.result() if not response: return try: # Get parts parts = response.split('\n') objectName, h_class, h_fun, h_repr = tuple(parts[:4]) h_text = '\n'.join(parts[4:]) # Obtain newlines that we hid for repr h_repr.replace('/r', '/n') # Make all newlines \n in h_text and strip h_text = h_text.replace('\r\n', '\n').replace('\r', '\n') h_text = h_text.lstrip() # Init text text = '' # These signs will fool the html h_repr = h_repr.replace("<","<") h_repr = h_repr.replace(">",">") h_text = h_text.replace("<","<") h_text = h_text.replace(">",">") if self._config.smartNewlines: # Make sure the signature is separated from the rest using at # least two newlines header = '' if True: # Get short version of objectName name = objectName.split('.')[-1] # Is the signature in the docstring? docs = h_text.replace('\n','|') tmp = re.search('[a-zA-z_\.]*?'+name+'\(.*?\)', docs) if tmp and tmp.span(0)[0]<5: header = tmp.group(0) h_text = h_text[len(header):].lstrip(':').lstrip() header = header.replace('|','') #h_text = header + '\n\n' + h_text elif h_text.startswith(objectName) or h_text.startswith(name): header, sep, docs = h_text.partition('\n') #h_text = header + '\n\n' + docs h_text = docs # Parse the text as rest/numpy like docstring h_text = self.smartFormat(h_text) if header: h_text = "

%s

\n%s" % ( header, h_text) #h_text = "%s

\n%s" % (header, h_text) else: # Make newlines html h_text = h_text.replace("\n","
") # Compile rich text text += get_title_text(objectName, h_class, h_repr) text += '{}
'.format(h_text) except Exception as why: try: text += get_title_text(objectName, h_class, h_repr) text += h_text except Exception: text = response # Done size = self._config.fontSize self.setText(text) def smartFormat(self, text): # Get lines lines = text.splitlines() # Test minimal indentation minIndent = 9999 for line in lines[1:]: line_ = line.lstrip() indent = len(line) - len(line_) if line_: minIndent = min(minIndent, indent) # Remove minimal indentation lines2 = [lines[0]] for line in lines[1:]: lines2.append( line[minIndent:] ) # Prepare prevLine_ = '' prevIndent = 0 prevWasHeader = False inExample = False forceNewline = False # Format line by line lines3 = [] for line in lines2: # Get indentation line_ = line.lstrip() indent = len(line) - len(line_) #indentPart = line[:indent-minIndent] indentPart = line[:indent] if not line_: lines3.append("
") forceNewline = True continue # Indent in html line = " " * len(indentPart) + line # Determine if we should introduce a newline isHeader = False if ("---" in line or "===" in line) and indent == prevIndent: # Header lines3[-1] = '' + lines3[-1] + '' line = ''#'
' + line isHeader = True inExample = False # Special case, examples if prevLine_.lower().startswith('example'): inExample = True else: inExample = False elif ' : ' in line: tmp = line.split(' : ',1) line = '
' + tmp[0] + ' : ' + tmp[1] elif line_.startswith('* '): line = '
   •' + line_[2:] elif prevWasHeader or inExample or forceNewline: line = '
' + line else: if prevLine_: line = " " + line_ else: line = line_ # Force next line to be on a new line if using a colon if ' : ' in line: forceNewline = True else: forceNewline = False # Prepare for next line prevLine_ = line_ prevIndent = indent prevWasHeader = isHeader # Done with line lines3.append(line) # Done formatting return ''.join(lines3) iep-3.7/iep/tools/__init__.py0000664000175000017500000003126212572570767016430 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Package tools of iep A tool consists of a module which contains a class. The id of a tool is its module name made lower case. The module should contain a class corresponding to its id. We advise to follow the common python style and start the class name with a capital letter, case does not matter for the tool to work though. For instance, the tool "ieplogger" is the class "IepLogger" found in module "iepLogger" The module may contain the following extra variables (which should be placed within the first 50 lines of code): tool_name - A readable name for the tool (may contain spaces, will be shown in the tab) tool_summary - A single line short summary of the tool. To be displayed in the statusbar. """ # tools I'd like: # - find in files # - workspace # - source tree # - snipet manager # - file browser # - pythonpath editor, startupfile editor (or as part of IEP?) import os, sys, imp from pyzolib.qt import QtCore, QtGui import iep from pyzolib import ssdf class ToolDockWidget(QtGui.QDockWidget): """ A dock widget that holds a tool. It sets all settings, initializes the tool widget, and notifies the tool manager on closing. """ def __init__(self, parent, toolManager): QtGui.QDockWidget.__init__(self, parent) # Store stuff self._toolManager = toolManager # Allow docking anywhere, othwerise restoring state wont work properly # Set other settings self.setFeatures( QtGui.QDockWidget.DockWidgetMovable | QtGui.QDockWidget.DockWidgetClosable | QtGui.QDockWidget.DockWidgetFloatable #QtGui.QDockWidget.DockWidgetVerticalTitleBar ) def setTool(self, toolId, toolName, toolClass): """ Set the tool information. Call this right after initialization. """ # Store id and set object name to enable saving/restoring state self._toolId = toolId self.setObjectName(toolId) # Set name self.setWindowTitle(toolName) # Create tool widget self.reload(toolClass) def closeEvent(self, event): if self._toolManager: self._toolManager.onToolClose(self._toolId) self._toolManager = None # Close and delete widget old = self.widget() if old: old.close() old.deleteLater() # Close and delete dock widget self.close() self.deleteLater() # We handled the event event.accept() def reload(self, toolClass): """ Reload the widget with a new widget class. """ old = self.widget() new = toolClass(iep.main) self.setWidget(new) if old: old.close() old.deleteLater() class ToolDescription: """ Provides a description of a tool and has a reference to the tool dock instance if it is loaded. """ def __init__(self, modulePath, name='', description=''): # Set names self.modulePath = modulePath self.moduleName = os.path.splitext(os.path.basename(modulePath))[0] self.id = self.moduleName.lower() if name: self.name = name else: self.name = self.id # Set description self.description = description # Init instance to None, will be set when loaded self.instance = None def menuLauncher(self, value): """ Function that is called by the menu when this tool is selected. """ if value is None: return bool(self.instance) #return self.id in iep.toolManager._activeTools elif value: iep.toolManager.loadTool(self.id) else: self.widget = None iep.toolManager.closeTool(self.id) class ToolManager(QtCore.QObject): """ Manages the tools. """ # This signal indicates a change in the loaded tools toolInstanceChange = QtCore.Signal() def __init__(self, parent = None): QtCore.QObject.__init__(self, parent) # list of ToolDescription instances self._toolInfo = None self._activeTools = {} def loadToolInfo(self): """ (re)load the tool information. """ # Get paths to load files from toolDir1 = os.path.join(iep.iepDir, 'tools') toolDir2 = os.path.join(iep.appDataDir, 'tools') # Create list of tool files toolfiles = [] for toolDir in [toolDir1, toolDir2]: tmp = [os.path.join(toolDir, f) for f in os.listdir(toolDir)] toolfiles.extend(tmp) # Note: we do not use the code below anymore, since even the frozen # app makes use of the .py files. # # Get list of files, also when we're in a zip file. # i = tooldir.find('.zip') # if i>0: # # Get list of files from zipfile # tooldir = tooldir[:i+4] # import zipfile # z = zipfile.ZipFile(tooldir) # toolfiles = [os.path.split(i)[1] for i in z.namelist() # if i.startswith('visvis') and i.count('functions')] # else: # # Get list of files from file system # toolfiles = os.listdir(tooldir) # Iterate over tool modules newlist = [] for file in toolfiles: modulePath = file # Check if os.path.isdir(file): file = os.path.join(file, '__init__.py') # A package perhaps if not os.path.isfile(file): continue elif file.endswith('__.py') or not file.endswith('.py'): continue elif file.endswith('iepFileBrowser.py'): # Skip old file browser (the file can be there from a previous install) continue # toolName = "" toolSummary = "" # read file to find name or summary linecount = 0 for line in open(file, encoding='utf-8'): linecount += 1 if linecount > 50: break if line.startswith("tool_name"): i = line.find("=") if i<0: continue line = line.rstrip("\n").rstrip("\r") line = line[i+1:].strip(" ") toolName = line.strip("'").strip('"') elif line.startswith("tool_summary"): i = line.find("=") if i<0: continue line = line.rstrip("\n").rstrip("\r") line = line[i+1:].strip(" ") toolSummary = line.strip("'").strip('"') else: pass # Add stuff tmp = ToolDescription(modulePath, toolName, toolSummary) newlist.append(tmp) # Store and return self._toolInfo = sorted( newlist, key=lambda x:x.id ) self.updateToolInstances() return self._toolInfo def updateToolInstances(self): """ Make tool instances up to date, so that it can be seen what tools are now active. """ for toolDes in self.getToolInfo(): if toolDes.id in self._activeTools: toolDes.instance = self._activeTools[toolDes.id] else: toolDes.instance = None # Emit update signal self.toolInstanceChange.emit() def getToolInfo(self): """ Like loadToolInfo(), but use buffered instance if available. """ if self._toolInfo is None: self.loadToolInfo() return self._toolInfo def getToolClass(self, toolId): """ Get the class of the tool. It will import (and reload) the module and get the class. Some checks are performed, like whether the class inherits from QWidget. Returns the class or None if failed... """ # Make sure we have the info if self._toolInfo is None: self.loadToolInfo() # Get module name and path for toolDes in self._toolInfo: if toolDes.id == toolId: moduleName = toolDes.moduleName modulePath = toolDes.modulePath break else: print("WARNING: could not find module for tool", repr(toolId)) return None # Remove from sys.modules, to force the module to reload for key in [key for key in sys.modules]: if key and key.startswith('iep.tools.'+moduleName): del sys.modules[key] # Load module try: m_file, m_fname, m_des = imp.find_module(moduleName, [os.path.dirname(modulePath)]) mod = imp.load_module('iep.tools.'+moduleName, m_file, m_fname, m_des) except Exception as why: print("Invalid tool " + toolId +":", why) return None # Is the expected class present? className = "" for member in dir(mod): if member.lower() == toolId: className = member break else: print("Invalid tool, Classname must match module name '%s'!" % toolId) return None # Does it inherit from QWidget? plug = mod.__dict__[className] if not (isinstance(plug,type) and issubclass(plug,QtGui.QWidget)): print("Invalid tool, tool class must inherit from QWidget!") return None # Succes! return plug def loadTool(self, toolId, splitWith=None): """ Load a tool by creating a dock widget containing the tool widget. """ # A tool id should always be lower case toolId = toolId.lower() # Close old one if toolId in self._activeTools: old = self._activeTools[toolId].widget() self._activeTools[toolId].setWidget(QtGui.QWidget(iep.main)) if old: old.close() old.deleteLater() # Get tool class (returns None on failure) toolClass = self.getToolClass(toolId) if toolClass is None: return # Already loaded? reload! if toolId in self._activeTools: self._activeTools[toolId].reload(toolClass) return # Obtain name from buffered list of names for toolDes in self._toolInfo: if toolDes.id == toolId: name = toolDes.name break else: name = toolId # Make sure there is a config entry for this tool if not hasattr(iep.config.tools, toolId): iep.config.tools[toolId] = ssdf.new() # Create dock widget and add in the main window dock = ToolDockWidget(iep.main, self) dock.setTool(toolId, name, toolClass) if splitWith and splitWith in self._activeTools: otherDock = self._activeTools[splitWith] iep.main.splitDockWidget(otherDock, dock, QtCore.Qt.Horizontal) else: iep.main.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) # Add to list self._activeTools[toolId] = dock self.updateToolInstances() def reloadTools(self): """ Reload all tools. """ for id in self.getLoadedTools(): self.loadTool(id) def closeTool(self, toolId): """ Close the tool with specified id. """ if toolId in self._activeTools: dock = self._activeTools[toolId] dock.close() def getTool(self, toolId): """ Get the tool widget instance, or None if not available. """ if toolId in self._activeTools: return self._activeTools[toolId].widget() else: return None def onToolClose(self, toolId): # Remove from dict self._activeTools.pop(toolId, None) # Set instance to None self.updateToolInstances() def getLoadedTools(self): """ Get a list with id's of loaded tools. """ tmp = [] for toolDes in self.getToolInfo(): if toolDes.id in self._activeTools: tmp.append(toolDes.id) return tmp iep-3.7/iep/tools/iepFileBrowser/0000775000175000017500000000000012573320440017212 5ustar almaralmar00000000000000iep-3.7/iep/tools/iepFileBrowser/utils.py0000664000175000017500000000205212271043444020724 0ustar almaralmar00000000000000 import os import ctypes import sys import string # todo: also include available remote file systems def getMounts(): if sys.platform.startswith('win'): return getDrivesWin() elif sys.platform.startswith('darwin'): return '/' elif sys.platform.startswith('linux'): return ['/'] + [os.path.join('/media', e) for e in os.listdir('/media')] else: return '/' def getDrivesWin(): drives = [] bitmask = ctypes.windll.kernel32.GetLogicalDrives() for letter in string.ascii_uppercase: if bitmask & 1: drives.append(letter) bitmask >>= 1 return [drive+':\\' for drive in drives] def hasHiddenAttribute(path): """ Test (on Windows) whether a file should be hidden. """ if not sys.platform.startswith('win'): return False try: attrs = ctypes.windll.kernel32.GetFileAttributesW(path) assert attrs != -1 return bool(attrs & 2) except (AttributeError, AssertionError): result = False iep-3.7/iep/tools/iepFileBrowser/tree.py0000664000175000017500000010076012400101705020515 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein """ Defines the tree widget to display the contents of a selected directory. """ import os import sys import time import subprocess import fnmatch from pyzolib.path import Path from . import QtCore, QtGui import iep from iep import translate from . import tasks from .utils import hasHiddenAttribute, getMounts # How to name the list of drives/mounts (i.e. 'my computer') MOUNTS = 'drives' # Create icon provider iconprovider = QtGui.QFileIconProvider() def addIconOverlays(icon, *overlays, offset=(8,0), overlay_offset=(0,0)): """ Create an overlay for an icon. """ # Create painter and pixmap pm0 = QtGui.QPixmap(16+offset[0],16)#icon.pixmap(16+offset[0],16+offset[1]) pm0.fill(QtGui.QColor(0,0,0,0)) painter = QtGui.QPainter() painter.begin(pm0) # Draw original icon painter.drawPixmap(offset[0], offset[1], icon.pixmap(16,16)) # Draw overlays for overlay in overlays: pm1 = overlay.pixmap(16,16) painter.drawPixmap(overlay_offset[0],overlay_offset[1], pm1) # Finish painter.end() # Done (return resulting icon) return QtGui.QIcon(pm0) def _filterFileByName(basename, filter): # Get the current filter spec and split it into separate filters filters = filter.replace(',', ' ').split() filters = [f for f in filters if f] # Init default; return True if there are no filters default = True for filter in filters: # Process filters in order if filter.startswith('!'): # If the filename matches a filter starting with !, hide it if fnmatch.fnmatch(basename,filter[1:]): return False default = True else: # If the file name matches a filter not starting with!, show it if fnmatch.fnmatch(basename, filter): return True default = False return default def createMounts(browser, tree): """ Create items for all known mount points (i.e. drives on Windows). """ fsProxy = browser._fsProxy mountPoints = getMounts() mountPoints.sort(key=lambda x: x.lower()) for entry in mountPoints: entry = Path(entry) item = DriveItem(tree, fsProxy.dir(entry)) def createItemsFun(browser, parent): """ Create the tree widget items for a Tree or DirItem. """ # Get file system proxy and dir proxy for which we shall create items fsProxy = browser._fsProxy dirProxy = parent._proxy # Get meta information from browser nameFilter = browser.nameFilter() searchFilter = browser.searchFilter() searchFilter = searchFilter if searchFilter['pattern'] else None expandedDirs = browser.expandedDirs starredDirs = browser.starredDirs # Filter the contents of this folder try: dirs = [] for entry in dirProxy.dirs(): entry = Path(entry) if entry.basename.startswith('.'): continue # Skip hidden files if hasHiddenAttribute(entry): continue # Skip hidden files on Windows if entry.basename == '__pycache__': continue dirs.append(entry) files = [] for entry in dirProxy.files(): entry = Path(entry) if entry.basename.startswith('.'): continue # Skip hidden files if hasHiddenAttribute(entry): continue # Skip hidden files on Windows if not _filterFileByName(entry.basename, nameFilter): continue files.append(entry) except (OSError, IOError) as err: ErrorItem(parent, str(err)) return # Sort dirs (case insensitive) dirs.sort(key=lambda x: x.lower()) # Sort files # (first by name, then by type, so finally they are by type, then name) files.sort(key=lambda x: x.lower()) files.sort(key=lambda x: x.ext.lower()) if not searchFilter: # Create dirs for path in dirs: starred = path.normcase() in starredDirs item = DirItem(parent, fsProxy.dir(path), starred) # Set hidden, we can safely expand programmatically when hidden item.setHidden(True) # Set expanded and visibility if path.normcase() in expandedDirs: item.setExpanded(True) item.setHidden(False) # Create files for path in files: item = FileItem(parent, fsProxy.file(path)) else: # If searching, inject everything in the tree # And every item is hidden at first parent = browser._tree if parent.topLevelItemCount(): searchInfoItem = parent.topLevelItem(0) else: searchInfoItem = SearchInfoItem(parent) # Increase number of found files searchInfoItem.increaseTotal(len(files)) # Create temporary file items for path in files: item = TemporaryFileItem(parent, fsProxy.file(path)) item.search(searchFilter) # Create temporary dir items if searchFilter['subDirs']: for path in dirs: item = TemporaryDirItem(parent, fsProxy.dir(path)) # Return number of files added return len(dirs) + len(files) class BrowserItem(QtGui.QTreeWidgetItem): """ Abstract item in the tree widget. """ def __init__(self, parent, pathProxy, *args): self._proxy = pathProxy QtGui.QTreeWidgetItem.__init__(self, parent, [], *args) # Set pathname to show, and icon strippedParentPath = parent.path().rstrip('/\\') if self.path().startswith(strippedParentPath): basename = self.path()[len(strippedParentPath)+1:] else: basename = self.path() # For mount points self.setText(0, basename) self.setFileIcon() # Setup interface with proxy self._proxy.changed.connect(self.onChanged) self._proxy.deleted.connect(self.onDeleted) self._proxy.errored.connect(self.onErrored) self._proxy.taskFinished.connect(self.onTaskFinished) def path(self): return self._proxy.path() def _createDummyItem(self, txt): ErrorItem(self, txt) #QtGui.QTreeWidgetItem(self, [txt]) def onDestroyed(self): self._proxy.cancel() def clear(self): """ Clear method that calls onDestroyed on its children. """ for i in reversed(range(self.childCount())): item = self.child(i) if hasattr(item, 'onDestroyed'): item.onDestroyed() self.removeChild(item) # To overload ... def onChanged(self): pass def onDeleted(self): pass def onErrored(self, err): self.clear() self._createDummyItem('Error: ' + err) def onTaskFinished(self, task): # Getting the result raises exception if an error occured. # Which is what we want; so it is visible in the logger shell task.result() class DriveItem(BrowserItem): """ Tree widget item for directories. """ def __init__(self, parent, pathProxy): BrowserItem.__init__(self, parent, pathProxy) # Item is not expandable def setFileIcon(self): # Use folder icon self.setIcon(0, iep.icons.drive) def onActivated(self): self.treeWidget().setPath(self.path()) class DirItem(BrowserItem): """ Tree widget item for directories. """ def __init__(self, parent, pathProxy, starred=False): self._starred = starred BrowserItem.__init__(self, parent, pathProxy) # Create dummy item so that the dir is expandable self._createDummyItem('Loading contents ...') def setFileIcon(self): # Use folder icon icon = iconprovider.icon(iconprovider.Folder) overlays = [] if self._starred: overlays.append(iep.icons.bullet_yellow) icon = addIconOverlays(icon, *overlays, offset=(8,0), overlay_offset=(-4,0)) self.setIcon(0, icon) def onActivated(self): self.treeWidget().setPath(self.path()) def onExpanded(self): # Update list of expanded dirs expandedDirs = self.treeWidget().parent().expandedDirs p = self.path().normcase() # Normalize case! if p not in expandedDirs: expandedDirs.append(p) # Keep track of changes in our contents self._proxy.track() self._proxy.push() def onCollapsed(self): # Update list of expanded dirs expandedDirs = self.treeWidget().parent().expandedDirs p = self.path().normcase() # Normalize case! while p in expandedDirs: expandedDirs.remove(p) # Stop tracking changes in our contents self._proxy.cancel() # Clear contents and create a single placeholder item self.clear() self._createDummyItem('Loading contents ...') # No need to implement onDeleted: the parent will get a changed event. def onChanged(self): """ Called when a change in the contents has occured, or when we just activated the proxy. Update our items! """ if not self.isExpanded(): return tree = self.treeWidget() tree.createItems(self) class FileItem(BrowserItem): """ Tree widget item for files. """ def __init__(self, parent, pathProxy, mode='normal'): BrowserItem.__init__(self, parent, pathProxy) self._mode = mode self._timeSinceLastDocString = 0 if self._mode=='normal' and self.path().lower().endswith('.py'): self._createDummyItem('Loading high level structure ...') def setFileIcon(self): # Create dummy file in iep user dir dummy_filename = Path(iep.appDataDir) / 'dummyFiles' / 'dummy' + self.path().ext # Create file? if not dummy_filename.isfile: if not dummy_filename.dirname.isdir: os.makedirs(dummy_filename.dirname) f = open(dummy_filename, 'wb') f.close() # Use that file if sys.platform.startswith('linux') and \ not QtCore.__file__.startswith('/usr/'): icon = iconprovider.icon(iconprovider.File) else: icon = iconprovider.icon(QtCore.QFileInfo(dummy_filename)) icon = addIconOverlays(icon) self.setIcon(0, icon) def searchContents(self, needle, **kwargs): self.setHidden(True) self._proxy.setSearch(needle, **kwargs) def onActivated(self): # todo: someday we should be able to simply pass the proxy object to the editors # so that we can open files on any file system path = self.path() if path.ext not in ['.pyc','.pyo','.png','.jpg','.ico']: # Load and get editor fileItem = iep.editors.loadFile(path) editor = fileItem._editor # Give focus iep.editors.getCurrentEditor().setFocus() def onExpanded(self): if self._mode == 'normal': # Create task to retrieve high level structure if self.path().lower().endswith('.py'): self._proxy.pushTask(tasks.DocstringTask()) self._proxy.pushTask(tasks.PeekTask()) def onCollapsed(self): if self._mode == 'normal': self.clear() if self.path().lower().endswith('.py'): self._createDummyItem('Loading high level structure ...') # def onClicked(self): # # Limit sending events to prevent flicker when double clicking # if time.time() - self._timeSinceLastDocString < 0.5: # return # self._timeSinceLastDocString = time.time() # # Create task # if self.path().lower().endswith('.py'): # self._proxy.pushTask(tasks.DocstringTask()) def onChanged(self): pass def onTaskFinished(self, task): if isinstance(task, tasks.DocstringTask): result = task.result() self.clear() # Docstring task is done *before* peek task if result: DocstringItem(self, result) # if isinstance(task, tasks.DocstringTask): # result = task.result() # if result: # #self.setToolTip(0, result) # # Show tooltip *now* if mouse is still over this item # tree = self.treeWidget() # pos = tree.mapFromGlobal(QtGui.QCursor.pos()) # if tree.itemAt(pos) is self: # QtGui.QToolTip.showText(QtGui.QCursor.pos(), result) elif isinstance(task, tasks.PeekTask): result = task.result() #self.clear() # Cleared when docstring task result is received if result: for r in result: SubFileItem(self, *r) else: self._createDummyItem('No classes or functions found.') else: BrowserItem.onTaskFinished(self, task) class SubFileItem(QtGui.QTreeWidgetItem): """ Tree widget item for search items. """ def __init__(self, parent, linenr, text, showlinenr=False): QtGui.QTreeWidgetItem.__init__(self, parent) self._linenr = linenr if showlinenr: self.setText(0, 'Line %i: %s' % (linenr, text)) else: self.setText(0, text) def path(self): return self.parent().path() def onActivated(self): path = self.path() if path.ext not in ['.pyc','.pyo','.png','.jpg','.ico']: # Load and get editor fileItem = iep.editors.loadFile(path) editor = fileItem._editor # Goto line editor.gotoLine(self._linenr) # Give focus iep.editors.getCurrentEditor().setFocus() class DocstringItem(QtGui.QTreeWidgetItem): """ Tree widget item for docstring placeholder items. """ def __init__(self, parent, docstring): QtGui.QTreeWidgetItem.__init__(self, parent) self._docstring = docstring # Get one-line version of docstring shortText = self._docstring.split('\n',1)[0].strip() if len(shortText) < len(self._docstring): shortText += '...' # Set short version now self.setText(0, 'doc: '+shortText) # Long version is the tooltip self.setToolTip(0, docstring) def path(self): return self.parent().path() def onClicked(self): tree = self.treeWidget() pos = tree.mapFromGlobal(QtGui.QCursor.pos()) if tree.itemAt(pos) is self: QtGui.QToolTip.showText(QtGui.QCursor.pos(), self._docstring) class ErrorItem(QtGui.QTreeWidgetItem): """ Tree widget item for errors and information. """ def __init__(self, parent, info): QtGui.QTreeWidgetItem.__init__(self, parent) self.setText(0, info) self.setFlags(QtCore.Qt.NoItemFlags) font = self.font(0) font.setItalic(True) self.setFont(0, font) class SearchInfoItem(ErrorItem): """ Tree widget item that displays info on the search. """ def __init__(self, parent): ErrorItem.__init__(self, parent, 'Searching ...') self._totalCount = 0 self._checkCount = 0 self._hitCount = 0 def increaseTotal(self, c): self._totalCount += c self.updateCounts() def addFile(self, hit): self._checkCount += 1 if hit: self._hitCount += 1 # Update appearance self.updateCounts() def updateCounts(self): counts = self._checkCount, self._totalCount, self._hitCount self.setText(0, 'Searched {}/{} files: {} hits'.format(*counts)) class TemporaryDirItem: """ Created when searching. This object posts a requests for its contents which are then processed, after which this object disbands itself. """ __slots__ = ['_tree', '_proxy', '__weakref__'] def __init__(self, tree, pathProxy): self._tree = tree self._proxy = pathProxy self._proxy.changed.connect(self.onChanged) # Process asap, but do not track self._proxy.push() # Store ourself tree._temporaryItems.add(self) def clear(self): pass # tree.createItems() calls this ... def onChanged(self): # Disband self._tree._temporaryItems.discard(self) # Process contents self._tree.createItems(self) class TemporaryFileItem: """ Created when searching. This object posts a requests to search its contents which are then processed, after which this object disbands itself, passin the proxy object to a real FileItem if the search had results. """ __slots__ = ['_tree', '_proxy', '__weakref__'] def __init__(self, tree, pathProxy): self._tree = tree self._proxy = pathProxy self._proxy.taskFinished.connect(self.onSearchResult) # Store ourself tree._temporaryItems.add(self) def search(self, searchFilter): self._proxy.pushTask(tasks.SearchTask(**searchFilter)) def onSearchResult(self, task): # Disband now self._tree._temporaryItems.discard(self) # Get result. May raise an error result = task.result() # Process contents if result: item = FileItem(self._tree, self._proxy, 'search') # Search mode for r in result: SubFileItem(item, *r, showlinenr=True) # Update counter searchInfoItem = self._tree.topLevelItem(0) if isinstance(searchInfoItem, SearchInfoItem): searchInfoItem.addFile(bool(result)) class Tree(QtGui.QTreeWidget): """ Representation of the tree view. Instances of this class are responsible for keeping the contents up-to-date. The Item classes above are dumb objects. """ dirChanged = QtCore.Signal(Path) # Emitted when user goes into a subdir def __init__(self, parent): QtGui.QTreeWidget.__init__(self, parent) # Initialize self.setMinimumWidth(150) self.setMinimumHeight(150) # self.setColumnCount(1) self.setHeaderHidden(True) self.setIconSize(QtCore.QSize(24,16)) # Connecy signals self.itemExpanded.connect(self.onItemExpanded) self.itemCollapsed.connect(self.onItemCollapsed) self.itemClicked.connect(self.onItemClicked) self.itemActivated.connect(self.onItemActivated) # Variables for restoring the view after updating self._selectedPath = '' # To restore a selection after updating self._selectedScrolling = 0 # Set of temporary items self._temporaryItems = set() # Define context menu self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.contextMenuTriggered) # Initialize proxy (this is where the path is stored) self._proxy = None def path(self): """ Get the current path shown by the treeview. """ return self._proxy.path() def setPath(self, path): """ Set the current path shown by the treeview. """ # Close old proxy if self._proxy is not None: self._proxy.cancel() self._proxy.changed.disconnect(self.onChanged) self._proxy.deleted.disconnect(self.onDeleted) self._proxy.errored.disconnect(self.onErrored) self.destroyed.disconnect(self._proxy.cancel) # Create new proxy if True: self._proxy = self.parent()._fsProxy.dir(path) self._proxy.changed.connect(self.onChanged) self._proxy.deleted.connect(self.onDeleted) self._proxy.errored.connect(self.onErrored) self.destroyed.connect(self._proxy.cancel) # Activate the proxy, we'll get a call at onChanged() asap. if path.lower() == MOUNTS.lower(): self.clear() createMounts(self.parent(), self) else: self._proxy.track() self._proxy.push() # Store dir in config self.parent().config.path = path # Signal that the dir has changed # Note that our contents may not be visible yet. self.dirChanged.emit(self.path()) def setPathUp(self): """ Go one directory up. """ newPath = self.path().dirname if newPath == self.path(): self.setPath(Path(MOUNTS)) else: self.setPath(newPath) def clear(self): """ Overload the clear method to remove the items in a nice way, alowing the pathProxy instance to be closed correctly. """ # Clear temporary (invisible) items for item in self._temporaryItems: item._proxy.cancel() self._temporaryItems.clear() # Clear visible items for i in reversed(range(self.topLevelItemCount())): item = self.topLevelItem(i) if hasattr(item, 'clear'): item.clear() if hasattr(item, 'onDestroyed'): item.onDestroyed() QtGui.QTreeWidget.clear(self) def mouseDoubleClickEvent(self, event): """ Bypass expanding an item when double-cliking it. Only activate the item. """ item = self.itemAt(event.x(), event.y()) if item is not None: self.onItemActivated(item) def onChanged(self): """ Called when our contents change or when we just changed directories. """ self.createItems(self) def createItems(self, parent): """ High level method to create the items of the tree or a DirItem. This method will handle the restoring of state etc. The actual filtering of entries and creation of tree widget items is done in the createItemsFun() function. """ # Store state and clear self._storeSelectionState() parent.clear() # Create sub items count = createItemsFun(self.parent(), parent) if not count and isinstance(parent, QtGui.QTreeWidgetItem): ErrorItem(parent, 'Empty directory') # Restore state self._restoreSelectionState() def onErrored(self, err='...'): self.clear() ErrorItem(self, 'Error: ' + err) def onDeleted(self): self.setPathUp() def onItemExpanded(self, item): if hasattr(item, 'onExpanded'): item.onExpanded() def onItemCollapsed(self, item): if hasattr(item, 'onCollapsed'): item.onCollapsed() def onItemClicked(self, item): if hasattr(item, 'onClicked'): item.onClicked() def onItemActivated(self, item): """ When an item is "activated", make that the new directory, or open that file. """ if hasattr(item, 'onActivated'): item.onActivated() def _storeSelectionState(self): # Store selection items = self.selectedItems() self._selectedPath = items[0].path() if items else '' # Store scrolling self._selectedScrolling = self.verticalScrollBar().value() def _restoreSelectionState(self): # First select the first item # (otherwise the scrolling wont work for some reason) if self.topLevelItemCount(): self.setCurrentItem(self.topLevelItem(0)) # Restore selection if self._selectedPath: items = self.findItems(self._selectedPath.basename, QtCore.Qt.MatchExactly, 0) items = [item for item in items if item.path() == self._selectedPath] if items: self.setCurrentItem(items[0]) # Restore scrolling self.verticalScrollBar().setValue(self._selectedScrolling) self.verticalScrollBar().setValue(self._selectedScrolling) def contextMenuTriggered(self, p): """ Called when context menu is clicked """ # Get item that was clicked on item = self.itemAt(p) if item is None: item = self # Create and show menu if isinstance(item, (Tree, FileItem, DirItem)): menu = PopupMenu(self, item) menu.popup(self.mapToGlobal(p+QtCore.QPoint(3,3))) class PopupMenu(iep.iepcore.menu.Menu): def __init__(self, parent, item): self._item = item iep.iepcore.menu.Menu.__init__(self, parent, " ") def build(self): isplat = sys.platform.startswith # The star object if isinstance(self._item, DirItem): if self._item._starred: self.addItem(translate("filebrowser", "Unstar this directory"), None, self._star) else: self.addItem(translate("filebrowser", "Star this directory"), None, self._star) self.addSeparator() # The IEP related functions if isinstance(self._item, FileItem): self.addItem(translate("filebrowser", "Open"), None, self._item.onActivated) if self._item.path().endswith('.py'): self.addItem(translate("filebrowser", "Run as script"), None, self._runAsScript) else: self.addItem(translate("filebrowser", "Import data..."), None, self._importData) self.addSeparator() # Create items for open and copy path if isinstance(self._item, (FileItem, DirItem)): if isplat('win') or isplat('darwin') or isplat('linux'): self.addItem(translate("filebrowser", "Open outside IEP"), None, self._openOutsideIep) if isplat('darwin'): self.addItem(translate("filebrowser", "Reveal in Finder"), None, self._showInFinder) if True: self.addItem(translate("filebrowser", "Copy path"), None, self._copyPath) self.addSeparator() # Create items for file management if isinstance(self._item, FileItem): self.addItem(translate("filebrowser", "Rename"), None, self.onRename) self.addItem(translate("filebrowser", "Delete"), None, self.onDelete) #self.addItem(translate("filebrowser", "Duplicate"), None, self.onDuplicate) if isinstance(self._item, (Tree, DirItem)): self.addItem(translate("filebrowser", "Create new file"), None, self.onCreateFile) self.addItem(translate("filebrowser", "Create new directory"), None, self.onCreateDir) if isinstance(self._item, DirItem): self.addSeparator() self.addItem(translate("filebrowser", "Rename"), None, self.onRename) self.addItem(translate("filebrowser", "Delete"), None, self.onDelete) def _star(self): # Prepare browser = self.parent().parent() path = self._item.path() if self._item._starred: browser.removeStarredDir(path) else: browser.addStarredDir(path) # Refresh self.parent().setPath(self.parent().path()) def _openOutsideIep(self): if sys.platform.startswith('darwin'): subprocess.call(('open', self._item.path())) elif sys.platform.startswith('win'): subprocess.call(('start', self._item.path()), shell=True) elif sys.platform.startswith('linux'): # xdg-open is available on all Freedesktop.org compliant distros # http://superuser.com/questions/38984/linux-equivalent-command-for-open-command-on-mac-windows subprocess.call(('xdg-open', self._item.path())) def _showInFinder(self): subprocess.call(('open', '-R', self._item.path())) def _copyPath(self): QtGui.qApp.clipboard().setText(self._item.path()) def _runAsScript(self): filename = self._item.path() shell = iep.shells.getCurrentShell() if shell is not None: shell.restart(filename) else: msg = "No shell to run code in. " m = QtGui.QMessageBox(self) m.setWindowTitle(translate("menu dialog", "Could not run")) m.setText("Could not run " + filename + ":\n\n" + msg) m.setIcon(m.Warning) m.exec_() def _importData(self): browser = self.parent().parent() wizard = browser.getImportWizard() wizard.open(self._item.path()) def onDuplicate(self): return self._duplicateOrRename(False) def onRename(self): return self._duplicateOrRename(True) def onCreateFile(self): self._createDirOrFile(True) def onCreateDir(self): self._createDirOrFile(False) def _createDirOrFile(self, file=True): # Get title and label if file: title = translate("filebrowser", "Create new file") label = translate("filebrowser", "Give the new name for the file") else: title = translate("filebrowser", "Create new directory") label = translate("filebrowser", "Give the name for the new directory") # Ask for new filename s = QtGui.QInputDialog.getText(self.parent(), title, label + ':\n%s' % self._item.path(), QtGui.QLineEdit.Normal, 'new name' ) if isinstance(s, tuple): s = s[0] if s[1] else '' # Push rename task if s: newpath = os.path.join(self._item.path(), s) task = tasks.CreateTask(newpath=newpath, file=file) self._item._proxy.pushTask(task) def _duplicateOrRename(self, rename): # Get dirname and filename dirname, filename = os.path.split(self._item.path()) # Get title and label if rename: title = translate("filebrowser", "Rename") label = translate("filebrowser", "Give the new name for the file") else: title = translate("filebrowser", "Duplicate") label = translate("filebrowser", "Give the name for the new file") filename = 'Copy of ' + filename # Ask for new filename s = QtGui.QInputDialog.getText(self.parent(), title, label + ':\n%s' % self._item.path(), QtGui.QLineEdit.Normal, filename ) if isinstance(s, tuple): s = s[0] if s[1] else '' # Push rename task if s: newpath = os.path.join(dirname, s) task = tasks.RenameTask(newpath=newpath, removeold=rename) self._item._proxy.pushTask(task) def onDelete(self): # Ask for new filename b = QtGui.QMessageBox.question(self.parent(), translate("filebrowser", "Delete"), translate("filebrowser", "Are you sure that you want to delete") + ':\n%s' % self._item.path(), QtGui.QMessageBox.Yes | QtGui.QMessageBox.Cancel, ) # Push delete task if b is QtGui.QMessageBox.Yes: self._item._proxy.pushTask(tasks.RemoveTask()) iep-3.7/iep/tools/iepFileBrowser/browser.py0000664000175000017500000005535612312305202021253 0ustar almaralmar00000000000000import os import sys from pyzolib.path import Path from pyzolib import ssdf from . import QtCore, QtGui import iep from iep import translate from .tree import Tree from . import proxies class Browser(QtGui.QWidget): """ A browser consists of an address bar, and tree view, and other widets to help browse the file system. The browser object is responsible for tying the different browser-components together. It is also provides the API for dealing with starred dirs. """ def __init__(self, parent, config, path=None): QtGui.QWidget.__init__(self, parent) # Store config self.config = config # Create star button self._projects = Projects(self) # Create path input/display lineEdit self._pathEdit = PathInput(self) # Create file system proxy self._fsProxy = proxies.NativeFSProxy() self.destroyed.connect(self._fsProxy.stop) # Create tree widget self._tree = Tree(self) self._tree.setPath(Path(self.config.path)) # Create name filter self._nameFilter = NameFilter(self) #self._nameFilter.lineEdit().setToolTip('File filter pattern') self._nameFilter.setToolTip(translate('filebrowser', 'Filename filter')) self._nameFilter.setPlaceholderText(self._nameFilter.toolTip()) # Create search filter self._searchFilter = SearchFilter(self) self._searchFilter.setToolTip(translate('filebrowser', 'Search in files')) self._searchFilter.setPlaceholderText(self._searchFilter.toolTip()) # Signals to sync path. # Widgets that can change the path transmit signal to _tree self._pathEdit.dirUp.connect(self._tree.setFocus) self._pathEdit.dirUp.connect(self._tree.setPathUp) self._pathEdit.dirChanged.connect(self._tree.setPath) self._projects.dirChanged.connect(self._tree.setPath) # self._nameFilter.filterChanged.connect(self._tree.onChanged) # == update self._searchFilter.filterChanged.connect(self._tree.onChanged) # The tree transmits signals to widgets that need to know the path self._tree.dirChanged.connect(self._pathEdit.setPath) self._tree.dirChanged.connect(self._projects.setPath) self._layout() # Set and sync path ... if path is not None: self._tree.SetPath(path) self._tree.dirChanged.emit(self._tree.path()) def getImportWizard(self): # Lazy loading try: return self._importWizard except AttributeError: from .importwizard import ImportWizard self._importWizard = ImportWizard() return self._importWizard def _layout(self): layout = QtGui.QVBoxLayout(self) layout.setContentsMargins(0,0,0,0) #layout.setSpacing(6) self.setLayout(layout) # layout.addWidget(self._projects) layout.addWidget(self._pathEdit) layout.addWidget(self._tree) # subLayout = QtGui.QHBoxLayout() subLayout.setSpacing(2) subLayout.addWidget(self._nameFilter, 5) subLayout.addWidget(self._searchFilter, 5) layout.addLayout(subLayout) def closeEvent(self, event): #print('Closing browser, stopping file system proxy') super().closeEvent(event) self._fsProxy.stop() def nameFilter(self): #return self._nameFilter.lineEdit().text() return self._nameFilter.text() def searchFilter(self): return {'pattern': self._searchFilter.text(), 'matchCase': self.config.searchMatchCase, 'regExp': self.config.searchRegExp, 'subDirs': self.config.searchSubDirs, } @property def expandedDirs(self): """ The list of the expanded directories. """ return self.parent().config.expandedDirs @property def starredDirs(self): """ A list of the starred directories. """ return [d.path for d in self.parent().config.starredDirs] def dictForStarredDir(self, path): """ Return the dict of the starred dir corresponding to the given path, or None if no starred dir was found. """ if not path: return None for d in self.parent().config.starredDirs: if d['path'] == path: return d else: return None def addStarredDir(self, path): """ Add the given path to the starred directories. """ # Create new dict newProject = ssdf.new() newProject.path = path.normcase() # Normalize case! newProject.name = path.basename newProject.addToPythonpath = False # Add it to the config self.parent().config.starredDirs.append(newProject) # Update list self._projects.updateProjectList() def removeStarredDir(self, path): """ Remove the given path from the starred directories. The path must exactlty match. """ # Remove starredDirs = self.parent().config.starredDirs pathn = path.normcase() for d in starredDirs: if pathn == d.path: starredDirs.remove(d) # Update list self._projects.updateProjectList() def test(self, sort=False): items = [] for i in range(self._tree.topLevelItemCount()): item = self._tree.topLevelItem(i) items.append(item) #self._tree.removeItemWidget(item, 0) self._tree.clear() #items.sort(key=lambda x: x._path) items = [item for item in reversed(items)] for item in items: self._tree.addTopLevelItem(item) def currentProject(self): """ Return the ssdf dict for the current project, or None. """ return self._projects.currentDict() class LineEditWithToolButtons(QtGui.QLineEdit): """ Line edit to which tool buttons (with icons) can be attached. """ def __init__(self, parent): QtGui.QLineEdit.__init__(self, parent) self._leftButtons = [] self._rightButtons = [] def addButtonLeft(self, icon, willHaveMenu=False): return self._addButton(icon, willHaveMenu, self._leftButtons) def addButtonRight(self, icon, willHaveMenu=False): return self._addButton(icon, willHaveMenu, self._rightButtons) def _addButton(self, icon, willHaveMenu, L): # Create button button = QtGui.QToolButton(self) L.append(button) # Customize appearance button.setIcon(icon) button.setIconSize(QtCore.QSize(16,16)) button.setStyleSheet("QToolButton { border: none; padding: 0px; }") #button.setStyleSheet("QToolButton { border: none; padding: 0px; background-color:red;}"); # Set behavior button.setCursor(QtCore.Qt.ArrowCursor) button.setPopupMode(button.InstantPopup) # Customize alignment if willHaveMenu: button.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) if sys.platform.startswith('win'): button.setText(' ') # Update self self._updateGeometry() return button def setButtonVisible(self, button, visible): for but in self._leftButtons: if but is button: but.setVisible(visible) for but in self._rightButtons: if but is button: but.setVisible(visible) self._updateGeometry() def resizeEvent(self, event): QtGui.QLineEdit.resizeEvent(self, event) self._updateGeometry(True) def showEvent(self, event): QtGui.QLineEdit.showEvent(self, event) self._updateGeometry() def _updateGeometry(self, light=False): if not self.isVisible(): return # Init rect = self.rect() # Determine padding and height paddingLeft, paddingRight, height = 1, 1, 0 # for but in self._leftButtons: if but.isVisible(): sz = but.sizeHint() height = max(height, sz.height()) but.move( 1+paddingLeft, (rect.bottom() + 1 - sz.height())/2 ) paddingLeft += sz.width() + 1 # for but in self._rightButtons: if but.isVisible(): sz = but.sizeHint() paddingRight += sz.width() + 1 height = max(height, sz.height()) but.move( rect.right()-1-paddingRight, (rect.bottom() + 1 - sz.height())/2 ) # Set padding ss = "QLineEdit { padding-left: %ipx; padding-right: %ipx} " self.setStyleSheet( ss % (paddingLeft, paddingRight) ); # Set minimum size if not light: fw = QtGui.qApp.style().pixelMetric(QtGui.QStyle.PM_DefaultFrameWidth) msz = self.minimumSizeHint() w = max(msz.width(), paddingLeft + paddingRight + 10) h = max(msz.height(), height + fw*2 + 2) self.setMinimumSize(w,h) class PathInput(LineEditWithToolButtons): """ Line edit for selecting a path. """ dirChanged = QtCore.Signal(Path) # Emitted when the user changes the path (and is valid) dirUp = QtCore.Signal() # Emitted when user presses the up button def __init__(self, parent): LineEditWithToolButtons.__init__(self, parent) # Create up button self._upBut = self.addButtonLeft(iep.icons.folder_parent) self._upBut.clicked.connect(self.dirUp) # To receive focus events self.setFocusPolicy(QtCore.Qt.StrongFocus) # Set completion mode self.setCompleter(QtGui.QCompleter()) c = self.completer() c.setCompletionMode(c.InlineCompletion) # Set dir model to completer dirModel = QtGui.QDirModel(c) dirModel.setFilter(QtCore.QDir.Dirs | QtCore.QDir.NoDotAndDotDot) c.setModel(dirModel) # Connect signals #c.activated.connect(self.onActivated) self.textEdited.connect(self.onTextEdited) #self.textChanged.connect(self.onTextEdited) #self.cursorPositionChanged.connect(self.onTextEdited) def setPath(self, path): """ Set the path to display. Does nothing if this widget has focus. """ if not self.hasFocus(): self.setText(path) self.checkValid() # Reset style if it was invalid first def checkValid(self): # todo: This kind of violates the abstraction of the file system # ok for now, but we should find a different approach someday # Check text = self.text() dir = Path(text) isvalid = text and dir.isdir and os.path.isabs(dir) # Apply styling ss = self.styleSheet().replace('font-style:italic; ', '') if not isvalid: ss = ss.replace('QLineEdit {', 'QLineEdit {font-style:italic; ') self.setStyleSheet(ss) # Return return isvalid def event(self, event): # Capture key events to explicitly apply the completion and # invoke checking whether the current text is a valid directory. # Test if QtGui is not None (can happen when reloading tools) if QtGui and isinstance(event, QtGui.QKeyEvent): qt = QtCore.Qt if event.key() in [qt.Key_Tab, qt.Key_Enter, qt.Key_Return]: self.setText(self.text()) # Apply completion self.onTextEdited() # Check if this is a valid dir return True return super().event(event) def onTextEdited(self, dummy=None): text = self.text() if self.checkValid(): self.dirChanged.emit(Path(text)) def focusOutEvent(self, event=None): """ focusOutEvent(event) On focusing out, make sure that the set path is correct. """ if event is not None: QtGui.QLineEdit.focusOutEvent(self, event) path = self.parent()._tree.path() self.setPath(path) class Projects(QtGui.QWidget): dirChanged = QtCore.Signal(Path) # Emitted when the user changes the project def __init__(self, parent): QtGui.QWidget.__init__(self, parent) # Init variables self._path = '' # Create combo button self._combo = QtGui.QComboBox(self) self._combo.setEditable(False) self.updateProjectList() # Create star button self._but = QtGui.QToolButton(self) self._but.setIcon( iep.icons.star3 ) self._but.setStyleSheet("QToolButton { padding: 0px; }"); self._but.setIconSize(QtCore.QSize(18,18)) self._but.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon) self._but.setPopupMode(self._but.InstantPopup) # self._menu = QtGui.QMenu(self._but) self._menu.triggered.connect(self.onMenuTriggered) self.buildMenu() # Make equal height h = max(self._combo.sizeHint().height(), self._but.sizeHint().height()) self._combo.setMinimumHeight(h); self._but.setMinimumHeight(h) # Connect signals self._but.pressed.connect(self.onButtonPressed) self._combo.activated .connect(self.onProjectSelect) # Layout layout = QtGui.QHBoxLayout(self) self.setLayout(layout) layout.addWidget(self._but) layout.addWidget(self._combo) layout.setSpacing(2) layout.setContentsMargins(0,0,0,0) def currentDict(self): """ Return the current project-dict, or None. """ path = self._combo.itemData(self._combo.currentIndex()) return self.parent().dictForStarredDir(path) def setPath(self, path): self._path = path # Find project index projectIndex, L = 0, 0 pathn = path.normcase() + os.path.sep for i in range(self._combo.count()): projectPath = self._combo.itemData(i) + os.path.sep if pathn.startswith(projectPath) and len(projectPath) > L: projectIndex, L = i, len(projectPath) # Select project or not ... self._combo.setCurrentIndex(projectIndex) if projectIndex: self._but.setIcon( iep.icons.star2 ) self._but.setMenu(self._menu) else: self._but.setIcon( iep.icons.star3 ) self._but.setMenu(None) def updateProjectList(self): # Get sorted version of starredDirs starredDirs = self.parent().starredDirs starredDirs.sort(key=lambda p:p.lower()) # Refill the combo box self._combo.clear() for p in starredDirs: name = self.parent().dictForStarredDir(p).name self._combo.addItem(name, p) # Insert dummy item if starredDirs: self._combo.insertItem(0, translate('filebrowser', 'Projects:'), '') # No-project item else: self._combo.addItem( translate('filebrowser', 'Click star to bookmark current dir'), '') def buildMenu(self): menu = self._menu menu.clear() # Add action to remove bookmark action = menu.addAction(translate('filebrowser', 'Remove project')) action._id = 'remove' action.setCheckable(False) # Add action to change name action = menu.addAction(translate('filebrowser', 'Change project name')) action._id = 'name' action.setCheckable(False) menu.addSeparator() # Add check action for adding to Pythonpath action = menu.addAction(translate('filebrowser', 'Add path to Python path')) action._id = 'pythonpath' action.setCheckable(True) d = self.currentDict() if d: checked = bool( d and d['addToPythonpath'] ) action.setChecked(checked) # Add action to cd to the project directory action = menu.addAction(translate('filebrowser', 'Go to this directory in the current shell')) action._id = 'cd' action.setCheckable(False) def onMenuTriggered(self, action): d = self.currentDict() if not d: return if action._id == 'remove': # Remove this project self.parent().removeStarredDir(d.path) elif action._id == 'name': # Open dialog to ask for name name = QtGui.QInputDialog.getText(self.parent(), translate('filebrowser', 'Project name'), translate('filebrowser', 'New project name:'), text=d['name'], ) if isinstance(name, tuple): name = name[0] if name[1] else '' if name: d['name'] = name self.updateProjectList() elif action._id == 'pythonpath': # Flip add-to-pythonpath flag d['addToPythonpath'] = not d['addToPythonpath'] elif action._id == 'cd': # cd to the directory shell = iep.shells.getCurrentShell() if shell: shell.executeCommand('cd '+d.path+'\n') def onButtonPressed(self): if self._but.menu(): # The directory is starred and has a menu. The user just # used the menu (or not). Update so it is up-to-date next time. self.buildMenu() else: # Not starred right now, create new project! self.parent().addStarredDir(self._path) # Update self.setPath(self._path) def onProjectSelect(self, index): path = self._combo.itemData(index) if path: # Go to dir self.dirChanged.emit(Path(path)) else: # Dummy item, reset self.setPath(self._path) class NameFilter(LineEditWithToolButtons): """ Combobox to filter by name. """ filterChanged = QtCore.Signal() def __init__(self, parent): LineEditWithToolButtons.__init__(self, parent) # Create tool button, and attach the menu self._menuBut = self.addButtonRight(iep.icons['filter'], True) self._menu = QtGui.QMenu(self._menuBut) self._menu.triggered.connect(self.onMenuTriggered) self._menuBut.setMenu(self._menu) # # Add common patterns for pattern in ['*', '!*.pyc', '*.py *.pyw', '*.py *.pyw *.pyx *.pxd', '*.h *.c *.cpp']: self._menu.addAction(pattern) # Emit signal when value is changed self._lastValue = '' self.returnPressed.connect(self.checkFilterValue) self.editingFinished.connect(self.checkFilterValue) # Ensure the namefilter is in the config and initialize config = self.parent().config if 'nameFilter' not in config: config.nameFilter = '!*.pyc' self.setText(config.nameFilter) def setText(self, value, test=False): """ To initialize the name filter. """ QtGui.QLineEdit.setText(self, value) if test: self.checkFilterValue() self._lastValue = value def checkFilterValue(self): value = self.text() if value != self._lastValue: self.parent().config.nameFilter = value self._lastValue = value self.filterChanged.emit() def onMenuTriggered(self, action): self.setText(action.text(), True) class SearchFilter(LineEditWithToolButtons): """ Line edit to do a search in the files. """ filterChanged = QtCore.Signal() def __init__(self, parent): LineEditWithToolButtons.__init__(self, parent) # Create tool button, and attach the menu self._menuBut = self.addButtonRight(iep.icons['magnifier'], True) self._menu = QtGui.QMenu(self._menuBut) self._menu.triggered.connect(self.onMenuTriggered) self._menuBut.setMenu(self._menu) self.buildMenu() # Create cancel button self._cancelBut = self.addButtonRight(iep.icons['cancel']) self._cancelBut.setVisible(False) # Keep track of last value of search (initialized empty) self._lastValue = '' # Connect signals self._cancelBut.pressed.connect(self.onCancelPressed) self.textChanged.connect(self.updateCancelButton) self.editingFinished.connect(self.checkFilterValue) self.returnPressed.connect(self.forceFilterChanged) def onCancelPressed(self): """ Clear text or build menu. """ if self.text(): QtGui.QLineEdit.clear(self) self.checkFilterValue() else: self.buildMenu() def checkFilterValue(self): value = self.text() if value != self._lastValue: self._lastValue = value self.filterChanged.emit() def forceFilterChanged(self): self._lastValue = value = self.text() self.filterChanged.emit() def updateCancelButton(self, text): visible = bool(self.text()) self.setButtonVisible(self._cancelBut, visible) def buildMenu(self): config = self.parent().config menu = self._menu menu.clear() map = [ ('searchMatchCase', False, translate("filebrowser", "Match case")), ('searchRegExp', False, translate("filebrowser", "RegExp")), ('searchSubDirs', True, translate("filebrowser", "Search in subdirs")) ] # Fill menu for option, default, description in map: if option is None: menu.addSeparator() else: # Make sure the option exists if option not in config: config[option] = default # Make action in menu action = menu.addAction(description) action._option = option action.setCheckable(True) action.setChecked( bool(config[option]) ) def onMenuTriggered(self, action): config = self.parent().config option = action._option # Swap this option if option in config: config[option] = not config[option] else: config[option] = True # Update self.filterChanged.emit() iep-3.7/iep/tools/iepFileBrowser/importwizard.py0000664000175000017500000005003012467075240022324 0ustar almaralmar00000000000000""" The import wizard helps the user importing CSV-like data from a file into a numpy array. The wizard containst three pages: SelectFilePage: - The user selects a file and previews its contents (or, the beginning of it) SetParametersPage: - The user selects delimiters, etc. and selects which columns to import - A preview of the data in tabualar form is shown, with colors indicating how the file is parsed: yellow for header rows, green for the comments column and red for values that could not be parsed ResultPage: - The wizard shows the generated code that is to be used to import the file according to the settings - The user chooses to execute the code in the current shell or paste the code into the editor """ import os import itertools import iep.codeeditor from pyzolib.qt import QtCore, QtGui from iep import translate import unicodedata # All keywords in Python 2 and 3. Obtained using: import keyword; keyword.kwlist # Merged from Py2 and 3 keywords = ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield'] class CodeView( iep.codeeditor.IndentationGuides, iep.codeeditor.CodeFolding, iep.codeeditor.Indentation, iep.codeeditor.HomeKey, iep.codeeditor.EndKey, iep.codeeditor.NumpadPeriodKey, iep.codeeditor.AutoIndent, iep.codeeditor.PythonAutoIndent, iep.codeeditor.SyntaxHighlighting, iep.codeeditor.CodeEditorBase): #CodeEditorBase must be the last one in the list """ Code viewer, stripped down version of the CodeEditor """ pass class SelectFilePage(QtGui.QWizardPage): """ First page of the wizard, select file and preview contents """ def __init__(self): QtGui.QWizardPage.__init__(self) self.setTitle(translate('importwizard', 'Select file')) self.txtFilename = QtGui.QLineEdit() self.btnBrowse = QtGui.QPushButton(translate('importwizard', 'Browse...')) self.preview = QtGui.QPlainTextEdit() self.preview.setReadOnly(True) vlayout = QtGui.QVBoxLayout() hlayout = QtGui.QHBoxLayout() hlayout.addWidget(self.txtFilename) hlayout.addWidget(self.btnBrowse) vlayout.addLayout(hlayout) vlayout.addWidget(QtGui.QLabel(translate('importwizard', 'Preview:'))) vlayout.addWidget(self.preview) self.setLayout(vlayout) self.registerField('fname', self.txtFilename) self.btnBrowse.clicked.connect(self.onBrowseClicked) self.txtFilename.editingFinished.connect(self.updatePreview) self._isComplete = False def onBrowseClicked(self): # Difference between PyQt4 and PySide: PySide returns filename, filter # while PyQt4 returns only the filename filename = QtGui.QFileDialog.getOpenFileName(filter = 'Text files (*.txt *.csv);;All files (*.*)') if isinstance(filename, tuple): filename = filename[0] filename = str(filename).replace('/', os.sep) # Show native file separator self.txtFilename.setText(filename) self.updatePreview() def updatePreview(self): filename = self.txtFilename.text() if not filename: data = '' self._isComplete = False self.wizard().setPreviewData(None) else: try: with open(filename,'rb') as file: maxsize = 5000 data = file.read(maxsize) more = bool(file.read(1)) # See if there is more data available data = data.decode('ascii', 'replace') self.wizard().setPreviewData(data) if more: data += '...' self._isComplete = True # Allow to proceed to the next page except Exception as e: data = str(e) self._isComplete = False self.wizard().setPreviewData(None) self.preview.setPlainText(data) self.completeChanged.emit() def isComplete(self): return self._isComplete class SetParametersPage(QtGui.QWizardPage): def __init__(self): QtGui.QWizardPage.__init__(self) self.setTitle("Select parameters") self._columnNames = None def genComboBox(choices): cbx = QtGui.QComboBox() for choice in choices: cbx.addItem(choice) cbx.setEditable(True) return cbx self.cbxDelimiter = genComboBox(",;") self.cbxComments = genComboBox("#%'") self.sbSkipHeader = QtGui.QSpinBox() self.preview = QtGui.QTableWidget() self.preview.setSelectionModel(QtGui.QItemSelectionModel(self.preview.model())) # Work-around for reference tracking bug in PySide self.preview.setSelectionBehavior(self.preview.SelectColumns) self.preview.setSelectionMode(self.preview.MultiSelection) # Layout formlayout = QtGui.QFormLayout() formlayout.addRow('Delimiter', self.cbxDelimiter) formlayout.addRow('Comments', self.cbxComments) formlayout.addRow('Header rows to skip', self.sbSkipHeader) layout = QtGui.QVBoxLayout() layout.addLayout(formlayout) layout.addWidget(QtGui.QLabel( translate('importwizard', 'Select columns to import:'))) layout.addWidget(self.preview) self.setLayout(layout) # Wizard fields self.registerField('delimiter', self.cbxDelimiter, "currentText") self.registerField('comments', self.cbxComments, "currentText") self.registerField('skip_header', self.sbSkipHeader) # Signals self.cbxComments.editTextChanged.connect(self.updatePreview) self.cbxDelimiter.editTextChanged.connect(self.updatePreview) self.sbSkipHeader.valueChanged.connect(self.updatePreview) self.preview.verticalHeader().sectionClicked.connect(self.onRowHeaderClicked) def columnNames(self): if self._columnNames is None: return list(['d' + str(i + 1) for i in range(self.preview.columnCount()-1)]) return list(self._columnNames) def updateHorizontalHeaderLabels(self): self.preview.setHorizontalHeaderLabels(self.columnNames() + ['Comments']) def onRowHeaderClicked(self, row): names = self.parseColumnNames(row) self._columnNames = names self.updateHorizontalHeaderLabels() def parseColumnNames(self, row): """ Use the data in the given row to create column names. First, try the data in the data columns. If these are all empty, use the comments column, split by the given delimiter. Names are fixed up to be valid Python 2 / Python 3 identifiers (chars a-z A-Z _ 0-9 , no Python 2 or 3 keywords, not starting with 0-9) returns: list of names, exactly as many as there are data columns """ names = [] columnCount = self.preview.columnCount()-1 for col in range(columnCount): cell = self.preview.item(row, col) if cell is None: names.append('') else: names.append(cell.text().strip()) # If no values found, try the comments: if not any(names): cell = self.preview.item(row, columnCount) if cell is not None: comment = cell.text()[1:].strip() # Remove comment char and whitespace delimiter = self.cbxDelimiter.currentText() names = list(name.strip() for name in comment.split(delimiter)) # Ensure names is exactly columnCount long names += [''] * columnCount names = names[:columnCount] # Fixup names def fixname(name, col): # Remove accents name = ''.join(c for c in unicodedata.normalize('NFD', name) if unicodedata.category(c) != 'Mn') # Replace invalid chars with _ name = ''.join(c if (c.lower()>='a' and c.lower()<='z') or (c>='0' and c<='9') else '_' for c in name) if not name: return 'd' + str(col) if name[0]>='0' and name<='9': name = 'd' + name if name in keywords: name = name + '_' return name names = list(fixname(name, i + 1) for i, name in enumerate(names)) return names def selectedColumns(self): """ Returns a tuple of the columns that are selected, or None if no columns are selected """ selected = [] for selrange in self.preview.selectionModel().selection(): selected += range(selrange.left(), selrange.right() + 1) selected.sort() if not selected: return None else: return tuple(selected) def initializePage(self): self.updatePreview() def updatePreview(self): # Get settings from the currently specified values in the wizard comments = self.cbxComments.currentText() delimiter = self.cbxDelimiter.currentText() skipheader = self.sbSkipHeader.value() if not comments or not delimiter: return # Store current selection, will be restored at the end selectedColumns = self.selectedColumns() # Clear the complete table self.preview.clear() self.preview.setColumnCount(0) self.preview.setRowCount(0) # Iterate through the source file line by line # Process like genfromtxt, with names = False # However, we do keep the header lines and comments; we show them in # distinct colors so that the user can see how the data is selected source = iter(self.wizard().previewData().splitlines()) def split_line(line): """Chop off comments, strip, and split at delimiter.""" line, sep, commentstr = line.partition(comments) line = line.strip(' \r\n') if line: return line.split(delimiter), sep + commentstr else: return [], sep + commentstr # Insert comments column self.preview.insertColumn(0) ncols = 0 # Number of columns, excluding comments column headerrows = 0 # Number of header rows, including empty header rows inheader = True for lineno, line in enumerate(source): fields, commentstr = split_line(line) # Process header like genfromtxt, with names = False if lineno>=skipheader and fields: inheader = False if inheader: headerrows = lineno + 1 # +1 since lineno = 0 is the first line self.preview.insertRow(lineno) # Add columns to fit all fields while len(fields)>ncols: self.preview.insertColumn(ncols) ncols += 1 # Add fields to the table for col, field in enumerate(fields): cell = QtGui.QTableWidgetItem(field) if not inheader: try: float(field) except ValueError: cell.setBackground(QtGui.QBrush(QtGui.QColor("pink"))) self.preview.setItem(lineno,col, cell) # Add the comment cell = QtGui.QTableWidgetItem(commentstr) cell.setBackground(QtGui.QBrush(QtGui.QColor("lightgreen"))) self.preview.setItem(lineno,ncols, cell) # Colorize the header cells. This is done as the last step, since # meanwhile new columns (and thus new cells) may have been added for row in range(headerrows): for col in range(ncols): cell = self.preview.item(row, col) if not cell: cell = QtGui.QTableWidgetItem('') self.preview.setItem(row, col, cell) cell.setBackground(QtGui.QBrush(QtGui.QColor("khaki"))) # Try to restore selection if selectedColumns is not None: for column in selectedColumns: self.preview.selectColumn(column) # Restore column names self.updateHorizontalHeaderLabels() class ResultPage(QtGui.QWizardPage): """ The resultpage lets the user select wether to import the data as a single 2D-array, or as one variable (1D-array) per column Then, the code to do the import is generated (Py2 and Py3 compatible). This code can be executed in the current shell, or copied into the current editor """ def __init__(self): QtGui.QWizardPage.__init__(self) self.setTitle("Execute import") self.setButtonText(QtGui.QWizard.FinishButton, translate('importwizard', 'Close')) self.rbAsArray = QtGui.QRadioButton(translate('importwizard', 'Import data as single array')) self.rbPerColumn = QtGui.QRadioButton(translate('importwizard', 'Import data into one variable per column')) self.rbAsArray.setChecked(True) self.chkInvalidRaise = QtGui.QCheckBox(translate('importwizard', 'Raise error upon invalid data')) self.chkInvalidRaise.setChecked(True) self.codeView = CodeView() self.codeView.setParser('python') self.codeView.setZoom(iep.config.view.zoom) self.codeView.setFont(iep.config.view.fontname) self.btnExecute = QtGui.QPushButton('Execute in current shell') self.btnInsert = QtGui.QPushButton('Paste into current file') layout = QtGui.QVBoxLayout() layout.addWidget(self.rbAsArray) layout.addWidget(self.rbPerColumn) layout.addWidget(self.chkInvalidRaise) layout.addWidget(QtGui.QLabel('Resulting import code:')) layout.addWidget(self.codeView) layout.addWidget(self.btnExecute) layout.addWidget(self.btnInsert) self.setLayout(layout) self.registerField('invalid_raise', self.chkInvalidRaise) self.btnExecute.clicked.connect(self.onBtnExecuteClicked) self.btnInsert.clicked.connect(self.onBtnInsertClicked) self.rbAsArray.clicked.connect(self.updateCode) self.rbPerColumn.clicked.connect(self.updateCode) self.chkInvalidRaise.stateChanged.connect(lambda state: self.updateCode()) def initializePage(self): self.updateCode() def updateCode(self): perColumn = self.rbPerColumn.isChecked() if perColumn: columnNames = self.wizard().field('columnnames') usecols = self.wizard().field('usecols') if usecols is not None: # User selected a subset of all columns # Pick corrsponding column names columnNames = [columnNames[i] for i in usecols] variables = ', '.join(columnNames) else: variables = 'data' code = "import numpy\n" code += variables + " = numpy.genfromtxt(\n" for param, default in ( ('fname', None), ('skip_header', 0), ('comments', '#'), ('delimiter', None), ('usecols', None), ('invalid_raise', True), ): value = self.wizard().field(param) if value != default: code += "\t%s = %r,\n" % (param, value) if perColumn: code += '\tunpack = True,\n' code += '\t)\n' self.codeView.setPlainText(code) def getCode(self): return self.codeView.toPlainText() def onBtnExecuteClicked(self): shell = iep.shells.getCurrentShell() if shell is None: QtGui.QMessageBox.information(self, translate('importwizard', 'Import data wizard'), translate('importwizard', 'No current shell active')) return shell.executeCode(self.getCode(), 'importwizard') def onBtnInsertClicked(self): editor = iep.editors.getCurrentEditor() if editor is None: QtGui.QMessageBox.information(self, translate('importwizard', 'Import data wizard'), translate('importwizard', 'No current file open')) return code = self.getCode() # Format tabs/spaces according to editor setting if editor.indentUsingSpaces(): code = code.replace('\t', ' ' * editor.indentWidth()) # insert code at start of line cursor = editor.textCursor() cursor.movePosition(cursor.StartOfBlock) cursor.insertText(code) class ImportWizard(QtGui.QWizard): def __init__(self): QtGui.QWizard.__init__(self) self.setMinimumSize(500,400) self.resize(700,500) self.setPreviewData(None) self.selectFilePage = SelectFilePage() self.setParametersPage = SetParametersPage() self.resultPage = ResultPage() self.addPage(self.selectFilePage) self.addPage(self.setParametersPage) self.addPage(self.resultPage) self.setWindowTitle(translate('importwizard', 'Import data')) self.currentIdChanged.connect(self.onCurrentIdChanged) def onCurrentIdChanged(self, id): # Hide the 'cancel' button on the last page if self.nextId() == -1: self.button(QtGui.QWizard.CancelButton).hide() else: self.button(QtGui.QWizard.CancelButton).show() def open(self, filename): if self.isVisible(): QtGui.QMessageBox.information(self, translate('importwizard', 'Import data wizard'), translate('importwizard', 'The import data wizard is already open')) return self.restart() self.selectFilePage.txtFilename.setText(filename) self.selectFilePage.updatePreview() self.show() def field(self, name): # Allow access to all data via field, some properties are not avaialble # as actual controls and therefore we have to handle them ourselves if name == 'usecols': return self.setParametersPage.selectedColumns() elif name == 'columnnames': return self.setParametersPage.columnNames() else: return QtGui.QWizard.field(self, name) def setPreviewData(self, data): self._previewData = data def previewData(self): if self._previewData is None: raise RuntimeError('Preview data not loaded') return self._previewData if __name__=='__main__': iw = ImportWizard() iw.open('test.txt') iep-3.7/iep/tools/iepFileBrowser/__init__.py0000664000175000017500000001103412271043444021323 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. tool_name = "File browser" tool_summary = "Browse the files in your projects." """ File browser tool A powerfull tool for managing your projects in a lightweight manner. It has a few file management utilities as well. Config ====== The config consists of three fields: * list expandedDirs, with each element a directory * list starredDirs, with each element a dict with fields: * str path, the directory that is starred * str name, the name of the project (path.basename by default) * bool addToPythonpath * searchMatchCase, searchRegExp, searchSubDirs * nameFilter """ # todo: List! """ * see easily which files are opened (so it can be used as a secondary tab bar) * make visible the "current file" (if applicable) * single click on an file that is open selects it in the editor? * context menu items to run scripts * Support for multiple browsers. """ import os import sys from pyzolib import ssdf from pyzolib.path import Path from pyzolib.qt import QtCore, QtGui import iep from .browser import Browser class IepFileBrowser(QtGui.QWidget): """ The main tool widget. An instance of this class contains one or more Browser instances. If there are more, they can be selected using a tab bar. """ def __init__(self, parent): QtGui.QWidget.__init__(self, parent) # Get config toolId = self.__class__.__name__.lower() + '2' # This is v2 of the file browser if toolId not in iep.config.tools: iep.config.tools[toolId] = ssdf.new() self.config = iep.config.tools[toolId] # Ensure three main attributes in config for name in ['expandedDirs', 'starredDirs']: if name not in self.config: self.config[name] = [] # Ensure path in config if 'path' not in self.config or not os.path.isdir(self.config.path): self.config.path = os.path.expanduser('~') # Check expandedDirs and starredDirs. # Make Path instances and remove invalid dirs. Also normalize case, # should not be necessary, but maybe the config was manually edited. expandedDirs, starredDirs = [], [] for d in self.config.starredDirs: if 'path' in d and 'name' in d and 'addToPythonpath' in d: if os.path.isdir(d.path): d.path = Path(d.path).normcase() starredDirs.append(d) for p in set([str(p) for p in self.config.expandedDirs]): if os.path.isdir(p): p = Path(p).normcase() # Add if it is a subdir of a starred dir for d in starredDirs: if p.startswith(d.path): expandedDirs.append(p) break self.config.expandedDirs, self.config.starredDirs = expandedDirs, starredDirs # Create browser(s). self._browsers = [] for i in [0]: self._browsers.append( Browser(self, self.config) ) # Layout layout = QtGui.QVBoxLayout(self) self.setLayout(layout) layout.addWidget(self._browsers[0]) layout.setSpacing(0) layout.setContentsMargins(4,4,4,4) def getAddToPythonPath(self): """ Returns the path to be added to the Python path when starting a shell If a project is selected, which has the addToPath checkbox selected, returns the path of the project. Otherwise, returns None """ # Select browser browser = self._browsers[0] # Select active project d = browser.currentProject() if d and d.addToPythonpath: return d.path return None def getDefaultSavePath(self): """ Returns the path to be used as default when saving a new file in iep. Or None if the no path could be determined """ # Select current browser browser = self._browsers[0] # Select its path path = browser._tree.path() # Return if os.path.isabs(path) and os.path.isdir(path): return path def closeEvent(self, event): # Close all browsers so they can clean up the file system proxies for browser in self._browsers: browser.close() return QtGui.QWidget.closeEvent(self, event) iep-3.7/iep/tools/iepFileBrowser/tasks.py0000664000175000017500000002321312312407677020723 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein """ Define tasks that can be executed by the file browser. These inherit from proxies.Task and implement that specific interface. """ import re from . import proxies class SearchTask(proxies.Task): __slots__ = [] def process(self, proxy, pattern=None, matchCase=False, regExp=False, **rest): # Quick test if not pattern: return # Get text text = self._getText(proxy) if not text: return # Get search text. Deal with case sensitivity searchText = text if not matchCase: searchText = searchText.lower() pattern = pattern.lower() # Search indices if regExp: indices = self._getIndicesRegExp(searchText, pattern) else: indices = self._getIndicesNormal1(searchText, pattern) # Return as lines if indices: return self._indicesToLines(text, indices) else: return [] def _getText(self, proxy): # Init path = proxy.path() fsProxy = proxy._fsProxy # Get file size try: size = fsProxy.fileSize(path) except NotImplementedError: pass size = size or 0 # Search all Python files. Other files need be < xx bytes if path.lower().endswith('.py') or size < 100*1024: pass else: return None # Get text bb = fsProxy.read(path) if bb is None: return try: return bb.decode('utf-8') except UnicodeDecodeError: # todo: right now we only do utf-8 return None def _getIndicesRegExp(self, text, pattern): indices = [] for match in re.finditer(pattern, text, re.MULTILINE | re.UNICODE): indices.append( match.start() ) return indices def _getIndicesNormal1(self, text, pattern): indices = [] i = -1 while True: i = text.find(pattern,i+1) if i>=0: indices.append(i) else: break return indices def _getIndicesNormal2(self, text, pattern): indices = [] i = 0 for line in text.splitlines(True): i2 = line.find(pattern) if i2>=0: indices.append(i+i2) i += len(line) return indices def _indicesToLines(self, text, indices): # Determine line endings LE = self._determineLineEnding(text) # Obtain line and line numbers lines = [] for i in indices: # Get linenr and index of the line linenr = text.count(LE, 0, i) + 1 i1 = text.rfind(LE, 0, i) i2 = text.find(LE, i) # Get line and strip if i1<0: i1 = 0 line = text[i1:i2].strip()[:80] # Store lines.append( (linenr, repr(line)) ) # Set result return lines def _determineLineEnding(self, text): """ function to determine quickly whether LF or CR is used as line endings. Windows endings (CRLF) result in LF (you can split lines with either char). """ i = 0 LE = '\n' while i < len(text): i += 128 LF = text.count('\n', 0, i) CR = text.count('\r', 0, i) if LF or CR: if CR > LF: LE = '\r' break return LE class PeekTask(proxies.Task): """ To peek the high level structure of a task. """ __slots__ = [] stringStart = re.compile('("""|\'\'\'|"|\')|#') endProgs = { "'": re.compile(r"(^|[^\\])(\\\\)*'"), '"': re.compile(r'(^|[^\\])(\\\\)*"'), "'''": re.compile(r"(^|[^\\])(\\\\)*'''"), '"""': re.compile(r'(^|[^\\])(\\\\)*"""') } definition = re.compile(r'^(def|class)\s*(\w*)') def process(self, proxy): path = proxy.path() fsProxy = proxy._fsProxy # Search only Python files if not path.lower().endswith('.py'): return None # Get text bb = fsProxy.read(path) if bb is None: return try: text = bb.decode('utf-8') del bb except UnicodeDecodeError: # todo: right now we only do utf-8 return # Parse return list(self._parseLines(text.splitlines())) def _parseLines(self, lines): stringEndProg = None linenr = 0 for line in lines: linenr += 1 # If we are in a triple-quoted multi-line string, find the end if stringEndProg == None: pos = 0 else: endMatch = stringEndProg.search(line) if endMatch is None: continue else: pos = endMatch.end() stringEndProg = None # Now process all tokens while True: match = self.stringStart.search(line, pos) if pos == 0: # If we are at the start of the line, see if we have a top-level class or method definition end = len(line) if match is None else match.start() definitionMatch = self.definition.search(line[:end]) if definitionMatch is not None: if definitionMatch.group(1) == 'def': yield (linenr, 'def ' + definitionMatch.group(2)) else: yield (linenr, 'class ' + definitionMatch.group(2)) if match is None: break # Go to next line if match.group()=="#": # comment # yield 'C:' break # Go to next line else: endMatch = self.endProgs[match.group()].search(line[match.end():]) if endMatch is None: if len(match.group()) == 3 or line.endswith('\\'): # Multi-line string stringEndProg = self.endProgs[match.group()] break else: # incorrect end of single-quoted string break # yield 'S:' + (match.group() + line[match.end():][:endMatch.end()]) pos = match.end() + endMatch.end() class DocstringTask(proxies.Task): __slots__ = [] def process(self, proxy): path = proxy.path() fsProxy = proxy._fsProxy # Search only Python files if not path.lower().endswith('.py'): return None # Get text bb = fsProxy.read(path) if bb is None: return try: text = bb.decode('utf-8') del bb except UnicodeDecodeError: # todo: right now we only do utf-8 return # Find docstring lines = [] delim = None # Not started, in progress, done count = 0 for line in text.splitlines(): count += 1 if count > 200: break # Try to find a start if not delim: if line.startswith('"""'): delim = '"""' line = line.lstrip('"') elif line.startswith("'''"): delim = "'''" line = line.lstrip("'") # Try to find an end (may be on the same line as the start) if delim and delim in line: line = line.split(delim, 1)[0] count = 999999999 # Stop; we found the end # Add this line if delim: lines.append(line) # Limit number of lines if len(lines) > 16: lines = lines[:16] + ['...'] # Make text and strip doc = '\n'.join(lines) doc = doc.strip() return doc class RenameTask(proxies.Task): __slots__ = [] def process(self, proxy, newpath=None, removeold=False): path = proxy.path() fsProxy = proxy._fsProxy if not newpath: return if removeold: # Works for files and dirs fsProxy.rename(path, newpath) # The fsProxy will detect that this file is now deleted else: # Work only for files: duplicate # Read bytes bb = fsProxy.read(path) if bb is None: return # write back with new name fsProxy.write(newpath, bb) class CreateTask(proxies.Task): __slots__ = [] def process(self, proxy, newpath=None, file=True): path = proxy.path() fsProxy = proxy._fsProxy if not newpath: return if file: fsProxy.write(newpath, b'') else: fsProxy.createDir(newpath) class RemoveTask(proxies.Task): __slots__ = [] def process(self, proxy): path = proxy.path() fsProxy = proxy._fsProxy # Remove fsProxy.remove(path) # The fsProxy will detect that this file is now deleted iep-3.7/iep/tools/iepFileBrowser/proxies.py0000664000175000017500000003214312312407357021264 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein """ This module defines file system proxies to be used for the file browser. For now, there is only one: the native file system. But in time, we may add proxies for ftp, S3, remote computing, etc. This may seem like an awkward way to use the file system, but (with small modifications) this approach can probably be used also for opening/saving files to any file system that we implement here. This will make IEP truly powerful for use in remote computing. """ from . import QtCore, QtGui import time import threading from queue import Queue, Empty class Task: """ Task(**params) A task object. Accepts params as keyword arguments. When overloading, dont forget to set __slots__. Overload and implement the 'process' method to create a task. Then use pushTask on a pathProxy object. Use the 'result' method to obtain the result (or raise an error). """ __slots__ = ['_params', '_result', '_error'] def __init__(self, **params): if not params: params = None self._params = params self._result = None self._error = None def process(self, proxy, **params): """ process(pathProxy, **params): This is the method that represents the task. Overload this to make the task do what is intended. """ pass def _run(self, proxy): """ Run the task. Don't overload or use this. """ try: params = self._params or {} self._result = self.process(proxy, **params) except Exception as err: self._error = 'Task failed: {}:\n{}'.format(self, str(err)) print(self._error) def result(self): """ Get the result. Raises an error if the task failed. """ if self._error: raise Exception(self._error) else: return self._result ## Proxy classes for directories and files class PathProxy(QtCore.QObject): """ Proxy base class for DirProxy and FileProxy. A proxy object is used to get information on a path (folder contents, or file modification time), and keep being updated about changes in that information. One uses an object by connecting to the 'changed' or 'deleted' signal. Use setActive(True) to receive updates on these signals. If the proxy is no longer needed, use close() to unregister it. """ changed = QtCore.Signal() deleted = QtCore.Signal() errored = QtCore.Signal(str) # Or should we pass an error per 'action'? taskFinished = QtCore.Signal(Task) def __init__(self, fsProxy, path): QtCore.QObject.__init__(self) self._lock = threading.RLock() self._fsProxy = fsProxy self._path = path self._cancelled = False # For tasks self._pendingTasks = [] self._finishedTasks = [] def __repr__(self): return '<{} "{}">'.format(self.__class__.__name__, self._path) def path(self): """ Get the path of this proxy. """ return self._path def track(self): """ Start tracking this proxy object in the idle time of the FSProxy thread. """ self._fsProxy._track(self) def push(self): """ Process this proxy object asap; the object is put in the queue of the FSProxy, so it is updated as fast as possible. """ self._cancelled = False self._fsProxy._push(self) def cancel(self): """ Stop tracking this proxy object. Cancel processing if this object was in the queue. """ self._fsProxy._unTrack(self) self._cancelled = True def pushTask(self, task): """ pushTask(task) Give a task to the proxy to be executed in the FSProxy thread. The taskFinished signal will be emitted with the given task when it is done. """ shouldPush = False with self._lock: if not self._pendingTasks: shouldPush = True self._pendingTasks.append(task) if shouldPush: self.push() def _processTasks(self): # Get pending tasks with self._lock: pendingTasks = self._pendingTasks self._pendingTasks = [] # Process pending tasks finishedTasks = [] for task in pendingTasks: task._run(self) finishedTasks.append(task) # Emit signal if there are finished tasks for task in finishedTasks: self.taskFinished.emit(task) class DirProxy(PathProxy): """ Proxy object for a directory. Obtain an instance of this class using filesystemProx.dir() """ def __init__(self, *args): PathProxy.__init__(self, *args) self._dirs = set() self._files = set() def dirs(self): with self._lock: return set(self._dirs) def files(self): with self._lock: return set(self._files) def _process(self, forceUpdate=False): # Get info dirs = self._fsProxy.listDirs(self._path) files = self._fsProxy.listFiles(self._path) # Is it deleted? if dirs is None or files is None: self.deleted.emit() return # All seems ok. Update if necessary dirs, files = set(dirs), set(files) if (dirs != self._dirs) or (files != self._files): with self._lock: self._dirs, self._files = dirs, files self.changed.emit() elif forceUpdate: self.changed.emit() class FileProxy(PathProxy): """ Proxy object for a file. Obtain an instance of this class using filesystemProx.dir() """ def __init__(self, *args): PathProxy.__init__(self, *args) self._modified = 0 def modified(self): with self._lock: return self._modified def _process(self, forceUpdate=False): # Get info modified = self._fsProxy.modified(self._path) # Is it deleted? if modified is None: self.deleted.emit() return # All seems ok. Update if necessary if modified != self._modified: with self._lock: self._modified = modified self.changed.emit() elif forceUpdate: self.changed.emit() def read(self): pass # ? def save(self): pass # ? ## Proxy classes for the file system class BaseFSProxy(threading.Thread): """ Abstract base class for file system proxies. The file system proxy defines an interface that subclasses can implement to "become" a usable file system proxy. This class implements the polling of information for the DirProxy and FileProxy objects, and keeping them up-to-date. For this purpose it keeps a set of PathProxy instances that are polled when idle. There is also a queue for items that need processing asap. This is where objects are put in when they are activated. This class has methods to use the file system (list files and directories, etc.). These can be used directly, but may be slow. Therefor it is recommended to use the FileProxy and DirProxy objects instead. """ # Define how often the registered dirs and files are checked IDLE_TIMEOUT = 1.0 # For testing to induce extra delay. Should normally be close to zero, # but not exactly zero! IDLE_DELAY = 0.01 QUEUE_DELAY = 0.01 # 0.5 def __init__(self): threading.Thread.__init__(self) self.setDaemon(True) # self._interrupt = False self._exit = False # self._lock = threading.RLock() self._q = Queue() self._pathProxies = set() # self.start() def _track(self, pathProxy): # todo: use weak references with self._lock: self._pathProxies.add(pathProxy) def _unTrack(self, pathProxy): with self._lock: self._pathProxies.discard(pathProxy) def _push(self, pathProxy): # todo: use weak ref here too? self._q.put(pathProxy) self._interrupt = True def stop(self, timeout=1.0): with self._lock: self._exit = True self._interrupt = True self._pathProxies.clear() self.join(timeout) def dir(self, path): """ Convenience function to create a new DirProxy object. """ return DirProxy(self, path) def file(self, path): """ Convenience function to create a new FileProxy object. """ return FileProxy(self, path) def run(self): try: try: self._run() except Exception as err: if Empty is None or self._lock is None: pass # Shutting down ... else: print('Exception in proxy thread: ' + str(err)) except Exception: pass # Interpreter is shutting down def _run(self): last_sleep = time.time() while True: # Check and reset self._interrupt = False if self._exit: return # Sleep now = time.time() if now - last_sleep > 0.1: last_sleep = now time.sleep(0.05) try: # Process items from the queue item = self._q.get(True, self.IDLE_TIMEOUT) if item is not None and not item._cancelled: self._processItem(item, True) except Empty: # Queue empty, check items periodically self._idle() def _idle(self): # Make a copy of the set if item with self._lock: items = set(self._pathProxies) # Process them for item in items: if self._interrupt: return self._processItem(item) def _processItem(self, pathProxy, forceUpdate=False): # Slow down a bit if forceUpdate: time.sleep(self.QUEUE_DELAY) else: time.sleep(self.IDLE_DELAY) # Process try: pathProxy._process(forceUpdate) except Exception as err: pathProxy.errored.emit(str(err)) # Process tasks pathProxy._processTasks() # To overload ... def listDirs(self, path): raise NotImplemented() # Should rerurn None if it does not exist def listFiles(self, path): raise NotImplemented() # Should rerurn None if it does not exist def modified(self, path): raise NotImplemented() # Should rerurn None if it does not exist def fileSize(self, path): raise NotImplemented() # Should rerurn None if it does not exist def read(self, path): raise NotImplemented() # Should rerurn None if it does not exist def write(self, path, bb): raise NotImplemented() def rename(self, path): raise NotImplemented() def remove(self, path): raise NotImplemented() def createDir(self, path): raise NotImplemented() import os class NativeFSProxy(BaseFSProxy): """ File system proxy for the native file system. """ def listDirs(self, path): if os.path.isdir(path): pp = [os.path.join(path, p) for p in os.listdir(path)] return [str(p) for p in pp if os.path.isdir(p)] def listFiles(self, path): if os.path.isdir(path): pp = [os.path.join(path, p) for p in os.listdir(path)] return [str(p) for p in pp if os.path.isfile(p)] def modified(self, path): if os.path.isfile(path): return os.path.getmtime(path) def fileSize(self, path): if os.path.isfile(path): return os.path.getsize(path) def read(self, path): if os.path.isfile(path): return open(path, 'rb').read() def write(self, path, bb): with open(path, 'wb') as f: f.write(bb) def rename(self, path1, path2): os.rename(path1, path2) def remove(self, path): if os.path.isfile(path): os.remove(path) elif os.path.isdir(path): os.rmdir(path) def createDir(self, path): if not os.path.isdir(path): os.makedirs(path) iep-3.7/iep/license.txt0000664000175000017500000000272612312043736015324 0ustar almaralmar00000000000000IEP is subject to the (new) BSD license: Copyright (C) 2013, the IEP development team 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. * Neither the name of its contributors nor their affiliation may be used to endorse or promote products derived from this software without specific prior written permission. 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 IEP DEVELOPMENT TEAM 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. iep-3.7/iep/__init__.py0000664000175000017500000002353612573313400015251 0ustar almaralmar00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Package iep IEP (pronounced as 'eep') is a cross-platform Python IDE focused on interactivity and introspection, which makes it very suitable for scientific computing. Its practical design is aimed at simplicity and efficiency. IEP is written in Python 3 and Qt. Binaries are available for Windows, Linux, and Mac. For questions, there is a discussion group. Two components + tools ---------------------- IEP consists of two main components, the editor and the shell, and uses a set of pluggable tools to help the programmer in various ways. Some example tools are source structure, project manager, interactive help, and workspace. Some key features ----------------- * Powerful *introspection* (autocompletion, calltips, interactive help) * Allows various ways to *run code interactively* or to run a file as a script. * The shells runs in a *subprocess* and can therefore be interrupted or killed. * *Multiple shells* can be used at the same time, and can be of different Python versions (from v2.4 to 3.x, including pypy) * Support for using several *GUI toolkits* interactively: PySide, PyQt4, wx, fltk, GTK, Tk. * Run IPython shell or native shell. * *Full Unicode support* in both editor and shell. * Various handy *tools*, plus the ability to make your own. * Matlab-style *cell notation* to mark code sections (by starting a line with '##'). * Highly customizable. """ # Set version number __version__ = '3.7' import os import sys import locale # Check Python version if sys.version < '3': raise RuntimeError('IEP requires Python 3.x to run.') # Check pyzolib version import pyzolib if pyzolib.__version__ < '0.2.5': raise RuntimeError('IEP requires Pyzolib 0.2.5 or higher.') elif pyzolib.__version__ < '0.2.9': print('Warning: pyzolib 0.2.9 is recommended to run IEP.') # Import yoton as an absolute package from iep import yotonloader # If there already is an instance of IEP, and the user is trying an # IEP command, we should send the command to the other process and quit. # We do this here, were we have not yet loaded Qt, so we are very light. from iep.iepcore import commandline if commandline.is_our_server_running(): print('Started our command server') else: # Handle command line args now res = commandline.handle_cmd_args() if res: print(res) sys.exit() else: # No args, proceed with starting up print('Our command server is *not* running') from pyzolib import ssdf, paths from pyzolib.qt import QtCore, QtGui # Import language/translation tools from iep.util._locale import translate, setLanguage # Set environ to let kernel know some stats about us os.environ['IEP_PREFIX'] = sys.prefix _is_pyqt4 = hasattr(QtCore, 'PYQT_VERSION_STR') os.environ['IEP_QTLIB'] = 'PyQt4' if _is_pyqt4 else 'PySide' class MyApp(QtGui.QApplication): """ So we an open .py files on OSX. OSX is smart enough to call this on the existing process. """ def event(self, event): if isinstance(event, QtGui.QFileOpenEvent): fname = str(event.file()) if fname and fname != 'iep': sys.argv[1:] = [] sys.argv.append(fname) res = commandline.handle_cmd_args() if not commandline.is_our_server_running(): print(res) sys.exit() return QtGui.QApplication.event(self, event) if not sys.platform.startswith('darwin'): MyApp = QtGui.QApplication ## Define some functions # todo: move some stuff out of this module ... def getResourceDirs(): """ getResourceDirs() Get the directories to the resources: (iepDir, appDataDir). Also makes sure that the appDataDir has a "tools" directory and a style file. """ # # Get root of the IEP code. If frozen its in a subdir of the app dir # iepDir = paths.application_dir() # if paths.is_frozen(): # iepDir = os.path.join(iepDir, 'source') iepDir = os.path.abspath(os.path.dirname(__file__)) if '.zip' in iepDir: raise RuntimeError('The IEP package cannot be run from a zipfile.') # Get where the application data is stored (use old behavior on Mac) # todo: quick solution until I release a new pyzolib try: appDataDir = paths.appdata_dir('iep', roaming=True, macAsLinux=True) except Exception: appDataDir = paths.appdata_dir('iep', roaming=True) # Create tooldir if necessary toolDir = os.path.join(appDataDir, 'tools') if not os.path.isdir(toolDir): os.mkdir(toolDir) return iepDir, appDataDir def resetConfig(preserveState=True): """ resetConfig() Replaces the config fyle with the default and prevent IEP from storing its config on the next shutdown. """ # Get filenames configFileName1 = os.path.join(iepDir, 'resources', 'defaultConfig.ssdf') configFileName2 = os.path.join(appDataDir, 'config.ssdf') # Read, edit, write tmp = ssdf.load(configFileName1) if preserveState: tmp.state = config.state ssdf.save(configFileName2, tmp) global _saveConfigFile _saveConfigFile = False print("Replaced config file. Restart IEP to revert to the default config.") def loadConfig(defaultsOnly=False): """ loadConfig(defaultsOnly=False) Load default configuration file and that of the user (if it exists). Any missing fields in the user config are set to the defaults. """ # Function to insert names from one config in another def replaceFields(base, new): for key in new: if key in base and isinstance(base[key], ssdf.Struct): replaceFields(base[key], new[key]) else: base[key] = new[key] # Reset our iep.config structure ssdf.clear(config) # Load default and inject in the iep.config fname = os.path.join(iepDir, 'resources', 'defaultConfig.ssdf') defaultConfig = ssdf.load(fname) replaceFields(config, defaultConfig) # Platform specific keybinding: on Mac, Ctrl+Tab (actually Cmd+Tab) is a system shortcut if sys.platform == 'darwin': config.shortcuts2.view__select_previous_file = 'Alt+Tab,' # Load user config and inject in iep.config fname = os.path.join(appDataDir, "config.ssdf") if os.path.isfile(fname): userConfig = ssdf.load(fname) replaceFields(config, userConfig) def saveConfig(): """ saveConfig() Save all configureations to file. """ # Let the editorStack save its state if editors: editors.saveEditorState() # Let the main window save its state if main: main.saveWindowState() # Store config if _saveConfigFile: ssdf.save( os.path.join(appDataDir, "config.ssdf"), config ) def startIep(): """ startIep() Run IEP. """ # Do some imports from iep.iepcore import iepLogging # to start logging asap from iep.iepcore.main import MainWindow # Apply users' preferences w.r.t. date representation etc # this is required for e.g. strftime("%c") # Just using '' does not seem to work on OSX. Thus # this odd loop. #locale.setlocale(locale.LC_ALL, "") for x in ('', 'C', 'en_US', 'en_US.utf8', 'en_US.UTF-8'): try: locale.setlocale(locale.LC_ALL, x) break except locale.Error: pass # Set to be aware of the systems native colors, fonts, etc. QtGui.QApplication.setDesktopSettingsAware(True) # Instantiate the application QtGui.qApp = MyApp([]) # QtGui.QApplication([]) # Choose language, get locale appLocale = setLanguage(config.settings.language) # Create main window, using the selected locale frame = MainWindow(None, appLocale) # Enter the main loop QtGui.qApp.exec_() ## Init # List of names that are later overriden (in main.py) editors = None # The editor stack instance shells = None # The shell stack instance main = None # The mainwindow icon = None # The icon parser = None # The source parser status = None # The statusbar (or None) # Get directories of interest iepDir, appDataDir = getResourceDirs() # Whether the config file should be saved _saveConfigFile = True # Create ssdf in module namespace, and fill it config = ssdf.new() loadConfig() # Get license info # Yes, you could insert your custom dict here! But who would you be fooling? from iep.iepcore.license import get_license_info license = get_license_info() del get_license_info # Init default style name (set in main.restoreIepState()) defaultQtStyleName = '' # Init pyzo_mode. In pyzo_mode, IEP will use a different logo and possibly # expose certain features in the future. pyzo_mode = False distro_name = None # Init default exe for the executable (can be set, e.g. by Pyzo) _defaultInterpreterExe = None _defaultInterpreterGui = None def setDefaultInterpreter(exe, gui=None): global _defaultInterpreterExe global _defaultInterpreterGui assert isinstance(exe, str) _defaultInterpreterExe = exe _defaultInterpreterGui = gui def defaultInterpreterExe(): global _defaultInterpreterExe if _defaultInterpreterExe is None and sys.platform.startswith('win'): try: from pyzolib.interpreters import get_interpreters interpreters = list(reversed(get_interpreters('2.4'))) if interpreters: _defaultInterpreterExe = interpreters[0].path except Exception as err: print(err) if _defaultInterpreterExe is None: _defaultInterpreterExe = 'python' return _defaultInterpreterExe def defaultInterpreterGui(): global _defaultInterpreterGui return _defaultInterpreterGui iep-3.7/iep/contributors.txt0000664000175000017500000000066112471363234016437 0ustar almaralmar00000000000000### Project coordination Almar Klein ### Development Rob Reilink Ludo Visser Gijs van Oort David Salter Scott Logan Laurent Signac Jan Müller Jason Sexauer Julien Enselme Ghislain Vaillant (Debian building) ### Translators Hector Mtz-Seara Monné - Spanish and Catalan Laurent Signac - French Diogo Costa - Portuguese Gerd Schmitt - German George Volkov - Russian ### Financial support Diogo Costa Marek Petrik Ken Crossen iep-3.7/iep/resources/0000775000175000017500000000000012573320440015143 5ustar almaralmar00000000000000iep-3.7/iep/resources/images/0000775000175000017500000000000012573320440016410 5ustar almaralmar00000000000000iep-3.7/iep/resources/images/iep_tools1.png0000664000175000017500000004727412271043444021213 0ustar almaralmar00000000000000‰PNG  IHDR‘´”¹Î¦ pHYs  šœ IDATxœì½wœÅ™ÿÿ®îžœvf6礜 ²ˆ’@Øàw¾;Ÿí»ûÚ÷;ßýî¾w÷ öEßÙq !$Œ„@Bå,­²VÚg'Ow×÷™]íjg…$@Èb?¯—-f{ººzú骧žz×SâÈ‘#;¤”S „àZ”8_Ÿk¥^Ã,­÷a]«ºÖë7,ÐLÓ¼æÞt)%RJEù¤«2¬&¥`D׊1õѵRŸa ­‹´D’T¨…–® ÝÌt+!ŠÅŽ;X@®óR[ “Xk![€€ÛŽåO3MEQ.Ñ$RF‚hw;)Eù.T˜)âáÚÂ6JŠsß®DÊ8í(¾^§ U\;/Õµ¬¾–hp·¡Óud+7¥±½›Î¦"Î"ÊrØý%Œ½€ûG¸¸¤ŸXÆ8¶üg¬«šÇ¼›FQ|‰ÆgšæeøDi#2"ÍYÿ^m¼›?{v*^d¢S;—òâûe|óOÀžíòRbÆÏòÖs¯á¼wŽ/ǧ]â¥?åÒà|×ýÞ<©œ6/M5‰6aó+/²gÔ³üÑÝ(©(]íœ>Õ†PTl?ù9N„¥³½“pÂÀ”›'@ÀçÄ*$Ò41M‰‘Šjí¤+ª#¨V¾Ü nM xëû×é²$%RšH³ß¹0ML)‰ÑÑÙM4a Q°yƒ½N,H¤™6Æd¬‡†ö„©K@Áê ôÚP²µdŸbi½k¨.­ïQH`&ôÖmaÍ»{iI*¨Š†§d"‹AüÄfV¿·ŸÆ°Ž©Kl…“˜9{#óDº«‘’pëIö®}ƒý! ›Eèà†ûïgJ`àkß¿^—æ\§¾)â=œQöþ_bš2cN:Ñö³ܴΚE<{OfÓ6¬x‹†–B޼¹•ШûYxëò̼ùÓWÙt°”à ŘH&=œló1cÑCŒõ;°Ù,¨Ó4]9Ûß>Pd2LÛ‰wyõ…]™Lí cäŽDïØÃªÕGpM»…9µùاYÿʶWW;Fžm¤‰iqàŸò0³Ó}jk–­a}íHŒr¡0lF½ºˆOÔ+™i@š:±hˆ–n+e³Kq©Ìœ<*kœô´ŸáTØÃ¨ò\| MT0®ÔB]k7Ñx^¦…§ÇOiNˆÝëÖÑY\HAI9U•¥Xƒ¯ßë]Z·ÖÛI°ú)™t_&ãÅš©Ûº”·C²¥Žú®6¬»7ÑyÌŠRyªf2]’”H,8ÝùŒ(󢩗'—’õ!ô‘N,Wøƒ_ä Öùc‰P,ªI<#%5d*I,b`ÕìØUh4IÊ01‰Ò3Ñ<*Š ÝB®üjf=ñ4 '9vø[^ÛLÝ}Ïðø$šÑå9Öý”émÒ­+Я•v_ 7ͽ›FæãPÁL%1U Zêd¿B ôTŒîH3ÇŠžŒŽÕ¦·@¨Ï'º¨õ5ò*wÒb›víæˆ­ÚOr¤AãöÛªWº›G먳%ñ›gØÕj§dL·]¥;ãÅCíœé‰a·(.¯!Ò¢-šÄrÐÃé_·K5&™qŒDæzRÒ×’ ÀZ8‘qÞ•Ô<€W ´ ¡öÒj í¤¿”iu£¡&í>DeÂA÷é#œLä3¦Ú‡Ú[§+úɯ?i†adñ‹2OµáÉ/¢ÀcÅâ 0â–;èxgo-߉jõR2î.‚Þ\rgÏ$üÎf¶®ÞG´S8~&3jòqköÜBòÜ6ôžö¬ÛDc\¢¨V|¥S¹m\Ši"/õÖ벤XqäRb8Ó- €bÁîͧ¸ÐêÁÝÌâ½w·°þè&Xrj¹Ý_FÃF°¨›ÓŠš²à°:ñEv³êµ. K€Ú;ærSÁð¸ÿB‰½{÷î…BSTUYëK~ã2¯ð•Vä‚ëJ)I&“x<TU½âr¯T G¶°ôåýÜöµ/0Ñ}©ÏO§.¡;»T}¸ó/¼þ…Cü«ù¥”Xìn JòqjÃã°R_w&„¸¦&;¯¸;ûˆ”[>ŽÇ>7¶ÏIÖÐl¼ÖtyCüA}Ñûa'úbÒ®dtµt-ÖiXƒ¥™¦I^^^Ÿóz­8½¤ªêE¢éÃú$%¥$¢9N4M#??‹eè8¬”'¨;ÖÆˆÚ ^ý*VwX×¢Z[[‘R¢õ¾á‹›ÍÖ÷ÆK)Ié’“§»8yª“–®NN¶œ¢³%A^Á-·—3³êÎáâSªþÔ©¦ëzߺ÷RJ‘»÷·qäX‘hŠdÒÀˆøÑÌ'öŸCR7lDÃÂ0 ´T*•µ;z¬‹‡ÚG’tu…hkë O‚$”«Sš}á!Á°ßòi”®ëh†ad ôÁÃM45wŠuÒ¥À9µ£Ç rÌF  :Ü­üÛ¦ïaš:…9<9ñiÄP•ÌYJ3cs½ßì…»²A^ܵ÷_!z×4]aØæbåõ¨Ëz)zÙ¯5fýã’išéî,› =ɹž:,Ž8µ¬8ƒù ÆèÈ5Xi«sÑIbØ»‰ÞÎLHžƒ~¼äi–ÿóXs² ]± y˘:{> fÀ£’å!J$›~ÄL`ÞÓ‘oG\qÌ&=Ú íú ?Ø>‚ùßÈÈB'J/B"4ïÜJ}`,£K‚¸¯„õ0#ìÿÙ¿²®r>ófŒ¢Ø%²ç•¿מúº³ ["!`ö]µ4n$–˜ÑÚ:t oˆXD ·x°F¤"=Dí=D“Q޶JìÚà‘›4ã´Õ7SvËcÌRDӑͬ~í¼^þmži‡T‚žŽfZ»bè(h6¥¹¤ºÎr²¡ŒXÒ@JƒXG3Í=$ ‰°¸ æã³A*ÜJck˜” (V<ÁB vTLRÑ­M-t'Á8s”º3A"‰þÁU‰ÞsŽÝ+_b}éÌ6‚Úò"‚6¶æfºã¡h8sò)Ìs£ ‰ï¡­©™P\¢:øqY  '¨÷FI=ÜNcKÑ”‰¢ÙñäSàµ\7#Òu=k@¯¸ÈLjXwÅÑ›J°êÝÇ À0pÚ4Rfœ˜Ù†·4IÔ ó÷kÿšžh„ï<øOŒÊ=Ä%5%•Œ[KÀh`Û›»8Õž@Ð}vo/“m§»Hš`ñ–ó•¯}{º#$FÏ 6-}™5û›‰™†ð3~î<2-HìÐJ~¹²ŽP"…!]Oº—Ç¿Rº8½}Ï¿º…á£Èz’Žäô êe9õ>[Ô±ã°AôH7ß?—iÚ–,ÛB}\AS4|Õ·0àP¿s/-ÛLcLbºGp÷¢Ìãî+Qš1ê7¾Äso¥ÛPqJ™8÷s,œàzât]ÏnD½]ѼêÇq>ΦS§P›['Óé¢;yŽTþ)‚vŠóŠ)°ëðž‹G˜¥NûÙ“ìßÓÉ©]»¨wŒdn™£çu–±êì(>ÿ…Åä™íœÜõ6ûζ3¾·Á;^æå½~æÏ™9ÊKË[ÿÄÿZþ.ÊeòèÙ,.¼©Çi?¾5+^aÍŒ©,pœ`û[ë Mÿ¿ ŠÿçY¶Eô ºD߸9Ü=z5‰ñ_ä™ÙSvíå·?ZKëø?æïÂ<½•e?ý¿~{<ß¼%ÄöUécßY˜ÇÖÿþ[~µz/5SIWW‚ÑÍᭇ䳷N¤:ÏÍæÈP€\7óq†adw¬{ÕmÄšßÆÙø.]*çRfˆcÍ‘SV—ƒH,J<'™L^Ô_‘F„o¼@Ý;’ˆn§böqcžJª¥›†=û¨oˆóæ‹ÇQ˜¦Â-Ó”~>EŠÖ#çP«¡"ÏÓb£lútò^YOgÛYNœÞÅÒ §‰ší¤¥³Ù!’ÓIc‡“ÑÓkñZ­L™^Jp³µß3L;Ö¥7Ì¡b‘0g;쌼q$>‹3¯„qã=l8t’¶ñ¢ï˜ÕneÒŒb~þb3Ýáx¦¾4#§V±aËFVw×3zôXÆOžBM;Ï9]2MsèµøÉ ~NC¨‘܉nbÝà/ aHÓ4Ð¥Š"ª“ú†³¸„‡RwŽ,þP¯„æãÞg¿ÊS3ò8¸ö%~õÛ¬»¡†9~{n #*óõ/O#ת M“¶ú¾³±:íÈŽ0ñ”Ž!-ÄC!’ªhÛY¶­ßŽxàò׳‚„ë6°ä?~E“)P4 v« K!ÑHÄu 3û= ¦‘^6¤ª*6Í$ÒÅÀ†‘JX\,ªÑwLJw'6+ªª`ô•e£lÎð?¦×sâèAÞygïœpð÷ÏNÁ{‘”-éÁ4³#ºaëñ£{t,Á8N¥„¤žÄ”` ƒ˜!‘LâV<üëüï0÷#BQ±z =c÷žüo–-ÛÄ”g¦P>q$–UkXû¾‰yF2I°¢ÙÇbX)œ:™Ü=س+¥ÓEÛÆ$Ën ?7@ÒåšêàÜÉNšïe_KŠ}…å¯þ ¦†Õ™Ç—¿þ‡}¥Tçà°i¸Ç<ÊS÷/áÕ·—ñóÕ ”àxXtSJŠ“Çyñ—yéP§©0nÊh¬ ޼ &ÍyÆW×°d‰ü¼ jƒù¸mýê*ÅAå]wQõâ&V½°)~†ûzŒ–—_ã×?|Í öæ'YtK!ÍÏÔÐòò2~ò“Þ‘÷°höxÊü*±âjÊ.¬$9»ïmVí>CWÂÄ]4ŽNÅí [ZRJZê+W®ÜQ^^>¥¦¦FôŸ;3¥Éß¿û×ĉ ©"±ZÊÊÿšû]êZŽðí7¾EeiáH-nåOü×ÐFÔl”b$—…yôž—%N$D¶8x !ËlÌtìwÒù è zôÞ—à7øÎ‡˜^;’RrîÜ9öïßž'ʦ"wg:O“Šh†•r_%ŠPpZœ”zÊIvê8„›šÂê‹62?Ú…]ÝEs‡x-ê¯s±ÈùåÕã¼1õ~º~%¥$#V¬X±£¢¢bJmm­¸p?[l¸ï}˸ÞCüÃ:¯Þ–¨««kèÑ™bè¹0®ÿ9¡a]š.:ÄÖ°.EiÑpw6¬+•bhžhXúT }Ô5Oºþ5¨%êMé’J¥ú>_Ž„¨ªŠÝn6 O‰µDÉd’sçαjÕ*:::úÉ:ÙµÐû'b³Ù>ºšëšÕ ²1•Jñæ›ob·Û1bDßZø˜夽Ž8Q]% çRnÖdµ­µk×RTTDiiéU¼•a}’Rfw¬;;;©©©!//‹Å‚Ð¥vàtZ)µOÅI„L (4¿&¥d÷îÝ}Ýá°®_I)Ù²e ÚþG?a‪ª¢ª*qKŒ¤%†‚¸ˆ¢ªPA ¤4‰.$ ŸêpþèJÖŠ}s“•+öÁ®¶TUEQ[‰Ýfp .;ê<@ÜASšhXúZ­ÙÎFýRz ‡îâ~ÿ#}­Ò #qZN¡=’Ä@  «ÍWK`äVRdKÒÓÑLTäÛ/Ã1#4œjÇYOŽ+;Û=h`pÕ° Ûõf說fŸÅW˜Ò Ïš‡EXH t3E$Á”&¹î I2™ ½µ{ÀÃÊF8ÊÄi^ÿî_ñV›ŠÇçB±ùÉÍÍ$×zîÿOÔ³ûµÿæeó¾ûì˜Ìz³ìêcžbGøåw~Ãøg¹S«/í®?á¬g×Ñj! ß2ê ©× à ®ÇÑIÑ™h§3Ö.{!wE±Ђ¤Ìñs Kph@Mñ0ûÙ¯ñ…»Ç#¤zÚ9{ø=–ô²de50QÎÔ7’ÒM„ÕCna>>‡5ƒÂö᧦N¨åGë ¤bÅ“[@AŽ™ÓÑØ@æDÕMT››@ÐAË™³$ ³oõlŽC%Þ|†vKù9N´h§ãøŠKð[ º[ZIä”’§Eion¡;a‚P±:s(,"BÍ´tôKHaÇ—_@®ÇŽšlåLSE˜˜ÒÀæ/¢0Çy]dÖÙm”~ ¡ú'u¤\„BÝ`‘¸­^šÍ i`š†4Ñ]ËAZM–µ,¡'fqÙSa­uÚÏâð! ÅbEö4³ç•_púñ)Œé·VÀL„i8¸ŽŸþf‘D ÓšÇÄûçá5ä9/HG¬w±síkì^cKY)šöO.¸wÖ}ç»l,½±N ¾Â1Ü2UãùŸ¼NÌÐûVÏ>zs -¯}_hóxæ‘i¸ßÿ/þæGG¹ókßf^iˆ?~‰îùßbžu3¿zîš;V‹“¼ê›yü©™4¬~•wv¤=–@—Šox„ÇïŸL~ó2þñâ) âs¨ÔÞýÝt‰­åï¬ ­¬¤«u`öEQ@ÂèäDzÔnÞ7ÞáÙÑMÃ40dƈ¤AW²“’¾°»/ºÙŒ4"ìXùNlöa ”R3aA)©2ˆ¶cçŠåÜüèQÔhÝôÏýv;ª ðWú¢z˜œñOó'¦Ñ±5¿úéK¬˜0ŽEn]ZqWÜÇWž‹­û;–ÿw|ñ[ÜÙoõ쨊ŒTF|ù::Щߦ¸D§¹µ…GÇÃ…ÜU˜¤}Ï~NZnç¿z'%N« ‰fþqc„÷/äá /fý~ôÂjöŒ+ã6‹‰KP|ç"ßVKЦ\w­‚‚üZÊÔràíõ¶$!ÙMìti2ôtK$ ti¢¢€„3+`ÉÔE7›š{ŸéíÎ ºOìäÍÝ|IêDB-Øs’¶è˸4ä¸45KXÊZȨÅ8¬.üÕŒ+ú-ëwaLR°{TNªÆ­ b±(íõ!jî÷á´8úV϶G¢X+'Sؽžúzu­%̘™Ë±¦zÎ(çę̀3oÍ,?}7Tù°“TBG±jèu T Uô¶@ןTVVf‡Òz3ɦAÐ@G'–ŠQh/M¯€L bfz¬ˆ)ö$é<º‡C±R¦  égû³ÀêõS2¦Ší»÷ ú­ž- úpXmŒcåÅW÷¡Ü»ˆœÂyž•‡4z¼MÑÝPÇñnî`%£ÇGhm>HÒꧤg/Û¶åaãQ“tu«TŒ­ÁKoúÂ,·}I‘݈z @OÄôÌ XKú泈¸Š.u„CRRPJw2½Vš&’t¾Çl4p,€@µ¹–U‘p*͆'¿œ Ã=·„)<ÅÆû9Û¢) ÅCå­‹¨ª)$‡~ÏDqR߇®Ü°~74Ȉ¬V+ÕÕÕƒÁ+Þ*Êëõâp8>tå†õ»¡¬Ý™”²Ï®îÊ>]dDÃxì°.WƒŒhÖå*ëÖåhõÇcUéû×",i)ƒÇZ…†¦ ¶Á¬xì°®k]tÚã˜óQ5‚iš$Í$)#E:šIc²…µæ* ÓÄ#¼Üì¾£ïüA³øY"Öƒì#ؤå²4T~Æôß?ô/DÔûÊ‘DÒ/ €þn4“ÕˆzñØуÓaCCÔéÑšiJ,ª•\oÃ4‰&£4w5!]™9ƒÌùƒ7ˆ9Ãëßû%Ì|œ‡¦×d¹j:ÅM²§3­½™‰ÁAsö¡$R&m “jx‹ÿz±›;çßÍÄŠÀ•Üwï™{n½yßPKžÍ ûÌ^Ö¾´‚ö9Â'ºQMÅH0£—¶ÑÌ…×û„¤%$X/øcoÄÚ4Œt„Z(DR!ºâ]ižˆÌÞñ‚KõÐatÑo K0«I3Fë铊¢'Ât66У¹Ðô$† ª+HaÐBç©]¼ûêë´ÜÀC…96ÌžÖ‹"¨` U »7€3ÖBK(‰‰@±¸ðtj©“ˆvqæ\;†Õ™K¾³ƒ]+_â½Ì¦0%E-A*ªœ8E’Ö3§Ðƒe¹5„™$j§¹[£°,ˆ%¡³¥…ŽHjH|·÷žFGIèi5IÅC4Ÿ>AKØi¢'Ï—ƒP±º”Zúm4c’ìhàlH¢ AèÒFN~9.Ú5Ð@im)°÷‰÷Çcí)g?<ÖE(Ù3µ(Vl'Òb²¬ååÆc‘€N¨~˾ûl®˜Åx5L¨§‡TÎ4>y ÚȺèîyž€ís<:ÎÂÉu«.Ž R6ív*/ãµ½í$R:†-Ÿ13ðäìZlÑ¿÷Ͻu)TœU÷òèè³lÊl 9RĘ{Ÿàüƒ¬§ Í¢{ó½å/øóûJPÃM\ósžÛ=–?ùÖÝXŽ®çõ76r´-vq|×LÑ}î$G«tÛ ºO×Ó–0‰™è¡ñà:^c#ÇÚ˜¨¸ŠÇñÇ¿ÿH_ë$¥NóÚão×@aaAG‚Žƒ²;0ÿŽ1º?ùSZ‰¬XóÇ…ÇöIØðVÎáÙÇ«Iœ|Ÿåÿý¾HÕΗóÛ‹°«`)q¶ ²‘ìé$œH¡K‰ÞÓI\±¢*çÀãÒ¥esú?~3žÕF*PÆØ1>–¼³šù7a5{†Æwû^‹þ·*@Xqg0à%kW³Ù#Å6“d2IyMe?¤ &ñúlßS…3æ¥kËvb¥“Éó_¤„Ë2:ûxñX'šM퇮 «I%¥>+ŽÜ"FΘÀÖU/°,ð,‹g<À—žP/Š ºíP]äULâ®›êXµô%NܳЩãÁoµáÏŸÀìÅ]üëOž#f(xF>ÀÓ n¢|Ö]T½”Þ¦tÎçy¬ÊOy¥°ºÉ¯º‰ÛFæpàffò „À–[Á´G?GxÙ«üì‡;‡ÄwûîÙïÀª4»‡üŠjT·†=XÙWÎ?ÝAJѰûkøÚתpWSpbSA¾ª á=«Y²©‹ˆ}³¿ƒš"ÏÇg—!±b×¾NÛ”ÚòÁxìû¶ ýðØ‘ö8óòÒkdiëËT•¤ñØpsŒÏUŸo‰.ŠÇÒïEýÓ!wU²ê}_€¸^$`y9DÂÀà D"P>(IÅEðÝlÁÆÞÏ­)ê_ùKþïÉ»ø½'og\‘£¯Ÿd rëp¡Üë»L-è†i˜øÕ¦a¢JWÊCóÉV„T)´"ÍtÒ‡¬dc–(õ ~{©·2xõÈÅ~ÏrCšL q‰HðÅ1`‰”k ŒÊ„—Mëûm¯ðPŸ´<,Ù†øÀtË °ô:¾iÿÃÐ rT?‹K?Óï%’ôßý“Ž ^_²P0ëø3ø`Ãý„4(à)„Àï÷ljEc—mRJ¼^/Ë•l,?¬ê]·vmO¯ ñ5Mã¶ÛncË–-„B¡+*ô–[n!''çCWnX¿ÊÊX{<fΜɕìû!„@Ó44í“ÇëêhÖ‡Ö0;¬­a´®!rARⱦNwª‹¢¼âɇOՑЗ”Z&½,&IÇÙ}¼ùò»„&>ΗÇÛh;²…·—ü[Þ—8ûÒû¤&Ý eXϬäû«¡uFI&›ÙöüR:nbîcàÔ:^|qù3btž=ûËÞ#1u_¬°k:ÊÎ/óJáW™ç ±ç„•'ÜÃè yîAó†Ãº|]u.tt’fò<6ÍW  #ÏæG%=“)xl¯Œ(]ÍÇ9Üàþ™Ó_ è¶Ç9·ý¼¿ëíÑJL˜Ì¤1y¨EÔ¾r«"‘=GÙ~ F|v"“&Ôb:Û9”·•f#BgÃnÖ¼»d‹N£[A…èèJPpª}² `üDFImŽåºÊ\öIjH#’ò<ë°8II,ªEª˜¦ ¦ìÂɉúSX“V<Ò‡z1ºÃ݈¸6u;=ôD†Ä0;–(k+d­àáoý_Ê|™©˜ÇצÎë÷e@b–Lç§Æ“2 Â'ßæ7yTçzqXª·Š[æ}ŽéºISÝvÖongj‰ Åb!oÔ=|ñ/îTÁx¾\:èü(5dwöñá±—ºÄ%í7uî›eÑŽ“Ò ™öðCL,ËÅ. Ò²“ß¾ºÓ­„»Œ)>ÎŒ\-}‹8öÃæóÑë¢FôÉâ± e³¿ÄŸÎø×Þ²]#æ+ß|¸ÿ‘>gyXWWYƒŸ<{)XèðÈêZÑxìÖ­[ …BWD6㱟.eÅcsæÌ®<{lï*Úa]ÿdD¦i‡ijjºb°,??Ÿ`08lHŸee¬<ÈÚµk …BiŸH¤óUÄ”&&H°H+vƒÂÆBn¾ùffÍš…Çsm,óÖÇ«AFdï¼ó555äææ¦ñXº”Ž8÷´ù‰¥â${L¦É›³â±«W¯fâĉÃFô)QV’¡Vöt¨Œ. à¹N@¢kõÕ’ ÎOôñà±qÚê›)»å1æNÊãì¾õ¬|å—¸kþ?æWX²×ˆ$E\ø Vò'ßÎtnŸ˜¦9ð;}„ì?®4ˆvœåíƒùAnMLÅfK3@Áv{^Ö2B\äœlõÍï­× òèƒ}û~7¡¨ˆ«Œú !Ð,\óãÅc5%•ŒPK@´°óÝW9tü u§×òÜÊ•EIÂZ€ê;æ2=µ•ÿxþ=¢ºŠ[eÁ½“(óé4½ÿ«çùq„°fé 6j"®Òì}ð¡µn#¯½ºšmwåãneºx›wßh£q}!cæ,fþMÕä÷f{5»Øþã°^É!ÙÔDgÄBé´»¸Ù{˜7× Íð2êžÏòÔœ¬¡sì[õsÇ :Þ^º‚ ‡›'À7ên냑y~ùSÖÅíxz’xJ§òÈÂ;(üòhdMƒü±â±Rb$Ât5¡!îdœ¢gNrì„dÂü/3§P#Þ}ŒÕKÞeö_&O?Š^bE¾Ÿ…7mm 9#‘hcó‹¯pÐ3…9OÌÆÖu"Á2?÷8o¾°’³µð…ÇŠ±) ªæÄ 3¢Ë`Þ-c¨)+!ÇÖ/Ž% Bg²=|#Í›‡¯s'K_|Žæ™ñèg':²…·ÞZÆöé_ç6OåÓ`ñd½e;KÞx‹½e9Ü2ÂB¨þ{S3yrþmŒÌ ±ég/ðöþQäÞTž9GE$»¨?¼ KV1òÏ%§á«—m&5}1_ceéÿþÿ9Q"–hcóËé{¼÷‰¹µV,eùæ">;«˜æ³ Ô»fóÇF“ãôâÿ„Ò\U¹–VºU V‡5Íz’$ö4ƪ¸ð9RIÃèçèQÂ2—xŒ;Ç•áQEÅæ´;ºƒ„tà÷ÚúÒ M9ïcôO‹ýRài¸nl Mµáq:PsÜhŠŠj±ãÔ É0-§v°âÃä<ôæã7-˦‰a¦ËpúœX4›U`¦ šO`Û‡Éyh1”HZë¶òÚÒcÄR†ž ¯KEàµ[PÀÈrÒW%$G,VÜ9ÒýÆ'7!=´!é2ºpúl¨ªFO²‡ OUŸ?7âô${0R&‰î$ó !¥$hÍ¥YiÉ~5¡,­d̘Ñ("½_…Œžª ¨vܾ" •Ý´…âØåA¶M{‡·S£7c’pW1¡ Á–úöÛŠ©ö "¡Bš¯¿˜m;ïm?˸;J±ID,‰)R±$ºn`Êìon ¨?ÿ¹÷ R'í %lcê¸Ñµí¥#Ãe\8JÊœ˜93ëé;§ÆÙJtï9Zb&¨v\ÞòÙ˶Ì+ØvªƒP(®ó÷h¹µ˜Ê|;2ÔH“iAˆÔÀº~‚ƒÍ‹vg†a2S´'ÚðÛ´v´ÓîF ðz¼¼¹Ä¢1Ì”¤ÐVýðØìˆ¬@¥ßñ̲j¡dŽŠƒ`å$fÏ9Â÷þæ›è)GÅl›^MžCá\ºÉ@ØÊ¹çéǽ¶ŽþÝ*LEÃY<Ž™‹?ˬŠÉÜ÷È)^~ý;üÙ«O>Õ7Ígñ­”­ÿÂ÷¶.¥æÁ/²øÖZ ]½~‘@(â|BôL½”þ­W¦~¢‘L«ÜÊkßû¶ûM¢)ªŠÁeÐk€‚@~)Ó*ßåµï}—í¹Vbí1œv5}¿¹kÖ~~ó£¿ä¸sðFSØìª£¢ïüwob*,&Ìÿó§¸û®õIKìÛ·o‡Íf›RV68{ì6ûF,^ )$FÊ$Üá6Ï´'ÛÙZGia)áH˜ps”ÏU}^#:tè .˜=VÆi=Ýþ"ò|z÷šÅL µÒÜ㤴ԟ^fê$œnìÀ Žœ| üzñÛÿü ³¾ÂSwŒ¥È££¹…Žp]‚f÷,,$`5Iĺhij'œ”(šgN!E~†Ó§‰é{°„B¿‹>ßZêtŸ«§Ç•O¾Ï…’ ÓÙ܆™_NC Ç{èhî@æ—‘«%éik¢5"±Ø¬˜±ÎÂbrÝ" ç˰*&±æ3´(AòÜ*É®æô9`€¯´”¢´ÞÍŽCmÄ ýï¼OþÂg˜wC ¹ZúÛ{R"Þ‚bò<á¶Vž W ùÙc³}¡·%rn:[â±A55f§ùD BªØ 1M™ŽHÕ ;y•ÕY.fÅ™SBUüHѰyóéÍï­12u†µ+WqÐ=Ft(ÅE°¤ŠààB±¹r)«Ét¤¼fDö_EhøJ«èK/nw“Wáî;¬Ù½äWx3ŸäU‘˜P Ž‚J*2ŸœŽlçHÌh”Îú=lxï$q)(ºm÷M('×® êÁ_P”ý^®²®;ÄÈá²Þksÿà/™{¾ÈË/ãšS:ŰâÌcĬ?àïfõ;Ô÷›]ûç5ŠÇªÔušŽæ2æ¯a ã±ÃúP’rÖ‡TÀQÇâ–Ò¦…tìGA»laC¢‰”‘¡»¸ßÿH_×vaK”þÉLâÝm´´wM¡aw(( `ÿ\ÿ…äŠZÀLz¬“¶ÖvB1‰Àâð,ÌÇ«$£bÂMŽkÀ^ÓŒôyMƒT"J8¡áñ9²?ˆl§]8lµC´Dédæ )‚Î ªE¡=ÖJ$æxWwzö]‹Å‚WxikéH# h3[w¦·¬ã?¾óΛfsûÄrdΓ÷M¡Â§·¼Â‹[f=ñ £¼*B³àPÚ9¹s%+ê ˜ýÔlÜÍXòúo)É{Œ#ò±g^a-eÆM…üpåò{G0qÊ4n¼ùÆ•:ñcÆ”J:ÅC<±h^KŠÖí'9~B²èoŸ%7?@hi=§“=ÄR&  wŸãä¹B¢ñ8gWÿŒ-yÌÿÒï‘kIoe7cÖ(½™½;·NŸ_³¤¤_ÊOK1G2²¶ wÇaöï?†9ö÷¹cêXr4D±gÝj6È'=ˆ%ÞʱÓNÆuÅH`ïýT?“çÿßœ|œ§ê9tðþsý&f|þk,ªÈ!7àÁ¥–S]UŽ5v–v5ôެ­Æ¥&9ªˆ]‹ì]‹¡·±wë)Ü7Îâ†ñ£± ¦™h&˜—ƒË“OEu%eÖ­Ý0 ã•}¥€°Q0~B&ó­JlÿÞß±ãÔIvYL¡N:¢.r;RÌ*ЮªŸtõðXa%§¨–i"FM˜Â¹C[Xù«•¼³s2÷˦Ńۦ  «Ãƒ†™ñ}dïÒCJ´ÞßYqâ÷رj ˜©¸æñáÔz¯¯ ÃtRqÛ">ÿ`VÀ4-J qõD { ŒQ¾ÊGG?ªŒu¯üŠõïaîS>”ˆ Ò«©™Ï½Kœ2멤afü Ѩ‰ÕáÀ"2ÓBª*¢o¦ž ÙWDú^ûLJXpû]™Ì·3ÆW>ûÞKnß‹`Á[d»úëβýñãÀcîã<§R\V„ߟCCK¨>k)Ž–mì:w 3ý4ÛË)Êp¹-QZB1b µñ'Û{(íCQÏ'òº½äVæÐµs#Gf3Þ'Ðõ8I›‡üšR{ŽöÜÂô\“öÆn¬êH©ÞÁ¡ƒ­¸JJ(ÌñáqÛÑcI¤ÏŠª U Gé—Çìó€BÅï"µ½‹h,®'9v ‘îp ©5ÒÁ›ÇOÒzû8rUƒT<ŠŠz”„)1¥‚fµã±'ˆÇSÆIöë&\|~ÄqƒØŠ'â1÷r:`Ú¨D2F¸£ó*'5½hœ>Zsc¶ô¨ 2NÓ®7xû§ÇèHHL©â-»ƒÇ…Ï£ ª õçÿÎ_þõFMºétÆi©¦ÍeúŽ,ùñ~VûÜX:"$•487òÁϲï7+øŸßXƒÕá¥pÔí<ùÔmŠGP}‘üËãŒ?‹…×0vF5Ï}ÿŸñ¸ÄºÓÆ&²`·Zþ­Ü>¹žW~øW¬GCÓä¼™O•¼ŠûLôH™}þùçÉñç°Í¾o®EQH¥tZÛ¸Í=“öd;›ÃëY5‚®žnZNµóùê/Ñ›=öàÁƒ,Z´¨•R"õ0mM­t†ãè&ÍŽ'GAÀ…j&‰v¶ÐÔ&%šÍK°°€€] ·ÒØFGAµh±TEu´œiÇ–ŸOŽÛŽŠÄL%èik¢¥;†!T,67ÁâB¼J’p{3ÍQt,Î……\V5³NB"e’î–fÚ»ÂÄ ‰P,8¼Aòóý8Tƒd¸ƒÆÆvâÂŽËÀo ÓvRYêO›¡££©™î¸ª‹’ F’BN‹AGS#­]1P5l.?EEÔdm t¥TîE…d¸†ö(ŠjEKFHùK(ʱ‘h:Û»M?ÀX¨•¦ævâ¡bûíyt\Õ}Ç?oýÍhF3£Ñ¾X²lŒ1‹1ƳжiBNÚÐÓ´=ÍI[r’ÓZN›&!=MÚPˆ–`6¯@ˆ1,›ÕZm­3š‘f{kÿЂd-Æ bcëóŽÞ¼wßÕ›Ÿ~ï.ßû½£ãn^i3ú9Äq:»º¸¿=={›È2,ÚºÛ±mÃ0ØAJå(†aʤy­åulÓ¦D,gvfžöd?ÑJ?Ñioè­bÁ4*8Õø´Hy½oâ7ÁD-Á)ªQ7Z¼múbF/W Æ«N{ŽŒ+£6›p,ˆ‚dJŒd¢`08·òØyŽY äÑÅ+ãȲÌêÕ«?’ðLÝ@±ößOÞFtdƒ‹¸¬î >®ÙâyŽ]f ¢± äŒNÌE#O…»‚œ™g0ŸÄvĉj–ùWÛ É¬™¨¯Ð‹nqpH’Ø–="±,I #Ó€*¹HøËg(奧cLTìÍ ¯´3Üç(+ÿNfÎD8<Þù½Ùn{D+ÊcÞK½Ã;o£›:¥î}öwf²s(&ÛéÌúIÄBx‹\º‡Î>E- ŸzŽt)1NM™—)b;ËÖ‰Ó3ÜÉÈ34ÐKJŠSuÏP£ kŽ5‰ëGeÖLdY6¥j)Š  [ELÛ «g±›7„ƒƒ®Éås㯽1&)&ý/üŒ[·-ä7]Êi±aö=w7ßßäÌ›ïäÛç–Pì{“­¿ø ÏÅ¿Åí76OÖ];àäßäÞÛ7PõÕ¯³îôz‚Ò¸@vÒ‰zr?;¼‡Çµ›¹íK ãóL‡ãHÇÃæ”Ùñu®™5ˆlÛÂ0‹˜¤Š¤òILÇ74WDa9BÁ(òvß›‚@uI-nÙ=å6¥‹› <úéAŠÞ­Q* ¼ÞF~•—\º÷ºª.Œb¥ÒÚ?DÑñ„â”E|¨€c›ä“h{ׯe;¸‚1Ê¢<Êļä`›…¡>Úß³°-Ù"VÅ/´µw# 6¶c!ʈûLÒ}ý¤ó&¶#âÅ)‹øq )z“6ñª0b!MwG?f¨ŠšR }8IOZ&žÐèïh'gX€ˆ«$A"ìEqò${ûÌŽh¢d_˜²X—S yðC²É´‘\¢‰0îOpÁa‚¨Ô£³ØFFƯjôؽï‹ÒE´Ðä9+Ë?mþCÙ,·îNš¢ÍJyBJÙ)4*ÛéNõ8ØæŒUËÈ¿ò]ÙjÄþ6Z e\èeçãóÌk]dt@ý¹\qå, 9`¦ysûã¼û<ä‡ÊWò…/®cy]dRæ2Í©VIDAT²õ4÷>ͯ “.Bpk®ºŽµµyîüÁÝhå%h‰àŠÏq¶¼‡ÍÏídÚÀ6l<µçpùUk Üʽ¿éåKß_Oðí§øçJ×ò›Ï$dõÒ²í!þóž T÷Rl9Æ™_ø\Ž{ð~øw/_ÿ5þaeaøý¿ÞÂož‰sÝi Nõ?ÇcÛNç‚ÜÉ.¹¥=Ù¼÷"Œ?´ÿÔ DÌNº-¦¥Ë8uÙR–4VRbìä®»~Áëb)eÑ~Azÿ&6ý¾™¦U*¢'Býš/ó­s#(‚ø‰\kv(òL J‡_ïûÚ÷ã]³Èc½ì?ÐJr0I6;<µ™ÂX.r‘8¹ãWo±×c#5šDØ"Y«ðÄóo d ”ŸW…;qÝWÎ¥TÇvpE+ˆ*û@P hTEF”}h^=ˆ«, Hª[çˆÈ¢ŠÛïE(öaØ ¹CÝ*Š$ Ør¦„ßïÆ¥Hˆ‚Ÿ GÄ(š£Nk.žÜ¼›ÚˆÁâ³—Ðôænžzå-BýaÎh Œø³«iko嵇îfcârþäü,i;—Lv|uK‘3{‘þ/ò¸wå\¥?3@W¦[0ñº½³ÊceSáûŸ¹šHíÔ‚F%žªS“/³5⌛¢x½9Beq†îÝÄË¥å\¶¤ŠpGáì;´—³|¡F¾ç yet•ÞÍ®]­¬^\_y—oˆ¬(ÁçœPÍÜ Ýï½Ì›éFZýtî}“||q•qI«€€è¯¦)4Èë-]œ± —=æT& T•S¼ÿ9^\¼œë–”áΪ¼³a±úOs}XÂÆ ~ÉrjšN¢É×ΛZXs2‹cE^9Äñ5%È™‘gq,8¾Î%‡éY¼/íOÈcA@ó¿/l‘æØ¢Y¶c]h \“ye ÁÒj¢K@ ×R-lä=í"N*/¥2´–+Ï'v /²ÖÈÅ×_ÃÙå ¨A‚}›øå¿lÅF/šè†ƒŒQÕðNè9FžLÿzŠ.T3KÁP¼!b‰ÑÞYWŠp,BÀ=²¬ÆÑ3ôv÷2˜3±ë p+F>Mog_µ f.ÅÎB¤ššˆŠU¦­ã†í€ ¢Eˈjd'7Åñ5’HP¢Z¤zû°JkŽŠãë\2æ;<<|˜.¾iÓ>Ðm;è†AU šÆÒ&Û!Éðǽo€#RW2+ìt2‘ªÉN¨Š7Då‰Ú#O(A]èP-©zˆv†[(‚‰†)RÒ±2j«'ë_U#^­1*Vñ„¨h|¿n’¯”º…ï;ÒÊî §¹rfÇ×hµš£Ÿldg|Aàd¾zúŸR0 Ø£Ÿ»e7¢ R®å®Ïß=~¦Wñþ¿ê>*;ÏÌȶm0SÓ¨B«šö¸[ñÐ_ôÿX­y>IÈâ´S›ó3òó|pä)–'s<‡4ŒÇ?òØð1ÇA×õqçØ#Ô—$ ·Û=@'SCÅb‘={ö°{÷îñe@ï»Çæ°Y_¦Ú*®Üc.\ÈŠ+ðû¿žÈ[“b×SòÛ]]覀¿n5W\y!'WùÊŽ fÎD4ëK’Òì°¶ã‘ݘ‡Z;ƒzŠŠh9ñHœW÷½6£ñ§à®ä”:›?ô ©hµ³fA5ïîz–7:¨è|›ŒV‡·k+ìöóù[¾Ã™C¿å¶;çŦ*ÖúmÌ|‘ò5W³þœ„U“ÎEÌÜAvn{‹žŒŸ ¾úEVEسé ö+«ùó›×PðáU%’¤m›Êó¯æšU ¤¶p×?>ÅKÍÕDO¯¤aÕ%DN-`9©WïãéW[H-Úó¿`³öÛ·²®Á ¦A!;H×îM<¼%Ëõùu|Å·yìž'غ¯™Ê¨Fü“®¼?Bf}eœ4CNl± êKˆà çsôEݘւX4,-có«ûéò*_MSÔ‡‘ȲyWöþ¼uçãÎöi–%<¢g²DÛDÛÀ0Y—ƒYÌ¢ò—„ˆ ØäÞ}šýK¹þo¿Æêj¢i©h¦ÚÜÁ£ÿ;Ì‚š*j,fqŠæÄÈõj¤‰EþhIfΤuëclß×Ͱ-"d÷3 TÊ ‘ém%_ËYõ~$Q@P%<…<éŽ]´t<¼á>DÀðIÈʸ+þ‰ÄŒ® ¯9/S G@  [:ª¤`9¶c#Ø¢ â½´v¶AN@s4dä©™H¹U¸ù$œ/±K’ÑN«'¬(­Ñh{|2 çUáíw#3 é6%z†aKÆ¥HH£Ö½ÒØv‚ˆ'±„-¯îeqÉÉTjÊO¾„¿øû³hÝ·›]/má—¿û=ÿÍ ÔÙ©lÃtó‹".IÀêz–·çXsãM¬=¥ kïÏùé“*Ž !©$}LÞ"ê“pp°Ù£jQ3ß¾å‹K/bË*ª|be!˜eo˶ˆøÂ˜Xä°…êXS! zh>È&ééÊÓ³sý™&Dw Ñš¥ÔmÙɳÏ×cÔùD Ť´nõ›_d÷ˈùD © Þ†ÅÔ”j£Û"œ8L‘ÇÎ=vu`Ä=öÅáíãòØÃ¹ÇãòØþŽv’†‡Šº2|"è¹4=)¸£TWEPFd{R9LAʼn º‘õ~Ú{Âñ1i«3Ò‹+hÄ"^$#M_ß‚VJPÌÐÛŸÅtQƈõex{ë³?°Ž¦r?‚-á lj†¼¨¢Aº·‡TÞh•Àv<Ä+b¨ŽN~°Þä0º# ɱ2¢‡Bf€®¾ ¶# *>"eQB^‘ãàó°òØÙÜc#RƒTzðˆÜcdJ«ë)pHõ†¨š(u’õjŠê‰Q[3©0Ôpµc¿ºJ©ô•À?Á:ÉqÀÉ ƒ(*«¤®!Š:i,ÇE¨¬šé U|‘ ê¦ÑºzK4–L±ª=á˜uƒ˜¹r=xGNO”†•×c¹Ã¨£êÇy²øØ˜vœh¬M¤3 ˲‰*±I×Mô3:&'`Eo¨âh×â¸d<ˆÆû¢(²bÅ vìØAÿø‰GË–-CÓ´£ë´qX>äÄð<Àd±¢°wïÞW$I:Õår c[(ˆ¢H6›Å²¬YŠ™¿ß$IÇxÍóQpœ‘v²aÈ.—ËI§ÓNGGº®Lç9\š.PƲڱDÇBàØï­iýDQDÓ4"‘²¦iY`HELÓ>üƒÿ ×+_ìñÊ ˆØcIÆëõ¢iÿ £- ˆ]­RIEND®B`‚iep-3.7/iep/resources/images/iep_shell2.png0000664000175000017500000004763312271043444021162 0ustar almaralmar00000000000000‰PNG  IHDR!ȧ!Wå pHYs  šœ IDATxœì½wpW¶§ùe–7(_(Ð.õ†…ÁNÄÀóq7´‘k1,B²,#eÒ(âÝgŸVY–ðçc¶dÝU]ÐK UÄb±‚ Þ’:•a2YqØ= ܺ²¿Îù&+6¼Ù¹wä¼*_¢(H’D&“’!Óià|×ú“}Xô6òl“˜ì)G#j®8þvÓ>“æ’)²L:Bòd7íÁ¢Î„ßïC§a@2iR²ˆA¯!éBcqaÐ ×yqjë  Ç0ÛÜxÝYº­ÈôtvéO“åÍÁa6 ÔÄL:3<ºà‘>tî¡:Ž>ãà{A®k3d‹YÌPù——=úš~—eAY¾|aÄ[JEaÔVáÊ·×ÈÞÐPÙWÖãR¹·úù¾×Ü=Â?Ñ‘ey Ó KH²Ä¹Îct&;PÌ2zè•û¨kÞDG¤%ËF=O©þ0™‚\7âàÇr&A°'…Ïkx‚å `oŽ›«uI®Ôœ¡d:[[HFlÚ$zGFÝÕµA„"¤(H™ Ê µœÚ͉^/Žþz.Î¥ÜiÅë# ÑÚPËñ¨“óè=ñ)rþ½øÜ6ü>‚”¤£#:3Ù.+PD=ÙÙn4ƒuIôÇHÆzØþézîœä$í!”L¯¾³µëW2µÀ1xã¥á7€’îåíWÞ$c´€hbéê5øíÆáín§[²’cˆ±ãT/Kç•¢»®: ñH[?ÝI$!á™4ƒ•÷U£ Òq–};¿¤+™¤O²ó½ï>ŠE;Z $Ià ßcÇ™«“•kVá4k‡…°§¥–×6"ËbÀæ›Âš¥³1hFÛºa¨'x©l€óßãíÝ! ýVòk² ¦`ø¡ºæßeŒ‡éÊ}EAÕ »‡¡v e$N¾ %~É(‹Æ™å›Ãûõ¯bÒšØ×ü9Ù5¸,žÁ§ZæèÖ¿ðÞÁ ÷þ5£@¨½™žP+Nò7ÏÍ# ÒíáãMgyñožÆ¬™îŽ6ºûÓdçú‘"Az¢It79n#m]rEkÆ¡ ó›ßodÎÂY˜S]Lžÿ†xˆîX­Î‚7׃qÄs:J„†.nø?._Y­õ4w6ròà—”<ücÎmû[ž‡xÊŒ ¤c‚Ýa:kw#­x’Ì…mœOç!´Ÿ «r&¯¿}€¥kîC×~”ô¢Ç)p̲˜-zv½õ1ñì{1ktA4PVYI¬³ž¤DÅQ½ž¡.(€œJ’m¬{ôB§¶³}×6&•Í`ºWáŸq®)Ìñ.X¹â^Î?I׉Oèµ”òôc˸¸ŸhÇ^8Gî+ä“ÏöŽÇ™¼ðA¦º0i@cr±âÁGãçøðý/èžQŠË bñLfåc%DÚN³¡6…‰Á* ÄPA¡¿?Î=‹V#4læøÑ „#nî_>›3»¶¡÷:Ñ—ßËŠé~½ó Ÿ~ÔÆìåkpiúضë,KVÌC/ŒU¶B´/NÜ4WeóÚ[Ÿj.aõÊù¤»9p¡‡Þ†c´‡z*V³nº‹›Þ¥K“ËSëÀf¸ÔEï]äw7Ò'X´t>­ sŠN…³X4µpXï¦!ðDg¨'$˵G°8$Ò1Ö?‚Ãàäû?ç3/a1›éîïÆiv¡ '»9|^Çʹê[B˜ìaþòáQæ—Š„z,œÙý.ÙçÉ iïŠ j$B üéÝ}¬\>—Þö:~ùêA,ª¦óØÇ̽¯¾½ï>½”sÛ7PxÏ<ÒZ;Ùæ4gíÀZ\ÃÎOv1wv>ïmiàùÿíJ £G-Ú«_i’ý[7âÏö±xIk„† u„´9”z²¥}d{ÝDVJJ&#Ëçˆ%âDÝÍ^‚¨k£½¯cö$òó P'I$2À€iLvV®]ÇžÝGéMHxÌš¡IÅ8~ä$ —Í¥ÐcU¥L&sI„¤ ©x/ÏÓÕÂã*äb]#¾”ÌáSý”ΘŒ\ì¦Èiæ°b¢dÁ|ºN¢­¥™í°tÁtÚÏ ¡ÕHwT˲Ù|úÅ|V#NýÀMRR\#ûÞµhâ!©Çèîc¿ÁDIv͇wp^01gAé¨rKkÊ8°mŠÖ@Yi!š\ S{®…Yåþaä¬È×Õ@Tn?²,Ø„$‰*Ï é$ÇBûÐY`[ý䙋é™™}/v½Iè=çO]Χƒ<.q£‹‰ŒÂsëìøZ~6%DLyîé"´Ê€©Aï*âñ:ºûÓX¼%üìñ,z¢)&¯~’§»+ƒ,IÍX¢µàuù0ØôT?ð4¶l´3ƒœonÆUPˆ]¼d¾Ðétuuu¿•eù…—^zI|æ™gÆ´b+™ý=ÄõN¼vóÛï ƒArss‡:Œ˜ö‚L<Âþý‡™<ë¾aõ%Ÿ‰+QåŠkQÜð>C‚pÅö¡Ï‡öÍ .wÑê cÎÒ!Ǩ?z”.S!s+óg/ÚÓr‚#3TΚŽß,Ïæ]^öõU$êà"¹ÌªÌÇeÒž{ÄlÙàL\:ÑG¸/1PwQ‹ÓåD#Œ¼O£¯pè:2É>*kf}3Uî(mmmø|>¬VëÀèE‘8:Í¡Öýô§¢¸Œ*¼ÕLõOG«I|ÕìÔrµ!úh¿%…ž@;áX —/›I7j_³Ùü6¡‘Õê±zóoWµ!Ãôâ¡( ³0oá"AsŸÛÍH›ÂXçWP=ÅÓæPŒ0loy|VN%‹sd2’2Ê(|õ²ÆíÅÓæP¤ ˆN&#)¾Š¢ÐÕrŠ]_6¢Z“ƒ%Ë–â0}µó£jº»2› ›N(sWQæ®üS`èßÐssù÷ûUß÷˜‘¯øþ¯p‰¹ìo›Ç‡mð÷Ku¾´ï6¡»ÑÃr¨¤R©QvŠ» Y2‰Ò­o°·ªl[îTÌ:â“ Édæªû¡ÔáØÝ‚(Š¢ÑèM—u;zB_‡Q6!QEñ®!AeVƒ^§¹ VŒ]‰Hƒ U£½µu¼e_ïùåLšD"q‡Ï¬2‹…P(D<~÷,ä¾´0ÐÈ/^L^^pwú„¸Ýn´¢ˆÁ ïª\•¡®¦x–¾Üβ¯‡D"c,P €»³­~Òéô¥žÓéD§ÓÝ•ãAÐét×Þqœoc#½e_F³åÚ;©¨|ML&Ó%º‡aCÜm¢¨¢¢r븮Ù1•Û…*B***ãÊ„¡Ë訨Ü^a ”ÇФÊåmoB‰P:f÷îÝ´´´¨"¤¢r²5°xñb4š+'X&”E"l6«V­º« ñ**߆^ömmmD£Ñá´#™P"Ç),,¤¤¤D!•;„¢(˜ÍæQ §G2¡Dhh\: @ òÐ"OF„VåòÅû Šòu§E+µð²°²#Èü©¢òmå«VcL8ºõxãßþL,2®üi<÷ørŒºAÙœ¡î‹ýx§ÎÇø˜wdñøË0ˆÂ@¼¨«Ÿ`XlZk?cãg'éM*ÜóÀS,©ˆËÔjàõ×ß',[X÷ô³”f÷²`•ÛÏM‰PÇùƒ|üéâñîš•¬fæ¥ß¿Bˆ\V¯„2M>ÝIkDÏ3]ì?RG΂gyhª…—÷šb–>ò«¦çßò ûºŒ¡T¦q^z4úF(d’QΟ=C·`§Æ-p²¹ÅØB̞όòR&=¸›‘xèѵì9|œÚÞ0› xê±<öì8Ä¢Âì•÷²¶HÆݵ¤æMÆ r‚îú½üå½=”,ÿÞpðQ£Ç@‚Æ‹mM£ Ê„çÚÃ1AÇ”ÒbŠ‹}ØÙIÃé=ôùL.°rúxi ¨¨.eŠh 73™Š*'µ{j 4EðL¾Ÿ åŠý]Îl,5 vžýÉO±ä³‘³º‹¿ócÚÃGÉËËEqø+˜6­Š/vH°½‡tÁjª«]ìÞý ™3åÅ¥” h6Ÿ&­(ÎÒ¼ø/¿ÜPOrv>­­œbß'oÓã™ÇÃ¥¾qº**w–›ê Ì6²·Ï‡Û[ÀùÃç©8ÜNLfÁˆA°ã’ hD Ùþ¦ß·€­›w±í”ßäÙL*)¸åöuy#ô&…•5TV”ã5Š(²žûuئ,¤,×…®¬€-}Ä#sÜøsœhD=9~3ÔÖíüþe‘êåàÎ’0é4“ãe ³§p~ß¶|y4z¯^OðÌnÂî9ø2 |´í(Îü»s|,¯ôç-QQ¹#|• uuu¿Uå…p8,VTT|«½‰ƒÁ &“iTÈ’¡ÓV»•W¶XúÈ*æ”x’ý ßa8{ÆXŒ ñ:|£G%6šs†få¿”‘3s**ßFE¡««‹D"Íf›ØÓW ÅD‘¡©ôÜêüû*†ƒ- ‚xÅtüµÄbÔö+²½ Ã?Õ¨<*…±²$_΄!Q‘$é*=šË|€5ñ±ŠÊÍ2ÔÖ$Iºj@¾ %BYYYŽ?¨Ã •;…N§6ƒ\΄!A0 ŽwUTTTF0aDHEEåîdˆзuÆOEå›Î„!•»U„TTTÆU„TTTÆU„TTTÆU„TTTn;#}ò&ô² I’eù[½>NEåN ˜A믶/pÕý'”…B!Nž^ÁÑ{éÖ·Q¾|=MÞI”¬ZËÔ|‰íþ*¾ÿèdŽnú Ç{ ¸gòƒUþõÝ/(z¤„„±G,á—ï×±lš½VD§×‘ÅQTR¹ƒŒŽ ýw»ÝTUUqúôijjjX¹rå(w˜î Zó—¯`QuŠ”ANv—D¤D’Œ$£³zXýè“L²k5zWe¤u‡‚oó17ˈ(§I§Ó$Ò4Y9<ýø ÞyõŽÙÖ!íX :b=lù9è„F`¬ˆ³­F@Ê$èlo%=u&m€L:ƒ$ËȲ‚ÞîÃ}Ÿ}>îs[ÑŠƒ]ZÀ`±¢×i1š4Äe”Ñã1½É„V«Œ„”VÐXs¨®®àÓ·/ ƒ6VåŽqùplèuu5‡¢¦¦Q‡ýòà†EH`Ò´åœøp¿?.ÿd¦dõ³üù¿E9µ™£GLÌ]±Íï¿Â³‡‡Ö=„Ǫ»Õ×{˸„>CsÝ„ëqØÝÌðEøpãv,^7†L„O·ì&e-¤ ÛEq‘,£–Ö†³TNZƒ1ÆŸmä£×þ„É3—9~-Š‚Î˜!ÛnBcðZ#Ô]°óÄÓ…h:;é:€?L¬öQ* ³1N- +uN“™¥÷Oaç¡­5Ì'ÇcCÔ±º 1Oª!ºg#|3ÃÒÕã0$ð{lˆZ#þì,ÎïÛÈgG²y,Y½­Ú R¹ƒh42™ À(ÊÏÏgÆŒäåå‘Éd†…JQ”«†wPÙ6p»ÝäççÒ!º¼8t×ösˆvÑ;²1hƶ €" ü”3):ÃI¼î,¢­gØÞ®åÁ{¦  ]à­÷w²ú©gɳ®ÈÊ1œÕcLÃôU²~¨³c*wEQ8}ú4.—k”¸ ½äÓé4:n”ɲŒV«Åd2MìeCj­(._ö¨Ï¯E–çR¢ÂË÷.û)j ø<“•WÁÃy—¶[=%<ÿã`P¼ÆŽáú\åDW­¯œ_å (ÊpOhäìØÈç2N_Ñ RÝ3l;‰`6›Ç»***ßh2™ ñxükc2™Æü|B‰Ñh¤³³“£G~k‡œ**·Ap:ÿ_:nl{ñ„!§Ó9|óTTTnŒ‘†è[Á„¡«IUTT®Ÿ[½îrB‰ŠŠÊÍs«Mª©¨¨Œ+ª©¨¨Œ+ª©¨¨Œ+ª©¨¨Œ+ª©¨¨Œ+J„dY&‘HŒw5TT&‚ `0Æt“™P"ÇiooÿV/ÒUQ¹ÛQñûýc.™šP"‹Å(**Âáp¨"¤¢r‡p8L8VEH–e$IB’¤›¡ok¶ŽoæuÝa%¿­/¶¯{]Š¢ÐÔÔD~~>AeY–ÇÜÿ¦EHJÅéI‚'kì²wC7B–%R±íM­Ä Yn?¹^ˆx>ÉhÍm]È¢·?c:‚hñ`Ò Œic‘N““^¼†+êbÏÎa°8b=AZ‚=ˆz v·»6ACS;‚ÖHA¡!!¥u`3]ÊÛ¤d#il†4’Ö†Õxã_çå™Bª™!ŒàÍqKÄÌT¼Ñ`F+^ýþö÷h †A£'¯ ‹V!ž³áÒbI%“ •ð:,w¢Ú缎†›NôÑ/épXŒcl•IÇûˆJté>ô6zÍø íµP…@ ÀK/½Ä=÷ÜÃÚµkEq8ûñXÜ´ÅCÍìnydî”»à]tmdYF–d‚õùõúï„òJ)œº‚÷ÂC˜µMM‘3Ôîü€?m>†`ô±ü™ç(êÞ¹ê!J²M(ŠÌé½ï¡¯zšêë¨òG Ò˜â¤(ÈRŒ ¯¾ÊÊÿ¿Yƒ’‰³oóÛ|¼ÿ,:[5 b±¿™ÿöÿ¾Íá广‡½ãsZ\±bjÁ PB²§‰76·³¦2FÌ5‡éÅîÁ˜BWK_tuÆj4R<ÄÛo~Î~þæQ àzz££²]£mÌ Ž,W¡åÌAôÅ÷’ë0Œy69c÷Æ7Ùt°EkágÄ‚-G»DTäÓ¨çÓÓ2O-¯F¼‘§ôR•?‡R3]VåQŸÕ¥ ~¼p”CQëæL¹2^°#P¿ŸCýäuÂ1o=S<æ[ÞS½Õ½7EQhll$‹qèÐ!–-[†ÉdºªÁuˆP¨w?ü Ù`"Ù'±hÑæf䥨úÑaªî©@ùFÈÏ¥ž$IH²€Õ_Á ÿðØú‡_³é~f®X‡_áíG‰œogý ÅŸs–•‹ûeÒ±nÞe3íqdwKKcìÛ¼…; Ö>º¿Í|… F™»ô_ Pˆ3Újþñ?BNÆèO($m,yî¯Yboaãéf–ÚddåR¼^EE‘‡cøJé_lÚʉ–0zw+T²cóVº¢)Ü“fPãîàÀ™8¢¢°bÝãh»ñáÖã¸ò+Y<Ýñ½ièI[½˜¹ùI>Ür^¡­g0Bž”dûï~ƒ4w ±-Xæ¯%tì®f6×)œTʤ¬8N5!xgpÿ¢JÎo|™&]6:š… m~‰f}6z½VÍ'Þt”OöžE±øX>»„·>?ŒÏébÉŠådÁÎO> ˜ui³îÃ=Éáó!r*ðТ4ÏA½q¿ø~ ‰¿ÿŸ¯a®ÉæÍ(Ï~—e>dꎢªj'>ù#oÒ1¯:ŸÉ…ß0 IDAT}_ž#­õ0wÉ´Í9p®“’9+¨ÖÔ³ãp=i‹×¬âÄÇïó8Itö’›ã¢5ÐËCO>Š®ë8ö\ ț㢥£wÍýø(–H-[÷×£`Þýk‘Ïlã@}˜X¢×ìµ4|¹½GêèψÌ^ñRÝn޵õ‘éïÆ5»Â²r¶¸@ÉÒj„[$#ÅçV ÑPÅÓ§Oc³Ù†{Eùùù73Sh¬ÝM邇™S¬ãÿú¢Ñ1’ 'uI¦Š‰ô3LKC9´º†úCM¼þç×È+[ÈôÉï=Í4c#–ü©,Ÿ3…c'óç7öa›³ž¥‹dÃiºÝÓøÁÒ*ö½õ+bÁ ¼ÿùq*ÊòHö¶p1ЃÏz)b£”ŠÓÒÒ†9;¯õR—[‘$äÁºÈ²@´·‡§”xw#o¾þÁd6ëï÷sôÓ÷è+ÈeɪÅÐxeP@‡Ë—dE&Ѧ«·ž 't|ï‰'™šgæÔç¿ãLºEÚêŽãEGñŒûɉâds'…™n0ØÈó»9ºéMþpÌÀý3Ýœ?~Í… s×ü€Rkÿúû]FCUE†×öîC‰þ‹ÃÈ‚‹ÊÞâº%¬\>³»6 ±ïÕ—°fÿ5úp”{Ÿþ!=^á·2²HåÞgHøÐ«Ú'qîÝ—IÍX…¶ó"ÍíVºÌe<ºâòz@¦¼| 3g?A™-Ì¿½,óãžâ½ßþ…ÐìJ²M"ý}Ý8½åhE m¸4qŒÞ¦/¬fþ/Š,£()Z/†¨™g¤%¡×´˜•‹ŠøŸÿõ§T"·åð"íq^üé÷1Èþùï·QúÌXïíã͵‘(^»Ž)Û8‘.cy^uÍíL’ÃØKç3M_?𹿎?¾ò.h9Ó!c‘Ù[dº¶gélæØ‚ì;y”½›Ã<þüÃø£‡8ðî‡éÉ-g’!Éá/Ž мøÃu´û„c²Œ9ËFÛ…Ò +¸‘ÙÍŠÌ×=þ;ßùÎðïCö ¯²Ã^3нÕáåTc=.É@(šÀl¶ÑÐÖÂ…TmáèÐn߆”:#IH2˜=<õýð[´È©^Œoþß|œpð׿Œ¶‹çñä3Ùµ‡ ]$‡‚Þd%ݤ¡)‹¶Î>Jk,øs©™5£ àõX†ƒÈRf@h¤Ñâ¡HR2Æ…sgé50Ø‹ ØÇ9ëJ =4è%£ä2}Å#<½°!ÝE}C†öÆ œÑ%É)È'Ë LÖ¨ Ë £wüÎÆœÉÆà,"¯XÇ=U¹(²HªóKÒ:AÉHVÏdf”µspÛV*Ê (v§˜:k&™TÛ>:Z1Xúˆ&Ò€sæƒØ·þšÌÂõô~öž€ØªAo2£¤c?ÙÊ´Ås8½ý‰T %Ú˙ӧˆ¶&)(ó‘9áì™SD[”ÏóQR5™tùTŠÜf,r»’”´- ç1ذ)!N:MŸÖNÈddÜyÞÙËѬ$R¸‘vK9 föÕµÒÑ3ŸÍ dÙ ô÷'@Ôaʲ‚ £¸8{õ ¼3«Ñ:<ìß°…ÓgÏâq9)+ÔÑÑxžÓ‘~\®"útìV-¢Î„U«EƒIÊ “Q4cÕèZ9‰Å=™¼b=sÊý˜|nÒ- ˜Ð€ A5”Øú µ7"÷¶“qåQ\”‹l/avµ ­ÅÌÁ-{¸ØØD¨¥t®L¼?‰ÙiA–¥+êÏö¶‰Û}Ü]í˜kºÏÄ#Øw€ÞX”º…=ÿ‘Î Š¨E‘¼}iáa˜nllÄd2‘••E*ÞGwgW^>z ÄílüíïIÏzŒ§–×ÐÛÙAWoÑ`Áãq£I…LNâ=A¢iЈ2.o.rˆ`wDþ¼ݽ:Yv76}†>I‹Ûj%C¢/Ds AÐ’SP@–Q‡’IÒIa3d´V4ÉB=ýH:3¹>Ý­D“2z³ ·U½ ­ÔOB4£KGèõb°¸ð¹LÄÂ!B½IŒ6Ùv=`ˆŠb 7Ï3h˜Vè ¶A–)܉Εƒ! G¶ãs[éë Žg“¬^‡Þø®áw¹ðz¬lé—ÃçùÈ©mm$шÏë ’qg™ÐZÁS±Z;z0ؼ8´ :ºû°{rqÛ†z• Ñî mmM4ŸúMÕC,©Ì¦­¥Ó‡×fBB¾äDÔÅì|3aÅNÛ@*¡µ=„,hqdû0IQ:B,n?S†P°›þŒ†Ü¼úºÃ˜¼tÉ>’0$‰)˜0’$ƒ’ Ô×ç"ÔÞFÜþ<ŒJœ$LbšhFƒU‰ '0;=XÅÝ]ôgÀáËÅ”î£;šÀìpÑszñœyÔ8®ú&z6·[t$IâÝwߥ­­ EQxâ‰'ÈÏϧ¯¯xÆõ}åþ**_ƒ›Ï¶‘Ž#‹”T?ýŠ›YÏÕÃz]BNŹØÔŒ,èñåç“eY…þHZ³­’$œqg•‘àf*ž¤?"!k0XÝXŒ:n.æƒLO «7­ F›T:0yr0ˆ_/ƒ¢ ìÒÛ½×β €”ŠÑ¯ÍŒAs¥è(вD4!a5ë¯I)£;¦à±›ÇPE‘éo»HÌêÃ,GôVúâ2>·uÔþj/SåërMJÅ{ †"(‚€ÞlÇ*&-.Lš$¡`/µŸ2×Pdðe¯…^œ69.3í-ô%d¬N/“L¨«I0ØÜ˜ûÎóögçXV¦eëñ ?\[Cg{EgÁçÒñ§úg<ËÖ0ÛÛ.¦XVY€//‹A{KÞº½­gøì7Зƒk6e^ òå-Í­(zù~'­-A%E½L4­Åã÷c!FKs;íäz!âÝöòðÃséí‘åÉÃkײÿ½?3å±Ñ%#¤â ôVb:Šbr“ç2ÒÖÒJ2#“åÉÅmRh v"àrg±ùÜóÀrEÁæñcÂt†ãl.š8-^ÌN¡­0wŠŽpw+½ Af1Ag “Þ¤€]ìáå-yü¡åxÌ):Ca Y^ò=Zçöðe_>Õ¹VDl/f!IT6â0B°»Ÿ‹øoŸû¿°&/ެÏâ­ylI9£Âü´ã‘HåÏ5E¨£~?œÒððübv¾ÿEe9t˙ڻ‰-“¨vÇHédmŠsBL²kÙýÉ.V¬¨`Wm/óK`ó–­TÍÌç‹V³œvìîä™çænH§úhj¨ç|Ýi¦/˜h8Œ%•ECgsÝÖ^>ªñ…øÍ7û´+4Ö×rH»ŠG'9 Cë~ÒãÎB³¶±e3¡ÙKxéŸ~Ïôuëð†vÍ_†¥ã_°‚Õæ4Šù$;γpýñÆÏa//#ÓÝÆÙºŽŸÛËÃ/>¢(DZjùp÷EžZäàƒ?ïgæÚµœÙ·™'žš–‹õt÷F8Q·—g,祭M<ýÐ|b¡V"9å\Üú2Ý“fº7É«Ûj™—ßÈñôtæä\àýw6SýøœÞ°™E+汫Nƒ[jfÏþÓdI|~¦šÜ³iöÍeéÜ*2rоXEIqlËk´[§1£ÚAg;§ví¤pÑz~ûòNž}t&o;Ϊ•ElÙÓÉÚj…ý]ŠYQh¯;‚¦`.]MHdJhÜù.á…O3«Øu“ß‹ÊDäÚÃ1AGÉ”"Š ‹h1mÂèÌçâ±³Oµâ\³&ŽÞ“‹%ÙCå´"*ª}´8@¨³ƒ‚Ò”×x œ¨¥7!0iò$ MíXûÌH\<¸‰î¶r~ø³…dz8¸?¡. ïË`5Zñæäb·„É­¨¤b²È;ûˆ'%¸YRÒZzÈYøÆ¾‹ÔWቄ9íCnî¤â¡'ј[9îEc/£ºª [[ýye˜ôgùäó‹œÌœà¼À¤72/ÞMWëiòýki:½Ÿ=ÏìÖÒÐ' Ü`A ·ªšŠ©~Îì>É䪇÷Ð ±÷n‚±¡-q©yeÅ´ŸÚ?/mÔJÙä)LÊN!t”d‘ò)“1ôìáL§“§§M'yô3zûSȘë9}ò]39S Ùw2É}Kª©(D²SÂîŽSœë"ídßñ:Š'•`î r²ÁÊk 8òË(++åóMÇg݇!°›ZA¢tîS¤÷ÀÀÀk ”ª»¨†ÊŠ*Œ}õ\÷ª©|}®-Brš3'O3ÙãB¯U%än{›]Å«ùyeBc=¶f¬YtQ‘,§SgÎrV:ÇŨ™j³Ž°( "¢jÖþ„Ÿ­Ÿ‡˜ì¤þÀaÊ>HYýg‚ˆÛÝ-„ ´‚‚"Ü’—™hˆóR1M³Ù/¢EAA‹7ßË™“ÇZ;È›]ލբEDFD5hDåÓ§R˜7ŸI YÉöîjfÑ_™ølc?g=½¶Yãˆn0®V£ED4¢@8Ј¡f%OL¶ðák›Vƒ€LsýYJæM'p,ÂñÚ“ $W&m7i‡;— ïAŽ;Êù~3‹Í:À‘=™šÙf–Ï)Eçôr¾uÏÔr:KÆgPú‚\h cÍÅR]+;6nefq†ÞyOb×§5œàØQ WV†j-Ø.ð_spF“ ˆ»›k9uÚGc]y ßü£2!¹fŒéæÚí|42½(“݋˔fÛ;¯S°âûTæZ!ÙOK{»Ãz 6“ŽÞÎN¬nÝí­ô%lBN“2q@HÑÓÆîuŽËøœ@!“ŠÒ#ˆv·]¬“`o ³Ã 1à4 ´÷Jxf 7˜·½½òòrÂ-§ù²ËIJiE$¢!$­ÔGB0cÖH´5· ì6¡¶<Ù.ÄTYïDLõˆèÈójimi##HwžbÛy??}z:‰®vºci4Øü~„ž:«˜$âÍÒÑ añøˆ†˜ìvíQDDCv¶ƒhZÄc–ØøÁ^–®[Á±wÿ…ä¤Uä9ô¸s 1ɽÈz'=©ª;"XœÙôÕïçƒÞž[P†6ÜB$–Áé/ÀmÈ Û„òòý„­Ä5NlB”žþ8æ,+Göœ |Íýô×ñ/žåÑ¥U¸ý8ô2‡>€}ëæ•ÐßÖ0`˜–¢ ¡P7éTÑpÉ&¤¦UÆBQΞ=;ftÅkŠP*ÞGÃpôt‰“»>À8õqªót H޾Î_v<úô:²M:ºú°¸óðؤ#AÚºúpdçáÔFxãÍ]üðG«éj¢1ÚñåecThÂ3AEh¤ŸPíõû ,ÃÒ>ä'´“fm‰Žz<ö¼ñ³ØËËIwµSwþ"ÇÎîå¡kø ­þiš/ž'íåÄÙ½<=ÊO¨…HNÅ ù í=p–B[†íg«ñŸÙ0¦ŸÐñO_§Ý2•iU6ú;ۨݵ‹ÂEòZ=è'´¦Já@ŸõÕÝÔ6jydù¥ä‘J¦ŸhŸˆ”èæ•·>eæÂYüå×ïpßw qϦ/œÉÆ{¹÷ÉȲBÃá º˜5µ·¬0à^¯*ÑDfBŠ’‰R[—bÙSó1»ÈÔIÕ¸ÃÎõG;º(^ZF8OG_?g5ÕÕdµ5Ë/Ǥ?ÇæÏi´É[¶Œü©•¸”u>§rñOØþþ6¦,štàSÎ÷Jö4A¤ º†Š©9œÛsŠ)US‰ÞCÓùcîÔ0·¬éàâR9ù•”çS·ÿKªÊæ’>d ?¿Âœ© 'I™¨,ž‚9r€†‰Ç+«úŒþx }=íhí>ªg#êõ¼óaŒ)s'S:¹˜T—„Ý£ÈïÆ³p-©#_²isK«vvÝÿs°¸r).*äÓOj‰¹VRœü”÷6I<úãŸòå[¯!–>A–~P4§Ç‰Í¡ÅçÒQ\TVVp$ùÚt+N*++8ñÙ>êz2(@~å"úRGùtÓVf=ó}–øtãø$¨Ü LHJtwήàQ¿žóõ"âàÊzAÐSuï}üúÿûÏÈ®Rþö'>6ˆÛEqh?Qc`áê%üæ¿AÊ*à±Uì›Ï[èíOî'€’¦áTSŸtqAîçí_ý‚×R æ<ö3¬Âab¢H~ù,ž\SÇÿõüòg>Àl‡¡òÊçrfï¿ðoûS,þî_óÂ_-ãõ^æßhãÅŸ%sæcþóofkޱ³ö"9SWÒx¦‰’Ç~€IÛDèâ>þËùœ™¼H¥ÕˆkV5{wÊä£ü®½‚ÇW Øt„Ÿ-]ÎlìýäWo˜‘ä?þý?à¹çIž›;ƒ–¾—ùÿT®xŽ' ôüQ€ö³»yÿãýX æà1ªëä¿s«ü„®~žÁ¨BŠrM?!AAkbÉÚõ,¹ôé ˆ¨b¢rcLHúfpú ê×Suø¤r+QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\QEHEEe\™p"ômM쨢r7óUínB‰$Iœ={VÍ›¥¢r‡QY–ÇÜ6¡D(??¼« ¢¢rJ„†Rä‘]DAQ¯Ø¦¢¢rû˜p"ÔÛÛË‘#GH§ÓWlóz½TVVb0Æ¡f**“ 'B‘H„Y³fá÷ûGÙ†dYæå—_&77—ìììKÈ1:ƒQœ¾l”d”HZ‹'Ëxë*$ÅéOX,7^f²?LZcÁjÔøT!ÒÙNw\K¶Ï…Åp•¯ZÉ õátÛIÅS7U•a‰(Šh4DQ¼Â@­Ó醇cC(ñÓ¼÷êAžø«Ÿ’n<Ζ;OÏ+¤µ-ˆh´“—ã ØÚBRÂæÎ!Ûi é$Š h¸í&D£ «Q$ÒBg1ì"¬‚Ÿòöµë ס¡­­YÔáÏó ‰¥S¬Ìr”®¸HAA:Í@½åtŒæ–vZê"-e¶_K°»ŒÆL¶Sà/¿}™IKÇhöö¢³8Éq™éèÍàqXûC(dx÷Ý}Ü¿~Ÿ¼±—µ¯¡ØïB5Ý«Ü)&œ Ù~ÆB§Ó¹MQ”ÁŸr¦ŸÎúíüáÕý¸'Ïã{ë¦òÞ«/ÓNP8c ?zr)zA¢vû»¼¾«›¯³²IfÏgi©Äçïo ú>|®IÓ)—Žqä`­;‡…E1Þܸzî9޽þ2!AFŸ]F¹!Èó ^ü»ÿ•¤8] ù㟶"kEVøçsôómì8ÚHŸ>›ÇœÉ±3gé+èÅohgãG[½U<ÿðL~¹­›ç¾‡èáÑM^Š¢¤éënæèÁhÝ~žÿÎ2ôª ©Ü!T^¯¿¢'âp¯@AFP$2©“ªfQ3½Šæc›‰ès¨©6în 7µ2²wé îVNE‰ƒ÷>ù˱„œ‹™n:~:U&‰Œ|ï±{øÝ?þù¥•¤ç‚hm~~úã§xç7ob{ôoøqÛç4º(ñ˜I„š8±yOüü?‘9õ.®F^ÛÖÄäŠIˆqâúlæÝ³”'Ÿ¾‡xã–L¡µá$-¡ŠK¢*üD0àðMaæ½ðýÿ¿½û nã¼ó8þÝ•¨De§Dš¢$[¢Š-+²š%«ØN±cçœ\r—\n®ÌÜܽ¼›¹™ËÌÍäÒ&—Øq\âä”8–åÉVµe5S²¨J‰jì‚$¢p½$I¤,Ë–HGx>o8‹-Ø]?ì³»Ï],HWyB#Ͱ±®~ †Q%™Ê¨ôîáè‘c 6Ÿ¡â¶…8Ýêr½ìßþsç•S\idöÔR$MÂnAÊRrÇV÷÷sòÐn:K£ÖÔÈ3Ç*ù»oÝÇÒM]¦“ýÛߣdu9J6D[8AEE Îéu ôÈ6»Ï4b4*XLfœJÔÃë­·à­,!ÜÞBº³¥æ*½n*ªj™^êÂprR–$•¶Æ£”N»9ÖŠl0bê9MÛ]纨©II§ d{iëìfrq¡hŽ ãF:}úô3š¦}³§§Gž2eøWò¾<FÑétŒwäÈjjj°Z­—íƒÁd­ía$c%BÔDÑ$†7ÁB+áŽ6úÓYŒÅA2±P;±DY1ðØØ¿åeÔ)+¹»Ú‡œè¢=Ò‡¡ÀM‘×J,ÔÉ€fÅëÐÓÑ!‹„ÓDK$pù\ÄÂ1,^útœ4Flf ‘Í$é u““ÀéñaÈôÒÕ'­é HÄúpû=¨½„¢q$Y£Ð ë$žNÂ]è%Àåqµ2€•â€8'$ŒŸ¼ !€t:M.—uŸÑhD¯×ßð} fèõ,.BekOò\^5ÇFšZf³ù²aøó͉7#€õ ¥¥–¾\A¸äU¸™#ÂõÉ«¡#_¯BhäiŸTØL„ot±À?»ÎÊ‘H\«ú§™fHº?Jk(†ÎX€;àÇ®;â]aŒn†K·#—%‘Îb5>õÚ‹ð„‰ñIß½k†šî§­=B »5dž?îeÕºXTºzÄ@q‘Xg'rä2¼ñÎAV®[ŽY'áõ{ȦúIdõW%Ð4\›_z ßË(4gÁáÃb ½-Œl²ti„")4DoóYÓ ˆÇbÈhÈz#Z˜ßl9Ïêô`¸J€}Ú!ÂÍó9BHãÂáÍ|Ôédr™³Q!ÑŸ$‡Fª»“¶Ö(çÏž"8g) ¯¾Ì¼G¾ŠÇ¥?‘$§Æycã|õ»O?ß@}¿õý—q-þ2A©“m©ôXhøè#ª§ÍdZQ†om` øNªFÒÍïòüú5IDATâºYóõ‡i>z×Ãÿül3+^Š#vÅSJ<™æzúÅ‹„‰ñ9BH¢¨ænÊ“G8ø}¢µs)°»ñ»¼ñÃ7Èݱ€•Ξ8»ŸÉ“+±«aìv7~Ÿ–%›Í1˜ ›s¢3š(*-¥TÖñÎÁ³ÌüòcÌÈôóÞïŸç‡‡“|Iî§nñm”9t¤š4lÞJ*K‚´ÉzgEÅ¥ÈghQelN/%>Û§®V(BH&ÆçjŽu6îåÍÍPQX}—Gâ-žùž¹eFÞ?¼‡TÊOE–ä¡‚éJöD¿Ú``F Å/~ú3¤L‚IK×¢$c¼øÓ ¦Yöø·Ù½ñ×l=|k –ÕO§z ÅÓÿýï¸'ßÍ_-dHÃ…Ø)yŠ×~} Éào¿5;~Î^PøÆCu”^û©©"„ab|Òwïš5¦S}Ú½ ë –“Œv’À‚×íÜjšÖî ^W&å³H$Ád2Q\\ ‚Hn²‘,‰F£¤Óil6ÛDvÛpx}מìjsë”ú®Ýäú$²,“ÍfE™WA'#ßµl6{Õ{…òêfE›ÍF(¢¡¡GB‚0^E¹Ø¹RÞ„ÐÈsÅÊÊÊ&zUA¸DބЕÆj’‰##AyB#¡£ª*ápUUGMãp8°ÛíȲ,Î Â8É›‡Éd2¸\®Q…–vîÜÉ‚ (,,œÀ5„ü’w!”Ëåðx<ƒÁËB(—Ë¡ª*¹\î²éµäI6½zŒ{]Ú~„½Ý6VÔUÞ°õÉÆŽr謞™³¦ð)º¿©õøûĬS¹½ü’ðÔ2¼¿qMj K–ÝIEaÁ˜óæÒÝlzûóœM˱6êfÕ|æõ„Ï"ïBèjå<$IB¯×>/”K飿42©8]}:S}´wD‘M6Š|"í$2Yl.?>—€do˜P4zn‡ ÉhÇf’èDQ¬"¡.d£¥ýC¶mÓá)òtèèEÑÐã/ГTU V;–\‚î”DqI1hd3IÚÚB´´´ UT‘î‹ÐëgPgÆçШ?aÙ7¢Ð ráÜ9tf·…Î>ÓJ.Ñ…†J(%³}Ûn¼E>ʃ.D ã%/Cèj'  Øã4´¡Ž²äRÎíÛÅ¡ÞfL«¦õøÇl=ÒK©ÇLÓ©|åÛßÀmPÙ½é2Oeù´t­|ÐjbUy3¯ìègf­žÓ̘݅:§6ÔÔ²)¶lx50 e ̧jèÝ¿Y.eço_¡tÁr‚±ƒt©+™;Ù‹oçØößÓæZD¦¹›«ƒŸlÜ¿ªÃ@;%uw£I2:Y"3ãüÙ&šNgþ’%üfoœ§VϦ¿þu”É‹‡·Q<&[˜yB²,yÓÔÈ%üQãt˜u*©ŒÊ`²KA ŵ•t9ÉŽwwp{EkáíLªòR9i V½ ’ÂÌ%Ëq´tÐðáVî^±ý™ ülk/Ó×>Δ3™ÃGØñÞ.Ö/±awñZh 0g^nc5MìjôS;­–“»3eÖt<ç"œ®­ôÓÝÜɤ;kPÕãt$ã´ ˜¨ –3Å?§ÇÎ)››¿…s[71蘉Cwþ•l&ƒšUI&ÒÃÿ2ŠÁ2ÜñØ)Ž‚„q•—!$IÒ¨_}MÓÆ !ÉTÅ⥼õ»çMN|p&½-q¢©«§œ)sjh}k3ï5ƒ»è6J&M-Ë…S'i¸ÐŠ»ÍÁ´MÞEÌžVN_ëN4µbõ”a-ª¢Ò¾Í»Nqï}sع{È:j,Åð¡—õxƒ> ôF«;CEÜLžrf¬z”-;ßAM¦˜vOß\¡¡q/;Ï8¸oż:I‡»¨Œ#ÇN£*vœþb4P¿-L.%3ßhÄïsa4Û©°ÇøÓÖzV-ŸÃgì#×mûŽ}1$“I:;;Éår—m§$I˜Íf:î†îƒDô›ÞÚÍ’µ´Ä‘† \"¯Ž„$IÂb±P]]}qxÄHè\N7‚µ°œÇŸ,¿¡Ë„[E^…Јl6;Ñ« °¼ ¡[¹™)©ò*„Aøâ!$„!$„!$„!$„!$„!$„ʻé–"î„ñ1R¹b¤_æ>ògâ¥R)êëë!$ã`¤k”Õjeîܹ †QÓäUE£QÊËË/öa|\¸px<>féä¼ !MÓ0™LcWPá¦Ð4 ‹ÅB:s|^…\YYQc¨U&1ôÒÈßë7Ò¼Óiø}Æzíz–ué¼HÒÅ £žå=<š†6<Ýè÷ÙÖKg^¦¦]œdˆn¤‘:^c¹®Òûù¨¡•™³¦ŒYôJÓ4´ÁõGZ™1£œ7Ÿþ9mRFŽ`uËæU±wïf,œ…[÷™¶ås¹²´k¦·M;ONêxô‘Åeiôõª cø›?2(9wˆÓój‚HšH$Úy·UbÍÜj$i¬gqÉ{^¾ÐD¨‰]-÷Ïž„,IÃc®xã‹CYξñ"Í•÷²xzÙØç¼4Ö“ûQŠëðÙ H#áƒ„Ä þô¥ Öà³êFÕß ªÏÖB~ú¤²Ê× ¡®sx}k:ƒ™Ûg”±áÅwèè}˜yž^öo!’6pßÊåìyåàñ`TÌìܺ‡öU+èMëxø;ß"`TÙñǧi8o#Ž‘ˆðìK¯SXQÁ’¥KpÇ~FõvY«}„ÎÖSà.äÈ[;y>zŒÁà|ÖÞ3‰S;^çDg?Õó`aaϿ֎lÈbô– †[èËÚxìñ5|¼ý-šBýÔ.XÅ¢Û‹8wì 5KÙø›g %üµ Y\œ Ô“eû‹?á\ÖJ*1@QI€öÖ0‹Ö=FQôÛ.JYõðZšÞx޲æTL¦Ôp›±‚ÿô—ü.U=÷ß7_ÚDaeÞªZ:öm&–VXòÐ:[ÏrÝÅÙƒ[ywßILž*Y³ˆÎ†]l9p–Àä:ºö½DÔÑÀôi3è=_OBv²rí:ü†µ+ n{–×»m#¥uóÉÝÅì•k8¿sÞ»ÖQá1‰¢lÂuû\!”Jô ™•ð™\;—å ï sß;¤³ÉHû›¦Ðׯ±æÉõ¸rÚÚU–/šÁÆã ]šÓñy %ú‰õÄÌeˆ«V¾º|ÉPMæqr鎈w^ aÇ~n[ÿ î¾òørþëß^¤Á:›ýE|÷‰Z~ùË?1kE–ÞA+ß~ü~ñÜn¾÷Í•œÞö‡öÈæú L-wsìãSÜ1ÉÌÑv;+ï”8¢j „y{Ïêþu h½±~>ñ Âxå´u÷Øv¦#ý¤THFN±§±¥giö½Ü7ÏÌ›/40k™™÷ ¥<°þABû7ÒÐÔLŸjã‰ûæ>ü6½S—r¿§—ßí=Μ®º{B¼¼éM,ÕSh9A¸EaËÖ“<ü÷ߣÐú÷c¹ókÜfëåÙãõTN-⤉6Ç?­†ì™SÌZôe,mïñôÿnäɯñáÞ}\h1ð×÷E ŸÉç !‡o23§t¾p’=M úÁš[[ùpË!Ló–2Ýœ¢SÍ¡WLô2rNAQ{híèf0àìéSĤ~ö4¦X¾¾SõÍ€„b´¢£àüÍôç¡Ñ|æ»ÕE,rš0˜ 0(zmÙ‚¾·‘£Ç$$WƒÜ†ÁX€Á `4Û0 &#¦7%EeÌ_‡Áì‚pÖšZÒ‘³d½ÕÌ0 pòTÙáV‘N1 Í«˜°˜0(ÙÁÛÞ=€ùK÷1Ã’¤#›Ã¤(Øœ2±vº kq™dzÚNsðX%‰³!‚³jPLVƒ›»„ÎNs,ÇãH²‰ªÉ¥8fÌÁoSðùmG8qü%¾ŠÉ@˹&¬¥>Ý3—Ɔ}ì¯ÄÔ´ƒš•ÿBèx?'OÇ a½m:Õ·WñêüùOþ3VýÈù¢qýØ„[Àç ¡î–£¼úê>4£“¯Ï¯¤ùÜ^¶ì<ÎÊ{«ÙrèQ½•Ú*+É€ ²ÎF…#Îæmqêùã ¿B1Z¹÷‘§(qÙ†Šªëü>òü3ßÈiï¢pÞ2ŒŠJÐïF'(­(¦Ð_Î]eÇØðÊVÖÿÍ?b4¨vôz#Á€ΈÕUŒRVÍì¶C<ÿìsÔ-[Ë]îfJËðølÄÞþ?B²™©SÊ1™­ø9\"Œz ÅT€×aD1é𹦭¨eÓ¾}„õVnŸbÁ("iÑu(õ¡—Td¹ŸÃŸ#á™ÅÂ?güQdÙDay¶w~Ä›6¾ÿ+¸°]BÖ›¹gù<~ü‹‘Óù§ï?Åü%³øÑ3ÏS<÷šVÅËÏÿ–Æê/¡¶î¡[öóHuŽúÓ Óf¢…S¼Î?G¿¾‹5ME¡“ªRïÈÿM¸¥åU¡ûp8ŒÙl¦¸8Hw¨ ÙíÅ©H/ m÷å'~‡^—.ž@k:-›!ïB¶1.?¹=2ÕÈ.F†‡O >Í<4]&ÑàlAIvðêþnÖÝ7Ãð¯É%±†×E£·³‘_¿°‹»Ö¯e~µï’E~²È•Ò=Dº³—¸9¶õe¬w¬¦Òk4N¿ÿ{b¾¶ún ²¸j&\?MÓˆF£¤R)ìvûè«»ùB‘H³Ù<êÐ_X¯^ ¹Ú:õy}–í»|9£ãñ/bŸ _8š¦‹ÅH¥RØl¶üî¶a0èëëÃl6OôªB^éîîÆétŽ9NÏÅ'ߢ‡?—p8X,oÙ£=Aø¢‘$ —Ë5f¿1 ¡4‡[ûêëHSÂh4^6,ÂÍu±çÀU~øÿmv“f$œ‘JIEND®B`‚iep-3.7/iep/resources/images/iep_tools2.png0000664000175000017500000006320012271043444021177 0ustar almaralmar00000000000000‰PNG  IHDREÈ-óï pHYs  šœ IDATxœì½wxו°ÿΠ÷N°wŠ)ªJV±¬ânÙqì¸&ö&ëMÛdk’Ý|Éî·›ä—d“M²I~É&»éսŖ‹ÜT¬jõBR"%öHtÌ|€Á"Q²(Krð>˜ÛfæÎ™{ï9÷¡©©I&K–,YþÌA~¦¼Ü É’%K–+‰¬Pü3ÅëõÇ‘eAP*•ØíŽ N“%Ë•F,cpЋ,''ÁSõÝ©ÒØlvÔjuR(=gxñå­Dв|Ãõ”9M3Ð4‰“{_g×±NPª©]¹üxªœìFÕ´¹åxCǺ©«¯@)Ì@s²¤ñz=t´·át¹ðz½D#€tÇñz=´9Þ`Àb±244Hpdd\šqe¶â/ìÆ¨7аáfªrMŒ¿qoÍ{vQxí&¬qR²,Ñvô ¶Yó0«'Ï’å|س{'%¥¥ƒAÂá0‚ Lêß{vïÄ•ãF§Ó …8ÙÜÄŠkV%…bûQäœjÖÍ«ÀfÑptûfµ âªXH3ˆGYD¾ØÏ©–e/¯ï뢠l._#-!f7¬$qú ^ܳ–²fQ¢áàþ&FÊ×pk}£šÍ¿~Ž!k'‹J$šºâ”ãYWkâå},.‰³oï1è˜SWÀ3O¾No`#Æ@5×n¤kûfôe³Ø±÷0ÅE•8^Ž·ö´¬X·‘‡þ2݆«‹x,ŽÓ•Ãðð0ÃÃØLfÔj ñX|\½ÞÀÎÛ©›3—£GѰüšqiÆ• ãž·Še¦^?t˜}¯´a+, ßàè©L¹Õ¬¬63Ô݉-àeß«oÑHP¿rfß vnÇ–WAÛÛÏ¡¯÷sÛ†UÕ2ý§xæ­ƒˆÑ9n}½–¬¿MÏ!vžèÀR²€e¥Jþ´í…LTáæú5³ÙõÖëxÂ*Öl\OèÔ.öœòB$ÄÊëoàÄîdÝsW^G±ÒÃÓo¦¸¤†Kë²/à«Y–‰Åb &³ÊK0Ì]g^¦¸þê-ž:0Œ”PÓ7àe_G3}u·óà<r¤ŸÒÊy¬ZZöÇ“$üž>„ÜBD×,ê]üð‡¯`)+à ÐÔ3˜ŠçŒ×ãA¥Va³Úðz1Œ€<.Åb¥nÎ\ÞÞ±å+Vb±X'¤ÉLçøÖ— ¸YºbÛº<ÜÖ0—ç÷7ÜwŸý=]Î…Œxûé<õÏ QìÐp¼ñ±Ó­\ÿ‡°*%¶u¢bÍ5Õ"  !8ªY_ç•6ë\ìjë¡2Fen}ƒj× Dg×U)ÙõôcôúŠˆ$ ì=Íþæ‡zÙxïmì~ôW´ŸÜ—®ûDK¹¥1D×,V.­CÌ Ä÷²,³ÿ>,\„Ï7„×;Eÿ`Ñ¢¥<ñØX»nïìÛŒ ÅP Á`§¬8—¦0X„!Nl!¤¶b5™9ÜÝ"všˆ­½•N…z¤—–3m˜õ* ܹÔÎ]„F©G£ä8}0¹(+ ±§c¥]MOVID¯Q¡ÒjÁ×™¶aF"2.»Ž“Giµã´kQ%üô0DºÚÎpÚ3ÌGƒÉm¯¯ýUŒ@jf+Ë26« “É㦻>ß GbùŠ•=r“É„Õj›ºHQIÝš¹}I%R¸ÝJ•»1AË©S Ät”ªÈ2èÍ9¸óÌŸS‚Òbå”·‘Ö–ÓäÚ¬¨5½Ý½äT “íÐu(UQ  *•€”ÓØÜKmÃ<ú:·#ɽ…Ô*êk{)5º}(±éãœn=M—/Hž9w¾’ùsJPÙœ(‚mè Z„¬@|ß!²t–þ-þ½»±Û“rcßÞÝé‘¢ÐÔÔ$Ç#º{µ«°éˆÇã˜L¦+ZðŸ‹Ë}/.WË}ÈÜz'‰DbR?”eI’$é¬åøý~ÚÛÛñù|ÔÖÖbµZ'åŸêš\2¡ðx’{gU*‡ƒÁð¾ìlBæÍ¼¡8S×mº#³Cž«ãLWF"‘HwØóÉ¥ô‹T;®òn¸Îí\mhii ¼¼A¦ìƒ©g(S(NìC§NÂl6ã÷û‰D"“èÙ„ê%Š¡Pˆh4Juu5z½žp8L{{; …"í•âÏ™ÔMžx£#Á!:;û@m  0µBL;N¥ÃÁ:ƒ)nt˜ˆçÒ^Oédöbor"‘`hhˆp8œžëkµZ¬V댮ͽ×Ì„PL$?~œ+VŒ×–ºÖõ…¯ÆiX_o@”ãdvßÌ¥°TþKb§ Ñë§Ž{‘R‹gZ¢g’zØÏ6 ™îø¹êž‰ã—ЉÓçóáBl§ëxRç…¶3…$Ituu]p¾+‰«aTx>\MY–©©©Az{{‘‘‘I2@–å´ÀLQ`ƒûWjäñøÙ•‹@:þÐD¦ŠMMMÌš5ë¬ÇY°`Á”Ç|>àºë®›ò¸ßïÀf›:lætÇÏU÷Ågèƒ,Ëtuu]ñ]jÝåBÛ©P(¨¬¬L_Ã,YΗ̥–‘‘‘äz»B1IÇ!Š"½½½i³ÁwSÏðð0*•jÒ±iW]Ìh+‘H\µ#Åéê¾|>ßU#0Ìf3f³ùr7#K–qÄb1Þµ"H [¥296L­)NŠ©aéh¢wßê,W=©©Å»1ÍÊ’åj㬊–x<ŽÍf»,kmY®<‚Á ƒƒƒSN3²dy?2嚢^¯Sugù³%5R¼Ì-É’å½cJ¡˜2Ÿ9¡˜ÖÞÈ2áXˆS¾³œvT©¼²ŒŒL× ‡ž¨LË…AqîreY&!Åñ„b8 :çÙŽ.ï²ÞJV9fþ#KôCXtñZ<Ãä9ØUÊsÚ²!ã ý¤DŒãžA ,fºüJíNtâ{»›árðnÎ)F¯ªKY޿Ȳ|V‡Ç‚ `±XÆýv‘&9ÉJ‰Í´{ÚùÒŽÓ<þàíDƒ ÆdŒ:Nyˆ{–‚’z¾¹Ö‰A!0 ÐìA¯…ÁF‘Zâ¤gˆ N“…®c|ag _Úx×ä:Q €,q²€˜‚Ê€…0=Á(5TÙŒüìågI,¸æhè G1éŒØ%÷=ÿ­XÇ<l;ÆkÖP¤VPi·Ðâ$ÏbÅ¢/'Ïê @§ˆ²Dû ‡ž€—O¼¼•¯m¼žçáS׬"A¤ÐîÀ¦ºzÒgY–)--=ïÙ†,ËøCø}C@r‹©Ë•‡(ŠïËM–÷Y–‰D"tvvN)}>ߤßfÄuØáæ|äÍ3¬ÉSâKÀáæÝüÓö“TšdöõÇùâšzÚÂq–™-èR"Ì×ÿô$U.¤ž&¬‹nfÝà~þ§O¢Ö‡ýp‰…ÖA/GYâN E)â‹Ï<Π£”ÛJrybß.¢–<Œn,ÞˆV–‘¤[Ž7³{`€7ú‚|ýšÙ´ r¨·[ˆ·[ϰhn?ÿ±{/Ÿ_»œ¯½±‡Ï¯œÃ¿½º‹b»~ÙÎ>x9JH0à9ÃýO¼Ìü’"zƒ1b±0{º:9Õ{š¿{~ 7.hàÓK¬Y¡8ÌÙÆ¹ìäRÇ_~å‘ñáH”óÈË+J E½Þ€ÃîJºc¼éFVpf9Ú?f@(Êôõ¡w•sg•ÀÖžÓôx» «Ì\7«ˆ5å æ¸óÉ1¸±ª ›R ‹rÄbýм¡34Ë õ á´W°4ßÊÜ„Àb» g“—µ¥Eè3ga‚š-c…ØÍC‹få±²,‹EG# ùùcSõ%•DÛúQêœäèõ¬*-ÃnÀhvr‡KÁ×¶½‰«¤[ÜÀ¤åžòj”¢*9*øCCŒ`äÞºjÞjíóo(ƒÕèà³ËS¢É ÄéˆÅbœ=·-½mìÐh¹)¿œB‡‹¸ÙŠ-?‡Æ`˜jW£…;Š]üîÀ^>V“C}~NŽ‹ñ–|¢¾Œ¹Æ"ªð±»½òÜrTBj­TEaN%w–œá§›(t8±hµÔº\Xµ:æä¸Ð:‚Í>|ç&‹ñÃþ@ @"‘àãÿø8¡("µ5õ(•  ™D"œ  P¨ˆF¢é´²œ ¿»¿§ç^x oTÅú[od÷c¿ÇïÌÃ,ÅY¸îVê ¬©"²dA’$z{{‘e“ÉtVäIvбXŒÂ Z&87È,T@@&9ÝI•x¨y/ß9Òj+Ÿ_s Õõ¸<" ‘\¯l $Z©¡ÚiG=êÁY–åtžñî&×Ù®Q_ÎÉÏže9AÓÀÃq Q¡ÂnqP¬ÉT¦$G‰©²Ä÷ñˆ$µi¾££ã‚Lr&ö¡TyóÍ7ùîw¿Kaa!ßøÆ7Ðëõi/J?ûÅ÷©žUŠ$MÞk- ›NóQâÃüü»¿ ¬*ÆkGòM2ÎÅ×ÒýêŠü$×Êüv”O~`¢p>®3²¼_I­)vtt$ýlF"h4AÀçó¥-çtq!¤„ÁôâôÄY†úªEüoå¢tLò–"NáîDˆç«_÷ÙK=¼òiÅQ/ÂÔY³LCêÚ.]º”O}êS †Iv°ñXµFËDO>)b±ñÂR,î Š#–×`ɱñ»'8¶ÿ09ú6ìÎ9ÙÛ”e)o]ÓÅá™Ñ-SÕ1Yn µ¤ÿ«qy§Ê/*TÔåæÏd3ω (¨ÉÉ>a– F§Ó±víÚô÷Ì—Z4 %¢ ‚ K’,‘HĉdLŸ…ž[îû § w^;#0ê4˜mnŠg»ÈQºYPR”ŠYÒH’„×ëÅëõ`·Û±ÛíS¦½h¡˜)Èd¤œ8e³@§âl/þ)‰¡çt…@¡†¢2»šZ ´*Y^¦¢c";ƒ}?N¯R£Å³­ãX­vöîyµZ‰ ˆÀèÈ]–ˆFcج/FAĕ砠¤bÔVâ·ïCŸ“ƒA •½£YdY¦³³µZËå"‡Ã †Iégd¤(ÅáÌI üå_ÁþšAð‡@m€š*ðv@ÇXÝP`Æ“€f×$ÞP üôAxÜ‹LÐ…}~òcøÌ!ÜÈ`q· b"Xs ¢ Ûù¯ÎöÒ;ï¼ÎÎŽ³j’ ÓÎD§.EAΨ ú/`)‡ßü ªRq¡d˜s üçÍpÝMpðìÙ=-ð7½ 6Üý°ÃòÀ÷ÿÔÙgàªF¯7PUU=mº©bædÍo²œ‹x<ŽN§›r÷Y*vT&/eØõ´æÂ‹¿u¾#@,j-UBÛ>xjt Cí|¨+‡Á.p”¼y ž¢Z˜5®7޶öïþð¼êçB] dí.®n2;ëÙ^êX àcóKO ¨=óÆ)ÞÞ !y®vf¹²e9½åtbº$ž· · €ßýV-K®íy{à`3,~„Ó‘aÙjh:Ï>ó†k /@ÓƒPb+ïÈŸà“oP Õð«äº;j”—I WÂÖçàð¸o8Ï/.|–«€h4š~»OÄç$ò ÆØ¹óuš›Ž„ÖoÂn?Kൠ3®‹A–e‘ ƒ§yr;“½Îeæ8ß—å Ø)&×[OÂ`JË · JJ¡ã Ç@«sÄ<à €#ì 8ÕJ=TÏ­r‚¢EEå`×@ã)(.¶3I#Éßd8r¡8‡Qêw{¹²LÅLÙ)^h'Nœà¿þ뿸û©©!'''ý¦okkáÑÇþ…RAiI9.)mžB¡"MP^6‡¢¢²©ëuPâíjÃK~wää0ì ’ã¶ãïïEkµãíî ,«É˱Ñ×Óƒ¤6R\àF”btw´–Uè£=úiЬêKy™²¼K¦³qžãí‹-!K–ñ(•J´Z-þð‡Ó#Å’”4èW(ˆâ˜y €(*‡‡“i¦A¡ÑQXRJ) žÝ{Š +fóÔÓOR²ð&¼EQÙMT”º9µû)<à6 ô{z{)*[CEi.ƒ-Ï™Cí,‘=;»ñôŒ°|å,æÍ®Á®ŸQà,3ÄùŒÜgìÎen÷ËÜú–R0s[ݹ—ÎØþd¦§!g­c´òènšÌZ'ž[–KCyy9ßúÖ·&i ô(P£ÑÛ¼9zW¤À¸Àç“HÅýްù±_¡ŽÇXyý]HÝβ9eØãžxüi~vÐͪøO"EtÌs”PUþažx2ylýÒYäXõ(5yî<æ—-ã¥7_Eë,æƒeU玢—Ý~xÅ2ÆÛc°»¯…/ïláë7¯Ã¡sÒ*'Âü×믰/ªç߯[K™N‘ ’>ZÆØÀ1†üýw9*1½[ãü앪WðÅA à _ÜÑÈWnÚt+&gîåÎ.¨Ï$jµµ:9õœ¨-‘þ z-J•¥BE"‘  pút ³ªŽfHÐÛÕÉHd,”¥ ˆJ%öòzVÜô!r JcìúÓãÌÙx'ùf5 ¡„ùdºÞêºå£Ÿ’8óXéèÆ¬æÌ¡rñFdYb¨¯‹ÖàxǦ‚  ·å’kˆú¸\œÏöàq2ëêä ¯l#¦RòN_Œ_/ÿñö.ÚÃ2K>÷ÆøæþãÔ•ÏA! €ÄŽc;ùαÜBGÝ4úùæÞc%¨(¬Â1ØÄ×µ³Ïà×-Ǧå8¯‰Ì IDATÚÍ/Nvc0åò‹+imÜà ñ| C˜Ê—P:ÜʯN%ÿóòz6ïÛÎk!®·ŒXÓÞˆ˜ùÖê¾¶}7×X•|y×1¶ôzy¨ÄÄcÍDÿ¼vž^v¼³ýûÂH¶r>UiâX¿‡~_/ÿ¹sØ89V¸Qdm‚fŒé:l^^>‘ˆÌ[o½ÍD×¢¨ 7·¼¼‚s×!ªXyç}¨£>é5 ·Ü‹œ~¹‰œÝiøÙ ÐG?È2²õ8~¥sI×Afω €¯„ý½íì<º_žô°À¡¥É3ÈÊâ ­6>Ó°‚|H"æç[obÍŠ |‰æ@€ìy“í-U%[šNð7óJ)j‹ðÙ†XFÄG<|yëÛ(LnƒÍ쯭áæú%|ï׿çe}%Ï-–y`sêx°HüñD??þàmë•|ûí~ã£aŽöðàÜU5vñ™eKñ·î¦'¤µ»…G«ª‚üjþ¶LËýO¿Ì>ÇbdYbWƹ=qð(·—æ`&¼B–™C§ÓóÐCŸ7òËü?î³ À]P|ÎòÆÒÎätVÀž[ÈÔ;k³\n.ñH@ Çšƒt´›] â‚@®#bcŒU¥„ÂQªLF4 V% ‰jj-:^k:Al0„]P0/×ÎÁ!+ŠøÃqJ­Äx€7ÏôPUW†Z•ZGÍNÌžO© U Û›Ñ8qIÞñ%¨µÙ‰Ÿçpñªâ89ÌâÒY”Y5Ä<½üêÐâ­½ãÖš;°9‹‘|^²Œhl?Å£#Q…—V(Šä:rÓçW¸ÐŠYø^r6ãm˜ÜÙ/(ÆÐty¦±o¼4Â5ËLs>}â"í“nÀR1Zb¢d‘*‡…ÎAÞ¨„Z¥¡Âb¤mÈG¡ÝY)2šöò“¦n·wóÀ wòPfï!IÆ 5PnÖÓê .ê˜í´Ò3‡4û†jÊ̆C„µVŒñaJ#9bŒ“þaD…†*»…áí#\1™¡ …™Y;]Þ²’|­‚Ž‘jAÆl±£úðÉñh µÎL‰AA‹/H¹ÍB×PòÜœ&+¥&ÂûtMñrÙ)ž‹ŽŽÓlyý™Qãí(¢ ÄáÈɨG`ã¨ñöù ÅXÈO ¡Ânœ¬ØÉHˆŒ”LW‘Æâ´“ Õø|hV)wùÈ´SÔëõ£ëÏqB¡~¿F3ÓvŠÉ…g…BE;oÜ‘ §{œMbmÎøR"ʉþÊËçpG ZÁœÜñ;f»sI$âœèíN;™­qÚY 3§…E›Ê£Ã=ú¡Áœ.Ã`qàNëÒP§;Pá3–ÌÉ<¤ËaâÊTK7å¹e™Yzzzèïï’æ9•••i¡,É2~¿p8ˆÁ`bÅòU(JRk}ï#Áaìv×8åÜY‘ezOíg×p.w,›…p®´RÞ“o³ÓŸ‹Ðt‚† œR°ª¶hê|ÙQãË%¶S¼ÐÛ.#Ë f¯àÕšãʘXVÊÃõÄúRNf³¼?ijjâ'?ù ’$a2™øîw¿;6R•eÜ9yØívÔ*^o)…‹R©&‘ÆÙ)=gxâɈhsذj¯m~• hâ–ÜFÏ®ØÞ<ˆ2À±ìf¿ù,Ûv`+]È KóÙüÜæd¨ƒÛnchÿ˼Ó 1<€uñ he‰Î£[ùý]$îº ß‘ítúâ,Úp;ÚæçÙ;`bÙú Ì-t\†+˜åb˜q;ÅLÎÉ-éHtú²Îædölåf…åÕÏ¢E‹°Ù’Û¢þþïÿ~ÜhI’±X,¨ÕI+†L×O …‚p8‚œŠ2§ö¿Bá²ÛX]çæÈk?§lå”FóÆîÝô4+ùÐ#;ô'võð»·RZ7‹®¦ý싼ͱ‘|Sý'Žp¦Yɧ¹“®}b¯$áóaoX‚kë©ÕñŒc>Ùhä‡Oìe™yˆE×ÞE}ÁøxÂY®fÌNY& qÊb–ÓŽ*%G÷šv zè‰ÊÔ¸\ç{)Ë2 )Ž'ÃiÐ uà¢ÙÄ Pêm©eNú‚TÆn™.œf–+ƒÁÀ=÷܃(Š”””c/XI’@Ðê&;á‘pÆ6?³#ŸwZ9© £6åÐÞÒH,ÚI^é"â­4žlCÓÕ…dY@EI!uK–cU«P…š)Ž«Y^[€Ùa"x¼…ÓgÚéïè$žW‡(ÕBýø‹r u¶pÌ Ãâv JhЩU2#˕ŒØ)¦-ížv¾´ã4?x;‘À ƒ1£Î€SâÇž¥ ¤žo®ubP 4ûFÐ+@a°Q¤–8é"(Óda ë_ØÙ—6^Ç5¹É¸ÏÑèÿùÂã¼·sYÆT±„Ì~Ù|˜ß=pÂð`: ½MˆÐ8@P$ƒ]é²Zâ«‚”ðkhÓ(O4àŽEcˆ‚Q1-,%)Npdd\µ¢¹ëYgk#,«(™=Æ®"â,Š‹òˆ–çÒ7D±èæØ]èWÒÙ;ˆJo¥°úz ®d¨‹5»ï½ÏpÓŠ¨·Û‘«‹°:­|@aDmusÿMNƒ XV#å(Ïê9'˕ΌLŸ7ïä#ožaMž_7ïæŸ¶Ÿ¤Ò$³¯?Î×ÔÓ޳ÌlA§a¾þ§'9¨r!õ4a]t3ë÷ó?}µ8ì‡ûK,´z920ÈwR(ÆãšG°æÑÓßD«3„lJº¬oë:Îç6¿M±Ý@Ÿlå>û0¿T³"×Í'–.£H—Í|5q¶°z½ÇÑÝÕ‚ ˆ£¡ ’B124¤aÙÆtzQ¡¦°´2ý½¨|ì³ÚîÆ8ΘPG•eL!XP’¡NÓMHk2P\6šÆf$S›ñs¥s®åŒo÷õ¡w•sg•ÀÖžÓôx» «Ì\7«ˆ5å æ¸óÉ1¸±ª ›R ‹rÄbýм¡34Ë õ á´W°4ßÊÜ„Àb» g“—µ¥EèG7è´FjÍF*fS«èâOþÂ<þqíçÙ”=~’—šNr}Ý|ŠtÙ­UW çšræææsï½ÅÈÈÈ”ùŒF#¹Ó:ËNiÿ¼™ÎìkFŒ·—T70·c¶ê©q9X5g.džv°£­ÎÌêJ u99˜UÉ·¿BeäÓ «øÊÞmH¾sfëøäÚU|m÷QÞ<ã'Ç–Ç­•…,´ üϾc|eõôB²®‡‹NƒÓæ¢Ò E£RRër2¯t>u’íÝe„ƒÃø¢q*sr)П¿]–+›d¼–¢óJë÷áó R©p9sÓ~'–™åýÏDOÛgUÖ^¼“Ù1‡éB™: ½a·u¨y/ß9Òj+Ÿ_s Õõ¸<" ‘\¯lHÛ)V;í“Ɽv¯3Ã1ÄyxæÉ2™Ëa¼}¡í“Gs¤H}–$‰ÇŸü%áȉxŒp$Ê‚y äå¥×)Ýî|TJÕ¥í)CîŒæÙ~øÞ1ÑÉl"‘H;™õù|—ÆÉlê+¦½Ñc>kdê«ñ¿•‹ÒevË•BÌèHéß²vŠYF‘e™gŸ}–ùóçSXXˆB¡'$}Cƒ ‰ÇcT”Í"¤¥eA†Y0ÿ JÎY~æÿwßÎÛŸ|”ÊR^y2v¼¤ YCï+†Ëà sT¨!œ—c™³Ù)fÉ"Ë2/¼ðO?ý4sçÎåÃþ0ǘ±´ ˆÔÖÔ£T*P(d‰pzZ¡V+I$ÓÖáo?ÂÏžÛ˨¥lÁRòcÇéÔ/£ZÓËÎ^ù#GÙÙØOå² Ø<ÙÓÜMÙ’XU®à©§^Ä©\rSGÙÿëÿE¥ËçC›xó…çèгìÆ°¸ü,ñd²\2.±¢e|%3ád6Ev4˜e:DQ$ÐÓÓ3) èõj‰dËLv$;/ÝñH1o.w¬vðÃǹïöÙì~î"úSäÎ[Ç+;"|òÓC/Jìy;§›8Ԧ¾N °a«ër‘QžÛfäú;ï£õéÿfßîažëN£ÀÀ›³YXæ"k1öÞp¶~™\>'³²”:œ^ÿËt ;Õš`Šqë—£ §s,;ÉmvÚrÕ“zzV¯^ͦM›Æ‰ …QÉ|’ïÚØyM‹eädõ„„$ h,y¸†Ÿf×€‰¬3 ‡¼ìjŽò»ïà™š˜(o*5ZµR .+Y°æ&Ö/,EiÎÍ Ä+ŒËædv_Ó~p¸Acáo—/àÑ]Û™UZA¤óÝ®Å\¯äGG’Ç?wí*f“1LG}|bó«˜uzvX¶ŒÏa¾s¤ˆ`àŸ®]Æïߨ‚W©¤7*2×$r$¨áÛëV°óèNžm÷‚BͽËVsK¾!ëöªE¾øÅ/b±XF ¹ÇßÈX,ŽZì7“CŒœ;lAêwY`àäN~Õ£cå†`ט˜[çÄ]„ÛUÈÆ¹~ùÓŸR¹d ÅNM'Ï`w¹˜µ`Ï?õ?zKAUÃz¬î|4JKN>Ö9×0ôêó¼ºå4õëï B–') 'žg–™á|^„—ÇÉlÔÏWÞØF‡ÒŠAäyOwVäpû³/"è yn±‰/=ö\úøS]s¨™•‹$âQŽ{ü|iÃþuË|S]Æ?˜‡ÆÄV”s²€úE 4ïÚ†¦lƒ»wñFkßÚ¾—€1ß>͆¼ùh³ýíªÆn³¨ž(<â1 ßÐZ­¥J…€H<%ÒÝÝAõ¬±Ñà=^¤Ô´C’ëÞ ËÖoâ–E•ˆBœáþföžV°éîZ¢Šùë>Àüu£…,™=®þg„-`a‚ {ó½È@ùGIng…h;ÝJ\›î*5¨³Œgœé¦Ð—Åɬ¬P3ßi…‹…&%õ7žfNI±[{G¨Ï8>ߢ7˜S©Tä› ¨EX,ÂÖSãÄ ¢’r›•j-åV &¥ˆZc ÜnåŒÊƵEFD‹U¶¿]Õœk%kÖ¬góæ§F*ã ¶ÜîéÃX gs›A3Z— “klVºî©ì§iôØRŽ,3M0Ö,—ËädBáš}$%¥V3=~?ù RØG¤§D'prôx¹ÃŽI!" %b4ú(µÚ8=8j3ùŠ ­Ã£bÍV"ÃÃØ,¼þ!f+¿—ņ Ð9"‚ˆÛb§H¯&têì\évŠç"5ÈT¾LtQw!m»çq¾¦>Ùéó»'ÓNQ«ÕljF£D£QÀ¥°S|÷NfuZóòƪíZmòƒ&'Ûb^žY–9Ý}œ;ÔFX0{ .NzU®K—©ÁfÊ(\ŸÜŒït%ã;\£éÔ6ì&ÛäSÈrU2](Ý{Þ¢±ù(²$£×Ù°îVÌfë¤rÎ+ÜnZ+8½bî|Cd…Ý{ƒ(Š$‰qÓfY–EqÊ‘þep2{á”æ×ò­¼Ùéú²Zã,)¼^oZÑ’"e ÖØx„X"H8Æçóðô3¿A;ê©]6Œ†-HÍx¦D–‘¥ÃáF½úœ ‘±,2á‘A F­ŠsGwÉ$;k¹h4ü~?ÚÑWæN¨L_)fÄN1Ó,Gd@í<£•bæž–qo^á¬B.Sް—d’f=Œ:¬å<ßøÉ@–S¦—G}?¦Ï`Ê6¥ 1µuºœQ[LY–H.ØO÷ò8ŸÑEæ9€®/iúç÷@ɲÌW¿úUJJJØ´iEEEã„ãÈÈ¡ð0z޹óêű‡!‘I…-H¦ùúéìÂ`ËŤ’ÐX^bÁ^~ùòiî¹cy6]íÄ:Šòôv÷‘è­nlš8í½(´fÔÑ."† ´Š(í]Èj3…y6z:{ÒéÍÊÝ^4&…¹ÖìKþ¡T*q»Ýôõõ¡V«‘$‰X,FEE~¿rú‹­0ù Ê„Fšùö­ Ý,÷wTë5;ý~p¸…jòK?Æ2»9Úò=þúÍç±è-,®ûŸ¯]‚JHÈ)•ð>ÙUR¿ ùòØÉ£Ü3÷V^Øñ¯¼´óõ Ÿµ‹Ë‘J?&dºúßä±c»Y?ÿcÔšmH²4)ͱ–ð«þÙ|eéu(2mÛF÷o'‘8ØøKZLk¹#¿ 2ÊAó³W>M¢êSˆÍ?D®þ>V:;íl7y½„´ K6Zg{ ‚œ}ã®’Ÿ?øó*ïBÜÎŽ÷ñ/×>Œ.=„I™d¾‚'˜ß/Ó6Y– …B¼óÎ;ìÙ³‡Ï}îsÔ××§ku:æÖ×Äa东~—EbÒ¸õF)2Èoÿ÷7Ø*Jik~…›nZÌæWö!èÜqm `„X ‹Ão?Ë;Ã娆;)[º’-O½Æíw®æ™—±¶v„½vÖ×@ß <š8Þ­¯rÆv-bÇK ,^ßþ¸9™~óA:;èÖÍanm*8PÖ>ìRa6›1™LD"DQÄh4¢V« “ÒÎÈH18rŠ/¿ôY^õIDGø€f wÛñ™WÀ)ÉÍîö^®)bÞÊûÐ 0j§#¤ãá%÷`QµðWÏ=ɯ¹‹¯nÿ1uK¿Žùàß³]23âïç/¯û¾WøöqØSÝÏ·¿ÍÞ&r|‡Ø,`(xšÿÞñø‡Y:ë/¹ÉáåK[ŸÃ©ã*x]z Jiˆmû ß;¼“§:ñ/k>ŶÃÿ?ýÃ,õŸ™·­` G½ö7}•;ÔÍbKŒCA ÿßšOðû·ÿ•æ°‚y%7²kÏÿá€r.í«þºŸa¯§‹ü¼[yxÁ-txŽ‘(  ðC“IóÚ¡ðß{¨(ÜÄ——ß—d@_ÿV>óê·1›ÊYl²Oº™OtðÝ&–tóÕÃ=8…^æTÿ·X[ù—×¾LAã>RSÍÑ äß·=Q"×½„ÞÞÝ,¬ÿ?Üíæ™#¿c«7@Žk-_^þ06•’³Ï¯.RÓŸšššôH1“x,ލP ˆ …2#D"Ããv´HÑa:ý°¸ª–ºš9äæèžù5Öµb3[±Øspj4;}ù:jsç`±(Øí*£ªªŒ­¯Ã]½Ž²ÈA^}ñU–ÔëˆÅôµ´Sú¡Â)z#˜2Ò—Ý|=ÑCxñ%/%yº¬ùÍ%E©T¢ÑhEñ¬þ:a†„¢$(©´¹HX 9å×ðpM=1§¡‚ÊŠ›éhÝÇón³ ”eB‘ö¤ÈjãX3ÁèGûaŒÄ°{£ªø+Âßä—§^gäè¸öšÿâ®Âr<ý9<Úà³ óèóÏ3Òqôô/x²[ÃÖÜÀ_¿ò)l¸Ö‘_p-_Þþ þzÑä)Í\_ÕÀoŽã#K?ƒÆ÷Oe乩js ¢q?žH°…ŽX)ÿºh;Ÿx„ݽk94p…±“¾µîb÷ǹ7¿€o?ÅÀÈ ¯½ó=úÌK)ÉÜb3*€B#ÍüËÎßòé¿dµ+MFÿÆ91ÔÇ÷Ö}á–Ïó[ïûŽzTø\g茕ðñZ_9ô6=D¥¥˜»—~–9Ò›ü$ÔK0ÒKK Â?,(æòùyüàgô¯ñ…cGi(jàÔɧ8Z»‰åv Q‘Ç% Q‘e QHÈ AyULÅgÊx@iÌcÓê¶ny[~5Õ–×}ìï9±ƒžØj\Ác¼Öä`ŽŸäÙv°¥ÉÌ 7®&Ïí@!ªÉÍuâïiæhSFW)«£u…Åòøs¿AÒçpÇ­E ´…FÓ;8yŒÆÓ½8 ¡Ìnk¹äœïLiF„b$ÚËÛímÜÖkHÈqº<Ç, ¿C¹0=Umnû*¾´öÿìßÌ/vý’'?Fw4%Iä™òpj4ÄÑ’§ŠóZË«ä$æPg6õpÔÓž¶ñ2j ¼Ì+­a¬UJt*7y â£[®DÌZz)ÄÑþãÔ8òÒy"X1*'^ ®ˆ “ ƒ¨@V˜¸¹öô÷¿Î/Þù³êèê?Bc¿Ì–®>ºðnNìyŠ`, ™Î.Fo€ReÄ"‡yµõUÖr{í ã Çõ*e–|ÚõNú{·ðDèQn@§+­÷ H #âí?F©uÌ¡^“O‘9£FI¡Ñ„ GqZ]ˆ‚Ž•UwaŽv  7óȳ_à‹7ü7Zß!>ûúwù‹…âçïlááúj¾óÖÓ|ò–Ÿ²Î5ÞšàJå\ÆÛÑhŒx,V«G­Ö "±X˜h4Œ×Ó\™‘XP2oíÌ[;¡‚ÙI/:ÿTú§~"eô-PvW‚¼ï*믛P@|ª!þÞ» FÓß À¼kSm¿°óÎr阡h1”3¿x=%V ÆœÛ(1ØÐ»ç²!–ÇzSʵԛÆ:¯QW̨D»¥Ž •´‡”,Ê­¥D£Âì¨EÖ™pÚj©2±iùgøÖͼÝgeUáF–»òÙqzåöZæks¨ÈÝȽ;90ÐÏGþ† “‡Z—€^c§Ö5 õèú]}9,¸–7ºv¢,{„{+vs` Ÿ7ü yêäpÚ¤/£ÎæÂ¢/£ÎîB)j¨rÕaW«Øç9@ãÜY‹µ¹<»o§¤•l,œÍaO?ssë©Òë(pÔ‚Ö„è¨EÖ&=~+Õùüíò¿àÇos@íæ¶´û(•ÊF­«BAEÞÌ5ü˜¾šzE!½’:» £VMC^ieSõJžìÚ‰Ï:Z§ˆQ›K­K¬µSç4aÖë©s$¸¦vÿ!ýŽ·:¶`5Ïæ&¥r¼à&¼=SnÙf¢S¼L÷ÆwØ]ìÛ·µZ9¶@@–“k‰ƒƒ#\wa\9³Öz¡yß/ëºïGfÈÉlRQÖêŽSJŒV”|hTƒ+Ž*7dy¢b%Ó%ÄxE‹ˆÜŠ•Yö¸úÆJH:ª•ÓÚé̺2ód*!dä µ'¤ÉuÈã¦d™­StŒiŸS×JF&‘Ò4ÐHHJ¶2ßVM®V7ÚÎL¥ËTWC=«T+˜òŠM¾rc¦*BÚ`ì¾ÉŒí¿2,®fãí`p„ÎÎŽ)¤ ùù…i‡³YޟȲL8¦§§¥R™^OL-·ttt`4&ãḭ́“Y‰kÄç²"ïKñÂMI.$Õø´Ó×5e»…™ z•v¥6¡‚ âY¯åd.¢=Âø/çªëb«^nâñZ]rM13AVf93îO1“LŠçbÊN*OkŽ¥»ä±§¨{&ëêrMŸ0Ë99W8Y–yé•§Ï+Áù֕ɹìHÏ•&˕όùSD– ÇBœò…˜å´£J ÄÑ)c× ‡ž¨LË…A]ždƒ•|ÍÙšœbû‚#ˆj&¥˜q#ƒ´GÕT[44 ¦÷UÏÌèf¬î ¬ Ç ¡Ï뙦½“™ê¡È>(3ÇŒ…#HÝgøé„)K2ëžn{ËX[þü ë¯ffÄŸbÊ!D»§/í8ÍãÞN$0È`Lƨ3à”‡xà±g)(©ç›kD‰×íEªXÂu Ÿ,‰KT8è‰Ó<à%(‹Õ|óùgÑW-á¯jJ û É…6MÍ[ù§ÓE<{}<÷,_Ût«É-;²,Ñ1è¡7§ÈáÂ=*ȤDÏÐ]’ …‚ “g±ð¡1š |ÄK%&5ÿþÌS¼1òíëWÒzb?ÊÊd{ý2DµÈ@T¦Úi'¦yhIPPbwàÒ('b²Ì,3Ž@NŒð›ïÿ7ä¸Q‹X¿¬ˆÍϿ̰`áw^ÏË¿ø%r~&s>-»L¹ÜrÓZö¿ö<'{‡©Yq=ì–vm1µå&öí=‰½xko\…[ÿ¯½;oã¾ó;þžÁƒƒ@€H)‰¢¨Ó’¬+¶lY–"Ų#[’ØŽ½Ù]g7›½ºÝ§Ý¶Oû´›}úôöéÓ§í¶›ÝÍ&ÛÍáã8±c;>•Ø–åÛº©ƒ:y߉süúHŠIY²%Q‚¯$3Ã!~83¿ïü¾7Ïð•tUNŸ·¼Ë×ß8ÏÆ*a ·¼Ï¿{û ¥‚úLþýÆe´fMÖùx…¿ºgº:°¢‹8»÷^Ók¨:Ç‚u[yÔÓÅc{ZÙ<·Š­ çrf0Ž£·‡Ó{ŽåD‰Ò¥ü‹šÂ´K°Åä?Ø­Çyô…w¸»©‰;œ>¶VîH'zyöµ'ù¯ÉZþxÙ<^öþúyêÖmâ7_ªšÏ@ë9ºk#§ã´åóé ½³wea_PÂ(ø+ëˆ÷tñg÷ÜÞw^§×éÇg ’,]ÆOîû¾+œUJºÊ¯WǶM@A›pªœËå&·#ÃIÁî'vrè'ÿ—3]^LZ?äèùUÄ“‚‡î݆gø ß?ådñœ9¤;ŽðòGçYT¢ùÀ *ãi6|};®¶=(Þ sæTâºþßµô]•If{â½x+æ±{Â[Ýçèì"ëôswc-çY,ƈø|ܳ`eš2~CÅØxò‹–±ðl¿JÛDkç±sn‚}­-”VÏ£ÉïÅYS/ÛÁ‹­#l«ñóbW¹Ñ©ðÆË'ìÑ@¢—´³œG–-¥Ò粿˚VñÍU¼yè }©Ý9ƒ:ÅÛYø IDATÅK—ÓocHqÓä÷q YʦúZž>úÎh]¤Êæe+1÷â]¼ŒáTçG†96œbÝ’Å,)©ÃÖrŠùë@Q¶oß>éôy"Ó0qén¦;ÇM¥óSzº¤Gú8Þ|”Ö¤ WÏ1‚óW°z±l —ËKÓÐK*Ø´~%‡?ü ¾•wRS]Ǻ «Ðô §_mFw: V-dÍâNÞ~ù%zÊêy Î%o"We’Ù5 ׳¼}OõÒT接ËiŽïc_k;Ÿ;t–D"øŽÑ5 Mí-· 5\íqQQVÁ|Ÿ“l>Eo:‡ß_Á­¡ žÅóù_ǰâ–,ò;Hàai¹Ÿ2Ÿ`I™MÕX© T»0¨³¨nžû ßÞók¹í.î¯  ªN*BU, xÑœ^~{ù<~pô(_¨[§¡"BÄ­“,¯ÀãõR»d>ÇŽ´òÝŽ1/T{l½nòå|^#*B•üåm«øþ©,®¡Éß‚kNQvìØ1í@ @>g€ Ð§EQAQ°mÛ¶Èe³Ýoþ²(¡`{ý:¿JW÷4|²ò –GwáwªÛMI ÀúmP[SIÓœý#JBîØý5|>–ðÙìü­¯QY)ñfs•ê/j&ÅÅ•{£upÍ:<ã6'lgìñ´Û­ìB0œät2G¡H»œ¨®!¤³#œŒ§@(f®×9^;8¹>rú½¿¸ñR&^˜/¼u7÷ö›y’YÛ¶ùá¿K"Ñ9mñv<žâñÇÿ˜ªªêÑÏEow?¡híªW°ßÜŸƒ›Ù,Ö)‚ãêSkó®ŽÑ²ã‹6§Ž~°§|™Ñz@å’û ?Á7;EQؽûÑKoWNì'®8ˆTE'­/}>]µ:ÅÙVVfuéÔçK<nõ®ÿI³ÎåÒ‰Åj¦}mR·œ°Xš BQžšHÓ?5Rz‡’X–M°ÔC‰G'™LR^^>íÌËc¦/Æža–n¬E£BQ’¦—J¥(+ ÑÒÑÇžýg9Û§¾ÜÍ·vÞSÓ0 ã’¡`åÒ f¡Ü?y¹äP/ª;€eC‰O/L º—žƒEõ Ôo$ùþs4Üû„ ÅŒ E©h™¦‰_W¨ó ðW·$,ZqäFÈå˜ÖåMV…ÉÓu_ù  ÅmÞú8‰@ »K „l*ËK¦_ѶÈg3[ —TPWWÇÁ쪗ÞË3?ùjd›Ãß\ Í6ŠRÑ2M“741ܯveiþ|=¢á›*Çïh™)…8t/‘€IYe ]Sqè^¢eJDw8BEz/îñå;']OBî¤ù—®ÜDf¸“þÁ/ßDmlõJÑÛE¿:³ÒIW‘ E©( !0 M…H´žÞ5%U±=°„tO/e–ϧãtt¦ï-Ì´‹‚B RÇÎõ: ‹ E¯ÞŒ, áþˆ\:Îù³g§Y·Š;¾•ëcѪ;صû.tU¡ëèëÄ«ncûÜÂäråÆ"CQ*JŠ¢P__ÏÑ£GG{BLtÂëõÒÔÔt9ºhvîÉ#Ì1:ƒü ëª š'Â#Ý=^:[º™o,‘ax£’¡(­ºº:"‘Â`ʤ¹‡ÃÛíÎå 2w^ðS}OZWQ.®¥•µµ72ŠRѺTñv<ï=©ÐÅ×/«öP†\1‘¡(­T*E(¢¥½Ÿ=Îp¦;N}ØÃ·v݉Ó霱x[Ø&©¬E‰WŸyãÂ&™Êá+ñÈ;YŠŒ E©hY–ÅàHšý§:iéˆ3Ì¢[ ¬d–U:㨳™êgß‘8›×-DU¦ï×cçGxç½SÜy×­èŽBÙΔÛGg\*Œ½È¶7 ŠRÑÊO¿}‚בO§fŽ¥žó¸Ž=ËHì/°}‹¦]o õOýøm ëQªÍ“ì;ÚNYÝJVE†xéÍÜ¡ 6¬©çgO>Ͱ ÷o]šíå;ßù ÁHOåb*Ó-ÄnÛAÌ9ÄÓ¯œäÁ]›pÉ™Øo 2¥¢eñD—jðÍeSïí¡Ú=Œ–éÂ̧fz3.n›SG$£qéz¶o^…XVž‘¼Çvîà—û¸ïXÁÞwße¥ç,¥u›pÊ@¼iÈP”>•‰MŸ.np£°L“‹+ Š6¶,lÅ‘î$—†¸¾SõOiG0ÆáÔ‰>º†ç2oN KÖ| K#¨C°&͹#ïq8TŠË¦µ£5ÞEEM9ÉÁVŽmfP S¿p{ŸúKþw6Ìü/µŒÎ9,Ýd(JEi¬x{Ù¢J–V¯ÔÇX.? ­gýï!™)w´Zò‚æ¯æÑûVc»Ëx쉯ÑÑ3„ÓÀç2)µ,¿ý^jjc,‹H ÞH%.Í&X1@ œ¯þÖrÜÆþØ\V®{„hIáÞf™‰7ŠÒ§’Ï?©ª:ýîh£úÙät:éììD×]ôga‚·5ž ¯¯ŸH$2¾ñÎ#¼øÚG*æ­åKw,BY¨ßfpÂîêz`4LmƒÇ¿h¤ È'¸û+¿Eeeu´ŸÆl¿ŸGŸæs(CQúT\®K7ïJõCÌÞñ‘`΂ âÃ#X¤Áyaj/‹4•õAòê½#‰Â“%~¶Ü¿i|™þ‘V®tßU7ô$ Ð}y†©ÏúHŸ‰À2d(J³L ø¨õ% %9›™ˆKø)U+•‹îÍý],y^[伎2–…¶]öò2¥Oå“W  ¯vW¼+SBu±FRYƒO¶“Lçh¨Ñ8'J:“æd?¶jËP,rWz¹ Eéš°„e[ˆY E€iY$Ò9šÏõp®w„¡dŽ¡ø ó* ý›-ËÂÆm•ëbN¸‘®#×p¿äUÅëKleú*ƒ™ÈP”® a[ØŠ9{_0Lƒ·›Û8ØžÂÈ¥–A³gÛ»¤C;±l¡˜…A4|žæ–{1^ÚƒÔ”-ÄI–sƒ'ˆ”-Ç«Zäó½t¦rÔç¡‘¥uðiËÄ骤±l.YË`$y—·ŽøaL5D­ÏɹáŽé^I×”PÀV¬+úc$CQº&lac ›Ù;6R°L‹DÆ[«OSí¡ÂEÍõb™9lËB(£§ÏŠm&8×÷>áðÇôÓJHמRø^ŠÒ5aÛ6Ö¬2 ¡`yª Œ’nD(il-N_¹¡!LÛÛBQ`q¼íÕIÛ8š:sáA²kÒkGÚÛÆÿ?œãrUÑ=¸Ÿs‰^ Áà-dGq| Sž6Ï"åŠÒe(Jׄ°ÅèÑÑ,‚€¬:Èæ åAx‚4t¼E|&Ø¡|ÖýTÈe;9“½ðŇ÷34qg¤Y#ïh‘f¢(ܹè!Ü^³Y½m™Ù\vôÑ„v(8Tn{ü©XîhÉ'/ ŠÒ5Qæ‹RZZ:kÍ™„œ?IdÚBód2I©?<¥T\„d³Yz’=—½Ž EéšP¦tÁ»þR©@€L&ƒª&4TU‡ÃÓéÄ4ÍÂ>BXôv÷ŠFЮÓ8Bò™iá¢Ì§3å‹NÓFºròŽIeù|ž¡¡!\.‡EQƃqâxa¥xæû?æ »ï£<!â×èhïÂv•P« ÞÝNÜ÷!‹šÂôŸzt{ØðÅ]”W{П¡gÙ×èÝÿÛî úÞ3üãS&·îÄ×–Æ£kè^?!G ë+yò{ÿˆ’£,¾Wâ,’¡(¥±vB¼^ïø)³ÛíFQ”)GŠŠÃÇ£úg“¶ñ; k/•*Ì„Ý××GUUÕØÂ…ÛŸ?åH¹à¯^ÄŽ ‡ª︟*G°s¶§Ý¼TbK6ñûáUàð0§Ò_Ø­Oµ7Òg%CQ*Z«W¯&OûZUUÁ`ðª}-Íí£Â}á±?Z‹ìÁe„­7PIc òªíôéÉP”ŠV&“!N“oÁV”Bã-¿ß¦}ö_ÏV‹©\NfJב E©hõöö‹ÅNeyùý ¤X¹ šuKêI&“d2JKK ÓKÁxùÎÅÆJy˜f!(…['/;óøñ”õgxMš2¥¢•ÏçIñÖáó:×OwD>=‚0s4¹Îãlþ9Fì/°½‹.,,,Îýˆ}¯WÅR¶,v1h¸9öösüæh/J&Åíw®¦ó؇œúÁ?àôÄxhÛBºúGHººÑ¯¼úcÎ'LÒF9·Ïïã­½çØ«æ)[´‰Ú=<{Já¡]÷Ðþñ^:ã&ë¶}™á·ž¢UŸÃ¦­[‰©}ìá{4›Ð.Ö®¨ã\&Ć9‚$yhëJTˆ×œ E©h†A<‘Á¥|sÙÇÔ{{¨v£eº0ó©)GlÎ’rxä^ý‡¢¯v ÃÁ‰}<ô‡óë¿ýdMÕU¶ÝrîGob.A61„ÙyŽ£¹:¾¹k>ÿëo÷`ã`ù]Û¹³Aão¾ó*ËïZʆ¹u„Gxº¥Ÿy7û›Û §ØðøvêB:ùÞV’ý½¬ºÿ_âë|¶”ƒöÞä½6›š%;d ^'2¥¢e™&WmlYØŠ#ÝI. q}-¦êŸr›ŸÓåAw9q9 3ŠC§¼$ωã'8?˜b®¢¢éܺŽË¥bÛcm\œ>Ž‘fŽŸ gò(¥^‡¦¢)6N]gàtæÜrªëàö5 p†*9ÙîÆå°8²ÿ0µ•¬\’'ŽSÚßKõ†MT6~Ä÷~cñíûÊËÈ–>#ŠRQ+Þ^¶¨’¥Õk õ1–ËOB«ÁYÿ{ˆDfR(*<¶‹€îå‹_ý*î ¸°ªï:¨¥fÁrêÿ¤š@‰“²{A+ òHx%Ž%8|A<éNœ;Gd^#M«—¡êe8\ðà#÷ • y:ñG*ùj¨—á´IYi v?Š·DG¯Œ ©C8}eÄÂê–ì¦:âcÿÉ6íX‡ß¥Îâ»ùù¢œQ¦ÝME†¢T´êêêˆD"ÀäzAEQp8¸Ýî™V•>Çd(JEküÔHQèJbY6ÁR%x<Ž¢(ê%i” E©h¥R)B¡-íýì9p†3ÝqêþµëΩÅÛ×l=ps¡(-˲I³ÿT'-q’Yt+•lòJ/„Ô„-—4eÐdæùu.ùš¢ =%$G'†P.ô{‘®?ŠRÑÊO¿=ÖŽ 0s,õœÇuìYFbí»ÐŽ@X)žü?ß%©kØÞJ<™nµëÙ¶ÔÉ/_|QR̓÷­¥÷à/xã”EØl½-{_âXGœ•[ ÑÕÅÓ¿z‹[·ìFïü€÷޶‘W=ܽíN~ý‹— Ï›ÇÖm[Éž—g~s ¿Ggéš[9ÖÜÇÎí·ÐÛüm¾µlhªšÅwîóM†¢T´®¨°JØì|üAþù¯Èýü5žþ»gœ³[Qi;økήnDécþšû¨y‡S­]$³yT#γ¯`[à·}ùw1<ÅÀÀy^ûù›„6á7†9t®“³”Ç·o¥DS9ŸIPÖôç‡öÓ˜=»û’yí}îÿ7_š½7M’¡(¯+oGàÆ­»ðº}èº M±hm>@ݲ (ƒ­Ø¶ÀápâÕhN'ÙáNøØ´z)mX"AδÇ8ÛM0róçÔ Í_ÁÚ˜›Ò€FçÑ~4+ÍÁæN|–É™ã'hÎZ„£KYUµ’ÿü×OS½íOˆôYzÇ$¡(©OÝŽÀíg×c»¸ì~l7%~'½ý#,|ô÷ WDPªÇv‡Ñª7AgeCy[ð AÊ݆Þùˆ³¦‡ÅÑ9lxâkôô ’·5eQ~(‚îÔ‰DBd{\,˜$2¯†•µUô{‡ùkîå±/Ö£sK³C†¢T”EÁétÒÙÙ‰®»èÏ>XhGà-E'èëë'0£¶â RUx©*Ô6Fb…Çõ%¡ ËyªGÿS†ø.ÌŒmf5æ/h¢aÙjb~4ê㯠7N«¬ XGhNÀëaâÏåñU”9ÇY®îû!]>ŠRÑúlí®ŒÍ]Â܆†IÏO7‚,èÞã'ÉŠFUmÝ%ב®ŠRÑÊd2¤Ói`r%¢@>ŸÇï÷£iWçWàJ‚L†ÞM†¢T´z{{‰Åb §²¼üþ †FR¬\Pͺ%õ$“I2™ÌŒ=\`¬nQ0v}O†Ùçƒ E©håóyGR¼uø<‡ÎõÓOÓÕÛÍ­u*¶5aôùÅÛ]-ï‘*]DC¥Ú×ǃršsÆÊ·e1öÍE†¢T´òùE—n<2¥¢eY&!¯ƒ˜gcà åt¢fGÈZ.,¡N9Öœnt]Ç£{ ÅÛØ@uÙýð>úð]¾ÿæ»,«¶)¥0Š,,“¼e#„i[ئ…¢yYPïâ}‡1Wl'¨Om±*ݸd(JE˲,ÜÐÄp¿BÈ•ÅJk äê ßDPyQ;‘X§C#‹ât8‰Ä"””–`8 Ž8B¢óY}[„—^ø‡Ëç²eÝ<õ;ñÙ9Þzþ)¼%A|¸Õ{ /ž<Í7Y…Ky¥ E©(ÝÑ¢©‰Ö3л¡$°*¡–îé¥lÂòŠÃÇ_Û…¢(ì|¬ðï®Çv¿¾bá¼IÛâ[Ë ë±96‡‡Ùõ¥/3·Âƒóó}GØñàýÔ{ ‰(Yn2¥¢4ÖŽàèÑ££½W–£“yuºd;‚+- ,ßü•ñÛPž2v?þÄ…¢pˆ7ŠRѺ>íFN]|òÈðæ%CQ*ZŸ¶œ!ûóM†¢T´R©ee!Z:úسÿ,g»ãÔ—»ùÖÎ;pjÚ„vbÒm€B,3‡!4<.í“gäsî¡–fŸ E©h†Á[‡ÏñÊÁvÚ{ãŒdòè™ÓX-‡1Ã;±GÇ2/9ÐEw<ƒÓá$Ýy€GBl¿s e^¹tœž¾8pzCõ<¦æÇ£æÊ*D‚¾ÙûF¥«J†¢T´òù<ï· ÓÜk£‡j:ñö5××bû#ãËÚ¹Ažüá/X±á~ùÓWÙ²yÙ¼‰…#Ç®oóÓÃ*»6Ìå­§ÄòuKØßãeµ÷ õl]!C±XÈP”Š–išøu…:ÏuÛA¢Gn„\Þi)“N‹í|Š!Â,\ØÈ»%oã ”Q¨"èqÉæŠƒhu5µµõœP“èÑ&o}Ÿç2%<ñ§±Yü.¥«M†¢T´LÓ/Þ»2ˆ´F~úâmÍWÉÆƒüð§ô&r”Ejxïù×ùÈoÓÑÒâ˜MÛǯòý“o¢GÖ°)&·8ÌHþVʽ…_#y=ñÆuÙ×…‘¡(©±âm·Kí§¿½;_Š\‡·læÀàä_ÕÉÚí²ÚLòã¿þGüÑFþð uŒ«6rþÐë¬Ü|?_Z1EQˆ·âgotó;¾ˆÑòìÙø6¥Ë ( ¶mÿ¼ÇþøÜD2¥¢¤( º®·#°µ­ÕDÑJI÷÷Ó××OUUÕø²Pˆ5ÅéãžG"èv (…ׄT-XKP¸QÕB–VÌã·¿ñÛTÜ£Û˜•oSº¶mÿü„˜¦9¥yÈP”ŠØe·#˜D¥¼²rʳ“Úš»”¹õrö››‰mÛãA8ŠÓ‘¡(­+nG0C¡IoÕIDAT,Þ.¶mO{dx1ŠRÑú4í¦^c*ÜÆ7Öš@ˆ±Tä)óM&—ËÑÓÓ@4ÅårM»œ E©h]n;‚‹/À #Á»·±zÍbœª@ €°9{àU~¶×ÁŸüáftub@2iý1J!Mã*ƒt6¥R)žyæ„|ýë_—¡(}þäòy~º÷¯OiGðsŒØ_LnG`$yîÉ'éÌjܺªžúîs´÷mÇJ¤¹wçÞ{îY4¿ÉùV7©ÁV~þË—Ì;ùâÒXé'7xŽÿûƒ_ û/¸ûÜan½o'¾äYž?á¡­+Qe Ϊ`0HCCŠ¢Ìp=¹@†¢T´ à žÈàR ¾¹ìcê½=T»‡Ñ2]˜ùÔ¤#;açˆg¨\°”ªªZ—®çÞ/ÝűW~È»ï½K‹UÅížN„´¼ÿsš»!VšæP[? ¢¥ØF†Œ«–XÍwÿæ6¬/ãÝwß!Üó65·þž Ä€¢(lÞ¼EQ.yX†¢tM!®¨`öZ|}Ó4¹sq%ÑÆæ…­8Ò]äÓ0¤¯ÅTýX–ua7ëテsÍx넎fÆië¢qÕz¾ýßþ–¯üÑÀÙÑ…ª@ 2Ÿ9ó|aq ʇ÷¢&ª1ÜyŠ£G|X KWðÌ·ÿ;qïrþóîpaNGeò€tí]ü9¼œé┓'ONú1†AMM ¥¥¥rÔísNA"‘ ½½§ÓyÙ뙦I>Ÿ¯ ›-‰D·Û°s8í.„ebZpWc š¦]}¶ó´·¶‘1ªjªÉ t‘¦„ÚªÝ=”Ǫ±RƒôÄjb%ôt´‘ÊA¤&Fvh˜Py€®î> #OYe-aŸ“¾Î2îsÂú¥wTº¦„äóù[Ô±ÿÛÀ÷d(J3ú´¡(I7£±P”§Ï’$IÈP”$ési¦r*ŠÒ5‘Ïç‰Çã³>à"}¾8ŽO]£ª*¡PhÊó2¥«NAKK èºd®ááa<Ï´A7Óò†aL¹^.CQºêÆÊaÑ4MØIל‚¾¾>lÛ¦¼¼ü“W5444å9ŠÒ5¡ªê„Ó·ûW¦tu¨ªŠmÛX–uEë\L†¢tM8ŽÑÿ N¾û ©èFê}iºû:°5,h¨F×T„m3u ¦>wE ê¥Ï£±ÏÆØ=ícsavttËåÐuX,vÉÏ“ E隸Šî!éÏÑÙyˆ7^™\ÝvjëªÐ5ØÿÂßóA_ ºSgãmKøàL–ûÖDyæ•fVαØûÁIlo˜/ïÜEuÙÕh^/«±£>˲ÆÏR„ìÛ·ãǰpáBvïÞ=¾Ž E麙ŠÞ²Š×M,²‚­‘¶Å­©!H °jãCø:_çTìSûxϪ 46Ÿ_ïy›†Ç¾Á明ª:.ñÕ$éBÀ…âXHÞ~ûí?~!6l˜Ô†@†¢tÝ\E…`¤O©‡`(L0\²Ã=‰+˜¹$'N§´¿—ê VÏáþèCþÕúæá½ýàµK"ÔÖÕSê–WifcG†c¡8|áp˜ùóç …Æïy/Ü.CQºNÆêÅ|e1Ü.焞'àÔK¨Ø$|AbáuKvS[U‰…e[wPðsßã¿Eow?¡¡Éif¤O0öy3MsÒ‘¢¢(lÙ²!ÄøìÛc¡8683‘ Eéšp8㩽Ȕ×5O Q·À·å´Ò Ü.,ƒ@íR¾­Á¡€ÃWFÍü²ë½ëÒMjb×¾±kŠcA96;Žaã(¥ëÊápLú€Ž™xw‹¢(”†'4‰r¸¨­«¿ävåÝ1ÒtÆ>g·-.ô&^O¼ìP”·fIðé?Š¢ iƒƒƒòŽéºÉår¤R©I—nf2v*íñx¦¼¦qQI˜¢(œ;wnÖç“n ¶mÏØËb&ªª‰DH¥R¤R)ùVºæÆŽú|>ße-?ö™¼èz¢„ŒL|vÒÄ›’ô)}Ò)Œ$]mc“É~–M¹ÿ¬/AC†|bIEND®B`‚iep-3.7/iep/resources/images/iep_two_components.png0000664000175000017500000013033512271043444023037 0ustar almaralmar00000000000000‰PNG  IHDRÕ•–`/ pHYs  šœ IDATxœì½w˜\Çuàû«›:§™îÉ3ƒL$@`„HI¤Ì [ieIN\Ù’e¿Õ·~^?­?{¿]{¿}òó>Yëçõ>ÑzVN”Š’h&L HD"Ï`€ÉÓ:‡›êýÑ=3=œÁ $ºøÓs»nUݺuÏ©:uê\¨S§N:uêÔ©S§N:uêÔ©S§N:uêÔ©S§N:uêÔ©S§NËŒ¸™FãMúm÷<ðN“ãɾý?ÚûB4Þä»õÞÞ)„ðOŽÝÿ£½Ç¦Ókº!‚áˆ?5‘Ì_ŽúÔ©S§N:oÚåÈT×u¢½ý¿¡ˆÍRˆ¯#Ä‹ºa4&ÚÚÿN¥]ÂAˆ×RÆM7ÜùÎx¼¾¦Ç¾òðŸ#¥¼uªS§N:u.7—E©!Š˜™ K )Ï‚›EÊq€X¼)xßGúšáñîøæåªK:uêÔ©óVðºJU3 %Ú˜hBRJ™šH&mÓ´I§F @µ-«ˆ¢¸óÓäÒéñþøÇ@¨Å|.£é:ñ¶öˆaxºhºa‰Ö¶ÈTr,k[–€D š®û‰4Sãã¶Yž™Íjº®Fã‰@jb< G½š®ÇlËL§Æ“¹7Ú@uêÔ©S§Îr¹¨RíèÞßyÇÝK$îá‘H™Ož9¸ÿéÏô÷œù…m™r:Ý wÞýW±xân@³-+—Ϥ¾„zm~ÁH$~Ó]÷|YÑ<64ø?óÙô÷n½÷þ¯¢ˆµ±DÓ»îÿèCÏþà+894xT7<Þ[î½ÿ·;»7ü‘¦ëAdyj<ùÓOýì³=§/TÏÛrÿGúBRã"áßÓ ½µÏ½øØ—þ­\:U¾|ÍW§N:uê̲¨R%š}{xÿçt¯çCB’‘ÈaðÅMwîyðýß|rïwî9wòµÓºa;ï¼ûobMMR8Ù§†‹7}ÌÍUèBˆõB(íBˆ8hª©ƒ_B+`膡ßùàûþcg÷†?¡\!DWCSó'î|ð}›ŸÚûÈzN>!Äf…XSb+D’K§ç2ió²µ\:u®Ñx"¦é†°SãɱéþÌ3¡é†a[¦™O&/v¬N¥XD© vìºãzÝc<(ÀºÐsú“÷?õx0ßzïƒ{ gËŽÝwü»Þ³ŸêX»ns,Ñô^“ÉÑ~öÇ{ÿ#à^»ûÎOv®ßð— ³‚Ê”SL%ÇÆöÿø¹í=~!º§ÆÇ~²ï‡{ÿl*™ìíì^¿±síú?BèSccïûñÞÿ8×ÜzÇ=«ÖnøœÇã½mÇ-w|b ÷Ì_¨ä Šmš.ôœù?Ò{úèÁçëNOuê¼ÍBÜzhk/RžyìË¿79<˜}ƒy*·Þûàɶök’Cƒ‡ûÊÃïXpLÊËZuêÌg¡Rˆ`4ò!„)ûúN D(—ɘ¹Læ‡ ‰Ä–X"q{,ÞÞzãÍ× !BHRŸ{æ$‡Ç^}îé/w¬[ÿûBˆö‹lY¦=5>Ö ˜–i¦“Ã'¶Þ¸ëA¡( H9úêþ§ÿ&94Ðð‹'ö•ÖŽÕ¿gxŒbñÄûc‰Ï×d)'“c_~rïw~€tëÊ´N·+ŠhŠÒ+³”7#K!D“J‡bèõŽÕ©³[SíBtÜzï?¦•”_Vf!Ò ‘ù\:•š=]¦ pQ¥ZI¶øaØ S¹ÌÔÄôñ©ñ±Rj"y¶©­ýÝÐ#š¡‡jsËeR‡ê µN·ë‹Y›BŠš}öBÀR†)1½aa:!*v4Q“çbÇêÔYŠÅ•ª`z-2=•L~ݶÌRåxµŸ»nÚ2Í Pª¦S«?ÔüýFF**W¯¬©VÐuC躬T‰3ÓÝ¥äèç'ß@™uêÔ¹‚è†Çwë=÷ߌF5£¢M§¾³ÿÇ>e™å9æW¢³{ú›îº÷7„ C‚{ì¥çÿ¹¿÷Ì~Û4íétÝ:wì¾ýƒBˆí ’ÓG<ÿÍž3=oÆzl:µ,¦T¥”¼üRÊCÏ?ýÕÞ¯× CÜv‚±—ž?’K§2ÙtêPS[‡# ŒD6%‡Ïkº!¢ñ¦:–,]€DVœÕµQ)Ýlzê¥D{ÇÇ…m;vÝyÃS?øö¿X–);Ö®[mLl˜šHö¥&’ãÑxSçlÍߤV©S§Î[ŠnÚ¼ïï\·á3€UýQ€`¢­ýRȇžÞûÈ÷æœ$DçŽ[îØ 4‹ŠeKÙóàû8wâÄûž|ôÛO€¤£{ý¦=¾ï›ºá¹jfü-{ÚÞÿÛOí}äÃçN;ð–^h·= •ª”{鹟5½÷ýÃBˆ¶[î¹ÿ Ròš®{VoÜò¢ˆÄÿû¿òðg>÷ôá®îõgtgÓmïyð¶Ý¸ëóºæ1£ñÄŸ „©Â-˲,Ó*±Db×}ù½¿8øÜÓ_:ôܾŸuvo8cx<»Ö¯ÿ_÷}ì¡ÏÙ–•ŠÆŸ@RÊìT2ùY¦µ`Ïl:u~õˆ6&::»×\¡œ=ó'¯>÷ô“pÄë=÷ýµnx¶v®Yÿ¾hcâG©‰d­GÀ2Íc=gþpàÜYíÖ{ø‚P”h´)þiÝП”wÞý_ w›i–O>û£Gÿ°n¹÷þ¿òx¼·Ürïý35>öžÔD²p….»ÎÛEÍ¿½gz.ôœùÓ®îõŸ× ÏïxðýHp­rù™_<ýóÏY¦é¦Æ“£ýgÏþášÍ[þ?M7V7µuþ­”ÒµMóB8𡝕5óG)¥ Â>–OSÉä÷›Ú;¶êº±º©½ã3;vß~ö‡_ýâ×úNœøƒÕ›7^7ŒÍ±DÓg…H$RºãgÏ|fÿýi%YÍ·ZÃ:uêüê!0xˆDo¿ê†›û޽üü‘gìwò™´GºîDuÏùìú¦”©güèŸ;ùÚ˺®kÛvîúíX¢é×b‰UÑÆ„A<oº` ÷ìgÏ:þR"¾ç÷?nx<;bñ¦îôDòèºê:oCUª–iºOíýη:×®;¹mçî Hv6zæÐsÏìJŽ¥’}?þþ3çN»oÛÎ]¿ƒ Q"_8ôܾÇÖlܲ5O4N'ûRZ¦9‘üß„þ©ñ±£Ó¯îæó;n¹ÍBl9‘š?,])÷=þý}G_Þ÷ŽÝwÜŒDÞ!’sG<ÿíž3'lÓt«uíI þÖôç·¦ÙêÔ©ófb™Ö Y6ax¼ïŒÅ¿'X»ùªQË4Sɱ§_}î™´­ÁÌŒ³ a4—ž:‹”X–åX¦Y‘K³[÷¢±xÓ‡îÿØCwhºàß¶óæõ}§×•j7‹FT²MÓ=wòøÁs'|=Ï:Û2幓¯;wòµ_›®ÿìé9nè©ñ±âc_þ£óÏè=•è=õÙeH˜JŽ%ŸÜûío߸XRãɉ|ù ßXÞåÖ©Sç—‘ÔøXþ©Gù·×î¾ý£‰¦÷è†Ñ´O[¢£ã†=¾ïö|é ÷¥&Ægvp©ų̈þH¨n·QbñĤìDV¿‘ôI¤DR|뮲ο–P¹1ÞH¬…¥Î­Çq¨ó¶EP;[y&+`fËŠœ—Å[û¼Eã O¹X°_øùã_þhضs׎Îu>ªÆ»tÃs­n«‰9'¾~5s@O&“ÿéÙÿHI,ÞÔt£Ñ²ÌñäÐP².[ê¼™\¶·ÔÔY WP¸¾y\rùÂð =±Æ/Du†qéåi€W¬ ìjqÞj+m;? \rùB ÅZõè­í@ˆ•lA«˜8¡•BšSÃòGŸ8»õ7@³&G÷}÷/Ÿ“圳¢e' *¦õKÊ¢*\5*v¥×ï´ ×h»¹í#€¾‚Ö€è\‘p­\|[±p†Îj.é|AE©‰5þJ¿“—X¾€™û¶’~+aF©^²FŸ.ÏO¥ï­¤î0«O¯Ä€Hz»¶ÂÛß1 J7H¼[3R¸ûúŸþð­šÅ|nß‹Ýëφ÷®®õë¿xÿÇêˆÅã«ÒµÊÖlÓ: %RÊÊÿs.dÞñ©‰dêBÏ™ÿÚ½yëÚaÜ´çÁ< ¤… SJôÑþóßÎgÒ#µçJYëX¹ðX:K1£T…' %Þ÷Ÿî2b­·!è`%ø¬p^ÑÈYFU©®L¸ ÁL ÿK°f„óŠž!ÁŠg<ÓÉ•éWr¶yË^ÙhbæóJTjí2þ¥ž/å¼òß”Áè[Ь´@¡¬¯QO¬õÓ ~ oM¼ÛTr,ýÔÞG~û†;ßù©X<ñþHcS“\éNôœý/?õ³ÏM‘ëÈHú,ˬ̦¥dÁq)yîG?xT€Û¹vßjºÞ.WÊs=gþá©Gù’U !Rãc¯$5ž|mZ)/v¬N¥¨ŠpAÓ‡?ûká«ïþˆàœï®—,áæ ¸K<{ñÏË¥Ön)Þn:W )¥,]8úRÿÿó±ÝH÷- "_}‡sLá­?’¥Ôxrr^䣋-þ.~¼ò^f¿¦ë1Qù¢O¦–‘ç•[d®ó+Ku¦*O¬õÓªØM•«²¸Èç·ªü:uÞo¤÷i XóU§àм‘Å6Mw|xpb‰dSp‹¯Ìb ÀëyXìܺ"­sÉÔ®©–àWU¡Ö™æJß¼•ØüàÕ«öþK6œ T!ðh¬Èþ+ChÕÈé+ÁW­û¥Ÿ.ÐAKH«Dˆ_ÁªAÄ«ñ¨+»ïBÐÖÎZüýócó5Èu¥R§Î%S«TK´’ve9x5".=ƒéÝÞ>}:Žð%&†ºrájh¢â¥´á*€–°†®ˆ WC´õ ׈W!ìUWtã‚־⶛£T/õ\QisC]¡‡•ÕûvénúRg•êʇ4Wl(+%H-< æ"©ëÔ©³³Jµ"¬æOøÃ] :#Ʋe@õªD¼êŠÌŒR½D¦ßÏäÓVèé#šRQª+r˜àѪxƒÂuæ¿+Õžéþ*ó+è§ôK1]çѽ~Eëuà Yu/+°tõeõ§Póù¢I¥Äí)— Å¥ßy¹šmÙùÊy¿ëüòP;SÓ™…€[W‡ØÞâû•W’z{ÕùU"¿`AÄ[0S]çѽAU_õ×]mŸ^çõýué³€EùzOšœ§T_ÿ©”R‚{¶\ZZ©V¶Ø”þeÖµ ,=\’J°ŠÑ%£ÝH4Í©/&''—¡X%•û¹Œ{*%•¥@{©”̶­Ëú]JIuÀ²œµúË1V¸¤<—½.¯üaæ ½_ðŠ©+ž:u®<˜È/ˆñ YžÂX1AEñ|nͪ¿]ïõ}P"BuŸ¯\j_“˜ñ´-eV—âÒ_µtmðú*Éßs­Sç­eƵؗ—1Š: oò—ðé[­UÖU–hèeXæçuånàe´ˆÍT ¤ "~[8ôÉn¯çkZÍYs\f/ê )©*ÄåTk~n1seRÂWý7]ÕEsCh‰š×©SçÍ@0|Q<¾è̱‰‚³@àÈJ0úËWª„‘5ŽIJ €šhzÝ骬ú)ÉR©j£}]ߣЬ*—¦c¾~¥¤„b©"µ®H¥·•*¿(o««‰¨t4!ü+ ¨/Š%GÑ  q›œ%x4T!)˘®¡ò{X8ç• S\ñg«!]›‰© ® ò¬,Zá"eH«€›Jâ-„/†o¼ÈY‚ÁÎJÔh¤&Må!vÓCX“yPŠ?Þ­Œ ¤[Ê€F14°KX%ÍïG( iJŸÎ²l+®‰›ÂJÛEo#«~)í2Ý] ù¦ê!êU)—Ф³&Žf yði ®mã(*zÕöïX&™|‘¢þ`€¨o~ÆJÞŽmQtü†Z½×bÎ÷–Y&“+R–á€c“9 BU‰G(Ò!—+b>¢> m+t%/3Ÿ§¬yyÖEº¥|žÉ¢ƒD ¨*ñXCYªÍ*ÂÚ±]C®cUë8›^íÈn¹@ÖÕ ûtpL²%ðŒª“‚ÄuP´™%”r>GI„üƼöyk¤;w÷\Þ\4nþo±üóݼ‹Ägþüuç­æ(Õe)ÊKPª²ªT—Lgš8c£KOè%Õ´ ö/žo!39¹¬|ÝL7“Y*×Êu[6Ò²–¼£ ¦‰´m–´{J*×]ž¿M±:z› X¦§Ž¢²¾\¸d¥*¥Ëùž!†KN¸›;½”ó9zÏ2d4rݪ1 –®E6•Âjî¤Ñ·øõùf`éJŠÇxÅêæ=×µ£ÍqŸ/`çç¸ÈÌx‹ÒKß&}>Dt×D±€” ,ÚØR"ÓÈ>ïºç¨jmóØãLl¢áú¦j©U?C+…Õû$nøx;À.ã–Ò+A€uá²ÇC4ܳyžÅE(Ž`ýVè~49LéàÄþš_[¼Þs®Y.8–ï?Îóc¶mé"lgyõày2 M$&Ns¢q ·oh`äµS¤ZºØÜDàpæÄYŽ”ÂÜÔaP´¼D¼‹9hJǦìjxåb÷Ùâôñ³sb\cŒsÔŠsóÆ ÿr4Éö® Za‚As5› ʹ4ûó·­n Ñ˜¾ŽÚû*qÊ%Jèg¾Ÿý]éJ’|ÿ)ŽYM\¿.Q¨óÛd!å\–ó§ûiݾ…¥L†gò\Õ"¦2“J#g8iᎭM¨Ò¡X–xýFe¥œgd°OÛ§ÛË)pìxž ›¸.v±ûweí•q‹^½¦£ƒe>áð›^§ËÂekÜåç[QªÒ²—¬¤2À¶—§(/A©ÊªR]ÂC¤Ä©Ôa KŽƒ=6ÎBkË‚|m {t´Z‡%òµl챑EÛKVUfo/8s¤Y wé3U¡oŽ#Ò“ôWËÓ½>ÚÛâL¤fÓD¼¹¼‰åTö^L\ô÷ôpø¤‚«ø¸jëºc^¢A-3=*µè;Ûlj±EfçövâJ‘gÇ:‘ÆnÞcô\/]Èc^¶lYÍš¨wnAæyÊc.þ[öà銀ë óCdö=k+ˆH'¡Ý»pûö“=xÄ(vi+²œ!à'X™”áªíkˆh‚ÂTdoûtÂá÷ÜØÆù‘‰-Hô¤8,@h[»˜8fQ©‘J"ÑÀúÄ8±­kiñMÏìÂáú±aʲMQðøÃ´¸y<Þ¤„‘¬µà°556z™5ë</†q9ËûWËÛj2Ÿ+qmRâæ ÈbqöPpìlÁu²Úì¡éßË©äb3O1Ç¢éml⺆R“SLä-Œ°Á"ªŽ²¥»Ñ@©±*ÎúHì©öŸpX»¾ ¿êâ¢nhfsq㇎2¡4ó»;éÞ¼ßp’½?=˶[¸¦58· £ÅíÃ)IÐ8%da =vjØBkn@'q-£½E¬A=g#K”€%Ø‚ºõ×Q؃­x÷üšîèaá BonD„¡e5Îô®,`U/F™; /•q'Êh~ªÃÐFp‰lÂÓœé,ÂßLãG?‰a SzᘧS{U¼×lCÕ$` ¶\ƒ/w€ü¾o`«ÛhØtW4¡y¼è÷~ié`j:jÕ´&tŵ)KÐMWÑð(ÕúM»¬^T7KÑcªW¦ÙÕ=í¹íâJw®eƬ"¨íSB1P¥KÁ©ZX® \í BóÐܹ–†°Ii&G‰]Ìóò¹)6w1ä|ÓtY?HÜPÀ,TN.E?A]¥ñÚmšGÒRæ´ÛÈžN_¥G‹¹ýZ…Îí[Ùµ:F£²<Š) Ö†T‚><9¥¦6U3[uuEˆùψ@QT¼ŠMe«ž‚Ç"Á•Çr浘tIïÿçìå´ K!.€¼…·öðЂYrOÉí)™3B`ÔJ]3Î*‹³ˆbvÑwRùÒuÈ,<Ê"ŽJBd8Ö›d}X# PlÆ3&Ù\žd*O̲([Ç´H[.Q)± Wó ùÉ`K³ì xý4«äÊ FÞàéBox™Âþ§P6w¢x}ˆðjÌÁ³¶°GËx×%ÐBP8y Óׇ[nE 6"s§q ”€!p˸“ç)_(¢㨾Î`e5„A‰I(Nb #§$Îd͛̀|ÖXšáGíjÆ< ‘Àòo" )•=¼µÂű°†Ï’ÄÌèøD iPÎaËh®ƒ´òà‰¡ÇbØ}ýÈÆmhÆyÌl ã ¨¡é$œ 9Ó ´PF8Ú7Nhb -ÔAHø¼ ã™™ÅÓ¬:wIJÅi#R}® Ù4I×O[Ø‹~Eܯ·®ô¶òѬSçMÅ àÏrzKðÔÎR u:î"Ðt ÊÌB(=*š×µè=?LÞxýa®ñj‹*U!;=ô¼v„Ónˆ›nÚÀ=_<äÆ IDATË e¦¬^zÍá®ë:hÒNðì+iV5FˆúйIž:ЃcøèX·C8œëíå¹óŒH ·E} SBx¯¾ç©ï1µ÷çè›ï%vûVxéŸÈeêÚ;†c(ëÖQüé^r­›Qc-¨Ñ.þ'È=ýÒÓBÃû¡ ÜžG™ìW16ÝOÃ]Û1J?$ÿŠŠÚ´ GÃ~•Ü—pŠ’‚4QïF‹¯Âëùé烄ï¸cû]Lîý.ÒÛ‰ÿÖ_GÑ&Q£1”i¥ªÃKîéo ŒÚº=èk:ÐÎ~—ô“}xÚ:Ñnª—ôOGz1¶ÿj¬ߪ$é'¾LÞXKøÞñµ7²=ar!•£ÜÂcDénMñìá“<—pÏAt¡Ð¶.ÁÙã£<—)r÷õkYÓÕ@òP/O]Ý^ü~±lG'|‘;4ÁäÈ({'È»)TG»ªc‘+”0@¬êˆ1|°‡Ç†®¿¥¨¦súXv2ÉÁ3c,8-BWµàÍOòüqA"%¨ºd'Æ8‘…|qŒW-Éîµ^ŠG­ ¬¾±Eõú «•é°ha}S‘çŸäˆaçÕí4XY6u·Ñ( œ=9BÑi"ðÑÚdÿ‘s¬ßÚÍ¿Š5xç/ ÷ܺ•®f/û_;C©)D$d`•ò¼zz’©¬Ë±“¸vQ—†æ8?=ÚÃäÚµìꎡ¸%&Ry¼«Vã€t)2Œ::‰Ð•Qª0ëVó÷2\ºêÔùWŒ”Xsž¤@ž¯~oç¶ŽÎO}ùy¡¨ÓÇZ‚ßüp7-!}N˜BÇ*’™ì[†·×ô÷µ{_á†Õ¨zÅ„øÙ/|‰w߸ŽÎæØâY,Â\ßV1ó¿œ9Zc¾\à-,g¥Æbù 1ÓP•œæ–&ç6ïìùÞ¶s|NÞóÓHjÖ=¤œ;S­ñ–[Æ&œª“…3 !V‘¾qRž×´yH¤ëÒâ8g»¶µà̘pó#®­×BÄtQ¹—Ô@/G5¶^³Š¸ºðå ‹w«Å<¿g¯ o›¹>ÃÕÿgN­9OÌ=§¶wÉ‹5þ¢—?¿?Î&Nöö’Ôb¬íh˜qäšÎ{¶.¿f¼8Þ@Åðœ3]>ôõÎN”«5Eâ:¹ ÿ±]åþ£Ç.GßÞ¸î/¶ûýQ1ýTz[ìã¿Oÿýøò¼ëÔ¹T"D» ýá'(¾|`z*AºGr¹}àLï#+Û§ ,-–þ¾­)ŽßFÓýËH_ç!Aó±zuˆ²TÑj¢eumÚJƒ­á×7i_ðÅëïÚÀMŸ×Ë _T÷+FEsÆ»ÖÑ x4…+Ù×…¡Ìz7\dÛ Sý©S§Î<¤i⦦æ÷Ÿ’ã\–¨ÿ:Ù®°:µ³VøÈï©ù{å‚fZ(ÌŸTÔºÌÌŸuÍš­/žÏÜS3^¢>óþ¾’ªã¢×2¥lòb,³MjYîÃÂ~e-—‹õ¡¥ºeíybéù˜ï¤ô–;Wö@­øL[Á cZ+'³–ͽâÒïGeHÖ˜fûCE¢H9/}­cšˆ%ò©ý,k¬c³u¯±xÔ°Ú@43}¯úaæ»Nr,~ÎEÓ-!—ÕFsË«Éx®ÍiÞ½^ìþÎUƒŸ\f¡„Ÿ¶ÚM['kúÂLýg]Šþq œÏßêT57dZX¡R•V‘ÞÁ)2¾8W7éPÊg82¡²©5DبT0Ÿ™âL– ›ºðÏ‹ðæîG“œ i—ÏR°,–~çïÇv$“¦ÀgJ¦_Ö3Y–˜Ž$U”MS‹P Þ½½‘U#9N¸v·z‰có”ÉU2i(¬‰éÇ%™µH;‚xH'áU,ûe &§-““~…XРŧ0–)3U–ø:->Åu8Ÿ²°ýí>A:o2RtñøtÚüêܹ*!J%›¡¬MQ Z":Q úS&&‚ _§Å+È,s}É"ÃÒ•Œ¤ËdmÐ U •jµ§%+®MV)—l³6ù‰}¦WJÆr6†O'^©T‰_ô¥ð47ÐÕiõ+L¤MR–DÑ+eY–ÍpA"mÝ£ÓR8¯¹®K®`1wñx4:#:›[| %§0«÷Ë´lΧl¤¢ ê4‚LÁd¸à"U•ö°F@H.¤LJ.x<:«Â ËZä=Àž²E6f[X¡X²)¸  ÍatÞÁ‘’‚«ÐÒê*w®ñò­>ɴϹe9súGHqÍÚXB`ѰGºLÔ¤‰i0’³(»•ºtFuìB™ÃY Þë ZƒÅœI²äb ÁªÏœ@ÓY:[Iƒ¡ÓT1pçö߬7~Ñr)-| TÄåB.2 jÍÈÛ)‚·…;wo¤çGßåÔ`œvoÕÅ6ÅBÕð2ÂÍrãΛ(ŒãùýÇ)\»1O( …– ÛYoOrú•I•®"œ{YŠæeÛŽë!7±/‘.o'¨×¤©Þ4'7Èé );®GÇ*“Ng(˜F'Rh®¤”O“)˜8B#ÞE8EF‡‡Ñãì^ÓAWT§”K‘)ZبÄb`I5šb…\޲$Ú¹žU™qzÒ6pí2É¡~^™lïl¦9!¼„çœtÊ<ÿR/ákoäÝ-’¯$ôÒ€ädo BPè9sœWœuÄô !Ï‚]%N~ˆ³çÇpÌ<¶”8å,cý§Ø¼ãNÔ‰Ó<óJ/WµnÅs¦ì¨Þ·ìÚÍÐé—yâÈ[®å\ÖÏî]›xü''élðáõ8›Ê“¶Íêz† Ú´†=ë4ö>ò#4£\ n±ˆ;g¦ sTãeOßÝE[p±Š@oI ÆG9[•"º§Qihdúõw’Üä$Y©Óì³+SðËlE¼ìêPÐm‡V¯‚P%;;|¬‹JtM ‹…i^œB{̃cšd]/Ý ΔEÿ… _?çâ ñ§wµÂT–oNs¾,¸nsœmôW<:kp,› SüÏskÖ6òÐV?O¿6Áþ1­¹?Üê'XÌó/¦°uMÝqêryòØO˜è a~wG˜­¡YAS™¼¹¼vnŠ¯Ì“UtÞwcœ<6ÿôâ©ÐÙå“Û<ì;:Î÷-´œÉÚI¹lñW’œÍIÈ|y¸A¿FGH%щbsú\’oœ±Èé šàÁöÊáø`0 w_ÛÈ»ZuZCéÛ$ap,Ë7¦ûÇÆ(»CË1b«4û7oKÐaxôÈtjä¾üý/¦€ã>qG+ÖXŽÇ^K1¥—ØÖáƒ[ƒ<{pŒg§\Cçooež9Íuy²šÆÓÚÀǯòµJ3ý££-Âïlεº,nE}« Á3,0 V,WÃPL&O’Žn¥M¤8öâ«lyÇ]X¶IªäÎTÖµKô—J¨æ$}'¸íÞxíåS˜mk‰ îãXÃ&¶Fs<5àåê„ ÕwvÝCK@›SUyæç)]wíÌì²V’)š‡U1ƒÌX’lÉÀ«+µY€EU˜|õž9;ŽÓ¸Óa+ç¬I¹ôx«é® W†ºýgðÓ3ïØXb<_¢¹”á‡{èÇ8_ÚÄU )A×!*3NÓÁ±ËL1P^O¤xž}§£üÞ½íô=HOçÍ<ÐQµÀÈÙòÛÄrŒeßti•ð¬æ]1üAßø)¦Æý8½§òn¤-æGµ]Ð\ÌBçuâzh‘nn¹ÁÏñ—^šiIõ}9ŽMy|Ó½jîn¡á6"] Ët5…È F‹^MÜçg•›$W2ñ45ñžëVñ³£jåÚM /v)…éá[AÀ7›]øál±œ;[*ÏQª~`N”mŸ¦à]äÕošªÌñÚB Í<¤»\¦§ä§½A¡8ZxKÏöÆ¿ÙX­OõØ¿ÙZ1ÝÐQ9¶Xš¦×AÄì®G!*‹xWY£SM1”-sâXš ‚5ªÅÁ¾{Öùéž?îVTÚÛ"üÍVxäYžËˆ‡tÚÊ’ÎåXãa ø¼Üµ1žv#ý<Þïà÷ª\èMqp•ŽRpò9L(üÖ»»Øê8e“Cg¦xpW닎%9ÛopJúù¯„9ùôN‡Á±¦":LMäÈ7Ò­Ù?ì: Že椹0ippJáwïYEkßß* „ªòÞëãÈ—Ò A•«W‡y_¾LÇö6Öûad,‡gM‚?kÓÈŒd8 «:ÂüZwÝ…xtq[¿+gïÃŒM¿ò‚áÇ f:ªP;76ps³APÎà€BÔ¤Ðæ·ø¢â?²ˆ#€D"e¥Ó*b6ØÂô‡i?×iG]WѧÓ-b™žœTƒ:U#kU&MRJÊ‹“½Sl[ÛÀÆÉ{σ 7lj :^äk/MqßµQv„½$¹6!C «SUÇ ‚˜qÊÂ]7$X=VàÈé ¾&6„j»ßtšUcEþñÕZ¯-Þ?ª˜Ne‰d¿Þ¿ÑÄjnºmû̬Ú)YŒ¿rÝ3…²úZ<Õ-Y‚éð˜!T|ªŠ.4bÆùIN÷F¡âÓTÕEQ‹ ú¥”„bx„Ev¸‡’å‚G`™EŠÒ hhisáÔ!ÊÍ쾡³1NÎK#1BQ:t‰•î§`:È~ï]wºƒU"E©½W‚`ëznܱ†®BAU Pø !V§O¸e÷FšœŽÚÕR\Gš”L»jí’Ìü«>pЏîÜç´2^Ô™GÕ ZYò%Ûr0½a<ºŽ)+ËIÓÑÅ¥ê\ä¸3æ9×>½Õ°vý[17­åîø*Î÷㙲†¶@^¸XÅ)ž;žeÃu×°* ‘q'-ÊŽEÊõ×Tf%Ðô³í06tWϤ¹ýî«güæ^ëëø_H‰=8wj5ó3Ó…,1\}=t‘ˆJBÁëpã–0V±Àð…QBƯÒÖ³í ¨Uá&„@(*íCS6Vƒ‚ŽX4ü¢kI&'Kœq™R4¶y W‚eº\‰+%¦éà xh Úœ·ˆo :+™r$1) «z½$Ô"û.Q# …ƨ—ÇKä…EOQg{ƒŸÐP™—FJ\È9”¥BÄï!=lS°\º@Ì¿ÊÂ4šaФ80PduÒ¢à“HW2˜¶H–Ši‹¼×ƒ® ¼ºàüd™€0y5†.”8*UJ“eZ»#(%jF©‹÷«¨_'–ËqdL%fh´F5Fr6ce—þ”…ÏãR6]lG’+Ú˜¨Hé’µ‘‡H9EÖt°œÊZn{Xçü¹2– &Ó´­-Ṋhš\Áf(ç6SÞJ'P„˜À [´xe Èø C¨UEq\úÓ6SEèOY4D5Ú£ªýCCTÓ!ŠF{D¥o¦UsúYõžè†JÏT™˜•) ÂAkJKâœk‘RVÓ˜çJ”¤1·”tnÍÞ|Ë•X  ÕŸ+F¥Š2ë ¥yƒ\+OóÊT3{n#€` @»w€¯?¶Ÿ[w®Å/j, BA ¯c}ãAþå{ßÇ6¢ìÜÙŠ_¯±F-ÒÝ2SçùÎS'pTñöÍlõkH;ÏXßA^²×³g}#3Èן<Žë?Ï™s§¹ïžw±*ìÖ¤iDÏó­y‘‚T6vðë[…ëûBaí¶fúú§H¯o%ªª´´µàß÷S¾r!ŽßQh ƸN=Ê“?:LIññÎwÝÍš/5 ¡yXmŒ°ÿÙ1¼†ŸŽ-DÃZ‹/ðÏßáÕ]"®ÉËûŸçpO}å$Ï´ßÎÎÎ(_ñCOñX_Wßt;b c§xöpŠ{ï¹iÁK2=À»¯Ñyâ…Ÿð´©pÝ-w±¶ÍG9Pâ»?ø>¦¢sÓMÜwuŒPØKnÿã|¯¼›=[[iô-öôÕÞ ›ìD?{Ÿz£q ·Ý¾©jmª™mæ'9õÒã°è›åÕ–µ|ð×Ò4x€/~ûÍ›n¢µ!<Û—¦Í㓯ñø3è)hœûæ^®¹õötÇ)¼ÄþÁ(;¯ßHd‰ÉŸ54¸Híåy˜™Ï€§sÛæ®O}ùy52= ïnððÍwò(‹°,“’«Vß§ HIÎtðÓ¦oéºX¦…æ­¼Oµ6øÃ/eçê(Þ4ò(•QŒã’´¡Á¸¦ƒ¥ª3N&òë´ÔšX¯•O.o2bJ„¿F“Wa(eR  …DHEuúsŠ¢è$ Hå-ÆŠ.BSi 鵚bµ~Å’ÍpÖÆDW•Ò&¦|:->A6o1ZtñkݧÓdF3eÒUaųtÔZ÷W2R›&ªc•+ŠÆk((šJ‹O0œ¶ÈY.BSh{¨’²iÓŸsªå+LdLÒ–DÑT:Ã:¶e3Vt…kÛª¶é%®ë’Í[ —$C£-¤2ž6É™.ª®ÒÔÐÝJ›©ª‚GQi ’‹”-Ñu–€Š.Χm\!xuÚ Òq™ÊZAO¥MçŒF+÷,[u“B¡1¨âs]P9BAÙ,ò— ¬Û¦KUi «„d0cQ°ÁÐU:"ÊŒ#}:qCâ³ì¢{JHR¹Ù>ÔìL8sûYPØ–Ãù´…áÑh ¨Œ¥ËäP…®¨1óžØ™­R2˜ª¤ñú*qªtgú‡ß§ÓâŸTôL–ùÐ×{ÈV<¤ªá›ÕàéËñ˜) ¾µaÝ—¯øsºs !hþÏEðž{+õ° ¤  ùg—R:ô¿ð‡´­¼ó†n¼B m‹\6EÚÒˆFèn ©+ÎL¹žp ·œc2SÀQ}Ä"~tiabàÓ$f1‡ðFð¨bvÖ„Ä*çÌ!_ DcÐ@H³”#+}D}:Ø%†Æ¦*Ö"E%ãÓÀšI£]fd<…+T o€DÔ_Qªóä…kNqôØ9R‘5ÜÒ«L&¡ˆGUðEB(…4S¹2–THÄñê Ò6IYöhB’š cJÕÀòãS\Š™4Y[ÁÐUô@QHS(›˜R%ñj(®MrbG5þöÞ;J²ì®óüÜçûô>+3Ë{Ó]jߨ¥– ¤A 1ƒXÃ;ììβËìÙÃvÎaffv1;°#FˆA¬ÎŒ´HBRKíÔ¶ººL—¯Ê¬ô62Û÷ÞÝ?""3\feUWu—P|ëDeæ‹û®{÷Ýßýýîï÷½øB!‚\?ÿ߸âçd/ºhœ‡ÜBšåÕ4Ybm1<åúÌ/­â `ù´tŠù4Ëñ$xÂÄÊŽJõ ®] “La…£hBbr,¬$Ñ<~¢!oIû+÷YÉ+ºH&±ÂbÆAM÷ÐÕ$—\#ž.à Eyô’ša-+ðû=¨vŠùå9G"„B !êј~ñKœÒöóþ£˜¢¹¦Z!~˜þÅ_ wúJ¸“é~=ÿÈ¿Ÿü²äŽãTAÓtj(ë…ÀoÖ…ž) †õ}uÞ†¡²¾}­*tUf S+;רôDUz¶ÈÃï3­= š¾h]_è ;­Z=7â7ˆÔ°ŽòKï±4vXµ}=­Ýù Buùt…-ºh‚Êd¢ˆ†4†GgÌS[ǾHý3X¦ÎXÕé@í!³†,^75o1E)iœk½ e5öYgؤ³æŠÆh[ÝXTbá­+ðjžYéÁ{ @JLLM¡3b²SÛxñ£uK[e“ñQvd©4Ï[—f}›s}œ®«Œ¶mäßi²T=Ñ$Ò0>Ö!ë-Y•«÷"ÚÆsš—pU@³tm²É.-zè;Ŭlùh:H;CÆXÿé GK¿ztyªÚºuÉò5óü覟¾úC9„‚á «ü­[ô÷v76¬.Mowã[W¿Ÿ¯ÆÆ`rz GF0t‹H›U?îÓP%Í ªm䈴¨M‚ë T}ÁŒÒÐjU££££ê‚ƒjx90Ôh1+[TÃG{GÝ$§™ôtÕ¾ºé£««.]ÍÀ‰® zºªéfë»Pu|‘N|uö¾`_] ¼Ð¼„+¢ûéêªëDéqbìŠÞÒ¡Qær¸Édõ\p>½°4Syiî!£Ò÷!ÞfZukãø¨ y8 )Y§{ΨT¿-}f!)ë6À·;Ùmþ*yÝ͉¾áaÞ¡oʾrW-Ü B³øÑC[Lè߇p% qä……ë…âÂõBó;îêvéTqþÚéU“YòvÉ{Äã 24"º…¡VÝêÚäªM¸Û„t²¬¥]|ßmfàâ8(%³¢[̳f+,ý¶ÎÄ-2ÄWSd]ðzƒDý:‹‹‹äm„B4Ö†RL²¸šC¦ˆXÄ IDAT(*þ`ˆ¨ßD4ºù€k3Ÿ(Xí¯øÐ¹.%‡»í¡ŠihÛ­Zj"WCS¶pt½3H»@&•ÂF+FòyÝPQØ™8)¼„¼æÖõ®3õógÃ\]uk&›I×|% I¡ªRëԌñdSI&“d¼%F%×)²_ãJÚdw·Ÿ îráÒ4ºe²³¿ë6üíBÚ9¾r>Çž}!Fnéa\ñ+ ¨Õ…4+>‹>!\^>¿Ær_˜oQß*ûþ¶ê(%k™"o­ÀÉ>…í/Mêá‹L.¦Ñ"!z<µ”h·‹w[Cý¾Aµwó? 4¿ï€õ·™Ÿc•‡yjúÿÚ &æ–QíìÚw€#á8²ýƒmÔòóp )nžAë}ÝA!eù¼Zª&ËŠ¨,¤%nf–³ ì=¶›˜*k4¡JÄÊB¶˜#ŸA 0 ³ºÀóKïÙÑI̽V_~ݤŠÏðÂsop:!8ràž>â‹ó5Ö¤‚éñòÄûßzóEþòÅ%ºC:½cGùÀ{v¬šC+ÏÍ.¤øî¹9ØOOP/µ½†º¯tRÜ5‰, Q¯õ•÷ãKݲٳژ5kVóÔ A‰Hâ­¹<#A‚¦²o¼ž¨¶Oëûh+M¾^eüì›t=ð^b¦‚t \¼g` JÈ«²vùy^yßþ’Ó_ýs,W¾~ÌPjT1FMSÜL¶!FUJ™¤$XÚ8Õ0¦ài§*¥Ëü\‚„] ¯–ܤ ¹7®ÒîÐP1„ËÔj‘" ~¯NŒ"sù’k½«©tû4L\&× ä\Yf9Jç\RB§·L è8¥4E)ðzuº4—™´‹t%¡Ð(õÃôjŒš¦1ÖšzÀ¶ðƒ…Mdê;±§ºáóñî1®œý¾½¤Ï“eòÊ/|÷›|G*ûðãô1yá,ß¹²ÌûzJöªB:Η¾ùË•hß>>òžá-Ò-¤ùæ o²È {Ë’bîúþþÕ«$D˜‡;Á¡®º97Ïå7_å™×ÏBl˜Ñ]‡8Þé²|õU¾pÎE1b|ì!’S¼òò\M{8úà N F¸o";xßã&…Y…‡vvcˆZd/?þÈ^Æ:|( \] ±ãèq~î„ä…ç/q!5ƃun©Åtœko¼Ä\j¸Ä+YLóåï¾A>›"ïJN>ú8¡ÜMž}ñ næMúû†yðÁCçÏòÌ›, ÞÿÔtéYf¯œâÍY›´4é=p÷âò2ÅjÞæÐÉGò˜¿Z•æÐINzgyîå \[³yð±'Ùá-0~úe¾x1AW7£»óøÍ«/ŸâÍ™4c'åDIfág/ÇYÌ¿ÿ0?r¸­Æl±0{W§¼ô¯½ÎRÏ>Æ\2jÙ g83“åÇ'Ÿbæòëü—oߤ»§ƒÁ¡ÝS%s7ßäs—^Gé=ÌûÐá«7Æ:ŒWi§Y¸y–/$É9.VÇ.~xàÊõ›ì9pM«õßp×V‘…Z#ε\>u5—_W_KNUëC¹Y”Œ¨û[ap¤ß—Ëy[>;ǺY™.%%ÅÜ*o]Iâ 94ÜvoCj¤$™-r~Õ%3³Èsž;¼P´x<(¹zy‰ö=½ìò×¶E+Y—‚³q%•s8?Wäd Íׯ}üônƒÏ^Ís<ªY‰³2ÜÁ‘ˆZrt(O=ÙTžOW§j§»˜ãëg„tI¦3ÌÇÆ¼Š)·ôb8…"W¦W¹©ûвižŸpøÉÞ<Ÿ[öðc{}|õÅ8Ožˆ0ªøÖìè„EÙëζ™˜ZÁñzø]Ƨ×x-oÒ#Šœ9•ãÃû5þÓ9‡ãûÃÄÏÌcîiãý!Égnx¤Ó )µxjW ·Ùd±™`ª²!D9fP)Gé•#\Itt?}zš‰Ko‘¶ûéìïgj Û•€C.½†ëãhg]‘(Í dŠnqto/Ï^å`\‡øòN×Nžl£»éyÌ:=}ì™&tàý±JvžŒÞÃ;ƒ¸Ëã,%“¤¯3eõ³×?Çøµ)Æú¢DªdaÉ'pƒX¦â ï$'yé•WBŽ;ŒãÚd“Kܜ̑Õ| 7a€Ó,?½£»¯e):)mffSì>2FŸ‘áÒbŠº;Ø·k ìbwo;1%Ëߟ^Àˆv1&r¼r3Îc=‚T|‘ŽÐñâõi|{fšàý<ç®.2jÓø§¿{Œ'ÊÞËËçæˆë¥oÇ(ù,ìêe æaæô3ÌÚö„9ýÆz=ƒX©ÜÎNv†ð{ƒ !FÒ…Ìì4W]—üÔ «j££‹á’˧q]PL±Þa¢íÇî`¸+×]t³ƒŽõñÚ —˜ŽÑá Õå®ÔŽ×&ŸNÜÉ­4®²Ÿ`x¨aPâìl©ŽUײ®;‘uÝuÇ„;ÚSm´ÜÔîc Uçàî>ìb‘D"ÁJ¶H‡O¿§š‘ßÒÙÓãa·PùËUo¯ÁÅ‹º‹’ q•Ÿ0k­« 1CÁ ê †4<–ÆÞ~û½6/_tX̹:—ÆÍ¨è¶$ìJj™R%él])‰„MNô(üîU•_ÞgáWQ¯ŠÏÒ «ØÉ"ã“I^×%~)º‚+!1Ù38%m²¶ÄÔH®$¹*%û:KËïQéö•_Æ¢ÃJ<Ëè@ˆQU!5—dµ¨áõ™n7™ö¸¼eK S#”Mr}ÌN‹•Ú×Ò ÝwÎ7-Ü[4‰Q…’)ë]ÖV!4“m]ô(kdo\¡èBÐç'¨h*–7@~ù"sšI,Zñ&­S…J,À£å×ï †ü0>ÉJW”ަ-Wðú|Dü±¶6¢>A:§ÐÕßÃ`ŸŸ¼²B"Ÿbrr–鬉mºø"6ö6Û¦8ùÀ^vvùÀZ!Íì•I¾‘éäèñc 4qKªŽ'B×6|Êo}]ô¨«¼6m#5?áp€Ú#~ôü WççQ |†‚×;‚tUͤ¯«ƒÞ€ŽtsHaÑ‹ÑÓñ33dºÂµiœ —§YÖ“ø=2EQT| ^¿A{4LÄãrabŽ›™–½ V2‚¨ƒíô·{›:€¥›´g˜ìêÁ¿œd)‘gG¿E0à'\惊Šé àñi‹Fh , …pg7;z:¹)Î`ÛÍz_à©3Jõië []%uí"EañûÖ¤¤85ÙŒøázõ…;tTÚ‚Q©ü{ÀgÔQdž5§1Hý®C”ò¯°ñX–Žo9Á% ã?Á*–c BŸ¡ˆ ¦ hŠ d TUA-3PŽ …ùÉa½(Šhl‡Œ…ùØz°sE ¶Dq]ŠŽ‹D-ÿËòtCçCÛÙíW²xy“a€H!ðùM~þ |õü*ÿa¢Èï<ŤT}·²7²¾e°akÐT¯RŠâ”BZ~ñX˜ï^ˆóÿ~/ÅÈöÒ®J29G×ðßÎé2-üÃÁm¹TÞl5îjÉ$ª(9ÀT¢ÀJ{Zû„š'ÄG?ø³WøÞ·^¦ó'žÄ·8ÏúÏÒû^ÙK•´îç§vqæ_å á©]U¡2å„R"MqÊï3”æ ¥w©X´u´Ñç=ÈOQ,êy*{º•­F)%²ÖaD©;Žçé@U6öPî€ F ud¤ìm‰"¡àº8 Õ¤Íc×C'86"ç*hùeâŠR¶ ”;·¸Æb2CÎ/к¡âT§Qtzƒ>º÷>Èã»»ÈØŸ©â¦À.q‰*]í>½yÿ±8YKË2›(•|š,ä½–I[(Kª£›hæ,'5öQ¹Ò÷nÙ‡Dáä)ºN¹ÛJùøÀæž¿5]VV($ŠÏÄ:yHͽå=ì2Ea]ÎT-BßVHM[q©§ÈÙËS¬å]TÓâИþv ÚFUÙl‘¯½0ËçóðôQ ®ñ“64'OúË~uu‚½Crn‘ó“^þ»“á2ó ë!‘Eç…9~küÚ“] yËA–òŒ„,:Ïm¤ùŸèdy2Á—R~~û=_¾‘$ŠÒéÕé\]ä7_°ùäAv…ùÝg&I 2Üæ§<¥—VJžsÒei9Åï~o… *Ý&Š]àKo¬ð­›iÄø<ï?åÑÿþÅV]…Þ®'­|‰¢°òr!I¥rüÞs‹,!òa °óÎ^X`¡»‹÷véx[RõÅ&§5ͯÞ%xEõ*unj£g¤P5,S-1™ÞŠ® _(‚æ&¹xå:Wf ˆÄYò{Æè×Ó<÷æuŠ®Blt³ÁURȬòê™i–×lN>ÏCFY¾vóóIlO?{6 ×,?í½ý¼rê5‡w²+dñ¨hŠŠnùñb#ƒ¬^<Çß>£Ò9¸‡vv4˜ SñYÞxëɴ಩sbØGL_âÔë/ò–iqèø1TO€Î ±.°›½šéÄçÏ]‚T–‹W$öX?mQ/¦¦ ¨:1誌±øÚ9^YíáàÞùÈ{shã!¯'ôù]£/(ˆ½R”õ¿Ÿ¾?ÿ ÆðŽòžjcèX­fó¸êtÕï»(k›UíÜ´~[ˆ^_™j}¨ÿ²Þû·1ŸZÏÔºŒ7 ™k^QåS•ÿz»ëUâJQ¢¶ŸÝÿõ¯¿ËØ£'8ÐiÐ’›ip•|jžK³¦5äÓ<ö¶ùã©õ"nÕ}VeÁ«?3ºYŸmÔgãÆõj•Ç£›J1ý©Ÿ¥pãzÙOUJ²?uéÊç3ÙÓ•äZ}C·‹­•>Ÿ§¶e÷B¡+\r® î\¾Èë7‹ttúéQ*µª¾§T=ÍÐŒmxx…|û3åA“H3`M&"õi¼ú:³IGå¤E¥'VCÎH[5ÓJ%ü½=\a†QØÙ^»âê Õ3ÁP¬:…®r3¼sÝ­{´½ŽUGQø¿ÿ¯Z¸{ØD¶›^½»hx«/4;$£v&Ù|¸éŒS/doÍm]Ö[•¼|în}j÷›o×5ýK–¶¼68¯7áG®«GuNo§iíjúmÓkMÓ6¹vë>Û¬Œds⇴¬ŠQЂàcŸŒÖ3¬‡-u Y»Ýì;!PëLiÃD ÜÝÁƒ2ñvþßRíZøþEÓè±íüž`ËØï·Itrë¸òí³m¦e5¤ªM´y8èmÌ%[²BÝN}š}¯<ñþ±µi«À]˜û¶ç¿šY¶JóvPOüPFºüY‡#Ü¥N­-ÜŠ¤C6gã(zÙü+q›TQà3ËBLÚd²6E ¯u×Ù5¶„X–ÎX•bÖ}-´ÐˆtÁmœä%÷šMé–°3k,&³Ê,C˜öà]b³rmfW2X†$_Péˆ$“E¬`É×`Ó:2Ä×ÒKk—f-«ÑÑÀ½éɦ¬8ÚCžm²N ¢±úP@ºä]0ÔÍ÷CïÒÍ_Ë¡Y:ASÁɧXXÍ•Ž˜  ›XKQÐ,)ˆøÌ¦aš•E•`(H É¾êÂÍ4ÑTKÄušê&ØJ¸gSI®LÆIú»y¨ßB:EâKËœZµ8>"b*¤WW¹6—$…ΡÑ^|Ûç{[hiŽ-´°},gÃ$Lq„Ô8Ù8ãßijãýµšˆlø¥É…M̽n1ž}™]½®N{ùÔ‡;yíµivò¾D#u›˜›.W¯gÜ}áNߦ¡Eëý*JòN)ÛEQ:À>—Jî5 ¨—\ÑŰ|ô÷EʤÏÊ^:Çsgmø0¦¡n?ÌÎ4)[Þ îeyŒJõ ܸ"TŸ“'™„¬Ç úßYG¥Zhá–”•j/º¬>ûÙù{¬ÂšåÏt£$XëP=Ë覟Øê›Ì£'c(rœtb«S!–âáž0Ýf<‘#ëÕ°te{Šemx,E1ðø=¤òdrŠ©äRIã Öl•°EPº,ÎÌqSORXŒÓ¾×ØþpëJ¯@·,Ô• ¦' ÙEº#cxeºÄ:TN¸YÔH…áH¢Y Y9rù¶­¡«Ûα¶'›N°²– ¤k8éy&g8ZŠÎP?]€tY\Zà T…FÖ–¦ª*éø óË&Z[ˆ@d˜¨ó=Þ¸O>|=+)äÒLÍÌ_\ÅèêaØ›æ|>OÎvPÏúÉ1·„”Ø(hºz Ú´SP ‹@¬ƒñ¹Y2¤˜Éè5–…@Qj’ÖÀuòdm¨‘•®‹=WKü AþÇ…¥õ{%•Þkð£ÚR Ðt?&]!ü¦ZZ¥©:#¸4¿BN±8Ú©Ý[F¥Zháîá² ßb–¬aTÐMö…–y65Ìž˜K`Ò\zýŠÑ½¼¯§›˜%wö[üýyI°s„ÔÞ†®n]”Á S€0C„ý~B‘±Ô·yþ…,j°‹=eõæU^»8EJ. Š‚cýff’×΀èå@ÐÚ&«@×=ødɃX÷†8Jòò™›­6~lg)¢±F²ùj–—ް ¢Ägõú8r´“oŸ:×ÏÁƒO>Å€ºÂ©7/!EÎ_qÁCÑ7.¼Å5Í䇟ÞOP¥½Ö¯½È'ÞÉh“Ò,_cþ¯¯ÅÉ=p’Ãá0‘ˆÁäAУAV ¤Ík¯½ŒèåÁ‡ôD˜é5¾ö­K„GäéOs‡èH鰼Ǔ³b˜·‚fXDb!@è>Úzwñò7Ÿã¢ë¡÷Q‚†Š7 ´Å&²cOôZÕaån&ƒ›ÉT× Ù™Baµþ~PDÿû¿n ø-!6‚UÿÙƒíü÷tÖ¬,ª•¶_TKþpO•Zh¡…Û†”WÂÇÿêg沕kéº7ÿðgÊOž{å^•}Èëéûü®±AŸ,ÏjG'}þ´ÎÎÍ•Ü"o|ýk¤Gàá±.œùïñÕKžzt'žŠ¦YS¹‰·i5dÅ#·ÊÉ·ê»u”Ù‚6¾tI-Nóíe‡Ëç©n‹\ â]ZÏ:D•÷oÅ#w}úÜ<uc†­òŒÞbjv küÙߎó¾Gv2ÜîY§@,¦ù«7×xïÁAúz]6ú´Æ[¹xúUN«{øø¡(™…I^îUöýÈ3•õ<𙕷ê£jV¥[>¿&÷Õs5zQW{Y×í©®§­ÍÄžŸgêSŸÄY(³•Ø”æ~êÒ•‡ßÌdköUËŒJuû@“£Të°M»J -´p_"k»díGß<¼ûqªÕŒJRJÜBš¹˜ Žr´3Œ%M$ô  ¥ÌüSºã¶Öëe¡R}¨ú®.q¥B¥ˆÝ âÑJq›b›á|3f“¤ ÷o‘]#ãTµòÒü)%BÑèŒú°tu½Ï¤ÍæG 5U#k'RJ¤“ãÔëowC<| Œ(ºA -÷Ç6[µí6ÅÇz9õÝxOik•I™É 31ªeí9M]Œ*l˜JÙº=ÛÕRës»7B¶Ùªv³Ô§iiÌ-ü ÂuKŸ:( Öw ͬ`Šá£{ç1>¼sãÕby4ön-ݼ‘N‹¼+…ß1ÝÏ?1Öèô¤è´ù¶ŸP-Ž8Yú½ü<¼‘NŽ>ÙÁ?DeÊÍdp³æ_ d'•qÝŠ¥;Úê”Å,×§ã$IÒ âHP ƒ]Ã=Øv‘ÄZUSŽ?ºÛ°ÉJAà)H*­•¼¤àHV³rÓ4-´ðƒŠOλHœTµmU?=¸¹%¦âàó‰…¼¨N °ìß IDATÌÚ<ËNXÈÏPq³KL­V¥Q½×B w Ïßê·EÂ5š˜mïˆü¡­«±4ÏÕòYºé¡·§™¹òVŒPú=Ø9IzÙ&di÷ö€rJçž>Ô§ ÛÝ–‚P%ôy KtM ‹Æ4-´ðƒŒlQ’+6Ì i Ó$ùÝ„Uþ¬C˜&Â܈²Q<1"Ùe¦ÇÏòÌŠÉñÃ; Äàæ ž?»H!4ÄÓ‡{ˆX+Uiv3õÔ—ÕB oRRœ¼Ù„øA^o–¼$T›.V7_íiªRr#„@k •Jg™.éÑï½ëùøÇ±r}Ê×>±¿tèÙ‰¾ÒµfiZhá²LPpîqÑzù³MEhUk|¡¢ë¦iáfRdò"hb˜–*H¦’8².M¡‘Ǹ…Þ6ˆ'—Rn©©6¸|i[Æv5?ŸOÔèÆ6©L{ìžk©›î4K{ëÒB ßW¨Ž¡!á¡t¶œÜ¢$·°Ê•Ë—¸´$yêɉY]â…ÓãtŽîáC;{0ìÞ¬JÓæÝFd -Ü&¤mã¬,×^ùéÅ¥‰f»ˆ¡ÚOݻԸÕm"X«O‚È'I5ú"úzúZháþ+Á©ªrãò»îq T;ã€i "¸˜N>ôÁÁõ)«Ò|Ÿ:µpÿ£þprQRU33…b¢YúÍ•¶*E@(〫®aE39Ø£á)r'4Ã}¥ÑÓB -ÜWÈÚ.¹j½’©+ò^ï©ÞB³ðÕx|(è†w‹4·ŸÚB ÛDépò†W¢áÕ 4(Qí7à#TÓtjÌ¢†3Rh&-—Zø¾C™}ýÝC+v¼…û nºž¢Ø„øî˜PZÚg -|ŸC6¥´{×'o¡…û n*…¬2ÿ–ˆìdÆu’ÍÒß¡PÝî{WïöÐÄ-´p¿ àHŠNí»ì²®,dïµ÷o´æ†îOس3 «Ïk¹Âüµ\swó;ªÙT’ÉÅ$o‰QÉuЬÅ׸’6ÙÝí'hHf¦XÉ;H¡²£¿ß­Ž–o¡…ÞQ]IÑ­, 72……÷zOÕ[þ¬C±,ËÚ$y -¼{(ΔÎQ­S%'/• µ¡0·€”.ós v¼Zâc)äòÌÍ'HQ)‘ŽÃD†ûCèù5R~ï Zh¡…·‹wÄú«–?P”Ò§…î'HIqjªFS%⇉ÍnÑJih8@/l5B( Žôà[˜ãr™@ÉòùØ9ÖÍÊt‰‡[¨*ÃÁ<×ofªÉ¡˜ºµ7q -´ðŽc“ãß¹=Õ꨼r@ËI©…ûR–œìÙ™ª‹¥ÃÉ7#~€ óoPB›Uh¡ZëÎ.]‡x|^a;äl¦¶vMZhá>ÂRÆnæ¨ÔÔ£±…~! ÜÕxí5pÿãâÒÍÍ‚¹+ç©6áqØJnͨäÚ6+Z==>ô|‚¥¼MÀRkmm¡…ÞU¤ M§…9ZÀ-´”Ž|sª<Ë…©Íˆàm†Ôlƨ¤j:mÎ<.-ã*ûwEÞNA-´Ð½@+ž¦…¶„ÌfkÂiÊ»)JqªMqg²îVŒJB04ØEWQ‚P-Óo -Üoh¦§¾[ïik~há~„[GQX‚L±Å6É+[3* LÓÂ4ßzîZháö1—,Ö_’”Ì¿÷=F“3­•Ö\ÑÂý7™l ~¸šÍ§®æòw[¨Þ_F¢M¼«ö…e3K×é·›ï6!›°u'ù4ϼ¡mÍòݬ-ˆfûã·(±i^UÎj›´w+~ÖMëWs{c]ïÛìöúl»hZ÷môë¶Ú|›yÞ2ÿr°›S<ÜSG%øù޶>Q'AµŽ¤û®óø·ÐÂ:¤”§§J¿W]ϸîLÖu7%H) ÕÛÙœ£èø ¸ŽMª(𙪀b>GÖvAÑxŒ{¿u2ØÙE„ ŽÚŽQM¾-Kÿ9Ùi2‰\tÌà,i'‘ŠEÙd}!mr‰k8ŽBSî´%.…µëä‹E|±Ý(w+t âVH!4Biæµ]NäÄÉ®Í`»ÞÈ(ªúv"‡‹8ùe\%†®×žhT*-G~m‚|ÁÁŠŒbh·vS“v‚|b ÇêÇã  nÇ–hÆ÷»6®C1ü›§i¬à-úì6!³ØÙY„9x{ýê,“ËHŒ@ 9 É„·]-‰>é@w.ôe'¿€Ô»ÑÔÚ1Þté³Ùzè.B ´Š`¯ wþ< ÿú7ZÊj ÷$nÜhð=0Κ¥ftŽøŒŽávKS°š:^A6•äÊdœ¤¿›‡ú-¤S$¾´Ì©U‹ãC!"†ËÔä<3©"ïìÁ·E~o•Õx1y‰•sDàgéë? ÈÉÈM¿ü§Œ_~—'~ƒÁÁ]æ¾I>p’@°›~•Ì‘n’å‹ÀâœJßÓ@›%Ò­K+j&½Rª‰U’Ëoý 3çÙó‘¯à5µR>Ui6ŸPd¹8¥Š©£lZ—I‘äijhÝàõÅÖï¥ó±Êk gíËŒ¿ô²¢ý|>o9ßý¯üS©dTÒnÖëê"í23MÎ÷ ¢íÝ(ë;t¥¼dî<Ó¯ü>+Y;ý-Bᶆ4¿—Úg§¯°ðÆï³ÜþKìÚ}¯¡PH]cuA¥cdtã¼Ïr_¯ œ&9}‰àèS¨Š(wi³>«\HìÍûl]“•UùT?ŸÆqâf¯“¸ú{¨C@(Ø(­ªÏ6î©”á S_gê¼Cσ?ƒGΰrí[h;?E›W7M1yWß…éñVîbýÙS-šª¯Uiëö,©›ÿ§í_ŽÄRY¯¶í6Øl˜Û³3¤ªã[háþ„y•­„ª0<Šbxj¸ê&+c‰Ä‘&‘€±n'’T̓UVXœb‘y#ÂÞ=´l‚•l#`ܳ™yŽ›¯ÿßÌ^¿€¦f0:t¨%°pÇI%TzÞÿEºüp(¬=Ë…oý+r¾ƒ»N2rìÄ/ŸÆÚý BÊæÎ¿‰wï'è9úK8/ÿízk +Ï2ýÆŸ±’‰Ñ}äWéîYq~.Oô©ó,ýCfæ3Döþ*ƒcÇiÛõ¸Éëå4Eìäy.?ÿÛ”¢{þ)æìf-=O®@•.mG™¶àÚs¿I¦àÅ?ø³ õ^cü­Ë8¹yrêq>™{†óßù¿ÐÛìyŠ‘ÿ¤N£ÎS\{•«ßùw,e‰ô·£ié‰Ï2~æ+8Á§<ü‚Æ*7®ýÅ…‹e€ÑGQ~¨áà¬2õ⯱¼º‚# zü) ñg™[ï_¡#ã/üOÌÍÚø{ÅÔ½ä¦ÿ3ão|‰}ôÿU:Â×ÇWèÚ–9MÜ$Övˆî£¿Lb®4e~†‰þffTg?ÎÀá%×>ûÔw¹ùÚŸ1ué቗é9ú)">{£Ï†~–áUf®.Úó!Ò¯ýïˆÒÎߢÏ$nnœ«Ïþ&霂ÕýØyhéW¿H®¸@6¥ûØ?¥-¤rý»ÿ3©lT›¡Áê,**qŠùSÿ†…¹¤ï»ùÜøW™xõÓd‘Hí}à¬2ýúïOèÙ)›Ôøg¸qúÓÔý„>FÿÁ÷’>÷o™™ºëÙÏ®‡ÿ%2}Š™Sß$ç^C <ÅàÿO½¢ì&˜}ù×™>¼ÃÿŒáûP„`.Yh|—`Š-&Œ»YYHdU$^ -ÜײD1S(Ll5f5QZš×¨I•+M3Fà xÈf(¿“ªª˜(‰2£’¢ ò¤’ äód½¾ÒürוÕRÓ„¹pÿC$œÇÐò³´~ l–®‚2D0dîô¿G ¼—pçLï¡ìáOÐ5pݢȯ°09…Çú g”¨ÂQ6*/“¬M|‹¤õ0í¾×Yx‘h÷(µ\©Ùo2—¤}0Krúï‰÷!TÕ±2?Erâ3XObn?ûÿ”Shí{ñ¥_ŠÉ&¯Í_F„Nf™ôøŸ’‹Œ‘ÏBÛ¾_$æÿ ™8L ãa|Áç ïùÇ´uïCm0Qëhþ=tÀÍ?Mÿî'Ñåyfçü5ÌÅϲ25Šo0B|2N÷® µchõ&q;u…Uí!:÷„(Îý—&ýñ‘ŽÒµó1òj€îCÆò˜8Î>ÚÆt óMbþ m.2éŽc£ØqŠÅ$µOèQ½lj;c ìû!¼žFó®°î}„Õù0G>× ¹Å¯lôÙ?#?ô›Xúç™zõ3mÝÁ 3¼yŸ•5S¡†ˆîø0Þµ«¤æ>O¡ð‹ä3q´±Oѳð’X<Ÿ"²ã#ôøÒ$¯}¶Éu°S—XÌDðwwá¦Î’XÇž:…ÝóËô«_`fP|´íúQ o>‹-% bµ£}àeÜè/jÛ’›`6ÙKÛÞÇQóo±¼2Ï™!µx–Þ'þ,O'F˳”.Þ¡ãWgX½ñg¬õþ¿Û|fh”´w˜.æ—JŸ-„4¤²iØ{ -ÜO( T\)ÓŸ^Xº±¥P½“üouüª¢é ym&—3¥ Íov‹i\;ðá:E4=Ú(X”‘]¿€¯í9.}÷#}à_3²ó –'H1´_xÄéaîÒwX³Î£õ¾CÔj/¸K$g_'™ à6F(‡ÛpOÜüˬ.Õ»Çqk–ÿnn‘ÌÍo°R˜CUTk™÷â Bæ"VH'^˜'Ÿü:«“4CEÑ:@Jtÿ>"ûH{³¬:ŠÙ‰nÄð„và ö4y> B ãñG0ôÁR[מ!ïtÒÛwÃó-V¯ÏãÈZäöÃøÞ&ùqò‹˜íGõ¶QÈÉe’3¯“ÌUú#T¼x‚]Þ¾èаɬœ&>s™ž¦ &€.¤,)+%sz(&†¯Í3„?ÒÝ|Z‹`øºÑE|‘hÅ+¤—þŽÕI«Üg]µ@û‹oü:ú:þ`;ŠÔnÑg6N~šøôKs‹238®D³ú wÂ'¬Æ—)æÖðu~€p0ƒ’üF“q^ÄÎNš{žœDAg‘|{'¬L±’PAè˜Á!tã•u¡®ZíXþ6dxÞ@;~=H ûZJa|e ÓTѬ‚‡Ð¥ù»©ø ÄÔÂØS_$›ÉñÛrÞ»ÛÀÎ-¾ôH0ðÕ€¢ýˆµ¼šj¡…ûR"sÏ&’t%—¿¼UÂ;ôþå×JPhëé"”Ï2;½€ßÔî-ùƒ,`§Rx¢&9«ŪlWÕÐMbÛ£í½ ïú3Ù\!PD×.‡Ox/íÆo0±öAFö "H\¤tKB@‰âí%àù$ûö âÕ²SI5tŒÈ^ü…}xì‡ÁÎ!L7^¶zI‰Ð˜Çéïÿ·DÃ!(,3÷Üo—k]þ§Ñ'é8úQºzÐÜ$nò¯@hT?!™Ául¨ðB *v6QõñìFsŸ#™Î⛿ Öá’ÐRTJ9ßúvi(z\b‰b ñ HßGðÄöðV÷‡‚[]–œgmæ2úÞEtüç™q¡â¤pr‹8mí*×R–·£K{ŸB°WK×ÕGˆÒþiÉêž*í7j´àƒU}–FEVÎQèûeVÆ_%ˆôoÑgn‚|üE¬áŸ£S9ÇÌK\æ¦U×Û…b¡h*Ùô-Evqm¤~pêhf'fÏ'>ø>!Š8ã_&_Âç)v°¾KÙ.*A "„†ã‘((†âò[»{ s õ(ªRÈ϶ÉëáfÉçÓ™Œ‡ UÚˆ)8M¤ª”M³º›¸œË'?~ùÚ'ÿygçc½†j‰Ôî{H˜*fÿ×əҮۋV;&Ðt?+c!ü¦ŠVvôX˜[b%ë ¬0=æ½%PÌ(VøFÛ^ry (ÖXž»Àò…/°º¶‚¢î'2¶EèÇž$9ó5&27éÛ÷Q4oÞ®½èþ}˜Þ ²0Çìù¿!™œ {þ/ðíû ƒ“¹òW\}QÇ×û1zw¨›ÌTü=OÑ™ø[®½x OÛ{é;ÂÒø·XËCöÜèÜù¡Ÿaò­?fM±bc„Ñó9&¦4ôàzû»ðø£(B ùG1L/£=,ßü…äôíþ¡¦Z°†0• Æa¢=WY8ó;¬)‡ˆŽ@U xýa4u³ã44ß(Áü³pÅBÑŽ1bø†'_ÓûAëÀôJb_ÄðźH\ü#V}{ðºQÌ.Ú­ ,^¼Š¢xðx(,?ÃÒÕïRÌÀ¢L î~Vp/ý+LœóÓ5ú ^¯¯¡Vf`ˆX×·¹ùÆçèØùÞŽáT÷Ù¼ÜÁÀ‘'É]úsr©y‚­ûLñc’=ó9òªŠÑwU `ºÐ0±¼ÝXáv¸þYæ– ÔØChZ½ýUEõí¢Óó §Ï°htÑèçô&qõO˜ ubú…f/Dâ:Ê…ÏØ÷ ¼Vfôæ/þ)ÙÎ÷Ó9¼›žà7YºðŸJˆî½¨Ùe<‘Í-AÂDóö“›þæ¥2ð „|F) µ>NUJ¹úÜg§ØÌrpq9WHý‹‰É¯BËá·…û²îçVÖàÁpÿ¯|愲§¼¿JÀTøëŸa$j6xµ:Å,‰•ñmÆØÕjB‚Ñ!TÝs÷N£X‰¬®X/¯&Mõd±¾¿YñÒ-ïuºK¤§ÿ†„þ^Ú»†ÑEÐuÏЪ|Öc«Ìs{´ˆÛj”$æQ"aü¦¾iº;™¼3ËS¼ôw_眾›>y„±6ÒÉpáÌy¦»xj4…³WçIźØÑ©C&Ëç>xF¢Zúñz#* 7µÊ+oÁÞã‚2Ϲ××0÷·³Ó'ŽC.“GXL] 6¥2lhYYxUˆËÌt‘H›ŽÇRšKµ:H)qòÉåÁÏz öÊ›œÎ‡yô›÷l]^Uý1åk³|ñ™UrŽ@÷š|àC'ÖÈŒ´s4r‹gÒ@ªQSRJò9WhxÌ&yIIf5Í/̳0ØÅ“»|„í- ޤØ(T3åO -´p‡XwTÚîœ,‘ÌÏ'Hä d”Ò¡¢ë„ÛÚ‰æãÌ­e)úWW ÖFsr¬åŠÄ¼z½ñóÞB:,-­s$ŠnÑñ°2?Í¥séðˆË÷.«~ JOHåR<Çüb–©¬ ±yéÕÉ\©]í1­ÄîIµ9`m%G:ï"T•öv'•cüÚ y_ˆž‹O!]¿GE±Eðú,Fw…¸™p)–ŸQ.™c-í <¿Šþ޾x-´ðƒÛöþÚºÚKó\-;ê†EW̤°–baUâ8ÓÃP؇Q,Bÿ{o×ußù~ÎÝ{ß±$‚;%Q;7q‘e›”%Ò¶ä$Nìrž“TMòÆó&õ2“I¦²Ìd6¿LåMâJR±ó’²Ƕì±dŲd["%‘ZHI”ÄEIpH,ݺ±ôro÷=ïnì @”DRý­êûòì}îùó;¿ß÷Ç+T‹¹ ?{þ†l…`¬…Ïlm£óôIë$–SX}Ë–ÈK¤|«X.Ñsê Š i‹ZDÂ>z+Ž®ãÐÁW83Ã5ÃìùÄ}¸ ª¢¢iB(„ÂA|z_¥vÉÈàE^}õ-Nglj[×pw«É¾o“.á1–o¸—uþQžyá(YiQÛv ›ÔÃ+M³hH„ð*²”çÕ7¨Û²†z_%~½ªâ‹0} *P¤¼S¦)¨úϤøùþ!\Ý¥è‰á–Jœ<ÜË;Ýp{Kˆ:ÝåRgšW ¡^€¶5µl^kñÖË=œìspMƒïlAá¹§’ˆˆÀІ¸o{ ‘)“¦d—8;À;ïfÈds,YcÇ:ßîãà»c8–ŸÍ›cÄ Ž4*9޽=ÆÖûü{<Åë'r )‚»¶Ô²¢ÖÀ[ É64/§‡"P½u¡^†F/QÄÉæ9óÆE.¤‹4ßÙÄ·xxýÀ%Φ\ÓäS/!á›îS*‹E<ÛÅ¥Q#èåᇚÈugxíP’13GK{Œ;–ë¼pV²e­Ïð0/èlèð›¨z3Y*òîk½íÊãD£Ü¿)Jsdü5Ÿº˜±™¨^¦VQÅ5Á¢\j4Ua&·‚,9»è’hô¢I¡ EA PtåûĨtyH))¸-+¸{M^SeõÊUŒ¥ò¬ðãDtÈkì=1„™+ÑÝ™çΕ&š(M6T–¼Ä¡® >KGŽôr>=†9ëž“Ê äxKœ;þ6ûºó, K.ïäDl5Ë::кO®Õ99ØÇÉcoq"¨¥ g½Í­k$‘†Õ|òöföýð åšii\ɲº«·ÞÉÚÆ0ŠÌQ,jàS[×Pç7çê=RJ\w¶]ô,ˆÉ¬ëd9£7³ÚïŸü©TH}äòãìÚ\ì²iÞ¹œMJ??{KAh÷nk„gSåÊ•¥+£lÎÝÐJC@ãl(Æ›|x†Gx¥;O»á"•{Úèã÷Ò“ªtÕÒ©_UCÓ)‹Û¢´Ö¨8Ýݼrd„’Gþ˜âK!vßž@üèJ^îýD áˆ`í­%ú³|fOVůØl¨aÝ•Æf.Ì©þ¸?QÕk²ô–&ððÜ›yz“E^?_Àëˆá1ºÂ^cš¥.lIlI”õëcMA°-ÌæB·¡™%5å¸þ‹’Q‰4ʦF‚¦‚=q¯-±GòñÀÆò¢7NmˆÀô°úŽÐ]’ôzÚðè¢rk*'Ù~P¨_¶–õ­ ºB8âãbJÊÑXWö•´ãÂLJPL/ ËWðÉ5‘r´gŒ>GAÑTT(IËǽkî¡Î§#P1z_B:ªhãí¥âÖSöù´XqËz½=ìÛw˜»7¬cyb:}Ÿ›àôé $GK×ÜJì2'Õ©B ¸%Üq]ï4Ø)ÂÍk‘¨õRVÀu¢ˆÊæbÊ@åZŠIáSü‰Tãyd勪«hÚ¤¡—[,16âà Yh ¿¡˜RG¨.Äšõ‚ÂÅyRRpWb%¥Ü7ä4o•™®9sm>¦¦™oH=UUðùŠ® D™I«veœÛÚ¼„ A(>U­]ίè*[?ÖÀÅ®Žè"ð±%D” Éĸñ›ª±¶ÎáôÅ,Á‘ËWj(•ù6þA‚·1Ê«Ôx‚ñ¹6]àºwvÛmÊ‚õ¦G8Vci†Ñ"Ê΋X¡*f‹’±¢c_J§’ékÛÊ*nDL~/^E IDATÕiV›óš^“~™£Ã#œê¡u™»à ™*>'G&#Q<¾xøýeTš‰[r( ‹X8ÄHÿì’ÄÒT,Ã¥·5&dZ¬ö$y# ÞÕ·b(ŒŽJ2\Ô {‰y”² E\­,ð„["7œ¢»ÇÁò‰ Òƒ†sYÔ¡! FˆP4ŒÕ›¦X ¡«eÖ¥©'Ýò«¯¡«Pı4tEA™*œ&^sAÐtL“ô™Äƒ*Y¼á(¾|9{6¹‡XÂÆ -ßçkÄ$T“Z7ÅH>Ę‹Åp³úû²(9•xÜÄïƒÓ§‡é¶rŒ¼P’ Î:؃y ^š¦`X Éþ,–â!èÑPS#ô\p1²Yêë¼xJ6B™ê"%ãà‹ýܲ³„W€"ðº6©{€[?ûËÄM!$é³/óÂYƒ;7ÝAƒ)¦œV+'¢R‰Þ¾»¯=#¿ôNúG‹“¯’,u_øÚ7ºŽt/h2ÝPìØý¹-­«×<#ÖÄá`1^Ó J}»ÿôÉo}ý¿,<ú|74À¬|&`¨Ê|¶32j:ãJGÝ´ˆš3.Mu“€þA\¤º\|÷§ÆÊ*?@µü4´¯`eMbú¢¨hX(õ~ ÒÅÎ¥9}n˜pýj¢•x¯–/Dý &<8ÊT«ˆ²40=M<–˜Ñ.ƒ`$NpÊÀS6*²*Ïêjj¦¤ð0Ø,› qfùÃÔMi@$ãò·œ³1óÍ0ðù5^|õîY¿ŒÆ E¨én¥Ÿt:O}­g6]„ªRß0c€tDÝt§”X|ºñ€î1©Ÿòزð†¦$P5¢‰é: ÕЈÕNæz¦ý–ßœq·¬V&´B(^É«(øc^®ÆÜ- á§1ì™nu|M'<Ñ78®j×Užû#ž+Ö-…D­wÖsÍШ¯W‘²¬ ïíÎ0jx¸¥QCPÞXÔÔÍPí,¬À¬¢¦!ç¸äYwªcÜì.5ü¡P­åH”‹q—ž,ªœ»r1¢ ÁòkÖÎ*nXL®V³¦ÖÕæÚ¬åviÞ(4._K]ÉA(ú„À˜Te_æ­)ÈôœäP:ÎÖ•ñÉETº”\U5}š.“Á_»r€‰{ÁEcJ9ãðD¸÷áÏ•›îgIë\Ëÿûihn|°ªÞ(­·ßÏä±åêõ¿wË<ÆUBâŒæyñ¥ wÔÓdÏóEÎ-æ4`s¹ÙɤäÈÁ—^ÛÞðÈY!Äx$ƒy¢˜s9ˆ²7{5„],ÚPi1Ú÷a¾;ÏvnO vþ‹Œæ%Ñv7_j›¾0•J²#}"KßSÓ®]9ecLU³®’raåLn>ø»ŒG˜žÁœ4di\Ÿv½.1W`fšÂ#5at6=/“†CW†ãœÓã•L¯ëÊY'Ù’ÆÇÓŠøyôó˘`±zO›¬9y3>jˮΓç÷>þØç×Þ³ñ… &.»8•ë†i†ã‰UÀÕ­ýªøÈcQB57:BWr„¬·Â¨”¥»o˜aÇ%‹±$ê¡0:LWjt"Íû…¬—(å“á »RƒnÖ%ª0ÆË/¸«–/ôൣ£8B¡yUœÛÚ=ÌAX5S¶ýïíª"àæËÒ$+$&§F0뽄ýãÒr:{“dìâ0c/5A QÌñúëYîˆQw•7gj0ƒÜP–7Ò ëš-‚º˜W_%Ðaƒ:»¶P*+ÿt6Éù²R͆+gþ<³­nV[ž=qìÐÙǺ<¡5 Ím5woÿøŸ«>È6VqãbÁBUJ—¾Þa†‹6µž[3%4úx'“§!b–Y—ŠÎdškßö*>,I±PB¨ ]‡³ïŽRXRËß/ž¦©Ñ@s(ºeG xÜ„b‰á´M¾$ð‡L‚^e–âÍ-¹äGm†ÆJh¦N4jÌ1Vè~“°Å\»GU÷šDý³mteÑ%5Ç‘ÍÒ‰‡4ì±é‘R׈„4TÇæÐKIwÄhoò‹³¬}KN‘“¯ö2´4κ¥~¢¾C©^R´óœÏY$j­ò–®º»‰¡à­œ'® L’J ¢ >êë l7ËHÁ¦çÜ(=”°¬"EÝ¥8Ç¢>6b3³¤É‡&@Kt]fÔvI§lòŽ…¦kÔ×zñŒñä‡(ʦëB`y òÉ!z%45‡9×'T,R*JÂnÙªØ24"‹xؘS“¢j*KE›$¢Ø6–Ϥ¡ÍO“ªrqØa$ãÐu¶@ΧPÌ+´É9,_„ Ú襱ÅÄVr e‹¨Cct^´éCN‘BNÁ© д$@ƒ¿jÐ-1œû6ʺF†R„¢KI‚néD½ ª#0,ƒ†z/~ òc¸ /õ->Ü#ý úð1N1õžxŽ`ñÚ䛺iê[>¹gkSDz?3tãjåîZHY¡ƒ‘2—N&ÿ! ŸÔLã/.[ÅGà¦Ùò{tÏ} ¦‹Õ’S` •&ˆóës¦©â&ÁÌ{PÃÀ#$‡]Œ<9©RãäJE«¸ÕK‰á7éXYǶ& $hsnç$TÏHÀ+Ð]0Øq‡3'ûÊ2[U(B\†³W`†¼Ü·äõ×Rüüd_Þ¡Ú›ï‹RE PBef¡™Bp)”«ž4'IR½½¼Ò9‚Ï?Bo ÈŠŽ:"ÊÔ4UÜŒš—Ž¶až}ü…κ ,µ\.ŽŽ ªIë2//=šoKnià{‚h3&Gmcˆ5çzø‡è!Úcû¦ùóÝ|÷¶c¢*åy9.<æ¤<’.#}¦[¨DšÂX >Úº/ñÃožÀµV[ÄU|;î±0 Ð[ÙРby6ïhf¬ šŠo–¡»ÀõóÉéå»YE%d©xokà‘Ö"ºGAÕttMå– ´Œ•( AÄ«@K”OÅ¡à.o§hÓÙZÃÖ& 3›ãt¿ÃíM¶ïôNl„¦²îžzZ²eã®OEøB|j— ŠÀЬ Â…9Èôdù®ðæGY˜†oÛ¼mWs[Ç Q¡*¬\_LœN¥;ÐuúÔ×íûùÿJögÆóWQÅå°hJÞ«2*ÍHSÅMˆŠšT3uõÓ•Âã_=z%¸B¤V»"”P¼aÞI2)b53X†¬Ê”UUÂñ¹Àš¡ÑÐ0}j›~“ú}Œ€Eí嘇*.AªePcMJÊ`¸R§eN°_EâÞ+öKÑUbñéýPý& 3Úã Yx¦2Li:‰Š{r0¤´Q<SAµ–&0-¿j_žgz9Êt,9îhcöõ‹¤l¨4Çã¾ Æõ !Çf$‘X¾~Ó¶/Eâ‰ÝB(KÆÕ¼¢rq*å$å‹tef(ÕÿÄáýû¾ÚÕyêDѱçÞIÉ‘ƒ/¿¶½¡qœê`d4“þA•L¿ŠE3*êbÄ_ÏÆf‹BvŒÎ ) PÛXÇÊ„EOO?—†mJªÉí+›ðÍ´J©â†…,ŒòÒóiïoáÖ @ºE†{ùÉ/‰¶Äؾ-AX<=ŽŸ’&–1M¾MK3ÒO’êÉpàA0_`ù=abJž§Ÿî¡èñ°òÞF6´(œ}»çŒâYRËÇî ÅæÙŸ]`Æ5õ|âvª˜”ªÒ±é;Ý‹SÛÀ’­ì71“¶oVË<̧_ï#µª‘íµb¦œžèC)W çdzؤsÈdžõÔÂ÷õp:«rÿΖF#ÓÆ,NÈ™šf ­1•ÜÀ?=§òÉÛ‚Ôx¦ŸŽ¥”¸ö(—N¦?|·6Eðª%Î9ľ“=ܵónk 2—üŸó}¼¢ša¨‘xMͺ»7ÞßÔÖñ%Ý4Ö Ax’쑊šwÊÉTÊœ]°ŸßÿÓ'þ¤«óä›E{ŽxŠ30êü#Ãé¿ÞÿÔŸ}Ÿ»WŠͨm·f¾MWŠP#‘”¤I$`0Zyfú¬Z€lÇlᣩ¥‰é04$k—ðjÚÍðÎVÝ 6á!j²ÄÙ7zxñð¶æÅ2ñS䵟_àD +âS÷×0Ú;À oÛ”†Gñ/©ác÷èó¯œ#«ZìúT31¯ ;0 —Tî]áÅgçØ÷l7Y·à2æ‡Õ¾1î{¨s8Ãý½d?iq~Äd÷éûI'纤šeÍŽ6êEžãû/1²®ƒð "·TäðÞó¼"b+êøØ­—Þîáù·Fp|A¶Þ— -ªðö çyóœMÉçáÓ5”ý<]—S.2‰q÷?n_N«ÜrOœ¨(ðúþK¼úVÝN,‚Ryã/u ¤ÐiX¢¡O%¬9xn‰²ªÞ¾%Ȉ¦²~CŒ°WÇ?m̼XÁú©i|åwÆ z¸Ó Þ9Ž›å¶@Õ½¬4R$G²@„ùD4êqfIYVÿ^ÿÂAŽ%,Ý0ZÖÞ½q{4žx0OÜ!„§ì¾,¦òN Órn‰”cvÁ~¹»³óÏØ»h ?÷(¯ÿñªâ…†Pf9\ÝCu&$ŽçBÎbi¼Â¨$K f² Š KŒËø+Tqƒb’Q À0ˆEt²‹h@!Ó] ÖàeI‹AÖp8?V"$T ¦©Ó×Sd,"ÈäðÕ‡Ñ ”I *ù5S% ±ik Ë*%†ÅœMwV¡.¬¢º%2B£Ñ-¢y ü~¥ÆCz´ˆ9l“´øâ¾ã£\È”¸ÔH,3ñi’“ê°¹0l±¢bŒäºg(¹ ç\ÆŠ%‡-Î(gz\Öíh¤ïña†„À04.uXQoáó•g¼æ³XÒáèËýX›kX^o sY. *Ô4XèRbç ”ê<¤Ò*­º6I1ñ©ŒãÔÌø>‡E²œ¸djðN)‹ô¦|Kço"qÝÉ’Ê•§¦ëJ8–AÄ ×­½{ã]Bˆ{ÃñÄ]7Ê\¼bˆe_}û·ü•“¤o­ ñÕ]ͳ¨ ¥””œÃƒç星—›¯SÞ!F—¢êžk1IJIv¤ïB‚”_¦œ’“+.]tY×´œb(ÿ°Ë¹\Ùå¿åï¢bI sψ™UOFSóŽO›¹ÓÓ3wš©ÏÆë+ Žrt7õÛ–—£È\eyvŸ«|1㻜޷ݘ;ÍLËçii.sRuR<÷ó7pnßÎÇët(¸xŠ×s îiM6céANu‡ú[YÓDŸQVÉ•üÚwÏðÆ¥É(oÒuK=ÿôïvŒ¾ý³.?*ÓŽÕxtÓX¹îî­þ`ÈœõÛ–»_ D€f5ºaı¸„Ž Rþ?¡NQ€L+eÜõefÝrú$‘¥t»†Rû‡’ýß?zðÀÑ¡Tòb•´¡Šïáð8sž¸¦H׬öé{⿜ë“ß§>œöç*ùg>¸â×9CsÕ3SE­<,ßÔŠ'P1šSæX©/ׯy<›Ù®9óÌL3W_®Ö(-Àí›6â ê•~h­ì0½h‘á5+Åü—}Á‹³îT%Å¡žüUjŸ€n˜ÆŽ=þ·H¢æ·„À¨4~áæå|ÓU¸s Ì¥1ÅÔ¨¼%+Úö…¡Tò¥Ñtæ‡Gxk(ÕŸ,Ú³p?r‚p,îÍdò—õ·½Nqß®=DZt*9ðÂSÿìÃnÏBq •.—nŽÕö}€é‹^“rTÕĬ¿ŽÊ™E&û¡–s£BÑU±IÅê »ß&ᩌýBÅðø¦&ÀŽâ›•±Œ95 S cç‹p<¾<’¨ùu¡kÜ÷sÞ™¯9«…ãš])‘ÃEÛ¾44|c4~úÈÁ—ÞrìBwz 5\UíN"¯õ¬ß¼õãMmíüôŸ¿ùÛÉž‹×§Ú\B 'jþ$ÑÐx7BDˆ_ å µIÒ`6m©ïrNqã˜Å¨T*3*IeXš —+`»„BÀkÎPäZBQ®Dq³UfäC-çšàZ•sâZª»?TˆùŸ®¯WÊi~ªrüñÂÜC „4@ ¯vÌœ‚‰:¦ËÀ©­‘Râ#HÙ74¼T´íWGÓÃûŽ:Ð娅žª½„›w=üÇ5Í_AºgïûÒ{Í!ŠB7`Û4K¦>@Ì{y¡*¥ËùÎKôäJÁ64[Øv±"†=Ä…R˜UͲN \‡‘t§¶™˜çý‹Vs­Íj9U|s$9gÖæ?[ùÌ ŽãtÚ¶ý²aš÷ )Äe £fÞ{ŽP•dÈtz 9àØÎIà0R&z©k4“Rö§RÃEÇ)} æÊe•i@Ó @ѱG*€pþƒgæS^¥^mË®‡?ßÔ¾ü+º¡'‰tÓ©þc÷þüwº;OGå¾]{¾‘hh\—¼tñÈ¿õ_EJwæó'¿ý÷_زs÷ßEâ‰O Dë}îy¦ïb÷מüÖ7þF× s󮇿Ôܾüw4]¯z§¯ëÌ©ÿ¹ÿ'OüoÇ.\ÖÑy^í,§S¶ìÜó±¦eËþDÓõÆJ‹ÒP*yìðþ}ÒÕyêñ;Þp¼Ö¿}Ï#¿'>ÂYè>ÓùmÝ0=3ëÄkýwmàß6µ/ûUð²hÛ]]§ÿó‹?ýÑ/œëè}ÁwªB€?à%—Ë TF+(ÂåRÚÁôéèò£i:/’U¼4éSKW¥kU|Ș}R*?ZØËÙÝyêbwç©?œJ«{Å ¯³Å„`óƒ»w·­Zóu$¦€s\Ý0–µ­Zûºnˆ½O<ö·oxñ…æ¶' Óø¥hMMÓ–{ž>÷î±ls{ÇBÄì‚ý½7¼øÂ|ËsGnÞµ{Wëª5…À‡¤AQ j"‰Úæí»ý›'¿õÏ¥Sɬb©b•bdzÓ§?——à­üš„: `¦²õáG~«eYÇÿ¨üß9@Ñ óÖ¶UkþI~ï=1ço$ólçèæwªuåêDˆ Ryñh¢v׎=®yîñ|æì‰£oꆡܽãMÔþ^Å–þˆbSû²#„˜Q7 mûîGþ8ZSóÀ–p04Ó¼·uÕªoŸ}÷èCgO{õšÎ‰÷€ UU5 D—bI¸*~sÜ÷AÒèi¦ÍÔÐÕ²ëL¢]RtÐ tµ¬†¼&÷ŒUTQÅ¢á”$viÖÆ¾Tù,nLDb‰ps{Çï „0ÙûÄ‹O=ñ› Ü-»öü~´¦æw›Û;~7K<žì¹Ø³÷‰ïÿÁŽ=Ÿ»U7ÍÕÍË:þª©}™‹"bvÁ>¹÷‰ïÿÁP²/‰×Ì«<§èŒ5·wüG!DÀ)¿ðÔ_ͤ‡oÛ¼í—ZÚ–ý‰aëÖoܾrß“½1É 2có2õ¹”îþŸ>ñ[;>ý¹ÿ‰×| )Ͼø“Ç?ß©ûl(¯k) ,c¨¿ÿ¯^xêñÿR¹oמ¿ŠÔÔ~®¹½ãÃñÄÞô¡îÂñDp>í|ó¥}Ím*„Ùûà‹Oýè7G3ét8^³ò¾÷|S(Ê’-»vÿtª·fuÍmË~]ôÁþþ§_|ê‰_Y¸mËöO/i_þ7“݃¦¶åË"‰š/!„8ú䟾¹ï7ü¡°wË®=ÿd˜æ}ë7oû£î3§ö8ó„ðA`áÖ¿BAÕ=¨ºkÆÍ$-Ы2´Š*®+Ø%9Má‚îTo&h†Þ ëF;àž{÷ï‚°Î8þT´¦æ7¢Å·%{.öt9}¾ëôéßm]½æ1Ý0VH)ǺOŸþÝ®3§Ï-¤¼ÑLfH7Œ@vužú˳'ŽGJö>þý¯…c‰ŸÙ¢c_œï _C©ä9Ƕ3•GöPªÿd:•Ì´®Z³ !š€ìÙÇŸ¼ 8ûîñïEjj÷è†Ñ¡ëzp|f¹º®7]½ÎÅH"±Þ0ŒU@©»óô:{âøQ¤$J]ºåžß‰$jÿ­nwꦹtíë…¢Ô‚´Ø÷ß“—ºû^{îg74/ù=Ý0W „Xw÷Æ;…""Hο{üÿèð0£ÃÃß&÷Eâ‰uáx¢6yéb÷"~þkŽ ÕªÁKUÜ$˜A¢1GÈü@PÖoÞöÿ®ß¼m<ظ*¥ôÊÚ»6´œ=qüRòâÓ?©Iüs$Qó[£™ô¾—Ÿ}jïá7¯ò^}ö™"@JyôÐËïŒç/Úv!Õsñí‰Ö‰÷`º/!Xwׯ– ;•wý–­ÿ°~ËÖñS&¥Ô(·ËÅñ¹R;…à¾]»— „&¥=rpÿùñtŽc»Žm¿U)+„ü¡P ¤$7šI'Ç+J%3éTj8ÑÐ8Y» ò™<ºe×îï3¡QFÅaÙÓUÆ&´¹˜_>Ò¯WU|Ä güýÂ-„(ÚÎO†R}]À$‡”2=:2.$êšZýÁð–ñÌþPøÞºæ–õgß9öò‚ÊCZ@ !Ôµwn ïh%ãBÔN§R?rìBrj›¤ëºŽm_¼LÞÒÕÛ90:2’­)Û¬©þ`ØH^šrp¦–5šIjššTÊÂ~JŸô™î'•xhd‡’ÉÇŠNå$>Ùö¼cÛI®hÀ fHÑÚ€6NaRÅ"P=ÑWq=#Wtɧ{»…Ëd¹Ù1ˆ”Y3šIŸxú»ßü Û±Ýûv~zu8»÷èÁ—ÞºÐyò€nšæ]Û?þgºa¬@Ê!ˆmÙ¹û/‹çÁ®3'ûç[^$ž¨•È~hˆ$âŸÑMãEǶíæeË—mßýÈ÷JNQ9óα?Øÿô*¡ŽÇ­p¼ÆJ'û²MmËkÃñDbVo¦ñj–£#_>½£±)'„0‡RýÏï}â±H`˃»7G£5KŽzåíÑL¦ÿ2㓜O;|ùLûÊ5#\¿iëCÝgOslÛin]ŒÄjwBJyIJ·çÈ¡—ìÖÕ«sB(¾õ·mØûÄcÇÇ–Mm·„ãñ橽ɤ߬ih*Tß|ißΜ8¾÷ízøA]7ýG¾tx4“¾¬+Î ðÎ|x¬/‡¡.À£» l©„,uÑ‚ÅÒÊ"²ŽGúðhÚ¼…€¦ˆr¿qRLM ŠÉ ébpU;Ê÷ÕíÀâq£l¦\Y&€˜@ùŸ6“'‚Ò©d÷Pª¤¦î3áDüßo{ø‘±ÓGßzséÊ•ÿN7Œ‡6í|øèà7¿þÀØp&µýáG>IÔ|V étŸ>õš—u|Ͱ¬õwmà?÷^<ÿ¯Ó©Ô¼ÊK§’—ÒÉäSÑDí—#‰Ä—úÂodKŽs<OüŠPÔ[4CôuŸ9}²Lt!ß6ꆹlÇîGþÕ©#o^¿iëï!æê ¢aË®=˜¼ÔýÌÑC/¿j oš–µ±¹½ãÏ·?üˆ~öäñ®Ö«ÿ›®›÷lÚùÐ ƒßìÝN%gûÌ·NÁî²ó…_ó3‘ššß{è ¿(:ΑH<ñ°nÛ¤¤Ø}æô·Ó©d/ÎØ»Üžeÿù¡/þf¼èØýáxâ+B(±ñº¥”>°ïpK{Ç)Ý4WnÙ¹û¯—v¬ýçN]ºbÍWuÃXÖ°¤í»O~ûᅵNõ_<ÏbÙÿóöëÖÏ%Bß˱¨¼bŠP]„@€G¯d^pþ²Ó®¡ŠE/ކ&Ð%TËm¯ jèÊl¿ydÇPu~}‘ã.Y AK]Ô'ÔôE€éÑZ’W”ÇÜPé -Dåw[ø¤ïªGŸ ݶX|PòXJIç`_ùÎF+®}å 6¥w.|í‹ ]G2W)â¦DS{GÛöÝ~Ç0­;A"@J!®ì:sâØÿ¹÷‰Çžj]±zíŽ=ŸûN¡ðÌ“ßúûGú—ÓMó@þBçÉ/ï{ü߯mni½Jy?AJšÚ—Ç·ï~äë†i>(@Aˆñð~é §þxßãý­cÛ¥Ö•knݾçÑ'…"‘B‚,9Ž}!rº®ß¼xñà¿ùõÍHÜ»?·­uõê>@&/]üÞ“ßüúšÚ–ݺ}÷£ÿd˜Öò‰ˆ>Šûݳï¼ó/üôG¯\Î(j¾íljïhÙ±ûÑ¿5Ló>À*§ù¡þþ¿{î‰üQ:Õ7Zóu;v?úÝ´V—‹“®cÛ'Pİ®ë÷Nô Üîc­«VÿÑXv+ï4œBáðsO<ö…îÎS'ßï92_ˆŽ¯¾õ:°^Ü(Ûì*®ˆûG\Ä~bºP]ÄfJScQ’IPÈšXüfjR¨.¼v]Ô´²÷"6S!K%dΟ­LC¹?8:„]šp•ÈÒñ _û⦪Pˆ$jjoÛ´í(|B‚äì‘W_úVwç©Î¢cËÍî^׬EÂöíïî<ÕÐÔÞÑ|û¦m›Ë^-²ï…§žx>=Ð_ºZySê ¯ß´íA(t? !é=rð¥î:sê­ñàšnˆ¦öŽUëîÞøëBˆZ)9ôæKÏÿpéÊUK"±ÄÒtr’|^7L}Ë·?ë‡? ØCÉä_|êñ)·uùÒõ›¶þ²b5€”òØáÏÿS÷™SÝW³2žO;+éüë7n¿Ó}–²aÒÐh:ó¿_|úñ—Baš6¤©½£íöMÛþ„h‘ÈÃoxብ+WÕEb‰%Sû¤é†hn_¾bÝÝ~ !Z@º£™Ìë‡ìûç¡dê½þö×¢ã«o–V…jUܸXˆPõLJé²o\øÚ7:}§>’*àY¨ðë]³<ó-o>éÓ¶¹Ê€Å—s-û³t Mû!@LfƸ>š»P/§ÇÃYàa–ÙÆ!¦äš#fU¼¯x¯ï¬ÝwÆqú;gq³~d±˜EûJyæ[Þ|Ò] ò^˸–ýYHº…¦ý å{.ü+³®ùëb€ë²¯;ýgN/ªÙåLQ ºp]VE—hõ ã,&¿, 3”/0š›ò&ÃZÌU ÈlQvSZÄ.€2þÏS(ßPfRÓ7R ¯qš½Î‚÷q³6r7Üfjr7-?’ÄUTq­¡uÿͯüKÍgþôa=Z{?’¾gÿw÷_‹{•E-0zE¨.Ê^*ÖÌ 5Uª¬,¡ºhÁbQŽü³`‹-ܨ„îûµ&@_äÕ  —!6¿&7C‘Eå/£¹Ò†å€0<ÂH´zËê……‰¶ŠXÓká©r T~·Eì€E%‡PfÈØùd¯üQf<ø !%’'}é/áÆŠ[YE×#Ä´?Àõ¢üýhâ=úãLò¡bá Ã#ôD«WˆiZô…Ô§ÖÂm¾'f»U)c±cç”Em¦"õzx˚ɚ#xš!Ê”Eg°ïÙþþñ!Y­ Õ*ªxø°à*ª¨âÃÛLM µVÝLWQŵÀÿ&‘¡à~ÄÙIEND®B`‚iep-3.7/iep/resources/images/iep_shell1.png0000664000175000017500000011363412271043444021154 0ustar almaralmar00000000000000‰PNG  IHDRL–µ¼±¢ pHYs  šœ IDATxœì½wœÅ™ÿÿ®îɳ3;»³9J+iµ’P@€ID0˜ìŒÃÝÙç³Ïw?/8ü¾>ûÎ>û|ælcccÀd°IA"”PŽ«Íygv'wW}ÿè™Ù$„-ìù¼^#ÍöT=]]Ýýyªžzž§„_Ól¿©ŸõÑÙn÷‡BG1*ìG‚Q¥”Š@\ ÆHQÄ}éxg¿ï–Ì$÷Wëwˆ9¿ÕD DŸ••äÁx< ãÉ=ALZ_M§P9äpÚB<5oÆúYNÿ½BàS1 aªÌ÷1P|)CÅh”Éfr)¯ é:ˆNð³R %âÑØx„©²õ›Óm˜èÍ@BŒÓ¥”: 0ŽÒ@AK2Ù÷Ó®ÞÞ .0£â]“^#*ý‰û>ºN$¢1©ä$2Þ rJ#‡?[ˆƒK½œ Äx4ðG‚öó6 1ìàÉö¨:ãÐÙt0i­itÞÒ˜ø÷ aNt®,aŽ>ŸE˜cÛc1ú¡D<“ô€uš˜|¤ß Žû´X§°ÊL¤4R‰Ÿvõ4O¢4¦P j¸R¯>éßåxe”RĤ?œHŸãaÊúãj³N{ˆKý¸š?%Yæ`a ¥PC$y²#ý+rÂÕN‘ÒN˜‘âJ![>2A]JŤ?”HŽO˜Ö}èM&jã Ð1‰ÒHM©f¥Tê§]=Í-Ic¼®MúãJ˜üw–â5˜PiÈäáDr²ÙÔ;ÁŸ¥Ò–.z8;C˜#ïÿt9ô½vÙïÅÿ…`J¥‘µî¼óÐP‘?ÅLCŒRãŽÃIFÉß ²„9‘M?&eòP"1>aZ÷!=S˜ ¤€fÄØ6(…eË„eŒ×ÓJ!-¥‘JMrŽ©”FF)LT›¥4”<œHL4›Éž$ÝŸˆKm– 'LÿõïǵhñÐW€ibtv‚iŽwfP ££ cÄ3?¼éfO/*™ U R*•÷ñP(Kvr|§eÝ“¨D<­à'¸ôXܪ}’oÊäxoÑð{«µA˜Jip LTÓÿù¤«M¡8¦šidÊL¥4&T ‘ú¸æ¥´Ò‡&"Lë>$¥RïêèüÞÆðÀJˆW&®E‹É»ìò‘³ôwL0“×·3…J«Œ¬Úiœ¥„)Sesœß¦EúV&aöö ¢Ñ ëËpOÐ<†i)…‰”†R¨XlHà(ùJ)T"n•›¨bñìõžz¼·hø´líð7rB&˜‚ŽÄßO¦”:¾Tˆõù&öN•†@àÕt»=“µUZóí5«>pàÐ¥¶ñJBˆ‘„ùn›8•§Žp¾»§™‹&þé¡4²„9ÒF˜ã¢R0aª4aNHúi¥0ÒèíM+…ñë«hÄ*3A}•LbvŽ?ÓS*£âÙò#«§LJ&K£å*›\i$“`˜9¥ÁiÜÚ)ÇIi*O×þª¬d帄©Ä/ã_:Þ±Ò˜¼¾€CG8“‹ñûßa;¦Â‰úc(„9²|ViħEOA˜*M˜‘~f&0!éG£Ölb‚ú–R蜰>)£³}|Ř>¦²3ñD¤û@Ž?[U H&Q¦1q¥ H¥þ,”Æ;ÍN^_ P¢ÒîpK˜¦ØȎšC£ rJæÂ9ÅTÃíž–˜‰^’©TŸ>-露™ˆÔ§P C„9žHe¢Í ¦a“Ñr’™†a™°”oIgĺÇDŠ/c›¨ *ž°Ö&Æ¿KñMpã•Ç4ÃÛ#%Äãœ_ ý+JAK*98.av+Iãž=ô÷÷O¯!Á(**"??Ó4ÿÔMÉ!‡‘Ðuë3œ®ÉëBUõø¿jE1‘¼„E˜þžLZ„;Mø=ò=Ô­”¨xb$!KI××¾BòÈá¡CÀO;{:Ʀ‘Ûß|“L»!‰B°råJV­ZEr²Å¨I0²ÊÈÅÑ& Fœ f"™YŒZçûs’™<޽д“‘–EB%H˜ Üš›ˆÁ­»qjr£ûŸ72橉Þ-פ?B `/(˜Ôí\I1|“b+`Üf¨?Ä¡cǸð q8iá'öèþ%¸Á+¥Ø½{7BkuúópËmq/ýI%JJ¤4QR!¥É +Äï«7¡€sì5|Ú½zÊ;p 5N{ÂÍ@œ2¥”ÙïBI Ü’³ê}xœSO<´ÄhKxH€2‡ÉTe¦e")p™¬žëŸžÌw¡™¾RRôÕ¯âØ½HOëåñÐóOÿDjÖ¬ìñéÀÄš9èè´Æ›yªë .È_Çèû—Pë™9MI9œ.³ = J)„ÆF+˜€04MÃf³a³ÙH˜Gó‰š6L JÉ샮”D*ë»S—Ø¢Ô—é'84¼Þpþ}x™‰ÊOïÄB;ÉQËñ¨‡þ”«¾€®@‡ #NƒW§Y±S¶ñb÷VÖ—Ô2#¯bR™m1ý)‡åÅ+@i€f-¨ôвBÑc$‰$ä´ˆ¨5æ¶dªqdÚÒ 4'(óT·3óhÑ(Áo|ƒ¼ÆCˆòk<ýŒªþýþ‚T]‚é‘fG²WÛYã?Öx+ûCû°w„SatgO­‹â@ù4$åð^ŒÅñ1é¢@d| ëz–‰ á ¤ü]›ÈÉ>¨™ÇY)EG_ s…95aNkº%2E§…ñÎ9>! DÚ@X_²/Ïtˆ~¸L}2Ñ$ˆ¤l8l[ZÛ)‹&"‘Afæ âsh|ÌXÄt¶°ãØNâ…ë§(HJ×9Q¿ZG‚XLbʉ"âÆ—9JA,Åew£ ëúc1‰až˜Ì‘~¾#K)Ô ´D,†gã øö¿˜_ÊŽÚeà˃¹³q8ÿúÏtÿàn”Ç3-¹J)6v¿¼Ü³ —°sXobNp©Ž¯z‘y³–S坯©§§ç*Iw[¡„‰.6§ ¿{¼×M õR~Êöiµ)‡?ÆÒ†äø~˜B ë:J)¤”˜†äüy~ŠóYS‚RCûÌw]<¾© ¥,W(•dËoÉ¡¤‹<¯“”½„g-¥®8Ï"]aéz¥R´ì?@q uZ¾ÎKû<\·þ lBœÔ_)…LÐsl;¯¼ÝIʇ¿Œ‹.\Ç®Yo¾Œ°ëì9ÞEJB°v!g.Ÿ‹o<˜%Ü“’l8³ˆòB§5 WŠX<ƶmQ¦I*ådóæÍx;;h˜»Ú¼©F1ŠbŸƒ gW"¥‰~ #ô¢%Û0Q©>´’ „Z[Z¦ÓHŠý®9»’p"Ì¡Þ}4ö¡g ¤Ø[ÏyõïÃn³Ó?Ÿ¾ÌL;•BÊôG)L©¦Â0š&M[&8¤ä_G,_ç^ŒºäRÔO~R"®»ví„þ{qöwa;|˜Ô‰]§Š_µÝÃ,÷ª]µÈ{úÞäÜÀâñ0½ñ$û›“¯çáëíaÞ¬å#ë§ÚØøØãô/|– Z÷næéÝm\vLJ)u›t´u’RvŸò"/6?Á¡%Ür–›ËOaq[¸=Ÿ ßƒé¤/é%Xà%ÑßAO8ŽÔl(i'XZˆ×9áD1‡“ưmÖãS?%4M³lJJ¡”¤Øo§,à°lSaJi}L…a€)…~ºf½éAH“þŽ^ŠÎÙÀÅ Šxè{w±½ €BÄ[TŠ“D4DÒˆ²÷­×iœá¥dA‘>ZZikmFלx…ø] õŒƒî"¿ @ž:Ú{A³lˆ6O€|¯[f¦¬» T/ኙnÂÍ;ÙôØ3t¯\Nu`Șì+¯çÜgãêy•Ç^ØÎÞY³YQ¨¥ ò‰ÛÉNÉ•´n‚&@i%!•L‘J%PJÑê§µµ•ŠüYT&—ã²Mø­”%O%‘Ñ]Ø´(72eJ…Á·Í^€0NÀ¡¬{y g7»:ßd0>ˆ‘ôECh‰ã˜ÊÄ)ìÖu2µ´¢ÌLÉ5),ÿ_M¡)–žœH;‘Õ?›·ÀY«Ñ>óëL$0¿þòh#ªÄ7-™)Óàw­\B§ÁWE¸•¶Á>ò½\2s-¼õ$sõ9»K†F—VcÐl. *k™Q렺Эçm»CHó(¿{t‘xJfsûM—a&è<ð 7÷czªXvÑzfîù›=—pãÅ‹ØõO´-ç†õ‹xó÷¿ãÆ4›ÆFÜy=+gO¯r˜T,6ä<„œr„iš–1Þz¹Ó£)]ñDó¼Òö2Ÿ[øEò˜R¡kÊ0-›Qæ™ÌøP)…iJRR¡%úhÚ¹1ïjݼýüS}‹ô¤’˜©A:»LÌ ïÐëìì›ÉÎìâÙ7ãÌX²±ÿa6k‹¹ø¼Z~ý³û¨;ï|–VÚøÝ“»XwÉJæ”g"ªB˜üþ·?cËöò3¹Ð£#³þknJ+Ü(% …{‘6/δ}ë…}þùçéììñ¢³nݺ“aJifûº&ðùóðz½´µ¶ñÆkopÕ†ë)®œÍ¯žÞ=M™–s*ô *Ù†°»‘ñ8ñv´‚µ¸Ê/C×ÈHdÚD¤Ò.‡Úöî0³pgÎ;›ã´GÛxl篹láU ÜÓ–™é{!šB ¤¦¦¥€4¡ÐÓ}t"6挳6;w _þ2jlD¾ú*J¥ pjÅ#ÜQõa¶õ¾Å÷Ýźò…t÷µÐ1ØOmá\±ûš·aÆ ^¿Êþ‡ó—~‰šÂÚaB†fEºÓE^q]‘V^yá÷ *^G‚HÓvŽvKJs¨YÁ§n[ÀñmÏðÀýORÖ^@¡°ì°ñ¾^ŒÍãú;Îd¦7Ä¿}ó1¦¿|•Ãt¡¤Ï¿5 $&´a !²#L™!=1d»ÜÒñ h~Š5ÜIÐY€¦iÙ:RÊ!Û ”(çà뛈Íǹ`-KçÍÁ±³éX){+ûÃe4 év»ñSèu0 »ðgR]Ykàoîo¦kfÞ æÖV"œ39üJ]É*„§œŠ²rJJuôð"±¦ôfG=Js±üÜ‹©m;ÊþÝéX‰+ß‘m#2E¤·…;âTÎ;“ ‡5J¶ª+ü~?ííí8ÓÎÔ‰D‚@ 0t'zCiš¨ÌP_Xk6,X„iHfÍšÍÒåKéîO#÷)d*‰2Iõp”}½;é÷r¸ï ÉS&Qjzî™vZ—=”ÝEC 0Hµ¢çÙ{H…{§®e `hSO;­þTpÖYˆ|-³Iu5âÒKQ/>2§îK°H³ÈQD@äcƒI‰Sì!™2P¦§òð‰sn!è)"Ï™7ª1gnE¤¯›¦Æ^ kÜĽÎ_w•~;JJ‚%^öBeVo­E/Ý¡ƒi"x$‰afžG‘%c1b%!‡S‰‰ÔДSrÓ4-§ìaö: sËׂ"O6›@*ë&ÊôT={¥D '³–¯áâEµ¡!®Jº7¾ARïè»·nåt—¦ajѰ9¼$h:šL`¤FLÃ@˜*]^Ý…M³ÈZSéúGr%1S&ùE¥xI"-»ˆ%Iº¦N§h÷qÞ~c y Ö±`V16%É$eWJQ__Okk+©t*¯×KCCÃI&€i(©†¿”õÝ—çãìsÎeõÙk¬nÓ0­;8Å©¤i"Sý€ÂHÄQ¦Ä®`·ïÞA"žÀá›…°Ù§?L÷c©¯”˜ŒÐÔv„P$D,ÃHš,­:‹|o>ý e]Ï È„‘‹lf'ÝÏþ/¥^ wUÇwqdÛƒ˜…F”M*S áu¢µ|>Rÿ÷`𨾸Eô+.G݇ìnŸö*bÀQÀŠÂ•íÙËžO™ÛCkè8:>^?°‡•Õg1»¨žÚ`í¨š™ŠÓß|Œ£†¢iÏ6¶µ¹£´gu!MáEnf¦@ T2BoãvqÒt¬ ÷œ%«AíïâXs3Í;‰zM?¾Þ—8zÐðÒ5˜ .ñ.À0Æ‹2™ö¢OfZžyÉ„àÊW±~Æ•V”¥Zƒ5 Ã"´ÌC)Íì”ܲm¦o±ÃÏ9#lÏæ}Ë‹QÒÄ—¯ÑôÄ=<²ærjM†iJ@P´â}”¼¼™Ÿÿp JÏ㌳×R¦K+:^J¬÷ÐòcÌDÞ¤º8´ål<ÔÒ\V6°Þg£uÏK<¿×ÍWÖ°ñ‘GyéP¥»9¬báºË8³dhÅÒét2kÖ,6oÞŒ”’sÏ=›ÍfôIÚ0¥a¹f‘%Í4qfß塤‰ï&1Ê”hŽr¼µ‹’Éþ]„÷þ©\xª®¢hæhv/=-ái›-ßHËŽYá­äì²uHÓÀçòcvŠ|ÅØu;½²oüº Ú©¤µ°cé+ö,ÕÛNÿÖg¨û‡!ì:ye³0¾ñW˜+®š’0SsæÐýÅÿÂß…ºïg¨Ÿÿ ¹óm”ab¾¹êÊ0Ú:‰–c¤}1§‚ßáçêÙ×ð_/}—æîVlÁ*šÚ0S®˜·ž—v¿È»:øÂÕ_¤À[­'ìåœåU„BÌZñ>–^d­’^p-Áö. ©®<œ .¼‘ϯV#Æüs.çì¢ ^m.ë«z‰¤àŒ Ÿb¾½Ož‡;n»„P4Ab †¯j&ùÓ ÍaúPÉ*1&#\ˆN8%ÏŒ0…HÓ ­;‚”*ë Í“žv(¥P’)k„74r°±ìŠ W€™ame’즹ßIEý u‰i *æ¯æÚŠ(öü±”’j!%…• \¶ÞÀéò³`åyTÌÍMAAÝW\¾_¾)ࢫÖâÎÏ UtäQ¹t-—Õ§š§7§…Õgpa¡†¦¹Xþ¾«©_kXîTv'y>F„:*¥ƒ”—[+Õ………#ìp' Tø žßz=ÝÏRJ”if}Z3‹m†!™_›?å H¤"üòÙƒ(Sâ63ßñ8±x)»Ã ‰v” íÚ—^•–¬š˜V;Irïö¤’$™Š£$è"™nc‹Õ~SrÖü‚©Dµó™½iÇ÷ôÇ4qôa¶î$ñ‡ÿ‹2ºˆ „‘ÞØ§HF(·›øºu ¾ö*®½;Ñm UVÒêSÙÜFlÑ ¢w~¦éRàÐܾâžÝ÷ G:ÒÓ;@MA —.¼Œ5sÎ>·oÔE:(ª¬¦hyºÝMeuÍÈsJ¨s;œ—3¢G•Aç¡=ìkï#š49ÿÂs©*šþµä0=d‚ÆEMšÞ-3ÂÒ䉗vcH4Ó#NÃÀLGf¨ÌC/¡¶XÇ4í#ˆÄ,ÊÚ7T2L÷‘7ht5p^u)BZñvw>¥îüt-;.·e€Õ‚EÖ¬Õå+ Ü7ô™‚…–ýH*­'/KxBÇ•_BE~¶ Ò4±¹|»,™ùÅ¥ ûÙ*3Ìn¨”ÂãñÐÐЀ®ëx½ÞwD˜kÎ(<©z“aÕÜaYŒBýЫãš÷QÖèÞ“–yVÃèž9yYŒhg P‘Yĵ÷Ѽûl©#àXö1lþÉW3Ö éñúòW0¾úl»wƒmèáW¢w~³®.[gº(É+åæ·"•ä×›ïãÍC[iíicaí$YÞ sξˆ9ܳþåÁZíïè6LMd§œJ)\6XY™É”>š –ëúãâÈæèÓ*”ðl¸˜ë¬Ú©Tê´ÞR(cï+.¶^Üádz²Sòwþ¥à_bêÑÙéoÏ97“ª?#Çfwâ.©}j‡îìã­i þË¿Žïâ$ÄȲ'MhÜtÎͬ™{.'åžÃ{*³2Aeþ¢ÒŒG¥—0}>ó*«èêêzG¡ƒîBP]]M*•:ýúI¼G£Ftö²éÙÇCö.¼K X ¨)ª™º`ï]dÖ†ápGÿMuëX{Fíô3‡“Ý"‡þŒat¶>¤°¦äS¦Ðc…&fÒqE¢zºº(//ãà¡#„ÂýC %F½¿JIºŽ·S}õ_óÁugXi»44´46‘Iz›šh× XRžOu]5"ÒÊÏ=Íî3 ˜qöLJ  B]ítöÇ@Ø((É#饥ûGmQ\šªÚܺ"í§¹½‰ ·?H™7FW['nC![ÒYM·Ïj§4’t´41˜”h6UÕá.:zÂÂNAqA¿ö£M6aeœwP䇎½orÔ3“kæÍ¢v¯]ÄÂ=´t¢év¤¨²‚hO?f ”b—"ÔÙΠ§„¢D+íƒ pa ŸP$†Òœ•–à×yöÁßQf8q­hÀ]9‹Ò@(“¾öfz“à̧´´§JÐÒÕkÅðKE°¬ ¯]ë來/ް9ñ•Sê{ºåû ¥¬h˜±ã‰}F °B$‡¦ÌÑÁ0…B´4'´’teãŒxÊñÌ¿ÉÖýG>| æ.<äì:'ío¿Ìàüô6íå‰{7ññ¯ÞžmûpÈð6øå¯]G½Ç$a¸‘2ÁÛSëÈ㯳+|-+òûxíþ©¼ôœýûØøò\òÑkê…Q‚Zw=ý;]¬]2ƒ Gì~_ÿr ¶å±(òÃý¿y…Ï~÷«lÿíà \òI>4Ç䵇~Ék ?Âí­ßáûÛ«¹êökhÀ O`Jƒþí¿å±³¸åº…Ù‘ªR&Gž¸‡Ý«>IÝËÿ½ûEÎ;¡ç¾ÇÀ²›¸fÉ¿ül?7o8“’Ø<å’ŠA¶Ýw?³oü(E^xŸ}Z =rÈá/j´qŒtÆŒiNÉ­È+LÑŒ Ðvì06›Ó4©©©!‘H`˜º*9†0–Çò˯eý™³š“¢€IË«{X¼ðÓ,žå (q”&CdíŒ6o|Ÿ@e-nËv gžwìÂ5³†Ùù>„æ`ÁÒ,¬%åî呞mƒÙ¸åó‹^Çi Ò§»­Uº ®QÆûé>¾ƒÅKîdñ帅$ºë zD7®\@uR±m÷s¼Õ•BéÌžSÇŒºjªé&œ”ø‹KÉP=£Ã8L³¡žvöõÙ0.ÒÝÍ¢WÓ÷B"Ó×)•´ò*š¹,œU‹/ÙÌK»^gç ªû8‡£¥ô³œÊÕ³5 óÝ8í6¤Í‰!%RØð×qí7SâÖ‘fÍ<:Å`j(v^iVfEõ·TÃÒ°i.{?oÞ1)¸]R‘L»—]#‰ãt»°ë§iÈg9¼ËÑèx‡Û™Ì­( Ò0‰µ$²ÿ54‡“ Ÿpï>f¯½‡Ã‰Ýá@Ót”<:A xæî¯óêoòÂɪ|œëW\Ãÿè.^q;1ûÈ[·4½ê«ðP\ê`ÿþÿuç¸yÍJ½:fømúù£¼y´—”»Žu•A4JÕÐJßè‰ IDAT\UÃ*n»¾ƒo~é ˜Â†¯bû±UÃâG.vhÞrfŸu#Oçßy:ž¢üõ§odUùý|÷ ŸÁ.^|#WT;øA:Q²4-”MX[^‹Œl!¨œ³„kΛ/ÿÃñÚuDB Û‹˜ÓPÈK?ýߪ.#ÜÚ‹ëLÐ4„&BÃVº‚2ýa~ùßߥØÖFgd>èNV/wsÿ}?äí-‹Y™!œVÏ¡þÑoñßÿòK ïl6ܲŒ|½-s4“h6Ôº‡7Ÿü5¯w&îR–Ì ÒúÄ·ù}âîøÀJ6ÿ+4/¿[Vù·¯?Ƽ–ÕsrÛäðŠIRÅ%‹ßD°4›ŽQ\ÿþm*Ï?€®þOm>²ØËólؽ~âÝ­ŽæsÌ¿l(å›”˜R±á‚J ½Ãvc”t=DO$‰‰E ùåÕTøí´4µb††³°Ÿ–¤¿+LéŒ*’¡ZÚC8Šª(+ðâÔAƒ´·vŠ%Ñly””q©<<d|€ž¤ƒ`žÑØÜ…¡v—ÚÊýÝ8ŠŠÑ;Í+£$(5–4S´?Æ@B¢9\ÔÔTa tÑÖÙG 'Á²rŠývÚŽµâ))!àuÐsü8ã·K:ã:Å>'*b~›Aÿñí¼º·—PG#GŽÆùä?}ŸÑG{GØÝhÊDVR”l¥OPZäC¨$=ííôF%N‡@ᦴ²Õ×B[o åðR¨ÅIùK)ñ»èoo¦;w!å¥8T‚Θ 8߃͈Ñ2 ºa°»PB¢;ò(,-Ãi¦G(/ñj:JÂWF‰ßαÆnŠÊ‹ñ»í¹)yïJ)‰ÇŽ£¼¼ü=ᇩ¤¤ý‹_ òüsC“r¥äÎÈàM78rÿ”„ Vvž®gN*ÒBì$°ô"lžÀ˜$™?Go_{º"³KÅ©…ÂŒvqøÕßòÓ§Ž€·Še—ÞÈõ«Ê‡öEzàt¸s8½ñÞ$L“–ÝAüí·‡–ˆ•2?{ôØyOõ‡7O:%ÏnI¡i­½‘T¨%MœEUh6ûˆ2xO,žê{¨èžæ\ð)¾~ÁÐI†¦ì§ö|9äð^AÖÛ#›k,FsÊPôïéß­÷hì*´&­…œioh¬;½è%#“ÇžîÚâO…ŽòÉ!‡?c˜J¥wÀLç¿ôÓrô0…s—á· ”L±ÿh˜Šò||nãæ;7“lk'¶Ò™Ì¯¢‹Sï§”›n}Ô$yZ„™{ñsÈ!‡“E8Fw¸Á™GÀ©ˆ%RÄ¡ ”4‰‡»yqÛq–ËZjK (ÌÓ ‡ˆh.AŸ ‡n§¡JðÂÁ& K ¨tjŠÇG$N#µÍîä„9z(<~¡aßÅÐäH6‡rˆIE¼ù ¯îêæë“ìãðŽí¸Kk(uÒ š2Ó9{æÀA^ykÚ¹5xS™\®²ET7máù}ܺ8ÿ]1÷e¶Ü…$Óô G’lÙÛMÛ f¥wSVÈRCéݤL§wË×8/Þ-‡rÈ (Ç´ÑÛÒNB.%//|Gšî4‡'§ËG° @Ðç„T1…®^7¶1·n(û¾À†Û­1ØC‘˜(aÍ;†ç»õÿ”„9˜PloJâp:Ò«#ã¤wÓ¬Ñè+{[X4§8G˜9äCÓ²›q[ÈÚ5…@A€½€¥ËÑ~l¾z˜«Ï›G]¡P˜t»Å=Ê4ˆE±yòqØNÍxSc²ÉôgúéÝ®^UÈd±øÙ£­“¤wY‡ïSžÌ2(”Êh˜ñ5ÍPÉC¯çó™OœƒcÞS d¢‡ï}ÿ9.¸ælÊŒ£¼ŸÁyó«ñOÛ_ ‡rÈÀ4M´tô›Rj i !X0{E%”Tc×}¬XYÈ‚Å+v7¿ ¡ë¬Z»–yI…Ý•‡Ã#Yµ²€Å†Âå Pà±2i>p¬dA¾E _g¬¹»ßqJÈ2ƒŒ4”oašÉ7¬¤•C5³ÒÃkM¥ ¤iŽñ·Ò»5r` ‹ž[Í‚kƒô¶·Ò‘ÈÔÝ=„¢)lî%Eyè©0 {.¥³¹‹`íLD2DgÔÔÓ#ékk¢o0‰:E•UDÂ<âè¡blv’r‚x¸›Ž®>’RÃWXJ‘;ÉñÆ¢ Œ~º£ ŒÓÝ»>‡NSìÛ·@ @qq1vûPÊÀáÄ™ï÷Q àw鼃c÷¶Ï Éöwq‘gÄïÊ4 ¹frFEŸžö·9ðOuï(¿¢QÜ0­¦ifÒ» T&FYShÒÚÿGj@:I‡TcV˜šŸåç,Å·ãnŽ­ý¬µ‹¥Lòò¾ÏÑÒœ9¿’÷þ;‘e8¿¤›ç˜'_ç®ÿÜć¾þ¯Ø<Æo­à[D`FÚùæ?ÍÙ-gn¥Ÿ”ab&Âô?N(¾ˆŽ-²±cÿÿÇ xøþ·p-YI½~œÇÿ3Ö_zÚGåÃ{J)~ñ‹_‰D(**â¶Ûn£¦¦›m$­ 7Å쪌Ð,œ3vcÆSmF›À­(–þL/[‘”æ°ëhXnHƒm‡7q¬ã‘ø M¡nÂ1?P0FN ºž•3áÅ$b&ÊŒðÊÖô×Ú‘­„SÞ”ƒ¼Â*¼Õ„ÓÖM`õZ·APwVz&ìÒæ¢6¯Ÿæ#°™Õ,(®›‡@åbæ7ÌÃz›gß<Ì`c‚m{ŽQŒ _2tbc“¿Öé gëÌ! J)t]§££ƒ‡~˜õë×S__?ª ˜FŠH¨GžØ@˜þX Íî¥(àÆ&ãtö unŸ Ó10Ñ’çБÉ(­Ý!$Ý¸S´Î3RZŸ‘0ÒŸKï6œ(4 íeÛñ稫šÉ\ÿìíþ¯x„¥sŽ z²yŠ˜9¿œþç#ØCƒµ¶ö2®]3]&1„=ÖÊàîg9è0XyÝbv¿üÉÎý•O³ïÑ{x*~>ÿtu˜_ß»“™7ÜÁùŹաrëý¹í¶ÛFØ0ÇÄÇbÞP+Ç‹W²¨Ñü9|ôâz€®k|\P·‡æÙ‹9¿>HË‹6V¯áâú"^~äIv¹V0ßcçÜK®`QU¯&дwi–—JYŸaíJ%cRš0 Âô85Š<ðÀ¦#V2])Q¦‰”’ÞÈQúÄò¼O±¤z-ûÛ¶c·9ΖBwsåßý=¢° ¡9YpõçøçµîRÅεÜPÐ@Ï@¡9 –—¡Ù\þw_ã\½"w€þó7HyKñ ݺ\uÓ‡‰&L„n§¼¦­ær>?φSÔ,8Ÿ¿ù|+Àâ ®¥tþZâ&¸¼” øÌçÞOAI§ r…tX!/­;“ÛßáäŒó¯¤L°yM.ÝP…;0rkárøKGCCCv•Æ„(Åá=Ès°úÂò´ùv6òì«1æÍª£ºØ‡Û–À`íùeIB×TLöÅS(—Áîm[i;ì£ PʹKçàxHS%S¨djıÃñxôP<1=·¢â€›Û.›?V°Rô”ðo¿»‡‡_£­«‰¸pÞFušFñŒ™Ù¿…5Ì*Ìü奤ªŽ’Q² kæ)R^7Ì’Y¨×TÏœ=²’³˜™~ë«+¯€Úô’›Û_ÌLÿÈ•4ïŒÒL%F¯±¹ò ˜‘gÙ`ý%ø3í¨ôéƒrøK‡® "&²íçwA.¹„Ù~]Ô°zE€ÆC{x|Ó.Y·ŒùÅžqëå c¹VÛ8cÙ™Ù¦u*EÆíûTe0RÃ}ˆ²Ç†0­ônlõMQ~ ÿxí÷éèÂ0SlXöiŠeÜúxÏÜzK9œ˜îâg±×A*߉.F4‚´y©›·ˆÚ]ωÆQʵ;­(c”I<ÒÍóù¬hð!´$Œ À1¢ý4îÛ‹·~¥yöSC ¦É+æ°Ì“6ÈeUƒþ‚þÑcÄrÈ!k|ãôð¸ñžc¼~¸‹P ³æQ]àb°·‰}1Á@SÛ^*òò ÝËÓ­.æ¯\B]‰Õâè¶7iÙïÀã rÁÊ…ØLƒèàs(uÜ;…ÑÑ1Þáf¦ë¸>rî59ä䂊¥+)//¾ê¬«•â /W]_;thæÅÜ8¢„€Ò9ܼ~ÎÐøŠ8㼋3%N Ì1qäYÇÌÜ’o9äðGØU­£Ó©9~vöSžDx¼s !G˜9äCiX{’Á@æKŽ0sÈ!‡wÓ û“C)kOòQé0€¬a3G˜9äû …µó¬•P]Þ›#ŽOîï|•<‡rÈa*(¥Øº{Îc̘·‚•3òN_²T2É8ûF™o9ÂÌ!‡Þ5!(«®avU%ÅžtÖ"N[j£s¤[Q:ð©q+Ê!‡r˜ =ÔÆk-Í8g­aÃâ £ŸVSôq§ä§n„9žA7矙C9XØÝ>òU„ÎîR‰õ·±sÇAÎ:‡×i–ŸaŠõ©wD˜²ŒÅbôõõQVV†¦ià ¤÷ôQi)…$³Ÿ Å~ņŽåß©÷ê™FKÓrGÊφ~BÖ =2=}zß5qÙ1I22†ËÊhP!²F告fèº&S6£÷$ʈ̞÷î“4æ|c®ax¿ µx©÷Jº/™„£ïó‰\‹š¤]§ã ¦wÍÓ>Á8ÏäÈ÷@y–ÄÈç!stXˆóxïÁè~ÊìÁ¥‚>TJ±ãP#6o KÏ)GV ÅPh€ÔØ\ãr#þV Z’‰ÞLwM›0'z@’É$wß}7¡Pˆ/}éKc˘1üîÿRsÅû˜!ùò·C w š¿ú»¿ff‘Û ”"zü Ž$ª˜7§ ³ñQ|ÝÏÅ×^@ÑÉ*£4Ùr??¾o#Q˜}Öå|à¦+˜áÕÒfŠ·Ÿü_záMŽ…Ë®ü×_POÞàq8¢qÙ²Y”ºE¶l¨íÏ´x8a-E.m¨”B]<}ÏÏyüõƒ¤œe\pí-\¿v.™þ2ÞËoîþ[v·“°rëç¾ÀŠÚ n}  ¥0=|ÿ®8荒¨uõË›M‰ßÆö‹–%×s噳Gìo2´%ɉC)…:ÎîÆwÖÇ©+q[[›*EãÎçyè¹8ŸúÌ帴¡s(@¥BüâGϲôòóY8#“&Ú–DZ÷ñ/_ýa©ãtðÏ|žåµ…–ÜpIQJavnâÁçb¬¾îRªã—Nf'íò¢¬ý³wש›_‡'y”'|‹²Ë¯aEàT%M5‰öå{ÿù:Œ%å¥äÙ$¡Ž6:ú£h‘F›KR1ŽuÅ))ÎÇëP´7¶`/*!˜çsþX¸ƒæŽ8v›#/€ÇÀY\ƒ‹$ƒ}hù˜ávÚÀ¡`÷,-"²ÿEþ°α TØ)ª('ßá–cô+#]E¸R„úBHO1%Ü"NgG'ýƒIlÞBÊJ ð8tkd¬ ÙóŒpû6=@õy×±ÆÑÅî—ËñsæRWäBHÐdûK/³Ýs>¹U±å•—x|fç‡Ë«G5.ûàG?ÿK^ÜRJÝ5«p* B 9|¬»îƒ¬1„šÞæ‘û©Ø°‚~“×ÿ={;hŽö m{û¡ ‘ÎU{úîЪ”Ê&:˜ ;4íf?]]]ÔÖÖb·Û‰F£lÞ¼™×^{ÏþóÔÕÕc;BÕ ³ú܈(øÊj˜Ý0ìí<º£ƒ{ÿ@çì÷óÖW²ç•GøéËvæ%÷ðÚñ6ûZ¸ù>uëZ8ðcü¥õ\ñ‰[˜Ùó(w?´Ã½¥üÏ3&ïÿøY3ÇÍO?ÿ%6—^ÍbaçÌ ·³v¶¦×â@[/åÁ <£›ešHi ÇP*0¬Ý 3ÒÁžM÷#.¼™5‹êðæ;¸¡d¤"è u³«£€K=vü3æpáy›ÙÛÒCaÇÛ÷ÿcï½ã㺮{ßï)Ó{½ `¯¢*Eu9n²dKε¬k;Nœ¼ÄyÉ'yyÉMîË»Nâc'~¹‰[—؉£Ø–mY’%™*T#)ö€ zÓë™sÎ~  %J¢ZÌ߇$ˆ3gvßkï½öZ¿e ª‡lÁêðcQe„¬ ¨¦i¢ë%2é"@VTìêÌçFAG– |ÙV1èË}ávbUTÜVn‹bÁm¤MSñ±á†;¹ekr)âoÄîtÒÙlâ®es8 WÙHe5 f–ØDïj;þ°§ÅÃo7IaV ’©U-aj=~Ž%d “ìàÂщ_U±wt"9½S`¨>ê—¹ñ[‹|ã…^&V„Mrêß$1x”‘>7džïdSSè ë1ß]XâÖùõxú´´´ð±}Œ/~ñ‹8p€Ûo¿x›­|Þº¤HRð×7ÑÖÞNC.˱@-+6mâïþèGÜõçË Z$âþ fïÝçh*‰rL ™X=ŠÝËz×=gŽSUrÒ­,ã=U¤Éª|é» 3Ù{š‘’‚]Ò7iÒ²&‚¬süȵПþ.=•¡óýwSœfÊÒHo±ÎËíöÓÌ‘/às¬]ÉÐ×þ7ýr÷Þ·¹0ÂéÞ$’ª>wœ¬ÅO³W&Õý]úr6­öóÐW¿ÌYÿÜó¾0£#1êC¸må‚dõ¨iãÙç~É-W7Sã7y¦o€ß¨”õA’„¤X±Ø½Œ ŸgÀÝŒ˜ÕÍÖ}Aw¡qòåcœ°E²båõ„«k°²…Ï}ù/XóÀ­¬ôÊdÎ%‘š–YQž|‚t®ˆ I²RÕA~ö ç ·¾8ÊÉ IDAT{ ˨ٺÿÏFèñ…@Ó-È’@›êC³Xæ›ÝãÊØü·O}ff,TP’°…Yѱ…ŽVžü£¯p²õCl^¶…ñS¤šX­åh~º^¢$¹pÚ$ò‰QMͦõX^áDo?éf:³$ wÛÔ›{øú£&ÿøÞ.¹ÈÔà1žO4°«³¿õ‚>MVÊK»Åé$Pf ¯’èãLwœ0’¼`lI 9BXôAÎõöá”s– 3ñ¥$d¹Ü_ÒL>ª“kÖùÙO-Øó)t¿‰žq°»È–ÎFBÎr›9լغŠýG’¶F9Ú£òþºÉE»8t:Ï®[6°¢ÑÉžz†“†à|ÖÃuïm`yæ*¬?ëáù#ÕÄž›"¸­…€¬süà”•[XSmátÏ Š"Hœ%ØØÀ²ÎÜtÃn&ÇùM¢8XßøÕ–B,—bÁOº7¬?„ÄÆYé"Iö/|‰únXt›hš&™L†h4JMM nwùùªÂR&Z.Ťf¥Ê뜋¾(Ì“ÝûøÛ%>õþ´mˆRбÑ)²ºL]•TÞF¸:ˆª'‰Nix««Pr“LL&Èéw¸*‚žÂ°GpÛ ˜‰SP|xÖ™KAzr„±©42NˆHu›È01‘Å^U…6ržé¬†e$Y!P[˜‹Ú!¥{ÿÃŒFîäªU58¤ý}h¶ !T#Ëøè‰¬ªPU5U>'Å©AbÂOuÐFo/E]B’%d[hN`ÎîÆM-˹¾)ª"¸óÃYêÂx¬08#ñc— EQ>¼"‹î‰PåsŸ e S˜qC3Óô}‚§&kØÜÁ!+Ô77áP!7vŠ?øÚi>ùÀíliñ¡ÅFg)`õVñYÐÓS(þz¬INN6Ê×â&Nš›‚d§£LÆRèBÂé«"Råäù¿ûŸŒoü÷ܸu >;…£˜e0®SöâP‰á>rö*"~;ÑÑ!2y!©„qÉEâQЍ€„ƒæF?é©(ÓY«*0q©¯Æ*²<óoÿÄ’×ó¥ÏlÃZ§ëÀ™®ÿ0[–‡°Í”)Ÿšd<¥ÒÒ@Â@Ë¥™H ˲,F1ÓSÄL?ÍUv²‰ ¢Y͵¦ÇƈçL"õa ‰<öª*˜@›é‹äP?š/B•×Ab¨Ÿ’7BÈa2$‘Õd+ÁšZ¡„A$ì­8mt-ÇðÀ vo /ÅÔ$ãS:M­5˜Å4S㤊àE¨ {P„Abrœh,‹ì© â¶ÊDûû‘‚5„2CäJ&’b£¶±Ã2g]‘KFOÈ´4‡‘߀Y‘‚b±H?µµµx½ÞwìÑ^19Éð÷£Íšt Æ?ÜÕsõ±\¾^£À\ —ÔKéÊ0zê—<¼ç kn¿—Í­U8ß¾G‹ÚAèd§‡9•r±¦1Œû2†û¬0Õ¼|0sŒõì焱’«VÕáž9ÖLJŽðø#ÏcÝôkܸ¾ñ² y^|ú(µk;h­ñΜ–|ûò×u® 9žùÉГ°ÓqËûØÙäD25òéÂQ…Óú3˜^€7bvyñ«#0õ‰ F¸=:Q¶±. Ìá{ºzvËå‡á5Ì7¡ˆ Œh_Ÿ±ò[7´p¼X`½( êL}.—¹Ç;Áók¡A÷Åóó Û¯àÝ)0‡¸ãæÛ¸Ÿ{£Þ;oÞ©~QTxè,UòË]ŸwBû¼Smý®à Q*AiÑ-¹AEøµwàø ®à ®àm@I+ ÍùxífEWpWpÿÕ1Ï~èÂÓy®Ì+¸‚+¸(E7—d¹Â¸~WpWP QÈ# … ¿ç ÅܹBñ-:’_2½Û¬‚þí¡w[ª¼sŸÏØw\ìÝ… ‹)·*Ë}ÁX¤Òí¬ü}yθù¢µx—Ñ»½Ú…Se¿˜³í0óï[Oïö*ccɼ?»ìÖKÒ»Q1”–.·˜qëœWåïV¼»ÐÔo6½ÊÄdùUúï¿–8“çLÓÌ›ækó%Ce¨¤w“‡ø»ï¿€ßcG•T®¹ë¿±¾Á]‘*&šI¦û)Nä—³u}3æe£wÓéyþž8ØCN3ñ7m`×»YáIT”8ù؃¼Ô%]ÔèídóG~‹­²òã¾ ôny¦úq ÛÀÎö:üÖùônfö<{ÛˉIJ¦•U;oåö«ç8ÌBœþàŒÆò” z |ê3`sKàUéÝL-Ƀ?:ĦkVá×Èú×Ó´rìM¢w32ôyÇÚP°]½›žágßùµ×ìbÛÊZæÖŠ%a’ëâsÿð ,±âÆ»¹®£_e»^jy/½Û«æ+FüºUÖlíÀcŒòÂSg ]½‹ÕîË$^ŒÓƒÇyð‘ýhBÆ^Žw݈Û2çõÁè™xü—I›hÝÊM·î$œ9Æ#<Çѳ£Üú©?bskk…°zž}ÿ€c#)tT:vßņ*ÁðK³ç\–B&Îød‰Ïü?§­Êñ«!,a–œh¡³Ï[­Ã4˜#ËSRÓ87ßɽW×Q8þß:„ ”áþà+Ty˜¥4Ñ”<Þ­”žàüá=Toý –RŠá‘4‘æFT#O:E¶Ê4mÜÍÖ_«!ñôçùÖ3/²nk;Ëf\Kd{€»ïÿM„YdúÜ>þçc%\Î .˜ez·Uu¤Ç+éÝR¨>­-5ØÍ]ûc8baÛêFCez·€ dñR[Æc_@ï6.{ ™êº:ŒÌÓš›æZ6I4š&Rëe::Mºh ØƒD|V<‘¬VCË’ˆŽ/ÀðÀ}2º0HÅ&™Œ¥1$+ªaƒ5¶S¦WE8ø•ÀñÞßâc7Ìg˜9ÆÎ>Î矵óÑÝmØ'OòXß:Í“<òÈÿ×_šóÏüo¬æ3«óDv7í\ƒ‘×ЈÑóüƒøo]Ãp×ùæãyþû;ʼnôN¶ù¤KرQ&ÑŠ¨²™aìôžìwÓÙä!?ôû'¯ãÆUŠÙ"†drvïO8˜ÛÎïm;Æ·ŸÌÓyÓõH/`lz5¦–æ{_ø[>~?7¶>ÿOOp÷'>ÀÕ« LAϾù_ÿ2ÌŸüå§ äÏsâçß¡ùþ¿Gïûå7ùêñfþòw¶svÏü—OÔ2ç,Š£¼ðÄ 4GZ‘¿öç«]ÿNtz=5N)Î>EzûýT¹~µ®8D.·ÔãqÞÚK™ªÆ:0s¤„AÏ“ò3!<6;ü@¡d–‘ã{:›§'áæÖ»VP}؉­ÍÐ¥à¬`ǦÕ,‹õðâ&˜Ê$9–ià#íki_é¤Íø7†&×Rl¬Y¶‚•+T±£ôeó”Ìz. S'âÁÿ8€wÝ ÜÒ<ÕY¡ÏÑRôy‘«Öý&Õn+² 5 ŽvÅB–hÎU•qWÕ±fk ]#“„Ç{8kÝÆGÜÌR–è¹Ã<:ºœ·n& À|}“`z´ýGrüÚ{üTÈcœþMí>Oì%íoᚆ(gŸ;@)t 6 P-‚a?z}3u5~úe ¬moGÔëìOf0¡‚ÞÍÂ굫h[¹»OãûGÙ²­™mu‡<Ι¾,ëo¿Š0 ”—F8vÚBSËjv³Ü>Bcjd ¹óvÖ¬\‰¾n9{GLÆ÷¿À©3. ¥ˆµ˜ dºÉ–Š««y‚ñŒ¾råŒb–þþA ‹‹`]#aûìâa’<ö(ßO¼„RˆsÕm¿M•-Ëp×3tu7¢Eˆ\Ógžâì¾™4UÆûÎÑ—õ0¬캃«:Wa˜¼ü¸ Åîãö :/Ÿ=à,¨Ù¶‘Æÿ’nº’âÀ[ÛIÛ²ähŽ® Z·ÙŸ²ÍM¸mËZW’:ýžãëðàñ;ili£gf”` uk:èlogÀc2¼lííœwĉǣœz¹›D³3=Jª$ã* ,¾»7 .ò ž¯¯H„;¹ù–6¥Tþ|Vß;÷z™x¦Ró(ÉV6ì¾¹9Œ”S¹ã •âð‹ôÆÜtwÛ̼ùÑ_ri.Éo®ÀœU I¡íæ{øø®N\åI¤ûZÙ±^â©ÿ1é5÷³½ÎFò˜\Ö׉2ÿ‹ÅîÆgWíN)‰.@¦¼k1…9ç«,É*.[™æK¶X0„9Þ-äðS?cºõV>|}'A‹Œ% yÅîÀ* cƒÞ?Ám·‡˜]`ê¼dEÁ6C了ÂÔ·oãGûNP=6‚ÿÚãTLÆÏä=Êö»ÿ€íË«P$QÌQœv+ƒ‘¾.NË›ù¤÷É1ˆ9z·‡Þƒ´ñn:‚럨ÆYAï&É2æ\Un'YÆa“™»E™+8”´†¡ceã\ouëv¬bÏ/¾Ç¨±“ߨ"(îæÞºAÎÙÏ?ýý¿ó±O\=ÇÏ(É Š2Cy§¨ÈH )Ô®ÚÁ]÷ÞJÐ º.°ØdHÏÒ»]Š…øÿú¯÷¯àúý&w4Í®D2¾õwpß]ëpî城ô1ÙÔ„¤8Ø~ó{Ùµ®—,БéÞû]>jå s/çžþ.ýæ’„b)ÓÍ ‹Y’‘$+ën»–ý_Ž_$ ®ÚýÙz·iÝ‚w½›ŠÅáCU$„"#[e à$ŠdR…z7›Û"Ieú7Í@’U$LŒ|å¾p Ê .« —Ç*«¸¬,6^;¼f Š©¡KV¬Š ³•rßÍÀæpRUe#™É“32L'ð­µðxLTËz7#b’LéT·(Ï SÄÌOd…¦ÎN$« ÃôPï&ÉQ´§)ùkq9 Î?ûï.®ku¼Šîù¿Ä‚ðREÄHx«ÍŠ$Y.ÿBomÛîà >ͧ>º‡,#w\…þÕŸó§ñ2¿q«л©î~ëf™÷¯ùqª6Ýͽkê)œ>|qz7‘cï¿|‘Ïÿìõ+NpîÅ&ÖÝñ)>¹y„|ï8­÷ÜÏõaÁ¹G9^õA>¸p\_ˆP¸–ííyb©"ájÁú•˜{~c‘Ûø³ª1'žäŸþîŸÙ;hÒÖ÷§ü²m'ýá|üK¸$½›„Z³_æÛ|þÏÎòÀ'w£‰Ùô.Nï¦X}|òwoåÁŸü¿ÿÃ,Š-À ÷}œ›#¾ðdšûß·•¡òBâ¬YÎÖ»ïåo¿ôgdL+á¶ëøƒz/C‡âÛ?‹ó'ùWß°Žïÿ/øÝï@Ëö÷ð›7Õ!‡øæ?ü+O<ŠæþŽÞñi~÷#ëøáç?‡åÖ¸gÇ2>Tû0ÿñÅ=d…_{àÿ¤½Á‡‘Ÿà_Ÿ·²ãøf­ ^ï\·Aˆr´ùû A9&ùÞò‹Ò» rñ!NÚÏSüúm›hö[¥4c#QÒ%™†ˆ}Iz757ÅX4F®$ðFË1}^‘ÞÍ$6tž‘D¡;·‡|óèÝD)̓ÿøEúÕÕ¼ÿã¢Ýs!xß»ð嘃]¶2\[Òw•Àüú׈ãëóf6ûÿÜÓÝûÿÎ Ì‹É_wøÑ×RHË®ºÏ]õ¦gõ:q± -au‡Øê^ê³×™Ó›ØÞBrP³òjf~/ý5í»øÃ¿ÚuYó’$,Nvîh«,Á›"_© XÜ|ø³±ÄgïÌ »o·°„7>&gçß-Ð'&X¢åc•—˜¦0)+@¯à ®à ^ J‹ÙÞ± ¨ÝÊZÜ9Ë,` )€\.Goooù÷wÑ qWpï TºˆZ,–wÇÎþdÝ")²$£ë:¦i¾«滹ìo7.gÛ½+&Ë;ïæv›³‚±XðûýsÁßÉXh¸>cU;oÛ¹ä‘<\Fim½"p®`^m<¼›'ø\~ÌŽ»Ý~ñPÜïŒØô‚'ˆoF§†+ ß–¨…„ÃáÀæñ\™WpWð_bÖ½u±¯£š> sI±?g$~E`^Á\Á¯Ä‰yKÈwú>ù ®à ®àM‡Y(`VÏ`^<x¹ÐŽj)rÔ%‰Tgߟù÷5oT+ ÝçÒŸó:˜Mo 2Ô ÏiÆÏðâé,íÅ3[þ%xZ/,ad¾(¤ë«’æ2Ÿdw ¼òÿây¿*ßã‚<_),íBCï…DÉ•ïÌüY2r_,&~u’a–îÇ™´þ>o¼ÍûÞ|oÌ‹«…m2÷ÚÜóEã†70Öá•ÇǼ±ù3[Ln}1bîŠ2Täwáù¶bQ:•s‰Ù4æ|g7p—ÉtÉyy¹O¿ w˜eÌ‹ ¯"0õt?}ò8ÙÞºnÚÚFƒ×N¥q§]+’Ž¥ñÖ„Qô,#Ýèþ5ÔùlÈÒRå¸8.4„I!åg{^"^²P³|wnj@•æw¡YÊñÜ3Ïp.¦ã¬]ůY…Mžß¸z>É/öìe4cà®iã×uà˜÷Îæïèp/‡û4v]½¦œŽ#ÉÑ#ƒx׮ᴬ¨?`Ò<òÄSÄem›¯bgõ<5Ê‹ÐÔÙC<ß7Q¿»Ö³T$Z„€ÓŠM––œœÚ½ü3?q–'÷aLiä¦, 8õ¢D!ŸB²±©r™xÁD4K9&úOqÐhæÚåUøUƒs‡žãÅó ð7q×®M¸,Ò|ÁcjÛ·—£Ãi„§Ý´K1F×áý<7jeûÕ[ÙÜà3ÇñCG9ž©ãÞ]-èé('âÀP‘•›¶³kum™Uéç€ Þ‚½Çû/X¸ã¶ÝÔ9ñѳ<ô\‘•›¸yó²r¿Šùß+åü葃t\³µµ>D)ÉË/îçàhëoÚM[È…U^l\oSŒœ;Ƙkë|XKYö<¶{çU\·¼ 0é=Ëј‡[67b‘+£ð nK¡R &Ï\4>ŒB’Ÿ‰±£³Zåµ_Ê A©bàÌQž:%Ò¶‘›·,ÇY&„_fa’<ÊÉT -8%ƒ¡®c<{bªM×rus…èqž>]`õÎí´,¸׳1ºãYu Ue®{‹©)Ο’y°G¸aK3уèñ’Ý(?VI§K#[íLŒ rôøë¯ZGÈeRÌ%™*N" v¬Õ^Z>C,•ÃT}T¡‘HåËL/Šª€Eš¿Z+V7Û·ï =5Æ™®Sd×Õã[è;)ÉÔ´­#RH2Ò×E¢°‚ˆs>5»¬ÚX»i m©)ú{Α*´ã¨|g¦MôÌ݃ BËVb‘†^$O’ÑRLL'PMA1›$‘ÕÐ%•êIÏ31:̸%D{c=->•|:N2_Â@¡*=O2¯R°’Ëd(Z]øÛhJ§9˜ÑËB·T`jtˆƒq‰öÚ0ÕAÞWñF‘÷ŸÇV·’-ù~ºûÂ4š0ÓIâÙ" ÕáZ|‚sçNa©ÛHmÈOÐm[$›’±qwLj7ÔQ2Á(fx9榽³K~’ÑdŽÖ°k†ƒóÂþÛY»Š‘Óc}L¥5”ÄG“UÜ´VçüÐÉ:Åž3ôÇÒ¤ ùò·U;ÁÚUÜV7ÍÉÁ1¢+k©½ålñÒ±~mé)ÎDS¨Þ}§†Ù±sñá ^Ž6rm-Ÿ&ž—‰]-Kt¨‹ätM×AüÜ&-ÕìÞæàP÷ÁuMÔzdbS ,›LGG9pj’ÐvÓ(’œ$Œ¡ÏcËøü^£݌gª©÷ÚçÚgVX¤“I’y»ÇÏ*Ïd0ôr°–p0ˆUYØÒ¢ñQ"ŸÍ¸°«2ƒÉxÓ00„  ˆé´F 䥔Ïԭص 8ݸ,‚é¼À­(¸õÜtm-½ÝãœJµ²Õ¿8”Q̲·K£©Ý‹]mò4]S&ëwì .äÁ¡HzŽ—OŽÉ´.!»…Y"Ÿš"¤ä´áòúðÛ¹‚†é cQ$„iOOòìáQ:Ú먯òòZÈ&“$ò¥2I´×ŽU±ÐÞ q²o_` 5ViÁî÷AhK†Ø}m;L!V››Úšn“îÌ4C]§°.»%A×á}W­åt×ö÷L1­ÈlßÔŠC/rìøA4ÃDõ/ã¾[Ö0ÜuœgOaÚClß¶†Z&xüÀ H]òp××á³Î®`±9ñÙ ¤LCu¡Ê‹Ë(«vV5×SHÊdGŪ­ÙwlT»mŒ$M4aA]4@ÉÞãÄÕ•ÜZçA¦'xzïa¦$ÓôPk9}ì ÇG°sË­»ñF9tì4£q—ÕN]KÅž¼t>J¢¤pã-·bw³§ËÏ'÷Äz¯â}õ^|NR¢œ{!3ÍÉ'8:e0¬ÿ4 IDATm có6¶„^9&‡Ð tçüÜÐØÄ KG&Hj5ôÜϱ‘$šÕÃn½–dÿy^:Ò4bжj#»ÖÖ±0eo¸‘훬<3]n S×(x‚ÔÖE°&‹œÏ¨.æ¹›ËÚZ0òq¤ô †0ȧӔ"«YÑVbìù~¢šLks'ëÕ.¦O•¿fszimó`dLz†—´Q’ðÕ·à5K$'J ¤M2Ù,Ãqw6¶0šç¹Á,×ÔX‰ŽtóËn;½½«ÅI¤e5ÍþérÙ…I´oçò•¬hpóÂÑn2m5§ÌKϾLÍÖ­ln b“ Ma4,+óÈV¼Õ­¬‹œf¸bºaZ›bœ™ÎpÙp/hX==ÆÁ—Opv2‡¯q-W/sòèþ£ØÉ0¹þÆ[hÚõ‡Õ5|è… Ã§²g¢‰†ˆŸ’ç§O“Ã'øÞƒ=«–sÝòeKnöM%)*qNO×òH+ë;t&âQî¾ãìF’Á„•Í×ï¤IIqfß>’1•ž¸“ÛïúþñçÙÓ7Ž¿Y¢eãvÖ…g÷‘Ìëx­ó²³?-ª‚]Ρ—²˜½[þ¾N+t:ÔÙ‡‹:Qµ(Øl‚¢f"l2óN÷ ÿ|o‡ ‹$:ã#ã¤WÝÊ'Vgyzïy´tŒ§ÎL`wX±˜IŽ§Ùµ|97]ë 4.s}[ a«`Üí%(A*M+P&—gN¢ÂÐÉç2¨Nßj×a–ÿ.xÊ‚áôŠS’$luµBòLÜ»›pr€ S¥í¦`y•PRŽñÉOY0Êsd«2²«¿ÚE÷Ð8þáŽ@6©È,Éï’Ê[¡SÈÆˆ¦L ÉÓš“vU£@|ô,Çõf¶·qSüâÀ8-ëÚQòIòιXñN›–a$–Å,$ˆ¦me±àd"#Ù<%!°J .“Ro?CžÉ‚NÄæÀ§åÑŠ¦CA•/Ü^˜m&]`è%ò¹4†CÂbQ±çÇŒ$ € •HOç(ä’$ AüvY±ÇˆÆlXÂ~<ª„VÈÏèT…}‹v†²jg¥3ÁÐÈùTkõFBNJ´—Á!p‡°( V»Jtr »$予›Ú‚~Ð –Ï“LæXãqÌ,FD’YÊñ̳ÇQ–wÒ*2d4+N¯û¹óœïÕÈÛk‰ÌªW†LHO ³ÿq¶^G)—!i à³Hr)â 5Á%" ƒ¡ãû8±e•©t—ÍIcHc`x©$,ï(ó&§G99náêuus¬êÒÜm¼L¤µŠ³cSôg°FB86%ºNôà_¾Œæ‹[ï|ÂÔˆ Ðe†h ¸s¦÷ƦF!Ÿ¢Ú]}=žD¸5‚1£ úEˆ•N'ù „ÂKŸ+©äüñáVtRñÅ|†x*MЦV¤QNÄjQp+i†ÇÆ™ÌbºL¢½§I:¸­Õ g<‰ê+ÐuèþeÛJ9¦³V c÷H v›‹©hž|ÉÄi“¨n­¢k"FÿXÜn–/cǦ- OóÂóço\µHX¥SSØs ²®,fžx*E"_ÂOâU}Øe—H1›Æg ´( _0Léü4yM¬3O&c®u!¥lŒîƒlº™F¿mɓӥB ób’Ï`Ñ‘| >L™†o}[g'BÏ‘ÌÛãœÛ]a2yøaž×Ú¹}ûJ²„©—Ȧ“¤uŸ×‰jª«¤“Ïd°yÅ ñTSµã÷:±ˆVª@Ëgì>lŠTaz (³DãY„¤bw¹ ¹mHÂD+dH ~‡I/0:ÇdY% áP¡4÷ŽŠdhŒO%0‘±ØTù]3‘"g§pyÅ6‹Ó8x–TÝnnub–Ф’) X±*2Ÿ)—$™-¢ ™P8„]•ºF¢^»U¤âÓdK É'Ù$—J’5¬ª‚êò çS䊚ñúxí*²©3‹cÊ\>úÎìçç§|úë±Ê;Ì™]‡QÌKå)b#èwá°HäSI’9 CV¨ …°É&Z!ËTºˆÝå%è²-0W™©¿®‘ÐÀ똩G"N¶$°Ø]=öŠ6›9ò%Æ¢Ó”„@–d|Á0NÅ ŸN‘Ô$<>/>{9VÌ“ÌA8à@˧˜ˆe’Œb±âñð©'<Ç ú>uuy‘y 69IF3@–P>Bn ’žg2‘Çêpô9Q€b>C"/QtÍõor:‰ÅãÆiUA”H%Ò¤4_ ˆËª cλô™½¶Ñµ"TœÖ²*£˜ŒQ´¹ñÚË+AzjƒN±úú›ˆ¸Êß+÷ÑÌŽYè¤SiR…6—ŸM&Q4ñ9,ȆF^”êÌÖwvg™L$æ§¢“I¥Éh›Í†Óã¤ÑðyXdx< =—"^¨ÙâBÕ²¨.7.U0•3p©&éD’"²bÁáö—æìx˜Wf)Çã¿xðÚMli ! T2Eª ãòñÚÔòb$tÒé»4߬H%òÙ$iMBH2v§¯Z$‘Ê“/jHV~¯§U&ˆ‘Ñ(5§I,™£¨ ¬./§ U6=ú4ǵvn^‰W‘ºF&•Äâ a·È¼Þ#¹‚Rßy†¸3“)ïs…&œ¹§«gç±\>yIsQ¦N>ãàKG°­ÜĶ֪ËOÄZa«õfc±½¡I<:ÎPV·Õ½ÈŒM†Îä„ÞÄmí~d*Ëü9&—˜—ð¥Å6°— f‘®gHÔ­a{• Ì·KíCŽ2Véh”ÕO¯»Ü íJßb,Ø<€Ib|€hÉMSCöKš KØÙ^&³Dw÷ ΪB®¥7æo@`j3S̘âô=]ç®®˜¯z$¯LÔ,fë9ưg»#þ™{‹7!îÇÛà’Yž 2ê:Õ•Ey»¤¦@™Æëhà‚©Õ\NÖðךÖef,!ÛXµ~Ceÿ{b˼rže›Ë@uý¼ñòFËýö»#Ï.2þšVüÏ_KÑ.g=„H²…UíË+3¸¼·äÅ"¢‚X9ÓÔs¦9ïêü5yúÈvË6ßD+‹† -ú_­2•žK{\ü; žVæ|Iµ”ÇÃü´–Ês±·Ë¼´*RYìá²—2ø*ò{µW/d¶xçwÙÖãþr]/žê\[\$ïKj³Ë|ZYºKm£Åc´²œ—©<—0>.æ‰uy„RE¿Î]P½Öô§1“Ò…™5s2Y\ÙWßËKóìZgŸˆ¹ËÍËÝ(ÿ­@o¡Xè-ç)6_Q`f†O²¯k”Ñ©8Š;LSs+Ë\ D ìÅ3[XSË05Þ‡^MÈ©¾Ê ¸Ð¸f~œS:-+ñ,áió3€Ð ¤“QdO. ä“J*¬«• ½/vX0)2ñŽï¡++Ѿ|5[[]üüÑg((*v›õ[·ÀØ1?™&âUðG–³}] e±°4´ Ïw§é\VEÈ©Îì¢|;ªå3¤L+Wù¶ùM;y žaD÷Ó¸ØÑå"xEuH¹J¹$‡§MÖÔðZ@h †¦dêj½({NpJZÁm+œy/>ª½­m&©d”Q=Àªå^#ÏcÏœ£sã šCÎyi\–â¼B]+…^È0Òs’§ãÕܺ©‰Z÷‚6{M˜é¹ÛwAtø {ãkhgËÊjüõ’¼Ò3odßãûâ‰+ âËãÂ6óa1Ÿ&–Êc âxq[Ï$ŸàìéÃØ[l4„¼Xô"Ñ飓ŒÅB$ì½H2•"o(x¼^|Ëüí àÔ²qÉè˜ÌÊæ0*b¥0×n_C[µ Y†Þ¥fïY›äÉ—è[ÙÌ:×üš£D!›£Êï¼àKcš&àóû±†z2¬¨ ö»Q´ ñt’) °I&Å\ŠŒ†±{<˜™,&es·Ï].G4¼ðޝ\$žÊQ0ü>7vÙd¤ë0åXVÔz‘um^{xm2Ó©è%J‚Á@ù­¢o´b¡Ú(d²”ln¤‚†Ã.QÌ»½X aêLžå@ƒ­–&ªý^òÙ8Ã…#î —wqß¿Þ6³â©rDKo €S)_î%²4£|©°H•ÀÐtpxðÛeŒ\šX®„jsð¹ù½=§9d¬ `©"à¶ E&­x|^œ²F"‘![È2M±¼4ßädFì“I¥HæK¨/>›D)—Åî"ëÙL‡ÏG1sá¿]&™Íb&‰` €¤§çÕµÊïYtã¬Ú]Ô-[Nᥚ^Î]Ë¥æ<ºBA?VIPÌeˆe‹¨6'~¯“L<=o 9,J…7R¹&™t‚¡aFÔV®]Æm•Ћ&9d‹¯×ƒ]äHd „¡¡INB>Ç"Sžb2ùUÜÐää¢~g !Æx2=9Á鸓æè)ÆÍfnÙ½‘/asX±(´;0ÜØÈÆ/#ƒI|­ÛÙÕââßz§s#M²NëÚͬká’gÃ"_Fh,–ú¯b‡Y6 ’$æâ2›z¡B¡Jöì0׿ïV,Z†‰#îZ,2ÉÉ~ŽM@K؇K3.šºYáèw$HµZâܱ#œr,c{H`˜K¯n¦®SH˜5ŒÂ`h8F£Sš>OA¹}ø'ÖYú8ÔUÍ Ww૰ϳ;œ¹”Ÿ59Ñãgøù£½¸\^n¹åFfÆ%†¡ƒlÅ~‘ÍÔ2üòØ$ïÝنÕçGï¥mÓšmŽÆ ¶ÖªèFÒLzÂ(ð˧Žl©Å/exyZ窉豧HÔ^CkØ05žúù8;×Ñ„§²\×h!vê™ ï{Ÿ'UÕ„7q–#®õܲ®–B&n™™à¦Aß™£¯hë¶6ð£Ÿ>Këú:ë‹+$4â“ý$±râè ß2Ôb‰ëkpfãìëܱÆAÄZö£/ê–¹¡V*䙣T­päÔ ›®ßJÛ¸×ÚfÌÕµ™z—ÉžMqM“ÂĉãD6¬¡÷D?ÎWÑ9¹—ÇFClݰ’€Y6ñ2ÍgŽžE_³“k\&Z®ˆ1còTJÇ8y£a…ÉNÅÃìòžãˆÑÀÚ:;ñ|‘Ò¼ÝVùÿ…Ñ#¼8`eY£ŸCÏeÙúV܉n\«n–é癗ƹy‡“ƒÃ¶¹wZ×6óüñq®ÚЈO‹2ZZÍÊ€9¿® pa¼JssZè~â0µm „”,':«Nè¢mëZ¦Îu ´S:ð ®µÆÐî5õT;«ÏèÔ‹‚ ’QÎ|ûª-‡NÑ«çƒí<¾/MëúšŠµ(±þºmøåÔsgyè9÷\ÕK‘‘$¤Y›ÍYQ.csø¹®&ÅÙxšF‘÷<Î!›“Pu wÝ´iΆôr m†Y E_3½›¬ØXV¡QM’;ßCɯËEÐ=“”¤`sxÈOŸch®sÍ|sÁORúÜØ”YE«‚×ïB 2ålƳäà‘q8œøœ6¡—D&/SÓXGs½Mš"]L3:8Æ0v{]5¸Ô0LŠ»™k[h®ròXÔ²Œ;È%/‘Öå4-a¾()^ªR¼ MuTS_¡Öšä𨎩¸ñyÝ$?a¿‹– w"Ê´(á·šèÕUSFVm4Dª©ó[Á, $;U¡µU?3A®Ê;ÿ#O×ð¹,dd ¨øVÜ‘ÙL324ư¨hØÃÔGª© {ëâd 6«‹ÄèyŠNžéòM­8\.¼ª%YÆ’¬à÷Øq¹}ï=ßs”)LÃåÆí´cÓ<øìf–Âqž,(mm&&—¸~öé~ ‹ÝOOk#Ój$ý,ã7®˜t±mçZÜv,ЉæÅ‡[vÓç6a]ìÖx89ÅûŸ^aÿž-lôYV§”Ëçáf††ékòâÔ-ä¹ëOqvxF¬rúð¬+Ì*VUÅ,L…È0E„¼åÐâjäÍ’‘Ë×yÿ~ˆÿòïvcYž²øoþÃ&Wîkí}…?k˜æ×¿ýœÈá£ím(i7°#”¼GŒ4 áÂجfT“ŠPU Ù=ô÷íæX«R`ªü –P¯ô[€0Û hk´#¨š–Þ>¾w°u…cV㉰ìþ(ÌV̪‚Rð_ p¯,øC LÎ6v ÐßdC ›gQQ0«*ŠH!Ã00Œâe„ÙÃÀ+;ØÕåE¢¢.s5âdÒíú{‹ò¹(ÂlÅ¢ªEòsÙpTtÍÊô“, ît÷£k 2Uxvyß;„’wå2 ßC¡ªè6 B¤W‚©ÔÄsÈly¬;»|((©%Ăʩ ÷èî¤Ç&ˆ&MÃT¸iašó׃üÅ_à^"Ì} ; 2—€PÐ>öìß‹_W0r9®¼ŸŒ(š¸j›ÞšºúùÎÐ4)ª ‚ñÑiì‹)º‡QGËËdã Ü ÆPU!–Ýà¨kù<+ÎWYüweý‘ÿÿ2‹b™š´¢¤¬šCÅ&–'¢ÈxYv&)DË*zjÒ±ªÔœ3ùúLtoÝαþöüJQÝ63¦V!ÀøÚñ˜ýՇ̅:éöè…9†,ž&f³)ƃ*ö. !Òxý~Z›ó[ryOŸXÁÓ§ÊiàaTyùÔÄšfÑG£DXá’YàÜÅK\}÷?ehïN6ëa~óÉRÂŒ¯uc¯³A"<ˇŸ^âÆD–ÙL”ïâÉÕóœ[ݺqÛ´Ú¶Øq7zxïýè}eÃMž!ªƒžN~þÿ#¥°aë>ÞÞÕA¥<ƒ3øôä%n†zjoms“ Þä·ïÝÁbµqäc˜(ŠRp{«mI Ï?âóÓxü(Æ',±}hs•ÂŒÝææÒ‡󠹇CùnOšS'ÿÀñ¬ÊðÑclu_之$WÎ|Ê%[÷¿Nƒ+ÃTI¡Zx}3_þŒ³Ÿ«lÛ#=\݈ºÈ?NŒó¯íg㆟”ÈãÍAw(]kÒR Y4Í;îµãjÍÿ?>u‹?ž»Å½°D[êãð«ÛiñlÀáß}Ä;¯D’÷ò*ÿW ³Ã·óýÍ|rù3ΞÎѽû5^m2H„—˜]TÈ=ÃðÓ%–ÛÏWc³ÚiÖçøÅï>Ãn#”#Tœ. ÑSð›ÔŽnò1¸£“wókrš‡ {9¼·?ž;Ïÿ¼n"žrWÇAã¶øÎ\àçÿ{³¯·Ðåp£ÜùˆÙ†|ÇoFw”—ym{ÃJÿV<}ªÆ:DkÅôÍ=äÔç—ŸHðq.È®=CõÏsæã»ÄÑyõÈktY]Ø¢#ü¯_½‹Õ×ÁkûÚ¹ö/W*æPí÷ªô÷øœæW¿~Å`àÀn,ÊÍâs])‘_±lÙ^>Ö $K£çùàòcæ’àjÝÊ G#4}‹OÌ ]!—6³ÉÈrûÌÇÜ»h§oÇ~vuxÉÎ-ròïsFÓqy[øë·¡Eg¹üÙ§þ^¿å…<}²³U[r LWñˈëÒÈŒEQltÅ •Œ•yñhN±p„X2 ª†ÃéÄ®f™YŒ ›‹€Ã\¨X1=Ù4óÁ%’‰IˇwKEB„Ù‚ÏíÀfVk’Ë3É3¡V» .gœº‚‘NS­˜H^ ËH¬N§¥LáI)ɤã—¢$ °Ù\øfæçæHf%B(xý~Ô\‚hÎJ£³Ä¢T¢R’Í$YZŠÍ躎Ýa'+÷Àp[5”\š™…%„Ù‚ÇãÂ”Ž²Ž‘Ì‚ÇïÇ^ðxR­ž‚A%ɯÿïÇ4oÛDWƒ ¯ÏU5ÊÊ@ž5°¸!––8=^¼632—d1!!UšüD.E¨D~‡™ù` ·Ó‚nV*gÑCez>ŠÓiAÉÆÉinÌF‚¥pœdt‹Û‰.²„—BDÒ’€ß‹Lljb£Á*‰D’˜¬%~Ö/"3ÝXk«ÛGfá'//²s¨‹…©qîÄ:ù›="l# ó,^"œQÑuÕêÆ§ 2© ÁXóòFŠ™ù0†0åedÉ\ŠÏ TEÇã±c-‘Õò\Œ†C£©üîÄkÇb,Î͑ӜÜVDEŸK#šO…§Ù’±z]U^3Ùt‚`(B,º®ãp¹Ð3‚Ñ$YT~/𤓿Ã)L;^‡Êï~ùIÙ²ijMˆd/;hTë¯1þçoÙ9dÍ>~_‚Z9‡jõå« àW+÷Z©mÖ3ŒxœZ!]yáé)*bKÌE¤²„ÀêôÒXƒW÷|=Ì2µÇ¢IRi•FŸF$’Áâ*ò2kö)'¸CsyqZjÇvL§â—’(B¢»\¸,µÉÉ2›fz!ªŽËëÁþôx½5‘JÆ ÑÔWOT/sâ‘AÃFƒÛZÎy\Ÿß]£2ƒ´fUùJWQU2ÓU执 „I£ÉïEÉ¥…¢¨B’³ºðÚkqý*亨ª «ÅD$*ð:ì,‡BM§â„b’€¯q?ÿRF–´¡Öˆ0TˆˆèÒ"ᔪÛiôتv-RJ’K‹d¬NœºÆòÇâytF*%”Ñit•Ïß²¶Q¢ÒJÀ¦®,J½‘jΡ— i0ŒãpÚ [åõʜ䅓Úg¡I¢“×ùhdŒ‡Ó (Î6ä{»:Wn’TþoE”~ýV¾zå“&—óËoÐךæÁ”ÿúÃFF&Ùxp˜.³,@–¿Ú…z¢‹œ<}çÐk¼ÚÀ®È|(»bsÌ?¹ÏïŽbWÒt:Êᾦ²qåW 9b¡iÞ;~‹¿“}÷Ðg[N,–ÿ”|)‹VòÒqÌ<¾ËîxøñŸua*9/½/“ŒòèÚy~³ØÉßé§ËcÆX¶t®È¬¤îU·ÿ’L2ÆXLÐî±cS˪¨ù<ª¶ubå쥬J™ìv2rî ÷âHÝÅ÷¿{ G|’SÇÏà2„6áûC]Ï(×âe>V&Xû2ÙÙ$ó®ñ§²üå÷†ÙÚì$KsOøüVšwŽ `£„Ó»|{(8ÃxÚÏöæ¢Ò_½ý‚|_|v‚»1Ž-|ÿ@_y€iM';s‚ÙÃìínD× A±WY*æ+söÉ(gÛø÷ÔeFA‰¼S© ã÷®p.³…m÷b1‹â¢DÈeã©Ú^Ï2kbe•—)Ø —DI5#ãýãרwhþ&G~®êª5÷ÖjﲪLçOQ˜ϦüMK_ÁÓçmZ´8“×ObÙ°¿ˆòøÞUtŸ‹ëSÈd˜ ¥›£;º˜’|ðÑ fÓfš{¶óÝí­˜Ä2 ¨P»ªÑÖÔHS C2«£"‰…¦ùü¿ãý¤‹ƒwñJÀÄ©ON0Ê`kêã·ànêæÈ¾·²0ˆg9wë.‹áYÕÇ;Gw¢ÛÜt¶4a#Eƒ£–UÐ`æÁUŽÜd)§ÓëpÐrÜ¿pšó—ÈZùÁë{‘áiΞ@(ÄäÞÀkñUR”Œ4‹S·ø§_œÇÕ1Èû7#&¯ñÉ•‡Ìe4ÞfûŽ ´Š1ÎŽiôw9¹q§TC¡Çœ?w‰û1+;÷3Üå£"—\•̳ï¼õç“Ifße*šÄiqÐÑÔˆ®K,^[Ö«.Y¸OoÅ©³W¸=—aÇÃô»rL]û‚îiîìÀáñWmÿsÉ(“·/ññèâó ÏwÑ’ð$#˜ÒЄdëð ™Ñ+\Ÿ“µøùᛇp!F¯pft–˜â£ç†r·9{ŽTs[aÎÄ™{xƒÿwvÍ×ÉÛxrù·FÇ™48í9ÈÞ._1TaFrŽ3g.pñq˜ÖG8Úe#5yƒ.OâíàÈöVN_¸L4C8œäLm µd¸yí1MÇ©dQìí¼ýŠäÄù»<\ʰuÿkl±§ÿâ£ÒLNqÒ74ÌNÇ<'N_æöb‚…ˆÝ2Gli’wŸ'.t ìá»[<ëOYäÊlŠdªr<“§IÓЬVž„â%ă‡1½*KÁàÐv¬#_ð`ZuÅÓÊÌÝ¿DhK3þ 6®b²ñúžn,fƒž.*摊Oï [§G˜œ™£C‘Ìk>ºÚrDæï°í¥ÕY\ÅA>yØxÆÇð&;é¹qf"IÚ}-8@ÁÀl³Ö—‚·¥‹][Óøs~:›±¤ÂŒ„\lÙÖ…–˜çÎl„&#Âôô,ûÞ:€ÇîÀYck) “IçÈÁ~Þ›äê|”à¥Y43}"ÉùGA¾Óߌ»li”ãñã%¶ õ°ÕåêT»¥Ï—Ä“³8¼lêÝȬ_cgw ÍntüSA?ÊÂCúfLÙRyŒ1 »?΄¥ƒÇ4ã£ôµûðVŒÅSCf&æOpãqœ­»l8-66ï݇P §Ùj°«åj7â¼w7Eû¦A|JŒ‹ƒlw¦XœŸ¡gÿ49¬¸,ÕÛ6“f£µ»á_âáôSè+á7 Q̪Y*ZÍÛIoGŒ©[ù„k™DŒù‰ú·Ñæ÷Р+˜:zè™™'¢ p¨¿W%S\æ¸?r…”«“7{­œ¾2J`w/í›hÓÙµ­¾v'¥É݆¿½›tÐÖÓEâó“è ~šb“xü: ñ4½Ùî ±°0Ãl$I:³ÈõÇ*‡÷örá¶Aw‹ ·ÒOo,ΙXž;Z˜æüÕ9:ŒËjÁc³àít33׈ Á¦¶Êã™cld„%Kï¼¾‹ÓC&<ÁÈí(‡ìcarœoè,Dt¹$c³*.uŽ‹B(¡b±w6¡’1o§§g¾ðGçhèT/.1pðM2 ã\½:‰Ïz‹˜³“·6YøÍ'¹4Ñð,Þ¶^›ý4ølËÔѧ­ ¾TzúH?ŸŸ¨\b>“ÑG˜¬¸}-œ}óJ'û´0ºÍC{c‡3ÉÕ¥c”ч&læ|æÇÚ¹±|®ü¹ŸÍ"‘iÍîaÃÆVZL/$ˆ„—xôè óº EÕ‹ÛåòŠpù}47»H3Ït"M»×Û¥=õ¡è;~“%ÃKÀmC.†0üM´u4b ŽÏÇqê ‹›Ž–&lJím„0é8üºÚÚ‰OLp/g|vS$Œ]S°ÙzòyV*ïÓ½4úi5뜸Ÿ$‘‘_ª0M&·ÇSZhð¹q™$[{Lœ^X$ôH¡q“H”Ë#brbŠÉ„NV7°{³Õî €jÖp»ËWãˆñèñ"ZÏMv3Š“kõ`Õrµ£Ä˜3ni£Y râJ”MŤÙionį+5Ï÷’±%FÇ'XÈf…"`u‡(šÃŽ™H0Y¬x›|ܘšÇîpÒ èv'n§ »ÅG£[/pK s<˜LÑðj]mFNÞ&’ÉÕâ àÍS‘*!“nã•ÝÃØBó¤TE˜ñyܘb x< ÷ÒIMM0OÇðfs¸!s(ª†Ë£ã·™0«nÜË׋G™Î6ñFGËÊ¿!T6¾²•fS«I©6xÉcIü{›ÙКw™˜‹0kä»m-˜ãO¹²€ÞèÅãQ±…5œé9 ¬hV/þ\¿Û\š%<7ÅøãyÂÉs ™6;f‹–æ’¹yrc!&–’x†ènµá³Î`R5lV?‹swÑ,6þâöÿé­?5$Õ+Ì'éLUö5×óP°9½äFÏ3¦¦i>ŠI\ ]d6‘az>‡5`Åjncû¾Íìêp¡Lzùr¦–ÕL Šš?ºÕGû+ÙÜ„[Í¡jf ³âdH‰”Ó3" *é¹9¬¶Hê«´¼JÉîBÁ¤›ˆÏÍï°#cA|Ö,Š(qEÕJ¦´6!Ô"™_ÕØül~u˜]n’†‚Õ,0âE/ )%Ùð4‹ñv|Z—Õµâ©`²êL/ß…\â‚T&G.'f»w'žãg¹ØÄV ‘Œ•Ë£»‡¦Æí¶müÇn2iA¥+qÍçQè§§¹ÍÖ|±§NìZr¨š=¼H4ÑDR‰árZ°hŠBÑ! Fûó³\uòãYþõôÔª”®kòŠWÊÊijþ_ÕFCÏ^¾×âò…œÐ}¼Ýš¯-“̬l½Êê*íž3‘$Ù´™%³‹YGY[­çƒ‚ÕÕÀÐÖ€”YÎQ]¾|&æºÑÂ;œ$|A‰U·ÒfKaX;ٿ˵÷ l˜—nÖ°¥Oç0›óÊÒÕ=Ä0Å­ãòù`é8šÝY.FÉt šÙŠ+ýˆdvÑH½±yÅ;¬H^_v<(¬äÉqû‹[¨ƒûy«Ñ`ìT$_J §äQ4E:­NeÉIÍÕÄ_½àÁ½ëüþ³ ?~g ™Ð 7o> w×^z­|Ï5?& ¯³Õ†âñ¢ÛüŠSdœë·Í˜ÍÍôi&r™$ÁDœGW®b·»éÞ2€iê.÷'‘‰,—gôxšÙ3¸È‰“'±»ÜB»uu´|ŸT6îÞÉâIþåøc=ƒ¼âod÷À"Ÿ:‡Ùîãµ­îLÄqØ à5ãÊ8±Ù-¼fž/Ê£ k´T>=xîª7­"×J^eV#ÎWYöKÊÖ²d¯Õ)>*ægM9‹²yYÙ—š¨”ËVåÊþJÜ:ω…vþÓ¾w.ã²e;è*ß²Ïwõ8¾ì*Ç*({é*~µÒËÊw±ü-‘•ƒ­a}¯rBYVs)%F4ÊÄÿ3™±ËÏLÈÐ_ß¹ÿê•xüViù5¥¨…Šs‰%ÆoœçøL3¯ïϤXæ})+[×çèõʧäJS˜xËA„Èû|¯NέÝ^õSz¶þ—ʧ¤×O­#(A¬ør/ËLJPt'yl·µVX¤r¥!¥Dfâüñ£ã,(ü ÇŠ ¹²U|&yK_ ÍÁŽöâv–+F¡˜ 8Ö^0éìÞGNµØâ)o7¶M¼óz+i šÅŽÇñ’˜þuÔ†a”å‡ù…GåÉ&°†œ>¥Š «ËO)QG˜xŸn8}©PÌú×ÚþsA¨4ú쥞se®4”]úFÊã[‹ü“I³ÑÐXÉkýº-ÇßÉ$2™¨¼\•“¾Da‰y26üNkþá’ñXü+.e2¹P,S8b„?Á’ûk§"<¾*¹¬¿-Mσús\(õºƒåï˜Á³yúH¦Æîp-g¡·£€K#—Œrîæ$ ´<øÍeY먣Žo%är²`™žH''kéB“”Æ%E(ÛAª² 4ÿÄÝür”z¬G.JŒjëOzyÈU~^/(OÁ^dzc]Km½¾+(¼À2y/‘ø§ÿ>=ÿE-Šw<®Ž¿ïèø»ª.Dó]c[>Œ—ü¼Œõ(@Šò«Šñ· ‘2aä’÷SéªÐ×ëùöbáïz„¢ÀÌ:1=”#¿zK×ë'QJ™ùùÜüègáè͘!«rV@A9öéºÛª(½B|cæzò%jÝ*$Ê溓¡”’„‘Kަ2ëSa®C™}ðîå·–•Øÿ¼m ïâ>¬IEND®B`‚iep-3.7/iep/resources/images/iep_run1.png0000664000175000017500000014351212271043444020647 0ustar almaralmar00000000000000‰PNG  IHDRÈy½@±Ž pHYs  šœ IDATxœì½×s\Éšà÷ËãË{xG‚ AïM;vßîkçÎìÞ™ØÑ¬6vµRèPH/Š}Õ£^¡Pl(±ÚÕîŽÝ{{æv³ ½w AÂû*”7çœÔCU ¼}íðc€(œ:™ùåçòË/¿Ì¼ƒwðÞÁï(ˆ-¿…*~S°¯ö,ÓëUU öTNn|ôJPÞ/ÕrûÁSÔʉ½–,Cÿ·Ý]‡è{mLVé`IÁa‰Pö¥@b‡%Bm$Ô^ éÇùÔÿüç#“߸ ßi{¯æ¼ƒßOسVï\ü7 ûjÏ£¥ß4½boöµ± °öÛÞF¹ý5µŸ=—À¿ND£†Ù–B­@€}FVj+àßž5èLÄþÊ2M¯GQ”· EìÏ­åöb]}¼¼…*ɶ÷3Ôýª°ß$ú­ÀÿÞo™?-–æê_¼ ÷è^l¿iz=ŠPöaKê/Ö•m¿ý«•Û—‘}+%í44í_'âBìGÖ… jÌ»¨z±{7B½Znßt1îýX¢(‡LÓ»W»Žgm Û«ÝZn?8Rmcß$l²äo¥Cû˜Hl…_»Î¾MbkÁ=V"`U9ÝGë›ÛÛ÷ùƒ·  Ôf­RJKUx¥ Ø>@Öê«kÙ;/¶ï¼Ø&8n|ü½ðb#û‡f`a‹ÖìÇN6Cþ!Øß0üÆûö–|ÿÇÛœv À¯(ÆÿÚÝõ¯:Mýûñ΋Ýï¼Ø&eÞy±¿uxg`¿á ÷¿.*ÉÍŸBHè04åQ~ã-Mÿ¶§óŸÿ8úß@ì{6÷΋ýý†wFö÷Þ‘o/ð»K%!X&({¦ÔƒQÂò€ØÏ”¤VÎS+·¯V„eÖÚÛ=U­¥TuN´MCkm«{lO@­\k­Ü HHÿ‡ÿ—âãGuˆÓïúy*M=QG tæ¿BxëYD{†wö÷Þ‘p/ð»I%!DÕ¸Zæ¾Ë UÃØ§¶ „V+·/¯„®ƒ®íÏÀJ0ˆ íωF F£¯o_«0jå¼ûo¯¥aûnOìs€¬n@m€Ü{±­äÞÛ{ër£’·(ó+Àp”®Kþú·°y€D ŒÆ÷4 †ÜR³`û§wð‡ï¼ØfÍý†¼Ø†ö„a ¶´îÛÀ¢(Uºì„P ÷]NÓ†±ïåx¡k ëoi`áwÑÈþc„·çßïì Ÿ[iµ§bÛKBà½ò>‘ÿþØŸ‡ó~¯àûk‚?CòÃŒ}°]·FD›§¾ Aâú_ðœ;‡ÖÕõN¨ßÁ3ÇwðÞÁ¯ ¢é¤`{ˆµIIŒþƒèÝÝÕ¿Þ¤wðÞÁ;x@ µ¶4{ÜEuj)a—ƒê°wƒã;xï༃?4šNÃXX;õgó´Rƒ7'†ÊÚîõúïÆ·Eæ¸íc©d[‘õoÛÛO¢Ç@Êõú7ã¼ïθnÁ¹a­l“³°c›ßÛÉÁX§é:f ï×ëÞòeóºšáÝп=­õÕù»¥žzÙ ÚûwžÞDãær°]îxC¿¶·³ׯ:××F›4Þ\öðlƒíø×Ûßü|Ǻöº.ûFùnòÝn4ÞTßúëMúÑX~'ßü~³úêxmãɦžì€ëwMdr]îÅz6©â~ÖÏwmúmìÔV¼·Û­õm—ýúóÚØ¡îõ~7ЬŽïNhÖuk§^ìfÝЬ-]Ñ,Óì·ÌMqWaèCß\ÐÉ3ÿúùËQòºŽ¦è;zŽ«§Úñ« Öjßéùd8ŒßcTß³³ÌOps¦?ú ó×B —bz‘§p&ƒ­xé8Ãgg; (Mp­!\^àúÝ!Æ–²Tü=|øþ)Ç}˜¢Ú­¥ì¯_<à›á%r®F¨ý0—/£ËXJó2U¡TÖ&¸v•Šêáô•ctoÚ¤—fxðp–®«Wè·v#’¤0÷„_Ü~É|AÐrâ Ÿ ´Ùa%`³4ôÃ/™ç/öÑá×Ö¿/§YÕÂD½&ÆÛämI@JŠKÃ|qó£+EôÄ>}ï8£t!‘Û”­¦:n™B>Ͳ¦+¤íj êÊ[Z}ɵ¯ŸQüŠKqm'p:KÙ5è8y‘O޶ÛIXv!¦]XãÕÐC¾^$¯øè<Ï÷O¶âqKع)®ßzÁ‹ÅF×)¾þ e[#u#'± )^>}Àí9Wü= m²«Óܾ~—çx÷1®^ ®ƒ!h¯ý¥¤´ø˜ÿôÕ%ÝÏÇ?yŸ>ÜJž…WÏøöY’¶>åÃDU¾œRšé±!¾žñáù.ºÂÍäá×6KCv{pKkÌL<ånî|>޾KMû‡]ø¸£ªÓØ%=ù¯¦}œ<ÞGWØDÅÅ.f™~È×/Vpƒ-¿r… µÖ— 3£øbLçêOÞ£oÇh‡Ô‹oùºÔÏå6Z¼ê6¼ËéeÆž>a®ï>í0k˜º 9–S mí¾=ïèd^qíÎ"%ÅÉ+'è²ÄŽºøk‡-¾¸æUë(ƦI‚®W6t©³,­æ1Z‚P)°²¼Ìb± ÓEÝð¶6ÊH¤´YK¦Q}~¼–^=•Ƶ)Ò,¦"8›<ð·‡í‡DJ»â ¥Ä.H-¯²Vé$°KV¼[)Q¬88Ò¥˜^e1Sä@Ä‹©5P‘.®íàH‰k—ȦV˜ÍØ´–²C@Ê éÕ$©‚k­?®ž²Š{¥\ µš"êÖšÚRRºS+¬äÊØÔ;Wõòv˜ü5Å©þÙ)¤X HÙ®¶(d­t’5¯ e ‹š÷êíÉZ¿SË5\]7½ÊBºHWÈBW«unÅWJ ŽM1ŸbÙ ÐlPÖ¼yiçYYI²¸¸H©»BÅ­bà–×(æS,¦Ê8®B1Ÿf1U¤?àCÝ©n™BÙ¦âJìÒs«9 mA<2ÇÒJ†\ÙÁv2,®æŠÉ€ß‹°ËdV™]I±¨°kp]›R©‚#]¤cy)Eö`‚ˆeìëì=é:TJeʮĶ $W’¤íV ·D~e‘ål‰²cSI®’Ìw“ðUG¯ÉŒ\º6…Ì*³K)––ËëòèV(d’,fÊØ¶$—I2“± †4 ­!Ú±µ>Yfmu•¹ù%*§ZŸt¨ÓÌ/,³´²†YÙ\Òu*”ÒK,¦ã´úM4m¯ô­mÆî3²ír¿1 –®‹]ß=þÙ¬ªŽJÜøèÙiN}ÖåäY^I“«XëÛqò”‹iV2¹9ãDºØ•ÄŸ$Šhª—ÏÄTv!ɪí!dº2³Üy4BÄQ(·Dð:~OÕàVJY–QP0<bAMº” V3%@h^"!/–ê°–ÌaËê`äH@0€ÏÒPi¦G †7ÆÑóŸp6 “ãë¯GM£+±³_£XaŽ^ùŒ«…Å›Ãç³)Ž´„ñúÕ&L ~:ŸçÏÏøQÖfxpë×'²ô ú·z]uBJœì 7.;u‘x"B»Y{^)‘N­‘©Ød“9Š®D"qœ ùLštÉÁE`xƒD|&º,±–Ycth§ë4è '" KŠ™åŠMº,AQ±|A¢^»˜c­d˜»L>›¥ì14ƒø¾ºÂü«I›lz•áGOyÕ²3N<ÂÐ5‚{¾È¦VUqŽ÷çñ¼Ê¿<!ûøsþvx–îˆÞJ)“&•+U4EÅãµ »<ÇÈðž˜:-Z7@Ä·óLÒÉÍò`<‹ihȆ®gž²œ,±ÔöÿæRå—O¸öè%ƒ'ˆo[p¨qYõÐzô}Ž¿çEÎ|Å¿{¸ÄjOŸ3Âí…—>}ŸŒð¯O±6½ÆñŽA|ù5f^N°â‰à·äÅ Ñ{üCÎ~b¢çFø÷3ÍÂZ'­Aƒ]ƒÛ±Bh='øÓ³1Äò׿bhí çÝ$O¿Â>ñCþüpˆÅoÉ‹ùma/ S ËiÓàùðê*‰[ʱ4ó’‘œ„%Ö}];—fþõ+ ýŸñ¯%oów÷—i¹ÇÒÁ-‘\Í¡ø,½I’”RSÜÍ¢"ðyD-˜T"µ<Íói‡XXG4X&ÕôÓÙ7À2×øûa?±€ÅˆµËŒ×!Ÿ^£\±ÉT$Šjñ«¥ÜÉŠŠâ8¸B`zCDw‘ØAîéT(ä˸þÎÄýÕþI§j£r[‚T=Dƒ–êJ0~¼†Š,­±\4yUJé,ŽÇOÀÒPÜ ¹lŽ’$ÔŒéZã»Ì¿¤K~nˆë“§®ôÐ4Q‘”Ÿ±°”áq¶“ÿéI:-¥æ¸vå¹I¿v{Ä›y)‘•<«+ËȬ‚é¯ê|ØTpœ¹¢ƒ·k€ÁˆQCɦ˜^fbü7^'FLÍ"òa©’BzµbÛÕ  Z˜ª@ ôðÁéæ–³\»;JÇNÑnîšý.@kiÝúHm›ÞÙw­EÃ0¼„} ¯ÊÙéû|=ßÎ÷.¢7¬°øô~Q9Ƨ3cC<›ÁãyJ‡9¦é”Y[ãÚ7Ãd .Ft€~zŠVg•ÑG÷¸ñ*‹«FŒ“Îp:‘ãÚ/î’Ò5tC’I»t_xû„šiªéx}6« óÌ.$)xõîæ§ ŒP;½H¤¬ :: M'‚5ÏCh¦Ï"“\dza‰ÇÏÁV}—v¤ËÚË!fý}ü  3X»öÌ-’œá‹ož2皨NÛpÔ-“YžâöÝçLdl\ÇAO òÙåÃth‹¼x6Æ£™$³É!äê …‹g9Ù¢³0ú„Å•VÊT¤J°ó?½'óê!?ÙË¿øi"½Äó·˜9ý'ü¬KQ Ão2Iv–ÉÑ!îM̳´"IMé>y‘D4Äùh'`pÒ3Ìkí|Ø"hyêBÿüžV·ÉÍ…<…’ƒ45ìä ~qÃáì{§8ÒêCG Zz_æ§±î\ŸZ§W¥Tb-éÐr)ŠßS ’ˆâ|;GþT'¤£–¹qí)þ³—¸Ðç‚[N3þ|œrG7­«¯1kSs¡yˆwŸäGV+/ïÝaiSw _ˆŽ3g‰ýõÓÉvZƒ~µ™ó+±³s<¸ó˜¥Tž¹’@µ‚ôžáJ§ËäÝÏùÛÕ8݆M±ìâé<ß\î¡™¿ZUÖC¹Ûù`³L=½Å/'’Ø=?äliC¯d™y‹«LWB¡\®,ÇøðãÓœˆe¸öù3:?¸ÈÉ®îÔMþË«^~p:ÊÒýÛ¼Šãƒ?F!Ƀû£”?áG‡|Ä:=ÐÈÇÝÌ ÝO§Ðz.ÒòV—<¤ÍÊËV3ôÎAD:ÉbÁ"òa ‡\j‘—¯—ð <½´s -V^q{i»XDë8M"ãG'¢8™eß¾ÁãÅ-Ÿuð}n¥Èòä÷ŸŽ0‘ZäË“˜þ>¸0@§'ÍÛ·x¶ZÄvÞîsüè|­> !¬¶Aâê=£y°8H{÷þ¿x+ØÃÞïý Ò¡\Xcvveuž;ÂÑ6‹„qØðËÙÚ|./g ãD€P"AWTåõ”EÿG8ÑÆ +k¼–`ú"\þñû´f&¹ýÍ#ž'0+³<žT¹ôÓÊÉ ËÂÃÏù«ÑÚ=&v©ˆÿØG|o°÷ùßñŸÖHwF é[º!BJ$ùÔ ×¿~ÀdI§ãÈY"Ú†ç´YjŠR›á•Ós¼˜×è<Ào6Ÿ= ª³»r6É‹;7¸³XÁ×9ÈÅ ‚UWƦ!¢2 ÓYü]A¼}}MÃ.dX˜œ`9ñ>ÿê£ɱûüõÍ N!ÃüÄ#â ?ü8Qšã«/F]n'Þ×ÍåZ‰¦WyÜýW·“¨Ì["ÚëÐãTH.¼æÞã1fNÇñµ¨íz8WÖÂFM}=̱³ç(L/37ø>ô·ÑÞn!Ý-ç¨hqLMCiú0ìUŠN™äØîg\ýáÇtF,*¸®@SáÈ鳸N‘Ç­ßçŸó¡î’(!©èx wKØTÁáUr¸³S¼ŒÈÌÎ3_¨0èìP—µð’À-'™"ÐÞGÈ£ál4CEUU„0ð)rU [ªh^r)åRÌ>%9LÔgíýFÙZEC(Ú)eY\œeÑêæ³€ÀÍ;d¤…¦(¨Š@ñ¨Ø¥ ¶S Ä©¡ƒ\9+‰‡Ì†ë|TTÍÂÜä Jסd«øtPUÍÀ(e¨8Nµ}#Æ©³'1~L’SC<-¶s~ ÂØØEêË ª:Þ­­'èÂÛÁAÿCždŠäm‰¿iÜÛ!5ú§NjG‚u!ÀÚÔ ¾¸ó˜WÑc¸RÅðæ¿ßNaf„_Þeþ|‡öçË û" \|5pƒ¿_Ûà¥ë€fD¸üƒËÄÓÓ<ýÛ_ð*ÙO_ÐEºr}VJY AjaN]<Àäµ—<Îp5ƒÿQþ䀭æ"Ø›øødí5Æ“G9Å!kšÿüWc¬.Ì3=ð ‡Â\ùà}|·®ó²v@¶júé<|šd™üÌ ÿÍOºñ"ÁI¿b2àèÙsîŠâÓuáÉJ–.e™ Z8ðV•ÊmÌÈjø¬™øÂtx5´’Eȳ¥ÅR†¬ÞJ—_Ckà¾ÌQ*«`éŽXxt é7`ÙÁu¶öõx¹Ð &øÙŸ÷±6?ÎÍ›÷¹ÑÞÎ?éµv]Gp )Æž]E[7H§R¡-ãïŽã× JÁ8-V»\$93Ç\²ÌW¹qÀ¥bš¨ŠºNÓúo¥vÒŒ[J2>ôœÕtžGÁ)æX«¨”ꚢr/‹“ë°Þµ¦xËL3EAHw}PÆupQP¤Kz!‹·ó±€‡p-ø_÷¤…ØððE­»eÎÕÝ ¹þ€Àj;E«/ÅàÒc®ß“¨Š†ÇòâÙAê²äÚ9æÇŸò0ßÎ…1"^•” ²Ìº!t¤@JQ‹8ˆæYÒÅ.e˜~=ÁWc>?ê¤%`îsýq#±Æ­XžyÍÐë=çiÕa PkΛ¬.“#.òQ¬8½›Vpk4ÝšMªª¹µä2)ÔlCÕK÷Aïúûnq‘{çл)å2¤‹y Ò`e5M¡=„·ŽÇÙÛ¨éø,(”w'—Í%5ŸÇÛÆbj >_„6e‚™¬K—aŽÆðªÍÂ+lÊn“jÞµ[¢ªW_i&žP-¦Šªé„}’I·*Õ·wPâBËÿîÖ%_ ôÏz ÕÖÝ·ñQk¶ÐÕH‚"yW§]SÙHp±‡Š0‰ôœçÏÁÔÐ}¾¼ÿж¿H>×ÇÚÊ,©Bž•Õ4¹¶ ^Uì *–AËÄð&h7ž²æ8,—$‡¥gyŠÇïðw7Êü“«Ç8­;‡×q©T\´z2' ›B.KAõõéßíšd󳈣4¤îìy€\÷Ü¢lFÝ›µZûi»{Ÿç3Z?௹äB1eVWV˜1~S'äecÖCÃŒD³ð{â´k£¼x=‹ãsYšHhëÃïQªaµ-vlG‚I›bv•Éå  òÉfr^:ãÖ:ñü _ñãÄ%Þ;' :¤'òó‡i:NvB!ÅÜ’M<âÇÔT§ÈêÌs¾xæð§s.,¨²ÌÎ%‘–Ž›O2½\!ÞÃkî’ LZZMî%säK6¶©£!ÐL/ÁXÒäãÑ(……eÖ* [B­Qœ±Q†â}D4ÀVˆµÆZʦ!¬þQÅФ,²²¸@nvŽ¥²ËAUC7-Œü,cÓ^ÌäÓY?²æ0äXIª[*V“¬aKC~ŸJ.¹ÂÜ¢† W“t4¸”‹9’—`,´£²¨n|¯y55…×ñ“[ÆÓyšˆß‹¿§ õñ,¯5ÒA¿ª¢[AÚ¢Šªa¥åy¦—büA¢Þ7‰omιIqmìJ…Tjµµe^Ídˆœ"´KD«’šàËoF(öÇkçX\°‰DCx]ÄžÎ3;ã¡ì¾&hE÷†‰kó!!êÈ2éÅWܾ3D²ç'D’Ô²J)!æ5ÐDuKÁbV!ôáÑ•] ‚K1½À“xb÷óƒ@‘ùżþ>_€x¥¤Yš–´ñ㯅âœì4÷G%ºh š›×qëäª,ºÇK´-À³‰ F]ÁÂBžØ‘Žõ-[²’æÅ“)¼Ò÷cFŽò³?¬H{…øÿn’“:G>»HŸÕ0ul¹Ö)·‚,-3µHø < tÜ *ñ­¨Ã ä×r¼´üä—Xµ:¹ìW(Ôúð¦Áqƒ”eÖÖ2ÛäÞÐ,Y"µ’d%]¤[caÕKÈ’5:mì-­þÕ$æ-³¸¸È”’'5•!ï¸à–X{Ê“JŸ|,Píwž>c¹¸0ñ‹€ Û_b:S¤Pqñ™ x_ ;™ghl‚ñŠÊÊ|³ý4·1xeVg_ñí·¯8üÙE­Ý3{ «KÌ/PÔyæ”x´{ª;WS$ó%r©U–BB!?¦¢¢&jaW³!ËG"äŰטO•±¥‡ŽÞNB/l*¶³žåŠ,R*X]u‰zד½*¹†oßæ™÷ÿì½ö}&²íZk+ ca¢›ÞÙsmBA·ü$¢ž-…j1ŽD³<Ì´r6àÁWI‹rúH_?eúUœp,Ê{z1><ÕBÜŸ# â3jž«"´0´<,éRÊ.óüîfJâçÈ9.·l]Õ³ ÷öVXšI"eš‘G·SZä(?¹zŒ¶°…¯Ö_©lðìRš©wy¸â ñî£üÓó1â¦Ò\A«ÒM|àÞkóÌ®&pÕ ½>ÅôÓÖs„#s÷ùâæá`„Á^?~O¶'¸ºËí¯^S‘#~˜Ï‚!–¬P„ˆGG«I»;Â…øMæWøâÆÍò #ÏÆŸ-â§yô8MF¹ÀÅî~Õ¤óèžÝãÆì4Ýç.Ñ q6¬"íó/ïñ×÷à‡þ1‡vbQ“‡ —ðå­!®—Ðã|r¸•¸OCë=Ç©{|ûä6Ë. Ñ3x…G­ªìuwºñˆ¿Ï&è?vŽú;&éÔ[4C"­>h»YòéUî\ÄŒë¡íÀI>°sDË¥°-·Ÿ½Ç‰Ö¼x…/‡ð¤âçè¥Zc!|õ¶„‚aùH„« é”Éç–™ÉÙGoó—c!Lú®|̧ýqBd'nðï‡øìãÓ ¶zw)2L-(Éüüï‡Ñ¼žú€Déÿ‹·†¹}3Öv‚Ï:ÂëÇni…%‡DO;›òø„@Ó-"Ñк!R­m½‡90w/îjD;ðÓ“abõ=¶Nå¥|­Ýt¹€ Š¢THU'‹`J OC"’¢øÃÊ›öýJìb–ÔÄs¦Í.‡}ììÿ(øzÏð^ò‹« üòk#àø…ty Lû#Ľ*Õ™f­?»%½T’Œ<Ú$÷iåñ°‡^{–{^0“-ƒ3ÂGk œ¤}‹ý²¢-Ä<ºæÄ‰>8ĵ ƒx:™·œ6²}¸¹ëMÃL oÕÛß”lÓjÛÙZÏú¨%7½»h÷nR÷F8a{XìM'éH)‘n‰é×¹]éÂFùþ`"šÔ×pzÅ.xm¡FsÜêksÛ–7”dÛ~§-ml?QÜ ãOoðùÊQþÅPvºqãͧm£3¾6>ß1ĺÑVßíß5öcû)85t¶ã[/W¯«ñÙd¶¶ÞôT jr"ËL~ýWüBžâÇçÐКֹN£dµÞ^ó“tÖ«hx½!é§iÛîÉÛí‚hÀ±y}[J·ÄêìwnŽbœ¾ÂùÞ8!£6ûÞ©ÿMúØb[SMøÓbÝ ¢NÄæÏ7õ`;O·êð¶O‚u6…]廲]åÞ7H¶åBÑõdæüZ·zo IcùÍkøÐTˆØZÏfýj¬·ÙûÒÎ0~÷&+yHv]æûÁ†uÕ­§õ|7kRJJOŸ2ýßýK¤t×>ÊçoÿÅðØûn5qo3È£¸65±þÛ.¤YI-ótFçàé0Áú© o4bë-lio/oí=šºK»bó» ï†ëvÿ† ŤëôEì±ÊdÈ8Q< ¡ìPßþh¸3nb«Žoþv×ÎlD¤W =ÈÀÑv|[càMËïB³]è¿¿¤ Fgh§ïv/_Cç ï¿A^¶þ½SER"¥CI$8y F¨>}jŠþÞôj7z5“‹Éõz5ýNì^ßÔÖ²ìêº{äÒ÷lõ¬Ï.w«›=ÈÄ›¾^·m;½ÈÜöwöR¬ÎÃýCu¨SŒçÞ;ÉÐdÛ¶qM…Ýg…;ódó[¢‘ü»èê›Ê7i}H)q‹Y ÑãX “Ô£9 â›ÐýaÝqh‚áþ÷An—üÜß<™¥?Ág‰àú~£_wÇ~oAT·¡ ù90èóû¿ã y£5ÜšuÑø‡†À x7½aYkó†%;¿ÊøÃoøùðå²#4¬`”@ßE~Ø9ËqN÷Ð1·1­8{›¿{çò‰nZú¯×us|~#ÅÁÓ‡9ØÛiñ›acíT–V™Ê{H<Õ”rYâå·×™î<É™î8Á_1íæg¸y÷#³¤Ì ñö|ÿ\1g”ÿòùS¦2e¤" ÒzˆïÐGyäkþãƒ,†¡bx;{÷Ñßpxo#Û»ìªuß.H¯f1[Y—¿UÔy2™÷ ƒî7ÜÚñëÀ¡~CÁ|ß|¯vC¤›gfÞ&óá3UÀemä[¾*äò¡f·ì õÛ!~>?:3¿¤ÃÚü â7̯š°ÔnRYrÂû扛{Éòjž›c&_Øu;ͯhIãíB»¨ä’Œ?¼Ãí…ÞþøÙéÈw±.µGd§€“›ä«£Œ'Ëm§øÁ…^ÚüßÅž@ T˜¹ñ93¶FÞaF8vþ"Wº†¿}@®ÿ g»cÔ ó¾f¥à2Ýz‘÷«ܿý€§K%¤æ¥ãÐ~p® wiŒ¯n2›ÌRðGii9Âgç:Ã×ø›áU²O¤“sÎp²5€G.óÕýŠGË9Š(¨BÁîàüÇ®ß@ò›…ÍTÕØH·¼´ù‘jè:v…?nYâõÈc«gùãS1,OˆPþ%‹«ÔnÁµS<6²ü´`7'û|„LµvØo}i³¬¦Ý²ª$è1 ˜ë{ešm\oê¬{*Õ2¹Ù!îeð^¿‰©*\ ÉU’Ñ2eÇEª¢¾÷·Á9Ú»'§˜1Žž8ŽX˜åy[?ç·ñ¨Ê³Z‰qöBÝ1šPÐ /Qb²RAm;ÃOOzHÍMðèþcº:?Øáº« º4ÒXÔð¬ŸFÑHã*TȦxôd™Ã±8½1„°s†é6çp+l ·6}¿NË- Õ‡ë§$uŽ|o ¿¶xßò¾ÓìoƒÍÈ-¼ë°‹‡)).<çËû# %üð³³ø- Iii˜/”.’•*þX~t†žæƒJ)»Âì‹gËñ¨ÎŽ“;Õ" õ˜øƒaâ!†ªP„æ'žh¥»Õ‹V\'_EÊÓÝ",ò¼zù’å’K¿µa–‡6ÓØk(8Égüí½$©œM@Í“³Þö£|z¦wq˜_ÞzΓWy†rË´Ç;¹pé]†Kzò)׿f>SÁlä“ó‡è êäÆoòMZ§¼¸J:[Â;x‰DÄÇ m‘ë·¦ñm–26F¬Ÿ«û‰TRLÞçv!ˆ¾0G²$ »Ì÷%ð'¹q{ˆñÕO'—/Ÿb0®±:ú”›÷žp/7º‡ÌXõPò«‡,ò+SÛh,Pfiv˜Ï‡5ZYd9›¥9Î/ô5•Ù©üü……T-Þï+òäö3rÇ>ä¢g™£pú˜Áð­{ gTº>j§Ë§.Ù™Ü|pŸ{c.3KωÄòÁù~<JK/øüçO©”*øœ£%åÓÃáÏV­ä’Œ?¸Á·³%ÖbWøó€¾‰_•RJ%GÁêã£KGèÖ¹ÿð מÎPt^äø¥Yšâë{,;:¡ö>ºt„6‘§¸0ÄWÏWXN§XLWð´àÇ!²ü™ >ú/ñé@œ€›åõ³;|5–¦,tÂGùôòA‚¥$Ã÷os}è%Óú*™±(Þö\=$ª­ñäÎͬ‘“~Ž\¸À¥žžò7¯?àùJEw(Û:å`SߪúÌ¥˜YäùýÜŸÍcKÄás\=%ó艓ÕmZ5Âóªý$çº|dG²´’âÞ\Åaàô.µT˜ºÍ·)V>Gƒ–#çù¤ßƒ’yÍ'£\{:‹±8K,œàÌÅ3m ìx'­P5¼Q¯†(o`]Î'yùäß¾Lƒ"ÜwŠ÷"´úTÊK#\»3ÆTº„=ȇéõg¸þõŽR ]ÈQt´u]‰ë°=1Å!—œåî­û¼œ~ÍX±H9·DïÉ |à3ÑJ‹Ü½ýˆç 9Êzœ3—Îr²=€™yÁòZžkÃ’ˆ3ÏLÉ ÖwމÓüö¬êdÆ Åhok'Zåæð2ù ôö¥müS«1ÄÚ0ËÑTŒ~?L—‹TÌ0]íx„Äq@EÃG,"dxÃ1â!Ss@Œ`”ööNâm:+¯¿edùí> B'‹ÓңǨóˆÃ ËS”f³ëÕì)‹µáÄYO!ÞèD}¸u Y|GNq¹E0~ó ÃK$ BÝG8_šçÕ´MÅ©ï²É¥WŸªpäÊôš ªæc׋6‘ÎÏñêZž²ãÖî@³Y|1Æj¨½3ÌÅ5TU'¼Ó]jt+HëÀ1Ž¥ç™±påp;‘AËeÁ-¢›ÎtÎ<ãÆæXjõ‚žgzx„Tû~tÒfqú%wï¾¢û³æa#!|FÁ½j^¦âoÿvœ/ E÷’è9Á÷Oúja ‰k—ÉfS¤…Ÿˆ¹a”m4•,Ó“ËdñqôçgzγC\ŠwsüpŽ¥L†Ë—.Ðéµ*EdnŠëÏÒDœàx^ß{Äý©(þ”üÃ#~Î>ÆÙ°‰åah.¥Å óóËôøˆ÷Yebôß¾nã'­eÒ+ó¼N…ù“+Wð+ ûBøÕ<ÏïQLôóþ âÄ=î/ðvíîçØÜ8Óöt”ï ðx=8Ù$SMhßuµ…Bz‰‘'YŸœæÒ‰ ËOÌÛ< ¨è:ùÅ$¶PXIÀèR }z™LÛKv¾@ŒÃƒ”?eeý®BëáDÿOÒ~.œé£;$ê7ÈâM[ ž?A¯µÄ×·Æ™_dþàºw8nN³üt á„û˜¿Z©lâ×ÌÔ =gOr®EåÕŒ,µëiáè‘ 91¹RãWHsÈ$—z¾DôôΰÆÔÄ(_µðã®,Ã×_P>t‰‹GF¿¾O¥3JÀ£# Ûùè×Ué¥õàI>íp)­-1öb˜G+}|Òu ŸÁµÄÎò½ ºå'hH–ž>dL´qæâQ<™®=yIgàž‰‡ Óι‹­x—ï²°Räv¦5j}/eXœaÈîáêÕ(zy[·‡Mœ£'PáÕëÅCÌžÍUˆu)È¥çܘ7(+½|ò¡Ÿüò4O<"ñá!JÉUrÇù³Ë‡(.Nòèù0 .Òåïâè›ã.'s¸-F4ìÙÁ™T//¨ïémxÉγ27Ê/ç?8†•]døÞ—<ò}Ì•n…gw^Rnà£S>òc¸3Á7 Xšz{ô 烅/G_ðíëvþÉ!_yU°ü Ž?F«¾Lº0ÈåcÝô´†ñi&ï=ä¥ÒÉùËq¬Ô ®?}EÂ{˜.7C!½Êä´B÷§ùWÃð÷pð·é]Y¡`x° ÝßÎÙƒCüâåãó6½—[‰·DðY%"‰6¼ß^ç?|y„ ÇûHø7EE›WûÍ¥;â2ž)R² de™oÿá¿" ƒ€ªJôqõãsôìëÂ÷·Ee›ñÞ”“ó…Ó5;ÚèmÓqCyP²©¸U£[sJm• *†i23<}:yü0Ǻ|o¼Ñ@1üļz ¥^™P$”½$ƒ—±ƒœ:Ç·Ë“Š¦ã †‰ø ¼nˆD.M©._I h!ŽŸ:N(¦×PÐu‹È¯û*¦¸±mIè; …áÅ£©¨(Ѝ­T݈­^(x‚­œyÿ#¢33Œ>¿ÉÈëÃüôêÕë·¯Q%¦ØŠP 8Ç–Èd3Œ¿zÂß½œæò§—8²•[5#]3o:P@ˆq4¼MUªŽJ dõ@`ÕŒsúÒûœW¯$P4/ñ·\Gšx"AWëÆu7N>ƒbøi8ÊOÏÆ0 ‹P0P;a§™”×èÂvO ݃ª{±j'Û¨jíxˆ:OꉴKêçò™^zÂB‚ê µ²€îµ0ÔÆC¤«ÜBEWÂ( Ø‰Š¢¨Þª¢­¯ »ÊZœS§Ž2ÐÀ©H„ ál­Ôp”²zÅé‹›iS]æaðªêúXÍÂ3@õÓæ)’²S,$!Ðv€ØÄs“¢G¬ƒ§7¡ 6è» ¯ê*»éµÐU!44E í˜ñZ—a¹…ÙÂU¡{°T•*¯äz[F®öYH\)0£øàêYÚ4¨$¤e8v¾•¿|r—¿Ñ1"¸ àÕ ÝŒåRË+ÜzºBÛ¥³œ®¬0úôqõ¾Æu\t—²cÑ{ì$§»c5p…A$àòؘ†RuÐ5UÛ-1¯zݪ‡îÓ—øñA/ Õ[Q|á0AÝËß“©U*S«Ûöê”Ë.¾ãýQ~tЃ‚@Qu …‚êoaà°K‡›§X*õ4©ºáh-¹ùŸ”T¤I´¥“HÂÆoè<¼ÿ‚ñ5gû¹U`ç+¸µ$‹u½¡q¥V" Cs‰…ãyØá(šãP*‹g½›RÜkžRµÿ7¬?cÃ( UÃŒÓÕžØ<jÒNãV’­4–åê†_ÖÕ+¯Ü2%§ÖwÕ@‹t¶ST4/‘XË)PRôê+uŠlÅCÚ )&“EÚ+KE|­>T*ïÔ‹KÀˆÐi•Xu ‚á­BÎÑÑj3þ:OD±‚ëJ¡`˜b¡í´×Daƒ4 ƒöΠ‹CEºÌ/ÀÑ3>£2³*Ë¢@‚ìæ @ÕË—÷ž{εçžó=àT¨:uG´zsÄšbYKWPkê«ÕÙ£9; Ù«!yò¢¾PÑu‹¸:Aš ûÚê-ÊžŠ¨yP)bô0Ò'¶ùõFæ—UvŠT+EÒ%•]± þäÉlmg! „µ†N„!tÄenÁg…é´$JE]shzšóP4| âÑ$ÉZ£Xàás—ànþN‚ëÌJô×4 “I £k ¢–e,Ydk‡J­cå%IÐv¸=_¤p©qÒj˜mjk~Oh™Œ_@#¥£#ABKT!dtYFWeDc:õ›J¹Œ§›>Ëqk &—Œ¡…EÎÃu+Ì<¼Ê¥lˆQ?­LËÙTçÁ.¦xz÷.Oõ­œÚ]ó®ø+ÑòE½î¯obmì»–=kñBmìμÚ</Þæáèž%gy7ÿœh<ÂÖ‘= Øc|òñUÆ’F¨k'íë™Ý£×®pyô)ÆŠ$?Iópó~Îl“¿}žÏž¦ÈÖ<$IÆìåDøEÝN&л‰ÈG×ùå;wiÞÏ™áÆNsqÇV?UhAƒÁ<¿øÿî&ÈF„GøáÎp nà2–‹ãœ»x‡ë¦˜œ9G)µè% 8©Ûüò÷Ñ5IÒˆ$yëh±ÓqÝœ‡ òªs\<k‰Œ78̽žÇnÑ›xq7*$™@ D—yƒ_þݯèíàø‘ítFvòÆÎ«|~én|á"ô8OfOg e#»Œ#!p*y}öî—kÈá>N[("Yß%/kƒP"ì=4ÈÇW/ð7·j¸Â ÿÀ NÅ kuD?ºÆì#‡ŸMt2¼c?'z£ ­"ûlnnÊVžÆV°béšAqÞ¢'¬QŽ©¤ÆƒÄ¤"sOoó»‹OŸš$“ü_Œõ°ûàNºuêc³ú%ÿîçÛ¶òæ¡A| ¦\›5•U#3÷Œ³g¯óxv‚L¶È»„ôÕ:†õU—ÙŽ^—ɹÉE}ÝI[¬“‘m|òñ?ð¸F0ÁîcÇ8èóÀ«1sç"¿¾£`ú#lÞwc›"«ëQ‹xtëwùÕßÿ†°.aDü À÷Šî'ܦüå»ül¢“øÀNúéÞ³—Á/oñî?^§êIûòGzèÞ½•àÙ+üóëXa Ç T×î˲¤k`C_Þào~5º™ïØÁ@ÄÀêÞDðÂçÜ÷ï"nÕ-"ôîåØÔe¦çÇù›ÿç B5IlÚÍ›;ê@×RëâØjP"lïqøôì‡Ü¾ÖÁ‘ãûØÚX}âõªdfžòù¹›<ž™dÌuø»jÛ÷Ž0Ô9ÄŽñ+üÝßÞGÈ:rû1ŽõD[ ‡ö¶ñéÍÏùùW‹°û`mþ<’*‘¼û%wׯq¤ÆX ®»@.nM[ú¸ð1´o;c—®ñÎc{:=;Òñ¡æ—¾ÿÿSVá IDATbˆFÚ®Öy§!€Æ|(-™‹œJ–Ñk_ðÞý Ž$£êAzwì¡_«ž|ÄGŸßæáó)R¥÷y§g?Ú߉çÙL_úˆÿ|MÅ DÚ·‡m C*ƒ=Ïgc«ª˜’Œ?ÒÉþS'8‘°+¦Gs×êâØŽ(ú†Ú´1’ a¬8‘- {ûüfïßlþ\ô43zÉí zþÃÏP‰¥ÂòÀsk” yr¢-Ð0ÖòÌæAˇ¡ *Ùy%@P‡b.O©\¥ì TYAVÌ@“ ©dŽ2 $à  Ôó€­0 x.å\–l¹B©ê!) š/@Ô¯b2¤‹5l„$¡ê~¢!uUóÂâ© §B2•£h{(¾ ±€ŠÍP6,,CEvŠÌe]–U`—ɤsjBRñY!b~eÕ…¬Y~:[ Pª`K2ªn³ T¯Èì|޲ã-˜ÐÍ$6ðÊyržE›µz¹+êðjd2¹E+ F HP®* ñˆŽ°«óyªf„ˆ&ðì*ùl†t¥žN+ ãáT ¤²ʶ‡'i„#AºŒ[L“tL¦ŽÖÑ^…éç÷øÍG“Œ|/qI b!ªgS.äÉËAâf#±sÓ=Þ.“ÎäÈW<$|¡0‘Fº'œ2ÉTŽªí`˦?HÄ”pj+e5µr‘¹¼B,¬c¨k›`ý·š¥RsH•U¢a·˜#UÕ‰G ¨äIå*TmWÒðé: CHžM>“![¶Aõ ùP*Y’®Iد£ ›l2ƒÀˆ43%,ÓvµL:“§bÛT=M‘—èkù ù4áQÉg¨VkKôeàP-Ie T\ËÒ©Î>àÝO§èÜ9HoÌÄKÞå“gm¼u|3½¾2éåzÄŵk‹ýAQÐ40ÂDu8ÔÊEæÓlYCóYDLEØ2Y2¥ŽŠ"n¨TȤsäk²®!=…HÔDYã¤æÚU ¹,™’]O¤ú‰…ýª„ðª$çÒ”äñ ½‘b­\ÈR­ÖÈ”›çÄŸŸf“ºNç]¸Oü¦yþ–tþ’||u{žµ,Ï]ã? ð'ooas»Êègüß×Â|ÿäbÆŠSý·KËôó•Çö«¦oP_xÕ1þë½IïÉÃŒôDêNk-÷'+û쫚o_´@®òo}ÎúvÈ—0±¾ÚËÑ—¢o`@Óq6ßJÏïM!,Nl-NëehÒï“çu+>¬Pœ}þœûäç$×ÓèÙ¾•˜¥/Ü'ÿ>»Îú½.ÖkÓ«Õ—‡×zm"62V¾i5.^~¯<ü!Ðú üvP“^Ó?Q¨ªXtí@ë×ô-“$£û‚t·›¤Ó%ÇEÒƒ´GLŒfÖè׺úÖI•h4D@Uø½aļ¦%$„@¬ óQh ÒZ\ [Ð`Vµ…o¬ÆolìmÜä±þ®gýrVÿî‹ê^7ÇßWùÞiu¾Ökÿ:ºü*ºÑÄ?úáòèêõ|[§¨WnÎ nNË+úFõû²$3ÒÞ3=Œ´rתß|¿¤Yú«Žóuåµk|çUËöåÚ¹Æ8Z«Ÿ¨íœùa{ëkpôòóÉw›„Ï·sð ÀÏr°rŸä[úEÏ©_ÌÎjuWx’¢¢ø‚Ä*ú:ù¯Š¼J†©œÀ2=òøU‡tª„jPUyƒ'Ï.“ɕȗ\¬hËxÑÎÎ¥Z.ÊÖ0,J®‚/ÅzáÜ£šÏ0_¨`{ pˆ ¡¼¼k÷Z¥/qÚØÞÔsj³2UÙŒÐn}Pðæä!Ö˜<Û®áÊ:Ú·¼möÜ2ssEÔ€A-_B¶‚„ É)R«Õ˜Ï”¨¹ )`ˆ°ÞpÊp|ÔržZ JÜ^ ›VýÊ(ªJ0ÂÿûÂY®{Aᔋ¤‹ ¶F]Ãôcªò:íkN˜.ŽãPóŒµ\¶7@MW»Z&›ÉRpd4Ã$6WÁUhÉ®âA9¤¤×çTI4&óW;y»• ³%°e¬9Ÿ-ɰáÔ(s䥆#ZK;W‹çý.,4ž]wLô[&>õE}ÿŸµê ±|7¦rãï"­ÁãTrŒÝ>ËonÏ“ËfH‹0=móöÎ0‰€ºnZ —ax­ŽT¹ÈùDåÄ®ç®:ýÞFÚò|üÞ-ºO¤½#BßFŒÆN ·8ÉÝ÷øôJŠ=?ý'6ÅñKëœ°Ü sã·øÅ‡“l=ÑÏÓsÏØö§?åèªá$-ƒÛ-ñäò§|4VÂÓ"ì>z˜}AL‰—”Õêr±S·ø‡Ï Þ<µ…¸Ôœ$×$»œãÙÍ/ùt4‰3ðcþçm¨/ÔÝÆ&£Öø1»\`~j‚|Ûf_@üUi­]~yŒwyΣCL~yàÑӜޜ #5?Ïû_Ž’¬yÈzÞmøÁHœÚü3>ûà"Ù鸩ýÿгŷJù«ë×U#„"ÛÏsÅXÛ`s–xŠ|%¸µ2åÙû\¹õÏž'øÓŸbgg¥eå•&ùòRšÍû¶2ØæGYϲàyxv™lj‚Q·—‘„¶TËä¿îé½îFLvæï}p•Y_„®î-œ9ÚY­-Uª®ÍÓ³s¯ï0GúÛˆ™*Šôj­UžçQ™»Í'OÛ9¾»®àóY#&ÒulŠÙyžÝ¿Àõ¹ÓD(:º"-€¹oX. äyná1¿þ ËþS#lMPY£þÞo”„xÍ=ã:¤Ðâô^tYiFÙrì§ ìžæÁõ³œ•ßà¯GQ¸¥ ³ƒ_G—v)EÒöÔjäJÂupO5QT•¨_E¸åb–d¾†+d ¿EÔÒ‘Wt­–F©&~SÇoÖ°LŸ,!<ð\›B&EZ±‘…‡¤šD áR«HeJÔPt“HÈ&ëÈÖ GŽYd&Î5Ü¿\Š© eáa;.¶-aƒÓ¥„¬°L?ÃGÈôxÁ‰Í©Hg&¸ö¸DçÈ^vt'èŒ0$—b.C¦TÃöd$YÁ  ª»V&-#É¥ª‡¬™Ä"þu±]·L:9Ç„­"?Ѱ‰O‘p*yjÕÉB«Œ5T„Íû#ô³|Ü`öÜjžù¢X¢¯ˆåCWVò둇]+1;9Æ­«·)í ã )hVR%÷4O¼v‘Ù¬GÀÒñòy* Ù». iX! Söpì2™LŽ¢-ênà¡ U¬Í–ìÃôÕu4M†‚, ä@Q_7?é8DP«0õô6ï_zÈÜŽ6¢²NÈ4>€ß‡é[ïtµº~ƒºBĸîÒ0Ã$b*`×(dsTe‰ZÕÆqþp¨V´z-”²Ò¥¶ H2†?H, ­iñ´fïN[*ÏsÅ%åºÕɒΦ¡ÚúâgžC¥˜#™«`#UƒHØB÷jäæ&¹ï7t•6¹ŽÅ6•Ń…2¼¦`Èdòä«6®ÐPT•pÈîÙÓ3ŒŽ3%òƒ7¶Òæ²vV#ÒÜ8³Ùš‡]˜ãñ£<åþnBžë:8€ãJh28ÈXa Í®‡f”²J XÏš.µbŽt±JͶ©9Í"Ô¡œ#K;ú£„½»Õrd¶HÕÈšA8¨cg&¸7–¥R±©Tfyò ‚d¸Í¿|“Þ”‹[%—É‘-×Ãb„¬G«.ÕR]öŽÐ ‹H@Á­ä˜/ºHŽ ª†pm\9@4¹\×®Q ªp±=•pØ!ÊØ5›d¦L­¡ÇPÈÂðª2YJ’„k{xBÁ T·–ãâ kNȧni*×ûžlÑ4µÚ¶–ʾc´Z;ZŸ½X9¤fШ’$p)Œ_æ—Oœ94LXbæægü¶ºƒÓ“|p­LÐÔòdèÄŠDyëÈVi–›W®puªˆL0±™7Ží §±Z­:çù;ØÜ§ Ù mòˆš²ððœo]E¨µb×hçЙìñ½s•³’Ђ8z‘¸¶ày¹$’Ø+óð³¹£<—B¶BhÛANoí$¬Ë˜ÃCmVeÀ&¶.FªK%ùŒk·ðpnõÖ R39NÞN·šäÊ…ëÜ-Ru%dâÛ^Nmµ(Ì<æ7ï? Щ‘.€æ­[ÖÜa8…)®^ÇsJä¼'ß<Ìîv™é{טÏpuº´BÆ ž§2¼ZžÚô9þñ‚ŒÕÔ—èäøÑ]lnó£­³­ Ï¡œ›áÖíÛ\z2W½@ʧ‘ØyC¡ Þû$ÃŽc»ÙÞaáN]åW|œ<ÒOáÜÇ<ÐH¸xU›’g2¸ÿG0ÿì.Ÿ^{Ê|ÅCÒC ï=©ÁàªHF@ñ30ØKØŠàÛÔ‹ÔëñfЉ*{„5§R¥TqѺT‡iëé°6õ£äåqæëê79# sbZv‚Kç¯p+e#+±Þíœ:° 33õ>âi¬‘+Pq|l=z˜}]aVM)éV˜|pƒ/ŸÎ“«8Ô vð““C…¥•»•'J±¤ÕÔ(/Þàì³?ý—Çé¶ÐpqÊžÝ8Ë»ŠÈŠB ÚljS{év³ŒÞ¿ËÅÛÏ™0¦›ÙÚCËû9úæA¶ÓäSI~wiœLÍEèavž8Éy†‹¿ý€{Á.,·JÅVèÜ}’n P}ÀG_Üc¼ä¡He&r8Õy®žû’[É2¶+ðõî§=­ƒ£¬:&¾k$¾%·‹HÀÿÔKü/O‹x¼/V¿k€èÕÇÌå»èð»<‡®]†D9ï²ëÐaötJÜþÕo™Ÿçêlœí…Ç\žðsøÔÌì7¯ßæÒÌ0=ý+.MH¶8s þsG;ø"ðlßöc$ºÚ9a¦¸sé ®>MÓß1Ï;i:cXJñøîMÎÝÙÌÎSmkî¾=»H:4ÂOöo"š>Ï:?Átg¥Í$éæð‘núã í_$ÌÎ휉E(ÎÊÄŽe¤7†)æ¯^å–³‰ïÿh˜^mŠùé$^¸ÎÓ¾ÄíµjÿÎò/»| ø ë‘çæH¯Ê½wÞåq2GŸ’ä“[E ®Ÿ£oìÝŒ=\JyÁΦ¾Þy{3½t„MbÚKì…B ÒÃáƒ.”dÔ·~Ì©hcWîÊlÑ1ž.ÐÓÈ>™ÃèØKÐÔ(9EÒæ?9°‰„œgôî%Þ¿öœÍGü<¾ó€bïQ~Üa3ùô.¯c¿]`òù=ÎÝ'»ÕG´6ÁµQØrâ$;óüï§Ù¹9FØÔжæÇfš©;-¶¯Jf~œ+*lûÁŸr¼]×YFCØV`.o±Õ(Û÷3Ò©ã_ëŽÖ+óôòM&»ùÉtød\\×&5>Áõg2‡ÿųUÌrûÊy>½ãçDH%äíÝ~þ˧*#{¹%E±dPqMöÙ„ñÅ=¢;öbܾI¾\ÅŽt1ÚyëÍaìR’Ñû×¹ñ8Ë®aW(˜GùË-0öà2¿½7In¨—éëwI¶ïã÷ô˜üˆÿ…„çSNò,o±}ß~¶ôDñ«*²$Õ—1(ý“[:ΈnM³š7U¯dfÛ£×¹1Ÿ§Gšã íì·LL”°®¡Ê*ía§hs/Y ¿4Æè¬ çRÈž‹0Âô­½ÿZÃk­…$iÛü´ÇuT[Å i8Å¥Ò<¦fÑ®œç™ðpE€Xû îu$Xć®I葾ò8Åj‚ Ay£N÷<ê Êõ'ÅÎ%=UÄì ã÷é(z;~¿G‡ô„ñ¼M\(˜þ(ƒq’´1¸9%ØMwÀ‡OQˆø%l×£–™b.7ÍlQB:—^!ã5ËjÑW[ÈãZ±FÕö`ƒ dô½5î«þ¼9©z’Åæ!““2±¦uú23MÙ«²¬bXJnŽdÑcìùã™+¼ÿ\d"¹~‡°:ë85MGó¶îÜFdv”9ÏÃö ËÐÐ×ô2U”¢ V*‘šãÂ)J£TÈQ©Åp„²áI§™v `芲r¿VßdÁ©Q)å)è]l‰ëõñ(Õ·Öu`pƒÁƒC Ëã\N—pÛ÷³«ÉÇ-0‘–éŠöiá$!yEÊ¥y5AO@Aw|„cÊw3ØQÝïCQ}è>¿¦£cãâÕ“C¨ÃOÐЗ¢S#;5E:ŸåÂó"P#Ÿ«Pm¯#Vi†ŸŽöŠ\FÕLT»DÕ)2“•hëõã7üñvBFE€ìïbwÇ3.Ý»E*ÝÍð¦>‚~ƒ.Ujèf¹Ê¾ƒ÷’kY ôJNʃ¾ÍQÎÞšçyj'1BØïC)<»BÅuq=›RÅ¥\M‘‘õ]üÅm&¬Ô!<é+Æ YH ¢†MI$ÅG[ÇGÞ>].÷<\¤ú½Kã²€Ñ.•ªƒãxØåúÝ¥$Ä+ó:¢É¸UÇuÁ©â85*ž\ÏÚ!4°7Ч(¤F&‹æ×©ßo‘Ít%"üÅÛ­2– °ìæíóùV}U]dË佊Ó‹Ýí›àM­ÞMoM2=Vã©ÖÁ™€¯qܽ žp±+lIC‘UBñNöÿ1ßïÒ‘¨o䕯 ¯Ñ«k3C¾:ÄÝ«ÜR}§T_Ô$×¥Rh8D!@–õµÙÉ;|ö޽q˜ž¸†;qŸO>{¶:æk‹~–‚å·öooå„ kÛQþ¼kš›×oñŇcÞþ!G¢òÂ-„×@r_Rõr¹ ]ñ¨Ô\§ž!Ƶk¸’¶&fñº$ôí=L@o‚Íž‡çf¼§›·ãM&jÅ4ã“w™Œœæ¿ßçcêá5~{K*BïdGçu~uï&S¾ ý;wÑñ!7!—ÈC}A”Ü*Åš2 ›2ÙÑ·í½t4þ_d4Ù#[©{¯që!!É2²W¥â‚ëºØUÑð.®„‹–?­ nl®šÿx%]ºMÍèG¢9îß8Ë'•:ßB©ùÍÆ UÛ®ßû»µ ¶W?x ùÙvô-úæžsýêÞ9[%iã¯ÞèÁ”À±+äó%ð ­›³ö»K_cKþ3Ct\¼Ìíñ‰ÓŸŒ(x8ùiF'&ñUlî¤tÊ’v‹`>Aôî®ðIuí¶6¢ë€¯ÉƲšþ\ÃôGè6ŸqëÁF¢~暴ÚéôyÔ Y2…4ÙJ‰j:ÅLÐG§åá¹f'& æçÆ©…z ™:Á¯ºB6ø[dL&>@¾7ÃØ˜LE™#›.’4º9iÉPaCˆ4K«h¾ß ½(‘>úåÛ¤Ké¥2ŽÇ±(“L¦˜Ï•)ÖÒÌ$u‚h°D_wS:‰M>| g$Ï)1—,¡Yuwûõ‡„@V ÕarršqÇÀ 6T$³‹í¡;\~„aB~Y”¡)ûˆDAŸL£wî%ai”â ï=á áz–-Lo›¯Î¨'¤®Ú5ª.  kÑ ý‚¬X±vüc£Üù¦ ;|ÈnvSÓjåËhJ•|&ÅœãQ˜˜d¶ê2´Î÷]»B!›#—ÊQ,×u=ë×hó+ØÅ™dŽb¹H2•b. ÑŽMz6EA(Ä:ºÙ”%[­/…’¬ i •¹)ÆfcøÌ:«ºšðe‹¡³ÓÓŒj6¾Ì(ɼƒÜµ­~î²0£¿PknZZ‘›Dã½æ ! QÍ11™a|bŽ¢g‚p*™”G÷¦Í &ÂXºž‹ëyä39ÒéåbŽùdŠ CWTüV”„|››Ÿ#¢:Š¢bÅ¢„”æ xƒ$ûÙÔcð»ñqê.QSF•ô€…ߊө<àîè%‘alÞ!ÑCó‹sAk‹sÄò¤’ª y.µÜ<Ï*IžL–p£K–R”’Ÿ®N÷§gxæÒóäʾú&¡ša*]Åö|tõwºc#—‹T=0±)$Ç8ûÅÜ‘·øÑ ù ß&­Ô`ëð¥H!+ø¬m’¼TèZŒ­ÑL¹îæ.û ’nññ½*j×ñX”ÝQ?j`ˆãÛ²|tþSn N ñƉ6¢/™(Sh,ˆ_S ¿ †?D›ªŒ„س/çÎó‹[à w²÷hŒvQ óä:çÇs̸6ÒÃ;äÒ§ö%p%«6É•KcT]‹GzIX:kߌ¾ˆA•P4Œ_kžŽ%üý{9’ºÄ—×/pÙÖÐavÜE.“Ñ|DcÁ #Ó5@[T«{š ŒóihþNÎ37Ÿ\*ãc!äü—¯Þe;ËèíóœŸu5ƒX÷vNÇê•(F€¶Þ^Bg¯ñ~¾ØÀNYÄ}«0!4z÷îcæü5.yŸ²#ŽsìH~ „+£ÚÃÆ×˜Peü‘Šª¢).v(LHW1ü¾0Ñ>üç®ðÁ¼Ÿ`¸—íT×Å­æ(K6o\æÁM Uõ3|è8Ç{àþ­Û<š,Aiœ7²d¤CÄ#AöD»90’â£+gùG[%ïãø©¡—= ž½Øuá WÎ?¦äŒ`œGNp,ÖÉÞó||ù%ƒxßvNo S w5$5@U' bj*R8LÐ Ò»{¥TŠ÷¯žçS+@¤kCEV$¬h„š"ê›.#@[Ä@•4"»Fúâ—.>ÇŸˆÓÕî'¨Éx•in^¾Ã³lWètî8H{,L°uÜ7®T¾«$ƒ«=î¥q&ûLsçÏ·&!BÍ­:0@ÏøH@‹ mÑæÜÇ‚½Ýóð¼*“ßåÝê~0²‰nK¦:u–ÿ¹Á÷Nme Í·©cÑb· Ïcá>fƒoÁ4ÒüþRþšï,«„æìŠÏ¼×ùO†sr¨£á˜²¸Ûiôަ9j‰À–}Öü ¹A\*Ü ¡--Þ[öÎòo‰ïxÕ Õésüõ…Ä‚¾êN’b¡Üâãßñ³kAΜÜÉ–¶úŽqÍ»áf_YÂ@óîÎ¥8~Ž¿¹bpâØ6†ã&²WäÚ/eUwÈËˤ•¯—4.1=ÂW×m£5õËm_öòzõ¶æû\B-m^3nrµ¾µ&³UŸ/í{KxhŽ_ô¦ IDATÓe¼¬Í󲲞®üì…´\æ‚ZÛ½9¥yò>â¿NmãÔþaÂ0}á×¼Sáí½ýt–-×-ý~¥ø_ržb=]6_Xöpõaµ*‰–VÆ[ šöøÖÍuÂ2Ï„%]ò\,UvÃÚûÕÆâï›<×%ùoÿORÿîß.´_xž{½Pøßþâþ£ÿÝï+•·NÄÍd¢®çÉs—®]ü-;˦ @bEꕯ %VG¨ËÞY½5Ë>[˜Pê<.8È|:Î:Ÿ­ÊØF‹_a8YùÛ*Y¸d©¾MžçRH—±z†™Íø¹µ˜]}S±ÚÈ­17:ƒ’Ø‹åk‰Åk‘}Sþ«•ùuèEN1/YØÚúe­þ½ñŠ_z"níSkö¯5™Ý//fáÅ<-ѯ!óÖv/¥Æç¸TÒ9<ÝÀPd$\êá…’Üjª]Éí«íwkÉ#…l¼ž}q圹öX^§²ïÔ‚¸*-„x-B|N:ÙÇ—yïú3fµ~ÞŒZ47c‚¯9~´àäóãüëÓú­–‰l;Á=A_‹‚_’œÔ}Þ?w—ÇY‹½Ç"„¥›©®²Mß,ɆŸðæ:.Üá½÷n!ááÊavŒÖ¿›·g¯é›§5 ^f‚’0;·p2ЫˆYÆ‚·šÛÍŸœ-ý»`/ †Ož¡×°6€±úO‹„@MãOÎ(kêK1ÃÄ¿f=’ÕÍCv¡×É6ç¦ƲMß< Õ‡Ö¶ƒS'7Q¨:õp2ÅG8hb¼^_S+y‹Çfj%S’Pd„²ÑYJ øB$Vñ—j€öèË2·Ô¾â¾ó%‹{9’0#QV‹¿^í{¨W–m`×ýÖò…¬zù²²2’¢];­u´òÖú|Ù³%¤ø‰Çý«|°¶ìëi½jñÜ]ãîoù=ËÚV¤Èjû¼¯¢áåºZämµòZïr_~Õca5y5ªXä£QùWº7ü½Rý† $„ì#ñZã½ïL“^Ó«!!Pí‹]¤ñèiþ¢POï±dyšŽÐqÔÖO³ÑK6p0mD‡rf–gׯò$¼›Ã«{̽JZwÂi´Å­R*f™uÂô†Zß6¹¹ ®]'~ìÛü¯ú¼ìPHMrùËëÜŸÌ<üßßÜN¤%x¿uçžµ8<‡ÜüsÎq‰ûeƒÄ @®½R†ßþ*Et¯Åü• þ}ìð5Ìÿåb¹tvk/ô¦ôϵ™˜pˆ´i˜_3ù¥[©0ñp–÷'Âüè°IGh½¬ .s7§¹p+MÊU1·öð“ýÆ+‡úò*ÆïOóéc}Ã67iœ~»6Å£’™æîÍ[LÄð½-aT©#Òô{M,þšþ I¨+OKO7[úzãhIÇrk” i’nˆÎàÒ Ø-Í1YòmP‹¦3Ʋ筮ƒ«vÙÆÇN)ËøãÛü6ÙÁÉA‹@3u!À}I[ÊòXôh ßYòöZ^-moúͬ n%Ïô³Û\SДƒ”= -a`³‚_o~¯å¤°ª'çrϱõ.ò% +Ææá~˜üˆ§Õµ%^¢J°—Ý›ü„tyátç®Uw KŸ¯u2pIÏÞæ¯GSA­c'©¸úð*ŸíˆÑ.×å²ä´¹†—ß2]"“šb´ÔÉ©ÃÄý~¬¬l¹ùVÍ¥”©¡ÚÞ‚¼=Û&=æÒ#?êT‘KPyëþ"ox8¹,—nÂþƒ2º¦ yÞÂÎs™smëWùÌCÈ2¡Ž‡‚:AŸXЗ·ìýz_”õGÙÏ1‘u¸‘[ i™5cÍ÷Zølõ6®UmR9§æÎ8ϪiÑÖæÑõ³\ˆ~Ÿãm-q1¯×ž×ô¦uߗ؈º”sÓ\¿v™/#›8¸sˆž˜³ç–»y…O+!¶îØÆ¶„…!¯ý¼y¢]¾Ô·M.=ǽÇ%úl¡7n 7r8UÓO9{þ’j¾nŽa[´Æ­Ï®’íÛ… ±SNrïÆm¦;óVŸLjìŸ^zœ£êÜÌ©Ã[é2`Þ‹r2ÞIX©Ë+sÿ ~7iS)T±‹%”îÞé¥M/qÿÒ%®MgIÍg©9@¬£oœàPlµY¿‘Á"$¢ ž/›ÃÜ‹|vûÏüûùÓãC˜š„“ºÅ;—R¤ 6–\¤` ÌÎí|ï`?þj–gw¯òɽ9ªŠIçðÞé$ ­Õe¦ÕÅO‡Cü6ÿ˜VŒvYÑékïçOä,WG“IÕ!W)ð0¯rhk'ûHÍÜå?g‹dbaÚåeml,òNqŠ‹ç¯q{º@ÅS ¶oâè‘t{_»ÈçŸópNÇ»Z¥oÓ΄ýk÷pY!žðòk¸mV@BP|ž$5Wà£KIîÏiä2&mÝQïÐH?˜á^ “l‘)Ìä¸q1OìLñÙyn\™âê]É©y‰0GFè¶\F/NqñQ‰œ£Ð··ƒ¶¸ÁžN™jªÀÃ/§™²’Ï«`™ì=ÓÉ_çܘM6ÞÍŸeLM Ü£'¹ð°DºìaöµsæH˜KB hDB2%ÇEÔÖhï‚,ÒÓY>ù0óÈ«ä„Écmô)Y>ºà±ý@ˆÞ¸‚—œãÝ °ë@„xP° q+¨ÐS0ûRI5‰wõ04ýœ/®Œ±ëÄòy¯é5}é+äÆHIÊpp_ˆ©É1.}<ÊÕŽÍìÛµ‰v½#í³<¸ù÷î%Ù³¡ÐÒçwï&ð‡ÃÙ½‰ÄZØžN™|v–I¯ƒ·:}È:ž“çö¥‡”Û†8¾ÍOùÉ%.ß›&¾·‹þ>_Ýz„+IH}en¦‚œÜ£RÊLsçö,Ñ=GÙK†çOðéÝNþl«Geô,Ÿ>õ³iç!Ž…u$=HØ€d*I:VÃö§Ä\2O©& éb[& ±}¼¹9ˆÏ4‘e +ÚÃȶ —¯LQv›bæx<æÈ¾ôùæùüÜcÆú"˜Ê.ÌøØ¶mˆpî³™*—*] Z«˜fE“²‰¨±B1„z·r 2ÅÓ1›šÓ8%ÕòŒ=›#Ÿí?ØO8?Ãý;·¹9gsù9Wž«ì;v=?˃ûW8ßÑÆ›‹'ƒ¥Õt#¾\.-$•°?Æ–r…[͇žKÅ©‘t ºŒæ($B*…¹*eÛÅc•4R^•çW¯òXêæÀ‘8AQbzì1g/…ùãcônÝÎ~ #œ:4LÔh@Ä­"2ÕÇ3*Š)ãœö!›õ ßm 3UvdÊ$Í0'OZ ŸWe2W&)5ŒüU‡ô|Ã…®¶ ;¶d¹•QÙw8Lo»N8 Qz2É…i…Íû»ˆÉ.\œ#£k´ÿ¤ƒpÍan"Ïè@?8m ©–ŠÐèÞe‡7ïg\jvÓª¢ˆs¼ÛÅ®¹øIбa¿_KîÃتÅ*S÷ç©ý ½;5Š·&¹öØOx‹†‘œáyÚO,,S}œ%©DT ]•‰÷·ñV‡À¯Ãé˜hIú,ÐŒ±Dùó‡<+obؾu/v_ÓkúÐòÍzpa^*RÑLâm ªWdâù8ŸMÐ>ØG$¨Eñi.Ùé1<c¼¿Ÿ¾PdÉóûÇHfŠ nî#¡­¾ÿôœ•r޲ÞALc1 NuŽ{£c<{–䉩áåg˜õ÷QÙÕMgßN}ÌøLšß݈sàýô™.s³\½û;S䡨R(UÑ”¥’`æÞ3ì¶ï3ÐßCw i–,7˜¨Ûºš1ž!«ø-‹°_ÇŠÑ_Ìj è~¢a S™ZfS“0c ºmt› 讀íU(Õ ¡í²ëJ’ë+!ºTˆxØ@›”–T/™í˜jˆ¡Î6Œt¹˜ÉI$ïsõaŽéÒ4r­D¡"Ñ›¯â²ZNÂÆyvåçBH+¼^ëà‹±¯²$Vš[ÉÉñx¬Blo‚þžv‚”Ðìw.<#I/=¡0±‰Ï ’ˆGêÀñëŠE 7κ-}M6*á ‚‘ÖI´€…VÔ‰LN’Q_÷iÄâ>1˳Gܶºúü$4•¹Ë£¤‹žfÚÙëy(ºB¢?HO§¼ à éD- 1½( ÏsÉÏå¸5Z¦T«1>SÆ_öpÖ³“®G’J{›AG‡—“9w·Ji8Ä–>—O§+ Çaü©Kb»†å«ã ]%Ò¸’Ñ®fú—U #@ÈgªìÒ§Ë|Ón¯é5}Ó¤$«=î¡Ññ7¾@z.åÜ,÷ïÜáöŒK¬??鎱$ ¯Äøý;\z0‡éåôé]mÁUŸýÆêyä–WGš·1@ÝU%ÎÈÈv6',4áá)m! IòШ ÙE²Å*Bב¨áz=:À‰7öÑ¡¢žóOµg©•ldCCUd$ˆ¥™¸vãÎSÔOr¢>¼ù{Ô¸þpE;4Ÿ†"K!-ìF”È0Û•Ïùüó)tEÃgFØ¿;ŠÒV~B,˜«…XÆêCVMŒFн,ƒÛ,õî凧:ê[%IÁ4Ö ÅiÞ®º867 ©5Ÿ«BÁ¢FÁõpBÙAÑ”µÀS=‡Š#0U Y¢¾ +*’“Áöe_?E·‚¬Êðš‹ga¿rÃsñóæBî¸66îã—èSY“% !Ë’‡ ”@HŠ„Ï”=Y,ø®-Ö½HÎü<ŸÞ¨Ò·+Êΰ:3M3ôZ´:’Rã'!¡6²ÏEàØày±a ï“"ÉX‰‡5»B*¦J‹\W—Ù꿼¦×ô'Yf¹k«[ˆHÏ©PÈÏ‘T»9t8N<À2êžœNvŠç%ƒ;÷Ð ñk¨’Xõ¹"‰u¦…¬¢z)IÊÞ„¦PÇ%Õ"t’®F0#¢Ô(8*Š€ÒämΧ”´vÎì²½zŸÙ7‡Ñu‹¸:Aš ûÚT§FÙSQk±Þ …ñ’}qbº¶‡, 4Õ%›¯R­Ùäg§I–tì&oB $¨•k¸®‡$5m–fJpü7Ä¢ÃSë„.CÁ²mÛ½ñ>UÅ 6b—y¯,N‚õrj½ºÙµ™‘Ä]–‰ %¢±˜SGœ’4 «šÅöï¤Ó§VÁV_áq@È4ýz‰ë™2ƒj‘ËãUb½eó*€ 'ìp{¾H!á`Heò©9Jþ¡o¨WÅ_}EôjU×C— $ÊéÕš ˜*0]‚®f½²@Ø5ÇÃilB] Å™ …A›°]äiQ¦ˆÂ®€€âÒêZC6܆UÝ;¶®/·T&UUØ6k2e—ˆCÝñÆ]tóðêY5š~kÕ*ÓO’ÜœÕ9x,BX<ª%Æ“5¶t*äžWQ,Uh¾ƒbœ§w+dã„-eÁJ³ú°l2]£RÉ“a¶Úw"°ù5½¦õéEÁ=^ …¬Œ°?¬â÷)KÌm²¿“›†¡¡JÒÂB°üy«‡èš»ÙÀ²âôH÷¸8¹‹3 ]—J„½‡ùèÊy~~³†+ úœà›—'ño¡+b¯6‡tùŸÞíàí¡NF¶Mðñ‡Ï-OÂ&9v‚#ñ ±]'ÙwáŸüæï¹³ç ÿâP/‰­½pîÿß %ã¸&JƒoÙðއ(}ùþz¼“á8Þå0~çÝb|<̓>ä^¤Ÿã{»ðy,œ–ºlº¸…ç|ñé(²îC3ô ðæ¾žFÖeÎKv™Ñë¼wñ9scYæKŸ“íáøñ= ËÜ8“û£y:?ÃorÏØrðto™fát+@¨&±èû:.òÁûù­¤jäÔ©} š/2[Š…ÅvéóåŸIXf]~vãCþW¡!ŒmüyÔ"¾H·ð1´o;c¯ò÷÷¿Äö$ô@» –A8M±|ýx5¡(Xa¡ä?ÿ›4}CmœÚon÷£üî)?{®a*~Ÿ´°™SB!µ >ùu† ‰§ODèØš`ÇÜ ŸübžŠ þþ6âm›LÅ&TaKÅžKv6ùgx2•'•©ñ¾m0t´‹ýñÊ$¿“AèèB ªà• \’1ƒía‰ç5æ×i×eüRÝ[Shíq•±rmwɧÓQy:_£ŠB¬Í Þf`H‚ª*ˆ«fí’„0èV´(»¤i$b*•žªï²pêÒ6ä%cHHÝÔ‰F”ÿŸ½÷l’ëÌòü~×ß̛ޔ¯‚+x `IX4Ù=ÍæöôNϨ5³Åh¥Q„ô ôv"¤/ …"´ i7bwG»½Û3ÛÓÓ–M² ‚ïmÁP>½»yÍ£™Y•U•Y€\šnüÅB=÷ÞÇÛóœó?‹þ% …€&SwF8@:¢ )íE ,㣠(‹>5W“­ §V!WD{"˜Rãnù%^âYjü´9 ßdêê&SWïÔêuiŸ<òï¶Œ~$KÒÂÙÅØµ‹¡ÿç_!É_ò-|Ë;‡[aæñmÞ;“côðvŰZFWµƒÚïmÚž·½¿Ür¹qX+¶`'¯+ Þ–Ÿiþ)‚:?ü9§­1^Û>L¯^¦8;ÃéO®¡¾ñ}ÞJ« ¾;ÙS.üêÈà¿üÍ¥ï<·‡‚VÛ,‰³uÉB KL¢é&AXÕrY|kJ!VC›­à³Hm×´kìfÙi;º˜…gƲۑŽùZâ™DxÌ<˜çïÿ6ËÞ¿aç°ÙpÄÝVˆê£'üø¬Ê‘×’lìY…¸¡YW¾]àñÝ+œ×9òöÖäÅþòìEy‰—øZAA}|œ‰¿úKD¹Ü˜¿„>âúnÝ=v©RͽX/[Ê jÔà~ðúCîÕ}\×o\¦JãšÑ,ùÇjžÏéñ€n Èʱ+„À**6¹|_*QÎWpô(½Z–LDÝòõL+ÅÒwž{qé XÒŠwáà²jŠkE¿Æýœñ­’ÐB·xîø:}Ó-žÕ»Ýó&»úóÅÝ[c1]w·{EÇ!“±y|£Fd]/ñº†Wëzør’WÞm,ŽÏ§—x‰oZ×C+C."Ö¯²ó·4ý=ˆÕ¿±¯0/ÿe`0¼k”ñ³ã|öè¾PŒC[÷²}-j˜—x‰g€¦«ôô›XúRó¿TàÂé Oý0G×›DÝäÝíЭ8¶ÇC^R·½Äï Z›½nBuÔÐWúÆ–[ª¯_¾¦Zäk’•¯xÔ¡þšG3½•ï|wëò toŸ+¼®‰UM#^¤Q¾@Bëç©ã¯ó·¼üÏÐ&]Í,žG&«ï󃿌·6¾WâIÞú~²•½61ùóå§[{’¡|n1áºdr>¾$KhtSên&Œ]®“/yØB%™Ô è_¼×áydf´ˆB½è¢„u"E·–'SQ‡˜Ú¢‰–ð]jå"E/@"f¢òÅ÷/ªÚøY ³ù“We$Ý_þ¸#ýŽÀw]TteÙfÌs°}M‘‘di¬¼Sx뎤óδ_âô}.»I~èG¶(Ÿkçúy!„·F!û”‡þ0c½z›âŽK)7Í¥ ô;ÊvKþ\;³çÚw…Gþñæf§øèaoÃwùï¥Ñ¸µ"®žæ£‡™¶ðÕQŸœä?þVæÐŸÏÎ ^ù£4Ìé<ïý¸ Ó"}1޼ÙÆ´ªèây!„O9[áêgÒo²5$}Ž:^n~ñ9û•׿ÜÏ'(û2þl;­Î§§X忇9«õð®õ„ŸLõóî·SlLu¶m(ùTçÆ™›Ëòém›ÑcGÙ›ÒNùG—ùõÅ'Ì©»ø«î&¡4ÓQäô¹›÷mecÚjLb/PÐŽ§>ßæúƒëüd&Ǽ'ðêEˆþ—#»ÙjOðŸMq¿jSò ÂÁ(ïìÚÃÛ6bkÖ½@øUîŸÿˆ&ª=Îîﲯ?Jg¾ŸÒlžS¿˜¢¸»Þ“LÚʶi …2ßcòNu8D2¢¡®–z3ovÙfêAØŽhÃ&÷!Q-qö“Ž¢qô;Ij÷6ñ—̃YN_Êp=ãû?`û Öù^ìEû°Q+ðëÿ4Cßk1¦Nfˆáøv‹ˆêS¾Åû—* íaÏPŒ Ú×~½ÈÓ»ç95ãȱ=lЍyÿvŒlx®ZáÑCkþ,˜ø-ûªCL^rnЇT"B4´èhÔ¯Îò`ÖdžHÄBXzÃÓEçðEÍÇŽdåìR†ñ;÷¸ÜÏ6öhrZ §J._¦âzÙ  ci>¥l/BÑT,É¡R*cë’¦„c—Éæ«8ȨFx4Ø0»µR‘\ÙÆñA1#¤":~±@Í 65¯Â\Á'2PdAun’Û·®pÅÐH+Á0qKƭר8:£I·)Ú¸å,™ºÀw¾ï!aaMö¨ mÇmzMÐL¢ñQ­S€ï9ÔÊErå:®I ˆ‡ ¨2¾]$S¬b»ŰHD‚˜ªBzÛâÃsHÆ'|X_l\ÍŠ³yÿ«ËÂW‡lh-+ècY‚€*5mádÂé(ßùãl±‹œû`’³ n–(|B)Cøx5›L]#bITóŽïã ð„L(¦cõlŠnÓ0^HVÌ$¬ \Û¥âÈôo‹‘2uä;¥¬-Kø>xaƒhPB…œCÍñ©;¡¨Ä’!Cê@‹×ªcŸZ©N®èáIš©‘H¨¨€]¨‘¯4¨ß̈A4¨ H‚j¾F®âã{6¥šG]i“|¯±ûÏ}|Y°4âI‘D5,EŲ4BUMé*ÜnüßÍrõ“KÌÖdŒï°;ÙØœIzˆþÑ}œU~yµ]{ÛųKd«ë7 Ñ2'Q'›)ã O<¡Ž„± YøÆŠ…!w9õÉAŽì:Æa!Âcjâ3þlCf€t`˜¿Ho!¬¸Ü¸ú÷ª³œœ·9V—Mîí£:Å|ž’#(Âb É)“Ë?åÒx•þ±½ìì¥?Z…æNBUT¢–ŠT…UJ¥±9w Ù2çÎÎ÷$Öõš$âAÉ!S”GTLMÂÎÕ(i²"6Oä8w¶Ê–¸Á@P!ÓÑ…Oµh“«øH²ŒÔ‰etÜŠMÞ•5Ç%l·§N¶¢2¼5Œª)M×k |ŸZÑ&[ò’„ÐHÄT4]£okï¦%Š¿’èÚMÚê³’©ázG•që”墿¹”Š„‰!ƒk; >fÂ@WT‚–†eªDBÑ@+-™Ðð^^Ÿû%õ>©ðãfÃôÉŒ2´q;;2§xÿBš¾ãÄÖÎà×ËvõÏa)!<›©;×¹¦÷°eÉËDSTªSW¸×éf}O‚tÔÂ\'hèÄBîL~Bn–»S‡¾;D*$7·KöÉM>¾ò˜©R [Xl9ð*‡†îœ=Š5°* IDATÅx|¡x„W¬y.ž¿C}Û¼5àòøæE>¹“¡ìéçÀáƒìŽ De’ËgopùIžªÁ¡|ï`/™“0>z„ã£}D+÷ùÅo‹ì?º™¤%˜¹}“³×óÔ”x?·èÍ£8÷€“'¯ñ¸dñæþ ûÃ>ù;'ùã`*ª]¤ÜÌwŽncÄÌpþÓ‹Ü/×)Í>¥b бm¼ûÚÉ›‡ð¨å§¸ðÙy.MUp9²‘o¿¶›1xróŸŽÏ’«:³CGö±£/Œ)³HѶ¤H+Ã×€lYlÚ OølÚqK! ƒÝÖ?4]!–yRsÉLU8ùa…Wÿ|„aצz{œ˜ìç[û.ÿbš¼.£é‚R^0txˆÃ£Oßȹº‚¢ËÈ®OÍ•éÛ?Ì[›Js9>yމ‚ÆkÿÍ({#PÍ”¹øÓ܈†ˆÈ'_Gàíýa"¥,'?Γ³=fȇ¼óÇÃìÒéèÎQj¹—?™âòS_UIޤ8ñfœP¥Ä¥S3Üžq¨û‘uiŽŒ’–+\øÝ$×g}dU›q $T¶"° n|6Íå§2‘þÇ^OÒ¯«$#lRLFœÍfcÑîÞ‚úü-ÎäÒ¸zŒ¿Xg5&¯EÞºÆ}b[¾SÞ½ÍÙËã|ò(Î÷ÿø(cƒatg–ßýê3²šŠ¦ ŠŸáƒG8¾1NÐ+ñðÆÊ±2–ÒWR.H€šK§_á¤͆Á)S%¨Xøå"«9®V4rèlk]© …g“›¼ÃGgn1Y—@ÈDFvñÆž¢¥G\ºv‡»s³h×®)rìÕ¬Oè|1 ¡ 6D©& Bba <¯XäÖ• 7—xbAÆŽö²QÌñ³T^3Áú™©S9Ý7€78.¸|9ÃÍÇù“Л±ÿHŠx¹ÈÅO¦¹1ï#k*j<Ê¡WblH©TnMð³I ³êâÔ|B;x}[@¶ÀùÓ3œ7 'ƒüÅp=*xµ:“×§8yÛ¦æpü»ýl²ÚÇé3ŒTárÿýGÌå&ûÃèe‡ªÐØðJ[”g~—§ÿ{ëÙöÈ<žçƒO]öüéëõ£¢Q“ÀÆ0Á˜º`g-ɽÛw‘¾|ŽóƒT ±Œ„ŒŠ3¸~W?¼Ì½ýƒŒ…×Ö‰þ¦á¹¼yDz7sâÄ Ó®ñÑé8߯Ñ#»ÙL³çð ¶Ì?àôé³üÃõŽdoÿÒðŸ^Kˆ¥xëø.6;áÙTJódŒN„¥…¢p³\<ûwx¯í‹`ß9Éooϰ¹g”ݯlàá‡ãÌÜs8Ó/“ mçûë ÊÓ\¹‘£ï•#ŒÊYÆo^åÓ£lÙ+(]ýˆóÅm¼þ7Ø’2ÁE¶É6©Û¿šn’Ž ±uÏ>|¯ÆåÞ·ùóJsVŠlã­ã§>º³ô2Š×ÏÇw³9<ÏÏþî 3¥a’•{\¯öóæñ- ”?e*SçƒÂö$ºÔ‰[fvòs½¼ñÃlÈB +2~áݨ0°cŒWã§Nqùéz†!Ló‹ëªJ$Æk¯6þÝÛKs—åc#pë.óO‹Œ×*<­h¬ïW¦`ëW žg»„Ɔy}GÿÊ8?¬QTð=—j2Í;‡ãôêužÜœâ½ë%ª[Ä“¼ù¦Â§¿Í.îð„+K”ûûywL'Uœâß~X!»9€;že.ÕÃ[{Cˆs÷8i¥IhG@8sO2\ÎZ¼ýÏúY>ÈŠ s{Š~Œ7¿gP+ñëŸÌ1>b"•g¸^óÆ÷S +y~üof){€ë0?™ãƒ'zäK\¿0Ë…©8ƒtú·öÑ@€×†×ªyŸÒ“ ìäÔp/qeqºì&R“õ¡Wx;fæç²¢fö졯qb[þõŸó“éùŸz5Ûa¬lfçké® [Ë ´ZxÂi/Îw¬@#¢Îƒ'·ø÷ÓL©=$C1Ž™Ýe“n%Ï“{w™8Î_êA«<ä?»Î½ÁF¶óf2NeV!yô0cÃ)‚ò*¦5ô¨ÉÆC}°–/x5žàà1•GU6|«ŸÃ&¦ ÎtË)Á’‚!)*ñÁ$GŽJTê6¯ÿɃ:P·yü$ËÍZŒ?þg)Ìùµ’ƒÔ1¢MV¡5Ì2ZU$¯8wHHz„á¸I@S!æ|üZ†j¥óXYí^«Ñü÷'§[è˜è vm~…£uîÜ;Åír‘÷ Íö bqm‡RÎ!~ A@’‘‚=¬3Ï2^±±=Ñ‹K4xœ»Õ¯­ü¶0~YnÀ¥ÅÍ\›ãj!±ÐV­1/Kà9>µb)ÝC\—!¨±qÄœ‹m @dÐ"i©MåÂE¢z™æ_ȧ ^®1~y–[ä¹ä+>aou…¦®÷ï’‚®I¤’ Š!aF ÔBºi `ß(0Óc07íÒ·7@€E=æ.ÃP ÕºÕv•†8;`zLÔVh²|# iè+40‚ÍŸçX …C%ÿ„KWîñ¸`ãŽWø§#1 D=ÃíÛ7¹ü¸Bxx o¿=@* Âòðo1UÌUÙÊedECvmêA²B ˜â૯r`}Š ìã EQ›c¦¬’s$BÍ”°£²b’îÛÄ¡ï½ÁVKáã#ã&Ñ Ï®ãx>BRˆ$5¼O^­Šíû,4}³c?»rˆ„¬H ·j 5¶ê{\½š'h¥ˆF#ÛèÚ ’táØÔü†÷&E´v¹øŽÛÉÖ¾ ªðñ%åËÒú•dÂ=QÞzk€ð½)Îäm*®Ù˜€¸>øž Rôp½ÅòÈí›¶õS‘'C iɳŽÉCƒr°ùïÆûáõQBg¸”/b¥c1‰®¸‹_‘¤Èǥ°¦ƒWonn<Û—P M—žß2xu—Æî]’Pý£QþéÄÔæÄ+¯t ö ŒfªøY·âàóy+HÈÈHø­“¬ «ÆŠ²æá×çù(£²sÔ"©Ë êž@Qd4ú£! ’M=Wà $H²„ªJ8¶ƒŽìÕ©úr£/|‘š^­ôX$‹oHà ܦ„£bûø~ûûMgÐðÔ¢ÈPmlÞdªUcRk£4´‰Û"è ߣ0WäÒmŸ=ÿÕëkE.~8ÉÔ³”ÙóÈ\¤€FÈhõ-ß—°íÆÝ¦[sñ EÓ°â}õY®LF©UìëUæ´5¢fƒ®Ê˜KîÆºuGÆø†²×KºÞX$—Biþ<7:µJ'µƒw·õVwk^y–©—Ão 318!Ýeá J+Xm§×ðæ¨ΓqÆn^‹Ñ¯¸?Wbë@œ€fSrtB†‚=yƒ³ù^¼“Ѿ0†Ôvªè°m”43FÜ|Äýò[‚2¦ï‚¢"‡{‰Tn𤰞ué ·JMÐjÚ‹>-Û¼|ˆ•á I¿ˆš$£Y=#BïÍs#aªç’­úôÔëLŒÛTÃÍÍHW£nJpbQÜ-ëXˆîßø•Õtš×^‰2”T–ú²ìPDzª`uÄt§Õ›‚ÂóªDdP§rϦTñH¸VT*‰~ ûr#Ü–«Ì”=*Š‚¤(A-›çq9N4ÜPŠp U}Þs½Œ•´p–q®ˆ£Ñ&enxZš«b1ÜG,ùoAt¸´jA‹cø‚˜oÅX‰+]oA­8Ém%ÉŸLB2€Ã\ÙÁ šXŠÇT6ÇTÙCµèã‘P PB'7‘¡²!€Qåa%À`ÀÀP$Üé|$ Ÿº+ð< Èš‚jW)×=ê¶ÃļK­_Ð6J€äûØ®À×¥F_‰ˆñ2Y;H°b3þPQ0ôvÆ©fM/Œ»æÂÜl°…+Oà"PÕrdz^C»¶ùÜoÍ/~³}›÷8~­ÄgïgÑÇúØ¿Þl(ýøõš`zÊÆN@i®F=ÁRdŒ€Fo¼Îoî—‰‡“¤õµo7 ¼*3%…XP%n×¶ö±ë5r5Þ¦OÝoúý£XT!žË›G€hïf$5,µ%îj4¶YÇަ׵¹Bçð5ç_YÇ ÅÐnqi²N¬OÃ4d$%ÂŽƒ[™½xžß9½Ô›Çµý›Çˆ&£lÐç(<¹ÎéÛygc/;¶'ùÝ'?åÿü¸áÍc÷‘£J†‰Žá`î&Ÿ¾÷|èK %W†Io]‡úéþã¸N$¤ Óp$ŠaMDZOÿŠ=ÕÏèŽýðxzóü‚7»¿ý€ÛñuÝÓÙÏ"-Y)jå¿øÙ]TÃD7C mÚʼn}ýyHJ€dïzö$Ïsê'ÿ“’„^Ï[¯±)6ı±i>¾ô!ÿêŒd¤8xìUÆU®ž¿Áì\†û³“Lø?©±}ï.FœÇœúô*ã3máûö3γ‰Ôö#+„FGò\¼XbË+Ci‡O~|‡k–LÈ ©2Š$-Š˜r«æ‚)­\œ%dð*uÞœâäµOÛŒÿâ³ëì^¶:6Ž­ùC‘©ßÊßÝ›D·tz·ôòú¾)«Ë„ j$ú£ìNMóþ¿½ÉouÔH’×߈Y—fìé Ÿþ<ˇ®„µ.ÅpZ'&'Ùy{Š“?ÏcD 4M¢7"#©*ñ¾({F&9óã›|"+Dú¢=Ñ‹µ’–cÍJ6Òé¯Þ¥R+ð°:ÂÖ „„O57ÍåÏÎráé,ç5~ú›·Ž±?Qaâò%nÌÏqg¢Bæw9înÞÇ£‚¦Œr¡‹5¤aÂq­ãX9l®FKîp:O8ÞCÜh:Ûö]<¾Äž)P€"Œðƒ¡P—T3Bßð&ú?;ÿù÷€/ÚÉúDsA4 }1³¯j²uN}ô[ç-¾ÞÇæX˜é<ç~uŸ A Š&5Ê#ÉX!ƒà,¿ú÷ŽrèX’D_”Ñi~þ·9PU”õC0 k Og+æ9ßåÑùi.Žç¸÷ØÁ—~ùs—ÛÒ슙 šsüãߎ J˜ý:ª$¨æÊ\ÿt’Û³ÆAù½ wwôs|—E" 5¨g+èeoѱ¶¢ û6å»üíuÏ0Ùu,H@9 NðïÔ°NºÞÇ·ÐZÈÜîù=ì‡l»gôë ¹i&µuìÿ†Þ?®i|ï®ÿÉ“äÿ]H €„Þy‡Þ¿ù_‘šVÅ«1@t{ÖY.²úÙŠË­eypó¿¸àµ7w²­7Ôåº5rù"%ÛC ˆÆˆ‚R®Œd…Ñ4••r‰Š&”qí Ù|ÛY5ÇbDth™ydË6nËÌ#j¢‰™l‰š ²®¯Y蚌‚‡S«0Ÿ+ã*:A+BÌ»T [up]Y7PU“hØ@µ dý 1Ë@—\ ™’eR¼þ1'‹ 6 ¥Iè6µ|{w§H¼þmŽ&:“•ûžCµ\ WvðV˜y”ÈÊÔ\ubñ–êS*”¨».¶ëá¢b:V8Œ)jäò¥¥á‘(aõ9NÍ]±Ww)æ]´„AA­R§à¨$¢2nÑ&Sò‘T ]“p%xX¢’sÑ#:ACBÔlæk ‘Œ_¨c›ဂ‚ ^s)T$¢1·d“¯ø¸®@ÒULS%”¨ÜAD—½†vÐò¹õÁ$“‘ëLN…ÓŸVÙú­~¶ÍûÊ~ç{ uû\ÙÇCB75âÌ<ÂQKA‘|*y›BU€¢ ù>Š*c& ̦‘w¶è᪡ë˜ÊóœÒ›§C¿Êã³ï1™s¸eä‡G†É¾kSÌ)9®ºa`ÃD´Fß.;.Õº@VUô@ˆDP¢˜¯a„Cua癫D-M¸µ•c%ª·60ò&(W ää )]køÕÄ#_.1SwâGÅÀPTz-“@s¡“–•f2f(J<¨7Œù…C.SB ‡ êjãnõEËfŸ­kdJ>¾$‰õFûæÊ>¾,cÈ,UUˆ \Ÿr¾F®º©ëh¢ÙW*>È2j@#j)M3¬Ûø[_X7µ¼M¡æa7M«4³!µ‚JÞ&_U•Ðu )`U|Jy›Š#¨» ¨zÐ VÐd®ËüœƒÖfG8\ûñ=檂ҫÃì KHšJ4a`©€ï2sŽß¼_aןm`wlñ Óµï9YÎýæ}nEwsbÏzÒ–ÖTúr(L?àÔ©+Ôw~‹ïn‰¡K/(úŠ „À/•˜ø«ÿçþxKº&|D῾u÷Ø¥JåÚ3 W%îúìù+ªµ¬ªF„¡;xWºÏt¡B5À0$Õ$ž4‰/û.žj¿\Ò E„ZÂôÂS „ã¬|$•vÉ¡‚f†éë[úQ ’ éðº§gñ"É(BÔ˜˜Î£ naxp€”’'/{Zæ^ù¿;y…{Ù:zßß>¸Ž¾P—|û.ó3||¦ÊоSJ¬û£vE$ð}üZ…'Uƒt´éc•~Ö"/¨Uæ²Ð?¨N»BŸé3\%9°É"±š­%à”ªÜ?;ɹ)Ÿrÿïî7é±6d¶©?äï/™ìÚâsý¦`Ç‘4›ûtTgž‹_$Ó¿‹ÒÄ ™ʺ—øæb•>ÿ²eWƒÔtï¸$„]3/U@Ž: ˪å?JdéDæW瘬H„˜š¼àÍcyøÂ¢Ù­1›½j'ã×ùU¦ãÄŒæÒ´…[^Àv­8¤eÖ^ËÞ_ÓSÆ‚6¹Ôöy³Ì2ž«²ÙóèN†´Ô¯=…º‚ÊÔ]î¹½Œíïg • XÝå–çúæ\×£šw¦qBàÕêTîMrÑéãÐÃZè É.­žKn:ǹ{þ¨_[d§ËRÛä²ü‹ý$4c«¡lÝè7ûU§œ0Ø'WŸá×YÇ¥“Yæ’ú["¡èiY®®² ÏõÉçNÓ–PÒÂlqýÔnYŒèFHþ/ñ€åî%þyOjè—¹üó(éøÔŠÓ\¾tžÓñõܹ‰¡¦q¨ðkL\½ÀGv”­;¶±­7Œ©to‰±;zó.ÅÜ·Æ«ŒØÂpÊÄhÒiÔsøäÌ îeÊ8Ac[ÂáÚÉ‹FvNDÙ©d¸uå:Óý¯ò­…ìÄ >:wŸ9O#Ú¿™×^ÝÊ€)À«ðàÊENÝš"cû‡ð½}”/ÆÓÁÝìNbÕîóËÓ¶í"¬»L^<éãLhŠwÉÊ Ówøà“;Ì‹ÇSýÄÔF}åoŸâ·“.v¹Ž[©¢Žqbl˜´Qåö¹s\š./4¨÷’#~ý¯t"+ojùEbâ†Äã%Õæ1wã,'¯ß㑵Ÿ?9º‰ .ãe¯ñç²äÊ.a¥BÙ•öoç­ƒë°êݼÈïnÍQWƒôîáÄXÓлót0<À÷G£üª4ÞÕžm±Á¯—˜¿Ê—žP’èÉÛ»Žõ‡Û®påæmîæÃÔ˳¬Û}c¡F·£œ$¡™½½Ñ Ž6ˆê»dsçÌS._ÍpWr˜¹a\ŸæøžÅÏžòt¤‡ÝëXÕ,¿>å²uŒdµ@q¾Ìç2ÜžÓ)惤}%„’/qå“i®Í ôX¯ö±§_Er+|úA!ÛLåJ¾Å‘7Ó¬ ÆÏLqþZq`=´Skz¸Ôre®}2Éåi¡é ììãÍ=ALE&5ˆ‡d¤ÊªëîÜ,¿¾ä¢ÔëȾGÆ–ˆoì娕âã,ŸÝ7yã[B¾Ãôƒy>{äÄñ† 'm ÒiÑ`Z‘t¢ý[9ü'ïÏ2 7lÛ^®/ñ‡ eå ²%Óy.²òpj÷E™šœà܇¹Ø·™}»ÖÓcô°c̤gö)w®žâÖ­^ÆölcStiøÍ›½X±‡v¯§·£:!àÕ(f™}|«?@HkŠr½×ÏÝ¥–ÞÄÑmµûç8kšÔÞÖèüìÚ=|YF©q5áøj~š×gIì9Ì^ò<¾‡nöóíûá'|ôÀbýÎW83†Mc&›!—tpàU™Ë”¨:2ÑH„¡ ›Ø–ÏAr'6Gƒ(ŠL81ÄØ6›ó¦h§$tËsŒOÆ8´o'#y>þtœ‰‘8AõŸÍضm±â%fóuÎÙlì$j“šJ¢ÍÀ~iÃÞÊ{Š.NÓVD8%&ÍQÂbû·÷+ÍpûÆu®nL±¹ö˜ 5ö9„QšåÎí œéKs¢íŽbi2†g‹ §•µ™7ùÌS.\Ëлï0‡äœg<¨#J3ÌX#Ø»éÙÉ+òd&Ço¯¤8ðÆF‚>s³O¹ps7WæŽT§\uД2ÕªÄÌ­G¸é·Ù°nˆÁPK,Ykf¢!O[¤c“ +&fXÑ$})k¾L5,±0Auj™xO&˜ìe°7Í`P%.Qu\\aSqDb zU!$Œ’Eh-¯Å]ÚE³¢¤b&ú¤¼$y9ØCP‹²©?™s˜»s‡™B…ÞÌ-.Þ)2U™Bqª”m…áb¿Oë0Q6Ïû’¼”®m5x6åâ¦e PÇ÷\!£+’¤Œ„I„T𜪋bêhjÉ3’hŸO¹+E³ìŠÔT¼y,Þƒ®,—jh¨²Œ$É‹•­ Éå¦7ŸB]%ìîÍc5H’´ ®^ÁÆ¥(š.7òª(à ßwq E’P4“¨&®w7šJWÏž3ïyxRÃá®,dô€ŽpÜ t³îÍÛVŸï’n›gŒúº]´`±Ô‘Qûû-ÎÌÅ;aßÍhð¶Ê²Œ.ùä\$Õ²LÀ”‘•¶´ZrÉåm&|ê›™Œƒ+å”a‘ìº[y:> (¨’ÜXø$ UÔ E• †dª¹:Õ°KÙSé .Ök×zkªéË4ùmWËÖK¼Äï9$u¹o4, ¿æÞ<FsrAV Xé¦7$AY4¼yÈ ìEoɰ ;_ÂŽèÈj€tÿ(‡Þ}ƒ­–ÜT\izó0[Þ<<ÏéͣɔÝR¡Xœ‚[äß­ŠîâÍ#ºÊ2o»šÞ<–Ý-*º´ÜK-† !5Ã;ü4ë©IÔÝØŠepÃ~ôÎæ¦§ !¯®$ó|‘EÔ±}ð}ŸzµŽPdù 6)XhÉœEƒrÔóá~Í¥îù+±Ø^’Š Žíá ©‘g!cªMúRIjúÁh&º ˆÓ<ž.´ƒ„°æ'²\χùÓ?‰#žføøƒÂ‚T¢ÕA‹ý¨åGÔ)Û\™°¥5<ЏußÇö}Lϧfƒ¦‚Ôˆö†POexÉEc Úɲ; Y?~½Š#76o_–ã——x‰¯#ÔžÞNÁ½€ôì ¤ïáº.æÐ^¾¿>Ù&fß.RµÖñÚ‰Ò!}AÜä- 6o:+F¸6ÅÃÊ(› *è)FS7ž<%¦Ô‰ª¾•b $“¹{•+ÎrÎ •8{õ÷Rû % >âÚ Ì^I’Т=ôšz6£ÜyÊý‡*NÌ@VCôÆuBQâÜ,!0ç¦ÉÖ" k–¬¨èºŠ=7ÅÄl’p¨ÅÅše6[ X«’Íd˜rƒÄ U–¾üvuH¿Âœctó:†’! EÅtëx˜ ÿåÓ›ð¨W Ìfòdlr!Çì¼…•ŽT}Šù"¹\•Z¥È|&KÔL`ù´¦9AI Šõ’¸yŸËClÈH²B(&¡­±x-°t¬ÑWP8E¿z‡›ŸR•òÌÞ+î‹ ,ŠS[çñÏ3?KŠŒÓa®ÆÌ”ŠêH„$¬˜Dq¦Â“0˜ÓrU½Í]‘Œª«(Õ*ž$C‘€FbÐ䯽<LƒòL…LÀbB"Ð¥ÜÂqÈælæKÅfnNC )„ rExÌO•©L”™«ÃznÝ#;W#SpqÊ6ós2a3@4 £H>sWžðÞ\˜×Ž%Ž76n^©Ì£'ej¶Š•+3阬O*H „¢A™áú}“ÔX?ÁæøêŒE3ªâô4ntˆ°i¼¼|‰?lÈ-✶-tSƒôÙHÅ$Ö»™ƒ ‹m»7õìë@·Ð)|íÉÕ ëaSäçoÏ‘Ú'Ò•0;Q<}•OOÝÀ&ȦGHh.ãOe¶îZO<e£È rW¸û¤ÆèÖ>öì[ÏGŸá§× ëgïá©0‘­¯qܾÈÇWÎpÉkèï¼2Bï®mô||Ó§ïc¥ ¤b„õ†‚ƒb†Hýä¿)¥ÙÔôæ1uïgîeÉû6ÅËW˜ŽptÏ¡@Œ´l Ë€¤IÄÐ ·\Aòg¹pvŠ‹ª‚,$ú6ñækc ›++Hx5²S·8uuŠ’Qyr—³…Ò¡=lŠT¹}í÷&«P}•+òòA†,zâB3§ENJƉ›‘MÝVàƒ3qXï&^?–&±Æ¨„B*&ªª]'Õ†RF$ÑÏÞó|xþSîÊ&j|Ç6÷ *H”@ŒTØ@ûœ—_j@'¶½— e¸|¦ÈýM}¼±Ç¢gwŠžç8ûq+mÒ×cn¹"R5b=6蓜ü°ÆÀ¦¯´èÛ’bë'S|ø¾ ²ãPM ÉUˆ¦ ‚úRŽ~©È• y&²`²\ÌÙÄ“û'‰÷ÅXkŠß, ›lÛ¤”}*™"ÏÍó´àr2\½¨QRûÙ?bjŽÆ%ªZ(…Ü­YÊw%_¥g?;b²˜A԰Ƨ·4Ž ª]¹h™,¹Õ9®ß©Ñ¿>M<¤¿€Ê—x‰ß#¬Æ5~gÿØ¿þ;AË›‡Dü¯ÿGÿÃ_/xóøÒÐ[¹fßæ½39FïaçP «9‘®$&Xvê‘Úö ÈÚïf–ß¿,7(kEØv\Îþ²PWº…fzu~øsN[c¼¶}˜^½Lqv†ÓŸ\C}ãû¼•îìÍ£“=å¯uÒž¾´C[¼Ë¾èjƒ¹øA›„wáTºòõg°ƒ\x³-®`séÊÓÖ,ËÑ­ÉmSWd¹Sf:ßvƲ=jç|-Kª>9Á¿þ@åÍI{Ô†'’¶ÈüZ‡×§89ã‡ß‹’»·¡á×™½õ ¿|åð¡­lH»ä—l:/ñáûdþå¿ û/þ¯E]!üËåÊßüèöÝ¿ùZ’•KjÔà~ðúCîÕ}\×oتH 5£YòÕî;»+†tÿ¤Ó³• bW#TTlrù ¾T¢œ¯àèQz;8h[X¸VË×3)ö,}繉S¤g‡..šk¹¾ù¼r{üÝšeµÄW<^­;½Ü-ÝÕ“}æw„´üd6ü6J …²æÝe½b35Qbbʧ{h ñj^•¬?Èë‡è6Çå›Ì—x‰?HM渥»W‰Æä×Ì› k$ŠÄêßÎØW¡/ûF?;Îgîà Å1´u/ÛO޾ċCÒtz’ ÆòûaÏ%ÿtžOÎWÑSœX§.2­_”­;—ú\zÉ2÷ÈèÂ=ÞÔbMˬE͉†ÚëW5j¾¦:çk’•¯xÔ¡þš;|3½•ï|wëò LË^µJÚÉÊWäm•ï¾t3MXí®¹ó7Ïïhµ[Úkã¹Óz†6h{yõ|=g»¨©4ÿäíæ§Kh¤FùÑèB´´ŸWsrþµÂ ™™| ËñßXtêJív[—¿³\íõË'+x®C­T ª†ˆ¶|_Zeññ<G¨˜êÒIÑsj 6Z,†Õõ ¸çi÷ô=צ+Q©»¨‘IK_bœîÛyf«:±°‰ñ¥X}/.¾ïR¬•™«ËôFÄž!yßµq% My1T‹÷œ¾k3U©á™!út]!2¥2Y×ÕT’Vˆ¸¦ ²Â’æYS¤^Ê3_¶q…J(%bvWV®G¹`S–4,É¥,tzâÊs¥»x/¼âI—ðåypÉä|€þõ£zu—BÎÁ å¶® ©è2¸µ<™ŠB8ÀÔJ^â¥Xø%¾¨-åœ%訜#ð]½OÏÁöåÆd'K då¦x«“•ãÕ)NßçÒ¹›ä‡pdûé€ò‚»Í/Bpk²Oyè3Ö«·íÖ]J¹i.]˜ çØQ¶[r—ü³aå ǧVœãò§ŸqåÖ#´×ÿ”?¤Çìêì¹ëüîAGw0Ѻžl_u!\rÅI~uç¿Íøë7q°‹6ì¢ë*ÒÓLŠYÕ.§àöÔ;®>•j–ñéüÝíG”Gñ?¯ëaX»ô”ÿt}œ››ª0ؽyŒ?ëO^NyÓÈÐu%~•ûç?⃉*B³ûð«ìëì²B:Å*7?|ÈY­‡WÔ9N{CüówìáìcišŸ§…@TKœýÔfã+ 6ôj¨kÄùü§øi>÷7>¥Ù<§~1Åô±ŒžçîÈïŒÒT§oñþ¥ Ãc{Ø3ÃR›ð—ÇÈ—ø"йÉб®X­:¾ïÕ)ç¦xXÐI%"DCÁ&13øÕYÌúÁ‰XKoxºèÞâ8Y9 [§G»”aüÎ=.÷óƒ=$š®®„S%—/Sq=„l†±4ŸR¶ˆ¡h*–äP)•±õIS±ËdóUdT#H<l˜]Z©H®lãø ˜R¿X f† ›ŠWa®à (² :7Éí[W¸bh¤•`˜¸%ãÖkTѤÛmÜr–L]à»ß÷0‰°‰&{T ж‹ãzIK3‰ÆcD;r’*Xñ^9|daòÿoï̞㸲3ÿ»¹gíP… ¸„¸S")’’¨V·ÝVË~h·ýâp¸_üâpÄÌà°çyÂó03/ž‡‰˜ »cÜÓíiF–ØMj'Å­¹ƒWÄV¨}ËÌ뇪 `D¤ Qõ1Teâä½yóæ=çž{Ïw¸°HIjÅ,YRŒnŒ±òµ<39Ç•¨¸8T3@¸2ùÔn$<·Ì…äùÓQ?jcJíáÝc&Ÿ¼±@uWb®œàè»ûx%8ͯþù Óù $Šc\.÷óαíô¿àaºÊ‰ùQöÄÖ2ÇPIì8È}óL^Y<Ê•óB ³ÿÝ7Iåîqúä9®¤·ðji‚«s½¼÷G»ñ§ïðÅ©³œ™ÙH2ÃØ*ÃßfßPËqQ m™NÒèPBA×Lü«tw =Âè¾ý”îÏðpäG·¤ˆj d™k®0ßÏûLJH(YÆ/Ÿæ“sŒ¦¶Zj7®hÄõÄⳡÄ^¿}’ÿyá2i}½?LjY« Ür–É»7™ŒâÏŽDÉܹÄG§/3¾é-¶$wp<¥8­?r˜ÝC |Êʳ-Å2é{%E6mɬVÏÃK%9’œ¢Vöø¬á؆_MÔÛ}l<°Áוéç~ó«³)†7èØS¼5˜ÎÑš]ZJÜR}tïîò#ÏÝâדrCõ¬9Ï-êÙ­2HðþáÑÙLL;œ¸Pâ•#}áãjì²v+CIQÉT%CËe5ðœj ÇħŠa¹„Ú<÷榹ûÙ ÆÎÕ³yÌù7áJ‰ÝÊád=›Ç×xk#á0SšáêíÛ8ü çE•B©Š±©B¥"˜½“Áן$´1‰†j ( « bíf<š"hð›6×UÛ“• ¡ì‰4 4Í& º8ž‡§(×Á•®ëá9 ¼;{å›då |«-ç´`[Óc*è%Ÿ)™*•)ÍÝáú¹ÿ{¯‘ÍCa¨ R0<'Μ!—~…ý[è].-Y£lî¿•F`å¿_hËæ?¸d4ú6ûñ[º° FãXc“Ì{O*ÈEdá°¤ée=wiÅÏ«ÉSs®d ì ÚØºhãK”8•ùtèH [3qü1’Úene]uu"¨?ÿÇܺOÜåó] ¶­b¢¢ª ¶¡¡ Y•¸Õ37g97^¡T®1?ïq›ÍÓ¨ïÒåä/ªa 2¬@Fâzõgøüê¬é¦‚³±*Uô±2U#L8eR¸]"ß«’®Ùdc>mãš” tB~A±êáx]ÕØÅ·ƒÈÊ=ʹi®_¹Âå)øÆý¼? T°d‰ׯpæÆ 2:ÄÛo'éï µ=ò[$–ÛÙÐZÜR½îÕ¨j vïÞÁ¶dCH¤¤'¤£(§H¶XE˜ 5<)0c›9úÖ>RõÙŽBw¦[²y( |r¡ìÆÊ”çà5ó$ñXy.Z Û@S­Ù<´èVvhŸòé§“˜ší‹²Wôù¥ê6ªîÃZ’ÍC**᡽üÞ›©zŒ¢a‡|(Š`ãÞ£üþÔ$·Æ/ñ«§xëØN¶%üí9b׌¦;£uºíRq>½N@PP4ÅÍÔssv„×ï>ÀëæýþÜ þûýîÅBÄu³m;K¯¾V¬›z£­4Læù”,/MðTP —ù©,§Ï—è=’b VäæÙifžVWUŧ TQ¿ž|º]³,VÚX¥j CRUPt<¤©ê ¹žæúLˆ¹9m‡ôU¦Úª÷™g¨n]¬ˆV'«OQ„­(«_ƒ”n…B~†9}€×&H„­ú Œ›ä^ÉføÕ=ôÆ#Dýº"Ú×±bö¡êV³4GÚÙ„¡Q·0(V…9Ï ‰Õj\M@éáe¾J')½ßépçÜu¦ßÙŠiIèÌb_ŽëÖ(K½f Qx0Å܆qÓG¢*C÷Èæ«TkùéGÌ•LœfÝ„@(P+×ð<‰¢<~e›=$õµélÒÏ,šq¨PðbŒŒlf(ÆÖu‚¡gê=ô˜j®1P7C+š™#Ûk—Í£ùÔ[³y(–?F°šÅñ¿JŸÜZGS@º8zÔ M8¤2óáufòe6ÆühÏ•uP  rÍÅq=¤&ªŸÁˆËåÙ"…¤‹¥”ɧg(ù“„;.[R«Õ>ƒi«@¥Öœy´¯fê¢ó÷稤B i&ÝÃ!µ6ã>ã-¯báÇãB€ô¨–kÌv$Lü3yÒwaW³ñ,JÇ+8ýe}kœ‘~[<‡éGUŠÃ.Æ£<¹éÕ@Œ€®b-B8}Cà÷…8Xt‹m!é™Ê*Dµo)Œ©‹ï „m!l Y,Ö¿[-Ó·Õ2}«VB5 %6³?¢ã·µEÉsU¯nX–®( Š`éñ¦¾XÑ¢ZC ÕkœžØÉÛ)ÓTZ”½¯ó›s_ó¿.Õð„ÅÆGykÐáâÙ‡ø7ï¦?f¯1ƒúÍeN]ëã†ûØ=2ÁoóKþ‹§`…’ìzã‡â!â;±ïôUN~8ÆGžhlÒ"9²ñÅ—üÓ˜A( âIZ£Þªå'Ò¡üå‡ü‰>¶6ÈÊ'®~É«“þ?ÿÈÿW ½›yóèN6éi.œ<Ë¥é.n`3»‚+l¨Zè,¸ˆWÇzgÑ¿%ÁéóŸó‹+†_;ÄCa¶ìÛÁý3çùå¯p¤‚éO°ûÀ0‘§:ê«,”¯³eãþ—ùû{5©²iÃ.mcÙݺ/ÌÀðVÆ¿þ”øGPƒ;÷ñª_ÔC9y,¿]ÏÞãxÇfRšŠMQñ‡,ú­Y>øß7‰øV¼[ιwvŠ«ÓEÆîÖ˜ÿ¸Â­‘Ç^‘ ´löj.°öÛ’Õ·¯ÏcÄ § RQSÓü¿ž¦Z–h‹Ñ£AüB øuâ)‹üçbïôPë¥/ï]­+üZúWjIF£Az».ºX#¥]h£q}ïž3ö5û¨‚äßü÷Þ[ÃX‰•c¹símÒ•ÐæµœršÛWÏóÁU›7¿ÊH2PÏ;é”™ÏäÈW\$ v8BÄ”äç ]×°©Q,ä)ªA>§R$)Pñ@ÑL‚‘!ƒ…0t¡‚Ó ó[è²Ì\:OÙÅÐÁÓˆFüº‚ŠK­\dv¾€£øüÍtWYÒ¥Žã¡&šfšh•,iÏGÄob‡ì\á·È]þ”S¹[{ˆÊ™,7Ç&‰½õ#ŽÄÚ•K—j)Ç\®Šë88ª†¦„ÃÁzº«lŽR¹JÙ蚆R+¤ „F"j"œ*Å|žŠ/JDu©s¤sºé#õcQ#“Α¯¹õ0 3@,ha6¦mãä9kN•ÙR•` >®´ž$·œc6[¢&¬P˜ˆ©¡R#“É‘¯4Ã<ìú=ªËõf\¥G±˜#£ùˆëz(À-ó¨P"ëzxhDü~⺆þÄzW36pi˜‡A &d4 >Yc~. â3´º¢Zå½ðŽtàšoÊ9ù*MÃO )!/uªK¾¢ @!S![M†@Ø&aÍ£”­R¨yTª hÃ6ˆù´ƒ2ð™Y®0[V Ttu%5µ à8ÌÎÔP‚aŸŠJßýÓMn`1–´IDAT &°ñi ª¦Ž™ø5Às˜Ÿá£OŠìüéfvEZÖ¡ŸlúrF-Í™>áZxïìÙDŸ_oè÷®ŠìâÙ ¥¤6~‹ûñçxù|Ý'¥ôW~vmìȪf+uÄåÏuÞy›jU3C ò1Σl‘RÔÆ4U„f[D—ÈE­á×pŒ@ó›$iÛ¦a£ûlŽ9‡Ç𲡰UQw¡7tuÃe¡³ýpŠWûtÅBD*¦]Å}<ÙõTü1»ñ¬#Úóx-,“„^ãÖW÷™™­0–_\/US°ýPÈxOdK1S Þ~-D" Oµ»4ê®Lz’>¢Fssõ]´‡B¶‚›Œ°1Ð’™dù†£8=A¡w'G†éYÈ'ÚUŽ]¼HÔû×ú"+_Øå¨bâlØá'áغºpþ;ýZHƒÔÖ>.\ü†_]?‹.Bµˆ îäà[5¿VrÇÏäyîò|ì‚|¶Ë| ýJQñѼvÌZXÓ^TÚÍ.þˆŽ¥Š3c’T¾ÑU K×Y¨ ¸mÖ_…a¶›Üí×Ê”Õâr¯ß›Gv*ÃÉ}ÄŒæcôXˆ`Ó3°b%¬ø&öEu|¦þx-|¿]|‡Ð>z@ÔöqÎÿŽoAG**ªá§ÍÜï» ¡Þ¸›w£E*nÝÜŠŠå iË¢ÓÅËÝÔéI=¯ˆüç/\¹jï9èÃïldÐÒ ¶ÞªPðEú£ê„cÚŠ›õZ¡šþųäﺡÜź‚°l„eC.×zØu®ŠW– hÉ5‡5?¼ÄLýi‚bøI$Ú9ÀšÔÅË„uëxŠF|1‹v«š¡“Xb ¬Ü4/ñXÐÅúÁÒd‹;Gƒ¥}Y€a|[Uûž¡ûÂwñc…Ûíö]|¡µ[è:0ºè¢‹.ºø¾`‘ÆkÙ Ðf“ŽDJéyÏa÷Ã*ÐR-‹uëšë¢‹.ºxI ÚÇA€ù¤‚”’ôû¯(áðSý"š†–L-·h9rÉŽ‚¯TµžÐYU;+O„ev¦›.#ËîHn!Ñ­mw¾ÎÓ¬§¢<ƒñð-+Ö®"o‹®ÓEë¶öäà&`´ ó(~þÙZ‹Z£Ü‹Å x‡ rAÑ5äêE—*ÈN”2 ²ÓVíM" ££Ç ¨±Âçï¬m !çë¸<%B …;.]GèE& !@Õ:^W¢nü ÃèØÀAQ:7Æ_drk-n}¾·ë]#çûÉBÆb´šFOx6"àuJ#Üdopí­Z¬ù!ŸÞ5zAøÝ3ʯßÁ@ºkP¢¡ ;ëBkÈuhà4d§ƒ«0 ÔÞdÇG׋ÓN¬ëÅéâÙ MJÎØ¿@ñîÐY§j{b·””P­Ôÿw"ö‚ª³~±>_ß®g¥âº^œeå^°GJ‰ôÜe í?Þ¾óó¿Ý0ø~EÙ¥€²ÖÄpÏ0½ð7ú™ Ë|~dË/ÙÙËÙòy}Žvÿøþ)ºµb¶T׋³J¬ßWþeôâH)Áóp&&–ž²[l3ÍÞm¶µýç=ñ¡o@Pßí3BYí]4ø&õº\#íê¡5äÚ†¨,[b«iùêΤÕÝeËPãƒFžÜ5È­¶Ž ˆ¹ŽžFKA]#§à Ù5pºèâ{Ñ™ºIzHïO®YtÏ‚gj„o»ý:*ÏV„Øbš>±{ª£2Ö¤°Ëuìï¸<ü¼'>8`èfçþ’@°Rcå: :©g1 Ö©Ùjš†­(F'޶B «“ß*×IiدԟaÇï„òøã¥4p– w½8]¼`Ô³yàýìÚ#݇ÿA,ùý —ø¶ÐQy[L£® ;õÓÛ³³Çc{ÏžÙÝfæìÎz¼^ïøìÌì:·Ýn·;ÈÝê¬)F‘ &$"‡BåzéîP (‘jJ—,àÅû¾ußýÝ_¼‚eØóXwûþý³e—B,wÜÖ°†5¬á£ I¶0:ð+WÿóçŸÕ%;ôÅPv|Àí[ÃÖ°†5Ü2AoKçÿn${6 „w k:ÅÖ°†5|ì @H@/Èöå„TLO‚5ÔÖ°†5|\!  #Ùë7’½þ' ¿Šª”Ï^ÃÖ°†5|„ %˜Î98rÁž`6Âð©ŠáSê·ù …ÿød=QcÍ2µ†5¬a 1H gºüöwH™õ»L ´¼Š…2AMÖÎZpÔÖ°†5|´ ¥$SrѨ ¢ö¹¬ƒ›ÅÂB”ÝBÇAJ‰”r™Ó×°†5¬áÖAu‚«ªê‚¿?îX̃„Å&(Ë áüõ¾ ¯¦à«ˆœ‰‰ J¥ŽcQ*q§*MnÐ#|4PeCQU¼^EЮqÖU4]Ç0¼!°,³TœŸ”¬qµ,å_U5TMCU5\ÇÆ²,,³Tãî£Cayâªišf`Û–e"¥,÷§ÊäVQTlÇÆcxX×»M[É òñÀr²`¹mwñæÚ<-‰ã8/v.K©˜'3—²LlÛ*ñ2T-ª¦¡i:ŽmcYfÝ1M7‡£œ<}–;v'Qe¹Ë~, „ ðáñXÚO$Ëi²î³öÞÕ½€f©ÈÌÔ(M-‚aEY ©¤”ضM*•Zö‹q‡P(„×ëýȪ„Õ±×À²KŒ^XãlT¹Ò /ÓS£Œ O´Er•N§W¼f8FÓ´W ¥$53ÌLOŠDÙ¾çΊé¸þ8p˲) èù}Õã4M¯ðöA>Á…”àºÙtŠwÏehpˆ‡y˶>—”UÍÄ®l¨ÛY9ÞãñÔÞÍ37 ðû<«=´ÆÅrú˜¾xŸ@ T*™Eff&iní®ù0LÓD×u,ËÂ0 LÓ¤T*qðàÁƒ_Õ×qêÔ)R©ñx]ÿh;ÍEÅï1<9FgϦ5ÎV€®5®:º7!¥$ŸÏ£iº®“Ëåðù|X–Eoo/±Xl‰ 8yò$SSS$“Éš¯í£ )%P”Kçß¡kÝ&š[:Òm¨M ÒÙÑN(^²/›ÍrùòEº»{0ŒòÌóÃÊ‚á([wÞαS}x=NEËj„©É º:;Q5uɾL&ËÈÕ!MMºñ¡å¤ w5³`»ìú} rÙh(/à«ßàÓ¼zÕ%Ë6wÊ´T*qêÔ)B¡™L†Ý»wãº.®[¶}9Žƒëº8ŽSsŽïرƒ‰‰ .\¸@[[ÛGz(¥De^c[³ê`÷qå¬WÌη) lذ)eÍYYÏ•mÛøý~¶mÛÆøø8ÃÃÃ$‰$WõR–mó¶…¦ë¸nùý¼|ù2º^6Ó”ìzJÅ"€Ÿ€ß_;·Ê]<Ãì0™šœ ‰â÷ûø0§æJ)kþBÛ¶P…|>ÏåËWèîîfvvÓ4Ù´i#®ëFjãVUƒ•R’lnbjr’™é¢Ñȇ~²&Ý%~ \¹H”5Y.Ï¢‡GI9?‹Ó4P(D>Ÿ' ¡i¥R©¶ÿ»ßý.H)q]—ææf>ýéO×f}ÓÓÓ¨ªZ(nüÐ0jKˆ,_D–É*WæºgÕŽzó8“Kg›u\4âªÑ̽nïü@RIê©Þ§º¿Ñu–m]®âñ8¹\Ž™™ºººÐ4 Ó,Û¦'''ùö·¿]ã à™gž!™LÒÖÖÆ•+W0M³&X®£ý–{ÞÕ?ãêîs}׬E'Šª©©,,Ea``€ÎÎN\×Áq@P*•ª Ó4Ù¼y3äó9R©Ù²]ûC<(HéB¥TßGçò¥‹Ø¶EGg'¶mã8.B†‡‡)Ë–eáñxؼy3Û·oãܹóŒÓÖÖöóz$ïoìB”9i|ùEヨl]>tv¹Û,¸hõå,•J¤R)Âá0©Tª6èI)Ñ4P(j³?MÓÈår¨ªŠßïgrr²v­›i»äR%ÔˆŸ~SoÕøþ•ðVᬔ›#ãøi 7"C’Ï—0¼4ei·´ŠYær‚D"РÓJÒ“3há0>]¡è€GW¹—âb®¦¦¦(‹D£Q&&&ƒµ6røðáÚ€Wå*›Í¢(Jmû{æJ:XÅ,¶Ä«« ž×¡T´Q=´÷ó»%ЦÀã5¸äæÒX¾Qcu-UÞœš°p]§f¨nw]!Ê‚DQ\×EQ4M« ’[·nåø‰ض]6ã±Ôﹸe×Ú¿×s½÷E­”¸®Ä¶Ì² ضplDZË}ƶ±-×±+ÑSóþĪ98›ÍÐÞÞÆÑ£GinJT¯ÎØÑW˜mÙÁ¶ÎÄ*{Y¨_9Ã¥R'woÖø]ÍyÓ¯ý9?œ¹ƒ_|òv å½ å&(Ž”¸ vÉÊÒ]NXø+?5èªÀPèóNI]gçÎ5û»®ë‹ÅÚ‘å¾rÇTU]×kNÚªšW½Ö5É®Ìæ–ªü·ØqçÚ6ÙéºÏƒG]xë©‚Umçâû‹Ê=çg ‹fì«ã¬ž‹jÇ5 Ã0r¶BkëY©Õ–RRÈÍ1mi$‚R,8 ×LñìwOpÛ}·±¡-<†Xi[©ezF‹ûPŸ,榧ñ25É®ªÚÖI“WYÇóÏ5ÿ|‰D‚d2‰®ë5ÿEU³¨‡ªª(Š‚Çã©™^^ózPÖÀ¤cŖ0=^ MAY@©Dš#¼õâšÞÇ– ZÇU·TÉZôÌ.öäÛ¼üŽÁ¾ûöW³œyíE&¶=Ê]¢*°WTjÏX™AWÍP¥b‘öööÚïŽc×g&“áù矯+¥äÉ'Ÿ¬½›emÍ©½“n1ͱËY6­k!âS½«)mò©q&œíñ †Xþ}–R‚“cf¤|p m1?j]ÿRbÏãµ3 »î%¦½÷Ñ•n­ßCÙ—Ïçkf¨¹¹9‰Dí¾Ge||¼öw"‘ ³³s_¬<Çþùï9·é“èw狼³Rjœ±é4Žð’hm%P¸:0@ÞrQ4]­N¾üC¾7½—æÀmt¶„ñêJE »Xù4³Ž—ˆîBkÙ€—Óã)|á.ÚÔ0®™§ø*¦]þ®­=Ä´Óc“lO¨‰¶¶"5ÄHF"\oS;7ÃÔø~€pŸUÑ–KBg͉+ysâJ~9a¡V~j0T^7È–£ìÚßÕ—S×u\×­¨u2w†Î¸‹ìšÿòêüU»`ýµ®sp„¿ün`\aâªIbCˆh©Dß Éæ;xl‡Ÿþó#36¦£p×Slô[ ž#ðsé§Ã|ã]•}í.YSeã}íZ×hÖØ¥™ÿñÿ%Ùl1\Ô®&t¸\yeœî'7Ða˜\xckK';:utAÍï°΄=z´f†ªò$¥$™Lrøð᜹ù!Ž»ÀTÑEÕãlß½ˆ3Ã[Ç/`¡â 7sûî&޾x’B8J ÐA¨t…KîV:Å)^82…7b_r=Z\†úÏâz,¦{7±w{'õò559ÈÉ3 ­EÞzá¥hO~îeïžn.žX`ðÍ—É5¯'ðñ§‘Ñ¥© ¼ùü ¢z–…¶²Ù;Ä¥Kp½ûèŽ1ªj”4Iœçµ³S„üØ6;oÇ—íçäÙ,÷=rÎL?§œÁãMsñ‚EAØ·{#…ÜWϼÎßI¿íöÑî[^?[`*¬hBÖ­[·×-ÿHI8æÁ¬õ1×uÉård³YÖ¯_tÝÚuÀ¡07Â+o !„COk Ë´‰Fx4ÉÔT¿¦ûOs"×ŠÜØI2ÂLM‘·\MÍM(®Infš’ª£êàÓŽ™'“J‘³TÝO(A+¥˜Q1·*D“Éé4BT" C1|ªC!=‡/–Df!­…ñ*Q3CU{ŸÏÇöíÛ…B „¥‚ýû÷×4¬*/8ŽC<_0ù°ò)Þ8ÓÇ©‹ß!;:ÀW¾ð'ø,?>z™¢ëeߣ¿Ä/Üå¿þÙŸ1k«üænãøÑ·91x™¿ ûøÕOí£+á©|G%¦úðõáviOóòÿ;š~ç?³Õ>Í×ÿâŸ{8ÇÑ9/{zuþéoÿ’‘éiƇÙûÛÌ£McüäëÏr9•'Ô};ŸüÒçh}åOø“7 Ú›ãl{â ÷ÿŒïvØAÂg 8i†Î¼†¯÷ÜÞÆ6ØcLϦÑÖÝÅý|\>zš™t³0ÃlºÀæ÷³UœçÅ×.àiÚK$ÞͶ]»ÙÜA:6vfQÌg™M)ØV€™TcýÝÚ6ÎK/^æòºVÒ33èŽJWs/-Uvïì¦Ù§`ÛΪ4‹•¸ªòQs<&“|õ«_]ÀSu2"¥äùçŸ_ÀÕÌø}3Qž~|>CC3Óüðų´Þy?÷omò\Ìéif&&é½çiº‚%ÆúÞ í31Ji&&f¸í“ŸÂH]âÈ /ã>y/Éd‰–ýwÐT®íV5 “B>ŤÒÂÞ]syáÂ(û“¾¹w™Nïļ:À¹ÙOßëg¸àá¶·W³\°%IÞ·‰ãÏ¿ÎÑá-4÷zW4YH)—riÄaUs­¢j’ªŸ ÌŸDÝ  Nq†úþ>ñØí¬Û|ïÛ/rÛá½DÊsx¤k‘ïãÇ'fÙµ± eö'¦ö°;”æï~‹æG¿HWæFO’kа¡I§X0q…d¸ïu.š›yfWåZum·2ãüÍß¾Èí‡ïdSÔæ{/\äžÛ[pßDnyŠN}†s/þ˜ä¿BwüúýTUª¼””šYoqÔƒÍ<´¥“–»¿ÂW?±›þ¿û7|ógs„[[ •&9ñâÏèé~;ÂÞ»rÏûéè‰pðà ú·=ÊüêVôšæà!ÖÜÍùoœ¡m[–Óâ."—®bfÏ3½ù1‚Ú7q¥À“èæwÿðyã[Å7NßÅ—îìE.Òž 3j FÞ}•ÿ÷[øƒ¸¤yÃ=üƯ?N0ý*ÿÏ÷r<ùoÿûoë]±o,Þ Ë„Îj±6íZVB)݆¦€2¡Ð8ÏÖÈ‚0ÒÉa_ø#”ðN”ä/#ôæ3Móºe,[jò²=éÌ$ÛDÅž,¥Äq¤[þ\éâ:6¶¨8‘² q;5ÉÄ„%drp”XGCrq(M{{/f]:šÃx+Òz%®ê5‹ÅNëz;oswpe ˜ŠXS©þ3%•NÏ4W‡ú1ì(ÂÆk9¸”“×éà¸.Žcc;…Ü4ƒCC¨™QFŠa:uU˜L\¡¥³¿¡¢PÕ,lÇdøÊ 5‡š¡©©¯Çƒ7ÚÆÐ«Ï!šncDAæ|+ÅØèFƒ-Ëáé¶ Ž,›ƒ¬ì#“±Ž6ôÔãÅ ííqrCÈx[éHFjæ–•ü4‹·×OHê…n½&Qþ[€[6e¹€âÚ8®SNòsæs:×Åu%eça% •4_¡êhЍl.SWÏóö_ýò}Œ¾ó<ãÇJ¸R­í·Š&R«X$\»Ü¿\§¬I)BM]̼ü–2‡Ûû~­(±å®åתÏÕYp¬„pS˜ÂÄU.ö7ѼÿNbCà ̖ˆÆ%¦-p­"Z(A÷:s¦lÑB÷¸“—¸tµîŠÏ¢zIE²?ÜϳM<òù-LùsŽ•¶ðØ–bJ€ç†ùó¿=ÎÎg~‰V1ÇtN§hÚ_¯Z"5›ÇBA­h.JpÑã;zŽ'Ö7F—ÎISrð³¬kÉîv—q;ÀÁn‰S1»Ì›V®-,ª&”•¸¨ç ÀJðîñËLd,E"5/zÉ ©£ ?®¯“˜ç*Ç_{íÐhþ AÕÁq@÷ ë.fv”ÁjSþ©K ̶o2ÓßÇhÌC2æ_•ªÊãâÁ±*0– 3V½~’Ùüä¹+tn½‹Û['8öâ÷y×§3›w‘BÇçOÐÿãï3~¾—½wí$÷³çøúkBós艧i²G^Ò·áh’vå-~ðÏiŠù9\º*³u@Úœ}îëL­¿ŸƒÝ ˜Ã¼öƒ^¶MZnc¡ iåÊůÍüÞÍpôŠEÆd©”¡)Ü}„æXe|òÊR"M‡W^J3­¨­‹ï)Á„‡ûïñ£ P*ÿÝã^a§f¦Hš6‡ùµ…–f±€›ªÙˆkhBB¡PÍ™¶ªœ½Ÿ$F)%„¶°k»‚×updŸ²ìZ´ )Î÷õcU'ðjž ÝÄž›–@¹Z®V#êC´ß/WþX;îkB“¶]\6§F/Ñ?™¡X©ñ¬yƒ$Ú»Xïó¢Uß Q¼azv Çů­(òÞÚy-D"úúú®ÙÏ"‘È¢- ‘ææ·&h^2R¨$[çÖ|‰ú㩘ŒškǾhí÷pSë’6T-%ZS vÖ Ù'ÙÚFKe@•fš™+GðoçÞ6Þ›[»Œ#Gެ¸_UÕ¼¼w”Fßâ¹ïg`º6¯‡ÛÙþÐçøÌm±›š4Üð½Æ2KÊ¡H`;¸…€–€–ÐÂsqh#˜ÖüÌe6_ö™7Òpë¯Üäã¾¾¥-h ƒ³úHÛkC»ï­¬Õj‘MÉ€M=Z@¡3°t;4]«É6¾žPã•áÁë-ç¡42è=ÄÖ»–l¿q÷_ŠÕrµÚ¬ìÖV¡ke“eèÍ=ljn´G.:GÁ.‚®Ó˜÷ënš¨8>W),nä€÷AB 6ñ©{›ä0 #Lë®'ø•]﯎U,#‹Ýˆf®ÞÞÇùÊï=¾pã ˜_ Ë[-n¶`¹B‚ Úº8‘·­òa®òAAJ‰t,ÜJÓgËc«÷޲Ï­ù#>šÜ5HWzÖÅy·>øº[+M(–°©lf9aÑàøÅ_‘¢(ø>lÞ~ÛÏ» ¬quý¨.wÜÞÑÇSî÷ï¼9ÆÀD¾á…’ƒe»H·lŽÑT+%^C¡£ÉËç7ÑÑìÿH ŒžžžŸw~n²¼$ÂåË—ñx<+úúVry­>>kQçQÏ»üéfÉ$o¹è>M ]›tÞ¡`x½´JAÍ  ÝÐÎ)¥{ºœ ùÞwúQwà IDATŒkNbº°- _E¯J)¥s€’ÁãÞà—¬\œÍu$Šúᮟ¿†›‹êìqjjª.¹FgJì٘䩻»°m“ŸãS»ñè º&˜ËÛ¤ryþä›}üî3›ÙÐ\ëk1TÃe[[[ ‡ÃË~¿NÃ<‹Jtß2×^…u? ® n‘Á¡q®fm|±f¶µù¹Ž^H¡û}´t¶±5ª—Ï­tìÝ9Eõß{½v%„Vàù'FÍ;qS“tm;H(\ÿ2Iìñ?fpêQ6ÞödU5¯>6^©ÛW¿½¾}uÛ%`]$=¡éØÈ¼çèûÍ>XÌåL,WR²\J¦ÃøLMèZ¹t·eC¶àpq´ÄØLRµdÉâò%XëƒFˆÆ[)alLË­,£)ª§²FÝ`aÍ2øöwøÇË­ÚÙEˆS¹>†.¬¸È¼µz9Ûw}ý®5Ü:hXx’ÚÊGÀuäY\Ï—ë–Š…xØËl®DIúIÄ[Ø—LOrv0Eû®fnmqHÇžÁ~|˜èzcYÃÒš¥0þ ©ñYÌì¦ÈâMnƸðÏä‡K¸'2‡Œï&Ô¶-«Ð?3MÀv‘ЬÄʃ¼¡†¿›@|êÚ ¶†ë„”åš׋”.Â…œ]-ã^-i.ñ+å•ôêe…tmÌ| ÔN¼M‘ шsf7Ÿžw§rHo‚ w=ÂÞÌwùÁÐzžxú¡¹c|繺>Læõïqe"ƒé@ÛmqÿžnâË”7YÃÏ–#1%Béü,Âð©Šá_ e6òL¬3“ÆñEØÜàô© Å ®®!T¡(«X7âVÄ™}éÛ„(õaDîh¨~—Ÿ¥\ÑU 3}žé¾#t=ü§¤NþF¤ÀYOs÷·¸r Zõ¢%¬é³Xmí¿„Ï{7Z ìôn¶B>…P¼àäq¤‹*Ö^²5\'d¹|¸®U_õ²FàÊò"HNe1$×)/˜Tï©F„䦻úú_ð7§:X·~ ?ýíþ½ûÑ*mN¿ü,ÿøãÜý›ëȼôÇ&°íô¸’ÝÁþâþú¬ÃS‡ï¡SàO¾ý&=­ âëV®Iµ†ŸLGb-ùÊÏRaa${ýF²wÁ’ª^]Á«¯ÞJé‰&e9w%‡Þ%âUȧSôÏš jtwEßWý– BG36mÙ‰µy#š¾tµ7atáÌ>GßK¯ †?A[w3‘® \=ñW(Z'áIâ‰ÝA),ñZÐ| íá3õî_"•m»zÆ^‚Oÿ…6´`𢠄ï=ËÀ‘ÿBÇ®/ã÷7Z÷z kh W‚í¸/¿ÿ•t´ú—6r ·Vih`†•ÿÄ‚-×ãÐFÞî@ýõÀÛÄÎØâÈŸ[åÒ ÞÞßà ÀƒÔÚ¾À$P[Ÿm-²ö7‰]$*Kw tìz€@( ´ìù×´ÔGCù?Éæ–§êî!€=tÞQ­Í´æV\ÃõÃu%MaÌ÷I'—ìïð>‚cÛHwQB–'5zŽËÓ^Õf&5G,ÑŠMIúÐ5Ivf–œFƒöÞõ$¾ûu.ô>É„ ïøKÌLµÐÔâ'+ý´¹Ž÷ÿãIy™…åÐ@XȺϪ3ŠUŽñB@—Û«£¸r›E•œå“°I]ú6“Ó)Ú÷´¡)Ë8ù–½Õ‡B[í!qe¹kyÔr•Û…3H‚ZYCdqV¯K)3Æ?þå÷™+Iôp_ýW¿D‹ã%sáxöÛ)„e{oŠ"héÜÄûœ޻Îd„€îç³{_áÙ~Ÿ݇¾LGgáµþ|K¢`IŠÖa‘c93à­üÔ )¢6À]rÑï+wë ÆE·êéâÒí²vµ£4¢›þÑM¢N+y/ÏÞ(åúãÝ—®±¼Ò5æïY{V±¸”9 ¾êÅ5ò×°Ýr>ô¢¶ûÚ9%óÏAM°ß¸€¥\—ëºVöU£@®Q!´¾•ÃÜ£ÚîºëÞ gñŠš '¾Û-- U‚|ÖG@sðè ‚µ -Ûçßý§úª¨ÁN>ó¯v.¸š7ñÀïü)÷‹ò"QàaïS¿Áž§·†[R.^ñ('…5vpƒÐ½~0ó¨Ïu¬¡ 6#Cã\ž)oocCÜ‹!._aÚTˆ$[Ø’¸Åc¡ê캅BšIËOWX£š¤ïäYzï¹pƒE»% KsŒôŸBi¿‹¶^T›‡^»YÛ,‘— Ž&ªƒåõ½„®™eäâI¾sd€¦ÞÝ<|÷âä3³äŒÍ@Úd¦ùÇÁô6³ëîCl5–,a$]‹ã/¼wëN¶·7(ñ씘»À?üìÞæ Üsç6μ=ÀÞÛ6Ð÷páå癈¶9ÉK {"toÝÇã»[QÝk1S£—yý]‹Ço]6œó½BJYÇGE{tmú¾Äph3wmíD»fòšÄÉðÒ›ï2öóËŸ:ˆO)svúµç96njÝÌ'ïêâÒéÓ\ñlä‘-QT!‘òý !`kWÑ™4_ûñdÝ¢L.eéìV’š¡h–س©™PÀ¨œ»RˆëòR,'>€rÛk¸X<ׯÃMYŽÉ-¦™55Ö÷„Í’õ+øÜ<–?Ìú¤¿ïæ­u£QÌ¥¹xñ4ïØÝÞØŒ§T"=9ÁèøY‡`$BXs˜›K“-9ø#1‚®E)—B±çÕzÛ,J¥)8‚@8BÄ€9K”œl“9[Ð$…ôK!ö¦ .ŸŽâ˜¤†!óŒ õ3b‡éiIÐ á­“C×ZG¸ŠÙ©Þ<3Ç÷dæê ÏŸžæë¡ïô9f[6s[{½0É;oŸeï÷õjx ³3i¼¡ ~M2‘±‰t»€Žô-uþäRSœ>~‘;Þƒ9}•7ô›d<ÝJWXrzÌ¡5ìbY÷z5=Â;çÏ’Ùƒ\ºŽ…Ét‰HÐ@qŠ”„b©ÀäŒYׯ%…ô,©‚…ƒJS"Ž,åÈHÉ€J±%íúˆ*9f³%lTš1° Ì4’1ƒ|6KÑð£f9Wã#FÔ§bg§y#bOw9HÃ5sLÏå):’p4NÐ8¥“sTÃO,Äð&Xמdtä*ŽéXäfÇy«ß¢¥·‹õ=ITÅ  rå7™î~˜f¿zCÙ§ï鸖ßrÖ&þ_˜×:K£HÙëì@BQQ„U¶•ª ¸6…lš § C[¤êÞÒp™ºÀñSç8ïL¢;·qG‹•Oñò«¯`ã£{ï½NLòæÛç¸<] ¾élð.1«äRc¼ñê1úÓ%Ú·ßÉáõ^~ÜïðÀÖ¼Ù«¼:ãc›/Í™c§)*ôlÝËÁõ~þùlžGvµâË ñ®• [›àí“ï0Xô1ÒÕË]wí¥Ë³P³a2•+Q ‚ÑQcá1™LŠQ¥‡Oöt3fÏpúx?—¬GN_ =<‡änÖÉYú¦üòºNü H·ÄwŸ}“‡°5îò#S<²¯Pq€Ÿ¾z‚Ûc­tÇ,F6—a`ÆÇ3=]<%úÏ÷±¡Çæò\+)˜ v°-è'#B)›êTìäGÌóqhKŒ¿|–;:dúÉ%÷©ÊãªLºŒ^x‡×/O²T?òbì,¯Ïvñ¥{š¸tö'õíì-œäèà,áåÐ÷cÌ^àg}Q¾òD—Þ9Î¥ŽÛÙ8~–#§ûÊ|ˆ»¹»ÓGaú*‰ž:’ôÐI~rb””¥²ïЃlIÆÏãùsS¨áVößu{B!?>µÜD«˜eèü.OPôxðDºØÚ!H´´°y¦ŸÑTŽ˜?Œ~M3îµ± ·ÛÒsÖ$ÆÇ–+±–dp¯: €…¡³š‚oU¡³å EC±‹ OYH=„ärEJš$37G_ öný$å¡Ð¶u·çòà»OoP˜¢ßáSO>Miä ?p7ëGû¸÷Þmlj©„C"‰Nú2yÖ9a"7ÀœÊZäŠ6Ù‚ãVÍtu¹BÔJ”·Å½hªr‹.´†›yýUg—DʪB,Y)o%”æf1½A¶'\¼0E>Âðzð½xM‹‰‰®dábô·„¨½VìÆ®¬9UEGSU,EC‘R¬Û²ƒÛÖ'qxÀb2%+öárôÉÈ`?}J7nõðÆ% ¡zÙÓ’§od‚H¶ÄÖ ¹Š6"DyÀw¥Àµ\×Á±K8•¨–òþr[XðYF~nœwޢ䂈²nG”˜±päÑu/FaËí X(àã¨B ê¢g ÃKÐFÄ÷³©£Äëc%Úqq¤Äqlw¡CLVü0B€U*ΙDctM'Hš’ãR,Ɉ0ÞPMêG¯¸mK;~}EÕiM¶à÷9‘¢\À‡lÛ,÷«üYå¸|okæxþ\žM[6°Îœ`P€?¦»C§ÿ\vd-žyÞÊÕY«Nh«VLOÔñQ9EQqk~ A°{/÷z'îçÁ®†?ÚÁý÷À«*(ž(¢ê8¬õ‡j17­#/q¥ƒªˆ$ýÊé)& œNS(ÚØŽ‹ë–¿_M-?»×PË%Êê¡«9€öáQý×p±Œœ¨m^Þy°´àǪo*¤Ä4-$UÓðüLf , Ûð¢®mzkA i æô8 ¥ò¢ƒ"TºzbLd-LWа‘ÒarrÕôáõ†°, ȧӘv„BÏÖVÞzi‚)µ…Û½:ḟB?ƒŠIJÙõ0xz€±QÐÓcXÉv šª3;9ä_£%b‘ŠXë&kÙ8ÿ f‰ÁPŒ6÷$—£ŒeIlÜŠ¦èèŠËÌØ3füÁ¢ïri"‡í ]#0™šž`¨hS°TpŠ™ éR 3a:!ò0=ÒÇßå™Ï"º¨‰á\‘uNM…|¶ˆ0´4Ç9•7鉆X³)Ú.†"Pu»!•Î5KL¦rèÑåšË ¿®U$—ž!ëÁ¸Ò¢\¢¼ÈîIž¼» Ç6ùé±1ž¾gi‰òþ‰<òçùÝOoaC{ðýß| :,·\p²‰k‹®Y,@ca¡²(°¿:0®F¬•M>“’-Ù²¥¿®¢àƒ| —ɤñ!Š´VéÙ²—OÎåðÇ’ìyà>|ºB°}=OE ÝFx.Mºh£ù ¿Ž-‡Ð3ve†(ذc?ñ¹wóØˆ Z|3ëc³Œ¯Û†GQéÞ¸‡_H¦ÉÙ‚»„‰ú5÷l$gKDólñ©¾ävks( ”Õj‹%{xôÉã#ç˜Èjìì  •m·í§%SBþh+z„±Ù2´ÛÃD”83ÙŽPøâ¡1¿†,éì{è>ÐôÚào]Ï'èį ´h û?ÂøÔGgJ´îI¢)‚î­÷ðëí%š:ª¯‰­w&e „oõî"ꑬKÏóñ ü÷?H$` 8) ¡·mà“5ãVT_Å󋇷’³@´¶°>äǯi‘&ò;鈆QuO=¼Ù\ ›8Æ¢hDi‹Ï‘sTî9Ô‚ÔB_À‡P}4µmâGß?EÂ;ÚÂÕ_´…Gb1ü*´?cr®PöyXiîäþO´Õ r*Z€§ÜJ(TR—LŽ ñÆ‹Ç!\™¼ÿéT*ka;óZ%ÊGJŒÎ)šk%Ê?®Xœ`N\¶­‰K64~ù,|új}Õ J¯×‹wƒN!ðòaÑ'Ê(?á ÒâŸmUW!Ãã/‡˜‘X‚Hý©z3= ÖôÐê R«Íc›ŒŒ\!«'ØÛîEªî!šh&ZwV$Þ´ðºšAk²ùý=š¢â DéÞ°›‚y‰á¡;vÄñ´×û¨=A:[ëgšZWl0bt.Z[Ñð…h÷Õn†î Òѱ·àpvd»{†7@«·r3Õ ”h]²Dãb>’ÑŠ§KV|^A:;΄=±¦šÏHJI1;Ëðè$›Ö·¯„†êþ0ÉÏá!šH.¸°„Õ桽Iò²¼V±7£u‘ƒÊã Óé«Û¨‡i^RåBЯ»°´q„ŸíwßAÈ£Tyß(Y¶,—(—š¢+•(·™Ï$)c­DùÇ #)ë6.-$8ÿ)ê·]‡j™ßý}ëã†;ú$ \Ìü,/ sÏtW‡Ê©X[åj€-;v³jZÐMi†„F÷Æmtm¸ItËÝT21ØÇ+}iÿÄBÆê4¯†W“ÎÛç7Þˆ<)‘B§½g=íu›o5Ž ¶-ùVµD¹ü—ïöáTJ”;rQ‰òúñâ&–(¯báUÝ'—¿æp¿ùÈ™ ‹}˜Õ_–j+|)õÎÀå±BVÇü•}~x±ª Ýúld|‘V>ÿ™§æ¥rÕ«Vp9‰êýÞ;‡Õ¥7… ZÁj¾Í‹n8ŸY¼rƒ®™Ñ.æÄû}ÿWê‹óYÝ Ý;îä×¶³à{x/¸iÖML\“R–?r*%ÊY¹Dù‚€…›\¢‰"ÝÇS“œ/íÜ€¶ËòåùìŽ%äÕœÜÇÏM¢wlbw«¿ìH¾žp¾$4.Qî:¸Ò±§pœ"¥’ıK νÙ%Ê5|Ñuޱÿ™óœŸ ñè/~‚ž_hiÞÎn/€Tóx/Ò,Z´-Ä¢©W¯]×dÌ-fH™:½Ý1NKÑŽ“lm!Þ ©™ú&A¹å£¡*Ä9%fç²äMO(JÔ§]d2•Å ‰ð$èéH2xéB9¬Ó±ÉÎNðV¿ÅÞØÒ•\ˆXkçæfÉm¡Òœˆ£J‹\&MÆtñ"D}*3#çxë‚z7ÉXË*1;3WYX½|Ñbf–¹‚UÎFŽÇpÍY×Gs@¥Ï’•>"JžÙ\ •D<Šâ˜¤3&±D«eÎ6ðË9Þ=}–™.GŒˆOÅÊNñF*Ì#["(Hr™éÇhf‰Ìä£“ä ƒ@8BXwHÏeÈš¾P” \šÑ.í<3sy ¶$ŽÔ\JÙ,žhÅ6Ée³x ™²ƒ;j”Ñ®¢–f¸rñ,¥Ðº’Qâ?š¿•„o½z†ÍÏÜŽOõÊØÇ Rb;.Ÿ¬+Q.‘dòs½ð Â;@Èää•·)8`'P)Ùr“K”œüÿí›c|±v!ôŸã3òï¾ùýÊUþ¿Êc»;—>×b¬•yßX\FNhWUwcõÚwyT|BbŒ·Ïfhji&èÕ²D*mÒÔÙò¡‰†Ê ¾ÎË#1v­oGRLO3xú(NçnŠ“83›äW>±iAÒU©j¨ŠRW€¯n¯ç{?;M÷–n:â~×ebð,/ èìµ9qú ›ïÜG¸˜¡dë+D¦Hl³œ‡1;5Âpi±âU^Wò¹'Ösöø ¦»w’>v’öM$Ôï¤lÖk)޾9ÊÓŸ½—Ñ+§øÙìF>»Ã&_´æ;•cjô"û¶ï¡-â)›ª\ká1Ò¡X˜#[´˜»zÓ™N_æŒÛÊÆ&Ͻ1À}ûZPe´K§óoåfùÖ¹4mP:Žóa<Ù^|}„í[½ñÀú§Þ•lÙÙÉ }y­e´ÇÙr°Šœ`}q<…¶¶Nöö¿ÈTv/]á[?ýóf¡¬E”K”÷g¿Oª8”’L&Í¥Ñs<|Ïa:#[É۳燑ž?ù¦–(—8–IqÁuBX™iJŠdGÍÎIRééñÁ IDATûÀ&>ùàF"ñXÙ7ùã¯_á3ï#(=rSøƒ?ýs¢ÉîÝs?ƒÆû_žÀ2‚ônëDµ"¤;‡øÚoóÈšf0Äéc¼öÃ3”0ÙýÐ#ôéyªñ£|åkßÅ (hm „E4ä²ÿ;ßÄÝû0»úÂ$ÒCÏЙ ’6EÛl²XÌhW46íÙÊþƒ‡ù÷o¾Jtà~>±!ˆ[ÉñÌ3_Å Fé^q/ö'9zò ž>cà«Q…ÀŒÄˆ\ü>c±Í<•6°½n.¿þ]þð Aïš­<Ò¥zø¾ýì L#ÀÐ}½=@8ÖÎùþ³t­ØÄã;VR$™Ù o_¶xb—~WÔ´Û!`}„ÑéöÜ$B̉ÿH× TxŒrõû¼5ý6UÛ⾕_$j¯ï{£ÕN¢üæ"̶iLÓZ¥ø`±l謼Qèì2­ø­>Å ³bÀ Ë•h†Qgp 6Ä ˜w<9‚]kÙÄñ!O1äàF~"܇/4‘Q±†½ñ~îßé¡¢$ƒ:Šª-fè hÛ_+¤ B±¸ÇN6¹EÕi ¨vï‹°¡ìb"„TP¬v=ø ÷Ø’tÈ@ ôñÉÏž¢/Ðt“h<ÈÚ‡b“-QTƒ`$HPU° ‹øÐjÚ¢A„кç^⃕º$w“M»£§,Ñ Õˆ  ÷òTo+! iÈd'扷kêŽ!„ºh›ˆ"ÜÄhÅuvíJ°±ì kÓpñÍOò ƒ.(f JÚÜÁ§z*¸(¨zˆd¤V/Rf€@Š ÚúÙ·/FÞ„£1B†ÆÞ‡¢à€¢ê„"a‚ªŠÕ±šÏ=Ú‰f…±nÑ©,æÆû ßBîøG\_¢\÷O5”‰ŸácŒé’»¤L^7t¶³¹@½é÷íÆ î°u÷½¸Z FG ©PÒÓÕHÉÒlÖ™mbè"ÐÌÝæÂ÷tº™…mM¤‰6æZ;<@[W€E{&ÒóÌg)%Õâ,ÃãS¬YÙG"¸ÀXîXt ÁXš`S»ŠÑÓxÙVŒÇ·¶1âzøÔt`š·1’KíñDŠxã}èíMŒv‹Ž:ËYJ‰ï9ä¦'¸¤ôpo[¬6JÑ–²ªcɶ%ŒvÅÐÝð¼J39È}íóáÙ×&ðúª!K¹N-GÑÂ2¸^è,}4U¯ŽÈ5”otwú²cmžÿz\€;óŪÛT¨„S½<ˆ37{o×[[ v¬fÍ\Ñm Q€Ð,l;‰ Q_Syo,k5ÜËšy·†‘çËšX`É©ðšªsÈTIE ­%Mþqǻў–8‹å¶_†kõn§Å®Ú”Ý4 è BzŠ6¾P°,󮈭Íïzö$¶×ÁFPÕ;ûâ­Pl±¾Ó{nÞ?¼†VÑ ¢Éôû>N«±[ŒlÉá¹#œ™(P®ÏIËz€ƒ"$©P€'7·±±/Œ¢ˆ–Ãø¸BÂXai講™ó Kµ¡–ó·Zyü*W†Ç¹Zp $ÚXßDw ¿0§è¤:;XŸ6ïèqÅBnÂÕgµÀÏLÒ·~7‘è*á|wö¢[ÓíC¦äpz,Ïç÷¬dN}Ú—à¸>ª"™*y|çDŽÃÊ|ñáö[Ê[ÓÂ$`»M¿ôɽô•™¹!Ç’ÐY Ù| ó“¡øÕ"%ÄÖ NœÍR©êxÕ +úÐ*ÎNWé%K#wd…‰Cÿ„«g~@ÙxÏ5´÷‰®û¨¯¬…n ¾_ËS Q¨Ójp}‰í 4’&ªˆpæJ–Él…ޏµ°ó»Ê”Ïáî줴Pà ÕfåGj¹5‹EÎBèŒÜ,¶Îà6ƒ™äÄùX‚ ¥£*§‡Ç@*´w$îx‰c 5¹ƒ¡}ŠaÚº±½鎾úÒZhá¦QÓ†ªñOTQ“=‘Eàù>–pÙЮ¹’KÇ\4ÁüÈÚ§03ÆT¦@Å•èm©(º›Å6ÒDßÐä'ør!#$Ì/Gø«\Ëñ,–†ÎÞb·Á¯V({ ɨÅl±JÅÖÑË‚¡ ¢Z!W¨â'õ;_òCºxî ®ÀF×ãúÇW:¢…»‰®ÖÂb})k„9)¨¢r1ãÐ$¦¦Ñ8Uk!<òcoó~ÿYîäA¶Ä=¾Ÿ±þUÄÇ^`¼÷¯±{mæuäÊoÑ@˜hJ>z”Ù”%€Rý49 a„b,ÉÒrËpËe|â=bRšÉR­HÛ& £j’±L_†ï‚ùQ‰;ù ×"ÊÇ1’Üñ#¢Zh„d!§º0§­×Å¥TÑU‰¿÷haßê,£§^dàÁGØ»{ =»¯ ÛÉsy¬Ö眹r”ן{‰QÔ`ëö<Évñ&ß|ñYOÅlÛΓ»Цóíýg°=‰éâg~ö³·¬ чÉõBgö¡ Ñ¾"Ø=cªâ–×,ŒxŠHv‚SsDÛ;ˆG-T ΟÇÓ,:»;ÐîxÕY@èhÆ*âÑ{z>jÛ*tÝx÷ýZháNß”5” 6 ¥{6þäpËT]±j-šŸ®ö«y²£çX³égI… „3œ@/Wê2,.g½Èw®ôñ/ÿÇ'9ôÌògò2ík_aTìág>·“d „Ìœáů=M÷¿IŸ6Áɿͅ‰Gˆ ÆnNÉ´…ÍCÃ¥<œæg¥Ð$$¨*í¦‡uRžb2¸¢ÁF.…åMKÔÏïXÔ8 Õ¿Mîõ(ó×Þ7·p—@Jp=‰çI¼y-‰_˜Å;ô5ú*g°b r#§3;qÿôHmÙRÑŒæŠT<‰µ ]Sÿë’Ÿ­Û¼€¤k ‡ÀÎÐùßý&Ÿ:{šÃÏÿ^7 ‚¸aúÓ¹ýëÿ¿îaÂ8eý‚Õ¬ú9Þ=gó‚ §ñxõs5ß÷ Óxí‹oê#å‘H)q=* Ñ Š¡€ X36zö*êÆ‡¦‰?MõÙ߯¯6ˆà “dÿýüܽçùÆóOóݬOÇú½üä`€@¬“h0ÀÊ{âÓמæ?ýÁ›¤Öï㿸 çðŸñ½ÍÕ¢OïCO±yÛbëÒü›õǼXò1“+ù­ß^K”Ö ýŽÂ-2¸ƒÀ"+nYŒÍåÚð8fª$»»X™4N‰#gÆ‘V˜í´ßéÚÑ󡃒r9Ǥ¤/ªQÎLræVÓˆÞt¼úÍ\–ĵ«”¤BÈÔÑÄ\£&æ¿Ñ¾ÕÜ/NÀý)’F-÷Õ‹Çxy8ÈÀŠ÷t'ˆ¨’ñÃûmÛÀ–®Ï¿pšµ[W3˜®ÍgK)ñ«9¾qt–zéŒh7Ô R‚ï2œsi ›óõÉ-ÍrùÌqÔô%,Ôeaãq\N:À‰±2m÷?Ìõœ Ó<óÜ~üH÷ïÙÁšÐ»ÕWÉä;o²ÿâ4^Ïüì–Äâg$AJ›ž‹¾mXÙeÙ7IJÊãïð££#L©+ù…ÇV¢á›¼Â›³¶¯H7”TØFA Ot¹T}wÞ¾Ö`}ýnÆþ㯢ù×ÈÍV ßûF¢AuVJP 6>þ%6<þ¥Å^¹’IùåÀ#¿L}?à‘_âwiÜX@|3¿÷¿ý_ E-ÍØ; sÿM\/tv¡—¸P¦pëݯ䘵5†"\-7}”R†Îžv„]æêÕ,©¡ø]±¸U)æ8wîÇÝ~]Õ†Y­’›œ`t|‚‚iŽÅˆjÙlŽBÕ#Kö—¦uí2™L޲'EcÄ È:‚H@Gqm²® ¤Iʹ,yG!].¨†!K\¾Ä57Ê@GŠt£ïVÉg³äl‰Š’ŠpK¦ UJÙiÆKQ×£ê™ÌU¹69ÍDN æ*¬HÚ(B2;‘ÅŽÛØˆ$cë"S¾]`:[¢TÌ22ëQu]Üj…©lÛ•hfˆÎ„I>›_°‡&)ÏŒòò¹"[ú;èNÆH® _äõ«>»Á¨åÈp«LLgðP±Âq¦O)Ÿ#Sõ †c$C:}«W39ƤSkÜíR–+ÃWÉnÖôöÒqSA¬o5ýù¢–13ؽ.ÉkoŒP²ÝùXzÅsÐÌO³CÏuzpº¬ü©ßÁLv-ì¼Ü¨k –‹µ_îv[®áNFÅõ›Bg%@ äò¡³ Ãüźñ· ¡¨(©…ì©52»êM†PKS“<烬>øÌ Ÿåð±Sœö&ѽíìèpqJ^~e?.ú·îåÑÔ$Þ<Å…é2ÉÕ÷óðJ«Ö;m8R13Æë¯¼Å¥\•î ðèÅó—<^×U¸Ê+3Örœ|ë×* ë¶²{(È·Þ.ñä|ÑýÚo=ΕJ€k}+عs+}M dµ˜áÔ[xk¬@¤ç>½w=ãGðÚ•UÏG®Û…]žåôÛ¯³ØÁ“.2ÕI©h3~õ"'2 VÅ †ËôðYž;P!Ü™¦=¢3yþ0Ï'ïzÌ6â9%Æ/œäûo36‘EïÛÆ¯<ãÀ¡{ì 0}ê$oŸÊR˜îfõºm<¼RáêÈ$Ö†}Dt!ò“ùÖ Çñô(ýë`wÛ,o8ʹ¬MÇОx` ‘hŒˆ¥1)kQ}³£—xãø)F ÓŒ°j¨û¦ž¬Š šˆÌò6ûÔƒ«‘^‘Ó'Žp‡u;es&ÏæG§¦P£Ü»s'[R!¢ášX˜{Ò¬;ºs¼|uŠ-)Œ°ž'#O=¼‘TRË·]ËL47 Øšúxâ:zŸ¨Îš°8ù‘"ÊMGCÕç Å­02å õ¦e¢%£œ8{_ <ïn© ]ë¶p_±íü̆åÉa.c|î3?IõÚI¾wì"G8Ê;Y`ÀàÃo³&U›m„¦›¤’ *Ú$“W'©lÚ„zñ  Ÿpñ"ë»î'æ4ÕÍŸäoöÛ|å8‡2«ðÒˆ$:V°w‡ÃˆèccOœ€²túIÑt"ñ8í®ÊôÄ5.f{90–âÑGvÑ-¦ùú5ÁÌô$G†#|ù {¸|ìU^Èèø™‹€¦¸EÙÙjvÛ ³¡=Ĺ³Sm‹ÎpŒuƒ²ÙW³*êγ1·,_Î÷¾TEGSUEC‘R ®ÝÈö¡v|O'r˜ÌÔ¬/ë™É®]¹Ä¥ŸGÖ™¼~^C¨[:Jœ¹6A¬PeÝJƒb}4"Ä™J໾ïá¹U¼rUÝ-×/VR.(J‹tDgjì ®…xüÞ6Ž«U!P¥iÒ@ D­L¨:ìe²J”ÕÝû3š¢!ê YOɺ2¶v$-"ÞÑÆá£'ˆG»ØÙe2vÜdpí†y{´¥Âˆjê)]k§VQ𙟩:ÑÔl\9ÅwfV3dé^³–OnL hxÎÔ￾V3÷ßBŸf±=1¿8/ç¦ck÷59vy›)(Š‚"jÛK¡Œ÷ðÐÞû±TÅŒ×ëHýš†äÒsB¹ FÏ-´UÏÇö½…Ä·Ë®´KóR´MÎB6ü}ïQKBQ@JlÛ©5.Ô#h¤‡íx„Ò‰»(ÆZ i öô8yÓ‡EiD…Jß@‚‰‚ƒíK@C.RzLNN Ú,+‚ã88@)—Ãv“ ÖuòÆKL©ÜgéD“AÊ—.qE±Éˆ0ëâ&WN\flôÜN{7MÕ™œa2¨Ñ‘Œ` —³ÇÞäMw5}ožçPñœRž’ë"4“.f¿†¯dpü.VN+Ë•±1FgJ`jÄì f;6Ó¸–‚’|&C¹Z"“Í‘¥ŒÙLNM0bûTÒŧ«£‡ÎDˆ‚¾8Wóö(ªŠ(d˜œÔÄõ81ã,—§«¬ëµ¾‡k—0ÂIR‘9Å5_’hЖôL\¦âúŠ@ÕUÊù,³Ù•ª`*oÓ1ÐIn| \Eäî©è-|Œáú5ÉFØ+öÄÅÊÜ÷E¯˜Ùwφþ_ÿ“WJTÔǰ+“&ñ +‰˜Ê|Øä… ˜žcå@¼és'ó©Tlª®D5 ‚ºÒ£PvP4 ©×Î…@ÕD“ƒhx¡”’üÌ%‚‘T=ð>Ž]›²+f³EĈ›»X$HâÛ%²EHÅuòÙ¹Š‹ˆ‘ ©x• yEÑ0¬(qÓ©Ã0ÑX,ˆæyýÅŒîâ'‡‚øN•|.GÑÃQâAÜì EW"”ZѰ©k31“EÑ-bñf½QÏÉÝ Ï)“™Ía+&¦ª`E#hå,³e)4´`ˆ¸¡àUòL—|t]EhAL;‹kE‰0Y’Ä­Zã9SvÑ ƒ`(BD©0“¯à Z½2ɱ7OÒ±i Îì(ï\rù©ÏnÃÎçì11Ÿ™™ªRÅ EIX*£ŽóÂ[|æ'#ªKìJž©\TP8JXó(æsä*F L2j‘Ëf)WBJ)+ÃÇ ÿ›/ïAú>,:»HÊÔæMOCÕÜË¥UÑÖ´íŽÚýV˜k!‡…i.M#º8õ) ·5¥5é „™s@¾ksíÚE zŠ­ÝPu“xª­)hzIQ4ƒÎöÆÄª‚H<1ŸZUÓ¤Û›rÁ†ãt6¥áÐà z•-³³~RËLiLJ˜6³¶“”’ÙŠG¡¢Ð¯«øŠ@芢§ˆ-zÄ*ÉÔâ4²éžAÄÀv]|CÇÄè,Þ'šH/ZÿI&–(è£ßZݤ3Ëñw.1–Ÿã)Xá$;6­$kä@h˜M6 ¥Ý8f Jo áŠŒ_¥ô¨¸6Ûwlf°=Ì]Íëü¨$Êßå¼-'øÁc)yhЦ}W¹í–ä>àn#ݽ>ðŠ)ác—fyñàez·ì ßTnϹ>D¢qÖô)ìíz(ÅúíÛ1ñ®½i)%º¥oe£+ø`‰D 6mN°©ñ‡†õ²zD+„J ÒΦ†ŽÂÝ÷Tià}Tå’ül-&`¨dG.aG:h‹ÝœÐ颇§ã]1š·—ã8p}žÅ<ûuièôM¿T?N îë‘ÄÞ/ƒ[!ëäçö³ ×ÍØwÙ×GËàÖ Öîx‚µ;æ~Ÿ¿¬¦ó^漢6¿î†·Îà¾q4ЭcaqüFÌz—úq3u¨ù\ Ço°×mjkWðaH”×Ï×téø‹ÿã_ÓÿÔ/òøænýá?çâÞ_ã—Ý\“X§n—¦õ†ÖƒEÄ¢º#êúEwa¿ì¶Â_ƈ²A šœ…–è2š_Û[“¯¿Ln™á±,³Ÿ@,NÂDqÊœ¹–A*ñt’¾ÈNÉk`pç²\s¬Mé(ƒ[,níÞ}È/Aâc— ä|ƒDÈüÀÜû‡ƒô &ÙÜ$ªIÆíg¼s›»"¼qø «ûèŠY×ep/±DSã.½*§§ú!BFM(»œçô©ótl¼Ž°ò® nŸ+gOòö•›öÔÜÒ£”›äùƒ§Æ;ذq-=1¸o½akØ<›MöhüÝÎMqþø1:ï{„¤©,}RRÊLpêÈ;¬|ðúuß¡03Ì·~x–{`sWð»|š#W}öíXOPS–÷&>,‰réÌðæžãÕS“!éÙ´—}›b;u˜Sß “ÞDÀ©rñÐù“ ¯0š ñèÏ|†{{L^úî7¸0žÇö kû'Ù–Ìrä?ÿ 3ƒ÷ÑÞÖÅÊ^‡¾pEèÚÀÏ|æŒVž¥Xæ¥hN±½Ðb …øÞ/õ6»üΈ~ËuÑÉN‘•Ö9~z†¬ƨdIv´£W²œÉѽ>yW0¸«¥çϾÍ!o ½ cŽÁ=1IÑ0EcDu\6OÁöDâ„åò îl6OÙ«-„.ËàV%å|m;¹ƒ»ÈÈåó û Vu¥i‹G0—0¸m ¹,y[b#5w1ÃLɦ”b¬XcpWì"Ó…*£SÓŒçd¶ÊÊdE‘ÌLäpRv¥H$±ÀàöªfreÊ¥Ì"÷t®„íJT#Dgܤ[°GD—”¦¯ñò©;WvÑ—Š‘® _àõÑ¿tŸŽ‚ÄsªLÎæðP1C1¦O1Ÿ#oûB1!ƒþÕkÈL¼Æ…9w9ÇðÈÔT/k:i¿¡£`¾ê;%f²EÊŽ$šHÒ$•bžlÅÅ F‰‡4f²y<×Cª*(&Éöb{àÙd²yòU3’ `Û³34’a¥[b&[¢ìJBѶÉMN0>1IÉ´ˆÄ¢„TwQŠZ:áDIÿ®ãÖ¤ˆÇi?ÿ*W³C ¥·5ªðÃ’(wÆ_âÅ·&Øò¥_aGþ›üÁ×÷Ó¶ñ‹¬h_ÁГŸá'îíç…7þ?„5ȧ¿ø ^ÿg¿É¡ÓYgh|ý¤ÇgÝC¯:ÁïÿÕ"Ä¿t™û¾üØ”ÈpêÅÿDï–ÏsßÚN¢–AMiæ£`¹31]ò–+Î7~YÜ^ ±äM»µõŠÅ€,É— ‚•*¡¸†.M"NW&ï’t»TÅ›£*Jj9K¡â½z–ù^>•¼ÀI¿“Ui“g_¿Ì¾m¨MÃc_úT]'s†—Ϥسµƒoœæñm]ŠW8ëwÍçàx˜‡‡ª{G²öž^^8Sâ îm ®WÁ¹AïØ—×öðªS¼yâ«vnâäw_'¾z4³Tœ0Ù©tkõj޾B(Ï…I¨n²s×Zú‚ öˆu…yó²;¹geª?7šjžRqq=§8Ë×OåØÓ#©” «.³ÃG9e¯à‰ÈÙE6{dφ’ÍqÁf4ÍŠµùþÕ‘nÒ·‘þáH”Kì±SØ¡Õlé i»ŸóÎL¹uBy}:Q Ñ¿aˆ´e2Ôcq¥R¢«¢·¥…‚+øïe#VéWciÒñ F8Àš™Ìƒ|óOþ+—óü½¿ÿKÄZC‹E@Ñ^²Â-ñÆ‚wíÜ¿—®K¯ä9?R¡ê T!š†4ïqà#€   ´EMJU#£¿»“ŠœæØH–KÙk\6v.¾Ž\F’«˜™äìÅI„Ÿ'“³ðÌ …£LL©Dó£t­ 3R&8xý}6c—q¡àá70¸%µÈŸX4LBÄIÇÃó£ŠÆéŽJa–s—.SQlfrr•*×Dšõ=t “CWåJ‰ñjœ½ÝÝ0y‰ó ¥#g—i‹ ƧS¬ÖLÌ€…¥*µçç»\ʘ¬º§“þ„KøÂ OÔr%˜Á0í‰ #oŽr…{ ª­0VH'ˆªÈr¢g0ª÷ƒP$ÉÔå1„줿;Â̵«\7‰ AÉ `»K'¨M+H2fÖ“Š…êºyªiñµôl.äC¬ßÔMWœ/ä(%èïn§xm„ÃceÔ`”X\%Óˆ¸| F 2oé{\.“ÜÜÉŠ®„€ÊL󓗧Ǹ0ZÀ¶ËLÌÆ¨vXèVˆî®ªþ$G]åÂä5®( 6ó¯÷Ž Ã0[vê$ªÛç,>‰rÙ»ƒ´’¾v§vùX IDATŒÕ•CÌhm<ØiòNL29r™ mz*Dß$@è„“mXã/13ÕAº#HA1¥˜ßNº•|†pª‡¾®iÆFF¨.ÛnaÙI𦪵x[°$.ÑPoÅ ×Vœ„ ¯ÇÂwmASCqU\Ïϧ"Œ;?=iƒ[z ¯¯ªh¨Š‚¢¨(ÒÕbpÍFö­íFú Ø³\ž”P׈H®]¾ÈiÖó‹ktfú Xlé¨pðÚ$ñœÍæùzÏxAúZ ]ßsqÝÊ¢ô˜þ"—$)òuƲÁÔøÞ¸äo|¢7sn~M£¹C.„2ÿ]¨:VqœœcSÇóS4U¼úd=Úgnm¤¶Ÿîhã»o¥³-;; Î)&ƒ«ì¡i n¾¾¿p~¡¡âc/bpòÐz…׎¾Ãw&vBt¯ÙÈ“[“ ŠZã“˺ÏX¸¯æè«ÅöXsͬœoµÄÂw@H¢)53E«×…†u˜ùÿŽ3÷vÕ¥K|)@zœ;x„üÐNö®6963€ú(¨a‘[±\Û`3UAJ»v&YKZäK¤ôÑTu~¡÷¶áÃ(ôŽ}<´}’§Ÿù#^Q»yü ?϶DÔãkyú…òç—¯²»c° %´Бˆj_ÉS[÷óÍï=ÍÊ‚þ¿Äg×I÷b¨é–˜ºð Oÿ×3H#ÎʽŸ!Þ°‰'äÍWöóöÙ+d‡«¬yüAÖ¤ôeÜ öøo?µmŽþ5£Z<±-ÌÞø>/½¤°mßc¬ëìcÃÕCüÇÿl“èYÇc[B<Ì©±ÏëS!åüGÞ9=oÉÍ÷qïÞõüðü›×mz¶ícOÚ§šä+þ£iVoÛÖ$GO¾ÁÓg c5НZä¹ç¿‡Ou»`{0½ÈfOlˆR¾x˜·F† ¼~É™­<±µá˜ž¼ÄÆö­Äo£Ìÿ‡&Q.4Ö>ôÿxßS‹Î¿âñ_å÷gÉ>CŸÿ]VÔå–ÏþM¶|vñ¥­Ý¸¥Þ©I±rßßâ_ì[¸±pÒ0Vp–”ɦÐÙ« EôýúWþ¡Õ·éŠúÚ…þή6þÎîŽù^ÌÜõSàS.ÛØ>„‚&š }ò¥ R¨X£>œ¼ÜNµÈôlqâ¦À)-epç²9re-#Òð+³Lä\P4Ì@”„å2“) cŽÁíΰÿ¥ã”ÖìäÉ>k^Z<ïÂÑñ€Fnvš‚Šº˜Á=>AèñDKHò™Yr2XgpWÈÎf©K«1¸õJ–™bÁª3¸«¦ò.º©¡hA¬:ƒ;ÚÀà¶‹9fË.ša Eˆj¦³e© !´ÊG¾C÷æ{¨Î\ãíË’Ÿý‰­Trùy{¤#VÁ==C¥ÎàNT&GNsàä>²‹˜!p*y&²„jŠÄˆh.Å|ŽLÙÅ DHÅ,²™ •ªƒ§è$qBÆõÜ5{tÅÙLaQÊHU3I†5²Ù%GM¦k’jý^­P”DHg¦èP=*¶@õ]Œ€†W..²GÜòÉdrä+.f4AÜ€jn–™ªDÑt‚‘ Qd*_ÁEAÕCÄ,]ÈSP "±(AÕ%›Y\‡¼ržé|¡›X0©ˆAvì"‡Ž]bÓƒ{i êõ‘¦h1¸[¸.ÞÁíKÉÿða¾ùN¶q¿|åø—Fþí—ŸFÖÞ›6¼— §X,âà …HhnuòCÀ’Þæ{=ˆD7Ctv.䄲¬¥ îx"E¼‘ð«·71¸¡«³ÁíÙŒŽ\¦ §¸·Ë¬1¸5“xª½‰Áݶ,ƒ»«£}ÑuFâÉ·Eª½Iæ"§3´¸H×âô.*[ŽÁnRÐ ÓÞ¶Ààž){ä«*–©ãi*ª¡"„N,ÞdT’é&w÷ öZ*އo½Æ»5j î†ã¤’©fk\‡Á$"%²:ÎñcosqfN–_%”èàÓ{·‘JH7¼4Z,E¨áômõQu¸‘,QN$Ó4Þª™îlÚ&JG`qI `5=W}™:”$¸h7ÇWIݳ“ô<®åZxÿX6œüº¡³5ôÒTûb–ú>ªãHx··’£]¨Êû׆¾= îÚ ¹êgç}QÚÝKJ¶÷òäQ²UI°{ˆO¯‰`*ï~?RJ„jkhh4?h7«“½u²·ñ‡†)л§÷-‘R¡­{`Á¥¿ !ïFœ›FÜ=6háv!WYºòïf®U=F³³hV]#Öœ†í¦Pö”Ó²°4¤Z®à*:!óö3,TÕ|÷>B(šAg{z¡à.}_…ªŠ¥-ùá]öû¨šÁýÑâ½9RÇ•LdªKE£AxH›ŸÂj9Œ/¤„L³³¾Ì¼ü§#CŽe3å-Â-U¢z”¹Sâò•I®<¬n b —‹.“ uqß`ì¶FCÝÑÿÇH§æŽ¶s Ld«|å#躂?é¬î ³kM‚ö¸ÞrcÜpôÙÌejü"š²äÁ­Ê}ÔP™žÂ‰¤Ø»2À©·ÇȆ5Ì B{ÂÄ–by§ÔB -|àð<‰¡+lZ—f¶hã¸>ÓÙo^ÎpðÂ,ëñ~zÓ”–ÃøØB²x 0Çfjn§›Cg{º®§~#¨–ÈÛÌùJ…ªª2”ê»ïßB -|0Ô¢]2E›Uíª®¤;nำ%‡o¼9Å#â¬ï‹ (M£%Qþ±@Ùñ);KˆÄ¥úgËI”/‚ö拌x'+6ÇͬûZ¸…>|HYa¸>œ+chPµ]&³EªŽä¹cS$ÂÝ)«aŸ9…]Ÿâ $Ê#VM×ë½Î4R`_´ÏØ¥aÌtšâõ-a‹[ÌðÜÂM ¦±¤ØcŽ‘[G“³x?Òä°ðè%¾/q=©/h/IJ¶žw -|8˜ãËÚSƒMýIªžÄvStÇWf^8ç‰ m±†™YeöÒ[ü«¯ž`û[YÝbæâ •.´ËÏ3Þû×x`(Fuj”ɼJÐÞÕNÀÏ3>:I®â¡X)z:£T¸2<Šã Œp’þ®ª² Õ536ÊT®ŒT´uu7¾úþkú¿øE¶FøaiŸ»É÷àØÂÜœ«Ÿwzûa´-šsRÄ{[³@:ŒŽN2^’¬]ÝM¤.Ü%4ƒ l%%n¡… Ëô¢^.˜-ØôFÂèäJÎ"g!+5‰òþ=ŸgÄ5`ízdeŒw.×f¶g¯á¹§¿Ê±i³mýÌ/°G¼ÈÓñ*ÃI`à ~é§7˜<ÈýÅ lA¸{¿õë_¢}.s¦—åÐó_ç¹£—(»výô—ùž¤ôY:£Þ ǓØÞ’i¨ë,#`*†µ(Ÿ…¥)ÞË<”0êc¨©Xu.)k¡…n/||¼y=-](Ì}æŸ03v–r¨{~íBóSP¾S¦4;FWoK]X—XPN©râ•W8Ö÷Ëüóß[Ëé—þ’?øwÎÚŸ.2] ²~ç.>ñ茩Ãüåïÿ[ò÷6+ä.¼Â™ÑÏ_™Â …E" b^C”ÎðÒw_fÏŽ¿öQ˜êc Û“8K³½ëšÅ¢q„xO,èÖ$S -Ü)€ô}²Y'YÏ‹!27†³ÿ+¬MùC¦®Ryé±c¿Š‘è@1#ĺVñêÅîHÑÑ©æf¨zvƒ bü¨(s2¢Ä7ÿ¿áêµaþýï?;=íhá6>ûÔ/²"n }Žî(z]ÑyŽg«ìþ¹_"uåk”Ì Ÿ£/ý)ÕÝ?1ï,„Y“(¿ü/¿Ç˺ÃÖÁ8“§ V¬#…@(zM¢ü»/ñöÛ.§ÏŒÝò0Þl%˜ È@}þ9°VsÏæ.F3ºÂ„kƒ\xû}»„‹I4hPš˜¢\©é™Ö$ê>Ýžn€%¡³r¡¼Î"XÿÌCWú--ZÌÅadxœ 36=ƒ=ôEtd9Ï‘‹“H3Ì`V«´ÐÂíF{ÜäWbÂ9Ç÷L‰ìX•DÕ-Aæ4Nu‚b)‡WÉ1÷×z—*ÑÎMüÓ¿ÛÆÔl-ªwûc´¥#èƒ]ô)‚+¿Àÿ´~Œé‚ÃýŸý2ŸîhÃ(ŒQž-Rõâüê?øu:S!´]÷2<2†ã°¢Xó*kոŧ&ÈV|ŒOü6¿!tC|áw£ 5Èg|‹èÝZó.DeùÐÙrý3Fó«õÏ< U`¼‡tvNnš¬´X7ex"G܈ÕuV t‘Ïe¹4V¢c0Ôê/´ÐÂmÄ\$£ªÀ—ïçôHo¾>ÎèdÇ ’딳'¾åŽ))D÷þF²snçZîx¡Nu^¢ß¬ …¤z†Xôs²›æÌ8z”«š%ç.Ô$ÝÕGº©¸sÅÀü¿Ûháva.Œ  ný3yg!šþ.ýrópJU0C¤¢&/ÏRv#¤‚AR¦„j‘k•¥™äZh¡…ۇΤ‰”’ΘÁ_½x×ó°ÕO£èc$e/ù¶vîýÌoa&»vú1’¦iáXžg±¤DkøE”%« ï¡¶ÒiÌáÞxg†jÙ!ì×Îàf/Àê¾p«¶ÐÂmÀrZ?sÚO])‹ßyjUCžð{<Ö°2¿} ?~R.[?\_â- (ðëŸyÜpÍ" )X·:[‡Ðƒôõh¤ª6§.ç±4çÚœ·‰$ã¤nc†¯Zha)–*ð¶ÞÁj¨z’ª·80Éž¸X²'.\7tvIØA-¥ä{9½Ä÷}<×A‡ j‚Bf†‚fW$…’M$h´ªk -´ÐÂGŒåF¾]BÚåëåànŒœþÂ[…@7ƒlI˜hH\¢ ™?.¹Zh¡…î.\OŽü:Yò®¿fèMßᯚ «1­ª@·‚$­å¨-´ÐB -|TÍ;Ë9Œñæ‚Fç`Áâ´Ù–®ÐoUîãFΠå(Zhá®ÀœL¸”øõÙ†9ÐÚìÀÝ™¸…¥XFê OSDTCèìÜØû]ûàÜ 2ÉrîÚý}飼pÊÆÅ~Ñ4G&A6$k–òºsh7ºÙH‡\Î Ç}ï÷U¿ŸeÓ–ˆ÷x|ÙÐÛHDƒ)䡯ó ‡¼Ë=·åì²ðû¹Å¢üÙ »ÊÅÍÙ`G)›ä³ÂHoéøó¹Ûð®K•&ξÆ?ù¿ÿ+ÞǯÿÎo0ÔB[T?><´"µnn&n–ƑŠÂÍ? úká–Ë2[ñ ÄâôÅ d9Ç¥© . áTš¡X3s¹Ê'qËy†ß9Âwg:ùÜŽ!z¢ÚM'¢¿á½H—â3Ÿéqˆ¢¯ûi’[Ö 5’òñ¯2;½ƒî‡ñ¦ÎRxë‘ÇUH;Kþj‰`W;ª¥^gÒ¯~)Á™aúµs$öí@ì‹/3sÄ ã§¶Q=þ#*é‡HôÞÇ}ÕBâüé3L^ö Š“Ì|ç%´îjÛVâþ òž´;¥[娛qÚ×°uEš™óÇxëÒ4Oapãv6tF±¨rzÚ¡/"¤ üò4GOžãÒL =½šÝë»HÖíº`(å&9vŒ5Û7±(Õ{}³ÌøE;GÆSiëîeEÜF®¢+f"¼2ß{u„Í›úh3ª¼5í³¡+ATïÓŽçŽc¸mÁ#?â’§bèík¶±µ7FH·.‚êÛ\Ω±ƒ±èbºxýz}»Èt¦@Éñ‰¥ÒD¬½kÖRyq².£+)gg™-Û¸(´¥Ó˜x”òfË.º&ˆ Ø¦²E*®$–L±´¦ÌNrsûoÐ~ß6PT6~æ v¦Heä<•òfpóxe­k%Š"À-ã^=ÂÔI’Û¶ìêEØ8ÓãxµmÝRåIÜ\_ „aâM^éVѤÀÍ]£ZZ‰7} HcÖ³úåiœé¤W#ÙÙ†7q§\5€Ù=€ðÊxÓWñ|J­­ ¥p ;—ÇýŠ=ì{ø> Ç' xfrI|»D¶©˜B¹êL¦®“ÐF2ré"gÕ•üõ{]^:p‰ÓZ=†MÜ|‡ñ¢OÕv(ºÒáh]m@RÈd):.žïŒ%i’r.KÞ–Á©H€j6CYúØŽO '¨Iª…,™ŠÃèÔ 31'ã²j×½¬:üÑk£ôDMT½ÂLÉA3ƒ$baT§Èl¡‚í8øZ˜tÌB¸e¦s#@<ÁR RÉç^>Àôšn:CŸ©‰YŒh”¨ug'iˆtö³jÝ „>Æ·Nä(UJdÆNð•?ú“E-ÚÏó[¿Âðwþˆ}Ðä®y¿~îoð©ŽKüèßäà¹ql­›Ï~éçÙÛ‘çýý¯’ÒK” yîÙ»“Ò¥sœ¿<Éž¿ñ÷øÄºù3/^_Ò¼… Ë/ñ i.¬[_ Å»­æ£ÖûË=!Y.Rtâ¤L8úö9Š"Èà`hIJ> à;¼ú­o3ݾ†Mƒí¸~}rA ¹»]ÇÅw+ÌŒp¥¢2¨Írð…£¬ß÷a×ÇÇgäåg9^Ãæ¾vé/Û”~–Ì_ý3òϧ |òï’ˆMûÖÓ?õ%ì‘qd²&±åN¼Ãì÷^ÃZ¿MH¤SÅwê–¥oÿÏäŒDãŒýå1ÚÝ#N¶ú±Uƒh–…&‡)û™“±ô¢ïAEJ‡¾Ayó:‚õãù6…çþvß_§³c/ží +T/¼ŒË߯’ç˜ýÊ?EÿÉÿ+g–ÑÿøïзïÁä ^µ½¶úH·‚DG±TüJéä°¯¡\ù¡Àùoÿ1æÃŸ£ðò+hü*ågÿîÀn‚Q—‘7Fèxh3ÓÓçØ¶a ]1ìY®šƒÜ“J ÿÿì½w”×}çù©\/‡~sBhd"‘`“¨H‰–dÇAÖhå<žõî±½;s¼Ç>Çǯ=–íµd%Š’,‰¢DSÌ$@9£Ñà ýb…»¼×¹™d÷硻﫪[U·ê÷»÷¾?ÏÈ’™rBŠƒe;% ˜Í±³9ª7UQ®+ +¤‡/sdÏ;t<ö8Ù¾‹üä]øôÛHLJ8| ›Ê†js5†pHLH,_S',¨\bï¨BÈà•#}¤£Èe&š¡Pçõq›G:ö ²\ëæ·þñ,_øÏ¿É/Ê]üþ³©Í;¼ó÷‹Sš/áVcÁ¥ò"+ XÐ}p£Ë=-#œKq¡7GÞ•PdUö¦Æâ õ§¨m Ï£¼nž³qk7ÔÓ\;É<9û¬…kÓ}é¹™Ô8ø,ÚË}ÔTêtöÐTç¡B@¤±©sŒ ý*kÂe sîÊ>ü;?Lxej¬·ç ¹L=±Ö ÐóI@ ¢EÊQ”Ò UM”HrØ‹^Yæ/?—BpÞ¶J”ïý5VªMöàmîÀS_‰„…"2q¹€tÙ‡MmM¥,Šê÷LE©ÉfÕ×O!ò0Á5kì4™Óû°s)¬‘a¼ËóMBòDñ4u`ø5Èt‘£`ó&L)„rV;‰Ý¹‡ÁgzÐêwQV%‘Û¿Ÿ\&‹ïE²xMŒ®Áˆ¨ÄÏžÁM‚1ÁÙˆ°rä³ Qbœƒ˜Q'É*^¿Ó§‹„ˆxо“ã§øþžQÖuÄ·T±Mà @6ø}xgÌGfš¦éìJžIF“uƇ»uM¼½½èí­†I BILúŸ$üAã#½Œ«-¬ ›ØCœ¿ÔMN.0–Ì‘²Á*ÑÊ ê*ʱì o#µ5Œu^¦[œ$Ǧ/dûÊu„Ô½ºrd†“IÜœKµ,°]IÕ©øqr½ï"îõQÈÚ¨¦]|ô Ýð“ÌZX.xŽu+PŒë¯qÿ¾BVYöÀ'ù@GˆÌ¹·8u±Ÿ†fÅrÿ‡ždu]Ùu TWrö¼Š Ê Š*áä íý'âu|ô³÷0þâ_ð!Iè^Ã@•5ÌPS7P%a»¸.W 4_­ƂªBšß¬.òû ¢”Á­z¨¯5qíÒf©wÀïõ ŒfqE1wð% UJK—¤¢m×u‹3=Wà&xþø÷Þ³Šç2ïÚ`+Ù°ë^Žïÿ {÷'ñ?¶‹Ú–-̻ܽ±§³Œû–Wž7SQË[ð6¯I"¯HEsÔ¤H,ñíOÚÚ…+@ÈEî~×·$ diÖvP¢ª¦!É’P•4¹K„ƒ*ù¸„ÖAØLV¤B 2ý䎿ŒïŽã©ŠâŽŸb´/@Õ=[ñ^.””¦ ªIQŠ4’4£ÿÉË ¢6?BÕÏ}Y‘!ÛCϾQbyÃ>J² ¡„Ê0›MF^x ߦáª$ÍFü»>M¤£ NyDÅqÅ”Àó[)Ò¹¶å7ºŽ,åÁu‹µ|Q¨ BÎÅÛØ„×êòlÀuV!OA³FÁ“Î_A:>Ž­û zLÍ¥w,ƒrÈäe*k< ÂSÝAÝå3 ëËÐTiʧ_¤3€Bò2j×nÀ§Êt v³ÿ²—_ü@=vü|i˜dL]E.EõH’Tò¤Éû¨YsÇ&66–#C=§Ù|œ=±ƒsÙ$çQhl‹pè ÄCeܽ}9ΨŠ7\ËÝÛ·âU$Jií"„ƒªHÓNyñÓq_$…pm+7¬$Ò^Áïþù«,û¹4lXÍK#qšÊ=x±Jú\.ÞCiÒ °²YÐ |¦Â¹¡ù°HȲT|7d E‘KðâX¢U¬YWMß"”æK¸µHÙ )Œ1‰†’$‰º¹[Wnpy,ò\ì¢?íP×PMHuºÔÅ™„¢{¨l¨D•澤yydK€ç÷þ˜—^ÙüÀÃ,ÓÇÙÿÆ>.vgxÞe˶;h3.óÊK˜¦†ÍµÄ‡.òÂË{é-¸DêñÊ]û^àåó#$… Ëtô"€%‘$þ?$ñ£0úæ_§r] ‘öéú«?@ Ê(åëè×zõ%’gÏQøö¨|è~L_õÜ_2Ðýþ¿Dô£1ô—¸øã,æŽÿ‚·6‚}nò…$9Å9%ø1›Á—Sž$ÃOÿ5‰C{)M’ü:J×7èùÆ+x:.‘nº›ØÝÐ~ÀàSÏ#*‰>T4ÇI’<µê“ÌJÊÏ2ò­}`k>Y|YeyúåÕ‚øÌcŒ|÷Ч Ͻ«V{´“\¿†8öZ]+¯fè•?côû¾òu-Db-ŒSõRføxh½ÆKo>Ç‹i‡ w=LmÔ‹êºúöðÜð%ÚWofûÎ;~ó0ûN’¼\êpO‡§¿÷C4ÃD–jI^:ÌëGÎsªw„Ñ×Nqßæ6jo?û¯ ·ÜÍÛÛhj©¡sϳüå+Yê×îäÑ:/ÿßÛQv®‹5غJªÿ?ÙwŠsIog×ËxçÙW¹h{‰ŽQØ´*ÓO0u˜o¼XA…0”îátøgyy +ϼÅWž âÓLŠ‚L–eäÒF^*c˜§žyŸŒz(¤’$Rqì}ßF0 IDATLžÃ½ 6WU³}y?_ýÖwЂ•¬Ý¶“­åV:ÉP÷V.ë€pr<÷ƒç©Ù¶ƒ­Í·)§ªdRÞºƒ_¨×)÷¨èžv~ÿ &j´’èš/ìé%k P<½^6Üÿ šÜ0Š$±|ÛGù?Öúh,_Å“ƒcd‰]¿úGl×Ë —üΧj¨Œ™4óÛŸ¬¥²¬ôûµTF}hm¸0¥ù’ƸåX ¤*B06·­k(Kõ_ü—?0ë×ü_R‰ML¾°­œ/n¯œzYŠ\¼x‘ÑáZÃÌ=¸d³ .ø¼ ;Ÿ'm dEÁã1ÐJ³9EóŒ6M…)º…4#ã)Ò–K¸¬l‘Œ'™°DÉäD¤FI\dÅÀôã‘,â£qrBÂã z($GM[8’L´,†OWŠF+gð ùTB !2ƒäãy$‰¤•£ëãâ œlÉW…^^†¢ }p\%\‡æ-` õãäl”Šæ’ƒ{´ d£hgq“}&4Œ2•pPÊÊp†zp²i„âA«h@Î’N!é*²'‚^Áê¿€ãHHF-RŽLg|¥¢©dr½„¬#+P¤ö˜Õ“ÄÑ.öÀ¬¼Š5Ãé~™á—.¹ù‹{H%¶Óð‘6¬‘Aœœ…kAx±ó ž{ý$-kV±ª&„(¤£¯¯“ËZ;–UÖc£cä„‚é ñH¤ â™<²æ£,äA¶3 'óȪŽ*ëD<6ñ‰Ù‚ƒæ  z1U‰øð¶¤,àÁµr$ãq.ßO·ÖÂ]›—c%³‚&ª“¥ øÐDŽD2CÎÃôz™%ï‚,+xC!LÉf"ž '˜ªŒ 'DZ=%ëXdR âC“Q¼”‰$ªßÏ(mc˜HÆIZ †¡ io¿zHC-Õ~——Næy`k 5^‡¡ñ4¨:p„&è:ÅÓ vß»• ..Ãc¡AS»éh(!‰D‚ááaêëë1 ãæŽ)æoü,„ßfBÏçéì줺ºšP(4õl¸Bð»?êáÙÓ‰™Û»Ùîc?ßûÿ~ö3Ó ærCÍ‹ŒÇ37ƒÛCøJÜ%m!ë>**}3¾Ð0+½TÌܶ¬‚Ь5*kfq b†bÔÎÞh^‡Jå ¼•sšõF<á™  ͼ½õÚ3ÿB¯nŸ}tõ¬¿å` f‰Î_/]ŒRÝ:û ž¼áÙMzÝŠÙ h¨Uͳ®CÕcκVj`Vï¨UíSƒ-„‹m¥q¤2dÓDV5d‰¤‡Ñk#³FH3CÜ¿¾œ^ÛÁÝGy¥—H(@ç!Ò9›°¡ÍžÃQ‚3¯EQ7{ˆ(÷̯o.ŸE3‰Ä*Ù°}ë¡''±.(=è:Ec–ÓôÏ:†Y1ëiTŒŠ9ñ‘ÙdEÃŽ1ëHFdö6ªN0ZA’ÉËš åèTšj¡ë.Š¢¢™^êjf €°p$?+·/'0µÄ•)¯œ[Áá6Â’Pþƒ…Bgâ nf¿'ªr³«¾ëI»Õ¡W²K%wÈÂ\ïŒl1Zèk;—©®é^/xÎWÜw~ß’$c.˜š²~[àYóa±êi{óÌ}‘ðV¶³ljçâ$Bó„ùð®ð´9ìfo±™¬$!ë16nŒÝ‚äÅ[ I÷óøîåLlL>¼+ŒßP§| @ñº$ÚÆÆéýn“ó_„€”5·QÄßøjïì¤åÙÊ¢Š9Òü†}—=YËÅ0MLU.Ø!›³A7ð\/‹ÈµHZDü u¶°rŒŒ%qŒåa/Æ T(äÒ '©¨«^4jñrô¤]ª^L6Ù<˜¦zmJy*­Ù%1Gòz®mŒ éñŒ…0ÃTT$=€VíeblŒ¬#cälbþ¹ÇZDK·>9jRQäóš® KÅÈ·\&FSSJþŸÛCЖ\áøB|WÜðý¡/)¢%,†é Ž«A`÷/¾²XhVwýò¼5deèê¦oÂ!RUI{¹¯ …‰§º’¨ ¬ ¼GÚb&½‚Ø™1žzc˜Ç··ÓÕçÌÌ—Žðô‹§ñ/ÛÉãÛZ¨¾NY<ž`¬ÿ?zöÿügˆªE[à4$$\2c}|ãŒË§7¶Ðè“p²}>+³am ¦$—Tõâ+¬Éë² iöîÙGÙšMli)GbFÒ¬­'OtŸåå“]ŒWíæWw”##p­4/¾ücøiX±™‡Ö”->æSy³.kú»©î¥YûLm7÷›Í¥QüCXœ¾8NCC”°OÃ-LÐwþ0Cáõ¬«‹àU¥éȱ©àŸ’¹dÉL³„Ÿq,d¥bŠðfÞwóʪΠÎRrã£|Qv¶x8q¢ŸqŸŠaÂÙM»1Ú‰kEñØ.CgÞa_ç89;Ïh¶B.Iç±sé›@2ô®Zwø ûß=ͰYÍæ¶~󯢇t7¯8Ìñ¸ÍÇDÿE^xú»ôTµ` ¶ú>Ú˜åõW^c0¶W;›äßù ÿrÔî-<~ÿ=´D=W_VŠþ ‡ ¯Ýš†(àÒst?ÇGó8’Áúˆ0ÁÅÓgéJæÑ•¬Y»œªÙèx%^zÎ'¶~ª¦àL8 ¼r| ²$QÈ牻´i ±æ>Ú¦3úæEÊ¢>TEÅp„+¦ÎcV’Œ×X“’JyMõÜ­–°„%ܲÏü9+‡ÎÞÕ³ë lËF‹ˆFÒM„QHŽÐ;8ÄÐDŠ }cÔZî”3i’Õ*—§«w€ña‡žÁrj}å¨Þ(rv˜ÃzØÐXK ” r%(†A°,H2[Àh¨’K"m¡šÊËü¤ 6¾(5ò0ÙBMFQ g4™&“Ž3žñh“I6³¯%;ÁhÒ¢²"²`á+á¤èé ‡P¹Sƒá\‚•#9Q˜:âdÒ€Ç룦ÚK6gá15T¹1$3G9H ^‘dxt„€QN,h Ü]I“§drr twv“*kfUøæ¸Ë–°„ÿèpÅ\ÿ*09«œ@Ò=’¬{oìýýà fËÛk  p³YŸÁ{ùšK²ÆÛZùÑÞS¼ŒIMyÕU1êO½üR°†M»ï¡Ú§âñ¨TæF#Í®k°8гô±sûùÉãt¹Y¾ùÂ1žÜ£¼¶]/Hs`¨ëß|q?)xQXTÕ|€ŽªÍ´ßåï¿ÙÏýÕϰºÜ‡z•bÙð­náíÁ1ªÃ&ÝåÒñÜžÀ5ƒ<´ÚK¹ZÏöÖž{í5ü­ìÚágèÄ1Î\ǵ ,gK}SV)%¶Öâõô_:Êwö$ùü/~ß‘a’ª3ÚyšW.©l¿÷~j}6JS˜ß>B¸ªŒÆ †¤úÌ)ˆˆÒ¾nß}ñMrZ˜–U›i Gñ›H ±¨SS5õåiÞ=u‚áôj¾£'›â¼ÞÈÝá`‰}¥ÀÐÀ#F=á«+×%,a ‹#·°Ï"SúÌ‚`Ô¯4|ñ«o"É«&‹y5™§>Õ²˜9¯hÍÕ3¸¯ ³2¸oYÈßB…s$ĬS›Uh‡¹‘5E%‹÷ó§ÿü—ÓÎô~ŠŒ˜‘¯xÊø­_ø9Z¢Ó>iF“¼EÓ±L“3ïI³U±¯BïëüÏgr~,?¹3(*ØÓ1Ðrp¿ôñÝÜQarêÈQ¤švVV‡f™Ž®œC2yì™1SÓwÞáôÁ×Ùë®á?oŽ!ϼOBàºyþõ©Wißµ™Õu‘’ mî}žÑͬNżHª™¦»éáŸÜNÂ-L0Ø}Ž|ÙrêÂ^¦Š6ÞÑP·&3¸GFF¨««»ù î%ü»Ád÷¥K—¨®®& e“ ¤,žüæ…išrÂéíù›ÏnÏõ›ES>i‹‘™ó¦Ë7èðýi? E¿‰ãäQd ¦Ì!‹ù6º¿ŒOôcä1CÊ3Å(IÅULmÐ@‘ä—4û¿ù½”M¯XËl!cÍ S/)2ٗꣶ̋¬*,[¹[-9ey^$Óµ ŠÓ„i\±‘2y’B~Ž¿‰hY¯¡ý-ו$·øŠivû´R4±ºeȆUžq]K b K¸uó]hª¹¨ÏbR¾ÞTÏó2¸¯'£ûæIöã T¢¨ž«o¼dÕ µ±aŽ)j¾Ð›\L:‡ç Ñf-¦ÕÓL!+›Qšê£ –Ý{ª×+h‚ç•®5½L&GªT^tòÔÅ¡w»ÙtÏN‚š|•û(p i.á{'tÚ½šÖ˜„`´ÿ4/í9A¾b=nj¤r^&üܾo=¦&,·.…Lœ ]C ¢˜Ô6Ö!å Ç%ê룋ÈA&1Âð„ŠSÈ«Šôh+ÎàPž@u%¾k.N>MbhMÓ ßÚnlW”ŠÌÍB®ô™…Iá)}¦àÑdLíÆ²¬­ä( a²¢)HÏP’°æGµêë«{5ÌL~{?Q^gfÂ_Ï#;}¼uä,1½ )ÁçÓ¬k¨¤&ÄéÞÏ… »vïBWýød›‰±Ô¬2¢‘€B*¥ÌB[衽]œSZxäN—óÝ]œ© R©áZ d\Úm›l:C,âÃT‹’<“.Ø8Bà Fð©.™d‚dA`ú‚³Êˆæ žP˜€&aç&Næée0ÅL8´­^OS@ðê©AÊ=*Q9ÃXÚB5ý”…|(vš±d–œm#±°Cc)P ‚¡þÉ:Õ×õn ;OV,Vf"7g,/À¶0¼A¢~ƒt2kø(÷ƒr£\¼tž‚§‰šò0Ñ÷*+®I–8çÎõ©iÇ£ÊÇ"3‘d,k£>ba?Še,‘&k B‘(^Í$RÕŒ|è–],ò4‘Œs©«—Ëj-÷´ÆW¶]«ÀD"INŽ?À#2Œ%2dm?%`H8…4é´EÁÅ ó+dR Æ34oˆˆ)ãä’$ò ˹ÅL±"Çð…½|y¿Ä#kcäÏ¿Á³—ãÑ6•±a•ÚÚ’4s%1iBÌrð¹oóºo ]?|•OýÆg¸{UÎÈ^¾ùå ìúÍ_ã!S{ÏŸß9ù‰Ëè•õù ïÜ¿—UÜO‚9+A©ÔºHèìŒUø¬]nt¬L eAÃ]ãd &~ÇF“eTEA[(&ó6„p-Nu;4ÜUG[½ŸsoŸ`p8Hvì'O'˜­¡}Ùj<'ð®ÚIGC5¾Ì»sʈ~dw”ãïàhÅfêË‚ ”Í1>–'Ö±™¶j‡TßkLÆRœ??N&ƒ€ÉÎÒ{ú^l ®2LÄtž<Æ©QF –ï~œõ‹ó‡öqh`‚@íjÙÕÁàÞW9)ids‚æÍ;éÙôy“==ŽpêÚAÒ—ÅhˆAþìÙt’¾ËGxéüZ°ž]wo%Òs„—Ï OŽ3æ[ûZñ%/òÜ;8z˜¶uwrwë5dƒÏƒK.5Âk{ÞÆ³½œå•.|›tIT‹$žêÕ<´­Þ3ÇxëÂÞmͬKŒõu±ÿð1&ôaššWr׿e¯¡óÂÈ)º&<ܵ¥ U‚\j”£o¾ÁáqˆÕwðàŽ•¸—Oóú‘.úÓ6­›v³­¹ Ÿ7€©–VM¡ëÜIÞ=ÛÍP>Êå‰Vš¯AZgâC¼ó«ŒEb䓆u›¹Ów™ýÎpi4GåÚ]ÜÓb’î=Äþsy²¨„ê7ðÐr—#‡Žpôr5¶œ»;ÂdϽÎÁTØ.¾òV6ÔÜ≘e-ËqEÏŸKÑ£ô³ï NGì]¾þLášÙ¡Ë„V=Èc»W¡%OÑ÷±}K„îg\fZü„áLðÕ?ú+2U5D½*}¹ yx=ÄQžzµ‹ò°‘ͳêþÐ ú9óúOЗ­dß׿ʛÔÐ*‘SëÙþÁ‡XT®^²„)¸b®‚žòZ,:;óë)…qwß‹aôŒ±ÿÔù¬…_R †Ëóñ‘QNåÚb‘ì£àXŒ 3Rÿ ÿí1~ü¥¯ðìÙ»X¾)°¤(nYÛ%kÍ- uf¬¡Îy¡³“Ó³ô™þB–P¯ÛFX\HJš—úZ•²|Ó])LUAÑ4BˆB–Ëã9\nÄ'ò>CRˆ¨Y&ry\Ç`ÔöP¯iH² ¢¸Œ–© ºŒæ¾æ&|…à 6 .ØVKÌà0“JBlRÉ Žá'¬˜ªË¥ñ,n°XF´¢Üd°s3ÒJÕÀ%âzsÑ„eSš¢•ÂnS}t f©_¿ Ÿ&ÓßÓž>÷o,çÈ»SeD CE‘fÚóKU÷&ÿTƒ¬]½š51beÒר<Ά\<~‚adÚ¢¼r©;`ÙŠF<Ù4º7Ê];¶Ö$Ń.ƒ•Ï’LGBWàó"0J÷H’%tSG– (Òl‹˜Ü†RòãuÙ_$UA8“5Å%Ì@9k¶ÝŹγ8œfË–6PìêXIGm[öQТPJ†Ÿf˜Ê‚Ÿb>ÕÛ dŠîÒuq„Ãùï2QÖÆ¶º*zL†O+xUU–ŠïŠ$QÑ´œ-+êQðèÃi U-fÊ+ï!ëšlFiÝñiáÂÛ‡¦¢Áƒ±F–•é˜R-ºÓOÒÊòö³CÔ=VG@QÑœ¶k#„‹›KãH ’^EK]U5¨4 d 05V¶Çü™J†{‡IWMK˜0kÑT‰ W">šC°¤,n5ÜBÆu ÙyÉ“ÊB+}¦`(ò ÓuƒÀu]ÛB ûñj2V.CÚ–HemTŸ‡R¬îm IÖè¨Wy·¿Ÿ r‚!5ëü^d%4gxÔW Óº<Æ¥î:ƒÕÈšŠ®kàˤÇȈ*¬|š±ñÙ —x2HÔ`¸)8ÌXý|¨ÝC$brðÔi.X¶uÕ~´Öµú¨°,UAvóŒÇÉg'O¦(ó‡¸|èz•î4,& 6–m“sd¬LŠŒ]ŒŸ–¤½Hé¦{L/Uf‚îúÇ2`€¬èDb1êJEyRŽM®àâXi&òÅàae1£ ´Ö–ãUe<¦Ú¹‚­È(Jñ1í;ËóûúùÈÇ>@p1Îö™.V.ÅhÆ"•L2¥ZÍ¥pYẌŸÈ’IŒ“¶bxeU7èƧÇ(y¯iŬŽ!ΧI9UÁ¶-Ry‰êš ÆÎ$Iºí2}–…ãº`¨¸®E*'—Ï0žL‘{ {dæq‡¡¡8žp€±³Û¥ ·€ÂP­¢'Ó‡ã8äóv)­G‚T,áúZ¼'-&l_ȨSt1“!Å×pá× I&XÝ@kûrj½EÙ”‰º¤ åI… 8™ǵ•<‹¡›jÓœ?~„Jeœ¡·£Tl¥Ö(í[¢Û™Jåq-N8B»‘B>AkûFÂþ ]“§"Í~–póX$(bÁFuöw·0´U’Ð /ë"Ū¶¥"9.¡h„JC¿íWÅ5’LÓÖû ÅÇéïë&P]EÀg¢Þy¡€$lÛÁýåIÙ÷?¸™hÈDi®f$U bÕf–­ÖQ%ˆñH;zéuS¬Ù°Ë0$™¦•ùDõ8g÷½ŒÙHm(Â'°XF´©ŠzŇ!Û¤Œ ÝÀ0Šå8Ë;¶³UH¥¼DMójžˆ$)È÷í–1} òŽ»©óLWo ÅjÙý`ÑŒKÙ¦m¬U½h«v¡ùýSïa¬º™ÇŠ’²¶ï¬DÒ]ö÷i0…ßeˆû·µÒ±ã†ÆR¸²ŠÇWtö䔩*5Íõ„½H2e H*Õö ^úÁA²"Ê~»…X®‹Þúf U#\YE¥§8Í Æª¨ ]c˜%,Š‘Œ½Ð»2±Ð¶€Q¿zUÿºINfp·F žúT+Cž·¼¾ñ îÙÊè½Éà.žcjìR1ÏBóÜð±gÆÖÛ¹$/ïïbÅÚv#7ž»q-}Æ»x·3EtEm^ù–Þ››9/a¥ùösGhZVGµÏæåÓîÛÜB]ØXd¢'—Áγ»œÀ1þÓ‘/ŶHU+w´ÆJäŠ7t‚a“N °ÿäeì)SŸŒŒËôšZÆôGÙ²¦+1È¥þ$m+ÚñܰL;3Æ3'l[YGµ_›÷þL õpðwXý؇ˆê×ZæêˆÇ㌎ŽÞš î©pæÙ¹C¥/çE@7u°siâ¶NØo«9ë° IDATN›e’ƒâ*QˆY,¸)ºŽ¾ÄÛÖ>°¡…°ZœPŸ1õLLeî/eñ_3®”ÁýÌ©8ÿû{gø­…ÈõûzÏß|ö³ˆÙ1µ“f(oé3&ã¹óÁ<\iŸŸ­!•&3¨% Í ñà®5ïm¸^©/#ÚÄ–ˆ˜z ne i8xæ§„JÇæÄ‚Æ´d¡PÙ¼’Ц«œ›zñ‹MéçžíóØöìËŒV±&Z5£ýf…NQˆªÞÙY,mYÓ D#h%“Ê­ß™Â÷–àŠ‚x<!@RмêM$ÎY‰"Àò&/ÇÎŒ‘4%¼NË¢9ê¹¥öá%,a × 7ÀE’ß;ßÛ~6à̯’ TÉP‘d»~¾nî£2 Þô RD6M*k ²ã¤&&87©¨ŽQ¿Ts Kx_1¹ª(LCØ‘Ý 8¯—ð Ä,ÂS”Ø <,7Z@ ÅçR\èÍ‘w‹ EŽ±Ê†“eàò8ÕËÊ™Ëx±„%,á½Á¤¢p홾BØ9„+aÆvßzçø~fÈ9 i†EV‹àÆž¢+XR=Ôך¸vi ¦¢˜:¦ßƒ^pL±ðêg KX­ÂLÿD‘B߯NŸEvâa“éû>zd ’lÎÛw:´y1̈ˆº ÖãëWRó)ÐoLÑ]+•ú{Ÿ¦¢Näœym¢è³XJªæ~áÓo‚¹I乨9DÚ¡®¡š²€Š0‡Ïv’G#ZUYLä¹ñ–°„%\„°va'pòCäFÿ IvÁuÙKäGÞBñÔ!+d£ YõÒ”¤p¬}==d,$•ªúFm~R­°HOäQ}“´ö6¹tœ<2éD_E!MÂÊ&%ÖØ„~#~Qà’›˜ `®à ›é¡k¤@Kk MÂÊ%¹xahCå„ÅHo/ã–—ææJTÉ¥I2\Љ‚t_ù²f*‚'K×pžªX.OÝ—\r„žá4¦?ˆie ÕÔ’"㯢æZ¹Úß#\œ õÏl”€2ïM( I£ººœ2|^U’ÀôÓѪâ `šú’¢XÂÞs2—ÿ'{Y¶ÀuP\ ;Û(ä‘D̹?DZÁµÁ•£”oúhÁ–âîÖ8Ýïü€ï\¬bçêzdIç1 ]rg ‘=Ǿ¶ŸÆO|†íQ'y™S¯|·m¯}ÿŸûuªP¹x¯þõ·ùôŸÿ5µ~e~ÂW[ÑnŠ=ßý:g7|–_]ã›Cï2wÅ0w43GÄåø‹_â¿~¹Ÿÿç¯ÿ„;dz<ÍïüŸ/óÄÿÿiç2ìá7ø‡?ù½¶—ßû³?¥>`iÛ»øXsžCñ›<]þëü÷/>D›ÒÃù¿öŸîaMm1m-7r‘}ÿú%²k~eªJv°OE˜·þõkÙò¿ñßîð"‰…ÎïêÅ¡nœ…´Å"dÒ 5?dö¦NAÆã1gÈd>ÏMy KXµBBm%>ƒÄ0²›ÂÍ"¬ \ËÂ-¤AxÁ àX2¡Õ_@õVNí-\›B&J¦/@,ä'òàÄ{8ðækêIâJ&eÍØl¼Ã¡ƒû8‚òÈ#Ô[#œ9‘fû&òLa-Â7ÎË_þÚlÊñÇÀwô{¼pb„‚¤Yu?»—ùHž{“WŽ `»2þòv>°ÆæC9Ñ£Sï>Ì®•Õ„ °¹øö ¼r´›l®@eÇ.ÚÙÂkO}“î´jøØöèGX^BŸCZ€Hyˆƒçú©Fââ¡3TFè’@¸6g_~µ}.Ó9˜ Âç-™ÝŠ9cZ°Œ©·9r²ÆÕÚœÐd‡¾SùÉ›gäßâ’H2Ô—à—;V ¸B8Îo¾ËÅÁŽ0X¹óî^ÛpìÉ7!`p²ööt£ˆ¿ñÕ^Ä|G:çç ÜŠ³]HCýl±Ï/Æi4‹ª`LÙ"²é΋-_؆º8ÍÂÕŽ·„%€æ_¿.Hâìï¡ë ÂÎ#laÙËAÒ«° 2Zt ¾º‘”i†dIQѾ•žoý3_=ZKSËrþУXgßæß¿ÀÏÿÖ“d;÷óü3ßâ®ÿû –/ËÓòÄ“l)S¸øÎ[œ˜XÆ£>iŠûkòÀÎ<ÊñžÞBÇË{ȯú0ÚµŸ/@ªó-žýêólùüoàŸaïsß%µûXµì0ÒÖOòÈ:ÿt0Ž)k\Å]e­XCoòƒWÞäDG”Ÿµyèã÷±yy5 Y–+Ù TYCßáÓÏÃÉ®Ua p­4/ìIQÿÄFÖø+ùî¹>Ú«›gÝ_Yñø} ì=q”³õëæˆ<…ª¶µìZ³—ú'>MEê?úû/cM²h›s?ü'Zwòè}÷‘Ú÷O¼¾·Šk¿O/óü*y{¼^•<˜VuÌ‘àU›!éäór–‹n 8ùÀNÿEô:¼ºJxÅ6~¡cQ31Mû"²ôžë&ðÐxµd\ÒyWlÇ&k©ÈÒ|ÊñDÜe÷¯þ&§Ïœá•ï…#ö:î®ëã\ÒÏ=``5n-5!3%æÙYS©ì9~øôsä×ÝÇ]±*4ç(CnŒßý•;9sö O½~–Š~™‡ÖÖšâw”P•<îÿß~EÐðá_CûÆ_pH œãµsçÑþáoyQÉsnb%ë?òY÷W!ºù³lÍ}/ýÝ äb+fßþɲŒ,ÏåÙ³9}fu}Ÿ¦âßñË|ÊŒâ{_V Ð|” W˜,~4OÚÜX½Ûb'Njˆó£2±Áé¾4muA2 ©Ý#°eM7å›z¯1E¤–'yéiÆô’Ô·nÂï›=b“z÷÷”f…\Ã@–%ŠK9©¸p†È þÇÿAÁÐdÜØ 6ëd)X ~&gd“ƒ'ÉÚ’ÇèìA9¦ñó§éjXIMć¡€póðzu¬ñË$³Y»@ÒÕ UÖÑ4§3ž!ï&…$IÈ’ÆšG?L¾Sа¡Œgž7?NÿùãÜ÷¹ßds{>)ÏÞ/ÿ#.öÒÒ3çÖ’ì¡}õZV¿ü7üÛDÛAk¨•Z5Íß}å(È>jWÝÅWÞŲ&/ßøö—QÖ ïa>Qä[ïÛÆÐ7ÿ•ÿµ‚Hó|ð—>F@³æSŽ%úÿ„çßí&a©lýÐçX¿¡‚5Õõ_fÂQ6¬ã·ÛVÒ¸¼é;ßàûáÏñ©íTú$_;ë–ä{Ï~‡¾ª2"µ„¥,{~ø-ÎfÌŸ¹»Šˆ1-º}‘JZjƒZWq'Cus#!Åab0Á®›é¨  àRöèržÎ!Ì05aF´¾S“)oìàáߏ#áéH(@Ö=„ªšðh2ªá#ÖЄ¡¨„+ª©õë,{üWøÞ·øî?ý%Èæ‡?ͲÖò÷E8æmA~>9T¦ô™ I–ê¿ø/O›õk>6IO.ñX=,Í{€®LQ^ìØNpf\¥"bpæôµíõ4GL„=Áùî4þú ª5鶦(Ÿ¢'/¡ïè!ÌúvòN9±ÊeèÊ$“f©ljâG\<ø,9}u«žÄãžgäУ®øœágèlcý=Û™¸ô·ˆŠß'‰–öŸ¹²€ƒ‡S—]ZÛ6㱎sàµ×hÛò(fa/qi;UÍßÏù!…Ææ˜\æè ß vÓ'*ç¸0¢©m ^]YZYü‚‚D"ÁÈÈÈ<Šr!\öü v¦oÕýø›>Š„B!q‰þWþ!hûô3H’Â\_Ü|sEñ™Ç1EÉh+¹áÒFŒXØ7á´PåÀ™4ã‹åjL2?_¡iÖs~Õœ¹QF!f·Í¾¶ÅóI¦ÎcŠÔQ,ê4«‡›´$Xn}¶?çÖÓ®/DQÊ;<ù‹\ËOn'n¢ûo~~{¾çø©¹Ç™Ì³¨›Ù(IPå_¨hËÕP|dÔ`%mFœe¡êLµXa+Ñ7‚í-£ò¶¶?MCØÃ\zë0Г@ïQú6ÌŸ'.EŒ 9ø(-wÝE!u’Ó{ÿ™òæJ2I‡¨ªã­’ÍQ9ƒ„4³ÎØ:¥å¶ŒQ±ÝŒ ;!„í÷•JåP% ì4npš§EN‘Oõc,¸™<™%ü;ƒD ù“(Fª¿Å(@õÕRûðÿÂJöÃ7g<–W£â_v¼$x½•Óõ®D³?S ^I8.Hq¾ø¶×']懨.:ÉZàØÒ¬{¶ð;7Í Í‚të?­IÝLwéD¦dÚBX4tV¹)ÙÀu¶e£Eø áÚt§T¢u“Uòn…!)AÊÊÊ)xwÔº£OðEælåy—¼í œq$=€î«A©,ÇÊO È~< 9HjÌØq4u%¾`ù¼;àæÉŽwbO¸ä’µèžb0sjÌàEÒÂx­3¤‡¸òþèšbY×%,a|µÌoT4<åxÊ;nQ/ïOnÀn r– kÍsOd+EC-¤¹obÔ…Eÿ0ƒÁòöºŒ°-Ü@ ù3$È$ ÍXF$´¯#P*ÚÐ4}ÎF¹¾oÑÝyœ‚P±ñUWAÀáôž?ÅV ¯øüáJŒè..½ù%Ò‰Ÿ£yãhsrnìu.Ÿù1V^0Lmå.¼¾ Š¢"«4©dRSý˜YI­ ±-D×é¯2"ÊiÝõQŒ¥UÅf`ɹ„…àNå‹Ì‚ Ìã-PõªV^Ñ<‹F•%Ô›YYH--õ´ÌlR Ö7üì”6)Ú#e<í¿UJ.¼—)¥:ëåÓ ¯ûÂk§ö,~ýk°ÔT¼™Fô^Ö>v‹­ª¼ÕŸdeÕ'fB¡Òïž]TN¶VÑ(ýŽŒ§ñ ¬hü/¥ýäéý—°„%,áJ¸ºY÷ª²îQg ýÿoïLƒì¸®ûþëåu¿}›7û Ë`#‚+HI‘ZhŠ¢K–,Ë*Ù²»âJ9%WœT+®¸*}pJåDN9l-,ZR"É–%J¢6n‚Hp$„e0˜}}ûë×Û͇·Ì[b0¤@ ÿUCðõí{ûv÷ísî=÷œÿQ$ôuÛ¡®!µvßý”šAHi?­³‹ÙEšªîet7Ü^¤kå™{ðàáÝB›ël5ò‹¸Î¶í¸JmG.×XZÕK`Ík¤ò»ÝÓ‚¥r™6ÝŽž-QÜ ›n—Н{e´Ôk*§”ÓЮX»¯ŽQæõÿ\¹É£îÒp3]ïë \ é2y Â1hP¡œ6( AÙøc~"~¹-HÑ*”1QHVïÓq)æÊ¤‹.ªßGORk™I J9 GW)¬š„#*R¹Ìâ\ ß|ݵ‰$„4p ‹¥´¢ûˆ'4|ŽE:ï",SöÑW‡Å•HB'ì£i•b›6¹¬C4¥ãš6¹ŒC,¥QLdKT'ªƒ]²PC~$Ç¡˜±š™`/Syx+£ë ]FG×A£RÙU×à• î+PÅ2è!z¢ϯbØtIFT£¬^Ýj¢vf‚gž=ÉtÁaøæÃÞÄœ}“ï¿xG‹3¾ÿîÛ! ¨n]XFž o½ÎÙù ]G²k¤¥a×âØsG8±\Dh1yð~üÅiŽ>ŒÓ“þ­ûyßþ!^=v‚W¦Ts Üw÷AFbqF%‹à¤Ê@*EoHaùä›y}’åT„›ÃäV¦yñØkLfF·pç71Š êHéÊå-#Çù“/ó³7—P¢Üzçì Í11k²óîqüUé*© ããaÁŠ oª?D)'8­22 Q^0( Ž<5…ƒ‘ÛF¸7Uä…ç–9·h“Ø5È}7EIlJ@y9Ûtνû(+iÿÉ ¶åâºFÖàÔÑNô1Ü£lŽ¿´ÈñI™åL‘»ï!XÈòü3‹Ì£{ú¸ç–(“OMr™r 6eÿˆN+ã~æÜ GeYîÓ¹u\ÃÌyýé [ž±^Þ_ŠhcápþµE–F¼þø4ûïHš_"Wrxë•9^waèÀFdVßšçé7Ѝ±07Ý=Än–øÙÏËèØd‚=Ükiy…'žËàè:[oâžzÓJ)¿˜ç¹§V9ôñÍ”¦3¼›íýµHÖæýÓ´ §6±oß ô%N¼xœ'§ 6Ç3g9½{‡oÙB!ÖÏï P5SX’DNG’dR»p§äðÄ|¥ÝDÿ°˜’FÙ3'PWükO}y~‚ï?y ßP¥åY~q|‘íÛO‘ñõs8ÒÉ¡¨º#Z¯'Uc>j|>’$¡u>üÑ”§–øñ+Ž‹ÞJKƒ §^Xb禩`ƒ™F¸¼þÓiÞZY;gK4oj…ýÆv|+ižþišP2Äm÷3y®RMñû8t F!âû’$—Çs˜7oá÷¶º¼üä"/-Gèql"ã#|d_Yê¼O”Ú;Èm’ËOgÖ"•Fö pËîh³¢¨\`RâÜ™[,æ ᜿ÏdÛÝCÜØ18g”9úãe´Ñù¥<Ï¿RbÇMà ¸ãþ>z|ŸËðô3‘0"Sâõ£+Ü5>XITE4ég×N‰åŒIi¾ˆ²¯—¥ç&( ò™†yõ›§9NÐKÅ” DgFbÓ4™žžÆ0Œú}6Âçó188H8nâ’òpí£-(0ÎÚÖ™Ž3 P Ùü+!­sÀTlÂ’/Èè°JOÙäÍó94\ ¹<›úQŒ<“ «Ø½W9‘`jl+o‹05=Ão„¸9.ЂIî9tqŸ‚¤ðIUeQ#þ« Ôªp@àXeÒe™hPÃ'û¸ùÐAúçf˜xýybƒ Ú±“÷$%•hDA.É—T¬uëEíúRC0&R¤°öW9G%æÞ÷ãWdd=†Zò!¹.N­Á‹l‚7BQTUÂR$dá"$™±=)ö‡p™To‡Øš–s¢>›© /c©Â‹Ðì*!D…J¡J›Ð‹Z $]—«Š¢•Ê¡õ™UÚÖcAn8<ʙӫ¼ô‚Íí÷ôRïvµ¾¦«˜³Ev…89ocûƒø|~MFRª–d‚‰w¿o¿"!ûud;‡êS ¨rÕáM û¹ûÞabš„¤ªh-0²ßG¼?ÂksYŒ¬Ê »}È3ÕîH µ˜›Ûí´Y‰eY”J%¶n]sdw×uq]—b±Èää$}}}¤R)Oa\Gèh¦¼ˆí²¶gj<è÷I®0]¡ëº8¶…/&¤«X†„mÙ¸Ž ò¥àÕ«XÀ‘uR½)Ž/!¥‚ …0L[‘Q§”#Í‘7Ë,¦ øâ!|T•n½%‡üÊ?ëãƒûGé÷ ò„¢qú‹ Dqüsil'†O‘Ðdô’•åÂü c©D•:¥ÖvE9ç2iV³EŒb–U#EB—Q«‹+,UúaŒlšÕ\£˜!m$ÐQ6'l ÛE“%ŸŠê"èÎ3St‰…•f7¨TõHƒ‡×ÚJG–%F7ûYÌ»˜®@Bn߈–$F6û™Î­£T"}:3S´l‰œ–a‘Y.cd!ÑIø5d]C¶L¦æ FS:á¤ÒÙ,S²C»£E©¹O_5Hg,Ê…2éb ä’3 $ÈÊ›e²6kÊ¢z§>ŸJ —&ÞŸB;—¡<Ç¿’oºV(¬1ÖãR¶\4EFÖ$$›¦¾øƒCÆéV”f+põ’ ¡h€ó¿8ïçpDÆá\08?-1!ìŠëh(ÌÍPÒE²vg7ÆÆÕ`MˆêÄ"‘H ª*«««D£Qt½jƺlŽ%ï5˜NÇwÜÙ^ Hþ±ý{Fÿí—žEVbµï[RçkŸÚJDo'£»8‘ T¦W.%ìÒëø$p]‡|ÉB £éõê&¬™Œl#Ër®ŒíJ„bq"ºŒ°*Ü®¬ňJEÒÅ2¥²ƒŒˆÑÁâj‰H$€ßWáÆ²Ë%K=?š,X^YÁ°’¢Ò›ˆ# ‹B.KÖpÐa’ñª°I§+ʤ'YQµXÌ9Ä•\!ÙtšBÙÄte"ñ81¿É1YXÉ ûüÄbeQ,›˜B&KÑ$³²Á-)‘xœˆêræÄ <}NçSߌ_¦mu!„À4,2E‰TREX…¬E0éÇ-Ûd LH䪛×j@'UÑ”o¤† îÊ9 JuÓW’e4Y"’Ée- t¿J,®¡I.Ù•2 ’)?ªp(dL #:±ByÕÀ jDürÇñ [5(¦+Iø *.ùU“²=¨‘ˆ©È Qc9äÒ&Á¤N)ka4䜉?¦P‹Y—hHF²*Ü’ªŠû K&Ù’L4ªV§À6m—M„$ãè$Cr›7”°-þå+çè?<ÂíA$á’˘äJ.zH'’Á¶ëÏÌ6ò”ílH ŸÏ399Éøøxý¸®‹eY8ŽC Pù> Ã@QB¡Ê¼±ò¦\Ìbš3ç@Eñ3UWBaL¾öõ _üÝO!Ú¹ËÕ5w×ÖYä• ™€¿9­ª,«DCʶûîN1á²áIDATCõGé÷·Ô‚ 4:Eé ¶œƒDo2Ôô[Õƒ êk¿{zR­ M¤ˆ6’Tâ‰â‡d}kÙ[ˆÆÍuT¾ÞúO=ž ÖzJ ÊH ±¦ÂÈæíÜ­ÎcÙ.þVÛH­—~½Õg"ù"=¿âWIUÇ’¶ëUkd¥ýEe` yÍh5aÉÄzë©ÄRjS;þ¤ŸÖWÖŠHÂO¤¥]}àâžäŠO!Þ[ÕZ¢ú"ýµ*ѯ>/ŸÎP°q£Y#Þtªæcp°;õmÚ¬Ì($HVsÖK2‘¸ŸHã`P*í!ÈfMÊKÛ«%ÞB WsI²D¡X@–äú±&£’oú¨ÄC7¦(Ÿy–9ÿ0Ÿ¾{}ºT5Ók›|½ñE~•躲Phr—åÊßúp±Qñ^1×ßBàô°cwO×s6b6ù«œ‘®÷ÚïvŸ‹é/Y`ó]côÅÕ ëCMa(ŠÂ|ö<ÿ÷¥¿æðøÇÙÕG6„û7±uç.“üðtŽ|z†ô[ßÃÚöÛìê³™:þæ“÷^xšG¿3Íþ}IòE›Øžñ±;¹ÇJï$.Óµº¦,šüíªL`ÝäP×W÷µϬpõ ÚãÁߪ¬—6âµÔÞ­i—˜ÏNàÁlúe·Ìß|M3Þ··CMAnö<§_OS8y’Í[n&¬Z̬Na6®kQÌΑ X°:Çùé"úÄô‘Çø»oýœ‡|Œ€7®®JÌå;."Vº_ç„’:HŠË5[k‰ sV —@,ÎhBC*8=›G¨‰ž#/o´°–KbãÛžËNð£×¿Šæ á—žð(ùržÿõìŸóÙþ;{÷#·åe8¶I1_"ÒðÉUßüj»pŠIJ !¬«øCQôâ,´<\€Ùž%Op1eáë—7z†oe–Ȉ;7yí­¢¾j!Mÿð0r1Íéé ƒ»z6škă—€+>5ˆ+ l›d,²¬Òåžûÿþ¿b4±e­‚$ÜÄÎýãƒ|þŸbkø=ÉÞš8C¸Pæô‰sèýUÞ1©’&µÙÐÃÕˆŽ¾PÒE"¸û>ö_w´¾×THݘ¥/ JЦNDTsĹ«XÀ^žhÞm¸Âe¹°€¦†°…‹"û(ZS«Süþ]ÿ¾È`ÃÙ2Z ÎP"ˆ_ó“ÛÇMêOYÈ`ï®{8÷wßd" £ù·rWP#I±y$† øÃ 69W9¥ÏõËuU‘ÚG‚­Yy.¾XЏ‘ãÌ”AÙ•P5H(ɹù%lËB’:ø•{ðàaÃÑJÞ8ÛÂÃ7þk\×åìò›|ûø—‘ðóé›ÿ„#÷ « â@òÓ»í¿¿­ÖN„OýÙçêÅö_>×x%Øú7ÜVq Ù´÷>>»Ç 1—kÏq$St#ìÄ̼þ÷[àVŒûqm“ ~Ÿ†?¤²;fyy…‚S!vó†‘ï,|>Ñh”éééú±=!ˆ3„í(¼óGíA×*~.õ=“Êf—”‹ ‡æ2OQ\½èFÃ%\gÛ"”+õueΞ[`¶à0²iD@Á(æ8~z %aû–¸·<õàá]€¦iŒŒ´²XV„ÅcÜwßÐûxx¯âBÆ"m8—UG•`GëÁðæÉ–| öÒãB(¨¡JŠ?È®­ƒ(>AýÊÌ\b‘f%$½“¦¨Î49<\UI‚ÖÛ“Ö[èfVð(Ê=tBëPB„Kæé¯¬t³O©Ò^Êémhhˆ¾Þº~eô•ô­ïÌ*#D‘¯p…tâj¦°>zñd|W€aw°µ2·­•2Gt|F¶[ñ0ét½‚é²T´ÛÝM—å¢Óñz™²CÆpÚ‚@1ÜJYµðÆ„à“;š¿'¢ÜÃ¥Pû 8·cþm¨ìY Ò"ñ5õâêB×õ5vÊ«ŠòÎöïj¨5;];^i†Uù·ù¼Z™[ÍA-J*†]«×.üjm¶^Ïr³Y«F¢ÞTÉvsY»ãõ,W0—³Öòa7ôÒts9›Ö'$ueÑéÞ+ Áí˜Jµ®d:ýº²h/Z.·^\–-ÎE¹‡¨~JõQ,@·\8*ÌÒD·J*0Ðzp Ü=\îí¢Ë¦ï¤ðu×ÓøbeaÔa ÔÊDÇÙ¢áT„N§{6ìJY§ëÍæ¬ªot³0æs–K›0T\ä,W´ S!`.gWÊ …¸¸`¯(·=yJ«’iígc›ÍEëÂÕ£®¯t~"—¢(W…•••÷8Ey‡Ubƒ½Ó·v=+Ĥj1.¼¶,*Ÿ©¿XùÉÿù¢9¦ %¨¢žìtíÁU–ÛâÒIw.!Lå.K}[ˆJ¸yaj‹jÀH‡ XUáÖ~½Œá6œŽ³¾¬á1:›–Š6EËí¸Ô_.ج6±ˆ¨öÑî°h«+’Nœu…ЩŸue±³SO˜z¨¡Î4[ýÚ]×­3Ð& ¶m·X .FQ.¸z6× )ùÕ–íc½x‡…K:S$¢¯›ûî½ Äý±¥¿ü‹¿ý½tݪ0µ)bw¨RK–<üè—Y&WÍ:é°éæòVGaZ0ËÅÎK}[täAˆª²èA(D}9ßI˜ZŽ¨Î ÛŠÖO ^hü*Ú&£]þšçíõDײKwg]¨~ä•¡B¯¡ÔÜ:Ú¤xGŠrI¦P("ËÒ;LQ¾ÖåÖù_[­ùS. QO-[Ì,3cèŒöèHR³qJ |áü€‡>ýanÛÞ‹\Ux×ãC’×­ŒŸ·ØÙzðǧsüøt®Óë÷p=@4¢¢ñk-µéC-µSb¬ËïÍz*­I™Ë´êâ(¶VûìÅýo¨×ºB•„0K–¹p¶ÜÉŠä€ù%Èó— Bì¶ÒÞO°VçV³Oeá"É2·}þ¿}H↿ä"Sþ&Šò‰,ßøë¹ç7·³ëŽþwœ¢¼<û?zæ$Ó+,ß(ï{ð[9ýÚw)£ŒöòÈGTHùÓ?៟ü%GAï½…ÞF°x†o}ïyÊ’pj¾©È׿;Cd0E|ç]D§_â盦¾Ì×O¨ ôPLç½å0· d8yüYÄ?ÛÌÞz½oÏ{"µóÕºç‰ñEw4ÊSÑ25Yïìô žøú­Tõ™E›,Ô„©h¨õ2!šçkõÚæ!„¹x®(ÌR§=s˜ܶé(Xõ²Ö{ õW B`§gË™§j=‰feÑŠzYU×UÉ 0K¶¹pÎèÒæzн^ý Vþ•e™˜Tï6K®S”—læ&²¸®ËÌD†rYðƒ¯žD ËŒïíëØ…¢(WB#Üx{’F‘ýÍxnlˆÞM%f";xäÐ>6÷„‰ø«áºÂeá…3+ä7¹“d „nÏñêSß yÇ¿ã{ð óìcÌ/çÙþ‰?äA‰£çÒÌ®”1¥ –²{øÈ|Œä‰ÿÍß9ÎÎÏd`ô&ÞÿÐúaÀ˳q™PY` ºñµa¯qŽÙ:CkL6ßzÅÆÙÍÍL×_±.$;ؽ*  Í²Úo°»ÌN‹•FÛízUaÚq¸”;ôÑ¥"0­–ô!efÛMᦟùꔽ:kµº<‰FeÑÞzYKNs½Æç"«ª,Úooƒ·eZ„©‡ æ&²<ñ•×ÑB>×¥g4L>_æþçgø“Ï?ÀÞÛÃÈm Ÿ@Q.,Ž=öEŽîà»v02˜È;Ä7ÝÄG—žç­'¿Á÷ÎÌó‰Ï~Žñ¾ ²¤°é#Ÿå×Þ8É+?úæcÓp’ëw›ûò¡Nýí'ÜyðáÄ=¿û~$I¥ÕrR¦e*³Ú6Éb§gòé§ï"LkÊ¢õ².´³’©,õMkáœÙ¥ÍõÀ›z¸nà ÁòB-¤b».ŠO¦hXLM­ò¯þãAú3“o E¹ì㦇àï¾Ê7¿óKâC›N)g¦ùÖ×cµ¬ÚÃ#©P5Ï ?ñÿô ¦ .#÷~‚Ý»÷’ÚÙËS_ø"_~b£7òG÷2Ч~Nö³Yø‘IÊsì[ÿÀ¤»‰_ÿôí cù}.Ì”ùãÏÜ‹Ç<ôöÑ·]µ ½}Û'L=x¸* Ë2=öاn½õÖ¯ŽŒŒÈ5ØB¡ÀùóçÙ±£BW.ÚLž^Áugß\æÛ_>†¤ÃoþÁ>=0N$¼”ªîß­Tçí¨ÕXó.jîëÊtÚÐLʤÍõ\BjµùÖŽ¯UÂu]¦¿õç|ÓxˆóÛ‡Ñe©²‚¤†6¥º¸»Ö½¡„”Ëe&&&$ºGýƒ>ævØnCCô¨ Oò{ðp Ey°§"@âC`+xd3ã{c躼“å—)˜;î-\z¿A–úïÿc>éÆñ+ró…·_±nx™M=x¸ÆP‹Î–$éâåcpè¾}u~éÕÃ{Zrtšâ’Ñè×6jãáJá) ®Ôëëô<4N®ž²ðàáßïÇ0 æçç»R’CEx¸Ž…UΡ“õ@½Âµ°2y'°‘ÊûrÛª± «êúE¾§,"‰MïRïÞ]4Þ¿gŽkpZ$ÇŽãt_zvkcÃ{åÁƒ‡_ n¸á†h(ºC…`Tາ¢yÂô:ƒB …™7Þx#{9õþ?$).TèýÊIEND®B`‚iep-3.7/iep/resources/style_solarizedlight.ssdf0000664000175000017500000000000012271043444022257 0ustar almaralmar00000000000000iep-3.7/iep/resources/defaultConfig.ssdf0000664000175000017500000001020412550703310020567 0ustar almaralmar00000000000000# This Simple Structured Data Format (SSDF) file contains the default # configuration for IEP. The user configuration is stored in the IEP # application data directory. # Some parameters are named xxx2. This was done in case the representation # of a parameter was changed, or if we wanted to "refresh" the parameter for # another reason. This enables using the same config file for all versions, # which means that users that start using a new version dont have to recreate # all their settings each time. state = dict: find_regExp = 0 find_matchCase = 0 find_wholeWord = 0 find_show = 0 find_autoHide = 1 editorState2 = [] # What files where loaded and where the cursor was loadedTools = [] windowState = '' # Of window and tools windowGeometry = '' # Position and size of window, whether maximized, etc. newUser = 1 # So we can guide new users a bit view = dict: showWhitespace = 0 showLineEndings = 0 showWrapSymbols = 0 showIndentationGuides = 1 showStatusbar = 0 # wrap = 1 highlightCurrentLine = 1 doBraceMatch = 1 # Both in editor and shell codeFolding = 0 autoComplete_popupSize = [300, 100] # qtstyle = '' edgeColumn = 80 fontname = 'DejaVu Sans Mono' zoom = 0 # Both for editor and shell tabWidth = 4 settings= dict: language = '' defaultStyle = 'python' defaultIndentWidth = 4 defaultIndentUsingSpaces = 1 defaultLineEndings = '' # Set depending on OS autoIndent = 1 autoCallTip = 1 autoComplete_keywords = 1 autoComplete = 1 autoComplete_caseSensitive = 0 autoComplete_fillups = '\n' autoComplete_acceptKeys = 'Tab' justificationWidth = 70 removeTrailingWhitespaceWhenSaving = 0 advanced = dict: shellMaxLines = 10000 fileExtensionsToLoadFromDir = 'py,pyw,pyx,txt,bat' autoCompDelay = 200 titleText = '{fileName} ({fullPath}) - Interactive Editor for Python' homeAndEndWorkOnDisplayedLine = 0 find_autoHide_timeout = 10 tools = dict: ieplogger = dict: iepinteractivehelp = dict: noNewlines = 1 iepsourcestructure = dict: showTypes = ['def', 'cell', 'todo', 'class'] level = 3 shellConfigs2 = list: # Empty, let IEP create one on startup shortcuts2 = dict: edit__comment = 'Ctrl+R,' edit__copy = 'Ctrl+C,Ctrl+Insert' edit__cut = 'Ctrl+X,Shift+Delete' edit__dedent = 'Shift+Tab,' edit__delete_line = 'Ctrl+D,' edit__find_next = 'Ctrl+G,F3' edit__find_or_replace = 'Ctrl+F,' edit__find_previous = 'Ctrl+Shift+G,Shift+F3' edit__find_selection = 'Ctrl+F3,' edit__find_selection_backward = 'Ctrl+Shift+F3,' edit__indent = 'Tab,' edit__justify_commentdocstring = 'Ctrl+J,' edit__paste = 'Ctrl+V,Shift+Insert' edit__paste_and_select = 'Ctrl+Shift+V' edit__redo = 'Ctrl+Y,' edit__select_all = 'Ctrl+A,' edit__uncomment = 'Ctrl+T,' edit__undo = 'Ctrl+Z,' file__close = 'Ctrl+W,' file__new = 'Ctrl+N,' file__open = 'Ctrl+O,' file__save = 'Ctrl+S,' run__run_file_as_script = 'Ctrl+Shift+E,Ctrl+F5' run__run_main_file_as_script = 'Ctrl+Shift+M,Ctrl+F6' run__execute_selection = 'Alt+Return,F9' run__execute_cell = 'Ctrl+Return,Ctrl+Enter' run__execute_cell_and_advance = 'Ctrl+Shift+Return,Ctrl+Shift+Enter' run__execute_file = 'Ctrl+E,F5' run__execute_main_file = 'Ctrl+M,F6' shell__clear_screen = 'Ctrl+L,' shell__close = 'Alt+K,' shell__create_shell_1_ = 'Ctrl+1,' shell__create_shell_2_ = 'Ctrl+2,' shell__create_shell_3_ = 'Ctrl+3,' shell__create_shell_4_ = 'Ctrl+4,' shell__create_shell_5_ = 'Ctrl+5,' shell__create_shell_6_ = 'Ctrl+6,' shell__create_shell_7_ = 'Ctrl+7,' shell__create_shell_8_ = 'Ctrl+8,' shell__interrupt = 'Ctrl+I,Meta+C' shell__restart = 'Ctrl+K,' shell__terminate = 'Ctrl+Shift+K,' view__select_editor = 'Ctrl+9,F2' view__select_previous_file = 'Ctrl+Tab,' # On Mac, this is replaced by Alt+Tab in iep.py view__select_shell = 'Ctrl+0,F1' view__zooming__zoom_in = 'Ctrl+=,Ctrl++' view__zooming__zoom_out = 'Ctrl+-,' view__zooming__zoom_reset = 'Ctrl+\,' iep-3.7/iep/resources/appicons/0000775000175000017500000000000012573320440016757 5ustar almaralmar00000000000000iep-3.7/iep/resources/appicons/py.ico0000664000175000017500000004651612351020416020111 0ustar almaralmar00000000000000 èv(^ ¨†h. 00 ¨%–  ¨>8 hæH( @€€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿppÿÿÿðˆpƒ33ÿÿøpø3388ðÿÿˆøÿˆó33ƒðøÿÿÿÿÿó3333ð÷ˆˆˆÿÿó33ÿÿÿÿÿÿÿÿÿøDó333338ðøÿˆÿ„Dó333333÷ÿÿÿDDø333333?ÿÿÿˆDDƒ33333?øÿÿÿDDHÿÿÿø33?÷ˆøDDDDDDƒ3?ÿÿÿÿÿDDDDDDHó3?øˆˆ„DDDDDDó3÷ÿÿÿøDDDDDDó8ðÿÿˆˆÿÿÿÿøDDÿÿøÿÿÿÿÿôDDDDð÷ÿˆˆøˆô„DDðÿÿÿÿÿÿÿøHDDHðøÿÿˆˆÿ„DD÷ÿÿÿÿÿÿÿÿÿ÷ÿÿÿˆˆˆˆÿxðøÿÿÿÿÿÿÿÿÿð÷ÿˆˆøˆ÷ÿÿÿÿÿÿÿ÷ÿÿ÷øˆˆˆˆ÷øp€÷ÿÿÿÿÿ÷ø÷ÿÿˆˆˆøˆ÷ÿp€øÿÿÿÿÿ÷÷÷ˆˆˆˆˆ÷p€ÿÿÿÿÿÿÿ÷wwwwwwww€üÀà€?€€€€€€€€€€€€€€€€€€?€?€?€?€?€?€€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ( À€€€€€€€€€€€€ÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿp€p€‡ÿÿðxpxÿƒ3ÿ38?ÿÿÿ3ÿÿøO3338ÿôOƒ333ôHÿÿø3ÿôDDD3øDDDO8ÿÿÿÿ„OÿøHDOÿÿÿ„Dˆÿÿðÿÿÿ÷÷€wwwwwx~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ( @€~dF¡u?¦w>«z=³~;ƒgEŒkC”oA›r@»:­€Išb·˜pÆKУk(¾ÿ,Âÿ1Æÿ?Äÿ5Êÿ<Îÿ\ÍÿCÔÿKÚÿQßÿsßÿUâÿ[çÿcàÿbìÿœœœºººÓð‚ñÿµðÿÅÅÅÊÊÊÎÎÎÑÑÑÕÕÕÚÚÚÝÝÝïåØÓòÿàààæææéééîîîôïêãùÿñññõõõùùùþþþÿÿÿÿÿÿÿÿÿÿ((&&&&)2,&&/..)).($$&)ÿ,,ÿ)./......)..))ÿ,,ÿ.3()/$&&&)(&$&&ÿÿ.3$&/&()(.).ÿÿÿÿ#ÿÿÿÿÿÿÿÿ.3/////////+ ÿ,.3()///.$/ÿ  ÿÿ.3$&////(/ÿ  ÿÿ.3////////ÿ1"ÿ.3()////&/ÿ 1ÿÿÿÿÿÿÿ2ÿ.ÿ$&33//)/ÿ   2ÿ.ÿ333333//ÿ  ÿÿ.ÿ()3../3)3  ÿÿ.ÿ$&3).)3)3+  ÿ2.ÿ333333333ÿÿÿÿÿÿÿÿÿ!ÿÿÿÿ.ÿ()3&(3&()3)/3ÿ ÿ.ÿ$&ÿ)./../3/33ÿ ++ ÿ.ÿÿÿÿÿÿÿÿ333333ÿ++  ÿ.ÿ(.ÿ()))ÿ/)3/(.+  +.ÿ&&ÿ../.ÿÿ3ÿ3.)3ÿÿÿÿÿÿ3.ÿÿÿÿÿÿÿ3ÿÿÿÿÿÿÿ3333/.)&.ÿ(.ÿ/.)(../.33/333/$$&&.ÿ&&ÿ.//./3..33(&(&&((.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(ÿ3/.).)3.ÿ(.ÿÿÿÿÿÿÿÿÿÿÿ(ÿ($/$&/.ÿ$&ÿ)//.ÿÿÿÿÿÿ(3$ .$/.ÿÿÿÿÿÿÿÿÿÿÿÿÿ3&.//./.ÿ()ÿÿÿÿÿ//.)&( ././.ÿ$&3)//).3/.)& /./.ÿÿÿÿÿÿÿÿÿÿ33.&).////////////////3/ÿÿÀø€?àÀ€€€€€€€€€€€€€€€€?€€€€€€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€?ÿ( @~eG§x>ˆiE˜rC´‚E°š~7Èÿ?ÑÿH×ÿVâÿbìÿxâÿ«««³³³¼¼¼ÕÀ§›çÿ°ðÿÄÄÄÉÉÉÎÎÎÞÞÞäâßåååìììòñïãùÿöööùùùþþþÿÿÿ          ?ÿ<?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ?ÿ(0` €% !!$& &"   ŸŸŸWâââ»ïïïæîîîçëëëâíííåëëëßôôôïðððäÜÜܱÇÇÇ‹+<<Ñÿÿ:Îÿÿ5ÊÿÿpØÿÿöüÿÿiÓÿÿ$¼ÿÿÿÿÿÿøøøÿ!!!4888&ïïïÿïïïÿîîîÿîîîÿîîîÿíííÿÓÓÓÿÈÈÈÿèèèÿìììÿÑÑÑÿËËËÿëëëÿëëëÿÏÏÏÿÛÛÛÿ¿¿¿ÿÉÉÉÿ¿¿¿ÿÉÉÉÿÊÊÊÿÿÿÿÿSáÿÿNÞÿÿJÚÿÿF×ÿÿBÔÿÿ=Ðÿÿ9Íÿÿ5Êÿÿ0Åÿÿ,Âÿÿ(¿ÿÿÿÿÿÿøøøÿÁÁÁ‘%%%5ÇÇÇŽðððÿÇÇÇÿïïïÿïïïÿîîîÿîîîÿîîîÿÞÞÞÿíííÿíííÿíííÿìììÿìììÿìììÿÐÐÐÿÞÞÞÿàààÿïïïÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿVäÿÿRáÿÿNÝÿÿIÚÿÿE×ÿÿ°íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿÿÿšùùùÿñññÿñññÿñññÿñññÿðððÿðððÿðððÿïïïÿïïïÿïïïÿîîîÿîîîÿîîîÿíííÿíííÿíííÿìììÿìììÿìììÿûûûÿѹÿ¥|Jÿšq?ÿ–o@ÿÿÿÿÿZæÿÿUãÿÿQàÿÿMÝÿÿIÙÿÿDÖÿÿ@Óÿÿ<Ïÿÿ7Ìÿÿ3Éÿÿ/Äÿÿ+Áÿÿ&¾ÿÿ"ºÿÿ-¼ÿÿŽÜÿÿþÿÿÌùùùÿÉÉÉŒ444"ÖÖÖ„ñññÿÈÈÈÿñññÿðððÿðððÿðððÿéééÿ×××ÿïïïÿîîîÿîîîÿîîîÿîîîÿíííÿÒÒÒÿëëëÿßÌ´ÿ§w<ÿ£u=ÿžs>ÿšq?ÿÿÿÿÿ]éÿÿYæÿÿUãÿÿPßÿÿLÜÿÿHÙÿÿCÕÿÿ?Òÿÿ;Ïÿÿ7Ëÿÿ2Èÿÿ.Äÿÿ*Àÿÿ%½ÿÿ!ºÿÿ¸ÿÿªåÿÿÿÿÿùùùÿ"""4888&òòòÿòòòÿñññÿñññÿñññÿðððÿçççÿÍÍÍÿïïïÿïïïÿÓÓÓÿÍÍÍÿîîîÿîîîÿÒÒÒÿüüüÿÀ—dÿ«y<ÿ¦w=ÿ¢u=ÿs>ÿÿÿÿÿaìÿÿ\éÿÿXåÿÿTâÿÿPßÿÿKÛÿÿGØÿÿCÕÿÿ>Ñÿÿ:Îÿÿ6Ëÿÿ1Çÿÿ-Ãÿÿ)Àÿÿ%¼ÿÿ ¹ÿÿOÈÿÿÿÿÿÎùùùÿÃÃÑ%%%5ÊÊÊŽóóóÿÊÊÊÿòòòÿòòòÿòòòÿñññÿðððÿßßßÿðððÿðððÿðððÿïïïÿïïïÿïïïÿÒÒÒÿþþþÿµAÿ®{;ÿªy<ÿ¥w=ÿ¡t>ÿÿÿÿÿsïÿÿ`ëÿÿ\èÿÿWåÿÿSáÿÿOÞÿÿJÛÿÿF×ÿÿBÔÿÿ>Ñÿÿ9Íÿÿ5Êÿÿ1Çÿÿ,Âÿÿ(¿ÿÿ$¼ÿÿ(»ÿÿÿÿÿ÷úúúÿõõõÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿòòòÿòòòÿòòòÿñññÿñññÿñññÿðððÿðððÿðððÿðððÿïïïÿÿÿÿÿ·9ÿ²|:ÿ®z;ÿ©x<ÿ¥v=ÿõðêÿ×úÿÿsïÿÿ_ëÿÿ[çÿÿWäÿÿRáÿÿNÝÿÿJÚÿÿE×ÿÿAÓÿÿ=Ðÿÿ8Íÿÿ4Éÿÿ0Åÿÿ,Âÿÿ'¿ÿÿ#»ÿÿÿÿÿÿúúúÿÌÌÌŒ555"ÙÙÙ„ôôôÿËËËÿôôôÿçççÿóóóÿæææÿóóóÿòòòÿçççÿÜÜÜÿäääÿäääÿæææÿãããÿÔÔÔÿÿÿÿÿº€9ÿ¶~9ÿ±|:ÿ­z;ÿ¨x<ÿ¼™oÿôïéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéúÿÿmÛÿÿ8Ìÿÿ3Éÿÿ/Åÿÿ+Áÿÿ'¾ÿÿÿÿÿÿûûûÿ"""4:::&õõõÿõõõÿõõõÿ×××ÿóóóÿÔÔÔÿòòòÿóóóÿæææÿÑÑÑÿÏÏÏÿÌÌÌÿÐÐÐÿÎÎÎÿÕÕÕÿÿÿÿÿ¾‚8ÿ¹€9ÿµ~:ÿ°|;ÿ¬z;ÿ§w<ÿ£u=ÿžs>ÿšq?ÿ•o@ÿ‘mAÿŒkBÿˆiCÿƒgCÿdDÿ‹uZÿÞ×Ðÿéúÿÿ;Ïÿÿ7Ìÿÿ3Èÿÿ.Äÿÿ*ÁÿÿÿÿÿÿûûûÿÇÇÇ‘%%%5ÌÌÌŽöööÿÌÌÌÿõõõÿÕÕÕÿòòòÿÊÊÊÿæææÿôôôÿçççÿàààÿåååÿäääÿäääÿêêêÿÔÔÔÿþþþÿÈ>ÿ½‚8ÿ¸€9ÿ´}:ÿ°{;ÿ«y<ÿ§w<ÿ¢u=ÿžs>ÿ™q?ÿ•o@ÿmAÿŒjBÿ‡hCÿƒfDÿ~dEÿ‹uZÿÿÿÿÿ?Òÿÿ:Îÿÿ6Ëÿÿ2Èÿÿ5Åÿÿÿÿÿ÷üüüÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿóóóÿóóóÿóóóÿòòòÿýýýÿОaÿÁƒ7ÿ¼8ÿ¸9ÿ³}:ÿ¯{;ÿªy<ÿ¦w=ÿ¡u>ÿr>ÿ˜p?ÿ”n@ÿlAÿ‹jBÿ†hCÿ‚fDÿ}dEÿÿÿÿÿBÔÿÿ>Ñÿÿ:Îÿÿ5Êÿÿ^ÓÿÿÿÿÿÎüüüÿÏÏÏŒ555"ÜÜÜ„øøøÿÎÎÎÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿôôôÿóóóÿøøøÿèѳÿ„7ÿÀƒ7ÿ»8ÿ·9ÿ²}:ÿ®{;ÿ©x<ÿ¥v=ÿ t>ÿœr?ÿ—p@ÿ“n@ÿŽlAÿŠjBÿ…gCÿeDÿÿÿÿÿF×ÿÿAÔÿÿ=Ðÿÿ9Íÿÿ³ëÿÿÿÿÿüüüÿ"""4;;;&øøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿýýüÿáÁšÿÅŒCÿ¿ƒ8ÿ»€9ÿ¶~9ÿ²|:ÿ­z;ÿ¨x<ÿ¤v=ÿ t>ÿ›r?ÿ—p@ÿ’mAÿŽkAÿ‰iBÿ…gCÿÿÿÿÿIÚÿÿEÖÿÿLÖÿÿçÿÿþÿÿËýýýÿÉÉÉ‘&&&5ÏÏÏŽùùùÿÎÎÎÿøøøÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿõõõÿõõõÿõõõÿôôôÿõõõÿûûûÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×Ä®ÿšq?ÿ–o@ÿ‘mAÿkBÿˆiCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÿÿÿšýýýÿûûûÿûûûÿúúúÿúúúÿúúúÿùùùÿùùùÿùùùÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿöööÿöööÿõõõÿõõõÿõõõÿôôôÿôôôÿôôôÿÿÿÿÿ¹€9ÿ´~:ÿ°{;ÿ«y<ÿ§w<ÿ¢u=ÿžs>ÿ™q?ÿ•o@ÿmAÿŒkBÿÿÿÿÿþþþÿÑÑÑŒ555"ßßß„ûûûÿÐÐÐÿúúúÿàààÿìììÿíííÿïïïÿÝÝÝÿåååÿéééÿøøøÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿõõõÿÜÜÜÿæææÿëëëÿÞÞÞÿÚÚÚÿÿÿÿÿ¼8ÿϦuÿüú÷ÿÇ£vÿªy<ÿ¦w=ÿ¢u=ÿs>ÿ™p?ÿ”n@ÿlAÿÿÿÿÿþþþÿ###4;;;&ûûûÿûûûÿùùùÿÛÛÛÿÛÛÛÿÖÖÖÿèèèÿÍÍÍÿÚÚÚÿÂÂÂÿöööÿøøøÿÑÑÑÿ×××ÿ÷÷÷ÿ÷÷÷ÿØØØÿÜÜÜÿÔÔÔÿÎÎÎÿËËËÿþþþÿÄ‹DÿÒ§uÿüúöÿʤvÿ®{;ÿªy<ÿ¥v=ÿ¡t>ÿœr?ÿ˜p?ÿšxMÿÿÿÿðþþþÿÌÌÌ‘&&&5ÑÑÑŽüüüÿÒÒÒÿüüüÿìììÿßßßÿìììÿñññÿèèèÿôôôÿöööÿ÷÷÷ÿùùùÿøøøÿøøøÿøøøÿ÷÷÷ÿÚÚÚÿìììÿèèèÿîîîÿæææÿûûûÿáÁšÿ¿ƒ8ÿ»8ÿ¶~9ÿ²|:ÿ­z;ÿ©x<ÿ¤v=ÿ t>ÿ›r?ÿÌ·Ÿÿüüü›ÿÿÿÿþþþÿþþþÿýýýÿýýýÿýýýÿüüüÿüüüÿüüüÿûûûÿûûûÿûûûÿúúúÿúúúÿúúúÿúúúÿùùùÿùùùÿùùùÿøøøÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿõõõÿ÷÷÷ÿýýýÿèѳÿÍbÿ¼…@ÿµ~9ÿ±|:ÿ¬z;ÿ«}Cÿ·“gÿÛ˶ÿöõõÓÿÿÿÿÔÔÔŒ666"ááá„þþþÿÒÒÒÿýýýÿâââÿíííÿßßßÿôôôÿáááÿøøøÿûûûÿûûûÿúúúÿúúúÿúúúÿâââÿêêêÿëëëÿçççÿÝÝÝÿáááÿ¿¿¿ÿëëëÿãããÿôôôÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùùÞîîîÿ&&&2ÿÿÿÿ###4<<<&ÿÿÿÿþþþÿüüüÿÞÞÞÿËËËÿçççÿÊÊÊÿòòòÿûûûÿüüüÿ×××ÿÐÐÐÿûûûÿúúúÿÝÝÝÿêêêÿÎÎÎÿÖÖÖÿÍÍÍÿÖÖÖÿØØØÿÑÑÑÿÔÔÔÿ÷÷÷ÿ÷÷÷ÿ÷÷÷ÿöööÿòòòÿ"""4888&ÛÛÛÿ,þþþÿÌÌÌ‘&&&5ÓÓÓŽÿÿÿÿÔÔÔÿÿÿÿÿïïïÿáááÿëëëÿýýýÿèèèÿûûûÿýýýÿüüüÿüüüÿüüüÿûûûÿàààÿïïïÿíííÿñññÿæææÿ÷÷÷ÿæææÿõõõÿêêêÿøøøÿøøøÿ÷÷÷ÿÊÊÊÿïïïÿ¼¼¼’$$$6´´´ÒÒÒÿ,þþþÿýýýÿýýýÿþþþÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿýýýÿýýýÿýýýÿüüüÿüüüÿüüüÿûûûÿûûûÿûûûÿúúúÿúúúÿúúúÿùùùÿøøøÿùùùÿøøøÿôôôÿðððÿëëëÿåååÿÝÝÝÿÓÓÓÿÈÈÈÿ* þþþÿ©Yˆˆˆ£¾¾¾ÿÿ¾¾¾ÿòòòÿ···ÿ···ÿ£££ÿãããÿµµµÿ¬¬¬ÿµµµÿýýýÿñññÿíííÿýýýÿûûûÿâââÿìììÿñññÿäääÿØØØÿÏÏÏÿ¿¿¿ÿãããÿáááÿïïïÿÂÂÂÿåååþ¤¤¤„@–––¢ÄÄÄè$ýýýÿɃ&ÓÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÜ¢Uÿ§§§ÿ¡’ÿ™…ÿŽÿ©©©ÿžÿ™…ÿ ‘ÿ···ÿÞÞÞÿúúúÿýýýÿýýýÿÞÞÞÿâââÿÚÚÚÿÓÓÓÿËËËÿ²²²ÿ®®®ÿ¨¨¨ÿ¯¯¯ÿÊÊÊÿÈÈÈÿ½½½è444]ttt|ÄÄÄÂÈÈȇüüüÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ¦¦¦ÿ™…ÿ™…ÿ™…ÿ²²²ÿ™…ÿ™…ÿ™…ÿ³³³ÿèèèÿõõõÿþþþÿýýýÿàààÿòòòÿíííÿôôôÿäääÿÉÉÉÿþþþÿÿÿÿÿÿÿÿÿþþþÿøøøÿñññÿáááÿéééÿÚÚÚ¥üüüÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ½½½ÿ™…ÿ™…ÿ™…ÿ¾¾¾ÿ™…ÿ™…ÿ™…ÿ¾¾¾ÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿþþþÿþþþÿýýýÿöööÿÍÍÍÿÿÿÿÿãããÿÕÕÕÿÕÕÕÿñññÿÉÉÉÿŸŸŸÿ³³³ üüüÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ¼¼¼ÿ™…ÿ™…ÿ™…ÿ½½½ÿ™…ÿ™…ÿ™…ÿ¾¾¾ÿþþþÿþþþÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿýýýÿõõõÿËËËÿþþþÿÀÀÀÿÂÂÂÿ®®®ÿéééÿ¤¤¤ÿ˜˜˜˜üüüÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ»»»ÿ £”ÿ™…ÿ £”ÿ¼¼¼ÿ!¤•ÿ™…ÿ!¤•ÿ¾¾¾ÿýýýÿýýýÿþþþÿþþþÿþþþÿþþþÿþþþÿûûûÿòòòÿÈÈÈÿþþþÿÔÔÔÿ®®®ÿÂÂÂÿêêêÿ¬¬¬ûûûÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ£££ÿ¯¯¯ÿ›››ÿ°°°ÿ   ÿ¼¼¼ÿ¼¼¼ÿ½½½ÿüüüÿüüüÿüüüÿýýýÿýýýÿýýýÿýýýÿúúúÿöööÿîîîÿÅÅÅÿúúúÿñññÿéééÿêêêÿÝÝݧûûûÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ»»»ÿ[\ãÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ[\ãÿ¼¼¼ÿûûûÿüüüÿüüüÿüüüÿüüüÿùùùÿõõõÿñññÿèèèÿ¿¿¿ÿöööÿéééÿêêêÿÜÜܦúúúÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿºººÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ­­­ÿçççÿëëëÿïïïÿïïïÿæææÿãããÿÏÏÏÿàààÿÄÄÄÿ»»»ÿñññÿêêêÿÛÛÛ¥úúúÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ¹¹¹ÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2ÜÿºººÿÙÙÙÿÙÙÙÿÖÖÖÿÙÙÙÿñññÿÞÞÞÿÎÎÎÿÀÀÀÿ®®®ÿ»»»ÿòòòÿÚÚÚ¤ùùùÿÐ;çÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÚ Sÿ¢¢¢ÿWXßÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2ÜÿYZáÿ­­­ÿíííÿðððÿçççÿëëëÿíííÿäääÿÑÑÑÿÐÐÐÿµµµÿÛÛÛÿÜÜܤûûûÿùùùÿùùùÿùùùÿúúúÿúúúÿúúúÿúúúÿúúúÿúúúÿûûûÿûûûÿûûûÿûûûÿûûûÿüüüÿûûûÿúúúÿøøøÿõõõÿòòòÿïïïÿéééÿãããþåååè××ׇ ÿ€ÿÿÿ¿_üÿþ?_à?ð?_à?_à?_à?_à?_à?_à?_à?_à?_à?_à?_à_à_à_à_à_à_à_à_à_à_à_à_à_à?_à?_à?_à?_à?_à?_à?_à?_à?_à?_à?_à_àÿ_àÿ_àÿ_àÿ_àÿ_àÿ_à?ÿ_àÿ_àÿÿ_àÿÿ_( @ €ÿÿÿÿÿÿÉÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÈÿÿÿ!!!0\\\JeeeQ666D555A0$ ÿÿÿÝøÿÿvâÿÿHÖÿÿ<Ïÿÿ6Ëÿÿ0Åÿÿ2Ãÿÿ\ÎÿÿÖòÿÿÿÿÿ7qéééøæææÿáááõÖÖÖéÛÛÛìÜÜÜÚ´´´¢vvvj&&&D1"þþþïgäÿÿLÜÿÿF×ÿÿ@Óÿÿ;Îÿÿ5ÊÿÿÔóÿÿÏñÿÿ?ÄÿÿÿÿÿîÀÀÀ£æææøèèèÿçççÿåååÿæææÿæææÿäääÿäääÿÞÞÞÿâââþâââóØØØÓÐÐкÿÿÿÿVäÿÿQàÿÿKÛÿÿE×ÿÿ?Òÿÿ9ÍÿÿÕôÿÿÐòÿÿ(¿ÿÿÿÿÿÿóóóÿ‚‚‚a”””VèèèÿÂÂÂÿÊÊÊÿÏÏÏÿÍÍÍÿÜÜÜÿÑÑÑÿÉÉÉÿÅÅÅÿÊÊÊÿÉÉÉÿÿÿÿÿ[èÿÿUãÿÿPßÿÿJÚÿÿDÖÿÿ>Ñÿÿ8Íÿÿ2Èÿÿ-Ãÿÿÿÿÿÿôôôÿuuun{{{jêêêÿÎÎÎÿÒÒÒÿÜÜÜÿÕÕÕÿçççÿÞÞÞÿâââÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿ`ëÿÿZçÿÿTâÿÿOÞÿÿ´ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿôôôÿìììÿëëëÿëëëÿêêêÿêêêÿéééÿéééÿèèèÿðððÿíåÚÿ§ƒVÿ•o@ÿŽlAÿÿÿÿÿbíÿÿ_êÿÿYæÿÿSâÿÿMÝÿÿGØÿÿBÔÿÿ<Ïÿÿ6Ëÿÿ0Åÿÿ+Áÿÿ%¼ÿÿ<ÁÿÿÕòÿÿÿÿÿõõõÿ„„„a———VìììÿìììÿëëëÿæææÿÃÃÃÿêêêÿúúúÿ»™mÿ t>ÿšq?ÿ“n@ÿÿÿÿÿbíÿÿbíÿÿ^êÿÿXåÿÿRáÿÿLÜÿÿFØÿÿAÓÿÿ;Ïÿÿ5Êÿÿ/Åÿÿ)Àÿÿ$¼ÿÿYËÿÿÿÿÿÈöööÿwwwn}}}jíííÿíííÿìììÿëëëÿÖÖÖÿëëëÿþþþÿ®~Cÿ¥v=ÿžs>ÿ˜p?ÿÿÿÿÿbíÿÿbíÿÿaìÿÿ]éÿÿWäÿÿQàÿÿKÛÿÿE×ÿÿ@Òÿÿ:Îÿÿ4Éÿÿ.Äÿÿ(¿ÿÿ+½ÿÿÿÿÿö÷÷÷ÿðððÿïïïÿïïïÿîîîÿîîîÿíííÿíííÿìììÿÿÿÿÿ°{;ÿ©x<ÿ£v=ÿs>ÿôïêÿñÿÿbíÿÿbíÿÿaìÿÿ[èÿÿVãÿÿPßÿÿJÚÿÿDÖÿÿ?Ñÿÿ9Íÿÿ3Èÿÿ-Ãÿÿ'¾ÿÿÿÿÿÿ÷÷÷ÿ†††a™™™VðððÿïïïÿïïïÿíííÿÉÉÉÿíííÿÿÿÿÿµ~:ÿ®{;ÿ¨x<ÿ¢u=ÿ¶—pÿôïéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêúÿÿrßÿÿ=Ñÿÿ7Ìÿÿ2Èÿÿ,ÂÿÿÿÿÿÿøøøÿyyynjñññÿñññÿðððÿïïïÿÝÝÝÿîîîÿÿÿÿÿ¹€9ÿ³}:ÿ­z;ÿ§w<ÿ¡u>ÿ›r?ÿ•o@ÿlAÿ‰iBÿƒfDÿ}dEÿ|cEÿ|cEÿ–‚iÿêúÿÿBÔÿÿ<Ðÿÿ6Ëÿÿ1ÇÿÿÿÿÿÿøøøÿóóóÿóóóÿòòòÿòòòÿñññÿñññÿðððÿðððÿþþþÿÁ‡?ÿ¸9ÿ²}:ÿ¬z;ÿ¦w=ÿ t>ÿšq?ÿ”n@ÿŽkAÿˆiCÿ‚fDÿ}cEÿ|cEÿ}dFÿÿÿÿÿGØÿÿAÓÿÿ;Ïÿÿ=Ìÿÿÿÿÿöùùùÿ‰‰‰aœœœVôôôÿáááÿãããÿîîîÿòòòÿÝÝÝÿòòòÿÒ£iÿ½‚8ÿ·9ÿ±|:ÿ«y<ÿ¥v=ÿŸs>ÿ™q?ÿ“n@ÿkBÿ‡hCÿ€eDÿ|cEÿ|cEÿÿÿÿÿLÜÿÿF×ÿÿ@ÓÿÿmÛÿÿÿÿÿÈúúúÿzzznjõõõÿÜÜÜÿàààÿÚÚÚÿóóóÿÞÞÞÿñññÿôèÙÿÊ“Pÿ¼8ÿ¶~9ÿ°{;ÿªy<ÿ¤v=ÿžs>ÿ˜p?ÿ’mAÿ‹jBÿ…gCÿeDÿ|cEÿÿÿÿÿPßÿÿJÛÿÿ\ÛÿÿÜ÷ÿÿÿÿÿûûûÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿõõõÿõõõÿôôôÿôôôÿóóóÿùùùÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓ¯ÿmAÿŠjBÿ„gCÿ~dEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿûûûÿ‹‹‹ažžžV÷÷÷ÿÏÏÏÿ×××ÿòòòÿÈÈÈÿÔÔÔÿÛÛÛÿôôôÿÞÞÞÿêêêÿòòòÿÿÿÿÿ´}:ÿ®z;ÿ¨x<ÿ¢u=ÿ›r?ÿ•o@ÿlAÿ‰iBÿƒfDÿÿÿÿÿüüüÿ|||nƒƒƒjùùùÿÝÝÝÿáááÿèèèÿäääÿçççÿîîîÿõõõÿðððÿòòòÿôôôÿÿÿÿÿ¹€9ÿîâÔÿíâÖÿ§w=ÿ t>ÿšq?ÿ”n@ÿŽlAÿˆiCÿÿÿÿÿýýýÿûûûÿúúúÿúúúÿùùùÿùùùÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿöööÿöööÿõõõÿõõõÿþþþÿÅ‘PÿðäÔÿïãÖÿ«y<ÿ¥v=ÿŸt>ÿ™q?ÿ“n@ÿ›~Yÿÿÿÿîþþþÿa   VûûûÿÑÑÑÿØØØÿÞÞÞÿÜÜÜÿùùùÿïïïÿÝÝÝÿ÷÷÷ÿðððÿ×××ÿäääÿóèÚÿΡkÿ¹ƒAÿ°|;ÿªy<ÿ¤v=ÿ¢yFÿ²•pÿëäÜÿÿÿÿÿÿÿÿ}}}n„„„jüüüÿáááÿåååÿïïïÿçççÿúúúÿøøøÿôôôÿøøøÿòòòÿâââÿÞÞÞÿöööÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿòòòÒûûûÿÿÿÿÿÿÿÿýýýÿýýýÿýýýÿýýýÿùùùÿöööÿûûûÿúúúÿúúúÿúúúÿùùùÿøøøÿøøøÿ÷÷÷ÿ÷÷÷ÿöööÿôôôÿìììÿãããÿØØØÿ6òðíÿtiWƒq^|ÚÓÊÿÐËÅÿÆÌËÿ«¹·ÿ´¼»ÿ¼ÅÄÿ°½¼ÿØÜÜÿãããÿöööÿõõõÿìììÿñññÿõõõÿõõõÿíííülllg|||sÊÊÊþ4ðÞÆÿ„,åÃ(íÏ“?ÿÉžfÿs­¡ÿ#žÿdª¡ÿS©žÿ(Ÿÿµ±ÿâââÿöööÿöööÿÑÑÑÿÏÏÏÿÑÑÑÿÏÏÏÿÉÉÉú---{bbbŸÌÌÌí(ï×¶ÿÔ‹'ÿÒ‹&ÿÒ‹&ÿÌ—Lÿa©›ÿ™…ÿO©žÿ6¤•ÿ–ƒÿ‡º³ÿýýýÿýýýÿùùùÿÔÔÔÿüüüÿöööÿìììÿáááÿÚÚÚÿæææÿ¿¿¿îÖ´ÿÑ‹#ýÒ‹&ÿÒ‹&ÿÊ–Jÿcªšÿ—ƒÿQ©žÿ9£—ÿ›…ÿ‹¼¶ÿþþþÿþþþÿüüüÿ×××ÿúúúÿÕÕÕÿÃÃÃÿèèèÿÇÇÇÿ²²²¡íÕ³ÿÑ‹#ýÒ‹&ÿÒ‹&ÿÅ‘EÿЍ£ÿY¢¡ÿw £ÿz«®ÿa¨§ÿºÐÏÿþþþÿÿÿÿÿýýýÿÕÕÕÿñññÿÂÂÂÿ¹¹¹ÿåååÿ¡¡¡œíÕ³ÿÓ&ÿÒ‹&ÿÒ‹&ÿÊ–Jÿ’ÂÿXXÖÿOSÓÿOSÓÿ\]Õÿ²³ÖÿýýýÿüüüÿõõõÿÏÏÏÿæææÿèèèÿêêêÿÓÓÓ¦îÖ´ÿÒˆ#üÒ‹&ÿÒ‹&ÿË–KÿxvÄÿ03Ùÿ/2Üÿ/2Üÿ03ÛÿŽÄÿÜÜÜÿÌÌÌÿÖÖÖÿ»»»ÿâââÿêêêÿÓÓÓ¦ðÞÅÿȇ/á̈*é×IÿÊ¢iÿŽÈÿQTÝÿJLÛÿKMÜÿWZàÿ¡¡ÊÿâââÿÚÚÚÿÍÍÍÿ···ÿïïïÿÓÓÓ¦ù÷ôÿöðçÿöïåÿ÷ðæÿöñëÿîîôÿèèøÿççøÿççøÿèéøÿîîóÿòòòÿæææÿÏÏÏÿ×××íËËˉ ü€?à€€€€€€€€€€€€€€€€€€€?€?€?€€€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€?ÿ(  @«««CŸŸŸ´¢¢¢ö¤¤¤î¥¥¥’¦¦¦¬¬¬ï«««oªªª¥¥¥£££I   ¾­­­ÿåååÿýýýÿÿÿÿÿûûûÿñññÖ¯¯¯ÿÁÁÁÿ®®®ûªªªà¨¨¨ô³³³ÿÍÍÍÿöööÿ®ñÿÿSÛÿÿ=Ðÿÿ?Ëÿÿ›âÿÿÿÿÿ·³³³ÿÜÜÜÿóóóÿäääÿçççÿéééÿèèèÿþþþÿ_éÿÿQàÿÿF×ÿÿÒôÿÿ4Çÿÿÿÿÿö¶¶¶ÿÍÍÍÿâââÿíííÿíííÿùùùÿþþþÿÿÿÿÿaíÿÿZçÿÿ·òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿÿÿ¶¹¹¹ÿÝÝÝÿöööÿðððÿúúúÿм¤ÿ‘oEÿÿÿÿÿcíÿÿaìÿÿXåÿÿMÝÿÿBÔÿÿ7Ìÿÿ0Ãÿÿ™àÿÿ½½½ÿÎÎÎÿäääÿòòòÿþþþÿ©~Iÿ™q?ÿóïêÿ›ôÿÿcíÿÿ`ëÿÿVãÿÿKÛÿÿ@Òÿÿ5Êÿÿ8ÅÿÿÀÀÀÿÞÞÞÿöööÿõõõÿÿÿÿÿ­z;ÿ¢u=ÿ³•qÿóïêÿÿÿÿÿÿÿÿÿÿÿÿÿëûÿÿvâÿÿ>Ñÿÿ3ÈÿÿÃÃÃÿÐÐÐÿåååÿøøøÿÿÿÿÿ»†Eÿ«y<ÿ t>ÿ”n@ÿ‰iBÿ~dEÿ}dFÿ¬œ‰ÿëûÿÿGØÿÿHÒÿÿÇÇÇÿßßßÿ÷÷÷ÿúúúÿöööÿàÄ¡ÿ¶€=ÿ©x<ÿžs>ÿ’mAÿ‡hCÿ}dEÿ}eGÿÿÿÿÿSßÿÿ¨ìÿÿÊÈÅÿÔË¿ÿßÛÎÿÖçâÿÌÞÚÿíîèÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÐÁ°ÿ…gCÿ}cEÿÿÿÿÿÿÿÿõÿÿÿµÇ¾²ÿÑžUÿ»›Pÿ@¥ŠÿD²£ÿÛîìÿýýýÿÿÿÿÿ±~>ÿêàÓÿ™q?ÿŽkAÿ…iGÿÿÿÿôĹ©ÿÏ“>ÿ³Š8ÿ'Šÿ+š¡ÿÍàãÿøøøÿúúúÿÞ¢ÿ²‚Gÿ£u=ÿxKÿʺ§ÿÿÿÿµÁ¶¦ÿÏ“>ÿ·€@ÿCMµÿG\ÔÿÍÒçÿîîîÿáááÿþþþÿýýýÿÿÿÿÿþþþÿìììÿ¾µ¨ÿ˘Pÿº‡TÿZSÀÿ^`ÚÿÕÕêÿúúúÿúúúÿüüüÿÈÈÈÿùùùÿÌÌÌÿ¿¿¿¹¶³ÿ¼³§ÿº±©ÿ¬ª¼ÿ¯¯ÄÿÃÃÉÿÃÃÃÿÅÅÅÿÈÈÈÿÉÉÉÿÇÇÇÿÄÄÄ~&&&&&&&&&&&&&&&&iep-3.7/iep/resources/appicons/test.ico0000664000175000017500000000207612456205735020450 0ustar almaralmar00000000000000 ((    @@@@@@@@@@@@ÔÔÔÑŠ%ÈÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÑŠ%È@˜„Þ™…ÿ˜„Þ@˜„Þ™…ÿ˜„Þ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@Ò‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@˜„Þ™…ÿ˜„Þ@˜„Þ™…ÿ˜„Þ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@@@@@@@@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@.2ÚÈ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ.2ÚÈ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ@ÔÔÔÑŠ%ÈÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÑŠ%È@.2ÚÈ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ.2ÚÈ@ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔiep-3.7/iep/resources/appicons/pyzologo256.png0000664000175000017500000001477512271043444021623 0ustar almaralmar00000000000000‰PNG  IHDR\r¨fÄIDATxœíÝ_L[Wžð﹃©'v ¤ž´8 ƒ–Ƭ#‚5›Dª'J¤<F©Ù§’¾ìHíj™‡jߦÌËJ«< •Ú·U¼¬Rih¤Õf”nÖ#‘J­p5‹S¤¨K†qJøW¹ì³Æ Iáþó½öµï÷#EMÅõõQðïësϹç\€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆê‰°å¬§NBiŽC¢BÆ_xËøA/!*‘‰çÿW$ °ˆâ³Ì}]›65.k ?ö&¤ƒQKÏKR&!Äæg~_ë¦4 k ræ  L@ Û’ó©‘XŠcH}öq­›Rï<Ÿ¡èwÊ‚´‡H›@B\ÅñA,/ý¡ÖÍ©g•@dè&„ø•Em!2Hü 'º±¼Äž€Iæ ?ö&„·®)D&ÅñW±üø‹Z7¥™è À§,‚Ý~r¹ŽÍb7¾ú|£Ö-©7Š©WµzÆXüä"XúL’QæzýCkz Éßxm¡>(Þ6@[¨ÏÔ[’;ä2 €b>‡\fÙôv²+:^)×1?{ÔÞÖ5ã9sB™Ò:¬#:ŒŽè°©Fí·’¼•ämíeq„SƒÆ¿ÚwòuÆÞ`ñ“e:¢Ã茽¡} ŽÏ&=ÏÌ€ê]~¾PŽF.™lÑÁŽF.Á§}ùÈ;P ²<Žôž5Ù"u:>[ ƒL€úàùÈ.ÚŸ-ÎLenPE³ÿ˜Õ§$ÀÏ–,";)^Ÿú=ƒê´¤10¨®ó›êðn@CD.Æ r1‘‹1ˆ\Œ@äb "c¹€ÈÅD.Æ r1‘‹1ˆ\Œ@äb "c¹€ÈÅD.Æ r1‘‹1ˆ\Œ@äb "c¹€ÈÅD.Æ r1‘‹1ˆ\Œ@äb "c¹€ÈÅD.Æ r1‘‹1ˆ\Œ@äb "c¹€ÈÅD.f"äºÚOs™³m!R¥ýÙRÿlÒ™é$Õ~¸½š6Ù"uϲOµQýlÒ)TSv-õ‰éƩɦçÔX¬JCˆ‰ µïdW°–ºk¶=DÚZMãû´Æ¼dÀ(ã ˆ„Ö!Ë3aãá}3í!úgÙ§x2}SÇ‘;S¶7¦ÁS¯ŠÄþÝZ‡ùB}8¹xÀÔÛå2 Xº÷ŠùM#eó³?¯J£H“É×M×:h3³€MÌ øB}€füáøB}ðxÛjܪú·ñð¾Îo~RNØÛšÆd®Ð3€OYDÐÚæ4Ž#½gÑ»Ê 0éÛ™[X×= Ìo³<¦^µö—mtžøB\µ¸= c{õ6híü)šýÇjÝœº’™¾…?ê‡Gÿù/È=ž×ù ¹ˆ8RŸ7þu¦MÌ,/}ÌÐö}:‰–ö.x?®uSkk5¿ÜûÛ«ô½@Ê$ä‹¿B•P c'Ö!ð3@´ZЦ†ôýãÿE /ÅÓ\ë¦8ÎÖjßܹŽìŠÎWÈR³Çnå*xºô'{ù Ù8˜,ì@ñ4£mwÆ€J6ÞÇÒÝ÷! ;ú^ å$R³¿°·Uîan@MÏ`>ϤŒ"®ç~·P¼>üä—ÿÊ™]k©»XžùHÿ Šr fß·¯Eîc}¸ÑkC¯1µCO\x›7F¡4ÒÿÝÃO¼dó3¿·«=neÍ%€Û=]úO—¾ÆñW¾äUµ±/€—^ùÛj¶ÎQ ùßо¯\ÄÏ0?ó[æRÜÄJó3_@ Õ;Òtr7 B>‡oî\×w¨”I@Ä1?ó…½-s/³·ÓaŠ2¯¬^Té×¾§—”IlãøêsŽôÛˆ@¶Ë¦ç™¾a¤ø'‘š½fo«`XO‘AŽ­þ•¡=9Ôì¯mk=‡`¥S'!ĤÚ!nºÀØ‚À(æg9Ò_E «ô  ”)­’-í]ÕjQÍò9,ÏÜ20Í'×QÀ¾œÕ»ˆ,°BÏ`­JBë.HÅëkø{Ê#ýúg;vô|É‘þZ`TJgñÀÑÈ¥j´¨f¶VÓx2}ÓØ‚Žô× Š¿¥½ ÁÈÅj´ª&ŒOóa [ÅQm1Ì2PüŠ×‡—Ï_kØ5†Gú9Í眯2Ã`ñ¿zù݆Ýd%y+ÉÛú_À=ŽÂ€Q,þ=ÆôÈu@Œá§ùœ„=#XüJ#ýK÷>4°ãóîH?ïéw€^,~¥‡t,ݺKˆQ¿31ô`ñà‚žFÄÐÂâÀ=Šƒ€jXüÌLóa©ÙßÚ×"² à0,~&·îJqë®zÁK€ƒ°ø¹ Ç%Øx‹ßø‚‰E1Â=õ‡=€ýXüØZMcéÞ‡úÒÁ‘þºÆ@‹¹Ì–î}À=.ÂÀâô¸{,~ã z€Q¤xO#pw€ÅonAŸÐÓ0Ü./~Ó[wñžþ†âÎpyñ›ZÐ#wFð`îk{[FÕæ¾1—¿á= lGðÕGú»z./þ‡÷±6«ïpqñ^гYqÄHÏ`>ϤŒC`DÏ﮺äz©7)Ø,L9âßÌFõ.-þº\Ðsjà$Ð4Ѫ}»[EÊ$$&©FìÔg¸´ø×Rw±<ó‘þå̾o_‹Tô ТŒÖeѦÛÅÉFéÔ_(þ&N\x»!ŠßÔ‚žZlÝ9sPFKÝû&1'ë}6¥¾À@ñ·´wáÕËïÂãm«BÃìS zö¾íŘž™˜†"±)'êµWP?àÒâ7¶ G&!ÄhÕŠßÍ…ÿ¢: ‚ú¿á‘þj/èé½ ‰q; ßê´íþ·¥½ ŠÁßk1ŸÛ Ð\f°¹û_[”VUŽ×ËÎÉÎ6=‡Ìô c#ý[űªì4¤œ´r`¯Éß¶PZÚ»ÐÒFK{—í¿ÃÂn0l¯¦±½ú¹Ì‚þTzT»7f’³À…ÅoxAäægm[ƒÊzhõŒA`¼ÒS)^üáøB}ð‡ó;+äsȦ簙Y@6=gà> ãØ*L8õ²À¹àÂâ7µ §]ÍÈ™+b²’›vÊE_þS²é¹½?•…s×_83\Vü…|Ë3·œ¹ '2tBŒš}ùKá(üázÏYبêÛxxÙôœÙ˜8᦬8/\Vü†wï©Ö4_…×úÁÈEtD‡ëúwsB>‡•äm£=µ¿rØØ€³ÀeÅojš¯#ýý±7L}™âõáhä‚‘‹uý{Ñ£Ïa=õ ÖRwÍ^ÔæF­8'\Vü€Á»û$¦°Uµ½øMtùÝTø/ª(pIà©å›ïqañç2 úïë/}PþkÙ¶µQýC¿ƒ¿2ò’#½gñã×ÿþðO³]-s,ÅÓŒ¶P~ô“Øs÷è"DÇN¬ãéÒŸìk¡FjõÆ{\XüðèÎu}7¤TcAOi7¥ #ßü´ÎÂJÆÇtPÓž@mÀ¥Å_Þ¹W\Ęí׉¶R+댽#½çâwa‡B>‡ïÞ7¶r2ùÙŸÛÖ¨CÔ.\Zü€îkÿ¨ÓFú›ükïÖ\R—Ë, 3}ÃÑÏg¨M¸¸øàá¿ÿ£ú€Q5º„~@éZ?tþ-[›Ô¨Œ öV7ª?èòâßZMc=õßêÉ<ÍØ÷è  Y$õgì tþÒ¶æ4:xŠ×‡Üãy탅¡I\Æ~|ËöA_TûÉ@./~ÚÝA)“¶n=U¾æ7PüG#—lkŽ[”§Iu"ZúÙ¯zÀâ=ÓDÜkªÁà€ßË篱ø-tœ¸ðŽŽ#ERN¢g0`uì ÿ¡´¿‘DÜÒ_t«gRÏïáåó×µfÿÛ™[•­½ßµtïl­¦-h‘=ÚB}ú…ˆÂ§Œ[ýþÖ‹_UK{—öA­ž1KÞìÔÐ?é¹îïˆ;ªøs™óëí_PÌobéÞ‡(äs–œÏÞs:§Å^zÝÊ÷¶6Xüš<Þ6ír¬â^@Ï`Šöþ}GzÏ¢#:\Ñ[Ym%yÛÒóídW, »]ÝÛY•‚ +ß׺`ñëv¤÷¬Æ"ˆV%QQèèú7ù;лjú-ìÓ$5e%yϲO-?¯•N\x[Ç‘ˆ"{Ϫ÷´&Xü†é=ÅëS?¨|7Xì´á7Ð9åwâÂÛŽû=dÓsuyn+x¼múÖ[XÑCÜUy°ø óxÛpDÏ5·Q@ ÈÐM=[w#5â_fçC;² *Ú­-Ô§c<@ѪXr)PYDÎ\ kQ ‹ÿyÑaíî€ÝÛ$"±÷MýžÁúco¢hMϦŠ×ç¸ëþ2C;êdë,¤ë³!Ähé±ë•1'à©“¥½âµ±øÈãmÃñØU}·„€À8|žqD†’Xá‡ñòAz8ù.9*}6:¢ÃÚˆMã*Z6n¾ š¦øÍ_x@ÿ ±2!¢¥‚ßÿG¿#½g5åG ôžÓž©t,À\ôÇÞÔ³¢ŒÅ¯íx쪎YkÔæú.‹ÌÑxuíË4D‹2ZÉ{˜ ©=ÈÄâ×/tþ-ýËDMzùü5Ç? óF)ÓçvÞ §š¶PŸž^Àh%ïa<úc§µ Íâ7.Ð{ζpÚm¾jìÜoÐÎp±ËQ­KD!¢¦¦Šw©>¿¬x}Žœ_®ÞsÿƲn°/Ô‡ððoê¦øè›5}îê\jYÉÐñy£fÏo<4V«ùÃŽ]‚YZÛÃ89ü:co˜¾f-Ýá÷º´´W¯Ò=ÖêKáhÝý[”inÌ"…æM_‡1> (T›mrÚ.2õÈãmÃÑÈ%é=‡lzß=üT×v£<‰·#:lÁ#¹ÿJñúpÜa·<q4rQ}-ƒ@7úc§Íl#o<4Fÿu-h ]<Þ6zÏíôÖjúÀ¢P¼¾ºýv;H³ÿN\xGÇÃSôéŒ]­ë^i³ÿZÚ»Ôo’*Ê8€*€^ûÛ§‘Š\Ki³Œ·‘™¾aº'àÔ½ Íð…úÔ@ˆ8ëî¶àDøÃxõò»¦ÆBÊÛ›5Bñ:.­Mî$Å G+оÖýèBøB}89ü^Cõ˜´§GEÐÌÚ€êl NTfÿ1¼rá<Ë>ÅZêdÓs?xÀJ“¿co%]#þ~¾PŸú`°lê`è¡2 ªÍþc8»Z×#ú•hiïREÄÚQš—Du¢Y{Gi]{Û@T't¬eÐ?P²‹@T'ìXÍÈ ª:7Ù r/}|ß@äb "c¹€¨NØñ|CQÐÜBJÃO>aÕ 6c5¢­Õ4¾{ø©úA’@Ôp ùœöS‚;SFÏÍÕ€D¶µšÆ7w®kïŠ$å$ÌZ 0ˆik5õݽtm‰VĤ™÷aPÍä2 ØÌ, ·ot»^žàë,r_ÎÚ Œ@U—MÏa%yÛÖG»†”IlÇ;œ@USÈç°tïC~Ë[F®CˆQ|õù†Ù3p€ª&3}ƒÅo)“€ˆ›yÈ~ìPU|;s ß§ OSÓAJÝþx%ßüeìír™õG[‘rªâØ *XIÞ®uêŸÄÆ1?[Q—ÿE ²UyªL2 Š;fnòу@¶Ò±€€L €q0;ŸMæ0ÈVº–°¦f^ÖЋ8H¶Ò¼Ù§ˆ±ê´„ Úb—¿¦D.Æ [5i=Ï®?vº:-¡ƒ0ÈV-í]êÈÝѪ Ùª-Ô§~€À"Csì Ô§ÉVGzÏayæ#õƒ„ˆH¢?V•69VéÆŸõÒß±!(>KØuÀ ›y¼m8Ò{V{CK*áîߣPšHl Eó›~¨á%Ù®#:lË£­]C`‘@ÿÐÿX}©Ä Û5ûáÄ…wjÝŒ â€L ræŠUgdPU´…úpâÂÛì TL!”)«B€@UãàÕËï2¬ Ĥ— ªªÖö0N¿‡—ÂQíƒI…Bb §NVrÎPÕ5ûá• ïàYö)Öv÷¾ßɮԺYõG ¢i€éÕ”Âð+úcRíÇ3úofÛBäj[«ió›(æsF·QÅüÌïͼ'€È¡ ù2Ó7´7S•XDjæ'fÞÃÄ€\WûiŽÛ?YÂãmÃ+ÞÑ^O!ÐmvVÀÌ  jm¯¦Í´ƒˆ¡oæDŒ˜9·ñBµ°ÆíŸ‰,åñ¶áhä’úAÕ ™PûñNvk©»fÚBD‡F.j!‚è =¯ñPDBëå™°ñð¾áSÑÁ<Þ6í±¯bøæ ã0?ó$µ{2}î\×¹-4iQ¼m–ŸÓì@“€öN.›|(„­šühö(^ÚB}ð…úÐÚ®q˨^˜ €­Â|Ê ‚·‡ ØÉ®Ï¤Œ"nË߃*â õ!tþÚÞ"9—î°Yâ«Ï7Œœßú ê95p²© ˆ8„445ÛF0rn0¡Êm<¼oà›_&0oü1ë €Fº !FõÞäï@ ÷ƒÀ!žeŸ"›žÃZêc»$ÉâRŸ}lôý¦g0€VOÒÌ¥×Ká(üáøÃ ƒ*˦ç°ñð¾¾®þ‹¤œDjöš™÷e4¢Òn±&>I%Š×·þð€… £²B>‡lzÙô63 æø¤Lb«7zí_ÆhT¯ ½ELV:«x}{ë öÿŒÉ¦ç°½ú…|›™l¯>ªü¤SHÍü¢’S0Yér`Òìf‡).·».gׂ8‰q¤f~[éin9sP&ìš’U¼>´ìöZÛÃ{áàåoôÜî·z1Ÿ³æÛýP2Æ­zP(ÀMúcor¢š«8[Ú»à õÁãmÛ[¾\ŠzPØWÐåoò­Õ4¶WU÷Y‹@qÌÌH¿€Ûô ТŒBˆ1'ܤÕÒÞµ·ÑÅ‹Á°¿;lïîÃ_¶GëgÙ§yX‰L@Ê « ¿Œàf§NBi0ʽDbBN¡¸3s_ÛùV *‰œ¹ˆ‘Ò€!àê¤LB ˆIÌÏ|Q­·eÐõÇNrqÁ§xÚB®H¢ˆ)("QÍ¢ß@ÚN œ„Òç¯ H™ÄŠ2aÕ¾d\ì4Š2!â2ÎK†”»ôR&°%fïÔ³€¬ñ|(D] ¥B/uç^ìa½ö.н Áú[ؽV¹ûPœ¢L _LÖS¡†@µõÚÐë{÷ˆnÈ}ã BÆm}ïÒs.÷-š*&QÜ}ö¥ØY´{ ŽˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÈ¤ÿ÷Ïm½§QŸÿIEND®B`‚iep-3.7/iep/resources/appicons/pyzologo48.png0000664000175000017500000000250512271043444021526 0ustar almaralmar00000000000000‰PNG  IHDR00Wù‡ IDAThí™KlW†¿ëWbc7j8Šd°8Jã aETbESuQv ˆTbƒÔfA*[p7ݹlš ¥°H¨pUbUÁ ä*‰q;ŽíØ·‹ñ#qãÇŒóh«ü«™ësÏýÿ™ñ9çž »ØYˆuw¾ÀWHú?B:¶te)R@Á“ˆ¡$bú7Zl¸N_Â`±90˜Â ð ÝÒCÀlwrhø 1Š/ ¨õ §ïHòª€%Mk-6ö."X ÃêxÅâ@Ï7&»³ïàéKš—aé:ˆÕåÁlwbwûq~ÉÚU×Þlw²’ŒSÈ,# «X]œþó ×0Û¼ÿý'@®°ðîg¨)%Ìv§.òeØ\l.OËö=ÃWɧɧ—Zšg´Ø°º‡6[‹Zu’lÅo&1[ÙU¼œ¾7à(¶…L"ÐÒ±k…œB>½¸n¬½Öb=èE˜"áïè>‚Ý=À·_ó~Ô°[Ε}Œ–[#  ßÐ-¤AT7ï&û>l¥¢¯ 9…L"V“èd I!Æ×6 ¶V@ÇzÁ4‚µû-‚MçHE0‰)‘Íè£îb+ð7ÛÅ Lö§IEND®B`‚iep-3.7/iep/resources/appicons/ref.ico0000664000175000017500000000217412456033513020235 0ustar almaralmar00000000000000 h(  @@@@@@@@@@@@ÔÔÔÑŠ%ÈÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÑŠ%È@˜„Þ™…ÿ˜„Þ@˜„Þ™…ÿ˜„Þ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@Ò‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@˜„Þ™…ÿ˜„Þ@˜„Þ™…ÿ˜„Þ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@@@@@@@@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@.2ÚÈ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ.2ÚÈ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ@ÔÔÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ@ÔÔÔÑŠ%ÈÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÑŠ%È@.2ÚÈ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ.2ÚÈ@ÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿiep-3.7/iep/resources/appicons/ieplogo64.png0000664000175000017500000000210012271043444021267 0ustar almaralmar00000000000000‰PNG  IHDR@@ªiqÞIDATxœíšÏ‹eÇ¿ï¼3É,l’²îÖEÁÝˤ¡ÿ¡ {«õàA/.,BºâA FOŠEBÛƒ³Hʲ`¢ñ'mi·®ä`t·1»Y$ó¾ózØNM'Ólæ'äý\ò2Ožù>ïÛwžyÞ‰D"‘H$c dBP4@-Náê ¥(B@€R À6!DD¤ç©§°"`êä?¯1 'ƒV¦„ÔU…Ô׬Øz›ÏŸ^3×{8Z'*­ A®X±/;3¯_¨4òaL¸ÎEÀ™Âë—ÓÕjuµ¸QÉG2y༠8/8óå3O§_¼u{S_¡Åm/ŠXÒ³óK¥RéÉÔüB$zýœÐõ%yp&€½¼øX$)š>ÛjµxæìÙX SeÖGµù Ŷiân§‹iUÅü„¸Ý åÑ_‰Ž49g‡1lÀín$*Y•bNOpŸ„_»‰JÌhšç$üÚûñܸ±‡Þ_¿A°ÞÑfဨ)¤Ž?:‘ÚgFÓw;]ì0†¬i>¸„݉ç fÏ×ä@°¬î¿GöÛcÿW­Ô¥b÷k·ñ\jvjvÚ;ÒØ4:Øa 0§§1¥©Ú$nè¾éúµ÷“¨l›¦gð~ín$ªJJ1£©®Áûµ»‘¨dUŠgÕ‰Ðìn$ê'‰¬¢$±u@TÄZÜ{ÿ|h7’Øö€f³Éö¿®¼‡v›ó;ö8¶Ôj5ÃR´+qhWZ»—pÐ ÷)0W.g0þ ³Ä~ØZn5þf쇯î5WÞü½¾ $ Xüé—O”s¹Üã™Lfà¹@»Ýæ»»»Ïr¹ÒŸغÿoç€?†pñ{®0ø\À0뀅……€©÷>I­YÖ£[ãD¡uªhu:WÕ߾ ë€þ‹E½¼qþØ0Á€°xY}ý×–‘®V««{ìóü¨þ¯b‹­˜œœT¦=7R[üøX*•J_¼ñÖ #ûøÀVlOV«ÅO-¾:Ò´fýúÛã±’ ˆ;€¸û^$ýý¿ŸÀûIÿï'‘çQ2ö{€L@ÜÄÍ¡\¨4"íÑ•7ÎûÒóëÞÙÚÍV$=:nìßi6›ìæÖ÷#éu øö·ÇV!Ä ŠInÿÆú¥Z­ÖV¨:’ÞáÛ÷;BœŸx÷ÛsDÑ.ªNŽróAXf§aõŒÆ?·¾¹öçååu5ìíqN¥¸H)<õ̽.·ŵ«Ÿ!0ÿAÿÈ«°{rÎFèQôÂð—H$‰D"‘ŒÿÐ]T!7o¼¥IEND®B`‚iep-3.7/iep/resources/appicons/pyzologo64.png0000664000175000017500000000337712271043444021534 0ustar almaralmar00000000000000‰PNG  IHDR@@ªiqÞÆIDATxœíšMlÇ€¿YŠ”H³EÚª,ÙLêL%(GBþ† )à 衹aNEÑU¾ôåì‹ 4@NªrKnªO l ç@µ‹B4©BÛ*Iå2¢$Šœ–¹â?we20¿ wv—oÞ{;ûvæ½^jDəщ@ús—}/T›ŠÈ€ú+æY ~n¤d­<#˜1²ÑÌ~b”8­FÇw@8ÎOü†n§ÛÀ°Qýèb/á e3ø% ¬.÷%[Ñ6… Ïs³mŒ° Ó繉b±ÂÁåk½FÉVjßÒ>dSêÁ·ÿÜ5JæÊ§AÇ­V ÕtÐjZMÇ­V ÕtÐjZMÇš–d`'|¿ºT%¶4§ät4Š®íy`f3øenåÕ8ÝÎK(ï~ˆÙ~N¯~€ú@ž¯}£6„\0Dh“¦µùìkú ÞlV`&õœ£ä6©XǰO¯~Ä–æØù÷¢Úržðòïu -¢4#¤—‘ñë˜Xá¸xëNÓËêÌá?%‹¨'²ršÇË1PS ôÐÏa6„U_lM'·Øxø)ñ'€L€˜æñ²¡©°<Æ:àòµ^z”G—ÝÕÔÓßGyºx7·ö— >Vƒÿ2TÏ"Œs@Þx!¼ŠÅÊà?4,bwí›Á/T㥠!¦x¼òa:–Áœ0þâ­;ô8Ý ‰Ø ß/úòÈûÙ)¾]1,óS ýAÐãcKs…Ïœé?Ô­Wès€Nã3‡{Ä–æø!ROœR¤¯F󝀯?]¼›‹ôøO+ÒW£¹ Óøé«Ñ¸tŸŒ®[š+Dz!ü­2u€Nãw×ñýÒßÔ†”!ö³¾Š9þ«c¯ ˜} ½€·ŠØR™P3ŸÌú Óøº#ýÕñ?"ð#D5£Ë#eÉ|#´>è0¾$ÒW*nªUéÙ|yàŒÛ‹m`˜î*}Ä£ìÅ"ùj' ¤ôþÇßkéWÛ:Ÿü“Å»… øKÊÛEòºì.\ÞÛØÝc˜,¶ºûÉ®°ºÇQr;wVHe§ª•ÒL•.œT®Ùw>~@.Ò¿Éjð«’›.\ü !n)+ç®ýšÁë¿£ÇéF1™ëî@1™éqºéóÜÔ‘!3G¯Ò%øÉ…;ÿ=(û¿Š ˜á%£+ê³e#ýèÄá¼ñѱòzqyo3xã#µ!„Ÿe¶Ò½åG€ÆìF¾V‡cVΰµ¡Ð#ã×QÄ‚b±2tóO5Wޱ¥9vÂHFWPLf,½ªÞo¶Ÿ£Ûy‰ÿýg„ðr~HMøœ ÔŠEÔ™žëšÎsIÅbë¹xëÖó?¯*g;tDøGÉmÒ»1Õ(¨é4Kïºì.5@ |ô-°ùìûâ{´ø]J!Fô Xlê§Oà£ÐkhŸóCS˜ø „Ãùú{œýÙDM9ÿŠÌiÎÄ£8_¯æ{œnöãQÒ»1@ް¹¡ Â'²ÂrÁ«Fêrx&s-1IPÄ,‡Us­:J™¯Áñf‰:èŸx?¯ƒ«c¯_ÓŽ€þ¡y=—~ùgÝÆç93ôÝÎKd3iº¬½˜íçèóLòÓ·~ÛP¤ß{¶ªiŸ½ò6v÷X]ÿ5Yl¤“[¹…—)Qü:žX ª“£ŒÏcwÕ­l9Î^y‡tr›çkȦpx&qyo7¬ƒú:Jp<3>)z ˜,6ú'Þ/Êc-LÍû¥)f•…©6¼DÈî•=ÿÒ8`3ø…z Ñ”ÖÚ:Ä–æHçÊl† ¦Ú§‹Oµ­¶C÷ ùC(Ÿjo[•èK—ÐÒ¶1àxö—MN³Ÿ¶}žIµR¤˜×­½^¨ŒL!$ëˆÒeyÛŽ€³WÞÁá™Ìí׃p€ð!„)çOî4oÛ`ÄìÔïÿAü ;áûü yéVüÀqÒôG³G¨YL¶áBî@aªøºá{„jaÆlwáðL¾èªF¥Ì²v„ƒŸ¨©éÓ#‹ð|íž.Þe?=Í®4d+L…ß#T Ï¿1“Oƒ»¼·9ãöžÚhHFWHFWŠŠ2ںċwäó޳ùŒ0¨õ€|"Ó60ÜTþ Üb/!‹Nnsj3GeŠ2­q@53<­&)´ËÔ<Ö:ö¥“[EÅHÖrìÑl¹ÚakPÌÈøué@_SµAd)de“HÔª<·ÊqùZ/¥¶#ê0´C‡òüàt©_Þ PIEND®B`‚iep-3.7/iep/resources/appicons/ieplogo32.png0000664000175000017500000000112112271043444021264 0ustar almaralmar00000000000000‰PNG  IHDR szzôIDATX…í–=oÓP†Ÿëë’¤I“.Li…TPU  Ebb¥Sþ@—#L™ùHH, X*uè”)*_¥ (JÕÖT¤­Ó„Ĺ %‘›Äø‹/¡<“Îyí÷Þk2ä_@)¥+¥ô?UgG(¥ä…{»f3ÓjsÞUUJäc_.­W¬r9C«éZgkPA_ýº½xûÓgCÄö~3ëE@ ÆÌï^ÌYÆNÖ—øQƒq`þyµ1  !Z¾ü`+ÿÄè\›–…iYx–¿TËZñ^"šF±ñ­+âÛ9f ëpÆÖG!-:F4=ÓßD¦cQÞ™5.$â®±ã2–dôôe¯~Œb½ÁDä„ç¸ûPÔzØkY$uÉÉ‘O±Pk¸CR—€ô;Ôaç)KXÖdáÙÑH|½ÖçÕV‚Ö^KÔ!¤îN¹ŸËåÖªÕjÿR©”èÉ×`³o?H$Úõ[¯ï\¼YË´mÛ¸‚Š€|©0±tî æ¡10¿þ†Å§1{@J)öÍÍlï}ÁÑ^¿ñ¾òlræÀ1_Øà1°ØN¯½ÃZîÀøYþí+~ÝYOøëàa΂ üõO H!J~ #éٸФc]ú®ùî ÿ;ZtúJå\7u÷< :ý€«µí;™> ÎO>Ðïàÿ‹ï\DÏ¥º‰IEND®B`‚iep-3.7/iep/resources/appicons/pyzologo32.png0000664000175000017500000000171512271043444021521 0ustar almaralmar00000000000000‰PNG  IHDR szzô”IDATX…í—?hWÇ?wçÊ’¬Æ²å“6ª0†i°„# iÁ"ÔÐBq4’-M×–¢%´[Û±dˆ ÍZÔ¥$Á…£B=T®±@vÂ{¢Úþ7 ˜ôÏXÆ.ôlÒr.}B’à-ÁÝNZ-)ì.ÝUtÂ×úÀøô f1Š x[2Uv^÷¦ËÚf¥ ™»Kw¨üŽP¨…Ù^5ljZЈ¾¶Lÿv1“ ·2 hµO­ tÔ€ôŒà \?3q)<äž=v8»µÌ_?+ƒ&¹ò]§âPßcñÈØ[;ü,v9±(ƒd#¶~qcmÄ«%…ýØ][Ž£VB$מœTÚmønQ̤¢j!¶×´°ObõA–¹ÝÊo ¸.鉕/øS¨|!ö[BýÃN¿VR(zT-±¦|4oÁ/|ÿS}Ò=ëNodÈ=K« ©–·–yÿ1^Ë_.O}+6œœxH­¨Dâ“þÑd‰¼vùcx9—FÙÛl46ÉdeÈ=‹Ãûž³g|z°Ù€8À™‰K€`À}ñ  GùÙ­eßÿìEFžêƆܳ8|s.,â‚Þ€ûâ•§·­8À+¶ìž·Cxj¿ãçÜçvíì×sê(fRMs8¼sôÙF‚xSP¡ZuÛ £kŒ®µ·Ž]àlà*¢ÉÊàÄ›ÇrlNòÆÃ°®H®=©xè­:f’ÉÚx>õû€²·ÉAbTU†NÏ‚ñôÁ-ʹŒ\ÉíÛ[³Ô(ª:Oò×zn ’}âÑÊOò5=º \e?v/š—Z1¢i`GÅxõ@þ€íÕlý ´Žõr@Ú¡œKëJÀ<ìäü;7>u$]û¿Ü _jòÕ…üŸâ¿ÿIëÑHæW£&û¹à¹Ëulºn\ÙÛl¼ßÚÁã¿ B¸ø<}66§¯iU@kH¹Tœr.M%—–Q…y Õy¶W³Ý€`/‚DP›+@eAˆRUwNÐSÁ?/]nTH\°”IEND®B`‚iep-3.7/iep/resources/appicons/ieplogo128.png0000664000175000017500000000343312271043444021362 0ustar almaralmar00000000000000‰PNG  IHDR€€Ã>aËâIDATxœíÝMhUðÿÛÍìG’nµm’¶¦XÓVEEz+¢BK/=z ^,4PÞ¬Ò[¤ñC[HAH/æ`ƒ =Hs°ÒJ,Z‰F°ˆ Ø¦ÍÆ|mºiökvÇÃÎÂ~Ìì÷ì|¼ÿ ÛÝ}¼yóþÙÙ™}ó@DDDDDDDDDDDDDDDDDD!- iZÀŠ i!Dº•òNo_-¶¿jôÑ À×ÂvÙ!.„ˆW{ƒËÛWKÍöU iZ@oùóïMοÖâ†Yê«w‡fŠþ»&„H½Ï¬} §N:º}µ ~9QWû PØ9“s«‘ 7—GÖêpVÓöµsC­æâAOPL®= ŸŸ?{`£øµBûâSS‘µñK#j,6ŒlÖUí«Éï º{&±ùðü;ófo«€¦i~“s«‘Ϧ]UsxÙÒ µ˜¦i³Ù\ïÑB í‹OMEþû|ô*ÔŒ«ÛW‹¦aÖç‹5 Ñq¯.Ü\q{ç€â°ºøË€ýúS=°6~iÄëBàðÜqûK ë uØÂíê¨ÀÀÐ äwÀ.èíSc1Ï´¯–ƒÁPqûK  Üv̯Ƨ„vëBoŸçŽùU„ü¾âö—ðÚ©O-!»7Àfí—-T†\—ÝàT‹é4¦òWUûφ‚®*_/~˜ˆ¦3ÈȈf2¸—¨zAÍqåëŘè¥×ÈVTµ¡N°»|½Ï*l¤ì._/ÀÄ¥ CÇÝz;ÁîòõbªèS”–:Áîòõ`j°»­A˧ÙÄã–7¢þpÄò:ú0ŸL•<¿¢ª@"‰áêí._MÓÈĢȬ?rÙ¦+oeç>(Oí®ýÆTë„`*Á`õ‘dv—7Óô!@ÝXrDç@fõAGê1û8^Îd\QÞˆ'¾ˆ@¸cu=V+C_~Îîäòe›-Üû"2+÷¡Ùü) |~úŸëH]÷Éüq·ŒÑ9»Ëi:>%ˆàžCMWì6f;(Ä¥ön´»¼O¬Vm羜9¹|5 @ vwž•0UÙÝyVw>À˜ZH¥[Úùv—¯`Âèܺ‘owùz1ujuçÛ]Þ ‡„™x©;ŒSùË®»º”†Oµì._/ÀDÐçÃóáæ¯0Ú]¾^<HŽÇHŽã$Çñ’óÄw€NŽðŽÇH·j 9øýÒœ:$³¹¨þp³ü5 úÂᙚïôˆe53«?d„*€åÀ@ÿ˜ÝÛÒ)c‹‹úÃXùkÒ„Úà×ßÌ §´{[¬öClcô»µ%*€•ò×¥þ9øàìWNì\xgWß™^¿ßS×’7³ÙèØââ„Þùpù”:0¾´z{|iõSxw 9À?0øë ÿÅèWägÒìli½€………–Ö+hsý+¢0øË/:eëléÿÚÅîõ êZ/@Úñfë\ùöõ–Ö xÿ­Ÿ §—Û4MË4º^A§ê/0š.~/¼ðÅÜÃjÝ6àï_=¦?¼QØùwæ.GnÍžÙJ-k¹öÎ,|þA%2™I­Ÿ?{†ëØU1éÆèëôÞ™»™¾ýáÕ'‰èGíÞù å²û’©õO²ÀÑqlwJýåã u»jLV.¹]¹~qBï|ø;àÍ8~ä œ „ÐÖö¥“ˆN_ľó[Í ?‘Ñ+°ÿÖæfæÉ‹š¼nuû]=òGöÃ`V+‡«9OžÎªö¹¥~"""""""""""""""""""r¹ÿ\rÆÿ¤(ÏœIEND®B`‚iep-3.7/iep/resources/appicons/ieplogo48.png0000664000175000017500000000147112271043444021303 0ustar almaralmar00000000000000‰PNG  IHDR00Wù‡IDAThí˜MkQ†ß{'™I*RQ1H[?0hJ‹ Ý”þA×Bÿ€ˆ ëÆà²‹º\wbqcUÚt%](Vi%Ô(Š­Ø$“Éׅ̽MMbRç3¥2Ï&“3oÎ=/ÃÎ àR¿BHzÔ?À”!EsvÌ4¸õìóÈ‹l1i0>`r 9ÉN€¼,ÑU³™õ—f7''GŠ ¯“Ü0`Žr6@òD¯ŠŠ>ÿav×€B™^{¤ÕظëCv Ç/ÀÌí똵¢ ýÑw4àEŠÅb¡LîéMÃ,]éô!D¯iVÇ0–H$ÞØÑXó­ •J%.Ir†5½ªªývôø½‘å|ëBš¦qJdË[ž]}®~qà ¸êBû5ÿ4â® íÓüÓHW72?8ðïÀÿc Æ™ç£/㺭œvõ@ƒJ ž¾‚™€­ª^´”“18Ò ¯@üÞò„±¥Ž f¸šRK™¥ôW©9Úû˜øù£Œuž|×VNÏÑÞMí8ëcºßú€€€€€½ùÂ:É¡GL¸ÔIEND®B`‚iep-3.7/iep/resources/appicons/pyzologo16.png0000664000175000017500000000113212271043444021514 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsÃÃÇo¨dtIMEÜ"0ä zÚIDAT8Ë¥“MOQ†Ÿ{§3Ô6¢»VâV‰‘1DšŒ]蟲d';‰ºóG¸%&Á°3$Fþ#Ö”ZèØæ¥C˜x–'yßûÞsž£¸ûðŽå¸_€2WW;=KçùöùaSé‹Gµ§«¾vóê*µé÷$|·v`âdžýÝö°ŸSPÖn˾&J¡J˜4óæ?+'Ð6ýžL8+,×›h &ŽDÚ’L,æf-ÛÚUBD~®pSÝj¬ ’î‘´¶^†qÔ]äëÇ03D@qï‘Ok·fç‹;ÕÆJÉ.Ü 9ùÅÍõNÒëÖ‰û!¶cØß=š¨‘ÑýÇ5Ç+~¨Ë5»8£&Ę8।“¦R&Q׉ªOš¡‘Öû×£ï(æféÒÎX¬0qÄáæ:&îQm4ѶÇ÷5n?[ÅÄ39íÔs:gíU‚%(ÐÎÔàUÀr=LMÀ °‹3ª,ÕÂç{/»E–›ÃbŸŠ bHû=ÁŸrÿ‹Iúüüô&“‘ß‚K@Ê¥)ªAsbýÂÙI»p¸ùâm¤ ¥¼ª˾v¼Œ¹‰#im½ ãÓN} Ò…#9ŸXù’Sö_gT×ï ÈžIEND®B`‚iep-3.7/iep/resources/appicons/py.icns0000664000175000017500000002634412352001043020264 0ustar almaralmar00000000000000icns,äih32ͱû€ùƒú‚û üûúøõòïéãåדù;&S¢ß‚Ü á­íðçëíäÑеÛÜ’úƒ&¹„Ü ºÙÙÖÙñÞÎÀ®»òÚ‘úƒ&º„Ü ­çëïïæãÏàÄ»ñêÛûƒ&»ã‚Üã¼ûü ùõñè¿öéêÜŽûƒ&£¯›° ¼¼½€üý úöîÅúñéêÝüƒ& »”…”¼•…•¾ýý‚þûòÈþÔ®Âê¬üƒ&¼€…½€…¾€þ€ÿ þýõËþÀ®餘Œüƒ&½€…¾€…¾þ€ÿ€þ ýöÍÿãÕÕñÉŸ³Šüƒ&¦€…²€…³èõþýàòíôäÉþÿÿþøñáéÚŠý‚&U§’…Ž©…‘·ÞúýýÞâÚÓ˲®¨¯ÊȽ4tÄȉ#þˆ¾¾ò··£ãµ¬µýñíýûâìñäØÏ¿ãáïÂ外ĉþýýþ€ÿ€þ€ý€ü€û€ú ùøùøôðëåÝÓȉ þÌ&ÓÿÔÿïáëýèûý€üûàïíñæ÷æõêøø÷Êï¼$´Ò‰ÿ#<ÿþüÞËçÊòûü×ÐûúÝêÎÖÍÖØÑÔ€÷öò"8Û‰ÿÔ6áþÒýâíßôáøûû€ú âêëçÝá¿ëãô÷‚ÿùî&ˆÿþþ€ý€ü€ûú€ù€ø÷÷õ÷ý³b@9:;Cg¶õ‡þÌ&ÑüÒüìßìñèôö÷ù€ø÷Úìèîæûš889:;<=>?Ÿü‡%þ#;ûûùÛÛÖèÍÚÂöøÑ×÷÷ØÜÔÎËþDuöv;<=>??Mÿ‡þÑ5ßûÐúàìíïÝåéø€÷öõÜæëÞÚÿ8u÷v<==>?@Aÿ‡ýûû€ú€ù€ø€÷ö€õ€ô ÿ9:;<<=>?@ABÿ‡ýÉ&ÏùÎø€÷€ö€õôõûþ…ÿ®?@ABC‚ÿƒü";€ø€÷ö€õ€ôüšC899:;<=>?@AABCƒÿ‚üÏ5ÜøÎ÷÷€ö€õôóø³7789:;<=>?@@ABCD„ÿüø€÷ö€õ€ô€óòýa789:;<=>>?@ABCDE„ÿ$ûÇ%ÌöÌõÕòÊæôçàåääêÔþ>89:;<<=>?@ABCDEZ„ÿû":€õ×óÔòóæÑÏÌÐÎÕÿ89:;;<=>?@ABCCDZЄÿúÌ5ÙôËôçóæóòçÜääæãÔÿ99:;ÿù"8òò€ñðçÍïïÓÍîîÒüd<==>ÿùÉ4ÖñÈñ€ðé×ïîíÒë´<=>?ÿùñ€ð€ï€î€í€ìûJ?@ÿ‚øÁ%ÇðÇïï€îÞ€í€ìÐÞàïúÿƒø!8ïï€îíÓÈèìÑËëëÏÛ¿É¿ÉÊŠÿ‡÷Ç3ÓîÄî€íçÕé€ëêêÐØÚ×ÎÒ³Šÿ‡ö€î€íì€ë€ê€é€èçåþ‰ÿ‡ö¾$ÄíÃìßÑÛêÚéêâÞÞâÜáÐãØçËõˆÿü‡ö 8ììêͻպßèéÉÉÓÈÊØÈÔ¿×Ðçð†ÿöއõÃ2ÐëÂêÑÚÏáÑæÖÇÖÓÓÔÛÔÜÎáËäÙðúþ€ÿþúð&ˆõ€ë€ê€é€èçæçç€æ€å€ä€ã€âã‰ó¼#ÁêÀéÜÏÙç׿çàÛæ€åäåëñôêúòÕãÁå·¼ä‰#â!7éèçʹҸÜåæÐÑçéìæÊ±·_ƒpމ2Dæ‰[6×é¿çÎÖÌßÔéÜÝèïÒÁB‹møŒ ŸâïîëíëôðÜÇ<&Ž€ ϱû€ùƒú‚û üûúøõòïéãåדù‹ ¢X‚2 Z­íðçëíäÑеÛÜ’úƒ‹¹„2 ºÙÙÖÙñÞÎÀ®»òÚ‘úƒ‹º„2 ­çëïïæãÏàÄ»ñêÛûƒ‹»\‚2\¼ûü ùõñè¿öéêÜŽûƒ‹£¯›° ¼¼½€üý úöîÅúñéêÝüƒ‹ »£™£¼¤™¤¾ýý‚þûòÈþÔ®Âê¬üƒ‹¼€™½€™¾€þ€ÿ þýõËþÀ®餘Œüƒ‹½€™¾€™¾þ€ÿ€þ ýöÍÿãÕÕñÉŸ³Šüƒ‹¦€™²€™³èõþýàòíôäÉþÿÿþøñáéÚŠýƒ‹¢§¡™©ž™ ·ÞúýýÞâÚÓ˲®¨¯ÊȽ4tÄȉ#þˆ¾¾ò··£ãµ¬µýñíýûâìñäØÏ¿ãáïÂ外ĉþýýþ€ÿ€þ€ý€ü€û€ú ùøùøôðëåÝÓȉ þÌ&ÓÿÔÿïáëýèûý€üûàïíñæ÷æõêøø÷Êï¼$´Ò‰ÿ#<ÿþüÞËçÊòûü×ÐûúÝêÎÖÍÖØÑÔ€÷öò"8Û‰ÿÔ6áþÒýâíßôáøûû€ú âêëçÝá¿ëãô÷‚ÿùî&ˆÿþþ€ý€ü€ûú€ù€ø÷÷õ÷ýÑ…~|z}“Ëõ‡þÌ&ÑüÒüìßìñèôö÷ù€ø÷ÚìèîæûÁƒ~|zxvtr·ü‡%þ#;ûûùÛÛÖèÍÚÂöøÑ×÷÷ØÜÔÎËþ‹§ú¤{yvtrpxÿ‡þÑ5ßûÐúàìíïÝåéø€÷öõÜæëÞÚÿ¦ú£ywuspnlÿ‡ýûû€ú€ù€ø€÷ö€õ€ô ÿ€~{ywusqomkÿ‡ýÉ&ÏùÎø€÷€ö€õôõûþ…ÿÄqomki‚ÿƒü";€ø€÷ö€õ€ôýÁŒƒ€~|zxvtrpmkigÿÚÖÖçÿ‚üÏ5ÜøÎ÷÷€ö€õôóøÑ„ƒ}{xvtrpnljgeÿ×ÔÐÍëÿüø€÷ö€õ€ô€óòýžƒ}{ywurpnljhfdÿÔÑÎÊÓÿ+ûÇ%ÌöÌõÕòÊæôçàåääêÔþˆ‚€}{ywusqomjhfduÿÒÎËÈÅÿû":€õ$×óÔòóæÑÏÌÐÎÕÿ‚€~|zwusqomkigdu×úÏÌÈÄÁÿúÌ5ÙôËôçóæóòçÜääæãÔÿ€~|zx™ï†ÿúÛÌÉÅÁ¾ÿúõ€ô€ó€ò€ñðïÿ|zxvðúïëçäáÝÚ×ÓÐÍÉÅ¿»ÿùÃ%ÊóÊ€òñð߀ð€ïÒþ{ywtÿïëèåáÞÛ×ÔÑÍÊÇ¿¼»ÿù"8òò€ñ"ðçÍïïÓÍîîÒü—ywusÿìéåâßÛØÕÑÎËÇÃÀ¼¹ÈÿùÉ4ÖñÈñ€ðé×ïîíÒëÌwusqÿéæãßÜÙÕÒÏËÈÄÀ½º¸åÿùñ€ð€ï€î€í€ìû¹|qoÿæãàÝÙÖÓÏÌÉÄÁ¾º¼Üÿ‚øÁ%ÇðÇïï€îÞ€í€ìÐÞàïú€ÿäáÝÚ×í‡ÿƒø!8ïï€îíÓÈèìÑËëëÏÛ¿É¿ÉÊÿáÞÚ×ÔÐÍÊÅ¿ÿ‡÷Ç3ÓîÄî€íçÕé€ëêêÐØÚ×ÎÒ³ÿÞÛØÔÑÎÊØüÓ¼ÿ‡ö€î€íì€ë€ê€é€èçåþÞØÕÒÎËÈ×üѾÿ‡%ö¾$ÄíÃìßÑÛêÚéêâÞÞâÜáÐãØçËõìÖÒÏÌÈÄÁ½ºÜü‡%ö 8ììêͻպßèéÉÉÓÈÊØÈÔ¿×ÐçðîÚÎÉÅÁÀÊåöއõÃ2ÐëÂêÑÚÏáÑæÖÇÖÓÓÔÛÔÜÎáËäÙðúþ€ÿþúð&ˆõ€ë€ê€é€èçæçç€æ€å€ä€ã€âã‰ó¼#ÁêÀéÜÏÙç׿çàÛæ€åäåëñôêúòÕãÁå·¼ä‰#â!7éèçʹҸÜåæÐÑçéìæÊ±·_ƒpމ2Dæ‰[6×é¿çÎÖÌßÔéÜÝèïÒÁB‹møŒ ŸâïîëíëôðÜÇ<&Ž€ ϱû€ùƒú‚û üûúøõòïéãåדùÐÒÚ¢W‚/ Y­íðçëíäÑеÛÜ’úƒÒ¹„/ ºÙÙÖÙñÞÎÀ®»òÚ‘úƒÒº„/ ­çëïïæãÏàÄ»ñêÛûƒÒ»[‚/[¼ûü ùõñè¿öéêÜŽûƒÒ£¯›° ¼¼½€üý úöîÅúñéêÝüƒÒ » ¼!!¾ýý‚þûòÈþÔ®Âê¬üƒÒ¼€½€¾€þ€ÿ þýõËþÀ®餘ŒüƒÒ½€¾€¾þ€ÿ€þ ýöÍÿãÕÕñÉŸ³ŠüƒÒ¦€²€³èõþýàòíôäÉþÿÿþøñáéÚŠýÉÒܧ©·ÞúýýÞâÚÓ˲®¨¯ÊȽ4tÄȉ#þˆ¾¾ò··£ãµ¬µýñíýûâìñäØÏ¿ãáïÂ外ĉþýýþ€ÿ€þ€ý€ü€û€ú ùøùøôðëåÝÓȉ þÌ&ÓÿÔÿïáëýèûý€üûàïíñæ÷æõêøø÷Êï¼$´Ò‰ÿ#<ÿþüÞËçÊòûü×ÐûúÝêÎÖÍÖØÑÔ€÷öò"8Û‰ÿÔ6áþÒýâíßôáøûû€ú âêëçÝá¿ëãô÷‚ÿùî&ˆÿþþ€ý€ü€ûú€ù€ø÷÷õ÷ýèͼµ±¬«·Ûö‡þÌ&ÑüÒüìßìñèôö÷ù€ø÷Úìèîæûá¿»¶²­©¤ ›Ìü‡%þ#;ûûùÛÛÖèÍÚÂöøÑ×÷÷ØÜÔÎËþÄÒüÊ®ª¥¡œ˜šÿ‡þÑ5ßûÐúàìíïÝåéø€÷öõÜæëÞÚÿ¼ÏüǪ¦¢™”ÿ‡ýûû€ú€ù€ø€÷ö€õ€ô ÿ¹´°«§¢ž™•Œÿ‡ýÉ&ÏùÎø€÷€ö€õôõûþ…ÿך–‘ˆ‚ÿƒü";€ø€÷ö€õ€ôýáÅ¿»¶²­¨¤ ›—’މ…ÿIELþ‚üÏ5ÜøÎ÷÷€ö€õôóøèÂÀ»·²®©¥ œ—“ŽŠ…ÿFA=9³ÿüø€÷ö€õ€ô€óòýÐÁ¼¸³¯ª¦¡˜”‹†‚}ÿB>:5^ÿ+ûÇ%ÌöÌõÕòÊæôçàåääêÔþý¸´°«§¢ž™•Œ‡ƒ~‹ÿ?:625ÿû":€õ$×óÔòóæÑÏÌÐÎÕÿ¾¹µ°¬§£žš•‘Œˆƒ‹Þé;73.*ÿúÌ5ÙôËôçóæóòçÜääæãÔÿº¶±­¨¼ô†ÿém83/+'ÿúõ€ô€ó€ò€ñðïÿ·²®©¥õ×s_[WRNJEA=840,'#ÿùÃ%ÊóÊ€òñð߀ð€ïÒþµ®ª¥¡ÿs`\WSOJFB>951,($(ÿù"8òò€ñ"ðçÍïïÓÍîîÒüÀ«¦¢ÿa\XTPKGC>:61-)% OÿùÉ4ÖñÈñ€ðé×ïîíÒëß§£žšÿ]YUPLHC?;72.*%!ªÿùñ€ð€ï€î€í€ìûÑ¥š–ÿZUQMID@<73/+&"-Žþ‚øÁ%ÇðÇïï€îÞ€í€ìÐÞàïú€ÿVRNIE°‡ÿƒø!8ïï€îíÓÈèìÑËëëÏÛ¿É¿ÉÊÿSNJFB=950,(ÿ‡÷Ç3ÓîÄî€íçÕé€ëêêÐØÚ×ÎÒ³ÿOKGB>:5pöi$ÿ‡ö€î€íì€ë€ê€é€èçåþWGC?;62nöf0ÿ‡%ö¾$ÄíÃìßÑÛêÚéêâÞÞâÜáÐãØçËõ¢D@;73/*&"Žü‡%ö 8ììêͻպßèéÉÉÓÈÊØÈÔ¿×Ðçð¶e?4/+.RªõއõÃ2ÐëÂêÑÚÏáÑæÖÇÖÓÓÔÛÔÜÎáËäÙðúþ€ÿþúð&ˆõ€ë€ê€é€èçæçç€æ€å€ä€ã€âã‰ó¼#ÁêÀéÜÏÙç׿çàÛæ€åäåëñôêúòÕãÁå·¼ä‰#â!7éèçʹҸÜåæÐÑçéìæÊ±·_ƒpމ2Dæ‰[6×é¿çÎÖÌßÔéÜÝèïÒÁB‹møŒ ŸâïîëíëôðÜÇ<&Ž€ Ïil32 ŸôçåæëôøóòæÏ×ËÅ/*IiÈÝÛÜàÊâÚÍ·ïÓŒ´#&&KÄÙÜÜÛÄÜÌÖ»âêÓ‹³€&JÂÖÓÓÕÖýüõÏæèêÓŠ³#&&E£¡£®§ÏþÿýÕñ¹塉´#&&Jšƒž—…¶þþü×úÕÃèDzˆ¶'&&L›…ž•ƒ³ýýùÔüöìáÚæ¿‡Æ,(?f¡¡ž±âööÑÏÑÏÉ-ḃíW^ÊÅË·»Ä¼Üãöõìñõõíl|ʇÿÿýùöû€ú ùøø÷÷öôìãØ‡ÿ}„üáåïçúøôøòâÞöýÿþòû…þ ûÑØÞÜùïÝ÷ð×äÚkA;<=FpÜÿ„ýûúúùùøø÷÷ööõõþPÔÖ<=>?@Yÿ„ü|ƒùÝáèäçîõðòôÿ9ÔÖ=>?@ACÿ„û‹ž÷Ï×òÈÔÛôÞêòÿ:;<=?@ABDÿ„ û÷÷ööõõôôóùþ„ÿ¯ABCE‚ÿ€úzõÜàÚóÞñÙP89;<=>?ABCDEƒÿù‰œôáãîòÝòi89:<=>?@BCDEEƒÿøóóòòññððþ?9:;=>?@ACDEEFƒÿøyññðïÝîÿ9:;<>?@ABD€Eiƒÿ÷†™ðïïíÉíÿ:;<=pé‹ÿ÷ðïïîîííìÿ;<=>êŒÿöw}ííìëÖëþC=>?ÿõ„—ììëæÃêúm>?@ÿôìëëêêééèðÚV@Aÿ ôu{êÎÒÜÕçÞâýŽÿ€ ó‚”èÂÊÏÍÜÑÉÅÊɈÿ„ ÀæèçåææääÞââØÐˆÿ… éæáÖÛÜ´v&þ‡ÿ‡!\e65ƒˆÿ“†ÿƒŸ÷ðïðñîèççéîòæÏ×ËÞ‡ˆ¢TLMZ¡âÚÍ·ïӌֈ‹‹–v3223ŽÜÌÖ»âêÓ‹Õ‹‹–XSS]³ýüõÏæèêÓŠÕ€‹‘¨¢ «¨ÐþÿýÕñ¹塉ր‹–ª—©£›¼þþü×úÕÃèDzˆ×€‹—©™©¤–ºýýùÔüöìáÚæ¿‡Þ„ƒ“ž­žª©ŸµâööÑÏÑÏÉ-ḃðiqÓË̹¼Å½Üãöõìñõõíl|ʇÿÿýùöû€ú ùøø÷÷öôìãØ‡ÿ}„üáåïçúøôøòâÞöýÿþòû…þ ûÑØÞÜùïÝ÷ð×ä衃|yvy•äÿ„ýûúúùùøø÷÷ööõõþ‘äãyvtqn~ÿ„ü|ƒùÝáèäçîõðòôÿ€ââwtqnliÿ„û‹ž÷Ï×òÈÔÛôÞêòÿ}zxurolifÿ„ û÷÷ööõõôôóùþ„ÿÂmjgd‚ÿ€úzõÜàÚóÞñè“~{yvspmjgecÿßÛÛ÷ÿù‰œôáãîòÝò£‚|yvsqnkheccÿÜ×ÓÛÿøóóòòññððþ‡}zwtqnkifccdÿØÓÏÌÿøyññðïÝîÿ€}zwurolifdcc‚úÔÐËÇÿ÷†™ðïïíÉíÿ~{xu—ï„ÿúßÑÌÈÂÿ÷ðïïîîííìÿ{xvsïñííìèãßÚÖÑÍÈþÿöw}ííìëÖëþ~vspÿííìéäàÛ×ÒÎÉÄ¿½ÿõ„—ììëæÃêú™tqnÿííêåáÜØÓÏÊÅÀ¼ËÿôìëëêêééèðåƒolÿíêæâÝØÔÏËÅÁ¼Áòÿôu{êÎÒÜÕçÞâý€ÿëçâÞð†ÿ€ó‚”èÂÊÏÍÜÑÉÅÊÉÿèãßÚÖÑÍÈÃÿ„ÀæèçåææääÞââØÐÿäàÛ×ÒÍôò¿ÿ…éæáÖÛÜ´v&þäÜ×ÓÎÊóñÄÿ‡!\e65ƒ ÿøâÖÏËÅÃÎòÿ“†ÿƒŸùöö÷öîèççèîòæÏ×ËðÈÌ×ÊŽQJKW¡âÚÍ·ïÓŒî€Ò Ëx0//0ÜÌÖ»âêÓ‹íÓÒÒÊ’XOO\²ýüõÏæèêÓŠíÑÒÒÅŠYwzaºþÿýÕñ¹塉îÑÒÒÊcQ9‹þþü×úÕÃèDzˆïÔÒÒÌaO6‡ýýùÔüöìáÚæ¿‡ðÂÃÏÉs#dS(âööÑÏÑÏÉ-ḃòtÚÐÆ«´¼°Øãöõìñõõíl|ʇÿÿýùöû€ú ùøø÷÷öôìãØ‡ÿ}„üáåïçúøôøòâÞöýÿþòû…þ ûÑØÞÜùïÝ÷ð×äóι°ª¤¢²ëÿ„ýûúúùùøø÷÷ööõõþÅðï«¥Ÿ™“›ÿ„ü|ƒùÝáèäçîõðòôÿ¹îí§ š”Žˆÿ„û‹ž÷Ï×òÈÔÛôÞêòÿ´®¨¢›•‰ƒÿ„ û÷÷ööõõôôóùþ„ÿÓŠ„~‚ÿ€úzõÜàÚóÞñôʼ¶°ª¤ž˜’‹…|ÿPJ\Üÿù‰œôáãîòÝòÒ½·±«¥Ÿ™“‡€||ÿLF@mÿøóóòòññððþÁ¸²¬¦ š”Žˆ‚}|}ÿGA;=ÿøyññðïÝîÿ¹³­§¡›•‰ƒ}||–êB<61ÿ÷†™ðïïíÉíÿµ®¨¢¶ô„ÿêr=72,ÿ÷ðïïîîííìÿ°©£ôbba[VPJD?93-'ÿöw}ííìëÖëþ®¥ž˜ÿbba]WQKE@:4.(+ÿõ„—ììëæÃêú» š“ÿbb^XRLFA;5/)$Yÿôìëëêêééèðí§•Žÿb_YSMGB<60+%<Õÿôu{êÎÒÜÕçÞâý€ÿ`ZTO´†ÿ€ó‚”èÂÊÏÍÜÑÉÅÊÉÿ[UPJD>82-ÿ„ÀæèçåææääÞââØÐÿVQKE?9ÕÐ(ÿ…éæáÖÛÜ´v&þgLF@;5ÔÏ?ÿ‡!\e65ƒ ÿÝvH<602\Öÿ“†ÿƒis32Ý ³§©¼ÄÉÃÅÈÉÇÄ ¨PTÀÚêúúüÈùÌ¿€ ¦>@µÔçîáþýÿþì€&©>8¡ãøú¢G=K§ÿ²UPŠ£ìýÿ>Ó?AGÿÅ¿ÎâÚèþ€ÿ°CE€ÿ Çß÷úö¡=<>ACEG€ÿ ÃÐåøÿE<>@BEF‰€ÿÀÞöõÿ;=qê„ÿ½ÎäòþI?ê…ÿ¹Ýöðú¤E†ÿ¶Íâííùþ†ÿ³Üóäçéèþƒÿ ¯Á®ª¨³Íöƒÿ¬«ª¥£ ­åýÿûñ€«ƒŸ¢¤¥¦€ ¶³±ª¯ÃÃÅÈÉÇÄ µ˜‡S`ÕúúüÈùÌ¿€ ¶“€M\Òîáþýÿþì€&¹“ŠŠšàøú‚uxºÿ¾ž›¥²îýÿ~àqkiÿÈËÛçÞîþ€ÿÁgc€ÿ(Çß÷úöÄ€xsmhdeÿßìÃÐåøÿ†ytniddœûØÒÀÞöõÿzu•ï€ÿ.ûâÑȽÎäòþ~qïôíëãÛÒÊŹÝöðú¼oÿíìåÝÔÌÃà¶Íâííùþÿíçò‚ÿ,³Üóäçéèþéà×ôÇÿ¯Á®ª¨³ÍöñÛÐËâÿ¬«ª¥£ ­åýÿûñ€«ƒŸ¢¤¥¦€ ¹¼º¬¯ÃÃÅÈÉÇÄ ¾ËºZ^ÕúúüÈùÌ¿€ ÁÏ·CGÍîáþýÿþì€&Äϳ'+ÍøúÞ²£ÊÿÇÑ»@DÛýÿ±ê™Ž…ÿÊÔßÖÌíþ€ÿÐ…}€ÿ(Çß÷úöà¶©ž’‡}}ÿS¨ÃÐåøÿ»« ”‰~}¬ëGHÀÞöõÿ­¢³ó€ÿ.ëv>3½Îäòþ©™ó›c`VK@58¹ÝöðúБÿcaXMB70™¶ÍâííùþÿaZ·‚ÿ,³Üóäçéèþ_QFÒ4ÿ¯Á®ª¨³Íö®S=?›ÿ¬«ª¥£ ­åýÿûñ€«ƒŸ¢¤¥¦€h8mk  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþè‡ÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ÿÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè]|‡ÿ©Y£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ„@¢è$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ* ÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’6ÿ,ÿ4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ4&ÿ,ÿŒ"„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÞÿ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›ÿ4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿŒ"„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñšÿ4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿŒ"„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿ4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ"„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿ4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÿŒ"„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñšÿ4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ"„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿ4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÿŒ"„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüÿ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,ÿ‘5Žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôøûèÿó¹ßùÿ“5Žÿ,Ï4&ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäŸ}}EODP,)+3Z6(ÿ,?6ÿÿÿÿÿÿÿÿÿÿÝéáž3" 3ú, W»æçâåßï䱋+/ #& !!$&&"  l8mk ÿÿÿÿÿÿÿÿÿÿÿÿÿÿí‰ÿáéÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú{Ÿí(ÿƒ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿügsþ4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6ÿnjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÿaVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿnjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿaVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿnjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿaVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿnjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿaVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿaVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿaVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£øÿÿÿÿÿÿÿÿþóÓºÿÿÿÿÿÿÿÿÿÿÿ7qøÿõéìÚ¢jD1"ïÿÿÿÿÿÿÿÿÿî0JQDA0$ ÿÿÿÿÿÿÿÿÿÉöÿÿÿöÈs8mkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿõµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿûàôÿÿÿÿÿÿÿÿ·ïoI¾ÿÿÿÿÿÖC´öî’iep-3.7/iep/resources/appicons/ieplogo16.png0000664000175000017500000000033312271043444021272 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®Îé•IDAT8Ëc`hÀÈÀÀÀðÿÿ6¬’ŒŒ¿pÉÁäYþÿÿϦÞsùƒ9šüI†Š»ÆXäàòLP6æxäàâL”†1œÄ'ÎBH·Ê¹‹x¤4 u&Ã<E†ûÕé Iè|&FFÆ_ÌPÄG3á‹gj"QœÄú÷ñÑŒPŽ®PF“ÃÆ`¢Ú, baçIEND®B`‚iep-3.7/iep/resources/appicons/ieplogo256.png0000664000175000017500000001070512271043444021364 0ustar almaralmar00000000000000‰PNG  IHDR\r¨fŒIDATxœíÝoŒå}ðï33ûçöþÙÇ9·9DðŒã7E*Q‹ÚŠºMˆŒ"·)åÔTABåÒª¥jh«æ ïR +Aª‚H¬$^@ý& 6 ’©Œ¡®Á€}>ì;ã»Û½ý{3óôÅÞ»{{»3»3óìîóýHHÞ½Ýý=Ï3ß}fvv """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""Ò‡òŤ”@¬ê.£î6ùãX]û÷ªB†YŒã×uBÿŽ`mÂ$×þK 2a(ãê–¿pñÀÌ\þ˜#å—:iµÇ2Ä3ÅÕÔ“ŸØµÜìq[ßìw§”Ξ=Çáøõ òž‘Îâ“»ÞºØtü›ñÛ¤ªï»ÿø…ß,Ôna †”rÆq‡îkÆïÒƒ^½t™ã×ã¤ÄŒadïk7Z’Rš¨›<¿pñ7þî „Øoš¹—XþÞhüf¿;}€û¥;¼åø·âåHp²þŽ™¹ü±vŠQ8pßä_=óC{°y"l¿ÒÙ³¿~"pßÞvëVãß”ï¸ÿø…ÃÜçï>©©ß›pjǬfü.=øÀaîó÷ŸÃÃÓh<þMy €Dõù•2w!#–LýÑ_ïBå`>'¨?gá:ǯ%M#ýØÄŽFãßTÓRnz~Ô×½†öýñ××ÿ `ªÑøñ£¾þuÿöm5ãïå9­V5ìåK{ÛhEįôô‘#GjþÍ?~„ã×ÇvX±šñ‡‡]_§ƒ®ŸáG]ÊŠ Ußß»H #º÷Ýë‰@¾dlï ›îßLb,þtÒ½~Ðz3¶H™‹Å†÷_,‘s¹LëGˆ@žåeÙø2t€÷ó…P7Ýë‡@ž9-.AöF {ý00È3ÓÃõ£ÂÜt¯y6hš6[ŸÖF {ý00È—Û’HyøÈ+¬@÷úAc/–¸35 l#н~Ðä›ê@÷úAbP[Toº× €Ú¦z#н~ÔÕîõ;Å Ž©Þt¯ß BõF {ýv1(0ª7Ýë·CÉ÷¥cÃ-ç!]²”WÑ„î`˜0)‘Hµ~|XßÞÏwݦ]ßîL `ÐÃv¬¼ÈÀ)dPš;uÙ®Û>‰ØØÍª›Õîõýˆ| <ÿQÔ%{ÂêâœBFu3£z9¬{}¯" ·”‡´ËQ–ì)öÒ5ÕM”ßàjy•õ#iH׎²\Ï‘®ú£ÂA[ß¼,nK[\lƒõÃi£÷®™%aôç1}R,ÁK´Y¾oÏúÁŠ4ŒD ŠGY²§XÛ&T7!pЏn{[ù¥cÁÏ Ýë·ùAÀDz7D| ê²ÝÍ0OOÁQÝ’@ù™ü·%±‚]é^ß‹È×äF"…ää8¹%H»uù®dÈ%T7#P~'ÿŽXŒõP²S.L ÖȸŠÒÕ“_÷ú~ðT` ”êɯ{}¿Õ“_÷úí`P TO~Ýë·‹@S=ùu¯ß uDõä×½~§Ô6Õ“_÷úA`P[TO~Ýë…@¾©žüº×€|Q=ùu¯4yVr]¥“_÷úa`g%×Û÷ÕÚüº×€<3=|_=Ìɯ{ý00ȳAÓD\l½„=ùu¯ùrû@rÓ5îL»“ÉH&¿îõƒÆkt‘/ƒ¦‰;SX´í}â1 ¾dýîà ß,!”¾Ûé^?H½[D‘ÆDciŒ@¤1‘Æ”| (n9é:¥¼Š&tìüZ’aÁH¤T·†4y8… Jsç£.ÛõbÛ'»Yu3H3‘ï”ç?ŠºdOX]œƒSȨni&ÒpKyH»eÉžb/]SÝÒL¤ ]oSЕt½üˆ4Qp" að«Í#ú_‡%½EF"aEÿè½ÂÚ6¡º ¤™È&Ò»!âQ—ín†‰xz æÀˆê–f"_“‰’“{àä– íRÔå»’9<#–PÝ Ò’raZ°FÆU”&¢*<˜Hc "1ˆ4Æ Ò ÍÎÎò¼kjŠÐÿ6>kÝyü§¿QÙ וry¦î®–çÞ3ú_¶æ–i^VÔ ÙByõjÝ]+­žÃèsBˆ2ª&‚10ÀU@Ÿzei±~Plõ€„Ë›šú¹âæPm{æåËõß'ç €*„97vÿéë°bçT·‡‚õëå̉º»l0¨š¢(„˜M«n çZyõÔß}rùtÝÝõÇbhè–“¿:WN«nu.ë8ðúZ¼F—æ~›-œûÓ÷ÎÿÀÿeçïúÚÐÐ~Õm¢ÆÊ«W_YZlt´ à]x8h€–PÙ_Üùﳟ¾ àmÅí¡öQÙø}­äT–ŒESªBm™ð1|¼ó¯cкY|IÅm¡ÖV\‡~0hƒ”ò3™»ï¾;Ëå’ƒƒƒÆÄÄDLU{ …‚ûé§Ÿ®ÀǼZ,e˜õ’ɤ¸õÖ[7úÛ¥ý_Ae·-Ù`hLJ)Py·OH`íS¡3gÎx:‹L<€e!D A°Eÿ»ùJµö`himâDo}œ”R.!Úþ%Ýû_­—:ORÆLFoŽ¿`lm#öM÷þ×S²Ž ·œ‡tÈR^EºƒaV~-ɰ`$R¡—“RØÞì1¿|íÐÞlaaVíìH®°ð•жð2#ƒ·l|qiß®GÎýîW¿—0ŠÊ¾°gº÷¿‘ÈÀ)dPš;uÙ®Û>‰ØØÍ¡½¾”2‰-&ÿ³/Þ~8“›;¸jç†Ö€6esŸŸÒ~eþ ü÷›]NÆG_Ýûå?NJù–×¥°îýßJÓeÄÚriã<~áâ·®äê¿vèKá“·ùá[HLÞÑÑσٹř‹ÿö[u×€™µåâꖼϿtï¹ëo“®ó¥¶‹*d±gà®>ùÄ£•klE÷þ7é>[ÊsãoÂ^Úê ÏŽ¢n¬Ÿ}ñöÃWæß8Ñ«“wõûð«§žÅh‹‡êÞÿ-EÒ ä£Ë¾%Ý@ìÖ¾¦”&*G7<ÿÒ½>[¾ð£À‹©±ß–x [ìÎêÞÿV" aðSÇf„a†ñ²›Îê›»þæ±0 ©"îûÎßà‡ö`ó† {ÿ›Š4ŒD ŠGY²§XÛ&ÂxÙš àÙo?ÜËËÞ­ìºÓÒîAmŸuïS‘šHD]¶»&â驎6Qó»ã™Ü\×éB,ŽôïÄ.TÞ÷áówBÝûßTäkr#‘BrrœÜ¤ÝÍg]FLJK´~ Oããã›Æ·?ê ʾ¯áë¿~¢r–ß””rÓ…1tê?€ÿmõ%;å´`Œ·~ u$™LÖ¬ð~ùÚ¡½ªÚ…áÑš¯3§92÷ôÓOoÜ¡[ÿQùŠpÓo öâ©Ô¦õ3Üú•ib¨úöÉ“'ÓÕ·uë?*!Р k=¾Bˆ1ÕmPl[«h=AtS,-ìT݆0YÖ¦wÀº÷¿@Ëf³nõídb‡§kÅ÷*Û®½†îý÷‚@¤1‘ÆDciŒ@¤1‘ÆDciŒ@¤1‘ÆDciŒ@¤1‘ÆDciŒ@¤1‘Æ”\\:6ÜrÒu KyM†aV~íȰ`$R­OÔe"§Aiî|ÔeCÛ>‰ØØÍª›AäKä»åù¢.‰ÕÅ98…Œêfùi¸¥<¤]޲d¤ì¥kª›@äK¤ ];Êr‘“®£º D¾DÂPrÌ12Â0U7È—HÀH¤ ¬x”%#em›PÝ"_"?˜HD]6\†‰xz æÀˆê–ùùšÜH¤œÜ'·i—¢. sxF,¡ºD¾)Ù)¦kd\Ei"ªÂS‰4Æ Ò€Hc "1ˆ4Æ Ò€Hc "1ˆ4Æ Ò€Hc "1ˆ4Æ Ò€Hc "1ˆ4Æ Ò€Hc "5 !DÿþŽ—fggµ?Ýûï…—ÀƵ»öÐm¿ ±-Ô!{ñÓ™ú»P5~:Ý×ã·tì­–¿Åç%²Õ7L!.ûiEÇÎ.\­»kuã' ³oÇ/›û_k¥ÕsZÀÚnÀÆ ÄŒ¾NÑ^–™y­þ X?~1s°oÇï3›Þµï«çx:(„ÈX€;v$î¿i6;·8³ò?¯Ôÿ>ù P;~;¶ïëËñËe1óöoÁþ×ê|°N‘pãgÝöºeàœßR¸rçß8Qw—ª °>~:ýºaÄúnü.œû_«¦ÿ[ñõ1 ¢(„˜ßOûy…Ë^ž?uí…:]wwýþàÆø%£ÓÑ´,™%œúÅOÀþ×ÚÔÿFÚ:àô÷÷œÓí<—‚åV>¸ò“£O5øÓìVÏyü/¯Ÿ‘Àtx­ŠN©€þë?Àþo¶eÿ«µ}"Ðÿýý]Ï»À!éØ-—{yþÔì³ß;Zºòn®îOWÑâÐÅóRâã´^&v«ÌN?†£W>û_«eÿ׉N1°ëž{¿ðàGãã·¦5ÔéëQkvnq&wþ –ý@eàÏÀÃgÀ°ëÜû‡ptü 8hšè‰ñËe1sáN4Xö쿯þw¶Ø;¾õw |ùwöðšÔ€]¸š™y­ÑÑþ‡˜‡ƒ?U6Æï›»nÙ…®¿lWß9Óðh÷:ößgÿƒ˜°3 ×¢ö¼ “]?ŒûßFÿÍ€Šß@%}Æz=ògÀ{ð¸ß×@¯ûßfÿƒZ¬G%M“¿.m¶à:|ðñ —Æý ÿAÀº4zãb/Z°yÚÔÍãÇþ‡ß""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""¢~öÿØ®HFÿ±6µIEND®B`‚iep-3.7/iep/resources/appicons/ieplogo.ico0000664000175000017500000031452112271043444021120 0ustar almaralmar00000000000000 ãf€€ (I@@ (Bq00 ¨%™^  ¨A„ h锉PNG  IHDR\r¨fªIDATxÚíl×}Ç<’&­¶dUN,»¨b'“d± mMæ  °t¶t ¤s6 Á€¤-0xs·b.:» °š¦®M‘2´(`lkÑaŠÉê *šÄ²-ËÊ"KŠɲìØúCR¤È»Û{´¨Ò4yGñß»»ß÷<ÜñÈ»w¿{ï}îññxç#[|ªw Æ@0€1Œ` c ÀÆ@0€1Œ` c ÀÆ@0€1Œ` c ÀÆ@0€1Œ` c ÀÆ@0€1Œ` c**Ó4åö‚Y‹4±,Xêö>Ÿ/¹<Ÿóf53Cù9Žª—YF¤°Ø±°x󚊣Äqœcb2W©Š€òs•.ÿô6KYi¹â4ˆ©G¥©-â˜brYLõR·òs/•(ÿ¶·ÚD…Y#&-¨8J‘ÝÁ+¥œ P~ž äòÏeU0 c­˜4[}æo1±c6šZ'ç’zÓÕhòN¥‡ÊÅ4ß|{Sè\æõCw7{ü® ór^vEš]ÍöŠ)¿™ø»Éù…tù™‘h“qíS”Ÿ" p>¸éÖ•ò_÷§_9×ðè£%—>Š€ü®(RK¾÷þäõáÇ./Ä»SÔ­ú yÑwŸhX8þÐö–WŸþã[Þ/¶+hU~~å±ÔÌån3ž@ù9¿oÂ_ßx¼±û˯n8ðÏE—!ŠÀòèðÆÜnã_ýtô¾&#‡MŸo‹êãÂM󽸔¬;4òí­sVŸ+T~“OþÍ}‰³§“n¢ü\ˆ/à‘ôÙC[ß™+yÅ|HTœõ"Õe/“gýñkñª>ÜÑu³ß¤†¬$¯üäY?9þ ÊÏ嘦ѯiÑJ•€­DÅñ‹´1{™<ó¿?=¦:xpÓ0ßþèÀ=_³©›ÞËS~é3?ÊÏ+˜ÆÛÛNÍ[þvØ À0Œz1Y—½lû÷Ïö¡Ûï,"çßé™z}ßQ1;LY!_ù|~wºýÞâÄÕ¹ž¯ÝTþv#€ bʼF×ß™‰øôðÁ?|œ®þ{"ÅÓËsÊ]oÓéß?}ö¦ò·£lÊ~½ëÈÀkíw&Wþë…'¯žxõ‚˜ˆÔ/R*·üFï¿÷5Œö{“ç''ŸüÑ¥+7”¿Ý:–ß"µe/ë|~`Ru  ?ñ‰ÁÞñö]~9-Ên8·üFºv¡ü<Ê@,ÒûÈÐ…•òiÈn;¬©5óZ^äóßÍýJu  ?Ks3'ÇžyðPæõ¾}û>8räHCæµ¼È'ò?¿Fùy”KK‰“{†e-ê#›¯«FÿM*z­äé/~3󺳳sjpp0’yÑos-™êÿƒ³ç¾™µhl9ÄR¹—ŽBÎ&âBã™×€·É#y©p¿Õ:«~p6ÉÅùáÑïÞÿTæu®ð €·YHéûΠ<•µ¨<à+€»ÈílÞ¼96>>þIæ5zÞ¦â=À]@¼˜ð`N­2MyåÙÊëæ©v÷áž! æÔBó)Î/.Þ´üöp˜Z‚ªÇÈ=+ æÔB§"QZ2o¾•_¤íuk©Þï¯jŒÜó·`NµÕuˆ-|¿Ú€{þv@Ì©¶ u³©f#àž¿sT÷2T«pÏ߀9µ `A·¿eµ÷ü­€˜S ÈŸÀ΋F3 ÛÏV£pÏß €9µ¼€s#T! æÔòJ@Õ€{þù€˜SëKU7îùç0GÅT7îùg0GÕŸT7îùg€˜£ò߀ª÷ü%sTÿXu#àž?ÀÕHïóF¨2×ÀÔSd,ÅÈ4t2±ŠïJ4?i¡:òiô´\œ €ô~0n„*ów…ôÅyJL}Xv°^#ؼ‰‚-íemÃ)Hï ÓF¨2W`ñãÓd¦–Ê Ô«„6ýù×6•¼¾“Þ†PeþŽ€!ºûñOΕ ×ñ×­§Ð­·—¼¾ÓÞ§U4‚Ö@€¶® #ÿq¼Ðý·F 7R¸½³äõ(€ô~‰FЉ’ÝèÅÙoGÝZä_"ŽzÖx± ¹°§+)ûGÖ7ütÇÚÊ7@.ù;^ŒÆkc’b+¿d»¨üMÊ^Ã)W@ö3#d.ÙßY… šŸÖ´uP ¾¹¬Í8M«©ü·…Cô™`ù—+Þ®ž"=:+z‰r7å ü­¤CeoÇIàÖøœ¿kªƒSÀ±ñ9!€9Nׯç„ü!æ¨çÆç„ü!樀êÊÏ= ÀUP]ù¹çŸ`Ž ¨®üÜóÏ`N­ ºòsÏ?€9µ€êÊÏ=ÿ|@Ì©•TW~îù`N- ºòsÏß €9Õ@Â0¨?ZÜ-ܪQù¹çoÀœj `>¥ÓùEû?qU«òsÏ߀9Õ@T×i fݪYù¹çoÀœZŒœŠDiÉ4ó¾W‹ÊÏ=+ æÔBò,8OÜp;y ‹ÛÂaj ª#÷ü­€˜S«Ÿå=R”0®Ÿ ?#*~HÓj'óü 0Gõ¿Z æ@¼˜ð`À€9o æ@¼˜ðÆ5Ï0–bd:™‰âþ\áI4?i¡:òiô´\ Þ¸Bx@h~‚Í›(ØÒ^Ö6 Þ¸Bx6`a¼øl@P;/<د>ÔÇ Ýk´p#…Û;K^à 5è€rp¼$( Æ@9¸B²˜!sÉþÖJlÐü´¦­ƒõÍemà+Þ®ž"=:+z ÕÇÌø †ÊÞÀ×T€7s Þ@Ìx0à À€7sr ˜5 c&óð6s `BLW~céÚ5©z?AuˆEzºp4kѹØjÀCä€(¿Áì2ùüî>ÒÍ-ª÷TžWçz¾66öVÖ¢±åTÀCä€Hý¢ ¯/n F¾°ç0Åb_U½¯ òüãèèÞŸ_›¿”µhH¤i«u QHrFH ^LÖaÀ›äùþ/yO¤ˆÕz€‡°€D”eX¤¦‘{»NPJ¿Sõþ‚ÊñŸ^=ø­'ÞÍZ”é¤Ýz€‡°@†übWòêìoUï/¨ —–'÷ ÊY,þ¶[ðÅ @2¼óî'HÓzUï3(…”>ü×Ãÿ· ¶Íy«O¤¸Ýú€‡X$í¼ûa|o4_ƒê}«Gžù¿>2Ò“§ñË¿¡b¶xˆÕ @roCxÏ¿lÞ²¿#¼¶"prÀïùùc9ßù3ȳ¾üK³-ÀC”"Áz‘vÊ™ï¶ßzÏîÆºªãù™‰ëÓÿ9wµ?ç§¾ld£—å)v›€‡(Q’m"mV½ÿ ,ä™_^õWtã—@¢ H¤¶©Ž”„ñ£"»ýÙ@¢LHdYK „UÇl‘gzy­¿ð³í/à!Ê€(kY‚]]]·D£Ñp}}½ÖÖÖTO<7.^¼˜”ó£££ÉD"aV3¿P(äëèèX‰×¡ñˆ/ËuÕgû|@bµ ^^èóùä?$æ5Õ1X!öS>IvNL+"îñ§·is€ Q¬–+~ƒ¨HõN¯ô¹ˆ}6Ä䲘ê¥nƒ{ü7lÏêMÀ]#Y¦bÒâ¶ŠŸCR4€+¥œ ¹ÇŸ‹²çK12 ÌD¬6‡Ì‰h~ÒBuäÓéi¹Ø À0Œµbbùô‘{ë‘ ñ+ëÒÛKÎ7Eâ—•ýiHóç›>»ò,¹»·>qn÷]OÍËyÙiv5Ûã>j.< 4?ÁæMli/kVXþ'`K¾õ~ü³;›‹]ìÖSÑnÕÇÁù'¡uÇwt<öê—¿ðòûÅv…¹Ç_x{àÙ€µ¥ÒϤe,îoÌíöýùý÷]œùÍa“tWÞ!ȯ_$#yèÛ_§9«Ïqß <ØATúéÀô;¬é†ïò¬wu~ø‡ªc.ƒúý=`Õ¸ÇoEM€î¿5Z¸‘Âí%¯_àž€gEÚ˜ý9y曚ù_Ï æš&½}ðô%ÊóÛ¸ˆÝÏ9~;ÐpÕè†ñ‘˜®Ëþ\Ï+Á>·v{ qþ õ¼ùÉ;âÊ›`¬4„̭иÆoÆD5Æro î™®oÉ8M?ý÷ô8]¯üòï°éËcEü8ÇoGÍ {‰™2—U3ç ùiM[ê›Ëڌ݃A$ß{£ñ57Œv—Âñ§'}œ.ÐõËeå¯)ÿ&ÎñÛ­£ì:=:+z ÕÇÌø †ÊÞN®6lع|ùòTögž}EóìƒA&F©÷åÊ<cZÔÝa‘Ú¸ÆOEÜWz»gÊ‹\>ÿůTïgµ˜¥“Ï •›cîÛ·ïƒ#GެÜåˆ[üTÄ}!a'¯~ç²°@ý=ߢ•ø;;;§WnÁ-~“x‘+Ñ⢌g^skÜã'<”vðêx†ÅE~f?=…øW€8¯7ž¹ÇO/ ` @Œ €10€ Æ@À€@c ` @Œ €10€ Æ@À€@c ` ¸Bò¹ÆRŒLC'3S}ÜJGó“ª#ŸHOU@Ž€WlÞDÁ–v¥û@Ž€—Ÿ Xî³ýÊ€-¯?¸Ü§û– 8Z^íþgÐÂnïT–?8ZèTp´$¨àxÈ^@bf„Ì¥EÕÇ«rh~ZÓÖAúf¥»@Ž@z»zŠôè¬è $T³Šàol%-R½à€ê@c ` @Œ €10€ Æ@À€@c ` @Œ €10€ Æ@À€@c ` @Œ €1PQH ÃØ”™‡œM®³¢üf2/86îñS°ALVîyÝùüÀ¤ê@A~⃽ã/ì=šµèŠ(¿‹”U~Ͼ¢y¶ü&F©÷åBüYñ‹4`µŽ­r¿lÿþÙ>ÓçÛ¢:Xp3‘óïôL½¾ï­¬Ec¢ì¦²Ë¯ç•`ŸIº'Ëïüêyó%BüYñ/§‚Ø @",*ŸwÕ çw<K_U,¸™ÉŸ|goôÔ//e-i:»üžë]w8•\ðdùýìuÚ{æ7„øsâ·Z§(HÄA¬“up&y¾ÿKÞ)"g2åçÕïÁy¾ÿ"þ¬ø Q´$¢+©é®çN¤ˆîT4ø³üòàÌO¿ónÖ"QDt2û3™ò{öµà 2tO•ß©>:xì BüñçcUÈðG/žïºOþVuÐà:Ks3'ÇžyðPÎbùó×p¾Ïÿàè†®Åø§ž)¿ÙY:ùÜBüEÆŸMIÜþÜé'|äëU@^%¹<=wê­þœŸúnø]¿ò+²ŠÍ®”ߟýݳ¥ƒ[~‘š>óõçüÔ…øËˆ¿li³âãÃi~yÕ×j*/”â/!þJ @"à6ÕG)rÄwŒŠìöÀÍ凸KŒ¿’ÈK.åA «>" ¦—×zËÛÑÞ"qSù!þ Ä_id¸…Üq݈,xù/¯rÎvv8¹ü㯖.€1Œ` c ÀÆ@0€1Œ` c ÀÆ@0€1Œ` c ÀÆ@0€1Œ` c ÀÆ@0€1Œ` c À˜ÿˆõ`Ò%òIEND®B`‚(€ $00000000000000000000000000000000000000000000$00000000000000000000$00000000000000000000 8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@< 8@@@@@@@@@@@@@@@@@@@@@@< 8@@@@@@@@@@@@@@@@@@@@@@<b@C¶v ·Á€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"ÏÁ€"϶v ·L1 W@@H~Ò‹*ÔÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿщ%ïЊ$¯—g/FHÞ~26ÜÔ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ-1Úï.1ܯ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€€€€€€€€€€€€€€€€€€Ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(  @@@@@@@@@@@@@ÿÿÿÒ‹&ÈÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&È@™…Þ™…ÿ™…Þ@™…Þ™…ÿ™…Þ@ÿÿÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@ÿÿÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@Ò‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…ÿ™…ÿ™…ÿ@™…ÿ™…ÿ™…ÿ@ÿÿÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@™…Þ™…ÿ™…Þ@™…Þ™…ÿ™…Þ@ÿÿÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@@@@@@@@ÿÿÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@/2ÜÈ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2ÜÈ@ÿÿÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ@ÿÿÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿ@/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ@ÿÿÿÒ‹&ÈÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&ÿÒ‹&È@/2ÜÈ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2Üÿ/2ÜÈ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&ÿÿ&&&&&€&&&&&&&&ÿÿ&ÿÿ&iep-3.7/iep/resources/appicons/pyzologo128.png0000664000175000017500000000646012271043444021611 0ustar almaralmar00000000000000‰PNG  IHDR€€Ã>aË ÷IDATxœíKl׆ÿ;)“`$Z¯2ªõˆ*”µˆUD¡È€Wªºª» ímZDYM7±ÜE7YDâEŠÂQ7…t¡¨(À†B¶R± 3 8 (Lô¢š’(‘· ’2ÉypHÍÌrî¶æAñüsçÜÇ9àp8‡Ãáp8Ö‚¨ºjp¤hœ!êÎÝÐϬZ„†²‘8( Çóøbåk¦&© ¼|þë ˜Ñß”:„b‘¥¬ÍP¢AñìÐØ{ ämƒl©?èìrcsãSÖ¦È!ßœ{ $dœ)uLšðåò=ÖfHÑ({F@°ôPóÀ8š^8=^ÝŒªE’±UÀÓµxºö°ødö»¬1”ymÓhžÔÙœÚ%ÿ@8=^Ø\íØ/œ5oÀ,Èž!è+üÑí›ÐÛ–ºAô]•|—fB^%4ØzÚQW4ØìŽâƒý£-l¬QFµ8•‘IíxüùK”á°8\‡ ÀâpX.‹Ã`q¸,€Åá°8\‡ ÀâpX.‹Ã`q¸,€Åá°8\‡ ÀâpXÕ8JléiG]q°em‚jËvÍ!ÊváÈò,.9Rü]š ¥ è·Ø/`7rGgsjŸdlµ$+@Éwi&ä“CGz!ØÖ3EšFWl®vØ\mpõŒÀÕ3ÂÚ$YÑÄîßçdŽúÌZ+@>=|+¶‡Î.7@~i ="2©}'¶q¸ó?~µ Àœ‰©{k»÷7ÐôqÉ:‹Èç11JÊõ67>EGW6Èž²îDq¦ãg°¹ÚY›rBìþ-ì„ÿ->A1ƒÈòŸŒ·H=Ê€ÍÑÖ!nœ7À&Ehú‰è Z¼ 6¦¶¤SI|wï$r-Ósh”^Fdù&†U€ºA,é±Í‚`ªððO.\AK®V Ò©$¾ùä]î<)9Cã àÑÒÿ˜V! õLB6xú †Æ>+̳?Nl33é`'Šo>yWìQÆA&`ÖDP)ji$Ð]©dlUÆù˜¯5çµÐÀÿu€ 5ºÚ 7coí¾¿ÿ¡ø¥sˆ,_1Ü 0¿†ü¯˜+ W»Ãðñ€–n#¹+u*ˆÈò? 5FCÌ-€çÓ6ÀR&p~½Lèœ6`ìü½µØ\º-åüºŒô•0>dìüÝÈl.I¬ÐÊ®Þ1õö.z`¬;_1ÒÔö˜~µ÷ `èüt*‰Å›ØÏíêñGSfÝÎÅŒi:ÿ(±…Å›‘>ÖAȾ¬ÿH_ ý[†Î7$Òémìƒ[®Fh@Õ}4·!W††@Ž×YM.é+†Î—MÒ t™éªß?ÚGÃ@‡AÉ”fÛÁP¬ƒÐy€„±Ÿž7ªªŸ:_vBt–ߪêC‡ü¯ƒbªtu²nP̃`^ï'ú€¡ó#ýJ¿ÌþÑ4 A2Ílã'ŠuP:‹ÃÌœ­‚ö`äüt*‰Øý[R™¹qPDä¿WôÙ'~Fã›Z»ÑÔÚ ›«•ikû±U%¶p¸óDbBŠuÌhÝ"h+†Î×lBgÈÿ2(SJ‡k,HTÕ*O1[E"º‚DtE9çAãy íÀÈùšFúCcïÄ-uºy`nßδöœÂâòìDÜU¨É@ãæªŽg ÐFŒœ”ØÂ× 7d’4ÒAÕÎïmÁ!$õÔ vÎú.Âí›0|ïÄt*‰xä.v#w$–§A“îlùäÐr0 ø6oâh/V|0;¡ó;ì~w¨êCúG[àæAÄiðnß<®ÂÕ3Â$Uh°Áéñâ…—ü€ƒÍÇÅâA#ñà…CªßN×0ä‰.ü¹ôpe‘¾Ì“ßÔÚ¶áIÓ£HDW°^^¿PeKP½Oìˆ×ïÑ-ÿJõÈ8¿y`þ˦Ý*W6Q¥JT—j‚5|IÑÄÙ£H¶Ù=ùfv>Ý—¸ÃYÜÝ$dg„ÙJ?¯òÉ 8_’4]W}­oìÃÒ-Ý›Z»qîÒµS;?¸• ÔéñjH6Øè¾t ß.¾_<îAH>ÿ:"Kª×5TšÈùO×÷—Âæ·åûƃcoB oÒÊùG‰-Dÿó<‹†qœØ.ú³[Å_-ÁÕ3¢Y Óü’‰è ÒûOŸ$ ãÅ067J›HIÔ¿Lä|°•¦‡S³pCþ—!¢fR°;4q>Í VÄ9Nl㇥ۧþ 9wéš8Už9µÛÕ«€Éœ@êÄÿeÅ›¨x"Çsáª&Îß/H C‹y K'ŸTIþu ØG‰aFÍýå08ö&Læ|Ò]4ŠyIô¶`hì3Ìvû&4ëêí­=ÐåZ5Ø\íI³dçÇ^-w¯r˜}òE‘%kçYå»}ÅE²7aøüó@f‡@ tºtxW°;4Í4®¤f‘õÎú.âéÚÃâ1‚ÌPìË·ý£- ÅO `ççéô_FSk·øÁˆ0Ê>õâ±ý®×~oêî^5tø/—! Žô*Ý#/€&!X:š5½“×Ñáÿ­êë»=“ïh^m´’šEzÕ7rz¼âBhœVºG^BqÀÔ<0ŽN‘ÂÌÁYßEôL¾Sv.Þáñ¢wòº.³y•Ô,Ô³¾¡Û7Q|€ÅLòCÁC~Zø#ëÂŒj9Jla7r·è]hsµé>›N%ñõ²ï÷FWz'¯ëúúYûçJg‡åÖ¨ 4cf)l®v&-U¾;&¹=GSk7º^{C÷ØÃáñwI34@Rª‚ÌTœÙ¬Ø\í8wéšÆEçšÆqîÒ5C¾GÑÃJ ¿ºIoc¬FƒÝ Ï…«Lƒå¦ÒWºÆZ*ËQ‰¸k\<ñU@RIŒÁ`q¸,@’ˆ®¨¾–  ÎH§’âéfJeç©y7°ŽHÆV±±ø¾TžÄœÜ=\§`7r‰Üˆ›¸úˆI XÇafNî4@¤SI|õ¯?Jgë˜ !SJKÅy P’…'ÌÅ<ö3}å’Hy P!j×þ1#_XBeÕ3.€ ­çËp¨Ñjâ\"šïÏÐ`-—™ã1ÀiIeLü>(@…ˆÖó9é¥è5THËÀ+%#m$ Œ!?#‹€\ÅlK”Á|%ño*Äí›`²k©2Ä" @ ³ÛÍ%ô”…  BìNt½ö†t>‚i nd6›­Œ|vpçOg 4j¿¾Z ÑÑ·7 » Ù´ƒB„ £³ËÍOe/‘½¹dYøÏƒ×Ð2Ž–¤SÉ\½Á(v#w%ºªG}rµˆU¿Ž[§³’£ v'œ/Îú.J/FUÈR þ$_³Žc&œ¯Ô²tÙeáJ-@ÑÇvx»‘;§0cÍdpÉdŽg!ØŠšŽÍ¥¤÷Û1)‚Ýq²F¾©µÍãºWù¬5ä{[±=tv¹qÅZ¦Ojôl>ÆÞê=%¶àðx™~4Š£Ävé+{›’³ƒÊAà£å·@éœv¦±çéÚCl,Þdm†®dRIÕ×–ïD–¯ M ˜?Qfb?¶ªy™³p°­¨û½ƒõ¤´vaÃÄ•B¹ˆ¹ÒÞË¡\a\~§”ú@!¾_üDlÅ»ã¤þ¿Ùê+q°ųh‰èŠÂ¦4ŽýLŸÜº@ë(»@‡Ç{" §ÇkšÔøDtÉØ*wžà(±¥¢ØTù 3¬% »Íiœ!Aµ·4ºÚN„ÐÔÚ ‡Ç«{‘‡dlõd©yá¿ÕCg±Ÿ™)W<ÚzÈs"L•kähtµÁæj‡-÷wµäÇòSæP¬4z<£vBë O~@#·„ÓÏ®&¡j6”â(åüØ«¨„@PÚ<Êxh”„@ia-vå(Gÿh Î ƒP·a¢ XGv>& JãHH«Â á8 ùZ¼à ÕÅÏÉ„‘!q–ûs8‡Ãáp,Âÿx¥T |O¢*IEND®B`‚iep-3.7/iep/resources/appicons/ieplogo.icns0000664000175000017500000015107412271043444021304 0ustar almaralmar00000000000000icnsÒAïw¸þ¥8ÄÛáŸî~ú¿£«ÔDüƶÇù5X‡o 8ÓpõÅ.Üü}RܼqĸÅ?£ßßz ëT«ÌN³¥¯‰sªƒíí÷Còk}zÎÊϸ*…)À“Sjéú¹'¦Zâ+ð'v’H—{máëbùKÇØ_aÌ>Ã` *Ž—5V´Cå¥å5eBþ¿ÚÐLrbyAç¢[É®’ó·~¿gïælì9ÿZŸÏ›šÕ1Œé*b O^Ý²È Z«5ùx:K¡ØèûÅß4iq¨¯ó…ù_êKiLJ˜ÄÁÛT™ŸgAU1žV¢ÓÁ%•4™™„ƒFx¶‚ÛÌ3F='ÍÜ /% ÅÀyŠåVÓ¯›½Ÿlüë×ϼº}æðû @ +;Ρ)øñpqvh€¤›=uí&‡ 5DæÓ´rD'ŽŒœó•rVlO›D„+ar™ºš(^õ⦹×S·Æ6õ†y·Lñg€µ%Né>Sù ÀóY40ƒUãPÏîNrp$.C³à6C÷1ò¨;Ùyº7Ñ*C ž‚Ã×§¹‘YlU߯ר-‡CõÍíLe_ϼÂ}ç0û € +K_‡ì´\ \ê%xÌ„,ˆVSÒL¢)‚žžXÝdޱl¸ó™å¬ëSÛ¥KºDŒu\Br·€K¸­Ä ³ró­Òçª2VÎåúŒ/  '1¢‹TÎ 6ËŒþ:Ï6 5lèÜRAz gcÀà½ÂýÄG]}øAÙÒ²¥€\É™Xß'f¬áÃÕi&Ë)ß•)>úV>÷`dò¡0>þ +DÐÛßüÑ¢Lédej[ú´H¾ráÏ—«M„ܳfŽzO. lxw¿ÀI‚Ãû”“OvJfÏú¯ûÉ™3ÐïúЬ~Âhò¯0HþµUhB¼ zß«Ÿìø‰4ürBÚ­¶Ãë"¡”dÅ~IdhÜÖÀ !9^†|Ê!ýNÁŠ™]lÔþ”ÏBÝ(|p_òŒƒð¡3óðx5;âbQ#aVéfýø-2ŽÏ\ÀWoXAP{ÈtðPMR¾àÃ÷‘·J^¥AÂtÚ¦>x†CšæO YäÜÞÚ .iŒC‘$j5–MT ƒ ڋÉ?âýb ˜ß«PFê@a'U…#g³S¹µì`³æ<ÿ^áokà|î•g¡BÜÿ4Ë¾Š©àû( “.I°.©ŒžÍœãyô‘¦ã€„0<ÿ^ÍÜ6<¹T²§9î׺­k&G‡$Þ¡ýTS4„¾fOç%(¤W:-C_%^ë±1…ã÷‘§Ï¾Ÿ}5{ÈdÇ«ºÅuQYù—ËYÀï44½¡Už„ˆn{?ŸUpÏ(%’zî *íÉÞÖñ)Ö"¼›Ký‰8~ó(]äpNàÑKm¨rÆûÖSè ß„M->&³–œ¸˜$(˯¾@ÒeÍ5Û•>ƽÎt³c~À=2¶²»æ7è»e"ò°·Ù“saç2Gèìzàšv½¯—€µ’ç ¤¬¾‚˜Œ—ò83†,iÁÛ–Ê©o ˆs»Ì ÁS<~bf½;ÒGÊφ5ž êkeè(sõÑNK‚ñM—g¥ãˆÃQ®%‹w‹;4ëDKèE¥VSÂu Wîbà÷À¨¢ÁÙgƯ±e»BìI9W Vts1ûžBEÂ4Oaˆ^ÞWû°Žɯ#… ³$âÊÒor?гôEî ƒÑk¨®óXS·õY0ºWlyAÃw 6À®h^ýº€37Eó~‚)xKkd :/Æû؈հ±¢Xö:ôze²Ú7¹ VÓè‚.®(q¹i:ý%[Ò›÷·÷ø™Lˆ¯f¤MgJŠÏ¾…Ÿ}/{ÐdÇ›%ÿ sÝ)ò$»<ºnó¹íT¼St©rÜßÜ \QMçÍócÈÁ/kjþò jlÇv¾Ý2Ô©CúŸ ó"kjŸƒ÷b¸L”Îú% Í‘y +„)3¯S¶È. Öf—ã(Ÿ«µ{¢¼)šÀ óP™ïæ‹§,ú8I›]›ƒBSñä‡#ªú4Jùfô ²o7úú{:˜î0µ÷IU"½rã¿€€Ÿ‹ª€‘7v’^Ÿ>EÚ ýs*C?:©OÉX…Yn{ç Û‡¸Ó§ÇƒÝ–Dí¯h@³Õz¡UÔ¹«išŠnn ¤¡ÛþУ—Ȧ,'"ù‚Úcÿ\aiR|ZœìÞú]#¦©ÂÓ\H;L7´½Aìä“ P} ^¬À-Q½{†W¸_ßü…ÒÀ’¸ØÚ‡ß“Õù3OÉ,‚±zzL/‘źJ§*œV…bðä(N¼@»‰LÜ®»àâ“íÀâÈ ©,#-ŠŸ_~Ò‹Â>+¼èñ£ûu²‘R"ŸÌ9®©Åû5:Õ'­»ó Àv‘níÚhj(£öª›”ëBkw[0XC—y>>0–óâÜ–‡/¸PÀ^þêp…ÿ9@yXÁäÏQ¤[Bƒ1é:É?ÊN`×¾±$iîHù|t‚àÞ÷xkì)‰šÑu¦q?eݨ½¸xF@nêBOí‡Ö<šÁtåpÓñ hÇœ}4è󌈪t@m-ôÕ½ø”¯ðˆœöÅ[I§£Ô›»Þ¼@™îñeS…ÐN"8 »;&Œ‚¤¬&óSÓÎy™n› ‚XÓÏ¿PïËM£ð»@Œ”ß%|BÙ$) XE1žO©Í ™ÅòÕËOÇ 3s‘×Sã5Éܬ䉂ò£ ¢¢Ù—cÔ›°UÞWtð °wÖÍ©'ÖÄ™®§g„–¹ÌÀ/žLܨ:S³Ü„•5¡lFöCG•N¶á/¼Lƒû2ÊqáËüsë>b§‘ÝñV§%gƉØWV ¯{+Ú¹ ˜àHÉ& ІèÇGHûé| 3!R¥çÿ"xVs6÷€E€ëÛwéDòOµ KZéŠ%TM=?Òñ^WûLª6°«²p]W;=§Ð­@;VC½¾› ²Á)וüÄ­{‰*8Û7Øö¢œ.jfÉöìy«˜BÐå¼t92¬³ƒGÇ*„÷+ò,šAgh=Ì(Ð1/ 5ñIËâJ[]œV‡Ú ãT”ÑqhzdŽHÖ÷¬Zš ?=V› P乓9ãÅŒIcy„ãâI±c‘¾‹k‡MÍ ]‹ˆšâßî¶Ïò—N{¬†1WÔ÷p}-¡&=æ'û”È·*dFÍ9ÈŠQ}@þÊY¾Mêå­™6§jq½w‡ÑÐ ‹U’rXZîd‰Ô6:2¯³ÍEï¨eä!rq•ÞŒ~_›pÂñ(#°_8mrÜ.KÞöñ(;Cìs•.š†½ƒ òL¬FbâE€Ñžu# ¾®´Ð€<{UG*hÝhSˆ‚6 ¥Yn@V¼ÇrÒŽBÌäB#^Z§ì«Ðv`#¹4Šƒ‰Ý‡*p}øÐ$ö?J >nnD¦»AØa5I޼ ¿ÐÇ3æoƒœØ®*òýµ70µû™ú©˜M#óÑ ™1C¶VÏL½KQ¾‘JÚQòE;e†¤‡j|Ú‡ø3_®ñH9z¢#óÂ2*¹®ÛÖ©Ýä•\ó­tÿdÑóÉëòŒn-·ñLÆ~$<®&ß‘¦ua×á ©Ô T^Æ{B£éá`áÑê¸3X'ôK˜—Ò°®&¢ð¶äž^0Øh­½Î™zåÌnGÁ¶ü PºÒÒgS¬bšÛX¼EÕQØ8¯ü¨Ãï“Vg%!­¶Ï›[äi§k#å“óï+ãœõÍ/f”VÍbØß¿¥Ú‹ø: êBäÞÁIÉÉ- õÏ¿OoËM£ï»@Œ]ÒI%þS:š)˜Êî×!eéÉe“ʇå²g Éw<ÎRy^mõ>§Ò‘ô‰óU‰ŽŒ|zñ?v=Üâ-ä<(žU1M“&Ñ'1ô9®8eøøùÀÕ}ãü¸dÿ6T6û™/¤îXÛâ,ß]ÙZ¦ÍÆ(d+ïVΦ`†íìß AÁŠjRž×5#=LiFob©Íë·Vjé9‰nnµLaŒ¸•ëp0ݼGÁ³‡p‹ß§— ¶èâÉTýkQ—”ªvDE6ý)†¬Û϶óýfĤÅ_M« ô-l{aFÈû¥ú)ff¯´=nFY‚¾Y)mËF] ‚¾…‹¦4Çž½/㘰DZB¥ ùX9Aò°C\'Ú™Ž‚c Þ+®á'M6<óDÏR·Îé|c'VìFIɹ•i[N5'q­|,IèôeoÃû–ü'o*¢ÆŽã'̪Î?QäŽ;úìÓ{»œ*À÷Ap_—ŒÂø %‘\>S™!¼Twê?ßÄ‚±J‹yœ<…ÖSîè) %®GLyÕæ(ÿo‘Ìå|¤,ϱŸÎ²‘Ú9‰8'sò ©ëGØ\°ˆ:àÜ7 ýšùöïº)òÑð„`ÒÁxéÓ·îª&%Jµ>] %‘ÏV5ò©VÊï8jÿ|'íÞ„ùB}f°¢Â;ŸAptÊ:É÷ü¿·¡q ü !­Ÿ¤în¿ëVD"å7Ó–»ŸÑœÕ0 ŸŠŽ+Ÿ6Ëê8O`¥ëΪk#OÏ¿J¯ËHãï¸ÀŒ]ÒI%þ=ø`¶ðk½2¨EÆ]©¦ÍçÊ žºó¤TCk™Ò^Ñ7“Õ¬Nî«îÕ÷JvèðßRSFGñ]éR4oðz'uìO˜Ç*âÚXoühz²‰›Õ}Uû¿lÜí·¥Ü3"®V!ãÚŠþóS›Å÷&˜jdJ@ñ5©;s_d†p!9õþûMd.~ªÛ;dcOöïå”§ n0n.Œ2ý*Ž’ÚjƒØ·V7a9nÑËÆ64«·ÓKiMnÿHºÅ˜Rm™¦VÒ/²À ~FDZ´¦B,ä~Øm³e•¶AèKÌ®¨ÄzH•“ô¡(ÒýDä.Òfì¤%:˜£U#|ôI·©ûWˆ*n?Êá°½Z7Ñ ÙâŸ{ª /Yâ¸ÕV( ƒ»)U¬@¶÷²Æª¥—˜¤_FË!Ë{˜·”Ȇ MµØuûmÁri_Qèÿ¶IQRšpÚ$~EÕ õ?aQdØm´OóSKò<9¼=hGJnae1­âe .²ä¼k2Xݬb‘/ƒ}Ï Â&Äѳcƒ‹ ^2í–fà«ïALE"—Éœu»(…O6X 9!*ç7H ûMR"¬ç°[ÒP‹]z™¿Ð+Ùæ„ÃøOâŒÂEU#`ö5+Z7 øýÎÚ‡½Î^j¦fÑaa #OÞG”áô >ÓC™ rƒ ¢‚1íC0ÂÍæ¥À.w7¬SdSÛ\? ‹SøLÉI%0ô´™ö¡»!\KŸY[—è‰Í³ƒ€³2'Ú³¹Ó1ÖTz°ˆ–=ìeÖŠ&ïÄšA`.} PL[_»ÈÖ[¿¬ÆTOs¾ õ‘VL‚ÈrI+Ë=¿bõìNæ1€ãØn5V|Â$fBÐ7ò°ç9­ øûï6-n€aæ\ɾvܱt-M59%<<èäP‹ujÝÍàÐúY„ ÎÄnd¥ 1Ž,E%Y¨PÑvxZrni²Cì¾d# ŒCŒ€$®ý?´ÇÜ—(»À¾íl&¦˜rØÛŠe;ÒN¨¿ÇÙpϾº‡ÙG€Å§#'PéR|ù~1™oLâÉ̪Ü)ÑÏ“ä̇«È\lÃY‹õÝoš„õ+Œ?èàTA5¹jeà‹ŒzäjêL‰W¬œžÿrd}³ë¤³\GÒm~ØÂÜÝ”«”C"cxÀO\}VÝpkëžA–ErsÍPcxÙIY,Ô¯] áö¬íkk—Ã`MéÕÅv…óŠŽ hòëcÒµx/ÂB˜°Ð ¦½C­+ø•°  Ú’Fi†.݉ºð„IœE6¼Ê„,ñ«º “D}AZÄ/ÿu#[4ÓDe±?Òqñú"¼¬š€dM ÓÐIþî¾Ígì°€ð_j¬£tU—ç¯åLÇ5¨|^`æN¬f$3ÅRZ÷"®ØJ¤2¬˜•_e>¨|N0ª¡Q¶MDНq^Oe¥!s½å/dÒÀA¹±ºK·äš-È8÷ßÖ@a¾4?l2´e ðæ…)}*æa¤ÂÃþÅ´†¨/hn^Ÿ'‚h©íûŽ réß±x¾®ƒæ*4«™ƒ“IgÇ÷3óäj};$•5„lô£9Kè (D:-\¼é­˜˜w-iùW%M;'·ÅéÓe,l€MÄÐ@Xµè­ÚèZôuÅÖ};hJ/®ûyC›½Œëcé*Ã|nùœ\P²7ëfUˆw¨TÞÎ]ûÀôÂÂD¤lí-°!ƒ±Žc*G%©¿­%s-H­‚#0Žø(<–ãËÏë ÷õ_~ä€á\æÿн‚׊?òÀÓ3hpR—ðïØ5¬×cDkéîÄÕR­kqlŸÅéAÃÀ¥Èå(ñ‡ÆÞ^“ï=ôÐâ/ó'@#¡^ºDÂ`s8u¶&bòùËÂs&±¥)‹{ç DH†nóe*øöË~Ž7J{©¦¿ €¥ÅÛèF¼š‡~WiMbÜ#è°£#pAѧçëïí°>ÿPï¢Ù&åpu@:掹KÊL%d43ü¢”–$^ï€g»ŠGEر£F*a¥‡¿Slö!ôN‡|‹€€ˆ‹àTæTàøv7!Y_ŸŽöÑ:áЯ×HÁM•M¢p:”¦ˆ¼Û58v‡¿†¥Î)¸\p›OM˜†/Ò¼é" o â_B\î÷\. Ð*@çh„ÖÜuÕšMŒa£b-ÆXÂsl·EžÚKíDFûÉî áú¸»0Áþúš¹,%oûï•(¿·4gß®’¡Jê*f†¦†oWýÞ,^_c˜ö·›Í皬]cÔ˜¹ú!v Mþûˆ»À•iªväbÍ.5SÒðö‚?Þ"÷õÊq?”©¯g°È‹‹*J=qíùeRÔ9^˜Q™9˜F:Íc5¬ëe;éd|N [¹}ЦþM€¯7ÅiüÉm0ø§ÿ,ýk"¶FtqÌl}€È݆›Ü¤äE½IÚMœÉcJxf}?òŽ ÉÔÛ i£¯% :·ÍÜ—­û@{µ§÷$-à“>7§åÛÓbVgЕV&Rn.=Ž¥íú4æèb_Áý¦“ÂÇ2ÿBŒ/€È©§§ÈQŽÀPoÛ¦=Ìy$pZUÞÒ]— ó^=¿wÐØPV)ÁKNµÌäœ@ÍRBÌ´uÐ Ežÿ`àb™ýÀ…t;¦ìÞ¥CÓˆßü:0ÚÝQáh\˜ñ/Ë™™'0µŽËõûFí{jܦ75Ö!Yèó‹µË·¨I¿ým"o V÷eŸwpwlËɆôs«H¦­QH¤b>škxO[Äb9™GD”’«±A¨_Mà4hÂÞŘPrîó-w¹Ë·×Ûé–>H2ðËä ÿ€&Pcj’Ÿ÷ê¿­{öO#…Êu¼4¬i0(–ÇÝn6Î[¹$’I$ªu—ùÀ!QÞó½G7 %6•oÿ-¯MÆ:S¦;`EýWQiU)±bz+<®¦ƒ¤ù¨;2ÿN'þÉ¥–~r€[q¬!Ä®^åÃCt•I÷àU‰2" úäÞ³Œ¼»TÓ@½ëfgú¼ÈÛ+« CªEÍè6Ç[3Z³¤UÜ€8ðsDÜjx'ÅåèÖט6ú€oÆZÕ’I$’IDããu#S"Ôí!]ب`Ò¾')èOÚ|£Ršgeeo+Ù¡'FŸñ?ôÓZ-KO”#‚–Ì. ÍFbõÚVxµ0ÈYE«QÞóSºVfß º:í5õ¥,ër]ïÆk˜ êm*ÜësÜyž›ü¼LdtÑH]' Œè#m±/}sfG ¹¿dÒ§ÞÖ Çœm»CàÐ3}E&!±¤ù– >2w·APöÅh™9°2í.}™›.r…4¹ÊÖL×W™¬£×ºËŒ­÷7ÎÃÑymç%gZ<-åÎXû.F)Ãä+DõJ”„””[?ˆ/ßdfýŠ;³¥ lq>/nyéäì¹]Ѩì9gMôݽ<óþWC"j®zêº÷sØØ­Äç½ÇËï°vÕÙ'…?ŒP˜ßö—£T•£ðé싌\Q¥ÈßBœZô…<ü†v¡Wê©8yûäQR·…àW2Vá7WŒ‡;XC³X‚¶Œx+þWížþgb“¾Ù…ÿÂÅ” vÜ7åÐÔ³Òn£Þ>Ñ@ŽÎâ‡n»Ø|I2î³UæE°ž{_ˆüŠÒ¤š£ŽÅá²Õç,f5g'ìò½óÇÉ™…:õN¥êûG^ýEâòGÕÊŽÀÍ ¦4%·Ý#HlåˆpkµÈÚÏèÉ÷õ;~Ö€áPX%ϲܱð¹kÖ# <€ÝÂõÕݵ±²Üþ Æ);Œi@4¢O¢.C;óáV1’—Ó¹Âû¤¿œ¸„V„ÌÏG$¸%¬ Y/Y’K˜³b£ ¤€ºPöÞ×Î$ǘ Ú@=Œ’ªXê«FϼÙYˆÝåMª?çŽÏËØÚ´§8¢1º’3ëš§J$qz!ˆ Ä÷;yÌ‘È^É'T–?oùóSÖdeô©c}­Zá1ÿ^xÈõM#EÖìpöL-gQDÄ„fÒ@$̱©•î;£ž-–b%ïDcE_½©ÿR¸œË“n˜ýEÙdôys?#Ü•Ú jƒ|n9‚ðTsrgÉáW«€vR½¦SÌæ.îX@û/Ö¸g—{kõMÕw"/˜SœêgŸ1žxm°IªnÇÌ‘t• <‘ÕðQ¬c¥v4ûD¢ñ¥Ô§º/¬, ع´ú¢Ðô]ÄoLí§£é³ºø:€ûz­Škçï1r)P>—0#aCôÙnˆä‘M´ýgYWÀ¤Ž¹néЈ¨:ÚœpZpÞ™]¨ Î`›Ìö¾ñ –‚ú>"º‹ÎHk!žÎš!c¸yÖ†ë{·[½ÍlåYÏMµ ¼)´¡DÞð-3|ø8›L×­øíŽx) #שûpŹ¢~l-$Ô‚ìÂ)ø™HvpØrä1K @'£0ü†|·Cèð%žUÚd­ì៼ÛïæÒ²{dþøôïݸ»óÙ#Ù%g»®CÂPŽZy`òÀ7a÷15fùÖJÙÅ8LY‹„)ó).­¥áÄM=po­qÞè%¹V!¶‘ü·M@{ÍÜœ„«µÑ½*å˜=ÿ9º„¾ï À¨Nß>+u>Jß w}Uå*ðhönO7à ½&éK* ¨®UeYòØ¢°¯ dºzû'ZÙb N”=D8±Ø¯kP-È_óÐ+E•¯5c=‰þðð­´Ð…ÑË‘–¬>ýc“¤a’ yÞ‚H7¿a«¼›—HÝ÷ØÍ§ôåÎÑ…ýÂî‰:@šê©ƒ_u€(íhõð°@„m[YÑî]݇WÎ™à ¡ ¶©5×Û²eñ¿øó,cGÊ(£´ªý›²ýÖ ÃLŠw!éïSw®Ê¬¶àZz5[“ï¿¢íê QÔïˆ$ƒ¾€³±y½ŸÿG€ˆ‡|ÌÈalÇŒ‘¦â$<¡ÜaÛm¶Ûm¶Ù©‹, ¾-wÍE_<`ÁÛîŒtŠ-4¼Ñô› ª9Ónäˆ}ŸÕŸDx¡õ !ä5(ÁÃîwOéþïcW`Ðmy¾¡ÿ{¨C2ßàÝ/¥ 7]¦O(µË-¡8µ÷U˜KÊD¿e]¼{Ë’ÛªYéwpÄÐŽ5‰\ÀZ«³‚ƒnI$YÎ"½@rI$’IEG/“Uµ(±Iæ(Jÿ3Ó´xSe Ñ(;ô³éˆèŠÙ·?âd§£« ¨H,ê+´ @H¨–æ‘ç"ÀE€ôºNó“¥Z…"©ýYëb„°7õ&Îi,aIA…ÐsÂjuÞ]"jú¶!ÈцȠ-;·NI$’I#«tÎrHPmÉ$’I$1씄ûú€P«($2 =»•hæ'\Jà) rž  G–°%€’}ßB€)´Ø5: ¤RxEÊ I[M¯Äߦðêѯ03¿ÍG'NŒ§C{4ݧ} ®ÛôžVÓâVY7Œ|÷â÷ÞEZxÉ}Á޵‡-¥C”|CÄtoÐÕÌ1v\B¯ƒÓñök1_\tåso“îÞ7üפՊ¤…?ÏÃ¥+òé¢>ý‘áB~ÑaŸb‰¶6‰¤¼êa¤œ 9óȤrÁ>µÎŽ÷´¸É±ŠÑÎÕÇAÙyf²N•eйƒBJá0j¯‹Ã9zj …ðÝLr‹4÷À¥ìD¢nC>àóÉlXH†¼¸rÀ/9Ô¼âXæÖÀ ´£½½"‚ÝÙðd0œpÖÒëª^q)UDÎå%nÇýA #¢Aéˆ ÖBD¤ß`T½‹¡îôm5Òdå1}EëKš=tEÛ7k’ëÄ2&ˆ‘3ý2¿m‰ØÄê0ò~èÊׂjØdò°êíà‹Ùj8êï´Ú*§ê¶¼àåL6åD&Y˜ÊÈ‹ä(ÏÌis¾Ûýä>û÷jš5ˆ9*uPšŸIvõÉðþš«D'Ùœ{Ú‰ØìÆôƒ[' Òà †nüYŒ’(6Lñ%¦§kóÆEN’¸j‚¢'³gíi2\”ÓBz²Z×s§„]جv½p…úq\EAO¦ùÄW( ÕÀNñÛeÅ¢v؈Na±InhV'ªû*’®¯Ö­Ñ¸ðSAü‘(F@Ÿð„¸bærdÅ—È!6dÒÿGñÞXÕ×f7ã®CÎÕz5Z'HUq1“˜MsàCX™RÝ@vÐÎ>Ä…×A›½× F2Ðr'ëø‹§O{àAÉç…Û‘?Tµp\ä'+X] ®³â;™µxüýN⃓ ºàyÔ,b¹ÚZÛI(¨ ‚Æö,ôUjhÒ#õ¢yÚNÆòJ"+"Üõ]¾ÆÎ,…*\‚Õù*Å3 £S U#k"äù·ôaIñÏÜ7¶Ë÷›½ã,W¨0XjxO¡`>WàÊ?ƒýÙ2$³ô€ŸÖ°sRŸÄ!ú¬7Øæ:£/Þ:’·˜B¨TëµU7˜ŒMïì{"-'÷15¸ÈÞ¾/xAÊ¢ŽÆóKEp¸åý… e/Ç·øS°ÈÔO1Jz/w #‚¨åጧ@lìª{,<Š,À…îM!f!E/ÇGëB—Û‹Ç{Á„âà ör$¿››TÃØF^J°Õ¥œ(±ij‘|,ê‘LéÚî9/ø(t€ ë}qϽF+~L{ó’™ÈÍÝG±ÃtÐ_— ñ÷ ª§%ØéçJ„R =­pçtœ1Å©5(Ä@ÿ1ò‘GPG~žð0áÅÖ¤EÓQ‚Ø!×ø³!×JMè]h†îyAdãý˜§h‰;IuvP ,Þ.EŸÑð;ùÕoG@ÿr\‘ñÿ2'R•,kHn­i7GůÀ–&Ÿža¥Dk²ŽwX1°(¹Î¡",Q멨+àøÐ+Gã·$’I$’J&‘qæ ¹ž°h0«A@âõw©h™P˜@ª;n0½†8´˜¹5¸P0Ú%S$‹R"cXh Åž(ö^kÅa•×—Ñ©C›%Í+^ÑŽ“â‹æ¡OH­ã"ñ˜+êºáºq¶1G> PrI$‘ñËÄ€6ä’I$’L€b—ï:@¸ÊÈ9Åi'§J†f'”¥BnKý-aqü7N¢ìúa-Ò¦› ª›kNÉÉàÅ`ÍG'NŒ§Cþ†Þ}EGbDcE —ï/÷Ï¿xg߸Ñ÷è@òÞB]¼DŸÇ¤>»ñÄ—Pƒÿ৸|ð^Î?ÿ•AOÝÁVºŸ½‘“(­º8~¦Øðô= yš,"d>Å®Ýȃýêaò¶R›KÞ½Ý œé­ºù¾o›æö‹µL±¡çëæù¾o›Ùn?~õM¨Ô8Å0Q¹Í.ÓL Ñ×é¬&_‰ÝÞ€íøOàk&ÌÊ]m¢i ¸m{H‹÷z*|Ó}:’‚'L¦Tü¹X“ÕƒOó“Íô؈ ª»î¥üèuø”½Ž6 ÉP]…ª©Ø¾|ÿ>4]ö@rµuCc ƪª"7Öéˆ^b°?_ W¾´cAí]‘ïmx ­G¤ŒV¼óµ§vɚω¡ýgˆ··r×>d &º_HFÖ”Ö ÕÊ—ólÐAgÔ–ðÈt[w¶ï1çšcº6¾$UöˆJ¯›~å䟂ñF*z"f+ÞTØ9R†2À…€ÌI™~=D` íûuŽ7ݪ¥B™óƒ;| 6A´9µE7´Dy2øWþXÍÌèa}IŽÐÊ™Lq£\¡¿Æ¸Ÿô.]yp?{Ë÷QëçˆØU…#É ‘‹©»F±”ë%¬êÓn7jµ ©´Ô¿Óñp“;¸ˆ›ÍØ#<]ìŸ;¤üqv*µ‰NIΉ÷l—F sÙ¶ž˜Úï§¿Íéc“cþ‘Ô’Äö[m¶ÛmÁ¯³E©3ÔÉfüõ&<*&}]bXeõ|:ø[ òܶe óäU­ø¶JD€èâ sÛòxï1©ƒ1ÖXA1½ùR‚Æqm“I~qïÁÀòÿEƒÕ7@º…³ùø>WÁÿ¼zŸhÄgK-$’I$’9@#Ö@õÚR¨lœ‡õ‡^}d¤çÁr8‰|{IÎqµ”¨ßêì…¶Ûm¶Úî܈–²× ]èÙ=×ÀÆ> ¼´Ø.<™÷ð¯ oB·ü”³Ò=®I$’I%èç6é¦Ûm¶Ûm·èPåàt#é@Ÿ˜”ƒ#ÙàúÇ÷«*GÙÜ’I$†]Üe¶eÝÆPf^ŸÍ† ƒ§¥õƒÝŽQ*ªY“ÀבE% g©µü¯ý”¬ ®å5rfKBt S ÔƒŒiËN»(¹¥&æ#iÜàÿ22 Z ¢I£ØPŽ€!¨1Ò"‘º Ñ/‡Œè$ìéž·oV¢KÚµŽŸ(ˆŸf'L»fø|¸f Q.»  D4_vÌ•©¯eË•ú‹ñc‰†¡áœguU¤ãKªRñº°þ¬ æp‹fôXÌûoꦅîì³®2“p»M<‚Ås¯èà'[~P.Õx$‚£úKjZ_S£ A~8–E{aýÄ'P,S×#–|Uø5.Â~ƒ%çgÊ£V½0÷­ª^›—c@äÚçðÐOß©ÿaxþýÏá ?¿a¿…£ü5ó‹ýúmûÞ}zìyzÎæ¿©!ƒìšŠÖuÙfî:”°éÍʧ/å XöPVBGÆ.ÈÌà‚NÙ†¥TÖB¼_Lz¼&ŒD¥qT5=”‹2/VI=)ÿK­¡=Ì_–qÈÿzN°eÏÚû=Ôý\âöá~á~áÑsêÐèª×¾`£x§Q"³„«íÇÎ%lc£Ê 7 ô<½×ˆ¸‰³®¥È€Oqë ¡Åw–`üÄÑpUj0¬SʈpP;°¸C…’õQç)»]pFŒd Þ41«\9!¼›>uF¾isÚ>æZÉõ%±å¬«° ¾5ßQz`†Ã­Ò'ïáøÛs‰ÿï’rÚ=“OòYà±êŒÐAdSuAZ<©ÑÅÌÉGQ »D•È'bпÚup4‡ÕY·ÍûøH¸êë+FJÂŒ£ Ü>Ð,‘bÖè2†r„bŒ¢ -П¤çO\Ï~¦–2ˆ¦°HhÀT_<óú‹eജǰÁã±›¯øÎ dìÍp‹ö¥À `f»-Frý,Ò¶4¤‰Ñhb=Ú®ŽPˆfgíDy›è2Z«ê )p]¯=5cñã8Ù,çEÆ"š«Î±0óÊ~NƪwÒæ‹i¶ÿ.eΫø—"æ”<½ºN·ä[-£nK’ÛÌ“U–Avõ·›×¯Ö”غ™yÜñ1ž|ÙRøÆ¦BØ[ôºåå° ^ÿ …ÐÔ‚ÿ3Ï,)ßf8h©Úq'Ù\(ÈØt³x'…;ÓËŒÐâÇ0Q'"µ‚T¬ Þ¨x×›(]ÕÐÚË‹S¡ãKí“/†?Üשö)騖Îg Iþ¼¶J4ÔMŸ‘M #âsžÿ"%é [Ô™&HÓÑÁ%5j¥hm Þä´Ô¦C±"'Û¿j4Ö‘‡Ê^RòÓ­ŽÚøÇAŸáubÄšÙÞ†ð÷+W°_@ã$¢ "ù&)2ÀŽ›µ¼o_rõ¤è트4Ž[|ƪ¬4ýLÁAºH¼™å Üެ}6«æâÀºŠ—^CNV‚nG=Ø Òeü©ÅîôŽÁµ¢˜) °;¹M>ë³á¥Nz}ÓÇ5§üAÌßKåq ׋G{8sÁ‡]ïù^’ÓÜls%(džÿÇËÌÏÂ'›%¢íüX/šyª‡£·5ÞòYe§ZƒfËðå9ý)#|_ü,#¬†è¤ƒÈ,ä¶GÅiAôN,CÎlNãÒ’½ìà¯Ôó[d÷¦ml^/rÄ­–3œ…Ñ-ïï®V²¸qÞ"»ÎPÄy™}[褣úÌm ¤é:ß[K«iul÷yÍ)p/”ðI‹hÄÐÈ&‚È̉M=ÿ]à€„~¾˜±¯BÞÑÔ“­ó΂ÆÄ˜©MA È/£Y­a_±Ÿraîäõ2òñ/ãkÌ"bP‘‡Ê^Rò‹œ½ê]¨ŸäFg·†ŸW'ÍæŸ™@-¾GA™kÞ“5ÅM^s‘…žÊSÖ|åøH]NºÜ¶¶ë3½†Æ‘C®úMtü°éH¬£,+ÆjJô·þ]0vPs„NÚæ«Î¤Saúz1ìeï¿!½¤M®”©¥Œ‚Ö¯ ÅPA„ˆm¯&™3„}> $h·$©C’'´ ø¾¨ÿ~LÌ— ±jXÈ?îÃðTk†ØáÁ›(àˆð’"°«?øã *ãº†Ý ;«cèÆ(moY ÚŸal¼LDǼÁaâJ@¨‚ h€.ÖÐvff_ãÁg¸ýœ`Ùæü÷÷ k×7Æ 6)Ì=³25½›Ëô”A¨áf4¥«â^(i»6s.…`\‡³IóZŠ‚g‡ $¤¸a&ÐuàŠß­à \XÊÍæ ~-øPMoÑÑ…Ð+íÊ/4óãŒ(‘›“.ïÝø[a.õjcÒ>½–{l­‚Xªì‘CpŸíé@ˆm0è¨GÛFÇ‘¦¡0ň¡—+ìÙYÖ!9~Z)bímˬƒVNC¢c”’aéXìŽØu׆=‹™Ê—ÿ_ótÐV!¨ôòõ/ç‘cèaWýÿ"3€É+GÚ‹DX£™å¨Pê¢7Œ}ÐäÜW eXÒ‡2d]“Œì!Pæô·9ÌïÒMÿ.û·7¾Tv<ýN»’mÎ5zp¨œ„¸ °×ð£ÄÅê>0v|¡¶–V©\(0Ø—±ŠÐ)ˆ}±c7ŠacDÀü$@@¾ Ìø‘ÙAÅÑZ9¼þWûjŽØêXùÜño½7k#òsf­õáá~‘ …R´[®Q¿yâQ(’x1Šˆ”¸æqˆ‰Q?ÌøwôSÿrÖ ¼Ú¹yÛEgBVnºZ˜½þyx²Ÿ—¹ˆê`ïAØ_›¥ÝÜ ÉØ[ÿHªò€ç ?ñ^m²ÎBcÛ èž[Wixû‘UV¶Èˆ¿Ú6úèØ­1ÁÃ/ÀÉC±Á«+B”AtK…(¸vJ€Ò3Ùª ZÝŽ()Ä”€cdÔ ¡dEzŽÁ³*4ºˆÈ0¾ ÿyEÁ–FƒnHöH€=ÞÛ’IpýÞgK÷^H ©w‘æ”d ‘Kü #qQ§ŽË¦Keڈ츨6ä’‘ Lb€Û’HU;öý l? ’ZCÕª6ÜgCÄ%EËQ@·~s@W³läQ“æývÛö¢Û¸dÑ]õ×ì =*q— PPmÈü¾ñýmC%½Û’I—Ýõ§A®ì ÷¡¥äP’ è ÚÀw—Al-&7C·/šl^¤ŒÌ%m‰¾R“6ß#'WKˆÃPí Iï€òDräÛK«ì>9) "á1Û4žÌ B‰ŠlÇ[Aψ浀ír·?Õ'þÐø—»2atííi'Øeì7idaR•ž.PË¿}B~ÑäeøÏí™Ê.A¦}0yëF+×ÕÍçáùšSÅ=á•0ËGQg ü<4ž@=j$Ë{&Ùù†–ü.üÐ@¾L²¦[a ‚$‚yžƵŒÙn‚:'ÖÃ_0òìvqd˜>>¼”®”T©-µ/ùv“¿5T P#5öǽa­©¼KM¥}pL"L¢éuÊá«õð _Œo´$C;cÚê xœ_¬Ù¦6½[ñÍÌÍ^:ü0 Ãu`o˜…7m3ŽÔ]…Xó§™U¿é óÙ­9°Àeׯÿ"ûØ]gý‚Œb’XiÉi¡ñö”ÌH´ÂÔ4 ˆî?ÜÖWöÅÅ¿sˆ]-Y #‰² BfؽfkFB ·ß§9¤mÌè:Ct-Á…Y ±êÇ‘ÿw?퀠Ÿ¶û`!ŽlÃË_¬J0Nû+2U”‚®Í*“{-~zoýKWöuñÒULž¬Ô—ªN¤šL£päZìíš y”Ln È·ä‚T³û]·•¯"+˜ï%ƒaH ½K¥0ž»LÙd‘ù×åÞ˜eLR§ML÷ÂWÕ)¾{s®$>ó>©(.Ô¹@M¿fÁwìô»Y/Ô°Áùc¸Ou,C‘œ¼øŒæ¬S¼nVy÷}Ût*´Œ;%U²W!ÏZÜRtÔiþ.)?Ÿ¨ÄÐn°ä(=¦@ÆPÑ:NGÛ.̈¤;ÙD\Úa«òÏvoú,\Îèr˜¥3+Ž2º ÷ˆd†Mì''¦ÀŸýU?hs8el7L³ÖüPê–N¯>vÈXâRÁ屡xg‚n ]ÏïKÎÅL1ÈÆ“Gkª‡>š ¦?çïÑ«íº¿~‡þýÏá¤ÿa ¾÷þÙáOþûS÷Ñ¿¾ºìyzÎæ¿©!ƒìšŠÖuÙf‘Õ=×ÞìFÖH²Ž´€Ð~5?«×0…ÿi -BKµ^,œê(äÛ98pJ1ëkÖÿSv¼ñ>ÿP°"ºõ‰’—8à°6ï­˜]“$®Ã[ú1S4§%O8G†Ìé6P©ž­‰„C¶Ñ"Üãçà‹ìŒ‡øë|ëJŽBöúàUüI2ׇ9\yÊãä“!YpÈoùT/b³Ûåõ–ÍDв Î Tºƒi7fÅñú{¡°õ9ñ…Õžc¡°õ+Úà!Æ;<²‘Ŭ>+s|3ÊYç©)īРç1¾µ5wë´õ ò/@ÀìŸüT¤×ïç×nêö.:ãóS°=þîÿIêM¡ížfßpP˜@Ú9°ìL$ÙtT'l$Á&eŽ‚´(?NI¦XÀc‡ûô*×¢™ÇŽš„XÑÁ¢4.sr+ºg1fDJ£XN)I[èÆÉGé-ã'¹¦Š…wSM+ɸ Q.Ä2ø$Á¼RB¦‚ÕÅÐçŠÅLiÆ>Ò «Á‰±E`9Q8ŠXf†"•Ó«ç¿? ØûL@6 ¥bJ’K?5€0~êJEȨ$Ÿf(ÆpŸ…åÎ^9¦q¦¾‡ß;ž 3CBþéH]AXûß"µ‚T¬ M¹NfïÁ¼98-i›¶qB¶U€'SìSÑä¬Waélökå£$ŠödŽÚ1 ’èzßS~üí5l‰Vl™ €ÄÔÉýAcá&6>ã\’¥d˜Y”öžœ7ÔÔì°€,f™L‹Ï™ZÜ%bÐŽŽÏ*Â:o,Ȇõ¹LŠZ}˜7 ,A;/“ ñmUvøÎìàú*Ãè’Ú‡å0a!•¼ÜƒµüýO»‹!çjò:f$A9yî3êbÅ〸¼‹Ð0;”€F7ñ—‡ l;ÓäÈõ î2ºÚ¾ë1ƒõR¿¡¯Q0¥|DÕ/û̉jmõ¸°}‘zrÊþÅâ~`•ÓÇ5§üAÌßKåq ׋G]=?1Ä@ÿþ2y¢‰Iå ÒñέÀ"|©K«°0ûbÌÀ¿ ð¿ ©|²déÍRXÒFÈ[TEDÈQŸzм¼u>;6©_à“ˆìMÏo5Æq¬Ó‘DdÂ1›×Ç6WŠõ¸^‹h7©o²?úýãЊ;*ýã”rzË`r—tz„wQ}`P>ŽNËÕqF±”¼¥äÚ€µêût.íãÏÿGw½LÁ–­j“m*(Enû¨)R¸ëóTá]6‘æU- ¢éz0ùKÊP𿞖ÔG«²ÊJá¨*ΚkàkÊR´}j8w£ÝthGÙ5àm¡#”¼¥å'5Òæ@/äFg¸ó²ìæãÿ<‹ Ï¿ÐËzfïÚKK…2¼}6 yœ$Wñ"ú8”ÅÒô»ž3-À¨¡É-3²ë‚±Ð ߎ È(áó*ÃS©”å­ö÷˜ZiŒÖ|È3®†øï~xÞèþ;âÙWü>Ó²úŒsásjÑvK_9Pud¹>†šäñt2šj÷@:XwO7‡ãH  °ò£…P+rq1ùÀr¦î]Ãý—0I_U«5µs@qŸ¨ý•¥ÄO9¥ŒVý–4êUíÝä ÜÉ¢Þ¹ü¯óÀÜ\¿eé»cŒÚ%1‹² ʱ žÿŽÖã` /?€0šHˆœ K‰0¿ €ŸãÁg¸ýœ`Ùåúº >Ÿ>yu¤€ÕRc ¹Ï8–å~õ/À 2Ÿ)!AqÔÿwö“‰FFy0îz™®ysÈCPJAz p‘îP¶ÿK|¶HÜaÇ_f½8 „õ©“ÚŒUƒªÄ'K eN¾ø±½]Ì)Ȥˆ‹‚k‘”NËÅ`/~³™ á7>J¢ñl .Q‘T%±Væ‚ ¿v}„;:Ü¥âOS¾²—DF(tRë÷ÄHŒV½>¿‡¸ +pµÅÈ„†¤AÔÞ‡Aß6Óáu?˜½‹)’&u ñˆ˜K¨A‡öÊ/Y ¥Gôm‰¤Ár‘òsf­õâѲ"þ6Щ)®Ÿ†ÿjõ{÷ËÖéµÒ¼r@´+öÆà_H¿PòV±1 ŒñðOþ ˜¥ú²¿ñúôî"bùçôD»9V'¨]—ñô¦±ƒê|½t]îÏP¤ü `:¥‡E‹_%¤ZU¬È»NQþ×¢ûO¿>ä–Àyß“¨6$f¢èe B3ìfé´UÏc.Rg0”Î=»tÙÔôîì(Ù³‘Ê„±V¸ÄË’õsF|s¿P=R±·gä¨ lˆé0 ÁÝÜ€ù;3ëCË#Á€´–áÁ³*4ºˆÈ;eºyOÄóìUËs\úQ.]¤:ËZ…ÑðLCò»ŒâÂétóºõ|þ‰ôÀX§Ò~§Ýú°É ˜’,9ÔÉ›ñ'}O>~ÞM 5u¡á%awEÛ‚[æ—ž a™`¤ýú&XˆK/FЂÅé„^ÏmsæW>“ÉɽÕüa¹ZžÐ8‹ú ƒ§?ûÛ»5Už…ô~A0™H˜;*Ç £Ž~Ðw®,©–¯—N- ÜÙP8V»ÜN1W*X^t‚DíÂzPŠÕÿôZ˜ ØŒs¿7@­ÿ|PçÜòP|É›¸IJöi˜Fh?f#mþ —žNþ¶zV5Ý·ùÑ9¥›_naÊþ¥©> #×å°ˆâŽIÎ;\oï¥é§·$‘= À¹D0Û’Iÿ<ÛFI$’_!p»µ"ðm¶ÛrÏv 픯sÖ MÅVȦoè ÚÀw—Al-&7C·/šjúžÏPÒÍ¢œ±ã=ýàN-"¬sʱ½6BAC?•-ðBU/îÁŸÚ ªê{»d¨äU¼‘E­åíxÝÖíßÔ±ƒïñ©9+ÐŽÄÕF{HÛ B|HŠ2Ì+§½tcwén;l&}¤X¡«±tV§Î:º‹ŽÔWÙ»t²Œ KK›ÕØÊÀ=mŸëF+×t ¥SVn¥¼çØÅÈ ©M"ø,8UÒðÖÅWÁìÏÀ 5wÝ °›¨@Ÿ/^—#É‘öEuu¨t»E—§³¬ªæÏ×>MÞÑ-Œµ0¹FŠh‰¼kÞì)œzVgŸÎ‚X4vi•© p”ƽš&û|ä?Ð&ܼec,zƒè,È_¾ñ÷0T-œ™'·z,eÏ+ à¨ÜÃI°Ú×çâSÀ Sgð!ù2ÕŠ®d•m÷=òYLìqýx³Ô§À­š¢ÄþÎ.Ói…¯N¿Ëµçqsùܤlµ4Š—¹!BòohB'‡ßaëC!z̃.Î-wœŸT^jd ‰µ|ñã°ÚûŠ>“ÇOf£ß„¤åé\héôpíi?XûY3v¶¯ø¨›¢A´‚eÌ2H‘4ìE8Tût$—xã/Ñ)á6ò±¶•ïè»å¹P*yÏ˺Ç(aŸÁwìô»Y/Ô°Áùc¸P*kæ‚éOßu€ÞÄ÷!tò‚ÀH+ ÜYÖùŒ–ïF¢ŸkÛFå5rìšpµMzQá(yj~-»ìt0aüMÒåâ®j«û¯N­q4³Ÿ¶”Ñ錃}YÁË (ò¨ Íñ|6ã…Å.ÉNc¼?šÝøY!Îe<ô´l‡çÃÒ ² ÁkŒ×]¢¢õîÆ1Ë&)Ç´0Iq@†Îh[AŒ$ Ö§±Ø„³çðÒëíº~ŽÿmŸÃR†…þý þ?—áR_}—}ôŸò¢ìx¶b ·{X÷“¯À`qBøåF£+7кd‰É²Ot,Ÿ¬‰ÞQSãQaŸàŒyAÂo ð~Pwùÿ`€nG9Ÿ¾ÒLbn”08RX‡åÕNÙºŒƒüŸâ‹@{à¶5Οô.’4±AÄpzâ‘ðï0™À¹&ަÊÕø~ ˜X²T9KÊh7íßbnæhÝx¡–©Jö÷úa:zV|?®Â»èÁ ÏøIíåf½´,–Ü…¼‡BQ1”äÞqo ’*­æÆ³¿­Œ¬ºòô^¬}k—u›+9\yÊûª.ý6WÄm~‡µ>b möÁ)ƒì” º–àšæ]V¾u ?ZÚõc¤H’¯B£•ߥqç+Àø–®ó2“•ÞNsç×nêö.:ãóS°‡ -¹²N[µûW¿BÜ·ýxö¬¾TŽÂoÔ5}xuÊœwZí†K¯F -oÖ4@ž‹$þ©T!ÙɆo^TÊ´wl³œ¯ŸÕïž‚¦X:`?é™ë”x6ÞÍ9PÙ ÙPƒV³UîƒÖ+ÚRæ@²EHÌV?õ”—zEï È~I5{ŠíþY?E\Cud*¿ë˜%܀ܣRW`J>aÍêêËÇÖž9¥pôÃü®Ç†®€ÎŒP‘^VÉ‘öÚñâf·ž‹ul+(%c¯\"µ‚T¬ 0´ ¤TO,ß&Ú5xPbÖxš6iÜâš»hÛ$Þj};yò6Ée–Ye•<.5ñùU“~K¾‰.ö´ú;wÈŸYŒ¿aò—”¼¤+gý–¿–e°Ïøœ4dÙÍ3êjDÌ«¯Ö==DOººþ”Ñ¡# ûwÙKÊ:ð6úÕÆñPúýs (ø³â0eˆ„E‡Ü•,nÉ—®ô4aô`|ÞVa—tîb"¨oÁž"Ƶ?¨‘µzf¯BYe®Åu«9FBà,¡ј,%œ§ÑVEXc9´-NŒ:ÃéŸøIØûlŠ)ü\fäÌÇ øeÍÑG†Ãš$»–¦¢Z»ÌÊNW~•ÇŸ×i¦|ùOªŸÓÇ$Û6S~w¹þ4€C¥íÃLüîR«4Ðÿn†©­[ÌÌîR»TÏäÈòòó åaƒp˜Ñç”ø”ˆF¬Kny 3FÍúÃ]IÞïS$¡tûÂè»DÆFé’.Û)ä·’÷"Ü”-¥*&Ï”¶ù¾oœ¦•;¸ï[§xtÒãt& G¤t=­¦«0ω—æù¾ožJûQ¿§­ †»CµïÉNØŸ‹S¨€ØŒØÆ®^xÿäFg¸ó²ìæãÿ<‹ Ï¿ÐËzgÊ}o|ÂD¤ $É(ÀX&K<ÁZÛ·õuu<~[¢i€ûmìêdK˜ÏÔÏ 1ý`@ùUèúJ[ ñ*ñ —| æøa\nYãÓFÚp¶QÞ¢›ãÿ~ ÖÈþ„T,Ž‘;xó—ݵ6ƒ Ôeá’ ß´N†ö!ö5Åjo l³Eý€5K«‘ظDoXZ'¥Ïlõ„”/à‡¸ÀÓ,©T=¶jªïYn”ãŸ}ÎøÊ©ªÍoàjOôA½d!ÔÀÇ€[Î\[øT D8€5ÊÑ@ȇ‚Kèÿ=™ø:¤jvD(YI)0Ù¤ægtø\Q®”0·¥ðý@LSDäºÃ5ž¥CÈ.Úˆs§ãÁg¸ýœ`س;©pÜ@M ³!>@j©1„ƒ®Š-幉:c ÃjTdEƒ?ú[¨¼ÈUG Vè¦Ý{Š@Û«z’ _±@åx}(¹ ÛmÛê7:­ßÞVò)üÆžs¡cŸV;% ›Éª‹‘+¤nt&‰)M(R'ö‘.<–q1&Jû·³îÈ›…‘‘p¥\74LšäÊGÞråm¬Π-Ö¼^CBð|1:Í.q2ÊÅ«sfï°7i~æh!¥¬M¢›Žã“,ÔÁøVüÙ ×FËIcpBñļ v±x¦¾}I)wí zЄ?#ª+xòsf­õ‑~|ð¾lñHfÿ•²çCV3ä'-Þ©&värüE›8º9P@·N¡½¹ÿxOŠÊÙ[û7æ½æ îÐŒ3$+/u‘57þ½pÖ¥ ÿdl •Á¸‚fY AÎç{¡Ašè«ä«äƒ‚·Oë™ûP(ã«Ñ¿p $#â}åXqLüU;,X0ÄÂX­GÑwĵ TïJâ §u“d ªm|2T  ‹† áYÁD"@#„VÿSÛ¤^:”ݬ9'.­0z¹U4KríPë3uP*§§×¦€Ö—òÀ ~%J•*ÔvñÁ²Ù˜ïšOq·ðJ…÷øôdü4ú5*@ÒÆ—ùÙÙô"rf½L´`ÑHvlÞeî![fB•³©ñ˜x6•$8lZ1çÑ¿`]tÊ{ŠW&w@ˆÑü6}þö´[„\GUÙT¿LXJ¼Ü|b0‚õ¸à?¾žö3, €TòY”Ø( «ë‡JÙLÇSÊMÉ x‘1èd¨%Ød¨øhc¬˜õW]ý#Vãm¶Ûk¥ÉUµµÐR^åœ($Wæuf¼®/Ñ[Ó/ Ü’‡Â0<½Ë3Æ Û’J«Xz[¯ô€á?š^;rI#cðTkò[ÆÛ’F¾xè¡ Ü‘F}Ö[ðH ! Û’(ϱ utÛè ÚÀw—Al-&7C·0Bn­·úŽ–æZ¾;Õ²W¤¹(×:Q!l‚ôø¶63&;ƒ]¯g¯Ó,è×YÀÉ’«W?hžÈ%'ðBfÓ=†ùV«Šdf£±‰¬}Šò-.~‚÷Äøâõ+ Ž º e@Ô::2ÆJÜ%*½#5’ ½3x…ÒòU!Á§˜ïØËFÓInÑoë v‡ÿ¿3LëF+×t ¥SVn¥½:º²ÿvðþ|.eA§å¯÷cìlÏë½p¤Q“¯-·‘:×”Î%^™ü£'p¦e°ód¥BZŠ¡k‘E?¡ÿ8Ú }qXÄFìö;~šc8±ÉDÿQ—Ê®¼¶ÿn¬°Y”¢¡.ÀXñ_Y¶ ‡Ï.Kc~RY.‡hvë›7Ò„2²LÜ´‹‚lœ¤ ÙűƖ ƒþë]5)"x G"F¯™™Añ3åU_8,~ãˆåiëÄ«9‘kHrÿ&Ð’uiýCuëA¼(H:ÔøNÇõ­¿9*H6ö ËÚsÍ /ºsÖ~,dVuiïx‹Ìvßd&ÎZ¥¤H2F¼$þè›é/ÁÚÿ=x ½ì7!þÀÛÍyqðA™ÜÖÀعðPZwl§êÇ] ‰zÔßA0}“ÄPI{ýŠÐããl@dn4KÂà>óé/™jc+÷\HŒß7´kÉú×ÖyS̱MyKDPè§ø¡­WØ(¤ùKÁ9e\uÐoÆÁдTßãö×µsöY¿³M1ûjÏÙEþË7öofµ¯öŸþÆÏÛuìFƒ)_ “}‚úe¸w3oÿèI„ÿÚå8©Ò­ÎýqÌã™MN°ù©$ÇMaßDV8÷8½…ø_…ø_…ø¥½0ø¹èÔª€þ/ᎠnîÛáâFÿÿtûµš3 B¨-ýY¾©øØÊØ<™†,h~ÜR_«È½°P;ׯ=,â'~ÀèP9bà CÃá5 ¢_ÿl¬2ƒÒœ=9¯m),íºðÀÞ’ûd „6ÿKXÃ5ôˆ-jÚhü󼄺4A—|Üáq ä÷%Ðoâ €âBTu dª-èu²¶ Óµ2@4¡re$âs`DRýBr8šªªªªªªª¿E±<Ý6—›Ùs³ûÛï$?½*Súý·$’I$’I$’I$’9ê¾Ó‚ãÁ*VþçË9báÃÀ–êë÷ÿ~È`Èﺨ°ÚRõÀRÊbxBÀ-«"S–G ûè{±ÒÍÛæ .ˆ¨¼ÉÄ„µŸ¼†š;/XõÚÞÛl¶¶–ºJ놪ªªªªªªªªªîº ™ù¬m}—ˉ8P-ÁpP}A·$’I$’I$’I$’I$Ž{Sbr/ó¾FÀfÎaí6^œ÷e)çÒ¡Û%½Î×~Äø·Je¥• `Pü@/ˆµÌSwvtZ*I$’I$’I$’I$‘{!ý7÷V™eí¯ÑbE`ÑŒj†!†Õ)·$’I$’I$’I$’Iè’ÔžŠn_p‰ëÁE9ÊbÍHTŽ8iwQ¶Ûm¶Ûm¶Ûm¶Ûm¶ÕŠqÍ€£ekÆTù"Î :í£>@˜ÊžK<€»ñËrI$’I$’I$’I$¸|)iy6 <雽ä4:01…TÔ‚÷è!ánÎõûÝ7a7lfX P/^à¤ÛYi²èÃB¸ š(îÄ¡g½–vî|Î$€¯‚Ç‹´'—1³-Ùç܆³·–~ ï3¸–Ð*leÙm¨ƒda“ ”€œ†Sï;_ÕAPˆ&Ð5PJ}µ ÿÉ{w؆=€ì²Ü¢Ä—Ú0`×ú …™ÌB.•0¤þHÑm‰¬]¥#D'ðjÛm¶Â'AcCˆòÀ~Í.’Ÿ¯§™S™ÜâA×óïõþÛdž?s©øÑÕÿù´“nI#[@@’I$’)Øuvj¹§v•Cùp¦e,¼ÍÉ$’Hû?ù½Wy$’I#ñ³b$N¥/F×Ì—‹ °qJÍÖÐ×!@p#ãà ¥³Ÿy ¹$R#A·$jK”rHöаUÒZ ¹#ÚóZ¹Å/\’IÊÍ ƒ¹õùI$’I#¿JXÈšI$’IúT)¤3Í;DjƒñƒèÎ…[ÀZCÒƽ¹»†œ’I$RÉÉ$HÝ’I$‘ÝŒ¶F*ô™$’IÊê®Òs $’H꫺¤!ú<ª4]ÿT‚ƒnI$‘÷CdpjÜ’I$‘÷A=„Šè=ÜV¢Ó ŒÎŠ`. ̾E–¢)O³(ÛÅý –ýþ¯>D7‡ƒlÎÍ*ÑkW£LÈuôËo0 ¦T>î¾W†5@w¹¡H>y—À5a‚Ð3Í!%ÔÞ]zzµ#Ú!H“x^±­ßëk_oÆ´cãºÿ„Çé5+éߢÃú#óÉ$q}íÐÁùMdÜyt‹!åÙ‡+Ä[_c^«-«åæ!còÓ!­ø ÌûXC6Ëq¼ˆ ÒÙ²7Rä_¶o,øJ‹(Í—ß»‡ëØÒ5@òóA¹r>¾&d=ܥܴp}Isi¶kìPÔÜÄ‘Eh#ny_ˆ£Udzóåþ5Ÿ¯ŸívÃí^êv[ñ³¿¥å™MZ¤íï¯Çï’ã éUWùn(aÓÌCÓU£å‰ɛ ¾Ã}Øk!Q7R?ªÝ±×žÎÒ¾Ô°bxæ—„j«(ä;S3§[Y|ÄÆÕÕ—Ý£ìÜ‚“Nb‘¸Öó‚üŽ>öqÌnÁ=·Á/eÕüId¼’fÑê’–¬ ¡u26OAhã¼h LåÓ-vê©öX’^®{Æ,TMI/Æ¡¾¨”Ka3Ä(z]ØlÞ0žØ^Ïé27;æ3ÿ*ì/oYmüBØýïëšBš#KK·‡¶³Ò oƒ•RºU.EõnÿÙit32ýýýýýýýýýýýýýýýýýýý‰¥ÿ­ÿ€ÿªþ…€ÿ²þŒƒþ¥Y€þÿƒƒþ­ã€þÿŠþþ¥:'©&'4"þþòà³ÜÝ݈ÿþ¥*­&#"ÿþò¶ÜÛ݇þþ:¯&þþà·Ü°‡þþ'¯&$þþ¸ÜÒ‡þþ±&þþ¹Ü‡þþ±&þþ¹Ü‡þþ±&þþ¹Ü‡þþ±&þþ¹Ü‡þþ±&þþ…Ü訽‰Ü訽‰Ü訽܇þþ±&þþ…Ü«€¥¹ˆÜ«€¥¹ˆÜ«€¥¹ŒÜ‡þþ±&þþ…ܯ¥¹‡Ü¯¥¹‡Ü¯¥¹‹Ü‡þþ±&þþ…ÜÊ‚¥¹†ÜÊ‚¥¹†ÜÊ‚¥¹ŠÜ‡þþ±&þþ†ÜÇ‚¥¹†ÜÇ‚¥¹†ÜÇ‚¥¹‰Ü‡þþ±&þþ‡ÜÇ‚¥¹†ÜÇ‚¥¹†ÜÇ‚¥¹ˆÜ‡þþ±&þþˆÜÇ‚¥¹†ÜÇ‚¥¹†ÜÇ‚¥¹‡Ü‡þþ‡&#‡&þþ‰ÜÇ‚¥¹†ÜÇ‚¥¹†ÜÇ‚¥¹†Ü‡þþ…&!Ÿ!…&þþŠÜÇ‚¥À†ÜÇ‚¥À†ÜÇ‚¥À…܇þþ…& …&þþ‹ÜÇ¥«‡ÜÇ¥«‡ÜÇ¥«…܇þþ…&Ÿ…&þþ‹Ü¹¥¯‡Ü¹¥¯‡Ü¹¥¯…܇þþ…&$%…&þþŠÜ¹‚¥Ê†Ü¹‚¥Ê†Ü¹‚¥Ê…܇þþ±&þþ‰Ü¹‚¥Ç†Ü¹‚¥Ç†Ü¹‚¥Ç†Ü‡þþ±&þþˆÜ¹‚¥Ç†Ü¹‚¥Ç†Ü¹‚¥Ç‡Ü‡þþ±&þþ‡Ü¹‚¥Ç†Ü¹‚¥Ç†Ü¹‚¥ÇˆÜ‡þþ±&þþ†Ü¹‚¥Ç†Ü¹‚¥Ç†Ü¹‚¥Ç‰Ü‡þþ±&þþ…ÜÀ‚¥Ç†ÜÀ‚¥Ç†ÜÀ‚¥ÇŠÜ‡þþ±&þþ…Ü«¥Ç‡Ü«¥Ç‡Ü«¥Ç‹Ü‡þþ±&þþ…Ü«€¥ÇˆÜ«€¥ÇˆÜ«€¥ÇŒÜ‡þþ±&þþ…ÜÕ¶¶Ê‰ÜÕ¶¶Ê‰ÜÕ¶¶Ê܇þþ±&þþ¹Ü‡þþ±&þþ¹Ü‡þþ±&þþ¹Ü‡þþ‡&#‡&þþ¹Ü‡þþ…&!Ÿ!…&þþ¹Ü‡þþ…& …&þþ¹Ü‡þþ…&Ÿ…&þþ¹Ü‡þþ…&$%…&þþ¹Ü‡þþ±&þþ¹Ü‡þþ±&þþ¹Ü‡þþ±&þþ¹Ü‡þþ±&ÿþ¸ÜÒ‡þþ±&ÿþ¸Ü½‡þþ±&€ÿä·ÜO‡þþ±&‚¶Üšˆþþ±&ƒf½±Ë½O‰þþ±&Çþþ±&‡þþ±&‚€ÿ’þ…€ÿ’þŠþþ‡&#‡&ƒþŸ€þÿƒƒþŸ€þÿ‰þþ…&!Ÿ!…&€þþ̆‘…†ˆþþ̆‘…†ˆˆþþ…& …&ÿþÌ—…ˆÿþÌ—…ˆ‡þþ…&Ÿ…&þþ—…hþþ—…h‡þþ…&$%…&þþ†—…€þþ†—…€‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ‡&•#&þþ™…þþ™…‡þþ…&!—!&þþ™…þþ™…‡þþ…&˜&þþ™…þþ™…‡þþ…&—&þþ™…þþ™…‡þþ…&$•%&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡þþ±&þþ™…þþ™…‡ÿþ'¯&$ÿþ†—…€ÿþ†—…€‡ÿþ0¯& ÿþ‰—…sÿþ‰—…sˆÿG¯& €ÿ˜—….€ÿ˜—….Š%­&ƒƒ•…\ƒƒ•…\Œ ©" …*†&%$/Þ‰ÜÚÜÿŠ&ŒÜRŠ& ÜÜÑÑÜÜÑÑÜÜÑр܀Š&ÜÜØ²ÑÜØ²ÑÜØ²ÑÜÜ€&&#„&&€Ü Ø«ÜÜØ«ÜÜØ«ÜÜ€Š&€Ü ¹ÇÜܹÇÜܹÇÜÜ€Š& ÜÜÎÇÜÜÎÇÜÜÎǀ܀Š&ŒÜ€&&#„&&ŒÜ€Š&ŒÜ,Š&Û‹ÜfŠ&Uƒ…&&#„&& ‘…„„g‘…„„XŠ&„…=„…1Š&„…„…€Š&„…„…€&&#‚&„…„…€Š&„…„…€Š&„…„…€'‰&†ƒ…†ƒ…'‰&†ƒ…<†ƒ…<ýžýžÿÿ‰ÿÿŒÿ—‡‹‰ŠgH6ˆ211!ÿŠ‹@Œ2Š‹ 22//22//22//€2€Š‹221(/21(/21(/22€‹‹‚„hp‹‹€2 1&221&221&22€Š‹€2 )-22)-22)-22€Š‹ 22.-22.-22.-€2€Š‹Œ2€‹‹‚„hp‹‹Œ2€Š‹5‹2 Š‹3‹2Š‹Uƒ…‹‹‚„hp‹‹ £›€™——q£›€™——cŠ‹„™F„™:Š‹„™„™€Š‹„™„™€‹‹‚‚hp‹„™„™€Š‹„™„™€Š‹„™„™€Š‰‹„™„™Œ‰‹@šƒ™Hšƒ™Hýžýžÿÿ‰ÿÿŒÿÖ‡ÒÑЗF2ˆ/-.ÿŠÒZŒ/ŠÒ //,,//,,//,,€/€ŠÒ//.&,/.&,/.&,//€ÒÒÄ„ªÒÒ€/ .$//.$//.$//€ŠÒ€/ '*//'*//'*//€ŠÒ //,*//,*//,*€/€ŠÒŒ/€ÒÒÄ„ªÒÒŒ/€ŠÒ0‹/ŠÒ1‹/ŠÒUƒ…ÒÒÄ„ªÒÒ ‚…ŠÒ„ ‡ŠÒŠÒÒÒÄ‚ªÒŠÒŠÒщÒ,„†Ñ‰Òb„ý¥is32Ažƒÿ„ÿÿƒ&„Üÿƒ&„Üÿƒ&„Üÿƒ&„Üÿƒ&†ÿƒ&€…€…ƒ&€…€…ÿƒ&€…€…ÿƒ&€…€…ÿƒ&€…€…®žƒÿ„ÿÿƒ‹„2ÿƒ‹„2ÿƒ‹„2ÿƒ‹„2ÿƒ‹†ÿƒ‹€™€™ƒ‹€™€™ÿƒ‹€™€™ÿƒ‹€™€™ÿƒ‹€™€™®žƒÿ„ÿÿƒÒ„/ÿƒÒ„/ÿƒÒ„/ÿƒÒ„/ÿƒÒ†ÿƒÒ‡ƒÒ†ÿƒÒ†ÿƒÒ†ÿƒÒ¶t8mk@  SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS(Œâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ‰(Œâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ‰(ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ(ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@4ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·@(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡@<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@C·ÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ·W@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ 8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@$0666666666666666600000000000000006666666666666666000ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@(Œâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ‰(Œâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@(ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ(ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@4âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@4âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç@4©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·@(©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·@(©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·@(9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW@9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW@9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW@_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡@<_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡@<_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡@<C·ÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ·W@@C·ÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ·W@@C·ÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏÏ·W@@ 8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@< 8@@@@@@@@@@@@@@@@@@@@@@< 8@@@@@@@@@@@@@@@@@@@@@@<$00000000000000000000000000000000000000000000$00000000000000000000$00000000000000000000h8mk     3·ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÅ_3·ÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÅ_©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ šÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó,Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@c›ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ_ Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@   Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@3·ÔÿÿÿÿÿðÅ_3·ÔÿÿÿÿÿðÅ_ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿD©ÿÿÿÿÿÿÿÿÿÿ&©ÿÿÿÿÿÿÿÿÿÿ ŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBšÿÿÿÿÿÿÿÿÿÿBšÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@Œÿÿÿÿÿÿÿÿÿÿ@‰ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@‰ÿÿÿÿÿÿÿÿÿÿ@‰ÿÿÿÿÿÿÿÿÿÿ@Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó,Aÿÿÿÿÿÿÿÿÿó,Aÿÿÿÿÿÿÿÿÿó,c›ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ_ c›ŸŸŸŸŸŸŸ_ c›ŸŸŸŸŸŸŸ_ l8mk~Ôÿÿÿÿÿÿÿÿÿï¯~Ôÿÿÿÿÿÿÿÿÿÿÿï¯ÿÿÿÿÿÿÿÿÿÿÿÿÿWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@âÿÿÿÿÿÿÿÿÿÿÿÿÿÿKÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿCÿÿÿÿÿÿÿÿÿÿÿÿÿ@ C@@@@@@CC@@@8 ÿÿÿÿÿÿÿÿÿÿÿÿÿB~Ôÿÿÿï¯~Ôÿÿÿï¯ÿÿÿÿÿÿÿÿÿÿÿÿÿCÿÿÿÿÿÿÿWÿÿÿÿÿÿÿSÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@âÿÿÿÿÿÿÿÿÿÿÿÿKâÿÿÿÿÿÿKâÿÿÿÿÿÿKÿÿÿÿÿÿÿÿÿÿÿÿCÿÿÿÿÿÿCÿÿÿÿÿÿC@@@@@@@@@@8 @@@@8 @@@@8 s8mkÈÿÿÿÿÈ@ÈÿÿÿÿÿÈ@ÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿ@ÿÿÿÿÿÿÿ@ÿÿÿÿÿÿ@ÈÿÿÿÿÿÈ@ÿÿÿÿÿÿ@@@@@@@@ÿÿÿÿÿÿ@ÞÿÞ@ÞÿÞ@ÿÿÿÿÿÿ@ÿÿÿ@ÿÿÿ@ÿÿÿÿÿÿ@ÿÿÿ@ÿÿÿ@ÿÿÿÿÿÿ@ÿÿÿ@ÿÿÿ@ÈÿÿÿÿÈ@ÞÿÞ@ÞÿÞ@@@@@@@@@@@@@iep-3.7/iep/resources/fonts/0000775000175000017500000000000012573320440016274 5ustar almaralmar00000000000000iep-3.7/iep/resources/fonts/DejaVuSansMono-Bold.ttf0000664000175000017500000114500012271043444022527 0ustar almaralmar00000000000000 FFTMYôRÜ,GDEF`×TšHtGPOS3 Eê¼&GSUBê$$ûä¤OS/2†%†¹!ˆVcmapNºê¨!à &cvt ´I±*,„fpgmq49j-Œ«gasp.8 glyfšÊ"¨.D¹|headô™ÅçÀ6hhea ¶ëçø$hmtxqØrˆè@loca,·°\0tmaxpÛ0Ð namet2h0ð!Bpost™Ï.rR4rÒprepLQŸ3ÅøÆÔ.™É!É!l…†—˜˜™›œst€ÆÇÇÈÉÊר     Ü Ý ä å  žÚarab cyrl.grek@lao LlatnXÿÿ SRB ÿÿÿÿÿÿ4ISM 4KSM 4LSM 4MOL 4NSM 4ROM 4SKS 4SSM 4ÿÿmarkmark&mark.mkmk4 $,4<DLTHn¶ € ¢xˆ" jý”~yjÿú&0  j:jÖz}wx{jQ]jjh¸® $6HZl~ àP<ÿÄ xÿ´Èÿ àP<ÿÄ <ÿÄœÿ¤ |ÿà@ý€ ÿ¨4ýX àP<ÿÄ pÿÌÿ€ Ý ävy~j~jÿújÎŽØ ðâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|¼ÿôlý”@þLhÿ´\þh<ÿXXÿxXÿx<ý¨dý´lý°XÿxXÿx.ýÜ,ýñLþPþXþ@þ€ÿ˜€ÿ˜ ý· ý·Xÿ{øÿDþ ÿ?ÜþW ÿs\þsXÿ{<ýã(þ[ýXÿ{Xÿ{Tüç£þXÿ{ÿøþìýÏäý×äý×äý×.ýääý׌ÿ?5ÿJTÿjÿsNþpmý6ýOý?ý6uý\ý PýMý.\üØ:ý.ýPýNÿjLÿj[ÿ›Zÿœ[ÿjIÿjWÿœTÿœLÿj4ÿjKÿœ]ÿœÔÿL”ÿ@ôÿjVÿjàÿ8ˆÿ8ôÿjbÿjtý¨žü÷ˆý@xýœýОü÷þvXþªTý¨žü÷Äý,dý(hý¨žü÷ÜýHhý4ôþ ôþ ôþ ôþ €ÿLÁÿB,ÿj,ÿj•ÿ2ßÿ),ÿj,ÿjTÿdTÿd¸ÿdTÿdLþp´þpOþ¢_þ¢ì iýÇÑýÃ9þ;]þOÿ¯]ÿŸ]ÿŸ¡ÿkeþg5þgIþKjþ¥ÿkíÿ¯!ÿ_9ÿk!ÿ_!ÿ_!ÿ_!ÿ_!ÿ_!ÿ_õýÏõýÏ þƒþsõýÏõýÏYÿ‹=ÿgõýÏõýÏUÿw%ÿkýÿ[ýÿ[ýÿ[ýÿ[ÑýïÑýïÑýïÑýïÑýï¡ýóyÿk]ÿk™ýó¡ý÷yÿkAÿkõÿƒÙÿ™ÿaÿƒõÿƒÁÿƒaÿ‡aÿ‡aÿ‡Aÿ‹aÿ‡=ÿ‡aÿ‡1ÿ‹aÿ‡%ÿ‡ùýÓùýÓaÿ§aÿ£ùýÓùýÓaÿ§aÿŸÿ/ýÿK¥ÿ“Yÿ›Mýë5ýÓ‘ÿ³aÿ—­ÿK­ÿKeÿo}ÿQþGþ/ ÿ{]ÿoýÿ§©ÿO ÿGÑÿ?eþkÙý¿ÿ§]ÿáÿk¥ÿ¿iÿs™ýЙýЙýÐþ\­þTíý,iý þTYþ<dýÀXÿ{ôýÓýÓäý×EýßÈÿ/Jþ>PýÜ þp OOSsŸ"  L3 O Ro U Xs h hw o Üx  æ  îvy~j~jÿúj¸®Î $6HZl~ œhƒU œhE œhcú œhG œhßÝ œhßÝ œhßÝ œhßÝ Ý ä tuwxz{|} &,28>DJPVj hÿjQ]jj\jhj jJh°ô® ôêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ‚ƒb¯z‹bŸ2_bŸVSÎ ;òC¦k¦kÒ‹¦kÇÚÏæ2ľ†¯zo.Ã2·¶r b‹rwæ>*‹Ò{Ö·v&ú#ê_óBCbO&cnæk¦k¦k¦k}<¡x®x¿%ièFèWèWè…è@èTèTè[è:èBè`è^ØLÜ?c:Es[ÄTØväŽ;Ê]Ö4ø8Ìx,Ê ìô¼X&¢Ò(o³€Xè–o³„èXè²lo³¸PXdÆTo³ÄXOéÄJBû<EôxýKúúU´Á¹úôúT€T€¸€T€„RlbOèW蚇&»ZÇZs{;â#7fkfÇž³*‡*³.óÂëz"/*3ïßö[âcâ îÿ¦kÒ‹:«BŸÎoÆ‹:s6â«âß2¿’Cò§ö»2> ^çnËËʸýϺ¾~*6.Zw.k~“B³VKO“êå®Ëáó¦çäǪ·ãϦ·µ2 çºGh„8ØpBh<U=7~öe<PíLÓ#j_ «38~~Óª‡Ážö{Ίƒóñ)KÓ˦pr¿¢Çf‹¶{ú+ÊÓÎËŽ>£V¯;'ÆÂ¯¶ão¢"?ê4èÜWÌ OOQsŸ$  L5 O Rq U Xu h hy k nz q Ü~  ê  ò tuwxz{|} &,28>DJPVj hÿjQ]jj\jhj jJh°œØ¬ yôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpx~„Š–œ¢¨®´ºÀÆhÕhÕ³Õ6ÕzÕžÕšÕhÕhÕšÕhÕšÕhÕhÕhÕhÕhÕ6ÕhÕhÕhÕhÕhÕhÕhÕšÕh`h³`hg`hh`hš2h`h`h`h`h`h`h`hh`h`h`h`h`h`zÕh`h`hÕh`hÕh`hÕhÕh`hÕhÕ6Õh`-`³`³`h`hh`h`h`g`h`h`h`h`h`h`h`h`h`h`³`h`h`hh`h`h`h`h`h`h`h``h`h`³`h`'ð}{gðfðiðdð iâdâ6ÕhÕhÕhÕhÕh`hÕšÕhÕhAÕ` $=DKN]"ˆˆ2¨¨3óó4  57BB9HH:ÑÑ;ææ<ñò=ôõ?úúABûûCgoDq†M‹Œc™šeg‚‚h…‡i‰‰l Ø Øm Ú Ûn Ý Ýp à áq ä ås  u w†—™›V\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎh`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`û/†—™ŸÈ¾Ø ntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬ÑÑ ÑÑ ÑÑ ÌþÑ ÑÑ ÌþÑ ÑÑ ÑÑ ÑÑ ÌþÑ ÑÑ ÑÑ ÑÑ ÑÖÑÒ ÑÖÑÑ ÑÖÑÑ ÑÖÑÑ ÑÑ ÑÑ ÑÒ ÑÑ ÑÑ ÑÑ ªÄÇÇÊ×>DJPV\bhntz€†Œ’Ñ`ѰѰѰѰÑÑѰÑѰѰѰѰѰѰ ª arab cyrl4grekFlao PlatnZÿÿSRB ÿÿÿÿÿÿ4ISM ligaDloclJloclPmediVrlig\"*2:BJ@D N Ò R Ò ð.     Jhp5 j l n p r v x | ~ ‚ † Š Ž ’ ” – ˜ š ž ¢ ¦ ª ® ² ¶ º ¾ Â Æ Ê Î Ò Ö Ø Ú &    "  6 2 : > D B * F J P V NPhjsŸ#  4T' t z € „ ˆ Œ œ   ¤ ¨ ¬ ° ´ ¸ ¼ À Ä È Ì Ð Ô T Ü (   $  8 4 < @ , H L R XTTVVX\ahjprs˜›Ÿ"T' s y  ƒ ‡ ‹ › Ÿ £ § « ¯ ³ · » ¿ Ã Ç Ë Ï Ó S Û '    #  7 3 ; ? + G K Q WTTVVX\ahjprs˜›Ÿ"  ã v ä v Ç È> $ á p ß l Ý j â p à l Þ j Ç È O LIѼ3™3™×f  æ&ÿÐñû(PfEd ÿýþšmã`ßüü~Ããðöù!AEM¹ÁÉÍÓÞéîó?CXauz~ŠŒ¡Îá_cs›¥³»ÄÈÌùV_‡Š  :UZmt{€„‡‘˜¤©¯¾Ìù‚„ˆŠ—Ÿ£¥§«¹¼Íü .<[ex{…·¿-Mcy™›¡­±¹½ÇÍÝåëõùEMWY[]}´ÄÓÛïôþ  # & 7 : > I K _ q Ž œ µ ¹!!!!!!!"!$!&!+!.!_" """" "-"="i"‹"’"¥"Æ"Í"é"ï####!#(#+#5#>#D#I#M#P#T#\#`#e#i#p#z#}#ƒ#‹#•#®#Ï$#&/&‹&œ&¡&±'' '''K'M'R'V'^'u'”'¯'¿'Æ'à'é)ë)û*/+,d,p,w,z,..%..§§§'§Ž§‘öÅûûû•ûŸû­ûéûÿþtþüþÿÿýÿÿ  Íæôøü$CLP»ÆÌÐÖàîóCXatz~„ŒŽ£Ððbr¢ªºÀÇËÏ1Ya‰  !@Z`ty~ƒ†‘˜¤©¯¾Ìð„‡Š”™¡¥§ª­»ÈÐ,0>bw{…›¹0Th|›Ÿ¬°¶¼ÆÊØàèîø HPY[]_€¶ÆÖÝòö   & / 9 < E K _ p t   ¸!!! !!!!"!$!&!*!.!S!"""""'"4"A"m""•"Å"Í"Ú"ï#####%#+#5#7#A#G#K#P#R#W#^#c#h#k#s#}#€#ˆ#•#›#Î$#%€&8&& &°''' ')'M'O'V'X'a'”'˜'±'Å'à'è)ë)ú*/+,d,m,u,y,|.."..§§§"§‰§öÅûûRûŠûžûªûèûüþpþvþÿÿùÿÿÿãÿÂÿ¹ÿ·ÿ´ÿ³ÿ±ÿ¯ÿ®ÿ¨ÿ¦ÿ¥ÿ¡ÿŸÿÿ›ÿšÿ–ÿ’ÿ†ÿƒÿoÿgÿUÿQÿNÿIÿHÿGÿFÿEÿ7ÿ5ÿ'ÿ ÿÿþûþ÷þõþóþñþÛþÓþÀþ¾þ½þ¼þAþ@þ?þ7þ2þ/þ.þ)þ%þ þþþþþþþý÷ýóýîýàýÓý°ö)ö(ö&ö%ö#ööööööööö ôèçþçôçóçîçâçáçàçÚçÉçÇç¾ç©ç¨çhçdçbç\çXçVçUçRçHçFçBç@ç8ç6ç,ç*ç(ç&ç$ççççççççççççç ç ç ççççæÿæ÷æöæõæïæîæÛæËæÉæÈæÅæÃæ{æyæræmælæjæfæeædæaæ_æ;æ æ æ æææåûåøåõåòåðåÑåËå¿åºåªå©å§å¥å¢å å—å–å”å’å‘ååŽåŒå‹å‰å‡å†å„å‚å€å|åsånåOäüã ã˜ã”ã‘ãƒã4ã3ã1ã0ã/ã.ã+ã*ã(ã ãããâèâáàààÒàŸß½ÞtÞlÞhÞgÞfÜÎÜÅܽcäcàcÞc}c|I¿·¯¥kY é è æ í   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾!rdei#x¡pkˆvjXˆš%s\]gw ,l|墨cn!T@m}%b‚…—¹ jÁ:q/0  "y'„ŒƒŠ‘Ž•–”œ›ógwqstuzxvh3#®¶îN\{Û#'##\ #Í\\w¼#3‰b#þ#\b b– áb…¤ÍƒðÍ¢ƒ®º¦˜¼°ô%¢Ã%1ž/#ð/Õ 9bÍR¶¢¤Å¤sÕÃáÓîÕ˜¢ÕÕðq¸#îoúVúÁéd\œH¾fšÃ```{î\{šá`ªß¢ƒšoÍ7LøÑ'ª5%ÓÕ={¢¤ðD=!Ï¢/îÑsæ·, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX °ÀEDY!-,°%E`D-,KSX°%°%EDY!!-,ED-,°%°%I°%°%I`° ch ŠŠ#:Še:-ÿÿhþ–h¤@ ¾¾b/ÄÔì1ÔìÔì0!%!!hüsüåþ–øòr)ãîÕ @ d Ô<ì2991/äÜÌ0!!!#ã þõ !Ç#þåÕýqþ›eçªçÕ@ dÔÌÔÌ1ô<Ì20!!!çÿÿÿÕýÕ+ýÕ+;J@0g g    ÔÌ91/<Ô<<ü<<Ô<<Ä2ì220333#3!####5!#5!#3Ã_Ë^àaÁöJÍþþ^Ý^Í^Ý^ÏJÛ^ÍJ;þŠvþŠ×þÛ×þ‹uþ‹u×%×vý³þÛ¤þÓD /P@+)%$(hh!/$, ( 0Ô<Ì2üÄÌüÎÄ1/<ÄÆ2î2ÖÆÆî2ÖÆ90>54&#.'.546753.'¶?FEÍ>??ËW¾ggÁUÅÀ̹G™P>˜[ÅÉÙ´þÒ O=>O-C:9Lû‘-.+=BI'¿§Æ ííÿ(0þÍϬ¤Ò !Ø '3V@-(  (kk kj.k%1"+1""4ÔÄìÜìîÞî99991/îÎöîÞîî999904632#"&"32654& 4632#"&"32654&!º……»»……º?9PP9:OPþ½)ûè˹†„¼¼„†¹=8ON9:QRX†º»……º¹O::OO:9PýP¢`þ^’†º»…„»¹P::OP99Q%ÿãÓð*8©@Z)(*()(-,.+23456718%8+(%#1) #1p#popnr)($ +.#  .8 )$. 9ÜÄìüÄÄÌî999999991/äöîöîÆî99990KSXÉ9É9ÉÉ9Y"%#"5467.54632.#">54&'3!32676767fK©Wàþê‹20ÚÎIŒD@ƒAPR=D9ëDI¢þÃþ"BCr;H23Ñ‘îXN…<¢®ÿ$%86$~fþ &b993‘ÙVöÛ+wIz§  çªçÕ¶dÔÌ1ôÌ0!çÿÕýÕ+þòœ @ut  ÔÄ2ì991üì0#&547œ„€€„䟚›žïþ@àÞþ=ðçÁéèÃä5þòR @ut  ÔüÄ2991üì03#6545äž›šŸä„€€äþ=èéþ?çðÃÞàÀy9TðJ@(   n   Ô<Ä2Ü<Ä2991ôÔ<Ä2ÄÄ2990 %#'-73%Tþ¶JLþ´¬þµLLþ´LK¬LÁ­®¸þ¨X¸®­¶Xþ¨¶B\¨ #@ v    Ô<Äü<Ä1Ô<Äü<Ä0!!#!5!ß®þRíþP°¨þRîþP°î®jþáo@ w ÔìÜÄ1üÌ0!#Í9ÄØcoþñþ-¼¤ßµÔÌ1ÔÌ0!!-wý‰ßþÝÁo¶w Ôì1/ì0!!ÁMþ³oþ‘qÿB`Õ@ dÔÄÔÄ1ôÌ03#ƒÝüîÝÕùm{ÿãVð #$@ x! xn!r$  $üììÔÌî1äôìîÔÎ0@ò////////// / / ?????????? ? ? OOKKKKK K O TTTPPPTT T ddd```dd d ŸŸŸŸŸŸŸ Ÿ Ÿ ¯¯««««« « ¯ ÀÀÀÿÿÿÿÿÿÿÿÿÿ ÿ ÿ T////////// / / ¿¿¿¿¿¿¿¿¿¿ ¿ ¿ ÀÀÀÀÀÀÀÀÀÀ À À $]]4632#"&"326&32#"ìH45HH54H|f^^fg^^ý¬ö÷øööø÷öé5HH54HGBúþíþîúúúýó„ƒþ~þ{þ|þ~ƒ¼oÕ $@xxdx  ÔÄÄüÄ1/ì2ôìÔì0!%!!!¼JþÍ5JüMÉL Jû/þüs'ð[@/% zy xnx    üÄüìÀÀ991/ìôìôì990KSXÉ9ÉY"!!577>54&#">32²uüL =KByoOÅkkÍ^í;H5îþüüª/FV…Adm?<')Ý¿Xš^Dî}ÿãLð(G@)p zy#p z y pnr) &  )üÄÄüìÔì91Ääôìôìîöîî90#32654&#">32!"&'32654&%žžnyynTÀggÈ\옠¨þêþ÷qÛd^ÚxxŒŒœWOS]*( !ε…©Ç¢Ùä&$/1o^s}fuÕ B@   % xd   üüÔ<ì291/äÔ<ì290KSXÉÉY" !!3#!!¶þ‡y5¤¤þåý°ý²–üjýþ¾BÿãFÕ<@!xzyx xd r  üÄüìÄî1ÄäôìîöîþÄ90!!>32!"&'32654&#"Á+ýÄ$R.ÞþÕþþ`ÄfS¯Xœ¢¡†OŸQÕþüþë þèàëþï  ))…u''ƒÿábî $5@{{ z y{"nr%   %üììüìÄ1äôìôìîÖî90"32654&.#">32# !2ƒ`ee``gg#O‘C §/’cÊÜ÷àþï÷..F•ì‹„ƒ‹‹ƒƒŒÆþô--×ÒAAÿêûþìn˜„ƒ‡7Õ5@%xd üìÄ991/ôì0KSXííY"!!!‡°þþÓæý‘ÕÑúüÑÿãPð #/D@% {'{-{nr'0 $*  ! 0üÄìüìÔìî991Ääôìîî990"32654&%.54632#"&54632654&#"hczzcc{zþÁqvòÐÑòto|ŒþêéþŽeWXeeXVfš}gg~€eg}}'§yºØØºx§(&ĉ×êê׊ÄTXggXWefoÿÙNã$7@{ zy{ {nr% " %üìÄüìì1äôìÄîöîî9073267#"543 !"&2654&#"ËO‘CŸ§/’dÉÜöá÷þÒþÒF•7_ee_`gg .,ÕÔAAÿêúþ“þiþ}þ}î‹„ƒ‹‹ƒƒŒÁ'@ ww Ô<ì21/ìÔì0!!!!ÁMþ³Mþ³'þ“þµþ‘sþá' "@ww   Ô<ì2ÜÄ1ÄüÌî0!#!!ÁMÄ×NMþ³oþñþÇþ“Xmy˜@üì291ÔÌ90 5yüåûß!žþãþåùŸì X'yÛ@vvü<ì21ÔìÔì0!!!!X!ûß!ûßí´ëXmy˜@ü<ì91ÔÌ9055X!ûßžúþ`ìþaùé)ð$q@8   %$  fhn !  %Ô<ì2ÔÔì999991/ÌôìÔìÅ9990KSXÉ9É9Y"!!!546?>54&#">32¸ þõ þõ>PZ?-\\T·`bÉeÊæD^XD&þ呚cŒNY=P+CDGF 89¼¥Lƒ\VBT= þÁ‡s 4]@1(+$ 4| | }'$|+}|+15'(   ! .5ÔÄüÄî2îî991ÔÄüìþÄýÄîî9999904&#"326#5#"&5463254&#"3267# !2ÍfYYeeYYfºÄ&gH¤ÉÈ¥Gl"•ŠÐþù0ýP–E\Q¿mþ¢þ`v4Úý!q€€qr€€þØR51ìÂÁë1/)ˆ”þ’þÛþÍþ•//°77ÒŒƒÑþùã!°Õ ±@;      %h~d     ôK°SK° QZX¹ @8Yì91/<äüì90KSXÉÉÉÉÉÉÉÉY"@,0000 5::5s|€´»]]!!!!!h‹þÀi“þÙ\þuZþÙÇýqú+qþ}‡× >@$h hdh €  !üì2üìÔì991/äìôìî9032654&#32654&#%!2)šÄqvˆÄÄp_anþáùû”«­þüþÛþ¦þF`wyjFþ¥P\\Së½¼¢ İØÂ˜ÿã9ð.@op op nr! üì2ì1äôìôìîöî0%# !2.#"32679FšUþÒþÂ>.UœDLL¢¥¥¢LL+$$ŽxyŽ$$þ¸FAþÿýüþÿAF‰uÕ(@p dp !  "üìüì99991/ìôì0326&#! )°P®””®þ‰<nBþ¾þ’þÄËü?ÛÚ þ£þtþsþ¡¨JÕ *@ppd p€#  üì2ü<ä1/äìôìî0)!!!!!Jü^¢ý…?ýÁ{Õþüþ¾þüþy¶XÕ %@ppd€# üì2üä1/äôìî0!!!!!Xý…Bý¾þÙ¢Ñþ¾þüýuÕuÿãjðS@!ppopnr%! üìüÄüÄ1äôìôìþÔî990@]]#5!# !2.#"326hÊÌUÍuþÞþÄ?-Z®L>¡`¨¦ ™.DøýTIK“syŽ30þ¹PQýþÿùþü‰HÕ &@p€d  " üì2üì21/<ä2ôì0!!!!!!‰'q'þÙþþÙÕýÇ9ú+˜ýh¬%Õ #@pd p ÔÄ2üÄ21/ì2ôì20!!!!!¬yþ×)ü‡)Ñþüü3þüÍmÿãðÕ.@ opp dr  üüüÄ1äôìîöî99073265!!!"&mVÃctlþ—åþù_ÏJVX\tòü þïë4uÉÕ a@3  %d   üì2À91/<ä290KSXÉÉÉÉÉÉY"!! !!u'ÎNþ)èþ¸þžƒþÙÕý²Ný´üw ¦þáÕ@ pdüìì1/äì03!!á'wÕû/þüV{Õ È@  % % üìüì91@ d /<ä2Ä90@  %KSXÉÉÉÉY"² ]@R )=?? ‡€¯¯ ¿¿ & )/708?…€Š‡ € Ÿ”› ¤«¢¬ ±¿¶º ]]K° TX» €€88Y!!###V`²±bþžë þÕýqú+¬ýsûTwXÕ S@%d&& üìüì991/<ä2990KSXÉÉY"²‡]@  ‡‰]]!!!!w= þÅþ^þüÕûÃ=ú+=ûÃ\ÿãuð #@ppnr !! 'üìüì1äôìî0"326&! ! hqhhqrhhý‚  þ÷þüþýþ÷çñþóþôññ  ñþˆþxþþ‚þxˆ¢{Õ,@pp d !  üì2üì99991/ôìÔì032654&#%! !#!Éy‘uu‘þ`•5þñþËnþÙÝþJbyybøÜ÷÷ÜýÑ\þçuð<@ pp n ! !'üìüì991ÄôìîÅ9990# ! "326& þÿþ÷  ~xºÊþùqhhqrhhˆ~ˆþxþþùþL¶–ñþóþôññ  ñ…ÑÕf@6  %p pd   !  "üì2üìÄ9991/<ôìÔì9990KSXÉÉ9Y"!&'&+!! 32654&#',A/þ¼´ Ok^þÙª û–ýø‹yihzÁ A^ýçy©ý²ÕÌæš¶ þi_mm^ÿãVð'p@>'' '%' o!p o pnr('$ ($"(üÄìüìä99991äôìôìîöî90KSXÉ9É9Y".54$32.#"!"&'32654&'þßžãgÎe_Ä`krS„´ªþõþòoßhvÝlmxPLU»žËè/.þàCFVP>Q10BÚ¦âß541TRcYCeZwÕ@ pdÔÄüÄ1/ôì20)!!!üþÙþ…þ…ÓþþjÿãfÕ*@  pr d  üìüì1ä2ôì99990!3265!! j'reer'òþôþõó'®üppøüRþÐþì9˜Õm@%%dôK°SK° QZX¹@8Yì91/ä290KSXÉÉÉÉY"@  ]]%!!!h)þþgþ)ößú+ÕÑÕ µ@@      % d   /Ì91/<ô<Ä90KSXÉÉÉÉÉÉÉÉY"²‡]@6fe   )&ghj f g wzsx‡ˆŠ††‰‡]]!3!! !kõ–T¬þíªŸþïÕû¸Åý;Hú+üð¶Õ ¤@C    % d   ôK°SK° QZX¹@8YÄüÄ91/<ä290KSXÉÉÉÉÉÉÉÉY"@  ]]) ! ! !¶þÏþãþäþ϶þV11þXîþößþ%Ûý!ÉÕS@(%d ÔÄüÄ9991/ä290KSXÉÉÉÉY"! !!>"#>þ3þÙÕý¨Xüwý´Ls‰Õ 8@%pdp üÄüÄ991/ìôì0KSXÉÉY"!!!5!‰òýLÂûêŸýwÕôü#þüôݦþò¢$@‚u‚tÔìÀÀÀÀ1üìüì0!#3!¦üòòþ¾úZ¾oÿB`Õ@ dÔÌ991ôÌ0 #NßüîÕùm“/þò+ @‚u‚tÔì991üìüì0!53#5+þòòøÞ¾¦¾9¨˜Õ@ dÔÌ91ôÌ290 # #ãµòþÂþÃòµÕýÓ-þÓ-þÑþÛµ‚/Ì1Ôì0!5Ñû/þÛ¾¾Çîüf"¶ƒÔÌ1ôK° TK°T[X¹@8YÌ0 #áÅþfþˆx^ÿãT{ %…@/   ggh Šg#‰r… #  .)&üìÌüì22991/ääôìôìîî99990@-400 4!urrˆˆˆ       ¦¦    ]"326=%!5#"&546!354&#"5>3 ¼¤‚ZMt€#þÝ5¦d¿Õþ ËgdiÅkaÈpÝTfLZ¯qý}JPʵĻ1GI5:ú(&Þ–ÿãw 6@  h hr‰t2 0üì22üì1/ìäôìî9904&#"326>32#"&'!!Rl__nn__lþh6ZÇ×ÔÀe–.þÜ$-¢¸¸¢¢¸¸6]]þÐþäþèþÌba¦¨ÿã%}.@‹yh ‹ yh ‰r 75üì2ì1äôìôìîöî0%# !2.#"3267%JªbþýþÜ&Z§S@™RššU”B9++89*,þô7;¶¨¨´9:Zÿã;6@hhr‰t2 )üìüì221/ìäôìî990!!5#"3232654&#"$þÜ/•eÀÔ×ÇZþžl__nn__lÁSùì¦ab40]þ¢¸¸¢¢¸¸\ÿã}{L@#  ‹ hy Žh ‰r .)üììüÄì1äôììæîîî90@ Ï Ï ÏÏÏ]%# 32!3267.#"NfÔvþçþ×÷ùý š™eÄkøspex 7**->þÙþôw„‚:?itw{q®;4@ t  Ô<Äü<Ä2991/ä2üìî2990!!!!5!546;#"ãXþ¨þÛþð¨äñåB/ÂbáüáNÊœá0bþXH} (I@(  &' h‹yhh#‰'‘)& 2 ))üìÄüì221Äääôìîöîî999904&#"326!"&'326=#"325!#r]\qq\]r%óþï\´]S¬[|v+ŽfÀââ¾`–+%B–µ´—˜´µþ©þóï .,u|yPN, 8ZR¬/.@ h‰ t 7  5üì2üì1/<ìôì99990!4&#"!!>32/þÝENPZþÝ#–jŸ¢×ý)ªyh}ýý¤]fÓ *@  s  Ô<ÄÄü<Ä1/ìì2ôìÎ0!!!5!!!!ÝDlümþá%þÛ`üáážþªþXR 7@  ‘s  Ô<ì2ÄÄ991ìäôìîÎ990%#!53265!5!5!!RµÒþÄêbRþ×NþÛ%+ü×án„TáËV®® @@! %t  .5 üìì291/<ìä90KSXÉÉY"!! !!®%`cþXÀþ¼þÍdþÛüÏ}þ^ýB `þTZF %@t  ÔÄüÄ991/ìüì990!5!;!"&ƒþ×NRbêþÄѶÓ`áû¿„náØRƒ{"”@'  h ‰:=:=:#ÔK° TK° T[X¹@8YìüìþîÎ91/<<æö<î299990@7      /////////?? ? ? ? ?????]>32#4&#"#4&#"#3>32²!fJ‘oð&22(í(22&ðÕnDDpðGDÈþÄý‰Ï}TV{ý1Ï{VT}ý1`tBMQ¬/{0@  h‰ 7  5üì2üì1/<äôì99990!4&#"!!>32/þÝENO[þÝ#–jŸ¢×ý)ªziŽ~ý`¨]fÓbÿão{ #@hh‰r . )üìüì1äôìî0"32654&32#"hixxijxxýíîþçîíþç¹¥¥¹¹¥¥¹þ¢=þÃþñþñþÃ=–þVw{9@hh‰r‘ 20üì22üì1äääôìî990%!!>32#"&4&#"326ºþÜ$.–eÀÔ×ÇZbl__nn__lžý¸ ¨abþÌþèþäþÐ]ñ¢¸¸¢¢¸¸ZþV;{ 5@ h h‰r‘ 2)üìüì221äääôìî99032654&#"#"325!!l__nn__l˜6ZÇ×ÔÀe•/$þÜ1¢¸¸¢¢¸¸ýË^]04ba¨ùö#{)@ h‰  ÔÄì21/äôìÔÄ990.#"!!>320M]‹&þÛ%+²w&lnýü`®`i¬ÿã+{'¥@=    %  ‹yh‹yh%‰r( >7"5(üÄìüìä99991äôìôìîöî990KSXÉ9É9Y"²(!]@+ $)) ) ) ) ) ),//,))))) (!$'].#"#"&'32654&/.54632ßQ¯XbdÖ T •ãäeÔmaÉ^gjKQ¨šêÔ_½=ÿ4598P2&©­­##7:<98<"&¢ˆ¢´o1ž1@  Ô<Äü<Ä2991/ìô<Äì2990!!;#"&5!5!²þIUáöü²þâžþÂáýîKAá¡Úá> ÿã%`0@  hr   75üìüì21/ä2ôì99990!3265!!5#"& %DOOY%þÛ•i £‡ÙýTyhŒ~ƒû ¦]fÔP`i@%%1/üì91/ä290KSXÉÉÉÉY"²X]@U  ZUUY]] !!þœþ—þœ)ïð`û `ü–jÑ` ¿@@      %    /Ì91/<ô<Ä90KSXÉÉÉÉÉÉÉÉY"²h ]@@     )&') 96k c wxuy ‡ˆ†‰ ——˜˜–™ ]]333! !ô…yíw‡ôËþꈇþê`ü¦5ýËZû Fýº7š` —@B    %  1/ üÄüÄ91/<ä290KSXÉÉÉÉÉÉÉÉY"² ]@    96]] ! ! !yþ‡šþªÜÛþªžþƒVº»`ýèý¸yþ‡Hþ²N;þX˜`w@A     %  ‘  1 /üìÄ91ä2ôì9990KSXÉÉÉÉÉ9ÉY"+5326?!!Ç;¥vòwZT+þV4õ4yž‘ß=o<Aý)×¢9` 8@%6/ üÄì2991/ìôì0KSXÉÉY"!!!5!ºý³MüiNýÊ`åý`Ûå °þ²$^@0 %   ! ‚ ‚‚ t% $  %Ô<Äü<Ä299999991üÄìÔìî99999990#"&=4&+5326=46;#"3–ù©kŒ>>Œk©ù–{hFb~~bFh¿”Ý×—s¿r˜×Ý“¾TÑ¥†ˆ¤ÍUöþÙ¶tÔÌ1üÌ0#Ùãø´þ²!$`@1%   ‚‚#‚t%# %Ô<Ä2ü<Ä99999991üÄìÔìî99999990326=467.=4&+532;#"+´yhHb}~aGiy–ø§m>>m§ø–Vͤˆ†¥ÑV¾“Ý×—s¿t–×Ý”XÏy++@ ’’ üì1ÔüÔìÀ9990#"'&'.#"5>32326yKOZq Mg3NJN’S5dJ t]FŠ+é<73 ":?å=6 7=ãîÕ @ d Ô<ì2991/ôÜÄ0!!!3îþõ þõ!Ç#ºú+eþ›“þÇ ˜!F@&‹ yh ‹yh‰ r" -/"üìü<Ô<<Ì221ä2ô<Äì2ôìÆî2ôî0.'>7#&573 8x?@w84xCŽëþïëŽ=uþÀr{~5þô*1ýL0+þô"þà :úÿ9þá!ü„´³™›¹wbð>@  zyhn x Ô<ÄÄü<ÄÄÄ1/Ä2ì2ôìôìî2990.#"!!!!3#535632N9‚EjcPþ°áüëÆÆáèS޶þî)+…°áþ²þüNáÅøº°^T /c@8  *( -'! ) -0)'!$ * ( $0ÔÄ2ÌÔÄ2Ì9991ÔÄ2ÌÔÄ2Ì99904&#"3267'#"&''7.5467'7>32;dJIeeIJd¬ª¬ƒª$P0'T-ªª¬ƒ¦)S.'QƒIccIJffqªª)S,/Q$ªƒ¬¨ª*S)/Q&ªƒ¬ÉÕu@<%  d    ÔÄÄ2üÄ2Ä9991/ä2Ô<Ì2Ü<Ì290KSXÉÉÉÉY"! !3!!!!!5!'!53>"#>þïàþ¾V˜þdþÙþd˜Vþ¾àÕý¨Xýð»—½þJ¶½—»öþ¢Ù˜@ Ô<Ì21ÔÌÔÌ0##Ùããã˜ý öý öªÿ=%ð >y@C/0*1 06 'f&*f# f f54%.#"#"&'532654/$5467.5463271aÈ71þ÷|U„6LUË Öv_fFAѺY¬UU¢IMRÖ þÄhaG@ЬJX$E(6X`$E+QŠlá:4Ki neY€/2{Q“§å95Fsª¬^‹!2xRެ-;¤1@ ÔÜÔÌ1Ô<Ì203#%3#¸ììþuìì1ööö}ÑN1ID@%  ˜ —–>˜—–2•>•&JDB C8B ,/ÆþåÄ2îÎ1ÔìÔüôüäõþäÎÎ0.#"3267#"&546322#"&'.5467>"3267>54&'.P4[0akjb5`*7j2©ÊÊ©7iµÚZZ\[[[Ú~}Ú[[[\ZZÚ~cªIGHHGG¬cd¬FHHHHH©¨h__g¨»›œº$ZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZGIG¬ebªHHIIHHªbe¬GIG¬Õð %)d@4 $#(£&$£&£¢£¤ n*&(' #*ÔìÌÔì22ÀÀ9991ôäìôìÍîÔÖÎî999905#"326#"&546;54&#"5>32#!!fmd=6Vn2yN‚—¹¼[[R@I”L½²Áþ°ýP4818g 96‰u†…11!"¼¬·þ@wªw# -@   U U Ôü<Ôì2991Ô<Ì2990 5 5þìþ+þëþ+#îÝÝ‰îÝÝXjyƒ@ v üüì1ÔÄì0!#!X!îü̓ýç,-¼¤ßµÔÌ1ÔÌ0!!-wý‰ßþÝ}ÑN 4L\@3-*+'0!–5•2+–A• M*',$0-!1E3+E$CGB3C;B/ÆþåþõîÄî29991ÔÄüô<ÄþõÎÎ99902#"&'.5467>#32654&'2#'.'##%"3267>54&'.hÚZZ\[[[Ú~}Ú[[[\ZZÚb@@998(…NG&7O¬?9)¤cªIGHHGH«cc¬GHHHHH©NZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZþb¤((+)oXZAU 81¦…:/ðq®GIG¬ebªJGHHGJªbe¬GIG-X¤µÔÌ1ÔÌ0!!-wý‰¼V´ð@” ”n@@ÔìÔì1ôìÔì02#"&546"32654&hCz//12.0zD¾ÀHdbHHdcð30/xDBz./3¾ŽÁ¢dHHbcGHdXy *@v  v   Ô<Ä2ü<Ä21/ìÔ<Äü<Ä0!!#!5!!!ßšþfíþfšþf!ûßþžìþžbìbûêð2@²²´³ ²±^ÔÄÔìÀÀ91ôììôìî90!!56754&#"5>32ô¸ýf3Z:WK8‡MKŽB©»þ6-‘+KO4<#"¤}o~þè*Ãð(D@&² ²´#² ² ´³ ²±)^&^ )ÔÄÄÔìÔì91ôììôìÆîöîî90#532654&#"5>32#"&'532654&FooJUOFEŠDE‹C¢¸ibouÁ¸K–JC˜PU_b’2,-3˜teI^p\yš@8=DÕî f"¶ƒÔÌ1ôK° TK°T[X¹@8YÌ0!#ðþÅfþˆ®þT¤` G@'  hr‘ !    75!üì2üìÄ991ä2äô<ü<Ä990!3265!3267#"&'#"&'®RRQP!+J#H[%nF;SþT ýXrsrs¨üøG> ÙKSNP/0þFÿ;)Õ "@d ÔÔÜÔÌ91Ä2ôÌ90!###.54$!¿¾¼ÍÝÕùfùùNÛ²¾èÁ·w Ôì1Ôì0!!ÁMþ³þ“ÿÿoþo3­9œÁß )@² ²² ³± ^ ÔÄÄüÄ1ôììÔìî2035733!9âÜÞÂâýx-+•)ýN‘¬çð0@££ ¤£n  ÔìÔì991ôìôìÜì0!!4632#"&"32654&%°ýPŦ¦Äç¦ÅkIUUIIUUVª¨½ßÞ¾½Ýݨ~mm}}mm~Á\# -@   U UÔ<üÔ<ì991Ô<Ì29905-5-ÁÕþ+þìÆÕþ+þë#þwƒþvîÝÝîþwƒþvîÝÝÿÿ/þòw{'=¸üV'{þþœ òÿÿ/þòw{'{þþœ& òtÉüVÿÿ/þòwŒ'=¸üV'uÿœ ò°ÿåîÕ%x@<   %%  fhrd&# !  &Ô<ü<ÔÔì9999991äôÄìÞÅî9990KSXÉ9É9Y"!!!3267#"&546?>54765þõ þõ >PZ=-\\SµabÉeÉåD^XB&ºþošcMY;Q,CDGFþô89¼¥Lƒ\V@T?ÿÿ!°k&$ ïu@ ]1ÿÿ!°k&$ íu@ ]1ÿÿ!°k&$ ðu´  +@ ]1ÿÿ!°m&$ îu´$ +@O$@]1ÿÿ!°k&$ ìu ´  +@ € p? 0/   ]1!°m!ý@M ! !%h  i ~!   "üìÔÌÔÎ999991/<îæÖÎî9990KSXÉÉÉÉÉÉÉÉY"²]@\ !000 0!oŸ¯¯¼¸¸¼¼¿¿¿¼¿  !!' )!;44 ;!t |!‚ !°°¿¿¿°µ º!]] !!!.54632%32654&#"!/þÙ\þuZþÙ,*§uv§*þŠN57MN65Nƒ‹úsqþ%a=u¨¨u>_6MM66MMþAýœÕc@3  %p hpdp~€  % /ÔÄÄÔ<ì291/<äììôì2îî0KSXÉÉÉÉY"!!!!!!#3‰þÝþü6ýÌþæVøf³”ãÕþüþÉþüþnþüjþ–Õþüý…{ÿÿ˜þo9ð&­u&ÿÿ¨Jk&( ïuÿÿ¨Jk&( íuÿÿ¨Jk&( ðuÿÿ¨Jk&( ìuÿÿ¬%k&, ïuÿÿ¬%k&, íuÿÿ¬%k&, ðu´+1ÿÿ¬%k&, ìu´+K° SK°QZX»@ÿÀ88Y1uÕ 9@hp dp  ! "/þ<î2þî9991/Æ2îöîî203#326&#! )#53°ÓÓP®””®þ‰<nBþ¾þ’þĉ‰ËþºíþrÛÚ þ£þtþsþ¡˜íÿÿwXm&1 îu´#+@O#@]1ÿÿ\ÿãuk&2 ïu@]1ÿÿ\ÿãuk&2 íu@]1ÿÿ\ÿãuk&2 ðu´ +@]1ÿÿ\ÿãum&2 îu´1" +@O1@"]1ÿÿ\ÿãuk&2 ìu´ +1w“Xs 0@   ü<Ì291Ô<Ì290  ' 7 Xþ¶J¨þ¶þ¹¨Jþ¶¨GJËþ¸þ¶¦Hþ¸¦JH¨þ¸HÿúÿÁÅ )s@> )*  '$ ($p$ pn$r*(! '!)!!!'*üìüì.À99999991äôìîÀÀ999999903264&'.#".5!27!"&''ÃU8rh9N4pií## g¦=q¢ž''þ÷þüjª@x¢b9=ñ >5 33ðþýþ¬Xãˆ>=¢sß^ïþ‚þxCB§rÿÿjÿãfk&8 ïu@]1ÿÿjÿãfk&8 íu@]1ÿÿjÿãfk&8 ðu´ +@]1ÿÿjÿãfk&8 ìu´ +1ÿÿÉk&< íu¢{Õ0@hh d !  üì22üì99991/ôÔìÔì032654&#!3 !#!Éy’tu‘þ`'n5þîþÎnþÙöþIbxydßîÛøïÙþ´ÿã–2X@2)#,2&‹h&h/tr*  #A  ) .+/3üìüÄÄîôÎÎ99991/äþîîÖî990#"&'532654'&/.5467.#"!4632 }t aRPàÂ=|C:s6IUsV;<”‰ b\^`þÛñæßÕ#[Q@Y J>™^§Àú C:HX D0M~«JIebûžfÓÛíöÿÿ^ÿãTf&DCÿÿ^ÿãTf&Dvÿÿ^ÿãTf&Dg @?&/&]1ÿÿ^ÿãT9&Dwÿÿ^ÿãT1&Djÿÿ^ÿãT&Duÿã¤{ Aµ@K. 4, ;5#A ‹ ggy 4‹5ŠŽ1g8g,…>8‰& rB#;-, 4T)-RBÔ<üÄÄÔìÌÎÅ99991ä2ä2ôìî2îöîæî2îî999990@'33040536G3G4G5G6YYYYW3W6Ï ÏÏÏÏA]5#"326554&#"!3267#"&'#"&546;54&#"5>32>32éIWY@=?=Ú2??2Ãþ=d_A=BîþÑÿÿ¨þo%}&­HFÿÿ\ÿã}f&HC'ÿÿ\ÿã}f&Hv'ÿÿ\ÿã}f&Hg' @?/]1ÿÿ\ÿã}1&Hj'ÿÿf&óCÿÿf&óvÿÿf&ógÿÿ1&ójbÿãf(‹@N (((#$%$"!"%%$%('%"! #&#h hr#t)'& !#(%" .))üìüì99991ìÄôìîÀ9990KSXÉÉÉ9ÉY".#"32654&#"432''%'!%+1b0izwhms udVþðòìþêÙ(? þÈ7ž%\)Bþëø‘}ž²µ­-bЉý—þìþÈ2ì ÛwumÊt{uÿÿ¬/9&Qwÿÿbÿãoh&†üRÿÿbÿãog&‡Rÿÿbÿãog&gR´+@]1ÿÿbÿão&wßR´1 ++1ÿÿbÿão&jèR´ +1BV® $@v  Ô<ÄÜ<Ä1ÔìÔÌÕÎ0!!!!!!Í5þË5þËþuKûµ®þËþþˤîÿ‹²Ó +s@>+,  )*&h&h‰&r,+,* # )#.),üìüìÀ999999991äôìîÀÀ99999990 32654&.#".5327#"&''?þ¤B&hxþJZ>'jyÏ--íU“C”‹ ./þçîS—C—‹£þc»£:Å›¹¥"4þîI²m=+-°y¼L¸kþñþÃ--²wÿÿ ÿã%f&XCÿÿ ÿã%f&Xvÿÿ ÿã%f&Xg´ +@]1ÿÿ ÿã%1&Xj´ +1ÿÿ;þX˜f&\v–þVw9@hhr‰‘t 20üì22üì1ìääôìî990%!!>32#"&4&#"326ºþÜ$.–eÀÔ×ÇZbl__nn__lžý¸¾ý¤abþÌþèþäþÐ]ñ¢¸¸¢¢¸¸ÿÿ;þX˜1&\j,´ +@!¯ €p_PO@?0/ ]1ÿÿ!°N& ù$´ +@ O@/ ]1@]0ÿÿ^ÿãT&ŠDÿÿ!°k&$ ôÿÿ^ÿãTF&DŒÿÿ!þoÍÕ'vc$ÿÿ^þol{'vDÿÿ˜ÿãAk&& í‰uÿÿ¨ÿãpf&Fvfÿÿ˜ÿã}k' ðœu&ÿÿ¨ÿãJf&giFÿÿ˜ÿã9k&& õdÿÿ¨ÿã%1&FKÿÿ˜ÿãjk&& ñ‰uÿÿ¨ÿãGf&Fhfÿÿ‰u}&' ñÿó‡ÿÿZÿã±g ëcÿAnA1G¹@8@/]1ÿÿuÕ’ZÿãÍ$F@&"   "hhr‰t   2)%üìü<Äü<Ä1/ìäôìîÕ<Î2990!5!5!3#!5#"3232654&#"þÎ2$’’þÜ/•eÀÔ×ÇZþžl__nn__lÁ"½tt½û¦ab40]þ¢¸¸¢¢¸¸ÿÿ¨JN& ù(@]0ÿÿ\ÿã}&Š'Hÿÿ¨Jk&( ôÿÿ\ÿã}F&HŒ'ÿÿ¨Jk&( õÿÿ\ÿã}1&H'ÿÿ¨þoKÕ'vá(ÿÿ\þo}{'vçHÿÿ¨Jk&( ñ5uÿÿ\ÿã}k&Hh @?/]1ÿÿuÿãjk' ðyu*ÿÿbþXHf&gìJÿÿuÿãjk&* ô2ÿÿbþXHF&JŒÿÿuÿãjk&* õ2ÿÿbþXH1&Jÿÿuþjð'¬¦ *ÿÿbþXH'˜dJ@?]0ÿÿ‰Hk' ðu+´ +1ÿÿÿÃ/k' ðþÓuK ´+1K° QX¹@8Y@ŸO]0ÎÕ>@   p€d    "ü<Ìì22ü<ì22Ì1/<ä2ôìÜ<<Ì220!!5!3#!!!#53!5‰'q&‡‡þÚþþÙ††'qÕààà¤û¯˜ýhQ¤¤µµ /B@" h‰t 7  5ü<Ìü<<Ìüì1/<ìôìÜ<Ì299990!4&#"!#535!23!>32/þÝENP--þÝ  #‹Šþë–jŸQQ×ý)ªyhGF}ýö¤zz¤þÂ]fijÿÿ¬%m' îu,´$ #+1ÿÿ9&wó@]1ÿÿ¬%N& ù,´+@/ ]1@]0ÿÿ&Šóÿÿ¬%k&, ôÿÿF&óŒÿÿ¬þo%Õ&,vBÿÿþo&Lvgÿÿ¬%k&, õ` @ ÔÄÄüÄ1/ì2ôì0!!!5!!ÝDlümþá`üáážÿ÷ÿæÏØD@# op p dpr ! ÔÄ2ÜÄ2ÔÌÄÄ1/äì2ô<ì22ìôì990%32765!!#"&!#3!3>?ŽHU'(þøßSTÀE—ýl9¾¾ýǾMVX\::òü þïuv4·þüü3þüÍ þNÑ G@$‘   s   ! Ô<ÄÄÜ<ÄÔ<Ì2ÄÄ1/ì2ì2ô<ì2Ì2ôì0%#!53265!5!5!!!!!5!#3#ѵÒþÄêbRþ×NþÛ%ûo•ÿý6ÿÉÉÌÌ!ü×án„TáËVýéüáážþªÿÿmÿã!k' ð@u-´+1ÿÿþXáf&gæÿÿuþ0ÉÕ&¬r(.ÿÿ®þ0®'¬€(N®®` ?@  %  .5 üìì291/<ä290KSXÉÉY"!! !!®%`cþXÀþ¼þÍdþÛ`þƒ}þ^ýB `þTÿÿál' ív/ÿÿZFl' ívOK° QX¹@8Y@ŸO]0ÿÿáþ0Õ'¬‚(/ÿÿZþ0F&¬(OÿÿáÕ' ëDÿo/ÿÿZ¦' ëkÿ®Oÿÿá’Õ'y„¬/ÿÿZÇ'y¹¬O @/]1ÿÙÕ 7@  pd    ü<ìì2.9991/äì903'%!%!á—q'pþ}woš¼ÕýøÂ™þïþþü%\D@%  t  Ô<Äü<Ä99991/ìüì99905'!5!%;!"&šþïduþÙK'gþrSbéþÅѶӦâÓáþÑ þèþ‹„náØÿÿwXl' ív1ÿÿ¬/m&vþQÿÿwþ0XÕ&¬:(1ÿÿ¬þ0/{&¬@(QÿÿwXk&1 ñ)uÿÿ¬/f&Qh$ÿÿÿ’Î'QŸaýâjþVeò2@ pndp ôì2üìÄ1/Ôìäôì90+532654&#"!!>32e\\Ðy%dR^jm;>þÙ'%³~½Á®üŒþönlãn…ËoKN‚ü4Õð€þݬþX/{5@ h‰h 75 üì2üìÄ1/Ôìäôì99990+532654'&#"!!>32/[ZÒy'dR"#NO.-þÝ#–jŸQQ×ýTüklán„z45GG~ý`¨]fijÿÿ\ÿãuN& ù2´+@ O@/ ]1@]0ÿÿbÿão&ŠR´+@/ ]1ÿÿ\ÿãuk&2 ôÿÿbÿãoF&RŒÿÿ\ÿãuk&2 öÿÿbÿãof&R‘DÁÕ>@!p  pdp €%  üìüÄÄÔ<î99991/æî2öî2î0! )!!!";Áý¸þ¼ñòC=þ´.þÒþÏ{\[|4þü7²´8þüþÉþüþnͲþÊþÉ®Íÿãº{ )5o@1("!% !g‹y3g Ž-%g‰ r6*0T!*R(6Ô<üÄÔÄÌî991ä2ô<ì2ìî2öîî999990@ÏÏÏ Ï!Ï"Ï(Ï)]!3267#"&'#"32>32'54&#"4&#"326ºþ>c_>2ð:MN;;NM:ß—;:ô,*JJMG8;;Bÿÿjÿãfm' îu8´- #+@O@ ]1ÿÿ ÿã%9&wX´* +1ÿÿjÿãfN& ù8´+@ O@/ ]1@]0ÿÿ ÿã%&ŠX´+@/ ]1ÿÿjÿãfk&8 ôÿÿ ÿã%F&XŒÿÿjÿãfj&8uO @]0ÿÿ ÿã%&Xuÿÿjÿãfk&8 öÿÿ ÿã=f&X‘ÿÿjþ_fÕ&8vôðÿÿ þoÌ`&XvbÿÿÑr' ð|:´+1ÿÿÑm&gZ´+1ÿÿÉr' ð|<´ +1ÿÿ;þX˜m&g\´+@]1ÿÿÉk&< ìu(´ +@ po `_ PO @? 0/  ]1ÿÿs‰l' ív=ÿÿ¢9m&vþ]ÿÿs‰k&= õ2ÿÿ¢91&]ÿÿs‰k&= ñuÿÿ¢9f&]h®;*@  t Ô<ÄüÄ991/äüìì90)!5!546;#"ãþÛþð¨äñåB/áNÊœá0A ÿãw >32#"&'!#535!!!&"2º6ZÇ×ÔÀe–.þÜŠŠ$*þÖ˜l¾nn¾Á]]þÐþäþèþÌba¦ö¤zz¤ü•D¸¸þ¼¸È×(?@$h hdh €  !$'+ÔÜÔ9ì2ÜìÔì91/ììôìî9032654&#3264&#%!2)"#546r-qvˆ--p_anþíùû”«­þüþÛþ¶B1⨦þF`wyjFþ¥P¸Së½¼¢ İØÂÀ/B;Êœÿÿ¢{ÕH–ÿãw"'!!!632 &"2ãÍ\þÜþl³ÊlhÔQl¾nn¾æÑþ~ºœ–þæþèþ̨D¸¸þ¼¸+¦Õ%3264&+'3 !ôy‘uu‘yþÙ¢Én5þñþËøbòbýR¦†©ýÑÜþÜ-ÿã¤&"2>32#"&'!'l¾nn¾þÔ6ZÇ×ÔÀe–.þÜ–º‹D¸¸þ¼¸î]]þÐþäþèþÌba¦¦†è˜ÿã9ð/@! Ü<ôì1@ op opn räôìôìîöî0>3 !"&'3254#"˜DœU.>þÂþÒUšFLL¢¥¥¢LL¨$$þrþ‡þˆþr$$HFAüýAF˜ÿãþk %27# %6326;#"&#"”“Œ©þÒþÂE¨0-Xäa\1)’•¢¥!ì‡þ¸HŽx#¤@á7.8‡þÿýþ"¨ÿã#%27# !2676;#"&#"ú¨ƒ”ÂþýþÜ&HZÒy'_.#…¦«K3º3ÓsþóV89×Vlá7+þôrUŠþô?ÿÿuÕ’ÿä¶Õ"0#547676; !#26& ÿ0KˆìnBþ¾þ’ì'®””¶&4M–Fmþ£þtþsþ¡Ëü?ÛÚ}‡Ö#";! $545676?6%3!jĈvqÄýe¸þþÛþüH+ŒÄýe¦jyw`êú+ÂØ ®Q2“[–ÿãw"7632!5!!526&"*ÀÔhlʳlþþÜ\þÄl¾nn¾4–œº‚Ñùì¦Ãìþ¼¸¸D¸aþ=n{%/%#"'&'&'532?654#"32%26&#"‰‘~}àcTy `&ZQh:#£îþçîíŒ?þÅixxijxx5?—‡NM ×",f==þÃþñþù¦Kš¹J¹¹þ¶¹¨JÕ +@   üÄÄüì21@ p pdp€/ììôìî0!!!!!Jü^{ýÁ?ý…Õú+‡B\ÿãuð=@ ! !'ôìÄôì991@ p p npprôìÔîôôÔî9905!54&#">3 ! %3267\änxLLFšU þ÷þüþýþ÷9 iad_é_¾ÜAFH$$þxþþ‚þxˆÙ¯©°¨}ÿãLð(>@  !!&)üìÔìÔÄÄ1@ pn)p€) p#r)ôìÔìôì9ôìÔì0.54$32.#";#"3267# $546Řì\ÈggÀTnyynžž€ŒŒxxÚ^dÛqþ÷þê¨%©…µÎ!þô(*]SOWþü}s^o1/þî$&äÙ¢ÇlþXeÕ!!!+5276=!eýäãþSZÒVh)%CÑþ¾þüþ}+Ødlá72‰}-[þXv!!#!532765!5!546;#&Xþ¨T\ÑþÄêc()þð¨äñåoÂbáüÙclá78ƒTáNÊœá&ÿã«k(%27#5!# %632676;#"'&# ’]*Ê̬ëþÞþÄ@«<< ZÒa\1)}¿þÅÔ.ì"øýT”“s¦C  lá7.Rþ:þdO þÞ±Õ '! !%3254h¹þrACþrÐüØžˆ‹þüÛþáý%þ‚þvþñ ]¯þõu~‚• ÿþÅ*'&'&'&#"#3>32?67653Åhb YˆDG?@$$èèxUAA X+1è9ýžšy}Û V*4GF}ýý¤]fijÑþõ« 4 T^ˆx¬hÕ0!!!#"'&Öþ×yþ×&&fºêÎlnÎþüýŽ.-þüvx¬%Õ!!3#!!!#53¬yþ×÷÷)ü‡)÷÷Ñþüþ ÀþêþüÀ÷¾Õ!!!676&ü|èþ¸þžƒþÙ'­†‚@ŒMD6$›üw ¦þÕý²GÝq3°= ®®476;#"3! !!®[ZÒy'b+)`cþXÀþ¼þÍdþÛAúmlá75†þ¢}þ^ýB `þTÄZF3+;!"&=#53!5!²¸¸ RbêþÄѶ¨¨þ×NñÀ^„náØû^ÀBáüÝP! !''7!gæþ×ÿàþ×kÒdê“)Nî £ûUTý¬ÅE•¢¦W¶RÿåƒÕ%#"&326532653#5"&#!fJ‘oð&d(í(d&ðÕnˆppGDÈ<ìû¼}TV{Dû¼{VT}Dú+tBMQþV³Õ!+532765!!!Õ ”T–0<;+< þÆþ^þäZ4áKЬûÃ=ú+=ûìþV/{!4&#"!!>32/þÝENO[þÝ#–jŸ¢×ûTziŽ~ý`¨]fÓ\ÿãuð  &5%63 &'&#"!3276hþn-]O` þ”I|:3U”- «þQ )4qr4(‡ ßtxþxþý€p¬ÅODÖ2PþüÈ_xx]ÿÿÿãÍ'¡œ„2¨ÿÿ ÿãÈ'¡—R§ÿã´ð &5%6327!#327&#"õþµd(ECOÑu]êrxþSU+Cg//g&‡ ßq›€ú+p ü×Äþ¡i5x yôhþVÑ{327!##""327&훀ƒ꓌°ííixxi,<< =|eùòÎrýПª¹þ¶¹]]½Õ3264&#"#5476763! !#!q‘uu‘þÆ ÿ0Kˆ/5þñþËþÙÝþJbòb'&4M–FmÜþÜýÑ–þVw$&"2"'!#776;#"3632Rl¾nn¾ ´kþÜ QZÒy'_.#\ÍÀÔçQD¸¸þ¼¸ô»ý¸Ñalá7+‰ÃþÌþèþWy*…ÿÑÕ!&5&+!!3 3264&#',!0þ¼´Ok^þÙ'ƒ û–ýø‹yihzÓ _ýçy+©þ ÕîÌæš¶ þi_Ú^ÿãVð(03267# $546?>54&#">32Ù‘LPxmlÝvhßoþòþõª´„Srk`Ä_eÎgãž7eCYcRTþÏ45ßâ¦ÚB01Q>PVFC ./èËž»¬ÿã+{'>323267#"&546?654&#"øY½_ÔꚨQKjg^ÉamÔeäã• T ÖdbX¯Q=´¢ˆ¢&"<89<:7ÿ##­­©&2P8954ÿÿbxÕé;þXv&(;#"&5# %53232#%&'&'32'3@åñ䨇þÌ.2Ñ\K ‰t8¨þG (`@iHsÛûÏ@áœÊ lY¡ÒÒ265L†oþX1ž !!;#+532767&'&5!5!²þIUáUZÒy'b+"ÕPYþâžþÂáýîKA¶+Öflá7,eHQÚá>w×"#5476762'!!†,ÿ0!Z{i0ñþ…þÙÕ!H "M›AMþþû-Óo147676;#"!!;#"&5!5[R°y'b+)þIUáöü²þâ`Ûmb á75gáýîKAá¡ÚáZþVwÕ!!!!;#"&Õþ…þ…Tb'~Ò­ÓþþûV†láÐÿÿÿãÌ'¡›„8›ÿÿÿãÊ'¡˜XÿhZw´##"47#5!32654&'!wîxlþéëíþælxî×QNpgfqPRÙámþñ¿þÈþ’n8¿mÓþôOê§ÖèèÖ¦íM uRÕ'53!"'&5!276%¢ëxlŒ‡þßýiB'&&fš-ÃH˜9mþñ¿þÈ·²°n°üŽ.-øXÎÕ!!776&¥ÎþÙþS.a“)†©=?51þJý´L‰ý¨Ó@\M×þX´` +5326?!76& þêkëòwZT+þu%óp[RSÛ4;^0"˜üïþÑß=o<Aý)_;;& Ø#O9s‰Õ!3!!!5#53!‰òþ•ãþ—ÃÂûêÇ\ßUýwÕôýùÀþêþüô&À÷4`!3!!!57#5!!µã›þ»ÀMüi·nìýÊ`åþýÂÛÛåÑ  ÿäÇÕ"# '&5!327654'&+5!!ÇñÚþ®ƒ>aEbë)à"'ÿtýÊòþo‘NkIQ©þçm?t€ßk9)’³Úqôþo dn ÿäÇÕ %2765!! &54767675!!# J1>ƒþ®þ6n GOoN‘þoòýÊtÿþ׊<êN5J߀tPcfq! ‘ôþüþÚÏ‹.nþHc`!#"32767# '&54767675!!š¨“KK’Š]``afhhgþÚ™™GMqN‘þyýÊÄÚ45fcj6þ×%tsÞfq! ÇåÛƒþVI`2327670#"'&5476%767654'&+!5!oNt\Yå54&#">323+²uüL m¢T;KByoOÅkkÍ^í;H u÷5HþüüªtÀAV…Adm?<')Ý¿Xš^ÀH ÿäÇÕ"#!!!2! '&5!32654'&+DŽ¢ý…tKQG™šþÛþ®ƒ>OJoŠ’KK“f†OþüþŸ@tfÞstt€ß_95jcf54nþHc` 2!"'&'32654'&+!!lˆxiGG™šþÛghhf_Ä[Š’KK“¨YþÄ0,fgŽÞst%)58jcf54vÑþ5’ÿâ?ž%#"'&'327654'&+#5;5!3®ª[Œw¼Ù£IIDFFHH¡Y43NÃTÚÖBé61^‘ç×…Ò#*+rB`GLr!¦¦ÂQþVr{!!6763254'&#"ŒþÅ;LL\ª´DPý¡22nN„þÚ ¥o%,p‹þ\ÌN¤qBAËãîÕ!!ã þõÕú+ÿÿþÓÕ'‚å‚ÿIˆÕ!!!!!!!5!5!5!ã šþfšþfþõþfšþfšÕþ¥ëÜíþ:ÆíÜëÿÿãîÕÿÿ!°k&$ ñuÿÿ^ÿãTf&Dhÿÿ¬%k&, ñuÿÿf&óhÿÿ\ÿãuk&2 ñuÿÿbÿãof&Rhÿÿjÿãfk&8 ñuÿÿ ÿã%f&Xhÿÿjÿãfá' ìõ&8jÍÿÿ ÿã%O'q;¾ÿÿjÿãf&8' ìõ íÿÿ ÿã%'‡Ÿ¾ÿÿjÿãf&8' ìõ ñÿÿ ÿã%'’Ÿ¾ÿÿjÿãf&8' ìõ ïÿÿ ÿã%'†Ÿ¾ÿÿ\ÿã}{ÿÿÿ!°á' ì'jÍ$ÿÿ^ÿãTO'q;¦ÿÿ!°á& õ &$jÍÿÿ^ÿãTO&D&q;ÿÿœN' ùˆÿÿÿã¤&Ѝÿÿuÿãjk' ñyu*ÿÿbþXHf&hìJÿÿuÉk' ñu.ÿÿ®®k' ñuNÿÿ\þ_uð&vôð2ÿÿbþ_o{&vôðRÿÿ\þ_uN& ù¡ÿÿbþ_o&Š¢ÿÿ ÿäÇk' ñuyÿÿnþHcf&h8ÿÿþXòk&hæÿÿuÿãjk' íyu*ÿÿbþXHf&vìJÿã¸Õ333327653#"5##ûÞû8EûÎÎÞûÕýÇ9üRJ˜%2:8}¿þ‹þÐþì0qýhÿÿwXk' ïu1ÿÿ¬/h&†üQÿÿœk' íÜuˆÿÿÿã¤f&v¨ÿÿÿúÿÁÅk&š íuÿÿÿ‹²g&º‡ÿÿ!°k&$ ÷ÿÿ^ÿãTf&D•ÿÿ!°k&$ óÿÿ^ÿãTF&D—ÿÿoJk&( ÷ÿÿ\ÿã}f&H•'ÿÿ¨Jk&( óÿÿ\ÿã}F&H—'ÿÿo%k&, ÷ÿÿŽf&ó•ÿÿ¬%k&, óÿÿF&ó—ÿÿ\ÿãuk&2 ÷ÿÿbÿãof&R•ÿÿ\ÿãuk&2 óÿÿbÿãoF&R—ÿÿ=Ñk&5 ÷Îÿÿòf&U•dÿÿ…Ñk&5 óÎÿÿ#F&U—dÿÿjÿãfk&8 ÷ÿÿŽÿã%f&X•ÿÿjÿãfk&8 óÿÿ ÿã%F&X—ÿÿþVð&¬6ÿÿ¬þ+{&¬VÿÿZþwÕ&¬7ÿÿoþ1ž&¬gW6þR›ð2 >54.#"57>54.#"632]•©X¨þéþ£ñL‹šqKF_38@ØêQv;!2QP(›êðëvÂzS"¢$Îyh®’‡v@.5NSk7@])Uþ_!OBN-6O'œ¤8Xqj1þánþOc{05>54&#"57>54.#"5632EUx9ü Eƒ|ŠfCxK48ÂÓKj5.IG$‹ÓÍ÷g¥hF’ÍIVK&þhÀå%+?DV-JVEÎMB5@!,@ ~Ï…*CZ\0q¶ÿÿ‰Hk' ñu+ÿÿ¬/k' ñuKjþVeò!4&#"!!>32eþÚ^jm;>þÙ'%³~½Á®ú¨¡oKN‚ü4Õð€þÝÿtÉ%-%724#"'632#"'#67&'#"32!26&"¾-h*4ŸX|šõu+D=$>L±Ô×µ<0$ýÓDxEExØ… êðþ‡ yaGyl$>40/-ü»þ¼¸¸D¸sþX‰Õ!!#+532767!5!‰òýLÂSZÒy'b+"ýŸýwÕôü#þüØdlá7,dôÝ¢þX9`!!#+532767!5!ºý³MSZÒy'b+"ýNýÊ`åý`ÛØdlá7,då ÿÿ!°k&$ õÿÿ^ÿãT1&Dÿÿ¨þoJÕ&(­2ÿÿ\þo}{&H­2ÿÿ\ÿãuá' ì'jÍ2ÿÿbÿãoO'q;¸ÿÿ\ÿãuá&2' îjÍÿÿbÿãoO'q;·ÿÿ\ÿãuk&2 õÿÿbÿão1&Rÿÿ\ÿãuá& õ 'jÍ2ÿÿbÿãoO'q;ÞÿÿÉN& ù<ÿÿ;þX˜&Š\1ÿt  %724#"7632#"'#67&'&5!5!•-h*4áBX|šõu*‘ J[þ×N)Ø…šêðþ‡ y1BXlû}áû¢„7&%ÿt¬{/%724#"7632#"'#67&'&=4'&#"!!67632Ö$R!)¤$Fd{Ä]!u ~;I?#þÝ#0T·Ø…`jêðþ‡ y1BXlûôƒ+5GQtý`l3!3ÓÑþߨoÿt1ž$%724#"'7632#"'#67&'&5!5!!!!V$S!*Õ2%Fc{Ä^"t ~;Iþâ%þØ…^¨jêðþ‡ y1BXlûÉá>þÂáþXR` ,@  ‘  ÔìÄÄ991äôìî990%#!53265!5!RµÒþÄêbRþ×N+ü×án„Táÿãº-26&"&"2>32#"&'#5#"323åK…MM…¼K…MM…Ò%e?‹–”†Gi Í!hG†”–‹?d&ÍÏþ¼¸¸D¸þD¸¸þ¼¸î]]þÐþäþèþÌba¦¦ab40]]SþJº{-&"226&"#"3253>32#"&'#ìK…MM…ýDK…MM…Ò&d?‹–”†Gi Í!hG†”–‹?e%ÍD¸¸þ¼¸üþ¼¸¸D¸ý]]04ba¦¦abþÌþèþäþÐ]]ý­ÿúÿÁÅ! !!#'#7'7'3'´i<Ê¢þ×þÙ\þ BC-Z!,UK2bs{ÕÝsþ[üq^þí??y?ÜþRµƒÿúÿÁÅ( &#"# ''&5!27&'3267Ì}¢¥jFšUþן ¢Ø:>.UN$!7¢ŒýúR¢LLÇþÿýý_$$Áãr1£âyŽ MsÆ~ý"&€AFÿ‹²Ó''7&5!27&'3267#"'&#"¤‹Î?&ZS j‹&*þ=MU”BJªbéyB šuwõ‚¶9 ~y§˜!ýêZ9:þó++~­~¶¨µÕ !3#!!#5(ôôvübúÚûýÀþêþüÀ ÿÁ×!'!!7#7#ÕþÙ¢Éþ…¬/¢`4þ¹TTbþ_r‡BsˆIþ1üü\w¬þ+{1.#"#"';# /&'32654&/.54632ßQ¯XbdÖ T •ãä}<Ÿ‘‰þè‚° „aÉ^gjKQ¨šêÔ_½=ÿ4598P2&©­­¥PÛ­é s7:<98<"&¢ˆ¢´¢þ9`!;# /!ºýj3-°<Ÿ«£þè‚°AiNýÊ`åý);éPÛ­éVå ´Õ$"#"#5476767637$!!!264'&#ÊN+ÿ0!KŠ0D›š˜þÏþãþÙVpz==p½$0 "M›B?€~êëýýúmÈ66‡×'!2)#533264&#32654&+3}áùû”«­þüþÛþ}}Äp_anÄÄqvˆÄé×½¼¢ İØÂRí­þ¥P¸Süff`wyjgíÿã¼Õ53!!!3#! '&)265U'®'VVvyþôþözwÕþRrÊrÀûýûýÀþÚ‡ŠŠ‡&=pp9˜Õ !!!iþùþ×c™cþ×ßû!Õú+ÑÕ!! !&5&+!#533264&#Äk û–,!0þ¼´OkþÙ¯¯'LyihzÕÌæš¶ _ýçy+©ý²Nø—þi_Ú^À{.#"!!!#53!>320M]‹& zþ‚þÛcc%+²w&6ÂþJ¶Âè®`inÿãd{ ,27654'&#"!67632!#32767# &¤@B.,Nt@@þÞ"6RTd¾Ö€~þöÌ44dhccj`ÈpþîÜP**fL--XWq}J((ʵÄ^]1G%$:ú(&ÞxÿãY{5!!5#"763226&"5$þÜ/JKeÀÔlkÇZHGþžl¾nn¾Ážû¡¦a114˜˜/.þ±þ¼¸¸D¸xÿãY{%!!67632#"'&&"2œþÜ$/KJeÀÔklÇZGHbl¾nn¾ž_¦a11þÌþèþ䘘/.OD¸¸þ¼¸–ÿãw $9@h  hr‰!t2! 0%üì22Ä99ôì1/üìäôÄìÆî04&#"326>32#"&'!463!#"Rl__nn__lþh6ZÇ×ÔÀe–.þܵÒ<êbS-¢¸¸¢¢¸¸6]]þÐþäþèþÌba¦@ü×án„¬ÿã)}/@7 Ü<ôì1@ ‹ yh ‹yh‰ räôìôìîöî0>3 !"&'32654&#"¬Jªb$þÚþýZ§S@™RššU”B'++þÈþìþëþÇ*, 7;¶¨¨´9:¢ÿs/}-%32'&#"763!"'"''47&'&76!2&'&#"–96“ƒSÊg©þÅfÈQ=’““ZSTS@MLRšè9Kµéþ½r]G&Aœœ,þô7¶¨šMþµM$26&"7!;#"'&=#"'&32nV˜XX˜ð"-5a¨HH%<;Q´dbɺG99Ïþ¼¸¸D¸:Sút„nálküa11šš0/.FÿãO#26&"%!5#"32776;#"mV˜XX˜þÖ%xQ¶É˽H99+EH¨a4Ïþ¼¸¸D¸¹ûÀ¦ab40/.]glá75Xÿãy{ 703267!57632!"&&'&#"‡kÄe™šý Љù÷•”þçvÔ’Í <<;\ÿã}{?@ . )ôìÄôì991@ yh ‰Žhrôìôîôôôî9905!5.#">3 #"%3267\÷š™eÄkfÔv)þâ÷ùþí'spex w „x:? **þÓþåþîþÂ'§twzqÿãÊ{ 332767#"'&'&'&#"67632?;#"'&5_þÂ-HN10 øÚÆw@A;hUYY^`___䥖5!Hq;õ ?;:n,Q`þîþÆŸVv»)?!"D0›‚«á7´o[¦•ÿêt(<@!Ž ‹ h ‰)#‹"h&r) "5)üìÔìÔÄÄ1ôìÔìôìÔìôì90467.54632.#";#"3267#"$• ˜‡ûàjvyi•;vvsh——y…††dv†£nàþ÷8y–d‡›×"B6,@ß_B=T/Û$¬fÿêk{(\@!‹ yh#‰) ‹ y hr)& )ÜÄÄÔìÔì1ôüüìÔì9ôüýî0° KTX½)@))ÿÀ848Y´%%]!"&'532654&+532654&#"5>32)˜ªþÄþÙbÑoXÒrqŠ 2·uh‘‡zÀˆyÒ]ñ‘=”p·ì"#(YO5Û6E1>ìž­W‚0ÿê¡{A#"&'5327654'&+5327654'&#"567632?;#"'&5'Cr?@wuÞJœTCNOUH'NI/&‰XK1?@&[R>fZPOE´i>Ÿ–  !HZ<ê0=JJp\[ì"TO ÛE.) ì O.N€«Õ7´o[¦µ$lÿÖey. !27654'&+5327654'&%672'$‰þ÷*F(5:&J„…@*?;9þÁYÆÐon:8‡ƒ<:nmÒÆYþÓ“þ•þ”%?H Û"J7#"·-VW”bLHIGg”VV=ÊLŒþX`%#!53265!5!!5!3#RµÒþÄêbRþéþ×NÊÊ+ü×án„‹ÂáþÂþVÀ ;"32765#"'&54763!3676;#"#!"'&'32765öY1200\Z12;HG]¤lkkl¤'RW|á…*‰ˆþýTONOKHHIABwRR–šOPRR•:ýGb..¢¡úâ¡ Ìrvë..‡ÜýþŽ!6MM¤|þVU`*%#"'&54763)!"'&'3265"3265.=’_©mnnm©.'‹ŒþöVPQQMJJJ‘†Á[f11_[f¾b\¢¡úâ¡ üþŽ!6𤤖šOP¤•:š7_%%#"'&7632&'&#"32767'#5!7]edkòú`YXOQPQP•QPMN'"!øæe2—––•(ì1YX¤¢YY ¨Ýbþaoo ' !!3254óþgþ> þ¨CÂÅCýø¿µ®Nþ‚þ}èñV©#þ´LýþÊ~||¢bÿˆo`%254'!!! 54f-,,†þ­CÂÅCþ§—þ¸þ¯ˆW;HJ9S¾þ´LýßïÌüüÔ§þJ*^!32765!!#"'&§#"#NP--#þÝ–jŸQQ‡×ýVy44GF}ùì\]fij§*!4'&#"!476;#">32*þÝ#"NP--þÝ[ZÒy'dR–jŸQQ×ý)ªy44GF}ý@üklán„ˆ]fij§þV*(%4'&#"!476;#">32+5326#"NP--þÝ[ZÒy'dR–jŸQQSZÒy'dR)y44GF}ý@üklán„ˆ]fijÑý)Üblánjh!!!3#!!5!5!5!!–fþšÞDÊÊlülþêþâþÜþÂÕááÕÂÿý@`!5!#"'&5®þâD&&fºêÍmnáýlŽ.-ävxàjh` !!5!!5!ülülþ”þýbáážááXÿþz*#"';!"'&=&#"567632!5!3276xJHHN6>(*bêþÄÒZ\NŒJNHJRþØNG=FDF+é<„77állûu:?å= áü³le"&#";&;!"&=#&'&!5!!‚;2` 3RbêþÄѶ{¸Ñ@'þ×N 028?Üp„náØûoÏê)báüÌœrþD^%!5!;!"'&œþÖN*(bêþÄÐ\Záú„77állþH·. !;#"&5#5!!#"'&'32654'&+V$þ[=J¯íœ‰ß»œþÛl;S<5ssÜMNNMG“Egm88n~ÄÁþN„náØû`áþLåþ9 !qfÞst%)58jcf54Pÿå`"%#"'&326532653#5"'&!!fJ‘78ð&d(í(d&ðÕ77ˆ88pGDdd<wý1}TV{Ïý1{VT}Ïû tB&')(PþV`"%#"'&326532653#"'&!!fJ‘78ð&d(í(d&ðÕ77ˆ88pGDdd<wý1}TV{Ïý1{VT}ÏùöB&')(PþV{367632+5327654'&#"#4'&#"#367632°!32K’77GJ®c R""13í32ðÕ67DDpðF#"ddþÄý‰Údlá77„¦~)*+-yý1Ïy-+*)~ý1`tD$'R@þF‘{'!54'&'&'&#"+5326=!67632‘þ× &\55ZYªzRB'CKK[ ¦ªýVo›‘77#WV™þÉÜËyvë\‡Üp¤b./îDþF{"4&'&#"!!67632;#"'&5·&'U<5þÙ'CKLZ¡RSUu©Y_Ò-HWK¤ýÙ`¤b./wxâýj†/.ëv€ÄxY` !!!!xƒIþ}þëþ·`ýu‹û ‹ýubÿão{ !7632#"'"!3&'&!#3276bŒíîízi<. ˜% .5!!5#"'&'º0‚L^EE&$þÜ,XZv<::45,,! >&lnû ®`45ºÿå327676765!!5#"'&'º0‚L^EE& $þÜ,XZv<::45,,! >#9/u¶ùî®`45MþV„`%327676765!;#"'&'#=#"'&'M0A@M]FE& %()d'yÒZS+YYw<:945,! >&66nû \67álbÜ)…`45ºþV{.#"!!676320€N\FF&þÚ&*ZXx<994+,,! >&lnüR ®`45ºþV{!.#";#"'&5!676320€N\FF&(*f&xÒZ`&*ZXx<994+,,! >&lnþ%„77álp÷7®`45ˆJ`35!476;#"!ˆXZüöâT%%€áÚQPá! KýîáˆJ`35!4'&+532!ˆ~$$VàöüXZáK !áPQÚýüáhh`+!&'&'&+!! 32?674'&'&'&#À*9 þ ª 4'$þÊlwxHFþX>W) 1 +B- þm WþF`ML­tDC_ö(:% A` "#327654'&'32767!#!!öOO['(('ª%K-+%‘k§322?s99nnìþfêþñ HI ÝGþÂa/0!GHo KJ`©þV({8&'&#"#"';#"'&532654'&/.54632ÜQWXXb22Ö T KJrqä?A)d'yÒZ[ade^gj&%Q¨šêÔ_^_=ÿ48P2&TU­VWS)7álkü7<98"&¢ˆ¢´[þXv!#!53276546;#"T\ÑþÄêc()¨äñåCÙclá78ƒƒÊœá@[þXv!##!53265!5!!5!546;#"3R[ÒþÄêbRþéþ×)¨äñåB/ʶþJÚblán„‹ÂáNÊœá0Aý¶Â[þXv!&'&+532;!"'&³Båñä¨)(cêþÄÒ[TÂ@áœÊû}ƒ87álc;þXv&(%;++5$!346;#""#"6763‹¨8t‰ K\Ñ2þÒ4‡¨äñå@þÒ5Hi@`(‘Ò¡Yl Êœá@úýL56TˆþÂJ`!5!4'&+532!!þ‚~$$VàöüXZþâþÂ>áK !áPQÚýüáþˆþVJž!!;#"'&5!5!Ê€þ€%%TâöüZXþâžþÂáüDK !áPQÚ®á>Xÿãx`!5#"&=#53!!!3)32760þÚ–h ¤RR&:&Hþ‘þÇDNP,%¶þJ¦]fÔÐ/ÂèþèþÂyhF;Uÿ˜|`&327654'&'!##"54767#5!&@+99^_89+@ÉÎLE8’’èçþÜ6>OÎÑELQskŽXWWXŽksTHÅ;…lžþž:÷¢pAÅTÿþ}`$#'&55#53!?27654'&/ÑA;0}}Æo¤[Z¡¡%"%`D=/!D¬;…lžþžyxà:yáþ¦þÆ© 4aXŽksTH¶P`3!! Pdidþ×ïð`û jü–Ñ` !# # #!!Ñõ……Ó„†õÐ…„üüüý`üþ:—676;#"!! ;RSvòwZ**+ªþÌÿõþÌÙžIHßo<û¿×ý)D`!!!DOÕÔQþfþë`þ§Yýxþ(Ø.þV¢`!!;#"'&'!5!F€ý²N(*d&xÒZTý‹NýÊ`åý`²„77álbÜå vÿ[`%3276'&!367632+'47!5!R'& /ý6ý³Ú2]NÊó ËýïNýÊÜ9Gúåý`v[«þìþ½0@78å nþHc`! !5!!"'&'32654'&+7†ýÊþy‘NqMG™™þÚghhfa``]Š’KK“¨ÄÁÛåþ9 !qfÞst%)6jcf54eþHl` .&'&23676 !5!5#7#$!2&'&+Ä+¼•Œ c4'þ˜†ýÊþx’MqNF™ª”£þet´ ;K“¨}A U4XÁÛåþ9 !qfÞs.( #-[H*4¦+32765&'&#"67636!XTÃN33Y¡HHFFDII£Ø½wŒ[ªþ¾àrLG`Br+*#Ó…×ç‘^þ¦+!&'&54762&'&#"3yþ¾ª[Œw½Ø£IIDFFHH¡Y33NÃàý ð^‘ç×…Ó#þÖ+rB`GLr¦+!'"'&'327674'&#XBª[Œw½Ø£IIDFFHH¡Y33NÃ3àþ^‘ç×…Ó#*+rB`GLr¦þV+#%32767#'&54762&'&#"á3Y¡HHFFDII£Ø½ww½Ø£IIDFFHH¡Y4„`Br+þÖ#Ó…×a×…Ó#þÖ+rC_7ÿÇš¨ *32654&#"47632 '&47632"'&EWUyxª¬vyUWþò¦¥é䦥££þ.¥¦¼#"1<"Db"#6†^^¼†ƒÂaa„ý»»»»ýþýµ¶¶µ5'''/-6L&&wZ` ,@ hh  !Üì2ÔìÔì1/ìôìÔì9032654&#32654&#%!2#!¿§^^^^§œHNLJþÔüâSNdnìòýûÑË3332®Å0203á›Rs‘j¢ŸlÿÖey.% !";#""'&54767&'&547676H þÖF(5:&J„…@*?;9?YÆÐon:8‡ƒ<:nmÒÆY-¼kl%?H Û"J7#"·-VW”bLHIGg”VV=Êþ´þt=”+%#"'&7632676;#".#"32767'#5!Û^ddkòŽúVZÒy'dRQ P•QQœ'!"øæe2—––•åelán„þã10YX¤¢² ¨ÝxY` !!!!!!xFUFþºþ«þº`þk•û Ïþ1^þWt$!!3+5$)3!5!&#"?676ÌþÛ%¨8tFZÒ½þÒ4þ×NþÑòi]kb)+VúÒ¦Sk ïáû]L@6hþVh` !! !7!hþÜþ þœ¨þ@D4d$þV'þƒ¢¾ýô`¬ëæ`!!!ìD·ý`üÃþÝFþVM'%#"325#476;#"!26&"µ*;9H¼ÌɶR<;&IH¨a6þßþ¹,+˜XX˜+ž[1/0411aˆúmlá76eùö}þ¼\\¸D¸\’?&327654'&#"67632;#!5+53lTÃN34Y¡HHFFDII£Ù¼wŒ[ª Ééþ¾ÖÚàrLG`Br+*#Ò…×ç‘^p¾¾Â’?&5&'&547632&'&#";3+!5#53#ª[Œw¼Ù£IIDFFHH¡Y43NÃTÚÖþ¾éÉ€p^‘ç×…Ò#þÖ+rB`GLrþ Â¾¾Â3ÿãž %(26&"73!!!+5#"'&7632ã !rBBr!Õ¯þŸaýéŸ,-=s?@A@w6++ÐRÏþ¼\\¸D¸\–SþLåý`Û¦a11šš˜˜/.™ý~‚þ@º 4>!#5#"76323!#"'&'32654'&+26&"Óêþ®¯Z>?=;9:7SX--Xeýô! rBBr ¼Áü{¦ab4˜˜/.]SþLåþ9 !qfÞst%)6jcf54åþ¼\\¸D¸\ÿµ9<%3276'&26&"73!367632+'47!+5#"'&7632ü±! rBBr Ô¯þžƒ 8/y’zþÒŸ-,=s@?@Aw6++ÏRÜ9Giþ¼\\¸D¸\–SþLåý`v[«þìþ½0@78¦a11šš˜˜/.™ý~‚Bÿãž/I&'&#"#"'&'#"'&5#533367632532654'&/&'&547#3b1455;2`-,DD‰<@?@”—56««°æ(G998þU:=<8>@R0e/.ß3=ÿ48H:'SU­VW"(PQÚá>þ½K3Zü…H7<98"%RQˆ0*ýîK !‰þXH&.35476;#"+532767#"'&5#53#3äæ23‰‰(17~½Œ;“—56««–æ3žþÂNÊNNá0Abáü¬+Úblá7.bPQÚá>ûCžýîK !Qÿs€ž3<G367632&'&#"763#"'"''47&'&'#"'&5#5332'&#"#;&54­æY›6222'.-2U]>e«½=x1$”—65¬¬"!XN2þæß3-žþÂÌ)#,þô7¶¨šGµéþ½r]G&A#(ÊPQÚá>ûJ9K,ýîK !ˆÆÇJþX‡3;>32+5327654'&"####535476;#"Ï®Z?`0176~H<^®Ï°££32‰‘Š(Âb¨]fikÐýTüklá77„z45GG~ýüáNÊNNá04ÿã?&'&#"#"'&'#"&5#5!;5327654'&/&'&54632o0545;€2`--DD‰=?@A¾}n²b;:x9> Q1d/.Œ999=ÿ48H:'SU­VW#)Øû`áû¿„77H7:98"%RQˆ¢´.ÿû£#5!;!5!!!5#"&à²b:€aþ­þŸaýÙ¯~nÓ`áû¿„77ŸÛåý`ÛØ9˜ 333# #333# #9ßxy¿yyÞ¼ûyxú½ßxy¿yyÞ¼ûyxúsþP°þT¬ý¯þQ þP°þT¬ý¯þQ±³ %#!#!#!#!­•þ‰•þ‰±Âþ>)„Âþ>)8þJš"332765!!#"'&54'&+5328""NO/,$þÜLJj PR**d&xÒZV^ýVy44GG|ùì\]33ijѹ:7álcQþV€)3327653;#"'&=#"'&54'&+532ë8>@$$åBPa£JHxUA@#!Pa¨HE^ýVyhGF}ûË„nálkü}]fijѹ:7áleIœˆ#4&#"#367632ˆº,23ºº00De443þi~D:'(Fþ™hþ­5;<Iœˆ#4&#"#476;#"67632ˆº,23º;9‡M@400Deh3þi~D:'(Fþ™a<=~>JL4v†jKû+532765#5!5#53Kt‡Ê–?¾z¼¼ox~JÝ~r¿Uœ|&'&#"#367632|)*1>*/ ¼¼99L, $"b !<>þßtb6 U|32767>53#5#"'&'U)*1>*/ ¼¼99L, $"J !<>!ýŒb6 ­Â"32767>53#;#"'&'=#"&'))2;-, ¼@N†:5rM&J!I #<>!ý8~=7{J6:œÉ "#327654'&'3276?3#!322:l0]èj! (I%$FG—þÄ寘()|)œ²7((?Y**tÞœó 333# #ÞœUN—LWœ‚²WV²þ=þÃáýŒFþº°Î+5326?33¤&45LšL96þïŤÅYY((}">!bþi—ÿÿôtfÉÿÿ°‡Lÿÿ°‡LÿÿßÂòÁšÚÚ÷2764'4#Ú7&&'&6vTSSTvt'&l&'šSTìTSÚÚ÷0"'&4763"÷vTSSTv6&'&&tšSTìTSš'&l&'Hœ‰327654'&#"567632#º6}1!!9g..--,/.iŠyLY;mÎ8@+'6%@ § vJyQ5þêHœ‰#&'&547632&'&#"3Îm;YLyŠi./,--..g9!!1}8þd5QyJv § @%6'+@ðîáf5@ ƒÔÌ91ôÌ290K° TK°T[X½ÿÀ@878Y3#'#ðñ²ÇƲfþˆááðîáf5@ ƒÔÌ91ô<Ì90K° TK°T[X½ÿÀ@878Y 373ðÿ²ÆÇ²ÿîxããþˆ çÈ@ÔÌ1@ÔÄ0#ǽýÕ+ÿÿ-X¤Š ÿ[Ȇ@ÔÌ1@ÔÄ0#ǽ†ýÕ+ÿÿ-þj¤ÿ&·›6`!!hÍ›ÍÍþeä|ýþ„›ä6`!hÍ›ä|ÿÿÚ&÷`cþLÿÿÚ&÷`dþL.ô¤j 533##5#5´ââ´à‰áá´áá´ˆÕJ‰!5!Jþ>ÂÕ´ÿÿ¸FŒÿÿß;ò1Lá… R@°° ] ]ÔìÔì1ÔìÔì0K° TK° T[X½ÿÀ@878YK° TX½ÿÀ@878Y4632#"&732654&#"L¦vw¦¦wv¦™M67MN66Mþv§§vv§§v7LM66MM¾þoj@  °] ÔÄìÔÄ1/ÔüÄ90!33267#"&546-5%=2&M(6_)r|7GF'1œ \V5m Å9Ñ@$  °°  ÔÌÔÌ99991ÔüÔì9999990K° TK° T[X½ÿÀ@878YK° TK° T[X½ÿÀ@878Y@M           &]'&'&#"#4632326=3#"&j7 +$%Œg^$H)>%$'Œg^$BT%>;ˆ”+?:ˆ”ÿÿ)î=f‘þÈ´ 2%7;!"'&7þÈrÇ&&iêþá¸NBýŽs½«°87´o[¦²»´ 5&73733254ØœþúþàªÜÎ}~Îþ´ztoîÖÙ‚‡¿ï2ººþS®FEE['œª#5!;#"'&å¾z4?–ʆ:;¢ä~ýžJ>~=<J‡..#"#"'&'532654'&/&'&547632V4p8?@‰6d20IH’ADDE>€.8(.Fhbà[sTr..> ˜‘ÿÿLá…u)î=f4@ƒÔÜÔ@o]Ì991ô<Ì20´55]3#3#Vçþð®“Ùø¤fþˆxþˆÿÿðîáfh îȪ#ȾªþD¼ÿÿíîåª'““þãŽî¢f###à£ø’×®þðfþˆxþˆxÿÿ¸ 'tØs¸F >32#."­œ­ c¦d ™™FJKE¿‡2¹@ÔÌ1ÔÌ0!3Ùþæ±Â‡2ßÂòÁ!525#àþîxxÁöþøzßÂòÁ#3$5òzyþîÁözöÕî;f!#!¡ÅfþˆÿÿNý¯ƒÿ'C‡øÁÿÿNý¯ƒÿ'vÿyøÁoüÙäÿ#5353#&¶¶¾¾ý½·ýÕØüÙMÿ33##Ù½··½ü·½·SC~n!5!#Áþ’+½±½ýÕ ã1532654&'3#"& CI'1œ \V5mR2&;1'M(7^)s{6ûþ ÖÿÁ "&463"3Ö\\%22%þ €¸„2%&2Vý‚ÿ53533W¶¾·ý½··½;üÙfþN#5!##ò·+·½ý½½·`üÙŒÿ #53533##¶¶¾··¾ý½··½·SþG~ÿ5!S+þG½½/þX/¨ %+53276=!/[ZÒy'b+)#+úmlá75†}§þV§¦ 75!;#"'&§#)+b'yÒZ[)}}†57álmßþ2òÿ(µÔÌ1ÔÌ0´00]!!ßþíØö-þ2¤ÿ(@ ÔÜÔÌ1Ô<Ì203#%3#¸ììþuììØöööþ DÿÁ µ ÔÌÌÌ1µ  ÔÌÌÌ0#"&546324&#"326D]\\]„3%%22%%3þæ\€€\\\$32%&23tþçÿ:@ÔÌ1ÔÌ0!#Í±ÂÆþÎoþo3!@  ° ]ÔìÔÄÄ1/ÖþÅ90!#"&'532654&'Ã97{0e5-T$:A*.>j/_[ œ.(R<ÿÿ’þo?vÔ ýjÇÿ&#ǽÚþD¼-ý°¤ÿ&#5##¤¼þ¼ÚþŠººvÐþÿ@#"'#"'&'3276732767y0@k>=k´. MPMGÀÐ@FF¿0:‰€‰mðþáÿ“@ ÔÌ91Ô<Ì90 373ðÿ²ÆÇ²ÿþxããþˆðþáÿ“@ ÔÌ91ÔÌ2903#'#ðñ²ÇƲmþˆááþ¸ÿ> @ ° ]]ÔìÔì1Ô<Ôì0332673#"& dSSc ­œ­ÂEKJF™™þ¸ÿ@ #."#>32¸ d¦c ­œ­þEKJF™™ þÅÿ7˜@$  °°  ÔÌÔÌ99991ÔüÔì9999990@M           &]'&'&#"#4632326=3#"&j7 +$%Œg^$H)>%$'Œg^$BþR%>;ˆ”+?:ˆ”-þj¤ÿ&µÔÌ1ÜÌ0!!-wý‰Ú¼ÿÿþÑþÛBÿÿþÑÿîÿÿXÏy+aÀ¶Æx5!À¶Â¶Ñx5!ѶÂÂÿ‹²Ó'¤‹‹uwÑyÿúÿÁÅ'œ¢)¢?räsûþ ÖÿÁ0526544û%22%\þ „2&%2„¸€-ýø¤ÿn3353.¼þ¼ýøvººþŠJüé‡ÿ&!5#‡ýÃ’çÚýÃ=þnççÐþÿ@67632632#&'"#&'"Ñy0@k=>k´. NONFþÐ@FF¿0:‰€‰ma§p· '7'77h††‚††)††††ÚÂøï!#532654'&/&'&5463#"¾$ ”ˆ9?, ”ˆ;? ×'RRz .!RSz#ÿÿ:Ñ &33þíÿÿßÂòÁ™ÿÿ¹;Ì1tÚÿâà $#&'& #&%6iôy ÆÌý§ËÆ z¾ 3O¬G$%%$G­N(ôtf3ôAÝntòþ¿þVÝH%#ÝAÝnHþòþVÿ¤ #"=3;³XÄ3þV·—™hÿÿsþá'ÿÿÕî fvÿÿ-; þ&j͘ÿÿÿ¯°f'ÍýÚØÿÿÁyÿÿþ¡Jf'ÍüÌÜÿÿþyHf'Íü¤Þÿÿþµ%f'ÍüààÿÿÿUÿãuf'Íý€æÿÿþÉf'Íü;ëÿÿÿ‚wf'Íý­ïÿÿ þ&ÿÎÿÿ!°Õ$ÿÿ}‡×%ÿÿ¶XÕJ!°Õ)! °ûq“i0ååÕû/Ãü=ÿÿ¨JÕ(ÿÿs‰Õ=ÿÿ‰HÕ+\ÿãuð3"326&! ! éþqhhqrhhý‚  þ÷þüþýþ÷‹þü\ñþóþôññ  ñþˆþxþþ‚þxˆÿÿ¬%Õ,ÿÿuÉÕ.!°Õ)!!HþÙ“i“þÙþßÕú+ÇÿÿV{Õ0ÿÿwXÕ1‰HÕ )!!!!!HüA¿üA¿ðþ!ßÍüÃÿÿ\ÿãuð2ÿÿ‰HÕVÿÿ¢{Õ3bxÕ !! !!óþoý>’þnÂûêëçþüþþþüÿÿZwÕ7ÿÿÉÕ<\uÕ&.67654'&'3!35&'&547675#!üQQ™[……\˜wýëw˜]„„\™wþb#QQ Uk‚?  HJlÓÒlKFþüFKlÒÓlJHþüý=·?‚kUÿÿ¶Õ;PÕ3!35&'&!!6765!üwýëw“b'@'@'‘a“þü„+…Ä~[þ¥úŠ#üì#Šú[þ¥þ‚Ä…+Zw´F@$ª¨ «   OON N ÔìÔìääÀÀ9991/<î2þî99073&5323!>54&#"!Zîxlëílxîþ)QNpgfqPRþ'Óm¿8nþ’þÈ¿þñmÓ Oê§ÖèèÖ¦íMþôÿÿ¬%k' ìuàÿÿÉk' ìuëÿÿ6ÿçŒf&÷Íÿÿ•ÿêf&ûÍÿÿ¬þV/f&ýÍÿÿ f&ÿÍÿÿL…þ& Î6ÿçŒy(7!;#"'&''&'&7676'&'"7A$ÁDRfŸQ1*5ʵjpq½ç$„A;::6GEôlý¿™¥áT =$,’œ9x™ýУ˜[[¨®RMBƒþVo!%!! 5456'&¦þݲE,§àþrºbbØþ躷EþÈþö‚Iþäþ8 °– ëÜ ß ½ã8þV`!!&'&+532îwó)þnþÜé*&*Pn]o(þvÂû þVªðH ëJYbÿão!%/&547632&'&'&#"32#"76"326&G‘~}àcTy `&ZQh:#£îþçîíþçŒ?;ixxijxx)?—‡NM ×",fþÃýâþÃ=¦Kš¹þ¶¹¹J¹ÿÿ•ÿêtþV##52764'&# !5!³3ŒT][TŽF!;ýªòþ)lýžþ× MXž“[TáL&ÙDááþ†¬þV/{!4&#"!!>32/þÝENO[þÝ#–jŸ¢×ûTziŽ~ý`¨]fÓaÿço(&'&"2767  G -<Ô<- -9Ú9- þ$þçÜwÂp––pÂá¹v––v¹ýR¯á¯þQýÓ`;#"'&5#5û%%T:NüZXÉ`ý J!!áPNÝáÿÿ®®`qP ! !'&'&+532âŸþ×àÿþ×›)''^p–¶_oÄû<ýq-wJëJXÿÿ®þT¤`w/x`67676'&'!!!@|8M6P3E.*ˆ±{þœþÏ2'Z|u4@—bY|rNįät`þV#$! %$47#5! #52764'&æý©sþÂÜ÷lýÓÈþ3S][TŽF!š0A*Rááû½ ß î«LXž“[TáL&ÿÿbÿão{RÿÙ¾`#3267#"&'.=!!#5ž¢1F",c7Orþîþã¢`áýë?¼ " VX#süá–þVw{  #"&'!&"2‰Ô×ÇZ6þܼl¾nn¾{þÌþèþäþÐ]^ý¸ÒSýD¸¸þ¼¸¨þV*}$%#52764'&# '&!2.#"íR^\SŽF";þÄw’&Z§S@™RšM?áLXž“[TáL&œ9*,þô7;¶¨©WGbÿã`#"476)327654'&¼³þçîíþçŒz(ýšC$€ÐþñþÃ=ý¦Žá8\¡¥¹]^£›r'ˆJ`!!;#"'&5!ˆÂþ±%%T:NüZXþ±`áýîK !áPNÝL…`!"'&5#5!327676'&'!ŸüZX¥ÉJ9g>  L#7&$€‚PNÝáý JB7Ùg¦‡LGއ†þØ©­AþVj!2!$76676'&&˜`rþkþÜþjsƒ+*‹Z6†j{•þÕþ4þVª@ïBsåSV}ïdˆâþöÒþxaò†M>HþV‰`'!&'&+532!;#"'&¦Càþ×z¶#%&OudgRPCá)þ…¶#%&PvgdSr’þ6”LëJ<²”ÌüùþmLëJ>EþV`%6!!$!!ûn$þnþÜþn$n$ád ýìýç3þVª@ ýóþÝO@ÿã’`3676!#"'#"'&7!2çH WlrU€¯11¯€UslW H™þ86*üýCqS³³Sq½üþÖýí6ÈÿÿÓ1&ÿjÿÿL…1& jÿÿbÿãof&ÍÿÿL…f& Íÿÿ@ÿã’f&Ípÿé$ # 76'&!"'&7607676‰"B ws6Fqüþåÿn †«Ýrþ¤þÌ96‡©$(š-k<`z°þÎþƒÁê°„tÀö þ˜ÖþÝ€~xŒ›iÿém$ $6'&'&'&%6#"'&3676g2DTšG§jå î´Ðˆ€ €‰ðÛžQ;^{/G™/z¥ ¥xGÙCcX‘×Êþþ}ÆÕÕ¾UèjNk¡"§Õ!4''&676'&­\+*þÙ*SJtxL—GkíeJœZ vV³ˆ¦¥Êýêçˆ "40þz7/cîTÿÿþ$§f'ÍüOÿÿ"§k& ìu:þV–'67!!&'&4%67654'&ÐW°$¡d––T±þÜ¢e–)FF6$&EEÜj#«þU mžþñóºi$þaŸ mžöE+_¢q!výŠ+\¥uŒ!³`#5!#'$'%!76''iK•J# ðþ×÷þÔ 9$G@F=#áá¢þõþ-ÇÇÓ ¢¦þô½þt¾ ¦4þ‘`/'5&'&7'&7676'&#"5677632y&ÍŸ¼2¿!Š–¨/6Š5F\8R~÷ Š‚•¨0=‰2C\ýágO\ç“ ð–20þÀR[ÁFk{Zs›Bà="î–20BPZÀPa|bl™\þVuð "326&!&'&! hqhhqrhh!þÜ›\„  …Yçñþóþôññ  ñûþ` *‡Ä~ˆþxþþ„ƇbþVo{ "326&!&'&32hixxijxx)þÜ‹^Œíî[¹þ¶¹¹J¹ühþaŸ#jž=þÃþñþô¡i`þ9Õ $2'527654'&#"76)!8àb^\TŽF!;üþŸ‰|Œþ‚èDRìfaª“\Tá&(%ŽxyǬþüj€ýüZþVt`""#52764'&# '&76)¬›AMM=nR^\SŽF";þèw’“xñM[¨¤\ILXž“[TáL&œœ€áÿÿ¶XÕ) þVî"%&7632.#"!!#"&'53676y~f¯s7+P'R4F7czcç<;ƒ¾Ûý7µÆêî´´œWþ “RS;õ ²¢þÂþ•þЇ4ÿù‘`+6'&#"56776327'&'&7'&765F\8R~ö!Š‚•¨0=‰2C\8R~ö!Š–¨/6ûs›Bà= ð–20BPZÀPa|bl™Bà= ð–20þÀR[ÁFk{–þKw{!3!! ! #"&'$&"2ººàþ þ"óÔ×ÇZ6˜l¾nn¾Ôáµ(SþÌþèþäþÐ]^ñD¸¸þ¼¸ÿÿ¨ÿã%}FÿÿþXRM\ÿãuð!3276!&'&#"! ! @þQ )4qr4(þ_§ 4rq4þ¸  þ÷þüþýþ÷‹È_xx]ΔKyyHþÈþxþþ‚þxˆ ÿã}$%# '&76!2&'&#"!!32767FYPgþý’’““ZTSS?MOPL.ýå7LXGIC9*œœ,þô6[5XÑfAZ;¨ÿã%}%7032767!5!&'&#"6763 !"'&¨CIGXM7ýå.LPOM?SSTZ““’‘þügPY9 ;ZAfÑX5[6 ,œþëþíœÿÿ¢{Õ ÿÿ–þVwÀÿÿ˜ÿã9ð&V{Õ !!###V`²±bþžë þÕþÙ'ú+¬þÛ%ûTVþV{ü !!!#!V{—–}þçƒë…þçüþÙ'üÓþÛ%ûƒ.þVw{%!!!5#53! #"&&"2º¹þGþÜhhóÔ×ÇZbl¾nn¾žþéÁppÁ¡SþÌþèþäþÐ]OD¸¸þ¼¸˜ÿã9ð703254#">3 !"&˜LL¢¥¥¢LLDœU.>þÂþÒUš+HFAüýAFH$$þrþ‡þˆþr$ÿÿ˜ÿã9ð'y¦0ÿÿ˜ÿã9ð&4yÿEÿÿ¨Jk&L ïuÿÿ¨Jk&L ìuÿÞþXž,%+532654'&/"!#5!!6?67632žµÐÚˆbR#`)GG" -þݾÄþ+/5—‚^)Q+ü×án„Íz3%  Dþ1CÑÑýþ0$ 5iÑÿÿ¶Xk&J íu˜ÿã9ð:@!p€op op nr! üì2Ìì21äôìôìîöîôì0%# !2.#"!!32679AšZþÒþÂ>.]™?6•`—•<ýÄ›•I”J+"&ŽxyŽ'!þ¸2Uå—þü—äCDÿÿÿãVð6ÿÿ¬%Õ,ÿÿ¬%k&= ìu´+K° SK°QZX»@ÿÀ88Y1ÿÿmÿãðÕ-ÿòÇÕ%3264&+#+532>!32#6%tt%ðˆ¾Í% rFhn þñlìaøaýZѰþ–þ+âúoÛå¬ý¼Üþ'ÜÇÕ%3264&+!#3!332#6%tt%ðþ¾ððBðn þñlìaøaýZ˜ýhÕýÇ9ý¼ÜíìÜÿÞž'!!670767632!4'&'0'"0!#"Äþ+/5—‚^)QþÝ#`)GG" -þݾÑýþ0$ 5iÑýÄøz3%  Dþ1CÿÿuÉk&Q íuÿÿwXk&O ïuÿÿµk&Z ô‰þ¾HÕ 3!!!!!‰'q'þ¢þýÕû/Ñú+þ¾Bÿÿ!°Õ$¢{Õ3@pp p d!   üì2ü<ì99991/ôììÔì0%32654&+!!3 )Éy‘uu‘yþÙ¢ý…n5þñþËþkøbyyb'þüþÕÜ÷÷Üÿÿ}‡×%¶XÕ@ pdüìì1/üì0!!ÝþÙ¢Ñû/Õþü(þ¾¨Õm@p dp  ÜÌìÔìÜìì1/Ì2ü<<ôì0° KTX¿ÿÀ@8788Y@  ]!32645!3#!#ö ý0d*P‰ÿý~ÿÑý `Íü3Uc5äû/ýºBþ¾ÿÿ¨JÕ( ÅÕu@   Ü<ü<À91@ Bd /<<ì2290KSX¶ ÉÉY@ I:I:I:I:I:I:· <<<<3! ##'# !ñðßþþúMðMúþþßÕýõ ý¡üеþœdµýçv_ýõÿÿ}ÿãLðwXÕ M@  %d && üìüì991/<ä2990@  ]KSXÉÉY"!!!Xþüþ^þÅ Õú+=ûÃÕûÃ=ÿÿwXk&O ôÿÿuÉÕ.HÕ1@ÜÌìÜì1@ ppd/<ôìì0@ ]+3267!! ¾Í\ _c fþÙѰþ–þ+â aoM¬ú+ÑÿÿV{Õ0ÿÿ‰HÕ+ÿÿ\ÿãuð2‰HÕ@pd"üìüì1/<ôì0!!!!‰¿þÙþþÙÕú+Ñû/ÿÿ¢{Õ3ÿÿ˜ÿã9ð&ÿÿZwÕ7µÕ+326?!!×>£uÈP:a(7þ1<û1/š•j‘¸ý”l#¸Õ|@:  :: Ô<<Ôìü<<Ôì1@p dp/Ü<ì2ôÜ<ì20° KT°KT[°KT[°KT[°KT[X¿! ÿÀ @878Y@ 00 0 ???]!5&5475!!>54&'îÐûûÐÿÏüüÏÿsZUxÿsZVw„sîñsffþñðþ„pÒÞÑ…Ûÿÿ¶Õ;Pþ¾˜Õ G@ pd " ôìÜìÜì1/ä2ì2Ì0° KT°KT[X¿ @ ÿÀ878Y3!!!3!P'q'‰þÛÕû/Ñû/ýºBeg"@p d  Üìôì21/ä2Ôì90!#"&5!3265gþÝ%© Â¯#|G—bùìþVIÑÓþ3‹Vƒ‡¤N‚Ö ˆ@ dp:= : =: Ôìüìüì1/ì2ô<<0° KTX½ @ ÿÀ848µ ¹@8Y° KT°KT[°KT[°KT[X½ ÿÀ @848Y@ ////])33333‚ûÌð²ð²ðÖû.Ñû.ÒNþ¾ÄÕw@ d p:=: : =:ÔìüìÜìôì1/Ìü<<ô<<0° KTX½@ÿÀ848· ¹@8Y@   //// ])333333#Ôüzð²ð²ðBðÕû0Ïû0Ðû0ýº—Õ%32654&+#5!3 !5)šttš)þÙú!5þñþËìav‚aýZÑý¼ÜòçÜ(©Õ%32654&+!3 )!'šttšÿÿ  þñþ÷yÿìav‚aýZÕý¼ÜòçÜÕú+|UÕ,@p p d  !  üì2üì99991/äìÔì0%32654&+!3 !£yšttšyþÙ'n5þñþËìav‚aýZÕý¼Üòçܘÿã9ð!"63 !"'3 !ÿ(þíš’‡®.>þÂþÒ¨’›(ýâk|‡HHþrýþqHH‡{ÿãÉð&9@p"np r%p€d:$ :$%:'Ôü<ÜÅ9íí1/äôìôìô99ì0"36766'&!367632#"'&#2:**),4"(,"üš'shdºÞWgwo°ºeloçy™ìþû€xwx ëšyûÕýºÑÌÄÄÚþ—þÒÄÄÂ"ýuSˆÕA@ ! ÔÔìôì291@ B ppd /<ôìÔì90KSXµ  ÉÉY;#" .54$)!#Âtn½½ntþ‘FK½ÜþÙ¢þÕm_—^û„#˱æÌú+Ný²ÿÿ^ÿãT{DAÿãoK ,5@* .$)-ü2ìüìÔÄì1@ 'h!h ‰r-äôìÜìî0632#"4/&4767676%6"32654&¡n&0þÞu6¤€¾îþçîíþç$Z¨yU3þêixxijxxKÔ #oœfþÃþñþñþÃ=4 §“J•I¶X@ ýR¹¥¥¹¹¥¥¹wZ` ,@ hh  !Üì2ÔìÔì1/ìôìÔì9032654&#32654&#%!2#!›§}vv}§œŠNNŠþ@ÔüâSNdnéõýûßþü=FF;¦Ë0119Û¡Sl‘j¤Þý`@ ÜìÌ1/ôì0!!þÝ…ü{`Û?þâ`l@     ÜÌìÔìÜìì1/Ì2ü<<ôì0@  ]°KTX¿ÿÀ@878Y!265!3#!#ö(ýŒ5O{ÛýXÛ…þF’^ªýVUƒ­ü{þþâùÿÿ\ÿã}{HÄ`u@   Ü<ü<À91@ B /<<ì2290KSX¶ ÉÉY@ I:I:I:I:I:I:· <<<<3!##'#!ñðÊúþÿœHðHœÿþúÊ`þ©WþVýJ«zþÏ1zþU¶ªþ©™ÿê7{&>@ $ 'ÜÄÄÔìÔì1@‹yh!‰' ‹ y hr'ôüüìÔì9ôüýî0#"&'532654&+532654!"5>32YOþÄÞsœucŸ{rŠ F£‰T‘þÿžšU¦¥œs=•w™˜,ì1(TT5Û6E|4ßž™}q˜C` ]@  74 üì2ôì21@% /<ô<990° KTXA @ÿÀ88YKSX@ ÉÉY!!!CþÝþ›þÝ#e`û Ëý5`ý5Ëÿÿ˜CF&oŒÿÿ®®`úEi`/@ ÜÌìÔì1@h/<ìôì0@ ]+532>5!!; ¥Ù_ dPQþÝ…ÅPïäðIü‡¤û …Vz` ‚@  !  ÜìÜì91@  /<ä2Ä90@  %KSXÉÉÉÉY"K° TX» ÀÀ88Y° KTX½ @ ÿÀ848Y!!# ##V`²²`ð¬è®ð`ýqû 7ýsüɬ/` %@  74 üì2ôì21/<ä2Ôì0!!!!!/þÝþÃþÝ#=`û ýø`þƒ}ÿÿbÿão{R¬/`@74üìôì1/<ôì0!!!/þÝþÃþÝ`û …ü{`ÿÿ–þVw{Sÿÿ¨ÿã%}F¤/`@ ÜÌüÌ1/ôì20!!!5/þÌþÝþÌ`Ûü{…Ûÿÿ;þX˜`\OþV‚>@ : :: ÔüÜ<<ü<<Üü1@t h ‰hr‘ ìô<ì2ô<ì2ì0&733>54&'ð”þô ”ð– þô–ðFjjFðHjjHþV..™þgþÒþñþñþÒþs7£ªª££ªª£ÿÿ7š`[aþâ€` %@    7 ÔìôìÜì1/ä2ì2Ì0%#!!!!€Ûü¼#=#Ûþ`ü{…ü{Š$a!@  7 4üìôì21/ä2Ôì0;!!#"&5!µ\†k"þÞ¾Äö+[;èûŸ Ÿî3N‚` ˆ@ := : =: Ôìüìüì1/ì2ô<<0° KTX½ @ ÿÀ848µ ¹@8Y° KT°KT[°KT[°KT[X½ ÿÀ @848Y@ ////])33333‚ûÌð²ð²ð`ü{…ü{…:þâÄ`w@  :=: : =:ÔìüìÜìôì1/Ìü<<ô<<0° KTX½@ÿÀ848· ¹@8Y@   //// ])333333#éüQð²ð²ðVÛ`ü{…ü{…ü{þ(Œ`3264&#'32#!#5!FInjjnIÔóóÔþ^ûßþü=Œ;Û¬þ ®á±`3264&#32#!!B2jj2ÔóóÔþÈm%ßþü=Œ;þZ¬þ ®`û `û ‰$`$@h h 7 4üì2ô9ì1/äìÔì032654&#32#!¬{njjn{±ÔóóÔþ,ßþü=FF;þZ¬°°®`¨ÿã%{"'3 7!5!&#"63 þÅ‘…™.þ#Ø5é§„œ¸$þÝV uùÛèr TþÉýØþÇ8ÿãŒ{ 2@h‰hr  ::: !Ôü2Ü9ìÔì1/äÔìôìôì0"32654&33676#"'&'# ,^c+8T\üüðk"Bn§‰÷þ‚©mVfœÂ½¡«³Â›üt`þQ×[šþÚþÜþÚþÚ”uôþ `T`@@  ÜÔìÔì291@ B  /<ôìÔì90KSXµ  ÉÉY;#" .546)!#ÆnP­­Pnþš)+²î¨þÝyþû F=<ü¯èŠ Ÿ™û ­þSÿÿ\ÿã}f&lC'ÿÿ\ÿã}1&lj'þXw53!!!>325654&#"!«#µþK–…Ëßþ˜¦~R[i\þÝá´þLáþÙ]fÓþßþõþn2áƬgŠ€þßÿÿÞ f&jv¨ÿã%}<@"Ž ‹yh ‹ yh ‰r 75üì2ü2Ä1äôìôìîöîôì0%# !2.#"!!3267%JªbþýþÜ&Z§S@™R|œþ_„U”B9++89*,þô7;“UÑgš9:ÿÿ¬ÿã+{VÿÿLÿÿ1&ójÿÿþXRMË` 3264&##+532>5!32+.2jj2þÿv ¥Ù, dPV ŸóóŸûßþü=Œ;¦ÅPïäðIü‡¤þZ¬þ ®#Ë`3264&#!#3!332#.2jj2þÿþÕðð+ð ŸóóŸßþü=Œ;þ!ýø`þƒ}þZ¬þ ®B53!!!>32!4&"!«#µþK–jŸ¢þÝEœ\þÝá´þLáþÙ]fÓÑþ‰JyhŠ€þßÿÿ®®f&qvÿÿ˜Cf&oC'ÿÿ;þX˜F&zŒ«þâ/` !!!!#!«#>#þ¬Üþ¬`ü{…û þâ—Õ%32654&+535!!!3 )5)šttš)ýßú'Cþ½5þñþËþ»ìav‚a¾Ñ  ÑÓÜòçÜd(Œ32#!#53!!!3264&#FÔóóÔþ^ûû#’þnInjjnº¬þ ®¶á}þƒáþ)þü=Œ;ÿÿ\ÿãuðaÿÿbÿão{¶X@pdüìüÌ1/üüÌ0!!!ÝþÙžÑû/Õ2ýÊÞýš@ ÜìÜÌ1/ôìÌ0!!3þÝNÑ…ü{`:ýë/XÕ !#53!!!ÝþÙ‡‡¢ý…©˜ýh˜ðMþüþ·ð\ý` !#53!!!þÝ‚‚þhÊþ6ÊÛ»ÛàÛ¶þX‡Õ!2+532654'&+!!!Ý5~d+QµÔÚˆbR#XéþÙ¢ý…¸5iÑþü×án„¥z31ýRÕþüÞþX/`32+53276=4'&+!!!íŸQQY[ÐÃqb)("%LxþÝþ…ihÓ¶ýjlá77„‰|14þk`Ñ þ¾ÅÕ3 !3!3###' þþßðßþþ¶Lð MðMv_ýõ ýõ ý¡ýŽýºBµþœdµýçþâÇ`3!3!3###'þúÊðÊú®SÛ'œHðHœ¶ªþ©Wþ©WþVþ%þ«zþÏ1zþUÿÿ}þoLð&­ÊNÿÿ™þo7{&­ºnuþ¾ÉÕ3!#!!!=ŒþÛ#þžƒþÙ'ÎNþ)ýºB ¦þÕý²Ný´®þâ®`%3!#!!!)…þß#þÍdþÛ%`cþXÑþ `þT`þƒ}þ^%þ¾ÑÕ!#!!!!!3!¬ïþþÙ'q'íþÛ˜ýhÕýÇ9û/ýºþâÀ`)!!!!!!!ŸþÝþÃþÝ#=#!þßýî`þƒ}üqþN½Õ 33!!!#!Nð;Dþ¬ðþÅÕý¾B÷û"£ý]N¹` 33!!!#!NðC8þ¸ðþ½`þz†Òürýøÿÿ˜þo9ð&­uXÿÿ¨þo%}&­HxZþ¾wÕ )!!!!!üþÙþ…þ…%þÛÓþþü1ýº¤þâ/` )!5!!!!ûþÝþÌ‹þÌ!þßÑÑýBþÿÿÉÕ<9þV—`!!!94ûû4þbþÞ`ý)×û¿þ7ÉÉÕ! !3#!#35>"#>þ3ððþÙððÕý¨Xüw@þüþø@9þV—`!!3#!5#53594ûû4þbÈÈþÞÈÈ`ý)×û¿>Û°°Û>þ¾¶Õ!# ! ! ! ¶þÛ þãþäþ϶þV11þXýºBîþößþ%Ûý!þ7þâš`%3!# ! !!“þß5ÜÛþªžþƒVº»Vþ‡Ñþyþ‡Hþ²Nýèeg!3!670767072!4'&'&#"e#*/7”9‚^)QþÝ#`GG.-ýf2$ 5iÑý‹1z3% C€ýøÿÿ¬/Kÿÿ¬%Õ,ÿÿ Åk&M ôÿÿÄF&mŒuþX¸Õ !!!2+5327654'&#/“þÙ'ÎNþOUW.QZ[ÔÚˆe&)#1F®´þÕý²Nýã5oËþøolá77„¥~/1®þX–`!!!32+53276=4'&#ÓþÛ%`cþ ŸQQY[ÐÃqb)("%L•þk`þƒ}þ%ihÓ¶ýjlá77„‰|14‰þXHÕ%+53265!!!!!H\[ÒÚˆbRþþÙ'q'+ùnlán„mýhÕýÇ9¬þX/`%+53265!!!!!/Y[ÑÃqbRþÃþÝ#=#+ýjlán„çýî`þƒ}eþ¾g#"'&'&5!3276765!!!D+/5–9‚^)Q##`GG.-#þÝþÛú0$ 5iÑþ3z3% C€¤ùìþ¾FŠþâ$a%5#"'&'&5!;!!!k皈+# 7sk"þÞþßÑÏe[Ê3þ¯=! 'èûŸþâ!¨þÛùìÿÿ!°k&G ôÿÿ^ÿãTF&gŒÿÿ!°k&G ìu ´  +@ € p? 0/   ]1ÿÿ^ÿãT1&jgÿÿœÕˆÿÿÿã¤{¨ÿÿ¨Jk&L ôÿÿ\ÿã}F&lŒÿÿ\ÿãuðQÿÿ\ÿã}{ÿÿÿ\ÿãuk' ìuÉÿÿ\ÿã}&jèÊÿÿ Åk' ìÿøuMÿÿÄ&jÿèmÿÿ}ÿãLk' ìÿìuNÿÿ™ÿê7&jôènÿÿ ÿäÇÕyÿÿnþHc`8ÿÿwXN& ùOÿÿ˜C&ŠoÿÿwXk' ìuOÿÿ˜C&ojèÿÿ\ÿãuk&U ìu´ +1ÿÿbÿão&jèu´ +1ÿÿ\ÿãuð+ÿÿbÿão{ÿÿ\ÿãuk' ìuÙÿÿbÿão&jèÚÿÿ˜ÿã9k' ìÿÎudÿÿ¨ÿã%&jÌè„ÿÿµN& ùZÿÿ;þX˜&Šzÿÿµk' ìuZÿÿ;þX˜&jèzÿÿµk&Z öÿÿ;þX˜f&z‘ÿÿegk' ìu^ÿÿŠ$&jè~¶þ¾XÕ )!!!!ÝþÙ¢ý…%þÛÕþüü3ýºÞþâý` )!!!!þÝþ!þß`ÑýBþÿÿ(©k' ì(ubÿÿ±&jè‚ÿÿ}ÿãLðRÿÿ•ÿêtûÿÿ\þçuð4ÿÿZþV;{TÿÿÑÕ:ÿÿÑ`ZGÿÀŠÕ%!327.'7>5!.'#".G'qf 4².'7©%F"k¤†Á|;'®üp(L" 9øüRZ•< þù+2CÛboò!54&"!!!4> ^þÙqÌqæýþÙ;|Á Á|;®Cppþªþüþb®™ÛCCÛ!¯ò!#!#".> 4&";¯’þÙç‚»x9;|Á Á|;þÙqÌq8O3×¢þüþbžGÐΉECÛ™þôVpp`8[@#!¯ò4> 3#!4&"!!;|Á Á|;’’þÙqÌqþÙ®™ÛCCÛ™þôþüþbøppbÿã|Õ .5!!!26=!^;|ÁþôÁ|;'óý qÌq''™ÛCCÛ™®þ‹þüþppMƒò"3!>54&#"!5!2!k'Q¢€Psy:[?!þÙ †Ê‡C$P‚^KG^¨è‹µ´%NyT<1@W£ì”E®°4þüpaÕ 3!!!!p'Êý6?Õþ‹þüý¨þüboò!54&"!!4> ^þÙqÌqæûó;|Á Á|;®Cppý þü®™ÛCCÛ+ÿã¦ò(53#".4>;54."#4> 32>=#"OWW3^…¤ƒ[01\‚QkBj˜iBþA„Ç Ç„AþA;( k?=®CþüÊk¥p:2k¨ê®s8CiF%%FiCü®™ÛCCÛýViZ/J5Ê`!ÿã¯Õ!!3# .>;"265ö'’’;|ÁþôÁ|;9x»‚ç×3O8qÌqÕþbþüþô™ÛCE‰ÎÐGþü#@[8`ppVjfÕ!54&#"!!>32fþÙqfdpþÙ'.j?†Á|;1CpykýzÕþpCÛ™7Õ3!!™'wÕû/þüNÿåƒÕ2>53#".5##3Ë $0! þK†jkˆOþþ`ý58K..K8Ëý_|³t77t³|±üÕþ‹#ÿã­ð+<33>32.#"#".5467#2>54.'#í.6~šQ*`XGKX^,0W(y¾ƒD8X}£g›Ò€8*(†f 1aªc4W¡‚*,Õõ?eF&  þÃ4&dÖˆW ŒsS-]¦æ‰oÍ^þf_‹[,0^‹\Z‘g<TÎjfÕ!#".5!3267fþÙ.k>†Á|;'qfcq`û CÛ™1ý…pxl@ÿµ‘Õ%.5467>7!#züÏ5`I+qvaTóaÍ»˜-#ìþÉF4@M/B¬dRžODþ\/oqh( -GÿÀŠò <%267.#".'#".54>32>54."!54>2¶1X0/\."('êXH1V&å ? R¹eO‚]33]‚OX¨O!)!>WlZA$þÙU“ÅÞÄ’Uâ /#()H)“›þäv8z@–0Y)KB*RyPO}V-;5N´ck‘X% Q‰h¯í’?C–ó!¯ò4> 3!4&"!!;|Á Á|;’þGqÌqþÙ®™ÛCCÛ™ýVþüøppG‰î&>3"!".5467>7 3!¨ ?…šT&Xi}KªüøCqS.TQ'N)þÓ‰;5B;,ûÕþéEpP+þ÷?s_ýÚAeHNìˆB}< ü…aŒ(#´2!ÿã¯Õ!# .5!265ö¹’;|ÁþôÁ|;'qÌqÕþüýV™ÛCCÛ™®üpp2ÿãžî8#".=!32>54&#!!2>54&"!4>2ž>ÇŠ€Å…E*:U8?X7wpý¥[0C*[ªXþÖD|®Ò®}FRH5O4Æb°„ML€©\ )L:#$=S0_q1@#TOTUcžm:;nš_m&I^m!ÿã¯Õ .5#!26=!¯;|ÁþôÁ|;’¹qÌq''™ÛCCÛ™ªüppKÿå…Õ32>=!".54>7.+32%.#" =Wl[@$'R‘ÆæÆ’SBfx6:90 ]¥BIJ!øþÕ %&8\C%^gŒV%#T‹h®ñ”BF—ñ«|Η]    ÓþÉ~ Jªjfò!4&"!4> fþÙqÌqþÙ;|Á Á|;®üRøppü®™ÛCCÛMÿ°ƒò$.#"!5!232>Tot:[?!þÙ „ɈE<\o2“üÉ%L&8]C%§¡Ÿ%NyT<1@SžâƒÒ›eBþÍY6| Q‹»4î##54>32#4&'çþbUþ@ˆÖ–¡Ùƒ8þX`ºA¦xh„ÝžXXžÝ„üi§œªHˆîA2>54."267>54&#".54>32!!!ä>nS04\”c;.'3X( SL]€S-4Uy¢hœÐ}4*T€Vü%'Y%Ea<  'XWQ!F†g?7Sc,*!ý¬!)J!FS 7GNN#9~znT1e«äTµ©’2þûK!¯ò3#!4&"!4> ’’þÙqÌqþÙ;|Á Á|;®þôþüþbøppü®™ÛCCÛjÿãfÕ!265! .j'qÌq';|ÁþôÁ|;'®üppøüR™ÛCCÛ!¯Õ3!#".=!3267’þG.k>†Á|;'qfcqÕû/þüCÛ™Cpxl†iÿãgð?32>54'.54>32!4.#"#".5œ&=O*&F6!?ax|v[8*Fg‹Z‚»y:þÔ&9F >1;a||a;A~¹w{ĈH¿K\1*G8.?2,5Dc‡^+`]VA&@n‘Q3=! $;-4H7.6Gg‘e`¥yDE}¯kjfò!54&"!4> fþÙqÌqþÙ;|Á Á|;®Cppü®™ÛCCÛ2ÿåžîG"32>54.2#".=!32>54.#!3.54>Ž3D''D40C)(C4p¯z@KO:P2>ÇŠ€Å…E*:U8?X7:V8ý¤¶@y°ï/="#>//>#">.ÿ=pœ_^”(Sah.b°„ML€©\ )L:#$=S0*K8!*Y)^o>paÕ3!!!p'Êý6Õþ‹þüü¤±Õ -!>54.'.>75!#çIR) )RHÿIS( (SIÿ‡±g)*g°‡ÿ‡±i**i±‡ÿw+ZŽde“b23a“edŽZ+ü]£âÜœVzzVœÜþêã¤]‰3žî.4> #"&'!!!5#"32>54.Å9w¹»z;;z»€+f1ýcþÙ’µtK+.L98I,,žƒd©{EG|©cdª|FâþüššQ6L./M86N0.M7ÿÿ\ÿãuð2ÿã±Õ -7%>4.'#.54>;#".53"3æIS( (SIÿµ¿)\–nꇱi*,Pƒ¼‚»O,û )RH$. .$Õ,V€°zN% ’‘NrK$þ‰MË‚W›ƒiJ''Jiƒ›WWV, " ÿÿÚÚ÷dšI6×!#ý9ÄØc×þñþî¿f !¿þþÂfþˆxˆñH%#>7>73)P—vHü1WxHS‰b9ûBn™#2(L`?"+9'A~lPî¿f !¤þÂþfþˆxC¹@)#>32#".'332>54.#"Â7\{žQg¤s=*SzP1bS:¥6& ":K)S“sIñY„gH&7`‚K8hR19^F %"0 7`ƒ¼ñ3!¼ŒÌñ#©zPÿå`+%#"'&32>532>53#5#".!!eK‘78ð !2" í "2! ðÕmE!@4%pHCde;wý1@Q//Q>Ïý1>Q//Q@Ïû tBM%3•þV<{%!!!>32!54&#"<ý|þÝ#–j ¡þÝENO[ááþV ¨^eÑÓþëèziþ`AþV{(%#!#".54>325!32>4.#"mþÜl³dši76h–`Ê_$ýD4K0/L55L/0K4ááþVH»M–ÛŽ‹Û—Oèü¡¢€Z/0Y€¢€Y0/ZgþVj{%#!4&#"!!>32j€þÝENO[þÝ#–j ¡ááþVTziý`¨^eÑÓþ ÿãB!26=!!5#"&5!BýrDžY%þÛ”j¡¢%`áþ5yh‹óý0¦^eÓÑþLAþV{&!#".54>325!32>4.#"þol³dši76h–`Ê_$ýD4K0/L55L/0K4ÉáH»M–ÛŽ‹Û—Oèú×K¢€Z/0Y€¢€Y0/Z´ )!!!!Çüí%Cý½îþLáýb•þV<{!!>32!4&#"<üY#–j ¡þÝENO[Éá ¨^eÑÓý)ªziü¶6þVš{+<4.#"!!>323##".54>332>=#"(1_Q'PA(þÝ#G^l5O™vIEMQm€>HsR,5Wq<"5&#(f2(/=}d@%Ec?ûÕ ¨.I2:ˆâ¨ƒ«f)'JiANsK%þÏ5)BkM)=Aÿã&#"2>5#".4>;!3þÍ9N00NrO0$3PnY†¼w77x¼…Í$m/W~œ€[14\KRþ®M’‚mP,a¢ÔæÌšZ´þLá§þV*!4&#"!!>32*þÝENO[þÝ#–j ¡×ý)ªziûÕ¾ý¤^eÑHþV‰`!!‰ý¿#Éá ú×OþV3#3>322>53#5#".54."<íí &/6551& "2! ðÕmE451& "2" þV¾ýü'7_ŽdþÂ>Q//Q@Ïû tBM7_Žd>>Q/.Q@bÿão,!##".54>72>54./#"º÷ÚaéQ[-9D„Á~}Á„D"GnM7UtV7)<'*ms¼X‰›áG«^ƒØ›VV›ØƒZŸ…e ýýP€[16^I>`L<¯¦þV+!265!!#"&¦%DžY%þÛ”j¡¢‡û yh‹ƒùöP^eÓÿÿ¨+Kü™ÿã7.@!5#".4>7.546?!3:7672>=4.'7þÛ5I[5a…R$.X€QLPýø¦,G4Ev°¹¸²R&%0K]-V3lcRdögþVj{!4&#"!!>32jþ]ENO[þÝ#–j ¡ÉáTziý`¨^eÑÓü`ŠÿãFí*=!5#".5467#53>32.#"326=4.'FþÛ”j^„T&'$iÍ2}’¦\ "$! +% )KD<f©yCýŠ$&#OY#CdA##Kýµ¦^eLª]uæmáX’i: ø 0C(c‹©»E_>#‹ %SI6hÒÿÿ¦ÿã+`XþXÊ`%#!532>5!Ê,^”iþÄê1E+%+~²p3á9]B5gÿåj#5!3265!!5#"&瀣ENO[#þÝ–j ¡‰ªáû¢ziû ¨^eÑžþV3y323!!".54>7>54.#"'>Ul°~D'Aa„V_Qý|0P; 1Rm ÿÿ¨+{QüâþVï¢-!".54>7.546?32673ïýÀ*J8!2EPY.1\G+39x¼B#/?9#T2cF~kW=!Éá;U53y„ˆƒz2)E_:?ƒ:{¬@"G1?°8…ƒxf$*#PþV`+#".'#"'&32>532>53‘_6!@4%!eK‘78ð !2" í "2! ðþVÿ6:%3HCde;wý1@Q//Q>Ïý1>Q//Q@ÏùöŠþVGy,D3!!".54>7>54.54>32%">54.G9n¡i)C/&ý|1P: -=$!)>H>)Mƒ®ah°GþF<(','O_2/HÚ`ž™¢c'G=1á"9J'$RVT$!G&1J??OfGS’l?7j›X/>")@5/18#(1RsZM,%G7"u\{&"!!>32!!5>54.B-@)þÝ# 4I^7\†X*5F'ýý+<&*F+H`5ý{`¨*G5Fu—RPl+á¯0enzF8gN.ÿÿ¦ÿã+`XaþVp!#"&5!265!pþQ”j¡¢%DžY%ÉáP^eÓÑÙýTyh‹7ù#Qÿå{+!#4.#"#5#"&5332>73>32í "  ÕmE€oí "! ÕmEpÏ>Q/)H8ýtBMÓÙÏý1>Q/)G8ètBMÓÙ§þV*{!4&#"!!>32*þÝENO[þÝ#–j ¡×ý)ªziûÕ ¨^eÑÿÿuþX[}J¼`%!!ü¨%áá`üQþV+!#4.#"##"&5332>53>32í "ða5€oí " ðb6pÏ>Q/.Q@û‡D?ÓÙÏý1>Q/)G8œýãACÓÙAþV{*%!!!5#53!632#"4."2>Ó—ýiþÜnn$\Í`–h67išd³,4K`L55L`K4žþÝáDDáå¨ÃO—Û‹Û–Ný¢€Z/0Y€¢€Y0/Zÿÿbÿão{R*þV¦#)4#.'7".4>;"34.'>¦-h«ðBƒyh'º @CH(]c34iœiÑ~«i-ýQLGHKº.N;9N/A|Θ[þY§'?V4À5I/2Zš~Z2þFNˆÂr.x)ýá?fI-ý… ;[w.ÿã£%!5#"&5!265!£ýë”j¡¢%DžY%áá¦^eÓÑû yh‹ƒüÂ'!!!!ÂMþ³Mþ³'þ“þµþ‘-€¤ß%'-/HžþÅžߎŽþÝ;<;ÿÙ m$/#4''3767653653#"''##53³+²#*L¥&  š %™,s‚$ŠÛ»þ44؃ª`Opþ¶•Ô¦R3&#]|0qÂ<* üS3ýÐúÜE{;ÿÙ m*532767#"'&54767&'&5476'##53ÀB4V53Y31*"@GC1.N@?‡G?2,2&!e*Û»þ44؃ª`m|&z-,#-/ F?n=@;#þåv{ =TBV\ƒL¥¼98þôFGDC+P=YNŒcš -Þ%57&'&54767632&767²Îh8@}S‚nZdFG+”9:H:ZÍçê?LWaKaKQ6è&Xs%#ó4FD7ßCAƒŸÒRX£LÇÚ%5,iG—ƒec5ã0$ $*  êá,$ QB]WE‹fnfÄ`-S‘m‡\daçÙ‘Ö”w<$6!`‡]]T'ÿÿþãþÀ˜&c ÿè· µ %327654'&#"!#53!632YM,>5M(N365þŽ‹%65!"'&'&7!3276M 20šyæülÅ$.0`UZkFOIiøjû–þï·¯\HK‰éŠ\ssj1+-3<þ€Û,276'&'&'&#"&!4763&547632Œp1& 04¢Y2þçxAw~M©`bº|_ƒ‰'7&':ÿ&4OþìÇf7*—g?'H¯-8¬XDÿÿþµ°·&  ÿÆÖ°ÿÆ%Þ"327654'&'2'"'&5476).N(@A5/Vø¶“”ÇŽQ§%Tç=1V9>( <6-T÷ |”ÈPQ#Jï²Q¹Lþ “¤ &"34'&!5 767"'&'&547632û6LG( $L:0 ,*FŸ94D\0('3g' m8h"(uA~b7S:(0ý¤ ÿø5%5%0pýpþ¢ª¬ªþVª¬ª0€ Ö5%0p€ª¬ª*¤¦%654#"&'&547633"'&'5676Î &$ 50?4M_/?%M(=”ÿtVF,*#$!4D\0(%3g 1+k— 0þ¢ ÿø5%0pþ¢ª¬ªþºÓô(#'&54737676537654'3'&x=Es7"“ ,$“ 4G š +ˆ@&#^2$NQ2omb}8>#&!“RY$6¶ž€,It†5\ ;Æ•! 4&"2>"&462âFhEEhF³­ý°°ýô2GF34FG²ý°°ý®à¤ðò732767#"'&'àÀ>|*631„N:ŠB6^f:Ælq=& )LÈ0-Avÿÿ±–Žÿÿ±ý§ÿ Žøž8î˜4373ûÃÒ^^ÒÄîFþºÄ„û!!ÄJþ¶ûþ‰ldx )!dþä&.ˆ.l> ‰1‚<üþ>à}‚x!'!767!!"* þä%IiB=‡t/)uþØt†_pþÕþtþ¹mT›TP€fþä>ªx%!!7676537653#"'æ Dþæ7Cx<,2ô/<ò F·Ï(9y-Çý³8 {Ê)“[D >2¦Þ%,*Êþ¥1lL6 ¬ÿìäx*32767#"'&54767&'&5476`iSˆT0PQNB6fpkMH|eeÖpdOFO=4à xÜ!6E'5 Ú PN>Q!S#!'ÿ%}pÅmrh/>5l¯wUfÿÓlx "27654'&' '&47hPš5<ô<6RNLZt’þ’rZ–ŠþŒð·Q[[Q·ê¿»îþˆëîþ܆©©„&õäzBx!'# '53 ñJTþä[1½þö§´ý0xþ¢ýNþ˜|EeF2î2Zzx!!6767!êYm±,fJ Nc/®n?5&<—æúeNRaýãþ{þoçþ…Zzx!&'&'!6êZl°þÕfKMcþЯo>4xþÚþÄþ‚þhæúfNSaüä†ç{z|x&'&'&7676!&'&#"ЈZÊDgvi¶\6/1vþÇIF1>3#""@:Œ#Gl˜›ocyGþ¥þ—þ O%²(H'%s'ˆJ 3#3#!!@úúýVúú” ý^þà,þÔþÔ,úìþ÷Ë6767654'3³is$æKp˜mõ\erPO``NoÔv°_E9¸â!# ¨ºVéþ·I’Î@L !!%’goqgþÝpþÛþÝo÷Uþ«Ôþ«ÓÓU± 57&'&54767632&#"7»T "$C5H@&_ Šÿÿÿÿ–ÿ|ÑH&    ÿ†]l-%2767654/&'&54767#"'$47!&xH^'45œ!"1K7þ†9 ~xhWohúplþ¶,&y1l".BX6]EÊ+//193J<Èþ¼þÂ01) ˜|Þn]30 b,¦@^ˆn@ÿÿ ÿ†_í' ¨œÿ¡ÿ©Ñü)7G%63&'&54767&'5#"'&'#"'&547!%27654'&'67654'&#"9"*%D(3éì?=bÒf^E=SŽãP8C!N'-_"ªxƒ>fy(&547632&'327#"'!! x\‰úéààæý$…J£þÜk—¹ÇÜ –þjþòÌܤ£Öúx3767&'&547676&'&327ÖŠ†04†trÜzV`jXX>+a­?ðþê,ÒVv)k™›rm!ÜRA@!ôJþYÃÿÿZzx‡ÿÿZzxˆÿÿz|x‰>ÿës{%#"547"54263 !4#"÷游ʑ,L«·þÛ–f7¸ÍÉËpÈÀQQþ¾üÇuYlÿ°àŒ)"2546632&# '%7654t€€$äúåþ˜¶¸P‹š{¼¨”„ŒR~ÌþÓš²ŽÜ8:¤€t¨qÅþ­þõu;;=Mk¨ÄŒGùÿ…:.j‚)åyÿì}Œ47&76$!4&$'632y*, åN¿þÛ~jé÷+8HÌÌþu]€6OÓÙþàþÖý¿A¯¶£$ÂÆ,Ll^ȨþHŒ 463 &'%327'&32'4¢Ü:NJþÄìÃ*!y¬é çÐÖ@?A¦quýôýþùxsÍæ Ñó± A@@?Kÿÿ†š &"32654& 76'#5432!"!54n$ % *+÷þÛC{aKKªGþÉ‚ 5"32654&"76767$326765! 54%7654$ % #Õåtæäþ®º}“†QÒ†øþÂþe•ª­Ìm0o %"%ùɃ@þ¼â„<@BDkŸóþµQc¶CøúŒ;;eo">!½fÿãkz 3265!$'&7&5!2#"'3jþüøj~$¾þ²åþ÷,*Xý¼f,_¸²b…´¯2ýÎþÖþà×ÕO6€h­µKŽM{ÿãV{$"24#"54$76¦€€‹ÉȬåëÚÅ)ë€k쪤þƒ­ÈÈŽÇyxÌüÇ5ÿ✡ *%"32654&"&#"2#"5!23263!4#" $ & *|H, ¬êæ<¬8@˜>þÚ"&Yñ %"%úÓŽþPÄÚÒ–Wííþªü¶0ˆÍþn{$"272#"5"547663 !4#"Õ€€ÚÓ¨´9y‹6žþܸu3ï€ð§ÕãI¹ª jdÕmúÛbJSÿï~‘ +"32654&4323254#4%$7" $ % ëËàºfz3%ð:?þ—þ¨·µ( %"%H±­Ú¾ü˜|XðíüsEhfýñþ¹\[Kÿㄌ24#"5765&5476325!!"'€@>¸]J*½âþuP]#þ„Ê8Zs€@ü0á[2JFÌÝÛýfH²ÞüÑþ²MM}ÿïT|"247&76325!%$©€€þÔ›œåì¯ÀÏ%þ þî€ýÒ÷§&¶Ä¼¾þø¨xÔ´ýLþB}ÿïT"247&76325!%$©€€þÔ›œåì¯ÀÏ%þ þî€ýÒ÷§&¶Ä¼¾þø¨xÔhû˜þBTÿïü0 A"32654&!"32654&"' &54323253325&74453Œ$ % ýŠ$ & ¬TeþíœâØÉTXðXTÕМЀ…ù %"% %"%ûöJJ«’bß©Çþ4„„4þˆ‡Ì¨Ñ+,¸ýÍ@þ¼Tÿï} +"32654&#"' &5432325332536$ & 'BC¬TeþíœâØÉTXðXTñù %"%ý3^^JJ«’bß©Çþ4„„4þˆ‡èHÿïˆ} ,"32654&2?33253%&'# 47&76D$ % LRðZLðþÄ’>%ÏþÀ™Šä þðÒ %"%ý§á㩪ÝüÑþÀ,-=ð¦%žùÛ‚þ°P§Hÿïˆ ,"32654&2?33253%&'# 47&76D$ % LRðZLðþÄ’>%ÏþÀ™Šä þðÒ %"%ý§á㩪–ûþÀ,-=ð¦%žùÛ‚þ°P§ÿã„`!325!!"'#"543225"™Š"þTð)3¶Æ„u`ý,ÀÀÔüÅþ¾88œ–8‹fÿãk  32765!$'&7&5!2#"'3jþüøj??$¾þ²åþ÷,*Xý¼f,_¸²b…ZY°æüþÖþà×ÕO6€h­µKŽMdÿ )"32654&4%$5! &#%$&763232,$ $ /þõýôû(”ô¼î8Þþ.þ§ßÒÜ <–¡h $ $  ,^ö$ü“»RE?`þÔþš²{Ëä<>ÿ +%"32654&! '&'&7 3654#"%6#% $ 2þØþð,ŽL¹âç¤/-(ê°9þáXø!$ $•þ‰ýÔù¨·Öë‰þUz¨Æœ1o5Oÿåx{"326! %,'4323254#"0@@<þô)Ý þ þðþÜåô=;ÒèÕT€€ÎYþ×ý¸þÙœÒ÷ªr¨˜>ÿï0!-553! '&'&7 365# "32654& 54!"CЀþØþð,ŽL¹âç¤/-('êýð¤ý)% $ þæþLäþÍ@ýÃù¨·Öë‰þUz™!ü.!$ $‡6/'=ÿ訙 4"327$"327$7&76365&5632676#4#"%€A?‘€A?þþp‚Œƾ6\˜’Áw5@Wæò?:@@@L@@@üE>©/™µ²>iþ¶µ¬©cbþºü©•ý¤þ³Xÿ #+"32654&%$%&'&54327654=$ % ýèýê骅Ýë Ac©÷ôõ÷S %"$Ð36þÑýŒûH9ªÖíGt6caf5ÿïÚð 1"32654&$'&'$6!2327#"&#"%$&76$ %   ñýÙp¿h@\†ºbÌj„ýÐþÌöàØC‹ %"%ÎŇD0ütËHþ”G_)RþÒþqÒ}ßÙ] þýÑ¡ ''&'$! #"'"32?6‡¨+(x¥sûþ±x Ó8@7YCŒ´t þßþý¯N*(ˆ»ƒm©¹Es¡JžÊä¼þÍÿÿRÿô’Š'Çý^ÇúþRö’, '&76'&'07²þ¹ëào V®Ìö@P©þí5)C21¼ŸsþÚkf´!4#"! fþܺN=æþìÛöý Üð Auþö ¨ÿÿü—fÄ&È×û/ ùÇš%$ 5 '& ýü[_ýþþþ›0~º9eþœþÔº}¶ÿ–ë²%$ 3!5 54 ýü[`ªýf þšþ›G~º9fþ›P3ºº}´ ùÆš%$ 5 '&#'57 ýü[_ýþþþ›Ö&&á&&0~º9eþœþÔº}¶#º##º# _²%$ 3!5 54#'57 ýü\`ªýf þšþšÖ&&à&&G~º9fþ›P3ºº}´#º##º#iüëÿ&7'6'&762'6C3217*9ßÑ{[låƒþö,.--Ú¼ÈTb•€Ú‚f ýxmÿÆ&7'5667&763253% ¥¢2A˜šKA |•þÎþÛº þØf@T‘wdD:0;QFþºÚÿëâæ, &'676'&76L˜Èk`W þrþÔþåŸÒ,þÅsœWf-2G)4îû¨G^ÿ÷ýƒÚÿ&/'&767%254<±j‚#àè~½m]™²»ü¿! ýÉv*GÞÄW‘}¦Šèv"òEßÁ#ÞíÁþ„|ÿüúÕX!567&74$7673 þ—ɾ¹7iz¶ðúÐ%.£—°ƒZ?^¶ýÚ3óÙ´476763676'3!#5676'&'&'&3&76'$‘CM=!JXY[xß5þ¼ôâ?G¨b*­gW’/A67 ãˆ*u…t7.,›åÀU 3533##5#ðÌòòÌðzÛÛºÛÛÿÿÿ÷ÓÚíÑPhiÄ%&767'6&jÿþþþ½=DAAÄÉßÛÌÌ566bqŠ ! $546732654&'3.'!'qþýþúþÿþü-(÷xikvYK¦“@,’ùþûèí6\,"H%ŠŠƒ]x8Ú¡WeŒdn'6.#32! 6756&'&5!94P54S;9R3Õ5ý÷þÊÁC8½,Tf[·¼SƒZ00Z‚SPyP(@ýêÖ3i*3 !ø_#…bsBþüPþn*-%' 7! %>54.#".5! d÷ÿ}~ýýëýæ'3B$8, ¦†°/6O þõƒ† þáÏ /D2# "/--/"þÄKt/~þm¶ V4.+"32>5>7.54632632#".5.+"!4.­%' a+%!4"üÎ 'AT3¿À]KK™c–d30a‘`@eO8$C =c„c=þÔ"8HKI;&m8S8þ×9kS2"=U3ý_.,#C’£¶iëñEE3m¬xµr4&@SZ['š )þŠg’iI;6BY@-'+#aþnp*'%! 46732654&#".5 pþ ýæUQ² €sghfdXf Ö#Óïþf£JG_*)*jd_`mjQW8F"Z"76;(…þSbþnp*:! $'4>7326=4&+532>54.#".5 pý÷þÿþý !î xgmvcX??)E16K.`q Ð'Ü_^d`þrÓÕ=A?S&P#llUX\XUÑ/H23M5KN'4b09@ mþ``“4#Œmbp 34&'&>4.#"326%! 467.7! |54&+"#"5!263  D) E243Ÿ2R<×6:!_ IwWÈÍ †PIpl0@$þËHHLB«N‚y}IBfbmIS þÖ~½~? òEEþLbp*'#>54.#"#.5&!2p0UDå;?7O18X= B<çGX2 €À€?!T•…z9LŠ„BHtQ,+QuJA„‹L8x…”TüE…Âbþnp1!# $54>732>=4&+532654.#5 oüûþôþ÷*/¾ ~q1N7IX……UL=r¦iÑ_onqÍÅ×Ü$RK<|'su/H3/nwÜDK-E/àþn_|#*¤€bþnp*6"!.'.#"'>7&546! .5467>54.^ÖŒKþÐX;$ Ji$Q5qjý ,# ô  #?WUþôÃþÞdî¤Ugn¥3>~*®ìîññ?l- ! 7*&=0H'Q>DdA dp/4.#"326%# 4>3254&#!5463 J:T45S;qaq&?~¼}ýêAÂFn*yoU`þÎ÷ð WtFEnO¢––kl®{B„»w6*6ß^]46bbžŸÃÆbpõ 4&#"76%! $5&63!!">3Jtmiwsjmw&ýôþÿþýÅÆ ýâ((0gF ¢¡šþ¾¥©ýæúû‘¸·Þ4Aá37¶ 6!>=4&+"#4&/"!.=432>32¶(C3þí6A$ 3-?â7*2 'G:þÝ3D(ÇÑ3a$#W2ÓÌÔ:uuu;:mhb/÷Y[þl”Y[ñ0ein:73326&+532674&'$5!#pþýë&#ò  }rar}l{Na‡rþ©%»ŒPUjkæþÁ349 !524!vr‡ŠÌML6B <ëL,þè]‚)<´aþnqO)%!"$'!32>55 54%5%qýòÿÿ&rd<_C$?> 7C% Bä¢hþ˜þZÒÖkj5P6I CRc9Q{R*ì]ÛF¶Œ¶A!>54.+"#4.+"!.=4%2>32¶ "B9þÝ=G"  @â  E "HBþí9I*¬§ñ%”ô^?m$(hL³¹Ô73! 717dsÕ reþÛG„¼uØw»DþØþ×þÓþÒLýõ Àü1þí2úÀ—î­iDþ¹h­òšþ“þ”qþmp@D%# 4>73254.#"#'4.#"#".'32>32>32oòëýÿ*8— ‚p¹ "' ž $!#-#!$3+*< #'*"*5#5I#&rA«°/àâ·)WRGm3^5spëÓ9T7ªª6T:$,% )0( ' C77CÔÔþn¶*S4&/"32>5+".5;2>=#57##54632632o #/&—A}·v"j±€H".")8"þí)7"'5þAi‘Z(.džp(;B!(:&è½Òþél£m7ö,Öß$!EÜÒ6`RD:AD"bþnoí7%! 4>732>54.#".5!2<645!oþýÞ 3%Ñ~v1R:!:aICN  þõ ¯KF9fþ¸#@?A#A3c1sp"GkIw´x=8;,(&W"<:@'H 657!9þm¶*F>7$5432>32>54.+"#4&+"%.'&#"Â5þíÃÄ>d&'kFºº+C0ý%8% WâB%›Ž«Ô*þØ+4)"^?˜&2 üLý$##$ÿ÷B>me_13UKF%J(1þ^ 1(ß§ìGVØ…%=/" 9<dþnp ,! !>=#".54>7!3265!pþ ýé7àdl"847!€Á€@8aJ7=T73L3qu%þuÈõ]_ý' /k«{Brjg6=_L?:9!GY3Z]ãv@4.#"326%! 4>34&#"#54.#"!!2>3 P V^'þþêþì@€ÁCl-17%*§#%þìZ‚%#{RlSk?>iQPwN'›yþ  „¸r430RQ np 5Q6¦UOQSþªbp/4.#">3!654.#"!4632Â.B(BH18F-8¼ƒƒþĈ•"A[9chþÚØÕÝÞ2)4]F*§0;! USÜ%þ ¢þðp“OqJ#ˆzý­Ÿ¶¹¤¨5f?ZuŒ9þo—P4# 54>7!2>56+532'6&'&'!{PHY[;‚Ó˜þäþæ2P:ç*8#Qh;sèáa97¯!+)]h‰Fy1@˜X~¾?ca\N¦°»byA‚„…C•þ$O|X¨Î‡+=8âBR"vbpí 4.#"32>%! !2J 54.#"4>32>3 !4.#"#54.#">72!".5„ 6I+>^>9Q46U< þÚ2XzH)PG:&Zþì%#§*%++xCÁ€@þìþêx´y<NuO'!GqPQoF?kJqL')=)QSþZ6Q5 pn 1)þÒ+8:z¾„þõøMÇ{bþnníG32>54.#"! 472>'4&'.'" !!3#},69.,59/ñý÷ýû‚Õ  uh5V; `P4=  þ‚ "1½À)UUø&C11C&%@//@üõþ\¦l $$c]5O5Dn*0V*\b–þE#è F4/T9aoí 4&#"326%!".5!>3Jyhluxlgw%þÿþþƒÃ‚A$0oG¢¡ £ œ›¨þóþôLцºýÍ<5aþnpá(%! 46772656&'.'7%!%pþ÷þøþ@AÑqfm~`Nbcþœd xþˆed`dÍ×·Q§Uˆ2]3suioU‚'CˆH»5e)þ§OþüŠM>H·bpA! 5!32654.#!5!2>54.#!5!2>54.'.53pþÿþýýö%ofl€  þé   þè !.'!32'4'#53>54.+532654.+5325&'&'3pþ0ýÎ%! †´F»»"$ ¼¼"# »»Fƒ¸×$8F#¿#Ö`/-ê$ >¥GbbEJp=›†@Nbþîp* #>'6&#"267.5% 7$'ˆokk}mftÿHj }{ †‚&mCþ¶˜[ê…¦$#¨„£  ýaXê‘ýè’çXþÚQšNv+aþnp*"% 7326=4&#5326'!%pýñþ+*/vgi|”®®roþ›þÚæz}|þ`§“{jdtjypû«Å• ßþ»d=º|aþnp8%! %32>=4.+53>7#.54$"32$7pýõýü&wg4U< !>V6ØÕ.S@(9=<ÂA!!œšøkš†††…þZË}}3O55.G/á0QsH 4c’]ʽÐdb koþ¢®ëB)•smš'#"325;54#"! !35#$! 3#3ʽÅÂþy½ÊÂÅ›þ&þäÊÊþìÖkkk˜¢4¤¦“ü­†þc{L~fþš¦ÙLõþo¶* 34&+"265%!"'#52>'4&'#&3$5!2>3##P#3d!&þ£<(ÞÖ+I4bzþ_[ R(yQ\Ù@<<þ5>:<~‚Cþ%&‚Ñz{þ7ÑÎPþn8654#"!6=!! 47.xóñðõþØþˆõ]~þhþ‚¤«œqÎ!"ÍóóÇþ:þå±b}…^ooþÏN½c5Èÿ=T+(4&'.#"'67.5%'>54'"®3SNÙIm2R:Í¡ë86µokC/X£CÃ.L†|n#,m|‰IÃ'þ±´þÄbz¿D¯wwLu*.T*kP1Âï 3#3#3#Óïïþ<òòõõŒÐ»Ð¾Ò~àR4#"322"43!%"¾\PUX]òìèÑþç' œ¢°Óþãþ×*CÄw;l5ÿãË{ @32654&#"26=%!4&#"5>32>32+3267#"&'#"&ðIWY@=?=þ&2~2þ=Ãd_A=Bî/fÿêk{2#"'&'5327654'&+5327654'&#"56763 )ŒHIþèñ]hjyˆTlz2US>hu·2@`g#qriiXohib'Ÿª(@BW­ž ì &1EÛ OY"ì[\p”iýãgd %!!5!!!!!ý¼þ”þþ“þáþÛ%ááýbüþVÿãº{ (3!4&#"5>32>32#"&'#"&26=7326&#"Âc_uAH•ììþvììŽ&DžX&þÚ–h ¤+ÿÿ¦0)5!264&#!5!264&#!5!#GDÈþÄý‰Ï}TV{ý1Ï{VT}ý1`tBMQÐ!fJ‘oð&d(í(d&ðÕnˆpøœØà 33#'##hX°Êäþº:ú8ºIþªíü¼ÏÏôœÜà#3#3!5##3褤Äþœ²6œâp\Žà’®‘á’ËËD’þc"œ®á3264&#32654&#%!2#!Ö|XHLT||F<>DþÐ0œž\\ln¤¸þÐø6†<FÃ-43/ƒjiQZ nbym,œ¤à32654&#'32+æ2n\\nìÆèÊÊèÆKýæ{“’z•ÃþDÅDœŽà !!!!!!Žý¶Jþpjþ–œD’´‘ÛDœŽà 5!5!5!5!5!Dþ–jþpJœ’Û‘´’ü¼*Œ¨ï5#5!#"&54632.#"326~"6‚J¶ÆÈ¾8n0(dJD䞦<‚ÅÀ14AG¦’ýÈ™ƒ œÆà 33 ## º"ÒþØ4ÐÞRºàþ¶Jþ·þx]þåDœŒà3!DºŽœDýN’œ¶à 33###ÞppÞ d”d àþ‘oü¼žþ’nýb0œ¢à 33##0ȤÈþú¤àý `ü¼`ý 0œ¢à ##3¢¤þøÆ¤àü¼`ý Dý `Œ²ï "265446  &°BB@þ.¦H¦¦þ¸¦[‡—–‡‡–——×ÛÛ×ÖÛÛ2œžà32654&#%32+#ìLZJJZþúþĪªÄDºUõ7DC7‹{Š‹{þÇœÂà#'&'&+#!232654&#¶(ªÌr2D:º ¶ž`þºVLDBN'%4þÓÓ ^þ¶DrVf$ä5>=4œ´à##5!#ĺî˜ðœ´(Œªà32653#"&(ºF€Hº˜ª¨˜ÑýÇ?GG?9ýñ«ššäœìà 333# #ä¢DPœ^4¤l®jd¬àýšþsfü¼·þI)Œ¨ %"326=7#5#"&546;54&#"5>32§gR81IQ··"h?y† ¨€A?B}C=~G¬‹Ã/:*3bX ?þšF)-qeni() Œ|)Œ¨ ,27654'&#"367632+32767#"&*g))1J((··"35?x‡QO¨€! ?B>?B<~G¬‹è9*20X @fF*qen54( Œ|0Œ¡53#5#"&547632264&"鸸//@y…DC~8.,ßDxEEx¶Yý]6¬ŸUU»¶gg¶g÷ŒÚ @32654&#"26=%!4&#"5>32>32+3267#"&'#"&5¯.78('(&þÕ O þä?<&K& O4A^R>em€010$U..Y(>NR:p\..+*(*01º F55F vPU! ˆ/-0,g_hg45Š"%"%…ª0Œ¡4&"2>32#"&'#3éDxEEx½"Z8~‡…y@^¸¸y¶gg¶g¤44ªŸ¬76]g0Œ¡3#5#"&54632264&"鸸^@y…‡~8ZßDxEEx¶Mü™]67¬Ÿª4»¶gg¶gŒµ#"&54632!3267'.#"˜@†J±»´›­þ"a`@{DœHG?L»¨Ÿ™²¥–CJH #ËABE?Œµ>32#"'&=!.#"327679@†J±^]´›WVÞa`@{Dœ$$G?&&ïTTŸ™²RS–CJH #Ë@"!#"?$­2&'&54632&'&#";#"32767#"'&546ïX-.°˜:BCLV5DM64'BJt)ºbekÝ$%1aX„ &z ,2 „33?HS$­2#"'&'5327654'&+5327654'&#"567632âX-.°˜:BCLV5DM64'BJt)ºbekÑ$%1aX„ &z ,2 „33?HS.¯£ &4&"26#"&'5326=#"&5463253êHtGGtH¹™¬:r:4l:NJYAxw=^¹àTeeTUeeÀ—…—AFC,,¨•®2.P'mª !#5!#3#53yþ“åƒæµµ¸¸žõ~~þ‰þQÀ&œ« 373##&¹ÝàþõÌÁ?¹þ7Õêþw%5ðœº>32#4&"#4&"#3>2–A.\E—?•?—†FUGÐ(&p±þŸ“F/0Eþm“E0/FþmsA%+-M¯„+532654'&#"#3>32„:8…L?312¸¸_Be333þ<<~=JfD('Gþ™s^49:<"Œ¯ "3264&632#"hBLLBCLLþw±•–±±–•™h¸hh¸hþ¤0±±þбOŒ‚053264&#"567632#"'&O*./6ZaaZ41/)4558¤\]¸£>65¼—!e¼f– WXþÊ® "Õ¯ 4632#4&#""±•–±¸LCBLÕ˜±±˜\hh\"Œ¯Õ #"&533265¯±•–±¸LCBLÕ˜±±˜\hh\0­¡#3>32#"&64&"2踸^@y…‡~8ZßDxEExôþ¹b^67¬Ÿª4»¶gg¶g9œ˜Á3#;#"&5#535¦òò.6Ž›ŸpµµÁ²~þ×*$~Zz!~²MŒ„32653#5#"&M¸+d8¸¸^Befw˜þD:OFhý]49vÿœÒ•!5!264&#!5!#Êþ5®MAXOþkÁh:@…œ¤&Y2¤¤S;Y\º"#"'&5326532653#5"'&;A.\"#—?•?—†##U$#Û(&88±aþnF/0E’þnE0/F’ýA%œº#3ºàãà»–—ýsþéÿÿ&ª¤<ýdÿÿU|ƒYýdÿÿMÿð„s8ýdÿÿºs;ýdbþXH} (%32654&#"6!2.#">32#"&'!‡r]\qq\]rþÛó\´]S¬[|v+ŽfÀââ¾`–+þÛ“–µ´—˜´µW ïþó.,u|yPNþÔþÿþöþÈZRÿÿ:œ–àjh`53!5!!3#!!5!5æðþ”þþ”ððlül¶ÂááþùÂÕááÕZþXF!5!;#+532767#"&ƒþ×NRbêSZÒy'b+"ѶÓ`áû¿„n9}+Ødlá7,dØ0Œ¡#367632#"&64&"2踸0.@y…CD~8ZßDxEExôYs]6¬ŸUU4»¶gg¶gOŒ‚#"&632.#"3267‚/k>£¸¹¤8j4)`4ZaaZ6]*¼®6¯–!f¼e !JM‡,;2'&#"763#*''47&'&7632&'&#"…$"]R4€Ak´ÆA~3'\]]£8554)004Z01 * e‚µ@4'$W6XW –33^V%Œ¬ (.#"32654&7#"&54632''7'37æ>BMKAEI J?6«™”¯£‰(eÄ#²c¸:»*®FQFXdea7ÝMU›®«’„zBA=qAHEB$­(#"&'532654&+532654&#"5>32â`kǺ>„F8„HGWetJB[UMyVL…:˜°[Ý SH?f„2,z&" „ Xa1IJœ‡3###53546;#"®ÙÙ¸¬¬i˜*F7~þ õ~,qW~t¤]33#+532767#53 âppADp'@……þv?C„B2­Ÿ(#"'&5476;#"'&'53265"326=å'[ ¿ü­v\/<ž›¤~ýg+#,£¥ #5!;#"&è¼t4=”ǃs©Ü~ü¦J>~y,¯¥#5!;+53267#"&ç»t4=”57…L>0„s¢ã~ýŸJ>~x;:~78yxœY3!!yÌþþ0£­º3>32+5327654'&#"#4'&#"#367632–@/\#"-.n>3  •  —†"#+*$#Ð(&87²þŸz8=~J|FDþm“DFþmsA&­º"#"&533265332653##"&;A.\E— • —†F+*GÛ(&p±aþnF/0E’þnE0/F’üž0%+- ¤Å(#=4'&'.#"+53276=367632ż &:!"98kM4º*0/9e45þ‚>æR10U¯{ rCC„K{í\7BC¤Â"4&'&#"#367632;#"'&5š6&!ºº*/09e445Jj8<0( 1*[þËs\7BD~þK„CGn0œ¡ 33##0ô®Ïô®Ïþ”lýmþ“"Œ¯ !7632#"'"!3&'&+3276"XY•–XYYX–•YîB&&Eô &BC&=0XYYXþÐXYY´4(??(4þø-44ñ­à#+7675#5!#3!535&'76764'&ñfHm»/»mHffHm»ýÑ»mHµ//Ï//=0X@q~~q@XþÐX@h~~h@A^ 4¸4Rþ¢ 4¸4O­‚:&'&#"#"';#"'&=327654&/&'&547632S3787> ‡5e/.GH()?L„99=?@;A!"0Y3i10IJ†;<;ü- /0Pa10.~=< " -.L[22 ¯´+532765476;#"Û5:ƒÈ”>55˜‘*œy8<~ I‡q,+~ $9¯˜Á3#;+532767&'&5#535¦òò.6Ž59„L>†28µµÁ²~þ×*$~x9<~8)-z!~²Œµ"#5#"'&=#533333+3276ˆ¹0/Ae4344¹Æ¹-çÅ12‘õ]4;;umþïþïmD'!b·$327654'&'5!##"&54767#5!?)H;<#$) /,#¸’‘¸"'1%q+-AG%n›¸$#'&=#5;?27654'&/L)%OO|Fh99ee¹ <+&+lÛ!J=XŽYXDC~¯D~¯_71P<@/(fœº3# àãà»–—œsýéþGœŠ !!!5!V4þsý½tþ›€þˆ{€y­Ð!!;#"'&'!5!4þŒt?L„95þttþœ€þˆdJ~=7{€y.]£3276'&!367632+'47!5!üþ?3þ‰;1™€þ²tþœ («€þˆB3_šµ$€y)¦¨7!5!#"&'532654&+¨öþ›4ö[1G^Á¹AƒA>x;W\_\j™üz€ÿ yP|¦<79;"ޝ .#"3267"&54632õBCBBADEA•±±•–±±l““l~h––hþòÎÏññÏÎòÿÿ!þ °Õ&$«ÿÿ^þ T{&D«ÿÿ}‡k&% õÿÿ–ÿãw1&Edÿÿ}þ2‡×&%©ÿÿ–þ2w&E©ÿÿ}þj‡×&%·ÿÿ–þjw&E·ÿÿ˜þoAk' í‰u&­u&ÿÿ¨þopf&vf&­HFÿÿ‰uk&' õÎÿÿZÿã;1&Gœÿÿ‰þ2uÕ&'©ÎÿÿZþ2;&G©ÿÿ‰þjuÕ&'·ÎÿÿZþj;&G·ÿÿ‰þouÕ'­ÿH'ÿÿZþo;&­†Gÿÿ‰þuÕ&'³ÎÿÿZþ;&G³ÿÿ¨þJÕ&(³ÿÿ\þ}{&H³'ÿÿ¨þJÕ&(¶ÿÿ\þ}{&H¶'ÿÿ¨þoJk&­2&( ôÿÿ\þo}F&­2&HŒ'ÿÿ¶Xk&) õÿÿ®;k&I õÿÿuÿãjN&* ù2ÿÿbþXH&JŠÿÿ‰Hk&+ õÿÿ¬/k&K õÿÿ‰þ2HÕ&+©ÿÿ¬þ2/&K©ÿÿ‰Hk' ìu+ÿÿ¬/y&KjHÿÿ þoHÕ&+­þ±ÿÿCþo/&K­þÔÿÿ‰þHÕ&+´ÿÿ¬þ/&K´ÿÿ¬þ%Õ&,¶ÿÿþ&L¶ÿÿuÉk' íu.ÿÿ®®k' íÿuNÿÿuþ2ÉÕ&.©ÿÿ®þ2®&N©2ÿÿuþjÉÕ&.·ÿÿ®þj®&N·2ÿÿáþ2Õ&/©2ÿÿZþ2F&O©ÿÿáþ2N&˜ ùÿÿZþ2FN&™ ùÿÿáþjÕ&/·2ÿÿZþjF&O·ÿÿáþÕ&/³2ÿÿZþF&O³ÿÿV{k' íu0ÿÿRƒf&vPÿÿV{k&0 õÿÿRƒ1&PÿÿVþ2{Õ&0©ÿÿRþ2ƒ{&P©ÿÿwXk&1 õÿÿ¬/1&Qÿÿwþ2XÕ&1©ÿÿ¬þ2/{&Q©ÿÿwþjXÕ&1·ÿÿ¬þj/{&Q·ÿÿwþXÕ&1³ÿÿ¬þ/{&Q³ÿÿ\ÿãuù' í2' î2ÿÿbÿãoú&w&R‡”ÿÿ¢{r&3 íÿw|ÿÿ–þVwf&S‡ÿÿ¢{k&3 õÿÿ–þVw1&Sÿÿ…Ñk&5 õÎÿÿ#1&Uÿÿ…þ2ÑÕ&5©Îÿÿ#þ2{&U©ÿÿ…þ2ÑN&¶ ùÎÿÿ#þ2&·Šÿÿ…þjÑÕ&5·ÿÿ#þj{&U·ÿÿÿãVk&6 õÿÿ¬ÿã+1&Vÿÿþ2Vð&6©ÿÿ¬þ2+{&V©ÿÿþ2Vk&©&6 õÿÿ¬þ2+1&©&VÿÿZwk&7 õÿÿo1k&W õÿÿZþ2wÕ&7©ÿÿoþ21ž&W©ÿÿZþjwÕ&7·ÿÿoþj1ž&W·ÿÿZþwÕ&7³ÿÿoþ1ž&W³ÿÿjþ2fÕ&8ªÿÿ þ2%`&XªÿÿjþfÕ&8¶ÿÿ þ%`&X¶ÿÿjþfÕ&8³ÿÿ þ%`&X³ÿÿjÿãfù&8' í2 îÿÿ ÿã%ú&X&w‡”ÿÿ9˜T&9 î\ÿÿP&YwØÿÿ9þ2˜Õ&9©ÿÿPþ2`&Y©ÿÿÑr' ï|:ÿÿÑm&CÏZÿÿÑr' í|:ÿÿÑm&v1ZÿÿÑ`'j/:ÿÿÑë&jºZÿÿÑk&: õÿÿÑ1&Zÿÿþ2ÑÕ&:©ÿÿþ2Ñ`&Z©ÿÿ¶k&; õÿÿ7š1&[ÿÿ¶k' ìu;ÿÿ7šà&[j¯ÿÿÉk&< õÿÿ;þX˜1&\ÿÿs‰r&= ð.|ÿÿ¢9m&]gÿÿsþ2‰Õ&©=ÿÿ¢þ29`&©]ÿÿsþj‰Õ&=·ÿÿ¢þj9`&]·ÿÿ¬þj/&K·ÿÿo1&Wjÿ¢ÒÿÿÑ/&Zuÿÿ;þX˜/&\u ÿÿ®;k&A õÿÿbÿão!úÿÿ!þ2°Õ&$©ÿÿ^þ2T{&D©ÿÿ!þ2°r&ò ð|ÿÿ^þ2Tm&ógèÿÿ!°ù' ï&$ ô€ÿÿ^ÿãT¢&ņ<ÿÿ!þ2°k&ò ôÿÿ^þ2T&ósèÌÿÿ¨þ2JÕ&(©ÿÿ\þ2}{&H©'ÿÿ¨Jm' î1u(ÿÿ\ÿã}&wßHÿÿ¨þ2Jr&ú ð|ÿÿ\þ2}m&ûg"ÿÿ¬þ2%Õ&©,ÿÿþ2&L©ÿÿ\þ2uð&2©ÿÿbþ2o{&R©ÿÿ\þ2ur& ð|ÿÿbþ2om&gÿÿÿãÍk&b íÿ‘uÿÿ ÿãÈf&cv—ÿÿÿãÍk&b ïÿ‘uÿÿ ÿãÈf&cC—ÿÿÿãÍm&b îÿ‘uÿÿ ÿãÈ9&cw—ÿÿþ2Í&b©‘ÿÿ þ2È&c©—ÿÿjþ2fÕ&8©ÿÿ þ2%`&X©ÿÿÿãÌk&q íÿvuÿÿÿãÊf&rvÿdÿÿÿãÌk&q ïÿvuÿÿÿãÊf&rCÿdÿÿÿãÌm&q îÿvuÿÿÿãÊ9&rwÿdÿÿþ2Ì&q©ÿvÿÿþ2Ê&r©ÿdÿÿÉr' ï|<ÿÿ;þX˜m&CÐ\ÿÿþ2ÉÕ&<©ÿÿ;þ2˜`&\©,ÿÿÉm' îu<ÿÿ;þX˜&wß\ÿÿ6ÿçŒr&Î÷ÿÿ6ÿçŒr&÷ÿÿ6ÿçŒr&Û÷ÿÿ6ÿçŒr&è÷ÿÿ6ÿçŒr&Ü÷ÿÿ6ÿçŒr&é÷ÿÿ6ÿçŒÓ&Ý÷ÿÿ6ÿçŒÓ&ê÷ÿÿ°r'ÎþHØÿÿÿݰr'þØÿÿý™°r'ÛýØÿÿý°r'èýØÿÿþp°r'Üý{Øÿÿþ4°r'éýgØÿÿÿT°Ó'ÝþHØÿÿÿ"°Ó'êþØÿÿ•ÿêr&Îûÿÿ•ÿêr&ûÿÿ‘ÿê2r&Ûûÿÿ‡ÿê<r&èûÿÿ•ÿêxr&Üûÿÿ•ÿêŒr&éûÿÿÿJr'ÎýIÜÿÿÿJr'ýIÜÿÿüÌJr'Ûü;ÜÿÿüÂJr'èü;ÜÿÿýgJr'ÜürÜÿÿý5Jr'éühÜÿÿ¬þV/r&Îýÿÿ¬þV/r&ýÿÿ‘þV2r&Ûýÿÿ‡þV<r&èýÿÿ¬þVxr&Üýÿÿ¬þVŒr&éýÿÿ¬þV/Ó&Ýýÿÿ¬þV/Ó&êýÿÿþÞHr'ÎýÞÿÿþÞHr'ýÞÿÿü•Hr'ÛüÞÿÿü‹Hr'èüÞÿÿý+Hr'Üü6ÞÿÿýHr'éü6Þÿÿþ(HÓ'ÝýÞÿÿþ(HÓ'êýÞÿÿÓr&ÎÿÿÿÓr&ÿÿÿ‘2r&Ûÿÿÿ‡<r&èÿÿÿõxr&ÜÿÿÿÍŒr&éÿÿÿ ÓÓ&Ýÿÿÿ ÓÓ&êÿÿÿÿ%r'ÎýIàÿÿÿ%r'ýIàÿÿüå%r'ÛüTàÿÿüÇ%r'èü@àÿÿýq%r'Üü|àÿÿý?%r'éüràÿÿþU%Ó'ÝýIàÿÿþU%Ó'êýIàÿÿbÿãor&Îÿÿbÿãor&ÿÿbÿãor&Ûÿÿbÿãor&èÿÿbÿãxr&ÜÿÿbÿãŒr&éÿÿÿ[ÿãur'Îý”æÿÿÿÿãur'ýIæÿÿüàÿãur'ÛüOæÿÿüÖÿãur'èüOæÿÿþ%ÿãur'Üý0æÿÿýóÿãur'éý&æÿÿL…r&Î ÿÿL…r& ÿÿL…r&Û ÿÿL…r&è ÿÿL…r&Ü ÿÿLŒr&é ÿÿL…Ó&Ý ÿÿL…Ó&ê ÿÿþzÉr'ü³ëÿÿümÉr'èûæëÿÿüšÉr'éûÍëÿÿýµÉÓ'êü©ëÿÿ@ÿã’r&Îÿÿ@ÿã’r&ÿÿ@ÿã’r&Ûÿÿ@ÿã’r&èÿÿ@ÿã’r&Üÿÿ@ÿã’r&éÿÿ@ÿã’Ó&Ýÿÿ@ÿã’Ó&êÿÿÿowr'Îý¨ïÿÿÿ)wr'ýbïÿÿüàwr'ÛüOïÿÿüÖwr'èüOïÿÿþ>wr'ÜýIïÿÿþwr'éýIïÿÿþÈwÓ'Ýý¼ïÿÿþ}wÓ'êýqïÿÿ6ÿçŒf&C÷ÿÿ6ÿçŒfòÿÿ•ÿêf&Cûÿÿ•ÿêfóÿÿ¬þV/f&Cýÿÿ¬þV/fôÿÿÇÓf&Cÿÿÿ fõÿÿbÿãof&CÿÿbÿãofÿÿL…f&C ÿÿL…fÿÿ@ÿã’f&Cÿÿ@ÿã’fÿÿ6þVŒr&Ëœÿÿ6þVŒr&Ëœÿÿ6þVŒr&Ëœ ÿÿ6þVŒr&Ëœ!ÿÿ6þVŒr&"Ëœÿÿ6þVŒr&#Ëœÿÿ6þVŒÓ&Ëœ$ÿÿ6þVŒÓ&Ëœ%ÿÿþV°r&Í&ÿÿÿÝþV°r&Í'ÿÿý™þV°r&Í(ÿÿýþV°r&Í)ÿÿþpþV°r&*Íÿÿþ4þV°r&+ÍÿÿÿTþV°Ó&Í,ÿÿÿ"þV°Ó&Í-ÿÿ¬þV/r'ËþÈ:ÿÿ¬þV/r'ËþÈ;ÿÿ‘þV2r'ËþÈ<ÿÿ‡þV<r'ËþÈ=ÿÿ¬þVxr&>ËþÈÿÿ¬þVŒr&?ËþÈÿÿ¬þV/Ó'ËþÈ@ÿÿ¬þV/Ó'ËþÈAÿÿþÞþVHr&ÍBÿÿþÞþVHr&ÍCÿÿü•þVHr&ÍDÿÿü‹þVHr&ÍEÿÿý+þVHr&FÍÿÿýþVHr&GÍÿÿþ(þVHÓ&ÍHÿÿþ(þVHÓ&ÍIÿÿ@þV’r&Ërÿÿ@þV’r&Ësÿÿ@þV’r&Ëtÿÿ@þV’r&Ëuÿÿ@þV’r&vËÿÿ@þV’r&wËÿÿ@þV’Ó&Ëxÿÿ@þV’Ó&ËyÿÿÿoþVwr&Ízÿÿÿ)þVwr&Í{ÿÿüàþVwr&Í|ÿÿüÖþVwr&Í}ÿÿþ>þVwr&~ÍÿÿþþVwr&ÍÿÿþÈþVwÓ&Í€ÿÿþ}þVwÓ&Íÿÿ6ÿçŒF&÷Œÿÿ6ÿçŒ&Š÷ÿÿ6þVŒf&Ëœ‚ÿÿ6þVŒy&Ëœ÷ÿÿ6þVŒf&Ëœòÿÿ6ÿçŒ9&Ï÷ÿÿ6þVŒ9&ËœÅÿÿ!°k&Ø ôÿÿ!°N& ùØÿÿþñ°f'úþ*Øÿÿÿ¯°fÏÿÿ!þV°Õ&ÍØÿÿÇ rÎÿÿþVÿ¤ËÇ r!55#5! þ¿¶¶AÃþÿx¯ÿÿ Å9wÿÿ ;Å'ÏTjÿÿ¬þV/f'ËþȆÿÿ¬þV/{'ËþÈýÿÿ¬þV/f'ËþÈôÿÿ¬þV/9&Ïýÿÿ¬þV/9'ËþÈÔÿÿþ Jf'úýDÜÿÿþ¡JfÑÿÿýíHf'úý&ÞÿÿþyHfÒÿÿ‰þVHÕ&ÍÞÿÿ‘Â2r'ú6ÎþÊÿÿõÂxr&nÎÿ.ÿÿ ÂÅÓ'ÏšÎÿÿÓF&ÿŒÿÿÓ&ŠÿÿÿÇÓØ&øÿÿÿ þ×ÿÿ Ó9&Ïÿÿÿ Ó&Ðÿÿÿ¬%k&à ôÿÿ¬%N& ùàÿÿþ)%f'úýbàÿÿþµ%fÓÿÿ‡Â<r'ú@þÀÿÿÍÂŒr'‚ÿÿÿ ÂÅÓ'ÏšÿÿL…F& ŒÿÿL…&Š ÿÿL…Ø&ø ÿÿL…þöÿÿ–þVwr&Îÿÿ–þVwr&ÿÿL…9&Ï ÿÿL…&Ð ÿÿÉk&ë ôÿÿÉN& ùëÿÿýÙÉf'úýëÿÿþÉfÕÿÿþü{r'ý5èÿÿÇ;¤Ø'úrjÿÿ-; þÎÿÿÇîüfCÿÿ@þV’f&ËŽÿÿ@þV’`&Ëÿÿ@þV’f&Ëÿÿ@ÿã’9&Ïÿÿ@þV’9&Ëþÿÿþ8ÿãuf'úýqæÿÿÿUÿãufÔÿÿþBwf'úý{ïÿÿÿ‚wfÖÿÿZþVw´&ÍïÿÿÕî fvÇ r5!#7 È@µ·þ¿ï¯x-¼¤ßµÔÌ1ÔÌ0!!-wý‰ßþÝÿÿ-¼¤ß¼Ñ²´/Î1ÔÌ0!!Ñû/²ö¼Ñ²´/Î1ÔÌ0!!Ñû/²ö¼Ñ²´/Ì1ÔÌ0!!Ñû/²ö¼Ñ²´/Ì1ÔÌ0!!Ñû/²öÿÿþÑÿî&BB°‡L@ tWÔüÜÄ1üÌ0!3éþÇÅ×c‡~þ‚°‡L@ tWÔìÜÄ1üÌ0!#:Å×bþòþjþáo@ wWÔìÜÄ1üÌ0!#Í9ÄØcoþñþ°‡L#êb×Åþòþ˜‡9 &@ t WW ÔìÔìÜÄÜÆ1ü<Ì20!3!3ÑþÇÄ×bþÇÄÕ`‡~þ‚þñ~þ‚–‡9 &@ t WW ÔÄìÜÄþÜÆ1ü<Ì20!#!#9Ä×býø9Ä×bþòþþòþ–þá9o &@ w WW ÔÄìÜÄþÜÆ1ü<Ì20!#!#9Ä×býø9Ä×boþñþþñþ–‡9 #!#Ïb×ÄAb×Äþòþþòþœÿ;3Õ $@f d ?  Ô<Äü<Ä1ÄôÔ<ì20!!!!!5!çLþ´ÿþµKÕþ}ßûÈ8ßœÿ;3Õ9@ff  d ?  Ô<<Ä2ü<<Ä21äÔÄ2Ô<î2î20!!!!!!!5!!5!çLþ´Lþ´ÿþµKþµKÕþ}ßþ+àþ}ƒàÕßÑ`µ ÔÌ1ÔÌ0467>32#"&'.736€HIƒ256743„IH‚426úIƒ235624‚HIƒ447743ƒ?!°!?qþH9˜o #@w VV V ÔüÔüÔì1/<<ì220!!!!!!q'þÙþd'þÙþd'þÙoþ‘oþ‘oþ‘ј $0<HLp@?J%K+I"L 71= ¯+¯"­%¯j4­C¯: L(I1KJ\\F\7@\1.\1(\/ìÄÜìîÞîÝîÞî99991/<î2î2öîþîî29999904632#"&5%"32654&4632#"&%"32654&4632#"&%"32654&%–¥ww¨¨wu§2IH33JJü§xv¦¦vw¨4GH33JKþÞ¥xw§¨vw¦3HH33JKþ§'ûê!x¦§wx©¦wK24KK42IÝx§¨wx©¨öG45LM41Jü+x¦§wx©¨öH35LM41JúŸ^þ\ј1<HWg"2654&46367636762#"/#"/#"&"2654&4632#"&"2765454'&!"2654&#'ûêµ-@@ZBCþ×’kjIIjiKIÓ••jhIKihJKhj“4GHfJKþ±§xv¦¦vw¨h,A?[! #?,  [AB˜Ÿ^þ\—H35LM41J}x¦TSTS§wx©STST¨NG45LM41J}x§¨wx©¨ýžK24K&$13$&& )+ &K42I‡`JÕ!‡­þß`uþ‹ÿÿË`Õ')¼)ÿDÿÿ`ÁÕ')w')þ‰)‡`JÕ#!J¢þß`uÿÿÉ`Õ',¾,ÿBÿÿ`ÁÕ',w&,,þ‰Z/#@ UÔì291ÔÌ90 5/þìþ+#îÝÝ¤y#@ UÔ<ì91ÔÌ90 5-¤Õþ+þê#þwƒþvîÝÝÿÿ¯"Õ'þÌ4é)ð#'!6763267654'&!Ãþõ[`bedeÊæ""^XD#. þæ ‘S#F 8¼¥LAB\VC)*= áþø%(+C" ûþåÿÿMÑ B0¦þò¢ !#3#3!¦üòòòòþ¾ýŒ¾ýŒ¾/þò+ !53#53#5+þòòòòøÞ¾t¾t¾ÿÿ&«ð' øþÌ ø4ÿÿ&3ð' øþÌDÿÿž«ð'þ¼ ø4¨ÿ;‹Õ 2###°×Ýͼ¾¿Õè¾²Ûü²ùùšºð '47632"'"2764632#"&$"HƒŒ !! Œ þ(¨ª©TUUT©ª¨ <XFFš—HFFE4šÚØllÚÙllØ&œª@ !3!53#3#Xnäý|æ´´ººþ ~~w¯¿öœ¦ß E@    %²  ³± ^ Ô<Äü<Ä91ôüÔ<ì290KSXÉÉY"333##5!5úúÌmmºþw)þ¶þ´´¢%°ß#!!>32#"&'5327654'&#"G+þy8 –`_gf±A†F3B;=j8777\6677ß‘šON}„LL” &%GA(' ŒÅð ("264&'&#">32#"'&54632¿„"##"„F081.nr dDŠKLUTšºUTÎÏ033?'&JI''N’Ý• xv%$GH…ŒMMffåÛØ œ¢ß!#!†þ¦ÎMþUßuý2²µð )7"327654'%.5476  '&547672764'&#"¬ˆ**TDC**)þüNPRSRS('LT1/VWþÀWW11k"#x"##"<;##"#tF$#9:#i^Cj;<<=hC/.86Mz@AABxK97¿1b ±ð .532767#"'&547632#"'&27654'&#"J081.m99!22DŠKKTTš»UTghÎ033ÕA"##"ABF##®— <;w$HG…ŒLMffäÜkl ¥''JI''N’'(ÐÂ8 !!#5!5!5´þò–þð8ñ†ññ†ñÁÂG!!´ýLG†A¶Å!!!!šýfšýfÆ…„„¾ #.67SQQSdabc†ú~|ý†üý¾ 3#>54&¾dbbdSPPýþüü†ý|~úIœˆ#4'&#"#367632ˆº23ºº00Df433þi~D('Gþ™s^4;;ÿÿÿñºT;ýdÿÿ9ÁC{ýdÿÿ¬TtýdÿÿÿñÃTuýdÿÿö¦C=ýdÿÿ%ÿñ°C>ýdÿÿÿðÅT?ýdÿÿ¢C@ýdÿÿÿñµTAýdÿÿ ÿñ±TBýdÿÿ4œCýdÿÿ%«Dýdÿÿ¥¶)Eýdÿÿ¾ÿifFýdÿÿ¾ÿifGýdÿÿ)ÿð¨‚#ýdÿÿÿðµ‚)ýdÿÿ"ÿð¯‚2ýdÿÿÐt}ýdÿÿÿðµ‚*ýdÿÿIˆhVýdÿÿ&«g/ýdÿÿ'ªh{ýdÿÿº‚0ýdÿÿIˆ‚Hýdÿÿ0ÿ¡‚6ýdÿÿJÿñ‡ƒ|ýdÿÿ9˜%7ýdÃÖ$!!!!!!#"32.#"3267“$þ£Iþ·iýÐ8w@ÂââÂ@w88l!F„èi¡+»Eÿähð,6767# !2.#"3>32.#"!(%PQQ°_þãþ³M_°QQŸXµZ(3÷0zW !@!_f "IþË77 ef¡87þËIDþøèç„: ̦c[þÝŸ•[Õ!!!!3#!#5©²ý­/ýѲ²þ¡©z[þÝþêþÝÿXþÞ"XnSð#67632.#"!!!!!!35#535#56kpóQ N=ƒDh1.Iþ·Iþ·ÛüÈ«««ÿþw|þâ'&>:rÂÂÔþö ÔÂÂ'ÿB¨0#4'&#"#3676323632#754'&#"#Ãmž4C#$ææ+66CJ97wn8 |æ2@% Û¾ð¹75UUœýÙ`¤`/085cs® îãýVH)v75TR„ýÚÑÕ#5#535#53!3!3#3#!#!3'"aMüòBBB®‘¡nAAAAþR’¢þ”lbMxååÂÂå¶þJ¶þJÂåÂþJ¶þJ¶§ååÿäÎÕP3264&##532654&/.54%+#!2333632.#"#"'&'#"&5«\1551: %S2-./hTþþ,C{n§{C2 ,œ -B+^71]*,+!*wSsr04}]M¾þ_mÈlþ¢þ%N9"/:90/ ¢¥# †UýúÕ~^™>þ þð0035+. # «³³±ÔÛÿãÈÕF2654&+#.+#!232654&/.54632.#"#"'&9C;;CZåf?5<×H¤šPP,E$ 8;?@;;)=#…kˆ7yH@x597*6#ši“’>A?ZgfXþüÃspRýËÕÆÖ”¾-v/:90/ ¢¥²¬ þð0035+. # «³´ÑÕ"&)-1'#53'33733733#3#####5373'!37TE1ÏãÐäÍ1DThpùrJrørh&;;šžýx;;¹#þ¨èv’åååååå’v’üªVüªV’’þB¾vvþøþB¾vvvvÿãÏÕ !2#4&+!%"3;!¯ÚÕ¿Q~ÍþÿËþPÚÕ¿Q~ÏÕþÊþÃþ§Y¹Ÿû*5=Yþ§¹Ÿ×ÿÿ<þn¯&Óâl°ÿã5ð1@9&(  ox#o xn#r/21('/),&, 0',2ÔÄ2Ä2üÄÄ99999999991Ä2äôìôìîöîÎ2Ý<Î20@€†€]]632.#"!!!#3267#"'#73.5467#7Ñ,$ëS’DJŒMkŒºTþ‚AHJB @@=kbõqŒ‚~Es/4 %UAB`_KBjüÇoD7=AiK}f^[¸@”ûË ÿã¸ð)5'32327&547632#527654'#"'&#"654'&#"Ø¿˜•lCm(¸IQ œXMb ƒ…ÝoB0?i’qK:(/$3!%ê„Dl±ô¬X``S±ã«£¿àlmã@.jVBthP#lƒH+990C—<ÑÕ#(/! 3#3#!#!#535#53!327676'!%&'&+¢•5ˆ\cVVb\ˆþËnþÙffff„þ£y‘;*þƒ\ ;‘yÕnKŠg((gŒKnýÑtgPgþâM1 w((P· 1K,ÿ[•x$-#5!#5&'&76753&'&'6767»uOrz^b¢á­¯Œà¢]Xl`bPgh"'N;þŒ]=mi@^TÐýKF#ЬÐeiÏ¥"‰7ø?&û¾ 6Þ#PŽþùþûŽU"¸Õ53!3#3#!!!#537!!/3':á­?­á¨+}EhþÛgþxhþÜhF~+$++ˆP(½ÃUý«Ã•Ãþ›eþ›eÕ••ÊÿãÑð63267# $545#536767!5!654&#">323#!¯xmlÝvhßoþòþõ® O¢þ9+ rk`Ä_eÎgã|µPÞ=5¶YcRTþÏ45ßâ Â2 f@ÂPVFC ./èËÂ_TÂ.þÓ£ )%#&'$%6753&'&'6767£_h8:¢Ð¬þâŸÝ¢:8g_Q\DGHB[Tþ%;/¯³+R7þêr¼~oËr »¿7þËN'ü›(O‘Q"züó‡!ZwÕ !!!!!!Zûã¢þÙþ…þ…Õþþû-YþþgzÕ%#!#!'&+532767!7!&'&+7zVà  Vµ5K,!0þ¼´Ok¦Óy4 þ/Xy 4züXÕÃ8JÃ_@[ _ýçy,©ø>*Ã*;ÃŒÿä1ð %3267# !2."_|dT È„þøþ¸E}=[~èoi ‰† ƒ7@,ƒL¨]r•4‚*:0N²þ¯þ̾ ÿÏÉ'1.#"3267#"&632#3"32654&'2#"&6Ê5::@@:!;2.M'ˆššˆ'M #Ÿ+//+)00)‚’’‚ƒ””Ÿþì@!vÞv#Bþéö®öú5ü„qtsrrstqè÷þTöö¬÷µÕ3!3'!!!!!!¹—ü+—üaÝaþŸþ#þŸ]ûåûåxýƒ}ú+àý ;`!>54&#"!!>32NþÛ…:7StyþÛ/#t0¨e€Š Øý(ª5:=‡ý‹ý¤\g‹L;`4#"!'7!7>2!6+qStyþÛÒ›7ð?#&ûBþ¥00¨åŠþÛ… w‡ý‹6;ûãýNœ•Û>;}ÑN,7?2#".5467>"3267>54&'.!2+#3264&#hÚZZ\[¶Ú~}Ú¶[\ZZÚ~cªIGHHެcd¬FHHHHH©þss¥²²¥”ßß|AGGANZZ[Ü~}Ú¶[[¶Ú}~Ü[ZZGIG¬ebªIIHHªbe¬GIGwuuþü`Ñ7e5J•Õ3%!2+!327&+67654'&²þûJø þ÷øÝþ“mÝ5//5ݰ=*__*]ûåxýêëýýú~Ó#ýg)Z³²Z)þÕÉð'%!# ! %27&"676'&|ðþÜÃþÚþ¹F"C«ýobëbbëbn……¡……%þ°˜lkœþhþ‘üþ”43­34ûž¬ýŸ¬ûç­a¬ÇÕ%-13&'&7!.+!!2!27&#676'&%3{THv‡u2M;o.a4°þw§5}fþšcÛÖd)ýß“1EDý)šm=§þïs@1F„~þh‰|hý“ÕÖØÐb)‘ýˆtýÁLÉüVÿÿþãyŒ'tþþœ& ò>ÉüVÿÿþãyŒ'uþþœ& ò>ÉüVÿÿÿôþãy{'=þþœ& ò>ÉüVÿÿ/þâŽ{'{þþœ& ò?ÉüVÿÿ#þâŽ{'>þþœ& ò?ÉüVÿÿ/þã~{'{þþœ& òAÉüVÿÿþã~Œ'uþþœ& òAÉüVÿÿ#þã~{'>þþœ& òAÉüVÿÿþã~{'@þþœ& òAÉüVÿÿ/ôw{'{þþœ òBÇ› 5!!B#x‚4üÌ‚xêŽ#x‚à‚xþÓM '#'°"x‚à‚x$MþÝx‚üÌ4‚x#BÇ› '7!5!'7þÝx‚üÌ4‚x#êþÝx‚à‚xþÝþÓM !737"þÜx‚à‚xþÞ#x‚4üÌ‚xþÝBÇ›5!'7'7[‚xþÝ#x‚‚x#þÝx‚Á‚x#Ž#x‚‚xþÝŽþÝx‚þÓM'3'7#7ø‚x$Ž"x‚‚xþÞŽþÜx‚x#þÝx‚ýå‚xþÝ#xšÿì- 7!##švœ»<œýÄ» v»ýÄœ<»¤ÿì7 #5'#5!7»ýÄœ<»œ þd»ýÄœ<»£ÿá6t %!537536vþd»ýÄœ<»Wv»<œýÄ»šÿâ-u '33v»<œýÄ»vœ»<œýÄ»BÇ›3!'7!5!7óœþï“ÊOþë‚xþÝ#x‚‰”Ê¡àðp€‚x#Ž#x‚ðpBÇ›#5!7!'7'7!'Þœ“ÊO‚x#þÝx‚þw”ÊÁàðp€‚xþÝŽþÝx‚ðp;mˆ6#7!#32767676767676&'&'&#"#"'&'÷»vœ» "!0 #?"A=&.&>Ž #!$5>+;6-0$(»œv»# *%;(#8MX!GL!!+Im–6#"'&'&'&'&'&#"'67676327676'#5!#ÚO$0-6;+>4!# Ž>&.&=A"?,.!" »œv»([+!!O7!XM8#(H. % #»vþdBÇ›!!'#537¥êþ‚xúZ‚xþÝ#x‚Zúx¡à‚xú‚x#Ž#x‚úxþÓM'75'3''#ø‚xú‚x$Ž"x‚úx‚àê‚xúZ‚x#þÝx‚Zúx‚þBÇ›'73'7'7#'7!5,‚xúZ‚x#þÝx‚Zúx‚þ¡‚xú‚xþÝŽþÝx‚úx‚àþÓM77#75'73Ø‚xú‚xþÞŽþÜx‚úx‚àc‚xúZ‚xþÝ#x‚Zúx‚êBÇ›'!5!7òwûþ>‚xþÝ#x‚Âúx1òxú‚x#Ž#x‚úxBÇ›'7!'7'7!'4òxú‚x#þÝx‚þ>ûw1òxú‚xþÝŽþÝx‚úxBÇ› 53#5!5ÍÂÂýŽ‚xþÝ#x‚¡úý,ú‚x#Ž#x‚þÓM %'3'3!5ø‚x$Ž"x‚úý,Âr‚x#þÝx‚ýŽÂÂBÇ› !'7'7!#3r‚x#þÝx‚ýŽÂ¡‚xþÝŽþÝx‚úÔþÓM 7#7#5!Ø‚xþÞŽþÜx‚úÔ‹ýŽ‚xþÝ#x‚rÂÂþÓM%7'3'7!!5"þÜx‚‚x$Ž"x‚‚xþÞ"ý,Â#x‚Y‚x#þÝx‚þ§‚xþÝÂÂBÇ(276767654'&'&'4#!5g    @16T)+51@ýô‚xþÝ#x‚¡  àQ87;=49(*‚x#Ž#x‚BÇ(!'7'7!"'&'&'&547>763"j ‚x#þÝx‚ýô@15+)T61@   ¡‚xþÝŽþÝx‚*(94=;78Qà  BÇ$=+#5#53547>76"3276767654&'&'&g@16**)+50AGáä‚xþÝ#x‚äT61@  G    ))87;=49(*àà‚x#Ž#x‚H;78Rà  H  BÇ$=23'7'7##5#"'&'&'&54767676";54'&'&'&j@16Tä‚x#þÝx‚äáGA05+)**61@    G R87;H‚xþÝŽþÝx‚àà*(94=;78))ß  H  BÇ›F26767676763226767'7'7#"'&'&'&'&'&"#"'5[ #$! ‚x#þÝx‚,"    "/‚xþÝ#x¡   %$   ‚xþÝŽþÝx‚ "  ! ‚x#Ž#xB²¯#'7#533'7'vÃ8«1¦‚xþÝ#x‚Ã8«1¦‚x#þÝxÁþñ'è‚x#Ž#x‚'ç‚xþÝŽþÝx9ÿû~š 7'7…–cþ°ŒîŠkný"«Ý[Ô k‹îOc–uþP¥%þ¤·8ƒ 5!#ЂxþÞ"x‚hà©‚x#Ž#x‚ûw©™ƒ !#!'7'þzàf‚x$þÜx©üW‰‚xþÝŽþÝx·ÿâ8e !3!5Јàý˜‚xþÞ"x¼©ûw‚x#Ž#x™ÿâe '7'7!3‚x$þÜx‚ýšà¼‚xþÝŽþÝx‚‰üWº5p !5!7#7[þ_‚xþÝŽþÝxwàü©‚xþÝ#x?ÿâ°^ !3!5Xxàü¨‚xþÞ"x¼¡ý‚x#Ž#x2XŸ '5476767632#4'&'&'&7#7,#!A=PNZ]KS;>#"Ö!*#13#'D‚xþÝŽþÝxq!TPA>! #;SK]ZNP=A!#q‚xþÝ#x‚%'C "()/ZOR?<# !>APT2ÿìŸV 5!7!##2lûüvœ»<œýĻʌŒÁv»ýÄœ<»Bÿâ  !!#33#'7!5!'7x‚ýp‚xþûÂÂÉÂÂþûx‚ýp‚x x‚à‚xþûÔüŸý,þûx‚à‚x7ÿÙš42#"'&'.5476732767>54/#7!ß&>((*MGgZsn_aMOP(%R«.-'<0CA57---0»vœ\˜bon_cMG.(()LNÄkoaZU•-8:>=96/(-,r=ZH»œv»7ÿÙš4#5!#53276767654'&'7#"'&'&'&5476ò»œv»0---75AC0<'-.«R%(POMa_nsZgGM*((=\»vþd»HZ=r,-(/69=>:8-•UZaokÄNL)((.GMc_nmd˜BÁ›5!B#x‚4Á·#x‚àBÇ¡!!BMüÌ‚xþÝ¡à‚x#øÓM3'#ø¸"x‚àMþÝx‚üÌþÙM#'Øà‚x$Mû³4‚x#BÁ›!5!'7û³4‚x#Áà‚xþÝBÇ¡'7!5þÝx‚üÌ¡·þÝx‚àøÓM!37øà‚xþÞMüÌ‚xþÝþÙM!#73ضþÜx‚à#x‚4Bÿâš  '7!5!'7 5!!þÝx‚üÌ4‚x#û³#x‚4üÌ‚xéþÝx‚à‚xþÝýŽŽ#x‚à‚x ÅM  '#' #737¾"x‚à‚x$rŽþÜx‚à‚xMþÝx‚üÌ4‚x#û³#x‚4üÌ‚xBÿâš 5!!'7!5!'7B#x‚4üÌ‚x*þÝx‚üÌ4‚x#éŽ#x‚à‚xÁþÝx‚à‚xþÝBÿâš'5!!!!5í«#x‚4üÌ‚‚4üÌ‚xþÝ>«Ž#x‚à‚‚à‚x#Ž ÅM73'#'#'3i«Ž"x‚à‚‚à‚x$Ž¢«þÝx‚üÌ4‚‚üÌ4‚x#Bÿâš'7!5!'7!5!'7ä«þÝx‚üÌ4‚‚üÌ4‚x#>«ŽþÝx‚à‚‚à‚xþÝŽ ÅM%#73737#hªŽþÜx‚àƒà‚xþÞŽ««#x‚4üÌ‚‚4üÌ‚xþÝBÿâš '7!55!þÝx‚üÌ#x‚4¼·þÝx‚à·#x‚àBÿâš !! !5!'7BMüÌ‚xþÝMû³4‚x#¼à‚x#»à‚xþÝBÇ›!73!!!'7#5!!™{Va6úþÈPˆþEV`6»DxþÝ#xúþ\HHVßž;cffœ:bDx#Ž#xªHHBÇ›!7'#53533'7'7##5'35#žHHçþâDxþÝ#xDDx#þÝxDçççHéHHfDx#Ž#xD¼¼DxþÝŽþÝxD¼¼fHBÇ›!'7#5!7!5!73'7/!7'!8þ…Va6ú8Pþx»V`6»Dx#þÝxú¤HHþªƒž;cffœ:bDxþÝŽþÝxªHHBÇ›!!5!3HH\ý DxþÝ#xDöyHHfDx#Ž#xDfþÓM#'3'#' fDx$Ž"xDfI\ü¤öDx#þÝxDý \HBÇ›!5!'7'7!5!7žü¤öDx#þÝxDý \HyfDxþÝŽþÝxDfHþÓM%37#73±fDxþÞŽþÜxDfHñ\ý DxþÝ#xDöü¤HBÇ›5!'7'7%!7'!™DxþÝ#xDŸDx#þÝxDýûkHHý•HƒDx#Ž#xDDxþÝŽþÝxDfHHHþÓM'3'7#77'ºDx$Ž"xDDxþÞŽþÜxªHIIHWŸDx#þÝxDþaDxþÝ#xªHHkHH}ÿÆ6##7!#ŽV`Jýê»vœnJÄVý¢Jpœv»ýêJ›ÿÆT '#5!#5'5Cý¢Jnœv»ýêJ`Äý J»vþdpýéJ^V›ÿâT›%753!5373™ý J»vþdpýéJ^Vó^Jýënþdv»Jý }ÿâ6›%33!'38V^Jýépþdv»JóV`Jýê»vœnJBÇ›!!!!5!!qüYýNxþÝ#x²üèdfYfx#Ž#xfBÇ›'!5!7'!5!7!5³Yüè²x#þÝxýNYüdYfxþÝŽþÝxfYfBÇ›3773#''#5[¬KÂÁLnDvÁÂv‚xþÝ#x¡PÎÎPà~ÚÚ~‚x#Ž#xBÇ›'7'7#''#5377v‚x#þÝx‚vÂÁvDnLÁÂK¡‚xþÝŽþÝx‚~ÚÚ~àPÎÎPþÓM%#5#535#535'3'3#3Øàúúúú‚x$Ž"x‚úúúžžžÂV¼‚x#þÝx‚¼ÂVÂþÓM3#3#7#75#535#5353Øúúúú‚xþÞŽþÜx‚úúúúà®ÂV»‚xþÝ#x‚»ÂVŸBÇ› #553353!Æ‚xþÝ#x‚C»{»¡à‚x#Ž#x‚àààààþÓM 5'3'#7#7ø‚x$Ž"x‚áßànÆ‚x#þÝx‚Æ}»»þÊ»»BÇ› 3'7'7+53#53°Æ‚x#þÝx‚Æ}»»þÊ»»¡‚xþÝŽþÝx‚àààþÓM 7#757'3'3Ø‚xþÞŽþÜx‚àßà߯‚xþÝ#x‚Æ}»»6»»BÇ› !!#3x‚ýp‚xþû–x‚à‚xþûÔBÇ› 3#'7!5!'7ÍÂÂþûx‚ýp‚x–ý,þûx‚à‚xŠØ 5!5! !!5¤¤ýcþm“÷ý ê¹¹]¸ýý§§çþ€ÁŠ 333'#!#°\¸^º¨èþ€æ¦Zý¤þùý ÷“AŠÌØ !!75!!5œý¤þøý ö”ê]¸]¹þYç€çþYÁŠ ###3!3"^¸\¸þZæ€èþX0ý¤÷ý þmÁŠ 3'335%!!# #Ä^º¸\¸þä€þ€æ¦¨èàz¸¸þ†þènnZþÞg“þmþ™ÁŠ %3'3#!5%# #3!Ä^º¸\Ò^þ榨èÊü¸¸ýdddZß“þmþ!þèÁŠ #!5#7'# #3! Ò^Ô^º¸æ¦¨èÊüî÷ýÇdd9c¸¸ý¾ß“þmþ!þèÁŠ # #3!3#!!5#3¨æ¦¨èÊüîf–\Ò F Ô^ß“þmþ!þèוýdd•ükn’ÁŠ'33%# ##!#'37"º¸\¸þç馨ééèþ€æ`º¸\\\~¤¤ýÜ$y“þmÜýå?¸¸TTÁŠ %3'3#!5'3!3#7# ##'37Ä^º¸\Ò^pÊüîÈæé馨éé躸\\\¾À¤¤þ@ddZþèÜ“þmÜ?¸¸TTBÌÝ 5#35!7'!!!5 5ddœ¸¸ý¾þèß“þm’Óý¢Ó]¹¹]þäÉÉçþYþYç'ÿì d!#7!##‹ügävœ»<œýÄ»dgüdþ¥v»ýÄœ<»,¥x!5!!53753¤ûœþôþdºýÄœ<¼cûgüü‚»<œýÄ»þdÁŠ 3'3#7## #3 3Ä^º¸\\¸º^þ俦¨èèþXþZæZ¤¤ýÖ¤¤Ç“þmþœþm“BÇ›676323'7'7##"'&'#58X„)O$A?“‚x#þÝx‚“:[‚†V6N¡J9\ 63S‚xþÝŽþÝx‚H9ZY8Jà ÅM 3'#'737Ž"x‚à‚xÀþÜx‚à‚xþÞMþÝx‚üÌ4‚xüÖ#x‚4üÌ‚xþÝBþã'7!5!'7!5!'7!5!'7ä«þÝx‚üÌ4‚‚üÌ4‚‚üÌ4‚x#««?«ŽþÝx‚à‚‚à‚‚à‚xþÝŽ««ŽBÇ›#5!5!53!<Âþá‚xþÝ#x‚ÂSÁúú‚x#Ž#x‚úúàBÇ›!5!53!'7'7!#”þ®R ‚x#þÝx‚þàÂÁàúú‚xþÝŽþÝx‚úB½›'7'7###5353v‚x#þÝx‚§Í§‚xþÝ#x‚§Í¡‚xþÝŽþÝx‚þü‚x#Ž#x‚úúBÇ›533##5##5#5353NÂÂXÂÙ‚xþÝ#x‚Ù¡úúàúúúú‚x#Ž#x‚úúBÇ›3533'7'7##5##5#5353ƒWÂÚ‚x#þÝx‚ÚÂW¡úú‚xþÝŽþÝx‚úúúúàúBǨ#5##5#533333'7'7åj%j‘‚xþÝ#x‚‘j%j‘‚x#þÝx‚Áúúúú‚x#Ž#x‚þùþù‚xþÝŽþÝx‚ŠØ  !!5¤¤cþm“÷ý 깹þÉàBŠÌØ 7!5!œ¤þùý ÷“êþ޹þY7à7þYŠÌØ  ! 7˜þm“¡“þmýü¤¤g¤Áþɧ§þÉ7þYþY7)¹¹rþ޹!°Õ !!!!hŒþé)þm'Z‹\'þmcüÕþqú+ÿã½ð76! !&'&"2767!! '&  '& Q(þ‰ 5øjjø5 w(Q þÚþÙ  êsÊÉÉf’)råþèþèår)’fÉÊÉswÿãZe 0563 #"'&547632654'&#"3276767&#"l’j/‡<F½“£ªh|olÔnh'8 _§S}()G:3?1&QŠ‚3!eÜ$þût·qƒþ¹z[n¸Ì ERAIo:«ü±I-.$,Q?I­ŒY£CÕ 7!!5!!5!!£pýpý ü`û|ç†ñú+£ÿ¡C43!!#7#53#5!!5!3!”À ýc¿D“hû>hþZ×™rr¶h4_ú+__û|ç†ññþzçþ„|?X”­!0?"'&''7&'&54767>2"&'2767>54'&ww&'''OO¾Ý_:3www('''OO¾Ý_;4ò•AA565 ÷¬þ A•AA565 ¬ww49_pm__ONP(&www4;_mp__OOP((D56€MJ@ö ”þ  56€JM@ÿúÙK@&%h¬ÔÌ91/äì90KSXÉÉÉÉY"% !!{þíþî‘ðû!Ý5ü˲úqÿúÙ!!{ýÛþßþ²üËþƒúqdmôC±q?°3° 3±Áí±Áí±Áí°°Þ°2±Áí±Áí°°Þ°2°2±Áí±Áí±Áí013!!"&63!!"!Q )Sñþ’öö’ñþS) ‡PH{ŽæÌ_ž_ÌæŽ{HPædÿ;w¹ +m±q?°3°3±Áí±Áí±Áí±Áí±%Áí°°Þ° 2°2°2±Áí±Áí±Áí±Áí°°Þ°2°2°2°2±Áí±Áí±Áí±*Áí±+Áí°/°"/01#"!#73#!!3!!"'&'7&'&63„S) W¼ ®J×+!yœþ•œ ñþ53W ×^c>Hö’Ž{HPæPHC4|ÅPuæþ_æþ`æêPú`—¯ž_ÌcnƒB° /° 3° 3±’í±’í±’í°°Þ°2±’í±’í°°Þ°2°2±fí±fí±fí01!!3!!".>3!!"Uüè*^Œòþ’÷÷’òþ‹_*ñÞ&,bÞ‰íí‰à`+dmôC±q?°3°3±Áí±Áí±Áí°°Þ°2±Áí±Áí°°Þ°2°2±Áí±Áí± Áí01&'.#!5!2#!5!26767!5€ )Sþñ’öö’þñS) üämPH{ŽæÌþ¡þbþ¡ÌæŽ{HPædÿ;w¹ +k±q?°3°3°*3°+3±Áí±Áí±Áí±Áí±Áí°°Þ°2°2°2±Áí± Áí±Áí±Áí°°Þ°2°2°2°%2±Áí±Áí±Áí°/°"/01%326767!73&'&''7#53!5!&#!5!2'#܃S) þîV¼ þSK×,"xþëk› þñ52X ×^c>Hö’æŽ{HPæPHC4û„ÅPuæ¡æ æêPú`—¯þbþ¡ÌcnƒB°/°3°3±fí±fí±fí°°Þ°2±’í±’í°°Þ°2°2± ’í± ’í± ’í01!5!&'&#!5!2#!5!276|üç*]Œþò’÷÷’þò‹^+Þ&,bÞ‰íþêí‰à`+˜þL9î@¸·__ÔìÔì1Üìì20!!!9ÿþ_ÿîø^Óù-¢þLPî *@ · ¸·   Ô<Ä91Üìüì990 5!! !!5mþÀýyÁþ=šü/9)ŒÕý üæÓ‡B ú·vüÌ1Ôì0!!BKûµúîXy !!5!3!!!5!òþfšíšþfšûß!bìbþžìþžîÿÿqÿB`ÕÿÿyžTU þeÿÿt´rþÿÿXÑ)#É1ÿÙ–¾ ,@  ½¼   ÔÄ91Äüì90'%3##q@`ªƒØ4þ4»ÛžÆ{ý»$Ðùëøÿÿ1ÿÙ–v&!uÿ)†ÿÿ1ÿÙ–e&!=ÿ=†±ß  %.#"326"&'#"&54632>3"3Ÿ6J032#"&'#"&54632Õ0P2;JC88bý6J0#@ a/<ü<1@h h/ì/ì047632&#"#"'732ëUp†s•XlNGUnˆs•XlNGD"•McoŽH©ùÞ•McoŽHþ^Ñ#+4632&#"#"'732%4632&#"#"'732ñro‘nQ.A&ro‘nQ.A&ýõro‘nQ.A&ro‘nQ.A&D"‘´K&©ùÞ‘´K&©"‘´K&©ùÞ‘´K&ÿÖþ^û#+A4632&#"#"'732%4632&#"#"'732%4632&#"#"'732aroKnR&roKnR&þ‹rnLnR&rpKmR&þŠroKnR&roKnR&D"‘´Kz©ùÞ‘´Kz©"‘´Kz©ùÞ‘´Kz©"‘´Kz©ùÞ‘´Kzÿÿ“iB£'–4þW'–þÒþW–ÿÿ$ÿÿ”i>£'–0$'–þÓ$–þWÿÿÀi£'–ÿÿ$–þWÿÿ“iB£'–0$'–4þW'–þÓ$–þÒþWÿÿB ó&–tJiŸ£ !!!!!!PMþ³Mþ³üøêýÖþ“:þ“>ëÿÿ/6¦Ó'–þnþ$'–þoT'–˜þ$'–”TÿÿXyý'–ýî'–~7XÔy0#"'&'.#"5>323326yKOZq Mg3NJN’S`‚u_Gˆ0ê;73 ":?å<776<XÔy032?3632.#"#"&'XJˆG_u‚`S’NJN3gM qZOK0A<677<å?:" 37;Xcyž&#"5>323267#"''ä43NJN’SFX‡É‰;5GˆJKOK[‰ÉC :?å<7Dþj323326!!yKOZq Mg3NJN’S`‚t_FŠü(!ûßZé<73 ":?å=676=ÁëX'yü#"'&'.#"5>323326!!yKOZq Mg3NJN’S`‚u_Gˆü)!ûßüê;73 ":?å<776<þYíX z'767'"'!!'7#5!7&'&567676ò·F^UE;eFT(O^ýj–ŒgÑR…;uIF\<[ETFR‚ &ÉÆþ¼'"Bè6$¨ëþùP·ëæ(9âL5hX<yé"#"'&'.#"5>323326!!!!yKOZq Mg3NJN’S`‚u_Gˆü)!ûß!ûßéê;73 ":?å<776<þPìãíXÿ©yé.#"'&'.#"5>3233263!!!'7#5!7!5!7yKOZq Mg3NJN’S`‚u_Gˆ`ªþ¹–Ýý‡a°«G–þ#z`°éê;73 ":?å<776<þPìãí“uíãì“uXÿqy/7#5!7!5!7&'&#"5>3236767!!!!'þ¦\þžÂUQ:43NJN’S`‚jÚNDJKHEL=aþ?]ý‚RÚ<íãìÒ# :?å<77 YÀ Aê;•ìãíÊXXþyü7Z@110+5.*'   '’.5’ ’ ’810*8ü<ì291ÔìÔìÔüÔìÀ99999990#"'&'.#"5>323326#"'&'.#"5>323326yKOZq Mg3NJN’S`‚ t_FŠIKOZq Mg3NJN’S`‚ u_GˆZé<73 ":?å=67 6=âê;73 ":?å<77 6<X=yÄ4&'&#"5>3223267#"'3267#"'&''75>3243NJN’S`fÛ]GˆJKO)-D\NFŠIKOZq gÛZ·pN’S#(þ  :?å<76Zë323326#"'&'.#"5>323326!!yKOZq Mg3NJN’S`‚ u_GˆJKOZq Mg3NJN’S`‚u_Gˆü)!ûß²ê;73 ":?å<77 6<þ ê;73 ":?å<776<þYíXy³7R#"'&'.#"5>323326#"'&'.#"5>323326#"'&'.#"5>323326yKOZq Mg3NJN’S`‚ t_FŠIKOZq Mg3NJN’S`‚ u_GˆJKOZq Mg3NJN’S`‚u_Gˆué<73 ":?å=67 6=}ê;73 ":?å<77 6<þ ê;73 ":?å<776<X<yé"32?3632.#"#"&'!5!5XJˆG_u‚`S’NJN3gM qZOK!ûß!ûßéA<677<å?:" 37;þùììþ1ííW©yY %52% $'"51þpþ¶Z¸¹Vý(Iþ§¸¹þ©Øœåœ£åþ¶œåœ£åXyð;76767!##"'&'&'#5!!5367676323!&'&'&i1*+VÙ /J]?3hG2"ÙW,!::!,þ©Ù"2Gh3?]J/ Ùþª+*%'H@4ë50U(33!\?&ë5?H'â'H?5ë&?\!33(U05ë4@H'%X'yð!!5367676323!&'&'&!!i:!,þ©Ù"2Gh3?]J/ Ùþª+*ý¾!ûßõ'H?5ë&?\!33(U05ë4@H'%þíÿÿX'y¨& –)ÿÿXÿZy¨& '–ýH–)ÿÿXÿZy¨'–þ—)'–kýH ÿÿXÿZz¨& '–þ—ýH–l)Qý€ !!!!3#3#—éýéýþºììììí´ë²þ¿ þ¾Qý€ !5!5##:ýéý/ìììííÇëëþcþ¿AÈþ¾BX'yÛ 365&'!!5!&547!5!!%43‘44Äûßþþ!ÿð0?=00=G(Üíí?.4;ëëU.X'yƒ !!!!"264&'#"&5476X!ûß!ûß3FFfFG2ƒTUZY€¬X^í´ëâD11CCaE±RR}wWT¦||U[X'y¹!!!!2&'56X!ûß!ûßçÊ×ÚØÜÒí´ëÉ—ô— žô—X'y˜!!!!3# X!ûß!ûßÖê¢éÂwtí´ëM[ý¥*þÖX'y˜!!!!33#X!ûß!ûßÖÈtwÂé¢í´ë¨þÖ*ý¥X'y{!!!!!!%X!ûß!ûßjCdfAþûfþøþúdí´ëY2þξþ;¾3X'y !!!!33!X!ûß!ûßiÓ¡oýUí´ë þî3ý'X'y!6=Q!!!!53#5#"&4632264&#"%#3267#"&546324&#"#"3##5#535463X!ûß!ûßii3#32#6454&#"#4&#"#3>32V"ûÞ"ûÞV!Z6^b¯"%25¯'26¯¯ R28Wí´ë35uoþ² :5SNþó[5SMþò%Q//7V'x:%)!!!!#546?>54&#"5>323#V"ûÞ"ûÞJ´ 6 0*)^3@"   v v  ü<ì291Ô<ì2Ô<ì2.À990!3!!!'7#5!7!N“ü–’¢þÅ®éýmü–’¢A°þÛ1}´ëÜíþϲíÜX<yÆ !!!!!!X!ûß!ûß!ûßøìãíŠëXÿy{!5!73#!!!!'7#537!5!~ýÚ’PÛ$ˆôfZþ=e(ýlNÛ"†ñeþªÂÛëµbSëãìãí­bKíãìXÿ y‚ !!!!!!!!X!ûß!ûß!ûß!ûß‚íºíºíºíXy¨ &@v  ü<ì2291/ìÔÌ90 5!5yýãûß!ûß´ÑÑóPëNüFîîXy¨ &@v  ü<<ì291/ìÔÌ9055%!!X!ûßãý!ûß´ôþ²ëþ°óÑþ îXÿy 3!! 5!5X!ûß!ýãûß!ûßí ÑÑóPëNüFîîXÿy 3!!55%!5X!ûß!ûßã>ûßí ôþ²ëþ°óÑþ îîXþ}y#5!7!5!73!!!' 5ê’ZYþM{~¡ þ¦X²ý†¡šýãûß!ííi îií–‰ÑÑóPëNXþ}y#5!7!5!73!!!'55%ê’ZYþM{~¡ þ¦X²ý†¡‡!ûßãííi îií–‰ôþ²ëþ°óÑWÿ‘yq&%5767$'567¶þóRȳÇ}v”ÖœP¸ þ«Ä³Ç~w•ÔžÝå§»PþÊ(Fåd%Æå©þEP7(Gåe#Xÿúy%5%7%'Ðþˆbk›8ñþ¦jÄýñyšüõ¼x”ìï!:•_ú|þå¡ùÏþ¾:¥XCXÿúy'75%%57'xýžk›8ñZjþ<yšüõ¼Š”ìïþß:•_ú|¡ùÏB:ý[XCXÿ<yD7%!!'7!5!7%5%yã¹k¿þåSnþKAöý¶Dµ*þøZWþOzdµ#@4¼=ôPêhó‹¼îÄLxî÷ŠëÈ"LXÿ<y@7'#5375%7%5!!'’©‰þ zÌ0üVFþdæjµeýÁG†ý'Cµ³0'üöîPóaÌuôž6LþÜvë·ÊîÄLXÿ²y¨!#"'&'.#"5>323326 5yKOZq Mg3NJN’S`‚u_GˆJýãûß!ê;73 ":?å<776<çÑÑóPëNXÿ²y¨!#"'&'.#"5>32332655%yKOZq Mg3NJN’S`‚u_Gˆü)!ûßãê;73 ":?å<776<çôþ²ëþ°óÑXÿ<yD+.7%3267#"'&'&''75>327%5%º¿þåRmþKKt`GˆJKOZq Gµ:GAFJN’SMþOyeµþŒá¹l<ôPëgó‹Ú 6ýãûß!¢ôþ²ëþ°óÑ´ÑÑóPëNXÿ yy  5 55%yýãûß!ûß!ûßã¢ÑÑóPëNïôþ²ëþ°óÑXþTy1!7%'757%57%5%77'à4¦÷PGþx0¸ý–eà4¦÷Pþ¹‰0þGkB$Þë$Þ1F¦4ôFÿ\ó}š‹ëÄþ»F¨5óF\ô|šŒëÃüt?®t?XþTy15%%''5%75%7XZuàuçþ•:¥þ &ý¦uàvèk;þZô&…ô¾vFþ‰Iës¼…ô}˜ó¿þˆFyJës»†ó}Vÿ¡wa%&'567$wþãþ«Sëþh²ìºäœçÿþ¤"/þ±þž_žD$ö#Q’_Vÿ¡wa%$Vçœäºì²þhëSþ«ÿbþ¡’Q#ö$Džþ¡bO/"Xþ[yó5%$X¦{þqþïþ±Qþ_ý€Œ•#ëpýÿþ¾O÷þíKIþëþ®÷4 &Xþ[yó%%$yýnþq{¦ûß•Œý€þ_Qþ±#yý±Bp“Rýû&þö4þ RIKXÿ2yó%%#"'&'.#"5>323326%$yKOZq Mg3NJN’S`‚u_GˆJþïþ±Qþ_ý€Œ•Žê;73 ":?å<776<TþíKIþëþ®÷4 &Xÿ2yó%%#"'&'.#"5>323326%$yKOZq Mg3NJN’S`‚u_Gˆü)•Œý€þ_Qþ±Žê;73 ":?å<776<TRýû&þö4þ RIKVÿwô67&%'&'567677\ßRN@ˆ”Eº§ªþû´ß¾²ë¶è\SiôIýRaþž¥_ÓbÃþžþ™ýÖIGE#ö"R!+þ¼Vÿwô'76?&'67&qßRN@ˆ”Eº§ª´ß¾²ë¶è\SiòIýRab¥_ÓbÃbþ™*Iý¹E#ö"R!+DXŠyx!!"3!!"'&5476?:ýÆn˜LMm:ýÇ×ƒŽŽxáš|~KM᎚ÏÙŽXŠyx2#!5!27654&#!5’ÌŽŽƒ×ýÇ:mML˜nýÆxŽÙÏšŽáMK~|šáXÿŠyy %&'&5476;3!!!"''#"T=1ŽŽÌ†c³HæþÂØýÇc³w.n˜LÂ!5šÏÙŽE¼áýÔáþþFÇš|~K XÿŠyy +'7#5!!5!232654'&'}=1ŽŽÌ†c³Hæ>Øýê9c³þ‰.n˜LA!5šÏÙŽþÿE¼á,áFü9š|~K XÿØy)%!5!!"3!!"'&5476yûßç:ýÆn˜LMm:ýÇ×ƒŽŽÆîîcáš|~KM᎚ÏÙŽXÿØy)7!!2#!5!27654&#!5X!ûß:ÌŽŽƒ×ýÇ:mML˜nýÆÆîQŽÙÏšŽáMK~|šáXÿyÖ(#"3!!!"#!!'7#537&'&5476;7ŽOn˜L!ñÆþãÕòýÇ-uý/Kµ.~Û=M=ŽŽÌ¦C³Hš|~KîáýÔáuîÄLxîž#BšÏÙŽ­EXÿyÖ(!5!27+!!'7#537!5!327654/¶ØýÊ:*'E³E/&ŽŽƒ×`-uý/Kµ.~Û-þø/ mMLL ,á³E²(–ÓÏšŽuîÄLxîuáMK~|M Xÿy)!%!'7!5!7#"'&54763!!"3!!yþ(­¸6þæØ^N×ƒŽŽÌ:ýÆn˜LNl:þß=6ÆîØ”DîuŽšÏÙŽáš|~KMá1DXÿy) 2!!'7!5!7!5!27654&#!5’ÌŽŽKh]6þ(­¸6þæØ^ýÊ:lNL˜nýÆ)ŽÙÏšR"KDîØ”DîuáMK~|šáXVy¬!!!!X!üÊ6û߬ëý€ëXVy¬!5!!5yûß6üʬûªë€ëXÿìy 5!!!!!X!ûß!üÊ6ûßëë*ëþ@ëXÿìy !5!!5!!5yûß!ûß6üÊë?üjëÀë3·Ô3?2"&'&'&547676"2767>54&'&'3!!#!5!ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:FíªþûªþüÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9þúªþýª3·Ô372"&'&'&547676"2767>54&'&'!!ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ³ýMÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9þäª3·Ô3?2"&'&'&547676"2767>54&'&'77''7ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ8x¹¹x¹¸y·¸x¸ÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9¸yº¹x¹·x·¸x¸3·Ô372"&'&'&547676"2767>54&'&''ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ±xéxÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9ý_xéx3·Ô7!!2"&'&'&547676"2767>54&'&'ÁMþ³.óÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:F/þ“XVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;93·Ô3BL2"&'&'&547676"2767>54&'&'2#"&546"32654ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:F˜7b%&'œqq—šœX>=,-?ÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9d)'%`8nš—qqœ¡>Z<=,,3·Ô!)/7?E2"&'&'&547676&'&'&'75676767'%654'ïóÑWV,+++WWÑóÑWW+++,VW:F!#¬!E:ßþÙ Öˆ :E!¬#!F: ×& ÝÓXVWih{xihWVXXVWhix{hiWVþþ9þõ  9{18@9pø 9 ö÷9 w:A92t3·Ô!;!!!!2"&'&'&547676"2767>54&'&'+{ý…{ý…ÄóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:F@ XVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;93·Ô372"&'&'&547676"2767>54&'&'!!ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ³þMÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9þäª2K¡º 3!!#!5!!!!ªþûªþüáüèªoû‘ÝþúªþýªþüåÅû‘2K¡º !!!!!³ýMåüèªoû‘תþÈüåÅû‘2K¡º 77''7!!! yææxæåxååxåüèªoû‘ixçæxæäyååxåþsüåÅû‘2K¡º !!!!!ÁMþ³3üèªoû‘/þ“ÍüåÅû‘B!!#/^ü¢íýöîýôB!!5!3 ü¢^í î úüB!#!5þRíþPîûêîB35!3!B®í°îûêîÁ·w Ôì1Ôì0!!ÁMþ³þ“ávð\ !!'â*]])ñ]òò\@þä¯þ寯X'yü32?3632.#"#"&'!5XJˆG_u‚`S’NJN3gM qZOK!ûßüA<677<å?:" 37;þííXýÓy5 -5  5!5Xãý!ûß!ýãûß!ûßþÇÑÑóþ°ëþ²nÑÑóPëNüFîîXýÓy5 555%!!yûß!ýþÂ!ûßãý!ûßþÇôNëPóÑ©ôþ²ëþ°óÑþ îXy¨ %5!5!yûß!ýãûß!ôôNëPóÑõîXy¨ 7-55!Xãý!ûß!ôÑÑóþ°ëþ²ºîîXþ[yó$%$X’þ…ýZ!þkýt€¡þñþ¯O+yOþ¾ýÿpýmþ®& 4÷þ®þëIKXþ[yó$%$yýZþ…þqOþ¯þñ¡€ýtþk+ëpBý±ü KIRþ 4þö&ýûXþ ym!$67&'%'&'57&'$77ÙáIyœ±'Ȭ½ë)ÂÛþØ~ዜ®Ë°(Äßí8m0þ¬pšþ®ž[µ^°þ®äˆ¿þúþ¾D·ý¶0†A ë!F¼I lþúXþ ym!67'6?6?$Xà,uá|•¦Õ¼0Íôþéè‚áJy“À7Ù±Ñùþÿ¡Rþâ‹#0ý½( þöDà](ë3ˆý¤0Zˆ³BÇ‹ý„ÕRÖ\R\XþÜy&3#!!!!'7#537!!!>ØF©ý¡žþ =0ý|bØF©ý=þÆ„õ¡þ»&NÂëþ@ë©ëþðNÂë©–ýUÀþ@XþÜy&3!!!'7#537!5!!5!3>ØF©þ =0ý|bØF©ý=þÆ¡ýЄ ¡³&NÂüj©ëþðNÂë©ëÀëëþ@ÀXÿy5!7!!!!!!!'7XÛwý®!üÊ6þµ_H4þ%£·Hë©–ëþ@ëCfëçfXÿy!!!'7!5!7!5!!5yþµ_H4þ%£·HþÌÛwý®6üÊüjCfëçfë©ëÀëXþ½y¨" %3267#"''&#"5>327%5yýãþÃL;5GˆJKOK[_Éb43NJN’SFXHýç!´ÑÑóeâ3275%X!þV€_;5GˆJKOK[_Éb43NJN’SFXJýåã´ôþ²ë‡,þæ323267#"''yþïþ±Qþ_ý€Œ•ýk43NJN’SFX]É_;5GˆJKOK[_É¡þíKIþëþ®÷4 &ù® :?å<7Dþæ323267#"''X•Œý€þ_Qþ±{43NJN’SFX]É_;5GˆJKOK[_É¡Rýû&þö4þ RIKü :?å<7Dþæø # #hÖÁþëþëÁøýGšþf’þò>¬ 3 3hþ*ÁÁþòºþfš’>¬ # #!!hÖÁþëþëÁ ™üg¹ýGšþf¬’>¦ # #!!!!hÖÁþëþëÁ ™üg™üg¹ýGšþf¦j¦þò¢!#!¦üòþö¾ùœ/þò+!#5+þöòøÞd¾¦þò¢!3¦ òþò"ùœ¾/þò+!53!+þò þò¾d–¯R!!3#ò½þCÜRLþ  –¦R!!3# ½þC RLþ ¯~3#!!ܽþC~þ L ¦~!!3# ½þC R¼þ Xjyƒ!#yüÍîƒíþÔGèŠ,$%%$únnƒƒþ’þ’ƒþÊÁÁ!"ÁÁýßœ„„nn‚‚þ’ýÞ 8ººýôýʸÿÿ°Ë €œ°Ë!%6 !&'&"Ëû;1˜1™2ûõQ2–qàp–°`°XX°ÁV@@V¸Y  67"7Ò,›J5þPþP5J•ÈkÐÎX*7ýú7*I=ûûœÛP"2642#"''7&546÷©xt­yΞi56ØwYÎeÏ:Ö©v¬uv©o3…N˜Ö=ÎeÎXtØ#îO'+6@KV#"&46235462+32"&=#"&46;5#'54&#"3!3264&#"32654&#!#"3265§‚k——Ö˜‚—Ö——k‚‚k——Ö—‚˜Ö——k‚‚‚L65LL5‚6LM56LM56LM5ýû‚5LL56LJ—×——k‚‚k——×—˜×——k‚‚k——ט‚5LL56LLkLL5ýú‚5KK65LL65KK5Xjyƒ!3!yûßî3jþÔ Ñµœ!#!µýè¨ ýÅËÑÄœ5!#¨ ý5; ÿpµ;!!3µýXËýÅÿpÄ;)3!ýX;ý5åþ‡f477632#"&'&'&#"åjkÜbwL=.> \þ×ÐýÞàbP \†ûÐþÞàbP]ýY­"\þI\\·\\þI·þ`LLMK\y>þÞ>(ËI !!3#!#%33'¯üêÝ(³³(Èd³³&þsÈd¹üß‘þÿþÿÿýÿ4ÿ¼œ^7 hýÌ\ØØ\D?cþäcÿÑ¿!!!±þOÑZ‰øç©øWÿË¿ !!!!5!5!!–¥ü[ÅûË¥ü[¥ü[Zýï©øWþÜëTÿË¿ !!!!!!!!!Í5þË5þËþÉ¥ü[ÅûË¥ü[®þËþþ˰fý ©øWä5ÿË¿ ! 7 !!–¥þ-þ.Oƒ„þ|cû;5ü[ÒZ¦þ.Òþ|„„_øW©ü­Ãý=ÒÿÿÿË¿& ý ÿË¿ #276'&"! '&'676 !%!§ápàqááqàpò¥B`™þϘ_BB_˜1™`Bü[5û;ßýú‚@@‚‚@@ûE¦I7XX7H"H7XX7IÃøW©þ¢Ë3#3#&'$%67%676'&Êff2þÎffÊffþÏ1ffþ¤á=>>=E>>áá>3þ;°ý@°;þ$Ü;°À°;þ¥ýú‚#p#3ü#‚‚#ÿÿtËD& ý kÈÿ4Ë¡ !%!!Åû­,üÔáüË5Ìmø“Æ5Aù¸ÿ4Ë¡ !!!!Ëû;ÅrüÔµ5ÌmùY5Aù¸ÿË¿ !! !–¥ü[ÅûË¥ü[¥ý#ZCoü¾©øW^pKû± þùÿË¿ !!! ;ü[5û;Åü[Ýý#Z²þ‘þ½©üµ»þµüüÿË¿ !%!!%!ÅûË¥ýe‚xþì¥ü[x‚ê©øWã‚xÆÆý x‚ÿË¿ !!'7!!'7!Ëû;Åþìx‚ýe›‚xü[ê©øçýþìx‚ýÂxþìàÿÄËÕ'3273632#'#"'$%65'&#"§ápp./þ­ÝNRR˜™2þó„Ü]PQ™˜þÏ ùp±áqp/Üþý‚@ €ªX°þ þ¶¯þáÉX°`H°>üá€å‚@!þ¢°3 33!#!3!3ÊP“þÊþ“O€J€€3þ¢ú+þ¢^Õû/ýæÿ4Ë¡ 57!!#xðñrû;ráþwÎ/úû³Kürø“müØü-Ñü‰ÿ4Ë¡ % !%!5 !53!]õõþ“Åû­áþþ‚Ý‚üä«üUþPmø“rZ[zú†ÔÿË¿ !! '!'!Åû;´x‚cý½‚xþ~¿øWþçx‚ú†‰ùwz‚xùw!þ¢°3 3!###!##ÊãþmPÊOþmâÊ€€Ê€3þ¢ú+þ¢^Õüâýæÿ4Ë¡!5 !! 3!xáþþSû;Åû­ŠÎ‰üZüKû³þ”mû»yü‰Ñÿ4Ë¡ !!!!5!#]þõýžÅû;ráüáþ~ÝñüU[ø“ûZZµú,Ôú†ÿË¿ !%!!7!!7Åýïþ‚xþ&þž‚þæx‚ê©øW‰ú†‚xpùwx‚ÿÿçÿêÕ&  üÿÿÿËÕ&Û ûÿÿÿË>' gÈ ûÿÿçÿê÷& ý üÿÿÿËD' kÈ ûÿÿÿË¿&  ÿÿÿìZå^&— ÈÿÿÿË¿& ÿÿávð7&— þÿÿÿ-Ƥi& ý þÿ8ÿÿtËÇ' kÈ þ–ÿÿXÏyi&a þÿ8ÿÿXmyi&! þÿ8!°Õ%!567!6!&'&'&'yKHžþ—¶ FJ97§±;íþ6L2J!/,3 4(`™é<ýµ£?å-jýooþÁ Ô  þlXÿãyð(8#"'&56776326"&'&&'&'&'&'3276y m{ø÷{d m{÷ø{cþf/ %#2J!UI*/YKX M3 +/fg/™é þº«ÁÁžå D«ÂÁœþæo}R‘ ( ép}ýI ( " ëq}}RXþ¢y3#"'#&'&#"5>323326yKO32 7 ‘]J3,AI¥¥^9ly—s:932M‡#‡þ%‡üÜÅü§]J3,AI¥¥^9ly—s:932"326=7#5#"&546;54&#"5>32›0û;0]J3,AI¥¥^9ly—s:932ËþÙ'þÙ'þÙý‰þÙ'þÙ'þÙ•]J3,AI¥¥^9ly—s:92".33&'."#67>76#FV“ÊÞÊ“VV“ÊÞÊ“=ÏÀÁÎ m•¦•m ƒ¹&#Km þ%¹„ mK$ÞÊ“VV“ÊÞÊ“VV“‚þ–j,(Km@@mK(·þ¶ mK,þäK/,Km F^Š¢%.!4>2".7!&'."67>54hâþ<þÀV“ÊÞÊ“VV“ÊÞÊ“7@mK%(þØe` 7•¦•7  þØ(%Km@c§ùÞÊ“VV“ÊÞÊ“VV“9S•m %H¼ 6@@6 }ýÛ m•SPF^Š¢ %7'32>4.#52".uˆÐÚtþ&’FÞýð@m•¦•m@@m•SoÊ“VV“ÊÞÊ“Vnt]þ&sÙ’ÞFþUS•m@@m•¦•m@V“ÊÞÊ“VV“ÊÿË¿!!!–¥ü[ÅZ‰øç©øWèýüèm !5! þÝ º¦±­ýüêrâ0þ™ýàþpüèýü †!!è#þ݆övèþè† !&5 Îÿ侻êü«þTþþ_ðCÔêéýüém 5!Æ­±¦º ýüêp gþýýÐþüŽêÆýüé†!0éþ݆öv Šéþé† !!Æ# ÆšÿΆêüþ,ý½ð¡æ¬Uèýüèm!!! þÝþ#ýü qþÝèýü †!!è#þ݆övèþè†!! Ýý†÷±þÝ rèýüèm!!Åþ#ýüN#öÅýüè†!0èþ݆öv Šèþè†!!!Å#ý݆öŽ#ÜýêÁm !4763!!"öþæ{zÝþçf+!ýêuõŒþð0%¡þöy!4'&/32765!-9+eþæn:æ==à@ne(Á =’þïýF®½|AEuĬýHþõ˜<ÜþÁy 3!!"'&5ö!+fþíÚ}{yø¡¡%0þðŒ‰ùWÜýôöy!!öþæýô …ýêõm 4'&#!!2Û!+fþçÝz{ýê}¡%0Œõø‹ÛþÀy&'&!;!76¤<(en@à==æ:nþæe+Á!<˜ ¸ýTÄuEþåA|½ýRº’=þõy !#!!2765Û{}Úþíf+!yø©ù‰Œ0%¡åþå†!åþ †özŠŠ% !!!#!55!˜þm“w€ý “¸ý¤¤öЧ§ç™üç¿þ]]¹¹]ËÄ! !!Ëû;bcû;Å $û<ønþ$cη ÜìÜì1´/<Üì03!3nîîþ$ªþC½ýVÿÿÿìå( $ÿìþåÿ!ùþþûÿìþå !ùþ ýöÿìþå!ùþüñÿìþå!ùþûìÿìþå!ùþúçÿìþå!ùþùâÿìþå#!ùþ#øÝÿìþå(!ùþ(÷ØÿìþF(!Zþ(÷Øÿìþ§(!ºþ(÷Øÿìþ(!þ(÷Øÿìþh(!|þ(÷ØÿìþÉ(!Ýþ(÷Øÿìþ*(!>þ(÷Øÿìþ‹(3žþ(÷Øÿÿiþå( ,} ÿìþF( #'+/3!33!33!33!33!33!3¦ ü䟟Ÿüåž ü䟟Ÿüåž ü䟟Ÿüåžþþûþûmþûþûnþûþûmþûþûnþûþûmþûþûÿìþå(%8K#!1!!!!!!!#!1!!!!!!!#!1!!!!!!!#!1!!!!!!F ?þÁ?þÁ?þÁ?þ"Ÿ>þÂ>þÂ>þÂ>þ#Ÿ>þÂ>þÂ>þÂ>þ"ž>þÂ>þÂ>þÂ>þ(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþûÿìþå(!%)-13#3#3!3!##!#3#3#3#3#3#3#žžžžžÞŸÞŸ þ#ŸŸŸ|  þŸŸþŸŸ|  þŸŸþmÖÖþû÷Øþûþû¶þûýýŽþûýÿÿÿì#å( !#ÿÿEþä( /Zÿìþh!|þûìÿÿiþå 6}ÿÿÿìh( 6ÿÿÿìþå(& 6& 7 8ÿÿÿìþå(& 7 8ÿÿÿìþå(& 6& 8 =ÿÿÿìþå(& 7& 8 =ÿÿiå( 6}ÿÿÿìþå(& 6 =ÿÿÿìþå(& 6& 7 =ÿ±Ëw!ÅNÄû<ÿ±Ëw7!!!xáürÅ$àû®Äû<ÿ±Ëw 3!254#!") ) xäääýçärVVþªýçþªääääýèVþªýèþªÿÿÿ±Ëw& J Aÿ±Ëw !%!5!5!5!5!5!5!5!5!5!Åû­áüáüáüáüáüNÄû54&'.#"!624‚HI„347652ƒIH€637þìùúJƒ347744ƒIH‚426532ƒü©<ùÄÿìþå( 67672"'327$%&#"!€ôzzzzõõzzzzþ’1˜™˜™2þΙ˜™˜þµùú4ŒFGýÎFGý@°XX°À°XXùÜ(÷Øÿìå( !#%&#")7632ùþΙ˜™˜þÏKü/ôzzzzõûì`°XX°þ GGÿìþå 3327$3!#"'&1˜™˜™2û›Ñõzzzzôþþ °XX°`ûìþçGG7š| %63"71˜™{yô`°X{GŒþæ7š| 2#'&#8–š2{ô{x|X°þ G7ÿ¬š 527638x{ô{þΚT{Gþ ®Z7ÿ¬š "'$33™™˜þÏ{ôy{TX°`þæŒGË|0#'&"#%632Ë¡áqpppà¡1˜™˜™2ƒA@ƒþþ_±XX±ÿ¬Ë32763#"'$§ápppqá¡þΙ˜™˜þÏþý‚@@‚þ °XX°`ÿ±ËwÅNÄû<ÿ±ËwÅNÄû<ÿ±Ëw!ÅNÄÿ±Ëw!Åvû<Ñ`/3267>54&'.#"467>32#"&'.H+(*h9;i)*,++(i::f+),H736€HIƒ256743„IH‚426úž ŸŸ?þÁŸŸ ž:ý´“II“L“IIüØÞ¸[[¸ý"¸[[ÿ±Ëw !!!!!!Åû­·þIàþIý×NÄû<š¸ü àýÖÿ±Ëw !%!!5!!!Åû­·þI)·ü NÄûjBZ7="¯-?33 #&'&+"'&#"/573;2?"#'57#&'#"#567635a)8Ç)kOkaKA-'–= //G)‰ªÝ,Yþ¦=  !H$ /+þHDH)á+) $., f›ŸYYÿúx« !=Z…±Ü Lx73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&27632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5430'&327632#"/#"?#"54?'&5432&5432&56327&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432PO€~ )¹*+'þë)+(@&'$Ê|÷¯®ø|e‹?/A}]\ŠB-7“„1SLoWŽþäþjþã\vLLr%%,* #$ )*n$ % +) $ #*+ý    ? ù'+&þ´()&û(+&p   üò% % +) $ $*+„*EC*Z*,)-)-*,þ%&%&žf“‘ÐБ“fU 5HhfeefhH2Ùpu^èQFs¥£ææ£¥sKQèGþ4 4  22044 22 9     û  ýL%('*Þ%)(*%)(*t     þ144 22 0´r!2CTev‡˜©ºËÜíþ+&'&54?6?6/&2#"/547672#"/547672#"'=47672#"/54762#"/54762#"'=4762#"/547672#"'=47672#"/54762#"/547672#"/547672#"/547672#"/5476l=.%G\&#- Lj.ÄN 0d&K4i¹    }    g    s            &        ‘    þ    Ì    Ù    Á    ÆHƒ5-V"*2¥þ±îíþ±š™û¿-­.ŠøþüøŠ”T<:U'EGE'Dîþ²Nî•””þí–ÖþÓ-Öˆö……öˆU]ÿþÿ\`CD‹cbF]WöøW±ZA@ZZ@AZZA@[[@AZKPrq  qrPGe†ÞÞ†dMPä  äP }ŸÙ2þÎÙ›ÿþ¿k A4&#"26%4&#"326#"547&'&4632 $54'&'&4632XP79NNqOý.N97OO79N'þ«÷õþ«]E‹ac‹DC_\ÿnÿ\U>D‹bcŠEXFDbbDEaaEEaaEDaaþ+èþ¹Gè©„Uò««òUSjŽ©ëë©i LVò««òV‚6›Ê "32654&7#"32?ÉÉŽÉǾ˜þÎÙ×þÎ/Ú`TšcÈŽÉÉŽÈ;™þPþÏ1°2ÓY.£Ë1"264&"3264#"54327&5432#"'&'@Kjj–jiO—iiLKiý÷¡rq¡ rtPŠŸss ¡rqQÜ©ð©©ð©Z©ð©©ðýäTdµþÿµ·€‰IU·þÿ·µþÿ ÿÿ½È)5AMYdp{†‘©µ3/&76'!'47653!476=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.f<‡Ž;Ö.=+ý²,>/Ö;އ»Kyüz~LZ|WX{{XX{IE11EE11ET    m   â  þù  ;  þÉ R   þÿ  Ê  ȇ‹…s@dd@s…‹‡}þ½>}=/Nêþn’êN/=}>þ@‰ÀÀ‰ˆÁÁ‡MllMNkk¶ýéë& % þI% % "!$#  "! "È!!þÖ & %± % & ÉÉ%-5AMYdp|ˆ”¦ÀÚ5#!4'&'5#2#"&546"264&"264"2647>'.7>'.%676&'&>&'&7>'.%7>'.676&'&676&'&753!476=3''676%27/&76'77&'&/#?6'&7ÔliilŒYz{XW|{‰bEEbEd‘  ¹  þì  8  þÁ  @  ñ  Í  .Hxtü¬txH¸%?%5ÈE$„…6  6…„$DÉ5%?%-5!!®1(§ÿÿ§~(1¯ 5,4t4(4Äþ²NÄ4(4t4;¼„…»»…„¼h–hh–à%%þ#%%Ø $ %þ_ $ $ø!"­!$!/!!Š!"þ¿ $ $‹ $ %ê:-,GÙþŒtÙG,-:º XL†¬¢RqqR¢¬†LX ![$n“€[ii[€“n$[!ob !!'!téüKZüùGü•kcÿýn "!!'!##&+572367676hûÿNn_5æ, S Grj3#-EmDûïJü‚~o.(þÉã*!¶4\tR~ƒU…LÚ !!'!  ##' нüCI3ýZ  >þô <þòþõ< þôÙü5ËDü½CXþõ <þóþò< þ÷; ÉYD36273 ##'5&< +ZþÀ@\þÁþ¿\Dþ¼Cýì ûZýäýèYýë\ÿüµ5#,5>~3+&=4%3+&=4%3+&=43+&=4%3+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#567635@)£A({@(­@){A)ÎA(@A(þ^)4Ä 'iOj_J@,&“< /‰/F(†¨Ú0‘'ù&Ÿ‘&‚'Ü'J&¤‘(lNþÒ5  >! )&þV?<?$¥&$ '& Z‡‹N Nƒ‚ />Eqw†!674#!!6?676'4#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53° *üì, Ç 3)="(&)09$) L&TþE` MPÎøAý[M²H üY þŽ þß$ ;—&&e=O%/ ýNÿý ,8(.7L1Rþà»f~H8SQ,zH%9D6 )jGP@ö4€Rjd¦‰_*KfsûDŽIR 9! O  î-]‘&C+Õ/3#"'43727&'#"$472776725676&5&ûU8†Ã)$ tJ .; Çd3fÿþ,"3' VD (ã™ GL/7;;,g ¹t^F$Ý< ŽLD&?>ÄX4RÈ !/# I ?„‰ P?D!)Mþæv>“/¢z2!"&54676737#&'&54>;7#"&546767!7!"&54>3!6763!2hýô!.)g$'‰Ä30ý¹!/&j ! /:(/  )/ 9)/  9)0:*0¡z2463!2!2#!!+32#3#i9/ ! j&/!ý¹03ĉ&$g).!);0)9  /)9 /*  /(:Ã!!C4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!"'63!67!2e;'þá+ýpCCo þàCCÿ´CCŽ2CCKK<‹LL¹ÿKK%ý“JJ”60"2=2).=<==<@=:>=;TT USUT UT83$ýQŒEÊ!D72654'6#"'4#"'54#"'54#"'675674767#%ª$4:JILLHOKHLKIhghgighgD>-ü²sJ1 b6'SSý cRRþÄ ßSS®?SS\\K¬\\ä;\\þ–ý]]üÔ!AþŠ*>K›Â !C!254+'3254+'!254#!'!254!&#!"0!463!!2!!#!3#3lCC2ŽCC´ÿCCþà oCCýp+þá'qýª=2"06”KJý“%LKÿ¹LL‹:=@<==<=.)ýg¯%27TT TUST ¨ŒÿùEÂ!C32=732=7325732'654&#'%2&'&5&'5&'ªIKLHKOHLLIJ:4$üëN->Dghgighgh³SS=®SSÝ þÆSSb ýSS'6a!0J)K>*þŠB üÔ\\üþ˜]]:ä]]«J]] ÿþÅ¿O€ˆŸ®µ¼ÍÓÚÞâæêîòöúþ!%)-1523656;2#'7+"/#"'+"5&54775'"'5476;25'7&567635&56;374765'75'76=4'&+ '"'4!#"'&36365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5775537'7'3533553535'32767&5%2?&#%55'575775775uéo,Mz"060D½/²5I:2'5:ƒ†6 &" *:D:­çS46$.e QÉNþð5  u4MDa• 6ªbUþþP+ ,H;`›I23µÖN5(½ý (#I0·MšÓ '^5%Ì#£¥!:X+‘ "*  þìÞã›6W}W:þuW4 5vŽT ­& /Hþ3Vœ ¾œXD9\SL+&31.d+%X!Q $2``KPPPG[6%# Qy- 6[[3GK[¯»OþÂ`_A[-)$t7ˆ L-$ L6=˜" (CJ#«R"Ä0© :‚~GB{~Eþoj<4S[¿Za LC5 ) .U%+Z&)ƒþÍ¢ ›7e<ILAaMoK33K@G6 $$(& (''&1/----2)( (-((d.'-T?OK8T$ !T3¦(-<((')))())( ÿûÈÓ&2%2#"'&=477654'#"'5473ôt\*eýè OÉ@UýCƒXqù P ýS. P ÓMOŠbý >YÑaYÆ®58Šl7P ÌP@ ÉÃ$0<FX + &=%6&#"3 6=%&#"';27!54767%!&'&'2+"'&=476^7×\þÿž¬þËÕP—¸‡‡ô¿g㑵¾Hþìô‰r©'.)%­sêMþ§éª Mþ¦#ªfþ›C-7!%A.; ÂþÓŽ®þïÎw:ŽÒk‹Kðžþÿ·qz† ¶ü+H*þÖG;M ê² þÖtu/&((A÷A&:+C;."¯/ 8Pi>'67&&&'6.7#"'&'#"'676'773.#'6'5676&&5476'&'67&&Ü07 ^< 1x,B±5þ±@2 JV«Mv!#uA+UBDX[f¹*;-10)..C,·sB#HKU‹ •P‚]12<0üÑVQ‰ Ä}%'Hˆ6-T}^€$k7 R—‡2'Æ7f!Aþ\;y?1!50BEt„"!zkQ;0šqu0\·o‚i:5oP¥ýZjsXFaÀPJÂGl;4ejNÿÿƒ^1F[q‹•šŸ¤©®³¸½ÂÇÌÑü7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656&'67&'6'&'''5$7676'&&'6'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5&"'6%35&'.54>23#67#&8 p +WDTc'H¼ ‚@‘þ¢XO`= Ü ¡;*)8 kDþÿv/P’k-J KDþ°hGaÊ DŠ`–ë÷gBD–ê 6¦¬DDDþŸ ¼=3dTDW, › :gò þ•—j)YŠi#'WtI-9w18$^8;./7-ýI)jS)'#i\-IM91D;8%a7/.ØD=uöRNBR&'%QBNRöqÏ d2 D s9ý8C ["ü|44&3, '2^3ŸR T(B?#'9C- !y ~#Z10>N?$%—Y4 )%FN? ({ Ûusis< 3(&^T05<>7;,#4[:O(vAfG‡EtYB z^~4j #,;b:['~Av@~E‡Q‚ Bak4~_ª¾²H#˜T2 $$$$ 2T˜"`ÿÿqØ$&'6&'67327&#!65#&3Öjjdn¯h ±±wž˜– WþÑV“Ÿ–˜žݱ±ŽqZre¸óóÂ[cþ÷7þ µ®®µô7 cyÿþXÚ ,35'533#3!'#'5!5!5#53!5!5#!!üʶª~~ ”þbˆ°††þl–v¤F þôFþô A<<3ff¢X¯ý苜…þ›‚q°X¢üÏ»GccGap 3264&#!2+73 #'#5# 3m«`hh`þÎ2©®®©«³´þ±`³ÄˆÑ³hþ¶µ|þ;vÙvü¼Ê·±²¶üÂþ“þ}ÖÖääŠfÌÿûÍ33#!!#'!'57!5#'5735 ¶¯¯6þʶþÌ4®®Íš”p˜ü†z˜p”š7šd+!#!573#'5!3!'573!#'73!#'5ÄIx¬OOþTxþ·€þSVV­€dYþ\yþ·vþVPPªvIy¤Y³',32#' 37+ &5%6323'#57'53m¯¦½þð¥Jl{Ë~m@+þݼh4ˆú1¥…4Œ†4ˆ¨'0þþ¾¼>,_ ©ÍvÒNþk±n¥mm±nÉÁObs32732753"'#"'432364'5;+"'#"'53275'&'&54?5572'#&'&547634%476='Ü4&#68$$B )îZµ¶>&A†_;i88u-o1bFGfQ¢_ïÐM5mw€LÚbkj‡I,KòÀ=''8 0##Rm4 üÚ¹+ž¨¯áÜ´5!PP"4\=Ñ»œ¸þèÇŽŠ"8Q¥Ã½®<½WTÚ¦9[”°&¬”BCŽ›(Ægÿùj[T_g2#27654'73&#"#'&'#"56='"'46'4#"4735#5&547/63654'%654i=Ku/3¼noƒ|s׉nI3n ';6WN`fI:% +KkÑsÅ:om¼ÛP½|@R/%S <…[Er*JKN·ZEnv‘¶¢i˜íþ÷þâ )‡%*6&Û-ŠCl67jG‡V°"6;›%Ÿ 2Ö™p ç–+nEU»¯_rBþ(†Ea€LtD:•j[~^9šŒÂ"22#'#"'#&'663327'#&'756=4'&+"6«¾©xdœq•…¯‰sÑ¥[šy®W—¼ãe¹6Êo`Oa‰!¥ˆ¼°ys•`Mþk{eK[®ef â ‹™ OmÞY<0}¶  !432#"767 654'YôõYþ§õôþ§x_Pšþ툋—K¡†þÙ\Yþì¦QõZþ¦õôþ©Wô´_‹bþíýñŒåþYþäXÁÄþ¡Ãº(432654#">32#"&546324&"26%#"5432ižtv¡þ³äêþÇxsŸq1"00" 0ýÍ/B//B/#þ úúþŸaúú`ir›¦|àHþÇúŠ›!//!"00""00"!/0 úþ¡_úúbþž ¨¶#>DJPV\bhn27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'ê&$h%$%%34$&þ1++XSA N@`˜==Žk>P CRX++XYC P>kŽ==l?L ?Q‹ oL+ NnþùŸ;PÖ?ýüÔ; @ þË nMþÓNnä3%%%%34%&&%s==`?J >PW,,WW? K?_==‰f?H?PW,,WU?H?^‘êÒ<…›=þ¡…Ke+cLþ« mC¾†P`kÕ<—<!¤°4(0847632#"'&7327654#"&#%#&7&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ó¤=6 5N'V[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿ÃˆˆþÞ ÌþõʯX[V[X[V[!¤°4(0847632#"'&7327654#"73$3&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ѧ=6þóþý3QNV[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿Ãˆˆþw Ìþð Ê'X[V[X[V[!¤°4!)47632#"'&%#$''&'6%&'6!««ñ󫪪«óñ««4>;D@KDzcngkþ?dnhkê󫬬«óñ«ªª«íþ½Iø Ökpinipi !¤°4 "*2:AIX3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==¼,Â/ý¥Å0œ#¶¨H ™8&O”6ýã þ÷|þò7iY0Âþ6.Á/¤==e6a&i1r4þîz0Ç1¹Æ2œ+ްK“Nƒ2HŒQÖ>>>>Ûf^2Æ"/Æ1]þîÓ8`1"Y 4f2yœ5Æ+ +"'5$76%&'547327676=&#;… hþz°­0/O{™þ·†[’(Âþ´*TœåQþ«¡›ÅþªÃþ~ý`N®ÇŠÜO =ÂþþtäR–ð[\ 8d•<ß+% &56;2'5$%75#"3šþvþîhŒ²²0.Pþì~šNˆ^–(þ8P,V èRZ¤žy­ÆˆcO±ËþõþpáO >Åí‘èS–õ\^ þÂþüf½ÿ`«1B7#5#53'&'&54767&'&=33676=3#327654'&O&"}|f‡ÌÐz¿¿‹g}}"&&"}†UQn$mQU†}"ú$nQUVV{xVVUQ<"{³±u^Å^¿À\Å _u±³{"#|± zUOOUz ±|#YOT{zQPPQz{TO‘ÿ›@>)4'&#"3276&5476327#'#53'&­`_„‡__¾‡„_`ýo‹ŠŠÅÂŠŠ‰q“ßä‡ÑÑ™k‡]^^]‡†²YYÁÃň‰‰ˆÅÃhÙgÑÓfÙ‘ÿ›@> '"3276'&'7#5373'#"'&5476j‡__¾‡„_``_ÈÑчäß“q‰ŠŠÂÅŠŠ‹q¥YXþòº]]XY†ÚfÓÒhÚhÃĈ‰‰ˆÄÃjš¼0 '&'&376&+"'&5'476%7!¢Z{z[ZZ[~\Yƒ¶¹‚ƒ‚²²WþÞm‚pþçN#ZX[þ[YZ[öþP€€·¶ƒQmþ€p#þïT²±G*Š®52764'&#"#463233#!5èsPQPPtrQPŽô­±yzgÖüLQQäQPPQr®ö{{®Ÿtú|gŽ®*#®"#53533#632#47654&#"#dd¨¨i§qq„CB’igIIuªªþ“gzy±UØr}ppDt PQsþ_C…ŽS 7"27654'&7#"&54767##53#533333#3##h. @\ ! 2(>>?ZW~>'3íûûí|íú}}úíË! -/@ /- !^'?XY??~YX?(Fþ˜}R}þ˜hþ˜h}ý®}hL……S<#5#535&'&'5'73'3#'73'676=35'73'13§|‡e{vw}wwUATwx|xxS@Wwx}vv|dˆšš|re{±Eus~~suE|VAKtrrtý¶@X{Ius~~suI­{dr|×*ú®! #!!!'!27674'&#ß_í82þ½Vý)‰3{D™#M®ÅHZûWýÏ{s{þ?zK›8¹! %#"#&5463 67!2#6#";Íz\)MaBuh __ itBaM(]yÍ ¤þäŽtŒt¤ý[+##+¥¤tŒtŽý\ýó5ÿøœÄ."264&'67>3"#"&54767&'&#52hqžžáŸrd:BJ|^€d#!pâ¡ âq $cƒ]7A;ºªñ©©ñª{26”ŽXÿY "z¬¬òò¬¬z" YXŽ”62 ¶Î&'5 %$ 56?6'.ˆ‹j‡‡þéý–þ拈|½½½½*xIIz'ü¨&|JJx, F42$8"3264,'5'&54632264&" &$#"&547>ÈœmmNMmþ©ÿþÕ}ÏÉ l¨yz©U<ÊþMnnšnmê+}Ïþ7 l¨yz©U<Ƀ|²||²þ,&(uO#eœŠÂÂþíaHGŠ|²||²|Q'(sO#eœ‹Â‹‰`IH=ÿý”! <>'.463227#"&5454&#"&'&5476766&D„9‚BB8ÍÄž—Àÿv?W:pbW~ütp„) "-ffÉ)-gtpQ@3ƒAA:ACj±Â›¥þGžmN?ijb¯¦«v‘ˆr56WÀGe((Wi0154d)-?Ã/þê¢6?2>32>32#&'567'6'#4&&#4'3>64&"Á-S‹5,9"\0+Fþôgv!4u|‡W")^,k ikdSò¶!e˜b[Ÿ€¨š_[±ÑþÇõH”|NYC¦Žò¦™ý:ÂöR®¤ýHB’’=†Gý`þS¿”nžUµ|ê#!!!53&54632!!5#67654&"U'ûÙŒþtü0·„„¸0þZ =y­y= :…]†Zs¢ãã¢sZ†† Jjk••kjJ 2ÿfŸÆ4%353'5#"'&''#&&#4'3>32>32YE;<ˆˆ<‡-!&Y*dx cf_Oz.*O„2)7âZe`Ž`b<`°£ýíW¸¯ýušœAL™¡h`©ˆ²¤ýû8™Ç!5!1##'!5!Õþ_drÀrý•Pkþ^K{Uý¾ÇÑý¾Æý_W¡{¼Ï'/27632#"'#576&#"4'5267>327&'"2XCZŸd}uud$gqŠ~dV)40„tlx„!&%"dLk„ƒ}Îý:µ›UwŒmƒ±a4 ˆþsªÐ—O¶â¥HK{ü×w¢Y@x® A63276327632&"'&#"'&#'6327627632&#"'&#"'&#'YçR #{=('%{XNCEz>O&z>'(#ó&çR #{=O&{YNCEz>'(%{=('#ó&ˆÀee22eeà$Él66kd23dÉEPÀdd33ddà$Êl76kd34eÊE^s#!5!37!!'ÒÓó‘ þýþô‘óÔôþôþý ‘ôLþØþç3—4þèþØ(þÌþñ—þðþÍ(CŽ€ $Td67&'&"!3!67>54.#"!5&'.54>325467675#53533#63232>54.#"3'8xpA?9l9>@q<;9'þ¨Dý} 5RT—P=: SSPSS ;r>>p  p>>r> !þAèèþÛ% )–RS—Q1 )6BB6) 1Q—SR–) þÛp  ""V{zHNRh|¥»&'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32367>4.#"323732>4.#"327>54.#"732>54.#"©I )),·(?)(#!3()3Ž$))BGÅ!(( K{ýmgŠþêŒ,ý´;±îh IXI þîL$  ãP   H''1þ|G''#ýÄs%'')ý‹7$ ''A ýìŠ ''HþžþT¬Ý¬9.¡%~~ “þrFýÃ)ý¼~ý— wpa!'-23353#3!53573#'5#5335!75!!5'57!íò–ìePPeüeQQeè•DüpáHý>H@²AýΈˆŽ~ƒþ‚}}…ü„~Žˆûœ00mrTTrýÇeppe-Ýþ!ÞÿøóÅ7CQ^&54767&'&'5676767&'&54>32!535#5##3654."!2>4.#" 1""#@%@#!@% ?$##0 çüíÞÜa…1%?E?%4¶þ™,/--+D,/1+ 4;AB<>"  "#>"">#"  ">#10$ITNnVB,þ¥ Çþn ?%#Najiþùý-/‚ö4^t&Aê«Ycgbá3%' þ»+ ((NV8OQÄ¿>:<uyúg**œ5 kœ5h P[32>4.#"732>54.#"!5&546767&'&546767&'&4>32'&'.#"È+L)+L*+M)(LH     Äüã> |n @: !:;! 8An} E04¸`a·30ØTL**LTM((Ê    ü ++xÜ: 8>>q ?9 9? q>>8 :Üx++c^UZbbZU^jÿüg% $TdhyŠ47&'&";67>54.#"!5&'.54>325467675#53533#63232>54.#"!57#&'.54>3234'67632#7$5oh<:5ôdó4:;i865%þÁý«1MNJ96 MMJMM 68JNM0þv    +þ0’Ç +/0U-,,¬+,.T1/, Ƭ9j9:h  h:9j9þa××þð &ŒLMŒK- '2==2' -KŒMLŒ& þð1  ý©ŽŽ“V//X//X//V6›ÅHLP&'4>32"'4>32&'4>32&54>32&54>32#!5!5!M ,,.Â*C,+%š#7+,7–%,+ FKÑ#++ P‚ýDý²Ný²AM**4þd;K))$ý ›'**,ýdY&"**E ýÌ£#**Lþˆþ:Æ¥??ò@@”=Å%)5!5!3353#3!53573#'5#5335!mýøDý€Íá‹Û^JJ^üW^KK^׋ü²²LLüæZZ,}}ƒuzþ%yu„„u{Ø{uƒ}ûë--âïÇ4@4767&'&'5676767&'&54>32!&7535#5##3ª 1!!#?%?#!?% >$""/ áüõÜ_ŒŒ¨1+ 4:AA<="  !#=""=#!  "=![1”=%T e >6.HC'L"‹'G€ þ×üá12Œh˜„[FHå¸`[$%okß+*8þd .øNëýcèv[Æ.7&546767&'&546767&'&4>32 †w "E> #@!!?% =E!w‡ ./‚î@ =CDz" E>"">E "zDC= @î‚/.€…QO##"'##565'##"/547?kM±Ã …,4N"D±F &Fi™?šJO‰ãä/FB!‰O¶ é{|êIm¬<&–§=ˆ…ÃM2227632#&547636=4'&#"#4'&#"=³` ]Á¬d¶þŽ2þ c¤B¼«†ØU›;/ÙG;SœXMâB:þ®@B Õ½þ;7h’–­f%þÐ ´»þ#>…|Ž\þ@¬¸’9‘…@O &&5 i×þC þn:Õþ^¥¦þ¨Oýžý¹ G  ýÞýÛ%½2…ŸO7236;2"'##'65##"'&5476;235&'&=476j°S c1=EÃO¬ ;ÇSC«FRÊTÊ6*F@E1°;Oº+.`„1¦62¨V âþæYiä¦8/ÀD ;8[B ¥V†RP"<B+"'##565#+"'&575477;2732;276=4'&3&'"ih;F”(wQ"D±G".FWƒC©ïNfþêBy" bO–DUq5¦½u4  P¹þˆro¬@ ³ æ|ïS`64 ¤¯'<¤þ·kn™,³:y‰!‘ªìü@JD …ÆO2367632#&5476;§_#KYo¬h«þMþ2ФEOÁL)…XY¸D<κýö6©³­f%‘…@O &47iž9þ) þ2\OýçE ýŸ[ r1† V2`g26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5m¦V^2"ÌL ­<ÆTC¬FRËUË7* 2Q±;Æ‹ XaÈ2p2@­^ DJ‚ŠF Ð,aXj™-!˜DØ2V©9/mˆ±.0­R ãþäZjæ§9/ÂC \‘ §Vþ ¯7yMó5bomœ&#·'p[?$–G¥üOQ.£Æ,H3#&'&'&6%3#&'&'&63#&'&'&6 $&54673 >4'&'~ v¥ …' Š w§ „( Š w¦ …' Š$ˆ›–þïþÙþï–šˆk=Fˆõ ö‡F>jG3~Pjb¤‡^*IerÀNÀ{ ˜ùÌ‘?qš®JAŸeƒ}Ωv6\~þx(ONPPNO(!8?ˆ|EE|ˆ?8!r!_ª3#"/4?23D¹-!ÈÇ]UªûFš+}{<Ž¢!/ª3#'654'&'#"547326R£ãs9×WÔ5åÈ[Sª%3;Bƒ‰[/OBC'ü*ž|<jÿ_g¥#"=4?2%#"=4?2ÙŒµ3ɧ%QMýûŽ?Ë )TK¥¿û7’(›w7ÑŸü5’s ?|ÀO"'4723!#"5472!5½ÖÀÀYAý>ÇÔÂRHIÂOûó°‡q 1 ýÓ«‘g 4ª€€D%® 3363'$6'"I+¡ˆ×ýÔ4‹ ˜p®üuàòþoS‚üþ±^£±* ¯ 3%#'#3%#¶';&þÂ2 ¯þI˜û¦Ê—Hý¼þ“‡j7*š¯(,377#'#'547#5773%%ö,ppsr,þð'zzxz'þð¯þá9…8þ 4€?þè„þ¹/9†9e5ƒ>ø:ý¹þœƒ_`ÿþqE#&#"'5654'5673;54'56732733273+&##&"#&'565*”ŸG1 VV2Iž“s3'{'3sžI1VV 0G s3'{'3s­P3+1='3s™ŸH1WW1HŸ™s3'=1+3PþˆŸH2WW2HŸ.ÿð£ ;G7567&'&'3#6737'#&'7#&'6735'67#3335#5Î*)SR))þµ&*&';((:'&)'ȶkk¶Èn\\[[nȶ kk ¶Èn[[\\n`ff/ee.((&(;((:(&((@))SüÈS**˜n\][[oþ„¶ jj ¶|o[\\\n»· jj ·e‹(þ°P(‹ /ÿû¢N#.6CMhwŒ—¦¯!2732!'5675&'&=32#&'567637&/7&+"+&'532?4/%32#'#&'&=4?#'57335'3!273+#&='#"/547354;2?!&=35-,;K„þ÷>Ž #WU*† åy "ÑššHV ýηz/;@"¿q=o ‰)we)$I­ýÅY'L‰ „ALaXw˜Hå ••ƒ>ãX%CÉII°$PþÌþC/DÎN6g+å ø b%ï ƒ×#þñ ƒ – æjÕnNË Ð :3ò ÔO+5{bQ¤< ,ëåd- –Á ƒåXÿ]Ü ˆþ÷f '^ ƒ‚J‰JA!Ó< •8 2E35733!&54?'7'7!!"'&%#'73676'77'7'&'676Ü}ˆ“]}þžþ =-«-HW(þŸ7*! >€yšš*1“c±ý½{F=.«,H-.'”d°(#Y+Gþ‹C†8957jN»})%%tGl5nm3(,H:þÎ0/(_ki¼N}!Nÿ920K †1DW3!5>7>54&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676@òþ‰.’#5*"I?6O"[m" cýå<,§+GU þ¨5) ð<|w••)/a­ýËyD<,§+G,,&‘a«(!>B<#q'%NG91 Mè7835hL·{'$$qEh3kj2'+Gú8þÖ/.&Hgh·L{ Lú8*/D *(=Pc#"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676öD|q%N24H'CB=9PS3464E>6O#]o<ýk <-ª,GV$þ¤6)"þ=~x˜˜Ž*0’b¯ýÄzE<.©+G--&“b­)"í<+BI N $% $B G @6%6þ¡7946iM¹|($%sEi4mk3(,Gþ9þÒ0.'Sii¹M{!Mý8//$­d "5H333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676¯¯‡\\xþÝþè"@/³.K[5þ9+#9A…€ŸŸ—,3šg¹ý£€J@0³.K00(›h¸+$wÄ,þÔHmmIþÞ;<79oQă+&'yJp7sq5*/K <þÁ22)…ooÄQƒ"Rþõ;@2> “32EX!#"632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'676ÊHæ$evyn$L27C'€y™™*1“c±ý¿{F=.ª,H-.&•c°)"¸ERUHHS S /(*. þÈ8956jN»~(%%tGk5nm3(,H:þÏ00'\ji»N}!Nÿ91/K† "7J]"3264&7.#"632#"&54632&54?'7'7!!"'&%#'73676/77'7'&'676]'00'*//l+2>AB(S`dT^dyg7ý<,§+GU þ¨5) ð<|w••)/a­ýËyD<,§+G,,&‘a«(!Û.T--T.ÀH D&RECSukf{ýÜ7835hL·{(#$qEi4lj2'+Gú8þÖ/.&Hhg·Lz Lú8*.- ¤X.A!#!&54?'7'7!!"'&%#'73676'77'7'&'676²Ìn¿þúþœ!?/±.JY0þ•8+"(@ƒ}žž”,2—f¶ý¬H?/¯-J.0'™f´*#À&þK”þ:;68nPÁ*%'wIn7rp5).J<þÆ21(vmmÁQ"Pþù;:1-¤K':7&54?'7'7!!"'&%#'73676'77'7'&'676N!?/±.JY0þ•8+"(@ƒ}žž”,2—f¶ý¬H?/¯-J.0'™f´*#ˆ:<68mPÀ*&&wHn7qp5 ).J;þÆ11)wnlÁP‚!Pþø;;19ÿÿ˜9'9HR!273!567&#2&'676+&'67'#'6765'533!273+#/#"/47$,7Jv þÿI” MO $Ép%„|I ^ ƒ—ý[€T—<K«"(–™~GÙW$?8?])Î( EA÷sÂ#þÀÐL, ëTØ 0ø ` +þüWþûVÛ„þÿ`$$a.£|%2<J\e3 + &=762367#&'&#367&#&#"3274/"34?3'35732?5#+'535^-¹JþÎ|‹þ·°@ñ‘h'\-Öe@<þ¹r2&H); èuZJM üÍ=9jl:j€gbƒ.Qñþi2QÀ|þé…þ¶³:*}( ¸dpR·!h Üj Ä`]_©Ìi$x:-(^%±,3½"¸Ø¿´Ea‡ HMP EÞ7šg /:BR`j # &5%6; 65%&# 327#57&/#2#&'676+'%3#'#&/47'3327##'%3#"/6j1²Mþã{þÇ®G&€þz v$¬EþðxŠþݨEÅë(+=RÌ:n:D!s« Y!úgQKuý¢Ïm;} uA;>õ‚eþçá¸=gþñ†žþ¯Cy¥?°?ýÍþÔ¢B|“*¨>þüw4I ™'¿ 5@Â`  þý©bÇC·$Ð Í j$ÎHÛ?²iÏM!%.£|7H27&' # &5%6367&#'.7&67263'#%; 65%&# ŒmJB|…e6´OþÞ}Ÿþ°I+o|BJn‹þ›^jaygwaaygxaj^ýåw‚$®FþìyþتFGœ›”¢þ퇢þ½±D{§C´?þ`”›œ’Í– “B]w‚‚w]B“ –JþÐ¥C}–.«?þøyP%.232#!7&!"4#".54767267Œ†pñ ñ … {u*ð‚þ_ J¹cllÆm8*#I…‘„%<($|Ê€Xþ¤#{NwÀtû7mÅnld4)¾5:I…IIB“,<•_4767632#"'&'&!%!!ÿ  þ>Wü$`ü 4 ýñZû¦|b<•_/374767632#"'&'&4767632#"'&'&!%!!  Ñ  ýUWü$`ü H ô  ý Zû¦|b<•_/GKO4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!  è  é  ýUWü$`ü H     ý Zû¦|b<•[/G_cg4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!  Ñ  þ/  Ñ  ýUWü$`ü   þK   ô  ýZû¦|b<•_/G_w{4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!  Ñ  þ/  Ñ  é  þ>Wü$`ü   þL   ô  È ýñZû¦|b<ÿü•V/G_w“—4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!ç  þ0    Ñ  þ/  Ñ  ýUWü$`ü +    .  þ    @  üãZû¦|b.£t )2 $$ >54.#"4>32#"&hš–þðþÙþð–™þ˜…ðð…‰ð€ò‡¹..--t“þîþÖþò——*“ýÆ„ð„„ð„ƒó‚‚óœ2..2/.£y )62 $$ >54.#"4>32#"&$2#".46hš–þðþÙþð–™þ˜…ðð…‰ð€ò‡¹..--ýæ1.-.y“þîþÖþò——*“ýÆ„ð„„ð„ƒó‚‚óœ2..2/¨/2..2/.£t 2 $$2>4.#"hš–þðþÙþð–™²-..-t“þîþÖþò——*“ýf/2..2/.ÿö£j '2 $$2>4.#"$32>4."hš–þðþÙþð–™²-..-ýq.-.1-j“þîþÖþò——*“ýf/2..2/y2..2/R–7!!R-ûÓ–R–7!!%!!R³þMz³þM––ÿþ;» 67'&/#'3#67$#%‡€×¯¾ÒP=Û=Ͱ̼çþb’N+»#ð!f"K++!|o5ý›<É?þ1s^#'3#67$#¶BìBݽÜËùþBTð..#…x:ýkAÙDþ 'ÿÿª(''7'777'77'/'7%턌„!bƒŒ‚ì탃a 2Öì~ãƒÀ€~ÀƒáÄï„…b„Ž„ïî…Ž… bPþæÜðÁ„ää„Á²ÓR32>54.#"##"'5##"&'&'0!5!5&'.4>32!!676767'7'ü :!9!"9 :!¸ ‰ûF GùF;kY_þÏ1278e56d:81)þ×RLk<GúG E~^ÿ : : ; ;ûåNG 5 e4G( Li) enf77fne )iý¶ (G4eþó5 G( Pm 9Y%&'%67&673&/'67'&'"&'4?&'37' '7 &/7&'#>7$ü±%8Ð8EFu/- 6uNDL2·¶2LENu/80uFD8ÑþjæçþU½þ4þ5¿ïB%y…\AêÌ@Y„y$F 0=/0 Ÿä,-X7ˆ0 ;~*2 %ÚÚ% 2*~69ˆ7X-,äãoýìoþ ýò ýôþó+F9d1 ) ð( 1d9C1¼ÿýì*CT'&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>32”D$ú "¶ž@FÆþèª,þî¼ÂNNNþvÔF8p^Lb2 òþ– þØN**µ+ û”B@0"AR/0?wA·%od/D&3.YaQ/5#3$"þ´þuŠI' @3/uŠ= =#n- .... ¾w3% % 32+#".7!"&'&'#&=4;73737€ÏÏÏþDÏÏϯ *‘Ï$#‚GFHÌýúÍH‚%#Ι+¡(&½aa½'Ämý“99mý“9ù ý•3.055_4iý—4_550.3k  #ttòòt»k"632&'.'#####ÖŠv)%—8 _^¨>:k{•Z¬²G_?×gÖ@`H,>|:=+,j,,<†6O/2Ù33þþ<bþžbþžÄJÿý‡ 132>4.#"367#&7&$735&'.4>2Ï,P*+P,.N+)P¤…Æ—þd"/%(þMM®Ø~95DLM‰‘‹NMD2)WN,,NWP**þgˆ¨!ʇ„wÖœs~ × ‡&ˆ—ŠJJŠ—ˆ&³Ó?GO277''"/&'&'7&'&'7&47'6767'676?  6"&462EG#96\>42(p __ p(24>\69#G#:5\>42(p __ p(24>\5:ÚþÙÑÑ'ÑàNmNNmÓ€ U%4m+3 EJ5:6JE 3+m4%T  T%4m+3 EJ6:5JE 3,l4%T €ÿÒþÙÐÐ'\nMMnM* §? !&+05:?DP‘3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654&'5&'.4>323#67#&#"'5&'&547&"'6%6761´a$O` "NiB*4l,4"U47),3(üà$aM#"aT*BF 4,=44#Y3,)ý0BB0/CBO"!-$F$FJßF1.#- -#-2MßJF$G# 8<g7*!2U6J%n=_CBnT‡> rYw0d "*7]6U$u=n;wBLz >‡\e0wZ3C.1BB1.C(N "%""%" M#p.PA.$ý;QW¹$.AŽP-{ "R Ç&.FRŠ–ž¦²ºÂÊÖ2#".54>&'767&%76'&''67&'&'&'67676547676'&7>3263'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&h·@9h),)RP| ˆ |PR-*g:>/**Y&()((')&&)')(()% @9f+.TRþ"`33`Š\_ .np, ·Œ00441/‹¸ ,pn, ]]Â&&()&&EEEJ03þÙ2WyQT.,d9@.**..12®30IDE%&**%&F¦°+.SEFE.IMMI."#FES.ˆ !  ";-0.--.0ÙIM+.REF$$‘œœ‘1.%2S_`Q2%-1OQQO2-$3Q`_R3&.>ƒGIIGƒ"" 7447#.$$FER/+L"  !®75/57%"€IJJI€*ÿþ§ )p~Œ67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"72#".4>š"0'-, )*ÿ#'0£5%"ÿ*%%, ),,"èGNY ”I'+""$(J“¡YNO21, 9,4=SM:7,: -12-[¥[Z¥[]¦WX¦þI‹OM‹KL‹MNŒ2Ž“ Y{•\ b³CWDJgABcp7L^BML0”b \•u]! “@R%KlhhO+wÕÕw+O hhlK$PZÀX'@D 0:)ww*;0 EA&XÀZw´¥[[¥´§[[GJŒ˜ŠMMŠ˜ŒJ"¯( %3!'#!52#"62#".54>o:û5þ(·þ67%'$(ûánüª HŠ0þLº*ýçˆI"33'554#$/* ýÜPRüÆ 6hþÁ"þ&>I >ýª >A>óߨ!!®u¼¼þ‹»Øþ‰ûŸaÞóÁ!&5476'#5!+ÈÁþ{ÀÈh_aö6‘ýøŽ6mHHm.r£óZy™'#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&Ë—Pz  ,D@   7;+  23  M9£8G þ)•ý:       Ö        r‘         0   L:5’U    ç    .\£ rŒ26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&¬#  #  @Ò!R<¥þíOq< ; 3@M JC3 ; 763276;%326767654'&'&'&#"6767654'&'&'&#"32É““Í E7Ÿþñ9E"  21 +96  >B+  # zOþo       ´       ²Ž49D   /    "    :     þ      =J”Zx–´Òþ-4H67&'&'&+"'&'&'&4767676327632 #"/#"'&'&'&54767676;276276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&4767628?.  !  !a=ð›?^'þ¡_)\?›ð=a! !# "!.8?¿""  "  "  "   f  2 .?E ‚S¡@6•üf G=. 2  Å•6@þˆ•˜  B   )_>9 Ž9>_)  % ωþI    †    ? *        º…ª ;d.      ?P   !-  þ@( ,#%>  NpNM&_*# (! &) ,,f&  ! (K_  þZ0-  Yi D   cp-)L &gK1 [šN3$ n/ "!0{Iö"H#fmt2>•,7HBI.;/8[,  Q[z)  .)ÑS9L *E   '+(4%(4  *X >  7A)¯ ‚–0'-570+I;-% *þ§#%(0  ]'5.  U-•¤ü9Lp{‰7654'"'&#"+"'7&54?67676763276323273#5%6767'&#"6%"/67#"27632327654'73654'676547&© t!M#l5G;@¼\ 2BX-0%-m * ‡‘ '¡?,±Ný«ï ?¨'!Ÿ&­R;-> <\-R5-6E!"$b$6$!q",ý¢; t@P"û#C ß  *FSÀ "¥DX@! %z$(œ`]”jM¦P   ¦&O/+@ü p_u<  3  DMKZRdYL6D•_Y«BI‹5.!!''kGW„z¦")3SZ67654/##3276?7%754'654'36767632#"'&54767632'ò0,,;À ý(| w| kוýäýûi«5þ.U,þ\\¤ ýê    %gÒ .  Á;,-0j{w {w3ýûýä–ØþV. ÒýT, ¥\þ[^     Æ þ-5&à«Ä '-EL4'&'&/767675'7! !'7!654'!4'!!$4767>2"&'&'!654'•$$•üæCCC||]ªþVý£|êìýâV#þåýu    Ž9ÊZ(f(Y<™PP™PŽòñŽÕáPr+  VHW»zÝ")3SZ&'&#"227654'&''/%'654.#"65&'&'&547632#"'&'&76#"ò À;,,0ýw |w ˆ¡•ýú Ò5, þ\\¤ý£     ©. þ.V0-,:Á ý£ w{ w­ Ø•ýåýúÀhÓ .o,þ[\¥ ýè     ܪ6þ.;+–]#C4'%%.'&"27>7%$66%"'&'&'&47676762%'b&à¢×þI    ·þ)þ^àtƒœNþñ/  /þ²þdƒÉ÷IWÒ?    @ÑVùiDV /  V%¬&%$64'%%&'&'&"27676èÄþþ@Ë))ËÀüþ< "  " ÷â]N¸O]â    ˜À9|23277632#"'&'&5476"# õÒ6vþ®þà>? (-=%P8jŠó?  #þjþ<  y†"$"Jr‡B23277632#"'&'&5476"" öÑYTo ýÍk%…,02?=VŽ8ji™Aý{ÃC {œu+'qP?  ' 7 ÛssþþssþsstsXþŒrsþrtssþsr@¼QÏ  ' 7 5íþäþåíþäííÅþåíþåííþåíƒÿìN¾B2632#"'&'#"'&547677&'&54763267632676É   ©ŸBt  ahŒ´>) ¦¹c!  ,Hs¦¾ *·Ü¡Â   }©¶þÐ,"2A "Øì  ‰{•¦3ÿýž+Q26#"'#"'&'#'&'#"'&547&'&54767&'&54763267632676  Ó΂    NjÉM  r¬kW* & \„ÊÚ *3 #Àþﳎ*3 T§åv! ( šº¥ê5+" ,«£ç¿ @‘V #!!!!!%!!!!!!!!#!5!3 þ»þÅ;E;ÿJþ¶þEþ¶J»”Jþ¶“þ¶J“Ð<þÄþ»þÅ;E;þEþ¶J»Kþ!”þ·I”KV{ !!!!!!÷„þ|þãþ|„þîþ‹uv9˜f35#7!!#!5!3³³³Öþ*´þ+Õ´ܳ´þ*Ö´Ö0¡r!!%!!!!!!Ñ/þÑ0 þ`þÏþ` 1¡/þÏþ` 1 ›) !!#!5!3Ë^þ¢Òþ¢^ÒÀÒýêÒ^~S3!!'#'!!#!!3!5Lƒƒþúþ¼ƒƒ„Dƒ¯ÁþúÁƒþ¼ý³ƒʃD„ÚþúÁý³MÁA #5!#3!3'3#!#35!3###5353þÅõõ;õ¯õõþ9õõÇŒõõ¯õõ¯ããþËýÝ#5AþIýÝ#·äþš³ýÝ#³ä0¡vQ#"#3;54'&'&'!"3276767653#4'&'&'&+3!52767>5/]LED73!&&54GBO]63H>SkS>H388]OBG45&&!35FEL]63H>Sü•S>H38882I32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&% ¢>#"? ?"#> ¢   G  ¢ >#"? ?"#>¢  G  ù   F  ¢>##> >##> ¢  F   ¡ ?#"> >"#?¡ÿí·Š›4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632B ,#,+%) 3!, &&*-#''#-*&& &$0 )$W$) 0$' L+,$&&$,/"&&$b3") M*,%&&%,."'%%0 )$W#) 4!, &&+,$''$,+&& &$1 ,#,+$)ÿ庈0267632#"'&'&'3&'&'&54676763267632#"'&'#"'&'&'&5476767#6767632#"'&'"'&'&'&54767#"'&'&'&54767676325##"'&'&'&54767#"'&'&'&476767632&'&547676763235#"'.'&5476767632&'&54767676h â         á   -  ( á        á   ‡     à '    *  á        à   .    à     +ÿç¦j276767653"4'&'&'&+sidUS+*+'WPihtthiPW'+*+SUdi),)URhexuhbXR,,,,RYaitwfgSU),%ÿæ¬t?247676763"'&'&'&5!276767653"4'&'&'&ðLEA86:4DDMMDD4:68AEþêtjdVT,*+(XQjhvvhjQX(+*,TVdj-76DCOME@:66:?FLOCC67-*UShgyvjbYS,-,-RZbjvyghTU*,(ÿð©8 %%! !)tËÌtõþ›þœJ‡þHcˆdeˆcþH•]Fþº]þÙþ‚~Êþ]þýþ^þý¢CÿæŽ5 )!%%!2#"'&'&'&54767676hzþt@z@Az@þt{ne_RP)((&SNcdome_RP)((&SMdd0þ‡éþˆééxé}*(QObbrle]TP)**(QObbooe]TN+*(ÿæ©.'"276767654'&'&'! !˜_)(""""()_)(""""(Yˆ¸þˆþ›þœˆþ¸¸$(*/.*(#  #(*./*($‡þ]þýþ^þý¢#ÿé®< '1%%2"'&'&'&5476767! !#xÍÎxøþ˜þ™a)(#""#()a)(#""#(Y‰þDg‰gh‰gþD•^Iþ·^þÖþW $(*0.+($  $(+.0*($ ‹þYþûþZþû¦(ÿð©8 3'7'3!%%!! !hEÛ±C²±C±ÛDeþµ g  g þµfˆ¸þˆþ›þœˆþ¸ ÒÑÑiþÆÂþÆÃÃ:ÂÑþ]þýþ^þý¢=ÿü” 3'7'3!%%!7!7'7!hTDEDDTƒ¨þªƒþ¨þ©ƒþª¨‚NÿÏPÏÐPÏÿIQ2P11P2#þmùþmùù“ù¬ó–ó––ó–(ÿö©? -5%7'%!! !] þP ¤ g¥±þµfeeˆ¸þˆþ›þœˆþ¸r­ŒÂ6þ‘96ŒŒÆþÆŒ]þ^þýþ^þý¢.£ /'%!!%!77!¢þÄyrëþâryþĈyqm"þ_þÐö^÷ö^öþÐlçþŒ%«Ð%tæu%þ°ýþß´þß³³!´6ÿþ›‚3% %#'-7í÷:|þÆ:|þÆ÷þÆ|9þÇ|kþ”¶Öµ¶Öµþ•kµÖ¶µÖWÿÿz`37'%7% %#'ZZ´ZZþòþ£Z]´^Zþ¢^Zþ¢´þ£ZË›››ÊœË”þmËœÊËœÊþm“Êœ0ÿý¡o #'!5!73!ÅP6þ°Mþ°6Pþ$Ýþ¯6PMP6þ¯Ýþ¯6Rþ#Üþ¯6QLR6þ¯Üþ$Q6þ®L$ÿð­z     - h<_þõµþK þ¡<;þ¡ þL´þö_zþK þ¡<;þ  þJ¶þô`;<_þõ ÿé·† '!'/7'?!7% % -¡Þ[ºßÛ9^Û[[þÈÞZþGßÚþÈ^ÚZZz'}*þÖ}þÙzyþÙ}þÖ*}'q^Ü\\þÈÞZþGßÚþÈ^ÚZZ:Þ\»ßÜOþÖ}þØzyþÙ}þÖ*}'yz(}2ÿäŸ % %  h_Øþ‡yþ(_^þ(zþ†Øÿþ£þ¹þº£þë£FG£ÿà²s% % -hVHÏzþ†Ïþ¸VUþ¸Ïþ†zÏHrþ†Ïþ¸VUþ¸Ïþ…{ÏHUVHÏÿê·†% % -h‚hþëhþá‚þáhþëh†þëhþá‚‚þáhþëh‚‚h$ÿÝ­h7% %' 7-'hXË5 ´þÿ´þö5ËXVÌ6þõ³ÿ³ 6Ìgþÿ³þö5ËVWÌ6þö³þÿ³ 6ÌWVË5 ³0¡t/37%!!%'#''7'%!5!%7'77;[‚TïAð:#þÅTþ¯8#þÆðAî€T‚[‚TïAðþÆ#9þ®TþÅ#8îAî€T Tþ®8#þÇðAð‚Tƒ[Uƒñ@îþÈ#7þ¯SþÇ#9ï@ïU[ƒTïAï8#1ÿð èŸ54'&5476276767632#"#"#"327232#"'&'&/"'&5476=&'&'#"'&'&54767632332?&547'&#"#"#"'&'&54767632676?>$,.c.,$> ]5 71+: H3> kR  Sk >3H :+17 7Z  >$,.c.,$? Z7 71+: H3> lR  Rk >3H :+17 9X ø ib9@R'))'R@9dg  8d< +$;)01):$* \570+9 F3= kQ  Sj  =3F 9+077Y  >$,.a.,$? Y770+9 G3= kR  Qk =3G 9+079W ·    > h`9@Q'(('Q@9bf  7c<+$:)/0(:$+HH#:.'W4,CEH@,4W'*>&DL:Z##KGW“,f ',;[;;+*Q„--}KOW*AA*WSGu5-ˆU&+;;[;,)  '+;[<>**Q…--}KNW+@@-USFu5-‡S(+;>Y;+* !ÿå°½™±É67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"i/)F)/,UK:M $\/8E(5>H6-EFJA-5H;8)D7.\# L;KU,*UK;K #\.7F'5>H5-DE-6H<7*C8/\$ M:K U+þÓ:6-21 4 $:<;$ 4 22-6 O;(A7##7A(;þ÷ !*:#.#;&Rm!CcJMU)??,RMJcCoS%9#.#;)!  );#-$:'Qn!DcIMU*??*UMIcD oS%;#.$:* f /D;;D/ $­i"276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632 o00'))'00o00'))'0]0+)*+%# #+%0%##&&.0%+%   #%'.0$,#0%-# #%'.0$.  #%'-1$,#$%*/0961/*%%*/1690/*%) "*&0-(%$$$)-0&*!&"*!$$)-0&-#%(-0&*"" (-0&*"$$(./& »†nŠ£¿Øô%#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/?676767654'&'&'&#"h &,&1/(&#!$&1%-$!&$/'.)2$-%c%-$2-*++&$!$-%1&$!#&(/1&,& =s0 9 55%R 9 ²!_  º, 9 R%5Âs  _!È#'"+'0/)&$%%).2'+$ * '1.*%%%%*.1' * "+'2.)%%$&)/0'+"'#ŽL% %Lýì %#M L:2(&6  û_ M#% è  6&(2: ÿí»”-[Õ3b‘¯Ý &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'%&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762‹¯    ¯ž(  b›  (›¬      üÍ #!"G"!# * " ' ## G!""  '  Y m  Š   ( y ‹  ( O k  w Š  m Q (  þO (  ‹ ˆ   ? ?   + / L* / *   +. M+ .*  Ý !!!! '? ?' "#& #'"!!  '? ?'  !"!  $& þŒ ‹  m P   å O   ‹ ˆ    þ“ m  ‹ Ž   y ‹   O k  £   þ“¯    ¯ž bš š¬      %ÿ߬j<\l"276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676% %-–[''!  !''[&( !! (TB39)+,+76?A3:(+,+76>tjeVT,++(XRiiuskdVT,**(XQijtuþßzþÞ"z!uv!z"þÞzþß#&(,-''""''-,(&#e)*:6?;97,+)*97z88,+,*UThgyricYT+,,*USigtvjbZR-,þÞzþßvvþàzþÞ"z vv!z2ÿíŸ9“œ§²ÁÐ"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632 654'&'&#"#"i"(-‰+S I9K #Y.6C&4<F4,CDH?,4F96(B5-Y" K8IS*)RI8J "Y-5D&3<F4,CˆC,4F:6(A6.Y# K9I R*€"(-62 #9þ~þÉ3 #9;þÉ 01+5€6 00,5`%;G,AþÞ $.?'!3&@!*Yx$ ImPT]-EE0ZTPmI "zZ)!?&3!'@-$ #,A'!2'?!*Yx$ImQT\.EE.\TQmI#yZ)!A&2"'?.#Öþ~&41%%14>3t-3>41%%14>3f^CC^Býß%@þÛº#@þÝãþÛ@%ýÆþÝ@#ä-4>41%%14>4þŒ-3>41%%14>3Ñ+  V  ++  V  !ÿã°r +?Sg"&46277''"'&'&476762"'&'&4767622"'&'&4767$2"'&'&4767eeeþãBääAãý»äBã†ãAä#U##U##U##U#ýÇV%**%V&**KV&**&V%**~ŽffŽeýßãAã†ãAã$ãAãýüãAã„V%**%V&**üµV&**&V%**Ì#U##U##U##U# ÿêº &3@MYam+%5%32476;#"'&'?632&54?#"632/&54#"/72#547"&462"'&=3¹þÁ?û_?þÁôü6Æ üÏü6Æ  Æ6ü] Æ6üþ'?&M&©C_CC_?&M&< 'L&&L'Ã!Æ6üü¢ Æ6ü^ü6Æ!üÏü6Æ ÞþÂ>ýõ_CC_Dý<>þÂ"ÿé¯l267632%632#"'%3#"'&'"'&547#"'&54727%#"'&47632%&'&54763&5476h!#;Ö'&1'þÛh 9##8þ)'1!, Ò;#A#;Ò '&1')þ8##9 hþÛ'12Ö;# 4þµ%.&! Â6 = 6Ä%".% þµ3 3 Gþó%.5Ä6 = 6 %".þðG 4 $ÿõ­8 ! 54."#"54$32632#"_”‚éöé‚ àþÀ“‡Š’þÀâÉþãÉ€è~~èýa>âþûâþÂEÿÁŒ  %!#!3!üp EEûþ?üp9Eûÿ=”V %!%!35!üc×ûðE:œüd FFûð8ÿ¸™ %!!!ü[:Fûü:¤ü\;[ûü0¡q %!!7!üNíû×]<²üN;)Gûí+ÿú¦t  ,þüoþýýÄþüþüþü9þýþüþþþû;þûþýþ’þüþüÿ ¶œ#¶›œùqÍÿ ™!þË™ùrŽQþË€k!ýÓkù` ÝÏôÙ!733ôþé}b>vÏóóÓÄþÇ!#7#Ô)…iC~ÆþîïïÿÿÏÑÙ' …Ý …ÿ#ÿÿöÄÛÇ' †Ý †ÿ#gÿ]jOS2#"327676765#"'&546;57!##"'&'&'&54767676%#¹     42;%-ú´n`Ô®úrr£#26A@:V7:$)&7.Y›q   % $.277g[•š½£(Ëdü¢VDQ49%*,04?()-#úæþÿÿÙÒÉ52&'&547676762"'&'&'&5476767h‚c"$n‘jlŽn(Lfe*+$$$$+*e*+$%%$+É! #'(*dRj¨¨jSc*('!üù"%*,20,+%""%+,02,*%"¾ÿãÓ%C&'&547676762476767622"'&'&'&5476767hcØn(%X%&&&W%(nØ–e*+$$$$+*e*+$%%$+,ŸƒDj*('(&,,&('(*kCƒÿ"&*,11,*%##%*,11,*&".i£%%&%&54767676247676762hhþÔ*(42u24)(()42u24(*”þÃiÂÅ\=97,*+*96@@69*+*,79=’ZÅrÿû_'#"'&'&'&547676763"'&'&'&5476767632_ÑÓdœA=;0-/.=:DD:=./-0;=AžbÓŠxþ”ª1.=8DC9() 1F="%".4"tNa5Œ&$4! /.r<@6B2L²_0>Q#kI|…Î"rz7&‹)?),%=^K=.C26F@13.!9+cM313 ÆN676 547&'&327#"'#536767&'&'&5432&5476323254'&543253%5@26šþÑ`', =NR6#!vWR>4 2:O t51"".1&X°.RO A5Ƚ )T/1þ¥Î86,FAS :#(=‹:tA0 9SD 'A#5þ×}11BO9ðÿ›á‚ "'&'&'&547676763"3á—Šƒpm8884ql‡Š—YTN‡! !C@RP]e:6pl‡†˜™‰€tm9:'62Õ~•~jf77ðÿ›á‚"05276767654'.'4ð]PR@C! !‡NTY—Їlq4888mpƒŠe'67fj~•~Õ27&:9mtŠ™˜…ˆlo7:fÿ‡kR !&547jljjlþïyyxzQ»þ“þ‰þº¿q¶µp¿nÿ‡c$0!!676n wu;;vþ÷i43f$ºþœ°°³³¹µ²²lcCÿ}ŽU# 3ÕþŒtÕþŠ‚ëìýDÿ}U 3 DuþŒÔtþŒ‚ëìýýÒÿVÿ.! !þþ¶þáJþ©ëìýÒÿVÿ. ! ÓêþJáþ©ëìýýÍÿAÑ! !þmþ^¢“þ\¾GHü¸ÎÿBÒ ! Σþ^’¢þ^¾HHü¸ü¸Éþåv!'7DÄWèèWÄÃWçÂçWÃÉþë|'7'7ÄWèèWÄbÃWçû>çWÃþ¸¸^$#"&=4&+5326=46;#"3¸—²xMe,,fLx²—1d=AOOA=dÆ‚…Ç׈i€h†ØÇ„O߀€ŒßOùþ°Øi(326=467&'&=4&+532;#"+ú5nCFVU$#Cn5¥ÂBB*)p//oTBBÂ¥ÌP€âŽAAáP‚DBÉÛ‡45‚iŠÙÉDCS/~å #!5!3}þ¥ãýñþúãŠþ¥ªt’]} 7%ýd”^º=ý¤Š]•ýdý¤>S¢~5 /ý%Û0~þ‚¨#ª#þÉþÉtÁ]« '-fý¢”œþñ\=]ýd•]º>ý¤-¡¤á!'7!.€ Øþ(þ÷€ýìïòÀ``ÀòI)ˆ=2"&'&'&5476?!".'&47>3!'&'&54767>2ˆ þÔ '!  ‹ý`!! ‹  !' ,Æ& þÔ   Œ&‹   þÔS¶~&!5! Fýò7þÉÒ8þÉþÉ-x¤!5!5 VüØ(Mþ³r¨úþ²þ²6u› #3#3#3!!5 é´´ðZZ–--ïþÓ-Iþ·(,þÔ,þÔ,þÔ,²þ¸þ·Sœ~  55!#3#3#3Fƒ´´ƒþã9««äUUŽ**©bÚ]^Úb«þU«þU«þU«S„~ô!!5 Fýò7þÉ.©þÉþÉ`tq!%  ¨ýqþ®ûïÆËËRþ®þ®{¤V$%! ÀSþþÀÛü%äÁÁ@þÀþÀ{V½ tùÛü%îÎþ2þ26Œ›=3!5 5!"'&'&'&6  $hIþ·ý˜$  Õh$  •þ·þ·•  6‹›<47676763!5 5!"6  $hIþ·ý˜$  ó$  •þ·þ·•  $O‚à!! eþëþä þþ6n›55!âlMþ³lýT‰wæccæw¤ekl!5!!53 ' !_þú²[þ¥y"þÞþk©d©þ¥þ¥â©""©òe/lå5!!53 ' !_þú²[þ¥"þÞþ/©d©þ¥þ¥â©""©ò5·œü !73#57!%!6ÍUcG™ýùjýý¶bÊzbýªŒïd©þ“þ¸ŽÇ©""©òaÖp« 5!'53#'!!!7%aÜcߎA[ýØÄýØ(ZqþZ{{þä{þÄ’Ò’ûû}ÛTM %'!'!53 !“;þqKÊRnKþ’a2þÎþ6Ûw–îwþ’–þ’Iw22wþŠT‚}> 3#5!7!!! –ZŒQþtZþQ°0þðLþ´>þs¢þs£äþjLK2NŸu '!53#'5!'7! !£p…Sn%þ’R&ý %µUa2þÎýŸ÷wþ’Kþ’J,L÷»w22w)ý¨1 '7!573#5!7! !œr&j&St&þŒSýp¸Wl6þÊý”qûM,LþŒLþŒyû¾y77y‘½@¬!6767632#"'&'&'! ‘ 6IYZgb^UMI%&&"LF\Zfc^UM3!çtþŒ§:6I&&&#LHZZhc\UMH'&&#L2<tt€ XNy "&*.37#37#37#37#5'!!55!!3'#3'#3'#3'#r+qr*r€r+r€r+rV…€…{‹‹{þê…þ€°*q+*r*+r++r+««««««««9ÇÇÆ†\]†ÆÇ«««««««t¹]¢ 7&#"7'7 #%5²Ž#t…69Ï.þwZæþ¦Y“96…t"Ï.*þ¨X/æþ§åSÑ~k 55!5!!7'!n‚‚nÿþUªŽþVŽŽªŽº±†GG†±8:ŽÈu\j '327'' #3ƒŽ95…t"ŽÏ.þÖYþ§/æYæ¿"u„69Ï.þxXæþ¨XN¹ƒî2%&#"6767&'&"67632&'&547676767‚}:"  s %*&*(&þŒ"!#!þ÷"O>>;Ž*‰§E/4767!"!47676763"'&'&'&5!3!&'&5¦Œv þ¸ þ5 $ %% $ Ë H vgMME %!#"!% EMu¯\—2&'&'&'&54767#"'&'276?&'&'32\": ö þ¨#'$'$#Y@öI:86†—s…6::I ö þ§#&'#'" X ÷ :5*œì+B67"'&'&'&547676$47676762"'&'&'%&'&'&547676762$¸àª[ /  ýH =ýaö=   / Z«þïI=X  q> d(*c Á    ÂXJn´°.676767632#"'&'&'&%&'&54767&'&54765 #&+*1)„Fþº„-Y)) .EOÍÍO/3S>>S&/ #$))%#Ã]]Ã#%))$#&¾«¦e"'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762«Ã åIþ ]]òIå ù à  Q ’  ¹¹  ’ Q  Ã%e«ñg"'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762«þ» GKaýç u~iKG E²þÜ ²Ã êú  Ó² þÜ2 Ÿ²+#76767&'&/3#6767!5!!5!&'&'Ÿg?j7R=y66y=R6k?þVO ýœñS+ +Sýd _8=ey‹u'&uŠtj<þu,*44Gee‡eeG35*+S/~å #!5!3}þ¥ãýñþúãŠþ¥ªþ²Ñ&*'$&76#"'6767Ñ Ì7þ>{J<×pÝý1þ„ GM+þ² SR·µ-PAd·ÌmüR›ì þ²Ð&567$'&76&#""+MG þ„1ýÝp×7Ìþ²á ì›®mÌ·dAP-üK·þ®S uþ#\u ! !hôþ þ óþ˜Ñþ—iý/uûÛûÓ-1ýüŽQþò€ ! !Rþâþð‚üpüpQþò€ ! !þãþðþâ‚üpuþ#\u hôþ þ uûÛûÓ-B\¨33##!##533ìí´´íþùí¶¶íú®þRîþP°þP°î®þRB\¨333333#######5”ÙÙÙPPÙÙÙRú®þR®þR®þRîþP°þP°þP°îÿÿw“Xs™ÿ±Ëw7!!!xáürÅ$ðýžÄû<ÿ±Ëw!!!xáürÅðû®Äû<ÿ±Ëw7!!xáürÅ$àû®Äû<ÿ±Ëw%!!YürÅ$àû®Äû<ÿ±Ëw% hËþ5ýžbcýJÊÊþ6býžýžÿ±Ëw žÊýžbcýþ6”þ6býžýžÿ±Ëw ! žÊËûÓbcýþ6Êbýžýžÿ±Ëw! ž•þ5ýžbcýÊþ6býžýž ÿ±Ëw #)-17%#535#5#5#5##5'3#5#5#5#5#5##5##5###5ËÍZssssô®š´ðVÈrrrrÅsZš®š´šVr~ÌrZH®®N³³ýrrrrZZrÌH®®N³³bÈVrrrrrrVÈ…þVÑÕ%%;#"'&5! !&'&+3264&#¬Tb'~ÒV^ª û–,A/þ¼´ Ok^‹yihz)†láhhÚÕÌæš¶ A^ýçy©þi_Ú^`ÿã~ð!5!!5#"'&3227654'&"Z$þÜ3QRmÐtsêØaOOþr<<Ô>==>Ô<<6Ÿú+©b22ËÊrv/0ýYˆ†ðˆ‡VþV{Õ##!!+53265}žë þ`²±b¸ÐyMdR¬ýsûTÕýqúeþôØãn…!°Õ !!!!!i‹þé@þ—þm'\‹Z'cüÕþq`ÿã~ð!%!!67632#"'&4'&"276„þÜ$3QRmÐtsêØaOOŽ<<Ô>==>Ô<<ŸÕ©b22ËÊþŽþŠþp/0§ï‡ˆˆ†ðˆ‡‰HÕ!!!!‰'˜ýhþÙÕýÇþüýh¬/`!!!/ý þÝ#ãÛýø`þƒAj2!$76676'&&˜`rþkþÜþjsƒ+*‹Z6†j{•þÕþ4@ïBsåSV}ïdˆâþöÒþxaò†M>ºÿå !5#"'&'3276767654&+5!2þÜ,XZv<::40‚L^EE& Sbê<Òµ@ûÀ®`45,,! >&64pä„ná×bÿão{&"26$  6 54&"òOsPOsPýpÛþçþ% ]`xÓxiPPsOO*=þÃýâþÃCWW ¥¹¹¥ÿÿ†þÎK_XýdœÉà3!3h¦»àþÿà»&ºü¼Dþšð6.54$32.#";#"'%&'&'&'32654&'þßžãgÎe_Ä`kr*(…¶SU†@aS@G:‰ˆþâdLohvÝlmxPLU»žËè/.þàCFVP>((20Ejm¦âp6€GþÝxþY41TRcYCesþ‰Õ%;#"/&'5!!ˆ”FùdSwk¬ê哟ýwòªF3³GþÝx´¯ôÝô®ÿåîÕ#'!767#"&5476?67654747! [`bedeÊæ""^XD#. þõDü­#Fþô8¼¥LAB\VC)*= ý%(+C" çþå¦:¢!#!¦üòþö¾ýä/:+#5!!!òüþöV¾ý&¦þò¢Ì3!!°òþ P¾Ú/þò+Ì!53!+þò þò¾ÿÿ¨èðN¿Œ#533ÒÀÀ1¼мútŒút¿Œ#533ÒÀÀ1¼œ¼û¨Œút¿Œ#533ÒÀÀ1¼h¼üÜŒút¿Œ#533ÒÀÀ1¼4¼þŒút¿Œ!#533#ÒÀÀ1¼¼¼Ðút¿Œ53#3ÿÀþ¼¼м¼û0Œ¿Œ53#3ÿÀþ¼¼œ¼¼üdŒ¿Œ53#3ÿÀþ¼¼h¼¼ý˜Œ¿Œ53#3ÿÀþ¼¼4¼¼þÌŒ¿Œ!53#ÿÀþ¼¼¼ŒútŒ¿Œ!!#­þ¼Œ¼û0¿Œ3!!#¼ñþ¼Œþ̼üd¿Œ3!!#¼ñþ¼Œý˜¼ý˜¿Œ3!!#¼ñþ¼Œüd¼þÌ¿Œ!3!¼ñŒû0¼EœŒä 3'#'32+53265 ENPZþÝ#–jŸ¢[ZÒy'dRªyh}ýý¤]fÓÑýTüklán„ÿÿÁ'ˆ!J=!5!5!5!Jþ>Âþ>Â!´´´ãáîÕ!#ã !Ç#Õýqþ›eçªçÕ¶dÔÌ1ôÌ0!çÿÕýÕ+ÿÿeg^lþDe"&'&#"3;!"&5#"'&!5!!  ;2‡RbêþÄѶ{¹Ñ@'þ×N à?28ýÔ„náØû+Ðì)báüÌœPþ¾˜Õ !!3!#!P= gþÛ}þ^þüÕûÃ=û/ýºB=ûÃaþâ€{3##4&#"!!>32äœÛäENO[þÝ#–jŸ¢×þþªziŽ~ý`¨]fÓbÿão#2#"67.5463%""326&rêþçîíþç¦v.ð”6þ VHrPixxijxx|þ¾þõþñþÃ=»k)mƒÑ9%Qï¹þ¶¹¹J¹ JG@& t ZYX  Xü<ì2ìü<ü<ì991/<ä2ü<Ììî2990!!!!!!#53546;#"%%þÛþÉ\þÛþÉþÛ½½§äPDB/þÜ-cû üáNÊœá0 J?@" t ZYX Xü<ì2ìüüì991/<ä2üìî29903#!#535463!!#"î¼¼þÛ½½§äöþÛÅB/ÃcáüáNÊœùì30ÿÿýLÆ' òþª ÿÿEýLå' Äþª ÿÿÿÜýhîX' ØþÆ Sÿÿÿàý„ñ' äþâ TÿÿýLÆ' aþª ÿÿEýLå' Dþª ÿÿÿÜýlX' @þÊ Sÿÿÿàýlñ' 8þÊ Tÿÿý0Æ' SþŽ ÿÿEý`å' .þ¾ ÿÿÿÜýd]X' þ Sÿÿÿàý`ñ' Dþ¾ TÿÿÿÜÆ˜' ë· ÿÿEÿìå†' õ¥ ÿÿÿÜî' ô2 Sÿÿÿàñ4' ïS TÿÿÿÜÆÍ' Gì ÿÿEÿìåÕ&  5ôÿÿÿÜz<' ;[ Sÿÿÿàñ_' @~ TÿÿÿÜÆÞ'L$ý² ÿÿEÿìå& L ýÛÿÿÿÜmD'Lþ Sÿÿÿàñ?'Lþ Tÿÿÿ–ÿ|Ñ!' 0â ÿÿÿNÿ å&  4Âÿÿÿìq©&  Èjÿÿÿìå&  VØÿÿÿ–ÿ|Ñ1' 8P ÿÿÿNÿ å &  ,(ÿÿÿìq•&  Ü´ÿÿÿìå&  B"ÿÿXþ ­Ž' ³ã[ý4ù¶75353;#"'&'&5327'&54767&5$0óáááÌ2a@M(1„Žl\>mFÜ|i»ÌÉ–úþ{©ƒ1‡'OŒZÃ$Äþáá^ááå>B/á7*Š_lH>Ãþ÷«^OpåbĘÞûÉDh 'à@5Âÿÿÿìý~\c& ‹ þÜÿÿÿìýÚüc& Œ  ÿ8ÿÿXþ ­Ž' [ý4ù¶73#%3#;#"'&'&5327'&54767&5$0ááþ¢ááö2a@M(1„Žl\>mFÜ|i»ÌÉ–úþ{©ƒ1‡'OŒZÃ$Ä>áááã>B/á7*Š_lH>Ãþ÷«^OpåbĘÞûÉDh 'à@5ÂÿÿÿìþÈ\c& ‹ lþÈÿÿÿìþðüc& Œ @þðÿÿXþ ­Ž' ¢[ý4ù¶8<5353&'&5327'&54767&5$';#"'&'!53áJ½E>>mFÜ|i»ÌÉ–úþ{©ƒ1‡'OŒZÅ& 2a@M(1„ŽýñáþNáá.á1]_lH>Ãþ÷«^OpåbĘÞûÉDh 'à@5Â>B/á7 Êááÿÿÿìýn\c& ‹ ¨þÌÿÿÿìý‚üc& Œ @þàÿÿXþ ­Ž' &»[ý4ù¶9=5335353&'&5327'&54767&5$';'!53¥áMááZ >mFÜ|i»ÌÉ–úþ{©ƒ1‡'OŒZÅ& 2a@M(©œýñáþ‹áááá.á#._lH>Ãþ÷«^OpåbĘÞûÉDh 'à@5Â>B/á?ááÿÿÿìýŠ\c& ‹ üþèÿÿÿìý‚üc& Œ TþàÿÿÿÌþÒ' “Æ_ÿÿÿ`þ å' Æ –ÿÿÿÌþ»æ&_LUýºÿÿÿ`þ å& –Léý×ÿÿ ÿ†]lœÿnÿ†l1%!"'$47!32767654/&'&54767;#"'‹ ‹`þþplþ¶,&y1[xH](45[ "G(7þ†9 ÷-RTáHLF0 b,¦@^ˆn@",DX6,vÊB"C@,\ ÈþÖþÂ04GýÚ?á!ÿÿÿì+ Ãÿÿÿâö Äÿÿ ÿ†cû' ¬œÿÿÿnÿ† ÿ& F Tÿÿÿì+²& G ÿÿÿâö²& H œÿÿþµ°° ÿ«þæ &%#"'$47!3276765'!;#"E E<˜fÛ¤ƒþó1 &~LCi*r$".$ .04^>¦zjF/?‚¬¶¯ƒI,6gb`-d t8@áÿÿÿ¡ÿ©Ñüžÿ¡<ü"0@%3!"'&547!763&'&54767&'5%376'&'&'%67654'&#"ÑkûýãÈí¼B)!F'-p 77/&9 A5ÿÿÿìÿ©3ü ÓÿÚ<ü$4#50!&'&54767&'53376'&'&'%67654'&#"&®<*%D(E×+kþ/61"þÝ  á3]Q=ERH' è>Èí¼B*á)!F'-p 77/&9 A5ÿÜîX %!#53276=!’Hþwå®ë,1VVá,1j°°äÿàñ%#!53276=!3!!"^@ãþ¥ð¡,1"1,£þ“ãHHá,1jÙÙj1,áÿÿþ¢Ñurÿÿÿ±þ å* ØÿÿÿÜþÔrX' 3þÔ SÿÿÿàþÔñ' ?þÔ Tÿÿ0€ ÔtÿÿÿàñÔ&itÿÿäk¦u·å” ;#"'&=!Ú1,cKíŽ\W#u71,á\W¶+ÿÿ0ý¤ ÿøvÿÿ0€ ÖwÿÿÿàñÖ&wiÿÿ*¤¦xÿÿÿàñ&xiÿÿ0þ¢ ÿøyÿÿÿàþ¢ñá&yiÿÿþºÓôzÿÿÿàñô&ziÿÿ;Æ•!{ÿÿÿàñ!&i{ÿÿ -ÞOÿÿàð´'|ÂUÿÿàæ´& v|Âÿÿ§Q'}ÿöÂUÿÿØæQ& v}'ÂÿÿLþ “õ'}`þfqÿÿþ åñ& Ö}ÿüþbÿÿªý§&~ùUÿÿý§æ& v~Vÿÿþ¢ÑÊ'}þñþ;rÿÿÿ±þ åw& Ø}þäüèÿÿÿÜÿ& S}ÿêþpÿÿÿàñÿ& T}þpÿÿÖúUæ !;! '&1,´œþøþäPWœxû”j0,â\eÿÿþ¢Æ' ÿþ¢ ÿÿEþ¢å&  ÿÑþ¢ÿÿÿÜþ„îX' ÿäþ„ Sÿÿÿàþpñ' ÿøþp Tÿÿ°ÿÆ%i' æˆpÿÿVåú& Ò ÿÿÿÜÆk' CŠ ÿÿEÿìåk&  LŠÿÿÿÜs3& S 4Rÿÿÿàñ3& T >RÿÿÿÜÆÉ' >Š ÿÿEÿìåÉ&  0ŠÿÿÿÜq‘' 2R Sÿÿÿàñk' 7, TÿÿXþ ­Ž' ÿŸ[ÿÿXþ ùŽ& Š ÿ(ÿÎÿÿÿìþÔ\c& ‹ ÿ þÔÿÿÿìþÔüc& Œ ÿ þÔÿÿXþ ­Ž[Xþ ùŽ/;#"'&'&'327'&54767&5$&¬ na`(1¤Šl;)'IÜ|i»ÌÉ–úþ{©ƒ1‡'OŒZÃ$ÄB”(-s}ná}cˆ`ˆDÍÿ«^OpåbĘÞûÉDh 'à@5Âÿì\c&'&'&5672+5327676G+ƒ9ÐR¡HK©¥ñí0€7‘h°ŸÁ€dwÉ}[;  ó#4fò5uTD<áO1?)ÿìüc)+53276767&'&'&5676;#"'&CD™›Å€dwÉ}[;¤+ƒ9ÐR¡HKŸ¯ñí&7 Q94FD7< 33M! '_´Ú%5,iG—ƒec5ã0$ $*  ê CAƒŸÒRXá,$ QB  á8-S‘m‡\daçÙ‘Ö”w<$6!`‡]]T'3WE‹fnf'ÿàÀ -%&'+53276=3676+"7327654'&#"V<%&:WE*((0ïHN“ÒRX£LÇÚ¯ã€]>4FD7$á(/`rNN`J‹fnfÄ`-á,$ QBÿàñ 9"327654'&#"'&'+53276=3676;#"/EC8‚\?hÚ¢8Q%VE*(ðFO“ÑQX $3H3 &_žQB*,$ þbá$/drNN`J‹fnf' á5-ÿÿþãþÀ' ÿOžcÿÿþ­þì& ¢ ÿžÿÿÿàÀÁ& £ ÿàÿÿÿàñ³& ¤ ÿèÒÿÿ µeæ %%327654'&#"%;#"/#!#53!632M,>5M5M5M(N365,Kÿ±ÿì+)5!27654'&54767’þZ’˜)6þÿr uéþ^JÞf>^á\$$(B;‹G&m16þôÌ%*%Xþ÷y}qe›ÿâö$%)5!27654'&54767;#"'0Vþâþ>®˜)6þÿr uéþ^Jð',8.RáP¤"‚á\$$(B;‹G&m16þôÌ%*$YýªâYÿÿþŽ‹mÿµþŽú#;#"''&'&7!3276765@390gL(5òæúnÆ$.0`UZkFOûkK',á7bCsLŠèŠ\ssj1+-3diøjÿì )5!2765!VPþ¾ýºÚÚ,0œÛe\á,1jlÿìå%#!532765!;!"^@ãþ±ä¡,1"1,£õþŸãHHá,2ilû”j1,áÿÿ<þ€Ûnþå¤$5;#"''&!4763&547632276'&'&'&#"D5("V‹  nt‰¹Y2þçxAw~M©`bºþp1& 04!+ á3DP&4OþKµÇf7*—g?'J­ Œ7&':ÿâÿÐ'œ*%276'&'&'&#+53767632#"31?1& 04£"J@žZZ¨-aAµ`bº|aÚè7&'9àዞ`@(H®.8¬XDÿâÿÐåœ/%276'&'&'&##"'+532767632;#"1?1& 04š…uÚi"IAkZZƒ+SAµ`bº ,Dd›¦è7&'9üPlá}®P@(J¬G7áÿÿþµ°×' ÿ·ö ÿÿÿ«þæ& N ÿO-ÿÿÿÜî3' ÿèR Sÿÿÿàñ3' ÿñR Tÿÿ°ÿÆ%ÞpVå| %&'&'2&'!;#"'0'#"'$5476™ f=eÏf^E=Sޝ‘*%"*%ä '   P8C!N'-_Ÿ è;ËÑæ49rFq#+áCIQ=ERHþfÖþ§\DM´§`L(2þü2(L`§´MD\Yý>GE:8E&uH„g>MOuf‹U`p\`wxáxw`\p`U‹fuOM>g„HÿÿLþ “¤qþ å¤ )"34'&!5 767"'&'&5476323¯6Láÿÿþ¢Ñurÿ±þ å*8$4'&'&5476762;#"'&#"'&&7!2767ç#/1/N,`V@I #¬,+3 *L>Košz’ß$m<49f,; 2$0bjCA2:Zƒá¬ª *Ll’,ÿÿÿÔÿìå»& ä}þ#,ÿÿlýpS& ã~þÈÿÉÿÿlýUå& ä~þÈÿ®lÿìS#"'5327!65!S€;Q®õjK`UrHþ{/!BþÆÌ_M¤ ó PSü»g®lÿìå%"'5327!65!;#"h¯þëjK`UrHþ{/!a=Mi«±À ó PSü»g®ý.þá.þæ¢j (  !46?>54&#">32!5h:ýÆýÆ´ &DX^DæÊeÉb`·T\\-?ZP> jýÆûðýÆ:ûëþå =TBV\ƒL¥¼98þôFGDC+P=YNŒcš{Õî;f@ÔÌ1ÔÌ0!#!¡Åfþˆ-¤ö1@ ÔÜÔÌ1Ô<Ì20K°TX½@ÿÀ878Y3#%3#¸ììþuììööööÕî¸ö8µÔÌ1ÔÌ0K° TX½ÿÀ@878Y@ //]!#œþâÅöþø îÅø!Ñ@  °° " "ÔÌÔÌ999991Ô<üÔ<ì99990K° TX½"ÿÀ""@878YK° TX½"ÿÀ""@878Y@]             ! !.]'&'&#"#5463232653#"&j6-(ŒmX$K&<'$'ŒkX%G"<2j‚'<9jîþö8µÔÌ1ÔÌ0K° TX½ÿÀ@878Y@ //]#7ÇÅþâöþøðîáöb@ ÔÌ91Ô<Ì90K° TK° T[X½ÿÀ@878YK° TX½ÿÀ@878Y@/// ]!#'#Í5ß²ÇÆ²öþø¡¡ðîáöh@ ÔÄ91ÔÄ290K° TK° T[X½ÿÀ@878YK° TX½ÿÀ@878Y@//// ]373ÍݲÆÇ²ßþø/ôwqB@ ÔÌ991ÔÌÔÌ0K°TK°T[K°T[X½@ÿÀ878Y´78]'T%#%ôvwc¸k 3>323.#"bLM`­”“­c<=<=‡‡c¸k @  ]]ÔìÔì1ÔÜÄ20332673#"&bLM`­”“­k<=<=‡‡ßuòkµÔÌ1ÔÌ0!!ßþíköcbk/@ ÔÌÔ@O?/]Ì1Ô<ÌK° QX¹@8Y20!#!#FþâŰþâÅkþøþøocÉk#!#‹ÇÅþâ“ÇÅþâkþøþøZwð%!!!5676767654'&67632¸ þõ þõ?. ,A=J@AABƒ–$G þ呚›tP;*AE 1)Z58¼¥BKS;r`] /-’¤NµÔÌ1ÔÌ0!!-wý‰N¼ƒÿNÿ¦!5!Nü5ËêÿËÿ¦!5!Ëû;Åêçÿêÿ¦!5!êüýêPÆ÷ 2"&46"264hxO()£îž¡­nMKpNöT'd;t¡žî£•LpKLn-;¤13#%3#¸ììþuìì1öööáá53#áááá?á%3#%3#^ááþ¢áááááá?? 3#3#%3#¯áá¯ááþ¢áá?á}áááEÿìå%"'&547!32767654'!;#"'&'[ØuÉg&d2MU%* !KA#7$ê)FådVPV@-&*QVKZ;3(á. 'VÿìqÙ0654'&#"32327676'#"'&54767632#!0'!+ýËñí6E&o­Tb–N}„N;51E1Ðm‘þ¿G.%0þ¨(, #CQ‡-3”E$2&UOqÿkJ'ÿìåE!5;!"'#!5327&'&54767632"67654'&'&”$X*ráþňº¸ˆþÄâw#=)+?XTfnp +%"& 04X=†:@+Há99á^.LHhã '#2."$ ÿíþå.@%&'&'&5476763237## '&547!32766'&'&"ŒV>¨_j2^k„$l"$:?02\š„ÿþ¾[3#*2-‘~^xf $!$#1/GB  iuw^h68@6`aþåázR”K@ÀmšzŒªdQLF6fþˆ_fj.<UjVo+\7/2C!F”€xâ)Ab"$ +*"Nþ¢?á 5353!53¯á2áýÁáþ¢áá^ááááþ¢áá5353áááþ¢áá^ááþ¢?á 5335353!53á}áááýÁáþ¢áááá^ááááº·í ·ýI·èýÒ- œ² 5œüdœ´þlþ”¶· %4'&"27>"'&47623J22Jƒ?@¸?@@?¸@Ü$2%&2¸@@@@¸@??lþXdÕ@@%d p & &üìüÄì91/Ôìä2990KSXÉÉY!!+53265!lÙ\\Ðy'dRþ;þñÕûõ úgþönlán…ßûõÿÜÆ!"'&547!32764'¸¶pþ»óœ±g3|nuZqX4;õTfnLH0DI®0þ(Ñ"6654&#322765#"'&54767632!&'&47!i)@5,!,)'þÂÊjŒ$šƒi”+³Tc¢Q_V.N—þóÝ¢¢057D(K#N$.=*ý,šÌ–"Fc½8(ÎR&HTÌêñ™ÿŒ“suÖ~¿]zJ\ÿÿýôÆk' ˆýô' @Š ÿÿÿÜÆ…&  9¤ÿÿXþ ­Ç&[}ÿ®ÿ8ÿÿXþ ­1&[ ¾PÿÿXþ ­&[ BÿÿÿÌþ×'>ýÒ_ÿ–ÿ|Ñ‚:654'&32#"'$&7!3276767#"'&54767632¸,,;!%&,?¼Mï²¥š{þí# $xZ;re73 C’\|-wqb`YM]#ì&-#*Bþ|^6()[:Š\^ˆ-"')Ha‡c)s52(#ˆ4‹þâÿÿþŽÄ&m„þµ°°#"'$47!3276765'!°T<˜fÛ¤ƒþó1 &~LCi*r$".$(ÿÖ•jF/?€ ¬¶¯ƒI,6gb`-dŸÿÿLþ “t&qŒþ@ÿÿþ¢ÑX&rþìþ$ÿÿ°ÿÆ%ÞpTz-¦ÈU_<õÉ.É.ümüÙÙjmþÑümþøÙÑhÑÑãç¤!%ç5yBj-Áq{¼s}fƒ‡oÁsXXXé!}˜‰¨¶u‰¬muáVw\¢\…Zj9s¦o/9Ç^–¨Z\®b¬®ZR¬b–Z#¬o P7;¢°ö´Xã“wºöª-wX--XÕ®FÁo9Á///°!!!!!!˜¨¨¨¨¬¬¬¬w\\\\\wÿújjjj¢^^^^^^¨\\\\b¬bbbbbB    ;–;!^!^!^˜¨˜¨˜¨˜¨‰ZZ¨\¨\¨\¨\¨\ubububub‰ÿà ¬¬¬¬¬ÿø mu®®áZáZáZáZÿÙ%w¬w¬w¬ÿ’j¬\b\b\bD…#…ü…#¬¬¬¬ZoZoZoj j j j j j ;s¢s¢s¢® ¢–+-˜˜¨ÿä}–a¨\}l[& ¬¬®ZPR¬\ –…¬b;ooZZus nƒs n’QãþIã!^¬\bj j j j j \!^!^ubu®\b\b nubw¬ÿú!^!^o\¨\oެ\b\b=ò…#jŽj ¬Zo6n‰¬js¢!^¨\\b\b\b\b;1%oÿúÿú ¬¢9Ànxx–¬¢MFX\•f0l|šbb§§§jjXlrPPP@DxbKRººMººˆˆhA©[[[;ˆˆXUTP:D.vne¦¦¦¦7wl=x^hëF’’3B‰QJ4.98QII†UUÞô°°ßÚÚHHðð - -››ÚÚ.ˆßL¾ )þÈ'JH–ÇÕð -ß-†L)ð 펿ßßÕNNoØS ûV;`S/§ß-to’ -Ððð -XÀÿúû-JÐaÚß¹ÿô¿sÕ-ÿ¯Áþ¡þyþµÿUþÿ‚!}¶!¨s‰\¬u!Vw‰\‰¢bZ\PZ¬6•¬L6ƒ8b•¬a®P®/b–¨bˆLAHE@LbL@pi"þ$":4\b`Z¶ cr-4–¨\ ¨¢–˜VV.˜˜˜¨¨ÿÞ¶˜¬¬mÿòÿÞuw‰!¢}¶(¨ }wwuV‰\‰¢˜Z#PeNN(|˜S^AwÞ?\™˜˜®EV¬b¬–¨¤;O7aŠN:(‰¨8`\\Þ¨¬#®˜;«(\b¶Þ/\¶Þ }™u®%NN˜¨Z¤997e¬¬ u®‰¬eŠƒ!^!^¨\\\\\ }™ nw˜w˜\b\b\b˜¨;;;eжÞ(}•\ZGb!!bMpb+!j™N#j@G!G!2!KjM4H!j!ij2p3\ÚšˆC¼P•AgA´•6A§HOb¦¨™gЦgž¨âPŠu¦aQ§u¼QAb*.Â-;;¸Y¨ à±L±Ö°XXXèèÿÌÿÌÿ<ÿ<þãþã HHÿàÿ–<°L0ä00*0þ;à±±8Äl}>¬fBZZzˆ¸’±XXXXÿÌÿÌÿ– ÿ¡Äl}>>LÖZZz>lyKGf{5SK}}TTHHfd>O>X5RRkü˜ ÿ– i ÿìÿ÷òÿý3ÿ÷hbdPabbbbbdbbaabdb9b^baabcbaamMcP~5fiba)(+øô",DD*:PN D002(ä))0÷00$$.'&M"O""09Mÿ&UMb:jZ0OJ%$Jt2M'?'',,x 0"ñO9G.)"!^}–}–}–˜¨‰Z‰Z‰Z‰Z‰Z¨\¨\¨\¶®ub‰¬‰¬‰¬ C‰¬¬u®u®u®áZáZáZáZVRVRVRw¬w¬w¬w¬\b¢–¢–…#…#…#…#¬¬¬ZoZoZoZoj j j j 9P9P77;s¢s¢s¢¬o;®b!^!^!^!^¨\¨\¨\¬\b\b    j ;;;66666666ÿÞýšýþqþ5ÿTÿ"••‘‡••ÿÿüÍüÃýhý6¬¬‘‡¬¬¬¬þßþßü–üŒý,ýþ(þ(‘‡õÍ  ÿÿüæüÈýrý@þUþUbbbbbbÿ\ÿüáü×þ&ýôLLLLLLLLþ{ünü›ýµ@@@@@@@@ÿpÿ*üáü×þ?þþÈþ}66••¬¬ÇbbLL@@66666666ÿÞýšýþqþ5ÿTÿ"¬¬‘‡¬¬¬¬þßþßü–üŒý,ýþ(þ(@@@@@@@@ÿpÿ*üáü×þ?þþÈþ}6666666!!þñÿ¯!ÇÇ  ¬¬¬¬¬þ þ¡ýíþy‰‘õ Ç  ¬¬þ)þµ‡Í LLLL––LLýÙþþýÇ-Ç@@@@@þ8ÿUþBÿ‚ZÕÇ--°°j°˜–––œœ9‡Ë‡ÉZ¤¯é¦/&&ž¨&ö% ¾¾I9ö% ¾¾)"I&'I0J9YEn'<2 <,.ZgŒ;;2J Zu!//ÿô/#/#/BþBþBþš¤£šBB;IBþBþBBBþBþþBBBBBB9·™·™º?222B77BBøþBBøþB BB B BBBBBBþBþBþ}››}BBBBþþBþBþBBÁAÁÁÁÁÁÁÁB',ÁB BBBBBBBB!w££?ÿúÿúddcddc˜BXqy111± XX¶¶¶¶’ÿÖ“”À“BJ/XXXXXXXXXXXXXXXWXXXXXXQQXXXXXXXXVVNXXXXXXXXXWXXXXXXXXXXXXVVXXXXVVXXXXXXXXXXXXXX2222BBBBÁáXXXXXXXXXXXXXXXXX9?rn’’’’¦/¦/  XG¸œ#X  åC@_24!!ççÿìá-XX!XXç–@ƒç64HFFFèèèéÆéèèèèÅèÜÜÜÛånÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìiÿìÿìÿìÿìEÿìiÿìÿìÿìÿìÿìiÿìÿìÛÛDDÛÛÛÛÛÛÛÛu77ÿìÿìÿìÿì7777ÿìaa¯¯"5"Y::È;+6.oc…ÉN8/&//0ŒŒ "N`yaÌ7g!!!!œ•½‘‘G®CL×54=/U28Y^CVpÞœj6”âgv€‘2 ‘1.r¢jD±7`./<KD$>K--9.7.P<<<<<<....RR–s'¼J*R*"ˆóÞ..:=4%=?D-W&W;%˜J@ƒ3@V90›~0G+%(C(#(=(.6W0$2$0174!$%2 02)!"$E=80+ÍQÝÓögÿ¾.rA1ððfnCDÒÒÍÎÉÉùStSt-IS-6SS`{{66O6ee5a}T2)‘XtSuN*u5&%2SuQQuBBw…`V!`‰¬Aºb†s®¦/¦/¨EEöööG¹¹‰¬ÁˆãçelPab EÿÜÿàEÿÜÿàEÿÜÿàEÿÜÿàEÿÜÿàEÿÜÿàÿ–ÿOÿìÿìÿ–ÿOÿìÿìXÿìÿìXÿìÿìXÿìÿìXÿìÿìÿÌÿ`ÿÌÿ` ÿnÿìÿâ ÿnÿìÿâÿ«ÿ¡ÿ¡ÿìÿÚÿÜÿàÿ±ÿÜÿà0ÿàä·00ÿà*ÿà0ÿàþÿà;ÿà àà§ØLªÿ±ÿÜÿàÖEÿÜÿà°VEÿÜÿàEÿÜÿàXXÿìÿìXXÿìÿìXXÿìÿìèèèèÿÌÿ`ÿÌÿ`ÿ<þøÿìÿìÿ<þøÿìÿìþãþ­ÿàÿàþãþ­ÿàÿà ÿÐÿÜ ÿÐÿÜHTÿìÿìHTÿìÿìÿ–ÿOÿìÿìÿíÿìÿìÿœÿìÿâÿµÿìÿì<ÿâÿâÿ«ÿÜÿà°VÿìÿìLÿ±ÿ±ÿÜÿàÿvÿlÿïÿÔllll.Õ-Õ ðð/ßoZ-ƒçP-EÿìÿìÿíÿOlXXXÿÌÿ–L°DDDD”Ø”€xÐX°HœØ0d  \  à ` ° ÜŒÐ$p´üääÐ||Ø,èDœ ¨ààdè` ÜÈxä h Ð!!P!”!Ø""H#@#Ø$`$ø%¨& &ì'`'È(@(¼)**Œ++¤,<,°-Ì.@.´/H0@11Ð282ü3(3ì4t4t4Ä5„677à8$9X9˜:´;”<<<P>¼?D@@@@ðAHAxAˆAàBlBÜBüCC<D0DTDxD¤DÐE F€G4GLGdG|G”G¬GÄGÜHH8HÐHüI IDIpIœIÀJ4K8K\K€K¬KÐKèLhMXMpMˆM¬MÄMÜMôOdO|O”O¬OÐOèPPP0PHQ`QxQQ¨QÐQðRRpSxSS¨SÐSðTT¤TèUU4ULUdU|U”U¬UÄUÜUôV V$V<VTVlVœV¬WhWˆW W¸WÐWèXXX0XHXlX„XœX´XÌXäXüYY8Y\Y˜Z(ZÌZð[[@[X[p[ˆ[ [¸[Ð\\Ì]€]¤]¼]Ô]ì^h^€^´^Ì^ä^ü__,_P_Ä`\`t`Œ`¤`¼`Ô`ìaa˜b0bdbŒb¤b¼bÔbìcŒdœd´dÌdädüee,eDe\eteŒe¤e¼eÔeìfff@ftfØgpgœg¼gðhh0hHhlh„hœh´hÌhäii(iLiti¸iÐièjjj0jHj¨kkÔkäl@lŒlìmxmänXnhnÐo4op(pˆq,qär0rŒs spsütDtŒtäu<u„uÌv0v|vÄw<wTwlwÜx8x yy„zzxzˆ{ {t{Ì|(|`|x|”}}\}¨~~H~ˆ~ülØ€t€èXÀ‚0‚„‚ ‚¼ƒƒƒ,ƒDƒ\ƒtƒŒƒ¤ƒ¼ƒÔƒô„ „,„D„d„|„œ„´„Ä„ä„ü……<…T…l…„…œ…´…Ì…ä…ü††,†D†\†t†Œ†¤‡‡‡0‡H‡`‡x‡‡¨‡À‡Ø‡ðˆˆ ˆ8ˆPˆhˆ€ˆ˜ˆ°ˆÈˆàˆø‰‰(‰@‰X‰p‰ˆ‰ ‰¸‰Ð‰èŠŠŠ0ŠÄ‹L‹d‹|‹ÈŒ\Œ¬Œø(@Xx°ÈàøŽŽ0ŽHŽ`ŽÌ\Ô4È‘`‘È’X’Ü““`“ô”<”°•,••¼–,–Œ——x—ؘ„™ ™œššˆšø› œDœøÌžˆŸŸd  ˜¡ ¡l¡À¢¢t¢ì£8£t£¤¤$¤”¤Ð¥`¥Ì¦8¦Ð§H§´§è¨\¨È©X©ôªHªœ««d«Ð¬ ¬H¬Ü­P­ô®<®¤®ì¯l¯¸°°h°à±T±|±¸²²0²|²ä³T³ð´P´°µµ„¶ ¶ ·4·¸·ì¸l¸¨¸Ì¹L¹¼º0º¸»x¼8½ ½”¾h¾ø¿°ÀÀdÀ¤ÁÁˆÁÔÂ4ÂtÂÈÃÃˆÃøÄ0ÄpÄ€ÄĠİÄìÅ(Å„ÅàÆ<ƘÆÈÆØÇÇÇ@Ç\ÇpDŽǰÇÌÇÜÇìÈŒÈìÊÊ,ÊhʼÊôˀ˸ÌÌ4Ì\̬̄ÌÌÌÜÌìÌüÍ ÍÍ,ÍXÍh͸ÍìÍüÎHÎXθÎÈÎäÏÏ,ÏDÏxϨÏÐÏøÐÐ(Ð<Ð`ЀРÐäÑÑ8Ñ\ÑˆÑ¤ÑØÒÒ<Ò|ÒèÓÓxÓˆÓ¤ÓÈÔ Ô`ÔœÔìÕ ÖÖDÖTÖdÖtÖÖ¨ÖÄÖà××8×`׸×ìØTØlØ|ØØÔØôÙÙ8ÙHÙXÙpوٰ٘ÙÈÙàÙøÚÚ(Ú@ÚPÚ`ÚpڜڬڼÚÌÛ<ÛLÛ\ÛˆÛ˜Û¨ÛàÛðÜÜÜLÜ\ÜlÝÝÝ|Þ,ÞDÞ\Þtތޤ޼ÞÔß\ßÈàà°àÀá$áláÌâââ\âlâ¼ã0ã@ã˜ãìä`äÈååhåàæPæ çç(ç@çXçpçˆèè”èüéé,é´ê(êÈë4ë”ììpì€ìðíPí€íøîTîäïDïTïdïÜðTðÌðÜðìðüñ4ñpñØò4òLòdò|ò”óó4óÔóäóôô,ô<ô¤ôüõxõõ¨õÀõôööˆö˜öÔ÷÷ ølø|øüùù$ùœù¬ù¼ùÌúú ú0ú@ú„ûlû|ûôü\ýýÄþþhþÜÿ0ÿðˆ˜dø0ìüÄt,œX´Ä ,l|4Dœø ° ` ¨ ü h ¸ X ð   ˆ  @P`xˆðH ¸ÐèxÐàð4x°äD üTl„È Hˆ¼ð T„”ÄD”ÜHXh€˜h°øpÈäüPhxˆ ¸ÈØð 8Phxˆ ¸Ðè ,<Ld|”¬ÄÜô $<Tl˜ÄÜô$4DTÐ ŒÜ , ” À! !¤""\"|"Ü#ˆ#Ô$8$ì%4%¸&&¤&ð'„'Ì(D(”)L)œ)ä*4*Ü+ +ä, ,˜-$-4-Ð-à..$.l.Œ//$/¤/ô0p0À1 1„1°1ø2 33\3|44˜4Ü4ì5¨5ð6 6°6è707Ä7Ô8X8Ü9˜: ::d:à;(;8;X;ÔD>ð?8?Œ?¬@@8@¬AA,ADA\AtAŒA¨AÀAØAðBB BŒB¤BüCCXCpD,DDDøEEpEˆFF F8FPFhG$G„HH(HŒI I°IÈIôJxJ¤JÀK8KTKØLL`LpL„L¬LÈLøMXMØN\NÄO O\O¬P$P`P PÄPøQLQdQ|Q”Q¬QÄQÜQôR R$R<RTRlR„SS,TTT$T4TDTTTØUXUÀUÐUàUðV@VÌW8W¨X$XÌY8YŒZ ZhZì[T[°\ \È]H]Ø^h^´_ _¬`<`¤aTaübŒc4c¨cÄddTdld¸eeleÔf,f˜fègLglg´hdhh¤hèiXiÜjpk\kØl€m,mÐnHnØo€p pxqq¤r$ràsTsÈtˆupvvÜw`x x°yPy´zŒ{d{È|T}}ü~|~𔀠€¨, ‚‚”‚ăƒÌ„`„œ…8…p…¨…ì†H†¬†à‡$‡Œ‡È‡øˆ(ˆ„ˆ´ˆä‰$‰\‰|‰´‰äŠŠ\Š ‹‹(‹d‹œŒ ŒŒè ôŽDŽ œ0¤Ü‘‘t‘Ô’’|’°’ä“4“t“´“ô”`”ˆ”œ”°”ĔؕX•h•¨•ü–T–¤—,—¨˜˜\˜œ™™X™œ™Ðšš<š¬šà›,›P›èœPœÄ,XÌžXŸŸLŸ¨  € ð¡¡H¡”¡ü¢X¢°¢È¢à¢ø££(£@£X£p££¬£Ä£Ü£ô¤ ¤$¤<¤T¤l¤„¤œ¤´¤Ì¤ä¤ü¥¥4¥L¥d¥|¥”¥¬¥Ä¥Ü¥ô¦ ¦$¦<¦T¦l¦„¦œ¦´¦Ì¦ä¦ü§§,§D§\§t§Œ§¤§¼§Ô§ì¨¨¨4¨L¨d¨|¨”¨¬¨Ä¨Ü¨ô© ©$©<©T©t©”©¬©Ä©Ü©ôª ª$ª<ªTªlª„ªœª´ªÌªäªü««0«L«d«|«”«¬«Ä«Ü«ô¬ ¬$¬<¬T¬l¬„¬œ¬¼¬Ü¬ô­ ­$­<­T­l­„­œ­´­Ì­ä­ü®®,®D®\®t®Œ®¤®¼®Ô®ì¯¯¯4¯L¯d¯|¯”¯¬¯Ä¯Ô¯ì°°°4°T°l°„°œ°´°Ì°ä°ü±±,±D±\±t±Œ±¤±¼±Ô±ì²²²4²L²d²|²”²¬²Ä²Ü²ô³ ³$³<³T³l³„³œ³´³Ì³ä³ü´´,´D´\´t´Œ´¤´¼´Ô´ìµµµ4µLµdµ|µ”µ¬µÄµÜµô¶ ¶$¶<¶T¶l¶„¶œ¶´¶Ì¶ä¶ü··,·D·\·t·Œ·¤·¼·Ô·ì¸¸¸4¸L¸d¸|¸”¸¬¸Ä¸Ü¸ô¹ ¹$¹<¹T¹l¹„¹œ¹´¹Ì¹ä¹üºº,ºDº\ºtºŒº¤º¼ºÔºì»»»4»L»d»|»”»¬»Ä»Ü»ô¼ ¼$¼<¼T¼l¼„¼œ¼´¼Ì¼ä¼ü½½,½D½\½t½„½œ½¬½Ä½Ô½ì½ü¾¾$¾<¾L¾d¾t¾Œ¾¤¾¼¾Ô¾ì¿¿¿4¿L¿d¿|¿”¿¬¿Ä¿Ü¿ôÀ À$À<ÀTÀlÀ„ÀœÀ´ÀÌÀäÀüÁÁ,ÁDÁ\ÁtÁŒÁ¤Á¼ÁÔÁìÂÂÂ4ÂLÂdÂ|”¬ÂÄÂÜÂôà Ã$Ã<ÃTÃlÄÜôÃÌÃäÃôÄ ÄÄ,ÄTÄdÄ|Ä”ĬÄÄÄÜÄôÅ ÅÅ4ÅDÅ\ÅxÅŨÅÀÅØÅðÆÆÆ0ÆHÆ`ÆxƈƤÆÀÆØÆðÇÇ Ç0ÇHÇ`ÇxÇǨÇÀÇØÇèÈÈÈ(È8ÈPÈhÈ€ȘȰÈÈÈØÈðÉÉÉ(ÉPÉPÉPÉPÉPÉPÉPÉPÉPÉPÉPÉPÉ|ɌɴÉÜÊÊ,ÊDÊ€ʼÊøËË|ËÜÌ<ÌtÌÌÍPÍ´ÍÐÎ0Î0Ï„дÐÔÐðÑÑ0ÑLÑlѬÑðÒ Ò”Ò¨ÒØÓÓ$Ó@Ó\Ó”Ó”ÔÔLÔÈÕ8Õ´ÕÜÖˆ××H×d׌×À×ôØDØXØl؀ؔبؼØÐØäØøÙ Ù Ù4ÙHÙ\Ùpل٘٬ÙÀÙÔÙèÙüÚÚ$Ú8ÚLÚ`ÚtÚèÛœÜ,ÜlÜØÝhÝÜÞÄß”à<àœà´áÐââtãôäå$弿(æÈçTçŒèè|ééhéÄê0êtêèë¤ìì¬íXíäî(î8îHîXîàïï ï@ï`ï€ï ïÀïàðð ð@ð`ðxð¨ðÜññ@ñˆñÐòò0ò`òòØó óÌôxôÀõõPõ˜õØööTööÌ÷÷X÷àøhù(ùäúÈû$ûhû ûØüüHü€ü¸ý<ýÀýüþdÿÿ¤ÿÈÿð@h´Ø,€Ôd¬ô0pÔH¬ì,l¬d¤ä$` à,xÈ  ` ¬ ð 8 t ° ð , h ¤ ü L    \ È\ ðT¨HŒä4„ð$X¨äPèxD¼ìˆˆ¸´Hð\l€”¤4¬p´ÜHˆðp , P t  ¼ Ô!!@!`!¸""p"Ø#@#Ä$8$È%\&\&ü'°( ))`***¨*È*è++L+”+ð,`,¨,ì-,-|-À.¨/4/¸0@0t0Ð11l1È2 2L2°33x3Ì4 4ˆ4ð5d5Ø6t77\7 8$88Ø99t9Ì:T:Ø;D;°;ø<@<°= =t=È>H>È?0?˜?À?è@@PAAÌB˜CPDDìEÔF”GHG˜GÔH(HdHŒH°HØHüI,I`IÄJJlJ¤JØK0KˆLLLôMXM¤MðNhNàOpOüPP PLP„P¬PÔQQHQhQˆQ¨QÈQðRR@RhRˆRÜRìS0SpSÈT¬TÐTôUU4UTU¬VV<V Vü[¨\\0\\\¤\ü]T]l]ð^x^^È^ü_H_”_ä`4`Àa aPa¤aøbDbŒbÜc,cDc\ctcŒc¤c¼cÔcìddd8dPdhdôe´ff\fÄfÜfìfüg g$g<gTglg|gÌhXhøiàj¤k´lXlüm|m¨männ8npnnÈnìoo,oPopo”oÌp$p\pxp°qq@q\q¨qÔrr,rHrdr€rœr¸rÔrðs s(sDs`s|s˜s´sÐsät˜uˆv0vDvXvtvˆvœv¸vÐvìwww4wPwlw˜wìxx\x¸yìztzü|œ|¸|ä}},}H}t}”}Ä}à~~$~P~l~˜~´~à~ü$@lˆ°Ìø€€<€X€€€ €Ô¤ø‚\ƒT„„¼„ô…H…œ…ô†L†°‡‡(‡P‡´ˆ(ˆxˆÌˆü‰(‰T‰€‰ÈŠ Š(ŠDŠ\Št‹‹4‹`‹ˆ‹°‹ìŒ8ŒdŒŒŒð0l¬ìŽ`ŽÔLÄì<h„°Ìô‘ä’P“—™Ðšš`š°››˜œ`(Œž( \££8£°¤$¤|¥Ô§l§´§è¨´©xªª¨«l¬4¬ô­¸±(±¤²¼´·8·´¸<¸¬¹¹”º$»d¼ˆ½ ½¬¾T¿ÄÀ€Á@ÁÔÂìÀÄÄÔÅTÅÐÆ\ƼÇ ÇÀÈlÈÐÉ<ÉÌÊ,ÊäË ÌdÌÔÍtͼÎTÏÏ”мÒàÓxÔ”Õ¨Ö¸ØDÙ<Ù¼Ú€ÛHÛØÜHÜèÝ0ÝÐÞ”Þèßà8áá\á¸ââ|âÌãã°äpåTçLè0é@êhëTìdí„î`ï ð$ñTò ó”ô,ôœõTöL÷ŒùúØûlü$üŒýý4ý\ý¼ýüþpÿd˜¬TÐpp<Ð |  L t ¼ €Ø8Üd °L|x ¤!„""l"Ð##X$ %%”%È&&H&x&Ø'H(0(À)|*ü,Ä00„1H1¬2@2Ð3Œ4 4€4ø5`5¬6 6p6È7x7¼8 8\8Ä9p;$=$>d@”B0DüJøLTN¤OdPPàR`SÜU0V€WÄX<XpX¤XÔYY\YxY”Y°YÔYøZZ0[([Ô\¨]$]¤^Ä_¨``€`¼`üa$aLataœaÄaìbb<b cc@clc˜cÄcôd˜dÀdèe8eˆe°eàff4fˆfÜgg4gxg¼h hXh¤hðiDi˜j j¨kkHk lHlàm„n`nüp(q\qôr$rˆrìs(sPsxs˜sÜt0t@tlt˜tÀtèuuHuxu¨vLvÄw4w€w¼x,xTx|xðyXy¼yÐyøz zè{p{{°{Ð{ð||(|P|x| |È|ð}}@}h}}°}Ø~~(~H~t~ ~Ì~üT”Äô€<€˜€¨€Ð€ô$4¤à‚0‚¬ƒLƒÔƒì„„„4„L„d„|„”„¬„Ą܄ô… …$…<…T…l…„…œ…´…Ì…ä…ü††,†D†\†t†Œ†¤†¼†Ô†ì‡˜‡°‡È‡àˆŒˆ¤ˆ¼ˆÔ‰Œ‰¤‰¼‰ÔŠЍŠÀŠØŠð‹‹ ‹0‹Ì‹Ü‹ìŒŒŒ4ŒLŒ\ŒØŒè´ÄŽlŽ ŽäŽô4D\l °ÀØè(8P`xˆ ¸Ðè‘‘‘0‘H‘`‘x‘‘¨‘¸‘ð’’ ’8’P’h’€’˜’°’È’à’ø““(“@“X“p“ˆ“ “°”D”¬•0•H•`•x•• ––(–@–P–¨–À–Ø–è—¸˜H˜ì™™™4™L™\š4š¼›h›€›˜›°›È›ØœLœ¬ 8Ph€žPž°Ÿ@ŸXŸpŸˆŸ Ÿ¸ŸÐŸè   0 H ` p¡<¡¤¢ ¢0¢¤¢Ü£ £0£Ô¤X¤è¥¥¥0¥H¥X¥Ô¦”§0§@§È§Ø¨„¨œ¨´¨Ì¨ä¨ü©©,©D©\©t©Äªªªªªªª¨ªØ«0«ˆ¬À­­ ®0®®Ä¯¯@¯œ¯Ì°L°x°”°°°Ì±±<±T±x±¨²²´³X´ ´Ôµµ(µ`µ€µ µð¶x¶Ì·t·”·¬·Ä·Ü·ô¸ ¸À¸Ø¹<¹T¹l¹|  +e@¯$_ÀB]ŽÐ 5m » “4ÿ ¾    S *b *¤ æ &  "I : &Ù h•Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain DejaVu Sans MonoDejaVu Sans MonoBoldBoldDejaVu Sans Mono BoldDejaVu Sans Mono BoldDejaVu Sans Mono BoldDejaVu Sans Mono BoldVersion 2.33Version 2.33DejaVuSansMono-BoldDejaVuSansMono-BoldDejaVu fonts teamDejaVu fonts teamhttp://dejavu.sourceforge.nethttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. http://dejavu.sourceforge.net/wiki/index.php/Licensehttp://dejavu.sourceforge.net/wiki/index.php/Licenseÿ~Z   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a¬£„…½–膎‹©¤ŠÚƒ“òó—ˆÃÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîºýþ    ÿ øù !"#$%&'()*+ú×,-./0123456789:âã;<=>?@ABCDEFGHI°±JKLMNOPQRSûüäåTUVWXYZ[\]^_`abcdefghi»jklmæçnopqrstuvwxyz{|}~€¦‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’Øá“”•–—˜™š›œÛÜÝàÙßžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     Ÿ !"#$%&'(›)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456²³78¶·Ä9´µÅ:‚‡;«<Æ=>?@ABC¾¿DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz÷{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™Œš›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     ˜ ¨!"#$%&'š™ï()*+,¥-./’012345œ6789:;<=>?@ABCDEFGH§IJKLMNOPQRSTUVWXYZ[\]^_`ab”•cdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n¹ o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ             ÀÁ              ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                         sfthyphenAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni037Auni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni0674uni0679uni067Auni067Buni067Euni067Funi0680uni0683uni0684uni0686uni0687uni0691uni0698uni06A4uni06A9uni06AFuni06BEuni06CCuni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni2015 underscoredbl quotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037 exclamdbluni203Duni203Euni2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0 colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B estimatedonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215F arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF universaluni2201 existentialuni2204emptysetgradientelement notelementuni220Asuchthatuni220Cuni220Duni2213uni2215 asteriskmathuni2218uni2219uni221Buni221C proportional orthogonalangle logicaland logicalor intersectionunionuni222Cuni222D thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244 congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225F equivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281 propersubsetpropersuperset notsubsetuni2285 reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Funi2290uni2291uni2292 circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4 perpendiculardotmathuni22C6uni22CDuni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230F revlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F integraltp integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni2341uni2342uni2343uni2344uni2347uni2348uni2349uni234Buni234Cuni234Duni2350uni2352uni2353uni2354uni2357uni2358uni2359uni235Auni235Buni235Cuni235Euni235Funi2360uni2363uni2364uni2365uni2368uni2369uni236Buni236Cuni236Duni236Euni236Funi2370uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423upblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2638uni2639 smileface invsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni26A0uni26A1uni26B0uni26B1uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27BFuni27C5uni27C6uni27E0uni27E8uni27E9uni29EBuni29FAuni29FBuni2A2Funi2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniF6C5uniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB9EuniFB9FuniFBAAuniFBABuniFBACuniFBADuniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFD dlLtcaronDieresisAcuteTildeGrave CircumflexCaron fractionslash uni0311.case uni0306.case uni0307.case uni030B.case uni030F.case thinquestion uni0304.caseunderbar underbar.wideunderbar.smalljotdiaeresis.symbols arabic_dot arabic_2dots arabic_3dots uni066E.fina uni06A1.init uni06A1.medi uni066F.fina uni06A1.finaarabic_3dots_aarabic_2dots_a arabic_4dotsarabic_gaf_bararabic_gaf_bar_a arabic_ringEng.altuni066Euni066Funi067Cuni067Duni0681uni0682uni0685uni0692uni06A1uni06B5uni06BAuni06C6uni06CEuni06D5¸€@t¾þ»»º»¹ú·ú¶µG¶»µG´2³–²2±d°–¯®¯k®¬«þª© ªú© ¨§Œ¨þ¨À§¦Y§Œ§€¦¥&¦Y¦@¥&¤þ£2¢¡ G¡þ¡¸ÿÑ@ÿ ŸA GŸAž2žk2œþ›úšú™þ˜—%–“þ’þ‘þþe}ŽŽŒŒ‹f‹2Š ‰ˆ»‰þˆ‡]ˆ»ˆ€‡†%‡]‡@†%…„…„ƒ–‚þe2€€d~–}d|S{f{2zez2yxfxdwþvþts s rq.rþq.pfp}onm»nþml]m»m€li%l]l@kkji%j»i@ÿ%hfhdgfgdfefedþcþbþa}`þ^d\[\þ[Z2Y-YXWWþV2UþTS TS RQR–QPQPOþNMdN–MdLþKþJIJ–IHúGúF}EDE}DCA?2>=<=þ<; <; :9:–98 99€8 8@76776-6545K4343212d1-10/@0D/.-.-,--¸@@ ,+,,¸@ +*++¸À@ * **¸€@W)K('K&$&$%$%K$$#""2! 4!>  4þ2¸€@ ¸@@ ¸@WK–77ú22ú2X}X       ¸À@   ¸€@   ¸@´ ¸@–  ¸d…+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++iep-3.7/iep/resources/fonts/SourceCodePro-Regular.otf0000664000175000017500000025700012271043444023126 0ustar almaralmar00000000000000OTTO€`BASE‹”±?$:CFF árHˆÚX headûlÝÇì6hheavß$$hmtx«¹®<"ĈmaxpÃPHnameˆ ¥°<¦postÿ¸3Hh SG›à_<õèÌÝKžÌÝKžÿÙþpÂèØþïXÿÙÿ–ÂPÃXŠXKŠX^2    ADBE@ ûîÿØ`“à” "žEET&[E9º`Ï/ I U Ùn$Gk  Œ— Ь 6 T Lb 6 r® *  ÀJ 4  > 2V #¶ˆ H:> ,:† :² :È *:ÞCopyright 2010, 2012 Adobe Systems Incorporated. All Rights Reserved.Source Code ProRegular1.013;ADBE;SourceCodePro-Regular;ADOBEVersion 1.013;PS 1.000;hotconv 1.0.70;makeotf.lib2.5.5900SourceCodePro-RegularSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunthttp://www.adobe.com/typeCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.http://www.adobe.com/type/legal.htmlTypographic alternatesAlternate aAlternate gAlternate dollar signCopyright 2010, 2012 Adobe Systems Incorporated. All Rights Reserved.Source Code ProRegular1.013;ADBE;SourceCodePro-Regular;ADOBEVersion 1.013;PS 1.000;hotconv 1.0.70;makeotf.lib2.5.5900SourceCodePro-RegularSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunthttp://www.adobe.com/typeCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. http://www.adobe.com/type/legal.htmlTypographic alternatesAlternate aAlternate gAlternate dollar signø ÷æëv‰Ìêÿ ”âöáÍÎÏÐÑÒÓÔÕÖãäš™›è ŸþË !"#$%&'()*+,-./012345¡:=NXŒ•Áèçéëêîÿ   %$&(?FEGIHsrtv tzw ý kÌÕ L¡¥žœx¦§¬­¤¨RTýUé磩{¢ªôõå69”¢Vøùîïìí—ÄÛ†yòó«¬ üðñŠ8Y7[Wtuws’“‘¾¿½0ÍÔÖ×ÚØÛÙÜÎü/9@Z`z~¿ÄÑÖßäñö1Ie~€’¡°Üçë7CRTYaeoy‡Žž°³¸¼¿ÌÝã $(.1ÀCIMPRX[œ »!%+;Ico…“—žù     " & 0 3 : D q y  ‰ Ž ” ¡ ¤ § ¬ ² µ º!!! !"!&!.!T!^!“""""""""+"H"`"e%Ÿ% %³%·%½%Á%Æ%Ê&&j''Rûÿÿ 0:A[a{ ÀÅÒ×àåò÷4Lh€’ ¯Íæê7CPTXaeoy‡Œž°²·»¾ÆØá#&.1ÀCGMORV[œ »  $*6BZl€Ž’—ž      & 0 2 9 D p t } € ” ¡ ¤ ¦ « ± µ ¹!!! !"!&!.!S![!""""""""+"H"`"d%% %²%¶%¼%À%Æ%É&&j''RûÿÿÿÁÿ»ÿvÿ¿Sÿ~ÿWéÿdþ ÿLÿKÿHÿAÿ>ÿ5ÿ,ÿÿÿ ÿ¬ ÿæÿåÿÞÿ×ÿÓÿÑþäååååä»äºä³âÚâãá¿âZâ“á¹âBáªá¨á¥áÝáÛáÙáØáÐáÎáËá›àøàòàïá…áá;á5á à¥à¤àžàrà‡à}àZà@à8Þ#ÝÝÝÝÜþÜïܰÜYÛ¯Ûeª2<DJ†œªÀ4^¶¸ºØÚÜÈÊÆÐÔÜàÜÞÞÚàâäæðþ " ÐÖÚÞØØÐ´´žæëv‰Ìêÿ ”âöáãäš™›èŸþË¡çzwux ÕRô£÷ÖtžÌ¦ üÛTõ‹Œé=LNWXY[stuw䌖¡½¾¿ÁÙåkîýÿ   $%&(™?—UrstvŽš;ì<íKüOPRQSV\ ]^gZ hijko r#v'x)y*~.z01€234ƒ7‚5„6ˆ;Š=@‹>D–J—K˜L¢Vª^¬_«`°d±e³g²f¹m¸lÀuÂwÃxÄyÅz͂֋ÚÛà•â—á–£W΃>ï{+™MÆ{Ç|È}É~Êl©]´hºn^fkm×ÚØÜÔÙ`glÝßáãåçéëíïñóüýÿVXY_adhiTUmp!q"…8†9‡:‰<ŽABC­a®b¯cµi¶j»o¼pԉՊ׌ܑã˜?ð@ñAòBóCôDõEöF÷GøHùIúJû_`abcdef|,}-šN›OœPQžRŸS T¤X¥Y¦Z§[¨\Ë€ÌτЅц҇ӈØÝ’Þ“ß”úøùûìíðîïñ  ý]$%b€y¬•˜©¶Äÿµ2SourceCodePro-Regular.úöú÷úø úùúùøŒ dü$ùVú|1Ö4Pµźß#*18?FMT[bipw}ˆŽ˜ž¥¬²¸¿ÅÏÖÝäëòù)06=HSZaekryƒŠ‘˜Ÿª±·½ÄÈÏÖÝäêð÷þ '.5<CJQX_dkry€‡Ž”𡍝¶¼ÇÎÕÜãêð÷þ $18?FMT[binu|ƒŠ‘—¨±·ÂÉÐ×Þäîõü %,3:AHOV]dkrxƒ‰“™ §­³ºÀÊÑØßæíôû $+18CNU\`fmt{‚‰™¤«·½ÃÇÎÕÜãêðöý $+8?FMT[bipu|ƒŠ‘˜Ÿ¥¬²¹ÀÇÍØßæíôú#*05BIPW^elsz†”›¢¨®¹ÂÈÓÚáèïõÿ ")07>ELSZahks{ˆ›¤¬³¼ÅÎ×àéòû    ( 1 4 A I U ^ f o | … • Ÿ ¨ ± ¹ Ã Í Ö Ý ä ë ò ù    % - 5 ? H Q Y c m v „ “ ž ¨ ± ¹ Á Ë Ô Ý å ï ù    * 4 = E M W ` i q { … Ž œ « ¶ À É Ñ Ù ã ì õ ý    ( 7 B L Y _ e k q w } ƒ ‰ • › ¡ § ­ ³ ¹ ¿ Å Ë Ñ × Ý ã é ï õ   # ' . 2 9 ? C J Q X _ f m w ~ ‡ “ › ¦ ¨ ° · Â Ê Ñ Ø ß è ï ö ÿ $+29@GNU\cjqx†”›¢©°·¾ÅÌÓÚáèóú )0;BMT_fqxƒŠ•œ§®¹ÀËÒÙàçîõü '2AL[fu€š©´ÃÎÝè÷+6EP_jy‚‹’™£¯¶½ÄËÒÙàçîõü &-4;BIPW^elszˆ–¤«²¹ÀÇÎÕÜãêñøÿ ")07>ELSZahov}„‹’™ §®µ¼ÃÊÑØßæíôû %,3:AHOV]dkry€‡Ž•œ£ª±¸¿ÆÍÔÛâéð÷þ !(/6=DKRY`gnu|ƒŠ‘˜Ÿ¦­´»ÂÉÐ×Þåìóú"‚ÇÖAmacronAbreveuni01CDuni1EA0uni1EA2uni1EA4uni1EA6uni1EA8uni1EAAuni1EACuni1EAEuni1EB0uni1EB2uni1EB4uni1EB6Aogonekuni0243CacuteCcircumflexCcaronCdotaccentDcaronuni1E0Cuni1E0EDcroatEcaronEmacronEbreveEdotaccentuni1EB8uni1EBAuni1EBCuni1EBEuni1EC0uni1EC2uni1EC4uni1EC6EogonekGcircumflexGbreveGdotaccentuni0122Gcaronuni1E20uni00470303Hcircumflexuni1E24uni1E2AHbarItildeImacronuni012CIdotaccentuni01CFuni1EC8uni1ECAIogonekJcircumflexuni0136LacuteLcaronuni013BLdotuni1E36uni1E38uni1E3Auni1E42NacuteNcaronuni0145uni1E44uni1E46uni1E48Omacronuni014EOhungarumlautuni01D1uni1ECCuni1ECEuni1ED0uni1ED2uni1ED4uni1ED6uni1ED8Ohornuni1EDAuni1EDCuni1EDEuni1EE0uni1EE2uni01EARacuteRcaronuni0156uni1E5Auni1E5Cuni1E5ESacuteScircumflexuni015Euni0218uni1E60uni1E62uni1E9ETcaronuni0162uni021Auni1E6Cuni1E6EUtildeUmacronUbreveUringUhungarumlautuni01D3uni01D5uni01D7uni01D9uni01DBuni1EE4uni1EE6UogonekUhornuni1EE8uni1EEAuni1EECuni1EEEuni1EF0WgraveWacuteWcircumflexWdieresisYgraveYcircumflexuni1E8Euni1EF4uni1EF6uni1EF8ZacuteZdotaccentuni1E92uni018Famacronabreveuni01CEuni1EA1uni1EA3uni1EA5uni1EA7uni1EA9uni1EABuni1EADuni1EAFuni1EB1uni1EB3uni1EB5uni1EB7aogonekuni0180cacuteccircumflexccaroncdotaccentdcaronuni1E0Duni1E0Fdcroatecaronemacronebreveedotaccentuni1EB9uni1EBBuni1EBDuni1EBFuni1EC1uni1EC3uni1EC5uni1EC7eogonekgcircumflexgbrevegdotaccentuni0123gcaronuni1E21uni00670303hcircumflexuni1E25uni1E2Bhbaritildeimacronuni012Duni01D0uni1EC9uni1ECBiogonekiogonek.djcircumflexuni0137kgreenlandiclacutelcaronldotuni013Cuni1E37uni1E39uni1E3Buni1E43nacutencaronuni0146uni1E45uni1E47uni1E49napostropheomacronuni014Fohungarumlautuni01D2uni1ECDuni1ECFuni1ED1uni1ED3uni1ED5uni1ED7uni1ED9ohornuni1EDBuni1EDDuni1EDFuni1EE1uni1EE3uni01EBracuteuni0157rcaronuni1E5Buni1E5Duni1E5Fsacutescircumflexuni015Funi0219uni1E61uni1E63tcaronuni0163uni021Buni1E6Duni1E6Funi1E97utildeumacronubreveuringuhungarumlautuni01D4uni01D6uni01D8uni01DAuni01DCuni1EE5uni1EE7uogonekuhornuni1EE9uni1EEBuni1EEDuni1EEFuni1EF1wgravewacutewcircumflexwdieresisygraveycircumflexuni1E8Funi1EF5uni1EF7uni1EF9zacutezdotaccentuni1E93uni0237uni0250uni0251uni0252uni0259uni0261uni0265uni026Funi0279uni0287uni028Cuni028Duni028Euni029Ea.aagrave.aaacute.aacircumflex.aatilde.aadieresis.aamacron.aabreve.aaring.auni01CE.auni1EA1.auni1EA3.auni1EA5.auni1EA7.auni1EA9.auni1EAB.auni1EAD.auni1EAF.auni1EB1.auni1EB3.auni1EB5.auni1EB7.aaogonek.ag.agcircumflex.agbreve.agdotaccent.auni0123.agcaron.auni1E21.auni00670303.azero.onumone.onumtwo.onumthree.onumfour.onumfive.onumsix.onumseven.onumeight.onumnine.onumuni00ADuni2015uni2117uni2120at.caseasterisk.ahyphen.auni00AD.adollar.azero.supsone.supstwo.supsthree.supsfour.supsfive.supssix.supsseven.supseight.supsnine.supsparenleft.supsparenright.supsperiod.supscomma.supszero.subsone.substwo.substhree.subsfour.subsfive.subssix.subsseven.subseight.subsnine.subsparenleft.subsparenright.subsperiod.subscomma.subszero.dnomone.dnomtwo.dnomthree.dnomfour.dnomfive.dnomsix.dnomseven.dnomeight.dnomnine.dnomparenleft.dnomparenright.dnomperiod.dnomcomma.dnomzero.numrone.numrtwo.numrthree.numrfour.numrfive.numrsix.numrseven.numreight.numrnine.numrparenleft.numrparenright.numrperiod.numrcomma.numrordfeminine.aa.supsb.supsc.supsd.supse.supsf.supsg.supsh.supsi.supsj.supsk.supsl.supsm.supsn.supso.supsp.supsq.supsr.supss.supst.supsu.supsv.supsw.supsx.supsy.supsz.supsegrave.supseacute.supsuni0259.supsa.supag.supaEurouni0192lirauni20A6pesetadonguni20B1uni20B2uni20B5uni20B9uni20BAuni2215slash.fracuni2219lessequalgreaterequalnotequalapproxequalpiinfinityuni00B5partialdiffintegralradicaluni2206uni2126summationproductuni2113estimateduni2190arrowupuni2192arrowdownuni25A0uni25C6uni25C9uni2752triagupuni25B3uni25B6uni25B7triagdnuni25BDuni25C0uni25C1uni2610uni2611uni2713uni266Alozengeuni2032uni2033uni02BBuni02BCuni02BEuni02BFuni02C8uni02C9uni02CAuni02CBuni02CCuni0300uni0300.capuni0301uni0301.capuni0302uni0302.capuni0303uni0303.capuni0304uni0304.capuni0306uni0306.capuni0307uni0307.capuni0308uni0308.capuni0309uni0309.capuni030Auni030A.capuni030Buni030B.capuni030Cuni030C.capuni030Funi030F.capuni0312uni0313uni031Buni0323uni0324uni0326uni0327uni0327.capuni0328uni0328.capuni032Euni0331uni03080304uni03080304.capuni03080301uni03080301.capuni0308030Cuni0308030C.capuni03080300uni03080300.capuni03020301uni03020301.capuni03020300uni03020300.capuni03020309uni03020309.capuni03020303uni03020303.capuni03060301uni03060301.capuni03060300uni03060300.capuni03060309uni03060309.capuni03060303uni03060303.capuni03020306uni03020306.capuni030C.auni0326.auni00A0uni2007space.fracnbspace.fracuni2500uni2501uni2502uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250Buni250Cuni250Duni250Euni250Funi2510uni2511uni2512uni2513uni2514uni2515uni2516uni2517uni2518uni2519uni251Auni251Buni251Cuni251Duni251Euni251Funi2520uni2521uni2522uni2523uni2524uni2525uni2526uni2527uni2528uni2529uni252Auni252Buni252Cuni252Duni252Euni252Funi2530uni2531uni2532uni2533uni2534uni2535uni2536uni2537uni2538uni2539uni253Auni253Buni253Cuni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254Funi2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cuni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Funi2580uni2581uni2582uni2583uni2584uni2585uni2586uni2587uni2588uni2589uni258Auni258Buni258Cuni258Duni258Euni258Funi2590uni2591uni2592uni2593uni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259Funi0258uni02541.000Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Copyright 2010, 2012 Adobe Systems Incorporated. All Rights Reserved.Source Code Pro1F}®Ñø@‘¤¼è÷8C_vz™Àæêó-f•¢éïþ%8K€ˆ¦ºÏàû$4NchvŠ’–¥®ôûÿ 8B€™«·½Ê .38z’Óó'9>Bav†”¡®µ¼ô     2 B V t ~ „ ‹ “ ˜ Æ Í Ò ë ö 9 b £ Í â   * Q ` o t • · Ù Þ ä í õ û ÿ  $ 7 X c k q w z ‹ “ ™ © µ ¿ Ç Î Õ Ü â ê ø    0 7 B I N T Z a h m ~ ‚ ” ™ ¡ ¦ ¬ º Ñ æ ñ ü  &-39@GMR^q„‘¥µÅÕçóü *=Paenuyƒ•š §²½ÃÉÚßäéïõý %,15DSbqŒ‘™ž¢°¾ÌÚèíöÿ )6CMPW^bglx„œ¨´¾ÊÓÛãëñ÷ý *5?CNT[fq|ƒˆÐ‡ û3÷ ,÷$ÙÈ¥ª»nÁo^]zR!?Íò‡ø—Œœ÷9æûûû *û3ß³ê˜ÓÃÚåÁU* Ç÷J ÷.÷÷÷è÷5÷7ûèûûû.û7à÷É×èèÉ?ûûM@..MÖ÷ ªï¢Ô Ó × ? C¢Bª'ÞûŸãûqù$-ûqý$àÊ÷\÷‚’IÎ÷¾÷ KÚû69ekZ«S§¸É©Êé¬SI Ú÷ŒûPèC÷÷çÓ÷Pø,:ü.ûOZ<(øªï¢Ô Ó × ? C¢Bª'÷?ûŸûqù$-ûqý$àÊ÷\÷‚Éû\c À_ªM]_ypr©eŸŸ¨™£±œzqlqwTè÷I ijq}gghž£wÊMÊ/õC ÷4É÷GÃ÷4ø9 ÕMç¹³šž«t´{qo‚kM^²Ì†÷{“Œ——æYÈ1;>K"ɥǓµ¬¹À©iP 1 û Ù åø7÷vü7ÝøzûÈ ’KÏøzI . @  P «¤¡«ªr¡kkrulk¤u«“vto$3G!Q¦`¬r‡ … ¤‰§êÕ°~]YEYû i¯±wÂÒÀ¶ÊÊ]¯Iww‡ƒ{•Ñ÷ÁûQzû/ªw™÷F wegovecnž£tv÷\Î÷ÕÏ iƒvm[©­ƒ^T’±WØ °¨¤±²nG ÷&Ý÷±ðÅбÔ±†­ .M÷, É×èèÉ?ûûM@. ôÞÊó¶u®t£÷Êû] ÌønÒü øø¬½üIE÷ãüü­ ûv÷ ý'Iõ÷8÷7ÍðïïÍ&û7û8I!'ô2øn ôvü™HÚ\ ¼5ºuO÷EPû€^‚^‚^‡„¸ƒ·‚¹ k…ul^^uª«…YS’¯UÛ Xw [l]M…¹­›ž ÃÆÔÅBÃ8÷ H ÷/…sn HC #T®¾Dƒ5ÝZ÷" «¡£ªªu£k ™÷_ø9Ò´¸½¥¦ƒt¦û5pqp~mTj¶ÔI ÂMß²°Ÿ¤¥fÀ÷ÖW†l‰¥mn˜f>FK"ÐgvøAÐ T qxwqržw¥ —Ã’·“µ•Z“]”]ÅûŠî ª¢£ªªt£lY ÷TÚ tsll¢sª«¡£÷=s« ‹Ï÷‘º÷pÏæÞ÷»áæ÷8÷Uö÷÷e÷d ÷ ûXû5û´@†aÖÞû‘÷‘÷#ºû#÷p÷ ÛwwqrŸw¥÷@¥ŸŸ¤¥wŸqZ ÷ f~W„“cבЦÅ ûmÍ÷0Ï÷øÐw ÷8÷ ÷ø+ÒûÙøÝ9 hi ¿„£¥¢•¥´uljuvg÷6 rn™d0LLû-ÆQÙλºÄÃi²Ghl~vrׯ²Ã¦Ÿ}ÁԸ̎‡9SöY÷QDû(û]l÷6BÄÔ½t ’ [ Í û`÷ û÷-÷-÷ ÷÷`÷`û ÷û-û-û ûû`¹÷Cå÷÷÷åûûCûC1û ûû1÷ ÷C âìb—i™¨¢ œ¬°Ÿyswzq{ ÇÚ÷ô½¤¡¤­¯žnRûéÍ÷ô½¤¢¤®¯œnRûéÚ÷ðìdÀHUkjXnÃl§ZTml^sˆ '²EÍJ¹«OÇrÌÙÙ¤ÌÇÇ]¬IIdE'Æ¡°¼Æ»w¤iruyoo¢}¢Ž‹Œerqd|ã°ÒÊ÷/…÷Kr³¶†X cZZs³¶…XL°Dã Àï Ð °UUdfTS²fÁ°pv¡­¬ ¡¦¦ ujivupÀ¯û‡V ÷=J8oI…$§„¢÷ “cבЦÅ ¦Í+÷<+x Å™µ¬Å¤¡}Ç™µ¬Æ¤‚¡}‹øìà 11½ ÷¿÷~¿÷"Í÷LÍ÷"ø9 ÕMßàÔÉööBÉ67AM ÍЮ»ÄÄ®[FEh\RRhºÑ“~‘}|^f{]† Úr ÷À=ûÀ= ÷™g õÝ÷÷÷÷Gû„çûp÷¹÷V÷U- ÷–ßøÞ÷lÑü˜E÷l ’KÏù\9ûOŽ1²^`£P ûbÂ÷~È÷~û h ²¤°¶«Qjre^UÐ3÷-´ ÷ ÷KÙÙg à ÷( Ïø ÷ò÷)÷eÏ÷õùO1]U8'@±^¿¶ªª¹µn©b‚‚‰‡ƒаÀɯž r µE л¼ÞÜ[»FF[[:8»Zеgp§É ¬ž`½¹§±î Þ÷>Ix ÷2Æß÷>ø i¯±wÂÒÀµÊË]¯Iww‡‚{•Ñ÷ÂûQzû/ªvšŸ”¥ ®û¥Ÿž¦¥÷Yxxqpžx¥û@¥žž¦¥xžqqwxqpŸx¥ø.ÞÜì?¸×jÕ÷7Áï÷øSûúE÷§üûa[-XY§Åe Âã÷#BØû#Âã÷#C¶÷3µ÷ËÆ÷©ù´»“¸Ÿ¾º`¢=Žƒa¼ˆ qvw‚s… øíÄ÷E÷Š÷Eøí÷ŠÄûŠÀ³­ÁÀc®VUdhVU²iÁ¯pvž¬ª Ÿ¦¤¡wljuxrn¾¤­—šžv´ƒ~†|rušª ÷ g…yukoÁ ø¬Á÷CË÷1Ë÷C÷˜Ë÷w«¬¢œ­»žqTûWË÷_Ý ÷¿ÉàøBà÷¿¶ ÷À÷|À÷Í÷?Ë (Ë¡ ¨š™Ÿ«Ÿ`½¹¦±î º€n‡|}w·@kx¶X ÷´ÍÝ÷ Ùl½P`fpZY®r¶‘’ŒŒ‘ˆFK"ÍÒ³¸¿¥¤ƒt§û5ppq~mSk¶Ô[ d K÷ v aÝ<ü§- û‹Q÷‹HîLl ÷*³_™ z÷8 ÅËÌËJÅ5ó? ÎÏ„ ;[  ÷`ù)÷G ÓûOµÒ÷O„"ûÂ÷ÊD_ûq;‡pÛ g…~yvknÁ[ ÓÒ`Ú>Ð ø½* ¹¤À *§š™Ÿ«¡a¾¹¦°À û0ýû™÷–ß ½í±é¼÷êÊ[Êè÷@ º°‘—¡¬¦T Kº–¹Áº [‰§à Î(ÊÏ ù÷™÷0 ¸n¡G• ÷KÙÙÙ Äg}Vm ™÷/ŒÄPûh× ¶¯ ®HîKi ´pž  ÷ ¼Z÷( á®ÁÀ^k…smYYs©«…^V 1 1  ÷ÀÙûrøÛ= ²™œ¢± Èøì ¢÷X ÷" w žŸ¤¥xŸ Wmodd û\ d†tf\\t°²†X©  d ½÷³ÅÁ÷þÊ÷@ Î ¸ Ô÷fÐ÷“Ô ì† ‹Òø—Ñ  ÷`÷H û™ (û”ûaô%÷÷îÞ÷÷:Íû K ÷lÓ÷÷à÷÷l÷àÓûàëx Úë÷–¹žÀ»_÷ ½üÎúJmøì ˜£±œzqmqwT øk÷¾Íø ÅèÝ [ 1  ¥Æqq ûe÷Y „÷G Çà÷Êà øÑ÷( ÔøªÔ K ö÷(Æ ¤Ï¼ ¬¨¤µ´n¤jjnrba¨r¬÷lÓŸøÄŸ÷løÄÓüÄ÷a÷«ø¬ì øzI†MÍü7Ýø7òÎ$ØÉ …¶÷9»á ¹÷Z¹ á pÖ÷9Ú߃¹÷Z¹†Ü Y¯÷I½¾g­^^giX˜¦È£_G?d_Vuo“¡o÷L÷‚>Éà÷L E ÷™û\Ù RµmÀ¦­˜šž ´Ä ØÞ÷› d÷r ÅÌÌËJÅ4ó@ ­˜šžu¸‚~†{stšª À§ºÉ’\g…~yvkoÁZ eË«zijp}hghž£wW Ö ã÷È»÷˜ Çà÷¬Ý Ù÷«¡¤÷=r« ÷†½½½¢¶ì³C û LB ï·  D½õ X÷jw ÷=÷o÷6÷o ©ûÞøºY „ÞG ¬¦T¼ ÒØå÷åØ÷À÷"â =ý)q †2€qq J ØÞ Kâà ï÷ÀýÙ ûLv÷UÐøÐ ÷’ç÷’  Å ÷÷0û ÷° ÷J û™ùû0 vø7Î ý:ý‚½ü8ùPmøV ÿ€wÿ €Ì ²¤°³¨øzûÈH÷v ’ÁŽb¹Årº÷ó øÑ1†1÷ û( @bG8fYøYÒ1½ û0ý)û™”~‘ üÎ÷_÷1¿ßNÞôÄ ÷À÷À÷Àû\÷À ¹°’—¡¬¥T¼ øFÁ­÷0›ï: ¼Ê÷Í÷TËø¶ µDvø<ÕwŸw ÷~÷÷À ÷Eûl³xv ùV÷ X` ÷T ÷r ÷)÷bÎ÷6Ï÷ ¯ò°÷c¸ê¹÷À NcvZ{GV÷ ÷rø÷0÷#·Cæû ÐwÇà …± Çà ‹Á kr¸]]ncV‡ ¨’Q½û” ªªu£kkusll¡ ÍǺÁÍ_°C[ ÷\Ò½´¤¶Ñ \ºÔ`÷÷ó ÷I½½g®^^ øÓºÂ¤÷B÷ ÷™øÙ÷#à sk‚ûi´÷À ÷÷0û ÷ÀÙûÀ ËøË i¸¸¯­ Ðà÷Ç× scZZ ¼Î`÷÷÷ ùdÅòò< «×ÐË÷ï\Ë ¾übDøû& ä°ÒÊ÷/ â× g„yulnÁ[ ÷÷+ ÷ ö÷( ï÷«Ý÷ýÏ ýÙù÷À÷0 ‚‚‰‡‚аÀ qvy÷8 wžqq "B®«°­‡¯‰ Š—±˜µ² ´¡¹¶¸¸¹ŒÉºÌ¾»¿½Ð ÛÀê ÄÁôÃõÅ Æ ÇšËÈÍÊÌ %Î&ÒÏ.Ñ/ÖÓFÕG‘N ’X×[ÛØÜÚ` “kÝz•~áÞ„à…âœã䢧¢¤a`¨ m² Ñ  y` {hAiwukjxÛo‰:Ürt@ <>\^]=  pfsªÝ¥™Þ!ßà;‹¡gbd<a=,>cGzž›£D@ ¦¨ŸIJœ?L_M—N&|ˆuƒ€„†‚…‡zåÃST`¿ÇÖá#+3@Pcm¨/9CO~‡ÓÚæ÷09MW“Êâ÷)6Pdpºï!7hˆÕßìõÿDz–±åù9Yxºä'@•¸  ^ Ò & 4 B O b ‚ š · ¹ Ë ß ò I _ Œ ± Æ Û  H p ª ö  O o ž ´ Ì à ø:Pj¤çõ,DQi€Ž£¾;Q˜²Éë9QpŽÊó.N\l{™®ÃÜêø !GjнÚC•ÄÓâd› -OzžÚ&5 ÁÔçHYаÈÜï6Nd|¢¶ãAgzÞïùz”¤¶ÇØåô/H\t‰±ÅÇm… ¹ï!Ag³Íî 3Yƒ²è  4 j ¿ ö!B!ä"C"–"¥"¼"Ð"å##-#A#«#¾#Ò#ð$$?$X$Š$ $¶$à% %1%R%w%»%ì&P&&ì''H'”'©((+(L(|(Ì(Ý(í))%)M)g)„)™)Ã)å**A*K*h*–*­*Ê*å+#+L+f+ˆ+¤+í,,+,P,‚,­,Î,î--S-d-v--¶-Ñ-ë. ..:.R.i.‡.¥.À.û//“0070M0c0Œ0Ì0ö1g1‡1³1Û22>2_2w2–2µ3 3K3b3z3Ü3ó4L4m4‡4¢4É4ä555l5¡5Å5ð6:6i6†6Ó77e7¬7Ë7ì88=8J8W8…8Ä8ñ8ù9949j99”9¬9Ì9à: :':G:]:v:Œ:¡;;l;z;á;ô%>d>—??^?–?Ý@%@8@V@p@•@È@þA ANA}A¡AÀAêBBNBŽBÎCC1C_C—C×DDSDjD–DÉDìEECEfE F6FxFŽF¼FþG7GvG·GÝGßH2HrHˆH³HõI,ItIºIßIáJ4Jw@wdwfwuww¦w°w¿wÒwÝwêwôxxx'x5x7xExjxxºxçyyyKygyxy‰y‹y²yËyÚyþz!z4zQztzšzÉzázú{{8{W{j{€{˜{Â{à{ú||/|U|d|ˆ|Ì|ÿ}2}A}u}v}w}x}y}„}”}¡}¯}Ò}î~~:~g~‹~´~Ù~æ~õ "0>N^l|‡‘š¢±ÂÝû€€€8€E€T€[€m€|€Š€›€ª€·€Ç€Ñ€Ý€è€÷(FeryФ°ÀÎÜéÿ‚‚‚4‚T‚e‚Š‚™‚©‚½‚Ƃւõƒƒ*ƒEƒ[ƒhƒ{ƒ”ƒ°ƒ¼ƒÓƒéƒþ„„+„6„@„U„j„…„œ„«„Ą߄ö… …(…<…I…W…n…ˆ…¡…À…à††#†6†I†}†ˆ†™†¦†±†¼†Ñ†Þ†ê†ÿ‡‡%‡8‡K‡V‡a‡l‡w‡‚‡‡˜‡£‡±‡¿‡Í‡Ù‡ç‡õˆˆ ˆ$ˆa‰ ‰‰.‰=‰G‰X‰e‰‰‰¥‰¹‰Ð‰à‹Åø²ÇÉÌ÷íÍÉøpù(üpÌüºøb÷û|å÷÷|übûÂWÕ÷Áò¿$Ôûû÷ÝYéI÷ ÷Iû Z- D÷- ÷]÷Ÿ"‹Í÷ŒÉ÷jÍòß÷ƒÝ^Ýôò÷W÷&ðÊ÷åS¿+šøØŸ±ÅÌ÷0¸ûûHßû¬÷jáð¿mDB^cû9ûÊ÷Œîô÷Éf:2Jbû…Íá+‹ÏøœÏàÞ÷»á> ‹R ÷ß( v÷ºÑ÷rÑ÷Þ÷Þ÷º÷¡Ñû¡÷r÷ÒÑü%ÌÀâ÷ÐØ%  ÷D Úß÷¦ßs а.Ôø¢ÑÞ íß“ ‹ÒøÝw÷Ýc v÷Fè÷ÀàÜÑ÷½j ‹Ë ÷¨Ú\Ç l6œA …÷. !  v÷˜Ï÷™ÎñÞ÷©ÞñÞ÷˜÷ ÷$íÌ÷÷$*¼û%û]ÞûÜ÷™ö÷Ãl,.Taûû7ÒàÎø­Ó¼à÷Ýà÷÷ß÷7ËòðïË$û7û7Kû'&K÷÷7ø(ü1†z†wGW¨Ãu÷ ¤Û÷÷O÷e&÷û(û)&ûûfûRÞû÷u2¬ÓI÷¨£‘“  ì ïÞ÷ŸÞ÷KøáS øûíû;÷²4 …íà÷¡& vøÞѰpÚß÷©Ü$‹àøÏw¶ø–÷ì÷dù$6"ûöu=zMs>‡sØ{ÉtÙ!÷ö3Ì •øØ( Þ Áø€Áãí÷Eœ«œ¬ž³¡cjkîûEçûX÷ã÷K÷Õ31û<{m~pye‡v±|¦z©/÷</÷KûÑÞ °)‹Òø˜ÑÌønJW Å ¸) x#¸# ÷èÝ÷¬à|èͼ÷ì÷:÷*DìûRMn^]é÷V9Ýüê÷6hX›´]} Ûà, Ö ÷¬Ý¼Ç‰ |€¼: U ÷J ½÷?Î÷†ÜøÖùLž]]”[ûM=û bû†M÷ü7Üø7÷`Îû`·Ú¯»âµª†y³H ª÷|בܺ@w Ù Bº@UØ 0Ù@IÕ@A¸ÀT º@ÇÕ@8  ÷E èÝ÷žÝ' W÷÷V9½ï÷÷®÷)Ýè<ð” ûmÎøÍÎï÷÷®÷)ÝèZ ð”  vøzw÷ŠwõÝ~ûšû“‡øu9ÏøáÎ÷‹Ý- ÷ÇÚ÷Í÷ÚÜj¼„ËK Ù÷žÝØ' X‡¸÷} Çà÷Êà!÷wèÝ÷¬àì÷A¾c·Ät¸÷ óì÷9÷+EìûOLl`^ˆÜ„ÉGýGÝ÷8÷/ì÷4ÜjX›´]÷wöìLJ û6ß/÷ÆÃ¬´¶‡3ûGÝÜùGIì„Uˆ¶]^¢P:  Ù ÷&ÝÈG¨žÒÈ` ˜Ý÷Hïß÷—Þ& ÎøÎ÷bÝ* ÷÷›Ý¸øøz9" x… ‹Îø7w¾ø†÷”ç÷]øz<ûû¨wZ{[z]‡z¹y»w¼û÷¨8÷ “øÜ°³ ð[°N ðN°P÷­7 vøzwËøkËãÛ÷ŸªŸ§Ÿ¨ o¢kŸoàûåûN÷‰÷A÷…4B"zpwmyp‡w¦w¨z¥>ö0÷?û~ܼøŠ%‹Î÷ôÎÒøaM Ž ­ :üK"Ž Ê û üK"Ž ÷¾ùš„ Î+÷;+x ÎmüK" DÂ÷9÷/¹÷Z¹îø#ùÇöf îQß »ªºÈ‘ûˆü¼" DÆ÷* øù_¨Ÿ §¨wŸnovwno v§û@§  §¨vŸonwwnoŸv¨~üT" DÔÄ÷D÷Œø<ù¦ûŒR÷Œûsüb" D¿º÷- ø ùÆOÛ¯ÁÃ’ûrü»" D¶÷2ùÚ¤¡wljuxrpvž¬ª Ÿ¦ûÀ³­ÁÀc®VUdhVU²iÁ(üD"Ž ÷èùVë÷HTPüK"ûv÷÷ D÷+(7 D÷<»÷ÓË£Müi"äøªúCôDû¿û%‰9/!ÊiüK"äøxù–D÷÷6ôû‰9/!ÊiüK"÷¿µøUÅø3ù†~ !v9/!ÊiüK"÷¯»…»÷<µ÷Hµ÷øú>ûo‡|}w÷ê µ®û<û/!ÊÊÉÊMÊ/õûüµ"ûv÷÷ D½÷÷~÷÷¾ùš„ Î+÷;+x ÎÐý¹7÷ ¾˜÷- ø+úCA"¼ΘEà ûqü¸"÷ ¾˜÷- ÷çù¶AôCì"â˜Eà ûqü¸" v÷\Î÷ÕÏ¿’÷wEà ûqü¸"÷ 껈»÷;µ÷Hµûøú?o†|zw÷÷;µ§›œŸû«£^º¹§´¿û‘ûT’±WØà ^iƒvm[©­ƒuü¸"ûv÷÷ D¿º÷~÷ø ùÆOÛ¯ÁÃ’ûþ)7ûhÆ÷BDø<Ë÷]÷Ÿªï¢Ô Ó × ? C¢Bª'÷Gü*‚~†zttšªµ­¹¹žûqù$-ûqý$àÊ÷\÷‚Éû\žhtc[Uì‹Ò÷ οÒ÷aÑ÷Ñ×÷M÷–¹÷ ¦Ò¨Ñ¦ÓŽûà×ûO÷ƒ÷'Òû'÷a÷QÑû×û˜ý$âÔ÷S÷2ûS÷¦Ò‹Ê÷ºðÂ÷jÉóÞ÷ŒÜ`Ûú÷OÊ÷÷#ºû#ðö÷Ëd5.H_û ø§éüðÀmCA\eû1ú÷jwüÙŸ°ÁË÷0¹ûûOüD>†aØûE÷^ú÷'ïË÷çSÀ+šûi´÷6ÒøªÔÍá÷VËøŽ÷\a^qOû:ó÷9÷7Üñ÷¶sg­ºÀµeM±<û?ûûûgûYóû÷&xiJ¬ ±ØÆ®¼ÃbÍá+ø0ø~I bÍá+÷hø5 bÍá+÷òø~? …¹öÍá÷÷+÷­ø@‹ÏøœÏ½÷àÞ÷»á> ÷ù‚IC Úë÷KîÏøœÏàÞÃ÷öá> ½ûº3û?Å÷ÏøœÏàÞ‰÷‹½áô> ì÷AûI¡^‹R ½÷÷ß(÷Z½‚‹R ½÷÷ß(÷ï÷6I ‹R ½÷÷ß(÷'½t‹R ½÷÷ß(÷±÷6YÚë÷‹R Æí÷߇íÖíè(ö÷ƨŸ §¨wŸnovwno v§÷A§  §¨vŸoovwno v§‹R ÔÄ÷ß“÷Œø(üçÔ® ‹R ¿º÷ß(÷l¿Û¯ÁÃ’Xk…vl^]vª«…YS‘°UÛ‹R Åö÷ßÖ÷(÷lÅ«£¡«ªs¡kkrulk¤u«KîR ÷ßÏ÷(÷mþF ‹R ÷<»÷ß÷+Ë(÷Pµy ‹R Â÷9÷ß~¹÷Z¸õ(÷¨Â»ªºÈ^j…|xwófn¿Vë\l]M…¹­šŸõß ‹R ½õa÷÷ßô(÷Ç÷¿ìå÷Côû¶ûCÊË< ‹R ½õa÷÷ßô(ì÷Ý÷u÷6¾ôûÌKÊË< ‹R ½õ¿µ÷ß÷¬Æ(÷ßíº“¸Ÿ¾¹`£=Žƒa¼ˆ qvx‚r…û}8ÊË< ‹R ½õ¯»…»÷ß‹´÷Iµö(â½ÊË< õ€T¯§š™ž¬¡a½¹§°î ú€o†}}wõktµY]peW†KîR ½÷÷ßÏ÷(÷'½t÷þ8F ûhÆ÷-R ÷ß÷?Ì÷÷Þfse]TR¶m¿¦ñÀ¹»¸‘Òûß÷‚÷£Òû£÷b÷ÕÑü)̱÷Àâ÷ÐØ% ÷eø¦Î+÷<+x ̳ºÀâ÷ÐØ% ÷ªøÛ°ÁÑYk…ul^^vª«…XS’¯UÛ̹öÀâ÷÷ÏØ% ÷ªø@ûl³÷8ÎÀâ÷[ËÀØ% ÷‘ü ¤ ̱÷Àâ÷ÐØ% ÷ïø~ ÌÈÄÀâÎ÷ŒŒØú% ü÷.ø%® ̶÷9À⺸÷Z¹wØì€% ÷÷æø¦ j†|xwfn¿Vî€[l]M†¸­‘šŸ÷°¨W¿ ÷D Ñ÷Úß÷¦ßs ÷,½tûv÷÷ ÷D ÚßÒ÷Óßs ÷qþ4ûb¾÷D÷D Úß•¾÷+¾–ßùs ÿ÷qýòá®ÏÆXd†sf]\t°²…XP¯Gá v÷ÉÓ÷º\÷8Úß÷¦ßìøIøû¦÷÷¦÷-ºF÷K û¦÷K F†aÐü€ß÷É÷¦ûÉßø€Ðн÷.÷Où‚н÷.÷äùI н÷.÷ù5 ÐÂ÷9÷/¹ÄßĹÔ.æ÷ù† ÐÆí÷9í†ß†íÈ.ô÷ ù1ÐÔİ.Üù&® пº°.÷aùÛ¯ÁÃ’YOÐÅö÷‡÷(ßÈ.ð÷aù@н÷.÷¦ù? Ð÷<»÷–ßtËÐ.÷Eù§ KîÒø—Ñ÷÷ûßh.ð÷bû½4ûhÆ÷-Òø—Ñ÷hËyßhêð÷KknidRìt¸‚€~†{ssšª´£­µ«÷7Òhû7ø—÷7Ñü.E÷7ü—û7Ôø¢Ñ¼÷÷ øÃtûl³÷Y÷9 íß÷4Ë“ ÷fýTye¨`¸m¡G•‹ÒøÝwÑ÷÷Ýc÷O÷6I ‹ÒøO÷hEw÷Ýÿ«€ÿ1€¸cØ÷¼û"™÷/ŒÄPŽûhûl³÷DÒøÝw÷Ý÷Ëc÷KýT¤ ‹Ò÷i÷÷‰w÷Ý÷)÷c÷¼üF KîÒøÝw÷ÝË÷c÷hþ,KîÒøÝwèÄ÷ÝË÷cGÔ÷ŒÄûŒ÷¬þˆ,û?Å÷ÒøÝw÷Ý‘÷‹ðcè÷ãý•¡‹ÒøÝw÷Ý÷lÒ÷X÷v÷ Ïûvû ÷Õ9ûý:_Hܶûwø+ÒŸ÷Fè÷ÀàÜÑÞ÷Ýj ÷oþ3‹v Ñ÷ÞÚ÷¨Ú^Ç n6žA ÷ö÷6I ‹v Ñ÷ÞÚ÷¨Ú^Ç n6žA ÷¸÷6? ‹v Ö÷9ÞÚŠ¹÷Z¹~ÚV@Ç f@6–@A Z€÷¯ÂV€¦ Y€f U@QZ€ß ûl³÷DË ÷"ËÑÚ­Ç µ6ÏA ÷PýTyes¸n¡G•‹v ÙöÞÚâ÷ÖÚ]Ç m6ŸA ÷sÅ@KîË Ó÷ÓÚ­Ç µ6ÏA ÷mþ3û?Å÷Ë ™÷‹šÚ­Ç µ6ÍA ¯÷èý•¡b÷. ! yù‚b÷. ! ÷ù‰I b÷. ! Fù5 æÙ! ëÇùÛ¦ ïf ÝQëß …ºí»áªíÕíªá! 5ù"1…ÈÄ»áµ÷Œµá! ûù0® …³º÷. ! ùÛ¯ÁÃ’YOb÷. ! Zùb÷. ! Ðù‰? ÷»áï÷ïá! û³3…÷0»»á÷MËÞá! où­÷8õa÷÷. ì! æùY¿Üæ÷Cìû¶ûCB ÷8õa÷÷. ì! Ü÷ùÈ÷6¿ìûÌKB ÷8õ¿µ»á÷ÏÅbáú! ü÷ùI~ û|8B ÷8õ¯»…»»á­µ÷Hµ­áï€! ûùB U¯®a÷€o‡|}wï€ê ÷±÷»áï÷ïá! Fù5 ÷þ83…÷. øMøx›b”WOû8I!'`fŸ®olÃy¶‚ÁÉ÷7Íðï·±wh§÷&÷\«U<³bV Nû(#ûûf*¡;±PL.»kÀÚcµ¿vÇ÷(ó÷÷gêvÙeÄ‹ÏGÒ÷‚Ò÷cѬá÷SØ|¬÷ßûeîû÷8÷»Òû`÷‚÷(Òû(÷c÷VÑû®û:'û ûe¼á÷;Ãå÷ üœvûSë÷;…÷. RÎð÷ÀÈ'Iõ÷8÷7ÍðïïÍ&û7û8I!'è2ðn èvb÷. RÎøÊ yLb÷. RÎø­ L…÷0»»á÷MËÞáRÎül °ý7'Iõ÷8÷7ÍðïïÍ&û7û8I!'ú2ün úvæRÎÛø#ùÇïf ßQß »ªºÈ‘Ùû%ýŠ'Iõ÷8÷7ÍðïïÍ&û7û8I!'Ø€2Ùn Ø€v÷»áï÷ïáRÎü÷À ÷4'Iõ÷8÷7ÍðïïÍ&û7û8I!'ú2ün úvûhÆ÷"ÓøªÔ»áïÌ÷;áøû‚~†{tsšª¯£»Á¢õ¹Ð÷÷E÷e#÷û(û(#ûûfûB×û7÷@†hnpb_R¶mÀ¥­˜šŸû÷‰'Iõ÷8÷7ÍðïïÍ&û7û8I!'ï øHùÆ-2x Ðûû S øûíû;÷²4 ï ÷ìùVë÷HIC 9û S øûíû;÷²4 ûl³÷Yì ïÞ÷!ËÉÞ÷¥5s¸n¡G•ûùS ÷_P4 êûv÷÷ ì ïÞÒ÷ËÞ÷Ô ûùDS ÷_P4 êûv÷÷ ì ÔÄïÞ‰÷ŒûC÷ËÞú€øAù¦ûŒR÷Œý€ûýÐ>ûùDS ÷_P4 êû?Å÷ì ïÞ˜÷‹’Þü÷Xû?÷‹Åû‹ú~ùRS ÷_P4 êbíà÷¡&÷Ùù7I bíà÷¡&÷øÇ5 bíà÷¡&÷›ù7? ûi´÷5ÓøªÔíà÷Ë×à÷ÀøS¢N¢Êƾ°Ú̽se¶·Á»[C¬9û1A'+×\ÍqébÎo¾vHKV`.CG¬¼ZYQÁUÕgá…jK¬ ²÷–×ÙììK¸:¬ûl³÷8àíà÷ËÕ&÷8ûSyes¸n¡G•…¹öíàÒ÷ß&÷VøÏ@÷íàÈ÷×&÷Uü3ÑfvøëÐÚà÷ËãxÚàø4÷ÁÅåűf^žû û-U÷q®XM¸Ii\Qcjœ²j[V_¯ÄnÐõÍÚóêUÏû§÷ ÷,èlJÈ$û2A%û vøÞѽ÷÷÷| ûi´÷UvøÞÑ÷–ß`Ëp÷êøÞ÷lÑü˜E÷lüÞèše@´¹p£½ûl³÷YvøÞÑ÷–ßfËðè˜ýye¨`¸m¡G•ŸøÞÑ÷÷ûßèð¶ýÀ4û?Å÷vøÞѰ÷9ýO÷! pÑ÷Úß÷©Ü$÷_½‚pÑ÷Úß÷©Ü$÷ô÷6I pÑ÷Úß÷©Ü$÷,½5 çÙ$ê÷­ÂÚ¦ æf ÕQêß pÚíÚßíÕíÜò$ì÷Æ1pèÄÚߘ÷Œ›Üô$üìÔ® pÓºÚß÷© ¿Û¯ÁÃ’YOpʯò°Úß·¸ê¹º ¶”pÑ÷Úß÷©Ü$÷@½pÑ÷Úß÷©Ü$÷¶÷6? pÚæÂ¹Úßæ8÷Œ8æ“Üø€$ú€ì÷a÷Œ¹ûŒõ€±ûT2 pÚæ¬÷ÚßæÝæ“Üù$÷>÷KÏ÷÷0÷ûû2 pÚæ¬÷ÚßæÝæ“Üù$÷÷Æ2 z÷HG÷ ÏHëûÛë÷pÚæ¬÷ÚßæÝæ“Üù$÷K÷º0÷ûÏ÷KâÐ ÚßÒ÷Õ þ3p÷P»Úß÷0ËÄÜ$÷Uµ­ûhÆ÷"ÓøçwÚßÏÌ÷$ÜÚ÷Œû9Ò/÷&‰rrciTR¶mÀ¥ñ¯ª·Ñ«Õ­½Ô÷ø,:ü.ûNZ<Rlabô÷(Å ¼) |#¼# ÷/øMó ô÷(Å ¼) |#¼# ÷ŸøáÍ Ëô÷(Z¼Å ¶) v#¶# ŸøMº W Ü÷:ÜÛ–º÷Qºuݬ€) l€#¬€# ¯–øS²¼·À–[¯Uí W å÷ÜÛ÷à÷lݹ) y#¹# ¶Ãø\Ú tsll¢sª÷U]W òÄÜÛ©÷‰ˆÝº) z#º# ¼©øiž W ؾÜÛ¢¾÷2¾€Ý¹) y#¹# ¾÷-øOm÷5 W ·°÷°ÜÛÆ¸ì¸¥Ý¾€) ~€#¾€# ¿€÷-ø.Á²°ÃÂd°UTdfTS²f°pu¡­¬¡¡¦¥¡ujiuuqô¼Z÷(Å ®) n#®# ÷ øM»Kâo ÜÛ×÷ËÝÚ) º#Ú# Þ÷"ûú,W ÷I»ÜÛ÷@˯ݾ) ~#¾# ÷ø9y ô÷ W÷Å ¶) v#¶# ¯øMR÷W¾®è÷,ô÷ W÷Å ¶) v#¶# ¯øMR®÷5ÉEè÷ ô÷ ¾´Å Wƾ) ~#¾# ¯øMR½÷)³`™ y€s„W Ô÷7 ÜÛ¡µ÷Eµ€Ý¶@) v@#¶@# §øKð·€X¯›]pö Kâo Ö÷G ÜÛ×÷ËÝÚ€) º€#Ú€# ŸøMËÖ€€ Û€µD¤þG,W غ¤Š¾) ~#¾# ÷øµ¼â÷Gmûj{ W غ¤Š¾) ~#¾# ÷ù%Gâx ¼f%{ W غ÷D´ÜÛ÷4ÆÀÝ¿) #¿# ÷-øO{ p÷º–¹žÀ»`÷ y€r„W ظ滆»ÜÛ¡µ÷Eµ€Ý¶@) v@#¶@# ·€÷-øOà®ÁÀ]k…tmYYs©«…^V®Uáû÷µ›·€]pö Kâo ؾÜÛ¢¾÷£¾€Ý\@) <@#\@# ^€÷-øOm÷ Ý@€ýµ,ûbÂ÷o ÜÛ÷cÈÝÚ) ’MÜdrb]Uh º²ª·Â¡÷¾÷ KÚû69ekZ«S§¸É©Êé¬SIÚ# Í÷=Â÷/Ìœ×÷@Ð÷VМ÷4¾UÚ¾À«ÆÁR«ºiѽ¸Ÿ¢¬nÁzol}f=cÏð‡÷–œœž÷ [ò(K^gMkÃycµLOTqqcªS ª»Ÿ®Ê¢XCŒû8r7R*÷Ñ÷)ì‘´ÅÉÌŸC8üGû%ɼ±÷ ŒrŒef•n]h^ri^n¦¿Ðgvø-Ðè»[÷!èÝ÷¬à¶÷C÷ä½½½¢¶ì³G&ûLF6hX›´]øÔ÷h»ûh®è9v.B†`ÔüÏͶ÷è÷4÷$DèûRMn^]ûTv÷^Îø ÏÛà÷IËø€ËƦº¶gÀibYpOû@÷, Ø×÷¾µvh³´À²cQ«<û'û.û7û*î0÷jK» k–ô Ûà, øøsxô Z¼Ûàè, ÷÷߈ +†Dµ ¾ÛàØ, ÷x÷ßÒë— } ã÷Ûà÷÷, ÷›÷ì,X½÷8û8÷h½à÷¬Ýµ¼·½‰ w€·: øR÷ů™÷/ŒÄP·ûhKâÖ ê÷ÀX ß÷5üi,û?ÅðÖ °÷‹‡X Þ÷°ûø¡Ðgvø-Ðè»[÷!ö¶ø=÷[`]r[1VÍ÷óÏÓà´µ{b·÷.÷ŸC®è9¶.ûB[÷BIŽ1²^`£Pû!-û,û0ß3÷ÇÅ®´³Žv’KÏøÏÓU Ö÷(÷J û%÷·÷C U Ö÷(÷J køKÍ ËU Ö÷(Z¼÷ö û«÷·Ëî€ öÍšU Ö¼Z÷(÷î ûJ÷·ª KöI(‡îHîKU å÷Ðà–öà÷‡×é þû‡÷ÆÚ usll¡sª÷U]U òÄÐà±÷‰£×ú þû¡÷Óž U ؾÐા÷1¿›×ý û&÷¹ÿã°ÒÊW`†÷Kr³¶†Xý÷5 U ã÷Ðàê÷Ü× û&÷Ä4KâP Ðàê÷Ü× û&ü4U ÷I»Ðà÷HÊË× ûB÷£Å•¿¤Å¾Y¦3Žƒ´rk‚U Ü÷:Ðàžº÷Qº×ì€ ïû´÷½²¼÷À–[ïUí U Ö÷ W÷÷ö û›÷·R÷W¾îç÷FU Ö÷ W÷÷ö û›÷·Rî÷5ÉEè÷ U Ö÷ ¾´÷BÆö û›÷·Rý÷)³`™ y€r„U Ô÷7 Ðੵ÷Eµ›×ö@ û£÷µð÷ÀX¯¨š™Ÿ«Ÿ`½¹¦±î úÀn‡|}w÷@kx¶X]pö KâP Ö÷G Ðàê÷Ü×û€ û«÷·Ë÷€€ û€Í(ËÏ D¯þG4ûbÂ÷P Ðà÷NÇÈ×ø|îo^]zR!?Íò‡ø—Œœ÷9æûûû *û3û3÷ ,÷$¥ Œ–¨nsf^WS²•·¥´æÌü÷ê˜ÓÃÚåÁU*H Ö÷(Z¼ª÷|בܺw ÚHBºUÚ(0ÚPIÖPAº0T ºÇÖP8 ûøÊÙP€ ÚPΚH ؾª‘¾÷2¾iבÜ»w Ú„B»UÚD0ÚˆIÖˆAºHT »ÇÖˆ8 Ú0›øå …XL°DãH ã÷ªÒ÷©3 Ú°›ø F H ÷?´ªÎËðבܹ0w بB¹0UØh0ذIÔ°A¸pT ¹0ÇÖ°8 ·÷ྠ_©tÎH Ö¼Z÷(ª÷|בܹw ÙHB¹UÙ(0ÙPIÕPA¹0T ¹ÇÕP8 xøª KÚP¯ ÙP¢H òĪ™÷‰p3 Ú !øž H Ü‹Áª†º÷Qº]בܹ„w ÙBB¹„UÙ"0ÙDIÕDA¹$T ¹„ÇÕD8 Ùûø²»ÚÁ–ZÙVí  ÷E Ä÷èÝ÷žÝ' W÷÷V9z°¦Î+÷<+û÷R ÷jwèÝÔ÷ÈÝ' W÷÷V9÷qþ>Fûb¾÷D÷E èÝ—¾÷*¿ŒÝù' W÷÷V9þ÷pþ*á¯ÏÆWÉ vø+Òè»[÷!èÝ÷žÝì÷Cø†Ô÷h»ûhÜè9ì.B†`ÔüÏÝ÷ӯIJ¨ÅÛ«_/û£Ý÷®÷VÏû?SbUW½â÷(÷ÐÝ<÷˜â¼ ½â÷(÷ÐÝ<øÓ ½â÷G ÷ÐÝè<÷∠*÷(D½è÷:÷bºÊݸ¹Þ<÷Ò î÷RÞÝ ½ñ÷÷Zö–݃÷è<ô÷5ñÚ usll¡sª÷U]½÷Ä÷u÷‰û.Ýè<ð÷÷ž ½ä¾÷n¾ºÝ¨¾ø<÷–äümø÷5 ½â¾÷ÐÝØ<÷râÒì— ½÷U»÷ÐÝlËð<÷zÎèÅ•À¤Å¾X¦3Žƒ´sj‚Ÿø7Îï÷÷®÷)Ýô<ø” ýÀ°¨¤±²nG ûbÂ÷@÷ï÷÷¤ÈX÷)Ýò÷ÐøžpogdUS³•ò÷ô«÷;FûbÂ÷@÷÷¤ÈzÝè÷ÐðžpogdUS³•è÷½÷ÐÝ<ûmÎøÍÎâ÷G ÷ÐÝèZ ÷∠*÷(D÷-÷vøzw÷ŠwõÝ÷+Ë~~ûšû“‡øu9÷\ýŒ¾‹ ~÷5 vøzwõÝ~û›û“ˆŠ÷”9Ïøáκ÷÷‹Ý- ÷Ú÷2-3ûÐÏø€÷hûÎ÷‹ÝÒ¼¸- Ø÷ýû8ºÏ÷w÷÷Î÷dÝÜ÷µù÷:üvûÃOòÀ­˜›·vÉ{go„pPf©Òø¿ûŒøüA,÷-÷`ÏøáÎ÷‹Ý¹Ë|- ÷˜ýŒ¼ye¨`|¸m¡G•KâÏøáÎ÷‹Ýs÷ð- è÷¶þ>4KâÏøáÎ÷Ä÷‹Ýs÷ø- Û÷ž ô÷fþæ4û?ÅðÏøáÎ÷‹Ý9÷Šð- èø0ýÍ÷! ÏøáÎ÷‹Ýø˜Ú{go„oQf©Ò÷m÷7æÒû70÷ŸûŒH÷:û‡ûDE÷Òû=ûÃOòÀ­˜›·÷R wÇÚï÷+Í÷ÚëjÝ„ËK÷‰ý\,÷ö÷(èÝ÷žÝÜ' X‡¼÷÷çÓ ÷ö¾èÝ÷žÝÎ' X‡®÷÷Q÷QÖ¯ ΢÷÷÷:èÝŒº÷R¹yÝÌ€' X‡¬€÷ËÞÒ Ó÷RËÝ ÷-÷Ù÷"ËÇÝu' X‡¯÷÷Süªye§`¸m¡H•÷÷ ÷èÝØ÷ÄÝÚ' X‡¾÷÷uïF÷R wèÝÓ÷ÉÝê' X‡Þ÷÷pý\Fû?Å÷Ù™÷Š‘Ýê' X‡Ú÷ì÷êüë÷! ÷ß÷)ÝκÝ÷ÞÞ‘e ÷¹—¾„×GüzÝÞ÷îÀ¿®§¿Шa3û½Þ÷È÷YÍ"DYdZ\ô Çà÷Êà!÷1÷ß¼ ô Çà÷Êà!÷¢øsx÷/ ÷Êàì!¢÷ßÊÜ€ ìŠ} Ü÷:Çà˜º÷Rº˜àÙ!ߘ÷åf\ï©ßÝ } å÷Çà÷ß÷àÒ!ìÆ÷î\} òÄÇà«÷Š«à!«÷û÷ŠÄûŠ} ؾÇा÷2¾¤àò!þ÷/÷áã°ÒÊS} Ô÷#Çà÷Êà!Ä÷Ý‘µ ¼Z÷(ÞÜ!÷ ÷ß÷ ì¯ Ü¢KâÏø ÏÇàå÷äà!÷0üh4} ÷I»Çà÷BËÓà!÷÷Ë­µ ÷ W÷Þì!²÷ßQ ÷W¾Üç÷,µ ÷ W÷Þì!²÷ßQ Ü÷5ÉFç÷ µ ÷ ¾´Çà÷ÄÇUàú!²÷ßQ ü¤} Ô÷7 Çࣵ÷Fµ£àì€!ª÷Ý¥ï€X¯¨™™ŸŒõ€n†}}wî€jx¶Y]oö Kâ÷/ ä÷äàõ!¢÷ßÊí€ ÷Š®þG3Í^vøPÍ‹wÞ¬ø@÷øœl•d_ûM>.di™£qn±z©±·÷ÉÙè²­}s¤œ÷álf¨XPªbXœUûû.û7C¢P¯`VMœ°n¾Æl´¾zÁ÷÷è÷5ÔtÇg¶Î÷<Â÷,ÏJÌ–Ø÷^É÷DÏîã÷‡÷®×ÏDz?ûûd>OGhØ÷>û6×.ïɹ²Ô§B¨½dʹ³Ÿ¢ªnÁyps~iCdÏð†÷…Ž ‹˜ž÷ [ñ/L`_BpÕq[¶M(>.û6÷è®Þê“«ÇÆÆžB9‡¹]ÏÞWϸ÷ÀÃHÔ\ ¸5´u‡¹]ÏÖ÷(ÞWϼø3÷@ M‡¹]ÏÖ÷(ÞWϼø÷‰M‡¹]Ï÷I»Çà÷BËÓàWϾ÷¤«°ü«HÝ\ ¾5½u‡¹]ÏÜ÷:Çà˜º÷Rº˜àWÏ­€øùD·€©¯€Ý f¬€û"ý HÌ@\ ¬€5¬@uKâÏø ¹]ÏÇàå÷ãàWÏÞ÷Á Š÷/Hí\ Þ5ÝuûbÂ÷ Îø ÏÇàäÈ÷4à÷~û S³n½¤®—šžu´ƒ†{sušª±¤µ¹ õ¶ÏÏ÷÷7ûèûûû.û7û.ò-÷†uxjbY2÷ÿ÷É×èèÉ?ûûM@..MÖ÷ ÷*ö÷(÷&ÝÌG¬žÒÌ` œÝ÷ÊÓ ÷-÷Ù ÷&ÝsËrGjžÒr` fݱ¤üª‹ ¸n¡G• ÷*ö¾÷&ÝÆG¦žÒÆ` –Ý÷4÷Qʯ Æ¢ûv÷÷ Ù ÷÷û ÝâGÒžÒâ` ÊÝäÁý\,ûv÷÷ ÷*÷Ä÷÷û Ý‚÷‰åGÕžÒå` ÍÝä€Ô÷ž æxþ,û?Å÷Ù ÷&ÝäGÔžÒä` ÌÝ÷Eüë¡÷HÖ÷(ïß÷—Þ& ÷ÆøïÍ Ê÷HÖ÷G ïß÷—Þì& Æø[ÊÜ€ ìΚ÷HÖ¾ïß÷—ÞÜ& ÷0ø[ª Kì¯ Ü¢ûTv÷^ÊøËïß÷ËÈÞø‡øH¬[A¨BûEO=Fà_ïr÷ n²pea`i44O¥³UcUÁeÖká†jK» k–²÷ ”ÌÉÔÕL±û¬3¡O£³±¨«æÇ¿vm¶÷-÷`ËøËïß÷ËÌÞ~& ÷=û:¾ye§`~¸m¡H•÷Hã÷ïßÁ÷ÕÞ& ÷SøhF KâËøËïßÇ÷ÎÞ& ÷ZûìFËlvù%ÎãÝ÷Ú–Ú¬Ù~ãÝøÔªfZ61l0ºû÷^ ûblfSdj˜¥fjQoµ¹zÃîËÌß÷2û]yìÐå¬ï¾ÚQÐ!û?9ûÎøÎÉ÷h÷bÝõ¼* ÷z÷ºûTv÷]Î`vø@Î÷bÝçËØø'½¿—´šyÇ~if‚]-n¹â÷{÷ƒÎûƒ÷G€ûû †M÷ûz¼ ¯?÷|iI’ Ü´pžk–÷-÷`ÎøÎ÷bÝêË|* ÷$üg¼‹ |÷5KâÎøÎ÷bݤ÷p* ø÷Aý,û?ÅðÎøÎ÷bÝj÷‹ð* è÷¼ü¨¡ÎøÎ÷€÷÷÷|Ý÷è* ôd÷Ã÷÷U÷K ö÷(Æ ¼øøz9" |… ûdøÑó K ö÷(Æ ¼øøz9" |… +ùeÍ ËK ö÷(Z¼Æ ¶øøz9" v… ûëøÑº K ÷÷:ØÞ„º÷Qº~ݬ€øøz9" j€… ûôø×º°‘˜ ­÷ À÷ ³g…yulnÁ[j€Up]L„K ÷÷ØÞ|öà÷uݹøøz9" u… ûÇøàÚ usll¡sªº÷U]K ÷ÄØÞ—÷‰‘ݺøøz9" z… ¼ûáøíž K ÷¾ØÞ¾÷2¾‰Ý¹øøz9" u… ûføÓ¶mu÷5 K ×°÷°ØÞ´¹ë¸®Ý¿€øøz9" €… ûfø²Á²°ÃÂd°UTdfTS²f°pv¡­¬ ¡¦¥¡ujiuuqK ô÷#Æ ¼øøz9" |… ûÈøÏÁã÷#CØû#Áã÷#CK ö¼Z÷(Æ ®øøz9" n… ûŠøÑ»K ÷æÒºØÞŽæ8÷Š:åˆÝ¼@øøz9" z@… û½øà¦ÆpZ¼€÷A¥žŸ¤¥xŸqZ½ûf÷6÷ŠºûŠK ÷æ´òØÞŽæÝåˆÝ¼€øøz9" z€… û›÷Mûû¦ÆpZ½÷A¥žŸ¤¥xŸqZK ÷æ´òØÞŽæÝåˆÝ¼€øøz9" z€… ûŠùdÒåòNMK‡LËN²û¦ÆpZ½÷A¥žŸ¤¥xŸqZK ÷æ´òØÞŽæÝåˆÝ¼€øøz9" |€… ûƒùË;ó$Ä»­û¥žŸ¤¥xŸqZûA¦ÆpZKâ÷ê÷°ÝÚøøz9" ¾… ûLûv4K ÷i»ØÞ÷.˸ݺøøz9" ~… û‚ø½y ûbÂ÷÷÷ZÈÝÚøøz9" ’:Ü`lfcUh º²¦°Æ¨÷÷›Ý¤Ï¼ø˜øæz¸s" x’6ÎøZ¼u áø-÷@ ¾÷t] á÷û÷¾÷p] K ÷i»ØÞ÷-˹ݤϾ÷ž«¿÷—Žz¾s" ~’6ÎøZ¿u K ÷÷:ØÞƒº÷Rº~ݤÏ­øùD³©«@Ý fÛ-z¬€s" l€’6ÎøZ¬Àu Kâ÷Ý÷¼Ý¤ÏÞ÷È ß÷dùIzÞs" ¾’6ÎøZßu D ÷ºâ÷C D ø+÷Í Ê÷TZ¼“øÜ´³ ô[´N ôN´P÷­7÷4âʬ€ ´Îš÷ ÷÷÷*÷à÷¼³ ü[¼N üN¼P÷­7÷XñÑ ¢£ªªt£l÷B Üö÷(¼øŠ%÷rùWÊ1÷ Üö÷(¼øŠ%÷ãùëxÜö÷G ¼øŠè%ãùWˆ +†DÜ÷÷÷.÷àö%÷ùfÑ ¡£ªªu£l÷B Ü÷ ÷÷‚÷%÷pùd,ûr÷û÷Y ø÷p%°ø 3±§£²±o¥efoqed§s°Ü÷i»÷ÜË%÷ZùCÅ•¿¤Å¾Y¦3ç Ü÷÷:÷7¹÷RºÜ%Úù]÷&ìòÜVí ‹Î÷ôÎâ÷(ÒøaM øù9x‹Î÷ôÎâ¾ÒøaØM ÷jø¥Òë— ‹Î÷ôÎï÷÷’÷M ÷ø²,KîÎ÷ôÎ÷÷M ÷Šû¢4Ï÷ÛË÷wÇØ÷ÔÚ÷ÀÃ2AÍïçÃÐö¿ÄtMºŒ}‹||ûX9!÷eøût´ûF^­Y§V¤eW¸u³u®rûG¢b÷*ØÈVµI0½fO©Mû+2ûû%÷2÷÷&ç÷÷4÷5Q÷3Ü÷÷jwèÝ÷¬à÷CbŠçe·Àr»÷õì÷9÷+CìûROn^\â÷]9þ)Ý÷Ó÷†½½¼¢¶ì´C û JB6iY›´]ûmÎøÍÎ÷ÐÝZ Ïø ÍwéÞ÷¤ÛØø¥÷üãA½/GEgaVˆ¸„ÍGû¾û Ì<÷àݱ«¼kÃo^MmK.jÃΉØ÷ŽžñÀ÷;…KKbûdz÷¹ÂÁ¥ÃþtT² ÷¬Ý¬ \=¬'?èÝ÷¬à¬ø[÷‹û KB6g[šµ\÷†»¶¾¤»ì´Cûà÷*DìûJKhbdˆ\„ËGüzͬ’ÁŽb¹Är»÷óì÷:} øGàøœ‡ ÷7ûèû!3LkdbµV®´¹ ÅôÓ?ûû?@ûOW¦­dfV[¿ÐoÖ÷(÷è÷5U Ê×÷Çàø§‡ ÷3!ìûû+0ûzŒyø#„BJ!R]œ§^nUl»ÈqÙ÷$÷ ê÷3ü³ìÐÁÞâÃS,˜Í÷1Æ÷7ÌÐ×÷ÈßÐ÷rû%ä2÷÷!ñì÷3÷4(éû+@Kum[¨S¥·¼œÃ÷ÄJ)‘ü‰‰yy×€÷È'‚SR+4O¿ôaÇß÷­Ýì6 ÜøIì$ ûLv÷UÒø?wØÝ÷žÝøøz9ûçQRdmQ;k·ç÷·9ûÂûÀG÷×õÀ¿‡ûûBÝK ¹Ú÷Î÷Ù¼ø²øz=ûôYrtrigy¨Ä÷éHûôYrtrhgz¨Ä÷é<ûð*²VÏÁ«¬¾§S—ªo¼誸£Ž|’KËÕVv¬vøzwøÝ˜øZøz9û±&QFeBey—iXxD˜|©©†¯å×¼Ù¾Ž8’ûÏ‹ÎøÎ÷ÌÝø÷½÷ ]Üû!VS~|_N˜­°”¹é¨]4û{ûƒH÷ƒûÏ–÷÷ Îû vø8;ø†÷ìøz/û]üzÚ÷÷¨Ÿ¼›»œºœ\[ŸZ÷û¨Þ v¨Ñ÷ÑÑ“øÜ°øwøz)Sû‰ðS„_ƒa‡¼ƒ¹‚¹Q÷Š(°!üzÙÆ÷­“¹’·”¸•^”_–]ðÇûÑÆ÷–¸”¸”¸’^“_”]°Æû­ß vù$Ïw¼øŠÐø›ù°ÌБytt"RA+gûvü¾Ùõ÷¡›·ž¾œ¹Ÿ\ Xž`÷ û¡Þûwø{¦ÊÈ¢²¸Ë›™ˆ‡—ûLv÷vvøzwø0Ýø‚øz9ûûûûG÷„/÷pû¹ûVûUé÷š÷“ü`ݽï÷RÎ÷ Ý÷O÷ûÝÚ÷ 墫¹œž‡ƒžœ÷% ÷¼üÇÝøz9ì´÷xemqee©q±±¨¥±±n¥eÏh÷÷?Îw÷Ý÷XÝv÷å¡«¹ž‡ƒ÷% ®ø%ü‰‚‡‹†€•¥ù9üúD¤dÉ ™Ž—² ÷¬Ý¬ \=¬'?ö÷(ö® ^=®'÷÷ßÊ1÷ ?ö÷(ö® ^=®'÷þøsx?ö÷(Z¼ö« [=«'÷÷ßʧ€ «Š?÷÷:Çà ¹÷Rºsݦ@ V@=¦@'§€õ÷å÷&«€ò§€Ví ?÷÷Çà—÷àökݬ€ \€=¬€'¯÷+÷îñ ÷TÚ usll¡sª?÷ÄÇà³÷‰†Ý­ ]=­'®÷÷ûž ?÷¾Ç૾÷2¾Ý¬€ \€=¬€'¯÷‹÷áä°ÒÊS?×°÷°Çàи빣ݯ@ _@=¯@'¯À÷‹÷ÀÁ³°ÃÂcq?ö¼Z÷(ö§ W=§'÷h÷ß÷ «¯ §¢÷' Çàí÷½ÝU -=U'×÷üh,?÷i»Çà÷Iˮݯ _=¯'÷o÷ËÅ•À¤Å¾X¦4ç ?ö÷ W÷ö« [=«'÷÷ ÆBÃ8÷ G÷W¾§ç÷,?ö÷ W÷ö« [=«'÷÷ ÆBÃ8÷ G§÷6ÉEç÷ ?ö÷ ¾´öYƯ _=¯'÷÷ ÆBÃ8÷ G®€÷*³_¢>Žƒb½ˆŸ÷X?ô÷7 Çà«´÷Fµ~Ý« [ =« '÷÷ÝÅËÌËJÆ4ó@«ÀW¯š ]pö ÷' ö÷G Çàì÷¾ÝÕ@ ­@=Õ@'÷÷ßÊÓ@€ ÕÀНþGF?÷ºÂ¤ö¯ _=¯'÷føG»ã÷Glûjb ÷+ ¯Gá?÷ºÂ¤ö¯ _=¯'÷mø·Fãx ¼e%b ÷+ ¯Gá?÷º÷D´Çà÷=Ǿݯ€ _€=¯€'÷‹÷áb ÷+ ¯Gáq÷ºÕz÷8 ?÷¸æ»†»Çà«´÷Fµ~Ý« [ =« '«À÷‹÷á¿­Uáû÷´š «À]pö ÷' ÷¾Ç૾™÷—¾ÝV . =V 'W@÷‹÷áä°ÒÊSÖ ŒýµFûbÂ÷² ÷jÈÝÕ “OÖ`lecUS³n¾¤­—šžv´ƒ~†|rušª­²§°Æ¨øzIÕ'aÇß÷­Ýì6 ÜøIì$ aö÷G Çß÷­Ýë6 ÛøIë$ ûøˆËçÍîëΚa÷¾Ç߬¿÷1¾Ýì€6 Ü€øIì€$ ïžøŠå †WL°Dãa÷ ÷Çßí÷¿Ýí6 ÝøIí$ ïžø•F a÷_´ÇßéË÷Ýç6 ×øIç$ ºøhï¾ ç_©tÎaö¾Çß÷­Ýç6 ×øIç$ {øˆª Kë¯ çIîKa÷ÄÇß´÷‰†Ýí6 ÝøIí$ î$ø¤ž a÷÷:Çß¡º÷QºsÝæ@6 Ö@øIæ@$ ç€ûøŽ²»ë€Á–Zç€Ví Íø¿ÆµÛŠÒ÷Îè÷÷C¾«²µ°¸DÆFÊSkicwbES»ÔØÑ÷çÁ¦´¹·›ieQ\cScx³€²¯øü^h–e cª»Ð­Û£á?x@pKfVO¿QÌaÎÐÀÓÂߨ]À:4RG4\›U§UèK\PT5!Û?÷ÕĨ¹»»f¹r¶~Í÷c÷÷RÍ÷ ÷ ÷h÷j4÷û"û"4ûûjûhâû ÷"øèäÊ<ûLûKL722Lß÷K÷LÊÚäû×â‹Ïøj÷UøÎ÷3üjûIGøBÏ‹Òø”÷= ûfeaˆˆd÷B÷2÷ ÷ ÷ ÷;Öæ WB!û ûûlûSÏ÷ˆÊ÷p÷$Ù÷@Ð÷ãBÃ6øÚ¥Ä¼Øò0Æä dMHQWû+Lô÷<ËX?DI]49P¯³a v÷DÍ÷ËàøÙ÷‡ ÷A÷n ª£ªŸª÷V ûZ÷E(ø 3ûÓü+T÷ÝûDÙ÷DîÏ÷²É÷7ÒøKÞÃÖ_÷LÙ÷÷*ÉûZk{fœ÷Q÷´ÒûývûÇ÷0 32CR15W®±aÌ÷§É÷SÐØØ÷ÂÙ÷ÕÀ.PÍ÷ÉÁÆ£½÷ ²aQ¨=ûûÒIkXX÷aŽåÐñ»¹xl¬ vøËÒ÷vá÷vá”÷޵÷$÷=÷U÷OûGTû&€û†= Ï÷TÉ÷§÷M ÷Ê2\»â߯Ã×éÄIû˜N÷N eµÅnÙ÷÷î÷”÷a!ñûû(8ûûÛI÷ Ì˪¾¿û`‡2E&Z]ŸªkÍ÷D÷÷0Î÷ ÷÷U÷S4ôû"û"4"ûSûUâû÷"ø§äÊDû2û6LA22LÕ÷6÷2ÊÒäûµâ‹Ïø*÷UøŽ÷3ü*ûIGøBÏ‹ÒøT÷= ûVeaˆˆd÷?÷öòñ÷ ;׿ V>6ûûûoû&5Ð÷ŒË÷t÷$÷@Ñ÷åBÂ6žøÚ¥Ä½Ùò0Èä bMFQWû+Kô÷<ËY=AI]49P®³aéÎ÷ÜàøÙ÷÷5÷C÷{ ª¢¬Ÿ¬÷V ûk÷E(ø13ûÓü=T÷Ýû<Ù÷<î5Ð÷·É÷;Òÿv€Öÿõ€ÞÃ^÷LÛ÷ ÷!*ÈûZk‚zfœ÷U÷´ÒûývûË÷0 1/CR15W®°aÌ÷§É÷SÐGwÙÙ÷ÁÙÜ÷ÖÀ-RÍ÷~ÈÁÇ£¼÷ ì²aQ¨=ûûÒKkYW÷`ãÐñ¼¸xl¬ø‹Ò÷vá÷vAá•÷“´÷'÷=÷W÷OûITû+€û‰= 5Ð÷TÉ÷°÷M ÷2\¾åâÆÃ×ëÅFû•M÷N dµÅnÙ÷÷ð÷œ÷a!ñûû(7ûûÛE÷ ÌË«½¿ûb…3G'Z]žªk÷Óè÷+÷×Ô÷pûiœ÷=÷Q÷øCX¯÷I¾½g­^^giYûûè÷+÷S÷=÷o÷6QÔà÷À÷­¾½g­^^giYX¯i¸;üÃМ÷*«÷Æ÷ Æ÷«Ê_ªl²±ªª·¸l©edlm^÷Z_ªl²²ªª·¸l©ddlm^÷[_ªl±²ªª·¸l©delm^÷.ûv÷w÷&!ÍP÷¤÷|Õ÷ìé;-`hü’÷L  ºj¨c`cjn\÷ì÷.‹w÷w÷&!ÍP÷Ü÷’Sûì‰-Û‰é`®ø“ºj©ccjm\ [¬n³`³¬¨»÷.ûvùÏ÷i÷&²Üx÷†÷|Ôy÷÷J¬÷ê@Èû>Mi\^¼^¯¯¶¡¾Ô°aT%ûHc£û#nû:÷L ¸ºj¨cxcjn\ûXÐøk÷.‹w÷Û²÷'¸÷û÷’BûûIjû,ÕN÷ØÊ­º·[¸gg_vYBe´Âñ÷H³s÷#©÷;ºi©ccjm\Ø[¬n³¸³­¨»÷ô÷ã÷Š÷÷¤÷ô÷$ û÷ô÷ã÷ÿl€÷ ÿl€÷1÷ôÃ¥÷uŒ÷ûû÷“ûu÷$ Œûˆøº÷)÷ÕÎ÷‰e ÷ò÷)êÍ÷7Í÷‚ùO1]V8'@°^À¶©ª¹µn©b÷Wɯ÷_»1]U8'@±^¿¶ªª¹µn©a÷Wʯøº÷1÷òå¹ÀÝï×f¸V`mk]a£ ]aò q÷)÷ÕÎ÷‰ûvä¹ÁÝï×f¸V`lk^`¨nµ””“‡EfVLhq÷1ûvå¹ÀÝï×f¸V`mk^`£ ^`ò ¿ø$÷YÌ÷òÔ ¿ø$÷æÌ÷gáÉ ¿ø$ÝÌ÷9Ì÷Ô øû4³­û÷:÷÷9c®û,û4;¿ø$÷sÌ÷9Ìëá³i÷,÷4Ûû,÷4ch÷û9òû:É ˜˜â ãâ ã÷›÷÷ïY¯÷AghY÷÷º÷+÷¾÷À÷ÚÑÆããEÆ<v-[%:ÅYÒ¿¾¬°÷<÷ ÈÁ®÷ž÷3 §ºyÂ÷Åø÷(øc÷Kçûû:ûûûyûs÷û ÷2ÍÀŸ®÷ ò÷H÷W÷í÷ ñ·J@û>v-Z&:ÅYÒ¿¾«±÷<÷ ÉÁ­÷Ÿ÷3 ¦º v÷`Ä÷(Å÷KwâøD÷"Á£÷`÷rû`Á£÷`èÄ5ž†âÅ:÷; û÷; 0Qàxû(5RÚÈĆ÷xû(÷Ðø ÿ€Æ÷Y÷Ðò÷òûµ¨4÷"÷É{¹û%c€÷1[€û2û%´{]÷M4û"ÓÓ­ÏøTÏ÷Û÷‰Û÷Û÷³Çs»q[X`g=„„‹Œ„†÷¬T `¢³¾¶«Î‘’‹Š‘€¦‚¢{¦w·»m¨i£_˜¤÷S’rûŒƒƒ‹‚û9P-4ÝeÝkgûW`—e¡j¢dR®n½qÂ}oû+Ã…¦†Š““‹“÷áÌëë2³6«ø@½÷z¼À ø@^ ù2õ øL« øLÀ÷h¿êøLŠ ø@±øv8ø•ë øÀeø@ËøvCø@½öµÜ¼÷ ørdùH¥ øLÌõÑàèrø@¸÷ƒ¸• øœ/ ø@± ù!; øÛ øëkøØøëk øDê÷øs˜ øKõ÷ØlûJ½÷z¼À ûJ^ Çõ û>« û>À÷h¿êû>Š ûJ±û8*ë UeûJËûCûJ½öµÜ¼÷ ûdÝ¥ û>ÌõÑàèrûJ¸÷ƒ¸• 1/ ûJ± ¶; ûŠÛ €kûŠØ€k ûFê÷û˜ û?õû²l½÷z¼À ^ ÷zõ « ‹À÷h¿÷K÷ƒ=Êà÷K÷ƒÀûÐ÷>cqhm²j¤ž¥œ¦±¡tg_R\#<±µ8Ôë ÷e˵C½öµÜ¼÷DÆ÷Æ÷̱hj ¾ƒ¤¥¢•¥´uljvvf÷6 ro™c0LLû-ÆQÙÏ»ºÄÃh²Ggm~ur×°³Ä¥Ÿ}÷¥ ÌõÑàèr¸÷ƒ¸• Û/ ± ÷i; ?Û ÷3k?Ø÷3k ƒê÷²˜ Šõûl÷Õ¼÷z½À ÷ÕÜÅÉóóQÆ::QP##ÅMܼ`h²ÙÛ®¬¶¶®j;=hd`øÇõ ÷áÊ÷ÅYozt‚÷4 ÷áÀ÷gÀê÷á÷‚ÀûÐÎÆÁºÂÌ`±C[bqhm³ð ÷Õ¼î±è½÷êÊ[Êè÷@ø c ¿_«M]_ypr©eŸŸ¨×è÷I hkq|gghŸ£wø*µ÷¿÷âÄ÷€øTÁոˎ‡9SöY÷RDû(û]l÷6BÄÔ½÷Õ¼÷³ÄÂ÷þÊ÷@Ž´¥vfgouecnŸ£t÷Õ¼ö¶Û½÷ øhi¡¾„¤¥¢”¥´vljuug÷6 žrn™d0LLû-ÆQÙλ¹ÅÃi²Ghl~urׯ²Ã¦Ÿ~øÝ¥ ÷áÌôÑàér÷Õ·÷ƒ¹• ø1¢œ¡©™¸~µgpjxifm ¦Øâìb—i™§¢¡œ¬¯Ÿysxyq|äû%&\½bÖÒÁ±½·o h›Ø¥™¦Ÿ±»Z¯IMWhZg£y©y‡äizltb÷ռܵö½÷AÅ÷Ç÷{ø¶«¡¡¯®¬uW“sqt‚qby¡ªVûUx¤¨~²æÊÊ÷èPÆ=H[\RR­eÏ®©˜Ÿ¤@†gdTpw•˜y÷RÛ ø=(²DÍJ¹¬OÇrÌØÙ¤ÌÇÇ]¬IJdD'÷RØø=ïdÒIÌ]jÇO¤J=>rJOO¹jÍ̲Òî÷–ë÷÷ÆnŸx¥¥Ÿž¨§wŸqqwwo÷žõ÷+Æ °¼Æ»w¥iruyoo¢}¢Ž‹Œdrqd|L WyL ÷À÷|À÷@Ë÷>Í÷@÷˜½’«Œr©®|÷N4ffyrmÃ÷KËü÷6¦©§é÷¿÷~¿÷IÌ÷Iø9 ÒMéµ´›¥«p´zup}jL`ºÑи»Ê¥¡zŸ«´ sjœ]1;M ™÷ø9 ÂMß²°Ÿ¤¥fÀøhKû U¢oq™÷½ó´è½:ø§¾ó½÷©Êø‹ùd•nm‘j/aW>r<ˆ[Úû£Ê÷£÷¾û¦¹¢ªÂ¥¡†‚¢÷¶ë¿Äµ÷»g·÷)ÁgÈPÀ÷$ĉÈô@÷_÷f›•œ§š‡™šŠŸÆº¤ƒom]mDIh «UƒRÃlè÷Ò¾ÊÁb¢6ñ€Dav•£™“–™”„žœ‡œÒ³Ҥ€¡}™Ý»û‘}zyò€DP_Cežo¡zˆñ€s{|tvp›zœ‚ˆô@ixxqrê€÷(÷^dm¦¶¶©¨²±ªn``lpe—i¸@[grlkÐ÷Kø§¾Êæ÷¿ë<Ë÷Cø§÷!û£Ë÷Öûaà÷@ʧŸœ§¦wžoowxpoŸz§÷ ¿÷ü¾Êæ÷³ì<ÊÈ÷8ø§÷!û©VzmMws‘–uw]~£ª­÷ªÇÚ÷Øû`ð÷@ʦ œ§¦vžpovxpo z§÷˜øh÷QË÷Q÷˜ËàÑÎöû,Òû ÷V÷÷Dû3û4‰÷ÆK÷¿ø ½÷©Ë÷Xù:ÜûÊA¬aÒªŸ‘’¥½„v}‡|hwœ¶øû%ø¬Á÷ÈÝÀÜÈ÷÷˜È÷z©›™›Ÿ¡•ziûuÀ÷z©™š› ¡”ziûuÈ÷zËq¯^gtujz°ƒvkfwvn{‰†µY—h¸AZhrllˆ†»Vy÷À÷|À÷@Ë÷>Í÷~÷µs©ª~÷N5cfwsmˆ†¯Wü[Ëöð÷6¦ª¦é™÷ø9 ÂMß²®ž¢¦ˆTûËø[W†l‰¥mp˜ø©Ä÷‡Ë÷‡÷˜Ë÷KÍ«¶£´£˜ˆ„¢˜Á”wxrW]lWm‰†ÖU÷¼÷…»÷HË÷$Ê÷6÷½r¯ÀwÄè½·ÁÈJžQœ`˜b—§¢ ž½¯¨z¦©³Ÿl`œ[6YcVTËuÃz¶~¸}mrrwVZh™£i÷¾÷x¾÷…Ë÷…ø:«Uë­­“–¥~¹ƒww…qPw§Ã÷$÷%¾û%åVƒ1;ˆ[Ø÷Â÷3Ë÷0ËøOøÚKûtfkr}i\y¤Â÷WKû_9­^Ô¼°£®ª‘X¿÷˜½÷'÷Î÷¡÷˜Õ÷ ÷ÖNMûD€k‚k€k‰«‚««N÷DI÷˜À÷SÁÝø÷,÷˜Õ­÷+“±§¦Ž‘jm‘m®û+ØÎ÷ÖOgûF…l‡m…mˆ…©†©„ªf÷.Xgû.„m…l†mˆ†©‡©…ªf÷FK÷˜÷Ö÷3÷À÷3÷˜Î¶Ñ—Ÿ–ž–ž˜x™x–wºEÐû÷5ó÷5GeI€yyyˆ€`ÍGñû.÷¿÷ ÷Ô÷<÷H~Z‡—™ˆœѰºÏ¤÷÷ëMOû>‚ojn‰©€¬€¦F÷>K÷ûÔ„tf}sqd‚ŽŒ„÷˜¾÷p¾÷&÷Ê÷&÷˜÷ʾûo÷h÷­û«X÷Qûiû÷½ó´è½»ð:3÷S¼OðF÷½ó´è½»ð:‰÷¸GN&»÷½ëµï½÷.Ä÷EÉ÷.ø,,ÂNäàÎÌóöLÉ-]c}vk¡b›§¦•­É®eMûy‰ƒ‰Ä÷EM…jiWUk¬ÊW÷ ½è¿÷qÀ÷Ì÷@Ë÷K÷\t_t¯¹´íĺÛ÷âV…mФnn˜f@DK''ÂMß²®¢¤ŠS[ŠmmOlg“ j÷÷Ti¶ÏÍ´·¾¥¦ƒt¦û(opq}møA¹÷8¹÷C½÷+½÷ÀøAÎÆ½ØÚP½HHQY<>ÅYι_l­º¼ª­·¸ªiZ\li^÷È÷ Èõ×÷€×ñÞâär«±~´³²˜¤ªã2·¸7ࡪ™²¹¹~³tªßá_¸41£kd˜cbd~sl4å_^Þ5ul~c]]˜d¢l76÷÷]ÛÀÁÌÌÀU;;VUJJVÁÛ®ÎøTÎ÷ÛÝÇêÜøƒø±c²]ªB‘÷Oû*JR7ûB÷Ñ¡ûXag<@N«¯YdR¹dÒjÕ…û%Ç÷&ô–ÒÉá÷KûÒv÷¾¶«Îήuh¸‹Ò÷jÃ÷„Ð÷$ÚvÔè÷?Ÿ‰‡÷AÃðûQ|µ|²µ¹ aœbša(‡Wè÷ yŽyx÷‹÷b[»Ìº÷Ôw÷–ÝxÀù÷MûÔû5\÷IJûI[÷I¸û2Ýx÷2÷K»ûKÌ÷Kºû6÷N÷Ô9/û?s_u_s\‡rºv·t·/÷?Í÷I»Î¼÷MÍ÷àø™÷]cbrR/OÏ÷x÷‘»û—Š—‹˜˜•‹•Œ”÷¿¼ûº÷ÉÑí¾±sh­¼º·cN­Gû!'-û1rK†_ÆŠ‹€€‹ŒP‡`Ëû0¤ì0÷ÝǮŽÑÏ÷ìÏ÷Ü÷ ¾÷Î÷"@œ^Éäã¹ÉÕœ÷0û¸oshwaˆ÷쮉©{¥s³¿l¨a¥QŽòX!û|37ûû!Ý6÷ ~#¾ò¿¼£³®*Îø Ê÷UÎww÷ÿO€Øø¬ùè–uh”iû[Dûz…SbE‡Pósûo%~rUFvw‘’y{M‚Ÿ§‚®÷ µÞ÷š¦÷÷)Êû"’ÊÏ“¦ÉͨŸ…‚€Í^vªvøÝ͆wëà÷"±k±•÷ïøÛŒ‘‘‹‘™˜‰ˆ˜Mü vx{”h¥]·rÚð÷¸èݧ÷QüVhchs]…Çøœš~š|¼º6t¤m¢h™™÷e.$6Ž}}|††‹†—íe.$ûs6û ûKû*à å\-|û±˜÷†ž‡ŸŠM(±—îÓ­¹À‹Ò÷8¼Æ¼÷QÐ÷$ÚvÔô÷?‹÷;¼ûA‡Ÿ„Ÿ…ž÷R¼øûbƒ£†¢¤¹ r‘r“s;‡^ì’w“xwm4†_ô÷‰‹Š‰÷‹Õ÷:¶Çµ÷FÖ÷ Ì÷xÌø4÷¯G†™x¹åq›û‡‡M÷:Âû}¶±Š¡ÓŠ£Pû÷¬ÎûFPøaµC÷‘Jû‘ %÷‘7û‘A†fÕOA†eÕû„Ì÷„÷ìû„ß÷„Ó¶CÇ v÷‰Ä÷Ã÷Ä÷ Ú÷j÷#÷Y÷Â÷÷j?Ud0÷«æÁm=•ûj÷÷ùûK÷ ~1¸û û(û9@†XÖü5Ú÷‰Ð÷ èÂ÷ —Ë‹¼ÈÆ÷ÇÒ¼÷Ô÷kÒ÷ ø¼ü÷¨÷Afhi{fFc¼Ýξ¾É³¥n¯Ò÷qÎDHû/Z÷/i8¨hlœW26FûûÍHð¿´¢©ª‘`ÅøAÙ· v÷‰ÄÖ´Æ´ÊÄ÷ Ú÷lÙ÷Yø6Æ÷jŒŒ€‚Š‚ŠƒûjûÖ÷`YuYrB÷«Ò»y^¢û]Ê÷ùLAâo9¬#û(û @‡fÖP@†gÖü Ú÷‰Ðôßµå¦Ó´KŒ“‹””—Š–Š•Ìû÷:IÍ÷bÐ÷‘ÌJ÷8ßà÷"ÇÛÖwø¢÷ßûSF÷û=wvaz`ûJð÷8÷5Íñ÷½²sg­¼¹g´T¬NoîOw&ûw2û ûPûTèû ÷|·'ÇwïÆ‘¿£·´•v¡vøåÍŠw wëà÷)ÀN÷ÞÃ,œUî÷)÷$Àìëž÷;ü\idhs^…fø£µ†¬u©l¼ºf´T«M–ëV*û"x/û ûRûWêû ÷~N(ÀïÎ’¿¬·¾ v÷Î÷ ¼ßÏZ¼øÝìø ùü4ôGÚðËtN›ûL?†_÷›;„Heûbqhn²j¤ž¤œ¦²¡tg_R\#<‹÷`¶÷¾›¼î±è½÷dÊZÊ÷KÅ€øéø×[¸û<û_¬mûüûλ^÷ k©û2÷ž€ŸŸ©×€e˪zhkq|ghhŸ£vldi¬»w¹Ï¿­Æ´p¥`•¾€Â¿^«N\`ypq÷Öü}ÁԷ̆9SÅ÷QD]€û)û]l÷6€BÅ]€Ô½€¶Y½í±é¼÷Š÷ ÷–Ê[Êí÷ õp÷ í ûü­O îŸ íó½í±é¼›À÷gÀ¼÷ƒ=Ê÷`Ê[ÊÜ€¼÷á÷ƒÀûÚ€ÍÆÂºÂÌ_±C[cqhm²ð §ûä-ûü­O ûŸ Ú€ó¸÷ƒ¸÷Š÷ åÆ\Æ÷Æ[ÅÜ€÷ (p÷ œ€aÝ<ü§9 ¸÷ƒ¸¼î±è½÷dÊ[Ê¢Æ\Æ÷Æ[Å"±ø O ¿_«M]_ypr©eŸŸ¨×2÷I hkp|hghŸ£w’ü- _ @Ài | @À¤™§ °¼Z®IMWhZg£y©y‡ i{kta¸÷ƒ¸¼÷³ÄÂ÷xÊÆ\Æ÷Æ[Å<±Ž³¦vfgoueboŸ£t’ü-‚@_ A€i‚@| A€¤™§ °¼Z®IMWhZg£y©y‡‚@i{kta¸÷ƒ¸÷ À»÷‡ûAÍ÷Æ\Æ÷Æ[Åì€÷ ÷áÍ0ôÑßé¯û‡V(÷>ì€J8oI„$bûÁ9 ÷¿É÷ŸÍ÷ŸóÍ÷W÷JÉûJ÷WIûWûJM÷J˜÷ø+ñø ÷&÷÷.÷4÷.û4·¸û.÷3÷.÷2_¸û.û3û.÷3_^÷.û2û.û3ëöëÉêö÷Š÷÷Àø\÷2 k¢uªUûÆk¢uª÷2 û5÷)¶ ÷›÷=÷l÷5÷l÷ïY®÷AhhY÷TÉ÷,ÉàøBàø*¶ û¨¶ »øÌ÷ Ó÷ ÷Áø û‘ÚûÁ÷_÷Á÷_Úü û‘»øÌø,Óøt÷ÿü ÷‘<÷Áû_‡ûÁû_<ø ÷‘‹Éààà¶ ÷ˆøBû-ÒûfÔû·÷·÷fÔÒüBû-‹ÉøBàà¶ øB÷ÒüB÷-D÷fB÷_‡û_ûfBDøB÷-‹É÷†É÷ŸÍ÷Ÿ÷Í÷E÷JÉûJ÷RIûRûJM÷JûJûĶ øåØ÷ø÷÷°ÓÍ÷D¼÷¼ûÍûDÓû-øC÷TÉ÷,ÉàøB÷ÌÈ×÷÷žÉûzæ÷,÷É$×÷N?ûûžM÷z0û,ûMò÷•É¡É×øT`÷÷“Т¦œªÄµ7Úà÷ ß<`XYl-h÷)É¢ÉÏÉ¢É×øTX÷÷þТ¦ªÄµ6Úx÷ à<XXYk-hÀûТ¦œªÄµ6Úؾ½«è®V£Dtp{lRaà<XXYl,h÷¿ÉøUÍà÷¿øûWÍ÷•üBÏ÷þÏ÷Ø÷GÙø÷<©`פ›‘™€Ê‡~ƒ‰…l}™­ºŒ÷1‘÷áÏüXE†Lêû‡û${û#Þ†”÷"÷%÷÷M‰!‡û,Y÷*ÚPÊ÷HÙ\Ê‡ÌørÌ\÷÷>и¾»¨œ9¾»fÔåÌÕ÷ïJÒ2CX\Eb‡lÂm_¹I9KL#\5ÈGÔœ÷K÷>Ô³²ªºʰ\KRi\PXe¨Ý_lû? ^g³ÁÁª«»²­pJ¬Rqhl`ÏIÐîÙpØûOÞ†Ûмð`¥´ºÉîյް>’ i¾ šŽ—ɉ‚‡‹†|•¥÷÷'Ž÷8ûÐp.UZyX?jºä÷·8Ï÷°Í÷ZÏ×Ù÷µÛ÷žÃOW½Úã»Îí·»wS·ûvL?5@ø…««±žµáÁEû;€‹€Š€¸dS¦Uû9-ûû áBë÷2ö÷,÷u÷b8ðûMUraaû2ÌùÆË÷“×iÖÐ÷W2‚M‡”ˆŸ÷£í÷à÷(b÷[÷%ò•ÆÂ™—‰‰”•ÉŽƒxŽwûs(ûÐû(µû\û&#€SS}ŒŽ‚,åÉø÷Xø)ûPŸ^Ò«÷*ü@É÷nú'OûFý†vˆu‡v‡† …¡… ‹Òø’Ö¯ø¥¯ø¥½ûmøò,ûmüòæ ñ÷ÀÐ÷fÏûfòûÀ‹Ïø£Ô¨÷fûYá÷}÷f(áä¨÷fÈÔKÆ\ã÷÷"Éö÷÷É û"û\3KPØN÷fÏûÔÁÃÃæ÷÷L'÷û2û2'ûûLûÃ0ÁS‡äûû ÒøüÒÑó.òàÑHVøsÒü ÷r÷ÅÐûh÷Ã÷åÒüLV÷wûÚøÉÔ¿Þ÷Üà¿û ÞùA÷ÜýAàùŠü„ÑøëÊ÷^Ü÷Ñ÷¯ø™쪶¯¬¤qI-\5==÷IûatspvcZb®è­÷óÔ÷÷ïUÂ?8LMû/û pwovmx¬W—–›—û‘ÒQÝŸ«ª¬Ÿ÷È÷ÆŸ¥÷÷¶÷÷8χ‘‡‘“÷tø2‹÷Nû÷*û+û+ûû*ûNûN÷û*÷+åÙ¿ÛÁeG]I_EUY¡±i‡÷ž‰‰÷p’”‘¯­½¡Á½½wi­‘…ƒƒût‡‰‰‡÷nÏœø¼œ÷Ž÷¤û¶¹û]÷OøJÏüJ÷]÷O`¹û¤ûrø¼÷žÏ÷¾ø£ûû¤¹a÷O÷]üKÏøK÷Oû]¹µû÷¤÷nϨø½øÚ÷’û¥÷a]÷]ûOüKGøKû]ûOµ]÷¥÷rø¼÷žÏ÷Âr÷÷¥]µûOû]øJGüJûO÷]]a÷û¥÷6÷_÷]÷Z÷]÷6÷Z÷_ûZ÷÷¬÷3÷®÷Á÷÷ ÷ û ÷ û"û Ú¼Õ÷ ×»÷ ÀÒ÷ÒÀ÷À÷^ª¥¤¯¯q£llqsgg¥rªûîÝÒ÷÷9Ò((9DûûÝDî¼HN½àáȽÎÎÈY56NYH÷¯÷9Ó÷:±÷2Ó÷`÷2÷9÷2û9ûXg÷o¼Å÷kûePZ±ø„±ø ±±é ±Å±ø ÷!ë÷4÷Í÷3ûÍü:Qé žø¡ÓøƒÓžè žø¡ÓÆ÷÷÷Ó÷Éû3üû›è ©øƒ±ø ÷¿©÷—øü ‰øgűø ø`øgû3ûÎû4÷Î$Ã÷™ü‚÷—ø‚ü žø¡¬øƒ¬÷¬øû™ø¡‰üû˜žø¡øiÆ÷4÷®÷É÷3ûÓÆø:‰üû˜‡øû™¶øÈÕrµø©Öœ¬øÈø©üÈüÓ`øê¿ÈùüáNX¶×Êø=Õrµø©Öøº¬ü©øÈøn4ûBû*`û&‡pßaáZØSeÄ6¹1°%ᕺ÷?Ø÷.å÷ñ÷zffgbh]üNXý øê¿Èøö¥©§§¦¥|Ê…øü÷{×÷¢÷%÷w÷2÷'U½û0û.û#û‰Dû‡lä]èTÞSeÊ0»-³ûs÷U÷¼Â÷ÁØ¿Y»qÀçÜÄ÷ø+Ûr·MLgˆsk®~›ª›»¿×tÃ1ËY¯”€¦Zü­‘r‘q.JSNÐø²Ðíø(÷š×÷8÷èû8÷è?û8ûè÷\û£L÷K÷Ë÷Ê÷ÊûËûKûLûøF÷”÷”ó÷”÷'øF÷”÷<÷¬÷<÷'÷.û”À®÷0šï:ˆøº÷)÷ÕÎ÷‰e øŠ¯÷-¯÷è¹÷‰øŠ扽¸ÑÐY¸0‰gϦl^]plGøŠ¯÷-¯÷oº÷üùk0Y^FE½^æ¯Gqª¹¸¥ªÏß÷M÷H÷ÂøÑ¼ ß÷÷Hø3÷@ › œ ø!÷Ó÷ñ÷¤ø!â÷Ó%“ß÷}÷Hø1ùeÍ Ëß÷L÷H÷ÁøÑó û’÷Ô÷ñ÷ÜÍStûÔñp øà÷÷*÷ß÷÷`øà\“øÓ¾÷>¾÷2¾÷ÀøÓã°ÒÊSø²°÷°÷c¸ë¸÷Àø²Á²°ÃÂdqøÏ÷#÷^÷¶÷^øÏ‘øÞ÷SøÞ3÷E÷ÊË÷‹@´¡÷X g}W„“b֒ЦÅ´qžj–¥ÀUß÷M÷H÷ÂøÑ¼ ÷.÷=÷J÷®ùV‚ß÷÷Hø3÷@ ÷.÷÷JÊ › ÷.÷8÷¤÷{ùV5 p ù[÷9÷/¹÷Z¹°÷üù[p¦ °f pQ°ß “ùmÄ÷D÷Œ÷Dùm® øÓ¾÷>¾÷2¾÷ÀøÓã°ÒÊSùXº÷E÷Š÷ÀùXÛ¯ÁÃ’YOøÞ÷SøÞ3ù^ö÷‡÷÷Àù^@øà÷÷*÷ß÷÷`øà\ù_÷* ÷jù_1ù;»÷ÓË÷¤«ùÌ»÷ÓË£ø²°÷°÷c¸ë¸÷Àø²Á²°ÃÂdqùO÷2ùO”øÏ÷#÷^÷¶÷^øÏ‘÷.÷S÷Á÷ùVœ ÷.÷8÷¤øùÆ? øÏ÷#÷÷¶÷Üù^Bãû#Âûn÷#Cãû#Â÷.÷÷Áø-ùVI÷>Þx û8÷>ßx Æøµß÷‹µ÷ÜùpRqs^\^s¬¡š©¥v˜wˆ‰‹Šˆ©œ£±ùÞ÷Ê´÷¢ø´Ä¥£·º¸y£kux|nq ~ŸŽŽ‹ŒŽ‰mysfyøG÷Fø Ï÷¿øGݓɬÓ¤¡~Pn“~‘}|coySƒûv÷Sûv3û]÷* ÷jû]§ ¡¦§v onwvopŸu¨÷@¨Ÿ¡¦§w novvop u§ûl³c÷<÷ÄË`÷£[ yes`÷5÷E÷ÄË÷…@³¬V÷E÷¿Ë÷@´¬UûhÆ÷~Ë÷ÆŽjrd\Sìt¸‚†{ssšª±¤³¶«ûb¾÷B¾÷*¾÷Àûbá¯ÏÆXÉû?Å÷D÷‹ø;û¡øàæÒº÷<æ8÷‹9æè÷jøà_Ðûf÷6÷‹ºû‹ù_æÂ¹÷<æ8÷Œ8æP÷Dùñ÷Œ¹ûŒè±ûT2 øàæ´òÎ ÷‹÷Mûû_ù_æ¬÷Î ÷ùÛÏ÷÷0ûû2 øàæ´òÎ ÷ùdÑæòNLK‡LËN³û_ù_æ¬÷Î ÷jù_2 z÷HG÷ ÏHëûÛë÷øàæ´òÎ ÷£ùË<ò$Ŭû¥ŸŸ¤¥wŸqZû@ÛwwqrŸw¥ù_æ¬÷Î ÷šúJ0÷ûÏ÷O ÷ð ÷LøÑQ ÷W¾`ç÷,ùVõa÷÷@÷þ øù–¿`æ÷C û¶ûCB ÷O ÷Ñ ÷LøÑQ `÷5ÉFç÷ ùVõa÷÷@÷Ì`ø1ú÷6¿ ûÌKB øÑ÷ ¾´øUÇ÷LøÑQ ¤ùVõ¿µøUÅø3ù†~ û|8B øÏ÷7 ÷=µ÷Fµ¸÷DøÏ¥X¯‘ ùVõ¯»…»÷<µ÷Hµ¸÷@ùVB U¯®aØo‡|}w¸ê ÷B÷›ù9»ã÷Glûjb q²´…`© ÷? ÷™ù¶¼ìôChû[à ^E÷B÷¡ù©Gãx »f%b q²´…`© ÷? ÷úCì"¼d-à ^EøÓº÷D´÷ÇÇ÷ÀøÓb q²´…`© p÷»Õy€s„ùX’¬ûà ^EøÓ¸æ»†»÷=µ÷Fµ¸÷ÀøÓ¿®Uáû÷µ‘ ùX¶ê»ˆ»÷;µ÷HµØ÷ÀùXà ^E¸û÷µ§›œŸØ«£^º¹§´¿÷: o†|zw¸÷;øÏó©¸÷D÷Œ÷DøÏ¥`±©×®º½^n†vt__v¢¨†^Y®\×ùVõ¨·÷@÷”÷@ùVB `¯¨ر·À’^lƒvu[¡ªƒ^V’±_Øø¸÷h÷œ¼÷Æø¸ºø±÷=b´÷{Ë ÷Üø±`±n’u–¦¤¯˜¿’ƒ´@„FpQ _¨tÏ[ dù:r Á 1 dù:ïù:÷0÷ü$xa x=ü$xz xû0[ ÷> ÷™÷Ùû÷\=÷Ùû÷\=÷Ùû1 ÷> ÷r÷F÷\û0÷F÷\û0÷Fû\÷r÷÷r÷÷rë÷r=÷Ù÷r=÷Ù÷r=û\÷r÷÷r÷÷r÷& ÷rû0÷÷0÷rû0÷÷0÷rû0[ ÷ ÷™÷Ùû÷*=÷Ùû÷*=÷Ùû÷*=÷Ùû1 ÷ ÷r÷÷*û0÷÷*û0÷÷*û0÷û\÷PÉ÷PÉ÷PÉ÷Pë÷P=ÉÙ÷P=ÉÙ÷P=ÉÙ÷P=û\÷PÉ÷PÉ÷PÉ÷P÷& ÷Pû0É÷ É÷ É÷ ÷™Ùa ù)÷ÀÙ÷#÷r÷0a ù÷À÷0÷#÷™Ùz ÷H ü5÷r÷0z ¶ü5}r ÷Àý)Ùùw÷#ƒùž÷#{÷™ý)÷0ùwü5o÷™ý÷0ùžü5÷U ÷™øÙûÀù)=´ ÷™÷rø÷0÷ Ú÷r÷™ø5ÙÄ À÷r÷rø5÷0÷}r øùw÷ ´ ïøùžã {ø5ùw÷!oø5ùž¯÷™Ùa ù)÷Gù)=÷r÷0a ù÷À÷0÷ žÀ÷r÷™ ²ý)Ùù)÷ÀÙÀÄ žÀ÷rü$÷0÷H  ûÀù)=ý)Àd÷™Ùz ÷H Ä – À÷r÷r ²÷VÀ÷– À÷rü$÷0¶ ÷ ýÀd÷r÷0z ¶÷}r ÷Àý)Ùx÷ ƒxã ‰÷Àý)Ùù)À²ùw÷!‰À ùw d÷W {÷™ý)÷0x÷!‚ ÷ÀýÙùÀ²ùž¯‚ À· ùž d÷ o÷™ý÷0x¯}r ÷Àý)Ùù)÷À÷§ ²ü¨ ü`dûÀƒù÷À÷0÷{÷™ý)÷0ù)÷™÷;1 Ñ ²ü5¢ ü5`dû™o÷™ý÷0¶÷}r ù:÷) ;[  ïø`²÷Gù)= ýûÀ;[ `r ÷À dø÷0÷ `ý)ûÀ´ ïù:÷0ûÀ÷ {ù:÷ ;1  ïø5`²  ;1 `r ÷™ dø5÷0÷÷ où:÷0û™ù¯}r ÷Àý)Ùù)÷À÷) §ù)= ýûÀ¨ ÷ `ý)ûÀƒù÷À÷0ûÀ÷ ‰÷Àý)Ùù)÷ÀÙÀû™ù)÷!‰À ÷H  ûÀ÷W {÷™ý)÷0ù)÷™÷ ;d ÷ù ²`²  ;d Pr `÷™ d²÷V ÷÷ ;d Ñ ²d÷ ;d Pr `  ¶÷ ý d`dû™‚ ÷À÷VÀû™ù¯‚ À· ¶ ûÀ÷ ;1 Ñù)û0 ýû™¢ ÷÷ o÷™ý÷0¶û™ù¯[ ‹÷*÷*÷*÷™÷*Ùû*÷À=÷*Ùû*1 ‹÷*÷*÷*÷r÷*÷0û*÷Àû0÷*÷0û*û\÷Žë÷Ž=÷ŽÙ÷Ž=û\÷Ž÷Ž÷Ž÷& ÷Žû0÷Ž÷0÷Žû0¸dù:d÷çù:Ùý:û~Á ü$xá úˆ÷ ÷KÙÙÙa øÛ÷GÙ÷ÀÙ÷#g÷Kü$Ùù)Ùý)Ùù)÷rÙü=÷ ü$ÙùwøÙü\÷0ýÅÙøÛ÷rÙq |÷ÀüÛÙùÅ÷#g÷çü$Ùùwü\=÷rý)Ùù)ÙÊ÷çøýwÙùÅü\û~÷ „÷™÷KøÙûÀÙ÷GøÛ=g÷K÷™ø\Ùûrù)=ý)=ù)=÷ ÷Kø\Ùüùw=÷0ý)Á|øùÅ=üÛq gr ø\ùw¿ Ê÷Kø\ùÅ=ýwüÙ÷S ÷KÙÙÙa øÛ÷GÙ÷GøÛ=g÷çü$Ùù)÷rÙûrù)=û0úˆ÷ ÷KÙÙÙá ý)ÁúˆÙøÛ÷rÙq |÷ÀüÛÙx=üÛq gr ÷rý)Ùx=ý)ûrøýw÷ ÷çü$Ùx=üýÅ÷ Ù÷S „d÷K÷ÀüÛÙøÛ÷ÀÙý:ÙÁ gr ÷rý)Ùù)Ùý)Ùù)÷r÷Ê÷K÷ øý)ÙøÛ÷rÙûÀüÙÁ ù:ÙûÀøÛ=üÛûÀû~Á gr ù:Ùûrù)¿ ¸ ø=ÁüýÅÁ |÷ÀüÛÙøÛ÷GÙ÷GøÛ=üÛq gr ÷rý)Ùù)Ùý)Ùù)÷rÙûrù)¿ ¸ û~÷ øÙÁúˆÙøÛ÷rÙq ÷™Ùa ø$÷$÷ ÷ ÷$²ÙdûOû,û,ûO}÷ç÷Oû,÷,ûOd=²÷$÷ û û$ü$Ù}÷çú|=ü$û$û û û$d=²÷O÷,÷,÷O÷U øìûO÷,û,÷O²Ùdû$û ÷ ÷$ø$=÷ dû5=Ùøìú|Ù=÷ ²ùÛ==øìþ|ÙÙ÷ ²ùÛ==÷©üaû©üa=Ù÷™øG÷™üGÙÙû©øa÷©øaÙ=û™üG[ død÷C÷™ùwE ÷™÷™Ùùw=[ ÷™ø÷™÷Cü$ùwa ùw=1 død÷4÷™ùw1 ÷r÷™÷0ùwû01 ÷™ø÷™÷4ü$ùwz ùwû0[ dù:r ÷Àdø÷0üdq ÷0ü$÷0ùwdù)=ý)d[ dù:ïø²÷G²÷#÷0÷™²ý)Ùù)²ùwû0÷Àøˆ‹øì÷Àøìøˆ÷ û\÷w÷÷ û\÷Žw÷Ž÷ û\ø wø ÷ û\øˆwøˆ÷ û\ùwù÷ û\ù‚wù‚÷ û\ùÿwùÿ÷ û\ú|wú|÷ Œ ø¡Èø¡ú|ü¡Œ øVÈøVú|üVŒ ø Èø ú|ü Œ ÷ÀÈ÷Àú|q Œ ÷uÈ÷uú|ûuŒ ÷*È÷*ú|û*Œ ÖÈÖú|@û\ú|÷%ú|q Œ ©È©m½÷ÀY÷øìüˆÖÕ Œ ©È©m½÷*Y©ûH÷ÀY÷ÀûŽ÷øVüˆ©ütù´Yøìý‚Ö÷Õ ÷À÷1 Œ ©È©m½ÖY©"÷CY÷*û©ûH÷ÀY÷uûŽ©û“ø=Y÷Àü ÷ø üˆ©ü)ù7YøVý©ütù´Yø¡ý‚©ü¿ú1YøìýÿÖýÿ½üƒùÍmø¡÷ý½ûíøÓmø Õ ÷Àü ½ûW÷Ùm÷u÷1 ÷*û½^Ömù7÷‹øìù7øì÷÷ ° ø¡Öø¡û\Öú|@û\øˆ‹÷ÀÈ÷À÷ û\øˆ÷%÷ ÷Àøˆ‹÷À÷À÷À÷ Œ ÷ÀÃøˆûÀ÷ ÷# ù´üˆ÷Àøˆ üˆüˆ÷ÀøˆŒ ÷ÀÈ÷Àøˆ÷Àøˆ÷ ° ÷À÷À÷À÷Àüˆ÷Àú|÷ ÷Àøˆ÷À÷À÷À÷À÷À÷ ÷# û\÷ÀøˆûÀ ÷À÷À÷ ° ÷À÷ÀÃú|ûÀüˆq —øz—×—¿—‘—·—ûm— b_ ‹ Ï á Ï á øìµ12kޝù@‹­I‡ÁéòXdiÀÝë'X}ÁÆIvˆ›¢®ÎÓÞáòûd~˜ª²ÆÎßîòùý ?CTiª¹ÂÓÚÞ (4t”œ¢±¸×Ûàö    ( , B N g | € ¡ § ¬ ³ º À Æ Ù Ý ì ý * = A H R Y d ~ ‡ ¯ ´ Ä É Õ ç ö  " 4 ? G f s x ˆ ª ½ Ë Ô Ù ñ ù þ  ! ) / 5 E K U Z ^ e l u œ ¢ « ± Ê × â ç î õ ü    & < C I R Z b g l s | ƒ ™ ¦ ¬ ± µ º ¾ È Î Õ Ú à å õ !.BM_q}‰‘—œª½ÁÒÙÞçìñ!,7BHY]cgw}‡Ž–ž¦®´»ÂÇËÐßîý "0>LX^bhqz€†Œ—¤±¾ËÒÖÝäéîóÿ+0<?FNU]chns~‰”ŸªµºÀËÓØãèíò÷%÷‡÷ÏÖßµµ{b·û†[`]r[1VÑ÷6Šû6à/÷ÈÆ®´²Ž ÷À÷(ó÷÷g÷e#÷û(û(#ûûfûgóû÷(Ô'Iõ÷8÷7ÍðïïÍ&û7û8I!' ûåLUbpS:l·ç÷·8ûÂûÀG÷Öijļ ûw&VûÛ‘ËË´÷dœû]TTqTSX¢Â „Uˆ´`Z¤Rû #+û,û-à/÷ÇÇ«²±Š)=‰WX.ZS˜«Y÷7÷G2TÐ÷óÑÕݶµ{b·ûv[_]r\ À÷Üûj÷ û÷9àЭµµ÷¨ûdF÷û?sr`|]ûBó÷9÷7Üñ÷ʲqi«ºÀ²fR´4û>û ûûh ÓËbÆßhê÷ØÍÚÕL±û¬3¡O£³±¨«æÇ¿vm¶³À¬[A¨BûEO=Fà_ïr÷ n²pea`i44O¥³U èÝ÷çÆÄ²¨ÅÛ«_/û·Ý÷Â÷VÏû?SbU ÷åÓ÷§•²“³“²Ž’d“c”dÖû§çìù%<Yü0‡U…U‡U‡}Á|ÂÀF÷†PFû†~U|U}Uˆ‡Á„ÀˆÂVø08 Ü÷4ÕXæÐЯµÁŽ ÷b÷Qû ¹:÷!ÀØ›·yÇ~if‚]-n¹â÷{÷ƒÎûƒ÷G€ûû †M÷ ÷"~|]h}V„hü.ûOZ< Îî ¸Í –  ï ±V ef ÎG ’6Î Ö¦ îf ÜQæß ÷† ÊØ€ èÎ(Ê ‡ û6ß/÷ÇÅ®´³Ž ÷‚ÀûÐÎÇÁºÁÍ`°C[bqhm³j¤ž¤œ¦²¡tg_R\#<ye¨„¡÷ ”c֑ЦÅ ° ‹ „d÷ç  D½÷÷- Ü$÷q HG÷ ÏIÔ¨™™ŸŒØn†}}w¸jx¶Y]oö íf}Wi íß÷d÷÷÷Rûéèû{ø*÷c÷Ž-û¨û݈÷Ý7 ÷– ÷CÅ\Æ÷Æ[Åä÷} 1 d †Lè¯ Ø¢oŸx¥¥Ÿž§¨÷Ywxn¢=Ž„b¼ˆŸqv ¨š™žŒ­@n†}}w« kw¶Y ß÷<÷œ÷<øÑÊ€ Šß÷<÷œ÷øÑ÷ ¯ ¢ï°¨¤±²n0 ÷‰Äû‰ ÂÀ^ªN]_ypr¨eŸŸ©™£±œzqlqwT [ Ä  ýû™Ï D;1 `÷Q  ¶ ¨n´””“‡EfVMh÷”[å¹ÁÝï×e¸W`lk ye¨„¡Ü W„“cÖ÷( À÷K÷‡ûAÌ ÷‘ »ªºÈ‘] è­;[ `r ÷Àý)Ù ù÷À÷0 P¯Gá ÒÏ Ê÷ÅYo{t÷4 » j–ž ÷óùV3÷-÷x ÷ŒÄûŒH(‡ û\ú| ½Û¶ö¼÷AÅ÷Ç÷{ PÇà ÷ íÃ÷‰ 1 E } Ö øBÉüB ÷™ý÷0 Ê÷ç÷S л»âðulª»º¶dT«9û8Dû Ë®€ ¶÷)’ ´pž Ê1†1û(Ê ±o’t–¦¤°˜¿’ƒ´?„FpQ =ý)=ù)=ý)ûr÷5È÷0È÷À ù:÷÷™ý)÷0 ر¿Â’ û™ù)û0 ÜÛ÷¤Ý îÝ ÞÚ÷ë Òû#†÷4Eû4û#D÷# ²i÷-÷4Ûû-÷4dh÷û9øCùÆI v ÞÚ ‹Þ÷Êé÷>w 20û( ÷<æÝæ *† Ôøçw ñ ÷Uª èt ‘] ÷2÷ ¿²­û÷:÷÷9d®û-û4; üˆ½û¢øVm ÷Çà ª L V ÷* Vl øk÷€Í÷€ ÷ g~ Vo]L„  ÷9 °¨WÀ }qr Í÷Kü$Ùx=÷0 ÷lÓÛøLÛ÷løLÓüL=ýq û 9Fi]V·W±µÂ¦ÇÙ¿ ÷P†rcZZs³¶ û1LdQRº\¶´¿­Çé¸ Ž‚[ɦ÷Dø÷™ü÷˜‰ø û—ø‚‡û™ü‚kuµX]peW† ¶÷¾÷âÄ÷€ v÷©Ï÷ˆÎ o]L…À÷:  ì ½÷ïÞ÷ŸÞ i¥ž¤›¦²¡ug^R]#; ] ¨nµ“”Ž“‡FeVNhÊ0÷ µ ÷( Ö÷¶Ê÷¶ eV†‡H pÑ÷Úß÷©ÜµÎ Ó÷)Õ/û9û:A*û) D¿¶ ÷0÷áÊ÷ÅX ÷rüÛÙù)ûÀ ÷CÆ÷Å÷Ë ÷ßÃÅÔ ûÀù= ¾½ªè®V£Etp{lRa ùã û¾øˆq ã»[47PS?÷]ø¥ Ü V„ ûƒúÊdù: ÑÏL ÷0÷Pû0 ‹Ñ÷ÑѨw §ºÉ‘\ µaÖ÷0Ê „¢÷  L°Dä zt‚_„ ÷;÷_ üì ÷K ¢=„b¼‰Ÿ~qv ¿o¸nda{Oû& ‹÷°÷°÷°÷ Ùû™ù)÷!`ý)û™Ùx=ûŠQ÷Švø?Ò û\ú|‹÷À‹÷ÀÀ ä÷u÷û Ê”un’m*^M( 1 ÷rû\÷0 KâP ÷< ÙûÀ÷W í÷9íÕí r²´…_P Ö÷÷ «ø¬ »á÷àá Ïø ÏÖ÷G Çà ·o¤¸«™ÀêÉW û޽û ÷\m ª¢¡«ªt¡lltul ûafdugZl _„aÝ÷ ÷÷‹ 󯻆» €r„vù$w a ¢÷KVsûK ‘ЦÅ· Îø,ÚÔøUÒ ‹÷Í÷Í÷ ùX¶¾˜÷F÷ˆ ùex ûŽú|÷£Å÷£ Y Ë0÷ v÷ÉÓ÷§w ÷" ÷jw Ÿ”¥´¥ ÷(Z¼ ù)[ e̪z ‡ û5 Ü÷ 7ìû [¬m³³¬©» ÌÎÙ÷ÁÙ÷­ TPsZû^û“ øÑ÷ W÷÷L û,»÷ø¿÷ø» r  Ÿø?Ò ÷Àù)=üÛûr ü$xE }÷™ ‰h‰`Šh ù)÷ ~qp Ïùw X> gBUs‡5O_Qb†QS0f1dC*O+ 6&AQ]P<EgH]Z7jQ<]<]<’HEM3@1G ÿÿBBBBBUUUsssssssssssssssss5555555OOO ____________Qb†††††B†5QSSSSSSS0000000000000000-!0000000ddddddCCCCCCCO*****OOOOOOOOOOOOOOOOOOOOOOO &&&&&&&&AAAAe>QQQQQQQQQQQQQQQQQQQQQQPPPPP2<<<EEEEEEEEEEEEEEEEEHHHHHHH ]]ZZZZZZZZZZZZZ7jjQQ*QQQQQ<]]]]]]]ÿê<<<<<<<<<<<<<<<<< <<<<<<<’s’††LHHHHHHHXEEEEEEMMMMMMMMMMMMMMMMMMMMMMM11111111GGGG<]7^<]=?E<M.?63149<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*GbE9'8MFDCGbE9'8NFDCÛÅÛÅ ããm{õ‚ÑÙ_gÙgÅÓR`UUPPÛ—<ÐzâcxcccT[Hpÿû11Wh††U¡Ð­¬¬¬¯·¯­ìÕþô¡Ð­¬¬¬¯·¯­ìÕþô¡Ð­¬¬¬°·¯­ìÕþô¡Ð­¬¬¬¯·¯­ìÕþô§‰Ž§¬µ‰ Æ•¯¯Œ½Ä‚¯Ž¬‰ó¢¤Ÿ“RŸŒ’  š‰‰¯:UM5:q1`N/+m+T`l80&UUfUØUxkUUUoULLU'ÿüMLº>$F4u!!ÉŸw¦&&HH&&!!ÿçÿçÿúMb¨ÑÙõ۹먨ù±é¸ùž–±ªÏÊêÞ깩ëù¨¤ž›±°ª±êó–¥ììÏÏÊ¿¨¤ll÷ý#ê¥××Òêê®°¨¨¨¨¨¤¨¨¸¬¸¬¸¬©¨®²®²®²©§°¬çÿÙÿÙÞÞÞÞÞÿÙÿÙÿÙÿÙÞÞÿÙÿÙÿÙÿÙÞÞÞÞÞÞÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÞÿÙ···ÿÙÿÙÿÙ··ÿÙÿÙÿÙ··ÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÿÙÞÞÿÙÞÿÙÞ, ,, ¾5KLggnn~~¡£©©ÍÎææüü../055UW]]ll‚ƒšª­­ÃÄÈÈÍÍ××ÝÝø lDFLTlatn8ÿÿ ÿÿ  aaltÂaaltÊcaseÒcaseØccmpÞccmpìdnomúdnomfracfracnumrnumr onum&onum,ordn2ordn8salt>saltJsinfVsinf\ss01bss01hss02nss02tss03zss03€ss04†ss04Œsubs’subs˜supsžsups¦      þ82HB  08@HPZbjrz‚Š–ž¦®¶¾ÆÎÖÞæú°®ÌÖêòd*4NhfxŠ’Êäþüþ:NÜæ> áá á*á$$  6X $ Ý ßãçí Ýßãí  Ýßåóš&0:DNXblv€’œ¦°ºÄKÿgÿnã~ÿ©ÿÍÿüÿóÿ ãý.ÿ5ó]ÿló‚ÿÈýð<DEFGHIJKLMPQNO6789:;<=>?BC@Aƒ  UVWXYZ[\]^_`abcdefghijklmnopqz !"#&'$%X()*+,-./014523¦ ªÞØ­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃSr¸ ÄÅÆÇÈÉÊËs²ÿ£²\VWXYZ\]^_`abcdefghijklmn®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃopÅÆÇÈÉÊËqSrsÞàâäæèêìîðòôöþ  °&,2>JVbnz†’žª´¾ÈU­[ÄD6(×E7)ØF8*ÙG9+ÚH:,ÛI;-ÜJ< .ÝK=!/ÞL>"0ßM?#1àPB&4QC'5N@$2OA%3„/ÿî-!/6789:;<=>?@ABCÞàâäæèêìîðòôöþ  "Y“ Gç$ÿß.áçë  "$'*/0Ä6LNx1z–\˜æyÝßáãåçéëíïñóõýÿ   ÍÖáâ ÿ DM6C†ˆDQ6?!"5 ¡¡ÍÖÝßáãåçéëíïñóõýÿ   ö÷ çüRRUU""[[v\ !#$%&'()*+,-./012345çèéêëìíîïðñòóôõö÷øùúûü ¡ö÷ RU[vÝßáãåçéëíïñóõýÿ   ""ÍÖáâ ÿ-.DEFGHIJKLMNOPQÝßáãåçéëíïñóõýÿ    8’DFLTlatnÿÿÿÿmark&mark6mkmkFmkmkLsizeRsizeVRN"*2:BDNLZ8¢dšþÔý¨šý¨œ² ê7ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤žžž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž_ÆÌÒØÞäÞØÆêêðÆöÆüØØØÆÆü &,28>DJJPV\bÀhntz€hÀÀ†ŒÆ’ÞÆ˜ØÆØÆž2¤¤ÀªÀÀ€€ ¤°>2¶¼ÀÂÈ€ÎÔhÀtÚ>>>àæ,ü,¦#¦[¦+¦K¦S¦A¦¾¦2¦;¦-®1¦7¦-¦:üŠÚWüÁÚ;ü¤ä3ü—Ú\¶²ÚÚ<ü>ü-üVü/üƒ'ü0ü@üö˜¦=¦\ü?ü8üü ü2ü%ü‘üëüü,Ï,ÂRZ  &,,[9V:x"0 "®®®®®K˜ž¤ª°¶¼Â˜ÈÎÔ˜˜˜Úàæ˜Â˜ìò˜øì˜þ "(¼.4:˜@FLæRXȘ˜^d˜X"˜Xjžjžpv||‚ˆÈ˜^Žž”,ÿê4ÿê[ÿê"ÿêLÿê¼ÿêOÿê+ÿê-ÿêRÿêZÿê•ÿê@ÿê6ÿê/ÿê'ÿê7ÿêVÿê2ÿê;ÿê#ÿê)ÿ:ÿê\ÿêìÿsÿê5ÿê9ÿêˆÿ&Áÿ&Èÿê{ÿêAÿê ÿ=ÿêCÿê ÿêËÿ&*ÿêvÿêmÿêþÿêÌÿ&ÀÆ ,椆÷šæž¦ $$ &,28>D>JPV,ï©+•] ¢P ê7æìæìæìæìæìæìæìæìæìæìæìæìæìæææìæìæìæìæìæìæìæìæìæìæìæìæìæ,ü,¦,Ü,·†ˆÝÝø65KL4gg6~~7¡£8©©;ÍÎ<ææ>üü?@/0AUWC]]F‚ƒGšªI­­ZÃÄ[ÍÍ]××^ýþ./úûü 5££3ÎÎ4ææ5006WW7ƒƒ8šš9œª:­­IÄÄJù*ÿ   $*0 ¡­áéëideoromnDFLTlatn ÿVŠ‚0‚~ *†H†÷  ‚o0‚k1 0 +0a +‚7 S0Q0, +‚7¢€<<<Obsolete>>>0!0 +$ ¨­Já²Þù áÅîÕý¾ ‚á0‚<0‚¥pºäÙ)4¶8Ê{̺¿0  *†H†÷ 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 960129000000Z 280801235959Z0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0Ÿ0  *†H†÷ 0‰É\YžòŠ´ß@ÛãW¯jE@„ Ñ3ÙÙÏîX%÷*¨Dªìxž“¹šª#}Ö¬…¢cEÇr'ÌôLÆuqÒ9ïOBðuß ÆŽ o˜ø¬#_p)6¤É†ç±š ËS¥…ç=¾}šþ$E3Üví¢qdLe.hE§0  *†H†÷ »L+Ï,&Oݦûü „Œó(g’/|¶Åúßð蕼l,¨QÌsؤÀSðNÖ&ÀvW’^!ñѱÿçÐ!XÍiãDœD9‰\ÜœV™í¢EL令=ð2ñÎøèÉQŒæbŸæŸÀ}·rœÉ6:kŸN¨ÿd d0‚Ÿ0‚‡ y¢¥…ùÑBÙ¸>ö¶í0  *†H†÷ 0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0 120501000000Z 121231235959Z0b1 0 UUS10U Symantec Corporation1402U+Symantec Time Stamping Services Signer - G30Ÿ0  *†H†÷ 0‰©YftÚ=Š}zØüõ€D{þGjUNPG ìÓíÎö8÷Oi¹±ð¶x‚ Œvgâ­· ¥ŠöüfÓü-̵sY{‰Ü3nfZ^R7´bÑ’Y5‹E¬Y²M$¢˜”hBrŸ:hâk‹ž"-ô˜N𯝳䠫<(¿#á×r¤òSg®w¯Q£ã0à0 Uÿ003U,0*0( & $†"http://crl.verisign.com/tss-ca.crl0U%ÿ 0 +04+(0&0$+0†http://ocsp.verisign.com0Uÿ€0U0¤010 UTSA1-30U´·ñ‰I&`çeês®ÜÓ8Í¿W’o0  *†H†÷ ‚˜ª'·xµµÉrm·ßÀ˜¦5ĈÉÒömñKûÕù-™žÑ盋á?½9€ fͼ\˜T¦”ºÑN‹«õoeÌg ¢€|RèÖkzÆìȬB|,§=fÜíý”sòr˜“±ÖïŽê¬ô–Q Ðß1RO^¯}§JuæNÎ+Ÿ)+çÏ]Ÿ~n'{#­b)f¯’è,νœÜÍ'ÑxìŸ1Éñæ"ÛijGCš_ ä^õî|ñ}«bõM ÞÐ"V¨•Í®ˆv®îº óäMÙ ûh ®;³‡Á»£Û0Ø04+(0&0$+0†http://ocsp.verisign.com0Uÿ0ÿ0AU:0806 4 2†0http://crl.verisign.com/ThawteTimestampingCA.crl0U% 0 +0Uÿ0$U0¤010U TSA2048-1-530  *†H†÷ JkùêXÂD1‰y™+–¿‚¬ÖLͰŠXnß)£^ÈÊ“çR ïG'/8°äÉ“NšÔ"b÷?7!Op1€ñ‹8‡³èè—þÏU–N$Ò©'Nz®·aAó*ÎçÉÙ^Ý»+…>µµÙáWÿ¾´Å~õÏ žð—þ+Ó;R8'÷?J0‚0‚ù  ;x`–Ú7»¤Q”FÈ–x0  *†H†÷ 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 061108000000Z 211107235959Z0Ê1 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1:08U 1(c) 2006 VeriSign, Inc. - For authorized use only1E0CU0<U 5Digital ID Class 3 - Microsoft Software Validation v21#0!UAdobe Systems Incorporated0‚"0  *†H†÷ ‚0‚ ‚·ÂS](¢aÓÔq¾<9>ZÀºíâ”ÃÇ8ƒÁë-kJ¸Š'ÿÊÞêK¡w’dOöòÓö¾™•³cƲ­á¦ pçÖ5RÂ!Š–2, bŠÖדçqõ Ñ®q`UtRЮâU•à\é7¦K\‘ÿÔ’ºäbŒjsÝP«¨VžJ^r¿ÍéÀÓ’›Œ¹k ¹'O¸Q›^iÓîgÕ(÷ä ë|ØZÈxkõvê2Cßr?šriTÒ ûžÚéÂà©CÔ’tJ·Äã0K­±@XW`Öƒó‹ëÀ½ÕCOe?r^­Úÿq²)žœ xˆçíKœ’¤Í¡ýž­£‚{0‚w0 U00Uÿ€0@U90705 3 1†/http://csc3-2010-crl.verisign.com/CSC3-2010.crl0DU =0;09 `†H†øE0*0(+https://www.verisign.com/cps0U% 0 +0q+e0c0$+0†http://ocsp.verisign.com0;+0†/http://csc3-2010-aia.verisign.com/CSC3-2010.cer0U#0€Ï™©ê{&ôKÉŽ×ð&ïãÒ§0 `†H†øB0 +‚70ÿ0  *†H†÷ ‚ªha½¯ÝRÄŽA¥}oˆž¾þ¹Ë·kíÂ8eb1DÛ›­93¿…”ÿlùº”” ›[çO-Yàã¢ÝcÖ¼å+t{-¤t6Û^’™›ø{¹¿Ý8Læ,„úN*Ú™Õô•3íd›HD"4_cqÛhÌÑQÿ8ßÚè³Áê%¯³ Ê0“Ê ~Ý;€Ø#¢ Õ%Ü ÚÛÝ2µ›úÑRùÙš*>Œ±—A.©/oI Ül·+ÎØ/ÜÌ}öiß”ÉÅv¥â÷4+vÓô.>âêjAòßí/Üî®öl @@ñO!Šƒƒ¤¶ŽgsÔ`ÜÄÚ‹K(5¶Áá0‚ 0‚ò Råª%Vü†í–ÉÔK3Ç0  *†H†÷ 0Ê1 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1:08U 1(c) 2006 VeriSign, Inc. - For authorized use only1E0CUß–åÅä”qÖUÇ&J@<µ¡&© §m€Ž%{Ï¿?ë/–úå‡wƵV²z;T0Sßb4ÿÑôZ“(…åLN~[ý¤“™ßÍï¤uïïöGçørØ.4¦´§L~½»O =Wñ0Ö¦6ŽÖ€v×.¥Í~4-‰£‚þ0‚ú0Uÿ0ÿ0pU i0g0e `†H†øE0V0(+https://www.verisign.com/cps0*+0https://www.verisign.com/rpa0Uÿ0m+ a0_¡] [0Y0W0U image/gif0!00+åÓ†¬ŽkÃÏ€jÔH,{.0%#http://logo.verisign.com/vslogo.gif04U-0+0) ' %†#http://crl.verisign.com/pca3-g5.crl04+(0&0$+0†http://ocsp.verisign.com0U%0++0(U!0¤010UVeriSignMPKI-2-80UÏ™©ê{&ôKÉŽ×ð&ïãÒ§0U#0€Óe§ÂÝì»ð0 óC9ú¯3130  *†H†÷ ‚V"æ4¤ÄaËH¹­V¨dÙŒ‘Ä»Ì å­z "ßG8J-lÑq|ìp©±ðOä Sú^þt˜I$…&‘G°LcŒ»¡4ÔÆEè …&sЩŒdmÜq’æE`YQ9üXkþÔ¤íyk Arç7" ¾#é?Dšéa̱\ü=Ò¬B=e6Ô´=@(›Ï#&ÌK Ë]ŒL4Ê<Øå7Öo¥ ½4ë&Ù® çÅš÷¡´!‘3o†èX»%|tXþuc?Î1|›–žÅSv„[œ­‘ú¬í“º]È!S‚Sc¯ P‡=TR–Š,œ=’š.Ç“¥H‘Ó1‚0‚ 0É0´1 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)101.0,U%VeriSign Class 3 Code Signing 2010 CAt%S­ä¯Ñ¯˜MIíh0 + ˜0 +‚7(10 *†H†÷  1  +‚70 +‚7 10  +‚70" +‚7 10¡€www.adobe.com 0# *†H†÷  1nç/­¢×–î7WOìþZ³<ûl0  *†H†÷ ‚+ÖÜ«FÇ^ÃKøƒ!ùdø0a™ö9Ãäéñòàg¯[,OA ‹3iÆTš_žo°¬£ße&ä'Ó’ƒ](•_¨'d OÙŠzÈ[|q··Îã:ƒàà¥CS1— Çe^Œ¡¤Ž¼ƒ(ÕNƒ­êSóþ½¸Xqþêl4’Õ‚‰UP;»wÍ4À'DÍ„+îååG òt°©’'¼ð•]îuÿ´?sªTåTébb®[&ÁÄãâcCÀmZ\ó\Ãá-qNeáçºJ¸gpܼ ËT½ŠÛ° ¸H|\Þk„à7,D˜Q G/¢È7jqIð¡‚0‚{ *†H†÷  1‚l0‚h0g0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CAy¢¥…ùÑBÙ¸>ö¶í0 + ]0 *†H†÷  1  *†H†÷ 0 *†H†÷  1 121205232853Z0# *†H†÷  1î,±ôju{/¯åõ¹ù)js0  *†H†÷ €AlFL½“aöëbÕtÙþÔˆÏ9ÝXS4ÅH™[¯á¶gÃnÍÁ^ R;x•Ý‘Ùñ1¾Kö@¿rp÷šØª‰j¡²/ßƒŠ²Ü²^€lbƒñzÛ‘¼gxÚ³Œ‰pi)ëÜç4sw/ÊZË”ñ^8§U‚Èd‚r;EHL¤k>›iep-3.7/iep/resources/fonts/DejaVuSansMono-Oblique.ttf0000664000175000017500000073046412271043444023264 0ustar almaralmar00000000000000 FFTMYôRÜ,GDEF0h%öHDGPOSTµÂŒÈGSUBEb7TþOS/2ì¯äíTVcmap­Óy¬Îcvt ÁÕç&|¼fpgmç”ñÄ8‹gaspÄ glyf•ÈùÐÜ headõÅìÜ6hhea B/í$hmtxAz6í8„loca^d¼(ümaxpC*¸ nameØn.:*Ø!fpost½ŸàYL@`prep8ÿ‰¬DîÆÔ.™É!É!<`aabcdqr ! " # $ = >Lcyrllao latn*ÿÿÿÿÿÿmarkÈ¾Ø ntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬cI cI aG /þu ^D 0þv `F dJ `F 1þw dJ bH cI ;jS9 ;jbI ;jfM ;iaG aG dJ G- `G aG Z@ D^aadq>DJPV\bhntz€†Œ’®t|w|w|w|wÑÑ€t’`…~Œ~€`Ñ~Ž` €¦cyrllao &latn0SRB ÿÿÿÿ4ISM I K _ q Ž œ µ ¹!!!!!!!"!$!&!+!.!_" """" "-"="i"‹"’"¥"Æ"Í"é"ï####!#(#+#5#>#D#I#M#P#T#\#`#e#i#p#z#}#ƒ#‹#•#®#Ï$#&&<&G&g&o'Æ'à'é)ë)û*/+,d,p,w,z,..%..§§§'§Ž§‘öÅûÿýÿÿ  Íßæôøü!$CLP»ÆÌÐÖàîóCXatz~„ŒŽ£Ððbr¢ªºÀÇËÏ1Ya‰„‡Š”™¡¥§ª­»ÈÐ,0bw{…›¹0Th|›Ÿ¬°¶¼ÆÊØàèîø HPY[]_€¶ÆÖÝòö   & / 9 < E K _ p t   ¸!!! !!!!"!$!&!*!.!S!"""""'"4"A"m""•"Å"Í"Ú"ï#####%#+#5#7#A#G#K#P#R#W#^#c#h#k#s#}#€#ˆ#•#›#Î$#%&8&?&`&i'Å'à'è)ë)ú*/+,d,m,u,y,|.."..§§§"§‰§öÅûÿùÿÿÿãÿÂÿ¹ÿ¸ÿ¶ÿ²ÿ±ÿ¯ÿ®ÿ¬ÿ«ÿ¥ÿ£ÿ¢ÿžÿœÿšÿ˜ÿ—ÿ“ÿÿƒÿ€ÿlÿdÿRÿNÿKÿFÿEÿDÿCÿBÿ4ÿ2ÿ$ÿÿþþþøþôþòþðþîþØþÐþ½þ»þºþ¹õÃõÂõÀõ¿õ½õ·õ¶õµõ´õ³õ±õ°õ¯õ¤ó¢çç˜çŽççˆç|ç{çuçdçbçYçDçCçæÿæýæ÷æóæñæðæíæãæáæÝæÛæÓæÑæÇæÅæÃæÁæ¿æ¹æ·æµæ³æ±æ°æ¯æ®æ­æ«æªæ©æ§æ¦æ¤æ£æ¢ææœæšæ’æ‘ææŠæ‰ævæfædæcæ`æ^æææ æææææåÿåüåúåÖå¦å¥å¤å£å¢åœå–å“ååå‹ålåfåZåUåEåDåBå@å=å;å2å1å/å-å,å*å)å'å&å$å"å!åååååå äêä—ã»ã„ã‚ãjãiâáûáôßóßåß²ÞÐ݇ÝÝ{ÝzÝyÛáÛØÛÐb÷bóbñbb\! +   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾¼rdei¾x¡pk#vjóˆšÀs÷øgw¨µ´Çl|쨺cn¼TÛ¬m}Àb‚…—°±¸¹´µ¹ …Á: ÊË " #½y¶º„ŒƒŠ‘Ž•–”œ›ódtqpqrzuse##¸Ë¸ª¸¸‡¾‰ºË¦ü¸ÓǸX!œÓ¸¸#/Ù¨¸{{¸R¤fÍÑ͇‡“¤oƒÝ´‹˜Z´ºÅ!þ˸¸ô7öª={fššƒÕsÕ þá+¤´œbÕ˜‡ÕÕðb¤Õ#Ӹ˦¼3N{T…\q#wé!`jÏÕ#fy```{œ¸w`ªéø{Å{´RNNÑfœœfœfœÍúƒ‘þHF?{L˜¢'5oojo{ªª-–{öª{=“föoD7fî…´}s¶, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX °ÝEDY!-,°%E`D-,KSX°%°%EDY!!-,ED-ÿÿhþ–h¤@ ÛÛO/ÄÔì1ÔìÔì0!%!!hüsüåþ–øòr)s`Õ Y@.   :TSQ ÔäôÄÀ991/äüì0KSXíííí9Y"3 #3#–ÊX¢2sË2ÊÕýqþ›eý¸þRªÕ@UQÔìÜì1ô<ì20###®Ñ®ÕýÕ+ýÕ+ÿúѾP@5 X X    ÔÌ91/<Ä2Ô<<ì22Ô<<ì220#3 33!!!!###!7!!7! öSõiöiŸh'ÿT'þþh hõi iÿ'Tþþ'h…þ²‡þaŸþašþ²™þbžþbž™NšŸþÓ; 0l@@()%/0%W$ZXWZX!0 !()/ %$, 1ÔìÔìÀÀ9991/Ä2ÄìôìîÆöî9999902654&'#.'7.54$?3.'+uVŸ^®Pw—Te;_À_#Q½hZ°Ÿ Ñ0d/UœH AšYQ®²þîØ LþE‘tNUÍš‰cEJû¶-.+´73#'#"&547.54632.#"326773>J ¨zk{Ç;_ÈhÃëǼöÏA|9#*zLq‰,_‡‹¬A’G‹ýÓBÍ‹¨þófÝqGGÖ¯¨!g4l7®Ó·&&s^/ƒ¸IÅuw 96ª¾Õ·QÔì1ôÄ0#¾®ÕýÕ+uþò @hg   ÔüÄ9991üì0 #&5ìï;< OJüþÓýþÒ’þÒ¢½:Ž/W–þò3 @hg  ÔÄì9991üì04'3–ìï;< NKþþüþò,c/’.¢¼þÅŽþÑý©þë¦J+ðN@,  i i a    Ô<ì2Ü<ì2991ôÔ<ì2Äì2990 %#'-73%+þšf9þ°sþ°9fþš9PsPßÂÃbËþ‡yËbÃÂcËyþ‡ËXqy“ '@m lm    Ô<ìü<ì1Ô<ìü<ì0!!#!5!¼½þC¨þD¼“þDªþD¼ª¼Ëþáœ/5@:onÔÄäÀ1üì0KSXíí9Y"3# ü)þñ™¬/Ïþ/ßZƒ·ÔÄ991ÔÌ0!!P !ýöƒ¤bš//@:nÔäÀ91/ì0KSXííY"3#žü<ü/þÑÿB#Õ@ :QÔÄìÀ1ôÄ0KSXY"3T¿üª¾“ùmbÿãoð /Â@ c'cae0$ -0ÔìÄÔìÆ1äôìîÔÆ0@’////////// / / OOOOOOOOOO O O  ŸŸŸŸŸŸŸŸŸŸ Ÿ Ÿ 0////////// / / ÀÀÀÀÀÀÀÀÀÀ À À ]]4632#"&#"&47>32267654&#"áP77ON87PŽsTTߔürUUݓþý‹P‰/E]bkPŠ0F\gî7PP78NOE¿þEŠˆöÀ·†öûg`Œ°š‹f_‹þ_½Š{ÓÕ T@* :ccQc   ÔÔÄÀ99991/ì2ôìÔì0KSXíí2Y"7!7%3!!œ9Ýþ #`Ëþþ5!üɪuL¸JúÕªfð\@ÔÔì99991@ q cac/ì2ôìôÄ9990@í9í%!!7754&#"7>32 ¬ ün!7'€r\Ô~)pÑa¹äGR!¬´ªªª#×Ë]jCDÌ12›`­g*ž›ÿîÿãNð(J@+c W q cW qc#ae) )  & )ÔÔìÔì991Ääôìôìîöîî90!"&'732654&+732654&#"7>32úr€þ±þèlÍ^&[¾b¶àŠ™ šžº{RÂq%{ÂT¼Ø³¤~êþä%%É45»•uy¦–|d_((º!°˜™Ï?Õ s@>      : cQ     ÔÜÄÀ991/äÔ<ì290KSXííííííY" !33##!7JýÙœé¾ÆÇFÆEý†$ýÍü3¤þœd¿ÿãTÕ j@8  : cWbccQe!   !ÔÔìÀ9991ÄäôìîöîþÄ90KSXíí9Y"!!>32#"&'732654&#"`ô!ýÅH/Y,¼æi`Xãl»H)T°^ºô¡ŽO¥KÕªþ‘ã¹|êVPP!Í32ꮀ’(&\ÿãhð *;@ ccr W bc(ae+ "+ÔìÔìÀÀ91äôìôìõÆîî04&#"32.#">32#"&5476$32\tk’Æzk $:ˆKÁû7D»q²ÁPDNÇzËÝNDb1ÏKŽRqzü¾y‰ 'º%'þáþåfiǸwîSa`êצf’××®¼Õ5@:cQÔÄÌ91/ôì0KSXííY"!#!¨üÛÙ ý<Õ^ú‰+)ÿãfð #/?@" c* c$cae*t0 '-!0ÔÄìÔìÔìî991ìäôìîî9904&#"326.5432#"&546"32654&5„vŽ·†p”µþykl(ֲߠ~€þÐíÏíÑɤuf{¨xÍt„Åši~¸â&‘i¶¶ã)¦…Ñþï̳¦ì`¡|cr®}[l?ÿãLð *3@cr c( ca(e+"+ÔìÔì91äôìîÖÆõÆî032654&#"732#"&5467>32#"&Jtk’ÆxkÄþõ#:ˆKÁû7D»q²ÁPCNÈzËßNDbþÎÐKŒqzü¾zˆþôûÙº%'fiȹvíS`aëÖ¦þš’ÖØX#%O@):nunÔäôäÀ91/ìôì0KSXííííY"3#3#'ü<ûYü;ü%þÑþ9þÑËþá#' Z@.   :nonu   ÔÄäÔäÀ991äüìî0KSXíí9ííY"3#3#“ü)þþ™Ÿ½ü<û/ÏþÇþÑXyw!@wvüì291ôì90 5yü®Rûß!ÁþÀþ÷¢¦¢X`y¢@ llÔ<Ä21ÔìÔì0!!!!X!ûß!ûß ¬BªXyw!@wvü<ì91ôì9055X!ûßRÁ¶þ^¦þ^·=F`ð!@H !!!:c caS  ! !"ÄÔäÖî9991/îöþÔîÅ9990KSXííí9íY"#7>?>54&#"7>323#`¾MqkUGpcOÅi$mÊe™Áa‚iT<öË1Í‘š[‚^[Ho8JRGB¼98£~^¡lVFfVþòþÿãþþu @o@5.1*@ xx -*x1!x1:A@= -. ='=4AÔÄüÄîî9991ÔÄüÄþÄÕÄîî999990@ ””––]2654&#"#7#"&54327>54&#"3267# 476$32Å}®eX{¬c´3ŽQƒ¦¶T’‚Žþù_TXá9xC-BŽSþàþ¥|n&Ÿ½à Ó˜`nÑ—ap}o?D¸‘Ü9H=+#4~Œœ}þÕþÿþÚƒ{=É‘ƒŽÑ°M/ÿ–Õ v@B      :cyQ    ÔÄ91/<äôì90KSXííííííííY" !3#!#ßþ”®¢ö¦É#ýø¸Ù-üú®ú+…þ{Õ u@@       :c cQc z   !ÔäÔìÔì9991/ììôìî90KSXí9í9ííY"32654&# 32654&#%!2)mkø¸Ãˆ{Xô—­o}þb»Ëиœ}…þÁþÝþ<ÉýÝ®¤kffþ>‘^T¦ŸššÏž|êþüsÿã¼ð2@|{c|{c ae  ÔÄì9991äôìôìîöî0%#"5476$32.#"3267°T«[æýŒrk¥PžK)@ŽP_¢Ghœ“UµX5)) ðܰ‰‚|*(Ï?>QS{þ€Á­¸@=ÿøjÕ P@(   : c Qc   ÔäÔì99991/ìôì0KSXí9í9Y"%267654&+ )D¹àD6E¤ÁrâgTGhþÉþ÷þÑ#¦}s?…°˜ûw/øü¢þ¨…¿£Õ5ÍÕ X@0    :ccQcz   ÔäÄ991/ììôìî0KSXííííY"!!!!!!Xu!ýTV ýrh¾!üwÕªþFªýãª\îÕ S@,    :ccQz  ÔäÄ991/ìôìî0KSXííííY"!!!!#o!ý\Vd ý›‹ËÕªþHªý7Nÿã˜ð)a@3&))#$"%):%&"&c("c|{cae*('&%)*ÔìÔÄ9991äôìôìþÔî990KSXí9íY"%#"5467>76$32.#"3267#7!ÉWÎuèù! #^8k¦PŸM)AQb¬D,N"#ž‘Dl%LÙš`>? ùZËou½C‚|*(Ï?>SQ4œarÈQ«º%#‰¦ÿøÙÕ {@B     :czQ   ÔäÔä9991/<ä2üì0KSXííííííííY"3!3#!#Êv)vËþÝÊ‹ýÕ‰ËÕýœdú+Çý99˜Õ ?@"  : cQc   ÔÄ91/ì2ôì20KSXííY"!!!!7!!Z>!þÆß:!üÂ!9àþÆÕªûªªÿçÿãNÕU@.  : {cc Qe  ÔÌ991äôìîöÆ990KSXí9íY"'73267!7!#"&-H¸gŽ(¤þƒ!HÅ8ðîaÈ=ìOS’ÎDªüþßã.ÿøJÕ j@;      :}   ÔäÌ991/<ì290KSXííííííY"33 ##ÊæþýA¬Ûþ˜ÁpËÕýy‡ý•ü–å¨ýÃN Õ8@:cQÔäÄ9991/äì0KSXííY"3!!qÊþþÑ!üeÕúÕªÿÅ Õ ´@D     : }   ÔäÜä99991/<ì2Ä90KSXííííÉÉÉÉY"²]@&  ]]!!# ##å nžþݺþNsÿºÕý ôú+/üåúÑÿú×Õ …@<  :}  ÔäÔä9991/<ì2990KSXííííííY"²]@  )]!3!#ïÃþÝÿþøðÂÕû3Íú+Íû3Rÿãð)!@c c'ae**ÔìÔì1äôìî0%267654&#"#"&47>7>32öU/J\inUŽ/L\i÷-+C'XÚ‘ÉÂ++C'XÚ‘ÊÇf_‘œ¾Ž‡f_“þh¾ˆunþþˆ\’;yöoÿˆ\’;yõ3´Õh@6    :cc Q   ÔäÔì99991/ôìÔì0KSXí9í9í9íY"32654&#%!2!##mê¥Å|‚þm¸ÎØþÀþèéuË/ýÏ¿Ÿlg¦¸®ùþâý¨Rþòð-3@c%c ae.+"+.ÔìÔì991Ääôìî990#"&47>7>32267654&#"ø ×Å++C'XÚ‘ÊÃ@%6ŒOšš¼U/J\inUŽ/L\iîoÿˆ\’;yõÿSÅot¬C_ˆ!¼\•f_‘œ¾Ž‡f_“þh¾ˆ Õ™@R       :c c Q      ÔäÔì9999991/<ôìÔì9990KSXí9í9íííí9Y"#.+#!232654&#þHW6yÉj,mnÀ{Ë! ÏãÏþ)fÛ£Ã~ˆÁj±þhyœbý‰Õ³£·ðWýpiÿã{ð'³@:    : |qc|qc%ae(  "(ÔìÔìÀÀ99991äôìôìîöî90KSXí9í9Y"²8]@<'''))))777  (((%%%%88VVVV]].#"!"&'732654&/.54!2{'Q®]¥Ðby£—þ´þáhÉd)bÉp¥ÎX…e¸“J Pµ¢Í;<¤GX('2§ëþí--ÑEB°‡RZ)!:“yÝ( 5Õ@@:cQÔôÔÄ99991/ôì20KSXííY"!!#!Át!þ+ÿÌþ+ÕªúÕ+PÿãÏÕ~@K   : ceQÔìÀÀ991ä2ôì90KSXíí9í9íY"33267>73#"&546s²Ë³mnY|--²Ë²*_NG¶jÀÏ=˜üh š;\\9>—‰˜ühÛÍ?8;´¦%~Ç+ÕJ@':}ÔÄ91/ì290KSXííííY"%3!3þV×ý1þþ“ƾú+ÕR`Õ ç@J        : }    ÔÄ91/<ü<Ä90KSXííííííííY"² ]@\  ;u Ÿ Ÿ      )%& 86736 FFCE ZVTU kfch e zvvy u „‰ ƒ “™ ” %]]333##‘¿ZIÓyÆþÂþ¼ÕûF üÞ¼ú+füšÿ9Õ ~@H      : }    ÔÌ91/<ì290KSXííííííííY"33 ##òÈà¸çý¬DÉþþç‘Õýìý1üúdýœÃDÕf@5:} ÔÄÄÄ9991/ì290KSXííííííY"33#ÃÊìñÚý…σÕýu‹üÉýbžÿúúÕ 9@:cQc   ÔÄ91/ìôì0KSXííY"!!!7!1Éü-"ü Ðý)Õšûoªš‘þòG@":~~gÔÄÔÔÄÆ991üìôì0KSXííY"!#3!m§ðþÕðþVùüdÿBÕÕ0@:QÔÄÀ91ôÄ0KSXííY"#3ժǪ¾““þò C@ :~~gÔÄÔÔÔÄ991üìôì0KSXííY" !73#7 þ›þXð+ðøÞH¨‰Õ@ QÔÌ91ôÌ290 # #ÁȲþ‘þ’²ÈÕýÓ‹þu-þÑþmµ€/Ì1Ôì0!5Ñû/þmPPÅîPf2@ ‚ÔÌ91ôì0K° TK°T[X½ÿÀ@878Y#‹ÅüfþˆxHÿã?{ .ð@a! "   : % ‰ ‡&W%ˆ"‡)†e,% &,/ÔìÔì99991/Ääôüôìîî99990KSXíí9í9í9í9í9Y"² ']@65$0%0&5'         ¥   ¦¦¦¦¦¦ ¦ ¨¦¦¯' ]]"326?#7#"&54$!37>54&#"7>32´wt+DRgX”×&Ç}¸ HÄn™·5ö ~uVÇo#lÂYºÏ 3{IScÔ¹)Lý¦^e§ŠÄë= U[33´''¤‘ h;ÿãT%Ž@L$#  $#"$# !#$#$#%$$#:! ‡‡e†$‹""#%!#$ $#&ÔäÔì999991/ìäôìî990KSXíí9í9íí9í9Y"%267>54&#">32#"&'#3Tˆ.19eeS‰30:k>¤f¤¶RHLÛ|b…"¹/¹ZV^èl€€\XVéo{…RTVϺ‘þàlsVTœÿãq{4@WZWZ‡‡ †e   ÔÄì9991äôìþôîõî0%#"&547>32.#"3267¬I§Zàæk[]ß…Y¦O%BŒUnª<8?‰ˆ`±S3')áÜ•bcb++¶:6YYRÓh‘>?wÿãå%Ž@L  $%#: ‡# ‡e#†‹ &ÔìÔä999991/ìäôìî990KSXí9ííí9í9í9Y""3267>54&3#7#"&547>32®X†.16feU‰018mªs¸þѸA¥d£µPEKË|a’ßWWZås€€ZXWçrx†CùìTVÒ¼!lvxWbÿãf} &\@"‰ W&Y#‡ Œ‡† e'  &  'ÔìÔì99991äôìäþôîî0@h hooooo ooooo ]]>54&#"#"&547>32!3267ª‚t{Ë,uiÈgßèxjSÉmºß üÙš“XÑr“#x†´˜ý¦++ßÖœ,mVZå¿"eN 4‹’98Ýj@9     : ‰‡‹      ÔÄä999991/ä2üìî2990KSXííííY"#"!!#!7!7>3ÝÐ_`þ¿¸¾þÕ)&Á»™Secü/ÑNÁ¥;þHy{.¦@[ ... ..-.)*+(,..: , W‡ ‡ ‡)† Ž-/-,. .#/ÔÄì9991ääÄôìîîÕî99990KSXí9íí9í9í9í9Y"%267>54&#"#"&'7326?#"&547>3273O….17pdšÓr5þõ÷RŸK%IP•¤%:®nš¶PHJÐoe˜"¸‘ZTZàjw…þ¯ÿw‡Iþññ¶,. ºuW[׸‹jp|aU—TH’@R    :  ‡†‹ ÔäÔì99991/<ìôì990KSXíí9í9ííí9Y"#67654&#"#3>323‡¸‡]W²!{¸/¸tK¯b‹š ¶ýJ· G'QWº¨ý‡ý¤ab‘‚ ^=ì h@7   : ‰‰     ÔäÔÔÄ99991/ìì2ôìî0KSXííííY"!!!7!!3#f×¾münm¡þâ¸-¸`ü/BCéþVÛ r@@  :  ‡‰Ž   ÔÄä91ìäôìîî990KSXí9íííY"!7!+73263#òÀþÃöÝ)ʵþé_nJ¸-¸åûŒÕÁœw«éZ´ {@:!!     :‹   ÔäÌ991/<ìä90KSXííííííY"²w]·v}p]]33 ##‰¿ª%ñýøuÕþͨX¿ü–¶þZýFF…þ?7Ñ]@/:‰‰    ÔÄÀÀÀ99999991/ìüì990KSXíí9Y";#"&5467!7!XY[ÓÏ­© ÓþÄô˜#6IHœƒP.óÿòš{+Ô@e    $%"%#""%:!  &$ ‡)†$" $"%  &!"% # %" ,ÔÄìÔäî.999999999991/<<æö<î299990KSXíííí9íí9Y"K° TX½,ÿÀ,,@878Y>32#>54&#"#>54&#"#3>32ì'}MVg¨}.3KT+}¨}/1JQ-}¨Ù¨,o@K\îDIm\6ˆkýw\u?8ßýaq=:wéý``323‡¸‡]W²!{¸Û¸ K¯b‹š ¶ýJ· G'QWº¨ý‡`¨ab‘‚ ^uÿãZ{ !@‡‡ †e  ÔìÔì1äôìî0"324&'2#"&547>¸¤Ûpp¤Ûp_ÄÍRJOâ“»ÊRKOßßþªþøVœÖΊþïmvvÛˇqtxÿþþVh{%@N%$#" ! :‡‡†eŽ&&# &äÔì.99991äääôìî990KSXíí9í9íí9í9Y"%#3>32#"&7267>54&#"%o¸-¸=¬d¢²OFKÌzdèQ†-18gfU‰018pýÉ RXлþànvzTHYU\çqZXXär{…bþV{{%s@=  :‡‡ †eŽ&# &ÔìÔä999991äääôìî990KSXíí9í9íY"%#"&547>3273#"3267>54&=¥f¤¸RHKÑ‚d‡#¸þÕ¸Uˆ.19efRŠ20:kTVÏ»Ž"pvxUUùö‰XV^èl€€[WUëp{ƒÙÃ{h@7       : c†    ÔäÌ991/äôìÔÄ990KSXíí9í9íY".#"#3>32 -wL¤ê&k¸Ù¸(CÕ‡Gs(y,,åÇýÛ`Ûx~%#sÿã5{)Ø@;  !    ! : !WZWZ‡‡'†e* ! $*ÔìÔìÀÀ99991äôìþõîõî90KSXí9í9Y"²]@`++''99IIDDYYYY)iiii)yyytty)šššš) ' ' //55GGv]].#"#"&'732654'&/.54$325#GM‰—ÝHutþàîQ°c%^±S…¨Ä CyàX¢9´-/f\b8{\µß##¾55w\c4!€gªÉ!Ãdžp@@  : ‰ ‰  ÄÀ9991/ìô<Äì2990KSXíí9ííY"!!;#"&5467!7!=¡þ^wNfÏß§ wþÕ+>žþÂý 3B5“ovD/`>}ÿåm`‘@Q     :  ‡e   ÔìÔä99991/ä2ôì990KSXíí9íí9í9íY"332673#7#"&546…¹‡]U°!{¹Ú¸!I²iƒ˜ ª¶ýJ%DOU¹©yû ¨ba“~']¶¾`J@'!!!!:ÔÌ91/ä290KSXííííY"33#¶²šöÆýšî`üD¼û \#` ñ@J      !!! ! :     ÔÌ91/<ô<Ä90KSXííííííííY"² ]@f   * J ‡ ’Ÿ Ÿ ¦¯ ¯    *$ :4 GCD ZZ T kfh c yxy u ƒ‰ € ™—“¨£¨   !]]333##\° ¢1j¿þ¥<þצ`üwBý¾‰û oý‘ÿº¸` ~@H!! ! !  !  !!!:    ÔÌ91/<ä290KSXííííííííY" ## 3¸þ>Åôþ_â4þÛÄÙq`ýÝýüþDT þu‹ÿÙþVÉ`~@F!  !!!!!:  ‡Ž   ÔÌ991ä2ôì9990KSXííííí9íY"+7326?33>g›6:•`”lQu<+Ù·¬ãÍhkµþíILJš]qTNü¢^Nm` 7@!!:‰‰  ÔÌ91/ìôì0KSXííY"!!!7!?.!üïuü»!ý¤`¨üÛ“¨%¸þ²˜4­@)(54.  $-5ÔÀÀÀÀ9991@: 5'- )'.)~‘)~'‘~g5üìüüüì99999990KSX@* -.-..-    í9í9í9í9Y#";#"&546?67654&+7326?>7>3˜Nˆ^3!xoIP/VaNH»£- bq>=‘~2H6/Š…O–ü ‘gK@&ô!3?9m{D%ì 2-UK“n–ô{'"þ¾·’Ôì1üÌ0#¾¬øÿòþ²Ñ4­@e -.-..-    :-5)  )'.)~‘'~)‘~g54.  5)('*(5Ä.ÀÀÀ991üìüüüì99999990KSXí9í9í9í9Y"7326?>7.546?>54&+732;#"#Nˆ^3!xpJP/UbMJ¼¢- bp>= /H6/Š„þ²O–ü ‘fLA&ó"3@9l{ D%ì 1-VJ“n–ô|Ž'"Xìy &@ ll üÄ1Ôü<Ôì2990#"'&'.#"5>32326yKOZq Mg3OIN’S5dJ t]F‰ ®;73 !;?®<6 7=…sÕ ^@/ :SQ ÔÄôäÀ99991/ôüÄ0KSXí9íííY"#73#3BË1ËþÝËX¢1×þú+eþ›{þÇ?˜$V@3WY WY‡ ‡† e %  "" %ÔìÀÀÀ91Ää2ô<Äìþôîõî990.'>7#.547>73? 1{HªA‹K!K‰?7f7·Ì¢F›V8f7<}þ¨¥åu5¬&,üš-(¬!þâòúD`16þá"ü+`þ·á‚™ÿøÍð@F  : ‰ Wq‡a c  ÔÔÔÔÄÀ9991/ì2ôìôìÔ<î2990KSXííí9íY".#"!!!!73#737$32Í%6y?‹š&+rþZ ü3!íZÆÇ/3ä<‚¶¸+-ªÉÙþ/ªªÑîôÍÃLB /}@B (-  * -'! ÈÉÈ) -0)$ !'$* EFE( $0ÔÄ2ìüÄ2ì9999999991ÔÄ2ìüÄ2ì99999999904&#"3267'#"&''7.5467'7>32d|[Z}}Z[|¦Z¦¨^¦.[20`0¤\¦¨^¦.[3.^ƒZ{{Z\}~t¦]¦1]02[-¦^§£Z¦3].2]-¦_¨/øÕ¢@]  : ° °  Q    ÔÄÀ9991/ä2Ô<ì2Ô<ì290KSXííííííííY"!#!7!7'!73333!! þwbÇbþs7þËöÍÏßËÓþlüþÈn ‰ ýô o#—o1ýh˜ýÏo—#þ¢¾˜@ ÏÏÔ<ì21ÔìÔì0##¾¬¬¬˜ý öüý ödÿ7-ç4Bv@E$%B<;5& %, X—˜X—˜2aC$%5 "<%&,/B;"%/"%8%/?%)CÔìÄÔìÔìîÀÀ999991Äôìôìîöî9990.#"#"&'732654/.5467.54632>54&/-!G‰:g„†V|U„r))óÇF™S!J=p…· J}P€v)%ðºG“þÄTXk“PRVU~®¤&(bHOZ ;VuEe´5#Z7Ä¡$'^Nb| 3UoI`¬?%P5•ÃûÆ3o75p^34p73`S´F-n@¦ÔÜÔÌ99991Ô<ì20@@@@@PPPP]K° TX½@ÿÀ878YK° TX½@ÿÀ878Y3#%3#ÛË'Ë®Ë'ËÊÊÊ}ÑN1ID@' £ £¥&>££¢>œ2šJ- /,(8 (8*D/æþÅþå2î1ôìüôìÔìþýîÖî0.#"3267#"&54632'"3267>54&'.'2#"&'.5467>`:o:u‡Œ‚8g24r=´Ïг=rÄjµKKMMKLµijµLLKLKKµkÚZZ\[[[Ú~}Ú[[[\ZZÚ/l•€„ŽhȬ­Ê¡JKK¸jh·KLLLLLµij¸KKJgZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZßÕ ð +/o@?  .¼,·#¹"¸·,º ¶·&a0 .- )/,0 #"6)60ÔìÔì9999991ôìôÄÄììôîîî9990"326?#7#"&546;47654&#"7>32!!Ù”‹I"3267>54&'.X“XP:&rk1=-7‚èffZJJDÚZZ\[[[Ú~}Ú[[[\ZZÚ~jµKKMMKLµijµLLKLKKµLbeG]C;º®P*þضTè6?>5VZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZgJKK¸jh·KLLLLLµij¸KKJ¸b+ö@ ÌÔÄ991Ôì0!!ÕVýªö”+u¦ð @• –•a#$# Ôìüì1ôìüì02#"&546"32654&hAu,-/º†‡´¸…OomOPqpð1.-rB„·´‡†ºoPPlnNOpXy“.@ ¬ l¬ l   Ô<ì2ü<ì21/ìÔ<ìü<ì07!!!!#!5!X!ûßd½þC¨þD¼ªª“þ·ªþ´LªI3œßðj@5ÐÐ: ÐÐ ÐÑaKÔÔì9999991ôäìÔìî99990KSXí9í9Y"!!?$54&#"7>32ì‹ýÓª!9J?3zST}5vˆþËrnŒýi3=%)o^‹ó×ð(H@*Ð Ð Ò ÐÐ ÒÐÑ#a)   KK& )ÔÔìÔì991ôäìôìÆîöîî90#"&'732654&+732654&#"7>32HNЯB;Ch2p‚UYHHavVV*e<Gz7yƒr\ [Gƒžy\NC@jP@33sd[Ot?îff/·‚ÔÌ1ôì0K° TK°T[X½ÿÀ@878Y3#‹ÛþuœfþˆÿÙþV‡`&§@\   &#$"% :%   ‡c"e Ž'&'  %'ÔäÀÀ9991ää2ô<ìì99999990KSXíí9í9íí9íY"3326733267#"&5#"&''-»ˆmf‰¤!º¨ (J!CO5‹b\| mþV ýH6[a¦ªü¢  ”UIRLSSýÍ}ÿ;uÕ g@0  :Q  ÔÔÄÔÄÀ99991Ä2ôÌ90KSXÉÉÉÉ9Y"!###.54ß–þ¸‹/¿þѤ±ÌZÕùfùáN¾¡ÑÇ/þ`/@:nÔäÀ91Ôì0KSXííY"3#þ;ü`þÏÿÿ¶þusª\œšß X@. JJ:Ð Ð ÑÐ`     ÔÄÀ991ôìäÔìî20KSXíí2Y"3?33!qÎuçî‰Íý× c)t'ý+nßÕ)ð!7@ ¼º·¶· a"  !"6 6"ÔìÔì99991ôìôìüì0"&5467>3232654&#"!!y˜®A8=¢Z—­@7=¡þûcWjœcWk›Ù¤ý\ºµW²CJN¶žX°BJNTixØ—ix×ýª{RZ# 3@ Å u   CCÔüÔì991ô<ì2990?777R+^ú#ƒT+^ú#ƒÓ °þ^Rþ^Ó °þ^Rÿÿ/þòm{'؉üV'{þþœ 0ÿÿ/þòy{'{þþœ& 0tšüVÿÿ/þòmŒ'؉üV'uÿœ 0ÿåªÕ!@J !!!:S WY ce Q"  ! ! "ÔìÔÔä9991äôüôìþÅ9990KSXííí9íY"33267#"&546?>7#73¿PojUGodOÄj%lËe˜Âb‚hT=öË1ËDš]ƒ]YHo8JRGB¼98£~^¡lVFfVþÿÿÿ–k&$ -3uÿÿÿ–Ek&$ +3uÿÿÿ–3m&$ .3uÿÿÿ–…^&$ ,3uÿÿÿ–LN&$ *3uÿ–m !”@Q   !! !!  !:  c “ [ y   " ""!"ÔÄÔìÔî99991/<ææÖîî9990KSXííííííííY"4&#"326!.54632#!#œY?@WW@?Y½þ”®É33Ÿsr¡PFšÉ#ýø¸ÙZ?YWA?XXîüú`#kEr¡¡rQ ú–…þ{ÿoÕ‰@P   :c ccQc§z  ÔÌ91/<ìììôì2îî0KSXííííííííY"!!!!!!#!!þ®V3!þÍjd!ýâKþ °¸¼\þœ5–ÕªþFªýãªþÕªüüÿÿsþu¼ð&&ªdÿÿ5Ík&( -`uÿÿ5Ík&( +`uÿÿ5Ím&( .`uÿÿ5ÍN&( *`uÿÿ9˜k&, -9uÿÿ9˜k&, +9uÿÿ9˜m&, .9uÿÿ9˜N&, *9uÿøjÕk@;  : ‰ cQc    ÔäÔì99991/Ä2ìôìî20KSXííííY"%267654&+!! )#73D¹àD6E¤Ár[ þökgTGhþÉþ÷þщ{¦}s?…°˜þ+•ýá/øü¢þ¨…¿£Å•{ÿÿÿú×^&1 ,/uÿÿRÿãk&2 -+uÿÿRÿãk&2 ++uÿÿRÿãm&2 .+uÿÿRÿã^&2 ,+uÿÿRÿãN&2 *+u–®;T .@     Ô<Ì91Ô<Ì290 7   –^þ¢t^_tþ¢\tþ£þ¤%\^uþ¢^uþ¢þ¤w^þ¢ÿº° 8o@;)9$863 '$*73(c$c3a$e9)9(*-7  '-6 8 -9ÔìÔìÀ999999991äôìîÀÀ99999990%3267654&' .#"#"&''7.547>327B^Bp¡=26ýyf[8q¡<2:$iSXðžQ‡6^cwhTXïŸMƒ6Tdå,2¤®‘'{#ý)u'+¤®”þÏl ¨<[ÄþZ”š—..…@ª:VÆ¥•™–++}@ÿÿPÿãÏk&8 -7uÿÿPÿãÏk&8 +7uÿÿPÿãÏm&8 .7uÿÿPÿãÏN&8 *7uÿÿÃDk&< +9u3‡Õ ‹@I   :c cQ   ÔäÔì999991/ôÔìÔìÀ0KSXíí9í9íí9í9Y"#32! 32654&#FHË#Ë3ñÏÙþ¾þè`iê¤Æ|‚mþ“Õþî°§ìþï¶ý縘gb7ÿãf5©@[#$# $$#45512035:3*$ #0W‡0‡‹e445$'# 35'*-  '' '-56ÔÔÄüÄîî999999991/äþîþÕî990KSXí9íí9í9Y">32#"&'732654&/.5467>54&#"#*ï˰¾ ®É)<3sQþýÞG†A;…Gƒ—6U=Z8˲h\yŽÛ»qÔÏ •!F$‡`&=,'U…W·×¤ !}l4R?/D\?ƒÀ$OY‡‰û“ÿÿHÿã?f&DCÿÿHÿãjf&DvÿÿHÿã?f&DdÿÿHÿãZ7&DtÿÿHÿã?&DjÿÿHÿã?N&DrÿÑÿã¾{ OP@…'O'OO'  ';:987<6'5':+ $!F@6?$O4‰%W$ˆ!‡(@W?ˆ<‡ŒIC†.(ePOL?965F$%+4@L'1PÔìÔÄÔÄ99999991ä2ô<ä2ü<ôìþôîì29999990KSXíí9í9í9íí9Y"@`>#>$>%0?0@Z#Z$Z%Z&ooollloooooj#j$j%j2o3o4o5oNoO{#{${%{&‹#‹$‹%‹&%9#9$9%2?2@I#I$I%I&j3 ]]7#"3267>54&#"!3267#"&'#"&546;7>54&#"7>32>32ç1}i##N;Ze=D;SjÕþaUF5";„Hj‹/]€˜ñàuUM1…L#OŠ8Rv2ŒPyºH'!b3Cšƒ'\ÿÿœþuq{&Fªhÿÿbÿãff&HCÿÿbÿãff&Hvÿÿbÿãff&Hdÿÿbÿãf&Hjÿÿ=ìf&óCãÿÿ=If&óvãÿÿ=ìf&ódãÿÿ=&ójãwÿãj!0…@L:! %%‡+‡ e‹1( .(!. ( 1ÔìÔìÀ99991ìÄôìî99990KSXííí9íY"#"&5467>32.''%'3%.#"324&f{qKFMãÁÌLGLç†0 5)þ×Õhÿ%P,³Ýsh§Ô/«þÖ—‹þÿhtx×Ë~ôio{&V:^\VÈ‘X\þ þÈýx„A@eÿÿTV7&QtÿÿuÿãZf&RCÿÿuÿãff&RvÿÿuÿãZf&RdÿÿuÿãZ7&RtÿÿuÿãZ&RjX–yo '@ÇÇl D Ô<Äü<Ä1ÔÄüÔìî03#3#!!îõõõõþj!ûß‹õÙö¢ª/ÿ –¼ '1m@:'2"1( +%&"‡"+‡†"e2'2& 1(.%.  . 2ÔìÔìÀ999999991äôìîÀÀ99999990 324&.547>327#"&''.#"ýêN4£ÜýPKQß“Nx.p]{ RJOâ“J{3w\%I4¤Û9ýW.ý`0€PŽnwu$$‰M’2€TŠþïmvv%%L¾þ¨þô'ÿÿ}ÿåmf&XCüÿÿ}ÿåmf&Xvüÿÿ}ÿåmf&Xdüÿÿ}ÿåm&XjüÿÿÿÙþVÉf&\vÿþþVh%Ž@M%$#" ! :‡‡e†Ž&& &ÄÔì.9991ìääôìî990KSXíí9í9íí9í9Y"%#3>32#"&7267>54&#"%o¸ƒ¸r=¬d¢²OFKÌzdèQ†-18gfU‰018pýÉÉý²RXлþànvzTHYU\çqZXXär{…ÿÿÿÙþVÉ&\jÿÿÿ–i0&$ 7ÿÿHÿã?ö&D‡ÿÿÿ–„m&$ 2ÿÿHÿãJH&D‰ÿÿÿ–þu.Õ'sÖ$ÿÿHþu?{'snDÿÿsÿãÀk&& +®uÿÿœÿãÀf&FvZÿÿsÿã×m' .×u&ÿÿœÿãqf&dZFÿÿsÿã¼P&& 3Kÿÿœÿãq&FŠKÿÿsÿããm&& /®uÿÿœÿã¨f&FeZÿÿÿøjm&' /*uÿÿwÿãèg )Ÿÿ·9Q?}GÿÿÿøjÕ’wÿã‡-Ó@|  "! #+,-+,-*: °Ó‡+ ‡"e+†‹ %.ÔìÔäÀ999991/ìäôìîý<î2990KSXííí9íí9í9í9í9Y""3267>54&!7!733##7#"&547>32®X†.16feU‰018mª>þ´I¸ÀÁú¸A¥d£µPEKË|a’ßWWZås€€ZXWçrx†5y••yúúTVÒ¼!lvxWÿÿ5Í0&( 7ÿÿbÿãfö&H‡#ÿÿ5Ím&( 2ÿÿbÿãfH&H‰ÿÿ5ÍP&( 3ÿÿbÿãf&HŠÿÿ5þuÍÕ'sh(ÿÿbþuf}'sHÿÿ5Ím&( /uÿÿbÿã…f&He7ÿÿNÿã˜m' .9u*ÿÿ;þHyf&dJÿÿNÿã¶m&* 22ÿÿ;þHyH&J‰ÿÿNÿã˜P&* 32ÿÿ;þHy&JŠÿÿNýØð'©€ÿá*ÿÿ;þHyN'•Q.JÿÿÿøÙm' .Ku+ÿÿTHm' .ÿ,uKÿø4Õ3!733##!##73!7Ê+*+Ê+‡ ‡×ÊŠýÖŠÊ׆ †ª,*,Õààà¤û¯Çý9Q¤¤àà,##654'&#"##7373!!67632 †¹‡ (p~ZX!{¸÷} }¸a þŸ>C^^r¬>%¶ýJ·A1B)G[X¯ý‡ö¤zz¤þÂ`21qBiKÿÿ9˜^' ,9u,ÿÿ=97&tãóÿÿ9˜0&, 7ÿÿ=+ö&ó‡ÿÿ9˜m&, 2ÿÿ=JH&ó‰ÿÿ]þu½Õ&,$slÿÿAþuñ&Lspÿÿ9˜P&, 3=ì` C@":‰‰   ÔÔÄ991/ì2ôì0KSXííY"!!!7!!f×¾münm¡þâ`ü/Bÿä¤Ö%73267#7!#"&!#3!73#w)+tD]d%—ù}¶4©›@€þfC ÛØÛ ý½ ÚÙÛ>ìOS’ÎDªüþßã.êûªªþSå !!!7!!3#!7!+73263#-×¾münm¡þâ¸-¸‰ÀþÃöÝ)ʵþé_nJ¸-¸aü/BCéú½åûŒÕÁœw«éÿÿÿçÿã‡m' .‡u-ÿÿþVçf&dããÿÿÿøýàJÕ&©hþ.ÿÿZýà´'©ŽÿþNÚ` 33 ##Y¾[>àýõváþÒ¢W¾`þ/ÑþZýFBþ?ÿÿNIl' +7v/ÿÿ7Im' +7wOÿÿNýà Õ&©lþ/ÿÿ7ýàÑ'©±ÿþOÿÿNRÕ' )§ÿn/ÿÿ7Ô ' ))ÿºOÿÿNbÕ'yc/ÿÿ79'y;ŽOÿãÓ e@8    : Qc     ÔäÄ.99991/ìä90KSXííííY"3%!!'%sÊr)IþqqÑ üdq–JÓý°ÑdþéýϨ3hd´XZ€@K:‰‰   ÔÄÀÀÀ99991/ìüì990KSXíííí9Y";#"&5467'!7!%XY[ÓÏ­© ;þÇJ¨sþÄôs;JþX˜%6IHœƒ#O(Ûc$)ý×ÙbþÛÿÿÿú×r' +I|1ÿÿT_m&vùQÿÿÿúýà×Õ&©(þ1ÿÿTýàH{&©QþQÿÿÿú×m&1 /„uÿÿT~f&Qe0ÿÿÿÞÃ'^þIQ{(þV•ò+7327676&#"#3>32Ï&nn¥Í§Z98Å#T|Â'·Ê#Ê'LÎ~»‡3Ãijœ>>’ñ´©ÚËüWÕÆotþûþú}þVn{$+73267654'&#"#367632\‹&mo¥Í¹Zr‹ 'qXW!{¸Ú¸!D]^s«>%¶ý6Ãijœ|~ÊA2B)G[\«ý‡`¨`21qBjJÿÿRÿã0&2 7ÿÿuÿãZö&R‡ÿÿRÿã„m&2 2ÿÿuÿãZH&R‰ÿÿRÿãøk&2 4ÿÿuÿãÉf&RŽ#HÕ"b@7!"!"!"!""!:c c Q c"!    #ÔìÀÀÀ91/Äì2ôì2î0KSXííííY"%!"&5476$3!!!! ";P!ý¤ÚÖB5VñR!þšWH!þ¹k!v¦/1}{>᪪ÍÑ’lçêþFªýãlm7´~j¦=xzÿúÿãø{,8PÃ@\-'@?6758'@@?  '@? '?@?:8/-59 - E5-‰ Wˆ‡ Œ5‡*†eQB8/.- N N2'N'!QÔìÔì999991ä2ô<ìäþôîî99999990KSXíí9í9íY"²o.]@oo o o jjo-i/o8 ]>32!3267#"&'#"&5467>7>32!7>54&#"267>7>54&#"ß:‡PzŽþ aUF6#;„G_ˆ":Q™;'8´uP|4IB=Skþ7<`(HCA_(Jü?@˜…+ƒTZ[nNX:2¬)+E@AD¦œ6†Ny»GfkDþVL8GN€€ýœGB,•jl‡ MTEF5”`V’$QWÿÿ l' +7v5ÿÿÙ6m'vÐUÿÿ ýàÕ&©}þ5ÿÿ3ýàÃ{&©†þUÿÿ m&5 /BuÿÿÙÃf&UeZÿÿÿã{r' +I|6ÿÿsÿã_m&vùVÿÿÿã{m' .ou6ÿÿsÿãJ‚&dEVÿÿþu{ð&6ªÿÿsþu5{&Vªÿÿÿã{m&6 /9uÿÿsÿãNf&Veÿÿ þu5Õ&7ªÿÿÃþudž&Wªyÿÿ 5m&7 /`uÿÿÃ&W )W*Ÿ3Õ!!!!#!7!!Às!þ-p !þ÷pËpþ÷! pþ+ÕªýÀªý¿Aª@²Vž!!!3#;#"'&54?#737!7!ò>¢þ^-åå- &uÏáÏE+-åå-þÕ+>žþÂéŽé1%91“S5e:JéŽé>ÿÿPÿãÏ^' ,7u8ÿÿ}ÿåm7&tüXÿÿPÿãÏ0&8 7ÿÿ}ÿåmö&X‡ÿÿPÿãÏm&8 2ÿÿ}ÿåmH&X‰ÿÿPÿãÏ9&8r ëÿÿ}ÿåmÇ&XrÿØÿyÿÿPÿãøk&8 4ÿÿ}ÿåÉf&XŽÿÿPþeÏÕ&8sÞðÿÿ}þsm`&XsžÿþÿÿR`t&: .J|ÿÿ\#m&dZÿÿÃDt&< .R|ÿÿÿÙþVÉm&d\ÿÿÃDN&< *9uÿÿÿúúr' +I|=ÿÿNmm&vù]ÿÿÿúúP&= 32ÿÿNm&]Šÿÿÿúúm&= /9uÿÿNmf&]eÝ!#!7!7>;#"-¸¾þÕ)&Á»ÝÐ_`ÑNÁ¥™Se;ÿãT/>32#"&'##7373!!267>54&#"²>¤f¤¶))HMmm|b…"¹÷Œ Œ¹Q þ¯0Tˆ.19eeS‰30:kÑTVϺ‘ms@?VTö¤zz¤û‰ZV^èl€€\XVéo{…TÉÕ!*32676H#!"#7>332676&#ŒWt”¦|”0çÔ"Ÿ€}'þÅûþŸ5E8 œ#à~2j£·ƒ£/þ>orqp¦À±‰¢ ˘ÈÚ//&r1Fµ£üôý݇‹Œ…ÿÿ¾ÕE,ÿãL>32#"&'#!!&#"32¢<­fÊ«56þÚËdˆ¸.ð$ýÈVS^…†´*)_†…ÑRXþÉþïþëþÅWS¸ûý¬ÚÛÕÔÜD`Õ 327676'&#'3)'šjï°WWBB¨Ïëx@"(™™þùþF¸z¯ÉýÝ>=’DE¤¿d¡Ëgh´ä=iÿãn !&#"32>32#"'&'#'S^„†[Y*)/0†„î;¬fÊUV56“’ÌdDC¸¸–ÄY¬ÚmnÕÔnnRRX›œþïþëž+,S´ä|ÿã1ð70732#"7>3 !"&)=œXÅÿ<<‰ÅV·V)Uª[ïGHþtþá[š5Ï=@0230@=Ï))þgþ’þþj)0ÿã8g"%# !2676;".#"3267PUª[þáîG:YL 5n¥T?7 ?VÅÿ/;‰ÅXµU5))–p*™32jœ>5‡F=@þÐïþÎþÐ@=CÿãŽ!%# !2676;".#"3267DS¥RþüèkbF@)Jo¥Z98<ˆ]­å)(¬`¤M9++8(8rGjœ>>~”A:àÐÏá;>ÿÿÿøjÕ’HÉÕ3 !#"#7> 6&!#×éVýJKþvþªé6E8 œ #àaÿû@@˜ÿâÕþ”þ€þ‚þ•//&r1Fµ£úÑûHKûûwdÕ#";7!! &7676%3Ÿï¨¸~°ïþ' †þÞþFþùâ(H‹}ëXɉ’{‰¦ú+ÏË¡d¿ÂAàÕ#";7!! &7676%3|器~°ïþ' †þÞþFþùâ(H‹}ëXɉ’{‰¦ú+ÏË¡d¿ÂvÿãÏ 32676&#"7!#7#"32aS]…†µ)*`†…Y$ðþÒ¸>ªdˬ65%Êf‰LþTÚÜÔÕÛ}¸ùìSW;7XR‹3àÕ !7!!7!!7ßþÞüw!¿iýr!ŽVýT!Õú+ªªºªtÿã\ð7!'&#"7>32 !3276u,#(šV·V)Uª[ý¬LLþ¾þ«KýÂ'!(™š_PéS{@=Ï))þ€þyþzþ€~#úvuHÿã•ð(.76$32.#";#"3267#"&7>Â|i#0ÚI¶s$`¶Y†©„‹š š˜Ð”¦bÑp'nÞgõç(Ã"¤{µÛ º(({smz¦™‚–45É$&ëΕÇÿ„þVMÕ!!!!+7327677"ýµU !ýô%no¥°ŠZ98ÕªþHªý#Ãijœ>>~GþVè$+"!!+732767!7!767676;èÑb..þÂ)deµF1i/0Àþ×(#i,AJb™)(gcüÖ``œ01™åN´\''ÿã@g(%# !2676;".#"3267#7!™`ÚvþäíHG^Qo¥T?6B›_Åþÿ;=…ÆCk0NÙ š{KM—on™jœ>5‡MIþÏþÎþÉþÕ!‘¦GþRcI ! 7 3 3327ÿðP1þcþh¶þ¶ÙáÙüüþø8ÕÍ=Šþ?þuììnå¸ýÕ+ü¦þÓþ¼ŠŠJÿ©¡&#767673#"'&76&#"#367632ã88C=P§P-Ú77*8CBH "{¥.¦vhUUum¶þà™14IBœ›þeäá``Ö —Ž·«ý‡ý¤† 1á9˜Õ!7!!;#"'&7rþÇ!=!þǯ !Z¹ ÙªHE'+ªªüz=>«jfÆ7˜Õ!!3!!#!!7!!7!!Z=!þÇp !þ÷O9!üÃ!9Oþù!pþÇÕªýÀªþiªª—ª@ÿÝÕ676'&0##3ÛÂlœT%€-WEƒÅªôþªºqË"Ëœª r3r%Bs¬üì¤ý¸ÕýhT°7676;#"33 ##&nn¥Í¹Z98`=àýõwáþÒ¢W¾ê”Ãijœ>>~þÑþZýFBþ?¿‘;#"&?#73!7!;+6BY×饌&&ää„þÙß  ÝÝ –|~œÔÂÄŽ§üÉŽÿÒdÕ% ##''3ž‹:þ\¿¹þ.¿Zþe:´d¿½ònþþûÁÀý@‘Jûo |%ÿåÕ"%#"&33267332673#7#"&À0wJ‡F8ǨÅ.FPS-ŨÅ/#JIQ-ŧþÞ§,p?LWrHEÑ!þü ís{åöü ðp{åöú+`>~}þR]{#6&#"#3>32\Ú¹ÚOq®"{¸Ú¸!D»s«~¶ûœd—Ž·«ý‡`¨`cátÿã\ð  32'&#"32767\Lþ¾þ«LLBüý¬þð,#(š™_S;#'!(™š_P:éþzþ€~ˆ‡€þ€þÌ{{þø¸úvuûÿÿÿ×ÿã&2…žÓ¤ÿÿ ÿãÃ{&R–ž„*ÿã6ð%63273# &#"327-‚_8>ÏP¬çþݯïÓ±”þ9”0!ŠŠ°@@C‰‹Xé Yžƒú+Í üvÀ~^þæþ·þ¸þæ}þR4{ %63273##"'&7327&#"}UWeÒR“çþÞ°ïÔeŒÒëI:áMÑV~,Î`/´s%—+nú+Íýø—¼’þþu"m†mþâBxßÕ +#"#7>3! 27676&+ÔDþ¹[m^tÊ6E8 œ#à~'–ý½Ó^!€]mþ¤Mý¨//&r1Fµ£þÜEþ’8D…“ýÏ þV_˜*3267'"#"67232#"&'#76;#"‚IÇ"…±*Qø ×b@{Ã˪65þÜÊfˆo¹:ÛDN͹¨5/þ‰2ÚÖ¢þïFI¤þÆþêþïþÉWSýɬ.OœÝþøZÕ"#.+#3323 654'&#ÖJX3{Ùh.icÁGË"Ë4ÕönP‹cþEgÝ3->¹n§þhy¡]þ‘ÕþøoQ…Ùƒ^Yýî% P0EIÿã‹ð'>323267#"&7>?>76&#"hqÆVßÞ'áÙq—Œ™hÛ*tÝiüÜ)$èÜo›‚Œ^Åg¢''ñÈ ¾/ vp{‰DI×--àÕµÒ1#hcq…<;§ÿã3{'>323267#"&7>?>76&#"sW¬Zʸ®¥HÿszTÆq%p½SÒÈ «ŽM¾jl}S©X9!!¯¡“1€Yc55¾##»¦}œ#JKSQ..ÿÿÿæÿÕæ þV>!6'&#"3;#"'&7# 76!23Ä n| wZïd°®ÂAE#é¾þò)*/´@)¿-0A3šû=g)(™V\´®ÒØ`@o›ÞþV€ž !!;+73276?#"&7!7!>¢þ^wKuÏ&nn¥Í¹Z98(ÏŠ'wþÕ+>žþÂý |b“Ãijœ>>~¦Ë`>o4Õ&#7>3!!#6R8 œ #àÖÝ!þ-þÿË/7&r1Fµ£ªúÕ+©j!!;#"&7!7!7676;#"¨¢þ^wKuÏáÏŠ'wþÕ*&nn¥Í¹Z98`ý |b“¦Ë`Ãijœ>>~ þV5Õ;#"'&47!7!!0¹ߥE-þ+!s!þ-þû u™œjD£E?ªªúÁ7ÿÿÿÅÿã8'8ÿvžø¤ÿÿÿáÿå¼q'Xÿdž|M´##"67#7! 76'7"õa6$=þ™ðòÚ=$¨”ø"Ï"†Æ+-€4ç-+Fj"´¬†þà¼þÉþ‘n8¼!…¬¬Lþ·Þæþ÷ æÞIL¬X(Õ!"'&733276'3h©HE&ÔËÑ !Zšæ-+FiÚa6%<´¹jfÆ?ûÐ~>> æÞIL†þà¼þɸ¼¡C× #367632'&#"·þ¯ƒ¶‚þóÁÈ‹u2-P?b("8tþ*ýbž7ým‘È*9† ÿåþVZ`+7326?3676'&xSU|“lLbN1ïôŸJY]j,QN$hË:=šH†TNü”»~)+)“ =  Õ!3!#!!7#7!!CÉþè!þ÷Pþ¡"!ü e´!"æýÕšý°ªþiªš§ª@Xyb!!!#!!7!7!!K-!þ°8þžZþÔƒü»!þõ Ždý•b¨þ®¤þÒ–ª¤gÿàÿäÐÕ 7676'&+7!7!2! $7ªUU{rsNO¥®!Çý!É þ2ivZA=+þ¡þèþÜþÿ+³KKKK†IJ¦¹ª¨þG8+lhŠÝòòÝÿàÿäóÕ3! $76767637!!#" 76´É+þ¡þÜþèþÿ+fjkŒiþÞ É!ý!®¥kjUU{rs³ÝòòÝŠhl+8¹¨ªþG¦JI†KKKKþLn` 7!!#"3267# &767676¤âAj9ýeì@®¥zy38GF¾mÛgLxkj^þèÒV5z€r–Üܨ“þ ¦JK„KK21Ã%òÝŠhm*8ÿîþVC`'2767# 5476%$7654#!!7! ØTQSZ#^RYaþQ. $ÕþÞSýej!þNG6þ&æþî,³ ãî5%b f8“¨þd¶þì1a w[ð 6323#!!7!7!67676'&#"$ä¿ÛÝ$?1SP!åEþx®!üu!Íþå!²‚/" $‹4Dµøcé½``JUª?þ¨ªª—ª‚T<>¹<…ÿàÿäÕ % 7676'&#!!!!2! &73õ5å å6Ê6ç çŸW^#$†¨þí«Š!ŒŸ²zF·rO_¤þì¤}nw°¹~F¬VrAÿáþV¾{#3676327654'&+"Õ;¹-¹!D”ZÒ¸7% Sü˜À0 *vÜÛBzþÐ ªFN1pJ[05þWþäù2(E(Aïþ¯r_Õ3#•ÊþÝÊÕú+ÿÿ¨)Õ'‚Ê‚ÿ6vpÕ3!!!!#!7!7!7!•ÊO_!þ¡._!þ¡dÊdþ¡!_.þ¡!_Õþl¨ðªþÿªð¨ÿÿs`Õÿÿÿ–nm&$ /9uÿÿHÿãlf&Deÿÿ9˜m&, /\uÿÿ=Nf&óeÿÿRÿã‘m&2 /\uÿÿuÿã€f&Re2ÿÿPÿãÏm&8 /Nuÿÿ}ÿåmf&XeÿÿPÿãÏ ' *2ù'gHª8ÿÿ}ÿåm2&¾q%<ÿÿPÿãÏù' +`' *2ù8ÿÿ}ÿ客&¾„H<ÿÿPÿãÏû&8' *2ù /hÿÿ}ÿ墢&¾T<ÿÿPÿãÏù' *2ù' -n8ÿÿ}ÿåm¢&¾ƒB<ÿÿpÿãW{üÿÿHÿãx2&¦qM<ÿÿÿ–s 'gHª&$ 3ì„ÿÿHÿãx2'qM<Óÿÿÿo0&ˆ 7ªÿÿÿÑÿã¾ö&¨‡ÿÿNÿã˜m' /9u*ÿÿ;þHyf&eJÿÿÿøJm' /9u.ÿÿZ´m' /9uNÿÿRþeð&2sðÿÿuþeZ{&RsðÿÿRþe0&  7ÿÿuþeZö&¡‡ÿÿÿàÿäÐm' /9uyÿÿÿôþL”f&e5ÿÿNÿã˜k' +9u*ÿÿ;þHyf&vJÿ¯ÿã±Õ%2763#"'&7!#3!3ù6)44:¶>H„H…€8hEþÕŠ·#¶w+w·±57‡Of'þÀþ‹ŒMS™b–ý9Õýœdüuþï‹'ÿÿÿú×k&1 -FuÿÿTHf&QCÿÿÿo<k' +*uˆÿÿÿÑÿã¾f&v¨ÿÿÿº°k' ++ušÿÿ/ÿ –f&ºvÿÿÿ–'k&$ 5ÿÿHÿã?f&D’ÿÿÿ–Wm&$ 1ÿÿHÿã?H&D”ÿÿ5Ík&( 5ÿÿbÿãff&H’ÿÿ5Ím&( 1ÿÿbÿãfH&H”ÿÿ9˜k&, 5ÿÿ=öf&ó’ÿÿ9˜m&, 1ÿÿ=H&ó”ÿÿRÿãk&2 5ÿÿuÿãZf&R’ÿÿRÿãm&2 1ÿÿuÿãZH&R”ÿÿ k&5 5ÎÿÿÙÃf&U’–ÿÿ m&5 1ÎÿÿÙÃH&U”–ÿÿPÿãÏk&8 5ÿÿ}ÿåmf&X’ÿÿPÿãÏm&8 1ÿÿ}ÿåmH&X”ÿÿýâ{ð&©6ÿÿsýâ5{&©6Vÿÿ ýâ5Õ&©7ÿÿÃýâdž'©šW"þR+ð276$>54.7%>54.#"7$32+..;.9!)Fd2ýªý×"Æ;͈:_¸ˆ²$m¨`0*GL*¹þç(ΫÖ°/\KJ99&(?SP,þýþFu 3~ˆ}=Uc 6H«j+v~}<2I%¸¾¤¬RþO»{3 7,54&#"?>54.#"7$32p/M1! Œþþþê ‰]P;Eêñ²¿%AE(Dµ¦!&†cž_'!5!:3Í%3?=aÀ©Ž.‚pü›FTV‹U@Ïl)=;Zš…:tO#C8;+2)!ÿÿÿøÙm' /Ku+ÿÿTHm' /uKÿöÿlN(1%7276"'676#"'#7&/'&'&3232676&"C{!€¡h¥+<úG.-wi -C[d¢>>65÷¡Pjq¸ýSBÔš))DÔ›>>t#ôÚþÇO9 Y%Z5H›ž7WSCüñþTÚÜÔÕÛ4þV6Õ!!3+73276?!7!mÉü"%no¥Í¹Z98üÃÚýÕšûo*”Ãijœ>>~š‘‡þV§b!!#+73276?!7!y- üáƒ%nn¥Í¹Z98ý|! ý•b¨üÜ–Ãijœ>>~ª%ÿÿÿ–P&$ 3ÿÿHÿã?&DŠÿÿ5þuÍÕ&(ª2ÿÿbþuf}&Hª2ÿÿRÿã 'gHª' *2ù2ÿÿuÿãZ2&¸q%<ÿÿRÿã 'gHª' ,õ2ÿÿuÿãZ2&·q(<ÿÿRÿãP&2 3ÿÿuÿãZ&RŠÿÿRÿã 'gHª&2 3„ÿÿuÿãZ2&Ûq%<ÿÿÃD0&< 7ÿÿÿÙþVÉö&\‡*ÿl¸%7276"#7&'&7!7!676#"jC{!€Õ-wi $ÆþÙßâ¡h¥+=úF›>þœO9ÂaJ¸ùûwt#ôÚþÇ ÿl?{.%7276"'676"'#7&'&?6&#"#3>32ïCz"€­ «g $<ûF.-wj $..ZIQ,}§Ú§-o?…%$9›>>r.üÎþÈO9ÂaJ¸ëís{åý``¸>¢þ^›>>t#ôÚþÇO9ÂaJ¸;>þÂþV‡` !7!+7326òÀþÃöÝ)ʵþé_nåûŒÕÁœwBÿã@12676&"&#"32>32 #"&'#7#"323ïT(Ÿ~*))Ÿ(S'PP~))(PPN+n=yO56Éz32 #"&'#âT(Ÿ~*))ŸýØS'PP~))(PPN+n=yO56ÉzZBC þ¡ÕþÇ{Jþ8ûû…ºËFFJÝ!›@ýÿwÿº@) '&#"# /'&!27&'3267CÐOVÅÿ<eUª[þáwäZ.3G[M74YV¢üÝ EÅXµU$ þÐþÍ~ýÊ))Ë ÿF/³n™dJµI ü~' ˜@=ÿ¾ÿ ¼( &#"# /'&7!27&'3267wJ9H­å)OS¥RþütðM *$6aQI&%uN‹ýh G¬`¤M–7àÐSþ]++œ èL„½8 rM†…ýq;>ÿôLÕ 3!!!!!7!±Ë‘!þùOÑ!üdpþõ! ÕýªþiªAªÿÿºY #!7!7##'ú6óþº{þ-!;V2Jþ”Ë\þZÐ[ý„|ªBJ8jýÍýÖýäFþ`{5.#"3#"'&/&/7632676/&'&7>32`#F—S}‹N°G„o!ˆx²{z#L'Tf@G¾)^.%{hA>z™ëBš:: üÊZŸ9´..QSKJ#œ}¦^R ˜~$š=&[ó5#¾`cY€1!GJ¡¯!Žþ®b!;#"'&/&#?!€- üÊ.Õ{#L4[Tf@G¾1Z ý•b¨üË þø~$š=&[ó?œ%xÔÕ"#7>3!2##326&#ç6E8 œ#à~'úÖ*+þÓûuʕʌº4€//&r1Fµ£ãÛÝâý¨þ” “ÿ¾Õ'32654&#%!2)#7332654&+3ãXô—­o}þb»Ëиœ}…þÁþÝþ‘^T¦ŸþÌÏž|êþün••È®¤kfÆ•ÿ÷ÿãÏÕ67#733!33# &73276!P}!}ˑˀ!€+_J•þjÏÇÛ¬V,3ýë"={‰ªêýêýªÞÎ;w´¨¸w@¤ÿ¦ Õ #!#Óýª×Ï“ÆúéÕú+ÿÿÕ 32654&##.+##73!2#f‘£Ã~ˆPHW6yÉj,mnv{ËzÑ Ñ‡VÏãÏ/ýpiý’j±þhyœbý‰w¦¸³£·ðvÃ{& !!##733>32 ZþÆÕ+" ýÛX¸X» ºb¸(CÕ‹ŒRyXЙ¤þ<ĤøÛx~Hoÿãe{ )32676&#"3>32+3267#"&'.þ=¡¹dl˜×%È|¹ NÆ€«¦%þàó÷o“^Êe$mÃX‹µ-+qpepÓº)L¦d_Á¢»Â†y64¸''RR2“ÿã¡{73#7#"32 676& ͸ٸ>ªdˬ65&Êe‰ýØT^ ¶))`þöÑ‹û¤SW;7WþáþTÚÜÔÕÛ0ÿã4{%#3>32#"&&  ¸Ù¸>ªdˬ65þÚÊe‰(T^þö¶))` ‹\SWþÅþëþïþÉW¬ÚÜÔÕÛÿã '&#"3267632#"&'#7676;#"!S^…†´*)_†…î<€Uÿã{>3 !"&'732676&#"R¦RèkþžþüQ’E%=ˆ]­å)(¬`£M%++þÈýØþÈ*,ÁA:àÐÏá;>¸ÿl”w,%3276#"67&'&76!2&'&#"63 !"8K’ ƒe‰ š2&u45µµUNME!FJJP³yyPMvÄ+/#þ²RŽ9Kþí9DhT#3¡ #¬+qrþfr°ö½‰þVs$2676&"3;#"'&?#"32tSBÕš)*EÕBp¶þÍH8…33&5EEPµ‘56 ³QkþTÚÜÔÕÛCùØ~>>œjiáS,+;7WQÿãÏ$2676&"%7676;#"#7#"32:SBÕš*)EÕF&[]„8H0/ß·5‹P´55 ³PkþTÚÜÔÕÛ ”Ãijœ>>~û‚SW;7WSCÿãW{632!"&'7326?!706&#"ƒ1/Öðâ45þþû[»a$bµX®æ#üãÔ]Š…ˆ²^û"þÀþôþíþÇ++·98È·œ°©pÿãW{7!76&#"7>3 #"73267q#˜®XËx$qË[é54þ¢ðÖ¿Þpˆ…Î/Z·È89·++þÇþíþôþÀ"Å¢©°œÿúÿãÂ{ 4%676732#"'&7&'&7>3273;#"'&7ÿi& ýæ ,g€‹6¿­G3  'ŸROQT"S¦QÌY ±ŒP!1„0-'ÖŠÏ>8þœE#Z`vþí¢¡‘gœ»'#d4®*,œ#)u”™10œ`ZÈ{ÿêh{0&'&76$32&'&#";#"32767#"'&7>Êr53ÑQXZd cTTLŠ¥ @?‡¦Ÿ–½PP­c_^T"f]^Vþyx ±_A@^†ž § VJ=+,nQb54"­[\¦m”BÿêA{2#"&'7327676'&+7327676'&#"767632<< œÿU°["EXWd­eeKI–ž¥ˆQP ACŠKYYm n]_PÒÕNM_JJm¦\[­"45bQ77,+=J++ § ž†^@AÿÑÿê§{B#"&'7327676'&+7327676'&#"76763273;#"'&7'^)* zyÀ?„B"2AAKNO54qv|f>? /0h8DCS!SGGÊO 0ƒ/,'ñ=_JJm¦\[­"45bQ77,+=J++ § OAfƒ”™10œ`ZÈ¢A°ÿÖWy+ 27676'&+7327>'&%672#'&óþ­RWSvAM1‹ˆ‰‹&F3/þÇ]•­TS†g]Ouv¬”JíBNØþ^þB6@JN67š=6s-VW”gŽŽg”VW>ÂXÿöþVy`!+73267!7!!7!y þž\%Ý¥þêZr\þ FþÃõbh¤þ(ÃÓœ}}ؤiþJþHö&07676;#"#"&'7326?#"63"326Y&\]†19)(Ð1ƒƒÌ>€>#Fy6y"6ŒX®“3. ®ŒSÖmPIng—\"Ãijœ>>~ûÊûƒ‚¶.,¢°}^\:é:ýݧ×þbÙÚþHÌ\ &0"326#"&'7326?#"67630!©Rþø‡¸Pdˆ²1þàçL¡N$Y—C•¨">ªmÄ­3,•Èé9§×þbÙÚþÝüþü¶.,¢°}^\:ã£y—˜!%#7!#"76!2&'&#"32b7›AgN[RÊýì55µµ>dep!ijSG³yyOMM³­²Œýð">K¬MrqþfqrkþR` 7 333276Ä>-þþX.@uþÜÙáqÙý|þè2ÕÌ2<þBþÀèñV¯þpýdþÌþúÓØ`  33! 76%3276úþÙÙÜvÙþ…!þáþÒ #6” {q Jþqýßñ§§§±`ž;hh?ÌþR«^332673##"&̇¸‡Op‚®!{¹þÓ¹tD¼q¬|¨¶ýJ—Ž·«yùôVadá%>32#6&#"#7676;#"™D»s«},‡¹‡Oq®"{¸Ã&mo¥Í¹Z98 `cáäýJ¶—Ž·«ý‡ê”Ãijœ>>~NþV.->32+73276?6&#"#7676;#"ÃC¼s«},n&nn¥Í¹Z98nNq¯!{¸Â&nn¥Í¹Z98 `cáäýÊ€Ãijœ>>~€6—Ž·«ý‡ê”Ãijœ>>~3#!!!!!7!!7!!¤¸.¸þº×bb þž<münm<þ FþáéËþ¤þË5¤i»`!#"'&70!7!;žÍ¥FE'oþá׊BZ¹jfÆ;ý6~|2Ÿ` !!!!7!! ’þ“£münm£þ“`ü¾By&;#"&?&#"7>32!7!3267#"'I%®;7-¢»";#"&?67# 7632!7!3#'6#"3`CY×饌&%=þè&0õ6%KþÙߘúú©6M \–|~œÔ¾½öƒüó  „K9YþVz;#"'&7!7! BY×éŸLG'þÙß|~œjdÈ£ÏþLÎ.;#"&7#7!!2#"'&'7327676'&+7!‰0G¬»„g%ÆìW»!þ[T\G/-+þÞàLKMM&9—W—_^;<„Œ!¹ýë–|~œÔÂùþA¨þ$8+lhŠÝò%Ã12KK„KJ¦óCÙ{"%#"&33267332673#7#"&Þ0vJ‡F8~¨}.FPS,}¨}.#JIQ,}§Ú§-o?LWHEÑ!‰ýís{åýðp{åû `32 +73276?#6&#"#6&#"#3>320vJ‡F8e%ff–º§R54}.FPS,}¨}.#JIQ,}§Ú§-o?LWîHEÑþßý÷”Âjjœ>>~ís{åýðp{åý``32;#"'&ž†]pSS {µÙµ!EšX¨?>-‡?4ˆ),²ŸOO__¤ý‡^¬edwxèýH™10œ`` ±{ !3!#ÿ.¯ÄÞþðþÒ¯Ä{üy‡û…‡üy‰ÿãH{  #"%"!6'&!3276ñÒ½88þÐêé¼88ûŒ]R*7,3 ýÓ $3Œ]C{þÒþâþáþÓ-’m_°°_mýà„OmmOEî`!!!!!"'&763#";îþ_9þpF«ý©ôbb65™™ô´oo**EE´`šþÝ›þ”œŽŽ‚lkØÙlm”ÿâ0{73276?332767676'&#"#"&7#"'&7676±9% 2"9$#u#$ 09*&%¤þîŽP; -·nMO/†Mo',2) `pB§?UO+¹¶¶¹+OU=© ]  pþ“xeYæþôŽƒƒŽ†•׫BcþW}!*3#7;#3+737&'&76767676'&µðð¸ðð1›I^78˜v§/ðð¸ðð/¨L^87™{±˜¢J9]*)2þe¤U>^)*3"o¤¤üu—þâþá–uð¤¤í{–—{¨üÂBnÕÖmBü×HImÖÕnI³ÿå `7327673#7#"'&'Ø##,œgg%s¹Ú¹"Nfg…¬ ef¾Nû ®f21ŠÿåJ 7327673#7#"'&'®"#,Ÿdi$ŹþÔ¹"Ngf…¬ ei»øùö®f21gþVÔ`#7327673;#"'&?#7#"'&'‹"$,œfh%s¹Ái1Fµ>?)"Ngf…¬ ef¾Nü €™10œ``Ö®f21‡þVG{&'&#"#367632#"#,œgh%Ź,¹"Ngf…´ ef¾ü ®f21ÖþVG{#&'&#"#;#"'&?3367632###,œgg%siéþµ>@*Á¹"Nfg…´ ee¿ý²™10œ``Ö”à®f210¡{676;#"!!7!))ee´Ñ»j0-rmüniåÔb`œ02˜ýª0Þ{!!7!6'&+732étiünotk»Ñ´??åýªVš00œ`b ë`!#&'&+#!2327676'&#Í4**#rÃj)44a©\¹Ú„Ù\\ ŒþFBÆwHH77w 66^þÎq$%þ'`PQ¢iŒþ¯++ST** Ä`!#!3327673327676'&+ÛeT z|Ùþ|Ú¹\©aBBUÚÃêG>@ýÏÆwGI86wÆSŒi¢QP`þ'%$qþÎ^66þ7**TS++rþVf{=.#"#"/;#"'&?327676'&/&'&76$32f"F¡Z‰LM **Ž<¼CDØZ_iéþµ??* \^^a‚NO*+¤=¤>=Îf¯?®((**T@%$!*ML‰œ[[ ™10œ``Ö=Wg5-,QK((%$JK‚ž¬)þV¨676;#"+73276_xr#hbî°c-/ï*ceµF1i0/pRµ[V™((hû)Ö``œ01ÿ¼þV!+73267!7!!7!7>;#">þž\&Ü¥þêZr\þ FþÃ=$˳ÝÑc]uh¤þ(ÃÓœ}}ؤiN¸®™Qgý¥cþVoe;#"'&76'&+732¹i1Fµ@?+Ÿc°®ÃAJ(™10œ`aÕ(h((™Va¯YÿßþV!#"327673## 76!3676;#"¬³w |n*óµ¿'BeµþÑ*)¾é#ibî°d-/š3A0Ç›o@`ØÒ®´\V™()g¦þÂG`!7!6&+732!! >þ^¢vKuÏáω'v+þÕ>þÂ>`|b“¦Ëý þÂ@þWâž!!;#"&7!7!~>¢þ^ÉKuÏáω'ÉþÕ+>žþÂû÷|b“¦Ë >ÿÍÿã`!733!33##7#"&?)32763 ®b¸b:b¸bº ºX¸"WcauÁš-ñýÇ./|•i^Ĥøþøþ¤þ<¬f21ðç ŸPO_Uaÿââ`#7! 7676'&'7!# '&76767¯ º+zTW‹ kk/1X+´ ì^"!.þ«þ>rq,HK‹¼¤ÜEio‡ŸÂabž’do?ܤdqnˆëþÜ‘’ä“kmh’q` !+"'&7#7!?27676'&'&¨B^"!.þ«áFµ??*o›S‹g4kk/8QDÚdqnˆëþÜ``Ö;ý6™12abž’dw7,ÿÚ`!##3èýìÃ}ú¬üT`ÿ¢U` !###33U“þž­þŸ”Å­t­jü–jü–`üj–ÿ±» >;#"##‹u¬|“lLbM2ïóý÷ÃÈÈzšH†Tû²lü”ÕÛ}33#ÖÙ̇ÙýãfËf}þ8Èýýó ~þV`!!;#"'&?!7!k§ ý\  ;5‡*+)ýé!¤þ `¨üÛ§™10œ``Ö¨%Dÿ‘¢`!#67!7!7!332!703276#H ™ þ–!Pýej!ü°®tÛã.$þ² ® FY3<;4¨%“¨üÛ ö½“6[ÿôþL”` 2!"'&'7327676'&+7!7!{juZA=+þ¡þè^``c&K¾m¾qsMO¥®!ýej Ü8*mhŠÝò%Ã12KK„KJ¦ó“¨#þLk`$- 76676'&+7!7!2#6'07&#"327Lþ±'2)ö’ NO¥®!ýej þiv[@=8Q ™®9tŃ ž¾qþL½û;*1…JJ¦ó“¨þ$8+lg‹qUe¤R8yú*K/K'L327676'&#"76763 #Â?ÀlI,M³PTRV!SUTUlT$!‚‡°ÊrLb…Ar+¬#}ºªswýtþ™#&'&7676!2&'&#"3›Ê¤YV!$‡§UNME!FKIP³yF+@ÀüâŒwsªº}#¬+rA…bLr8Ó3!"'&'7327676'&#ºœÊ¤YV!$†¨þíUNME!FJJP³yF+@Àôýtwsªº}#¬+rA…bLr[þJÃ#676!2&'&#"32767# '&7)$†¨UMNE!FKJP³yFÎ,M³PRSV!STUUþíjV$>º}#¬+rA…ûà…Ar+¬#}º^-sB )67632 '&7 676'&#"67632"'&^*¹¸ØÓ}{)*þ•þP}}àRQìQQŠxxÈ ((/. O^5ÔœœÔØþИ˜ÙccÆŠffff‰.""""./B!!a } &327676'&# 327676&#%!2#!’FÝ]8< #$^Š6ÒU32 CVþ†²£==cn10yyÁþcþ˜36?\13Âþè+*?.V©”ˆi?>NNušTTzÿÖ#y+";#"3$''"'&7>7.767632‡tCL1‹ˆ‰‹&E3-uTWQaöMBþÇc’­ST†g]Ovu¬–Ø6=š76NJ@6¾¢s—þxþ¨Â>WV”gŽŽg”WV0%#7!#"'&76325676;#"#&'&#"32Z6tg­>—Ô\]44ž›Û3D *POˆ¾N(&±;7†a`P45†ƒ²Œýð2Ÿ   Ø^`œ03—”j&Brqþfqr ±{ 3!3#!#ÿÊVVÊÞÊgýãgÊ{þA¿û…ýî4þV3#3## 76!3!7#"3276Z¸-¸Ùµ¿)AdµþÑ+(Á¾þÃ;µw {i0éËû ›p?`ÝÍÑû3A0NþLñ` ## 33¹³ý}ë¸þ ðÎk¹þL—þ TýÝ#…Ž{3!!dʽ!ý{ü/ª"þV<)%#"'&76327676;#"# 276'&"n?LL]®ONg¯]99&*POˆ¿O&&þκïO((ÛVUO()ÛU¨d01¢¢¢¢10dÆÖ``œ01™ùÚ¤þjtsst–tssxL$327676'&#"76763 3###73Â?ÀlI,M³PTRV!SUTUlT$!‚‡°*çç6Ê5äårLb…Ar+¬#}ºªswÔ¤þì¤þ™$7&'&7676!2&'&#";3###7*¤YV!$‡§UNME!FKIP³yF+@À>Fåå6Ê6ç¸Ôwsªº}#¬+rA…bLrþš¤þì¤ÿòÿãß #26&"3!!!+7#"32§O8¯’O8¯ vnT !ýÄŸýõ^!4EAN€bg߀N/1–%úþjçç–ç+^þL¨üÛ“¨a31DD10MüûþLì C3276'&#"%#7#"'&76323!2#"'&'7327676'&+7!´OXWJHOWXHƼo!7>>Jz-.gmkzJ,+voV !þ®?B3+å¨9789&)nArJK(*ch cþqúþjtsst–tss_ü3¨d01¢¢¢¢10d^þL¨þ$8*mhŠÝò%Ã12KK„KJ¦óÿ‘æ ,326&"!7!332+#67'#7#"3233276#°O8¯’N7°|“#þs !ýÄi\„ˆ/$É \Ø]!6}KyZfØzJXvn h *5úþjçç–çüþ“¨üÛ ö½3.#"#"'&'#"&7#7333#;732676'&/.7>32^!'^6Rb -R#n"#¸6757q€B)vQQ>o>ããvEk3m:Neb#`>¨{=g?®((TT@I!,KL‰œ¶!&ŸÒ`>þÂý ‰NM55YQK($)$•‚ž¬×þVõ%.!7676;#"+73276?#"'&7#73!33>#SM“‚„J$&ï)PPˆ5%N&'¡+.)vee>«5jþçvUžþÂN¶ZV™()gû)×_`œ02˜PMÔ`>úü ý Š&'Èÿpfž.6@3632&'&#"632#"'67&'#"&7#733276#"&77#3>äy3-.&!&,*0lQRO%Uu´0$È1(\rC)vQQ> -W N=ê.03rÝvEžþ‚#¬+qrþfr°ö½9DhT"2€ŸÒ`>úô9Kiø›ý ‰NƒþVf3+7327676&#"####737>;#";67632]ˆ)DCm˜Œ? †,JY|o¾³¾o¾ji$Šqhj;>´m"<~-x+&?®)TT?&$!,KL‰›\[&ý:ŠMVþ·ýÎ3-+RK(#*$JAD7 3!!!+sŠUŽ!ý]ýrvG–‰þL¨üÛ“Íüú†ÿâÅ 333# #333# #‡t1ðˆ2ðtþ͉4ü‰Lt2ï‰2ïtþΉ4ü‰Uþéþéýýþ=þéþéýýþ ­±!#!#!#!#s³S3ýk3Þ³S3ýk3UþXþûrþXþûHþJŒ#32673##"'&7?6'&+732?l>]p¥ {‹þÒ‹wFLMX‘33-mN%5ˆ**)êýÖŸž¾¤yùìbe22wxè0t ™10œ``Ö .þVî/!7#"'&7?6'&+73232673;#"'&7¥"32…JtI=N^EuªtB4|Jycþ…wYYk\þžgþ«88†ìŠ…ò3>32#6&#"#7676;#"Ç4|JycJtI=N^Eum>=r ’Bœ98†‚þ†wYXj\þž1Sw66WUzWô 3+732673#³t||r,B;¬tsÿý‚xlX6Vr‚[Œt.#"#3>32`,b@uzu0€S Ÿ qkþ¶sa97]|v32673#7#"&'q,b@uzu0€S ì qkJýa97*C32673;#"'&?#7#"&'>,b@ulC,r()/€T ì qkJýÕH VX66x a97ôŒÝ!+33276?3327676'&+°@7 LM‰ôzt3j>))4…{,&'þ¤}K,- ##K}ÙN;[--sþ÷?¡«5ÿ/.ÌŒ 333# #Ìt2ï‰2ïtþ͈4ýˆÿþéþéýýþü+7326?33YGkN\D0=/¦{}<{RpEW(K/iþêÿÿ»tfÆÏÇ 9@:ogÔÄä91üì0KSXíí9Y"#73Ëü)š¬ÇÏ~þ‚•Çg3#jü(þòš¬Ïþ‚~ÿÿðÂÁ—fï®672676ʠg @j G@ sA?,__ï=>X@?X=>POæPPVïž"'&6763"33sA?,__s @i F@ ïPPæOP>=X?@X>˜~•å327676'&#"767632#ÿ(yC, 2q24454555®E8QSoG=@*7K$@ ` XFh_@Cþ“~Àå#&'&767632&'&#"3ÖW€Gg:8Sh­512,-//2qK+ *y=þAmC@_hFX ` @$K7*@îfR@‚ÔÌ91ôì290K° TK°T[X½ÿÀ@878YK° TX½@ÿÀ878Y3#'#Í“¤…uáœfþˆññ×îNf:@‚ÔÌ91ô<ì90K° TK°T[X½ÿÀ@878Y#373“¤ƒwáœîxóóîçã@ÔÌ1@ÔÄ0#âkˆkýÕ+ÿÿ¸b+ö‡îþÑãü@ÔÌ1@ÔÄ0%#âkˆküýÕ+ÿÿhþ›Ûÿ/´O‚#!!reþÀrþ›ÙJý'þ¶ÖØ;#!HreÙJÿÿþN#`ÿŸþÿÿõþ=#aÿŸþ/ÿ£U 733##7#7-+–+àà+–+àuàà–àà–yßYu!7!;þ>Âß–ÿÿÕ)JH‰ÿÿwDmŠø)N h@“Î “" I"Ôìüì1Ôìüì0K° TK° T[K° T[X½@ÿÀ878YK°TK°T[K°T[K°T[X½@ÿÀ878Y4&#"3267#"&54632¢X@@WW@@X{ ssŸŸss ;@XWA@WX?sŸŸstŸŸçþuX"@  “  ÔÄÌ9991/ÔüÄ90!33267#"&546w=@/-!B "G"alK:e&%&… PG7x‘V7Ñ@!  ““ ÔÌ91Ô<üÔì99990K° TK° T[X½ÿÀ@878Y@=     ]K° TK° T[X½@ÿÀ878Y@           ]'.#"#>3232673#"&å/#*/}rY+D&/ )1}qY,B`1KNˆ’&/NM‰“ÿÿ¸îÉfŽþ—Þ\%3;!"'&7þ·‹¸iúþñ¯DA'ýwd¤”™10œ`ZÈ¢/« 7673733276Í‚#òþõ$忉“ã‰þs­ †€Üù´‡Àñ/ààþŠ®˜MMŒœœ8 ;#"'&547#7![ 8ˆ’h- oº."#W<(@":Q"œŠ/2&'&#"#"'&'732676'&/&'&767632Š-329V00 Y'x*,XW‰8<;A;;<=Rbk'h'(PP‚@77 a /$*+MW33 k2-*)*IX01 Õœî #'#37îþÆÎ‰žý‰RÀˆçþÏþ¾ööH+ß߀œÀ#&'&767632.#"3ÖW€Gg:8Sh­512,-^2qK+ *y[þAmC@_hFX `@$K7*@—*X!!7!˜ðþyþöЈú¨[*X!!7!3˜´þñ<ˆþöœˆ4ú¨*X3#!7*xˆþöˆxþðhú¨hˆã*X3#!7î´ˆþöˆ<þ¼œú¨4ˆ§*X%3!7²ðˆþöý‡ˆÐú¨ˆÿÿÝÇy¹ÿÿÁþ ‚ÿÁ¨ÿÿÅîPfCÿÿ?îffvÿÿîfdÿÿ‘V7t¸b+ö@ ÌÔÄ991Ôì0!!ÕVýªö”ÿÿ»Ñ ÎÕ)JH&@Ì H HÔìÜì91Ô<Ôì90332673#"&546ØxWUPjw ³‹†‘HADJL’€vwDm$@ ¦ÍÔÌ991ôì0@ @@PP]3# Í)ÍÌÿÿ´F-j¨òDÆ2#767676#"76wç #?:”G: w[F[ƪ@$C!Xl05^ ƒÿÿø)Nr¸îÉfH@ ‚ÔÜÔÌ1ô<ì20@)////2222BBBBVSUU]3#3#°½þÒ‡LÅþ¼‡fþˆxþˆÿÿ×îNfeöîÖª#ÕVˆVªþD¼ÿÿ*'ÿ4Ì€îöf#!#2„‡¯u‰–fþˆxþˆxÿÿÕ)JÜ&pq0ÌŸ)H>32#6&#" 'º‘A3wRUWn)H9fLJJLÕÇe #3Äïþ’ÇY¾ÂÁ#77#73â2òoo1ñÃþÿ{‰þðÂÁ73#3"ð1ñ1opòÃþþ†{?î«f3#ÐÛМfþˆÿÿ'ý¸²ÿ0CbøÊÿÿÝý¸ÿ0vÿžøÊ€ýöþë73#7#7K"ˆ_ˆ#°þ:±þ±ˆÖýLþë#33"ˆ_ˆ"°ý²±걈ˆ†Žp!7!#ëþžê_ˆèˆþ“ü@q732676&'3#"&”4P.8  …m]0_hw-+76 >&Dzs5.þ :ÿÁ"&54763"÷]XbL]3+61þlbo?wS?b#.A#>lý²qþë3!7373À±þ±"ˆþ:ˆˆ±¡ý²¦þë#7!##S±ê±#ˆþcˆˆ±vý{þë #73733##'±±"ˆ"±±"ˆý²ˆ±±ˆ±fþckþë7!fêþcˆˆ5þVÆ€ %+73276?Æ&mo¥Í¹Z98€”Ãijœ>>~”PþVE€ 73;#"'&7m¹ !Z¹Í¥EE&€”~>>œjià þcÿ/"@ ¦ÔÌ991Ôì0@ @@PP]3#HÍ'ÍÑÌ_þdÙÿ.>@¦ÔÜÔÌ99991Ô<ì20@@@@@PPPP]3#%3#‡Ë(˰Ê(ÊÒÊÊÊÁþ ‚ÿÁ µÔÌÌÌ1µ  ÔÌÌÌ0#"&5476322654&#"‚cL\]XbL\]Yù3b233`0ìwS@o?wS?oæQA#>QB#=®ýâ>ÿ;3#Oïþ’Åþ§¶þus&@  “  ÔÔÜÄ991/ÔüÄ90!#"&'732654&'+%#w,^/(I CK@]$]m<6N6ÿÿñþubs ùýsØÿ/#ØWˆWÑþD¼4ýåÿ/#7!#œ@‰&þë&‰@Ñþ¶ÂÂJéþ9ÿX#"6533273273"]LtÚ&uhf,vie-vGÜtþ‹R––•–þâƒþÿ“@ ‚ÔÌ91Ô<ì90#373Ä“­‹„å‹þxõõ:þºÿ“@ ‚ÔÌ91Ôì2903#'#z“­‹†ã‹mþˆõõuþëÿ8&@Ì H HÔìÜì91Ô<Ôì90332673#"&546xxWUPjw ³‹†‘ÈADJL’€v@þ¸ÿ:#454'&#"#>32´w%)WUow'º‘A3þB"%JLH9f0þöÿ5—@!  ““ ÔÌ91Ô<üÔì99990@=     ]@           ]'.#"#>3232673#"&…/#*/}rY+D&/ )1}qY,Bþ^1KNˆ’&/NM‰“hþ›Ûÿ/@ ÌÔÄ991Üì0!!…VýªÑ”ÿÿþÑþmBÿÿþÑÿ]³<ì• #"'&'.#"7>32326•"VšOZg Gb3O™U"YS5`D i]F• ®;73 !;?®<6 7=Ä&h!5&ühh¤¤ÄÑh5!ÑĤ¤ÿ¾ÿ ¼' MùN`LÐMÿwÿº@'/ZsVFFJþ ÿÁ27654H#3+723]YcL]þl$-A#>bo>wS@4þ€ÿÊ3!735@‰&&‰@þ€JÂÂþ¶ý ²ÿ/!!±jýÙjN6þë6ÑýÚ&þbþê²þ9èÿX632#6#"#6'"#72tLtÚ&uhf,vie-vGÜtúRþæ––•–rË_‡ '7'77V–M•dre–M•drI}`}}a~~a}}`¨Â)Ò.7>77>76'&'£‡RN/£‡RNÇ0PQn +0PQn ÿÿËÑ &ÎÎÿÿÿ¾ÂÁ–ÿÿDøq‹þóðž7"#6%62#&%¥nþÞþïšv.êéßð.vdþù®Žð<<ðŽ»tf3¼¡¾ÎtòþµþVH%#¡¾ÎHþò“þVYÿ¤ #"?3;L„X$• 3þV·—¤hÿÿËþá#'ÿÿ?îffvÿÿ´FÏØ'Êirjÿÿÿ–f'Êþ>ÕÿÿÇ/þ`yÿÿÿƒÍf'ÊýDÙÿÿÿQÙf'ÊýÛÿÿÿƒ˜f'ÊýDÝÿÿÿãf'ÊýÚãÿÿþÔDf'Êü•èÿÿÿ¼„f'Êýóìÿÿ‡ÏØ&Ëüÿÿÿ–Õ$ÿÿÕ%ÿÿEÕGÿ“Õ%!3:cýßeûyëõªyû‡ªÕÿÿ5ÍÕ(ÿÿÿúúÕ=ÿÿÿøÙÕ+tÿã\ð!7!#"32 32)þr!Ž€Pš™¾@@P™šÑLþ¾þ«LLBüý¬Ǫþ/’þæþ·þ¸þæbþzþ€~ˆ‡€þ€ÿÿ9˜Õ,ÿÿÿøJÕ.ÿ“Õ3#3#eÑëõ§ÑsÕú+#ÿÿÿÅ Õ0ÿÿÿú×Õ1ÿ÷ÚÕ !7!7!!7Ù!üA!\ý×!)A!üA!Õªªüòªý9ªªÿÿRÿãð2ÿÿÿ÷ÚÕSÿÿ3´Õ3ÿæÿÕ !!7 7!!ýÉ"!ü !6þª!õ!üÞëý¿ªªA@ªªÿÿ 5Õ7ÿÿÃDÕ<tZÕ&/3!737&'&7676?#7!67676'&'=­Oe-.‘sµ“!þ!“­Oe.-’s´“!ñ!þÆO3P6"IþÇnO3Q7"+v[sëësZtªªtZsëës[vªªü£*DžD*ýÉ7*DžD*ÿÿÿ9Õ;ÃìÕ67633!737&'&3^µO?g?CËCL ¶*“!þ!“*«DVLCËC?0BµÕü["W‘DWþ©þx¿— ÖªªÖ —¿ˆWþ©þ¼‘W"¥ÿ¼„´#73&7323!7676 D"õa6$=gðòÚ=$¨”ø"þ1"†Æ+-€þÌç-+Fj"¬† ¼7oþ’þȼþß…¬¬LIÞæ þ÷æÞþ·L¬ÿÿ9˜N' *9uÝÿÿÃDN' *9uèÿÿEÿçÙf&Êôÿÿ„ÿâff&Êøÿÿ|þVff&Êúÿÿ‡ff&Êüÿÿ„ÏØ&ËEÿçÙy +76'&32703;#"'&''&'&767ö±aSh#+68U…qœ¤þ½ Yo^D Cm5ÆUW6:˜¬¢ çìo‰·ÜikÕ*þ½%ý¡Û1)0œT*XmY*–œ)‡—ÿÕþVl!7#76'$ï`¹+^Ç‹F6¿ 9Tþƒd6ß97þ+!k;%èþþ8Eþçþšþìb6þÑþ=q'ª0½ þàAþV­`&+7323#å^1FÂzí¿ýS¾SD~ž°ýS]û þVª_ÿãH" 4"32676&%&'&76$32&'&#"76“Œº*)eŒ»)*fþh!2 Åf0"=DQR JD,  %ië\_88þÐêé¼88˜&ßÚÖÕÛÛÕÖÚL (=\ˆ¤ $­+.! ”—þâþáþÓ-—&„ÿâJm@0326?#"'&'&'&767676;7#"'&'&76?6?27.#"²YE$UØÞ^Çb$6{€ x@4 ' *hv~ hI)  ,BMQ¦X#i¦BÆþô2("P7Kpš°µ-*/6 B£6 .(³¤ˆ\=2 “þRè%#677676'&# !7!£„@EYa£D3' 9ýµYM‘ýì$f$ü®%#KOxsPWKL,#%5,*3àe¹¹þaþZþi|þV\{#6&#"#3>32\Ú¹ÚNq¯!{¸Ú¸!D»s«}¶û `—Ž·«ý‡`¨`cá‰ÿãHÜ6'&#"!3276 #"•%%*ŒfZ2ýË%%*Œf[þÔÒªHIþ¾êéªIH<⇙™‡â¸à‰šš‰8þwþþŠþy‡vs‡`;#"'&7#71lXn´@?*nÒ`ý+‘.0œ`bÔ;ÿÿÚ`n8{ ##'&#7‚øÃ™ýÝü#š1Eeú›<üÄ2ÆžÿÿÿÙþV‡`wàa`!367676'&'31]|Æj†e Pº4&ªÞ‘`üT|¬p5dwƒY|rNįätŒþRº&%#677676'&# 6%$67#7! ¼„@EYa£D3' 9ý’\-cþï3&ìÐ$$ý‹9%!ý¿*<KOxsPWKL,#%5,*áèp$ÅR¹¹þÝ¿ ª&Üþ¿ÿÿuÿãZ{RHÿÙÅ`!#3267#"&7!##”1$†%7-%M%qB"‚þT¶´¶`¸ýPH?… ƒ°œüX¨%þVz{6#"&'#76&#"32èVU65þÛÊfˆn¹¼=ˆ¢HS\…†µ)*`†…{žþêþïþÉWSýÉÆ<†üÞ¬ÚÛÕÔÜéþR®{$%#677676'&# !2.#"¿„@EYb¢D3& 9þüélaQ’F&<ˆ]­æ()HIKOxsPWKL,#%5,*8(8*,ÁA:àÐÑno{ÿãË` 32676'&%#"763!†;^$)eŒ»)&°@±,8˜˜êé¼84˜ñ$§ Go¹ÕÛÛÕÃs*’çþâ——- ™¸èŸ`%;#"'&7!7!!¡lXn´@?*gþ—#’#þ“jÌ0œ`bÔ¸¸ýã‘„ƒ`%"'&7!337676'&'1#%lþrÒn*?@´®§,4ºP4R}œ0.‘ÕýÅÔb`ÓËášs{Zƒw€f»v³tþV®h )"27676'&'2##"'&7673~A…^i`*)84 ŽY`53¡¢½N·NÇ^_4:™ G>d$(69g…;Ë‘ýRh]ßÝc[„þÙþæ–˜þn‘™›,„m£Js¾Øeg¯.þVÑ`#&+73 3;# zEþŒ¿ X›1F Ev¿ýôXœ1FþþúzýÖ å~ž°þ„,üôþ~ž›þVå`%67673#&'&733œCJe!|¹~*ž“N·N_f*~¹|!C2;¾·Œ@W¦ýxØ‘‡þo‘‡‘؈ý¦W@Ô2ÿã—`&#"&'#"'&376763767OpJoºUn"”Yº&p·¾´8,@V8)IªI V?E+8H`þøý¿{¹gLHk¹{Aþíþáâ>‘oRyþ‡Ro‘>âÿÿ‡-&jüÿÿ„ƒ&jÿÿuÿãff&Êÿÿ„ƒf&Êÿÿ2ÿã—f&Ê ”ÿé5$ # 7654'$'&763 '7676q Z¬­iM¼Kþ÷ þþðNCEB§¯ÒM þ\Ií,!2¦°T†pA{‰¡¥zýúþ‰á Ʋ—ÊÔþ‚Íÿ þýi¡˜õˆÿéR$ $6'&'&'&7!2#"'&3276 (*f«>5{BÇþÛ_ÐNwR«^YTT§²äÁuomÃM9T^yƒhp¿w¦¡‰{Aª K¤û~ÔÈþþ}ÆÕÕÈëþSjœ~9«Õ#6''&7676'&¿€‚F ~Ë~#*Tj}!Q’¿ïu6hU0rROþú¥ývŠ´~*+4ª0þr‰51_”Tÿÿþ„«f'ÊüEÿÿ9«N' *ÿúuqþViÕ'#&'&7673767676'&' ¸O¯Pg85¤tÃE¸E­Rh85¥vÁ [Bh)$7]þ¦¢[Bf*$6þV“y–§vaþŸx—þâþò§x¥GnÕ¼‡Fü½CImÖ¹ŠDÛ` !3237667%&# 67#7!±ý°C4FT°Wª_°QA1¹*\þäícîþèt3NB$_$¨ýþ«Óþ+Tý‘÷ýß3þÌ ¸ÿþþ`/%76#"'&767676676'&632767v‹þ蜧àp9Ž ‚ yN žà”Ò@ð{],p9Ž ƒ yN žà”Ò, þ–  ZMf lh©Ë|„TD‘Y|þ÷lpŒî"=àlh©Ë|„TD‘Y| lcœð›þVƒð #"32&'&32pPš™¾@?P™šþ“O¬CVLLBüý¬LK¡|»O ’þæþ·þ¸þæýÏ–"”¿ˆ‡€þ€þyþ|•"þj¯þVo{ "32676& #&'& ㌻)*fŒº*)e÷N¸N¢I^871Ò¼78˜wßÚÖÕÛÛÕÖÚü þm“w–.þÒþâþá–v‚þRÕÕ#"32#677676'&#"'&76)NÚd<;tzIEYb¢D3& 9êw]PGÇ­2e!+w˜þÍþÎþÐTOxsPWKL,#%5,*ËžnͱªÄþRÀ`#7! 32'27676'&'&'&76763¡þ›þô¤­96è»: '2D£aZD@„bIH))rYÁÄœˆþØþìþÈ*,5%#,LKWPsxOJonÑÔlUÿÿ\îÕ)ÿGþVÀ#!#"&'32767!7!676327.#"@dOW0]+ )b9­x¬‰Aþ¿<[Fx,L 0_1ªs£ q_K!¤s¥’Á7oQ>¤dŽ 1ÿüÊÕ 7"'&7 6'&724ÀVþ‰9-Š$æDO6÷ü¾,9-Š$æDO‡þ[~ý,`*l#½FR¶Úþ‘`*l#½FRva #!3aþ<¸lý&½¸þ›püÆMý]¤þVwð!#76#'0#0?&'&zªrdc&¯A‹qXþßá.Ya*uh.nËm3òƒi“FKýŒI MÆfþÕþñý½þ7þ³LÊó[OFëýÆ5±`¶4 þóx #&'#&' #'@þÖ¹»#ýÚ¹¤I(¢Ó -ȹX‡¢ÕèVU65þÛÊfˆ7á!»S\…†µ)*`†…þÆppª¬>„žþêþïþÉWSþ㪓¬ÚÛÕÔÜÿã1ð70732#"7>3 !"&)=œXÅÿ<<‰ÅV·V)Uª[ïGHþtþá[š5Ï=@0230@=Ï))þgþ’þþj)ÿÿsÿã¼ð&-y‹ÿÿÿã1ð'yÿc1ÿÿ5Íâ'C„|Iÿÿ5Í4'jW$IPþ*k×/32676&#"##7!!676767632#"'6¢K Ž'QOqj_2W"NËö!~!þCf-5%G— H ?-V6‚€÷Sþá•Ë —Ž*\«þo-ªªýó* % T päþFþèwuÿÿEâ'v}|Gpÿã¸ð 7# 547!2& !Nmz®)ª°þáÁG°Š)þ„{\Is!•WÆñ}ÏRI¿sŠo™RÏ}˜tþÿªÿÿÿã{ð6ÿÿ9˜Õ,ÿÿ9˜4'j6$:ÿÿÿçÿãNÕ-ÿ\™Õ !%326764&+32+# #726°Z™ K^•u·7þÒϬ1=}øì Š’eBS¦Ž‚4tyþý¨Â‡6þåã+úþÆý÷Wªÿ‘Õ %326764&+!#3!332#°Z™ J_þ¹ŠþuŠº"ºw‹wºu³b6+þÒ¦Ž‚4tyý)Çý9Õýœdý¨q@yBRÜã"=×"676767632#6&#"##7!ïf.5$G—ŸH ?,_ËZOqi`2W!NËö!~!-ýó* % T päþΗŽ*\«þo-ªªÿÿKâ'vP|NSÿÿÿùØâ'C$|Lÿÿ&m&W 2þ¾øÕ 33!3!#"Ëþÿ)ËþÞþv>«>ÕúÕ+ú+þ¾Bÿÿÿ–Õ$¾Õ32676&#!3)!jjï°®„¨DýEXëx@"(þÎþùþF"†ÉýÝ{’‰fþ>¿d¡ËÏÕÿÿÕ%EÕ3!!F"œ!ý/þÿÕªúÕÿqþ¾çÕ32!3#!3!!_M0¸4ZTþÿy_ª>üÅ>+ÑàþB9,¹þ¾ìL ÒúÕþBþ¾þþ×àýƒÿÿ5ÍÕ(ÿ~BÕ#333##'‚ݪϨt»tÏþlƒÅ`}Z»Z5þ¤{Zý­Sý­Sý¦ü…Šºþ0кývÿÿÿîÿãNðÿùØÕ #3!#"ÃïçþÞÃïýÕû3Íú+Íû3ÿÿÿùØm&L 2ÿÿÿøJÕ.ÿs×Õ #726!#S1?zùý Š’eBS.þÞË+úþ»þWªú++ÿÿÿÅ Õ0ÿÿÿøÙÕ+ÿÿRÿãð2ÿ÷ÚÕ!#!#¿þÞËý×þÿËÕú++úÕÿÿ3´Õ3ÿÿsÿã¼ð&ÿÿ 5Õ7&Õ+7327676733§Z[:UL\”!mQ770×Ù–ÕÕ©žoJ+'¬/.M *5üÂ>0©Õ!47%73 #7&>4&'03ù Ë Y3øþóËøe ®«s;ªtCŸ¯ÜoS zz þùÙwþüþ¬ ˜˜ ȇ{Üý{ÜW‡ÿÿÿ9Õ;ÿÞþ¾¿Õ #3!33#""Ëþÿ)Ëþÿ†_ª>ÕúÕ+úÕþB§ÕÕ47332673##"'§dË_ /mu€h{ËþÞË€›~·Dá¦MþAr(Exú+’:bÿáñÕ )33333Ïü"ºþÿàºþÿàºÕúÕ+úÕ+ÿÊþ¾ÚÕ#333333#6"ºþÿàºþÿàºþÿ†_ª>ÕúÕ+úÕ+úÕþB;Õ%326&+ !7!32#~й3€ŒŠþ©þû!ÏuŠûÖ++þÒú¦“ ”ý)+ªý¨âÝÛãÿ¯Õ !3%327676&+ 332#"ËþÞü½[f\G\w[þ©"Êu[ÂÖ++þÒÁÕú+¦J8–…”ý)Õý¨âÝÛã3;Õ%326&+ 332#ê¹3€Œêþ©"ÊuêûÖ++þÒú¦“ ”ý)Õý¨âÝÛãÿãLð"'7 767!7!64'& 763 >°Š)}y}|2ýˆ!sDþ‰±)ª°xKHþtRÏ}“”çª_Ö@˜}ÏRÌ€Às‰þ‘þjÿÿÿã÷ð #"32332 ##3ã€(lk•@@(klþoJÿÊÊ{LKþïþlu8o‚Ë#Ë ’þæþ·þ¸þæ½Ciþ€þyþzþ€jMýfÕÿ»þÕ#.5476$3!#! 3!!"Eòdx )1öÒþÞË{þÞþ'ôgþù²š'•e0:ÒÞú+wý‰Ù¼‰)ÿÿHÿã?{DGÿãs7 -65# 3 6  &546?6767676%67ZÜþäTOŒþF¼™8þÐþ-›  12¸3&+%5ôdSÜ2/bLþP`¦ª{ö–WjþâþÓøY˜§¾•I¹UA Ž  +tšd`#!2#!327654&#32>4&#>ª™,Ç€CžyÁþcu<äU2D:VþÄGï_{8k`ŠSâo4ÚnTÊþÏ+8Y+Jþ9þ“piEO”^`#! ½¸ÚðÊü6`–ÿàþâx`327!3#!3!! UC7xQì½yU–8ý-8è „Ÿþ„4D$þâ´Æd ü6þLþâÊ4þòd÷ÿÿbÿãf}HÿÎð`#333##'2Ž Ç«T¨TSÇþÂx³X‹D¨DEþÚÌ”þP°þP°þlý4±þ¡_±ýðÿÿBÿêA{ÿV‡` #33#’ý|¸Ú¸„¸Ú¸)ü×`ü×)û ÿÿV‡H&l‰ÿÿÚ`úÿ±‡`!#!+73267vÚ¸½þ_0%VjZº7#UuL!`û Êõ½þÑj–v®ÿÐ` 3## #3Sý¸Ú¸þˆ¸¾¸Ú¸­³û åþáý`V‡` !#3!3#Yþd¸Ú¸YçY¸Ú¸ýý`þ9Çû ÿÿuÿãZ{RV‡`!#!#²þ½¸ÚWÚ¸Êü6`û ÿÿÿþþVh{Sÿÿœÿãq{F1t`#!7! ½¸½þÉ&Êü6Ê––ÿÿÿÙþVÉ`\IþV~.473 #>4&Y}ˆJ6sØtSûâP¸PÚsTýàN¸ʦ}‰J7Ö™þ‚™uœÑâ® ™þgÐâþQþõþs€ü©¢}—oÿÿÿº¸`[+þâ[` 33!33#+Ú¸½潸½ŒU–8`ü6Êü6þL݈b47332673##"'&Ý G¸G¹XvMa¸Ú¸[:”‹ŒT;‰0:oþ‘‰'õûžÒ+R8Â` )33333èü(Ú¨½ð½¨½ð½¨`ü6Êü6Êÿÿþâ±`#333333#Ú¨½ð½¨½ð½¨½U–8`ü6Êü6Êü6þLng` !!2#!# 7654+‹°Xѳ(þøÖþH½ø #ãøF`þ;“p#ѤÊüϵŒþ—ÿûÖ` )332' 7654+# þïÚ¶X[ÑfM þøÀ#ãSFÚ¸Ú`þ;S@p#)¨¤™µŒþ—Çû `X`%32676&+3!2#.ø‚‘pøþäÙ¸XÑÌAþùÖ™YZ^Xýþ`þ;§þ°¤aÿã6{? 67!7!654'& 763 !"a&gfÚ,ýâ.Hþ¥¢&© tP6þŸþü¥9¿yÕ°oGp{ÁVœk£KWþìþÈÿáÿã§{ $6764'&"3  '&547##3–&#˜¡%,þ«ŽB:„SþäþÍO9Ž^¸Ú¸úÆh—4lôÁk—¨ûèíþVþçŠd˜:Aþ`;E`3.547>3!##;#";m0{ !ú–Ú¸YÁþ¥ÊT7äGã8ƒßn]*4¨šû Çþ9á;ImVaÿÿbÿãfm&Câiÿÿbÿãf¿&j#¯isþV63#733!!63 76654#"s¾¾¾U¸UÀþ@M‰òþ ~ä6 ¸Š¯!3Ñ´þLþsÃþ×FVýs_¥A;©·«þûÿÿ”·m&vQgÃÿã‡{%# '&!2.#"%!3267ÃR¥Rþütt56aQ’F&<ˆ]­sU,ýâ@H¬`¤M9++œœ8*,ÁA:pS‰°dq;>ÿÿsÿã5{Vÿÿ=ìLÿÿ=¿&ójÔ¯ÿÿþVÛMÿ§`"%2654+##+73267!32èÐ(² F ½½å0%VjX¼'#UuL!N5XŸ´)þø™Ï„þ—™Êõ½þÑ€i–v®Žþ;“p#ѤÿÔy`%27654+32+!#3!3»Ð#² FdŸ³(þø¤½dþ”d¨Ú¨YlY¨™µ„þ—“p#Ѥýý`þ9ÇJó3#733!!63 #654#"J¾¾¾U¸UÀþ@M‰è>¹> ¯®!3Ñ´þLþsÃþäK^þ¾BA2²·«þûÿÿÚm&v0nÿÿV‡m&C@lÿÿÿÙþVÉH&w‰rþâ£` 33!3!#rÚ¸½罸Úþ 8—8`ü6Êû þâf;Õ%32676&+32#!!7!73!~й€ŒŠJ*ŠûÖ++þÒúþ¬×þû +Ê+q ¦“……”zÔâÝÛãQ¤àà¤n`733!!!2#!32676&+nøT¸T©þW;ÑÌ !þøÖþH½ø|—wyøÍ“´þL“þΧ¨¨¤ÍüÏXZZZÿÿtÿã\ðaÿÿ‰ÿãH{E@3!3!F"ò?§]ý/þÿÕ2þ$úÕ”œš#!3¶¸Ú8=¹b¨üX`:þEÕ !!##73!!Ó#!ýݡˡ‚!‚`œ!ý/èªüÂ>ªíªs^` !!##73!!Π!þ`a¸a‚!‚Xð$ýÈžªþ ôª¸EþfÕ#!!!2+7327676&#›ŠË"œ!ý/V7ºZY.<4€~äL!>†GE&8]|Çý9ÕªþFwrîþÎþô|zªKKÂ"Ÿž”þV^`#!!3 +7327676'&#«_¸Úð$ýÈ;ú:B,5)edµÁ¬n*14! )†çþ`¸þÏGQåþòÖ``œ07“ª )ÿ~þ¾BÕ#3333###'‚ݪϩs»sÏþlj:`ª?`}Z»Z5þ¤{Zý­Sý­Sý¦ý/þBŠºþ0кývÿÎþâð`#3333###'2Ž Ç«T¨TSÇþÂ_MU–84X‹D¨DEþÚÌ”þP°þP°þlýÊþL±þ¡_±ýðÿÿÿîþuNð&Kª·ÿÿBþuA{&kª½ÿ÷þÈJÕ%3###33åt]Ë<)þªºqË"ËøíýEªþ8ì¤ý¸Õýh˜ýžþìÚ`%3###33ã†Z·6*þÒ¢W¾Ú¾[>àýõ¸þ4Bþ?`þ/ÑþZÿøþÈÙÕ!#!#3!33#¶Ê‹ýÕ‰Ë#Êv)vËþþË^ËÇý9ÕýœdúÕþVþìˆ`!#!#3!33#­¸bþb¸Ú¸WçW¸¶·Z¶ùþ`þC½üXþ4ÿáKÕ #3!!!#!"ºwlw"!þ˜þÿºŠþ”ŠÕýœdªúÕÇý9` 33!!!#!Ú¨YšYðþ¸½¨dþfd`þ9Ç–ü6ýýÿÿsþu¼ð&Uªdÿÿœþuq{&uªh þÈ5Õ !#!7!!3#?Ìþ+!t!þ+ßË^Ë+ªªûþ+þìt` !#!7!!3#c¸·þÉ#&#þÉ“·Z¶®²²ý þ4ÿÿÃDÕ<±þVÉ`33#±ÃŸóÃý~VÀV`ü”lû²þD¼ÃJÕ33!!#!7!7Ã×ìëÙý !þöRËRþø!Õým“üÉPªþ\¤ªP—þVÉ`333##7#737±ÃžôÃý} ÈÈ/À/ÈÈ `ü”lû²5–ññ–5ÿ€þÈ0Õ%3### 33çg]Ë<ñýøÚŽþØÙÛ»Ùý¹ªþ8ƒý}¾ýÍ3ýBÿßþìË`%3### 33±‹Z·6ñþbÕ*þ×ÌÚvÏþ¸þ4Áþ?Hþk•ýèÿú×#6&#"#36?6?2aË\Nqj`2X!PË"Ë„+74H—0ŸI >ôþ Ú—Ž*\«þc×ýU'% T pÿÿTHKÿÿ9˜Õ,ÿÿÿ~Bm&J 2ÿÿÿÎðH&j‰ÿøþfJÕ32+7327676&+#33·]Y.<4€~äL!>†GF%9]|—rË"ËøíqwrîþÎþô|zªKKÂ"Ÿžý¸Õýh˜þVÚ`3 +7327676'&+#33x::B,5)edµÁ¬n*14! )†Ý/W¾Ú¾[>àwGQåþòÖ``œ07“ª )&þ?`þ/ÑÿøþfÚÕ%+732767!#3!3Ë4€ãL!>†GF%vý׊Ë"Ëw)wËhþòzzªKKÂ_ý9ÕýœdVþV‡`+732767!#3!3©)edµÁ¬n*1fþb¸Ú¸WçW¸Ö``œ07“ þ`þC½EþÈÕ !#!!3#Ë"œ!ý/àË^ËÕªûþ”þì^` !#!!3#L¸Úð$ýÈ’·Z·`¸ýþ4_H #Hþϸ1ùáÿÿÿ–„m&D 2ÿÿHÿãJH&d‰ÿÿÿ–LN' *3uDÿÿHÿã?&jdÿÿÿoÕˆÿÿÿÑÿã¾{¨ÿÿ5Ím&I 2ÿÿbÿãfH&i‰ÿÿtÿã\ðQÿÿpÿãW{–ÿÿtÿã\N' *+uÆÿÿpÿãW&jÇÿÿÿ~BN' *WuJÿÿÿÎð&jjÿÿÿîÿãNN' *$uKÿÿBÿêA&jôkÿÿÿàÿäÐÕyÿÿÿôþL”`5ÿÿÿùØ0&L 7ÿÿV‡ö&l‡ÿÿÿùØN' *+uLÿÿV‡&jlÿÿRÿãN' *+uRÿÿuÿãZ&jrÿÿtÿã\ð(ÿÿ‰ÿãH{ÿÿtÿã\N' *+uÖÿÿ‰ÿãH&j×ÿÿÿãLN' *ÿùuaÿÿaÿã6&jñÿÿ&0&W 7ÿÿÿÙþVÉö&w‡ÿÿ&N' *5uWÿÿÿÙþVÉ&jwÿÿ&k&W 4ÿÿÿÙþVÉf&wŽÿÿ§ÕN' *+u[ÿÿ݈&j{ÂþÈÙ× !#3"'&'&7332767673ë=Ë^Ëj+75G—0 H >,ZËUNqj_2X!IËþÞþÈâ$'% T päÑþI—Ž*\«zú)üþì‰b!#3#"&73326?3ö6·Z·J'A^s«},4¹4Nq¯!(¸ÚþìÌ~5" 2áä þõ—Ž·«Îûžÿÿÿ¯N' *+u_ÿÿÿûÖ&jÿÿHÿã•ðRÿÿ„ÿâJmøÿÿRþòð4ÿÿbþV{{TÿÿR`Õ:ÿÿ\#`Z:ÿÄ·Õ&>73&'#".73327.'jA,ÕÊÉ?-9dQL}¨n£bÉÊÕ *_VM73IÊ3_,@ Jûô\’9 ž):D;x·| û¶,\L06k2ÿíið#76.#"!!#>2@Ê+ +`UVqH% ]!üúWÉÈcºÜ£akß,[K00K[,þ#ªþ= |¶x::x¶|s`ð&##!".7>32 >.#"3!`!}WÊWþój af¹on¤`Hu *`UVrK- &]V mªþ=Ã>ƒËÊ€;;€Êþ‘µ7kT46b‡¢‡a6Lð>23##6.#"#kcºÜ£aQ»!»WÊÕ +`UVqH% +Ê |¶x::x¶|þaªþ=J,[K00K[,ß@ÿã›Õ".73!!32>?3ôcºÜ£bÉÊH!üúl *_VUsH% +ÊÉ|·x;;x·| þ‹ªýÕ,\L00L\,ßÿùšð)!!332>76."#7>2‹I^lld'g!üD?Ë32€ˆ‡tW8m¢€bGË!~¨Èسs%^­™€cA ªK¡1\‚¡¼i°n00n°¬ï”BB”ïÿç¡Õ 7!!3!!Ò‹!ü«"ËI!üꪪÕþ‹ªÿíiò#76.#"!!>2@Ê+ *`UVrH% ´!ü1ÈcºÜ£akß,\L00L\,ü`ª |·x;;x·|ÿ›ÿã¿ð*:"#>323##".>;7>&32>7#"û¸ƒ\>°Ã´qŸËxw­f ƒ"ƒ8Ro†IHpD.To…HŠ0þ³ .#":/&8Š$8-L1j«yüs¦“Ü’IK•Þ“4¯þãk¥q;3l¨ê­r8{­nüÚ¨m?AkP@ÿãÇÕ&33##".7>3!"32>7ÈÊH}!}Wg“ºnoŸ\m–»j þÒVuN/ "[VUtK( eÕþ‹ªþBÊ;HÖØ‘KªBq“¢”pC4Tk75Õ#76.#"#3>32 Ê, +`UVqH% ŒÊ#ÊT=ŽOn£aîß,\L00L\,ý3ÕþP&*;x·|ÅÕ3!!+ËþþÑ!üdÕúÕªÿÏÿã¿Õ2>73".67##3ÓŒ8`?,Œº‡;_ŒÒ{8e·¸¹!ºH`ý1Kf>>fKÏýIw«o55o«wüOÕþ‹2ÿãð*B33>32.#"".67>7#2>7>.+Ç·04<†“žR<[NH**\°OaŸB ëŽ,5NkŠ­Ô˜e8 ]@Š£ SÕõ?eG% ×F6:4T¡ïžSŒvT0-Tv¨[€çeþ4?yl[B%#?Wgu=@ykX@$aëš…Õ!##".7332>73«ÊT=ŽOn£b€ÊŒ +_VUrH% Cʯ%*;x·|ý3,\L00L\,X/ÿÊÀÕ%.7>76$73(ý0R8&FhG‰0±wîuáË®€M-8–Ì@/7B(FO[3b²V;þ‰3qqm`M-ÿОð1<.'#".>32>76."#7>2"3267.Ž8K\4P2°4gàpHpGEd€Hg±KEg8l¢€cGË"~¨Èسs%üÂ=W9?LŸK9}T¢™Œ=nƒf6a-S^&JnqO)MBaé‚‚´n10n°¬ï”BA“ïýkI‚HME23!6.#"#kcºÜ£a¨»!þ{Õ +`UVqH% +Ê |¶x::x¶|üžªJ,[K00K[,ßÿð ð$"!".7>7>736$33!ëmþî¤9 üö<`? {w?{;Â䀯=™ü„Y[ ,D,¢ò&KA·®üȤ8Y>Pâ•Q“Cþþ®¯¾üzsž3". y-^ÿöÿã.Õ!#".7332>7©…!»¨cºÜ£aÉÊÕ *_VUsH% Õªüž|·x;;x·| û¶,\L00L\,8ÿãŸð9 .732>76.#!7!2>76&"#>32V^–Ñþô±cÒ 8h |Y8 ?iIý°!PBeH, hìÒ^аedd& 1EW1@V- ¼_«‚MMƒ¬`AqU1.Ql>?fF&ª*GZ0vpq{[”i88g‘Z;hS<G`s¨ÿã„Õ".7#7!32>?3ecºÜ£b¨»!…Õ *_VUsH% +ÊÉ|·x;;x·|bªû¶,\L00L\,ß8ÿãhÕ/2>?3".7>7'.+732'.#"009m¢aGË!~¨Èزr& z“›AR3k%-!{3zBÑ)à %,.H„oÒü¯n20n¯€­î”BE–í©¥òN(ªÕÔg N|ò!#6.#"#>2©ÊÕ *`UVrH% ÕÉÈcºÜ£aJ,\L00L\,û¶ |·x;;x·|mÿÆŸð'6."#7>2#732>¥09m¢bFË"~¨Èزs%!HYee`(Õ)ý:*ÚZ.H„oü¯n20n°¬ï”BE–í©q¶hD!cÒEÔeNWÄð##7>32#>.9ª¾ªYvN0¾ h¤á“Ãb µ¾² "ZGü”l Ip•X*9‚ØœVVœØ‚ü\•O•vOÿøžð)E6.#".67>32!!33267>>.#"32>I &H7VpC  -Gc‚¢c”¶[ p•¬Sg!üD?Ë(Lf9  +L>/¿2R91AGH 8{vlQ0e¬â~yåÁ‘%ªL¢.+4^êdªzEEh|7)=(4[{G)0nw€ÿ£ð>23##6.#"#kcºÜ£aQ»!»WÊÕ +`UVqH% ÕÉ |¶x::x¶|þaªþ=J,[K00K[,û¶SÿãÐÕ332>73".7&ÊÕ *_VUsH% ÕÊÉcºÜ£bÕû¶,\L00L\,Jûô|·x;;x·|(\Õ332>733!#".7iÊC +_VUrH% ŒÊþþä!þRT=ŽOn£a`þ¨,\L00L\,ÍúÕª¯%*;x·|-ÿãvð=332>76.7>32#6.#"#"..ÒEmDAt]@ >YfmeW9Q„µtsŸ\Ò /WA@dH. 1`€†}X&a•Æw{¶p&¿KuO)&IjE:S>-&$.;SqLQ‘n@@n‘Q4W>"!;S2BV<-1?af`¥yDE}¯|ò#76.#"#>2SÊ+ *`UVrH% ÕÉÈcºÜ£akß,\L00L\,û¶ |·x;;x·|8ÿã ðD"32>.'2 .732>76.#!7!.7>PeC')VIBdG+*~j`! 0EW1@U- ]–Ðþô²cÒ 7i¦|X6 ?hIý®!&Z‰³L&AU`YC))CY`V@Ê:i”Y;fQ:Ibq9_¬ƒNMƒ¬`AqU13Vq>:_D%ª9DHY“j:ÿö’Õ!!#ãIø"ý¸Ê"Õþ‹¯üOÕ,ªÕ +3>.'.6>?3#^JjN9.&WHÁJlN9.&XIþt†F6Rƒ¿‡Á†žG6S„À‡Á³/g¥ð©k23k¨ð¥g/ûëW›ÜÜœVzzVœÜþêÝœWÿÏáð.>2#".'!!#7#7"2>76.¯VŠ¿ö¤[V‰¾{ HD:@Ô"ý,/Ê/¾"™œoK-2a˜lI, .£•_¡vBDv¢^`¢wC *þº¯ôô¯©(Hf|gK*'HhA>fJÿÿRÿãð2 ÿã€Õ)3>#"&'.6?33"&7>;7">.#2>d0HeE"IUc;l¤6==Â!YUŸÅš @k™g¶H|ŸPýÏ)/D/ 'A| #ZRŸRnI/T†i!  i‡T_–g83„‹EfC þ‹B‰ÙªÑ*F)ý¹mœd/üÐ5f–ÿÿVïža¨þ(Õ3#UÓâÕ˜þÁ?ÿÿÞõmvŸªñ%%#>7>73B˜ >Zs@5~sX˜  1O@;jV>,Mÿÿ'î²fCb}è*#>7632#".'332>76.#"žZ~žZ@BC}Y) 4Oj@*M=&¥1*,C)13‰¢ñs³ƒV$MvR3YB&0K6 %*?*  ßñ3!Ÿ9Œ!Ìñ#©z5ÿåØ`)%#".673327673327>73#7#"Ý0uKDT% ~¨}GO*++}¨}/JI(+}§Ú§-o?–rHE.qÀ“‰ýw“9=?äýñ78=‘sû `32O/¹/Nq‚­"_ªýVR¸,¸!D»s¬}¶ôô—޶¬þþV ¨abà]þVsw %#".7>32733## 6& û>©fe‘Rfޱed‰¹¾¨¨S¹þÏT\ ²T^þô‹TXQ—؈ŠÛ™RVT“ü/þV¬þRÙÚ¬Ú+þV3{3##6&#"#3>32 k””R¹ÙNq‚­"{¸Ú¸!D»s¬}¶ýÙþV`—޶¬ý‡`¨abàbÿãr3!!326?3#7#"&bܸUÑý/kPpƒ¬!.¹Œ¹!D¼r­{¨lþLýח޶¬ëý0¨adà]þVsw%#".7>32733! 6& û>©fe‘Rfޱed‰¹þï¨þŸþÏT\ ²T^þô‹TXQ—؈ŠÛ™RVT“ú‡‘¬þRÙÚ¬Ú7C )3!!!ý#/¸Uzý†¡%þLüÃþVO{#6&#"!!3>32O‡¹‡Nq‚­"²ªüž,¸!D»s¬}¶ýJ¶—޶¬ül ¨abàÿªþV´{+;6.#"#3>323##".7>32>7#"¥ ?qRM{^CË·+¸!-X^g=f—Zeh$hz‚>HlC Kfx7".7>3!33Oþí;lZD,ZŠrX? \\¿ð›P YŒ¿{U¹U¨Ñ:l›ae p;32¦¹‡Nq‚®!η€¸uD»s¬}-¶—޶¬ûݾý¤abàå°þV`!!3„‹ý½-¸þå ÿ¨þVÓ-327673#7#".6?>'&#"#3>32« JI()-|§Ù§-o?HQ 1 JI()-Ϧ€§g-o?HQ ßy“8=?äû `7'32>7>.'#"ˆ!Za”Æö¤Ye„œSìˆý¢.`POzY: !&™NzZ=`ª2onf*zΗUU—Îz‡ËR³!b—Òý·S•oAAo•S3omf*Bq— þV332673##"&7|¸ÜOpƒ­!{¹þÔ¹sD»r­|-û”—޶¬{ùöRadàåÿÿNBKú]ÿâ0E#7#".7>7.7>?3326732>?>.'±#;Pb.d¸"O_n;Y~IWƒ¬i8K+ CÇJ*  .'ýñ(N=MvV6 KCDzdG,± /{“§[ýÿ¬,J6Bv¦e`À´¤D-?N( ?OU100$ üÛEvV17]{DV3ywl'5{‰•+þV {3!6&#"#3>32 ¾•þ²ÙNq‚­"{¸Ú¸!D»s¬}¶ü/`—޶¬ý‡`¨abàoÿã°(;2.#"#7#".767#73>32>?6.'_2 56rtr5v±m%t¸!!M\k>\{ErQ‘ÒD¬ºý>5S0KsR2 OkHm— *MnD O†·rý¬¨,H4@qšZ’+Œ^ uAûŸXuF76.#"'>32ýt*?' Qy–œ˜|W >fG#MMGu+dqz@j£g%W{“—rIÏ/?$2msz~ƒ…‡D;`C$%6"e-H47i™cK•‰~q`LÿÿNB{QúvþVæ’1!!".7>7".7>?3267Ïý¾#9& =Xn|ƒ@-gR, IBre%5P ;N'#?)V¡Žx[:þå+A,:ˆ“‹€4 ElL<{7`q,`/'8% q<‰„s+'\þVÿ`(%#".673327673327673##"0uKDT% ~¨} IO*)-}¨}/KI((-}§þÓ§f-o?–rHE.qÀ“‰ýw“9=;èýñ78=<çùö 7>76.7>32%">76.tX{”—qI  ýt&>) mW", '1' 4K]hm6f£i)þH+[N:  ( AKœ†_ >cëOš‘‰}p_N+9 BI;=@#5ZRLQY45_Q@.5g•—4N3!ADFLR,RN=‚‰‘K?`B!!{$"#3>32!!7>76.‹>jR9 ¸Ú¸"Eµyc€B 8Qh@)ýýIqS8*XÛ4ZzFýs`¬dcF}®gS‚v9„4myŠPIa8ÿÿwÿåg`XúJþV~3326733!#"&J‡¸‡Opƒ­!йþ›¬þ›sD»r­|¨¸ýH—޶¬/øÓ‘Radà-ÿå¢{.!#>'&#"#7#".673327673>32ü¨| JI((ƒ§-o?GP ¨| JI()-|§-o?GP y“8=€eý^`32T‡¹‡Nq‚­"͸,¸!D»s¬}¶ýJ¶—޶¬ûÝ ¨abàÿÿ]þH›{J"Œ…`%!!3_&ý"Ù¸`,þV¡.!#>'&#"##".673327673>32û¨| JI((Ö§e-o?GP ¨| JI()-ѧg-o?GP y“8=€eû´ 32#"&&#"32]?òý¹wwý¹?©de‘Sf°fg‡'T\†‡³T_‡†þ»ccTVR™ÛŠ‡Ù—QV®ÙÚþTÚÿÿuÿãZ{RÿãþVº$+6##".'73".7>;2"6.#2>ªa™Ó‹R¸RKzdQ$“8FW8Ÿb“]% P}§f¯Vе`ý—;}„ k8vcŸ^ŒdAC‚ךUþ[¥7P2€,J5.-PpCHpM'þGH‰È™+OHBRýåZŒ`2üÒBu¡ÿã3326733!7#"&ܸÜPpƒ¬!|¹¾èþ_!D¼r­{¨lû”—޶¬{ü/¨adà¬$R%3#3#ÝÓ1Ó¥Ó1ÓþþRþ\£„ƒ$7'{vþüvƒ?9¤9>ÿôÿë—{)7&7676&767#"767#"763263 #6#"Ö? ?B ‰~ ?B (Ææ('õHÊ(&Ê‘\½–? ¸ !â‰sôBA?>BA?ýÍÉÊpпQQþ¾üÇ9ªŽ2ÿÝ“Œ,"2"76767$32632&#"# 76%7676¿€€`Ò,ÎΘåA-þÂþÒ èIòOža™L@3älþ^0&Ͻå%þÆJX4*o€”ä‰abþ©íu;\SfŽÕa‘ùÆŽ:F‚½78UØNÿìQŒ8327&'"76#"%67&76$ #&67 #"'632`24F616þÙC!/6ä!‡:p¸p2\©²¾ -;! ú9' 2«Ì'#Ìþu`þ0'"/Ü€6OÓÙþàþÖý¿A·¸K¥¥ %[9.ȵÀþŒ!>3 #"&?327#'&&776j¸Ýefy3ÉÍÖL¿x¯/F‚.×Ð B BC ¦quýôýþùðÐ Ñóßh!Ï ACBBˆÿÿ_š )"32676&2 6''&7632#7676r$# %!Eùec9}¸;V ÈØ#&Úô!OþÄÐf¸!*•` %"%:yxþÙý~)ŽR¦·Àh•††KKª>Üiþ´‚ 9"32676&&7656767$ 3276320! 76-676 $" %"YÏ)þ‚ÊÊ=(þqþê´dz€0y—*/F k?Wþ¤þ0,Só!þâsF3Ho %"%þìÑ…}@þ¼Ö~Y9pe·DØóþµQcFÓøâlWNn©-7V¼=ÿïÊ• ,2676&'&! 3%$6567&7'7$"%"ü"/@Up¸prþþ=²‘.<l³"$À~"L7’’—¤ $! $ýŒ®¸?ýÁý´=‘Qmê.°ºu½G4 ¡0ÿã‰{$"276$#"76$76g€ € Ö›'þÊþË&T*&çë''*ÚÅ( ë@@@«ÉÃþPßÈÈŽÇyxÌüÇHÿ⢡ *%"32676&"#" #"7323272 #6#"?$# %!Fz>6-U&*Õû)€Còƒ&"$‚…òC£¸ž+7žñ %"%ú&áþPÄÚÒ–Wþàþ©ü¶0Ûþà—þŸ{#$"2"22#"7#&767663 #6#"€€]€€<ð"$ÚÒ,r#§&#´‘#Œ‹uÿ¸ó|yÜ€¦€ýݹÃãI¾²edÕmúÛ%£‹>ÿã©{'&7766323276#6%$7"”B CC þæ"ÊØ!(þ×)*ª²$r1ü1®¤®cRsBþ¬þ°F;öÖBCACK±­ÊàÔØ¼Jþûüjeý·þ­h0šÿ×ÿ㿌 26#"73267$76767673!"'#@€@>þŠz]iFþé(+âî*ˆÙs€@ü0eœgÌÝÛýu©±/üÑþ²ssMÿïÀ|"267&76% 3%$ÿ€€þg+ܰ%'äí&þ±!&%<9‡¸‡Vþ þî€ýÒÚÄ&¶Ä¼—þѨÌ'´ýLþB&ÿïí"267&76! 3%$×€€þh*ܰ%'åì%þ± '%<:Û¸ÛWþ þî€ýÒÚÄ&¶Ä¼—þѨË'hû˜þB ÿïP J"32676&"32676&+&'#"'&7632'3273767&76676'7Ì$" %!ý“$" %"cYt…~@<w+ÓØ''íN f‹<¸<stZñ!)Ѳ! >‰@#­blbú &"$ %"%ûöIJTOšbßÅÇþo;„„4þË‹‚̨јP6A^g[Ãoþ¤PIÿïú$0+&'#"'&7632'32737673"32676& kb{dXt…~@=w+ÓØ'(ìN f‹<¸<stô¸üm$# %!,¤PIIJTOšbßÅÇþo;„„4þË‹‚èýå %"%2ÿïÖ} ,"32676&2737673%&'# 67&76²$# %!tn!<¸=#vi ž¸ž>þàhXtþÞ>.ºƒ 2äí,þ”!Ò %"%ü³§4þË®¥/üÑþÀIJ=ð¦%žùÛþª§ ÿï ,"32676&2737673%&'# 67&76Š$" %"sn <¸=#vi ô¸ô>þáiXtþÞ=/¹ƒ 2äî,þ“ Ò %"%ü³§4þ˯¥èûþÀIJ=ð¦%žùÛþª§ÿ¿ÿãÐ`3323!"'#"763227Ó¸6½Ð6¸¡?þxð>¶Æœ)`ý,þíÔüÅþ¾88œ–{‹ÿïõ ,2676&'&! 3%$4767&7'7÷$"$"ü"/@UÀ¸Àrþþ>±.<k´"$Á}#L7“ ‘˜¤ $! $ýŒ®¸Úü&ý´=‘Qmê.°ºu½G4 ¡-ÿﱌ +"32676&6! ! &%$&7676$" $"T,þ½ýó>96ŽŒÓþ¨màJGþ2þ§¼)Òà)BÛX $ $è8$Ü{¼Šžþþš²{ÌÑN&ÿ .%"32676& %&'&'&7!2767!"'676%" $"ºIl1þôèŠDã%,Ïú/MNèfQ!S6þÆå=(³wø!$ $•þ‰ýÔúÝT·Öë‰þ®¨rJco<ù7ÿåš{"326! %&$7623 76! %@@£ƒ$ƾ$âE#ßá#e·$!¦¢"SWø@¦¸¦D?@w@@@@L€üBE>©/™µ²}ÌþŸ¶µ ·©cbþºü©WZýšþ³Cÿ %-"32676&%$ %&'&763 76.$" %!þ<<ùú;z1þ É{#*Üí*E:8)"9]‘þÄþÀ B<S %"$Ð36þÑýŒûH9ª×ØG)#¯$67œšŸÿïKØ 6"32676&$76%$76!232'&#"%$'&76$" %"ÍT1$þÉþ 04žˆKZEhr‹”ó‡Z;UÒ EÖ?Oýñþìq\,à×)l”‹ %"%þùþÃ+DçüYl0þ•yP^d6QþÁþqt^}ßÖ]Fkÿ&ì¡$"2''&'$! '&7"32?6•€€þ\gR1“Êž×þã?F‡)+ÓÓ(#(&etm«Ôhà%þ¥ €û™†N)=‰»“mÎØÍÍÃdĽþÏÿÿ•ÿå€'aÿýuaþýúɘ ! &7623$76'76"4þþ¶£+åñ-* A H¤ý B8 ?;þÿ¨kÙØP$U.FŠM?>=(±{ ##"2#"73276#"I·O¸‹7ÿ¤NÚ&&åá&TR ;C >@{þjýËVÁÇÇ®þR777ÿÿüDZr'qû/bTì~i! ! !7 76! $%þ>=&=>þ?&'þºþ˜%»~?>þÂþÁ~»ÅTæîi! ! 3!? 76! %%þ>=&=MÔý©'&þºþ˜%»~?>þÂwJ„~»ÅTì~i! ! !7 76! #7$%þ>=&=>þ?&'þºþ˜Ð+î+%»~?>þÂþÁ~»ÅNÜÜTæîi! ! 3!? 76! #7%%þ>=&=MÔý©'&þºþ˜Ì*î*%»~?>þÂwJ„~»ÅTÜÜœý3<ÿ²"36676'#"7632š‚AB˜¦/D³$ªe?Iõ¼þÏo[$žºN[‹uÖ'ýŽ…ÿ¯"327"767&7623273â,óJHê … ‚ž@„@&²,þW’s> [yu?{EBXFþºÃ@Š '676%"7676! 6"3ŠÄoc þ¥A"!7Ùæ*‹9üŸ.`hH;È‚A?×~= h‚\$…kb8:;-F¡_Zkf2)<à• 73733##7<Ø*Ž*ØØ*Ž*¸ŽØØŽØØÿÿÿáækP˜ö<r 632#"326˜#ÔÐ#&ÔиLT¾´´È{-z!! 476733 654'&5473$aþ1þ‡c¾h ÛAåµ\ïþ??KibcW?3×O)$—çþ•YFö,þW9%3%! 47%67654#"&547! 654% !; -[þ þQ[|#½·™4_X Šâ¾ þóþ¶A F+þ,Q7654ßþí>±¾Ê)jS:PrYÌz™ Ÿ | ˆþ½f[þâþ|v °2K_[ ½ÿajËþºBOeµœ¨u>3Ö[Œ'! 47!23654##7! 654# 3 ý`þEþyeËÄ,2ôè » 9£Œ þ¿ÒþñIãïþdL] }!¯˜>>&þç-4ýT\Gôþ‰P?ïYNû#! 47)!"363654# ; jþ2þ‰‡CMÎþ"9#Y¸|ÊÞþïJÕ$ýÜOFU¶[°þÚ€þ¬GYH:åþ…Q?ë"´ .#67654+"#654+"#&54?!2363 Ž.ç³Ù(7 wK@(6 6)M”,3 ƒÂw \{h4[`5ÆìÚÀÏ.$„ÏþëN1Päþü-+¦˜®´56fØhhþÌJ\QS1! 476733 654+7327654'&5473ù\þDþp #w¯t ð@ ß?R×(öû¬Ú#'Æ©Úþ&79B·Z~“/(ÊI>3Ù‡È|0‘A'$É"Ë=TÀ0KþYÄ2! 4733 7 7654%7%ðOþ0þz »Þ'4¶þB ¦ ;ýñ hþÓ­þk+2"¥ ¨4 ? 3|g9 ›Ò€ 1Ì¿þ†þáb¥5\ ÷TŽôÒ¸ÛÁ[?§þÃ=4$OþÛ¥30¾“ŸÇ@DgûN{”RþŸ=bbþñJ^ ñ!! 4733 654&54767dþ=þ‚ĶÄá HÄç?™ áýý]K[îüK<ër'"xƒV”}|8;?ž-ÿùþY£ê%3! 47! 65'#z #¦Aƒ‹ýÊþ0×)†oâY¥vþ­"uRþû>þ_iý=ÏpŠdþ¨=v_-TýånlþY¢ 5! 476733 7654##7654'#"'73263236;2LþMþe ¢³¢ ù/‘e„40…J>X>HAV++3OLg!kˆõ +þ„34=ŸZ{~,$Èðê*!tþòÁÁW;|†_µbc¸·á1:NþWê <K!# 473; ?654'#736?654+"!# 4?!23632654+"32VGþ48þ’ ·Ñ/+ $PP7$ HS;(]þ¾þÑPwŠ0s‹å1¯xþ*FM¢2…2=þ”2:(!®Þe<'D—”¶:)i{Êþ „dyq+%È^(‘i!¡@5`:DU7?1½™KþVã 76?&54?!3676?654+"#654+"'6&#"‹IAÎ `_ƒ6Z•/ÌŒ˜"+ dd:"< < +L—2ËÂ/fiÉSÕë66PîggþçJ^Fô±§®Û>.„¯þË5<(KþúŠHAþöþÓØŽJTUþY¼÷"! 473$?## 47%33 73ïIþFþi ¼ó/0l¯þ‰28Øþ¤+ Ö.e³/þˆ'18'!¼ðôbMES§ÎÝB6Ùë \–'3! 47%3654#"#7654#"#323632654# 32ù\þYþfeÆÁ-8 n(€U,›Gܺ_¬ù þ¼Ýþ÷HüèÝþ#jJY!0%€Ò!#*!…âlÁÁÚ.8ý/RAòþ…J;÷(#$654'&# #! '54#"36326užAþŲ4@Ïþþ:r²îBpc•ÒÃ*7GÊ06RÚNáK\þ¸¼ÇAM<áþ×ýµ¾Vþô`M ³Öþäh†3þY %3! 4?! 654+7327654'&5473›¼’bý÷þT?‚Ô: XJ”¸°¤#ƒl·eƒ…™Xf”!þÀsaDdLúþÛž‡hþ¸‚*"Žˆ¸^)%w"]&/t[Çñ ! 47!233654# 3 cþ/þ‹hÆ×s²þƒÛþöMÑýûWK[sNüQ@ïþvM<ã]þ)6!23632#654#"#7654#"367  4?3$654+ ú<0¬dº¥™8 ( nŽ)8_Ámeþ+þ˜Â¿"GÊþéÔ@ÁÁÏDYM3bÐ#!/%~Õþßþ¡Pcýý\Pc&fMñrXDè&þYBñ5C! 4767 654'&547 547!33#;27654+"ÅNþ4þ{ c{-å2ƒM]ÿ AAKUcB¸ ½]]ýЄ§&ƒªþm%3=i^i$I&!³}S^Wá/8M ´þ0N¢i7H?bJ‰+ß'ƒÉ%~_ñ! 473363654# 3 gþ9þ‡«v)c¯vÎÔþîJÚ  ýó`N_äý¡„þ¤N^Q@êþƒO?ìHþYC×+%! 4767 654'&54?%773%í[þ.þˆ†U Ö>‡sþÐ#..’58#þʦ})þ0B@M}ŒYiG>2ÒBŒ‚w x´€èþó±†}J­”›$Lv?! 4?33 7654'#7327654+7327654'&5473ãFþ7þx ¼ ß'RûûdRûù[ëÀ¦úÄ™yŸuhþ˜-5>ee/'¾Ô*e–zL˜„Mš hŒ/.h~:PmþY¸Z! 47654'3!27654'#7367654+7327654+7327654'&5473­;þTþ> ;kE ¹ D]D ûgˆˆ†kŠŠ„oˆˆ†¥o¦¦z!¹‘&¸Žº‡|þÕW;F+ ŸÌW`EGÆÐáþ©5,ì ,#wކ jŠœ\‘ŽIy#B2)q¥""x» ƒ’0/!Iþó`#27&547% 323&'$654# r•a¼ jÅx>þÆF…)úqæì) Í#<Ûþö `þþ /M1·(Z¶õÿQmLI J†v–þjt˜þ|Žç 7&U¼þÁ6({”ù:FðŒ‘‘ý?Oþ®¡#p§þƒ*!ˆ#þY3+!! 47%$7654#"7! ! 654'7)SýõþX I]X{µ ©=` *þ•þ¹5 I;%¬7þY83<srg$zŸ8A:ð08ÔƒMþî.'Ï)&G%\Ln-RþYn('3! 654'7!+"'#; 3! 47)­m;¼¸À Yþ@¹D,÷2»Oþ;þu þýÌ—0-*Å’?ºÕ.0þ8Yã(!»þp#09 þWª$*!6?3! 5476%$47$7654! ©T­ 6þuþÃò7þŒþÝ -þ¬ÈC1 þöþÀk¹þ¿7@þë©už!yŒLLþæá(/çTKÿ)."Ã!)ü.'Õsÿyh"56&#"'6?&547%'54' |\_‚ZsWxšUäqð†¾ÕþÜ:)^ª_‡ytJfƒÞFOµ÷Èþ«=%š¢þÛSD@–b*“Ç2Ãã 3#3#3#À"À¬º"ºþ½"½ã°½®è®sõ‡2"5476;%"654#"32‹¥ 7Ö¥ @$¹ëþþFÇap% Xx$¬-8þã²0<LµRQžÂ(mº2&qÿã{ O3267>54&#"326?%!>54&#"7>32>32+3267#"&'#"&5467ò1}i##N;ZeýÃD;Sjþ+ïaUF5";„Hj‹/]€˜ñàuUM1…L#OŠ8Rv2ŒPy¤H'!b3Cšƒ'\iÿêV{0#"'&'732676'&+732676'&#"767632r53þíÑQXZd cTTLŠ¥ @?‡¦Ÿ–½PP­c_^T"f]^Vþyx ±A@^†ž § VJ=+,nQb54"­[\¦m” þP¹d %!!7!!!#73þ)¾þ“’þ“¡þq¸-¸Ñü¾ý½éÿÐÿãÎ{,8P%#"&546?!>54&#"7>32>32#"&!3267"3267>7>54&é:‡PzŽöaUF6#;„G_ˆ":Q™;'8´uP|4þ·B=SkÉ<`(HCA_(Jb?@˜…+ƒTZ[nNX:2¬)+E@AD¦œ6†Ny»GfkDªL8GN€€dGB,•jl‡ MTEF5”`V’$QWõ/µ{  #6&#"ö71Ò¼7Ã)eŒ»)/.þÒþâÖÚÚÖôÿã´/  33267´8þÏþ.¼8Ã*fŒº*/þâþÒ.ÖÚÚÖ+0[%!7!2676&#!7!#áýJ$¶—£œ«ý‡$^$¨WD"þþ¸lp‚Џ¸2¨r¬¨Vÿþ$W?373!7!2676&#!7!#W'Ž(A'Ž'#þ#æjxexþE$$v:&"¾zÌ̈ÊÊýü¸lp‚Џ¸2¨r¬¨+S")7!2676&#!7!2676&#!7!#rB0çþßýw!í}oåý ð|påý!`!`6, YÌ"iJ‡o¨5FP;¨9JI9§§!c?Le«œ…à !3#'!#¦Ù lš~„þ¶n„|þUü¼ÚÚ¤œ!à#3#3!7##3!Õ0ÂÂ;áþª)Ýit¤:ÓÂTà_ø_þÑ_ÖÖD_þP°æœ§à (3267654&#3267654&#%!2#!²;—okIjT1•[_=]þþydUZF½¦þê+þÎEO2BXü?F(1]bFMX b8rt木à 267654&+2+µ ›$O¡=~ÏØ‰*óØ¿¢ù·N9Poývçªu;IÖËDûœËà !!!!!!.þP0œþd;¼ýÆà_ø_þÑ_ûœ×à !7!!7!7!7×¢ýƺ;þdœ0þRàü¼_/_ø_ŒÍï!#"&547>32.#"326?#7!`<†L²‚(ö´¡¢z…Ãàü¼°ýPDýP°Œµï654&#"3267 &547> 'a`s$'`as©*ÆþÂY*Å>Z=hG6qž¸hF6q¸ÚרaJ^ÛשcIà 3267654&#%!2+#ý=”XsHYþÿy»ž”AƒþÆSJ1H]oP {þ°Àœà #'.+#!23267654&#’.9"T‰G C>zD€¢›|yþà:‹\hF[' ?]äÓZ4þŸDmNShPþ×IK/CAœ à!!#!SÍþÚ€þÙà_ýåŒãà33267>73#"&'.540dn  F67Q  o€d931qCBe#% ÝýÉ=4!!!!4<8ýý€l$! !#D7œ>à 333# #5|*Ã…Þ|þÑx ßyàýYÁþ>¨ü¼ñþ)Œ¨ ."326?#7#"&546;7>54&#"7>32¯KI+3A7]ˆ}Ot.{F`s§›PI6~FD{8u‚× E)/7wg+þš]58]Nm„" 03e\Q:&Œ« 03267654&#"3>32+3267#"&'&54"&eu6D`‡~Ot1}Pl[¶™›;];@Ez8WrÓ??#6vh+f]85]:im+9g..-)Œ² 73#7#"&547>32267654&"-tˆt'k?€W !º@Vþ‰ -¨r .¨p¿NýO/0ŽP2;™®0þç8,1]{w7+2^zÛŒö O3267>54&#"326?%!>54&#"7>32>32+3267#"&'#"&5467¥ NC2%8@þ— +%4C þØ8 =5,[!&S-CXY:Q`˜J 51S02V$3K X2MZ )7",Kà) ',GH.P3>,1 `.+-,QEpz1 +/^%##%VIG4Œ³%267>54&#">32#"&'#3L5V$@?5V %C'h@gs4-0ŠN>Tu¿uã304‚=GH320‚?DKÜ/0thQ¡=@G0/OgŒÎ%"3267>54&3#7#"&5467>32h7T"@@5W#EkIt¿t)h?gr3+/€N>\Ç103€AGH311@CKDü™O/0ujP¢54&#"#"&5467>32!32676RIM€ŒB~AŒ’KC4EuŒþb\8ƒH  CKeUþ¯}wX¨=02€k8, NR $Œ­(7!7654'&#"7>32#"'&5473267. ö!0m8LH€9¥I2 !Ý—‡<'w$UT‚»2!<&8 fW<\*0–³Q6O)3 /bW*§0.547>32.#";#"3267#"&547>H9­ƒ3q?>j0Vh IUid^x \m>w5@v6 ˆoð?# KX ]0*,Q>- )5a[C=S*§0#"&'73267654&+73267654&#"7>32ÐH9­ƒ3q?>j0Vh IUid^x \m>w5@v6 ˆo¾?# KX ]0*,Q>- )5a[C=S¦¿.267>54&#"#"&'7326?#"&5467>327302S#G?a…HO"¨œ3d0.c2^g%nEar2-/ƒF?`tí3/2}32#>54&#"#>54&#"#3>32ÑN16A PiN  05OiN /3Oj‰j F)/:Ï&)=3M<þ•g3B $H}þ™g6@ # C‚þ™s6"#*+­¦+73267654&#"#3>32›XŠht9HW&HQnMt‰t+vHl>!þpmwXEG$%?g`þžs^67d;*.Œ£ "32654&'2#"&5467>›gŠFGgŠF<{‚4/1\v€4/2ÇÀ“IHÀ“IHWxsM™=BBzrL—?AC4Œ>32#"&'73267654&#"¯3i3¤{ "ߤ3\+&V:m‘ Jmg!#4Õ>32#654&#"4#À“’a { 2XYuÕ ©‰S2;6*3_zx4ŒÕ#"&54733267#À“’a { 2XYuÕ ©‰T1;6*3_zx­Ì%#3>32#"&7267>54&#"¾Fs½t'l?fp1,0€M?Y’3U#A@5W#FëþÂbP.1tiP¡>BD/(203@GG221€@DKDœÁ!!;#"&5467#737­'þùK1@‚ŒjbK¼¼'Á²Pþ¬ %R>B&TP²+¦332673#7#"&5466TuU;5PoMu‰t.qBR`‹„þ|&,0h_bý^76RG4Ôý}!7!267654&#!7!#‰þK¶_fVlþqÀi7"¢g32#"&'#ÂN†.08pdšÔrýì6 øRžL&HžP”¤&:®nš¶PHJÐnf˜"¸2ZTZàjw…Qÿw‡Iñ¶,. ºuW[׸‹þíjp|aU—ÿÿéœç௠ `!!!7!!7!!7!!¬þ<münm<þ pFþ“’þ“Fh¤þË5¤iþ—’þV);+73276?#"&7!7!ÎBY×&mo¥Í¹Z980¥Œ&ÆþÙß–|~€Ãijœ>>~ÔÂùŒ² #3>32#"&654&"26¤tˆt'k?€W !º@Vw -¨r .¨pëNqO/0ŽO2<™®08+2]{w7+2^z3Œž#"&5467>32.#"3267!.i8Ž‘D9;ŒT8i2)Y5El%$'VV[).™XX ` @?s'"@*bhj*Œ§!0#"&5467>32.''7'37.#"32654&NG/-0Yy0-0‘T  !»­Y†B´¡2q‹IAi† ƒ`§TN:ACxrF‰;>E0 430pQ13þè ¯ŽCJ´$8%¬0#"&'73267654&+73267654&#"7>32îPBÅ 6o9,n?m U_chVeLW0pDEv3„y að H*]fa;7#9Q0" ,] P75H3œž#"3###737>3žƒ<< òóxtx½» yvU/88PýÝ#P,l\>­“73#7!3#+7326?Þ™cÇ3! €Ut 2VPoQ¶’/f18_*^j(kD|X ¸~5Û;±xt4)2_z£‘f[bF53ŽN/8³*«¦332673##"&546UtU(FRmNt½uJ+wGl?‰…þ{#&?g`büO68d;)&œ«3#!3#3!737#737#ËttÍ)>ßÞ&æýÀæ&ññ,µ‚rþæ\­PP­\Ê”œ=#"&547#7!;+hH Fµ)W 9tœ`:!(@Pþp7œÍ !#3!73#@ågæýÀågæPþ-PPÓœÍ#3!737#737#7!#‘è&æýÀå&èè-æ@å-õ\­PP­\ÊPPÊ/­¢3#"5476;33#7#"3276.ttþŧªy‰t‰rx)? rPHB‚ü,^ssýW?#5˜" ½­ ;#"&547#7!:!8‡“dM ±º.‘!7X`32#654&#"eV!10‹X+a7[2SVR ;Fi‘xlX6V~a88f5/=þ…w,!"Ck\[­v+764'&#"#3>32;#"'&547¿B :G44NW‰W,`8[  C  1"U œH/-B-56\þžsa88B$6/<þÍH 5 X6,+<ùœØ 33# #…«¾o{Œ«¾o{þùý~úþ-Œ¤( #"'&54767"!654'&!3276&;& $_`”“;% #`àX;3e þ¡ XY;*T6S1;¡TTT5S1< U=5c%3!=þÏ3"==,®³!,7#7!#3!737&'&54767676767654'&”˜¢—b.% #`Ji˜þ^—i0% #`No`f/#; þýg5'; §\\A5S1<¡TA†\\… D5S1< UD ]þ/%>w6*3"%þ;Ö )=x5*4")%­¬F&'&#"#"/;#"'&54?32767654'&/&'&547>32¬,329V01 Y&v+²ˆ9<  C’ r'  :v=R21 g&h'¢‚@nýb /$+0Wf , X6!9%/"19- *,X`þ­Ó>;#"+7326ÁLG{no>; –~r-C;‘]MecU-:ýJxlX6€­ÇÁ%!!;+73276?#"'&547#737â"þùBJ‚DCh‚u9"#ƒ,B¼¼"Á²Pþ¬#]m;t>g>t>uu7t7>=Jz0 Ûþ™N^B;™\þæþæ\ý`9C*D'0$+-6/ù‹Ø&7!267654&'7!##"&547>72MlI¶†27”;!׎|]X³\{'yK5\mY.`#{\8b(!ƒ¤ŒS $Ry:6œœ"3+"&5473;7267654&'&tË [‡44*Ä8a'"ƒ¤W8%/þp+)mY/eœÀ##3À{iþ°{’œýòsœµ !!!7!´þýñîþƒ^þ=R^ÃP­!!#;#"'&54?!7!åœþVG  2!V þ°ªþÄ^þ=R 5 X6,+; ^à ^È#67#7!7!3632#7327654#Ma äþ\&ýénIŠwÒ n#8œ!!^ÃR^þ=¢_jR !ô¨Ý 2#"&'73267654&+7!7!‹CJ9Cݱ;y>/xDxVhnLþ\&§ f2|‡mTP2I]R^%Œ¬ä "654'&#"!3276  &5476& XY@8 Mþœ XY@9½&S.ËþÚS.l?32&VVL~g?f&VVM]ªXK_ÑÛ©YK_Ðÿÿÿ–þ Õ&$¨ÿÿHþ ?{&D¨ÿÿP&% 3ÿÿ;ÿãT&EŠ2ÿÿþcÕ&%¦ÿÿ;þcT&E¦ÿÿþ›Õ&%´ÿÿ;þ›T&E´ÿÿsþuÀk' +®u&&ªdÿÿœþuÀf&vZ&FªhÿÿÿøjP&' 3Îÿÿwÿãå&GŠÎÿÿÿøþcjÕ&'¦Îÿÿwþcå&G¦ÿÿÿøþ›jÕ&'´Îÿÿhþ›å&G´ÿÿÿ¨þujÕ&'ªþòÿÿwþuå&GªìÿÿÿøþjÕ&'°Îÿÿ:þå&G°ÿÿ5þÍÕ&(°ÿÿHþf}&H°ÿÿ5þÍÕ&(³ÿÿ>þf}&H³ÿÿ5þuÍm&ª2&( 2ÿÿbþufH&ª2&H‰ÿÿ\îP&) 3ÿÿÝP&I 3ÿÿNÿã›0&* 72ÿÿ;þHyö&J‡ÿÿÿøÙP&+ 3ÿÿTHP&K 3ÿÿÿøþcÙÕ&+¦ÿÿTþcH&K¦ÿÿÿøÙN' *`u+ÿÿTHX&KjHÿÿÿ?þuÙÕ&+ªþ‰ÿÿÿbþuH&Kªþ¬ÿÿÿøþÙÕ&+±ÿÿTþH&K±ÿÿ0þ˜Õ&,³ÿÿ0þì&L³ÿÿÿøJk&. +uÿÿZ´k&N +ÿruÿÿÿøþcJÕ&.¦ÿÿZþc´&N¦2ÿÿÿøþ›JÕ&.´ÿÿZþ›´&N´2ÿÿNþc Õ&/¦2ÿÿ þcÑ&O¦ÿÿNþci0&3 7ÿÿ þci0&4 7ÿÿNþ› Õ&/´2ÿÿhþ›Ñ&O´ÿÿNþ Õ&/°2ÿÿ:þÑ&O°ÿÿÿÅ k&0 +8uÿÿÿòšf&PvÿÿÿÅ P&0 3ÿÿÿòš&PŠÿÿÿÅþc Õ&0¦ÿÿÿòþcš{&P¦ÿÿÿú×P&1 3ÿÿTH&QŠÿÿÿúþc×Õ&1¦ÿÿTþcH{&Q¦ÿÿÿúþ›×Õ&1´ÿÿTþ›H{&Q´ÿÿÿúþ×Õ&1°ÿÿ:þH{&Q°ÿÿRÿãù' +2' ,2ÿÿuÿã®ù&R&t„H“ÿÿ3´r&3 +ÿw|ÿÿÿþþVhf&S„ÿÿ3´P&3 3ÿÿÿþþVh&SŠÿÿ P&5 3ÎÿÿÙÃ&UŠÿÿ þcÕ&5¦ÎÿÿÙþcÃ{&U¦ÿÿ þc0&Q 7ÎÿÿÙþcÃö&R‡ÿÿ þ›Õ&5´ÿÿhþ›Ã{&U´ÿÿÿã{P&6 3ÿÿsÿã5&VŠÿÿþc{ð&6¦ÿÿsþc5{&V¦ÿÿþc{P&¦&6 3ÿÿsþc5&¦&VŠÿÿ 5P&7 3ÿÿÃdP&W 3ÿÿ þc5Õ&7¦ÿÿÃþcdž&W¦ÿÿhþ›5Õ&7´ÿÿhþ›dž&W´ÿÿ:þ5Õ&7°ÿÿ:þdž&W°ÿÿPþdÏÕ&8§ÿÿ_þdm`&X§ÿÿ0þÏÕ&8³ÿÿ0þm`&X³ÿÿ:þÏÕ&8°ÿÿ:þm`&X°ÿÿPÿãÏù' +2' ,8ÿÿ}ÿå®ù&t&X„H“ÿÿÇ+E&9 ,\ÿÿ¶¾&YtØÿÿÇþc+Õ&9¦ÿÿ¶þc¾`&Y¦ÿÿR`r&: -|ÿÿ\#m&CÕZÿÿR`r&: +|ÿÿ\#m&vOZÿÿR`4'j8$:ÿÿ\#¿&j¯ZÿÿR`P&: 3ÿÿ\#&ZŠÿÿRþc`Õ&:¦ÿÿ\þc#`&Z¦ÿÿÿ9P&; 3ÿÿÿº¸&[Šÿÿÿ9N' *`u;ÿÿÿº¸¿&[j¯ÿÿÃDP&< 3ÿÿÿÙþVÉ&\Šÿÿÿúút&= ..|ÿÿNmm&]dÿÿÿúþcúÕ&¦=ÿÿNþcm`&¦]ÿÿÿúþ›úÕ&=´ÿÿNþ›m`&]´ÿÿTþ›H&K´ÿÿÃdâ&Wjÿ¢Òÿÿ\#b&ZrÿÿÿÙþVÉb&\r ÿÿÝP&A 3ÿÿ_ÿãH"÷ÿÿÿ–þcÕ&$¦ÿÿHþc?{&D¦ÿÿÿ–þct& .|ÿÿHþc?m&Ždèÿÿÿ–„ù' -T&$ 2€ÿÿHÿãJ¢&Ń<ÿÿÿ–þc„m& 2ÿÿHþc?&ŽpèÌÿÿ5þcÍÕ&(¦ÿÿbþcf}&H¦ÿÿ5Í^&( ,Tuÿÿbÿãf7&Htÿÿ5þcÍt&• .|ÿÿbþcfm&–d"ÿÿ9þc˜Õ&,¦ÿÿ=þcì&L¦ÿÿRþcð&2¦ÿÿuþcZ{&R¦ÿÿRþct& .|ÿÿuþcZm&ždÿÿÿ×ÿãk&b +ÿ‘uÿÿ ÿãÃf&cv—ÿÿÿ×ÿãk&b -ÿ‘uÿÿ ÿãÃf&cC—ÿÿÿ×ÿã^&b ,ÿ‘uÿÿ ÿãÃ7&ct—ÿÿÿ×þc&b¦‘ÿÿ þcÃ{&c¦—ÿÿPþcÏÕ&8¦ÿÿ}þcm`&X¦ÿÿÿÅÿã8k&q +ÿvuÿÿÿáÿå¼f&rvÿdÿÿÿÅÿã8k&q -ÿvuÿÿÿáÿå¼f&rCÿdÿÿÿÅÿã8^&q ,ÿvuÿÿÿáÿå¼7&rtÿdÿÿÿÅþc8&q¦ÿvÿÿÿáþc¼q&r¦ÿdÿÿÃDr&< -|ÿÿÿÙþVÉm&CÕ\ÿÿÃþcDÕ&<¦ÿÿÿÙþVÉ`&\¦úÿÿÃD^&< ,TuÿÿÿÙþVÉ7&\tÿÿEÿçÙr&iôÿÿEÿçÙr&¡ôÿÿEÿçÙr&vôÿÿEÿçÙr&ƒôÿÿEÿçÙr&wôÿÿEÿçÙr&„ôÿÿEÿçÙÑ&xôÿÿEÿçÙÑ&…ôÿÿÿ–r'iþ¢Õÿÿÿ–r'¡þpÕÿÿþ®r'vývÕÿÿþàr'ƒývÕÿÿÿ]r'wýóÕÿÿÿ{r'„ýóÕÿÿÿ–Ñ'xþ¢Õÿÿÿ–Ñ'…þpÕÿÿ„ÿâJr&iøÿÿ„ÿâJr&¡øÿÿ„ÿâJr&vøÿÿ„ÿâJr&ƒøÿÿ„ÿâÊr&wøÿÿ„ÿâÊr&„øÿÿÿÁÍr'iýÙÿÿÿóÍr'¡ýÙÿÿýÍÍr'vü•ÙÿÿýÿÍr'ƒü•ÙÿÿþJÍr'wüàÙÿÿþhÍr'„üàÙÿÿ|þV\r&iúÿÿ|þV\r&¡úÿÿ|þV\r&vúÿÿ|þV\r&ƒúÿÿ|þVÊr&wúÿÿ|þVÊr&„úÿÿ|þVœÑ&xúÿÿ|þV”Ñ&…úÿÿÿÙr'iý]ÛÿÿÿÁÙr'¡ý]Ûÿÿý‚Ùr'vüJÛÿÿý´Ùr'ƒüJÛÿÿýæÙr'wü|ÛÿÿþÙr'„ü|ÛÿÿÿÙÑ'xýDÛÿÿÿÙÑ'…ýDÛÿÿ‡r&iüÿÿ‡r&¡üÿÿ8Jr&vüÿÿjJr&ƒüÿÿjÊr&wüÿÿ‡Êr&„üÿÿ‡œÑ&xüÿÿ‡”Ñ&…üÿÿÿÁ˜r'iýÝÿÿÿó˜r'¡ýÝÿÿýæ˜r'vü®Ýÿÿþ˜r'ƒü®ÝÿÿþJ˜r'wüàÝÿÿþh˜r'„üàÝÿÿÿf˜Ñ'xýÝÿÿÿ^˜Ñ'…ýÝÿÿuÿãZr&iÿÿuÿãZr&¡ÿÿuÿãZr&vÿÿuÿãZr&ƒÿÿuÿãÊr&wÿÿuÿãÊr&„ÿÿ ÿãr'iýÚãÿÿÿóÿãr'¡ýãÿÿýÍÿãr'vü•ãÿÿýÿÿãr'ƒü•ãÿÿþàÿãr'wývãÿÿþþÿãr'„ývãÿÿ„ƒr&iÿÿ„ƒr&¡ÿÿ„ƒr&vÿÿ„ƒr&ƒÿÿ„Êr&wÿÿ„Êr&„ÿÿ„œÑ&xÿÿ„”Ñ&…ÿÿÿ]Dr'¡üùèÿÿý´Dr'ƒüJèÿÿý¹Dr'„ü1èÿÿþÈDÑ'…üùèÿÿ2ÿã—r&i ÿÿ2ÿã—r&¡ ÿÿ2ÿã—r&v ÿÿ2ÿã—r&ƒ ÿÿ2ÿãÊr&w ÿÿ2ÿãÊr&„ ÿÿ2ÿãœÑ&x ÿÿ2ÿã—Ñ&… ÿÿÿ¼„r'iýÚìÿÿÿ¼„r'¡ývìÿÿýÍ„r'vü•ìÿÿýÿ„r'ƒü•ìÿÿþù„r'wýìÿÿÿ„r'„ýìÿÿÿ±„Ñ'xýÚìÿÿÿ^„Ñ'…ýìÿÿEÿçÙf&CôÿÿEÿçÙfïÿÿ„ÿâJf&Cøÿÿ„ÿâffðÿÿ|þV\f&Cúÿÿ|þVffñÿÿ‡f&Cüÿÿ‡ffòÿÿuÿãZf&Cÿÿuÿãffÿÿ„ƒf&Cÿÿ„ƒfÿÿ2ÿã—f&C ÿÿ2ÿã—fÿÿEþVÙr&Èœ¹ÿÿEþVÙr&ÈœºÿÿEþVÙr&Èœ»ÿÿEþVÙr&Èœ¼ÿÿEþVÙr&½ÈœÿÿEþVÙr&¾ÈœÿÿEþVÙÑ&Èœ¿ÿÿEþVÙÑ&ÈœÀÿÿÿ–þVr&hÁÿÿÿ–þVr&hÂÿÿþ®þVr&hÃÿÿþàþVr&hÄÿÿÿ]þVr&Åhÿÿÿ{þVr&Æhÿÿÿ–þVÑ&hÇÿÿÿ–þVÑ&hÈÿÿ[þV\r'ÈþÈÕÿÿ[þV\r'ÈþÈÖÿÿ[þV\r'ÈþÈ×ÿÿ[þV\r'ÈþÈØÿÿ[þVÊr&ÙÈþÈÿÿ[þVÊr&ÚÈþÈÿÿ[þVœÑ'ÈþÈÛÿÿ[þV”Ñ'ÈþÈÜÿÿÿþVÙr&hÝÿÿÿÁþVÙr&hÞÿÿý‚þVÙr&hßÿÿý´þVÙr&hàÿÿýæþVÙr&áhÿÿþþVÙr&âhÿÿÿþVÙÑ&hãÿÿÿþVÙÑ&häÿÿ2þV—r&È ÿÿ2þV—r&Èÿÿ2þV—r&Èÿÿ2þV—r&Èÿÿ2þVÊr&Èÿÿ2þVÊr&Èÿÿ2þVœÑ&Èÿÿ2þV—Ñ&Èÿÿÿ¼þV„r&hÿÿÿ¼þV„r&hÿÿýÍþV„r&hÿÿýÿþV„r&hÿÿþùþV„r&hÿÿÿþV„r&hÿÿÿ±þV„Ñ&hÿÿÿ^þV„Ñ&hÿÿEÿçÙH&ô‰ÿÿEÿçÙö&ô‡ÿÿEþVÙf&ÈœÿÿEþVÙy&ÈœôÿÿEþVÙf&ÈœïÿÿEÿçÙ7&jôÿÿEþVÙ7&Èœ`ÿÿÿ–„m&Õ 2ÿÿÿ–i0&Õ 7ÿÿÿ–f'•þpÕÿÿÿ–fÌÿÿÿ–þVÕ&hÕÿÿ2Âxriÿÿ“þVYÿ¤È2Âxr#727#73V2ñ"ñÃþÿd¯ÿÿ‘V7tÿÿ´F£‹'jMTjÿÿ[þV\f'ÈþÈ!ÿÿ[þV\{'ÈþÈúÿÿ[þVff'ÈþÈñÿÿ|þV\7&júÿÿ[þV\7'ÈþÈoÿÿÿ;Íf'•ývÙÿÿÿƒÍfÎÿÿÿ Ùf'•ýDÛÿÿÿQÙfÏÿÿÿøþVÙÕ&hÛÿÿ8ÂJr'•úiÿÿÿjÂÊr& diÿ8ÿÿלÑ'jFšiÿÿ‡JH&ü‰ÿÿ‡+ö&ü‡ÿÿ‡-Ø&“üÿÿ‡ÏØÔÿÿ‡V7&jüÿÿ‡£‹&küÿÿ9˜m&Ý 2ÿÿ9˜0&Ý 7ÿÿÿm˜f'•ý¨Ýÿÿÿƒ˜fÐÿÿjÂJr'•ú¡ÿÿÿˆÂÊr& d¡ÿ$ÿÿÏ”Ñ'j>š¡ÿÿ„ƒH&‰ÿÿ„ƒö&‡ÿÿ„ƒØ&“ÿÿ„ÏØóÿÿ%þVzr&iÿÿ%þVzr&¡ÿÿ„ƒ7&jÿÿ„£‹&kÿÿÃDm&è 2ÿÿÃD0&è 7ÿÿÿ Df'•ýDèÿÿþÔDfÒÿÿÿó´r'¡ýåÿÿ´F-Ø'•rjÿÿ´FÏØËÿÿÅîPfCÿÿ2þV—f&È)ÿÿ2þV—`&È ÿÿ2þV—f&Èÿÿ2ÿã—7&j ÿÿ2þV—7&È™ÿÿÿTÿãf'•ýãÿÿÿãfÑÿÿÿT„f'•ýìÿÿÿ¼„fÓÿÿÿ¼þV„´&hìÿÿ?îffvdÂxr73#3"e"ñ"Žòï¯d/ßZƒ·ÔÄ991ÔÌ0!!P !ýöƒ¤ÿÿ/ßZƒ­ÿÍìºy@ ‰ÆÔÄ991üì0!!Ñû/yÿÍìºy@ ‰ÆÔÄ991üì0!!Ñû/yÿÍìºy@ ‰ÔÄ991Ôì0!!Ñû/yÿÍìºy@ ‰ÔÄ991Ôì0!!Ñû/yÿÿþÑÿ]&BBðÏÇ 9@:ogÔÄä91üì0KSXíí9Y"#73Ëü)š¬ÇÏ~þ‚ÏÇ 5@:ogÔÄäÀ1üì0KSXíí9Y"3#¤ü)þñ™¬ÎþËþáœ/5@:onÔÄäÀ1üì0KSXíí9Y"3# ü)þñ™¬/ÏþÇB#7B*™t*ÎþÎöÇ‘ e@3     :o g     ÔäÄÔÄä991ü<ì20KSXíí9íí9Y"#73#73¼û&™¬þ ü'š®ÇÏ~þ‚ÏÏ~þ‚ÝÇy _@0     : og     ÔäÄÔÄäÀ91ü<ì20KSXíí9íí9Y"3#%3#²ü)þòš¬ôü)þòš¬ÎþÎÎþÿðþá‹/ _@0     : on     ÔäÄÔÄäÀ91ü<ì20KSXíí9íí9Y"3#%3#Åü'þóü'þðš¬/ÏþÏÏþ)Ç #7##7*šs*Ï*šs*ÎþÎÎþÎÃÿ;oÕ \@0:‡ Q”   ÔäÀ99991äôÔ<ì20KSXííííY"3!!#!7!¢°Roþ‘Ù®ÙþoÕþ\™û£]™;ÿ;oÕ‰@L       :‡ ‡ ” Q   ÔÄÀ9991äôÄ2Ä2î2î20KSXííííííY"%!#!7!!7!3!!!Éþ‘R®Pþ‘ojþoR°Roþ‘hnßþ\¤š™¤þ\™ýá?Ñ‘! · ™ & Ôì1Ôä04632#"&?¬}|­®}|«ú|«¬{|­«?áq?¢ðþˆÿ¾)/ w@<    :n    ÄÔäÔäæÀ999991/<<î220KSXííííííY"3#3#3#ü<üoü;üþ¡ü;ü/þÑ/þÑ/þÑј'3?Km@<%1= ÊÊ1Ë%Ê+\CË7ÊIF:4(:"FG4"@ "G""".G"@(/ÄìÄôìîöîîöî99991/<î2î2öîþîî299990'32654&#"4632#"&32654&#"4632#"&32654&#"4632#"&H%'üH_EDbcCE_y¥xx¦§wy¤LaEEacCEay¦yx¦¦xy¦ aEF`bDEay¦yx§§xy¦7aŸ`ýJGacECcaEy¥¦xy¨¦ÓEaaECcaEx§§xy¨§ý"GaaGCcaEx¦¦xy¨§Ñ˜ @LP[f4632#"&62654&#"4626763267632#"'&'#"'&'#"&732654&#"/2654&#"2654&#"¦yx¦¦xy¦yaŠacCEÚŠÈE EfdE Efd‹‹deF FceF  Fce‰eO:9QR8:O%'ýQtPR8:QzQtPR8:Qyx§§xy¨§¿ŠaaECcüy¥S  SS S¦xy¨T TT T¦{GacECcaÑaŸ`ýJGaaGCcaEGaaGCca†`FÕ3†õËþ—`uþ‹ÿÿð`ÜÕ'ÄÿjÄ–ÿÿZ`rÕ&Ä'ÄþÔÄ,Î`þÕ#3þWÙË`uÿÿ8`”Õ'ÇÿjÇ–ÿÿ¢`*Õ'ÇþÔ'Ç,Ç5m#@ÅuCÔì91ôì907m+þ¡ø!þ{#Óþøþõ°¢R=s#@ÅuCÔì91ôì90%77=+_ú#ƒÓ °þ^Rÿÿ?”Õ'þÌ4M_ð$#7>3273767676'&f¾· #`o%iÊhº\[..piR6 þÌ2Ë2T6J! 7‘­ #D¼98``¡LAB\VBT=ýÅþþBþR-;,,1Y7ÿÿ»Ñ Bžþò !#3#3!m§ðˆðð‡ðþVýEýF“þò  #73#7!!73'ðð‡ð¨þ›þXð;»øÞÿÿÿæëñ' 6þÌ 64ÿÿx³ñ' 6ÿ^Sÿÿ?Óñ'þÌ 6'ÿ;¹Õ 2###/ר%$þéÚ¤0¿þÐHÕ辸Ýü²ùášað $<4762#"&%#"'&5476767632276767654'&#"bJ&%6¸N89JKdƒ??&&:9JJcƒ@@þY6.,!/!!H8,. /#"@  ,¶køMO&&EDl{zOO&%EDý‚8NtsdV'&5NtujO'&?œ’ !3!73#3#û(wæýÀæe´ûttýÝPPÓD‚œªß t@> JJ J  J: ÐÑ`   ÔÜÄÀ991ôôÔ<ì290KSXííííÉÉY"33##7!7 !ü¢iuw!‹#þ~Íþª ßýäo¸¸y}þy4ß&!!>32#"&'7327654'&#"üþ1 <MM##A>IM`H~09v?}RR66`5782ß_Ì ?@gFAB0.rABaH() bð64'&#"326.#"67632#"'&5476767632f''HbCB))Ha‚´'\2‚TT%1;?LvBA.5BCR‰JJ-Bfg‹200é?#"GFkC'&–ThPP =87h?FC.7ABx]deRx<< aœß!#!¥u ýã’ þ$ß5üòäAð,:4'&#"3276&'&547632#"'&5476"327654'&M-,O`=>ZLc==þùH$%dcx–BAkS,+ÌŸ‹POFG2UnNER98((ŸA%%87V;F34();eHHfPOA@0.Ku˜99d]BBUZF7@11F2að4327654'&#"732767#"&54767>32#"'&NH`DC)(HaAB´'.-3UT%.?>Lx‚-5†RˆKK4.BgfŒ3//“@DGFkE&&KKý¬h PPŸ9pgCBC.66BAx^ÈRw=< Û¶, !!#5!5!5žþèjþè,ù_ùù_ùÔ¶3!!šýf3_a¶¥!!!!šýfšýfÁ`D_–; #.547;”—%&e1/£ž¨þªªQ©[j¯PªO›–< 654&'3–”˜&&f00¤ž¨VªQªZi°Pªþ±›œ¦#6&#"#367632¥KK;PZ;:Dy-@@Px^!þ{…TP43`þžs^6~ÿÿaÿñTÖýdÿÿ\šC{ýdÿÿ3ßTtýdÿÿÿñ×TuýdÿÿªCØýdÿÿ4ÿñCÙýdÿÿbÿñTÚýdÿÿaCÛýdÿÿAÿñTÜýdÿÿaÿñTÝýdÿÿ?¶Þýdÿÿ8¶—ßýdÿÿŶ àýdÿÿ–ÿi;fáýdÿÿ–ÿi<fâýdÿÿ)ÿ𨂾ýdÿÿ%ÿð¬ƒÄýdÿÿ.ÿð£‚ÍýdÿÿÕîszýdÿÿ$ÿð­‚Åýdÿÿìÿð…XSýdÿÿ ÇgÊýdÿÿœ8nxýdÿÿñà‚Ëýdÿÿ¦‚ãýdÿÿÿÌ‚Ñýdÿÿ"Š“yýdÿÿD%ÒýdQÁÖ##"32.#"3267!!!!!!>D¯ Hó¯Es.+mD„«;m„C€>Fçþ,oþ‘6ˆþ¸667756ŸGFêþDêFG €þµ€þk€Nÿ¦¡9,6<073&'3267#"'#7&'#7&'&476$;73&' &$/zE"/2þ. rÒd'aÈd"y#,'4yQ …e_d« zÝsZlL245…+,þ#$-â r§Õ9(û™YYï34@W}Å œ²XŽ—Iï FR¨lñzŸd ûNÿã¡ð2%6767#"476$32.#"3>32.#"ŸJGkd'cÉeíþôf_e¬k½R"P±h×M24WFyŠ7–W,6m¤Œ ,Yï348²XŽ—GGÕa^¤¨lñzÌkVeX]¤ɨ9—Õ!!!!3###7ó¸ìýÄKýû4»º,°-¡˜=ªþHªþÏ”þü”-³ð#!!73#737#737632.#"!!!BïüØB¼»º¹0ñÖ@@!8y:ˆˆ&eþœcþ“ªªm•.ò¶(*ŸÐ•.ÿBI+#6'&#"#367623632#6&#"#Se@ GT<=In‚n1;:,teM=GhUNnM2FU<=In"¾xGM_a¢ý‡`®f21>&>EÖ3öáý\ž¡œ__¤ý‡ÿÙøÕ"&)''#!333#3#!###737#73377Û'(‚%hækÄk¢¢¢¢kþðhækÄk¢¢¢¢ûƒ'(¯ÎÎþò““4ýÚ&ýÚ{“{ýÚ&ýÚ&{“{{““þòÎÎÿãÃÕ?X32654&#+#32333632.#"#"'&'#"&54673#;732654/.54å5{TY=6Ó5M‹{9bãcg9Y³>^,T(#O)GQ_Y<Šo+/UOO:߆9%)1_,BRl D?/ýϰ¤itþ¢’^‰ý¨Õ¾·>þÂ/J®((cUc53pa²à €‚7!`ý ". @:M46tY`;%y^ ÿã¢ÕE326&##.+#!232676&/.7>32.#"#"'&;’TdGT}CEEFt¦“y`L#6 3468J[ 1^#^G”v;d((]3OX 1Q#kN¢|45/ýúØ–bý‰ÕÖØº$~´3YQKP%$•‚ž¬®((TT@I!*™‰œ¶*Õ"&)-1'#73'3!73!733#3#####7!73'!!7g=&…[8•\8†9%=!Ogþû¦€þÿ¦!h Àá"ü¯Á¶!Qþ;!uÂÂÂÂÂÂuü€€ü€€ýg™uuþüýg™uuuuÿÙÿãEÕ %2 #6&#!#)"33!3ò“Æ“5EŽ@+SˆþýýMþrÆ”6DŽ?,S‰úÒþÖþÜþ‘VðÓú²*$oþªðÓNÿÿwþš‡&Óikÿÿöÿã¨ð-|@C$%°|{c!|{ c °'+a!e.'.-,+($$ &,$.ÔÄÄÄüÄÄ9999999991ääÔ<Ì2ì2îöîîöîî299032.#"!!!!3267#"5#73>7#7î]LèJ—H'FƒGŠßGÙ2þ8 ›/þˆ‘‡L«U'P VÝå¬1… ž1´!*(ÏA<ÓÅl+\4n6«·@=Ï*( -n;Y'l!3Õ33!!###5¹q¹pËõý0¤þ4àýṄhZ{ý‹uý…rý×ý)èrŸ/Õ!7!!77#'?'dþ,!o þ/K¨¿·ÎyË_¡¹°%ªªþ~aMn†jMwý‘ë]Mk…fM þ'¾3lƒ‘'67>32#"'&'"32676767654'&'&67'>7632#"'.'&/#"'&547>3232676767654'&'&&#"32\!+"X3&; #$06- ³-$   #  üª ³U@'D[i&#  />$*)5' / 2/=! S6&X´&8^) 5þ$  þ'*Þ›kSo;48O07zfi8@ 3l8#?7%!73:'& »)3^ ";6T€$B~od¯4LNtŽ…Fu05 .' #UB4F_ˆ¤üŠA9‰pT‚ne?<&#cEŸû‰# ÿã5ð1A'632327&54767632#72767654'#"'&#"%67654'&#"~m°fp,=,>‹ Xa|jG) )l#Štæz`MJ”cg1 1.$Q./*`ðNkB¾04¬X``7a0<㫃”%&†q¢J<“ Na~hFÙl¯*!#??0W!}3!Õ!&+!23#3#!###737#73!32767!%&+V¸Îl[p[ `f(S þèéu˳dcnm˜ýþêÖ‡ ýí%ÑéÕ\MˆZ.+ZfJý¨—ZYZþó™ó*/Y³‹‹<ÿ[–x&1#7&'&54776?3&'&'6767#7!'€Æ_L@¾™Ñ€_R_J&FYQa×G=D;Gnpiuel_Ò[6*5¥§ƒÆn‚nͦ‰$F×_0,û?'‘¦ýS*%²§ l™þÑd‹YlÿÆÖÕ7!3!#3##!##7373!/3|ÐIî­…H¿>þ2õÂ…¬g°bƒÏ¿'R{ýø{Ï{ýøýø{ÏÏÏ{AÿÙÿãøð667676&#"7>323#!!3267#"&767#736767!7e AŒ^Åg'qÆVßÞ' ›éoÕ):ü§7™hÛ*tÝiüÜ)Ù W’þD¯ 4cq…<;Í''ñÈK={[/ {9b{‰DI×--àÕN@{ O/{…þÓ¼!,&'&#2767#&'&776?¼)GLKfÊf]]o)gc_\4d5´]ª=?û·,e+\RVý°Å_P0- W6¤Õi--ûñ--iÓH$"þðuÖ9BËtæâ"#û£ùBuª¡f´lCg3Õ !!!!#!Às!ûs!þ-ÉËÉþ+Õªxªû÷ pÕ%!!##.+732767!7!&'&+7Oþ¨F#Oã\c–J,+3|Ùi.hcÁ Ý‘VGýèOÛ(<‘óOÕ{P{†V^86¨þhy¡]¦M@f{L5N{tÿä¸ð%%3267# '&547!2."‰U|d©] Ö„þø{OH“}†8Srèyx ¬A< ƒ7@,ƒLÔ‰Ák|r•4‚*:0N²þ¯ue¢v ÿÏÈ#5D.#"3267#"&5467>32%3#%"&5467>3232654&#"5E$(H)-CD$PK1X.v@@+xF)PÚžü»Ÿjz'!4€Rf}'!2¶77Sq95/I—º:!*'?©[jb!8¾´£…ãZ@AKùËä^ÃChfÀ–fËDielmcäµfaBF5Š:žÕ3!3%!!!!!!½üD¾þîf™eþ›þgþšqúó úó dýˆxú+Ûý%ÿÿTHKTH632#64&#"#'?3%Ç—Å‹š‡¸‡]W²!{¸éÞ þ1¸$þÁ¸Ã‘‚EmýJ·H…Wº¨ý‡­EbOû¾YbcJ…Õ %# !3!# ýG¸¹üâH¦Mþ¸ýZMd úóqûáú+áûÿy¦Õ 02#"547"327654!!3>3"##726‰ 4±‰ 4—2 3 þÌbþžý[çõ®yÜ$U2 çõ®yÜ$U2  .=þõ .= Š0ZŠ/=þ ”1¤ûQ~ƒ®¸>;û\¯ü‚ƒ®¸>}ÑN*3>"32>54.'2#".5467>32654&#%!2+#hjµ–MMKLµijµ˜KL–µkÚZZ\[¶Ú~}Ú¶[\ZZÚ&“RXXRþø’••’“uçJ–¸jh·KLLL˜µij¸–JgZZ[Ü~}Ú¶[[¶Ú}~Ü[ZZþ¸þéICBISqmopþÖBšÕ 33!27&#%!2+!67654'&¢À` ý`sïööðòþ€1:+YX*qúó ýj’dÛÓÕÚýˆZý™)VŸžV)þø¼ð (%#'#  %27&"676'&\æÓ¿,þðþºF Eµý]ì]]ì][††{††þÝï¥ab¥þ[þžþüþŽ 22×22ûjT%¶ýœµ%5û¯$¶c¶$%½Õ &.2&'&+3!.+!!2!27&#676'&%3¶A::f&AVy©à-`5­þ‹¢?vfþ«AÙÖd)ýò7%LK$ý2¬—01/ÉþåO„~þh–bý‰ÕÖØÐb)¥ýj’ý™)V>U)-úó “fÕh@6    :    Q  1 1010/üþìÕîÖî91ô<<ì2Ô<<Ä90KSXÉÉÉÉY"###5!3###¶¢r¢´‰}¬rœ7¦qÕ^þä^ÿý¾âþÓ-þB0™Õ %#!!!5!b¶ÅýJZCýJÉû—¶ý]d úóqdúódd ÿÿÿ¼„´ìÿÿÿøJÕ.ÿÿÿ–m‡ ÿçÆ-)7 7673 $54$32!"53!25&'&#"é6Ky {U>ZLtþÅþà ¢"š˜"£ü3à8M{€{M7äM3TT<`xGZ³A¯°E®®þ»°IpP3RQ4Oÿÿ/þãm{& 0'{þþœu‰üVÿÿ/þãmŒ& 0'tþþœu‰üVÿÿ/þã£{& 0'{þþœÙ‰üVÿÿ/þ㣌& 0'tþþœÙ‰üVÿÿ/þ㣌& 0'uÿœÙ‰üVÿÿ/þã£{& 0'ØÿœÙ‰üVÿÿ/þã£{& 0'{þþœÚ‰üVÿÿ/þã£{& 0'ÙÿœÚ‰üVÿÿ/þã£{& 0'{þþœ܉üVÿÿ/þ㣌& 0'uÿœ܉üVÿÿ/þã£{& 0'Ùÿœ܉üVÿÿ/þã£{& 0'Ûþþœ܉üVÿÿ/øm{& 0{þþœBå} 5!!B#Z pü ZR#Z ¤ ZµM '#'’"Z ¤ Z$MþÝZ üp Z#Bå} '7!5!'7þÝZ üp Z#þÝZ ¤ ZþݵM !737@þÜZ ¤ ZþÞ#Z pü ZþÝBå}!5!'7'²ým ZþÝ#Z “ Z#þÝZß Z#R#Z  ZþÝRþÝZµM%7#7'3'º ZþÞRþÜZ  Z$R"Z Ý ZþÝ#Z “ Z#þÝZ ¸a 7!##¸:œãntý’':ý’tnã¸a #5'#5!ý’tnãœ'þdãý’tn¸a )53753ßþdãý’tnntý’ãþd¸a 733!¸ntý’ãþd:œãntý’Bå}3!'7!5!7ÁÎþÑ“Žcþ} ZþÝ#Z 㔎ƒ¤úR¨ Z#R#Z úRBå}#5!7!'7'7!'Î/“Žcƒ Z#þÝZ þ”ŽߤúR¨ ZþÝRþÝZ úRY‹xa532767676767632&'&'&#"#"'&/#7!$f ! +!3-68+2",j!!!3 .6+85.0$m:œâ w '07)(6;C+ : ,:'+€àœ:Y‹xa5!5!#5#"'&'&'.'&#"'6767632327676­þõœ:m$0.58+6. 3!!!j,"2+86-3!+ ! fâ:þdà€+':, : +C;6()70' wBå}!!'#537i&ýÚ Zú– ZþÝ#Z –úZƒ¤ Zú Z#R#Z úZµM'75'3''# Zú Z$R"Z úZ ¤& Zú– Z#þÝZ –úZ ýÚBå}'73'7'7#'7!5h Zú– Z#þÝZ –úZ ýÚƒ Zú ZþÝRþÝZ úZ ¤µM77#75'73º Zú ZþÞRþÜZ úZ ¤' Zú– ZþÝ#Z –úZ &Bå}'!5!7òZúýä ZþÝ#Z úZ1òZú Z#R#Z úZBå}'7!'7'7!'4òZú Z#þÝZ ýäúZ1òZú ZþÝRþÝZ úZBå} 53#5!5뤤ý4 ZþÝ#Z ƒúýhú Z#R#Z µM %'3'3!5 Z$R"Z úýh¤Ì Z#þÝZ ý4¤¤Bå} !'7'7!#3æÌ Z#þÝZ ý4¤¤ƒ ZþÝRþÝZ ú˜µM 7#7#5!º ZþÞRþÜZ ú˜©ý4 ZþÝ#Z ̤¤µM%'7'3'73!5úZ  Z$R"Z  Zúúýh¤úZ  Z#þÝZ ýè Zú¤¤Bå#(276767654'&'&'4#!5d >b-*,%:0ý“ ZþÝ#Z ƒ  ¤*+(54<852.& Z#R#Z Bå#)!'7'7!"'&'&'&547676763"mE Z#þÝZ ý“0:%,*-11> ƒ ZþÝRþÝZ &.258<45(+¤  Bå#$>2+#5!5!54767676"3276767654'&'&'&l>b-*,%:0—¤þΠZþÝ#Z 2)-019 o #*+(54<852.&ÕÕ Z#R#Z };47(+£ }  Bå#%?!'7'7!#5#"'&'&'&54767676";54'&'&'&e910-)2 Z#þÝZ þΤ—0:%,*-11> o #+(74;} ZþÝRþÝZ ÕÕ&.258<45(+¤  } Bå}X3267676767632267676?'7'7#&"'&'&'&'&'&""'&'&'&#5! !  Z#þÝZ   > >   ZþÝ#Zƒ" *!#$' *  ZþÝRþÝZ  %  '%  %' "  Z#R#ZBÑ‘!'7#5!3'7'²þè<Œ2å ZþÝ#Z <Œ2÷ Z#þÝZßþò î Z#R#Z  î ZþÝRþÝZq`• %7'7]¸Jþ±Qïg„zý=— ZÃÓ„hï PJ¹ÔþV}ý쪷e 5!#” ZþÞ"Z †¤Ç Z#R#Z û•Ç·e !#!'7'<þ ¤„ Z$þÜZÇü9k ZþÝRþÝZ·e !3!5”â¤ýz ZþÞ"ZžÇû• Z#R#Z·e '7'7!3< Z$þÜZ ý|¤ž ZþÝRþÝZ kü9ºR %!5!7#7yþAc ZþÝRþÝZÝѤü‹ ZþÝ#Z?’] !3!5Ò¤üŠ ZþÞ"Zž¿ý Z#R#ZQX€å)7676767632#4'&'&'&7#7K$<9JGTWDL7: ˜%#0(79).%$ ZþÝRþÝZ5NSH;9!6:IFT7/0'$&$2(G ZþÝ#ZQX€å*7#756'&'&'&'&0#676767632† ZþÝRþÝZ $%.)97(0#%˜ :7LDWTGJ9<$5 ZþÝ#Z G(2$&$'0/7TFI:6!9;HSN2Ÿ 7!##5!¸:œãntý’†l':ý’tnã?PPBÖ !!#33#'7!5!'7æ#Z Ìý4 Zþݤ¤¤¤þÝZ ý4Ì Z³#Z ¤ Z#þݘüŸ#ýh#þÝZ ¤ ZXyù6#"'&'&'&547672767>54'&/#7!•J%%%'HD_SlhX[HJ%%%%Jw422-A8;>112-!:œzJZ[ghX\HC+%%'GKY[eg[WMs2=>FD{2,/2{DF>H'ãœ:Xyù6#5!#52767>54'&'7#"'&'&'&54767<ãœ:!-211>;8A-224wJ%%%%JH[XhlS_DH'&&&Iz:þdã'H>FD{2/,2{DF>=2sMW[ge[YKG'%%+CH\Xhg[[IBß}5!B#Z pß{#Z ¤Båƒ!!BMü Zþ݃¤ Z#µM3'#|"Z ¤MþÝZ ü»M#'º¤ Z$Mû³p Z#Bß}!5!'7û³p Z#ߤ ZþÝBåƒ'7!5þÝZ üƒ{þÝZ ¤µM!37¤ ZþÞMü ZþÝGåM!#73å{þÝZ ¤#Z pB|  '7!5!'7 5!!þÝZ üp Z#û³#Z pü ZþÝZ ¤ ZþÝýÊR#Z ¤ Z*§M !737 3'#'2þÜZ ¤ ZþÞýÊR"Z ¤ Z#Z pü ZþÝMþÝZ üp ZB| '7!5!'7%!!þÝZ üp ZüÖ#Z pü ZþÝuRþÝZ ¤ ZÁ#Z ¤ Z#B|'5!!!!5 É#Z pü  pü ZþÝ>ÉR#Z ¤  ¤ Z#R*§M73'#'#'3hÊR"Z ¤  ¤ Z$R„ÉþÝZ üp  üp Z#B|'7!5!'7!5!'7ÆÉþÝZ üp  üp Z#>ÉRþÝZ ¤  ¤ ZþÝR*§M%#73737#hÈRþÜZ ¤  ¤ ZþÞRÉÉ#Z pü  pü ZþÝBA! '7!=!þÝZ ü#Z pß{þÝZ ¤¤{#Z ¤BA! !! !5!'7BMü ZþÝMû³p Z#ߤ Z#¤ ZþÝBå}!73!!!'7#5!!q£Va6úþÒZˆþEV`6ãNZþÝ#Z"þ>RRjÕ¨;mR¤R¦:lNZ#R#Z RRBå¯!!373'7'7#'7#537!7'!þþRRßÈšNZ#þÝZNãŒ|NZþÝ#ZNÂ.Œ9#!RRƒRRöNZþÝRþÝZNž ~NZ#R#ZNÚ þô¤RRBå}!'7#5!7!5!73'7'%!7'!`þ]Va6ú.Zþx»V`6ãNZ#þÝZþÞÂRRþ–¨;mR¤R¦:lNZþÝRþÝZ RRBå}!!5!RRpüâNZþÝ#ZNƒRRRNZ#R#ZNRµM#'3'#'RNZ$R"ZNRSpüNZ#þÝZNüâpRBå}!5!'7'7!5!7²üNZ#þÝZNüâpRƒRNZþÝRþÝZNRRµM%37#73»RNZþÞRþÜZNRRÝpüâNZþÝ#ZNüRBå}!!7/7'7!5²ýmRR“R¤NZ#þÝZNþNZþÝ#ZNƒRRR¤NZþÝRþÝZNNZ#R#ZNµM'77#7'3»SRRSQNZþÞRþÜZNNZ$R"ZpRRýmRRAþNZþÝ#ZNïNZ#þÝZ›ÿÆ6a##7!#Žtn:ýÌ:œn3:âtý’:5pœ:ýÌ:›ÿÆ6a '#5!#5'5Cý’:3nœ:ýÌ:nâý’:4:þdpýË:nt›6›%753!5373·ý’:4:þdpýË:ntón:ýÍnþd:4:ý’›6›%3!'3Žn:ýÍnþd:4:ý’n:ýÌ:œp5:ý’tBå}5!!!!!¿ZþÝ#ZÐüÞw™ügw"?Z#R#ZRwRwRBå}!5!7!5!'!5!7ý0"wüg™wüÞÐZ#þÝ?RwRwRZþÝRþÝBå}37773'''#5:—–––;!\–––—[` ZþÝ#ZƒC­­­­C¤j­­­­j Z#R#ZBå}'7'7#'''53777² Z#þÝZ `[—–––\!;–––—:ƒ ZþÝRþÝZ j­­­­j¤C­­­­CµM%#5#535#535'3'3#3º¤úúúú Z$R"Z úúú¼¼¼¤t¤ø Z#þÝZ ø¤t¤µM533#3#7#75#535#5¤úúúú ZþÞRþÜZ úúú½½¤t¤÷ ZþÝ#Z ÷¤t¤Bå} !553353!þþ ZþÝ#Z »{»ƒ¤ Z#R#Z ¤¤¤¤¤µM '3'#7#7 Z$R"Z ¥£¤n Z#þÝZ þþ}»»þÊ»»Bå} !'7'7!+53#53° Z#þÝZ þþ}»»þÊ»»ƒ ZþÝRþÝZ ¤¤¤µM 7#77'3'3º ZþÞRþÜZ ¤£¤ßþþ ZþÝ#Z }»»6»»Bå} !!#3æ#Z Ìý4 Zþݤ¤Z#Z ¤ Z#þݘBå} 3#'7!5!'7뤤þÝZ ý4Ì ZZ#ýh#þÝZ ¤ Z¼¦ 5!5! !!? üöOþ‹uüÿôÃÃ]Ìþ%uuÉþ¨óÞv 333'#!#¦\Ì^ÄvÊþ¨ÈtPüö ÂþïüÿuB¼¹¦ !!75!!5’üö Âþðüþtô]Ì]Ãþ‹ÉXÉþ‹óÞv ###3!3,^Ì\ÂþŒÈXÊþŠ& üöÂüÿþ‹óÞv 3'335%!!# #Î^ÄÂ\ÌþîXþ¨ÈtvÊàpÂÂþþòŒŒFþèšguþ‹þ™óÞv %3'3#!5%# #3!Î^ÄÂ\È^þ$ÈtvÊÊýÒ~ÂÂý‚ŒŒFéuþ‹þþèóÞv #3#!5#3/# #3!àðJ\È^Ê^|HGeÈtvÊÊýšJý‚ŒŒ~{GGýMéuþ‹þþèóÞv 3#!!5#3# #3!F \È F Ê^þÈtvÊÊýïŸý‚Œ©üWŒ~ýÈéuþ‹þþèóÞv 3'333'37# ##!#Î^ÄÂ\ÌfÄÂd^¬ÈtvÊÊÊþ¨ÈˆÂÂý¾ ÂÂ^­uþ‹ÈýÇ9óÞv #!5#3'%3'37#7# ##3!3È^Ê^Ä fÄÂd^¬ÈÈÈtvÊÊÊÊýȈþJŒŒ¶ÂÂÈÂÂ^þ‹Èuþ‹ÈþßþèB¼¹¦ '#35!7'!!!5 5ŒŒ~ÂÂýÈþèêtþŒ—Éý¢É]ÃÃ]þîÉêÉÉþ‹þ‹ÉEŒF 7!##!#*:œãntý’aüI':ý’tnã»IüFEŒF %!53753!5!lþdäý’tn~æûºüåntý’ãþd&û»IüóÞv #7#3'# #3 3\ÂÄ^^ÄÂÈtvÊÊþŠþŒÈPýÖÂÂ*ÂÂOuþ‹þtþ‹uBå}'0#"'&'#53676323'7'7%&'&#"!3276Å4RvxN1kk2Ow9g' í Z#þÝZ þ™ 0GD2 &þÛ +JD5ß@3PO2B¤B4R,( :  ZþÝRþÝZ ¤11¤/0*§M !#737'#' RþÜZ ¤ ZÂ"Z ¤ Z$#Z pü Z*þÝZ üp Z#Bÿa7!5!'7!5!'7'7!5! üp  üp Z#ÉÉÉÉþÝZ üp? ¤  ¤ ZþÝRÉÉRÉÉRþÝZ ¤Bå}#5!5!53!¤þ¥ ZþÝ#Z [¤qßúú Z#R#Z úú¤Bå}!5!53!'7'7!#²þp¤\ Z#þÝZ þ¤¤ߤúú ZþÝRþÝZ úBå}#53533'7'7##÷ ZþÝ#Z ÷¤ø Z#þÝZ ø¤ß Z#R#Z úú ZþÝRþÝZ úBå}#5##5#53533533Ò¤t¤÷ ZþÝ#Z ÷¤t¤½ßúúúú Z#R#Z úúúú¤Bå}#53533533'7'7##5##þ¼¼¤t¤ø Z#þÝZ ø¤t¤ߤúúúú ZþÝRþÝZ úúúBå}53533533'7'7##5##5 ZþÝ#Z §†8†¨ Z#þÝZ ¨†8†ß Z#R#Z úúúú ZþÝRþÝZ úúúú¼¦ !! ?ÂÂOüÿþ‹uôÃäþÝuuB¼¸¦ 7% !5’Âþïuþ‹üÿôþzÃR#þ‹þ‹#¤¼¸¦7 ! ?ÂÂSÂý:þ‹uµuþ‹ôÃÆþzÃRþÝuuþÝ#þ‹þ‹#%¬Õ %!3!3hÕþV[þ7Ñl nÑþ7²üüRÕþ{…ú+uÿã\ð #&'&#"327673 u ö…B!ÊOœœOÊ!B…þ oôÆcI7™þÍý˜þÍ™7IcŶÿãL 0"'&547632654'&#"563 3276767&#" \m`c²u\6% G¼Gnth r5?£€þÁ,/H@3H5,Yš„:$Ue·¾”˜I+HQ\‡N­,¨öt­qƒþ¸œzSd69->eSY×®l²Õ 7!!5!!5!!²´ýL´ýLkü•ªìªëªú+²ÿ¢5!#7#53!5!!5!733!ýŠšZŠ‹þëDŠþ2þ›/ŠÕþûŠÕú+^^ªìªëª``ªþëýkþìIbŠ£!0?"'&''7&'&54767>2"&'2767>54'&&cv-'''OO¾Ý_@8vcu-'''OO¾Ý_A:÷£GE:;9($(¯ýØ#&G£FF:;9¢cv8@_pm__ONP(-vcu:A_mp__OOP(-9;ŒSPF($(ŽýØ9;ŒPSF'ÿúÙO@*BBBB:ÂÄÔÌ91/äì90KSXííííY"#3 !ÑýþáúqÃûéÿúÙ!#7!ßýøÑhqýúqÌP¸C±?°3° 3±í±í±í°°Þ°2±í±í°°Þ°2°2±í±í±í013!!"&63!!"!0",˜ZØþ(ˆè††èˆØþ(\JN*"‡f_‚–ªÄQŽQĪKM€_fªÿOPi%+i±?°3°3±í±í±í±í°°Þ°2°&2°'2±í±í±$í±%í°°Þ°2°2°2°2±í±í±í±í±í°/°/01%3!!"''7&'&6;73#!!#"!#LØþ(0,:£CyEB†èˆª6£'|°>þŽv\JK-".4ú"$:®ª ½1Ýc¬©ŽQı2ªþ#ª‡KK‚_fªf_lF‚¥O]B°/° 3° 3±í±í±í°°Þ°2±í±í°°Þ°2°2±í±í±í01!3!!".>3!!"Nüí=c…Øþ(ˆæ††æˆØþ(…c=ÖªI9[ªÜܪ[9IP¸C±?°3°3±í±í±í°°Þ°2±í±í°°Þ°2°2±í±í± í01&'.#!5!2#!5!276767!5  ,˜Zþ(؈膆èˆþ(Ø\JL, üâ1f_‚–ªÄþ¯þrþ¯ÄªKM€_fªÿOPi%+h±?°3°3°3°3±í±í±í±í±í°°Þ°2°$2°%2±í±í±&í±'í°°Þ°2°2°2±í±í±í°/°/01&#!5!27+'7#53!5!3276767!73&'&'…þ(Ø/-9£CyDD†èˆ«6£'{®’þÀrx\JJ. þÓ4ù %: ª ½1Ýc¬©þrþ¯Ä±2ªݪýyKK‚_fªf_lF‚¥O]B°/°3°3±í±í±í°°Þ°2±í±í°°Þ°2°2±í± í± í015!&'&#!5!2#!5!2767ƒ>b†þ(؈憆æˆþ(؆b>,ªI9[ªÜþþܪ[9I˜þL9î@ ÖLLÔìÔì1Ä2Ôì0!#!˜¡›ý•þL¢ø^øâþL=î -@  Ö ÖÕ×  Ô<Ä91äôìî990!!5 5!!LñüR%ýÛšý# þÕ‰\—P_ŒüÝX-y×¶lÔÄ1Ôì0!!X!ûßתXy“!5!!5!3!!yûß!ý›þD¼¨½þCéªûmIªLþ´ªþ·ÿÿÿB#Õÿÿ¦¯+U þeÿÿ+G¦ÂrýÒÿÿ?š‘ê¾É;ÿÙ   /@     ÔÄ991ÔÄÀÀ90'%3##d)#ÛÓ”/þöÝ}bý%¿ƒù¼9;ÿÙ v 3'%3###"&'532654&+532654&#"5>32d)#ÛÓ”/þö>^c¾±:r;Eq-evnmBJ]b`W,p;Eu2‘¨XÝ}bý%¿ƒù¼9ÔlP|†yQDJLl?<8?yvcG];ÿÙ e '%3##33##5!5 !d)#ÛÓ”/þöÚ¢ttŠþ}ƒþîÝ}bý%¿ƒù¼9Sýæoººy“þcºúð %.#"326"&'#"&54632>3"3ª8\32#"&'#"&54632¶9[=G[TFBiË8\=G[SDCj~/“[w¬£~S€NA„U}¦„^ˆsˆd†lk€ut†c…jmvÿuÛ §Ôdƒ|kÖ¥­Îs}Tõ!3!Tü*ª,ÖüÔ}Tõ!3!Tü*ªýp¤ÖüÔ¤,¢33# ¤NíM¿þûþû¢û^¬üT¤,¢3 3#¤¿¿þ³í¢üT¬û^¤,¢$476767632#4'&'&'&#"#¤;9_UijªB9¬ KGLV32326yKOZq Mg3OIN’S5dK t]F‰¯;73 ";@®<7  6<Xñy32767>32.#"#"&'XJ‰F]t Kd5S’NIO3gM qZOK?<6  7<®@;" 37;X®yG&'&#"5>323267#"''43OIN’S61-NˆSXIF‰JKOQdSˆP  ;@®<7 Wþ‘"323326X!ûß!KOZq!Sc1NJO’R`‚!t]DŠ¢ª¤°;83$777=X`yÃ!!#"'&'.#"5>32326X!ûß!KOZq Mg3OIN’S5dK t]F‰ ¬c¯;73 ";@®<7  6<XbzÕ'767#"'!!'7#5!7&'&567676ǧfYUE5kIQ%\n*ýx˜rYéQ’MoIF\<[ETFR‚ Æqþà$"B²2(²«þdš«ç%(9¬L5XXÀy$!!!!#"'&'.#"5>32326X!ûß!ûß!KOZq Mg3OIN’S52'V t]F‰جÀ¬ϯ;73 ";@®<7 " 6<X1y0%#5!7!5!73!!!'#"'&'.#"5>32326Qùu‹þ{hq,ùþ‹‹ý„gqTKOZq Mg3OIN’S52'V t]F‰À¬À¬R=¬À¬R ¯;73 ";@®<7 " 6<Xy.1%!5!7!5!7&'.#"5>3273267#"'!!!!'hþðMEþnÐK Mg3OIN’S523J:V›Q F‰JKO!8¡þ!E$ýŸFœÀ¬À¬Ñ";@®<7 î8á32326#"'&'.#"5>323326yKOZq Mg3OIN’S5dK t]F‰JKOZq Sc1NJO’R`‚ t]DŠï;73 ";@®<7  6<þа;83 $77 7=X0yÃ8&#"5>327&'&#"5>323267#"'3267#"/'Ý00NJO’R:G67'43OIN’S520N]Ša91F‰JKO?J4r[DŠKKOdgbŠ£ 7² ;@®<7 !7)þ½32326#"'&'.#"5>323326!!yKOZq Mg3OIN’S5dK t]F‰JKOZq Sc1NJO’R`‚ t]DŠü*!ûß“¯;73 ";@®<7  6<þа;83 $77 7=þˆ¬X•y“7S#"'&'.#"5>323326#"'&'.#"5>32326#"'&'.#"5>323326yKOZq Sc1NJO’R`‚ t]DŠKKOZq Mg3OIN’S5dK t]F‰JKOZq Sc1NJO’R`‚ t]DЏ°;83 $77 7=¯;73 ";@®<7  6<þа;83 $77 7=XÀy$!5!53276767632.#"#"&'yûß!ûßJ‰F]t V'25S’NIO3gM qZOKج¬þ”¬¬#?<6 " 7<®@;" 37;WÝy' %52% $'"51þpþ¶Z¸¹Vý(Iþ§¸¹þ©Ùœ²œ£²þ¶œ²œ£²XDz¾;%76767!##"'&'&'#5!!5367676323!&'&'&i1*+Vá WJRNMR  áW,!::!,þ©á\HSLPM% áþª+*ß%'H:^¨2:A<336G84¨^:H'@'H?Y¨ L=@33/N0<¨^:H'%X`z¾!!5367676323!&'&'&!!i:!,þ©á\HSLPM% áþª+*ý¾!ûß#'H?Y¨ L=@33/N0<¨^:H'%ýäªÿÿX`y'1¹ ÿÿXÿéy& '1ýº1¹ÿÿXÿìy'1þo¹& 1”ý½ÿÿWÿìz'1þný½& 1”¹J.‡Õ 3#3#!5!5Jìììì=üûüû>þð§þ𹬬–ªªJ.‡Õ ##!!!!‡ìììü¯üûüû>þð—þðþ7¬BªX`y¢ 365&'!!5!&547!5!!%43‘448ûß>þÀ!þÉú0IG00GG2ðªª?8>;¨¨_8X`y !!!!"264&'2#"&546X!ûß!ûßIdd’deH:l'**©z{¤¨ ¬Bª¬bFE``‹bq+((d:s¡žvv£X`yK!!!!2&'56X!ûß!ûßæË×ÚØÜÒ ¬BªS—²— ž²—X`yD!!!!73# X!ûß!ûßÖê¢é«¦ ¬BªòZý¦ªþVX`yD!!!!33#X!ûß!ûßÖ•¦«é¢ ¬BªLþVªý¦X`y¥!!!!!!'X!ûß!ûß° TU ÚUÜÛT ¬Bª­ÿžÿŸŸX`y° !!!!!3!X!ûß!ûß–-Éeý“ ¬Bªþz(ýiE`Œ07GO!!!!#"3###535463!3267#"&54632.#"'53#5#"&4632264&"X!ûß!ûß4@#mmC???DíþÐJB&G$$K&aqk[Q_B;18BÇCC?-I\\I-?Ìp`ctiF6A?9iÚýÐ=$#t¾u#g“SS“SX`y*!!!!>32#4&#"#4&#"#3>32X!ûß!ûß."]?T\Y88EQY7:DQYYU;;R ¬Bª¥=:xoþµHOM]QþÊHPL^PþÊ%U20=X`yÚ ,!!!!3#7#546?>54&#"5>32X!ûß!ûßÃffc`--A6(Y1/a3\p$-, ¬BªiÈN2A+,/-7#!^aO&E++ X%yÝ<@ l  l  Ô<Ä291Ô<Ä2ü<Äþ<Ä990!3!!!'7#5!7!X‡ö}¤Ëþ²¸ýyø}¤ÉJ¸ýþ¢;fÕªì¬þÅhÓ¬ìXÀyB !!!!!!X!ûß!ûß!ûßجÀ¬‚ªX yú%#5!7!5!7!5!73!!!!!'Gï=XþkåXýËU7ëþÈY‘þ Z:ýwSÀ¬À¬Àª¸AwªÀ¬À¬¶@Xyî 7!!!!!!!!X!ûß!ûß!ûß!û߬¬„¬À¬‚ªVw? (@®­l  ü<ì2291/ìôì905!5wûß!üß!ûß¶¶L¨K¸çþ ªªXy? (@®­l  ü<<ì291/ìôì90-5!!X#üÝ!ûß!ûß¶êç¸þµ¨þ´VªVÿTwŸ 3!!5!5V!ûß!ûß!üß!û߬¶L¨K¸çþ ªªVÿTwŸ 3!!-5!5V!ûß!üß!ûß!û߬Âêç¸þµ¨þ´VªªVþµwŸ#5!7!5!73!!!'5 Êp[þ5mš{*Éþ•[Æý”™y~ûß!ü߬¬`ª¡u,ª`¬Ÿvë¶L¨K¸çVþµwŸ#5!7!5!73!!!'-5 Êp[þ5mš{*Éþ•[Æý”™y£!üß!û߬¬`ª¡u,ª`¬Ÿvëêç¸þµ¨þ´Wy&%5767$'5674½þà[ØÂš‚zšØ¢b¾þ¥ØÁš|˜Û Ûˆ²ªMþþ)I²g#ˆ²ªþM(J²h#Xÿãy %5%%%'áþw2r™K/þ’dÒýþt™äþÙé”›¦Þm0ñx¶Šþ»®·Ëþ‹0ÝoVXÿãy '75%%5%'ð‰ýÎr™KþÑndþ.t™ä'éo›¦Þþ“0ñx¶ŠE®·Ëu0ý#oVXÿ y!5!%5%%%!!'XÿÓÇþôC_þ^?s¡Mþ¤Nªþ#N+ýžP¢êJ>ýžªƒ¨´`5íY¸dñ|¶–ìªó5Xÿ y!!'7#5375%7%57'à™ýËNƒýEO¢>³ë:þÛfLþNæt¡ÐøÎt€¨±ñªó5¾ª²\¶hì}¸˜a5ý…H<VÿÔw?#%#"'&'.#"5>323265wKOZq Mg3OIN’S52'V t]F‰Jûß!üßõ¯;73 ";@®<7 " 6<¶L¨K¸çVÿÔw?!(%#"'&'&'&#"5676323276-5wKHGOZq M343OFGINIIS52'V t]FDEü)!üß!ûßõ¯;3 " @®< " 6êç¸þµ¨þ´Vÿ w+.%"5>327%5%%%3267#"'&'&''}QIN’SEþ^As¡Mþ§P©þ#Bt]F‰JKOZq _¢4þýÕO;@®<7Öƒ¨µ_5ìX¸cò|¶–Ï6Vÿ w27'732767#"'&'&''5676?5%7%5ƒôÊ3—ýÍ;L t]FDEJGLGOZq P32326&%&%5$7$7wKOZq Mg3OIN’S5dK t]F‰JþÝþl”#·þä÷þ©aí·¯¯;73 ";@®<7  6<RþÐO]þÞïÉ—‚9¦=}–ËVÿŽw±*%#"'&'.#"5>3232655%$wKOZq Mg3OIN’S5dK t]F‰ü)·íaþ©÷þçº#”þl¯¯;73 ";@®<7  6<RïË–}=¦9‚”Ìï"]OVÿ[w§67&%'&'5$774£h›m µUéÁ²þÖ ¢¦ÀéGöc _eT§2þªw™ï°nþëwÔï÷ýô2"O0¦Bþ¼j%Vÿ[w§'567&'567&™£h›m µUéÁ²* ¢¦Àéþ¹öc _eT¥2Vw™ï°nwÔï÷ 2ýÞO0¦BDj%X£y_%!"'&54763!!"3!yý½ÉŠ‹‹ŠÈDý¼‰¾_`ˆD£‹‹ÈÆ‹–ÀˆŠ^`X£y_75!27654&#!5!2#XDˆ`_¾‰ý¼DÈŠ‹‹ŠÉ£–`^ŠˆÀ–‹ÆÈ‹‹XÿÄy> #"&'&5476;7!!!!"#'J‰¾_+30TD‹‹ŠÈ~K¡9þºÝ#ý½ K¢ÉÀˆŠ^+#E‹ÈÆ‹ß5ª–ýp–ß5XÿÄy> 32654'&'7+'7!5!!5!237RJ‰¾_+30TD‹‹ŠÈ~K¡9þíFÝýÝC K¢9ÀˆŠ^+#E‹ÈÆ‹ß5ª––ß5Xy%!5%!"'&54763!!"3!yûß!ý½ÉŠ‹‹ŠÈDý¼‰¾_`ˆDªªªš‹‹ÈÆ‹–ÀˆŠ^`Xy%!=!27654&#!5!2#yûßDˆ`_¾‰ý¼DÈŠ‹‹ŠÉªªªš–`^ŠˆÀ–‹ÆÈ‹‹Xÿ,yÖ&%!!'7#5!7&'&5476;73!!!#"$UýrGŸ6ã:qY‹‹ŠÈ²Gž5âþìÜðýÝ^‰¾_=RªªÔ5Ÿª¬ Y‹ÈÆ‹Ö5¡–ýp–&Àˆˆ`=Xÿ,yÖ!++!!'7#5!7!5!&#!5!27327654'&'ƒ92‹‹ŠÉD4VýqFŸ5â3þ²Û ý¼D&#Ižþ¼ˆ`__Ç 2ÆÈ‹‹šªÔ5Ÿªš––Û5ü9`^Šˆ`Xÿ0y!%!'7!5!7#"'&54763!!"3!!yþ§„Rþ è|†ÉŠ‹‹ŠÈDý¼‰¾_a‡Dþ±AQªªÐjfªš‹ŒÇÆ‹–ÀˆŠ^`–5eXÿ0y"%!'7!5!7#!5!27654&#!5!2yþ§„Rþ è|ý½D‡a_¾‰ý¼DÈŠ‹‹]zTQªªÐjfª›–`^ŠˆÀ–‹ÆÇŒ^DeXwy‹1°/°3±í±í°°Þ°2±í±í°/°3±í±í01!!!!X!ü‰wûß‹ªý@ªXwy‹1°/°3±í±í°°Þ°2±í±í°/°3±í±í01!5!!5yûßwü‰‹ûìªÀªXyô H°/°3±í±í° °Þ° 2±í± í°°Þ°2±í±í°/°3°3° 3±í±í017!!!!!!X!ûß!ü‰wû߸ªæªý˜ªXyô J°/°3±í±í°°Þ°2±í±í° °Þ° 2±í± í°/° 3±í±í±í±í01%!5!5!!5yûß!ûßwü‰¸ªª<üDªhªOi‚ž3?2"&'&'&547676"2767>54&'&'3!!#!5!úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FÞŒþìŒþížPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9þëŒþîŒOi‚ž372"&'&'&547676"2767>54&'&'!5úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FÂýMžPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9þÕŒŒOi‚ž3?2"&'&'&547676"2767>54&'&'77''7úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FþBcÄÃcÃÂcÂÂcžPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9­cÄÃcÃÂcÂÂcÂOi‚ž372"&'&'&547676"2767>54&'&''úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:F,cþcžPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9KcþcOi‚ž73#2"&'&'&547676"2767>54&'&'éüüݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FþÏ¿POO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9Oi‚ž2L2#"&546"326542"&'&'&547676"2767>54&'&'h7b%&'œqq—š§nNL88OôݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:F)'%`8nš—qqœ‡MpLM77äPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9Oi‚ž!'/7=E2"&'&'&547676%&'&'& 654'67676-úݾOO''''OO¾Ý¾OO''''OOfÿ:F-þìTþ1-F:þžþ:E.þûþìSÿ1.E:žPOO__pm__ONPPNO__mp__OOAþÏš9î––FPQþ¼™þÒ9ƒ.™9ë––EQPDš19Oi‚ž!;!!!!2"&'&'&547676"2767>54&'&'+{ý…{ý…ÏݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:F;gZfÖPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9Pjž.22"&'&'&54676"267>54&'&'&!5!úݾžNNON¿Ý¾OO''NON-RŒ9;99;9FG£Œ:;99;:FFxþm“žPž¾pn¼PNPPNP^_mp¾ON<<9;ŒSQ‹;:<9;ŒPSŒ;:þ+ŒPiƒœ%!!!3!!#!5!ôüèŒ3ûÍÒŒ8þÈŒþÉ7õüå§û͘þÇŒþÊ6ŒPiƒœ %!!!!5ôüèŒ3ûÍrýMõüå§ûÍ_ŒŒPiƒœ%!!!7   'ôüèŒ3ûͬc  cþôcþøþöc õüå§ûÍ#cþõ cþôþøcþ÷c Piƒœ 3#!!!éüü üèŒ3ûÍþÏêüå§ûÍXy!!#yü‡¨ýÓªýÓXy!!5!3Ñü‡y¨-ª-úüXy!!5!!þC!þDZªªû¦Xy!!5!½½ûß¼û¦ªªZé/å`·nÔì1Ôì03#éüü`þÏ›É7 !!'  TS ÙTÚÚS8ÿÿžÿžžÿX`yÃ!532767>32.#"#"&'yûßJ‰F]t Kd5S’NIO3gM qZOK ¬¬·?<6  7<®@;" 37;XþAy 755%5!5X!ûß#þûß!üß!ûßʶþ´¨þµ¸ç¬¶L¨K¸çþ ªªXþAy % 5 -5!!yüÝ#ûß!ûß!üß!ûß!ûßÊêç¸K¨L êç¸þµ¨þ´VªVw?  55!5!wüß!ûß!ûß!‰êç¸K¨LVªXy? 55%5!X!ûß#üÝ!‰¶þ´¨þµ¸çöªªVÿw± $75$&%&%5$7$7¤"±ËþøÞþn³·þäíþŸW÷·þÝþl”ÈÏüÜœƒ8È6üsïË–}=¦9‚—ÉïþÞ]OVÿw± $'$'5%$5)ànþÞþøË±±#”þlþÝ·÷WþŸíþä·š6È8ƒœÜüÏû0O]"ïÉ—‚9¦=}–ËVþŒw)%*67&'&%&''&'57&%5$?7d¢MjT˜VÊ¥©þ3˱þÞ!³¢º£Ð÷¶3Òþòaí4m"cjX)3õS]ï‡[þîe¥ï¹¡œÜüÏÈýÈ3N@È%H£Z-¦=}þ¤k$VþŒw)$(6%'56?56%7$'57&%¢¥š»ÿËDÑ>þ’à¡¢WwZŒ©NçœÌ(þåÛ·+/m")3ýó3 ¦+SØi0È6šþ3hiü˜y÷‡¬ïËjeåïË–ÜXÿ[y§3!!!'7#! !PžYäþØþæBýzržYä†þ¢þh§?ݪý@ªþä?Ýü–Àý@Xÿ[y§3!'7#5!!5!!PžYäýzržYä(ý¾†sþ昧?Ýûìþä?ݪÀªªý@ÀXÿ>yô!!!!!!'7!5!7!X!ü‰wþÒ R`þ§„Rþ ègý±ôªý˜ªfªÐjfª€Xÿ>yô%!'7!5!7!5!!5!!yþ§„Rþ ègý±wü‰!þÒ R¸ªÐjfª€ªhªüDfVþíw?%%&'&#"5>327%5 %3267#"''43OIN’S:Z0ýì!üß!þx2XIF‰JKOQd>ˆ3  ;@®<7 Ò§¨K¸çê¶{ß"327V!üß!þ?E>XIF‰JKOQd>ˆC43OIN’S:Z0ýì¶êç¸þµ¨þí"323267#"''&%&%5$7$743OIN’S61-NˆSXIF‰JKOQdSˆ¹þÝþl”#·þä÷þ©aí·  ;@®<7 Wþ‘"323267#"''55%$43OIN’S61-NˆSXIF‰JKOQdSˆþ˜·íaþ©÷þçº#”þl  ;@®<7 Wþ‘"ø # #hÖ£þÍþÍ£øýGÇþ9’þò>¬ 3 3hþ*£33£þòºþ8È’>Ž !!# #œ™ügÌÖ£þÍþÍ£ŽrcýGÇþ9’>ˆ !!!!# #œ™üg™ügÌÖ£þÍþÍ£ˆrˆrcýGÇþ9þò)!##€¨ðþ¹¸ùm˜þò´ ##7³þž¸GðøÞ“þò9 33b¸þ¹ðþò"ùm¨þò´!733QþXðG¸þò“%–¯C!!3#ò½þCÍrrCr[þ  –—C!!3# ½þCrrCr[þ %ѯ~!!3#ò½þCÍrrCr­þ  Ñ—~!!3# ½þCrrCr­þ Xsy^!#yü‡¨^¬þÁëap$%%$牉þþ‰þñ¸¸¸¸ýøЉ‰€‚ŠŠþ~ýøô±±þ ýå±ÿÿ°Ë ›œ°Ë%6 %!&'&"1˜1™2ûÀ»*ÀzôzÀ°`°XX°þ rÅoGGn¸Y  67" Ò,›J5þPþP5J­ø…X*7ýú7*#LþÈ8¦åP"2642#"''7&546ÄŠ‡ÇŒîži56Ø]ÌQÍBÖɉLJ‰Ão3…N˜ÖEÌQÌ\|ØGéŠ+-7AJT35#"&546;5#"&46235462+32"&=54&#"3#"2653264&"2654&#ÏÏ‚·YxxY·‚Ï‚¸€€ZxxZ€€¸‚þÉE1/EE0uu0EE`EŸv/EDaEEaDE/¢ÐþÈwZ€\Z‚Ђ¶€ZwwZ€¶‚ЂZ\€Zw u0EE`Eþ`E/1EE0E`EE0ýëu0EE1/EXsy^!3!yûߨysëþÁ+ѵ~!#!µýèrŠ ýŭѦ~5!#Šr rýS;+ÿ޵;!!3µývrr­ýÅÿަ;)3!rýv;ýSþLl4732#"'&'.#"0 ¾ÊPd@7+ hþ$¼TA6?&Hý•þÓú˜|þlj #"&546323250Ç ¾ÊPd@7+ h‰úõ$ýýþDTA6?&Hk-khéiÉ !!!#%!!h\‘þrþoâa þ`ÉüÞ¾"¾¾(ËI  !! #37!#3'ËþQüêþÓ'ÈÈ'þHƒƒþo99ÈɃƒ¹þo!þpþáþâ=»»ýÃþâ»»}(TI #!!7!#3'âlÈÈÞü)×ý‘ƒƒþokkÈɃƒš=þáþâr!r»»ýÃþâ»»+2³Ÿ" #/;GS_kwƒ›§³¿Ë×ãïû+7CO[gs‹—£¯»ÇÓãïû!2#!"543!254#!"+"=4;2+"=4;27+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4"=43+"=4;2+"=4;2"=43!2#޵\\üK\=µüKl]Џ\¸\\\]¦iiüÅ\][]\\\\\\\\]\\]\\\\\\x::f>]ýY­"\þI\\·\\þI·þ`LLMK\y>þÞ>(ËI !! 3#)%3!'¯üêþû-'ÈÈ'¸þúƒÈÈ9þ6ƒ¹üß‘þá»»þáþâ=ýûHÿÓˆJ7 hýàHØØH--JþäJÿ4Ñ¡!!!ríþrÑZ‰ùmø“ÿ4Ë¡ !%!!5!5!5!!Åû­áüáüáüÌmø“rº¬ìªÿ4Ë¡ 3#3#!%!!5!!îõõõõþÅû­áüáüoöþõþžmø“r‡ªXÿ4Ë¡  ! !! !Ã¥¦þZþáþþSû;Åû­ðñüÜþZ¦¦û$ÄþðüÊmü­ðþáÿÿÿ4Ë¡&£ ;ÿ4Ë¡ '3276'&#"!#"'&'!!67632!€ôzzzzõõzzzzüáIw™˜™˜wHSû;Åû­Hw˜™˜™wIüõýÎGG2GGû$Ê_EXXE^ýÅmý¨_DXXE_çþ¢Ë3#%673#&'%676'&1rs˜rs2þÎsr˜sr·ôTTTT@TTõõT|À°Bôþ B°ý@°Bþ)×B)ýÎ1Ì1@ü4121ÿÿtËD' †È ;ÿ4Ë¡ !%!!Åû­Yü§áüžbÌmø“Æ5Aù¸ÿ4Ë¡ !!!!Ëû;Årü§ˆbÌmùY5Aù¸ÿ4Ë¡ !%!5!Åû­áüáüáüÎÌmø“rXˆÀˆaû…eþÌÿ4Ë¡ !%! !Åû­áü2üÎáüÌmø“ràþxý›1éþxéÿ4Ë¡ !%!!5!!Åû­áüî ZþëZ üÌmø“rÏ ZnZ ÿ4Ë¡ !!'7!!!'7Ëû;ÅrþëZ üîáü ZÌmùêþëZ ý1X1üê ZÿÄËÕ'327#"'$%'3632# 6'&#"€ôzz=>þlÏ–WW™˜þÏs¿PYX˜™2þç¾þv”Òõzz>ÜþçGjŒü²X°`O°ú®X°þ þ¯°þéòü•ŒG%þ¢¬3 33!#!!3˜/Éþ˜þ É.öŽööÕ^þ¢ú+þ¢^ÕúÕkü•kÿ4Ë¡ 7!!#xðñrû;ráþc¦/þíû³Krø“müìüåüuÿ4Ë¡ % !%!50!53!ŠþÞþÞþÀÅû­áü‚Ý‚üªyû‡þŠmø“rZ[zú†Ôÿ4Ë¡ !!%!!''!Åû;´ŸþGZ ¤ ZþH¡ø“r‰þìZ úE» Zùw%þ¢¬3 !#!3!###.þ7÷˜øþ7/˜öö˜öÕ^þ¢ú+þ¢‰ü•kü•kÿ4Ë¡! !! 3!xáþþSû;Åû­ž¦üZKû³þ{mû§üuåÿ4Ë¡ ! !%!#5!5!Šý¼"ýžÅû­áþ~Ýþ~áü+û‡þ‚mø“rÔú†z[Zÿ4Ë¡ !7!)!7Åýï Zþì¹ý½þb¸þìZ Ìmø“ûúE Zþì‰ùwZ ÿÿÿ4ÑÕ&  :ÿ4ËÕ % !3!5!ªþ¾þ¾†ûyÉõèû;Ūyû‡ªÕù_rÿÿÿ4Ë?' ‚È 9ÿÿÿ4Ñé& ; :ÿÿÿ4ËD' †È 9ÿÿÿ4Ë¡&£ ÿÿÿìZå^' ªÈ2ÿ4Ë¡ !!!3#3#xáürÅýüüüüZ‰ùmø“óþÑþ9þÏÿÿ›É&2 <ÿÿÿ?Ô‘H& ; <ÿ8ÿÿt˦' †È <–ÿÿXìyH&a <ÿ8ÿÿXyH&! <ÿ8%¬Õ *!%#567!676&'&'&'&ªý|z*(2J E<iKH#&ºõÙGIJEÂ‡Ø Eý¢—|-2 M3 +þO  ! r®;ýŸÆ ?®9yý?pýæ¸  ! Xÿãyð*= 67 '&5677%"632327'&32767#"'&'.#"yÞ{h p{þ"zi piE5 5dJ t]BFþZCEŽF4 Zq Mg3ðħþЮþ°´ÄĨ1®P³$˜sÎ 7%’˜ý‚þÛ’˜˜sÎ3 !Xþ¢y3#"'#&'&#"5>323326yKOGU˜43OIN’S52˜^NF‰z®;7 ü(  ;?®<6 Ïûó'=þáÑ'3#3!!#7#537éüü ü`?þ‡+š¨Æ0'þÑþ7ϺrSSrºÿ4Ë¡!!!!3!!!'7#5!7!xáürÅû÷Ådƒ¢þõ“žýûÇdƒ “þeZ‰ùmø“n;fÕªì¬þÅhÓ¬ìÿ4Ë¡&*!!!#546?>54&#"5>323#xáürÅýá¾=TZ>/ƒmN²b^¿hºÝC^XE&ÅËËZ‰ùmø“]šb‰RY;X1YnED¼98À¡Lƒ\VBT=/þòþ6Ï`;#"'&'#5Ä"$lYo´RQÒ`ý+‘.0œ`bÔ;¾þVT{6#"&'#76&#"32„èttèÊf™,¹nƒ䇅†ŠŠ†…{žþêþïþÉWSýÉÆ<†üÞ¬ÚÛÕÔÜFÿãŒ`&#"&'#"'&37676376' ƒ2KºU‚€XºK2ƒ¾~)@V"ª"V@)~`þøý¿{¹gLHk¹{Aþíþáâ>‘oRyþ‡Ro‘>âÿÿÿ4Ëy&™ 9œÿ45{!%&'&#"!!32?# '&76!2!5! %%cj·f_¥ý[_f·€MJOhkþôœœ en(',üg™® c\©©\c§œœ(œœ úãrÿÿÿ4Ñ`&’ :ÿÿÿ4Ë`& 9”Fÿç•y *'&'&3273;#"'&''&'&767þ,-±b=MJMU…Hi;c¤Í( #) Xn^T).\-Ærv~¡ çìo‰·ÜikÕ*þ½%ý¡Û1)0œT*XmY*–œ)‡—þ.·µ #5!!!#áÇo¿oÇþ.Ú­þ%Û­þ&HÿÓˆ:07 %#"326=7#5#"&546;54&#"5>32hýàHØØHþ#[]E>Vcii!fHatŽŠŒLT5m4:j2O85%--JþäJó??8?vh+þš]85l[hmKDg/RÚË: 953353!53!5!#"326=7#5#"&546;54&#"5>32as7sþ9s¡û;Åü·#[]E>Vcii!fHatŽŠŒLT5m4:j2Op"¸Þr§??8?vh+þš]85l[hmKDg..RÚË:1=[%5!!5!#"326=7#5#"&546;54&#"5>32#"326757#5#"&546;5.#"5>32›0û;0´#[]E>Vcii!fHatŽŠŒLT5m4:j2Op""[]E>Vbii"eIasŽŠŒLS5m4:j2Op"Úrrrr??8?vh+þš]85l[hmKDg..R}??8?vh+þš]85l[hmKDg..RkËŠ*.26:>B#5#"&546;54&#"5>32#"326=%=!!%%%5!55qi!fHatŽŠŒLT5m4:j2O85%Ñ#[]E>VcÊþÔ,þÔ,þÔý“þÔ,þÔ,þÔþš]85l[hmKDg/R}??8?vhþñyŒy¼rDŒyŒyyŒyþ¢rr¼yŒyR8~Ï4<DLTZ`%#5&'&'&''7&5475'7676767537'5676767'7&'&'&'5'7'%654šd3/D9±2°°2±9D/3d4.E9±2°¯2°9E.42* ¨¨ *2ƒ2* ¨¨ *2¼©©*©©8Ë8fWfEOPDfWg8ËË8fWeDPOEeWf8g * apÃa *  * aþÃa * ³ba.43•ab-45F^Š¢'04>2".33&'."#67>76#FV“ÊÞÊ“VV“ÊÞÊ“ðÀÁï"v ² v"Z¤Ï83Pv"þÎ¥"vP3ÞÊ“VV“ÊÞÊ“VV“nþ˜h<8PvDDvP8¢þ‚"vP9þÁ~?9Pv"F^Š¢&0!4>2".7!&'."67>4'&hóþþÑV“ÊÞÊ“VV“ÊÞÊ“DvP47þ´9°; ² ;Ñþ´74PvD"MÇþýÞÊ“VV“ÊÞÊ“VV“’² v"i c;DD;gý—"v ²P F^Š¢ %7'32>4.#52".‘®ÍîVþ—FÊýúoDv ² vDDv YoÊ“VV“ÊÞÊ“VS’wþVî—ÊFþ_Y vDDv ² vDoV“ÊÞÊ“VV“Êÿ4Ë¡!!!xáürÅZ‰ùmø“ý𸆠#53Û຦ þüZýðê—â0ýóþ†ýîüíýüÛ‰3#ÃÉösþ¸‰ #5Û“ˠР‰êü¥þWþþeEî%3êý𹆠53öZþü ¦º ýðêz þýýÐþüiêöýü¹‰#0¹Ã‰ös þ¹‰ 3#öàР˓‰êüÍýÛþþ»›ì©[ýü¸m#!!Ûàþ#ýü qÃýüÛ‰3#ÃÉösþ¸‰!!ÛÝý`‰÷Nà uýü¸m!5!õþ# ýü®Ãöõýü¸z3#õÃÃzö‚þ¸z3!5!õÃý`ÝzöšÃ ýêÁm #4763!!"ƺoyºþçeD9ýêuß‘ž°fW™ýüƆ#'&%'53 763ý:*eºnKþû==Mnºe(Á =“þCýè ·_A»Ec³ ýèþH˜< þÁ† 3!!"'&5Æ9Deþí¸{o†ø”šVf°žád ýôÆŒ#3ƺºýô ˜ýêÅm 4'&#!5!2 9Deþçºyoýê}™Wf°ž‘ßø‹ ýüÀ†&'&3!3#76Ô<(eºnM==þûKnºe*Á!<˜¸ýôþMcE»A_þIýô½“=þņ 3#!5!2765 ºo{¸þíeD9†øœáž°fVšþlj3Æþ ‰öw¼v% !!!!55!#Žþ‹u©Xüÿïý ̼uuÉ™ý]ÃÃ]eËÄ! !!Ëû;bcû;Å $û<ø:þ.]µ3!3:~¨\T\¨~þ.‡þ%Ûýyÿìðåœ5!ùð¬¬ÿìšåò!ùšXþ¨ý–¸È3 ý– 2õÎÈý–È!È@ý– 2õÎÿìðåœ 5!!5!!5!±4üï)üï4𬬬¬¬¬ÿìšåò !!!!!±4üï)üï4šXþ¨Xþ¨Xþ¨ý–¸È 333     ý– üôÀ²ýNf üôÈý–È !!!È@þÀ@þÀ@ý– üôÀ²ýNf üôÿëðåœ 53353353353¼´³´²´½𬬬¬¬¬¬¬ÿìšæò 3333333¼´³´²´½šXþ¨Xþ¨Xþ¨Xþ¨ý–¸È 3333       –2ýÎø2ýÎsÙþ'ýsÙþ'Èý–È !!!!È@þÀ@þÀ@þÀ@–2ýÎø2ýÎsÙþ'ýsÙþ'ý–åœ!!ÍýÓý–¬û¦ý–åò!!ÍýÓý–\þ¨ûüÈý–åœ!!Èþ#ý–¬û¦Èý–åò!!Èþ#ý–\þ¨ûüÿìý–¸œ!5!ýÔÌý–Z¬úúÿìý–¸ò!!ýÔÌý–Xú¤ÿìý–œ!5!Èþ$ý–Z¬úúÿìý–ò!!Èþ$ý–Xú¤ðåÈ3! -ðØúÔ¬šåÈ3! -š.û*þ¨ÈðåÈ!!È@ÝðØúԬȚåÈ!!È@Ýš.û*þ¨ÿìð¸È5!3, ð¬,ú(ÿ울È!3, šXÖùÒÿìðÈ5!!Ü@ð¬,ú(ÿìšÈ!!Ü@šXÖùÒý–åÈ3!! -ýÓý– 2úÔ¬û¦ý–åÈ3!! -ýÓý– 2û*þ¨ûüÈý–åÈ #!!!P@ÝýÓý–ZØúÔ¬û¦Èý–åÈ 33!!ÈP -þ#ý–,úÔ¬û¦Èý–åÈ!!!È@Ýþ#ý– 2úÔ¬û¦Èý–åÈ #!!!P@ÝýÓý–.û*þ¨ûüÈý–åÈ 33!!ÈP -þ#ý–\Öû*þ¨ûüÈý–åÈ!!!È@Ýþ#ý– 2û*þ¨ûüÿìý–¸È!5!3ýÔ, ý–Z¬,õÎÿìý–¸È!!3ýÔ, ý–XÖõÎÿìý–È !5!!#ýÔÜ@Pý–Z¬,ú(û¦ÿìý–È !5!33Èþ$, Pý–Z¬,úÔúúÿìý–È!5!!Èþ$Ü@ý–Z¬,õÎÿìý–È !!!#ýÔÜ@Pý–XÖùÒûüÿìý–È !!33Èþ$, Pý–XÖû*ú¤ÿìý–È!!!Èþ$Ü@ý–XÖõÎÿìý–åœ!5!!ýÔùýÓý–Z¬¬û¦ÿìý–åò !!!!ýÔÌ-ýÓý–XV¬û¦ÿìý–åò !5!5!!ýÔ,ÍýÓý–Z¬Vþ¨ûüÿìý–åò!!!ýÔùýÓý–Xþ¨ûüÿìý–åœ!5!!Èþ$ùþ#ý–Z¬¬û¦ÿìý–åò !!!!Èþ$Ýþ#ý–XV¬û¦ÿìý–åò !5!5!!Èþ$Üþ#ý–Z¬Vþ¨ûüÿìý–åò!!!Èþ$ùþ#ý–Xþ¨ûüÿìðåÈ5!3!, -ð¬,úÔ¬ÿìšåÈ !3!!, -ýÓšXÖúÔ¬VÿìšåÈ 5!3!!5, -ý3ð¬,û*þ¨VÿìšåÈ!3!, -šXÖû*þ¨ÿìðåÈ5!!!Ü@Ýð¬,úÔ¬ÿìšåÈ !!!!Ü@Ýþ#šXÖúÔ¬VÿìšåÈ 5!!!!5Ü@Ýüãð¬,û*þ¨VÿìšåÈ!!!Ü@ÝšXÖû*þ¨ÿìý–åÈ #!5!3!¸ ýÔ, -ðû¦Z¬,úÔ¬ÿìý–åÈ !!3!!ýÔ, -ýÓý–XÖúÔ¬û¦ÿìý–åÈ !5!3!!ýÔ, -ýÓý–Z¬,û*þ¨ûüÿìý–åÈ !!3!!ýÔ, -ýÓý–XÖû*þ¨ûüÿìý–åÈ !5!!!!ýÔÜ@ÝýÓý–Z¬,úÔ¬û¦ÿìý–åÈ !5!3!!Èþ$, -þ#ý–Z¬,úÔ¬û¦ÿìý–åÈ !5!!!!Èþ$Ü@Ýþ#ý–Z¬,úÔ¬û¦ÿìý–åÈ !!!!!#ýÔÜ@Ýþ#Pý–XÖúÔ¬Vûüÿìý–åÈ #5!5!!!!Pþ$Ü@ÝýÓý–V¬,û*þ¨ûüÿìý–åÈ !!33!!Èþ$, PÝþ#ý–XÖû*V¬û¦ÿìý–åÈ !5!533!!Èþ$ÜP -þ#ý–Z¬VÖû*þ¨ûüÿìý–åÈ !!!!!ýÔÜ@ÝýÓý–XÖû*þ¨ûüÿìý–åÈ !!3!!Èþ$, -þ#ý–XÖû*þ¨ûüÿìý–åÈ !!!!!Èþ$Ü@Ýþ#ý–XÖúÔ¬û¦ÿìý–åÈ !5!!!!Èþ$Ü@Ýþ#ý–Z¬,û*þ¨ûüÿìý–åÈ !!!!!Èþ$Ü@Ýþ#ý–XÖû*þ¨ûüÿìðåœ5!35!, -𬬬¬ÿìšåò!!!¸-û,šXþ¨Xþ¨ý–¸È33   òÖû*ú¤ûüÈý–È!!È@þÀ@òÖû*ú¤ûüÿìDåH5!5!ùûùœ¬¬þ¨¬¬xý–XÈ333x   ý– 2õÎ 2õÎý–åH !!!!ÍýÓ-ýÓý–²¬¬¬üRxý–åœ !!##xmþs  ý–¬û¦Zû¦xý–åH !!3!!xmý3 -þsý–²¬úúZ¬üRÿìý–¸H !5!5!5!ýÔ,ýÔÌý–®¬¬¬úNÿìý–Xœ 5!###l   ð¬úúZû¦Zÿìý–XH !5!!!5!¸ý4lþ þt,ý–¬úN®¬û¦DåÈ 3!!! -ýÓ-D„û€¬¬¬xðåÈ 333!x   ðØúÔ,úÔ¬xDåÈ 3!3!¸ ü“ Íœ,û€¬þ¨„ú(¬ÿìD¸È 5!5!5!3,ýÔ, D¬¬¬€ù|ÿìðXÈ 5!333Œ   ð¬,úÔ,ú(ÿìDXÈ 5!35!3Œ ýÔÌ œ¬€úÔþ¨¬Øù|ý–åÈ 3!!!! -ýÓ-ýÓý– 2û€¬¬¬üRxý–åÈ 333!!x   þsý– 2õÎ 2úÔ¬û¦xý–åÈ 3!33!!¸ ü“  -þsœ,û€¬úú 2õÎZ¬üRÿìý–¸È !5!5!5!3ýÔ,ýÔ, ý–®¬¬¬€õÎÿìý–XÈ !5!333xþtŒ   ý–Z¬,õÎ 2õÎÿìý–XÈ 5!3!5!33Œ  þt,  œ¬€úÔúú®¬û¦ 2õÎÿìý–åH !5!!5!ýÔùýÓý4ùý–®¬¬üR¬¬ÿìý–åœ 5!!###ùþs   ð¬¬û¦Zû¦Zÿìý–åH 5!!5!3!!ùü“þt, -þsœ¬¬úú®¬û¦Z¬üRÿìDåÈ 5!5!3!ùû, -D¬¬X¬€û€¬ÿìðåÈ 5!333!Œ   ð¬,úÔ,úÔ¬ÿìDåÈ 5!5!333!ùûŒ   D¬¬X¬€úÔ,û€¬ÿìý–åÈ!5!5!5!3!!!!ýÔ,ýÔ, -ýÓ-ýÓý–®¬¬¬€û€¬¬¬üRÿìý–åÈ5!333!!###Œ   þs   ð¬,úÔ,úÔ¬û¦Zû¦Zÿìý–åÈ !!!!5!5!333!¸-þsþ þt,ýÔŒ   ý–Z¬üR®¬û¦¬€úÔ,û€¬ý–åœ 4763!!"Q[¨yþ‡Y[ý–`¡†¬~|ü ÿìý–¸œ 4'&#!5!2.-Yþˆx¨[Qý–`~=?¬†x¨ü ÿìð¸È 5!2653#xY[ Q[¨ð¬~|2ûΨx†ðåÈ !"'&533!åþ‡¨[Q [Yyð†x¨2ûÎ|~ÿ“ý–>È3mù²ûý– 2õÎÿ“ý–>È#3>²û²ý– 2ÿ“ý–>È # # 3 3>²ýÜýݲ}ýƒ²#$²ý„ý–cûûcúçÿìð|œ5!ð¬¬F¸È3 F‚ú~|ðåœ5!|ið¬¬ý–¸F3 ý–°ûPÿìš|ò!šXþ¨ÈFÈ!È@F‚ú~|šåò!|išXþ¨Èý–F!È@ý–°ûPÿìšåò5!5!!5iý—ð¬Vþ¨VÈý–È333ÈP Pý–°‚ú~ûPÿìšåò!!!iý—šXV¬VÈý–È#!#P@Pý–°‚ú~ûPÿÿÿìå( ?ÿìþåÿ!ùþþûÿìþå !ùþ ýöÿìþå!ùþüñÿìþå!ùþûìÿìþå!ùþúçÿìþå!ùþùâÿìþå#!ùþ#øÝÿìþå(!ùþ(÷ØÿìþF(!Zþ(÷Øÿìþ§(!ºþ(÷Øÿìþ(!þ(÷Øÿìþh(!|þ(÷ØÿìþÉ(!Ýþ(÷Øÿìþ*(!>þ(÷Øÿìþ‹(3žþ(÷Øÿÿiþå( G} ÿìþF( #'+/3!33!33!33!33!33!3¦ ü䟟Ÿüåž ü䟟Ÿüåž ü䟟Ÿüåžþþûþûmþûþûnþûþûmþûþûnþûþûmþûþûÿìþå(%8K#!1!!!!!!!#!1!!!!!!!#!1!!!!!!!#!1!!!!!!F ?þÁ?þÁ?þÁ?þ"Ÿ>þÂ>þÂ>þÂ>þ#Ÿ>þÂ>þÂ>þÂ>þ"ž>þÂ>þÂ>þÂ>þ(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþûÿìþå(!%)-13#3#3!3!##!#3#3#3#3#3#3#žžžžžÞŸÞŸ þ#ŸŸŸ|  þŸŸþŸŸ|  þŸŸþmÖÖþû÷Øþûþû¶þûýýŽþûýÿÿÿì#å( <#ÿÿEþä( JZÿìþh!|þûìÿÿiþå Q}ÿÿÿìh( Qÿÿÿìþå(& Q& R Sÿÿÿìþå(& R Sÿÿÿìþå(& Q& S Xÿÿÿìþå(& R& S Xÿÿiå( Q}ÿÿÿìþå(& Q Xÿÿÿìþå(& Q& R Xÿ±Ëw!ÅNÄû<ÿ±Ëw7!!!xáürÅ$àû®Äû<ÿ±Ëw 3!254#!") ) xäääýçärVVþªýçþªääääýèVþªýèþªÿÿÿ±Ëw& e \ÿ±Ëw !%!5!5!5!5!5!5!5!5!5!Åû­áüáüáüáüáüNÄûž ŸŸ?þÁŸŸ ž:ý´“II“L“IIüØÞ¸[[¸ý"¸[[ÿ±Ëw !!!!!!Åû­·þIàþIý×NÄû<š¸ü àýÖÿ±Ëw !%!!5!!!Åû­·þI)·ü NÄûDJPV\bhn27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'ê&$h%$%%34$&þ1++XSA N@`˜==Žk>P CRX++XYC P>kŽ==l?L ?Q‹ oL+ NnþùŸ;PÖ?ýüÔ; @ þË nMþÓNnä3%%%%34%&&%s==`?J >PW,,WW? K?_==‰f?H?PW,,WU?H?^‘êÒ<…›=þ¡…Ke+cLþ« mC¾†P`kÕ<—<!¤°4(0847632#"'&7327654#"&#%#&7&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ó¤=6 5N'V[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿ÃˆˆþÞ ÌþõʯX[V[X[V[!¤°4(0847632#"'&7327654#"73$3&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ѧ=6þóþý3QNV[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿Ãˆˆþw Ìþð Ê'X[V[X[V[!¤°4!)47632#"'&%#$''&'6%&'6!««ñ󫪪«óñ««4>;D@KDzcngkþ?dnhkê󫬬«óñ«ªª«íþ½Iø Ökpinipi !¤°4 "*2:AIX3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==¼,Â/ý¥Å0œ#¶¨H ™8&O”6ýã þ÷|þò7iY0Âþ6.Á/¤==e6a&i1r4þîz0Ç1¹Æ2œ+ްK“Nƒ2HŒQÖ>>>>Ûf^2Æ"/Æ1]þîÓ8`1"Y 4f2y½ÿ`«1B7#5#53'&'&54767&'&=33676=3#327654'&O&"}|f‡ÌÐz¿¿‹g}}"&&"}†UQn$mQU†}"ú$nQUVV{xVVUQ<"{³±u^Å^¿À\Å _u±³{"#|± zUOOUz ±|#YOT{zQPPQz{TO‘ÿ›@>)4'&#"3276&5476327#'#53'&­`_„‡__¾‡„_`ýo‹ŠŠÅÂŠŠ‰q“ßä‡ÑÑ™k‡]^^]‡†²YYÁÃň‰‰ˆÅÃhÙgÑÓfÙ‘ÿ›@> '"3276'&'7#5373'#"'&5476j‡__¾‡„_``_ÈÑчäß“q‰ŠŠÂÅŠŠ‹q¥YXþòº]]XY†ÚfÓÒhÚhÃĈ‰‰ˆÄÃjš¼0 '&'&376&+"'&5'476%7!¢Z{z[ZZ[~\Yƒ¶¹‚ƒ‚²²WþÞm‚pþçN#ZX[þ[YZ[öþP€€·¶ƒQmþ€p#þïT²±G*Š®52764'&#"#463233#!5èsPQPPtrQPŽô­±yzgÖüLQQäQPPQr®ö{{®Ÿtú|gŽ®*#®"#53533#632#47654&#"#dd¨¨i§qq„CB’igIIuªªþ“gzy±UØr}ppDt PQsþ_C…ŽS 7"27654'&7#"&54767##53#533333#3##h. @\ ! 2(>>?ZW~>'3íûûí|íú}}úíË! -/@ /- !^'?XY??~YX?(Fþ˜}R}þ˜hþ˜h}ý®}hL……S<#5#535&'&'5'73'3#'73'676=35'73'13§|‡e{vw}wwUATwx|xxS@Wwx}vv|dˆšš|re{±Eus~~suE|VAKtrrtý¶@X{Ius~~suI­{dr|×*ú®! #!!!'!27674'&#ß_í82þ½Vý)‰3{D™#M®ÅHZûWýÏ{s{þ?zK›8€…QO##"'##565'##"/547?kM±Ã …,4N"D±F &Fi™?šJO‰ãä/FB!‰O¶ é{|êIm¬<&–§=ˆ…ÃM2227632#&547636=4'&#"#4'&#"=³` ]Á¬d¶þŽ2þ c¤B¼«†ØU›;/ÙG;SœXMâB:þ®@B Õ½þ;7h’–­f%þÐ ´»þ#>…|Ž\þ@¬¸’9‘…@O &&5 i×þC þn:Õþ^¥¦þ¨Oýžý¹ G  ýÞýÛ%½2…ŸO7236;2"'##'65##"'&5476;235&'&=476j°S c1=EÃO¬ ;ÇSC«FRÊTÊ6*F@E1°;Oº+.`„1¦62¨V âþæYiä¦8/ÀD ;8[B ¥V†RP"<B+"'##565#+"'&575477;2732;276=4'&3&'"ih;F”(wQ"D±G".FWƒC©ïNfþêBy" bO–DUq5¦½u4  P¹þˆro¬@ ³ æ|ïS`64 ¤¯'<¤þ·kn™,³:y‰!‘ªìü@JD …ÆO2367632#&5476;§_#KYo¬h«þMþ2ФEOÁL)…XY¸D<κýö6©³­f%‘…@O &47iž9þ) þ2\OýçE ýŸ[ r1† V2`g26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5m¦V^2"ÌL ­<ÆTC¬FRËUË7* 2Q±;Æ‹ XaÈ2p2@­^ DJ‚ŠF Ð,aXj™-!˜DØ2V©9/mˆ±.0­R ãþäZjæ§9/ÂC \‘ §Vþ ¯7yMó5bomœ&#·'p[?$–G¥üOQr!_ª3#"/4?23D¹-!ÈÇ]UªûFš+}{<Ž¢!/ª3#'654'&'#"547326R£ãs9×WÔ5åÈ[Sª%3;Bƒ‰[/OBC'ü*ž|<jÿ_g¥#"=4?2%#"=4?2ÙŒµ3ɧ%QMýûŽ?Ë )TK¥¿û7’(›w7ÑŸü5’s ?|ÀO"'4723!#"5472!5½ÖÀÀYAý>ÇÔÂRHIÂOûó°‡q 1 ýÓ«‘g 4ª€€D%® 3363'$6'"I+¡ˆ×ýÔ4‹ ˜p®üuàòþoS‚üþ±^£±* ¯ 3%#'#3%#¶';&þÂ2 ¯þI˜û¦Ê—Hý¼þ“‡j7*š¯(,377#'#'547#5773%%ö,ppsr,þð'zzxz'þð¯þá9…8þ 4€?þè„þ¹/9†9e5ƒ>ø:ý¹þœƒ_Òþ²Ç&*'$676#"'67667à h5þX@!2 ^:H~]ÕÞ(ýø#7NEþ² SR®õQO‰1ØÌ¡üLÜH~þ²&77$7676&#""~EV*˜(ÞÕ ’:^¨#Dþ89hþ²HÜ´¡ÌØ1‰OQü ®þ®S uþ#\u ! !hôþ þ óþ˜Ñþ—iý/uûÛûÓ-1ýüކþòü 3#‡˪þ5hª‚üpüpÕþòK #3Jþ5ªËhª‚üpuþ#\u hôþ þ uûÛûÓ-Xqy“33#####533ܨõõ¨è¨ôô¨×¼þDªþD¼þD¼ª¼þDXqy“333333#######5ʨ¢¨¢¨ss¨¢¨¢¨r×¼þD¼þD¼þDªþD¼þD¼þD¼ªÿÿ–®;T™ÿ±Ëw7!!!xáürÅ$ðýžÄû<ÿ±Ëw!!!xáürÅðû®Äû<ÿ±Ëw7!!xáürÅ$àû®Äû<ÿ±Ëw%!!YürÅ$àû®Äû<ÿ±Ëw% hËþ5ýžbcýJÊÊþ6býžýžÿ±Ëw žÊýžbcýþ6”þ6býžýžÿ±Ëw ! žÊËûÓbcýþ6Êbýžýžÿ±Ëw! ž•þ5ýžbcýÊþ6býžýž ÿ±Ëw #)-17%#535#5#5#5##5'3#5#5#5#5#5##5##5###5ËÍZssssô®š´ðVÈrrrrÅsZš®š´šVr~ÌrZH®®N³³ýrrrrZZrÌH®®N³³bÈVrrrrrrVÈÿ÷þLÕ +;#"'&47!2#.+3 654'&#ŹߥE-( ömPŠc–JW3|Ùi.icÁ€ gÝ3,>™œjD£EóoQ…Ùƒ^n§þhy¡]ýk7„ýî% P0ELÿããð 73#7 '&7#"326±TÆD¸þÞ¸&”þ;X2PÙ”kk;!Ø”×;!Vš¯”ú+ÁÞÏu'¡AššþÒ¨zþ¿5.¨ÿÅþV Õ ##!!+732767-þ]™rÿº"n˜þÚ&mo¥Í·Z98'üíúÙÕýøúÃijœ>>’¶=Õ %!#3!3újþV˜õ§Ñ" ¸Ñ²üüRÕþ{…ÿÙÿãpð '#36 3265#" þ¬þ:D¸"¸&”ÅX2ü°Ù”Ö;!Ø”lk;!}þf¯”ÕÁÞÏuþÙ¡þäþ¿5.¨yAššþÒ¨ÿøbÕ3!!#Ëwô!ý ŠËÕýœªý9V.`#3!rd¸Ú¸YŸýý`þ9–Mÿç‡h '"27676'&'2#"'&7673WA…\j_,+:5 Š]d97œŸÁ·Ç^`5;—~Ÿ F?c%*9:e…;Ë‘ýRh]ßÝc[„þÙþæ–˜™›,„m£Ks¾Øeg¯. ÿå!#7#"&'732676&+732¹+E؃Do/$2rI¬à(=cÑݳˆ$Ûw"$¼.*ØÌgQ™®¸‰ÿãH{"2>   676326—†pJ‡róÒ½pþÐþ-¼pÄTýÇT (n…‡IÀ^ˆ[]…þÒýÃþÓ-=þâ°þP@7'"]_$5ÿÿzÿWXUýdYœà 3#3)m„þK›q„ûåü¼Dþ{ð9;#"./&'&'732654&/.54!2.#"y@ŸQ!3?.E7@±52ed)bÉp¥ÎX…e¸“J Pµ_'Q®]¥Ðby£—¦ˆÙ¢UOª #8$ìH -ÑEB°‡RZ)!:“yÝ(&Í;<¤GX('2§ëŠpÿùþúÕ#7!7!;#".'&/&#Úý!ÉücO¬$FJ(Q!r I[35-Í5`š‘ªšûo^Í+7ª&()6ó?–ÿå¨Õ$36767#"'&7676?>7#7¾· #`o%iÊhº\[..piR6 42Ë2ÿT6J! 7DüS #D¼98``¡LAB\VBT=;þþú¾®-;,,1Y7»ƒ!##m§ð•¸üþÛƒ #7!#Ë𨲸…üoþò̓3!3ÝðþV³¸‘“þòîƒ!733;þXð–¸þò)uð$%#?>'./.76$32.#"¡2Ë2" &GI.¸g¶S%T¥Ol™ /IIþþþ“{4<5/VV‰LŸÂ89¼CFnY1^5YV‚eš—*X3# 3±ªª ˆþöXˆû0Xú¨[*X3# 3uªª= ˆþö$ˆüdXú¨*X3# 39ªªy ˆþöðˆý˜Xú¨ã*X3# 3ýªªµ ˆþö¼ˆþÌXú¨§*X73#3#ÁªªûˆþöˆˆˆXú¨§*X3##3€ªªýɈ ˆXˆû0X§îX3##3Dªªþˆ ˆ$ˆüdX§²X3##3ªªþAˆ ˆðˆý˜X§vX3##3̪ªþ}ˆ ˆ¼ˆþÌX§:X%3#!#3ªªþ¹ˆ ˆˆˆX§*X!#!!/ˆ yþXˆ§îX!#3!!/ˆ ˆ<ñþXþ̈§²X!#3!!/ˆ ˆxñþXý˜ˆ§vX!#3!!/ˆ ˆ´ñþXüdˆ§:X%!!3Iñý‡ ˆˆˆX{œ£ä 3'#'ž:ËYy…j…­?äÝCƒýU«ƒC-˜Uà #'7374:ÍY{…j…«?˜ÝCƒ«ýUƒCלùà 3#3#7ò€€¢€G3f*ŽDþ‘ÈÈלùà #73#73Þ€€¢€G3fRŽü¼oÈÈÿÿUwD ÿ~ýdöçÔ37 !7 !7 ö |Wþ„|;þpO:$Á£-H£'£Å¢þŒåcmþûþZ3»`!7 !7 !7 3T6þ¬Tþ¬ )’~6™|™˜þèžMY¼þ¸èË[ð 7! ¢2L­P)j *ý±ÍþþÒ.1Ô ÛèV[{ 7! ¢2L­P)j %ý²XþþÒ.1Ô ½ÿøþVÙÕ +732767!#3!ÙþÚ&mo¥Í§Z98Šý׊Ë"Ëw)wÕúÃijœ>>’Çý9ÕýœdTþVH!+732767654&#"#3>32¨&ܥ͹³0Œ]W²!{¸/¸tK¯b‹š ÃÓœúË G'QWº¨ý‡ý¤ab‘‚ ^4ÿÿX#%[Iw !7!7!7!þ>Âþ>ÂI–––åá`Õ3 #–ÊX¢2Õýqþ›eÚªôÕ·QÔì1ôÄ0#ôl®lÕýÕ+ÿÿ§ÕÕ[£þV¤!6#"3;#"'&7# 7632!7!3#â6M \kCY×éŸKG&}=þè&1ô5&KþÙߘúú„K9üÚ|~œjdȆ½öƒüó ÿöþ¾ÓÕ !33###ïÃþþ†_ª>ÜþøðÂÕû3ÍúÕþBÍû3)þâ*{3>323##67654&#"#¸ K¯b‹š jŒU–8®‡]W²!{¸`¨ab‘‚ /03ýàþL· G'QWº¨ý‡aÿã› %"32676&'6#">7.7>3%"”Œº*)eŒ»)*foé½88þÐêé¼8-¤:G% ßžü"þ(½gßÚÖÕÛÛÕÖÚœþÑþâþáþÓ-åØ*/Ž1|”±kI5bç±@`   : ‰ ‡‹      ÄÔÄÔÄ2ÆÀ999991/<æ2þ<îîî2990KSXííí9íííííY"3#'#"!#!##737>3/¸-¸Jµ__•Û¸¾þ%¾¸¾ÉÇ&Á»éé™Secû Ñü/ÑNÁ¥bç‰@K   : ‰ ‡‹    ÔÄÜÄ99991/<ä2üìî2990KSXííí9íííY"!#!"!!##737>øïþѸþÓ__)þÙ¾¸¾ÉÇ&Áùì{Secü/ÑNÁ¥ÿßÿTÏ#'-7>?67654'&#"06763237 e3232673#"&ã"*&"6}#|U">##$(8 } ~\79 32mn 6.mnôî=öY¶ÔÄ91ÔÄ0@//]]K°TX½@ÿÀ878YK° TX½ÿÀ@878Y#ª“‹¾öþø‡îø]@ ÔÄ91Ô<Ä90@/// ]K° TX½ÿÀ@878YK°TX½@ÿÀ878Y3#'#Õž…‹Ñ˜øþö²²ºî5øc@ ÔÄ91ÔÄ290@//// ]K° TX½ÿÀ@878YK°TX½@ÿÀ878Y#373-Õžˆ‹Ñ—î ²²/ømf@ ÔÌ991ÔÜÔÌ0'F#øllá{Wm> #.#"á#¶ C9wVSRo{xz=5]8796{„m @  HHÔìÔì1ÔÜÄ20332673#"&wYRSlw#·†m6978w{zµƒªP"@ ¦ÔÌ991Ôì0@ OO__]3#ÝÍ(ÍPÍcøk3#3#=ºþèšGºþèškþøþøœc'k#!#V’š²ù’š²kþøþø·ñ,0#7676?>7654'&'"#"7676323#/Â! HK40 >2'@M*N=KL |2! !#OJ; þüË2Ë‘šbEBTY;X1-%#DÙ>YHˆiû—Tz ¸Ú_<õÉ0É0üÇýø9mþÑüÇþÙødÑhÑÑsRÿú!ÿìu–¦XË/bb{ÿî\®)?XËXXXFÿãÿ–sÿø5\Nÿø9ÿçÿøNÿÅÿúR3R  PÇRÿÃÿúd“HÅH;œwb;T=Z7ÿòTuÿþbÙsÃ}¶\ÿºÿÙN¸ÿòX…{ÿøÍ/d´ßJX/¸+X3?ÿÙ}Ƕ\ßR///ÿ–ÿ–ÿ–ÿ–ÿ–ÿ–ÿos55559999ÿøÿúRRRRR–PPPPÃ37HHHHHHÿÑœbbbb====wTuuuuuX/}}}}ÿÙÿþÿÙÿ–Hÿ–Hÿ–Hsœsœsœsœÿøwÿøw5b5b5b5b5bN;N;N;N;ÿøTÿø,9=9=9=]A9=ÿçÿøZN7N7N7N7ÿãXÿúTÿúTÿúTÿß(}RuRuRu#ÿú Ù 3 Ùssss Ã ÃŸ²P}P}P}P}P}P}R\ÃÿÙÃÿúNÿúNÿúN;T,Di0CÿøHdAv3tHÿ…G'Gÿª97ÿÝT¿ÿÓ%ÿc}tÿ× *}x I§ÿç Þo© ÿÆÿáMX¡ÿæ XÿáÿáÿîÿáÿõAÿár¨vsÿ–H9=RuP}P}P}P}P}pHÿ–HÿoÿÑN;ÿøZRuRuÿáÿõN;ÿ°ÿúTÿoÿÑ/ÿ–Hÿ–H5b5b9=9=RuRu Ù ÙP}P}s Ã"RÿøTÿ÷4‡ÿ–H5bRuRuRuRuÃÿÙ* ÃB‘ÿxÿxÿ¿ÿõÿ‘Žxÿ¾ÿ÷ÿ¦ÿÿvo0U¸‰QCpÿû{BÿÒ°ÿ÷JykÓÌ%N2¢YÏCm!A ‰E”c³Šg‡Ö00 r)ÿ½cÿà¦@ÿÎa’ÿÛÿ£ÿ²Õ~Dÿõ#'þ8[^az 4N…"xþÿó¡×ȃQD† H.ììz[]*ôÌü»Ï•ðfV˜×î¸îhOÖõ/yÕwøç‘¸þ˜/œ"Õ€—[ã§ÝÁÅ?‘¸Õw´¨ø¸×ö*€ÕŸÕ¾ð?'Ý€Öˆ“.l¡vf5P _Á®¶ñù4éƒ:u@0h<ÿ¿ÿx4²r¨¾þô»µ“Ë?´ÿ–ÇÿƒÿQÿƒþÔÿ½‡ÿ–Eÿ”5ÿúÿøt9ÿøÿ”ÿÅÿúÿøRÿø3ÿç ÃtÿÃÿ½9ÃE„|‡„EÿÖA_„“|‰‡8ÿÙàŒuH%é{è„t›2‡„u„2”ˆ9þ„9qÿÿ›¯‚Ä\ÿH1v¤ ÿ׳œt¢73ÿþsÿÅÿéÿÒs55PEp99ÿçÿ\ÿ‘"Kÿú&ÿ–Eÿq5ÿ~ÿîÿúÿúÿøÿsÿÅÿøRÿø3s &0ÿÿÞ§ÿáÿÊÿ°3ÿ»HGd”ÿàbÿÎBVVÿ±ÿÑVuVÿþœ1ÿÙIÿº+ÝÿÿnÿûXaÿá;bbs”Ãs==ÿÿÔJVÿÙrfnt‰E”EsE”ÿ~ÿÎÿîBÿøÿøVÿásœ +ñ×ÿÿàÿûT9ÿ~ÿÎÿøÿøVE”_ÿ–Hÿ–HÿoÿÑ5btptpÿ~ÿÎÿîBÿáÿõÿúVÿúVRut‰t‰a&ÿÙ&ÿÙ&ÿÙ§ÝÂüÿ°ÿûH„RbR\:ÿísL@ÿùÿçÿíÿ›ÿÏ2š/Lÿðÿ÷8¨8mWÿøÿ£S(-8ÿö,ÿÏR V¨Þª'}Ÿ5]+b]7ÿªÿü°ÿ¨J N]+o&¦Î5Nv\9wJ-#]Œ,ÿÒuÿã¬\ÿô2NÀˆi=0H—>ÿ×M& 2 ÿ¿-7ÿçCk•˜(üÇTTTTœ'@ÿáìE_<ÿá˜{^,UTSX"”W[Y"QKÿò^ÿùlN)KU\3[]&_HLIS"-=#R sÇsi ÿÐõô+V+«¤ææûûéÁôÊëëîÀA)&Û%$**? ñ+.444D+Ôó#?[+#Ié ’3-*%3>*&”/½˜tóó [ù-%þ€Æù6P ô%ÿ–H;;;sœÿøwÿøwÿøhÿ¨wÿø:5H5>5b\N;ÿøTÿøTÿøTÿ?ÿbÿøT00ÿøZÿøZÿøZN N NhN:ÿÅÿòÿÅÿòÿÅÿòÿúTÿúTÿúTÿú:Ru3ÿþ3ÿþ Ù Ù Ù hsss Ã Ãhh::P_00::P}ǶǶR\R\R\R\R\ÿÿºÿÿºÃÿÙÿúNÿúNÿúNTÃ\ÿÙ_ÿ–Hÿ–Hÿ–Hÿ–H5b5b5b9=RuRuÿ× ÿ× ÿ× ÿ× P}ÿÆÿáÿÆÿáÿÆÿáÿÆÿáÃÿÙÃÿÙÃÿÙEEEEEEEEÿ–ÿ–þ¯þáÿ^ÿ|ÿ–ÿ–„„„„„„ÿÂÿôýÎþþKþi||||||||ÿÿÂýƒýµýçþÿÿ‡‡8jj‡‡‡ÿÂÿôýçþþKþiÿfÿ^uuuuuu ÿôýÎþþáþÿ„„„„„„„„ÿ^ýµýºþÈ22222222ÿ½ÿ½ýÎþþúÿÿ±ÿ^EE„„||‡‡uu„„22EEEEEEEEÿ–ÿ–þ¯þáÿ^ÿ|ÿ–ÿ–[[[[[[[[ÿÿÂýƒýµýçþÿÿ22222222ÿ½ÿ½ýÎþþúÿÿ±ÿ^EEEEEEEÿ–ÿ–ÿ–ÿ–ÿ–2“2‘´[[[|[ÿ;ÿƒÿ ÿQÿø8jׇ‡‡‡‡‡99ÿmÿƒjˆÏ„„„„%%„„ÃÃÿ þÔÿô´´Å22222ÿTÿTÿ½ÿ½?d//ÿÍÿÍÿÍÿÍÏÏËöÝÿð)Ã;??ÿ¾†ðZÎ8¢5=?M“ÿæx?'a?4baAa––a\34baAa––)%.Õ$ì œñ"DQNN9-.ÿÚ ÿÙwÿö!Ÿ 3<ÿÆÿÚ…gpt:TTJÿyB%0ÿ½ÿøÿ– /////////////BBB¸¸¸¸BBYYBBBBBBBBBBBBq····º?QQ2BXXBBBBGB*BB*B*BBBBBBBB››››BBBBBBBBóBóóóóóóóBEEóB*BBBBBBBB%u¶²²Iÿúÿú‚‚˜XX¦+?;;;º)}}¤¤¤¤?5»¼è»XJWXXXXXXXXXXXXXXXWXXXXXWJJXXXXXXXEXXXXXXVXVVVVWXXXXVVVVVVVVVXVVVVVVXXXXXXXXXXXXXXOOOOOOOOPPPPPXXXXéXXXVXVVVVXXXXVVVVPIr’’’’’˜¨% % Xa¸¦GX++|h}2H%%ÿì?XX%XX6¾FœFHRFFFöõ    :ÿìÿìÈÿìÿìÈÿëÿìÈÈÈÿìÿìÿìÿìÈÈÿìÿìÿìÿìÈÈÈÈÈÈÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÈÿìxxxÿìÿìÿìxxÿìÿìÿìxxÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿ“ÿ“ÿ“ÿì|ÿìÈ|ÈÿìÈÿìÈÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìiÿìÿìÿìÿìEÿìiÿìÿìÿìÿìÿìiÿìÿìÛÛDDÛÛÛÛÛÛÛÛu77ÿìÿìÿìÿì7777?ÿìaa¯¯"!!!!½‘‘G®CL×€‘2 ‘1r¢jD±7Ò~u†ÕuXX–ÿøLÿŶÿÙÿøVM ‰zYÿù–»Û“)—[ã§§§§§§§§§§§{-××Uö3èèÿøTX[åÚ§£ÿö)abbÿß? ?‡ô‡º/ᵜõœ^?DDDDÐÜìô@pÌ,È x¨ô0 Œ  Ð ” H  à@ÐHÔ d¬œÐ|`ü¨8¼ TÌddXÀt8 8!l!Ø"¼#0$T%%¤&&€&Ì'<'€'¬'ü)|*„+,$,ü-°.è/Ø0€181ð2”3ð4Ü5d6l7X89\:(;;€<°=l>8>¤?ð@ AhAèAèBxCTD8ELFLF”GÐHhI„J„KK8KhLÐMM|MèN¨OhO´PØQ€QÌQÜRdS S„S¤SÄSäTÔTìUUU4ULVTW4WLWdW|W”W¬WÄWÜWôX XìYYY4YLYdY|Yð[[0[H[`[x[\p]¸]Ð]è^^^0^H`€`˜`°`È`à`øaa(a@aXb|b”b¬bÄbÜbôc chd|d”d¬dÄdÜdôeüff,fDf\ftfŒf¤f¼fÔfìggg4gLgdg|g˜g¨i i$i<iTili„iœi´iÌiäiüjj,jDj\jtjŒj¤j¼jÔjìkDk¸kÐkèlll0lHl`lxlmmpmènnn0nHn„nœn´nÌnänüoo,oDoìpÔpìqqq4qLqdq|qär\rtrŒr¤r¼rÔrìsÈu|u”u¬uÄuÜuôv v$v<vTvlv„vœv´vÌvävüww,wpwÜwôx x$x<xTxlx„xœx´xÌxäxüyy,yDy\ytyŒy¤y¼yÔyìzz@zÔ{d{t{ä|D|¼} }˜~~~„~Ü4¤Ü€L€Ì‚‚€ƒƒHƒœƒô„P„ „ì…`…¬…ø†l†„†œ‡‡|‡ôˆˆ‰‰€ŠŠŠ„Šô‹8‹œ‹äŒŒŒŒìD ðŽ@Ž´(˜ ”‘‘p‘Ü’D’`’|’Ì’Ü’ô“ “$“<“T“l“„“œ“¼“Ô“ô” ”,”D”d”|”Œ”¤”Ĕܔô• •$•<•T•l•„•œ•´•Ì•ä•ü––,–œ–´–Ì–ä–ü——,—D—\—t—Œ—¤—¼—ԗ옘˜4˜L˜d˜|˜”˜¬˜Ä˜Ü˜ô™ ™$™<™T™l™„™œ™´™Ìšh›››0›Øœ0œˆœ œ¸œÐœè @Xpˆ¨ÀØðž\žôŸpŸ¨ P ø¡X¡ð¢„¢À££¼¤¤p¤ð¥\¥„¥ô¦D¦È§,§¨¨t©©ˆªªtªÜ«ˆ¬ ¬À­ˆ® ®t¯¯”°°l°Ä±±|² ²d² ²Ø³T³È´´œµµˆ¶ ¶Œ¶ø·,·œ¸¸À¹l¹¸ºº|ºÌ»@»„»È¼@¼¸½x½Ð¾<¾¾ü¿H¿”ÀÀ„ÀøÁ Á\ÁœÁÌ „ÂôÃŒÃðÄTĸÅ0żÆDÆØÇpǨÈÈHÈlÈøÉpÉìÊpËHËøÌ¸ÍTÎ ÎÀÏxϼÐ$ÐhÐàÑtÑÀÒ,ÒlÒ°ÒôÓ\ÓÐÔ ÔLÔ\Ô¸ÔÜÔìÕ,ÕlÕÐÖ4Ö¬× ×<×L×|׌״×Ð×ä×øØ(ØDØTØdÙÙ|Ú¨Ú¸ÚøÛLÛÜ4ÜlÜÌÜðÝÝHÝtݘݨݸÝÈÝØÝèÝøÞ,Þ<Þ ÞàÞðß@ßPßÄßÔßôàà<àTàà¬àØááá0áDálá”á¸ââ<âdâŒâ¼âØããDã€ãääTäpäØäèåå,åtå´åôæTæ˜çŒç¼çÌçÜè8èTèlèˆè¤èÜéé4é|é°êê4êDêXêœê¼êØëëë$ë<ëTëdë|ë”ë¬ëÄëÜëôì ìì,ì<ìhìxìˆì˜ííí(íLí\ílí¨í¸íÈíØîî$î4îÜîìïdïØïððð ð8ðPðhð€ñññÐò„óLó¼ôôxô¸ôÈõõõhõôööXöÄ÷D÷°÷ôø`øôùPù¸úDú\útúŒú¤ú¼ûDûÈü4üLüdüøýlþ þ€þìÿhÿäÿôhÈøxØläôxì`p€ÐŒð 8Pðl|Œ¤´(˜  ( @ X    ü  0 ” ¤ ø  < T d ¬ ¼ Ì Ü   ( 8 ˆ   P ¤ Ü pЀôXh| dt¨ÀÐTŒœÈØè$ °ä8l¬d°ˆèˆ  0HXÌ0”¬ÄÜpÔäô LˆÄ,”ôTl„ÌT”Ô  ( @ t ¨ ¸ è!0!p!¸""h"x"ˆ" "¸#$#”#è$8$h$”$´$Ì$ä$ü%%$%4%L%d%t%„%œ%´%Ì%ä%ü&&$&4&L&d&|&”&¬&Ä&Ô&ä&ü'','D'\'t'Œ'¤'¼'Ô'ì((x(Ø(ð)))()8)H)X)h)ì*L*È+(+ˆ,,8,”-H-Ä..@.¬/l/Ä0(0à181¼22À33¬44|4à5°66d6Ä7p7Ä8Œ8¸9H9Ü9ì:°:À:ä:ô;<;L;Ì;ðT>„>Ø?ˆ@@L@pAA AìAüBÐC CØD(DXD¨E<ELEäFlG<G´GÄHH¨HôII(IÀJ@JPKKPKxK¤L0LÈMˆNN”OXOøP`PðQlQüRtRÜSDT4TÔUpV V`WW XDX¼Y„Z8Zä[ \(\D\¬]] ]l]À^^|^Ì_,_”_ð` `xaaLa`a”bbˆc(càd`ee¨fDf g(g¬h0h¨i4iÈj8jØkHk¸lTm0m¼nhnÜoxpp püq rhrÈsXt uu€vv¤wLwüxŒyyœzzDz¨{|(|h}X}}Ì~~|~ð$pô€D€|€´ XŒÐ‚ ‚0‚l‚œ‚Ѓ0ƒ0ƒ„ƒô„ „Œ„È…T…ä†P‡8‡°ˆ(ˆ¤‰$‰´ŠDŠÔ‹‹H‹ÐŒ8Œ˜Œø8xðŽHŽ Žôtœ°ÄØì€à‘<‘¨’ ’¬“D“Ô””l”ì•@•Œ•Ì––H–¬–ì—L—p˜,˜¬™™œ™ÌšP››Ôœ œ˜üž$žXž¸Ÿ$Ÿ   4 L d | ” ¬ Ä ä¡¡¡0¡H¡`¡x¡¡¨¡À¡Ø¡ð¢¢ ¢8¢P¢l¢ˆ¢ ¢¸¢Ð¢è£££0£H£`£x££¨£À£Ø£ð¤¤ ¤8¤P¤h¤€¤˜¤°¤È¤à¤ø¥¥(¥@¥X¥p¥ˆ¥ ¥¸¥Ð¥è¦¦¦0¦H¦`¦x¦¦¨¦È¦è§§§0§H§`§x§§¨§À§Ø§ð¨¨ ¨8¨P¨h¨„¨ ¨¸¨Ð¨è©©©0©H©`©x©©¨©À©Ø©ðªª0ªHª`ªxªª¨ªÀªØªð«« «8«P«h«€«˜«°«È«à«ø¬¬(¬@¬X¬p¬ˆ¬ ¬¸¬Ð¬è­­­(­@­X­p­ˆ­¨­À­Ø­ð®® ®8®P®h®€®˜®°®È®à®ø¯¯(¯@¯X¯p¯ˆ¯ ¯¸¯Ð¯è°°°0°H°`°x°°¨°À°Ø°ð±± ±8±P±h±€±˜±°±È±à±ø²²(²@²X²p²ˆ² ²¸²Ð²è³³³0³H³`³x³³¨³À³Ø³ð´´ ´8´P´h´€´˜´°´È´à´øµµ(µ@µXµpµˆµ µ¸µÐµè¶¶¶0¶H¶`¶x¶¶¨¶À¶Ø¶ð·· ·8·P·h·€·˜·°·È·à·ø¸¸(¸@¸X¸p¸ˆ¸ ¸¸¸Ð¸è¹¹¹0¹H¹`¹x¹¹¨¹À¹Ø¹ðºº º8ºPºhº€º˜º°ºÈºØºð»»»(»@»P»h»x»» »¸»È»à»ø¼¼(¼@¼X¼p¼ˆ¼ ¼¸¼Ð¼è½½½0½H½`½x½½¨½À½Ø½ð¾¾ ¾8¾P¾h¾€¾˜¾°¾È¾à¾ø¿¿(¿@¿X¿p¿ˆ¿ ¿¸¿Ð¿èÀÀÀ0ÀHÀ`ÀxÀÀ¨ÀÀÀØÀðÁÁ Á8ÁHÁ`ÁpÁ€Á¨Á¸ÁÐÁèÂÂÂ0ÂHÂ`Âpˆ˜°ÂÌÂäÂüÃÃ,ÃDÃTÃlÄÜôÃÌÃÜÃøÄÄ(Ä@ÄXÄpÄ€ĘİÄÈÄàÄøÅÅ(Å8ÅPÅhÅxňÅ ŸÅÐÅèÆÆÆ(Æ@ÆPÆhÆxÆ Æ Æ Æ Æ Æ Æ Æ Æ Æ Æ Æ ÆÐÆàÇÇPLjÇÀÇØÈ4ÈŒÈäÉɨÊ@ÊØËˤÌ|̼ÌØ͈͈ÎÔÏüÐÐ8ÐXÐtÐаÐøÑ@Ñ\ÑäÑøÒ,Ò`Ò|Ò˜Ò´ÒôÒôÓ°ÓìÔ ÕÕÄÕìÖœ×<×l׈×°×èØ ØpØ„ؘجØÀØÔØèØüÙÙ$Ù8ÙLÙ`ÙtوٰٜÙÄÙØÙìÚÚÚ(Ú<ÚPÚdÚxڌڠÛÛàÜ€ÜÈÝ@ÝÐÞdßdà@àðáXápâ|âÈã$äØå˜æ(æÐç@çìèŒèÄé@éÀêêàêðëXëœì@ìøíhîî°ïdï¤ï´ïÄïÔð\ð|ðœð¼ðÜðüññ<ñ\ñ|ñœñ¼ñÜñôò$òXòŒò¼óóLó|ó¬óØôôLô”õ<õäö,ötö¼÷÷D÷„÷À÷üø8øtøÀùHùÔú˜û`üxüØýýTýŒýÄýüþ4þlþøÿˆÿÄ,Ô| Èð@hŒ°X¬ô<„ÌH¬(ŒÌ LŒèD„Ä  D „ Ä  p À  X ¤ ì 8 t ° ð , h ¤ üL¬ dÔ(l° ðLÔ,|Ì4hœì$€H°|ø$ļPðè|À$P ´ÈØ<Ø8° t ˜ À è!!„!ü"P"è#À#ä$$$$P$h$ $Ð$ð%L%¨&&t&Ü'`'Ø(p))ü*¨+`,T,Ì--Ô.H.`.€. .À//H/¤00X0˜0Ø1$1l2P2Ô3`3ä44t4´55p5´5ô6T6¸7 7t7È808”9 9”:4:à;$;h;ìL>Ü?D?¬?ô@8@¤AAdA´B0B¼C$CCèD@D¼E<FF´G€H4HäIÌJ¼K|L LpL¨MM@MhMŒM°MØNN4NœNìO@OxO¬PP|QQ¨QüRLR˜RäS`SäTˆU(U`UpUœUÔUüV$VXV˜V¼VàWW(WPWxW WÈWèX<XLXXÔY,ZZ8Z\Z|ZœZ¼[[l[¤\\`a apa˜aÄbbXb´bÌcXcÜcôd,d`d¬døeDe”f$ftf¼g g\g¨gôhDh”h¬hèiii0iHi`i¤i¼iÔiðjj j¼kˆkìl,l”mmTm´n8nPnÌnänüoŒo¼pTqrrÐtt¤uPuÐuüv4vPvˆvÀvÜww4wPwtw˜w´wÔxx`x˜x´xìyDyxy”yàz z8zTzpzŒz¨zÜ{{L{ˆ{À||H|”|¸|Ü}}$}H}l}}´}Ô}ø~~@~`~€~ ~Ä~ì@l”Äð€€@€h€”€À€èDl”Àì‚‚<‚h‚”‚¼‚àƒ ƒ8ƒ`ƒˆƒ´ƒà„„8„l„ „Ô……<…p…¨…à††P†„†¸†ì‡ ‡T‡x‡¤‡Ð‡üˆ$ˆLˆxˆ¤ˆØ‰‰0‰d‰‰¼‰ðŠŠHŠ|ЬŠà‹$‹T‹ˆ‹È‹üŒ,ŒlŒ ŒÐXœøŽ,ŽdŽ”ŽÈŽèD`|˜´Ðì$Hp”¼Ðì‘‘$‘@‘\‘x‘”‘°‘̑蒒 ’<’X’t’ˆ“<”,”Ô”è”ü••,•@•\•t••¬•À•Ø•ô––<––¨——\˜™™ ›@›\›ˆ›¤›Ð›ìœœ8œhœ„œ¬œÈœô<X„ Èäžž,žTžpžœž¸žàžüŸ$ŸDŸxŸ¼ H œ¡¡ø¢¬£`£˜£ì¤@¤˜¤ð¥T¥¤¥Ì¥ô¦4¦¨¦ø§L§|§¨§Ô¨¨D¨ˆ¨¤¨À¨Ø¨ð©<©h©”©¼©äª ªlª˜ªÀ«$«d« «à¬ ¬”­­€­ø® ®H®p®œ®¸®ä¯¯(°±ˆ²D³³˜´°µpµð¶l¶ø·X·¼¸\¹¹l¹Üº|ºÄ»d¼(¼|¼¬½Ì¾ ¾h¾Ì¿,¿|¿ÌÀ`ÀÄÁ$Á`ÁˆÁ°ÁÐÂÂhÂx¤ÂÐÂøà ÃPÀðÃàÄ„ÅÅ„ÅàÆƈưÆÜÇhǼÈ4ÈHÈpÉÉ€ÊÊ,ÊPÊpÊ”ËË@ËpË ËÌËôÌ ÌLÌx̤ÌÌÌðÍÍ@ÍhÍŒͼÍìÎÎLÎ`ΨÎðÏ$ÏXϬÐÐ(ÐTÐxШиÑ(ÑhÑÐÒXÓdÔ@Ô@Ô@Ô@Ô@ÔÜÔøÕ¬Ö$×P×ÈØHØÐÙÙDÙ”ÙÐÙüÚ(ÚÄÚøÛÛ0ÛLÛ”Û¼Ü  >+h@¸P_ÀBcè V‘ ß “%4 # ¾    S 0k 0¶  ,( "m :£ &ý h¹Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain DejaVu Sans MonoDejaVu Sans MonoObliqueObliqueDejaVu Sans Mono ObliqueDejaVu Sans Mono ObliqueDejaVu Sans Mono ObliqueDejaVu Sans Mono ObliqueVersion 2.33Version 2.33DejaVuSansMono-ObliqueDejaVuSansMono-ObliqueDejaVu fonts teamDejaVu fonts teamhttp://dejavu.sourceforge.nethttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. http://dejavu.sourceforge.net/wiki/index.php/Licensehttp://dejavu.sourceforge.net/wiki/index.php/Licenseÿõÿ~Z >  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a¬£„…½–膎‹©¤ŠÚƒ“òó—ˆÃÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîºýþ    ÿ øù !"#$%&'()*+ú×,-./0123456789:âã;<=>?@ABCDEFGHI°±JKLMNOPQRSûüäåTUVWXYZ[\]^_`abcdefghi»jklmæçnopqrstuvwxyz{|}~€¦‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽØá‘’“”•–—˜™ÛÜÝàÙßš›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     Ÿ !"#$%›&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐѲ³ÒÓ¶·ÄÔ´µÅՂ‡Ö«ׯØÙÚÛÜÝÞ¾¿ßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     ÷ !"#$%&'()*+,-./01234Œ56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸˜¹º»¨¼½¾¿ÀÁš™ïÃÄÅÆÇ¥ÈÉÊ’ËÌÍÎÏМÑÒÓÔÕÖרÙÚÛÜÝÞßàáâã§äåæçèéêëìíîïðñòóôõö÷øùúûüý”•þÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰¹ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ %ÀÁ & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? sfthyphenAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni037Auni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni2015 underscoredbl quotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037 exclamdbluni203Duni203Euni2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0 colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B estimatedonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215F arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF universaluni2201 existentialuni2204emptysetgradientelement notelementuni220Asuchthatuni220Cuni220Duni2213uni2215 asteriskmathuni2218uni2219uni221Buni221C proportional orthogonalangle logicaland logicalor intersectionunionuni222Cuni222D thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244 congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225F equivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281 propersubsetpropersuperset notsubsetuni2285 reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Funi2290uni2291uni2292 circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4 perpendiculardotmathuni22C6uni22CDuni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230F revlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F integraltp integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni2341uni2342uni2343uni2344uni2347uni2348uni2349uni234Buni234Cuni234Duni2350uni2352uni2353uni2354uni2357uni2358uni2359uni235Auni235Buni235Cuni235Euni235Funi2360uni2363uni2364uni2365uni2368uni2369uni236Buni236Cuni236Duni236Euni236Funi2370uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639 smileface invsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27C5uni27C6uni27E0uni27E8uni27E9uni29EBuni29FAuni29FBuni2A2Funi2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniF6C5uniFFF9uniFFFAuniFFFBuniFFFCuniFFFD dlLtcaronDieresisAcuteTildeGrave CircumflexCaron fractionslash uni0311.case uni0306.case uni0307.case uni030B.case uni030F.case thinquestion uni0304.caseunderbar underbar.wideunderbar.smalljotdiaeresis.symbolsEng.alt¸€@‘ÛþÚþÙØþ×þÖšÕþÔ´GÔ}Ó%Ò2Ñ–ÐþÏþÎÍþÌþËþÊþÇþÆ}ÅþÄþÃ2»Á}À¿ŒÀþÀÀ¿¾Y¿Œ¿€¾½&¾Y¾@½&¼»/¼ú»/ºþ¹2¸·–¶þµ´Gµþµ¸ÿÑ@ÿ´G³²d³–²d±þ°¯°þ¯®þ­k¬þ«»ª©ªú©¨–§¦þ¥¤¥þ¤£–¢¡¢þ¡Y ¡ }Ÿ:žY ž:þœ› œþ› šþ™þ˜V˜—–þ•–”þ“–’Š ‘þþf þŽþþŒþ‹Š ‹þŠ ‰XA‰úˆ ‡W%‡d†…»†þ…„]…»…€„ƒ%„]„@ƒ%‚þ–€XAþ~XA~þ}þ|d{dzy@ÿ}xþwþvþuþtst2srqpq(poþnþmþlkldkjkji hþgf f f@ed.eþd.cXAc–bY ba`»aþ`_]`»`€_[%_]_@^þ]þ\[%\»[%ZY ZY XW%XAWVW%VUþTþSRSþRQþPþOþNBNSMþLxKJ}KþJ}IH–GþDþCþB2A@BAF@?-@B?>@ÿ?->=þ<þ;þ:9S:–98(9S8(7þ6þ5ú4»3þ2þ1þ0þ/+ /.d-È,+ ,+ *þ)(þ'-'–&þ%%2$þ#þ"þ!-!1 d 2 @:–%þ%þþ:þBþ-B–þ þ þ : – þ  þ@$-þ-:-  ¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++iep-3.7/iep/resources/fonts/DejaVuSansMono.ttf0000664000175000017500000121350412271043444021656 0ustar almaralmar00000000000000 FFTMYôRÜ,GDEF~ÞqÐH°GPOS¸Êø9ŒGSUBç÷þ ;„€OS/2Œüi²@Vcmap\°5@\.cvt é— VŒ0fpgm[kßX¼¬gaspYh glyf¯šÛYtÍÜheadóšÅ0'P6hhea¸'ˆ$hmtx5«.h'¬ºlocarTPAh3hmaxp'tÐ name`ãêˆtð!postÑ™†–zprep:ÇÀ(ÆÔ.™É!É!¨…†—˜˜™Ÿ ¡¢¦§¨©­®®¯·¸¾¿ÄÅÅÆÆÇst€ÆÇÇÈÉÊר  Ž  [ \ c d Ø °øDFLT&arab0cyrl>grekPlao \latnjÿÿÿÿ SRB ÿÿÿÿÿÿ4ISM 4KSM 4LSM 4MOL 4NSM 4ROM 4SKS 4SSM 4ÿÿmark mark,mark4mkmk:rtbdB &.6>FPX`RxÀš | ž„–5Œ5´8" pýä~yh&0  c"càz}wx{]j]jbj¸® $6HZl~ àP|H 0ÿà¬ÿÜ àP|H <ÿˆPÿ„ ¨, ýÜ Tÿ` ýÜ àP|H  ÿ¤  \ cvy~hhhÀnÊ ìÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\XdýßÔ|dÿ²hþˆ0ÿ`tÿXtÿXüýÌ ýÐ<ý·ÿ|ÿŒ0ýà0ýìhþL þ„(þÜ þÀTÿplÿxý̈ýÐ`ÿx<ÿD(þDüÿdþ|tÿXLþ\8ÿ(PýÜ@þ´@ýàtÿXtÿX4ýè`ýàtÿXdýì ýç4ýÜXýÜHýà.ýäýãÔÿD5ÿjTÿj`ÿ_ þpiý¨Fý¨WýÚWýÚ…ý¨@ý¨TýÚQýÚXý¨:ý¨BýÚ`ýÚ‚ÿjLÿj[ÿ›Zÿœ[ÿjIÿjWÿœTÿœLÿj4ÿjKÿœ]ÿœÔÿL”ÿ@ôÿjVÿjàÿ8ˆÿ8ôÿjbÿjtý¨\ý¨¬þ Xþ Tý¨Hý¨„ÿXÿTý¨8ý§¸ýäXþ hý¨dý¨ÄýäXþ ôþ ôþ ôþ ôþ ?ÿjÆÿj,ÿj,ÿjTÿ_îÿj,ÿj,ÿjTÿdTÿd¸ÿdÿdLþp˜þpOþ¢[þ¢ÀdýØÌýØÿ€dÿXdÿx°ÿXdþhþhDþŒXþŒ,ÿLlÿ„lÿ„Tÿp<ÿ„Xÿ|lÿ„Hÿ€Hÿ|Tÿtýýþˆ þlýý<ÿ„Tÿpýý|ÿ€Dÿ\8ÿ\8ÿ\8ÿ\8ÿ\¼ýÀŒý½¼ýÀœý¼˜þ Xþ,ÿlÿd\þ þ,ÿl,ÿlxþDþ,ÿl,ÿlLþ þ,ÿlÿlðÿlØÿlðÿlÐÿpðÿlÐÿhðÿlÜÿlzý×zý×àÿ“^ÿzý×zý×’ÿŸ^ÿŸ^ÿ-dÿžÿujÿàþàý¹8ÿjÿ:ÿKÚÿQØÿ¢ÿ]Xþmþþadÿ‡jÿuÿu¬þ£FÿXÿ'þþUÂýÅ@ÿLÿ{RÿKRÿo°ÿ'ýÒLýéýÑ.þ‘ý­’ý¼:þ‹Rþ…xýÐtÿXDýØôýÐ4ýàEýßþnPýÜ þp OOSsŸ" Ë3 Î Ño Ô ×s ç çw î ïx ò Vz X [ß Í Òã Ô Ôé Ö ×êvy~hhh¸®Î $6HZl~ œh“5 œh[ œh›ö Tl+ú œhßÝ œhßÝ œhßÝ \hŸÝ \ c tuwxz{|} &,28>DJPV]j]j]j]j]jbj]j]jh°|’ âÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú ˜„dtР̸h¨dü8 |Ô$ ô|`HÐLÀDü˜ \ðÜt@¸4Hè¸ìÔœ(|ôXTü„œøðÌĘ(ølððt¼¬<˜0¼Úx®x_`Ÿ ièFèWèWè…è@èTèTè[è:èBè`è‚LLL[Z[I¯WTLâ4âKª]ªl8ôô@^ª  äô@bªÒèºè¬èXè²è¦è„èXè²è–ç¸èXèÆèÂèÄèXèoM¼âª¿˜ñ!T±ÿñŒxóxú¤ú¤T€T€¸€€Ì&”~Oè[è°¸ ØXàŒPXD€Øô,aDf\ØPèh<è È\œÈ\Ø\ô0,Ä0à@ð, d `ø€Ô|tL`0ܤȰ0€„Ü@Ø\ àÜ ¬¸T`@´”L8ˆ4η5ÞóÅD´80H <DŒÜ<Șxˆ(LÐX$TÔtðØÀÜèÜÀäìôÐäðèÈà„0¨TÄLh„„0Øp€Lh<øpøø¬¸l$d¬`Ô0œh8<à÷ï PÈLdh¼ŒØx„8„T´äˆ‡R m$vêˆ2z¯`îƒM;)üR¦Dhp_)I R|Ôo~ê4ÔćOOQRTs™™#œŸ$ Ë( Î Ñd Ô ×h ç çl ê ím ð [q Í ÍÝ Ò ÒÞ Ô Ôß Ö ×à tuwxz{|} &,28>DJPV]j]j]j]j]jbj]j]jh° N  $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<Dh³xzOšâhšDšäh*hDhhhh“DhšÆhÐhvhhþV¾h¹þYDx¾hþVÂþVÆhxhhsDþVhDDDDDDzzzzhhhh6ähhhhhhhhhhh46ÆÆÆÆÆÆvvvvhhhhh¾hhhhhhhhhhþVþVþVDDƳ³Ð³Ð³Ð6h6hzvzvzvzvšhþVšhþVšhþVhþVâ¾â¾hhhhhhhhš¹þYDšxšxšxšxä¾ä¾9hþVhþVhhhhhhDÆDÆhhhhhhhxhxhhhhhhhhhh“shþVhšhšhšhhhhhhhh ³Ð66hhhþVVh³"þVhþVšhþVhhhDDxä¾þVhùÿhXþVÒþVjþøhhhhhDÆD¤þVhhþVšþVhþVhþV$=D]‚‡4Š˜:š§Iª¸WºÂfÄÅoÈÈqÊÙrÜã‚åïŠòó•ö÷—úü™ÿœ ¤¯±"#·&3¹6kÇñòýôõÿ W W Y Y ` ` c d ƒ „­|Üú ¹æìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü      & , 2 8 > D J P V \ b h n t z € † Œ ’ ˜ ž ¤ ª ° ¶ ¼ Â È Î Ô Ú à æ ì ò ø þ     " ( . 4 : @ F L R X ^ d j p v | ‚ ˆ Ž ” š   ¦ ¬ ² ¸ ¾ Ä Ê Ð Ö Ü â è î ô ú     $ * 0 6 < B H N T Z ` f l r x ~ „ Š – œ ¢ ¨ ® ´ º À Æ Ì Ò Ø Þ ä ê ð ö ü      & , 2 8 > D J P V \ b h n t z € † Œ ’ ˜ ž ¤ ª ° ¶ ¼ Â È Î Ô Ú à æ ì ò ø þ     " ( . 4 : @ F L R X ^ d j p v | ‚ ˆ Ž ” š   ¦ ¬ ² ¸ ¾ Ä Ê Ð Ö Ü â è î ô ú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðöü &,28>DJPV\bhntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬²¸¾ÄÊÐÖÜâèhÕhhÕh³Õ³6Õ6zÕzžÕžšÕšhÕhhÕhšÕšhÕhšÕšhÕhhÕhhÕhhÕhhÕh6Õ6hÕhhÕhhÕhhÕhhÕhhÕhhÕhšÕšh`hhh³`³hhv`vhhh`hþVhhhhþVšš22h`hh`hh`hh`hþVh`hþVh`hh`hhhh`hh`hh`hh`hh`hþVh`hhhhhhhzÕz³Õzzzzhhhh6Õ6hhhhhhhÕhhhhhh6Õ66Õ6hhhhhhh`h³`vvvvhhhhhhhhhhhh`hhhhhhþVhhþVhþVhhhhÕh`³³³³³³³6h6Õ6hhzvzvzvzÕv`zvšhþVšhþVšhþVšÕhþVhhhÕhhhhhhhhhhÕhh`hšhþVhÕšš`šš2šÕ2š2šÕš22šÕš22hhhÕh`hhãhÕhþVh`hþVhhhhhhhÕhh`h6h6Õh`6h`hhhhhhÕh`hhhÕhhhhÕhhhhhhhhhhhhhhÕh`hhhhþVhšhšhšhhhhhhÕhhÕhhhhÕhhh Õ ³Õ³³`³6Õ66Õ6hÕhhhh`hþVVÕVhÕh³Õ³ÕþVhhþVšÕšhÕhþVhhhÕhhÕhhÕhšš22hhhÕhhÕhþVh`hþVhÕhùÕùÿ`ÿhÕhh`hþVìÕìh`hþV6Õ6þVhÕhh`hhÕhhÕhh`hþVhÕhhÕh6Õ6h`hh`hh`hh`hŒŒ)`)³`³YYhhv`vv`vš`šv`vZ`Zr`rv`v±`±þV>>þVh`hþV•`•n`nþVh`hh`hþVooooþVD`Dh`h88PP>>þVh`hh`hþVh`hþV¶`¶þVüf&þVh`hh`hh`hh`hhhþVh`hhh6`6þVh`hþVh`hþVc`ch`h``h`hþVssþVssþVx`xþVssþV¤`¤þVhhþVh`hh`hh`hh`hh`hhhh`h`þVh`hÿŽh`hþVh`hþV$$ªª$$h`h ` >`>h`hh`hþVh`hhhþV$$ªªh`hh`h`h`v`h`h`h`h`h`h`h`h`h`h`³`h`h`hh`h`h`h`h`h`h`h`5`h`h`³`h`'ð'}{}hàhœRàRœEàEœ^à^œràrœàœhàhœhàhœ¼à¼œ?à?œaàaœiàiœhàhœhàhœhàhœGàGœàœhàhœhàhœhàhœ6Õh\œaðadâd5ð5gð'eâe`â`6Õ6þLhÕ¤þViÕihhh`hhÕhþVšÕšþVhÕhþVhhþViiþV1Õ1`hÕ%$=D]‚˜4š¸KºÂjÄÈsÊðxòóŸök¡ÑÑææñòô 5<:>BbDHggolq†u‹Œ‹™š"xx£¯¯¤<<¥¦‚‚§…‡¨‰‰« W W¬ Y Z­ _ `¯ c d± ƒ „³ Š Œµ Ê Ê¸†—™Ÿ¢¦©¬¯·"¿Ä+ÆÆ12ÊÐÖÜâèîôú $*06<BHNTZ`flrx~„Š–œ¢¨®´ºÀÆÌÒØÞäêðh`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`h`hhhhhhhhhhhhhhhhhhhhhhhhhhh`h`h`û/†—™Ÿ¢¦©·¿Ä-ÆÆ3È¾Ø ntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬ÑÑ ÑÑ ÑÑ ÑþÑ ÑÑ ÑþÑ ÑÑ ÑÑ ÑÑ ÑþÑ ÑÑ ÑÑ ÑÑ ÑÒÑÑ ÑÒÑÑ ÑÒÑÑ ÑÑÑÑ ÑÑ ÑÑ ÑÑ ÑÑ ÑÑ ÑÑ ªÄÇÇÊ×>DJPV\bhntz€†Œ’ÿ÷tÑwÑwÑwÑwÑÑÑtÑÑ`Ñ~Ñ~Ñ`Ñ~Ñ`û/ÇÇÊ× Ê8DFLT&arab0cyrlDgrek`lao llatnvÿÿÿÿ SRB ÿÿÿÿÿÿÿÿ4ISM >KSM >LSM >MOL 4NSM >ROM 4SKS >SSM >ÿÿÿÿ ccmp8dlig>finaDinitJligaPloclVlocl\medibrligh &.6>FNV^PTÜ à d ä d ‚ÀØ ¾ $$XLMLM†›œŸ¢¦©¹¿ÂÃÆÉÉ&   %hp5 é ë í ï ñ õ ÷ û ý         ! % ) - 1 5 9 = A E I M Q U W Y ¥ ‘ • ¡ ™ µ ± ¹ ½ à Á © Å É Ï Õ ÍPhjsŸ# Õ Õ4T' ó ù ÿ      # ' + / 3 7 ; ? C G K O S Ó [ § Ÿ “ — £ › · ³ » ¿ « Ç Ë Ñ ×TTVVX\ahjprs˜›Ÿ"T' ò ø þ      " & * . 2 6 : > B F J N R Ò Z ¦ ž ’ – ¢ š ¶ ² º ¾ ª Æ Ê Ð ÖTTVVX\ahjprs˜›Ÿ"  b õ c õ F G> $ ` ï ^ ë \ é a ï _ ë ] é F G O ŽLI óæLMÑ3™3™×f  æ&ÿÒùû(PfEd@ ÿÿþšmã`ßßß,,$, ,üü~Ããðöù!AEM¹ÁÉÍÓÞéîó?CXauz~ŠŒ¡Îá_cs›¥³»ÄÈÌùV_‡Š  :UZmt{€„‡‘˜¤©¯¾Ìù‚„ˆŠ—Ÿ£¥§«¹¼Íü .<[ex{…·¿-Mcy™›¡­±¹½ÇÍÝåëõùEMWY[]}´ÄÓÛïôþ  # & 7 : > I K _ q Ž œ µ ¹!!!!!!!"!$!&!+!.!_" """" "-"="i"‹"’"¥"Æ"Í"é"ï####!#(#+#5#>#D#I#M#P#T#\#`#e#i#p#z#}#ƒ#‹#•#®#Ï$#&/&‹&œ&¡&±'' '''K'M'R'V'^'u'”'¯'¾'Æ'à'é)ë)û*/+,d,p,w,z,..%..§§§'§Ž§‘öÅûûû•ûŸû­ûéûÿþtþüþÿÿýÿÿ  Íæôøü$CLP»ÆÌÐÖàîóCXatz~„ŒŽ£Ððbr¢ªºÀÇËÏ1Ya‰  !@Z`ty~ƒ†‘˜¤©¯¾Ìð„‡Š”™¡¥§ª­»ÈÐ,0>bw{…›¹0Th|›Ÿ¬°¶¼ÆÊØàèîø HPY[]_€¶ÆÖÝòö   & / 9 < E K _ p t   ¸!!! !!!!"!$!&!*!.!S!"""""'"4"A"m""•"Å"Í"Ú"ï#####%#+#5#7#A#G#K#P#R#W#^#c#h#k#s#}#€#ˆ#•#›#Î$#%&8&& &°''' ')'M'O'V'X'a'”'˜'±'Å'à'è)ë)ú*/+,d,m,u,y,|.."..§§§"§‰§öÅûûRûŠûžûªûèûüþpþvþÿÿùÿÿÿãÿÂÿ¹ÿ·ÿ´ÿ³ÿ±ÿ¯ÿ®ÿ¨ÿ¦ÿ¥ÿ¡ÿŸÿÿ›ÿšÿ–ÿ’ÿ†ÿƒÿoÿgÿUÿQÿNÿIÿHÿGÿFÿEÿ7ÿ5ÿ'ÿ ÿÿþûþ÷þõþóþñþÛþÓþÀþ¾þ½þ¼þAþ@þ?þ7þ2þ/þ.þ)þ%þ þþþþþþþý÷ýóýîýàýÓý°ö)ö(ö&ö%ö#ööööööööö ôèçþçôçóçîçâçáçàçÚçÉçÇç¾ç©ç¨çhçdçbç\çXçVçUçRçHçFçBç@ç8ç6ç,ç*ç(ç&ç$ççççççççççççç ç ç ççççæÿæ÷æöæõæïæîæÛæËæÉæÈæÅæÃæ{æyæræmælæjæfæeædæaæ_æ;æ æ æ æææåûåøåõåòåðåÑåËå¿åºåªå©å§å¥å¢å å—å–å”å’å‘ååŽåŒå‹å‰å‡å†å„å‚å€å|åsånåOäüä ääääã´ã³ã±ã°ã¯ã®ã«ãªã¨ãŠã‡ã†ã€ãgã`á_áQáà<ÞóÞëÞçÞæÞåÝMÝDÝ6.$êØ h g e l øþ ~ ÃbÍã†æðôö¨øù«ü!­$AÓCEñLMôP¹ö»Á`ÆÉgÌÍkÐÓmÖÞqàézîî„óó…?†CCÆXXÇaaÈtuÉzzË~~Ì„ŠÍŒŒÔޡգÎéÐáð_'bc—rs™››¢¥§ª³«º»µÀÄ·ÇȼË̾ÏùÀëí1VñY_a‡‰ŠEG  I  KLMN!:O@UiZZ`m€ttŽy{~€’ƒ„•†‡—‘‘™˜˜š¤¤›©©œ¯¯¾¾žÌÌŸðù ‚ª„„¬‡ˆ­ŠŠ¯°”—±™Ÿµ¡£¼¥¥¿§§Àª«Á­¹Ã»¼ÐÈÍÒÐüØ   ,.0<>[be<wx@{{B……C›·D¹¿ah-|0M’Tc°hyÀ|™Ò››ðŸ¡ñ¬­ô°±ö¶¹ø¼½üÆÇþÊÍØÝàå èëîõøù4 E:HM`PWfYYn[[o]]p_}q€´¶ÄÅÆÓÔÖÛâÝïèòôûöþþ     # & &% / 7& 9 :/ < >1 E I4 K K9 _ _: p q; t Ž= œX   µe ¸ ¹{!!}!!~! !!!‚!!…!!‡!"!"ˆ!$!$‰!&!&Š!*!+‹!.!.!S!_Ž!" ›"""""""" "'"-("4"=/"A"i9"m"‹b""’"•"¥…"Å"Æ–"Í"͘"Ú"é™"ï"ï©##ª##±##¿##!Á#%#(Ç#+#+Ë#5#5Ì#7#>Í#A#DÕ#G#IÙ#K#MÜ#P#Pß#R#Tà#W#\ã#^#`é#c#eì#h#iï#k#pñ#s#z÷#}#}ÿ#€#ƒ #ˆ#‹ #•#• #›#® #Î#Ï $#$# %&/ &8&‹ P&&œ ¤& &¡ ±&°&± ³'' µ'' ¹' '' ½')'K Ù'M'M ü'O'R ý'V'V 'X'^ 'a'u '”'” '˜'¯ '±'¾ 7'Å'Æ E'à'à G'è'é H)ë)ë J)ú)û K*/*/ M++ N,d,d W,m,p X,u,w \,y,z _,|, a.. e.".% f.... j§§ k§§ z§"§' §‰§Ž …§§‘ ‹öÅöÅ ûû ŽûRû ûŠû• ÀûžûŸ Ìûªû­ Îûèûé Òûüûÿ Ôþpþt Øþvþü Ýþÿþÿ dÿùÿý eÖpÖ£ j×ö×ÿ ž   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾!rdei#x¡pkˆvjXˆš%s\]gw ,l|墨cn!T@m}%b‚…—¹ êÁ:q/0 Ž "y'„ŒƒŠ‘Ž•–”œ›ógwqstuzxvh¸Ë¸Ëª‘¸f¸‡¸ÃË˸¸Ë‰ºË¦ü˃ò Ç7ƒ¾X!Ëœçu¼ÓÉÛuç9ºËÓ!߸‰¾‰Ã¾{¾Xm¤®{¸o{¸RÍÑ͇‡“¤oÍ˸ƒ‘Ý´‹ô˜éZ´ºÅ!þÕöª=f‹ÅššƒÕs þáÕ+¤´œbœÕ˜‡ÕÕð¤¸#Ӹ˦¼1NÓ {T\qÛ…#wé`jÏÕ#fy```{{w`ªébø{!Åœ{´RNNÑfœœfœfœÍúƒ‘þHF?{L˜¢'oo5jo{ªª-–{öª3=œf‹öÍoD7fî…´}sÕ·, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX ¸EDY!-,°%E`D-,KSX°%°%EDY!!-,ED-,°%°%I°%°%I`° ch ŠŠ#:Še:-ÿÿhþ–h¤¼¶ƒ/ÄÔì1ÔìÔì0!%!!hüsüåþ–øòr)ÏÕ @‡†ˆ Ô<ì2991/äüì03#3#Ë¡ËËÕýqþ›eý¸þRªÕ@‰ˆÔìÜì1ô<ì20###®Ñ®ÕýÕ+ýÕ+;J@0Œ Œ    ÔÌ91/<Ô<<ü<<Ô<<Ä2ì220333!3!###!5!!5!#3¬hõi iôþçTúþßh iöiŸhþþ)Tþö/hõTö¾þaŸþašþ²™þbžþbž™NšŸýÇþ²¾þÓZ /d@9($)%/%‹$Ž(‹Ž!$, ( 0Ô<ì2ü<ìüäî1/Æ2ÄîöîîÆöî99990>54&'#.'5.546753.'´n|pÞhumÔdfÉbdËcÈÊÓ¿dO¢TU¡PÎØé¼DþNtd]gÑp^VdûÀ-.)´>Bʶ–»ëë­+/þQššÎ !°˜ *9V@/7(" ’"’7“(’.‘“’+  % 4  + :ÄÔìüìîþî99991/îîöîþîî9999032654&#"4632#"&'%32654&#"4632#"&¸iNMklLNi‡¸†@s..2º‡ˆ¶þH#)üiOMllMMk‡¸‡@u--1º†‡¸?NjkMMljO‡¹0./t?…º·`¢`åOikMMkjN‡¹0--uA†¹¸9ÿãÅð*7³@b  -,.+2345617B7 1 +"1—"!%—–™ (! 7+!(!(! .8ÜìÄüÄÆîî99999991/ÆäöîÖÎî9990KSXí9í9íí9Y" >54/3#'#"5467.54632.#"3267>7# '&¤JKªÕNSºjØþ抋20Ç­AƒF;}Eap:6\[È›*\,#‹ýÑ1–h F'¡óXåmFD ̉êdHŠG–®·'%[M;ÏI£\—Ç ª¾Õ·ˆÔì1ôÄ0#¾®ÕýÕ+ªþòu @œ›  Ôì2ì991üì0#&547u…ƒƒ… —””—äþ;æåþ:æîÃàßÄì\þò' @œ›  Ôüì2991üì03#654\ —””— …ƒƒìþ<ßáþ<ìèÆã䯦J+ðN@,   –    Ô<ì2Ü<ì2991ôÔ<ì2Äì2990 %#'-73%+þšf9þ°sþ°9fþš9PsPßÂÃbËþ‡yËbÃÂcËyþ‡ËXqy“ '@¡  ¡   Ô<ìü<ì1Ô<ìü<ì0!!#!5!¼½þC¨þD¼“þDªþD¼ª¼“þáò/@ £¢ÔìÔÌ1üì03#öüÅšc/Ïþdßmƒ¶ ÔÄ1Ôì0!!d ý÷ƒ¤éå1¶¢Ôì1/ì03#éüü1þÏfÿB7Õ@ ˆÔìÔì1ôÄ03#y¾üî¿Õùm…ÿãLð # @¥ — —–™$!"!$üììÔìî1äôìîÔî0@Ö////////// / / ?????????? ? ? OOOO O ____ _ ŸŸŸŸŸŸŸŸŸŸ Ÿ Ÿ ¯¯¯¯¯¯¯¯¯¯ ¯ ¯ ¿¿¿¿¿¿¿¿¿¿ ¿ ¿ F////////// / / __________ _ _ ¿¿¿¿¿¿¿¿¿¿ ¿ ¿ $]]4632#"&"32'2#"ãM68PO98K…‹‹Ž‹‹Žïõõïïôôî7PP78NLœþÐþÉþÊþÐ0670 þxþþ‚þxˆ~ˆöFÕ &@——ˆ— ## ÔìÄüì1/ì2ôìÔì0%!5%3!!:þ®PÊ6üȪuL¸JúÕª˜#ðQ@)%%B§ —–—  "$üÄüìÀÀ91/ì2ôìôÌ0KSXí9í2Y"%!!567>54&#"5>32u®üu»5dF“€[ÈpgÇaÛ Yd8ÕªªªÅ.>z—O}ŽBCÌ12é½`ÀtAæ‰ÿã7ð(G@)— ‹ ¦ —‹ ¦—#–™©)&" )üÄÄüìÔì91ìäôìôìîöîî90#"&'532654&+532654&#"5>32“œþëõgÖgfÆb¦²²˜šš‹œ‘†Y¾hy½IÚ‰'Ç•Îë&$É54–‚™¦zms{((º Ûµ{¤foÕ B@   B —ˆ   $üüÔ<ì291/äÔ<ì290KSXÉÉY" !33##!5ßþ)×!êÇÇÉý‡üëÍü3¤þœd¿ÿã-Õ=@"—‹Ž— —ˆ ™ª "üÄüÄìî1ääôìîöîþÄ90!!>32#"&'532654&#"ÏôýÄ+W,èþã÷wÅN\ºa§µ»§QšFÕªþ‘þîêìþð Í21°¢ ²%%…ÿãLð$=@#— — «‹Ž—–™%"& "%üììüäì1äôìôìåîî90.#">32# !2"32654&ß?ŽMÀÆ0ªnØíôÝþüò#J”þÝ””†ˆˆ´º%'þßþçdkþ÷óòþöu‘zýlº¤¤º±­®°‹7Õ5@%%B—ˆ"üìÄ991/ôì0KSXííY"!#!‹¬ýêÓý5ÕVú+ƒÿãNð #/C@% —'—-—–™'©0 $*$ "!0üÄìüÄìîî991ìäôìîî990"32654&%.54632#"$54632654&#"h‡“•…ˆ“•þÊ‘òÐÑò‘–ŸþþääþÿŸM€yz€{y€Å—ŠŠ™—Œ‰˜T!´²ÑѲ´!!ÈŸÊäãÉ Ébx~~xz€ÿãFð $;@"—« ‹ Ž—"—–"™%"  &%üäìüìì1äôìîöîõî902654&#"532#"543 !"&T““†ˆ‡á?ŽMÀÅ/ªnØíóÞòþÝþëI”–º¤¤º±­®°ý‰º%'!dk ôñ þŠþoþ‡þséå'@ ¢¬¢Ô<ì21/ìôì03#3#éüüüü'þÑþ9þÏ“þáò' %@¢£¢¬  ÔüÔüÔÌ1äüìî03#3#öüÅšc üü/ÏþÇþÑXyw!@®­('üì291ôì90 5yü®Rûß!ÁþÀþ÷¢¦¢X`y¢@   Ô<Ä21ÔìÔì0!!!!X!ûß!ûß ¬BªXyw!@®­('ü<ì91ôì9055X!ûßRÁ¶þ^¦þ^·=ôð"{@B  %%B‹ —–†!    ) #ÔìÄÔÔìî99991/îöþôîÍ9990KSXí9í9Y"#546?>54&#"5>323#¬¾=TZ>/ƒmN²b^¿hºÝC^XE&ÅËË‘šb‰RY;X1YnED¼98À¡Lƒ\VBT=/þòþþÁšs 4p@1(+$ 4¯ ¯ '$¯+¯1+5' ( + . !+ -.5ÜìüÄþ<Äî991ÄÔüÄþÄÕÄîî999990@ €€€€€€]4&#"326#5#"&5463254&#"!267# !2€kkkk€Œ%ƒR¡ÓÓ¡P†$°‘öþÝJ6l90?{:þ›þ]x<Ñú!››‚››þèo?Dò¼¼òF=?œ¾þþ¹þ·þz‡ÒŒ†Îþöà%¬Õ ˜@A%%%% % % %  % B—°ˆ   / Üì91/<äüì90KSXííííííííY"²]@    †‰]]!3#!#hÕªþ±õÉÑnýõlÑ#ý®ú+…þ{¦qÕ =@#— —ˆ— ± 21 0!üì2üìÔì9991/ììôìî9032654&#32654&#%!2)qï°–ž¨ïë’ƒ”þJºåøƒƒ“§þöþùþFÉýÝ{’‰fþ>p}qd¦Æµ‰žÏ ËÏ‹ÿã1ð.@³²— ³ ²— –™2 10üì2ì1äôìôìîöî0%# !2.#"32671M¢[þáþÃ?[¢MJªVÅÄÄÅX©I5))–pn™))Ï=@þÐþÍþÎþÐ@=‰RÕ(@— ˆ— 2 10üìüì99991/ìôì0% 6&!# )´ÿÊÉÿ`dVDþ¼þªþѦûHKûûw/þ”þ€þ‚þ•ÕÅNÕ )@——ˆ—±  13 üì2üÄÄ1/ììôìî0!!!!!!ÅvýTŽýr¿üwÕªþFªýãªéXÕ $@——ˆ±14 üì2üÄ1/ìôìî0!!!!#éoý\eý›ËÕªþHªý7fÿãPð<@!—— ³ ²— –™ 625üìüÄüÄ1äôìôìþÔî990%# !2.#"3267#5!PQËvþäþÄ@^¬PQª_ÅÅ¿ÆCe)Ùš{KM—on™56ÏMIþÏþÎþÉþÕ!‘¦‰HÕ &@—±ˆ 1 0 üì2üì21/<ä2üì03!3#!#‰Ë)ËËý×ËÕýœdú+Çý9ÉÕ %@ —ˆ—77 Ôì2üì21/ì2ôì20!!!!5!!É=þÇ9üÃ9þÇÕªûªªmÿã¼Õ,@ ²—— ˆ™  5üÔüÄ1äôìîöÎ990753265!5!#"&m[ÂhqþƒGÓ÷`¾=ìQQ•ËDªüþæê,‰ÉÕ —@!% %B´  0 üì2À91/<ì290KSXííY"²]@L&&6FUWX dzy{ ',+&:IGG[WXXWkzx]]33 ##‰Ëwíý»VôþšËÕýh˜ýžüì¤ý¸×sÕ@ —ˆ14üìì1/äì03!!×ËÑüdÕúÕªVyÕ …@,  B ´   / 0 üìüì91/<ì2Ä90KSXÉÉÉÉY"² ]@$  &)&) 6968  ]]! !###V»þö™þõºÕýøú+'üíúÙ‹FÕ m@B´10 üìüì991/<ì2990KSXÉÉY"²]@&)&8Wdjuz &)FIWgh]]!3!#‹øÃÿþÃÕû3Íú+Íû3uÿã\ð #@ ——–™2 625üìüì1äôìî0#"32#"32‰‡š™‡‡™š‡Ó÷ýýö÷üý÷éIþæþ·þ¸þæIþzþ€~ˆ‡€þ€ÅuÕ+@—— ˆ 2 8 3üì2üì91/ôìÔì032654&#%!2+#ꌜþL´úþÿûêÊ/ýÏ”……“¦ãÛÝâý¨uþò\ð=@ —— –™ 2 625üìüì99991Ääôìî9990"#"32#"32ú÷÷üý÷‰‹È—‡š™‡‡™š‡€†‡€þ€þyþÚþ™H¾d÷Iþæþ·þ¸þæÑÕj@8  %%B— — ˆ    21  0üì2üÄì99991/<ôìÔì9990KSXíí9Y"#.+#!232654&#øNnRËÙ²M{cÁË ö¡ýÐÝ‘Ž—Áo¦þhy¡]ý‰ÕÞÒ”»Yý‰‹ÿãJð'„@=  %  %B ³§—³§—%–™( &919"0(üìÄüìä99991äôìôìîöî90KSXí9í9Y"²]@ ]].#"#"&'532654&/.54$32ô\¹^¦m•jÒÀþøüiÔksÍh™ªu‘lм ßV¾¢Í;<…qch#1ÒµÕà--×ID‰{pv /¾ Èñ'/¢Õ@—ˆ::Ôìüì1/ôì20!!#!/sþ-Ëþ+ÕªúÕ+“ÿã=Õ)@ —™ˆ10üìüì1ä2ôì9033267>53#"&'.“Ë  yVWx! Ê9FBªjiªCE:=˜ü m];<<;\löühåÁ?;::;>Å9˜ÕL@)%%%%B´/0üì91/ì290KSXííííY"%3#3h_ÑþKõþKѪ+ú+ÕÑÕ á@D    %%% % B ´   /Ì91/<ü<Ä90KSXííííÉÉÉÉY"² ]@^ //+ ??8 ZZ  &*%*(+ % & 5:5:;: 4 6 TTZXWV[[RW X ] gh yvy v #]]333# #ŪӬÅß¿ËÊ¿ÕûD"üܾú+wü‰¾Õ Æ@K % % % %%%% % B ´  ;/; 0 üäüä91/<ì290KSXííííííííY"²7]@8  '()& X xyw !%+% 5UYX es]]3 3 # #VÙHNÙþAßÙþ’þuÚôÕýÍ3ýBüéƒý}%¬ÕY@.%%%%B´<< Ôìüì9991/ì290KSXííííY"3 3#%×lkÙþ!ËÕým“üÉýbžœ‘Õ E@%%B—ˆ—/0 üÄüÄ991/ìôì0KSXííY"²]²]!!!5!²Éüô"ü ÷ýÕšûoªš‘Ïþòw@¶·¶µ=ÔüÄ21üìôì0!#3!ϨððþXùüfÿB7Õ@ ˆÔìÔì1ôÄ0 #%¾üíÕùm“Zþò@¶·¶µ=ÔÄ2ì1üìôì0!53#5þXððøÞH¨‰Õ@ ˆÔÌ91ôÌ290 # #ÁȲþ‘þ’²ÈÕýÓ‹þu-þÑþmµ¸/Ì1Ôì0!5Ñû/þmPPîöf%@ º¹<Ôì1ôK° TK°T[X¹@8Yì0 #Ýšþ»fþˆx…ÿã#{ )n@*  ¶Œ!‹ ¿Œ$¾™   D >*ôìÄüì22991/Ääôüôìîî99990@00 0!0"       ¢    ]#"326757#5#"&546;5.#"5>32¾=¡£zl˜®¹¹;³€«Ìûó÷†“^À[f»X‹Å=& 3qpepÓº)Lý¦d_Á¢»Â†y64¸''RR2“ÁÿãX 0@ Œ Œ™¾›G Fôì22üì1/ìäôìî9904&#"326>32#"&'#3–ˆ…†ŠŠ†…ˆýã,›fÊèéËd™.¸¸/ÖÚÛÕÔÜÚxRXþÉþïþëþÅWSÃÿã%{/@ ‹ À‹ÀŒŒ ¾™ FôÄ2ì1äôìþôîõî0%# !2.#"3267%JRþüþÛ%QšNI“]­º»¬`˜A9++88*,ÁA:àÐÏá;>{ÿã0@ŒŒ™¾›G Hôìüì221/ìäôìî9903#5#"3232654&#"Z¸¸.™dËéêÊešþˆ……‹‹……ˆÑCùìSW;7Wþ ÖÚÜÔÕÛÚ{ÿãX{E@& ‹ ¶Œ ÁŒ¾ ™ IHôìüìÄ991äôìäîîôî990!3267# 32.#"Xüã¿®XÀmiÃ[þûþÚ ðÖ÷¸‘ˆ…¬^Z·È89·++9 @þÞÅ¢©°œÃ'4@ ¶Œ›    Ô<Äü<Ä2991/ä2üìî2990#"!!#!5!5463'ÑcMþ¸þÕ+©³™Qgcü/ÑN¸®{þH{ )H@' ' ‹ ŒŒŒ$¾Ã(Â*' G!H*ôÄìüì221ääÄôìîîÕî999904&#"326#"&'5326=#"3253Z‡‡Žˆ‡¸îçL¦Sb C•ˆ,˜mÄêêÄl–/¸9Ï××ÏÏÙÚþÝüþü¶.,¢°}^\::VZ‘Ã,@ Œ¾ › J  Fôì2üì1/<ìôì990#4&#"#3>32¹jq‹¸¸1¨s«©¶ýJ¶—Ž·«ý‡ý¤`cá²D .@¶ Ä ›Â¶L LK Ô<äìü<ì1/ì2äüìî0!!!5!!3#×münmþḸ`ü/BCéºþV 8@ Œ¶Ä›Âà  Ô<ì2ÄÄ991ääüìîî990!5!+53263#XþÃõ³¥þêZZ¸¸åûŒÃÓœ}¥éì² Å@:  B›  DE ôìì291/<ìä90KSXííííííY"²]@R546Ffuv ('(;;797JIYYkiiiyxyy]]33 ##ì¾ãàþGþáþb‰¾ü{ÑþZýFBþ?   &@  ¶ Ŷ L ÔìüÌ991/ìüì990;#"&5!5![Y×饵þÙß–|~œÔÂùmo{"£@'  Œ ¾ÂMNMNME#ôK° TK°T[X¹ÿÀ8Yü<üìüì91/<<äô<ì299990@G000000 0 0 ?????????€€€€€€€ € € #]>32#4&#"#4&#"#3>32¤"iJ‡o¨5FP;¨9JI9§§!c?LeîHEÑþßýwís{åýðp{åý``32¹jq‹¸¸1¨s«©¶ýJ¶—Ž·«ý‡`¨`cá‰ÿãH{ #@ŒŒ ¾™ D>ôìüì1äôìî0"32654&'2#"hŒŒé÷öêéöößÚÖÕÛÛÕÖÚœþÒþâþáþÓ-.¾þVT{3@ŒŒ¾™Ã GFôì22üì1äääôìî990%#3>32#"&4&#"326w¹¹.™dËçèÊf™ð‡…†ŠŠ†…‡ýÉ SWþÆþêþïþÉWõÖÚÛÕÔÜÚ‰þRw 3@ Œ Œ¾™Ã G>ôìüì221äääôìî99032654&#"#"3253#L‡……‰‰……‡-™eÉéèÊd™.¹¹+ÖÚÛÕÕÛÚýŠSY7:WSùöjƒ{O@ —¾  ÔÄì21/äôìÔÌ990@%  0030@@C@PPPP].#"#3>32ƒ;zI¬¶¹¹.¿ƒDv6y.*ØÌýÓ`Ûw"$Õÿã{'u@@    B ‹À‹ÀŒŒ%¾™( OI"E(ôÄìüìä99991äôìþõîõî990KSXí9í9Y".#"#"&'532654/.54632ÍO S}{\·J‰ìÒS¶jg¼Tz†õEŸ’ÚÊZ¦9´..QSKJ#œ}¦»##¾55cY€1“¡¯!ƒž1@¶Â¶  Ô<Äü<Ä2991/ìô<Äì2990!!;#"&5!5!f¢þ^^uÏáϪþÕ+žþÂý |b“¦Ë`>Ãÿã^,@ Œ™   JFôìüì21/ä2ôì990332653#5#"&økp‚й¹1©q¬¨¨¶ýJ—Ž·«yû¢¨adádm`e@)BÂIEôì91/ä290KSXííííY"²']@%]]3 3#d¿EF¿þrí`üT¬û Ñ` @E      B    /Ì91/<ô<Ä90KSXííííÉÉÉÉY"² ]@Œ      &&)&))#, 96993< EI F J VX W Y fifij e vzx| r -   ++>>< H Y jih {yz|  ]]333# #¶Ã ¢Ã¶þú°³²°`üwBý¾‰û fýšL…` ©@H      B  IE ôÄüÄ91/<ä290KSXííííííííY"² ]@ fivy  :4 ZV ]] # # 3 ^þo¸Õþ¸þ¹Õ¸þoÌ)'`ýèý¸Áþ?Hþk•hþV` @E       B  ŒÃ IEôìÄ91ä2ôì9990KSXííííí9íY"²8]@v  &&8IIY ]]+532673 3Z.Gc".Š\”mQ\GþOÃLGÃhu¿þø:NNš^ÄNü”lËb X@B¶Â¶IE ôÄì2991/ìôì0KSXííY"²8]@68EJWXejuz ]!!!5!ã-ý}ƒü»ƒý•b¨üÜ–ª%Ýþ²ô$f@5 %   ! ¶ ¶Æ Ƕµ% $  = %Ô<Äü<Ä299999991üìäôìî99999990#"&=4&+5326=46;#"3ô@ù©kŒ>>j©ù@FŒU[noZUŒ¾”Ýï—tr–ðÝ“WŽøŽŽœøVþ¾·µÔì1üÌ0#¾¬øÝþ²ô$j@7%   ¶¶#ÆÇ¶µ%#= %Ô<Ä2ü<Ä99999991üìäôìî99999990326=467.=4&+532;#"+ÝDVZon[VD>ù¨k@@k¨ù>¾XøœŽŽøX“Ýð–rt—ïÝ”Xìy &@    'üÄ1Ôü<Ôì2990#"'&'.#"5>32326yKOZq Mg3OIN’S5dJ t]F‰ ®;73 !;?®<6 7=ÏÕ @†ˆ Ô<ì2991/ôüÌ0533ËË¡×þþû)eþ›ýqÕþÇ%˜!N@*‹ ‹Ë ˾ ™ " E"ôìÔ<Ô<<ì221Ää2ô<Äìþôîõî990.'>7#&5473%C‚??ƒBI‚9gáþüÞg9‚þÞ„  5¬(,üš-(¬"þâ9ûú=þá"ü+` 츸ë‹Xð>@  ¶ ‹§—– — Ô<ÄÄü<ÄÔÄ1/ì2ôìôìÔ<î2990.#"!!!!53#5354632D>C†sþü3ìÇÇÛßA‰¶¸,,³ÀÙþ/ªªÑîþúÍÃLB /@ (-  * -'! ÿ¸@'ÿ) -0)$ !'$* xyx( $0ÔÄ2ìüÄ2ì9999999991ÔÄ2ìüÄ2ì99999999904&#"3267'#"&''7.5467'7>32d|[Z}}Z[|¦Z¦¨^¦.[20`0¤\¦¨^¦.[3.^ƒZ{{Z\}~t¦]¦1]02[-¦^§£Z¦3].2]-¦_¨%¬Õ@D% % %%B ç çˆ< e e<Ô<ìì2ü<ì2ì99991/ä2Ô<ì2Ô<ì290KSXííííY"3 33!!!#!5!5'!53%×lkÙþ¶üþÅV‘þoËþqZþËóÕým“ýÏo—#oýô o#—oþ¢¾˜!¼·Ô<ì21ÔìÔì0##¾¬¬¬˜ý öüý öÇÿ= ð2>j@<#$93 $*ÎÏÎÏ0–?#54&¨S9akÍÔ‚[]=:Ì­I›WW”9fqÝÖ€][<;ȧH™þ>=÷><¶¤''PGZswšeZŒ54m@ލ¤''TLf{x™f[1,pE‚ŸýÕ-Z/L‡…-Z/Lˆ?F‘@ÞÝaaÔüÔì1ô<ì203#%3#?ËˈÊÊÊÊÊ}ÑN1ID@' Ú ÚÜ&Ô>ÚÚÙÔ>Ó2ÑJ\ ^,8 8YD/æþÅþå2î1ôìüôìÔìþýîÖî0.#"3267#"&54632'"3267>54&'.'2#"&'.5467>`:o:u‡Œ‚8g24r=´Ïг=rÄjµKKMMKLµijµLLKLKKµkÚZZ\[[[Ú~}Ú[[[\ZZÚ/l•€„ŽhȬ­Ê¡JKK¸jh·KLLLLLµij¸KKJgZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZÕÁð %)d@6  (ó&í&ñí  ïîíð#–*& (' j kji*üìÄüì22ÀÀ9991ôäüôìÄîíÖîî99990"326=7#5#"&546;54&#"5>32!!¬|WHiƒ1ƒR–»¬¶wu3}CD‡?¸¬ýkœýdPDN@Ms=þ@pABˆtŒZ\#!¬ý {w# /@  ü¬  v vÔü<Ôì2991ô<ì2990 5 5LþÓ-þ+›þÓ-þ+#¿þôþô¿¢R¢¿þôþô¿¢RXsy^@  'üÔì1ÔÄì0!#!X!¨ü‡^þ?dßmƒ¶ ÔÄ1Ôì0!!d ý÷ƒ¤}ÑN4L…@I  ] ] B  ×× ÖAÔ)Õ5Ô)ÓÑM  \\ [G#X;#Y//æþåþõÄîî299991ôìüäþí2îÖî9990KSXíí9Y"2#'.+##32654&2#"&'.5467>"3267>54&'.X“XP:&rk1=-7‚èffZJJDÚZZ\[[[Ú~}Ú[[[\ZZÚ~jµKKMMKLµijµLLKLKKµLbeG]C;º®P*þضTè6?>5VZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZgJKK¸jh·KLLLLLµij¸KKJ=b“ö¶¶ÔÌ1Ôì0!!=Výªö”+u¦ð @Ì ÍÌ–STS Ôìüì1ôìüì02#"&546"32654&hAu,-/º†‡´¸…OomOPqpð1.-rB„·´‡†ºoPPlnNOpXy“.@ ã  ã    Ô<ì2ü<ì21/ìÔ<ìü<ì07!!!!#!5!X!ûßd½þC¨þD¼ªª“þ·ªþ´LªIBœ}ða@WWBA     @–ÔÄÔÄì9991ôìäÔìî990KSXí9íY"!!57>54&#"5>32ãšýÅçeQdR1q?Ay;ެJwrnâaz3=L$$}…k9wuFœð(\A          @#–) & )ÔÄÄÔìÔì991ôìäôìîÆöîî90#"&'532654&+532654&#"5>32Û^c¾±:r;Eq-evnmBJ]b`W,p;Eu2‘¨X`lP|†yQDJLl?<8?yvcG]Ûîºf%@ º¹<Ôì1ôK° TK°T[X¹@8Yì03#ôÆþ»šfþˆÃþTž` L@* Œ‹™Ã Â!   JF!ôìüìÄ9991ä2äô<ìüÄ9903326533267#"&'#"&'øxo¹ ! &D">K .…Y\,þT ýHŽ—ª¦ü ;8 ”OOPNLPýÕjÿ;Õ #@ˆWW1 ÜüüÔì91Ä2ôÄÌ0!###.54$FÀ¿×ìÕùfùáNݸ¾èé/å`¹µÔì1Ôì03#éüü`þÏÿÿ‹þu)­Xœ“ß 9A      @ – aW}a Ôììüì1ôìäÔìî2035733!jÍßåŠÌý× c)t'ý+nôÕÝð 3@óñíðí –  jkjiüìüì991ôìôìüì0"32654&'2#"&546!!hfssfeusgªËÊ«ªÊË«¤ý\{œ‹‹šˆ‹œu༻ßß»¼àü`{Á\# /@  ü¬ vv Ô<üÔ<ì991ô<ì2990 5 %5 ‡Õþ+-þÓþ:Õþ+-þÓ#þ^Rþ^¿  ¿þ^Rþ^¿  ÿÿþòZ{'=¸üV'{þþœ ¯ÿÿþòZ{'{þþœ& ¯tÉüVÿÿþòZŒ'=¸üV'uÿœ ¯ÁÿåÝÕ!%‚@G  %%B!‹ "†$ —™$ˆ&# # )"#&ÔüÄÔìÖî99991äôìþÍôî9990KSXí9í9Y"33267#"&546?>54565#53%¾=TZ>/ƒmN²b^¿hºÝC^XC&ÄÊÊDšb‰RY;X1YnED¼98À¡Lƒ\V@T?þÿÿ%¬k&$ ¬u@O ]1ÿÿ%¬k&$ ªu@O ]1ÿÿ%¬m&$ ­u´  +@ /  ]1ÿÿ%¬^&$ «u´# +@O#@]1ÿÿ%¬N&$ ©u´ +@p0? /]1%¬m !Á@W % %%% %!%! %!! % !B  — È É  !  PPK/K!"Üäüäî2î299999991/<ææÖîî9990KSXííííííííY"²€]@… ŠŠ… € €€]]4&#"326!.54632#!#Y?@WX??Y˜Õªþ”:A rr¡@;¬ÑnýõlÑZ?YWA?XXüýP!yIr¡¡rIv$ú‰…þ{œÕg@7 % %%%B— ——ˆ—°±   c /Ô<î2ÖÄÄ91/<îîîôî2îî0KSXííííY"!!!!!!#!‰þ®3þÍeýáþ e¸šxÊ5ÕªþFªýãªþÕªüüÿÿ‹þu1ð&­d&ÿÿÅNk&( ¬uÿÿÅNk&( ªuÿÿÅNm&( ­uÿÿÅNN&( ©uÿÿÉk&, ¬uÿÿÉk&, ªuÿÿÉm&, ­u ´ Ic:1ÿÿÉN&, ©u´+1NÕ ;@!¶ —ˆ —  21 0 0ü<ì2ìüìÄ91/Æ2îöîî20 )#53 6&!#!!´VDþ»þ«þÑ}}/ÿÊÉÿ`þøÕþ”þ€þ‚þ•Å•{úÑûHKûþ+•ýáÿÿ‹Fb&1 «y´"+@O"@]1ÿÿuÿã\k&2 ¬u@O]1ÿÿuÿã\k&2 ªu@O]1ÿÿuÿã\m&2 ­u´ +@ /]1ÿÿuÿã\^&2 «u´ 0!+@O0@!]1ÿÿuÿã\N&2 ©u´ +@p0? /]1–®;T .@     Ô<Ì91Ô<Ì290 7   –^þ¢t^_tþ¢\tþ£þ¤%\^uþ¢^uþ¢þ¤w^þ¢ÿº° +k@:+)&  *&——&–™, #* #)+262#5,üìüìÀ999999991/äôìîÀÀ9999990324&' .#"#"&''7&5327sƒTš‡ ýÝøsVƒ»)+÷ýy´=g² %÷üs­9‹d/NZInˆ-ýËÏQUþÜþ†PeæQþþ£þzþ€QQËFüIž‡€RPÉJÿÿ“ÿã=k&8 ¬u@O]1ÿÿ“ÿã=k&8 ªu@O]1ÿÿ“ÿã=m&8 ­u´ $+@ $/ $ ]1ÿÿ“ÿã=N&8 ©u´$!+@p!$0!?$ !/$!$]1ÿÿ%¬k&< ªu@ ]1ÉÕ4µ—— ¸@ ˆ 28  3üì22üì99991/ôüìÔì032654&#33 !##“êžžþLÊþøøþüþÊ!ý󄃃ƒ´þòÒÚÛÑþ‘¼ÿã}/V@1-'!  *‹Œ*Œ›™.  !' $'$-DF0ôìüÌÆîÔîî99991/äþîþÕî9904632#"&'532654&/.5467.#"#¼ÒØÌÒ›¨7C:—oàÄE‡BL…;l€AxC\[¢œyqyr»qÕÎÝØ|d1M*%]¤tš²¤aQG_J'8…O€«#krƒ‹û“ÿÿ…ÿã#f&DCÿÿ…ÿã#f&Dvÿÿ…ÿã#f&Dgÿÿ…ÿã#7&Dwÿÿ…ÿã#&Djÿÿ…ÿã#&Du)ÿã°{ C@I=70 6 %C ‹Œ"7‹6¿. ¶Á3Œ@:¾("™D%=/.M/u MCM6+sDôÄìüìÄüÄì29991ä2ô<ì2ô<ì2ôîþ<ôî999990@ 05060708]5#"32654&#"!3267#"&'#"&546;54&#"5>32>321©xYS\JíMWWLëþepO27„Gn• '…aœ£È¿uc^8„>M„<[|%!„Y®‘ºHZqYa…4—…ˆ+#"¡33¬)+RNPP¬¤«³Xx€+'¨#!?@=BíþÎÿÿÃþu%{&­hFÿÿ{ÿãXf&HCÿÿ{ÿãXf&Hvÿÿ{ÿãXf&Hgÿÿ{ÿãX&Hj@@]1ÿÿ²Df&óCÿÿ²Df&óvÿÿ²Df&óg @@ 0 ]1ÿÿ²D&ój´ +1‰ÿãH)‹@O BŒ $Œ™ ›*'! !'D! >*ôìüì9999991ìÌôìî99990KSXííí9íY"#"32.''7'3%.#"32654&ÍŶûåäûûà"#!H&þéí¶Û!!®#R-’™”ˆ‰”:/Ôþ„ÈþôþØ(  (-Y,\bPÈ‘^bþ ÒÇÄÔÔÄnËÿÿÃ7&Qwÿÿ‰ÿãHf&RCÿÿ‰ÿãHf&Rvÿÿ‰ÿãHf&Rg´+@]1ÿÿ‰ÿãH7&Rw´. +@ 0 ?. /. .]1ÿÿ‰ÿãH&Rj´ +@ p_PO@]1X–yo '@þþ  w Ô<Äü<Ä1ÔÄüÔìî03#3#!!îõõõõþj!ûß‹õÙö¢ª/ÿ –¼ +s@>+,&  )&  *&Œ& Œ¾&™,+,* # )#D>,ôìüìÀ999999991äôìîÀÀ99999990 32654&'.#".5327#"&''mþ1$eA H#cC‹•‹')öédž<“]¤*,öêg9 \ ýÑ//ÛÕ4o¯0.ÖÊ0tG GÃq.78°MÃBÁzþáþÓ;<ºLÿÿÃÿãf&XCÿÿÃÿãf&XvÿÿÃÿãf&Xg´ +@]1ÿÿÃÿã&Xj´ +@ p_PO@]1ÿÿhþVf&\v¾þVT3@ŒŒ™¾ÃÅ GFôì22üì1ìääôìî990%#3>32#"&4&#"326w¹¹.™dËçèÊf™ð‡…†ŠŠ†…‡ýÉÉý²SWþÆþêþïþÉWõÖÚÛÕÔÜÚÿÿhþV&\jÿÿ%¬0& ¶$´ +@ @O /]1ÿÿ…ÿã#ö&ŠDÿÿ%¬m& ±$´+@ _PO@/ ]1ÿÿ…ÿã#H&ŒDÿÿ%þuàÕ'vÇ$ÿÿ…þur{'vYDÿÿ‹ÿã1k&& ªZuÿÿÃÿã%f&FvZÿÿ‹ÿã1t' ­~|&ÿÿÃÿã%f&gZFÿÿ‹ÿã1P& ²K&ÿÿÃÿã%&KFÿÿ‹ÿã1m&& ®ZuÿÿÃÿã%f&FhZÿÿ‰Rg&' ®ÿ²oÿÿ{ÿã ' ¨:ÿ¯G ¹@8@]1ÿÿNÕ’{ÿãÑ$H@ "ç ¸ @"ŒŒ™¾›   GH%ôìü<Äü<Ä1/ìäôìîý<î2990!5!533##5#"3232654&#"ZþÏ1¸¿¿¸.™dËéêÊešþˆ……‹‹……ˆÑ5y••yúúSW;7Wþ ÖÚÜÔÕÛÚÿÿÅN0& ¶(ÿÿ{ÿãXö&Š#HÿÿÅNm& ±(ÿÿ{ÿãXH&ŒHÿÿÅNP& ²(ÿÿ{ÿãX&HÿÿÅþuNÕ'v1(ÿÿ{þuX{'vöHÿÿÅNg&( ®$oÿÿ{ÿãXa&Hh#ûÿÿfÿãPm' ­u*ÿÿ{þHf&gJÿÿfÿãPm& ±2*ÿÿ{þHH&ŒJÿÿfÿãPP& ²2*ÿÿ{þH&JÿÿfýÃPð'¬€ÿá*ÿÿ{þHN'˜.Jÿÿ‰Hm' ­u+´ +@ /]1ÿÿÃm' ­uKK°QX¹@8Y@p`O]0ÎÕ?@!—  —±ˆ   1 0ü<ì22Ìü<ì22Ì1/<ä2üìÜ<<ì2203!533##!##53!5‰Ê*ʇ‡ÊýÖʆ†Ê*Õààà¤û¯Çý9Q¤¤ààF?@" ¶ Œ¾› J  Fô<Ìü22Ìüì1/<ìôìÜ<ì2990#4&#"##5353!!>32¹jq‹¸}}¸aþŸ1¨s«©¶ýJ¶—Ž·«ý‡ö¤zz¤þÂ`cáÿÿÉ^' «u,´ +@ O@ ?0 / ]1ÿÿ²D7&wóÿÿÉ0& ¶,´+@O@]1ÿÿ²Dö&ŠóÿÿÉm& ±,´+@O@]1ÿÿ²DH&ŒóÿÿÉþuÕ&,vFÿÿ²þuD&LvPÿÿÉP& ²,²D` "@¶Â¶LLK Ôäìüì1/ì2ôì0!!!5!!×münmþá`ü/BÿÿÿæÌØ =@²—™!  — ˆ— "!ÔÌ2ÜÌ2ÔÌÄÄ1/ì2ô<ì22ôìôÌ0%532765!5!#"'&!#3!53#Œ=„Ga'&þýHH¨AA@ý-]ääý£ää@ìQQJKËDªüþæuuêûªªÿûþKŠ I@& Œ à ¶Ä›Â¶ ! Ô<ÄÌÜ<ÌÜ<ü<ÄÄ1/ì2ä2ü<ì2î2ôì0!5!+53263#!!!5!#3#ÒþÃõ³¥þêZZ¸¸üi‚,ý+ëë——åûŒÃÓœ}¥éÀü/BCéÿÿmÿãÊm' ­0u-ÿÿºþV¨f&gæÿÿ‰ýàÉÕ&¬jþ.ÿÿìýà²'¬ÿþNì²` Ä@9  B  DE ôìì291/<ì290KSXííííííY"²]@R546Ffuv ('(;;797JIYYkiiiyxyy]]33 ##ì¾ãàþGþáþb‰¾`þ/ÑþZýFBþ?ÿÿÈsl' ªþív/@ ]1ÿÿ  l' ªÿ¡vOK°QX¹@8Y@ŸO]0ÿÿ×ýàsÕ&¬fþ/ÿÿ ýà &¬ûþOÿÿ×sÕ' ¨®ÿm/ÿÿ †' ¨ ÿ¹Oÿÿ×sÕ'y`†/ÿÿ ¼'y×OÿösÕ 7@ —ˆ  1 4ü<ìì2.9991/äì903%!!'7×Ë;NþwÑüd‘PáÕý˜Ûoþîýãª;jnžL >@!  ¶Å¶  Ô<Ìü<Ì2999991/ìüì9990;#"&5'!5!%[Y×饵þÕP{þÙß;Pþu–|~œÔÂ$Ño/ý¾Ûnþíÿÿ‹Fk' ª!u1ÿÿÃm&vQÿÿ‹ýàFÕ&¬*þ1ÿÿÃýà{&¬0þQÿÿ‹Fm&1 ®*uÿÿÃf&Qhôÿÿ–&Q{aþI“þV=ò2@ —–ˆ— 10ôì2üìÄ1/Ôìäôì90+5327654&#"#3>32=YZ¥Í§Z-,t|˜ÊÊ6¸~»¹çüÃijœ>>’ñ´©ÚËüWÕÆotþûÃþV{ 2@ Œ¾Â¶ JF!ôì2üìÄ1/Ôìäôì90+5327654&#"#367632YZ¥Í¹Z-,jqFE¸¸1TTs«TU¶ý6Ãijœ>>~Ê—Ž[\«ý‡`¨`21qpÿÿuÿã\0& ¶2´+@ O@/ ]1ÿÿ‰ÿãHö&ŠR´+1ÿÿuÿã\m& ±2´ +@/ ]1ÿÿ‰ÿãHH&ŒR´#+@]1ÿÿuÿã\k& ³2ÿÿ‰ÿãHf&‘RHÁÕ;@—  —ˆ— ±  -ÜìüÄÄÔì299991/ìì2ôì2î0%! )!!!";Áý£þÙõô(RþšHþ¸þþ±‹‹±=ªªMœ¡KªþFªýãæþ¤þ¦åÿãº{ 8i@92/ & 8 ‹ ¶ Œ#ÁŒ5/¾)#™92& MuMCM,s9ôìüìÄüì29991ä2ô<ì2äî2îôî9999904654&#"265&#"!3267#"&'#"32>32PVWMþ¦fRPhgPP¬þcpPƒ/;}Jb“04€T½ªª½Y€/%‚W¯‘ & ‘‡‰ž+ýê¨ï#®§þóþó§‡T£53¬+)CBDA88>A>AíþÎÿÿÑk' ªÿµu5ÿÿjˆm'vÎUÿÿýàÑÕ&¬rþ5ÿÿ ýàƒ{&¬ˆþUÿÿÑg&5 ®ÿÄoÿÿjƒf&UhZÿÿ‹ÿãJk' ªu6ÿÿÕÿãm&vVÿÿ‹ÿãJm' ­u6ÿÿÕÿãf&gVÿÿ‹þuJð&­6ÿÿÕþu{&­Vÿÿ‹ÿãJm&6 ®uÿÿÕÿãf&Vhÿÿ/þu¢Õ&­7ÿÿƒþuž&­yWÿÿ/¢m&7 ®u´ +1ÿÿƒ~&W ¨/¢Õ-@ — —ˆ: : Ô<ìÌü<Ìì1/ôì2Ô<ì20!!!!#!5!!/sþ- þ÷Ëþ÷ þ+ÕªýÀªý¿Aª@ƒžB@! ¶¶ ¶  Ô<<ÄÄü<<ÄÄ2991/ìô<Äì2Ô<ì2990!!3#;#"&=#535!5!f¢þ^åå^uÏáϪååþÕ+žþÂéŽé|b“¦ËéŽé>ÿÿ“ÿã=^' «u8´/ +@O@ ]1ÿÿÃÿã7&wX´'+@/ ]1ÿÿ“ÿã=0& ¶8´+@ O@/ ]1ÿÿÃÿãö&ŠX´+1ÿÿ“ÿã=m& ±8´+@/ ]1ÿÿÃÿãH&ŒX´+@]1ÿÿ“ÿã=U&8u OÿÿÃÿãÙ&XuÓÿÿ“ÿã=k& ³8ÿÿÃÿãf&‘Xÿÿ“þe=Õ&8vðÿÿÃþu°^&Xv—ÿÿÑt' ­|:´+1ÿÿÑm&gZ´+1ÿÿ%¬t' ­|<´ +1ÿÿhþVm&g \ÿÿ%¬N&< ©u´ +1ÿÿœ‘k' ªu=ÿÿËm&vV]ÿÿœ‘P& ²2=ÿÿË&]ÿÿœ‘m&= ®uÿÿËf&]hÃ',@ ¶ Œ ›Â Ô<ÄüÄ991/äüìî990#!5!546;#"¦¸þÕ+©³ÝÑcMÃû=ÑN¸®™QFÿãX%>32#"&'##53533!!#&#"32y,›fÊèéËd™.¸{{¸aþŸˆ…†ŠŠ†…ÑRXþÉþïþëþÅWSö¤zz¤üc¬ÚÛÕÔÜ¥Õ)?@$— —ˆ— ± 2 !$'+ÔÜÔ9ì2ÜìÔì91/ììôìî9032654&#32654&#%!2)"#546x°–ž¨xt’ƒ”þÂBåøƒƒ“§þöþùþ¾>dœ©ÉýÝ{’‰fþ>p}qd¦Æµ‰žÏ ËÏ/Wp1FŸ¹ÿÿ¦qÕHÁÿãX>32#"&'#!!&#"32y,›fÊèéËd™.¸ðýȈ…†ŠŠ†…ÑRXþÉþïþëþÅWS¸ûý¬ÚÛÕÔÜ0¡Õ 327654'&#'3)'¡ï°KKOO¨ïë{e5……þùþF¦qÉýÝ>=’DE¤¿d¡Ëgh´ä=<ÿã” !&#"32>32#"'&'#'Òˆ„†FDDF†„þl,šfÊttttÌdLL.¸ÂzY¬ÚmnÕÔnnRRX›œþïþëž+,S´ä|‹ÿã1ð/@21 Ü<ôì1@ ³ ²— ³²—– ™äôìôìîöî0>3 !"&'532#"‹M¢[?þÃþá[¢MI©XÅÄÄÅVªJž))þgþ’þþj))Ï=@0230@=<ÿã•g"%# !2676;".#"3267âM¢[þáþÃ?ZO*Z¥T3,JªVÅÄÄÅX©I5))–p*™32jœ>5‡F=@þÐïþÎþÐ@=^ÿãsŽ!%# !2676;".#"3267ÀJRþüþÛ%FC=Z¥Z-,I“]­º»¬`˜A9++8(8rGjœ>>~”A:àÐÏá;>ÿÿNÕ’ÉÕ3 !#"#546 6&!#FéVDþ¼þªé6<0œÀcÿÊÉÿÕþ”þ€þ‚þ•//&r1Fµ£úÑûHKûûwƒNÕ#";5!! $5476%3ƒï¨ž–°ïýE†þFþùþö5e{ëɉ’{‰¦ú+ÏË¡d¿Âÿã4 32654&#"5!#5#"32_ˆ…†ŠŠ†…£ð¸.™dËéèÊf›,þTÚÜÔÕÛ}¸ùìSW;7XR‹ˆþ=G{ 7%2654&#"#"/532376?654'&'&'&'&32hŒŒ§(>vwÅf2—BFKI I<' )iëy|öêéö{ÚÖÕÛÛÕÖÚL (=\ˆRR $­+.! ”—-þÓþáþâ—&ÅNÕ +@ 1 3 üÄÄüì21@ — —ˆ—±/ììôìî0!5!!5!!5Nüw¿ýrŽýTÕú+ªªºªuÿã\ð=@ 26 25ôìÄôì991@ ³ — –——™ôìÔîôôÔî9905!54#"5>32#"327uŠ–VªJM¢[ý÷÷ýýö׌””~ éSñ@=Ï))þ€þyþzþ€~#øþûÿþ‰ÿã7ð(>@  22&0)üìÔìÔÄÄ1@ ³ —–)—±)³ —#™)ôìÔìôì9ôìÔì0.54$32.#";#"3267#"$546¸ƒ‰ÚI½yh¾Y†‘œ‹šš˜²²¦bÆfgÖgõþëœ"¢{µÝ º(({smz¦™‚–45É$&ëΕÇ?þV’Õ!!!!+532765|ýµ ýôYZ¥°ŠZ-,ÕªþHªý#Ãijœ>>~ÃþV'$+"!!+532765!5!547676;'Ña'&þQRµF1i&&þ×(W%6†MIþÏþÎþÉþÕ!‘¦þR¶I ! 5 3 3325ÚDþ`þH&þ0ØttÚý¢ÆØÌŠþ?þuììoä¸ýÕ+ü¦þÓþ¼ŠŠEA&#767653#"'&54&#"#367632ó"&76/§˜šJI_BG}¦¦MKUv˜¶þà™14IBœ›þeäá``Ö —Ž·«ý‡ý¤† 1áÉ:Õ!5!!;#"'&5þÇ=þÇ,-Z¹Ùª\Y+ªªüz=>«jfÆÉÕ!!3!!#!!5!!5!!É=þÇ þ÷9üÃ9þùþÇÕªýÀªþiªª—ª@nÃÕ67632'&#"##3‡¡i~\/j!-<Bm¤VôþšËËœª c3r%3s¬üì¤ý¸Õýhì²5476;#"33 ##ìYZ¥Í¹Z-,ãàþGþáþb‰¾ê”Ãijœ>>~þÑþZýFBþ?  ;#"&=#53!5!;+[Y×饵ääþÙß ÝÝ –|~œÔÂÄŽ§üÉŽ1mÕ% # #''3C\Pþñ¿þ¿þ¶¿©"þ–P®¿½ònþþûÁÀý@‘Jûo |mÿåoÕ"%#"&33265332653#5#"&8"iJ‡o¨5FP;¨9JI9§§!c?LerHEÑ!þü ís{åöü ðp{åöú+`=ÃþR{#4&#"#3>32¹jq‹¸¸1¨s«©¶ûœd—Ž·«ý‡`¨`cáuÿã\ð  32'&#"32767\÷þö÷üý÷Ô:Dš™C; 9C™šD8 éþzþ€~ˆ‡€þ€þÌ{{þø¸úvuûÿÿÿã§'¡y¤2‘ÿÿ ÿã²{'¡„R—-ÿã¤ð%63273# &#"327-N5>Îo“毴oþ8݈=ŠŠyyŠŠ=é Yžƒú+Í üvÀ~^þæþ·þ¸þæVþR«{ 763273##"'&7327&#"VúPeÒo~ç°µnÓêoV°×AAÎ( /´s%—+nú+Íýø—¼’þþu"m†mþâB8™Õ!+#"#54763! 27654&+™þÈVn]Ê6<0œ``~'—RþÓ@œ]þ¤Mý¨//&r1FµRQþÜEþ’8D…“ýϾþVT˜*3265'"#"67232#"&'#76;#"wÑ"…‡û Ö. [ÂËçèÊf™,¹Ë?N͹© /þ‰2ÚÖ¢þïFI¤þÆþêþïþÉWSýɬ.OœÝþøÑÕ#.+#33232654&#øN76SËÙ²M{cÁËËÕö¡ýÐÝ‘Ž—¹77§þhy¡]þ‘ÕþøÞÒ”»Yý‰‹ÿãJð'>323267#"$546?>54&#"ái¾Vß ¼Ðl‘uª™hÍskÔiüþøÀÒj•m¦^¹\¢''ñÈ ¾/ vp{‰DI×--àÕµÒ1#hcq…<;Õÿã{'>323267#"&546?>54&#"P¦ZÊÚ’ŸEõ†zT¼gj¶SÒì‰J·\{}S O9!!¯¡“1€Yc55¾##»¦}œ#JKSQ..ÿÿxmÕévþV[!&'&#"3;#"'&5# 54!238!n|wx'%d°®ÃQW¾þò/µR5¿-0A3šû=g)(™V\´®ÒØ`@o›ƒþVž !!;+53276=#"&5!5!f¢þ^^uÏYZ¥Í¹Z-,(ϪþÕ+žþÂý |b“Ãijœ>>~¦Ë`>/¢Õ&#5463!!#ŃF1œÀÖÝþ-Ë/7&r1Fµ£ªúÕ+ƒ!!;#"&5!5!5476;#"f¢þ^^uÏáϪþÕ*YZ¥Í¹Z-,`ý |b“¦Ë`Ãijœ>>~/þV¢Õ!!;#"'&5!/sþ-,-Z¹ß¥ZYþ+ÕªúÁ~>>œjiÃ?ÿÿ ÿãÈ'¡š¨8ÿvÿÿ'ÿãªq'¡|XÿdJ‡´##"47#5! 54'5‡õ{nþàðòþßo{øÏx†´4³†x´¬†þà¼þÉþ‘n8¼!…¬¬Lþ·Þæþ÷ æÞIL¬š*Õ!"'&533254'3úª\ZÌ,,Zš´†xÚzn“jfÆ?ûÐ~>> æÞIL†þà¼þɸ¼À×#367632'&#"kö·þSÁHÇcm.-PKG "(3tþ*ýbž7ým‘È*9† þVÉm+5326?3 67632'&#"nQGJ|“lLT3!þ;Ã^2Q+31705+hË:=šH†TNü”»~)“ )œ‘Õ!3!#!!5#5!!²Éþuèþ÷Pþð"ü ´"výÕšý°ªþiªš§ª@œ5b!!!#!!5!5!!Þ-þò8þžYòƒü»áþõŽý•b¨þ®¤þÒ–ª¤gÿä·Õ 7654'&+5!5!2! $5ädc{dd\^¤®rýÊþˆh‚bVPþÐþèþÜþгKKKK†IJ¦¹ª¨þG8+lhŠÝòòÝÿä·Õ3! $54767635!!#" 76îÈþÐþÜþèþÐRUciþˆÈý r®¦\\dc{dd³ÝòòÝŠhl+8¹¨ªþG¦JI†KKKK}þLT` 5!!#"3267# $547676pþejýe®®¥]\dc¾mÈTjdc^þèþÐQVb€Üܨ“þ ¦JK„KK21Ã%òÝŠhm*8­þV$` 2767# 4%$54#0!!5! »TMOQWPVaþ –ëþÞåýejþžoþ0âþî,³ î5%b|8“¨þdåþì1a‹˜#ð 6323#!!5!5!67654'&#"¤Ð¿Û -"BPæ8þ»®üu~þå²i–9DµÞcé½``JUª?þ¨ªª—ª‚T<>¹<…ÿä¶Õ % 7654'&#!!!!2! &53h<= \^¤þGœý/"icUPþÐþèþRz,Êž[ŽÇ+3†IJ ªþI8+leÝò[tµG)}þLT` 7654'&#!!!76!"'57?\]¥þÔðýȨgƒcUQþÐþè»ÔªþöÃ-5†IJ,¸þ39+lhŠÝòJÃcÂÿãž 4'&+#5333#!"'53276MJY­>ååÊçç¥lunŠþœŸ³c9·rO_¤þì¤}nw°¹~F¬VrA}þVg{#36763254'&#"6¹¹4‡QÒ¸MNüÏr98xÜ­zþÐ ªBR1pq™þWþäù…BAïÎÕ3#ÊÊÕú+ÿÿ9˜Õ'‚ÿ6‚ʤ-Õ3!!!!#!5!5!5!Ê^þ¢^þ¢Êþ `þ `Õþl¨ðªþÿªð¨ÿÿÎÕÿÿÿ%¬m&$ ®uÿÿ…ÿã#f&DhÿÿÉm&, ®uÿÿ²Df&óhÿÿuÿã\m&2 ®uÿÿ‰ÿãHf&Rhÿÿ“ÿã=m&8 ®u´#+@ /##]1ÿÿÃÿãf&Xhÿÿ“ÿã= ' ©ù&8jªÿÿÃÿã2&Ž&Xq<ÿÿ“ÿã=ù' ©ù&8 ªÿÿÃÿã¢&Ž&X‡<ÿÿ“ÿã=û' ©ù&8 ®ÿÿÃÿã¢&Ž&X’<ÿÿ“ÿã=ù' ©ù&8 ¬ÿÿÃÿã¢'†<¾ÿÿzÿãW{ÿÿÿ%¬ ' ©ù'jª$ÿÿ…ÿã#2'q<¦ÿÿ%¬ 'jª& ²„$ÿÿ…ÿã#2'q<Öÿÿœ0' ¶ªˆÿÿ)ÿã°ö&ЍÿÿfÿãPm' ®u*ÿÿ{þHf&hJÿÿ‰Ém' ®u.ÿÿì²m' ®uNÿÿuþe\ð&vð2ÿÿ‰þeH{&vðRÿÿuþe\0& ¶¡ÿÿ‰þeHö&Š¢ÿÿÿä·m' ®uyÿÿ}þLTf&h8ÿÿºþVËa&h#ûæÿÿfÿãPk' ªZu*ÿÿ{þHf&vJ=ÿã”Õ%2763#"'&5!#3!3m6!¶h9…€H†þÕ¶¶+·R‡Of'þÀþ‹ŒMS™b–ý9Õýœdüuþï‹'ÿÿ‹Fk' ¬u1ÿÿÃf&CQÿÿœk' ªðuˆÿÿ)ÿã°f&v¨ÿÿÿº°k' ªušÿÿ/ÿ –f&vºÿÿ%¬k& ´$ÿÿ…ÿã#f&•Dÿÿ%¬m& °$ÿÿ…ÿã#H&—Dÿÿ»Nk& ´(ÿÿ{ÿãXf&•HÿÿÅNm& °(ÿÿ{ÿãXH&—Hÿÿ»k& ´,ÿÿ²Df&•óÿÿÉm& °,ÿÿ²DH&—óÿÿuÿã\k& ´2ÿÿ‰ÿãHf&•Rÿÿuÿã\m& °2ÿÿ‰ÿãHH&—Rÿÿ‰Ñk& ´Î5ÿÿhƒf'•–UÿÿÑm& °Î5ÿÿjƒH'—–Uÿÿ“ÿã=k& ´8ÿÿÃÿãf&•Xÿÿ“ÿã=m& °8ÿÿÃÿãH&—Xÿÿ‹ýâJð&¬6ÿÿÕýâ{&¬Vÿÿ/ýâ¢Õ&¬7ÿÿƒýâž&¬YW}þRTð. 56$>54&#"57>54.#"5632 4o¹ÿþê™È1¹\}p_s£ø54&#"57>54.#"5$32Fp>!Bl˜³•J¢õžc(v];?Øß"AW?-1CA#E¨“ †p¸tgÍDZX%KŠlaF='‚.`[b[3XpV‹U 32=Ët|˜ÊÊ6¸~»¹çúkŸ´©ÚËüWÕÆotþûÿlŸ(1%7276"'676#"'#7&/'&'&3232654&"m B{€© rh¤úG0wD &8Md£\]»¡P{#¸ý™lÔooÔ›>>t#ôÚþÇO9 Y%Z5H›ž7WSCüñþTÚÜÔÕÛœþV’Õ!!3+53276=!5!²Éüô"YZ¥Í¹Z-,üÃ÷ýÕšûo*”Ãijœ>>~š‘ËþVb!!#+53276=!5!ã-ý}ƒYZ¥Í¹Z-,ý|ƒý•b¨üÜ–Ãijœ>>~ª%ÿÿ%¬P& ²$ÿÿ…ÿã#&DÿÿÅþuNÕ&­2(ÿÿ{þuX{&­2Hÿÿuÿã\ ' ©ù'jª2ÿÿ‰ÿãH2'q<¸ÿÿuÿã\ &2' «õjªÿÿ‰ÿãH2'q<·ÿÿuÿã\P& ²2ÿÿ‰ÿãH&Rÿÿuÿã\ 'jª& ²„2ÿÿ‰ÿãH2'q<Þÿÿ%¬0& ¶<ÿÿhþVö&Š\ ÿl %7276"#7&'&5!5!676#"Ø B{€wD3'þÙß rh¤úF›>þœO9ÂaJ¸ùûwt#ôÚþÇjÿlf{.%7276"'676"'#7&'&=4&#"#3>324 B{€¹zgŸúG1wD3'5ZI9§§!c?…98›>>r.üÎþÈO9ÂaJ¸ëís{åý``>t#ôÚþÇO9ÂaJ¸;>þºþV` ,@ Œ¶Âà  ÔìÄÄ991äôîî990!5!+5326XþÃõ³¥þêZZåûŒÃÓœ}xÿãY12654&"&#"32>32#"&'#5#"323íQ SS ¦QPQRRQPó]=z‹Œz<\o\32#"&'#äQ SS ýZQPPSSPPó]=yŒŒz<\o\G­º JRþü’Ã\ØD%QM((_]q"!ýä ^¬`˜A–7àÐSþ]++œ èL„½8 rM†…ýq;>¼Õ 3!!!!!5! ËþùÑüdþõ ÕýªþiªAª!ÿºÉ#!5!7##'ÍóóËþ-.d'JþuËþ†gÐ[ý„|ªBJ8jýÍýÖýäFÕþ{5.#"3#"'&/&/5632654/&'&54632ÍO S}{\·J‰vh°˜“*L'TrGYí3e2{zD>z†õE¡GIÚÊZ¦9´..QSKJ#œ}¦^R ˜~$š=&[ó5#¾`cY€1!GJ¡¯!Ëþb!;#"'&/&#=!ã-ýj1 “*L4[TrGYí=Zƒý•b¨üË þø~$š=&[ó?œ%7šÕ"#5463!2##326&#v6<0œÀ~'úþÿûÊÊŒœ//&r1Fµ£ãÛÝâý¨þ” “qÕ(!2)#5332654&#32654&+3¦ºåøƒƒ“§þöþùþFžžËë’ƒ”ëï°–ž¨ïëÕÆµ‰žÏ ËÏn•,þ>p}qdü?È{’‰Æ•ÿã¼Õ)533!33##"&'.=)3267>5~ËÊ9FBªjiªCE:àýë  yVWx! AªêýêýªåÁ?;::;>Åâ`m];<<;\l9˜Õ #3#iþ¡ÑµõµÑ+úÕÕú+ÑÕ!!2#.+##5332654&#ãLö¡’N76SËÙ²M{cmËÎÎˉ‘Ž—ÕÞÒ”»77§þhy¡]ý‰w¦ý‰Žƒ{.#"!!##533>32ƒ;zI¬[M ýý¹Üܹ.¿ƒDv6y.*l\¡¤þ<ĤøÛw"$šÿã8{ )32654&#"3>32+3267#"&'.þ> ¤zl˜°¸¸<²€¬Ìüòøˆ’^À\f¼XŠÆ<& +qpepÓº)L¦d_Á¢»Â†y64¸''RR2“{ÿã{0@ŒŒ™¾ÂG Hôìüì221/ìäôìî99053#5#"3232654&#"Z¸¸.™dËéêÊešþˆ……‹‹……ˆÑû¢SW;7Wþ ÖÚÜÔÕÛÚÀÿáWy 0@ Œ Œ™¾ÂG Fôì22üì1/ìäôìî9904&#"326>32#"&'#3•ˆ……‹‹……ˆýã.™dËéêÊeš,¸¸-ÖÚÜÔÕÛÚxSWþÅþëþïþÉWS‹^ÁÿãX $9@Œ  Œ™¾!Œ›G! F%üì22Ä99ôì1/üìäôÄìÆî04&#"326>32#"&'#46;#"–ˆ…†ŠŠ†…ˆýã,›fÊèéËd™.¸³¥Ì¸ZZ/ÖÚÛÕÔÜÚxRXþÉþïþëþÅWS~ÃÓœ}}¸ÿã{0@ Ü<Ôì1@‹À ‹ ÀŒ Œ¾ ™äôìþôîõî0>3 !"&'532654&#"¸JœR&þÚþüPšNH”\®º¼¬`˜@%++þÈþìþìþÈ*,ÁA:àÐÏá;>Ãÿs:{!)47&'&!2.#"63 !"'3254#"´ 90•%QšNI“]­ºcUÃ-þ²RG+>œjiáS,+;7W{ÿã7 &32654&#"%5476;#"#5#"32;mjkookjDGH„8H$#·${P´ÎϳQ{#þTÚÜÔÕÛ ”Ãijœ>>~û‚SW;7WSzÿãW{432!"&'5326=!7!.#"z÷Öð þÚþû[ÃimÀX®¿üã¸^¬…ˆ•^û"þÀþôþíþÇ++·98È·œ°ªzÿãW{?@ I HôìÄôì991@ ‹ Œ ¾¶ÁŒ™ôìôîôôôî9905!54&#"5>3 #"73267z¿®XÀmiÃ[&þàðÖ÷¸•ˆ…¬Z·È89·++þÇþíþôþÀ"Æ¢ª°œÿã³{ )%654'2273;#"&5 '&'&'& 56BLþ+>ç—üwšŒ9P!1„jâþ”cGF:þ“šÖŠÏ>8þœE#Züèu”™aœºÈQ`vþíþ½‘gœ»("ch®V©ÿê({09@ Œ Œ¾2¶2&Œ%!Œ*™2 &.F1üìÔìÔÄÄ1ôìÔìÔìôìÔì0&'&54632&'&#";#"32767#"'&546ÁwA@ôÑQ[\ihWVLŠ”HH‡¦Ÿ–¨Z[­c[[MaZ[Vþ‹Š”_A@^†ž § VJ=+,nQb54"­[\¦m”©ÿê({(<@! ‹ÀŒ#¾)¶) ‹ À Œ™)& )ÜÄÄÔìÔì1ôüüìÔì9ôüýî0#"&'532654&+532654&#"5>32„•þëÿU¶`L¶d­µ©–ž¥ˆ•ŠK­hi·PÒô‚_”m¦·­"#ibQnW=JV§ž†^8ÿê™{B#"&'5327654'&+5327654'&#"56763273;#"'&55c88hh¿@ˆH9DDK‚CE@?qv|f6688h8AANODE<ž[K©ŠO 0ƒA=Ó1_JJm¦\[­"45bQ77,+=J++ § OAfƒ”™10œ`ZÈ¢A°ÿÕ"y( !27654'&+532764&%632#"'$žþ­Sv<;;!‹ˆˆ‹!;yþ±U¡ ÉkbbkË ŸUþíØþ^þA;;LL67šss.­”gŽŽg”®=ÂXŠºþVq^!+53265!5!!5!qþŸ³¥þêZZþþÃõh¤þ(ÃÓœ}}ؤgþ {þH4&05476;#"#"&'5326=#"43#"326íHH†1:hhÎ>†CO‚6xn#{X®ÐЮ÷Ömssngn^ Ãijœ>>~ûÊûƒ‚¶.,¢°}^\:é<ýÛ§ØþbÙÚþH4^ $!"326#"&'5326=#"4763!|þø‡Žˆ‡¸îçL¦Sb C•ˆ,˜mÄêuqÈé9§ØþbÙÚþÝüþü¶.,¢°}^\:ᥟzX˜ %#5!#"!2&'&#"32²œBHXNÊüþÖ,>hh€xpVH²dbbd²®²Œýð">:K¬MrqþfqrfþQk^".5 3 3265â+]ŸÜž^+ þrÚ.$Øý‡ãaËÛ<þTþ³8VA""AV8T¬þrŽú–LE"þÐþñEfj^ ! 5473 33254Ö²þãþѸþrÚ(*Øýöu{q?ñþ²§±òþsýZž;hh?¼þR^332653##"&¼¸lp‚Џ¸2¨r¬¨¨¶ýJ—Ž·«yùôVadáÃ>32#4&#"#5476;#"}2¨r¬¨¸jr€Œ¸ZZ¤ÎºZX `cáäýJ¶—Ž·«ý‡ê”Ãijœ|~ÃþV(>32+5327654&#"#5476;#"}1©r«©X[¥Ì¸[-,jr€Œ¸ZZ¤ÎºZX `cáäý6Ãijœ>>~Ê—Ž·«ý‡ê”Ãijœ|~Ž23#!!!!!5!!5!! ¸¸þâÖbþžnünlþ‚~þâéÍþ ¤þË5¤iÆ ^!#"'&5!5!; ̦ZXþàØXZºjfÆ;ý8~| 2^ !!!!5!! ’þ’nünlþ”^ü¾BXy&;#"&=&#"5>32!5!3267#"'’.H>Øê¤¶./OIN’S)&þÚÞr\F‰JKOUi–“(?œÔÂÆ ;?®<6‰ü§5=>®;7-4 ;#"&=# 5432!5!3#'&#"3ª[YÖ襵>þéö5*þÙßúú¸GN\–|~œÔÂܽöƒüó  „K9 þV  ;#"&5!5![Y×饵þÙß|~œÔ£(þL¨-;#"&5#5!!2#"'&'532654'&+5!¨HH¬»„‘쀺þ·TgOE@óàKOPUC W˜ JJ„ŒXýì–|~œÔÂùþA¨þ$8+lhŠÝò%Ã12–„KJ¦óhj{!%#"&3326532653#5#"&2"hJˆn¨4FP<¨8”8¨¨ d>LfHEÑ!‰ýís{åýðp{åû `LfHEÑ!‰ýís{åýðp{åù×)32+532654&#"#4&#"#3>32ž"iJ‡o¡–º¨SN5FP;¨9JI9§§!c?S,5îHEÑþßýcÂÔœ|~•ís{åýðp{åý^^@;#+²þVM{+532765367632#4&#"ê{ˆ5Dº1DCW¨VV¹\^oA@ÖÀœ01™r¬e22wxèý\žŸž__¤ˆþV{ 4'&#"#3>32;#"'&è./]p@Aµµ2†X¨VV?4ˆ<>²ŸOO__¤ý‡^¬edwxèýH™10œ``A{ !3!#ÝÄþðþ#Ä{üy‡û…‡üy‰ÿãH{  #"%"!&'&!3276Ò÷öêéöߌH?7?HŠýÓ4HŒH4{þÒþâþáþÓ-’m_°°_mýà„OmmOEŒ`!!!!!"'&763#";þ‹dþœ€ý¨ó~~~~ó —KKKK—`ªþí›þ¤¬ŽŽ“hgÏÐhiªÿâ&{.4'&#"3276=332#"'&'#"'&57!2€9P‘ƒHJ|")u) }¦07‰_CC_vD8@jëxZþœq¡osçþÈO+¹¶¶¹+O«ˆžz2ee2zš|·ÿ­ í°‰þVH&/#5!#3!535&'&76767654'&ð˜ð¡_|{_¢ðýhð¬d{{d¬¸E,HH,ýO1HH1o¤¤üu—þâþá–uð¥¥í{–—{¨üÂBnÕÖmBü×HImÖÕnI˜ÿå±^732653#5#"&'˜;zI¬¶¹¹.¿ƒDv6ç.*ØÌ+û¢Ûw"$˜ÿå±732653#5#"&'˜;zI¬¶¹¹.¿ƒDv6ç.*ØÌìùáÛw"$fþV€^;#"&=#"&'532653YZNb¥³.¿ƒDv6;zI¬¶¹}}œÓÃïw"$¼.*ØÌ+jþVƒ{.#"#3>32ƒ;zI¬¶¹¹.¿ƒDv6y.*ØÌü)Ùw"$jþVƒ{;#"&53>32.#"#,,[êþ¥³¹.¿ƒDv6;zI¬[[}?>œÓÃrÙw"$¼.*llÌ 2{476;#"!!5!RR´Ò¼j&$pünhåÔb`œ02˜ýª 2{!!5!4&+532ÈjünnHlºÐ´RRåýªVš`œ`bzW^!#&'&+#!2327654'&#Ô7545®Ã¢?;;a©¹„ÙlkpýõÆw?@@?w 66^þÎq$%þ'^NM¦iŒþ¯++ST**zW^!#!3327673327654'&+ÔjpklÙþ|¹©a;;?¢Ã®545þ(Æw?@@?wÆSŒi¢QP^þ)%$qþÐ^66þ7**TS++¼þV{8.#"#"';#"&=327654'&/&'&54632ØN§[ˆDF20”@ÄRRz|Øhj&"nèþ´¤fdbb‚FF24ª@¬LLàÎfµ?®((**T@%$!*ML‰Z[Ÿ70œÀÖû5-,QK((%$JK‚ž¬}þVT+5326546;#"Ó³¥þêZZ©³ÝÑcMÃÓœ}}¸®™Qg}þVT!+53265!5!!5!546;#"4þŸ³¥þêZZþþÃ=©³ÝÑcMh¤þ(ÃÓœ}}ؤiP¸®™Qgý¥}þVT^;#"&54'&+532Ó'&cÑݳ©--Zêþ¥³Èüßg()™®¸ |@>œÓvþV[!#"327673## 54!3476;#"8³tn!Ê·¿5RµþѾWQî°d%'š3A0Ç›o@`ØÒ®´\V™()g¦þÂ+`!5!4&+532!!Hþ^¢^uÏáϪ+þÕþÂ>`|b“¦Ëý þƒþWž!!;#"&5!5!f¢þ^^uÏáϪþÕ+žþÂû÷|b“¦Ë >ÿãÑ`!533!33##5#"&=)3276ޏ:¸™™¸CYYuÁÇñýÇ>>|•WMĤøþøþ¤þ<¬f21ðç ŸPO_U_ÿâr`#5! 7654'&'5!# '&54767_ºm?B° XXBGd´ìr86þäþ>ŽŽ45w¼¤ÜEio‡ŸÂabž’do?ܤdqnˆëþÜ‘’ä“kmhAw` !+"'&5#5!?27654'&'&UBr86þäáFµRQ›S&(g3XXBO\LÚdqnˆëþÜ``Ö;ý6™12abž’dw7,HŠ`!# #3ŠÄþ¢þ¢Â¤ú¬üT`Â` !# # #33”¸·­¸¸“ë­Á­jü–jü–`üj–HŠ >;#"# #4N”|’lLT2"ÆÄþ¢þ¢ÂÈÈzšH†Tû²lü”fk}3 3#fÙ%.Ùþ]Ë}þ8Èýýó ÂþV`!!;#"&=!5!Õ§ýù;4ˆzýéþ `¨üÛ§™10œÀÖ¨%§ÿ‘*`!#47!5!5!332!'3254#ª™þ–´ýejýL¯<Ûãþ²®FX3<;4¨%“¨üÛ ö½“6[}þLT` 2!"'&'5327654'&+5!5!aj€bVQþÐþè^cdjTÈm¾cd\]¥®®ýejÜ8*mhŠÝò%Ã12KK„KJ¦ó“¨iþLh`$- 76654'&+5!5!2#4'07&#"327ãþ±*öž \^¤®®ýejþeidTQ'd™(— }Ńž¾cþL½û;*1…JJ¦ó“¨þ$8+lg‹qUe¤R8yú*K/KÂ327654'&#"56763 #¾?¿W::f°PONNLQQUŠmlpªËrLb…Ar+¬#}ºªswýtÂ#&'&5476!2&'&#"3ʪpln‰UQQLNONP³c9:VÀüâŒwsªº}#¬+rA…bLrÂ3!"'&'5327674'&#¾ËªplmŠþíUQQLNNOP³c9:VÀôýtwsªº}#¬+rA…bLrÂþJ#476!2&'&#"32767# '&5Ân‰UQQLNONP³c99c³PNONLQQUþí‰n>º}#¬+rA…ûà…Ar+¬#}º_-sB (47632 7 654'&#"47632"'&_ššØÔššþÑþOþ̵edÆdeŠdeã"!/."!B^!"5ÔœœÔØþÐ0ÙccÆŠffff‰.""""./B!!Ñ} -@¶ ¶Â¶  F!üì2ÔìÔì1/ìôìÔì9032654&#32654&#%!2#!›Ý]_Z^áÒUTTVþe²Àb`sÑÁþcþ˜i?\dÂþèU?.V©”ˆi}œuš¨°ÿÖ"y+";#"3$''"'&5467.5476322s9@< Љ‰Š <@7uTxþìV“­ddjbbjdd­–Ø6=š76NJ@6¾¢s—þxþ¨Â>WV”gŽŽg”WV6l0%#5!#"'&76325476;#"#&'&#"32Ît£:˜Ô{}|Û3H ><ˆ¾N½?7†KJJK†‚²Œýð2Ÿ   Ø^`œ03—”j&BrqþfqrA{ 3!3#!#ÊÊÊýãÊ{þA¿û…ýîÊþV3#3## 54!3!5#"3276š¸¸¸´¾5QµþÐÂþÂ3µw{j&éËû ›p?`ÝÍÑû3A0wþLZ` ## 33ZºýÜìRý–ð8ºþL—þ TýÝ#õÜ{3!!õÊý{ü/ª#þV|)%#"'&76325476;#"#276'&"»,BC]®nmmn®]CB,==ˆ¾O¹þ)??Û????Û?¨d01¢¢¢¢10dÆÖ``œ01™ùÚ¤þjtsst–tssÂ$327654'&#"56763 3###53¾?¿W::f°PONNLQQUŠmlpªççÊåärLb…Ar+¬#}ºªswÔ¤þì¤Â$5&'&5476!2&'&#";3###5Hªpln‰UQQLNONP°f::W¿>ååÊç¸Ôwsªº}#¬+rA…bLrþš¤þì¤ÿãš #26&"3!!!+5#"32¨d¯ee¯n þaŸýõ^!;8N€¡¡€N8:úþjçç–ç+^þL¨üÛ“¨a31DD10MüûþL´ C3276'&#"%#5#"'&76323!2#"'&'5327654'&+5!22XW3223WX2´o#55JzLMMLzJ55#o ö?M;31¶¨9;<@3xAr;<78chþqúþjtsst–tss_ü3¨d01¢¢¢¢10d^þL¨þ$8*mhŠÝò%Ã12KK„KJ¦ó6ÿ‘™ ,326&"!5!332+#47'#5#"3233254#©d¯ee¯þs þai$„ˆÈ\Ø\#jKy™™yKj#n0 h*5úþjçç–çüþ“¨üÛ ö½3.#"#"'&'#"&5#5333#;532654'&/.54632/e6RR;Y%w02”‚6:8>q€aQQoãã-Ek>v;NTj&g[‡{=l?®((TT@I!,KL‰œ¶!&ŸÒ`>þÂý ‰NM55YQK($)$•‚ž¬™þV4%.!5476;#"+53276=#"'&5#53!3‰A<“‚„J==ˆ5%N¡;=ee¥þçUžþÂN¶ZV™()gû)×_`œ02˜PMÔ`>úü ý Š&'µÿpž.6@3632&'&#"632#"'47&'#"&5#533254#"&57#3uäZ310.///0l;;;2v³È1+\!r€aQQþ$-WO=ÕMTÝ-Ežþ‚#¬+qrþfr°ö½9DhT"2€ŸÒ`>úô9Kiø›ý ‰N‡þVH3+5327654&#"####53546;#";67632G11l™Œ?KJYho´njjhqij;/´m(56Ft<;¤ýHÖ``œ01™²Ÿž¾¤ý‡Ñü/ÑN»«™Phc®e22wxæÿãë%7&'&#"#"'&'#367632327654'&/&'&¾;>ABgf$&n/•<>][£ALODŠŠKT›LDCýëKEJIa54%"…0€92?®)TT?&$!,KL‰›\[&ý:ŠMVþ·ýÎ3-+RK(#*$JAÛô 3!!!+ÛŠýùýqvŠóþL¨üÛ“ÍüúÿâB 333# #333# #t‘‰‘t¹ˆ˜™ˆ¹t‘‰‘t¹ˆ˜™ˆUþéþéýýþ=þéþéýýþ­B!#!#!#!#³ýk³ýkUþXþûrþXþû²þJ 4&+53232653#„þÛ9O%5ˆzºpŠŠc×Ä™aœÀÖýBþþ¤yùìbÉÅþV "32653;#"'&'5#"4'&+532¾”Zgo0>*m/2OŠë?*mbÀþþ¤yûŽ”fœ\gç¬É×Ä™10œÀÖAœ @ ÔÜ32tNN^luu)qJy}þ…wYYk\þžgþ«88†Aš3>32#4&#"#5476;#"µ)qJy}tNN^lu43r “B¬98†‚þ†wYXj\þž1Sw66WUæ­ë 3+532653#wtgr,B0ttý‚xlX6Vr‚™œ8.#"#3>327.bjtt%uT ¯ qkþ¶sa97™Œ832653#5#"&'š.bjtt%uT ü qkJýa97Q­€32653;#"'&=#5#"&'Q.biuB-r33$vS ü qkJýÕH VX66x a970œ¡!+33276?3327654'&+¬CGDD‰ôuj=%%(f{n!!!þ×|K((((K|éN;[--sþ÷?¡«5ÿ/.œB 333# #t‘‰‘t¹ˆ˜™ˆþéþéýýþ­À+5326?33Š1]O\D05 þâ{ÜÝ{bpEW(K/iþêÿÿìtëfÉÿÿÏÇ-ÿÿÏÇ-ÿÿðÂáÁšßïò452654DŽà@XX@rPPPPï=>X@?X=>POæPPßïò"'&4763"3òtPNNPt@XX@ïPPæOP>=X?@X>^Žsõ327654'&#"567632#ý(y6$$>q31210336­WEDGkM@*7K$@ ` XFh_@Cþ“^Žsõ#&'&547632&'&#"3ÓkGDFV­63301213q>$$6yMþAmC@_hFX ` @$K7*@)î¨f7@ º¹ Ôì91ôì290K° TK°T[X½ÿÀ@878Y3#'#“ö‹µ´‹fþˆõõ)î¨f7@ º¹ Ôì91ô<ì90K° TK°T[X½ÿÀ@878Y373ö‹´µ‹öîxõõþˆ$ç­@ÔÌ1@ÔÄ0#¬ˆýÕ+ÿÿ=b“öŠ$þÑ­ü@ÔÌ1@ÔÄ0%#¬ˆüýÕ+ÿÿ=þ›”ÿ/·¶#!!h²e³³þ›ÙJý'þ¶¶Ø#!h²eÙJÿÿßþò#cþÿÿßþò#dþ>ÿ”U 533##5#5–àà–àuàà–àà–ˆßJu!5!Jþ>Âß–ÿÿ/)¢HŒÿÿDÎVá{ W²È ¸@ È P{PÔìôì1Ôìôì0K° TK° T[X½ÿÀ@878YK° TX½@ÿÀ878Y#"&546324&#"326{ŸtsŸŸstŸ{X@@WW@@Xôs  ssŸŸs?XW@AWX¤þu"³  ¸@  |ÔìÄÔÌ1/ÔüÄ90!33267#"&546w-+76 >&Dzs5=X..… W]0i²7»@!  ÌÌ PPÔìÔì99991Ô<üÔ<ì99990K° TK° T[X½ÿÀ@878YK°TX½@ÿÀ878Y@?       ]'.#"#>3232673#"&d9!&$|f['@%9! '$}f['@Z7JQ†”!7JQ†”ÿÿXîf‘þ¡Þs%3;!"'&5þ¡k¸&&iúþñ¯WRý–d¤”™10œ`ZÈ¢%«¬ '&73733256µ²òþö¶úˆ¿¸ˆþ¼‹‡€Üù´‡Àñ/ààþŠ®˜MMŒVœ| ;#"&5#5!„88ˆ’hrº.EGWwl:Q[œv/).#"#"&'532654'&/.54632P1j8WV>](}24›‰8{D@}=RX o)k`‚@q a//$)*+MWfk2-*SIXaœ¿ #'#37±ÿ ‰Î͉úˆ¼»þÏþ¾ööH+ßß^œs#&'&547632&'&#"3ÓkGDFV­63301213q>$$6y[þAmC@_hFX ` @$K7*@,¥X!!5!þyЈú¨,¥X!!5!3þñˆœˆ4ú¨,¥X3#!5ˆˆþðhú¨hˆ,¥X3#!5ˆˆþ¼œú¨4ˆ,¥X%3!5ˆý‡ˆÐú¨ˆÿÿÓÇüÿÿþ DÿÁ«ÿÿîöfCÿÿÛîºfvÿÿ)î¨fgÿÿ²7w=b“ö¶¶ÔÌ1Ôì0!!=Výªö”ÿÿ»Ñ 3/)¢H ¹ @ ¹PPÔìÜì1ô<Ôì0332673#"&/w `WU`w ž‘žHLJJLDÎ@ ÞÝaÔì1ôì03#ÍÍÌÿÿ?F‘j™ò8Æ2#567654#"56Jæ24”C1xZ@Vƪ@$C!Xl05^ ƒÿÿVá{uXîf%@º¹ÔÜÔÌ991ô<ì203#3#ªà‰ ³ø‡fþˆxþˆÿÿ)î¨fh"#ªˆªþD¼ÿÿVîvª'“Ì“ÿ4Òîf#!#„͇ø¾‰ßfþˆxþˆxÿÿ/)¢Ü'tÌs/)¢H >32#.#"/ ž‘ž w`UW` )LJJLÕÇ" #3Äï»’ÇYïÂâÁ#55#53áñppñÃþÿ{‰þðÂáÁ53#3"ðñppñÃþþ†{Ûîæf3# Æqšfþˆÿÿyý¸Xÿ0CbøÊÿÿyý¸Xÿ0vÿžøÊœýÔþë53#5#5Lˆˆ°þ:±þ±ˆÌýþë#33Tˆˆ°ý²±걈s†^p!5!#Öþžêˆèˆþ£ü.q532654&'3#"&£=X..… W]0ihw-+76 >&Dzs5úþ ÖÿÁ "&463"Ö]]3GGþlb€¸bG23Gbý²Lþë3!5353›±þ±ˆþ:ˆˆ±^ý²Hþë#5!##±걈þcˆˆ±_ýIþë #53533##±±ˆ±±ˆý²ˆ±±ˆ±sþc^þë5!têþcˆˆöþV€ %+53276=YZ¥Í¹Z-,€”Ãijœ>>~”¶þVÛ€ 73;#"'&5¶¹,-Z¹Í¥ZY€”~>>œjiÃþcÎÿ/@ÞaÔì1Ôì03#ÍÍÑÌ?þd’ÿ.@ ÞaaÔüÔì1Ô<ì203#%3#@ÊʈÊÊÒÊÊÊþ DÿÁ µ ÔÌÌÌ1µ  ÔÌÌÌ0#"&546324&#"326D]\\]bG33FF33Gþæ\€€\\\2GF34FG˜ýâåÿ;@ÔÌ1ÔÌ03#öï»’Åþ§‹þu)8³  º@ |ÔìÔÌÄ1/öþÅ90@ IYiy‰™]!#"&'532654&'¼85xv-W,"K/:=,,>i0Y[ ƒ0.W=ÿÿ®þu#v $ýs­ÿ/#¬ˆÑþD¼Uýå|ÿ/#5!#|‰þë‰Ñþ¶ÂÂJÎþ9ÿX#"4533273273"h;tÚv gfv ifvÜtþ‹R––•–þâ)þ¨ÿ“@ º Ôì91Ô<ì90373ö‹´µ‹öþxõõþˆ)þ¨ÿ“@ º Ôì91Ôì2903#'#“ö‹µ´‹mþˆõõ/þ¢ÿ8 ¹ @ ¹PPÔìÜì1ô<Ôì0332673#"&/w `WU`w ž‘žÈLJJL/þ¢ÿ: #.#"#>32¢w `WU`w ž‘žþLJJLþ²ÿ5†@!  ÌÌ PPÔìÔì99991Ô<üÔ<ì99990@?       ]'.#"#>3232673#"&d9!&$|f['@%9! '$}f['@þX7JQ†”!7JQ†”=þ›”ÿ/¶¶ÔÌ1Üì0!!>VýªÑ”ÿÿþÑþmBÿÿþÑÿ]ÿÿXìy aÄ&h!5&ühh¤¤ÄÑh5!ÑĤ¤/ÿ –¼'‹\ ]`LÐMÿº°'ogDdFFJúþ ÖÿÁ 26544#ú3GG3]]þlG32Gb¸€Uþ€|ÿÊ3!53U‰‰þ€JÂÂþ¶Uý |ÿ/!!|ýÙžþëÑýÚ&þbþêÎþ9ÿX632#&#"#&'"#72h54'&' ’ˆRJ 6"”†RH Ç0PQn +0PQn ÿÿËÑ &33ÿÿÿïÂâÁ™ÿÿDÏtÿð¾7"#4%62#&% nþâþô~vüäéåüvþó®Žð<<ðŽìtëf3ìA¾ntòþæþVåH%#åA¾nHþòþVúÿ¤ #"=3;ú„X•3þV·—¤hÿÿ“þáò'ÿÿÛîºfvÿÿ?FºØ&jÍrÿÿ¬f&ØÍþ>ÿÿé/å`yÿÿÿNf&ÜÍýDÿÿþíHf&ÞÍýÿÿÿf&àÍýDÿÿÿµÿã\f&æÍýÚÿÿþp¬f&ëÍü•ÿÿÿ·f&ïÍýóÿÿ6ÏØ&ÿÎÿÿ%¬Õ$ÿÿ¦qÕ%ÿÿ×sÕJ%¬Õ1´/0ôä1´´—/ìä0@%%%%ìììì% !3ªþ¾þ¾†ûyÉõªyû‡ªÕÿÿÅNÕ(ÿÿœ‘Õ=ÿÿ‰HÕ+uÿã\ð6@ 26 25üìÄüìIJ€]1@—–—± —™ôìôìôì0!5!#"32#"320þqY‡š™‡‡™š‡Ó÷ýýö÷üý÷ǪˆIþæþ·þ¸þæIþzþ€~ˆ‡€þ€ÿÿÉÕ,ÿÿ‰ÉÕ.%¬Õ0´/0ôä1³´/<ä0@%%%%ìììì3#3#öÑÉõÉÑþÕú+#ÿÿVyÕ0ÿÿ‹FÕ1‰HÕ (·1  Ô<Äô<Ä1@ —ˆ —± — /ìôìôì0!5!5!!5HüAôý×)ËüAÕªªüòªý9ªªÿÿuÿã\ð2ÿÿ‰HÕVÿÿÅuÕ3xmÕ <µ 1 Ô<ä21@ —ˆ—/ì2ôì20@% %%%ìììì !!5 5!!þ9"ü Æþ:õüÞëý¿ªªA@ªªÿÿ/¢Õ7ÿÿ%¬Õ<uZÕ&/M@"2  &,2(0Ô<<ÜìÄ2ü<<Ä2Üì1@&(——ˆ '—  — /ü<Ü<ì2ôü<Ü<ì203!535&'&547675#5!67654'&'Ͱa|{a±“þ“±a{{b°“ñ“L+CC+LËL*DD*+v[sëësZtªªtZsëës[vªªü£*DžD*ýÉ7*DžD*ÿÿ¾Õ;uZÕ9@  Ô<ÔìÄü<ÄÔì1@ —  —ˆ/ä22ü<Ü<ì2067633!535&'&3ÍI.KË{b°“þ“°b{ËL-IÕü["W‘DWþ©þx¿— ÖªªÖ —¿ˆWþ©þ¼‘W"¥J‡´@@qqro prol ôìäôìäää991@ ø÷ù/<î2öî0353&5323!5654#"Jõ{n ðò!o{øþ1x†´šš³†x¬† ¼7oþ’þȼþß…¬¬LIÞæ þ÷æÞþ·L¬ÿÿÉN' ©uàÿÿ%¬N' ©uëÿÿFÿç•f&÷Íÿÿ©ÿê(f&ûÍÿÿÃþVf&ýÍÿÿ6Ïf&ÿÍÿÿ3iØ& ÎFÿç•y *'&'&3273;#"'&''&'&767þ,-±b=MJMU…Hi;c¤Í( #) Xn^T).\-Ærv~¡ çìo‰·ÜikÕ*þ½%ý¡Û1)0œT*XmY*–œ)‡——þVa!%#54'$Q¹Í«þ‚«Qã þ0kêþûEþçþšþìb6þÑþ=q'ª0½ þà þVm`&+532 3#Ü-^1FÂAÿF¿þ[¾D~ž°ýS]û þVª‰ÿãH" 4"32654&%&'&54632&'&#"76hŒŒþY(>íÅf2—BFUR I<' )iëy|öêéö{ßÚÖÕÛÛÕÖÚL (=\ˆ¤ $­+.! ”—þâþáþÓ-—&ÿÿ©ÿê({™þR&%#457654'&# !5!ø„OTJP£E* :ýµLýìfüþ.,KOxsPWKL,#%5,*3àe¹¹þaþZþiÃþV{.@ J  Fôì2üì1@  Œ¾ Âà /ääôì90#4&#"#3>32¹jq‹¸¸1¨s«©¶û `—Ž·«ý‡`¨`cá‰ÿãHÜ9@ D >ôì2üì21@ ¶ŒŒ›™äôìÄì¶ï¿@]ì0&'&#"!32762#"ƒ?HŒH?5ýË@HŒH@þëé÷öêéöö<⇙™‡â¸à‰šš‰8þwþþŠþy‡vs‰6Ï`@ ÔÌüÌ1@ ¶Â¶/ìôì0;#"'&'#5Ä"$lYo´RQÒ`ý+‘.0œ`bÔ;ÿÿì²`úD† # #'&#5‚ÃþÆþ~ÃëJ/š1Feú›<üÄ2ÆžÿÿÃþTž`wtB`!367676'&'3ÊþªÆ!xdLjºE.*ˆ±{`üT|¬p5dwƒY|rNįät¢þR8&%#457654'&# 4%$47#5! „OTJP£E* 9ý’MþèÜÐý‹ýÇKOxsPWKL,#%5,*áèp$ÅR¹¹þÝ¿ ª&Üþ¿ÿÿ‰ÿãH{RPÿÙž`!#3267#"&5!##P117,#J%q\þT´`¸ýPH?… ƒ°œüX¨¾þVT{.@ G  Fôì2üì1@ ŒŒ¾™ Ãääôìî906#"&'#764&#"326„èttèÊf™,¹nƒ䇅†ŠŠ†…‡{žþêþïþÉWSýÉÆ<†ý´ÖÚÛÕÔÜÚÃþR%{$%#457654'&# !2.#"ì„OTJP£E* :þüþÛ%QšNI“]­º]^KOxsPWKL,#%5,*8(8*,ÁA:àÐÑno‰ÿãk` 2@  D>ôìôìij991@ Œ¶Â™äôì2ì0"32654'&7'"763!a‡FHŒ¬<ÝΗr×éö{sñ§PSÕÕÛÛ’ù-¢þæä§- ™¸Ÿ2^!@  ÔÌüÄÌ1@ Œ ¶/ìôì20%;#"'&5!5!!æ$lYo´RRþ˜’þ’Ì0œ`bÔ¶¶ýã‘3i`%27676'&'3%"'&5#5!t–Z;jºF-*€…þú´RRÒ"$œ³v»f€wƒZ{sšáËÓ`bÔ;ý+‘.0LþV…h )O@ '#*° KQXÜÔYìÔ´0'€']<Äü<Ô´0€]ì1@'ŒŒ ¾™Ã*ìä2ô<ì2ì20"27654'&'2##"'&7673A\VMMG*ŠwÁ·Ç|~~hšA1LLNeË‘ýRh]ßÝc[„þÙþæ–˜þn‘™›,„m£Ks¾Øeg¯.YþVx`#&+53 3;# îŽþ÷¿t·/œ1FC ¿þ‹¶/1FþÿúzýÖ å~ž°þ„,üôþ~žƒþVN`%67653#&'&533Ä?>T¹‚y·y‚¹T>?·Œ@W¦ýxØ‘‡þo‘‡‘؈ý¦W@ÔFÿãŒ`&#"&'#"'&37676376' ƒ2KºU‚€XºK2ƒ¾~)@V"ª"V@)~`þøý¿{¹gLHk¹{Aþíþáâ>‘oRyþ‡Ro‘>âÿÿ6Ï&ÿjÿÿ3i& jÿÿ‰ÿãHf&Íÿÿ3if& ÍÿÿFÿãŒf&Í–ÿé$ # 76'&%$'&763 '7676] N“¬ŽI5í|Àuÿþítf €†ÒM2þŽCð6R¥¯6WpA{‰¡¥zýúþ‰á Ʋ—ÊÔþ‚Íÿ þýi¡˜õtÿéR$ $6'&'&'&7!2#"'&3276‹5Jg¬“NéþÝnð-R«‡€ €‰äÁŸ• ÃNr^ydPp¿w¦¡‰{Aª K¤û~ÔÈþþ}ÆÕÕÈëþSjœ~"§Õ#4''&5676'&­qO*Ë*d\txL—Jsåo@z8 vVOþú¥ývŠ´~*+4ª0þr‰51_”Tÿÿþp§f&Íü•ÿÿ"§N& ©umþVdÕ'#&'&7673567654'&'ĸ³h„„]¾¸²i……^½V5RR*a¸W4QQ(þV“y–§vaþŸx—þâþò§x¥GnÕ¼‡Fü½CImÖ¹ŠD9˜` !32376&7%&# 67#5!’ý°'T±ª¯Q0þäî'(íþç 0A_¨ýþ«Óþ+Tý‘÷ýß3þÌ ¸4þ‘`/&'&7'&7676'&#"56776327'5½ö!½`È=`ˆ[+Ž9[R~ö!*½`È=`ˆ[+Ž9[&͘­7 ðœclþ÷|Y‘DT„|Ë©hlà="îŒpl |Y‘DT„|Ë©hlýàfMZ  uþV\ð #"32&'&32‰‡š™‡‡™šÿ³_{÷üý÷|^µ ’þæþ·þ¸þæýÏ–"”¿ˆ‡€þ€þyþ|•"þj‰þVH{ "32654&#&'& hŒŒ1¸¨`{öÒ÷{_ßÚÖÕÛÛÕÖÚü þm“w–.þÒþâþá–v‹þRLÕ#"32#457654'&#"'&76)çÚMb°zYTJP£E* 9êŸ{Ÿ‹2e+w˜þÍþÎþÐTOxsPWKL,#%5,*Ëžnͱª›þR)`#!"#457654'&#"76))þ›ÁI]]_b…NTJP£E* 9»þÛ“Š eÄUlÔÑnoJOxsPWKL,#%5,*8(ˆÿÿéXÕ)þV#!47632.#"!!#"&'53276®ˆ`©1c3$R,x:KAþ¿‹b­9f.1d0W@R‚ Žd¤>QoþÉý?’¥s¤!K_`ÿüÕ7"'&76'&52ãn ê'BƒæQ_šý¬'BƒæQ_‡þ[~ý,`*l#½FR¶Úþ‘`*l#½FR„M #!3Mþç¸âý&¸âpüÆMý]!þVšð!#56#'0#0?&'&ªbT›B×ÀàáîŽ9[@[½`È7"7þÜ>Ž9[@[þã™þ÷|"Oš Šz:6hlà0%þÁ[Ml |"Ošþ÷Šz:6hlà0%?[M¾þVT{ 7636#"&')! $&#"32¾n×èttèÊf™,¨þhþÕ‡…†ŠŠ†…<†žþêþïþÉWSþsªÚ)¬ÚÛÕÔÜÿÿÃÿã%{FÿÿºþVMuÿã\ð&'&#"!3276 32† 5Dš™C6 >ý¿BC™šD@Ö÷þö÷üý÷qßopÞªþÕˆ†Oþzþ€~ˆ‡€þ€¢ÿã {!&'&#"!!32?# '&76!2 %%cj·f_¥ý[_f·€MJOhkþôœœ en('® c\©©\c§œœ(œœ ¢ÿã {"056763 !"/532767!5!&'&#"¢'(ne œœþôkhOJM€·f_ý[¥_f·jc%®£ œœýØœœ§c\©©\c ÿÿÉÕ ÿÿ¾þVTÀÿÿ‹ÿã1ð&VyÕ ! !###V»þö™þõºÕþ{…ú+'þ` úÙþVO` !!###Ìιâ™ã¹`þ{…û ²þ` ú¤UþVT{##5#537636#"&'!&#"32w¹iinƒÕèttèÊf™,á;‡…†ŠŠ†…þÆppª¬>„žþêþïþÉWSþ㪓¬ÚÛÕÔÜ‹ÿã1ð7532#"5>3 !"&‹I©XÅÄÄÅVªJM¢[?þÃþá[¢5Ï=@0230@=Ï))þgþ’þþj)ÿÿ‹ÿã1ð&0y‹ÿÿ‹ÿã1ð'yÿc4ÿÿÅNk' ¬uLÿÿÅNN' ©8uLÿ¾þ*o×/32654&#"##5!!676767632#"'4=N qjqjW.EËö~þC%0"@• X Uki÷Sþá•Ë —Ž*\«þo-ªªýó* % T päþFþèwuÿÿ×sk' ªHuJ‹ÿã1ðL@!—±³²—³²—–™21 0üì2ü2Ì1äôìôìîöîüî±I±IPX³@8Y0327# !2&#"!^À½¼–š°þáþÃ?°š˜¾¾£s•äþÖ}ÏR–oo™RÏ}þôþÿªÿÿ‹ÿãJð6ÿÿÉÕ,ÿÿÉN&= ©u´+1ÿÿmÿã¼Õ-ÿíÇÕ%326&+32+##526!Z}y^þþϬÊìŠv¦Ž•þý¨âþHã+úþÆý÷Wª"ÇÕ%32654&+!#3!332#!Z}x_ºþuºº‹º³wgþþ¦Ž‚Œ•ý)Çý9Õýœdý¨qcêÜãÿ¾o×"676767632#4&#"##5!%0"@• X UËjqjW.EËö~-ýó* % T päþΗŽ*\«þo-ªªÿÿ‰Ék' ªuQÿÿ‹Fk' ¬uOÿÿhm& ±Z‰þ¾HÕ 33!3!#‰Ë)Ëþv«ÕúÕ+ú+þ¾Bÿÿ%¬Õ$¦qÕ2@— —ˆ—  21 0üì2üìÄ91/Ììôìì032654&#!3)!qï°–ž¨ÌýEë{e5……þùþF†ÉýÝ{’‰fþ>¿d¡ËghÕÿÿ¦qÕ%×sÕ¶14üìì1´—ˆ/ôì03!!לý/ÕªúÕ!þ¾°Õ0@  ÔìÜìÔìÜì1@ —ˆ—/Ì2ì22ôì0%3#!#32!!3!7yªüŪM0'TËþB /ѪþBþ¾ìL Òªþ×àþáþáÿÿÅNÕ(ÂÕx@   Ü<ü<À91@ B´ /<<ì2290KSX@ % %ííY@ I:I:I:I:I:I:· <<<<33 ##'# 3 »Ïþá0ÅÞY»YÞÅ0þáÏÕý­Sý¦ü…Šºþ0кýv{Zý­ÿÿ‰ÿã7ð‹FÕ <@  B´ 10 üìüì991/<ì2990KSXÉÉY"33!#‹ÃøÃþÕû3Íú+Íû3ÿÿ‹Fm& ±Oÿÿ‰ÉÕ.FÕ$@  ÔÜìÔì1@ —— ˆ/<ôìì0#526!#ãËýŠv.Ë+úþ»þWªú++ÿÿVyÕ0ÿÿ‰HÕ+ÿÿuÿã\ð2‰HÕ@ 10üìüì1µ—ˆ/<ôì0!#!#‰¿Ëý×ËÕú++úÕÿÿÅuÕ3ÿÿ‹ÿã1ð&ÿÿ/¢Õ7hÕ?@ B—™ˆÔÄÄ1ä2ôì0KSX@%%%%ììììY+532767673 3å;E,LE\”mQ.-"þXÙ74Õ©žoJ+'¬/.M *5üÂ>BÕg@2  2 Ô<<Ôìü<<Ôì1@— ˆ—/Ü<ì2ôÜ<ì20° KT°KT[°KT[°KT[X¿! ÿÀ @868Y3#5&%>54&'¥II¥Ë ¶¶þõËúǸ Ë¥II¥<{ÜÇÈÜz þªþÿþüþ¬ ˜˜ WS ûáÜÈÇÜÿÿ¾Õ;Pþ¾•Õ $@ˆ —  ÔìÔìÜì1/ì2Ìì2033!33#PË)ˆªÕúÕ+úÕþB‰DÕ @— ˆ   0üìÔì21/ì2Üì0332673##"&‰Ënmuz[ËËv–~·¯Ôþ£PExú+’:Är`Õ &@   ÔìÜìÜì1@ ˆ—/ì2ü<<0)33333`üºàºàºÕúÕ+úÕ+<þ¾°Õ/@   ÔìÜìÜüÜì1@  ˆ —/Ìì22ü<<03333333#<ºàºàº†ªÕúÕ+úÕ+úÕþB uÕ*@ 2 ÔÜì2/ì1@ —± ¶ ˆ— /ìôìôì0%32654&+!5!32#ŒŠÊþûÏŠûþþú¦“……”ý)+ªý¨âÝÛãAnÕ ,@  2Ôì2/ìÜì1@ — ±—ˆ/<ä2ìôì0!3%327654&+332#£Ëü[fN+ôììüìÔÄ1@Œ"¶#¶(Œ ¾™+äôìÜìÔìî0! 3 632#"6/&4767676%67…þãþäŒý˜xÞÞ÷öêéû$[§€3#F#3ðbJÅ/°þPÕÛ{þÒþáþâþÓ3-§wR•I¹UA Ž  +tšÑ` -@¶ ¶Â¶  F!üì2ÔìÔì1/ìôìÔì9032654&#32654&#%!2#!‰ï_eUkóäUTTVþeªÈ_c…mÑÁþcþ“pPO^ÇþÏUCCV–špoˆuš¨ñ`@ ¶ÂÜìÄ1/üì0#!¹¸ðÊü6`–iþâh`0@  ÔìÜìÔìÜì1@ ¶ ¶/Ì2ì22ôì0%3#!#325!!3ïy–ý-–C7 ì¹þ„"–þLþâ´Æd ü64þòd÷!ÿÿ{ÿãX{H;—`x@  Ü<ü<À91@ B /<<ì2290KSX@  ííY@ I:I:I:I:I:I:· <<<<33##'#3¨ÿÇﳿh¨h¿³ïÇÿ`þP°þlý4±þ¡_±ýðÌ”þPÿÿ©ÿê({Ã` =@ F üì2Ôì21@B /<ì2990KSX@ ééY #33#bþ¸¸縸)ü×`ü×)û ÿÿÃH&Œoÿÿì²`ú`"@ ÔÜìÔì1@¶Â ¶ /<ìôì0!#!+53265 ¸þ_—º7#U^`û Êõ½þÑé–v®=›` N@B      Üì2Üì21/<Äì290KSX@  ííííY3 3###=¸ww¸¸þå¸þå¸`ýM³û åþáýÃ` $@¶   F üì2Ôì21/<ä2Ôì0!#3!3#bþ¸¸縸ýý`þ9Çû ÿÿ‰ÿãH{RÃ`@¶ÂFüìÔì1/<ôì0!#!#bþ¸W¸Êü6`û ÿÿ¾þVT{SÿÿÃÿã%{Fá`@ ¶ÂÜüÌÌ1/üü<0#!5!иþÉ&Êü6Ê––ÿÿhþV`\cþVec@    Ô<<Ôìü<54&xjjxÜÉÇÞ¸ÞÇÉܸ¸xjjÖ™õõ¢œ ++ ™þgþõþÕþÕþõþs€ü©¢õõ™ÿÿL…`[|þâ^` $@ ¶  ÜìÔìÜì1/ì2Ìì20%#!3!3^–ü´¸渖þL`ü6Êü6Ãb!@   FüìÔì21¶¶  /ì2Üì0332673##"&øknXrE¸¸5Œ‹ŒÈóoþ‘d]'õûžÒ+£}U` $@ ¶   ÜìÜìÜì1/ì2ü<Ä0)33333Uü(¨ð¨ð¨`ü6Êü6ÊPþâ¸`-@   ÜìÜìÜüÜì1@  ¶/Ìì2ü<Ä0)333333#"ü.¨ð¨ð¨–`ü6Êü6Êü6þLŒ`)@  ÔÜì2/ì1@ ¶ ¶ ¶ /ìôìÔì0%32654&+#5!!2#Îø|†‰yø¸ø°ÑíèÖœXZZZýþÊ–þ;§¨¨¤hi` +@   Ôì2/ìÜì1@ ¶¶ /<ä2ìÔì0!3%32654&+332#±¸üµS|†‰yS¶¶[ÑíèÖ`û šY[[[ýü`þ;§¨¨¤Ã8`*@¶ ¶     Füì2Üì91/äìÔì0%32654&+3!2#{ø€€ø¸¸ÐíçÖ™YZ^Xýþ`þ;§¨¨¤Ãÿã%{K@  Ü<Ôì2Ä1@‹À‹ÀŒ ¶Œ¾™ äôìÜîþôîõî± I±IPX³ @8Y07532767!5!&'&#"5>3 !"&ÃA˜`¬^S ýâE^¬]“INšQ%“’þüR9¿>;qd°‰Rp:AÁ,*þÈþìþ윜+Nÿã{ ?@#Œ¾ Œ™¶   Üì2Ô2ìÔì1/äÜîäîôì904&#"726332#"'##3ÍpLLqjUUeý9ŽÒßæš™Óޏ¸?ÆÙôÁÁêúþÜþÓþÒþçíþ`¨Ø`B@  ÜÔìÔì291@ B ¶¶Â /<ôìÔì90KSX·  ííY;#".5463!##“r7äã8rë5ªÜ–¸ÁþþaUmVüŒß‚§¨šû Çþ9ÿÿ{ÿãXm&lCâÿÿ{ÿãX¿&lj#¯#þVT533!!>32564&#"##¾¸Àþ@1¨|°¶úíy­j{Š‹¸Ñ´þLþs`cæßþ´þŽ.¥˜·«þûÑÿÿ m&jvQÃÿã%{L@ ‹À‹ÀŒ¶Œ ¾™  F ôÄ2ü2Ä1äôìÜîþôîõî±I±IPX³@8Y0%# '&!2.#"%!3267%JRþü’“%QšNI“]­]Eýâ S^¬`˜A9++œœ8*,ÁA:pS‰°dq;>ÿÿÕÿã{Vÿÿ²DLÿÿ²D&ój´ +1ÿÿºþVM Ë`%2+##+53265!327ÐÐ ½åRC¼'#U^5Ÿíè™iþ—™Êõ½þÑ€i–v®Žþ;§þ°¤Až`%254+32+!#3!3 ÐÐ Ÿí褽þ”¨¨l¨™µ´þ—§þ°¤ýý`þ9Ç#9533!!>32#4&#"##¾¸Àþ@1¨s«©¹jq‹¸Ñ´þLþs`cáäþ¾B—Ž·«þûÑÿÿì²m&qv0ÿÿÃm&oC@ÿÿhþVH&ŒzÃþâ` 33!3!#øç¸þ —`ü6Êû þâ uÕ%326&+32#!!5!53!ŒŠŠûþþúþ¬þûÊq¦“ ”zÔâÝÛãQ¤àऌ533!!!2#!3264&+ø¸©þWÑíèÖþH¸ø|†‰yøÍ“´þL“þΧþ°¤ÍüÏX´Zÿÿuÿã\ðaÿÿ‰ÿãH{×s@—ˆ14üìüÌ1/ôìÌ03!3!×ò§ý/Õ2þ$úÕòš@ ¶ÂÜìÜÌ1/üìÌ0#!3¹¸8¹¨üX`:þUsÕ 3!!!!##U‚œý/#ýÝË‚èíªþ½ªüÂ>ñ` !#53!!!!‚‚ðýÈ þ`ôª¸þöªþ ×þfsÕ#!!!2+5327654&#¢Ëœý/7ºqohfäL>†87||Çý9ÕªþFwrîþÎþô|zªKKÂ"ŸžþVR`#!!3 +5327654'&#¹¸ðýÈúHRRQµÁ¬n!&&1†çþ`¸þÏGQåþòÖ``œ07“ª )þ¾ÂÕ3 3333###'0þáÏ»Ïþáö:ªÞY»YÞ{Zý­Sý­Sý¦ý/þBŠºþ0кýv;þâ®`33333###';ïÇÿ¨ÿÇïÍM–4¿h¨h¿Ì”þP°þP°þlýÊþL±þ¡_±ýðÿÿ‰þu7ð&­·Nÿÿ©þu({&­½n‰þ¾ÉÕ%3###33VrÔþšËËwíý»ªþBì¤ý¸Õýh˜ýžìþâ²`%3###33,†Äþb‰¾¾ãàþG¸þ*Bþ?`þ/ÑþZþ¾³Õ%3##!#3!3ÞÕÕËý×ËË)˪þBÇý9Õýœdbþâ|`%3##!#3!3¹Ãøþ¸¸縸þ*ùþ`þC½q¹Õ 33!!!#!qºl"þ˜ºþ”ÕýœdªúÕÇý9}¯` 33!!!#!}¨šðþ¸¨þf`þ9Ç–ü6ýýÿÿ‹þu1ð&­dXÿÿÃþu%{&­hx/þ¾¢Õ %3##!5!!ÏÕÕËþ+sþ-ªþB+ªªáþâ` %3##!5!!ÐÃøþÉ&þɸþ*®²²ÿÿ%¬Õ<\þVt`3 3#\ÃIIÃþTÀ`ü”lû²þD¼%¬Õ3 3!!#!5!5%×lkÙþ! þöËþøÕým“üÉPªþ\¤ªP\þVt`3 33##5#535\ÃIIÃþTÈÈÀÈÈ`ü”lû²5–ññ–5þ¾¿Õ%3## # 3 3XfÔþ’þuÚôþPÙHNÙþAªþBƒý}¾ýÍ3ýBLþâ†`%3## # 3 3úŒÄþ¸þ¹Õ¸þoÌ)'Ïþo¸þ*Áþ?Hþk•ýèŒG×#4&#"#36?6?2GËjqjW.EËË#20@•0 X Uôþ Ú—Ž*\«þc×ýU'% T pÿÿÃKÿÿÉÕ,ÿÿÂm& ±Mÿÿ;—H&Œm‰þf¸Õ32+5327654&+#33s·tohfäL>†87||—wËËwíqwrîþÎþô|zªKKÂ"Ÿžý¸Õýh˜ìþVm`3 +5327654'&+#33j:HRRQµÁ¬n!&&1†Ý'¾¾ãàwGQåþòÖ``œ07“ª )&þ?`þ/щþfHÕ%+532765!#3!3HhgãL>†87ý×ËË)ËhþòzzªKKÂ_ý9ÕýœdÃþV`+532765!#3!3RQµÁ¬n!&þ¸¸ç¸Ö``œ07“ þ`þC½Œþ¾G× %"'&'&5332767653##|#3/@•0 X TËjqjW.FËËÕª$'% T päÑþI—Ž*\«zú)þ¾ìÃþâb%6#"&53326=3##c<1Ts«©¹jq‹¸¸Ã¸~3$2áä þõ—Ž·«ÎûžþâÖÇ#¸ùáÿÿ%¬m& ±G´+@ _PO@/ ]1ÿÿ…ÿã#H&Œgÿÿ%¬N&G ©u´ +@p0? /]1ÿÿ…ÿã#&jgÿÿœÕˆÿÿ)ÿã°{¨ÿÿÅNm& ±Lÿÿ{ÿãXH&Œlÿÿuÿã\ðQÿÿzÿãW{ÿÿÿuÿã\N' ©uÉÿÿzÿãW&jÊÿÿÂN' ©uMÿÿ;—&jmÿÿ‰ÿã7N' ©ÿïuNÿÿ©ÿê(&jñnÿÿÿä·Õyÿÿ}þLT`8ÿÿ‹F0& ¶OÿÿÃö&Šoÿÿ‹FN' ©uOÿÿÃ&joÿÿuÿã\N&U ©u´ +@p0? /]1ÿÿ‰ÿãH&uj´+@ pO@]1ÿÿuÿã\ð+ÿÿ‰ÿãH{ÿÿuÿã\N' ©uÙÿÿ‰ÿãH&jÚÿÿ‹ÿã1N' ©ÿßudÿÿÃÿã%&jì„ÿÿh0& ¶ZÿÿhþVö&ŠzÿÿhN' ©uZÿÿhþV&jzÿÿhk& ³ZÿÿhþVf&‘zÿÿ‰DN' ©u^ÿÿÃ&j~×þ¾sÕ %3##!!¢ÕÕËœý/ªþBÕªþâñ` %3##!!¹Ãøðýȸþ*`¸ÿÿAnN' ©ubÿÿhi&j‚ÿÿ‰ÿã7ðRÿÿ©ÿê({ûÿÿuþò\ð4ÿÿ‰þRwTÿÿÑÕ:ÿÿÑ`ZwÿÄZÕ'>53.'#".53327.'S5 Ê#"? F,X,p¨n®y@Ê:hVL4=_Ê3_,@ Jûô\’9 ž2D;x·| û¶,\L06k2€Pð#54.#"!!#4>2*Ê:iUVh:üúÊ@y®Ü®y@kß,[K00K[,þ#ªþ= |¶x::x¶|U|ð&##!".54>324.#"3!|}Êþój­zB?x­on¯yAÊ:jUVh88hV mªþ=Ã>ƒËÊ€;;€Êþ‘µ7kT46b‡¢‡a66›ð4>23##4.#"#6@y®Ü®y@»»Ê:iUVh:Ê |¶x::x¶|þaªþ=J,[K00K[,߀ÿãPÕ".53!!32>=3*@y®Ü®y@Êüú:hVUi:ÊÉ|·x;;x·| þ‹ªýÕ,\L00L\,ß`qð)!!332>54."#54>2q'@TXX$güCË32vvnU3%Mv¢vN%ËPмØÀT^­™€cA ªK¡1\‚¡¼i°n00n°¬ï”BB”ïxYÕ %!!3!!C‹üªËüꪪÕþ‹ª€Pò#54.#"!!4>2*Ê:iUVh:ü0@y®Ü®y@kß,\L00L\,ü`ª |·x;;x·|+ÿã¦ð*:"#4>323##".4>;54.32>5#"…¸yHÄEƒ½xw¼ƒEƒƒ2Y{IHzY22YzHŠF°"2#"4#Š$3!L1j«yüs¦“Ü’IK•Þ“4¯þãk¥q;3l¨ê­r8{­nüÚ¨m?AkP@Uÿã|Õ&33##".54>3!"32>55Ê}}Ay¯no­x?Bz­j þóVh88hVUj:Õþ‹ªþBÊ;HÖØ‘KªBq“¢”pC4Tk7“=Õ#54.#"#3>32=Ê:iUVh:ÊÊ6†On®y@îß,\L00L\,ý3ÕþP&*;x·|š6Õ3!!šËÑüdÕúÕª]ÿãtÕ2>53".5##3ˆ $=`: ºI‚Ò…M·ºº`ý1Kf>>fKÏýIw«o55o«wüOÕþ‹6ÿãšð)A33>32.#"#".5467#2>54.+6·4/s†–R<]QN-k¹Oa”8¡û­[4Sz¤jŸÍw./-Šý%Hq¦sK* &J¼… +%Õõ?eG% ×F6:4T¡ïžSŒvT0d¯î‰€çeþ4?yl[B%#?Wgu=@ykX@$aë“=Õ!##".5332>53=Ê6†On®y@Ê:hVUi:ʯ%*;x·|ý3,\L00L\,X[ÿÊvÕ%.54676$73vüÞ4[C'h{uŸµîÙk˵˜n>7<–Ì@/7B(=gb²V;þ‰3qqm`M-_ÿÐrð.9.'#".4>32>."#54>2"3267.p^QeLœ#H$XÍpHxU//UxHgÀX2:%Mv¢vN%ËPмØÀTýB=IG?L>D‹©þÍ|nƒf6a-S^&JnqO)MBaé´n10n°¬ï”BA“ïýkI‚HME23!4.#"#6@y®Ü®y@»þ{:iUVh:Ê |¶x::x¶|üžªJ,[K00K[,ßVzð!"!".54676736$33!zmï‚ÙüöPâ•£„þþ®¯¾üzsž3D3y-^6ÿã›Õ!#".5332>5…»@y®Ü®y@Ê:hVUi:Õªüž|·x;;x·| û¶,\L00L\,@ÿã‘ð9 .532>54.#!5!2>54&"#4>32‘<}ÂþôÀ|;Ò!Hr sI#(MqIý°PB];~ìyÒAv¥ed§xC4L.Dc@¼_«‚MMƒ¬`AqU1.Ql>?fF&ª*GZ0vpq{[”i88g‘Z;hS<G`s6ÿã›Õ".5#5!32>=3›@y®Ü®y@»…:hVUi:ÊÉ|·x;;x·|bªû¶,\L00L\,ß`ÿãqÕ/2>=3".54>7'.+532'.#"3&Nw¢uM$ËPмØÀTKu‹AZ8n%-{3~Hûô (-/HuSÒü¯n20n¯€­î”BE–í©¥òN(ªÕÔg N“=ò!#4.#"#4>2=Ê:iUVh:Ê@y®Ü®y@J,\L00L\,û¶ |·x;;x·|`ÿÆqð'4."#54>2#532>ž&Nw¢uM$ËPмØÀT$>PXZ(èüûî ^.HuSü¯n20n°¬ï”BE–í©q¶hD!cÒEÔeNAð##54>32#4.ǾVi9¾>†Ð“Ó7¾9iGü”l Ip•X*9‚ØœVVœØ‚ü\•O•vO`pð)D4.#".54>32!!33267>4.#"32>†1N7VvM*0Nr™c”Ê{6DoLgüCË(^E/ %H>LpJ%CR¿2R91AGH 8{vlQ0e¬â~yåÁ‘%ªL¢.+4^êdªzE 5GOP%)=(4[{G(*añ6›ð4>23##4.#"#6@y®Ü®y@»»Ê:iUVh:Ê |¶x::x¶|þaªþ=J,[K00K[,û¶“ÿã=Õ332>53".5“Ê:hVUi:Ê@y®Ü®y@Õû¶,\L00L\,Jûô|·x;;x·|!¯Õ332>533!#".5!Ê:hVUi:ÊäþR6†On®y@`þ¨,\L00L\,ÍúÕª¯%*;x·|iÿãgð=332>54.54>32#4.#"#".iÒ0UtDAmN,Bk‰‰kB5o¨ts¬q8Ò<]A@]=+IbnsnbI+A~¹w{ĈH¿KuO)&IjEH`B.0:Y_Q‘n@@n‘Q4W>"!;S25K8)%&1A[zR`¥yDE}¯“=ò#54.#"#4>2=Ê:iUVh:Ê@y®Ü®y@kß,\L00L\,û¶ |·x;;x·|@ÿã‘ðD"32>4.'2 .532>54.#!5!.54>Ú^66^IB]96¦j¨u=4L.Dc@;}ÁþôÁ};Ò Gs¦sG (LpIý® 1!=u§L&AU`YC))CY`V@Ê:i”Y;fQ:Ibq9_¬ƒNMƒ¬`AqU13Vq>:_D%ª9DHY“j:‡JÕ!!#RøýËÕþ‹¯üOÕFŠÕ +3>4.'.>753#Ia;;aHÁIb::bIÁ‡®e&'e­‡Á‡®f((f®‡Á³/g¥ð©k23k¨ð¥g/ûëW›ÜÜœVzzVœÜþêÝœW3ð.4>2#".'!!#5#5"2>54.ò7s²ö±r66r±{ JJBÔý,Ê¿äœg>@i˜d;<£•_¡vBDv¢^`¢wC *þº¯ôô¯©(Hf|gK*'HhA>fJÿÿuÿã\ð2GÿãŠÕ)3>#"&'.=33"&54>;5"4.#2>Š/P?ESb;l¨7>73y˜)Jg=2yjH˜'F_7D„jAñ 1O@;jV>,MÿÿyîXfCb²è*#4>7632#".'332>54.#"Pž7dV=BC„h@"Cb@*QG5 ¥6& 4G)20‚}ñs³ƒV$MvR3YB&0K6 %*?*  üñ3!¼ŒÌñ#©zgÿåi`'%#".5332653327653#5#"2"hKD];¨ HO<¨JI§§!c?–rHE.qÀ“‰ýw“9zæýñ78=?äû `32¹jq‚ŠªýV¸¸1¨s¬¨¶ôô—޶¬þþV ¨abàIþV‡w %#".54>32533## 6& &-˜fe¡p<32Ê””¹jq‚Џ¸1¨s¬¨¶ýÙþV`—޶¬ý‡`¨abà¤ÿã-3!!326=3#5#"&¤¸Ñý/kpƒ‰¹¹1¨r­§¨lþLýח޶¬ëý0¨adàIþV‡w%#".54>32533! 6& &-˜fe¡p<32¹jq‚Šªüž¸1¨s¬¨¶ýJ¶—޶¬ül ¨abàBþVŽ{+;.#"#3>323##".54>32>7#",U}RMsL'¸¸"IUd=f§wEeh Gfz>HsR,5Wq<%A3$Ä2("5/f¡q<*Zeûë ª:L-S™Ú†ƒ«f)'JiANsK%þ< IvV)=(5)Iÿã‡%!"2>5".54>3!33&þí;`F& BeŠfC ¹6q¯ð­o42n­{¹¨Ñ:l›ae p;32¹jq‚Џ¸1¨s¬¨¶—޶¬ûݾý¤abàåGþVŠ`!!3ÿ‹ý½¸þå hþVh+327653#5#".=4'&#"#3>32¼JI§§!c?H\3JI§§!c?H\3ßñ78=?äû `7%32>54.'#"EZ!%9wµöµv9=iŒPþñÏ”jAþCmPOmD5.™NmD`ª2onf*zΗUU—Îz‡ËR³!b—Òý·S•oAAo•S3omf*Bq—¼þV332653##"&5¼¸kpƒ‰¹¹1¨r­§û”—޶¬{ùöRadàåÿÿ½Kú«ÿâ%/D#5#".547.546?3327>32>=4.'D)ZwG¸?Uh;Y‹`3Ķ9T83Ç9 $2" 8þC9W=MlC6_K9cI*,± 5~’¤[ýÿ¬,J6Bv¦eÁ`›-?N( ?OU010$ $üªEvV17]{DV3ywl'5{‰•rþV_{3!4&#"#3>32Ê•þ²jq‚Џ¸1¨s¬¨¶ü/`—޶¬ý‡`¨abàŸÿã2*=2.#"#5#".547#53>32>=4.'Å 86jd](xÀ‡I¸?Qf>\ˆ[-86‘Ò2}–­þ'CX0Kg?-bšm18— *MnD O†·rý¬¨,H4@qšZ’+Œ^ uAûŸXuF54.#"'>32 ýt*D07".546?3267Ïý¾#=/"?p½ŠM  þå+A,:ˆ“‹€4 ElL<{7`q,`/'8% qZ×Õ¾A'gþVi`'%#".5332653327653##"2"hKD];¨ HO<¨JI§§!c?–rHE.qÀ“‰ýw“9zæýñ78=?äùö 54.54>32%">54.):_y~y_: ýt&C1RH $7@7$IxšPf­}Fþ*+VD*-6-2?ƒkD)KiëOš‘‰}p_N+9 BI;=@#5ZRLQY4O†`65g•—4N3!ADFLR,QO=‚‰‘K?`B!„M{$"#3>32!!5>54.;>`@!¸¸1¢ycŽZ+7R5)ýý?\<=cÛ4ZzFýs`¬dcF}®gS‚v9„4myŠPIa8ÿÿ½ÿã^XúfþVj3326533!#"&f¸kpƒ‰¹¬þ›1¨r­§¨¸ýH—޶¬/øÓ‘Radàhÿåi{,!#4'&#"#5#".53327653>32i¨JI §!c?G[4¨JI§!c?G[4ñ78=€eý^`32¹jq‚Џ¸1¨s¬¨¶ýJ¶—޶¬ûÝ ¨abàÿÿþH4{J"ù×`%!!3±&ý"¸`hþVi,!#4'&#"##".53327653>32i¨JI §!c?G[4¨JI§!c?G[4ñ78=€eû´ 32#"&&#"32ˆòý¹xx¹.™de¡p<;p¡fg—‡‰‰‡†þ»ccTVR™ÛŠ‡Ù—QV®ÙÚþTÚÿÿ‰ÿãH{R(þV¨$+6##".'73".54>;2"4.#2>¨8z˸K€nb-{!GP]8b›n::oŸf¯ŠÂ{9ýH}t{yK€c^M!C‚ךUþ[¥7P2€,J5.-PpCHpM'þGH‰È™+OHBRýåZŒ`2üÒBu¡Hÿãˆ3326533!5#"&H¸kpƒ‰¹èþ_1¨r­§¨lû”—޶¬{ü/¨adàÿÒR%3#3#ÿÓÓÓÓþþRþd¤mƒ$7'dƒ„ƒþü‚ƒ?9¤8>1ÿÙ–"$/#4'&'3767653653#"''##53— ra{ .r &q,bS !¿žöþ/”ÓÛ#12jÿî{¢Í@E#$]|0q«!<"üÉ5üÇDƒúAÛb1ÿÙ–)*5"32767#"'&54767&'&'&76'##53|LAV:218UG&/=8O6-N@?_F?D(7-"ŽGqžöþ/”ÓÛ#)^ %$ \*$@.!* n F?\KH* #TH#ûÃ5üÇDƒúAÛbZw %3#%3#3#%3#ô´þ˜´´þ ´´” ý^ úúúúúúúìÑ %3#%3#%3#3#%3#´´þ¶´´þ¶´´þ…´´Ì þ& úúúúúúúúúìÖûì!#53©Ó¤R¬@þÀdýmñ 327654'+53367657M593¯pQf$h?FA@6b !©eþ¿I(R[2*Öû #53 3#©Ó¤RÓÓÓ%¬@þÀý-þÚ÷ð$%#5754&'./.54632.#"Ë'/XZH߸gÁ^a³Olƒ39ZZ8þþþ“{4<5/VV‰LŸÂ89¼CFnY1^5YV‚eš²U-Þ"%56767&'&54767632&767²/SD4Ž35gcbnZdF31`È9:H:ZÍçU°!LOTAKv?=¹0ps2#¹ÿÿ½þ &U~ÿÿþóÑ[&r}ÿrýä Ä3# ¸¸ùìÿÿEþȰ' ¼,þÈ ËÿÿÞÿÆó' ½q„pÿÿEÿì° ' ½¸Š ËÿÿEÿì°' ¾¤Š ËÿÿXþ ­f' ¼— [Xþ ­f$$27'&5767&XÃ$ÄþÚ×àJÁÔ–úþ”©ƒÔ`‰eŸ‡_'@5š ´¼÷‰^£v¸bĘÞße4)ÿÿXþ ­°' ¼Ê[èÿÚèj%67654'&'3#"'532T®!þµ­ ¸€’ÿÿÿÌþD¶' ¼U _ÿ$þ˜î?%#"'&7673327676'4/37653323#"'&'Œ &!UNBAE3I0<¨^yM\dsÕè‚ቬ+;H2zm¥^\꜑#P}g£x&þªŸ™R" C~m8(ÿÿÿ$þ˜°' ¾c aÿþÀ =%327654'&#"67632+"'&5#"'&5473767654'&'3H€Ij($@GgLÄK1Žš¬ZX¸Ú%5,0.3cM‚[|d¬h<2=B%A ! ª ¸.DF-%!mN€<±RNy¾mK¯ƒ+VZ˼¬Ìœ‘2);jˆh>ÔH7(ÿÿÿþÀM' ¼O·c ¤ %327654'&#"!#53367632,ŒIj($?GhKˆýûàà¸L1Žš«[W¸~¸.DF-%!mNþظ\û€<±RNy¾mKÿÿ ¤' ¼Yezþ ·**!27# '&54767&'&54763"32767XwSÁÔ–úþ[¦bWqM3/XÌ|üÃt]0-.()žþþïìѱžv¸c¼oɱeƒ8‚ÐM©A4hKE¸•ƒ¹uÿÿzþ ·F' ¼}°gÿìå¸#5!ù¸¸ÿÿÿ¶ÿ¤ŒÌ' ¼ü6 Óÿÿþ}t' ½S~ ÌÿÉŸ!=#"'5327654'&'&767663#'&54733276{J&P DfXRNB8D-<9wLR! Xn*' X &/.Q&+üÑ8±üOþš\ˆ79L¸K5:,]-#4CþÈK%63#"'&&733276u¸2le–¢cwò@¸A¦(IiTcI9(jû–þzGœ1H*VŠ\ss~B")‚þTó.327654'&'&#"&#4763&547632#XzL,5;(.;Dn2KÈxAZ¢M\MO¶bxX²'*9:X DD(ÁNOþì­f7*(”„?$S§-8’APÿÿ6þµ`' ¼êÊ ÕÞÿÆóÞ"327654'&'2#"'&5476B!799[]KB{˜Æ¶“¥„`Q§%T*WE{R,,9.UMAx³ |”ÈKU#JïµN¹Lþ 3† &"4'&!5 767&'&'&547632á?,3/ÀV%.¬-º¾þjs¡à1v-‹3tÓ9>YHƒÄ9!$7+(¸;þôþÚ®.TV¸Lh‹+b‰ÙZ3[ŽfþóÑ5%#"'$47332767654'&'&767632#4'&y„à±]HþÛ?¸B¤KSxlkA;"„b^M`72¸'#}[7 Ã0&huqƒc“-##NG".*3:,ƒ–=2IB‰="9), g:^Mÿÿþ Ñ' ½rþ rDºŒš5%5%DHý¸Hªn‚nþŽn‚nDºŒý&567&'&54763233"/#"'&5332767654&#"t$!lD?I'8 .4LT^s7Z $08ž " ,d$* 9^W4'6O'&n=NVš)qaKî" %DþŒÿö5%%5%DHý¸Hþn‚nnn‚nDºŒª5%DHºn‚nD¹Œý/&'&54763233"'&'#5276767654'&#"’ lD?I'8" +EÉ“™‹V  ,º 8_W4'6O -n=*{nmp" %DþèŒÿØ5%DHþèn‚n0Ë ô('&54737676537654'3'&x!9EO)"a 2=`KG g&ZG„M'DA2omb}8T"¨RY$6Å­s9It…6X !Váz 4&"2>#"&4632X€XX€Xzžtr  rtô?XW@AWX³æ  æŸ¹ÐÁ732767#"&' gC*6:*kWZZB6"˜D¦6{S )L}@"F€ÿÿ½¿wŽÿÿ½þ ÿÄŽøÚ\îv4373Š‚‚ŒÄîFÃÃþºúÂÖ¼3#úÜܼú–< !#'3<´&1›ÄyI ©Ü!nþÝþ”›š8#'337673#"í ´&1›ÆCR´z6 ´*bôoajr›þ©Ü!n›˜•UPymþú†L%#'37676537653#"'ä ´&1›Ä/(0H´/<´(Fœ„!34.5WY¾þ9©Ü!nr|> @2¦Þ%,*ÊþÏ;l>3 ìÿìä *"2767#"'&54767&'&'&76`ygˆ\NNY‡p0.VþhG ”ŽhR¤cÏplþ¶?¸AËOXj<9U9iÊDGTOAŽÑþÂ7.?#¢›ou\N/ b Š\^ˆxHÿÿ ÿ§a8' Ǫœÿ½“å&6F('&5473327&'&5476&'5#"'767654'&#"%327654'&ÝþÜCv¸-(;G--0M,QÛÜ;(J¯ƒš$"':AGb 41~!$@€K5:,+  iEN@TSZ '¹C´ÖÙ49g=qlä@H=.%4-+#%v¼%'Šr.C!0B7,gŒ`áo†6ÿµoU%m—¯`m!´3/AbM3))´I˜·áÿÿ~R‡ÿÿ~Rˆÿÿ¢0‰>ÿëd{*>@ #% +ÜìÌÌÜ<ÌÌ/ì1@™%+<ôÌÜÌ@ (Œ!¾,ü<ìÌÜÌ0%&76'&&76'&#"547#"543263 #4#"??BL??B¢ÆæôÊÊ‘,L½–¸â‰WôBA?>BA?>üÃÍÉÊpпQQþ¾üÇ9ªŽlÿÝ®Œ,"2"54767$32632&#"# '4%7654‚€€DÒ¼»—åþ˜¶þãçJÖPžŠ†i?3Ìkþ]´²ÖþÈKM?o€”ä‰abþ©íu;\SfŽÕa‘ùÆŽ:F‚½78UØyÿìPŒ8327&'"'&#"%47&76$#&67 #"'632Y60I616þ®*, å!¿¸©±›*:ú9«ÌÌþu`þ0'"/Ü€6OÓÙþàþÖý¿A·¸K¥¥ %[9.ȵöþÛŒ!463 #"&'7325#'&&7'6÷¢Ýe›ÌÖt ½!y¯‚×Ñ×CBB¦quýôýþùðÐ Ñóßh!Ï ACBB|ÿÿUš )"32654&24''&5432#5476n$ % *ú|{¸eÈÙÚô6þÄÏL¸j` %"%:yxþÙý~)ŽR¦·Àh•††KKª>ÜaþÉ‚ 9"32654&&5456767$ 3276320! 54-6546$ % #ÒåvÊÉþŠþû©dz]#x—†°.þ¤þ>åþâr>>$o %"%þìÑ…}@þ¼Ö~Y9pe·DØóþµQcFÓøâlWNn©-7V¼sÿï\• ,2654&'&! 3%$4567&7'7×$!% ‚/@¸þþ¢¦l´À~.ZA“¤ $! $ýŒ®¸?ýÁý´=‘Qmê.°ºu½G4 ¡{ÿãV{,@ /üÌÜÌ/ì1@ Œ¾™<ôÌÜÌüü0%"32544$#"54$76f@@@øþÊþËçëÚÅ)ë@@@@ëÉÃþPßÈÈŽÇyxÌüÇ•ÿâo¡ *%"32654&"#" #"5323272#4#"€$ % äzw6Õûòƒ^"$J…ò¸7fñ %"%ú&áþPÄÚÒ–Wþàþ©ü¶0Ûþàþ>{#$"2"22#"5#&567663 #4#"&€€þ퀀¦ñÚÓ!§³‘7y‹ž¸ô{^Ü€¦€ýݹÃãI¾²edÕmúÛ%£‹jÿãh{'>@ $/ü<ÌÜÌ@ )ÜìÜì1@Œ"™)<ôì@ &Œ ¾)ü<ìÌÜÌ0&7'64323254#4%$7"6CBCþôÊØþª²ü¤bRþ¬þ°ØÖBCACK±­ÊàÔØ¼Jþûüjeý·þ­h0šKÿãTŒ 24#"53265$54767653!"'#€@>¸z]Uþèâî]x˜¸þ´®TrÙs€@ü0eœgÌÝÛýu©±/üÑþ²ss}ÿïT|"247&76% 3%$©€€þÔ¶·åíþì%<¸þ þî€ýÒÚÄ&¶Ä¼—þѨÌ'´ýLþB}ÿïT"247&76! 3%$©€€þÔ¶·åíþì%<¸þ þî€ýÒÚÄ&¶Ä¼—þѨË'hû˜þBcÿïõ J"32654&"32654&+&'#"'&5432'3253765&7465&'7„$ % ý’$ & àcge…~PLÒØñfЏrtóгJwT˜\Uú &"$ %"%ûöIJTOšbßÅÇþo;„„4þË‹‚̨јP6A^g[Ãoþ¤PIcÿïb$0+&'#"'&5432'32537653"32654&b\U{cge…~PLÒØñfЏrt¸üÔ$ & ,¤PIIJTOšbßÅÇþo;„„4þË‹‚èýå %"%eÿïl} ,"32654&2537653%&'# 47&76b$ $ 0n¸uh¸þàigeþÞ˜ŠäíþÖÒ %"%ü³§4þË®¥/üÑþÀIJ=ð¦%žùÛþª§eÿïl ,"32654&2537653%&'# 47&76b$ $ 0n¸uh¸þàigeþÞ˜ŠäíþÖÒ %"%ü³§4þ˯¥èûþÀIJ=ð¦%žùÛþª§ÿã``3323!"'#"543225c¸½Ð¸þxð)3¶Æœ)`ý,þíÔüÅþ¾88œ–{‹sÿï\ ,2654&'&! 3%$4567&7'7×$!% ‚/@¸þþ¢¦l´À~.ZA“¤ $! $ýŒ®¸Úü&ý´=‘Qmê.°ºu½G4 ¡dÿïmŒ +"32654&&! ! &%$&7676=$ $ Wþ½ýó6¸t±Óþ©máþ2þ§ßÒàJŽÛX $ $è8$Ü{¼Šžþþš²{ÌÑN&aÿïpŒ .%"32654&%&'&'&7!2765!"'676F% $ þôèW‹D ãÏúNèbfPþÆå'·Gø!$ $•þ‰ýÔúÝT·Öë‰þ®¨rJco<ùoÿåb{"326! %&$'423 54! P@@<þô)½ôþ"ðþÜåÙFþÌþéT€€ÎYþ×ý¸þÙœÓ×=IØÄÌÕbÿï"œ 2:%"32654&%!$76! 6'&'7%&'&'&7!276 54! H& $ JFþêþ òŽr cž€²þôèXŠD âÎûNèbfPþ¤tþŒþ¶ø!$ $=™üéš1T„v® ’—ýÃúÝT·Öë‰þÑEmMdÿè½™ 6"327$"327$7&76365+&7632676#4#"€A?‘€A?îþ`‚ŒƾºßṦ¢5@V÷¸C?/@@@L@@@üE>©/™µ²}ÌþŸ¶µ ·©cbþºü©WZýšþ³wÿïjŒ %-"32654&7$%&'&763 54\$ % ôþùúþ ʪ†Üí=A8)SUþÄþÀB<S %"$Ð36þÑýŒûH9ª×ØG)#¯$67œšŸUÿïÚØ 6"32654&$'&%$76!232'&#"%$'&762$ % TþÀýþžˆ\oEh@”Mó‡qKUÒPæýðþìˆnà×^™‹ %"%þùþÃ+DçüYl0þ•yP^d6QþÁþqt^}ßÖ]F0ÿ&©¡$"2''&'$! '&5"32?6*€€Ê+=x¥‚×þâ ˆÓÔ#esZŒ¯hàþá €û™†N)=‰»“mÎØÍÍÃdĽþÏÿÿ[ÿåd€'ÇÑúÉÇÑýuûŠÿ“ ! &7623$54'74"mþþ¶Ãåñ#!AVЍýB8?þÿ¨kÙØP$U.FŠŒ~>=!{ ##"2#"5324#j·¸ÿ¤=Úåá¦;C>{þjýËVÁÇÇ®þ‰nnÿÿüÅ!r&È×û/Sì~i! ! !5 74! $þ&þ>þºþ˜%»~?>þÂþÁ~»ÅSæi! ! 3!= 74! %þ&>Ôý©þºþ˜%»~?>þÂwJ„~»ÅSì~i! ! !5 74! #5$þ&þ>þºþ˜Þî%»~?>þÂþÁ~»ÅNÜÜSæi! ! 3!= 74! #5%þ&>Ôý©þºþ˜Ýî%»~?>þÂwJ„~»ÅTÜÜÏý3‡ÿ²"36654'#"5432¿‚AA\(D³ªeN[̼þÏo[$žºN[‹uÖxýŽ™ÿ¯"325"547&5423253,ró>Jêm‚ž„²,þW’s> [yu?{EBXFþºÃEŒ '656%"'&76! 4"3Œ¨ŠVþ¥A!. Ùå{x9üá’f>.`h>4È‚A?×~= h‚\$…kb8:;-F¡_Zkf2)Iàˆ 53533##5JØŽØØŽ¸ŽØØŽØØÿÿÿðáÑP–ö;r 432#"324–ÔÐÔЄLT¾´´È 3z! 473! 4'$33þ1þ=P¾U½þܵ~iïþÉibcWþ·OÖJf¡3‚ž4! %56'&53!! 4þ<þ1ƒ£µ~¡k¼þïþñ  ýà!«TŠx½Y9¹vþwsþ•þknþWa!%! %674#"&5! % %aþ þlÕ·‰._‹z-³þ¾þ¶FH+þ,ÔÍS©Ž‹.+RLo þÛ¤TnþµBþ½þÀ7þWš !,6752363 ! 54+"&$54+"32Ý(TþÞX[P<ªfþ¦þªI+yhÊZþËtÔ•Gwº™á, ÈÆbbþ+þê]þÄmþLþÿȧVÔñ¶÷þè þW3! 473! 5 &5 3þIþ%¼$þ&>°8– þw’js…þûñ¤ ÞoeK…rþdžþW2'! 673! =4+5374# #&5! 2þ4þ:iÀp íIIâáþü-¡<±žåí-þ„˜]mxRþößbóŒðóÊXxR~Xþ{Ñ\+þþž2 ! 75&7!  4'"62þ5þ8ÈÈTW\F¹þëþõ ;¨º¯øþùIJ:éQþ½›U-þ\pþþ˜!ÔÖÚ7š %#65+"! 5!2363 6#&32šï¢Ô„!SþËþ‡}’GJtAýªFW´¥¬HCþ¢§®Bu¶Üþæccýyi‘þï½þá 2#! #&! 2ð’ÉþüþæÆ”îÒÃ#þ¥Ècþ þæþôÏZìžþY4! 473! =+53254!5 4þCþ(p­bîAAäþZZþõþw§‹fq€þæü2˜Ææšþ€Ð11þØ þW2 #&$'6?! &65lþí_¾$þ³^M>p ùÌÆvŸ\ˆþ½þYþ1x°Oh_[ ‚Ëþ)eµœ¨uGž4! !234!#5!  ! 4þEþ%ËÄDþä軣˼ýâïþ  }í˜>>&þ†ýT—þ‰þ‚Ÿ2û! )!"363! %2þ2þ:MÎþ#@¸͹þêþï$ýÜê¶[°þÚ€þ gþ…þ„7š ##654#"#4+"#&=!2363 š¼³³™K@ BM”ËÂÇ{hIF`€ÆìÚÀÏ×ÏþëÏäþüÖÀáìfØhhþ& 4!! 473! !#53274%$534þDþ'e¯[þì?R×þéþܬïWºèÚþ&²·Z~“þßIJ‡È•!6°G))þûË=iŸþY32! 3! 5 '%5%3þ0þ>»'þMÝýñhþ˜”þkoã ¨4>>HS2>+3ö‹|'! %!5!$! 3#3%! ! 5)54!  þIþ8Äþïþ<̳rrrþäþïþú ýéþ÷þò¶þ±Of¡kQþ¯Ø”¡²ÎÉÓcÖØÃ7þXš!,!"'#!52'4#&3$5!23634+"32šþÍ~ þ³· Mas€þÂ1·D>¶3½ˆLI§v–þjt˜þ|Žç ²½þÁÙ”xðŒ‘‘þuþ®¡¯§þƒÓkþYf!! %$54#"'! ! 4'7fýõþGD˜µ¥ `Uþ¯þÈ6I@šbþY§srg¼Ÿ8A:þ¨ÔƒMþîþÜ){6\l¡þY4(3! 4%7%#"'#% 3! ¡­#þù«þ>¹U&»þ;þ3þýÌ¿0ý±?âþõþ7YãþûþpŒnþWc$!6=3! 47$$5! nöþ–þڞòþŒþªïþd¿?;þÅþÀk¹þHþë©užµŒLLþæ8çTWJÿ&)ü* ÿy¤54&#"'675&%'% ït_‚C‚Ctìä§þy‘þ`þÜ^q²|‡ytJf­Iµ8ý=\ þÛ£Êb*“#2®ã 3#3#3##ÀÀѺºþ/½½ã°½®è®•õ;2"4;%"4#"32lÐÕѹëþþFí|pux$þïþãLµRQžÂ´ºÉ)ÿã°{ B32654&#"26=%!>54&#"5>32>32+3267#"&'#"&º1©xYS\JþM®LþëepO27„Gn• '…aœ£È¿uc^8„>M„<[|%!„Y®‘¤HZqYa…þq4—…ˆ+#"¡33¬)+RNPP¬¤«³Xx€+'¨#!?@=Bí2©ÿê({0#"'&'532654'&+532654'&#"567632wA@ôÑQ[\ihWVLŠ”HH‡¦Ÿ–¨Z[­c[[MaZ[Vþ‹Š”A@^†ž § VJ=+,nQb54"­[\¦m”²þPDd %!!5!!!#53öþ)þ“’þ“þḸÑü¾ý½éÿãº{ 6326="326&!54&#"5>32>32#"&'#"&±PVWMZfRPhgPPüTëcpPƒ/;}Jb“04€T½ªª½Y€/%‚W¯Í & ‘‡‰ž+¨ïþÝ®§§þyT£53¬+)CBDAþìýþì>A>Aí2‰/H{  #4&#"‰öÒ÷ÃŒ/.þÒþâÖÚÚÖˆÿãG/  33265Göþ.÷ÃŒ/þâþÒ.ÖÚÚÖ+¦[%!5!2654&#!5!#áýJ¶—Ž·«ý‡^¨adá¸lp‚Џ¸2¨r¬¨?ÿþ’W75353!5!2654&#!5!#?ŽŽŽˆþæid€xþEvDFžzÌ̈ÊÊýü¸lp‚Џ¸2¨r¬¨+¦")5!2654&#!5!2654&#!5!#HEÑþßýwís{åýðp{åý``àü¼°ýPDýP°.Œ£ï &#"32 &6 Ua`UU`aÚœþ››>œ…pžž¸·žUÚ×Ö¶××?œ’à32654&#%!2+#¾”XcbYþí£¢ž”ƒþÆSJKR]öþ°œÀà#'.+#!232654&#–1E4€‰p1M>z€›¥eþŸ‹\Y_[' ?]äÓZ4þŸD|vShPþ×IKHMœÏà!!#!ÍþÚ€þÙà_ýåAŒà33267>53#"&'.A L67K €$,*kCBk*,$ÝýÉ=4!!!!4<8ýý€l$! !#näœíà 333# #ä|Zk…mZ|x€yàýYÁþ>¨ü¼ñþEŒŒ )#"326757#5#"&546;5.#"5>32«&ffMD_ntt&pQl€ž™œT];y:Av7X|&×??8?vh+þš]85l[hmKDg..REŒŒ )32654&#"3>32+3267#"&'.&&ffMD_ntt&pQl€ž™œT];y:Av7X|&Ó??8?vh+f]85lZimKDg..RGŒŠ53#5#"&546323264&#"tt`?€““€?aþÇVTSXXST¿NýO/0°›™®0¡ðz{î{ûŒÖ B32654&#"26=%!4654&#"5>32>32+3267#"&'#"&5™kK84:/þÊ0n0þÊ6@F2Q #S-E^T=bg~yI>;#T'1S&9NT8m\)3?26JàUJLXP ZQ`.+-,`\`d1CH^#$"%„¬GŒŠ4&"2>32#"&'#3V¨WW¨ÿaA’“€?`tt]ðz{î{Ü.1®™›°0/OgGŒŠ3#5#"&546323264&#"tt`?€““€?aþÇVTSXXST¿Dü™O/0°›™®0¡ðz{î{1Œ !3267#"&54632.#" þ xn7yEB{9¥¹µ˜†œt\UTm ï2gp f¯š–³¢nZ_bW1Œ 5!54&#"5>32#"&732671öxn7yEB{9¥¹µ˜†œt\UTm »2gp f¯š–³¢nZ_bWO‚(.54632.#";#"3267#"&546ÿKQ™„3sCBm0W][Uhd^jrm>s0=r6 ®]ðH5KX ]0*"0Q>-7;af]=SO‚(#"&'532654&+532654&#"5>32ÒKQ™„3sCBm0W][Uhd^jrm>s0=r6 ®]¾H5KX ]0*"0Q>-7;af]=SG¦Š '4&#"32#"&'5326=#"&5463253UQUZZVPÉ–‘0i4>d+]V_E|““|D^tgèxxèz)‘f[bF53¯”“°02QIªˆ !#5!#3#53WþØæ?æµµssž#PPþ-þ¼ƒ8œ™ 33##8x0þêBŽþûVxþìþyDIû%œ¬">32#4&#"#4&#"#3>32‹B/UFj",2%j$/.#jj?'0@Ï)&u¢þ•g…@E€þ™g†?E€þ™s6"#'[­v+5327654&#"#367632v89hu9CGR,+tt54Ilj!þpm;32#"&'53264&#"X.c4¤¸¸¤3a1.\;muvl=_)î®þÊ®l$!~è~!#:Õ— 46 #4&#":›&œ{[YX[Õ ©© xzzx:Œ—Õ  &533265—›þÚœ{[YX[Õ ©© xzzxG­Š#3>32#"&$4&"2¼uu`?€’’€@`8U¨WW¨ëþÂbP/0°›™®0¡ðz{î{Mœ„Á!!;#"&5#535}þù;J‚ƒk¼¼Á²Pþ¬F7R]rTP²[Œv332653#5#"&[tCGRWttkGlj‰…þ{TPg`býŽ^68~ÿÒ}!5!2654&#!5!#´þKµ`YslþqÁj=?Žg32#"&'#3‡‡Žˆ‡¸îçL¦Sb C•ˆ,˜mÄêêÄl–/¸ŠÏ×מÙÚ#ü¶.,¢°}^\þÆþùþøþÆVZ‘ÿÿ:œ–àœ5`!!!5!!5!!5!!5þnünlþpþ”’þ’h¤þË5¤iþ— þV ;+53276=#"&5!5![Y×YZ¥Í¹Z-,0¥µþÙß–|~€Ãijœ>>~ÔÂùGŒŠ#3>32#"&$4&#"32»tt`?€““€?a9VTSXXSTëNqO/0°›™®0¡ðz{î{XŒy#"&632.#"3267y.c4¤¸¸¤3a1.\;muvl=_)¼®6®l$!}ut~!#QI€+325&#"47&'&547632.#"632#"d&/\R@5a$^`^¥63302b3q>>>5|¼Ò4ì *š &:/Z–™XX `@?æ@bŠj:Œ—)#"&54632.''7'37.#"32654&¨|sŸŸŸ .¯•sŠP·m4\a^UV^%ƒwÔp–¦¦–”¦237,pQ57þîvonwwn=rO‚(#"&'532654&+532654&#"5>32ÑT]®¡5sQ0"*0] XK5HWœz#"3###535463z„>1óót¼¼kqU.98PýÝ#P,gab­o53#5!3#+53276=ΙÈ<””98h “9œ\ÇPýé\ m;d+]V_E|“‘~4Ûwuxèzz£‘f[bF53¯”³[«v332653##"&[tCGRWttkGlj‰…þ{TPg`büO68~CœŽ3#!3#3!535#535#4ttµ)ßßæýÀæññµ‚rþæ\­PP­\Êaœp #"&5#5!;phqµ)99uœun@PþpFFIœˆ !#3!53#I?ææýÁææPþ-PPÓGœŠ#3!535#535#5!#ŠèæýÁæèèæ?æõ\­PP­\ÊPPÊd­m3#"54;33#'0#"3276‡ttd¿ªytrx !3rJMB ‚ü,|ssýW?#5˜$ U­| ;#"&5#5!ƒ98ˆ“dvº.‘FFXtp(QU­| ;+53276=#"&5#5!ƒ98ˆ89ht9hrº.EGbm;32+53276=14&#"#4&#"#3>32ŠB.V"#23_uj3",2%j$/.$ii>(0@Ï)&:;¢þÝSm;32#4&#"MU!1$XT8[]V;;FQ‘xlX6V~a88†þ…wYYk\U­|$54'&#"#367632;#"'&5¹:G()WW*+7[//$1!U&'œH/Y,-56\þžsa8BDþÍH V6X66x?œ’ 33##?«-{«þÓ{þùý~úþ:Œ— #"'&547"!&'&!3276Õ&NNNM”“MNNàX-(e(-Wþ¡ !-XY-!TU ¡TTTT¡ U=5cc5=þÏJ,==,:®—&/#5!#3!535&'&5476767654'&3—¢—fwx=%þ;Ö )=xw>)[­v<.#"#"/;#"'&=32654'&/.547632P1j8W*,]({44MN‰8> 0B“ r34@>?=RX!k)k`FG‚@98ýb/$+*MW33 V6X66x"192-*TIX00x­Y46;#"+5326 j{mo>1gr,B0‘]MecU-:ýJxlX6M­„Á!!!;+53276=#"'&5#535}þùJ‚88h‚u9ƒ56¼¼Á²Pþ¬F]m;T_Ã^­s!!#;#"'&=!5!jþ¹G$2!V&'þ¯GþÅ^þ=R V6X66x ^ÃM^„#47#5!5!3632#'03254#’aå´þ\'þLn&ŠÒ m,8œ!!^ÃR^þ=¢ŠjR33¨ž2#"&'532654&+5!5!dCP>i¿±;}C5~Dx~uhnþ\'§ xM|‡mTPJS]R^:Œ—ä .#"!326 #"&54UYXUcþVXYVþ¾&œ›”“›l~¢¢~g~££]ÜÐÑÛÛÑÐÿÿ%þ ¬Õ&«$ÿÿ…þ #{&«Dÿÿ¦qP& ²%ÿÿÁÿãX&2Eÿÿ¦þcqÕ&©%ÿÿÁþcX&©Eÿÿ¦þ›qÕ&·%ÿÿÁþ›X&·Eÿÿ‹þu1k' ªZu&­d&ÿÿÃþu%f&vZ&­hFÿÿ‰RP& ²Î'ÿÿ{ÿã&ÎGÿÿ‰þcRÕ&©Î'ÿÿ{þc&©Gÿÿ‰þ›RÕ&·Î'ÿÿ{þ›&·Gÿÿ}þuRÕ'­þò'ÿÿ{þu&­ìGÿÿ‰þRÕ&³Î'ÿÿ{þ&³GÿÿÅþNÕ&³(ÿÿ{þX{&³HÿÿÅþNÕ&¶(ÿÿ{þX{&¶HÿÿÅþuNm& ±&(­2ÿÿ{þuXH&Œ&H­2ÿÿéXP& ²6)ÿÿÃ'P& ²IÿÿfÿãP0& ¶2*ÿÿ{þHö&ŠJÿÿ‰HP& ²+ÿÿÃP& ²Kÿÿ‰þcHÕ&©+ÿÿÃþc&©Kÿÿ‰H5' ©\+ÿÿÃX'jHKÿÿþuHÕ'­þ‰+ÿÿ7þu'­þ¬Kÿÿ‰þHÕ&´+ÿÿÃþ&´KÿÿÉþÕ&¶,ÿÿ²þD&¶Lÿÿ‰Ék' ªu.ÿÿì²k' ªÿ%uNÿÿ‰þcÉÕ&©.ÿÿìþc²&©2Nÿÿ‰þ›ÉÕ&·.ÿÿìþ›²&·2Nÿÿ×þcsÕ&©2/ÿÿ þc &©Oÿÿ×þcs0& ¶˜ÿÿ þc 0& ¶™ÿÿ×þ›sÕ&·2/ÿÿ þ› &·Oÿÿ×þsÕ&³2/ÿÿ þ &³OÿÿVyk' ªu0ÿÿmof&vPÿÿVyP& ²0ÿÿmo&PÿÿVþcyÕ&©0ÿÿmþco{&©Pÿÿ‹FP& ²1ÿÿÃ&Qÿÿ‹þcFÕ&©1ÿÿÃþc{&©Qÿÿ‹þ›FÕ&·1ÿÿÃþ›{&·Qÿÿ‹þFÕ&³1ÿÿÃþ{&³Qÿÿuÿã\ù&2' « ª2ÿÿ‰ÿãHú'‡”&RwÿÿÅur' ªÿw|3ÿÿ¾þVTf&‡SÿÿÅuP& ²3ÿÿ¾þVT&SÿÿÑP& ²Î5ÿÿjƒ&UÿÿþcÑÕ&©Î5ÿÿjþcƒ{&©UÿÿþcÑ0& ¶Î¶ÿÿ=þcƒö&Š·ÿÿþ›ÑÕ&·5ÿÿ=þ›ƒ{&·Uÿÿ‹ÿãJP& ²6ÿÿÕÿã&Vÿÿ‹þcJð&©6ÿÿÕþc{&©Vÿÿ‹þcJP& ²&6©ÿÿÕþc&&V©ÿÿ/¢P& ²7ÿÿƒP& ²Wÿÿ/þc¢Õ&©7ÿÿƒþcž&©Wÿÿ/þ›¢Õ&·7ÿÿƒþ›ž&·Wÿÿ/þ¢Õ&³7ÿÿƒþž&³Wÿÿ“þd=Õ&ª8ÿÿÃþd^&ªXÿÿ“þ=Õ&¶8ÿÿÃþ^&¶Xÿÿ“þ=Õ&³8ÿÿÃþ^&³Xÿÿ“ÿã=ù' «' ª28ÿÿÃÿãú'‡”&wXÿÿ9˜E' «\9ÿÿdm&wØYÿÿ9þc˜Õ&©9ÿÿdþcm`&©YÿÿÑr' ¬|:ÿÿÑm&CÀZÿÿÑr' ª|:ÿÿÑm&v@ZÿÿÑ4'j$:ÿÿÑ¿&j¯ZÿÿÑP& ²:ÿÿÑ&ZÿÿþcÑÕ&©:ÿÿþcÑ`&©Zÿÿ¾P& ²;ÿÿL…&[ÿÿ¾5' ©\;ÿÿL…¿&j¯[ÿÿ%¬P& ²<ÿÿhþV&\ÿÿœ‘t' ­.|=ÿÿËm&g]ÿÿœþc‘Õ&©2=ÿÿËþcb&©]ÿÿœþ›‘Õ&·2=ÿÿËþ›b&·]ÿÿÃþ›&·Kÿÿƒâ'jÿ¢ÒWÿÿÑ&uZÿÿhþV&u \ÿÿÃ'P& ²Aÿÿ‰ÿãH"úÿÿ%þc¬Õ&©$ÿÿ…þc#{&©Dÿÿ%þc¬t' ­|òÿÿ…þc#m&gèóÿÿ%¬ù& ±€&$ ¬ÿÿ…ÿã#¢'†<Åÿÿ%þc¬m& ±òÿÿ…þc#&sèÌóÿÿÅþcNÕ&©(ÿÿ{þcX{&©HÿÿÅN^' «*u(ÿÿ{ÿãX7&wHÿÿÅþcNt' ­|úÿÿ{þcXm&g"ûÿÿÉþcÕ&©,ÿÿ²þcD&©Lÿÿuþc\ð&©2ÿÿ‰þcH{&©Rÿÿuþc\t' ­|ÿÿ‰þcHm&gÿÿÿã§k' ªÿ‘ubÿÿ ÿã²f&v—cÿÿÿã§k' ¬ÿ‘ubÿÿ ÿã²f&C—cÿÿÿã§^' «ÿ‘ubÿÿ ÿã²7&w—cÿÿþc§&©‘bÿÿ þc²{&©—cÿÿ“þc=Õ&©8ÿÿÃþc^&©Xÿÿ ÿãÈk' ªÿvuqÿÿ'ÿãªf'vÿdrÿÿ ÿãÈk' ¬ÿvuqÿÿ'ÿãªf'Cÿdrÿÿ ÿãÈ^' «ÿvuqÿÿ'ÿãª7'wÿdrÿÿ þcÈ'©ÿvqÿÿ'þcªq'©ÿdrÿÿ%¬r' ¬|<ÿÿhþVm&CÌ\ÿÿ%þc¬Õ&©<ÿÿhþV`'©ú\ÿÿ%¬^' «u<ÿÿhþV7&w\ÿÿFÿç•r&÷ÎÿÿFÿç•r&÷ÿÿFÿç•r&÷ÛÿÿFÿç•r&÷èÿÿFÿç•r&÷ÜÿÿFÿç•r&÷éÿÿFÿç•Ñ&÷ÝÿÿFÿç•Ñ&÷êÿÿ%¬r&ØÎþ¢ÿÿ%¬r&Øþpÿÿþk¬r&ØÛývÿÿþk¬r&Øèývÿÿÿ¬r&ØÜýóÿÿÿ¬r&ØéýóÿÿÿÁ¬Ñ&ØÝþ¢ÿÿÿ¬Ñ&Øêþpÿÿ©ÿê(r&ûÎÿÿ©ÿê(r&ûÿÿ©ÿê(r&ûÛÿÿ©ÿê(r&ûèÿÿ©ÿê(r&ûÜÿÿ©ÿê(r&ûéÿÿÿ~Nr&ÜÎýÿÿÿ~Nr&ÜýÿÿýŠNr&ÜÛü•ÿÿýŠNr&Üèü•ÿÿþNr&ÜÜüàÿÿýóNr&ÜéüàÿÿÃþVr&ýÎÿÿÃþVr&ýÿÿÃþVr&ýÛÿÿÃþVr&ýèÿÿÃþVr&ýÜÿÿÃþVr&ýéÿÿÃþVÑ&ýÝÿÿÃþVÑ&ýêÿÿÿLHr&ÞÎý]ÿÿÿLHr&Þý]ÿÿý?Hr&ÞÛüJÿÿý?Hr&ÞèüJÿÿý£Hr&ÞÜü|ÿÿýHr&Þéü|ÿÿþcHÑ&ÞÝýDÿÿþcHÑ&ÞêýDÿÿ6Ïr&ÿÎÿÿ6Ïr&ÿÿÿõðr&ÿÛÿÿõðr&ÿèÿÿ'r&ÿÜÿÿr&ÿéÿÿÏÑ&ÿÝÿÿÏÑ&ÿêÿÿÿ~r&àÎýÿÿÿ~r&àýÿÿý£r&àÛü®ÿÿý£r&àèü®ÿÿþr&àÜüàÿÿýór&àéüàÿÿþ®Ñ&àÝýÿÿþ®Ñ&àêýÿÿ‰ÿãHr&Îÿÿ‰ÿãHr&ÿÿ‰ÿãHr&Ûÿÿ‰ÿãHr&èÿÿ‰ÿãHr&Üÿÿ‰ÿãHr&éÿÿÿÉÿã\r&æÎýÚÿÿÿ~ÿã\r&æýÿÿýŠÿã\r&æÛü•ÿÿýŠÿã\r&æèü•ÿÿþÿã\r&æÜývÿÿþ‰ÿã\r&æéývÿÿ3ir& Îÿÿ3ir& ÿÿ3ir& Ûÿÿ3ir& èÿÿ3ir& Üÿÿ3ir& éÿÿ3iÑ& Ýÿÿ3iÑ& êÿÿþè¬r&ëüùÿÿý?¬r&ëèüJÿÿýD¬r&ëéü1ÿÿþ¬Ñ&ëêüùÿÿFÿãŒr&ÎÿÿFÿãŒr&ÿÿFÿãŒr&ÛÿÿFÿãŒr&èÿÿFÿãŒr&ÜÿÿFÿãŒr&éÿÿFÿãŒÑ&ÝÿÿFÿãŒÑ&êÿÿÿɇr&ïÎýÚÿÿÿe‡r&ïývÿÿýЇr&ïÛü•ÿÿýЇr&ïèü•ÿÿþ¶‡r&ïÜýÿÿþ¢‡r&ïéýÿÿþù‡Ñ&ïÝýÚÿÿþ®‡Ñ&ïêýÿÿFÿç•f&÷CÿÿFÿç•fòÿÿ©ÿê(f&ûCÿÿ©ÿê(fóÿÿÃþVf&ýCÿÿÃþVfôÿÿÏf&ÿCÿÿ6Ïfõÿÿ‰ÿãHf&Cÿÿ‰ÿãHfÿÿ3if& Cÿÿ3ifÿÿFÿãŒf&CÿÿFÿãŒfÿÿFþV•r&ËœÿÿFþV•r&ËœÿÿFþV•r& ËœÿÿFþV•r&!ËœÿÿFþV•r&Ëœ"ÿÿFþV•r&Ëœ#ÿÿFþV•Ñ&$ËœÿÿFþV•Ñ&%Ëœÿÿ%þV¬r&&Íÿÿ%þV¬r&'ÍÿÿþkþV¬r&(ÍÿÿþkþV¬r&)ÍÿÿÿþV¬r&Í*ÿÿÿþV¬r&Í+ÿÿÿÁþV¬Ñ&,ÍÿÿÿþV¬Ñ&-ÍÿÿÃþVr&:ËþÈÿÿÃþVr&;ËþÈÿÿÃþVr&<ËþÈÿÿÃþVr&=ËþÈÿÿÃþVr'ËþÈ>ÿÿÃþVr'ËþÈ?ÿÿÃþVÑ&@ËþÈÿÿÃþVÑ&AËþÈÿÿÿLþVHr&BÍÿÿÿLþVHr&CÍÿÿý?þVHr&DÍÿÿý?þVHr&EÍÿÿý£þVHr&ÍFÿÿýþVHr&ÍGÿÿþcþVHÑ&HÍÿÿþcþVHÑ&IÍÿÿFþVŒr&rËÿÿFþVŒr&sËÿÿFþVŒr&tËÿÿFþVŒr&uËÿÿFþVŒr&ËvÿÿFþVŒr&ËwÿÿFþVŒÑ&xËÿÿFþVŒÑ&yËÿÿÿÉþV‡r&zÍÿÿÿeþV‡r&{ÍÿÿýŠþV‡r&|ÍÿÿýŠþV‡r&}Íÿÿþ¶þV‡r&Í~ÿÿþ¢þV‡r&ÍÿÿþùþV‡Ñ&€Íÿÿþ®þV‡Ñ&ÍÿÿFÿç•H&Œ÷ÿÿFÿç•ö&Š÷ÿÿFþV•f&‚ËœÿÿFþV•y&÷ËœÿÿFþV•f&òËœÿÿFÿç•7&÷ÏÿÿFþV•7&ÅËœÿÿ%¬m& ±Øÿÿ%¬0& ¶Øÿÿÿ‡¬f&Øúþpÿÿ¬fÏÿÿ%þV¬Õ&ØÍÿÿïÂárÎÿÿþVúÿ¤ËïÂár#525#53áñŽŽñÃþÿd¯ÿÿ²7wÿÿF²‹&jÏTÿÿÃþVf&†ËþÈÿÿÃþV{&ýËþÈÿÿÃþVf&ôËþÈÿÿÃþV7&ýÏÿÿÃþV7&ÔËþÈÿÿþNf&ÜúývÿÿÿNfÑÿÿþ[Hf&ÞúýDÿÿþíHfÒÿÿ‰þVHÕ&ÞÍÿÿõÂðr'Îÿúúÿÿ'Âr'Îÿ8dÿÿ²Ñ&ÎÏšÿÿ/ÏH&Œÿÿÿ6Ïö&ŠÿÿÿÏØ&ÿøÿÿ6ÏØ×ÿÿÏ7&ÿÏÿÿÏ‹&ÿÐÿÿÉm& ±àÿÿÉ0& ¶àÿÿþ¿f&àúý¨ÿÿÿfÓÿÿõÂðr'ÿúúÿÿÂr'ÿ$dÿÿ²Ñ&Ïšÿÿ3iH&Œ ÿÿ3iö&Š ÿÿ3iØ& øÿÿ3iØöÿÿ¾þVTr&Îÿÿ¾þVTr&ÿÿ3i7& Ïÿÿ3i‹& Ðÿÿ%¬m& ±ëÿÿ%¬0& ¶ëÿÿþ[¬f&ëúýDÿÿþp¬fÕÿÿÿ~ur&èýÿÿF‘Ø&júrÿÿ?FºØÎÿÿîöfCÿÿFþVŒf&ŽËÿÿFþVŒ`&ËÿÿFþVŒf&ËÿÿFÿãŒ7&ÏÿÿFþVŒ7&þËÿÿþ¦ÿã\f&æúýÿÿÿµÿã\fÔÿÿþ¦‡f&ïúýÿÿÿ·fÖÿÿJþV‡´&ïÍÿÿÛîºfvïÂár53#3"ððñï¯ddßmƒ¶ ÔÄ1Ôì0!!d ý÷ƒ¤ÿÿdßmƒìÑy¶¶ý/Æ1üì0!!Ñû/yìÑy¶¶ý/Æ1üì0!!Ñû/yìÑyµ¶/Ä1Ôì0!!Ñû/yìÑyµ¶/Ä1Ôì0!!Ñû/yÿÿþÑÿ]&BBðÏÇ-@ £µÔüÔÌ1üì0#53ËüÄšbÇÏ~þ‚ÏÇ-@ £µÔìÔÌ1üì03#1üÅ™bÎþ“þáò/²£¸¶ÔìÔÌ1üì03#öüÅšc/ÏþÏÇ-#5Ëb™ÅÎþÎÓÇþ %@£ µ  ÔÌÔìÔüÔÌ1ü<ì20#53#53œüÄšbþ5þÇ™bÇÏ~þ‚ÏÏ~þ‚ÓÇü '@ £µ  ÔìÔìÔÌÔÎ1ü<ì203#%3#üÅ™bþ5üÄšbÎþÎÎþÓþáü/ *´ £¸@  ÔìÔìÔÌÔÎ1ü<ì203#%3#üÅ™bþ5üÄšb/ÏþÏÏþÓÇü #5!#5Ïb™ÅÇbšÄÎþÎÎþ΢ÿ;/Õ '@Ë ˆÊ RQ R Ô<ìü<ì1äôÔ<ì203!!#!5!±nþ’±þ’nÕþ\™û£]™¢ÿ;/Õ<@ËË Ê ˆR Q R Ô<<ì2ü<<ì21äôÄ2Ô<î2î20%!#!5!!5!3!!!/þ’±þ’nþ’n±nþ’nßþ\¤š™¤þ\™ýá?Ñ‘! · Ð V Ôì1Ôä04632#"&?¬}|­®}|«ú|«¬{|­«?áq?¢ðþˆP1 #@¢   ÔüÔìÔì1/<<ì2203#3#3#Püü3üüþfüü1þÏ1þÏ1þÏј'3?Kt@%1= ÈÈ1¸µ%È+‘C¸@&7ÈIF:4(:PFz4P@ PzP"P.zP@(/ÄìÄôìîöîîöî99991/<î2î2öîþîî299990'32654&#"4632#"&32654&#"4632#"&32654&#"4632#"&H%'üH_EDbcCE_y¥xx¦§wy¤LaEEacCEay¦yx¦¦xy¦ aEF`bDEay¦yx§§xy¦7aŸ`ýJGacECcaEy¥¦xy¨¦ÓEaaECcaEx§§xy¨§ý"GaaGCcaEx¦¦xy¨§Ñ˜ DP\h4632#"&62654&#"'4626763267632#"'&'#"'&'#"&732654&#"32654&#"32654&#"¦yx¦¦xy¦yaŠacCE’%'û¢ŠÈE FedE  Fed‹‹deF  EdeF Fce‰eO:8RR8:OxQ::PR8:QzQ::PR8:Qyx§§xy¨§¿ŠaaECcýaŸ`ýJy¥S  SS S¦xy¨T TT  T¦{GacECcaEGaaGCcaEGaaGCca¬`$Õ3¬®Êþà`uþ‹ÿÿ`ºÕ')–)ÿjÿÿ€`PÕ'),')þÔ)¬`$Õ#3$VþÞÌ`uÿÿ`ºÕ',–,ÿjÿÿ€`PÕ&,',,,þÔZ/#@ ü¬vÔì291ôì90 5/þÓ-þ+#¿þôþô¿¢R¤y#@ ü¬vÔ<ì91ôì90 5 ¤Õþ+-þÓ#þ^Rþ^¿  ÿÿÐÕ'þÌ4ôð%#56763253767654'&¬¾ Yb^`_hºon"!^XE&ÅË->B%‘­ #D¼9``¡LAB\VBT=ýÅþþBþR-;,,1Y7ÿÿ»Ñ BžÏþòw !#3#3!ϨððððþXýEýFZþò !53#53#5þXððððøÞº»ÿÿ!±ð' µþ¼ µÿÿ!ð' µþ¼4ÿÿбð'þÌ µËÿ;gÕ 2###‹×ì׿Õ辸Ýü²ùáš=•ð ,47632""327654'&'2#"'&5476"%F$W+,,+WX+,,+X•LLLL•–JKKL @ !¡UU¯®UUUU®¯UUYnm×ÖnmmnÖ×mnHœˆ !3!53#3#z(æýÀæ´´ttýÝPPÓD‚ œß 5³ ¸ ²º @  W ÔÔ<Äì291ôôÔ<ì29033##5!5 !w¢ttŠþ}ƒþîßýæoººy“þc?}ß!!!>32#"&'532654&#"fÖþ6TTXY™Jz04?9= 25D‡IJLL‰¡–´«...´P\\PS****ÏhQQž;JJ‰‡KJÐáÔÞ þŽh¸h21Â12=œ…ß!#!=Hþ´ƒCþDß0üíä;Œ–î.="327654'&'&'&547632#"'&54767327654&#"hT-../RU-../ÀP--KK‚KK--P]12PPŽPP210'(KL('NMK(')+*š++*+NM*+/23Gc;::;cG3288Yq?@?@pZ88ÆC#$$#CDH$$0ˆð.27654'&#"532765#"'&547632#"'&SP-..-PS+***Œ(X/x==jDˆHIKL‰¢KKZ[¬-..44]\4421ab21þŸhQPž854&Øe_]]_eTSS„ý}~ý„‚þ€þAœ @ ÔÜ32tNN^luu)qJy}þ…wYYk\þžsa88†ÿÿ=ÿñ•T;ýdÿÿX“C{ýdÿÿB}TtýdÿÿFÿñœTuýdÿÿ C=ýdÿÿ?ÿñ}C>ýdÿÿIÿñ¡T?ýdÿÿ=…C@ýdÿÿ;ÿð–RAýdÿÿ0ÿñˆTBýdÿÿ?¶Cýdÿÿ8¶—DýdÿÿŶ EýdÿÿØÿiúfFýdÿÿØÿiùfGýdÿÿEÿðŒ‚#ýdÿÿ1ÿð ‚)ýdÿÿ:ÿð—‚2ýdÿÿ¿s}ýdÿÿ1ÿð ‚*ýdÿÿAhVýdÿÿ8™g/ýdÿÿV|n{ýdÿÿ%¬‚0ýdÿÿAƒHýdÿÿGÿŠ‚6ýdÿÿ[v“|ýdÿÿM„%7ýd ÿéÌå##"32.#"3267!!!!!!¯;†J¾ÜܾL…:9‚I™™I‚9þ^‘þo¬ýã¬78?*?77£IGïþ8ïGIƒþ­ƒþ`ƒ{ÿ¦c9'.473&'3267#"'#7&'#7&'&76?3&',;8+$"5:þÞlÀUXÅn;4";¢¢’ðŽÏ„PqJ8=þÞ0;ëi¥Õ<)û—^_ÓHH?W‡æÏgjιKüpþØî”Ëû•(_ÿäYð,%6767# !2.#"3>32.#"óYQbUYÈoþãþ¸HqÈWUÃn×årVŒ,Že#7!v€Š'/_ÓHGžghŸGGÕ_^þÇþØþÙœu]\Yª¶«CÕ!!!!3###5éZýpPý°÷÷Êé~WªþHªþµEþÇ9E‹lð#!!53#535#535632.#"!!!?-üì¿¿ÇÇÖè=—OLˆ=”t‡þyìþ¾ªªB_ó¶))›ÔHmÿBo)632#4&#"#5#&'&#"#3>323 0?‡o¨5FP;¨]iÆJI9§§!c?L3!BjbÑþßýwís{åý°þ’Eë78{åý``þÂý ‰N#55YQKP%$•‚ž¬®((TT@I!*™‰œ¶##ŸÒ` ÿãÉÕE326&##.+#!232654&/.54632.#"#"'&‹£]``]‹z/YM$¤¡TP*N(:?>?>SZAm)na„At02k:WX?^)}jž‹9>/ýúØ–bý‰ÕÖØº$~´3YQKP%$•‚ž¬®((TT@I!*™‰œ¶ÑÕ *-037#!3!73!733#3#####53'#53'33ìáÙ¹pgþýäý1Œ Å2CY†¿¿È¿†YD2ÅFIn¦$„uuþüý—muÂÂÂÂuü€wü‰€uÂý«ý™gu*ÿã§Õ %2#4&#!#)"33!3*£ÎÔ•Žþò•|þaÎÔ•~ÒþÖþÜþ‘VðÓú²*$oþªðÓNÿÿ{þ›Ñ&Ólz%ÿã%ð3p@< ç1&ç³ ²—(#³² —–#™43('1)-&- 2'-4ÔÄÄ2ìÄ2Ä99999999991äôìôìÆ2îöîî2Õ<î2032.#"!!!!3267#"#73&'&54767#7Ó0ßT“JBŸN’®á1þFi1þÓ®“OCH”Uâþí,®1u¦1´!(*Ï=DÐÌl-.&nËÑC>Ï*( n -/ l*§Õ33!!###5´¬<Ýýº„þ~rãýœ¬ŠTý‰wýsýÏý1ás/¢Õ!5!!77#'%5'þ+sþ-åPþËæPþÊËÐMÑMžªªþñ¡o؈¢oÙý¸º¡nÙˆ¢nþ9Æð-bwƒ'67>32#"'&'"326767654'&'&67'>7632#"'.'&/#"'&54632326767654'&'&&#"32fbU!O3'A"+0.!‚. !  ü°_ \5#?\kŸ2,,#2!$(2( 4" )1>((E8&^ ,9Q Fþ‘ þ9)ЗiRm:3X’wdg7? 2øj7#=5(6$ 629T/ ·(2M !:5S}$@{mbõqŒ‚~Es/4 -& "TAB`]…’ü›|@8†nR€kcd]aCœû ".ÿãŽð)5'632327&547632#527654'#"'&#"%654'&#"¹‹“o|@X"07ãPYˆtaTkµ~jü†[Iw‰mqJ2530D#24!`ðNkB±þ¬X``S±ã«£¿Â†q¢J<“Xr~hFÙl¯V1??0W¦jÑÕ$)! 3#3#+##535#537!&#!3276'!Å´‚^x_ ^r&a~áêÊ[[[[ÊÜM¥ýþê±u ýòÕþ÷t:9s{FYý¨rsstcccþCtç;8s5ÿ[‰x$-#5&'&76753&'&'6767#5!'ь߉¨¨‰ßŒi`p^_kbkN?H9x"cxhuŒ…OooO¥§Ìmnͦ‰$F×_0,û?'‘¦ýS*%²§ l™þÑþÒ™l'©Õ5!3!#3##!##5373!/3F¥Ð¥íA¬…¤¿šþ3›Á¤…¬C¯=ƒ>ã¿`R{ýø{Ï{ýøýø{ÏÏÏ{AÿãÑð667654&#"5>323#!!3267#"$547#536767!5? 7¦^¹\i¾Vß œé^Ì':ü§,ª™hÍskÔiüþøÙ HˆþE¯ 4cq…<;Í''ñÈK={[/ {9b{‰DI×--àÕN@{ O/{‚þÓO!,&'&#2767#&'&576757O[TUeeUT[Y\Y[d¹sÔÔy²e]Y\þŠ[CvlC¤Õi--ûñ--iÓH$"þðuÖ9BËtæâ"#û£ùBuª¡f´lC/¢Õ !!!!#!/sûsþ-Ëþ+Õªxªû÷ hqÕ%!!##.+532767!7!&'&+7q7þ§V#7ãKP’N76SËÙ²M{cÁÝ‘G; ýè7Û4Kó7Õ{P{†V^77§þhy¡]¦M@f{L5N{Œÿä1ð %3267# !2."_|dT È„þøþ¸E}=[~èoi ‰† ƒ7@,ƒL¨]r•4‚*:0N²þ¯þ̾ ÿÏÐ(2.#"3267#"&54632%3#"326.2"&54Ä:F#KVVK#F:-Q.~”•ƒ*Pʇýª‡Ã=II=323‡¸‡]W²!{¸/¸tK¯b‹š ¶ýJ· G'QWº¨ý‡ý¤ab‘‚ ^TH632#64&#"#'?3%Ç—Å‹š‡¸‡]W²!{¸éÞ þ1¸$þÁ¸Ã‘‚EmýJ·H…Wº¨ý‡­EbOû¾YbcJ…Õ %# !3!# ýG¸¹üâH¦Mþ¸ýZMd úóqûáú+áû ÇÕ #  "32!!3463"##526ebþž±223äbþžý õÌWÜU&õÌWÜU& ýê•þìþ ”1¤ûQ~ƒ®¸>;û\¯ü‚ƒ®¸>}ÑN*3>"32>54.'2#".5467>32654&#%!2+#hjµ–MMKLµijµ˜KL–µkÚZZ\[¶Ú~}Ú¶[\ZZÚ&“RXXRþø’••’“uçJ–¸jh·KLLL˜µij¸–JgZZ[Ü~}Ú¶[[¶Ú}~Ü[ZZþ¸þéICBISqmopþÖBšÕ 33!27&#%!2+!67654'&¢À` ý`sïööðòþ€1:+YX*qúó ýj’dÛÓÕÚýˆZý™)VŸžV)þø¼ð (%#'#  %27&"676'&\æÓ¿,þðþºF Eµý]ì]]ì][††{††þÝï¥ab¥þ[þžþüþŽ 22×22ûjT%¶ýœµ%5û¯$¶c¶$%½Õ &.2&'&+3!.+!!2!27&#676'&%3¶A::f&AVy©à-`5­þ‹¢?vfþ«AÙÖd)ýò7%LK$ý2¬—01/ÉþåO„~þh–bý‰ÕÖØÐb)¥ýj’ý™)V>U)-úó “fÕh@6    B  × ˆ  ` `_`_/üþìÕîÖî91ô<<ì2Ô<<Ä90KSXÉÉÉÉY"###5!3###¶¢r¢´‰}¬rœ7¦qÕ^þä^ÿý¾âþÓ-þB0™Õ %#!!!5!b¶ÅýJZCýJÉû—¶ý]d úóqdúódd ÿÿJ‡´ïÿÿ‰ÉÕ.ÿÿ%¬m‡ ÿçÆ-)7 7673 $54$32!"53!25&'&#"é6Ky {U>ZLtþÅþà ¢"š˜"£ü3à8M{€{M7äM3TT<`xGZ³A¯°E®®þ»°IpP3RQ4Oÿÿþãe{'uÉüV& ¯{þþœÿÿþãeŒ'uÉüV& ¯tþþœÿÿþãZ{'>ÉüV& ¯{þþœÿÿþãZŒ'>ÉüV& ¯tþþœÿÿþãZŒ'>ÉüV& ¯uþþœÿÿ þãZ{'>ÉüV& ¯=þþœÿÿþãj{'?ÉüV& ¯{þþœÿÿþãj{'?ÉüV& ¯>þþœÿÿþâ_{'AÉüV& ¯{þþœÿÿþâ_Œ'AÉüV& ¯uþþœÿÿþâ_{'AÉüV& ¯>þþœÿÿþâ_{'AÉüV& ¯@þþœÿÿøZ{& ¯{þþœBå} 5!!B#Z pü ZR#Z ¤ ZµM '#'’"Z ¤ Z$MþÝZ üp Z#Bå} '7!5!'7þÝZ üp Z#þÝZ ¤ ZþݵM !737@þÜZ ¤ ZþÞ#Z pü ZþÝBå}!5!'7'²ým ZþÝ#Z “ Z#þÝZß Z#R#Z  ZþÝRþÝZµM%7#7'3'º ZþÞRþÜZ  Z$R"Z Ý ZþÝ#Z “ Z#þÝZ ¸a 7!##¸:œãntý’':ý’tnã¸a #5'#5!ý’tnãœ'þdãý’tn¸a )53753ßþdãý’tnntý’ãþd¸a 733!¸ntý’ãþd:œãntý’Bå}3!'7!5!7ÁÎþÑ“Žcþ} ZþÝ#Z 㔎ƒ¤úR¨ Z#R#Z úRBå}#5!7!'7'7!'Î/“Žcƒ Z#þÝZ þ”ŽߤúR¨ ZþÝRþÝZ úRY‹xa532767676767632&'&'&#"#"'&/#7!$f ! +!3-68+2",j!!!3 .6+85.0$m:œâ w '07)(6;C+ : ,:'+€àœ:Y‹xa5!5!#5#"'&'&'.'&#"'6767632327676­þõœ:m$0.58+6. 3!!!j,"2+86-3!+ ! fâ:þdà€+':, : +C;6()70' wBå}!!'#537i&ýÚ Zú– ZþÝ#Z –úZƒ¤ Zú Z#R#Z úZµM'75'3''# Zú Z$R"Z úZ ¤& Zú– Z#þÝZ –úZ ýÚBå}'73'7'7#'7!5h Zú– Z#þÝZ –úZ ýÚƒ Zú ZþÝRþÝZ úZ ¤µM77#75'73º Zú ZþÞRþÜZ úZ ¤' Zú– ZþÝ#Z –úZ &Bå}'!5!7òZúýä ZþÝ#Z úZ1òZú Z#R#Z úZBå}'7!'7'7!'4òZú Z#þÝZ ýäúZ1òZú ZþÝRþÝZ úZBå} 53#5!5뤤ý4 ZþÝ#Z ƒúýhú Z#R#Z µM %'3'3!5 Z$R"Z úýh¤Ì Z#þÝZ ý4¤¤Bå} !'7'7!#3æÌ Z#þÝZ ý4¤¤ƒ ZþÝRþÝZ ú˜µM 7#7#5!º ZþÞRþÜZ ú˜©ý4 ZþÝ#Z ̤¤µM%'7'3'73!5úZ  Z$R"Z  Zúúýh¤úZ  Z#þÝZ ýè Zú¤¤Bå#(276767654'&'&'4#!5d >b-*,%:0ý“ ZþÝ#Z ƒ  ¤*+(54<852.& Z#R#Z Bå#)!'7'7!"'&'&'&547676763"mE Z#þÝZ ý“0:%,*-11> ƒ ZþÝRþÝZ &.258<45(+¤  Bå#$>2+#5!5!54767676"3276767654'&'&'&l>b-*,%:0—¤þΠZþÝ#Z 2)-019 o #*+(54<852.&ÕÕ Z#R#Z };47(+£ }  Bå#%?!'7'7!#5#"'&'&'&54767676";54'&'&'&e910-)2 Z#þÝZ þΤ—0:%,*-11> o #+(74;} ZþÝRþÝZ ÕÕ&.258<45(+¤  } Bå}X3267676767632267676?'7'7#&"'&'&'&'&'&""'&'&'&#5! !  Z#þÝZ   > >   ZþÝ#Zƒ" *!#$' *  ZþÝRþÝZ  %  '%  %' "  Z#R#ZBÑ‘!'7#5!3'7'²þè<Œ2å ZþÝ#Z <Œ2÷ Z#þÝZßþò î Z#R#Z  î ZþÝRþÝZq`• %7'7]¸Jþ±Qïg„zý=— ZÃÓ„hï PJ¹ÔþV}ý쪷e 5!#” ZþÞ"Z †¤Ç Z#R#Z û•Ç·e !#!'7'<þ ¤„ Z$þÜZÇü9k ZþÝRþÝZ·e !3!5”â¤ýz ZþÞ"ZžÇû• Z#R#Z·e '7'7!3< Z$þÜZ ý|¤ž ZþÝRþÝZ kü9ºR %!5!7#7yþAc ZþÝRþÝZÝѤü‹ ZþÝ#Z?’] !3!5Ò¤üŠ ZþÞ"Zž¿ý Z#R#ZQX€å)7676767632#4'&'&'&7#7K$<9JGTWDL7: ˜%#0(79).%$ ZþÝRþÝZ5NSH;9!6:IFT7/0'$&$2(G ZþÝ#ZQX€å*7#756'&'&'&'&0#676767632† ZþÝRþÝZ $%.)97(0#%˜ :7LDWTGJ9<$5 ZþÝ#Z G(2$&$'0/7TFI:6!9;HSN2Ÿ 7!##5!¸:œãntý’†l':ý’tnã?PPBÖ !!#33#'7!5!'7æ#Z Ìý4 Zþݤ¤¤¤þÝZ ý4Ì Z³#Z ¤ Z#þݘüŸ#ýh#þÝZ ¤ ZXyù6#"'&'&'&547672767>54'&/#7!•J%%%'HD_SlhX[HJ%%%%Jw422-A8;>112-!:œzJZ[ghX\HC+%%'GKY[eg[WMs2=>FD{2,/2{DF>H'ãœ:Xyù6#5!#52767>54'&'7#"'&'&'&54767<ãœ:!-211>;8A-224wJ%%%%JH[XhlS_DH'&&&Iz:þdã'H>FD{2/,2{DF>=2sMW[ge[YKG'%%+CH\Xhg[[IBß}5!B#Z pß{#Z ¤Båƒ!!BMü Zþ݃¤ Z#µM3'#|"Z ¤MþÝZ ü»M#'º¤ Z$Mû³p Z#Bß}!5!'7û³p Z#ߤ ZþÝBåƒ'7!5þÝZ üƒ{þÝZ ¤µM!37¤ ZþÞMü ZþÝGåM!#73å{þÝZ ¤#Z pB|  '7!5!'7 5!!þÝZ üp Z#û³#Z pü ZþÝZ ¤ ZþÝýÊR#Z ¤ Z*§M !737 3'#'2þÜZ ¤ ZþÞýÊR"Z ¤ Z#Z pü ZþÝMþÝZ üp ZB| '7!5!'7%!!þÝZ üp ZüÖ#Z pü ZþÝuRþÝZ ¤ ZÁ#Z ¤ Z#B|'5!!!!5 É#Z pü  pü ZþÝ>ÉR#Z ¤  ¤ Z#R*§M73'#'#'3hÊR"Z ¤  ¤ Z$R„ÉþÝZ üp  üp Z#B|'7!5!'7!5!'7ÆÉþÝZ üp  üp Z#>ÉRþÝZ ¤  ¤ ZþÝR*§M%#73737#hÈRþÜZ ¤  ¤ ZþÞRÉÉ#Z pü  pü ZþÝBA! '7!=!þÝZ ü#Z pß{þÝZ ¤¤{#Z ¤BA! !! !5!'7BMü ZþÝMû³p Z#ߤ Z#¤ ZþÝBå}!73!!!'7#5!!q£Va6úþÒZˆþEV`6ãNZþÝ#Z"þ>RRjÕ¨;mR¤R¦:lNZ#R#Z RRBå¯!!373'7'7#'7#537!7'!þþRRßÈšNZ#þÝZNãŒ|NZþÝ#ZNÂ.Œ9#!RRƒRRöNZþÝRþÝZNž ~NZ#R#ZNÚ þô¤RRBå}!'7#5!7!5!73'7'%!7'!`þ]Va6ú.Zþx»V`6ãNZ#þÝZþÞÂRRþ–¨;mR¤R¦:lNZþÝRþÝZ RRBå}!!5!RRpüâNZþÝ#ZNƒRRRNZ#R#ZNRµM#'3'#'RNZ$R"ZNRSpüNZ#þÝZNüâpRBå}!5!'7'7!5!7²üNZ#þÝZNüâpRƒRNZþÝRþÝZNRRµM%37#73»RNZþÞRþÜZNRRÝpüâNZþÝ#ZNüRBå}!!7/7'7!5²ýmRR“R¤NZ#þÝZNþNZþÝ#ZNƒRRR¤NZþÝRþÝZNNZ#R#ZNµM'77#7'3»SRRSQNZþÞRþÜZNNZ$R"ZpRRýmRRAþNZþÝ#ZNïNZ#þÝZ›ÿÆ6a##7!#Žtn:ýÌ:œn3:âtý’:5pœ:ýÌ:›ÿÆ6a '#5!#5'5Cý’:3nœ:ýÌ:nâý’:4:þdpýË:nt›6›%753!5373·ý’:4:þdpýË:ntón:ýÍnþd:4:ý’›6›%3!'3Žn:ýÍnþd:4:ý’n:ýÌ:œp5:ý’tBå}5!!!!!¿ZþÝ#ZÐüÞw™ügw"?Z#R#ZRwRwRBå}!5!7!5!'!5!7ý0"wüg™wüÞÐZ#þÝ?RwRwRZþÝRþÝBå}37773'''#5:—–––;!\–––—[` ZþÝ#ZƒC­­­­C¤j­­­­j Z#R#ZBå}'7'7#'''53777² Z#þÝZ `[—–––\!;–––—:ƒ ZþÝRþÝZ j­­­­j¤C­­­­CµM%#5#535#535'3'3#3º¤úúúú Z$R"Z úúú¼¼¼¤t¤ø Z#þÝZ ø¤t¤µM533#3#7#75#535#5¤úúúú ZþÞRþÜZ úúú½½¤t¤÷ ZþÝ#Z ÷¤t¤Bå} !553353!þþ ZþÝ#Z »{»ƒ¤ Z#R#Z ¤¤¤¤¤µM '3'#7#7 Z$R"Z ¥£¤n Z#þÝZ þþ}»»þÊ»»Bå} !'7'7!+53#53° Z#þÝZ þþ}»»þÊ»»ƒ ZþÝRþÝZ ¤¤¤µM 7#77'3'3º ZþÞRþÜZ ¤£¤ßþþ ZþÝ#Z }»»6»»Bå} !!#3æ#Z Ìý4 Zþݤ¤Z#Z ¤ Z#þݘBå} 3#'7!5!'7뤤þÝZ ý4Ì ZZ#ýh#þÝZ ¤ Z¼¦ 5!5! !!? üöOþ‹uüÿôÃÃ]Ìþ%uuÉþ¨óÞv 333'#!#¦\Ì^ÄvÊþ¨ÈtPüö ÂþïüÿuB¼¹¦ !!75!!5’üö Âþðüþtô]Ì]Ãþ‹ÉXÉþ‹óÞv ###3!3,^Ì\ÂþŒÈXÊþŠ& üöÂüÿþ‹óÞv 3'335%!!# #Î^ÄÂ\ÌþîXþ¨ÈtvÊàpÂÂþþòŒŒFþèšguþ‹þ™óÞv %3'3#!5%# #3!Î^ÄÂ\È^þ$ÈtvÊÊýÒ~ÂÂý‚ŒŒFéuþ‹þþèóÞv #3#!5#3/# #3!àðJ\È^Ê^|HGeÈtvÊÊýšJý‚ŒŒ~{GGýMéuþ‹þþèóÞv 3#!!5#3# #3!F \È F Ê^þÈtvÊÊýïŸý‚Œ©üWŒ~ýÈéuþ‹þþèóÞv 3'333'37# ##!#Î^ÄÂ\ÌfÄÂd^¬ÈtvÊÊÊþ¨ÈˆÂÂý¾ ÂÂ^­uþ‹ÈýÇ9óÞv #!5#3'%3'37#7# ##3!3È^Ê^Ä fÄÂd^¬ÈÈÈtvÊÊÊÊýȈþJŒŒ¶ÂÂÈÂÂ^þ‹Èuþ‹ÈþßþèB¼¹¦ '#35!7'!!!5 5ŒŒ~ÂÂýÈþèêtþŒ—Éý¢É]ÃÃ]þîÉêÉÉþ‹þ‹ÉEŒF 7!##!#*:œãntý’aüI':ý’tnã»IüFEŒF %!53753!5!lþdäý’tn~æûºüåntý’ãþd&û»IüóÞv #7#3'# #3 3\ÂÄ^^ÄÂÈtvÊÊþŠþŒÈPýÖÂÂ*ÂÂOuþ‹þtþ‹uBå}'0#"'&'#53676323'7'7%&'&#"!3276Å4RvxN1kk2Ow9g' í Z#þÝZ þ™ 0GD2 &þÛ +JD5ß@3PO2B¤B4R,( :  ZþÝRþÝZ ¤11¤/0*§M !#737'#' RþÜZ ¤ ZÂ"Z ¤ Z$#Z pü Z*þÝZ üp Z#Bÿa7!5!'7!5!'7'7!5! üp  üp Z#ÉÉÉÉþÝZ üp? ¤  ¤ ZþÝRÉÉRÉÉRþÝZ ¤Bå}#5!5!53!¤þ¥ ZþÝ#Z [¤qßúú Z#R#Z úú¤Bå}!5!53!'7'7!#²þp¤\ Z#þÝZ þ¤¤ߤúú ZþÝRþÝZ úBå}#53533'7'7##÷ ZþÝ#Z ÷¤ø Z#þÝZ ø¤ß Z#R#Z úú ZþÝRþÝZ úBå}#5##5#53533533Ò¤t¤÷ ZþÝ#Z ÷¤t¤½ßúúúú Z#R#Z úúúú¤Bå}#53533533'7'7##5##þ¼¼¤t¤ø Z#þÝZ ø¤t¤ߤúúúú ZþÝRþÝZ úúúBå}53533533'7'7##5##5 ZþÝ#Z §†8†¨ Z#þÝZ ¨†8†ß Z#R#Z úúúú ZþÝRþÝZ úúúú¼¦ !! ?ÂÂOüÿþ‹uôÃäþÝuuB¼¸¦ 7% !5’Âþïuþ‹üÿôþzÃR#þ‹þ‹#¤¼¸¦7 ! ?ÂÂSÂý:þ‹uµuþ‹ôÃÆþzÃRþÝuuþÝ#þ‹þ‹#%¬Õ %!3!3hÕþV[þ7Ñl nÑþ7²üüRÕþ{…ú+uÿã\ð #&'&#"327673 u ö…B!ÊOœœOÊ!B…þ oôÆcI7™þÍý˜þÍ™7IcŶÿãL 0"'&547632654'&#"563 3276767&#" \m`c²u\6% G¼Gnth r5?£€þÁ,/H@3H5,Yš„:$Ue·¾”˜I+HQ\‡N­,¨öt­qƒþ¸œzSd69->eSY×®l²Õ 7!!5!!5!!²´ýL´ýLkü•ªìªëªú+²ÿ¢5!#7#53!5!!5!733!ýŠšZŠ‹þëDŠþ2þ›/ŠÕþûŠÕú+^^ªìªëª``ªþëýkþìIbŠ£!0?"'&''7&'&54767>2"&'2767>54'&&cv-'''OO¾Ý_@8vcu-'''OO¾Ý_A:÷£GE:;9($(¯ýØ#&G£FF:;9¢cv8@_pm__ONP(-vcu:A_mp__OOP(-9;ŒSPF($(ŽýØ9;ŒPSF'ÿúÙO@*iiiiBùûÔÌ91/äì90KSXííííY"#3 !ÑýþáúqÃûéÿúÙ!#7!ßýøÑhqýúqÌP¸3!!"&63!!"!0",˜ZØþ(ˆè††èˆØþ(\JN*"‡f_‚–ªÄQŽQĪKM€_fªÿOPi%+%3!!"''7&'&6;73#!!#"!#LØþ(0,:£CyEB†èˆª6£'|°>þŽv\JK-".4ú"$:®ª ½1Ýc¬©ŽQı2ªþ#ª‡KK‚_fªf_lF‚¥O]B°/° 3° 3±í±í±í°°Þ°2±í±í°°Þ°2°2±í±í±í01!3!!".>3!!"Nüí=c…Øþ(ˆæ††æˆØþ(…c=ÖªI9[ªÜܪ[9IP¸&'.#!5!2#!5!276767!5  ,˜Zþ(؈膆èˆþ(Ø\JL, üâ1f_‚–ªÄþ¯þrþ¯ÄªKM€_fªÿOPi%+&#!5!27+'7#53!5!3276767!73&'&'…þ(Ø/-9£CyDD†èˆ«6£'{®’þÀrx\JJ. þÓ4ù %: ª ½1Ýc¬©þrþ¯Ä±2ªݪýyKK‚_fªf_lF‚¥O]5!&'&#!5!2#!5!2767ƒ>b†þ(؈憆æˆþ(؆b>,ªI9[ªÜþþܪ[9I˜þL9î¹@ €€ÔìÔì1Ä2Ôì0!#!˜¡›ý•þL¢ø^øâþL=î 7´  ¿ @  Ô<Ä91äôìî990!!5 5!!LñüR%ýÛšý# þÕ‰\—P_ŒüÝX-y×¶ ÔÄ1Ôì0!!X!ûßתXy“!5!!5!3!!yûß!ý›þD¼¨½þCéªûmIªLþ´ªþ·ÿÿfÿB7Õÿÿ¦¯+U þeÿÿ+G¦ÂrýÒÿÿ?š‘ê#É;ÿÙ   /@     ÔÄ991ÔÄÀÀ90'%3##d)#ÛÓ”/þöÝ}bý%¿ƒù¼9ÿÿ;ÿÙ v'uÿe†!ÿÿ;ÿÙ e'=ÿe†!ºúð %.#"326"&'#"&54632>3"3ª8\32#"&'#"&54632¶9[=G[TFBiË8\=G[SDCj~/“[w¬£~S€NA„U}¦„^ˆsˆd†lk€ut†c…jmvÿuÛ §Ôdƒ|kÖ¥­Îs}Tõ!3!Tü*ª,ÖüÔ}Tõ!3!Tü*ªýp¤ÖüÔ¤,¢33# ¤NíM¿þûþû¢û^¬üT¤,¢3 3#¤¿¿þ³í¢üT¬û^¤,¢$476767632#4'&'&'&#"#¤;9_UijªB9¬ KGLV32326yKOZq Mg3OIN’S5dK t]F‰¯;73 ";@®<7  6<Xñy32767>32.#"#"&'XJ‰F]t Kd5S’NIO3gM qZOK?<6  7<®@;" 37;X®yG&'&#"5>323267#"''43OIN’S61-NˆSXIF‰JKOQdSˆP  ;@®<7 Wþ‘"323326X!ûß!KOZq!Sc1NJO’R`‚!t]DŠ¢ª¤°;83$777=X`yÃ!!#"'&'.#"5>32326X!ûß!KOZq Mg3OIN’S5dK t]F‰ ¬c¯;73 ";@®<7  6<XbzÕ'767#"'!!'7#5!7&'&567676ǧfYUE5kIQ%\n*ýx˜rYéQ’MoIF\<[ETFR‚ Æqþà$"B²2(²«þdš«ç%(9¬L5XXÀy$!!!!#"'&'.#"5>32326X!ûß!ûß!KOZq Mg3OIN’S52'V t]F‰جÀ¬ϯ;73 ";@®<7 " 6<X1y0%#5!7!5!73!!!'#"'&'.#"5>32326Qùu‹þ{hq,ùþ‹‹ý„gqTKOZq Mg3OIN’S52'V t]F‰À¬À¬R=¬À¬R ¯;73 ";@®<7 " 6<Xy.1%!5!7!5!7&'.#"5>3273267#"'!!!!'hþðMEþnÐK Mg3OIN’S523J:V›Q F‰JKO!8¡þ!E$ýŸFœÀ¬À¬Ñ";@®<7 î8á32326#"'&'.#"5>323326yKOZq Mg3OIN’S5dK t]F‰JKOZq Sc1NJO’R`‚ t]DŠï;73 ";@®<7  6<þа;83 $77 7=X0yÃ8&#"5>327&'&#"5>323267#"'3267#"/'Ý00NJO’R:G67'43OIN’S520N]Ša91F‰JKO?J4r[DŠKKOdgbŠ£ 7² ;@®<7 !7)þ½32326#"'&'.#"5>323326!!yKOZq Mg3OIN’S5dK t]F‰JKOZq Sc1NJO’R`‚ t]DŠü*!ûß“¯;73 ";@®<7  6<þа;83 $77 7=þˆ¬X•y“7S#"'&'.#"5>323326#"'&'.#"5>32326#"'&'.#"5>323326yKOZq Sc1NJO’R`‚ t]DŠKKOZq Mg3OIN’S5dK t]F‰JKOZq Sc1NJO’R`‚ t]DЏ°;83 $77 7=¯;73 ";@®<7  6<þа;83 $77 7=XÀy$!5!53276767632.#"#"&'yûß!ûßJ‰F]t V'25S’NIO3gM qZOKج¬þ”¬¬#?<6 " 7<®@;" 37;WÝy' %52% $'"51þpþ¶Z¸¹Vý(Iþ§¸¹þ©Ùœ²œ£²þ¶œ²œ£²XDz¾;%76767!##"'&'&'#5!!5367676323!&'&'&i1*+Vá WJRNMR  áW,!::!,þ©á\HSLPM% áþª+*ß%'H:^¨2:A<336G84¨^:H'@'H?Y¨ L=@33/N0<¨^:H'%X`z¾!!5367676323!&'&'&!!i:!,þ©á\HSLPM% áþª+*ý¾!ûß#'H?Y¨ L=@33/N0<¨^:H'%ýäªÿÿX`y& –¹ÿÿXÿéy& '–¹'–¹–ýºÿÿXÿìy'–”ý½& –þo¹ÿÿWÿìz'–”¹& –þný½J.‡Õ 3#3#!5!5Jìììì=üûüû>þð§þ𹬬–ªªJ.‡Õ ##!!!!‡ìììü¯üûüû>þð—þðþ7¬BªX`y¢ 365&'!!5!&547!5!!%43‘448ûß>þÀ!þÉú0IG00GG2ðªª?8>;¨¨_8X`y !!!!"264&'2#"&546X!ûß!ûßIdd’deH:l'**©z{¤¨ ¬Bª¬bFE``‹bq+((d:s¡žvv£X`yK!!!!2&'56X!ûß!ûßæË×ÚØÜÒ ¬BªS—²— ž²—X`yD!!!!73# X!ûß!ûßÖê¢é«¦ ¬BªòZý¦ªþVX`yD!!!!33#X!ûß!ûßÖ•¦«é¢ ¬BªLþVªý¦X`y¥!!!!!!'X!ûß!ûß° TU ÚUÜÛT ¬Bª­ÿžÿŸŸX`y° !!!!!3!X!ûß!ûß–-Éeý“ ¬Bªþz(ýiE`Œ07GO!!!!#"3###535463!3267#"&54632.#"'53#5#"&4632264&"X!ûß!ûß4@#mmC???DíþÐJB&G$$K&aqk[Q_B;18BÇCC?-I\\I-?Ìp`ctiF6A?9iÚýÐ=$#t¾u#g“SS“SX`y*!!!!>32#4&#"#4&#"#3>32X!ûß!ûß."]?T\Y88EQY7:DQYYU;;R ¬Bª¥=:xoþµHOM]QþÊHPL^PþÊ%U20=X`yÚ ,!!!!3#7#546?>54&#"5>32X!ûß!ûßÃffc`--A6(Y1/a3\p$-, ¬BªiÈN2A+,/-7#!^aO&E++ X%yÝ<@       Ô<Ä291Ô<Ä2ü<Äþ<Ä990!3!!!'7#5!7!X‡ö}¤Ëþ²¸ýyø}¤ÉJ¸ýþ¢;fÕªì¬þÅhÓ¬ìXÀyB !!!!!!X!ûß!ûß!ûßجÀ¬‚ªX yú%#5!7!5!7!5!73!!!!!'Gï=XþkåXýËU7ëþÈY‘þ Z:ýwSÀ¬À¬Àª¸AwªÀ¬À¬¶@Xyî 7!!!!!!!!X!ûß!ûß!ûß!û߬¬„¬À¬‚ªXy? (@åä ( ' ü<ì2291/ìôì905!5yûß!üß!ûß¶¶L¨K¸çþ ªªXy? (@åä  (' ü<<ì291/ìôì90-5!!X#üÝ!ûß!ûß¶êç¸þµ¨þ´VªVÿTwŸ 3!!5!5V!ûß!ûß!üß!û߬¶L¨K¸çþ ªªVÿTwŸ 3!!-5!5V!ûß!üß!ûß!û߬Âêç¸þµ¨þ´VªªVþµwŸ#5!7!5!73!!!'5 Êp[þ5mš{*Éþ•[Æý”™y~ûß!ü߬¬`ª¡u,ª`¬Ÿvë¶L¨K¸çVþµwŸ#5!7!5!73!!!'-5 Êp[þ5mš{*Éþ•[Æý”™y£!üß!û߬¬`ª¡u,ª`¬Ÿvëêç¸þµ¨þ´Wy&%5767$'5674½þà[ØÂš‚zšØ¢b¾þ¥ØÁš|˜Û Ûˆ²ªMþþ)I²g#ˆ²ªþM(J²h#Xÿãy %5%%%'áþw2r™K/þ’dÒýþt™äþÙé”›¦Þm0ñx¶Šþ»®·Ëþ‹0ÝoVXÿãy '75%%5%'ð‰ýÎr™KþÑndþ.t™ä'éo›¦Þþ“0ñx¶ŠE®·Ëu0ý#oVXÿ y!5!%5%%%!!'XÿÓÇþôC_þ^?s¡Mþ¤Nªþ#N+ýžP¢êJ>ýžªƒ¨´`5íY¸dñ|¶–ìªó5Xÿ y!!'7#5375%7%57'à™ýËNƒýEO¢>³ë:þÛfLþNæt¡ÐøÎt€¨±ñªó5¾ª²\¶hì}¸˜a5ý…H<VÿÔw?#%#"'&'.#"5>323265wKOZq Mg3OIN’S52'V t]F‰Jûß!üßõ¯;73 ";@®<7 " 6<¶L¨K¸çVÿÔw?!(%#"'&'&'&#"5676323276-5wKHGOZq M343OFGINIIS52'V t]FDEü)!üß!ûßõ¯;3 " @®< " 6êç¸þµ¨þ´Vÿ w+.%"5>327%5%%%3267#"'&'&''}QIN’SEþ^As¡Mþ§P©þ#Bt]F‰JKOZq _¢4þýÕO;@®<7Öƒ¨µ_5ìX¸cò|¶–Ï6Vÿ w27'732767#"'&'&''5676?5%7%5ƒôÊ3—ýÍ;L t]FDEJGLGOZq P32326&%&%5$7$7wKOZq Mg3OIN’S5dK t]F‰JþÝþl”#·þä÷þ©aí·¯¯;73 ";@®<7  6<RþÐO]þÞïÉ—‚9¦=}–ËVÿŽw±*%#"'&'.#"5>3232655%$wKOZq Mg3OIN’S5dK t]F‰ü)·íaþ©÷þçº#”þl¯¯;73 ";@®<7  6<RïË–}=¦9‚”Ìï"]OVÿ[w§67&%'&'5$774£h›m µUéÁ²þÖ ¢¦ÀéGöc _eT§2þªw™ï°nþëwÔï÷ýô2"O0¦Bþ¼j%Vÿ[w§'567&'567&™£h›m µUéÁ²* ¢¦Àéþ¹öc _eT¥2Vw™ï°nwÔï÷ 2ýÞO0¦BDj%X£y_%!"'&54763!!"3!yý½ÉŠ‹‹ŠÈDý¼‰¾_`ˆD£‹‹ÈÆ‹–ÀˆŠ^`X£y_75!27654&#!5!2#XDˆ`_¾‰ý¼DÈŠ‹‹ŠÉ£–`^ŠˆÀ–‹ÆÈ‹‹XÿÄy> #"&'&5476;7!!!!"#'J‰¾_+30TD‹‹ŠÈ~K¡9þºÝ#ý½ K¢ÉÀˆŠ^+#E‹ÈÆ‹ß5ª–ýp–ß5XÿÄy> 32654'&'7+'7!5!!5!237RJ‰¾_+30TD‹‹ŠÈ~K¡9þíFÝýÝC K¢9ÀˆŠ^+#E‹ÈÆ‹ß5ª––ß5Xy%!5%!"'&54763!!"3!yûß!ý½ÉŠ‹‹ŠÈDý¼‰¾_`ˆDªªªš‹‹ÈÆ‹–ÀˆŠ^`Xy%!=!27654&#!5!2#yûßDˆ`_¾‰ý¼DÈŠ‹‹ŠÉªªªš–`^ŠˆÀ–‹ÆÈ‹‹Xÿ,yÖ&%!!'7#5!7&'&5476;73!!!#"$UýrGŸ6ã:qY‹‹ŠÈ²Gž5âþìÜðýÝ^‰¾_=RªªÔ5Ÿª¬ Y‹ÈÆ‹Ö5¡–ýp–&Àˆˆ`=Xÿ,yÖ!++!!'7#5!7!5!&#!5!27327654'&'ƒ92‹‹ŠÉD4VýqFŸ5â3þ²Û ý¼D&#Ižþ¼ˆ`__Ç 2ÆÈ‹‹šªÔ5Ÿªš––Û5ü9`^Šˆ`Xÿ0y!%!'7!5!7#"'&54763!!"3!!yþ§„Rþ è|†ÉŠ‹‹ŠÈDý¼‰¾_a‡Dþ±AQªªÐjfªš‹ŒÇÆ‹–ÀˆŠ^`–5eXÿ0y"%!'7!5!7#!5!27654&#!5!2yþ§„Rþ è|ý½D‡a_¾‰ý¼DÈŠ‹‹]zTQªªÐjfª›–`^ŠˆÀ–‹ÆÇŒ^DeXwy‹1°/°3±í±í°°Þ°2±í±í°/°3±í±í01!!!!X!ü‰wûß‹ªý@ªXwy‹1°/°3±í±í°°Þ°2±í±í°/°3±í±í01!5!!5yûßwü‰‹ûìªÀªXyô H°/°3±í±í° °Þ° 2±í± í°°Þ°2±í±í°/°3°3° 3±í±í017!!!!!!X!ûß!ü‰wû߸ªæªý˜ªXyô J°/°3±í±í°°Þ°2±í±í° °Þ° 2±í± í°/° 3±í±í±í±í01%!5!5!!5yûß!ûßwü‰¸ªª<üDªhªOi‚ž3?2"&'&'&547676"2767>54&'&'3!!#!5!úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FÞŒþìŒþížPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9þëŒþîŒOi‚ž372"&'&'&547676"2767>54&'&'!5úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FÂýMžPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9þÕŒŒOi‚ž3?2"&'&'&547676"2767>54&'&'77''7úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FþBcÄÃcÃÂcÂÂcžPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9­cÄÃcÃÂcÂÂcÂOi‚ž372"&'&'&547676"2767>54&'&''úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:F,cþcžPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9KcþcOi‚ž73#2"&'&'&547676"2767>54&'&'éüüݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:FþÏ¿POO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9Oi‚ž2L2#"&546"326542"&'&'&547676"2767>54&'&'h7b%&'œqq—š§nNL88OôݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:F)'%`8nš—qqœ‡MpLM77äPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9Oi‚ž!'/7=E2"&'&'&547676%&'&'& 654'67676-úݾOO''''OO¾Ý¾OO''''OOfÿ:F-þìTþ1-F:þžþ:E.þûþìSÿ1.E:žPOO__pm__ONPPNO__mp__OOAþÏš9î––FPQþ¼™þÒ9ƒ.™9ë––EQPDš19Oi‚ž!;!!!!2"&'&'&547676"2767>54&'&'+{ý…{ý…ÏݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:F;gZfÖPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9Oi‚ž372"&'&'&547676"2767>54&'&'!5!úݾOO''''OO¾Ý¾OO''''OO~£GE:;99;:EG£FF:;99;:F2þm“žPOO__pm__ONPPNO__mp__OO=9;ŒSPŒ;99;ŒPSŒ;9þIŒPiƒœ%!!!3!!#!5!ôüèŒ3ûÍÒŒ8þÈŒþÉ7õüå§û͘þÇŒþÊ6ŒPiƒœ %!!!!5ôüèŒ3ûÍrýMõüå§ûÍ_ŒŒPiƒœ%!!!7   'ôüèŒ3ûͬc  cþôcþøþöc õüå§ûÍ#cþõ cþôþøcþ÷c Piƒœ 3#!!!éüü üèŒ3ûÍþÏêüå§ûÍXy!!#yü‡¨ýÓªýÓXy!!5!3Ñü‡y¨-ª-úüXy!!5!!þC!þDZªªû¦Xy!!5!½½ûß¼û¦ªªZé/å`¹µÔì1Ôì03#éüü`þÏ›É7 !!'  TS ÙTÚÚS8ÿÿžÿžžÿX`yÃ!532767>32.#"#"&'yûßJ‰F]t Kd5S’NIO3gM qZOK ¬¬·?<6  7<®@;" 37;XþAy 755%5!5X!ûß#þûß!üß!ûßʶþ´¨þµ¸ç¬¶L¨K¸çþ ªªXþAy % 5 -5!!yüÝ#ûß!ûß!üß!ûß!ûßÊêç¸K¨L êç¸þµ¨þ´VªVw?  55!5!wüß!ûß!ûß!‰êç¸K¨LVªXy? 55%5!X!ûß#üÝ!‰¶þ´¨þµ¸çöªªVÿw± $75$&%&%5$7$7¤"±ËþøÞþn³·þäíþŸW÷·þÝþl”ÈÏüÜœƒ8È6üsïË–}=¦9‚—ÉïþÞ]OVÿw± $'$'5%$5)ànþÞþøË±±#”þlþÝ·÷WþŸíþä·š6È8ƒœÜüÏû0O]"ïÉ—‚9¦=}–ËVþŒw)%*67&'&%&''&'57&%5$?7d¢MjT˜VÊ¥©þ3˱þÞ!³¢º£Ð÷¶3Òþòaí4m"cjX)3õS]ï‡[þîe¥ï¹¡œÜüÏÈýÈ3N@È%H£Z-¦=}þ¤k$VþŒw)$(6%'56?56%7$'57&%¢¥š»ÿËDÑ>þ’à¡¢WwZŒ©NçœÌ(þåÛ·+/m")3ýó3 ¦+SØi0È6šþ3hiü˜y÷‡¬ïËjeåïË–ÜXÿ[y§3!!!'7#! !PžYäþØþæBýzržYä†þ¢þh§?ݪý@ªþä?Ýü–Àý@Xÿ[y§3!'7#5!!5!!PžYäýzržYä(ý¾†sþ昧?Ýûìþä?ݪÀªªý@ÀXÿ>yô!!!!!!'7!5!7!X!ü‰wþÒ R`þ§„Rþ ègý±ôªý˜ªfªÐjfª€Xÿ>yô%!'7!5!7!5!!5!!yþ§„Rþ ègý±wü‰!þÒ R¸ªÐjfª€ªhªüDfVþíw?%%&'&#"5>327%5 %3267#"''43OIN’S:Z0ýì!üß!þx2XIF‰JKOQd>ˆ3  ;@®<7 Ò§¨K¸çê¶{ß"327V!üß!þ?E>XIF‰JKOQd>ˆC43OIN’S:Z0ýì¶êç¸þµ¨þí"323267#"''&%&%5$7$743OIN’S61-NˆSXIF‰JKOQdSˆ¹þÝþl”#·þä÷þ©aí·  ;@®<7 Wþ‘"323267#"''55%$43OIN’S61-NˆSXIF‰JKOQdSˆþ˜·íaþ©÷þçº#”þl  ;@®<7 Wþ‘"ø # #hÖ£þÍþÍ£øýGÇþ9’þò>¬ 3 3hþ*£33£þòºþ8È’>Ž !!# #œ™ügÌÖ£þÍþÍ£ŽrcýGÇþ9’>ˆ !!!!# #œ™üg™ügÌÖ£þÍþÍ£ˆrˆrcýGÇþ9Ïþòw!##Ϩð¸ùmZþò##5¸ðøÞ“Ïþòw33ϸðþò"ùmZþò!533þXð¸þò“%–¯C!!3#ò½þCÍrrCr[þ  –—C!!3# ½þCrrCr[þ %ѯ~!!3#ò½þCÍrrCr­þ  Ñ—~!!3# ½þCrrCr­þ Xsy^!#yü‡¨^¬þÁëap$%%$牉þþ‰þñ¸¸¸¸ýøЉ‰€‚ŠŠþ~ýøô±±þ ýå±ÿÿ°Ë œ°Ë%6 %!&'&"1˜1™2ûÀ»*ÀzôzÀ°`°XX°þ rÅoGGn¸Y  67" Ò,›J5þPþP5J­ø…X*7ýú7*#LþÈ8¦åP"2642#"''7&546ÄŠ‡ÇŒîži56Ø]ÌQÍBÖɉLJ‰Ão3…N˜ÖEÌQÌ\|ØGéŠ+-7AJT35#"&546;5#"&46235462+32"&=54&#"3#"2653264&"2654&#ÏÏ‚·YxxY·‚Ï‚¸€€ZxxZ€€¸‚þÉE1/EE0uu0EE`EŸv/EDaEEaDE/¢ÐþÈwZ€\Z‚Ђ¶€ZwwZ€¶‚ЂZ\€Zw u0EE`Eþ`E/1EE0E`EE0ýëu0EE1/EXsy^!3!yûߨysëþÁ+ѵ~!#!µýèrŠ ýŭѦ~5!#Šr rýS;+ÿ޵;!!3µývrr­ýÅÿަ;)3!rýv;ýSþLl4732#"'&'.#"0 ¾ÊPd@7+ hþ$¼TA6?&Hý•þÓú˜|þlj #"&546323250Ç ¾ÊPd@7+ h‰úõ$ýýþDTA6?&Hk-khéiÉ !!!#%!!h\‘þrþoâa þ`ÉüÞ¾"¾¾(ËI  !! #37!#3'ËþQüêþÓ'ÈÈ'þHƒƒþo99ÈɃƒ¹þo!þpþáþâ=»»ýÃþâ»»}(TI #!!7!#3'âlÈÈÞü)×ý‘ƒƒþokkÈɃƒš=þáþâr!r»»ýÃþâ»»+2³Ÿ" #/;GS_kwƒ›§³¿Ë×ãïû+7CO[gs‹—£¯»ÇÓãïû!2#!"543!254#!"+"=4;2+"=4;27+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4"=43+"=4;2+"=4;2"=43!2#޵\\üK\=µüKl]Џ\¸\\\]¦iiüÅ\][]\\\\\\\\]\\]\\\\\\x::f>]ýY­"\þI\\·\\þI·þ`LLMK\y>þÞ>(ËI !! 3#)%3!'¯üêþû-'ÈÈ'¸þúƒÈÈ9þ6ƒ¹üß‘þá»»þáþâ=ýûHÿÓˆJ7 hýàHØØH--JþäJÿ4Ñ¡!!!ríþrÑZ‰ùmø“ÿ4Ë¡ !%!!5!5!5!!Åû­áüáüáüÌmø“rº¬ìªÿ4Ë¡ 3#3#!%!!5!!îõõõõþÅû­áüáüoöþõþžmø“r‡ªXÿ4Ë¡  ! !! !Ã¥¦þZþáþþSû;Åû­ðñüÜþZ¦¦û$ÄþðüÊmü­ðþáÿÿÿ4Ë¡& º ÿ4Ë¡ '3276'&#"!#"'&'!!67632!€ôzzzzõõzzzzüáIw™˜™˜wHSû;Åû­Hw˜™˜™wIüõýÎGG2GGû$Ê_EXXE^ýÅmý¨_DXXE_çþ¢Ë3#%673#&'%676'&1rs˜rs2þÎsr˜sr·ôTTTT@TTõõT|À°Bôþ B°ý@°Bþ)×B)ýÎ1Ì1@ü4121ÿÿtËD& º ëÈÿ4Ë¡ !%!!Åû­Yü§áüžbÌmø“Æ5Aù¸ÿ4Ë¡ !!!!Ëû;Årü§ˆbÌmùY5Aù¸ÿ4Ë¡ !%!5!Åû­áüáüáüÎÌmø“rXˆÀˆaû…eþÌÿ4Ë¡ !%! !Åû­áü2üÎáüÌmø“ràþxý›1éþxéÿ4Ë¡ !%!!5!!Åû­áüî ZþëZ üÌmø“rÏ ZnZ ÿ4Ë¡ !!'7!!!'7Ëû;ÅrþëZ üîáü ZÌmùêþëZ ý1X1üê ZÿÄËÕ'327#"'$%'3632# 6'&#"€ôzz=>þlÏ–WW™˜þÏs¿PYX˜™2þç¾þv”Òõzz>ÜþçGjŒü²X°`O°ú®X°þ þ¯°þéòü•ŒG%þ¢¬3 33!#!!3˜/Éþ˜þ É.öŽööÕ^þ¢ú+þ¢^ÕúÕkü•kÿ4Ë¡ 7!!#xðñrû;ráþc¦/þíû³Krø“müìüåüuÿ4Ë¡ % !%!50!53!ŠþÞþÞþÀÅû­áü‚Ý‚üªyû‡þŠmø“rZ[zú†Ôÿ4Ë¡ !!%!!''!Åû;´ŸþGZ ¤ ZþH¡ø“r‰þìZ úE» Zùw%þ¢¬3 !#!3!###.þ7÷˜øþ7/˜öö˜öÕ^þ¢ú+þ¢‰ü•kü•kÿ4Ë¡! !! 3!xáþþSû;Åû­ž¦üZKû³þ{mû§üuåÿ4Ë¡ ! !%!#5!5!Šý¼"ýžÅû­áþ~Ýþ~áü+û‡þ‚mø“rÔú†z[Zÿ4Ë¡ !7!)!7Åýï Zþì¹ý½þb¸þìZ Ìmø“ûúE Zþì‰ùwZ ÿÿÿ4ÑÕ& ¹ ÿÿÿ4ËÕ& ¸Ûÿÿÿ4Ë?& ¸ çÈÿÿÿ4Ñé& ¹ ºÿÿÿ4ËD& ¸ ëÈÿÿÿ4Ë¡&  ÿÿÿìZå^' È—ÿÿÿ4Ë¡& ÿÿ›É' »ÿ—ÿÿ?Ô‘H' »ÿ8 ºÿÿt˦' »– ëÈÿÿXìyH' »ÿ8aÿÿXyH' »ÿ8!%¬Õ *!%#567!676&'&'&'&ªý|z*(2J E<iKH#&ºõÙGIJEÂ‡Ø Eý¢—|-2 M3 +þO  ! r®;ýŸÆ ?®9yý?pýæ¸  ! Xÿãyð*= 67 '&5677%"632327'&32767#"'&'.#"yÞ{h p{þ"zi piE5 5dJ t]BFþZCEŽF4 Zq Mg3ðħþЮþ°´ÄĨ1®P³$˜sÎ 7%’˜ý‚þÛ’˜˜sÎ3 !Xþ¢y3#"'#&'&#"5>323326yKOGU˜43OIN’S52˜^NF‰z®;7 ü(  ;?®<6 Ïûó'=þáÑ'3#3!!#7#537éüü ü`?þ‡+š¨Æ0'þÑþ7ϺrSSrºÿ4Ë¡!!!!3!!!'7#5!7!xáürÅû÷Ådƒ¢þõ“žýûÇdƒ “þeZ‰ùmø“n;fÕªì¬þÅhÓ¬ìÿÿÿ4Ë¡&" ÿÿ6Ï`ÿÿÿ¾þVT{ÿÿFÿãŒ`ÿÿÿ4Ëy& ¸÷ÿÿœÿ45{& ·,ÿÿÿ4Ñ`& ¹ÿÿÿÿ4Ë`& ¸ÿÿFÿç•y÷þ.·µ !· /Üì/Üì1·¶ ¶/<ì2Üì0#5!!!#áÇo¿oÇþ.Ú­þ%Û­þ&HÿÓˆ:07 %#"326=7#5#"&546;54&#"5>32hýàHØØHþ#[]E>Vcii!fHatŽŠŒLT5m4:j2O85%--JþäJó??8?vh+þš]85l[hmKDg/RÚË: 953353!53!5!#"326=7#5#"&546;54&#"5>32as7sþ9s¡û;Åü·#[]E>Vcii!fHatŽŠŒLT5m4:j2Op"¸Þr§??8?vh+þš]85l[hmKDg..RÚË:1=[%5!!5!#"326=7#5#"&546;54&#"5>32#"326757#5#"&546;5.#"5>32›0û;0´#[]E>Vcii!fHatŽŠŒLT5m4:j2Op""[]E>Vbii"eIasŽŠŒLS5m4:j2Op"Úrrrr??8?vh+þš]85l[hmKDg..R}??8?vh+þš]85l[hmKDg..RkËŠ*.26:>B#5#"&546;54&#"5>32#"326=%=!!%%%5!55qi!fHatŽŠŒLT5m4:j2O85%Ñ#[]E>VcÊþÔ,þÔ,þÔý“þÔ,þÔ,þÔþš]85l[hmKDg/R}??8?vhþñyŒy¼rDŒyŒyyŒyþ¢rr¼yŒyR8~Ï4<DLTZ`%#5&'&'&''7&5475'7676767537'5676767'7&'&'&'5'7'%654šd3/D9±2°°2±9D/3d4.E9±2°¯2°9E.42* ¨¨ *2ƒ2* ¨¨ *2¼©©*©©8Ë8fWfEOPDfWg8ËË8fWeDPOEeWf8g * apÃa *  * aþÃa * ³ba.43•ab-45F^Š¢'04>2".33&'."#67>76#FV“ÊÞÊ“VV“ÊÞÊ“ðÀÁï"v ² v"Z¤Ï83Pv"þÎ¥"vP3ÞÊ“VV“ÊÞÊ“VV“nþ˜h<8PvDDvP8¢þ‚"vP9þÁ~?9Pv"F^Š¢&0!4>2".7!&'."67>4'&hóþþÑV“ÊÞÊ“VV“ÊÞÊ“DvP47þ´9°; ² ;Ñþ´74PvD"MÇþýÞÊ“VV“ÊÞÊ“VV“’² v"i c;DD;gý—"v ²P F^Š¢ %7'32>4.#52".‘®ÍîVþ—FÊýúoDv ² vDDv YoÊ“VV“ÊÞÊ“VS’wþVî—ÊFþ_Y vDDv ² vDoV“ÊÞÊ“VV“Êÿ4Ë¡!!!xáürÅZ‰ùmø“ý𸆠#53Û຦ þüZýðê—â0ýóþ†ýîüíýüÛ‰3#ÃÉösþ¸‰ #5Û“ˠР‰êü¥þWþþeEî%3êý𹆠53öZþü ¦º ýðêz þýýÐþüiêöýü¹‰#0¹Ã‰ös þ¹‰ 3#öàР˓‰êüÍýÛþþ»›ì©[ýü¸m#!!Ûàþ#ýü qÃýüÛ‰3#ÃÉösþ¸‰!!ÛÝý`‰÷Nà uýü¸m!5!õþ# ýü®Ãöõýü¸z3#õÃÃzö‚þ¸z3!5!õÃý`ÝzöšÃ ýêÁm #4763!!"ƺoyºþçeD9ýêuß‘ž°fW™ýüƆ#'&%'53 763ý:*eºnKþû==Mnºe(Á =“þCýè ·_A»Ec³ ýèþH˜< þÁ† 3!!"'&5Æ9Deþí¸{o†ø”šVf°žád ýôÆŒ#3ƺºýô ˜ýêÅm 4'&#!5!2 9Deþçºyoýê}™Wf°ž‘ßø‹ ýüÀ†&'&3!3#76Ô<(eºnM==þûKnºe*Á!<˜¸ýôþMcE»A_þIýô½“=þņ 3#!5!2765 ºo{¸þíeD9†øœáž°fVšþlj3Æþ ‰öw¼v% !!!!55!#Žþ‹u©Xüÿïý ̼uuÉ™ý]ÃÃ]eËÄ! !!Ëû;bcû;Å $û<ø–þ.:µ· ÜìÜì1´¶/<Üì03!3–¨T¨þ.‡þ%Ûýyÿìðåœ5!ùð¬¬ÿìšåò!ùšXþ¨ý–¸È3 ý– 2õÎÈý–È!È@ý– 2õÎÿìðåœ 5!!5!!5!±4üï)üï4𬬬¬¬¬ÿìšåò !!!!!±4üï)üï4šXþ¨Xþ¨Xþ¨ý–¸È 333     ý– üôÀ²ýNf üôÈý–È !!!È@þÀ@þÀ@ý– üôÀ²ýNf üôÿëðåœ 53353353353¼´³´²´½𬬬¬¬¬¬¬ÿìšæò 3333333¼´³´²´½šXþ¨Xþ¨Xþ¨Xþ¨ý–¸È 3333       –2ýÎø2ýÎsÙþ'ýsÙþ'Èý–È !!!!È@þÀ@þÀ@þÀ@–2ýÎø2ýÎsÙþ'ýsÙþ'ý–åœ!!ÍýÓý–¬û¦ý–åò!!ÍýÓý–\þ¨ûüÈý–åœ!!Èþ#ý–¬û¦Èý–åò!!Èþ#ý–\þ¨ûüÿìý–¸œ!5!ýÔÌý–Z¬úúÿìý–¸ò!!ýÔÌý–Xú¤ÿìý–œ!5!Èþ$ý–Z¬úúÿìý–ò!!Èþ$ý–Xú¤ðåÈ3! -ðØúÔ¬šåÈ3! -š.û*þ¨ÈðåÈ!!È@ÝðØúԬȚåÈ!!È@Ýš.û*þ¨ÿìð¸È5!3, ð¬,ú(ÿ울È!3, šXÖùÒÿìðÈ5!!Ü@ð¬,ú(ÿìšÈ!!Ü@šXÖùÒý–åÈ3!! -ýÓý– 2úÔ¬û¦ý–åÈ3!! -ýÓý– 2û*þ¨ûüÈý–åÈ #!!!P@ÝýÓý–ZØúÔ¬û¦Èý–åÈ 33!!ÈP -þ#ý–,úÔ¬û¦Èý–åÈ!!!È@Ýþ#ý– 2úÔ¬û¦Èý–åÈ #!!!P@ÝýÓý–.û*þ¨ûüÈý–åÈ 33!!ÈP -þ#ý–\Öû*þ¨ûüÈý–åÈ!!!È@Ýþ#ý– 2û*þ¨ûüÿìý–¸È!5!3ýÔ, ý–Z¬,õÎÿìý–¸È!!3ýÔ, ý–XÖõÎÿìý–È !5!!#ýÔÜ@Pý–Z¬,ú(û¦ÿìý–È !5!33Èþ$, Pý–Z¬,úÔúúÿìý–È!5!!Èþ$Ü@ý–Z¬,õÎÿìý–È !!!#ýÔÜ@Pý–XÖùÒûüÿìý–È !!33Èþ$, Pý–XÖû*ú¤ÿìý–È!!!Èþ$Ü@ý–XÖõÎÿìý–åœ!5!!ýÔùýÓý–Z¬¬û¦ÿìý–åò !!!!ýÔÌ-ýÓý–XV¬û¦ÿìý–åò !5!5!!ýÔ,ÍýÓý–Z¬Vþ¨ûüÿìý–åò!!!ýÔùýÓý–Xþ¨ûüÿìý–åœ!5!!Èþ$ùþ#ý–Z¬¬û¦ÿìý–åò !!!!Èþ$Ýþ#ý–XV¬û¦ÿìý–åò !5!5!!Èþ$Üþ#ý–Z¬Vþ¨ûüÿìý–åò!!!Èþ$ùþ#ý–Xþ¨ûüÿìðåÈ5!3!, -ð¬,úÔ¬ÿìšåÈ !3!!, -ýÓšXÖúÔ¬VÿìšåÈ 5!3!!5, -ý3ð¬,û*þ¨VÿìšåÈ!3!, -šXÖû*þ¨ÿìðåÈ5!!!Ü@Ýð¬,úÔ¬ÿìšåÈ !!!!Ü@Ýþ#šXÖúÔ¬VÿìšåÈ 5!!!!5Ü@Ýüãð¬,û*þ¨VÿìšåÈ!!!Ü@ÝšXÖû*þ¨ÿìý–åÈ #!5!3!¸ ýÔ, -ðû¦Z¬,úÔ¬ÿìý–åÈ !!3!!ýÔ, -ýÓý–XÖúÔ¬û¦ÿìý–åÈ !5!3!!ýÔ, -ýÓý–Z¬,û*þ¨ûüÿìý–åÈ !!3!!ýÔ, -ýÓý–XÖû*þ¨ûüÿìý–åÈ !5!!!!ýÔÜ@ÝýÓý–Z¬,úÔ¬û¦ÿìý–åÈ !5!3!!Èþ$, -þ#ý–Z¬,úÔ¬û¦ÿìý–åÈ !5!!!!Èþ$Ü@Ýþ#ý–Z¬,úÔ¬û¦ÿìý–åÈ !!!!!#ýÔÜ@Ýþ#Pý–XÖúÔ¬Vûüÿìý–åÈ #5!5!!!!Pþ$Ü@ÝýÓý–V¬,û*þ¨ûüÿìý–åÈ !!33!!Èþ$, PÝþ#ý–XÖû*V¬û¦ÿìý–åÈ !5!533!!Èþ$ÜP -þ#ý–Z¬VÖû*þ¨ûüÿìý–åÈ !!!!!ýÔÜ@ÝýÓý–XÖû*þ¨ûüÿìý–åÈ !!3!!Èþ$, -þ#ý–XÖû*þ¨ûüÿìý–åÈ !!!!!Èþ$Ü@Ýþ#ý–XÖúÔ¬û¦ÿìý–åÈ !5!!!!Èþ$Ü@Ýþ#ý–Z¬,û*þ¨ûüÿìý–åÈ !!!!!Èþ$Ü@Ýþ#ý–XÖû*þ¨ûüÿìðåœ5!35!, -𬬬¬ÿìšåò!!!¸-û,šXþ¨Xþ¨ý–¸È33   òÖû*ú¤ûüÈý–È!!È@þÀ@òÖû*ú¤ûüÿìDåH5!5!ùûùœ¬¬þ¨¬¬xý–XÈ333x   ý– 2õÎ 2õÎý–åH !!!!ÍýÓ-ýÓý–²¬¬¬üRxý–åœ !!##xmþs  ý–¬û¦Zû¦xý–åH !!3!!xmý3 -þsý–²¬úúZ¬üRÿìý–¸H !5!5!5!ýÔ,ýÔÌý–®¬¬¬úNÿìý–Xœ 5!###l   ð¬úúZû¦Zÿìý–XH !5!!!5!¸ý4lþ þt,ý–¬úN®¬û¦DåÈ 3!!! -ýÓ-D„û€¬¬¬xðåÈ 333!x   ðØúÔ,úÔ¬xDåÈ 3!3!¸ ü“ Íœ,û€¬þ¨„ú(¬ÿìD¸È 5!5!5!3,ýÔ, D¬¬¬€ù|ÿìðXÈ 5!333Œ   ð¬,úÔ,ú(ÿìDXÈ 5!35!3Œ ýÔÌ œ¬€úÔþ¨¬Øù|ý–åÈ 3!!!! -ýÓ-ýÓý– 2û€¬¬¬üRxý–åÈ 333!!x   þsý– 2õÎ 2úÔ¬û¦xý–åÈ 3!33!!¸ ü“  -þsœ,û€¬úú 2õÎZ¬üRÿìý–¸È !5!5!5!3ýÔ,ýÔ, ý–®¬¬¬€õÎÿìý–XÈ !5!333xþtŒ   ý–Z¬,õÎ 2õÎÿìý–XÈ 5!3!5!33Œ  þt,  œ¬€úÔúú®¬û¦ 2õÎÿìý–åH !5!!5!ýÔùýÓý4ùý–®¬¬üR¬¬ÿìý–åœ 5!!###ùþs   ð¬¬û¦Zû¦Zÿìý–åH 5!!5!3!!ùü“þt, -þsœ¬¬úú®¬û¦Z¬üRÿìDåÈ 5!5!3!ùû, -D¬¬X¬€û€¬ÿìðåÈ 5!333!Œ   ð¬,úÔ,úÔ¬ÿìDåÈ 5!5!333!ùûŒ   D¬¬X¬€úÔ,û€¬ÿìý–åÈ!5!5!5!3!!!!ýÔ,ýÔ, -ýÓ-ýÓý–®¬¬¬€û€¬¬¬üRÿìý–åÈ5!333!!###Œ   þs   ð¬,úÔ,úÔ¬û¦Zû¦Zÿìý–åÈ !!!!5!5!333!¸-þsþ þt,ýÔŒ   ý–Z¬üR®¬û¦¬€úÔ,û€¬ý–åœ 4763!!"Q[¨yþ‡Y[ý–`¡†¬~|ü ÿìý–¸œ 4'&#!5!2.-Yþˆx¨[Qý–`~=?¬†x¨ü ÿìð¸È 5!2653#xY[ Q[¨ð¬~|2ûΨx†ðåÈ !"'&533!åþ‡¨[Q [Yyð†x¨2ûÎ|~ÿ“ý–>È3mù²ûý– 2õÎÿ“ý–>È#3>²û²ý– 2ÿ“ý–>È # # 3 3>²ýÜýݲ}ýƒ²#$²ý„ý–cûûcúçÿìð|œ5!ð¬¬F¸È3 F‚ú~|ðåœ5!|ið¬¬ý–¸F3 ý–°ûPÿìš|ò!šXþ¨ÈFÈ!È@F‚ú~|šåò!|išXþ¨Èý–F!È@ý–°ûPÿìšåò5!5!!5iý—ð¬Vþ¨VÈý–È333ÈP Pý–°‚ú~ûPÿìšåò!!!iý—šXV¬VÈý–È#!#P@Pý–°‚ú~ûPÿÿÿìå( ¤ÿìþåÿ!ùþþûÿìþå !ùþ ýöÿìþå!ùþüñÿìþå!ùþûìÿìþå!ùþúçÿìþå!ùþùâÿìþå#!ùþ#øÝÿìþå(!ùþ(÷ØÿìþF(!Zþ(÷Øÿìþ§(!ºþ(÷Øÿìþ(!þ(÷Øÿìþh(!|þ(÷ØÿìþÉ(!Ýþ(÷Øÿìþ*(!>þ(÷Øÿìþ‹(3žþ(÷Øÿÿiþå( ¬} ÿìþF( #'+/3!33!33!33!33!33!3¦ ü䟟Ÿüåž ü䟟Ÿüåž ü䟟Ÿüåžþþûþûmþûþûnþûþûmþûþûnþûþûmþûþûÿìþå( '/7?GOW_gow3##3#3#3#;##;##;##;##;##;##;##;##;##;##;##;##Š  žž  žž  žž  ž>ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ>ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ> ŸŸ  ŸŸ  ŸŸ  ŸŸ ûþûþûþûþûþûþûþûþûùâþûþûþûþûøÝþûþûþûþûøÝþûþûþûþûÿìþå(!%)-13#3#3!3!##!#3#3#3#3#3#3#žžžžžÞŸÞŸ þ#ŸŸŸ|  þŸŸþŸŸ|  þŸŸþmÖÖþû÷Øþûþû¶þûýýŽþûýÿÿÿì#å( ¡#ÿÿEþä( ¯Zÿìþh!|þûìÿÿiþå ¶}ÿÿÿìh( ¶ÿÿÿìþå(& ¶& · ¸ÿÿÿìþå(& · ¸ÿÿÿìþå(& ¶& ¸ ½ÿÿÿìþå(& ·& ¸ ½ÿÿiå( ¶}ÿÿÿìþå(& ¶ ½ÿÿÿìþå(& ¶& · ½ÿ±Ëw!ÅNÄû<ÿ±Ëw7!!!xáürÅ$àû®Äû<ÿ±Ëw 3!254#!") ) xäääýçärVVþªýçþªääääýèVþªýèþªÿÿÿ±Ëw& Ê Áÿ±Ëw !%!5!5!5!5!5!5!5!5!5!Åû­áüáüáüáüáüNÄûž ŸŸ?þÁŸŸ ž:ý´“II“L“IIüØÞ¸[[¸ý"¸[[ÿ±Ëw !!!!!!Åû­·þIàþIý×NÄû<š¸ü àýÖÿ±Ëw !%!!5!!!Åû­·þI)·ü NÄû"¯-?33 #&'&+"'&#"/573;2?"#'57#&'#"#567635a)8Ç)kOkaKA-'–= //G)‰ªÝ,Yþ¦=  !H$ /+þHDH)á+) $., f›ŸYYÿúx« !=Z…±Ü Lx73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&27632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5430'&327632#"/#"?#"54?'&5432&5432&56327&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432PO€~ )¹*+'þë)+(@&'$Ê|÷¯®ø|e‹?/A}]\ŠB-7“„1SLoWŽþäþjþã\vLLr%%,* #$ )*n$ % +) $ #*+ý    ? ù'+&þ´()&û(+&p   üò% % +) $ $*+„*EC*Z*,)-)-*,þ%&%&žf“‘ÐБ“fU 5HhfeefhH2Ùpu^èQFs¥£ææ£¥sKQèGþ4 4  22044 22 9     û  ýL%('*Þ%)(*%)(*t     þ144 22 0´r!2CTev‡˜©ºËÜíþ+&'&54?6?6/&2#"/547672#"/547672#"'=47672#"/54762#"/54762#"'=4762#"/547672#"'=47672#"/54762#"/547672#"/547672#"/547672#"/5476l=.%G\&#- Lj.ÄN 0d&K4i¹    }    g    s            &        ‘    þ    Ì    Ù    Á    ÆHƒ5-V"*2¥þ±îíþ±š™û¿-­.ŠøþüøŠ”T<:U'EGE'Dîþ²Nî•””þí–ÖþÓ-Öˆö……öˆU]ÿþÿ\`CD‹cbF]WöøW±ZA@ZZ@AZZA@[[@AZKPrq  qrPGe†ÞÞ†dMPä  äP }ŸÙ2þÎÙ›ÿþ¿k A4&#"26%4&#"326#"547&'&4632 $54'&'&4632XP79NNqOý.N97OO79N'þ«÷õþ«]E‹ac‹DC_\ÿnÿ\U>D‹bcŠEXFDbbDEaaEEaaEDaaþ+èþ¹Gè©„Uò««òUSjŽ©ëë©i LVò««òV‚6›Ê "32654&7#"32?ÉÉŽÉǾ˜þÎÙ×þÎ/Ú`TšcÈŽÉÉŽÈ;™þPþÏ1°2ÓY.£Ë1"264&"3264#"54327&5432#"'&'@Kjj–jiO—iiLKiý÷¡rq¡ rtPŠŸss ¡rqQÜ©ð©©ð©Z©ð©©ðýäTdµþÿµ·€‰IU·þÿ·µþÿ ÿÿ½È)5AMYdp{†‘©µ3/&76'!'47653!476=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.f<‡Ž;Ö.=+ý²,>/Ö;އ»Kyüz~LZ|WX{{XX{IE11EE11ET    m   â  þù  ;  þÉ R   þÿ  Ê  ȇ‹…s@dd@s…‹‡}þ½>}=/Nêþn’êN/=}>þ@‰ÀÀ‰ˆÁÁ‡MllMNkk¶ýéë& % þI% % "!$#  "! "È!!þÖ & %± % & ÉÉ%-5AMYdp|ˆ”¦ÀÚ5#!4'&'5#2#"&546"264&"264"2647>'.7>'.%676&'&>&'&7>'.%7>'.676&'&676&'&753!476=3''676%27/&76'77&'&/#?6'&7ÔliilŒYz{XW|{‰bEEbEd‘  ¹  þì  8  þÁ  @  ñ  Í  .Hxtü¬txH¸%?%5ÈE$„…6  6…„$DÉ5%?%-5!!®1(§ÿÿ§~(1¯ 5,4t4(4Äþ²NÄ4(4t4;¼„…»»…„¼h–hh–à%%þ#%%Ø $ %þ_ $ $ø!"­!$!/!!Š!"þ¿ $ $‹ $ %ê:-,GÙþŒtÙG,-:º XL†¬¢RqqR¢¬†LX ![$n“€[ii[€“n$[!ob !!'!téüKZüùGü•kcÿýn "!!'!##&+572367676hûÿNn_5æ, S Grj3#-EmDûïJü‚~o.(þÉã*!¶4\tR~ƒU…LÚ !!'!  ##' нüCI3ýZ  >þô <þòþõ< þôÙü5ËDü½CXþõ <þóþò< þ÷; ÉYD36273 ##'5&< +ZþÀ@\þÁþ¿\Dþ¼Cýì ûZýäýèYýë\ÿüµ5#,5>~3+&=4%3+&=4%3+&=43+&=4%3+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#567635@)£A({@(­@){A)ÎA(@A(þ^)4Ä 'iOj_J@,&“< /‰/F(†¨Ú0‘'ù&Ÿ‘&‚'Ü'J&¤‘(lNþÒ5  >! )&þV?<?$¥&$ '& Z‡‹N Nƒ‚ />Eqw†!674#!!6?676'4#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53° *üì, Ç 3)="(&)09$) L&TþE` MPÎøAý[M²H üY þŽ þß$ ;—&&e=O%/ ýNÿý ,8(.7L1Rþà»f~H8SQ,zH%9D6 )jGP@ö4€Rjd¦‰_*KfsûDŽIR 9! O  î-]‘&C+Õ/3#"'43727&'#"$472776725676&5&ûU8†Ã)$ tJ .; Çd3fÿþ,"3' VD (ã™ GL/7;;,g ¹t^F$Ý< ŽLD&?>ÄX4RÈ !/# I ?„‰ P?D!)Mþæv>“/¢z2!"&54676737#&'&54>;7#"&546767!7!"&54>3!6763!2hýô!.)g$'‰Ä30ý¹!/&j ! /:(/  )/ 9)/  9)0:*/¢z2463!2!2#!!+32#3#i9/ ! j&/!ý¹03ĉ'$g).!*:0)9  /)9 /)  /(:Ã!!C4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!"'63!67!2e;'þá+ýpCCo þàCCÿ´CCŽ2CCKK<‹LL¹ÿKK%ý“JJ”60"2=2).=<==<@=:>=;TT USUT UT83$ýQŒEÊ!D72654'6#"'4#"'54#"'54#"'675674767#%ª$4:JILLHOKHLKIhghgighgD>-ü²sJ1 b6'SSý cRRþÄ ßSS®?SS\\K¬\\ä;\\þ–ý]]üÔ!AþŠ*>K›Ã!!D!254+'3254+'!254#!'!254!&#!"0!463!!2#!!#!3#3lCC2ŽCC´ÿCCþà oCCýp+þá'qýª=2"06”JJý“%KKÿ¹LL‹:=@<==<=.)ýg¯$38TU TUSU TTŒÿùEÂ!C32=732=7325732'654&#'%2&'&5&'5&'ªIKLHKOHLLIJ:4$üëN->Dghgighgh³SS=®SSÝ þÆSSb ýSS'6a!0J)K>*þŠB üÔ\\üþ˜]]:ä]]«J]] ÿþÅ¿O€ˆŸ®µ¼ÍÓÚÞâæêîòöúþ!%)-1523656;2#'7+"/#"'+"5&54775'"'5476;25'7&567635&56;374765'75'76=4'&+ '"'4!#"'&36365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5775537'7'3533553535'32767&5%2?&#%55'575775775uéo,Mz"060D½/²5I:2'5:ƒ†6 &" *:D:­çS46$.e QÉNþð5  u4MDa• 6ªbUþþP+ ,H;`›I23µÖN5(½ý (#I0·MšÓ '^5%Ì#£¥!:X+‘ "*  þìÞã›6W}W:þuW4 5vŽT ­& /Hþ3Vœ ¾œXD9\SL+&31.d+%X!Q $2``KPPPG[6%# Qy- 6[[3GK[¯»OþÂ`_A[-)$t7ˆ L-$ L6=˜" (CJ#«R"Ä0© :‚~GB{~Eþoj<4S[¿Za LC5 ) .U%+Z&)ƒþÍ¢ ›7e<ILAaMoK33K@G6 $$(& (''&1/----2)( (-((d.'-T?OK8T$ !T3¦(-<((')))())( ÿûÈÓ&2%2#"'&=477654'#"'5473ôt\*eýè OÉ@UýCƒXqù P ýS. P ÓMOŠbý >YÑaYÆ®58Šl7P ÌP@ ÉÃ$0<FX + &=%6&#"3 6=%&#"';27!54767%!&'&'2+"'&=476^7×\þÿž¬þËÕP—¸‡‡ô¿g㑵¾Hþìô‰r©'.)%­sêMþ§éª Mþ¦#ªfþ›C-7!%A.; ÂþÓŽ®þïÎw:ŽÒk‹Kðžþÿ·qz† ¶ü+H*þÖG;M ê² þÖtu/&((A÷A&:+C;."¯/ 8Pi>'67&&&'6.7#"'&'#"'676'773.#'6'5676&&5476'&'67&&Ü07 ^< 1x,B±5þ±@2 JV«Mv!#uA+UBDX[f¹*;-10)..C,·sB#HKU‹ •P‚]12<0üÑVQ‰ Ä}%'Hˆ6-T}^€$k7 R—‡2'Æ7f!Aþ\;y?1!50BEt„"!zkQ;0šqu0\·o‚i:5oP¥ýZjsXFaÀPJÂGl;4ejNÿÿƒ^1F[q‹•šŸ¤©®³¸½ÂÇÌÑü7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656&'67&'6'&'''5$7676'&&'6'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5&"'6%35&'.54>23#67#&8 p +WDTc'H¼ ‚@‘þ¢XO`= Ü ¡;*)8 kDþÿv/P’k-J KDþ°hGaÊ DŠ`–ë÷gBD–ê 6¦¬DDDþŸ ¼=3dTDW, › :gò þ•—j)YŠi#'WtI-9w18$^8;./7-ýI)jS)'#i\-IM91D;8%a7/.ØD=uöRNBR&'%QBNRöqÏ d2 D s9ý8C ["ü|44&3, '2^3ŸR T(B?#'9C- !y ~#Z10>N?$%—Y4 )%FN? ({ Ûusis< 3(&^T05<>7;,#4[:O(vAfG‡EtYB z^~4j #,;b:['~Av@~E‡Q‚ Bak4~_ª¾²H#˜T2 $$$$ 2T˜"`ÿÿqØ$&'6&'67327&#!65#&3Öjjdn¯h ±±wž˜– WþÑV“Ÿ–˜žݱ±ŽqZre¸óóÂ[cþ÷7þ µ®®µô7 cyÿþXÚ ,35'533#3!'#'5!5!5#53!5!5#!!üʶª~~ ”þbˆ°††þl–v¤F þôFþô A<<3ff¢X¯ý苜…þ›‚q°X¢üÏ»GccGap 3264&#!2+73 #'#5# 3m«`hh`þÎ2©®®©«³´þ±`³ÄˆÑ³hþ¶µ|þ;vÙvü¼Ê·±²¶üÂþ“þ}ÖÖääŠfÌÿûÍ33#!!#'!'57!5#'5735 ¶¯¯6þʶþÌ4®®Íš”p˜ü†z˜p”š7šd+!#!573#'5!3!'573!#'73!#'5ÄIx¬OOþTxþ·€þSVV­€dYþ\yþ·vþVPPªvIy¤Y³',32#' 37+ &5%6323'#57'53m¯¦½þð¥Jl{Ë~m@+þݼh4ˆú1¥…4Œ†4ˆ¨'0þþ¾¼>,_ ©ÍvÒNþk±n¥mm±nÉÁObs32732753"'#"'432364'5;+"'#"'53275'&'&54?5572'#&'&547634%476='Ü4&#68$$B )îZµ¶>&A†_;i88u-o1bFGfQ¢_ïÐM5mw€LÚbkj‡I,KòÀ=''8 0##Rm4 üÚ¹+ž¨¯áÜ´5!PP"4\=Ñ»œ¸þèÇŽŠ"8Q¥Ã½®<½WTÚ¦9[”°&¬”BCŽ›(Ægÿùj[T_g2#27654'73&#"#'&'#"56='"'46'4#"4735#5&547/63654'%654i=Ku/3¼noƒ|s׉nI3n ';6WN`fI:% +KkÑsÅ:om¼ÛP½|@R/%S <…[Er*JKN·ZEnv‘¶¢i˜íþ÷þâ )‡%*6&Û-ŠCl67jG‡V°"6;›%Ÿ 2Ö™p ç–+nEU»¯_rBþ(†Ea€LtD:•j[~^9šŒÂ"22#'#"'#&'663327'#&'756=4'&+"6«¾©xdœq•…¯‰sÑ¥[šy®W—¼ãe¹6Êo`Oa‰!¥ˆ¼°ys•`Mþk{eK[®ef â ‹™ OmÞY<0}¶  !432#"767 654'YôõYþ§õôþ§x_Pšþ툋—K¡†þÙ\Yþì¦QõZþ¦õôþ©Wô´_‹bþíýñŒåþYþäXÁÄþ¡Ãº(432654#">32#"&546324&"26%#"5432ižtv¡þ³äêþÇxsŸq1"00" 0ýÍ/B//B/#þ úúþŸaúú`ir›¦|àHþÇúŠ›!//!"00""00"!/0 úþ¡_úúbþž ¨¶#>DJPV\bhn27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'ê&$h%$%%34$&þ1++XSA N@`˜==Žk>P CRX++XYC P>kŽ==l?L ?Q‹ oL+ NnþùŸ;PÖ?ýüÔ; @ þË nMþÓNnä3%%%%34%&&%s==`?J >PW,,WW? K?_==‰f?H?PW,,WU?H?^‘êÒ<…›=þ¡…Ke+cLþ« mC¾†P`kÕ<—<!¤°4(0847632#"'&7327654#"&#%#&7&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ó¤=6 5N'V[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿ÃˆˆþÞ ÌþõʯX[V[X[V[!¤°4(0847632#"'&7327654#"73$3&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ѧ=6þóþý3QNV[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿Ãˆˆþw Ìþð Ê'X[V[X[V[!¤°4!)47632#"'&%#$''&'6%&'6!««ñ󫪪«óñ««4>;D@KDzcngkþ?dnhkê󫬬«óñ«ªª«íþ½Iø Ökpinipi !¤°4 "*2:AIX3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==¼,Â/ý¥Å0œ#¶¨H ™8&O”6ýã þ÷|þò7iY0Âþ6.Á/¤==e6a&i1r4þîz0Ç1¹Æ2œ+ްK“Nƒ2HŒQÖ>>>>Ûf^2Æ"/Æ1]þîÓ8`1"Y 4f2yœ5Æ+ +"'5$76%&'547327676=&#;… hþz°­0/O{™þ·†[’(Âþ´*TœåQþ«¡›ÅþªÃþ~ý`N®ÇŠÜO =ÂþþtäR–ð[\ 8d•<ß+% &56;2'5$%75#"3šþvþîhŒ²²0.Pþì~šNˆ^–(þ8P,V èRZ¤žy­ÆˆcO±ËþõþpáO >Åí‘èS–õ\^ þÂþüf½ÿ`«1B7#5#53'&'&54767&'&=33676=3#327654'&O&"}|f‡ÌÐz¿¿‹g}}"&&"}†UQn$mQU†}"ú$nQUVV{xVVUQ<"{³±u^Å^¿À\Å _u±³{"#|± zUOOUz ±|#YOT{zQPPQz{TO‘ÿ›@>)4'&#"3276&5476327#'#53'&­`_„‡__¾‡„_`ýo‹ŠŠÅÂŠŠ‰q“ßä‡ÑÑ™k‡]^^]‡†²YYÁÃň‰‰ˆÅÃhÙgÑÓfÙ‘ÿ›@> '"3276'&'7#5373'#"'&5476j‡__¾‡„_``_ÈÑчäß“q‰ŠŠÂÅŠŠ‹q¥YXþòº]]XY†ÚfÓÒhÚhÃĈ‰‰ˆÄÃjš¼0 '&'&376&+"'&5'476%7!¢Z{z[ZZ[~\Yƒ¶¹‚ƒ‚²²WþÞm‚pþçN#ZX[þ[YZ[öþP€€·¶ƒQmþ€p#þïT²±G*Š®52764'&#"#463233#!5èsPQPPtrQPŽô­±yzgÖüLQQäQPPQr®ö{{®Ÿtú|gŽ®*#®"#53533#632#47654&#"#dd¨¨i§qq„CB’igIIuªªþ“gzy±UØr}ppDt PQsþ_C…ŽS 7"27654'&7#"&54767##53#533333#3##h. @\ ! 2(>>?ZW~>'3íûûí|íú}}úíË! -/@ /- !^'?XY??~YX?(Fþ˜}R}þ˜hþ˜h}ý®}hL……S<#5#535&'&'5'73'3#'73'676=35'73'13§|‡e{vw}wwUATwx|xxS@Wwx}vv|dˆšš|re{±Eus~~suE|VAKtrrtý¶@X{Ius~~suI­{dr|×*ú®! #!!!'!27674'&#ß_í82þ½Vý)‰3{D™#M®ÅHZûWýÏ{s{þ?zK›8¹! %#"#&5463 67!2#6#";Íz\)MaBuh __ itBaM(]yÍ ¤þäŽtŒt¤ý[+##+¥¤tŒtŽý\ýó5ÿøœÄ."264&'67>3"#"&54767&'&#52hqžžáŸrd:BJ|^€d#!pâ¡ âq $cƒ]7A;ºªñ©©ñª{26”ŽXÿY "z¬¬òò¬¬z" YXŽ”62 ¶Î&'5 %$ 56?6'.ˆ‹j‡‡þéý–þ拈|½½½½*xIIz'ü¨&|JJx, F42$8"3264,'5'&54632264&" &$#"&547>ÈœmmNMmþ©ÿþÕ}ÏÉ l¨yz©U<ÊþMnnšnmê+}Ïþ7 l¨yz©U<Ƀ|²||²þ,&(uO#eœŠÂÂþíaHGŠ|²||²|Q'(sO#eœ‹Â‹‰`IH=ÿý”! <>'.463227#"&5454&#"&'&5476766&D„9‚BB8ÍÄž—Àÿv?W:pbW~ütp„) "-ffÉ)-gtpQ@3ƒAA:ACj±Â›¥þGžmN?ijb¯¦«v‘ˆr56WÀGe((Wi0154d)-?Ã/þê¢6?2>32>32#&'567'6'#4&&#4'3>64&"Á-S‹5,9"\0+Fþôgv!4u|‡W")^,k ikdSò¶!e˜b[Ÿ€¨š_[±ÑþÇõH”|NYC¦Žò¦™ý:ÂöR®¤ýHB’’=†Gý`þS¿”nžUµ|ê#!!!53&54632!!5#67654&"U'ûÙŒþtü0·„„¸0þZ =y­y= :…]†Zs¢ãã¢sZ†† Jjk••kjJ 2ÿfŸÆ4%353'5#"'&''#&&#4'3>32>32YE;<ˆˆ<‡-!&Y*dx cf_Oz.*O„2)7âZe`Ž`b<`°£ýíW¸¯ýušœAL™¡h`©ˆ²¤ýû8™Ç!5!1##'!5!Õþ_drÀrý•Pkþ^K{Uý¾ÇÑý¾Æý_W¡{¼Ï'/27632#"'#576&#"4'5267>327&'"2XCZŸd}uud$gqŠ~dV)40„tlx„!&%"dLk„ƒ}Îý:µ›UwŒmƒ±a4 ˆþsªÐ—O¶â¥HK{ü×w¢Y@x® A63276327632&"'&#"'&#'6327627632&#"'&#"'&#'YçR #{=('%{XNCEz>O&z>'(#ó&çR #{=O&{YNCEz>'(%{=('#ó&ˆÀee22eeà$Él66kd23dÉEPÀdd33ddà$Êl76kd34eÊE^s#!5!37!!'ÒÓó‘ þýþô‘óÔôþôþý ‘ôLþØþç3—4þèþØ(þÌþñ—þðþÍ(CŽ€ $Td67&'&"!3!67>54.#"!5&'.54>325467675#53533#63232>54.#"3'8xpA?9l9>@q<;9'þ¨Dý} 5RT—P=: SSPSS ;r>>p  p>>r> !þAèèþÛ% )–RS—Q1 )6BB6) 1Q—SR–) þÛp  ""V{zHNRh|¥»&'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32367>4.#"323732>4.#"327>54.#"732>54.#"©I )),·(?)(#!3()3Ž$))BGÅ!(( K{ýmgŠþêŒ,ý´;±îh IXI þîL$  ãP   H''1þ|G''#ýÄs%'')ý‹7$ ''A ýìŠ ''HþžþT¬Ý¬9.¡%~~ “þrFýÃ)ý¼~ý— wpa!'-23353#3!53573#'5#5335!75!!5'57!íò–ìePPeüeQQeè•DüpáHý>H@²AýΈˆŽ~ƒþ‚}}…ü„~Žˆûœ00mrTTrýÇeppe-Ýþ!ÞÿøóÅ7CQ^&54767&'&'5676767&'&54>32!535#5##3654."!2>4.#" 1""#@%@#!@% ?$##0 çüíÞÜa…1%?E?%4¶þ™,/--+D,/1+ 4;AB<>"  "#>"">#"  ">#10$ITNnVB,þ¥ Çþn ?%#Najiþùý-/‚ö4^t&Aê«Ycgbá3%' þ»+ ((NV8OQÄ¿>:<uyúg**œ5 kœ5h P[32>4.#"732>54.#"!5&546767&'&546767&'&4>32'&'.#"È+L)+L*+M)(LH     Äüã> |n @: !:;! 8An} E04¸`a·30ØTL**LTM((Ê    ü ++xÜ: 8>>q ?9 9? q>>8 :Üx++c^UZbbZU^jÿüg% $TdhyŠ47&'&";67>54.#"!5&'.54>325467675#53533#63232>54.#"!57#&'.54>3234'67632#7$5oh<:5ôdó4:;i865%þÁý«1MNJ96 MMJMM 68JNM0þv    +þ0’Ç +/0U-,,¬+,.T1/, Ƭ9j9:h  h:9j9þa××þð &ŒLMŒK- '2==2' -KŒMLŒ& þð1  ý©ŽŽ“V//X//X//V6›ÅHLP&'4>32"'4>32&'4>32&54>32&54>32#!5!5!M ,,.Â*C,+%š#7+,7–%,+ FKÑ#++ P‚ýDý²Ný²AM**4þd;K))$ý ›'**,ýdY&"**E ýÌ£#**Lþˆþ:Æ¥??ò@@”=Å%)5!5!3353#3!53573#'5#5335!mýøDý€Íá‹Û^JJ^üW^KK^׋ü²²LLüæZZ,}}ƒuzþ%yu„„u{Ø{uƒ}ûë--âïÇ4@4767&'&'5676767&'&54>32!&7535#5##3ª 1!!#?%?#!?% >$""/ áüõÜ_ŒŒ¨1+ 4:AA<="  !#=""=#!  "=![1”=%T e >6.HC'L"‹'G€ þ×üá12Œh˜„[FHå¸`[$%okß+*8þd .øNëýcèv[Æ.7&546767&'&546767&'&4>32 †w "E> #@!!?% =E!w‡ ./‚î@ =CDz" E>"">E "zDC= @î‚/.€…QO##"'##565'##"/547?kM±Ã …,4N"D±F &Fi™?šJO‰ãä/FB!‰O¶ é{|êIm¬<&–§=ˆ…ÃM2227632#&547636=4'&#"#4'&#"=³` ]Á¬d¶þŽ2þ c¤B¼«†ØU›;/ÙG;SœXMâB:þ®@B Õ½þ;7h’–­f%þÐ ´»þ#>…|Ž\þ@¬¸’9‘…@O &&5 i×þC þn:Õþ^¥¦þ¨Oýžý¹ G  ýÞýÛ%½2…ŸO7236;2"'##'65##"'&5476;235&'&=476j°S c1=EÃO¬ ;ÇSC«FRÊTÊ6*F@E1°;Oº+.`„1¦62¨V âþæYiä¦8/ÀD ;8[B ¥V†RP"<B+"'##565#+"'&575477;2732;276=4'&3&'"ih;F”(wQ"D±G".FWƒC©ïNfþêBy" bO–DUq5¦½u4  P¹þˆro¬@ ³ æ|ïS`64 ¤¯'<¤þ·kn™,³:y‰!‘ªìü@JD …ÆO2367632#&5476;§_#KYo¬h«þMþ2ФEOÁL)…XY¸D<κýö6©³­f%‘…@O &47iž9þ) þ2\OýçE ýŸ[ r1† V2`g26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5m¦V^2"ÌL ­<ÆTC¬FRËUË7* 2Q±;Æ‹ XaÈ2p2@­^ DJ‚ŠF Ð,aXj™-!˜DØ2V©9/mˆ±.0­R ãþäZjæ§9/ÂC \‘ §Vþ ¯7yMó5bomœ&#·'p[?$–G¥üOQ.£Æ,H3#&'&'&6%3#&'&'&63#&'&'&6 $&54673 >4'&'~ v¥ …' Š w§ „( Š w¦ …' Š$ˆ›–þïþÙþï–šˆk=Fˆõ ö‡F>jG3~Pjb¤‡^*IerÀNÀ{ ˜ùÌ‘?qš®JAŸeƒ}Ωv6\~þx(ONPPNO(!8?ˆ|EE|ˆ?8!r!_ª3#"/4?23D¹-!ÈÇ]UªûFš+}{<Ž¢!/ª3#'654'&'#"547326R£ãs9×WÔ5åÈ[Sª%3;Bƒ‰[/OBC'ü*ž|<jÿ_g¥#"=4?2%#"=4?2ÙŒµ3ɧ%QMýûŽ?Ë )TK¥¿û7’(›w7ÑŸü5’s ?|ÀO"'4723!#"5472!5½ÖÀÀYAý>ÇÔÂRHIÂOûó°‡q 1 ýÓ«‘g 4ª€€D%® 3363'$6'"I+¡ˆ×ýÔ4‹ ˜p®üuàòþoS‚üþ±^£±* ¯ 3%#'#3%#¶';&þÂ2 ¯þI˜û¦Ê—Hý¼þ“‡j7*š¯(,377#'#'547#5773%%ö,ppsr,þð'zzxz'þð¯þá9…8þ 4€?þè„þ¹/9†9e5ƒ>ø:ý¹þœƒ_`ÿþqE#&#"'5654'5673;54'56732733273+&##&"#&'565*”ŸG1 VV2Iž“s3'{'3sžI1VV 0G s3'{'3s­P3+1='3s™ŸH1WW1HŸ™s3'=1+3PþˆŸH2WW2HŸ.ÿð£ ;G7567&'&'3#6737'#&'7#&'6735'67#3335#5Î*)SR))þµ&*&';((:'&)'ȶkk¶Èn\\[[nȶ kk ¶Èn[[\\n`ff/ee.((&(;((:(&((@))SüÈS**˜n\][[oþ„¶ jj ¶|o[\\\n»· jj ·e‹(þ°P(‹ /ÿû¢N#.6CMhwŒ—¦¯!2732!'5675&'&=32#&'567637&/7&+"+&'532?4/%32#'#&'&=4?#'57335'3!273+#&='#"/547354;2?!&=35-,;K„þ÷>Ž #WU*† åy "ÑššHV ýηz/;@"¿q=o ‰)we)$I­ýÅY'L‰ „ALaXw˜Hå ••ƒ>ãX%CÉII°$PþÌþC/DÎN6g+å ø b%ï ƒ×#þñ ƒ – æjÕnNË Ð :3ò ÔO+5{bQ¤< ,ëåd- –Á ƒåXÿ]Ü ˆþ÷f '^ ƒ‚J‰JA!Ó< •8 2E35733!&54?'7'7!!"'&%#'73676'77'7'&'676Ü}ˆ“]}þžþ =-«-HW(þŸ7*! >€yšš*1“c±ý½{F=.«,H-.'”d°(#Y+Gþ‹C†8957jN»})%%tGl5nm3(,H:þÎ0/(_ki¼N}!Nÿ920K †1DW3!5>7>54&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676@òþ‰.’#5*"I?6O"[m" cýå<,§+GU þ¨5) ð<|w••)/a­ýËyD<,§+G,,&‘a«(!>B<#q'%NG91 Mè7835hL·{'$$qEh3kj2'+Gú8þÖ/.&Hgh·L{ Lú8*/D *(=Pc#"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676öD|q%N24H'CB=9PS3464E>6O#]o<ýk <-ª,GV$þ¤6)"þ=~x˜˜Ž*0’b¯ýÄzE<.©+G--&“b­)"í<+BI N $% $B G @6%6þ¡7946iM¹|($%sEi4mk3(,Gþ9þÒ0.'Sii¹M{!Mý8//$­d "5H333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676¯¯‡\\xþÝþè"@/³.K[5þ9+#9A…€ŸŸ—,3šg¹ý£€J@0³.K00(›h¸+$wÄ,þÔHmmIþÞ;<79oQă+&'yJp7sq5*/K <þÁ22)…ooÄQƒ"Rþõ;@2> “32EX!#2632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'676ÊHæevyn$L27C'€y™™*1“c±ý¿{F=.ª,H-.&•c°)"¸ERUHHS S /(*. þÈ8956jN»~(%%tGk5nm3(,H:þÏ00'\ji»N}!Nÿ91/K† "7J]"3264&7.#"632#"&54632&54?'7'7!!"'&%#'73676/77'7'&'676]'00'*//l+2>AB(S`dT^dyg7ý<,§+GU þ¨5) ð<|w••)/a­ýËyD<,§+G,,&‘a«(!Û.T--T.ÀH D&RECSukf{ýÜ7835hL·{(#$qEi4lj2'+Gú8þÖ/.&Hhg·Lz Lú8*.- ¤X.A!#!&54?'7'7!!"'&%#'73676'77'7'&'676²Ìn¿þúþœ!?/±.JY0þ•8+"(@ƒ}žž”,2—f¶ý¬H?/¯-J.0'™f´*#À&þK”þ:;68nPÁ*%'wIn7rp5).J<þÆ21(vmmÁQ"Pþù;:1-¤K':7&54?'7'7!!"'&%#'73676'77'7'&'676N!?/±.JY0þ•8+"(@ƒ}žž”,2—f¶ý¬H?/¯-J.0'™f´*#ˆ:<68mPÀ*&&wHn7qp5 ).J;þÆ11)wnlÁP‚!Pþø;;19ÿÿ˜9'9HR!273!567&#2&'676+&'67'#'6765'533!273+#/#"/47$,7Jv þÿI” MO $Ép%„|I ^ ƒ—ý[€T—<K«"(–™~GÙW$?8?])Î( EA÷sÂ#þÀÐL, ëTØ 0ø ` +þüWþûVÛ„þÿ`$$a.£|%2<J\e3 + &=762367#&'&#367&#&#"3274/"34?3'35732?5#+'535^-¹JþÎ|‹þ·°@ñ‘h'\-Öe@<þ¹r2&H); èuZJM üÍ=9jl:j€gbƒ.Qñþi2QÀ|þé…þ¶³:*}( ¸dpR·!h Üj Ä`]_©Ìi$x:-(^%±,3½"¸Ø¿´Ea‡ HMP EÞ7šg /:BR`j # &5%6; 65%&# 327#57&/#2#&'676+'%3#'#&/47'3327##'%3#"/6j1²Mþã{þÇ®G&€þz v$¬EþðxŠþݨEÅë(+=RÌ:n:D!s« Y!úgQKuý¢Ïm;} uA;>õ‚eþçá¸=gþñ†žþ¯Cy¥?°?ýÍþÔ¢B|“*¨>þüw4I ™'¿ 5@Â`  þý©bÇC·$Ð Í j$ÎHÛ?²iÏM!%.£|7H27&' # &5%6367&#'.7&67263'#%; 65%&# ŒmJB|…e6´OþÞ}Ÿþ°I+o|BJn‹þ›^jaygwaaygxaj^ýåw‚$®FþìyþتFGœ›”¢þ퇢þ½±D{§C´?þ`”›œ’Í– “B]w‚‚w]B“ –JþÐ¥C}–.«?þøyP%.232#!7&!"4#".54767267Œ†pñ ñ … {u*ð‚þ_ J¹cllÆm8*#I…‘„%<($|Ê€Xþ¤#{NwÀtû7mÅnld4)¾5:I…IIB“,<•_4767632#"'&'&!%!!ÿ  þ>Wü$`ü 4 ýñZû¦|b<•_/374767632#"'&'&4767632#"'&'&!%!!  Ñ  ýUWü$`ü H ô  ý Zû¦|b<•_/GKO4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!  è  é  ýUWü$`ü H     ý Zû¦|b<•[/G_cg4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!  Ñ  þ/  Ñ  ýUWü$`ü   þK   ô  ýZû¦|b<•_/G_w{4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!  Ñ  þ/  Ñ  é  þ>Wü$`ü   þL   ô  È ýñZû¦|b<ÿü•V/G_w“—4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!ç  þ0    Ñ  þ/  Ñ  ýUWü$`ü +    .  þ    @  üãZû¦|b.£t )2 $$ >54.#"4>32#"&hš–þðþÙþð–™þ˜…ðð…‰ð€ò‡¹..--t“þîþÖþò——*“ýÆ„ð„„ð„ƒó‚‚óœ2..2/.£y )62 $$ >54.#"4>32#"&$2#".46hš–þðþÙþð–™þ˜…ðð…‰ð€ò‡¹..--ýæ1.-.y“þîþÖþò——*“ýÆ„ð„„ð„ƒó‚‚óœ2..2/¨/2..2/.£t 2 $$2>4.#"hš–þðþÙþð–™²-..-t“þîþÖþò——*“ýf/2..2/.ÿö£j '2 $$2>4.#"$32>4."hš–þðþÙþð–™²-..-ýq.-.1-j“þîþÖþò——*“ýf/2..2/y2..2/R–7!!R-ûÓ–R–7!!%!!R³þMz³þM––ÿþ;» 67'&/#'3#67$#%‡€×¯¾ÒP=Û=Ͱ̼çþb’N+»#ð!f"K++!|o5ý›<É?þ1s^#'3#67$#¶BìBݽÜËùþBTð..#…x:ýkAÙDþ 'ÿÿª(''7'777'77'/'7%턌„!bƒŒ‚ì탃a 2Öì~ãƒÀ€~ÀƒáÄï„…b„Ž„ïî…Ž… bPþæÜðÁ„ää„Á²ÓR32>54.#"##"'5##"&'&'0!5!5&'.4>32!!676767'7'ü :!9!"9 :!¸ ‰ûF GùF;kY_þÏ1278e56d:81)þ×RLk<GúG E~^ÿ : : ; ;ûåNG 5 e4G( Li) enf77fne )iý¶ (G4eþó5 G( Pm 9Y%&'%67&673&/'67'&'"&'4?&'37' '7 &/7&'#>7$ü±%8Ð8EFu/- 6uNDL2·¶2LENu/80uFD8ÑþjæçþU½þ4þ5¿ïB%y…\AêÌ@Y„y$F 0=/0 Ÿä,-X7ˆ0 ;~*2 %ÚÚ% 2*~69ˆ7X-,äãoýìoþ ýò ýôþó+F9d1 ) ð( 1d9C1¼ÿýì*CT'&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>32”D$ú "¶ž@FÆþèª,þî¼ÂNNNþvÔF8p^Lb2 òþ– þØN**µ+ û”B@0"AR/0?wA·%od/D&3.YaQ/5#3$"þ´þuŠI' @3/uŠ= =#n- .... ¾w3% % 32+#".7!"&'&'#&=4;73737€ÏÏÏþDÏÏϯ *‘Ï$#‚GFHÌýúÍH‚%#Ι+¡(&½aa½'Ämý“99mý“9ù ý•3.055_4iý—4_550.3k  #ttòòt»k"632&'.'#####ÖŠv)%—8 _^¨>:k{•Z¬²G_?×gÖ@`H,>|:=+,j,,<†6O/2Ù33þþ<bþžbþžÄJÿý‡ 132>4.#"367#&7&$735&'.4>2Ï,P*+P,.N+)P¤…Æ—þd"/%(þMM®Ø~95DLM‰‘‹NMD2)WN,,NWP**þgˆ¨!ʇ„wÖœs~ × ‡&ˆ—ŠJJŠ—ˆ&³Ó?GO277''"/&'&'7&'&'7&47'6767'676?  6"&462EG#96\>42(p __ p(24>\69#G#:5\>42(p __ p(24>\5:ÚþÙÑÑ'ÑàNmNNmÓ€ U%4m+3 EJ5:6JE 3+m4%T  T%4m+3 EJ6:5JE 3,l4%T €ÿÒþÙÐÐ'\nMMnM* §? !&+05:?DP‘3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654&'5&'.4>323#67#&#"'5&'&547&"'6%6761´a$O` "NiB*4l,4"U47),3(üà$aM#"aT*BF 4,=44#Y3,)ý0BB0/CBO"!-$F$FJßF1.#- -#-2MßJF$G# 8<g7*!2U6J%n=_CBnT‡> rYw0d "*7]6U$u=n;wBLz >‡\e0wZ3C.1BB1.C(N "%""%" M#p.PA.$ý;QW¹$.AŽP-{ "R Ç&.FRŠ–ž¦²ºÂÊÖ2#".54>&'767&%76'&''67&'&'&'67676547676'&7>3263'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&h·@9h),)RP| ˆ |PR-*g:>/**Y&()((')&&)')(()% @9f+.TRþ"`33`Š\_ .np, ·Œ00441/‹¸ ,pn, ]]Â&&()&&EEEJ03þÙ2WyQT.,d9@.**..12®30IDE%&**%&F¦°+.SEFE.IMMI."#FES.ˆ !  ";-0.--.0ÙIM+.REF$$‘œœ‘1.%2S_`Q2%-1OQQO2-$3Q`_R3&.>ƒGIIGƒ"" 7447#.$$FER/+L"  !®75/57%"€IJJI€*ÿþ§ )p~Œ67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"72#".4>š"0'-, )*ÿ#'0£5%"ÿ*%%, ),,"èGNY ”I'+""$(J“¡YNO21, 9,4=SM:7,: -12-[¥[Z¥[]¦WX¦þI‹OM‹KL‹MNŒ2Ž“ Y{•\ b³CWDJgABcp7L^BML0”b \•u]! “@R%KlhhO+wÕÕw+O hhlK$PZÀX'@D 0:)ww*;0 EA&XÀZw´¥[[¥´§[[GJŒ˜ŠMMŠ˜ŒJ"¯( %3!'#!52#"62#".54>o:û5þ(·þ67%'$(ûánüª HŠ0þLº*ýçˆI"33'554#$/* ýÜPRüÆ 6hþÁ"þ&>I >ýª >A>óߨ!!®u¼¼þ‹»Øþ‰ûŸaÞóÁ!&5476'#5!+ÈÁþ{ÀÈh_aö6‘ýøŽ6mHHm.r£óZy™'#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&Ë—Pz  ,D@   7;+  23  M9£8G þ)•ý:       Ö        r‘         0   L:5’U    ç    .\£ rŒ26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&¬#  #  @Ò!R<¥þíOq< ; 3@M JC3 ; 763276;%326767654'&'&'&#"6767654'&'&'&#"32É““Í E7Ÿþñ9E"  21 +96  >B+  # zOþo       ´       ²Ž49D   /    "    :     þ      =J”Zx–´Òþ-4H67&'&'&+"'&'&'&4767676327632 #"/#"'&'&'&54767676;276276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&4767628?.  !  !a=ð›?^'þ¡_)\?›ð=a! !# "!.8?¿""  "  "  "   f  2 .?E ‚S¡@6•üf G=. 2  Å•6@þˆ•˜  B   )_>9 Ž9>_)  % ωþI    †    ? *        º…ª ;d.      ?P   !-  þ@( ,#%>  NpNM&_*# (! &) ,,f&  ! (K_  þZ0-  Yi D   cp-)L &gK1 [šN3$ n/ "!0{Iö"H#fmt2>•,7HBI.;/8[,  Q[z)  .)ÑS9L *E   '+(4%(4  *X >  7A)¯ ‚–0'-570+I;-% *þ§#%(0  ]'5.  U-•¤ü9Lp{‰7654'"'&#"+"'7&54?67676763276323273#5%6767'&#"6%"/67#"27632327654'73654'676547&© t!M#l5G;@¼\ 2BX-0%-m * ‡‘ '¡?,±Ný«ï ?¨'!Ÿ&­R;-> <\-R5-6E!"$b$6$!q",ý¢; t@P"û#C ß  *FSÀ "¥DX@! %z$(œ`]”jM¦P   ¦&O/+@ü p_u<  3  DMKZRdYL6D•_Y«BI‹5.!!''kGW„z¦")3SZ67654/##3276?7%754'654'36767632#"'&54767632'ò0,,;À ý(| w| kוýäýûi«5þ.U,þ\\¤ ýê    %gÒ .  Á;,-0j{w {w3ýûýä–ØþV. ÒýT, ¥\þ[^     Æ þ-5&à«Ä '-EL4'&'&/767675'7! !'7!654'!4'!!$4767>2"&'&'!654'•$$•üæCCC||]ªþVý£|êìýâV#þåýu    Ž9ÊZ(f(Y<™PP™PŽòñŽÕáPr+  VHW»zÝ")3SZ&'&#"227654'&''/%'654.#"65&'&'&547632#"'&'&76#"ò À;,,0ýw |w ˆ¡•ýú Ò5, þ\\¤ý£     ©. þ.V0-,:Á ý£ w{ w­ Ø•ýåýúÀhÓ .o,þ[\¥ ýè     ܪ6þ.;+–]#C4'%%.'&"27>7%$66%"'&'&'&47676762%'b&à¢×þI    ·þ)þ^àtƒœNþñ/  /þ²þdƒÉ÷IWÒ?    @ÑVùiDV /  V%¬&%$64'%%&'&'&"27676èÄþþ@Ë))ËÀüþ< "  " ÷â]N¸O]â    ˜À9|23277632#"'&'&5476"# õÒ6vþ®þà>? (-=%P8jŠó?  #þjþ<  y†"$"Jr‡B23277632#"'&'&5476"" öÑYTo ýÍk%…,02?=VŽ8ji™Aý{ÃC {œu+'qP?  ' 7 ÛssþþssþsstsXþŒrsþrtssþsr@¼QÏ  ' 7 5íþäþåíþäííÅþåíþåííþåíƒÿìN¾B2632#"'&'#"'&547677&'&54763267632676É   ©ŸBt  ahŒ´>) ¦¹c!  ,Hs¦¾ *·Ü¡Â   }©¶þÐ,"2A "Øì  ‰{•¦3ÿýž+Q26#"'#"'&'#'&'#"'&547&'&54767&'&54763267632676  Ó΂    NjÉM  r¬kW* & \„ÊÚ *3 #Àþﳎ*3 T§åv! ( šº¥ê5+" ,«£ç¿ @‘V #!!!!!%!!!!!!!!#!5!3 þ»þÅ;E;ÿJþ¶þEþ¶J»”Jþ¶“þ¶J“Ð<þÄþ»þÅ;E;þEþ¶J»Kþ!”þ·I”KV{ !!!!!!÷„þ|þãþ|„þîþ‹uv9˜f !!#!5!335#ÂÖþ*´þ+Õ´³²²´þ*Ö´Öýw²0¡r!!%!!!!!!Ñ/þÑ0 þ`þÏþ` 1¡/þÏþ` 1 ›) !!#!5!3Ë^þ¢Òþ¢^ÒÀÒýêÒ^~S3!!'#'!!#!!3!5Lƒƒþúþ¼ƒƒ„Dƒ¯ÁþúÁƒþ¼ý³ƒʃD„ÚþúÁý³MÁA #5!#3!3'3#!#35!3###5353þÅõõ;õ¯õõþ9õõÇŒõõ¯õõ¯ããþËýÝ#5AþIýÝ#·äþš³ýÝ#³ä0¡vQ#"#3;54'&'&'!"3276767653#4'&'&'&+3!52767>5/]LED73!&&54GBO]63H>SkS>H388]OBG45&&!35FEL]63H>Sü•S>H38882I32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&% ¢>#"? ?"#> ¢   G  ¢ >#"? ?"#>¢  G  ù   F  ¢>##> >##> ¢  F   ¡ ?#"> >"#?¡ÿí·Š›4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632B ,#,+%) 3!, &&*-#''#-*&& &$0 )$W$) 0$' L+,$&&$,/"&&$b3") M*,%&&%,."'%%0 )$W#) 4!, &&+,$''$,+&& &$1 ,#,+$)ÿ庈0267632#"'&'&'3&'&'&54676763267632#"'&'#"'&'&'&5476767#6767632#"'&'"'&'&'&54767#"'&'&'&54767676325##"'&'&'&54767#"'&'&'&476767632&'&547676763235#"'.'&5476767632&'&54767676h â         á   -  ( á        á   ‡     à '    *  á        à   .    à     +ÿç¦j276767653"4'&'&'&+sidUS+*+'WPihtthiPW'+*+SUdi),)URhexuhbXR,,,,RYaitwfgSU),%ÿæ¬t?247676763"'&'&'&5!276767653"4'&'&'&ðLEA86:4DDMMDD4:68AEþêtjdVT,*+(XQjhvvhjQX(+*,TVdj-76DCOME@:66:?FLOCC67-*UShgyvjbYS,-,-RZbjvyghTU*,(ÿð©8 %%! !)tËÌtõþ›þœJ‡þHcˆdeˆcþH•]Fþº]þÙþ‚~Êþ]þýþ^þý¢CÿæŽ5 )!%%!2#"'&'&'&54767676hzþt@z@Az@þt{ne_RP)((&SNcdome_RP)((&SMdd0þ‡éþˆééxé}*(QObbrle]TP)**(QObbooe]TN+*(ÿæ©.'"276767654'&'&'! !˜_)(""""()_)(""""(Yˆ¸þˆþ›þœˆþ¸¸$(*/.*(#  #(*./*($‡þ]þýþ^þý¢#ÿé®< '1%%2"'&'&'&5476767! !#xÍÎxøþ˜þ™a)(#""#()a)(#""#(Y‰þDg‰gh‰gþD•^Iþ·^þÖþW $(*0.+($  $(+.0*($ ‹þYþûþZþû¦(ÿð©8 3'7'3!%%!! !hEÛ±C²±C±ÛDeþµ g  g þµfˆ¸þˆþ›þœˆþ¸ ÒÑÑiþÆÂþÆÃÃ:ÂÑþ]þýþ^þý¢=ÿü” 3'7'3!%%!7!7'7!hTDEDDTƒ¨þªƒþ¨þ©ƒþª¨‚NÿÏPÏÐPÏÿIQ2P11P2#þmùþmùù“ù¬ó–ó––ó–(ÿö©? -5%7'%!! !] þP ¤ g¥±þµfeeˆ¸þˆþ›þœˆþ¸r­ŒÂ6þ‘96ŒŒÆþÆŒ]þ^þýþ^þý¢.£ /'%!!%!77!¢þÄyrëþâryþĈyqm"þ_þÐö^÷ö^öþÐlçþŒ%«Ð%tæu%þ°ýþß´þß³³!´6ÿþ›‚3% %#'-7í÷:|þÆ:|þÆ÷þÆ|9þÇ|kþ”¶Öµ¶Öµþ•kµÖ¶µÖWÿÿz`37'%7% %#'ZZ´ZZþòþ£Z]´^Zþ¢^Zþ¢´þ£ZË›››ÊœË”þmËœÊËœÊþm“Êœ0ÿý¡o #'!5!73!ÅP6þ°Mþ°6Pþ$Ýþ¯6PMP6þ¯Ýþ¯6Rþ#Üþ¯6QLR6þ¯Üþ$Q6þ®L$ÿð­z     - h<_þõµþK þ¡<;þ¡ þL´þö_zþK þ¡<;þ  þJ¶þô`;<_þõ ÿé·† '!'/7'?!7% % -¡Þ[ºßÛ9^Û[[þÈÞZþGßÚþÈ^ÚZZz'}*þÖ}þÙzyþÙ}þÖ*}'q^Ü\\þÈÞZþGßÚþÈ^ÚZZ:Þ\»ßÜOþÖ}þØzyþÙ}þÖ*}'yz(}2ÿäŸ % %  h_Øþ‡yþ(_^þ(zþ†Øÿþ£þ¹þº£þë£FG£ÿà²s% % -hVHÏzþ†Ïþ¸VUþ¸Ïþ†zÏHrþ†Ïþ¸VUþ¸Ïþ…{ÏHUVHÏÿê·†% % -h‚hþëhþá‚þáhþëh†þëhþá‚‚þáhþëh‚‚h$ÿÝ­h7% %' 7-'hXË5 ´þÿ´þö5ËXVÌ6þõ³ÿ³ 6Ìgþÿ³þö5ËVWÌ6þö³þÿ³ 6ÌWVË5 ³0¡t/37%!!%'#''7'%!5!%7'77;[‚TïAð:#þÅTþ¯8#þÆðAî€T‚[‚TïAðþÆ#9þ®TþÅ#8îAî€T Tþ®8#þÇðAð‚Tƒ[Uƒñ@îþÈ#7þ¯SþÇ#9ï@ïU[ƒTïAï8#1ÿð èŸ54'&5476276767632#"#"#"327232#"'&'&/"'&5476=&'&'#"'&'&54767632332?&547'&#"#"#"'&'&54767632676?>$,.c.,$> ]5 71+: H3> kR  Sk >3H :+17 7Z  >$,.c.,$? Z7 71+: H3> lR  Rk >3H :+17 9X ø ib9@R'))'R@9dg  8d< +$;)01):$* \570+9 F3= kQ  Sj  =3F 9+077Y  >$,.a.,$? Y770+9 G3= kR  Qk =3G 9+079W ·    > h`9@Q'(('Q@9bf  7c<+$:)/0(:$+HH#:.'W4,CEH@,4W'*>&DL:Z##KGW“,f ',;[;;+*Q„--}KOW*AA*WSGu5-ˆU&+;;[;,)  '+;[<>**Q…--}KNW+@@-USFu5-‡S(+;>Y;+* !ÿå°½™±É67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"i/)F)/,UK:M $\/8E(5>H6-EFJA-5H;8)D7.\# L;KU,*UK;K #\.7F'5>H5-DE-6H<7*C8/\$ M:K U+þÓ:6-21 4 $:<;$ 4 22-6 O;(A7##7A(;þ÷ !*:#.#;&Rm!CcJMU)??,RMJcCoS%9#.#;)!  );#-$:'Qn!DcIMU*??*UMIcD oS%;#.$:* f /D;;D/ $­i"276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632 o00'))'00o00'))'0]0+)*+%# #+%0%##&&.0%+%   #%'.0$,#0%-# #%'.0$.  #%'-1$,#$%*/0961/*%%*/1690/*%) "*&0-(%$$$)-0&*!&"*!$$)-0&-#%(-0&*"" (-0&*"$$(./& »†nŠ£¿Øô%#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/?676767654'&'&'&#"h &,&1/(&#!$&1%-$!&$/'.)2$-%c%-$2-*++&$!$-%1&$!#&(/1&,& =s0 9 55%R 9 ²!_  º, 9 R%5Âs  _!È#'"+'0/)&$%%).2'+$ * '1.*%%%%*.1' * "+'2.)%%$&)/0'+"'#ŽL% %Lýì %#M L:2(&6  û_ M#% è  6&(2: ÿí»”-[Õ3b‘¯Ý &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'%&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762‹¯    ¯ž(  b›  (›¬      üÍ #!"G"!# * " ' ## G!""  '  Y m  Š   ( y ‹  ( O k  w Š  m Q (  þO (  ‹ ˆ   ? ?   + / L* / *   +. M+ .*  Ý !!!! '? ?' "#& #'"!!  '? ?'  !"!  $& þŒ ‹  m P   å O   ‹ ˆ    þ“ m  ‹ Ž   y ‹   O k  £   þ“¯    ¯ž bš š¬      %ÿ߬j<\l"276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676% %-–[''!  !''[&( !! (TB39)+,+76?A3:(+,+76>tjeVT,++(XRiiuskdVT,**(XQijtuþßzþÞ"z!uv!z"þÞzþß#&(,-''""''-,(&#e)*:6?;97,+)*97z88,+,*UThgyricYT+,,*USigtvjbZR-,þÞzþßvvþàzþÞ"z vv!z2ÿíŸ9“œ§²ÁÐ"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632 654'&'&#"#"i"(-‰+S I9K #Y.6C&4<F4,CDH?,4F96(B5-Y" K8IS*)RI8J "Y-5D&3<F4,CˆC,4F:6(A6.Y# K9I R*€"(-62 #9þ~þÉ3 #9;þÉ 01+5€6 00,5`%;G,AþÞ $.?'!3&@!*Yx$ ImPT]-EE0ZTPmI "zZ)!?&3!'@-$ #,A'!2'?!*Yx$ImQT\.EE.\TQmI#yZ)!A&2"'?.#Öþ~&41%%14>3t-3>41%%14>3f^CC^Býß%@þÛº#@þÝãþÛ@%ýÆþÝ@#ä-4>41%%14>4þŒ-3>41%%14>3Ñ+  V  ++  V  !ÿã°r +?Sg"&46277''"'&'&476762"'&'&4767622"'&'&4767$2"'&'&4767eeeþãBääAãý»äBã†ãAä#U##U##U##U#ýÇV%**%V&**KV&**&V%**~ŽffŽeýßãAã†ãAã$ãAãýüãAã„V%**%V&**üµV&**&V%**Ì#U##U##U##U# ÿêº &3@MYam+%5%32476;#"'&'?632&54?#"632/&54#"/72#547"&462"'&=3¹þÁ?û_?þÁôü6Æ üÏü6Æ  Æ6ü] Æ6üþ'?&M&©C_CC_?&M&< 'L&&L'Ã!Æ6üü¢ Æ6ü^ü6Æ!üÏü6Æ ÞþÂ>ýõ_CC_Dý<>þÂ"ÿé¯l267632%632#"'%3#"'&'"'&547#"'&54727%#"'&47632%&'&54763&5476h!#;Ö'&1'þÛh 9##8þ)'1!, Ò;#A#;Ò '&1')þ8##9 hþÛ'12Ö;# 4þµ%.&! Â6 = 6Ä%".% þµ3 3 Gþó%.5Ä6 = 6 %".þðG 4 $ÿõ­8 ! 54."#"54$32632#"_”‚éöé‚ àþÀ“‡Š’þÀâÉþãÉ€è~~èýa>âþûâþÂEÿÁŒ  %!#!3!üp EEûþ?üp9Eûÿ=”V %!%!35!üc×ûðE:œüd FFûð8ÿ¸™ %!!!ü[:Fûü:¤ü\;[ûü0¡q %!!7!üNíû×]<²üN;)Gûí+ÿú¦t  ,þüoþýýÄþüþüþü9þýþüþþþû;þûþýþ’þüþüÿ ¶œ#¶›œùqÍÿ ™!þË™ùrŽQþË€k!ýÓkù` ÝÏôÙ!733ôþé}b>vÏóóÓÄþÇ!#7#Ô)…iC~ÆþîïïÿÿÏÑÙ' Ý ÿ#ÿÿöÄÛÇ' Ý ÿ#gÿ]jOS2#"327676765#"'&546;57!##"'&'&'&54767676%#¹     42;%-ú´n`Ô®úrr£#26A@:V7:$)&7.Y›q   % $.277g[•š½£(Ëdü¢VDQ49%*,04?()-#úæþÿÿÙÒÉ52&'&547676762"'&'&'&5476767h‚c"$n‘jlŽn(Lfe*+$$$$+*e*+$%%$+É! #'(*dRj¨¨jSc*('!üù"%*,20,+%""%+,02,*%"¾ÿãÓ%C&'&547676762476767622"'&'&'&5476767hcØn(%X%&&&W%(nØ–e*+$$$$+*e*+$%%$+,ŸƒDj*('(&,,&('(*kCƒÿ"&*,11,*%##%*,11,*&".i£%%&%&54767676247676762hhþÔ*(42u24)(()42u24(*”þÃiÂÅ\=97,*+*96@@69*+*,79=’ZÅrÿû_'#"'&'&'&547676763"'&'&'&5476767632_ÑÓdœA=;0-/.=:DD:=./-0;=AžbÓŠxþ”ª1.=8DC9() 1F="%".4"tNa5Œ&$4! /.r<@6B2L²_0>Q#kI|…Î"rz7&‹)?),%=^K=.C26F@13.!9+cM313 ÆN676 547&'&327#"'#536767&'&'&5432&5476323254'&543253%5@26šþÑ`', =NR6#!vWR>4 2:O t51"".1&X°.RO A5Ƚ )T/1þ¥Î86,FAS :#(=‹:tA0 9SD 'A#5þ×}11BO9ðÿ›á‚ "'&'&'&547676763"3á—Šƒpm8884ql‡Š—YTN‡! !C@RP]e:6pl‡†˜™‰€tm9:'62Õ~•~jf77ðÿ›á‚"05276767654'.'4ð]PR@C! !‡NTY—Їlq4888mpƒŠe'67fj~•~Õ27&:9mtŠ™˜…ˆlo7:fÿ‡kR !&547jljjlþïyyxzQ»þ“þ‰þº¿q¶µp¿nÿ‡c$0!!676n wu;;vþ÷i43f$ºþœ°°³³¹µ²²lcCÿ}ŽU# 3ÕþŒtÕþŠ‚ëìýDÿ}U 3 DuþŒÔtþŒ‚ëìýýÒÿVÿ.! !þþ¶þáJþ©ëìýÒÿVÿ. ! ÓêþJáþ©ëìýýÍÿAÑ! !þmþ^¢“þ\¾GHü¸ÎÿBÒ ! Σþ^’¢þ^¾HHü¸ü¸Éþåv!'7DÄWèèWÄÃWçÂçWÃÉþë|'7'7ÄWèèWÄbÃWçû>çWÃþ¸¸^$#"&=4&+5326=46;#"3¸—²xMe,,fLx²—1d=AOOA=dÆ‚…Ç׈i€h†ØÇ„O߀€ŒßOùþ°Øi(326=467&'&=4&+532;#"+ú5nCFVU$#Cn5¥ÂBB*)p//oTBBÂ¥ÌP€âŽAAáP‚DBÉÛ‡45‚iŠÙÉDCS/~å #!5!3}þ¥ãýñþúãŠþ¥ªt’]} 7%ýd”^º=ý¤Š]•ýdý¤>S¢~5 /ý%Û0~þ‚¨#ª#þÉþÉtÁ]« '-fý¢”œþñ\=]ýd•]º>ý¤-¡¤á!'7!.€ Øþ(þ÷€ýìïòÀ``ÀòI)ˆ=2"&'&'&5476?!".'&47>3!'&'&54767>2ˆ þÔ '!  ‹ý`!! ‹  !' ,Æ& þÔ   Œ&‹   þÔS¶~&!5! Fýò7þÉÒ8þÉþÉ-x¤!5!5 VüØ(Mþ³r¨úþ²þ²6u› #3#3#3!!5 é´´ðZZ–--ïþÓ-Iþ·(,þÔ,þÔ,þÔ,²þ¸þ·Sœ~  55!#3#3#3Fƒ´´ƒþã9««äUUŽ**©bÚ]^Úb«þU«þU«þU«S„~ô!!5 Fýò7þÉ.©þÉþÉ`tq!%  ¨ýqþ®ûïÆËËRþ®þ®{¤V$%! ÀSþþÀÛü%äÁÁ@þÀþÀ{V½ tùÛü%îÎþ2þ26Œ›=3!5 5!"'&'&'&6  $hIþ·ý˜$  Õh$  •þ·þ·•  6‹›<47676763!5 5!"6  $hIþ·ý˜$  ó$  •þ·þ·•  $O‚à!! eþëþä þþ6n›55!âlMþ³lýT‰wæccæw¤ekl!5!!53 ' !_þú²[þ¥y"þÞþk©d©þ¥þ¥â©""©òe/lå5!!53 ' !_þú²[þ¥"þÞþ/©d©þ¥þ¥â©""©ò5·œü !73#57!%!6ÍUcG™ýùjýý¶bÊzbýªŒïd©þ“þ¸ŽÇ©""©òaÖp« 5!'53#'!!!7%aÜcߎA[ýØÄýØ(ZqþZ{{þä{þÄ’Ò’ûû}ÛTM %'!'!53 !“;þqKÊRnKþ’a2þÎþ6Ûw–îwþ’–þ’Iw22wþŠT‚}> 3#5!7!!! –ZŒQþtZþQ°0þðLþ´>þs¢þs£äþjLK2NŸu '!53#'5!'7! !£p…Sn%þ’R&ý %µUa2þÎýŸ÷wþ’Kþ’J,L÷»w22w)ý¨1 '7!573#5!7! !œr&j&St&þŒSýp¸Wl6þÊý”qûM,LþŒLþŒyû¾y77y‘½@¬!6767632#"'&'&'! ‘ 6IYZgb^UMI%&&"LF\Zfc^UM3!çtþŒ§:6I&&&#LHZZhc\UMH'&&#L2<tt€ XNy "&*.37#37#37#37#5'!!55!!3'#3'#3'#3'#r+qr*r€r+r€r+rV…€…{‹‹{þê…þ€°*q+*r*+r++r+««««««««9ÇÇÆ†\]†ÆÇ«««««««t¹]¢ 7&#"7'7 #%5²Ž#t…69Ï.þwZæþ¦Y“96…t"Ï.*þ¨X/æþ§åSÑ~k 55!5!!7'!n‚‚nÿþUªŽþVŽŽªŽº±†GG†±8:ŽÈu\j '327'' #3ƒŽ95…t"ŽÏ.þÖYþ§/æYæ¿"u„69Ï.þxXæþ¨XN¹ƒî2%&#"6767&'&"67632&'&547676767‚}:"  s %*&*(&þŒ"!#!þ÷"O>>;Ž*‰§E/4767!"!47676763"'&'&'&5!3!&'&5¦Œv þ¸ þ5 $ %% $ Ë H vgMME %!#"!% EMu¯\—2&'&'&'&54767#"'&'276?&'&'32\": ö þ¨#'$'$#Y@öI:86†—s…6::I ö þ§#&'#'" X ÷ :5*œì+B67"'&'&'&547676$47676762"'&'&'%&'&'&547676762$¸àª[ /  ýH =ýaö=   / Z«þïI=X  q> d(*c Á    ÂXJn´°.676767632#"'&'&'&%&'&54767&'&54765 #&+*1)„Fþº„-Y)) .EOÍÍO/3S>>S&/ #$))%#Ã]]Ã#%))$#&¾«¦e"'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762«Ã åIþ ]]òIå ù à  Q ’  ¹¹  ’ Q  Ã%e«ñg"'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762«þ» GKaýç u~iKG E²þÜ ²Ã êú  Ó² þÜ2 Ÿ²+#76767&'&/3#6767!5!!5!&'&'Ÿg?j7R=y66y=R6k?þVO ýœñS+ +Sýd _8=ey‹u'&uŠtj<þu,*44Gee‡eeG35*+8þ²š&*'$&'&#"'67667š h7þHm^:-ˆ3ÕÞþ° REþ² SR®õQO‰1ØÌ¡üLÜH7þ²™&57$'&54&#""7ER þ°ÞÕ3ˆ-:^mþH7hþ²HÜ´¡ÌØ1‰OQü ®þ®S uþ#\u ! !hôþ þ óþ˜Ñþ—iý/uûÛûÓ-1ýüކþòK 3 #‡ªþ窂üpüp†þòK # 3Jþçªþ窂üpuþ#\u hôþ þ uûÛûÓ-Xqy“33#####533ܨõõ¨è¨ôô¨×¼þDªþD¼þD¼ª¼þDXqy“333333#######5ʨ¢¨¢¨ss¨¢¨¢¨r×¼þD¼þD¼þDªþD¼þD¼þD¼ªÿÿ–®;T™ÿ±Ëw7!!!xáürÅ$ðýžÄû<ÿ±Ëw!!!xáürÅðû®Äû<ÿ±Ëw7!!xáürÅ$àû®Äû<ÿ±Ëw%!!YürÅ$àû®Äû<ÿ±Ëw% hËþ5ýžbcýJÊÊþ6býžýžÿ±Ëw žÊýžbcýþ6”þ6býžýžÿ±Ëw ! žÊËûÓbcýþ6Êbýžýžÿ±Ëw! ž•þ5ýžbcýÊþ6býžýž ÿ±Ëw #)-17%#535#5#5#5##5'3#5#5#5#5#5##5##5###5ËÍZssssô®š´ðVÈrrrrÅsZš®š´šVr~ÌrZH®®N³³ýrrrrZZrÌH®®N³³bÈVrrrrrrVÈþLÑÕ'!2#.+;#"'&32654&# ö¡’N76SËÙ²M{cÁ,-Z¹ß¥ZYËÝ‘Ž—óÞÒ”»77§þhy¡]ýk~>>œjiý‰jÿãRð"53#5#"'&323276'&#"š¸¸3UVná‚àpVTýÕML•”NMMN”•LA”ú+Ál99ÏÑlgš-,þ€ý¥›šœ™..™›šVþVyÕ ##! !+532765¾þö™þõºYZ¥Í·Z-,'üíúÙÕýøúÃijœ>>’%¬Õ %!#3!3iÕþVOõþ7Ñn lѲüüRÕþ{…jÿãRð"%#367632#"'&'&#"327"¸¸3UVná‚þüàpVT+ML•”NMMN”•L’”ÕÁl99ÏÑþ”þ™þf-,€[›šœ™þÓþÑ™›š‰HÕ3!!#‰Ëôý ËÕýœªý9Ã`#3!{¸¸Ÿýý`þ9–Lÿç…h '"27654'&'2#"'&7673A\VMMG*ŠwÁ·Ç|~~hšA1LLNeË‘ýRh]ßÝc[„þÙþæ–˜™›,„m£Ks¾Øeg¯.˜ÿå±!#5#"&'532654&+532±¹.¿ƒDv6;zI¬¶McÑݳªÛw"$¼.*ØÌgQ™®¸‰ÿãH{"264   676326­†^\‡`þsÒ÷öþ-öüýÇ!\…‡[À^ˆ[]…þÒýÃþÓ-=þâ°þP@7'"]_$5ÿÿæÿëhXýdœÉà3#3hÝ„þí›þí„ûåü¼D‹þð8.#";#"./.'&'532654&/&'&54$32ô\¹^¦m•jÒÀ„j·‚º–3!2_Pf-ÞEfosÍh™ªu‘lÑ]^ ßV¾¢Í;<…qch#1ÒµÕpZ‰¤ª"D0ì7/×ID‰{pv 0^_ Èñ'œþ’Õ35!5!;#"./&#œ÷ýÉüôfaÔ-BQO(Qr Lcu9ýB_š‘ªšûo^Í,97ª&P7ó?ÁÿåÝÕ%36767#"'&5476?>5#5%¾ Yb^`_hºon"!^XE&ÅË->B%DüS #D¼9``¡LAB\VBT=;þþú¾®-;,,1Y7Ï:w!##Ϩð¸ýµZ:#5!#J𨸅ý&ÏþòwÌ3!3‡ðþX¸ÚZþòÌ!533þXð¸þòKÿÿÚ÷ðN,¥X3#3,ªªñˆXˆû0Xú¨,¥X3#3,ªªñˆ$ˆüdXú¨,¥X3#3,ªªñˆðˆý˜Xú¨,¥X3#3,ªªñˆ¼ˆþÌXú¨,¥X%3#3#,ªªñˆˆˆˆXú¨,¥X3##3ûªªþ¹ˆˆXˆû0X,¥X3##3ûªªþ¹ˆˆ$ˆüdX,¥X3##3ûªªþ¹ˆˆðˆý˜X,¥X3##3ûªªþ¹ˆˆ¼ˆþÌX,¥X%3#!#3ûªªþ¹ˆˆˆˆX,¥X!#!!´ˆyþXˆ,¥X!#3!!´ˆˆñþXþ̈,¥X!#3!!´ˆˆñþXý˜ˆ,¥X!#3!!´ˆˆñþXüdˆ,¥X%!!3´ñý‡ˆˆˆXTœ|ä 3'#'L:öL’j”LäÝCƒýU«ƒCT˜|à #'737†:øL”j’L˜ÝCƒ«ýUƒC(œ¨à 3#3#'(€€€ f*ŽDþ‘ÈÈ(œ¨à #53#73¨€€€ fRŽü¼oÈÈÿÿ(¨D }ýdA·Ô!5 !5 !5 ‡|þ„|þpO ®¸ £'£Å¢þŒåcmþûþZnž`!5 !5 !5  Tþ¬Tþ¬ „ ™|™˜þèžMY¼þ¸ëËôð 5! ¥u¤‹ ý±ÍþþÒ.1Ô ÛëVô{ 5! ¥u¤‹ ý±XþþÒ.1Ô ½‰þVHÕ+532765!#3!HYZ¥Í§Z-,ý×ËË)ÕúÃijœ>>’Çý9ÕýœdÃþV4&#"#3>32+532765bjq‹¸¸1¨s«©YZ¥Í¹Z-,¶—Ž·«ý‡ý¤`cáäý6Ãijœ>>~ÿÿéå'ˆIJ !5!5!5!Jþ>Âþ>ÂI–––áÏÕ3#Ë¡Õýqþ›eª¾Õ·ˆÔì1ôÄ0#¾®ÕýÕ+ÿÿ‰DÕ^þV4 ;#"&5# 5432!5!3#'&#"3ª[YÖ襵>þéö5*þÙßúú¸GN\|~œÔ†½öƒüó  „K9Tþ¾•Õ !33###TøÃ†ªÜþÃÕû3ÍúÕþBÍû3zþâ^{3##4&#"#3>32ÒŒ–¯jq‹¸¸1¨s«©¶ýàþL¶—Ž·«ý‡`¨`cá‰ÿãH %"32654&'6#"467.5463%!"hŒŒèøöêéö{1PAžüþ(¼rßÚÖÕÛÛÕÖÚœþÑþâþáþÓ-åØ*/Ž1|”–‡I5#7N@* ¶ ŒÄ››      JEEô<äì2ü<Äî2991/<æìþîîî299903#'#"!#!##535463¸¸w´cM“¸þ%¸ÉÉ©³éë™Qgeû¢Ñü/ÑN¸®#7B@# ¶Œ›   JE Eô<äìü<Äî991/<æþîî29990#!"!!##5354637¸þÕcM%þÛ¸ÉÉ©³ùì{Qgeü/ÑN¸®ÿÿEþ °& Ë ÅÿÿÿEþ å& ¿ Åüÿÿÿÿìþ ¼X& Ò Å ÿÿÿÿìþ åX& Ó Å ÿÿÿEþ °& Ë Ä½ÿÿÿEþ å& ¿ Äxÿÿÿÿìþ X& Ò ÄŒÿÿÿÿìþ åX& Ó ÄŒÿÿÿEþ °& Ë Æ“ÿÿÿEþ å& ¿ Ærÿÿÿÿìþ  X& Ò Æzÿÿÿÿìþ åX& Ó Æ˜ÿÿÿEÿì°½& Ë Å7'ÿÿEÿìåÃ& ¿ Å-ÿÿÿì¼x& Ò Åâÿÿÿìåm& Ó Å×ÿÿEÿì°& Ë Æ“„ÿÿEÿìå' Æ„ ¿ÿÿÿìy& Ò Æãÿÿÿìå|& Ó ÆŒæÿÿEÿì°W& ËLLýfÿÿEÿìåH'L4ýW ¿ÿÿÿì¸õ& ÒLKþÿÿÿìå& ÓL]þÿÿÿ¶ÿ¤Œr& Ó ¾tâÿÿÿjÿ¥å' ¾„v Ãÿÿÿì?' ¾,~ Àÿÿÿìå' ¾–€ Áÿÿÿ¶ÿ¤Œ~& Ó Æˆèÿÿÿjÿ¥å ' ÆŒt Ãÿÿÿì?' Æ,x Àÿÿÿìå ' ÆšŠ ÁÿÿXþ ­f&[ Å{¯ÿÿXþ ùf&  Å/}ÿÿÿìþ>\/' Åaÿ8 ÿÿÿìþ>ü/' Å ÿ8 ÿÿXþ ­f&[ ½ŠÿÿXþ ùf&  ½&ÿçÿÿÿìÿ8\/' ½¼ÿ8 ÿÿÿìÿ8ü/' ½ÿ8 ÿÿXþ ­f&[ Ä*–ÿÿXþ ùf&  ÄÅBÿÿÿìþ\/' Äðÿ ÿÿÿìþ>ü/' Äÿ8 ÿÿXþ ­f&[ Æ2¯ÿÿXþ ùf&  ÆÅ^ÿÿÿìþ\/' Æüÿ ÿÿÿìþ>ü/' Æÿ8 ÿÿÿÌþa7&_ ¾Ð¦ÿÿÿ`þ åD' ¾\´ ÿÿÿÌþ›'LUýª_ÿÿÿ`þ å„'Léý“ ÿÿ ÿ§]œÿƒÿ§2%#"'$4733267654'&54767;#"'&'õ0Q€cÏplþ¶?¸AËOL¢Ú64)¶>.VþhFd((&*=#>¶2(I=/ b Š\^ˆxHj<9"1B,f%TOAŽÑþÂ7.NýÂ?¸ÿÿÿì+ Bÿÿÿìæ Cÿÿ ÿ§cG&œ Ǭÿÿÿƒÿ§J' ÇT Åÿÿÿì+9' È Æÿÿÿìæ9' Èœ Çÿÿ6þµ° ÕÿÕþ æ &#"'&47332767654'3;#"'ÈGŽŒ¬{ê5¸7¡9T?:!e¸#"#V4^Wþ÷t<;?x®Ž®Ž´C3§^w¸Ë3UT8@¸0­ÿÿÿ½“åžòå&6D%3!"''&5473327&'&5476&'5%67654'&#"%3276'&'&bþˆ¾Jƒ¤‘Dv¸-(0g:-0M,QÔãùGýÍ$"':AG 5' 3¸¸43%@€K5:,+ CfN@TSZ '¹A¶ÈçO@H=.%4-+#%v¼_U[1C "&_ÿÿÿìÿ½ãå Rÿìòå,:%&'&5476&'53!"'+532767654'&#"%3276'&'&\:-0M,QÔãùG Êþ ¾J†¡÷îFâ$"':AG 5' 3ÈCfN@TSZ '¹A¶ÈçO8¸44¸U@H=.%4-+#%v¼_U[1C "&_ÿì¼X %!#53 76=3`Hþ©Õž,1¸VV¸,1jÙÙ»ÿìåX%#!5!276=33!!"^L×þ±¢,0¸2,£*þŸÖVV¸,1jÙÙj1,¸ÿÿþóÑrÿÿÿ|þðå WÿÿÿìþÔX' ½‡þÔ ÒÿÿÿìþÔåX' ½“þÔ ÓÿÿDºŒštÿÿÿìåš&tiÿÿDºŒýu"åk ;#"'&=3Ú1,cK‚Ž\W¸L71,¸\W+ÿÿDþŒÿövÿÿDºŒªwÿÿÿìåª&iwÿÿD¹Œýxÿÿÿìåý&ixÿÿDþèŒÿØyÿÿÿìþèå¸&iyÿÿ0Ë ôzÿÿÿìåô&izÿÿVáz{ÿÿÿìå&{iÿÿ²U-ÞOÿÿЃ&U|Âÿÿæƒ'| õÿÿ³ 9&U}ÿöÂÿÿäæ9'}' õÿÿLþ 3µ&q}`þ>ÿÿZþ åµ'}2þ> Uÿÿ¶þ  &U~ùÿÿþ æ&~V õÿÿþóÑV&r}ÿYýßÿÿÿ|þðå_'}þäüè Wÿÿÿìþç'}ÿêþp Òÿÿÿìåç'}þp Óÿÿ ÄULæ 3;!"'&L¸2,´ÐþøêPXs¡ûkj1,¸\eÿÿEþ¢°& Ë ¼þ¢ÿÿEþ¢å' ¼Ñþ¢ ¿ÿÿÿìþÔ¼X& Ò ¼øþÔÿÿÿìþÔåX& Ó ¼þÔÿÿÞÿÆó&p ½j„ÿÿòå' ½Æ„ QÿÿEÿì° & Ë ½¿ŠÿÿEÿìå ' ½œŠ ¿ÿÿÿì#è' ½“R Òÿÿÿìåè' ½“R ÓÿÿEÿì°& Ë ¾ºŠÿÿEÿìå' ¾¨Š ¿ÿÿÿì,â& Ò ¾œRÿÿÿìå¼& Ó ¾›,ÿÿXþ ­f&[ ¼ŸÿÿXþ ùf' ¼pÿÎ ÿÿÿìþÔ\/' ¼ þÔ ÿÿÿìþÔü/' ¼ þÔ ÿÿXþ ­f[Xþ ùf.%3#"'&'&'27'&5767&5$Ñ(1{R=IrbàJÁÔ–úþ”©ƒÔ`‰eŸ‡_Ã$Äm3HZ¸¸–dœ²P·üŠ]£v¸bĘÞße4)¸@5š [ _wÿì\/&'&'&5672+5327676SSgU´R¡HK¢¬ÜLX¦J‘KÝ£€dãht^¸#4bš4bBP¸H:jVÿìü/);#"'&'+53276767&'&'&5672~ÜAI2h6ýž—¸€•Å:H~ÿÿÿÌþD¶&_ ¼] ÿÿÿ`þ å¶' ¼ï  ÿÿÿ$þ˜îaþØþåîF"'&''#"'&7673327676'&/37653323;#"'4A@E2J/1%=Gq_ev<¤W!.052#)Ÿ1'/-%¤% *i¤),;?d<G!C~m8(P¨^yM\dsÕè‚ቬ+;H2zm¥^\꜑#P}g£x&þª‹),¸`a ÿìÿÝ”è1%27653323#"'&'#"'&'+53276=3æC*%¥&+h¤>!UNBAF3I2Q, E;eF*L$F¤µtg£x&þªŸ™R" C~m8*@#?9,%¸#GvÀœOdTÿìÿÝæè7323;#"'#"'&'#"'&'+53276=32765Ñ!5d¤*,""@e;6:HO7* F35C%&F:DF*7@¢`*%R¦Šx&þª‹),¸`X I6[m8*6759,%¸#GvÀœOdTtgÂÿÿÿ$þ˜°&a ¾6 ÿÿþØþå°' ¾ì  ÿÿÿìÿÝ”°' ¾–  ÿÿÿìÿÝæ°' ¾R  ÿÿÿþÀcþÅþå G%327654'&#"%;#"/+"'&5#"'&5473767654'&'367632ýŒIj($?GhK=.';4f¬ˆÚ&4-//3fJ‚Z}e¬h<2ÔH7(2€<±RNÿìÁ ,%327654'&#""'&'+53276=367632#IŒIj($?GhKRJNA'f^‚K+%A¸-L1’–«[W¸~¸.DF-%!mNþØ*#=Џ,PdrNP2€<±RNy¾mKÿìå 6%327654'&#""'&'+53276=367632;#"/#ýŒIj($?GhKRJNA'fDP*-¸-L1’–«[W.';4f¬ˆ¸.DF-%!mNþØ*#=Џ.2€rNP2€<±RNy4G ,¸^xÿÿÿþÀ4&c ¼OžÿÿþÅþå4' ¼ž !ÿÿÿìÁv' ¼Wà "ÿÿÿìåh' ¼4Ò #ÿÿ ¤eå '%327654'&#"%;#"/#!#53367632ŒIj($?GhK=*=%-:]U}•ýû²²¸L1’–«[W¸.DF-%!mNN5FC¸Oi¸\û€<±RNÿì¤ %327654'&#"!#53367632,ŒIj($?GhKˆýûþþ¸L1Žš«[W¸~¸.DF-%!mNþظ\û€<±RNy¾mKÿìå '%327654'&#"%;#"/#!#53367632ŒIj($?GhK=*=%-:]U}•ýûÚÚ¸L1’–«[W¸.DF-%!mNN5FC¸Oi¸\û€<±RNÿÿ ¤&e ¼Cÿÿå' ¼C )ÿÿÿì¤' ¼C *ÿÿÿìå' ¼C +ÿÿzþ ·*g”þ ô,7347&'&5476762;# '!27'&"676'”»=& hYîYe Ev7DW_”àÐþ·øš)k_ÁÔ–úþRb©4/F†0ÔŒ2H9)74--38&">8`@%(¸äjm=žv¸b¾w $A7. ÿìù*727&'&5763"327%+5=¡ÊK4XÌ}ûÚº>SF8I þ\þ¢²Y¸];dŒ}M©‰ÿ4F!¸Å¤¸ÿìå$/%+532767&'&5476762;#""654'hÂÊðÚkB;(aD hYîYf MXD=pÛñʨ4/gg/¹¹¸($'UZ'-)74--38)-'bM,(¸U __ ÿÿzþ ·F&g ¼w°ÿÿ”þ ôL' ¼Ö¶ 1ÿÿÿìùF' ¼w° 2ÿÿÿìåL' ¼¶ 3ÿÿÿ¶ÿ¤ŒÀ& Ó ¼ð*ÿÿÿjÿ¥åL' ¼ö¶ Ãÿÿÿì?' ¼©~ Àÿÿÿìå~' ¼"è Áÿÿþ}t& Ì ½]~ÿÿÿíþå' ½Nk Âÿÿÿì?& À ½,~ÿÿÿìå~& Á ½–èÿÿÿÉŸlÿ¡ÿÉå!D#"'5327654'&'&7676;#"''&5473327676J&P DfXRNB8D-<9_¸h$$EB|=Q&v+6ºú(  %þ¶z|qe›ÿìæ))5!27654'&54767;#"'&/œþPœ“/6þÊ2 hêý¬F F&,@X„B:f"``¸h$$EB|=Q&v+6ºú(  %ý?¸+)x.›ÿÿCþÈKm þÈå$;#"'#"'&&733276761,+K‚8N3h^}cwò@¸A¦(IiTcEûkj1,¸3]?~/"*VŠ\ss~B")ƒ9(jÿìé )5!27653éWPþðýºÚ,1¸s²e\¸,1j•ÿìå%)5327653;! hLþðþàêÚ,0¸2,ÚéþßþôVV¸,1j•ûkj1,¸ÿÿ‚þTónGþåt4%327654'&'&#"#"'&#4763&547632;#" zL,5;(.;DÀ …KÒp#IÈxAI¢M\HTª(RfV­¨*9:X DD(©PNKOþ“m­f7*(”„?$G³@^¸ÿìÿΦm*%'+53276767632%327654'&'&#"d`ŒÔp@h t4,+‡^]EE½ýð>Ÿ/4:''5)24ed0¸$#1µP8O«$*ŽME5EX !a%ÿìÿÎåm/%#"'+53276767632;#"%327654'&'&#"|a‹Ön@h¸Œ4,+‡^]HBÁ3&id›®þ>Ÿ/4:''5).4fb0¸$#1µP8S§1>/¸ÇE5EX d%ÿÿ6þµ„& Õ ¼ÓîÿÿÿÕþ æ¯' ¼w Íÿÿÿì¼è& Ò ¼Rÿÿÿìåè& Ó ¼RÿÿÞÿÆóÞpòåî $&'&'&'3;#"'&'#"'&5476 xRo´t¸$8pq¨ZI-&Šœ8:½Ìm*12e CY>)2Ñ'+¨®eO,¸3;I0š­Dÿìÿ½ãå-=67654'&#"27&'&5476&'5#"'+5327654'&º$"':Aù4N--0M,QÛÜ;(J¯ƒšx’¯Ñb 41~! @H=.%4-+#%vˆ iEN@TSZ '¹C´ÖÙ49g=ql)¸D%'Šr.C!v-‹3j  °;AWE… ¸L9P)8K6(¸œS/V¸L_”+Y‡9›K1\SÿÿþóÑrÿ|þðå7%&'&'&54767632;#"'&##"'&'&73327676 ,)MW,‚.@"##C@"*5NhµŒLy“ä $²Eq‚:€<3, $.=N/[ŠÀ¸¬¥ EW3235hýêýêuFX^"!ݺh¿^b²Nmƒ/>ZUËþüþéòübª=*(DV\BAL¡À89¼DEnY1X;YTBEbš“þþÿÿ%¬Õ$ÿÿ¦qÕ%ÿÿ‹ÿã1ð&ÿÿ‰RÕ'ÿÿÅNÕ(ÿÿéXÕ)ÿÿfÿãPð*ÿÿ‰HÕ+ÿÿÉÕ,ÿÿmÿã¼Õ-ÿÿ‰ÉÕ.ÿÿ×sÕ/ÿÿVyÕ0ÿÿ‹FÕ1ÿÿuÿã\ð2ÿÿÅuÕ3ÿÿuþò\ð4ÿÿÑÕ5ÿÿ‹ÿãJð6ÿÿ/¢Õ7ÿÿ“ÿã=Õ8ÿÿ9˜Õ9ÿÿÑÕ:ÿÿ¾Õ;ÿÿ%¬Õ<ÿÿœ‘Õ=ÿÿ…ÿã#{DÿÿÁÿãXEÿÿÃÿã%{Fÿÿ{ÿãGÿÿ{ÿãX{HÿÿÃ'Iÿÿ{þH{JÿÿÃKÿÿ²DLÿÿºþVMÿÿì²Nÿÿ  Oÿÿmo{PÿÿÃ{Qÿÿ‰ÿãH{Rÿÿ¾þVT{Sÿÿ‰þRwTÿÿjƒ{UÿÿÕÿã{VÿÿƒžWÿÿÃÿã^Xÿÿdm`YÿÿÑ`ZÿÿL…`[ÿÿhþV`\ÿÿËb]ÿÿ…ÿãLðÿÿöFÕÿÿ˜#ðÿÿ‰ÿã7ðÿÿfoÕÿÿÿã-Õÿÿ…ÿãLðÿÿ‹7ÕÿÿƒÿãNðÿÿÿãFðÛîæf@ÔÌ1ÔÌ03# Æqšfþˆ?‘ÙQ@ ÞaaÔüÔì1Ô<ì20K°TX½@ÿÀ878YK°TK° T[X½ÿÀ@878Y3#%3#?ËˈÊÊÙËËËÛîZökµÔÄ1ÔÄ0K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@&  //// //]]3# ºåšöþø²éÑ@ Ì Ì ÔÄÔÄ99991Ô<üÔ<ì990K°TK°T[X½@ÿÀ878Y@t        !      ]]'.#"#4632326=3#"&d9 #(}gU$=19#(}fT"<9! 2-ev 3)dwyîööiµÔÄ1ÔÄ0K° TX½ÿÀ@878YK°TX½@ÿÀ878YK°TX½@ÿÀ878Y@ //]#1Åšãöþø7îšø]@ ÔÄ91Ô<Ä90K° TX½ÿÀ@878YK°TX½@ÿÀ878Y@ //, ]3#'# ½ÓŒ¦¥Œøþö²²7îšøi@ ÔÄ91ÔÄ290K°TX½@ÿÀ878YK° TX½ÿÀ@878Y@ //*//]373 ÓŒ¥¦ŒÓî ²²þöøZj@ ÔÄ991ÔÜÔÌ0'3$øll/{¢m > #.#"/ ž Ÿ waSRd {xz{w8796/{¢m ²¸@ PPÔìÔì1ÔüÄ20332673#"&/w dRSaw Ÿžm6978w{zƒÎP·ÞaÔì1Ôì03#ÍÍPÍXck@ ÔÌÔÌ1Ô<Ì203#3#\ºåšzºåškþøþø»cyk#!#uÅšåùÅšåkþøþøf•ð$(#5476?>54'&'&56763#®Â7:)*%>8'9@B9Q[~CG=9. ÇËË‘šbEBTY;X1I*%#DÙ>"Y`¡LAB\VE'*=þÃþ=œ“0¶¶ÔÌ1Ôì0!!=Výª0”œÿ45ÿ¦!5!5üg™Ìrÿ4Ëÿ¦!5!Ëû;ÅÌrÿ4Ñÿ¦!5!Ñý/ÑÌr^Ôsé 2"&46"264hrL&'œâ—š«vURyVéP%`8nš—âœ|TyRTv?F‘3#%3#?ËˈÊÊÊÊÊ––53#–––––73#'3#ú––ú–––––– 3#3#'3#}––}––ú–––d–––Eÿìå&"'&547332767654'3;#"'&'ºƒ)¸+ubE‚W-7¸!K4/+X`t8AÛ>|Š0l7%5A8>7KZd3(¸,*OQ/9ÿì?Ù0654'&323276767'&54767632#!V)B,4((7(*Hý®ñT—O<?a‚Nb–NLZB`.NJ|m‘þ¿+M;3*)3P&þ· ]027EW4,”E$2Hf3ŒÐˆ,'ÿìå 3;!"'#!5327&'&5476762"67654'&'È·$&”áþňº¸ˆþÄâ’($¹€28 D@$ 8úP–2*I1C2¸99¸(M.L,0W¸ 5+5DE2.4!ÿíþåä.@%&'&'&54767632;+'$'&547332766'&'&#"ŒB.y9“(“)Wp8c2X]0LhŽ—¤þÓ^E>¸>:Ãluž{/"'"5 9Ld/  #+m¹=¥E2X‘:Ö¸Sm•JN¾Š}¦`k›I=‚"'&4762<R8R8z?@¸?@@?¸@Ü(8)*8…¸@@@@¸@??•þV<ÕD@!B´ —  10üìüÄì291/<Ôìì2990KSXÉÉY33+532765#•¹5¹YZ¥Í¹Z-,ý˹Õû—iúÃijœ>>’iû—Eÿì°'&5473327654'–¦˜þéßš)¸+ub„¼j{G„{yo9;á>|Š0lALj@Gþ}tÙ8654'&32676#"'&54767632'&'&5473)B,4((7(*Hþ[ÔbË?z…Kb–NLc9g'!.9¥»éΊMR·VV+M;3*)3P&ý;fÔ4KCW-3”E$2Zwf ü޳ƒ”¿j}´Ø»™H(°ÿÿEþ ° ' ɘþ & Ë ½¸ŠÿÿEÿì°¶' Ä©  ËÿÿXþ ­¯'}ÿ®ÿ8[ÿÿXþ ­ª' ÅÂ[ÿÿXþ ­ª' ¾T[ÿÿÿÌþµ&_>ýÒÿ¶ÿ¤Œx9654'&"32#"'&&733276767#"'&54767632£)B,4P7&,Hi§²¥£rô$¸$xZƒT¼0A&?z…Kb–NLZB`.¸,L95T2R$þ¦T&()XŠ\^ˆ“-"2(hLDV‚,4”D$2Hf3‹þ»ÿÿCþÈúÄ'„m6þµ°#"'&47332767654'3dGŽŒ¬{ê5¸7¡9T?:"F¸Hÿ»¤t<;?x®Ž®Ž´C3§b`ù˜ŸÿÿLþ 3H'pþqÿÿþóÑ'ÿ(ýàrÿÿÞÿÆóÞpTz­¬a_<õÉ1É1ûŠý¾UmþÑûŠÿ¾ÑhÑÑR¾!9ª\¦X“déf…ö˜‰f…‹ƒé“XXXô%¦‹‰Åéf‰Ém‰×V‹uÅu‹/“9%œÏfZH…ÁÃ{{Ã{òºì mɾ‰jÕƒÃdLhËÝÝXÕ‹Í%Ç?wXd=+XBFÛÃjé‹XôÁÁ%%%%%%‹ÅÅÅÅÉÉÉÉ‹uuuuu–““““%ɼ………………)Ã{{{{²²²²‰Ã‰‰‰‰‰X/ÃÃÃÃh¾h%…%…%…‹Ã‹Ã‹Ã‹Ã‰{{Å{Å{Å{Å{Å{f{f{f{f{‰ÃFɲɲɲɲɲÿÿÿümº‰ììÈ × × × ÿöL‹Ã‹Ã‹Ã“Ãu‰u‰u‰Hj j‹Õ‹Õ‹Õ‹Õ/ƒ/ƒ/ƒ“ÓÓÓÓÓÃ%h%œËœËœËÃF¦Á0<‹<^ƒˆÅu‰?Ã4AÉÉnì 1mÃu -V8¾‹Õxvƒ/ƒ/ 'Jšœœ}­˜}Â}9¤%…ɲu‰“ÓÓÓÓÃz%…%…)f{‰ìu‰u‰}ºf{=‹Ã)/%…%…»{Å{»²É²u‰u‰‰hj“ÓËÕ/ƒ}®‰Ã“œË%…Å{u‰u‰u‰u‰%h jƒºxx/!ÕË79Žš{ÀÁ¸Ã{{zz©©8°º{zff¼ÃÃŽÆ X (hhg²ˆ‰Eª‰˜˜fjj  zz¼}}}v¦ƒ_AHHf§}iÂÂÂÂ_Ѱ6Êwõ#ÂÂ6™™µ‡æÛ²ÅAAæ™™Q0ìÏÏðßß^^))$=$=¶¶ßß>ˆ/V¤Xþ¡%V[^,,,,,ÓÛ)=/?™VX)"VÒ//ÕïðÛyyœÌs£úb^_sö¶?˜‹®$UÎ))//=X/úUU΋Ûïÿìæ“Û?éÿþíÿÿµþpÿÎ6%¦×%Åœ‰uɉ%V‹‰u‰Åx/%uuJÉ%F©Ã63F— ‰©™Ã‰6ìDÃt¢‰P¾Ã‰Ÿ3LYƒF63‰3F–t"þp"m94u‰‹›é`„!Y4¾Ãºu¢¢É¾‹VU‹‹‹ÅÅÿ¾×‹‹ÉÉmÿí"ÿ¾‰‹h‰%¦¦×!ʼn‹‹‰V‰u‰Å‹/hBP‰r< AÅ‹<L…}Ñi{;©ÃÃì=ÉþÃáhcL|Ã}PhÃÃN¨{{#ÃÕ²²º A#ìÃhà u‰×U×;‰©‰ìbq}‹Ã/á%\%\LŒÃÉ;‰ì‰ÃŒÃÇ%…%…)Å{uzuz;‰©}‹Ã‹Ãu‰u‰u‰‹Ãhhhhhh‰Ã×Ah‰©u‰w€U6€`x€+U“š]6“[_6V6@6`“`A`6“!i“@‡F3uGßÖzáy²¼g·Ir¤IÏ·BI¼Gh‰¼½«rŸh=h­½òg¨„½fh¼ùhW‰(Hÿd11ZÖdÖÚ²½L½ EÞEEXXXèèÿÌÿÌÿ$ÿ$ÿÿ zzÿìÿ¶C‚6ÞLDDDDDD0V½½\ú–š†ìÊš~~¢È6Ö’½EEEEEEXXXXÿÌÿÌÿ¶ ú–š†¯¬~~¢>lyö|as{•jK}}cceesdaobwU0[ûŠüÆSSSSÏxEÿðV_Iÿð– žn7 žž7 ž žŸ7 Ÿ7Ÿ-77 7ž7žVž¡ ŸŸžv ŸŸ‹7k¡n #•)©²‰ˆ+?+üõ77LL,:d^E<<.?AäEEGûGG11OOGI8%[:X::GM[ÿ%#H™[#{:œ GXQ:OWbG[CaIGdUU~%%UU?::[xMÐ Fa^M3:%…¦Á¦Á¦Á‹Ã‰{‰{‰{}{‰{Å{Å{Å{éÃf{‰Ã‰Ã‰Ã7‰Ãɲ‰ì‰ì‰ì× × × × VmVmVm‹Ã‹Ã‹Ã‹Ãu‰Å¾Å¾jj==‹Õ‹Õ‹Õ/ƒ/ƒ/ƒ/ƒ“ÓÓÓÃ9d9dLL%hœËœËœËÃhÉ%…%…%…%…Å{Å{Å{ɲu‰u‰    “à ' ' ' '%h%h%hFFFFFFFF%%þlþlÿÿÿÁÿ©©©©©©ÿÿý‹ý‹þýôÃÃÃÃÃÃÃÃÿMÿMý@ý@ý¤ýþcþc66õõ'ÿÿý¤ý¤þýôþ®þ®‰‰‰‰‰‰ÿÊÿý‹ý‹þžþŠ33333333þéý@ýEþFFFFFFFFÿÊÿfý‹ý‹þ·þ£þùþ®FF©©ÃÃ6‰‰33FFFFFFFFFF%%þlþlÿÿÿÁÿÃÃÃÃÃÃÃÃÿMÿMý@ý@ý¤ýþcþcFFFFFFFFÿÊÿfý‹ý‹þ·þ£þùþ®FFFFFFF%%ÿ‡%ïïÃÃÃÃÃþÿþ[þí‰õ'/66ÉÉþ¿ÿõ3333¾¾33%%þ[þpÿ?FFFFFþ¦ÿµþ¦ÿÎJÛïddÏÏ“ÏÓÓÓÓ¢¢??P¬€¬€Z¤ÐôÏZ!!ÐË=H ?I=;0ØØA=XBF ?I=;0ØØE1:1A8V%AG[M {_‹m *{%*/.j5'‚/hŒ:TTJ B%0J‰%  BBB¸¸¸¸BBYYBBBBBBBBBBBBq····º?QQ2BXXBBBBGB*BB*B*BBBBBBBB››››BBBBBBBBóBóóóóóóóBEEóB*BBBBBBBB%u¶²²Iÿúÿú‚‚˜XXf¦+?;;;º)}}¤¤¤¤?5»¼è»XJWXXXXXXXXXXXXXXXWXXXXXWJJXXXXXXXEXXXXXXXXVVVVWXXXXVVVVVVVVVXVVVVVVXXXXXXXXXXXXXXOOOOOOOOOPPPPXXXXéXXXVXVVVVXXXXVVVVPIr’’’’’ÏZÏZ% % Xa¸¦GX++|h}2H%%ÿì?XX%XX6¾FœFHRFFFöõ    –ÿìÿìÈÿìÿìÈÿëÿìÈÈÈÿìÿìÿìÿìÈÈÿìÿìÿìÿìÈÈÈÈÈÈÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÈÿìxxxÿìÿìÿìxxÿìÿìÿìxxÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿ“ÿ“ÿ“ÿì|ÿìÈ|ÈÿìÈÿìÈÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìiÿìÿìÿìÿìEÿìiÿìÿìÿìÿìÿìiÿìÿìÛÛDDÛÛÛÛÛÛÛÛu77ÿìÿìÿìÿì7777?ÿìaa¯¯"2"Y::È;+6.oc…ÉN8/&///ŒŒ "N`yaÌ7g!!!!œ•½‘‘G®CL×54=/U28Y^CVpÞœj6”âgv€‘2 ‘1.r¢jD±7`./<KD$>K--9.7.P<<<<<<....RR–s'¼J*R*"ˆóÞ..:=4%=?D-W&W;%˜J@ƒ3@V90›~0G+%(C(#(=(.6W0$2$0174!$%2 02)!"$E=80+ÍQÝÓögÿ¾.rA1ððfnCDÒÒÍÎÉÉùStSt-IS-6SS`{{66O6ee5a}T2)‘XtSuN*u5&%287u††uXX–jV%j‰ÃL˜‰æ‹œÁÏZÏZÚ,,,,,,,,,,,,,,,TT(((Anëë‰Ã鈉Tz‰##EEÿìÿìEEÿìÿìEEÿìÿìEEÿìÿìEEÿìÿìEEÿìÿìÿ¶ÿjÿìÿìÿ¶ÿjÿìÿìXXÿìÿìXXÿìÿìXXÿìÿìXXÿìÿìÿÌÿ`ÿÌÿ` ÿƒÿìÿì ÿƒÿìÿì6ÿÕÿìÿìÿìÿìÿ|ÿìÿìDÿìD"DDÿìDÿìDÿì0ÿìVÿì²³äLZ¶ÿ|ÿìÿì LEEÿìÿìÞòEEÿìÿìEEÿìÿìXXÿìÿìXXÿìÿìXXÿìÿìèèèèÿÌÿ`ÿÌÿ`ÿ$þØÿìÿìÿ$þØÿìÿìÿþÅÿìÿìÿþÅÿìÿì ÿìÿì ÿìÿìz”ÿìÿìz”ÿìÿìÿ¶ÿjÿìÿìÿíÿìÿìÿ¡ÿìÿìC ÿìÿì‚Gÿìÿì6ÿÕÿìÿìÞòÿìÿìLZÿ|ÿ|ÿìÿìÿ–ÿ@Sÿà…_³_R%¦‹‰Åéf‰Ém‰×V‹uÅu‹/“9%œ…ÁÃ{{Ã{òºì mɾ‰jÕƒÃdLhË…ö˜‰f…‹ƒÛ?Ûy77//X»f=œ^?Eÿìÿìÿíÿj•EEEXXXÿÌÿ¶C6LÞLLLL˜Ü˜˜ ü,„ÜxÐ 8d˜ x ( è d ¸  èœà4€Ä ôØ€ €Ü,Ð(€ì¼ô´PÐD츴ø„ø  œ!!T!Œ!Ð""@"„#p$$ˆ%%À&8''p'Ø(P)L)¤*°+ +˜,,,À-P.<.°/ /¬0ø1ä2Ð3X4$4T5$5¤5¤5ô6¸7L8d989„:¨:ì<<ì=`=˜=Ä?,?X?Ð@<@ðAÀBB´CC@CPC¸DHDÀDàEE FF8F\FŒF¸FðH$HÜHôI I$I<ITIlI„I¬IÐJlJ˜J¼JàKK<KtKèLìMM4MdMœMÀN@O$O<OTOlO„OœO´QQQ4QLQdQ„QœQ´QØQøS S$S<STS|S¬SÜT8U<UTUlU”UÄUÜVpVˆV´VÌVüWW,WDW\WtWŒW¤W¼WÔWìXXXDXTYY(Y@YXYpYˆY Y¸YÐYèZZZ0ZHZ`ZxZZ¨ZÀZð[$[°\D\x\\¸\Ð\ø]](]@]X]¨^P___0_H_``\`€`´`Ì`ä`üaa,aDa¸bHb`bxbb¨bÀbØbðc€ddDdddŒd´dÌdäe|f”f¬fÄfÜfôg g$g<gTglg„gœg´gÌgägühh8hPh¸iLixi iÌiìjj<jTjlj„jœj´jÌjðkk4kLkpkˆk k¸kÐkèlldlØm˜m¨n ndnÔo`oÔp@pPp´qqlrrtssÈt txtüuXuÐvv\v¸w wTw xxLxxüyy,yyüzlzð{\{Ô|L|\|È},}h}Ä~~ ~<~¨~üT¸€€H€´ Œø‚d‚Ѓ0ƒ”ƒè„„ „d„t„Œ„¤„¼„Ô„ì……4…L…l…Œ…¬…Ì…ì† †,†D†T†t†Œ†¬†Ä†Ü†ô‡ ‡$‡<‡T‡l‡„‡œ‡´‡Ì‡ä‡üˆˆ,ˆˆ¨ˆÀˆØˆð‰‰ ‰8‰P‰h‰€‰˜‰°‰È‰à‰øŠŠ(Š@ŠXŠpŠˆŠ Š¸ŠÐŠè‹‹‹0‹H‹`‹x‹‹¨‹ÀŒLŒàŒøTôŽDޔެŽÄŽÜŽô,Ld|”´Ìäü`ì‘`‘À’\’ø“X“ì”x”°”ü•œ•ð–D–À—@—h—Ô˜(˜¤™4™Äšpšø›x›ìœdœÈh𞸟l ( ¨ ð¡€¡ô¢`¢Ì££`£¼¤0¤€¤´¤ä¥X¥¸¥ì¦t¦Ü§D§Ä¨$¨ˆ¨¸©$©ˆªª°ªì«(«x«¸¬ ¬L¬ˆ¬ø­h® ®L®¬®ô¯X¯œ¯à°H°¸±$±L±„±Ä±ô²<²˜³³³ì´L´¬µ µ¤¶<¶Ä·T·„·è¸ ¸@¸Ä¹4¹¤º ºì»¼@¼Ì½ˆ¾¾À¾ü¿`¿ ¿ðÀXÀ¼ÁÁTÁ”ÁÔÂ4Â ÂØÃÃ(Ã8ÃHÃXÔÃÐÄ,ĈÄäÅ@ÅpŀŰÅÀÅèÆÆÆ,ÆXÆtƄƔÇ8ǜȴÈÄÉÉTɈÊÊ<ʘʸÊÜËË,ËLË\ËlË|ËŒËœË¬ËØËèÌ<ÌlÌ|ÌÄÌÔÍ$Í4ÍPÍl͘ͰÍèÎÎ,ÎPÎl΀ΔθÎÜÎüÏ@ÏpϔϸÏäÐÐ0Ð`ÐŒÐÌÑ8ÑdÑàÑðÒ Ò0ÒxÒ¸ÒôÓHÓ|Ô\ÔˆÔ˜Ô¨Ô¸ÔÔÔìÕÕ$ÕTÕxÕ¤ÕìÖ Ö€Ö˜Ö¨Ö¼Öü××8×`×p׀טװ×Àר×ðØØ Ø8ØPØhØxØˆØ˜ØøÙÙÙ(ÙÈÙØÙèÚ@ÚPÚ`ÚÀÚÐÚàÚðÛdÛtÛ„ÜdÜtÝÝÀÝØÝðÞÞ Þ8ÞPÞhÞøßlߨàLà\àÄá4áÜâ4âDâ„â”âäã`ãpã¼äLäÀåTå´ææìçHç¤è(è@èXèpèˆè é,é°êê0êHêÐëDëäìLì°í í”í¤îîlî˜ï ïhððtð„ð”ññpñàñðòòòLò„òôóPóhó€ó˜ó°ô@ôXõõõ õDõTõ¸öö„öœö´öÌöü÷ ÷”÷¤÷Üølø|ùHùXùÄùÜùìúPú`úpú€úÄúÔúäúôû„ü`üpüÄý(ý|ýäþXþØÿLÿô¬HX$¼ô|ŒXhÔìü`è<L °ôÜì@¤ø \ Ð L ¼ p  ¬ Ä Ü @ X 0P`Äl„œ´ä<”¤´ø<p¤`¼0HˆÈ@t¨ÀØ8Hx¼ø@ˆèø 8˜üDŒôHd”¬äü 4L\l„œ´Ìäü 4Ld|´àð0H`x¨ÀØð Lx¨¸ÈØèø„ÜP¨  x ¤ ø!œ""`"€"Ü##à$<$è%<%´&&¨&ü'„'Ð(D(œ)\)´**\*ü+L, ,4,¼-D-T...<.L.”.¤/ /@/´00h0´11d11Ø2|2ð303P3Ð4`4¤4´5x5À6p6¸6ä7,7´7Ä8P8È9ˆ9ô::L:Ì;; ;@;Ä<8 >Ì? ?X?x?Ô@@t@ä@üAA,ADA\AxAA¨AÀAØAðB\BtBÈBàC$C<CüDDÈDàEDE\EÜEôF F$F<FøGTGàGøH`HàI„IœIÈJhJ”J°K@K\KàL$LhLxLŒL´LÐMMXMÔNXNÄO O\O¬P,P`P PÄPøQPQhQ€Q˜Q°QÈQàQøRR(R@RXRpRˆSS(SøTTT(T8THTÈULU´UÄUÔUäV¤W4WìX\XÜYZ$Z°[0[ \`\È],]Œ^d^ð_€``\`ðaˆb$b”cTddœeTeÔeðfPfœf´føgDg”gìh4h„hèi<iXi¸jTj€j”jÄkk|køl„làm\mØnPnœoohoÌp0pœq qhqèr8r”ss¸t t¨uu„uôvlv¼w<wÐx xŒy yÄz,z˜{{”|||ô}d}È}ü~L ˜Ð€x€¬€à$€è‚‚d‚̃ ƒ<ƒlƒÈƒø„(„h„ „À„ø…(…X… …ä†D†l†Ð‡‡„ˆˆT‰‰d‰¼ŠŠtŠè‹\‹ÐŒŒ@Œ¨T¤ÔŽŽXŽ˜ŽÜ ˆ°ÄØì|ŒÔ‘(‘|‘Ì’P’ГD“„“Ì”8”|”À”ô•$•`•¼•ð–@–`–è—P—¤˜˜@˜°™D™ðš8šœ››`›´›Üœ œXœ´h€˜°Èàøžž(žHždž|ž”ž¬žÄžÜžôŸ Ÿ$Ÿ<ŸTŸlŸ„ŸœŸ´ŸÐŸì   4 L d | ” ¬ Ä Ü ô¡ ¡$¡<¡T¡l¡„¡œ¡´¡Ì¡ä¡ü¢¢,¢D¢\¢t¢Œ¢¤¢¼¢Ô¢ì£££4£L£d£|£”£¬£Ä£Ü£ô¤ ¤,¤L¤d¤|¤”¤¬¤Ä¤Ü¤ô¥ ¥$¥<¥T¥l¥„¥œ¥´¥Ì¥è¦¦¦4¦L¦d¦|¦”¦¬¦Ä¦Ü¦ô§ §$§<§T§t§”§¬§Ä§Ü§ô¨ ¨$¨<¨T¨l¨„¨œ¨´¨Ì¨ä¨ü©©,©D©\©t©Œ©¤©¼©Ô©ìªªª4ªLªdª|ªŒª¤ª¼ªÔªì« «$«<«T«l«„«œ«´«Ì«ä«ü¬¬,¬D¬\¬t¬Œ¬¤¬¼¬Ô¬ì­­­4­L­d­|­”­¬­Ä­Ü­ô® ®$®<®T®l®„®œ®´®Ì®ä®ü¯¯,¯D¯\¯t¯Œ¯¤¯¼¯Ô¯ì°°°4°L°d°|°”°¬°Ä°Ü°ô± ±$±<±T±l±„±œ±´±Ì±ä±ü²²,²D²\²t²Œ²¤²¼²Ô²ì³³³4³L³d³|³”³¬³Ä³Ü³ô´ ´$´<´T´l´„´œ´´´Ì´ä´üµµ,µDµ\µtµŒµ¤µ¼µÔµì¶¶¶4¶L¶d¶|¶”¶¬¶Ä¶Ü¶ô· ·$·<·T·l·„·œ·´·Ì·ä·ü¸¸,¸<¸T¸d¸|¸Œ¸¤¸´¸Ì¸Ü¸ô¹¹¹,¹D¹\¹t¹Œ¹¤¹¼¹Ô¹ìººº4ºLºdº|º”º¬ºÄºÜºô» »$»<»T»l»„»œ»´»Ì»ä»ü¼¼,¼D¼\¼t¼Œ¼¤¼¼¼Ô¼ì½½½4½L½d½|½”½¬½Ä½Ü½ô¾ ¾$¾<¾T¾l¾„¾œ¾¬¾Ä¾Ô¾ä¿¿¿0¿H¿`¿x¿¿¨¿À¿Ð¿è¿øÀÀ,ÀDÀ\ÀtÀŒÀ¤À´ÀÌÀäÀüÁÁ,Á<ÁXÁpÁˆÁ Á¸ÁÐÁàÁøÂÂ(Â@ÂXÂpˆ˜°ÂÈÂØÂèÃÃÃ0ÃHÃ`ÃxÈàðÃÈÃØÃüÃüÃüÃüÃüÃüÃüÃüÃüÃüÃüÃüÄ(Ä8ÄdÄĸÄàÄøÅ4ÅpŬÅÐÆ,ƈÆèÇÇtÇøÈ8ÈTȬȬÉüË(ËHËd˄ˠ˼ËÜÌ ÌhÌ„ÍÍÍDÍtÍͬÍÈÎÎΈÎÀÏ0ϘÐÐ@ÐøÑ„Ñ´ÑÐÑøÒ,Ò`ÒÄÒØÒìÓÓÓ(Ó<ÓPÓdÓxӌӠӴÓÈÓÜÓðÔÔÔ,Ô@ÔTÔhÔ|ÔÔ¤Ô¸ÔÌÔàÔôÕhÖÖ¨Öè×P×ÐØTÙ4ÚÚ¤ÛÛÜ,ÜtÜÌÞXÞôßtààtáá¨áÜâXâÌãhã¸ää|äÀå<åôædæüç¬è`è è°èÀèÐéXéxé˜é¸éØéøêê8êXêxê˜ê¸êØêðë ëTëˆë¸ììHìxì¨ìÔííHíî8îàï(ïpï¸ðð@ð€ð¼ðøñ4ñpñ¼òDòÐó”ô\õtõÔööPöˆöÀöø÷0÷h÷ôø„øÀù(ùÐúxúœúÄúìûû<ûdûˆû¬üüTü¨üðý8ý€ýÈþþDþ¨ÿ$ÿˆÿÈHˆä@€À@€Àl¼ T è4p¬ì(d øH¨`Ð $ h ¬ ü œ ì H Œ Ð ( x È 0 d ˜ è |D¬xô |  üŒÜ$”À$8H¬ÄÜT<dŒ´( ¨€¤Èä(`° hÔ4œ ˜0È ¼!h" ##Œ#Ø$”%% %H%h%ˆ%È&&l&Ø' '`' 'ì(4))œ*(*¬*à+<+|+Ü,8,|,¼--€-è.<..ø/\/Ô0\0ü1¨1ì202´3<3x3°44€55¤6 6t6¼77l7Ø8,8|8ø9„9ì:X:°;;„<<Ì=|>H>ü?¬@”A„BDBøCHC€CàDD@DdDˆD°DàEExEÈFFTFˆFðGXGðH„HØI(ItIÀJ<JÀKdLLL(LTLŒL´LÜMMPMpMM°MÐMøN NHNpNNäNôO8O|OÔP¼PàQQ$QDQdQ¼RRLR°SW´XX@XlX°YY\YtZZ„ZœZÔ[[T[ [ì\<\Ì]]d]´^^P^œ^ì_<_T_l_„_œ_´_Ì_ä_ü``,`H```xaaàbDb„bìccc$c4cLcdc|c”c¤côdŒe8f8gh8hÜiˆjj4jljˆjÀjøkkLklkˆk¬kÐkìl l@l˜lÐlìm$m|m°mÌnnDnˆn¤nÀnÜnøo,odoœoØppPp˜päqq,qPqtq˜q¼qàrr$rHrlrr°rÐrðss<sdss¼sätt@thtt¸täuu8uhu”u¼uävv<vdvŒv¸väw w0w\wˆw°wØxx0xXxˆx¼xðy$yXyŒyÀyøz0zhz zÔ{{<{p{¤{È{ô| |L|t|œ|È|ô}(}T}€}´}à~ ~@~l~˜~Ì~ü0t¤Ø€€L€|€¼€ð `¨ì‚H‚|‚´‚䃃8ƒTƒ”ƒ°ƒÌƒè„„ „<„X„t„˜„À„ä… … …<…X…t……¬…ȅ䆆†8†T†p†Œ†¨†Ä†Ø‡Œ‰‰¼‰Ð‰äŠŠŠ(ŠDŠ\ŠxŠ”ЍŠÀŠÜŠø‹$‹x‹‹èŒDxŽŽˆ(DpŒ¸Ô‘‘ ‘P‘l‘”‘°‘Ü‘ø’$’@’l’ˆ’°’Ì’ø““<“X“„“ “È“ä” ”,”`”¤•0•„•è–à—”˜H˜€˜Ô™(™€™Øš<šŒš´šÜ›››àœ4œdœœ¼œè,pŒ¨ÀØž$žPž|ž¤žÌŸŸTŸ€Ÿ¨   L ˆ È¡¡|¡ð¢h¢à££0£X£„£ £Ì£è¤¥¥l¦ ª,¬ì­ ­|­Ì®,®´¯|°D°¨±D³x¶¶T¶Ì·@·˜¸ðºˆºÐ»»Ð¼”½,½Ä¾ˆ¿PÀÀØÄHÄÄÅÜÇ0ÊXÊÔË\ËÌÌ0Ì´ÍD΄ϨÐ@ÐÌÑtÒäÓ Ô`ÔôÖ Ö ×4×ôØtØðÙ|ÙÜÚ@ÚàÛŒÛðÜ\ÜìÝLÞÞÀß„ßôà”àÜátâ8â´ãÜææ˜ç´èÈéØëdì\ìÜí îhîøïhððPððñ´òò8óXô<ô|ôØõ<õœõìö<öÐ÷øtúlûPü`ýˆþtÿ„¤€@DtÀ´L¼t l ¬ 0 øŒD¬8T|Ü„¸Ìtð\ðœ l”Ü  "<#ø'°)X*ü+„,,.Ð0l1œ2˜3Ä4¤5(5Œ5ð646x7@848´8è9$9h9˜9ø:h;P;à<œ>?äC<C¤DhDÌE`EðF¬G,G HH€HÌI,IIèJ˜JÜK,K|KäLNDPDQ„S´UPX^_taÄb„c<de€fühPi jäk\kkÄkôl$l|l˜l´lÐlômm4mPnHnôoÈpDpÄqärÈs4s sÜttDtlt”t¼täu u4u\uÀv0v`vŒv¸väww¸wàxxXx¨xÐyy0yTy¨yüz(zTz˜zÜ{,{x{Ä||d|¸},}È~ ~h~Àh€€¤€‚ƒH„|……t…Ô††8†`†€†Ä‡‡(‡T‡€‡¨‡Ðˆˆ0ˆ`ˆ‰4‰°Š$Šxа‹$‹H‹p‹ðŒ@Œ´ŒÈŒð˜ðŽlŽŒެŽÌŽìŽü$LtœÄì<dˆ¨Ìð‘‘4‘`‘Œ‘¸‘䑸’<’€’°’à“,“ˆ“˜“À“ä””$”„”¼••€– –¨–À–Ø–ð—— —8—P—h—€—˜—°—È—à—ø˜˜(˜@˜X˜p˜ˆ˜ ˜¸˜Ð˜è™™™0™H™`™x™™¨™À™Ø™ðšš š8šPšhš€š˜š°šÈšàšø››(›@›X›p›ˆ›˜œ4œDœTœlœ„œœœ´œÄ<Lžž,žàŸŸXŸhŸxŸŸ¨Ÿ¸ŸÐŸà  $ 4 L \ t „ œ ¬ Ä Ô ì ü¡¡,¡D¡\¡t¡Œ¡¤¡¼¡Ô¡ì¢¢¢,¢`¢x¢¢¨¢À¢Ø¢ð££ £8£P£h£€£˜£°£È£à£ø¤¤ ¤¸¥ ¥¤¥¼¥Ô¥ì¦¦¦|¦”¦¬¦¼§§,§D§T¨(¨¸©X©p©ˆ© ©¸©Èª˜««¸«Ð«è¬¬¬(¬ ­­|­”­¬­Ä­Ü­ì®˜®ð¯€¯˜¯°¯È¯à¯ø°°(°@°X°p°ˆ° °°±|±è²p²€²ô³,³t³„´ ´¤µ4µLµdµ|µ”µ¤¶¶Ø·h·x¸ ¸¸À¸Ø¸ð¹¹ ¹8¹P¹h¹€¹˜¹°ººlºlºlºlºlºlºü» »»,»<»L»\»l»|»Œ»œ»¬»¼»Ì»Ü»ì»ü¼ ¼¼,¼<¼L¼\¼l¼|¼Œ¼œ¼¬¼¼¼Ì¼Ü¼ì¼ü½ ½½,½<½L½\½l½|½Œ½œ½¬½¼½Ì½Ü½ì½ü¾ ¾¾,¾<¾L¾\¾l¾|¾Œ¾œ¾¬¾¼¾Ì¾Ü¿¿€ÀÁ4Á¼Â<ÂÌÃÃ8ÃŒøÃüÄ(ĬÄØÄôÅÅ,ÅtÅœÅ´ÅØÆÆ|ÇÇ´ÈxÉ0É`É„ɼÉÜÉüÊLÊØË,ËÜËüÌÌ,ÌDÌ\ÌtÍ$Í<͜ʹÍÌÍÜ Ù +k™W_ÀB]„· â @ Ž “Ô4Ò ¾    S  b  • È ï " :R &¬ hhCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain DejaVu Sans MonoDejaVu Sans MonoBookBookDejaVu Sans MonoDejaVu Sans MonoDejaVu Sans MonoDejaVu Sans MonoVersion 2.33Version 2.33DejaVuSansMonoDejaVuSansMonoDejaVu fonts teamDejaVu fonts teamhttp://dejavu.sourceforge.nethttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. http://dejavu.sourceforge.net/wiki/index.php/Licensehttp://dejavu.sourceforge.net/wiki/index.php/Licenseÿ~Z Ù  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a¬£„…½–膎‹©¤ŠÚƒ“òó—ˆÃÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîºýþ    ÿ øù !"#$%&'()*+ú×,-./0123456789:âã;<=>?@ABCDEFGHI°±JKLMNOPQRSûüäåTUVWXYZ[\]^_`abcdefghi»jklmæçnopqrstuvwxyz{|}~€¦‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’Øá“”•–—˜™š›œÛÜÝàÙßžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     Ÿ !"#$%&'(›)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456²³78¶·Ä9´µÅ:‚‡;«<Æ=>?@ABC¾¿DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz÷{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™Œš›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     ˜ ¨!"#$%&'š™ï()*+,¥-./’012345œ6789:;<=>?@ABCDEFGH§IJKLMNOPQRSTUVWXYZ[\]^_`ab”•cdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î¹ ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ÀÁ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                           ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú sfthyphenAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni037Auni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni0674uni0679uni067Auni067Buni067Euni067Funi0680uni0683uni0684uni0686uni0687uni0691uni0698uni06A4uni06A9uni06AFuni06BEuni06CCuni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni2015 underscoredbl quotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037 exclamdbluni203Duni203Euni2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0 colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B estimatedonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215F arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF universaluni2201 existentialuni2204emptysetgradientelement notelementuni220Asuchthatuni220Cuni220Duni2213uni2215 asteriskmathuni2218uni2219uni221Buni221C proportional orthogonalangle logicaland logicalor intersectionunionuni222Cuni222D thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244 congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225F equivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281 propersubsetpropersuperset notsubsetuni2285 reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Funi2290uni2291uni2292 circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4 perpendiculardotmathuni22C6uni22CDuni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230F revlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F integraltp integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni2341uni2342uni2343uni2344uni2347uni2348uni2349uni234Buni234Cuni234Duni2350uni2352uni2353uni2354uni2357uni2358uni2359uni235Auni235Buni235Cuni235Euni235Funi2360uni2363uni2364uni2365uni2368uni2369uni236Buni236Cuni236Duni236Euni236Funi2370uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2638uni2639 smileface invsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni26A0uni26A1uni26B0uni26B1uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C5uni27C6uni27E0uni27E8uni27E9uni29EBuni29FAuni29FBuni2A2Funi2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniF6C5uniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB9EuniFB9FuniFBAAuniFBABuniFBACuniFBADuniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D670u1D671u1D672u1D673u1D674u1D675u1D676u1D677u1D678u1D679u1D67Au1D67Bu1D67Cu1D67Du1D67Eu1D67Fu1D680u1D681u1D682u1D683u1D684u1D685u1D686u1D687u1D688u1D689u1D68Au1D68Bu1D68Cu1D68Du1D68Eu1D68Fu1D690u1D691u1D692u1D693u1D694u1D695u1D696u1D697u1D698u1D699u1D69Au1D69Bu1D69Cu1D69Du1D69Eu1D69Fu1D6A0u1D6A1u1D6A2u1D6A3u1D7F6u1D7F7u1D7F8u1D7F9u1D7FAu1D7FBu1D7FCu1D7FDu1D7FEu1D7FF dlLtcaron DiaeresisAcuteTildeGrave CircumflexCaron fractionslash uni0311.case uni0306.case uni0307.case uni030B.case uni030F.case thinquestion uni0304.caseunderbar underbar.wideunderbar.smalljotdiaeresis.symbols arabic_dot arabic_2dots arabic_3dots uni066E.fina uni06A1.init uni06A1.medi uni066F.fina uni06A1.finaarabic_3dots_aarabic_2dots_a arabic_4dotsarabic_gaf_bararabic_gaf_bar_a arabic_ringEng.altuni066Euni066Funi067Cuni067Duni0681uni0682uni0685uni0692uni06A1uni06B5uni06BAuni06C6uni06CEuni06D5¹€²”]A–€þþþþšþ ²ëGA% } % 2 – þþ%þ%þ@Yþþþý}üþûþú2ù»ø}÷öŒ÷þ÷ÀöõYöŒö€õô&õYõ@ô&óò/óúò/ñþðþï2îí–ìëGìþì¸ÿÑ@ÿëGêédê–édèþçæçþæåþäkãþâ»áàáúàß–ÞþÝþÜÛÜþÛÚ–ÙØÙþØ Ø×}Ö:Õ Õ:ÔþÓÒ ÓþÒ ÑþÐþÏŠÏÎÍþÌ–Ë‹%ËþÊþÉ}ÈþÇþÆþÅš ÄþÃþÂþÁþÀ À¿ ¾½»¾þ½¼]½»½€¼»%¼]¼@»%ºþ¹–¸A·þ¶A¶úµš ´þ³d²d±°¯þ®þ@ý­þ¬þ«ªþ©¨©2¨§¦§(¦¥¤-¥}¤-£þ¢þ¡þ Ÿ dŸžŸž œþ›š ›þš ™˜.™þ˜.—A—––•»–þ•”]•»•€”%”]”@“þ’þ‘%‘»%‹%AŽ Ž Œ‹%Œd‹Š‹%Љþˆþ‡þ†…†þ…„þƒþ‚B‚Sþ€x~}þ~}}|þ{zþwþvþut uu¸@Út tÀss@rþqþpþonSo–nm(nSm(lþk2jþi2húg»fþeþdþcbcþbbaþ`þ_þ^Z ^]d\È[Z [Z YþXWþVþUU2TþSþRþQ}PþONþM-MþL»K(JIJ7ICIHEHþGCGdFEF»EDCD7CBCC¸@@ BABB¸@ A@AA¸À@ @? @@¸€@ ? ? ?¸@@d>þ=-=ú<þ;(:þ9B9d818K7þ6-6þ5K404K303þ2B2þ1-10/-/. .»-,--¸€@ ,,,¸@@–+*%+þ* *%):)þ(þ'þ&%B%E$#þ""þ! -!} -KBþþþþþþBF-B-Bþ-B¸@  ¸À@   ¸€@    ¸@´  ¸@7 þ  þ þ-þ:ú-:-¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++iep-3.7/iep/resources/fonts/DejaVuSansMono-BoldOblique.ttf0000664000175000017500000071451012271043444024057 0ustar almaralmar00000000000000 FFTMYôRÜ,GDEF.í$úHDGPOSî·ŒÈGSUBD‚`¸TþOS/2åÛ6TVcmap¶ñÀ¬Îcvt ¤>ˆþ|8fpgmçQñÄ´‹gasp@ glyfÑü6‰LÍäheadõfÅÞ06hhea ’±Þh$hmtxžõŒÊÞŒ†loca_TŒò'maxp ºB nameÅç¶4!Ÿpost«):ÔZáprepÔ±Ÿ™•¸ŽÆÔ.™É!É!<abbcders ¡ ¢ £ ¤ ¾ >Lcyrllao latn*ÿÿÿÿÿÿmarkÈ¾Ø ntz€†Œ’˜ž¤ª°¶¼ÂÈÎÔÚàæìòøþ "(.4:@FLRX^djpv|‚ˆŽ”𠦬cI gM aH +þu ^D ,þv dJ dJ `F -þw aG bH cI ;oQQ ;obI ;ofM <paG aG dJ QQ `G aG W= E_bber>DJPV\bhntz€†Œ’ª`°|°°|°ÑÑŽ°°‡°°Š°•°’° €¦cyrllao &latn0SRB ÿÿÿÿ4ISM I K _ q Ž œ µ ¹!!!!!!!"!$!&!+!.!_" """" "-"="i"‹"’"¥"Æ"Í"é"ï####!#(#+#5#>#D#I#M#P#T#\#`#e#i#p#z#}#ƒ#‹#•#®#Ï$#&&<&G&g&o'Æ'à'é)ë)û*/+,d,p,w,z,..%..§§§'§Ž§‘öÅûÿýÿÿ  Íæôøü!$CLP»ÆÌÐÖàîóCXatz~„ŒŽ£Ððbr¢ªºÀÇËÏ1Ya‰„‡Š”™¡¥§ª­»ÈÐ,0>bw{…›¹0Th|›Ÿ¬°¶¼ÆÊØàèîø HPY[]_€¶ÆÖÝòö   & / 9 < E K _ p t   ¸!!! !!!!"!$!&!*!.!S!"""""'"4"A"m""•"Å"Í"Ú"ï#####%#+#5#7#A#G#K#P#R#W#^#c#h#k#s#}#€#ˆ#•#›#Î$#%€&8&?&`&i'Å'à'è)ë)ú*/+,d,m,u,y,|.."..§§§"§‰§öÅûÿùÿÿÿãÿÂÿ¹ÿ·ÿ³ÿ²ÿ°ÿ¯ÿ­ÿ¬ÿ¦ÿ¤ÿ£ÿŸÿÿ›ÿ™ÿ˜ÿ”ÿÿ„ÿÿmÿeÿSÿOÿLÿGÿFÿEÿDÿCÿ5ÿ3ÿ%ÿ ÿþÿþùþõþóþñþïþÙþÑþ¾þ¼þ»þºõÄõÃõÁõÀõ¾õ¸õ·õ¶õµõ´õ²õ±õ°õ¥ó£çžç™ççŽç‰ç}ç|ç{çuçdçbçYçDçCçæÿæýæ÷æóæñæðæíæãæáæÝæÛæÓæÑæÇæÅæÃæÁæ¿æ¹æ·æµæ³æ±æ°æ¯æ®æ­æ«æªæ©æ§æ¦æ¤æ£æ¢ææœæšæ’æ‘ææŠæ‰ævæfædæcæ`æ^æææ æææææåÿåüåúåÖå¦å¥å¤å£å¢åœå–å“ååå‹ålåfåZåUåEåDåBå@å=å;å2å1å/å-å,å*å)å'å&å$å"å!åååååå äêä—ã;ããâêâéá”á{átßsßeß2ÞPÝÜÿÜûÜúÜùÛaÛXÛPbwbsbqbbÜ¡ «   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a†‡‰‹“˜ž£¢¤¦¥§©«ª¬­¯®°±³µ´¶¸·¼»½¾¼rdei¾x¡pk#vjóˆšÀs÷øgw¨µ´Çl|í¨ºcn¼TÛ¬m}Àb‚…—°±¸¹´µ¹ Á: ÊË ¢ £½y¶º„ŒƒŠ‘Ž•–”œ›óeuqqrszvtf#3#¶îN#'#¸\ #Í#3#þ#/٨𢃮º¦˜¼°ô%¢Ã%1ž/;¶¢¤Å¤sÕÃáîÕ˜¢ÕÕðqÕîoúVú#Áéd\œH¾```{ÓšÃî\{šá`ª¸ߢƒšoÍ7ºLøÑ'5ª%ÓÕ={¢¤ðD=!Ï¢/îÑsë¶, °%Id°@QX ÈY!-,°%Id°@QX ÈY!-,  °P° y ¸ÿÿPXY°°%°%#á °P° y ¸ÿÿPXY°°%á-,KPX °šEDY!-,°%E`D-,KSX°%°%EDY!!-,ED-ÿÿhþ–h¤@ ˜˜7/ÄÔì1ÔìÔì0!%!!hüsüåþ–øòr)RÕ ]@.    49    ÔäôÄÀ99991/äÜÄ0KSXíííí9Y"!!! #‰ 7þö# fÇ!þåÕýqþ›eçªçÕ@ 9ÔÌÔÌ1ô<Ì20!!!çÿÿÿÕýÕ+ýÕ+ÿ×ô¾N@3      ÔÌ91/<Ä2Ô<<Ì22Ô<<Ì220#3333#3#####73#73ðËJË^Í^Ý^ð6ñHð6ñ^Þ_Í^Þ_ð5òHð5ò^qþÛrþŠvþŠ×þÛ×þ‹uþ‹u×%×v'þÓD /m@;)%%$(<54&#.'.54$?3.'‡;Rb9–5HS49U´a3Y²WDœÿË0/G’L22 ZD*9û’-.,=BZ(¤|±íííú',þÂ.¨‚¸ï!Ø '3V@-(  (?? ?>.?%1"+1""4ÔÄìÜìîÞî99991/îÎöîÞîî999904632#"&"32654& 4632#"&"32654&!º……»»……º?9PP9:OPþ½)ûè˹†„¼¼„†¹=8ON9:QRX†º»……º¹O::OO:9PýP¢`þ^’†º»…„»¹P::OP99Qÿßÿã¾ð&0—@O$%$&%%$()'/.040'$ % -<;C<BE%%!&!0$ ' !* 1ÔÄìÔÌî99999991/äöîöîî99990KSXÉ9É9ÉÉ9Y"%#"&547.54$32.#">73!3267ãV³WÀäź äF‡A16€BX^&(Ý*0ë xlsþÄþ®Z^^,Z.H23Õ°£i:d/·Ûÿ#&GB"tWþ :š]û[öÛ4•\c„çªçÕ¶9ÔÌ1ôÌ0!çÿÕýÕ+Rþò7 @ G   ÔüÄ9991üÌ0 #&57éê89áRPþÈý¥þÛþͦ¬J¡"F!qþòV @G  ÔÄì9991üÌ04'3qéê89áQQþýþÿþò8[%3¦«þ¶¢þÞýºþßy9TðJ@(   B   Ô<Ä2Ü<Ä2991ôÔ<Ä2ÄÄ2990 %#'-73%Tþ¶JLþ´¬þµLLþ´LK¬LÁ­®¸þ¨X¸®­¶Xþ¨¶B\¨ #@ H   Ô<Äü<Ä1Ô<Äü<Ä0!!#!5!ß®þRíþP°¨þRîþP°î®Ñþáìo4@4IÔäÄÀ1üÌ0KSXíí9Y"!#²:6þò׬oþñþô¼ ß·ÔÌ991ÔÌ0!!+u8ýŒßþÝ\ðo/@4IÔäÀ91/ì0KSXííY"!!¢NFþ²oþ‘ÿB3Õ@ 49/Ì991ôÌ0KSXY"3#TßüªÝÕùmZÿãwð /ò@ J$J-B$E0 '0ÔÄìÔìÎ1äôìîÔÎ0@Â////////// / / ?????????? ? ? D@@@@@E UPPPPPU ookkkkk k o ‹‹‹‹‹ ‹ ————— — C////////// / / ¿¿¿¿¸¿¸¿¸¿¸¿¸¿¿ ¿ ¿ ]]4632#"&3267654&#"#"&547>32éI45JJ54IjDG@k$6ABGCj$6AøfUIñÁ×eSJòÁÙé5HI43IGüqljc˜\rkhe•þ¤õÕþIŸ‰˜ìÕÓºœ‰ší+üÕ O@(4JJ9J   ÔÔÄÀ991/ì2ôìÔì0KSXííY"!%!!!^J¼þ¿3Fï53übÉL Jû/þüÿãoðc@24LK JBJ ÔÔì9999991/ìôìôì9990KSXí9íY"!!7%6754&#">32bi3üK13^’pcRÐv3mÖeÁòþ:(þüüø.Rb™HQ;: (*¾–ùþ{"ÿáÿã`ð(M@,M LK#M L K MBE) ) &  )ÔÔìÔì9991Ääôìôìîöîî90#32654&#">32!"&'32654&ž4|›sjSÇn6hÁXÌö½§†„þ¹þçfåz6`Ïlš¢œoUFL*( ŸŒÁ$¤„æþð&$.0‰Rc`Õ o@<      4 J9    ÔÜä991/äÔ<ì290KSXííííÉÉY" !!3#!!þu•5²¤1¤>þæ?ý®:ý¾–üjýþ¾BÿãÕj@84JLKJ J9 E  ÔÔìÀ9991ÄäôìîöîþÄ90KSXíí9Y"!!>32!"&'32654&#"T+3ýÄ5!H)ÅéþœþÌ_¿_3F«_¬ÇŽzN¥OÕþüþë éÅþõþÇ  (*ž‡hy(&`ÿß‘î '8@M M L KM%BE(  (ÔìÔìÀÀ91äôìôìîÖî904&#"326.#">32#"&5476$32#[Mi“[Kl’n3<ŒHÔ/<˜Y§ÂþÌéãäymb¹C‹-XgÈ“XjÈþô,.ÙÑABßÁþýþ©ûûÙš—ˆ‡mÉÕ3@4J9ÔÌÄ991/ôì0KSXííY"!!!Ã)ý þÁßý‡ÕÑúüÑ?ÿãqð #/N@$ M' M-MBE'0 $*$  *  !0ÔÄìÔìÔìî991Ääôìîî990¶)*+]4&#"326.5432#"&54632654&#" k[pŽo[mþ¨hk'յᲖmzþ×ïÒçÆà[Ge\S\}ÝXg—vVh—·n·ÆŸ”Ì©{ÜþîÇ´©ï7I]x]OY|7ÿáhð'4@M LKM %MBE("  (ÔìÔì91äôìÄîöîî9073267#"&532#"&32654&#"73=ŒHœÔ0=˜X¦Á2éããylaþêºCŒ%YMh”[Kl ,.ÙÑABÞÂWüúÙþc–ˆ…¡XeÈ’XkÊ1L'O@)4INI ÔäôäÀ91/ìüì0KSXííííY"!!!!þNHþ²?NFþ²'þ“þµþ‘ªþáL' F@"4IIN   ÔÄäÔäÀ991ìüÌî0KSXíí9Y"!#!!wN6þòט¼NHþ²oþñþÇþ“Xmy˜@ üì291ÔÌ90 5yüåûß!žþãþåùŸì X'yÛ@HH ü<ì21ÔìÔì0!!!!X!ûß!ûßí´ëXmy˜@ ü<ì91ÔÌ9055X!ûßžúþ`ìþaù#uð!‡@K !4  !  ;<B!   "ÄÔÄæî9991/ÎöÆîÍî99990KSXííí9íY"!!!7>?654&#">32Z 7þöXþöX]k‘JEYÍt5fÖh¥Æbui~þ呚`N]~C9>IH 7:¥†_¦bViŒÿòþÁÍs ?a@4-0)? OO P,)O0P O09@? < ,- <&<3@ÔÄüÄîî999991ÔÄüìþÄýÄîî999902654&#"#7#"&5432>54&#"3267# 476$32ÓhŽQGgP Å+r<‹ ÿ·Hh |i|âX[`ìÈO¢Q?k¿_þãþ±XTtP½Âì-·‰MX³‚S]¦R15°™Þ31/#B[kv{þØ›ïþé00®95~D¤<‰ºÍͨ@$ÿÕ n@:      4<Q9    ÔÌ91/<äüì90KSXÉÉÉÉÉÉÉÉY" !!!!!Íþø›hqþÛþp¢þÕÃý¡qú+qþÿìš×#@I###  # #4T T9T S"  "#$ÔôÔìÔì9991/äìôìî90KSXí9í9í9í9Y"²]´ ]32654&# 32654&#%!2#!VÅœ“joTDÅy{VZþKâÓ×¾¯‹šLEKæÃþ¦þF…VRFþ¥mjD@릤¡Æ žƒl»?C<ƒÿãÃðJ@UCVUCV BE  ÔÄì9991äôìôìîöî0K° TX½ @ ÿÀ878Y%#"476$32.#"3267²M¡Uïýya™RM@2‘XPš6EU~vQ¡^+$$槉nr$$þ¸DEaUkþÓ‡’›CIÿøÕ ]@+   4V 9V    ÔôÔì9991/ìôì0KSXí9í9Y"² ]´]3267654&#! #! º`pš+4A}þ½;%hH^þúÛþ¶Ëü?XXj%~„€ öøWÅq—ÒE\PáÕ U@/  4VV9 VS   ÔÄä91/äìôìî0KSXííííY")!!!!!¾ü_ ¤3ý…??1ýÁL{Õþüþ¾þüþy/ôÕ P@+4VV9S   ÔÄä91/äôìî0KSXííííY"!!!!!Áý…>B3ý¾þÙ#¢Ñþ¾þüýuÕfÿã¨ð&x@3#&& !"&4"##V%VUCV BE'%$#"&'ÔìÔÄ991äôìôìþÔî990KSXí9íY"K° TX½'@''ÿÀ878Y%#"476$32.#"3267#7!ßFÄsòþö‘xb˜QMB3ŠQG4)E "€t$?9Î1Ì^;@"פ‡os$$þ¸CF;9/~Mb·N#øÿøÙÕ ‡@?     4VS9   ÔäÔä91/<ä2ôì0KSXííííííííY"²P]@ PPPPP]!!!!!!'oqn'þÝþÙþþÙÕýÇ9ú+˜ýh¶Õ J@&  4V9 V    ÔÄÄÀ991/ì2ôì20KSXííY"!!!!! 3y3þ×¼)4üˆ3)¼Ñþüü3þüÍÿìÿãÕR@+  4 UCVV 9E  ÔÌ991äôìîöî990KSXí9íY"'3267!!#"&AN±gtq”þ—4Ç!RCC¶qoÖNX`_lŒòü ª¬7785ÿîXÕ w@B      49   ÔÄä91/<ä290KSXííííÉÉÉÉY"!! !!'l3\ý¢RþÑþ¬_þÚÕýÓ-ý¤ü‡žªþ P!Õ6@4V9ÔÄä91/äì0KSXííY"3!!P#'ðw3Õû/þüÿÇ Õ â@I     4 9   ÔäÔä991/<ä290KSXííííÉÉÉÉY"K° TK° T[X½ @ ÿÀ878Y@>  /////   '//)/;8]]!!## #ça1)hþßýíþÛÛ/çüÕýqú+®ýqûRÿççÕ ¤@:  49  ÔäÔä9991/<ä2990KSXííííÉÉY"²(]@*5(*'%300005QWPPWPWPW]]!!! ! /×ÓþàþÛáÓþùÕûÃ=ú+=ûÃ=ÿã“ð)P@V'VB'E*! *ÔìÔì1äôìî0@+0044553300000000 0!0"0#0$0%]4&#"3267>7>47>32#"&dPQ;d$+PQ;c%-üÙdUMúœ×ãbTNûœÙâüxxGE'\sÇKxvGE,ƒSsÇþ ÈššŒ—üîÊþc—˜ýºÕk@;    4TT 9   ÔäÔì9991/ôìÔì0KSXí9íí9í9Y"32654&#%!2+!)T’‘h}þ‘¤ì÷I:N蹤mþÙÝþJ‡‡[Mø·¯ràB[QýÑ=þç“ð-|@%VV BE." " ".ÔìÔì99991äôìÄî990@A000 0 0 00000000005553$3%3&0'0(0)0*0+0,0- ]#"&547>324&#"3267>7>ÚåcTNûœÓçaU#iI”Ó›PQ;d$+PQ;c%-úðÊ—˜÷àÕþ]›Bn/º†xxGE'\sÇKxvGE,ƒSsÇÕ @Q       4T T9    ÔäÔì999991/<ôìÔì9990KSXííí9í9ÉÉ9Y"²(]²(]!&'&+!!232654&#=D¤þÓj5iusþÙ#šèàÄþZP{‡‹\\Á HWýçx »ý²Õ¯µ»áþi€|NMÿã‡ð'·@;'''4 ' UC!V U C VBE('$ $(ÔìÔìÀÀ99991äôìôìîöî990KSXÉ9É9Y"¶   ]@    ( ]]@() ( ( 9 9 9 I I I Y Y Y h h h y y y ( ]].54!2.#"!"&'32654&'úÀ|CgÃ[9D¶ov”¸t’‡þ¾þînå|;aÔk…˜FE˜P–~Ü))þã>?qXTS3A·…æþî451QUud>[´Õ}@4V9ÔôÔÄ991/ôì20KSXííY"K° TK°T[K°T[K°T[K°T[K°T[X½@ÿÀ878Y@ ¯¯])!!!jþÚïþ1#3þ…Óþþ-ÿãøÕs@=   4  VE9 ÔìÀÀ9991ä2ôì99990KSXíí9í9íY"!3267!#"&546D¸'Ç\TlÇ'¹#P?LÐ}Ûì '®ü/RZz|øüR´¹?JNÆ·*dË-ÕF@#49ÔÌ91/ä290KSXÉÉÉÉY"%!!!ú-ý{þdA#òãú+Õ)ZÕ @A      4 9    ÔÌ91/<ä290KSXÉÉÉÉÉÉÉÉY"²]@**5888]33!!!þlî )þ3þò þÂþôÕû¸Åý;Hú+üðÿq?Õ u@?    4 9   ÔÌ91/<ä290KSXÉÉÉÉÉÉÉÉY")! !!/þÝÈþpþ½fþá#»hAýÃþÇþ1Ïý‘NÕ`@149 ÔÄÄÄ91/ä290KSXííÉÉÉÉY"!!!‘%»›Bý‡sþÛsÕýw‰üwý´Lÿß Õ 7@4V9V   ÔÌ91/ìôì0KSXÉÉY"!!!7!ñ1ü”¼3ûé/Zý}Õôü#þüôÝßþò?F@!4WWGÔÄÔÄÖÆ991üìÔì0KSXííY"!#3!Dû&òþçò%þ¾úZ¾TÿBåÕ.@49ÔÄÀ91ôÌ0KSXÉÉY"#ÆÊÇÕùm“jþòÉB@4WWGÔÄÔÔÔÄ991üìÔì0KSXííY"!73#7!dþ%òò%üþò¾¦¾9¨˜Õ@ 9ÔÌ91ôÌ290 # #ãµòþÂþÃòµÕýÓ-þÓ-þÑþÛµW/Ì1Ôì0!5Ñû/þÛ¾¾sî`f/¶ÔÌ91ÔÌ0K° TK°T[X½ÿÀ@878Y#ÑÆþÙfþˆx/ÿãu{ *@O      4!  ]]!<"\]%[E_ (  !"(+ÔìÔì99999991/ääôìôìîî9990KSXíí9í9í9Y"K° TK° T[K°T[K°T[K°T[K°T[K°T[X½+ÿÀ++@878Y@23 0!0"3#vv…†       x¦¦¦ ¦¦¦ ]]"3267%!7#"&54$!37>54&#"7>32²¬¦Q?v 7{þÝC­n—±7%ÁfaRÏv/qÉ[Ùàhm?Rº¬mý}MM¯•×ã1 9<98ú''˜“'j/ÿã ´@J    4 <<E[G    ÔäÔì999991/ìäôìî990KSXíí9í9íí9í9Y"K° TK°T[K°T[K°T[X½ ÿÀ @878Y%254&#"!!>32#"&XoŸSJr¥Z)þÛ/%w?¦_’«=7EÒuoÑÊepþëÆhwÏý¤`cÛ½ƒþýi}–ÿã…{W@ ` <K< K [E  ÔÄì9991äôäìæîîÆ0K° TK°T[K°T[X½ÿÀ@878Y%#"$5!2.#"3267¼M£Sâþÿo(bªL5=ˆNªÕz|FŸ[%!!ø×=Œ)+þô:8øÆ€~44Bÿãø ´@J    4 <<E[ G    ÔìÔä999991/ìäôìî990KSXí9ííí9í9í9Y"K° TK° T[K°T[K°T[X½ ÿÀ @878Y"3254&7!!7#"&547>32yo SIr§Z‘}%þÑþÝB¥_’«>8EÒup“þåÊepÆhw…ùì¦`cܾk’Lÿãƒ}&w@#`d<Kc#< [E'& 'ÔìÔì99991äôììæîîî0K° TK° T[X½'ÿÀ''@878Y@ÏÏÏÏÏÏÏÏÏÏ Ï& ]%#"$547>32!3267>54&#"á_ÎnøþþXPTè†Ñü ý †ƒlØ]¨fYdŽ(7**íäafmðÆ-vSce>;h Ubvvçô©@=    4 ddG e    ÔÄä99991/ä2üìî2990KSXí9íííY"K° TX½@ÿÀ878YK° TK°T[K°T[X½ÿÀ@878Y!!!!7!7>;#"XX+þ¨®þÛ®þï+*¸ïð+æA:¬LáüáNÓ“á7þX¦ +Ò@\+ + + + +* +'(&)+ +4)* `<<K<&[*ef,* )+ + ,ÔÄì99991Äääôìæîîî99990KSXí9íí9í9í9í9Y"K° TK° T[K°T[X½,ÿÀ,,@878Y²]%254&#"!"&'326?#"&547>327!s¨RHr¨P5þìþïb¶W6K¥W}6›`¹TIFÉjh‡#%ö »doþ÷¹fo¢þëç --u|…SUѲ‹lgtng¶;`Û@L   4  <[G   ÔäÔì99991/<ìôì99990KSXíí9í9ííí9Y"K° TK° T[K°T[K°T[K°T[K°T[X½ÿÀ@878Y@    7 ]!>54&#"!!>32NþÛ…:7StyþÛ/#t0¨e€Š Øý(ª5:=‡ý‹ý¤\g‹L7 “@5   4 i hded    ÔäÔÔÄ991/ì2ôìüì0KSXííííY"K° TK° T[K°T[K°T[K°T[K°T[X½ÿÀ@878Y!!!7!!!!5D®l+ü+mƒþá´%CþÛ`üáážþªÿÁþX¸@?   4 id dhef  ÔÄä.991äôììîî990KSXí9íííY"K° TX½@ÿÀ878YK° TK° T[K°T[K°T[X½ÿÀ@878Y´]%#!73267!7!7!!Ý!=/;¢þÍ-çdf¦þ×+N)þÛB%+§.;4ák‡TáËVR “@D      4eG   ÔÄä991/<ìä90KSXííííÉÉÉÉY"K° TX½ ÿÀ @878Y!! !!%˜”rþ9þÉÞtRþÛüòZþ^ýB `þTé Œ@/ 4dGd  ÔÄÀ999991/ìüì990KSXí9íY"K° TK°T[K°T[K°T[X½ÿÀ@878Y@ ‰‰‰‰]3!!"&5467!7!q>N-þ×ͪ ËþÎ+Vm!-%áp‚F,¸áÿß¶{+‰@k !    $!"!#""!4&$!  <)[$e" $,"%  &!"% # % " ,ÔÄìÔäî.999999999991/<<æö<î29990KSXíííí9íí9Y"K°TK° T[K°T[K°T[K°T[X½,ÿÀ,,@878Y@™? ? ? ?????7???????@@@@@@@ @ GOOOOOOOOOO O!O"O#O$O%O&O'O(PPPPPP P __________ _!_"_#_$_%_&_'_(…… …!‡"„$„%„&„'L]>32#>54&#"#>54&#"#3>32 €L\l Œï‹ #"09‹ð $"/7‹ðÙÕ)yEEWð@Kpa/aKý1Ï3=(*Zwý1Ï*B(*Wzý1`tDKK;`{Î@L   4  <[e   ÔäÔì9991/<äôì99990KSXíí9í9ííí9Y"K° TK° T[K°T[K°T[K°T[K°T[X½ÿÀ@878Y@ ]!>54&#"!!>32NþÛ…:7RuyþÛÙ% 0¨e€Š Øý(ª5:=†ý‹`¨\g‹LXÿãy} !@ <<[E ÔìÔì1äôìî04&#"32!2!"&R]U{¦aSy¦ýM ×òþ³þõ×ò¬mvþðÍjy6B‘ñÖþ½þpñÿÛþV‘{ª@M4<<[Efe    ÔäÔì999991äääôìî990KSXíí9í9íí9í9Y"K° TX½ @ ÿÀ878Y%!!>32#"&7254&#"{{þÛ-%!G¤]“ª>8EÒupËo¡SJr§ZÏý‡ ¨baÛ½þüj|rÉepþëÆhwDþV¢}¶@N4<<[Efe  ÔìÔä999991äääôìî990KSXí9ííí9í9í9Y"K° TK° T[K°T[X½ ÿÀ @878Y7!!#"&547>32"3254&V'%þÓþÝs?¦_’«>8FÐto‘Ëo TJr¥ZÑùöP_dܾk‚‘}sþåÊdqÆhwšË{}@5       4 <[ e   ÔäÌ91/äôìÔÄ990KSXíí9í9íY"K°TX½ÿÀ@878Y.#"!!>32–0vJ¦³(dþÙÛ%#>Æw>o,/+)°Ïýü`®`iZÿãF{'¼@<    4 ``<K<K%[E( " "(ÔìÔìÀÀ99991äôäìæîîî90KSXÉ9É9Y"K° TK° T[X½(ÿÀ((@878Y@(-/// / / ,/. / :::JJJYYY ]].#"#"&'32654&/.54$32F2K®]^nIJ€vþíõhÏc3V¾]n{=…Xzrâ]º=þ56F;-7%%Œr¶Ï##8;KC.4'$‹p¨Ï¤‘ž¦@>  4 de d  ÄÀ9991/ìô<Äì2990KSXíííí9Y"K° TX½@ÿÀ878YK° TK°T[K°T[X½ÿÀ@878Y!!;#"&5467!7!P>+þhjÿã`×@O   4  <E e  ÔììÔä9991/ä2ôì99990KSXíí9í9ííí9Y"K° TK° T[X½@ÿÀ878YK°TX½ÿÀ@878Y@      ]!3267!!7#"&546{#ƒ:6Sqz#ÙþÛ!,ªeЇÙýT4:?ŒŠwû ¦Zi„H¬Ï`¨@#4eÔÌ91/ä290KSXÉÉÉÉY"K° TK° T[X½@ÿÀ878YK°TK° T[K° T[K°T[K°T[K°T[X½ÿÀ@878Y@    ] !!ÏýÙþ‹P…`û `ü’nZ-` °@B      4 e    ÔÌ91/<ä290KSXÉÉÉÉÉÉÉÉY"²]@.&))::KL   **-<<<IM[\]]333! !`ð!ãæ#üþ^þèïþé`ü¦5ýËZû Ný²ÿ´Ë` Ú@@    4 e   ÔÌ91/<ä290KSXÉÉÉÉÉÉÉÉY"K° TX½ @ ÿÀ878YK°TK°T[K°T[K°T[K°T[K°T[K°T[K°T[X½ ÿÀ @878Y@ )8HYY]] !! !Ëþ#þÕªþÑþ´þþ-” `ý×ýÉdþœRþÃ=ÿ¦þXé`·@A     4  df e  ÔÌ991ä2ôì9990KSXÉÉÉÉÉ9ÉY"K° TX½@ÿÀ878YK° TK° T[K°T[K°T[X½ÿÀ@878Y+7326?!!'p£~ð-uWd<'Ù)5yÆiß54&+7326?>!3#"3o%”Ĩ + `w>%=€)+»•${hY& }‚_S) DP¿m}88×0=L=¿nœ×à¾Vѧ†WLE'Í.8;3öþÙ¶kÔÌ1üÌ0#Ùãøÿáþ²0µ@i+,+,,+ 4+1''%,%W'W/W'G1/, 1'&%(&01Ä.ÀÀÀ991üÄìÔìî999999990KSXí9í9í9í9Y"326?>7.546?>54&+732;#"+{gX' ~^T) BQy%“ͤ)_t>%>ƒ)+Æø–UͤŠTOG*Ñ06<1¾`r#m× :UF¿t–×Þ“XÏy++@ ll  üì1ÔüÔìÀ9990#"'&'.#"5>32326yKOZq Mg3NJN’S5dJ t]FŠ+é<73 ":?å=6 7=RÕ ]@. 49 ÔÄôäÀ99991/ôÜÄ0KSXí9íííY"!!!3Hþõ8 þÝþöfÇ#ºú+eþ›hþÇN˜$R@1` `J K JK[ E%  ""%ÔìÀÀÀ91ä2ô<äÄì2äÆì2îî0.'>7#.547>73N5-n@‡@@3>A77ÂÐmfP×{7Ž75rþˆˆ»h5þø(/ýL.)þø"þà íÈ›jSYþá"üƒ´þû®j…ÿéÝð@F  4 dLK<B J  ÔÔÔÔÄÀ9991/Ä2ì2ôìôìî2990KSXííí9íY".#"!!!!3#737$32Ý5i!P+þ®?á3ü4ë@Ç-Ç%3ïJ°þö))†°áþ²þüNáÅ ì º°^T /c@8  *( -'! ) -0)'!$ * ( $0ÔÄ2ÌÔÄ2Ì9991ÔÄ2ÌÔÄ2Ì99904&#"3267'#"&''7.5467'7>32;dJIeeIJd¬ª¬ƒª$P0'T-ªª¬ƒ¦)S.'QƒIccIJffqªª)S,/Q$ªƒ¬¨ª*S)/Q&ªƒ¬ÿã?Õˆ@K  4 u u9   ÔÄ.À9991/ä2Ô<ì2Ü<ì290KSXííÉÉÉÉY"!!3!!!!!7!'!73=®˜=þŠß%þ¿s—$þdVþÛTþd%˜:þ¿%ßÕý¨Xýð»—½þJ¶½—»öþ¢Ù˜@ Ô<Ì21ÔÌÔÌ0##Ùããã˜ý öý öhÿ=#ðG‰@N7829 %8?/;.2;+;;EB+H785 (" 5%(9B 8?"B5("B54&'.#"#"&'732654/.5467.54632‰P&:>#&N:)9>&"J-Dƒ?U^=micUor-+ïÃR±b.JžKV^˜dmPzr30ë¿G 7,X&':6&'X(#@Ïå"!D?)HECAzLT–C+e?˜¾å!"D?Ee DHsK]š2)b? ;H1a@ÔÜÔÌ99991Ô<Ì20K° TK° T[X½@ÿÀ878Y@////????]]3#%3#Zî1ìþ¤í1ë1ööö}ÑN1ID@%  q po>qpo2n>n&JD  8 ,/ÆþåÄ2îÎ1ÔìÔüôüäõþäÎÎ0.#"3267#"&546322#"&'.5467>"3267>54&'.P4[0akjb5`*7j2©ÊÊ©7iµÚZZ\[[[Ú~}Ú[[[\ZZÚ~cªIGHHGG¬cd¬FHHHHH©¨h__g¨»›œº$ZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZGIG¬ebªHHIIHHªbe¬GIGÓ¬ð *.t@A! '~!~ -~+ +'~}~|B/! *$-,.+/  $ $ /ÔìÔì99999991ôäìüìÌÔÄîîî9990#7#"&546;7>54&#"7>32"3267!!XÏ.{OkßЇIF9“S!PA”¤þÈzu:,Upý˰#ýPþ@X65zh• #(*(&®i^ E…HK,:xþªNN# 1@    // ÔüÔì991Ô<Ì299077N-þÀê-þv\/þÁé-þw#îÝÝ‰îÝÝXjyƒ@ H üüì1ÔÄì0!#!X!îü̓ýç,ô¼ ß·ÔÌ991ÔÌ0!!+u8ýŒßþÝ}ÑN 4L\@3-*+'0!o5n2+oAn M*',$0-!1"3+"$ G3 ;/ÆþåþõîÄî29991ÔÄüô<ÄþõÎÎ99902#"&'.5467>#32654&'2#'.'##%"3267>54&'.hÚZZ\[[[Ú~}Ú[[[\ZZÚb@@998(…NG&7O¬?9)¤cªIGHHGH«cc¬GHHHHH©NZZ[Ü~}Ú[[[[[[Ú}~Ü[ZZþb¤((+)oXZAU 81¦…:/ðq®GIG¬ebªJGHHGJªbe¬GIG¦XB1·ÔÌ991ÔÌ0K° TK° T[X½@ÿÀ878Y!!Ëw%ý‰¼V´ð@m mBÔìÔì1ôìÔì02#"&546"32654&hCz//12.0zD¾ÀHdbHHdcð30/xDBz./3¾ŽÁ¢dHHbcGHdXy *@H  H   Ô<Ä2ü<Ä21/ìÔ<Äü<Ä0!!#!5!!!ßšþfíþfšþf!ûßþžìþžbìbûêîœðL@&ŒŒ4ŒŒŽ Œ‹3ÔÔì9999991üììôìî90KSXííY"!!76754&#"7>32¶ýh3[HC?•ML’I›þfD-‘%A[-1$#¢lcŒþá/ð(K@+Œ ŒŽ#Œ Œ Ž Œ‹)  &33)ÔÔìÔì9991üììôìîÆöîî90#732654&#"7>32#"&'732654&omX^PF0ŠPIBžypScÛËK“E>’O`oW’73(.˜fYZo cJ†“šQF-59î¸f-µÔÌ1ÔÌ0K°TK° T[X½ÿÀ@878Y!#wAþFÅfþˆÿÉþT{`&•@V   &#$"% 4 % <"Ef e'&'%  'ÔäÀ991ä2äô<ì2990KSXíí9í9íí9íY"!3267!3267#"&'#"&'7-!„D=Rfƒ!– +.P$HL 5{F:LaþT ýX0?Fps¨üø#! ÞKSOO0/þfÿ;¦Õ `@-  49  ÔÔäÔ<äÀ9991Ä2ôÌ90KSXÉÉÉÉ9Y"!###.54 þ¸¾-¿þÕ¾¤«¸EÕùfùùN¬ŽÙ'˜-/@4IÔäÀ91Ôì0KSXííY"!!ßNHþ³þ“ÿÿ—þo|«!œÏß S@+334Œ Œ Œ‹     ÔÄÀ991üììÔìî20KSXííY"3?33!;ìjååŇãýo-+•)ýN‘ݬ+ð 4@~~ }~B  ÔìÔì99991ôìüìÜì0432#"&4&#"326!!3ïÁ›­îÀœ®%D=WxEIHþô7:¥†_¦bViŒñÿÿÿk&$ ®3uÿÿÿwk&$ «3uÿÿÿrk&$ ¯3uÿÿÿ“m&$ ¬3uÿÿÿnk&$ ª3uÿm !‘@J    !  !4 < = Q  " !  "ÔÄÔÌÔÎ99991/<îæÖÎî9990KSXÉÉÉÉÉÉÉÉY"32654&#"!!!.54632!oM66MN56MEkþÙþu¢þÙ”$*§vt¨/þæþþP6MM66MMþûúqþ$j5u¨¨u;lâýÿjÕ…@L    4V <V9VQS  ÔÌ91/<äììôì2îî0KSXÉÉÉÉííííY"!!!!!!!33þÝ<3þüN64ýÍHþå›þýŒ‡þðã}ÕþüþÉþüþnþüjþ–Õþüý…{ÿÿƒþoÃð&&«uÿÿák&( ®Xuÿÿák&( «Xuÿÿák&( ¯Xuÿÿák&( ªXuÿÿ¶k&, ®/uÿÿ¶k&, «/uÿÿ¶k&, ¯/uÿÿ¶k&, ª/uÿðÕ"}@F!" 4<V9V #" #ÔäÔìÀ99991/Ä2ìôìî20KSXí9ííí9Y"! #!#733#3267654&#;%hH^þúÛþ¶‰/‡f?Ó-ÓN`pš+4A}ÕöøWÅq—ÒE\P˜íFþºíþrXXj%~„€ÿÿÿççm&1 ¬3uÿÿ=ÿã“k&2 ®3uÿÿ=ÿã“k&2 «3uÿÿ=ÿã“k&2 ¯3uÿÿ=ÿã“m&2 ¬3uÿÿ=ÿã“k&2 ª3uw“Xs 0@   ü<Ì291Ô<Ì290  ' 7 Xþ¶J¨þ¶þ¹¨Jþ¶¨GJËþ¸þ¶¦Hþ¸¦JH¨þ¸HÿsÿÁL'.l@8+'/.(+%&"V"+VB"E/ .(% '& &/ÔîÖìÀÀ99999991äôìîÀÀ9999999032.547>327#"&''.#"wM8}›4üô bUNüi¦=š‹Í L5Nûœr­9 áK4y™6b<=2^ý®"J'Ö¢™Ž—BAªsã8a,>ŽO‹ìb˜JH´rN47þÛþ®ÿÿ-ÿãøk&8 ®9uÿÿ-ÿãøk&8 «9uÿÿ-ÿãøk&8 ¯9uÿÿ-ÿãøk&8 ª9uÿÿ‘Nk&< «/uÕˆ@L  4TT9 ÔäÔì9991/ôÔìÔì0KSXíí9í9íí9í9Y"!!32# 32654&#w@þÙ#'/ì÷I:Né¸V‘’g|Lþ´Õ㸯qÞB\R®þJ†ˆ[Mÿã…3@e )*+*&'%(++*4("!%3.+%`< %<.G E))*31! (+*1!  ! 1*4ÔÔÄÜÄîÎ99999999991/äþîîÖî99990KSXí9íÉ9É9Y"K°TK°T[K°T[K°T[K° T[X½4ÿÀ44@878Y@lllllllllll ]#"&'732654/.546754&#"!6$32yœ`L;:þÿÜB‚@1:k.ZhoE,*·©ZR]rÛþÛÛ)ÔÆÃ #dS9`L;}D¼Þú ODBoG-g;‡»%@GfeûžfÔÝ®±+dÿÿ/ÿãuf&DCÿÿ/ÿã×f&Dvÿÿ/ÿãuf&Deÿÿ/ÿã‡9&Duÿÿ/ÿãu1&Djÿÿ/ÿãu&DsÿáÿãÏ{ L3@ƒ. .8765493.01/2.43 <1!C=("L !`"<`= ]]1]"K%c9]=\F@[+%E1_MLI 32!"<=.(16C.I..MÔìÔìÄÔÄ999999991ää2ô<äì2ìæî2îîîî999990KSXí9í9í9í9Y"K°TX½MÿÀMM@878Y@,3;3<3=   ¥/ 0 1 2Ï ÏÏÏÏL0000;0<0=]]7#"3267>54&#"!3267#"&'#"&546;7>54&#"7>32>32ÏJbu:1CP% (,8Gšþ=UF8‰A/9ˆQ^† =“Y–óÌl DA4‹V/O‘ERt4‹T~ˆ‘NgU332#"&Zo¡SJr§Z“{þÛ%uG¤]“ª>8EÒupÑÉepþëÆhwý‡¾ý¤baÛ½þüj|ÿÿÿ¦þXé1&\jÿÿÿN&$ ¸ÿÿ/ÿãu&Dˆÿÿÿ™k& ³$ÿÿ/ÿãuF&ŠDÿÿÿþoÕ'tc$ÿÿ/þou{'t Dÿÿƒÿãk&& «Áuÿÿ–ÿãf&FvVÿÿƒÿãk' ¯Áu&ÿÿ–ÿãœf&eVFÿÿƒÿãÃk& ´d&ÿÿ–ÿã…1&‹KFÿÿƒÿã4k&& °Áuÿÿ–ÿãçf&FfVÿÿÿø¼k&' °IuÿÿBÿãv' ©wÿ®GÿÿÿðÕ’Bÿãs'À@h'&% #"$      4 "  <"<E[G %      (ÔìÔäÀ999991/ìäôìîÕ<Î2990KSXíííí9í9íí9í9Y"!7!7!3#!7#"&547>32"3254&VBþÐ%/%’%’óþÝB¥_’«>8EÒup“Îo SIr§ZT½tt½û¦`cܾk’qþåÊepÆhwÿÿáN&( ¸ÿÿLÿãƒ&Hˆ'ÿÿák& ³(ÿÿLÿã‡F&Š'Hÿÿák& ´(ÿÿLÿãƒ1&‹'HÿÿþoáÕ't(ÿÿLþoƒ}'tHÿÿák&( °muÿÿLÿãÓf&HfBÿÿfÿãøk' ¯¹u*ÿÿþX¦f&eJÿÿfÿãËk& ³2*ÿÿþX¦F&ŠJÿÿfÿã¨k& ´2*ÿÿþX¦1&‹Jÿÿfþ¨ð'ªÎ *ÿÿþX¦+'–ZrJÿÿÿøÙk' ¯Lu+ÿÿ;`k' ¯ÿ-uKÿø4Õ!!7!3#!!!#73!7'+q+&+‡ ‡×þÚþþÙ׆ †#q#Õààà¤û¯˜ýhQ¤¤µµ8#!67654&#"!#737!!!>32%þÝ„ :7St|þÝ÷   # þë>0¨e€Š×ý)ª,:=‡ýö¤zz¤þÂ\g‹&ÿÿ¶m' ¬/u,ÿÿ;9&uÓóÿÿ¶N&, ¸ÿÿB&óˆÿÿ¶k& ³,ÿÿ`F&ŠóÿÿBþoÞÕ&,(tiÿÿþo>&Lt}ÿÿ¶k& ´,7` j@"4ded   ÔÔÄ991/ì2ôì0KSXííY"K°TK°T[K°T[K° T[X½ ÿÀ @878Y!!!7!!5D®l+ü+mƒþá`üáážÿß¾Õ%3267#!#"&!#3!3{>,lBJO‹ç1£»>]wIG†þ8/9/¿±¾0ýÇ0¾²JX`_lŒòü ª¬n85½þüü3þüÍ þu¯ž"%+73267#7!7#3!!!7!#3#_#6%/z]à0¨IR°Ù.¯+ÖGÖû{¨¹ .ý. ‹ÒqÕGÖH§.;4ák‡TáËVýÂüáážþªÿÿÿìÿãÊk' ¯‹u-ÿÿÿÁþX f&eÚäÿÿÿîþ0XÕ'ª‰(.ÿÿRþ0'ª¾(NA` !! !!%Jªcþ7þ¼ÍwSþÛ`þƒ}þ^ýB `þTÿÿPsl' «/v/ÿÿérm' «.wOÿÿPþ0!Õ'ª‹(/ÿÿÔþ5 &ªL-OÿÿPÍÕ' ©Îÿn/ÿÿé!' ©"ÿ®OÿÿPÕÕ'y§¬/ÿÿél'y?¨Oÿº!Õ d@8   4  V9   ÔäÌ.9991/äì90KSXííííY"3'%!7!P`ƒs+Ž'_úsþ^\w3öcšÓÕþ®šþÙþ#þü%¤ž@J 4dGd  ÔÄÀ99991/ìüì990KSXí9íííY"K°TK°T[K° T[X½ÿÀ@878Y3!!"&5467'!7!%=N-þ×Ω 5þìZ¢bþÏ+V^"gþEl -%áp‚F,Ã’Éáþ:ËŠþÓÿÿÿççl' «Bv1ÿÿ;³o&vú Qÿÿÿçþ0çÕ&ªC(1ÿÿ;þ0`{&ªj(Qÿÿÿçòk&1 °uÿÿ;¥f&QfÿÿÿSÿ'_ýâQŸÿÿþV²ò6&#"!!>32 +73267šIjmIM½þÙ#'/>Î~½‰8¬4qqÐy,%dg÷oKN‚ü4Õð€þÝþßüŒþönlãn…fþX†{#+732767654'&#"!!>32v…1poÒy,'d43| NOv|þÝÙ# 1ªjŸ<$×ýTüklá77„=+,5Ž~ý`¨]fi?eCÿÿ=ÿã“N&2 ¸ÿÿXÿãy&Rˆÿÿ=ÿã™k& ³2ÿÿXÿãyF&ŠRÿÿ=ÿãCk& µ2ÿÿXÿãôf&RHÕc@84V V 9VS    ÔìÀÀÀ91/äì2ôì2î0KSXííííY"!"&547>3!!!! ";b3ý¿ûÔC54&#"!3267#"&'#"&547>32>32267>7>54&#"þ (,7G™þ> VH9‡@/9ŠR^…2\›¤@68Ç„Sx%0ŠR‚‹ür4D 394D3²B'40UYFÓ54O]72î((QEKK¨žŒ<€‰=<;>‹ƒ1†XþZ@JvaZxHA@I*|HQz"IAÿÿl' «0v5ÿÿš]o'v¤ Uÿÿþ0Õ'ªš(5ÿÿ!þ0Ë{&ª™(Uÿÿªk&5 °7uÿÿšçf&UfVÿÿÿã‡l' «Bv6ÿÿZÿã³o&vú Vÿÿÿãk' ¯Nu6ÿÿZÿãFf&eVÿÿþo‡ð&6«ÿÿZþoF{&V«ÿÿÿã¢k&6 °/uÿÿZÿã‘f&Vfÿÿ—þoÕ&7«ÿÿ¤þo‘ž&W«µÿÿ´k&7 °Ouÿÿ¤r‚&W ©sµÕ)#73!!!3#kþÙh÷&÷bþ…22þ…b÷&÷ÀùþþþÀ‘ž!!!3#;#"'&54?#737!7!>>,þ¸&¸&Uá,öüI/#²&²þâ,>žþÂáŽÀÄ)!áP3k=P¶ÀŽá>ÿÿ-ÿãøm' ¬9u8ÿÿjÿã9&uXÿÿ-ÿãøN&8 ¸ÿÿjÿã&Xˆÿÿ-ÿãøk& ³8ÿÿjÿãF&ŠXÿÿ-ÿãøm&8s8Rÿÿjÿã &Xsöÿÿ-ÿãCk& µ8ÿÿjÿãôf&Xÿÿ-þ_øÕ&8tÊðÿÿjþo`&Xt‰ÿÿ)Zr' ¯G|:ÿÿZ-o&e Zÿÿ‘Nr' ¯:|<ÿÿÿ¦þXéo&e \ÿÿ‘Nk&< ª/uÿÿÿß l' «Bv=ÿÿ1³o&vú ]ÿÿÿß k& ´2=ÿÿ1¤1&‹]ÿÿÿß k&= °/uÿÿ1¤f&]fçô)!7!7>;#"oþÛ®þï+*¸ïð+æA:áNÓ“á7P/ÿã'%!#737!3#>32#"&7254&#"})þÛ÷º º%ù ù??¦_’«=7EÒuoÊoŸSJr¥ZÏÏö¤zz¤þÂ`cÛ½ƒþýi}qÊepþëÆhw!Ü× (1!2)"#7676763232>&# 32676&#æJù×%³’¨‡#*þ×þÛþ¶ì,& ÿ<&j{hÁD-po#PnŸU-ƒbˆ×½¼¢ İØÂÀ%/!M›ALæþ¥P¸SýºþF`wyjÿÿÕÕFÿãP"'!!!632&"2IÍ6 þÜ.)þK‘³ÉNK76þð?H¾’?K¾æÑþ~ºœ–þæþèþ̨D¸¸þ¼¸;pÕ%32>&+'3 !“y‘ˆ/b‘yþTµˆmn5å`þÆþËøbòbýR¦†©ýÑÜþÜ.ÿã}&"2>32#"&'!'7?H¾’?K¾›H¢ZÇ›76þðÀeƒ þܵ|‹D¸¸þ¼¸î]]þÐþäþèþÌba¦¦†èÿã9ð703276#">3 !"&@?‚L¢×11s¢LœY@K£U.ðIIþtþÒU“+HFAüýAFH$$þrþ‡þˆþr$‹ÿã¡k %27# %6326;#"&#"£”­@š©þÒðIje‹©/-på`+];2 x•¢×1]ì‡þ¸HŽx#¤@á7.8‡þÿýþ"€ÿãž#%27# !2676;#"&#"¨™4¥Âþýç56c:XoÒy,'_8,"4n§ªdD4®/ÓsþóV89×Vlá7+þôrUŠþô?ÿÿÿðÕ’!·Õ"#767676; !#26&sÿ>_ŒìnþMMþzþ’캮¾33j¶&4M–Fmþ£þtþsþ¡Ëü?ÛÚ;Ö#";! &767676?6%3!]Ĉ‹_ÄþY¸þÞþþÛÞ)%W4©ÄDýe¦jyw`êú+ÂØ ®Q2“[nÿã"7632!7!!7 26&"À˜67…‹Ê³GKþ)þÒþÜ ƒª?I¾‘?J¾4–œº‚Ñùì¦Ãìþ¼¸¸D¸Tþ=˜{%/%#"'&'&'732?676#"32%26&#"P„ßcRs* Y%WQhA( £îÜjVîíÜ53­Mþãiœ@Tijœ@T5?—‡NM ×",f==þÃþñþù¦Kš¹J¹¹þ¶¹ÜÕ 3!!!!!2{LýÁ3??ý…2¢þÞ‡Bú+[ÿãuð6'&#">3 ! 732767S€LœY@M¡U¼JJþªþüþý¼JqrK2(HÄbyAFH$$þxþþ‚þxˆ~_þüPxxP<ÿãªð'"267# &7>7.76$32.#";•€¤vðäg5kãqþ÷é*Ϧˆx$0ì\Áa4_¸Tn‹hnž2œ}s^o1/þî$&ä٢ǩ…µÎ!þô(*]SOWþüÿ±þX Õ!!!+7276?!íýä?ã3þ^ 2foÒV,h3/BÑþ¾þüþ}+Ødlá72‰}-ÿšþX7!!#!732767!7!7>;#&X,þ¨®0gqÑþÄ+êc34¦þð,'Æäñ+åoÂbáüÙclá78ƒTáNÊœáÿãNk(%27#7!# %632676;#"'&# #]17Ê0Ì…ÉëþÞíHiaŽ«<: nÒb,];2]ÀþÅjPÄ+ì"øýT”“s¦C  lá7.Rþ:þdOTþÞ^Õ '!!%3276V‡þÿB¨bCýä†K3ü×4BÀÈ‹þüÛþáý%þ‚þvþñ ]¯þõu~‚•ÿtÿþä*'&76'&#"#3>32?67673.†€¡Y‰,/)3 ?@21}è.èu+ŒU-,)3 [;CIè9ýžšy}Û V*4GF}ýý¤]fijÑþõ« 4 T^ˆx ·Õ!!!#"'&Ÿ•þ×2y2þ×f¹2êÍVWÎþüýŽ.-þüvx·Õ!!3#!!!#73 2y2þ×b÷&÷6)2ü‡2)6÷&÷bÑþüþ ÀþêþüÀ÷ÿ‚1Õ!!!676&9›8þ¸ß£cþÙ#'s@Ø‹‡x6¯@G:$›üw ¦þÕý²GÝq3°= Ù676;#"3! !!ê1poÒy,'b53Dªcþ8þ¼ÍwSþÛ»Aúmlá75†þ¢}þ^ýB `þTİÛ3+;!"&?#73!7!­¸%¸ =bê,þÄÑŒ1¨%¨pþ×,NœñÀ^„náØû^ÀBáüÝÿ¸ê!!''%!Hþúþ׋þ¬þ×&ïE P)+î £ûUTý¬ÅE•¢¦W¶ ÿåÕ%#"&326732673#7"&ª/sJ‘H>ÃðÕd9ÕíÕd6ÕðþÞÕ&}ˆ`pGDÈ<ìû¼}TV{Dû¼{VT}Dú+tBMQÿcþVnÕ!+732767!!! m@¥_•0,<::=ÍÓþÞþÅÏÓþäZ4áKЬûÃ=ú+=ûÃeþVw{!6&#"!!>32vàþÝ×0NOw}þÝÚ#!1ªjŸy×ûTziŽ~ý`¨]fÓ>ÿãuð  &7%63 6'&#"!3276Ñþ"+ztTa¼J}þN3*&U”VyþQqrK;‡ ßtxþxþý€p¬ÅODÖ2PþüÈ_xx]ÿÿÿåÿãI&2¨Ÿ„ÿÿÿÿÿãÜ&R§Ÿ—ÿûÿãEð &7%6327!#327&#"_þ´ ,|[GPÐWvþÝêÝ’þéD@!CgF—gU%‡ ßq›€ú+p ü×Äþ¡i5x yôh8þVf{327!##""327&iWí›g—þÓêï©m«°í¤iœ@Ti+Nd* =|eùòÎrýПª¹þ¶¹]]QôÕ32>&#"#7676763! !#!ÒU‘ˆ/b‘þ¾ÿ>_Œ/5ä`þÇþËmþÙÝþJbòb'&4M–FmÜþÜýÑÿÕþVv$&"2"'!#776;#"36322?I¾‘?J¾<´GrþÜ#=doÒy,'_9,!ƒÌÀ˜6SþZD¸¸þ¼¸ô»ý¸Ñalá7+‰ÃþÌþèþWy* ÿ}Õ!!&+!!3 3267654#*4¦þ¼w/k^DþÙ"'.ƒ jJ ºþ^O‹y{ÁÓ @_ý祩þ ÕîfH‡9Dš¶ þi_m$,{Aÿã˜ð(03267# &7>?>76&#">32Ç›Rd emlí†;rêoþòß, ÔÁ‰c ak`Ñm8nØgãÖ'Â7eCYcRTþÏ45ßâ¦ÚB01Q>PVFC ./èËž»|ÿã[{'>323267#"&7>?676&#"^_Ã_Ôǹ¯U”V ^g^Ôl2sÛeäÂ"¶§X ß YbX¹\=´¢ˆ¢&"<89<:7ÿ##­­©&2P8954ÿÿÿÑ ÕçÂþXÌ&(;#"&7# %53232#%4'&'32'3pÑ ?å+ñäŠ'͇þÌ24/2ÒF:Št8)¨þoa@ iHYÛûÏ@áœÊ lY¡ÒÒ265L†þX ž !!;#+732767&'&7!7!Ê>,þg=Uá$1hoÒy+'b6+ÓBJ+dþâ,>žþÂáýîKA¶+Öflá7,eHQÚá>R×"#76767632'!!å,!ÿ<&j{h/ñ2þ…ðþÙðÕ!H!M›ALþþû-Ó…t67676;#"!!;#"&7!7Ñ+pe²y,'b53+þg=Uá,öü“*eþâ+`Ûmb á75gáýîKAá¡Úá´þVÕ!!!!;# 4?ðþ…22þ…è “',~þÁÓþþûV=,‰á >ÿÿÿÈÿã&8›Ÿ<„ÿÿÿÑÿãÞ'XÿhŸ˜Y´##"67#7!32676&'!Üîc7%=þ¢ëíÓ=%¡î)×4a{ *Cgfž* "C4Ùámþñ¿þÈþ’n8¿mÓþôOê§ÖèèÖ¦íM >NÕ'73!"'&7!276@„ ëc7%=¯ªþßýG,"•2'Âf™^!ÃH˜9mþñ¿þÈ·²°n°üŽ.-øX“TÕ !!776&ÛþÜrþÙrý.Ÿ‹Ñ/—š8i52þJý´L‰ý¨Ó@\M×ÿ¬þXF` +7326?!76&ÞþQ¦ëò,wZ`@"¸%f´‘^_Ô1eW?-˜üïþÑß=o<Aý)_;;& Ø#O9ÿá Õ!3!!!7#73!ò/þ0ã&þ—ùÂ2ûê/]&ß·ýwÕôýùÀþêþüô&À÷0¡`!3!!!?#7!!"-þë›&þ»êM+üi-ào% ýÊ`åþýÂÛÛåÑ ÿÐÿäÕ"# '&7!327676'&+7!!‹6þù™Úþ®lw+>V=bëF #Ü!'ÿ+»ýÊ3ò0þ!Je6;©þçm?t€ßk9)’³Úqôþo dnÿËÿäãÕ %2767!! &76767677!!#  ŽX<>+©šþ®þ69[euS’þ½0ò3ýÊ-+ÿþ×(8êN5J߀tPcfq! ‘ôþüþÚÏ‹..þHâ`!#"32767# '&76767677!!°+¨“UU}Š]fel:mllgþÚ‚ƒ+[cwS“þÑ-+ýÊÄÚ45fcj6þ×%tsÞfq! ÇåÛÿéþV®`932767#"'&547676%76767654'&+!7!lEOieë=m#*&.dnoom+†itjöqYhY>f*$.÷üYýË(Ñ'"08g!ŠCA &%+â K;jC:$ $"âÜÿßið$!!?#7!7>76&#">323+Qu3üL1Á„¢%UG\[ coOÒv5sÕ^íä%Y[u%÷6UþüüªtÀAV…Adm?<')Ý¿Xš^ÀHÿÐÿäìÕ"#!!!2! '&7!32676'&+3Ž¥¢3ý…DsF:3+¯°þÚþ®lw+>D@oЧAA“f†OþüþŸ@tfÞstt€ß_95jcf54ÿäþH•` 2!"'&'32676'&+!!‚ˆna33+¯°þÚgdd_9U¹[ЧAA“¨Y­)þYÄ0,fgŽÞst%)58jcf54vÑþ58ÿâž%#"'&'327676'&+#7;7!3÷ ¤Ip-*‘åÙ£EF=:=BDH¡oA%7ÃT8Ú%Ö!B!é%61^‘ç×…Ò#*+rB`GLr!¦¦ÂÿÛþVÀ{!!676;27676'&#"@<þ×<)"^O_œ§,% cý&Ð !iI£7„þÚ ¥o%,p\])(þUÅN¤& A,AËþòQ€Õ!!t þÞþõÕú+ÿÿleÕ'‚ÿ‚åÖÕ!!!!!!!7!7!7!t Cš.þf+š.þfXþõXþf.š+þf.šÕþ¥ëÜíþ:ÆíÜëÿÿRÕÿÿÿ¢k&$ °/uÿÿ/ÿã‘f&Dfÿÿ¶k&, °/uÿÿ‘f&ófÿÿ=ÿã¢k&2 °/uÿÿXÿã‘f& ­fÿÿ-ÿãøk&8 °Duÿÿjÿã f&Xfÿÿ-ÿãøá'h^Í' ª<8ÿÿjÿãO&¾q#;ÿÿ-ÿãø' «N' ª6õ8ÿÿjÿã0&¾…xŸÿÿ-ÿãø' ª6õ&8 °kÿÿjÿã&¾rŸÿÿ-ÿãø&8' ª6õ ®Šÿÿjÿã&¾„rŸÿÿSÿãz{ýÿÿÿ á'h^Í' ª<$ÿÿ/ÿãuO&¦q#;ÿÿÿ á'h^Í&$ ´ ÿÿ/ÿãuO'q#;&‹DÿÿÿjN&ˆ ¸ÿÿÿáÿãÏ&¨ˆÿÿfÿã,k' °¹u*ÿÿþX¦f&fJÿÿÿîXk' °Pu.ÿÿRk' ° uNÿÿ=þ_“ð&2tôðÿÿXþ_y}&Rtôðÿÿ=þ_“N&¡ ¸ÿÿXþ_y&¢ˆÿÿÿÐÿäk' °/uyÿÿÿäþHžf&6fÿÿfÿãýk' «¹u*ÿÿþX¸f&vJÿŠÿãÞÕ333327673#"7##­ûoÞoû· 8E! WûH;þü˜;ÞûÕýÇ9üRJ˜%2:8}¿þ‹þÐþì0qýhÿÿÿççk&1 ®[uÿÿ;`h&Q„üÿÿÿjHk' «uˆÿÿÿáÿãÏf&v¨ÿÿÿsÿÁLk&š «3uÿÿÿ®ÿ‹f&ºvÿÿÿvk& ¶$ÿÿ/ÿãuf&“Dÿÿÿfk& ²$ÿÿ/ÿãuF&•Dÿÿák& ¶(ÿÿLÿãƒf&“'Hÿÿák& ²(ÿÿLÿãƒF&•'Hÿÿ¶k& ¶,ÿÿ7f&“óÿÿ¶k& ²,ÿÿ7F&•óÿÿ=ÿã“k& ¶2ÿÿXÿãyf&“Rÿÿ=ÿã“k& ²2ÿÿXÿãyF&•Rÿÿk& ¶Î5ÿÿšËf&“dUÿÿk& ²Î5ÿÿšËF&•dUÿÿ-ÿãøk& ¶8ÿÿjÿãf&“Xÿÿ-ÿãøk& ²8ÿÿjÿãF&•Xÿÿþ‡ð&ª6ÿÿZþF{&ªVÿÿˆþÕ&ª7ÿÿ¤þ‘ž'ª„WÿÛþRjð: >54.#"7%>54.#"$32j4Q[y}ÈþÍþŠþ< +po‘Z97O-9Dë6ÿZŠO1)DF$•þï6ëh¦hE’"Sslr*¡g""h®’‡v@ "69LOa13I Uþ_"SLT>*> œ¤,F^]þOö{37>54&#"?>54.#"7632öº•B^0Vûâ1@{uŠsa6bB4<Ñ,ãR|D) '?? Œì,èøYŽZ<gyàA8C@#þhÀå&2>DR*=EEÎME=C/#4 ~Ï… 4ILÿÿÿøÙk' °Lu+ÿÿ;sk' °uKÿëÿtƒ%-%726#"'632#"'#67&'#"32!26&"^-g*3ž…}™-HõtC2%?%3+JL±˜67µ='g$ý0?!wi?!xØ… êðþ‡ yaGyl$>40/-ü»þ¼¸¸D¸ þX6Õ!!#+732767!7!Cò/üŒÂ31foÒy+'c5+ý0_ýwÕôü#þüØdlá7,dôÝ^þXÐ`!!1+732767!7!P,ý0M+2foÒy,'b5+ý-ÐýÊ`åý`ÛØdlá7,då ÿÿÿk& ´$ÿÿ/ÿãu1&‹DÿÿþoáÕ&«2(ÿÿLþoƒ}&«2Hÿÿ=ÿã á'h^Í' ª<2ÿÿXÿãyO&¸q#;ÿÿ=ÿã á'h^Í' ¬&2ÿÿXÿãyO&·q";ÿÿ=ÿã“k& ´2ÿÿXÿãy1&‹Rÿÿ=ÿã á'h^Í&2 ´ ÿÿXÿãyO&Üq";ÿÿ‘NN&< ¸ÿÿÿ¦þXé&\ˆªÿtZ %726#"7632#"'#67&'&7!7!5-g*3þ`…}š.HõtB‘%š9F1­þ×,NÙØ…šêðþ‡ y1BXlû}áû¢„7&ÿÃÿtŽ{/%726#"7632#"5#67&'&?6'&#"!!67632ž$S!)·9tc{.HÃ^9uz*41/ ?-2}þÝÚ#%9TŽ(8!Ø…`jêðþ‡ y1BXlûôƒ+5GQtý`l3!3ÓÑþߨžÿtž$%726#"'7632#"5#67&'&7!7!!!!$S")Ã!-:sd{.HÄ^9t {*41Yþâ,=%=,þØ…^¨jêðþ‡ y1BXlûÉá>þÂáÿÁþX®`%#!73267!7!Ý!=/;¢þÍ-çdf¦þ×+N+§.;4ák‡Táÿåÿãœ-26&"&"2>32 #"&'#7#"323Ü?(…q?*…Z?(…q?)…@8v?‹\77ІGV !Ì 4{G†Y77Ò‹?RsÍÏþ¼¸¸D¸þD¸¸þ¼¸î]]þÐþäþèþÌba¦¦ab40]]S5þJì{-&"226&"#"3273>32 #"&'#õ?(…q?*…ý¦?(…q?)…@8v?‹\77ІGV !Ì 4{G†Y77Ò‹?RsÍD¸¸þ¼¸üþ¼¸¸D¸ý]]04ba¦¦abþÌþèþäþÐ]]ý­ÿrÿÁM!!!#'#7'7'3'Ei‹þ…NþÙþ¡Ux€9M! &líµP{ÕÝsþ[üq^þí??y?ÜþRµƒÿrÿÁM( &#"# ''&7!27&'3267Åæ¢×2èM¡Uþ×yÍ‹,J‹.UK"F‹²ýj9¢LœZÇþÿýý_$$Áãr1£âyŽ MsÆ~ý"&€AFÿ¬ÿ‹Ó''7&7!27&'3267#"'&#"!tþcZO‚t® &ýÖ;UŸN5R²béuÌ ½!uwõ‚¶9 ~y§˜!ýêZ9:þó++~­~¶¨ÿóVÕ !3#!!#7•'•ô%ô6w3übiú%ÚûýÀþêþüÀÿ„ÿÁ_!'!!7#7#DDþˆ‹Fiþ…2¬<‹z4þ_–ØlTbþ_r‡BsˆIþ1üü\w†þs{1.#"#"';# /&'32676&/.76$32r2F¥Xbo Í P™t"þüä]-ž‘*‰þèaƒn2V¾^gv @†M¡{ Ô_·=ÿ4598P2&©­­¥PÛ­é s7:<98<"&¢ˆ¢´dþÖ`!;# /!W-üØ+"‚-Ÿ«+£þèa‚0i,ÑýÊ`åý);éPÛ­éVå [æÕ$"#"#7676767637$!!!2>'&#%N+& ÿ=&W1D›€-.þžþãeþÙ›Vp'32p½$0 "M›B?€~êëýýúmÈ66ÿ°š×+32654&#%!2#!#7332654&+3þDÅy{VZþKâÓ×¾¯‹šLEKæÃþB~.~ïÅœ“joÅè.ìþ¥mjD@릤¡Æ žƒl»?C<Rííf…VRgíÿïÿãøÕ47#73!!!3# &%32?!-R&R•'•®•'–Z&Z"NF”þ'ì'\`È2 þR`TfÀûýûýÀ¬´D“ÆêRZö=@ÿ¤Õ !!!ËþþÓ…œAþÝãûÕú+ÿ÷Õ!#!#73!2!&'&'32654&+JsþÙs¯0¯pèàĵ=D¤þÓj7Q‡‹\\\Ný²Nø¯µ»á HWýçx »ø€|NMŒÊ{.#"!!!#73!>32”(xM]˜2z&þ‚UþÛUc&c_%">Æw&6ÂþJ¶Âè®`i^ÿãŒ{ ,27676'&#"!67632!#32767# & ¤IJ%#NtQQþÈ}"EZ[d¾¯#&“þöÌ --dhhhu0hÏpþî±P**fL--XWq}J((ʵÄ^]1G%$:ú(&ÞxÿãÆ{7!!7#"763226&"ƒ$ÚþÜ!BTTeÀ˜67ŠˆÇZ?>þ]?H¾’?J¾Ážû¡¦a114˜˜/.þ±þ¼¸¸D¸ ÿãY{%!!67632#"'&&"2NþÜÚ$!BUSeÀ˜67‰‰ÇZ>?£?H¾’?J¾ž_¦a11þÌþèþ䘘/.OD¸¸þ¼¸ÿãÿã2$67632#"&'!676;#"3&"2ÂIQPZÇNN86þðÀeƒ þÜÓ1poÒy,'dg?H¾’?K¾Á]./˜˜þäþèþÌba¦@üklán„ýKD¸¸þ¼¸Hÿã'}70326&#"6763 !"'&H56EDU½AvRSRJ4[WXZuu66þ þýbQQ9 :´P¶7 ,œþëþìþȬÿsŒ}-%3276#"763!"'"''67&'&76!2&'&#"a46“ ƒSËŠ©*:þÅfÈJ0t65²²ZOQJ46GFR¾ è9Kµéþ½r]G&Aœœ,þô7¶¨šBþµŽ$26&"7!;#"'&?#"'&32ƒ?2˜|?5˜üs#þì6+a¨3418EEQ´EE77ºG00Ïþ¼¸¸D¸:Sút„nálküa11šš0/.ÿãé#26&"%!7#"32776;#"d?3˜{?4˜>Ôþ× 8‹Q¶77½H006Y]¨a,4Ïþ¼¸¸D¸¹ûÀ¦ab40/.]glá75%ÿãy{ 703267!77632!"&6'&#"%4_¹e™³ý 4§¥ù÷à57²±þçvÌÍ 00epEE7 ?:‚„w ”“þÂþîþå–—* q=><;Sÿãz{>3 #"'&7!6&#"32767énÜvwx75þ¤÷ùmm4÷™eÏw²-/peHH!'**—–þåþîþ“” w„‚:?þ—t;<>=qÿÛÿãÖ{ 332767#"'&'&'&#"67632?;#"'&7[þ“!HN<ª‡;="7ñ]eht.‚Riz7] M9hu+·2Dfb qrlm^.tklbþÙ‹Ç=@BW­ž ì &1EÛ OY"ì[\p”ÿÿÿêx{2!"'&'7327676'&+7327676'&#"767632+”±¯þÙbfej.Refrq&lZ<2·+uhCY M-zoVŽ.~lk]ñù"UU=”p\[ì"YO ÛE1& ì ž­WB@ÿÉÿê¬{A#"&'7327676'&+7327676'&#"767632?;#"'&7'En02‰‡ÞJ–O.=JLUH*SC+&‰+XK6E 8![U@l._RRE´Y5 ¸–!) !#HZ& þó7=JJp\[ì"TO ÛE.) ì O.N€«Õ7´o[¦µ$lÿÖšy. !27676'&+7327676'&%672'$Ðþ÷HG*F.< 4!J„*…@/E 42þäbÆÐ_]IFŒ~.,~~ÒÇMþû@M“þ•þ”%?H Û"J7#"·-VW”bLHIGg”VV=ÊLŒÿøþXT`%#!73267!7!!7!3#1ßÒþÄ,êbgLþé&3þ×,N_Ê&Ê+ü×án„‹ÂáþÂÿËþV ;"32767#"'&76763!3676;#"#!"'&'327675YAB !\ZAB=ˆNQP]¤LL1+‹‹¤'-hn|á.…*'(+”1¥¤þýTLJI3ACBIPQ wRR–šOPRR•:ýGb..¢¡úâ¡ Ìrvë..‡ÜýþŽ!6MM¤bþVì`*%#"'&76763)!"'&'3267"3267P£_©NO1,Œ©.'Ã2§§þöVMNK4BEEJ‘¤ +[†"!_[†=¾b\¢¡úâ¡ üþŽ!6𤤖šOP¤•:™r_%%#"'&7632&'&#"3276?#7!Þgjikòop23­­ú`UTG.GKMP•ba <='#"ø+æe2—––•(ì1YX¤¢YY ¨ÝHþao 7!!3276D¨I,þfþ=.B\íCCýcûµ®Nþ‚þ}èñV©#þ´LýþÊ~||¢Ðÿˆè`%276' !!! 76- ; /ëCCþ=h'.þ¸þ¯1*ˆW;HJ9S¾þ´LýßïÌüüÔ°þJÂ^!32767!!#"'&±#„NP;:|#þÒþÝu1ªjŸ<=‡×ýVy44GF}ùì\]fij!!6'&#"!676;#">32 þÝ„NP;:|þÝÓ1poÒy,'dg1ªjŸ<=×ý)ªy44GF}ý@üklán„ˆ]fij9þVJ(%6'&#"!676;#">32+7326¡}NP;;}þÝÔ1poÒy,'dh1ªjŸ=<(Ž2goÒy,'dh)y44GF}ý@üklán„ˆ]fijÑý)ÜblánÿÒý!!!3#!!7!7+7!!-f9þšúD^Ê&Ê)l,ü,l)@Ö&3þâþÜþÂÕááÕÂÑÿý`!7!#"'&7ïþâ,D€eº,êÍVW,áýlŽ.-ävxàÿýÕ` !!7!!7!=‚l,ü,l‚þ”,þ,ýbáážááÿþ*#"';!"'&?&#"767632!7!3276-VNMN6: bê,þÄÒEG1N—V,ZMOReþØ,N¤B>FIL+é<„77állûu:?å= áü³mú"&#";4;!"&?#&76!7!!‰; 2`=bê,þÄÑŒ1{¸&+Ñ@Dþ×,NŸ 028?Üp„náØûoÏê)báüÌœ þDÇ%!7!;!"'&4ÿþÖ+NþÖ bê+þÄÐGFáú„77áll°þHß. !;#"&7#7!!#"'&'32676'&+A|þZT)I°,í^0¨Þ+»Uœ,þ‚k6M%"+‰ŠÜMKJF:=ˆDh‚..n~ÄÁþN„náØû`áþLåþ9 !qfÞst%)58jcf54+ÿåñ`"%#"'&326732673#7"'&Í/sJ‘$%>zð‹d9‹í‹d6‹ðÙÕ&>>ˆ10pGDdd<wý1}TV{Ïý1{VT}Ïû tB&')(RþV`"%#"'&326732673#"'&ó.tJ‘#%>zðŒd9ŒíŒd6ŒðþÔÕi&>?ˆ00pGDdd<wý1}TV{Ïý1{VT}ÏùöB&')( þVÐ{367632 +7327676'&#"#6'&#"#367632./99K’#$={/Z^¯c, R-,„ 22ŒíŒ 31ŒðÚÕ'=?DD`ðF#"ddþÄý‰Údlá77„¦~)*+-yý1Ïy-+*)~ý1`tD$'Rÿ¥þFÒ{'!7676'&'&#"+7326?!67632Ñ…þ×P &\FF=+'qpªz-RT+«' VTT[ xªýVo›‘77#WV™þÉÜËyvë\‡Üp¤b./îÿÿþF&{"6&'&#"!!67632;#"'&7ÿ 'UMDlþÙÚ' VTUZ¡;<,U-u©BG&Ò-HWK¤ýÙ`¤b./wxâýj†/.ëv€Ä Æ` !!! !僖IÚþ}–þ·`ýu‹û ‹ýubÿão{ !7632#"'"!36'&!#3276-jª¬íîmoj««îíniN7!!7#"'&'Œ'zL^KK2 )d$ÙþÜ"?bdv<87.5,,! >&lnû ®`45+ÿå°327676767!!7#"'&'b'zL^KK2¹$þÒþÜ!>bev<77/5,,! >#9/u¶ùî®`45þV@`%327676767!;#"'&71?#"'&'F'=&66nû \67álbÜ)…`45!þV¤{.#"!!67632n(wN\ML2'·þÚ-&"&lnüR ®`45{þV¤{!.#";#"'&7!67632n(wN\ML2'\g&,xÒEJ0Ò&"&lnþ%„77álp÷7®`45·`37!676;#"!,d+gjüö,âT+,g€,áÚQPá! Kýîá `37!6'&+732!,~gVà,öüHK+d,áK !áPQÚýüáÿû`+!&'&'&+!! 32?676'&'&'&#º(0²þ s$"$VþÊÚlhi"USþœ0>W/ 9  %A- þm WþF`ML­tDC_ö(:% ÿÔý` "#327676'&'32767!#!!èO4O[-."!%K313ÇkåF;;Bm++|}ìþÚfêþñ HI ÝGþÂa/0!GHo KJ`|þVi{8&'&#"#"';#"'&732676'&/.76$32i2GRSXb78 Ì P˜;:"ƒ‚ä?@d',yÒEF12V^`^gu †N¡z  Ô_[\=ÿ48P2&TU­VWS)7álkü7<98"&¢ˆ¢´ÿšþX7!#!732767>;#"°0gqÑþÄ+êc34á'Æäñ+åCÙclá78ƒƒÊœá@ÿšþX7!##!73267!7!!7!7>;#"3U1foÒþÄ+êbhMþé&3þ×,)'Æäñ+åB9rÊ&¶þJÚblán„‹ÂáNÊœá0Aý¶ÂïþXâ!6'&+732;!"'&Eí Bå+ñäŠ'ácê+þÄÒFAÂ@áœÊû}ƒ87álcÿ³þX7&(%;++5$!3>;#""#"6763Ì‹¨)8t‰,\qÑ2þÔ;93‡Í'Æäñ+å@ ýØ5Hi >a2®‘Ò¡Yl Êœá@úýL56T:þÂ(`!7!6'&+732!!z>þ‚,~gVà,öüHJ*d,þâ>þÂ>áK !áPQÚýüáþÂÓþVž!!;#"'&7!7!>€+þ€ºTâ,öüKH+·þâ+>žþÂáüDK !áPQÚ®á>Cÿã `!7#"&?#73!!!3)3276UþÚ 0ªh z( R&R_&_:_&_H&þ‘þÇ0NP:0¶þJ¦]fÔÐ/ÂèþèþÂyhF;Vÿ˜ó`&327676'&'!##"76767#7!fO.A((^_IJ27É&Î@+#2°±èçç0 KW\Î&ÑELQskŽXWWXŽksTHÅ;…lžþž:÷¢pAÅ•ÿþƒ`$#'&77#73! ?27676'&'7,6!1œœÆo¥CC,=¡,¡%C=!&`VO6!«;…lžþžyxà:yáþ¦þÆ© 4aXŽksTH¶ÿã`#!!>iŠþ×Eþf`û jü–ÿ“n` !###!!dõþåÓþåõªüüüý`üþÿ£ê676;#"!!fZ`avò+wZ00A!ÖþÌsþ~þÌÙžIHßo<û¿×ý)°ú`!!!±O’Qýè\þë\`þ§Yýxþ(ØÿêþV]`!!;#"'&7!7!Ü€,ý/N"d&+xÒEB$ýŒ,ÑýÊ`åý`²„77álbÜå ÿ…`%3276'&!367632+'67!7!'& -ýÊ-ý1Ù.CMÊ1;ó Ë ýï-ÐýÊÜ9Gúåý`v[«þìþ½0@78å ÿäþHž`! !7!!"'&'32676'&+MÝýÊ+-þ!Ik73+¯°þÚgdd_9W[Z]ЧAA“¨ÄÁÛåþ9 !qfÞst%)6jcf54 þH¨` .&'&23676!7!7#7#$!26'&+jº” ‹ c8*óÝýÊ+-þ Hk82+¯ «›£þi=9t´m3A“¨}A U4XÁÛåþ9 !qfÞs.( #-[H*4ÀV327676'&#"67636!PTÃdB&C¡HLJN:JML£Ø”])-¨n°`þ¾àrLG`Br+*#Ó…×ç‘^þе!&'&76762&'&#"3qþ¾`¤Hp-)‘æØ£FE>:>BDH¡o@$8Ãàý ð^‘ç×…Ó#þÖ+rB`GLr!'"'&'327676'&#`B`¤Hp-)‘æØ£FE>:>BDH¡o@$8Ã3àþ^‘ç×…Ó#*+rB`GLrQþVÞ#%32767#'&76762&'&#"&C¡HMJN:KLM£Ø”]*¨*‘æØ£EF=:>BCH¡oA„`Br+þÖ#Ó…×a×…Ó#þÖ+rC_6ÿÇš¨ *32676&#"67632 '&67632"'&EDCyxφvyhjþÙ1ÊÉéä‚13ÆÆþ.‚ƒï +)1< Rb6†^^¼†ƒÂaa„ý»»»»ýþýµ¶¶µ5'''/-6L&& ]` &27676'&+27>&+#!!2vH,+ !!Jœ&R^44T^§( ^)) …†òýûÚÔücc45º20ÅþLf2ËQHIj¢OP`GF›R:97ÿÖey.% !";#""'&76767&'&767676 HGþÖF.< 4!J„*…@/E 42bÆÐ_]IFŒ~.,~~ÒÇM@M¼kl%?H Û"J7#"·-VW”bLHIGg”VV=Êþ´þt,+%#"'&7632676;#".#"3276?#7!Xhiikòpq32­­ú2ioÒy,'dg7H–P•bc y'##ø+æe2—––•åelán„þã10YX¤¢² ¨Ý Æ` !!!!!!åFOUOFÚþºZþ«Zþº`þk•û Ïþ1ÿËþW˜$!!3+5$)3!7!&#"?676UþÛB%þب(9t0VoÒ½þÔ;93’þ×,Nýëòi ^kb3+VúÒ¦Sk ïáû]L@6<þVÿ` !! !7!ÒþÜþVþœùþÈDÎwS$þV'þƒ¢¾ýô`¬~²`!!!YD¢·9ý`üÃþÝEþV'%#"327#676;#"! 26&"f;EBH½‘86¶R310_]¨a,6!!þÓþßg?˜|?4˜=ž[1/0411aˆúmlá76eùö}þ¼\\¸D¸\j&327676'&#"67632;#!7+73dTÃdB'C¡HLJN:JML£Ù“])-¨n° É&é%þ¾%Ö&ÚàrLG`Br+*#Ò…×ç‘^p¾¾Â¼¡&7&'&767632&'&#";3+!7#73פHp-)‘åÙ£FE>:>BDH pA$8ÃTDÚ&Ö%þ¾%é&É€p^‘ç×…Ò#þÖ+rB`GLrþ Â¾¾Âÿöÿãä %(26&"73!!!+7#"'&7632Ú?re?r3òt¯U,þa*ýéŸ 066=s!"67_^w6!"³}ÏÏþ¼\\¸D¸\–SþLåý`Û¦a11šš˜˜/.™ý~‚þ@ð 4> !#7#"76323!#"'&'32676'&+26&"¾Bþ®¯¯ /m+rs°>:<6:1357Sm##XeþR?re?r2¼Áü{¦ab4˜˜/.]SþLåþ9 !qfÞst%)6jcf54åþ¼\\¸D¸\ÿæÿÕ9<%3276'&26&"73!367632+'67!+7#"'&7632µü÷?re?r2ñt¯U,þƒ$0Y/y4<‘ z þÒŸ /66=s"!68]_w6!#±}ÏÜ9Giþ¼\\¸D¸\–SþLåý`v[«þìþ½0@78¦a11šš˜˜/.™ý~‚gÿ㬞/I&'&#"#"'&'#"'&7#733367632732676'&/&'&767#3¬2'.05;$# u.Y"UU‰<<<9”—%'+d«,«>°>æ% 2X965ý¨/778>K L-^ ßg3=ÿ48H:'SU­VW"(PQÚá>þ½K3Zü…H7<98"%RQˆ0*ýîK !ÈþX &.37676;#"+732767#"'&7#73#3Ž>æ'AB‰+‰(& ,¦/DL~½+Œ;#“—%'+d«,«>ª‚æg3žþÂNÊNNá0Abáü¬+Úblá7.bPQÚá>ûCžýîK !€ÿsÇž3<G367632&'&#"763#"'"''67&'&'#"'&7#733276#"#;&76F=æ(w›6..)4)(1V€ ae«,<¼>x) '”—'%+d¬,¬=£ X N2®ßg3'&žþÂÌ)#,þô7¶¨šGµéþ½r]G&A#(ÊPQÚá>ûJ9K,ýîK !ˆÆÇ~þX³3;>32+7327676'&"####737676;#"Ï®!%n?`)…1KK~H+<$#} ^*)}®®Ï®°®£,£'BA‰‘+Š(&Âb¨]fikÐýTüklá77„z45GG~ýüáNÊNNá0ÿã®?&'&#"#"'&'#"&7#7!;7327676'&/&'&7>32­1&0/5;#$ u.Y!UU‰=<<:¾}D0¨²,bÔ ;0l9>%& K-] ¯966=ÿ48H:'SU­VW#)Øû`áû¿„77H7:98"%RQˆ¢´•ÿûå#7!;!7!!!7#"&¥§²,bÓ ;€äþ¬*,þa*ýد}DÓ`áû¿„77ŸÛåý`ÛØ3 333# #333# #3ß$Í¿&ÌÞþÊû%ÌúCß$Í¿%ÍÞþÊû&ËúsþP°þT¬ý¯þQ þP°þT¬ý¯þQ¯±" %#!#!#!#!?W•W9þ‰LW•W:þ‰±Âþ>)„Âþ>)ÍþJ"332767!!#"'&76'&+732¥…MP<:}$þÑþÜv1UTj¡;=(ˆd&,xÒEB^ýVy44GG|ùì\]33ijѹ:7álcâþV;)3327673;#"'&?#"'&76'&+732V…#>@22}åÒ,P,a£531,‹U-+(ˆP,a¨31^ýVyhGF}ûË„nálkü}]fijѹ:7áleôœƒ#6&#"#367632‚OºK !23%$FºªºB65De)(3þi~D:'(Fþ™hþ­5;<ôœƒ#6&#"#676;#"67632‚OºK !23$%FºwGE‡M@@65DeQ3þi~D:'(Fþ™a<=~>JL4vj½û+732767#7!7#73 Œ‡Ê–? ]¾z¼&¼ox~JÝ~r¿œµ&'&#"#367632–'(1>-3 8¼z¼%?>L,"b !<>þßtb6 »32767>73#7#"'&';'(1>-3 8¼z¼%?>L,"J !<>!ýŒb6 ì­‹"32767>73#;#"'&?#"&' '&2;1/  8¼z@N†.+%~M&GI #<>!ý8~=7{J6:Êœ "#327676'&'3276?3#!322:S0  {è+%&)E NO—þÄz寘()|)œ²7((?Y**tœ1 333# #œ‹—´œü²•²þ=þÃáýŒFþºÛ°"+7326?33q7<=LšL9=(šÅUìÅYY((}">!bþi—ÿÿÃtCfǤ‡¾8@4GÔÄä91üÌ0KSXíí9Y"!3ÝþÇ5׬‡~þ‚q‡‹!#R94þñ×­þñþ‚~ÿÿáÂ$Á˜YÚ®27>'H#x7-.6vDC.cdvt'&l&'šSTìTSÚr0"'&6763"!vDB.cdv6..tšSTìTSš'&l&'eœ¡327676'&#"767632#µ6}>) -g.001 010iŠb=iEq6Î8@+'6%@ § vJyQ5þê_œ×#&'&767632&'&#"3PÎ6i1I[Ši,-( )*,.gF( $}8þd5QyJv § @%6'+@PîFf6@ ÔÌ991ÔÌ290K° TK°T[X½ÿÀ@878Y3#'#œó·°˜ð¾fþˆáážî‘f6@ ÔÌ991Ô<Ì90K° TK°T[X½ÿÀ@878Y#373Fò¶®™î¾îxããÓçþ@ÔÌ1@ÔÄ0#ýl½lýÕ+ÿÿ¦XBˆÓÿ[þ†@ÔÌ1@ÔÄ0#ýl½l†ýÕ+ÿÿMþjéÿ&µ.£`!!‹ƒ›þ£ƒþeä|ýþ„¿ä[`!Cƒ›ä|ÿÿ&Y`aÿ«þLÿÿÈ&`bÿ«þLôµj 733##7#7,´,â"â,´,à"‰áá´áá´wÕ[‰!7!9þ>"ÂÕ´ÿÿ¾`FŠÿÿR;“1‹Ïá :@ŠŠ 2 2ÔìÔì1ÔìÔì0K° TK° T[X½ÿÀ@878Y4632#"&732654&#"Ϧwv¦¦vw¦™M76MN57Mþv§§vv§§v7LM66MMþo®#@  Š 2 ÔÄìÔÌ91/ÔüÄ90!33267#"&546œK04*%P-1\+ctNPJ!)œ MB<yh9¢@   ŠŠ  ÔÌÜÌ99991ÔüÔì999999990K° TK° T[X½ÿÀ@878YK° TX½@ÿÀ878Y@'           ]'&'&#"#>3232673#"&ã1*"4 ‹ˆ_"=.3$&4 ‹}e#AT%!E<‚š$'C>ÿÿuîôfþ®´…2%7;!"'&7þá–È""iê#þá·:/ ýls½«°87´o[¦²» 7673733276ñr)þúþß$Ù¡ÎY¢Îþaœ toîÖÙ‚‡¿ï2ººþS®FEE[cœn#7!;#"'&Ã^¾zw(?–ʆ./¢ä~ýžJ>~=<'.#"#"&'732676&/.7>32.j8?F4`O¤’A„A8z ˜‘ÿÿÏásuîôfL@ ÔÜÔÌ1Ô<Ì20@/,,,,&87663146LLJJBB]!#3#ðþ¦¬Šöþ¿¤fþˆxþˆÿÿžî‘ffÞîôª#óV¾VªþD¼ÿÿÁîª'‘þã‘;îf###y£¯’Ž®Çfþˆxþˆxÿÿ¾` &qr$؆+F>32#654'&"†"ËœH7(+¦r™L;b"@#%KE³‡a¹!3Íþæì‡2­Â$Á!727#03þîxyÁöþøzáÂ$Á#3$7#0yyþî30Áözö9îÿf!#¾AþÿÅfþˆÿÿúý¯çÿ'C‡øÁÿÿ²ý¯1ÿ'vÿyøÁ6üÙóÿ#7373#í·%·#¾l½ý½·ýÕoüÙ-ÿ33##Û¾$·%¶$½ü·½·dC´n!7!#Òþ’%+l½±½ýÕ‹ãE7326764'3#"&Œ:A'= œtV5bR2&;1'M(7^)s{6-þ 9ÿÁ "&54763"ý]XbL]%FþŽ„o?wS?„:%PúýKÿ73733ú%·#¾$·%ý½··½·üÙþN#7!##n·%+%·#¾ý½½·áüÙ2ÿ #73733##˜·%·#¾$·%¶$½ý½··½·@þG‘ÿ7!A$+$þG½½õþXi¨ %+73276?!P0qoÒy,'b63#+úmlá75†}ÈþVš¦ ?!;#"'&È# b',yÒEE)}}†57álmôþ28ÿ(!·ÔÌ991ÔÌ0@ //??]!!$0þíØöBþ2êÿ(E@ÔÜÔÌ99991Ô<Ì20@////????]]3#%3#ýì0ìþ¥ì0ìØöööÀþ ÿÁ µÔÌÌÌ1µ  ÔÌÌÌ0#"&5476322654#"cL\]XbL\]Yò%FI%EìwS@o?wS?oÄ;#Q:%Pˆþ6ÿ:!#ìÂÆþΗþo|%@  Š  2ÔìÔÌÄ91/ÖþÅ90!#"&'732654&'4$$™‚4f0+R#DI0\,cv œ62E7ÿÿÔþoƒtÔÞýjóÿ&#òV½VÚþD¼ ý°Èÿ&#7##ÈI¼$þ$¼IÚþŠººvæþÿ@#"'#"'&73276732767/…5@k0Kjµ  LP(LG*ÀÐ@FF¿0:‰€‰mIþ;ÿ“@ ÔÌ991Ô<Ì90#373òñ·²šó²þxããþòÿ“@ ÔÌ991ÔÌ2903#'#Jñ·²œñ²mþˆáábþÿ> @Š  ÔÌÔÌ1Ô<Ôì990332673#"&5bXLQuƘ”“ =HMEŽ›ƒ…(þÎÿ@#454'&"#>32È(+¦q"ËœG7þ@$%JF™L;bþ ÿ7n@   ŠŠ  ÔÌÜÌ99991ÔüÔì999999990@'           ]'&'&#"#>3232673#"&‡1*"4 ‹ˆ_"=.3$&4 ‹}e#AþR%!E<‚š$'C>Mþjéÿ&·ÔÌ991ÜÌ0!!rw%ý‰Ú¼ÿÿþÑþÛBÿÿþÑÿî³6Ï›+#"'&'.#"7>32326›-WšOZg Gb3N˜V,ZœS5`D j]F•+é<73 ":?å=6 7=­¶Ùx7!­&&¶ÂÂÿí¶äx7!&Ñ&¶ÂÂÿ¬ÿ‹Ó'!týtuwÑyÿrÿÁM'‹N‹?räsþ ÿÁ 2654#72#!%FI]YcL]þŽ;#Q„o>wS@ ýøÈÿn3373 I¼$þ$¼IýøvººþŠüé¿ÿ&!7#¿pýÃpD,ç,ÚýÃ=þnçç³þëÿ@67632632#6'"#6'"´/…5@k0Kjµ  LP(LG*þÐ@FF¿0:‰€‰mH§‰· '7'77Nšlšh išlšh )††††¥Â,ï!#732676'&/&'&7>3#"¾¤ˆ9F " ¤ˆ;D×'RRz .!RSz#ÿÿ:Ñ &ÎÎþíÿÿ­Â$Á—ÿÿ¼;ý1rjþñ⦠$#4'& #6%6…ék9¿Äý§ÓÍ ‰Æ 3O¬G$%%$G­N(ÃtCf3Ä¡ÝÎtòþŽþVH%# ¡ÝÎHþò{þVsÿ¤ #"?3;c³X$Ä3þV·—™hÿÿªþáL'ÿÿ9î¸fvÿÿ ;(þ'Ëp˜jÿÿÿf&ÖËýÚÿÿ˜-yÿÿÿáf&ÚËüÌÿÿþÝÙf&ÜËü¤ÿÿÿ¶f&ÞËüàÿÿÿ¹ÿã“f&äËý€ÿÿþtNf&éËü;ÿÿÿÌxf&íËý­ÿÿO(þ&ÌýÿÿÿÕ$ÿÿÿìš×%ÿÿ¶zÕHÿÕ)! ûqµiÀ)þ_Õû/Ãü=ÿÿáÕ(ÿÿÿß Õ=ÿÿÿøÙÕ+[ÿãuð3 "326&! ! ×2þ2 q—449qr—449ýJV¼JJþªþüþý¼‹þü\ñþóþôññ  ñþˆþxþþ‚þxˆÿÿ¶Õ,ÿÿÿîXÕ.ÿÕ3!!!·þÙµiqþÙ3Õú+ÇÿÿÿÇ Õ0ÿÿÿççÕ1ÿ÷ÚÕ )!!!!!·üA2¿¾üA2¿þoþ!2àÍüÃÿÿ=ÿã“ð2ÿÿ‰jÕTÿÿºÕ3ÿÑ Õ !! !!óþÎ22ý>3þÂ2ûê2ëçþüþþþüÿÿ´Õ7ÿÿ‘NÕ<[uÕ%-67676/3!37&'&7676?#!ÑaE5”Mp))šjx3ýë2w”No))™jžx32ýØU'^A  Uk‚? HJlÓÒlKFþüFKlÒÓlJHþüý=·?‚kUÿÿÿq?Õ;Õ3!37&'&!!6767!x3ýë2wŠHkKC'C1% ™'™[1C'CK¶|›þü„+…Ä~[þ¥úŠ#üì#Šú[þ¥þ‚Ä…+ÿÌx´'3&7323!>76&#"! îc7%=^ëíÓ=%¡î)þ)4a{ *Cgfž* "C4þ'Óm¿8nþ’þÈ¿þñmÓ Oê§ÖèèÖ¦íMþôÿÿ¶k' ª/uÞÿÿ‘Nk' ª/uéÿÿ5ÿçìf&Ëõÿÿdÿê¸f&ËùÿÿeþV¸f&ËûÿÿO¸f&Ëýÿÿ(þ&Ì 5ÿçìy(7!;#"'&''&'&767676'"7™9þÏDR,fŸA<1=Ë´NR6=ˆ®¾ç„AMK!"*'GD#ôlý¿™¥áT =$+’œ9xšýУ˜[[¨®RMBÿÁþV‚!%!! 7676'&EaþÝ,Y²ÀÒ7Yþo¼-DaÓ.+þå+¹9(·Ž-EþÈþö‚Iþäþ8 °– ëÜ ß ½ãAþV¸`!!&'&+732é)})ý”SþÜSW $ *.PmO^(þvÂû þVªðH ëJY8ÿã|!%/&767632&'&'&#"32#"76"326&€„ßcRs* Y%WQhA( £îÜjþªîíÜ53­Miœ@Tijœ@T)?—‡NM ×",fþÃýâþÃ=¦Kš¹þ¶¹¹J¹dÿêRtB"3276767#"'&76767&'&767632&'&'&#";’xM9 -;rthf+ k4nhûtt _^ƒ<<ŒàW^s* Z$WQi@((4g—+ç/ )A!!*%ÛVV¢yKK@?d‡NM ×"* !߈þVÖ#727>'&# !7!­:1‹DMmdŽ,F;ýªg[1þ),l,ýTþ× MXž“[TáL&ÙDááþ†eþVw{!6&#"!!>32vàþÝ×0NOw}þÝÚ#!1ªjŸy×ûTziŽ~ý`¨]fÓaÿço(6'&"2767  ]ÔYB2,ÚVD0vþ$ÆlÜÆwÂp––pÂá¹v––v¹ýR¯á¯þQýO’`;#"'&7#7h“T:,NüJI+dÉ,`ý J!!áPNÝáÿÿA`oIz!!'&'&+732Ȳþ×`þþ×k !!^p-–¶P_Äû<ýq-wJëJXÿÿÿÉþT{`wœ–`67676'&'!!! •Jf <34&ªÞ‘þœW2'Z|u4@—bY|rNįät`pþVÖ$! %$67#7! #727>'&xý©P;€þÊ4ì÷,l,ýÓ1%Æ+þ.!0ŒCMmdŽ,Fš0A*Rááû½ ß î«LXž“[TáL&ÿÿXÿãy}RÿÙÐ`#3267#"&'.?!!#7Ð,¢h%F"%.f7Ok zþî®þ㮢,`áýë?¼ " VX#süáÿýþVž{  #"&'!&"2"˜68þîÇZ}#rþܾt*?H¾’?K¾{þÌþèþäþÐ]^ý¸ÒSýD¸¸þ¼¸ÎþV®}$%#727>'&# '&!2.#"ÒŒDLmdŽ,E;þÄ_s56cZŸJ45ŽR½! <1áLXž“[TáL&œ9*,þô7;¶¨©WG,ÿãÈ`#"676)327676'&È™(5þªîíÜ51­•(,ý™G/N TikMN Ÿ6€ÐþñþÃ=ý¦Žá8\¡¥¹]^£›r'É·`!!;#"'&7!õÂ,þ±gT:,NüJI+dþ±`áýîK !áPNݤ`!"'&7#7!32767654'!2üJI+d¥,É“9gZ"7=#) : ¤PNÝáý J!!7Ùg¦‡LGއ†þØ©­HþV—j!2!$76676'&œ˜HU:cþaRþÜRþw`?‰œ€,;;.wL^&7)L™4 j{•þÕþ4þVª@ïBsåSV}ïdˆâþöÒþxaò†M>ÿÃþV`'!&'&+732!;#"'&L&þÇþ×i !O-ueXF.&:)ýïh !P-vgVGr’þ6”LëJ<²”ÌüùþmLëJ>sþV$`%6!!$!!ã‚4f$ghþdSþÜSþzfg$f8^®$ád ýìýç3þVª@ ýóþÝO@ÿã`3676!#"'#"'&7! 2UH%g;‹‰e€¯T¯€E\…ž‘gH[™þ86*üýCqS³³Sq½üþÖýí6ÈÿÿOH1&jýÿÿ¤1&j ÿÿXÿã¸f&Ëÿÿ¸f&Ë ÿÿ@ÿã¸f&Ë oÿéV$ # 7676!"'&7607676¥"&WxsI]ñ5þº¤þåÿcLC@¬ÚÛn)þlþÈ!‡©?Fš-k<`z°þÎþƒÁê°„tÀö þ˜ÖþÝ€~xŒ›^ÿém$ $6'&'&'&%6#"'&3676„ #T— A™@è’ÛCNµÑ^XST§²ðÛujH*<,_zEf™/z¥ ¥xGÙCcX‘×Êþþ}ÆÕÕ¾UèjNk¡‹Õ!6''&676'&ŸwJK'hþÙh-Cj}3Q’´øk@‰ˆ1qS³ˆ¦¥Êýêçˆ "40þz7/cîTÿÿþ.‹f&Ëûõÿÿ‹k' ªÿãu8þV•'67!!&'&6%67676'&#j¸S$SšPw5/ºi¸QþÜQ›Px50ª,%Y* 2žz)&W * Üj#«þU mžþñóºi$þaŸ mžöE+_¢q!výŠ+\¥uŒ!`#7!#'$7%!767'K,•,J.Qðþ× 7÷þÔe9YD5%F?JMF=$3áá¢þõþ-ÇÇÓ ¢¦þô½þt¾ ¦þ`/'7&76776767676#"7677632gᯪ-ùiº“À¦¹DN›KF]D,]{ð”À¥¹ BUœGC]ýágO\ç“ ð–20þÀR[ÁFk{Zs›Bà="î–20BPZÀPa|bl™‚þVœð "326& !&'&! òq—54:qr–459ÕQþÜQ“A_JKU½KI«tçñþóþôññ  ñûþ` *‡Ä~ˆþxþþ„ƇˆþV–{ "326& !&'&32Óiœ@Tijœ@TŠQþÜQ…HniWíîÛ45«p¹þ¶¹¹J¹ühþaŸ#jž=þÃþñþô¡iZþ9Õ %2#727>'&#"76)!"@oNK!mdŽ,F;üðIIƪ|Œ3þ‚èYk11sìfb©“\SáL%ŽxyǬþük€ýüþÿIþVÑ`""#727>'&# '&76)Ý›P^! ;/mŒCMndŽ,F<þè^t66±‘ñ,M[¨¤\ILXž“[TáL&œœ€áÿÿ/ôÕ)ÿUþV¥"%67632.#"!!#"&'73276Ú•y¯n2.&J'QAU7czcç<;ƒ¾Ûý7µÆê=PÿüÐÕ 3 '&7 6'&# µ¥Àþ«Aˆ2þ¸^N5±ý]/:…1H]H‡þ<ýs}/'þüF;Í;þͰ„&)F6Uz !!!yþ*þäEýŠäþ­œüdyšý‰kþV‚ð!!6%$!6'0#0?&'&&eþñZTM6Ù+&”m| þß­mS(5G,nýmBPÏ22iØýøÏAþÍþÚýÔý€–ë+¤J%ßýÆ5O7Œe5ÿáþx%!'!&'&'7#676ó§ÿ|þ5ÿd!Œbv0BË»HSœî ´´œWþ “RS;õ ²¢þÂþ•þЇÿÞÿùç`+676#"76776327'&7677676LF\D+^{ð “Á¤ºCUœGD\E,^zñ “À¥ºDNûs›Bà= ð–20BPZÀPa|bl™Bà= ð–20þÀR[ÁFk{PþKŸ{!3!! ! #"&'$&"2u)ºà,þ þ"Uktó˜68þîÇZ}#Ç?I¾‘?J¾Ôáµ(SþÌþèþäþÐ]^ñD¸¸þ¼¸ÿÿ–ÿã…{FÿÿÿÁþXM[ÿãuð!3276!6'&#"! ! .þQqrK;þ¸§rqK.þ{JV¼JJþªþüþý¼‹È_xx]ΔKyyHþÈþxþþ‚þxˆŸÿã}$%# '&76!2&'&#"!!32767»N]Tgþüst66±±ZPOK45GJO^8%)ýå*;XMNO9*œœ,þô6[5XÑfAZ;Fÿã%}%7032767!7!&'&#"6763 !"'&F57DAX^C$ýå)$:PUSI4\VXZtu66°°þýhKT9 ;ZAfÑX5[6 ,œþëþíœÿÿÕ ÿÿÿÛþV‘ÀÿÿƒÿãÃð&ÿÄ Õ !!## #ç`yêbþÞþè×ëgèþÕþÙ'ú+¬þÛ%ûTÿÉþVü !!!# !ã{]Ð}Çþç¼ëLàþçüþÙ'üÓþÛ%ûƒÿªþVž{%!!!7#73! #"&&"2“7¹%þGþÜh%hƒtó˜68þîÇZ}£?H¾’?K¾žþéÁppÁ¡SþÌþèþäþÐ]OD¸¸þ¼¸ÿã9ð703276#">3 !"&@?‚L¢×11s¢LœY@K£U.ðIIþtþÒU“+HFAüýAFH$$þrþ‡þˆþr$ÿÿƒÿãÃð&.y¦ÿÿÿã9ð'yÿE2ÿÿák&J ®Xuÿÿák&J ªXuœþX -%+732676'&/"!#7!!6?67632¦1ooÐÚ+ˆbhZ])GM% :Zþݾ(Ä(þd15<™ ‚T$=)+üklán„Íz3%  Dþ1CÑÑýþ0$ 5iÑÿÿ¶zk' «¨uH|ÿãÂð 7# 547!2& !¹d)­@š©þÒÃIŒ.­z@yþÑÁ.<2gs͇þ¸HCÀuŽyŽHþ¸‡å—þüÿÿÿã‡ð6ÿÿ¶Õ,ÿÿ¶k&; ªXuÿÿÿìÿãÕ-ÿaœÕ"%32>4&+# +732>!32#Ó%‡ Q%þŒðˆ#FwêÍ%0 r\E^ShqnÂ;þÆlìa¥cQýZѰþ–þ+âúoÛå¬ý¼¼9þÏÜÿƒœÕ %326764&+!#3!332#Ó%‡Q%þŒþ¾ð"ðnBnðqn .þÆlìa|)cQýZ˜ýhÕýÇ9ý¼¼:DìÜœ $!!6?67632!6'&/"!# Ä(þd15<™ ‚T$=)oþÝb])GM% :ZþݾÑýþ0$ 5iÑýÄøz3%  Dþ1CÿÿÿîXk' «uOÿÿÿæék&M ®uÿÿ(Fk& ³Xþ¾øÕ 3!!!!!"'ïqï'þÞþ¢>þý>Õû/Ñú+þ¾BÿÿÿÕ$ÕÕ%32>&+!!3 )gy‘ˆ/b‘yŠ¢2ý…:n5ä`þÆþËþkøbòb'þüþÕÜþÜÿÿÿìš×%¶zÕ!!ÍðþÙ"¢2Ñû/Õþüÿxþ¾ÏÕ!!3267!3#!™ ½þþý¯qd; ÕPï‰qÿ>ý~>Íý ýZFU1Kû/ýºBþ¾ÿÿáÕ(ÿ|VÕ#!3!##'„®ŒyfðfEþˆVú5pEðE*þûv_ýõ ýõ ý¡üеþœdµýçÿÿÿáÿã`ðÿæéÕ !!!éþÞþüÓý‹þÅ"ÓsÕú+=ûÃÕûÃ=ÿÿÿæék& ³MÿÿÿîXÕ.ÿuÙÕ +3267!!h#FwêÍ\3 _vN2SfþÞþÙðѰþ–þ+â aoM¬ú+ÑÿÿÿÇ Õ0ÿÿÿøÙÕ+ÿÿ=ÿã“ð2‰jÕ!!!!«¿þÞþÙðþðþÙÕú+Ñû/ÿÿºÕ3ÿÿƒÿãÃð&ÿÿ´Õ7(FÕ+3276?!!\ÀuÈ2P:K=SþÒ1Äs1/š•j‘¸ý”lËÕ#476?!#7&$>4&'.CÔÿÌ•/þ¼ÒÿÍ”t’ÕAƒwƒ* r\KQñsffþÍ’LSðþ„„4èw¡í(þ°þ‹ÑÖxŸÿÿÿq?Õ;ÿÞþ¾¿Õ #!!!3!""'ïqï'ï‰qþÛ>Õû/Ñû/ýºB•þ !#"&7!3267þþÒþÝ•6· Â‡)g#YkG—{QùìþVIÑÓþ3‹Vƒ‡¤ÿ½Ö )33333ñûÌ"ðð²ððð²ððÖû.Ñû.ÒÿÜþ¾2Õ)333333#büz"ðï²ïðï²ïðïBqðÕû0Ïû0Ðû0ýº|lÕ %326764&+#7!3 !Ò)š‡ Qš)þUùú)!q5Ä-þÆþËìav,fQýZÑý¼¼ÃD~ ,0ÜþÞþÙs¢þbòÁ½O½n†„#«i08æÌú+Ný²Ö—^m!ÿÿ/ÿãu{D$ÿã…K!,46?6767676%67632 $26764&"$12~¹…X3&E)0þÙw=¹=”¾î¸5þªþ%¸(BÓœ BÓœ‹LŒ §À,•I¶X@ Ô #oœfþ÷ŸLXþñþà ü†‘¹¥G†‘¹ b` !3!2!'327654&+7327654&+ ÚÔü®Ò^E?þ"¶§}AQ`}§+œŠ,7<Šœ`|jÜGy_#þ¿Û&Y15Û>#3qj`!!C¯þÝÚ+…ü{`Ûÿ¶þâ«`3267!3#!!!JcLE†O¯{cÛ8ýX8 („þ÷VþâùUƒ­ü{þþâùªþF’ÿÿLÿãƒ}Hÿ¡-`#!3!##'_…§‡CðC þ³wÿI`;ð;0ﶪþ©Wþ©WþVýJ«zþÏ1zþU4ÿêM{-?3267654&+7327654#"7>32#"&4.Z™{r’‰F£+‰TN]랤+Z«¥œ|e‰KKaÑ­Þs—,ì1(T =0Û Th4ßO@p}qLÊ\L+°` 3!!!+Ú#‹ð#ÚþÝ‹þ`ý5Ëû Ëý5ÿÿ+°F&ŠmÿÿA`úÿØÖ`+732>7!!}&(>ÑÙ_/ d^FRQÚþݯ…ÅPïäðIü‡¤û …ÿéç` !!## #Ã`31`ÚðžþÕè/ ð`ýqû 7ýsüÉ?œ` !!!!!œÚþÝeþÃeþÝÚ#J=J`û ýø`þƒ}ÿÿXÿãy}R?œ`!!!œÚþݯþïþÝÚ`û …ü{`ÿÿÿÛþV‘{Sÿÿ–ÿã…{Fæœ`!!!7œ+þ̯þݯþÌ+`Ûü{…Ûÿÿÿ¦þXé`\=þV’%.547733>764&'0M’®5G˜OðO’®4þ¹˜MJŠ!9CðK‰!9DþVüšMZ.™þgû™N[þñþÒþs7£ªP€}£ªP€}ÿÿÿ´Ë`[þâm` 3!!!3#Ú#¯=¯#¯œcÛ8`ü{…ü{þ(þa;!!#"'&'&7!M  0rk_"ÚþÞQkç†v'<+=! 'èûŸ e[Ê3ÿáï` )33333ûÌÚ𯲯𯲯ð`ü{…ü{…ÿéþâ÷`#333333#Ú𯲯𯲯ð¯VcÛ8`ü{…ü{…ü{þik`3#7!32#'327654&+¶®û,RÔ·"þëÔTIn;KTnIáþZ—t&+°®Û&\/4ÿ²` 327654&#32#!!222;KT2bRÔhO"þëÔþÈÚ“Ú%Úßþü&\/4þZVAt&+°®`û `û ` 327654&#32#!œ2{n;KTnR±Ô·"þëÔþ,Úßþü&\/4þZ—t&+°®`Fÿã6{"'3 7!7!&#"63 ŒÅ5n™^þ#+Øé§š4¬¸tO5þ V uùÛèr T›k¢KXþìþÇÿã>{:"32767676765&'&'&!36767632#"'&'&7#å)N-  #*- " üÚ%Tj7!32+22;KT2¯v&(>ÑÙ,/ d^FRVR Ÿ·"þëŸûßþü&\/4¦ÅPïäðIü‡¤þZ—t&+°®ÿ¶ª` 327654&#!#3!332#22;KT2þ¢eþÕeðÚðJ+JðR Ÿ·"þëŸßþü&\/4þ!ýø`þƒ}þZ—t&+°®(3#73!!!>3 !654#"(®«+«U#Uµ+þK:1ªjIþÝ@ rNw8á´þLáþÙ]fþóCTþ‰J;,zŠ€þßÿÿAf&voÿÿ+°f&C<mÿÿÿ¦þXéF&ŠxZþâ¸` 3!!!!#ZÚ#¯>¯#Úþ¬8Ü8`ü{…û þâ]^Õ%32676&+737!!!3 )Ò)š‡aš)þ5)ú'C)þ½)5å/-þÆþËþ»Úìav‚a¾Ñ  ÑÓÜòçÜdtc32#!#73!!! 32>&#aÔÑDþëÔþ^¹û+ûJ#J’+þn\2Inu_nº¬þ ®¶á}þƒáþ)þü=Œ;ÿÿ>ÿãuðaÿÿbÿão{¶¶!!!ÍðþÙ"ž<nÑû/Õ2ýÊSˆš!!3%¯þÝÙN=Ñg…ü{`:ýë°zÕ )#73!!!!ÝþÙ‡.‡s¢2ý…@©/þW˜ðMþüþ·ðHj` !#73!!!íYþÝY‚+‚V+þ+h+Êþ6ÊÛ»ÛàÛ¶þX{Õ!2+732676'&+!!!–5~Z&=)_1ÞÔÚ+ˆbhRWê…þÙ"¢2ý…¸5iÑþü×án„¥z31ýRÕþüÞþX×`32+73276?6'&+!!!~íŸ==)$1noÐÃ+qb43KxOþÝÚ)þ…ihÓ¶ýjlá77„‰|14þk`Ñÿ|þ¾VÕ#!3!3###'„®ŒzeðeDþˆ=Lqð> 4qEðE)þúv_ýõ ýõ ý¡ýŽýºBµþœdµýçÿ¡þâ-`#!3!3###'_…§‡CðC þ³RScÛ8'I`;ð;0ﶪþ©Wþ©WþVþ%þ«zþÏ1zþUÿÿÿáþo`ð&L«Êÿÿ4þoM{&l«ºÿîþtXÕ3!#!!!é–€þÛM þ¬_þÚ 'l3\ý¢ýpŒžªþ ÕýÓ-ý¤®þ¼p`%3!#!!!Q†hþß?#ÍwSþÛÚ%JªcþÑýëD `þT`þƒ}þ^%þtÕ!#!!!!!3!¬ïþþÙ"'nqn'ïí€þÛ˜ýhÕýÇ9û/ýpþ¼é`)!!!!!!!ŸþÝgþÃgþÝÚ#J=J#±!hþßýî`þƒ}üqýëÿ½NÕ #3!!!#!C"ðp;pD0þ¬òðƒþŃÕý¾B÷û"£ý]ÿá&` #3!!!#!ÚðLCL8)þ¸±ðeþ½e`þz†ÒürýøÿÿƒþoÃð&V«uÿÿ–þo…{&v«HJþtšÕ )!!!!!üþÙðþ…22þ…½%€þÛÓþþü1ýpUþ¼ ` )!7!!!!ûþݱþÌ)‹)þ̈!hþßÑÑýBýëÿÿ‘NÕ<ŽþVì`!!!Ž4nˆ4ýYþÞY`ý)×û¿þ7ÉRÕ!!3#!#37‘>­˜>ýƒ ð3ð3þÙ3ð3ð Õý¨Xüw@þüþø@ZþVì`!!3#!7#737Ž4nˆ4ý È+È"þÞ"È+È `ý)×û¿>Û°°Û>þtÌÕ3!#! !!S–€þÛM ½þ„þÏIþå1´m1ýÉýpŒîþößþ%Ûý!7þ¼S`%3!#! !!0“hþß?5“þÜþªþëVyüVþÑýëDyþ‡Hþ²Nýèeâ!3!670767072!6'&'&#"e.#/5?•:‚T$=)zþÝm]GM2:eýf2$ 5iÑý‹1z3% C€ýøÿÿ;`Kÿÿ¶Õ,ÿÿÿ|Vk& ³Kÿÿÿ¡-F&ŠkÿîþXTÕ !!!2+7327676'&#-¶bþÙ"'r@NýæUM(<(_0poÔÚ+ˆe14R(E®´þÕý²Nýã5oËþøolá77„¥~/1®þXp`!!!32+73276?6'&#"OþÛÚ%JªcýÁ Ÿ==)$1noÐÃ+qb43K•þk`þƒ}þ%ihÓ¶ýjlá77„‰|14ÿøþXÚÕ%+73267!!!!!¿0roÒÚ+ˆbhyþþÙ"'nqn'+ùnlán„mýhÕýÇ9¬þX `%+73267!!!!!71noÑÃ+qbh_þÃgþÝÚ#J=J#+ýjlán„çýî`þƒ},þt–#"'&'&7!3276767!!!wb15<˜:‚T$=)f#Y]GM2:Q#þÒþÝMþÛ€ú0$ 5iÑþ3z3% C€¤ùìþt(þ¼þa%7#"'&'&7!;!!!+(kç†v'<+B  0rk_"ÚþÞ?þßhÑÏe[Ê3þ¯=! 'èûŸþ¼j !jþÒþÛ.ùìÿÿÿ™k& ³Eÿÿ/ÿãuF&Šeÿÿÿnk' ª3uEÿÿ/ÿãu1&jeÿÿÿjÕˆÿÿÿáÿãÏ{¨ÿÿák& ³JÿÿLÿãƒF&Šjÿÿ[ÿãuðQÿÿSÿãz{–ÿÿ[ÿãuk' ª3uÇÿÿSÿãz1&jÈÿÿÿ|Vk' ªÆuKÿÿÿ¡-1&jbkÿÿÿáÿã`k' ªuLÿÿ4ÿê§1&j_lÿÿÿÐÿäÕyÿÿÿäþHž`6ÿÿÿæéN&M ¸ÿÿ+°&mˆÿÿÿæék&M ªuÿÿ+°&jèmÿÿ=ÿã“k' ª3uSÿÿXÿãy1&jsÿÿ[ÿãuð)ÿÿbÿão{ÿÿ[ÿãuk' ª3u×ÿÿbÿão1&jØÿÿÿãÅk' ªŠubÿÿFÿã1&j9‚ÿÿ(FN&X ¸ÿÿÿ¦þXé&xˆÿÿ(Fk' ª9uXÿÿÿ¦þXé1&jxÿÿ(Fk& µXÿÿÿ¦þXôf&xÿÿ•k' ªãu\ÿÿ(þ1'j”|¶þt{Õ )!!!!ÝþÙ"¢2ý…½%€þÛÕþüü3ýpÞþ¼×` )!!!!þÝÚ)þˆ!hþß`ÑýBýëÿÿÿ—:k' ªMu`ÿÿÿ²1&j€ÿÿ<ÿãªðRÿÿdÿêRtùÿÿ=þç“ð4ÿÿDþV¢}Tÿÿ)ZÕ:ÿÿZ-`ZÿÀÚÕ#!327.'7>7!&'#".'·'ÆYf% Î $Æ'·#@2ÜB:v£†³a'®üp(L" 9øüR³x þù"32CÛÿÏ—ò!76&"!!!>  þÙXÌŠBæ3ýPþÚ¶e—Î ´a®Cppþªþüþb®™ÛCCÛ7žò!#!#".>  6&";ž3’PþÙPç‚­]6b—Î ´a4åXÌŠ +I3×¢þüþbžGÐΉECÛ™þôVpp`8[@#7žò> 3#!6&"!De—Î ´a4’3’PþÙÅXÌŠþÙ®™ÛCCÛ™þôþüþbøpp)ÿã©Õ .7!!!26?!:e˜Íþô´a·'HÕ"ýJXÌŠ''™ÛCCÛ™®þ‹þüþppÿØ­ò"#!>76&#"!7!2!(?'R³¡}#Oy:bN: þÙ;G†¹g Fr¡h2KG^¨è‹µ´%NyT<1@W£ì”E®°4þüÿß©Õ #!!!!!"'IÊ2ý6u?3Õþ‹þüý¨þüÿÏ—ò!76&"!!>  þÙXÌŠ“æ2ûô¶e—Î ´a®Cppý þü®™ÛCCÛÿšÿã¾ò(53#".>;76."#> 32>?#"uW2W'St¤yF.SqQk 4c˜pP1 Æý·kŸÔ ºiý—0;,# 'k?P®CþüÊk¥p:2k¨ê®s8CiF%%FiCü®™ÛCCÛýViZ/J5Ê`ÿæÿãòÕ!!3# .>;"267‰'P’3’4e—Îþô³b6a”È‚çþö3VD. XÌŠBÕþbþüþô™ÛCE‰ÎÐGþü#@[8`ppVÿÙWÕ!76&#"!!>32A þÙYfd‡~þÚ"'N3n?†´a1CpykýzÕþpCÛØÕ3!!#'ðw3Õû/þüÿÀÿåÎÕ2>73#".67##3‹  0% ‹þƒ>a‘jk}9T«ý!þH`ý58K..K8Ëý_|³t77t³|±üÕþ‹$ÿã,ð):33>32.#"#".7>7#2>76.'´í0.B’›¡Q*]TB>APZ,0[,uªdh¦êš›À` R:† XªmF)C•:TÕõ?eF&  þÃ4&dÖˆ‚å«d]¦æ‰oÍ^þf_‹[,0^‹\Z‘g<TÎx®Õ!#".7!3267®ÚþÙN3o>†´am'|Yfcˆ5`û CÛ™1ý…pxlÿµ×Õ%.7>76$7!#=ý1V< ’Šq ›{T£G•“Œ{f#*%ìþÉF4@M/B¬dRžODþ\GJLHA -ÿÀ«ò ?%267.#".'#".7>32>76."!7>2T1^9(T."0 j4EU/&>þý/aÅeOzLKn‹OXœE0L,Pl`Q?þÙ"„¯ÑÞ·u%â /#()$$)“M–ƒ:8z@–0Y)KB*RyPO}V-;5N´ck‘X% Q‰h¯í’?C–ó7Vò> 3!6&"!De—Î ´a…’2þGÅXÌŠþÙ®™ÛCCÛ™ýVþüøppÿçî%>3"!".7>7673!6jL›ž£T3&\u“^*üøCkF)@W5eiÇÜNP=;,¦ÕþéEpP+þ÷?s_ýÚAeH'ct€D‚y ü…aŒ(#´ÿèÿãBÕ!# .7!267‰¹2’…e—Îþô´`¶'ÅXÌŠÕþüýV™ÛCCÛ™®üpp!ÿã¬î8#".?!32>76&#!!2>76&"!>2e`š×Š€¶l$*.O8?_B) bpý¥3[0H4 LªhþÖc’¹Ò¢i'mP1@"Æb°„ML€©\ )L:#$=S0_q1@#TOTUcžm:;nš_m&I^myÿã˜Õ .7#!26?!‹e˜Íþô´a…’2¹ÅXÌŠ''™ÛCCÛ™ªüpp#ÿåŒÕ32>?!".7>7.+32%.#"f,PlaQ?'"®Òæ¹t$!jƒ‹877/ ]3¥AFGÏ<þí $%8j\F^gŒV%#T‹h®ñ”BF—ñ«|Η]    ÓþÉ~ Jªÿןò!6&"!> ‰·þÙÅXÌŠÅþÚ¶e—Î ´a®üRøppü®™ÛCCÛMÿ°·ò$6&#"!7!232>}Qt:bN9 þÙ;G„¹id{‚7†;ý < J&8l^I§¡Ÿ%NyT<1@SžâƒÒ›eBþÍY6| Q‹»>Ïî##7>32#6&'©þ¢evþk§ç–¡Èd ³þ¶7]ºA¦xh„ÝžXXžÝ„üi§œªÿݶî@2>7>."267676&#".67>2!!!÷>gE -#P”nK+ *›3^-"CL]zH   0Kj‰¬Ð˜h< Luœ`3ü&?'Y%Ea<'XWQ!F†g?7Sc,*!ý¬!PDFS 7GNN#9~znT1.Ss‹ŸUTµ©’2þûKÿŽžò3#!6&"!> @4’3’PþÙÅXÌŠÅþÚ¶e—Î ´a®þôþüþbøppü®™ÛCCÛ1ÿãùÕ!267! .F·'ÅXÌŠÅ'·e—Îþô´a'®üppøüR™ÛCCÛ/®Õ3!#".?!3267®ð’3þGN3o>†´` 'Yfcˆ~Õû/þüCÛ™Cpxl†-ÿãð=32>76.7>32!6.#"#".7a4L*8V;!3WorhI%=Vs’[‚¯cþÔ 3D A8* -WrwnMa•Æw{¶p&¿K\1"=V3.?2,5Dc‡^+`]VA&@n‘Q3=! $;-4H7.6Gg‘e`¥yDE}¯kÿןò!76&"!> ‰ þÙXÌŠÅþÚ¶e—Î ´a®Cppü®™ÛCCÛ!ÿå¬îG"32>76.2#".?!32>76.#!3.7>ò3I0>40H3>p£d!gX6@ `š×Š€¶l$*.O8?_C( 0O8ý¤3¶_¼ï/="#>//>#">.ÿ=pœ_^”(Sah.b°„ML€©\ )L:#$=S0*K8!*Y)^o>ÿß©Õ#!!!!"'IÊ2ý6¨Õþ‹þüü¤ÐÕ -!>7>.'.6>?!#4J[:%HHÿJ\;%IIþ=†žH6U†Á‡ÿ† K6WˆÃˆÿw+ZŽde“b23a“edŽZ+ü]£âÜœVzzVœÜþêã¤]‰ÿ¾Ýî.> #"&'!!!7#"32>76.}ZÆ­b\’È€+a-,2ýcþÙ‘2YtP6 #F98O6! "žƒd©{EG|©cdª|FâþüššQ6L./M86N0.M7ÿÿ=ÿã“ð2ÿåÿã§Õ .8%>.'#.7>; .673"3J[8""KIÿYƒP?jnêH…¢N-EeÄþþ³t:úIHÌ$0,$Õ,V€°zN%)JmHNrK$þ‰MË‚W›ƒiJ''Jiƒ›WWV, " ÿÿÚrbZIu×!#<95þòØ­×þñþìîãf !ãþGþÂdfþˆxQñ~%#>7>73S|RüKi„KVkC û 4W~™#2(L`?"+9'A~lP5îšf!ÈÒþÂþÙfþˆx¹†@)#>32#".7332>76.#"ÑÂUu¥Qgš`$ >b„P1^G(¥0*4H)Sž…cñY„gH&7`‚K8hR19^F %"0 7`ƒŸñ3!Ÿ9Œ!Ìñ#©z+ÿåð`+%#"'&32>732>73#7#".Ì/rK‘$$={ðŒ  2& ŒíŒ  2% ŒðÚÕ&|E!<-pHCde;wý1@Q//Q>Ïý1>Q//Q@Ïû tBM%3ÿýþV_{%!!!>32!76&#"!,ý|RþÞ+#!2©j y)6þÝ-1NOvQááþV ¨^eÑÓþëèziþ`QþVµ{*%#!#".7>327!32>76.#"t,mRþÜq³d‹L a…¥`Ê9!$®ý…"B0/VF6$B/0TF5ááþVH»M–ÛŽ‹Û—OèüPQ€Z/0Y€QQ€Y0/Z€ þVO{%#!6&#"!!>32O,€RþÝ×1NOv}þÝÚ#!2©j y)bááþVTziý`¨^eÑÓþ Fÿã‡!26?!!7#"&7!‡,ýrY/žt/%ŒþÛ 1¨j¡y)ã%U`áþ5yh‹óý0¦^eÓÑþLQþVµ{(!#".7>327! 32>76.#"!+þoq³d‹L a…¥`Ê9!$þÿýØ"B0/VF6$B/0TF5ÉáH»M–ÛŽ‹Û—Oèú×úQ€Z/0Y€QQ€Y0/Z€^ )!!!!/üí/%UC,ý½‚îþLáýbÿýþV_{!!>32!6&#"Î+üZ+#!2©j y)ŽþÝ…1NOv¤Éá ¨^eÑÓý)ªziü¶ÿžþVÀ{,=>.#"!!>23##".7>332>?#"N SQ'WN< ÏþÞ+#!UgqjcS?!EM(rˆ>HlC Kfx<È1&#."f60$/=}d@%Ec?ûÕ ¨.I28Zƒ®pƒ«f)'JiANsK%þÏ5)BkM)=ÿãÔ(#"2>7".67>;!3Í9WA-DrYB-fB4Me}˜²†^:`•Î…ÍU$Um,/W~œ€[14\KRþ®M’‚mP,,Pm‚“LsÌšZ´þLáÿçþVI!6&#"!!>32IþÝ„1NOvÏþÞ€#u1ªj x×ý)ªziûÕ¾ý¤^eѱþV`!!,ý¿-#þÿÉá ú×ÿþVì1#3>322>73#7#".67>."~ï€íb*f63/&<  2% ‹ðÙÕ&|E3/&<  2% þV¾þ9.7_ŽdþÂ>Q//Q@Ïû tBM7_Žd>>Q/.Q@.ÿã©, !##".7>72>76./#":¾|ËQ,[n¢Ò~}°eAa‚Sc&Kt`J4 0"*m•¼X‰›áG«^ƒØ›VV›ØƒZŸ…e ýýP€[16^I>`L<¯„þV–!267!!#"&„â%Ú0žt}%þÔþÛs1¨j¡y‡û yh‹ƒùöP^eÓÿÿ7\KüDÿã-?)7#".>7.7>?!326?2>?>.'¢þÛ CSa5ax:"R|¢b%0K]-V3lcRdö þV1{!6&#"!!>32ü+þ]×1NOv}þÝÚ#!2©j y)µÉáTziý`¨^eÑÓü`\ÿã©í*=!7#".7>7#73>32.#"326?6.''rþÛ 1¨j^u;T9i,ÍC™§±\ !# 1'$ )PMI"b•_"ýe ## Ot6Y@7LKýµ¦^eLª]uæmáX’i: ø 0C(c‹©»E_>#‹ %SI6hÒÿÿpÿã“`XpþX``%#!732>7!ŽOtžiþÄ,ê1J6% Ò%+~²p3á9]B5žÿå¯#7!3267!!7#"&ž·€+£Ù1NOv}#ÚþÝ!2©j y‰ªáû¢ziû ¨^eÑ6þVyy523!!".7>7>76.#"'>íl¥h& ":Twžf8Q5,ý|0J/ Gi„Gbb8  )@+%KD9³*qˆy ÿÿ7\{QüoþV¢-!".7>7.7>?32673~,ýÀ*D- 4L_kq71T: LD›O)= 39#Z7AQ—…pT5Éá;U53y„ˆƒz2)E_:?ƒ:{¬@"G1?°8…ƒxf$*#RþV`+#".5#"'&32>732>73úd&j6!<-0qK‘$$={ðŒ  2& ŒíŒ  2% ŒðþÓþVÿ6:%3HCde;wý1@Q//Q>Ïý1>Q//Q@ÏùöIþVy.H3!!".7>7>76.7>32%">76.X‹Á|1Q:#',ý|1J/*=M+(* 2;/ 7Qfu@h¥k)þ,LE4 #?^C, %AÚ`ž™¢c'G=1á"9J'$RVT$!G&1J??OfG7gYI47j›X/>")@5/18#(17WG;64%G7"B{&"!!>32!!7>7>.ƒ-H8' }þÝÚ#!BTc7\y@ .#"#7#"&7332>73>32í‹  $ Õ&|E€E*‹í‹  $ Õ&|E€F+Ï>Q/)H8ýtBMÓÙÏý1>Q/)G8ètBMÒÚþVq{!6&#"!!>32qŽþÝ…1NOvÏþÝ,#!2©j y×ý)ªziûÕ ¨^eÑÿÿ%þX¹JOÒ`%!!Ò+ü¨Ù%®áá`ü)þV¤+!#>.#"##"&7332>73>32í‹  #" Þðg(l6€E*‹í‹   "# åði%o6€F+Ï>Q/.Q@û‡E>ÓÙÏý1>Q/)G8œýãACÒÚÿ¶þVË{+%!!!7#73!632#"6."2>«8—,ýi þÜ m,mó$!„Ë`‡J a‡©d³Ž "B`UG5$B`TFžþÝáDDáå¨ÃO—Û‹Û–Ný¢€Z/0Y€QQ€Y0/ZÿÿXÿãy}RÿìþV¼#*5#.'7".>;"3>.'>¨U†½€RðRA{lXÞ2:C'}]‡QMz¦iÑV}œNýÊLP @KP  E9|;YA+A|Θ[þY§'?V4À5I/2Zš~Z2þFNˆÂr.<<)ýá?fI-ý… ;[wÿæÿã:%!7#"&7!267!:,ýë 1¨j¡x)â%Ú/žt}%®áá¦^eÓÑû yh‹ƒüZv'!!!!)MGþ³@MHþ³'þ“þµþ‘¼Çß%%Pc8þ¬þÝߎŽþÝvvÿôÿë¦{%#"767"76263 !6#"Ñ(÷æ('¹H¸&&Ê‘\«·? þÛš–fH¸ÍÉËpÈÀQQþ¾üÇuY6ÿ°—Œ)"276$632&# 7%7676À€€;ã  ä@2þ€Áà PН{¼‡ºiŒSŒÌþÓ02³½—Ý8A%¤€t¨qÅþ­þõu;;=Mk¨ÄŒGùÿ…:.j‚)åNÿì~Œ67&76$ !6&$'632NB!/6äN‡:pþÛp"Zkê/&'î:KGÌ' Ïþp]€6OÓÙþàþÖý¿A¯¶£$ÂÆ,Ll^Ȩcþ‚Œ >3 &7%327'&3276¸Ý9fy3e`þÂí›,x­12åçÑ @ ?A ¦quýôýþùxsÍæ Ñó± A@@?Wÿÿš &"32676&  76'#7632#"!76r$# %!E+È:|þÚ08MtÙ$&Ú¸"=ÿyþÛ!$` %"%:ñþÙý~ñ–6Y»Àh>{aKKªOþÏ‚ 5"32676&"76767$326767! 76%7676†$" %"SÕ*þ€æå=+þe¹Ç |“›QÓ/FþøK#þÂþe01°µ¹Ìm7$o %"%ùɃ@þ¼â„<@BDkŸóþµQc¶CøúŒ;;eo">!½HÿãØz 3267! &767&7!2#"'3Qþüøk "n%n9÷þ±äà! 6FWý ¼f9O¸²b…´¯2ýÎþÖþà×ÕO6€h­µKŽM0ÿã‰{$"26#"76$76g€€v’!ÊÈ J§!(åë''*ÚÅ( ë€k쪤þƒ­ÈÈŽÇyxÌüÇÿèÿâÏ¡ *7"32676&"&#"2#"7!23263 !6#"ß$" %"Œ|-T«&+éç)C=¬ o˜þŠ,[\4@¼(+âþ*‚gP]#Ž#žAþ„Ê)is€@ü0á[2JFÌÝÛýfH²ÞüÑþ²MMMÿïÀ|"267&76327!%$ÿ€€þg0¼•%'äì%%â!ÀÏ)‡%‡Vþ þî€ýÒ÷§&¶Ä¼¾þø¨xÔ´ýLþB&ÿïí"267&76327!%$×€€þh0»•%'åë$%ã ¿Ï*Û%ÛWþ þî€ýÒ÷§&¶Ä¼¾þø¨xÔhû˜þBÿï0 A"32676&!"32676&"' &76323273327&76673Ò$" %"ý‹$" %!H¬Etþízv,âØ"'ÊYTX<ð<XTYÓ!)М $Ð1(aªù %"% %"%ûöJJ«’bß©Çþ4„„4þˆ‡Ì¨Ñ+,¸ýÍ@þ¼ÿùÿï *"32676&#"' &763232733273g$# %!›ª¬Etþí{v,âØ"'ÊYTX<ð<XTôñù %"%ý3¼JJ«’bß©Çþ4„„4þˆ‡èÿïó} ,"32676&2?33273%&'# 67&76”$" %"HR!-ð-"ZL!ðŸ>þÅ’6.ÎþÀ=/¹ƒ 3ã -þ¯ Ò %"%ý§á㩪ÝüÑþÀ,-=ð¦%žùÛ‚þ°P§ÿíÿï! ,"32676&2?33273%&'# 67&76m$# %!IS!-ð.!ZL!äðô>þÄ’5.ÏþÀ>.ºƒ 2ä .þ®!Ò %"%ý§á㩪–ûþÀ,-=ð¦%žùÛ‚þ°P§ÿ¿ÿãô`!327!!"'#"763227"%™Š%"¡?þTð>¶Æ„u `ý,ÀÀÔüÅþ¾88œ–8‹ ÿã  32767! &767&7!2#"'3)þüøjPP#Â%Â:÷þ±äà! 6FWý ¼f:O¸²b…ZY°æüþÖþà×ÕO6€h­µKŽM-ÿïÊŒ )"32676&6%$7! &#%$&763232$" $")þþþ19û(ϱϼï ,Ë:Cþ.þ§¼)ÒÛ80— h $ $  ,^ö$ü“»RE?`þÔþš²{Ëä<ÿùÿl +7"32676& ! '&'&7 3676#"%6ä%" $"äIl1þØþð'ŽK ¹%,âç/M¤$-)S&ê°W þ唸!$ $•þ‰ýÔù¨·Öë‰þUz¨Æœ1o5ÿå°{"326! %,76323276#"@@£ƒ$ƾ$Cq7™#e‘""Áw!TVè@¦ò™?:u@@@@L€üBE>©/™µ²>iþ¶µ¬©cbþºü©•ý¤þ³$ÿïÂŒ #+"32676&%$ %&'&76327676$" %!<ýè<<;z1ýêéœz")Ýë:3cª4V÷ôõ÷S %"$Ð36þÑýŒûH9ªÖíGt6cafÿúÿïIð 1"32676&$76'$6!2327#"&#"%$&76æ$# %!ø %ìýç?4p¿†h@„´Íºb°j… ýö;OýÑþÌÍ,àØ+=‹ %"%ÎŇD0ütËHþ”G_)RþÒþqÒ}ßÙ] ?þý¡ ''&'$! #"'"32?6û†T ’Éûþ²@Ex "$Ó837 YQ«Üs,%þ¤þý¯N*(ˆ»ƒm©¹Es¡JžÊä¼þÍÿÿÿô?Š'bÿúþbÿ}ý^†öÂ, '&767&'07©þ¸r$6êà3 l MÓ­8ö@P©þí5)C21¼ŸsþÚù´!6#"! ù“þÜŽ/ºN?tFæþë6TÛöý Üð Auþö ¨ÿÿü™ùÄ'rû/cùÚ%$ 7 76þ $ýü?IZ_E:ýû$ þœþš0~º9eþœþÔº}¶ÿ’β%$ 3!7 76Š %ýý?I[`Gª%ýf% #þ™þ›G~º9fþ›P3ºº}´ùš%$ 7 76#'?ý $ýü?IZ_E:ýû$ þœþšÓ$-á$-0~º9eþœþÔº}¶#º##º#A²%$ 3!7 76#'?ý $ýý?H[`Fª$ýf$ #þšþšÓ$-á$-G~º9fþ›P3ºº}´#º##º#-üë)ÿ&776'&762'62 30 .9ß&)Ñ{KYþñj¤þö,.--Ú¼ÈTb•€Ú‚f¹ýxYÿÆ&775667&763273% Û><˜™XM|•@@*þÎþÛº þØf@T‘wdD:0;QFþºÚÿäâá, &'6767676„˜;æ[L`þn ,þÓþå,­ä,þÅsœWf-2G)4îû¨G^ÿéýƒàÿ&/'&7767%276°Te/ßç'E~½QFGI¸˜èüÕ! ýÉv*EÞÄW‘}¦Šçu"ÍEÁ#IíKÁþ„|ÿìúX!767&76$7673Òþ(ŸÈ ¼¹"Ij†É1ñkúÐ%.£—°ƒZ?^¶ýÚ)óÕ´47676367673!#7676'&'&'&3&76'$ÖB?2! UfYGgy% ß ’=þ¼ô"ö!BEam‚%!9>TT ‚WK{þÝ;P´H9;Eþ¯d>G¨b*­gW’/A67 ãˆ*u…t7.,›ÿåÒU 3733##7#$ñ*Ì*ñ%ñ*Ì*ñzÛÛºÛÛÿÿUÓLíllPjjÄ%&76776&”ÿ)-þþý,.• >C B@ÄÉßÛÌÌ566>kŠ,! &547>73267654&'3.547!'b2þÌþúþÿ· ?0ñ" Lik6F›U #)CùþûÅþnZ*9%654' ;2! 47%>76.#".67! 3 Ìÿ5 R{üN^ýëþ6\-% .@$:0!¿9†xF?ÅO.&¶þõ-%Hnþ]=GÏ /D2# "/--/"ð$(Kt/eÙ6þmý e654.+"32>7>7.5467>32632#".5476&+"!6.#"æ" a9 !%!;-# üK !)-47 .îÀ]=Y™cŒO Sx›`@]C(Q CH OqxuV$þÔ0BH&"=/ m$88þ×9\ 52"=U3ý_.,#C’0'ƒiëñEE3mnEWµr4&@SX,/)š )þŠ9/'jiI;6BI$-'+#þn·*2%! 47>73267654&#".67!3 1Rþ þ- n_  ]sg{}DdXu  è LЩ þf<07JG_*)*BV_`%;XQW8'Z"76;(„þÄ4=þn²*K! &547>7326?654&+732>7654.#".547! /Ný÷þÿ¼ #-ÞTgm‡GX?)?)I:*  ,F.` ãGî¨ {i^7þr¶‡1:=A?S&P# @\UX\4IÑ/H275KN b09+ mþÍ2;`“4#q;#*!N&D654&'#">654.#"326%! &547>7.547! Ì%B?D%?9T\ *M63[J7 .N5iC3þÆþúþÿ©~eI8D‘X ;/‘Z¤!&9SR$%A\ý¼?4 IU,-UzM7.IN(•þþþúÞ‘GU‘¿3*t8!%dý*1?n-*¸bAØ >6.+"3267%#>76&+"#"&54?!263 H D.$<.24BÀ/IjK×CN.B_ :Da„WÈza †BWp'0@$þË(7654.#"#.54676!2r/JmOåJZ6 'G18`M6 '-ç<@0< €²f!T•…z9LŠ„B90 FQ,+QuJAq3Q‹L8xo0bTüE…‚%Fþn£=!# &547>732>?654&+73267654.#7 0)þÞûþôÀ ,8;¦  Xq1R@+ &X…+…UY)i¢i,ŠwvfB ÍŹ‰4=$RK<|'#Ec/H3/3(.\ÜDK 7.5476$! .7>7>7654.ÃÖ4CxþÐD8# J~m.]7X"-,º A,  ô  +  2QUþôZP\ßdÖšUgn¥3>~ÓB]fìîÍ>H?l- ! # &=0H'Q>+#EA $Ä9654.#"326%# 47>327654&#!76$3  ,O45XI4 PqaŽ;a–É}þAe˜ÍFf,YoUj þÎðÊ F3 FFEnO@2Nx–kl®{BwIW„»w6*6ß3!!">3 Bmi• @ik•Ffýôþÿ±€#èÆ +ýâ(2 +9rF´E6Iš¡E7Hœ©ýæÒ‘BP‘¸·Þ4Aá37þHÎ >!>?654&+"#6&/"!.546?632>32ª '>Z?þíBV8 0 -?LâM7*C/ 2.þÝ'- 0úÑ3Z*^2Ó}Ô:uuu;:mhb/÷-"!Dþl”Y[ñ0A$Zn:! 47>733267654&+73267654&'$547!#8^þþ6  1)òWra Ql{'NproþÝ%¨Si]_9æþL6?349 !524!$E`‡‰0(IrÌML,= 5¼C'Ü"]‚)77 7654%7%1Týòÿº &Od¶ŒÿÖ¤G!>76.+"#6.+"!.546?6%2>32y 9XDþÝH\6 8@NâP  E$2 27þí./  0äß ›þòt?e.oL³pÔ7DfþþEÀ'À Ipg‘%1%/›Ÿ./:")5Q. ýóqGUàü ?2K{Ÿ(O247N R~)-0 /†9+ÿÜþm¹?'3 654&'#>73! 54å7e$iQÕl|–þ¶u¥Ñy0ØOt§_ Hþ‘þ×þÓºLƒbþÚ r[>±1þí2úÀ—î­iDþ¹h­˜"`rþ“þ”+·qHþm·@L%# 47>73276.#"#7>54.#"#".'32>32>326-þâëþH *:F$‚# \p¹."- ,ž !#4+($2&"n %(1<#5<1A«m/àâC5?)WRGm3^5"E`ëÓ9T7ªª6G &$,% )0( ' C77C¬lAO9þn*a6&/"32>7+".547;2>?#?##"# 4?>32632zo!6,*#@]¿v"j¨l û6Q1.VE.-Y$ZY’ 6Aa†[þ¹ )úÎDgb†¦c /@J&3! ")8"þí &"'5þAi‘Z(.du/19(1!(:&è½Òþél£m7ENa,Öß$!E°gDS6`RD:A3ÿñþn*í=%! 47>732>7>54.#".67!2>7!bþþ( ,?,Ä"% Yv1XH66UICY þä @¯G@3  =fþI3<#@?A#A3c1#D_"GkIwn@k=8;,(&W"<:@'H 657!9-þm÷*O>7&54?632>32>7654.+"#6&+"%654.'&#"d!? · 1öÄ>].rFºl )?U9þ/I3 @WQâQ B& + Y€šªþØ!.&"iK˜&2 ÌÛ35Lý$##$ÊtRfB>me_13UKF%J'þ^ 1(ß>8]ÀGVØ… :/" 9<$þnú 4! 47!>?#".547>7!3267!1Mþ þ5 7 ¹d~1(?99!€¸k ,LuU7IfF+ )H3q‡]%þuP7A+#§]_ý' /kw'=KBrjg6=_L?:9!8' 63Z]ã+ÕJ654.#"326%! &547>3654&#"#764.#"!!2>3  0Q64UE2 7\>V|?`þþê½d–ËCb$37%, §"* þìRZq3‹R2 >-C?>iQ7.NN'›yþâ›GS„¸r430( = np 5Q6¦UOQSò.6ÿËN7654.#">3!67654.#"!>32(@(BX+8732>7654+7327654&'&547!µgRM2`›ß˜þä¬8TtMÐ7Q=* ËQoJ.Yè(áa'3ƒ!&VE‰Fy1@}6~¾?­pŠ\N¦°»byA‚„…C•`þï$O|X&e· 4-˜'. >"e7#í"654.#"32>%! 47!2,N6ËAœ7]J552þËþøþSk$D=0nþO; LR&þ²F5·!HpKþùójHU$ -!: (X32>7654.#">32>32!>54.#"#76.#">72!".547T &B+>dL4 ,K46YH5ªHg‚H)L?. 6‘ZØþì  $ §(%,":3ƒC¶h4þ»þêx¥]<0HO'!GqPB0 BF?kJqL')=)QSüJ`6=( pn 1)þÒ+8:z€%GVþõøM‚!JUÿîþn€íV32>7654.#"! 47672>7654&'.'" 547!!3#¤ "1>8* #0>8)YRý÷þD ž¹ Uh5[E0 AH+, þ» E‚ Oc#½-À7" xJ+ø$211C&0//@üõþ\83;l $$=P5O5/`*0V*û-4b–þE#è F4.P9}6'*Uí#654&#"326%!".547!>3 Hhl” Glg•F5þËþþƒµf¸$m7;267654&'.54?%!%!(þÎþøþK `R¶$# Kcm’;FU?9þ¦2Q% Wi2þ VXR3Í×B6?Q§Uˆ2]3& @aio5l'Cv4»5e)þ§OþüŠM>H‘@.­N! 4?!3267654.#!7!2>76.#!7!2>76.'.5473#%þÚþýþ? %LflŽ  þé+  þè+8Q2‰` ä)J_2ò MA7(’h}¾¿A3<††#@YJR( ÛÝ P$*(° =^!Q&vFReÿÿþnîf! 4767>54&'!327654'#73>764.+732676.+732754'&5473ñAþ0þR4   &L d†´1»)»",  ¼)¼", »)»Fw‹ ×2A!˜OH<"^<[˜cOþ½d#Ö`*$œ(/$ 5GbP&Jp1m†@>| þî›*->7654&#"267.547% 323$'¢ ?drŸ Jmf“þ}Hn$k> 73´³“!a7 9þÅzjþÿ—5-D…$#¨„C5L ýaX¹M8=þ‹JY’çXþÚQšNv+þnÿ*+% 4?326?654&+73267!%3RýðþH G$GTgi“l~®&®r“ þ—&þÚNí,¾qHþ`:2;“{@Vtj!K`û«Å• ßþ»d=™I(,ÿïþnêG%! 47%32>?654.+73>7#"#".5476$!3"32$7RýõþH ' Og4ZF/ 4R6Ø,Õ/\P>;>>{µm 'D*œ­Ýk¯D!³“~XþZN9D*$Dh3O556/á0QsH 3cn*).ʼÐdb~koþ¢®ëB)H#Ë 3#"327;7654#"! 47!37#$47! 3#3éʽ«Âç¢Ê ©ÅõEþ&þUJäÊÊþ\ Fì™ k*kk0s¢4x¦pü­†þ',{L,3fþð(.¦ÙLõ!þo*=654&+"267%!"'#72>76&'#&3$4?!2>3Ý#P# Y d- 7Rþ£<$-þûÖ)+N<*ž b,:`*þ  ,Q[ @1‚QÙ!-<þ5/<M þmR*3%! &547%$7654#"'>32327>.'7K,þÆþêþù¿ IrB=5&Þ!çÄÀ} -þ‘þã-Ãþ0õR&ÜÝ¿Š4<vzU`!Q *9!H«©˜h1;Þ…Bë(!¥ó,($•u'þmªE0!3267654.'%!#"'323267!! &547ë&pZudŽ +SC0ER& \þŽQÁdŽ&Zþþû ýà 3>y~,+ Bhe0b>~E=?þ'&‚ •z{þ7µ„06~þnÅ8 +67654#"!6?!! 54767.54°Ëø(Èõþ©VÈ 7þeþøI~=þhþ¹ %·¡aqœ"Í(!ªóÇþ²7Aþå±b}Q^ooþÏô)1½c5¦Z-Nÿ=Ž+2654&'.#"'67.547%'>7654'"3/ShÁ^t*<" W Œ#ÞØO[˜o‚  3'SŽ3Ã'!,†|n#,m|N &Ñþè'  'X¢3$YÓ»,6þ׿/<CÄw;l ÿãø{ L32654&#"326?%!>54&#"7>32>32+3267#"&'#"&5467 Jbu:1CPýÛ (,8GþfÃUF8‰A/9ˆQ^† =“Y–óÌl DA4‹V/O‘ERt4‹T~ˆÍNgU354&#"7>32>32#"&'#"&5467"3267>7>54&Ê (,7Gþg VH9‡@/9ŠR^…2\›¤@68Ç„Sx%0ŠR‚‹Ž4D 394D3¬B'40UYFÓ54O]72î((QEKK¨žŒþÄ€‰=<;>‹ƒ1†X¦@JvaZxHA@I*|HQz"IAÎ/Ü{ 32!6&#"Ï4WíîÛ4þÛ Tjiœ /=þÃþñ¥¹¹¥ÍÿãÛ/ #"!3267Û5þ©íîÛ5% Tjiœ /þñþÃ=¥¹¹¥)9†)!2>&#!!#ý'9¬yu{~ý}9`9¦WIô&DžX&þÚ–h ¤Bÿü-‚7373!!2>&#!!#-­.ù.¬.|þ9ßTVQXþ>99t;*´ììþvììŽ&DžX&þÚ–h ¤*ÿÿ\0)7!2>&#!7!2>&#!7!#uA0ÝþÄý‰.Ï}\N{ý1.Ï{^L}ý1.`)t=8fÐ!fJ‘oð&d(í(d&ðÕnˆp§œ‡à 33#'##œ›°jä\ºú`ºIþªíü¼ÏÏ£œ!à#3#3!7##3!¸"¤¤,Äþœ'²]œ„T¡ŽEà’®‘á’ËËD’þcÑœ¹á (3267654&#3267654&#%!2#!Ï1|XS 7T=&|FE .Dþé0œzn]jK¹¸þÐø6C(3FÃ-4 )ƒ^GQZ ]<ymÛœ³à 3267654&#'32+h2nt 5nÏÆèˆ+ðèÆKýæ{“C1:^•¡v>LÞÅóœßà !!!!!!=ý¶¢Jþp#jþ–+œD’´‘Ûóœßà 7!7!7!7!7!ó+þ–j#þpJ¢œ’Û‘´’ü¼ŒÐï!7#7!#"&547>32.#"326Ð~"J>ŠJ¶€)ó¾8i+$\ê>¸¢¸HêHºàþÁ?ü¼tþŒÿœÑà 7!#3!73…0ºjºýмjN’’ýà’’ Œ×à73267#7!#"&&,p>JQ Räžoª¦<|ÅÀ14AG¦’ýÈ™ƒ»œ à 33##]º@bÒþ˜ÒЕd7ºàþ¶Jþ·þx]þåóœWà3!󢺆ŽœDýN’Éœà 33## #kÞ)·Þ¢ ‚«”‚ àþ‘oü¼žþ’nýbßœóà 33# #Èv¤¢Èv¤àý `ü¼`ý ßœóà ##3ó¢¤vþ‚Æ¢¤v|àü¼`ý Dý ` ŒÃï "267654>  &54ç\Zþ*ÐHc*Ðþ¸c[‡—Y<)_‡–[=(À×Û¯gEWÖÛ¯fFáœÄà 3267654&#'32+#"/LZT7ZëþÄÁÄD=ºUõ7D(/‹kW$‹{þǽœ—à!#'&'&+#!23267654&#² pÌI D:@º¢ ¶vtþó,VLN 0N'%4þÓÓ ^þ¶DcP#Vf$ä5>$,Qœà##7!#sº†î˜ðœ´Œýà32673#"&54gºo0€V oºg!¶ª¨eÑýÇ';7654'&#"7>32¤g\ 1IdÃF·*q?y8)´¨€?B‚JA‚G¬9&Ã/: bX ?þšF)-8*Bni Œ>(R,ŒÃ42767654'&#"367632+32767#"&54.g-. 1J21ÄF·*89?xb[Y¨€?B@BI@‚G¬_è9 20X @fF*bBn54 ŒfR,$ŒÞ 73#7#"&547>322>54&"¸z¸'54@yQ ¨~8)'þü&xY&x¶Yý]6‹P2<Ÿª» +Qg +QâŒù I32676&#"26?%!654&#"7>32>32+3267#"&'#"&47À .7A '(0 þ±O+ þû%<&R,$T4AU#[>eL“€00$[42](>GY:p1..+*(*01º '&5F v (D! ˆ/-0,X9hg,Š"%"%dvUÝŒ— 654&"2>32#"&'#3Á&xY'xl-d8~S ¦y@T¸©¸y +Qg+R¤44ŠQ2<¬76]gŒ÷3#7#"&547>322>54&"þA¸©¸(h@yQ ¨~8Pþü&xY'x¶Mü™]67‹P2<Ÿª4» +Qg+RŒÀ'#"'&547>32!3267'654'&#"aD‹J±M7 ×›F2 þ"*`@‚JtG?Y»T32#"'&54?!654'&#"32767pD‹J±N6 ×›G1 Þ )`@‚JtG?-,ïT32&'&#";#"32767#"'&547>ðU&˜:@BIS4CM!:+$BJt+@5GHDC<ICD>ºXP{Ý$% aX„ z ,'  „3-5HSÎ:#"'&'732767654'&+732767654'&#"767632áU&˜:@BIS4CM!:+$BJt+@5GHDC<ICD>ºXP{Ñ$% aX„ z ,'  „3-5HS(¯õ ,654&"26#"&'7326?#"&547>3273+tZ)t\”³¬:o7/g:NW #bAx[ ±w=T¹à -ReT"+QeÀ—…—AFC,,ŒR)1•®2.Pim !#7!#3#73Zþ“aåƒæIµþ÷¸&¸žõ~~þ‰þQÀÑœÁ 3%3##{¹YàþÈÍ̈I/¹þ7Õêþw%5ðÙœÕ%>32#654&"#654&"#3>2ÅH.\"D—N ?# N•N ?!N—y† NU?Ð(&O+>iþŸ“. 0Eþm“,!/FþmsA%+-&¯´#+73267654'&#"#3>32¬KFC…L??F12%$E¸z¸jBe(3þ<<~=Jf ('Gþ™s^49:&>#Œ¸#"3267654'&>32#"'&54ŽB`BC`þQÓ•–H2 Ó–•G3™h\$. 4h\$. 4ʱX?^'-˜±X?^'ŒŠ"0732>54&#"767632#"'&#+,6ZuAZ442/9778¤K6Ú£>42¼—!e|6V– W?b&,›® Õ˜>32#654&#"Ó•–z ¸-CB`Õ˜±—^'-$.Th\9ŒÏÕ#"&54733267ÏÓ•–z ¸-CB`Õ˜±—^'-$.Th\Ú­Â#3>32#"&$654&"2Ò@¸©¸(i@yP ¨~8P&xY'xôþ¹b^67ŒQ1;Ÿª4»‚ *Qg‚+QLœÄÁ3#;#"&547#737ô"òò:'6Ž›ŸO8µµ"Á²~þ×*$~K@ )!~²4ŒÂ32673#7#"'&5454&#!7!#™þ5 ®MH GOþk Á h7(—œ¤&4!.¤¤E$Y\üø(#"'&547326732673#7"'& H.\ D—N ?" N•N ?! N—y† ''U Û(&8+>iaþn, 0E’þn+!/F’ýA%Tœ÷ #3÷þ¦ãf»7öýsþéÿÿ¸¤×ýdÿÿµƒWýdÿÿ4ÿðÂsÓýdÿÿT÷sÖýdþV³} +"3254&%$!2.#">32#"&'!¼r¨RHr¨Pýä4b¶V6J¦V~Œ6š`ž¸THFÊjh†"þÚßþ÷»do ¹fo¢çþ÷--u|…SUѲ‹þælgtng¶ÿÿéœçà°jA`73!7!!3#!!7!7;%ð3þ”,þ,þ”3ð%ð*l+ü+l*¶ÂááþùÂÕááÕ\þXr!7!;#+732767#"&Þ¨þ×+NÓ=bê 1foÒy+'b6+ÑŒÓ`áû¿„n9}+Ødlá7,dØóŒ­ #367632#"&$654&"2¼¸z¸'63@yQ SU~8P&xY&xôYs]6‹P2<ŸUU4» +Qg +QFŒ¹#"&547>32.#"3267K3p>£ Û¤8f/#Z4ZuAZ6c1¼•a',›¯–!f^7U !GMº 4;27654#"763#*''67&'&5467632&'&#"g""]L4€UkŸ ÆA ~ / 6'nn£833/#--4Z:; $ eeµ@4'$>a'ÇXW –33^%&ŒÆ ..#"3267>7#"&547>32''7'37å;B] -AE]u0 Í™”y‰'MѾM¸-ɺFQF"-Pea7ÝMf"+/›®’[&*„zBA=qAHEBê´.#"&'73267654&+732676&#"7>32ã^P Ûº>C4HG[ XtJBaOM{YOˆ:˜ iÝ I2?f„2"z&" „ PG1IWœÜ3###737>;#"Þ ÙÙb¸b¬¬ z˜*#F7~þ õ~,qW~¤T33#+732767#73`â^ppMQp'@……þv?C„B,­ó-#"'&547676;#"'&'73267"326?Ô2e ¿ü­v\/<s›¤~ýg+€£Q#7!;#"&54®Ž¼t§ =”ǃJ©Ü~ü¦!1~bF)¯€#7!;+73267#"&54Ü^»tw =”AB…L>:„J¢ã~ýŸ!1~x;:~78bF);œ<3!!¶Ì[ þþ0£ð­ì8>32+732767654'&#"#654'&#"#367632ÜH/\ D8:n>3J   N•N N—z† &(+*>Ð(&8)?kþŸz8=~J|-Dþm“* FþmsA&.­(#"&54733267332673##"&"I.\!D—N  # N•N !N—¨†;O+*>Û(&N+>jaþn. 0E’þn,!/F’üž0%+-¶¤ó*#?676'.#"+73276?367632éJ¼ ,":*,"FEkM4`º4549e(þ‚>æR10U¯{ rCC„K{í\7B)@(餅(6&'&#"#367632;#"'&547Â6/*<ºzº4459e( H5Jj+ 0( 1*[þËs\7B*?(1þ% „C0C#óœÞ 33# #môgGÏzôgGÏþ”lýmþ“Œ¸)67632#"'&54%"!3654'&+3276"ij•–G3 ji–•H2uB0%ôBC0Õ˜XYY>^'-˜XYY>](ñ4(? -4þø-44å­ì)3676?#7!#3!737&'&567>54'&é%wTq»/»iD9D9­ÀX@q~~q@Ae#¿X@h~~h@Add^ 4z5#Rþ¢ 4z5#-­¢D&'&#"#"';#"'&54?327676&/&'&54767632¢-467>"#z3`&QQ() ?L„- 7<=;A$%*U1e(ST†;:9ü) /"1a10 !~=&E)5 " -"2[22 ±¯ +732767676;#"@FƒÈ”> ~=>˜‘*œy8<~ I‡q,+~ $c¯ÛÁ 3#;+732767&'&547#737 "òò:'6Ž@D„L>!…* 8µµ"Á²~þ×*$~x9<~8)@ )!~²ŒÆ&#7#"'&54?#733333+3276|/¹64Ae)445¹5Æ5¹5-çÅ12#‘õ]4;%=#+mþïþïm '!bú-3267654'&'7!##"&5476767#7!c1( ;G%n>›Á+##"'&54?#7;?2767654'&'7# a`|Fc+"ee¹&"( <60 #kÛ!J'$+ŽYXB+D&,¯D~¯Q#71P$&/(fÚœ}3# ÚZãf»7öœsýéþ œÇ !!!7!“4þDsý½½þ›€þˆ{€yÛ­™!!;#"'&547!7!e4þCt ?L„-þt½þœ€þˆd!~=&G&€y÷]´!3276'0#"!367632+'67!7!Ý þ“3þD‰)M1i!™€þ²½þœ (®€þˆB3_iµ$€yܦ %!7!#"&'73267654&+´'þ›4þØZ/C<Ú¹A= 9r;Wg K\j™üz€ÿ f3|¦<7 )5޾!654&#"3267"&547>32CB_DE_Ø•i(à•–i(à-&7u“l~,'5v–hþÄkCNÏñÃlBOÎòÿÿÿþ Õ&©$ÿÿ/þ u{&©Dÿÿÿìšk& ´%ÿÿ/ÿã1&‹dEÿÿÿìþ2š×&%§ÿÿ/þ2&E§ÿÿÿìþjš×&µ%ÿÿ/þj&µEÿÿƒþoÍk&&&«u «‰uÿÿ–þof&vV&F«Hÿÿÿøk& ´Î'ÿÿBÿãø1&‹œGÿÿÿøþ2Õ&§Î'ÿÿBþ2ø&§GÿÿÿøþjÕ&µÎ'ÿÿBþjø&µGÿÿÿÞþoÕ&'«ÿHÿÿþoø&G«†ÿÿÿÎþÕ&±Î'ÿÿþø&±GÿÿþáÕ&±(ÿÿ'þƒ}&±'HÿÿþáÕ&´(ÿÿCþƒ}&´'Hÿÿþoák& ³&(«2ÿÿLþo‡F&Š'&H«2ÿÿ/ôk& ´)ÿÿçôk& ´Iÿÿfÿã±N&* ¸2ÿÿþX¦&JˆÿÿÿøÙk& ´+ÿÿ;`k& ´Kÿÿÿøþ2ÙÕ&§+ÿÿ;þ2`&§KÿÿÿøÙR&+ ª\ÿÿ;`y&KjHÿÿÿHþoÙÕ'«þ±+ÿÿÿkþo`'«þÔKÿÿÿøþÙÕ&²+ÿÿ;þ`&²Kÿÿþ¶Õ&´,ÿÿþ7&´LÿÿÿîXk&. «uÿÿRk&N «ÿ‡uÿÿÿîþ2XÕ&§.ÿÿRþ2&§2NÿÿÿîþjXÕ&µ.ÿÿRþj&µ2NÿÿPþ2!Õ&§2/ÿÿéþ2 &§OÿÿPþ2N& ¸3ÿÿéþ2N& ¸4ÿÿPþj!Õ&µ2/ÿÿMþj &µOÿÿ2þ!Õ&±2/ÿÿþ &±OÿÿÿÇ k&0 «?uÿÿÿ߸f&PvÿÿÿÇ k& ´0ÿÿÿß¶1&‹PÿÿÿÇþ2 Õ&§0ÿÿÿßþ2¶{&§Pÿÿÿççk& ´1ÿÿ;`1&‹Qÿÿÿçþ2çÕ&§1ÿÿ;þ2`{&§QÿÿÿçþjçÕ&µ1ÿÿ;þj`{&µQÿÿÿçþçÕ&±1ÿÿþ`{&±Qÿÿ=ÿã“ù&2' ¬ «2ÿÿXÿãù'…H“&uRÿÿºr&3 «ÿw|ÿÿÿÛþV¸f&S…ÿÿºk& ´3ÿÿÿÛþV‘1&‹Sÿÿk& ´Î5ÿÿšË1&‹Uÿÿþ2Õ&§Î5ÿÿšþ2Ë{&§Uÿÿþ2N& ¸ÎQÿÿšþ2Ë&ˆRÿÿþjÕ&µ5ÿÿMþjË{&µUÿÿÿã‡k& ´6ÿÿZÿãF1&‹Vÿÿþ2‡ð&§6ÿÿZþ2F{&§Vÿÿþ2‡k& ´&6§ÿÿZþ2F1&‹&V§ÿÿ´k& ´7ÿÿ¤‘k& ´Wÿÿ´þ2Õ&§7ÿÿ¤þ2‘ž&§WÿÿMþjÕ&µ7ÿÿMþj‘ž&µWÿÿþÕ&±7ÿÿþ‘ž&±Wÿÿ-þ2øÕ&¨8ÿÿBþ2`&¨XÿÿþøÕ&´8ÿÿþ`&´XÿÿþøÕ&±8ÿÿþ`&±Xÿÿ-ÿãøù&8' ¬ «2ÿÿjÿãù'…H“&XuÿÿË-T&9 ¬\ÿÿ¬Ï&YuØÿÿËþ2-Õ&§9ÿÿ¬þ2Ï`&§Yÿÿ)Zr&: ®|ÿÿZ-o&Cè Zÿÿ)Zr&: «|ÿÿZ-o&vH Zÿÿ)Z`'j5/:ÿÿZ-í&j¼Zÿÿ)Zk& ´:ÿÿZ-1&‹Zÿÿ)þ2ZÕ&§:ÿÿZþ2-`&§Zÿÿÿq?k& ´;ÿÿÿ´Ë1&‹[ÿÿÿq?k&; ªuÿÿÿ´Ëà&j¯[ÿÿ‘Nk& ´<ÿÿÿ¦þXé1&‹\ÿÿÿß r&= ¯.|ÿÿ1¤m&]eÿÿÿßþ2 Õ&§=ÿÿ1þ2¤`&§']ÿÿÿßþj Õ&µ=ÿÿ1þj¤`&µ]ÿÿ;þj`&µKÿÿ¤‘&Wjÿ¢ÒÿÿZ-/&Zsÿÿÿ¦þXé/&\s ÿÿçôk& ´Aÿÿ8ÿã|!øÿÿÿþ2Õ&§$ÿÿ/þ2u{&§Dÿÿÿþ2?r& ¯|ÿÿ/þ2um&Žeèÿÿÿ™ù& ³€' ®l$ÿÿ/ÿãu¢'„B<Åÿÿÿþ2™k& ³ÿÿ/þ2u&ŽqèÌÿÿþ2áÕ&§(ÿÿLþ2ƒ}&§'Hÿÿám&( ¬puÿÿLÿãƒ&Hußÿÿþ2ár&• ¯|ÿÿLþ2ƒm&–e"ÿÿþ2¶Õ&,§ÿÿþ27&§Lÿÿ=þ2“ð&§2ÿÿXþ2y}&§Rÿÿ=þ2“r& ¯|ÿÿXþ2ym&žeÿÿÿåÿãIk&b «ÿ‘uÿÿÿÿÿãÜf&cv—ÿÿÿåÿãIk&b ®ÿ‘uÿÿÿÿÿãÜf&cC—ÿÿÿåÿãIm&b ¬ÿ‘uÿÿÿÿÿãÜ9&cu—ÿÿÿåþ2I&b§‘ÿÿÿÿþ2Ü&c§—ÿÿ-þ2øÕ&§8ÿÿjþ2`&§XÿÿÿÈÿãk&q «ÿvuÿÿÿÑÿãÞf&rvÿdÿÿÿÈÿãk&q ®ÿvuÿÿÿÑÿãÞf&rCÿdÿÿÿÈÿãm&q ¬ÿvuÿÿÿÑÿãÞ9&ruÿdÿÿÿÈþ2&q§ÿvÿÿÿÑþ2Þ&r§ÿdÿÿ‘Nr&< ®|ÿÿÿ¦þXéo&CÜ \ÿÿ‘þ2NÕ&§<ÿÿÿ¦þ2é`'§,\ÿÿ‘Nm&< ¬1uÿÿÿ¦þXé&\ußÿÿ5ÿçìr&õiÿÿ5ÿçìr&õ¡ÿÿ5ÿçìr&õvÿÿ5ÿçìr&õƒÿÿ5ÿç&r&õwÿÿ5ÿç:r&õ„ÿÿ5ÿçìÓ&õxÿÿ5ÿçìÓ&õ…ÿÿÿr&ÖiþHÿÿÿr&Ö¡þÿÿýìr&Övýÿÿþr&ÖƒýÿÿþÃr&Öwý{ÿÿþ¹r&Ö„ýgÿÿÿÓ&ÖxþHÿÿÿÓ&Ö…þÿÿdÿêRr&ùiÿÿdÿêRr&ù¡ÿÿdÿê–r&ùvÿÿdÿê r&ùƒÿÿdÿê&r&ùwÿÿdÿê:r&ù„ÿÿÿcár&ÚiýIÿÿÿ•ár&Ú¡ýIÿÿýár&Úvü;ÿÿýGár&Úƒü;ÿÿýºár&Úwürÿÿýºár&Ú„ühÿÿeþVwr&ûiÿÿeþVwr&û¡ÿÿeþV–r&ûvÿÿeþV r&ûƒÿÿeþV&r&ûwÿÿeþV:r&û„ÿÿeþVµÓ&ûxÿÿeþVµÓ&û…ÿÿÿ1Ùr&ÜiýÿÿÿcÙr&Ü¡ýÿÿüèÙr&ÜvüÿÿýÙr&܃üÿÿý~Ùr&Üwü6ÿÿýˆÙr&Ü„ü6ÿÿþâÙÓ&ÜxýÿÿþâÙÓ&Ü…ýÿÿO°r&ýiÿÿO°r&ý¡ÿÿä–r&ývÿÿ  r&ýƒÿÿH&r&ýwÿÿO:r&ý„ÿÿOµÓ&ýxÿÿOµÓ&ý…ÿÿÿc¶r&ÞiýIÿÿÿ•¶r&Þ¡ýIÿÿý8¶r&ÞvüTÿÿýL¶r&Þƒü@ÿÿýĶr&Þwü|ÿÿýĶr&Þ„ürÿÿÿ¶Ó&ÞxýIÿÿÿ¶Ó&Þ…ýIÿÿXÿãyr&iÿÿXÿãyr&¡ÿÿXÿã–r&vÿÿXÿã r&ƒÿÿXÿã&r&wÿÿXÿã:r&„ÿÿÿ®ÿã“r&äiý”ÿÿÿ•ÿã“r&ä¡ýIÿÿý3ÿã“r&ävüOÿÿý[ÿã“r&äƒüOÿÿþxÿã“r&äwý0ÿÿþxÿã“r&ä„ý&ÿÿ¤r& iÿÿ¤r& ¡ÿÿ¤r& vÿÿ¤r& ƒÿÿ&r& wÿÿ:r& „ÿÿµÓ& xÿÿµÓ& …ÿÿþÿNr&é¡ü³ÿÿüòNr&éƒûæÿÿýNr&é„ûÍÿÿþoNÓ&é…ü©ÿÿ@ÿãr& iÿÿ@ÿãr& ¡ÿÿ@ÿãr& vÿÿ@ÿã r& ƒÿÿ@ÿã&r& wÿÿ@ÿã:r& „ÿÿ@ÿãµÓ& xÿÿ@ÿãµÓ& …ÿÿÿÂxr&íiý¨ÿÿÿ®xr&í¡ýbÿÿý3xr&ívüOÿÿý[xr&íƒüOÿÿþ‘xr&íwýIÿÿþ›xr&í„ýIÿÿÿ‚xÓ&íxý¼ÿÿÿ7xÓ&í…ýqÿÿ5ÿçìf&õCÿÿ5ÿçìfðÿÿdÿêRf&ùCÿÿdÿê¸fñÿÿeþVwf&ûCÿÿeþV¸fòÿÿO’f&ýCÿÿO¸fóÿÿXÿãyf&CÿÿXÿã¸fÿÿ¤f& Cÿÿ¸fÿÿ@ÿãf& Cÿÿ@ÿã¸fÿÿ5þVìr&¹Éœÿÿ5þVìr&ºÉœÿÿ5þVìr&»Éœÿÿ5þVìr&¼Éœÿÿ5þV&r&Éœ½ÿÿ5þV:r&Éœ¾ÿÿ5þVìÓ&¿Éœÿÿ5þVìÓ&ÀÉœÿÿÿþVr&ÁhÿÿÿþVr&ÂhÿÿýìþVr&ÃhÿÿþþVr&ÄhÿÿþÃþVr&hÅÿÿþ¹þVr&hÆÿÿÿþVÓ&ÇhÿÿÿþVÓ&ÈhÿÿCþVwr&ÕÉþÈÿÿCþVwr&ÖÉþÈÿÿCþV–r&×ÉþÈÿÿCþV r&ØÉþÈÿÿCþV&r'ÉþÈÙÿÿCþV:r'ÉþÈÚÿÿCþVµÓ&ÛÉþÈÿÿCþVµÓ&ÜÉþÈÿÿÿ1þVÙr&ÝhÿÿÿcþVÙr&ÞhÿÿüèþVÙr&ßhÿÿýþVÙr&àhÿÿý~þVÙr&háÿÿýˆþVÙr&hâÿÿþâþVÙÓ&ãhÿÿþâþVÙÓ&ähÿÿ@þVr& Éÿÿ@þVr&Éÿÿ@þVr&Éÿÿ@þV r&Éÿÿ@þV&r&Éÿÿ@þV:r&Éÿÿ@þVµÓ&Éÿÿ@þVµÓ&ÉÿÿÿÂþVxr&hÿÿÿ®þVxr&hÿÿý3þVxr&hÿÿý[þVxr&hÿÿþ‘þVxr&hÿÿþ›þVxr&hÿÿÿ‚þVxÓ&hÿÿÿ7þVxÓ&hÿÿ5ÿçìF&Šõÿÿ5ÿçì&õˆÿÿ5þVìf&Éœÿÿ5þVìy&õÉœÿÿ5þVìf&ðÉœÿÿ5ÿçì9&õjÿÿ5þVì9&`Éœÿÿÿ™k& ³ÖÿÿÿN&Ö ¸ÿÿÿf&Ö•þ*ÿÿÿfÍÿÿÿþVÕ&Öhÿÿ°riÿÿ{þVsÿ¤É°r!77#7!Ž2þ¿³µ"AÃþÿx¯ÿÿyh9uÿÿ ;¼&jjTTÿÿCþVwf&!ÉþÈÿÿCþVw{&ûÉþÈÿÿCþV¸f&òÉþÈÿÿeþVw9&ûjÿÿCþVw9&oÉþÈÿÿþ·áf&Ú•ýDÿÿÿáfÏÿÿþ™Ùf&Ü•ý&ÿÿþÝÙfÐÿÿÿøþVÙÕ&Ühÿÿä–r'iþÊ•6ÿÿHÂ&r'iÿ. nÿÿÆÂµÓ&ijMšÿÿO`F&ŠýÿÿOB&ýˆÿÿOHØ&ý“ÿÿO(þÕÿÿOh9&ýjÿÿO¼&ýkÿÿ¶k& ³Þÿÿ¶N&Þ ¸ÿÿþÕ¶f&Þ•ýbÿÿÿ¶fÑÿÿ  r'¡þÀ•@ÿÿRÂ:r'¡ÿ ‚ÿÿÆÂµÓ&¡jMšÿÿ¤F&Š ÿÿ¤& ˆÿÿ¤Ø& “ÿÿ(þôÿÿÿýþVžr&iÿÿÿýþVžr&¡ÿÿ¤9& jÿÿ¼& kÿÿ‘Nk& ³éÿÿ‘NN&é ¸ÿÿþ…Nf&é•ýÿÿþtNfÓÿÿÿºr&æ¡ý5ÿÿs;HØ&j•rÿÿ ;(þÌÿÿsî`fCÿÿ@þVf&)Éÿÿ@þV`& Éÿÿ@þV¸f&Éÿÿ@ÿã9& jÿÿ@þV9&™Éÿÿþäÿã“f&ä•ýqÿÿÿ¹ÿã“fÒÿÿþîxf&í•ý{ÿÿÿÌxfÔÿÿÿÌþVx´&íhÿÿ9î¸fvL°r7!#7 M"A"¶»þ¾ï¯xô¼ ß·ÔÌ991ÔÌ0!!+u8ýŒßþÝÿÿô¼ ß­ÿżDz@ ÔÌ991ÔÌ0!! Ñ1û/²öÿżDz@ ÔÌ991ÔÌ0!! Ñ1û/²öÿżDz@ ÔÌ991ÔÌ0!! Ñ1û/²öÿżDz@ ÔÌ991ÔÌ0!! Ñ1û/²öÿÿþÑÿî&BB¤‡¾8@4GÔÄä91üÌ0KSXíí9Y"!3ÝþÇ5׬‡~þ‚¤‡¾4@4GÔäÄÀ1üÌ0KSXíí9Y"!#…95þò׬þòþ¬þáÇo4@4IÔÄäÀ1üÌ0KSXíí9Y"!#:6þò׬oþñþï‡a#a8×s8þòþÇå d@2     4 G    ÔäÄÔÄä991ü<Ì20KSXíí9íí9Y"!3!3üþÇ5׬ÓþÇ5׬‡~þ‚þñ~þ‚“‡¶ `@0     4 G   ÔäÄÔÄäÀ91ü<Ì20KSXíí9íí9Y"!#!#}95þò׬þ-95þñ׬þòþþòþÿ²þáÓo `@0     4 I   ÔäÄÔÄäÀ91ü<Ì20KSXíí9íí9Y"!#!#š93þïÕ¬þ+:3þïÕ¬oþñþþñþÞ‡X #!#P8×s8A7×t8þòþþòþ¶ÿ;yÕ Z@/4; 9    ÔäÀ9991ÄôÔ<ì20KSXííííY"!!!!!7!yLL+þ´ÑÿÑþ´+LÕþ}ßûÈ8ß1ÿ;{Õ†@J   4;;  9      ÔäÀ99991äÔÄ2Ô<î2î20KSXííííííY"!!!!!!!7!!7!yLN-þ´ZL+þ²JÿJþ¶+LZþ´-JÕþ}ßþ+àþ}ƒàÕßÑ`µ ÔÌ1ÔÌ0467>32#"&'.736€HIƒ256743„IH‚426úIƒ235624‚HIƒ447743ƒ?!°!?qþHÿªLo u@;    4I   ÔäÔäÔäÀ999991/<<ì220KSXííííííY"!!!!!!:FþÅþÀ'Eþ×þ¬;HþÇoþ‘oþ‘oþ‘ј $0<HLp@?J%K+I"L 71= ‰+‰"‡%‰>4‡C‰: L(I1KJ11F17@11.11(1/ìÄÜìîÞîÝîÞî99991/<î2î2öîþîî29999904632#"&5%"32654&4632#"&%"32654&4632#"&%"32654&%–¥ww¨¨wu§2IH33JJü§xv¦¦vw¨4GH33JKþÞ¥xw§¨vw¦3HH33JKþ§'ûê!x¦§wx©¦wK24KK42IÝx§¨wx©¨öG45LM41Jü+x¦§wx©¨öH35LM41JúŸ^þ\ј1<HWg"2654&46367636762#"/#"/#"&"2654&4632#"&"2765454'&!"2654&#'ûêµ-@@ZBCþ×’kjIIjiKIÓ••jhIKihJKhj“4GHfJKþ±§xv¦¦vw¨h,A?[! #?,  [AB˜Ÿ^þ\—H35LM41J}x¦TSTS§wx©STST¨NG45LM41J}x§¨wx©¨ýžK24K&$13$&& )+ &K42Ia`lÕ!aõþ—`uþ‹ÿÿ¥`(Õ'ÄÿDļÿÿê`ãÕ&Ä'Äþ‰Äw¨`$Õ#!$¢Ù`uÿÿê`âÕ'ÇÿBǾÿÿ1`›Õ'Çþ‰&ÇÇw1m#@ /Ôì91ÔÌ907m2þÃå)þw#üãâÕŠƒ=w#@ /Ôì91ÔÌ90 7%'ð‡ýß-Bë#þwƒþvîÝÝÿÿ³Õ'þÌ4$xð$(!6763267676'&!}þõ¦bm4mjjeÊ`a ./piQ 3* ( ýò7 7‘S#F 8^^¥LAB\VC)*= áþø%(+C" ûþåÿÿMÑ B0ßþò? !#3#3!Dû&òzò%òzò%þ¾ýŒ¾ýŒ¾jþòÉ !73#73#7Éþ›þ%òzò%òzò%øÞ¾t¾t¾ÿÿÿÞóð' ·þÌ ·4ÿÿ³ð' ·ÿ 4ÿÿ´ð'þÌ ·ôÿ;ÝÕ 2###T××%#þùÒ¤¼,¾þÔ¿HÕè¾²Ûü²ùùš/ð #647632"326767654'&#"#"&4767>32J%#J2.L'3/&%&H=4UUg‰˜$%95¬e‰š <e?<7UabH>8TbaxöYL+*„î|€RMV„œ¸@ !3!73#3#Ómnæý|æR´¹*¹þ ~~w¯¿œÕß _@3 3  3 334Œ  ‹    ÔÜÄ991üüÔ<ì290KSXííííY" 333##7!7îþÆúRÍeml#¼$þ{)þ¶þ´´¢íß%!!67632#"'&'7327654'&#"Ú@%þk&‹SS~ÚDDK<$2=?o^_Œ‰yvtSL&& œß!#!o«ýèã þ?ßuý2² ð -=4&#"326'&'&547632#"'&54767327654'&#"L@P23('AMdôJ&&ii—€PP?@jN++ij©•RRFGž !2F/. !;A-,¨1:+*B0T÷'(=gHI78YR99./G}KL78d_CC¯)"!4,#"!ð$3732767#"'&547632#"'&327654&#"!$+223oKK"+66?uEDlm¥£OP++LEcb„012Ð 7I54@5M33®– <=u$>>l‘``FGŒytsTL%%188R1<98ÐÂ8 !!#5!5!5´þò–þð8ñ†ññ†ñÁÂG!!´ýLG†A¶Å!!!!šýfšýfÆ…„„R #.547R““#$Ž42£¢®þ®¤P¬]`¹Z¢F¢R 654&'3““#$Ž33£¢¯Q¤P¬]`¸[¢þº¢ œ™#6'&#"#367632™OºJ 23%%Eºyº65Df)'3þi~D('Gþ™s^4;;ÿÿ/ÿñTÖýdÿÿ!ÏC{ýdÿÿTtýdÿÿÿñTuýdÿÿÕCØýdÿÿíÿñCÙýdÿÿ!ÿñTÚýdÿÿCÛýdÿÿ ÿñTÜýdÿÿ!ÿñTÝýdÿÿ4œÞýdÿÿ%«ßýdÿÿ¥¶)àýdÿÿÿiRfáýdÿÿÿiRfâýdÿÿÿ𼂾ýdÿÿÿðÀ‚Äýdÿÿÿð¸‚ÍýdÿÿÄøt{ýdÿÿÿð¾‚ÅýdÿÿôƒhTýdÿÿÑÁgÊýdÿÿcnhyýdÿÿÙÕ‚Ëýdÿÿ ™‚ãýdÿÿÚÿ‚ÑýdÿÿÿñƒzýdÿÿLÄ%ÒýdL Ö%!!!!!!#"32.#"3267þªBþ¿#býÔ9=Aú$%ÃAs2 1eð*E²þõ ò &° Bÿãóð/6767#"476$32.#"!>32.#"'*]u7rÒ^ùþ×^\l1¯aÁd3O¡[¿þýPs 4ža#.C&g† $Nþµ12J³=ƒš¦78þËIDþœþõ¬bÇ­`eþÝž–Õ!!!!3#!#7¸±4ý®1/5ýÒ!l!l.þ¡/u"ÀþÝþêþݹ¼þü¼ÿåÕð#!!37#737#737632.#"!!!H!è.ü/Ë »)¾Á(Á0…ˆøSŸL25~@q?<>(þÁA)¸þö ¸ïWïz|þâ%(=;zïWïÿêÿB¤/#6'&#"#3676323632#?6'&#"#fk×" 4AZCáˆá6;:AI00¡lL yaTáH1?."CÖ¾ð¹75ªœýÙ`¤`/085cs® îãýVH)v75TR„ýÚÿ°!Õ#7#737#73!3!3#3#!#!3' -aüÍ&A-B&AV®<¡VmVB&A-B&AVþR<¡Vþ“V¿-axååÂÂå¶þJ¶þJÂåÂþJ¶þJ¶§ååÿãDÕ&^32654&##;7332654&/.54'+#!2333632.#"#"'&'#"&5467%b>B/-H*!  $ 2644.YKý&)qUu.±†&l=7¦¨5I5g30`+05+dP~57ŠKN*¾þ_€zQVþ¢þ& .(D) 64$( (œŠ91iOUMýúÕkc§>þ %þê2473$ .‘ÃÛ ˆ€@!ÛÿãÇÕF2676&+#.+#!232676&/.7>32.#"#"'&v@@ .@U(§Ø:31::Ë™6œ}_Q(5059=7>"8 {U’…5p@8l269#2 ŽSžŠ;<?ZgfXþüÃspRýËÕÆÖ”¾-v/:90/ ¢¥²¬ þð0035+. # «³´TÕ"&)-1'#73'33733733#3#!#!#7373'!37kI4Ûñ;Ýò;Ù:4HZnÛþøOÛþøoH r„§ý1 rä'þ“§èv’åååååå’v’üªVüªV’’þB¾vvþøþB¾vvvvÿÏÿã=Õ !2 #6&+#%"3;3ÒÉ6:°: 1t½ÓîkþsÊ7:°: /u¾ÒïÕþÊþÃþ§Y¹Ÿû*5=Yþ§¹Ÿ×ÿÿBþjs&Ój/ÿßÿãÓð,v@@#$u& uUCJ UC JB E*-,&+*'## %+#-ÔÄÄÄüÄÄ9999999991Ä2äôìôìîöîî2Ý<î290632.#"!!!!3267#"=#73>7#7]VçPœI@8‹Oi¬9’RþZRþê€hM’s?LUãþÉT°Tòø$$þ¸KM‡½g»|Œ>Zþ¸$$ î»+K!½Õ!!!!!!#7‘j[øKý¼Hþ³Ÿþšþ©cþãw_`uýß!ý‹˜ý8Lý´Ș© Õ!'?'7!!!77áoþÏDo  o ^þ~8*8þ‰3nž!n<ýÄ^:MS¨:MSþþûþà9MR¨9Mþ7ð.i€Ž'6767632#"'&'32767654'&#"67'6767632#"'&'&/#"'&54767632327676767654&'&&#"032Ho¤$*(0.;' '#-/29"f  ,#'  !%ü ² l*%$GmoOL'$  0@&++6)!  5SK# 0*G(o¶&4+-' 1þ  þ7+Уc]97#96O3AHJB @@=kb¬3JMqŒ‚~Es/4 %UA4G_KBjüÇoD7=AiK}f^<={@”ûË  ÿãð1@'32327&54767632#72767654'#"'&#"6764'&#"±®Ïœq:])| \f§£K* *…m*žžç*tQ;)„˜v;.*/qI"'" ê„Dlг26¬X``7a0<ã«‚“&'àlmã@.j?3thP#lƒ$:990C#iÕ"',!23#3#+!#737#73!!6'&+!323¤é~|TG HL%:N蹤mþÙ±VUYY˜þ† ½yGþ³Õ[Z©H--HpB[QýÑHZHHZ(zffêfEÿ[Øx&1#7!#7&'&54776?3&'&'6767¥o#@xy{]^œÐjW>Ë¢Û›XPaS+RG]b¼!&LA¸^I€-//STÐýKF#ЬÐdtiÏ¥"‰7ø?&û¾ 6Þ#PŽþùaQˆYU"ÿŒªÕ73!3#3#!!!#737!!/3'# äCLã«!E-þØ-þt¤þؤF!~D(DjQ½ÃUý«Ã•Ãþ›eþ›eÕ••ÊÿÄÿãð63267# &767#736767!7!676&#">323#!semlí†;rêoþòß,&®' c¯þ8&+ak`Ñm8nØgãÖ'|&µbïA5&¶YcRTþÏ45ßâ Â2 f@ÂPVFC ./èËÂ_TÂ6þÓ )%#&'&%6?3&'&'67679jm;;6¢5Í—ùKGE¶ß$¢%95bTF©IHccþ ¥>6Æ10™%R7þêr¼~oËr »¿7þËN'ü›(O‘Q"züó‡!oÕ !!!!!!ë2ûã²þÙ¦þ…33þ…Õþþû-Yþþr Õ&#!#!'&+732767!7!&'&+7 |à |µ"A]*4¦þ¼k .k¦0Óy@ þ/~y)zü~ÕÃ2@Ã_@[ @_ýçy,©ø>*Ã*;Ãtÿä¸ð%%3267# '&547!2."‰U|d©] Ö„þø{OH“}†8Srèyx ¬A< ƒ7@,ƒLÔ‰Ák|r•4‚*:0N²þ¯ue¢v tÿÏÑ ,>.#"3267#"&5467>32#3"32654&'2#"&5467>8+1=N.*:4*G$jt)',qI!Cjš„š<-@.?du$")oDdt$"(o¹þô9"£‚QT#Eþ徬iÈPYVù÷5üŽ®IF¯ŽIDèË«c¹L]]ɬa»M\^µÕ3!3'!!!!!!¹—ü+—üaÝaþŸþ#þŸ]ûåûåxýƒ}ú+àý ÿÿ;`K;`4#"!'7!7>2!6+qStyþÛÒ›7ð?#&ûBþ¥00¨åŠþÛ… w‡ý‹63"!#7267 ‡ 8±† 7’  þçb%þžþ4)/†°Ô*W- àþÙ-†°Ô*W-  §4Dþá¦4EŸ€:F€9Gþ=¾Õü²œ•Û>;ûãýNœ•Û>;}ÑN,6>2#".5467>"3267>54&'.33264&#32+hÚZZ\[¶Ú~}Ú¶[\ZZÚ~cªIGHHެcd¬FHHHHH©þsß”¥²²¥”|AGGA|NZZ[Ü~}Ú¶[[¶Ú}~Ü[ZZGIG¬ebªIIHHªbe¬GIGwýêŒ5e7J•Õ3%!2+!327&+67654'&²þûJø þ÷øÝþ“mÝ5//5ݰ=*__*]ûåxýêëýýú~Ó#ýg)Z³²Z)þÕÉð'%!# ! %27&"676'&|ðþÜÃþÚþ¹F"C«ýobëbbëbn……¡……%þ°˜lkœþhþ‘üþ”43­34ûž¬ýŸ¬ûç­a¬ÇÕ%-13&'&7!.+!!2!27&#676'&%3{THv‡u2M;o.a4°þw§5}fþšcÛÖd)ýß“1EDý)šm=§þïs@1F„~þh‰|hý“ÕÖØÐb)‘ýˆtýÁLŽ #!$5>+;6-0$(»œv»# *%;(#8MX!GL!!+Im–6#"'&'&'&'&'&#"'67676327676'#5!#ÚO$0-6;+>4!# Ž>&.&=A"?,.!" »œv»([+!!O7!XM8#(H. % #»vþdBÇ›!!'#537¥êþ‚xúZ‚xþÝ#x‚Zúx¡à‚xú‚x#Ž#x‚úxþÓM'75'3''#ø‚xú‚x$Ž"x‚úx‚àê‚xúZ‚x#þÝx‚Zúx‚þBÇ›'73'7'7#'7!5,‚xúZ‚x#þÝx‚Zúx‚þ¡‚xú‚xþÝŽþÝx‚úx‚àþÓM77#75'73Ø‚xú‚xþÞŽþÜx‚úx‚àc‚xúZ‚xþÝ#x‚Zúx‚êBÇ›'!5!7òwûþ>‚xþÝ#x‚Âúx1òxú‚x#Ž#x‚úxBÇ›'7!'7'7!'4òxú‚x#þÝx‚þ>ûw1òxú‚xþÝŽþÝx‚úxBÇ› 53#5!5ÍÂÂýŽ‚xþÝ#x‚¡úý,ú‚x#Ž#x‚þÓM %'3'3!5ø‚x$Ž"x‚úý,Âr‚x#þÝx‚ýŽÂÂBÇ› !'7'7!#3r‚x#þÝx‚ýŽÂ¡‚xþÝŽþÝx‚úÔþÓM 7#7#5!Ø‚xþÞŽþÜx‚úÔ‹ýŽ‚xþÝ#x‚rÂÂþÓM%7'3'7!!5"þÜx‚‚x$Ž"x‚‚xþÞ"ý,Â#x‚Y‚x#þÝx‚þ§‚xþÝÂÂBÇ(276767654'&'&'4#!5g    @16T)+51@ýô‚xþÝ#x‚¡  àQ87;=49(*‚x#Ž#x‚BÇ(!'7'7!"'&'&'&547>763"j ‚x#þÝx‚ýô@15+)T61@   ¡‚xþÝŽþÝx‚*(94=;78Qà  BÇ$=+#5#53547>76"3276767654&'&'&g@16**)+50AGáä‚xþÝ#x‚äT61@  G    ))87;=49(*àà‚x#Ž#x‚H;78Rà  H  BÇ$=23'7'7##5#"'&'&'&54767676";54'&'&'&j@16Tä‚x#þÝx‚äáGA05+)**61@    G R87;H‚xþÝŽþÝx‚àà*(94=;78))ß  H  BÇ›F26767676763226767'7'7#"'&'&'&'&'&"#"'5[ #$! ‚x#þÝx‚,"    "/‚xþÝ#x¡   %$   ‚xþÝŽþÝx‚ "  ! ‚x#Ž#xB²¯#'7#533'7'vÃ8«1¦‚xþÝ#x‚Ã8«1¦‚x#þÝxÁþñ'è‚x#Ž#x‚'ç‚xþÝŽþÝx9ÿû~š 7'7…–cþ°ŒîŠkný"«Ý[Ô k‹îOc–uþP¥%þ¤·8ƒ 5!#ЂxþÞ"x‚hà©‚x#Ž#x‚ûw©™ƒ !#!'7'þzàf‚x$þÜx©üW‰‚xþÝŽþÝx·ÿâ8e !3!5Јàý˜‚xþÞ"x¼©ûw‚x#Ž#x™ÿâe '7'7!3‚x$þÜx‚ýšà¼‚xþÝŽþÝx‚‰üWº5p !5!7#7[þ_‚xþÝŽþÝxwàü©‚xþÝ#x?ÿâ°^ !3!5Xxàü¨‚xþÞ"x¼¡ý‚x#Ž#x2XŸ '5476767632#4'&'&'&7#7,#!A=PNZ]KS;>#"Ö!*#13#'D‚xþÝŽþÝxq!TPA>! #;SK]ZNP=A!#q‚xþÝ#x‚%'C "()/ZOR?<# !>APT2ÿìŸV 5!7!##2lûüvœ»<œýĻʌŒÁv»ýÄœ<»Bÿâ  !!#33#'7!5!'7x‚ýp‚xþûÂÂÉÂÂþûx‚ýp‚x x‚à‚xþûÔüŸý,þûx‚à‚x7ÿÙš42#"'&'.5476732767>54/#7!ß%?((*MGgZsn_aMOP(%R«.-'<0CA57---0»vœ\˜apn_cMG.(()LNÄkoaZU•-8:>=96/(-,r=ZH»œv»7ÿÙš4#5!#53276767654'&'7#"'&'&'&5476ò»œv»0---75AC0<'-.«R%(POMa_nsZgGM*((=\»vþd»HZ=r,-(/69=>:8-•UZaokÄNL)((.GMc_nmd˜BÁ›5!B#x‚4Á·#x‚àBÇ¡!!BMüÌ‚xþÝ¡à‚x#øÓM3'#ø¸"x‚àMþÝx‚üÌþÙM#'Øà‚x$Mû³4‚x#BÁ›!5!'7û³4‚x#Áà‚xþÝBÇ¡'7!5þÝx‚üÌ¡·þÝx‚àøÓM!37øà‚xþÞMüÌ‚xþÝþÙM!#73ضþÜx‚à#x‚4Bÿâš  '7!5!'7 5!!þÝx‚üÌ4‚x#û³#x‚4üÌ‚xéþÝx‚à‚xþÝýŽŽ#x‚à‚x ÅM  '#' #737¾"x‚à‚x$rŽþÜx‚à‚xMþÝx‚üÌ4‚x#û³#x‚4üÌ‚xBÿâš 5!!'7!5!'7B#x‚4üÌ‚x*þÝx‚üÌ4‚x#éŽ#x‚à‚xÁþÝx‚à‚xþÝBÿâš'5!!!!5í«#x‚4üÌ‚‚4üÌ‚xþÝ>«Ž#x‚à‚‚à‚x#Ž ÅM73'#'#'3i«Ž"x‚à‚‚à‚x$Ž¢«þÝx‚üÌ4‚‚üÌ4‚x#Bÿâš'7!5!'7!5!'7ä«þÝx‚üÌ4‚‚üÌ4‚x#>«ŽþÝx‚à‚‚à‚xþÝŽ ÅM%#73737#hªŽþÜx‚àƒà‚xþÞŽ««#x‚4üÌ‚‚4üÌ‚xþÝBÿâš '7!55!þÝx‚üÌ#x‚4¼·þÝx‚à·#x‚àBÿâš !! !5!'7BMüÌ‚xþÝMû³4‚x#¼à‚x#»à‚xþÝBÇ›!73!!!'7#5!!™{Va6úþÈPˆþEV`6»DxþÝ#xúþ\HHVßž;cffœ:bDx#Ž#xªHHBÇ›!7'#53533'7'7##5'35#žHHçþâDxþÝ#xDDx#þÝxDçççHéHHfDx#Ž#xD¼¼DxþÝŽþÝxD¼¼fHBÇ›!'7#5!7!5!73'7/!7'!8þ…Va6ú8Pþx»V`6»Dx#þÝxú¤HHþªƒž;cffœ:bDxþÝŽþÝxªHHBÇ›!!5!3HH\ý DxþÝ#xDöyHHfDx#Ž#xDfþÓM#'3'#' fDx$Ž"xDfI\ü¤öDx#þÝxDý \HBÇ›!5!'7'7!5!7žü¤öDx#þÝxDý \HyfDxþÝŽþÝxDfHþÓM%37#73±fDxþÞŽþÜxDfHñ\ý DxþÝ#xDöü¤HBÇ›5!'7'7%!7'!™DxþÝ#xDŸDx#þÝxDýûkHHý•HƒDx#Ž#xDDxþÝŽþÝxDfHHHþÓM'3'7#77'ºDx$Ž"xDDxþÞŽþÜxªHIIHWŸDx#þÝxDþaDxþÝ#xªHHkHH}ÿÆ6##7!#ŽV`Jýê»vœnJÄVý¢Jpœv»ýêJ›ÿÆT '#5!#5'5Cý¢Jnœv»ýêJ`Äý J»vþdpýéJ^V›ÿâT›%753!5373™ý J»vþdpýéJ^Vó^Jýënþdv»Jý }ÿâ6›%33!'38V^Jýépþdv»JóV`Jýê»vœnJBÇ›!!!!5!!qüYýNxþÝ#x²üèdfYfx#Ž#xfBÇ›'!5!7'!5!7!5³Yüè²x#þÝxýNYüdYfxþÝŽþÝxfYfBÇ›3773#''#5[¬KÂÁLnDvÁÂv‚xþÝ#x¡PÎÎPà~ÚÚ~‚x#Ž#xBÇ›'7'7#''#5377v‚x#þÝx‚vÂÁvDnLÁÂK¡‚xþÝŽþÝx‚~ÚÚ~àPÎÎPþÓM%#5#535#535'3'3#3Øàúúúú‚x$Ž"x‚úúúžžžÂV¼‚x#þÝx‚¼ÂVÂþÓM3#3#7#75#535#5353Øúúúú‚xþÞŽþÜx‚úúúúà®ÂV»‚xþÝ#x‚»ÂVŸBÇ› #553353!Æ‚xþÝ#x‚C»{»¡à‚x#Ž#x‚àààààþÓM 5'3'#7#7ø‚x$Ž"x‚áßànÆ‚x#þÝx‚Æ}»»þÊ»»BÇ› 3'7'7+53#53°Æ‚x#þÝx‚Æ}»»þÊ»»¡‚xþÝŽþÝx‚àààþÓM 7#757'3'3Ø‚xþÞŽþÜx‚àßà߯‚xþÝ#x‚Æ}»»6»»BÇ› !!#3x‚ýp‚xþû–x‚à‚xþûÔBÇ› 3#'7!5!'7ÍÂÂþûx‚ýp‚x–ý,þûx‚à‚xŠØ 5!5! !!5¤¤ýcþm“÷ý ê¹¹]¸ýý§§çþ€ÁŠ 333'#!#°\¸^º¨èþ€æ¦Zý¤þùý ÷“AŠÌØ !!75!!5œý¤þøý ö”ê]¸]¹þYç€çþYÁŠ ###3!3"^¸\¸þZæ€èþX0ý¤÷ý þmÁŠ 3'335%!!# #Ä^º¸\¸þä€þ€æ¦¨èàz¸¸þ†þènnZþÞg“þmþ™ÁŠ %3'3#!5%# #3!Ä^º¸\Ò^þ榨èÊü¸¸ýdddZß“þmþ!þèÁŠ #!5#7'# #3! Ò^Ô^º¸æ¦¨èÊüî÷ýÇdd9c¸¸ý¾ß“þmþ!þèÁŠ # #3!3#!!5#3¨æ¦¨èÊüîf–\Ò F Ô^ß“þmþ!þèוýdd•ükn’ÁŠ'33%# ##!#'37"º¸\¸þç馨ééèþ€æ`º¸\\\~¤¤ýÜ$y“þmÜýå?¸¸TTÁŠ %3'3#!5'3!3#7# ##'37Ä^º¸\Ò^pÊüîÈæé馨éé躸\\\¾À¤¤þ@ddZþèÜ“þmÜ?¸¸TTBÌÝ 5#35!7'!!!5 5ddœ¸¸ý¾þèß“þm’Óý¢Ó]¹¹]þäÉÉçþYþYç'ÿì d!#7!##‹ügävœ»<œýÄ»dgüdþ¥v»ýÄœ<»,¥x!5!!53753¤ûœþôþdºýÄœ<¼cûgüü‚»<œýÄ»þdÁŠ 3'3#7## #3 3Ä^º¸\\¸º^þ俦¨èèþXþZæZ¤¤ýÖ¤¤Ç“þmþœþm“BÇ›676323'7'7##"'&'#58X„)O$A?“‚x#þÝx‚“:[‚†V6N¡J9\ 63S‚xþÝŽþÝx‚H9ZY8Jà ÅM 3'#'737Ž"x‚à‚xÀþÜx‚à‚xþÞMþÝx‚üÌ4‚xüÖ#x‚4üÌ‚xþÝBþã'7!5!'7!5!'7!5!'7ä«þÝx‚üÌ4‚‚üÌ4‚‚üÌ4‚x#««?«ŽþÝx‚à‚‚à‚‚à‚xþÝŽ««ŽBÇ›#5!5!53!<Âþá‚xþÝ#x‚ÂSÁúú‚x#Ž#x‚úúàBÇ›!5!53!'7'7!#”þ®R ‚x#þÝx‚þàÂÁàúú‚xþÝŽþÝx‚úB½›'7'7###5353v‚x#þÝx‚§Í§‚xþÝ#x‚§Í¡‚xþÝŽþÝx‚þü‚x#Ž#x‚úúBÇ›533##5##5#5353NÂÂXÂÙ‚xþÝ#x‚Ù¡úúàúúúú‚x#Ž#x‚úúBÇ›3533'7'7##5##5#5353ƒWÂÚ‚x#þÝx‚ÚÂW¡úú‚xþÝŽþÝx‚úúúúàúBǨ#5##5#533333'7'7åj%j‘‚xþÝ#x‚‘j%j‘‚x#þÝx‚Áúúúú‚x#Ž#x‚þùþù‚xþÝŽþÝx‚ŠØ  !!5¤¤cþm“÷ý 깹þÉàBŠÌØ 7!5!œ¤þùý ÷“êþ޹þY7à7þYŠÌØ  ! 7˜þm“¡“þmýü¤¤g¤Áþɧ§þÉ7þYþY7)¹¹rþ޹!°Õ !!!!hŒþé)þm'Z‹\'þmcüÕþqú+ÿã½ð76! !&'&"2767!! '&  '& Q(þ‰ 5øjjø5 w(Q þÚþÙ  êsÊÉÉf’)råþèþèår)’fÉÊÉswÿãZe 0563 #"'&547632654'&#"3276767&#"l’j/‡<F½“£ªh|olÔnh'8 _§S}()G:3?1&QŠ‚3!eÜ$þût·qƒþ¹z[n¸Ì ERAIo:«ü±I-.$,Q?I­ŒY£CÕ 7!!5!!5!!£pýpý ü`û|ç†ñú+£ÿ¡C43!!#7#53#5!!5!3!”À ýc¿D“hû>hþZ×™rr¶h4_ú+__û|ç†ññþzçþ„|?X”­!0?"'&''7&'&54767>2"&'2767>54'&ww&'''OO¾Ý_:3www('''OO¾Ý_;4ò•AA565 ÷¬þ A•AA565 ¬ww49_pm__ONP(&www4;_mp__OOP((D56€MJ@ö ”þ  56€JM@ÿúÙK@&4<†ÔÌ91/äì90KSXÉÉÉÉY"% !!{þíþî‘ðû!Ý5ü˲úqÿúÙ!!{ýÛþßþ²üËþƒúqdmô3!!"&63!!"!Q )Sñþ’öö’ñþS) ‡PH{ŽæÌ_ž_ÌæŽ{HPædÿ;w¹ +#"!#73#!!3!!"'&'7&'&63„S) W¼ ®J×+!yœþ•œ ñþ53W ×^c>Hö’Ž{HPæPHC4|ÅPuæþ_æþ`æêPú`—¯ž_Ìcnƒ!!3!!".>3!!"Uüè*^Œòþ’÷÷’òþ‹_*ñÞ&,bÞ‰íí‰à`+dmô&'.#!5!2#!5!26767!5€ )Sþñ’öö’þñS) üämPH{ŽæÌþ¡þbþ¡ÌæŽ{HPædÿ;w¹ +%326767!73&'&''7#53!5!&#!5!2'#܃S) þîV¼ þSK×,"xþëk› þñ52X ×^c>Hö’æŽ{HPæPHC4û„ÅPuæ¡æ æêPú`—¯þbþ¡Ìcnƒ!5!&'&#!5!2#!5!276|üç*]Œþò’÷÷’þò‹^+Þ&,bÞ‰íþêí‰à`+˜þL9î@’‘44ÔìÔì1Üìì20!!!9ÿþ_ÿîø^Óù-¢þLPî *@ ‘ ’‘   Ô<Ä91Üìüì990 5!! !!5mþÀýyÁþ=šü/9)ŒÕý üæÓ‡B ú·H üÌ1Ôì0!!BKûµúîXy !!5!3!!!5!òþfšíšþfšûß!bìbþžìþžîÿÿÿB3ÕÿÿyžTU þeÿÿt´rþÿÿXÑ)¾É1ÿÙ–¾ ,@  —–   ÔÄ91Äüì90'%3##q@`ªƒØ4þ4»ÛžÆ{ý»$Ðùëø1ÿÙ–v(3#532654&#"5>32#"&'532654&'%3##oooJUOFEŠDE‹C¢¸ibouÁ¸K–JC˜PU_bþ¬@`ªƒØ4þ4»Û˜’2,-3˜teI^p\yš@8=DýÆ{ý»$Ðùëø1ÿÙ–e 333##5!5'%3##¼úúÌmmºþw>@`ªƒØ4þ4»Û¯þ¶þ´´¢ý&Æ{ý»$Ðùëø±ß  %.#"326"&'#"&54632>3"3Ÿ6J032#"&'#"&54632Õ0P2;JC88bý6J0#47632&#"#"'732ëUp†s•XlNGUnˆs•XlNGD"•McoŽH©ùÞ•McoŽHþ^Ñ#+4632&#"#"'732%4632&#"#"'732ñro‘nQ.A&ro‘nQ.A&ýõro‘nQ.A&ro‘nQ.A&D"‘´K&©ùÞ‘´K&©"‘´K&©ùÞ‘´K&ÿÖþ^û#+A4632&#"#"'732%4632&#"#"'732%4632&#"#"'732aroKnR&roKnR&þ‹rnLnR&rpKmR&þŠroKnR&roKnR&D"‘´Kz©ùÞ‘´Kz©"‘´Kz©ùÞ‘´Kz©"‘´Kz©ùÞ‘´Kzÿÿ“iB£'1ÿÿ$'1þÒþW14þWÿÿ”i>£'1þW'1þÓ$10$ÿÿÀi£'1þW1ÿÿ$ÿÿ“iB£'1þÒþW'1þÓ$'14þW10$ÿÿB ó'1t¶JiŸ£ !!!!!!RMþ³Mþ³üúêý£þ“þ þ“ëÿÿ/6¦Ó&¶'1”T'1˜þ$'1þoT1þnþ$ÿÿXyý&Ò'1~1ýîXÔy0#"'&'.#"5>323326yKOZq Mg3NJN’S`‚u_Gˆ0ê;73 ":?å<776<XÔy032?3632.#"#"&'XJˆG_u‚`S’NJN3gM qZOK0A<677<å?:" 37;Xcyž&#"5>323267#"''ä43NJN’SFX‡É‰;5GˆJKOK[‰ÉC :?å<7Dþj323326!!yKOZq Mg3NJN’S`‚t_FŠü(!ûßZé<73 ":?å=676=ÁëX'yü#"'&'.#"5>323326!!yKOZq Mg3NJN’S`‚u_Gˆü)!ûßüê;73 ":?å<776<þYíX z'767'"'!!'7#5!7&'&567676ò·F^UE;eFT(O^ýj–ŒgÑR…;uIF\<[ETFR‚ &ÉÆþ¼'"Bè6$¨ëþùP·ëæ(9âL5hX<yé"#"'&'.#"5>323326!!!!yKOZq Mg3NJN’S`‚u_Gˆü)!ûß!ûßéê;73 ":?å<776<þPìãíXÿ©yé.#"'&'.#"5>3233263!!!'7#5!7!5!7yKOZq Mg3NJN’S`‚u_Gˆ`ªþ¹–Ýý‡a°«G–þ#z`°éê;73 ":?å<776<þPìãí“uíãì“uXÿqy/7#5!7!5!7&'&#"5>3236767!!!!'þ¦\þžÂUQ:43NJN’S`‚jÚNDJKHEL=aþ?]ý‚RÚ<íãìÒ# :?å<77 YÀ Aê;•ìãíÊXXþyü7Z@110+5.*'   'l.5l l l810* 8ü<ì291ÔìÔìÔüÔìÀ99999990#"'&'.#"5>323326#"'&'.#"5>323326yKOZq Mg3NJN’S`‚ t_FŠIKOZq Mg3NJN’S`‚ u_GˆZé<73 ":?å=67 6=âê;73 ":?å<77 6<X=yÄ4&'&#"5>3223267#"'3267#"'&''75>3243NJN’S`fÛ]GˆJKO)-D\NFŠIKOZq gÛZ·pN’S#(þ  :?å<76Zë323326#"'&'.#"5>323326!!yKOZq Mg3NJN’S`‚ u_GˆJKOZq Mg3NJN’S`‚u_Gˆü)!ûß²ê;73 ":?å<77 6<þ ê;73 ":?å<776<þYíXy³7R#"'&'.#"5>323326#"'&'.#"5>323326#"'&'.#"5>323326yKOZq Mg3NJN’S`‚ t_FŠIKOZq Mg3NJN’S`‚ u_GˆJKOZq Mg3NJN’S`‚u_Gˆué<73 ":?å=67 6=}ê;73 ":?å<77 6<þ ê;73 ":?å<776<X<yé"32?3632.#"#"&'!5!5XJˆG_u‚`S’NJN3gM qZOK!ûß!ûßéA<677<å?:" 37;þùììþ1ííW©yY %52% $'"51þpþ¶Z¸¹Vý(Iþ§¸¹þ©Øœåœ£åþ¶œåœ£åXyð;76767!##"'&'&'#5!!5367676323!&'&'&i1*+VÙ /J]?3hG2"ÙW,!::!,þ©Ù"2Gh3?]J/ Ùþª+*%'H@4ë50U(33!\?&ë5?H'â'H?5ë&?\!33(U05ë4@H'%X'yð!!5367676323!&'&'&!!i:!,þ©Ù"2Gh3?]J/ Ùþª+*ý¾!ûßõ'H?5ë&?\!33(U05ë4@H'%þíÿÿX'y¨'1) ÿÿXÿZy¨'1)'1ýH ÿÿXÿZy¨& '1kýH1þ—)ÿÿXÿZz¨'1l)'1þ—ýH Qý€ !!!!3#3#—éýéýþºììììí´ë²þ¿ þ¾Qý€ !5!5##:ýéý/ìììííÇëëþcþ¿AÈþ¾BX'yÛ 365&'!!5!&547!5!!%43‘44Äûßþþ!ÿð0?=00=G(Üíí?.4;ëëU.X'yƒ !!!!"264&'#"&5476X!ûß!ûß3FFfFG2ƒTUZY€¬X^í´ëâD11CCaE±RR}wWT¦||U[X'y¹!!!!2&'56X!ûß!ûßçÊ×ÚØÜÒí´ëÉ—ô— žô—X'y˜!!!!3# X!ûß!ûßÖê¢éÂwtí´ëM[ý¥*þÖX'y˜!!!!33#X!ûß!ûßÖÈtwÂé¢í´ë¨þÖ*ý¥X'y{!!!!!!%X!ûß!ûßjCdfAþûfþøþúdí´ëY2þξþ;¾3X'y !!!!33!X!ûß!ûßiÓ¡oýUí´ë þî3ý'X'y!6=Q!!!!53#5#"&4632264&#"%#3267#"&546324&#"#"3##5#535463X!ûß!ûßii3#32#6454&#"#4&#"#3>32V"ûÞ"ûÞV!Z6^b¯"%25¯'26¯¯ R28Wí´ë35uoþ² :5SNþó[5SMþò%Q//7V'x:%)!!!!#546?>54&#"5>323#V"ûÞ"ûÞJ´ 6 0*)^3@"   H H   ü<ì291Ô<ì2Ô<ì2.À990!3!!!'7#5!7!N“ü–’¢þÅ®éýmü–’¢A°þÛ1}´ëÜíþϲíÜX<yÆ !!!!!!X!ûß!ûß!ûßøìãíŠëXÿy{!5!73#!!!!'7#537!5!~ýÚ’PÛ$ˆôfZþ=e(ýlNÛ"†ñeþªÂÛëµbSëãìãí­bKíãìXÿ y‚ !!!!!!!!X!ûß!ûß!ûß!ûß‚íºíºíºíXy¨ &@H  ü<ì2291/ìÔÌ90 5!5yýãûß!ûß´ÑÑóPëNüFîîXy¨ &@H  ü<<ì291/ìÔÌ9055%!!X!ûßãý!ûß´ôþ²ëþ°óÑþ îXÿy 3!! 5!5X!ûß!ýãûß!ûßí ÑÑóPëNüFîîXÿy 3!!55%!5X!ûß!ûßã>ûßí ôþ²ëþ°óÑþ îîXþ}y#5!7!5!73!!!' 5ê’ZYþM{~¡ þ¦X²ý†¡šýãûß!ííi îií–‰ÑÑóPëNXþ}y#5!7!5!73!!!'55%ê’ZYþM{~¡ þ¦X²ý†¡‡!ûßãííi îií–‰ôþ²ëþ°óÑWÿ‘yq&%5767$'567¶þóRȳÇ}v”ÖœP¸ þ«Ä³Ç~w•ÔžÝå§»PþÊ(Fåd%Æå©þEP7(Gåe#Xÿúy%5%7%'Ðþˆbk›8ñþ¦jÄýñyšüõ¼x”ìï!:•_ú|þå¡ùÏþ¾:¥XCXmy˜55X!ûßžúþ`ìþaùXÿ<yD7%!!'7!5!7%5%yã¹k¿þåSnþKAöý¶Dµ*þøZWþOzdµ#@4¼=ôPêhó‹¼îÄLxî÷ŠëÈ"LXÿ<y@7'#5375%7%5!!'’©‰þ zÌ0üVFþdæjµeýÁG†ý'Cµ³0'üöîPóaÌuôž6LþÜvë·ÊîÄLXÿ²y¨!#"'&'.#"5>323326 5yKOZq Mg3NJN’S`‚u_GˆJýãûß!ê;73 ":?å<776<çÑÑóPëNXÿ²y¨!#"'&'.#"5>32332655%yKOZq Mg3NJN’S`‚u_Gˆü)!ûßãê;73 ":?å<776<çôþ²ëþ°óÑXÿ<yD+.7%3267#"'&'&''75>327%5%º¿þåRmþKKt`GˆJKOZq Gµ:GAFJN’SMþOyeµþŒá¹l<ôPëgó‹Ú 6ýãûß!¢ôþ²ëþ°óÑ´ÑÑóPëNXÿ yy  5 55%yýãûß!ûß!ûßã¢ÑÑóPëNïôþ²ëþ°óÑXþTy1!7%'757%57%5%77'à4¦÷PGþx0¸ý–eà4¦÷Pþ¹‰0þGkB$Þë$Þ1F¦4ôFÿ\ó}š‹ëÄþ»F¨5óF\ô|šŒëÃüt?®t?XþTy15%%''5%75%7XZuàuçþ•:¥þ &ý¦uàvèk;þZô&…ô¾vFþ‰Iës¼…ô}˜ó¿þˆFyJës»†ó}Vÿ¡wa%&'567$wþãþ«Sëþh²ìºäœçÿþ¤"/þ±þž_žD$ö#Q’_Vÿ¡wa%$Vçœäºì²þhëSþ«ÿbþ¡’Q#ö$Džþ¡bO/"Xþ[yó5%$X¦{þqþïþ±Qþ_ý€Œ•#ëpýÿþ¾O÷þíKIþëþ®÷4 &Xþ[yó%%$yýnþq{¦ûß•Œý€þ_Qþ±#yý±Bp“Rýû&þö4þ RIKXÿ2yó%%#"'&'.#"5>323326%$yKOZq Mg3NJN’S`‚u_GˆJþïþ±Qþ_ý€Œ•Žê;73 ":?å<776<TþíKIþëþ®÷4 &Xÿ2yó%%#"'&'.#"5>323326%$yKOZq Mg3NJN’S`‚u_Gˆü)•Œý€þ_Qþ±Žê;73 ":?å<776<TRýû&þö4þ RIKVÿwô67&%'&'567677\ßRN@ˆ”Eº§ªþû´ß¾²ë¶è\SiôIýRaþž¥_ÓbÃþžþ™ýÖIGE#ö"R!+þ¼Vÿwô'76?&'67&qßRN@ˆ”Eº§ª´ß¾²ë¶è\SiòIýRab¥_ÓbÃbþ™*Iý¹E#ö"R!+DXŠyx!!"3!!"'&5476?:ýÆn˜LMm:ýÇ×ƒŽŽxáš|~KM᎚ÏÙŽXŠyx2#!5!27654&#!5’ÌŽŽƒ×ýÇ:mML˜nýÆxŽÙÏšŽáMK~|šáXÿŠyy %&'&5476;3!!!"''#"T=1ŽŽÌ†c³HæþÂØýÇc³w.n˜LÂ!5šÏÙŽE¼áýÔáþþFÇš|~K XÿŠyy +'7#5!!5!232654'&'}=1ŽŽÌ†c³Hæ>Øýê9c³þ‰.n˜LA!5šÏÙŽþÿE¼á,áFü9š|~K XÿØy)%!5!!"3!!"'&5476yûßç:ýÆn˜LMm:ýÇ×ƒŽŽÆîîcáš|~KM᎚ÏÙŽXÿØy)7!!2#!5!27654&#!5X!ûß:ÌŽŽƒ×ýÇ:mML˜nýÆÆîQŽÙÏšŽáMK~|šáXÿyÖ(#"3!!!"#!!'7#537&'&5476;7ŽOn˜L!ñÆþãÕòýÇ-uý/Kµ.~Û=M=ŽŽÌ¦C³Hš|~KîáýÔáuîÄLxîž#BšÏÙŽ­EXÿyÖ(!5!27+!!'7#537!5!327654/¶ØýÊ:*'E³E/&ŽŽƒ×`-uý/Kµ.~Û-þø/ mMLL ,á³E²(–ÓÏšŽuîÄLxîuáMK~|M Xÿy)!%!'7!5!7#"'&54763!!"3!!yþ(­¸6þæØ^N×ƒŽŽÌ:ýÆn˜LNl:þß=6ÆîØ”DîuŽšÏÙŽáš|~KMá1DXÿy) 2!!'7!5!7!5!27654&#!5’ÌŽŽKh]6þ(­¸6þæØ^ýÊ:lNL˜nýÆ)ŽÙÏšR"KDîØ”DîuáMK~|šáXVy¬1°/°3±›í±›í°°Þ°2±›í±›í°/°3±›í±›í01!!!!X!üÊ6û߬ëý€ëXVy¬1°/°3±›í±›í°°Þ°2±›í±›í°/°3±›í±›í01!5!!5yûß6üʬûªë€ëXÿìy I±?°3±›í±›í° °Þ° 2±›í± ›í°°Þ°2±›í±›í°/°3°3° 3±›í±›í015!!!!!X!ûß!üÊ6ûßëë*ëþ@ëXÿìy K±?°3±›í±›í°°Þ°2±›í±›í° °Þ° 2±›í± ›í°/° 3±›í±›í±›í±›í01!5!!5!!5yûß!ûß6üÊë?üjëÀë3·Ô3?2"&'&'&547676"2767>54&'&'3!!#!5!ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:FíªþûªþüÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9þúªþýª3·Ô372"&'&'&547676"2767>54&'&'!!ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ³ýMÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9þäª3·Ô3?2"&'&'&547676"2767>54&'&'77''7ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ8x¹¹x¹¸y·¸x¸ÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9¸yº¹x¹·x·¸x¸3·Ô372"&'&'&547676"2767>54&'&''ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ±xéxÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9ý_xéx3·Ô7!!2"&'&'&547676"2767>54&'&'ÁMþ³.óÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:F/þ“XVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;93·Ô3BL2"&'&'&547676"2767>54&'&'2#"&546"32654ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:F˜7b%&'œqq—šœX>=,-?ÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9d)'%`8nš—qqœ¡>Z<=,,3·Ô!)/7?E2"&'&'&547676&'&'&'75676767'%654'ïóÑWV,+++WWÑóÑWW+++,VW:F!#¬!E:ßþÙ Öˆ :E!¬#!F: ×& ÝÓXVWih{xihWVXXVWhix{hiWVþþ9þõ  9{18@9pø 9 ö÷9 w:A92t3·Ô!;!!!!2"&'&'&547676"2767>54&'&'+{ý…{ý…ÄóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:F@ XVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;93·Ô372"&'&'&547676"2767>54&'&'!!ïóÑWV,+++WWÑóÑWW+++,VWœ£GE:;99;:EG£FF:;99;:Fþ³þMÓXVWih{xihWVXXVWhix{hiWVj9;ŒSPŒ;99;ŒPSŒ;9þäª2K¡º 3!!#!5!!!!ªþûªþüáüèªoû‘ÝþúªþýªþüåÅû‘2K¡º !!!!!³ýMåüèªoû‘תþÈüåÅû‘2K¡º 77''7!!! yææxæåxååxåüèªoû‘ixçæxæäyååxåþsüåÅû‘2K¡º !!!!!ÁMþ³3üèªoû‘/þ“ÍüåÅû‘B!!#/^ü¢íýöîýôB!!5!3 ü¢^í î úüB!#!5þRíþPîûêîB35!3!B®í°îûêîÁ·IÔì1Ôì0!!ÁMþ³þ“ávð\ !!'â*]])ñ]òò\@þä¯þ寯X'yü32?3632.#"#"&'!5XJˆG_u‚`S’NJN3gM qZOK!ûßüA<677<å?:" 37;þííXýÓy5 -5  5!5Xãý!ûß!ýãûß!ûßþÇÑÑóþ°ëþ²nÑÑóPëNüFîîXýÓy5 555%!!yûß!ýþÂ!ûßãý!ûßþÇôNëPóÑ©ôþ²ëþ°óÑþ îXy¨ %5!5!yûß!ýãûß!ôôNëPóÑõîXy¨ 7-55!Xãý!ûß!ôÑÑóþ°ëþ²ºîîXþ[yó$%$X’þ…ýZ!þkýt€¡þñþ¯O+yOþ¾ýÿpýmþ®& 4÷þ®þëIKXþ[yó$%$yýZþ…þqOþ¯þñ¡€ýtþk+ëpBý±ü KIRþ 4þö&ýûXþ ym!$67&'%'&'57&'$77ÙáIyœ±'Ȭ½ë)ÂÛþØ~ዜ®Ë°(Äßí8m0þ¬pšþ®ž[µ^°þ®äˆ¿þúþ¾D·ý¶0†A ë!F¼I lþúXþ ym!67'6?6?$Xà,uá|•¦Õ¼0Íôþéè‚áJy“À7Ù±Ñùþÿ¡Rþâ‹#0ý½( þöDà](ë3ˆý¤0Zˆ³BÇ‹ý„ÕRÖ\R\XþÜy&3#!!!!'7#537!!!>ØF©ý¡žþ =0ý|bØF©ý=þÆ„õ¡þ»&NÂëþ@ë©ëþðNÂë©–ýUÀþ@XþÜy&3!!!'7#537!5!!5!3>ØF©þ =0ý|bØF©ý=þÆ¡ýЄ ¡³&NÂüj©ëþðNÂë©ëÀëëþ@ÀXÿy5!7!!!!!!!'7XÛwý®!üÊ6þµ_H4þ%£·Hë©–ëþ@ëCfëçfXÿy!!!'7!5!7!5!!5yþµ_H4þ%£·HþÌÛwý®6üÊüjCfëçfë©ëÀëXþ½y¨" %3267#"''&#"5>327%5yýãþÃL;5GˆJKOK[_Éb43NJN’SFXHýç!´ÑÑóeâ3275%X!þV€_;5GˆJKOK[_Éb43NJN’SFXJýåã´ôþ²ë‡,þæ323267#"''yþïþ±Qþ_ý€Œ•ýk43NJN’SFX]É_;5GˆJKOK[_É¡þíKIþëþ®÷4 &ù® :?å<7Dþæ323267#"''X•Œý€þ_Qþ±{43NJN’SFX]É_;5GˆJKOK[_É¡Rýû&þö4þ RIKü :?å<7Dþæø # #hÖÁþëþëÁøýGšþf’þò>¬ 3 3hþ*ÁÁþòºþfš’>¬ # #!!hÖÁþëþëÁ ™üg¹ýGšþf¬’>¦ # #!!!!hÖÁþëþëÁ ™üg™üg¹ýGšþf¦jôþòT!#!Wü$òþÂþö¾ùœoþòÝ !#7Üþžþö>ò$øÞd¾ôþòb!3õb þÂò$þò"ùœ¾}þòÝ!73!zþ$ò> þò¾d–¯R!!3#ò½þCÜRLþ  –¦R!!3# ½þC RLþ ¯~3#!!ܽþC~þ L ¦~!!3# ½þC R¼þ Xjyƒ!#yüÍîƒíþÔGèŠ,$%%$únnƒƒþ’þ’ƒþÊÁÁ!"ÁÁýßœ„„nn‚‚þ’ýÞ 8ººýôýʸÿÿ°Ë œ°Ë!%6 !&'&"Ëû;1˜1™2ûõQ2–qàp–°`°XX°ÁV@@V¸Y  67"7Ò,›J5þPþP5J•ÈkÐÎX*7ýú7*I=ûûœÛP"2642#"''7&546÷©xt­yΞi56ØwYÎeÏ:Ö©v¬uv©o3…N˜Ö=ÎeÎXtØ#îO'+6@KV#"&46235462+32"&=#"&46;5#'54&#"3!3264&#"32654&#!#"3265§‚k——Ö˜‚—Ö——k‚‚k——Ö—‚˜Ö——k‚‚‚L65LL5‚6LM56LM56LM5ýû‚5LL56LJ—×——k‚‚k——×—˜×——k‚‚k——ט‚5LL56LLkLL5ýú‚5KK65LL65KK5Xjyƒ!3!yûßî3jþÔ Ñµœ!#!µýè¨ ýÅËÑÄœ5!#¨ ý5; ÿpµ;!!3µýXËýÅÿpÄ;)3!ýX;ý5åþ‡f477632#"&'&'&#"åjkÜbwL=.> \þ×ÐýÞàbP \†ûÐþÞàbP]ýY­"\þI\\·\\þI·þ`LLMK\y>þÞ>(ËI !!3#!#%33'¯üêÝ(³³(Èd³³&þsÈd¹üß‘þÿþÿÿýÿ4ÿ¼œ^7 hýÌ\ØØ\D?cþäcÿÑ¿!!!±þOÑZ‰øç©øWÿË¿ !!!!5!5!!–¥ü[ÅûË¥ü[¥ü[Zýï©øWþÜëTÿË¿ !!!!!!!!!Í5þË5þËþÉ¥ü[ÅûË¥ü[®þËþþ˰fý ©øWä5ÿË¿ ! 7 !!–¥þ-þ.Oƒ„þ|cû;5ü[ÒZ¦þ.Òþ|„„_øW©ü­Ãý=ÒÿÿÿË¿&£ ¼ÿË¿ #276'&"! '&'676 !%!§ápàqááqàpò¥B`™þϘ_BB_˜1™`Bü[5û;ßýú‚@@‚‚@@ûE¦I7XX7H"H7XX7IÃøW©þ¢Ë3#3#&'$%67%676'&Êff2þÎffÊffþÏ1ffþ¤á=>>=E>>áá>3þ;°ý@°;þ$Ü;°À°;þ¥ýú‚#p#3ü#‚‚#ÿÿtËD' È ¼ÿ4Ë¡ !%!!Åû­,üÔáüË5Ìmø“Æ5Aù¸ÿ4Ë¡ !!!!Ëû;ÅrüÔµ5ÌmùY5Aù¸ÿË¿ !! !–¥ü[ÅûË¥ü[¥ý#ZCoü¾©øW^pKû± þùÿË¿ !!! ;ü[5û;Åü[Ýý#Z²þ‘þ½©üµ»þµüüÿË¿ !%!!%!ÅûË¥ýe‚xþì¥ü[x‚ê©øWã‚xÆÆý x‚ÿË¿ !!'7!!'7!Ëû;Åþìx‚ýe›‚xü[ê©øçýþìx‚ýÂxþìàÿÄËÕ'3273632#'#"'$%65'&#"§ápp./þ­ÝNRR˜™2þó„Ü]PQ™˜þÏ ùp±áqp/Üþý‚@ €ªX°þ þ¶¯þáÉX°`H°>üá€å‚@!þ¢°3 33!#!3!3ÊP“þÊþ“O€J€€3þ¢ú+þ¢^Õû/ýæÿ4Ë¡ 57!!#xðñrû;ráþwÎ/úû³Kürø“müØü-Ñü‰ÿ4Ë¡ % !%!5 !53!]õõþ“Åû­áþþ‚Ý‚üä«üUþPmø“rZ[zú†ÔÿË¿ !! '!'!Åû;´x‚cý½‚xþ~¿øWþçx‚ú†‰ùwz‚xùw!þ¢°3 3!###!##ÊãþmPÊOþmâÊ€€Ê€3þ¢ú+þ¢^Õüâýæÿ4Ë¡!5 !! 3!xáþþSû;Åû­ŠÎ‰üZüKû³þ”mû»yü‰Ñÿ4Ë¡ !!!!5!#]þõýžÅû;ráüáþ~ÝñüU[ø“ûZZµú,Ôú†ÿË¿ !%!!7!!7Åýïþ‚xþ&þž‚þæx‚ê©øW‰ú†‚xpùwx‚ÿÿçÿêÕ&  »ÿËÕ !5!'!! Ëû;Åûq“i0ååêZÕû/Ãü=ÿÿÿË>& º Èÿÿçÿê÷& » ¼ÿÿÿËD& º ÈÿÿÿË¿& £ÿÿÿìZå^' *È2ÿË¿ !!!!!!!ÁMþ³Mþ³þÕ¥ü[Å'þ“þµþ‘Z‰øç©øWÿÿávð7' ½ÿ2ÿÿ-Ƥi' ½ÿ8 ¼ÿÿtËÇ' ½– ÈÿÿXÏyi' ½ÿ8aÿÿXmyi' ½ÿ8!!°Õ%!567!6!&'&'&'yKHžþ—¶ FJ97§±;íþ6L2J!/,3 4(`™é<ýµ£?å-jýooþÁ Ô  þlXÿãyð(8#"'&56776326"&'&&'&'&'&'3276y m{ø÷{d m{÷ø{cþf/ %#2J!UI*/YKX M3 +/fg/™é þº«ÁÁžå D«ÂÁœþæo}R‘ ( ép}ýI ( " ëq}}RXþ¢y3#"'#&'&#"5>323326yKO54&#">32!!!¸ þõ þõ>PZ?-\\T·`bÉeÊæD^XD&ýÓ¥ü[Åþ呚cŒNY=P+CDGF 89¼¥Lƒ\VBT= ýš‰øç©øWÓ`;#"'&5#5û%%T:NüZXÉ`ý J!!áPNÝá–þVw{  #"&'!&"2‰Ô×ÇZ6þܼl¾nn¾{þÌþèþäþÐ]^ý¸ÒSýD¸¸þ¼¸@ÿã’`3676!#"'#"'&7!2çH WlrU€¯11¯€UslW H™þ86*üýCqS³³Sq½üþÖýí6ÈÿÿÿËy& º™ƒÿN}(!5!'# '&76!2&'&#"!!32767Nü5Ë1FYPgþý’’““ZTSS?MOPL.ýå7LXGICê“*œœ,þô6[5XÑfAZ;ÿÿçÿê`& »’ÿÿÿË`& º”6ÿçŒy(7!;#"'&''&'&7676'&'"7A$ÁDRfŸQ1*5ʵjpq½ç$„A;::6GEôlý¿™¥áT =$,’œ9x™ýУ˜[[¨®RMBþ$ÁÎ !!#!#5!ÛËÝý ÝËï½íþC½í4ÿ¼œ: %+"326=7#5#"&546;54&#"5>32 7 ‘]J3,AI¥¥^9ly—s:932M‡#‡þ%‡üÜÅü§]J3,AI¥¥^9ly—s:932"326=7#5#"&546;54&#"5>32›0û;0]J3,AI¥¥^9ly—s:932ËþÙ'þÙ'þÙý‰þÙ'þÙ'þÙ•]J3,AI¥¥^9ly—s:92".33&'."#67>76#FV“ÊÞÊ“VV“ÊÞÊ“=ÏÀÁÎ m•¦•m ƒ¹&#Km þ%¹„ mK$ÞÊ“VV“ÊÞÊ“VV“‚þ–j,(Km@@mK(·þ¶ mK,þäK/,Km F^Š¢%.!4>2".7!&'."67>54hâþ<þÀV“ÊÞÊ“VV“ÊÞÊ“7@mK%(þØe` 7•¦•7  þØ(%Km@c§ùÞÊ“VV“ÊÞÊ“VV“9S•m %H¼ 6@@6 }ýÛ m•SPF^Š¢ %7'32>4.#52".uˆÐÚtþ&’FÞýð@m•¦•m@@m•SoÊ“VV“ÊÞÊ“Vnt]þ&sÙ’ÞFþUS•m@@m•¦•m@V“ÊÞÊ“VV“ÊÿË¿!!!–¥ü[ÅZ‰øç©øWèýüèm !5! þÝ º¦±­ýüêrâ0þ™ýàþpüèýü †!!è#þ݆övèþè† !&5 Îÿ侻êü«þTþþ_ðCÔêéýüém 5!Æ­±¦º ýüêp gþýýÐþüŽêÆýüé†!0éþ݆öv Šéþé† !!Æ# ÆšÿΆêüþ,ý½ð¡æ¬Uèýüèm!!! þÝþ#ýü qþÝèýü †!!è#þ݆övèþè†!! Ýý†÷±þÝ rèýüèm!!Åþ#ýüN#öÅýüè†!0èþ݆öv Šèþè†!!!Å#ý݆öŽ#ÜýêÁm !4763!!"öþæ{zÝþçf+!ýêuõŒþð0%¡þöy!4'&/32765!-9+eþæn:æ==à@ne(Á =’þïýF®½|AEuĬýHþõ˜<ÜþÁy 3!!"'&5ö!+fþíÚ}{yø¡¡%0þðŒ‰ùWÜýôöy!!öþæýô …ýêõm 4'&#!!2Û!+fþçÝz{ýê}¡%0Œõø‹ÛþÀy&'&!;!76¤<(en@à==æ:nþæe+Á!<˜ ¸ýTÄuEþåA|½ýRº’=þõy !#!!2765Û{}Úþíf+!yø©ù‰Œ0%¡åþå†!åþ †özŠŠ% !!!#!55!˜þm“w€ý “¸ý¤¤öЧ§ç™üç¿þ]]¹¹]ËÄ! !!Ëû;bcû;Å $û<øþ$—Î!3!39Wî…ü …îï½ýVªÿÿÿìå(¿ÿìþåÿ!ùþþûÿìþå !ùþ ýöÿìþå!ùþüñÿìþå!ùþûìÿìþå!ùþúçÿìþå!ùþùâÿìþå#!ùþ#øÝÿìþå(!ùþ(÷ØÿìþF(!Zþ(÷Øÿìþ§(!ºþ(÷Øÿìþ(!þ(÷Øÿìþh(!|þ(÷ØÿìþÉ(!Ýþ(÷Øÿìþ*(!>þ(÷Øÿìþ‹(3žþ(÷Øÿÿiþå(Ç} ÿìþF( #'+/3!33!33!33!33!33!3¦ ü䟟Ÿüåž ü䟟Ÿüåž ü䟟Ÿüåžþþûþûmþûþûnþûþûmþûþûnþûþûmþûþûÿìþå(%8K#!1!!!!!!!#!1!!!!!!!#!1!!!!!!!#!1!!!!!!F ?þÁ?þÁ?þÁ?þ"Ÿ>þÂ>þÂ>þÂ>þ#Ÿ>þÂ>þÂ>þÂ>þ"ž>þÂ>þÂ>þÂ>þ(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþû(þûþûþûþûþûþûþûþûÿìþå(!%)-13#3#3!3!##!#3#3#3#3#3#3#žžžžžÞŸÞŸ þ#ŸŸŸ|  þŸŸþŸŸ|  þŸŸþmÖÖþû÷Øþûþû¶þûýýŽþûýÿÿÿì#å(¼#ÿÿEþä(ÊZÿìþh!|þûìÿÿiþåÑ}ÿÿÿìh(Ñÿÿÿìþå(&Ñ&ÒÓÿÿÿìþå(&ÒÓÿÿÿìþå(&Ñ&ÓØÿÿÿìþå(&Ò&ÓØÿÿiå(Ñ}ÿÿÿìþå(&ÑØÿÿÿìþå(&Ñ&ÒØÿ±Ëw!ÅNÄû<ÿ±Ëw7!!!xáürÅ$àû®Äû<ÿ±Ëw 3!254#!") ) xäääýçärVVþªýçþªääääýèVþªýèþªÿÿÿ±Ëw&åÜÿ±Ëw !%!5!5!5!5!5!5!5!5!5!Åû­áüáüáüáüáüNÄû54&'.#"!624‚HI„347652ƒIH€637þìùúJƒ347744ƒIH‚426532ƒü©<ùÄÿìþå( 67632#"'327$%&#"!€ôzzzzõõzzzzþ’1˜™˜™2þΙ˜™˜þµùú4ŒGGýÎGGý@°XX°À°XXùÜ(÷Øÿìå( !#%&#")7632ùþΙ˜™˜þÏKü/ôzzzzõûì`°XX°þ GGÿìþå 3327$3!#"'&1˜™˜™2û›Ñõzzzzôþþ °XX°`ûìþçGG7š| %63"71˜™{yô`°X{GŒþæ7š| 2#'&#8–š2{ô{x|X°þ G7ÿ¬š 527638x{ô{þΚT{Gþ ®Z7ÿ¬š "'$33™™˜þÏ{ôy{TX°`þæŒGË|0#'&"#%632Ë¡áqpppà¡1˜™˜™2ƒA@ƒþþ_±XX±ÿ¬Ë32763#"'$§ápppqá¡þΙ˜™˜þÏþý‚@@‚þ °XX°`ÿ±ËwÅNÄû<ÿ±ËwÅNÄû<ÿ±Ëw!ÅNÄÿ±Ëw!Åvû<Ñ`/3267>54&'.#"467>32#"&'.H+(*h9;i)*,++(i::f+),H736€HIƒ256743„IH‚426úž ŸŸ?þÁŸŸ ž:ý´“II“L“IIüØÞ¸[[¸ý"¸[[ÿ±Ëw !!!!!!Åû­·þIàþIý×NÄû<š¸ü àýÖÿ±Ëw !%!!5!!!Åû­·þI)·ü NÄûDJPV\bhn27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'ê&$h%$%%34$&þ1++XSA N@`˜==Žk>P CRX++XYC P>kŽ==l?L ?Q‹ oL+ NnþùŸ;PÖ?ýüÔ; @ þË nMþÓNnä3%%%%34%&&%s==`?J >PW,,WW? K?_==‰f?H?PW,,WU?H?^‘êÒ<…›=þ¡…Ke+cLþ« mC¾†P`kÕ<—<!¤°4(0847632#"'&7327654#"&#%#&7&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ó¤=6 5N'V[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿ÃˆˆþÞ ÌþõʯX[V[X[V[!¤°4(0847632#"'&7327654#"73$3&'67&'67!««ñ󫪪«óñ««v‰ˆÀÁ‰‰þîÁÀˆ‰Ѧ=6þóþý3QNV[Sþ.U[Rê󫬬«óñ«ªª«ñ¿‰ŠŠ‰¿Ãˆˆþw Ìþð Ê'X[V[X[V[!¤°4!)47632#"'&%#$''&'6%&'6!««ñ󫪪«óñ««4>;D@KDzcngkþ?dnhkê󫬬«óñ«ªª«íþ½Iø Ökpinipi !¤°4 "*2:AIX3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==¼,Â/ý¥Å0œ#¶¨H ™8&O”6ýã þ÷|þò7iY0Âþ6.Á/¤==e6a&i1r4þîz0Ç1¹Æ2œ+ްK“Nƒ2HŒQÖ>>>>Ûf^2Æ"/Æ1]þîÓ8`1"Y 4f2y½ÿ`«1B7#5#53'&'&54767&'&=33676=3#327654'&O&"}|f‡ÌÐz¿¿‹g}}"&&"}†UQn$mQU†}"ú$nQUVV{xVVUQ<"{³±u^Å^¿À\Å _u±³{"#|± zUOOUz ±|#YOT{zQPPQz{TO‘ÿ›@>)4'&#"3276&5476327#'#53'&­`_„‡__¾‡„_`ýo‹ŠŠÅÂŠŠ‰q“ßä‡ÑÑ™k‡]^^]‡†²YYÁÃň‰‰ˆÅÃhÙgÑÓfÙ‘ÿ›@> '"3276'&'7#5373'#"'&5476j‡__¾‡„_``_ÈÑчäß“q‰ŠŠÂÅŠŠ‹q¥YXþòº]]XY†ÚfÓÒhÚhÃĈ‰‰ˆÄÃjš¼0 '&'&376&+"'&5'476%7!¢Z{z[ZZ[~\Yƒ¶¹‚ƒ‚²²WþÞm‚pþçN#ZX[þ[YZ[öþP€€·¶ƒQmþ€p#þïT²±G*Š®52764'&#"#463233#!5èsPQPPtrQPŽô­±yzgÖüLQQäQPPQr®ö{{®Ÿtú|gŽ®*#®"#53533#632#47654&#"#dd¨¨i§qq„CB’igIIuªªþ“gzy±UØr}ppDt PQsþ_C…ŽS 7"27654'&7#"&54767##53#533333#3##h. @\ ! 2(>>?ZW~>'3íûûí|íú}}úíË! -/@ /- !^'?XY??~YX?(Fþ˜}R}þ˜hþ˜h}ý®}hL……S<#5#535&'&'5'73'3#'73'676=35'73'13§|‡e{vw}wwUATwx|xxS@Wwx}vv|dˆšš|re{±Eus~~suE|VAKtrrtý¶@X{Ius~~suI­{dr|×*ú®! #!!!'!27674'&#ß_í82þ½Vý)‰3{D™#M®ÅHZûWýÏ{s{þ?zK›8€…QO##"'##565'##"/547?kM±Ã …,4N"D±F &Fi™?šJO‰ãä/FB!‰O¶ é{|êIm¬<&–§=ˆ…ÃM2227632#&547636=4'&#"#4'&#"=³` ]Á¬d¶þŽ2þ c¤B¼«†ØU›;/ÙG;SœXMâB:þ®@B Õ½þ;7h’–­f%þÐ ´»þ#>…|Ž\þ@¬¸’9‘…@O &&5 i×þC þn:Õþ^¥¦þ¨Oýžý¹ G  ýÞýÛ%½2…ŸO7236;2"'##'65##"'&5476;235&'&=476j°S c1=EÃO¬ ;ÇSC«FRÊTÊ6*F@E1°;Oº+.`„1¦62¨V âþæYiä¦8/ÀD ;8[B ¥V†RP"<B+"'##565#+"'&575477;2732;276=4'&3&'"ih;F”(wQ"D±G".FWƒC©ïNfþêBy" bO–DUq5¦½u4  P¹þˆro¬@ ³ æ|ïS`64 ¤¯'<¤þ·kn™,³:y‰!‘ªìü@JD …ÆO2367632#&5476;§_#KYo¬h«þMþ2ФEOÁL)…XY¸D<κýö6©³­f%‘…@O &47iž9þ) þ2\OýçE ýŸ[ r1† V2`g26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5m¦V^2"ÌL ­<ÆTC¬FRËUË7* 2Q±;Æ‹ XaÈ2p2@­^ DJ‚ŠF Ð,aXj™-!˜DØ2V©9/mˆ±.0­R ãþäZjæ§9/ÂC \‘ §Vþ ¯7yMó5bomœ&#·'p[?$–G¥üOQr!_ª3#"/4?23D¹-!ÈÇ]UªûFš+}{<Ž¢!/ª3#'654'&'#"547326R£ãs9×WÔ5åÈ[Sª%3;Bƒ‰[/OBC'ü*ž|<jÿ_g¥#"=4?2%#"=4?2ÙŒµ3ɧ%QMýûŽ?Ë )TK¥¿û7’(›w7ÑŸü5’s ?|ÀO"'4723!#"5472!5½ÖÀÀYAý>ÇÔÂRHIÂOûó°‡q 1 ýÓ«‘g 4ª€€D%® 3363'$6'"I+¡ˆ×ýÔ4‹ ˜p®üuàòþoS‚üþ±^£±* ¯ 3%#'#3%#¶';&þÂ2 ¯þI˜û¦Ê—Hý¼þ“‡j7*š¯(,377#'#'547#5773%%ö,ppsr,þð'zzxz'þð¯þá9…8þ 4€?þè„þ¹/9†9e5ƒ>ø:ý¹þœƒ_›þ²&*'$676#"'6767 Ì5þN@#3 J<*Ä”Ýý ýÍ$8ÿFJ,þ² SR·µ-PAd·ÌmüR›ì Gþ²a&767$7676&#""G,*PH$Å/YýÝLꊛ-;;/xL^&7)L˜5 j{•þÕþ4@ïBsåSV}ïdˆâþöÒþxaò†M>Àÿåé !7#"'&'3276767676&+7!2éÓþÜ"?bdv<78.6(yL^KL2^=bê+<Ò‹@ûÀ®`45,,! >&64pä„ná×bÿão{&"26$  6 76&"Ì@s_@s_ýxjVÛÜjþªþ%|nO TÓœ iPPsOO*=þÃýâþÃCWW ¥¹¹¥ÿÿþν_Výd,œíà 3!3-»þ~þÿ>»&ºü¼Dþ‡ð4&'&54!2.#";#"/&'&'&'32654&'úÁ=>CgÃ[9D¶ov”¸{’‡¡^„rE@G9:‰pí.#$"r|;aÔk…˜FE˜QJK~Ü))þã>?qXTS6A·…æ‰P!zGþÝxþ251QUud>[þ<Õ%;#"/&'7!!H†<ÖVTw9k¬†ÇÃ/_ýw3ò0ªF3³GþÝx´¯ôÝôWÿå«Õ$(!767#"'&7676?67676767!R ¦bm4mjjeÊ`a ./piQ 3* ( 7þõ7Dü­#Fþô8^^¥LAB\VC)*= ý%(+C" çþå’ƒ?!#!Dû&òŒþ÷¾ý-¨ƒÉ#7!!šò%ü²þ÷V¾üoßþòƒ3!!ò%þ³ P¾‘jþòƒ!73!dþ%ò þò¾Ó÷fð$!?>76&/.76$32.#"¼7þõ7 7GL+  Êe¾W4RªT\i 3IA"þåv{ =TBV\ƒL¥¼98þôFGDC+P=YNŒcšwIŒ#7337À%À¼þìмútŒút<IŒ#733üÀ$ÀY¼þ으û¨ŒútIŒ#733ÀÀ$À•¼þìh¼üÜŒútÄIŒ#733„À$ÀѼþì4¼þŒútˆIŒ!#733#HÀ%À ¼þì¼¼ÐútˆIŒ73#3d%À%ý ¼¼м¼û0Œˆ Œ73#3)$À$ý[¼¼œ¼¼üdŒˆÑŒ73#3í$À$ý—¼¼h¼¼ý˜Œˆ•Œ73#3±$À$ýÓ¼¼4¼¼þÌŒˆZŒ!73#u%À%Ýþì¼¼¼ŒútŒˆIŒ!!#œ­%þ,¼û0ˆ Œ3!!#œ¼<ñ$þ´¼Œþ̼üdˆÑŒ3!!#œ¼xñ$þx¼Œý˜¼ý˜ˆ•Œ3!!#œ¼´ñ$þ<¼Œüd¼þ̈ZŒ33!ˆ¼ïñ%Œû0¼lœ³ä 3'#'ŽYÌkg—“KäÜQoývŠoQ˜eà #'737CYÌkg—“K˜ÜQoŠývoQ¥œ+à 3#73#Gä>P¢>ä&äàþ¿êêþÄÇ¥œ+à 73 73¥>N¢ >h&ä&œAêêþ¿}ÇÇÿÿ#©D ‘ÿ~ýd¶Ô37 !7 !7 ¶1^8þ¢1^%þŽ1Ç:$Á£-Hû‰ýXûþŒåcmþûþZ Ú`!7 6!7 6!7  *6þÊ*6þÊ*N(¡‰6ØôØäØþèžaY¨þ¸¶Ëƒð 7!$ò*.þçP)jc@ýÙÐØßN1Ô þµ¶Vƒ{ 7!$ë3>þçP)jc8ýÑ^þù³N1Ô þÝÿøþVÙÕ%+73267!!!!!Â3rqÐy,%dgxþþÙ"'nqn':þönlãn…lýhÕýÇ9;þX`!>54&#"!!>32+73267!:7StyþÛ/#t0¨e€Š ˆ1ÞÒy+'dhª5:=‡ý‹ý¤\g‹L/ýSü×án„ÿÿ1L'U!}=!7!7!7!þ>"Â"þ>"Â!´´´ÓáÕ! #u fÇ!Õýqþ›e±ªÕ¶9ÔÌ1ôÌ0!lÿlÕýÕ+ÿÿ•þ\nþDÌ";!"&7#"76!7!!%&#";4 l=bê,þÄÑŒ1l{¹',Ð@Dþ×,NŸ ýÛ; 2`CýÔ„náØû+Ðì)báüÌœì28?ÿÞþ¾ÞÕ !!3!# !/×ÓîiqþÛ>háÓþùÕûÃ=û/ýºB=ûÃþâZ{ 3##67654&#"!!>32#cšcÛ8ã…:7R;:yþÛÙ% 0¨e€ŠØþþª:=HH†ý‹`¨\g‹&')ÿãÕ*2 54767.54763%"&"2676½ê±5þªþ%¸5Ê"b…”6(þV)/\ÍBÓœ BÓœ |þóœLXþñþà ŸLX»kbMBÑ@Kþ€‘¹¥G†‘¹¥GB¨@]       4 ddGe       ÔäÔôÔÄ999991/<ä2ü<Ììî2990KSXí9íííííííY"!!!!!!#737>;#"Û%9þÝþÀZÙþÛ®þÉ®þÛ®¾-¾'ÆäP+CB:þÜ-cû üáNÉá1B‹@M    4 ddG e      ÔäÔä99991/<ä2üìî2990KSXí9íííííY"3#!#737>3!!#"dº+¼®þÛ®¾-¾'ÆäôþÓþÛÂB:ÃcáüáNÉùì31ÿþæËj%!?6?>54&#">32  @7 7 ‚iubÆ¥hÖf5tÍYEJ‘s]X©ËÊýWþ5Êþåv{“iVb¦_†¥:7þôHI>9C~dN`šÙýÆûðýÆ:9îÿf!#¾AþÿÅfþˆ“;ö\@ÔÜÔÌ99991Ô<Ì20K°TX½@ÿÀ878Y@////????]]3#%3#Pë/íþ¦ë1ìöööö5îDösµÔÄ1ÔÄ0K° TX½ÿÀ@878YK° TX½ÿÀ@878YK°TX½@ÿÀ878Y@++//]]!#+þÀÏöþøsî`ø¨@ Š ŠÔÌÔÌ99991Ô<üÔ<ì99990K° TX½@ÿÀ878YK° TX½ÿÀ@878YK°TX½@ÿÀ878Y@%         ]'.#"#>3232673#"&Û1!#5 ‰ƒ`%A#5%'4 ‰‚^%@!% @8€Š) =:€ŠXÿãy} !@ <<[E ÔìÔì1äôìî04&#"32!2!"&R]U{¦aSy¦ýM ×òþ³þõ×ò¬mvþðÍjy6B‘ñÖþ½þpñÁîXö¶ÔÄ91ÔÄ0#ɲåöþøXî?ö@ ÔÄ991Ô<Ä90!#'#L\—©¤æ´öþø¡¡šîsö@ ÔÄ991ÔÄ290!373þ¤‰ª•åµî¢¢/ôwo@ ÔÌ991ÔÌÔÌ0'T%#%ôvuÆcfk>32#."Æ(Ç“”J@V˜76 c‡C:m=<=üc™k@  ÔÌÔÌ1ÔÜÄ290332673#"&5ü ROGjš(Æ“ˆ“k<7=6‡‡}uÓk·ÔÌ991ÔÌ0!!¿0þíkö´cCk!#!#&þ¯Å}þ¯ÅkþøþøOcvk#!#k”Åë“”Åëkþøþø¿ð,!!!767676767654'&#"67632I 7þõYþõ01O9!B\ÿåÿÿÿü8QÿÖ A|ÿÑÂR…´ÿÈÿÒY>“ÿ­ÿâ0ÿÑÿÌ.ÿéÿàÿÑÿå8ÿÛQlRÿ/=X-j-j-j-j-jSÿ/ÿ/ÿjÿáfÿîR=X=XÿÑÿåfÿ‹ÿç;ÿjÿáÿsÿ®ÿ/ÿ/LL=X=Xšš-j-jZˆ¤ÿÛÿø;ÿì ^ÿ/L=X=X=X=X‘ÿ¦ªÿÄžÿÁÿæ5ÿsÿsÿ­ÿôÿ…†d[ÿ°ÿðÿ¤ÿ÷Œ^x ÿäH¬B%SÿÜ-ÿÊlÿùÿÌb™Hа9ÿÓÑÿþm °+R ÿ¦ bK@ÿìU+!{ÿüÿÕ|ÿ›ÿ›ïÿ´:ÓCV•ÿäÿ”ÿ¤°ÿëÿå ÀÐQ6 7 ÿÌ<~E¼ÿ÷ÿçgÈ€~•3¯ÍâôôìÊÛäqáYe_PžÓ¦ÓM.¿Èw¾RÏyuþ¯cÄ`w<Ĉ“Às9Py¦¾R ’ÏužÞÁ;¾†³­á9ú²6od‹-ú·á@õÈôBÀˆ—ÔÞ æIb(M6­ÿîÿ­ÿs ³H¥­¼þòÃŽ{ª9 ÿ˜ÿþÝÿÿ¹þtÿÍOÿÿì¶ÿÿßÿø[ÿîÿÿÇÿçÿø=‰ÿÑ´‘[ÿqÿÍ‘5deO5ÿÂA8dˆeaOAIÿÉœpXÿþÎ,ÉHÿÄs@OX@o^þ.8‚ˆZI/ÿVUkÿâÿßP–ÿÁ[ŸFÿÛƒÿÅÿÊÿ«ƒœ¶|ÿìÿaÿƒœÿîÿæ(ÿÿì¶ÿxÿ|ÿáÿæÿæÿîÿuÿÇÿø=‰ƒ´(ÿqÿÞ•ÿ½ÿÜ|ÿ—ÿëÿ—ÿÂ/$ qÿ¶Lÿ¡4++AÿØÿé?X?ÿÛ–æÿ¦=ÿ´(ÿáÿéiÿ²FÿóLLQqZÿÁÿ˜ÿ¶(A+ÿ¦Z]t>b¶S°H¶Þÿ|ÿ¡ÿá4ÿî®%ÿ½ÿზJU‘ŽZ7e;ÿ|ÿ¡ÿî®ÿø¬,(ÿ/ÿ/ÿjÿáL[S[Sÿ|ÿ¡ÿá4ÿÑÿåÿæ+ÿæ+=X[b[bF(ÿ¦(ÿ¦(ÿ¦•(¶Þÿ—ÿ²<d=D)ZÿÏ77)ÿØÿßÿÏÿšÿçÿÙÿÀ$x7ÿçÿé!y#ÿ×M>ÿÝÿŽ1/-ÿ×!ÿßÿ¾=ÿæZìQ5Ÿ+ÿýQ FQÿýÿžÿç±ÿ.„7D \ppž67oRIp?*%O)ÿ¶XÿìÿæZÿô6NcWOH0ÿè—$ÿ×M&ÿùÿíÿ¿ -ÿùÿéÿò$ÿú?†ü™ÿ’-¹ÿäÿéÍÿì)ÿUj>$!K9$ ÿÖ#ÿÜH9ÿñ-$+ÿË# ÿî* ÿÿÿï! ~N²] ,¿ÿÚÎÍ)B*§£ÑÛóóéÿ»óÉßß á½Q$âÝ(iÑÙ&9ÚL4ÎüT4Téj\óFGêW,KÒdêêÈ€;ð¶éóå-±c>Ú Û÷Üÿ/ÿì/ÿì/ÿì/ƒ–ÿøBÿøBÿøBÿßÿÏ'CL/çfÿø;ÿø;ÿø;ÿHÿkÿø;ÿîRÿîRÿîRPéPéPM2ÿÇÿßÿÇÿßÿÇÿßÿç;ÿç;ÿç;ÿç=XÿÛÿÛšššMZZZ´¤´¤MM-B-jˬˬ)Z)Z)Z)Z)Zÿqÿ´ÿqÿ´‘ÿ¦ÿß1ÿß1ÿß1;¤Zÿ¦ç8ÿ/ÿ/ÿ/ÿ/LLL=X=Xÿåÿÿÿåÿÿÿåÿÿÿåÿÿ-jÿÈÿÒÿÈÿÒÿÈÿÒÿÈÿÒ‘ÿ¦‘ÿ¦‘ÿ¦55555555ÿÿýíþþÄþºÿÿddddddÿdÿ–ý ýHý»ý»eeeeeeeeÿ2ÿdüéýýý‰þâþâOOä HOOOÿdÿ–ý9ýMýÅýÅÿÿXXXXXXÿ¯ÿ–ý4ý\þyþyÿüóý þo@@@@@@@@ÿÃÿ¯ý4ý\þ’þœÿ‚ÿ755ddeeOOXX@@55555555ÿÿýíþþÄþºÿÿCCCCCCCCÿ2ÿdüéýýý‰þâþâ@@@@@@@@ÿÃÿ¯ý4ý\þ’þœÿ‚ÿ75555555ÿÿÿÿÿ{y CCCeCþ·ÿþ™þÝÿøäHÆOOOOOOþÕÿ RÆÿþÿþ‘‘þ…þtÿ‚s s@@@@@þäÿ¹þîÿÍÿÍ9LôôÿÅÿÅÿÅÿŤ¤¬ïÓÿ²Þ¶1ÿªa¥ê¨ê11=$ßjÿÞ/í! ! /!í! !ÄôÑcÙ ÚLLCBÿåÿêÿ±ÿÏBÿß©EÿŒÿÅ6ortt;;2ÿoJ ÿÍÿîÿ/* / BþBþBþš¤£šBB;IBþBþBBBþBþþBBBBBB9·™·™º?222B77BBøþBBøþB BB B BBBBBBþBþBþ}››}BBBBþþBþBþBBÁAÁÁÁÁÁÁÁB',ÁB BBBBBBBB!w££?ÿúÿúddcddc˜BXy111± XX¶¶¶¶’ÿÖ“”À“BJ/XXXXXXXXXXXXXXXWXXXXXXQQXXXXXXXXVVNXXXXXXXXXWXXXXXXXXXXXXVVXXXXVVXXXXXXXXXXXXXX2222BBBBÁáXXXXXXXXXXXXXXXXX9?rn’’’’ôoô}  XG¸œ#X  åC@_24!!ççÿìá-XX!XXç–@ƒç64HFFFèèèéÆéèèèèÅèÜÜÜÛåÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìÿìiÿìÿìÿìÿìEÿìiÿìÿìÿìÿìÿìiÿìÿìÛÛDDÛÛÛÛÛÛÛÛu77ÿìÿìÿìÿì7777ÿìaa¯¯"!!!!½‘‘G®CL×€‘2 ‘1r¢jD±7›GuQ uBBwÿù=ÿÇCÿÏÿø?@Àb,W’¨ßj÷w<Ĉˆˆˆˆˆˆˆˆˆˆl¥¥#¶ ¶¶ÿø;1UÓ±•nÿÞ)BBÿ9“5sXÁXš/Æü´OâƒçP-DDDDØÜðèH¤œðL€Ì Œ  Ô   P Ø4ÈDÀ P˜”´\`Ôdèà¤(È|ØøÐ¨d p!|"´#\$0$ %p&$&¸'$'”'à(L((¼) *+°,`-€.t/h0È22Ô3Ü4¬5€7”8¼94:H;l<0=h>h?˜@lAXBtClDE\EˆFÌGTGTGèHÄI¬J¤KˆKÌM(M°NÌOÔPHP„P¸QøRHRÄS0SÔT˜TäUøV˜VäVôWxX X„X¤XÄXäYàYøZZ(Z@ZX[`\@\X\p\ˆ\ \¸\Ð\è]]^ ^$^<^T^l^„^œ_``4`L`d`|`”atcc,cDc\ctcŒc¤e¸eÐeèfff0fHf`fxfg g¸gÐgèhhh0hiŒi¤i¼iÔiìjkkk4kLkdk|k”k¬kÄkÜkôl l$l<lTlll„lœl¬mìnnn4nLndn|n”n¬nÄnÜnôo o$o<oTolo„oœo´oÌp(p p¸pÐpèqqq0qHq`qxrrˆss s8sPshs¨sÀsØsðtt t8tPthu vv,vDv\vtvŒv¤vÀw,w w¸wÐwèxxx0yz¨zÀzØzð{{ {8{P{h{€{˜{°{È{à{ø||(|@|X|˜}}}4}L}d}|}”}¬}Ä}Ü}ô~ ~$~<~T~l~„~œ~´~Ì~ä~ü,h而€œP¸‚‚ˆƒƒƒ„ƒì„P„ð…(…œ† †t†Ø‡`‡ÄˆXˆ¤ˆô‰L‰¨‰üŠHЏ‹ ‹X‹Ô‹ìŒŒ|ŒàPÐŽHŽÌL\äT°‘‘X‘p‘Œ’’d’´““\“¤” ”˜• •À–8–°— —œ˜ ˜,˜H˜˜˜¨˜À˜Ø˜ð™™ ™8™P™h™ˆ™ ™À™Ø™øšš0šHšXšxšš°šÐšè›››0›H›`›x››¨›À›Ø›ðœœ œˆœ œ¸œÐœè0H`x¨ÀØðžž ž8žPžhž€ž˜ž°žÈžàžøŸŸ(Ÿ@ŸXŸpŸˆŸ Ÿ¸ d ø¡¡(¡Ä¢¢h¢€¢˜¢°¢È¢è££ £8£P£h£ˆ£ £¸£Ð¤@¤Ø¥T¥”¦4¦Ô§<§Ð¨\¨˜¨ì©Œ©ØªTªÜ«H«t«è¬L¬à­H­°®0®œ¯4¯´°4°¨±±Ä²d³³Ì´l´¼µx¶¶„¶ä·@·˜¸¸ˆ¸à¹ ¹X¹àºXº˜»4»¬¼$¼È½L½À½ô¾l¾ä¿|À(À€ÀÜÁXÁ°Â Âd¨Ã@üÄpÄÀÅ4Å„ÆÆ\Æ°Ç Ç¤È$ÈLÈŒÈÔÉÉXÉÄÊ<ÊÜË@˨Ì̈ÍÍ Î@ÎÌÏÏŒÏÌÏðÐxÐôÑpÒÒÐӜԄÕÖÖ ×h×ÀØ(ØlØäÙhÙ¼Ú$ÚlÚÄÛÛŒÜÜ<Ü|ÜŒÜìÝÝ$Ý`Ý ÞÞhÞÄß ßPß`ßß ßÈßäßøà à<àXàhàxáádâdâtâ´ã ãHãÈäädäˆä´äàå å,å<åLå\ålå|åŒå¼åÌæ$ædætæÈæØçPç`ç€çœçÈçàè$è@èlè˜è¸èÌèàéé,éPé˜éÌéðêêHêdêœêÐë ëxëàëüìdìtìì¸ííLíˆíàî îìïï,ï<ï˜ï´ïÐïìðð<ðdððèññŒñ¤ñ´ñÈò ò,òHòtò„ò”ò¬òÄòÔòìóóó4óLódó|óŒóœó¬óØóèóøôô€ôô ôÈôØôèõ$õ4õDõTõ”õ¤õ´öXöhöà÷T÷l÷„÷œ÷´÷Ì÷ä÷üøŒùùPùôúÄû0û|ûàü ü0üxüˆüØý\ýlýÐþ,þ¬ÿÿ`ÿÈLÀˆ ¸Ð茀˜°HÀ`Ô<°(8¬@À  ´  0 @ ¸ 4 ° À Ð à  X Ì , D \ t Œ$< °ÀØè`ÌPh€˜Ôä4DlÄÔ,<tŒœìü HXhxÀDTŒÜP¨dÈ8˜¨@¬Ð(8H`p¸ô0@l|Œ¸ÈTdœð$d¸ tÐì    ¨!$!4!D!\!l!è"T"¼"Ô"ì##<# $$$ $P$|$¸$ô%`%Ä&(&Œ&¤&¼''P'”'Ü((T(l(„(¼(ô))8)€)Ä**\*Ð*à*ð++ +˜,,X,¨-,-Œ-¬-Ä-Ü-ô. ..,.D.\.l.|.”.¬.Ä.Ü.ô/ //,/D/\/t/Œ/¤/¼/Ì/Ü/ô0 0$0<0T0l0„0œ0´0Ì0ä0ü101`1x11 1°1À1Ð1à1ð2l2Ä3833è4\44ä5ˆ5ü6P6t6à77ä8T99h9ì:@:ì;<;Ø<$<¤<ü=À>>d>¼?h?´@ˆ@´APAèAøB B°BØBøC@C`CØCüDŒDäElEÄFF FÐG$GÜH\H¬HÔIpJJLJ\K KtL,L<LxLÈMhMxNN”OhOäOôPHPÔQ$Q4QXQäRpR€S,S|S¬SÔT,TÀU8U´V<VôWdWÄXPX¸YPYÄZ(ZŒ[`[ð\Œ](]|]ð^„_ _Œ`D`ôa”b<b´bÐccdc|cÌd$deeXeÈff€f fìgœgÌgàh$h°iXjk k¼l”mdn n°o`p,pØqdr rØsptHtØu`v<wPxxøy”zp{{à|X}T~T~Ìt€\€‚‚¤ƒt„„Ü…|†† ‡@‡t‡Üˆ¼‰\‰œŠ„ŠÀŠü‹D‹¨ŒŒHŒ”dœÐŽ<ŽpޤŽè D€°äD”‘‘0‘|‘¸’L’ì“X”0”””ø•t•ô–¤—T—ܘ˜P˜Ì™@™°šš\šœ››L›¤›ôœxœ œ´œÈœÜœð€Üž8ž¤ŸŸ  0 ¼¡¡H¡Ø¢,¢x¢¸¢ì£4£´£ô¤P¤t¥ ¥ ¦(¦¨¦Ø§\¨¨Ð©$©ª ª˜««D«x«Ð¬D¬°­­4­L­d­|­”­¬­Ä­Ü­ü®®0®H®`®x®®¨®À®Ø®ð¯¯ ¯8¯P¯h¯„¯ ¯¸¯Ð¯è°°°0°H°`°x°°¨°À°Ø°ð±± ±8±P±h±€±˜±°±È±à±ø²²(²@²X²p²ˆ² ²¸²Ð²è³³³0³H³`³x³³¨³À³à´´´0´H´`´x´´¨´À´Ø´ðµµ µ8µPµhµ€µœµ¸µÐµè¶¶¶0¶H¶`¶x¶¶¨¶À¶Ø¶ð··(·H·`·x··¨·À·Ø·ð¸¸ ¸8¸P¸h¸€¸˜¸°¸È¸à¸ø¹¹(¹@¹X¹p¹ˆ¹ ¹¸¹Ð¹èººº0º@ºXºpºˆº ºÀºØºð»» »8»P»h»€»˜»°»È»à»ø¼¼(¼@¼X¼p¼ˆ¼ ¼¸¼Ð¼è½½½0½H½`½x½½¨½À½Ø½ð¾¾ ¾8¾P¾h¾€¾˜¾°¾È¾à¾ø¿¿(¿@¿X¿p¿ˆ¿ ¿¸¿Ð¿èÀÀÀ0ÀHÀ`ÀxÀÀ¨ÀÀÀØÀðÁÁ Á8ÁPÁhÁ€Á˜Á°ÁÈÁàÁøÂÂ(Â@ÂXÂpˆ ¸ÂÐÂèÃÃÃ0ÃHÃ`ÃxÃèÃÀÃØÃðÄÄ Ä8ÄPÄhÄ€ĘİÄÈÄàÄøÅÅ(Å@ÅXÅpňÅ ŸÅÐÅèÆÆÆ0ÆHÆ`ÆxÆƨÆÀÆØÆðÇÇ Ç8ÇPÇhÇ€ǘǰÇÈÇàÇðÈÈÈ0È@ÈXÈhÈ€ÈȨȸÈÐÈàÈøÉÉ(É@ÉXÉpɈÉ ɸÉÐÉèÊÊÊ0ÊHÊ`ÊxÊʨÊÀÊØÊðËË Ë8ËPËhË€˘˰ËÈËàËøÌÌ(Ì@ÌXÌp̈Ì ̸ÌÐÌèÍÍÍ0ÍHÍ`ÍxÍͨÍÀÍØÍðÎÎ Î8ÎPÎ`ÎxΈΘÎÄÎÔÎìÏÏÏ4ÏLÏdÏ|ÏŒϤÏ´ÏÌÏèÐÐÐ0ÐHÐ`ÐpЈРиÐÐÐèÐøÑÑ0ÑHÑ`ÑxÑÑ ѸÑÐÑèÒÒÒ0ÒHÒXÒpÒˆÒ˜Ò¨ÒÀÒØÒðÓÓ Ó8ÓHÓ`ÓpÓˆÓ˜ÓÄÓÄÓÄÓÄÓÄÓÄÓÄÓÄÓÄÓÄÓÄÓÄÓøÔÔ<ÔpÔ¤ÔØÔðÕPÕ¬ÖÖ0ÖÔ×tØØPØäÙ¼Ú Ú<ÚðÚðÜDÝtÝ”ݰÝÐÝìÞÞ(ÞlÞ°ÞÌßdßx߬ßàßüàà4àtàtááXáôâlãã(ãÜäxä¨äÄäìå$å\å´åÈåÜåðæææ,æ@æTæhæ|ææ¤æ¸æÌæàæôççç0çDçXçlç€ç”ç¨ç¼çÐçäèhé(éÈêêˆë$ë¤ì¸í˜îDî¬îÄïÌðð|ò$òäóxô ôõ<õÔööŒ÷ ÷Ìøø,ø˜øÜù€ú<ú¬ûDûðü|üÀüÐüàüðýxý˜ý¸ýØýøþþ8þXþxþ˜þ¸þØþøÿÿ@ÿtÿ¨ÿØ h˜Èø(p¸dX è0p°ì(d ðxÀ| ` ¼  8 p ¨ à  P Ô X ” ü œ<`ˆ°Ø(LpÄl´üDŒÈlàD„ÄD ü<|¼ø8xÄ`°øDˆÐ HˆÄ<”ä8˜ô`°ô8ˆì@œà$|Ì  ˆ ¼ ð!@!|!è"€"°##Ü$T$„$à%t%È&$&¸' 'T'´'à( (0(D(X(h(È)h)Ä*<++ +D+l+˜+Ø,,d,ä- -Ä-è..0.H.„.´.Ô/,/„/ä0L0´181¬2<2Ð3Ð4p5$66ˆ6Ô7888<8\8|8À99d9Ô::`: :ð;4<<¨=,=´=è>D>„>à?<?€?À@$@„@ìA@AhAÐB8B¬C C¼D`D¤DèElEØF FdF¼GGœH HŒHøI@IˆIøJhJ¼KKLLxLàM8MN NŒOTPPÔQŒR@S(TTÐU„UÔVVdV VÈVìWW8WhWœXXTX¨XàYYlYÄZPZÌ[0[”[à\,\¤]]¬^8^t^„^°^è__8_l_¬_Ð_ø``@`h``¸`àaaTada¨aèb@c$cHclcŒc¬cÌd$d|d´eetj j€j¨jÔkktkÌkälhlðmm@mtmÀn n\n¬o8o„oÈpppp¼qqTq¤q¼qôr r$r<rTrlr´rÌrässs0s¼t|tàu$uŒv$v\v°w w8w¼wÔwìxtx¤y0yÐz¸{||Œ}0}Ô~T~€~¼~ØHh Äà€€(€H€l€¤€ü4Pˆà‚‚4‚€‚¬‚Ԃ胃 ƒ<ƒXƒtƒƒ¬ƒÈƒä„„„8„T„p„Œ„ …T†D†ì‡‡‡0‡D‡X‡t‡Œ‡¨‡Ä‡Ø‡ðˆ ˆ(ˆTˆ¨ˆÀ‰‰tЍ‹0‹¸Xt ¼èŽŽ0ŽPŽ€ŽœŽÄŽà (Tpœ¸àü(Dlˆ´Ðø‘‘<‘\‘‘Ô’`’´“””Ä•x•°––X–°——l—¼—ä˜ ˜p˜ä™4™ˆ™¸™äšš<š„šÈšä›››0›Ä›ðœœDœlœ¨œô H¬ìž(žhž¨ŸŸ  € ¨ Ð ø¡$¡@¡l¡ˆ¡°¢ ¤¤Ì¥Œ¦ §8§ø¨x¨ô©€©àªDªä««ô¬d­­L­ì®°¯¯4°T°”°ð±T±´²²T²è³L³¬³è´´8´X´œ´ðµµ,µXµ€µ¨µØ¶¶8¶h· ·˜¸¸X¸”¹¹,¹X¹ÔºDº¬ºÀºè»Œ»Ø¼p¼”¼¸¼Ü½½„½°½Ü¾¾4¾\¾ˆ¾´¾à¿ ¿8¿\¿„¿¬¿Ô¿øÀ(ÀXÀˆÀ¼ÀÐÁÁ\ÁÁĈ˜ÂÄÂèÃÃ(àÃàÄPÄàÅèÆÄÆÄÆÄÆÄÆÄÇPÇpÇôÈ„ɈÊÊ0ÊpʰÊèË(Ë|ˬËÜÌÌ ÌÐÌìÍÍ$ÍlÍ”Íä ¿+k@®‰_ÀB m¶ H‹Ê  “^4 \ ¾    S :z :Ô . 4U "¦ :Ü &6 hòCopyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. DejaVu changes are in public domain DejaVu Sans MonoDejaVu Sans MonoBold ObliqueBold ObliqueDejaVu Sans Mono Bold ObliqueDejaVu Sans Mono Bold ObliqueDejaVu Sans Mono Bold ObliqueDejaVu Sans Mono Bold ObliqueVersion 2.33Version 2.33DejaVuSansMono-BoldObliqueDejaVuSansMono-BoldObliqueDejaVu fonts teamDejaVu fonts teamhttp://dejavu.sourceforge.nethttp://dejavu.sourceforge.netFonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Bitstream Vera Fonts Copyright ------------------------------ Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions: The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces. The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera". This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names. The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself. THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. http://dejavu.sourceforge.net/wiki/index.php/Licensehttp://dejavu.sourceforge.net/wiki/index.php/Licenseÿõÿ~Z ¿  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a¬£„…½–膎‹©¤ŠÚƒ“òó—ˆÃÞñžªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîºýþ    ÿ øù !"#$%&'()*+ú×,-./0123456789:âã;<=>?@ABCDEFGHI°±JKLMNOPQRSûüäåTUVWXYZ[\]^_`abcdefghi»jklmæçnopqrstuvwxyz{|}~€¦‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽØá‘’“”•–—˜™šÛÜÝàÙß›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     Ÿ !"#$%&›'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐѲ³ÒÓ¶·ÄÔ´µÅՂ‡Ö«ׯØÙÚÛÜÝÞ¾¿ßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ     ÷ !"#$%&'()*+,-./01234Œ56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸˜¹º»¨¼½¾¿ÀÁš™ïÃÄÅÆÇ¥ÈÉÊ’ËÌÍÎÏМÑÒÓÔÕÖרÙÚÛÜÝÞßàáâã§äåæçèéêëìíîïðñòóôõö÷øùúûüý”•þÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ         ¹                   ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ   ¡ ¢ £ ¤ ¥ÀÁ ¦ § ¨ © ª « ¬ ­ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À sfthyphenAmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflex Cdotaccent cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflex Gdotaccent gdotaccent Gcommaaccent gcommaaccent Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflex Kcommaaccent kcommaaccent kgreenlandicLacutelacute Lcommaaccent lcommaaccentLcaronlcaronLdotldotNacutenacute Ncommaaccent ncommaaccentNcaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracute Rcommaaccent rcommaaccentRcaronrcaronSacutesacute Scircumflex scircumflex Tcommaaccent tcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacute Oslashacute oslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217 Scommaaccent scommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3 gravecomb acutecombuni0302 tildecombuni0304uni0305uni0306uni0307uni0308 hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322 dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni037Auni037Etonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsi IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute Wdieresis wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011 figuredashuni2015 underscoredbl quotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037 exclamdbluni203Duni203Euni2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0 colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B estimatedonethird twothirdsuni2155uni2156uni2157uni2158uni2159uni215A oneeighth threeeighths fiveeighths seveneighthsuni215F arrowleftarrowup arrowright arrowdown arrowboth arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7 arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CF arrowdblleft arrowdblup arrowdblright arrowdbldown arrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF universaluni2201 existentialuni2204emptysetgradientelement notelementuni220Asuchthatuni220Cuni220Duni2213uni2215 asteriskmathuni2218uni2219uni221Buni221C proportional orthogonalangle logicaland logicalor intersectionunionuni222Cuni222D thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244 congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225F equivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281 propersubsetpropersuperset notsubsetuni2285 reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Funi2290uni2291uni2292 circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4 perpendiculardotmathuni22C6uni22CDuni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230F revlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F integraltp integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni2341uni2342uni2343uni2344uni2347uni2348uni2349uni234Buni234Cuni234Duni2350uni2352uni2353uni2354uni2357uni2358uni2359uni235Auni235Buni235Cuni235Euni235Funi2360uni2363uni2364uni2365uni2368uni2369uni236Buni236Cuni236Duni236Euni236Funi2370uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423upblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551 filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7 invbullet invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5 openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639 smileface invsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669 musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27C5uni27C6uni27E0uni27E8uni27E9uni29EBuni29FAuni29FBuni2A2Funi2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniF6C5uniFFF9uniFFFAuniFFFBuniFFFCuniFFFD dlLtcaronDieresisAcuteTildec6462Grave CircumflexCaron fractionslash uni0311.case uni0306.case uni0307.case uni030B.case uni030F.case thinquestion uni0304.caseunderbar underbar.wideunderbar.smalljotdiaeresis.symbolsEng.alt¸€@t˜þ•»”»“ú‘úG»GŽ2–Œ2‹dŠ–‰ˆ‰kˆ†…þ„ƒ „úƒ ‚Œ‚þ‚À€YŒ€€&€Y€@&~2}þ|{zG{þ{¸ÿÑ@ÿzyAzGyAxw2xkw2vþuþtúsúrþqp%olþkj j ii€hghh€gg@fþeþd:d}cbcbaba`;`2_^_^];]d\ [Z»[þZY]Z»Z€YX%Y]Y@X%WþV;V}U:U2T;T'SRSdRQ–PdOSM;M2L:L2KJ;JdIþHþGF F F@ED.EþD@ÿ.CBA»BþA@]A»A€@=%@]@@?k>=%>»=%<;4K–7 7   @6ú 2 ú  2X}X–¸d…++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++iep-3.7/iep/resources/fonts/SourceCodePro-Bold.otf0000664000175000017500000026413012271043444022407 0ustar almaralmar00000000000000OTTO€`BASE‹”±I|:CFF A÷Z½H¨ä+DSIGñÙèÃI¸ GDEF/,/Ð4\ÔGPOS%ë@d GSUBÝžò50 2OS/2tÒÕP`cmapéÔÆ >x headûNÝÅì6hheaWà$$hmtxˆúŠ,ÔˆmaxpÃPHnameI?ƒÝ°<Çpostÿ¸3Hˆ S>xì_<õèÌÝKÌÝKÿ»þpÁèØþïXÿ»ÿ—ÁPÃX¼ŠXKŠX^2    ADBE ûîÿØ`“à” "žEET#X{9È`Ú: T ` Ùy$Rv Œ —¢ Š· A _ Fg (­ rÕ $G Àk 4+ _ 2w #¶© H:_ ,:§ :Ó :é *:ÿCopyright 2010, 2012 Adobe Systems Incorporated. All Rights Reserved.Source Code ProBold1.013;ADBE;SourceCodePro-Bold;ADOBESource Code Pro BoldVersion 1.013;PS 1.000;hotconv 1.0.70;makeotf.lib2.5.5900SourceCodePro-BoldSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunthttp://www.adobe.com/typeCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.http://www.adobe.com/type/legal.htmlTypographic alternatesAlternate aAlternate gAlternate dollar signCopyright 2010, 2012 Adobe Systems Incorporated. All Rights Reserved.Source Code ProBold1.013;ADBE;SourceCodePro-Bold;ADOBESource Code Pro BoldVersion 1.013;PS 1.000;hotconv 1.0.70;makeotf.lib2.5.5900SourceCodePro-BoldSource is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Adobe Systems IncorporatedPaul D. Hunthttp://www.adobe.com/typeCopyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. http://www.adobe.com/type/legal.htmlTypographic alternatesAlternate aAlternate gAlternate dollar signø ÷æëv‰Ìêÿ ”âöáÍÎÏÐÑÒÓÔÕÖãäš™›è ŸþË !"#$%&'()*+,-./012345¡:=NXŒ•Áèçéëêîÿ   %$&(?FEGIHsrtv tzw ý kÌÕ L¡¥žœx¦§¬­¤¨RTýUé磩{¢ªôõå69”¢Vøùîïìí—ÄÛ†yòó«¬ üðñŠ8Y7[Wtuws’“‘¾¿½0ÍÔÖ×ÚØÛÙÜÎü/9@Z`z~¿ÄÑÖßäñö1Ie~€’¡°Üçë7CRTYaeoy‡Žž°³¸¼¿ÌÝã $(.1ÀCIMPRX[œ »!%+;Ico…“—žù     " & 0 3 : D q y  ‰ Ž ” ¡ ¤ § ¬ ² µ º!!! !"!&!.!T!^!“""""""""+"H"`"e%Ÿ% %³%·%½%Á%Æ%Ê&&j''Rûÿÿ 0:A[a{ ÀÅÒ×àåò÷4Lh€’ ¯Íæê7CPTXaeoy‡Œž°²·»¾ÆØá#&.1ÀCGMORV[œ »  $*6BZl€Ž’—ž      & 0 2 9 D p t } € ” ¡ ¤ ¦ « ± µ ¹!!! !"!&!.!S![!""""""""+"H"`"d%% %²%¶%¼%À%Æ%É&&j''RûÿÿÿÁÿ»ÿvÿ¿Sÿ~ÿWéÿdþ ÿLÿKÿHÿAÿ>ÿ5ÿ,ÿÿÿ ÿ¬ ÿæÿåÿÞÿ×ÿÓÿÑþäååååä»äºä³âÚâãá¿âZâ“á¹âBáªá¨á¥áÝáÛáÙáØáÐáÎáËá›àøàòàïá…áá;á5á à¥à¤àžàrà‡à}àZà@à8Þ#ÝÝÝÝÜþÜïܰÜYÛ¯Ûeª2<DJ†œªÀ4^¶¸ºØÚÜÈÊÆÐÔÜàÜÞÞÚàâäæðþ " ÐÖÚÞØØÐ´´žæëv‰Ìêÿ ”âöáãäš™›èŸþË¡çzwux ÕRô£÷ÖtžÌ¦ üÛTõ‹Œé=LNWXY[stuw䌖¡½¾¿ÁÙåkîýÿ   $%&(™?—UrstvŽš;ì<íKüOPRQSV\ ]^gZ hijko r#v'x)y*~.z01€234ƒ7‚5„6ˆ;Š=@‹>D–J—K˜L¢Vª^¬_«`°d±e³g²f¹m¸lÀuÂwÃxÄyÅz͂֋ÚÛà•â—á–£W΃>ï{+™MÆ{Ç|È}É~Êl©]´hºn^fkm×ÚØÜÔÙ`glÝßáãåçéëíïñóüýÿVXY_adhiTUmp!q"…8†9‡:‰<ŽABC­a®b¯cµi¶j»o¼pԉՊ׌ܑã˜?ð@ñAòBóCôDõEöF÷GøHùIúJû_`abcdef|,}-šN›OœPQžRŸS T¤X¥Y¦Z§[¨\Ë€ÌτЅц҇ӈØÝ’Þ“ß”úøùûìíðîïñ  ý]$%b€y¬•˜©¶Äÿµ2SourceCodePro-Bold.úöú÷úø úùúúøŒ Fü$ùUú|2b4ÜËÎÄà#*18?FMT[bipw}ˆŽ˜ž¥¬²¸¿ÅÏÖÝäëòù)06=HSZaekryƒŠ‘˜Ÿª±·½ÄÈÏÖÝäêð÷þ '.5<CJQX_dkry€‡Ž”𡍝¶¼ÇÎÕÜãêð÷þ $18?FMT[binu|ƒŠ‘—¨±·ÂÉÐ×Þäîõü %,3:AHOV]dkrxƒ‰“™ §­³ºÀÊÑØßæíôû $+18CNU\`fmt{‚‰™¤«·½ÃÇÎÕÜãêðöý $+8?FMT[bipu|ƒŠ‘˜Ÿ¥¬²¹ÀÇÍØßæíôú#*05BIPW^elsz†”›¢¨®¹ÂÈÓÚáèïõÿ ")07>ELSZahks{ˆ›¤¬³¼ÅÎ×àéòû    ( 1 4 A I U ^ f o | … • Ÿ ¨ ± ¹ Ã Í Ö Ý ä ë ò ù    % - 5 ? H Q Y c m v „ “ ž ¨ ± ¹ Á Ë Ô Ý å ï ù    * 4 = E M W ` i q { … Ž œ « ¶ À É Ñ Ù ã ì õ ý    ( 7 B L Y _ e k q w } ƒ ‰ • › ¡ § ­ ³ ¹ ¿ Å Ë Ñ × Ý ã é ï õ   # ' . 2 9 ? C J Q X _ f m w ~ ‡ “ › ¦ ¨ ° · Â Ê Ñ Ø ß è ï ö ÿ $+29@GNU\cjqx†”›¢©°·¾ÅÌÓÚáèóú )0;BMT_fqxƒŠ•œ§®¹ÀËÒÙàçîõü '2AL[fu€š©´ÃÎÝè÷+6EP_jy‚‹’™£¯¶½ÄËÒÙàçîõü &-4;BIPW^elszˆ–¤«²¹ÀÇÎÕÜãêñøÿ ")07>ELSZahov}„‹’™ §®µ¼ÃÊÑØßæíôû %,3:AHOV]dkry€‡Ž•œ£ª±¸¿ÆÍÔÛâéð÷þ !(/6=DKRY`gnu|ƒŠ‘˜Ÿ¦­´»ÂÉÐ×Þåìóú"‚ÇÛêAmacronAbreveuni01CDuni1EA0uni1EA2uni1EA4uni1EA6uni1EA8uni1EAAuni1EACuni1EAEuni1EB0uni1EB2uni1EB4uni1EB6Aogonekuni0243CacuteCcircumflexCcaronCdotaccentDcaronuni1E0Cuni1E0EDcroatEcaronEmacronEbreveEdotaccentuni1EB8uni1EBAuni1EBCuni1EBEuni1EC0uni1EC2uni1EC4uni1EC6EogonekGcircumflexGbreveGdotaccentuni0122Gcaronuni1E20uni00470303Hcircumflexuni1E24uni1E2AHbarItildeImacronuni012CIdotaccentuni01CFuni1EC8uni1ECAIogonekJcircumflexuni0136LacuteLcaronuni013BLdotuni1E36uni1E38uni1E3Auni1E42NacuteNcaronuni0145uni1E44uni1E46uni1E48Omacronuni014EOhungarumlautuni01D1uni1ECCuni1ECEuni1ED0uni1ED2uni1ED4uni1ED6uni1ED8Ohornuni1EDAuni1EDCuni1EDEuni1EE0uni1EE2uni01EARacuteRcaronuni0156uni1E5Auni1E5Cuni1E5ESacuteScircumflexuni015Euni0218uni1E60uni1E62uni1E9ETcaronuni0162uni021Auni1E6Cuni1E6EUtildeUmacronUbreveUringUhungarumlautuni01D3uni01D5uni01D7uni01D9uni01DBuni1EE4uni1EE6UogonekUhornuni1EE8uni1EEAuni1EECuni1EEEuni1EF0WgraveWacuteWcircumflexWdieresisYgraveYcircumflexuni1E8Euni1EF4uni1EF6uni1EF8ZacuteZdotaccentuni1E92uni018Famacronabreveuni01CEuni1EA1uni1EA3uni1EA5uni1EA7uni1EA9uni1EABuni1EADuni1EAFuni1EB1uni1EB3uni1EB5uni1EB7aogonekuni0180cacuteccircumflexccaroncdotaccentdcaronuni1E0Duni1E0Fdcroatecaronemacronebreveedotaccentuni1EB9uni1EBBuni1EBDuni1EBFuni1EC1uni1EC3uni1EC5uni1EC7eogonekgcircumflexgbrevegdotaccentuni0123gcaronuni1E21uni00670303hcircumflexuni1E25uni1E2Bhbaritildeimacronuni012Duni01D0uni1EC9uni1ECBiogonekiogonek.djcircumflexuni0137kgreenlandiclacutelcaronldotuni013Cuni1E37uni1E39uni1E3Buni1E43nacutencaronuni0146uni1E45uni1E47uni1E49napostropheomacronuni014Fohungarumlautuni01D2uni1ECDuni1ECFuni1ED1uni1ED3uni1ED5uni1ED7uni1ED9ohornuni1EDBuni1EDDuni1EDFuni1EE1uni1EE3uni01EBracuteuni0157rcaronuni1E5Buni1E5Duni1E5Fsacutescircumflexuni015Funi0219uni1E61uni1E63tcaronuni0163uni021Buni1E6Duni1E6Funi1E97utildeumacronubreveuringuhungarumlautuni01D4uni01D6uni01D8uni01DAuni01DCuni1EE5uni1EE7uogonekuhornuni1EE9uni1EEBuni1EEDuni1EEFuni1EF1wgravewacutewcircumflexwdieresisygraveycircumflexuni1E8Funi1EF5uni1EF7uni1EF9zacutezdotaccentuni1E93uni0237uni0250uni0251uni0252uni0259uni0261uni0265uni026Funi0279uni0287uni028Cuni028Duni028Euni029Ea.aagrave.aaacute.aacircumflex.aatilde.aadieresis.aamacron.aabreve.aaring.auni01CE.auni1EA1.auni1EA3.auni1EA5.auni1EA7.auni1EA9.auni1EAB.auni1EAD.auni1EAF.auni1EB1.auni1EB3.auni1EB5.auni1EB7.aaogonek.ag.agcircumflex.agbreve.agdotaccent.auni0123.agcaron.auni1E21.auni00670303.azero.onumone.onumtwo.onumthree.onumfour.onumfive.onumsix.onumseven.onumeight.onumnine.onumuni00ADuni2015uni2117uni2120at.caseasterisk.ahyphen.auni00AD.adollar.azero.supsone.supstwo.supsthree.supsfour.supsfive.supssix.supsseven.supseight.supsnine.supsparenleft.supsparenright.supsperiod.supscomma.supszero.subsone.substwo.substhree.subsfour.subsfive.subssix.subsseven.subseight.subsnine.subsparenleft.subsparenright.subsperiod.subscomma.subszero.dnomone.dnomtwo.dnomthree.dnomfour.dnomfive.dnomsix.dnomseven.dnomeight.dnomnine.dnomparenleft.dnomparenright.dnomperiod.dnomcomma.dnomzero.numrone.numrtwo.numrthree.numrfour.numrfive.numrsix.numrseven.numreight.numrnine.numrparenleft.numrparenright.numrperiod.numrcomma.numrordfeminine.aa.supsb.supsc.supsd.supse.supsf.supsg.supsh.supsi.supsj.supsk.supsl.supsm.supsn.supso.supsp.supsq.supsr.supss.supst.supsu.supsv.supsw.supsx.supsy.supsz.supsegrave.supseacute.supsuni0259.supsa.supag.supaEurouni0192lirauni20A6pesetadonguni20B1uni20B2uni20B5uni20B9uni20BAuni2215slash.fracuni2219lessequalgreaterequalnotequalapproxequalpiinfinityuni00B5partialdiffintegralradicaluni2206uni2126summationproductuni2113estimateduni2190arrowupuni2192arrowdownuni25A0uni25C6uni25C9uni2752triagupuni25B3uni25B6uni25B7triagdnuni25BDuni25C0uni25C1uni2610uni2611uni2713uni266Alozengeuni2032uni2033uni02BBuni02BCuni02BEuni02BFuni02C8uni02C9uni02CAuni02CBuni02CCuni0300uni0300.capuni0301uni0301.capuni0302uni0302.capuni0303uni0303.capuni0304uni0304.capuni0306uni0306.capuni0307uni0307.capuni0308uni0308.capuni0309uni0309.capuni030Auni030A.capuni030Buni030B.capuni030Cuni030C.capuni030Funi030F.capuni0312uni0313uni031Buni0323uni0324uni0326uni0327uni0327.capuni0328uni0328.capuni032Euni0331uni03080304uni03080304.capuni03080301uni03080301.capuni0308030Cuni0308030C.capuni03080300uni03080300.capuni03020301uni03020301.capuni03020300uni03020300.capuni03020309uni03020309.capuni03020303uni03020303.capuni03060301uni03060301.capuni03060300uni03060300.capuni03060309uni03060309.capuni03060303uni03060303.capuni03020306uni03020306.capuni030C.auni0326.auni00A0uni2007space.fracnbspace.fracuni2500uni2501uni2502uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250Buni250Cuni250Duni250Euni250Funi2510uni2511uni2512uni2513uni2514uni2515uni2516uni2517uni2518uni2519uni251Auni251Buni251Cuni251Duni251Euni251Funi2520uni2521uni2522uni2523uni2524uni2525uni2526uni2527uni2528uni2529uni252Auni252Buni252Cuni252Duni252Euni252Funi2530uni2531uni2532uni2533uni2534uni2535uni2536uni2537uni2538uni2539uni253Auni253Buni253Cuni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254Funi2550uni2551uni2552uni2553uni2554uni2555uni2556uni2557uni2558uni2559uni255Auni255Buni255Cuni255Duni255Euni255Funi2560uni2561uni2562uni2563uni2564uni2565uni2566uni2567uni2568uni2569uni256Auni256Buni256Cuni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Funi2580uni2581uni2582uni2583uni2584uni2585uni2586uni2587uni2588uni2589uni258Auni258Buni258Cuni258Duni258Euni258Funi2590uni2591uni2592uni2593uni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259Funi0258uni02541.000Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.Copyright 2010, 2012 Adobe Systems Incorporated. All Rights Reserved.Source Code Pro BoldSource Code Pro/H€¦Ç [¤¾óKenrŒ–³×äð?Gd‹®³Í× )-9˜àës€†É J^ezž¤­ÉÜñMajo}‚ŒÔçëòû adov}ƒœ¶¼èø    " ' 3 8 < | œ ¤ « º Ç Ì   ! ' 5 M Z n x „ » Ç Ó ß ã ü  , 0 B J U … Ž • ½ ç þ 3 8 ? C I P [  ’ ¥ ´ º Á Æ Ï ð ø  + 0 5 > O a l t € š ¸ ¾ Ø Ü ì ó ÿ ").Ic{†‹“˜£©¯´º¿ÕÜáéïý,1>ERV`jov}‚‡š°·ËÝïö27JQW`gnuy‹–¡¦¬±¸ÉÒâò ")07=APV[`nty‡›Ÿ¨±·½ÂÏÜéóúþ ".5AMYeq}‰Ž™§¯·¿ÅËÐÕÛæñüÂ÷Œû8÷ +÷.ÍÕ¡¯Ã[ãu_d^BNªÕ÷â—¦¥÷;òû-ûû)û6÷)Á˘¹©ÀΩeS ì÷/ö÷÷i÷h ÷û/û/ ûûiûiöû÷/÷G`Þ÷÷¶ÙÏ϶=ûû`8G –S÷ ÷°÷,6Óû6÷Ò¿¬½· … ¥‡¨÷ÆË÷»÷Xø‰ûBûi|ZzX~Z‡{¿{½yº8÷iû&÷küwqd{lqR~~~ ½ÝMÑåkã÷6æé÷çUÀ5«<­L¢_™³°¬¡Äôxj¸ÖèÃP<©<û!)5û,ÍSÔpßgÊs±~bdmsGRN§³Z ÀËaÊæiä÷3àÑåá6°)¥ER𩤣™É¿»wp¸Íã¬WA®3û"4L/<åaâsÛuÀzmqo{HIR¢¯R éøL÷û¹÷*÷„÷û„÷÷¯÷üB ÷@M•𤛇¡‰¯ÉÄ©„kiTp<=[Ÿ°û u2ëe÷÷H÷ÖóäD¯û æ÷+²÷a“´‘¸²ŽŽd’^“b´ûa÷.Üù û xûï‰UŠS‰S‡Ã}ÄÀ`÷I2^ûI€T}STˆŠÂ‰ÂŠÃv÷ïû* 8 í÷;p ® ^6 n2®L ^ RbeUU´hÄ + ÕøX÷û,ø(÷,÷üXû÷,ü(û, ô®ÁÁb÷, ÷6÷[XºûNûAøøŸû6û[¾[÷N÷B /Qq–¦›’”𖄤¢ˆŸ÷å¿÷¥€¤šðöû] 7ÊIïËÉ©±½ X‡·c^žY a Í÷;u÷:÷Q÷ ö (ôÀ0í@“somû'Nû Q¨^¯s‡ôÀhssgja¢q¦z‡ö Xrqicí@A é÷÷÷ ֑˨ÐÀ^®ûŽzBć¡€xyw„s† ÷:ù’“{ydt}gƒŸgb–^û/ ûûiûiöû÷/ Eü4=m`MMn¶ÙÎü%û=Ú-÷3÷2×é÷=÷ï ÷7÷¦ Ø}â„ÓÃû"÷ûÙ÷*ù û!û{ v÷/÷÷¢÷ ^ ÷LÊSÃS÷R xÀϸÀ1xÀ"¸À¸ tÀ¹ÌŽxÀºJå;÷÷1 a\ ÷Z¢ \ ÷'|€R¼€ûÚ# F ¿Tó,÷ hº»„´ÔǴưx¥\˜ð³™™ ¯ÀV¯IU[ysmµM—Ÿ£˜¡¤™€{stƒeT辡twx‚toj™šv÷}÷Þbj§ÁÀ¬§´´®oVUhob ÷(î÷ã÷(ø<ûØLï´¼™£°hÈ}qr„q^fžº÷iŒ“Ž›äYÑ&79H!’¨œ­¶œri ÷÷*÷÷÷ ñø[ñÈ÷'÷÷B÷ û÷ä÷P÷G´¥­¯¥æiÉxQVbqPJY¬ÃØ÷/÷SA¤W¤¿¼°£ºÅ«jZj{lknäû®ûd$æD÷'÷/á×ïáWºH¬ؽ«´»Æô:Ðûû1HûH³]Àf‡äIkU]=÷< ï÷; V÷÷ 4m  ˜—¡¡g“€|{„|s~–Ÿ/ûKr¨¯{·öÄÚäîSÐ-CVYMM²kÇ«¥•œ _†xiXsx“™zZº÷)÷M÷'Ü4 ì+ ÜbT–¥\÷;÷CQc¹ÝìÞ½¹½ª¦‚s¦ûDÜhpo~k,ö> hº¸„¸ØÄ¼ÈøÈ`¯I}x‰‡¸®÷ãûiø}û5¶n–˜Ÿ¤žstws÷9?™/’F‡S÷#û÷Ùû* 8ûb÷ ÜVÈûëû ÷$ë÷ kƒzu__z¡«ƒHC’¶[á ¯¥¦­®qÍhi¥p¯ û*r ø¡ø„û' Ãø÷ûÉ÷ÅøKäü^û÷©ûÆüL ©÷˜nt’_û% ‹÷÷S÷0÷:w Ó÷'÷B÷' ö÷Ì÷L „KÜ÷À÷û7ø‚û ÷FÚ÷,ïëï÷À ž¦¥¦¨Â­@ÞÉÆ³óµ3´Txqqo û\ú| _÷¦VO÷<Çûëû ÷$ë÷ Å ÚÒĨã÷]à¹ó¸÷9 u Í÷! Ú÷Òó/óè÷9 ÷Àù ûü‚û7 XÍ ÖÇ ÷û  Ë©ÏÁ ¿¸¸æ• º÷+ ˲©Ë±§}o¦ÚÛ¿\R¨9û,<û ûÍü÷'øå÷1©¾ Ÿ¯›ž‡…› ÷žžœ” ±oRIpqizyšz¦ggqp ø4û' È÷ ÷‰û+r8~ Âtyž§§ž¢ ûüÇwûý w×øì ûÀ÷Q û\ ÷D¸²¨£±¯n¥dcoqge§s³ :½÷ ÷ ¤ ±¯Ù”K VN‡ Æ If…um^]Ú öÀêŽÁ÷,÷[÷ŸøÄŸ÷[øÄ÷üÄ F÷7È `÷ ÷Àm ÷@÷™ûò ÷@ F÷Uw üˆ½û¢øVm M ÷ ÷ÄÐ÷ ø‘÷®óø T èv ÷ ør÷ ÷÷ª÷  ÷% ÷À Ä´¯ÁÁb°RSbfUU´gÃ> O¶aÄĶµÇÆ`´RR`bPêû Ýû¡rFùvÐùùûû IºXÐк¾ÍÍ\¿FF\WIø¾û§øž‡û§üžmwÉ Í÷ Ë÷Õé÷” û7v÷@÷ ÷¬÷ ÷ û¦ý ÷ vø÷ è·ÍÔü9j‡zqgh ÷ ͤ›˜œ¦«e¹·³¯Ù” +÷<÷%÷ f ÷Øö÷Ë8 ´\^]=  pfsªÝ¥™Þ!ßà;‹¡gbd<a=,>cGzž›£D@ ¦¨ŸIJœ?L_M—N&|ˆuƒ€„†‚…‡zåÃLM[¿ÈØã (/9BNdxÁ*IW`i¢«û$]gÁÌ Xe|™±½âüQ©ÁÐÜõ(5—¦·Éâ8U‰°ÂÕ8iå . T o § Ð $ ó Z l … š ¿ Ú õ   / G ` v ® É õ  4 d £ Ê ð(r™ßõ&Af‚¢äEš§µÇíÿ/IVpŽÛõ 'Zq‹¤Ää:[{²ÖùCSez¢¿Úó,HtŸÂ@¸7HYŽÉ †«ã7¿Ö설¿ÚDSˆªÄÖæø =s‚œ·ÇØ#Po´ÑëIp…šÃú!1CXlx†—¨ÁÚó  - F [ u w »!!7!]!y!­!ü" "O"¿"Ú"ÿ#+#<#K#¡#ä$$A$k$²%%>%Ÿ&L&´'''%'F'^'â'õ( (y(‹(œ(¯(Á(ü));)Q)l))Â)ò* *H*›*Á+:+P+}+¨+Ò+Ü,,,œ,»,æ-<-C-I-P-w-’-ª-Æ-Í-æ../.M.R.j.Œ.¢.·.ß/3/M/f/‘/²/þ010Q0r0§0ç11=1`1Ï1Ü1ê1ø2282O2l2|2‰2¡2º2æ33K3‰3¨44¥4¿4Û4ú5'5n5—5ö5ü666=6b6¢6Ã6Ú6ð7 7„7¨7Ä7ß8S8v8Ø8ò9 9%9J9g9‚9 9Þ: :*:c:¦:×:ô;<;c;’;¸;Ù<<\<‡<¶<æ==q=¡=´=È=Û>>*>H>f>‡>«>×??4?K?b?€?@@f@w@çAAYAœAêBCBEB‰BéC.CoC¤D DgD EEeE~E†EŽE–EÑFF4F\F¤F¬FÐFþGHG‹GÆH1HdH©HèISIÌJJ|J~J†JÔJêJÿK K KˆL"LwL‰LÁMMTM MýN.N0N„NÖNèOOoO°PP_PP‘PçPïQQQUQ QÇQÿRLR©R½RÚRÜRÞRøS&STS‡S–S¥S¹SÌSÎSÐSÒSÔSÖSØSâTTTSTŽT­TÊU.U‘U«U·UÐUåVV;V€WWBWŽWÎX?XYYqYØZ&Z`ZbZdZçZðZû[[[[#[.[7[B[J[R[Z[b[j[s[}[‰[•[œ[¤[®[¶[À[Ç[Î[Õ[Ý[å[ì[õ\.\8\?\E\š\¡\ª\±\¸\¿\Å\Ì\ù] ]A]€]¨]ø^E^j^Ú_/_U_{_”_º_¼_¾_À_Â_þ`@`f`p`¨a`asa–aÕbb@bœb¯b±béccBc˜cÓd d:d™dée9ebe{e”eäeæfSf‹ggogÉh%h¡hûisj!j„jýkRk½l?lÄm-mmæmónn n–o#ono¹pEp~pçqqkqÌrr5r7rmr¯rÀrßs s5sls¥sÓttCt}t¢t»uu¦vvxv×wwIw­wÞwÿxfxêyyAymy˜y¯yÊz zLzXzrz~z˜z±zÛz÷{!{A{œ{Ö|$|e||®|°|²|Ü}}}})}9}R}T}V}f}~}€}“}•}ª}¬}¼}Å}è~~~$~&~1~B~U~W~z~|~Œ~¡~·~À~Ð~ã~í~ù .>Lr˜Æô€€(€W€t€Ž€¤€Â€æJp•³ßð‚‚:‚`‚‹‚¯‚׃ ƒ(ƒcƒ¶ƒÌƒèƒþ„„-„<„k„’„Ä„ý……E…F…G…H…I…Y…k…y…†…°…؆†)†O†s†˜†½†Ì†Û†è†ô‡‡‡‡$‡3‡C‡R‡a‡l‡t‡}‡…‡–‡¦‡Â‡Þ‡ëˆ ˆ'ˆ3ˆBˆNˆ`ˆpˆ{ˆ•ˆ­ˆ¶ˆÉˆàˆõ‰‰‰"‰/‰8‰F‰Y‰k‰v‰ƒ‰–‰¦‰²‰Ç‰äŠŠŠ/ŠAŠPŠoДЫŠÌŠë‹‹‹/‹;‹\‹~‹™‹³‹Æ‹Û‹à‹øŒŒ%Œ;ŒSŒeŒxŒŒ›Œ¦Œ¼ŒÆŒâŒþ'>Ukˆ¢±ÆÞ÷ŽŽ6ŽVŽxޙ޷ŽÄŽö)4DQ\q…œ®ÁÌ×âíø'5CO]kvšÛ‘ˆ‘›‘¬‘»‘ő֑ã‘ý’’#’7’N’^‹æøqç®î÷àî®ø¦ù(ü¦îüøéûN÷$é÷NüûŒK²Ø´íŽ´)²>7÷×`êlÆ÷,kPa, :”øÚ÷y÷¢! ‹÷÷?ó÷)÷ß÷'÷,÷$û÷$ôß÷s÷!÷Æ÷âZ¼.œøØŸ®ÊÅ÷#°ûû`÷'û›÷)¾ЫwZZmlCYû§÷?ËôܰrRPem;>Â÷+- ‹÷8Ì÷(÷T÷+K ‹Cé÷'' v÷‘÷÷+÷÷÷'÷÷'÷‘÷…÷û…÷+÷¯÷üB ·÷,÷o÷%  ÷.Ë÷'÷F÷'l š ¤-÷ø2÷—ëÏ÷)œ‹÷ ö÷'b  v÷B÷1÷E÷$Ì÷ ÷~÷ q ‹Á÷N÷!\· l9œL>r ! v÷q÷ ÷Y÷ Õ÷'÷]÷%Õ÷'÷qæ÷÷ Ï÷-÷2û¿û!û‚÷'ûÎ÷YÝÙ´rGGeg:ûF÷ øé÷¯÷+÷p÷*÷½ø­ϵ=ûûa8GFbÞ÷÷´ÙÐ÷•üÜ„}x…w\Zšºtö²Ï÷ ÷?÷h"÷û/û0"ûûiûHÖû ÷ j%´ãB÷´¬”—¡ Ã Ñ÷'÷S÷%÷mø«ªøûôû'÷™D >×÷)÷C÷+% ÷O¤s_ š# ‹÷û ÷% šøÎp÷h÷E÷Xù û*>ûİxD}IwC‡xÓ~ÍwÒ=÷Äû0·øä)ëøÈ÷1Ï÷›­›¬›³c›jiÒû÷8ûR÷Ü÷G÷Øû2Qû}m}i{b‡w´|­|©L÷û9÷GûÑë¤' ‹÷ÃøS7 ˆ |ϼ1|"¼$ ã÷|Ó÷¼÷! í÷?÷,?îû[XvgdÙ÷@û'÷'üÄ÷Uqk”£o_Î÷+0 À ÷K÷'|º÷Œ¼û6Þ)÷½¾¦¯°Ž|–X÷ ùQû'û=>«hh Rû#)û6¼÷+é¹·Á¨¦‚s¦û]jqo~jNh·íXø1÷ Ô ð÷÷i÷'øÝùB™aX˜Rû/H1û~û…û÷ü÷'ø÷?÷û?™Ç©¦Ê±®„ªa u÷:÷Q÷ ô@(ñ€0ꀓsomû'Nû Q¨^¯s‡ñ€hssgja¢q¦z‡ô@Xrqicê€A Û ÷Uw¸H Ô Ô÷I÷‹÷Xû9÷'è? ð ûX÷øb÷Ô÷I÷‹÷Xû9÷'èc ð  Î ÷uw×÷'€ ûJûX‡ø%û'é÷b÷'.  £ «w¯÷Õ÷Õ÷ž¯÷Îw ®€Éû £ ¸¸Ó÷'Ø/ ¸€Íû _Å " öw÷Ü÷jµh¯·x·÷óí÷>ì÷-@îûVTqgcˆÜ€½û ý<÷'÷%÷Hì÷TÜrk”£oöwp ìº÷Œû6Þ)÷º¼£¬®…?û-÷'Üù<ûìX‡·bbžSû#)û6÷+é¹·Á¨¦‚s¦û]jqo~jNh·í Ñ ÷÷'¨´È| ¨T˜Æê ß÷&÷8÷&&ê÷B÷', ÷?÷=÷'xR¸ûÚ#xq‹÷øwªø®÷n÷=÷Jø„û!=û~{Y~X|W‡|¿}¾{½=÷~û(‹÷ Íwøä)  Î °ø¡°÷.¼Ýš¨›¨š§o moÄ9÷2û@÷…÷6÷“÷; _;~p|m~o‡z§w¨|§XÛû2÷5û‚• ªø°°èCpqû°$‹÷÷ž÷ÑøkR  :÷P”øÚµ nüD!  :÷P”øÚÁ ûüD!  :÷P”øÚ÷¾ù: ÷{üD!  :¾÷÷Ö÷RÖøùÛI ÷ Èû…üÍ!  :»ô ø#ùPa\ ûZ¢ \ §üB!  :Ïè÷3÷®øMùÁû®.÷®ûhüV!  :÷P”øÚ÷øùÊWâµ¼Ò“ûdü¼!  :¸÷4ùÚ¡zqpy{uty›¦¥œ¢û!ι±ÇÆ]²HH]dPO¹eÎDü?!  :÷P”øÚøùRë÷ ûÜVÈûëû ŒüD! û‘÷Iè:÷^÷X÷ÀC@  :÷5Ô÷LùG5rüs! Ù]÷ ”øÞìøçúûôGû ÞûZ~?û,ûózüDšÇœÌכМG>œJšOû.øû_ý ÷*³÷/÷Y²û/÷0û_ù Ù]÷ ”øÚìø®ù–F÷ ûíû ôû0~?û,ûózüD! Ù´Çø^êøIù‚Š ûc?û,ûózüD! Ù¯×eÖ÷+Ê÷@ÊõøúYùq…÷;öpo°Vú^eh=ƒÊö¦‘˜–œù¦§eÀõ¸±®Ù“û+ûd?û,ûózüD! û‘÷Iè:½÷ ”øÚü÷X|÷¾ù: ÷úÂýš@ ã ³™”øÚøBú3ûKû Õ³™OÕ ûcü¼! ã ³™”øÚ÷íù¼K÷ ûðû í™OÕ ûcü¼!  v÷/÷÷¢÷½– ÷lOÕ ûcü¼! ã ß÷÷8¼÷=ÍøúZ÷ ÷û°û$C’¶[áÕ Hkƒzu__z¡«ƒ‰ü¼! û‘÷Iè:½÷ ”øÚü÷Xü÷øùÊWâµ¼Ò“úûþ@ ûsê÷):øö÷y÷¢šÇ̜כМG>œJšO÷iü„}„|vy˜¤³®¸Âû_ù œ ³jx[[MO½iË®·šŸ¥‹÷¤÷—÷÷÷û÷÷Ë÷ì÷w÷›§è›ÄŸÊœÌŽûª´÷û÷+÷ ÷û ÷÷%÷üûeý ÷+ô¸÷)÷ ´û)÷°÷‹ôÑÒËâ÷)õß÷'÷0÷ û÷!ú÷{ôÑõÒ!ËÍÜ´mFF`f<IøMÁüÏ­w[VjoEVú÷Olüמ¬ÂÂ÷ &²ûûbü*@…JÖûC÷uú÷"÷É÷çZ¿.ûqÆ÷Dvø´÷Â÷+÷ õø|÷Ahkft\)GÙ÷÷ÏÚ纭xoªÜæ¶_I³8ûBûûûlûT÷û÷ rhF·€™Ö [†–Pê÷ i–™«Ò‘É«¼Ä>±÷ Â÷+- øaøˆO >±÷ Â÷+- ÷‡øÁÈÀ÷ >±÷ Â÷+- ÷öøˆÜUd >°÷.Â÷+É÷?- ÷¿ø¼¯«¸¸g«ZYgk^^¯k½‹÷8÷PÌ÷(÷T÷+K ÷ ùSÜUd T Ó÷8Ì÷(v÷Xœ÷+tK ìÃü* ûQéê÷8Ì÷(N÷¨t÷+ôK è÷Vûj¯e‹C÷Pé÷''÷M½÷ ;÷ û1‹C÷Pé÷''ø÷>û1;÷7‹C÷Pé÷''÷@½ÁÈÀ÷ ‹C÷Pé÷''÷¯÷>ÜUd ‹C»÷ ÷P 3÷Æ÷è'ö÷»µ§©³³o©abomcc§m´÷[´§©³³o©b\ ‹CÏè÷P N÷¯ø'ôáÏ÷¯èû¯‹C÷Pé÷''÷x½âµ¼Ò’;÷V ih{Ÿ¥…;D’µZã‹C¼÷.÷P †÷?è'ô÷x¼¼¯«¸¸g«ZYgk^^¯k½T ÓC÷P y÷Wx'ô÷wþ.‹C÷5Ôé÷'Úô'÷T²בʨÐÀ_®ûŽzBŇ¡€xyw„r†‹C¾÷÷P 1Ö÷SÖú'÷¶¾À·¸æ–@j„|zmg¸VöV_^0€úÖ¬’š—œ©¯^À‹C½÷7 é÷'ô'÷è÷ ßìî÷ ûôûèûP‡‹C½÷7 é÷'ô'ìø!÷‚ûîû ßôü!G‡‹C½÷´Çé÷'÷ƒé'øí˾¢Æ·g¬ûŽ}O¾‡šxz}…x‡û°,‡‹C½÷¯×eÖ÷P ÷:Ëö'н‡úu¯ö÷ û§§eÀ÷·±®Ù”Kûq†÷;öoo°Vú_eh=‚T ÓC½÷ ÷P y÷W|'÷@½ÁÈÀN` ú÷;þO.ûsê÷Cé÷'é÷é÷Ôiv^\N÷DjÕ„~„~vv—¥·³·¹÷û¹÷*÷„÷û„÷÷¯÷üB ±÷ ·÷,÷o÷% ÷{øË  ±÷ ·÷,÷o÷% ÷²øã´¼Ò“;÷V hi{Ÿ¥…;D’µZâ °÷.·÷,¼÷>‹÷ê% ü÷²ø§ûyÆ÷2÷÷÷ ÷>÷·÷,÷ õ†÷z% ü÷“üV  ±÷ ·÷,÷o÷% ÷êøˆUN÷<d  Ãè·÷,„÷¯R÷ú% ô÷%ø"÷¯èû¯ ²÷·÷,gÖ÷H÷ú% ÷ñøÀ·¸æ•Ajƒ}zmg¸UöW^^0Ö¬’š—œú©¯^À ÷.Ñ÷ Ë÷'÷F÷'l ÷H½ÀÈ: û‘÷Iè÷.÷ ÷Xƒ÷'zl ô÷þ‹ûfÛ÷+÷.÷ ÷%ÝZ÷'úl ÷ýò÷y¥¬‡9ú÷6 v÷¤÷àâ ÷:÷ ÷F÷'Îøø%ûFà÷FÖ÷dÒNÎêû'Ö,ûFÎêû'æ+N†ÎJÈüz÷'÷¤÷Fû¤÷'øzÈš ½Ú-÷LøÖš ½Ú-øùNO š ½Ú-÷?øÖÀÈ: š ¾÷÷Ö ÷( Öè-÷µø×üÈ@I è÷ š »÷) È-ô÷øÔ<š Ïè÷3÷®ûk÷(è-ðàøè÷š ½Ú-÷vøÖâµ¼Ò“:Wš ¼÷.÷k÷>û3÷(È-ð÷vøÕ‹ š ½Ú-÷­ùNNš ÷5Ô÷v÷(?õÐ-÷SøËè5T Ó÷ø(÷÷^÷Xû@÷(h-ð÷vü ‹ûsê÷÷ø(÷÷TöB÷(hÕð÷Tnv^_K÷ ‚}„}wv—¥­ ­Á¡÷,÷hû,ø(÷,÷üXû÷,ü(û,÷ø2÷½÷ —÷ø—ÁÈÀ÷ ÷:ù wÏ÷)áõœ÷pýJV ‹÷ Ñ÷ ö÷'b ÷Ž÷>û0:û ÷ ‹÷ø÷"û"÷r;wö÷'ÿ€æœb Ì÷êû"¬¤÷,ŒÑ-ÌûrûyÆ÷>÷ ö÷'Äõb ÷QýJ° ‹÷÷ ÷I÷cwö÷'ñ÷Wb ÷îüíT Ó÷ ö÷'w÷Wðb è÷uþ.T Ó÷ ãèö÷'w÷Wøb VÏ÷ ô÷ªþ¾.ûQéê÷ ö÷'N÷©ðb è÷ÿýû©-÷©‹÷ ö÷'÷’÷÷&÷b÷÷ûbû÷ û'ûèAbûÕ´ûZøI÷è÷B÷1÷E÷$Ì÷ Ÿ÷X÷ úq þ÷þ* ‹u Ñ÷ Í÷!÷N÷!^· n9žLø&÷>O ‹u Ñ÷ Í÷!÷N÷!^· n9žL÷»÷>N‹u Ò÷Í÷!DÖ÷J÷!ûÖ]· m9L÷þZ€È@I ÷ ûyÆ÷>ÁÔô“÷!­· µ9ÍL¯÷ZýJ÷QŽ ‹u Ð÷.Í÷!™÷>÷!]· m9L^÷„¼‹ T ÓÁ†÷X†÷!­· µ9ÍLª÷~þ* ûQéêÁ^÷¨^÷!­· µ9ÍLªøý­û¨-ª÷¨>±÷ r !aøß>±÷ r !÷6ùWO >±÷ r !TøßÀÈ: >²÷±÷+PÖ÷RÖP÷+ò!ÊøàìÈ@I ò÷ >¯÷ ±÷+Q÷ Å÷ Q÷+ò!ì(øÝ<>Ãè±÷+m÷®m÷+ô!èû!øñ÷>±÷ r !øßâµ¼Ò“:W>±÷ r !eøß >±÷ r !ÂùWNT ÇF ±÷+˜÷X˜÷+ô!üüî >÷)Ô±÷+÷õ’÷+ô!høÔø5÷T ]÷ Ù ì!÷ù#ÞÜî÷ ûìûçûPó¿²û÷T ]÷ Ù ì!Ü÷=ù›ûíû ßìü Gó¿²û÷T ´ÇÙ #êì!÷ùúŠ û°,ó¿²û÷T ¯×eÖ±÷+÷YÊe÷+í!û2øßó¿²ûõt¯í¦‘˜–œö¦§eÀ®Ù“Löq…÷;ípo°Võ^eh=ƒT ÇF ±÷ ±÷+˜÷X˜÷+z!TøßÀÈ: þ÷<þO* ÷!vø¹÷‹wÙ ¬ø+øŽxŒutû`8Grv–Ÿzaò‡£‰¦¨÷¶ÙϦ£~tœ÷f÷"l=½V>ªbYœRû/ ûûi.Ÿ>¯RK.œÙY¾Ôn²»|Á÷/ö÷÷iãyÓj‹÷ û ÷÷*÷÷÷û ÷ ž÷+÷÷vž÷Ýût÷"÷.÷È÷û>÷*÷ ÷û ÷÷4÷û¶û2û (ût®÷+÷1µºÍ›ü2{Ia¿÷2>Ù :÷ð÷À÷z è6ð|èË›¹²ÏQ >±÷ Ù :÷øÁ aU>±÷ Ù :÷øµ µU>÷)Ô±÷+÷õ’÷+:÷ô÷ùGø5ô¹ýz ò6ô|òË›¹²ÏQ >²÷±÷+PÖ÷RÖP÷+:÷ìøùÛI ÷ Èòû>ýhz ñ6ò|ñË›¹²ÏQ T ÇF ±÷+˜÷X˜÷+:÷üáô÷OG`Þ÷÷¶ÙÏ϶=ûû`8Gò6ô|òË›¹²ÏQ ûsê÷vø·÷±÷+¡öè÷+ø û„„~uv—¥ªž³¾¡ó¹Ññ÷F÷h ÷û/ôû/ ûûiûAÖû)÷5zümqjbWO¾iË­¸šŸ¤û÷ÃôG`Þ÷÷¶ÙÏ϶=ûüû`8G Ã ÷PÑ÷'÷S÷%øe² ûû;ªøûôû'÷™D  Ã ÷PÑ÷'÷S÷%ø ùRë÷ ûÜUÈûëû }û;ªøûôû'÷™D ûyÆ÷Sà Ñ÷'ÞôŽ÷%ü÷”+Ž HøÕÓzˆ÷p0D ÷9û‘÷Ièà Ñ÷'÷X÷%ô÷Ôm z$øóª÷p0D ÷9û‘÷Ièà ÏèÑ÷'S÷¯ûr÷X÷%zøPùÁû¯.÷¯ùûý¬+Ä´®ÁÁb±R|€$øóª÷p0D ÷9ûQé÷à Ñ÷'h÷¨Y÷%ú÷mø«ªû Ø÷û÷9û'÷™W hûQô÷¨éúû¨>±÷ ×÷)÷C÷+%÷âù÷+ >±÷ ×÷)÷C÷+%÷ ø›Ë >±÷ ×÷)÷C÷+%÷xùUN÷<d ûqÆ÷Avø·÷×÷)Äô˜÷+ô÷àø%L¢_™³°¬¡Äôxj¸ÖèÃP<©<û!)5û,ÍSÔpßgÊs±~bdmsGRN§³Z6&üÆWÕlÕ‚jI·… ´s¡i–™­ô÷šÕâìçUÀ5«ûyÆ÷2F ×÷)Ìô÷+ô%ø÷ûu÷QŽ >°÷.×÷)ˆ÷>“÷+ô%ì÷@øš§T ÇF ×÷)~÷Xƒ÷+ô%è÷CüH* ÷ ¿lvøµ÷ Ë÷+÷X÷.8Ë÷+ø:Ý¥´Æ±¤ol–@û•5œÏw­gc`{nv|x”¤tX?2œi§¾mÕ÷ÃÞöíQ¿PªÓ÷÷v;Õûû?F(û ÷O½Ús÷÷ºNûqÆ÷K÷O÷v÷(+õðø ø¤÷W÷ü®û÷Wü¤è«e?’ j–ð¶÷:ø¤÷÷v÷(-ôðsè²üÎoU¨t 2”èø¤÷÷^÷Xû@÷(èsðÕý¡‹ûQé÷÷O¤s÷hý¯_ Ñ÷ š# ÷V½_ Ñ÷ š# ø"÷>O _ Ñ÷ š# ÷I½ÀÈ: Ý ô# ÷¿¾òÈ@j„}zlh¸UW^^0ìÖ¬’™—œô÷ _ Ï÷ ÷ ;÷ Å÷ @÷"ò# ÷»êaò\ ÷Z¢ ôbnmcòc¨m´_ ãèš# êÏ÷_ Ñ÷ š# ÷€½âµ¼Ò“:W_ ÌÂáÂ÷ sÓÜÔx÷"ù# ö÷€¸Ÿ_ Ñ÷ š# ÷Z½ _ Ñ÷ š# ÷·÷>N_ Ï÷¼Ð÷ C÷#÷®#÷H÷"ø€# òê÷p÷®Ðû®ø€µû…ô€¢ø€† ùgqpiø€h¥p¯_ Ï÷ª÷ ÷ C÷Õ÷H÷"ù# ÷5÷^÷ ÷ ÷ ÷; "û¦_ Ï÷ª÷ ÷ C÷Õ÷H÷"ù# ÷»¾_ Ï÷ª÷ ÷ C÷Õ÷H÷"ù# ÷z÷Öû.÷ ÷£û.¢úgqpiùh¥p¯ûZõ¢ùcT Ç÷ø­w÷ ‚÷X‡÷"ô# è÷€þ* _ ÷IÔ÷ âõ÷"ô# ÷]²ø5ûsê÷ ÷#vù*w÷ Š÷×÷"ºË÷û1Ð,÷!‚Özz\cM÷DiÕ„‚~„~vv—¥§œ­Ø°ݲµÚ÷ø%û"ü4=l`MÚNn¶ÙÎ_ š•÷ø§ùŒ’“{yWaƒc‰ð7øÑ˜Á±ÖQ _ Ñ÷ š•÷øÁ ü÷Qo _ Ñ÷ š•÷øµ ü÷¥o _ ÷IÔ÷ âõ÷"•÷ô÷ùGú5÷©–S öјÁ±ÖQ Ý ×÷òøùÛj„}zlh¸UW^^0ëÖ¬’™—œ÷ ÈÈO ·Ñ÷ øä)÷…½ÀÈ: ·Ï÷ ÷÷ Å÷ )÷Y»<ëÑÚ' «øvëÑÚ' ÷€øîO ëÑÚ' žøvÀÈ: ëÏ÷) è' ôrøt<ëÐ÷.÷k÷>û3÷(è' ðÕøu‹ èù w÷^÷Xû@÷(è' ðÕüm* ë÷IÔ÷v÷(?õð' ²økè5ëÒ÷÷Ö ÷( Öè' ÷øwüÈ@I è÷ ‹÷÷PÃøSø8ùq÷+ ‹÷÷PÃøS÷ÎùqUN÷<d ‹÷¼÷.÷y÷>S÷–øø§T Ó÷Ãøûâ÷WpSè÷’ûêB e v÷÷ ÷X÷ îwÔ÷'÷]÷%Ô÷'÷æ÷÷ Î÷.÷2û¾û!0îû'÷'ü0÷XÝÙ´sGGeg:÷ÿ–€ÿk€÷<÷Å÷*÷_÷)ø/÷œ(dWWTe¾î„x÷w¥¥¬¢¹Ó²Qû“ûô‰zŠ{|ûgðû÷)÷)ò÷÷i÷i&÷û'7Pla^^ ÷;ˆ ~Ͼ1~"¾$ Üø=–^ ÷;ˆ ~Ͼ1~"¾$ ÷œøäû+2û;÷^ ÷;ˆ ~Ͼ1~"¾$ Sø=J7 Îæ0÷#ˆ wÏ·1w"·$ Jø>£{Í w™{«w÷ · 7 Ê÷1Ü :÷1È÷1û÷'|€Ï¼€1|€"¼€$ {ˆø:¹¬­¸·j­]]ki_^«i¹÷nº¤ \]ki_^«i¹7 ßèÜ k÷¨Q÷'}Ͻ1}"½$ zkøOz^ ÜÜ bÝ÷ÝH÷'|€Ï¼€1|€"¼€$ {õø=N ޏ@î7 ³ÂéÂÜ …ÒÝÓj÷'¾@Ï1}@–S÷ ÷°÷,6Óû6ÕÜ óõs÷'}Ͻ1}"½$ Òø,~Å_­û“ ;rÀ÷9SÝqÀ÷ ;qÀ÷ƒ÷N rÀð^ ÷LʰɈ Gë{€Ï»€1{€"»€¸ w€¹ÌŽ{@ºJå;÷÷1÷XAÊ”ÁžÍ¹d©ûŽ}M¾ˆš€xz~„y‡7 Ì÷¯×e׈ û$ÊU bø<†|¯{€÷ }@÷M {@¸±¯Ù“L}@p…÷;{€÷}€ï T Ç7 Í÷;Ü •÷Wx÷'¾€ÏÞ€1¾€"Þ€$ Sø=J¿Ëþv.^ Ó¹ v÷R U Çø³Õ{€ä÷ "û€}€ŒÚ {€÷ ^ Ó¹ v÷R o»€$ êù)!}€äû Ö\û ¼ Ú ÷ ^ ÓC÷|šëÉÜ çë‰÷'u Ïµ 1u "µ $ õø=Æ Jy f…tm^u ^Ú µ ÷ sÀ®^ ÐØ×?÷Ü jÄ÷6÷'û$Ê{@Ï»@1{@"»@$ zÀõø=›} ÷M { ¸±¯Ù“L} p…÷;zÀ÷ï T Ç7 ÍÜÜ bÝl÷WiÝH÷'¾ ÏÞ 1¾ "Þ $ ½@õø=N ޏ@î¾€ýÏ.ûfâ÷÷8v¢v÷{ãÓ÷ Ü ÷&îP÷'ž€ÏÏ1¯—Qrz`bPtž€©¢°Ì÷°÷,6Óû6«hg Sû#)û6·÷*麷À©¦‚s¦û]jqo~jNg·íøC÷¾o£÷-Ð-wûrT ÇÀ ˜÷Xq] ¾÷ü‹* ûQéÞÀ p÷¨I] º÷ûí¯÷ 4vø÷ ÏÒD÷%p ¶ø÷.jqo~jNh´æâ¹´Ã¦¦t¦÷i÷¸InÕû'vAû/®D÷/_>«hh Rû#-û0û0Þ-÷½¾¦¯°Žv–X÷ øÁÍÄ÷;ø1÷ û÷¤¾ Ä÷;ø1÷ ÄøKfÄ÷;ø1÷ û›÷¤gÄ÷;ø1÷ û6÷¤ XÊ÷1÷÷1É÷14÷ú ûf÷¡™ ]ji_^¬i¹ü÷n¹¬­¸·j­]]ki_^«i¹Xßè÷C÷¨e÷ôi û‚÷¶zÄÜ÷9Ý÷Ý\÷ú '÷¤ü x¬µ…9ú:Ž÷$XÈ÷I÷k÷WŽ÷äi '÷Ÿ.T Ç÷ôìé÷÷k÷WŽ÷ti 'ü¿.X÷>Õ÷Ëõ‡÷ä û÷“øÖË©ÏÁ^ž XÎæ0÷#ø1÷ì û£÷¥£ôÍ ìÈ·ºë–@ôd‚~uìpm¿Z ÷ôìé÷˜ø1÷ñ ûƒ÷¤åéºÌŽñ‘ å÷:SÝã÷ ÷ôìé÷˜ø1÷ñ ûƒ÷¤åéºÌŽñ‘ ã÷„÷N åðÄ÷LʰÉø1÷@ëò ûƒ÷¤åêºÌŽõ› y‡XÌ÷¯×e×øË]÷ù û‹÷£ê½ÆŽ¼Pë:÷û{¯õ¦‘˜–œú¦¡eÀö·Ûúp†÷;õ÷ù÷5 T Ç÷ôìé÷Í÷;÷k÷WŽ÷ú û›÷¤güÉþv.ûfâ÷÷ôìé÷÷Ôì‡÷ôør÷u_d^BNªÕ÷â—¦¥÷;òû-ûû)û6øû8÷ +÷.š•‹¡qtlcZO¸÷2…~sx—¥²Ÿ©äÉûÖ÷”ô˘¹©ÀΩeS3û#÷ÜöÀêŽÁ,ö&» a ÍÜueÝ÷÷û Ýw÷ ö& öXrqicí AôPž÷ܵa È÷Iu—÷Wb÷Q÷ ö& öXrqicí Aô@ž÷×B a ÷9Æu£ô°÷Q÷ ö& öXrqicí Aõ`Á÷¿°3`÷Ü÷® a ßèun÷¨:÷Q÷ ö& öXrqicí Aô@û ÷îza Îæ0÷#u÷:÷Q÷ ó(ò`0ê “somû'Nû Q¨^¯s‡ò`hssgja¢q¦z‡óXrqicê Aû,÷Ý׳”—˜¡ô ¦©V¼ò ™ô «ò ÷ ê   Û ÷UwÐ÷ ¸H ¡¼ÀÇŽÁO` èø÷÷UwÓ÷'‚÷W÷'úH ô÷þNB ûfÛ÷+Û ÷UwÓ÷'÷%ÝV÷'úH ÷þ#÷z¥¬†9ú÷6 v÷ÿ÷Ïâ ÷%¸Î÷oø‘º÷JÖÒûJÎÕû'æ@I†ÎJÍüÀ÷'÷Ë­®¥³ÁžmIûŸ÷'÷²÷YØû@UgedZ ÷…Ù–Z ø<ÐZ óÙJÔ Úæ0÷#÷ª÷'Ø? êÚ£èÍ Ø™è«Ø÷  Ô Ö÷1÷1÷1g÷'Z÷1è? ô÷1Ö; Ô ëè÷c÷¨ûa÷'è? ð÷ëzÔ ÙÜ÷Z݉÷'|Ýè? ô÷žÙN ÷$Z ÷`ÙEÔ ÷JÕ÷ª÷'9õð? ÷{Èè`èø÷Ô÷I÷‹÷Xû9÷'ô? ø ýÊî ûfâ÷$÷Ô÷I÷‹÷XûPî?÷'ò÷ªô÷ ò½ øÎ÷P* ûfâ÷$÷÷“î?÷'è÷ªð÷ è½ Ô dûX÷øb÷Ù÷;÷ª÷'c óÙJ÷:ø„w÷uw×÷'Üõ€ ûJûX‡ø%û'÷iý{V  Î ×÷'€ ûKûXˆŠ÷Yû'éÃ÷ ÷b÷'. ø÷DO ÷ øM÷rûM÷÷b÷'ÿ:€æ¸. Øø3û-¤÷-Œ÷÷ ÷/÷I÷"÷÷0÷'Ñ÷X—øÝ÷$üûÌ;÷ɯ–›¾j÷lt‡tadŸÈø•û·ø_üKÄ´¯ÁÁb°RRbfUU´gÄûyÆ÷2é÷b÷'õð. è÷œý{° T Çé÷b÷'2÷Wð. è÷ÀþN.T Çéñé÷÷¨û_÷'2÷Wô. øÒñ÷¨éû¨ò÷yû‚.ûQéÞé÷b÷'û÷©ð. èøJý°û©-÷©é÷b÷'ø“÷ls‡tbdŸÈ÷5÷(Ü÷ û(;÷~û·û÷$ûSûKû ÷Ê9ûË;÷É®–›¿û‘÷Iè£ «w¯÷ª÷Xû-÷Õ÷Í€¯÷å€w Ö€€Éû÷Ÿýì  £ í÷;¸¼Ó÷'Ü/ ¼€Íû ø%Р£ í÷;¸¼Ó÷'Ü/ ¼€Íû ÷IÙE £ îæ0÷#¸®Ó÷'Î/ ®€Íû ÓÚ£¶Í ®™¶«®÷  ûyÆ÷S£ Ó÷'ÎõŒ÷'ÚÓ÷'ê/ Ü€Íû ÷[ü®÷Q¨ƒ™´ \†•PêީϽk÷:  £ è÷IÓ÷'‰÷Xw÷'ºÓ÷'Ú/ º€Íû ´÷‡Ô* û‘÷Iè£ Ó÷'÷W€÷'ÚÓ÷'ê/ Ú€Íû Ô÷~ýB ûQé÷£ ¸ÜÓ÷'ì/ Ü€Íû øü㯠£ §÷UÍñ»÷'÷÷'®„÷¶÷ ÀÅà÷¾ï`Ç@TccNT°fÁ‘’ŒŒ’†Me^Fl®øË€Ëû ü„÷'Î÷᫨«³šnJûµ÷'÷È÷_×(®I^hbds Å " Ø÷Ú–s Å " ÷—øfs Å " O÷ÚJ_Îæ0÷#¿Ü" F÷Û£ìÍ Ü™ì«Ü÷  _Ê÷1É5÷1É÷15÷+ò" ì„÷×; _ßèÉg÷¨g÷+ô" èg÷ìz_ÍÜÉ^Ý÷Ý^÷+ò" ìñ÷ÚN ÷$_Ì÷+Å " t÷Ù’s Å " ³÷ÚET ÇM É÷X÷+ô" èñü‰‹_÷>ÕÉïõ‰÷+ô" Î÷Éø`_˜º÷+÷`÷+ã" f÷ÚåӺ̎ã‘Ë÷9SÝÇ÷ _˜º÷+÷`÷+ã" f÷ÚåӺ̎ã‘Ç÷ƒ÷N Ëð_Í÷Lʰɿ,ëî" f÷Úå޺̎í‘÷XAÊ”ÀžÍ¹e©ûŽ}M¾ˆ™÷J _Ì÷¯×e×É÷LË_÷+í" ^÷Ù†õ|¯í÷ ö÷M î·Ûöp†÷;í÷õï T Ç‚º÷+÷X÷+ú" O÷ÚJôÉþv* ÷÷¸÷Å ø÷Éyvu5iOGsw“˜{h̆‰Ÿ¡á­ÇÏ£ž„~›÷GõT¶^U¥b[˜Zûû,û9B£P°`]SÂa·Àq´»}½÷÷ê÷9ÔsÆe·÷û÷ îåê÷ û÷—÷÷ ï÷÷w÷$÷ŒáŸÃµ¯ŸS55wSgawÃáûû9Ü,ñư¦½¨Z¨ºo¿´¾œ©±·Yéyquƒq\k­Ï€÷r¡š¦÷T÷(Z`lTp¿sc­Rw%7,û9÷òºoБ¤«­±–]T_¿9÷ð÷Àö^è5 ðƒ ès ¿9÷ø© rüg^ô5 øƒ ôs ¿9÷øø÷¤üg^ô5 øƒ ô_÷>ÕÉïõ‰÷+9÷ô÷øÁø`ô¹ü^ò5 ôƒ ò_Îæeå¿9÷Üø ùbì«Ü÷ ìN_]*ÖÜ« ìÍ ÜÈ·ºë—û?ü÷^Ú5 ܃ ÚT ÇM É÷XŽ÷+9÷è÷Ám ôŠ÷G^ò5 ôƒ òûfâ÷vø#÷ É›îä÷+÷jû t¨­»¡ó¹ÑÑ÷÷9û êûôûû ,û9û+ñ.÷ }üswldYô{øá­ÂÏÏ­T55iTGGiÂáj øÐûyÆ÷SÑ ÷÷':õÔ´ä| ÔTÌÆÒ¾ü®÷Q©ƒ˜xti‚[†–PêÝ÷H j ÷5ÙEû‘÷IèÑ ô÷XûM÷'Ò´â| ÒTÊÆÔâý* èø÷wŸw÷èô÷XûM÷'M÷¨Õ´å| ÕTÍÆÔ€àë÷¨èû¨Öþ>* ûQé÷Ñ ÷÷'Ô´ä| ÔTÌÆ÷uüã¯ê Í÷;ß÷&÷8÷&&÷óøÝfê Í÷;ß÷&÷8÷&&ªø6Þê Í÷;ß÷&÷8÷&&÷ø6÷® ûqÆ÷+÷4vø.÷ß÷&Èô‰÷&ºø£øL¬WA®3û"4L/<åaâsÚÛuÀzmqo{HIR¢¯RI/¼ÃfØlÚ„jJ¸… ´s¡i–š­º÷šÌÊÚá6°)¥ER𩤣™É¿»wp¸ûyÆ÷2ê ß÷&Äô÷&t&ø÷-ûZnU“2”ê È÷Iß÷&|÷W{÷&ô&è÷Uø1B T Çê ß÷&v÷X€÷&ô&è÷Pü-* ÷*¤‡vøé÷È÷'Ó÷?÷a÷:È÷'øzϤ¶Á¬Ÿpi<>On;™û÷/‰?qzzqpp“ŸlZZ'™s¸²~Â÷ÇÔæ<÷%û/Í:¾È©êáOÞûû-A-ûê¿Û÷B÷'ÿB€ÿZ€, ÷«÷;£÷-÷ûqÆ÷+÷2vø÷÷B÷'«ôØø2€¿Ž¹—±–qõnkƒeCk¨Ö÷B÷f÷ûf÷û xûû…û÷ûC¼ûµ:÷wiF¸… Ü´s¡i–ûyÆ÷2ê÷B÷'¦õð, ø÷3ü;V T Çê÷B÷'Y÷Wð, è÷VýB ûQéÞê÷B÷'0÷¨ð, è÷àüp¯ê÷k÷1Ù÷1N÷'r÷1è, ôy÷Þ÷ ÷n÷ h í÷;p|R¼ûÚ#|qû“øÒ¾ h í÷;p|R¼ûÚ#|qC¡ h í÷;p|R¼ûÚ#|qüøÒgh îæ0÷#pnR®ûÚ#nqü$øÓ£vÍ nȶºë—@vd‚~unpl¿[ h ê÷1É÷'&÷1È÷1"÷'yR¹ûÚ#uqûæøÏ÷z÷ní h ÷èp|R¼ûÚ#|qüøäzh íÜÉ÷'NÝ÷ÝJ÷'yR¹ûÚ#uqûyøÒv x¬µ…9u:Ž÷$h ÓÂéÂÉ÷'qÓÜÓm=z€qûyø¸{θ³ÉÉ^³HH]cMz€M¹cÎ{Ò¡xooyxuh ì÷+p|R¼ûÚ#|qû÷øÑåë÷+÷1ñû+åë÷+÷1h í÷;p|R¼ûÚ#|qû·øÒ h ê÷ÉÐÉ÷'A÷&÷©&÷=÷'|@R¼@ûÚ#z@qûÜøÏ”|€÷Z” yû‚÷M÷©Ðû©< z€qû½ùué÷÷ûûû©”}÷Z” < z€qû·ùu÷á÷(]Q‡\Å(¼û©”}÷Z” < |€qû‰ùäû÷ûé{ªû:” ûZ”÷—÷We÷'ºRÚûÚ#ºq¼ûbû‘.h ÷^ÕÉ÷'àõu÷'zRºûÚ#zqûøÁ|×Ç^ž ûfâ÷÷-v¢÷- ÷îP÷'RÍûÚ_iq~fTz©Í÷³û'ûÆû»>÷ÎÒ¿¬½·®—BqyacP€—¥©¡®ÍŸ÷?÷=÷'z÷tøøðƒ¸ZûÚ#xqøVtÁ›¶°ÌQ h í÷;pz÷|øW¡ z÷B©ƒ¼ZûÚ#|qøVzÁ›¶°ÌQ h í÷;pz÷|ø ÷z÷t©ƒ¼ZûÚ#|qøVzÁ›¶°ÌQ h ÷^ÕÉ÷'Þõw÷'z÷z÷—øÁ}`÷‰€ƒºZûÚ#zqøVyÁ›¶°ÌQ h îæeåpz÷nøùbv«n÷ vN_]*Ön« vÍ mÈ·ºë—§ûƒ®ZûÚ#nqøVmÁ›¶°ÌQ ÷Œ÷Xo÷'z÷µ÷Èm ÷Mù8ƒÚZûÚ#ºqøV¹Á›¶°ÌQ ‹÷ Í÷0 øä) ÷£Ù¾ ‹÷ Í÷0 øä) øZ÷‰f‹÷ Í÷0 øä) ÷ÙØ ‹÷ Íwê÷1÷÷1È÷1) ÷PÖ÷÷n™ ]ji_^¬i¹• í÷;ªø°¸èCxqû¸$÷Qùö2÷;û+• í÷;ªø°¸èCxqû¸$øùÁf• í÷;ªø°¸èCxqû¸$¿ùJ• ê÷1÷ ÷1É÷1¼èC|qû¼$ôù; • è÷Iªø°ûþ÷X¸èCxqû¸$´÷jù* û‰÷Iû÷6vù÷-?îûYZvgc×÷Bû'þ ÷'÷Ù÷]«ª©™©˧^2%^_Vrj”£pûX÷øb÷÷ª÷'c ÷ Óã÷÷wÓ÷'÷N÷!Üø¶÷ûìÞLÍ'KMmeY‡Ü€Ãû û°û,àC÷àÚ§²ÏWìoS\x[Hi¦¸†÷™çÃ÷ìû!`clû&ƒÝ¦®±Ÿ·µ¦|k÷#÷K÷'¬ \6 l2¬L 8 ÷¬ø&÷Œ+^_Upm”£p÷]¬¥¨˜­É«^,÷+•÷+?îûRTpggˆ\€¾û ü„÷œ—ÁŽ`³¼t¸¬÷óí÷@_ø÷+ø©÷Œ÷9ûêû+8Bod`Ï0¦´±—µÚÁT55OT5Zb¡¤iO.YÄÕtÑ÷0÷ê÷9XÁ÷øµ÷Œ÷6û íûû14$ûqp÷â@|SmB^d—¡_[3gÃÕuÍ÷.÷ ë÷8ûúÁð±Í²mK—÷ëìò÷Â÷÷d÷)Â÷xûÜ$÷/÷÷ î÷5÷6"íû2IBxgR¼/¡´¸˜¸Ò¸lC˜û㉇pq÷k÷dH‚`nRIj²ÄHû7v÷@÷øwÇ÷'÷B÷'ø¤ø„û'ûßihqycUx©Í÷³û'ûÆû½>÷ÖÁ¯±²ƒ,û+÷'h «÷Õ÷Õ÷|øÍø„û¼ûãk}{xxšª÷åûûãk~}{xwƒšª÷åûûð(´NÐî°·V—ªo¶Å©¬´ž|–M÷Ÿw÷+Î ÷å÷'˜øxø„û'û–X2aKkNfw•l˜mû~¨¢„·ÚÔ³Û¼Ž8—û÷ ‹ê÷«÷'ø>÷¶÷Sâû2KU}~_¥!•¨«“±Ó«n@ûBûfû÷fû÷ ž÷÷÷û vø÷ªø®øø„û=ûJü„÷!Ù÷~›½˜¾š¿šW™X›YÙû~÷( vÍ÷ øäø–ø„û;pû9G‡a‡g‡…À…º„¹o÷9û>>ü„÷©÷z’¼»’½’Y“[”Z¬û8òª÷8•º’½‘½Ž’YŽ[’Z©ûz÷$ vøé÷w¨ø°Ðøøã°¦÷БusnûRGû[û`ü÷Ô÷iš¼œ¾˜¼›W›Y\Þûi÷&ûkøw¸²›¨©Á˜–‰‡˜û7v÷aÎ ø ÷'ø ø„û'ûACû÷Wû3÷_û¸ûPû`÷5÷J÷Yü÷' ÷Ô÷Lû0÷‹wÔ÷'÷2÷_ûB÷'Ê€ÔøƒI†ª€Ë¦€¦÷ª€“ug•bûZ5"÷âüž÷'ø„û'³Ó÷•Q`eUU¶eÅÆ¶±ÁÁ`±P÷ )v¬÷ð÷w«wØ÷'÷=÷'4ÀØøƒI†,ÀË)À¦÷ŒÀ“ug•bûZ5"øü1‰‚‡‹†|•ªJÀø½û'ü·'­Ið­£’›÷#÷K÷'¬ \6 l2¬L *÷…÷Ú–*ø<øf*ó÷Úg8 îæ0÷#p § W6 g2§L Wë÷Û£[Í Wȶºë—@[«Wpl¿[ 8 ê÷1ÉC÷1È÷1û ÷'¬€ \€6 l€2¬€L [÷1÷׺¤ \]ki_^«i¹÷oí 8 ÷èÉu÷¨D÷'­ ]6 m2­L Z÷÷ìz8 íÜÉkÝ÷Ý;÷'¬€ \€6 l€2¬€L [¯ 8 ÓÂéÂÉŽÓÜÓ^÷'®@ ^@6 n@2®@L ]€÷Ÿ÷Àθ³ÉÉ^³HG^cMM¸cÏ÷E ¡xooyxu*÷a÷Ú T Ç÷#Ÿ÷Wk÷'Õ ­6 µ2ÕL ®÷¡ü‰.8 ÷^ÕÉ÷ôg÷'­ ]6 m2­L ÷{÷É^×Ê©ÏÁ_ž 8 í¥º÷+÷K÷'¨À XÀ6 hÀ2¨ÀL XÀ÷÷ÚæTÀºÌŽXÀ‘ RÀ÷9SÞQÀé÷ û8 í¥º÷+÷K÷'¨À XÀ6 hÀ2¨ÀL XÀ÷÷ÚæTÀºÌŽXÀ‘ QÀ÷„÷N RÀð8 í÷LʰÉp Së«€ [€6 k€2«€L [€÷÷ÚæW€ºÌŽ[@› x‡8 ì÷¯×e×p ûË«€ [€6 k€2«€L ]€÷ ÷Ùë½ÆŽ¼Pë:÷û{¯[€¦‘—–œ]@§¡e¿[@¸Û]@p…€z[€÷]€÷5 T ÇC í÷ Ÿ÷Wk÷'Ö€ ®€6 ¶€2Ö€L ®€ó÷Úg¯ÊþvB 8 íÓ¹ v÷ p ­€ ]€6 m€2­€L ]€÷pøPÕ[€ä÷ "€û€]€Ý[€C޶Hé8 íÓ¹ v÷ p ­€ ]€6 m€2­€L [€÷“øÆ"]€äû Õ]û ÝC޶Hé8 íÓC÷|šëÉÉñë|÷'¥  U 6 e 2¥ L U ÷Ÿ÷ÚÆ IY f…um^U ]Ú C޶HéSÀh÷Ê“ÁŸÌºd¨û}M¾‡šxy…x‡8 íÐØ×?÷ÉtÃ÷*÷'ûË«@ [@6 k@2«@L ZÀ÷Ÿ÷Úè¶ÃÊFq…xs_^x£¥…FL޵Séû&÷&ʦ‘—–œ] §¡e¿[ ¸Û] p…€zZÀ÷÷5 T ÇC íÜÉkÝm÷WiÝ;÷'Ö ® 6 ¶ 2Ö L ­@¯ ®€ŒýÏB ûfâ÷÷ 2v¢ô÷#îP÷'Ê€÷Z÷Žé¹·Á¨¦‚s¦û]jqo~jNh·íû+‰û6ß)÷Ç»Á¦¯¯Ž§˜VpyacPOº÷2‚}…~uw—¥–€©¡®ÍŸø„ûš€2Ê€L HG û'øOÞZíܺ÷)iÝ÷Ý?÷'Ü€4 ì€+ Ü€bT–¥\÷;÷CQc¹Ýì€Þ½¹½ª¦‚s¦ûDÜ€hpo~kÛšøOµZè÷Iº÷)›÷Wq1 ÞšøJB Z÷Yƺ÷)§ô¿1 ß½ø2°G ]øO÷® Z÷èº÷)r÷¨I1 ÚûøazZîæ0÷#º÷)÷M÷'×4 ç+ ×bT–¥\÷;÷CQc¹ÝçÞ½¹½ª¦‚s¦ûD×hpo~kû/øPÖ³”—˜¡Û§¨V¼×™Û«×÷ N_]*€÷øgì¢÷?÷ ß÷è÷6÷K¦–£¡®[¶^¹c|vvƒuVg­¼ظ÷˸§¤©–wlbonfp¥„¤£÷‰ûQxYsa`®a³k´ȻʾÞåPÅ)(M=.bš[¦XèSbZW5'Ô5÷ÔÆ£²¼ºl¹v¸€®÷ o‘m™j µÏ¨ÔŸÚ÷÷$÷,÷÷÷ ÷ ÷k÷l*÷û'û'*ûûlûkìû ÷'øµʽ[û9û9YVLLYÀ÷9÷9½»Êû³µ¬©¹¹j©aajm]]¬mµ‹÷ ø÷' ø˜÷)ü÷J‹÷ø,÷# û+j]‡‡g÷÷÷÷ö÷0Ûû)LiHIÚ<÷S M0ûûûJû-÷ ÷:ó÷/÷÷ÿ÷'û÷'èµÙ÷G Î÷ ÝM¿; ðר¸¹Í÷+Êð q_X]iû#è÷)¶hS[YpFQT¦°a v÷,÷÷Š÷÷é÷÷E÷œë÷¡¯¥¯ ¯‰cˆPc ÷m;øûFûü&÷Æû,÷÷,Û÷ ÷Yòó÷ÿi€÷ÿ•€÷'¹Ø÷AÜ÷!÷&Éû kt‡€n–÷ ÷š÷üzûÕ÷@iKJXiCO[§®a÷EÇ÷÷k÷÷ÎíYZ«ð|¸²´œ°ñpJC]lX÷røm´`F®1û û ûûs÷/÷÷õÜ÷÷6Éû[Or_^÷)‘ξÙµ¶vs¦ vø“÷÷U÷(÷U÷(—÷Œ¤÷ ÷5÷Fåüqû÷Óûû;`ûûhD÷ ÷ó÷W÷+÷êRe¦ÌÓºª½½¼k'›]dbzfûpûªc·Ðgå÷ ÷ö÷÷U:ûûáM÷ºÇ¥·¹û*…GX>a_ £q÷÷ ÷,õ÷÷ ÷÷W÷V*òû'û'*$ûVûWìû÷'ø}ʽ`û!û"YZLLY¼÷"÷!½¶Êû–µ¬©¹¸jªaajl^]¬mµ‹÷ ÷Ê÷' ø_÷)ûÊ÷J‹÷÷ó÷# ûj]‡‡g÷ áäâì÷0Ûû)LiIIÚ;÷S L@û 'ûNû 1÷ „v÷bó÷9÷÷ÿ÷'û÷'tµ´÷G Ñ÷áM½;¡xש¸¼Ð÷+Íð n_S]gû#´÷)¶iOUYmFQT§°aÞ÷÷—÷÷é÷÷E÷Wì÷)¢¯£° °‰bˆQbû ÷m;øûFûü&÷Æû5÷÷5Û1÷ ƒv÷„ò÷÷ÿi€÷ÿ•€÷'|¹Š¼÷Aß÷&÷!&Èû ktˆn–÷÷š÷üzûÝ÷@jEDXfCO[¨®a÷EÈ÷÷l÷÷ÏíYZ«ï{¹²´œ°ıpJC\lY÷røm´_F®1û û ûûs÷/÷÷õÜ÷÷5Éû\Oq_]÷*‘Ͼض¶vs¥ø[÷÷U÷(÷U=÷(–÷•¥÷÷5÷Jåüqû÷Óûû@aû#ûnD1÷ ÷ó÷k÷+÷Re®ÒÙºª½À¾hû˜Zd`yfûpû«b·Ðhå÷ ÷÷÷’÷U9ûû!áF÷¹Ç¤¸ºû.€IZAa_¡£q÷ ôòûmøDûa÷a÷Ì÷  ÷oûm÷µÓæ÷`¿ ÷ã÷ øA±ûØò•÷aë÷÷L÷|#÷ `÷À÷Ëк¿ÍÌ\¿FF\WJIºWÐ:ü¤÷µÓæ÷¿ ÷TŠ÷L¤÷L¤÷LŠßU°aÂïµÁÁgµSTfaU÷eU°a°µÁÁfµTTfaU÷eU¯aðµÁÁfµTSgaU÷^ûIvà ÷÷“ëŸ÷®P÷û&û küSï÷Æ÷^‹wà ÷ð÷…+wû®P†û÷&†÷ «øSÇ`µRR`aOP¶bÄĶ´Æ÷^ûIvøÓ÷ ÷N÷\m÷!h÷n÷“÷÷÷7œ÷÷1Àû‡ À’‘Œ“†Le^Fk¤øZ÷C÷}÷ ¤øZ÷T÷}÷TÛ¤øZµø‡÷i¤Ÿ øIû.Ÿ ¤øZÆø‡ÆÛ÷û@§ § Þ ßÞ ß÷€÷ ÷ö±ð÷Ö÷÷Ü÷ÀðèÒÐççDÐ..DF//ÒFèû8÷ÇøtÇUûøt÷ûGú&÷I÷øûGÝÌû ÷X÷ ÷2÷2¾÷ ÷ ÷9Ìûû:û.ûPûPÜû.÷ûûGú&÷¼÷÷dûG÷÷Ü÷.÷P÷P:÷.û÷9J÷ û¾û û2û2Xû û ûû,ÙùTÙ÷]÷÷]û,÷»ÙûKùT÷KÙû»û,ÙùTÙ÷³÷ôA=÷»ùðû»=÷JýT÷Tõ÷,r÷è÷}ûÅi÷ØÙb8x™ÃÁ»È×n¨D—Ò—¨¨×Ɔ¾ÀÞ™Þ´Ù>ûQiûE•dMðhnfû‰5è÷‰¨fhLfD÷T÷‡÷r÷,ðôA=Ø÷Å­÷Ò€°Ê®¨°÷èáðûn°®É–²Ñ÷Q­û>=´Ýž}SV‡XP?§nÓ‡Con?N[USx}9û4ùúÕøXø¢ùZûûÝýú÷÷D ûŽëú|+û4ùúÕøXø'û4÷ûÝùú÷V÷D ÷ÌëøJ+ü¶üZëøZæøoÿþ€æ÷Læ÷÷ ÷û Ë·+÷0÷,ÐtÒû5a~÷E=~ûEû5µtD÷,F+û0øFÿm€÷÷…;÷ ‚øš÷5ƒÊ “ÿX€ÿk€÷„ÿk€÷äß÷5”‚ûA÷ ‚÷A÷5‚÷ û5”÷‚÷÷5Ê —‚û”ûû5—7÷ˆvøÙ÷Ò÷D÷Û÷L÷r÷W÷壘Ÿ£™ÚdévLpys|=µ+ŸÊ÷µ÷´«aL¬>jûIL1i–pu´Ymk[YûP÷’=rxybce¬jr7@´R¸ØpÔ÷ÎÏ媂¤} jÁ«©¶Å÷Iû¥‘Ò¤™¯¯²vpªù w»÷¬¿÷&ø;÷&ùpû&WaûûTû<û-÷<÷³‚ÈÖá÷máÚÇžËÃõ÷¤Ëž÷ÙxÊû Ô?ï·¯œ¤ª\Ï}x{r_p¶ÏƦº¼ž™‚|šÂȦpj¡W09@û ‚È÷F×÷ ÚæÇžËéóØðÅË÷E÷óæ£ÞÒ¸îëG­5ûóûZ÷ œ² {d_xwbû«žx÷˼÷³Á¶À¼ðÁÊžÈÂÁ÷¿÷Ë÷ãß÷ ÷ 3ßûû27û û ä7÷¼7OÇèèÇÇßßÇO..OO7:ÃÅǨ©OÇaØ£––Ÿ¢¸i \2Å*Á Ÿ•}|~vø=áÉò4âÍë÷ß÷+ß¼÷§÷þßë€÷ŽÁû(ÅÜ× ¼vÒié$ûeûÎë÷wÙâû‘4Ú÷òÓŽáÉòMÔ’á½ã·ß÷+ߟö÷òغ½À¼u¢cbŸs–€˜—”•Ÿ¢¡}}¡¯·ÈŸ¡odaA`]UX¨rª|µv£•‡{}„xou› tYOj°®{·÷<—ßëo€÷ŽÁû(Å× vÒié$û'ä÷&ëøã÷@ ø#÷Höû,û7ûû û£û¤÷(û÷? tdi|Oû$î÷d÷pñâéäµIA{û,x*^÷S°¤–XÙû}÷·­ èš/uut}njw©räãê÷Üä÷@ øR÷ Iíû&û8û#$û‰û{÷(û÷? sdi}Oû$Û÷=÷U÷ÐèÞµZT„û,w*_÷S¯¤–YÙû}÷¸­ è™0uut|njwž¨ v÷Oé÷éÑød÷à¢÷OòuûOà¢÷Oêé7˜÷æé<÷>#÷>0-Ú}û6-Õìé˜÷ó}û÷«øEÿþ€æ÷[÷«ð÷ðûË·:÷÷ÄtÓû!l~÷,=~û,û!ªtC÷R:ûÏ Ï ­÷ ÷î÷ Þ÷ ÷<÷!÷ã÷ެ}¢|toqz[b÷”k—v˜ž©¤›·â{Ÿƒž¡}Ôßl©g¤^š¥÷3•rû‡‡‹‡û5I&)âbÝlvûi–j›g K'²kÀs¿~oû+â§÷)÷-ß×îí1¶8¨ø@Ú»ø@e ù ï÷øL¹øLâ÷+áâøL ø@ÚËÂÆÂøj@ø‰õøËkø@ÀøjKø@ÚÊËõ øn ù-¨ øL ø@Ï÷Z  ø£2 ø@Ì ù G÷óå øòx ÷óçøòyøDÐ ø„¨øMæ÷Êy ûJÚ»ûJe µï÷û>¹û>â÷+áâû> ûJÚËÂÆÂû @ûõ`kûJÀû KûJÚÊËõ $n ¨ û> ûJÏ÷Z  82 ûJÌ µGû—å ‡x û—ç‡yûFÐ û¨û=æûÀy Ú»e ÷hï÷¹‹â÷+á÷?÷˜ûò ÷?÷˜âÐ/´²³÷C eÉS¢œŸ—¨š{r iKU9UÚËÂÆÂ©@Èõ÷kÀ©KÚÊ˾Ú÷6ëàé÷ÇÎyu”®„˜™š‘›£™€ww}u÷÷l£mgœ`ûS<1)ÂFêÓÀ½ÉÈd¬Nkq€yv¸Ÿ®¾£‚}œ÷u¨  Ï÷Z  â2 Ì ÷hG2å ÷:x 2ç÷:yƒÐ èŒæûy ÷ÌÙ»÷ÌàÊÍòòLÊ66LL$$ÊIàÙrt¢ÏТ¤¤¢yFGttrø¬î÷÷jwv‚X…KÜ÷Øá÷,àâ÷ØÐ÷™á.µ²³·¹ÎW÷ÉT¡›Ÿ˜ž¨šzr iKV8U÷ÌÙËÃÅÂ÷õiº»„´ÔǴŰx¥\˜ð³™™ °ÀV®IUá eS辡€sxxtoj™švøÍ÷Ê÷Õé÷”øV¬Ç­ÉŽ…'º û û[W÷4OéǾ÷ÌÙÓĨâ÷]à¹ó¸÷9÷õiº¸„¸ØÄ»ÉøÈ`¯I}xˆ‡¸¯÷âûiø}û5¶o•˜‘Ÿ¤žrtws÷9÷ÌÙËÊõ øyu•¯ƒ–š›’š£˜€wv~u÷÷l¤ng›_ R<2(ÃGéÓÀ¼ÊÈd«Okqzv·ž­¾£žƒ}œø¸¨ ÷Ø÷ÀôšÌ×áÂûœ4 ÷&Sõ÷>ø<ûØLﲸ˜§®bÌxvq¯Á­®¿œœ…~œ»Ë¡sg›^)3Kû©÷ø< ÂJà«­œ¢£“kßøb$ûŽZ ut™¦÷ÙÍÊÆÚBøÜÇÜ÷•òøù\”oi”d"^R@‚A‡>ÕûŒò÷Œ÷Üû”¬Ÿ³¤£†„ž÷ËÇÙ²ÊãÖNÐ÷àDì.Ýôæ`íô@÷n÷q–‘”𔉗™‰£³¯ ‡xvg{XZk–£6{PÌsá÷Ù¼ÑÆZ£3ñ€Oe{’œ•”’‡œ™ˆ˜ÚÇ­Øš…›„”ÌÖû{wŽwò€@Gc;ežm¥z‰ñ€r{{svošzž€ˆô@izyuqê€÷1÷qrv›®¬ ¤¥¡yjhu{q¥ k¿@[hstsÇ÷#øÜ¸÷÷©÷û ó÷=ø÷ûŒó÷ÝûyàØ÷Ü÷»Ü¸÷÷÷û òè÷1ø÷ûy]|w^{xŽ—rmB~¦ª²÷­ÒÛ÷ÆûyðØ÷˜÷ÝûÝøb÷4ó`÷4÷˜óܸ· Üû÷û÷U÷÷ûûû‰÷–#÷Ý÷ÇÜ÷Žó÷JùÏû8±Tå° “©zÛ„y~‡~lw—³÷äû@÷˜÷å3ã÷í·Û¶î¸÷÷˜íx÷oŸ““•–—ƒyûsÛ÷oŸ“”•––ƒyûsî÷zÌoµ]esrn€®ƒvžnewtq~‰ƒ´=¥ j¿AZisqoˆ„µ6÷ß÷Eß÷.ó÷ö÷’÷²u¤¥©ÕÐÌ÷ïYÎ8hhyup‰„«6üUóê÷ Ì©÷ø< ÂJà©«šŸ¢‡Z)òøU:ƒiˆ¨pq˜¦øŽæ÷jó÷j÷˜ó÷<Ť²Ÿ­¤˜ˆ… Ÿá“y{‘n\^qUnˆƒÓ5÷×÷TØ÷:òãò÷%÷¿p³ÇwÂóúÇÇN¢U›b–h”ž𙓭«¨z§ºÈ i]¡R.R`NTÇp¿{´±w{{‚dci—¢g÷Ü÷CÜ÷oô÷oø!4²Qö´®””¥yÕ„zx‡u]vœ»÷÷Üûá4~5A‡>Ð÷ã÷$óóóø\øá#ûlpv|…sj€œ´÷S#û`:«WÖº­ «¨“^à÷˜×÷ ÷ú÷ƒ÷˜÷ ÷ ÷Ý([û+iƒjh‰€®ƒ¬­[÷+#÷˜Þ÷ÞÞø#÷÷˜÷ šñ‘¹Ž¦¢ŽŽhlmœ%÷ ¼÷Ý-yû(†jŠk‡jˆ†¬‡«…¬vïDx'„l‡i‡j‰†¬Š«‡¬x÷(%÷˜÷Ý÷÷ò÷÷˜÷¨¾”ž•Ÿ•—y˜w—x­X÷û÷3ô÷>ûqXƒyw„xˆ€ž~Ÿ‚l¾ûóû2÷Û÷÷é÷B÷ny=‡™˜ˆ ܯµà¬÷÷Ý(cûƒk„lƒl‰‚¬„©ª\÷#÷ûÓ†zt‚{zj„‚Ž…÷˜Ü÷;Ü÷+÷Ñ÷+÷˜÷ÑÜûA÷;÷UÂû·:÷'û;ûU÷ÙÍÊÆÚµ÷B8÷HÖP÷!÷ÙÍÊÆÚµ÷B¹÷· Pû×÷ÙÇÊÌÚ÷(ã÷í÷(ø/1¼FñáØÍõöGÍ&a^~re®L™¥¤“¦·§y\”ûf‰ƒ‰{yãv÷`„pziay£¯]÷ÚÃÝ÷6ß÷õ÷ò÷L÷hHr²À€¯÷˹à÷Ø8ƒl‰¦rm—kEAH'-ÃHÞªª—Ÿ¡‰en‰uv[qg“›l÷÷gr¨¾Á¨§© …}œûv{yƒwø"Ñ÷'Ò÷0Ù÷Ø÷Áø"ÜÊÇßßLÇ::KO77ËOÜÑcp©·¶¦©³³¦m`_pmc÷ñ÷XñÞ÷÷@÷÷Êåæ{ª®ƒ®­¯“›ªå0ÔÕ9Ý¡©˜°·¶°u¨ÜÝBÕ21›kh”hhg‚{l2åBAÛ9vnf`_—f¡m:9÷F÷UƱ²»»±dPOee[[e±Çû÷›û›ùëûŠ÷Šæ÷!¢í©÷ Hø•ø©bµYªF”(÷)û¼&{LN5ûL÷¸š7oqz[LT¢²LK'ˆ½_×oÌ„û&í÷)¼÷žÆÎß÷Jû·‚Ò©£›¸Â°zjº‹÷÷'æ÷:÷ ÷÷2÷è÷–÷±¯›ª»”ЕД÷&æðû=„£…££Êq”p•p7†5è÷‚Œ‚‚DZTFp0øw÷‹÷mEÑÂÑ÷¹w÷v÷'xªù÷7û¹ûE÷=Tû=E÷=¸û'÷'x÷'÷>Ñû>Â÷>Ñû÷7÷¹û'Nûx`x_x_‡w¶y·x·N÷÷÷Ö½Õ÷ ÷î÷'øŠ÷0hlhx]J^³Ôv÷fÖûrŠ”‹••’‹’’÷›Õû‘מ·¶Ï¶¬yrªÜÚ½ZI§Gû# 6û)jK†GŠ‚‹ƒ‚‚‹ƒŒ‚T‡FËû)«ô=÷ÜάÆÁbùLë÷#ÓÜ÷Ë÷J\Ÿr¸ÇÇ£·» ÷-ûvw{s}o†÷¤ž‰‚Ÿ{Îån©` Wè:*ûv02û!û%à0÷z,Ü긑»Ÿ±¬+÷÷´ö÷÷ xw¹øŒÿþÈ€÷!Øøºùè•v\”oäûVNû&u†`s@…&âzû&{ûzqU‰yŒxŽzwû‚œ®„·÷#´ê÷ š¢÷Q÷öû’¹“£«¾¢……š•v¦vø®÷†w¤wÚ÷'î½³ÿ1€g÷øø©Ž‹•”Љ”Yü>}Ž~’_·s°ÀÎî¦Ñ¾¨÷Fûýrnozi…»ø,–„•„•ƒÜÚo¨i h˜˜÷Y'Œ€Œ€ˆ‰‹ˆ—íYW$û&s-û ûNû1Ì$î`}û ½˜ô—‰˜‰™‰(½—îÓÇ«½Á‹÷èÕ»Ö÷÷ ÷÷÷–÷ª¨›¥­÷&Õû)‡›†›‡›÷6ÖûIŠ’‹‘’Ê‚ŒH†Fæ‘{‘{{o<†F÷€Q^^Ot0øw÷‹÷÷Å»Å÷÷ìõ÷Võø)÷º\{»Æ¢û}‡a÷¬ûlõº›[Pt÷|µûjøQÅF÷!û@2÷ûûE…WÑ[E…WÑû€õ÷€Öäû€÷÷€ÐÅF» v÷kçÔæÓçä÷÷x÷ÇÔ÷#]}fpQ÷€ŰuY˜û"Ó÷ëCM÷ w(¶û ûKû9G†6Ïü÷÷k·÷ ð¾÷ŸÈ‹Õµì÷Aî¶Õæ÷÷.÷ óø7Õü7÷÷Cqrum\m¨Ê¾³©´§ „x£÷ ÷†¼û Zû.A÷.|H¥lp˜Z52HûûÎGó¹´§¨Ž”gïø&Ó‘Ï v÷kç²Å¸Å¯çä÷÷(÷÷xø(¸÷&ŒƒŒ‚…‹…Š…û'*²÷rxl}a÷€´ª€ržû¯÷ëgDèj2®!ûKûH†WÎ]H†WÎûî÷÷k·óç´å¬ÑÅPŒ‘‹‘‘”‹”Š”Æû÷m-v÷Ž÷ ÷?÷h#w¢wÎ÷'Ûíš÷³€÷ß÷†×ûƒv†v5VÕ÷÷¼Ûⶬynªg€ÜÛgd´W§T”sð)k#ûp/û ûKûRêû÷u§%ígñg€Á”½¤´¯÷Àûb–v¡÷% ¡wÚ÷'ìÜ\÷×÷M£hÔ÷÷¬ÕË¡÷3ütqrzm„ø:¥„¢} zÜÚbµU¦S’¬æ:.û&v)û ûQûXñû÷"z'Ü\ðÉ•Àª·» v÷]÷ ÒÕÂ÷ AÕãøGìøŸùüGôû ÕÕº}bœû:…G÷j\{[s?Aû á÷8û]÷7ûO÷tÓ¦¿À–àÕÕ?ì´q­f¢÷)”vùw÷ ÷'÷2÷÷ ÷÷;÷F Â÷F ÷û'ûZ6b:à´T6b:à´û|÷ „÷6í÷J–ˆŸ†Ÿû o|‹‚…D@Y8ƒ§øèœøÊç§/§øèœøÊç§/§øèœøÊç§/Ú÷FÚÙ÷FÚ£ðêðaðêð½÷@÷ÌàËÍòòKÊ67KL$$ËIßÙru¢ÏС¤¤¢yFGttr<ûþ÷6÷[XºûOûAø€øŸû6û[¾[÷N÷BÃû0üÇßËÍóòKÊ76KL$#ËIàÚrt¢ÏÏ¢ž¤¤¡xGGutrÉ÷Ê÷!Ê÷ɪßâߨàâßý÷2ø÷ T\;;ÂWÓÊuvœ¿¿ ˜¡¢ ~WWvztøÉüWûZž_øj÷(ü<üC÷ T\;;ÂWÓÉuv¿¾ ˜¡¢ WWvytÃ÷±M÷ S\;;ÃWÓÉtw¿¾Ÿ˜¢¢ WWvyt‹÷IÍ÷ Ë÷t÷ ÷S鮸ÛÉ û÷šÜûhö÷Ë8¶÷ ÷Îüm÷ X÷Mûnû û\X÷4®NénȾ‹â÷+á÷h÷ µ÷™ûñØ÷*÷è÷ Ü­û°ü»Ú÷™â.µ²²÷C fÈS¢œŸ—ž§›{rÜiJU9U‹÷IÍ÷ Ë‹ÙËÃÅÚ÷Ró0ó÷"螀øâÉ û÷¡˜Ÿ¢—¢£™{stƒfS€½¢€sxxtoi™švbIi÷-Űx¥[˜®€´™˜ °ÀV®JT\zsl÷éüs÷ W÷Mû^€û û\X÷4ž€Nè^€È¿ÚËÂÆÚ÷h÷ ÷Qó0óì÷*÷ô÷ í­û¶üh÷-ưx¥[˜î¦ í÷ ÚËÂÆÚ‹á÷,à·÷˜ûñ÷-ó0󜀷÷Ø÷˜áš€/´²³·¹ÎX÷ÈT¡œŸ˜¨›zrœ€iJV9U»ûó/û¶üh÷-ưx¥[˜ë¦ Ú€÷ Ï÷ZÑ÷h÷ °é6éÊé6éØ÷*÷(÷ œ€KÜQüA Ï÷ZÑÙËÃÅÚ÷Só/ô}é6éÊé6é¹ ±÷õiº»„´"ÔȴŰw¥\˜³™™ °ÀV®JTá fS2½¡€sxytoi™šv= Ï÷ZÑÙÓĨâÕà¹ó|é6éÊé6é® ±÷õiº¸„¸ØÄ»ÉÈ`¯I}xˆ‡ ¯÷âûi6}û5¶o•™‘Ÿ£žrtxrnl™šu= Ï÷ZÑ÷tâ½÷œûc÷×é6éÊé6éì€ö÷Ø÷0ôšÌ×áÂûœ4(÷&ì€Sûhvsmtdah¥Í¤÷$öÈæ÷õKË*û;@û<ûpmwkwhvÂ1›•›”š•)¡ÛZæÑñ²·Ÿ÷È÷ÆŸ¥÷÷¶÷÷8χ‘‡‘“÷tø2‹÷Nû÷*û+û+ûû*ûNûN÷û*÷+åÙ¿ÛÁeG]I_EUY¡±i‡÷ž‰‰÷p’”‘¯­½¡Á½½wi­‘…ƒƒût‡‰‰‡÷V÷˜ø¿˜÷Ž÷ªûŸÑÚû*÷÷ù÷ûù÷*÷EÚûªûŸqø¿÷†÷÷¾ø¥ûŸûªÚF÷÷*ûú÷÷ú÷û*ÚÐûŸ÷ª÷V÷ªø¿øÞ÷’ûª÷ŸF<÷*ûûúû÷úû*ûÐ<÷ª÷Ÿqø¿÷†÷÷Âq÷Ÿ÷ª<Ñûû*÷ùûûùû÷*TVFñ¼÷IÜ÷'¼÷EÛ÷X÷+÷I÷EûIûvZ÷ŽÃÎ÷ˆû„IR ø ¢ø¾¢ ó ê¢ø¾÷Q÷÷÷s÷ûsü,óø½Äø¡Äò ø½Äë÷-÷>÷s÷rûûÒû©ò žø ¢ø¾÷¾ž÷§øžü¾‰øSë¢ø¾ø0øSûûrû÷rû:é÷§üŸŽ÷§øŸü¾ø½ø¡÷¬øŸû§ø½‰üŸû¦ø½øSë÷u÷®÷r÷ûsëø‰üŸû¦‡øŸû§÷3¨»ø®ø”ü®üÎQøåÌÖøöüÜAJ÷3ø±»ü”ø®ø5JûRûeû‡pÖlÖ]Ô.NÈ0µ<°%÷›¸÷8Ê÷Ñ÷Õ÷¬ece]gWü^AJýøåÌÖøà¤©¥¦¤£wùX{ù÷«‡Ü÷´÷÷[÷÷1Ùûûû ûqCûƒ‡kÞcàVÝ.NÑ(¸4µûo÷n÷­Ý÷ßÀÅOÄqÂ÷ ÙÐ÷÷ýÑt³OPg‡rl¼w£®¤ÄÃÛlÅ-ËY­”¢<ü˜‘ƒs‘q,@OC÷øF÷ÙøP÷„÷ ÷6÷èû6÷èû û6ûè÷pûmU÷ ^ë¸ëÁ÷ ŽÁû ¸+^+Uû ÷÷÷ß÷y÷=÷y÷÷ëº÷N¥÷%û'÷÷÷ß÷ø)÷÷÷ëº÷N¤÷%û&÷kûßëº÷N¤÷%û'„„ øÁ÷Á÷ÔÔ÷~ø÷‡¾¿ÕÕX¿û‡UÍŸoccwoIøÁ÷Á÷eÓøù„ûXWAA¾W÷ÁHw§³³Ÿ§ÎøÒ÷;÷#÷ƒ÷§øÒ–øÒ÷;÷÷Ø÷øÒJøÒ÷;÷÷Ø÷‚øÒEø ÷ÿ÷t÷,÷“ø åª÷ÿû,žøÒ÷;÷"÷ƒ÷¦øÒ¾ û÷ÿ÷t÷,÷íí1lûÿ÷,nøÏ÷1÷÷1É÷1÷SøÏ; žøÒÜ÷-Ý÷Ý÷ÀøÒN ÷$ŠøÑ÷+÷C÷ø÷CøÑ’øÍ÷RøÍ* ÷M÷­õ÷s?¸€˜}zqi~~ é÷ j–Ÿº5ûfâ÷jî÷jû t©œ§°¨8qy__PøÒ÷;÷#÷ƒ÷§øÒ–÷0÷÷÷–ùR÷0÷u÷Á øÒ÷;÷÷Ø÷øÒJ÷0÷÷ä÷‰ùRÀÈ: nùS÷÷Ö@÷è@Ö ÷ÿùSÐÈ@I  ÷ žùdè÷3÷®÷3ùd÷øÒÜ÷-Ý÷Ý÷ÀøÒN ÷$ùR÷ ~÷ÀùRâµ¼Ò“:WøÍ÷RøÍ* ùQ÷.÷k÷>÷ÀùQ‹ øÏ÷1÷÷1É÷1÷SøÏ; ùPô ÷]ùP<ù:Õ÷LøÁ`ùÁÔ÷LùG5ŠùM÷4ùMŸøÑ÷+÷C÷ø÷CøÑ’÷0÷7ø÷šùR øÒ÷;÷÷Ø÷‚øÒE÷0÷÷ä÷÷ùÊNøÑ÷+Ð÷ø÷ùùhû êû+åûƒ÷+û êû+æ÷0ÐøøIùRL÷ ûäû û$÷ ûåû îø´÷÷|Æ÷ßùˆGql\SU¡n·¨£¡®«rŸo‰ˆ‹Š‰¦ ž°˜ù÷÷ÆÆ÷žø±Ï¥ª»ÂÁt¨`nsvgk£x§ŽŽ‹Œ‡pvxf}ø?÷g÷ù÷÷Áø?èØ±ã¬}¨|&_“€“zyap~c„û‘÷Rû‘* ûlô ÷]ûl´¨©³²nªbbnldc¨m´÷Z´¨©³²nªbbnldc¨m´ûyÆP÷O÷¬ô`÷œa oU©g `÷6 ÷M÷¬ô÷q?¸… ´s¡i–Ÿº5÷M÷ªõ÷p?’ j–Ÿº5ûfâ÷jî÷jû t©œ§°¨8qy__Pûsê÷gö÷²ox\ZL÷ ~„~vv—¥©¡¬¯¨ûfÛ÷5Ý÷Ý÷Àûfè¶ÍÔŽ9j‡yqhhy¥¬‡9÷6ûQé÷6÷¨øJ,¯øÏ÷ÉÐ÷÷&÷¨&÷è÷]øÏP÷ZPÐû÷M÷¨Ðû¨ùP÷¼Ð÷÷#÷®#÷P÷3ùü÷®Ðû®èµû…f øÏ÷¶÷³ ÷|ùué÷÷ûûû©P÷ZPùP÷ª÷ ³ ÷uùê÷ ÷ ÷ ÷; "û¦f øÏ÷¶÷³ ÷‚ùu÷< á÷']Q‡]Å'¼û©P÷ZPùP÷ª÷ ³ ÷]ùPf ¾øÏ÷¶÷³ ÷±ùäû÷ûéªû:PûZPùP÷ª÷ ³ ÷ºúbû.÷ ÷£û.X cûZX cøÒ÷S÷ ÷5ø; ÷5øÒåºÌŽ‘÷9SÝ`÷ ùR÷7 ÷"øY ø1ù–Þ`î÷ û ûçûPó¿²ûøÒ÷S÷ ÷5ø ÷5øÒåºÌŽ‘`÷ƒ÷N ðùR÷7 ÷"ø `øiúûíû ß ü Gó¿²ûøÒ÷°Éø^ë÷5øÒåºÌŽ‘÷XAÊ”ÀžÍ¹e©ûŽ}M¾ˆ™÷J ùR÷´Çø^êøIù‚Š û°,ó¿²ûøÑ÷¯×e×÷-÷ºJ˰÷-øÑ†Ð|¯°÷ È÷M ¨·ÛÈp†÷;°÷Ðï ùR÷¯×eÖ÷"÷ÐCʰ÷"ùRó¿²ûÐt¯°¦‘˜–œȦ§eÀ¨¸±®Ù“LÈq…÷;°po°VÐ^eh=ƒ÷B÷’ùHÕä÷ !€û€…÷F÷“ù¼Õð÷ ûxûuÕ HO÷B÷µù¾!äû Õ]û …÷F÷­ú3ûðû Õ^!Õ HOøÒÓ¿šëÉ÷²ë÷ÀøÒ…®ùR– ·û+Õ HOøÒÐØ×?÷÷5Ä÷8˸÷ÀøÒ›Ø÷M ¸·ÛØp†÷;¸÷ï ùRÍß÷÷8¼÷=Í÷ÀùRÕ HOû-÷*÷I÷ øÑ÷®Ð÷-÷º÷-øÑ†ήà´¿ÊŽFq†zweezŸ¥†FLŽ´WàùR÷­Í÷"÷Ð÷"ùRó¿²ûÊ­á¶·Ò’Hmƒzx__zž©ƒHD’¶_áø¸÷rÿÿ€ÿZ€÷Õø¸£÷-÷ù5Æ÷jõ÷ãøµ§Án’}–¢®•»€Æ,†8lGY«r䃉 Fùv÷ùv÷÷W8FùvF÷7ùv÷¦÷Wü$xY xûü$x‚ x÷W ÷{÷÷> ÷{÷÷û÷\û÷÷û÷\û÷÷û8÷> ÷7÷÷¦û÷\û¦÷÷¦û÷\û¦÷÷¦ûû\÷r÷÷r÷÷r÷& ÷rû÷÷÷rû÷÷÷rûû\÷r÷÷r÷÷r÷( ÷rû¦÷÷¦÷rû¦÷÷¦÷r÷W ÷{÷÷"÷{÷÷*û÷÷*û÷÷*û÷8÷"÷7÷÷*û¦÷÷*û¦÷÷*û¦÷û\÷PÉ÷PÉ÷PÉ÷P÷& ÷PûÉ÷ É÷ É÷ û\÷PÉ÷PÉ÷PÉ÷P÷( ÷Pû¦É÷É÷É÷÷{÷Y ù ÷À÷÷!÷7÷¦Y øÇ÷À÷¦÷!÷{÷‚ ÷ üŽ÷7÷¦‚ Ç üŽP ÷÷À÷=ù•÷!{ ÷À÷1 ùÙ÷![ ÷9 ù•üŽ{È ùÙüŽ÷2 ÷{øJ÷÷ ÷÷{÷7øJ÷¦Öh÷7÷{øŽ÷é Ñ÷7÷7øŽ÷¦è P ÷øJù•Ô{ øJùÙÓ[ øŽù•÷{øŽùÙö ÷{÷Y ù ÷À÷÷ ÷7÷¦Y øÇ÷À÷¦Ö— À÷7÷{ Ï÷=ù ÷À÷Àé — À÷7ü$÷¦÷  ÷ ý ÀG÷{÷‚ ÷ é 8MÀ÷7÷7 Ï÷1 øÇ÷À÷¦Àè 8MÀ÷7ü$÷¦Ç  ÖüÇÀG÷7÷¦‚ Ç è P ÷÷À÷=xÔ{ ÷À÷1 xÓŒ ÷À÷=ù ÀÏù•÷Œ À÷9 ù• G÷I[ ÷9 x÷8M F÷7÷À÷1 øÇÀÏùÙö 8M F÷7ÀÈ ùÙ G÷I {È xö P ÷÷À÷=ù ÷À÷÷WP F÷7÷À÷1 ù ÷À÷ûÀÏ÷!P ÷÷À÷=øÇ÷À÷¦üJGw{ ÷À÷1 øÇ÷À÷¦÷W[ ÷9 ÷ ÷WhF÷7È ÷ û|ÏüŽ[ ÷9 Ç üŽG÷ {È Ç ÷WP ÷ùv÷ûÀ÷IP F÷7øJÏ÷À÷ûÀù ÓP ÷÷ÀGøJ÷¦ûÀøÇÔ{ ùv÷¦ûÀ÷I [ ùv÷û|ù ÷hF÷7øŽÏ÷|÷û|ù ö [ ÷|GøŽ÷¦û|øÇ÷{ùv÷¦û|øÇö P ÷÷À÷=ù ÷À÷ûÀ÷Iå3  ÷H`ù ÷À÷÷  üÇûÀå3 `÷÷À÷= øÇ÷À÷¦Ö`ý ûÀ{ ÷À÷1 øÇ÷À÷¦ûÀ÷I Œ ÷À÷=ù ÷À÷Àû|ù ÷Œ À÷9 ÷  ûÀ÷I[ ÷9 ÷ û|ù ÷•÷HPøÇÏÏ÷|÷`é  üÇû|•P÷÷|GÏ÷1 øÇ÷À÷¦ è `ý û|•àPû|ÏG÷Q üÇûÀ•P÷`÷9  Ç ÖPüÇGGû|8M F÷7÷À÷1 øÇ÷À÷¦Àû|øÇö 8M F÷7ÀÈ Ç  ûÀ÷I ÷(àé  üÇû|÷(`÷÷9  Ç è `ý û|{È Ç û|øÇö ‰ ‹÷*÷*÷*÷{÷*÷û*÷Àû÷*÷û*8‹÷*÷*÷*÷7÷*÷¦û*÷Àû¦÷*÷¦û*û\÷Ž÷Ž÷Ž÷& ÷Žû÷Ž÷÷Žûû\÷Ž÷Ž÷Ž÷( ÷Žû¦÷Ž÷¦÷Ž÷W 4FùvFø÷ ü0Ó ü$x¡xû÷§úˆ÷ ­ ÷!÷{÷¡ù ÷÷8 ÷7÷üJû[éü$÷ù•øJ÷üÓ÷§þ÷ø‚÷7÷wk ÷Àü‚÷ú÷!bø÷/ ù•üÓû÷7÷8 ÷[FøøJý•÷úüÓü0÷C³÷{éøJÒ ûÀø‚ûbé÷{øÓ÷û7ù ÷[ééøÓ÷üJù•û÷§ý ºk øJúûü‚wb÷øÓù•¹ [FéøÓúûý•üJ÷í ûÀø‚ûbø÷/ ù ÷7÷û7ù ûû§úˆ÷ [éü$÷ ÷§ý ºúˆ÷ø‚÷7÷wk ÷Àü‚÷xûü‚wb÷÷7ý ÷Ký û7øJý•÷ [øü$÷ üJþ÷C÷óFé÷Àü‚÷ø‚÷À÷/÷Ó b÷÷7÷8 ÷÷8 ÷7÷÷W[Fé÷'ý ÷ø‚÷7÷ûÀüJ÷Ó ³Føùv÷ûÀø‚ûü‚ûÀü0Ó b÷ùv÷û7ù ¹ [FøÃøJûºüJþÓ k ÷Àü‚÷ø‚÷ÀÒ ûÀø‚ûü‚wb÷÷7÷8 ÷÷8 ÷7÷û7ù ¹ [FøÃü0÷'÷ºúˆ÷ø‚÷7÷w÷{÷Y ø$÷òò÷Ð÷Fû`û9û9û`P ø÷`û9÷9û`FûÐ÷ò$ûü$÷P øú|ûü$û$$ûFûÐ÷`÷9÷9÷`÷2 øìû`÷9û9÷`Ð÷Fû$ò÷ø$ûû¡rFùvFûû÷øìú|÷ûñøìþ|÷÷ñ÷—üCû—üCû÷÷{ø÷{ü÷÷û—øC÷—øC÷ûû{ü‰ FøJF÷4 ÷{ù•} ÷{÷ù•û‰ ÷{øJ÷{÷4 ü$ù•Y ù•û8FøJF÷5÷{ù•˜ ÷{÷¦ù•÷W 8÷{øJ÷{÷5ü$ù•‚ ù•÷W ‰ Fùv÷÷ÀGøJ÷¦üJGw÷*ü$÷¦ù•Gù ûý G‰ FùvF÷7øJÏ÷À÷ûÀÏ÷!÷*÷{Ï÷=ù Ïù•÷W ÷Àøˆ‹øì÷Àøìøˆ÷ û\÷ ÷÷ û\÷Ž ÷Ž÷ û\ø ø ÷ û\øˆ øˆ÷ û\ù ù÷ û\ù‚ ù‚÷ û\ùÿ ùÿ÷ û\ú| ú|÷ ª ø¡×ø¡ú|ü¡ª øV×øVú|üVª ø ×ø ú|ü ª ÷À×÷Àú|wª ÷u×÷uú|ûuª ÷*×÷*ú|û*ª Ö×Öú|@û\ú|÷* ú|wª ©×©m½÷ÀY÷øìüˆä äª ©ø8÷*שm½÷*Y©ûH÷ÀY÷ÀûŽ÷øVüˆ©ütù´Yøìý‚ä ÷" ä÷À÷3 ª ©ø8÷*שm½ÖY©"÷CY÷*û©ûH÷ÀY÷uûŽ©û“ø=Y÷Àü ÷ø üˆ©ü)ù7YøVý©ütù´Yø¡ý‚©ü¿ú1Yøìýÿä ýÿ½üƒùÍmø¡÷" ý½ûíøÓmø ä÷Àü ½ûW÷Ùm÷u÷3 ÷*û½^Ömù7÷‹øìù7øì÷÷ ½ø¡Öø¡û\Öú|@û\øˆ‹÷À×÷À÷ û\øˆ÷* ÷ ÷Àøˆ‹÷À÷À÷À÷ ª ÷ÀÕøˆûÀ÷ ÷&ù´üˆ÷Àøˆ üˆüˆ÷Àøˆª ÷À×÷Àøˆ÷Àøˆ÷ ½÷À÷À÷À÷Àüˆ÷Àú|÷ ÷Àøˆ÷À÷À÷À÷À÷À÷ ÷&û\÷ÀøˆûÀ ÷À÷À÷ ½÷À÷ÀÕú|ûÀüˆw—ø„—Ñ—¸——°—ûX——øz—×—¿—‘—·—ûm—  b_ ‹ ÷ ÷* ÷ ÷* øìË/1e™¾×Lz…Ýà@©Í9 ¥¿æñü7MÅÒâ’ž§®í3:fnuˆ‘˜žºÌÑÙäù "w|ƒ“¡¯Øé"'IXr€Äßæ * 2 6 < H N Ž ® Î å í ú ÿ  ! @ G O ] … — £ ª ® Ë Þ æ í ó  6 B O W f p œ ¡ ¦ « ³ Ó ê ù  $ 4 9 = B I o ” ¤ ³ ¸ ¼ Ã Ï ß æ ö    $ + = H P Y b o v z — ¢ ¼ Â Ç Ó Ý â ê ñ ø ÿ5>MSXoz…”™ §¾ÃÇÏÕÚì1>DQ[eipw~„Ž“–±´ÆÌØäëóùÿ#,3:AFRV[fqv‡˜§«»ÄÊÒÚâêñöü,16>LTbpx|ƒŒ’—œ¡®¸¿ÆÍÔÛàåêòþ !-6BFR^dhrz‚ˆŽ“˜¢­³¼ÁÅ÷Z÷Žé¹·Á¨¦‚s¦û]jqo~jNh·íû+‰û6ß)÷»Á¦¯¯Ž šÇœÌכМG>œJšOÐû¢÷0û_ù ûDû_ý ÷*³÷/÷Yº÷N÷,÷÷÷ê÷9÷9ûêûûû,û9÷+á­ÂÏÏ­T55iTGGiÂá Ë÷û=Ú-÷3÷2×é÷=ø%û"ü4=m`MMn¶ÙÎ ÷!–¶³ª÷&“9phew_apš« ·÷Öûo÷û÷;ÞØ±´·÷Àûwû êû~}r„r$WÙ÷÷ËÚà¿©xo§ÜæµaN´3û=ûûûn (ô 0í “somû'Nû Q¨^¯s‡ô hssgja¢q¦z‡ ÷v÷(÷p÷føD÷; Iû1wYw\vW‡w¿wºx½I÷1û2÷füD Ä´®ÁÁb±R, á÷;¦÷9•ϵ¯‘V‘\’]§û9÷>Øø„ûmûz„Z‰[„Y‡„½ƒ»‚¼j÷8$lû8\„Y…Yˆ„½ˆ»„¼m÷zû$ ñ X‡µe^ Wû&(û,û#ß&÷ºÀŸ«¬ˆK\†ehB ÷B÷bûÃ3÷2ËÁ™˜·qõnkƒeCk¨Ö÷B÷f÷ûf÷û xûû…û÷ Â÷Öûo÷ û÷<ÝѬÊÁ:ähkft\)GÙ÷÷ÏÚ纭xoªÜæ¶_I³8ûBûûûl ÉøÝ÷$üûË;÷É®–›¿j÷ls‡tbdŸÈø•û· ÷ß­®¥³ÁžmIû³÷'÷Æ÷YØûAUga`‡ Î÷N÷ ,÷0ÏØ¢½ÇOèrh_uW9RÂááÆÂà°®p±Ïæ²aI§=û-û,û9 ÷'Ý4 í+ ÝbT–¥\÷;÷CQc¹ÝíÞ½¹½ª¦‚s¦ûDÝhpo~k š•››“ª‚¢€vzzttz—žØÀöp”z”™˜•œŸ˜{…~ƒäû'ûYÂbÚÚµ¼»qžhØ©™¢œ­ÂT¯DGRgTc¡~©w‡äm{lxa÷{÷ ÷_Z'fÅÚ|Â÷=äÙ÷øtû ÷/ø{“€“zybq~cƒšjg’gûû,û9û9÷,÷ –X÷ ø„û ÷:v÷{ãÓ÷ C 3  ë ÷+÷ û$+û  ™ ]ji_^¬i¹÷n¹¬­¸·j­]]ki_^«i¹h ê÷¶÷É÷'A÷Ö÷== ˜ü/ ûWüdš–›š“ª‚£€vzytuy—ž@ÀÀöp”z”™˜•ž˜{…~ƒ û'ûYÂbÚÚõ¼»pžh@À©™¢œ­ÂU¯CGRgTc¢~¨w‡ m{lxaÀêß ,ö'» Úø÷[ü÷'ø„ûî +Ä´®ÁÁb±RD÷êšÇœÌכМG>œJšO¡øœ ÷0/ûWüdš–›š“ª‚£€vzytuy—žCÀöp”z”™˜•ž˜{…~ƒ„€û'ûYÂbÚÚõ¼»pžhC©™¢œ­ÂU¯CGRgTc¢~¨w‡„€m{lxa\SbeUU´hÃFw W ÷Ø÷û û}/Sû ÷ø:÷ Zí÷;º÷)÷M÷'Þ4 î+ ÞbT–¥\÷;÷CQc¹ÝîÞ½¹½ª¦‚s¦ûDÞhpo~k Ó÷'÷ß­®¥³ÁžmIû³÷'÷Æ÷YØû@Uged“ê÷@û' j„}zlh¸UW^^0Ö¬’™—œ ƒ™´ Y Ì÷M÷I÷ô÷t÷tûîûQûE÷(ü©ø2 ñÐ[û0û0FU% û$)û6 ÷ ÷®÷ î¹ÖÜ9a†wjcc‰ û0:÷ ÷{÷9 ¬}÷$ Ñøk÷û ÷˜÷ÃÙüCû÷xû˜û ’“{yWaƒc‰ô7 û‘÷I o½€$ iީϽk÷: ЪºÈë÷/û»ûû{ý ÷' ¯¥¦®­q¦g } ü$÷ Ô Ù÷;d h÷ bnmcc¨m´ ÷'½º÷ŒÝû6Þ)÷½¾¦¯°Ž½–X÷ ùQû'û=>«hh Rû#)û6Ý÷+é¹·Á¨¦‚s¦û]jqo~jNh·í 7 Í ÷ø­w ÷+÷ û#+û  ûgçï÷Ëä÷#ö4î öøI÷û¶ø¤û' Úø÷[ûùCvjDnk‘c`"w¶¼}È÷H½ô÷ øfûî Èûëû ÷#ë÷ àÊÍóòLÊ66LL$#ÊIàÚrt¢ÏÏ¢ž¤¤¢xGGttrX † c J Ý©Ï j ø  vø÷wŸ÷0 ÷÷'¬´Ì| ¬TœÆ ³Fø÷ÀûûÀû Ë÷'÷¤÷Fû¤÷'ù û'ûûF÷û' C+Ä´®ÁÁb±R yu•®ƒ—š›‘š£˜€ww~u÷÷l£ngœ_ R<1)ÃFéÓÀ½ÉÈd¬Okqyv·ž®¾£ž‚}œÅ’“{yWaƒc‰ø7üјÁ±ÖQ É÷K÷' Ì÷ ÷iÒ÷.„ѼûG½û/̽÷/¾÷GŽ„Eû.Dûi÷ ù û'Lû{u1ˆuåI÷{û' ±÷+÷r÷+ ‚ g ½l¤ ÷Lû7vøg÷M‹w †–P ÷ã«™—›žž•|lûå÷÷㫘™›žŸ“|lûå÷÷ðîbÈFShg^yÀl§_Rmjbx‡ !³@ÏAÚ»UÊnÑÕÔ¨ÑÁÊ<»GAc@"Ú¢¸Â×Éq®^gnrhd©v¬Œ‹ŒepuY{G`Þ÷÷¶ÙÏ϶=ûû`8G ÷F÷7 äµË«È°Ÿ†‚ª 9 ÷{ [v ÷ÀôšÌ×áÃûœ4 ÷&S÷ v÷÷ ÷K÷ Å^­ º÷+÷`÷+ è¶ÎÓŽ øÇ÷|÷¦ ÷|üÇ÷¦ ø»@Ôû6û[¾[üû¨ÖB÷6÷[Xº ÷ û5‚”÷Aû ”ûAû5”û ÷5 ÀÈŽÁ÷ Ú¾ÊËÚ÷8éßì÷– §¨V½ vø„w ÷[÷÷÷ô÷÷[÷ô÷ûô÷÷÷÷ vø÷wŸw ÷ûÀ÷÷À÷ ÷  ÷ á¶»Ó’ }zqh~ À÷(Ž€û+ß÷Î$i-wD‡ ÷îr u©°…I vø÷ È÷! _ Ò÷÷ :Ö÷Q÷"û!Ö ÷[÷ÛøLÛ÷[øL÷üLŽÀ ÷\÷\ÿÿU€÷!ÿÿ€÷H [zsmµL˜Ÿ£—¡¤™{stƒ ÿC€ÿÿ¼€ÒD  :½Í ½üÎúJmøì ø‘÷jó÷j û VQ6û ‰Ž û|øÇû¦ û|ù û¦ ÷÷Â÷ ÀN õ®ÁÁa÷, ÷ ñ _eh<‚û9ClYMÕ1®·´ ½ů ( øŸ÷§üŸ÷¦‰÷M ÷ ÷÷ Å÷  ¾Ú÷5ìßé÷Ç û¦üÇ÷ ê÷ ûùv÷/ ª®^Á Ã÷±÷*±÷ì÷'ì µrwcbQ¶ N` ÷ ީдr¡ ÷ ÷T÷ ûÀù û ù ÷|÷ Ë÷' ™ \ki_^«iº ÷ YÝ© ÷÷L÷|÷L Ô¿ÛÛTºBC ÷'÷K ¬Æ­Éކ(u÷% p†|zpj²^_cg=‚ ½¢twx‚toi™šwøˆwO¾iÊ®·šŸ¥iÕ„ cç ¸@î ÷K ËKî÷*ö kwu‚X… ÷÷Pû ÷®èû® ø`óü` ÷;É ÷ø¤w üì—ÁŽ`´»t¹÷ó ý‚½ü8ùPmøV ÷÷þ÷ Åøq÷ ¨|vù w } û\÷ ÷)÷Š÷'ø÷  ˜ û\÷¦ ÷ ÷÷ ^÷(^÷ ÷À÷À÷Àû\÷À û0;÷7±SIÎ É÷' ÷^÷X÷À ü$÷ wí÷; üÇ÷ P ÷{ û޽û ÷\m ÷{øJ÷÷!^eh<ƒ½l¤1”÷]÷  ý ÷ù ÷|ý ÷¦ ¤2”û. ÷ ü$x9 ‹÷Í÷Í÷ ÷4ÒÀ ¬ÃaÔ ªðÙö÷õøº ,ö&÷;÷V TiÖ8MPc#a ¶¹ÏX÷  ûŽú|÷ë÷ Ò ÷4ØÜû4> U¼Úg÷÷÷ ©Ï÷6 øÇÓ€xz„y‡ð÷;  8jwv‚X § eÀ Éû ÷Z¯ é÷' øÇû ÷ ˆ ­¯´ª¾ͱi >±÷ †Le^Flq…{w û¦X# T7A^l,@J;DkAB&J$F2@8=HC/7R4HO*L>$H/H/t51>%F ÿý 77777AAA^^^^^^^^^^^^^^^^^,,,,,,,@@@JJJJJJJJJJJJ;Dkkkkk6k!ABBBBBBB&&&&&&&&&&&&&&&&&&&&&&&FFFFFF2222222@@@@@@@@@@@@@@@@@@@@@@@@8888I:======================CCCCC///777777777777777774444444ÿîHHOOOOOOOOOOOOO*LL>> >>>>>$HHHHHHHÿÒ///////////////// ///////tdtiiA5555555=111111>>>>>>>>>>>>>>>>>>>>>>>FFFF/H*H/H467/< 42 ///////////////////////////////8R3*#.<>=58R3*#.=>=5¸¶¸¶ÿÿÈÈbg×R¸Ê3EÊE¯À*;FFPP¸ˆ<µ~ÉijiJüJü@YYG0eÿóÿ÷FT||@˜Äž¥¡¥¡±¦¤ÖÇíã˜Äž¥¡¥¡±¦¤ÖÇíã˜Äœ¥¡¥¢±¦¤ÖÇíã˜Äž¥¡¥¡±¦¤ÖÇí㚀…ššª€”·…œ©… ¶sœ…š€Ö‘–vS|—”””€€œ$@C-`.OC[COX$FFTF·FtbFFFVF44Fÿó><“! ;K ¶‡b“99ÿãÿãÿð5Nåo¸ÊêÑÚŠŠà¢ÚŽàp¢™»¯ÊÇÖŠÚኄ‚¢Ÿ™£Ê×pƒÛÛ»»¯£Š„EEèô"ʃÅÅÄÖÓ¡¢‹‹‹‹‹„‹‹¡Ž¡Ž¡Ž™Ž¡¤¡¤¡¤š“™ŽýÖÿ»ÿ»ç£ç£ç£ç磣ÿ»ÿ»ÿ»ÿ»ç磣ÿ»ÿ»ÿ»ÿ»ç磣££££ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ç£ÿ»^ç^^ÿ»ÿ»ÿ»ç^^ÿ»ÿ»ÿ»ç^^ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»ÿ»çÿ»ÿ»çÿ»ÿ»ÿ»ÿ»çççÿ»£ç£ÿ»£ÿ»£, ,, ¾5KLggnn~~¡£©©ÍÎææüü../055UW]]ll‚ƒšª­­ÃÄÈÈÍÍ××ÝÝø lDFLTlatn8ÿÿ ÿÿ  aaltÂaaltÊcaseÒcaseØccmpÞccmpìdnomúdnomfracfracnumrnumr onum&onum,ordn2ordn8salt>saltJsinfVsinf\ss01bss01hss02nss02tss03zss03€ss04†ss04Œsubs’subs˜supsžsups¦      þ82HB  08@HPZbjrz‚Š–ž¦®¶¾ÆÎÖÞæú°®ÌÖêòd*4NhfxŠ’Êäþüþ:NÜæ> áá á*á$$  6X $ Ý ßãçí Ýßãí  Ýßåóš&0:DNXblv€’œ¦°ºÄKÿgÿnã~ÿ©ÿÍÿüÿóÿ ãý.ÿ5ó]ÿló‚ÿÈýð<DEFGHIJKLMPQNO6789:;<=>?BC@Aƒ  UVWXYZ[\]^_`abcdefghijklmnopqz !"#&'$%X()*+,-./014523¦ ªÞØ­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃSr¸ ÄÅÆÇÈÉÊËs²ÿ£²\VWXYZ\]^_`abcdefghijklmn®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃopÅÆÇÈÉÊËqSrsÞàâäæèêìîðòôöþ  °&,2>JVbnz†’žª´¾ÈU­[ÄD6(×E7)ØF8*ÙG9+ÚH:,ÛI;-ÜJ< .ÝK=!/ÞL>"0ßM?#1àPB&4QC'5N@$2OA%3„/ÿî-!/6789:;<=>?@ABCÞàâäæèêìîðòôöþ  "Y“ Gç$ÿß.áçë  "$'*/0Ä6LNx1z–\˜æyÝßáãåçéëíïñóõýÿ   ÍÖáâ ÿ DM6C†ˆDQ6?!"5 ¡¡ÍÖÝßáãåçéëíïñóõýÿ   ö÷ çüRRUU""[[v\ !#$%&'()*+,-./012345çèéêëìíîïðñòóôõö÷øùúûü ¡ö÷ RU[vÝßáãåçéëíïñóõýÿ   ""ÍÖáâ ÿ-.DEFGHIJKLMNOPQÝßáãåçéëíïñóõýÿ    8’DFLTlatnÿÿÿÿmark&mark6mkmkFmkmkLsizeRsizeVRN"*2:BDNL>~\†êdâþÔý¨âý¨äú ê7ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤žžž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž¤ž_ÆÌÒØÞäêðÆÞöüÆÆÆÆÆÆÆÆ &,28>DJ,PPV\bhÀntz€†Œ’˜ÀtžÆ¤Þƪ°ÆÆÆÆ¶&€¼¼ÀhÀÀŒŒ,¼€ÂÈÎÔJÚàæìò’˜øþÂÂÚ ,,¢¢b¢)¢B¢G¢J¢+¢8¢Ã¢2¢9¢1¤/¢3¢:¢4—ÚU¹Ú9å0YÒ§ÚÚB;A3S8 ’(.-C›¶1¢Š¢?¢Y:=#5&.ù1,Þ,Ìv~  &,,\0U7uFT "®®®®®K˜ž¤ª°¶¼Â˜ÈÎÔ˜˜˜Úàæ˜˜ìòª˜ææøþ "(.4:@˜FLRX^òd˜jp˜˜v"˜^|‚ÂˆŽ”š ¦¬òd²¸‚¾,ÿê8ÿê\ÿê"ÿêAÿêÅÿêNÿê+ÿê/ÿêCÿêLÿêžÿê@ÿê6ÿê)ÿê.ÿê1ÿêUÿê5ÿê9ÿê%ÿêÿ3ÿêYÿêðÿDÿêjÿê0ÿê2ÿêŽÿ&½ÿ&Ëÿêpÿê?ÿê-ÿê ÿ>ÿêIÿêBÿê;ÿêFÿê7ÿê$ÿêÇÿ&(ÿêŒÿêqÿê ÿÿêÈÿ&ºÀ ,𨂖žð˜  $$ &,28>8DJP,í¤”‰a“$¦P ê7æìæìæìæìæìæìæìæìæìæìæìæìæìæææìæìæìæìæìæìæìæìæìæìæìæìæìæ,,¢,â,ІˆÝÝø65KL4gg6~~7¡£8©©;ÍÎ<ææ>üü?@/0AUWC]]F‚ƒGšªI­­ZÃÄ[ÍÍ]××^ýþ./úûü 5££3ÎÎ4ææ5006WW7ƒƒ8šš9œª:­­IÄÄJù*ÿ   $*0 ¡­áéëideoromnDFLTlatn ÿVŠ‚0‚~ *†H†÷  ‚o0‚k1 0 +0a +‚7 S0Q0, +‚7¢€<<<Obsolete>>>0!0 +°²9 ”ªÑ UY%>õTѧ ‚á0‚<0‚¥pºäÙ)4¶8Ê{̺¿0  *†H†÷ 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 960129000000Z 280801235959Z0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0Ÿ0  *†H†÷ 0‰É\YžòŠ´ß@ÛãW¯jE@„ Ñ3ÙÙÏîX%÷*¨Dªìxž“¹šª#}Ö¬…¢cEÇr'ÌôLÆuqÒ9ïOBðuß ÆŽ o˜ø¬#_p)6¤É†ç±š ËS¥…ç=¾}šþ$E3Üví¢qdLe.hE§0  *†H†÷ »L+Ï,&Oݦûü „Œó(g’/|¶Åúßð蕼l,¨QÌsؤÀSðNÖ&ÀvW’^!ñѱÿçÐ!XÍiãDœD9‰\ÜœV™í¢EL令=ð2ñÎøèÉQŒæbŸæŸÀ}·rœÉ6:kŸN¨ÿd d0‚Ÿ0‚‡ y¢¥…ùÑBÙ¸>ö¶í0  *†H†÷ 0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CA0 120501000000Z 121231235959Z0b1 0 UUS10U Symantec Corporation1402U+Symantec Time Stamping Services Signer - G30Ÿ0  *†H†÷ 0‰©YftÚ=Š}zØüõ€D{þGjUNPG ìÓíÎö8÷Oi¹±ð¶x‚ Œvgâ­· ¥ŠöüfÓü-̵sY{‰Ü3nfZ^R7´bÑ’Y5‹E¬Y²M$¢˜”hBrŸ:hâk‹ž"-ô˜N𯝳䠫<(¿#á×r¤òSg®w¯Q£ã0à0 Uÿ003U,0*0( & $†"http://crl.verisign.com/tss-ca.crl0U%ÿ 0 +04+(0&0$+0†http://ocsp.verisign.com0Uÿ€0U0¤010 UTSA1-30U´·ñ‰I&`çeês®ÜÓ8Í¿W’o0  *†H†÷ ‚˜ª'·xµµÉrm·ßÀ˜¦5ĈÉÒömñKûÕù-™žÑ盋á?½9€ fͼ\˜T¦”ºÑN‹«õoeÌg ¢€|RèÖkzÆìȬB|,§=fÜíý”sòr˜“±ÖïŽê¬ô–Q Ðß1RO^¯}§JuæNÎ+Ÿ)+çÏ]Ÿ~n'{#­b)f¯’è,νœÜÍ'ÑxìŸ1Éñæ"ÛijGCš_ ä^õî|ñ}«bõM ÞÐ"V¨•Í®ˆv®îº óäMÙ ûh ®;³‡Á»£Û0Ø04+(0&0$+0†http://ocsp.verisign.com0Uÿ0ÿ0AU:0806 4 2†0http://crl.verisign.com/ThawteTimestampingCA.crl0U% 0 +0Uÿ0$U0¤010U TSA2048-1-530  *†H†÷ JkùêXÂD1‰y™+–¿‚¬ÖLͰŠXnß)£^ÈÊ“çR ïG'/8°äÉ“NšÔ"b÷?7!Op1€ñ‹8‡³èè—þÏU–N$Ò©'Nz®·aAó*ÎçÉÙ^Ý»+…>µµÙáWÿ¾´Å~õÏ žð—þ+Ó;R8'÷?J0‚0‚ù  ;x`–Ú7»¤Q”FÈ–x0  *†H†÷ 0_1 0 UUS10U VeriSign, Inc.1705U .Class 3 Public Primary Certification Authority0 061108000000Z 211107235959Z0Ê1 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1:08U 1(c) 2006 VeriSign, Inc. - For authorized use only1E0CU0<U 5Digital ID Class 3 - Microsoft Software Validation v21#0!UAdobe Systems Incorporated0‚"0  *†H†÷ ‚0‚ ‚·ÂS](¢aÓÔq¾<9>ZÀºíâ”ÃÇ8ƒÁë-kJ¸Š'ÿÊÞêK¡w’dOöòÓö¾™•³cƲ­á¦ pçÖ5RÂ!Š–2, bŠÖדçqõ Ñ®q`UtRЮâU•à\é7¦K\‘ÿÔ’ºäbŒjsÝP«¨VžJ^r¿ÍéÀÓ’›Œ¹k ¹'O¸Q›^iÓîgÕ(÷ä ë|ØZÈxkõvê2Cßr?šriTÒ ûžÚéÂà©CÔ’tJ·Äã0K­±@XW`Öƒó‹ëÀ½ÕCOe?r^­Úÿq²)žœ xˆçíKœ’¤Í¡ýž­£‚{0‚w0 U00Uÿ€0@U90705 3 1†/http://csc3-2010-crl.verisign.com/CSC3-2010.crl0DU =0;09 `†H†øE0*0(+https://www.verisign.com/cps0U% 0 +0q+e0c0$+0†http://ocsp.verisign.com0;+0†/http://csc3-2010-aia.verisign.com/CSC3-2010.cer0U#0€Ï™©ê{&ôKÉŽ×ð&ïãÒ§0 `†H†øB0 +‚70ÿ0  *†H†÷ ‚ªha½¯ÝRÄŽA¥}oˆž¾þ¹Ë·kíÂ8eb1DÛ›­93¿…”ÿlùº”” ›[çO-Yàã¢ÝcÖ¼å+t{-¤t6Û^’™›ø{¹¿Ý8Læ,„úN*Ú™Õô•3íd›HD"4_cqÛhÌÑQÿ8ßÚè³Áê%¯³ Ê0“Ê ~Ý;€Ø#¢ Õ%Ü ÚÛÝ2µ›úÑRùÙš*>Œ±—A.©/oI Ül·+ÎØ/ÜÌ}öiß”ÉÅv¥â÷4+vÓô.>âêjAòßí/Üî®öl @@ñO!Šƒƒ¤¶ŽgsÔ`ÜÄÚ‹K(5¶Áá0‚ 0‚ò Råª%Vü†í–ÉÔK3Ç0  *†H†÷ 0Ê1 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1:08U 1(c) 2006 VeriSign, Inc. - For authorized use only1E0CUß–åÅä”qÖUÇ&J@<µ¡&© §m€Ž%{Ï¿?ë/–úå‡wƵV²z;T0Sßb4ÿÑôZ“(…åLN~[ý¤“™ßÍï¤uïïöGçørØ.4¦´§L~½»O =Wñ0Ö¦6ŽÖ€v×.¥Í~4-‰£‚þ0‚ú0Uÿ0ÿ0pU i0g0e `†H†øE0V0(+https://www.verisign.com/cps0*+0https://www.verisign.com/rpa0Uÿ0m+ a0_¡] [0Y0W0U image/gif0!00+åÓ†¬ŽkÃÏ€jÔH,{.0%#http://logo.verisign.com/vslogo.gif04U-0+0) ' %†#http://crl.verisign.com/pca3-g5.crl04+(0&0$+0†http://ocsp.verisign.com0U%0++0(U!0¤010UVeriSignMPKI-2-80UÏ™©ê{&ôKÉŽ×ð&ïãÒ§0U#0€Óe§ÂÝì»ð0 óC9ú¯3130  *†H†÷ ‚V"æ4¤ÄaËH¹­V¨dÙŒ‘Ä»Ì å­z "ßG8J-lÑq|ìp©±ðOä Sú^þt˜I$…&‘G°LcŒ»¡4ÔÆEè …&sЩŒdmÜq’æE`YQ9üXkþÔ¤íyk Arç7" ¾#é?Dšéa̱\ü=Ò¬B=e6Ô´=@(›Ï#&ÌK Ë]ŒL4Ê<Øå7Öo¥ ½4ë&Ù® çÅš÷¡´!‘3o†èX»%|tXþuc?Î1|›–žÅSv„[œ­‘ú¬í“º]È!S‚Sc¯ P‡=TR–Š,œ=’š.Ç“¥H‘Ó1‚0‚ 0É0´1 0 UUS10U VeriSign, Inc.10U VeriSign Trust Network1;09U 2Terms of use at https://www.verisign.com/rpa (c)101.0,U%VeriSign Class 3 Code Signing 2010 CAt%S­ä¯Ñ¯˜MIíh0 + ˜0 +‚7(10 *†H†÷  1  +‚70 +‚7 10  +‚70" +‚7 10¡€www.adobe.com 0# *†H†÷  1ÍEÎгÏR„ˆ=9ôØÝU“PÐ70  *†H†÷ ‚µÅßšxö•Ai’ÖRrËù n0ráÍ.HXͪ^6 Ù·NI+9Ome`½%ÛÊ;íëúöƒ,á÷qÿ~ ‹r's‡ä™nPt;@Z´Ý?›8З~±Ì7'Ùݧz“kçnƒo•Í' BYn¡.ÊÏršö×ÎQ?ôf&€g ¶¸€vÞNc’ÿû«Ö{A$‰7kö‘¥éøCJóˆ\º€Òj^…ÁÍ™"Fùæ)Þ8þ¿Gg8¯¼‡z ^'á²¢&xBSc’ÏŠ?gÈ`ž)ˆuúÚ#-9ØÆ¢ŠýžÑÌ7 \¸oR=5×kÙÌ/²w*¡‚0‚{ *†H†÷  1‚l0‚h0g0S1 0 UUS10U VeriSign, Inc.1+0)U"VeriSign Time Stamping Services CAy¢¥…ùÑBÙ¸>ö¶í0 + ]0 *†H†÷  1  *†H†÷ 0 *†H†÷  1 121205232836Z0# *†H†÷  1IuáÑŽÚÏŽ (Ðna|£ä°0  *†H†÷ €”]ß—ª˜/K·a‚N^ÍVϪÓö[‹bØ·jlÕU7®x÷ÿ`8åy)V¹?+`â^ÜO ø7Lw™}"| vö¯[u%@é¢ fK§')3g5P)žÁ@T£b’8Ò'›r;•h”î’Þ4ÍÑLŒ´f³àhý…sŠòÞËiep-3.7/iep/resources/translations/0000775000175000017500000000000012573320440017664 5ustar almaralmar00000000000000iep-3.7/iep/resources/translations/notes_on_translating.txt0000664000175000017500000000427712271043444024672 0ustar almaralmar00000000000000Notes on translating ==================== In short -------- Apply the following steps (in the IEP logger shell): * Run lupdate() to update .tr files * Translators run linguist(TheirLanguage) to launch Qt linguist * Translators write translations (stored in one .tr file per language) * Translators send modified version of .tr file back to us * Run lrelease() The lupdate tool parses the source code of the files specified in iep.pro and detects usages of any "translate()" function call. For translaters --------------- We send translaters a .tr file, which they translate using Qt linguist and then send back to us. About tooltips -------------- I like tooltips. And I think its best to specify them in the same string as the text/label that they apply to. In IEP we use the convention that a translation string can contain tooltips by writing three colons followed by the tooltip text: ``"This is a label ::: This is the tooltip text"`` The iep.translate function returns a string object that contains only the label text, but which has an attribute called "tt" that contains the tooltip text (or an empty string). In this way, in places where you do not need a tooltip, things behave as normal. In cases where you need a tooltip, things are now easier (especially for the translater). From the PyQt website --------------------- * The programmer uses pylupdate4 to create or update a .ts translation file for each language that the application is to be translated into. A .ts file is an XML file that contains the strings to be translated and the corresponding translations that have already been made. pylupdate4 can be run any number of times during development to update the .ts files with the latest strings for translation. * The translator uses Qt Linguist to update the .ts files with translations of the strings. * The release manager then uses Qt’s lrelease utility to convert the .ts files to .qm files which are compact binary equivalents used by the application. If an application cannot find an appropriate .qm file, or a particular string hasn’t been translated, then the strings used in the original source code are used instead. iep-3.7/iep/resources/translations/iep_nl_NL.tr.qm0000664000175000017500000011404212346015775022522 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½ÝBY¾7ŸT„'K±»ºÐ% ãÖT%Êì0&ªf¾0ªÀ|aÏÇIˆ$þ"z‰.Yì,C—Z§›[f3GP`/D0…¢€eŽ1‚Ón'ø—ÝþëG~y¤Ú‘¬±‚wð!>­ðxÞg >4 Ð¥y=#óÀ{á?´N8wETÎ9|eöžJ¾f@'KXp^,+’€®M––ÁZ׬c>V_¯˜î#¸H@¦Ã2®PuéŸÞ 5íöîcðÍŽ6iü¨3l½Ü˜ÎÎj¶ãxå<36@,Þ[P[êþQqnuV¥p}.G„q^Ž5X}êŸ ºƒuCP&†¹~#ۢχ߱WE{3ÜŒvHc ”I§¾7ŠŽBŠ‹æÎ:³œc¸)¶@~)Oºr>XÁr¾ƒôåïéLÚø˜NNúEävùƒY6.  t²¸X8N7Í{²´Ž!㥠.)Ÿ¨L9Q®¬,¥?Ë|IŒËÏ~!õ®pˆøkµ0¥.Tm!F>%û$‡SQ&EnI·3 24b·ƒ<Sõn[Öa@>vèh+n“njÞ^ÛO½‹¼ð3ŒH5µ™sÕ°¾± üúöR>'î0Š6z>$<ô>fFUI<5ŽLö®3Y ž*<_pÔJîJ.`‹®qÛ³¯ ì¢6—W:²µ®zÎm>\Òô÷5y€1¾“óåì/Óe{V²”OqV²”v¡V¿~4é[†$Ç[¡î?àåþUÓ£°³I¤Øn¦yÃK„·"È9ËÿžS©ѯ€W~ÑÚXªÕjîÙjŽ?ˆáž=ƒÿûNDZA/%Pë_5Ñf?óM3jù^‰~yƱxÞ&Ï·ªþçå“ C Æþ/ þDÓ IxŽº J;Ài¿ w¢SIO £ 5‡ °Ön& רÎ/¯ Þ@Ù ð.e% Bñiy 5áî 7öþl˜ J€‡N· xáî(ë ”cã Ÿ]‹ ¡FÎ4 ãlÎcL ý¦>+ 3Êî„è e…Ï t®~4 …ËnF… ;nf1 ÔÉTe ý ó 0ôn;¾ t§ž-| —"AÊ °êîE¼ »sC^ »)Dà ˳¾1r ë¶ndM 5Î2« ˜i ñ äi h 0…£ Gn_ª MÙNRë Q¥î ã VžR Âú¾|ˆ ä?ÎYø ð‹Si&!ÿ‰×4[>`–\ñ¾t¬³>Z™»>Ha÷¶~C¿ü´n7 _ŽMýïaª (…²<¼^3ÅJ:ADVÃ×OoµþŠ{~ß”K!’ëNoH³YEµ®íÔàð`ÖÞŽ>ßDäYŠü.“ji‘q StackStackdebugBVoeg directory toe aan PythonpathAdd path to Python path filebrowserJWeet je zeker dat je wilt verwijderen$Are you sure that you want to delete filebrowser@Verander de naam van dit projectChange project name filebrowserTKlik de ster om de huidige dir op te slaan"Click star to bookmark current dir filebrowser*Kopier directorie pad Copy path filebrowser,Maak nieuwe directorieCreate new directory filebrowser$Maak nieuw bestandCreate new file filebrowserVerwijderenDelete filebrowserDupliceren Duplicate filebrowser&Bestandsnaam filterFilename filter filebrowser>Geef de naam voor de directorie#Give the name for the new directory filebrowserFGeef de naam van het nieuwe bestandGive the name for the new file filebrowserHGeef de nieuwe naam voor het bestandGive the new name for the file filebrowserVGa naar deze directorie in de huidige shell)Go to this directory in the current shell filebrowser"Importeer data...Import data... filebrowser&Hoofdlettergevoelig Match case filebrowser(Nieuwe project naam:New project name: filebrowser OpenenOpen filebrowser"Openen buiten IEPOpen outside IEP filebrowserProject naam Project name filebrowserProjecten: Projects: filebrowser RegExpRegExp filebrowser"Verwijder projectRemove project filebrowserHernoemenRename filebrowser&Laat zien in FinderReveal in Finder filebrowser"Zoek in bestandenSearch in files filebrowser,Zoek in subdirectoriesSearch in subdirs filebrowserDVoeg deze dir toe aan de projectenStar this directory filebrowserFVerwijder deze dir uit de projectenUnstar this directory filebrowserOver IEP)About IEP ::: More information about IEP.menu8Geavanceerde instellingen...4Advanced settings... ::: Configure IEP even further.menuStel een vraagAsk a question ::: Need help?menuŠAutocomplete keywords ::: De autocomple lijst laat ook keywords zien.DAutocomplete keywords ::: The autocompletion list includes keywords.menužAutomatisch inspringen ::: Inspringen bij een nieuwe regel na een dubbele punt.BAutomatically indent ::: Indent when pressing enter after a colon.menu.Kijk of er updates zijn7Check for updates ::: Are you using the latest version?menu:Verwijder alle {} breakpointsClear all {} breakpointsmenu$Maak scherm schoon"Clear screen ::: Clear the screen.menuLSluiten ::: Sluit het huidige bestand.!Close ::: Close the current file.menunAfsluiten ::: Stop de interpreter en sluit de shell af.8Close ::: Terminate the interpreter and close the shell.menu`Alles sluiten ::: Sluit alle geopende bestanden.Close all ::: Close all files.menulAnderen sluiten ::: Sluit alle bestanden behalve deze.-Close others::: Close all files but this one.menuCommentaar ::: Voeg een commentaar teken toe aan de geselecteerde regel.&Comment ::: Comment the selected line.menuKopieren1Copy ::: Copy the selected text to the clipboard.menuKnippenCut ::: Cut the selected text.menu\Debug verder: ga verder tot volgend breakpoint*Debug continue: proceed to next breakpointmenuFDebug volgende: ga een regel verder#Debug next: proceed until next linemenuVDebug return: ga verder tot function return#Debug return: proceed until returnsmenuFDebug instappen: ga een stap verder!Debug step into: proceed one stepmenulTerugspringen ::: Zet het inspringen een stap kleiner.&Dedent ::: Unindent the selected line.menujVerwijder regel ::: Verwijder de geselecteerde regel.)Delete line ::: Delete the selected line.menuBewerkenEditmenu,Bewerk sneltoetsen...;Edit key mappings... ::: Edit the shortcuts for menu items.menu¼Aanpassen shell configuraties... ::: Voeg shell configuraties toe en pas de eigenschappen aan.WEdit shell configurations... ::: Add new shell configs and edit interpreter properties.menu0Bewerk syntax stijlen...;Edit syntax styles... ::: Change the coloring of your code.menu’Pas autocompletion toe ::: Laat de autocompletion met bekende namen zien.?Enable autocompletion ::: Show autocompletion with known names.menu\Pas uitvoertips toe ::: Laat uitvoertips zien.;Enable calltips ::: Show calltips with function signatures.menuxCodering ::: The karakter codering voor het huidige bestand.8Encoding ::: The character encoding of the current file.menuZExecuteer cell ::: Executeer de huidige cell.IExecute cell ::: Execute the current editors's cell in the current shell.menuºExecuteer cell en ga verder ::: Executeer de huidige cell en ga verder naar de volgende cell.]Execute cell and advance ::: Execute the current editors's cell and advance to the next cell.menuhExecuteer bestand ::: Executeer het huidige bestand.?Execute file ::: Execute the current file in the current shell.menu–Executeer main bestand ::: Executeer het main bestand in de huidige shell. AExecute main file ::: Execute the main file in the current shell.menu$Executeer selectie ::: Executeer de geselecteerde regels, de geselecteerde text op de huidige regel, of the huidige regel als er geen selectie is.Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection.menuBestandFilemenu€Vind volgende ::: Vind het volgende voorkomen van de zoek tekst. IEP wizard'3This wizard can be opened using 'Help > IEP wizard'wizardNDeze wizard helpt je op de weg met IEP.@This wizard helps you get familiarized with the workings of IEP.wizardGereedschapTools for your conveniencewizardRVia 'Shell > Aanpasses shell configuraties' kan je *shell configuraties* aanpassen en toevoegen. Zo kun je bijvoorbeeld de start directorie insteller, of het Pythonpath.¾Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath.wizardtVia het *gereedschap menu* kan je eenvoudig selecteren wel gereedschap je wilt gebruiken. Het gereedschap besaat uit kleine schermen die naar eigen voorkeur gepositioneerd kunnen worden.ŒVia the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked.wizardbWe raden met name de volgende gereedschappen aan:,We especially recommend the following tools:wizard\Welkom bij de Interactieve Editor voor Python!-Welcome to the Interactive Editor for Python!wizardBAls IEP start, wordt er een standaard *shell* gemaakt. Je kan zelf shells toevoegen, welke simultaan draaien en ook van verschillende Python versies kunnen zijn.žWhen IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions.wizardbJe kan commandos direct in the *shell* uitvoeren.1You can execute commands directly in the *shell*,wizardBJe kan het huidige bestand of de main file normaal uitvoeren, of als script. In het laatste geval wordt de shell eerst herstart om een schone omgeving te realizeren. Ook wordt de shell anders geinitializeerd zodat het gedrag overeenkomt met het normaal uitvoeren van een script in Python. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution.wizard’of je kan je code in the *editor* schrijven en deze vervolgens uitvoeren.7or you can write code in the *editor* and execute that.wizardˆiep-3.7/iep/resources/translations/iep_pt_PT.tr0000664000175000017500000016151012473035672022133 0ustar almaralmar00000000000000 debug Stack Montão filebrowser Filename filter filtro do nome do arquivo Search in files Procurar em ficheiros Projects: Projetos: Click star to bookmark current dir Clique estrela para marcar o seu favorito corrente dir Remove project Remover projeto Change project name Alterar nome do projeto Add path to Python path Adicionar caminho para Python caminho Go to this directory in the current shell Vá para este diretório no shell corrente Project name New project name: Novo nome do projeto: Match case maiúsculas de minúsculas RegExp Expressão regular Search in subdirs Procurar em subdiretórios Unstar this directory Remover estrela este diretório Star this directory Estrela este diretório Open Abrir Open outside IEP Abrir fora da IEP Reveal in Finder Revelar no Finder Copy path Copiar caminho Import data... Importar dados ... Rename Renomear Delete Apagar Create new file Criar novo arquivo Create new directory Criar novo diretório Give the new name for the file Dê um novo nome para o arquivo Give the name for the new directory Dar um nome para o novo diretório Duplicate duplicar Give the name for the new file Dar um nome para o novo arquivo Are you sure that you want to delete Você tem certeza que deseja deletar Run as script menu File Arquivo Edit editar View Vista Settings Configurações Shell Concha Run Corrida Tools Ferramentas Help Ajudar Use tabs Utilize os separadores Use spaces Utilize espaços spaces plural of spacebar character espaços Indentation ::: The indentation used of the current file. Recuo ::: O recuo usado do arquivo atual. Syntax parser ::: The syntax parser of the current file. Sintaxe parser ::: O analisador de sintaxe do arquivo atual. Line endings ::: The line ending character of the current file. Finais de linha ::: A linha de caracteres do arquivo atual de término. Encoding ::: The character encoding of the current file. Codificação ::: A codificação de caracteres do arquivo atual. New ::: Create a new (or temporary) file. Novo ::: Criar um novo (ou temporária) de arquivos. Open... ::: Open an existing file from disk. Abrir ... ::: Abra um arquivo existente do disco. Save ::: Save the current file to disk. Salve ::: Salve o arquivo atual no disco. Save as... ::: Save the current file under another name. Salvar como ... ::: Salve o arquivo atual com outro nome. Save all ::: Save all open files. Salve todo ::: Salve todos os arquivos abertos. Close ::: Close the current file. Fechar ::: Feche o arquivo atual. Close all ::: Close all files. Feche todos ::: Fechar todos os arquivos. Restart IEP ::: Restart the application. Restart IEP ::: Reinicie o aplicativo. Quit IEP ::: Close the application. Saia do IEP ::: Feche o aplicativo. Undo ::: Undo the latest editing action. Desfazer ::: Desfazer a última ação de edição. Redo ::: Redo the last undone editong action. Refazer ::: Refazer a última ação editong desfeita. Cut ::: Cut the selected text. Cortar ::: Cortar o texto selecionado. Copy ::: Copy the selected text to the clipboard. Copiar ::: Copie o texto selecionado para a área de transferência. Paste ::: Paste the text that is now on the clipboard. Cole ::: Cole o texto que está agora na área de transferência. Select all ::: Select all text. Selecionar todos ::: Selecione todo o texto. Indent ::: Indent the selected line. Recuo ::: recuo da linha selecionada. Dedent ::: Unindent the selected line. Dedent ::: Unindent da linha selecionada. Comment ::: Comment the selected line. Comentário ::: Comente a linha selecionada. Uncomment ::: Uncomment the selected line. Descomente ::: Remova o comentário da linha selecionada. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Justificar comentário / docstring ::: Remodelar o texto selecionado para que ele está alinhado com cerca de 70 caracteres. Go to line ::: Go to a specific line number. Ir para linha ::: Ir para um número de linha específico. Delete line ::: Delete the selected line. Apagar linha ::: Apagar a linha selecionada. Find or replace ::: Show find/replace widget. Initialize with selected text. Localizar ou substituir ::: Mostrar localizar / substituir widget. Inicializar com o texto selecionado. Find selection ::: Find the next occurrence of the selected text. Encontre seleção ::: Localizar a próxima ocorrência do texto selecionado. Find selection backward ::: Find the previous occurrence of the selected text. Encontre seleção backward ::: Localizar a ocorrência anterior do texto selecionado. Find next ::: Find the next occurrence of the search string. Localizar próxima ::: Localizar a próxima ocorrência da seqüência de pesquisa. Find previous ::: Find the previous occurrence of the search string. Encontre anterior ::: Localizar a ocorrência anterior da seqüência de pesquisa. Zoom in ampliar Zoom out Diminuir o zoom Zoom reset redefinição Zoom Location of long line indicator ::: The location of the long-line-indicator. Localização do indicador de linha longa ::: A localização do indicador de longo-line. Qt theme ::: The styling of the user interface widgets. Qt tema ::: O estilo dos widgets de interface de usuário. Select shell ::: Focus the cursor on the current shell. Selecione shell ::: Foco o cursor sobre o shell atual. Select editor ::: Focus the cursor on the current editor. Selecione editor ::: Foco o cursor sobre o editor atual. Select previous file ::: Select the previously selected file. Selecione o arquivo anterior ::: Selecione o arquivo selecionado anteriormente. Show whitespace ::: Show spaces and tabs. Mostrar espaço em branco ::: Mostrar espaços e tabulações. Show line endings ::: Show the end of each line. Terminações Mostrar linha ::: Mostrar ao final de cada linha. Show indentation guides ::: Show vertical lines to indicate indentation. Mostrar recuo orienta ::: Mostrar linhas verticais para indicar recuo. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Enrole longas filas ::: linhas envoltório que não cabem na tela (ou seja, sem a rolagem horizontal). Highlight current line ::: Highlight the line where the cursor is. Destaque linha atual ::: Selecione a linha onde está o cursor. Font fonte Zooming zunir Clear screen ::: Clear the screen. Limpar ecrã ::: Limpe a tela. Interrupt ::: Interrupt the current running code (does not work for extension code). Interromper ::: Interromper o código de execução atual (não funciona para o código de extensão). Restart ::: Terminate and restart the interpreter. Reinicie ::: Encerrar e reiniciar o intérprete. Terminate ::: Terminate the interpreter, leaving the shell open. Terminar ::: Terminar o intérprete, deixando a casca. Close ::: Terminate the interpreter and close the shell. Fechar ::: Terminar o intérprete e fechar a shell. Debug next: proceed until next line Depurar seguinte: continue até a próxima linha Debug step into: proceed one step Retorno Depurar: Prosseguir Ate a Volta Debug return: proceed until returns Depurar retorno: prosseguir até a volta Debug continue: proceed to next breakpoint Depurar continuar: proceder ao próximo ponto de interrupção Stop debugging Pare de depuração Clear all {} breakpoints Limpe todos os {} pontos de interrupção Postmortem: debug from last traceback Postmortem: debug do último rastreamento Edit shell configurations... ::: Add new shell configs and edit interpreter properties. Editar configurações do shell ... ::: Adicionar novas configs shell e editar as propriedades do intérprete. New shell ... ::: Create new shell to run code in. New shell ... ::: Criar novo shell para executar um código dentro. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Seleção Corrida ::: Corrida linhas do editor atual selecionados, palavras selecionadas na linha atual, ou a linha atual se não houver nenhuma seleção. Close others::: Close all files but this one. Fechar outros ::: Fechar todos os arquivos, mas este. Rename ::: Rename this file. Renomeie ::: Renomeie esse arquivo. Pin/Unpin ::: Pinned files get closed less easily. Arquivos Pin / Unpin ::: Fixado ficar fechado menos facilmente. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Activado / desactivado como arquivo principal ::: O arquivo principal pode ser executado enquanto um outro arquivo é selecionado. Run file ::: Run the code in this file. Corrida arquivo ::: Execute o código neste arquivo. Run file as script ::: Run this file as a script (restarts the interpreter). Corrida arquivo como script ::: Corrida o arquivo como um script (reinicia o intérprete). Run file as script ::: Restart and run the current file as a script. Corrida arquivo como script ::: Restart e execute o arquivo atual como um script. Run main file as script ::: Restart and run the main file as a script. Corrida arquivo principal como script ::: Reinicie e execute o arquivo principal como um script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Executar seleção ::: Executar linhas do editor atual selecionados, palavras selecionadas na linha atual, ou a linha atual se não houver nenhuma seleção. Execute cell ::: Execute the current editors's cell in the current shell. Executar celular ::: Executar célula do atual editores no shell atual. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Executar celular e avanço ::: Executar celular e avanço do atual editores para a próxima célula. Execute file ::: Execute the current file in the current shell. Executa o ficheiro ::: Execute o arquivo atual no shell atual. Execute main file ::: Execute the main file in the current shell. Executa o ficheiro principal ::: Execute o arquivo principal no shell atual. Help on running code ::: Open the IEP wizard at the page about running code. Ajuda sobre a execução de código ::: Abra o assistente IEP na página sobre a execução de código. Reload tools ::: For people who develop tools. Atualizar ferramentas ::: Para as pessoas que desenvolvem ferramentas. Pyzo Website ::: Open the Pyzo website in your browser. Pyzo Site ::: Abra o site da Pyzo no seu browser. IEP Website ::: Open the IEP website in your browser. IEP Site ::: Abra o site do IEP no seu browser. Ask a question ::: Need help? Faça uma pergunta ::: precisar de ajuda? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? Identificar um problema ::: Você encontrou um bug no IEP, ou você tem um pedido de recurso? IEP wizard ::: Get started quickly. Assistente IEP ::: Comece rapidamente. Check for updates ::: Are you using the latest version? Verificar atualizações ::: Você está usando a versão mais recente? About IEP ::: More information about IEP. Sobre o IEP ::: Mais informações sobre IEP. Select language ::: The language used by IEP. Selecione o idioma ::: A linguagem utilizada pelo IEP. Automatically indent ::: Indent when pressing enter after a colon. Automaticamente travessão ::: recuo ao pressionar enter depois de dois pontos. Enable calltips ::: Show calltips with function signatures. Ativar calltips ::: Mostrar calltips com assinaturas de função. Enable autocompletion ::: Show autocompletion with known names. Ativar autocompletar ::: Mostrar autocompletar com nomes conhecidos. Autocomplete keywords ::: The autocompletion list includes keywords. Palavras preenchimento automático ::: A lista inclui autocompletar palavras. Edit key mappings... ::: Edit the shortcuts for menu items. Edite mapeamentos de teclas ... ::: Edite os atalhos para os itens do menu. Edit syntax styles... ::: Change the coloring of your code. Editar estilos de sintaxe ... ::: Mude a cor do seu código. Advanced settings... ::: Configure IEP even further. Configurações avançadas ... ::: Configure IEP ainda mais. Export to PDF ::: Export current file to PDF (e.g. for printing). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Goto Definition ::: Go to definition of word under cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. menu dialog Could not run Não foi possível executar Could not run script. Não foi possível executar script. Check for the latest version. Verifique se a versão mais recente. Edit syntax styling Editar sintaxe estilo Advanced settings configurações avançadas The language has been changed. IEP needs to restart for the change to take effect. O idioma foi mudado. IEP precisa ser reiniciado para que as alterações tenham efeito. Language changed Idioma alterado Edit shortcut mapping Mapeamento Editar atalho Shortcut mappings mapeamentos de atalho Manage IEP license keys Gerenciar as chaves de licença do IEP Add license key Adicionar chave de licença search Hide search widget (Escape) Esconder widget de busca (Escape) Find pattern Encontre padrão Previous ::: Find previous occurrence of the pattern. Anterior ::: Localizar ocorrência anterior do padrão. Next ::: Find next occurrence of the pattern. Próxima ::: Localizar próxima ocorrência do padrão. Replace pattern Substituir padrão Repl. all ::: Replace all matches in current document. Subst. todos ::: Substitua todas as partidas em documento atual. Replace ::: Replace this match. Substitua ::: Substituir este jogo. Match case ::: Find words that match case. Maiúsculas de minúsculas ::: Encontre palavras que correspondem caso. RegExp ::: Find using regular expressions. RegExp ::: Encontre usando expressões regulares. Whole words ::: Find only whole words. Palavras inteiras ::: encontrar somente palavras inteiras. Auto hide ::: Hide search/replace when unused for 10 s. Esconder Auto ::: Esconder busca / substituição quando não for utilizado por 10 s. shell name ::: The name of this configuration. nomear ::: O nome desta configuração. ipython ::: Use IPython shell if available. ipython ::: Use IPython shell if available. Use system default Utilize padrão do sistema File to run at startup Arquivo para executar na inicialização Code to run at startup Código para executar na inicialização exe ::: The Python executable. exe ::: O executável Python. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). gui ::: O kit de ferramentas GUI para integrar (para plotagem interativo, etc.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. PythonPath ::: A lista de diretórios para procurar por módulos e pacotes. Escreva cada caminho em uma nova linha, ou separar com o separador padrão para este sistema operacional. startupScript ::: The script to run at startup (not in script mode). StartupScript ::: O script para ser executado na inicialização (não no modo de script). startDir ::: The start directory (not in script mode). startDir ::: O diretório de partida (não no modo de script). argv ::: The command line arguments (sys.argv). argv ::: Os argumentos de linha de comando (sys.argv). environ ::: Extra environment variables (os.environ). ambiente ::: variáveis ​​de ambiente extra (os.environ). Delete ::: Delete this shell configuration Excluir ::: Apagar esta configuração shell Shell configurations configurações Concha Add config Adicionar configuração wizard Getting started with IEP Começando com o IEP Step passo Welcome to the Interactive Editor for Python! Bem-vindo ao editor interativo para Python! This wizard helps you get familiarized with the workings of IEP. Este assistente ajuda você a se familiarizar com o funcionamento do IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. IEP é um multi-plataforma Python IDE focada em * interatividade * e * introspecção *, o que torna muito adequado para computação científica. Seu design prático destina-se a * simplicidade * e * eficiência *. This wizard can be opened using 'Help > IEP wizard' Este assistente pode ser aberto usando o 'Assistente Ajudar> IEP' Show this wizard on startup Mostrar este assistente no arranque Select language Selecione o idioma The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. O idioma foi mudado para este assistente. IEP precisa ser reiniciado para que as alterações entrem em vigor em toda a aplicação. Language changed Idioma alterado IEP consists of two main components IEP é constituído por dois componentes principais You can execute commands directly in the *shell*, Você pode executar comandos diretamente no shell * * or you can write code in the *editor* and execute that. ou você pode escrever código no * editor * e executar isso. The editor is where you write your code O editor é onde você escreve seu código In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. No * editor *, cada arquivo aberto é representado como um guia. Clicando com o botão direito em uma guia, os arquivos podem ser executados, salvo, fechado, etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. O botão direito do mouse também permite que se faça um arquivo * o arquivo principal * de um projeto. Este arquivo pode ser reconhecida por seu símbolo estrela, e permite executar o arquivo com mais facilidade. The shell is where your code gets executed A casca é onde o código é executado When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Quando começa IEP, um padrão * shell * é criado. Você pode adicionar mais conchas que são executados simultaneamente, e que podem ser de diferentes versões do Python. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Shells são executados em um sub-processo, de modo que quando ele está ocupado, o próprio IEP permanece ágil, permitindo-lhe manter a codificação e até mesmo executar o código em outro shell. Configuring shells Configurando conchas IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. IEP pode integrar o ciclo de eventos de cinco diferentes kits de ferramentas GUI * *, permitindo assim plotagem interativa com eg Visvis ou Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Via 'Concha configurações> Editar shell', você pode editar e adicionar * configurações do shell *. Isto permite-lhe, por exemplo, selecione o diretório inicial, ou usar um PythonPath personalizado. Running code código em execução IEP supports several ways to run source code in the editor. (see the 'Run' menu). IEP suporta várias formas de executar o código-fonte no editor. (veja o menu "Executar"). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. * Seleção de execução: * se não houver texto selecionado, a linha atual é executado, se a seleção é em uma única linha, a seleção é avaliada, se a seleção se estende por várias linhas, IEP vai executar os os (completos) linhas selecionadas. *Run cell:* a cell is everything between two lines starting with '##'. * Célula de execução: * a célula é tudo entre duas linhas que começam com '# #'. *Run file:* run all the code in the current file. * Arquivo de execução: * executar todo o código no arquivo atual. *Run project main file:* run the code in the current project's main file. * Arquivo principal projeto Run: * executar o código no arquivo principal do projeto atual. Interactive mode vs running as script O modo interativo vs executado como roteiro You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. Você pode executar o arquivo atual ou o arquivo principal normalmente, ou como um script. Quando executado como script, o shell é restared para proporcionar um ambiente limpo. O escudo também é inicializado de forma diferente, de modo que ela se assemelhe a execução normal do script. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. No modo interativo, sys.path [0] é uma cadeia vazia (ou seja, o diretório atual) e sys.argv está definido para ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. No modo de script, __ file__ e sys.argv [0] são definidas para o nome do arquivo scripts, sys.path [0] eo diretório de trabalho são definidas para o diretório que contém o script. Tools for your convenience Ferramentas para a sua conveniência Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Via o * menu Ferramentas *, pode-se selecionar quais ferramentas usar. As ferramentas podem ser posicionados em qualquer maneira que você quiser, e também pode ser un-encaixado. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Note-se que o sistema de ferramentas é projetado de tal forma que é fácil criar suas próprias ferramentas. Olhe para o wiki on-line para obter mais informações, ou utilizar uma das ferramentas existentes como exemplo. Recommended tools ferramentas recomendadas We especially recommend the following tools: Recomendamos especialmente as seguintes ferramentas: The *Source structure tool* gives an outline of the source code. O * estrutura ferramenta Fonte * dá um esboço do código fonte. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. A ferramenta * navegador Arquivo * ajuda a manter uma visão geral de todos os arquivos em um diretório. Para gerenciar seus projetos, clique no ícone de estrela. Get coding! Obter codificação! This concludes the IEP wizard. Now, get coding and have fun! Isto conclui o assistente IEP. Agora, começar a codificação e divirta-se! iep-3.7/iep/resources/translations/iep_zh_CN.tr.qm0000664000175000017500000000002012346015775022507 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½Ýiep-3.7/iep/resources/translations/iep_fr_FR.tr0000664000175000017500000016605112475544606022114 0ustar almaralmar00000000000000 debug Stack Pile filebrowser Filename filter Filtre Search in files Rechercher dans les fichiers Projects: Projets : Click star to bookmark current dir Cliquez sur l'étoile pour ajouter le répertoire à la liste des projets Remove project Enlever de la liste des projets Change project name Renommer le projet Add path to Python path Ajouter le chemin au path de Python Project name Nom du projet New project name: Nouveau nom du projet : Match case Respecter la casse RegExp Recherche avec une expression rationelle Search in subdirs Rechercher dans les sous-répertoires Unstar this directory Enlever ce répertoire de la liste des projets Star this directory Ajouter ce répertoire à la liste des projets Open Ouvrir Open outside IEP Ouvrir à l'extérieur d'IEP Reveal in Finder Ouvrir dans le Finder Copy path Copier le nom complet (chemin) du fichier Rename Renommer Delete Effacer Create new file Nouveau fichier Create new directory Nouveau dossier Give the new name for the file Nouveau nom du fichier Give the name for the new directory Nom du nouveau dossier Duplicate Faire une copie Give the name for the new file Nom du nouveau fichier Are you sure that you want to delete Êtes-vous sûr de vouloir effacer Go to this directory in the current shell Aller dans ce dossier (shell courant) Import data... Importer un fichier de données... Run as script Exécuter en tant que script menu File Fichier Edit Édition View Affichage Settings Paramètres Shell Shell Run Exécuter Tools Outils Help Aide Use tabs Utiliser des tabulations Use spaces Utiliser des espaces spaces plural of spacebar character espaces Indentation ::: The indentation used of the current file. Indentation ::: Indentation utilisée pour le fichier courant. Syntax parser ::: The syntax parser of the current file. Analyse syntaxique ::: Analyseur du fichier courant. Line endings ::: The line ending character of the current file. Fins de ligne ::: Caractère de fin de ligne pour le fichier courant. Encoding ::: The character encoding of the current file. Encodage ::: Encodage du fichier courant. New ::: Create a new (or temporary) file. Nouveau ::: Crée un nouveau fichier (ou un fichier temporaire). Open... ::: Open an existing file from disk. Ouvrir... ::: Ouvre un fichier sur le disque. Save ::: Save the current file to disk. Enregistrer ::: Enregistre le fichier courant sur le disque. Save as... ::: Save the current file under another name. Enregistrer sous... ::: Enregistre le fichier sous un autre nom. Save all ::: Save all open files. Tout Enregistrer ::: Enregistre tous les fichiers ouverts. Close ::: Close the current file. Fermer ::: Ferme le fichier courant. Close all ::: Close all files. Tout fermer ::: Ferme tous les fichiers. Restart IEP ::: Restart the application. Redémarrer IEP ::: Redémarre l'application. Quit IEP ::: Close the application. Quitter IEP ::: Ferme l'application. Undo ::: Undo the latest editing action. Annuler ::: Annule la dernière opération d'édition. Redo ::: Redo the last undone editong action. Recommencer ::: Refait la dernière action d'édition annulée. Cut ::: Cut the selected text. Couper ::: Coupe le texte sélectionné. Copy ::: Copy the selected text to the clipboard. Copier ::: Copie le texte sélectionné dans le presse-papier. Paste ::: Paste the text that is now on the clipboard. Coller ::: Colle le texte qui est dans le presse-papier. Select all ::: Select all text. Tout sélectionner ::: Sélectionne tout le texte. Indent ::: Indent the selected line. Indenter ::: Indente la ligne sélectionnée. Dedent ::: Unindent the selected line. Dédenter ::: Supprime l'indentation de la ligne sélectionnée. Comment ::: Comment the selected line. Commenter ::: Commente la ligne sélectionnée. Uncomment ::: Uncomment the selected line. Décommenter ::: Décommente la ligne sélectionnée. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Justifier les commentaires/docstrings ::: Remet en forme le texte sélectionné en lignes de 70 caractères environ. Go to line ::: Go to a specific line number. Aller à la ligne ::: Va à un numéro de ligne spécifique. Delete line ::: Delete the selected line. Effacer la ligne ::: Efface la ligne sélectionnée. Find or replace ::: Show find/replace widget. Initialize with selected text. Rechercher et remplacer ::: Affiche la boîte rechercher/remplacer. L'initialise avec le texte sélectionné. Find selection ::: Find the next occurrence of the selected text. Rechercher la sélection ::: Recherche la prochaine occurence du texte sélectionné. Find selection backward ::: Find the previous occurrence of the selected text. Rechercher la sélection en arrière ::: Recherche l'occurence précédente du texte sélectionné. Find next ::: Find the next occurrence of the search string. Rechercher suivant ::: Recherche la prochaine occurence de la chaîne. Find previous ::: Find the previous occurrence of the search string. Rechercher précédent ::: Recherche l'occurence précédente de la chaîne. Zoom in Zoomer Zoom out Dézommer Zoom reset Réinitialiser le zoom Location of long line indicator ::: The location of the long-line-indicator. Emplacement de l'indicateur de ligne trop longue ::: Emplacement du long-line-indicator. Qt theme ::: The styling of the user interface widgets. Thème QT ::: Style des widgets de l'interface. Select shell ::: Focus the cursor on the current shell. Aller dans le Shell ::: Donne le focus au shell courant. Select editor ::: Focus the cursor on the current editor. Aller dans l'éditeur ::: Donne le focus à l'éditeur courant. Select previous file ::: Select the previously selected file. Aller au fichier précédent ::: Donne le focus au fichier précédent. Show whitespace ::: Show spaces and tabs. Afficher les espaces ::: Affiche les espaces et les caractères de tabulation. Show line endings ::: Show the end of each line. Afficher les fins de lignes ::: Affiche la fin de chaque ligne. Show indentation guides ::: Show vertical lines to indicate indentation. Afficher les guide d'indentation ::: Affiche des lignes verticales pour visualiser l'indentation. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Couper les lignes trop longues ::: Coupe les lignes qui ne tiennent pas sur l'écran (pas de défilement horizontal). Highlight current line ::: Highlight the line where the cursor is. Mettre en évidence la ligne courante ::: Met en surbrillance la ligne qui contient le curseur. Font Police de caractères Zooming Zoom Clear screen ::: Clear the screen. Effacer l'écran ::: Efface l'écran. Interrupt ::: Interrupt the current running code (does not work for extension code). Interrompre ::: Arrêter l'exécution (ne fonctionne pas pour les extensions). Restart ::: Terminate and restart the interpreter. Redémarrer ::: Arrête puis redémarre l'interpréteur. Terminate ::: Terminate the interpreter, leaving the shell open. Terminer ::: Arrête l'interpréteur et laisse le shell ouvert. Close ::: Terminate the interpreter and close the shell. Fermer ::: Arrête l'interpréteur et ferme le shell. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. Configuration des shells ::: Ajoute des shells, et modifie les paramètres de l'interpréteur. New shell ... ::: Create new shell to run code in. Nouveau shell... ::: Crée un nouveau shell. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Exécuter la sélection ::: Exécute les lignes sélectionnées dans l'éditeur, une partie de la ligne courante, ou la ligne courante entière si la sélection est vide. Close others::: Close all files but this one. Fermer les autres onglets ::: Ferme tous les fichiers sauf celui-ci. Rename ::: Rename this file. Renommer ::: Renomme ce fichier. Pin/Unpin ::: Pinned files get closed less easily. Ajouter/Enlever un épingle ::: Les fichiers épinglés sont moins facilement fermés. Set/Unset as MAIN file ::: The main file can be run while another file is selected. (Dé)sélectionner comme fichier principal (MAIN) ::: Le fichier principal peu être exécuté alors qu'un autre fichier est sélectionné. Run file ::: Run the code in this file. Exécuter le fichier ::: Exécute le code de ce fichier. Run file as script ::: Run this file as a script (restarts the interpreter). Exécuter en tant que script ::: Exécute ce fichier comme un script (redémarre l'interpréteur). Help on running code ::: Open the IEP wizard at the page about running code. Aide sur l'exécution du code ::: Ouvre le guide d'IEP à la page sur l'exécution de code. Reload tools ::: For people who develop tools. Recharger les outils ::: Pour ceux qui développent des outils. Pyzo Website ::: Open the Pyzo website in your browser. Site Web de Pyzo ::: Ouvre le site web de Pizo dans le navigateur. IEP Website ::: Open the IEP website in your browser. Site Web d'IEP ::: Ouvre le site web d'IEP dans le navigateur. Ask a question ::: Need help? Poser une question ::: Besoin d'aide ? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? Reporter un problème ::: Vous avez trouvé un bug dans IEP ? Vous demandez une nouvelle fonctionnalité ? IEP wizard ::: Get started quickly. Guide IEP ::: Démarrer rapidement. Check for updates ::: Are you using the latest version? Rechercher des mises à jour ::: Utilisez-vous la dernière version ? About IEP ::: More information about IEP. À propos d'IEP ::: Plus d'informations sur IEP. Select language ::: The language used by IEP. Choisir la langue ::: Langue utilisée par IEP. Automatically indent ::: Indent when pressing enter after a colon. Indentation automatique ::: Indente automatiquement lors d'un passage à la ligne après deux point. Enable calltips ::: Show calltips with function signatures. Activer les bulles d'aides ::: Affiche les bulles d'aide avec le prototype des fonctions. Enable autocompletion ::: Show autocompletion with known names. Activer la complétion automatique ::: Affiche des proposition de complétion automatique. Autocomplete keywords ::: The autocompletion list includes keywords. Complétion automatique des mots clés ::: La liste de complétion automatique contient aussi les mots clés. Edit key mappings... ::: Edit the shortcuts for menu items. Éditer les racourcis... ::: Modifie les raccourcis pour accéder aux éléments des menus. Edit syntax styles... ::: Change the coloring of your code. Éditer les style du code... ::: Modifie la coloration syntaxique du code. Advanced settings... ::: Configure IEP even further. Paramètres avancés ::: Permet de configurer encore plus IEP. Debug next: proceed until next line Débugage pas à pas principal (next) Debug return: proceed until returns Débugage pas à pas sortant Debug continue: proceed to next breakpoint Débugage : exécuter jusqu'à prochain point d'arrêt Stop debugging Arrêter le débugage Clear all {} breakpoints Effacer tous les points d'arrêt Postmortem: debug from last traceback Postmortem : débuguer à partir de la dernière pile des appels Debug step into: proceed one step Débugage pas à pas entrant (step) Run file as script ::: Restart and run the current file as a script. Démarrer le script ::: Redémarre le shell et exécute le fichier courant en tant que script. Run main file as script ::: Restart and run the main file as a script. Démarrer le script principal::: Redémarre le shell et exécute le fichier principal en tant que script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Exécuter la sélection ::: Exécute les instructions, les lignes sélectionnées dans l'éditeur ou la ligne courante (en l'absence de sélection). Execute cell ::: Execute the current editors's cell in the current shell. Exécuter la cellule ::: Exécute la cellule courante dans le shell courant. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Exécute la cellule et avancer ::: Exécute la cellule courante dans le shell courant et passe à la cellule suivante. Execute file ::: Execute the current file in the current shell. Exécuter le fichier ::: Exécute le fichier courant dans le shell courant. Execute main file ::: Execute the main file in the current shell. Exécuter le fichier principal ::: Exécute le fichier principal dans le shell courant. Export to PDF ::: Export current file to PDF (e.g. for printing). Exporter au format PDF ::: Exporte le fichier courant au format PDF (pour imprimer par exemple). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Coller et sélectionner ::: Colle le contenu du presse-papier et conserve la sélection pour en modifier l'indentation. Previous cell ::: Go back to the previous cell. Cellule précédente ::: Retourne à la cellule précédente. Next cell ::: Advance to the next cell. Cellule suivante ::: Passe à la cellule suivante. Previous object ::: Go back to the previous top-level structure. Not sure what this menu item is used for.... Objet précédent ::: Retourne à l'élément de plus haut niveau précédent. Next object ::: Advance to the next top-level structure. Objet suivant ::: Passe à l'élement de plus haut niveau suivant. Goto Definition ::: Go to definition of word under cursor. Aller à la définition ::: Va à la définition du symbole situé sous le curseur. Pyzo docs ::: Documentation on Python and the Scipy Stack. Documentation Pyzo ::: Documentation sur Python et Scipy. menu dialog Could not run Impossible de lancer l'exécution Could not run script. Impossible de lancer l'exécution du script. Check for the latest version. Rechercher la dernière version. Edit syntax styling Modifier la coloration syntaxique Advanced settings Paramètres avancés The language has been changed. IEP needs to restart for the change to take effect. La langue a été modifiée. Redémarrez IEP pour rendre les changements effectifs. Language changed Langue modifiée Edit shortcut mapping Édition des raccourcis clavier Shortcut mappings Raccourcis clavier Manage IEP license keys Gérer la clé de licence IEP Add license key Ajouter une clé de licence search Hide search widget (Escape) Cacher le widget de recherche (Escape) Find pattern Recherche un motif Previous ::: Find previous occurrence of the pattern. Précédent ::: Recherche l'occurence précédente du motif. Next ::: Find next occurrence of the pattern. Suivant ::: Recherche la prochaine occurence du motif. Replace pattern Remplacer le motif Repl. all ::: Replace all matches in current document. Tout remplacer ::: Remplace toutes les occurences dans le document courant. Replace ::: Replace this match. Remplacer ::: Remplace cette occurrence. Match case ::: Find words that match case. Respecter la casse ::: Recherche des mots en respectant la casse. RegExp ::: Find using regular expressions. Expression Rationnelle ::: Rechercher avec des expressions rationnelles. Whole words ::: Find only whole words. Mots complets ::: Recherche uniquement des mots complets. Auto hide ::: Hide search/replace when unused for 10 s. Affichage/Disparition automatique ::: Cache Rechercher/Remplacer s'il n'ets pas utilisé pendant 10s. shell Use system default Configuration par défaut du système name ::: The name of this configuration. nom ::: Nom de la configuration. exe ::: The Python executable. exe ::: Exécutable Python. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). Gui ::: Intégration d'un toolkit graphique (GUI toolkit) (pour tracer des courbes de manière interactive etc.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. pythonPath ::: Liste des répertoires dans lesquels rechercher des module et paquetages. Chaque chemin doit figurer sur une ligne, ou être séparé des autres par le séparateur par défaut du système. startupScript ::: The script to run at startup (not in script mode). startupScript ::: Script à exécuter au démarrage (ne s'applique pas lors de l'exécution en tant que script). startDir ::: The start directory (not in script mode). startDir ::: Répertoire de démarrage (ne s'applique pas lors de l'exécution en tant que script). Delete ::: Delete this shell configuration Supprimer ::: Supprimer ce shell Shell configurations Configurations du shell Add config Ajouter une configuration ipython ::: Use IPython shell if available. IPython ::: Utilise IPython s'il est disponible. File to run at startup Fichier à exécuter au démarrage Code to run at startup Code à exécuter au démarrage argv ::: The command line arguments (sys.argv). argv ;:; Arguments en ligne de commande (sys.argv). environ ::: Extra environment variables (os.environ). environ ::: Variables d'environnement (os.environ). wizard Getting started with IEP Démarrer avec IEP Step Étape Welcome to the Interactive Editor for Python! Bienvenue dans IEP (Interactive Editor for Python)! This wizard helps you get familiarized with the workings of IEP. Ce guide va vous aider à vous familiariser avec IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. IEP est un EDI Python multi plate-forme qui met l'accent sur l'*interactivité* et l'*introspection*, ce qui le rend très adapté à un usage scientifique. Son design est axé vers la *simplicité* et l'*efficacité*. This wizard can be opened using 'Help > IEP wizard' Ce guide peut être ouvert via 'Aide>Guie IEP' Show this wizard on startup Afficher ce guide au démarrage Select language Choisir une langue The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. La langue de ce guide a été modifiée. IEP doit être redémarré pour que la modification prenne effet dans toute l'application. Language changed Langue modifiée IEP consists of two main components IEP est constitué de deux composants principaux You can execute commands directly in the *shell*, Vous pouvez exécuter des commandes directement dans le *shell*, or you can write code in the *editor* and execute that. ou vous pouvez écrire du code dans l'*éditeur* et l'exécuter. The editor is where you write your code L'éditeur est l'endroit où vous écrivez le code In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. Dans l'*éditeur*, chaque fichier ouvert est représenté par un onglet. En faisant un clic droit sur l'onglet, le fichier correspondant peut être exécuté, sauvegardé, fermé etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. Le bouton droit de la souris permet aussi de paramétrer le fichier comme *fichier principal* du projet. Ce fichier peut être repéré par le symbole étoile, et cela permet de l'exécuter plus facilement. The shell is where your code gets executed Le shell est l'endroit où* le code est exécuté When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Quand IEP démarre, un *shell* par défaut est créé. Vous pouvez ajouter d'autres shells qui s'exécuteront simultanément, et qui peuvent correspondre à différentes versions de Python. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Un shell s'exécute dans un processus fils, de manière à ce que, même lorsque ce shell est occupé, l'interface d'IEP n'est pas gelée, vous permettant ainsi de continuer à coder, et même d'exécuter du code dans un autre shell. Configuring shells Configuration des shells IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. IEP peut intégrer la boucle des événements de cinq *toolkits graphiques* différents, permettant ainsi le tracé interactif de courbes avec, par exemple Visvis ou Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Via 'Shell > Configuration des shells', vous pouvez éditer et ajouter *des configurations de shells*. Ceci vous permet par exemple de paramétrer le répertoire de démarrage, ou d'utiliser un chemin python (PythonPath) de votre choix. Running code Exécuter du code IEP supports several ways to run source code in the editor. (see the 'Run' menu). IEP permet d'exécuter le code source de l'éditeur de différentes manières (voir le menu 'Exécuter'). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *Exécuter la sélection :* S'il n'y a pas de texte sélectionné, la ligne en cours est exécutée ; si la sélection est entièrement contenue dans une ligne, seule la sélection est exécutée ; si la sélection s'étend sur plusieurs lignes, IEP exécutera chacune des lignes (entièrement). *Run cell:* a cell is everything between two lines starting with '##'. *Exécuter une cellule : * une cellule est tout ce qui se trouve entre deux lignes commençant par '##'. *Run file:* run all the code in the current file. *Exécuter le fichier :* Exécute tout le code contenu dans le fichier courant. *Run project main file:* run the code in the current project's main file. *Exécuter le fichier principal du projet :* exécute tout le code contenu dans le fichier principal du projet courant. Interactive mode vs running as script Mode interactif vs exécution en tant que script You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. Vous pouvez exécuter le fichier courant ou le fichier principal normalement, ou en tant que script. Dans le second cas, le shell est redémarré et l'environnement est donc propre. Le shell est aussi initialisé différemment de manière à être presque similaire à celui utilisé lors d'une exécution de script ordinaire. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. En mode interactif, , sys.path[0] est une chaîne vide (i.e. le répertoire courant), et sys.argv vaut ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. En mode script, __file__ et sys.argv[0] sont égaux au nom du script, sys.path[0] et le répertoire de travail sont modifiés et pris égaux au répertoire contenant le script. Tools for your convenience Des outils pratiques Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Via the menu *Outils*, il est possible de sélectionner quels outils utiliser. Les outils peuvent être placés dans la fenêtre de la manière que vous voulez, et peuvent aussi être détachés de la fenêtre principale. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Notez que le système d'outils est réalisé de telle manière qu'il est facile de créer vos propres outils. Jetez un oeil au wiki pour avoir plus d'informations, ou utilisez un des outils existants comme exemple. Recommended tools Outils recommandés We especially recommend the following tools: Nous recommandons tout spécialement les outils suivants : The *Source structure tool* gives an outline of the source code. L'outil *Source structure tool* (Structure du fichier source) fournit un *plan* du code source. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. L'outil *File browser tool* (gestionnaire de fichiers) permet de garder un oeil sur tous les fichiers d'un répertoire. Pour gérer vos projets, cliquez sur le symbole étoile. Get coding! En route pour le code ! This concludes the IEP wizard. Now, get coding and have fun! Ceci termine le guide IEP. Maintenant, c'est parti pour le code. Amusez vous bien ! iep-3.7/iep/resources/translations/iep_nl_NL.tr0000664000175000017500000015717412473036447022123 0ustar almaralmar00000000000000 debug Stack Stack filebrowser Filename filter Bestandsnaam filter Search in files Zoek in bestanden Projects: Projecten: Remove project Verwijder project Change project name Verander de naam van dit project Add path to Python path Voeg directory toe aan Pythonpath Project name Project naam New project name: Nieuwe project naam: Match case Hoofdlettergevoelig RegExp RegExp Search in subdirs Zoek in subdirectories Open Openen Open outside IEP Openen buiten IEP Reveal in Finder Laat zien in Finder Rename Hernoemen Delete Verwijderen Create new file Maak nieuw bestand Create new directory Maak nieuwe directorie Give the new name for the file Geef de nieuwe naam voor het bestand Give the name for the new directory Geef de naam voor de directorie Duplicate Dupliceren Give the name for the new file Geef de naam van het nieuwe bestand Are you sure that you want to delete Weet je zeker dat je wilt verwijderen Copy path Kopier directorie pad Click star to bookmark current dir Klik de ster om de huidige dir op te slaan Unstar this directory Verwijder deze dir uit de projecten Star this directory Voeg deze dir toe aan de projecten Go to this directory in the current shell Ga naar deze directorie in de huidige shell Import data... Importeer data... Run as script Uitvoeren als script menu File Bestand Edit Bewerken View Uiterlijk Settings Instellingen Shell Shell Run Uitvoeren Tools Gereedschap Help Help Use tabs Gebruik tabs Use spaces Gebruik spaties spaces plural of spacebar character spaties Indentation ::: The indentation used of the current file. Inspring niveau ::: The mate van inspringen voor het huidige bestand. Syntax parser ::: The syntax parser of the current file. Syntax parser ::: De syntax parser voor het huidige bestand. Line endings ::: The line ending character of the current file. Regel uiteinden ::: Het soort regel uiteinden van het huidige bestand. Encoding ::: The character encoding of the current file. Codering ::: The karakter codering voor het huidige bestand. New ::: Create a new (or temporary) file. Nieuw ::: Maak een nieuw (of tijdelijk) bestand. Open... ::: Open an existing file from disk. Open ::: Open een bestaand bestand. Save ::: Save the current file to disk. Opslaan ::: Sla het huidige bestand op. Save as... ::: Save the current file under another name. Opslaan als ... ::: Sla het huidige bestand op onder een andere naam. Save all ::: Save all open files. Alles opslaan ::: Sla alle geopende bestanden op. Close ::: Close the current file. Sluiten ::: Sluit het huidige bestand. Close all ::: Close all files. Alles sluiten ::: Sluit alle geopende bestanden. Restart IEP ::: Restart the application. Herstart IEP ::: Herstart de applicatie. Quit IEP ::: Close the application. IEP afsluiten Undo ::: Undo the latest editing action. Ongedaan maken ::: Maak de laatste bewerking ongedaan. Redo ::: Redo the last undone editong action. Opnieuw doen ::: Doe de laatste ongedaan gemaakte bewerking opnieuw. Cut ::: Cut the selected text. Knippen Copy ::: Copy the selected text to the clipboard. Kopieren Paste ::: Paste the text that is now on the clipboard. Plakken Select all ::: Select all text. Alles selecteren Indent ::: Indent the selected line. Inspringen ::: Spring de geselecteerde regel in. Dedent ::: Unindent the selected line. Terugspringen ::: Zet het inspringen een stap kleiner. Comment ::: Comment the selected line. Commentaar ::: Voeg een commentaar teken toe aan de geselecteerde regel. Uncomment ::: Uncomment the selected line. Verwijder commentaar ::: Verwijder een commentaar teken van de huidige regel. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Uitlijnen commentaar of docstring ::: Hervorm de geselecteerde tekst door het uit te lijnen op 70 karakters. Go to line ::: Go to a specific line number. Ga naar regel ::: Ga naar een specifiek regel nummer. Delete line ::: Delete the selected line. Verwijder regel ::: Verwijder de geselecteerde regel. Find or replace ::: Show find/replace widget. Initialize with selected text. Vind of vervang ::: Laat het vind/vervang paneel zien. Initializeer met de geselecteerde tekst. Find selection ::: Find the next occurrence of the selected text. Vind selectie ::: Vind het volgende voorkomen van de geselecteerde tekst. Find selection backward ::: Find the previous occurrence of the selected text. Vind vorige selectie ::: Vind het vorige voorkomen van de geselecteerde tekst. Find next ::: Find the next occurrence of the search string. Vind volgende ::: Vind het volgende voorkomen van de zoek tekst. Find previous ::: Find the previous occurrence of the search string. Vind vorige ::: Vind het vorige voorkomen van de zoek tekst. Zoom in Inzoomen Zoom out Uitzoomen Zoom reset Reset zoom Qt theme ::: The styling of the user interface widgets. Qt thema ::: De stijl van de gebruikersinterface. Select shell ::: Focus the cursor on the current shell. Selecteer shell ::: Focus de cursor op de huidige shell. Select editor ::: Focus the cursor on the current editor. Selecteer editor ::: Focus de cursor op de huidige editor. Select previous file ::: Select the previously selected file. Selecteer vorige bestand Show whitespace ::: Show spaces and tabs. Laat whitespace zien ::: Laat spaties en tabs zien. Show line endings ::: Show the end of each line. Laat regeluiteindes zien Show indentation guides ::: Show vertical lines to indicate indentation. Laat inspring hulplijnen zien Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Vouw lange regels ::: Vouw lange regels als ze niet op het scherm passen. Highlight current line ::: Highlight the line where the cursor is. Markeer huidige regel ::: Geef de huidige regel een andere achtergrondkleur. Zooming Zoomen Clear screen ::: Clear the screen. Maak scherm schoon Interrupt ::: Interrupt the current running code (does not work for extension code). Onderbreken ::: Onderbreek de nu uitgevoerde code (werkt niet voor extension-code). Restart ::: Terminate and restart the interpreter. Herstart ::: Stop en herstart de interpreter. Terminate ::: Terminate the interpreter, leaving the shell open. Stoppen ::: Stop de interpreter, maar laat de shell open. Close ::: Terminate the interpreter and close the shell. Afsluiten ::: Stop de interpreter en sluit de shell af. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. Aanpassen shell configuraties... ::: Voeg shell configuraties toe en pas de eigenschappen aan. New shell ... ::: Create new shell to run code in. Nieuwe shell ... ::: Maak een nieuwe shell aan om code in uit te voeren. Close others::: Close all files but this one. Anderen sluiten ::: Sluit alle bestanden behalve deze. Rename ::: Rename this file. Hernoemen ::: Hernoem dit bestand. Pin/Unpin ::: Pinned files get closed less easily. Vastpinnen/ontpinnen :::Pin dit bestand vast. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Stel dit bestand in als MAIN bestand/gewoon bestand. Run file ::: Run the code in this file. Voer bestand uit ::: Voer de code in dit bestand uit. Run file as script ::: Run this file as a script (restarts the interpreter). Voer bestand uit als script ::: Voer de code in dit bestand uit als script (dit herstart de interpreter). Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Voer selectie uit ::: Uitvoeren van: huidig geselecteerde regels, geselecteerde woorden op een regel, of de huidige regel als er geen selectie is. Help on running code ::: Open the IEP wizard at the page about running code. Hulp over het uitvoeren van code ::: Opent de IEP wizard op de pagina over het uitvoeren van code. Reload tools ::: For people who develop tools. Herlaad gereedschap. Pyzo Website ::: Open the Pyzo website in your browser. Pyzo website IEP Website ::: Open the IEP website in your browser. IEP website Ask a question ::: Need help? Stel een vraag Report an issue ::: Did you found a bug in IEP, or do you have a feature request? Rapporteer een probleem IEP wizard ::: Get started quickly. IEP wizard Check for updates ::: Are you using the latest version? Kijk of er updates zijn About IEP ::: More information about IEP. Over IEP Automatically indent ::: Indent when pressing enter after a colon. Automatisch inspringen ::: Inspringen bij een nieuwe regel na een dubbele punt. Enable calltips ::: Show calltips with function signatures. Pas uitvoertips toe ::: Laat uitvoertips zien. Enable autocompletion ::: Show autocompletion with known names. Pas autocompletion toe ::: Laat de autocompletion met bekende namen zien. Autocomplete keywords ::: The autocompletion list includes keywords. Autocomplete keywords ::: De autocomple lijst laat ook keywords zien. Edit key mappings... ::: Edit the shortcuts for menu items. Bewerk sneltoetsen... Edit syntax styles... ::: Change the coloring of your code. Bewerk syntax stijlen... Advanced settings... ::: Configure IEP even further. Geavanceerde instellingen... Select language ::: The language used by IEP. Selecteer taal ::: De taal gebruikt door IEP Location of long line indicator ::: The location of the long-line-indicator. Locatie van de lange-regel indicator Font Lettertype Debug next: proceed until next line Debug volgende: ga een regel verder Debug return: proceed until returns Debug return: ga verder tot function return Debug continue: proceed to next breakpoint Debug verder: ga verder tot volgend breakpoint Stop debugging Stop debuggen Clear all {} breakpoints Verwijder alle {} breakpoints Postmortem: debug from last traceback Postmortem: debuggen met laatste traceback Debug step into: proceed one step Debug instappen: ga een stap verder Run file as script ::: Restart and run the current file as a script. Voer bestand uit als script ::: Herstart en voer het huidige bestand uit als script. Run main file as script ::: Restart and run the main file as a script. Voer main bestand uit als script ::: Herstart en voer het main bestand uit als script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Executeer selectie ::: Executeer de geselecteerde regels, de geselecteerde text op de huidige regel, of the huidige regel als er geen selectie is. Execute cell ::: Execute the current editors's cell in the current shell. Executeer cell ::: Executeer de huidige cell. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Executeer cell en ga verder ::: Executeer de huidige cell en ga verder naar de volgende cell. Execute file ::: Execute the current file in the current shell. Executeer bestand ::: Executeer het huidige bestand. Execute main file ::: Execute the main file in the current shell. Executeer main bestand ::: Executeer het main bestand in de huidige shell. Export to PDF ::: Export current file to PDF (e.g. for printing). Exporteer naar PDF Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Plakken en selecteren ::: Plak the tekst op het clipbord en behoud de selectie om de indentatie aan te kunnen passen. Previous cell ::: Go back to the previous cell. Vorige cell ::: ga terug naar de vorige cell. Next cell ::: Advance to the next cell. Volgende cell ::: ga verder naar de volgende cell. Previous object ::: Go back to the previous top-level structure. Vorige object ::: ga terug naar het vorige top-level object. Next object ::: Advance to the next top-level structure. Volgende object ::: ga verder naar het volgende top-level object. Goto Definition ::: Go to definition of word under cursor. Ga naar definitie ::: Ga naar de definitie onder de cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. Pyzo documentatie ::: documentatie over Python en de Scipy stack. menu dialog Could not run Kon niet uitvoeren Could not run script. Kon script niet uitvoeren. Check for the latest version. Check laatste versie. Edit syntax styling Pas syntax stijlen aan Advanced settings Geavanceerde instellingen Edit shortcut mapping Pas sneltoetsen aan Shortcut mappings Sneltoets lijst Language changed Taal aangepast The language has been changed. IEP needs to restart for the change to take effect. De taal is aangepast. IEP moet herstarten om de aanpassing zichtbaar te maken. Manage IEP license keys Manage IEP licentie keys Add license key Voeg licentie key toe search Hide search widget (Escape) Verber zoek scherm (Escape) Find pattern Zoekpatroon Previous ::: Find previous occurrence of the pattern. Vorige ::: Vind de vorige instantie van het zoekpatroon. Next ::: Find next occurrence of the pattern. Volgende :::Vind de volgende instantie van het zoekpatroon. Replace pattern Vervangpatroon Repl. all ::: Replace all matches in current document. Verv. alles ::: Vervang alle instanties in het huidige document. Replace ::: Replace this match. Vervang ::: Vervang de huidige instantie. Match case ::: Find words that match case. Hoofdlettergevoelig ::: Houd rekening met hoofdletters bij het zoeken. RegExp ::: Find using regular expressions. RegExp ::: Zoek met regular expressions. Whole words ::: Find only whole words. Hele woorden ::: Vind alleen hele woorden. Auto hide ::: Hide search/replace when unused for 10 s. Automatisch verbergen ::: Verberg het zoek/vervang scherm als het 10 s ongebruikt is. shell Use system default Gebruik standaard van het systeem name ::: The name of this configuration. naam ::: De naam van deze configuratie. exe ::: The Python executable. exe ::: Het Python executable bestand. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). gui ::: Welke GUI toolkit geintegreerd wordt (b.v. voor interactief plotten). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. pythonPath ::: Een lijst met directories om te zoeken naar modules. Elke directorie moet op een nieuwe regel. startupScript ::: The script to run at startup (not in script mode). opstartscript ::: Het script dat uitgevoerd wordt bij het opstarten (niet in script modus). startDir ::: The start directory (not in script mode). start directorie ::: De directorie waar gestart wordt (niet in script modus). Delete ::: Delete this shell configuration Verwijderen ::: Verwijder deze shell configuratie Shell configurations Shell configuraties Add config Config toevoegen ipython ::: Use IPython shell if available. ipython ::: Gebruik IPython shell als deze beschikbaar is. File to run at startup Bestand dat uitgevoerd wordt bij het opstarten Code to run at startup Code die uitgevoerd wordt bij het opstarten argv ::: The command line arguments (sys.argv). argv ::: Command line argumenten (sys.argv). environ ::: Extra environment variables (os.environ). environ ::: Extra omgevings variabelen (os.environ). wizard Getting started with IEP Beginnen met IEP Welcome to the Interactive Editor for Python! Welkom bij de Interactieve Editor voor Python! IEP consists of two main components IEP bestaat uit twee componenten The editor is where you write your code De editor is waar je je code schrijft The shell is where your code gets executed De shell is waar de code uitgevoerd wordt Configuring shells Shells configureren Running code Code uitvoeren Interactive mode vs running as script Interactieve modus versus script modus Tools for your convenience Gereedschap Recommended tools Aanbevolen gereedschap Get coding! Begin met coden! Step Stap This wizard can be opened using 'Help > IEP wizard' Deze wizard kan je ook openen via 'Help > IEP wizard' Show this wizard on startup Laat deze wizard zien als IEP opstart Select language Selecteer taal The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. De taal is veranderd voor deze wizard. Om de nieuwe taal voor de hele applicatie actief te maken moet deze herstart worden. Language changed Taal aangepast This wizard helps you get familiarized with the workings of IEP. Deze wizard helpt je op de weg met IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. IEP is een cross-platform Python IDE gericht op *interactiviteit* en *introspectie*, wat het erg geschikt maakt voor wetenschappelijke toepassingen. IEP's praktische ontwerp is gericht op *simpelheid* en *efficientie*. or you can write code in the *editor* and execute that. of je kan je code in the *editor* schrijven en deze vervolgens uitvoeren. In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. In the *editor* wordt elk geopend bestand gerepresenteerd met een tab. Door met de rechtermuisknop op een tab te klikken, kunnen bestanden worden uitgevoerd, opgeslagen, afgesloten, etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. The rechtermuisknop maakt het ook mogelijk om een file te markeren als de *main file* van je project. Dit bestand kan je herkennen aan het ster-symbool, en kan vervolgens uitgevoerd w When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Als IEP start, wordt er een standaard *shell* gemaakt. Je kan zelf shells toevoegen, welke simultaan draaien en ook van verschillende Python versies kunnen zijn. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Shells draaien in een sub-process, zodat als ze actief zijn, IEP zelf goed werkbaar blijft. Je kan dus gewoon verder programmeren en zelfs code uitvoeren in een andere shell. IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. IEP kan de event-loops van vijf verschillende *GUI toolkits* integreren. Daarmee is het mogelijk om bijvoorbeeld interactieve plotjes te maken, zoals met Visvis of Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Via 'Shell > Aanpasses shell configuraties' kan je *shell configuraties* aanpassen en toevoegen. Zo kun je bijvoorbeeld de start directorie insteller, of het Pythonpath. IEP supports several ways to run source code in the editor. (see the 'Run' menu). IEP ondersteund verschillende manieren om code van de editor uit te voeren (zie ook het 'Uitvoeren' menu). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *Voer selectie uit:* als er geen selectie is wordt de huidige regel uitgevoerd; als de selectie een enkele regel beslaat, wordt de selectie geevalueerd; als de selectie meerde regels beslaat, zal IEP die regels (volledig) uitvoeren. *Run cell:* a cell is everything between two lines starting with '##'. *Voer cell uit:* een cell is alle code tussen twee regels die met '##' beginnen. *Run file:* run all the code in the current file. *Voer bestand uit:* alle code in het huidige bestand wordt uitgevoerd. *Run project main file:* run the code in the current project's main file. *Voer project main bestand uit:* alle code in de huidige main file wordt uitgevoerd. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. In interactieve modus is sys.path[0] een lege string (ofwel de huidige dir), en sys.argv wordt ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. In script modus worden __file__ en sys.argv[0] gezet naar de bestandsnaam van het script. sys.path[0] en de start directorie worden gezet naar de directorie waar het script in staat. Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Via het *gereedschap menu* kan je eenvoudig selecteren wel gereedschap je wilt gebruiken. Het gereedschap besaat uit kleine schermen die naar eigen voorkeur gepositioneerd kunnen worden. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Het gereedschapsysteem is zo ontworpen dat het vrij eenvoudig is om ook zelf gereedschap te maken. Kijk op de online wiki.voor meer informatie. We especially recommend the following tools: We raden met name de volgende gereedschappen aan: The *Source structure tool* gives an outline of the source code. De *Sourc structure* geeft de structuur van de broncode aan. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. De *File browser* geeft een overzicht van alle bestanden in een directorie. Klik op het ster-icoon om je project te markeren en managen. This concludes the IEP wizard. Now, get coding and have fun! Hiermee eindigd de IEP wizard. Veel programmeerplezier! You can execute commands directly in the *shell*, Je kan commandos direct in the *shell* uitvoeren. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. Je kan het huidige bestand of de main file normaal uitvoeren, of als script. In het laatste geval wordt de shell eerst herstart om een schone omgeving te realizeren. Ook wordt de shell anders geinitializeerd zodat het gedrag overeenkomt met het normaal uitvoeren van een script in Python. iep-3.7/iep/resources/translations/iep_es_ES.tr0000664000175000017500000016207712473035672022114 0ustar almaralmar00000000000000 debug Stack Pila filebrowser Filename filter Filtros de nombres archivos Search in files Busca en archivos Projects: Proyectos: Click star to bookmark current dir Apretar la estrella para marcar el directorio actual Remove project Borrar proyecto Change project name Cambiar nombre proyecto Add path to Python path Añade ruta a rutas de Python Project name Nombre proyecto New project name: Nuevo nomre proyecto: Match case Sensible entre mayúsculas y minúsculas RegExp Expresión Regular Search in subdirs Buscar en subdirs Unstar this directory Desmarcar directorio Star this directory Marcar directorio Open Abrir Open outside IEP Abrir fuera de iep Reveal in Finder Muestra en Finder Copy path Copia ruta Rename Renombrar Delete Eliminar Create new file Crear archivo Create new directory Crear directorio Give the new name for the file Da nomre al archivo Give the name for the new directory Da nombre al directorio Duplicate Duplicar Give the name for the new file Da nomre al archivo Are you sure that you want to delete Seguro que quieres borrarlo Go to this directory in the current shell Ir a este directorio en el terminal actual Import data... Importar datos... Run as script menu File Archivo Edit Editar View Ver Settings Opciones Shell Consola Run Ejecutar Tools Herramientas Help Ayuda Use tabs Utiliza tabuladores Use spaces Utiliza espacios spaces plural of spacebar character espacios Indentation ::: The indentation used of the current file. Sangría ::: Sangría usada en el archivo actual. Syntax parser ::: The syntax parser of the current file. Analizador sintaxis ::: Analizador sintaxis archivo actual. Line endings ::: The line ending character of the current file. Final línea ::: Carácter final línea archivo actual. Encoding ::: The character encoding of the current file. Codificación ::: Codificacion carácteres archivo actual. New ::: Create a new (or temporary) file. Nuevo ::: Crear archivo nuevo (o temporal). Open... ::: Open an existing file from disk. Abrir... ::: Abrir archivo del disco. Save ::: Save the current file to disk. Guardar ::: Guardar archivo en disco. Save as... ::: Save the current file under another name. Guardar como... ::: Guardar archivo actual con otro nombre. Save all ::: Save all open files. Guardar todos ::: Guardar todos los archivos abiertos. Close ::: Close the current file. Cerrar ::: Cerrar archivo actual. Close all ::: Close all files. Cerrar todos ::: Cerrar todos los archivos abiertos. Restart IEP ::: Restart the application. Reiniciar IEP ::: Reiniciar la aplicación. Quit IEP ::: Close the application. Cerrar IEP ::: Cerrar la applicación. Undo ::: Undo the latest editing action. Deshacer ::: Desacer última edición. Redo ::: Redo the last undone editong action. Rehacer ::: Rehacer la última edición deshecha. Cut ::: Cut the selected text. Cortar ::: Cortar el texto seleccionado. Copy ::: Copy the selected text to the clipboard. Copiar ::: Copiar el texto seleccionado. Paste ::: Paste the text that is now on the clipboard. Pegar ::: Pegar el texto del portapapeles. Select all ::: Select all text. Selecionar todo ::: Seleccionar todo el texto. Indent ::: Indent the selected line. Sangrar ::: Sangrar línea seleccionada. Dedent ::: Unindent the selected line. Desangrar ::: Desangrar línea seleccionada. Comment ::: Comment the selected line. Comentar ::: Comentar líneas selección. Uncomment ::: Uncomment the selected line. Descomentar ::: descomentar líneas selección. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Justifica cometario/docstring ::: Remodela el texto seleccionado para que se alinee a 70 carácteres. Go to line ::: Go to a specific line number. Ir línea ::: Ir a una línea specifica. Delete line ::: Delete the selected line. Borrar línea ::: Borrar línea seleccionada. Find or replace ::: Show find/replace widget. Initialize with selected text. Buscar o remplazar ::: Muestra widget buscar/remplazar. Se inicializa con el texto seleccionado. Find selection ::: Find the next occurrence of the selected text. Buscar selección ::: Busca la siguiente ocurrencia del texto seleccionado. Find selection backward ::: Find the previous occurrence of the selected text. Buscar selección hacia atrás ::: Busca la ocurrencia anterior del texto seleccionado. Find next ::: Find the next occurrence of the search string. Buscar siguiente ::: Buscar siguiente ocurrencia de la cadena de busca. Find previous ::: Find the previous occurrence of the search string. Buscar anterior ::: Buscar anterior ocurrencia de la cadena de busca. Zoom in Acercar Zoom out Alejar Zoom reset Zoom original Location of long line indicator ::: The location of the long-line-indicator. Ubicación indicador línea larga ::: Seleccionar ubicacción indicador de línea larga. Qt theme ::: The styling of the user interface widgets. Tema Qt ::: Estilo de los widgets de la interfaz de usuario. Select shell ::: Focus the cursor on the current shell. Seleccionar consola ::: Selecciona consola actual. Select editor ::: Focus the cursor on the current editor. Seleccionar editor ::: Selecciona el editor actual. Select previous file ::: Select the previously selected file. Selecciona el archivo anterior ::: Selecciona el archivo seleccionado anteriormente. Show whitespace ::: Show spaces and tabs. Muestra espacios en blanco ::: Muestra espacios y tabuladores. Show line endings ::: Show the end of each line. Muestra los finales de línea ::: Muestra el final de cada línia. Show indentation guides ::: Show vertical lines to indicate indentation. Muestra guías sangría ::: Muestra líneas verticales para indicar el sangrado. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Ajustar líneas largas ::: Ajustar líneas largas que no caben el la pantalla. Highlight current line ::: Highlight the line where the cursor is. Destacar línea actual ::: Remarca la línia donde se encuentra el cursor. Font Fuente Zooming Zoom Clear screen ::: Clear the screen. Borrar pantalla ::: Borra la pantalla. Interrupt ::: Interrupt the current running code (does not work for extension code). Interrumpir ::: Interrumpe el código en ejecución. No funciona para extensiones código. Restart ::: Terminate and restart the interpreter. Reiniciar ::: Finaliza la ejecución y reinicia el intérprete. Terminate ::: Terminate the interpreter, leaving the shell open. Finalizar ::: Finaliza el intérprete dejando la consola abierta. Close ::: Terminate the interpreter and close the shell. Cerrar ::: Finaliza el intérprete y cierra la consola. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. Edita configuración consola... ::: Añade configuraciones a la consola y edita las propiedades del intérprete. New shell ... ::: Create new shell to run code in. Consola nueva... ::: Crea una consola nueva donde ejecutar código. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Ejecuta selección ::: Ejecuta las líneas selecionadas en el editor o la selección de palabras en la línia actual o la línia actual si no se ha efectuado ninguna selección. Close others::: Close all files but this one. Cerrar otros ::: Cierra todos los archivos a excepción de este. Rename ::: Rename this file. Renombra ::: Renombra este archivo. Pin/Unpin ::: Pinned files get closed less easily. Pinzar/desprender ::: Archivos pinzados son más difíciles de cerrar. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Marcar/desmarcar como archivo MAESTRO ::: El archivo maestro se puede ejecutar mientras otro está seleccionado. Run file ::: Run the code in this file. Ejecuta archivo ::: Ejecuta el código en este archivo. Run file as script ::: Run this file as a script (restarts the interpreter). Ejecuta el archivo como guión ::: Ejecuta el archivo com un guión (reinicia el intérprete). Help on running code ::: Open the IEP wizard at the page about running code. Ajuda para ejecutar código ::: Abre el asistente de IEP en la página de como ejecutar el código. Reload tools ::: For people who develop tools. Recarga herramientas ::: Para programadores que desarrollan herramientas. Pyzo Website ::: Open the Pyzo website in your browser. Pyzo página web ::: Abre la página web de Pyzo en tu buscador. IEP Website ::: Open the IEP website in your browser. IEP página web ::: Abre la página web de IEP en tu buscador. Ask a question ::: Need help? Haz una pregunta ::: Necesitas ayuda? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? Reportar un problema ::: Has encontrado algun error en IEP, o echá en falta alguna caracteristica o función? IEP wizard ::: Get started quickly. Ayudante IEP ::: Comienza rápidamente. Check for updates ::: Are you using the latest version? Busca actualizaciones ::: Tienes la última version de IEP? About IEP ::: More information about IEP. Sobre IEP ::: Mas información sobre IEP. Select language ::: The language used by IEP. Selecciona idioma ::: Idioma usado por IEP. Automatically indent ::: Indent when pressing enter after a colon. Sangría automática ::: Sangrar código automaticamente cuando presiones tecla retorno después de dos puntos. Enable calltips ::: Show calltips with function signatures. Habilitar ayuda funcions ::: Enseñar ayudas prototipo funciones. Enable autocompletion ::: Show autocompletion with known names. Habilitar autocompletado ::: Muestra autocompletado con nombres conocidos. Autocomplete keywords ::: The autocompletion list includes keywords. Autocompletado palabras clave ::: La lista de autocompletado incluye palabras clave. Edit key mappings... ::: Edit the shortcuts for menu items. Editar asignaciones de teclas... ::: Editar los accesos directos para elementos de menú. Edit syntax styles... ::: Change the coloring of your code. Edita estilo sintaxis... ::: Cambiar colores sintaxis texto de tu código. Advanced settings... ::: Configure IEP even further. Opciones avanzadas... ::: Configura IEP aún más. Debug next: proceed until next line Depuración siguiente: proceder hasta la siguiente línea Debug return: proceed until returns Depuración retorno: Depurar hasta el retorno Debug continue: proceed to next breakpoint Depuración continuar: proceder al siguiente punto de interrupción Stop debugging Detener depuración Clear all {} breakpoints Borrar todos los puntos de interrupción {} Postmortem: debug from last traceback Postmortem: Depurar desde el último traceback Debug step into: proceed one step Etapa de depuración a dentro: proceder a un paso Run file as script ::: Restart and run the current file as a script. Ejecutar el archivo como un script ::: Reiniciar ejecutar el archivo actual como un script. Run main file as script ::: Restart and run the main file as a script. Ejecutar el archivo principal como script ::: Reiniciar y ejecutar el archivo principal como un script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Ejecutar selección ::: Ejecutar líneas del editor seleccionadas, palabras seleccionados en la línea actual, o la línea actual si no hay ninguna selección. Execute cell ::: Execute the current editors's cell in the current shell. Ejecutar celda ::: Ejecutar la celda del editor actual en el terminal actual. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Ejecutar celda y avanzar ::: Ejecutar celda actual y avance a la siguiente. Execute file ::: Execute the current file in the current shell. Ejecutar fichero ::: Ejecute el archivo actual en el terminal actual. Execute main file ::: Execute the main file in the current shell. Ejecutar fichero principal ::: Ejecute el archivo principal en el terminal actual. Export to PDF ::: Export current file to PDF (e.g. for printing). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Goto Definition ::: Go to definition of word under cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. menu dialog Could not run No se puede ejecutar Could not run script. No se puede ejecutar el guión. Check for the latest version. Compruebe si es la versión más reciente. Edit syntax styling Edita estilo sintaxis Advanced settings Configuración avanzada The language has been changed. IEP needs to restart for the change to take effect. El idiona se ha cambiado. IEP tiene que reiniciarse para hace efectivo los cambios. Language changed Idioma cambiado Edit shortcut mapping Editar asignación de accesos directos Shortcut mappings Asignaciones de acceso directo Manage IEP license keys Administrar clave licencia IEP Add license key Añadir clave licencia search Hide search widget (Escape) Oculta widget busqueda (Escape) Find pattern Busca patrón Previous ::: Find previous occurrence of the pattern. Anterior ::: Buscar anterior ocurrencia del patrón. Next ::: Find next occurrence of the pattern. Siguiente ::: Buscar siguiente ocurrencia del patrón. Replace pattern Reemplazar patrón Repl. all ::: Replace all matches in current document. Reemplazar todos ::: reemplazar todas las coincidencias en este documento. Replace ::: Replace this match. Reemplaza ::: Reemplaza esta occurencia. Match case ::: Find words that match case. Sensible mayúsculas ::: Sensible entre mayúsculas y minúsculas. RegExp ::: Find using regular expressions. Expresión regular ::: Buscar usando expresiones regulares. Whole words ::: Find only whole words. Palabras enteras ::: Buscar sólo palabras enteras. Auto hide ::: Hide search/replace when unused for 10 s. Auto ocultar ::: Ocultar automáticamente buscar/reemplazar cuando no se usa durante 10s. shell Use system default Usa opcions por defecto del sistema name ::: The name of this configuration. Nombre ::: El nombre de esta configuración. exe ::: The Python executable. exe ::: El ejecutable de Python. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). gui ::: Kit de herramientas de GUI para integrar (para trazado interactivo, etc.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. pythonPath ::: Lista de directorios donde buscar módulos y paquetes. Introduce cada ruta en un nueva línea, o separalas mediante el separador por defecto de tu sistema operativo. startupScript ::: The script to run at startup (not in script mode). GuiónInicio ::: Guión a ejecutar al inicio (no en modo guión). startDir ::: The start directory (not in script mode). DirInicio ::: Directorio al inició (no en modo guión). Delete ::: Delete this shell configuration Borrar ::: Borra la configuracion de esta consola Shell configurations Configuración consola Add config Añadir configuración ipython ::: Use IPython shell if available. ipython ::: Usar terminal IPython si disponible. File to run at startup Archivo a ejecutar al inicio Code to run at startup Código a ejecutar al inicio argv ::: The command line arguments (sys.argv). argv ::: Argumentos línea de comandos (sys.argv). environ ::: Extra environment variables (os.environ). environ ::: Variables de entorno addicionales (os.environ). wizard Getting started with IEP Primeros pasos con IEP Step Paso Welcome to the Interactive Editor for Python! Bienvenido al (E)ditor (I)nteractivo de (P)ython - IEP! This wizard helps you get familiarized with the workings of IEP. Este asistente le ayudará a familiarizarse con el funcionamiento del IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. IEP es un entorno de desarrollo integrado (IDE) de python multi-plattaforma centrado en la interactividad * * y * introspección *, lo que hace que sea muy adecuado para la computación científica. Su diseño práctico está dirigido a * sencillez * y * Eficiencia *. This wizard can be opened using 'Help > IEP wizard' Este asistente se puede abrir con "Ayuda> IEP assistente ' Show this wizard on startup Mostrar este asistente en el inicio Select language Selecciona idioma The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. El lenguaje se ha cambiado para este asistente. IEP debe reiniciarse para que los cambios surtan efecto en toda la aplicación. Language changed Idioma cambiado IEP consists of two main components IEP consta de dos componentes principales You can execute commands directly in the *shell*, Puede ejecutar comandos directamente en *la consola*, or you can write code in the *editor* and execute that. o puede escribir código en el *editor* y posterioment ejecutarlo. The editor is where you write your code El editor es donde se escribe el código In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. En el *editor*, cada archivo abierto se representa como una pestaña. Al hacer clic derecho sobre una pestaña, los archivos se pueden ejecutar, guardar, cerrar, etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. El botón derecho del ratón también nos permite hacer de un archivo qualquiera el *archivo maestro* de un proyecto. Este archivo puede ser reconocido por su símbolo de la estrella, y permite ejecutarlo con mayor facilidad. The shell is where your code gets executed La consola es donde tu código se ejecuta When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Cuando se inicia IEP, se crea una *consola* por defecto. Puedes añadir más consolas que se ejecutas simultaneamente, que pueden incluso corresponder a diferentes versiones de Python. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Las consolas se ejecutan en un sub-proceso, de esta manera IEP se mantiene siempre receptivo, lo que le permite seguir trabajando e incluso ejecutar código en otra consola. Configuring shells Configurar las consolas IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. IEP puede integrar el ciclo de eventos de cinco *herramientas GUI* distintas, lo que permite por ejemplo, hacer gráficas interactivament con Visvis o Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Mediante 'Consola > Edita propiedades consola', se puede editar y añadir *propiedades a la consola*. Esto permite por ejemplo seleccionar un directorio de inicio nuevo, o usar un Pythonpath personalizado. Running code Ejecutando código IEP supports several ways to run source code in the editor. (see the 'Run' menu). IEP admite varias formas de ejecutar código fuente en el editor. (véase el menu 'Ejecutar'). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *Ejecutar selección:* si no hay texto seleccionado, la línea actual se ejecuta, si la selección está en una sola línea, la selección se evalúa, si la selección incluye varias líneas, el IEP ejecutará las líneas (completas) seleccionados. *Run cell:* a cell is everything between two lines starting with '##'. *Ejecutar celda:* una celda es todo lo que hay entre dos líneas que comienzan con '##'. *Run file:* run all the code in the current file. *Ejecutar archivo:* ejecutar todo el código en el archivo actual. *Run project main file:* run the code in the current project's main file. *Ejecutar archivo maestro de proyecto:* ejecutar el código en el archivo maestro del proyecto actual. Interactive mode vs running as script Modo interactivo vs ejecución como guión You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. Puede ejecutar el archivo actual o al archivo maestro normalmente o como un guión. Cuando se ejecuta como guión, la shell se reinicializará para proporcionar un entorno limpio. La consola también se inicializa de manera diferente de modo que se parece mucho a la ejecución de un guión normal. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. En el modo interactivo, sys.path [0] es una cadena vacía (es decir, el directorio actual), y sys.argv se establece como ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. En el modo guión, __file__ y sys.argv[0] se ajustan al nombre del archivo guión, sys.path[0] y el directorio de trabajo se ajustan al directorio que contiene el script. Tools for your convenience Herramientas para su comodidad Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. A través del menú *Herramientas*, se puede seleccionar qué herramientas utilizar. Las herramientas se pueden colocar en cualquier forma que desee. También pueden desacoplarse. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Tenga en cuenta que el sistema de herramientas está diseñado de tal manera que es fácil de crear sus propias herramientas. Mira la wiki en línea para obtener más información, o utilizar una de las herramientas existentes, como ejemplo. Recommended tools Herramientas recomendadas We especially recommend the following tools: Recomendamos especialmente las siguientes herramientas: The *Source structure tool* gives an outline of the source code. La *herramienta estructura código* ofrece un esbozo del código fuente. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. El *Navegador de archivos* ayuda a mantener una visión general de todos los archivos en un directorio. Para gestionar sus proyectos, haga clic en el icono de estrella. Get coding! Comienza a programar! This concludes the IEP wizard. Now, get coding and have fun! Con esto concluye el asistente de IEP. Ahora, empieza a programar y diviértete! iep-3.7/iep/resources/translations/iep_ca_ES.tr0000664000175000017500000016174312473035672022067 0ustar almaralmar00000000000000 debug Stack Pila filebrowser Filename filter Filtre de noms arxius Search in files Cercar en arxius Projects: Projectes: Click star to bookmark current dir Cliqueu l'estrella per senyalitzar el directori actual Remove project Esborrar projecte Change project name Canviar nom projecte Add path to Python path Afegeix ruta a rutes de Python Project name Nom projecte New project name: Nou nom projecte: Match case Coincidir entre majúscules i minúscules RegExp Expressió Regular Search in subdirs Cerca en subdirs Unstar this directory Desmarcar directori Star this directory Marcar directori Open Obrir Open outside IEP Obrir fora d'iep Reveal in Finder Mostra al Finder Copy path Copia ruta Rename Rebatejar Delete Esborrar Create new file Crear arxiu Create new directory Crear directori Give the new name for the file Dona nom al arxiu Give the name for the new directory Dona nom al directori Duplicate Duplicar Give the name for the new file Dona nom al arxiu Are you sure that you want to delete Segur que vols esborrar-ho Go to this directory in the current shell Anar a aquest directori en el terminal actual Import data... Importa dades... Run as script menu File Arxiu Edit Editar View Visualitza Settings Opcions Shell Consola Run Executar Tools Eines Help Ajuda Use tabs Utilitza Tabuladors Use spaces espais spaces plural of spacebar character espais Indentation ::: The indentation used of the current file. Sangria ::: Sangria emprada arxiu actual. Syntax parser ::: The syntax parser of the current file. Analitzador sintaxi ::: Analitzador sintaxi arxiu actual. Line endings ::: The line ending character of the current file. Final línia ::: Caràcter final línia arxiu actual. Encoding ::: The character encoding of the current file. Codificació ::: Codificació de caràcters en l'arxiu actual. New ::: Create a new (or temporary) file. Nou ::: Crear arxiu nou (o temporal). Open... ::: Open an existing file from disk. Obrir ::: Obrir un arxiu del disc. Save ::: Save the current file to disk. Desa ::: Desa arxiu disc. Save as... ::: Save the current file under another name. Anomena i desa... ::: Desa l'arxiu actual amb un nom diferent. Save all ::: Save all open files. Desa-ho tot ::: Desa tots el arxius oberts. Close ::: Close the current file. Tanca ::: Tanca l'arxiu actual. Close all ::: Close all files. Tanca tots ::: Tanca tots els arxius. Restart IEP ::: Restart the application. Reinicia IEP ::: Reinicia l'aplicació. Quit IEP ::: Close the application. Tanca IEP ::: Tanca l'aplicació. Undo ::: Undo the latest editing action. Desfés ::: Desfés el darrer canvi d'edició. Redo ::: Redo the last undone editong action. Refés ::: Refés el darrer canvi desfet. Cut ::: Cut the selected text. Talla ::: Talla el text seleccionat. Copy ::: Copy the selected text to the clipboard. Copia ::: Copia el text seleccionat al portapapers. Paste ::: Paste the text that is now on the clipboard. Enganxa ::: Enganxa el text present en el portapapers. Select all ::: Select all text. Selecciona-ho tot ::: Selecciona tot el text. Indent ::: Indent the selected line. Sagnar ::: Sagnar la línia seleccionada. Dedent ::: Unindent the selected line. Dessagnar ::: Dessagnar línia seleccionada. Comment ::: Comment the selected line. Comentar ::: Comenteu la línia seleccionada. Uncomment ::: Uncomment the selected line. Descomentar ::: Descomenteu la línia seleccionada. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Justificar comentari / docstring ::: Remodelar el text seleccionat perquè s'alineï a uns 70 caràcters. Go to line ::: Go to a specific line number. Vés línia ::: Vés a un número especific línia. Delete line ::: Delete the selected line. Esborra línia ::: Esborra línia seleccionada. Find or replace ::: Show find/replace widget. Initialize with selected text. Cercar o reemplaçar ::: Mostra giny cercar/reemplaçar. Inicialitzar amb el text seleccionat. Find selection ::: Find the next occurrence of the selected text. Cercar selecció ::: Cercar la següent ocurrència del text seleccionat. Find selection backward ::: Find the previous occurrence of the selected text. Cercar selecció cap enrere ::: Cerca la ocurrència anterior del text seleccionat. Find next ::: Find the next occurrence of the search string. Cercar següent ::: Cerca la següent ocurrència de la cadena de cerca. Find previous ::: Find the previous occurrence of the search string. Cercar anterior ::: Cerca l'anterior ocurrència de la cadena de cerca. Zoom in Acostar Zoom out Allunyar Zoom reset Zoom original Location of long line indicator ::: The location of the long-line-indicator. Ubicació indicador línia llarga ::: Seleccionar ubicació de l'indicador de línia llarga. Qt theme ::: The styling of the user interface widgets. Tema Qt ::: Estil dels ginys de la interfície d'usuari. Select shell ::: Focus the cursor on the current shell. Selecciona consola ::: Selecciona la consola actual. Select editor ::: Focus the cursor on the current editor. Selecciona editor ::: Selecciona l'editor actual. Select previous file ::: Select the previously selected file. Selecciona l'arxiu anterior ::: Selecciona l'arxiu seleccionat anteriorment. Show whitespace ::: Show spaces and tabs. Mostra espais en blanc ::: Mostra espais i tabuladors. Show line endings ::: Show the end of each line. Mostra els finals de línia ::: Mostra final de cada línia. Show indentation guides ::: Show vertical lines to indicate indentation. Mostra guies de sangria ::: Mostra línies verticals per indicar la sagria. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Ajustar línies llargues ::: Ajustar línies llargues que no caben a la pantalla. Highlight current line ::: Highlight the line where the cursor is. Destacar línia actual ::: Remarca la línia on es troba el cursor. Font Font Zooming Zoom Clear screen ::: Clear the screen. Esborrar pantalla ::: Esborrar la pantalla. Interrupt ::: Interrupt the current running code (does not work for extension code). Interrompre ::: Interrompre el codi en execució. No funciona per extensions codi). Restart ::: Terminate and restart the interpreter. Reiniciar ::: Finalitza l'execució i reinicia l'intèrpret. Terminate ::: Terminate the interpreter, leaving the shell open. Finalitzar ::: Finalitza l'intèrpret deixant la consola oberta. Close ::: Terminate the interpreter and close the shell. Tanca ::: Finalitza l'intèrpret i tanca la consola. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. Edita configuració consola... ::: Afegeix configuracions a la consola i edita les propietats de l'intèrpret. New shell ... ::: Create new shell to run code in. Consola nova... ::: Crear una consola nova per executar codi. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Executa selecció ::: Executa les línies seleccionades a l'editor o la selecció de paraules en la línia actual o la línia actual si no s'ha fet cap selecció. Close others::: Close all files but this one. Tanca altres ::: Tanca tots els arxius excepte aquest. Rename ::: Rename this file. Rebatejat ::: Rebateja aquest arxiu. Pin/Unpin ::: Pinned files get closed less easily. Pinçar/desprendre ::: Arxius pinçats són més difícils de tancar. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Marcar/desmarcar com arxiu mestre ::: L'arxiu mestre es pot executar mentre un altre està seleccionat. Run file ::: Run the code in this file. Executar arxiu ::: Executa el codi en aquest arxiu. Run file as script ::: Run this file as a script (restarts the interpreter). Executa l'arxiu com script ::: Executa aquest arxiu com script (reinicia l'intèrpret). Help on running code ::: Open the IEP wizard at the page about running code. Ajuda per executant el codi ::: Obre l'assistentjuda d'IEP a la pàgina de com executar el codi. Reload tools ::: For people who develop tools. Recarregar eines ::: Per programadors que desenvolupen eines. Pyzo Website ::: Open the Pyzo website in your browser. Pàgina web Pyzo ::: Obre la pàgina web de Pyzo en el teu buscador. IEP Website ::: Open the IEP website in your browser. Pàgina web IEP ::: Obre la pàgina web de IEP en el teu buscador. Ask a question ::: Need help? Fes una pregunta ::: Necessites ajuda? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? Reportar un problema ::: Has trobat alguna errada a IEP, o troves a faltar alguna caracteristica o funció? IEP wizard ::: Get started quickly. Assistent IEP ::: Comença ràpidament. Check for updates ::: Are you using the latest version? Busca actualizacions ::: Tens l'última versión de IEP? About IEP ::: More information about IEP. Quant al IEP ::: Més informació sobre IEP. Select language ::: The language used by IEP. Selecciona idioma ::: Selecciona ldioma per IEP. Automatically indent ::: Indent when pressing enter after a colon. Sangria automàtica ::: Sangrar codi automaticament quan pressiones tecla retorn després de dos punts. Enable calltips ::: Show calltips with function signatures. Habilitar ajuda funcions ::: Ensenyar ajuda prototip funcions. Enable autocompletion ::: Show autocompletion with known names. Habilitar autocompletat ::: Mostrar autocompletar amb noms coneguts. Autocomplete keywords ::: The autocompletion list includes keywords. Autocompletet paraules clau ::: La llista d'autocopletat inclou paraules clau. Edit key mappings... ::: Edit the shortcuts for menu items. Edita assignacions de tecles... ::: Edita els accessos directes per elements de menú. Edit syntax styles... ::: Change the coloring of your code. Edició estil sintàxis... ::: Canvia colors sintaxi texte del teu códic. Advanced settings... ::: Configure IEP even further. Opciones avanzadas... ::: Configura IEP encara més. Debug next: proceed until next line Depuració següent: continuar fins a la següent línia Debug return: proceed until returns Depuració retorn: Depuració fins retorn Debug continue: proceed to next breakpoint Depuració continuar: procedir al següent punt d'interrupció Stop debugging Aturar depuració Clear all {} breakpoints Esborrar tots els punts d'interrupció {} Postmortem: debug from last traceback Debug step into: proceed one step Etapa de depuració a dins: procedir un pas Run file as script ::: Restart and run the current file as a script. Executar l'arxiu com un script ::: Reiniciar i executar el fitxer actual com un script. Run main file as script ::: Restart and run the main file as a script. Executar arxiu principal com a script ::: Reiniciar i executar el fitxer principal com un script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Executar selecció ::: Executar línies de l'editor seleccionades, paraules seleccionades en la línia actual, o la línia actual si no hi ha cap selecció. Execute cell ::: Execute the current editors's cell in the current shell. Executar cel la ::: Executar la cel la de l'editor actual en el terminal actual. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Executar cel la i avançar ::: Executar cel la actual i avançar a la següent. Execute file ::: Execute the current file in the current shell. Executar fitxer ::: Executeu el fitxer actual al terminal actual. Execute main file ::: Execute the main file in the current shell. Executar fitxer principal ::: Executear el fitxer principal al terminal actual. Export to PDF ::: Export current file to PDF (e.g. for printing). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Goto Definition ::: Go to definition of word under cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. menu dialog Could not run No és pot executar Could not run script. No es pot executar l'script. Check for the latest version. Comproveu si és la versió més recent. Edit syntax styling Edita estil sintaxis Advanced settings Configuració avançada The language has been changed. IEP needs to restart for the change to take effect. L'idiona s'ha canviat. IEP té que reiniciar-se per fer efectius els canvis. Language changed Idioma canviat Edit shortcut mapping Edita assignació d'accessos directes Shortcut mappings Assignacions d'accés directe Manage IEP license keys Manega claus llicèncie IEP Add license key Afegir clau llicència search Hide search widget (Escape) Amaga giny cerca (Escape) Find pattern Busca patró Previous ::: Find previous occurrence of the pattern. Anterior ::: Cerca l'anterior ocurrència del patró. Next ::: Find next occurrence of the pattern. Següent ::: Cerca la següent ocurrència del patró. Replace pattern Reemplaçar patró Repl. all ::: Replace all matches in current document. Reemplaçar tots ::: Reemplaçar totes les coincidències en aquest document. Replace ::: Replace this match. Reemplaça ::: Reemplaça aquesta occurrència. Match case ::: Find words that match case. Sensible majúsculas ::: Sensible entre majúsculas y minúsculas. RegExp ::: Find using regular expressions. Expressió regular ::: Cercar utilitzant expressions regulars. Whole words ::: Find only whole words. Paraules senceres ::: Cercar només paraules senceres. Auto hide ::: Hide search/replace when unused for 10 s. Auto amagar ::: Amaga automàticament cerca/reemplaça quan no es fa servir durant 10 s. shell Use system default Empra opcions per defecte del sistema name ::: The name of this configuration. Nom ::: El nom d'aquesta configuració. exe ::: The Python executable. exe ::: L'executable de Python. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). gui ::: Kit d'eines de GUI per integrar (per traçat interactiu, etc.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. pythonPath ::: Llista de directoris on cercar mòduls i paquets. Introdueix cada ruta en una nova línia, o separa-les mitjançant el separador per defecto del teu sistema operatiu. startupScript ::: The script to run at startup (not in script mode). ScriptInici ::: Script a executar al inici (no en mode script). startDir ::: The start directory (not in script mode). DirInici ::: Directori al inici ( no en mode script). Delete ::: Delete this shell configuration Esborrar ::: Esborra la configuració d'aquesta consola Shell configurations Configuració consola Add config Afegeix configuració ipython ::: Use IPython shell if available. ipython ::: Emprar terminal IPython si disponible. File to run at startup Arxiu a executar a l'inici Code to run at startup Codi a executar a l'inici argv ::: The command line arguments (sys.argv). argv ::: Arguments linía de comandes (sys.argv). environ ::: Extra environment variables (os.environ). environ ::: Variables d'entorn addicionals (os.environ). wizard Getting started with IEP Primers passos amb IEP Step Pas Welcome to the Interactive Editor for Python! Benvingut a l'(E)ditor (I)nteractiu de (P)ython - IEP! This wizard helps you get familiarized with the workings of IEP. Aquest assistent us ajuda a familiaritzar-vos amb el funcionament del IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. IEP és un entorn integrat de desenvolupament (IDE) de python multi-plataforma centrat en la interactivitat ** i * introspecció *, el que fa que sigui molt adequat per a la computació científica. El seu disseny pràctic està dirigit a * senzillesa * i * Eficiència *. This wizard can be opened using 'Help > IEP wizard' Aquest assistent es pot obrir amb "Ajuda> IEP assistent' Show this wizard on startup Mostra aquest assistent a l'inici Select language Selecciona idioma The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. El llenguatge s'ha canviat per aquest assistent. Necessita reiniciar IEP perquè el canvi tingui efecte en tota l'aplicació. Language changed Idioma canviat IEP consists of two main components IEP consta de dos components principals You can execute commands directly in the *shell*, Podeu executar comandaments directament a la *consola*, or you can write code in the *editor* and execute that. o pot escriure codi en l'*editor* i posteriorment executar-ho. The editor is where you write your code L'editor és on s'escriur el codi In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. A l'*editor*, cada arxiu obert es representa com una pestanya. En fer clic dret sobre una pestanya, els arxius es poden executar, guardar, tancar, etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. El botó dret del ratolí també ens permet fer d'un arxiu qualsevol l'*arxiu mestre* d'un projecte. Aquest arxiu pot ser reconegut pel símbol de l'estrella, i ens permet executar-lo amb més facilitat. The shell is where your code gets executed La consola és on el teu codi s'executa When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Quan s'inicia IEP, es crea una *consola* per defecte. Es poden afegir més consoles que s'executen simultàniament, que fins i tot poden correspondre a diferents versions de Python. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Les consoles s'executen en un sub-procés, d'aquest manera IEP es manté receptiu, el que li permet seguir treballant i inclús executar codi en una altre consola. Configuring shells Configurar les consoles IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. IEP pot integrar el cicle d'esdeveniments de cinc *eines GUI* diferents, el que permet per exemple, fer gràfiques interactivament amb Visvis o Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Mediante 'Consola > Edita propietats consola', es pot editar i afegir *propietats a la consola*. Això per expemple permet seleccionar un un directori d'inici nou, o emprar un Pythonpath personalitzat. Running code Executant codi IEP supports several ways to run source code in the editor. (see the 'Run' menu). IEP admet diverses formes d'executar codi font a l'editor. (Vegeu el menú 'Executar'). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. * Executar selecció: * si no hi ha text seleccionat, s'executa la línia actual, si la selecció està en una sola línia, la selecció s'avalua, si la selecció inclou diverses línies, IEP executará les línies seleccionades al complet. *Run cell:* a cell is everything between two lines starting with '##'. *Executar cel·la:* Una cel·la és tot el que hi ha entre dues línies que comencen amb '##'. *Run file:* run all the code in the current file. *Executar arxiu:* executar tot el codi en el fitxer actual. *Run project main file:* run the code in the current project's main file. *Executar arxiu mestre de projecte:* executar el codi de l'arxiu mestre del projecte actual. Interactive mode vs running as script Mode interactiu vs execució com a script You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. Podeu executar el fitxer actual o l'arxiu mestre normalment o com un script. Quan s'executa com a script, la consola es reiniciarà per proporcionar un entorn net. La consola també s'inicialitza de manera diferent així que s'assembla molt a l'execució d'un script normal. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. En el mode interactiu, sys.path [0] és una cadena buida (és a dir, el directori actual), i sys.argv s'estableix com ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. En el mode script, __file__ i sys.argv[0] s'ajusten al nom del arxiu script, sys.path[0] i el directori de treball s'ajusten al directori que conté l'script. Tools for your convenience Eines per a la seva comoditat Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. A través del menú * Eines, es pot seleccionar quines eines utilitzar. Les eines es poden col·locar en la forma més convenient, fins i tot es poden desacobla. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Tingueu en compte que el sistema d'eines està dissenyat de tal manera que és fàcil de crear les seves pròpies eines. Mira la wiki en línia per obtenir més informació, o utilitzar una de les eines existents, com a exemple. Recommended tools Eines recomanades We especially recommend the following tools: Recomanem especialment les següents eines: The *Source structure tool* gives an outline of the source code. L'*eina estructura codi* ofereix un esbós del codi font. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. El *Navegador d'arxius* ajuda a mantenir una visió general de tots els arxius en un directori. Per gestionar els projectes, feu clic a la icona d'estrella. Get coding! Comença a programar! This concludes the IEP wizard. Now, get coding and have fun! Amb això conclou l'assistent de IEP. Ara, comença a programar i diverteix-te! iep-3.7/iep/resources/translations/iep_ru_RU.tr0000664000175000017500000017523512473035672022152 0ustar almaralmar00000000000000 debug Stack Стек filebrowser Filename filter Фильтр Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Search in files ИÑкать в файлах Projects: Проекты: Click star to bookmark current dir Добавить каталог в закладки Remove project Удалить проект Change project name Переименовать проект Add path to Python path Добавить путь в Python path Project name Ð˜Ð¼Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð° New project name: Ðовое Ð¸Ð¼Ñ Ð¿Ñ€Ð¾ÐµÐºÑ‚Ð°: Match case Учитывать региÑтр RegExp RegExp Search in subdirs ИÑкать в подкаталогах Unstar this directory Удалить из закладок Star this directory Ð’ закладки Open Открыть Open outside IEP Открыть в ÑиÑтеме Reveal in Finder Показать в Finder Copy path Копировать путь Rename Переименовать Delete Удалить Create new file Создать новый файл Create new directory Создать новый каталог Give the new name for the file Ðовое Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Give the name for the new directory Ðовое Ð¸Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Duplicate Дублировать Give the name for the new file Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Are you sure that you want to delete Ð’Ñ‹ ÑобираетеÑÑŒ удалить Go to this directory in the current shell Import data... Run as script menu File Файл Edit Правка View Вид Settings ÐаÑтройки Shell Оболочка Run ЗапуÑк Tools ИнÑтрументы Help Помощь Use tabs ИÑпользовать табулÑцию Use spaces ИÑпользовать пробелы spaces plural of spacebar character пробела(ов) Indentation ::: The indentation used of the current file. ОтÑтупы ::: ОтÑтупы в текущем файле. Syntax parser ::: The syntax parser of the current file. СинтакÑÐ¸Ñ ::: СинтакÑÐ¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ файла. Line endings ::: The line ending character of the current file. Конец Ñтроки ::: Символ конца Ñтроки текущего файла. Encoding ::: The character encoding of the current file. Кодировка ::: Кодировка текущего файла. New ::: Create a new (or temporary) file. Ðовый ::: Создать новый (или временный) файл. Open... ::: Open an existing file from disk. Открыть... ::: Открыть файл Ñ Ð´Ð¸Ñка. Save ::: Save the current file to disk. Сохранить ::: Сохранить текущий файл на диÑк. Save as... ::: Save the current file under another name. Сохранить как... ::: Сохранить текущий файл под другим именем. Save all ::: Save all open files. Сохранить вÑе ::: Сохранить вÑе открытые файлы. Close ::: Close the current file. Закрыть ::: Закрыть текущий файл. Close all ::: Close all files. Закрыть вÑе ::: Закрыть вÑе файлы. Restart IEP ::: Restart the application. ПерезапуÑтить IEP ::: ПерезапуÑтить программу. Quit IEP ::: Close the application. Закрыть IEP ::: Закрыть программу. Undo ::: Undo the latest editing action. Отмена ::: Отменить поÑледнюю правку. Redo ::: Redo the last undone editong action. Повтор ::: Повторить поÑледнюю правку. Cut ::: Cut the selected text. Вырезать ::: Вырезать выделенный текÑÑ‚. Copy ::: Copy the selected text to the clipboard. Копировать ::: Копировать выделенный текÑÑ‚ в буфер обмена. Paste ::: Paste the text that is now on the clipboard. Ð’Ñтавить ::: Ð’Ñтавить текÑÑ‚ из буфера обмена. Select all ::: Select all text. Выделить вÑе ::: Выделить веÑÑŒ текÑÑ‚. Indent ::: Indent the selected line. ОтÑтуп ::: Добавить отÑтуп выбранной Ñтроке. Dedent ::: Unindent the selected line. Конец отÑтупа ::: Убрать отÑтуп у выбранной Ñтроки. Comment ::: Comment the selected line. Закомментировать ::: Закомментировать выбранную Ñтроку. Uncomment ::: Uncomment the selected line. РаÑкомментировать ::: РаÑкомментировать выбранную Ñтроку. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Выравнивание комментариÑ/Ñтроки документации::: Выравнивание выделенного текÑта до 70 Ñимволов на Ñтроку. Go to line ::: Go to a specific line number. Перейти к Ñтроке ::: Перейти к Ñтроке по номеру. Delete line ::: Delete the selected line. Удалить Ñтроку ::: Удалить выбранную Ñтроку. Find or replace ::: Show find/replace widget. Initialize with selected text. ИÑкать/Заменить ::: Открывает виджет поиÑка/замены Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð½Ð¾Ð³Ð¾ текÑта. Find selection ::: Find the next occurrence of the selected text. ИÑкать выделенное далее ::: ИÑкать далее выделенный текÑÑ‚. Find selection backward ::: Find the previous occurrence of the selected text. ИÑкать выделенное ранее ::: ИÑкать ранее выделенный текÑÑ‚. Find next ::: Find the next occurrence of the search string. ИÑкать далее ::: ИÑкать Ñледующее Ñовпадение. Find previous ::: Find the previous occurrence of the search string. ИÑкать ранее ::: ИÑкать предыдущее Ñовпадание. Zoom in Увеличить Zoom out Уменьшить Zoom reset СброÑить Location of long line indicator ::: The location of the long-line-indicator. Длина индикатора длинной Ñтроки ::: РаÑположение индикатора длинной Ñтроки. Qt theme ::: The styling of the user interface widgets. Qt тема ::: Стиль Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого интерфейÑа. Select shell ::: Focus the cursor on the current shell. Выбрать оболочку ::: ОтправлÑет курÑор в текущую оболочку. Select editor ::: Focus the cursor on the current editor. Выбрать редактор ::: ОтправлÑет курÑор в текущий редактор. Select previous file ::: Select the previously selected file. Выбрать предыдущий файл ::: Выбрать предыдущий файл. Show whitespace ::: Show spaces and tabs. Показывать пробелы ::: Показывать пробелы и табулÑции. Show line endings ::: Show the end of each line. Показывать конец Ñтроки ::: Показывать Ñимвол конца Ñтроки. Show indentation guides ::: Show vertical lines to indicate indentation. Показывать линию отÑтупа ::: Показывать вертикальную линию, индикатор отÑтупа. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). ПереноÑить длинные Ñтроки ::: ÐŸÐµÑ€ÐµÐ½Ð¾Ñ Ñтрок, которые не помещаютÑÑ Ð½Ð° Ñкране (Ñ‚.е. Ð½ÐµÐ³Ð¾Ñ€Ð¸Ð·Ð¾Ð½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¿Ñ€Ð¾ÐºÑ€ÑƒÑ‚ÐºÐ°). Highlight current line ::: Highlight the line where the cursor is. ПодÑвечивать выбранную линию ::: ПодÑвечивать линию Ñ ÐºÑƒÑ€Ñором. Font Шрифт Zooming МаÑштаб Clear screen ::: Clear the screen. ОчиÑтить Ñкран ::: ОчиÑтить Ñкран. Interrupt ::: Interrupt the current running code (does not work for extension code). Прервать ::: Прервать выполнение работающего кода (не работает Ð´Ð»Ñ Ñ€Ð°Ñширений). Restart ::: Terminate and restart the interpreter. ПерезапуÑтить ::: Принудительно завершить и перезапуÑтить интерпретатор. Terminate ::: Terminate the interpreter, leaving the shell open. Завершить ::: Принудительно завершить интерпретатор, но оÑтавить оболочку открытой. Close ::: Terminate the interpreter and close the shell. Закрыть ::: Принудительно завершить интерпретатор и закрыть оболочку. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. ÐаÑтройки оболочки ::: Добавить новые конфигурации оболочки и редактировать ÑвойÑтва интерпретатора. New shell ... ::: Create new shell to run code in. ÐÐ¾Ð²Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ° ... ::: Создать новую оболочку Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка кода. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. ЗапуÑтить выделенное ::: ЗапуÑтить выделенные Ñтроки, выделенные Ñлова в Ñтроке, или выбранную линию, еÑли нет выделениÑ. Close others::: Close all files but this one. Закрыть оÑтальное::: Закрыть вÑе файлы, кроме Ñтого. Rename ::: Rename this file. Переименовать ::: Переименовать Ñтот файл. Pin/Unpin ::: Pinned files get closed less easily. Закрепить/Открепить ::: Закрепленный файл не так проÑто закрыть. Set/Unset as MAIN file ::: The main file can be run while another file is selected. УÑтановить/СброÑить как ГЛÐÐ’ÐЫЙ файл ::: Главный файл может быть запущен, пока выбран другой файл. Run file ::: Run the code in this file. ЗапуÑтить файл ::: ЗапуÑтить код в Ñтом файле. Run file as script ::: Run this file as a script (restarts the interpreter). ЗапуÑтить файл как Ñкрипт ::: ЗапуÑтить Ñтот файл как Ñценарий (перезапуÑкает интерпретатор). Help on running code ::: Open the IEP wizard at the page about running code. Помощь по запуÑку кода ::: Открыть IEP-маÑтера на Ñтранице о запуÑке кода. Reload tools ::: For people who develop tools. ПерезапуÑтить инÑтрументы ::: Ð”Ð»Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚Ñ‡Ð¸ÐºÐ¾Ð² инÑтрументов. Pyzo Website ::: Open the Pyzo website in your browser. Pyzo веб-Ñайт ::: Открыть веб-Ñайт Pyzo в вашем браузере. IEP Website ::: Open the IEP website in your browser. IEP веб-Ñайт ::: Открыть веб-Ñайт IEP в вашем браузере. Ask a question ::: Need help? Задать Ð²Ð¾Ð¿Ñ€Ð¾Ñ ::: Ðужна помощь? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? Сообщить о проблеме ::: Ðашли баг в IEP, или хотите новую функциональноÑть? IEP wizard ::: Get started quickly. IEP-маÑтер ::: БыÑтрое знакомÑтво. Check for updates ::: Are you using the latest version? Проверить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ::: Ð’Ñ‹ иÑпользуете поÑледнюю верÑию? About IEP ::: More information about IEP. О программе ::: Больше информации о IEP. Select language ::: The language used by IEP. Выбрать Ñзык ::: Выбрать Ñзык программы. Automatically indent ::: Indent when pressing enter after a colon. ÐвтоматичеÑкий отÑтуп ::: ÐвтоматичеÑкий отÑтуп поÑле Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ñ Ð¸ Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Enter. Enable calltips ::: Show calltips with function signatures. Включить подÑказки ::: Показывать подÑказку Ñигнатуры функции при ее вводе. Enable autocompletion ::: Show autocompletion with known names. Включить автодополнение ::: Показывать варианты Ð°Ð²Ñ‚Ð¾Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¸Ð·Ð²ÐµÑтных имен. Autocomplete keywords ::: The autocompletion list includes keywords. ДополнÑть ключевые Ñлова ::: ÐвтоматичеÑки дополнÑть ключевые Ñлова. Edit key mappings... ::: Edit the shortcuts for menu items. ГорÑчие клавиши... ::: Редактировать горÑчие клавиши Ð´Ð»Ñ Ñлементов меню. Edit syntax styles... ::: Change the coloring of your code. Стиль оформлениÑ... ::: Изменить цветовую Ñхему кода. Advanced settings... ::: Configure IEP even further. Продвинутые наÑтройки ::: Дополнительные наÑтройки IEP. Debug next: proceed until next line Отладка: на Ñледующую Ñтроку Debug return: proceed until returns Отладка: шаг назад Debug continue: proceed to next breakpoint Отладка: к Ñледующему брейкпоинту Stop debugging ОÑтановить отладку Clear all {} breakpoints СнÑть вÑе брейкпоинты {} Postmortem: debug from last traceback Отладка поÑле падениÑ: Ñ Ð¿Ð¾Ñледней траÑÑировки Debug step into: proceed one step Run file as script ::: Restart and run the current file as a script. Run main file as script ::: Restart and run the main file as a script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Execute cell ::: Execute the current editors's cell in the current shell. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Execute file ::: Execute the current file in the current shell. Execute main file ::: Execute the main file in the current shell. Export to PDF ::: Export current file to PDF (e.g. for printing). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Goto Definition ::: Go to definition of word under cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. menu dialog Could not run Ðе удалоÑÑŒ запуÑтить Could not run script. Ðе удалоÑÑŒ запуÑтить Ñценарий. Check for the latest version. Проверка Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ верÑии. Edit syntax styling Редактировать Ñтиль Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Advanced settings Продвинутые наÑтройки The language has been changed. IEP needs to restart for the change to take effect. Язык был изменен. IEP необходимо перезапуÑтить Ð´Ð»Ñ Ð²ÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в Ñилу. Language changed Язык изменен Edit shortcut mapping Редактировать горÑчие клавиши Shortcut mappings ГорÑчие клавиши Manage IEP license keys Управление лицензиÑми IEP Add license key Добавить лицензионный ключ search Hide search widget (Escape) Скрыть поиÑковый виджет (Escape) Find pattern Шаблон поиÑка Previous ::: Find previous occurrence of the pattern. Ранее ::: Ðайти предыдущий результат. Next ::: Find next occurrence of the pattern. Далее ::: Ðайти Ñледующий результат. Replace pattern Шаблон замены Repl. all ::: Replace all matches in current document. Зам. вÑе ::: Заменить вÑе ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð² текущем документе. Replace ::: Replace this match. Заменить ::: Заменить Ñто Ñовпадение. Match case ::: Find words that match case. Учитывать региÑтр ::: Ðайти Ñлова Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра. RegExp ::: Find using regular expressions. RegExp ::: Ðайти Ñ Ð¸Ñпользованием регулÑрного выражениÑ. Whole words ::: Find only whole words. Целые Ñлова ::: Ðайти только целые Ñлова. Auto hide ::: Hide search/replace when unused for 10 s. ÐвтоматичеÑки Ñкрывать ::: Скрывать поиÑк/замену при проÑтаивании поÑле 10 Ñекунд. shell Use system default Значение в ÑиÑтеме name ::: The name of this configuration. name ::: Ðазвание Ñтой конфигурации. exe ::: The Python executable. exe ::: ИÑполнÑемый файл Python. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). gui ::: GUI инÑтрументарий Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ð¸ (Ð´Ð»Ñ Ð¸Ð½Ñ‚ÐµÑ€Ð°ÐºÑ‚Ð¸Ð²Ð½Ð¾Ð³Ð¾ поÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¸ Ñ‚.д.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. pythonPath ::: СпиÑок каталогов Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка пакетов и модулей. Указывайте каждый путь на новой Ñтроке, или Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÐµÐ»Ñми в Ñтой ÑиÑтеме по умолчанию. startupScript ::: The script to run at startup (not in script mode). startupScript ::: Скрипт, выполнÑемый при запуÑке (не в режиме ÑценариÑ). startDir ::: The start directory (not in script mode). startDir ::: Стартовый каталог (не в режиме ÑценариÑ). Delete ::: Delete this shell configuration Удалить ::: Удалить Ñту конфигурацию Shell configurations Конфигурации оболочки Add config Добавить ipython ::: Use IPython shell if available. File to run at startup Code to run at startup argv ::: The command line arguments (sys.argv). environ ::: Extra environment variables (os.environ). wizard Getting started with IEP БыÑтрое знакомÑтво Step Шаг Welcome to the Interactive Editor for Python! Добро пожаловать в интерактивный редактор Ð´Ð»Ñ Python! This wizard helps you get familiarized with the workings of IEP. Этот маÑтер поможет вам познакомитьÑÑ Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ð¾Ð¹ в IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. IEP ÑвлÑетÑÑ ÐºÑ€Ð¾ÑÑплатформенной IDE Ð´Ð»Ñ Python, ÑоÑредоточенной на *интерактивноÑти* и *интроÑпекции*, что делает его очень подходÑщим Ð´Ð»Ñ Ð½Ð°ÑƒÑ‡Ð½Ñ‹Ñ… вычиÑлений. Его практичный дизайн направлен на *проÑтоту* и *ÑффективноÑть*. This wizard can be opened using 'Help > IEP wizard' Ð’ Ñтот маÑтер можно попаÑть нажав 'Помощь > IEP-маÑтер' Show this wizard on startup Показывать Ñтот маÑтер при запуÑке Select language Выберите Ñзык The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. Язык был изменен Ð´Ð»Ñ Ñтого маÑтера. Ðеобходимо перезапуÑтить IEP Ð´Ð»Ñ Ð²ÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в Ñилу. Language changed Язык изменен IEP consists of two main components IEP ÑоÑтоит из двух оÑновных компонентов You can execute commands directly in the *shell*, Ð’Ñ‹ можете выполнÑть команды непоÑредÑтвенно в *оболочке*, or you can write code in the *editor* and execute that. или ввеÑти их в *редактор* кода и запуÑтить. The editor is where you write your code Редактор, где вы пишете код In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. Каждый открытый файл в *редакторе* выглÑдит как вкладка. Правым щелчком мыши на вкладке файл может быть запущен, Ñохранен, закрыт и Ñ‚.д. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. Правым щелчком мыши можно Ñделать файл *главным* в проекте. Такой файл помечаетÑÑ Ñимволом звездочки, и запуÑтить его ÑтановитÑÑ Ð»ÐµÐ³Ñ‡Ðµ обычного. The shell is where your code gets executed Оболочка где выполнÑетÑÑ Ð²Ð°Ñˆ код When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Когда IEP запуÑкаетÑÑ, ÑоздаетÑÑ *оболочка* по умолчанию. Ð’Ñ‹ можете добавить больше оболочек, которые работают одновременно и могут быть разных верÑий Python. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Оболочка работает в ÑубпроцеÑÑе, и еÑли он занÑÑ‚ и не отвечает, IEP продолжит работать, а вы Ñможете редактировать код и запуÑкать его в другой оболочке. Configuring shells ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐµÐº IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. IEP может интегрироватьÑÑ Ð² цикл обработки Ñобытий пÑти различных *графичеÑких инÑтрументариев*, что позволÑет интерактивное поÑтроение, например, Ñ Visvis или Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Ðажав 'Оболочка > ÐаÑтройки оболочки', вы можете редактировать *конфигурации оболочки*. Это позволÑет выбрать иÑходный каталог, или указать пользовательÑкий Pythonpath. Running code ЗапуÑк кода IEP supports several ways to run source code in the editor. (see the 'Run' menu). IEP поддерживает неÑколько вариантов запуÑка иÑходного кода в редакторе. (Ñмотрите меню 'ЗапуÑк'). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *ЗапуÑтить выделенное:* еÑли текÑÑ‚ не выделен, то запуÑтитÑÑ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ð°Ñ Ñтрока; еÑли выделена одна Ñтрока, то результат будет отображен в оболочке; еÑли выделено неÑколько Ñтрок, то IEP выполнит их вÑе. *Run cell:* a cell is everything between two lines starting with '##'. *ЗапуÑтить Ñчейку:* Ñчейкой ÑвлÑетÑÑ Ð²ÐµÑÑŒ код между Ð´Ð²ÑƒÐ¼Ñ Ñтроками '##'. *Run file:* run all the code in the current file. *ЗапуÑтить файл:* запуÑкает веÑÑŒ код в текущем файле. *Run project main file:* run the code in the current project's main file. *ЗапуÑтить главный файл:* запуÑкает код в текущем главном файле проекта. Interactive mode vs running as script Интерактивный режим или запуÑтить как Ñценарий You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. Ð’Ñ‹ можете запуÑтить текущий файл или главный файл в обычном режиме, или как Ñценарий. При работе в качеÑтве ÑценариÑ, оболочка перезапуÑкаетÑÑ Ñ‡Ñ‚Ð¾Ð±Ñ‹ обеÑпечить чиÑтую Ñреду. Оболочка также инициализируетÑÑ Ð¿Ð¾-разному, так, что она очень напоминает Ñреду обычного Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñкрипта. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. Ð’ интерактивном режиме, sys.path[0] - пуÑÑ‚Ð°Ñ Ñтрока (Ñ‚.е. Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ), и sys.argv имеет значение ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. Ð’ режиме ÑценариÑ, __file__ и sys.argv[0] уÑтанавливаютÑÑ Ð² название файла Ñкрипта, sys.path[0] и рабочий каталог получают значение Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ³Ð¾ раÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° Ñо Ñценарием. Tools for your convenience ИнÑтрументы Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ удобÑтва Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Через меню *ИнÑтрументы*, можно выбрать, какие инÑтрументы будут иÑпользоватьÑÑ. ИнÑтрументы могут быть закреплены в любом меÑте, или откреплены вовÑе. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. СиÑтема инÑтрументов разработана так, что можно легко Ñоздать Ñвой ÑобÑтвенный инÑтрумент. ПоÑетите вики Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, или иÑпользуйте один из ÑущеÑтвующих инÑтрументов как пример. Recommended tools Рекомендуемые инÑтрументы We especially recommend the following tools: Мы наÑтоÑтельно рекомендуем Ñледующие инÑтрументы: The *Source structure tool* gives an outline of the source code. ИнÑтрумент *Source structure* дает вам Ñхему иÑходного кода. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. ИнÑтрумент *File browser* помогает Ñледить за вÑеми файлами в каталоге. Ð”Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñвоим проектом нажмите на иконку звезды. Get coding! Программируйте! This concludes the IEP wizard. Now, get coding and have fun! Ðа Ñтом мы завершаем работу IEP-маÑтера. Программируйте Ñ ÑƒÐ´Ð¾Ð²Ð¾Ð»ÑŒÑтвием! iep-3.7/iep/resources/translations/iep_pt_BR.tr0000664000175000017500000014113212473036600022101 0ustar almaralmar00000000000000 debug Stack filebrowser Filename filter Search in files Projects: Click star to bookmark current dir Remove project Change project name Add path to Python path Go to this directory in the current shell Project name New project name: Match case RegExp Search in subdirs Unstar this directory Star this directory Open Run as script Import data... Open outside IEP Reveal in Finder Copy path Rename Delete Create new file Create new directory Give the new name for the file Give the name for the new directory Duplicate Give the name for the new file Are you sure that you want to delete menu File Edit View Settings Shell Run Tools Help Use tabs Use spaces spaces plural of spacebar character Indentation ::: The indentation used of the current file. Syntax parser ::: The syntax parser of the current file. Line endings ::: The line ending character of the current file. Encoding ::: The character encoding of the current file. New ::: Create a new (or temporary) file. Open... ::: Open an existing file from disk. Save ::: Save the current file to disk. Save as... ::: Save the current file under another name. Save all ::: Save all open files. Close ::: Close the current file. Close all ::: Close all files. Export to PDF ::: Export current file to PDF (e.g. for printing). Restart IEP ::: Restart the application. Quit IEP ::: Close the application. Undo ::: Undo the latest editing action. Redo ::: Redo the last undone editong action. Cut ::: Cut the selected text. Copy ::: Copy the selected text to the clipboard. Paste ::: Paste the text that is now on the clipboard. Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Select all ::: Select all text. Indent ::: Indent the selected line. Dedent ::: Unindent the selected line. Comment ::: Comment the selected line. Uncomment ::: Uncomment the selected line. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Go to line ::: Go to a specific line number. Delete line ::: Delete the selected line. Find or replace ::: Show find/replace widget. Initialize with selected text. Find selection ::: Find the next occurrence of the selected text. Find selection backward ::: Find the previous occurrence of the selected text. Find next ::: Find the next occurrence of the search string. Find previous ::: Find the previous occurrence of the search string. Zoom in Zoom out Zoom reset Location of long line indicator ::: The location of the long-line-indicator. Qt theme ::: The styling of the user interface widgets. Select shell ::: Focus the cursor on the current shell. Select editor ::: Focus the cursor on the current editor. Select previous file ::: Select the previously selected file. Show whitespace ::: Show spaces and tabs. Show line endings ::: Show the end of each line. Show indentation guides ::: Show vertical lines to indicate indentation. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Highlight current line ::: Highlight the line where the cursor is. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Font Zooming Clear screen ::: Clear the screen. Interrupt ::: Interrupt the current running code (does not work for extension code). Restart ::: Terminate and restart the interpreter. Terminate ::: Terminate the interpreter, leaving the shell open. Close ::: Terminate the interpreter and close the shell. Debug next: proceed until next line Debug step into: proceed one step Debug return: proceed until returns Debug continue: proceed to next breakpoint Stop debugging Clear all {} breakpoints Postmortem: debug from last traceback Edit shell configurations... ::: Add new shell configs and edit interpreter properties. New shell ... ::: Create new shell to run code in. Goto Definition ::: Go to definition of word under cursor. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Close others::: Close all files but this one. Rename ::: Rename this file. Pin/Unpin ::: Pinned files get closed less easily. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Run file ::: Run the code in this file. Run file as script ::: Run this file as a script (restarts the interpreter). Run file as script ::: Restart and run the current file as a script. Run main file as script ::: Restart and run the main file as a script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Execute cell ::: Execute the current editors's cell in the current shell. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Execute file ::: Execute the current file in the current shell. Execute main file ::: Execute the main file in the current shell. Help on running code ::: Open the IEP wizard at the page about running code. Reload tools ::: For people who develop tools. Pyzo docs ::: Documentation on Python and the Scipy Stack. Pyzo Website ::: Open the Pyzo website in your browser. IEP Website ::: Open the IEP website in your browser. Ask a question ::: Need help? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? IEP wizard ::: Get started quickly. Check for updates ::: Are you using the latest version? About IEP ::: More information about IEP. Select language ::: The language used by IEP. Automatically indent ::: Indent when pressing enter after a colon. Enable calltips ::: Show calltips with function signatures. Enable autocompletion ::: Show autocompletion with known names. Autocomplete keywords ::: The autocompletion list includes keywords. Edit key mappings... ::: Edit the shortcuts for menu items. Edit syntax styles... ::: Change the coloring of your code. Advanced settings... ::: Configure IEP even further. menu dialog Could not run Could not run script. Check for the latest version. Edit syntax styling Advanced settings The language has been changed. IEP needs to restart for the change to take effect. Language changed Edit shortcut mapping Shortcut mappings Manage IEP license keys Add license key search Hide search widget (Escape) Find pattern Previous ::: Find previous occurrence of the pattern. Next ::: Find next occurrence of the pattern. Replace pattern Repl. all ::: Replace all matches in current document. Replace ::: Replace this match. Match case ::: Find words that match case. RegExp ::: Find using regular expressions. Whole words ::: Find only whole words. Auto hide ::: Hide search/replace when unused for 10 s. shell name ::: The name of this configuration. ipython ::: Use IPython shell if available. Use system default File to run at startup Code to run at startup exe ::: The Python executable. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. startupScript ::: The script to run at startup (not in script mode). startDir ::: The start directory (not in script mode). argv ::: The command line arguments (sys.argv). environ ::: Extra environment variables (os.environ). Delete ::: Delete this shell configuration Shell configurations Add config wizard Getting started with IEP Step Welcome to the Interactive Editor for Python! This wizard helps you get familiarized with the workings of IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. This wizard can be opened using 'Help > IEP wizard' Show this wizard on startup Select language The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. Language changed IEP consists of two main components You can execute commands directly in the *shell*, or you can write code in the *editor* and execute that. The editor is where you write your code In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. The shell is where your code gets executed When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Configuring shells IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Running code IEP supports several ways to run source code in the editor. (see the 'Run' menu). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *Run cell:* a cell is everything between two lines starting with '##'. *Run file:* run all the code in the current file. *Run project main file:* run the code in the current project's main file. Interactive mode vs running as script You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. Tools for your convenience Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Recommended tools We especially recommend the following tools: The *Source structure tool* gives an outline of the source code. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. Get coding! This concludes the IEP wizard. Now, get coding and have fun! iep-3.7/iep/resources/translations/iep_sk_SK.tr0000664000175000017500000014113112473035672022114 0ustar almaralmar00000000000000 debug Stack filebrowser Filename filter Search in files Projects: Click star to bookmark current dir Remove project Change project name Add path to Python path Project name New project name: Match case RegExp Search in subdirs Unstar this directory Star this directory Open Open outside IEP Reveal in Finder Copy path Rename Delete Create new file Create new directory Give the new name for the file Give the name for the new directory Duplicate Give the name for the new file Are you sure that you want to delete Go to this directory in the current shell Import data... Run as script menu File Edit View Settings Shell Run Tools Help Use tabs Use spaces spaces plural of spacebar character Indentation ::: The indentation used of the current file. Syntax parser ::: The syntax parser of the current file. Line endings ::: The line ending character of the current file. Encoding ::: The character encoding of the current file. New ::: Create a new (or temporary) file. Open... ::: Open an existing file from disk. Save ::: Save the current file to disk. Save as... ::: Save the current file under another name. Save all ::: Save all open files. Close ::: Close the current file. Close all ::: Close all files. Restart IEP ::: Restart the application. Quit IEP ::: Close the application. Undo ::: Undo the latest editing action. Redo ::: Redo the last undone editong action. Cut ::: Cut the selected text. Copy ::: Copy the selected text to the clipboard. Paste ::: Paste the text that is now on the clipboard. Select all ::: Select all text. Indent ::: Indent the selected line. Dedent ::: Unindent the selected line. Comment ::: Comment the selected line. Uncomment ::: Uncomment the selected line. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Go to line ::: Go to a specific line number. Delete line ::: Delete the selected line. Find or replace ::: Show find/replace widget. Initialize with selected text. Find selection ::: Find the next occurrence of the selected text. Find selection backward ::: Find the previous occurrence of the selected text. Find next ::: Find the next occurrence of the search string. Find previous ::: Find the previous occurrence of the search string. Zoom in Zoom out Zoom reset Location of long line indicator ::: The location of the long-line-indicator. Qt theme ::: The styling of the user interface widgets. Select shell ::: Focus the cursor on the current shell. Select editor ::: Focus the cursor on the current editor. Select previous file ::: Select the previously selected file. Show whitespace ::: Show spaces and tabs. Show line endings ::: Show the end of each line. Show indentation guides ::: Show vertical lines to indicate indentation. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Highlight current line ::: Highlight the line where the cursor is. Font Zooming Clear screen ::: Clear the screen. Interrupt ::: Interrupt the current running code (does not work for extension code). Restart ::: Terminate and restart the interpreter. Terminate ::: Terminate the interpreter, leaving the shell open. Close ::: Terminate the interpreter and close the shell. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. New shell ... ::: Create new shell to run code in. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Close others::: Close all files but this one. Rename ::: Rename this file. Pin/Unpin ::: Pinned files get closed less easily. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Run file ::: Run the code in this file. Run file as script ::: Run this file as a script (restarts the interpreter). Help on running code ::: Open the IEP wizard at the page about running code. Reload tools ::: For people who develop tools. Pyzo Website ::: Open the Pyzo website in your browser. IEP Website ::: Open the IEP website in your browser. Ask a question ::: Need help? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? IEP wizard ::: Get started quickly. Check for updates ::: Are you using the latest version? About IEP ::: More information about IEP. Select language ::: The language used by IEP. Automatically indent ::: Indent when pressing enter after a colon. Enable calltips ::: Show calltips with function signatures. Enable autocompletion ::: Show autocompletion with known names. Autocomplete keywords ::: The autocompletion list includes keywords. Edit key mappings... ::: Edit the shortcuts for menu items. Edit syntax styles... ::: Change the coloring of your code. Advanced settings... ::: Configure IEP even further. Debug next: proceed until next line Debug return: proceed until returns Debug continue: proceed to next breakpoint Stop debugging Clear all {} breakpoints Postmortem: debug from last traceback Debug step into: proceed one step Run file as script ::: Restart and run the current file as a script. Run main file as script ::: Restart and run the main file as a script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Execute cell ::: Execute the current editors's cell in the current shell. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Execute file ::: Execute the current file in the current shell. Execute main file ::: Execute the main file in the current shell. Export to PDF ::: Export current file to PDF (e.g. for printing). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Goto Definition ::: Go to definition of word under cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. menu dialog Could not run Could not run script. Check for the latest version. Edit syntax styling Advanced settings The language has been changed. IEP needs to restart for the change to take effect. Language changed Edit shortcut mapping Shortcut mappings Manage IEP license keys Add license key search Hide search widget (Escape) Find pattern Previous ::: Find previous occurrence of the pattern. Next ::: Find next occurrence of the pattern. Replace pattern Repl. all ::: Replace all matches in current document. Replace ::: Replace this match. Match case ::: Find words that match case. RegExp ::: Find using regular expressions. Whole words ::: Find only whole words. Auto hide ::: Hide search/replace when unused for 10 s. shell Use system default name ::: The name of this configuration. exe ::: The Python executable. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. startupScript ::: The script to run at startup (not in script mode). startDir ::: The start directory (not in script mode). Delete ::: Delete this shell configuration Shell configurations Add config ipython ::: Use IPython shell if available. File to run at startup Code to run at startup argv ::: The command line arguments (sys.argv). environ ::: Extra environment variables (os.environ). wizard Getting started with IEP Step Welcome to the Interactive Editor for Python! This wizard helps you get familiarized with the workings of IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. This wizard can be opened using 'Help > IEP wizard' Show this wizard on startup Select language The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. Language changed IEP consists of two main components You can execute commands directly in the *shell*, or you can write code in the *editor* and execute that. The editor is where you write your code In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. The shell is where your code gets executed When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Configuring shells IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Running code IEP supports several ways to run source code in the editor. (see the 'Run' menu). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *Run cell:* a cell is everything between two lines starting with '##'. *Run file:* run all the code in the current file. *Run project main file:* run the code in the current project's main file. Interactive mode vs running as script You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. Tools for your convenience Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Recommended tools We especially recommend the following tools: The *Source structure tool* gives an outline of the source code. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. Get coding! This concludes the IEP wizard. Now, get coding and have fun! iep-3.7/iep/resources/translations/iep_pt_PT.tr.qm0000664000175000017500000012100012346015775022536 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½ÝBY¾=7TŽ;'S5»Ð%#ÖT(Äì0) f¾ ªÀ…ÏÇPÊ$þA"z“"Yì,JSZ§›[f3N¸`/D…¬€eŽ4Ï‚Ón*î—Ýþ G~q¤Ú?¬±‹—ð!D3ðxÞ1 >@ Ð¥Í#óÀ„¡?´N>ETÎ?eöžR.f@'RÞp^/Q’€®U.–ÁZŬc>^S¯˜î%иHFHÃ2®XséŸÞ GíöîóðÍŽ<ü¨3t8½Ü€ÎÎrb¶ãq<3¬@,ÞcZ[êþYinu^Ÿp}.Nìq^Ž:f}êŸ ƒuCX†¹~&ˢϑ߱WLã3Ü–tHc |I§¾<ªŠŽHª‹æÎ@œc¸+¶@~,qºr>`Ár¾PåïéTlø˜VúEä~ùƒa2. Œ t²¤X8N=a{²!¨´Ž$¥ .,ù¨L9Y®¬,¥9Ë|IŠËÏ~#¬õ®xøkµ6¥.\]!F>(ë$‡Sá&EnPñ3 6c4b·Œ€SõncÊa@>~âh+nwnjÞeóÛW—‹¼ðŒH5›™s˰¾ó üúÌR>ú'î4(6z>—(<ô>âF]I<5ŠLö®7£Y ž-€_pÔR\J1¢‹®z³¯x¢6—_T²µ®¾Îm>dÊô÷5‚1¾ˆ‹óåæ/ÓekV²”WIV²”~™V¿~9“[†'·[¡îE†åþ]Ó£°³P<¤Ønš‡¦yÃS·"ÈEËÿž[£ѯ€_¤ÑÚ`¶Õjî!ÙjŽDöážC ÿûNKjA/%‡ûPë_:áf?óTÏjù^ª‰~‚f±xÞ)É·ªþGå“ # Æþ2± þL- Ix޼ J;Àr w¢SP} £ 5k °Ön ¶ רÎ3Y Þ@Ù ð.mW Bñq¿ 5áî„ 7öþtØ J€‡V‡ xáî+Å ”ck Ÿeg ¡FÎ8ç ãlÎkˆ ý¦>.$ 3Ê e…I t®‡$ …ËnMõ ;nnq ÔÉTO ý 0ônA< t§ž0¾ —"Gî °êîM, »sJ »)D‹ ˳¾5š ë¶nl‰ 5Î6ñ ˜i ß äi > 0…— Gnh MÙNZõ Q¥î ¯ VžZ& Âú¾…F ä?Îaæ ð‹Sqj!ÿ“Ñ4[>hÔ\ñ¾|&¬³>b›»>OŸ÷¶~J}ü´n _ŽU±ïià (… <¼^8eJ:FúVÃ×Vìoµþ”o~ß”R›’ëNwr³YEµ®ÑÔàðNÖÞŽC›ßDäaˆü.“Li›O MontãoStackdebugJAdicionar caminho para Python caminhoAdd path to Python path filebrowserFVocê tem certeza que deseja deletar$Are you sure that you want to delete filebrowser.Alterar nome do projetoChange project name filebrowserlClique estrela para marcar o seu favorito corrente dir"Click star to bookmark current dir filebrowserCopiar caminho Copy path filebrowser(Criar novo diretórioCreate new directory filebrowser$Criar novo arquivoCreate new file filebrowser ApagarDelete filebrowserduplicar Duplicate filebrowser2filtro do nome do arquivoFilename filter filebrowserBDar um nome para o novo diretório#Give the name for the new directory filebrowser>Dar um nome para o novo arquivoGive the name for the new file filebrowser<Dê um novo nome para o arquivoGive the new name for the file filebrowserPVá para este diretório no shell corrente)Go to this directory in the current shell filebrowser$Importar dados ...Import data... filebrowser0maiúsculas de minúsculas Match case filebrowser*Novo nome do projeto:New project name: filebrowser AbrirOpen filebrowser"Abrir fora da IEPOpen outside IEP filebrowserÿÿÿÿ Project name filebrowserProjetos: Projects: filebrowser"Expressão regularRegExp filebrowserRemover projetoRemove project filebrowserRenomearRename filebrowser"Revelar no FinderReveal in Finder filebrowser*Procurar em ficheirosSearch in files filebrowser2Procurar em subdiretóriosSearch in subdirs filebrowser,Estrela este diretórioStar this directory filebrowser<Remover estrela este diretórioUnstar this directory filebrowserVSobre o IEP ::: Mais informações sobre IEP.)About IEP ::: More information about IEP.menurConfigurações avançadas ... ::: Configure IEP ainda mais.4Advanced settings... ::: Configure IEP even further.menuPFaça uma pergunta ::: precisar de ajuda?Ask a question ::: Need help?menu˜Palavras preenchimento automático ::: A lista inclui autocompletar palavras.DAutocomplete keywords ::: The autocompletion list includes keywords.menuœAutomaticamente travessão ::: recuo ao pressionar enter depois de dois pontos.BAutomatically indent ::: Indent when pressing enter after a colon.menu„Verificar atualizações ::: Você está usando a versão mais recente?7Check for updates ::: Are you using the latest version?menuNLimpe todos os {} pontos de interrupçãoClear all {} breakpointsmenu:Limpar ecrã ::: Limpe a tela."Clear screen ::: Clear the screen.menuBFechar ::: Feche o arquivo atual.!Close ::: Close the current file.menudFechar ::: Terminar o intérprete e fechar a shell.8Close ::: Terminate the interpreter and close the shell.menuRFeche todos ::: Fechar todos os arquivos.Close all ::: Close all files.menujFechar outros ::: Fechar todos os arquivos, mas este.-Close others::: Close all files but this one.menuVComentário ::: Comente a linha selecionada.&Comment ::: Comment the selected line.menu„Copiar ::: Copie o texto selecionado para a área de transferência.1Copy ::: Copy the selected text to the clipboard.menuLCortar ::: Cortar o texto selecionado.Cut ::: Cut the selected text.menuvDepurar continuar: proceder ao próximo ponto de interrupção*Debug continue: proceed to next breakpointmenu\Depurar seguinte: continue até a próxima linha#Debug next: proceed until next linemenuNDepurar retorno: prosseguir até a volta#Debug return: proceed until returnsmenuNRetorno Depurar: Prosseguir Ate a Volta!Debug step into: proceed one stepmenuRDedent ::: Unindent da linha selecionada.&Dedent ::: Unindent the selected line.menuXApagar linha ::: Apagar a linha selecionada.)Delete line ::: Delete the selected line.menu editarEditmenu–Edite mapeamentos de teclas ... ::: Edite os atalhos para os itens do menu.;Edit key mappings... ::: Edit the shortcuts for menu items.menuÖEditar configurações do shell ... ::: Adicionar novas configs shell e editar as propriedades do intérprete.WEdit shell configurations... ::: Add new shell configs and edit interpreter properties.menuvEditar estilos de sintaxe ... ::: Mude a cor do seu código.;Edit syntax styles... ::: Change the coloring of your code.menuˆAtivar autocompletar ::: Mostrar autocompletar com nomes conhecidos.?Enable autocompletion ::: Show autocompletion with known names.menu~Ativar calltips ::: Mostrar calltips com assinaturas de função.;Enable calltips ::: Show calltips with function signatures.menuzCodificação ::: A codificação de caracteres do arquivo atual.8Encoding ::: The character encoding of the current file.menuŒExecutar celular ::: Executar célula do atual editores no shell atual.IExecute cell ::: Execute the current editors's cell in the current shell.menuÀExecutar celular e avanço ::: Executar celular e avanço do atual editores para a próxima célula.]Execute cell and advance ::: Execute the current editors's cell and advance to the next cell.menu|Executa o ficheiro ::: Execute o arquivo atual no shell atual.?Execute file ::: Execute the current file in the current shell.menu˜Executa o ficheiro principal ::: Execute o arquivo principal no shell atual.AExecute main file ::: Execute the main file in the current shell.menu0Executar seleção ::: Executar linhas do editor atual selecionados, palavras selecionadas na linha atual, ou a linha atual se não houver nenhuma seleção.Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection.menuArquivoFilemenuœLocalizar próxima ::: Localizar a próxima ocorrência da seqüência de pesquisa. IEP'3This wizard can be opened using 'Help > IEP wizard'wizardEste assistente ajuda você a se familiarizar com o funcionamento do IEP.@This wizard helps you get familiarized with the workings of IEP.wizardFFerramentas para a sua conveniênciaTools for your conveniencewizardŠVia 'Concha configurações> Editar shell', você pode editar e adicionar * configurações do shell *. Isto permite-lhe, por exemplo, selecione o diretório inicial, ou usar um PythonPath personalizado.¾Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath.wizardbVia o * menu Ferramentas *, pode-se selecionar quais ferramentas usar. As ferramentas podem ser posicionados em qualquer maneira que você quiser, e também pode ser un-encaixado.ŒVia the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked.wizardhRecomendamos especialmente as seguintes ferramentas:,We especially recommend the following tools:wizardVBem-vindo ao editor interativo para Python!-Welcome to the Interactive Editor for Python!wizardLQuando começa IEP, um padrão * shell * é criado. Você pode adicionar mais conchas que são executados simultaneamente, e que podem ser de diferentes versões do Python.žWhen IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions.wizardhVocê pode executar comandos diretamente no shell * *1You can execute commands directly in the *shell*,wizard8Você pode executar o arquivo atual ou o arquivo principal normalmente, ou como um script. Quando executado como script, o shell é restared para proporcionar um ambiente limpo. O escudo também é inicializado de forma diferente, de modo que ela se assemelhe a execução normal do script. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution.wizardvou você pode escrever código no * editor * e executar isso.7or you can write code in the *editor* and execute that.wizardˆiep-3.7/iep/resources/translations/iep_de_DE.tr0000664000175000017500000016224212473035672022050 0ustar almaralmar00000000000000 debug Stack Stapel filebrowser Filename filter Dateinamenfilter Search in files Suche in Dateien Projects: Projekte: Click star to bookmark current dir Stern klicken um das aktuelle Verzeichnis als Lesezeichen zu markieren Remove project Projekt entfernen Change project name Projektname aendern Add path to Python path Zu Python Pfad hinzufuegen Project name Projektname New project name: Neuer Projektname: Match case Groß-/Kleinschreibung RegExp Regulaerer Ausdruck Search in subdirs Suche in Unterverzeichnissen Unstar this directory Markierung dieses Verzeichnisses entfernen Star this directory Dieses Verzeichnis markieren Open Oeffnen Open outside IEP Ausserhalb von IEP oeffnen Reveal in Finder Im Finder anzeigen Copy path Pfad kopieren Rename Umbenennen Delete Loeschen Create new file Datei neu Create new directory Neues Verzeichnis erstellen Give the new name for the file Neuer Dateiname Give the name for the new directory Neuer Verzeichnisname Duplicate Duplikat Give the name for the new file Name der neuen Datei Are you sure that you want to delete Loeschen - Sind Sie sicher ? Go to this directory in the current shell In dieses Verzeichnis der aktuellen Shell wechseln Import data... Daten werden importiert.... Run as script menu File Datei Edit Edit View Ansicht Settings Einstellungen Shell Shell Run Ausfuehren Tools Tools Help Hilfe Use tabs Tabstopps benutzen Use spaces Leerzeichen benutzen spaces plural of spacebar character Leerzeichen Indentation ::: The indentation used of the current file. Das Einrücken ::: Der von der aktuellen Datei verwendete Einzug. Syntax parser ::: The syntax parser of the current file. Syntax-Parser ::: Syntax-Parser der aktuellen Datei. Line endings ::: The line ending character of the current file. Zeilenenden ::: Das Zeilenendzeichen der aktuellen Datei. Encoding ::: The character encoding of the current file. Kodierung ::: Die Zeichensatzkodierung der aktuellen Datei. New ::: Create a new (or temporary) file. Neu ::: Erzeugen einer neuen (oder temporaeren) Datei. Open... ::: Open an existing file from disk. Oeffnen... ::: Oeffnen einer bestehenden Datei. Save ::: Save the current file to disk. Speichern ::: Speichern der aktuellen Datei auf der Festplatte. Save as... ::: Save the current file under another name. Speichern unter... ::: Speichert die aktuelle Datei unter einem anderen Namen. Save all ::: Save all open files. Alles speichern ::: Alle geoeffneten Dateien speichern. Close ::: Close the current file. Schliessen ::: Schliessen der aktuellen Datei. Close all ::: Close all files. Alles schliessen ::: Alle Dateien schliessen. Restart IEP ::: Restart the application. IEP neu starten ::: Programm neu starten. Quit IEP ::: Close the application. IEP Beenden ::: Programm schliessen. Undo ::: Undo the latest editing action. Undo/Zurück ::: Letzte Bearbeitung rückgaengig machen. Redo ::: Redo the last undone editong action. Wiederholen ::: Wiederholen des letzten unerledigten Bearbeitungsschrittes. Cut ::: Cut the selected text. Ausschneiden ::: Ausgewaehlten Text ausschneiden. Copy ::: Copy the selected text to the clipboard. Kopieren ::: Ausgewaehlten Text in die Zwischenablage kopieren. Paste ::: Paste the text that is now on the clipboard. Einfuegen ::: Einfügen von Text aus der Zwischenablage. Select all ::: Select all text. Alles markieren ::: Ganzen Text markieren. Indent ::: Indent the selected line. Einrücken ::: Einrücken der markierten Zeile. Dedent ::: Unindent the selected line. Einrücken ::: Einrücken der ausgewaehlten Zeile rückgängig machen. Comment ::: Comment the selected line. Kommentar ::: Ausgewaehlte Zeile kommentieren. Uncomment ::: Uncomment the selected line. Kommentierung bearbeiten ::: Kommentierung der gewaehlten Zeile entfernen. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Berichtigung Kommentar/DocString ::: Markierten Text so umformen, dass auf ca. 70 Zeichen ausgerichtet. Go to line ::: Go to a specific line number. Gehe zur Zeile ::: Gehe zu einer spezifischen Liniennummer. Delete line ::: Delete the selected line. Zeile loeschen ::: Die ausgewaehlte Zeile löschen. Find or replace ::: Show find/replace widget. Initialize with selected text. Finden oder Ersetzen ::: Zeige Finden- oder Ersetzen-Widget. Mit ausgewähltem Text initialisieren. Find selection ::: Find the next occurrence of the selected text. Finde Auswahl ::: Finde das naechste Vorkommen des markierten Textes. Find selection backward ::: Find the previous occurrence of the selected text. Finde Auswahl rückwaerts ::: Finde das vorherige Vorkommen des markierten Textes. Find next ::: Find the next occurrence of the search string. Weiter suchen ::: Finde das naechste Auftreten des Suchbegriffs. Find previous ::: Find the previous occurrence of the search string. Finde vorherige ::: Finde das vorherige Vorkommen der Suchzeichenfolge. Zoom in Hereinzoomen / Zoom in Zoom out Herauszoomen / Zoom out Zoom reset Zoom zurücksetzen / Zoom reset Location of long line indicator ::: The location of the long-line-indicator. Position der Zeilenlängenanzeige ::: Position der Zeilenlängeanzeige. Qt theme ::: The styling of the user interface widgets. Qt Thema ::: Das Aussehen von UI-Widgets. Select shell ::: Focus the cursor on the current shell. Shell auswaehlen ::: Cursor auf die aktuelle Shell setzen. Select editor ::: Focus the cursor on the current editor. Editor auswaehlen ::: Cursor auf den aktuellen Editor setzen. Select previous file ::: Select the previously selected file. Vorhergehende Datei auswaehlen ::: Die vorher gewaehlte Datei auswaehlen. Show whitespace ::: Show spaces and tabs. Zeige Leerzeichen ::: Leerzeichen und Tabulatoren anzeigen. Show line endings ::: Show the end of each line. Zeige Zeilenenden ::: Zeige das Ende jeder Zeile. Show indentation guides ::: Show vertical lines to indicate indentation. Zeige Einzug Einstellungen ::: Zeige vertikale Linien um die Einzuege anzuzeigen. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Lange Zeilen umbrechen ::: Lange Zeilen, die nicht auf den Bildschirm passen, umbrechen (z.B. kein horizontales scrollen). Highlight current line ::: Highlight the line where the cursor is. Markieren der aktuellen Zeile ::: Markieren der Zeile in der sich der Cursor befindet. Font Schriftart Zooming Zoomen Clear screen ::: Clear the screen. Bildschirm löschen. Interrupt ::: Interrupt the current running code (does not work for extension code). Unterbrechen ::: Unterbrechung des des momentan ausgeführten Codes (funktioniert nicht bei Erweiterungscode). Restart ::: Terminate and restart the interpreter. Neustart ::: Interpreter schliessen und neu starten. Terminate ::: Terminate the interpreter, leaving the shell open. Abbrechen ::: Interpreter abbrechen, shell bleibt offen. Close ::: Terminate the interpreter and close the shell. Schliessen ::: Interpreter beenden und Shell schliessen. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. Shell-Konfigurationen bearbeiten... ::: Neue Shell-Konfigurationen und Interpreter-Eigenschaften bearbeiten. New shell ... ::: Create new shell to run code in. Neue Shell ... ::: Erzeugen einer neuen Shell zur Ausführung von Code. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Markierten Bereich ausfuehren ::: Ausführen der im aktuellen Editor markierten Zeilen, die selktierten Wörter in der aktuellen Zeile oder die aktuelle Zeile, wenn nichts markiert ist. Close others::: Close all files but this one. Alle anderen schliessen ::: Alle Dateien ausser dieser schliessen. Rename ::: Rename this file. Umbenennen ::: Diese Datei umbenennen. Pin/Unpin ::: Pinned files get closed less easily. Markieren / Unmarkieren von Dateienr ::: Markierte Dateien können weniger leicht geschlossen werden. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Setzen/Rücksetzen als MAIN-Datei ::: Die MAIN-Datei kann ausgefuehrt werden, waehrend eine andere Datei ausgewaehlt ist. Run file ::: Run the code in this file. Datei ausfuehren ::: Code in dieser Datei ausfuehren. Run file as script ::: Run this file as a script (restarts the interpreter). Datei als Script ausfuehren ::: Ausführen der aktuellen Datei als Script (Interpreter wird neu gestartet). Help on running code ::: Open the IEP wizard at the page about running code. Hilfe zur Ausführung von Code ::: IEP-Wizard über die Ausführung von Code oeffnen. Reload tools ::: For people who develop tools. Werkzeuge neu laden ::: Für Nutzer die eigen Werkzeuge entwickeln. Pyzo Website ::: Open the Pyzo website in your browser. Pyzo Webseite ::: Pyzo Webseite im Browser oeffnen. IEP Website ::: Open the IEP website in your browser. IEP Webseite ::: Oeffnet die IEP Webseite im Browser. Ask a question ::: Need help? Eine Frage stellen ::: Brauchen Sie Hilfe ? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? Fehler melden ::: Haben Sie einen Bug in IEP gefunden oder haben Sie einen Verbesserungsvorschlag ? IEP wizard ::: Get started quickly. IEP Wizard ::: Schneller Einstieg. Check for updates ::: Are you using the latest version? Nach Updates suchen ::: Benutzen Sie die aktuellste Version ? About IEP ::: More information about IEP. Über IEP ::: Weitere Information zu IEP. Select language ::: The language used by IEP. Sprache wählen Automatically indent ::: Indent when pressing enter after a colon. Automatischer Einzug ::: Einzug wenn "Enter" nach einem Doppelpunkt gedrückt wird. Enable calltips ::: Show calltips with function signatures. Methodentipps aktivieren ::: Zeige Methodentipps mit Funktionssignaturen. Enable autocompletion ::: Show autocompletion with known names. Auto-Vervollstaendigen aktivieren ::: Zeige bestehende Einträge der Auto-Vervollstaendigung. Autocomplete keywords ::: The autocompletion list includes keywords. Auto-Vervollständigen Schlüsselwörter ::: Die "Auto-Vervollständigen" Schlüsselwortliste. Edit key mappings... ::: Edit the shortcuts for menu items. Tastenzuordnungen bearbeiten ::: Tastaturkuerzel für die Menuepunkte bearbeiten. Edit syntax styles... ::: Change the coloring of your code. Syntax-Stil bearbeiten... ::: Code-Farben verändern. Advanced settings... ::: Configure IEP even further. Erweiterte Einstellungen Debug next: proceed until next line Debug weiter: Bis zur naechsten Zeile Debug return: proceed until returns Debug zurück: Bis zur Umkehr Debug continue: proceed to next breakpoint Debug weiter: Sprung zum naechsten Haltepunkt Stop debugging Debug stoppen Clear all {} breakpoints Alle {} Haltepunkte deaktivieren Postmortem: debug from last traceback Postmortal: Debug vom letzten Traceback Debug step into: proceed one step Debug Einsprung: Ein Schritt Run file as script ::: Restart and run the current file as a script. Datei als Script ausfuehren ::: Neu starten und Ausführen der aktuellen Datei als Script. Run main file as script ::: Restart and run the main file as a script. Main-Datei als Script ausführen ::: Neu starten und Main-Datei als Script ausführen. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Markierte Elemente ausführen ::: Ausführen der im aktuellen Editor markierten Zeilen, die selktierten Wörter in der aktuellen Zeile oder die aktuelle Zeile, wenn nichts markiert ist. Execute cell ::: Execute the current editors's cell in the current shell. Element ausführen ::: Aktuelles Element des Editors in der Shell ausführen. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Element ausführen und weiter ::: Aktuelles Element des Editors ausführen und dann zum nächsten Element wechseln. Execute file ::: Execute the current file in the current shell. Datei ausführen ::: Datei in der aktuellen Shell ausführen. Execute main file ::: Execute the main file in the current shell. Main-Datei ausfuehren ::: Main-Datei in der aktuellen Shell ausfuehren. Export to PDF ::: Export current file to PDF (e.g. for printing). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Goto Definition ::: Go to definition of word under cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. menu dialog Could not run Konnte nicht ausgeführt werden Could not run script. Script konnte nicht ausgefuehrt werden. Check for the latest version. Auf aktualisierte Version prüfen. Edit syntax styling Syntax-Stil (Codefarben) bearbeiten Advanced settings Erweiterte Einstellungen The language has been changed. IEP needs to restart for the change to take effect. Die Benutzersprache wurde geändert. IEP muss neu gestartet werden damit die Änderungen wirksam werden. Language changed Sprache geändert Edit shortcut mapping Tastaturkürzel bearbeiten Shortcut mappings Tastaturkürzel Manage IEP license keys Lizenzschlüssel verwalten Add license key Lizenzschlüssel eingeben search Hide search widget (Escape) Such-Widget ausblenden (Escape) Find pattern Pattern/Suchmuster finden Previous ::: Find previous occurrence of the pattern. Vorheriges ::: Finde vorheriges Vorkommen des Patterns/Suchmusters. Next ::: Find next occurrence of the pattern. Nächstes ::: Finde nächstes Vorkommen des Patterns/Suchmusters. Replace pattern Pattern/Suchmuster ersetzen Repl. all ::: Replace all matches in current document. Alle ersetzen ::: Ersetze alle Treffer in aktuellem Dokument. Replace ::: Replace this match. Ersetzen ::: Ersetze diesen Treffer. Match case ::: Find words that match case. Groß-/Kleinschreibung ::: Passende Worte finden. RegExp ::: Find using regular expressions. Regulärer Ausdruck / Regex ::: Finden mit Regulärem Ausdruck. Whole words ::: Find only whole words. Ganze Wörter ::: Nur ganze Wörter suchen. Auto hide ::: Hide search/replace when unused for 10 s. Automatisch ausblenden ::: Suchen/Ersetzen ausblenden, wenn 10 s unbenutzt. shell Use system default System-Standard benutzen name ::: The name of this configuration. name ::: Der Name dieser Konfiguration. exe ::: The Python executable. exe ::: Die Python-Ausführungsdatei. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). gui ::: GUI-Toolkit zu integrieren (für interaktives plotten o.ä.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. pythonPath :::Eine Liste der Verzeichnisse um Module und Pakete zu suchen. Schreiben Sie jeden Pfad in eine neue Zeile, oder trennen Sie sie mit den Standardtrennzeichen für dieses Betriebssystem. startupScript ::: The script to run at startup (not in script mode). startupScript ::: Das Script welches beim Start ausgeführt wird (nicht im Script-Modus). startDir ::: The start directory (not in script mode). startDir ::: Das Start-Verzeichnis (nicht im Script-Modus). Delete ::: Delete this shell configuration Löschen ::: Diese Shell-Konfiguration löschen Shell configurations Shell Konfiguration Add config Konfiguration hinzufügen ipython ::: Use IPython shell if available. ipython ::: Verwende iPython-Shell falls verfügbar. File to run at startup Datei beim Start auszuführen Code to run at startup Code beim Start auszuführen argv ::: The command line arguments (sys.argv). arg ::: Kommandozeilen-Argumente (sys.argv). environ ::: Extra environment variables (os.environ). Umgebung ::: Extra Umgebungsvariablen (os.environ). wizard Getting started with IEP Erste Schritte mit IEP Step Step Welcome to the Interactive Editor for Python! Willkommen imr Interactive-Editor für Python! This wizard helps you get familiarized with the workings of IEP. Dieser Assistent hilft Ihnen, sich mit der Funktionsweise von IEP vertraut zu machen. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. IEP ist eine Cross-Plattform-Python-IDE. Sie hat * Interaktivität * und * Introspektion * zum Ziel.,Dadurch ist IEP favorisiert für Scientific Computing. Das praktische Design zielt auf * Einfachheit * und * Effizienz *. This wizard can be opened using 'Help > IEP wizard' Dieser Assistent con durch die Hilfe geöffnet werden. IEP Assistent Show this wizard on startup Diesen Wizard beim Start anzeigen Select language Sprache wählen The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. Die Sprache wurde für diesen Assistenten geändert. IEP muss neu gestartet werden, damit die Änderungen wirksam werden. Language changed Sprache geändert IEP consists of two main components IEP besteht aus zwei Hauptkomponenten You can execute commands directly in the *shell*, Sie können Befehle direkt in der *Shell* ausführen or you can write code in the *editor* and execute that. oder Sie können Code im Editor schreiben und diesen dann ausführen. The editor is where you write your code Im Editor schreiben Sie Ihren Code In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. In der *Editor* wird jede geöffnete Datei als Registerkarte dargestellt. Mit einem Rechtsklick auf eine Registerkarte, können Dateien ausgeführt, gespeichert und geschlossen usw. werden. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. Mit der rechten Maustaste kann eine Datei zur MAIN-Datei des Projekts geändert werden. Diese Datei ist an einem Sternsymbol zu erkennen und sie kann leichter ausgeführt werden. The shell is where your code gets executed In der Sell wird Ihr Code ausgeführt When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Beim Start von IEP, wird eine Standard * Shell * erstellt. Sie können mehrere Shells, die gleichzeitig ausgeführt werden, hinzuzufügen. Die verschiedenen Shells können verschiedene Python-Versionen ausführen. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Shells werden in einem Sub-Prozess ausgeführt, so dass, wenn sie beschäftigt sind, IEP selbst ansprechbar bleibt. So können Sie Programmierung und Ausführen von weiterem Code in einer anderen Shell halten. Configuring shells Shell Konfiguration IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. Mit IEP können die Ereignisse von fünf verschiedenen* GUI-Toolkits * integriert werden, so dass interaktives Plotten mit z.B. Visvis oder Matplotlib möglich ist. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Über Shell > Shell Konfiguration bearbeiten können Sie eine Shell-Konfiguration hinzufügen oder bearbeiten. Sie können ein Heimverzeichnis wählen oder einen benutzerdefinierten Python-Pfad anlegen. Running code Laufender Code IEP supports several ways to run source code in the editor. (see the 'Run' menu). IEP unterstützt mehrere verschiedene Möglichkeiten, um Quellcode im Editor auszuführen. (siehe "Ausführen"-Menü). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *Auswahl ausführen:* wenn kein Text ausgewählt ist, wird die aktuelle Zeile ausgeführt; wenn die Auswahl die ganze Zeile umfasst, wird die Auswahl ausgewertet; dehnt sich die Auswahl über mehrere Zeilen aus, wird IEP alle ausgewählten (die kompletten) Zeilen ausführen. *Run cell:* a cell is everything between two lines starting with '##'. *Ausführen Zelle:* eine Zelle ist alles zwischen zwei Zeilen, startend mit '##'. *Run file:* run all the code in the current file. *Ausführen Datei:* führt den kompletten Code innerhalb einer Datei aus. *Run project main file:* run the code in the current project's main file. *Ausführen Prjekt MAIN-Datei:* führt den Code innerhalb der MAIN-Datei aus. Interactive mode vs running as script "Interaktiver Modus" gegenüber "Script-Modus" You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. Sie können die aktuelle Datei oder die MAIN-Datei normal ausführen oder als Skript. Wenn Sie sie als Skript ausführen, wird die Shell wieder hergestellt, damit eine fest definierte Umgebung vorliegt. Die Shell ist so initialisiert, dass sie das Skript in einer Umgebung, ähnlich einer "normalen" Umgebung, ausführen kann. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. Im interaktiven Modus ist "sys.path" eine leere Zeichenfolge [0] (z.B. das aktuelle Verzeichnis), und sys.argv wird auf [''] eingestellt. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. Im Script-Modus werden __ file__ und sys.argv [0] auf den Script Dateinamen benannt, sys.path [0] und das Arbeitsverzeichnis werden in das Verzeichnis welches das Skript enthält, gesetzt. Tools for your convenience Extras für Ihren Komfort Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Über das "*Werkzeug-Menü*", kann man auswählen, welche Tools genutzt werden. Die Werkzeuge können frei positioniert werden und angedockt als auch un-angedockt genutzt werden. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Das Werkzeug (Tool)-System ist so ausgelegt, dass es sehr einfach ist, Ihre eigenen Werkzeuge (Tools) zu erstellen. Infos dazu finden Sie in der Online-Wiki, oder verwenden Sie ein vorhandenes Tool als Vorlage. Recommended tools Empfohlene Werkzeuge We especially recommend the following tools: Wir empfehlen vor allem die folgenden Tools: The *Source structure tool* gives an outline of the source code. Das Tool *Quell-Struktur* gibt einen Überblick über den Quellcode. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. Das * Datei-Browser-Tool * hilft den Überblick über alle Dateien eines Projekts zu behalten. Zum Bearbeiten Ihrer Projekte, klicken Sie auf das Sternsymbol. Get coding! Auf geht's ! This concludes the IEP wizard. Now, get coding and have fun! Dies schliesst den IEP-Assistenten Und jetzt: Coden und Spass haben ! iep-3.7/iep/resources/translations/iep_ca_ES.tr.qm0000664000175000017500000012022312346015775022470 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½ÝBY¾;»TŒk'Pï»”Ð%#ÖT(ì0(Þf¾ ªÀƒoÏÇN¼$þç"z‘VYì,HsZ§›[f3Là`/Dî…š€eŽ3‹‚Ón*(—ÝþoG~õ¤Ú¿¬±‰Íð!B§ðxÞ» >Æ Ð¥€I#óÀ‚÷?´N<ETÎ=˜eöžPf@'Pœp^.›’€®Rú–ÁZM¬c>\7¯˜î%<¸HD¾Ã2®V7éŸÞ £íöîcðÍŽ:oü¨3r,½ÜäÎÎp@¶ãû<3`@,Þa"[êþW5nu\p}.Mq^Ž8´}êŸ VƒuCUΆ¹~&%¢Ïcß±WJÿ3Ü”äHc I§¾;.ŠŽG ‹æÎ>«œc¸'¶@~+Óºr>]ÚÁr¾‹|åïéRFø˜SÒúEä|mùƒ^î. Ú t²^X8N;ç{²!@´Ž$¥ .,Y¨L9Wr¬,¥ïË|IXËÏ~#>õ®wøkµ¥.Yÿ!F>(=$‡SK&EnNí3 54b·Š¾Sõna˜a@>}Dh+nnjÞc»ÛUc‹¼ðŸŒH57™s5°¾— üúbR>v'î36z>•ž<ô>nFZ¾I<5$Lö®6#Y ž,æ_pÔP.J0œ‹®x›³¯ ø¢6—],²µ®^Îm>b„ô÷5€Œ1¾†³óåª/Óe%V²”UV²”|ýV¿~7ó[†'[¡îDåþ[¥£°³NF¤Øn™¦yÃPÄ·"ÈËÿžYIѯ€]xÑÚ^ŠÕjîÇÙjŽCtážA¥ÿûNI”A/%†1Pë_91f?óRŸjù^(‰~€Ø±xÞ)·ªþ½å“¿ Æþ1± þJQ IxŽ> J;Àoá w¢SNu £ 5Õ °Ön H רÎ2= Þ@Ù· ð.k Bño“ 5áîø 7öþr¸ J€‡T? xáî+ ”cÕ Ÿc- ¡FÎ7] ãlÎi@ ý¦>-Š 3ÊîŒÚ e…§ t®…f …ËnL ;nl3 ÔÉTç ý Ó 0ôn?Ì t§ž/à —"FR °êîKF »sHD »)D‰< ˳¾4F ë¶njU 5Î5O ˜i _ äi ² 0…m GneØ MÙNX Q¥î VžWÚ Âú¾ƒ” ä?Î_º ð‹So8!ÿ‘ñ4[>f’\ñ¾z’¬³>`c»>M¯÷¶~HŸü´n‡ _ŽSïgn (…<¼^6áJ:EdVÃ×T¼oµþ’¥~ß”P_’ëNuö³YE„µ®oÔàðÎÖÞŽBßDä_Dü.“´i™ßPilaStackdebug<Afegeix ruta a rutes de PythonAdd path to Python path filebrowser4Segur que vols esborrar-ho$Are you sure that you want to delete filebrowser(Canviar nom projecteChange project name filebrowserlCliqueu l'estrella per senyalitzar el directori actual"Click star to bookmark current dir filebrowserCopia ruta Copy path filebrowserCrear directoriCreate new directory filebrowserCrear arxiuCreate new file filebrowserEsborrarDelete filebrowserDuplicar Duplicate filebrowser*Filtre de noms arxiusFilename filter filebrowser*Dona nom al directori#Give the name for the new directory filebrowser"Dona nom al arxiuGive the name for the new file filebrowser"Dona nom al arxiuGive the new name for the file filebrowserZAnar a aquest directori en el terminal actual)Go to this directory in the current shell filebrowser Importa dades...Import data... filebrowserNCoincidir entre majúscules i minúscules Match case filebrowser"Nou nom projecte:New project name: filebrowser ObrirOpen filebrowser Obrir fora d'iepOpen outside IEP filebrowserNom projecte Project name filebrowserProjectes: Projects: filebrowser"Expressió RegularRegExp filebrowser"Esborrar projecteRemove project filebrowserRebatejarRename filebrowser Mostra al FinderReveal in Finder filebrowser Cercar en arxiusSearch in files filebrowser Cerca en subdirsSearch in subdirs filebrowser Marcar directoriStar this directory filebrowser&Desmarcar directoriUnstar this directory filebrowserTQuant al IEP ::: Més informació sobre IEP.)About IEP ::: More information about IEP.menufOpciones avanzadas... ::: Configura IEP encara més.4Advanced settings... ::: Configure IEP even further.menuNFes una pregunta ::: Necessites ajuda? Ask a question ::: Need help?menuœAutocompletet paraules clau ::: La llista d'autocopletat inclou paraules clau.DAutocomplete keywords ::: The autocompletion list includes keywords.menuÊSangria automàtica ::: Sangrar codi automaticament quan pressiones tecla retorn després de dos punts.BAutomatically indent ::: Indent when pressing enter after a colon.menulBusca actualizacions ::: Tens l'última versión de IEP?7Check for updates ::: Are you using the latest version?menuPEsborrar tots els punts d'interrupció {}Clear all {} breakpointsmenuVEsborrar pantalla ::: Esborrar la pantalla."Clear screen ::: Clear the screen.menu>Tanca ::: Tanca l'arxiu actual.!Close ::: Close the current file.menufTanca ::: Finalitza l'intèrpret i tanca la consola.8Close ::: Terminate the interpreter and close the shell.menuJTanca tots ::: Tanca tots els arxius.Close all ::: Close all files.menulTanca altres ::: Tanca tots els arxius excepte aquest.-Close others::: Close all files but this one.menuXComentar ::: Comenteu la línia seleccionada.&Comment ::: Comment the selected line.menufCopia ::: Copia el text seleccionat al portapapers.1Copy ::: Copy the selected text to the clipboard.menuHTalla ::: Talla el text seleccionat.Cut ::: Cut the selected text.menuvDepuració continuar: procedir al següent punt d'interrupció*Debug continue: proceed to next breakpointmenuhDepuració següent: continuar fins a la següent línia#Debug next: proceed until next linemenuNDepuració retorn: Depuració fins retorn#Debug return: proceed until returnsmenuTEtapa de depuració a dins: procedir un pas!Debug step into: proceed one stepmenuVDessagnar ::: Dessagnar línia seleccionada.&Dedent ::: Unindent the selected line.menuZEsborra línia ::: Esborra línia seleccionada.)Delete line ::: Delete the selected line.menu EditarEditmenuªEdita assignacions de tecles... ::: Edita els accessos directes per elements de menú.;Edit key mappings... ::: Edit the shortcuts for menu items.menuÚEdita configuració consola... ::: Afegeix configuracions a la consola i edita les propietats de l'intèrpret. WEdit shell configurations... ::: Add new shell configs and edit interpreter properties.menuŽEdició estil sintàxis... ::: Canvia colors sintaxi texte del teu códic.;Edit syntax styles... ::: Change the coloring of your code.menuˆHabilitar autocompletat ::: Mostrar autocompletar amb noms coneguts.?Enable autocompletion ::: Show autocompletion with known names.menu|Habilitar ajuda funcions ::: Ensenyar ajuda prototip funcions.;Enable calltips ::: Show calltips with function signatures.menuvCodificació ::: Codificació de caràcters en l'arxiu actual.8Encoding ::: The character encoding of the current file.menu Executar cel la ::: Executar la cel la de l'editor actual en el terminal actual.IExecute cell ::: Execute the current editors's cell in the current shell.menu˜Executar cel la i avançar ::: Executar cel la actual i avançar a la següent.]Execute cell and advance ::: Execute the current editors's cell and advance to the next cell.menu‚Executar fitxer ::: Executeu el fitxer actual al terminal actual.?Execute file ::: Execute the current file in the current shell.menužExecutar fitxer principal ::: Executear el fitxer principal al terminal actual.AExecute main file ::: Execute the main file in the current shell.menu.Executar selecció ::: Executar línies de l'editor seleccionades, paraules seleccionades en la línia actual, o la línia actual si no hi ha cap selecció.Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection.menu ArxiuFilemenuŠCercar següent ::: Cerca la següent ocurrència de la cadena de cerca.exe ::: L'executable de Python.exe ::: The Python executable.shellŒgui ::: Kit d'eines de GUI per integrar (per traçat interactiu, etc.).Fgui ::: The GUI toolkit to integrate (for interactive plotting, etc.).shelldipython ::: Emprar terminal IPython si disponible.+ipython ::: Use IPython shell if available.shellLNom ::: El nom d'aquesta configuració.(name ::: The name of this configuration.shellhpythonPath ::: Llista de directoris on cercar mòduls i paquets. Introdueix cada ruta en una nova línia, o separa-les mitjançant el separador per defecto del teu sistema operatiu. ›pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS.shelljDirInici ::: Directori al inici ( no en mode script).6startDir ::: The start directory (not in script mode).shell~ScriptInici ::: Script a executar al inici (no en mode script).DstartupScript ::: The script to run at startup (not in script mode).shell* El llenguatge s'ha canviat per aquest assistent. Necessita reiniciar IEP perquè el canvi tingui efecte en tota l'aplicació.  The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. wizard´*Executar cel·la:* Una cel·la és tot el que hi ha entre dues línies que comencen amb '##'.F*Run cell:* a cell is everything between two lines starting with '##'.wizardv*Executar arxiu:* executar tot el codi en el fitxer actual.1*Run file:* run all the code in the current file.wizard¸*Executar arxiu mestre de projecte:* executar el codi de l'arxiu mestre del projecte actual.I*Run project main file:* run the code in the current project's main file.wizardì* Executar selecció: * si no hi ha text seleccionat, s'executa la línia actual, si la selecció està en una sola línia, la selecció s'avalua, si la selecció inclou diverses línies, IEP executará les línies seleccionades al complet.þ*Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines.wizard.Configurar les consolesConfiguring shellswizard(Comença a programar! Get coding!wizard,Primers passos amb IEPGetting started with IEPwizardDIEP pot integrar el cicle d'esdeveniments de cinc *eines GUI* diferents, el que permet per exemple, fer gràfiques interactivament amb Visvis o Matplotlib.IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib.wizardNIEP consta de dos components principals#IEP consists of two main componentswizardBIEP és un entorn integrat de desenvolupament (IDE) de python multi-plataforma centrat en la interactivitat ** i * introspecció *, el que fa que sigui molt adequat per a la computació científica. El seu disseny pràctic està dirigit a * senzillesa * i * Eficiència *.áIEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*.wizard¬IEP admet diverses formes d'executar codi font a l'editor. (Vegeu el menú 'Executar').QIEP supports several ways to run source code in the editor. (see the 'Run' menu).wizardEn el mode interactiu, sys.path [0] és una cadena buida (és a dir, el directori actual), i sys.argv s'estableix com [''].pIn interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to [''].wizard:En el mode script, __file__ i sys.argv[0] s'ajusten al nom del arxiu script, sys.path[0] i el directori de treball s'ajusten al directori que conté l'script.¢In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script.wizard>A l'*editor*, cada arxiu obert es representa com una pestanya. En fer clic dret sobre una pestanya, els arxius es poden executar, guardar, tancar, etc.‚In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc.wizardPMode interactiu vs execució com a script%Interactive mode vs running as scriptwizardIdioma canviatLanguage changedwizardÚTingueu en compte que el sistema d'eines està dissenyat de tal manera que és fàcil de crear les seves pròpies eines. Mira la wiki en línia per obtenir més informació, o utilitzar una de les eines existents, com a exemple.ÂNote that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example.wizard"Eines recomanadesRecommended toolswizardExecutant codi Running codewizard"Selecciona idiomaSelect languagewizard`Les consoles s'executen en un sub-procés, d'aquest manera IEP es manté receptiu, el que li permet seguir treballant i inclús executar codi en una altre consola.¤Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell.wizardBMostra aquest assistent a l'iniciShow this wizard on startupwizardPasStepwizard6El *Navegador d'arxius* ajuda a mantenir una visió general de tots els arxius en un directori. Per gestionar els projectes, feu clic a la icona d'estrella.The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon.wizardpL'*eina estructura codi* ofereix un esbós del codi font.@The *Source structure tool* gives an outline of the source code.wizard@L'editor és on s'escriur el codi'The editor is where you write your codewizard¬El botó dret del ratolí també ens permet fer d'un arxiu qualsevol l'*arxiu mestre* d'un projecte. Aquest arxiu pot ser reconegut pel símbol de l'estrella, i ens permet executar-lo amb més facilitat.ÂThe right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily.wizardLLa consola és on el teu codi s'executa*The shell is where your code gets executedwizardšAmb això conclou l'assistent de IEP. Ara, comença a programar i diverteix-te! IEP assistent'3This wizard can be opened using 'Help > IEP wizard'wizard”Aquest assistent us ajuda a familiaritzar-vos amb el funcionament del IEP.@This wizard helps you get familiarized with the workings of IEP.wizard:Eines per a la seva comoditatTools for your conveniencewizard°Mediante 'Consola > Edita propietats consola', es pot editar i afegir *propietats a la consola*. Això per expemple permet seleccionar un un directori d'inici nou, o emprar un Pythonpath personalitzat.¾Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath.wizardLA través del menú * Eines, es pot seleccionar quines eines utilitzar. Les eines es poden col·locar en la forma més convenient, fins i tot es poden desacobla.ŒVia the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked.wizardTRecomanem especialment les següents eines:,We especially recommend the following tools:wizardlBenvingut a l'(E)ditor (I)nteractiu de (P)ython - IEP!-Welcome to the Interactive Editor for Python!wizard†Quan s'inicia IEP, es crea una *consola* per defecte. Es poden afegir més consoles que s'executen simultàniament, que fins i tot poden correspondre a diferents versions de Python.žWhen IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions.wizardnPodeu executar comandaments directament a la *consola*,1You can execute commands directly in the *shell*,wizardLPodeu executar el fitxer actual o l'arxiu mestre normalment o com un script. Quan s'executa com a script, la consola es reiniciarà per proporcionar un entorn net. La consola també s'inicialitza de manera diferent així que s'assembla molt a l'execució d'un script normal. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution.wizard|o pot escriure codi en l'*editor* i posteriorment executar-ho.7or you can write code in the *editor* and execute that.wizardˆÿA iep-3.7/iep/resources/translations/iep_de_DE.tr.qm0000664000175000017500000012261212346015775022462 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½ÝBY¾>3T‘A'U=» Ð%$ÖT) ì0* f¾ÎªÀˆ]ÏÇRN$þA"z– Yì,K½Z§›[f3P`/D¬…–€eŽ5[‚Ón+>—ÝþG~U¤ÚK¬±Ž‡ð!EÓðxÞ; >þ Ð¥…#óÀ‡å?´N? ETÎ@eöžSâf@'TÜp^0/’€®Wz–ÁZy¬c>`ͯ˜î&F¸HHÃ2®ZËéŸÞ Iíöî·ðÍŽ<íü¨3vܽÜÎÎtò¶ã„¯<3ø@,Þe†[êþ[³nua-p}.P8q^Ž;<}êŸ ÆƒuCZ~†¹~'1¢Ï” ß±WNM3Ü™¨Hc ZI§¾= ŠŽJ&‹æÎAUœc¸+¶@~,ýºr>bzÁr¾<åïéVºø˜XbúEäIùƒc€. R t²–X8N>c{²"´Ž%¥ .-¨L9\ ¬,¥'Ë|I|ËÏ~$Dõ®{føkµ¥.^Á!F>)Q$‡SÑ&EnRy3 7+4b·hSõnfa@>‚.h+n…njÞh+ÛZ‹¼ðáŒH5}™s°¾9 üú¦R>æ'î4¸6z>šX<ô> NF_€I<5RLö®8mY ž._pÔT.J2D‹®}³¯b¢6—aÀ²µ®Îm>fîô÷5…F1¾‹½óåæ/Óe]V²”YÅV²”ãV¿~:o[†([¡îGLåþ`K£°³Q¾¤Ønž¦yÃU·"È9Ëÿž]ëѯ€bÑÚcÕjîQÙjŽFÀážDmÿûNLèA/%‹7Pë_;½f?óWjù^°‰~…Œ±xÞ*3·ªþEå“ Æþ33 þM“ IxŽ” J;Àt“ w¢SR £ 5% °Ön! רÎ3á Þ@Ùå ð.oÏ BñtU 5áîz 7öþwd J€‡Xå xáî,E ”cE Ÿg› ¡FÎ9“ ãlÎmô ý¦>.è 3Ê e…I t®ŠX …ËnOG ;npË ÔÉT- ý a 0ônB\ t§ž1x —"Ib °êîNŽ »sK‚ »)Dú ˳¾6 ë¶nnõ 5Î7· ˜i à äi . 0…k Gnjj MÙN]% Q¥î · Vž\€ Âú¾ˆ„ ä?Îd0 ð‹St!ÿ–«4[>k0\ñ¾8¬³>dÑ»>Q÷¶~Kåü´nÁ _ŽWùïl> (…d<¼^9J:HzVÃ×YLoµþ—M~ß”T}’ëNz³YE¸µ®·ÔàðÖÞŽE+ßDäcÔü.“,ižÙ StapelStackdebug4Zu Python Pfad hinzufuegenAdd path to Python path filebrowser8Loeschen - Sind Sie sicher ?$Are you sure that you want to delete filebrowser&Projektname aendernChange project name filebrowserŒStern klicken um das aktuelle Verzeichnis als Lesezeichen zu markieren"Click star to bookmark current dir filebrowserPfad kopieren Copy path filebrowser6Neues Verzeichnis erstellenCreate new directory filebrowserDatei neuCreate new file filebrowserLoeschenDelete filebrowserDuplikat Duplicate filebrowser DateinamenfilterFilename filter filebrowser*Neuer Verzeichnisname#Give the name for the new directory filebrowser(Name der neuen DateiGive the name for the new file filebrowserNeuer DateinameGive the new name for the file filebrowserdIn dieses Verzeichnis der aktuellen Shell wechseln)Go to this directory in the current shell filebrowser6Daten werden importiert....Import data... filebrowser*Groß-/Kleinschreibung Match case filebrowser$Neuer Projektname:New project name: filebrowserOeffnenOpen filebrowser4Ausserhalb von IEP oeffnenOpen outside IEP filebrowserProjektname Project name filebrowserProjekte: Projects: filebrowser&Regulaerer AusdruckRegExp filebrowser"Projekt entfernenRemove project filebrowserUmbenennenRename filebrowser$Im Finder anzeigenReveal in Finder filebrowser Suche in DateienSearch in files filebrowser8Suche in UnterverzeichnissenSearch in subdirs filebrowser8Dieses Verzeichnis markierenStar this directory filebrowserTMarkierung dieses Verzeichnisses entfernenUnstar this directory filebrowserPÜber IEP ::: Weitere Information zu IEP.)About IEP ::: More information about IEP.menu0Erweiterte Einstellungen4Advanced settings... ::: Configure IEP even further.menuVEine Frage stellen ::: Brauchen Sie Hilfe ?Ask a question ::: Need help?menu²Auto-Vervollständigen Schlüsselwörter ::: Die "Auto-Vervollständigen" Schlüsselwortliste.DAutocomplete keywords ::: The autocompletion list includes keywords.menu¦Automatischer Einzug ::: Einzug wenn "Enter" nach einem Doppelpunkt gedrückt wird. BAutomatically indent ::: Indent when pressing enter after a colon.menuzNach Updates suchen ::: Benutzen Sie die aktuellste Version ?7Check for updates ::: Are you using the latest version?menu@Alle {} Haltepunkte deaktivierenClear all {} breakpointsmenu&Bildschirm löschen."Clear screen ::: Clear the screen.menu\Schliessen ::: Schliessen der aktuellen Datei.!Close ::: Close the current file.menupSchliessen ::: Interpreter beenden und Shell schliessen.8Close ::: Terminate the interpreter and close the shell.menuZAlles schliessen ::: Alle Dateien schliessen.Close all ::: Close all files.menu„Alle anderen schliessen ::: Alle Dateien ausser dieser schliessen.-Close others::: Close all files but this one.menu\Kommentar ::: Ausgewaehlte Zeile kommentieren.&Comment ::: Comment the selected line.menu~Kopieren ::: Ausgewaehlten Text in die Zwischenablage kopieren.1Copy ::: Copy the selected text to the clipboard.menubAusschneiden ::: Ausgewaehlten Text ausschneiden.Cut ::: Cut the selected text.menuZDebug weiter: Sprung zum naechsten Haltepunkt*Debug continue: proceed to next breakpointmenuLDebug weiter: Bis zur naechsten Zeile #Debug next: proceed until next linemenu8Debug zurück: Bis zur Umkehr#Debug return: proceed until returnsmenu8Debug Einsprung: Ein Schritt!Debug step into: proceed one stepmenu„Einrücken ::: Einrücken der ausgewaehlten Zeile rückgängig machen.&Dedent ::: Unindent the selected line.menudZeile loeschen ::: Die ausgewaehlte Zeile löschen.)Delete line ::: Delete the selected line.menuEditEditmenu¢Tastenzuordnungen bearbeiten ::: Tastaturkuerzel für die Menuepunkte bearbeiten. ;Edit key mappings... ::: Edit the shortcuts for menu items.menuÚShell-Konfigurationen bearbeiten... ::: Neue Shell-Konfigurationen und Interpreter-Eigenschaften bearbeiten. WEdit shell configurations... ::: Add new shell configs and edit interpreter properties.menuhSyntax-Stil bearbeiten... ::: Code-Farben verändern.;Edit syntax styles... ::: Change the coloring of your code.menu¸Auto-Vervollstaendigen aktivieren ::: Zeige bestehende Einträge der Auto-Vervollstaendigung.?Enable autocompletion ::: Show autocompletion with known names.menu”Methodentipps aktivieren ::: Zeige Methodentipps mit Funktionssignaturen. ;Enable calltips ::: Show calltips with function signatures.menuvKodierung ::: Die Zeichensatzkodierung der aktuellen Datei.8Encoding ::: The character encoding of the current file.menu–Element ausführen ::: Aktuelles Element des Editors in der Shell ausführen.IExecute cell ::: Execute the current editors's cell in the current shell.menuàElement ausführen und weiter ::: Aktuelles Element des Editors ausführen und dann zum nächsten Element wechseln.]Execute cell and advance ::: Execute the current editors's cell and advance to the next cell.menuzDatei ausführen ::: Datei in der aktuellen Shell ausführen. ?Execute file ::: Execute the current file in the current shell.menuŽMain-Datei ausfuehren ::: Main-Datei in der aktuellen Shell ausfuehren.AExecute main file ::: Execute the main file in the current shell.menulMarkierte Elemente ausführen ::: Ausführen der im aktuellen Editor markierten Zeilen, die selktierten Wörter in der aktuellen Zeile oder die aktuelle Zeile, wenn nichts markiert ist.Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection.menu DateiFilemenu‚Weiter suchen ::: Finde das naechste Auftreten des Suchbegriffs. Such-Widget ausblenden (Escape)Hide search widget (Escape)search`Groß-/Kleinschreibung ::: Passende Worte finden.*Match case ::: Find words that match case.search~Nächstes ::: Finde nächstes Vorkommen des Patterns/Suchmusters.-Next ::: Find next occurrence of the pattern.search†Vorheriges ::: Finde vorheriges Vorkommen des Patterns/Suchmusters.5Previous ::: Find previous occurrence of the pattern.searchzRegulärer Ausdruck / Regex ::: Finden mit Regulärem Ausdruck.*RegExp ::: Find using regular expressions.searchzAlle ersetzen ::: Ersetze alle Treffer in aktuellem Dokument.6Repl. all ::: Replace all matches in current document.searchHErsetzen ::: Ersetze diesen Treffer.Replace ::: Replace this match.search6Pattern/Suchmuster ersetzenReplace patternsearchRGanze Wörter ::: Nur ganze Wörter suchen.&Whole words ::: Find only whole words.search0Konfiguration hinzufügen Add configshell6Code beim Start auszuführenCode to run at startupshellZLöschen ::: Diese Shell-Konfiguration löschen*Delete ::: Delete this shell configurationshell8Datei beim Start auszuführenFile to run at startupshell&Shell KonfigurationShell configurationsshell0System-Standard benutzenUse system defaultshellXarg ::: Kommandozeilen-Argumente (sys.argv)./argv ::: The command line arguments (sys.argv).shellfUmgebung ::: Extra Umgebungsvariablen (os.environ).5environ ::: Extra environment variables (os.environ).shellHexe ::: Die Python-Ausführungsdatei.exe ::: The Python executable.shellˆgui ::: GUI-Toolkit zu integrieren (für interaktives plotten o.ä.). Fgui ::: The GUI toolkit to integrate (for interactive plotting, etc.).shellhipython ::: Verwende iPython-Shell falls verfügbar. +ipython ::: Use IPython shell if available.shellNname ::: Der Name dieser Konfiguration.(name ::: The name of this configuration.shellŠpythonPath :::Eine Liste der Verzeichnisse um Module und Pakete zu suchen. Schreiben Sie jeden Pfad in eine neue Zeile, oder trennen Sie sie mit den Standardtrennzeichen für dieses Betriebssystem. ›pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS.shellvstartDir ::: Das Start-Verzeichnis (nicht im Script-Modus).6startDir ::: The start directory (not in script mode).shell°startupScript ::: Das Script welches beim Start ausgeführt wird (nicht im Script-Modus).DstartupScript ::: The script to run at startup (not in script mode).shell Die Sprache wurde für diesen Assistenten geändert. IEP muss neu gestartet werden, damit die Änderungen wirksam werden. The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. wizard *Ausführen Zelle:* eine Zelle ist alles zwischen zwei Zeilen, startend mit '##'.F*Run cell:* a cell is everything between two lines starting with '##'.wizardŽ*Ausführen Datei:* führt den kompletten Code innerhalb einer Datei aus.1*Run file:* run all the code in the current file.wizard˜*Ausführen Prjekt MAIN-Datei:* führt den Code innerhalb der MAIN-Datei aus. I*Run project main file:* run the code in the current project's main file.wizard*Auswahl ausführen:* wenn kein Text ausgewählt ist, wird die aktuelle Zeile ausgeführt; wenn die Auswahl die ganze Zeile umfasst, wird die Auswahl ausgewertet; dehnt sich die Auswahl über mehrere Zeilen aus, wird IEP alle ausgewählten (die kompletten) Zeilen ausführen. þ*Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines.wizard&Shell KonfigurationConfiguring shellswizardAuf geht's ! Get coding!wizard,Erste Schritte mit IEPGetting started with IEPwizardBMit IEP können die Ereignisse von fünf verschiedenen* GUI-Toolkits * integriert werden, so dass interaktives Plotten mit z.B. Visvis oder Matplotlib möglich ist.IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib.wizardJIEP besteht aus zwei Hauptkomponenten#IEP consists of two main componentswizard¸IEP ist eine Cross-Plattform-Python-IDE. Sie hat * Interaktivität * und * Introspektion * zum Ziel.,Dadurch ist IEP favorisiert für Scientific Computing. Das praktische Design zielt auf * Einfachheit * und * Effizienz *.áIEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*.wizardâIEP unterstützt mehrere verschiedene Möglichkeiten, um Quellcode im Editor auszuführen. (siehe "Ausführen"-Menü).QIEP supports several ways to run source code in the editor. (see the 'Run' menu).wizardIm interaktiven Modus ist "sys.path" eine leere Zeichenfolge [0] (z.B. das aktuelle Verzeichnis), und sys.argv wird auf [''] eingestellt.pIn interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to [''].wizardvIm Script-Modus werden __ file__ und sys.argv [0] auf den Script Dateinamen benannt, sys.path [0] und das Arbeitsverzeichnis werden in das Verzeichnis welches das Skript enthält, gesetzt.¢In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script.wizardtIn der *Editor* wird jede geöffnete Datei als Registerkarte dargestellt. Mit einem Rechtsklick auf eine Registerkarte, können Dateien ausgeführt, gespeichert und geschlossen usw. werden.‚In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc.wizardZ"Interaktiver Modus" gegenüber "Script-Modus"%Interactive mode vs running as scriptwizard Sprache geändertLanguage changedwizard¤Das Werkzeug (Tool)-System ist so ausgelegt, dass es sehr einfach ist, Ihre eigenen Werkzeuge (Tools) zu erstellen. Infos dazu finden Sie in der Online-Wiki, oder verwenden Sie ein vorhandenes Tool als Vorlage.ÂNote that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example.wizard(Empfohlene WerkzeugeRecommended toolswizardLaufender Code Running codewizardSprache wählenSelect languagewizardšShells werden in einem Sub-Prozess ausgeführt, so dass, wenn sie beschäftigt sind, IEP selbst ansprechbar bleibt. So können Sie Programmierung und Ausführen von weiterem Code in einer anderen Shell halten.¤Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell.wizardBDiesen Wizard beim Start anzeigenShow this wizard on startupwizardStepStepwizard8Das * Datei-Browser-Tool * hilft den Überblick über alle Dateien eines Projekts zu behalten. Zum Bearbeiten Ihrer Projekte, klicken Sie auf das Sternsymbol.The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon.wizard„Das Tool *Quell-Struktur* gibt einen Überblick über den Quellcode.@The *Source structure tool* gives an outline of the source code.wizardDIm Editor schreiben Sie Ihren Code'The editor is where you write your codewizard`Mit der rechten Maustaste kann eine Datei zur MAIN-Datei des Projekts geändert werden. Diese Datei ist an einem Sternsymbol zu erkennen und sie kann leichter ausgeführt werden.ÂThe right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily.wizardHIn der Sell wird Ihr Code ausgeführt*The shell is where your code gets executedwizardŠDies schliesst den IEP-Assistenten Und jetzt: Coden und Spass haben ! IEP wizard'wizardªDieser Assistent hilft Ihnen, sich mit der Funktionsweise von IEP vertraut zu machen.@This wizard helps you get familiarized with the workings of IEP.wizard0Extras für Ihren KomfortTools for your conveniencewizardŠÜber Shell > Shell Konfiguration bearbeiten können Sie eine Shell-Konfiguration hinzufügen oder bearbeiten. Sie können ein Heimverzeichnis wählen oder einen benutzerdefinierten Python-Pfad anlegen.¾Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath.wizard\Über das "*Werkzeug-Menü*", kann man auswählen, welche Tools genutzt werden. Die Werkzeuge können frei positioniert werden und angedockt als auch un-angedockt genutzt werden.ŒVia the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked.wizardXWir empfehlen vor allem die folgenden Tools:,We especially recommend the following tools:wizardZWillkommen imr Interactive-Editor für Python!-Welcome to the Interactive Editor for Python!wizard¢Beim Start von IEP, wird eine Standard * Shell * erstellt. Sie können mehrere Shells, die gleichzeitig ausgeführt werden, hinzuzufügen. Die verschiedenen Shells können verschiedene Python-Versionen ausführen.žWhen IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions.wizarddSie können Befehle direkt in der *Shell* ausführen1You can execute commands directly in the *shell*,wizard‚Sie können die aktuelle Datei oder die MAIN-Datei normal ausführen oder als Skript. Wenn Sie sie als Skript ausführen, wird die Shell wieder hergestellt, damit eine fest definierte Umgebung vorliegt. Die Shell ist so initialisiert, dass sie das Skript in einer Umgebung, ähnlich einer "normalen" Umgebung, ausführen kann. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution.wizard†oder Sie können Code im Editor schreiben und diesen dann ausführen.7or you can write code in the *editor* and execute that.wizardˆiep-3.7/iep/resources/translations/iep_zh_CN.tr0000664000175000017500000014113112473035672022103 0ustar almaralmar00000000000000 debug Stack filebrowser Filename filter Search in files Projects: Click star to bookmark current dir Remove project Change project name Add path to Python path Project name New project name: Match case RegExp Search in subdirs Unstar this directory Star this directory Open Open outside IEP Reveal in Finder Copy path Rename Delete Create new file Create new directory Give the new name for the file Give the name for the new directory Duplicate Give the name for the new file Are you sure that you want to delete Go to this directory in the current shell Import data... Run as script menu File Edit View Settings Shell Run Tools Help Use tabs Use spaces spaces plural of spacebar character Indentation ::: The indentation used of the current file. Syntax parser ::: The syntax parser of the current file. Line endings ::: The line ending character of the current file. Encoding ::: The character encoding of the current file. New ::: Create a new (or temporary) file. Open... ::: Open an existing file from disk. Save ::: Save the current file to disk. Save as... ::: Save the current file under another name. Save all ::: Save all open files. Close ::: Close the current file. Close all ::: Close all files. Restart IEP ::: Restart the application. Quit IEP ::: Close the application. Undo ::: Undo the latest editing action. Redo ::: Redo the last undone editong action. Cut ::: Cut the selected text. Copy ::: Copy the selected text to the clipboard. Paste ::: Paste the text that is now on the clipboard. Select all ::: Select all text. Indent ::: Indent the selected line. Dedent ::: Unindent the selected line. Comment ::: Comment the selected line. Uncomment ::: Uncomment the selected line. Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters. Go to line ::: Go to a specific line number. Delete line ::: Delete the selected line. Find or replace ::: Show find/replace widget. Initialize with selected text. Find selection ::: Find the next occurrence of the selected text. Find selection backward ::: Find the previous occurrence of the selected text. Find next ::: Find the next occurrence of the search string. Find previous ::: Find the previous occurrence of the search string. Zoom in Zoom out Zoom reset Location of long line indicator ::: The location of the long-line-indicator. Qt theme ::: The styling of the user interface widgets. Select shell ::: Focus the cursor on the current shell. Select editor ::: Focus the cursor on the current editor. Select previous file ::: Select the previously selected file. Show whitespace ::: Show spaces and tabs. Show line endings ::: Show the end of each line. Show indentation guides ::: Show vertical lines to indicate indentation. Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling). Highlight current line ::: Highlight the line where the cursor is. Font Zooming Clear screen ::: Clear the screen. Interrupt ::: Interrupt the current running code (does not work for extension code). Restart ::: Terminate and restart the interpreter. Terminate ::: Terminate the interpreter, leaving the shell open. Close ::: Terminate the interpreter and close the shell. Edit shell configurations... ::: Add new shell configs and edit interpreter properties. New shell ... ::: Create new shell to run code in. Run selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection. Close others::: Close all files but this one. Rename ::: Rename this file. Pin/Unpin ::: Pinned files get closed less easily. Set/Unset as MAIN file ::: The main file can be run while another file is selected. Run file ::: Run the code in this file. Run file as script ::: Run this file as a script (restarts the interpreter). Help on running code ::: Open the IEP wizard at the page about running code. Reload tools ::: For people who develop tools. Pyzo Website ::: Open the Pyzo website in your browser. IEP Website ::: Open the IEP website in your browser. Ask a question ::: Need help? Report an issue ::: Did you found a bug in IEP, or do you have a feature request? IEP wizard ::: Get started quickly. Check for updates ::: Are you using the latest version? About IEP ::: More information about IEP. Select language ::: The language used by IEP. Automatically indent ::: Indent when pressing enter after a colon. Enable calltips ::: Show calltips with function signatures. Enable autocompletion ::: Show autocompletion with known names. Autocomplete keywords ::: The autocompletion list includes keywords. Edit key mappings... ::: Edit the shortcuts for menu items. Edit syntax styles... ::: Change the coloring of your code. Advanced settings... ::: Configure IEP even further. Debug next: proceed until next line Debug return: proceed until returns Debug continue: proceed to next breakpoint Stop debugging Clear all {} breakpoints Postmortem: debug from last traceback Debug step into: proceed one step Run file as script ::: Restart and run the current file as a script. Run main file as script ::: Restart and run the main file as a script. Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection. Execute cell ::: Execute the current editors's cell in the current shell. Execute cell and advance ::: Execute the current editors's cell and advance to the next cell. Execute file ::: Execute the current file in the current shell. Execute main file ::: Execute the main file in the current shell. Export to PDF ::: Export current file to PDF (e.g. for printing). Paste and select ::: Paste the text that is now on the clipboard and keep it selected in order to change its indentation. Previous cell ::: Go back to the previous cell. Next cell ::: Advance to the next cell. Previous object ::: Go back to the previous top-level structure. Next object ::: Advance to the next top-level structure. Goto Definition ::: Go to definition of word under cursor. Pyzo docs ::: Documentation on Python and the Scipy Stack. menu dialog Could not run Could not run script. Check for the latest version. Edit syntax styling Advanced settings The language has been changed. IEP needs to restart for the change to take effect. Language changed Edit shortcut mapping Shortcut mappings Manage IEP license keys Add license key search Hide search widget (Escape) Find pattern Previous ::: Find previous occurrence of the pattern. Next ::: Find next occurrence of the pattern. Replace pattern Repl. all ::: Replace all matches in current document. Replace ::: Replace this match. Match case ::: Find words that match case. RegExp ::: Find using regular expressions. Whole words ::: Find only whole words. Auto hide ::: Hide search/replace when unused for 10 s. shell Use system default name ::: The name of this configuration. exe ::: The Python executable. gui ::: The GUI toolkit to integrate (for interactive plotting, etc.). pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS. startupScript ::: The script to run at startup (not in script mode). startDir ::: The start directory (not in script mode). Delete ::: Delete this shell configuration Shell configurations Add config ipython ::: Use IPython shell if available. File to run at startup Code to run at startup argv ::: The command line arguments (sys.argv). environ ::: Extra environment variables (os.environ). wizard Getting started with IEP Step Welcome to the Interactive Editor for Python! This wizard helps you get familiarized with the workings of IEP. IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*. This wizard can be opened using 'Help > IEP wizard' Show this wizard on startup Select language The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. Language changed IEP consists of two main components You can execute commands directly in the *shell*, or you can write code in the *editor* and execute that. The editor is where you write your code In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily. The shell is where your code gets executed When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions. Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell. Configuring shells IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib. Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath. Running code IEP supports several ways to run source code in the editor. (see the 'Run' menu). *Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines. *Run cell:* a cell is everything between two lines starting with '##'. *Run file:* run all the code in the current file. *Run project main file:* run the code in the current project's main file. Interactive mode vs running as script You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution. In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']. In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script. Tools for your convenience Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Recommended tools We especially recommend the following tools: The *Source structure tool* gives an outline of the source code. The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon. Get coding! This concludes the IEP wizard. Now, get coding and have fun! iep-3.7/iep/resources/translations/iep_fr_FR.tr.qm0000664000175000017500000012545212346015775022525 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½ÝBY¾?ÕT•ã'VÓ»lÐ%%[ÖT*¨ì0+¢f¾ªÀŒcÏÇTJ$þ§"z›hYì,MqZ§›[f3R8`/Dø…¤€eŽ6ó‚Ón,Ü—ÝþuG~ŤÚ³¬±“{ð!GWðxÞ™ >Œ Ð¥ˆ½#óÀ‹ñ?´N@­ETÎAÀeöžUÔf@'V~p^1£’€®X¸–ÁZ±¬c>b‰¯˜î'ž¸HIŠÃ2®\!éŸÞ 1íöî ðÍŽ>‹ü¨3z½Ü`ÎÎx€¶ãˆm<3 N@,Þgl[êþ];nub×p}.Rbq^Ž<Þ}êŸ öƒuC[̆¹~(‰¢Ï™ ß±WP_3ÜŸHc þI§¾?>ŠŽKÈ‹æÎBáœc¸'¶@~.¿ºr>dHÁr¾• åïéXø˜Y úEä„çùƒe:. x t²âX8N@{²#˜´Ž&e¥ ./?¨L9]†¬,¥gË|IÈËÏ~%†õ®@økµ(¥.`C!F>*í$‡S!&EnTy3 8¡4b·”xSõngØa@>…Îh+nÁnjÞj?Û[_‹¼ð%ŒH5 ™s °¾µ üúêR>L'î6T6z>ŸÞ<ô>!ªFaI<5ŒLö®:-Y ž/Ò_pÔVJ3Þ‹®€¯³¯Æ¢6—cвµ®XÎm>iô÷5‰1¾Móå/Óe›V²”[V²”……V¿~<[†)‡[¡îHÀåþaÿ£°³S®¤Øn£­¦yÃV¦·"ÈMËÿž_ƒѯ€càÑÚdÌÕjî¯ÙjŽH(ážEñÿûNN¼A/%­Pë_=Sf?óXcjù^‰~‰R±xÞ+Ç·ªþ—å“ — Æþ4ó þOƒ IxŽ J;Àx+ w¢SSù £ 5c °Ön"” רÎ5³ Þ@Ù ð.r¯ Bñw× 5áîÆ 7öþ{, J€‡Z+ xáî-ó ”c‘ Ÿi» ¡FÎ;] ãlÎpœ ý¦>0ž 3Êî–@ e…Ÿ t®Ž” …ËnQe ;nsý ÔÉT› ý§ 0ônD t§ž2þ —"K °êîP¬ »sM< »)D’Ú Ë³¾7² ë¶nqÉ 5Î9Y ˜i w äi  0… Gnl MÙN^Ï Q¥î ‘ Vž^ Âú¾ŒŽ ä?Îf ð‹Swz!ÿœ!4[>m \ñ¾‚Ô¬³>f·»>S÷¶~M™ü´nó _ŽY3ïnÖ (…¤<¼^:ÙJ:J,VÃ×ZœoµþœÏ~ß”V1’ëN~ ³YEöµ® =Ôàð@ÖÞŽF©ßDäe–ü.“œi¤yPileStackdebugFAjouter le chemin au path de PythonAdd path to Python path filebrowser@Êtes-vous sûr de vouloir effacer$Are you sure that you want to delete filebrowser$Renommer le projetChange project name filebrowserŒCliquez sur l'étoile pour ajouter le répertoire à la liste des projets"Click star to bookmark current dir filebrowserRCopier le nom complet (chemin) du fichier Copy path filebrowserNouveau dossierCreate new directory filebrowserNouveau fichierCreate new file filebrowserEffacerDelete filebrowserFaire une copie Duplicate filebrowser FiltreFilename filter filebrowser,Nom du nouveau dossier#Give the name for the new directory filebrowser,Nom du nouveau fichierGive the name for the new file filebrowser,Nouveau nom du fichierGive the new name for the file filebrowserJAller dans ce dossier (shell courant))Go to this directory in the current shell filebrowserBImporter un fichier de données...Import data... filebrowser$Respecter la casse Match case filebrowser.Nouveau nom du projet :New project name: filebrowser OuvrirOpen filebrowser4Ouvrir à l'extérieur d'IEPOpen outside IEP filebrowserNom du projet Project name filebrowserProjets : Projects: filebrowserPRecherche avec une expression rationelleRegExp filebrowser>Enlever de la liste des projetsRemove project filebrowserRenommerRename filebrowser*Ouvrir dans le FinderReveal in Finder filebrowser8Rechercher dans les fichiersSearch in files filebrowserHRechercher dans les sous-répertoiresSearch in subdirs filebrowserXAjouter ce répertoire à la liste des projetsStar this directory filebrowserZEnlever ce répertoire de la liste des projetsUnstar this directory filebrowser^À propos d'IEP ::: Plus d'informations sur IEP.)About IEP ::: More information about IEP.menuxParamètres avancés ::: Permet de configurer encore plus IEP.4Advanced settings... ::: Configure IEP even further.menuLPoser une question ::: Besoin d'aide ?Ask a question ::: Need help?menuÒComplétion automatique des mots clés ::: La liste de complétion automatique contient aussi les mots clés.DAutocomplete keywords ::: The autocompletion list includes keywords.menuÄIndentation automatique ::: Indente automatiquement lors d'un passage à la ligne après deux point.BAutomatically indent ::: Indent when pressing enter after a colon.menu†Rechercher des mises à jour ::: Utilisez-vous la dernière version ?7Check for updates ::: Are you using the latest version?menu>Effacer tous les points d'arrêtClear all {} breakpointsmenuFEffacer l'écran ::: Efface l'écran."Clear screen ::: Clear the screen.menuHFermer ::: Ferme le fichier courant.!Close ::: Close the current file.menufFermer ::: Arrête l'interpréteur et ferme le shell.8Close ::: Terminate the interpreter and close the shell.menuPTout fermer ::: Ferme tous les fichiers.Close all ::: Close all files.menuˆFermer les autres onglets ::: Ferme tous les fichiers sauf celui-ci.-Close others::: Close all files but this one.menuZCommenter ::: Commente la ligne sélectionnée.&Comment ::: Comment the selected line.menuxCopier ::: Copie le texte sélectionné dans le presse-papier.1Copy ::: Copy the selected text to the clipboard.menuLCouper ::: Coupe le texte sélectionné.Cut ::: Cut the selected text.menudDébugage : exécuter jusqu'à prochain point d'arrêt*Debug continue: proceed to next breakpointmenuFDébugage pas à pas principal (next)#Debug next: proceed until next linemenu4Débugage pas à pas sortant#Debug return: proceed until returnsmenuBDébugage pas à pas entrant (step)!Debug step into: proceed one stepmenuzDédenter ::: Supprime l'indentation de la ligne sélectionnée.&Dedent ::: Unindent the selected line.menudEffacer la ligne ::: Efface la ligne sélectionnée.)Delete line ::: Delete the selected line.menuÉditionEditmenu®Éditer les racourcis... ::: Modifie les raccourcis pour accéder aux éléments des menus.;Edit key mappings... ::: Edit the shortcuts for menu items.menu¸Configuration des shells ::: Ajoute des shells, et modifie les paramètres de l'interpréteur.WEdit shell configurations... ::: Add new shell configs and edit interpreter properties.menu’Éditer les style du code... ::: Modifie la coloration syntaxique du code.;Edit syntax styles... ::: Change the coloring of your code.menu°Activer la complétion automatique ::: Affiche des proposition de complétion automatique.?Enable autocompletion ::: Show autocompletion with known names.menu²Activer les bulles d'aides ::: Affiche les bulles d'aide avec le prototype des fonctions.;Enable calltips ::: Show calltips with function signatures.menuREncodage ::: Encodage du fichier courant.8Encoding ::: The character encoding of the current file.menu”Exécuter la cellule ::: Exécute la cellule courante dans le shell courant.IExecute cell ::: Execute the current editors's cell in the current shell.menuæExécute la cellule et avancer ::: Exécute la cellule courante dans le shell courant et passe à la cellule suivante.]Execute cell and advance ::: Execute the current editors's cell and advance to the next cell.menu’Exécuter le fichier ::: Exécute le fichier courant dans le shell courant.?Execute file ::: Execute the current file in the current shell.menuªExécuter le fichier principal ::: Exécute le fichier principal dans le shell courant.AExecute main file ::: Execute the main file in the current shell.menuExécuter la sélection ::: Exécute les instructions, les lignes sélectionnées dans l'éditeur ou la ligne courante (en l'absence de sélection).Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection.menuFichierFilemenuŠRechercher suivant ::: Recherche la prochaine occurence de la chaîne.Rechercher la dernière version.Check for the latest version. menu dialog@Impossible de lancer l'exécution Could not run menu dialogVImpossible de lancer l'exécution du script.Could not run script. menu dialog<Édition des raccourcis clavierEdit shortcut mapping menu dialogBModifier la coloration syntaxiqueEdit syntax styling menu dialogLangue modifiéeLanguage changed menu dialog6Gérer la clé de licence IEPManage IEP license keys menu dialog$Raccourcis clavierShortcut mappings menu dialogÈAffichage/Disparition automatique ::: Cache Rechercher/Remplacer s'il n'ets pas utilisé pendant 10s.7Auto hide ::: Hide search/replace when unused for 10 s.search$Recherche un motif Find patternsearchLCacher le widget de recherche (Escape)Hide search widget (Escape)search‚Respecter la casse ::: Recherche des mots en respectant la casse.*Match case ::: Find words that match case.searchlSuivant ::: Recherche la prochaine occurence du motif.-Next ::: Find next occurrence of the pattern.searchpPrécédent ::: Recherche l'occurence précédente du motif.5Previous ::: Find previous occurrence of the pattern.searchExpression Rationnelle ::: Rechercher avec des expressions rationnelles.*RegExp ::: Find using regular expressions.search–Tout remplacer ::: Remplace toutes les occurences dans le document courant.6Repl. all ::: Replace all matches in current document.searchPRemplacer ::: Remplace cette occurrence.Replace ::: Replace this match.search$Remplacer le motifReplace patternsearchrMots complets ::: Recherche uniquement des mots complets.&Whole words ::: Find only whole words.search2Ajouter une configuration Add configshell8Code à exécuter au démarrageCode to run at startupshell@Supprimer ::: Supprimer ce shell*Delete ::: Delete this shell configurationshell>Fichier à exécuter au démarrageFile to run at startupshell.Configurations du shellShell configurationsshellFConfiguration par défaut du systèmeUse system defaultshellfargv ;:; Arguments en ligne de commande (sys.argv)./argv ::: The command line arguments (sys.argv).shellfenviron ::: Variables d'environnement (os.environ).5environ ::: Extra environment variables (os.environ).shell4exe ::: Exécutable Python.exe ::: The Python executable.shellÞGui ::: Intégration d'un toolkit graphique (GUI toolkit) (pour tracer des courbes de manière interactive etc.).Fgui ::: The GUI toolkit to integrate (for interactive plotting, etc.).shell`IPython ::: Utilise IPython s'il est disponible.+ipython ::: Use IPython shell if available.shellBnom ::: Nom de la configuration. (name ::: The name of this configuration.shellœpythonPath ::: Liste des répertoires dans lesquels rechercher des module et paquetages. Chaque chemin doit figurer sur une ligne, ou être séparé des autres par le séparateur par défaut du système.›pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS.shellÀstartDir ::: Répertoire de démarrage (ne s'applique pas lors de l'exécution en tant que script).6startDir ::: The start directory (not in script mode).shellØstartupScript ::: Script à exécuter au démarrage (ne s'applique pas lors de l'exécution en tant que script).DstartupScript ::: The script to run at startup (not in script mode).shell La langue de ce guide a été modifiée. IEP doit être redémarré pour que la modification prenne effet dans toute l'application.  The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. wizardÌ*Exécuter une cellule : * une cellule est tout ce qui se trouve entre deux lignes commençant par '##'.F*Run cell:* a cell is everything between two lines starting with '##'.wizardš*Exécuter le fichier :* Exécute tout le code contenu dans le fichier courant.1*Run file:* run all the code in the current file.wizardê*Exécuter le fichier principal du projet :* exécute tout le code contenu dans le fichier principal du projet courant.I*Run project main file:* run the code in the current project's main file.wizardd*Exécuter la sélection :* S'il n'y a pas de texte sélectionné, la ligne en cours est exécutée ; si la sélection est entièrement contenue dans une ligne, seule la sélection est exécutée ; si la sélection s'étend sur plusieurs lignes, IEP exécutera chacune des lignes (entièrement).þ*Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines.wizard0Configuration des shellsConfiguring shellswizard.En route pour le code ! Get coding!wizard"Démarrer avec IEPGetting started with IEPwizardhIEP peut intégrer la boucle des événements de cinq *toolkits graphiques* différents, permettant ainsi le tracé interactif de courbes avec, par exemple Visvis ou Matplotlib.IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib.wizard^IEP est constitué de deux composants principaux#IEP consists of two main componentswizardäIEP est un EDI Python multi plate-forme qui met l'accent sur l'*interactivité* et l'*introspection*, ce qui le rend très adapté à un usage scientifique. Son design est axé vers la *simplicité* et l'*efficacité*. áIEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*.wizardÈIEP permet d'exécuter le code source de l'éditeur de différentes manières (voir le menu 'Exécuter').QIEP supports several ways to run source code in the editor. (see the 'Run' menu).wizardäEn mode interactif, , sys.path[0] est une chaîne vide (i.e. le répertoire courant), et sys.argv vaut [''].pIn interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to [''].wizardhEn mode script, __file__ et sys.argv[0] sont égaux au nom du script, sys.path[0] et le répertoire de travail sont modifiés et pris égaux au répertoire contenant le script.¢In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script.wizardvDans l'*éditeur*, chaque fichier ouvert est représenté par un onglet. En faisant un clic droit sur l'onglet, le fichier correspondant peut être exécuté, sauvegardé, fermé etc. ‚In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc.wizard^Mode interactif vs exécution en tant que script%Interactive mode vs running as scriptwizardLangue modifiéeLanguage changedwizardÂNotez que le système d'outils est réalisé de telle manière qu'il est facile de créer vos propres outils. Jetez un oeil au wiki pour avoir plus d'informations, ou utilisez un des outils existants comme exemple.ÂNote that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example.wizard$Outils recommandésRecommended toolswizard Exécuter du code Running codewizard$Choisir une langueSelect languagewizardàUn shell s'exécute dans un processus fils, de manière à ce que, même lorsque ce shell est occupé, l'interface d'IEP n'est pas gelée, vous permettant ainsi de continuer à coder, et même d'exécuter du code dans un autre shell.¤Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell.wizard<Afficher ce guide au démarrageShow this wizard on startupwizard Étape StepwizardjL'outil *File browser tool* (gestionnaire de fichiers) permet de garder un oeil sur tous les fichiers d'un répertoire. Pour gérer vos projets, cliquez sur le symbole étoile.The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon.wizard¾L'outil *Source structure tool* (Structure du fichier source) fournit un *plan* du code source.@The *Source structure tool* gives an outline of the source code.wizard^L'éditeur est l'endroit où vous écrivez le code'The editor is where you write your codewizard°Le bouton droit de la souris permet aussi de paramétrer le fichier comme *fichier principal* du projet. Ce fichier peut être repéré par le symbole étoile, et cela permet de l'exécuter plus facilement.ÂThe right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily.wizard\Le shell est l'endroit où* le code est exécuté*The shell is where your code gets executedwizard¦Ceci termine le guide IEP. Maintenant, c'est parti pour le code. Amusez vous bien !Guie IEP'3This wizard can be opened using 'Help > IEP wizard'wizardhCe guide va vous aider à vous familiariser avec IEP.@This wizard helps you get familiarized with the workings of IEP.wizard(Des outils pratiquesTools for your conveniencewizardðVia 'Shell > Configuration des shells', vous pouvez éditer et ajouter *des configurations de shells*. Ceci vous permet par exemple de paramétrer le répertoire de démarrage, ou d'utiliser un chemin python (PythonPath) de votre choix.¾Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath.wizard¸Via the menu *Outils*, il est possible de sélectionner quels outils utiliser. Les outils peuvent être placés dans la fenêtre de la manière que vous voulez, et peuvent aussi être détachés de la fenêtre principale.ŒVia the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked.wizardrNous recommandons tout spécialement les outils suivants :,We especially recommend the following tools:wizardfBienvenue dans IEP (Interactive Editor for Python)!-Welcome to the Interactive Editor for Python!wizardŒQuand IEP démarre, un *shell* par défaut est créé. Vous pouvez ajouter d'autres shells qui s'exécuteront simultanément, et qui peuvent correspondre à différentes versions de Python. žWhen IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions.wizard~Vous pouvez exécuter des commandes directement dans le *shell*,1You can execute commands directly in the *shell*,wizard¨Vous pouvez exécuter le fichier courant ou le fichier principal normalement, ou en tant que script. Dans le second cas, le shell est redémarré et l'environnement est donc propre. Le shell est aussi initialisé différemment de manière à être presque similaire à celui utilisé lors d'une exécution de script ordinaire. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution.wizardzou vous pouvez écrire du code dans l'*éditeur* et l'exécuter.7or you can write code in the *editor* and execute that.wizardˆiep-3.7/iep/resources/translations/iep_es_ES.tr.qm0000664000175000017500000012231412346015775022517 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½ÝBY¾=3T-'S»Ð%#»ÖT(Ôì0)Žf¾ÂªÀ†µÏÇPè$þu"z•BYì,JiZ§›[f3O`/DN…–€eŽ4u‚Ón*Ú—ÝþÇG~=¤Ú-¬±‰ð!DðxÞE > Ð¥ƒk#óÀ†9?´N> ETÎ?eöžRf@'R°p^/m’€®U$–ÁZg¬c>^‰¯˜î%î¸HF Ã2®XéŸÞ ÑíöîëðÍŽ;Ùü¨3tÞ½ÜÎÎrä¶ãƒ <3ò@,Þct[êþYƒnu^Õp}.O8q^Ž:}êŸ ~ƒuCX†¹~&բϓ/ß±WM3ܘòHc :I§¾<žŠŽHî‹æÎ@9œc¸'¶@~,ºr>`,Ár¾@åïéTnø˜VúEäaùƒa:. þ t²fX8N=_{²!Þ´Ž$É¥ .-¨L9Y¬,¥÷Ë|IZËÏ~#æõ®yÊøkµ¥.\a!F>(ý$‡S½&EnQ 3 5ë4b·Ž~Sõncìa@>€:h+nnjÞf-ÛW¡‹¼ðËŒH5_™s}°¾5 üúŽR>Ü'î3æ6z>™¨<ô>þF]I<5<Lö®7QY ž-¢_pÔRFJ1p‹®{_³¯4¢6—_z²µ®öÎm>dðô÷5ƒ´1¾Š=óå®/Óe-V²”WSV²”ñV¿~9C[†'Ã[¡îEèåþ]ÿ£°³P^¤ØnG¦yÃRØ·"ÈËÿž[«ѯ€_ÆÑÚ`ÒÕjîaÙjŽETážC]ÿûNKA/%‰­Pë_:—f?óTÇjù^ ‰~„±xÞ)µ·ªþAå“é Æþ2} þLY IxŽ€ J;Àr… w¢SP¡ £ 5ñ °Ön à רÎ3 Þ@ÙË ð.m• Bñr5 5áî€ 7öþun J€‡Vw xáî+Å ”cQ Ÿe• ¡FÎ8Ÿ ãlÎk¸ ý¦>.R 3Êîž e… t®ˆÆ …ËnN) ;nnà ÔÉT ý  0ônAf t§ž0® —"H: °êîMb »sJ8 »)DŒô ˳¾5 ë¶nlÇ 5Î6ƒ ˜i äi â 0…q GnhJ MÙNZù Q¥î ? VžZ6 Âú¾†Ü ä?Îb ð‹SqÚ!ÿ•÷4[>i\ñ¾}l¬³>b¯»>OÕ÷¶~J•ü´n¡ _ŽU±ïià (…D<¼^8J:G<VÃ×Vöoµþ–­~ß”Rs’ëNx¦³YE µ®—ÔàððÖÞŽCçßDäa’ü.“øižPilaStackdebug8Añade ruta a rutas de PythonAdd path to Python path filebrowser6Seguro que quieres borrarlo$Are you sure that you want to delete filebrowser.Cambiar nombre proyectoChange project name filebrowserjApretar la estrella para marcar el directorio actual "Click star to bookmark current dir filebrowserCopia ruta Copy path filebrowser Crear directorioCreate new directory filebrowserCrear archivoCreate new file filebrowserEliminarDelete filebrowserDuplicar Duplicate filebrowser6Filtros de nombres archivosFilename filter filebrowser.Da nombre al directorio#Give the name for the new directory filebrowser&Da nomre al archivoGive the name for the new file filebrowser&Da nomre al archivoGive the new name for the file filebrowserTIr a este directorio en el terminal actual)Go to this directory in the current shell filebrowser"Importar datos...Import data... filebrowserLSensible entre mayúsculas y minúsculas Match case filebrowser*Nuevo nomre proyecto:New project name: filebrowser AbrirOpen filebrowser$Abrir fuera de iepOpen outside IEP filebrowserNombre proyecto Project name filebrowserProyectos: Projects: filebrowser"Expresión RegularRegExp filebrowserBorrar proyectoRemove project filebrowserRenombrarRename filebrowser"Muestra en FinderReveal in Finder filebrowser"Busca en archivosSearch in files filebrowser"Buscar en subdirsSearch in subdirs filebrowser"Marcar directorioStar this directory filebrowser(Desmarcar directorioUnstar this directory filebrowserPSobre IEP ::: Mas información sobre IEP.)About IEP ::: More information about IEP.menu`Opciones avanzadas... ::: Configura IEP aún más.4Advanced settings... ::: Configure IEP even further.menuJHaz una pregunta ::: Necesitas ayuda?Ask a question ::: Need help?menu¨Autocompletado palabras clave ::: La lista de autocompletado incluye palabras clave.DAutocomplete keywords ::: The autocompletion list includes keywords.menuÖSangría automática ::: Sangrar código automaticamente cuando presiones tecla retorno después de dos puntos.BAutomatically indent ::: Indent when pressing enter after a colon.menutBusca actualizaciones ::: Tienes la última version de IEP?7Check for updates ::: Are you using the latest version?menuTBorrar todos los puntos de interrupción {}Clear all {} breakpointsmenuLBorrar pantalla ::: Borra la pantalla."Clear screen ::: Clear the screen.menuBCerrar ::: Cerrar archivo actual.!Close ::: Close the current file.menulCerrar ::: Finaliza el intérprete y cierra la consola.8Close ::: Terminate the interpreter and close the shell.menuhCerrar todos ::: Cerrar todos los archivos abiertos.Close all ::: Close all files.menu~Cerrar otros ::: Cierra todos los archivos a excepción de este.-Close others::: Close all files but this one.menuNComentar ::: Comentar líneas selección.&Comment ::: Comment the selected line.menuPCopiar ::: Copiar el texto seleccionado.1Copy ::: Copy the selected text to the clipboard.menuPCortar ::: Cortar el texto seleccionado.Cut ::: Cut the selected text.menu‚Depuración continuar: proceder al siguiente punto de interrupción*Debug continue: proceed to next breakpointmenunDepuración siguiente: proceder hasta la siguiente línea#Debug next: proceed until next linemenuXDepuración retorno: Depurar hasta el retorno#Debug return: proceed until returnsmenu`Etapa de depuración a dentro: proceder a un paso!Debug step into: proceed one stepmenuVDesangrar ::: Desangrar línea seleccionada.&Dedent ::: Unindent the selected line.menuVBorrar línea ::: Borrar línea seleccionada.)Delete line ::: Delete the selected line.menu EditarEditmenu°Editar asignaciones de teclas... ::: Editar los accesos directos para elementos de menú.;Edit key mappings... ::: Edit the shortcuts for menu items.menuÚEdita configuración consola... ::: Añade configuraciones a la consola y edita las propiedades del intérprete.WEdit shell configurations... ::: Add new shell configs and edit interpreter properties.menu’Edita estilo sintaxis... ::: Cambiar colores sintaxis texto de tu código.;Edit syntax styles... ::: Change the coloring of your code.menu”Habilitar autocompletado ::: Muestra autocompletado con nombres conocidos.?Enable autocompletion ::: Show autocompletion with known names.menu€Habilitar ayuda funcions ::: Enseñar ayudas prototipo funciones.;Enable calltips ::: Show calltips with function signatures.menupCodificación ::: Codificacion carácteres archivo actual.8Encoding ::: The character encoding of the current file.menušEjecutar celda ::: Ejecutar la celda del editor actual en el terminal actual.IExecute cell ::: Execute the current editors's cell in the current shell.menu–Ejecutar celda y avanzar ::: Ejecutar celda actual y avance a la siguiente.]Execute cell and advance ::: Execute the current editors's cell and advance to the next cell.menuŠEjecutar fichero ::: Ejecute el archivo actual en el terminal actual.?Execute file ::: Execute the current file in the current shell.menu¤Ejecutar fichero principal ::: Ejecute el archivo principal en el terminal actual.AExecute main file ::: Execute the main file in the current shell.menu4Ejecutar selección ::: Ejecutar líneas del editor seleccionadas, palabras seleccionados en la línea actual, o la línea actual si no hay ninguna selección.Execute selection ::: Execute the current editor's selected lines, selected words on the current line, or current line if there is no selection.menuArchivoFilemenuŽBuscar siguiente ::: Buscar siguiente ocurrencia de la cadena de busca.Oculta widget busqueda (Escape)Hide search widget (Escape)search~Sensible mayúsculas ::: Sensible entre mayúsculas y minúsculas.*Match case ::: Find words that match case.searchjSiguiente ::: Buscar siguiente ocurrencia del patrón.-Next ::: Find next occurrence of the pattern.searchfAnterior ::: Buscar anterior ocurrencia del patrón.5Previous ::: Find previous occurrence of the pattern.searchtExpresión regular ::: Buscar usando expresiones regulares.*RegExp ::: Find using regular expressions.search”Reemplazar todos ::: reemplazar todas las coincidencias en este documento.6Repl. all ::: Replace all matches in current document.searchPReemplaza ::: Reemplaza esta occurencia.Replace ::: Replace this match.search"Reemplazar patrónReplace patternsearchdPalabras enteras ::: Buscar sólo palabras enteras.&Whole words ::: Find only whole words.search(Añadir configuración Add configshell6Código a ejecutar al inicioCode to run at startupshellbBorrar ::: Borra la configuracion de esta consola*Delete ::: Delete this shell configurationshell8Archivo a ejecutar al inicioFile to run at startupshell*Configuración consolaShell configurationsshellFUsa opcions por defecto del sistemaUse system defaultshellbargv ::: Argumentos línea de comandos (sys.argv)./argv ::: The command line arguments (sys.argv).shellvenviron ::: Variables de entorno addicionales (os.environ).5environ ::: Extra environment variables (os.environ).shell@exe ::: El ejecutable de Python.exe ::: The Python executable.shell¤gui ::: Kit de herramientas de GUI para integrar (para trazado interactivo, etc.).Fgui ::: The GUI toolkit to integrate (for interactive plotting, etc.).shell`ipython ::: Usar terminal IPython si disponible.+ipython ::: Use IPython shell if available.shellVNombre ::: El nombre de esta configuración.(name ::: The name of this configuration.shellhpythonPath ::: Lista de directorios donde buscar módulos y paquetes. Introduce cada ruta en un nueva línea, o separalas mediante el separador por defecto de tu sistema operativo. ›pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS.shelllDirInicio ::: Directorio al inició (no en modo guión).6startDir ::: The start directory (not in script mode).shell|GuiónInicio ::: Guión a ejecutar al inicio (no en modo guión).DstartupScript ::: The script to run at startup (not in script mode).shell0 El lenguaje se ha cambiado para este asistente. IEP debe reiniciarse para que los cambios surtan efecto en toda la aplicación.  The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. wizard®*Ejecutar celda:* una celda es todo lo que hay entre dos líneas que comienzan con '##'.F*Run cell:* a cell is everything between two lines starting with '##'.wizard‚*Ejecutar archivo:* ejecutar todo el código en el archivo actual.1*Run file:* run all the code in the current file.wizardÊ*Ejecutar archivo maestro de proyecto:* ejecutar el código en el archivo maestro del proyecto actual.I*Run project main file:* run the code in the current project's main file.wizardþ*Ejecutar selección:* si no hay texto seleccionado, la línea actual se ejecuta, si la selección está en una sola línea, la selección se evalúa, si la selección incluye varias líneas, el IEP ejecutará las líneas (completas) seleccionados.þ*Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines.wizard.Configurar las consolasConfiguring shellswizard*Comienza a programar! Get coding!wizard,Primeros pasos con IEPGetting started with IEPwizardRIEP puede integrar el ciclo de eventos de cinco *herramientas GUI* distintas, lo que permite por ejemplo, hacer gráficas interactivament con Visvis o Matplotlib.IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib.wizardRIEP consta de dos componentes principales#IEP consists of two main componentswizard<IEP es un entorno de desarrollo integrado (IDE) de python multi-plattaforma centrado en la interactividad * * y * introspección *, lo que hace que sea muy adecuado para la computación científica. Su diseño práctico está dirigido a * sencillez * y * Eficiencia *.áIEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*.wizard¸IEP admite varias formas de ejecutar código fuente en el editor. (véase el menu 'Ejecutar').QIEP supports several ways to run source code in the editor. (see the 'Run' menu).wizard En el modo interactivo, sys.path [0] es una cadena vacía (es decir, el directorio actual), y sys.argv se establece como [''].pIn interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to [''].wizardPEn el modo guión, __file__ y sys.argv[0] se ajustan al nombre del archivo guión, sys.path[0] y el directorio de trabajo se ajustan al directorio que contiene el script.¢In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script.wizardXEn el *editor*, cada archivo abierto se representa como una pestaña. Al hacer clic derecho sobre una pestaña, los archivos se pueden ejecutar, guardar, cerrar, etc.‚In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc.wizardPModo interactivo vs ejecución como guión%Interactive mode vs running as scriptwizardIdioma cambiadoLanguage changedwizardöTenga en cuenta que el sistema de herramientas está diseñado de tal manera que es fácil de crear sus propias herramientas. Mira la wiki en línea para obtener más información, o utilizar una de las herramientas existentes, como ejemplo.ÂNote that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example.wizard2Herramientas recomendadasRecommended toolswizard"Ejecutando código Running codewizard"Selecciona idiomaSelect languagewizardzLas consolas se ejecutan en un sub-proceso, de esta manera IEP se mantiene siempre receptivo, lo que le permite seguir trabajando e incluso ejecutar código en otra consola.¤Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell.wizardFMostrar este asistente en el inicioShow this wizard on startupwizardPasoStepwizardNEl *Navegador de archivos* ayuda a mantener una visión general de todos los archivos en un directorio. Para gestionar sus proyectos, haga clic en el icono de estrella.The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon.wizardŒLa *herramienta estructura código* ofrece un esbozo del código fuente.@The *Source structure tool* gives an outline of the source code.wizardNEl editor es donde se escribe el código'The editor is where you write your codewizardÚEl botón derecho del ratón también nos permite hacer de un archivo qualquiera el *archivo maestro* de un proyecto. Este archivo puede ser reconocido por su símbolo de la estrella, y permite ejecutarlo con mayor facilidad.ÂThe right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily.wizardPLa consola es donde tu código se ejecuta*The shell is where your code gets executedwizardžCon esto concluye el asistente de IEP. Ahora, empieza a programar y diviértete! IEP assistente '3This wizard can be opened using 'Help > IEP wizard'wizard’Este asistente le ayudará a familiarizarse con el funcionamiento del IEP.@This wizard helps you get familiarized with the workings of IEP.wizard<Herramientas para su comodidadTools for your conveniencewizard¸Mediante 'Consola > Edita propiedades consola', se puede editar y añadir *propiedades a la consola*. Esto permite por ejemplo seleccionar un directorio de inicio nuevo, o usar un Pythonpath personalizado.¾Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath.wizardlA través del menú *Herramientas*, se puede seleccionar qué herramientas utilizar. Las herramientas se pueden colocar en cualquier forma que desee. También pueden desacoplarse.ŒVia the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked.wizardnRecomendamos especialmente las siguientes herramientas:,We especially recommend the following tools:wizardnBienvenido al (E)ditor (I)nteractivo de (P)ython - IEP!-Welcome to the Interactive Editor for Python!wizardŒCuando se inicia IEP, se crea una *consola* por defecto. Puedes añadir más consolas que se ejecutas simultaneamente, que pueden incluso corresponder a diferentes versiones de Python.žWhen IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions.wizardjPuede ejecutar comandos directamente en *la consola*,1You can execute commands directly in the *shell*,wizardxPuede ejecutar el archivo actual o al archivo maestro normalmente o como un guión. Cuando se ejecuta como guión, la shell se reinicializará para proporcionar un entorno limpio. La consola también se inicializa de manera diferente de modo que se parece mucho a la ejecución de un guión normal. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution.wizard‚o puede escribir código en el *editor* y posterioment ejecutarlo.7or you can write code in the *editor* and execute that.wizardˆiep-3.7/iep/resources/translations/iep_ru_RU.tr.qm0000664000175000017500000010730012346015775022553 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½ÝBY¾29T{T'Eo»åÐ%mÖTœì0hf¾CªÀs.ÏÇBþ$þè"z€Yì, Ý Ð¥p"#óÀr´ETÎ2ýeöžDtf@'E p^$Ù’€®GŒ–ÁZî¬c>P)¯˜î:¸H8öÃ2®J©éŸÞ ,íöî¦ðÍŽ0Áü¨3bÎÎ_ÿ¶ãoÄ@,ÞRh[êþKŸnuPmp}.A&q^Ž/8}êŸ çƒuCJZ†¹~ó¢Ï~ß±W? 3܃wHcI§¾1œŠŽ;œc¸'¶@~"ºr>Q4Ár¾zåïéFÎø˜HZúEälJùƒQÀ. [ t²BX8N2a´ŽA¥ ."Ÿ¨L9Kà¬,¥ÏË|IËÏ~’õ®fÇøkµ¥.N-!F>Ã$‡SF&EnC!3 +E4b·yÑSõnRàa@>m)h+n*njÞTlÛIñ‹¼ðBŒH5¾™s ^°¾Î üú R>¯'î)D6z>„5FNâI<5öLö®,¡Y ž#4_pÔD¦J&ä‹®h>³¯ ;¢6—Qô÷5p_1¾vHóå|/ÓeV²”I©V²”læV¿~.w[†Á[¡î80åþO¥£°³Bf¤Øn‡Ò¦yÃE:·"È×ËÿžM“ÕjîäÙjŽ7®áž5¯ÿûN=œA/%uÐPë_/Áf?óG1jù^]‰~p£±xÞ‘·ªþå“P Æþ'ß þ>[ IxŽY J;À_¨ w¢SB± £ 5¢ רÎ({ Þ@Ù ð.[> Bñ_d 5áîK 7öþb­ J€‡HË xáî!c ŸSâ ¡FÎ-å ãlÎY— ý¦>#Î 3Êî{Ç e…Ò t®tý …Ën?ó ;n\2 ÔÉTt ý @ 0ôn4 t§ž&$ —":J °êî?T »s<> »)Dxe ˳¾*z ë¶nZˆ 5Î+ß ˜iø äi? 0…_ GnVM MÙNM Q¥îš VžLV Âú¾sS ð‹S_ !ÿ€°4[>W \ñ¾j»>AÛ÷¶~<Ÿ _ŽHïWù (…Ç<¼^-eJ:9ŒVÃ×I:oµþb~ß”DÙ’ëNe—³YEFµ®þÔàðuÖÞŽ6IßDäRü.“ ýiˆ|!B5:Stackdebug6>1028BL ?CBL 2 Python pathAdd path to Python path filebrowser,K A>18@05B5AL C40;8BL$Are you sure that you want to delete filebrowser(5@58<5=>20BL ?@>5:BChange project name filebrowser6>1028BL :0B0;>3 2 70:;04:8"Click star to bookmark current dir filebrowser>?8@>20BL ?CBL Copy path filebrowser*!>740BL =>2K9 :0B0;>3Create new directory filebrowser$!>740BL =>2K9 D09;Create new file filebrowser#40;8BLDelete filebrowserC1;8@>20BL Duplicate filebrowser$8;LB@ =0720=8OFilename filter filebrowser$>2>5 8<O :0B0;>30#Give the name for the new directory filebrowser<O D09;0Give the name for the new file filebrowser>2>5 8<O D09;0Give the new name for the file filebrowser"#G8BK20BL @538AB@ Match case filebrowser$>2>5 8<O ?@>5:B0:New project name: filebrowserB:@KBLOpen filebrowser"B:@KBL 2 A8AB5<5Open outside IEP filebrowser<O ?@>5:B0 Project name filebrowser@>5:BK: Projects: filebrowser RegExpRegExp filebrowser#40;8BL ?@>5:BRemove project filebrowser5@58<5=>20BLRename filebrowser">:070BL 2 FinderReveal in Finder filebrowserA:0BL 2 D09;0ESearch in files filebrowser*A:0BL 2 ?>4:0B0;>30ESearch in subdirs filebrowser 70:;04:8Star this directory filebrowser&#40;8BL 87 70:;04>:Unstar this directory filebrowserP ?@>3@0<<5 ::: >;LH5 8=D>@<0F88 > IEP.)About IEP ::: More information about IEP.menun@>428=CBK5 =0AB@>9:8 ::: >?>;=8B5;L=K5 =0AB@>9:8 IEP.4Advanced settings... ::: Configure IEP even further.menu>040BL 2>?@>A ::: C6=0 ?><>IL?Ask a question ::: Need help?menuˆ>?>;=OBL :;NG52K5 A;>20 ::: 2B><0B8G5A:8 4>?>;=OBL :;NG52K5 A;>20.DAutocomplete keywords ::: The autocompletion list includes keywords.menu 2B><0B8G5A:89 >BABC? ::: 2B><0B8G5A:89 >BABC? ?>A;5 42>5B>G8O 8 =060B8O Enter.BAutomatically indent ::: Indent when pressing enter after a colon.menur@>25@8BL >1=>2;5=8O ::: K 8A?>;L7C5B5 ?>A;54=NN 25@A8N?7Check for updates ::: Are you using the latest version?menu0!=OBL 2A5 1@59:?>8=BK {}Clear all {} breakpointsmenuDG8AB8BL M:@0= ::: G8AB8BL M:@0=."Clear screen ::: Clear the screen.menuB0:@KBL ::: 0:@KBL B5:CI89 D09;.!Close ::: Close the current file.menuŠ0:@KBL ::: @8=C48B5;L=> 7025@H8BL 8=B5@?@5B0B>@ 8 70:@KBL >1>;>G:C.8Close ::: Terminate the interpreter and close the shell.menuD0:@KBL 2A5 ::: 0:@KBL 2A5 D09;K.Close all ::: Close all files.menuh0:@KBL >AB0;L=>5::: 0:@KBL 2A5 D09;K, :@><5 MB>3>.-Close others::: Close all files but this one.menun0:><<5=B8@>20BL ::: 0:><<5=B8@>20BL 2K1@0==CN AB@>:C.&Comment ::: Comment the selected line.menut>?8@>20BL ::: >?8@>20BL 2K45;5==K9 B5:AB 2 1CD5@ >1<5=0.1Copy ::: Copy the selected text to the clipboard.menuNK@570BL ::: K@570BL 2K45;5==K9 B5:AB.Cut ::: Cut the selected text.menuBB;04:0: : A;54CNI5<C 1@59:?>8=BC*Debug continue: proceed to next breakpointmenu8B;04:0: =0 A;54CNICN AB@>:C#Debug next: proceed until next linemenu$B;04:0: H03 =0704#Debug return: proceed until returnsmenuf>=5F >BABC?0 ::: #1@0BL >BABC? C 2K1@0==>9 AB@>:8.&Dedent ::: Unindent the selected line.menuX#40;8BL AB@>:C ::: #40;8BL 2K1@0==CN AB@>:C.)Delete line ::: Delete the selected line.menu @02:0Editmenu>@OG85 :;028H8... :::  540:B8@>20BL 3>@OG85 :;028H8 4;O M;5<5=B>2 <5=N.;Edit key mappings... ::: Edit the shortcuts for menu items.menuÈ0AB@>9:8 >1>;>G:8 ::: >1028BL =>2K5 :>=D83C@0F88 >1>;>G:8 8 @540:B8@>20BL A2>9AB20 8=B5@?@5B0B>@0.WEdit shell configurations... ::: Add new shell configs and edit interpreter properties.menuj!B8;L >D>@<;5=8O... ::: 7<5=8BL F25B>2CN AE5<C :>40.;Edit syntax styles... ::: Change the coloring of your code.menu¤:;NG8BL 02B>4>?>;=5=85 ::: >:07K20BL 20@80=BK 02B>4>?>;=5=8O 4;O 8725AB=KE 8<5=.?Enable autocompletion ::: Show autocompletion with known names.menu–:;NG8BL ?>4A:07:8 ::: >:07K20BL ?>4A:07:C A83=0BC@K DC=:F88 ?@8 55 22>45.;Enable calltips ::: Show calltips with function signatures.menuN>48@>2:0 ::: >48@>2:0 B5:CI53> D09;0.8Encoding ::: The character encoding of the current file.menu$09;FilemenuZA:0BL 40;55 ::: A:0BL A;54CNI55 A>2?045=85.8A:0/70<5=K 4;O 2K45;5==>3> B5:AB0.LFind or replace ::: Show find/replace widget. Initialize with selected text.menu\A:0BL @0=55 ::: A:0BL ?@54K4CI55 A>2?040=85.DFind previous ::: Find the previous occurrence of the search string.menutA:0BL 2K45;5==>5 40;55 ::: A:0BL 40;55 2K45;5==K9 B5:AB.AFind selection ::: Find the next occurrence of the selected text.menutA:0BL 2K45;5==>5 @0=55 ::: A:0BL @0=55 2K45;5==K9 B5:AB.NFind selection backward ::: Find the previous occurrence of the selected text.menu (@8DBFontmenu`5@59B8 : AB@>:5 ::: 5@59B8 : AB@>:5 ?> =><5@C.,Go to line ::: Go to a specific line number.menu ><>ILHelpmenu”><>IL ?> 70?CA:C :>40 ::: B:@KBL IEP-<0AB5@0 =0 AB@0=8F5 > 70?CA:5 :>40.LHelp on running code ::: Open the IEP wizard at the page about running code.menu~>4A25G820BL 2K1@0==CN ;8=8N ::: >4A25G820BL ;8=8N A :C@A>@><.BHighlight current line ::: Highlight the line where the cursor is.menunIEP 251-A09B ::: B:@KBL 251-A09B IEP 2 20H5< 1@0C75@5.5IEP Website ::: Open the IEP website in your browser.menuDIEP-<0AB5@ ::: KAB@>5 7=0:><AB2>.#IEP wizard ::: Get started quickly.menuXBABC? ::: >1028BL >BABC? 2K1@0==>9 AB@>:5.$Indent ::: Indent the selected line.menuHBABC?K ::: BABC?K 2 B5:CI5< D09;5.9Indentation ::: The indentation used of the current file.menuž@5@20BL ::: @5@20BL 2K?>;=5=85 @01>B0NI53> :>40 (=5 @01>B05B 4;O @0AH8@5=89).TInterrupt ::: Interrupt the current running code (does not work for extension code).menuÒK@02=820=85 :><<5=B0@8O/AB@>:8 4>:C<5=B0F88::: K@02=820=85 2K45;5==>3> B5:AB0 4> 70 A8<2>;>2 =0 AB@>:C.`Justify comment/docstring::: Reshape the selected text so it is aligned to around 70 characters.menuh>=5F AB@>:8 ::: !8<2>; :>=F0 AB@>:8 B5:CI53> D09;0.?Line endings ::: The line ending character of the current file.menu–;8=0 8=48:0B>@0 4;8==>9 AB@>:8 :::  0A?>;>65=85 8=48:0B>@0 4;8==>9 AB@>:8.LLocation of long line indicator ::: The location of the long-line-indicator.menuZ>2K9 ::: !>740BL =>2K9 (8;8 2@5<5==K9) D09;.)New ::: Create a new (or temporary) file.menu~>20O >1>;>G:0 ... ::: !>740BL =>2CN >1>;>G:C 4;O 70?CA:0 :>40.2New shell ... ::: Create new shell to run code in.menuHB:@KBL... ::: B:@KBL D09; A 48A:0.,Open... ::: Open an existing file from disk.menuZAB028BL ::: AB028BL B5:AB 87 1CD5@0 >1<5=0.6Paste ::: Paste the text that is now on the clipboard.menu€0:@5?8BL/B:@5?8BL ::: 0:@5?;5==K9 D09; =5 B0: ?@>AB> 70:@KBL.2Pin/Unpin ::: Pinned files get closed less easily.menu\B;04:0 ?>A;5 ?045=8O: A ?>A;54=59 B@0AA8@>2:8%Postmortem: debug from last tracebackmenurPyzo 251-A09B ::: B:@KBL 251-A09B Pyzo 2 20H5< 1@0C75@5.7Pyzo Website ::: Open the Pyzo website in your browser.menutQt B5<0 ::: !B8;L >D>@<;5=8O ?>;L7>20B5;LA:>3> 8=B5@D59A0.7Qt theme ::: The styling of the user interface widgets.menuD0:@KBL IEP ::: 0:@KBL ?@>3@0<<C.#Quit IEP ::: Close the application.menuL>2B>@ ::: >2B>@8BL ?>A;54=NN ?@02:C.-Redo ::: Redo the last undone editong action.menuz5@570?CAB8BL 8=AB@C<5=BK ::: ;O @07@01>BG8:>2 8=AB@C<5=B>2..Reload tools ::: For people who develop tools.menuT5@58<5=>20BL ::: 5@58<5=>20BL MB>B D09;.Rename ::: Rename this file.menu–!>>1I8BL > ?@>1;5<5 ::: 0H;8 103 2 IEP, 8;8 E>B8B5 =>2CN DC=:F8>=0;L=>ABL?QReport an issue ::: Did you found a bug in IEP, or do you have a feature request?menu5@570?CAB8BL ::: @8=C48B5;L=> 7025@H8BL 8 ?5@570?CAB8BL 8=B5@?@5B0B>@.2Restart ::: Terminate and restart the interpreter.menu\5@570?CAB8BL IEP ::: 5@570?CAB8BL ?@>3@0<<C.(Restart IEP ::: Restart the application.menu 0?CA:Runmenu\0?CAB8BL D09; ::: 0?CAB8BL :>4 2 MB>< D09;5.'Run file ::: Run the code in this file.menuº0?CAB8BL D09; :0: A:@8?B ::: 0?CAB8BL MB>B D09; :0: AF5=0@89 (?5@570?CA:05B 8=B5@?@5B0B>@).LRun file as script ::: Run this file as a script (restarts the interpreter).menuò0?CAB8BL 2K45;5==>5 ::: 0?CAB8BL 2K45;5==K5 AB@>:8, 2K45;5==K5 A;>20 2 AB@>:5, 8;8 2K1@0==CN ;8=8N, 5A;8 =5B 2K45;5=8O.ˆRun selection ::: Run the current editor's selected lines, selected words on the current line, or current line if there is no selection.menuZ!>E@0=8BL ::: !>E@0=8BL B5:CI89 D09; =0 48A:.'Save ::: Save the current file to disk.menu^!>E@0=8BL 2A5 ::: !>E@0=8BL 2A5 >B:@KBK5 D09;K.!Save all ::: Save all open files.menu|!>E@0=8BL :0:... ::: !>E@0=8BL B5:CI89 D09; ?>4 4@C38< 8<5=5<.8Save as... ::: Save the current file under another name.menuJK45;8BL 2A5 ::: K45;8BL 25AL B5:AB.Select all ::: Select all text.menutK1@0BL @540:B>@ ::: B?@02;O5B :C@A>@ 2 B5:CI89 @540:B>@.9Select editor ::: Focus the cursor on the current editor.menuPK1@0BL O7K: ::: K1@0BL O7K: ?@>3@0<<K.-Select language ::: The language used by IEP.menuhK1@0BL ?@54K4CI89 D09; ::: K1@0BL ?@54K4CI89 D09;.=Select previous file ::: Select the previously selected file.menutK1@0BL >1>;>G:C ::: B?@02;O5B :C@A>@ 2 B5:CICN >1>;>G:C.7Select shell ::: Focus the cursor on the current shell.menuÄ#AB0=>28BL/!1@>A8BL :0: + D09; ::: ;02=K9 D09; <>65B 1KBL 70?CI5=, ?>:0 2K1@0= 4@C3>9 D09;.SSet/Unset as MAIN file ::: The main file can be run while another file is selected.menu0AB@>9:8Settingsmenu1>;>G:0Shellmenuœ>:07K20BL ;8=8N >BABC?0 ::: >:07K20BL 25@B8:0;L=CN ;8=8N, 8=48:0B>@ >BABC?0.HShow indentation guides ::: Show vertical lines to indicate indentation.menuv>:07K20BL :>=5F AB@>:8 ::: >:07K20BL A8<2>; :>=F0 AB@>:8.0Show line endings ::: Show the end of each line.menul>:07K20BL ?@>15;K ::: >:07K20BL ?@>15;K 8 B01C;OF88.)Show whitespace ::: Show spaces and tabs.menu$AB0=>28BL >B;04:CStop debuggingmenuN!8=B0:A8A ::: !8=B0:A8A B5:CI53> D09;0.8Syntax parser ::: The syntax parser of the current file.menu¦025@H8BL ::: @8=C48B5;L=> 7025@H8BL 8=B5@?@5B0B>@, => >AB028BL >1>;>G:C >B:@KB>9.@Terminate ::: Terminate the interpreter, leaving the shell open.menu=AB@C<5=BKToolsmenur 0A:><<5=B8@>20BL :::  0A:><<5=B8@>20BL 2K1@0==CN AB@>:C.*Uncomment ::: Uncomment the selected line.menuJB<5=0 ::: B<5=8BL ?>A;54=NN ?@02:C.(Undo ::: Undo the latest editing action.menu(A?>;L7>20BL ?@>15;K Use spacesmenu,A?>;L7>20BL B01C;OF8NUse tabsmenu84ViewmenuÞ5@5=>A8BL 4;8==K5 AB@>:8 ::: 5@5=>A AB@>:, :>B>@K5 =5 ?><5I0NBAO =0 M:@0=5 (B.5. =53>@87>=B0;L=0O ?@>:@CB:0).\Wrap long lines ::: Wrap lines that do not fit on the screen (i.e. no horizontal scrolling).menu#25;8G8BLZoom inmenu#<5=LH8BLZoom outmenu!1@>A8BL Zoom resetmenu0AHB01Zoomingmenu?@>15;0(>2)spacesmenuÒ /7K: 1K; 87<5=5=. IEP =5>1E>48<> ?5@570?CAB8BL 4;O 2ABC?;5=8O 87<5=5=89 2 A8;C. m The language has been changed. IEP needs to restart for the change to take effect.  menu dialog4>1028BL ;8F5=78>==K9 :;NGAdd license key menu dialog*@>428=CBK5 =0AB@>9:8Advanced settings menu dialog<@>25@:0 =0;8G8O =>2>9 25@A88.Check for the latest version. menu dialog(5 C40;>AL 70?CAB8BL Could not run menu dialog<5 C40;>AL 70?CAB8BL AF5=0@89.Could not run script. menu dialog: 540:B8@>20BL 3>@OG85 :;028H8Edit shortcut mapping menu dialog< 540:B8@>20BL AB8;L >D>@<;5=8OEdit syntax styling menu dialog/7K: 87<5=5=Language changed menu dialog2#?@02;5=85 ;8F5=78O<8 IEPManage IEP license keys menu dialog>@OG85 :;028H8Shortcut mappings menu dialog¤2B><0B8G5A:8 A:@K20BL ::: !:@K20BL ?>8A:/70<5=C ?@8 ?@>AB0820=88 ?>A;5 10 A5:C=4.7Auto hide ::: Hide search/replace when unused for 10 s.search(01;>= ?>8A:0 Find patternsearch@!:@KBL ?>8A:>2K9 28465B (Escape)Hide search widget (Escape)searchh#G8BK20BL @538AB@ ::: 09B8 A;>20 A CG5B>< @538AB@0.*Match case ::: Find words that match case.searchH0;55 ::: 09B8 A;54CNI89 @57C;LB0B.-Next ::: Find next occurrence of the pattern.searchJ 0=55 ::: 09B8 ?@54K4CI89 @57C;LB0B.5Previous ::: Find previous occurrence of the pattern.searchpRegExp ::: 09B8 A 8A?>;L7>20=85< @53C;O@=>3> 2K@065=8O.*RegExp ::: Find using regular expressions.searchr0<. 2A5 ::: 0<5=8BL 2A5 A>2?045=8O 2 B5:CI5< 4>:C<5=B5.6Repl. all ::: Replace all matches in current document.searchJ0<5=8BL ::: 0<5=8BL MB> A>2?045=85.Replace ::: Replace this match.search(01;>= 70<5=KReplace patternsearchR&5;K5 A;>20 ::: 09B8 B>;L:> F5;K5 A;>20.&Whole words ::: Find only whole words.search>1028BL Add configshellH#40;8BL ::: #40;8BL MBC :>=D83C@0F8N*Delete ::: Delete this shell configurationshell*>=D83C@0F88 >1>;>G:8Shell configurationsshell$=0G5=85 2 A8AB5<5Use system defaultshell@exe ::: A?>;=O5<K9 D09; Python.exe ::: The Python executable.shell¢gui ::: GUI 8=AB@C<5=B0@89 4;O 8=B53@0F88 (4;O 8=B5@0:B82=>3> ?>AB@>5=8O 8 B.4.).Fgui ::: The GUI toolkit to integrate (for interactive plotting, etc.).shellHname ::: 0720=85 MB>9 :>=D83C@0F88.(name ::: The name of this configuration.shell,pythonPath ::: !?8A>: :0B0;>3>2 4;O ?>8A:0 ?0:5B>2 8 <>4C;59. #:07K209B5 :064K9 ?CBL =0 =>2>9 AB@>:5, 8;8 A @0745;8B5;O<8 2 MB>9 A8AB5<5 ?> C<>;G0=8N.›pythonPath ::: A list of directories to search for modules and packages. Write each path on a new line, or separate with the default seperator for this OS.shelllstartDir ::: !B0@B>2K9 :0B0;>3 (=5 2 @568<5 AF5=0@8O).6startDir ::: The start directory (not in script mode).shell’startupScript ::: !:@8?B, 2K?>;=O5<K9 ?@8 70?CA:5 (=5 2 @568<5 AF5=0@8O).DstartupScript ::: The script to run at startup (not in script mode).shellö /7K: 1K; 87<5=5= 4;O MB>3> <0AB5@0. 5>1E>48<> ?5@570?CAB8BL IEP 4;O 2ABC?;5=8O 87<5=5=89 2 A8;C.  The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. wizard*0?CAB8BL OG59:C:* OG59:>9 O2;O5BAO 25AL :>4 <564C 42C<O AB@>:0<8 '##'.F*Run cell:* a cell is everything between two lines starting with '##'.wizardj*0?CAB8BL D09;:* 70?CA:05B 25AL :>4 2 B5:CI5< D09;5.1*Run file:* run all the code in the current file.wizard*0?CAB8BL 3;02=K9 D09;:* 70?CA:05B :>4 2 B5:CI5< 3;02=>< D09;5 ?@>5:B0.I*Run project main file:* run the code in the current project's main file.wizardÂ*0?CAB8BL 2K45;5==>5:* 5A;8 B5:AB =5 2K45;5=, B> 70?CAB8BAO 2K1@0==0O AB@>:0; 5A;8 2K45;5=0 >4=0 AB@>:0, B> @57C;LB0B 1C45B >B>1@065= 2 >1>;>G:5; 5A;8 2K45;5=> =5A:>;L:> AB@>:, B> IEP 2K?>;=8B 8E 2A5.þ*Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines.wizard*>=D83C@0F8O >1>;>G5:Configuring shellswizard@>3@0<<8@C9B5! Get coding!wizard$KAB@>5 7=0:><AB2>Getting started with IEPwizardxIEP <>65B 8=B53@8@>20BLAO 2 F8:; >1@01>B:8 A>1KB89 ?OB8 @07;8G=KE *3@0D8G5A:8E 8=AB@C<5=B0@852*, GB> ?>72>;O5B 8=B5@0:B82=>5 ?>AB@>5=85, =0?@8<5@, A Visvis 8;8 Matplotlib.IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib.wizardPIEP A>AB>8B 87 42CE >A=>2=KE :><?>=5=B>2#IEP consists of two main componentswizardîIEP O2;O5BAO :@>AA?;0BD>@<5==>9 IDE 4;O Python, A>A@54>B>G5==>9 =0 *8=B5@0:B82=>AB8* 8 *8=B@>A?5:F88*, GB> 45;05B 53> >G5=L ?>4E>4OI8< 4;O =0CG=KE 2KG8A;5=89. 3> ?@0:B8G=K9 48709= =0?@02;5= =0 *?@>AB>BC* 8 *MDD5:B82=>ABL*.áIEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*.wizardÄIEP ?>445@68205B =5A:>;L:> 20@80=B>2 70?CA:0 8AE>4=>3> :>40 2 @540:B>@5. (A<>B@8B5 <5=N '0?CA:').QIEP supports several ways to run source code in the editor. (see the 'Run' menu).wizardì 8=B5@0:B82=>< @568<5, sys.path[0] - ?CAB0O AB@>:0 (B.5. B5:CI0O 48@5:B>@8O), 8 sys.argv 8<55B 7=0G5=85 [''].pIn interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to [''].wizard’ @568<5 AF5=0@8O, __file__ 8 sys.argv[0] CAB0=02;820NBAO 2 =0720=85 D09;0 A:@8?B0, sys.path[0] 8 @01>G89 :0B0;>3 ?>;CG0NB 7=0G5=85 =0720=8O B5:CI53> @0A?>;>65=8O :0B0;>30 A> AF5=0@85<.¢In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script.wizard 064K9 >B:@KBK9 D09; 2 *@540:B>@5* 2K3;O48B :0: 2:;04:0. @02K< I5;G:>< <KH8 =0 2:;04:5 D09; <>65B 1KBL 70?CI5=, A>E@0=5=, 70:@KB 8 B.4.‚In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc.wizard\=B5@0:B82=K9 @568< 8;8 70?CAB8BL :0: AF5=0@89%Interactive mode vs running as scriptwizard/7K: 87<5=5=Language changedwizard¾!8AB5<0 8=AB@C<5=B>2 @07@01>B0=0 B0:, GB> <>6=> ;53:> A>740BL A2>9 A>1AB25==K9 8=AB@C<5=B. >A5B8B5 28:8 4;O ?>;CG5=8O 4>?>;=8B5;L=>9 8=D>@<0F88, 8;8 8A?>;L7C9B5 >48= 87 ACI5AB2CNI8E 8=AB@C<5=B>2 :0: ?@8<5@.ÂNote that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example.wizard2 5:><5=4C5<K5 8=AB@C<5=BKRecommended toolswizard0?CA: :>40 Running codewizardK15@8B5 O7K:Select languagewizardR1>;>G:0 @01>B05B 2 AC1?@>F5AA5, 8 5A;8 >= 70=OB 8 =5 >B25G05B, IEP ?@>4>;68B @01>B0BL, 0 2K A<>65B5 @540:B8@>20BL :>4 8 70?CA:0BL 53> 2 4@C3>9 >1>;>G:5.¤Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell.wizardD>:07K20BL MB>B <0AB5@ ?@8 70?CA:5Show this wizard on startupwizard(03Stepwizard=AB@C<5=B *File browser* ?><>305B A;548BL 70 2A5<8 D09;0<8 2 :0B0;>35. ;O C?@02;5=8O A2>8< ?@>5:B>< =06<8B5 =0 8:>=:C 72574K.The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon.wizardx=AB@C<5=B *Source structure* 405B 20< AE5<C 8AE>4=>3> :>40.@The *Source structure tool* gives an outline of the source code.wizard6 540:B>@, 345 2K ?8H5B5 :>4'The editor is where you write your codewizard@@02K< I5;G:>< <KH8 <>6=> A45;0BL D09; *3;02=K<* 2 ?@>5:B5. "0:>9 D09; ?><5G05BAO A8<2>;>< 72574>G:8, 8 70?CAB8BL 53> AB0=>28BAO ;53G5 >1KG=>3>.ÂThe right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily.wizard@1>;>G:0 345 2K?>;=O5BAO 20H :>4*The shell is where your code gets executedwizard0 MB>< <K 7025@H05< @01>BC IEP-<0AB5@0. @>3@0<<8@C9B5 A C4>2>;LAB285<!B <0AB5@ <>6=> ?>?0ABL =0602 '><>IL > IEP-<0AB5@'3This wizard can be opened using 'Help > IEP wizard'wizardl-B>B <0AB5@ ?><>65B 20< ?>7=0:><8BLAO A @01>B>9 2 IEP.@This wizard helps you get familiarized with the workings of IEP.wizard>=AB@C<5=BK 4;O 20H53> C4>1AB20Tools for your conveniencewizardp0602 '1>;>G:0 > 0AB@>9:8 >1>;>G:8', 2K <>65B5 @540:B8@>20BL *:>=D83C@0F88 >1>;>G:8*. -B> ?>72>;O5B 2K1@0BL 8AE>4=K9 :0B0;>3, 8;8 C:070BL ?>;L7>20B5;LA:89 Pythonpath.¾Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath.wizardN'5@57 <5=N *=AB@C<5=BK*, <>6=> 2K1@0BL, :0:85 8=AB@C<5=BK 1C4CB 8A?>;L7>20BLAO. =AB@C<5=BK <>3CB 1KBL 70:@5?;5=K 2 ;N1>< <5AB5, 8;8 >B:@5?;5=K 2>2A5.ŒVia the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked.wizarddK =0AB>OB5;L=> @5:><5=4C5< A;54CNI85 8=AB@C<5=BK:,We especially recommend the following tools:wizardj>1@> ?>60;>20BL 2 8=B5@0:B82=K9 @540:B>@ 4;O Python!-Welcome to the Interactive Editor for Python!wizard\>340 IEP 70?CA:05BAO, A>7405BAO *>1>;>G:0* ?> C<>;G0=8N. K <>65B5 4>1028BL 1>;LH5 >1>;>G5:, :>B>@K5 @01>B0NB >4=>2@5<5==> 8 <>3CB 1KBL @07=KE 25@A89 Python.žWhen IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions.wizardrK <>65B5 2K?>;=OBL :><0=4K =5?>A@54AB25==> 2 *>1>;>G:5*,1You can execute commands directly in the *shell*,wizardvK <>65B5 70?CAB8BL B5:CI89 D09; 8;8 3;02=K9 D09; 2 >1KG=>< @568<5, 8;8 :0: AF5=0@89. @8 @01>B5 2 :0G5AB25 AF5=0@8O, >1>;>G:0 ?5@570?CA:05BAO GB>1K >15A?5G8BL G8ABCN A@54C. 1>;>G:0 B0:65 8=8F80;878@C5BAO ?>-@07=><C, B0:, GB> >=0 >G5=L =0?><8=05B A@54C >1KG=>3> 2K?>;=5=8O A:@8?B0. You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution.wizardX8;8 225AB8 8E 2 *@540:B>@* :>40 8 70?CAB8BL.7or you can write code in the *editor* and execute that.wizardˆ ý) ÿý, iep-3.7/iep/resources/translations/iep_sk_SK.tr.qm0000664000175000017500000000003312346015775022524 0ustar almaralmar00000000000000<¸dÊÍ!¿`¡½Ýˆÿiep-3.7/iep/resources/tutorial.py0000664000175000017500000001541412312044056017362 0ustar almaralmar00000000000000## Introduction """ Welcome to the tutorial for IEP! This tutorial should get you familiarized with IEP in just a few minutes. If you feel this tutorial contains errors or lacks some information, please let us know via iep_@googlegroups.com. IEP is a cross-platform Python IDE focused on interactivity and introspection, which makes it very suitable for scientific computing. Its practical design is aimed at simplicity and efficiency. IEP consists of two main components, the editor and the shell, and uses a set of pluggable tools to help the programmer in various ways. """ ## The editor """ The editor (this window) is where your code is located; it is the central component of IEP. In the editor, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc. The right mouse button also enables one to make a file the MAIN FILE of a project. This file can be recognized by its star symbol and its blue filename, and it enables running the file more easily (as we will see later in this tutorial). For larger projects, the Project manager tool can be used to manage your files (also described later in this tutorial) """ ## The shells """ The other main component is the window that holds the shells. When IEP starts, a default shell is created. You can add more shells that run simultaneously, and which may be of different Python versions. It is good to know that the shells run in a sub-process, such that when it is busy, IEP itself stays responsive, which allows you to keep coding and even run code in another shell. Another notable feature is that IEP can integrate the event loop of five different GUI toolkits, thus enabling interactive plotting with e.g., Visvis or Matplotlib. Via "Shell > Edit shell configurations", you can edit and add shell configurations. This allows you to for example select the initial directory, or use a custom PYTHONPATH. """ ## The tools """ Via the "Tools" menu, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked. Try the "Source Structure" tool to see the outline of this tutorial! Note that the tools system is designed such that it's quite easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example. Also, IEP does not need to restart to see new tools, or to update existing tools. """ ## Running code """ IEP supports several ways to run source code in the editor. (see also the "Run" menu). * Run selected lines. If a line is partially selected, the whole line is executed. If there is no selection, IEP will run the current line. * Run cell. A cell is everything between two commands starting with '##', such as the headings in this tutorial. Try running the code at the bottom of this cell! * Run file. This runs all the code in the current file. * Run project main file. Runs the code in the current project's main file. Additionally, you can run the current file or the current project's main file as a script. This will first restart the shell to provide a clean environment. The shell is also initialized differently: Things done on shell startup in INTERACTIVE MODE: * sys.argv = [''] * sys.path is prepended with an empty string (current working directory) * The working dir is set to the "Initial directory" of the shell config. * The PYTHONSTARTUP script is run. Things done on shell startup in SCRIPT MODE: * __file__ = * sys.argv = [ ] * sys.path is prepended with the directory containing the script. * The working dir is set to the directory containing the script. Depending on the settings of the Project mananger, the current project directory may also be inserted in sys.path. """ a = 3 b = 4 print('The answer is ' + str(a+b)) ## The menu """ Almost all functionality of IEP can be accessed via the menu. For more advanced/specific stuff, you can use the logger tool (see also Settings > Advanced settings) All actions in the menu can be accessed via a shortcut. Change the shortcuts using the shortcut editor: Settings > Edit key mappings. """ ## Introspection """ IEP has strong introspection capabilities. IEP knows about the objects in the shell, and parses (not runs) the source code in order to detect the structure of your code. This enables powerful instospection such as autocompletion, calltips, interactive help and source structure. """ ## Debugging """ IEP supports post-mortem debugging, which means that after something went wrong, you can inspect the stack trace to find the error. The easiest way to start debugging is to press the "Debug" button at the upper right corner of the shells. Once in debug mode, the button becomes expandable, allowing you to see the stack trace and go to any frame you like. (Starting debug mode brings you to the bottom frame.) Changing a frame will make all objects in that frame available in the shell. If possible, IEP will also show the source file belonging to that frame, and select the line where the error occurred. Debugging can also be controlled via magic commands, enter "?" in the shell for more information. Below follows an example that you can run to test the debugging. """ import random someModuleVariable = True def getNumber(): return random.choice(range(10)) def foo(): spam = 'yum' eggs = 7 value = bar() def bar(): total = 0 for i1 in range(100): i2 = getNumber() total += i1/i2 return total foo() ## The Project manager """ For working on projects, the Project manager tool can help you to keep an overview of all your files. To open up the Project manager tool, select it from the menu (Tools > Project manager). To add, remove, or edit your projects, click the button with the wrench icon. In the dialog, select 'New project' to add a project and select the directory where your project is located. When the project is added, you can change the Project description (name). You can select wether the project path is added to the Python sys.path. This feature allows you to import project modules from the shell, or from scripts which are not in the project root directory. Note that this feature requires a restart of the shell to take effect (Shell > Restart) The Project manager allows you to switch between your projects easily using the selection box at the top. The tree view shows the files and directories in your project. Files can be hidden using the filter that is specified at the bottom of the Project manager, e.g. !*.pyc to hide all files that have the extension pyc. """ iep-3.7/iep/resources/style_scintilla.ssdf0000664000175000017500000000000012271043444021215 0ustar almaralmar00000000000000iep-3.7/iep/resources/style_solarizeddark.ssdf0000664000175000017500000000000012271043444022071 0ustar almaralmar00000000000000iep-3.7/iep/resources/icons/0000775000175000017500000000000012573320440016256 5ustar almaralmar00000000000000iep-3.7/iep/resources/icons/text_align_right.png0000664000175000017500000000032112271043444022314 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<cIDAT(ÏcüÏ€01Pª€D”ÿÿÇð ƒá/0þŰ—‘ñ?1&@@ÒÿßP0x†hRÿ#ÛŒ€·Htƒû„^ˆyω6Áû?ªÝ¿¡ð3‰nÐúÿ®®ˆ1`dHLõdq»IEND®B`‚iep-3.7/iep/resources/icons/run_cell.png0000664000175000017500000000113412271043444020567 0ustar almaralmar00000000000000‰PNG  IHDRóÿa#IDATxÚ}“ÏkQÇ¿›’Hº‰¬URТ1´‚µ‘Rzð ô xEÍ!éÁ‹ÿ‚Òƒ£)¤rðTê/hÑÆVc!‡ªˆV[«)¨Ij6»ûv·î–7æ½áÍg¾»ï€#ßCîÅööƒ¼Dn8 ÁŽÇEyêõz xÜ*u]G&“I§R©Û­0 iZ¾ÙlzÐVdTUE4E¥RA.—K'“É-ˆ`CŽÓá‚  ¢ÑhX±V«1f"‘ˆ90›Í¦‰‡|nø|¾ÿ¤W«U2H’Ô–§³ƒ^µLÓ„ßï·¤sýKßsu¼;_˲ìpSà@çQݶ´-Œ=gðº4âZï~¿PÏãSÐO¯m–†)@k×a˜ß;ˆ·ëï0yqúÏ‘Xߥ  Ûg×bnûoa–™ÞÀÆ4m,¡lvù/`=8÷ýIEND®B`‚iep-3.7/iep/resources/icons/page_white_pyx.png0000664000175000017500000000063712271043444022007 0ustar almaralmar00000000000000‰PNG  IHDRóÿafIDATxÚ“»N„@†‡B6ÚkŒ6^¶°ò,l| è,| ; Z Ãh¼d ã®v>ÑÂD@îxÎ,C3¬{’“3Àù?þ¹)d+Ë*™ß5¡´u;MÓ{UUMEQ¨LY–% Ã0ð}ÿB„pÀ^QÏY–QôDu]“<ωã8$IÇqày^QZÈ.4OB(¥LÄUU1€mÛ¬â·(Š×uòÞ`3llš†AÀ±,«7%MÓFP^{€ýÓë^Óøì9@þ˜8AÀÓùA‚É]™¦¹˜ŒÉñ%«?k7Ä0 9€‹D¤ë·ÝÚ躾˜.ÆÈ7î˜øà¥ŒN®¦2!FµõÈì£oï @—›lÑðl´[ÇÄÂ6ΈþÀ‡ ŽÕ·ƒžŸE€l ;pÚÆp™–`LEˆè@r;À*™]géMˆ/ÈÏ_ŠôòzС\IEND®B`‚iep-3.7/iep/resources/icons/wand.png0000664000175000017500000000107212271043444017716 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÌIDAT8Ë•’ÁK"aÆ¿SÔ!bteY¥ÃË!!º°¨)ê‚:ÖMìžE—]ö´†èÑ[Hç žZ©eˆÝA¦è TÆÊ¶,¸þ 5}Œ3‡ðÙo&Ú‹Žåá/óñ{Þ—‡!ÈS(gÎ1åln¥ßÛiÞÎX˜g£ÊéÛ†1KÓÓTzµòdÀƒ8÷“‰‚"Í©—‹P$Ç'ZµÝR‘K=/àôMV½JAû½­õ‹(¨8Ù¡ß'ÆMع/ØVQ‘^C½ä¡ýÍãdG£²ŒVuúä£ÉÎà$G¶ÓXÂÉ~š¦¡Ûíââk êõdüb8L¨ô’£U«‹ÅP¯×¡ª*šÍ&ª»Qh>BþF(ÃÓ7€•d§âT%‘H N£X,¢\.ãhgÉŸuùžq.’-Ó xž7dǃ@ €x<å<Š;ц;ar…ØMK|”Ýn7ü~?,‹¾u›m¼g¼crC> ™¾Éd…BÁ}>8Žƒþ‰ï™(èóÍa|è ˆD"Èçó=ò#L ™þÊÁ`¹\.— ^¯·GÉd2h·Ûp:…BCÉÿjµJ¥’QØ0²‡7õ³­VëвÎ?P ³µ¯vIEND®B`‚iep-3.7/iep/resources/icons/run_lines.png0000664000175000017500000000112312271043444020760 0ustar almaralmar00000000000000‰PNG  IHDRóÿaIDATxÚ}“ÏkQÇ¿› $!n"k•LуXl‰µõ ¥ õàAèA𠨚CÒC/ü ¤!Gs)%‡zÈÁS©¿ E[³r¨¿Ðjbk5³ºÙÝ·ÛyM7$ðÒÃfß|æ;ûÞHh¬Ù!2{¯Ÿde2Ç H»ûiÃ0žÉ²’$É'Ê´mÙl6“N§ï·B<À eYMÓ„ÉñxÑhÕjù|>“J¥šir†*,>ŸŽã4«2Æ`š&"‘ÈÎοår¹L2™ä/m¿ß/lœWV¥-Fg‡h{Ýp]ôvpŸWçÆ•pu¼:÷UU:)Ðu½ ãp8,ˆ’=%wò£Ðëqoì Â!E (‹B‰Dã3Ãè:ÇêúLÝа?Ü[ÁÄÌU·a:dÔ÷åNuŸÃòÚs”Ö—Q˜¬ŽÔ6ØBGÓÆ1Ú{ ÌuÀê.6ƒTQøôZyÁÑkf´£‚[Ó¸Øw_·>Â"¶cÁbü샊áÅç9,­½ddJ×q©ÿ6%Ò5ò %ßÿ” va¥²ˆÇ«s¿Lç[¯Zž6.?8ƒ^žé˜0l =OàlÏË‹(m”ðþÑ+µz õz}ž†)@¾p'Ãè=<„·›ï0uuößÉXß0…5ÐÆ8 “ù:zóÌ•[³lìÿ *hŒveÝ|.8¸ IEND®B`‚iep-3.7/iep/resources/icons/page_add.png0000664000175000017500000000134312271043444020512 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<uIDATÁMˆ•Uàç=ß™;£c“YA!YØŸH*FE¤n‚Zµ)ª•¶Š¨U´Š-K¡T›r¨…Ybj?ôãŒDV¢N)êÜ{¿óö<‘™¶¾úÕÓËf&Ÿ*a=¦ A6ãÖ~[<—_Ä^:²gÇ 2Ó¶×Ù÷Âúµ¥Äʤ“dB:{iäýïýõÇÒå“ó¿¬:ºgÇT(]Ü>¨ÝÊ…t%‚ }6ãqº2ê=´æ÷ßV}×Î.ÏvÇ…w}zÝá·¶/ˆˆ™Ù ºb¢Pƒ®Ðfvf`džY·Ü:¹¬ÎLï…I@A J„¡D(JΜ¿âæ#w® Ïoº^7Ñ=  “ÚBFh}RBídqê\¶±Ö†X=)jC…L5Š”QB Ù”Zë¤BP!ÑA‰D6&:@ч,©!¨ÐÆdÒÈLP Z¨]’A’BßèP¡µ”™$)H „¿~bþÔœ‹—/GÊðžÊ&úFŸd£HÐ’ãó:}ñsoÙà¦UkZøØåù¹ºq×Þ7+´qj™^ûa(¤dŒ4½ðž'¶?ª/½»g·:xò#×möû©ý;+ŒÇ½¾gvfÂ}7-é“>hÉgßž1+<¶öYðâ#ï˜;±û§*Œ—Z·–Ã^|óg¯EJZrþÒ¿Ní§ÓG½²u¯7®¸êP¡ÝØñõëÖ¸#i)8:S.¹Î¬žåjÜ[/Uv– åloL´Äë3 kÔò&µü§Ö~jã´å·ýÒ~M™©LµGJfŒ2BÊ”‹ŒÌ˜„Zf—=çEf™QdÖŸî’wLÛ…ÈŒ#³f›d¶&ÊÆ©°uºÉlÕ“¶;îåû‰ïxLHÖŒ ɇ È È Èè~£…+É:Ò#h›hÎ#5=&¤N.eÄÜïhiL˜(B:’* ÕÎÞÆ‘îC½[ƒCY0‡S'\¨ÛT˜±0žN}Àܳ%·-àBü6Î\í£¿3ÑJáKé'"!,Ì–ñ`jñ» vÒxîmœ=p MžmsXC×Á8vª /gK(WðöëýsUäïÉ€^š¶iZ¦ ù-—©OE¼7^¿YÅøäù߇ºct\€N4Ö¹e°½¸1íj^pÍþƒ…2«]þ åC8Àà,ìIEND®B`‚iep-3.7/iep/resources/icons/plugin.png0000664000175000017500000000111712271043444020263 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<áIDAT8Ë¥’=H•qƯf~\?‘Ä,ˆ›yoX£{KCµ´7ÑPcM´5º4EkS$¤8V*w²¸‚ŠJÝB%Ëî{žs^1㪋g9ðçœçžß9IDp8´Ûラ»%w%I¯ =¹´—@]móvœbS?ù–|bÒÐ~ÔÜ?ÿøGÕªi¤lT70³™ý’ˆàáô½p’£,Ç@Û™Äܘ^žY3“$Õ™O¯<ìv»ˆØl6 †S-´!#ŠWJ €×ë…ÃáP(z‰Ñh‘s§Bøý~8Îs-%¿‰ìÀÛ8Ù@÷Ôwª—Ë%žÄjµ¦ÎFŠÐIè{¸Ýîÿ¤Hï§j´-Èáö8¯Pb±ºÌ\kDÃÜ=„"Á«Ë#¼ùXÎÅr´ÌËÑ¿úK:ô-?J›ƒ¬¼ŒÇ—Ýæ‡øús+‡z±ðóÚ>˜vÇÑiQ¡|ôæÑµ,;-ÐÊû¥â©=Ð|ïÆÈz;Öš1ô­s[Ãxù¡ wß±DZàÅûûø²¯…eo¦qÌoqä5f·†Ðn©C‘šýÍ}ËäRàX <›-A½.µÓ·Q5‘W •˜Ù@‹Y…2ÍdU²é,”ñ¿Oà…i‡I1v M¦(5yøýç—@( ¹l”‹ûY¸PÌRö49úTûå÷}åvs™˜IEND®B`‚iep-3.7/iep/resources/icons/page_white_dirty.png0000664000175000017500000000051012271043444022310 0ustar almaralmar00000000000000‰PNG  IHDRóÿaIDATxÚ“_nÃ Æ ©´mm_Ú{ìµ/{ÜŸ3M;ÓzŒjÉJ€¤þP]AitŸdþa£ˆ5=³û¤¿õ¥ˆŽù‚º¾Ýé´ošÆ*¥ô\dZcÈû±ï_sšEÐ8Žô4 7êûž¶»]¹bïÞ{ÒZ§ Äé€õšöøÖ-—9laã4M b£¸ZWj‹È0öÀ>‹ÉpYÀmárL²²ÖÖr‚Åw]WzH}0nÛö>$§WúµÛ¸°’Aj¨{ðè¼Ƙú¿ Üjð&­]£_€Á¹~L†§ú?€Úçœ+½…3*‘ø$pgIEND®B`‚iep-3.7/iep/resources/icons/application_view_tile.png0000664000175000017500000000072112271043444023337 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<cIDAT8Ë¥“ÝKÂ`Æý%)‰èƒÂ‚¤•CaS )ˆBDZÚ‡QRÌ4ZaQvÑI’•÷A7]x§óôžóæfí"š<¼0öüÎÃÙ^8:±Ã9¥Ž/hÕZpç ämæô H›ÏØ(ƒý ĵø’E˜L<€°tÞø ÈÉ«æÉVõXþþk!z©'Û±gþ §_ÁކgÏ8@ڪЃpÁ4JÐ<†QËEÓ¨ÁÈÉ7€-¬H•~Å(Íf“‚¹Š èsnû¯º®[ôMq~ªß‰-c¸ÝFƒÞé p€¸úh™ˆAP\†1øY5ŒrËû (÷ URŒÊΈtâT ~¬—?Ëñ[KªÙÖ ^¯[t‰ðÆ®mýNŸ ­» Ž-èÏ™;‡¡È) ÌäÙ–iQî =Òtr¬ö.›¬Ë Ut|;| .’ûc^IEND®B`‚iep-3.7/iep/resources/icons/overlay_thumbnail.png0000664000175000017500000000022112271043444022504 0ustar almaralmar00000000000000‰PNG  IHDRóÿaXIDATxÚcdÁ.†ÿ P𾌑ÀÒ¬Uê¸Ö½‹$ƒ°âƒhb ¡Üô0€F’0@N`22t1øa•)cØDºDjÂnš1Â`Ô€¡j*—{£ïIEND®B`‚iep-3.7/iep/resources/icons/run_mainfile_script.png0000664000175000017500000000135212271043444023022 0ustar almaralmar00000000000000‰PNG  IHDRóÿa±IDATxÚ}“]HQÇÿ3³+j»m³+ÛZÚ‡¤X-º˜eH‰ö`XaE`jÐCQ¾ô">• ba¡Ð>„ha¬µš–I>h‘µ¹›µB‰ãÇÎÌéÎäê Ú?çràþî¹çƒÁ?K ÚHÅáÿö‹ÊO¥„Ì¢Ïôx<¯²]!˜uizPQFý,Ë2êëëkËËËk"!a@–×ëíΈ{ʂ̘rWªª A Š"l6‚Á ÜnwmYYÙ„ñ½>û¼s¤øhÁ‰{Ó ͦ °–l°f„9YX­VÝkY555Õ–––jïÌÜð¹:މ)QÙ°Q¨dÊôˆ0 ŽÏƒ´õ&B¡xž_Q ƒÁEÝ;¦ãaž!u‹±Ó¾y×Á0€Ì|¤ù›å¬CH”õÿK’¤¿®ívû2@«Ãõ’ä¢[—R³ëiLš‡4ñ Q®°¦Tý!dIÄb±¬4Üv^.:²­FY@‘B´²±´U`m¹zºÚÅkùnÌ΄Põ¢Þ¼ÐzÇY™¶§ 21ã*T­e¾û´•ÉàâƒaýÕŠœf8¶oÀЇ14öŸG¬)z@µ—¦ÚY¤+¹ÍPe¢¬PÉØ´ƒGÚDôuú0Ø7†ž`u®@Æ»ÖTd?AþY'ˆ¢Ò/( “?þ€·›Ðóò+ú»üʬ(ØÖ”d>BÁ…tŒ~™‚D³%…v‚ÐV³°'˜ñ¦ýz½>²& ØÙ€c]éë²ÖšÂ„V‡ Ýt´ý!мmœL~€:y¢¨`A’‘´3û'á}·ƒƒãøü³õ”€ž–¥e¢Óæá8.šžÙÕÖpŸ¥άx šDcÛ™¹Ýé 94Ü$.®óª—5Û†©ÑS¤­pÅÕüoáL8ó§IEND®B`‚iep-3.7/iep/resources/icons/bug_delete.png0000664000175000017500000000150412271043444021064 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÖIDAT8Ë…SkL’Q¶Aý¯_µ¹yGÅ ‘PTòÒ4¼åB›¦á%S)ɦ-o£¡•Ó,ç%PÌ H¢¤¦iÚÝÌúÓêG«Ötý°UÚ4É9ž>Ü2-µ³½;çÝ9ïó>Ïsα`·S ðÐÏ ²­ý{8±~zß•¿ÏlI‚†ù.›s‰€¿‘cʪŽtæw²Óyí>ßw´u4sóç~Ž…ßåû%£$T]Á[á5±¬ñy|ÕŽ‚>bÁ¿—°¬SÖ‹¼6¸:p5>(žabÖˆBu2DéÞ—· uùuûBÐI,DèC`xÕŒÁ7m¨~VÆM$D¡kªǪã¨Ê Ìr:Ùµ—X$unh'uZt\t¼¸…²! ŠLñ(0¥@PO€¡ò„¤MŒàhÚÛ ¤ÎUR'xØZŽ˜?mˆ†îy®™ÏBnˆBR« ]1èœn@ÝX5˜¥žà'¸·Hà¶ùLˆfô/kQÜŸ™>Iš ˆÛ#qw¼ò1îV€QL]I[ò,p“nñ€hdY:c¡‘"·K„Ä!â´'qg¬ÒÖ¤6…‘*Ð4xÈ]­î¹. å8ÿ1S罜iàö¨I÷ƒqª%êþBdi#!i Cke8‰aXHÅ`en(„Rè’áxu€WîôV3pݬ@\³ê>%²4"¤4„B[Ž9s¬¯±Ü!Ãt6cíñqªtË5²*Œ»ä;¢éi-®spž*{˜‹Þ˜øA£F(öNø|#CÁ”÷ÿ¼f}œ©¤ã’&rm6˜yôuÚÖ™lßJbDHµnû‰¼ä4»ÔyÍõ‚Hè>±ïçRS*@Y ì𕌙>ÌÙíömá|ÎaRvÆSinkŸN˜WîÅ»´=x"¢®‘f^ù/€-ìW/Ší-dÇ6ÚäU ãj4,´pÀV±"4L$eÎ@.ArBù™èY a~m€y÷Y])Q8tN¸L×ô™ÌÜžt2»ó"•¡I §µŸ Ÿo=CS±Èdå)æ_·ñ_óAFË(ÓÁIEND®B`‚iep-3.7/iep/resources/icons/debug_quit.png0000664000175000017500000000114112271043444021112 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎégAMA± üa pHYsÃÃÇo¨döIDAT8O•‘ïkÓ@LJ ÿ‘€ú¦+ZÆÄ7ºÄ¨u®TW&«Y;“õ‡Ý¬ëšÙÒÒY[TPÿÿ_‰¾Ø ÒÍ)£í¨¬[“6½äk.вÙXçÁq÷<ÜçóÜ=72òŸ‰Ä‰¡ˆ™É°f.çþóPGŠ»ÛápZ †¸¿ (ŒüÌ\¦¢ô%Ir·#qt–’Ø Üy×ô\’ŒÒ3˜Ö4V³è$“n–£è¦Ò@±ºoLN¥©åò±¾È =¥æÚàÕk…"º–Ñ–"ЗW+¯Éì\õŒw|ä2Ó~¸BŒlxþ$“ƒžL…ÇÐî- .\'žg†6²Ì´b ÒM)@é)/@›—P¿ríß05[ ÍC/²€u}mö.<¶=žß9tž C%«‰ªÂþ­°¸„Öíê.bÛår–ذhÁÑû€² 58‡ÚeŽü¡éŸF•ãƒÝ®°,³qú, ÷ŒuŽœ¾ŠJ+{‹üoÖßO¿]oЕÆGÍÙE§^|úXkj;_*[„®4îå¾nüÈ}þ¶ÙÏÙ‚£Vs:GùßÖ¸wcÂ…‰ºIEND®B`‚iep-3.7/iep/resources/icons/application_add.png0000664000175000017500000000115312271043444022100 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ýIDAT8Ë¥“=hTQ…¿¹ïEb,4.i‚µ0QXaI ’RÁ&•`£‰…X°UXÁÆÂÆÂJ1 ! E RX„€»ŠÅÆE³‘¼‹÷Vc—Å §¸|÷œ;3âîüϑӗ /ܨֽÝ0ÃÍPSÜsÃU1w\5cû–duq±|åéíቸ0Po˵‡Ý¹–n_­ë80×õêÏ–­¯%bWçú™}-Ε–In¬7Ü503GÍІ§åƺ:ݨi ë‚AÜñ ¸8bB‚H@D‘ȉ,7ÒûÖÈMR\"0s"‡ ±€Š£!uljYËæ@Üÿ‰€«c.@"‹R@3BS¤ IÅÅBlÆôÛI^Í?§¶ºBÒHXÓýÀIâF’üq €»#"øЋ7Ox_žâØÀQºvöðrás§)ŽæoϲD€d.$ÓA„ Âäë‡>Ї¥oÏ* ÅCý#ÁÌþFÈ>3ˆm¨oß¿Ð&Û8uð"—OÜgï®^€\\^Z~|þN2lª˜ªŠ™¡I‚™aîTk+,Tf™¯Ì06ô€ÒÔYrÑV€_²™m,Žæ¯uuï¸Úß;HOç>}}Çì‡>/ÕnÉf×¹8š/€àpoîneì7|“— œKÓIEND®B`‚iep-3.7/iep/resources/icons/comment_add.png0000664000175000017500000000102212271043444021232 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¤IDAT8Ë­’O(ƒaÇwRÊÉMÊA.” íè¢D98à@h(vpT8Ðj“ÍDSŠ9à4iñÚƒpPÃm6l^ÿ‡åOÚÞçë÷¼›ÅÚ^Ч¾==ïû~>Ïïý= €ê/Qý› V¿œI™¥¼S ’—L`[w!‘ 4–¶}\⦤Å´È D$ÆðøÊpbŸ gAïƒûF‚ç&*ïžÚä’⯂­eM~yE øÈà'øôžá$]I8£‚ù.¨H*¸ ø<ƒo\×QØIðn µ þ ¼|í깕pLð᥄}‚.ˆÈ‚Þé-.P'm"—|¼‡_’Å MLOuŒ‘Ï#›\>ˆ‹¬ èk@ëPêt¥Ïå]…=?^$’x.ƒ/èŸEßB–œ8DæÕvÔ˜ PÒ‘eT‚Mã6'¯ä¹^_¶îÃz8"Wc´·Àloã‚·Tp.ÅKÑðuewlΉo½YܳpÁïî»Z›ý6(4C/4ʰ~¥Q¹‚ÄЇºjc>L‚FÞ™Ï|­Øƒ$%ÄËŽÍþü út\»;IEND®B`‚iep-3.7/iep/resources/icons/overlay_svn.png0000664000175000017500000000020412271043444021330 0ustar almaralmar00000000000000‰PNG  IHDRóÿaKIDATxÚcd 0Ž0jÕ èø_øŸÅŒý2‚4% aÐ0å3b5$ µ§A8 R#~ÀœˆlƒQ  4$jNò£ŒfIEND®B`‚iep-3.7/iep/resources/icons/cut.png0000664000175000017500000000121012271043444017552 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDAT8Ëcøÿÿ?.¬š5SË®zù<ÉÄI¬¸Ô0à3À®zYfûºÓODb'p"‹‹'Lb"Ê纕ys÷\ýt?LL)}†®O뺭DàÞ¸ºd݉{ÿeS¦Êø “Õ'o»ø$}úîmDàÓ²¶úÀ•gÿåR§©ÅôËÎÜyùÎô—ŠÆM” Ê€€öõ-çî½ý¯6=¹ó¹Ó‡¯=ÿ£6Íšè@ éÚÔyùÑÇÿ}›Ï»óòëó²E9Dům8”#û·ußjÜröÑÿÄ);ŒF!—4)£Ì¹«ê6^Òɘ·$}úž³|ø?qÛQÁàF¼9§I5ÞNXuçȼ ŸS7¿ú?s×ÿ_ÿøÞ¹n¯e¸#^Œ²æ¬‰[zí¯”o„wžÂÚ'ÿgï½óéÙ÷ÿÓ·¿ÿ»ìÆYÏ´œxuíûäX·¿FyÓ¦§mxþ¿dÑ©éŸþ×›rзwÇeë‚õ_¸ <9°àÒ´õyÔ’k/›ÖMÛöæ¿YÞòæ9k^N=ò$¯VVæP±ý¿E4Vä‚ËçµìÆ?³œe§¹L%L3V< _pñ§–£œYVßûÒ-x}pÆ‚ˆkº„˜G–Œ¯7ÿXò¦çÿý'íš´úE7HÊ<†^솉 ®Û—mûn’ºä‘·ºÉ8ž×ƒº‰IEND®B`‚iep-3.7/iep/resources/icons/application_shell.png0000664000175000017500000000122212271043444022454 0ustar almaralmar00000000000000‰PNG  IHDRóÿaYIDATxÚ¥S[H”A=ÓÞÜ/ûà…”]ÈÞ zÈ‚$Ü(¬U±¥r·²ˆz¢L»,KÌÁîÔ‹¤˜¤­76Ѳ@“öÅÖ BKcõ¡2 /û°úÿÓ7>ôЋùÁð™aΜïÌ| + ¶ûÔã’¬ìUS1nâœVœ†¬È”9NsY¦ÌÕ,ÓžUŸþz.tË{]m“-ÓªåÞ<6<¢Ü9­a¾ÆQþ?ÒŒAÍY'c¢üZÑše ô Ö·±ó?òÀ¡µˆ/RÍ´!ê–²‚fŠŠÉEþgq™Ã‘lÁ‘ʨ÷çAý¿äq`jfV³ÂÈéÙyX$IÅ¿fc¤hµZ"'b"J²qøÊ34\v1V^÷ž—å§¢¶¥.ç&XÌš:z±‹°Y2"ØÙ‡[3a_B$:U…Íb@ÑÅ.<ªÈc¬ìÁ¯8˜è§ ´u‡‘GE)/_a&=GW_;¶Àž–ƒVOê´8àï@Sec¥5ïøõâõ˜¦Þ~E82o¾ãß~"<0ˆB“ßñj`Å^l‰‰0´ðúBÜŒ¼ÿ†W]‡èçI´“‚\R ¢³·_-IÄSRãÎÉ‚==zFòcoy+Úª÷1vân„û÷g ®õ9ò¶mV=h|Òƒ\ÂÖ%?v¤“|ƒ^ý¥z{Î4£ý†‡±’Ûý¼úøÌÌÅÔ"þ…èðßá. "tÓËD/“ÒR ñßéÈ"‹·_XP³Ú¢/䥾kŠÊÑL½àa+îÆ•üSE <ÈâIEND®B`‚iep-3.7/iep/resources/icons/wrench_orange.png0000664000175000017500000000111012271043444021577 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÚIDAT8Ë•“»kSQÇó8H)N]uA,¥ƒˆ“w“ÒjÍûazcbb6ÖêÅ&­ Qcn^b4b2e l„ x¥W„ }$çÅçûûžï9ÇX¦µt:­$“Én"‘0âñ¸ñÿÞT8•J)N†Ã!ãñ˜h4ʉîF£ù|žp8|2X,f˜Õ[­ªª–͵`0ˆßïÇçóSÄòï~¿OµZ% } º¦iôz=Ün÷ñ‘Hä‚XÞët:4 ŠÅ"…Br¹L¥RÁétv‡_ÝT'™-±lÔëušÍ&f_«ÕÐuR©„Ãá˜Øl6å ¼u]e× Ù5~lÞ¢Ýn“Ëåðz½{¦e©jØíö®ÕjU†¸iÂwáÛ|}šÂøÉç§Ëåš?Ìíþ$³¬²³&°€ÀûûÐx ËürŸû|TNÿà%•ì*4ŸÃ‡ l‹Ð;'T^ëÙ—G <»¦²½"pFªà­Œwì Ç!yÖÏhÇÝ”…Ôeø²E±üæ6äî ø ܙצ½ ‘‹P—³îJÕì:”C\DWç^ÏòÑ,<<ß4ƒú –A쬜ž Þѹð]‚ËsŸš6ÛÞ‘øéî×—IEND®B`‚iep-3.7/iep/resources/icons/application_double.png0000664000175000017500000000102512271043444022620 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<§IDAT8Ë“±ŠSA…¿™{w ›A c%ŠN ñ ´X[›„ Á^°rAÐÊp‹ÕÀÎ*eH‘bmÜ›MîÌÿ‹›ìÞBÜ?ÃÀ™ÃáãŸðàù§‡wï ŸþªÔÁ¹“sÆåÈ —æN;ÍG£é‡£·»G,Uï ÷·:Ý8è°‰:ÕÌöó€YRœý>aS&Åö½”‰×ooðäÍ„õ9‹l|þ:º~œ»7~þñâ_1JÂH$ÃsŒà¥AÙà˜¯‘¸BY"µ‰DÅ‘ f—øEIÜHØŒ‘²`NÁÙ¿]ñ?íó­0æÛ!H¹gÆZëöþæ/ˆ6L‘IEND®B`‚iep-3.7/iep/resources/icons/application_lightning.png0000664000175000017500000000122012271043444023326 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<"IDAT¥ÁßkÍaÀñ÷ù~ŸÍ±Ó6È›0[JI-7\lWRS,¦¬\¹ñ«pã@qáG[ün–Æ.ÜpéJ-IjL›ÐÐ~`¿Î÷ì<Ïçó±'”\Èòz93ã¸î §÷v´_ûR²‚ Š©"*˜jЉ f˜¢J]µ_™¸8x£ç¶kßÓÞW•/$ëó¬Da±$}ÀmWò–”¾,°R™·„eÎĸÒÛÂJ¸úŽÈ™)Q%„ùg”?öc0Q4(&ŠxQƒßt™ÍÍ["‡Q.É‘SAæž°ªf=iÕ:Ì̤’‘}}…5ôPUh Ò DNTˆ@•éGÔnè"Ì“äw!2CùÛ(iã1\CbJ¤¢DÎÔøAXšzHum ¢ÙgpKÌ~xÌê-gÈ7B RM‰T…È© Q(RþtŸº¦}XÈ mï1uèÂ{Gn¡>Ã’:òmGPU"¼'Z¿Iuý6²™WhPªkZ@õ d3/_aîãsŠ»/‘®ZCðÈ™(Q¾ØI(OC’K+|¢®±ƒPþF¥4MR¿“æîë¸Ú&’4ÅT‰œª6öò‹†f_ߥ4ù’òü$Åç¨o=ÌïÔŒÈM¼}7pò¦ïQT¡wc?mk‹<}“0ôù,ÙpŠÉ jŠ©¢J4À27x£ç(p”ŸÆïm߯^îd3rþੱù;ÇÔË„z9Ðz|ì%ÿà;9¹8÷³6×IEND®B`‚iep-3.7/iep/resources/icons/script.png0000664000175000017500000000135412271043444020274 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<~IDATÁ1lTeàïÿß»»^ w¥@J àä`4: ÄMŒ†ÄÁÙ¸0:bœ4qb6ÑÁÉQÙtp’ÈŠ‰‘èড–¶\Û»öýïýï÷ûB)\ýîÑE|þìêÒ¥EÛ[´½¶ïvý ûx‚Œ]lãküXô]÷Ê‹gŽ]úèõÓ`žúé"õÓÝ£|6µì7Ùƒ'~ø{þ®Õ}×­O†‹¹m'+5]Ï~ f-OfGÌŽØ>促 >¾ñÐ¥ +ž?58]ä¶];>Œæ ó£,Æ FU+*AèòžŸÿÙõÛÃÙF SZŸŽ+³Ã΢)b,ªHÌA©U…RÙÜk|që¯=\­º”ίOfGE…*± S)êõ…<ȺÔ]øþÃ×v"@NÍù3Ó‘y*B¤ ADD„B)tM#§&C W®ß×UŽQÊYTPdÄH›³ƒù¢ÃDèštzˆ Q ãÛ®I›7?½R BNÍr­WGª‘ôèû@a¹Ž¶våÔlÄË×nœêRº~ñ¹sï6³ýlžÈ¥¡/1Yf{o¡Ki Î)½‰w~½{ßîaí )Ú\4mº^—{})Ö¦S¼}Æãí…œÒ@ÛöåwßxaüÉû¯€\hs‘:¾¼¹ayÀþÁBnÛm€:·íýÇOf¾¹u×ê±±ÕÉ’Õ•‘éÊÈñå¡Ñ0ÕÑ{—×j¶vöå¶ý î»îÛÛwî½}çÞyœÄIœÀ L—†ƒÁÒÒÀdelu²ì÷?ý‰Ÿþ{Š;,¦EõIEND®B`‚iep-3.7/iep/resources/icons/comment_delete.png0000664000175000017500000000104412271043444021750 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¶IDAT8Ë­“I(„aÇGÆ”íÀ…(E]•›Ü&Ë…pq’H¥l%98(”²—²Lƒ²,%d cƒÆ’±d¾çïyg˜Ð̘â­ÿá}¿~¿çy—O@ö—ÈþMQ§äôp^9p 'Ò‘`¤ovo ®ÆèÒ‘ìsvOü8‰wO„«‚þž »%œ˜‡×„}ƒ­Á&¯è\’˜¯‚°¢¶ëÇKõw„3†oðÎ¥„-½MÐп" ç Ÿš>`#aïÊo2¼®s.°oA´ÄUµF » o_HØ`xM'« ²{Qb¢|¢›µ3É*þqˆÞήÑòyeê-»H£*ÀDZ¦âåNô¡–ô@ͯ‰%Ú “]Õ™X-‰ÅóXh[ so1– £Q“ê?í njß<%ùÑÃP%e@m8ŒqèS*ÈÁ9ä䊹h›V†¿ÍmU0&yÝ­÷>À•;r†^Je0qNò=1¨ô"·­Y!s yQЗ…ÃPî…ƒ\L%ËQŸâ;ïö_ל:Ó¯TH¢í®Ìð¬X ù§9²îTIEND®B`‚iep-3.7/iep/resources/icons/paste_plain.png0000664000175000017500000000113512271043444021264 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ïIDAT8Ë’?hSQÆ//†”&%hÁÔ?¸IDH “³¢ .,’¹ .\¤‹«B7Ap°N.:H:b'KEjimÞ»ç|É‹iÁ—{†ûýÎ÷n$ €§sç§O ×öüòF…Tôäî¹*ð¸V:zœ;÷ÙÝzÀøäž-Þã÷î/€çÀÊüòÆËA@X¹zãæ™±R™ôë$a]$1sqŠÜÉ HºõæÕëëÀàìXi‚dg“àAÄ–Ú±¿ùâäéP8!€ \ånÉæÜß#ÙÞ¹ƒ<€Üñ𴃧žƒÿ« à–ö'»">þ˜`ßbPwŠ |?2M«ÕZrwÌ 3ûÜR°€›‘„ñØ$·ç’$Éá¡ ’ˆã8m6›K}!Eæ(8nÂÍét:¬­­¡HY_¯× !ð×9†[„™P­V³^Ò ÀñÔPp ·Þ´Ûí¾xR¯×1³. ;½ ð,†¤‘²ê;À„§ÞÛ!‹ð(°¾¾>$”D£Ñè;x—&ÉÌø©)äBîäSˆ–‘D­Vgwxôvuµ \Êyv*—)‹DQ4òÅqŒ™Ê6;;›3³3;Öû0ýãîƒçËEzdk‰7IEND®B`‚iep-3.7/iep/resources/icons/page_save.png0000664000175000017500000000140612271043444020720 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<˜IDATÁMˆVeÐó¼÷Î7ãÌ8Œ“•b˜Dfai*QTÑ@´h妄P;¥•´©]B‹@hQTP´·6Rd%XAT(T„ý˜ê0æÌ÷s¿÷éœxêè©×ÍM(a6 /AV]­¿-_ÍÏcåú‘ÓLJñÌgNøÊž¥Ä|¦ ÒÒ#[öïÅÁê/?_8s|qmibG¯mæ¾¢)%deœU×¥µÑØãÛ×ÛOël]šÎzïõÇ^þté·Ÿ”ˆ˜Í̦×mК ‚"PmžëYܻٶ»'×µs3ï@I J„¡D(J.][sçìÈ} áà÷h&š …LÚê8)¡mèeñëÕ4¬Z‡½kR´¥€6“DE•¢„Àû'.X?Éê°³a¶çŸ+k>+ìÚ4;uøóúÊš/~ø{›¨ˆ ‰¬¬­ö=±o‡çvÏ:ñí_ŽØ >ørI­q¶ÔŽL*2©V#×ntàä¹Ëú+––‡"ª¶ÖœÊLI)¡IFãêØ¡ÝjM‰Fšn Vnµ£aöG5§^ûn(#e•…‰¢?yý“?” Wu\%2“dz¢j»nló½-–û[Ü6Ó™îÑFˆÌ:ùõö;Ö=2?9oªÓÕ‘¨UäXUç/þîÊÊÈÿ­œFË/”Ë®IEND®B`‚iep-3.7/iep/resources/icons/page_delete_all.png0000664000175000017500000000141212271043444022051 0ustar almaralmar00000000000000‰PNG  IHDRóÿaÑIDATxÚÓILQÆño:­PE‚ Å %ÈŃ‘í" hpA‰ŠšhL¹( ‚‡F õàE6 &BŒ^ÀFÒ"ÈŒØÖ…ÑVh©m¡-ÎóÍT &N23É,ÿüÞ›7 è¶OÓÛ¢ˆ—ÉN@|†xx2gŸ÷Ô/X­5=5GÜXecÄÃñòþ‘'e)Á?œ+^èË^Ÿ9 4öÙ0ÔϽ0MMéªsæW œ¬øP]œ$64£öðP°ã·¢ÄdDãð…x.(„Rÿàz€°0ÌÈ7c¨Cgd–®ªš^KSYJ•@”L;åRàÓ©5Ø{ç1˜ÄÜ?ÏÚ®EaPk!Ë™%ºnVÆl Š%vw¸;‹¬CYþÒË ñ‡pØYLèÁ- ü-áÿW°µÞ…£»›Öy —qpLóЛð¹}e«%9³íçÚýžçHœnA¤Ç‚Ù€2™ã«hªUü—Áœ`IEND®B`‚iep-3.7/iep/resources/icons/page_white_text.png0000664000175000017500000000052612271043444022150 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<èIDATÁ1nSAÀÙÇž4A¸‚Ž‚(¡I“Sp.KPp"„ÒQÒAŠ7%Žƒßþû1Ó¢;ó°ó+„‹çýZ######Ïù´µ±DWk=æCù›?ù‘û|ÞÚX‚æjä˜9昇ì³ËÈSóekMs9¾•¯NNV«ÕG@ÿà¶‹kD)ÃÞ4¼hn­†“¡”éÐ.Q¦@ønJ)1]:À;1@ø¡ ÓT˜Þ:Àt€Ÿ¦išÞ:ˆö€I²$fM³ž-Ú+g”]îþ´•Ï^LvIEND®B`‚iep-3.7/iep/resources/icons/text_align_justify.png0000664000175000017500000000032112271043444022674 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<cIDAT(ÏcüÏ€01Pª€D”ÿÿÇð ƒá/0þŰ—‘ñ?1&ü‡é…è„Á3D›úÙf¼E´ ‘ÿ¡é…˜÷œh¼ÿ£ë‡ÀÏD›`ûÿ'’Í  ×?Ę@0²ù]Uvx¿iIEND®B`‚iep-3.7/iep/resources/icons/accept.png0000664000175000017500000000141512271043444020225 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ŸIDAT8Ë¥“ëKSaÇý;vÎvl dD!‚„P{$;š ż,KÓݽÒ6cØL‹2r^ÆH)-³ÔjsNmêÔæÖ”2qÙQB̽éBµat±oçìÅL#zà Ïçó{®qâþ' ø‰r§ê³=)LÆãýaéˆ8,u%2Rg¢>ݾW´« Ï›JË<É!G†›A ú–»¢é\lF‰ë$½THÒCÑ; تtæxRäêœÎÕ~Ø^^ƒi®2®ïXíCãLØø‘dŸÞ&Èñ¤3ÝIëÌM¬ ”¡Â_ÍÌèØ”³©ö…ýõ=\œª€ØB®‹¯“˜@æN2¨Æ²¢•9˜UÞSPLB1UõT!Ükƒ0x•p°’Üž#H¸Bb‚Œ1Ól†5Ø„ _1”Oä,˜å$O>Æß¸ÀµPd mÏa›kD|=ÉÄGí Vn£6 Ö[Ä®d‹桚(ÄØÚPþ±ùmÏ.Á0QŒ¾`'Fb#&ܧ6ú—»aô«Pë×âÓ×Qèý—·1Ø2[µ+z÷iô; ¨ù]ÐC17æ›Ð¾pºI9̾jD¾}ŽÂ›?7ayzeÎ,hXAK í^3¨*bk ©·ù@ì+wQ=!‡Ú}uÓåXz·€¶Ù”‡Âq:g쯺‘n= ª’Ø:Äd+_¸½³Gƒ‡ÌTŽæA;œÕ JÎÆ£¥.‡Š!PóÖ)5!Üö›H:¾ˆ˜Üep°’Ö€úÑ"œ–£•Ý‚…õÎ"ðKy¦w|Ê{Hš2!i‡í~3z_XÑ;o…ÅkBZK* ^ˆRô®Ÿ‰:OŠ(¡§jF å…*^˜­È°ÑS¥„诿ñ_ó gЬåyºÔcIEND®B`‚iep-3.7/iep/resources/icons/application_eraser.png0000664000175000017500000000105612271043444022633 0ustar almaralmar00000000000000‰PNG  IHDRóÿaõIDATxÚcd hŸ©ÿ¢¯š42‚hÆ€‚Ù6¦ï¾ýçþ’ú÷á?ÿý÷Hÿgø÷ÈÿûHÿgØc²Å0!Œ-«ïþåååf"d³¹À0̲.öåð>ƪewþÒì§ô…2¤ì…ÊÅ·ÿ·Å¨àÔ¼}÷v!>!±9sæ0ìÖ¾ 1 bÑÍÿí±j ¿þý ùûï?`Py÷îÝbxöôX!Ìfð°ð0#cÅÂÿÛãÔ~ŽP €ü ¢Üƒ‡v£Ø|ëÆ-†+—®€Ù?e‚7x12–οú¿+A hë?ˆ @ø?(ôöïß…bÀºUëÀôìÙ³bê¶2,möad,™{åw’6ÄV f„òjо}»P4÷MœÎÀËÅÂU³‰ay«?#cÑì‹ÿ{SôÀÀÀ(fо½;ÁLš6”L¸ÙY"ª60¬lddÌ›væÿÄLc†¿ EÓüÿ?j Ã\ÉÉÂÂRº†amO(#cîäSÿ'å˜"4AœÀ€ž8þÁ\t33Cpñ*†u}ጌÙOüŸ’gN(-a€À¢• ú#Aya¥¸¬TØ?Pz&€¿ ”~ÿÓÿÀQ L#¡ù$qΪ "ÂI¶ Plõt ÞZ:°sIEND®B`‚iep-3.7/iep/resources/icons/monitor.png0000664000175000017500000000114412271043444020454 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<öIDAT8Ë“½kTAÀûî]Ô¼`>4’œ],EH´QÒhËü ×é¿ i" &˜*©,´³’`£i¶Gð«3Aó%Þ彙ݱx—óåC‡]fw~3³3ãÌŒz½n!BxïñÞ£ªm]Ü"ÒÖ“““.ðÞ388Ìæö6˜A¾À ̬}ÆŒÞÞŸÐlnmqëá+þEîWÏ“eÙo€ª¶\Âpå4]TúމÙC4 ¼Áëå÷X0Ò4 ‘FJÃî‚Î-ï®”ûéÀø±±±×‘mDÇgΜÑD1àÇï¿ ™‹ž\½uûkÈÞfõë@EЏ4ƒ0 €½Ð²ùÅn6†Oß3œ¾óõÌÃ[_âNMÕ»NŒàa³øÅ•Wï¿3ݽú)øìLýëžžžW`¶ýüùn3Ì[>ÔAñ·ŸÿVå)jÁ½ô㇠º³‘cÃÇ‚··÷|†œ&@øóçÏTN¶¶¶ÿ±²­>|`Ä –™ & …2HމIEND®B`‚iep-3.7/iep/resources/icons/page_white_gear.png0000664000175000017500000000062212271043444022077 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<$IDAT(ÏmÑ=KB†áÇ[üÊù#­. 54¶ÕPQC5h8¤B”¶EI´ô1ôaEZ=Çsônð#ŽÅ³^¼ïp iDA} h!$¤ Uvš.¿³X‹t‰ §YÅÄĤÂ'¯¸<³Þ!’O†K›:u¾)SÂ¥F•hD°±±©Sã‹·Þ+òu€ƒ‹‹ƒ…I…wJ‹x@‚ˆÓ Á×D™ð‚ä9"NŒ49ÂÉðp´ºd“< äØâ”)¦…²M·+Í$E¶Yá¼5ÎèY;–_!oìÆ¡ ü覢\†H°ÖIEND®B`‚iep-3.7/iep/resources/icons/disk.png0000664000175000017500000000115412271043444017720 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<þIDATÁ=‹]UеÏì;C‚’¨`„DD Ve ñ£‚…h‘*BÐ"¥6VV"¢c¡Ø v‚ba•"ÁNÅB´Å Þ™{ö~×j‡o|÷Ãóx÷‘Ž&ÀÞÒ,K“”*ÿìoü¼=]ß»óñË_v<}tëÚuš§.R±±[ËÞÒœ9X´Æñ¶ŸÌs¿þy|åóo~ùäðÆ×ç¼ |uç_’¸ùáªBk6½Y–f7b»–QÚ´ô×^ºüЙƒý<TÅ:Ê:ÖŠ¾Ç¦7U±Ý•u„Ä÷wïÙßìÙžŽý޳£‚Øî ,­6}Ñ4'kÙžF%*Tâ¿NHZ'}&NGÀÛ¯_±é‹¾°Îøï´Œ*UD¤Ê:¦¤t´šH¼ûÙZk–Ʀ/FÅ%8þAëØ#Ñ…J©š¾p‘FQ¡ª$Q‰ª¢5ë:Hé0' РQED‚DK$e]›¤t³Ñ4I¤JDUS*¢œ®!¥³Bxç•KàÖÑOƈ¤ô¥5³ˆHøàöupóê‘9‡Ý‰®Q píÒ«j–¹¥'ɬ4nÿþxöÑÍ9­3’¤Wü¶õø3—Ïj7ŸûÀ…ûËœ¿ÛáoßOò$¹*y€’„”¤HIЉ$HÈ=m¹û?!|n‹m°¢IEND®B`‚iep-3.7/iep/resources/icons/text_indent_remove.png0000664000175000017500000000053712271043444022674 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ñIDAT8Ëcüÿÿ?%€‰B@±,0Fyyùÿÿþ1üùóŽÿþ Ç¿~ý‚Ó ¼wï^F>FJÀ™ÓºñÝ•j!;66ö:²èøÌ™3špúîk*H°¯áac;¨H—f†Fßλš’b¬‹4%ÙM˜™¾ùÎÐ%ÃH¬ÀaàXy]SRŽc-7ǿى’`/xzz^ÙöóçO¸Í0o=|øPî…ýíš×”VôÌgW`&ÿøñCÝÙȱâªÄ‚··÷|†œ&@øóçÏTN¶¶¶ÿ±²­>|`Ä š™Ôèò:);üúIEND®B`‚iep-3.7/iep/resources/icons/bug.png0000664000175000017500000000140612271043444017543 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<˜IDAT8Ë“ÉOSQÆù\^[ ØªtzïŠ% l$–*“**”2:  iRpˆ¦Š´¶ c0ÑèÆÄ…Kw&&`44Äðù‰(¦eáâKîɽçwÎwrO€¸XÊ\¦‘¹HiÙsÆcUQz@¹ýï›ö™šø;Ö„Id„TaË€ž¯ö)jèù·C'ÙŠKTóï8=¨Š¨ýʯæ9Þ‚^z›“í–ØÔΘ͹™1OFöZ[ô¬”WÊ-GçzÖ?‡Ð®&­%*€ñ©M¤„ÆGnæN!øaO>Nc॒[ɨX·ÿõ0NôÅqg*¤1SužÜb|î{g|îfz)̾»ž§&\ — 5\ Í0 ‰3¦i² DŸö;`|î0>A?Tx4^òËÙ`¼oûqs©ö`>ʦ²`ôÂ÷fC«v§@m†X ¦å¤[r\†ÀûAt.–¢) G™[ ÃŒ÷×°Ïð`¥’N1Ä¢ï)­B룲ˆÑW×s+ý:”Nd¡Øs÷V»a*DÕX.pBÜ&B²]°›ÔH@TÏÿ3@ÕPÚÚ  wVÚP6™3yp-¶ÃâÑÃ4š Ǽ “$ÙH®'ް9„™{m@ßUô¥¹$èZjCñ¸®…XÜ:TŽä gÎ꺢ËLÕ:¢:æ?õ[#š¹{1ˆ®P=.2 ž¹F\™i°ŽA-D 7Â7qš£XI¯Š×¤b4¸ka÷ÔAjï% ͼj&QË«HÜä–&€s.žˆ `•j¹“¬üŸ‚KLE3ü*ΫX wØ6²â_àlðÊÁ=Ÿ@ü€Ç¿“hˆßŠv÷ ·,qq‚úIEND®B`‚iep-3.7/iep/resources/icons/star.png0000664000175000017500000000123612271043444017740 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<0IDAT8Ë•’ÍK”QÆŸ{ß÷¾3ÎŒch¢„T~4´ha"múB‚¤UÛhá?ЪEmZ´“µlQ`%µ© u“c͇ãë|¾÷œÓBM©÷îóü¸p®t«ò§™s`¸ðöE7Æ!%Ì Âüô0OW@éãô¬k2c®×Û÷ûÝÅùÿóc“<¯'&¾Wx}Þûg@qqjÞ$³9í$Æë5bùÙA^Uþ<“–«Â|,g…eÔôdS‰t?8ª€ƒ:”;‚¶_DØôÛBRâ¯ÂüFˆ_ªÒÒô7“î;ã$Òp´@C±€‚"l³‰-h3‰-( aÃqØBتU”ˆ ø~jÅËôŸLf›«àp l-$¶àILRpR“›h׫¾œÒ $ù`³¼ÖÞøeŽC˜!Ä¢íÓn÷N& á£]«6…øôøÜrUÀÐ¥ÅHˆóíj©DQ å BìN˜ÂÀ@ˆÐªU¶”Ÿ[)vlaøòRC,= ¶Ê€Îí½Â@ e·à˜^MÜXý¹›s;vO<©µD5@¥ 9(ÏÕ×Áå ‚‚øÄþL€‰Ç´v€6£k>(®ÃKÃqF  ê âa¥4Š´ýJÄ$Ï…hƒÃµ›^Oo*™Î‚Â8{àèÆê÷¦?»öãξ«Û_ܪÅë(²ý^䯖&®ïŸÒÒýä쇻ÆÛÿFsþ ")IEND®B`‚iep-3.7/iep/resources/icons/page_white_copy.png0000664000175000017500000000046512271043444022140 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÇIDAT(Ïu‘MnÂ0¿äE¹Â9GBê‚«t‡P k®BH¤$ñ4]8Ø&¨šã瑟´ÐJ&ѨF%ÒÊÙ@däs3W$è¸q&гݨyFzî\þ÷ÛM çM¿æIEND®B`‚iep-3.7/iep/resources/icons/run_mainfile.png0000664000175000017500000000134412271043444021437 0ustar almaralmar00000000000000‰PNG  IHDRóÿa«IDATxÚ}“_HSQÇ¿»wµ­ÛÝd-Ó2IË:Ì2¤ÄH{ÐD‚Œ°"0 5衈(_zƒ²±°Ph!Z³¦i™äƒYË-ÿÔ„¯vïν{s:A;ðå~p>¿ÿ:ü;qT›©Xüÿü¢òRÉ!ƒnéÎp¹\¯²œ‘ º ©šQ–e í ÑÐÐPWQQQ 2ÝnwOzÌSd†ä»šQQ‚Qa±Xà÷ûát:ëÊËË—!:ÏëÓÑÏ»FKŽçݳGi0¦ƒá²À˜æƒÀl6k·Usss]YY™ ù®›9wŸÕE•*L˜²yfDËçBÚ~@<ϯ*†^¯Ï¤×;]çÃ\ýîm†.ëÖ=‡C2û‘Æo“RBˆ–¿$IšwõmµZWj®—&ߺ”ü˜ÙHmÒ¤Égˆp´ÒbîÒáR!Ç­4Þ¶_..H¨•}¥­l4-d5ؘ#Z!Õלy˜ Ì¢ºð8¿ÐvÇ^•º/¿*>ý*µežzê= úØ¢åvV¶döi†Ç? éü¢#+ªý4·¾ð"]iÉ¡Þid*šw,¿©ñ‡ÐïéÂÐx?zkü9Âé^Pù$ yö³ Š "ÓÜilS~€7ZÑûõ%¼Ýòœ ZÖ”>Ê@~ÚŒMD£Ê$:¥ «)o¾u Ïã&ëJí8á¸H?Ò6ª ‘LÎxa6Ú0èëAçpÇo1ˆ£á€·a£“’°H'O”E,%$Ƥà`â1¼÷ö`hbŸÛ~žzѺ¼LtÚ\,ËFÒ7³Ö¨á`ß’‰‘©Oh:Ó>¿7.-›šB€ø¥u^ó³znÀE6rº. ·´Ú¾¿é”O8ñÉŠIEND®B`‚iep-3.7/iep/resources/icons/star3.png0000664000175000017500000000125312271043444020022 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎégAMA± üa pHYsÃÃÇo¨d@IDAT8Oµ“Ûk’qÇ÷Ò u€5ÃÁX‹…¨utEc·…»«›À;C2D<›xØœ–§<¤ó0OÓiž6ŨÝt1¨±¦A± ]ô—‡÷÷{ŸÏó}žßï‰þç‹Å„x<>3Œ§®S­V%©TêZ&“ &“É«H|*H¥R9@M<ØØØP…B¡É$ÙÙÙ¹Q¯×{ívû«×ë}‡/ý°¿¿/FR$´Z-i­V»ÍfŸíííJ¥Ò*ö+@î§¶··4Áþ8ïc¢f³)ðá<ɈËNç!UïÙD7,खËåúÅbq -XJ§Ó‹Á`pZÄæ Ußöz½ÃÁ`ð­ßï·EYSîîî …BA` wF`›Ö:@9V P‰X<[.—WÑ’»Ýî.ˆ¿Ž=ò­­-%‰+ÑhôÀétn¢ë"&FÞåóùö+n ‡Ç)LPQi·ÛÃV«Uãñxæ˜ËÄÏÁbsŒ¾&,b/B+e@ò“Sw82’F£qÀe³Ù<>r*8™fh/p¥ï?.—kËï)Ðhò@ÀF|ŒE$™¥ê¬Ê°¬ … %`£W›c‘¤d`ŸxޏÂ=*°ûÚçó½s»Ý*þ‰Ï6›í%kGì3á3è ³øžH$Ž©ô†~o›L¦y‹Å¢Bü~ÿ‘^¯O°;Åu}º¾¾þÛÏ©(ǪˆÄ`0œÓétw5MD­Vç´Zíì/À#jÕÂëiIEND®B`‚iep-3.7/iep/resources/icons/magifier_zoom_out.png0000664000175000017500000000122112271043444022477 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<#IDAT8Ë¥’oHaÇeÁ^'ô", ZD½(z½­^XÙ‹þ‘QFT’(¡ËŽÔõge­d³¢¥µ­n™n¶?Ά³9w×î^Þ6fÛív‡ãÛÝŠ`µEÖ‹Ÿç÷{xªTý?Nj^ófZ&la‰ å σÙBÿØÛçIFxͤ"¿ŽÈ¤‘@%d0) LRÂÔ—<iÜ&gÈ.;«©pDdÂËäÁ¦d„fDø™<±lÑY Ö±ô/h¢bàå¤ÈR¼T”½Šøþ“7%`8*|1ZŸDØŠuߘ2²*Ò\Šün: éÂyÌm€| âÎÝÈnÛŽ¹ ›Zµ6U°øÓ:!Á­È#Ê­CŠìœÊå¯;‘¾ÛŽdwx}3¸Ö‹HÔ¬DIÀäN°“?ÆÉ‚TdÇÇ 2ÇOþzsQž­^.–ŒC1H"Ìå‹»«²-”)Æ>ÄEl4:®Dû¥º²oÐíˆkn ÆHË(_L@ð³ˆqw4ƒžW4ÚM.LX®Àzn ßz£®ìGºö,ªi±„‰ËBlSo°pöN ÐØã‹·è”×x œ§þû0[Çß;²Z÷[ M[µOÏl6wàºYáü_TŸX¯ímXc¶·íBÔzÄþ¥XP@åV}­¶«n™Ùp¸ú½ÕÍ ¨tî[²¨cÏâš²ø¯|m»ýá²EµIEND®B`‚iep-3.7/iep/resources/icons/delete.png0000664000175000017500000000131312271043444020225 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<]IDAT8Ë¥“ûKSaÇý[¶¢‰n„„QP˜ó2wÖÚܦγL[,biŽašAÅ\øC¨¥vÕÊ_2Ml”ZFjסå±òÒNMjmž³kÊ·¹`&.#záûËËûù¼<Ï“ 岿bV¯ÎPæ÷T3¥%¹I­†{Gª™qRiv•È…ë ætzâ#E±ß6„ˆ¼EddüÝÌJñª`Ÿ«ÅDRÁ2<]Nñ ·;°4õѾ;ˆ¶Ûm>‡7›°8ÜÉ€Qe6ÿLžI¬Ìèt‚ìæ®·c‰q!zñ |v ü¶j„/Xi ¶ž@øÞ Ì%1|hŸû±l !ˆÁô|­‹®±ø! ïY#‚uºUáN’w]Á˼ H3è„àu„ t]E´³>k%¾I“f¡’o«ÇR…‡D:“0åÚ`ä~¢ |§ øÓñ(rॠáon„3oG0!˜$‹‚¡ÎV„ë ž*[W0_ª‚¿©ýâ-+‚‰ãµÖ d§ÁWÇ&2¾ZfMFô‰ÒVJpËiF&B°³ >­ ÞRɘ•gƒ- Ð~ CâmèÍÚ´ÒÄ×ERÁ ឫРp«5Þ°y•ø¨È+‹Á21ø¶ŒK—aw·h£`Õ ä#Šüôa×Zñ½ž†‡Tâ³ZoüåL¨óÑ“•ÊÇ`"é(?•ï'žÜËŽJváKµÞ†óñ|ª:†G9[—aöw8é2 Jw Äéf'±“y¿ëmæzsÓ˜žìTswæá_·ñ_óÒιIrþIEND®B`‚iep-3.7/iep/resources/icons/error_add.png0000664000175000017500000000130612271043444020726 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<XIDAT8Ë•“]HSaÇÞzåÝ Ê¾¢#Ó5rwÑEAPäÆ\ebŸ£‹.ºè¢0&¹¶(#œQhIͦæq¤°‹¤nʷ馳æ>ÝÚ÷Ú÷¿÷‡¹Z/üx9ï9ÿßóœ÷œ—€³þ™Æ²uýÚG ž÷‡ËŠ=Ç)vƒ„{Âô=„¾Þ…{¼áê H¸ÂK #¹téà\c‡koV”,ðN uK7òÙ(òi7BF5¯ù½% H¸Ö3)È!—BÊÛôú‘øñm¸&»ú¢ºöŸ¦cöa’À4$bÉÆi„ͬ ñ x&ÒÀÜ ŸBÌv KlQ†|&çôXû÷J·p¹KWïÿé›C.íBlé,Y"f1²Ñˆ9f±ø¤jÍÒ»«üë]ýHh^I*ùtu ËÚcAâVrɸgoƒVíPü& á*§¶.“ÏD‘‰°ÉXAÂÞ†õÏbDLg ›lÂ;f\RÄù¤í<Õ¦Àù¶îSØüŒlœIgV)4o¾ÂèØ)Üyu:º_\ÔÓ× VW£AÎU2áãž™VòÍcä§G|IµÊf ©.Aëý£ÐBkzf(õ¡Ö_†@ÎMq£|GÜñä3A ²Á ÈÚ‰[|LÐýØ:Ææ{˜Àù>R£Y}Y ûs–À6°KO÷`±o7Lw¨¬„èz%º¨V(¨6¬˜ja;ʹ٢‡i+¤RÇiå~< ÚØÊÌÌ\³{PŠ  é$D˜¶ s'³þ §yëwgRqIEND®B`‚iep-3.7/iep/resources/icons/information.png0000664000175000017500000000141212271043444021310 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<œIDAT8Ë¥“ËkÔWÅ?wL¬dL&1 ™‰6Ѩ(h¡‰R,ÅM!R;TA¢.\t•m\ù >V¾°¥tš®…Zš”†Î¢™Æ0ÕÄ4Ñ3É$ýÍÜï½÷ëBH|´=Ë/_>8çUå}Tóæ!su4-ÁWNV­´8 (¡á¦wáÎàÙO¾úo^uðÅ•‘Œµr±#¡Éž¶FÖ®`!r žpzy£ý¹óŸeß¾œÏØHnÚVßÝZÏÔœ¥¸გ¨[C*±ŽÂ³2??\¦†S¹ ‡³+€ÞK÷;EÜС­ñÔö–zrc%œö´5*ŽÍcb†]Éõü3_æ§»…i4|š»vôQ @‚ëëhÐÔŽdÃ…çØÈ"Õ@ïÇIz»SˆlÕ’Ÿ,Ѿ1A×Ö†”FÒ°ÞŸØ×ÞÌXq A‚ÇÇÃd‡'°b±Î²EŒÏ.r`oÆÚ+)ØÈ¶6Õ×P˜)á¼G¼ !Ðw°†G¦ÑCqn‘®ÔfÔG­«ª ŠS°®Jðž”üãyþ­8¼uxñ8q8+¨¼g~jn¹Bs¼£14(Á{^&¤xq‚Xñx²XƘ0µ °îÖ`~’¶Mqœrd;;?l¢n]-ýGö "8:Z ý è­Õ&V¢Û#Ê_§“©ž®Mü–Ÿäû_GùöÞ_¨8TŠòÑö-Œ—y”/L¸ýZ‘ºO—ÑråÆç_îŽwn¬çÁãYfŸ— .°¡±Žm[š/-qï‡_–1µ§rßdߪr÷±ëÔ^LïJ&ìKÓ¼~- <]¨0øû(ùÂŒ1±þÜÀ™ìn ç«+iU ' •4`Œ)7 rçsÿ?¦wÑ ¨?‚{Y¶!¹IEND®B`‚iep-3.7/iep/resources/icons/tick.png0000664000175000017500000000103112271043444017712 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<«IDAT8˽“Ù.Ca…{ç8ïbnÕSBª†T'êè)E)ª§­V«CJ Ç¥jŽÄ” —ZÕ†g/¡ºü•hÂ…ÿÝ¿ÖÞûÛk þòÿn ^kâ[–ê¿2P­6ò¦c=úXHø*îGÊ`?xÔ…Ù{7¼7Vè¶Ô¨ðÙ¾%V¬Hyã¡Óq¦âNtn·¢Ò[Œ‡J2^²5†3¦ç³X¾,åS-OÆœÄo•ËÝâDñX•ÁxÁ–õž2Oܵ ì®rè]L`ñ}ûZîÆà¿³ƒÝT¡ÌU˜(²çSiˆýçÚÚÞPû£/Ìa:6Í–,A` É%S†=¾¨Þ[ ”Ž‹b[õa='šLýaÌW˜{ðÀ¶Âx¤ƒéD‰°î[ ˜u9JœÂ—BëGqzfGN“Ê0…ôosú£6¸"f¸ÂfhÖZR°’".—ú2H-[ {·îÈ(7Ãh Ê@`%E–ê[I”ÌWÓu3•¤eÔ+Í °’ÂÑlêGQ&û¥Ë'Ä °ž ÌÙ¿º‹ÎÉÊø—k|¾¢©ÒÝo a×êÑ1ZÊ,­-“+Ì?¿+rØwþÿÑ!/-‘FÕIEND®B`‚iep-3.7/iep/resources/icons/debug_step.png0000664000175000017500000000077412271043444021116 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎégAMA± üa pHYsÃÃÇo¨d‘IDAT8Oc`pàÚc÷ßs¢Ó¿énÿãׄþOÞñ?e[Ôöì]ñ™d :бÝêûÑÆÿÝÇ[ÿϽ0åÿÂË3þO:Õù¿åHåÿŒñ²$Yâ5ĶÉüëáºÿÇšþÏ:?éÿ¼‹ÓþϾ0éÿ²«sÿO<Ýñ?hH>—XÖÿ·k6ÿïÔiý?d¾÷ÿ’mÙÿ§Ÿíÿ¿øÊìÿ˯Íûßz¬úöžø‚^)]àÓ¹(àÑÌs®™òêÙžÿÛb·mH!ÈÒ¹ÿ]™ùÁ¥éÿS7D¿"Éâ°…¾`ÍK€^IÆ ÉÍñÇÊ¢Ë3ÁÑK´.=vÕ^/å¬Kù?ûüdp¬Tì*ø»&èRò¦È ‚…® evëµ›Ÿ±* ¨-Û–û?zEàA` Üûì&g®NüŸ·>õð|¯ 85ºÖLðé>±Û¿çÄ; âûõ9tyOqnñ±ªõl=røÕ§ïo<{õDƒø¸lêŸ Р¦~¯ä…ÌÈIEND®B`‚iep-3.7/iep/resources/icons/filter.png0000664000175000017500000000116512271043444020255 0ustar almaralmar00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<òIDAT8‘Á«QÆÏ™îhÔ€æôÑ"$x;¡µ Áe7.]µpÑÑNˆÂ[¤¸6í\¶SR´´qÀ—MÞgzzO‹šx<µ…>¸ð}çÇw8 NG£Ñè³x<ž „Üàœ‹œsô<Ù¶}ÁûÉc¶m;‰D¢Õjµ¾H„šÏçßçr¹‡‚ ,`æ!-‹y©TzJy…ˆ—"þ* _cf³™¬ëú=˲îw»]ÙuݪªEQ>Çb±.¥tâyÞ/ÿ5èõz/S©ÔY2™¼Édˆ¢(¢(Š[ÇqƃÁà|·Û}[­Vår9lÆ—`N>ívûS³Ù|±^¯É|>_SJC’$QY–o!"¡ÓéÄûýþõ=@£Ñx]«ÕÞ-—Ë­çyÎù‘sN ø[¯×oZ–õñêŒ×^µZ-ˆ¢øVÓ´Gš¦Ýñ}íû¾\©Tøx<~s=ˆ¸'‹Åâ¹iš]×?d³Ùç>”öˆ þh4jG"‘¨iš?¦Óé7‡²' …B@!GCÇ D$×O\ñÈ© „àþÿ™?àœÞi+8޳Ýl6d8†]×åG+ºm UUŸPJ@äXæ7A°>Ç»pÛWIEND®B`‚iep-3.7/iep/resources/icons/cog.png0000664000175000017500000000100012271043444017524 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<’IDAT(ÏUQMKa^üÞý þ½t²‹T—2ˆ ‹.E‰‘ÙQС:”EeQ¤PR¨«¶®éº–QRôqÈâ%!O^wŸ¦m!c3ïÌ3Ï3ï îÏTo^’%ÉÛš³\ÅY¶«¶|ýïëg¶˜ýØÙ¨„Ëz‘)Ž,{Å b,êÙ¾¾¶7þg|á Ùfʨâ'†ØTÁǂ߲ñL…GUM W˜0F–DN¸C \`ÛÈBA†úçSâJ“kéÆ4$0£ŒóSü’rI ‹¹ZHãdý“ˆ (c³üOÏ:/B&6…Ò9I#M…:¢X6«ü1Ä‘¦|ÎíhKµ­Æ5AJØTÖø’ÈÜ9úžZ‡f) 9+‡<±OQ § ÖŽãžÊ**4Kž˜rHÒkØèÿýæ®?WDj †Lê>c¸!ýi¸ýÖ‚á½9BL%†^Öéð0—Þn9ÖˆsÐ>i Ö“ˆ¡«Þië¶»œÿ®ùk>¯Gj—ÜÿÎý ˆ]ò™î†IEND®B`‚iep-3.7/iep/resources/icons/link.png0000664000175000017500000000052712271043444017726 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<éIDAT(ÏcøÏ€2ÐIwVië»yÿkæ˜çHÔÜ÷¿õ]V©7T›O×Äÿ/þßýðã½êC7ÜýäÿÄÿ>]Fl`†~Å®¾‹Øæý'õÿ¤ÿ•ÿSÿ{ÿ‰Ø¶âañC?ˆ ]Mß'§ûsÙÞûÿÜÿCÿ×þ·ÿìÏ59½é»QXnfúûi%A;¹ýB·ÿŽ¿‚vN+I¯› V ©é{½÷ýª·ëþOÿ_ø¿H®û¿êmï{ßëšš`jÌö^÷S¾dÏþîœý)û{ʯûöjÌô IŠJ=¤¥UŠIEND®B`‚iep-3.7/iep/resources/icons/magnifier.png0000664000175000017500000000114712271043444020731 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ùIDAT8Ë¥’¿k“aÇ¿ï$F¬©š¤ƒ?èPõ*B EpÈÔ­ ‚8Twݺަƒ‹‹ÒM;TE!"ˆšAÐÆVÐD 1ÑØ &oÞçyîžs°V$y•âg¹›>÷½ãÁÿàÿjרµÖ–ˆ¥ÈÌ9b CÜ âcxfz‰ ̶´3a ÙBÃhw­#Ð2IdS±‚ÒT”À".îN:ø®0 ºZ°ÖcìÝ“„ÒTŒâœç°°ÅO‰t•E<æAkÊEQ‚•È ¬X~W±   !2ÖÔ…ï:“±Yc¾ƒ 4 ­?G -Ô[†.âžÞH’ð '=¼~ׯH÷åðÃËű¥i¦Öì”—>|C̲C>²)qWð¼ÚDçk“¹Ö6¥‚'w.ëû¸z÷½kˆJÆpQçÈ0 ñ§toIO¤^Ì>ŠÆÊ ¼­Üo?uíÍÊ‚(gOĵçÓûMí?2ŽÕåg¨VîµÏ\¯g6Wø'gh¥‚ézõéíåÊ"²ùQh­Ò}+ü‹çFãDjÞ‹%¦‚Îú•ó7×.mIs§33\¸µÞØr‚(~J¸7¡ª2Ë¡IEND®B`‚iep-3.7/iep/resources/icons/bullet_yellow.png0000664000175000017500000000043712271043444021653 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<±IDAT8ËíÒ= Aqðó9îçòd1˜ŒÍd°(Yå¥n]q£än¥<‰òΤ«®pÓñ ”VÃYuN$ñKð>,z¨ ]¨oCvUX&€¼VÂÈïðytL„Ó2äkàуF'—÷m†á<Åpßä°ýèãØæm™æU㼬ëìæ €C â…áÁæyÓàb ¬$ *Ì*°FEˆ—‡¶2ÐR’™Œø¢QÞ(ð_θ7iIEND®B`‚iep-3.7/iep/resources/icons/arrow_left.png0000664000175000017500000000053112271043444021130 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ëIDAT8Ëcüÿÿ?%€‰B0È (=‘ÉÄ»I1€õ2¤À‹ ÍÅÙ$ôþüùÃððýC†_?3üú¿~1˜þŽ`ƒä.ô_edj>)Æ*®§À­Äðçßn90ýûï_ þÍðûÿýÑ¿V¯\‹ðÐÙ¿ÿ0þaøõ÷XÑ ¢ß`Å¿4ÔÜŸÿ@±_P½¹3î¼0›ˆ3'Ã×^¿ƒÕÙ ¯4ÿùý‡áþÂGŒŒÈ)1vUÈM B9 Ç i;N@ͺ@͉Ռ⅜㡻¼zZÓÉIEND®B`‚iep-3.7/iep/resources/icons/arrow_rotate_anticlockwise.png0000664000175000017500000000114012271043444024410 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<òIDAT8˵“ïORqÆù;ø²Es®µ~˜Vh˜7D i)%åFW˜èŒÜÔ;”y¡ ØÅ–Ö‹ÚlENÉœ&·U„ÕýgØÓWZ¾AdÓõâ¼:{>ÏÙsΑ¦dÿ`Ëšéþå›’å}ú–Œ0¿6H¦Wzº*``í¶Ü¶Ú+z>"Yà± HÿšEôë#ÜÏ Àð¬]ì|zE^`%bŽÅ¢”ÄÜv©Ÿq<ߎ!öÃlžÇÈ;;´ÑqO€u¥—žÜdðâ÷_W!ÆDÖ×ò0Â_"ö-ˆ™Ä²x - tànÆ$%ò!?ø’[÷‚®Ø•Ò²×’mìÕ8UœÞœBHôÃu¢É{N*ô½½AÆc®…kåºæµì¿ž&¬rPœªéóPzëÑè>2Iš)¹3™Aèõ. uF‰ªk4½ÔKÜ–AÑ.çƒöÉå¢úqsj§wÉ߈‹ž³Ø`LwЃKð$°H ÷wÒÝhö5 G0àz¢gœ'°ïè”hcA`Ë÷ºÞ žõ1¸?¹À®1Ðñm¨R "@QÉ©`“hž7‚ù0ŒÉ’pãGàZu £pÜvUO™$M“¤ õc'qŠ©CGH ÍL+×à@ÏTk?…µþFEÿ‘ŠküҼ갺|ÉIEND®B`‚iep-3.7/iep/resources/icons/application_edit.png0000664000175000017500000000127712271043444022304 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<QIDAT¥ÁÝkÍqÀñ÷çw~çXÎæ0Ù™ç$Ö¢Q"¹šBJ1‰I-QJü¦qA‘‡˜;jv±”\x(yš’§Qvl±VŽÙÃÙÎùïçc¿•ÚËë%fÆÿ®î]¹ºæX&kq3@SÅ©ÃÔPSÌ9Ô s§Ê„Xð«£#u¸õDÝ¿fEÍ©hQÜ+/b,⿲îpÆÏæe3?«ÁÀ<†ù挆ms«Ý=„|3%”/8 05œ‚b¨NW0\Á>ß%ûü2‘â*ö•ÝãÕÙý;|̉'ˆæ &†¨ày‚ˆ‡ˆC3׉ö>¥¢j;‰Y‹ùÖ=Ÿä­¦ã¾SGÈL"* jD éÛÄroˆÏ[Aæ]1ÉS2¡‚âÉ• ßÔ!fx€‰€€äûï#?ž˜½†\o3±ñBÏË$Y\¦ÚSuü!" BÈréû¾Ü&1g-C/"ѯD‹Kˆ[†+©å,Ý×Úé‚€"ˆ!¡/y쇛$æn`(u/˜Iúa;Sjø88‘gN ED„þä ~¤Ú([¸Žü§&"1#70ƒô£Tl:OQùL•¯ªü!@W[3…ï¯)ÈTz_ŸfRYŒ¡Ìt¾=KR¹åÑÄ4BjFÈOu÷´ÔŸ êÔ9Ô)µÒÄæúK¼m>Hçƒ6ÆUVó½/Å¡­ô5<ÆTQ%ÔÂ013F;²gQphW½çxyç=Ý]?SJWÖmoç/ÄÌ­nUéà’Ùåþ²³°h®m°?½s}ã«÷üÃo¦E(ΖSáIEND®B`‚iep-3.7/iep/resources/icons/overlay_link.png0000664000175000017500000000061512271043444021465 0ustar almaralmar00000000000000‰PNG  IHDRóÿaTIDATxÚí‘1kÂpÅ_HiªK-—.ú ˜.¡Cœºâ䤃»›³‹nÎF¨K¦ AÜ'É&M"&¤ÅêPÿM\ÓN]½åàÝÝ»{þÔ püP…l·[$“I8Žƒn·{í $Ô\×E>Ÿ‡ T0‰çy$ ¾ïc¿ßc³Ù ‹¡R©€¦i†Õj…D"Ý ×ë‘—zÊ|Žår‰t:B¡Ó4aÛ6,ËB±XD¹\Æl6ûŒúý>y®Õð”ËAEt:¤R)œN'GŒF#ȲŒõz UU¿"€v»M^ ¼M§X, ‚+ãñøµžDA©T"<ÏS“Éä#h6›$|P6›ÅårÁápÀn·Ã0à8,ˆP¢ëº§iÚû¯.T«U#“É<CtÐL ‡ÃûPoµZ~îÎçówðH'pëñ¶‡€‹ùU,IEND®B`‚iep-3.7/iep/resources/icons/page_white_py.png0000664000175000017500000000063412271043444021614 0ustar almaralmar00000000000000‰PNG  IHDRóÿacIDATxÚ“»N„@†‡B6ÚkŒ6^¶°ò,l| è,| ; Z Ãh¼d ã®v>ÑÂdy¹ã9³;„YÙ•?99\æÿøg˜‘ÈT«P+P2Y® Ô'TÅH³¾“$Ƀ,ˆ$I´ËY ‚À÷<ï² á€ý<Ï_Ò4¥LUU‘,ˈmÛ$ŽcE‘ïºn‘f=<¡”2”eÉ–e±ŽïÂ0ôÇAȇÀÁ\8°®kdÄ4MaJŠ¢  ½ €ƒ³aÐðüˆ%@~X8…€ç‹cÒqOeF¿¨ÑÉë?ë· D×õn7µAlÜ5k£ªj¿ÜŒÊ6ï™yðÚ§×ã.#ªÜ~"üá‚.´ÍÅÖ#[4Ü|þØ5Mëh'˜×Dáµü~(ñþ?jvÛ“×´ 铵F¦Ç¹ó$.Ð7Ô×/ Éò‡¬`RIEND®B`‚iep-3.7/iep/resources/icons/wrench.png0000664000175000017500000000114212271043444020251 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ôIDAT8Ë•“ËoQÅù_ü[ŒcŒ+W.]‹Ñ…¤išá5  g  m°–ÖJ[FÔq†—Éè¤#_Ð)ÚqÕ¸ÓÓ;,“¶@÷‘{ó;ßùÎÍupL©TÊ™H$¢(Z‚ XÿßM„“ɤ“€Ýn¦i"ã\nt:ôû}äóyD£Ñó ðøØåÏ0 ¹\ ÃÚ–IUËãñ4(Šrž‘¶áÍ úHM°k̈À_¿ßá4·Ç_z—üŠ€iy€'¯"[ý êén1Æû³rMž¥Ž_ïAú`béíñõ=$Ikå_p-¶qÃS~¦À²=li~3ÀBv"q²ZâAªëԧ̸—r¸[ØÔöG–¹—]<&áeÔ!î'Ú¸67 Üyôôºq‹$OÚX!ð=_™Ý~1ÍGsÜ~øE³ƒZQ†x&qWøŽK3ÓÁÇ!Þ¤ëu®Înã¢kzØGrjùQûn»IEND®B`‚iep-3.7/iep/resources/icons/application_wrench.png0000664000175000017500000000133512271043444022640 0ustar almaralmar00000000000000‰PNG  IHDRóÿa¤IDATxÚ¥SkH“Q~NŸ:瘄Ej”Ú²”&lj,A‚’.Ž2‘Š ,i–-E¢›®{iÚ±0é¢]i7éö«´ Ó¹œ[¡ëÏBwQ·Ö¾ït6ô_Ðí…÷¼çÂyÞ÷<çy þÓȆý·‹3³ÒOOS ¥lG@™óÏ"…@ÙšçY¤Áȳ³È0ß”ÑhÓ.iêÉÉ;#¼T*™ó·™GŒCB­6‹#7Íô_J·¢áÐBÊ›‡iuì¯vêŸãjE6!‡¯›¨~ûRøüìÍì ðn^`T°•Å<Œþ¾^x¿{¿)©iðñ‰1RUu¢©2‡4 Q}a~0r Š¡ðl˜šœÆÓGP«3át:aý2ŠUêµüÑóÄ(<öÍGs )»6@Ï%Ù Vp`µZa6™ T*ÑÞÞŽѱìÏÂDáÈÍÉFÁ‘‡¸qb!?Ò³;R‚YÉ ÈˆÅÓà är9ºº»áv¹ P(ÐÍæ:[+àVÕzBJ>Ðó»A€YX5†¶6$&$@$Áãñ@,Ãív´Z-4´èó)¹ÒCkö¨ÀTÅÜe|ƒñ.|åæ#*I›Í»ÝŸÏ‡ÃÕj52T*l*»‹{ç6²ïò[Z»7=˜Ùõé&zŸA¿.S,!±p„Ç@&“ Á¢¸8H""ÆqØx ÷/äR\ÓEëJVÂ9øïŸ@*W‚p¡ð»Çñ­ï’K©ƒ¼Ò.jH Z¢/ÜRÙ¨e ¡¡¼L~îÇK A§?iƒi„Ÿé ÆOàÇ™µ²^È'³ˆÃµ»'$òô¹œˆ‘eî…gÌTµâxGåo»qv2P­Ù¿·ÞïórðûêRO½(ÿIÿ4Ò@ ø¢±IEND®B`‚iep-3.7/iep/resources/icons/folder_svn.png0000664000175000017500000000117112271043444021126 0ustar almaralmar00000000000000‰PNG  IHDRóÿa@IDATxÚÍ“_hÓPÆ¿tk›Ö¥-(ˆC‘¹˜µÓ¢¸v¢¾d ÿàq SðÏ(c"(ÒAŸd‚/¢{°e*>8† ÃmZ™C×j˘;‡¶iº¦·i¯7i+>ˆ/>è…s’ûýÎ9ßM8üåâþÀôƒ¦0ïhlä8Ó/¯(ré³-¹…%¹ß”͸ۦ4#ŒÜ÷«b먕ã8]gˆÁbM]@" ´üT_U¥…ü¼2÷¬·açë` p×—Ûž;É—ë(*Àä`z|m ‹ÍL®ë‹ì^4àœ©†D‡¶E¥ÝcëK€;~¹~×AýÔÏöPsßÏ$P`#™ùL“gzÂ8Û­ApŸEüÑEÚ3!”A©k}hVb!P¢ /…àÙ~©§¿%ŠÂÛ¾®†yü#˜ðp­i@/Š¡Rù-³!Í[)ûõ1Lì*ûz[Ë[Ëö\©ï±jÔQ÷’̺«½Z˨˜(!$A$,,¸áfFøîGµ{jl-©VSK\¬–ó-ûášs#°Ÿ¡e¨²œSžæì ¨¾Ñ9žb1Øø±ó‰Å!ÒE›ŽIÉÓƒ7/lÊT"D"*ªÑç^Çî”U†ìƒsi†òq´Wu–‘fœI„ÁS¬…Ï·¡˜(ÀdÒeY8g¿Aeq‚+ðbqÅ I’”$°ÝìcþÐjß?NO75rz|PÏ‹X[÷ciÙ ë@F)•–Y¦ ŠKý;zÿ*.¾L0f-yɲ›¬S¹BT€Ö—É#–‹A²Ñ "ôb yxÐÔ[GÃ-±¡8®ýà³'A¨¬¨Å<¥*óc øîšÆüÒ‚@Ñ(‰¡;#Û€z[-Í9”0{vc.9rH¦4Rþi¤Ó`w ¡¯É¾Ûĺw—i®å(¾x'{ 3žY¸W<«Ä›â‘šdÜ}pÌŽÁÛwj:/Ñ3’é;uçDÙ–ê47KgA©…îg)§g$uˆjUO 2k’p s…ܱ {Ö t?í<(©7YÕ”®­L º¼ñXйÃ]`$˜ˆ7Ùid?Î <¹ô¢?]ãçR.ïÝŸ8n¨Þƒe Ê@´z<ÒZoFÐXq•InoJ×WíId?¿CþSkŒhÜ•„$ÌÍç†'®¼¼\*бs[ жÉ1þv|AÔèÈÙ±‹¥ k<<-ãÔDÿd׺HµU–W!@ …/иáóJ ¼kÆó¥³8Њ‚&‚!7ñùÕÉMAb¨©Å‹X¶";ê`ÆÌ±ëG‡þ† Š"œ¼}¼§±69Ô²·ŠKËK˜ŸE~!ÚD­ôf†?kÌ8š+äŽT”U¤ë ¢µ¹ÍûZà‘àî  ‡ÜñðÞØz ÷;-XÈÁWï_?˜ÉÎàÛ×ï(þ,®ìC‚¹ Hà*P¢6G¹ýÚ¡M’2µ‘ª“)& ’ã÷íränͶR¿‰ÇhëYÿ»IEND®B`‚iep-3.7/iep/resources/icons/application.png0000664000175000017500000000072012271043444021267 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<bIDAT¥Á!n”Q…á÷Ü{!M°`IXB¶€©Áb Å HÀФIAÛ©$µUtHúÿß9Ì07éó( ¡·Ÿ~||ýæäÛí&Ç `›rǤ '¤Š²yúx¹»ººùüóûéÅ8yurþèè¸=;âÇw›:.ÆfIÛÜþæP–4¶F*|y÷’C½ÿzÍ43ݯE€8”Á;”M­¡ÖP1÷^<B¹˜ “šPBšˆ‚,ZRC*ÔCwc¬aòZL£\L ˆ‚°À=ÐÔ‚R¨f&—™Fv$Hh@$H D@ÝÉ.¦a{’ØIh@$<İq ;¶™Æº,ìHH‚$ÂVBc«5:P MaZ—•i¤ÌÔ°%AÂ$‰=]"6Sl¦a›=bKâzgrÂ4n~]_~8[N]…ËT¶©eÁ6Nˆ‹TpLll¦K¶”„‡h<Ð_ì˜ðþ;îîIEND®B`‚iep-3.7/iep/resources/icons/cancel.png0000664000175000017500000000111312271043444020206 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÝIDAT8Ë¥“kkA†÷kH !)¦4„–^c› ¨¡Æ˜4eJ›ÚK¤i(½ÑËÿ̇\ £Ä• ²Î®»;OgV7U”–Ò/ þϙ÷œ3`üÆ à  Feý` ݇ïïàÛòë[ä—:òÓä‡WønãF{2 2ÿ8³ˆÌd©A2I°¶†ŸÏâ>§wï&Bÿ;6ÔáüY«$««ø• òì ¯ZÂÛߎ³Œ=€D€þ•Uem¦Óf¿ZÅ/—ÁRÑÛmäÉ ½ÄCz/ tBë Ì›Nìí…æJ›¤·½³¸ˆûì ­a€î°ü¼ÿ;¯ºrd ¥ÌîÖN,†XXÀ©ä'>¾îçÇñK¥€®îærˆùyº³³8¥ì8 x_Ã_YÁ7Í«Ìú«Í´ZÈ‹ „šŒ==ótËa€§jDÞãòô´_µÑÀÝÜÄÙØÍRA‚£#ºË×Åô(ÀU¦çëÕËxfàø84ë¼Ý¹9„n®2‹õ$b'C{éMÃø9²Hj9,=ßÞËÜøÝ«¼öÌ öÔöR,¬Ü2­²Z˾u·šÇÙÍá˜Ù0¯(f…Ô˜yâcRݵt‡#]Ôì«ù÷×øú畸ƒýžÝ¿IEND®B`‚iep-3.7/iep/resources/icons/cross.png0000664000175000017500000000121712271043444020117 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<!IDAT8Ë•“ëNQ…‰‰É‰Ï V‰†È‘€ÄB[(­ &Ðû…^¤€´¥í¤M¡6êM|Ÿ DÅÞ°Ò™v:Ó官J-%áÇNÎdÎúö¬µ÷ ¸LÕ×B×Î>w_3:*ÞWìrÙí×lNC/ -Î좕ÎB‹'{ u_€×a46¶ðëåÊçêâÒ½€¿bäß¡E¥%D47·;ٻƩ;šÑ8Ë£}>6[ãåÓ•S@*ÍZ Qkí¾>~‚–͵hB\öø9u‡²è½ìàxþ¹Zæ®vYÐb ¦¾Ž©š˜Þ€šJ£ ƒºCيٽ?çŠÉBâYvnˆÍÈ&k„ÖÕft‡ì¼öò$Ì™,d•9³Zžžaý§p“\^ Y²ãö7 ¦Q™×JFý¿ 9=íQ4 ØœÀŠØI’o SüB€äpsÉåŽI‘„) Fv(@yÕŽ²Þˆïcãü\@Íîâ’Ó %´Ð%‡ –Zœ2h'‹Ë@dµË(<|ŒÃ¡aÞ ÍâÔJðuM@¢O§°Ô⤞L°£ñGjÕd‚!œX¬8ÅÁ­AÞÐf 5›J iÕ K->Ówû62ƾßWHÖü}€ý:¡Ëm–P]XBÉ0­QX=iÞb_ï¨gÅ=!–ôF¡ðt’õû™t·Ùþõ›Â…c¼lýr»¤ÇÛí¾IEND®B`‚iep-3.7/iep/resources/icons/sum.png0000664000175000017500000000044112271043444017570 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<³IDAT(ÏcøÏ€2© Ñ¡ñÝÿê3åG‹ÏäÿÈúŸrĺóûþ—)êÉíɘœÜ;CA¥A÷ÿ ÿs ¼°ýXÜPP?ÿÚý<ŽL9?ûd± ïƒfáT#v?ð6žp]ïƳÂ6ù¡ 8Áï¼ÇiËèLý÷h ‚ |Þ»¿q¬·©7ï7º¯÷_ Ý›Þ ®ûö[í7Ýo¸_w¿æ~µ~Rã‚8zäÂãB)IEND®B`‚iep-3.7/iep/resources/icons/bug_error.png0000664000175000017500000000151112271043444020751 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÛIDAT8Ë}‘ë3”aÆý}«µì:¼»Ëj¥>¤EÅdÑÎ0e˜rHÉycF#»‘Íé]g»jÒLÃLÌ4µ(ÃTŽQ¼»˜Ù«w5‰Z}¸æyî™ç¾îûw=,Ž’g/žÝ<‘éîÑêàNºêÿ~s¨ ka'6·Î˜_+A“Kÿ©ó÷ÿœ6Mìá%ý®ÝUnA³ëjôÝsJÿ|¾ž_Ã5†Üi ì"Ö=:ÃÞÊ$±ÁotOé ^­32´ Ðη!µ(â(ÎM³4§È½ÅÂ&b݇< Õ”}ïêQ2šÖ}[Dôú¡y¬NŧàX`‡<&=µƒØ 9÷ÙiN£§’‡ÆñRä>—"½3É‘V`ØAZÞþ6ºý hΚü—:¡’Xº¤ò‡òM12{‘¨òƒä‰ò;‚19rÕÃ…pȱƒ Ôºí¯ÞùQË!炜¨@FwH_HjEoðÃÛH¬êZ î+ƒ fšÍ¦]²uÜ¡ ˆG\ChSŠãß,F˜Â AuÐ7‡e:‡ÝÍiL¶Ã7› ÛÄÆ“ñ ØÄZý ÐígëšJв¡H{#PცîL´^„a¹†Ï%X›éâ¡âTûã¦F´åí}~¹‹ŒSÄBvO ‚äbw¥¡µAŒ•÷$ óÙÐÞãbg•Ä„üŒq¼Zhö¹2¶†‘d‰š‘ T‘R|T§c{©ÔôUheNÐÏ¥`}öK‰Å×eı LrHgj8·ì1¨8otpúOIØúòK: RŠ9M9ÚsÙ¥f LÊ’qÇæ´%ØþZ¹7}Kw…FàìÔl ¨/Ðæ°5YöL³ôz ÔÊ ¶×Ô0,Ñ,µ »?¦°0V¡t›³/ 9+/dŽÔh›¢'Q™LôgØaøŽ-E7Qê4kJ “­F k<î:MIEND®B`‚iep-3.7/iep/resources/icons/arrow_rotate_clockwise.png0000664000175000017500000000113212271043444023535 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ìIDAT8˵“éNZQ…yÞÀ8D«ÖF N§J‰ˆŠè5X¹BÑ€/DiEmAD0@Ô´‰Œ©8¢Ò´%Úö¾ YÞ@41Šœ_g¯o½ÎÞ,¬ÿ9¬'(Ù¹-¡;¾5CºÙâc-^’÷ºöÚØŠÖáX ÷™>Ú…Õ¿NØ~š1¸Õ…º¥W¡ê… v\€œ›N)øi7Ïmðü™Çò¹ößÓp†-úÚ ¾­$t+@þ½•ÔUðþ‹¹ºÂVŒ”Ðl÷Ãúãì¿f0˼¤Ãß‚’É|ò@¶%¦á÷Œ«#ZÜäDD>U㮤ªæË#æ#LÇzèÃ(2æÒ7ÒÏ >‰ Y¯A£WÑ _yydzr©7í˜<‹B8º¸÷…®—WEeS…”ÌO`<¨ÅØ!…lMÆÝ&iðçJxŠMœˆnW Í®Ê/Ýx>”JÇœè\'ðÚ'A©9-Kõ0ŽB µ§Fµ…‡g}Éä­£²5‚éÕ€‰ Æ# †ƒ¨wú± !Òz“Bqç€7Ë…Ô+ÆÄ‘6æºsíÛ”£êCeTœ¬H`ß9ÊÜ·yhv×¢Þ)DÎH&²TiHH9KíI$¼ mÖµ¤µLÒ\ôi»9ÅÔIEND®B`‚iep-3.7/iep/resources/icons/application_link.png0000664000175000017500000000127512271043444022312 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<OIDAT8Ë¥“íkRaÆ…>ö}ë/Pj "óƒA *d°™•Ö²CáK Û$3TF2i5ŠI ¢$5?ô†Q+*§õ%˜¸oçxŽî깟ãûغá‚û\÷u~ç9ÏsŽ€æ¤±¸–¡§•¶ïqÞGL‹%xüÀµûßp5ñÂÂ\‰Âåù"¦î~€sî¼ñB›îã€é'•AôUÿª©pnÀôäƒèl0 ð.®â 51›Qž‡?¹ÑSú˜Äž‚¶¨ )ÊhtzØl‰¨Õ»X[ïàO­…_kMžŸNlèäÁr¿ÏA]YAGRAÛ][m ëMjˆ¨ntyÞzó…  Ý¦ê3€B¦‰ Ô¡Õ0P‹VÔQPoÉØhJ<æÆs@GÅ;;° ê1I}õ•vAÍ!ˆêÔõg*@¸÷y@jw»x™N# !‘H  bµ\Fms ·‡ÍÆ…0t:ÝaÍTì£ `’d ,‰DP­VQ©TËåøõ|<ŽR©Ä½B¡À½ÑÑÑ[šKsï÷Žæu6 ŸÏ‡âÊ f˜ÍfØl6D£Qx<Þ“`3‚‚ÐÐ8£o÷áp333 IŒF#2™ ŠÅ"òùƒÁ‹ÅÂE=y'N_à»Ý^ß÷gaÅ–ømR=™Ln.//#‹ÁårÁívóž<šQ†²ûZ­ö^¯?j2™~ONN¶‡ÈÔ³2°¾IÍ(CÙ¿Õ¦ƒû|°iIEND®B`‚iep-3.7/iep/resources/icons/find.png0000664000175000017500000000122312271043444017703 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<%IDAT8Ëcøÿÿ?%˜ê4÷Ïy´dÞÿ­çþñ'/Xf‡Æ¦Þ"Ê€Šæ¾GëviQTó¿oöŠÿ@ƒŸà5 )»ä×ô%ÿk;§þo›4ÿ¿‰¥Ø7ŸÿY%uÿ ªZÁbVö®Ë”Ty…E™À,X³“£¨¶Ý£©o6Ø©…Õmÿ=üÃþ»xüÏ)kø›–÷?"§éíÄeÿKZ¦€å¸¹yªØØÙÁL˜»šeÊÂõ­Ûõ?·¼ Œ«'®ú?eù®ÿ}K¶ÿjœ¾ámïüÿѹÍÿÓ Á.dfayÀÀÀÀ 6è\VÍÓoüŸ]Zÿäç”ÜòÿÑÉ9ÿÕ´ôÀ6‚\K/êbøĬ`Ò *YýBc~ZØ:ý÷ Œøolaû_[ßø¿¬‚òS1qI¹­bRÿþþ/*.ùŸ—ÿ?##ã; Lð@ô Š: ¸]‡Ïü_µåÀÿîË@¶$§ª©³¢²eÂÿµ;å@1ÂÇ/x%Ü|‚ÿäW4ƒ ºè|Fá=có« 9 ÍWA12 5¿âzaõN®?(8ºûþ‡S¤¡­ÿSQEQBZö(à`€Â‚••í?ŠÖŽnàx% P`ê™ýúŸ_IUã ÈP,Áä€a€j(˜X‚èçÿ@›ÿKË*ü¢п·9¹¸ÿã} cÚe&R1ž2hZ?3ÿs¤ýgâd`b“`øÿ÷;ÿçþ~yÈÀ"n0‹°×£™~[ÇÀ¡ä3àïç‹ÀdÅËÀe¸€ WÀ >œöÒcge¼ÈÄg Éï ¿ŸobøÃ-¯/`ºíQ|>ãâÉÂ̱íßÇ ÿ~ÿ r1üçòâ5Ù³8NÙbáu·åÔ¬ó¿_oùÿçóÎüf‡íëþ_óÓ”!IEND®B`‚iep-3.7/iep/resources/icons/folder_parent.png0000664000175000017500000000123312271043444021610 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎégAMA± üa cHRMz&€„ú€èu0ê`:˜pœºQ<IDAT8O“oHSQÆY1Z°”1 ¬ÖÈ$aôAúó¡(4¢ ÐÙ †hXÃ}0¡A Á BÅ#û·†‰®¡.˜¹ü³±ì.×pµ$Œ~Ý{kÛZx8pîû<÷yÞóž‚‚<«¡·óM“á·ä«ËùmHðPظ†­w6¢µn¦}¨mõ"ó_Bì´í`{Ï&Ê<:ª(qj(µ Œü_H¶®q)ä£ÏwQ;º—ºñ2L÷ô^\Kó@S¶Èìà~ÒPÕ©(¶®Cm[Oå€A!_ÊÑ7é•3+rËÄXÀEjù ñ¤7#$Ÿ—84 ùê‡#RCå¶/òó%àúŸ´ ül±+äëaj5æøq–;W@>Ø\¤¯LUSã¬È¸ËŠ@´‹Ô¼Ä»óˆ#UŸš¤XÝT8Ì´FsÂWŽÓ{Cr• 4ÚÝ¦Û ?®$쓊"Jƒ]KÇÒivßÚFP$!º‰L¹³R-„ý—%R¦ÁX¥·õœ;ÌÙN£ôóÌù,$¾/f D‡kIF_HEŽ ìýÕÒ-èØg×]#´òIèÊ=¢×K¯àsKêK°tìAÎó×0÷ðßCÿxm±fIŒŸBôšyrW͸K…àÖ3ýì$‘÷eO_ÅïAêf²W«&úŒÌ×+„¯ «x‰é^˜ñ䶘ç-ÿí» :QEºIEND®B`‚iep-3.7/iep/resources/icons/overlay_hg.png0000664000175000017500000000020212271043444021116 0ustar almaralmar00000000000000‰PNG  IHDRóÿaIIDATxÚcd 0Ž0jÌ€Žÿ…ÿq)¨`ìÇk #H3PÈ ÕÈ5¯!X ÀB6`Ñø¤¹Éÿä{hP @&IŽ.7cIEND®B`‚iep-3.7/iep/resources/icons/help.png0000664000175000017500000000142212271043444017714 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¤IDAT8Ë¥“ÝO’aÆý[àOh­æjÕjÕÖ8è §æ'ÐÔrµ –³t˜Ó,)53 j꜊o"ˆ&Ê— ðb"_ÊÇDxáU³íê5œËÙZ¿“{ÏõÛ®g÷ çøc #ÙZ÷@ãÜ'Uë4õÅž¢6Šœ±$S¦=ö™µ“æÌ:Ò!Oø;4ÜA*ƒg; G ‘Åhhh!Ì9U@¬¥8rk2µÙ‡ùÛ.¤s~ˆÆœ¨YG±ƒ# WˆÂ'•?ÕElqNdækr5ÜÓXpÆPË„: ü1¾Xc‹ÔH­P®†`÷%Ð:I›Ç]¬¬`t)*\ó§°â‰C8hÇã3ÒG ?~s„ÚA júM˜·G ]‹ Njf}s!ÒÅtí&6QÝcBU÷ üÑ4¦–PÛ¶A3µ-n»­SX½»xÒm$³‚…—v“J,¨üh¯ÓÀ<ÖcÚèÃ.u€]½³.”¶iQùA‡o<±žÎ ZÆ]´+ÄÓ ¸z”¿×¡ìIú;¶"øb-ŠZT¸ÏÀk`÷Ǒߤ>¼ÚHÛVb™ ¼vÊÄó(y;‡â×ê …¯6*PÐ(G½tFOwëäǘ>B…1½#‚ÊC6Kì#²G#O4“¡P$±êƒ„©s«fâøùâVù›ùà’3åŠÜ6 š”h7eøÎo˜À°Æ %€›ÕcÁëGY')O4˹×@¤töm¨­A¼”,¡¤YŽ¢Æi<ïÕCiôBeöãjÅçÔåCœSWùŽPƹýl2ÔG¬ã«; ‹7–aѹƒ.™ ¹ûÅðï?#ÃûOßöbNЀ”ž3ÿ½ÕŒx6ŸxÂàk!_¸ÿ5ÃþS÷ » ªõøg+ †$†¼Égº2~ýe`˜µí)ÃÕÛ Ó~â¿‹¹:C”P1#Ãÿÿÿº:W?`8wRzNý7ÑV`xúö3PõO`X€ a¢§Ïž6 ¸áðgSu†;N†?ÿ~ô1p°°1t/{ÄpúÊ-ÂÔúïi®Ëào÷›aöé4 3CšÙD†‰Ë2ì?{†°Fé;ªÊpZ ° mæcø÷ûÃ?Æo 7Ýexõé7ì2jÌKÔIEND®B`‚iep-3.7/iep/resources/icons/application_go.png0000664000175000017500000000117212271043444021756 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< IDAT¥ÁÍ‹NqÇáÏý;‡4ȦfbØxÍâ)2”ˆXXØHYØØÈ b…(Ijþ³ac¡¤$aa#/%„R3Ï‹s~÷ý5gbor]&‰ÿaûŽݲ­ué{Gý"ðp"È;ÁÀìºýòå§S7®ì+[£­k³æô§¡9ÌD»ã×€±²S+u¾O2SÝZ‰)¥\œ?¸’™:|ñ=R Uv(„"Bxž…gá *ˇçáá4J$– “P2dÂÂHÉ0K˜9Vˆ"eÈN#y8˜–Œ"©0,A‘`VQpþÖnNßÜŒŠšFxÐH 1ÍŒF’)Ea)Á¯\±xpÇÆ7RåN£Œpþ23¦Iœ¼¾ )SE¦Ê™E V²jx#½6{ÇFX «4Ê\×L3ÃI˜9*v®9„+ðpñùÇGÖ-e²êò¬{ˆõçÌ/åA£Ä3èå WðþÛêÈ䨩½æç¯ 6,ÙÊdÝáñ»ßʈà/Œ)fôr왡¥äp\Á—X8w˜çòøí :NËöZ²h¸¸;ÁÏÁ#ôªŠ**z¹bÅàj6ìâé‡GÜõ„eÝ·ï\>³Ç$ñ/ÖžKíÖÒí}÷^ßýT;>_Ð+¦˜$þÅÈYk{}Ýð‘¯ôŽ?~ù4{<,LpIEND®B`‚iep-3.7/iep/resources/icons/flag_green.png0000664000175000017500000000124012271043444021053 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<2IDAT8Ë¥Ó]LRap×mÝuÑæE7Ýô1KO¹b]¸”YÐ*ËåÚrK3Gæ\³@IÇŠ€ üÈ $ñ!‘„A*â”ÔŒ\NmP8‰ÔZ[›[YÿÎy×Ψ-/äâ¿÷â}žßžsö¼2ÒÉ/ o–S§êO>ÛT¸ÎÓòÖ¹ŠâUÅå¿ü|&è¸èß8c P罈`ržÅ'L_C‘Š‹k_ðLz 8T!Û•Ëçx–ðíŸ$ êàmŒ-`ruCIü /n>øe躾. ûŠrë eÉ×@r€.zJ G–‡ñ|e Žøc ~ìGW´ú·Vhª),· ¥t'ì ÀÞªÎ]ôhß»cFˆÂå$móR˜#x—tú`Žj¡7Ã^Ga¡·šiûOÖ*j.´ü´½7¡>\[áJX¢:ô'Lã(óõ6ü pĆ‡Ý¯ Ð-´¢á•ÓUP½‘ÁÓ#´2 ß’›LÒjk¬©¡¶˜a,©ñ…#ÞáË2ÔN•¢yV‚Þ¸¾„¶˜7F+Qþ²»ìp4f€;,pD%üd‰èÐC3qÆmO ÀsQ(³ Ö´sž‘ß<¹3ú"tv3ÀQÈ»[ò.ßÌ·/\'K.ŽÉøßRw‚n8÷àê2Aê÷o¸Hÿ÷œNZÀü„†Ÿ@š•ùì o °‹s@´@ýç2ç¶Ô»ß/B¸R*£ø¦IEND®B`‚iep-3.7/iep/resources/icons/text_padding_right.png0000664000175000017500000000041712271043444022636 0ustar almaralmar00000000000000‰PNG  IHDRµú7êgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¡IDAT(ÏcüÏ€01Pª€DþÿÃð‡á7þáçÛ¥ö‚ívfdøîùÿáÿžÿÿ!&¤ÿ‡é«¿è@Œÿ³bÛÿ#ÜýÿL?>¿"õŸáB,eĦIï$ÝW3ܺáÃ_„‚ÍXLø‡l‚=’ `ÿ<'õÙ‘±ºIÔ`ÝWÿ0|‡Ãy°FŠcìjî\zï›t ‚¸ðÂåÜ73ïÜóî™çcp—èÃ#ô¿Èf³=ÏûBÙ¡h¶Ûíz«Õ*S¦›Íæ9a•0G¹“J¥ä5úà+me*™L®ÝZA£Ñ觮߉hó6Gpöóò”ð±›Û üü-”Ò6<© =Aèy¼–…_™À< ÕFv…ÑœÚØµ"䚟)­mMüØÏTz.LFQc…BH8{¿)h Xv-3¿àŽ’»G1&⼜Š`÷¸„Ÿ'eôIéKš1Š7¯¢tV÷¯cè…¥ä8ÚBce!Nkï¦ìf&äy8ß~¹&ú …?¥¤äν®¬À ”©ž²™‰vÒ%„씩ëâÜ6vóXžŸ¸Ñ¶Ïëi|ZM`ûàÔ6r¶+&6  ºS×ZÛ hºXÈvJûøãè ¡Ž׌\ñׯ»ÿ€U©”?`JMÙ½‚Î½ßÆxa~štPýÄIEND®B`‚iep-3.7/iep/resources/icons/folder_hg.png0000664000175000017500000000115212271043444020715 0ustar almaralmar00000000000000‰PNG  IHDRóÿa1IDATxÚÍ“MhAÇÿ›&i’fÓ‚^DBã6‰z±IE¼R‚XAìÁ*øQ Š(…^z° Š'Qð"ZéÁ”Vñâ/¥­ 5m£ R)¶~¥»›d²_ãd7 Ä‹xì›Ù÷ÿ½7of8üåàþÀüÃö¤Ësœí—_eéâ®åw°Iù7i Áجfº ãQèšlä8®¢3Å`¾F¾b99¤Ðêje48}”êꊼôü|Ûž7q p?’Ä^6+Ÿo@W›éy¸Öw2ßÁä½Á¾† çl^%3¶3#ì›ÞbîEÅÖ½Oyòi„ÅPåïP ËÐÙ–®uL£2½Â8‹ÖÀ{¼[ö¿â-@<¢ø»9älT‘¡Š_À‡µ&TÝp­jU`oA&±ÝÓn 0Ú¡l:4é¨d©rö&hÅ9Ø=A”/‚j«ðø¯˜}Ðä4²zˆÐ3SÜŽ–‡'œFñ-¨žg&Á¹ö^†{Ãß÷Á¸ù] Þð84)‰lâzk€›QÒzäY£.½03Q}•5ðtýÔät7¼¡x}®Š3Èž ÂÉàZ¤8þÄ¥þc€¼iîC(,ô¢I¸)µ‹AEf4·§` ¹;§ˆÐ_Ì_ݶä?÷(ߦx%¥¼Ð)=Ìš915ßÖKõ ÈÊýx÷¬Øvîu‹ ˜Þ|6®ƒ5¸“5ÿãÝ¥æÁ(0èHpp¶ÿß?¦Ÿ&?ÿVÏJ8IEND®B`‚iep-3.7/iep/resources/icons/folder_page.png0000664000175000017500000000126012271043444021233 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<BIDATÁA‹UeàçýÎwïÜahÔM‰QKÙ‹PF¸iU‹6AÐBZý‰6‘à>Ýdý„\YDdQBP›±i¡#Nâ¨ãÌÜ{Ï=ç{{žÈLpíæÃ\ƒahàöΣ£hû‹áÞÝ»‹oú½½Ë?]}{™ ®üp??¼pÊÃ&Ð2­Æ¦v|ýÛ¿ßÚùöÁ½÷*À8¦ÇGéÎÃTJZ Íþ|ðÆéuçÏ·1-o]ÿîà³è‚YeÚ…ifÓâ¿'sgNpñÜ1Óµ D0é¨Aí¬Û{áæöÒÓyšÔ¢Þ¾~öÙæÖVD@JŸ ¡+ˆÔZ²Ö‰º®“¨‘å•—Î9‰’nÜ×@MLk™Z !“jÈ…Ö¯-\1öeSÄs~¼õ²‹¯¿¨J-é‚Ò0e½’™ªU”l½±ŸÊ–·öôï?]:ÎîfhüB Uä¬ sûÛw¬öv´Õ‰³ï«[ÙÜèd@ʤþùüœåp Z‰jUÔõç¼p L©9zð•þ)d„êæk`Z6µúj•™ãB¿{ hçE?°\±F‹~0_öŽ¿ðXÅ»Ÿüº{lc²^-e¶@&mesmÅt)ÇíP÷åðÔìÔ›þÅ˯ž„ªÏ #™äHö²-i ™s9Éñ@ûr|†jö­G´aB²“9¡­É¶A®döDOŒ‹¨¹Xþµ}õÓHÄ÷´¼ ð?i!<)Õ)¨ÖIEND®B`‚iep-3.7/iep/resources/icons/application_delete.png0000664000175000017500000000114212271043444022610 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ôIDAT¥ÁOhÏqÇñçûóýŒ¿¦p-fµµÅA)¥(­É‘r˜ ¥äB\¬Vkrs´B‘  å(—äÏO¶‘ÚÁì7öý¾ß/û®Vn,‡IâØá¡;gvïí¿>ÓVS"PŽB„¹rÇ#X·ªœ›˜˜<ïÆÀhîßÕ?ÒÑh¦®+Ñœkû0šÛ¥R{æ+5_*±(ËÅ•c}¬Ô‰k-jY j •#@!< Â#ðJx%\Á‚‹ÞMx8µŒDÍ’aJ†LX)f 3Ç QD"W¢•SËN-2ƒB¢$+ÈnÂSP jY!–˜Ddf a ’QDA-©åg™™±D"2#²‘#˜zx“é‡c´?½¥£«›«÷ÉUY²Ä $afˆE ˜~t‹ÙWãìõ¿÷眆dmÎjžxºãÿòkó€§ü_piúÿÙç'ÿŸ~¶ÿæêÄÿn}]8 ÈÞ_Ðr¤òÿ²«sÿ/Ú<óÜÄÿa }ÿç¬KùŸ±*ñ¿{ŸÝd¼^HÙµ}Ò©Îÿ³/LÛ¹(àHƒ×ÇKn½vó ú?` /Ïû¹d[öÿÐ>ý M.=vÕDEcüšÐÿs/LXÈ|ïÿmDW½<ðÿÌóþO;Ó÷?`¦;é„-òý?åtïÿ‰§»@ÑEºAs¼þObï‰6`ˆÛã6Àµæ`‚O÷‰Ýþ='Þhä¿énÿ»·þï<Öôß©ÓlVµž­G¿úôýÍÝÇÏÿ€h¤Øs¢Óÿö£ÿ[×ý·k6S{çÑ3„Z\.pí±ûïØnõß¶Éü¿e1N÷¯õ ÛD0IEND®B`‚iep-3.7/iep/resources/icons/star2.png0000664000175000017500000000114412271043444020020 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎégAMA± üa pHYsÃÃÇo¨dùIDAT8OÍ’_HSQǯÂPQ>ÈêÁG‹` DIö"Hô=B¢9Gæ°?R¢TÒkÐ F‘ÐVSD{pQwÍþøóÞî•¶ÕÚn¶Í­Ñ½çÞM¤oç*H3ò©‡óôýœÏïÑ¾íØ²dâaÂ^¼÷Pó– Ú³0%æ»èÒ?¬ßM±e5€”¿zó2~FêªÊá]ûV‡“½p8­ß>‡PJŽ¢”º¯NàëûjnÚáÌM¬_5`wlX•_îL—Þ6Á|ÓãõQ°È˜ò˜É{0b#`òeÃ-ȇ`9tÙ§û‘~´–å„©E{HšíÀJ^@yé1{Áb7À¯‚)ýk¯¾8 u¬QMŠdÛ°(> ú‚}¶&×6â·xhºÜ ÷B“ºñ]8±ŸV+65 [vŒÆ™ÔÇÕoBW<Ûä —â0¨#B.²8ÿCœQuÊãý]m°ÁKO<Äa‚ 0 È…ÚV§OÌ](ØG^ôZ¬±Aªg0 ¶À„½öúC÷”x.2‘°Ù[©AOyŽ¢)ë`Í3èßÚ&ó@Ótƒ ¾@$ùö‚yœ l“äÂâ6˜x‘\ÄÃÜhY§:7ƒ1Ón]ºŽð¾ÁŸ ”zÓ<·IEND®B`‚iep-3.7/iep/resources/icons/report.png0000664000175000017500000000121112271043444020273 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDAT8ËSÏkQžýAéÚÔCº»ñô(…¢à©äT= BðPlí©ÿEèÉ«‚—²…J½ˆ¦R”èE<ˆI[l–"&¤,$-AªÆüØÝ·Î¼í¾lè%ö½Ùùf¾7߬”Ëå{Þ¿ÜõZxÍ*ܵì9mJ¥Ré¦ïûŸ™ÛPÀ‡³W+pgãûHhUUçÔ|>og³ÙÕñ£‚•˜BoàºîP c ˆiü¬iZ˜$—ËÍ ƒÌ\<øý©x©’,Ë-I’DBÁ`ì `Mšèda­g;M …rã¬=Ô× d ypþá£H@àÙŒv‘ ´ýZ›CÌ0uÿ­uUx%‘÷‡µ¼jÀðóÑö¯Åï4P¡* çù2ÜÏñDñ{ÓÙó<áGk'“Éùƒoo¬I#ä=ÙnàÛGºøÁ…¨ÐZÎ$˜W‰õà1Wá×^QtzýÑ5"CÍ›n· ÕjE‘ebà8Îj³° ¿nErE ‹À•JR©ùYŒÁ"ÈÈ µ[Œ©À„‘¯Óé€mÛÉd@×õaä/¯­„‰Mó/O 1 ÊN§Ó`Æ`¨â*ƒÚÓ%x°÷ƒƒ HïõzÐh4xUÓ4ãþ tãVåÝÏ+I 5ˆ€d gJR¯×ù¾ßï‡I¢†-]ŸšŸNŒÝvÚîÉÆqë`Ôßù?»ê|Õ>ȶ•IEND®B`‚iep-3.7/iep/resources/icons/page_white.png0000664000175000017500000000054212271043444021102 0ustar almaralmar00000000000000‰PNG  IHDRóÿa)IDATxÚ“=n„0…mƒ¢Š4É)òw% 8K$ZZZŽ"U6É%¢¤ˆ.À?™Ç2+m²lžô4–ñ|)öº$_-ñ·¾Éä‘7ä¯ëº~´,Ë—Rªc™}ß‹<ϳ4Mt{nšFÀHÇQ´m+¢(UU‰²,³$I¹@néð A„RjNbÀ0 3 Ã9â[QYÇ€¼fáà4M3„*AO²mûžÂ›@?ka@p;ö`<ç(`Ý8sU¾ïoè$sô«90;m´OJ@74mOô3¹´Vÿ\‰ýï¼)yÑùóšTõì‹ïIEND®B`‚iep-3.7/iep/resources/icons/debug_next.png0000664000175000017500000000113112271043444021105 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎégAMA± üa pHYsÃÃÇo¨dîIDAT8Oc`4 è`‚löžø‚Œm±ÛS7D¿Š_ú„“7FüOÙµ={W|A&P VgH²ÌÞ¿¡õXõÿ©g{þ/¸4ýÿÜ SÀxáåÿ'êüßr¤òP H-Š! SAOwü_~mÞÿy§ü_teæÿYç'ñ¼‹ÓþϾ0éÿ²«sÿƒÔ€,¹nÈi ÓA _™ý湉ÿKwäþ™ï Æ%Û²ÿO?Û–Yr%È«p@þ9d Ha䢀G¡ |úa @lÈ`ë@^…ÜP ü r*È6dÍȆ€\ò(|@ 7Ò Àùäd\É"l¡/Xó W’€–ÂÕÍñú?è…ÞmÿÝûìqR²hÑå™àè…à7Ýí÷ñÖÿÇšþ;uZcàÒcWí5ÁñRκ”ÿ³ÏO{µbWÁÿØ5A—’7EV0xNtúß~´ñëáºÿvÍæ„® evëµ›Ÿ±*È ¯–mËý½"pHŽ 0§º÷ÙMÎ\ø?o}êÿàù^à^pí±ûïØnõß¶Éü¿e1Ø®5|ºOìöï9ñDƒø q·>‡.ï)Î-óŸgë‘ï>}sûáÓ? Ä'¨ Y.`3z¤[Ñy‹º—IEND®B`‚iep-3.7/iep/resources/icons/layout.png0000664000175000017500000000074012271043444020303 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<rIDAT¥Á;kTAÇáß'G8°S¨A¶ðV+ˆÄ”ö‚¤NŠ|ÁV¬¬µÄ/`g!VÚ¥ÕBðFÀ`!(’ Ù=93ïßwÐ…E7ÉóIFÄ­<|s 8\.„˜¨ª@À̰ÌöLÔúùÓÇ.câöÍ I,?xýXÿéþÓwrD~YÄ=YÛdLìouaŽ_¶[\¤0â·³'ŽR„ÀT¿µÃQWã"NRƒðé{ËA(瀋8™"nuaŽƒ²l'SÀ-Ý}ÉÈ <¿wÏ_w˜¦??‹,ST8™Qüv\¹x’Íab¬×Ôôšš^SÓkjÆ”2E…“‰b0Êt»mbR—E—Å$³DQá‚EÛv »Luü‹ÒEÄ 1&ñ—™#?I‰"â,™€€{±¶Á¤ÁîÓÈ$\Äe³  ÿöÑ &õçgÙ¤-\¤ÈöléΫs’®bvÜ, YF–@™! ÀP½ÇIÆO¤áôÄ(!IEND®B`‚iep-3.7/iep/resources/icons/arrow_undo.png0000664000175000017500000000116712271043444021151 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< IDAT8Ë¥S=h“Q=ùÄR¡BŠÍÁÐÒIq”ªÕ‚(Ò‚àÐE*(Hqpp—RZÁB'A$CPÐà"¢Ä,N¶ùÄÚ`i‘ðÙJ æÞsŸCI4V°Ò —÷¸pÎãÜs^È9‡Í”‡MV¸q¹ôzÄ™ŒÒ@eã4 +ª,RXPÕÜ£á'å.Ô0úò¬;?çs„9:‚FÔ¤† `)X†ÿ¥”WáøãóÏgZ$¶2AMA#èÏkCûÖvô%ú°kçî´ˆ^¼ÑŸl‘@% þS„ A%T ßž@ª;„CèŽD‘Ü‘L—æK/L†6âBúα ÍÜs(Éâ[°‚7ïfž½ºúöø†\ÈŸ+ŒŠh®¼TF¶ut@D÷®³ñÌÃLÛéû§®üDë %¡¦#Tt}TtZD³‚ÆLH]3]‘.T¥ŠJP ‹-KÌ޺댫'o:•µW(D<š@*™BxKžyX\œE M‚ìÝ¡ëÑÎØ…ÞX/ =‰ž¦…4ñýÇ*6£ ç\³ÆöO÷_Û÷þ÷Ù¿ºÅ©ëˆŠ>øŸßøù…’êåíIEND®B`‚iep-3.7/iep/resources/icons/debug_continue.png0000664000175000017500000000066412271043444021765 0ustar almaralmar00000000000000‰PNG  IHDRóÿasRGB®ÎégAMA± üa pHYsÃÃÇo¨dIIDAT8Oc`RÀºëîÐúP6²íÙïøÝ©Ãú6†%Ç3þƒpááÔÿ¹ûÿgìˆýŸ´1âÌÊàÿa }ÿûÏtÿï9ÑñÒâ¨ÿ1sCÿ›”ë_D1¤yÝ­¥ÿWßXôùµyÿ_™õþ¥iÿgŸü꙾ÿNuþï>Þú¿ýhãÿ¦Cµÿ&zý×ÈT> 7dóÊë þ/½:çÿÂË3þϽ0åÿŒsþO>Ýý¿ïdûÿÎcMÿ[×ýo8Xõ¿f_Ù¯×ÿ*‰ Gààs6ÐÏÿ­Lÿ»vØÿ[ùß³Ûå¿R’ây’R·PÃB3Sõ»J¢ÜM’5Ã4¨$)îÐ Õ"?ɶ™¶]k&øtŸØíßsâˆñ‰»Ì³õÈáWŸ¾¿¹óèÙ âÃÄî>~Ž!vëÁ¸Øbm椋±•ÛJ½ôIEND®B`‚iep-3.7/iep/resources/icons/disk_as.png0000664000175000017500000000144112271043444020402 0ustar almaralmar00000000000000‰PNG  IHDRóÿaèIDATxÚm’m,•aÇÿ÷sGï[­¨l˜ŒÍ»ÐÇlÊFëSÖ-*T–’ÚŠÚ(•^,‹)_zÙʉÃèE"QZaå©/ÎñvÎqžçîºoæ ÷³k×ý<{þ¿ë•…¦5ž°•,šÌ“l5ÀÈ3pÈ£S2Î5h&õœµÎ]ë*Ýû” ¬ülT²øßg³Aj¸Æa³“ÍiR¼Â €1`jVÔEåCcSjeýià׿lø^žåSÕ1‰ì}nBŽ7;qãX0ìà¤gpÔ+°Ì4£’çŸ.ßï¶ ÀDYVÔºgífœ‰w•)g–táÊ‘ èuÝQ¡Ôó¬Ši‹(£¢é/bƒ×"óvÛÝÓ‘úçf¤Çn€‹å=ÈKÄJ'ôT¬ ŸV)#ÙŒ#p›…»A£v'3’ÕP )1.@¬2è(:ƒ]¥è”úŒM•bNO…ñü=Qü¤Gø­ŒH¼ì2clt„šÅ$@ï@#˜R¶S3"³³ ü< (yÚK€T#/ʈ@]§IÖ*Tr~RÁAzŠL.î\Þ ⽑á^uß< ðxê?™$}qø ²aB¸0鹸Ð?žn µýó€‚Ô04}6/$ÈIˤW@D§gÎÚ Õþ›‰öÁ—5»ÐÖë+ <ÿhZz'‘›¸ËW£wÔˆà!pwñBs5ÚûßahÀ,œšx)9oúÌÈ=àŽâ÷‡—¾µ`\œØiÄûžDaS -’‚GUuH7òœC!hý:‰tŒ¼^¸^‘‰´ÄtìñK^üö¢¯ù¥y`ai Ú…¤Ö6 ËfPSÕˆ„¸Ý°Óúžy€« IpÒæ3Im>w0h»˜a\¸ë²=(«-@Ë`%"¢áµ)?ÇzðáK+~ÿ°ˆ&Ѩ¼©ë; ²ž†'G12®-zEW Å¡•ÍJïhö«:—Ðõxnx#–dWYIEND®B`‚iep-3.7/iep/resources/icons/page_delete.png0000664000175000017500000000134412271043444021225 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<vIDATÁKˆ•eàçýþoÎÜl¼…4x¡ìFAŠˆ‹¨EA©›‚ˆhF‹R¡‚h.¢u‹PWµ‚h•`‹j"µ ATDJQ –6š¢áxΜÿ{{žÈL¼~âÙé¹ÉgJ؆)d͸µ3W.åB\½üêÉÃ{F‘™v½ùÕÉ÷l»«”X•t€LH‹ÿ-{ÿ»+Ο^?ýó/k¾<¼gJw j·êÔ?ºA>›ñ8--÷ºý&;¶Tß¶Å™lw^~pÿ±ÕÇßÞ=,+2³tÅD¡]¡ "(ÍüÜÀžíó6Þ69]çfß…I@A J„¡D(JþþwɆËî^žß¹V7Ñ=  “ÚBFh}RBídñû¥4jc­<°yRÔ2† ™$j)%¢„@6²+ (-´ÖI…( B¢!‚‰lLt€(¢YRC&P¡É¤!™ ´P»$ƒ$…¾Ñ7 Bk)3IR@ýçGŒY>÷›SëÖÛ1ýXe§ }£O²Ñ$hÉ…#¦N}ྦྷž3¹éK?}bæäBýôá‰Ú8µL ©™A##=}ô-»÷¾`êÌœxÃÌÊU6oØàû_óå ãq¯ï™Ÿ›°u]Ñ’>郖¬¾ò§©[6±ëõà¼®ÅÆ ãakãÖrÔ‹oÎõZ¤ %ëWλþã1³G_4\:ï:®]íô¿*,ßè/̺›_»w4›™EÒ+§«‹ç÷;}ü·®žV» ×Çþ¸ÐIý¡ÈLÛ÷}¶o¼œGÄý)g$‰”«[?ìÖ/ÆÕÁÜðì`ËÇ/}ôõÿÚ -%nQP`IEND®B`‚iep-3.7/iep/resources/icons/folder.png0000664000175000017500000000103112271043444020233 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<«IDAT8ËÅ“»ŠA†¿êí[±‡EtQg7wAØLCŸÀÄWA0ÔÐÌÀÌP01ðÍ7pÝõ2=×í®®:¿A·3cb2'©âpþïܪœ$V±„me@ ðáå•ݬ·µåÜ2OTãOû1Wê/•`zùÆû8%ý ;O;Î9P#Æ9BùãÒÁîƒ}µ^€µnOŠõáäëë;Àó€ óǪo‰~ ’ÎådרØ~ØE d€pÉɳ_ìÜ_j—È<Ñw‘ ;úL==`rø†NvTƒy¤òþÝ.²‹óà”Y8ÂÏ@~J=‘÷o‘ÚlþSš ÒuˆIºÔ éñ3¬oÞž ÃüBñ Å! CF(NÈÎ߃J,$Å›½k‚ã…«(!­„âTA½´F*$ Xý½É‡(í}ÐfÍR˜/¶xÉQøÕ ‹EÙqˆÂx!¶²i3,ämf?OÔ“nŽå‰ÔËA§Q¬’ætI$–¥ä­ZÊêÑÞ“›Ûˆë8ò¾]î­Çô¬Yàÿþ¿¾ˆáÛšNIEND®B`‚iep-3.7/iep/resources/icons/application_refresh.png0000664000175000017500000000127212271043444023010 0ustar almaralmar00000000000000‰PNG  IHDRóÿaIDATxÚ¥S[HTQ]Ç;ŽãØ$>ÀH, ±°˜ “BÌ^&‚I3ë#±¤¬é!FÙô°L­~¤Â$Kó1ÑŸE(¦ù¤„ÄG£N†ÊÌܹ×sOç^úñÃò6‹³ÏfÃÞk,r‘}§žçmKˆ½1åfŒñŒ¢€ñ  åÈ 0~¦”#Óò»¥zÉÕ×7zÞ~×rŸ\}1HM¦Ÿ}y°¯_©8 ÂÚïì¾>92ŒªsÛ ¹Xó]ËŒ\°ÐÞÕ€Ýk“aÔçåÚÞãQáNB.<`¶#Qæ($EF÷d¾Žw`bÆ—ÛÑëF„! ©æ øéý!Q†UËLÈ.y‹ê¢=œ ºŸÙ²Ö@æÍikE»ã#ß..Ñ™QüžFn¢áÁ+ Ì1„…ø#ëòkÔ'b}ÜÃnfGkÝ-kµA|àŸ@tè,ñ DskrvǦ•›y ñbòCæ¥Wxz%…³»Ù­œu |L¥ïJ ºE¬߈¸èxB1ôóz§ºÑ3Ú ¯G‚5©&£E-xV’JHAU'»}̬ÈTÖ4àìŇ‘70ÅÀ9ëD×X; FƇœ¸n©D€Ÿ–B;êli„ä?hcå¹1 ªªxL¸h¨…¯ ÃŒg¢ä…Wñ{r‰«÷")&þ:XÐXz“•ŸYʼnXíeUž9^ö4âËH;¼n^QB oâ"ã‘`Þ½ ç!`ÿ™z4ÝI'$¯ü»—¿eÞŒÝ|t-Ͱl=¼ >Ò ê`/³Õ uaË)ªÞ)÷€ŠªdYCͪ/è__¨9Eã¨ç^H'‹vãb þ&×4 ÒÁIEND®B`‚iep-3.7/iep/resources/icons/application_cascade.png0000664000175000017500000000101410405104422022716 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<žIDAT8Ë’Ý+Q‡÷_\¸Ð"’"ŸYv•,íR"6%ÒØhb±5%ÖÇZçÂ…(ù˜]»käFÊwÙã¼~gb††5§žš93ç÷žóœ×ån•K†ã¹Íî…,óσh†ygOYÇÌ kŸ>fm‘#Ö2yÈ|ÆÄ¿DäúŽ+¸”K…×o˜šGwS¶QÙ)uCIf ðG/Ĥ#j¶ì¾¹´ñQIe2S‰«×ÁÕK>°byZÌò~9Í g¼7z›&8\hpá±$ÕS´Âtò–cX¹æp¡ÁEÞ h ï¢òtJç.4¸ÐÌl§¯~duI*|yœ?< &÷‚§y}{Ä" .¬€¯¸“Z|G½Sò:*ú‚ЄczƒÐ„¾ ôÁ¡xƒ ©F@(–#œÓpñnÀ… *;.¬ûÄvÆáBC_Ó?›âÓÅŸ t.Ð÷ªàÆ/Vl|…ˆá ¬ÙàÂñÜm²=.d¸0ÕnSu0A•ýëTÑ£PywœÊ|ËTê‰+Èú#{à"WbIEND®B`‚iep-3.7/iep/resources/icons/style.png0000664000175000017500000000145512271043444020132 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¿IDAT8Ëcøÿÿ?%…£6ë.OÚªG;ëö¼x7íØë¿½úY¿óùû¤ÅNË—^P h+÷Þô¨;þææ±§ßþ}üí¿ãÌ»«äòÏkÊdža$h€Rç Fý 7'.ºòá£õ”Û‹r·>»hÙy}‘Lòia¢¼ Ðp%qãÍÏ¿´ë®ôËfŸµ¨Úñü¶Û„›[¤³/Yk6ßšcÞ{ï IçÝÝ&­wv›µÞ:¨YzmBsÕeÕ’/®Î<ýîLÚ3éø“:S¾~í?åöéÌ ÎÊ7'ûÌ{ü9{ã‹ÿ™k^ü×)½±N<öBÜ£–«37_ÿôgÞÉw&xõbÆÁ×oÜüô?vÖÝ3b^äôn­˜÷èŸSïÝ»‰Ëžü—ˆ>ß,~–@,ÀŠ]ræÝg¿iwöJ†”<,îw0oêžoSfß½,™p6#fÉÓÿ¶mw/mu˜ûø¿LÔù^pH/{ÍãK“¼z%tÄæ"QϽêI3î\̘uïÛäûïÝ&Ü{)uÞhkPä̇ÿU/,бóù÷i_ýoÞúìKòŒÛÛ@‚"î{Œƒ{nœ\vèÍÿèI÷þ'.yò_,âl-X.ä´wøÔûÿµ“/lÁš1й1ÑóÿO^ôäÌœ‡ÿ}ûîýŸ|ïÊ܇ÿµâ.lô:"Œ[sôy3ëú›—½zï~“‹:?]$àd°ß‰õ¨óë’g>ø¯þ €Ûa œhf_Z“0ïѱà“ÍÂþ'¸`₞G‚]*o|Ћ>€ßå †F` ‹†ž)vo»óÁ£íÎW ­ÁB>ÇYÁš=Ž(mmp«¼öÕ6çÒc>§ñ¸wÞýäÛw÷¿oÏÿ>wþ¥]<´•$g–rñ¢WÍ@üß«úÆ÷òk?(Íά‘·0cQ:IEND®B`‚iep-3.7/iep/resources/icons/magnifier_zoom_in.png0000664000175000017500000000125012271043444022456 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<:IDAT8Ë¥’[h’qƇ×]D]»Y¬h­ˆXtºÑUÕXZ³¹jHcË!$D «LkXk®¡[+Ûš³}æn²$—sjú³t²ðøIòô}ä¢ÕÅÿ›ßïÿ¼/o€¢ÿɯ‡Áû3<“!t.šp&³/ñlÏÛoT·9J< sþ( øµ;CZ4¼‘ Q9Ó_ÒИÇCr–” Qœzw†°Ò ¢8gS°’0û“°SIx¾ÒêàkkP«®J¼šJQÞ0ƒ- 8ù)“7QO"':ñü0:'/ J¹ì¼~¦2 Oøgà‘™8uÔõVC¤­‡Ì(‚ ³»oìÄ®ËÑ<Æ6ŸõEh˜xŒùÕÈÀ†é8[ò‘VÜnµÁÓ¸ø’qï1l—#O 2E¨©Ÿõ߸ã Xÿ1žªûd{Àkßó}Çq@Z‰Í¢2” KSy¥1DôÛçà ¥s³³°ÎËÉÞSle»bSóúÂ;¸¯rîøIÍDVŽÏ)¼cbòÄ ôa‡d;Ê›Öakci¶ç\EIÁCºÙçá´i\Ä¥.'%épdÅíöl‹Ül“*½e3BænØ·@%Ü~tjMÉo‚…Ò/©ä>kݦ%ê4(0~¯ þêð_ Ø<=»‘Ûqf­zèú!x´WAÔ®À¢l4se¼UjÅÉbHk–]Y´€Í£Ë—Ü:²teÁ%þk~€óðIœÂû¬IEND®B`‚iep-3.7/iep/resources/icons/text_replace.png0000664000175000017500000000126312271043444021446 0ustar almaralmar00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<EIDAT8Ë•’ßKSaÇÿ‚s銤I4B,5ŠÖHc¤1q!Ñ.‚~L›𡱵vjiÛj­“ýB…jWY4‚Õ¥Þ´K‘ͳã!'Úr¬Õ/9Jò¤*5R0FCß¹ùˆgÞàú‡Mþ8ñ0ÛLíÏ\yý}|‡ realWidth: line = line[:realWidth-3] + '...' return line.ljust(width) def whos(self, line, command): # Get list of variables L = self._eval('dir()\n') L = [k for k in L if not k.startswith('__')] # Anny variables? if not L: print("There are no variables defined in this scope.") return '' else: text = "VARIABLE: ".ljust(20,' ') + "TYPE: ".ljust(20,' ') text += "REPRESENTATION: ".ljust(20,' ') + '\n' # Create list item for each variablee for name in L: ob = self._eval(name) cls = '' if hasattr(ob, '__class__'): cls = ob.__class__.__name__ rep = repr(ob) text += self._justify(name,20,2) + self._justify(cls,20,2) text += self._justify(rep,40,2) + '\n' # Done print(text) return '' def open(self, line, command): # Get what to open name = line.split(' ',1)[1].strip() fname = '' linenr = None # Is it a file name? tmp = os.path.join(os.getcwd(), name) # if name[0] in '"\'' and name[-1] in '"\'': # Explicitly given fname = name[1:-1] elif os.path.isfile(tmp): fname = tmp elif os.path.isfile(name): fname = name else: # Then it maybe is an object # Get the object try: ob = self._eval(name) except NameError: print('There is no object known as "%s"' % name) return '' # Try get filename for iter in range(3): # Try successive steps if iter == 0: ob = ob elif iter == 1 and not isinstance(ob, type): ob = ob.__class__ elif iter == 2 and hasattr(ob, '__module__'): ob = sys.modules[ob.__module__] # Try get fname fname = '' try: fname = inspect.getsourcefile(ob) except Exception: pass # Returned fname may simply be x.replace('.pyc', '.py') if os.path.isfile(fname): break # Try get line number if fname: try: lines, linenr = inspect.getsourcelines(ob) except Exception: pass # Almost done # IPython's edit now support this via our hook in interpreter.py if not fname: print('Could not determine file name for object "%s".' % name) elif linenr is not None: action = 'open %i %s' % (linenr, os.path.abspath(fname)) sys._iepInterpreter.context._strm_action.send(action) else: action = 'open %s' % os.path.abspath(fname) sys._iepInterpreter.context._strm_action.send(action) # return '' def run(self, line, command): # Get what to open name = line.split(' ',1)[1].strip() fname = '' # Enable dealing with qoutes if name[0] in '"\'' and name[-1] in '"\'': name = name[1:-1] # Is it a file name? tmp = os.path.join(os.getcwd(), name) # if os.path.isfile(tmp): fname = tmp elif os.path.isfile(name): fname = name # Go run! if not fname: print('Could not find file to run "%s".' % name) else: sys._iepInterpreter.runfile(fname) # return '' def conda(self, line, command): if not (command == 'CONDA' or command.startswith('CONDA ')): return # Get command args args = line.split(' ') args = [w for w in args if w] args.pop(0) # remove 'conda' # Stop if user does "conda = ..." if args and '=' in args[0]: return # Go! # Weird double-try, to make work on Python 2.4 oldargs = sys.argv try: try: import conda from conda.cli import main sys.argv = ['conda'] + list(args) #if args and args[0] in ('install', 'update', 'remove'): # self._check_imported_modules() main() except SystemExit: # as err: type, err, tb = sys.exc_info(); del tb err = str(err) if len(err) > 4: # Only print if looks like a message print(err) except Exception: # as err: type, err, tb = sys.exc_info(); del tb print('Error in conda command:') print(err) finally: sys.argv = oldargs return '' # todo: I think we can deprecate this def _check_imported_modules(self): KNOWN_PURE_PYHON = ('conda', 'yaml', 'IPython', 'requests', 'readline', 'pyreadline') if not sys.platform.startswith('win'): return # Only a problem on Windows # Check what modules are currently imported loaded_modules = set() for name, mod in sys.modules.items(): if 'site-packages' in getattr(mod, '__file__', ''): name = name.split('.')[0] if name.startswith('_') or name in KNOWN_PURE_PYHON: continue loaded_modules.add(name) # Add PySide PyQt4 from IEP if prefix is the same if os.getenv('IEP_PREFIX', '') == sys.prefix: loaded_modules.add(os.getenv('IEP_QTLIB', 'qt')) # Warn if we have any such modules loaded_modules = [m.lower() for m in loaded_modules if m] if loaded_modules: print('WARNING! The following modules are currently loaded:\n') print(' ' + ', '.join(sorted(loaded_modules))) print('\nUpdating or removing them may fail if they are not ' 'pure Python.\nIf none of the listed packages is updated or ' 'removed, it is safe\nto proceed (use "f" if necessary).\n') print('-'*80) time.sleep(2.0) # Give user time to realize there is a warning def pip(self, line, command): if not (command == 'PIP' or command.startswith('PIP ')): return # Get command args args = line.split(' ') args = [w for w in args if w] args.pop(0) # remove 'pip' # Stop if user does "pip = ..." if args and '=' in args[0]: return # Tweak the args if args and args[0] == 'uninstall': args.insert(1, '--yes') # Go! try: from iepkernel.pipper import pip_command pip_command(*args) except SystemExit: # as err: type, err, tb = sys.exc_info(); del tb err = str(err) if len(err) > 4: # Only print if looks like a message print(err) except Exception:# as err: type, err, tb = sys.exc_info(); del tb print('Error in pip command:') print(err) return '' iep-3.7/iep/iepkernel/start.py0000664000175000017500000001311712467104070016622 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ iepkernel/start.py Starting script for remote processes in iep. This script connects to the IEP ide using the yoton interface and imports remote2 to start the interpreter and introspection thread. Channels -------- There are four groups of channels. The ctrl channels are streams from the ide to the kernel and/or broker. The strm channels are streams to the ide. The stat channels are status channels. The reqp channels are req/rep channels. All channels are TEXT except for a few OBJECT channels. ctrl-command: to give simple commands to the interpreter (ala stdin) ctrl-code (OBJECT): to let the interpreter execute blocks of code ctrl-broker: to control the broker (restarting etc) strm-out: the stdout of the interpreter strm-err: the stderr of the interpreter strm-raw: the C-level stdout and stderr of the interpreter (captured by broker) strm-echo: the interpreters echos commands here strm-prompt: to send the prompts explicitly strm-broker: for the broker to send messages to the ide strm-action: for the kernel to push actions to the ide stat-interpreter): status of the interpreter (ready, busy, very busy, more, etc) stat-debug (OBJECT): debug status stat-startup (OBJECT): Used to pass startup parameters to the kernel reqp-introspect (OBJECT): To query information from the kernel (and for interruping) """ # This file is executed with the active directory one up from this file. import os import sys import time import yoton import __main__ # we will run code in the __main__.__dict__ namespace ## Make connection object and get channels # Create a yoton context. All channels are stored at the context. ct = yoton.Context() # Create control channels ct._ctrl_command = yoton.SubChannel(ct, 'ctrl-command') ct._ctrl_code = yoton.SubChannel(ct, 'ctrl-code', yoton.OBJECT) # Create stream channels ct._strm_out = yoton.PubChannel(ct, 'strm-out') ct._strm_err = yoton.PubChannel(ct, 'strm-err') ct._strm_echo = yoton.PubChannel(ct, 'strm-echo') ct._strm_prompt = yoton.PubChannel(ct, 'strm-prompt') ct._strm_action = yoton.PubChannel(ct, 'strm-action', yoton.OBJECT) # Create status channels ct._stat_interpreter = yoton.StateChannel(ct, 'stat-interpreter') ct._stat_debug = yoton.StateChannel(ct, 'stat-debug', yoton.OBJECT) ct._stat_startup = yoton.StateChannel(ct, 'stat-startup', yoton.OBJECT) ct._stat_breakpoints = yoton.StateChannel(ct, 'stat-breakpoints', yoton.OBJECT) # Connect (port number given as command line argument) # Important to do this *before* replacing the stdout etc, because if an # error occurs here, it will be printed in the shell. port = int(sys.argv[1]) ct.connect('localhost:'+str(port), timeout=1.0) # Create file objects for stdin, stdout, stderr sys.stdin = yoton.FileWrapper( ct._ctrl_command, echo=ct._strm_echo ) sys.stdout = yoton.FileWrapper( ct._strm_out, 256 ) sys.stderr = yoton.FileWrapper( ct._strm_err, 256 ) # Set fileno on both sys.stdout.fileno = sys.__stdout__.fileno sys.stderr.fileno = sys.__stderr__.fileno ## Set Excepthook def iep_excepthook(type, value, tb): import sys def writeErr(err): sys.__stderr__.write(str(err)+'\n') sys.__stderr__.flush() writeErr("Uncaught exception in interpreter:") writeErr(value) if not isinstance(value, (OverflowError, SyntaxError, ValueError)): while tb: writeErr("-> line %i of %s." % ( tb.tb_frame.f_lineno, tb.tb_frame.f_code.co_filename) ) tb = tb.tb_next import time time.sleep(0.3) # Give some time for the message to be send # Uncomment to detect error in the interpreter itself. # But better not use it by default. For instance errors in qt events # are also catched by this function. I think that is because it would # allow you to show such exceptions in an error dialog. #sys.excepthook = iep_excepthook ## Init interpreter and introspector request channel # Delay import, so we can detect syntax errors using the except hook from iepkernel.interpreter import IepInterpreter from iepkernel.introspection import IepIntrospector # Create interpreter instance and give dict in which to run all code __iep__ = IepInterpreter( __main__.__dict__, '') sys._iepInterpreter = __iep__ # Store context __iep__.context = ct # Create introspection req channel (store at interpreter instance) __iep__.introspector = IepIntrospector(ct, 'reqp-introspect') ## Clean up # Delete local variables del yoton, IepInterpreter, IepIntrospector, iep_excepthook del ct, port del os, sys, time # Delete stuff we do not want for name in [ '__file__', # __main__ does not have a corresponding file '__loader__' # prevent lines from this file to be shown in tb ]: globals().pop(name, None) ## Start and stop # Start introspector and enter the interpreter __iep__.introspector.set_mode('thread') try: __iep__.run() finally: # Restore original streams, so that SystemExit behaves as intended import sys try: sys.stdout, sys.stderr = sys.__stdout__, sys.__stderr__ except Exception: pass # Flush pending messages (raises exception if times out) try: __iep__.context.flush(0.1) except Exception: pass # Nicely exit by closing context (closes channels and connections). If we do # not do this on Python 3.2 (at least Windows) the exit delays 10s. (issue 79) try: __iep__.introspector.set_mode(0) __iep__.context.close() except Exception: pass iep-3.7/iep/iepkernel/interpreter.py0000664000175000017500000012207212470127151020030 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module iepkernel.interpreter Implements the IEP interpreter. Notes on IPython ---------------- We integrate IPython via the IPython.core.interactiveshell.InteractiveShell. * The namespace is set to __main__ * We call its run_cell method to execute code * Debugging/breakpoints are "enabled using the pre_run_code_hook * Debugging occurs in our own debugger * GUI integration is all handled by IEP * We need special prompts for IPython input """ import os import sys import time import platform import struct import shlex from codeop import CommandCompiler import traceback import keyword import inspect # Must be in this namespace import bdb from distutils.version import LooseVersion as LV import yoton from iepkernel import guiintegration, printDirect from iepkernel.magic import Magician from iepkernel.debug import Debugger # Init last traceback information sys.last_type = None sys.last_value = None sys.last_traceback = None # Set Python version and get some names PYTHON_VERSION = sys.version_info[0] if PYTHON_VERSION < 3: ustr = unicode bstr = str input = raw_input else: ustr = str bstr = bytes class PS1: """ Dynamic prompt for PS1. Show IPython prompt if available, and show current stack frame when debugging. """ def __init__(self, iep): self._iep = iep def __str__(self): if self._iep._dbFrames: # When debugging, show where we are, do not use IPython prompt preamble = '('+self._iep._dbFrameName+')' return '\n\x1b[0;32m%s>>>\x1b[0m ' % preamble elif self._iep._ipython: # IPython prompt return '\n\x1b[0;32mIn [\x1b[1;32m%i\x1b[0;32m]:\x1b[0m ' % ( self._iep._ipython.execution_count) #return 'In [%i]: ' % (self._ipython.execution_count) else: # Normal Python prompt return '\n\x1b[0;32m>>>\x1b[0m ' class PS2: """ Dynamic prompt for PS2. """ def __init__(self, iep): self._iep = iep def __str__(self): if self._iep._dbFrames: # When debugging, show where we are, do not use IPython prompt preamble = '('+self._iep._dbFrameName+')' return '\x1b[0;32m%s...\x1b[0m ' % preamble elif self._iep._ipython: # Dots ala IPython nspaces = len(str(self._iep._ipython.execution_count)) + 2 return '\x1b[0;32m%s...:\x1b[0m ' % (nspaces*' ') else: # Just dots return '\x1b[0;32m...\x1b[0m ' class IepInterpreter: """ IepInterpreter The IEP interpreter is the part that makes the IEP kernel interactive. It executes code, integrates the GUI toolkit, parses magic commands, etc. The IEP interpreter has been designed to emulate the standard interactive Python console as much as possible, but with a lot of extra goodies. There is one instance of this class, stored at sys._iepInterpreter and at the __iep__ variable in the global namespace. The global instance has a couple of interesting attributes: * context: the yoton Context instance at the kernel (has all channels) * introspector: the introspector instance (a subclassed yoton.RepChannel) * magician: the object that handles the magic commands * guiApp: a wrapper for the integrated GUI application * sleeptime: the amount of time (in seconds) to sleep at each iteration """ # Simular working as code.InteractiveConsole. Some code was copied, but # the following things are changed: # - prompts are printed in the err stream, like the default interpreter does # - uses an asynchronous read using the yoton interface # - support for hijacking GUI toolkits # - can run large pieces of code # - support post mortem debugging # - support for magic commands def __init__(self, locals, filename=""): # Init variables for locals and globals (globals only for debugging) self.locals = locals self.globals = None # Store filename self._filename = filename # Store ref of locals that is our main self._main_locals = locals # Flag to ignore sys exit, to allow running some scripts # interactively, even if they call sys.exit. self.ignore_sys_exit = False # Information for debugging. If self._dbFrames, we're in debug mode # _dbFrameIndex starts from 1 self._dbFrames = [] self._dbFrameIndex = 0 self._dbFrameName = '' # Init datase to store source code that we execute self._codeCollection = ExecutedSourceCollection() # Init buffer to deal with multi-line command in the shell self._buffer = [] # Init sleep time. 0.001 result in 0% CPU usage at my laptop (Windows), # but 8% CPU usage at my older laptop (on Linux). self.sleeptime = 0.01 # 100 Hz # Create compiler if sys.platform.startswith('java'): import compiler self._compile = compiler.compile # or 'exec' does not work else: self._compile = CommandCompiler() # Instantiate magician and tracer self.magician = Magician() self.debugger = Debugger() # To keep track of whether to send a new prompt, and whether more # code is expected. self.more = 0 self.newPrompt = True # Code and script to run on first iteration self._codeToRunOnStartup = None self._scriptToRunOnStartup = None # Remove "THIS" directory from the PYTHONPATH # to prevent unwanted imports. Same for iepkernel dir thisPath = os.getcwd() for p in [thisPath, os.path.join(thisPath,'iepkernel')]: while p in sys.path: sys.path.remove(p) def run(self): """ Run (start the mainloop) Here we enter the main loop, which is provided by the guiApp. This event loop calls process_commands on a regular basis. We may also enter the debug intereaction loop, either from a request for post-mortem debugging, or *during* execution by means of a breakpoint. When in this debug-loop, the guiApp event loop lays still, but the debug-loop does call process-commands for user interaction. When the user wants to quit, SystemExit is raised (one way or another). This is detected in process_commands and the exception instance is stored in self._exitException. Then the debug-loop is stopped if necessary, and the guiApp is told to stop its event loop. And that brings us back here, where we exit using in order of preference: self._exitException, the exception with which the event loop was exited (if any), or a new exception. """ # Prepare self._prepare() self._exitException = None # Enter main try: self.guiApp.run(self.process_commands, self.sleeptime) except SystemExit: # Set self._exitException if it is not set yet type, value, tb = sys.exc_info(); del tb if self._exitException is None: self._exitException = value # Exit if self._exitException is None: self._exitException = SystemExit() raise self._exitException def _prepare(self): """ Prepare for running the main loop. Here we do some initialization like obtaining the startup info, creating the GUI application wrapper, etc. """ # Reset debug status self.debugger.writestatus() # Get startup info (get a copy, or setting the new version wont trigger!) while self.context._stat_startup.recv() is None: time.sleep(0.02) self.startup_info = startup_info = self.context._stat_startup.recv().copy() # Set startup info (with additional info) if sys.platform.startswith('java'): import __builtin__ as builtins # Jython else: builtins = __builtins__ if not isinstance(builtins, dict): builtins = builtins.__dict__ startup_info['builtins'] = [builtin for builtin in builtins.keys()] startup_info['version'] = tuple(sys.version_info) startup_info['keywords'] = keyword.kwlist self.context._stat_startup.send(startup_info) # Prepare the Python environment self._prepare_environment(startup_info) # Run startup code (before loading GUI toolkit or IPython self._run_startup_code(startup_info) # Write Python banner (to stdout) thename = 'Python' if '__pypy__' in sys.builtin_module_names: thename = 'Pypy' if sys.platform.startswith('java'): thename = 'Jython' # Jython cannot do struct.calcsize("P") import java.lang real_plat = java.lang.System.getProperty("os.name").lower() plat = '%s/%s' % (sys.platform, real_plat) elif sys.platform.startswith('win'): NBITS = 8 * struct.calcsize("P") plat = 'Windows (%i bits)' % NBITS else: NBITS = 8 * struct.calcsize("P") plat = '%s (%i bits)' % (sys.platform, NBITS) printDirect("%s %s on %s.\n" % (thename, sys.version.split('[')[0].rstrip(), plat)) # Integrate GUI guiName, guiError = self._integrate_gui(startup_info) # Write IEP part of banner (including what GUI loop is integrated) if True: iepBanner = 'This is the IEP interpreter' if guiError: iepBanner += '. ' + guiError + '\n' elif guiName: iepBanner += ' with integrated event loop for ' iepBanner += guiName + '.\n' else: iepBanner += '.\n' printDirect(iepBanner) # Try loading IPython if startup_info.get('ipython', '').lower() in ('no', 'false'): self._ipython = None else: try: self._load_ipyhon() except Exception: type, value, tb = sys.exc_info(); del tb printDirect('IPython could not be loaded: %s\n' % str(value)) self._ipython = None # Set prompts sys.ps1 = PS1(self) sys.ps2 = PS2(self) # Notify about project path projectPath = startup_info['projectPath'] if projectPath: printDirect('Prepending the project path %r to sys.path\n' % projectPath) # Write tips message. if self._ipython: import IPython printDirect("\nUsing IPython %s -- An enhanced Interactive Python.\n" % IPython.__version__) printDirect( "? -> Introduction and overview of IPython's features.\n" "%quickref -> Quick reference.\n" "help -> Python's own help system.\n" "object? -> Details about 'object', " "use 'object??' for extra details.\n") else: printDirect("Type 'help' for help, " + "type '?' for a list of *magic* commands.\n") # Notify the running of the script if self._scriptToRunOnStartup: printDirect('\x1b[0;33mRunning script: "'+self._scriptToRunOnStartup+'"\x1b[0m\n') # Prevent app nap on OSX 9.2 and up # The _nope module is taken from MINRK's appnope package if sys.platform == "darwin" and LV(platform.mac_ver()[0]) >= LV("10.9"): from iepkernel import _nope _nope.nope() def _prepare_environment(self, startup_info): """ Prepare the Python environment. There are two possibilities: either we run a script or we run interactively. """ # Get whether we should (and can) run as script scriptFilename = startup_info['scriptFile'] if scriptFilename: if not os.path.isfile(scriptFilename): printDirect('Invalid script file: "'+scriptFilename+'"\n') scriptFilename = None # Get project path projectPath = startup_info['projectPath'] if scriptFilename: # RUN AS SCRIPT # Set __file__ (note that __name__ is already '__main__') self.locals['__file__'] = scriptFilename # Set command line arguments sys.argv[:] = [] sys.argv.append(scriptFilename) sys.argv.extend(shlex.split(startup_info.get('argv', ''))) # Insert script directory to path theDir = os.path.abspath( os.path.dirname(scriptFilename) ) if theDir not in sys.path: sys.path.insert(0, theDir) if projectPath is not None: sys.path.insert(0,projectPath) # Go to script dir os.chdir( os.path.dirname(scriptFilename) ) # Run script later self._scriptToRunOnStartup = scriptFilename else: # RUN INTERACTIVELY # No __file__ (note that __name__ is already '__main__') self.locals.pop('__file__','') # Remove all command line arguments, set first to empty string sys.argv[:] = [] sys.argv.append('') sys.argv.extend(shlex.split(startup_info.get('argv', ''))) # Insert current directory to path sys.path.insert(0, '') if projectPath: sys.path.insert(0,projectPath) # Go to start dir startDir = startup_info['startDir'] if startDir and os.path.isdir(startDir): os.chdir(startDir) else: os.chdir(os.path.expanduser('~')) # home dir def _run_startup_code(self, startup_info): """ Execute the startup code or script. """ # Run startup script (if set) script = startup_info['startupScript'] # Should we use the default startupScript? if script == '$PYTHONSTARTUP': script = os.environ.get('PYTHONSTARTUP','') if '\n' in script: # Run code later or now firstline = script.split('\n')[0].replace(' ', '') if firstline.startswith('#AFTER_GUI'): self._codeToRunOnStartup = script else: self.context._stat_interpreter.send('Busy') msg = {'source': script, 'fname': '', 'lineno': 0} self.runlargecode(msg, True) elif script and os.path.isfile(script): # Run script self.context._stat_interpreter.send('Busy') self.runfile(script) else: # Nothing to run pass def _integrate_gui(self, startup_info): """ Integrate event loop of GUI toolkit (or use pure Python event loop). """ self.guiApp = guiintegration.App_base() self.guiName = guiName = startup_info['gui'].upper() guiError = '' try: if guiName in ['', 'NONE']: guiName = '' elif guiName == 'TK': self.guiApp = guiintegration.App_tk() elif guiName == 'WX': self.guiApp = guiintegration.App_wx() elif guiName == 'TORNADO': self.guiApp = guiintegration.App_tornado() elif guiName == 'PYSIDE': self.guiApp = guiintegration.App_pyside() elif guiName in ['PYQT4', 'QT4']: self.guiApp = guiintegration.App_pyqt4() elif guiName == 'FLTK': self.guiApp = guiintegration.App_fltk() elif guiName == 'GTK': self.guiApp = guiintegration.App_gtk() else: guiError = 'Unkown gui: %s' % guiName guiName = '' except Exception: # Catch any error # Get exception info (we do it using sys.exc_info() because # we cannot catch the exception in a version independent way. type, value, tb = sys.exc_info(); del tb guiError = 'Failed to integrate event loop for %s: %s' % ( guiName, str(value)) return guiName, guiError def _load_ipyhon(self): """ Try loading IPython shell. The result is set in self._ipython (can be None if IPython not available). """ # Init self._ipython = None import __main__ # Try importing IPython try: import IPython except ImportError: return # Version ok? if IPython.version_info < (1,): return # Create an IPython shell from IPython.core.interactiveshell import InteractiveShell self._ipython = InteractiveShell(user_module=__main__) # Set some hooks / event callbacks # Run hook (pre_run_code_hook is depreacted in 2.0) pre_run_cell_hook = self.ipython_pre_run_cell_hook if IPython.version_info < (2,): self._ipython.set_hook('pre_run_code_hook', pre_run_cell_hook) else: self._ipython.events.register('pre_run_cell', pre_run_cell_hook) # Other hooks self._ipython.set_hook('editor', self.ipython_editor_hook) self._ipython.set_custom_exc((bdb.BdbQuit,), self.dbstop_handler) # Some patching self._ipython.ask_exit = self.ipython_ask_exit # Make output be shown on Windows if sys.platform.startswith('win'): # IPython wraps std streams just like we do below, but # pyreadline adds *another* wrapper, which is where it # goes wrong. Here we set it back to bypass pyreadline. from IPython.utils import io io.stdin = io.IOStream(sys.stdin) io.stdout = io.IOStream(sys.stdout) io.stderr = io.IOStream(sys.stderr) # Ipython uses msvcrt e.g. for pausing between pages # but this does not work in IEP import msvcrt msvcrt.getwch = msvcrt.getch = input # input is deffed above def process_commands(self): """ Do one iteration of processing commands (the REPL). """ try: self._process_commands() except SystemExit: # It may be that we should ignore sys exit now... if self.ignore_sys_exit: self.ignore_sys_exit = False # Never allow more than once return # Get and store the exception so we can raise it later type, value, tb = sys.exc_info(); del tb self._exitException = value # Stop debugger if it is running self.debugger.stopinteraction() # Exit from interpreter. Exit in the appropriate way self.guiApp.quit() # Is sys.exit() by default def _process_commands(self): # Run startup code/script inside the loop (only the first time) # so that keyboard interrupt will work if self._codeToRunOnStartup: self.context._stat_interpreter.send('Busy') self._codeToRunOnStartup, tmp = None, self._codeToRunOnStartup self.pushline(tmp) if self._scriptToRunOnStartup: self.context._stat_interpreter.send('Busy') self._scriptToRunOnStartup, tmp = None, self._scriptToRunOnStartup self.runfile(tmp) # Flush real stdout / stderr sys.__stdout__.flush() sys.__stderr__.flush() # Set status and prompt? # Prompt is allowed to be an object with __str__ method if self.newPrompt: self.newPrompt = False ps = sys.ps2 if self.more else sys.ps1 self.context._strm_prompt.send(str(ps)) if True: # Determine state. The message is really only send # when the state is different. Note that the kernelbroker # can also set the state ("Very busy", "Busy", "Dead") if self._dbFrames: self.context._stat_interpreter.send('Debug') elif self.more: self.context._stat_interpreter.send('More') else: self.context._stat_interpreter.send('Ready') # Are we still connected? if sys.stdin.closed or not self.context.connection_count: # Exit from main loop. # This will raise SystemExit and will shut us down in the # most appropriate way sys.exit() # Get channel to take a message from ch = yoton.select_sub_channel(self.context._ctrl_command, self.context._ctrl_code) if ch is None: pass # No messages waiting elif ch is self.context._ctrl_command: # Read command line1 = self.context._ctrl_command.recv(False) # Command if line1: # Notify what we're doing self.context._strm_echo.send(line1) self.context._stat_interpreter.send('Busy') self.newPrompt = True # Convert command # (only a few magics are supported if IPython is active) line2 = self.magician.convert_command(line1.rstrip('\n')) # Execute actual code if line2 is not None: for line3 in line2.split('\n'): # not splitlines! self.more = self.pushline(line3) else: self.more = False self._resetbuffer() elif ch is self.context._ctrl_code: # Read larger block of code (dict) msg = self.context._ctrl_code.recv(False) if msg: # Notify what we're doing # (runlargecode() sends on stdin-echo) self.context._stat_interpreter.send('Busy') self.newPrompt = True # Execute code self.runlargecode(msg) # Reset more stuff self._resetbuffer() self.more = False else: # This should not happen, but if it does, just flush! ch.recv(False) ## Running code in various ways # In all cases there is a call for compilecode and a call to execcode def _resetbuffer(self): """Reset the input buffer.""" self._buffer = [] def pushline(self, line): """Push a line to the interpreter. The line should not have a trailing newline; it may have internal newlines. The line is appended to a buffer and the interpreter's _runlines() method is called with the concatenated contents of the buffer as source. If this indicates that the command was executed or invalid, the buffer is reset; otherwise, the command is incomplete, and the buffer is left as it was after the line was appended. The return value is 1 if more input is required, 0 if the line was dealt with in some way (this is the same as _runlines()). """ # Get buffer, join to get source buffer = self._buffer buffer.append(line) source = "\n".join(buffer) # Clear buffer and run source self._resetbuffer() more = self._runlines(source, self._filename) # Create buffer if needed if more: self._buffer = buffer return more def _runlines(self, source, filename="", symbol="single"): """Compile and run some source in the interpreter. Arguments are as for compile_command(). One several things can happen: 1) The input is incorrect; compile_command() raised an exception (SyntaxError or OverflowError). A syntax traceback will be printed by calling the showsyntaxerror() method. 2) The input is incomplete, and more input is required; compile_command() returned None. Nothing happens. 3) The input is complete; compile_command() returned a code object. The code is executed by calling self.execcode() (which also handles run-time exceptions, except for SystemExit). The return value is True in case 2, False in the other cases (unless an exception is raised). The return value can be used to decide whether to use sys.ps1 or sys.ps2 to prompt the next line. """ use_ipython = self._ipython and not self._dbFrames # Try compiling. # The IPython kernel does not handle incomple lines, so we check # that ourselves ... error = None try: code = self.compilecode(source, filename, symbol) except (OverflowError, SyntaxError, ValueError): error = sys.exc_info()[1] code = False if use_ipython: if code is None: # Case 2 #self._ipython.run_cell('', True) return True else: # Case 1 and 3 handled by IPython self._ipython.run_cell(source, True, False) return False else: if code is None: # Case 2 return True elif not code: # Case 1, a bit awkward way to show the error, but we need # to call showsyntaxerror in an exception handler. try: raise error except Exception: self.showsyntaxerror(filename) return False else: # Case 3 self.execcode(code) return False def runlargecode(self, msg, silent=False): """ To execute larger pieces of code. """ # Get information source, fname, lineno = msg['source'], msg['fname'], msg['lineno'] cellName = msg.get('cellName', '') source += '\n' # Construct notification message lineno1 = lineno + 1 lineno2 = lineno + source.count('\n') fname_show = fname if not fname.startswith('<'): fname_show = os.path.split(fname)[1] if cellName: runtext = '(executing cell "%s" (line %i of "%s"))\n' % (cellName, lineno1, fname_show) elif lineno1 == lineno2: runtext = '(executing line %i of "%s")\n' % (lineno1, fname_show) else: runtext = '(executing lines %i to %i of "%s")\n' % ( lineno1, lineno2, fname_show) # Notify IDE if not silent: self.context._strm_echo.send('\x1b[0;33m%s\x1b[0m' % runtext) # Increase counter if self._ipython: self._ipython.execution_count += 1 # Put the line number in the filename (if necessary) # Note that we could store the line offset in the _codeCollection, # but then we cannot retrieve it for syntax errors. if lineno: fname = "%s+%i" % (fname, lineno) # Try compiling the source code = None try: # Compile code = self.compilecode(source, fname, "exec") except (OverflowError, SyntaxError, ValueError): self.showsyntaxerror(fname) return if code: # Store the source using the (id of the) code object as a key self._codeCollection.store_source(code, source) # Execute the code self.execcode(code) else: # Incomplete code self.write('Could not run code because it is incomplete.\n') def runfile(self, fname): """ To execute the startup script. """ # Get text (make sure it ends with a newline) try: source = open(fname, 'rb').read().decode('UTF-8') except Exception: printDirect('Could not read script (decoding using UTF-8): "' + fname + '"\n') return try: source = source.replace('\r\n', '\n').replace('\r','\n') if source[-1] != '\n': source += '\n' except Exception: printDirect('Could not execute script: "' + fname + '"\n') return # Try compiling the source code = None try: # Compile code = self.compilecode(source, fname, "exec") except (OverflowError, SyntaxError, ValueError): time.sleep(0.2) # Give stdout time to be send self.showsyntaxerror(fname) return if code: # Store the source using the (id of the) code object as a key self._codeCollection.store_source(code, source) # Execute the code self.execcode(code) else: # Incomplete code self.write('Could not run code because it is incomplete.\n') def compilecode(self, source, filename, mode, *args, **kwargs): """ Compile source code. Will mangle coding definitions on first two lines. * This method should be called with Unicode sources. * Source newlines should consist only of LF characters. """ # This method solves IEP issue 22 # Split in first two lines and the rest parts = source.split('\n', 2) # Replace any coding definitions ci = 'coding is' contained_coding = False for i in range(len(parts)-1): tmp = parts[i] if tmp and tmp[0] == '#' and 'coding' in tmp: contained_coding = True parts[i] = tmp.replace('coding=', ci).replace('coding:', ci) # Combine parts again (if necessary) if contained_coding: source = '\n'.join(parts) # Convert filename to UTF-8 if Python version < 3 if PYTHON_VERSION < 3: filename = filename.encode('utf-8') # Compile return self._compile(source, filename, mode, *args, **kwargs) def execcode(self, code): """Execute a code object. When an exception occurs, self.showtraceback() is called to display a traceback. All exceptions are caught except SystemExit, which is reraised. A note about KeyboardInterrupt: this exception may occur elsewhere in this code, and may not always be caught. The caller should be prepared to deal with it. The globals variable is used when in debug mode. """ try: if self._dbFrames: self.apply_breakpoints() exec(code, self.globals, self.locals) else: # Turn debugger on at this point. If there are no breakpoints, # the tracing is disabled for better performance. self.apply_breakpoints() self.debugger.set_on() exec(code, self.locals) except bdb.BdbQuit: self.dbstop_handler() except Exception: time.sleep(0.2) # Give stdout some time to send data self.showtraceback() except KeyboardInterrupt: # is a BaseException, not an Exception time.sleep(0.2) self.showtraceback() def apply_breakpoints(self): """ Breakpoints are updated at each time a command is given, including commands like "db continue". """ try: breaks = self.context._stat_breakpoints.recv() if self.debugger.breaks: self.debugger.clear_all_breaks() if breaks: # Can be None for fname in breaks: for linenr in breaks[fname]: self.debugger.set_break(fname, linenr) except Exception: type, value, tb = sys.exc_info(); del tb print('Error while setting breakpoints: %s' % str(value)) ## Handlers and hooks def ipython_pre_run_cell_hook(self, ipython=None): """ Hook that IPython calls right before executing code. """ self.apply_breakpoints() self.debugger.set_on() def ipython_editor_hook(self, ipython, filename, linenum=None, wait=True): # Correct line number for cell offset filename, linenum = self.correctfilenameandlineno(filename, linenum or 0) # Get action string if linenum: action = 'open %i %s' % (linenum, os.path.abspath(filename)) else: action = 'open %s' % os.path.abspath(filename) # Send self.context._strm_action.send(action) def ipython_ask_exit(self): # Ask the user a = input("Do you really want to exit ([y]/n)? ") a = a or 'y' # Close stdin if necessary if a.lower() == 'y': sys.stdin._channel.close() def dbstop_handler(self, *args, **kwargs): print("Program execution stopped from debugger.") ## Writing and error handling def write(self, text): """ Write errors. """ sys.stderr.write( text ) def showsyntaxerror(self, filename=None): """Display the syntax error that just occurred. This doesn't display a stack trace because there isn't one. If a filename is given, it is stuffed in the exception instead of what was there before (because Python's parser always uses "" when reading from a string). IEP version: support to display the right line number, see doc of showtraceback for details. """ # Get info (do not store) type, value, tb = sys.exc_info(); del tb # Work hard to stuff the correct filename in the exception if filename and type is SyntaxError: try: # unpack information msg, (dummy_filename, lineno, offset, line) = value # correct line-number fname, lineno = self.correctfilenameandlineno(filename, lineno) except: # Not the format we expect; leave it alone pass else: # Stuff in the right filename value = SyntaxError(msg, (fname, lineno, offset, line)) sys.last_value = value # Show syntax error strList = traceback.format_exception_only(type, value) for s in strList: self.write(s) def showtraceback(self, useLastTraceback=False): """Display the exception that just occurred. We remove the first stack item because it is our own code. The output is written by self.write(), below. In the IEP version, before executing a block of code, the filename is modified by appending " [x]". Where x is the index in a list that we keep, of tuples (sourcecode, filename, lineno). Here, showing the traceback, we check if we see such [x], and if so, we extract the line of code where it went wrong, and correct the lineno, so it will point at the right line in the editor if part of a file was executed. When the file was modified since the part in question was executed, the fileno might deviate, but the line of code shown shall always be correct... """ # Traceback info: # tb_next -> go down the trace # tb_frame -> get the stack frame # tb_lineno -> where it went wrong # # Frame info: # f_back -> go up (towards caller) # f_code -> code object # f_locals -> we can execute code here when PM debugging # f_globals # f_trace -> (can be None) function for debugging? ( # # The traceback module is used to obtain prints from the # traceback. try: if useLastTraceback: # Get traceback info from buffered type = sys.last_type value = sys.last_value tb = sys.last_traceback else: # Get exception information and remove first, since that's us type, value, tb = sys.exc_info() tb = tb.tb_next # Store for debugging, but only store if not in debug mode if not self._dbFrames: sys.last_type = type sys.last_value = value sys.last_traceback = tb # Get traceback to correct all the line numbers # tblist = list of (filename, line-number, function-name, text) tblist = traceback.extract_tb(tb) # Get frames frames = [] while tb: frames.append(tb.tb_frame) tb = tb.tb_next # Walk through the list for i in range(len(tblist)): tbInfo = tblist[i] # Get filename and line number, init example fname, lineno = self.correctfilenameandlineno(tbInfo[0], tbInfo[1]) if not isinstance(fname, ustr): fname = fname.decode('utf-8') example = tbInfo[3] # Reset info tblist[i] = (fname, lineno, tbInfo[2], example) # Format list strList = traceback.format_list(tblist) if strList: strList.insert(0, "Traceback (most recent call last):\n") strList.extend( traceback.format_exception_only(type, value) ) # Write traceback for s in strList: self.write(s) # Clean up (we cannot combine except and finally in Python <2.5 tb = None frames = None except Exception: self.write('An error occured, but could not write traceback.\n') tb = None frames = None def correctfilenameandlineno(self, fname, lineno): """ Given a filename and lineno, this function returns a modified (if necessary) version of the two. As example: "foo.py+7", 22 -> "foo.py", 29 """ j = fname.rfind('+') if j>0: try: lineno += int(fname[j+1:]) fname = fname[:j] except ValueError: pass return fname, lineno class ExecutedSourceCollection: """ Stores the source of executed pieces of code, so that the right traceback can be reproduced when an error occurs. The filename (including the +lineno suffix) is used as a key. We monkey-patch the linecache module so that we first try our cache to look up the lines. In that way we also allow third party modules (e.g. IPython) to get the lines for executed cells. """ def __init__(self): self._cache = {} self._patch() def store_source(self, codeObject, source): self._cache[codeObject.co_filename] = source def _patch(self): def getlines(filename, module_globals=None): # Try getting the source from our own cache, # otherwise fallback to linecache's own cache src = self._cache.get(filename, '') if src: return [line+'\n' for line in src.splitlines()] else: import linecache return linecache._getlines(filename, module_globals) # Monkey patch import linecache linecache._getlines = linecache.getlines linecache.getlines =getlines # I hoped this would remove the +lineno for IPython tracebacks, # but it doesn't # def extract_tb(tb, limit=None): # print('aasdasd') # import traceback # list1 = traceback._extract_tb(tb, limit) # list2 = [] # for (filename, lineno, name, line) in list1: # filename, lineno = sys._iepInterpreter.correctfilenameandlineno(filename, lineno) # list2.append((filename, lineno, name, line)) # return list2 # # import traceback # traceback._extract_tb = traceback.extract_tb # traceback.extract_tb = extract_tb iep-3.7/iep/iepkernel/pipper.py0000664000175000017500000000333112271043444016761 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, Almar Klein # From iep/iepkernel import os import sys import time import subprocess def subprocess_with_callback(callback, cmd, **kwargs): """ Execute command in subprocess, stdout is passed to the callback function. Returns the returncode of the process. If callback is None, simply prints any stdout. """ # Set callback to void if None if callback is None: callback = lambda x:None # Execute command try: p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kwargs) except OSError: type, err, tb = sys.exc_info(); del tb callback(str(err)+'\n') return -1 pending = [] while p.poll() is None: time.sleep(0.001) # Read text and process c = p.stdout.read(1).decode('utf-8', 'ignore') pending.append(c) if c in '.\n': callback(''.join(pending)) pending = [] # Process remaining text pending.append( p.stdout.read().decode('utf-8') ) callback( ''.join(pending) ) # Done return p.returncode def print_(p): sys.stdout.write(p) sys.stdout.flush() def pip_command_exe(exe, *args): """ Do a pip command in the interpreter with the given exe. """ # Get pip command cmd = [exe, '-m', 'pip'] + list(args) # Execute it subprocess_with_callback(print_, cmd) def pip_command(*args): """ Do a pip command, e.g. "install pyzolib". Installs in the current interpreter. """ pip_command_exe(sys.executable, *args) if __name__ == '__main__': pip_command('install', 'pyzolib') iep-3.7/iep/iepkernel/__init__.py0000664000175000017500000000147412271043444017227 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ The iepkernel package contains the code for the IEP kernel process. This kernel is designed to be relatively lightweight; i.e. most of the work is done by the IDE. See iepkernel/start.py for more information. """ def printDirect(msg): """ Small function that writes directly to the strm_out channel. This means that regardless if stdout was hijacked, the message ends up at the IEP shell. This keeps any hijacked stdout clean, and gets the message where you want it. In most cases this is just cosmetics: the Python banner is one example. """ import sys sys._iepInterpreter.context._strm_out.send(msg) iep-3.7/iep/iepkernel/introspection.py0000664000175000017500000003262012550702573020372 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import os, sys, time import yoton import inspect try: import thread # Python 2 except ImportError: import _thread as thread # Python 3 class IepIntrospector(yoton.RepChannel): """ This is a RepChannel object that runs a thread to respond to requests from the IDE. """ def _getNameSpace(self, name=''): """ _getNameSpace(name='') Get the namespace to apply introspection in. If name is given, will find that name. For example sys.stdin. """ # Get namespace NS1 = sys._iepInterpreter.locals NS2 = sys._iepInterpreter.globals if not NS2: NS = NS1 else: NS = NS2.copy() NS.update(NS1) # Look up a name? if not name: return NS else: try: # Get object ob = eval(name, None, NS) # Get namespace for this object if isinstance(ob, dict): NS = ob elif isinstance(ob, (list, tuple)): NS = {} count = -1 for el in ob: count += 1 NS['[%i]'%count] = el else: keys = dir(ob) NS = {} for key in keys: NS[key] = getattr(ob, key) # Done return NS except Exception: return {} def _getSignature(self, objectName): """ _getSignature(objectName) Get the signature of builtin, function or method. Returns a tuple (signature_string, kind), where kind is a string of one of the above. When none of the above, both elements in the tuple are an empty string. """ # if a class, get init # not if an instance! -> try __call__ instead # what about self? # Get valid object names parts = objectName.rsplit('.') objectNames = ['.'.join(parts[-i:]) for i in range(1,len(parts)+1)] # find out what kind of function, or if a function at all! NS = self._getNameSpace() fun1 = eval("inspect.isbuiltin(%s)"%(objectName), None, NS) fun2 = eval("inspect.isfunction(%s)"%(objectName), None, NS) fun3 = eval("inspect.ismethod(%s)"%(objectName), None, NS) fun4 = False fun5 = False if not (fun1 or fun2 or fun3): # Maybe it's a class with an init? if eval("hasattr(%s,'__init__')"%(objectName), None, NS): objectName += ".__init__" fun4 = eval("inspect.ismethod(%s)"%(objectName), None, NS) # Or a callable object? elif eval("hasattr(%s,'__call__')"%(objectName), None, NS): objectName += ".__call__" fun5 = eval("inspect.ismethod(%s)"%(objectName), None, NS) sigs = "" if True: # the first line in the docstring is usually the signature tmp = eval("%s.__doc__"%(objectNames[-1]), {}, NS ) sigs = '' if tmp: sigs = tmp.splitlines()[0].strip() # Test if doc has signature hasSig = False for name in objectNames: # list.append -> L.apend(objec) -- blabla name +="(" if name in sigs: hasSig = True # If not a valid signature, do not bother ... if (not hasSig) or (sigs.count("(") != sigs.count(")")): sigs = "" if fun1: # We only have docstring, because we cannot introspect if sigs: kind = 'builtin' else: kind = '' elif fun2 or fun3 or fun4 or fun5: if fun2: kind = 'function' elif fun3: kind = 'method' elif fun4: kind = 'class' elif fun5: kind = 'callable' if not sigs: # Use intospection # collect tmp = eval("inspect.getargspec(%s)"%(objectName), None, NS) args, varargs, varkw, defaults = tmp # prepare defaults if defaults == None: defaults = () defaults = list(defaults) defaults.reverse() # make list (back to forth) args2 = [] for i in range(len(args)-fun4): arg = args.pop() if i < len(defaults): args2.insert(0, "%s=%s" % (arg, defaults[i]) ) else: args2.insert(0, arg ) # append varargs and kwargs if varargs: args2.append( "*"+varargs ) if varkw: args2.append( "**"+varkw ) # append the lot to our string funname = objectName.split('.')[-1] sigs = "%s(%s)" % ( funname, ", ".join(args2) ) else: sigs = "" kind = "" return sigs, kind # todo: variant that also says whether it's a property/function/class/other def dir(self, objectName): """ dir(objectName) Get list of attributes for the given name. """ #sys.__stdout__.write('handling '+objectName+'\n') #sys.__stdout__.flush() # Get namespace NS = self._getNameSpace() # Init names names = set() # Obtain all attributes of the class try: command = "dir(%s.__class__)" % (objectName) d = eval(command, {}, NS) except Exception: pass else: names.update(d) # Obtain instance attributes try: command = "%s.__dict__.keys()" % (objectName) d = eval(command, {}, NS) except Exception: pass else: names.update(d) # That should be enough, but in case __dir__ is overloaded, # query that as well try: command = "dir(%s)" % (objectName) d = eval(command, {}, NS) except Exception: pass else: names.update(d) # Respond return list(names) def dir2(self, objectName): """ dir2(objectName) Get variable names in currently active namespace plus extra information. Returns a list with strings, which each contain a (comma separated) list of elements: name, type, kind, repr. """ try: name = '' names = ['',''] def storeInfo(name, val): # Determine type typeName = type(val).__name__ # Determine kind kind = typeName if typeName != 'type': if hasattr(val, '__array__') and hasattr(val, 'dtype'): kind = 'array' elif isinstance(val, list): kind = 'list' elif isinstance(val, tuple): kind = 'tuple' # Determine representation if kind == 'array': tmp = 'x'.join([str(s) for s in val.shape]) if tmp: repres = '' % (tmp, val.dtype.name) elif val.size: tmp = str(float(val)) if 'int' in val.dtype.name: tmp = str(int(val)) repres = '' % (val.dtype.name, tmp) else: repres = '' % (val.dtype.name) elif kind == 'list': repres = '' % len(val) elif kind == 'tuple': repres = '' % len(val) else: repres = repr(val) if len(repres) > 80: repres = repres[:77] + '...' # Store tmp = ','.join([name, typeName, kind, repres]) names.append(tmp) # Get locals NS = self._getNameSpace(objectName) for name in NS.keys(): if not name.startswith('__'): try: storeInfo(name, NS[name]) except Exception: pass return names except Exception: return [] def signature(self, objectName): """ signature(objectName) Get signature. """ try: text, kind = self._getSignature(objectName) return text except Exception: return None def doc(self, objectName): """ doc(objectName) Get documentation for an object. """ # Get namespace NS = self._getNameSpace() try: # collect docstring h_text = '' # Try using the class (for properties) try: className = eval("%s.__class__.__name__"%(objectName), {}, NS) if '.' in objectName: tmp = objectName.rsplit('.',1) tmp[1] += '.' else: tmp = [objectName, ''] if className not in ['type', 'module', 'builtin_function_or_method', 'function']: cmd = "%s.__class__.%s__doc__" h_text = eval(cmd % (tmp[0],tmp[1]), {}, NS) except Exception: pass # Normal doc if not h_text: h_text = eval("%s.__doc__"%(objectName), {}, NS ) # collect more data h_repr = eval("repr(%s)"%(objectName), {}, NS ) try: h_class = eval("%s.__class__.__name__"%(objectName), {}, NS ) except Exception: h_class = "unknown" # docstring can be None, but should be empty then if not h_text: h_text = "" # get and correct signature h_fun, kind = self._getSignature(objectName) if kind == 'builtin' or not h_fun: h_fun = "" # signature already in docstring or not available # cut repr if too long if len(h_repr) > 200: h_repr = h_repr[:200] + "..." # replace newlines so we can separates the different parts h_repr = h_repr.replace('\n', '\r') # build final text text = '\n'.join([objectName, h_class, h_fun, h_repr, h_text]) except Exception: text = '\n'.join([objectName, '', '', '', 'No help available.']) # The lines below can be uncomented for debugging, but they don't # work on python < 2.6. # except Exception as why: # text = "No help available." + str(why) # Done return text def eval(self, command): """ eval(command) Evaluate a command and return result. """ # Get namespace NS = self._getNameSpace() try: # here globals is None, so we can look into sys, time, etc... return eval(command, None, NS) except Exception: return 'Error evaluating: ' + command def interrupt(self, command=None): """ interrupt() Interrupt the main thread. This does not work if the main thread is running extension code. A bit of a hack to do this in the introspector, but it's the easeast way and prevents having to launch another thread just to wait for an interrupt/terminare command. Note that on POSIX we can send an OS INT signal, which is faster and maybe more effective in some situations. """ thread.interrupt_main() def terminate(self, command=None): """ terminate() Ask the kernel to terminate by closing the stdin. """ sys.stdin._channel.close() iep-3.7/iep/iepkernel/guiintegration.py0000664000175000017500000004170612470341541020522 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module to integrate GUI event loops in the IEP interpreter. This specifies classes that all have the same interface. Each class wraps one GUI toolkit. Support for PyQt4, WxPython, FLTK, GTK, TK. """ import sys import time from iepkernel import printDirect # Warning message. mainloopWarning = """ Note: The GUI event loop is already running in the IEP kernel. Be aware that the function to enter the main loop does not block. """.strip()+"\n" # Qt has its own message mainloopWarning_qt = """ Note on using QApplication.exec_(): The GUI event loop is already running in the IEP kernel, and exec_() does not block. In most cases your app should run fine without the need for modifications. For clarity, this is what the IEP kernel does: - Prevent deletion of objects in the local scope of functions leading to exec_() - Prevent system exit right after the exec_() call """.strip()+"\n" class App_base: """ Defines the interface. """ def process_events(self): pass def _keyboard_interrupt(self, signum=None, frame=None): interpreter = sys._iepInterpreter interpreter.write("\nKeyboardInterrupt\n") interpreter._resetbuffer() if interpreter.more: interpreter.more = 0 interpreter.newPrompt = True def run(self, repl_callback, sleeptime=0.01): """ Very simple mainloop. Subclasses can overload this to use the native event loop. Attempt to process GUI events at least every sleeptime seconds. """ # The toplevel while-loop is just to catch Keyboard interrupts # and then proceed. The inner while-loop is the actual event loop. while True: try: while True: time.sleep(sleeptime) repl_callback() self.process_events() except KeyboardInterrupt: self._keyboard_interrupt() except TypeError: # For some reason, when wx is integrated, keyboard interrupts # result in a TypeError. # I tried to find the source, but did not find it. If anyone # has an idea, please e-mail me! if '_wx' in self.__class__.__name__.lower(): self._keyboard_interrupt() def quit(self): raise SystemExit() class App_tk(App_base): """ Tries to import tkinter and returns a withdrawn tkinter root window. If tkinter is already imported or not available, this returns None. Modifies tkinter's mainloop with a dummy so when a module calls mainloop, it does not block. """ def __init__(self): # Try importing import sys if sys.version[0] == '3': import tkinter else: import Tkinter as tkinter # Replace mainloop. Note that a root object obtained with # tkinter.Tk() has a mainloop method, which will simply call # tkinter.mainloop(). def dummy_mainloop(*args,**kwargs): printDirect(mainloopWarning) tkinter.Misc.mainloop = dummy_mainloop tkinter.mainloop = dummy_mainloop # Create tk "main window" that has a Tcl interpreter. # Withdraw so it's not shown. This object can be used to # process events for any other windows. r = tkinter.Tk() r.withdraw() # Store the app instance to process events self.app = r # Notify that we integrated the event loop self.app._in_event_loop = 'IEP' tkinter._in_event_loop = 'IEP' def process_events(self): self.app.update() class App_fltk(App_base): """ Hijack fltk 1. This one is easy. Just call fl.wait(0.0) now and then. Note that both tk and fltk try to bind to PyOS_InputHook. Fltk will warn about not being able to and Tk does not, so we should just hijack (import) fltk first. The hook that they try to fetch is not required in IEP, because the IEP interpreter will keep all GUI backends updated when idle. """ def __init__(self): # Try importing import fltk as fl import types # Replace mainloop with a dummy def dummyrun(*args,**kwargs): printDirect(mainloopWarning) fl.Fl.run = types.MethodType(dummyrun, fl.Fl) # Store the app instance to process events self.app = fl.Fl # Notify that we integrated the event loop self.app._in_event_loop = 'IEP' fl._in_event_loop = 'IEP' def process_events(self): self.app.wait(0) class App_fltk2(App_base): """ Hijack fltk 2. """ def __init__(self): # Try importing import fltk2 as fl # Replace mainloop with a dummy def dummyrun(*args,**kwargs): printDirect(mainloopWarning) fl.run = dummyrun # Return the app instance to process events self.app = fl # Notify that we integrated the event loop self.app._in_event_loop = 'IEP' def process_events(self): # is this right? self.app.wait(0) class App_tornado(App_base): """ Hijack Tornado event loop. Tornado does have a function to process events, but it does not work when the event loop is already running. Therefore we don't enter the real Tornado event loop, but just poll it regularly. """ def __init__(self): # Try importing import tornado.ioloop # Get the "app" instance self.app = tornado.ioloop.IOLoop.instance() # Replace mainloop with a dummy def dummy_start(): printDirect(mainloopWarning) def run_sync(func, timeout=None): self.app.start = self.app._original_start try: self.app._original_run_sync(func, timeout) finally: self.app.start = self.app._dummy_start # self.app._original_start = self.app.start self.app._dummy_start = dummy_start self.app.start = self.app._dummy_start # self.app._original_run_sync = self.app.run_sync self.app.run_sync = run_sync # Notify that we integrated the event loop self.app._in_event_loop = 'IEP' def process_events(self): self.app.run_sync(lambda x=None: None) # def run(self, repl_callback, sleeptime=None): # from tornado.ioloop import PeriodicCallback # # Create timer # self._timer = PeriodicCallback(repl_callback, 0.05*1000) # self._timer.start() # # Enter mainloop # self.app._original_start() # # def quit(self): # self.app.stop() class App_qt(App_base): """ Common functionality for pyqt and pyside """ def __init__(self): import types # Try importing qt QtGui, QtCore = self.importCoreAndGui() self._QtGui, self._QtCore = QtGui, QtCore # Store the real application class if not hasattr(QtGui, 'real_QApplication'): QtGui.real_QApplication = QtGui.QApplication class QApplication_hijacked(QtGui.QApplication): """ QApplication_hijacked(*args, **kwargs) Hijacked QApplication class. This class has a __new__() method that always returns the global application instance, i.e. QtGui.qApp. The QtGui.qApp instance is an instance of the original QtGui.QApplication, but with its __init__() and exec_() methods replaced. You can subclass this class; the global application instance will be given the methods and attributes so it will behave like the subclass. """ def __new__(cls, *args, **kwargs): # Get the singleton application instance theApp = QApplication_hijacked.instance() # Instantiate an original QApplication instance if we need to if theApp is None: theApp = QtGui.real_QApplication(*args, **kwargs) QtGui.qApp = theApp # Add attributes of cls to the instance to make it # behave as if it were an instance of that class for key in dir(cls): # Skip all magic methods except __init__ if key.startswith('__') and key != '__init__': continue # Skip attributes that we already have val = getattr(cls, key) if hasattr(theApp.__class__, key): if hash(val) == hash(getattr(theApp.__class__, key)): continue # Make method? if hasattr(val, '__call__'): if hasattr(val, 'im_func'): val = val.im_func # Python 2.x val = types.MethodType(val, theApp.__class__) # Set attribute on app instance (not the class!) try: setattr(theApp, key, val) except Exception: pass # tough luck # Call init function (in case the user overloaded it) theApp.__init__(*args, **kwargs) # Return global app object (modified to the users needs) return theApp def __init__(self, *args, **kwargs): pass def exec_(self, *args, **kwargs): """ This function does nothing, except printing a warning message. The point is that a Qt App can crash quite hard if an object goes out of scope, and the error is not obvious. """ printDirect(mainloopWarning_qt+'\n') # Store local namespaces (scopes) of any functions that # precede this call. It might have a widget or application # object that should not be deleted ... import inspect, __main__ for caller in inspect.stack()[1:]: frame, name = caller[0], caller[3] if name.startswith('<'): # most probably "" break else: __main__.__dict__[name+'_locals'] = frame.f_locals # Tell interpreter to ignore any system exits sys._iepInterpreter.ignore_sys_exit = True # But re-enable it as soon as *this event* is processed def reEnableSysExit(): sys._iepInterpreter.ignore_sys_exit = False self._reEnableSysExitTimer = timer = QtCore.QTimer() timer.singleShot(0, reEnableSysExit) def quit(self, *args, **kwargs): """ Do not quit if Qt app quits. """ pass # Instantiate application object self.app = QApplication_hijacked(['']) # Keep it alive even if all windows are closed self.app.setQuitOnLastWindowClosed(False) # Replace app class QtGui.QApplication = QApplication_hijacked # Notify that we integrated the event loop self.app._in_event_loop = 'IEP' QtGui._in_event_loop = 'IEP' # Use sys.excepthook to catch keyboard interrupts that occur # in event handlers. We also want to call the curren hook self._original_excepthook = sys.excepthook sys.excepthook = self._excepthook def _excepthook(self, type, value, traceback): if issubclass(type, KeyboardInterrupt): self._keyboard_interrupt() elif self._original_excepthook is not None: return self._original_excepthook(type, value, traceback) def process_events(self): self.app.flush() self.app.processEvents() def run(self, repl_callback, sleeptime=None): # Create timer timer = self._timer = self._QtCore.QTimer() timer.setSingleShot(False) timer.setInterval(0.05*1000) # ms timer.timeout.connect(repl_callback) timer.start() # Enter Qt mainloop #self._QtGui.real_QApplication.exec_(self.app) self._QtGui.real_QApplication.exec_() def quit(self): # A nicer way to quit self._QtGui.real_QApplication.quit() class App_pyqt4(App_qt): """ Hijack the PyQt4 mainloop. """ def importCoreAndGui(self): # Try importing qt import PyQt4 from PyQt4 import QtGui, QtCore return QtGui, QtCore class App_pyside(App_qt): """ Hijack the PySide mainloop. """ def importCoreAndGui(self): # Try importing qt import PySide from PySide import QtGui, QtCore return QtGui, QtCore class App_wx(App_base): """ Hijack the wxWidgets mainloop. """ def __init__(self): # Try importing try: import wx except ImportError: # For very old versions of WX import wxPython as wx # Create dummy mainloop to replace original mainloop def dummy_mainloop(*args, **kw): printDirect(mainloopWarning) # Depending on version, replace mainloop ver = wx.__version__ orig_mainloop = None if ver[:3] >= '2.5': if hasattr(wx, '_core_'): core = getattr(wx, '_core_') elif hasattr(wx, '_core'): core = getattr(wx, '_core') else: raise ImportError orig_mainloop = core.PyApp_MainLoop core.PyApp_MainLoop = dummy_mainloop elif ver[:3] == '2.4': orig_mainloop = wx.wxc.wxPyApp_MainLoop wx.wxc.wxPyApp_MainLoop = dummy_mainloop else: # Unable to find either wxPython version 2.4 or >= 2.5." raise ImportError # Store package wx self.wx = wx # Get and store the app instance to process events app = wx.GetApp() if app is None: app = wx.App(False) self.app = app # Notify that we integrated the event loop self.app._in_event_loop = 'IEP' wx._in_event_loop = 'IEP' def process_events(self): wx = self.wx # This bit is really needed old = wx.EventLoop.GetActive() eventLoop = wx.EventLoop() wx.EventLoop.SetActive(eventLoop) while eventLoop.Pending(): eventLoop.Dispatch() # Process and reset self.app.ProcessIdle() # otherwise frames do not close wx.EventLoop.SetActive(old) class App_gtk(App_base): """ Modifies pyGTK's mainloop with a dummy so user code does not block IPython. processing events is done using the module' main_iteration function. """ def __init__(self): # Try importing gtk import gtk # Replace mainloop with a dummy def dummy_mainloop(*args, **kwargs): printDirect(mainloopWarning) gtk.mainloop = dummy_mainloop gtk.main = dummy_mainloop # Replace main_quit with a dummy too def dummy_quit(*args, **kwargs): pass gtk.main_quit = dummy_quit gtk.mainquit = dummy_quit # Make sure main_iteration exists even on older versions if not hasattr(gtk, 'main_iteration'): gtk.main_iteration = gtk.mainiteration # Store 'app object' self.app = gtk # Notify that we integrated the event loop self.app._in_event_loop = 'IEP' def process_events(self): gtk = self.app while gtk.events_pending(): gtk.main_iteration(False) iep-3.7/iep/iepkernel/debug.py0000664000175000017500000004047012346060017016553 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import os import sys import time import bdb import traceback class Debugger(bdb.Bdb): """ Debugger for the IEP kernel, based on bdb. """ def __init__(self): self._wait_for_mainpyfile = False # from pdb, do we need this? bdb.Bdb.__init__(self) self._debugmode = 0 # 0: no debug, 1: postmortem, 2: full debug def interaction(self, frame, traceback=None, pm=False): """ Enter an interaction-loop for debugging. No GUI events are processed here. We leave this event loop at some point, after which the conrol flow will proceed. This is called to enter debug-mode at a breakpoint, or to enter post-mortem debugging. """ interpreter = sys._iepInterpreter # Collect frames frames = [] while frame: if frame is self.botframe: break co_filename = frame.f_code.co_filename if 'iepkernel' in co_filename: break # IEP kernel if 'interactiveshell.py' in co_filename: break # IPython kernel frames.insert(0, frame) frame = frame.f_back # Tell interpreter our stack if frames: interpreter._dbFrames = frames interpreter._dbFrameIndex = len(interpreter._dbFrames) frame = interpreter._dbFrames[interpreter._dbFrameIndex-1] interpreter._dbFrameName = frame.f_code.co_name interpreter.locals = frame.f_locals interpreter.globals = frame.f_globals # Let the IDE know ( # "self._debugmode = 1 if pm else 2" does not work not on py2.4) if pm: self._debugmode = 1 else: self._debugmode = 2 self.writestatus() # Enter interact loop. We may hang in here for a while ... self._interacting = True while self._interacting: time.sleep(0.05) interpreter.process_commands() pe = os.getenv('IEP_PROCESS_EVENTS_WHILE_DEBUGGING', '').lower() if pe in ('1', 'true', 'yes'): interpreter.guiApp.process_events() # Reset self._debugmode = 0 interpreter.locals = interpreter._main_locals interpreter.globals = None interpreter._dbFrames = [] self.writestatus() def stopinteraction(self): """ Stop the interaction loop. """ self._interacting = False def set_on(self): """ To turn debugging on right before executing code. """ # Reset and set bottom frame self.reset() self.botframe = sys._getframe().f_back # Don't stop except at breakpoints or when finished # We do: self._set_stopinfo(self.botframe, None, -1) from set_continue # But write it all out because py2.4 does not have _set_stopinfo self.stopframe = self.botframe self.returnframe = None self.quitting = False self.stoplineno = -1 # Set tracing or not if self.breaks: sys.settrace(self.trace_dispatch) else: sys.settrace(None) def message(self, msg): """ Alias for interpreter.write(), but appends a newline. Writes to stderr. """ sys._iepInterpreter.write(msg+'\n') def error(self, msg): """ method used in some code that we copied from pdb. """ raise self.message('*** '+msg) def writestatus(self): """ Write the debug status so the IDE can take action. """ interpreter = sys._iepInterpreter # Collect frames info frames = [] for f in interpreter._dbFrames: # Get fname and lineno, and correct if required fname, lineno = f.f_code.co_filename, f.f_lineno fname, lineno = interpreter.correctfilenameandlineno(fname, lineno) if not fname.startswith('<'): fname2 = os.path.abspath(fname) if os.path.isfile(fname2): fname = fname2 frames.append((fname, lineno, f.f_code.co_name)) # Build string #text = 'File "%s", line %i, in %s' % ( # fname, lineno, f.f_code.co_name) #frames.append(text) # Send info object state = { 'index': interpreter._dbFrameIndex, 'frames': frames, 'debugmode': self._debugmode} interpreter.context._stat_debug.send(state) ## Stuff that we need to overload # Overload set_break to also allow non-existing filenames like " len(interpreter._dbFrames): interpreter._dbFrameIndex = len(interpreter._dbFrames) # Set name and locals frame = interpreter._dbFrames[interpreter._dbFrameIndex-1] interpreter._dbFrameName = frame.f_code.co_name interpreter.locals = frame.f_locals interpreter.globals = frame.f_globals self.writestatus() def do_up(self, arg): """ Go one frame up the stack. """ interpreter = sys._iepInterpreter if not self._debugmode: self.message("Not in debug mode.") else: # Decrease frame index interpreter._dbFrameIndex -= 1 if interpreter._dbFrameIndex < 1: interpreter._dbFrameIndex = 1 # Set name and locals frame = interpreter._dbFrames[interpreter._dbFrameIndex-1] interpreter._dbFrameName = frame.f_code.co_name interpreter.locals = frame.f_locals interpreter.globals = frame.f_globals self.writestatus() def do_down(self, arg): """ Go one frame down the stack. """ interpreter = sys._iepInterpreter if not self._debugmode: self.message("Not in debug mode.") else: # Increase frame index interpreter._dbFrameIndex += 1 if interpreter._dbFrameIndex > len(interpreter._dbFrames): interpreter._dbFrameIndex = len(interpreter._dbFrames) # Set name and locals frame = interpreter._dbFrames[interpreter._dbFrameIndex-1] interpreter._dbFrameName = frame.f_code.co_name interpreter.locals = frame.f_locals interpreter.globals = frame.f_globals self.writestatus() def do_stop(self, arg): """ Stop debugging, terminate process execution. """ # Can be done both in postmortem and normal debugging interpreter = sys._iepInterpreter if not self._debugmode: self.message("Not in debug mode.") else: self.set_quit() self.stopinteraction() def do_where(self, arg): """ Print the stack trace and indicate the current frame. """ interpreter = sys._iepInterpreter if not self._debugmode: self.message("Not in debug mode.") else: lines = [] for i in range(len(interpreter._dbFrames)): frameIndex = i+1 f = interpreter._dbFrames[i] # Get fname and lineno, and correct if required fname, lineno = f.f_code.co_filename, f.f_lineno fname, lineno = interpreter.correctfilenameandlineno(fname, lineno) # Build string text = 'File "%s", line %i, in %s' % ( fname, lineno, f.f_code.co_name) if frameIndex == interpreter._dbFrameIndex: lines.append('-> %i: %s'%(frameIndex, text)) else: lines.append(' %i: %s'%(frameIndex, text)) lines.append('') sys.stdout.write('\n'.join(lines)) def do_continue(self, arg): """ Continue the program execution. """ interpreter = sys._iepInterpreter if self._debugmode == 0: self.message("Not in debug mode.") elif self._debugmode == 1: self.message("Cannot use 'continue' in postmortem debug mode.") else: self.set_continue() self.stopinteraction() def do_step(self, arg): """ Execute the current line, stop ASAP (step into). """ interpreter = sys._iepInterpreter if self._debugmode == 0: self.message("Not in debug mode.") elif self._debugmode == 1: self.message("Cannot use 'step' in postmortem debug mode.") else: self.set_step() self.stopinteraction() def do_next(self, arg): """ Continue execution until the next line (step over). """ interpreter = sys._iepInterpreter if self._debugmode == 0: self.message("Not in debug mode.") elif self._debugmode == 1: self.message("Cannot use 'next' in postmortem debug mode.") else: frame = interpreter._dbFrames[-1] self.set_next(frame) self.stopinteraction() def do_return(self, arg): """ Continue execution until the current function returns (step out). """ interpreter = sys._iepInterpreter if self._debugmode == 0: self.message("Not in debug mode.") elif self._debugmode == 1: self.message("Cannot use 'return' in postmortem debug mode.") else: frame = interpreter._dbFrames[-1] self.set_return(frame) self.stopinteraction() def do_events(self, arg): """ Process GUI events for the integrated GUI toolkit. """ interpreter = sys._iepInterpreter interpreter.guiApp.process_events() iep-3.7/iep/iepkernel/guisupport.py0000664000175000017500000001377112271043444017714 0ustar almaralmar00000000000000#!/usr/bin/env python # coding: utf-8 """ Support for creating GUI apps and starting event loops. IPython's GUI integration allows interative plotting and GUI usage in IPython session. IPython has two different types of GUI integration: 1. The terminal based IPython supports GUI event loops through Python's PyOS_InputHook. PyOS_InputHook is a hook that Python calls periodically whenever raw_input is waiting for a user to type code. We implement GUI support in the terminal by setting PyOS_InputHook to a function that iterates the event loop for a short while. It is important to note that in this situation, the real GUI event loop is NOT run in the normal manner, so you can't use the normal means to detect that it is running. 2. In the two process IPython kernel/frontend, the GUI event loop is run in the kernel. In this case, the event loop is run in the normal manner by calling the function or method of the GUI toolkit that starts the event loop. In addition to starting the GUI event loops in one of these two ways, IPython will *always* create an appropriate GUI application object when GUi integration is enabled. If you want your GUI apps to run in IPython you need to do two things: 1. Test to see if there is already an existing main application object. If there is, you should use it. If there is not an existing application object you should create one. 2. Test to see if the GUI event loop is running. If it is, you should not start it. If the event loop is not running you may start it. This module contains functions for each toolkit that perform these things in a consistent manner. Because of how PyOS_InputHook runs the event loop you cannot detect if the event loop is running using the traditional calls (such as ``wx.GetApp.IsMainLoopRunning()`` in wxPython). If PyOS_InputHook is set These methods will return a false negative. That is, they will say the event loop is not running, when is actually is. To work around this limitation we proposed the following informal protocol: * Whenever someone starts the event loop, they *must* set the ``_in_event_loop`` attribute of the main application object to ``True``. This should be done regardless of how the event loop is actually run. * Whenever someone stops the event loop, they *must* set the ``_in_event_loop`` attribute of the main application object to ``False``. * If you want to see if the event loop is running, you *must* use ``hasattr`` to see if ``_in_event_loop`` attribute has been set. If it is set, you *must* use its value. If it has not been set, you can query the toolkit in the normal manner. * If you want GUI support and no one else has created an application or started the event loop you *must* do this. We don't want projects to attempt to defer these things to someone else if they themselves need it. The functions below implement this logic for each GUI toolkit. If you need to create custom application subclasses, you will likely have to modify this code for your own purposes. This code can be copied into your own project so you don't have to depend on IPython. """ #----------------------------------------------------------------------------- # Copyright (C) 2008-2010 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # Imports #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # wx #----------------------------------------------------------------------------- def get_app_wx(*args, **kwargs): """Create a new wx app or return an exiting one.""" import wx app = wx.GetApp() if app is None: if 'redirect' not in kwargs: kwargs['redirect'] = False # app = wx.PySimpleApp(*args, **kwargs) Deprecated! app = wx.App(*args, **kwargs) return app def is_event_loop_running_wx(app=None): """Is the wx event loop running.""" if app is None: app = get_app_wx() if hasattr(app, '_in_event_loop'): return app._in_event_loop else: return app.IsMainLoopRunning() def start_event_loop_wx(app=None): """Start the wx event loop in a consistent manner.""" if app is None: app = get_app_wx() if not is_event_loop_running_wx(app): app._in_event_loop = True app.MainLoop() app._in_event_loop = False else: app._in_event_loop = True #----------------------------------------------------------------------------- # qt4 #----------------------------------------------------------------------------- def get_app_qt4(*args, **kwargs): """Create a new qt4 app or return an existing one.""" from PyQt4 import QtGui app = QtGui.QApplication.instance() if app is None: if not args: args = ([''],) app = QtGui.QApplication(*args, **kwargs) return app def is_event_loop_running_qt4(app=None): """Is the qt4 event loop running.""" if app is None: app = get_app_qt4(['']) if hasattr(app, '_in_event_loop'): return app._in_event_loop else: # Does qt4 provide a other way to detect this? return False def start_event_loop_qt4(app=None): """Start the qt4 event loop in a consistent manner.""" if app is None: app = get_app_qt4(['']) if not is_event_loop_running_qt4(app): app._in_event_loop = True app.exec_() app._in_event_loop = False else: app._in_event_loop = True #----------------------------------------------------------------------------- # Tk #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # gtk #----------------------------------------------------------------------------- iep-3.7/iep/util/0000775000175000017500000000000012573320440014106 5ustar almaralmar00000000000000iep-3.7/iep/util/_locale.py0000664000175000017500000002257112572264214016072 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ iep.util._locale Module for locale stuff like language and translations. """ import os, sys, time from pyzolib.qt import QtCore, QtGui import iep # Define supported languages. The key defines the name as shown to the # user. The value is passed to create a Locale object. From the local # object we obtain the name for the .tr file. LANGUAGES = { 'English (US)': QtCore.QLocale.C, # == (QtCore.QLocale.English, QtCore.QLocale.UnitedStates), #'English (UK)': (QtCore.QLocale.English, QtCore.QLocale.UnitedKingdom), 'Dutch': QtCore.QLocale.Dutch, 'Spanish': QtCore.QLocale.Spanish, 'Catalan': QtCore.QLocale.Catalan, 'French': QtCore.QLocale.French, 'Portuguese': QtCore.QLocale.Portuguese, 'German': QtCore.QLocale.German, 'Russian': QtCore.QLocale.Russian, # not updated for 3.4 'Portuguese (BR)': (QtCore.QLocale.Portuguese, QtCore.QLocale.Brazil), # Languages for which the is a .tr file, but no translations available yet: # 'Simplified Chinese': QtCore.QLocale.Chinese, # 'Slovak': QtCore.QLocale.Slovak, } LANGUAGE_SYNONYMS = { None: 'English (US)', '': 'English (US)', 'English': 'English (US)'} def getLocale(languageName): """ getLocale(languageName) Get the QtCore.QLocale object for the given language (as a string). """ # Apply synonyms languageName = LANGUAGE_SYNONYMS.get(languageName, languageName) # Select language in qt terms qtLanguage = LANGUAGES.get(languageName, None) if qtLanguage is None: raise ValueError('Unknown language') # Return locale if isinstance(qtLanguage, tuple): return QtCore.QLocale(*qtLanguage) else: return QtCore.QLocale(qtLanguage) def setLanguage(languageName): """ setLanguage(languageName) Set the language for the app. Loads qt and iep translations. Returns the QLocale instance to pass to the main widget. """ # Get locale locale = getLocale(languageName) # Get paths were language files are qtTransPath = str(QtCore.QLibraryInfo.location( QtCore.QLibraryInfo.TranslationsPath)) iepTransPath = os.path.join(iep.iepDir, 'resources', 'translations') # Get possible names for language files # (because Qt's .tr files may not have the language component.) localeName1 = locale.name() localeName2 = localeName1.split('_')[0] # Uninstall translators if not hasattr(QtCore, '_translators'): QtCore._translators = [] for trans in QtCore._translators: QtGui.QApplication.removeTranslator(trans) # The default language if localeName1 == 'C': return locale # Set Qt translations # Note that the translator instances must be stored # Note that the load() method is very forgiving with the file name for what, where in [('qt', qtTransPath),('iep', iepTransPath)]: trans = QtCore.QTranslator() # Try loading both names for localeName in [localeName1, localeName2]: success = trans.load(what + '_' + localeName + '.tr', where) if success: QtGui.QApplication.installTranslator(trans) QtCore._translators.append(trans) print('loading %s %s: ok' % (what, languageName)) break else: print('loading %s %s: failed' % (what, languageName)) # Done return locale class Translation(str): """ Derives from str class. The translate function returns an instance of this class and assigns extra atrributes: * original: the original text passed to the translation * tt: the tooltip text * key: the original text without tooltip (used by menus as a key) We adopt a simple system to include tooltip text in the same translation as the label text. By including ":::" in the text, the text after that identifier is considered the tooltip. The text returned by the translate function is always the string without tooltip, but the text object has an attribute "tt" that stores the tooltip text. In this way, if you do not use this feature or do not know about this feature, everything keeps working as expected. """ pass def _splitMainAndTt(s): if ':::' in s: parts = s.split(':::', 1) return parts[0].rstrip(), parts[1].lstrip() else: return s, '' def translate(context, text, disambiguation=None): """ translate(context, text, disambiguation=None) The translate function used throughout IEP. """ # Get translation and split tooltip newtext = QtCore.QCoreApplication.translate(context, text, disambiguation) s, tt = _splitMainAndTt(newtext) # Create translation object (string with extra attributes) translation = Translation(s) translation.original = text translation.tt = tt translation.key = _splitMainAndTt(text)[0].strip() return translation ## Development tools import subprocess LHELP = """ Language help - info for translaters For translating, you will need a set of working Qt language tools: pyside-lupdate, linguist, lrelease. On Windows, these should come with your PySide installation. On (Ubuntu) Linux, you can install these with 'sudo apt-get install pyside-tools qt4-dev-tools'. You also need to run IEP from source as checked out from the repo (e.g. by running ieplauncher.py). To create a new language: * the file 'iep/util/locale.py' should be edited to add the language to the LANGUAGES dict * run 'linguist(your_lang)', this will raise an erro, but it will show the name of the .tr file * the file 'iep/iep.pro' should be edited to include the new .tr file * run 'lupdate()' to create the .tr file * run 'linguist(your_lang)' again to initialize the .tr file. To update a language: * run 'lupdate()' * run 'linguist(your_lang)' * make all the translations and save * run lrelease() and restart IEP to see translations * repeat if necessary """ def lhelp(): """ lhelp() Print help text on using the language tools. """ print(LHELP) def linguist(languageName): """ linguist(languageName) Open linguist with the language file as specified by lang. The languageName can be one of the fields as visible in the language list in the menu. This function is intended for translators. """ # Get locale locale = getLocale(languageName) # Get file to open fname = 'iep_{}.tr'.format(locale.name()) filename = os.path.join(iep.iepDir, 'resources', 'translations', fname) if not os.path.isfile(filename): raise ValueError('Could not find {}'.format(filename)) # Get Command for linguist pysideDir = os.path.abspath(os.path.dirname(iep.QtCore.__file__)) ISWIN = sys.platform.startswith('win') exe_ = 'linguist' + '.exe' * ISWIN exe = os.path.join(pysideDir, exe_) if not os.path.isfile(exe): exe = exe_ # Spawn process return subprocess.Popen([exe , filename]) def lupdate(): """ For developers. From iep.pro create the .tr files """ # Get file to open fname = 'iep.pro' filename = os.path.realpath(os.path.join(iep.iepDir, '..', fname)) if not os.path.isfile(filename): raise ValueError('Could not find {}. This function must run from the source repo.'.format(fname)) # Get Command for python lupdate pysideDir = os.path.abspath(os.path.dirname(iep.QtCore.__file__)) ISWIN = sys.platform.startswith('win') exe_ = 'pyside-lupdate' + '.exe' * ISWIN exe = os.path.join(pysideDir, exe_) if not os.path.isfile(exe): exe = exe_ # Spawn process cmd = [exe, '-noobsolete', '-verbose', filename] p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while p.poll() is None: time.sleep(0.1) output = p.stdout.read().decode('utf-8') if p.returncode: raise RuntimeError('lupdate failed (%i): %s' % (p.returncode, output)) else: print(output) def lrelease(): """ For developers. From iep.pro and the .tr files, create the .qm files. """ # Get file to open fname = 'iep.pro' filename = os.path.realpath(os.path.join(iep.iepDir, '..', fname)) if not os.path.isfile(filename): raise ValueError('Could not find {}. This function must run from the source repo.'.format(fname)) # Get Command for lrelease pysideDir = os.path.abspath(os.path.dirname(iep.QtCore.__file__)) ISWIN = sys.platform.startswith('win') exe_ = 'lrelease' + '.exe' * ISWIN exe = os.path.join(pysideDir, exe_) if not os.path.isfile(exe): exe = exe_ # Spawn process cmd = [exe, filename] p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) while p.poll() is None: time.sleep(0.1) output = p.stdout.read().decode('utf-8') if p.returncode: raise RuntimeError('lrelease failed (%i): %s' % (p.returncode, output)) else: print(output) if __name__ == '__main__': # Print names of translator files print('Language data files:') for key in LANGUAGES: s = '{}: {}'.format(key, getLocale(key).name()+'.tr') print(s) iep-3.7/iep/util/bootstrapconda.py0000664000175000017500000004107112573275370017520 0ustar almaralmar00000000000000""" Tools to install miniconda from IEP and register that env in IEP's shell config. """ import os import sys import stat import time import struct import shutil import threading import subprocess import urllib.request from pyzolib.qt import QtCore, QtGui import iep base_url = 'http://repo.continuum.io/miniconda/' links = {'win32': 'Miniconda3-latest-Windows-x86.exe', 'win64': 'Miniconda3-latest-Windows-x86_64.exe', 'osx64': 'Miniconda3-latest-MacOSX-x86_64.sh', 'linux32': 'Miniconda3-latest-Linux-x86.sh', 'linux64': 'Miniconda3-latest-Linux-x86_64.sh', 'arm': 'Miniconda3-latest-Linux-armv7l.sh', # raspberry pi } # Get where we want to put miniconda installer miniconda_path = os.path.join(iep.appDataDir, 'miniconda') miniconda_path += '.exe' if sys.platform.startswith('win') else '.sh' # Get default dir where we want the env #default_conda_dir = os.path.join(iep.appDataDir, 'conda_root') default_conda_dir = 'C:\\miniconda3' if sys.platform.startswith('win') else os.path.expanduser('~/miniconda3') def check_for_conda_env(parent=None): """ Check if it is reasonable to ask to install a conda env. If users says yes, do it. If user says no, don't, and remember. """ # Interested previously? if getattr(iep.config.state, 'did_not_want_conda_env', False): print('User has previously indicated to have no interest in a conda env') return # Needed? if iep.config.shellConfigs2: exe = iep.config.shellConfigs2[0]['exe'] r = '' try: r = subprocess.check_output([exe, '-m', 'conda', 'info'], shell=sys.platform.startswith('win')) r = r.decode() except Exception: pass # no Python or no conda if r and 'is foreign system : False' in r: print('First shell config looks like a conda env.') return # Ask if interested now? d = AskToInstallConda(parent) d.exec_() if not d.result(): iep.config.state.did_not_want_conda_env = True # Mark for next time return # Launch installer d = Installer(parent) d.exec_() class AskToInstallConda(QtGui.QDialog): def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setWindowTitle('Install a conda env?') self.setModal(True) text = 'IEP is only an editor. To execute code, you need a Python environment.\n\n' text += 'Do you want IEP to install a Python environment (miniconda)?\n' text += 'If not, you must arrange for a Python interpreter yourself' if not sys.platform.startswith('win'): text += ' or use the system Python' text += '.' text += '\n(You can always launch the installer from the shell menu.)' self._label = QtGui.QLabel(text, self) self._no = QtGui.QPushButton("No thanks (dont ask again)") self._yes = QtGui.QPushButton("Yes, please install Python!") self._no.clicked.connect(self.reject) self._yes.clicked.connect(self.accept) vbox = QtGui.QVBoxLayout(self) hbox = QtGui.QHBoxLayout() self.setLayout(vbox) vbox.addWidget(self._label, 1) vbox.addLayout(hbox, 0) hbox.addWidget(self._no, 2) hbox.addWidget(self._yes, 2) self._yes.setDefault(1) class Installer(QtGui.QDialog): lineFromStdOut = QtCore.Signal(str) def __init__(self, parent=None): QtGui.QDialog.__init__(self, parent) self.setWindowTitle('Install miniconda') self.setModal(True) self.resize(500, 500) text = 'This will download and install miniconda on your computer.' self._label = QtGui.QLabel(text, self) self._scipystack = QtGui.QCheckBox('Also install scientific packages', self) self._scipystack.setChecked(True) self._path = QtGui.QLineEdit(default_conda_dir, self) self._progress = QtGui.QProgressBar(self) self._outputLine = QtGui.QLabel(self) self._output = QtGui.QPlainTextEdit(self) self._output.setReadOnly(True) self._button = QtGui.QPushButton('Install', self) self._outputLine.setSizePolicy(QtGui.QSizePolicy.Ignored, QtGui.QSizePolicy.Fixed) vbox = QtGui.QVBoxLayout(self) self.setLayout(vbox) vbox.addWidget(self._label, 0) vbox.addWidget(self._path, 0) vbox.addWidget(self._scipystack, 0) vbox.addWidget(self._progress, 0) vbox.addWidget(self._outputLine, 0) vbox.addWidget(self._output, 1) vbox.addWidget(self._button, 0) self._button.clicked.connect(self.go) self.addOutput('Waiting to start installation.\n') self._progress.setVisible(False) self.lineFromStdOut.connect(self.setStatus) def setStatus(self, line): self._outputLine.setText(line) def addOutput(self, text): #self._output.setPlainText(self._output.toPlainText() + '\n' + text) cursor = self._output.textCursor() cursor.movePosition(cursor.End, cursor.MoveAnchor) cursor.insertText(text) cursor.movePosition(cursor.End, cursor.MoveAnchor) self._output.setTextCursor(cursor) self._output.ensureCursorVisible() def addStatus(self, line): self.addOutput('\n' + line) self.setStatus(line) def go(self): # Check if we can install try: self._conda_dir = self._path.text() if not os.path.isabs(self._conda_dir): raise ValueError('Given installation path must be absolute.') if os.path.exists(self._conda_dir): raise ValueError('The given installation path already exists.') except Exception as err: self.addOutput('\nCould not install:\n' + str(err)) return ok = False try: # Disable user input, get ready for installation self._progress.setVisible(True) self._button.clicked.disconnect() self._button.setEnabled(False) self._scipystack.setEnabled(False) self._path.setEnabled(False) if not os.path.exists(self._conda_dir): self.addStatus('Downloading installer ... ') self._progress.setMaximum(100) self.download() self.addStatus('Done downloading installer.') self.make_done() self.addStatus('Installing (this can take a minute) ... ') self._progress.setMaximum(0) ret = self.install() self.addStatus(('Failed' if ret else 'Done') + ' installing.') self.make_done() self.post_install() if self._scipystack.isChecked(): self.addStatus('Installing scientific packages ... ') self._progress.setMaximum(0) ret = self.install_scipy() self.addStatus('Done installing scientific packages') self.make_done() self.addStatus('Verifying ... ') self._progress.setMaximum(100) ret = self.verify() if ret: self.addOutput('Error\n' + ret) self.addStatus('Verification Failed!') else: self.addOutput('Done verifying') self.addStatus('Ready to go!') self.make_done() ok = True except Exception as err: self.addStatus('Installation failed ...') self.addOutput('\n\nException!\n' + str(err)) if not ok: self.addOutput('\n\nWe recommend installing miniconda or anaconda, ') self.addOutput('and making IEP aware if it via the shell configuration.') else: self.addOutput('\n\nYou can install additional packages by running "conda install" in the shell.') # Wrap up, allow user to exit self._progress.hide() self._button.setEnabled(True) self._button.setText('Close') self._button.clicked.connect(self.close) def make_done(self): self._progress.setMaximum(100) self._progress.setValue(100) etime = time.time() + 0.2 while time.time() < etime: time.sleep(0.01) QtGui.qApp.processEvents() def download(self): # Installer already downloaded? if os.path.isfile(miniconda_path): self.addOutput('Already downloaded.') return # os.remove(miniconda_path) # Get url key key = '' if sys.platform.startswith('win'): key = 'win' elif sys.platform.startswith('darwin'): key = 'osx' elif sys.platform.startswith('linux'): key = 'linux' key += '64' if is_64bit() else '32' # Get url if key not in links: raise RuntimeError('Cannot download miniconda for this platform.') url = base_url + links[key] _fetch_file(url, miniconda_path, self._progress) def install(self): dest = self._conda_dir # Clear dir assert not os.path.isdir(dest), 'Miniconda dir already exists' assert ' ' not in dest, 'miniconda dest path must not contain spaces' if sys.platform.startswith('win'): return self._run_process([miniconda_path, '/S', '/D=%s' % dest]) else: os.chmod(miniconda_path, os.stat(miniconda_path).st_mode | stat.S_IEXEC) return self._run_process([miniconda_path, '-b', '-p', dest]) def post_install(self): exe = py_exe(self._conda_dir) # Add Pyzo channel cmd = [exe, '-m', 'conda', 'config', '--system', '--add', 'channels', 'pyzo'] subprocess.check_call(cmd, shell=sys.platform.startswith('win')) self.addStatus('Added Pyzo channel to conda env') # Add to IEP shell config first = None if iep.config.shellConfigs2 and iep.config.shellConfigs2[0]['exe'] == exe: pass else: s = iep.ssdf.new() s.name = 'Py3-conda' s.exe = exe s.gui='PyQt4' iep.config.shellConfigs2.insert(0, s) iep.saveConfig() self.addStatus('Prepended new env to IEP shell configs.') def install_scipy(self): packages = ['numpy', 'scipy', 'pandas', 'matplotlib', 'sympy', #'scikit-image', 'scikit-learn', 'visvis', 'pyopengl', 'imageio', 'tornado', 'pyqt', #'ipython', 'jupyter', #'requests', 'pygments','pytest', ] exe = py_exe(self._conda_dir) cmd = [exe, '-m', 'conda', 'install', '--yes'] + packages return self._run_process(cmd) def _run_process(self, cmd): """ Run command in a separate process, catch stdout, show lines in the output label. On fail, show all output in output text. """ p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=sys.platform.startswith('win')) catcher = StreamCatcher(p.stdout, self.lineFromStdOut) while p.poll() is None: time.sleep(0.01) QtGui.qApp.processEvents() catcher.join() if p.poll(): self.addOutput(catcher.output()) return p.poll() def verify(self): self._progress.setValue(1) if not os.path.isdir(self._conda_dir): return 'Conda dir not created.' self._progress.setValue(11) exe = py_exe(self._conda_dir) if not os.path.isfile(exe): return 'Conda dir does not have Python exe' self._progress.setValue(21) try: ver = subprocess.check_output([exe, '-c', 'import sys; print(sys.version)']) except Exception as err: return 'Error getting Python version: ' + str(err) self._progress.setValue(31) if ver.decode() < '3.4': return 'Expected Python version 3.4 or higher' self._progress.setValue(41) try: ver = subprocess.check_output([exe, '-c', 'import conda; print(conda.__version__)']) except Exception as err: return 'Error calling Python exe: ' + str(err) self._progress.setValue(51) if ver.decode() < '3.16': return 'Expected Conda version 3.16 or higher' # Smooth toward 100% for i in range(self._progress.value(), 100, 5): time.sleep(0.05) self._progress.setValue(i) QtGui.qApp.processEvents() def is_64bit(): """ Get whether the OS is 64 bit. On WIndows yields what it *really* is, not what the process is. """ if False:#sys.platform.startswith('win'): ARG, causes problems with subprocess if 'PROCESSOR_ARCHITEW6432' in os.environ: return True return os.environ['PROCESSOR_ARCHITECTURE'].endswith('64') else: return struct.calcsize('P') == 8 def py_exe(dir): if sys.platform.startswith('win'): return os.path.join(dir, 'python.exe') else: return os.path.join(dir, 'bin', 'python') def _chunk_read(response, local_file, chunk_size=1024, initial_size=0, progress=None): """Download a file chunk by chunk and show advancement """ # Adapted from NISL: # https://github.com/nisl/tutorial/blob/master/nisl/datasets.py bytes_so_far = initial_size # Returns only amount left to download when resuming, not the size of the # entire file total_size = int(response.headers['Content-Length'].strip()) total_size += initial_size if progress: progress.setMaximum(total_size) while True: QtGui.qApp.processEvents() chunk = response.read(chunk_size) bytes_so_far += len(chunk) if not chunk: sys.stderr.write('\n') break #_chunk_write(chunk, local_file, progress) progress.setValue(bytes_so_far) local_file.write(chunk) def _fetch_file(url, file_name, progress=None): """Load requested file, downloading it if needed or requested """ # Adapted from NISL: # https://github.com/nisl/tutorial/blob/master/nisl/datasets.py temp_file_name = file_name + ".part" local_file = None initial_size = 0 try: # Checking file size and displaying it alongside the download url response = urllib.request.urlopen(url, timeout=5.) file_size = int(response.headers['Content-Length'].strip()) # Downloading data (can be extended to resume if need be) local_file = open(temp_file_name, "wb") _chunk_read(response, local_file, initial_size=initial_size, progress=progress) # temp file must be closed prior to the move if not local_file.closed: local_file.close() shutil.move(temp_file_name, file_name) except Exception as e: raise RuntimeError('Error while fetching file %s.\n' 'Dataset fetching aborted (%s)' % (url, e)) finally: if local_file is not None: if not local_file.closed: local_file.close() class StreamCatcher(threading.Thread): def __init__(self, file, signal): self._file = file self._signal = signal self._lines = [] self._line = '' threading.Thread.__init__(self) self.setDaemon(True) # do not let this thread hold up Python shutdown self.start() def run(self): while True: time.sleep(0.0001) try: part = self._file.read(20) except ValueError: # pragma: no cover break if not part: break part = part.decode('utf-8', 'ignore') #print(part, end='') self._line += part.replace('\r', '\n') lines = [line for line in self._line.split('\n') if line] self._lines.extend(lines[:-1]) self._line = lines[-1] if self._lines: self._signal.emit(self._lines[-1]) self._lines.append(self._line) self._signal.emit(self._lines[-1]) def output(self): return '\n'.join(self._lines) if __name__ == '__main__': check_for_conda_env() iep-3.7/iep/util/__init__.py0000664000175000017500000000000012271043444016206 0ustar almaralmar00000000000000iep-3.7/iep/util/iepwizard.py0000664000175000017500000003412312572264214016466 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013, the IEP development team # # IEP is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ iepwizard module Implements a wizard to help new users get familiar with IEP. """ import os import re import iep from pyzolib.qt import QtCore, QtGui from iep import translate from iep.util._locale import LANGUAGES, LANGUAGE_SYNONYMS, setLanguage def retranslate(t): """ To allow retranslating after selecting the language. """ if hasattr(t, 'original'): return translate('wizard', t.original) else: return t class IEPWizard(QtGui.QWizard): def __init__(self, parent): QtGui.QWizard.__init__(self, parent) # Set some appearance stuff self.setMinimumSize(600, 500) self.setWindowTitle(translate('wizard', 'Getting started with IEP')) self.setWizardStyle(self.ModernStyle) self.setButtonText(self.CancelButton, 'Stop') # Set logo pm = QtGui.QPixmap() pm.load(os.path.join(iep.iepDir, 'resources', 'appicons', 'ieplogo48.png')) self.setPixmap(self.LogoPixmap, pm) # Define pages klasses = [ IntroWizardPage, TwocomponentsWizardPage, EditorWizardPage, ShellWizardPage1, ShellWizardPage2, RuncodeWizardPage1, RuncodeWizardPage2, ToolsWizardPage1, ToolsWizardPage2, FinalPage] # Create pages self._n = len(klasses) for i, klass in enumerate(klasses): self.addPage(klass(self, i)) def show(self, startPage=None): """ Show the wizard. If startPage is given, open the Wizard at that page. startPage can be an integer or a string that matches the classname of a page. """ QtGui.QWizard.show(self) # Check startpage if isinstance(startPage, int): pass elif isinstance(startPage, str): for i in range(self._n): page = self.page(i) if page.__class__.__name__.lower() == startPage.lower(): startPage = i break else: print('IEP wizard: Could not find start page: %r' % startPage) startPage = None elif startPage is not None: print('IEP wizard: invalid start page: %r' % startPage) startPage = None # Go to start page if startPage is not None: for i in range(startPage): self.next() class BaseIEPWizardPage(QtGui.QWizardPage): _prefix = translate('wizard', 'Step') _title = 'dummy title' _descriptions = [] _image_filename = '' def __init__(self, parent, i): QtGui.QWizardPage.__init__(self, parent) self._i = i # Create label for description self._text_label = QtGui.QLabel(self) self._text_label.setTextFormat(QtCore.Qt.RichText) self._text_label.setWordWrap(True) # Create label for image self._comicLabel = QtGui.QLabel(self) pm = QtGui.QPixmap() if 'logo' in self._image_filename: pm.load(os.path.join(iep.iepDir, 'resources', 'appicons', self._image_filename)) elif self._image_filename: pm.load(os.path.join(iep.iepDir, 'resources', 'images', self._image_filename)) self._comicLabel.setPixmap(pm) self._comicLabel.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) # Layout theLayout = QtGui.QVBoxLayout(self) self.setLayout(theLayout) # theLayout.addWidget(self._text_label) theLayout.addStretch() theLayout.addWidget(self._comicLabel) theLayout.addStretch() def initializePage(self): # Get prefix i = self._i n = self.wizard()._n - 2 # Dont count the first and last page prefix = '' if i and i <= n: prefix = retranslate(self._prefix) + ' %i/%i: ' % (i, n) # Set title self.setTitle(prefix + retranslate(self._title)) # Parse description # Two description units are separated with BR tags # Emphasis on words is set to italic tags. lines = [] descriptions = [retranslate(d).strip() for d in self._descriptions] for description in descriptions: for line in description.splitlines(): line = line.strip() line = re.sub(r'\*(.+?)\*', r'\1', line) lines.append(line) lines.append('

') lines = lines[:-1] # Set description self._text_label.setText('\n'.join(lines)) class IntroWizardPage(BaseIEPWizardPage): _title = translate('wizard', 'Welcome to the Interactive Editor for Python!') _image_filename = 'ieplogo128.png' _descriptions = [ translate('wizard', """This wizard helps you get familiarized with the workings of IEP."""), translate('wizard', """IEP is a cross-platform Python IDE focused on *interactivity* and *introspection*, which makes it very suitable for scientific computing. Its practical design is aimed at *simplicity* and *efficiency*."""), ] def __init__(self, parent, i): BaseIEPWizardPage.__init__(self, parent, i) # Create label and checkbox t1 = translate('wizard', "This wizard can be opened using 'Help > IEP wizard'") t2 = translate('wizard', "Show this wizard on startup") self._label_info = QtGui.QLabel(t1, self) self._check_show = QtGui.QCheckBox(t2, self) self._check_show.stateChanged.connect(self._setNewUser) # Create language switcher self._langLabel = QtGui.QLabel(translate('wizard', "Select language"), self) # self._langBox = QtGui.QComboBox(self) self._langBox.setEditable(False) # Fill index, theIndex = -1, -1 cur = iep.config.settings.language for lang in sorted(LANGUAGES): index += 1 self._langBox.addItem(lang) if lang == LANGUAGE_SYNONYMS.get(cur, cur): theIndex = index # Set current index if theIndex >= 0: self._langBox.setCurrentIndex(theIndex) # Bind signal self._langBox.activated.connect(self.onLanguageChange) # Init check state if iep.config.state.newUser: self._check_show.setCheckState(QtCore.Qt.Checked) # Create sublayout layout = QtGui.QHBoxLayout() layout.addWidget(self._langLabel, 0) layout.addWidget(self._langBox, 0) layout.addStretch(2) self.layout().addLayout(layout) # Add to layout self.layout().addSpacing(10) self.layout().addWidget(self._label_info) self.layout().addWidget(self._check_show) def _setNewUser(self, newUser): newUser = bool(newUser) self._label_info.setHidden(newUser) iep.config.state.newUser = newUser def onLanguageChange(self): languageName = self._langBox.currentText() if iep.config.settings.language == languageName: return # Save new language iep.config.settings.language = languageName setLanguage(iep.config.settings.language) # Notify user text = translate('wizard', """ The language has been changed for this wizard. IEP needs to restart for the change to take effect application-wide. """) m = QtGui.QMessageBox(self) m.setWindowTitle(translate("wizard", "Language changed")) m.setText(text) m.setIcon(m.Information) m.exec_() # Get props of current wizard geo = self.wizard().geometry() parent = self.wizard().parent() # Close ourself! self.wizard().close() # Start new one w = IEPWizard(parent) w.setGeometry(geo) w.show() class TwocomponentsWizardPage(BaseIEPWizardPage): _title = translate('wizard', 'IEP consists of two main components') _image_filename = 'iep_two_components.png' _descriptions = [ translate('wizard', "You can execute commands directly in the *shell*,"), translate('wizard', "or you can write code in the *editor* and execute that."), ] class EditorWizardPage(BaseIEPWizardPage): _title = translate('wizard', 'The editor is where you write your code') _image_filename = 'iep_editor.png' _descriptions = [ translate('wizard', """In the *editor*, each open file is represented as a tab. By right-clicking on a tab, files can be run, saved, closed, etc."""), translate('wizard', """The right mouse button also enables one to make a file the *main file* of a project. This file can be recognized by its star symbol, and it enables running the file more easily."""), ] class ShellWizardPage1(BaseIEPWizardPage): _title = translate('wizard', 'The shell is where your code gets executed') _image_filename = 'iep_shell1.png' _descriptions = [ translate('wizard', """When IEP starts, a default *shell* is created. You can add more shells that run simultaneously, and which may be of different Python versions."""), translate('wizard', """Shells run in a sub-process, such that when it is busy, IEP itself stays responsive, allowing you to keep coding and even run code in another shell."""), ] class ShellWizardPage2(BaseIEPWizardPage): _title = translate('wizard', 'Configuring shells') _image_filename = 'iep_shell2.png' _descriptions = [ translate('wizard', """IEP can integrate the event loop of five different *GUI toolkits*, thus enabling interactive plotting with e.g. Visvis or Matplotlib."""), translate('wizard', """Via 'Shell > Edit shell configurations', you can edit and add *shell configurations*. This allows you to for example select the initial directory, or use a custom Pythonpath."""), ] class RuncodeWizardPage1(BaseIEPWizardPage): _title = translate('wizard', 'Running code') _image_filename = 'iep_run1.png' _descriptions = [ translate('wizard', "IEP supports several ways to run source code in the editor. (see the 'Run' menu)."), translate('wizard', """*Run selection:* if there is no selected text, the current line is executed; if the selection is on a single line, the selection is evaluated; if the selection spans multiple lines, IEP will run the the (complete) selected lines."""), translate('wizard', "*Run cell:* a cell is everything between two lines starting with '##'."), translate('wizard', "*Run file:* run all the code in the current file."), translate('wizard', "*Run project main file:* run the code in the current project's main file."), ] class RuncodeWizardPage2(BaseIEPWizardPage): _title = translate('wizard', 'Interactive mode vs running as script') _image_filename = '' _descriptions = [ translate('wizard', """You can run the current file or the main file normally, or as a script. When run as script, the shell is restared to provide a clean environment. The shell is also initialized differently so that it closely resembles a normal script execution."""), translate('wizard', """In interactive mode, sys.path[0] is an empty string (i.e. the current dir), and sys.argv is set to ['']."""), translate('wizard', """In script mode, __file__ and sys.argv[0] are set to the scripts filename, sys.path[0] and the working dir are set to the directory containing the script."""), ] class ToolsWizardPage1(BaseIEPWizardPage): _title = translate('wizard', 'Tools for your convenience') _image_filename = 'iep_tools1.png' _descriptions = [ translate('wizard', """Via the *Tools menu*, one can select which tools to use. The tools can be positioned in any way you want, and can also be un-docked."""), translate('wizard', """Note that the tools system is designed such that it's easy to create your own tools. Look at the online wiki for more information, or use one of the existing tools as an example."""), ] class ToolsWizardPage2(BaseIEPWizardPage): _title = translate('wizard', 'Recommended tools') _image_filename = 'iep_tools2.png' _descriptions = [ translate('wizard', """We especially recommend the following tools:"""), translate('wizard', """The *Source structure tool* gives an outline of the source code."""), translate('wizard', """The *File browser tool* helps keep an overview of all files in a directory. To manage your projects, click the star icon."""), ] class FinalPage(BaseIEPWizardPage): _title = translate('wizard', 'Get coding!') _image_filename = 'ieplogo128.png' _descriptions = [ translate('wizard', """This concludes the IEP wizard. Now, get coding and have fun!"""), ] # def smooth_images(): # """ This was used to create the images from their raw versions. # """ # # import os # import visvis as vv # import scipy as sp # import scipy.ndimage # for fname in os.listdir('images'): # im = vv.imread(os.path.join('images', fname)) # for i in range(im.shape[2]): # im[:,:,i] = sp.ndimage.gaussian_filter(im[:,:,i], 0.7) # #fname = fname.replace('.png', '.jpg') # print(fname) # vv.imwrite(fname, im[::2,::2,:]) if __name__ == '__main__': w = IEPWizard(None) w.show() iep-3.7/iep/yoton/0000775000175000017500000000000012573320440014301 5ustar almaralmar00000000000000iep-3.7/iep/yoton/connection_tcp.py0000664000175000017500000006311112271043447017666 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import os import sys import time import socket import threading import yoton from yoton.misc import basestring, bytes, str from yoton.misc import Property, getErrorMsg, UID from yoton.misc import PackageQueue, TinyPackageQueue from yoton.core import Package, PACKAGE_HEARTBEAT, PACKAGE_CLOSE, EINTR from yoton.core import can_send, can_recv, send_all, recv_all, HEADER_SIZE from yoton.connection import Connection, TIMEOUT_MIN from yoton.connection import STATUS_CLOSED, STATUS_WAITING, STATUS_HOSTING from yoton.connection import STATUS_CONNECTED, STATUS_CLOSING # Note that time.sleep(0) yields the current thread's timeslice to any # other >= priority thread in the process, but is otherwise equivalent 0 delay. # Reasons to stop the connection STOP_SOCKET_ERROR = "Socket error." # the error message is appended STOP_EOF = "Other end dropped the connection." STOP_HANDSHAKE_TIMEOUT = "Handshake timed out." STOP_HANDSHAKE_FAILED = "Handshake failed." STOP_HANDSHAKE_SELF = "Handshake failed (context cannot connect to self)." STOP_CLOSED_FROM_THERE = "Closed from other end." STOP_LOST_TRACK = "Lost track of the stream." STOP_THREAD_ERROR = "Error in io thread." # Use a relatively small buffer size, to keep the channels better in sync SOCKET_BUFFERS_SIZE = 10*1024 class TcpConnection(Connection): """ TcpConnection(context, name='') The TcpConnection class implements a connection between two contexts that are in differenr processes or on different machines connected via the internet. This class handles the low-level communication for the context. A ContextConnection instance wraps a single BSD socket for its communication, and uses TCP/IP as the underlying communication protocol. A persisten connection is used (the BSD sockets stay connected). This allows to better distinguish between connection problems and timeouts caused by the other side being busy. """ def __init__(self, context, name=''): # Variables to hold threads self._sendingThread = None self._receivingThread = None # Create queue for outgoing packages. self._qout = TinyPackageQueue(64, *context._queue_params) # Init normally (calls _set_status(0) Connection.__init__(self, context, name) def _set_status(self, status, bsd_socket=None): """ _connected(status, bsd_socket=None) This method is called when a connection is made. Private method to apply the bsd_socket. Sets the socket and updates the status. Also instantiates the IO threads. """ # Lock the connection while we change its status self._lock.acquire() # Update hostname and port number; for hosting connections the port # may be different if max_tries > 0. Each client connection will be # assigned a different ephemeral port number. # http://www.tcpipguide.com/free/t_TCPPortsConnectionsandConnectionIdentification-2.htm # Also get hostname and port for other end if bsd_socket is not None: if True: self._hostname1, self._port1 = bsd_socket.getsockname() if status != STATUS_WAITING: self._hostname2, self._port2 = bsd_socket.getpeername() # Set status as normal Connection._set_status(self, status) try: if status in [STATUS_HOSTING, STATUS_CONNECTED]: # Really connected # Store socket self._bsd_socket = bsd_socket # Set socket to blocking. Needed explicitly on Windows # One of these things it takes you hours to find out ... bsd_socket.setblocking(1) # Create and start io threads self._sendingThread = SendingThread(self) self._receivingThread = ReceivingThread(self) # self._sendingThread.start() self._receivingThread.start() if status == 0: # Close bsd socket try: self._bsd_socket.shutdown() except Exception: pass try: self._bsd_socket.close() except Exception: pass self._bsd_socket = None # Remove references to threads self._sendingThread = None self._receivingThread = None finally: self._lock.release() def _bind(self, hostname, port, max_tries=1): """ Bind the bsd socket. Launches a dedicated thread that waits for incoming connections and to do the handshaking procedure. """ # Create socket. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Set buffer size to be fairly small (less than 10 packages) s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, SOCKET_BUFFERS_SIZE) s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, SOCKET_BUFFERS_SIZE) # Apply SO_REUSEADDR when binding, so that an improperly closed # socket on the same port will not prevent us from connecting. # It also allows a connection to bind at the same port number, # but only after the previous binding connection has connected # (and has closed the listen-socket). # # SO_REUSEADDR means something different on win32 than it does # for Linux sockets. To get the intended behavior on Windows, # we don't have to do anything. Also see: # * http://msdn.microsoft.com/en-us/library/ms740621%28VS.85%29.aspx # * http://twistedmatrix.com/trac/ticket/1151 # * http://www.tcpipguide.com/free/t_TCPPortsConnectionsandConnectionIdentification-2.htm if not sys.platform.startswith('win'): s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Try all ports in the specified range for port2 in range(port, port+max_tries): try: s.bind((hostname,port2)) break except Exception: # Raise the socket exception if we were asked to try # just one port. Otherwise just try the next if max_tries == 1: raise continue else: # We tried all ports without success tmp = str(max_tries) tmp = "Could not bind to any of the " + tmp + " ports tried." raise IOError(tmp) # Tell the socket it is a host, backlog of zero s.listen(0) # Set connected (status 1: waiting for connection) # Will be called with status 2 by the hostThread on success self._set_status(STATUS_WAITING, s) # Start thread to wait for a connection # (keep reference so the thread-object stays alive) self._hostThread = HostThread(self, s) self._hostThread.start() def _connect(self, hostname, port, timeout=1.0): """ Connect to a bound socket. """ # Create socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # Set buffer size to be fairly small (less than 10 packages) s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, SOCKET_BUFFERS_SIZE) s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, SOCKET_BUFFERS_SIZE) # Refuse rediculously low timeouts if timeout<= 0.01: timeout = 0.01 # Try to connect ok = False timestamp = time.time() + timeout while not ok and time.time() timestamp: raise RuntimeError('Sending the packages timed out.') def _send_package(self, package): """ Put package on the queue, where the sending thread will pick it up. """ self._qout.push(package) def _inject_package(self, package): """ Put package in queue, but bypass potential blocking. """ self._qout._q.append(package) class HostThread(threading.Thread): """ HostThread(context_connection, bds_socket) The host thread is used by the ContextConnection when hosting a connection. This thread waits for another context to connect to it, and then performs the handshaking procedure. When a successful connection is made, the context_connection's _connected() method is called and this thread then exits. """ def __init__(self, context_connection, bsd_socket): threading.Thread.__init__(self) # Store connection and socket self._context_connection = context_connection self._bsd_host_socket = bsd_socket # Make deamon self.setDaemon(True) def run(self): """ run() The main loop. Waits for a connection and performs handshaking if successfull. """ # Try making a connection until success or the context is stopped while self._context_connection.is_waiting: # Wait for connection s = self._wait_for_connection() if not s: continue # Check if not closed in the mean time if not self._context_connection.is_waiting: break # Do handshaking hs = HandShaker(s) success, info = hs.shake_hands_as_host(self._context_connection.id1) if success: self._context_connection._id2 = info[0] self._context_connection._pid2 = info[1] else: print('Yoton: Handshake failed: '+info) continue # Success! # Close hosting socket, thereby enabling rebinding at the same port self._bsd_host_socket.close() # Update the status of the connection self._context_connection._set_status(STATUS_HOSTING, s) # Break out of the loop break # Remove ref del self._context_connection del self._bsd_host_socket def _wait_for_connection(self): """ _wait_for_connection() The thread will wait here until someone connects. When a connections is made, the new socket is returned. """ # Set timeout so that we can check _stop_me from time to time self._bsd_host_socket.settimeout(0.25) # Wait while self._context_connection.is_waiting: try: s, addr = self._bsd_host_socket.accept() return s # Return the new socket except socket.timeout: pass except socket.error: # Skip errors caused by interruptions. type, value, tb = sys.exc_info() del tb if value.errno != EINTR: raise class HandShaker: """ HandShaker(bsd_socket) Class that performs the handshaking procedure for Tcp connections. Essentially, the connecting side starts by sending 'YOTON!' followed by its id as a hex string. The hosting side responds with the same message (but with a different id). This process is very similar to a client/server pattern (both messages are also terminated with '\r\n'). This is done such that if for example a web client tries to connect, a sensible error message can be returned. Or when a ContextConnection tries to connect to a web server, it will be able to determine the error gracefully. """ def __init__(self, bsd_socket): # Store bsd socket self._bsd_socket = bsd_socket def shake_hands_as_host(self, id): """ _shake_hands_as_host(id) As the host, we wait for the client to ask stuff, so when for example a http client connects, we can stop the connection. Returns (success, info), where info is the id of the context at the other end, or the error message in case success is False. """ # Make our message with id and pid message = 'YOTON!%s.%i' % (UID(id).get_hex(), os.getpid()) # Get request request = self._recv_during_handshaking() if not request: return False, STOP_HANDSHAKE_TIMEOUT elif request.startswith('YOTON!'): # Get id try: tmp = request[6:].split('.',1) # partition not in Python24 id2_str, pid2_str = tmp[0], tmp[1] id2, pid2 = int(id2_str, 16), int(pid2_str, 10) except Exception: self._send_during_handshaking('ERROR: could not parse id.') return False, STOP_HANDSHAKE_FAILED # Respond and return error = self._send_during_handshaking(message) if id == id2: return False, STOP_HANDSHAKE_SELF else: return True, (id2, pid2) else: # Client is not yoton self._send_during_handshaking('ERROR: this is Yoton.') return False, STOP_HANDSHAKE_FAILED def shake_hands_as_client(self, id): """ _shake_hands_as_client(id) As the client, we ask the host whether it is a Yoton context and whether the channels we want to support are all right. Returns (success, info), where info is the id of the context at the other end, or the error message in case success is False. """ # Make our message with id and pif message = 'YOTON!%s.%i' % (UID(id).get_hex(), os.getpid()) # Do request error = self._send_during_handshaking(message) # Get response response = self._recv_during_handshaking() # Process if not response: return False, STOP_HANDSHAKE_TIMEOUT elif response.startswith('YOTON!'): # Get id try: tmp = response[6:].split('.',1) # Partition not in Python24 id2_str, pid2_str = tmp[0], tmp[1] id2, pid2 = int(id2_str, 16), int(pid2_str, 10) except Exception: return False, STOP_HANDSHAKE_FAILED if id == id2: return False, STOP_HANDSHAKE_SELF else: return True, (id2, pid2) else: return False, STOP_HANDSHAKE_FAILED def _send_during_handshaking(self, text, shutdown=False): return send_all(self._bsd_socket, text+'\r\n', shutdown) def _recv_during_handshaking(self): return recv_all(self._bsd_socket, 2.0, True) class BaseIOThread(threading.Thread): """ The base class for the sending and receiving IO threads. Implements some common functionality. """ def __init__(self, context_connection): threading.Thread.__init__(self) # Thread will "destruct" when the interpreter shuts down self.setDaemon(True) # Store (temporarily) the ref to the context connection # Also of bsd_socket, because it might be removed before the # thread is well up and running. self._context_connection = context_connection self._bsd_socket = context_connection._bsd_socket def run(self): """ Method to prepare to enter main loop. There is a try-except here to catch exceptions caused by interpreter shutdown. """ # Get ref to context connection but make sure the ref # if not stored if the thread stops context_connection = self._context_connection bsd_socket = self._bsd_socket del self._context_connection del self._bsd_socket try: # Run and handle exceptions if someting goes wrong self.run2(context_connection, bsd_socket) except Exception: # An error while handling an exception, most probably #interpreter shutdown pass def run2(self, context_connection, bsd_socket): """ Method to enter main loop. There is a try-except here to catch exceptions in the main loop (such as socket errors and errors due to bugs in the code. """ # Get classname to use in messages className = 'yoton.' + self.__class__.__name__ # Define function to write errors def writeErr(err): sys.__stderr__.write(str(err)+'\n') sys.__stderr__.flush() try: # Enter mainloop stop_reason = self._run(context_connection, bsd_socket) # Was there a specific reason to stop? if stop_reason: context_connection.close_on_problem(stop_reason) else: pass # Stopped because the connection is gone (already stopped) except socket.error: # Socket error. Can happen if the other end closed not so nice # Do get the socket error message and pass it on. msg = STOP_SOCKET_ERROR + getErrorMsg() context_connection.close_on_problem('%s, %s' % (className, msg)) except Exception: # Else: woops, an error! errmsg = getErrorMsg() msg = STOP_THREAD_ERROR + errmsg context_connection.close_on_problem('%s, %s' % (className, msg)) writeErr('Exception in %s.' % className) writeErr(errmsg) class SendingThread(BaseIOThread): """ The thread that reads packages from the queue and sends them over the socket. It uses a timeout while reading from the queue, so it can send heart beat packages if no packages are send. """ def _run(self, context_connection, bsd_socket): """ The main loop. Get package from queue, send package to socket. """ timeout = 0.5*TIMEOUT_MIN queue = context_connection._qout socket_send = bsd_socket.send socket_sendall = bsd_socket.sendall while True: time.sleep(0) # Be nice # Get package from the queue. Use heartbeat package # if there have been no packages for a too long time try: package = queue.pop(timeout) except queue.Empty: # Use heartbeat package then package = PACKAGE_HEARTBEAT # Should we stop? if not context_connection.is_connected: return None # No need for a stop message # Process the package in parts to avoid data copying (header+data) for part in package.parts(): socket_sendall(part) class ReceivingThread(BaseIOThread): """ The thread that reads packages from the socket and passes them to the kernel. It uses select() to see if data is available on the socket. This allows using a timeout without putting the socket in timeout mode. If the timeout has expired, the timedout event for the connection is emitted. Upon receiving a package, the _recv_package() method of the context is called, so this thread will eventually dispose the package in one or more queues (of the channel or of another connection). """ def _run(self, context_connection, bsd_socket): """ The main loop. Get package from socket, deposit package in queue(s). """ # Short names in local namespace avoid dictionary lookups socket_recv = bsd_socket.recv recv_package = context_connection._context._recv_package package_from_header = Package.from_header HS = HEADER_SIZE # Variable to keep track if we emitted a timedout signal timedOut = False while True: time.sleep(0) # Be nice # Use select call on a timeout to test if data is available while True: try: ok = can_recv(bsd_socket, context_connection._timeout) except Exception: # select() has it's share of weird errors raise socket.error('select(): ' + getErrorMsg()) if ok: # Set timedout ex? if timedOut: timedOut = False context_connection.timedout.emit(context_connection, False) # Exit from loop break else: # Should we stop? if not context_connection.is_connected: return # No need for a stop message # Should we do a timeout? if not timedOut: timedOut = True context_connection.timedout.emit(context_connection, True) # Continue in loop continue # Get package package = self._getPackage(socket_recv, HS, package_from_header) if package is None: continue elif isinstance(package, basestring): return package # error msg # Let context handle package further (but happens in this thread) try: recv_package(package, context_connection) except Exception: print("Error depositing package in ReceivingThread.") print(getErrorMsg()) def _getPackage(self, socket_recv, HS, package_from_header): """ Get exactly one package from the socket. Blocking. """ # Get header and instantiate package object from it try: header = self._recv_n_bytes(socket_recv, HS) except EOFError: return STOP_EOF package, size = package_from_header(header) # Does it look like a good package? if not package: return STOP_LOST_TRACK if size == 0: # A special package! (or someone sending a # package with no content, which is discarted) if package._source_seq == 0: pass # Heart beat elif package._source_seq == 1: return STOP_CLOSED_FROM_THERE return None else: # Get package data try: package._data = self._recv_n_bytes(socket_recv, size) except EOFError: return STOP_EOF return package def _recv_n_bytes(self, socket_recv, n): """ Receive exactly n bytes from the socket. """ # First round data = socket_recv(n) if len(data) == 0: raise EOFError() # How many more do we need? For small n, we probably only need 1 round n -= len(data) if n==0: return data # We're lucky! # Else, we need more than one round parts = [data] while n: data = socket_recv(n) parts.append(data) n -= len(data) # Return combined data of multiple rounds return bytes().join(parts) iep-3.7/iep/yoton/connection_itc.py0000664000175000017500000000177712271043447017671 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import sys import time import yoton from yoton.misc import basestring, bytes, str from yoton.misc import Property, getErrorMsg, UID from yoton.misc import PackageQueue from yoton.connection import Connection, TIMEOUT_MIN from yoton.connection import STATUS_CLOSED, STATUS_WAITING, STATUS_HOSTING from yoton.connection import STATUS_CONNECTED, STATUS_CLOSING class ItcConnection(Connection): """ ItcConnection(context, hostname, port, name='') Not implemented . The inter-thread-communication connection class implements a connection between two contexts that are in the same process. Two instances of this class are connected using a weak reference. In case one of the ends is cleaned up by the garbadge collector, the other end will close the connection. """ pass # todo: implement me iep-3.7/iep/yoton/core.py0000664000175000017500000002237712421725060015615 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import time import sys import struct import socket import threading import sys #import select # to determine wheter a socket can receive data if sys.platform.startswith('java'): # Jython from select import cpython_compatible_select as select, error as SelectErr else: from select import select, error as SelectErr import yoton from yoton.misc import basestring, bytes, str from yoton.misc import Property, getErrorMsg ## Constants # Error code for interruptions try: from errno import EINTR except ImportError: EINTR = None # Queue size BUF_MAX_LEN = 10000 # Define buffer size. For recv 4096 or 8192 chunk size is recommended. # For sending, in principle as large as possible, but prevent too much # message copying. BUFFER_SIZE_IN = 2**13 BUFFER_SIZE_OUT = 1*2**20 # Reserved slots (slot 0 does not exist, so we can test "if slot: ") # The actual slots start counting from 8. # SLOT_TEST = 3 -> Deprecated SLOT_CONTEXT = 2 SLOT_DUMMY = 1 # Struct header packing HEADER_FORMAT = '= 2 parts = [' '.encode('ascii'),] # Determine number of bytes to get per recv nbytesToGet = BUFFER_SIZE_IN if end_at_crlf: nbytesToGet = 1 # Set end bytes end_bytes = '\r\n'.encode('ascii') # Set max time if timeout <= 0: timeout = 2**32 maxtime = time.time() + timeout # Receive data while True: # Receive if we can if can_recv(s): # Get part try: part = s.recv(nbytesToGet) parts.append(part) except socket.error: return None # Socket closed down badly # Detect end by shutdown (EOF) if not part: break # Detect end by \r\n if end_at_crlf and (parts[-2] + parts[-1]).endswith(end_bytes): break else: # Sleep time.sleep(0.01) # Check time if time.time() > maxtime: bb = bytes().join(parts[1:]) return bb.decode('utf-8', 'ignore') # Combine parts (discared first (dummy) part) bb = bytes().join(parts[1:]) # Try returning as Unicode try: return bb.decode('utf-8','ignore') except UnicodeError: return '' ## Package class class Package(object): """ Package(data, slot, source_id, source_seq, dest_id, dest_seq, recv_seq) Represents a package of bytes to be send from one Context instance to another. A package consists of a header and the encoded message. To make this class as fast as reasonably possible, its interface is rather minimalistic and few convenience stuff is implemented. Parameters ---------- data : bytes The message itself. slot : long The slot at which the package is directed. The integer is a hash of a string slot name. source_id : long The id of the context that sent this package. source_seq : long The sequence number of this package, counted at the sending context. Together with source_id, this fully identifies a package. dest_id : long (default 0) The id of the package that this package replies to. dest_seq : long (default 0) The sequence number of the package that this package replies to. recv_seq : long (default 0) The sequence number of this package counted at the receiving context. This is used to synchronize channels. When send, the header is composed of four control bytes, the slot, the source_id, source_seq, dest_id and dest_seq. Notes ----- A package should always have content. Packages without content are only used for low-level communication between two ContextConnection instances. The source_seq is then used as the signal. All other package attributes are ignored. """ # The __slots__ makes instances of this class consume < 20% of memory # Note that this only works for new style classes. # This is important because many packages can exist at the same time # if a receiver cant keep up with a sender. Further, although Python's # garbage collector collects the objects after they're "consumed", # it does not release the memory, because it hopes to reuse it in # an efficient way later. __slots__ = [ '_data', '_slot', '_source_id', '_source_seq', '_dest_id', '_dest_seq', '_recv_seq'] def __init__(self, data, slot, source_id, source_seq, dest_id, dest_seq, recv_seq): self._data = data self._slot = slot # self._source_id = source_id self._source_seq = source_seq self._dest_id = dest_id self._dest_seq = dest_seq self._recv_seq = recv_seq def parts(self): """ parts() Get list of bytes that represents this package. By not concatenating the header and content parts, we prevent unnecesary copying of data. """ # Obtain header L = len(self._data) header = struct.pack(HEADER_FORMAT, CONTROL_BYTES, self._slot, self._source_id, self._source_seq, self._dest_id, self._dest_seq, L) # Return header and message return header, self._data def __str__(self): """ Representation of the package. Mainly for debugging. """ return 'At slot %i: %s' % (self._slot, repr(self._data)) @classmethod def from_header(cls, header): """ from_header(header) Create a package (without data) from the header of a message. Returns (package, data_length). If the header is invalid (checked using the four control bytes) this method returns (None, None). """ # Unpack tmp = struct.unpack(HEADER_FORMAT, header) CTRL, slot, source_id, source_seq, dest_id, dest_seq, L = tmp # Create package p = Package(None, slot, source_id, source_seq, dest_id, dest_seq, 0) # Return if CTRL == CONTROL_BYTES: return p, L else: return None, None # Constant Package instances (source_seq represents the signal) PACKAGE_HEARTBEAT = Package(bytes(), SLOT_DUMMY, 0, 0, 0, 0, 0) PACKAGE_CLOSE = Package(bytes(), SLOT_DUMMY, 0, 1, 0, 0, 0)iep-3.7/iep/yoton/clientserver.py0000664000175000017500000002300412341435132017355 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ yoton.clientserver.py Yoton comes with a small framework to setup a request-reply pattern using a client-server model (over a non-persistent connection), similar to telnet. This allows one process to easily ask small pieces of information from another process. To create a server, create a class that inherits from yoton.RequestServer and implement its handle_request() method. A client process can simply use the yoton.do_request function. Example: ``yoton.do_request('www.google.com:80', 'GET http/1.1\\r\\n')`` The client server model is implemented using one function and one class: yoton.do_request and yoton.RequestServer. Details ------- The server implements a request/reply pattern by listening at a socket. Similar to telnet, each request is handled using a connection and the socket is closed after the response is send. The request server can setup to run in the main thread, or can be started using its own thread. In the latter case, one can easily create multiple servers in a single process, that listen on different ports. """ import os, sys, time import socket import threading from select import select # to determine wheter a socket can receive data from yoton.misc import basestring, bytes, str, long from yoton.misc import split_address, getErrorMsg from yoton.core import send_all, recv_all class RequestServer(threading.Thread): """ RequestServer(address, async=False, verbose=0) Setup a simple server that handles requests similar to a telnet server, or asyncore. Starting the server using run() will run the server in the calling thread. Starting the server using start() will run the server in a separate thread. To create a server, subclass this class and re-implement the handle_request method. It accepts a request and should return a reply. This server assumes utf-8 encoded messages. Parameters ---------- address : str Should be of the shape hostname:port. async : bool If True, handles each incoming connection in a separate thread. This might be advantageous if a the handle_request() method takes a long time to execute. verbose : bool If True, print a message each time a connection is accepted. Notes on hostname ----------------- The hostname can be: * The IP address, or the string hostname of this computer. * 'localhost': the connections is only visible from this computer. Also some low level networking layers are bypassed, which results in a faster connection. The other context should also connect to 'localhost'. * 'publichost': the connection is visible by other computers on the same network. """ def __init__(self, address, async=False, verbose=0): threading.Thread.__init__(self) # Store whether to handle requests asynchronously self._async = async # Verbosity self._verbose = verbose # Determine host and port (assume tcp) protocol, host, port = split_address(address) # Create socket. Apply SO_REUSEADDR when binding, so that a # improperly closed socket on the same port will not prevent # us connecting. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Bind (can raise error is port is not available) s.bind((host,port)) # Store socket instance self._bsd_socket = s # To stop serving self._stop_me = False # Make deamon self.setDaemon(True) def start(self): """ start() Start the server in a separate thread. """ self._stop_me = False threading.Thread.start(self) def stop(self): """ stop() Stop the server. """ self._stop_me = True def run(self): """ run() The server's main loop. """ # Get socket instance s = self._bsd_socket # Notify hostname, port = s.getsockname() if self._verbose: print('Yoton: hosting at %s, port %i' % (hostname, port)) # Tell the socket it is a host, accept multiple s.listen(1) # Set timeout so that we can check _stop_me from time to time self._bsd_socket.settimeout(0.25) # Enter main loop while not self._stop_me: try: s, addr = self._bsd_socket.accept() except socket.timeout: pass except InterruptedError: pass else: # Show handling? if self._verbose: print('handling request from: '+str(addr)) # Handle request if self._async : rh = SocketHandler(self, s) rh.start() else: self._handle_connection(s) # Close down try: self._bsd_socket.close() except socket.error: pass def _handle_connection(self, s): """ _handle_connection(s) Handle an incoming connection. """ try: self._really_handle_connection(s) except Exception: print('Error handling request:') print(getErrorMsg()) def _really_handle_connection(self, s): """ _really_handle_connection(s) Really handle an incoming connection. """ # Get request request = recv_all(s, True) if request is None: return # Get reply reply = self.handle_request(request) # Test if not isinstance(reply, basestring): raise ValueError('handle_request() should return a string.') # Send reply send_all(s, reply, True) # Close the socket try: s.close() except socket.error: pass def handle_request(self, request): """ handle_request(request) Return a reply, given the request. Overload this method to create a server. De standard implementation echos the request, waits one second when receiving 'wait' and stop the server when receiving 'stop'. """ # Special cases if request == 'wait': time.sleep(1.0) elif request == 'stop': self._stop_me = True # Echo return 'Requested: ' + request class SocketHandler(threading.Thread): """ SocketHandler(server, s) Simple thread that handles a connection. """ def __init__(self, server, s): threading.Thread.__init__(self) self._server = server self._bsd_socket = s def run(self): self._server._handle_connection(self._bsd_socket) def do_request(address, request, timeout=-1): """ do_request(address, request, timeout=-1) Do a request at the server at the specified address. The server can be a yoton.RequestServer, or any other server listening on a socket and following a REQ/REP pattern, such as html or telnet. For example: ``html = do_request('www.google.com:80', 'GET http/1.1\\r\\n')`` Parameters ---------- address : str Should be of the shape hostname:port. request : string The request to make. timeout : float If larger than 0, will wait that many seconds for the respons, and return None if timed out. Notes on hostname ----------------- The hostname can be: * The IP address, or the string hostname of this computer. * 'localhost': the connections is only visible from this computer. Also some low level networking layers are bypassed, which results in a faster connection. The other context should also connect to 'localhost'. * 'publichost': the connection is visible by other computers on the same network. """ # Determine host (assume tcp) protocol, host, port = split_address(address) # Check request if not isinstance(request, basestring): raise ValueError('request should be a string.') # Check timeout if timeout is None: timeout = -1 # Create socket and connect s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect((host,port)) except socket.error: raise RuntimeError('No server is listening at the given port.') # Send request send_all(s, request, True) # Receive reply reply = recv_all(s, timeout) # Close socket try: s.close() except socket.error: pass # Done return reply if __name__ == '__main__': class Lala(RequestServer): def handle_request(self, req): print('REQ:',repr(req)) return "The current time is %i" % time.time() s = Lala('localhost:test', 0, 1) s.start() if False: print(do_request('localhost:test', 'wait', 5)) for i in range(10): print(do_request('localhost:test', 'hi'+str(i))) # do_request('localhost:test', 'wait'); do_request('localhost:test', 'hi'); iep-3.7/iep/yoton/context.py0000664000175000017500000005001712271043447016346 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.context Defines the context class. """ import os, sys, time import threading from yoton import core from yoton import connection from yoton.misc import basestring, bytes, str, xrange, split_address from yoton.misc import Property, getErrorMsg, UID, PackageQueue from yoton.core import Package, BUF_MAX_LEN from yoton.core import SLOT_CONTEXT from yoton.connection import ConnectionCollection, Connection from yoton.connection_tcp import TcpConnection from yoton.connection_itc import ItcConnection class Context(object): """ Context(verbose=0, queue_params=None) A context represents a node in the network. It can connect to multiple other contexts (using a yoton.Connection. These other contexts can be in another process on the same machine, or on another machine connected via a network or the internet. This class represents a context that can be used by channel instances to communicate to other channels in the network. (Thus the name.) The context is the entity that queue routes the packages produced by the channels to the other context in the network, where the packages are distributed to the right channels. A context queues packages while it is not connected to any other context. If messages are send on a channel registered at this context while the context is not connected, the messages are stored by the context and will be send to the first connecting context. Example 1 --------- # Create context and bind to a port on localhost context = yoton.Context() context.bind('localhost:11111') # Create a channel and send a message pub = yoton.PubChannel(context, 'test') pub.send('Hello world!') Example 2 --------- # Create context and connect to the port on localhost context = yoton.Context() context.connect('localhost:11111') # Create a channel and receive a message sub = yoton.SubChannel(context, 'test') print(sub.recv() # Will print 'Hello world!' Queue params ------------ The queue_params parameter allows one to specify the package queues used in the system. It is recommended to use the same parameters for every context in the network. The value of queue_params should be a 2-element tuple specifying queue size and discard mode. The latter can be 'old' (default) or 'new', meaning that if the queue is full, either the oldest or newest messages are discarted. """ def __init__(self, verbose=0, queue_params=None): # Whether or not to write status information self._verbose = verbose # Store queue parameters if queue_params is None: queue_params = BUF_MAX_LEN, 'old' if not (isinstance(queue_params, tuple) and len(queue_params) == 2): raise ValueError('queue_params should be a 2-element tuple.') self._queue_params = queue_params # Create unique key to identify this context self._id = UID().get_int() # Channels currently registered. Maps slots to channel instance. self._sending_channels = {} self._receiving_channels = {} # The list of connections self._connections = [] self._connections_lock = threading.RLock() # Queue used during startup to collect packages # This queue is also subject to the _connections_lock self._startupQueue = PackageQueue(*queue_params) # For numbering and routing the packages self._send_seq = 0 self._recv_seq = 0 self._source_map = {} def close(self): """ close() Close the context in a nice way, by closing all connections and all channels. Closing a connection means disconnecting two contexts. Closing a channel means disasociating a channel from its context. Unlike connections and channels, a Context instance can be reused after closing (although this might not always the best strategy). """ # Close all connections (also the waiting connections!) for c in self.connections_all: c.close('Closed by the context.') # Close all channels self.close_channels() def close_channels(self): """ close_channels() Close all channels associated with this context. This does not close the connections. See also close(). """ # Get all channels channels1 = [c for c in self._sending_channels.values()] channels2 = [c for c in self._receiving_channels.values()] # Close all channels for c in set(channels1+channels2): c.close() ## Properties @property def connections_all(self): """ Get a list of all Connection instances currently associated with this context, including pending connections (connections waiting for another end to connect). In addition to normal list indexing, the connections objects can be queried from this list using their name. """ # Lock self._connections_lock.acquire() try: return [c for c in self._connections if c.is_alive] finally: self._connections_lock.release() @property def connections(self): """ Get a list of the Connection instances currently active for this context. In addition to normal list indexing, the connections objects can be queried from this list using their name. """ # Lock self._connections_lock.acquire() try: # Clean up any dead connections copy = ConnectionCollection() to_remove = [] for c in self._connections: if not c.is_alive: to_remove.append(c) elif c.is_connected: copy.append(c) # Clean for c in to_remove: self._connections.remove(c) # Return copy return copy finally: self._connections_lock.release() @property def connection_count(self): """ Get the number of connected contexts. Can be used as a boolean to check if the context is connected to any other context. """ return len(self.connections) @property def id(self): """ The 8-byte UID of this context. """ return self._id ## Public methods def bind(self, address, max_tries=1, name=''): """ bind(address, max_tries=1, name='') Setup a connection with another Context, by being the host. This method starts a thread that waits for incoming connections. Error messages are printed when an attemped connect fails. the thread keeps trying until a successful connection is made, or until the connection is closed. Returns a Connection instance that represents the connection to the other context. These connection objects can also be obtained via the Context.connections property. Parameters ---------- address : str Should be of the shape hostname:port. The port should be an integer number between 1024 and 2**16. If port does not represent a number, a valid port number is created using a hash function. max_tries : int The number of ports to try; starting from the given port, subsequent ports are tried until a free port is available. The final port can be obtained using the 'port' property of the returned Connection instance. name : string The name for the created Connection instance. It can be used as a key in the connections property. Notes on hostname ----------------- The hostname can be: * The IP address, or the string hostname of this computer. * 'localhost': the connections is only visible from this computer. Also some low level networking layers are bypassed, which results in a faster connection. The other context should also connect to 'localhost'. * 'publichost': the connection is visible by other computers on the same network. Optionally an integer index can be appended if the machine has multiple IP addresses (see socket.gethostbyname_ex). """ # Trigger cleanup of closed connections self.connections # Split address in protocol, real hostname and port number protocol, hostname, port = split_address(address) # Based on protocol, instantiate connection class (currently only tcp) if False:#protocol == 'itc': connection = ItcConnection(self, name) else: connection = TcpConnection(self, name) # Bind connection connection._bind(hostname, port, max_tries) # Save connection instance self._connections_lock.acquire() try: # Push packages from startup queue while len(self._startupQueue): connection._inject_package(self._startupQueue.pop()) # Add connection object to list of connections self._connections.append(connection) finally: self._connections_lock.release() # Return Connection instance return connection def connect(self, address, timeout=1.0, name=''): """ connect(self, address, timeout=1.0, name='') Setup a connection with another context, by connection to a hosting context. An error is raised when the connection could not be made. Returns a Connection instance that represents the connection to the other context. These connection objects can also be obtained via the Context.connections property. Parameters ---------- address : str Should be of the shape hostname:port. The port should be an integer number between 1024 and 2**16. If port does not represent a number, a valid port number is created using a hash function. max_tries : int The number of ports to try; starting from the given port, subsequent ports are tried until a free port is available. The final port can be obtained using the 'port' property of the returned Connection instance. name : string The name for the created Connection instance. It can be used as a key in the connections property. Notes on hostname ----------------- The hostname can be: * The IP address, or the string hostname of this computer. * 'localhost': the connection is only visible from this computer. Also some low level networking layers are bypassed, which results in a faster connection. The other context should also host as 'localhost'. * 'publichost': the connection is visible by other computers on the same network. Optionally an integer index can be appended if the machine has multiple IP addresses (see socket.gethostbyname_ex). """ # Trigger cleanup of closed connections self.connections # Split address in protocol, real hostname and port number protocol, hostname, port = split_address(address) # Based on protocol, instantiate connection class (currently only tcp) if False:#protocol == 'itc': connection = ItcConnection(self, name) else: connection = TcpConnection(self, name) # Create new connection and connect it connection._connect(hostname, port, timeout) # Save connection instance self._connections_lock.acquire() try: # Push packages from startup queue while self._startupQueue: connection._inject_package(self._startupQueue.pop()) # Add connection object to list of connections self._connections.append(connection) finally: self._connections_lock.release() # Send message in the network to signal a new connection bb = 'NEW_CONNECTION'.encode('utf-8') p = Package(bb, SLOT_CONTEXT, self._id, 0,0,0,0) self._send_package(p) # Return Connection instance return connection def flush(self, timeout=5.0): """ flush(timeout=5.0) Wait until all pending messages are send. This will flush all messages posted from the calling thread. However, it is not guaranteed that no new messages are posted from another thread. Raises an error when the flushing times out. """ # Flush all connections for c in self.connections: c.flush(timeout) # Done (backward compatibility) return True ## Private methods used by the Channel classes def _register_sending_channel(self, channel, slot, slotname=''): """ _register_sending_channel(channel, slot, slotname='') The channel objects use this method to register themselves at a particular slot. """ # Check if this slot is free if slot in self._sending_channels: raise ValueError("Slot not free: " + str(slotname)) # Register self._sending_channels[slot] = channel def _register_receiving_channel(self, channel, slot, slotname=''): """ _register_receiving_channel(channel, slot, slotname='') The channel objects use this method to register themselves at a particular slot. """ # Check if this slot is free if slot in self._receiving_channels: raise ValueError("Slot not free: " + str(slotname)) # Register self._receiving_channels[slot] = channel def _unregister_channel(self, channel): """ _unregister_channel(channel) Unregisters the given channel. That channel can no longer receive messages, and should no longer send messages. """ for D in [self._receiving_channels, self._sending_channels]: for key in [key for key in D.keys()]: if D[key] == channel: D.pop(key) ## Private methods to pass packages between context and io-threads def _send_package(self, package): """ _send_package(package) Used by the channels to send a package into the network. This method routes the package to all currentlt connected connections. If there are none, the packages is queued at the context. """ # Add number self._send_seq += 1 package._source_seq = self._send_seq # Send to all connections, or queue if there are none self._connections_lock.acquire() try: ok = False for c in self._connections: if c.is_alive: # Waiting or connected c._send_package(package) ok = True # Should we queue the package? if not ok: self._startupQueue.push(package) finally: self._connections_lock.release() def _recv_package(self, package, connection): """ _recv_package(package, connection) Used by the connections to receive a package at this context. The package is distributed to all connections except the calling one. The package is also distributed to the right channel (if applicable). """ # Get slot slot = package._slot # Init what to do with the package send_further = False deposit_here = False # Get what to do with the package last_seq = self._source_map.get(package._source_id, 0) if last_seq < package._source_seq: # Update source map self._source_map[package._source_id] = package._source_seq if package._dest_id == 0: # Add to both lists, first attach seq nr self._recv_seq += 1 package._recv_seq = self._recv_seq send_further, deposit_here = True, True elif package._dest_id == self._id: # Add only to process list, first attach seq nr self._recv_seq += 1 package._recv_seq = self._recv_seq deposit_here = True else: # Send package to connected nodes send_further = True # Send package to other context (over all alive connections) if send_further: self._connections_lock.acquire() try: for c in self._connections: if c is connection or not c.is_alive: continue c._send_package(package) finally: self._connections_lock.release() # Process package here or pass to channel if deposit_here: if slot == SLOT_CONTEXT: # Context-to-context messaging; # A slot starting with a space reprsents the context self._recv_context_package(package) else: # Give package to a channel (if applicable) channel = self._receiving_channels.get(slot, None) if channel is not None: channel._recv_package(package) def _recv_context_package(self, package): """ _recv_context_package(package) Process a package addressed at the context itself. This is how the context handles higher-level connection tasks. """ # Get message: context messages are always utf-8 encoded strings message = package._data.decode('utf-8') if message == 'CLOSE_CONNECTION': # Close the connection. Check which one of our connections is # connected with the context that send this message. self._connections_lock.acquire() try: for c in self.connections: if c.is_connected and c.id2 == package._source_id: c.close(connection.STOP_CLOSED_FROM_THERE, False) finally: self._connections_lock.release() elif message == 'NEW_CONNECTION': # Resend all status channels for channel in self._sending_channels.values(): if hasattr(channel, '_current_message') and hasattr(channel, 'send_last'): channel.send_last() else: print('Yoton: Received unknown context message: '+message) iep-3.7/iep/yoton/__init__.py0000664000175000017500000000461312271043447016422 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Yoton is a Python package that provides a simple interface to communicate between two or more processes. Yoton is ... * lightweight * written in pure Python * without dependencies (except Python) * available on Python version >= 2.4, including Python 3 * cross-platform * pretty fast """ # Import stuff from misc and events from yoton.misc import UID, str, bytes from yoton.events import Signal, Timer, app # Inject app function in yoton namespace for convenience call_later = app.call_later process_events = app.process_events start_event_loop = app.start_event_loop stop_event_loop = app.stop_event_loop embed_event_loop = app.embed_event_loop # Import more from yoton.core import Package from yoton.connection import Connection, ConnectionCollection from yoton.connection_tcp import TcpConnection from yoton.context import Context from yoton.clientserver import RequestServer, do_request from yoton.channels import * # Set yoton version __version__ = '2.2' # Define convenience class class SimpleSocket(Context): """ SimpleSocket() A simple socket has an API similar to a BSD socket. This socket sends whole text messages from one end to the other. This class subclasses the Yoton.Context class, which makes setting up this socket very easy. Example ------- # One end s = SimpleSocket() s.bind('localhost:test') s.send("Hi") # Other end s = SimpleSocket() s.connect('localhost:test') print(s.recv()) """ def __init__(self, verbose=False): Context.__init__(self, verbose) # Create channels self._cs = PubChannel(self, 'text') self._cr = SubChannel(self, 'text') def send(self, s): """ send(message) Send a text message. The message is queued and send over the socket by the IO-thread. """ self._cs.send(s) def recv(self, block=None): """ recv(block=None): Read a text from the channel. What was send as one message is always received as one message. If the channel is closed and all messages are read, returns ''. """ return self._cr.recv(block) iep-3.7/iep/yoton/channels/0000775000175000017500000000000012573320440016074 5ustar almaralmar00000000000000iep-3.7/iep/yoton/channels/channels_file.py0000664000175000017500000001315512467115464021257 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.channels.file Defines a class that can be used to wrap a channel to give it a file like interface. """ import sys import os from yoton.misc import basestring, bytes, str, long from yoton.channels import PubChannel, SubChannel PY2 = sys.version_info[0] == 2 class FileWrapper(object): """ FileWrapper(channel, chunksize=0, echo=None) Class that wraps a PubChannel or SubChannel instance to provide a file-like interface by implementing methods such as read() and write(), and other stuff specified in: [[http://docs.python.org/library/stdtypes.html#bltin-file-objects]] The file wrapper also splits messages into smaller messages if they are above the chunksize (only if chunksize > 0). On Python 2, the read methods return str (utf-8 encoded Unicode). """ # Our file-like objects should not implement: # explicitly stated: fileno, isatty # don't seem to make sense: readlines, seek, tell, truncate, errors, # mode, name, def __init__(self, channel, chunksize=0, echo=None): if not isinstance(channel, (PubChannel, SubChannel)): raise ValueError('FileWrapper needs a PubChannel or SubChannel.') if echo is not None: if not isinstance(echo, PubChannel): raise ValueError('FileWrapper echo needs to be a PubChannel.') self._channel = channel self._chunksize = int(chunksize) self._echo = echo self._pid = os.getpid() # To detect whether we are in multi-process self.errors = 'strict' # compat def close(self): """ Close the file object. """ # Deal with multiprocessing if self._pid != os.getpid(): if self is sys.stdin: sys.__stdin__.close() elif self is sys.stdout: sys.__stdout__.close() elif self is sys.stderr: sys.__stderr__.close() return # Normal behavior self._channel.close() @property def encoding(self): """ The encoding used to encode strings to bytes and vice versa. """ return 'UTF-8' @property def closed(self): """ Get whether the file is closed. """ return self._channel._closed def flush(self): """ flush() Wait here until all messages have been send. """ context = self._channel._context.flush() @property def newlines(self): """ The type of newlines used. Returns None; we never know what the other end could be sending! """ return None # this is for the print statement to keep track spacing stuff def _set_softspace(self, value): self._softspace = bool(value) def _get_softspace(self): return hasattr(self, '_softspace') and self._softspace softspace = property(_get_softspace, _set_softspace, None, '') def read(self, block=None): """ read(block=None) Alias for recv(). """ res = self._channel.recv(block) if res and self._echo is not None: self._echo.send(res) if PY2: return res.encode('utf-8') else: return res def write(self, message): """ write(message) Uses channel.send() to send the message over the Yoton network. The message is partitioned in smaller parts if it is larger than the chunksize. """ # Deal with multiprocessing if self._pid != os.getpid(): realfile = None if self is sys.stdout: realfile = sys.__stdout__ elif self is sys.stderr: realfile = sys.__stderr__ if realfile is not None: sys.__stderr__.write(message) sys.__stderr__.flush() return chunkSize = self._chunksize if chunkSize > 0: for i in range(0, len(message), chunkSize): self._channel.send( message[i:i+chunkSize] ) else: self._channel.send(message) def writelines(self, lines): """ writelines(lines) Write a sequence of messages to the channel. """ for line in lines: self._channel.send(line) def readline(self, size=0): """ readline(size=0) Read one string that was send as one from the other end (always in blocking mode). A newline character is appended if it does not end with one. If size is given, returns only up to that many characters, the rest of the message is thrown away. """ # Get line line = self._channel.recv(True) # Echo if line and self._echo is not None: self._echo.send(line) # Make sure it ends with newline if not line.endswith('\n'): line += '\n' # Decrease size? if size: line = line[:size] # Done if PY2: return line.encode('utf-8') else: return line iep-3.7/iep/yoton/channels/channels_base.py0000664000175000017500000003035512271043447021245 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.channels.channels_base Defines the base channel class and the MessageType class. """ import time import threading import yoton from yoton.misc import basestring, bytes, str from yoton.misc import Property, getErrorMsg, slot_hash, PackageQueue from yoton.core import Package from yoton.context import Context from yoton.channels.message_types import MessageType, BINARY, TEXT, OBJECT class BaseChannel(object): """ BaseChannel(context, slot_base, message_type=yoton.TEXT) Abstract class for all channels. Parameters ---------- context : yoton.Context instance The context that this channel uses to send messages in a network. slot_base : string The base slot name. The channel appends an extension to indicate message type and messaging pattern to create the final slot name. The final slot is used to connect channels at different contexts in a network message_type : yoton.MessageType instance (default is yoton.TEXT) Object to convert messages to bytes and bytes to messages. Users can create their own message_type class to enable communicating any type of message they want. Details ------- Messages send via a channel are delivered asynchronically to the corresponding channels. All channels are associated with a context and can be used to send messages to other channels in the network. Each channel is also associated with a slot, which is a string that represents a kind of address. A message send by a channel at slot X can only be received by a channel with slot X. Note that the channel appends an extension to the user-supplied slot name, that represents the message type and messaging pattern of the channel. In this way, it is prevented that for example a PubChannel can communicate with a RepChannel. """ def __init__(self, context, slot_base, message_type=None): # Store context if not isinstance(context, Context): raise ValueError('Context not valid.') self._context = context # Check message type if message_type is None: message_type = TEXT if isinstance(message_type, type) and issubclass(message_type, MessageType): message_type = message_type() if isinstance(message_type, MessageType): message_type = message_type else: raise ValueError('message_type should be a MessageType instance.') # Store message type and conversion methods self._message_type_instance = message_type self.message_from_bytes = message_type.message_from_bytes self.message_to_bytes = message_type.message_to_bytes # Queue for incoming trafic (not used for pure sending channels) self._q_in = PackageQueue(*context._queue_params) # For sending channels: to lock the channel for sending self._send_condition = threading.Condition() self._is_send_locked = 0 # "True" is the timeout time # Signal for receiving data self._received_signal = yoton.events.Signal() self._posted_received_event = False # Channels can be closed self._closed = False # Event driven mode self._run_mode = 0 # Init slots self._init_slots(slot_base) def _init_slots(self, slot_base): """ _init_slots(slot_base) Called from __init__ to initialize the slots and perform all checks. """ # Check if slot is string if not isinstance(slot_base, basestring): raise ValueError('slot_base must be a string.') # Get full slot names, init byte versions slots_t = [] slots_h = [] # Get extension for message type and messaging pattern ext_type = self._message_type_instance.message_type_name() ext_patterns = self._messaging_patterns() # (incoming, outgoing) # Normalize and check slot names for ext_pattern in ext_patterns: if not ext_pattern: slots_t.append(None) slots_h.append(0) continue # Get full name slot = slot_base + '.' + ext_type + '.' + ext_pattern # Store text version slots_t.append(slot) # Strip and make lowercase slot = slot.strip().lower() # Hash slots_h.append(slot_hash(slot)) # Store slots self._slot_out = slots_t[0] self._slot_in = slots_t[1] self._slot_out_h = slots_h[0] self._slot_in_h = slots_h[1] # Register slots (warn if neither slot is valid) if self._slot_out_h: self._context._register_sending_channel(self, self._slot_out_h, self._slot_out) if self._slot_in_h: self._context._register_receiving_channel(self, self._slot_in_h, self._slot_in) if not self._slot_out_h and not self._slot_in_h: raise ValueError('This channel does not have valid slots.') def _messaging_patterns(self): """ _messaging_patterns() Implement to return a string that specifies the pattern for sending and receiving, respecitively. """ raise NotImplementedError() def close(self): """ close() Close the channel, i.e. unregisters this channel at the context. A closed channel cannot be reused. Future attempt to send() messages will result in an IOError being raised. Messages currently in the channel's queue can still be recv()'ed, but no new messages will be delivered at this channel. """ # We keep a reference to the context, otherwise we need locks # The context clears the reference to this channel when unregistering. self._closed = True self._context._unregister_channel(self) def _send(self, message, dest_id=0, dest_seq=0): """ _send(message, dest_id=0, dest_seq=0) Sends a message of raw bytes without checking whether they're bytes. Optionally, dest_id and dest_seq represent the message that this message replies to. These are used for the request/reply pattern. Returns the package that will be send (or None). The context will set _source_id on the package right before sending it away. """ # Check if still open if self._closed: className = self.__class__.__name__ raise IOError("Cannot send from closed %s %i." % (className, id(self))) if message: # If send_locked, wait at most one second if self._is_send_locked: self._send_condition.acquire() try: self._send_condition.wait(1.0) # wait for notify finally: self._send_condition.release() if time.time() > self._is_send_locked: self._is_send_locked = 0 # Push it on the queue as a package slot = self._slot_out_h cid = self._context._id p = Package(message, slot, cid, 0, dest_id, dest_seq, 0) self._context._send_package(p) # Return package return p else: return None def _recv(self, block): """ _recv(block) Receive a package (or None). """ if block is True: # Block for 0.25 seconds so that KeyboardInterrupt works while not self._closed: try: return self._q_in.pop(0.25) except self._q_in.Empty: continue else: # Block normal try: return self._q_in.pop(block) except self._q_in.Empty: return None def _set_send_lock(self, value): """ _set_send_lock(self, value) Set or unset the blocking for the _send() method. """ # Set send lock variable. We adopt a timeout (10s) just in case # the SubChannel that locks the PubChannel gets disconnected and # is unable to unlock it. if value: self._is_send_locked = time.time() + 10.0 else: self._is_send_locked = 0 # Notify any threads that are waiting in _send() if not value: self._send_condition.acquire() try: self._send_condition.notifyAll() finally: self._send_condition.release() ## How packages are inserted in this channel for receiving def _inject_package(self, package): """ _inject_package(package) Same as _recv_package, but by definition do not block. _recv_package is overloaded in SubChannel. _inject_package is not. """ self._q_in.push(package) self._maybe_emit_received() def _recv_package(self, package): """ _recv_package(package) Put package in the queue. """ self._q_in.push(package) self._maybe_emit_received() def _maybe_emit_received(self): """ _maybe_emit_received() We want to emit a signal, but in such a way that multiple arriving packages result in a single emit. This methods only posts an event if it has not been done, or if the previous event has been handled. """ if not self._posted_received_event: self._posted_received_event = True event = yoton.events.Event(self._emit_received) yoton.app.post_event(event) def _emit_received(self): """ _emit_received() Emits the "received" signal. This method is called once new data has been received. However, multiple arrived messages may result in a single call to this method. There is also no guarantee that recv() has not been called in the mean time. Also sets the variabele so that a new event for this may be created. This method is called from the event loop. """ self._posted_received_event = False # Reset self.received.emit_now(self) # Received property sits on the BaseChannel because is is used by almost # all channels. Note that PubChannels never emit this signal as they # catch status messages from the SubChannel by overloading _recv_package(). @property def received(self): """ Signal that is emitted when new data is received. Multiple arrived messages may result in a single call to this method. There is no guarantee that recv() has not been called in the mean time. The signal is emitted with the channel instance as argument. """ return self._received_signal ## Properties @property def pending(self): """ Get the number of pending incoming messages. """ return len(self._q_in) @property def closed(self): """ Get whether the channel is closed. """ return self._closed @property def slot_outgoing(self): """ Get the outgoing slot name. """ return self._slot_out @property def slot_incoming(self): """ Get the incoming slot name. """ return self._slot_in iep-3.7/iep/yoton/channels/__init__.py0000664000175000017500000000146512271043447020217 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ The channel classes represent the mechanism for the user to send messages into the network and receive messages from it. A channel needs a context to function; the context represents a node in the network. """ from yoton.channels.message_types import MessageType, TEXT, BINARY, OBJECT from yoton.channels.channels_base import BaseChannel from yoton.channels.channels_pubsub import PubChannel, SubChannel, select_sub_channel from yoton.channels.channels_reqrep import ReqChannel, RepChannel, Future, TimeoutError, CancelledError from yoton.channels.channels_state import StateChannel from yoton.channels.channels_file import FileWrapper iep-3.7/iep/yoton/channels/channels_reqrep.py0000664000175000017500000007610112271043447021630 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.channels.channels_reqprep Defines the channel classes for the req/rep pattern. """ import time import threading import yoton from yoton.misc import basestring, bytes, str from yoton.misc import Property, getErrorMsg from yoton.channels import BaseChannel, OBJECT # For the req/rep channels to negotiate (simple load balancing) REQREP_SEQ_REF = 2**63 # Define object to recognize errors ERROR_OBJECT = 'yoton_ERROR_HANDLING_REQUEST' # Define exceoptions class TimeoutError(Exception): pass class CancelledError(Exception): pass # # Try loading the exceptions from the concurrency framework # # (or maybe not; it makes yoton less lightweight) # try: # from concurrent.futures import TimeoutError, CancelledError # except ImportError: # pass class Future(object): """ Future(req_channel, req, request_id) The Future object represents the future result of a request done at a yoton.ReqChannel. It enables: * checking whether the request is done. * getting the result or the exception raised during handling the request. * canceling the request (if it is not yet running) * registering callbacks to handle the result when it is available """ def __init__(self, req_channel, req, request_id): # For being a Future object self._result = None self._status = 0 # 0:waiting, 1:running, 2:canceled, 3:error, 4:success self._callbacks = [] # For handling req/rep self._req_channel = req_channel self._req = req self._request_id = request_id self._rep = bytes() self._replier = 0 # For resending self._first_send_time = time.time() self._next_send_time = self._first_send_time + 0.5 self._auto_cancel_timeout = 10.0 def _send(self, msg): """ _send(msg) For sending pre-request messages 'req?', 'req-'. """ msg = msg.encode('utf-8') try: self._req_channel._send(msg, 0, self._request_id+REQREP_SEQ_REF) except IOError: # if self._closed, will call _send again, and catch IOerror, # which will result in one more call to cancel(). self.cancel() def _resend_if_necessary(self): """ _resend_if_necessary() Resends the pre-request message if we have not done so for the last 0.5 second. This will also auto-cancel the message if it is resend over 20 times. """ timetime = time.time() if self._status != 0: pass elif timetime > self._first_send_time + self._auto_cancel_timeout: self.cancel() elif timetime > self._next_send_time: self._send('req?') self._next_send_time = timetime + 0.5 def set_auto_cancel_timeout(self, timeout): """ set_auto_cancel_timeout(timeout): Set the timeout after which the call is automatically cancelled if it is not done yet. By default, this value is 10 seconds. If timeout is None, there is no limit to the wait time. """ if timeout is None: timeout = 999999999999999999.0 if timeout > 0: self._auto_cancel_timeout = float(timeout) else: raise ValueError('A timeout cannot be negative') def cancel(self): """ cancel() Attempt to cancel the call. If the call is currently being executed and cannot be cancelled then the method will return False, otherwise the call will be cancelled and the method will return True. """ if self._status == 1: # Running, cannot cancel return False elif self._status == 0: # Cancel now self._status = 2 self._send('req-') for fn in self._callbacks: yoton.call_later(fn, 0, self) return True else: # Already done or canceled return True def cancelled(self): """ cancelled() Return True if the call was successfully cancelled. """ return self._status == 2 def running(self): """ running() Return True if the call is currently being executed and cannot be cancelled. """ return self._status == 1 def done(self): """ done() Return True if the call was successfully cancelled or finished running. """ return self._status in [2,3,4] def _wait(self, timeout): """ _wait(timeout) Wait for the request to be handled for the specified amount of time. While waiting, the ReqChannel local event loop is called so that pre-request messages can be exchanged. """ # No timout means a veeeery long timeout if timeout is None: timeout = 999999999999999999.0 # Receive packages untill we receive the one we want, # or untill time runs out timestamp = time.time() + timeout while (self._status < 2) and (time.time() < timestamp): self._req_channel._process_events_local() time.sleep(0.01) # 10 ms def result(self, timeout=None): """ result(timeout=None) Return the value returned by the call. If the call hasn’t yet completed then this method will wait up to timeout seconds. If the call hasn’t completed in timeout seconds, then a TimeoutError will be raised. timeout can be an int or float. If timeout is not specified or None, there is no limit to the wait time. If the future is cancelled before completing then CancelledError will be raised. If the call raised, this method will raise the same exception. """ # Wait self._wait(timeout) # Return or raise error if self._status < 2 : raise TimeoutError('Result unavailable within the specified time.') elif self._status == 2: raise CancelledError('Result unavailable because request was cancelled.') elif self._status == 3: raise self._result else: return self._result def result_or_cancel(self, timeout=1.0): """ result_or_cancel(timeout=1.0) Return the value returned by the call. If the call hasn’t yet completed then this method will wait up to timeout seconds. If the call hasn’t completed in timeout seconds, then the call is cancelled and the method will return None. """ # Wait self._wait(timeout) # Return if self._status == 4: return self._result else: self.cancel() return None def exception(self, timeout=None): """ exception(timeout) Return the exception raised by the call. If the call hasn’t yet completed then this method will wait up to timeout seconds. If the call hasn’t completed in timeout seconds, then a TimeoutError will be raised. timeout can be an int or float. If timeout is not specified or None, there is no limit to the wait time. If the future is cancelled before completing then CancelledError will be raised. If the call completed without raising, None is returned. """ # Wait self._wait(timeout) # Return or raise error if self._status < 2 : raise TimeoutError('Exception unavailable within the specified time.') elif self._status == 2: raise CancelledError('Exception unavailable because request was cancelled.') elif self._status == 3: return self._result else: return None # no exception def add_done_callback(self, fn): """ add_done_callback(fn) Attaches the callable fn to the future. fn will be called, with the future as its only argument, when the future is cancelled or finishes running. Added callables are called in the order that they were added. If the callable raises a Exception subclass, it will be logged and ignored. If the callable raises a BaseException subclass, the behavior is undefined. If the future has already completed or been cancelled, fn will be called immediately. """ # Check if not hasattr(fn, '__call__'): raise ValueError('add_done_callback expects a callable.') # Add if self.done(): yoton.call_later(fn, 0, self) else: self._callbacks.append(fn) def set_running_or_notify_cancel(self): """ set_running_or_notify_cancel() This method should only be called by Executor implementations before executing the work associated with the Future and by unit tests. If the method returns False then the Future was cancelled, i.e. Future.cancel() was called and returned True. If the method returns True then the Future was not cancelled and has been put in the running state, i.e. calls to Future.running() will return True. This method can only be called once and cannot be called after Future.set_result() or Future.set_exception() have been called. """ if self._status == 2: return False elif self._status == 0: self._status = 1 return True else: raise RuntimeError('set_running_or_notify_cancel should be called when in a clear state.') def set_result(self, result): """ set_result(result) Sets the result of the work associated with the Future to result. This method should only be used by Executor implementations and unit tests. """ # Set result if indeed in running state if self._status == 1: self._result = result self._status = 4 for fn in self._callbacks: yoton.call_later(fn, 0, self) def set_exception(self, exception): """ set_exception(exception) Sets the result of the work associated with the Future to the Exception exception. This method should only be used by Executor implementations and unit tests. """ # Check if isinstance(exception, basestring): exception = Exception(exception) if not isinstance(exception, Exception): raise ValueError('exception must be an Exception instance.') # Set result if indeed in running state if self._status == 1: self._result = exception self._status = 3 for fn in self._callbacks: yoton.call_later(fn, 0, self) class ReqChannel(BaseChannel): """ ReqChannel(context, slot_base) The request part of the request/reply messaging pattern. A ReqChannel instance sends request and receive the corresponding replies. The requests are replied by a yoton.RepChannel instance. This class adopts req/rep in a remote procedure call (RPC) scheme. The handling of the result is done using a yoton.Future object, which follows the approach specified in PEP 3148. Note that for the use of callbacks, the yoton event loop must run. Basic load balancing is performed by first asking all potential repliers whether they can handle a request. The actual request is then send to the first replier to respond. Parameters ---------- context : yoton.Context instance The context that this channel uses to send messages in a network. slot_base : string The base slot name. The channel appends an extension to indicate message type and messaging pattern to create the final slot name. The final slot is used to connect channels at different contexts in a network Usage ----- One performs a call on a virtual method of this object. The actual method is executed by the yoton.RepChannel instance. The method can be called with normal and keyword arguments, which can be (a combination of): None, bool, int, float, string, list, tuple, dict. Example ------- # Fast, but process is idling when waiting for the response. reply = req.add(3,4).result(2.0) # Wait two seconds # Asynchronous processing, but no waiting. def reply_handler(future): ... # Handle reply future = req.add(3,4) future.add_done_callback(reply_handler) """ # Notes on load balancing: # # Firstly, each request has an id. Which is an integer number # which is increased at each new request. The id is send via # the dest_seq. For pre-request messages an offset is added # to recognize these meta-messages. # # We use an approach I call pre-request. The req channel sends # a pre-request to all repliers (on the same slot) asking whether # they want to handle a request. The content is 'req?' and the # dest_seq is the request-id + offset. # # The repliers collects and queues all pre-requests. It will then # send a reply to acknowledge the first received pre-request. The # content is 'req!' and dest_seq is again request-id + offset. # # The replier is now in a state of waiting for the actual request. # It will not acknowledge pre-requests, but keeps queing them. # # Upon receiving the acknowledge, the requester sends (directed # at only the first replier to acknowledge) the real request. # The content is the real request and dest_seq is the request-id. # Right after this, a pre-request cancel message is sent to all # repliers. The content is 'req-' and dest_seq is request-id + offset. # # When a replier receives a pre-request cancel message, it will # remove the pre-request from the list. If this cancels the # request it was currently waiting for, the replier will go back # to its default state, and acknowledge the first next pre-request # in the queue. # # When the replier answers a request, it will go back to its default # state, and acknowledge the first next pre-request in the queue. # The replier tries to answer as quickly to pre-requests as possible. # # On the request channel, a dictionary of request items is maintained. # Each item has an attribute specifying whether a replier has # acknowledged it (and which one). def __init__(self, context, slot_base): BaseChannel.__init__(self, context, slot_base, OBJECT) # Queue with pending requests self._request_items = {} # Timeout self._next_recheck_time = time.time() + 0.2 # Counter self._request_counter = 0 # The req channel is always in event driven mode self._run_mode = 1 # Bind signals to process the events for this channel # Bind to "received" signal for quick response and a timer # so we can resend requests if we do not receive anything. self.received.bind(self._process_events_local) self._timer = yoton.events.Timer(0.5, False) self._timer.bind(self._process_events_local) self._timer.start() def _messaging_patterns(self): return 'req-rep', 'rep-req' def __getattr__(self, name): if name.startswith('_'): return object.__getattribute__(self, name) try: return object.__getattribute__(self, name) except AttributeError: def proxy_function(*args, **kwargs): return self._handle_request(name, *args, **kwargs) return proxy_function def _handle_request(self, name, *args, **kwargs): """ _handle_request(request, callback, **kwargs) Post a request. This creates a Future instance and stores it. A message is send asking any repliers to respond. The actual request will be send when a reply to our pre-request is received. This all hapens in the yoton event loop. """ # Create request object request = name, args, kwargs # Check and convert request message bb = self.message_to_bytes(request) # Get new request id request_id = self._request_counter = self._request_counter + 1 # Create new item for this request and store under the request id item = Future(self, bb, request_id) self._request_items[request_id] = item # Send pre-request (ask repliers who want to reply to a request) item._send('req?') # Return the Future instance return item def _resend_requests(self): """ _resend_requests() See if we should resend our older requests. Periodically calling this method enables doing a request while the replier is not yet attached to the network. This also allows the Future objects to cancel themselves if it takes too long. """ for request_id in [key for key in self._request_items.keys()]: item = self._request_items[request_id] # Remove items that are really old if item.cancelled(): self._request_items.pop(request_id) else: item._resend_if_necessary() def _recv_item(self): """ _recv_item() Receive item. If a reply is send that is an acknowledgement of a replier that it wants to handle our request, the correpsonding request is send to that replier. This is a kind of mini-event loop thingy that should be called periodically to keep things going. """ # Receive package package = self._recv(False) if not package: return # Get the package reply id and sequence number dest_id = package._dest_id request_id = package._dest_seq # Check dest_id if not dest_id: return # We only want messages that are directed directly at us elif dest_id != self._context._id: return # This should not happen; context should make sure if request_id > REQREP_SEQ_REF: # We received a reply to us asking who can handle the request. # Get item, send actual request. We set the replier to indicate # that this request is being handled, and we can any further # acknowledgements from other repliers. request_id -= REQREP_SEQ_REF item = self._request_items.get(request_id, None) if item and not item._replier: # Status now changes to "running" canceling is not possible ok = item.set_running_or_notify_cancel() if not ok: return # Send actual request to specific replier try: self._send(item._req, package._source_id, request_id) except IOError: pass # Channel closed, will auto-cancel at item._send() item._replier = package._source_id # mark as being processed # Send pre-request-cancel message to everyone item._send('req-') elif request_id > 0: # We received a reply to an actual request # Get item, remove from queue, set reply, return item = self._request_items.pop(request_id, None) if item: item._rep = package._data return item def _process_events_local(self, dummy=None): """ _process_events_local() Process events only for this object. Used by _handle_now(). """ # Check periodically if we should resend (or clean up) old requests if time.time() > self._next_recheck_time: self._resend_requests() self._next_recheck_time = time.time() + 0.1 # Process all received messages while self.pending: item = self._recv_item() if item: reply = self.message_from_bytes(item._rep) if isinstance(reply, tuple) and len(reply)==2 and reply[0]==ERROR_OBJECT: item.set_exception(reply[1]) else: item.set_result(reply) class RepChannel(BaseChannel): """ RepChannel(context, slot_base) The reply part of the request/reply messaging pattern. A RepChannel instance receives request and sends the corresponding replies. The requests are send from a yoton.ReqChannel instance. This class adopts req/rep in a remote procedure call (RPC) scheme. To use a RepChannel, subclass this class and implement the methods that need to be available. The reply should be (a combination of) None, bool, int, float, string, list, tuple, dict. This channel needs to be set to event or thread mode to function (in the first case yoton events need to be processed too). To stop handling events again, use set_mode('off'). Parameters ---------- context : yoton.Context instance The context that this channel uses to send messages in a network. slot_base : string The base slot name. The channel appends an extension to indicate message type and messaging pattern to create the final slot name. The final slot is used to connect channels at different contexts in a network """ def __init__(self, context, slot_base): BaseChannel.__init__(self, context, slot_base, OBJECT) # Pending pre-requests self._pre_requests = [] # Current pre-request and time that it was acknowledged self._pre_request = None self._pre_request_time = 0 # Create thread self._thread = ThreadForReqChannel(self) # Create timer (do not start) self._timer = yoton.events.Timer(2.0, False) self._timer.bind(self._process_events_local) # By default, the replier is off self._run_mode = 0 def _messaging_patterns(self): return 'rep-req', 'req-rep' # Node that setters for normal and event_driven mode are specified in # channels_base.py def set_mode(self, mode): """ set_mode(mode) Set the replier to its operating mode, or turn it off. Modes: * 0 or 'off': do not process requests * 1 or 'event': use the yoton event loop to process requests * 2 or 'thread': process requests in a separate thread """ if isinstance(mode, basestring): mode = mode.lower() if mode in [0, 'off']: self._run_mode = 0 elif mode in [1, 'event', 'event-driven']: self._run_mode = 1 self.received.bind(self._process_events_local) self._timer.start() elif mode in [2, 'thread', 'thread-driven']: self._run_mode = 2 if not self._thread.isAlive(): self._thread.start() else: raise ValueError('Invalid mode for ReqChannel instance.') def _handle_request(self, message): """ _handle_request(message) This method is called for each request, and should return a reply. The message contains the name of the method to call, this function calls that method. """ # Get name and args name, args, kwargs = message # Get function if not hasattr(self, name): raise RuntimeError("Method '%s' not implemented." % name) else: func = getattr(self, name) # Call return func(*args, **kwargs) def _acknowledge_next_pre_request(self): # Cancel current pre-request ourselves if it takes too long. # Failsafe, only for if resetting by requester fails somehow. if time.time() - self._pre_request_time > 10.0: self._pre_request = None # Send any pending pre requests if self._pre_requests and not self._pre_request: # Set current pre-request and its ack time package = self._pre_requests.pop(0) self._pre_request = package self._pre_request_time = time.time() # Send acknowledgement msg = 'req!'.encode('utf-8') try: self._send(msg, package._source_id, package._dest_seq) except IOError: pass # Channel closed, nothing we can do about that # #print 'ack', self._context.id, package._dest_seq-REQREP_SEQ_REF def _replier_iteration(self, package): """ _replier_iteration() Do one iteration: process one request. """ # Get request id request_id = package._dest_seq if request_id > REQREP_SEQ_REF: # Pre-request stuff # Remove offset request_id -= REQREP_SEQ_REF # Get action and pre request id action = package._data.decode('utf-8') # Remove pre-request from pending requests in case of both actions: # Cancel pending pre-request, prevent stacking of the same request. for prereq in [prereq for prereq in self._pre_requests]: if ( package._source_id == prereq._source_id and package._dest_seq == prereq._dest_seq): self._pre_requests.remove(prereq) if action == 'req-': # Cancel current pre-request if ( self._pre_request and package._source_id == self._pre_request._source_id and package._dest_seq == self._pre_request._dest_seq): self._pre_request = None elif action == 'req?': # New pre-request self._pre_requests.append(package) else: # We are asked to handle an actual request # We can reset the state self._pre_request = None # Get request request = self.message_from_bytes(package._data) # Get reply try: reply = self._handle_request(request) except Exception: reply = ERROR_OBJECT, getErrorMsg() print('yoton.RepChannel: error handling request:') print(reply[1]) # Send reply if True: try: bb = self.message_to_bytes(reply) self._send(bb, package._source_id, request_id) except IOError: pass # Channel is closed except Exception: # Probably wrong type of reply returned by handle_request() print('Warning: request could not be send:') print(getErrorMsg()) def _process_events_local(self, dummy=None): """ _process_events_local() Called when a message (or more) has been received. """ # If closed, unregister from signal and stop the timer if self.closed or self._run_mode!=1: self.received.unbind(self._process_events_local) self._timer.stop() # Iterate while we receive data while True: package = self._recv(False) if package: self._replier_iteration(package) self._acknowledge_next_pre_request() else: # We always enter this the last time self._acknowledge_next_pre_request() return def echo(self, arg1, sleep=0.0): """ echo(arg1, sleep=0.0) Default procedure that can be used for testing. It returns a tuple (first_arg, context_id) """ time.sleep(sleep) return arg1, hex(self._context.id) class ThreadForReqChannel(threading.Thread): """ ThreadForReqChannel(channel) Thread to run a RepChannel in threaded mode. """ def __init__(self, channel): threading.Thread.__init__(self) # Check channel if not isinstance(channel, RepChannel): raise ValueError('The given channel must be a REP channel.') # Store channel self._channel = channel # Make deamon self.setDaemon(True) def run(self): """ run() The handler's main loop. """ # Get ref to channel. Remove ref from instance channel = self._channel del self._channel while True: # Stop? if channel.closed or channel._run_mode!=2: break # Wait for data (blocking, look Rob, without spinlocks :) package = channel._recv(2.0) if package: channel._replier_iteration(package) channel._acknowledge_next_pre_request() else: channel._acknowledge_next_pre_request() iep-3.7/iep/yoton/channels/message_types.py0000664000175000017500000002215512271043447021327 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.channels.message_types Defines a few basic message_types for the channels. A MessageType object defines how a message of that type should be converted to bytes and vice versa. The Packer and Unpacker classes for the ObjectMessageType are based on the xdrrpc Python module by Rob Reilink and Windel Bouwman. """ import sys import struct from yoton.misc import bytes, basestring, long # To decode P2k strings that are not unicode if sys.__stdin__ and sys.__stdin__.encoding: STDINENC = sys.__stdin__.encoding elif sys.stdin and sys.stdin.encoding: STDINENC = sys.stdin.encoding else: STDINENC = 'utf-8' class MessageType(object): """ MessageType() Instances of this class are used to convert messages to bytes and bytes to messages. Users can easily inherit from this class to make channels work for user specific message types. Three methods should be overloaded: * message_to_bytes() - given a message, returns bytes * message_from_bytes() - given bytes, returns the message * message_type_name() - a string (for example 'text', 'array') The message_type_name() method is used by the channel to add an extension to the slot name, such that only channels of the same message type (well, with the same message type name) can connect. """ def message_to_bytes(self, message): raise NotImplementedError() def message_from_bytes(self, bb): raise NotImplementedError() def message_type_name(self): raise NotImplementedError() class BinaryMessageType(MessageType): """ BinaryMessageType() To let channels handle binary messages. Available as yoton.BINARY. """ def message_type_name(self): return 'bin' def message_to_bytes(self, message): if not isinstance(message, bytes): raise ValueError("Binary channel requires byte messages.") return message def message_from_bytes(self, bb): return bb class TextMessageType(MessageType): """ BinaryMessageType() To let channels handle Unicode text messages. Available as yoton.TEXT. """ def message_type_name(self): return 'txt' def message_to_bytes(self, message): # Check if not isinstance(message, basestring): raise ValueError("Text channel requires string messages.") # If using py2k and the string is not unicode, make unicode first # by try encoding using UTF-8. When a piece of code stored # in a unicode string is executed, str objects are utf-8 encoded. # Otherwise they are encoded using __stdin__.encoding. In specific # cases, a non utf-8 encoded str might be succesfully encoded # using utf-8, but this is rare. Since I would not # know how to tell the encoding beforehand, we'll take our # chances... Note that in IEP (for which this package was created, # all executed code is unicode, so str instrances are always # utf-8 encoded. if isinstance(message, bytes): try: message = message.decode('utf-8') except UnicodeError: try: message = message.decode(STDINENC) except UnicodeError: # Probably not really a string then? message = repr(message) # Encode and send return message.encode('utf-8') def message_from_bytes(self, bb): return bb.decode('utf-8') class ObjectMessageType(MessageType): """ ObjectMessageType() To let channels handle messages consisting of any of the following Python objects: None, bool, int, float, string, list, tuple, dict. Available as yoton.OBJECT. """ def message_type_name(self): return 'obj' def message_to_bytes(self, message): packer = Packer() packer.pack_object(message) return packer.get_buffer() def message_from_bytes(self, bb): if bb: unpacker = Unpacker(bb) return unpacker.unpack_object() else: return None # Formats _FMT_TYPE = ' len(self._buf): raise EOFError else: self._pos = i2 return self._buf[i1:i2] def read_number(self): n, = struct.unpack(' len(self._buf): raise EOFError else: self._pos = i2 data = self._buf[i1:i2] return struct.unpack(fmt, data)[0] def unpack_object(self): object_type = self.unpack(_FMT_TYPE, 1) if object_type == _TYPE_NONE: return None elif object_type == _TYPE_BOOL: return bool( self.unpack(_FMT_BOOL, 1) ) elif object_type == _TYPE_INT: return self.unpack(_FMT_INT, 8) elif object_type == _TYPE_FLOAT: return self.unpack(_FMT_FLOAT, 8) elif object_type == _TYPE_STRING: n = self.read_number() return self.read(n).decode('utf-8') elif object_type == _TYPE_LIST: object = [] for i in range(self.read_number()): object.append( self.unpack_object() ) return object elif object_type == _TYPE_TUPLE: object = [] for i in range(self.read_number()): object.append( self.unpack_object() ) return tuple(object) elif object_type == _TYPE_DICT: object = {} for i in range(self.read_number()): key = self.unpack_object() object[key] = self.unpack_object() return object else: raise ValueError("Unsupported type: %s" % repr(object_type)) # Define constants TEXT = TextMessageType() BINARY = BinaryMessageType() OBJECT = ObjectMessageType() if __name__ == '__main__': # Test s = {} s['foo'] = 3 s['bar'] = 9 s['empty'] = [] s[(2,'aa',3)] = ['pretty', ('nice', 'eh'), 4] bb = OBJECT.message_to_bytes(s) s2 = OBJECT.message_from_bytes(bb) print(s) print(s2) iep-3.7/iep/yoton/channels/channels_pubsub.py0000664000175000017500000003251412271043447021632 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.channels.channels_pubsub Defines the channel classes for the pub/sub pattern. """ import time import sys import yoton from yoton.misc import basestring, bytes, str, xrange from yoton.misc import Property, getErrorMsg from yoton.channels import BaseChannel from yoton.core import Package QUEUE_NULL = 0 QUEUE_OK = 1 QUEUE_FULL = 2 class PubChannel(BaseChannel): """ PubChannel(context, slot_base, message_type=yoton.TEXT) The publish part of the publish/subscribe messaging pattern. Sent messages are received by all yoton.SubChannel instances with the same slot. There are no limitations for this channel if events are not processed. Parameters ---------- context : yoton.Context instance The context that this channel uses to send messages in a network. slot_base : string The base slot name. The channel appends an extension to indicate message type and messaging pattern to create the final slot name. The final slot is used to connect channels at different contexts in a network message_type : yoton.MessageType instance (default is yoton.TEXT) Object to convert messages to bytes and bytes to messages. Users can create their own message_type class to let channels any type of message they want. """ def __init__(self, *args, **kwargs): BaseChannel.__init__(self, *args, **kwargs) self._source_set = set() def _messaging_patterns(self): return 'pub-sub', 'sub-pub' def send(self, message): """ send(message) Send a message over the channel. What is send as one message will also be received as one message. The message is queued and delivered to all corresponding SubChannels (i.e. with the same slot) in the network. """ self._send( self.message_to_bytes(message) ) def _recv_package(self, package): """ Overloaded to set blocking mode. Do not call _maybe_emit_received(), a PubChannel never emits the "received" signal. """ message = package._data.decode('utf-8') source_id = package._source_id # Keep track of who's queues are full if message == 'full': self._source_set.add(source_id) else: self._source_set.discard(source_id) # Set lock if there is a channel with a full queue, # Unset if there are none if self._source_set: self._set_send_lock(True) #sys.stderr.write('setting lock\n') else: self._set_send_lock(False) #sys.stderr.write('unsetting lock\n') class SubChannel(BaseChannel): """ SubChannel(context, slot_base, message_type=yoton.TEXT) The subscribe part of the publish/subscribe messaging pattern. Received messages were sent by a yoton.PubChannel instance at the same slot. This channel can be used as an iterator, which yields all pending messages. The function yoton.select_sub_channel can be used to synchronize multiple SubChannel instances. If no events being processed this channel works as normal, except that the received signal will not be emitted, and sync mode will not work. Parameters ---------- context : yoton.Context instance The context that this channel uses to send messages in a network. slot_base : string The base slot name. The channel appends an extension to indicate message type and messaging pattern to create the final slot name. The final slot is used to connect channels at different contexts in a network message_type : yoton.MessageType instance (default is yoton.TEXT) Object to convert messages to bytes and bytes to messages. Users can create their own message_type class to let channels any type of message they want. """ def __init__(self, *args, **kwargs): BaseChannel.__init__(self, *args, **kwargs) # To detect when to block the sending side self._queue_status = QUEUE_NULL self._queue_status_timeout = 0 self._HWM = 32 self._LWM = 16 # Automatically check queue status when new data # enters the system self.received.bind(self._check_queue_status) def _messaging_patterns(self): return 'sub-pub', 'pub-sub' def __iter__(self): return self def __next__(self): # Python 3.x m = self.recv(False) if m: return m else: raise StopIteration() def next(self): # Python 2.x """ next() Return the next message, or raises StopIteration if non available. """ return self.__next__() ## For sync mode def set_sync_mode(self, value): """ set_sync_mode(value) Set or unset the SubChannel in sync mode. When in sync mode, all channels that send messages to this channel are blocked if the queue for this SubChannel reaches a certain size. This feature can be used to limit the rate of senders if the consumer (i.e. the one that calls recv()) cannot keep up with processing the data. This feature requires the yoton event loop to run at the side of the SubChannel (not necessary for the yoton.PubChannel side). """ value = bool(value) # First reset block status if necessary if self._queue_status == QUEUE_FULL: self._send_block_message_to_senders('ok') # Set new queue status flag if value: self._queue_status = QUEUE_OK else: self._queue_status = QUEUE_NULL def _send_block_message_to_senders(self, what): """ _send_block_message_to_senders(what) Send a message to the PubChannel side to make it block/unblock. """ # Check if not self._context.connection_count: return # Send try: self._send(what.encode('utf-8')) except IOError: # If self._closed self._check_queue_status = QUEUE_NULL def _check_queue_status(self, dummy=None): """ _check_queue_status() Check the queue status. Returns immediately unless this receiving channel runs in sync mode. If the queue is above a certain size, will send out a package that will make the sending side block. If the queue is below a certain size, will send out a package that will make the sending side unblock. """ if self._queue_status == QUEUE_NULL: return elif len(self._q_in) > self._HWM: if self._queue_status == QUEUE_OK: self._queue_status = QUEUE_FULL self._queue_status_timeout = time.time() + 4.0 self._send_block_message_to_senders('full') elif len(self._q_in) < self._LWM: if self._queue_status == QUEUE_FULL: self._queue_status = QUEUE_OK self._queue_status_timeout = time.time() + 4.0 self._send_block_message_to_senders('ok') # Resend every so often. After 10s the PubChannel will unlock itself if self._queue_status_timeout < time.time(): self._queue_status_timeout = time.time() + 4.0 if self._queue_status == QUEUE_OK: self._send_block_message_to_senders('ok') else: self._send_block_message_to_senders('full') ## Receive methods def recv(self, block=True): """ recv(block=True) Receive a message from the channel. What was send as one message is also received as one message. If block is False, returns empty message if no data is available. If block is True, waits forever until data is available. If block is an int or float, waits that many seconds. If the channel is closed, returns empty message. """ # Check queue status, maybe we need to block the sender self._check_queue_status() # Get package package = self._recv(block) # Return message content or None if package is not None: return self.message_from_bytes(package._data) else: return self.message_from_bytes(bytes()) def recv_all(self): """ recv_all() Receive a list of all pending messages. The list can be empty. """ # Check queue status, maybe we need to block the sender self._check_queue_status() # Pop all messages and return as a list pop = self._q_in.pop packages = [pop() for i in xrange(len(self._q_in))] return [self.message_from_bytes(p._data) for p in packages] def recv_selected(self): """ recv_selected() Receive a list of messages. Use only after calling yoton.select_sub_channel with this channel as one of the arguments. The returned messages are all received before the first pending message in the other SUB-channels given to select_sub_channel. The combination of this method and the function select_sub_channel enables users to combine multiple SUB-channels in a way that preserves the original order of the messages. """ # No need to check queue status, we've done that in the # _get_pending_sequence_numbers() method # Prepare q = self._q_in ref_seq = self._ref_seq popped = [] # Pop all messages that have sequence number lower than reference try: for i in xrange(len(q)): part = q.pop() if part._recv_seq > ref_seq: q.insert(part) # put back in queue break else: popped.append(part) except IndexError: pass # Done; return messages return [self.message_from_bytes(p._data) for p in popped] def _get_pending_sequence_numbers(self): """ _get_pending_sequence_numbers() Get the sequence numbers of the first and last pending messages. Returns (-1,-1) if no messages are pending. Used by select_sub_channel() to determine which channel should be read from first and what the reference sequence number is. """ # Check queue status, maybe we need to block the sender self._check_queue_status() # Peek try: q = self._q_in return q.peek(0)._recv_seq, q.peek(-1)._recv_seq + 1 except IndexError: return -1, -1 def select_sub_channel(*args): """ select_sub_channel(channel1, channel2, ...) Returns the channel that has the oldest pending message of all given yoton.SubCannel instances. Returns None if there are no pending messages. This function can be used to read from SubCannels instances in the order that the messages were send. After calling this function, use channel.recv_selected() to obtain all messages that are older than any pending messages in the other given channels. """ # Init smallest_seq1 = 99999999999999999999999999 smallest_seq2 = 99999999999999999999999999 first_channel = None # For each channel ... for channel in args: # Check if channel is of right type if not isinstance(channel, SubChannel): raise ValueError('select_sub_channel() only accepts SUB channels.') # Get and check sequence seq1, seq2 = channel._get_pending_sequence_numbers() if seq1 >= 0: if seq1 < smallest_seq1: # Cannot go beyond number of packages in queue, # or than seq1 of earlier selected channel. smallest_seq2 = min(smallest_seq1, smallest_seq2, seq2) # Store smallest_seq1 = seq1 first_channel = channel else: # The first_channel cannot go beyond the 1st package in THIS queue smallest_seq2 = min(smallest_seq2, seq1) # Set flag at channel and return if first_channel: first_channel._ref_seq = smallest_seq2 return first_channel else: return None iep-3.7/iep/yoton/channels/channels_state.py0000664000175000017500000001125212271043447021446 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.channels.channels_state Defines the channel class for state. """ from yoton.misc import basestring, bytes, str, long from yoton.misc import Property from yoton.channels import BaseChannel class StateChannel(BaseChannel): """ StateChannel(context, slot_base, message_type=yoton.TEXT) Channel class for the state messaging pattern. A state is synchronized over all state channels of the same slot. Each channel can send (i.e. set) the state and recv (i.e. get) the current state. Note however, that if two StateChannel instances set the state around the same time, due to the network delay, it is undefined which one sets the state the last. The context will automatically call this channel's send_last() method when a new context enters the network. The recv() call is always non-blocking and always returns the last received message: i.e. the current state. There are no limitations for this channel if events are not processed, except that the received signal is not emitted. Parameters ---------- context : yoton.Context instance The context that this channel uses to send messages in a network. slot_base : string The base slot name. The channel appends an extension to indicate message type and messaging pattern to create the final slot name. The final slot is used to connect channels at different contexts in a network message_type : yoton.MessageType instance (default is yoton.TEXT) Object to convert messages to bytes and bytes to messages. Users can create their own message_type class to let channels any type of message they want. """ def __init__(self, *args, **kwargs): BaseChannel.__init__(self, *args, **kwargs) # Variables to hold the current state. We use only the message # as a reference, so we dont need a lock. # The package is used to make _recv() function more or less, # and to be able to determine if a state was set (because the # message may be set to None) self._current_package = None self._current_message = self.message_from_bytes(bytes()) def _messaging_patterns(self): return 'state', 'state' def send(self, message): """ send(message) Set the state of this channel. The state-message is queued and send over the socket by the IO-thread. Zero-length messages are ignored. """ # Send message only if it is different from the current state # set current_message by unpacking the send binary. This ensures # that if someone does this, things still go well: # a = [1,2,3] # status.send(a) # a.append(4) # status.send(a) if message != self._current_message: self._current_package = self._send( self.message_to_bytes(message) ) self._current_message = self.message_from_bytes(self._current_package._data) def send_last(self): """ send_last() Resend the last message. """ if self._current_package is not None: self._send( self.message_to_bytes(self._current_message) ) def recv(self, block=False): """ recv(block=False) Get the state of the channel. Always non-blocking. Returns the most up to date state. """ return self._current_message def _recv_package(self, package): """ _recv_package(package) Bypass queue and just store it in a variable. """ self._current_message = self.message_from_bytes(package._data) self._current_package = package # self._maybe_emit_received() def _inject_package(self, package): """ Non-blocking version of recv_package. Does the same. """ self._current_message = self.message_from_bytes(package._data) self._current_package = package # self._maybe_emit_received() def _recv(self, block=None): """ _recv(block=None) Returns the last received or send set package. The package may not reflect the current state. """ return self._current_package iep-3.7/iep/yoton/misc.py0000664000175000017500000004264212421724362015621 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. """ Module yoton.misc Defines a few basic constants, classes and functions. Most importantly, it defines a couple of specific buffer classes that are used for the low-level messaging. """ import os, sys, time import struct import socket import threading import random from collections import deque # Version dependent defs V2 = sys.version_info[0] == 2 if V2: if sys.platform.startswith('java'): import __builtin__ as D # Jython else: D = __builtins__ if not isinstance(D, dict): D = D.__dict__ bytes = D['str'] str = D['unicode'] xrange = D['xrange'] basestring = basestring long = long else: basestring = str # to check if instance is string bytes, str = bytes, str long = int # for the port xrange = range def Property(function): """ Property(function) A property decorator which allows to define fget, fset and fdel inside the function. Note that the class to which this is applied must inherit from object! Code based on an example posted by Walker Hale: http://code.activestate.com/recipes/410698/#c6 """ # Define known keys known_keys = 'fget', 'fset', 'fdel', 'doc' # Get elements for defining the property. This should return a dict func_locals = function() if not isinstance(func_locals, dict): raise RuntimeError('Property function should "return locals()".') # Create dict with kwargs for property(). Init doc with docstring. D = {'doc': function.__doc__} # Copy known keys. Check if there are invalid keys for key in func_locals.keys(): if key in known_keys: D[key] = func_locals[key] else: raise RuntimeError('Invalid Property element: %s' % key) # Done return property(**D) def getErrorMsg(): """ getErrorMsg() Return a string containing the error message. This is usefull, because there is no uniform way to catch exception objects in Python 2.x and Python 3.x. """ # Get traceback info type, value, tb = sys.exc_info() # Store for debugging? if True: sys.last_type = type sys.last_value = value sys.last_traceback = tb # Print err = '' try: if not isinstance(value, (OverflowError, SyntaxError, ValueError)): while tb: err = "line %i of %s." % ( tb.tb_frame.f_lineno, tb.tb_frame.f_code.co_filename) tb = tb.tb_next finally: del tb return str(value) + "\n" + err def slot_hash(name): """ slot_hash(name) Given a string (the slot name) returns a number between 8 and 2**64-1 (just small enough to fit in a 64 bit unsigned integer). The number is used as a slot id. Slots 0-7 are reseved slots. """ fac = 0xd2d84a61 val = 0 offset = 8 for c in name: val += ( val>>3 ) + ( ord(c)*fac ) val += (val>>3) + (len(name)*fac) return offset + (val % (2**64-offset)) def port_hash(name): """ port_hash(name) Given a string, returns a port number between 49152 and 65535. (2**14 (16384) different posibilities) This range is the range for dynamic and/or private ports (ephemeral ports) specified by iana.org. The algorithm is deterministic, thus providing a way to map names to port numbers. """ fac = 0xd2d84a61 val = 0 for c in name: val += ( val>>3 ) + ( ord(c)*fac ) val += (val>>3) + (len(name)*fac) return 49152 + (val % 2**14) def split_address(address): """ split_address(address) -> (protocol, hostname, port) Split address in protocol, hostname and port. The address has the following format: "protocol://hostname:port". If the protocol is omitted, TCP is assumed. The hostname is the name or ip-address of the computer to connect to. One can use "localhost" for a connection that bypasses some network layers (and is not visible from the outside). One can use "publichost" for a connection at the current computers IP address that is visible from the outside. The port can be an integer, or a sting. In the latter case the integer port number is calculated using a hash. One can also use "portname+offset" to specify an integer offset for the port number. """ # Check if not isinstance(address, basestring): raise ValueError("Address should be a string.") if not ":" in address: raise ValueError("Address should be in format 'host:port'.") # Is the protocol explicitly defined (zeromq compatibility) protocol = '' if '://' in address: # Get protocol and stripped address tmp = address.split('://',1) protocol = tmp[0].lower() address = tmp[1] if not protocol: protocol = 'tcp' # Split tmp = address.split(':',1) host, port = tuple(tmp) # Process host if host.lower() == 'localhost': host = '127.0.0.1' if host.lower() == 'publichost': host = 'publichost' + '0' if host.lower().startswith('publichost') and host[10:] in '0123456789': index = int(host[10:]) hostname = socket.gethostname() tmp = socket.gethostbyname_ex(hostname) try: host = tmp[2][index] # This resolves to 127.0.1.1 on some Linuxes except IndexError: raise ValueError('Invalid index (%i) in public host addresses.' % index) # Process port try: port = int(port) except ValueError: # Convert to int, using a hash # Is there an offset? offset = 0 if "+" in port: tmp = port.split('+',1) port, offset = tuple(tmp) try: offset = int(offset) except ValueError: raise ValueError("Invalid offset in address") # Convert port = port_hash(port) + offset # Check port #if port < 1024 or port > 2**16: # raise ValueError("The port must be in the range [1024, 2^16>.") if port > 2**16: raise ValueError("The port must be in the range [0, 2^16>.") # Done return protocol, host, port class UID: """ UID Represents an 8-byte (64 bit) Unique Identifier. """ _last_timestamp = 0 def __init__(self, id=None): # Create nr consisting of two parts if id is None: self._nr = self._get_time_int() << 32 self._nr += self._get_random_int() elif isinstance(id, (int, long)): self._nr = id else: raise ValueError('The id given to UID() should be an int.') def __repr__(self): h = self.get_hex() return "" % (h[:8], h[8:]) def get_hex(self): """ get_hex() Get the hexadecimal representation of this UID. The returned string is 16 characters long. """ h = hex(self._nr) h = h[2:].rstrip('L') h = h.ljust(2*8, '0') return h def get_bytes(self): """ get_bytes() Get the UID as bytes. """ return struct.pack('= self._maxlen def empty(self): """ empty() Returns True if the number of elements is zero right now. Note that in theory, another thread might add an element right after this function returns. """ return len(self) == 0 def push(self, x): """ push(item) Add an item to the queue. If the queue is full, the oldest item in the queue, or the given item is discarted. """ condition = self._condition condition.acquire() try: q = self._q if len(q) < self._maxlen: # Add now and notify any waiting threads in get() q.append(x) condition.notify() # code at wait() procedes else: # Full, either discard or pop (no need to notify) if self._discard_mode == 1: q.popleft() # pop old q.append(x) elif self._discard_mode == 2: pass # Simply do not add finally: condition.release() def insert(self, x): """ insert(x) Insert an item at the front of the queue. A call to pop() will get this item first. This should be used in rare circumstances to give an item priority. This method never causes items to be discarted. """ condition = self._condition condition.acquire() try: self._q.appendleft(x) condition.notify() # code at wait() procedes finally: condition.release() def pop(self, block=True): """ pop(block=True) Pop the oldest item from the queue. If there are no items in the queue: * the calling thread is blocked until an item is available (if block=True, default); * an PackageQueue.Empty exception is raised (if block=False); * the calling thread is blocked for 'block' seconds (if block is a float). """ condition = self._condition condition.acquire() try: q = self._q if not block: # Raise empty if no items in the queue if not len(q): raise self.Empty() elif block is True: # Wait for notify (awakened does not guarantee len(q)>0) while not len(q): condition.wait() elif isinstance(block, float): # Wait if no items, then raise error if still no items if not len(q): condition.wait(block) if not len(q): raise self.Empty() else: raise ValueError('Invalid value for block in PackageQueue.pop().') # Return item return q.popleft() finally: condition.release() def peek(self, index=0): """ peek(index=0) Get an item from the queue without popping it. index=0 gets the oldest item, index=-1 gets the newest item. Note that index access slows to O(n) time in the middle of the queue (due to the undelying deque object). Raises an IndexError if the index is out of range. """ return self._q[index] def __len__(self): return self._q.__len__() def clear(self): """ clear() Remove all items from the queue. """ self._condition.acquire() try: self._q.clear() finally: self._condition.release() class TinyPackageQueue(PackageQueue): """ TinyPackageQueue(N1, N2, discard_mode='old', timeout=1.0) A queue implementation that can be used in blocking and non-blocking mode and allows peeking. The queue has a tiny-size (N1). When this size is reached, a call to push() blocks for up to timeout seconds. The real size (N2) is the same as in the PackageQueue class. The tinysize mechanism can be used to semi-synchronize a consumer and a producer, while still having a small queue and without having the consumer fully block. Uses a deque object for the queue and a threading.Condition for the blocking. """ def __init__(self, N1, N2, discard_mode='old', timeout=1.0): PackageQueue.__init__(self, N2, discard_mode) # Store limit above which the push() method will block self._tinylen = int(N1) # Store timeout self._timeout = timeout def push(self, x): """ push(item) Add an item to the queue. If the queue has >= n1 values, this function will block timeout seconds, or until an item is popped from another thread. """ condition = self._condition condition.acquire() try: q = self._q lq = len(q) if lq < self._tinylen: # We are on safe side. Wake up any waiting threads if queue was empty q.append(x) condition.notify() # pop() at wait() procedes elif lq < self._maxlen: # The queue is above its limit, but not full condition.wait(self._timeout) q.append(x) else: # Full, either discard or pop (no need to notify) if self._discard_mode == 1: q.popleft() # pop old q.append(x) elif self._discard_mode == 2: pass # Simply do not add finally: condition.release() def pop(self, block=True): """ pop(block=True) Pop the oldest item from the queue. If there are no items in the queue: * the calling thread is blocked until an item is available (if block=True, default); * a PackageQueue.Empty exception is raised (if block=False); * the calling thread is blocked for 'block' seconds (if block is a float). """ condition = self._condition condition.acquire() try: q = self._q if not block: # Raise empty if no items in the queue if not len(q): raise self.Empty() elif block is True: # Wait for notify (awakened does not guarantee len(q)>0) while not len(q): condition.wait() elif isinstance(block, float): # Wait if no items, then raise error if still no items if not len(q): condition.wait(block) if not len(q): raise self.Empty() else: raise ValueError('Invalid value for block in PackageQueue.pop().') # Notify if this pop would reduce the length below the threshold if len(q) <= self._tinylen: condition.notifyAll() # wait() procedes # Return item return q.popleft() finally: condition.release() def clear(self): """ clear() Remove all items from the queue. """ self._condition.acquire() try: lq = len(self._q) self._q.clear() if lq >= self._tinylen: self._condition.notify() finally: self._condition.release() iep-3.7/iep/yoton/connection.py0000664000175000017500000003127612271043447017027 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. import os import sys import time import threading import yoton from yoton.misc import basestring, bytes, str from yoton.misc import Property, getErrorMsg, UID # Minimum timout TIMEOUT_MIN = 0.5 # For the status STATUS_CLOSED = 0 STATUS_CLOSING = 1 STATUS_WAITING = 2 STATUS_HOSTING = 3 STATUS_CONNECTED = 4 STATUSMAP = ['closed', 'closing', 'waiting', 'hosting', 'connected', ] # Reasons to stop the connection STOP_DEFAULT_REASON = 'Closed on command.' STOP_UNSPECIFIED_PROBLEM = 'Unspecified problem' STOP_INVALID_REASON = 'Invalid stop reason specified (must be string).' STOP_TIMEOUT = "Connection timed out." # Can be used by user STOP_HANDSHAKE_TIMEOUT = "Handshake timed out." STOP_HANDSHAKE_FAILED = "Handshake failed." STOP_HANDSHAKE_SELF = "Handshake failed (context cannot connect to self)." STOP_CLOSED_FROM_THERE = "Closed from other end." class ConnectionCollection(list): """ ContextConnectionCollection() A list class that allows indexing using the name of the required Connection instance. """ def __getitem__(self, key): if isinstance(key, basestring): if not key: raise KeyError('An empty string is not a valid key.') for c in self: if c.name == key: return c else: raise KeyError('No connection know by the name %s' % key) else: return list.__getitem__(self, key) class Connection(object): """ Connection(context, name='') Abstract base class for a connection between two Context objects. This base class defines the full interface; subclasses only need to implement a few private methods. The connection classes are intended as a simple interface for the user, for example to query port number, and be notified of timeouts and closing of the connection. All connection instances are intended for one-time use. To make a new connection, instantiate a new Connection object. After instantiation, either _bind() or _connect() should be called. """ def __init__(self, context, name=''): # Store context and name self._context = context self._name = name # Init hostname and port self._hostname1 = '' self._hostname2 = '' self._port1 = 0 self._port2 = 0 # Init id and pid of target context (set during handshake) # We can easily retrieve our own id and pid; no need to store self._id2 = 0 self._pid2 = 0 # Timeout value (if no data is received for this long, # the timedout signal is fired). Because we do not know the timeout # that the other side uses, we apply a minimum timeout. self._timeout = TIMEOUT_MIN # Create signals self._timedout_signal = yoton.Signal() self._closed_signal = yoton.Signal() # Lock to make setting and getting the status thread safe self._lock = threading.RLock() # Init variables to disconnected state self._set_status(0) ## Properties @property def hostname1(self): """ Get the hostname corresponding to this end of the connection. """ return self._hostname1 @property def hostname2(self): """ Get the hostname for the other end of this connection. Is empty string if not connected. """ return self._hostname2 @property def port1(self): """ Get the port number corresponding to this end of the connection. When binding, use this port to connect the other context. """ return self._port1 @property def port2(self): """ Get the port number for the other end of the connection. Is zero when not connected. """ return self._port2 @property def id1(self): """ The id of the context on this side of the connection. """ return self._context._id @property def id2(self): """ The id of the context on the other side of the connection. """ return self._id2 @property def pid1(self): """ The pid of the context on this side of the connection. (hint: os.getpid()) """ return os.getpid() @property def pid2(self): """ The pid of the context on the other side of the connection. """ return self._pid2 @property def is_alive(self): """ Get whether this connection instance is alive (i.e. either waiting or connected, and not in the process of closing). """ self._lock.acquire() try: return self._status >= 2 finally: self._lock.release() @property def is_connected(self): """ Get whether this connection instance is connected. """ self._lock.acquire() try: return self._status >= 3 finally: self._lock.release() @property def is_waiting(self): """ Get whether this connection instance is waiting for a connection. This is the state after using bind() and before another context connects to it. """ self._lock.acquire() try: return self._status == 2 finally: self._lock.release() @property def closed(self): """ Signal emitted when the connection closes. The first argument is the ContextConnection instance, the second argument is the reason for the disconnection (as a string). """ return self._closed_signal @Property def timeout(): """ Set/get the amount of seconds that no data is received from the other side after which the timedout signal is emitted. """ def fget(self): return self._timeout def fset(self, value): if not isinstance(value, (int,float)): raise ValueError('timeout must be a number.') if value < TIMEOUT_MIN: raise ValueError('timeout must be at least %1.2f.' % TIMEOUT_MIN) self._timeout = value return locals() @property def timedout(self): """ This signal is emitted when no data has been received for over 'timeout' seconds. This can mean that the connection is unstable, or that the other end is running extension code. Handlers are called with two arguments: the ContextConnection instance, and a boolean. The latter is True when the connection times out, and False when data is received again. """ return self._timedout_signal @Property def name(): """ Set/get the name that this connection is known by. This name can be used to obtain the instance using the Context.connections property. The name can be used in networks in which each context has a particular role, to easier distinguish between the different connections. Other than that, the name has no function. """ def fget(self): return self._name def fset(self, value): if not isinstance(value, basestring): raise ValueError('name must be a string.') self._name = value return locals() ## Public methods def flush(self, timeout=3.0): """ flush(timeout=3.0) Wait until all pending packages are send. An error is raised when the timeout passes while doing so. """ return self._flush(timeout) def close(self, reason=None): """ close(reason=None) Close the connection, disconnecting the two contexts and stopping all trafic. If the connection was waiting for a connection, it stops waiting. Optionally, a reason for closing can be specified. A closed connection cannot be reused. """ # No reason, user invoked close if reason is None: reason = STOP_DEFAULT_REASON # If already closed or closing, do nothing if self._status in [STATUS_CLOSED, STATUS_CLOSING]: return # Go! return self._general_close_method(reason, True) def close_on_problem(self, reason=None): """ close_on_problem(reason=None) Disconnect the connection, stopping all trafic. If it was waiting for a connection, we stop waiting. Optionally, a reason for stopping can be specified. This is highly recommended in case the connection is closed due to a problem. In contrast to the normal close() method, this method does not try to notify the other end of the closing. """ # No reason, some unspecified problem if reason is None: reason = STOP_UNSPECIFIED_PROBLEM # If already closed (status==0), do nothing if self._status == STATUS_CLOSED: return # If a connecion problem occurs during closing, we close the connection # so that flush will not block. # The closing that is now in progress will emit the event, so we # do not need to go into the _general_close_method(). if self._status == STATUS_CLOSING: self._set_status(STATUS_CLOSED) return # Go! return self._general_close_method(reason, False) def _general_close_method(self, reason, send_stop_message): """ general close method used by both close() and close_on_problem() """ # Remember current status. Set status to closing, which means that # the connection is still alive but cannot be closed again. old_status = self._status self._set_status(STATUS_CLOSING) # Check reason if not isinstance(reason, basestring): reason = STOP_INVALID_REASON # Tell other end to close? if send_stop_message and self.is_connected: self._notify_other_end_of_closing() # Close socket and set attributes to None self._set_status(STATUS_CLOSED) # Notify user, but only once self.closed.emit(self, reason) # Notify user ++ if self._context._verbose: tmp = STATUSMAP[old_status] print("Yoton: %s connection closed: %s" % (tmp, reason)) # if True: # tmp = STATUSMAP[old_status] # sys.__stdout__.write("Yoton: %s connection closed: %s" % (tmp, reason)) # sys.__stdout__.flush() ## Methods to overload def _bind(self, hostname, port, max_tries): raise NotImplemented() def _connect(self, hostname, port, timeout): raise NotImplemented() def _flush(self, timeout): raise NotImplemented() def _notify_other_end_of_closing(self): raise NotImplemented() def _send_package(self, package): raise NotImplemented() def _inject_package(self, package): raise NotImplemented() def _set_status(self, status): """ Used to change the status. Subclasses can reimplement this to get the desired behavior. """ self._lock.acquire() try: # Store status self._status = status # Notify user ++ if (status > 0) and self._context._verbose: action = STATUSMAP[status] print("Yoton: %s at %s:%s." % (action, self._hostname1, self._port1)) finally: self._lock.release() ## More ideas for connections class InterConnection(Connection): """ InterConnection(context, hostname, port, name='') Not implemented. Communication between two processes on the same machine can also be implemented via a memory mapped file or a pype. Would there be an advantage over the TcpConnection? """ pass class UDPConnection(Connection): """ UDPConnection(context, hostname, port, name='') Not implemented. Communication can also be done over UDP, but need protocol on top of UDP to make the connection robust. Is there a reason to implement this if we have Tcp? """ pass iep-3.7/iep/yoton/events.py0000664000175000017500000004643012271043447016172 0ustar almaralmar00000000000000# -*- coding: utf-8 -*- # Copyright (C) 2013 Almar Klein # # Yoton is distributed under the terms of the (new) BSD License. # The full license can be found in 'license.txt'. # This code is loosely based on the event system of Visvis and on the # signals system of Qt. # Note: Python has a buildin module (sched) that does some of the things # here. Hoever, only since Python3.3 is this buildin functionality # thread safe. And we need thread safety! """ Module yoton.events Yoton comes with a simple event system to enable event-driven applications. All channels are capable of running without the event system, but some channels have limitations. See the documentation of the channels for more information. Note that signals only work if events are processed. """ import os, sys, time import threading import weakref import yoton from yoton.misc import Property, getErrorMsg, PackageQueue class CallableObject(object): """ CallableObject(callable) A class to hold a callable. If it is a plain function, its reference is held (because it might be a closure). If it is a method, we keep the function name and a weak reference to the object. In this way, having for instance a signal bound to a method, the object is not prevented from being cleaned up. """ __slots__ = ['_ob', '_func'] # Use __slots__ to reduce memory footprint def __init__(self, c): # Check if not hasattr(c, '__call__'): raise ValueError('Error: given callback is not callable.') # Store funcion and object if hasattr(c, '__self__'): # Method, store object and method name self._ob = weakref.ref(c.__self__) self._func = c.__func__.__name__ elif hasattr(c, 'im_self'): # Method in older Python self._ob = weakref.ref(c.im_self) self._func = c.im_func.__name__ else: # Plain function self._func = c self._ob = None def isdead(self): """ Get whether the weak ref is dead. """ if self._ob: # Method return self._ob() is None else: return False def compare(self, other): """ compare this instance with another. """ if self._ob and other._ob: return (self._ob() is other._ob()) and (self._func == other._func) elif not (self._ob or other._ob): return self._func == other._func else: return False def __str__(self): return self._func.__str__() def call(self, *args, **kwargs): """ call(*args, **kwargs) Call the callable. Exceptions are caught and printed. """ if self.isdead(): return # Get function try: if self._ob: func = getattr(self._ob(), self._func) else: func = self._func except Exception: return # Call it try: return func(*args, **kwargs) except Exception: print('Exception while handling event:') print(getErrorMsg()) class Event(object): """ Event(callable, *args, **kwargs) An Event instance represents something that is going to be done. It consists of a callable and arguments to call it with. Instances of this class populate the event queue. """ __slots__ = ['_callable', '_args', '_kwargs', '_timeout'] def __init__(self, callable, *args, **kwargs): if isinstance(callable, CallableObject): self._callable = callable else: self._callable = CallableObject(callable) self._args = args self._kwargs = kwargs def dispatch(self): """ dispatch() Call the callable with the arguments and keyword-arguments specified at initialization. """ self._callable.call(*self._args, **self._kwargs) def _on_timeout(self): """ This is what theTimerThread calls. """ app.post_event(self) class Signal: """ Signal() The purpose of a signal is to provide an interface to bind/unbind to events and to fire them. One can bind() or unbind() a callable to the signal. When emitted, an event is created for each bound handler. Therefore, the event loop must run for signals to work. Some signals call the handlers using additional arguments to specify specific information. """ def __init__(self): self._handlers = [] @property def type(self): """ The type (__class__) of this event. """ return self.__class__ def bind(self, func): """ bind(func) Add an eventhandler to this event. The callback/handler (func) must be a callable. It is called with one argument: the event instance, which can contain additional information about the event. """ # make callable object (checks whether func is callable) cnew = CallableObject(func) # check -> warn for c in self._handlers: if cnew.compare(c): print("Warning: handler %s already present for %s" %(func, self)) return # add the handler self._handlers.append(cnew) def unbind(self, func=None): """ unbind(func=None) Unsubscribe a handler, If func is None, remove all handlers. """ if func is None: self._handlers[:] = [] else: cref = CallableObject(func) for c in [c for c in self._handlers]: # remove if callable matches func or object is destroyed if c.compare(cref) or c.isdead(): self._handlers.remove( c ) def emit(self, *args, **kwargs): """ emit(*args, **kwargs) Emit the signal, calling all bound callbacks with *args and **kwargs. An event is queues for each callback registered to this signal. Therefore it is safe to call this method from another thread. """ # Add an event for each callback toremove = [] for func in self._handlers: if func.isdead(): toremove.append(func) else: event = Event(func, *args, **kwargs) app.post_event(event) # Remove dead ones for func in toremove: self._handlers.remove(func) def emit_now(self, *args, **kwargs): """ emit_now(*args, **kwargs) Emit the signal *now*. All handlers are called from the calling thread. Beware, this should only be done from the same thread that runs the event loop. """ # Add an event for each callback toremove = [] for func in self._handlers: if func.isdead(): toremove.append(func) else: func.call(*args, **kwargs) # Remove dead ones for func in toremove: self._handlers.remove(func) class TheTimerThread(threading.Thread): """ TheTimerThread is a singleton thread that is used by all timers and delayed events to wait for a while (in a separate thread) and then post an event to the event-queue. By sharing a single thread timers stay lightweight and there is no time spend on initializing or tearing down threads. The downside is that when there are a lot of timers running at the same time, adding a timer may become a bit inefficient because the registered objects must be sorted each time an object is added. """ def __init__(self): threading.Thread.__init__(self) self.setDaemon(True) self._exit = False self._timers = [] self._somethingChanged = False self._condition = threading.Condition(threading.Lock()) def stop(self, timeout=1.0): self._exit = True self._condition.acquire() try: self._condition.notify() finally: self._condition.release() self.join(timeout) def add(self, timer): """ add(timer) Add item to the list of objects to track. The object should have a _timeout attribute, representing the time.time() at which it runs out, and an _on_timeout() method to call when it does. """ # Check if not (hasattr(timer, '_timeout') and hasattr(timer, '_on_timeout')): raise ValueError('Cannot add this object to theTimerThread.') # Add item self._condition.acquire() try: if timer not in self._timers: self._timers.append(timer) self._sort() self._somethingChanged = True self._condition.notify() finally: self._condition.release() def _sort(self): self._timers = sorted(self._timers, key=lambda x: x._timeout, reverse=True) def discard(self, timer): """Stop the timer if it hasn't finished yet""" self._condition.acquire() try: if timer in self._timers: self._timers.remove(timer) self._somethingChanged = True self._condition.notify() finally: self._condition.release() def run(self): self._condition.acquire() try: self._mainloop() finally: self._condition.release() def _mainloop(self): while not self._exit: # Set flag self._somethingChanged = False # Wait here, in wait() the undelying lock is released if self._timers: timer = self._timers[-1] timeout = timer._timeout - time.time() if timeout > 0: self._condition.wait(timeout) else: timer = None self._condition.wait() # Here the lock has been re-acquired. Take action? if self._exit: break if (timer is not None) and (not self._somethingChanged): if timer._on_timeout(): self._sort() # Keep and resort else: self._timers.pop() # Pop # Instantiate and start the single timer thread # We can do this as long as we do not wait for the threat, and the threat # does not do any imports: # http://docs.python.org/library/threading.html#importing-in-threaded-code theTimerThread = TheTimerThread() theTimerThread.start() class Timer(Signal): """ Timer(interval=1.0, oneshot=True) Timer class. You can bind callbacks to the timer. The timer is fired when it runs out of time. Parameters ---------- interval : number The interval of the timer in seconds. oneshot : bool Whether the timer should do a single shot, or run continuously. """ def __init__(self, interval=1.0, oneshot=True): Signal.__init__(self) # store Timer specific properties self.interval = interval self.oneshot = oneshot # self._timeout = 0 @Property def interval(): """ Set/get the timer's interval in seconds. """ def fget(self): return self._interval def fset(self, value): if not isinstance(value, (int, float)): raise ValueError('interval must be a float or integer.') if value <= 0: raise ValueError('interval must be larger than 0.') self._interval = float(value) return locals() @Property def oneshot(): """ Set/get whether this is a oneshot timer. If not is runs continuously. """ def fget(self): return self._oneshot def fset(self, value): self._oneshot = bool(value) return locals() @property def running(self): """ Get whether the timer is running. """ return self._timeout > 0 def start(self, interval=None, oneshot=None): """ start(interval=None, oneshot=None) Start the timer. If interval or oneshot are not given, their current values are used. """ # set properties? if interval is not None: self.interval = interval if oneshot is not None: self.oneshot = oneshot # put on self._timeout = time.time() + self.interval theTimerThread.add(self) def stop(self): """ stop() Stop the timer from running. """ theTimerThread.discard(self) self._timeout = 0 def _on_timeout(self): """ Method to call when the timer finishes. Called from event-loop-thread. """ # Emit signal self.emit() #print('timer timeout', self.oneshot) # Do we need to stop it now, or restart it if self.oneshot: # This timer instance is removed from the list of Timers # when the timeout is reached. self._timeout = 0 return False else: # keep in the thread self._timeout = time.time() + self.interval return True class YotonApplication(object): """ YotonApplication Represents the yoton application and contains functions for the event system. Multiple instances can be created, they will all operate on the same event queue and share attributes (because these are on the class, not on the instance). One instance of this class is always accesible via yoton.app. For convenience, several of its methods are also accessible directly from the yoton module namespace. """ # Event queues _event_queue = PackageQueue(10000, 'new') # Flag to stop event loop _stop_event_loop = False # Flag to signal whether we are in an event loop # Can be set externally if the event loop is hijacked. _in_event_loop = False # To allow other event loops to embed the yoton event loop _embedding_callback1 = None # The reference _embedding_callback2 = None # Used in post_event def call_later(self, func, timeout=0.0, *args, **kwargs): """ call_later(func, timeout=0.0, *args, **kwargs) Call the given function after the specified timeout. Parameters ---------- func : callable The function to call. timeout : number The time to wait in seconds. If zero, the event is put on the event queue. If negative, the event will be put at the front of the event queue, so that it's processed asap. args : arguments The arguments to call func with. kwargs: keyword arguments. The keyword arguments to call func with. """ # Wrap the object in an event event = Event(func, *args, **kwargs) # Put it in the queue if timeout > 0: self.post_event_later(event, timeout) elif timeout < 0: self.post_event_asap(event) # priority event else: self.post_event(event) def post_event(self, event): """ post_event(events) Post an event to the event queue. """ YotonApplication._event_queue.push(event) # if YotonApplication._embedding_callback2 is not None: YotonApplication._embedding_callback2 = None YotonApplication._embedding_callback1() def post_event_asap(self, event): """ post_event_asap(event) Post an event to the event queue. Handle as soon as possible; putting it in front of the queue. """ YotonApplication._event_queue.insert(event) # if YotonApplication._embedding_callback2 is not None: YotonApplication._embedding_callback2 = None YotonApplication._embedding_callback1() def post_event_later(self, event, delay): """ post_event_later(event, delay) Post an event to the event queue, but with a certain delay. """ event._timeout = time.time() + delay theTimerThread.add(event) # Calls post_event in due time def process_events(self, block=False): """ process_events(block=False) Process all yoton events currently in the queue. This function should be called periodically in order to keep the yoton event system running. block can be False (no blocking), True (block), or a float blocking for maximally 'block' seconds. """ # Reset callback for the embedding event loop YotonApplication._embedding_callback2 = YotonApplication._embedding_callback1 # Process events try: while True: event = YotonApplication._event_queue.pop(block) event.dispatch() block = False # Proceed until there are now more events except PackageQueue.Empty: pass def start_event_loop(self): """ start_event_loop() Enter an event loop that keeps calling yoton.process_events(). The event loop can be stopped using stop_event_loop(). """ # Dont go if we are in an event loop if YotonApplication._in_event_loop: return # Set flags YotonApplication._stop_event_loop = False YotonApplication._in_event_loop = True try: # Keep blocking for 3 seconds so a keyboardinterrupt still works while not YotonApplication._stop_event_loop: self.process_events(3.0) finally: # Unset flag YotonApplication._in_event_loop = False def stop_event_loop(self): """ stop_event_loop() Stops the event loop if it is running. """ if not YotonApplication._stop_event_loop: # Signal stop YotonApplication._stop_event_loop = True # Push an event so that process_events() unblocks def dummy(): pass self.post_event(Event(dummy)) def embed_event_loop(self, callback): """ embed_event_loop(callback) Embed the yoton event loop in another event loop. The given callback is called whenever a new yoton event is created. The callback should create an event in the other event-loop, which should lead to a call to the process_events() method. The given callback should be thread safe. Use None as an argument to disable the embedding. """ YotonApplication._embedding_callback1 = callback YotonApplication._embedding_callback2 = callback # Instantiate an application object app = YotonApplication() iep-3.7/iep.egg-info/0000775000175000017500000000000012573320440014623 5ustar almaralmar00000000000000iep-3.7/iep.egg-info/dependency_links.txt0000664000175000017500000000000112573320440020671 0ustar almaralmar00000000000000 iep-3.7/iep.egg-info/SOURCES.txt0000664000175000017500000002056712573320440016521 0ustar almaralmar00000000000000ieplauncher.py setup.py iep/__init__.py iep/__main__.py iep/contributors.txt iep/license.txt iep/yotonloader.py iep.egg-info/PKG-INFO iep.egg-info/SOURCES.txt iep.egg-info/dependency_links.txt iep.egg-info/entry_points.txt iep.egg-info/not-zip-safe iep.egg-info/requires.txt iep.egg-info/top_level.txt iep/codeeditor/__init__.py iep/codeeditor/_test.py iep/codeeditor/base.py iep/codeeditor/highlighter.py iep/codeeditor/manager.py iep/codeeditor/misc.py iep/codeeditor/qt.py iep/codeeditor/style.py iep/codeeditor/textutils.py iep/codeeditor/extensions/__init__.py iep/codeeditor/extensions/appearance.py iep/codeeditor/extensions/autocompletion.py iep/codeeditor/extensions/behaviour.py iep/codeeditor/extensions/calltip.py iep/codeeditor/parsers/__init__.py iep/codeeditor/parsers/c_parser.py iep/codeeditor/parsers/cython_parser.py iep/codeeditor/parsers/python_parser.py iep/codeeditor/parsers/tokens.py iep/iepcore/__init__.py iep/iepcore/about.py iep/iepcore/assistant.py iep/iepcore/baseTextCtrl.py iep/iepcore/codeparser.py iep/iepcore/commandline.py iep/iepcore/compactTabWidget.py iep/iepcore/editor.py iep/iepcore/editorTabs.py iep/iepcore/icons.py iep/iepcore/iepLogging.py iep/iepcore/kernelbroker.py iep/iepcore/license.py iep/iepcore/main.py iep/iepcore/menu.py iep/iepcore/shell.py iep/iepcore/shellInfoDialog.py iep/iepcore/shellStack.py iep/iepcore/splash.py iep/iepkernel/__init__.py iep/iepkernel/_nope.py iep/iepkernel/debug.py iep/iepkernel/guiintegration.py iep/iepkernel/guisupport.py iep/iepkernel/interpreter.py iep/iepkernel/introspection.py iep/iepkernel/magic.py iep/iepkernel/pipper.py iep/iepkernel/start.py iep/resources/defaultConfig.ssdf iep/resources/style_scintilla.ssdf iep/resources/style_solarizeddark.ssdf iep/resources/style_solarizedlight.ssdf iep/resources/tutorial.py iep/resources/appicons/ieplogo.icns iep/resources/appicons/ieplogo.ico iep/resources/appicons/ieplogo128.png iep/resources/appicons/ieplogo16.png iep/resources/appicons/ieplogo256.png iep/resources/appicons/ieplogo32.png iep/resources/appicons/ieplogo48.png iep/resources/appicons/ieplogo64.png iep/resources/appicons/py.icns iep/resources/appicons/py.ico iep/resources/appicons/pyzologo128.png iep/resources/appicons/pyzologo16.png iep/resources/appicons/pyzologo256.png iep/resources/appicons/pyzologo32.png iep/resources/appicons/pyzologo48.png iep/resources/appicons/pyzologo64.png iep/resources/appicons/ref.ico iep/resources/appicons/test.ico iep/resources/fonts/DejaVuSansMono-Bold.ttf iep/resources/fonts/DejaVuSansMono-BoldOblique.ttf iep/resources/fonts/DejaVuSansMono-Oblique.ttf iep/resources/fonts/DejaVuSansMono.ttf iep/resources/fonts/SourceCodePro-Bold.otf iep/resources/fonts/SourceCodePro-Regular.otf iep/resources/icons/accept.png iep/resources/icons/add.png iep/resources/icons/application.png iep/resources/icons/application_add.png iep/resources/icons/application_cascade.png iep/resources/icons/application_delete.png iep/resources/icons/application_double.png iep/resources/icons/application_edit.png iep/resources/icons/application_eraser.png iep/resources/icons/application_go.png iep/resources/icons/application_lightning.png iep/resources/icons/application_link.png iep/resources/icons/application_refresh.png iep/resources/icons/application_shell.png iep/resources/icons/application_view_tile.png iep/resources/icons/application_wrench.png iep/resources/icons/arrow_left.png iep/resources/icons/arrow_redo.png iep/resources/icons/arrow_refresh.png iep/resources/icons/arrow_rotate_anticlockwise.png iep/resources/icons/arrow_rotate_clockwise.png iep/resources/icons/arrow_undo.png iep/resources/icons/bug.png iep/resources/icons/bug_delete.png iep/resources/icons/bug_error.png iep/resources/icons/bullet_yellow.png iep/resources/icons/cancel.png iep/resources/icons/cog.png iep/resources/icons/comment_add.png iep/resources/icons/comment_delete.png iep/resources/icons/comments.png iep/resources/icons/cross.png iep/resources/icons/cut.png iep/resources/icons/debug_continue.png iep/resources/icons/debug_next.png iep/resources/icons/debug_quit.png iep/resources/icons/debug_return.png iep/resources/icons/debug_step.png iep/resources/icons/delete.png iep/resources/icons/disk.png iep/resources/icons/disk_as.png iep/resources/icons/disk_multiple.png iep/resources/icons/drive.png iep/resources/icons/error_add.png iep/resources/icons/filter.png iep/resources/icons/find.png iep/resources/icons/flag_green.png iep/resources/icons/folder.png iep/resources/icons/folder_hg.png iep/resources/icons/folder_page.png iep/resources/icons/folder_parent.png iep/resources/icons/folder_svn.png iep/resources/icons/help.png iep/resources/icons/information.png iep/resources/icons/keyboard.png iep/resources/icons/layout.png iep/resources/icons/link.png iep/resources/icons/magifier_zoom_out.png iep/resources/icons/magnifier.png iep/resources/icons/magnifier_zoom_in.png iep/resources/icons/monitor.png iep/resources/icons/overlay_disk.png iep/resources/icons/overlay_hg.png iep/resources/icons/overlay_link.png iep/resources/icons/overlay_star.png iep/resources/icons/overlay_svn.png iep/resources/icons/overlay_thumbnail.png iep/resources/icons/page_add.png iep/resources/icons/page_delete.png iep/resources/icons/page_delete_all.png iep/resources/icons/page_save.png iep/resources/icons/page_white.png iep/resources/icons/page_white_copy.png iep/resources/icons/page_white_dirty.png iep/resources/icons/page_white_gear.png iep/resources/icons/page_white_py.png iep/resources/icons/page_white_pyx.png iep/resources/icons/page_white_text.png iep/resources/icons/paste_plain.png iep/resources/icons/plugin.png iep/resources/icons/plugin_refresh.png iep/resources/icons/report.png iep/resources/icons/run_cell.png iep/resources/icons/run_file.png iep/resources/icons/run_file_script.png iep/resources/icons/run_lines.png iep/resources/icons/run_mainfile.png iep/resources/icons/run_mainfile_script.png iep/resources/icons/script.png iep/resources/icons/star.png iep/resources/icons/star2.png iep/resources/icons/star3.png iep/resources/icons/style.png iep/resources/icons/sum.png iep/resources/icons/text_align_justify.png iep/resources/icons/text_align_right.png iep/resources/icons/text_indent.png iep/resources/icons/text_indent_remove.png iep/resources/icons/text_padding_right.png iep/resources/icons/text_replace.png iep/resources/icons/tick.png iep/resources/icons/wand.png iep/resources/icons/wrench.png iep/resources/icons/wrench_orange.png iep/resources/images/iep_editor.png iep/resources/images/iep_run1.png iep/resources/images/iep_shell1.png iep/resources/images/iep_shell2.png iep/resources/images/iep_tools1.png iep/resources/images/iep_tools2.png iep/resources/images/iep_two_components.png iep/resources/translations/iep_ca_ES.tr iep/resources/translations/iep_ca_ES.tr.qm iep/resources/translations/iep_de_DE.tr iep/resources/translations/iep_de_DE.tr.qm iep/resources/translations/iep_es_ES.tr iep/resources/translations/iep_es_ES.tr.qm iep/resources/translations/iep_fr_FR.tr iep/resources/translations/iep_fr_FR.tr.qm iep/resources/translations/iep_nl_NL.tr iep/resources/translations/iep_nl_NL.tr.qm iep/resources/translations/iep_pt_BR.tr iep/resources/translations/iep_pt_PT.tr iep/resources/translations/iep_pt_PT.tr.qm iep/resources/translations/iep_ru_RU.tr iep/resources/translations/iep_ru_RU.tr.qm iep/resources/translations/iep_sk_SK.tr iep/resources/translations/iep_sk_SK.tr.qm iep/resources/translations/iep_zh_CN.tr iep/resources/translations/iep_zh_CN.tr.qm iep/resources/translations/notes_on_translating.txt iep/tools/__init__.py iep/tools/iepHistoryViewer.py iep/tools/iepInteractiveHelp.py iep/tools/iepLogger.py iep/tools/iepSourceStructure.py iep/tools/iepWebBrowser.py iep/tools/iepWorkspace.py iep/tools/iepFileBrowser/__init__.py iep/tools/iepFileBrowser/browser.py iep/tools/iepFileBrowser/importwizard.py iep/tools/iepFileBrowser/proxies.py iep/tools/iepFileBrowser/tasks.py iep/tools/iepFileBrowser/tree.py iep/tools/iepFileBrowser/utils.py iep/util/__init__.py iep/util/_locale.py iep/util/bootstrapconda.py iep/util/iepwizard.py iep/yoton/__init__.py iep/yoton/clientserver.py iep/yoton/connection.py iep/yoton/connection_itc.py iep/yoton/connection_tcp.py iep/yoton/context.py iep/yoton/core.py iep/yoton/events.py iep/yoton/misc.py iep/yoton/channels/__init__.py iep/yoton/channels/channels_base.py iep/yoton/channels/channels_file.py iep/yoton/channels/channels_pubsub.py iep/yoton/channels/channels_reqrep.py iep/yoton/channels/channels_state.py iep/yoton/channels/message_types.pyiep-3.7/iep.egg-info/entry_points.txt0000664000175000017500000000004612573320440020121 0ustar almaralmar00000000000000[console_scripts] iep = iep.__main__ iep-3.7/iep.egg-info/PKG-INFO0000664000175000017500000000502312573320440015720 0ustar almaralmar00000000000000Metadata-Version: 1.1 Name: iep Version: 3.7 Summary: the interactive editor for Python Home-page: http://www.iep-project.org Author: Almar Klein Author-email: almar.klein@gmail.com License: (new) BSD Download-URL: http://www.iep-project.org/downloads.html Description: Package iep IEP (pronounced as 'eep') is a cross-platform Python IDE focused on interactivity and introspection, which makes it very suitable for scientific computing. Its practical design is aimed at simplicity and efficiency. IEP is written in Python 3 and Qt. Binaries are available for Windows, Linux, and Mac. For questions, there is a discussion group. Two components + tools ---------------------- IEP consists of two main components, the editor and the shell, and uses a set of pluggable tools to help the programmer in various ways. Some example tools are source structure, project manager, interactive help, and workspace. Some key features ----------------- * Powerful *introspection* (autocompletion, calltips, interactive help) * Allows various ways to *run code interactively* or to run a file as a script. * The shells runs in a *subprocess* and can therefore be interrupted or killed. * *Multiple shells* can be used at the same time, and can be of different Python versions (from v2.4 to 3.x, including pypy) * Support for using several *GUI toolkits* interactively: PySide, PyQt4, wx, fltk, GTK, Tk. * Run IPython shell or native shell. * *Full Unicode support* in both editor and shell. * Various handy *tools*, plus the ability to make your own. * Matlab-style *cell notation* to mark code sections (by starting a line with '##'). * Highly customizable. Keywords: Python interactive IDE Qt science Platform: any Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Science/Research Classifier: Intended Audience :: Education Classifier: Intended Audience :: Developers Classifier: Topic :: Scientific/Engineering Classifier: Topic :: Software Development Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 3 Provides: iep iep-3.7/iep.egg-info/not-zip-safe0000664000175000017500000000000112401305453017046 0ustar almaralmar00000000000000 iep-3.7/iep.egg-info/requires.txt0000664000175000017500000000001012573320440017212 0ustar almaralmar00000000000000pyzolib iep-3.7/iep.egg-info/top_level.txt0000664000175000017500000000000412573320440017347 0ustar almaralmar00000000000000iep